ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDg1YzdjNzBiNy4uNjZiOWU3YSAxMDA2NDQKLS0tIGEvQ1JFRElUUworKysgYi9DUkVESVRTCkBAIC0zNDAxLDEwICszNDAxLDEwIEBACiAKIE46IFRoaWJhdXQgVmFyZW5lCiBFOiBULUJvbmVAcGFyaXNjLWxpbnV4Lm9yZwotVzogaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnLworVzogaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnL352YXJlbmV0LwogUDogMTAyNEQvQjdEMkYwNjMgRTY3QyAwRDQzIEE3NUUgMTJBNSBCQjFDICBGQTJGIDFFMzIgQzNEQSBCN0QyIEYwNjMKIEQ6IFBBLVJJU0MgcG9ydCBtaW5pb24sIFBEQyBhbmQgR1NDUFMyIGRyaXZlcnMsIGRlYnVnbG9ja3MgYW5kIG90aGVyIGJpdHMKLUQ6IFNvbWUgYml0cyBpbiBhbiBBUk0gcG9ydCwgUzFEMTNYWFggRkIgZHJpdmVyLCByYW5kb20gcGF0Y2hlcyBoZXJlIGFuZCB0aGVyZQorRDogU29tZSBBUk0gYXQ5MXJtOTIwMCBiaXRzLCBTMUQxM1hYWCBGQiBkcml2ZXIsIHJhbmRvbSBwYXRjaGVzIGhlcmUgYW5kIHRoZXJlCiBEOiBBRDE4ODkgc291bmQgZHJpdmVyCiBTOiBQYXJpcywgRnJhbmNlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCBiMDJmNDc2Li40ODgyNzIwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCisrKyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwpAQCAtMTgxLDggKzE4MSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBIGRyaXZlciBoYXMgYmVlbiBhZGRlZCB0byBhbGxvdyB1cGRhdGluZyBvZiBJbnRlbCBJQTMyIG1pY3JvY29kZSwKLWFjY2Vzc2libGUgYXMgYm90aCBhIGRldmZzIHJlZ3VsYXIgZmlsZSBhbmQgYXMgYSBub3JtYWwgKG1pc2MpCi1jaGFyYWN0ZXIgZGV2aWNlLiAgSWYgeW91IGFyZSBub3QgdXNpbmcgZGV2ZnMgeW91IG1heSBuZWVkIHRvOgorYWNjZXNzaWJsZSBhcyBhIG5vcm1hbCAobWlzYykgY2hhcmFjdGVyIGRldmljZS4gIElmIHlvdSBhcmUgbm90IHVzaW5nCit1ZGV2IHlvdSBtYXkgbmVlZCB0bzoKIAogbWtkaXIgL2Rldi9jcHUKIG1rbm9kIC9kZXYvY3B1L21pY3JvY29kZSBjIDEwIDE4NApAQCAtMjAxLDcgKzIwMSw5IEBACiB1ZGV2CiAtLS0tCiB1ZGV2IGlzIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGZvciBwb3B1bGF0aW5nIC9kZXYgZHluYW1pY2FsbHkgd2l0aAotb25seSBlbnRyaWVzIGZvciBkZXZpY2VzIGFjdHVhbGx5IHByZXNlbnQuIHVkZXYgcmVwbGFjZXMgZGV2ZnMuCitvbmx5IGVudHJpZXMgZm9yIGRldmljZXMgYWN0dWFsbHkgcHJlc2VudC4gIHVkZXYgcmVwbGFjZXMgdGhlIGJhc2ljCitmdW5jdGlvbmFsaXR5IG9mIGRldmZzLCB3aGlsZSBhbGxvd2luZyBwZXJzaXN0YW50IGRldmljZSBuYW1pbmcgZm9yCitkZXZpY2VzLgogCiBGVVNFCiAtLS0tCkBAIC0yMzEsMTggKzIzMywxMyBAQAogZW5hYmxlIGl0IHRvIG9wZXJhdGUgb3ZlciBkaXZlcnNlIG1lZGlhIGxheWVycy4gIElmIHlvdSB1c2UgUFBQLAogdXBncmFkZSBwcHBkIHRvIGF0IGxlYXN0IDIuNC4wLgogCi1JZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmcywgeW91IG11c3QgaGF2ZSB0aGUgZGV2aWNlIGZpbGUgL2Rldi9wcHAKK0lmIHlvdSBhcmUgbm90IHVzaW5nIHVkZXYsIHlvdSBtdXN0IGhhdmUgdGhlIGRldmljZSBmaWxlIC9kZXYvcHBwCiB3aGljaCBjYW4gYmUgbWFkZSBieToKIAogbWtub2QgL2Rldi9wcHAgYyAxMDggMAogCiBhcyByb290LgogCi1JZiB5b3UgdXNlIGRldmZzZCBhbmQgYnVpbGQgcHBwIHN1cHBvcnQgYXMgbW9kdWxlcywgeW91IHdpbGwgbmVlZAotdGhlIGZvbGxvd2luZyBpbiB5b3VyIC9ldGMvZGV2ZnNkLmNvbmYgZmlsZToKLQotTE9PS1VQCVBQUAlNT0RMT0FECi0KIElzZG40ay11dGlscwogLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCA1YTI4ODJkLi42NmUxY2Y3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw4IEBACiAJICAgIGtlcm5lbC1oYWNraW5nLnhtbCBrZXJuZWwtbG9ja2luZy54bWwgZGV2aWNlaW9ib29rLnhtbCBcCiAJICAgIHByb2Nmcy1ndWlkZS54bWwgd3JpdGluZ191c2JfZHJpdmVyLnhtbCBcCiAJICAgIGtlcm5lbC1hcGkueG1sIGpvdXJuYWwtYXBpLnhtbCBsc20ueG1sIHVzYi54bWwgXAotCSAgICBnYWRnZXQueG1sIGxpYmF0YS54bWwgbXRkbmFuZC54bWwgbGlicnMueG1sIHJhcGlkaW8ueG1sCisJICAgIGdhZGdldC54bWwgbGliYXRhLnhtbCBtdGRuYW5kLnhtbCBsaWJycy54bWwgcmFwaWRpby54bWwgXAorCSAgICBnZW5lcmljaXJxLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjRhNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbApAQCAtMCwwICsxLDQ3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJHZW5lcmljLUlSUS1HdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+TGludXggZ2VuZXJpYyBJUlEgaGFuZGxpbmc8L3RpdGxlPgorCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5UaG9tYXM8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5HbGVpeG5lcjwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnRnbHhAbGludXRyb25peC5kZTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+SW5nbzwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPk1vbG5hcjwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPm1pbmdvQGVsdGUuaHU8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDA1LTIwMDY8L3llYXI+CisgICA8aG9sZGVyPlRob21hcyBHbGVpeG5lcjwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDUtMjAwNjwveWVhcj4KKyAgIDxob2xkZXI+SW5nbyBNb2xuYXI8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorCVRoZSBnZW5lcmljIGludGVycnVwdCBoYW5kbGluZyBsYXllciBpcyBkZXNpZ25lZCB0byBwcm92aWRlIGEKKwljb21wbGV0ZSBhYnN0cmFjdGlvbiBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIGRldmljZSBkcml2ZXJzLgorCUl0IGlzIGFibGUgdG8gaGFuZGxlIGFsbCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGludGVycnVwdCBjb250cm9sbGVyCisJaGFyZHdhcmUuIERldmljZSBkcml2ZXJzIHVzZSBnZW5lcmljIEFQSSBmdW5jdGlvbnMgdG8gcmVxdWVzdCwgZW5hYmxlLAorCWRpc2FibGUgYW5kIGZyZWUgaW50ZXJydXB0cy4gVGhlIGRyaXZlcnMgZG8gbm90IGhhdmUgdG8ga25vdyBhbnl0aGluZworCWFib3V0IGludGVycnVwdCBoYXJkd2FyZSBkZXRhaWxzLCBzbyB0aGV5IGNhbiBiZSB1c2VkIG9uIGRpZmZlcmVudAorCXBsYXRmb3JtcyB3aXRob3V0IGNvZGUgY2hhbmdlcy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgIAlUaGlzIGRvY3VtZW50YXRpb24gaXMgcHJvdmlkZWQgdG8gZGV2ZWxvcGVycyB3aG8gd2FudCB0byBpbXBsZW1lbnQKKwlhbiBpbnRlcnJ1cHQgc3Vic3lzdGVtIGJhc2VkIGZvciB0aGVpciBhcmNoaXRlY3R1cmUsIHdpdGggdGhlIGhlbHAKKwlvZiB0aGUgZ2VuZXJpYyBJUlEgaGFuZGxpbmcgbGF5ZXIuCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InJhdGlvbmFsZSI+CisgICAgPHRpdGxlPlJhdGlvbmFsZTwvdGl0bGU+CisJPHBhcmE+CisJVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGludGVycnVwdCBoYW5kbGluZyBpbiBMaW51eCBpcyB1c2luZworCXRoZSBfX2RvX0lSUSgpIHN1cGVyLWhhbmRsZXIsIHdoaWNoIGlzIGFibGUgdG8gZGVhbCB3aXRoIGV2ZXJ5CisJdHlwZSBvZiBpbnRlcnJ1cHQgbG9naWMuCisJPC9wYXJhPgorCTxwYXJhPgorCU9yaWdpbmFsbHksIFJ1c3NlbGwgS2luZyBpZGVudGlmaWVkIGRpZmZlcmVudCB0eXBlcyBvZiBoYW5kbGVycyB0bworCWJ1aWxkIGEgcXVpdGUgdW5pdmVyc2FsIHNldCBmb3IgdGhlIEFSTSBpbnRlcnJ1cHQgaGFuZGxlcgorCWltcGxlbWVudGF0aW9uIGluIExpbnV4IDIuNS8yLjYuIEhlIGRpc3Rpbmd1aXNoZWQgYmV0d2VlbjoKKwk8aXRlbWl6ZWRsaXN0PgorCSAgPGxpc3RpdGVtPjxwYXJhPkxldmVsIHR5cGU8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5FZGdlIHR5cGU8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5TaW1wbGUgdHlwZTwvcGFyYT48L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorCUluIHRoZSBTTVAgd29ybGQgb2YgdGhlIF9fZG9fSVJRKCkgc3VwZXItaGFuZGxlciBhbm90aGVyIHR5cGUKKwl3YXMgaWRlbnRpZmllZDoKKwk8aXRlbWl6ZWRsaXN0PgorCSAgPGxpc3RpdGVtPjxwYXJhPlBlciBDUFUgdHlwZTwvcGFyYT48L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorCTwvcGFyYT4KKwk8cGFyYT4KKwlUaGlzIHNwbGl0IGltcGxlbWVudGF0aW9uIG9mIGhpZ2hsZXZlbCBJUlEgaGFuZGxlcnMgYWxsb3dzIHVzIHRvCisJb3B0aW1pemUgdGhlIGZsb3cgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBmb3IgZWFjaCBzcGVjaWZpYworCWludGVycnVwdCB0eXBlLiBUaGlzIHJlZHVjZXMgY29tcGxleGl0eSBpbiB0aGF0IHBhcnRpY3VsYXIgY29kZXBhdGgKKwlhbmQgYWxsb3dzIHRoZSBvcHRpbWl6ZWQgaGFuZGxpbmcgb2YgYSBnaXZlbiB0eXBlLgorCTwvcGFyYT4KKwk8cGFyYT4KKwlUaGUgb3JpZ2luYWwgZ2VuZXJhbCBJUlEgaW1wbGVtZW50YXRpb24gdXNlZCBod19pbnRlcnJ1cHRfdHlwZQorCXN0cnVjdHVyZXMgYW5kIHRoZWlyIC0+YWNrKCksIC0+ZW5kKCkgW2V0Yy5dIGNhbGxiYWNrcyB0bworCWRpZmZlcmVudGlhdGUgdGhlIGZsb3cgY29udHJvbCBpbiB0aGUgc3VwZXItaGFuZGxlci4gVGhpcyBsZWFkcyB0bworCWEgbWl4IG9mIGZsb3cgbG9naWMgYW5kIGxvd2xldmVsIGhhcmR3YXJlIGxvZ2ljLCBhbmQgaXQgYWxzbyBsZWFkcworCXRvIHVubmVjZXNzYXJ5IGNvZGUgZHVwbGljYXRpb246IGZvciBleGFtcGxlIGluIGkzODYsIHRoZXJlIGlzIGEKKwlpb2FwaWNfbGV2ZWxfaXJxIGFuZCBhIGlvYXBpY19lZGdlX2lycSBpcnEtdHlwZSB3aGljaCBzaGFyZSBtYW55CisJb2YgdGhlIGxvd2xldmVsIGRldGFpbHMgYnV0IGhhdmUgZGlmZmVyZW50IGZsb3cgaGFuZGxpbmcuCisJPC9wYXJhPgorCTxwYXJhPgorCUEgbW9yZSBuYXR1cmFsIGFic3RyYWN0aW9uIGlzIHRoZSBjbGVhbiBzZXBhcmF0aW9uIG9mIHRoZQorCSdpcnEgZmxvdycgYW5kIHRoZSAnY2hpcCBkZXRhaWxzJy4KKwk8L3BhcmE+CisJPHBhcmE+CisJQW5hbHlzaW5nIGEgY291cGxlIG9mIGFyY2hpdGVjdHVyZSdzIElSUSBzdWJzeXN0ZW0gaW1wbGVtZW50YXRpb25zCisJcmV2ZWFscyB0aGF0IG1vc3Qgb2YgdGhlbSBjYW4gdXNlIGEgZ2VuZXJpYyBzZXQgb2YgJ2lycSBmbG93JworCW1ldGhvZHMgYW5kIG9ubHkgbmVlZCB0byBhZGQgdGhlIGNoaXAgbGV2ZWwgc3BlY2lmaWMgY29kZS4KKwlUaGUgc2VwYXJhdGlvbiBpcyBhbHNvIHZhbHVhYmxlIGZvciAoc3ViKWFyY2hpdGVjdHVyZXMKKwl3aGljaCBuZWVkIHNwZWNpZmljIHF1aXJrcyBpbiB0aGUgaXJxIGZsb3cgaXRzZWxmIGJ1dCBub3QgaW4gdGhlCisJY2hpcC1kZXRhaWxzIC0gYW5kIHRodXMgcHJvdmlkZXMgYSBtb3JlIHRyYW5zcGFyZW50IElSUSBzdWJzeXN0ZW0KKwlkZXNpZ24uCisJPC9wYXJhPgorCTxwYXJhPgorCUVhY2ggaW50ZXJydXB0IGRlc2NyaXB0b3IgaXMgYXNzaWduZWQgaXRzIG93biBoaWdobGV2ZWwgZmxvdworCWhhbmRsZXIsIHdoaWNoIGlzIG5vcm1hbGx5IG9uZSBvZiB0aGUgZ2VuZXJpYworCWltcGxlbWVudGF0aW9ucy4gKFRoaXMgaGlnaGxldmVsIGZsb3cgaGFuZGxlciBpbXBsZW1lbnRhdGlvbiBhbHNvCisJbWFrZXMgaXQgc2ltcGxlIHRvIHByb3ZpZGUgZGVtdWx0aXBsZXhpbmcgaGFuZGxlcnMgd2hpY2ggY2FuIGJlCisJZm91bmQgaW4gZW1iZWRkZWQgcGxhdGZvcm1zIG9uIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4pCisJPC9wYXJhPgorCTxwYXJhPgorCVRoZSBzZXBhcmF0aW9uIG1ha2VzIHRoZSBnZW5lcmljIGludGVycnVwdCBoYW5kbGluZyBsYXllciBtb3JlCisJZmxleGlibGUgYW5kIGV4dGVuc2libGUuIEZvciBleGFtcGxlLCBhbiAoc3ViKWFyY2hpdGVjdHVyZSBjYW4KKwl1c2UgYSBnZW5lcmljIGlycS1mbG93IGltcGxlbWVudGF0aW9uIGZvciAnbGV2ZWwgdHlwZScgaW50ZXJydXB0cworCWFuZCBhZGQgYSAoc3ViKWFyY2hpdGVjdHVyZSBzcGVjaWZpYyAnZWRnZSB0eXBlJyBpbXBsZW1lbnRhdGlvbi4KKwk8L3BhcmE+CisJPHBhcmE+CisJVG8gbWFrZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsIGVhc2llciBhbmQgcHJldmVudCB0aGUKKwlicmVha2FnZSBvZiBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMsIHRoZSBfX2RvX0lSUSgpIHN1cGVyLWhhbmRsZXIKKwlpcyBzdGlsbCBhdmFpbGFibGUuIFRoaXMgbGVhZHMgdG8gYSBraW5kIG9mIGR1YWxpdHkgZm9yIHRoZSB0aW1lCisJYmVpbmcuIE92ZXIgdGltZSB0aGUgbmV3IG1vZGVsIHNob3VsZCBiZSB1c2VkIGluIG1vcmUgYW5kIG1vcmUKKwlhcmNoaXRlY3R1cmVzLCBhcyBpdCBlbmFibGVzIHNtYWxsZXIgYW5kIGNsZWFuZXIgSVJRIHN1YnN5c3RlbXMuCisJPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJidWdzIj4KKyAgICA8dGl0bGU+S25vd24gQnVncyBBbmQgQXNzdW1wdGlvbnM8L3RpdGxlPgorICAgIDxwYXJhPgorCU5vbmUgKGtub2NrIG9uIHdvb2QpLgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJBYnN0cmFjdGlvbiI+CisgICAgPHRpdGxlPkFic3RyYWN0aW9uIGxheWVyczwvdGl0bGU+CisgICAgPHBhcmE+CisJVGhlcmUgYXJlIHRocmVlIG1haW4gbGV2ZWxzIG9mIGFic3RyYWN0aW9uIGluIHRoZSBpbnRlcnJ1cHQgY29kZToKKwk8b3JkZXJlZGxpc3Q+CisJICA8bGlzdGl0ZW0+PHBhcmE+SGlnaGxldmVsIGRyaXZlciBBUEk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5IaWdobGV2ZWwgSVJRIGZsb3cgaGFuZGxlcnM8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5DaGlwbGV2ZWwgaGFyZHdhcmUgZW5jYXBzdWxhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgorCTwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorICAgIDxzZWN0MT4KKwk8dGl0bGU+SW50ZXJydXB0IGNvbnRyb2wgZmxvdzwvdGl0bGU+CisJPHBhcmE+CisJRWFjaCBpbnRlcnJ1cHQgaXMgZGVzY3JpYmVkIGJ5IGFuIGludGVycnVwdCBkZXNjcmlwdG9yIHN0cnVjdHVyZQorCWlycV9kZXNjLiBUaGUgaW50ZXJydXB0IGlzIHJlZmVyZW5jZWQgYnkgYW4gJ3Vuc2lnbmVkIGludCcgbnVtZXJpYworCXZhbHVlIHdoaWNoIHNlbGVjdHMgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGRlY3JpcHRpb24gc3RydWN0dXJlCisJaW4gdGhlIGRlc2NyaXB0b3Igc3RydWN0dXJlcyBhcnJheS4KKwlUaGUgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgY29udGFpbnMgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwb2ludGVycworCXRvIHRoZSBpbnRlcnJ1cHQgZmxvdyBtZXRob2QgYW5kIHRoZSBpbnRlcnJ1cHQgY2hpcCBzdHJ1Y3R1cmUKKwl3aGljaCBhcmUgYXNzaWduZWQgdG8gdGhpcyBpbnRlcnJ1cHQuCisJPC9wYXJhPgorCTxwYXJhPgorCVdoZW5ldmVyIGFuIGludGVycnVwdCB0cmlnZ2VycywgdGhlIGxvd2xldmVsIGFyY2ggY29kZSBjYWxscyBpbnRvCisJdGhlIGdlbmVyaWMgaW50ZXJydXB0IGNvZGUgYnkgY2FsbGluZyBkZXNjLT5oYW5kbGVfaXJxKCkuCisJVGhpcyBoaWdobGV2ZWwgSVJRIGhhbmRsaW5nIGZ1bmN0aW9uIG9ubHkgdXNlcyBkZXNjLT5jaGlwIHByaW1pdGl2ZXMKKwlyZWZlcmVuY2VkIGJ5IHRoZSBhc3NpZ25lZCBjaGlwIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorCTwvcGFyYT4KKyAgICA8L3NlY3QxPgorICAgIDxzZWN0MT4KKwk8dGl0bGU+SGlnaGxldmVsIERyaXZlciBBUEk8L3RpdGxlPgorCTxwYXJhPgorCSAgVGhlIGhpZ2hsZXZlbCBEcml2ZXIgQVBJIGNvbnNpc3RzIG9mIGZvbGxvd2luZyBmdW5jdGlvbnM6CisJICA8aXRlbWl6ZWRsaXN0PgorCSAgPGxpc3RpdGVtPjxwYXJhPnJlcXVlc3RfaXJxKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5mcmVlX2lycSgpPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+ZGlzYWJsZV9pcnEoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmVuYWJsZV9pcnEoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmRpc2FibGVfaXJxX25vc3luYygpIChTTVAgb25seSk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5zeW5jaHJvbml6ZV9pcnEoKSAoU01QIG9ubHkpPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+c2V0X2lycV90eXBlKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5zZXRfaXJxX3dha2UoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPnNldF9pcnFfZGF0YSgpPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+c2V0X2lycV9jaGlwKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5zZXRfaXJxX2NoaXBfZGF0YSgpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisJICBTZWUgdGhlIGF1dG9nZW5lcmF0ZWQgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKwk8L3BhcmE+CisgICAgPC9zZWN0MT4KKyAgICA8c2VjdDE+CisJPHRpdGxlPkhpZ2hsZXZlbCBJUlEgZmxvdyBoYW5kbGVyczwvdGl0bGU+CisJPHBhcmE+CisJICBUaGUgZ2VuZXJpYyBsYXllciBwcm92aWRlcyBhIHNldCBvZiBwcmUtZGVmaW5lZCBpcnEtZmxvdyBtZXRob2RzOgorCSAgPGl0ZW1pemVkbGlzdD4KKwkgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVfbGV2ZWxfaXJxPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlX2VkZ2VfaXJxPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlX3NpbXBsZV9pcnE8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVfcGVyY3B1X2lycTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPC9pdGVtaXplZGxpc3Q+CisJICBUaGUgaW50ZXJydXB0IGZsb3cgaGFuZGxlcnMgKGVpdGhlciBwcmVkZWZpbmVkIG9yIGFyY2hpdGVjdHVyZQorCSAgc3BlY2lmaWMpIGFyZSBhc3NpZ25lZCB0byBzcGVjaWZpYyBpbnRlcnJ1cHRzIGJ5IHRoZSBhcmNoaXRlY3R1cmUKKwkgIGVpdGhlciBkdXJpbmcgYm9vdHVwIG9yIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uCisJPC9wYXJhPgorCTxzZWN0Mj4KKwk8dGl0bGU+RGVmYXVsdCBmbG93IGltcGxlbWVudGF0aW9uczwvdGl0bGU+CisJICAgIDxzZWN0Mz4KKwkgCTx0aXRsZT5IZWxwZXIgZnVuY3Rpb25zPC90aXRsZT4KKwkJPHBhcmE+CisJCVRoZSBoZWxwZXIgZnVuY3Rpb25zIGNhbGwgdGhlIGNoaXAgcHJpbWl0aXZlcyBhbmQKKwkJYXJlIHVzZWQgYnkgdGhlIGRlZmF1bHQgZmxvdyBpbXBsZW1lbnRhdGlvbnMuCisJCVRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CisJCTxwcm9ncmFtbGlzdGluZz4KK2RlZmF1bHRfZW5hYmxlKGlycSkKK3sKKwlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKK30KKworZGVmYXVsdF9kaXNhYmxlKGlycSkKK3sKKwlpZiAoIWRlbGF5X2Rpc2FibGUoaXJxKSkKKwkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOworfQorCitkZWZhdWx0X2FjayhpcnEpCit7CisJY2hpcC0+YWNrKGlycSk7Cit9CisKK2RlZmF1bHRfbWFza19hY2soaXJxKQoreworCWlmIChjaGlwLT5tYXNrX2FjaykgeworCQljaGlwLT5tYXNrX2FjayhpcnEpOworCX0gZWxzZSB7CisJCWNoaXAtPm1hc2soaXJxKTsKKwkJY2hpcC0+YWNrKGlycSk7CisJfQorfQorCitub29wKGlycSkKK3sKK30KKworCQk8L3Byb2dyYW1saXN0aW5nPgorCSAgICAgICAgPC9wYXJhPgorCSAgICA8L3NlY3QzPgorCTwvc2VjdDI+CisJPHNlY3QyPgorCTx0aXRsZT5EZWZhdWx0IGZsb3cgaGFuZGxlciBpbXBsZW1lbnRhdGlvbnM8L3RpdGxlPgorCSAgICA8c2VjdDM+CisJIAk8dGl0bGU+RGVmYXVsdCBMZXZlbCBJUlEgZmxvdyBoYW5kbGVyPC90aXRsZT4KKwkJPHBhcmE+CisJCWhhbmRsZV9sZXZlbF9pcnEgcHJvdmlkZXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uCisJCWZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CisJCTxwcm9ncmFtbGlzdGluZz4KK2Rlc2MtPmNoaXAtPnN0YXJ0KCk7CitoYW5kbGVfSVJRX2V2ZW50KGRlc2MtPmFjdGlvbik7CitkZXNjLT5jaGlwLT5lbmQoKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9wYXJhPgorICAgCSAgICA8L3NlY3QzPgorCSAgICA8c2VjdDM+CisJIAk8dGl0bGU+RGVmYXVsdCBFZGdlIElSUSBmbG93IGhhbmRsZXI8L3RpdGxlPgorCQk8cGFyYT4KKwkJaGFuZGxlX2VkZ2VfaXJxIHByb3ZpZGVzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbgorCQlmb3IgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cy4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CisJCTxwcm9ncmFtbGlzdGluZz4KK2lmIChkZXNjLT5zdGF0dXMgJmFtcDsgcnVubmluZykgeworCWRlc2MtPmNoaXAtPmhvbGQoKTsKKwlkZXNjLT5zdGF0dXMgfD0gcGVuZGluZyB8IG1hc2tlZDsKKwlyZXR1cm47Cit9CitkZXNjLT5jaGlwLT5zdGFydCgpOworZGVzYy0+c3RhdHVzIHw9IHJ1bm5pbmc7CitkbyB7CisJaWYgKGRlc2MtPnN0YXR1cyAmYW1wOyBtYXNrZWQpCisJCWRlc2MtPmNoaXAtPmVuYWJsZSgpOworCWRlc2Mtc3RhdHVzICZhbXA7PSB+cGVuZGluZzsKKwloYW5kbGVfSVJRX2V2ZW50KGRlc2MtPmFjdGlvbik7Cit9IHdoaWxlIChzdGF0dXMgJmFtcDsgcGVuZGluZyk7CitkZXNjLXN0YXR1cyAmYW1wOz0gfnJ1bm5pbmc7CitkZXNjLT5jaGlwLT5lbmQoKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9wYXJhPgorICAgCSAgICA8L3NlY3QzPgorCSAgICA8c2VjdDM+CisJIAk8dGl0bGU+RGVmYXVsdCBzaW1wbGUgSVJRIGZsb3cgaGFuZGxlcjwvdGl0bGU+CisJCTxwYXJhPgorCQloYW5kbGVfc2ltcGxlX2lycSBwcm92aWRlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24KKwkJZm9yIHNpbXBsZSBpbnRlcnJ1cHRzLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQlOb3RlOiBUaGUgc2ltcGxlIGZsb3cgaGFuZGxlciBkb2VzIG5vdCBjYWxsIGFueQorCQloYW5kbGVyL2NoaXAgcHJpbWl0aXZlcy4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CisJCTxwcm9ncmFtbGlzdGluZz4KK2hhbmRsZV9JUlFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9wYXJhPgorICAgCSAgICA8L3NlY3QzPgorCSAgICA8c2VjdDM+CisJIAk8dGl0bGU+RGVmYXVsdCBwZXIgQ1BVIGZsb3cgaGFuZGxlcjwvdGl0bGU+CisJCTxwYXJhPgorCQloYW5kbGVfcGVyY3B1X2lycSBwcm92aWRlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24KKwkJZm9yIHBlciBDUFUgaW50ZXJydXB0cy4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJUGVyIENQVSBpbnRlcnJ1cHRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBTTVAgYW5kCisJCXRoZSBoYW5kbGVyIHByb3ZpZGVzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIHdpdGhvdXQKKwkJbG9ja2luZy4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CisJCTxwcm9ncmFtbGlzdGluZz4KK2Rlc2MtPmNoaXAtPnN0YXJ0KCk7CitoYW5kbGVfSVJRX2V2ZW50KGRlc2MtPmFjdGlvbik7CitkZXNjLT5jaGlwLT5lbmQoKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9wYXJhPgorICAgCSAgICA8L3NlY3QzPgorCTwvc2VjdDI+CisJPHNlY3QyPgorCTx0aXRsZT5RdWlya3MgYW5kIG9wdGltaXphdGlvbnM8L3RpdGxlPgorCTxwYXJhPgorCVRoZSBnZW5lcmljIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yICdjbGVhbicgYXJjaGl0ZWN0dXJlcyBhbmQgY2hpcHMsCisJd2hpY2ggaGF2ZSBubyBwbGF0Zm9ybS1zcGVjaWZpYyBJUlEgaGFuZGxpbmcgcXVpcmtzLiBJZiBhbiBhcmNoaXRlY3R1cmUKKwluZWVkcyB0byBpbXBsZW1lbnQgcXVpcmtzIG9uIHRoZSAnZmxvdycgbGV2ZWwgdGhlbiBpdCBjYW4gZG8gc28gYnkKKwlvdmVycmlkaW5nIHRoZSBoaWdobGV2ZWwgaXJxLWZsb3cgaGFuZGxlci4KKwk8L3BhcmE+CisJPC9zZWN0Mj4KKwk8c2VjdDI+CisJPHRpdGxlPkRlbGF5ZWQgaW50ZXJydXB0IGRpc2FibGU8L3RpdGxlPgorCTxwYXJhPgorCVRoaXMgcGVyIGludGVycnVwdCBzZWxlY3RhYmxlIGZlYXR1cmUsIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGJ5IFJ1c3NlbGwKKwlLaW5nIGluIHRoZSBBUk0gaW50ZXJydXB0IGltcGxlbWVudGF0aW9uLCBkb2VzIG5vdCBtYXNrIGFuIGludGVycnVwdAorCWF0IHRoZSBoYXJkd2FyZSBsZXZlbCB3aGVuIGRpc2FibGVfaXJxKCkgaXMgY2FsbGVkLiBUaGUgaW50ZXJydXB0IGlzCisJa2VwdCBlbmFibGVkIGFuZCBpcyBtYXNrZWQgaW4gdGhlIGZsb3cgaGFuZGxlciB3aGVuIGFuIGludGVycnVwdCBldmVudAorCWhhcHBlbnMuIFRoaXMgcHJldmVudHMgbG9zaW5nIGVkZ2UgaW50ZXJydXB0cyBvbiBoYXJkd2FyZSB3aGljaCBkb2VzCisJbm90IHN0b3JlIGFuIGVkZ2UgaW50ZXJydXB0IGV2ZW50IHdoaWxlIHRoZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgYXQKKwl0aGUgaGFyZHdhcmUgbGV2ZWwuIFdoZW4gYW4gaW50ZXJydXB0IGFycml2ZXMgd2hpbGUgdGhlIElSUV9ESVNBQkxFRAorCWZsYWcgaXMgc2V0LCB0aGVuIHRoZSBpbnRlcnJ1cHQgaXMgbWFza2VkIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCBhbmQKKwl0aGUgSVJRX1BFTkRJTkcgYml0IGlzIHNldC4gV2hlbiB0aGUgaW50ZXJydXB0IGlzIHJlLWVuYWJsZWQgYnkKKwllbmFibGVfaXJxKCkgdGhlIHBlbmRpbmcgYml0IGlzIGNoZWNrZWQgYW5kIGlmIGl0IGlzIHNldCwgdGhlCisJaW50ZXJydXB0IGlzIHJlc2VudCBlaXRoZXIgdmlhIGhhcmR3YXJlIG9yIGJ5IGEgc29mdHdhcmUgcmVzZW5kCisJbWVjaGFuaXNtLiAoSXQncyBuZWNlc3NhcnkgdG8gZW5hYmxlIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQgd2hlbgorCXlvdSB3YW50IHRvIHVzZSB0aGUgZGVsYXllZCBpbnRlcnJ1cHQgZGlzYWJsZSBmZWF0dXJlIGFuZCB5b3VyCisJaGFyZHdhcmUgaXMgbm90IGNhcGFibGUgb2YgcmV0cmlnZ2VyaW5nCWFuIGludGVycnVwdC4pCisJVGhlIGRlbGF5ZWQgaW50ZXJydXB0IGRpc2FibGUgY2FuIGJlIHJ1bnRpbWUgZW5hYmxlZCwgcGVyIGludGVycnVwdCwKKwlieSBzZXR0aW5nIHRoZSBJUlFfREVMQVlFRF9ESVNBQkxFIGZsYWcgaW4gdGhlIGlycV9kZXNjIHN0YXR1cyBmaWVsZC4KKwk8L3BhcmE+CisJPC9zZWN0Mj4KKyAgICA8L3NlY3QxPgorICAgIDxzZWN0MT4KKwk8dGl0bGU+Q2hpcGxldmVsIGhhcmR3YXJlIGVuY2Fwc3VsYXRpb248L3RpdGxlPgorCTxwYXJhPgorCVRoZSBjaGlwIGxldmVsIGhhcmR3YXJlIGRlc2NyaXB0b3Igc3RydWN0dXJlIGlycV9jaGlwCisJY29udGFpbnMgYWxsIHRoZSBkaXJlY3QgY2hpcCByZWxldmFudCBmdW5jdGlvbnMsIHdoaWNoCisJY2FuIGJlIHV0aWxpemVkIGJ5IHRoZSBpcnEgZmxvdyBpbXBsZW1lbnRhdGlvbnMuCisJICA8aXRlbWl6ZWRsaXN0PgorCSAgPGxpc3RpdGVtPjxwYXJhPmFjaygpPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+bWFza19hY2soKSAtIE9wdGlvbmFsLCByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2U8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5tYXNrKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT51bm1hc2soKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPnJldHJpZ2dlcigpIC0gT3B0aW9uYWw8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5zZXRfdHlwZSgpIC0gT3B0aW9uYWw8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5zZXRfd2FrZSgpIC0gT3B0aW9uYWw8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDwvaXRlbWl6ZWRsaXN0PgorCVRoZXNlIHByaW1pdGl2ZXMgYXJlIHN0cmljdGx5IGludGVuZGVkIHRvIG1lYW4gd2hhdCB0aGV5IHNheTogYWNrIG1lYW5zCisJQUNLLCBtYXNraW5nIG1lYW5zIG1hc2tpbmcgb2YgYW4gSVJRIGxpbmUsIGV0Yy4gSXQgaXMgdXAgdG8gdGhlIGZsb3cKKwloYW5kbGVyKHMpIHRvIHVzZSB0aGVzZSBiYXNpYyB1bml0cyBvZiBsb3dsZXZlbCBmdW5jdGlvbmFsaXR5LgorCTwvcGFyYT4KKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRvaXJxIj4KKyAgICAgPHRpdGxlPl9fZG9fSVJRIGVudHJ5IHBvaW50PC90aXRsZT4KKyAgICAgPHBhcmE+CisgCVRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBfX2RvX0lSUSgpIGlzIGFuIGFsdGVybmF0aXZlIGVudHJ5CisJcG9pbnQgZm9yIGFsbCB0eXBlcyBvZiBpbnRlcnJ1cHRzLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorCVRoaXMgaGFuZGxlciB0dXJuZWQgb3V0IHRvIGJlIG5vdCBzdWl0YWJsZSBmb3IgYWxsCisJaW50ZXJydXB0IGhhcmR3YXJlIGFuZCB3YXMgdGhlcmVmb3JlIHJlaW1wbGVtZW50ZWQgd2l0aCBzcGxpdAorCWZ1bmN0aW9uYWxpdHkgZm9yIGVnZGUvbGV2ZWwvc2ltcGxlL3BlcmNwdSBpbnRlcnJ1cHRzLiBUaGlzIGlzIG5vdAorCW9ubHkgYSBmdW5jdGlvbmFsIG9wdGltaXphdGlvbi4gSXQgYWxzbyBzaG9ydGVucyBjb2RlIHBhdGhzIGZvcgorCWludGVycnVwdHMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlUbyBtYWtlIHVzZSBvZiB0aGUgc3BsaXQgaW1wbGVtZW50YXRpb24sIHJlcGxhY2UgdGhlIGNhbGwgdG8KKwlfX2RvX0lSUSBieSBhIGNhbGwgdG8gZGVzYy0+Y2hpcC0+aGFuZGxlX2lycSgpIGFuZCBhc3NvY2lhdGUKKyAgICAgICAgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgZnVuY3Rpb24gdG8gZGVzYy0+Y2hpcC0+aGFuZGxlX2lycSgpLgorCUluIG1vc3QgY2FzZXMgdGhlIGdlbmVyaWMgaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkCisJYmUgc3VmZmljaWVudC4KKyAgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImxvY2tpbmciPgorICAgICA8dGl0bGU+TG9ja2luZyBvbiBTTVA8L3RpdGxlPgorICAgICA8cGFyYT4KKwlUaGUgbG9ja2luZyBvZiBjaGlwIHJlZ2lzdGVycyBpcyB1cCB0byB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQKKwlkZWZpbmVzIHRoZSBjaGlwIHByaW1pdGl2ZXMuIFRoZXJlIGlzIGEgY2hpcC0+bG9jayBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkCisJZm9yIHNlcmlhbGl6YXRpb24sIGJ1dCB0aGUgZ2VuZXJpYyBsYXllciBkb2VzIG5vdCB0b3VjaCBpdC4gVGhlIHBlci1pcnEKKwlzdHJ1Y3R1cmUgaXMgcHJvdGVjdGVkIHZpYSBkZXNjLT5sb2NrLCBieSB0aGUgZ2VuZXJpYyBsYXllci4KKyAgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJzdHJ1Y3RzIj4KKyAgICAgPHRpdGxlPlN0cnVjdHVyZXM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgVGhpcyBjaGFwdGVyIGNvbnRhaW5zIHRoZSBhdXRvZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb2YgdGhlIHN0cnVjdHVyZXMgd2hpY2ggYXJlCisgICAgIHVzZWQgaW4gdGhlIGdlbmVyaWMgSVJRIGxheWVyLgorICAgICA8L3BhcmE+CishSWluY2x1ZGUvbGludXgvaXJxLmgKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgdGhlIGF1dG9nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUga2VybmVsIEFQSSBmdW5jdGlvbnMKKyAgICAgIHdoaWNoIGFyZSBleHBvcnRlZC4KKyAgICAgPC9wYXJhPgorIUVrZXJuZWwvaXJxL21hbmFnZS5jCishRWtlcm5lbC9pcnEvY2hpcC5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iaW50ZnVuY3Rpb25zIj4KKyAgICAgPHRpdGxlPkludGVybmFsIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgdGhlIGF1dG9nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLgorICAgICA8L3BhcmE+CishSWtlcm5lbC9pcnEvaGFuZGxlLmMKKyFJa2VybmVsL2lycS9jaGlwLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJjcmVkaXRzIj4KKyAgICAgPHRpdGxlPkNyZWRpdHM8L3RpdGxlPgorCTxwYXJhPgorCQlUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoaXMgZG9jdW1lbnQ6CisJCTxvcmRlcmVkbGlzdD4KKwkJCTxsaXN0aXRlbT48cGFyYT5UaG9tYXMgR2xlaXhuZXI8ZW1haWw+dGdseEBsaW51dHJvbml4LmRlPC9lbWFpbD48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5JbmdvIE1vbG5hcjxlbWFpbD5taW5nb0BlbHRlLmh1PC9lbWFpbD48L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9vcmRlcmVkbGlzdD4KKwk8L3BhcmE+CisgIDwvY2hhcHRlcj4KKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCmluZGV4IDM2MzBhMGQuLjFhZTRkYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbApAQCAtMzQ4LDExICszNDgsNiBAQAogICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKLSAgPGNoYXB0ZXIgaWQ9ImRldmZzIj4KLSAgICAgPHRpdGxlPlRoZSBEZXZpY2UgRmlsZSBTeXN0ZW08L3RpdGxlPgotIUVmcy9kZXZmcy9iYXNlLmMKLSAgPC9jaGFwdGVyPgotCiAgIDxjaGFwdGVyIGlkPSJzeXNmcyI+CiAgICAgIDx0aXRsZT5UaGUgRmlsZXN5c3RlbSBmb3IgRXhwb3J0aW5nIEtlcm5lbCBPYmplY3RzPC90aXRsZT4KICFFZnMvc3lzZnMvZmlsZS5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAppbmRleCA2MzAxNTljLi5hOGM4Y2NlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKQEAgLTE4OCw5ICsxODgsOSBAQAogCTxzZWN0MT4KIAkJPHRpdGxlPlBhcnRpdGlvbiBkZWZpbmVzPC90aXRsZT4KIAkJPHBhcmE+Ci0JCQlJZiB5b3Ugd2FudCB0byBkaXZpZGUgeW91ciBkZXZpY2UgaW50byBwYXJpdGl0aW9ucywgdGhlbgotCQkJZW5hYmxlIHRoZSBjb25maWd1cmF0aW9uIHN3aXRjaCBDT05GSUdfTVREX1BBUklUSU9OUyBhbmQgZGVmaW5lCi0JCQlhIHBhcml0aW9uaW5nIHNjaGVtZSBzdWl0YWJsZSB0byB5b3VyIGJvYXJkLgorCQkJSWYgeW91IHdhbnQgdG8gZGl2aWRlIHlvdXIgZGV2aWNlIGludG8gcGFydGl0aW9ucywgdGhlbgorCQkJZW5hYmxlIHRoZSBjb25maWd1cmF0aW9uIHN3aXRjaCBDT05GSUdfTVREX1BBUlRJVElPTlMgYW5kIGRlZmluZQorCQkJYSBwYXJ0aXRpb25pbmcgc2NoZW1lIHN1aXRhYmxlIHRvIHlvdXIgYm9hcmQuCiAJCTwvcGFyYT4KIAkJPHByb2dyYW1saXN0aW5nPgogI2RlZmluZSBOVU1fUEFSVElUSU9OUyAyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwKaW5kZXggZmRmZjk4NC4uYjYyOWRhMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWRlb2Jvb2sudG1wbApAQCAtOTc2LDcgKzk3Niw3IEBACiAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxpbmc8L3RpdGxlPgogICA8cGFyYT4KICAgICAgICAgT3VyIGV4YW1wbGUgaGFuZGxlciBpcyBmb3IgYW4gSVNBIGJ1cyBkZXZpY2UuIElmIGl0IHdhcyBQQ0kgeW91IHdvdWxkIGJlCi0gICAgICAgIGFibGUgdG8gc2hhcmUgdGhlIGludGVycnVwdCBhbmQgd291bGQgaGF2ZSBzZXQgU0FfU0hJUlEgdG8gaW5kaWNhdGUgYSAKKyAgICAgICAgYWJsZSB0byBzaGFyZSB0aGUgaW50ZXJydXB0IGFuZCB3b3VsZCBoYXZlIHNldCBJUlFGX1NIQVJFRCB0byBpbmRpY2F0ZSBhCiAgICAgICAgIHNoYXJlZCBJUlEuIFdlIHBhc3MgdGhlIGRldmljZSBwb2ludGVyIGFzIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBhcmd1bWVudC4gV2UKICAgICAgICAgZG9uJ3QgbmVlZCB0byBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgb25lIGNhcmQgYnV0IGRvaW5nIHRoaXMgd2lsbCBtYWtlIGl0CiAgICAgICAgIGVhc2llciB0byB1cGdyYWRlIHRoZSBkcml2ZXIgZm9yIG11bHRpcGxlIGRldmljZXMgaW4gdGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSVBNSS50eHQgYi9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CmluZGV4IGJmMWNmOThkLi4wMjU2ODA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vSVBNSS50eHQKQEAgLTEwLDcgKzEwLDcgQEAKIEl0IHByb3ZpZGVzIGZvciBkeW5hbWljIGRpc2NvdmVyeSBvZiBzZW5zb3JzIGluIHRoZSBzeXN0ZW0gYW5kIHRoZQogYWJpbGl0eSB0byBtb25pdG9yIHRoZSBzZW5zb3JzIGFuZCBiZSBpbmZvcm1lZCB3aGVuIHRoZSBzZW5zb3IncwogdmFsdWVzIGNoYW5nZSBvciBnbyBvdXRzaWRlIGNlcnRhaW4gYm91bmRhcmllcy4gIEl0IGFsc28gaGFzIGEKLXN0YW5kYXJkaXplZCBkYXRhYmFzZSBmb3IgZmllbGQtcmVwbGFjYWJsZSB1bml0cyAoRlJVcykgYW5kIGEgd2F0Y2hkb2cKK3N0YW5kYXJkaXplZCBkYXRhYmFzZSBmb3IgZmllbGQtcmVwbGFjZWFibGUgdW5pdHMgKEZSVXMpIGFuZCBhIHdhdGNoZG9nCiB0aW1lci4KIAogVG8gdXNlIHRoaXMsIHlvdSBuZWVkIGFuIGludGVyZmFjZSB0byBhbiBJUE1JIGNvbnRyb2xsZXIgaW4geW91cgpAQCAtNjQsNyArNjQsNyBAQAogSVBNSSBkZWZpbmVzIGEgc3RhbmRhcmQgd2F0Y2hkb2cgdGltZXIuICBZb3UgY2FuIGVuYWJsZSB0aGlzIHdpdGggdGhlCiAnSVBNSSBXYXRjaGRvZyBUaW1lcicgY29uZmlnIG9wdGlvbi4gIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50bwogdGhlIGtlcm5lbCwgdGhlbiB2aWEgYSBrZXJuZWwgY29tbWFuZC1saW5lIG9wdGlvbiB5b3UgY2FuIGhhdmUgdGhlCi13YXRjaGRvZyB0aW1lciBzdGFydCBhcyBzb29uIGFzIGl0IGludGl0aWFsaXplcy4gIEl0IGFsc28gaGF2ZSBhIGxvdAord2F0Y2hkb2cgdGltZXIgc3RhcnQgYXMgc29vbiBhcyBpdCBpbml0aWFsaXplcy4gIEl0IGFsc28gaGF2ZSBhIGxvdAogb2Ygb3RoZXIgb3B0aW9ucywgc2VlIHRoZSAnV2F0Y2hkb2cnIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KIE5vdGUgdGhhdCB5b3UgY2FuIGFsc28gaGF2ZSB0aGUgd2F0Y2hkb2cgY29udGludWUgdG8gcnVuIGlmIGl0IGlzCiBjbG9zZWQgKGJ5IGRlZmF1bHQgaXQgaXMgZGlzYWJsZWQgb24gY2xvc2UpLiAgR28gaW50byB0aGUgJ1dhdGNoZG9nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lSUS50eHQgYi9Eb2N1bWVudGF0aW9uL0lSUS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxMWU3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vSVJRLnR4dApAQCAtMCwwICsxLDIyIEBACitXaGF0IGlzIGFuIElSUT8KKworQW4gSVJRIGlzIGFuIGludGVycnVwdCByZXF1ZXN0IGZyb20gYSBkZXZpY2UuCitDdXJyZW50bHkgdGhleSBjYW4gY29tZSBpbiBvdmVyIGEgcGluLCBvciBvdmVyIGEgcGFja2V0LgorU2V2ZXJhbCBkZXZpY2VzIG1heSBiZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgcGluIHRodXMKK3NoYXJpbmcgYW4gSVJRLgorCitBbiBJUlEgbnVtYmVyIGlzIGEga2VybmVsIGlkZW50aWZpZXIgdXNlZCB0byB0YWxrIGFib3V0IGEgaGFyZHdhcmUKK2ludGVycnVwdCBzb3VyY2UuICBUeXBpY2FsbHkgdGhpcyBpcyBhbiBpbmRleCBpbnRvIHRoZSBnbG9iYWwgaXJxX2Rlc2MKK2FycmF5LCBidXQgZXhjZXB0IGZvciB3aGF0IGxpbnV4L2ludGVycnVwdC5oIGltcGxlbWVudHMgdGhlIGRldGFpbHMKK2FyZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMuCisKK0FuIElSUSBudW1iZXIgaXMgYW4gZW51bWVyYXRpb24gb2YgdGhlIHBvc3NpYmxlIGludGVycnVwdCBzb3VyY2VzIG9uIGEKK21hY2hpbmUuICBUeXBpY2FsbHkgd2hhdCBpcyBlbnVtZXJhdGVkIGlzIHRoZSBudW1iZXIgb2YgaW5wdXQgcGlucyBvbgorYWxsIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbiB0aGUgc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgSVNBCit3aGF0IGlzIGVudW1lcmF0ZWQgYXJlIHRoZSAxNiBpbnB1dCBwaW5zIG9uIHRoZSB0d28gaTgyNTkgaW50ZXJydXB0Citjb250cm9sbGVycy4KKworQXJjaGl0ZWN0dXJlcyBjYW4gYXNzaWduIGFkZGl0aW9uYWwgbWVhbmluZyB0byB0aGUgSVJRIG51bWJlcnMsIGFuZAorYXJlIGVuY291cmFnZWQgdG8gaW4gdGhlIGNhc2UgIHdoZXJlIHRoZXJlIGlzIGFueSBtYW51YWwgY29uZmlndXJhdGlvbgorb2YgdGhlIGhhcmR3YXJlIGludm9sdmVkLiAgVGhlIElTQSBJUlFzIGFyZSBhIGNsYXNzaWMgZXhhbXBsZSBvZgorYXNzaWduaW5nIHRoaXMga2luZCBvZiBhZGRpdGlvbmFsIG1lYW5pbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JFQURNRS5EQUM5NjAgYi9Eb2N1bWVudGF0aW9uL1JFQURNRS5EQUM5NjAKaW5kZXggOThlYTYxNy4uMGU4ZjYxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SRUFETUUuREFDOTYwCisrKyBiL0RvY3VtZW50YXRpb24vUkVBRE1FLkRBQzk2MApAQCAtNzgsOSArNzgsOSBAQAogdGVybXMgYXJlIGluIHVzZSBpbiB0aGUgTXlsZXggZG9jdW1lbnRhdGlvbjsgSSBoYXZlIGNob3NlbiB0byBzdGFuZGFyZGl6ZSBvbgogdGhlIG1vcmUgZ2VuZXJpYyAiTG9naWNhbCBEcml2ZSIgYW5kICJEcml2ZSBHcm91cCIuCiAKLURBQzk2MCBSQUlEIGRpc2sgZGV2aWNlcyBhcmUgbmFtZWQgaW4gdGhlIHN0eWxlIG9mIHRoZSBEZXZpY2UgRmlsZSBTeXN0ZW0KLShERVZGUykuICBUaGUgZGV2aWNlIGNvcnJlc3BvbmRpbmcgdG8gTG9naWNhbCBEcml2ZSBEIG9uIENvbnRyb2xsZXIgQyBpcwotcmVmZXJyZWQgdG8gYXMgL2Rldi9yZC9jQ2RELCBhbmQgdGhlIHBhcnRpdGlvbnMgYXJlIGNhbGxlZCAvZGV2L3JkL2NDZERwMQorREFDOTYwIFJBSUQgZGlzayBkZXZpY2VzIGFyZSBuYW1lZCBpbiB0aGUgc3R5bGUgb2YgdGhlIG9ic29sZXRlIERldmljZSBGaWxlCitTeXN0ZW0gKERFVkZTKS4gIFRoZSBkZXZpY2UgY29ycmVzcG9uZGluZyB0byBMb2dpY2FsIERyaXZlIEQgb24gQ29udHJvbGxlciBDCitpcyByZWZlcnJlZCB0byBhcyAvZGV2L3JkL2NDZEQsIGFuZCB0aGUgcGFydGl0aW9ucyBhcmUgY2FsbGVkIC9kZXYvcmQvY0NkRHAxCiB0aHJvdWdoIC9kZXYvcmQvY0NkRHA3LiAgRm9yIGV4YW1wbGUsIHBhcnRpdGlvbiAzIG9mIExvZ2ljYWwgRHJpdmUgNSBvbgogQ29udHJvbGxlciAyIGlzIHJlZmVycmVkIHRvIGFzIC9kZXYvcmQvYzJkNXAzLiAgTm90ZSB0aGF0IHVubGlrZSB3aXRoIFNDU0kKIGRpc2tzIHRoZSBkZXZpY2UgbmFtZXMgd2lsbCBub3QgY2hhbmdlIGluIHRoZSBldmVudCBvZiBhIGRpc2sgZHJpdmUgZmFpbHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eCBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eAppbmRleCBkNGM2ZDNhLi40M2VkYjRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHgKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4CkBAIC04NSw3ICs4NSw3IEBACiAyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZSAKICAgIGNvbmZpZ3VyZWQgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVycyB0byBhY2Nlc3MgUENJIFRoaXMgYWxsb3dzIAogICAgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpIG9mIG1lbW9yeSBvbiB0aGUgYnVzLiAKLSAgIFRoZSBkaXNhZHZhbnRhZGdlIG9mIHRoaXMgaXMgdGhhdCBldmVyeSBQQ0kgYWNjZXNzIHJlcXVpcmVzIAorICAgVGhlIGRpc2FkdmFudGFnZSBvZiB0aGlzIGlzIHRoYXQgZXZlcnkgUENJIGFjY2VzcyByZXF1aXJlcyAKICAgIHRocmVlIGxvY2FsIHJlZ2lzdGVyIGFjY2Vzc2VzIHBsdXMgYSBzcGlubG9jaywgYnV0IGluIHNvbWUgCiAgICBjYXNlcyB0aGUgcGVyZm9ybWFuY2UgaGl0IGlzIGFjY2VwdGFibGUuIEluIGFkZGl0aW9uLCB5b3UgY2Fubm90IAogICAgbW1hcCgpIFBDSSBkZXZpY2VzIGluIHRoaXMgY2FzZSBkdWUgdG8gdGhlIGluZGlyZWN0IG5hdHVyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWdpZXBjYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZ2llcGNhLnR4dAppbmRleCA4ODgyMGZlLi5mMjU2MGUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZ2llcGNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZ2llcGNhLnR4dApAQCAtMiw3ICsyLDcgQEAKIGh0dHA6Ly93d3cuZGlnaS5jb20gZm9yIFBDSSBjYXJkcy4gIFRoZXkgbm8gbG9uZ2VyIG1haW50YWluIHRoaXMgZHJpdmVyLAogYW5kIGhhdmUgbm8gMi42IGRyaXZlciBmb3IgSVNBIGNhcmRzLgogCi1UaGlzIGRyaXZlciByZXF1aXJlcyBhIG51bWJlciBvZiB1c2VyLXNwYWNlIHRvb2xzLiAgVGhleSBjYW4gYmUgYXF1aXJlZCBmcm9tCitUaGlzIGRyaXZlciByZXF1aXJlcyBhIG51bWJlciBvZiB1c2VyLXNwYWNlIHRvb2xzLiAgVGhleSBjYW4gYmUgYWNxdWlyZWQgZnJvbQogaHR0cDovL3d3dy5kaWdpLmNvbSwgYnV0IG9ubHkgd29ya3Mgd2l0aCAyLjQga2VybmVscy4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggMDI3Mjg1ZC4uOTlmMjE5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNiwxNyArNiw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglkZXZmcwotV2hlbjoJSnVseSAyMDA1Ci1GaWxlczoJZnMvZGV2ZnMvKiwgaW5jbHVkZS9saW51eC9kZXZmc19mcyouaCBhbmQgYXNzb3J0ZWQgZGV2ZnMKLQlmdW5jdGlvbiBjYWxscyB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdHJlZQotV2h5OglJdCBoYXMgYmVlbiB1bm1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIHllYXJzLCBoYXMgdW5maXhhYmxlCi0JcmFjZXMsIGNvbnRhaW5zIGEgbmFtaW5nIHBvbGljeSB3aXRoaW4gdGhlIGtlcm5lbCB0aGF0IGlzCi0JYWdhaW5zdCB0aGUgTFNCLCBhbmQgY2FuIGJlIHJlcGxhY2VkIGJ5IHVzaW5nIHVkZXYuCi1XaG86CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglSQVcgZHJpdmVyIChDT05GSUdfUkFXX0RSSVZFUikKIFdoZW46CURlY2VtYmVyIDIwMDUKIFdoeToJZGVjbGFyZWQgb2Jzb2xldGUgc2luY2Uga2VybmVsIDIuNi4zCkBAIC0xMzIsMTYgKzEyMSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglhdTF4MDBfdWFydCBkcml2ZXIKLVdoZW46CUphbnVhcnkgMjAwNgotV2h5OglUaGUgODI1MCBzZXJpYWwgZHJpdmVyIG5vdyBoYXMgdGhlIGFiaWxpdHkgdG8gZGVhbCB3aXRoIHRoZSBkaWZmZXJlbmNlcwotCWJldHdlZW4gdGhlIHN0YW5kYXJkIDgyNTAgZmFtaWx5IG9mIFVBUlRzIGFuZCB0aGVpciBzbGlnaHRseSBzdHJhbmdlCi0JYnJvdGhlciBvbiBBbGNoZW15IFNPQ3MuICBUaGUgbG9zcyBvZiBmZWF0dXJlcyBpcyBub3QgY29uc2lkZXJlZCBhbgotCWlzc3VlLgotV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OiAgIGVlcHJvMTAwIG5ldHdvcmsgZHJpdmVyCiBXaGVuOiAgIEphbnVhcnkgMjAwNwogV2h5OiAgICByZXBsYWNlZCBieSB0aGUgZTEwMCBkcml2ZXIKQEAgLTE3Nyw2ICsxNTYsMTYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CVVudXNlZCBFWFBPUlRfU1lNQk9ML0VYUE9SVF9TWU1CT0xfR1BMIGV4cG9ydHMKKwkodGVtcG9yYXJ5IHRyYW5zaXRpb24gY29uZmlnIG9wdGlvbiBwcm92aWRlZCB1bnRpbCB0aGVuKQorCVRoZSB0cmFuc2l0aW9uIGNvbmZpZyBvcHRpb24gd2lsbCBhbHNvIGJlIHJlbW92ZWQgYXQgdGhlIHNhbWUgdGltZS4KK1doZW46CWJlZm9yZSAyLjYuMTkKK1doeToJVW51c2VkIHN5bWJvbHMgYXJlIGJvdGggaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJpbmFyeQorCWFuZCBhcmUgb2Z0ZW4gYSBzaWduIG9mICJ3cm9uZyBBUEkiCitXaG86CUFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKHRhc2tsaXN0X2xvY2spCiBXaGVuOglBdWd1c3QgMjAwNgogRmlsZXM6CWtlcm5lbC9mb3JrLmMKQEAgLTIyNCwzICsyMTMsNTYgQEAKIFdobzoJTmljayBQaWdnaW4gPG5waWdnaW5Ac3VzZS5kZT4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVN1cHBvcnQgZm9yIHRoZSBNSVBTIEVWOTYxMDAgZXZhbHVhdGlvbiBib2FyZAorV2hlbjoJU2VwdGVtYmVyIDIwMDYKK1doeToJRG9lcyBubyBsb25nZXIgYnVpbGQgc2luY2UgYXQgbGVhc3QgTm92ZW1iZXIgMTUsIDIwMDMsIGFwcGFyZW50bHkKKwlubyB1c2VyYmFzZSBsZWZ0LgorV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglTdXBwb3J0IGZvciB0aGUgTW9tZW50dW0gLyBQTUMtU2llcnJhIEphZ3VhciBBVFggZXZhbHVhdGlvbiBib2FyZAorV2hlbjoJU2VwdGVtYmVyIDIwMDYKK1doeToJRG9lcyBubyBsb25nZXIgYnVpbGQgc2luY2UgcXVpdGUgc29tZSB0aW1lLCBhbmQgd2FzIG5ldmVyIHBvcHVsYXIsCisJZHVlIHRvIHRoZSBwbGF0Zm9ybSBiZWluZyByZXBsYWNlZCBieSBzdWNjZXNzb3IgbW9kZWxzLiAgQXBwYXJlbnRseQorCW5vIHVzZXIgYmFzZSBsZWZ0LiAgSXQgYWxzbyBpcyBvbmUgb2YgdGhlIGxhc3QgdXNlcnMgb2YKKwlXQU5UX1BBR0VfVklSVFVBTC4KK1dobzoJUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgdGhlIE1vbWVudHVtIE9jZWxvdCwgT2NlbG90IDMsIE9jZWxvdCBDIGFuZCBPY2Vsb3QgRworV2hlbjoJU2VwdGVtYmVyIDIwMDYKK1doeToJU29tZSBkbyBubyBsb25nZXIgYnVpbGQgYW5kIGFwcGFyZW50bHkgdGhlcmUgaXMgbm8gdXNlciBiYXNlIGxlZnQKKwlmb3IgdGhlc2UgcGxhdGZvcm1zLgorV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglTdXBwb3J0IGZvciBNSVBTIFRlY2hub2xvZ2llcycgQWx0YXMgYW5kIFNFQUQgZXZhbHVhdGlvbiBib2FyZAorV2hlbjoJU2VwdGVtYmVyIDIwMDYKK1doeToJU29tZSBkbyBubyBsb25nZXIgYnVpbGQgYW5kIGFwcGFyZW50bHkgdGhlcmUgaXMgbm8gdXNlciBiYXNlIGxlZnQKKwlmb3IgdGhlc2UgcGxhdGZvcm1zLiAgSGFyZHdhcmUgb3V0IG9mIHByb2R1Y3Rpb24gc2luY2Ugc2V2ZXJhbCB5ZWFycy4KK1dobzoJUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgdGhlIElUODE3Mi1iYXNlZCBwbGF0Zm9ybXMsIElURSA4MTcyRyBhbmQgR2xvYmVzcGFuIElWUgorV2hlbjoJU2VwdGVtYmVyIDIwMDYKK1doeToJQ29kZSBkb2VzIG5vIGxvbmdlciBidWlsZCBzaW5jZSBhdCBsZWFzdCAyLjYuMCwgIGFwcGFyZW50bHkgdGhlcmUgaXMKKwlubyB1c2VyIGJhc2UgbGVmdCBmb3IgdGhlc2UgcGxhdGZvcm1zLiAgSGFyZHdhcmUgb3V0IG9mIHByb2R1Y3Rpb24KKwlzaW5jZSBzZXZlcmFsIHllYXJzIGFuZCBoYXJkbHkgYSB0cmFjZSBvZiB0aGUgbWFudWZhY3R1cmVyIGxlZnQgb24KKwl0aGUgbmV0LgorV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglJbnRlcnJ1cHQgb25seSBTQV8qIGZsYWdzCitXaGVuOglKYW51YXIgMjAwNworV2h5OglUaGUgaW50ZXJydXB0IHJlbGF0ZWQgU0FfKiBmbGFncyBhcmUgcmVwbGFjZWQgYnkgSVJRRl8qIHRvIG1vdmUgdGhlbQorCW91dCBvZiB0aGUgc2lnbmFsIG5hbWVzcGFjZS4KKworV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2V4YW1wbGUuYyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnNfZXhhbXBsZS5jCmluZGV4IDNkNDcxM2EuLjJkNmExNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnNfZXhhbXBsZS5jCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnNfZXhhbXBsZS5jCkBAIC0yNjQsNiArMjY0LDE1IEBACiB9OwogCiAKK3N0cnVjdCBzaW1wbGVfY2hpbGRyZW4geworCXN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaW1wbGVfY2hpbGRyZW4gKnRvX3NpbXBsZV9jaGlsZHJlbihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJcmV0dXJuIGl0ZW0gPyBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLCBzdHJ1Y3Qgc2ltcGxlX2NoaWxkcmVuLCBncm91cCkgOiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpzaW1wbGVfY2hpbGRyZW5fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzaW1wbGVfY2hpbGQgKnNpbXBsZV9jaGlsZDsKQEAgLTMwNCw3ICszMTMsMTMgQEAKICJpdGVtcyBoYXZlIG9ubHkgb25lIGF0dHJpYnV0ZSB0aGF0IGlzIHJlYWRhYmxlIGFuZCB3cml0ZWFibGUuXG4iKTsKIH0KIAorc3RhdGljIHZvaWQgc2ltcGxlX2NoaWxkcmVuX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCWtmcmVlKHRvX3NpbXBsZV9jaGlsZHJlbihpdGVtKSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHNpbXBsZV9jaGlsZHJlbl9pdGVtX29wcyA9IHsKKwkucmVsZWFzZSAJPSBzaW1wbGVfY2hpbGRyZW5fcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJPSBzaW1wbGVfY2hpbGRyZW5fYXR0cl9zaG93LAogfTsKIApAQCAtMzQ1LDEwICszNjAsNiBAQAogICogY2hpbGRyZW4gb2YgaXRzIG93bi4KICAqLwogCi1zdHJ1Y3Qgc2ltcGxlX2NoaWxkcmVuIHsKLQlzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwOwotfTsKLQogc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwX2NoaWxkcmVuX21ha2VfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNpbXBsZV9jaGlsZHJlbiAqc2ltcGxlX2NoaWxkcmVuOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9DaGFuZ2VMb2cgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL0NoYW5nZUxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhYmE1Mi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL0NoYW5nZUxvZworKysgL2Rldi9udWxsCkBAIC0xLDE5NzcgKzAsMCBAQAotLyogLSotIGF1dG8tZmlsbCAtKi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEKLQotLSBjcmVhdGlvbiBvZiBkZXZmcwotCi0tIG1vZGlmaWVkIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgdG8gc3VwcG9ydCBkZXZmcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIKLQotLSBidWcgZml4IHdpdGggbWFudWFsIGlub2RlIGNyZWF0aW9uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MwotCi0tIGJ1Z2ZpeGVzCi0KLS0gZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKLQotLSBjcmVhdGVkIGEgY291cGxlIG9mIHNjcmlwdHMgKG9uZSB0byBzYXZlJnJlc3RvcmUgYSBkZXZmcyBhbmQgdGhlCi0gIG90aGVyIHRvIHNldCB1cCBjb21wYXRpYmlsaXR5IHN5bWxpbmtzKQotCi0tIGRldmZzIHN1cHBvcnQgZm9yIFNDU0kgZGlzY3MuIE5ldyBuYW1lIGZvcm1hdCBpczogc2RfaEhjQ2lJbEwKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY0Ci0KLS0gYnVnZml4IGZvciB0aGUgZGlyZWN0b3J5IHJlYWRpbmcgY29kZQotCi0tIGJ1Z2ZpeCBmb3IgY29tcGlsYXRpb24gd2l0aCBrZXJuZWxkCi0KLS0gZGV2ZnMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBoYXJkIGRpc2NzCi0KLS0gcmF0aW9uYWxpc2F0aW9uIG9mIHRoZSB2YXJpb3VzIHdhdGNoZG9nIGRyaXZlcnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY1Ci0KLS0gc3VwcG9ydCBmb3IgbW91bnRpbmcgZGlyZWN0bHkgZnJvbSBlbnRyaWVzIGluIHRoZSBkZXZmcyAoaXQgZG9lc24ndAotICBuZWVkIHRvIGJlIG1vdW50ZWQgdG8gZG8gdGhpcyksIGluY2x1ZGluZyB0aGUgcm9vdCBmaWxlc3lzdGVtLgotICBNb3VudGluZyBvZiBzd2FwIHBhcnRpdGlvbnMgYWxzbyB3b3Jrcy4gSGVuY2UsIG5vdyBpZiB5b3Ugc2V0Ci0gIENPTkZJR19ERVZGU19PTkxZIHRvICdZJyB0aGVuIHlvdSB3b24ndCBiZSBhYmxlIHRvIGFjY2VzcyB5b3VyIGRpc2NzCi0gIHZpYSBvcmRpbmFyeSBkZXZpY2Ugbm9kZXMuIE5hdHVyYWxseSwgdGhlIGRlZmF1bHQgaXMgJ04nIHNvIHRoYXQgeW91Ci0gIGNhbiBzdGlsbCB1c2UgeW91ciBvbGQgZGV2aWNlIG5vZGVzLiAgSWYgeW91IHdhbnQgdG8gbW91bnQgZnJvbSBkZXZmcwotICBlbnRyaWVzLCBtYWtlIHN1cmUgeW91IHVzZTogYXBwZW5kID0gInJvb3Q9L2Rldi9zZF8uLi4iIGluIHlvdXIKLSAgbGlsby5jb25mLiBJdCBzZWVtcyBMSUxPIGxvb2tzIGZvciB0aGUgZGV2aWNlIG51bWJlciAobWFqb3ImbWlub3IpCi0gIGFuZCB3cml0ZXMgdGhhdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UgOi0oIAotCi0tIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBtZW1vcnkgZGV2aWNlcyAoL2Rldi9udWxsLCAvZGV2L3plcm8sIC9kZXYvZnVsbAotICBhbmQgc28gb24pLiBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NgotCi0tIHN1cHBvcnQgZm9yIHN1YmRpcmVjdG9yaWVzCi0KLS0gc3VwcG9ydCBmb3Igc3ltYm9saWMgbGlua3MgKGNyZWF0ZWQgYnkgZGV2ZnNfbWtfc3ltbGluaygpLCBubwotICBzdXBwb3J0IHlldCBmb3IgY3JlYXRpb24gdmlhIHN5bWxpbmsoMikpCi0KLS0gU0NTSSBkaXNjIG5hbWluZyBub3cgY2FzdCBpbiBzdG9uZSwgd2l0aCB0aGUgZm9ybWF0OgotICAvZGV2L3NkL2MwYjF0MnUzCWNvbnRyb2xsZXI9MCwgYnVzPTEsIElEPTIsIExVTj0zLCB3aG9sZSBkaXNjCi0gIC9kZXYvc2QvYzBiMXQydTNwNAljb250cm9sbGVyPTAsIGJ1cz0xLCBJRD0yLCBMVU49MywgNHRoIHBhcnRpdGlvbgotCi0tIGxvb3AgZGV2aWNlcyBub3cgYXBwZWFyIGluIGRldmZzCi0KLS0gdHR5IGRldmljZXMsIGNvbnNvbGUsIHNlcmlhbCBwb3J0cywgZXRjLiBub3cgYXBwZWFyIGluIGRldmZzCi0gIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLQotLSBidWdzIHdpdGggbW91bnRpbmcgZGV2ZnMtb25seSBkZXZpY2VzIG5vdyBmaXhlZAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjcKLQotLSBTQ1NJIENELVJPTVMsIHRhcGVzIGFuZCBnZW5lcmljIGRldmljZXMgbm93IGFwcGVhciBpbiBkZXZmcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjgKLQotLSBidWdmaXggd2l0aCBuby1yZXdpbmQgU0NTSSB0YXBlcwotCi0tIFJBTURJU0NzIG5vdyBhcHBlYXIgaW4gZGV2ZnMKLQotLSBiZXR0ZXIgY2xlYW5pbmcgdXAgb2YgZGV2ZnMgZW50cmllcyBjcmVhdGVkIGJ5IHZhcmlvdXMgbW9kdWxlcwotCi0tIGludGVyZmFjZSBjaGFuZ2UgdG8gPGRldmZzX3JlZ2lzdGVyPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjkKLQotLSB0aGUgdjggcGF0Y2ggd2FzIGNvcnJ1cHRlZCBzb21laG93LCB3aGljaCB3b3VsZCBhZmZlY3QgdGhlIHBhdGNoIGZvcgotICBsaW51eC9mcy9maWxlc3lzdGVtcy5jCi0gIEkndmUgYWxzbyBmaXhlZCB0aGUgdjggcGF0Y2ggZmlsZSBvbiB0aGUgV1dXCi0KLS0gTWV0YURldmljZXMgKC9kZXYvbWQqKSBzaG91bGQgbm93IGFwcGVhciBpbiBkZXZmcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwCi0KLS0gYnVnZml4IGluIG1ldGEgZGV2aWNlIHN1cHBvcnQgZm9yIGRldmZzCi0KLS0gY3JlYXRlZCB0aGlzIENoYW5nZUxvZyBmaWxlCi0KLS0gYWRkZWQgZGV2ZnMgc3VwcG9ydCB0byB0aGUgZmxvcHB5IGRyaXZlcgotCi0tIGFkZGVkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHNvY2tldHMgaW4gYSBkZXZmcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjExCi0KLS0gYWRkZWQgREVWRlNfRkxfSElERV9VTlJFRyBmbGFnCi0KLS0gaW5jb3Jwb3JhdGVkIGJldHRlciBwYXRjaCBmb3IgdHR5bmFtZSgpIGluIGxpYmMgNS40LjQzIGZyb20gSC5KLiBMdS4KLQotLSBpbnRlcmZhY2UgY2hhbmdlIHRvIDxkZXZmc19ta19zeW1saW5rPgotCi0tIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHN5bWxpbmtzIHdpdGggc3ltbGluaygyKQotCi0tIHBhcmFsbGVsIHBvcnQgcHJpbnRlciAoL2Rldi9scCopIG5vdyBhcHBlYXJzIGluIGRldmZzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTIKLQotLSBhZGRlZCBpbm9kZSBjaGVjayB0byA8ZGV2ZnNfZmlsbF9maWxlPiBmdW5jdGlvbgotCi0tIGltcHJvdmVkIGRldmZzIHN1cHBvcnQgd2hlbiBtb3VudGluZyBmcm9tIGRldmZzCi0KLS0gYWRkZWQgY2FsbCB0byA8PHJlbGVhc2U+PiBvcGVyYXRpb24gd2hlbiByZW1vdmluZyBzd2FwIGFyZWFzIG9uCi0gIGRldmZzIGRldmljZXMKLQotLSBpbmNyZWFzZWQgTlJfU1VQRVIgdG8gMTI4IHRvIHN1cHBvcnQgbGFyZ2UgbnVtYmVycyBvZiBkZXZmcyBtb3VudHMKLSAgKGZvciBjaHJvb3QoMikgZ2FvbHMpCi0KLS0gZml4ZWQgYnVnIGluIFNDU0kgZGlzYyBzdXBwb3J0OiB3YXMgZ2VuZXJhdGluZyBpbmNvcnJlY3QgbWlub3JzIGlmCi0gIFNDU0kgSUQncyBkaWQgbm90IHN0YXJ0IGF0IDAgYW5kIGluY3JlYXNlIGJ5IDEKLQotLSBzdXBwb3J0IHN5bWxpbmsgdHJhdmVyc2FsIHdoZW4gbW91bnRpbmcgcm9vdAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzCi0KLS0gYWRkZWQgZGV2ZnMgc3VwcG9ydCB0byBzb3VuZGNhcmQgZHJpdmVyCi0gIFRoYW5rcyB0byBFcmljIER1bWFzIDxkdW1hc0BsaW51eC5ldS5vcmc+IGFuZAotICBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLQotLSBhZGRlZCBkZXZmcyBzdXBwb3J0IHRvIHRoZSBqb3lzdGljayBkcml2ZXIKLQotLSBsb29wIGRyaXZlciBub3cgaGFzIGl0J3Mgb3duIHN1YmRpcmVjdG9yeSAiL2Rldi9sb29wLyIKLQotLSBjcmVhdGVkIDxkZXZmc19nZXRfZmxhZ3M+IGFuZCA8ZGV2ZnNfc2V0X2ZsYWdzPiBmdW5jdGlvbnMKLQotLSBmaXggcHJvYmxlbSB3aXRoIFNDU0kgZGlzYyBjb21wYXRpYmlsaXR5IG5hbWVzIChzZHthLGIsYyxkLGUsZn0pCi0gIHdoaWNoIGFzc3VtZXMgSUQncyBzdGFydCBhdCAwIGFuZCBpbmNyZWFzZSBieSAxLiBBbHNvIG9ubHkgY3JlYXRlCi0gIGRldmZzIGVudHJpZXMgZm9yIFNDU0kgZGlzYyBwYXJ0aXRpb25zIHdoaWNoIGFjdHVhbGx5IGV4aXN0Ci0gIFNob3cgbmV3IG5hbWVzIGluIHBhcnRpdGlvbiBjaGVjawotICBUaGFua3MgdG8gSmFrdWIgSmVsaW5layA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNAotCi0tIGJ1ZyBmaXggaW4gZmxvcHB5IGRyaXZlcjogd291bGQgbm90IGNvbXBpbGUgd2l0aG91dAotICBDT05GSUdfREVWRlNfRlM9J1knCi0gIFRoYW5rcyB0byBKdXJnZW4gQm90eiA8amJvdHpAbm92YS5ib3R6Lm9yZz4KLQotLSBidWcgZml4IGluIGxvb3AgZHJpdmVyCi0gIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLQotLSBkbyBub3QgY3JlYXRlIGRldmZzIGVudHJpZXMgZm9yIHByaW50ZXJzIG5vdCBjb25maWd1cmVkCi0gIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLQotLSBkbyBub3QgY3JlYXRlIGRldmZzIGVudHJpZXMgZm9yIHNlcmlhbCBwb3J0cyBub3QgcHJlc2VudAotICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0KLS0gZW5zdXJlIDx0dHlfcmVnaXN0ZXJfZGV2ZnM+IGlzIGV4cG9ydGVkIGZyb20gdHR5X2lvLmMKLSAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgotCi0tIGFsbG93IHVucmVnaXN0ZXJpbmcgb2YgZGV2ZnMgc3ltbGluayBlbnRyaWVzCi0KLS0gZml4ZWQgYnVnIGluIFNDU0kgZGlzYyBuYW1pbmcgaW50cm9kdWNlZCBpbiBsYXN0IHBhdGNoIHZlcnNpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNQotCi0tIHBvcnRlZCB0byBrZXJuZWwgMi4xLjgxCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTYKLQotLSBjcmVhdGVkIDxkZXZmc19zZXRfc3ltbGlua19kZXN0aW5hdGlvbj4gZnVuY3Rpb24KLQotLSBtb3ZlZCBERVZGU19TVVBFUl9NQUdJQyBpbnRvIGhlYWRlciBmaWxlCi0KLS0gYWRkZWQgREVWRlNfRkxfSElERSBmbGFnCi0KLS0gY3JlYXRlZCA8ZGV2ZnNfZ2V0X21hal9taW4+Ci0KLS0gY3JlYXRlZCA8ZGV2ZnNfZ2V0X2hhbmRsZV9mcm9tX2lub2RlPgotCi0tIGZpeGVkIGJ1Z3MgaW4gc2VhcmNoaW5nIGJ5IG1ham9yJm1pbm9yCi0KLS0gY2hhbmdlZCBpbnRlcmZhY2UgdG8gPGRldmZzX3VucmVnaXN0ZXI+LCA8ZGV2ZnNfZmlsbF9maWxlPiBhbmQKLSAgPGRldmZzX2ZpbmRfaGFuZGxlPgotCi0tIGZpeGVkIGlub2RlIHRpbWVzIHdoZW4gc3ltbGluayBjcmVhdGVkIHdpdGggc3ltbGluaygyKQotCi0tIGNoYW5nZSB0dHkgZHJpdmVyIHRvIGRvIGF1dG8tY3JlYXRpb24gb2YgZGV2ZnMgZW50cmllcwotICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0KLS0gZml4ZWQgYnVnIGluIGdlbmhkLmM6IHdob2xlIGRpc2MgKG5vbi1TQ1NJKSB3YXMgbm90IHJlZ2lzdGVyZWQgdG8KLSAgZGV2ZnMKLQotLSB1cGRhdGVkIGxpYmMgNS40LjQzIHBhdGNoIGZvciB0dHluYW1lKCkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNwotCi0tIGFkZGVkIENPTkZJR19ERVZGU19UVFlfQ09NUEFUCi0gIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLQotLSBidWdmaXggaW4gZGV2ZnMgc3VwcG9ydCBmb3IgZHJpdmVycy9jaGFyL2xwLmMKLSAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgotCi0tIGNsZWFuIHVwIHNlcmlhbCBkcml2ZXIgc28gdGhhdCBQQ01DSUEgZGV2aWNlcyB1bnJlZ2lzdGVyIGNvcnJlY3RseQotICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0KLS0gZml4ZWQgYnVnIGluIGdlbmhkLmM6IHdob2xlIGRpc2MgKG5vbi1TQ1NJKSB3YXMgbm90IHJlZ2lzdGVyZWQgdG8KLSAgZGV2ZnMgW3dhcyBtaXNzaW5nIGluIHBhdGNoIHYxNl0KLQotLSB1cGRhdGVkIGxpYmMgNS40LjQzIHBhdGNoIGZvciB0dHluYW1lKCkgW3dhcyBtaXNzaW5nIGluIHBhdGNoIHYxNl0KLQotLSBhbGwgU0NTSSBkZXZpY2VzIG5vdyByZWdpc3RlcmVkIGluIC9kZXYvc2cKLQotLSBzdXBwb3J0IHJlbW92YWwgb2YgZGV2ZnMgZW50cmllcyB2aWEgdW5saW5rKDIpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTgKLQotLSBhZGRlZCBmbG9wcHkvP3U3MjAgZmxvcHB5IGVudHJ5Ci0KLS0gZml4ZWQga2VybmVsZCBzdXBwb3J0IGZvciBlbnRyaWVzIGluIGRldmZzIHN1YmRpcmVjdG9yaWVzCi0KLS0gaW5jb3Jwb3JhdGVkIGxhdGVzdCBwYXRjaCBmb3IgdHR5bmFtZSgpIGluIGxpYmMgNS40LjQzIGZyb20gSC5KLiBMdS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxOQotCi0tIGJ1ZyBmaXggd2hlbiBsb29raW5nIHVwIHVucmVnaXN0ZXJlZCBlbnRyaWVzOiBrZXJuZWxkIHdhcyBub3QgY2FsbGVkCi0KLS0gZml4ZXMgZm9yIGtlcm5lbCAyLjEuODYgKG5vdyByZXF1aXJlcyAyLjEuODYpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjAKLQotLSBvbmx5IGNyZWF0ZSBhdmFpbGFibGUgZmxvcHB5IGVudHJpZXMKLSAgVGhhbmtzIHRvIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogPGFua3J5QGdyZWVuLm1pZi5wZy5nZGEucGw+Ci0KLS0gbmV3IElERSBuYW1pbmcgc2NoZW1lIGZvbGxvd2luZyBTQ1NJIGZvcm1hdCAoaS5lLiAvZGV2L2lkL2MwYjB0MHUwcDEKLSAgaW5zdGVhZCBvZiAvZGV2L2hkYTEpCi0gIFRoYW5rcyB0byBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeUBncmVlbi5taWYucGcuZ2RhLnBsPgotCi0tIG5ldyBYVCBkaXNjIG5hbWluZyBzY2hlbWUgZm9sbG93aW5nIFNDU0kgZm9ybWF0IChpLmUuIC9kZXYveGQvYzB0MHAxCi0gIGluc3RlYWQgb2YgL2Rldi94ZGExKQotICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KLQotLSBuZXcgbm9uLXN0YW5kYXJkIENELVJPTSBuYW1lcyAoaS5lLiAvZGV2L3NicC9jI3QjKQotICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KLQotLSBhbGxvdyBzeW1saW5rIHRyYXZlcnNhbCB3aGVuIG1vdW50aW5nIHRoZSByb290IGZpbGVzeXN0ZW0KLQotLSBDcmVhdGUgZW50cmllcyBmb3IgTUQgZGV2aWNlcyBhdCBNRCBpbml0Ci0gIFRoYW5rcyB0byBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95NUBjYXB3YXkuY29tPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxCi0KLS0gcG9ydGVkIHRvIGtlcm5lbCAyLjEuOTEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyMgotCi0tIFNDU0kgaG9zdCBudW1iZXIgcGF0Y2ggKCJzY3NpaG9zdHM9IiBrZXJuZWwgb3B0aW9uKQotICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyMwotCi0tIEZpeGVkIHBlcnNpc3RlbmNlIGJ1ZyB3aXRoIGRldmljZSBudW1iZXJzIGZvciBtYW51YWxseSBjcmVhdGVkCi0gIGRldmljZSBmaWxlcwotCi0tIEZpeGVkIHByb2JsZW0gd2l0aCByZWNyZWF0aW5nIHN5bWxpbmtzIHdpdGggZGlmZmVyZW50IGNvbnRlbnQKLQotLSBBZGRlZCBDT05GSUdfREVWRlNfTU9VTlQgKG1vdW50IGRldmZzIG9uIC9kZXYgYXQgYm9vdCB0aW1lKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjI0Ci0KLS0gU3dpdGNoZWQgZnJvbSBDT05GSUdfS0VSTkVMRCB0byBDT05GSUdfS01PRDogbW9kdWxlIGF1dG9sb2FkaW5nCi0gIHNob3VsZCBub3cgd29yayBhZ2FpbgotCi0tIEhpZGUgZW50cmllcyB3aGljaCBhcmUgbWFudWFsbHkgdW5saW5rZWQKLQotLSBBbHdheXMgaW52YWxpZGF0ZSBkZXZmcyBkZW50cnkgY2FjaGUgd2hlbiByZWdpc3RlcmluZyBlbnRyaWVzCi0KLS0gU3VwcG9ydCByZW1vdmFsIG9mIGRldmZzIGRpcmVjdG9yaWVzIHZpYSBybWRpcigyKQotCi0tIEVuc3VyZSBkaXJlY3RvcmllcyBjcmVhdGVkIGJ5IDxkZXZmc19ta19kaXI+IGFyZSB2aXNpYmxlCi0KLS0gRGVmYXVsdCBubyBhY2Nlc3MgZm9yICJvdGhlciIgZm9yIGZsb3BweSBkZXZpY2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyNQotCi0tIFVwZGF0ZXMgdG8gQ1JFRElUUyBmaWxlIGFuZCBtaW5vciBJREUgbnVtYmVyaW5nIGNoYW5nZQotICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KLQotLSBJbnZhbGlkYXRlIGRldmZzIGRlbnRyeSBjYWNoZSB3aGVuIG1ha2luZyBkaXJlY3RvcmllcwotCi0tIEludmFsaWRhdGUgZGV2ZnMgZGVudHJ5IGNhY2hlIHdoZW4gcmVtb3ZpbmcgZW50cmllcwotCi0tIE1vcmUgaW5mb3JtYXRpdmUgbWVzc2FnZSBpZiByb290IEZTIG1vdW50IGZhaWxzIHdoZW4gZGV2ZnMKLSAgY29uZmlndXJlZAotCi0tIEZpeGVkIHBlcnNpc3RlbmNlIGJ1ZyB3aXRoIGZpZm9zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjYKLQotLSBwb3J0ZWQgdG8ga2VybmVsIDIuMS45NwotCi0tIENoYW5nZWQgc2VyaWFsIGRpcmVjdG9yeSBmcm9tICIvZGV2L3NlcmlhbCIgdG8gIi9kZXYvdHRzIiBhbmQKLSAgIi9kZXYvY29uc29sZXMiIHRvICIvZGV2L3ZjIiB0byBiZSBtb3JlIGZyaWVuZGx5IHRvIG5ldyBwcm9jcHMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyNwotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIElERTQgYW5kIElERTUKLSAgVGhhbmtzIHRvIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogPGFua3J5QGdyZWVuLm1pZi5wZy5nZGEucGw+Ci0KLS0gRG9jdW1lbnRlZCAic2NzaWhvc3RzPSIgYm9vdCBwYXJhbWV0ZXIKLQotLSBQcmludCBwcm9jZXNzIGNvbW1hbmQgd2hlbiBkZWJ1Z2dpbmcga2VybmVsZC9rbW9kCi0KLS0gQWRkZWQgZGVidWdnaW5nIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyL2NoYW5nZSBvcGVyYXRpb25zCi0KLS0gQWRkZWQgImRldmZzPSIgYm9vdCBvcHRpb25zCi0KLS0gSGlkZSB1bnJlZ2lzdGVyZWQgZW50cmllcyBieSBkZWZhdWx0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjgKLQotLSBObyBsb25nZXIgbG9jay91bmxvY2sgc3VwZXJibG9jayBpbiA8ZGV2ZnNfcHV0X3N1cGVyPiAoY29wZSB3aXRoCi0gIHJlY2VudCBWRlMgaW50ZXJmYWNlIGNoYW5nZSkKLQotLSBEbyBub3QgYXV0b21hdGljYWxseSBjaGFuZ2Ugb3duZXJzaGlwL3Byb3RlY3Rpb24gb2YgL2Rldi90dHkKLQotLSBEcm9wIG5lZ2F0aXZlIGRlbnRyaWVzIHdoZW4gdGhleSBhcmUgcmVsZWFzZWQKLQotLSBNYW5hZ2UgZGNhY2hlIG1vcmUgZWZmaWNpZW50bHkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyOQotCi0tIEFkZGVkIERFVkZTX0ZMX0FVVE9fREVWTlVNIGZsYWcKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYzMAotCi0tIE5vIGxvbmdlciBzZXQgdW5uZWNlc3NhcnkgbWV0aG9kcwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjk5LXByZTMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYzMQotCi0tIEFkZGVkIFBJRCBkaXNwbGF5IHRvIDxjYWxsX2tlcm5lbGQ+IGRlYnVnZ2luZyBtZXNzYWdlCi0KLS0gQWRkZWQgImRpcmVhZCIgYW5kICJkaXdyaXRlIiBvcHRpb25zCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTAyCi0KLS0gRml4ZWQgcGVyc2lzdGVuY2UgcHJvYmxlbSB3aXRoIHBlcm1pc3Npb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MzIKLQotLSBGaXhlZCBkZXZmcyBzdXBwb3J0IGluIGRyaXZlcnMvYmxvY2svbWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjMzCi0KLS0gU3VwcG9ydCBsZWdhY3kgZGV2aWNlIG5vZGVzCi0KLS0gRml4ZWQgYnVnIHdoZXJlIHJlY3JlYXRlZCBpbm9kZXMgd2VyZSBoaWRkZW4KLQotLSBOZXcgSURFIG5hbWluZyBzY2hlbWU6IGV2ZXJ5dGhpbmcgaXMgdW5kZXIgL2Rldi9pZGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYzNAotCi0tIEltcHJvdmVkIGRlYnVnZ2luZyBpbiA8Z2V0X3Zmc19pbm9kZT4KLQotLSBQcmV2ZW50IGR1cGxpY2F0ZSBjYWxscyB0byA8ZGV2ZnNfbWtfZGlyPiBpbiBTQ1NJIGxheWVyCi0KLS0gTm8gbG9uZ2VyIGZyZWUgb2xkIGRlbnRyaWVzIGluIDxkZXZmc19ta19kaXI+Ci0KLS0gRnJlZSBhbGwgZGVudHJpZXMgZm9yIGEgZ2l2ZW4gZW50cnkgd2hlbiBkZWxldGluZyBpbm9kZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYzNQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEwNSAoc291bmQgZHJpdmVyIGNoYW5nZXMpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MzYKLQotLSBGaXhlZCBzb3VuZCBkcml2ZXIgcG9ydAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjM3Ci0KLS0gTWlub3IgZG9jdW1lbnRhdGlvbiB0d2Vha3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYzOAotCi0tIE1vcmUgZG9jdW1lbnRhdGlvbiB0d2Vha3MKLQotLSBGaXggZm9yIHNvdW5kIGRyaXZlciBwb3J0Ci0KLS0gUmVtb3ZlZCB0dHluYW1lLXBhdGNoIChncmFiIGxpYmMgNS40LjQ0IGluc3RlYWQpCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTA3LXByZTIgKGxvb3AgZHJpdmVyIGZpeCkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYzOQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEwNyAoaGQuYyBodW5rIGJyb2tlIGR1ZSB0byBzcGVsbGluZyAiZml4ZXMiKS4gU2lnaAotCi0tIFJlbW92ZWQgbWFueSAjaWZkZWYncywgcmVwbGFjZWQgd2l0aCB0cmlja2VyeSBpbiBpbmNsdWRlL2RldmZzX2ZzLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY0MAotCi0tIEZpeCBmb3Igc291bmQgZHJpdmVyIHBvcnQKLQotLSBMaW1pdCBhdXRvLWRldmljZSBudW1iZXJpbmcgdG8gbWFqb3JzIDEyOCB0byAyMzkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY0MQotCi0tIEZpeGVkIGlub2RlIHRpbWVzIHBlcnNpc3RlbmNlIHByb2JsZW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY0MgotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEwOCAoZHJpdmVycy9zY3NpL2hvc3RzLmMgaHVuayBicm9rZSkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY0MwotCi0tIEZpeGVkIHNwZWxsaW5nIGluIDxkZXZmc19yZWFkbGluaz4gZGVidWcKLQotLSBGaXhlZCBidWcgaW4gPGRldmZzX3NldHVwPiBwYXJzaW5nICJkaWxvb2t1cCIKLQotLSBNb3JlICNpZmRlZidzIHJlbW92ZWQKLQotLSBTdXBwb3J0ZWQgU3BhcmMga2V5Ym9hcmQgKC9kZXYva2JkKQotCi0tIFN1cHBvcnRlZCBEU1A1NjAwMSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IgKC9kZXYvZHNwNTZrKQotCi0tIFN1cHBvcnRlZCBBcHBsZSBEZXNrdG9wIEJ1cyAoL2Rldi9hZGIpCi0KLS0gU3VwcG9ydGVkIENvZGEgbmV0d29yayBmaWxlIHN5c3RlbSAoL2Rldi9jZnMqKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ0Ci0KLS0gRml4ZWQgZGV2ZnMgaW5vZGUgbGVhayB3aGVuIG1hbnVhbGx5IHJlY3JlYXRpbmcgaW5vZGVzCi0KLS0gRml4ZWQgcGVybWlzc2lvbiBwZXJzaXN0ZW5jZSBwcm9ibGVtIHdoZW4gcmVjcmVhdGluZyBpbm9kZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY0NQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjExMAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ2Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTEyLXByZTEKLQotLSBSZW1vdmVkIGhhcm1sZXNzICJ1bnVzZWQgdmFyaWFibGUiIGNvbXBpbGVyIHdhcm5pbmcKLQotLSBGaXhlZCBtb2RlcyBmb3IgbWFudWFsbHkgcmVjcmVhdGVkIGRldmljZSBub2RlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ3Ci0KLS0gQWRkZWQgTlVMTCBkZXZmcyBpbm9kZSB3YXJuaW5nIGluIDxkZXZmc19yZWFkX2lub2RlPgotCi0tIEZvcmNlIGFsbCBpbm9kZSBubGluayB2YWx1ZXMgdG8gMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ4Ci0KLS0gQWRkZWQgImRpbWtub2QiIG9wdGlvbgotCi0tIFNldCBpbm9kZSBubGluayB0byAwIHdoZW4gZnJlZWluZyBkZW50cmllcwotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIHZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGRldmljZXMgKC9kZXYvdmNzKikKLSAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+Ci0KLS0gRml4ZWQgbW9kZXMgZm9yIG1hbnVhbGx5IHJlY3JlYXRlZCBzeW1saW5rcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ5Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTEzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NTAKLQotLSBGaXhlZCBidWdzIGluIHJlY3JlYXRlZCBkaXJlY3RvcmllcyBhbmQgc3ltbGlua3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY1MQotCi0tIEltcHJvdmVkIHJvYnVzdG5lc3Mgb2YgcmMuZGV2ZnMgc2NyaXB0Ci0gIFRoYW5rcyB0byBSb2RlcmljaCBTY2h1cHAgPHJzY2hAZXhwZXJ0ZWFtLmRlPgotCi0tIEZpeGVkIGJ1Z3MgaW4gcmVjcmVhdGVkIGRldmljZSBub2RlcwotCi0tIEZpeGVkIGJ1ZyBpbiBjdXJyZW50bHkgdW51c2VkIDxkZXZmc19nZXRfaGFuZGxlX2Zyb21faW5vZGU+Ci0KLS0gRGVmaW5lZCBuZXcgPGRldmZzX2hhbmRsZV90PiB0eXBlCi0KLS0gSW1wcm92ZWQgZGVidWdnaW5nIHdoZW4gZ2V0dGluZyBlbnRyaWVzCi0KLS0gRml4ZWQgYnVnIHdoZXJlIGRpcmVjdG9yaWVzIGNvdWxkIGJlIGVtcHRpZWQKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY1MgotCi0tIFJlcGxhY2VkIGR1bW15IC5lcG9jaCBpbm9kZSB3aXRoIC5kZXZmc2QgY2hhcmFjdGVyIGRldmljZQotCi0tIE1vZGlmaWVkIHJjLmRldmZzIHRvIHRha2UgYWNjb3VudCBvZiBhYm92ZSBjaGFuZ2UKLQotLSBSZW1vdmVkIHNwdXJpb3VzIGRyaXZlciB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gQ09ORklHX0RFVkZTX0ZTPW4KLQotLSBJbXBsZW1lbnRlZCBkZXZmc2QgcHJvdG9jb2wgcmV2aXNpb24gMAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjUzCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTE2IChrbW9kIGNoYW5nZSBicm9rZSBodW5rKQotCi0tIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscAotCi0tIFRlc3QgYW5kIHR0eSBwYXR0ZXJuIHBhdGNoIGZvciByYy5kZXZmcyBzY3JpcHQKLSAgVGhhbmtzIHRvIFJvZGVyaWNoIFNjaHVwcCA8cnNjaEBleHBlcnRlYW0uZGU+Ci0KLS0gQWRkZWQgc29vdGhpbmcgbWVzc2FnZSB0byB3YXJuaW5nIGluIDxkZXZmc19kX2lwdXQ+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NTQKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTcKLQotLSBGaXhlZCBkZWZhdWx0IHBlcm1pc3Npb25zIGluIHNvdW5kIGRyaXZlcgotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2VzICgvZGV2L2ZiKikKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY1NQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjExOQotCi0tIFVzZSBHQ0MgZXh0ZW5zaW9ucyBmb3Igc3RydWN0dXJlIGluaXRpYWxpc2F0aW9ucwotCi0tIEltcGxlbWVudGVkIGFzeW5jIG9wZW4gbm90aWZpY2F0aW9uCi0KLS0gSW5jcmVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIHRvIDEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY1NgotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyMC1wcmUzCi0KLS0gTW92ZWQgYXN5bmMgb3BlbiBub3RpZmljYXRpb24gdG8gZW5kIG9mIDxkZXZmc19vcGVuPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjU3Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTIxCi0KLS0gUHJlcGVuZGVkICIvZGV2LyIgdG8gbW9kdWxlIGxvYWQgcmVxdWVzdAotCi0tIFJlbmFtZWQgPGNhbGxfa2VybmVsZD4gdG8gPGNhbGxfa21vZD4KLQotLSBDcmVhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYgZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjU4Ci0KLS0gRml4ZWQgdHlwbyAiQVlTTkMiIC0+ICJBU1lOQyIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY1OQotCi0tIEFkZGVkIG9wZW4gZmxhZyBmb3IgZmlsZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY2MAotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyMy1wcmUyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NjEKLQotLSBTZXQgaV9ibG9ja3M9MCBhbmQgaV9ibGtzaXplPTEwMjQgaW4gPGRldmZzX3JlYWRfaW5vZGU+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NjIKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY2MwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNC1wcmUyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NjQKLQotLSBGaXhlZCBVbml4OTggcHR5IHN1cHBvcnQKLQotLSBJbmNyZWFzZWQgYnVmZmVyIHNpemUgaW4gPGdldF9wYXJ0aXRpb25fbGlzdD4gdG8gYXZvaWQgY3Jhc2ggYW5kCi0gIGJ1cm4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY2NQotCi0tIE1vcmUgVW5peDk4IHB0eSBzdXBwb3J0IGZpeGVzCi0KLS0gQWRkZWQgdGVzdCBmb3IgZW1wdHkgPDxuYW1lPj4gaW4gPGRldmZzX2ZpbmRfaGFuZGxlPgotCi0tIFJlbmFtZWQgPGdlbmVyYXRlX3BhdGg+IHRvIDxkZXZmc19nZW5lcmF0ZV9wYXRoPiBhbmQgcHVibGlzaGVkCi0KLS0gQ3JlYXRlZCAvZGV2L3Jvb3Qgc3ltbGluawotICBUaGFua3MgdG8gUm9kZXJpY2ggU2NodXBwIDxyc2NoQEV4cGVyVGVhbS5kZT4KLSAgd2l0aCBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgYnkgbWUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY2NgotCi0tIFlldCBtb3JlIFVuaXg5OCBwdHkgc3VwcG9ydCBmaXhlcyAobm93IHRlc3RlZCkKLQotLSBDcmVhdGVkIDxkZXZmc19nZXRfZm9wcz4KLQotLSBTdXBwb3J0IG1lZGlhIGNoYW5nZSBjaGVja3Mgd2hlbiBDT05GSUdfREVWRlNfT05MWT15Ci0KLS0gQWJvbGlzaGVkIFVuaXg5OC1zdHlsZSBQVFkgbmFtZXMgZm9yIG9sZCBQVFkgZGV2aWNlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjY3Ci0KLS0gQWRkZWQgaW5saW5lIGRlY2xhcmF0aW9uIGZvciBkdW1teSA8ZGV2ZnNfZ2VuZXJhdGVfcGF0aD4KLQotLSBSZW1vdmVkIHNwdXJpb3VzICJ1bmFibGUgdG8gcmVnaXN0ZXIuLi4gaW4gZGV2ZnMiIG1lc3NhZ2VzIHdoZW4KLSAgQ09ORklHX0RFVkZTX0ZTPW4KLQotLSBGaXhlZCBtaXNjLiBkZXZpY2VzIHdoZW4gQ09ORklHX0RFVkZTX0ZTPW4KLQotLSBMaW1pdCBhdXRvLWRldmljZSBudW1iZXJpbmcgdG8gbWFqb3JzIDE0NCB0byAyMzkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY2OAotCi0tIEhpZGUgdW5vcGVuZWQgdmlydHVhbCBjb25zb2xlcyBmcm9tIGRpcmVjdG9yeSBsaXN0aW5ncwotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIHZpZGVvIGNhcHR1cmUgZGV2aWNlcwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjY5Ci0KLS0gRml4IGZvciBDT05GSUdfVlQ9bgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjcwCi0KLS0gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLU9TUy9GcmVlIHNvdW5kIGNhcmRzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NzEKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjYtcHJlMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjcyCi0KLS0gI2lmZGVmJ3MgZm9yIENPTkZJR19ERVZGU19ESVNBQkxFX09MRF9OQU1FUyByZW1vdmVkCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NzMKLQotLSBDT05GSUdfREVWRlNfRElTQUJMRV9PTERfTkFNRVMgcmVwbGFjZWQgd2l0aCAibm9jb21wYXQiIGJvb3Qgb3B0aW9uCi0KLS0gQ09ORklHX0RFVkZTX0JPT1RfT1BUSU9OUyByZW1vdmVkOiBib290IG9wdGlvbnMgYWx3YXlzIGF2YWlsYWJsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjc0Ci0KLS0gUmVtb3ZlZCBDT05GSUdfREVWRlNfTU9VTlQgYW5kICJtb3VudCIgYm9vdCBvcHRpb24gYW5kIHJlcGxhY2VkIHdpdGgKLSAgIm5vbW91bnQiIGJvb3Qgb3B0aW9uCi0KLS0gRG9jdW1lbnRhdGlvbiB1cGRhdGVzCi0KLS0gVXBkYXRlZCBzYW1wbGUgbW9kdWxlcy5jb25mCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NzUKLQotLSBVcGRhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYKLQotLSBSZW1vdW50IGRldmZzIGFmdGVyIGluaXRyZCBmaW5pc2hlcwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNwotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIElTRE4KLSAgVGhhbmtzIHRvIENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3k1QGNhcHdheS5jb20+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NzYKLQotLSBVcGRhdGVkIGFuIGVtYWlsIGFkZHJlc3MgaW4gQ2hhbmdlTG9nCi0KLS0gQ09ORklHX0RFVkZTX09OTFkgcmVwbGFjZWQgd2l0aCAib25seSIgYm9vdCBvcHRpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY3NwotCi0tIEFkZGVkIERFVkZTX0ZMX1JFTU9WQUJMRSBmbGFnCi0KLS0gQ2hlY2sgZm9yIGRpc2MgY2hhbmdlIHdoZW4gbGlzdGluZyBkaXJlY3RvcmllcyB3aXRoIHJlbW92YWJsZSBtZWRpYQotICBkZXZpY2VzCi0KLS0gVXNlIERFVkZTX0ZMX1JFTU9WQUJMRSBpbiBzZC5jCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI4Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2NzgKLQotLSBPbmx5IGNhbGwgPHNjYW5fZGlyX2Zvcl9yZW1vdmFibGU+IG9uIGZpcnN0IGNhbGwgdG8gPGRldmZzX3JlYWRkaXI+Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI5LXByZTUKLQotLSBJU0ROIHN1cHBvcnQgaW1wcm92ZW1lbnRzCi0gIFRoYW5rcyB0byBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95NUBjYXB3YXkuY29tPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjc5Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTMwCi0KLS0gUmVuYW1lZCBtaXNjZGV2aWNlICJhcG0iIHRvICJhcG1fYmlvcyIgdG8gYmUgY29uc2lzdGVudCB3aXRoCi0gIGRldmljZXMudHh0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2ODAKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMzEKLQotLSBVcGRhdGVkIDxkZXZmc19ybWRpcj4gZm9yIFZGUyBjaGFuZ2UgaW4gMi4xLjEzMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjgxCi0KLS0gRml4ZWQgcGVybWlzc2lvbnMgb24gL2Rldi9wdG14Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2ODIKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMzItcHJlNAotCi0tIENoYW5nZWQgaW5pdGlhbCBwZXJtaXNzaW9ucyBvbiAvZGV2L3B0cy8qCi0KLS0gQ3JlYXRlZCA8ZGV2ZnNfbWtfY29tcGF0PgotCi0tIEFkZGVkICJzeW1saW5rcyIgYm9vdCBvcHRpb24KLQotLSBDaGFuZ2VkIGRldmZzX3JlZ2lzdGVyX2Jsa2RldigpIGJhY2sgdG8gcmVnaXN0ZXJfYmxrZGV2KCkgZm9yIElERQotCi0tIENoZWNrIGZvciBwYXJ0aXRpb25zIG9uIHJlbW92YWJsZSBtZWRpYSBpbiA8ZGV2ZnNfbG9va3VwPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjgzCi0KLS0gRml4ZWQgc3VwcG9ydCBmb3IgcmFtZGlzYyB3aGVuIHVzaW5nIHN0cmluZy1iYXNlZCByb290IEZTIG5hbWUKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMi4wLXByZTEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY4NAotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4yLjAtcHJlNwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjg1Ci0KLS0gQ29tcGlsZSBmaXhlcyBmb3IgZHJpdmVyL3NvdW5kL3NvdW5kX2NvbW1vbi5jIChub24tbW9kdWxlKSBhbmQKLSAgZHJpdmVycy9pc2RuL2lzZG5fY29tbW9uLmMKLSAgVGhhbmtzIHRvIENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3k1QGNhcHdheS5jb20+Ci0KLS0gQWRkZWQgc3VwcG9ydCBmb3IgcmVnaXN0ZXJpbmcgcmVndWxhciBmaWxlcwotCi0tIENyZWF0ZWQgPGRldmZzX3NldF9maWxlX3NpemU+Ci0KLS0gQWRkZWQgL2Rldi9jcHUvbXRyciBhcyBhbiBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UgdG8gL3Byb2MvbXRycgotCi0tIFVwZGF0ZSBkZXZmcyBpbm9kZXMgZnJvbSBlbnRyaWVzIGlmIG5vdCBjaGFuZ2VkIHRocm91Z2ggRlMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY4NgotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4yLjAtcHJlOQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjg3Ci0KLS0gRml4ZWQgYnVnIHdoZW4gbW91bnRpbmcgbm9uLWRldmZzIGRldmljZXMgaW4gYSBkZXZmcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjg4Ci0KLS0gRml4ZWQgPGRldmZzX2ZpbGxfZmlsZT4gdG8gb25seSBpbml0aWFsaXNlIHRlbXBvcmFyeSBpbm9kZXMKLQotLSBUcmFwIGZvciBOVUxMIGZvcHMgaW4gPGRldmZzX3JlZ2lzdGVyPgotCi0tIFJldHVybiAtRU5PREVWIGluIDxkZXZmc19maWxsX2ZpbGU+IGZvciBub24tZHJpdmVyIGlub2RlcwotCi0tIEZpeGVkIGJ1ZyB3aGVuIHVuc3dhcHBpbmcgbm9uLWRldmZzIGRldmljZXMgaW4gYSBkZXZmcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjg5Ci0KLS0gU3dpdGNoZWQgdG8gQyBkYXRhIHR5cGVzIGluIGluY2x1ZGUvbGludXgvZGV2ZnNfZnMuaAotCi0tIFN3aXRjaGVkIGZyb20gUEFUSF9NQVggdG8gREVWRlNfUEFUSExFTgotCi0tIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9tb2R1bGVzLmNvbmYgdG8gdGFrZSBhY2NvdW50Ci0gIG9mIHJldmVyc2Ugc2Nhbm5pbmcgKCEpIGJ5IG1vZHByb2JlCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuMAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjkwCi0KLS0gQ09ORklHX0RFVkZTX0RJU0FCTEVfT0xEX1RUWV9OQU1FUyByZXBsYWNlZCB3aXRoICJub3R0eWNvbXBhdCIgYm9vdAotICBvcHRpb24KLQotLSBDT05GSUdfREVWRlNfVFRZX0NPTVBBVCByZW1vdmVkOiBleGlzdGluZyAic3ltbGlua3MiIGJvb3Qgb3B0aW9uIG5vdwotICBjb250cm9scyB0aGlzLiBUaGlzIG1lYW5zIHlvdSBtdXN0IGhhdmUgbGliYyA1LjQuNDQgb3IgbGF0ZXIsIG9yIGEKLSAgcmVjZW50IHZlcnNpb24gb2YgbGliYyA2IGlmIHlvdSB1c2UgdGhlICJzeW1saW5rcyIgb3B0aW9uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2OTEKLQotLSBTd2l0Y2ggZnJvbSA8ZGV2ZnNfbWtfc3ltbGluaz4gdG8gPGRldmZzX21rX2NvbXBhdD4gaW4KLSAgZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jIHRvIGZpeCBwcm9ibGVtcyB3aXRoIE1pZG5pZ2h0IENvbW1hbmRlcgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjkyCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuMi1wcmU1Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2OTMKLQotLSBNb2RpZmllZCA8c2RfbmFtZT4gaW4gZHJpdmVycy9zY3NpL3NkLmMgdG8gY29wZSB3aXRoIGRldmljZXMgdGhhdAotICBkb24ndCBleGlzdCAod2hpY2ggaGFwcGVucyB3aXRoIG5ldyBSQUlEIGF1dG9zdGFydCBjb2RlIHByaW50aygpcykKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY5NAotCi0tIEZpeGVkIGJ1ZyBpbiBqb3lzdGljayBkcml2ZXI6IG9ubHkgZmlyc3Qgam95c3RpY2sgd2FzIHJlZ2lzdGVyZWQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY5NQotCi0tIEZpeGVkIGFub3RoZXIgYnVnIGluIGpveXN0aWNrIGRyaXZlcgotCi0tIEZpeGVkIDxkZXZmc2RfcmVhZD4gdG8gbm90IG92ZXJydW4gZXZlbnQgYnVmZmVyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2OTYKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMi41LTIKLQotLSBDcmVhdGVkIDxkZXZmc19hdXRvX3VucmVnaXN0ZXI+Ci0KLS0gRml4ZWQgYnVnczogY29tcGF0aWJpbGl0eSBlbnRyaWVzIHdlcmUgbm90IHVucmVnaXN0ZXJlZCBmb3I6Ci0gICAgbG9vcCBkcml2ZXIKLSAgICBmbG9wcHkgZHJpdmVyCi0gICAgUkFNRElTQyBkcml2ZXIKLSAgICBJREUgdGFwZSBkcml2ZXIKLSAgICBTQ1NJIENELVJPTSBkcml2ZXIKLSAgICBTQ1NJIEhERCBkcml2ZXIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY5NwotCi0tIEZpeGVkIGJ1Z3M6IGNvbXBhdGliaWxpdHkgZW50cmllcyB3ZXJlIG5vdCB1bnJlZ2lzdGVyZWQgZm9yOgotICAgIEFMU0Egc291bmQgZHJpdmVyCi0gICAgcGFydGl0aW9ucyBpbiBnZW5lcmljIGRpc2MgZHJpdmVyCi0KLS0gRG9uJ3QgcmV0dXJuIHVucmVnaXN0cmVkIGVudHJpZXMgaW4gPGRldmZzX2ZpbmRfaGFuZGxlPgotCi0tIFBhbmljIGluIDxkZXZmc191bnJlZ2lzdGVyPiBpZiBlbnRyeSB1bnJlZ2lzdGVyZWQKLQotLSBEb24ndCBwYW5pYyBpbiA8ZGV2ZnNfYXV0b191bnJlZ2lzdGVyPiBmb3IgZHVwbGljYXRlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjk4Ci0KLS0gRG9uJ3QgdW5yZWdpc3RlciBhbHJlYWR5IHVucmVnaXN0ZXJlZCBlbnRyaWVzIGluIDx1bnJlZ2lzdGVyPgotCi0tIFJlZ2lzdGVyIGVudHJ5IGluIDxzZF9kZXRlY3Q+Ci0KLS0gVW5yZWdpc3RlciBlbnRyeSBpbiA8c2RfZGV0YWNoPgotCi0tIENoYW5nZWQgdG8gPGRldmZzXypyZWdpc3Rlcl9jaHJkZXY+IGluIGRyaXZlcnMvY2hhci90dHlfaW8uYwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4yLjcKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHY5OQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4yLjgKLQotLSBGaXhlZCBidWcgaW4gZHJpdmVycy9zY3NpL3NkLmMgd2hlbiA+MTYgU0NTSSBkaXNjcwotCi0tIERpc2FibGUgd2FybmluZyBtZXNzYWdlcyB3aGVuIHVuYWJsZSB0byByZWFkIHBhcnRpdGlvbiB0YWJsZSBmb3IKLSAgcmVtb3ZhYmxlIG1lZGlhCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTAwCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMS1wcmU1Ci0KLS0gQWRkZWQgIm9vcHMtb24tcGFuaWMiIGJvb3Qgb3B0aW9uCi0KLS0gSW1wcm92ZWQgZGVidWdnaW5nIGluIDxkZXZmc19yZWdpc3Rlcj4gYW5kIDxkZXZmc191bnJlZ2lzdGVyPgotCi0tIFJlZ2lzdGVyIGVudHJ5IGluIDxzcl9kZXRlY3Q+Ci0KLS0gVW5yZWdpc3RlciBlbnRyeSBpbiA8c3JfZGV0YWNoPgotCi0tIFJlZ2lzdGVyIGVudHJ5IGluIDxzZ19kZXRlY3Q+Ci0KLS0gVW5yZWdpc3RlciBlbnRyeSBpbiA8c2dfZGV0YWNoPgotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIEFMU0EgZHJpdmVycwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwMQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMDIKLQotLSBVcGRhdGUgc2VyaWFsIGRyaXZlciB0byByZWdpc3RlciBQQ01DSUEgZW50cmllcwotICBUaGFua3MgdG8gUm9jaC1BbGV4YW5kcmUgTm9taW5lLUJlZ3VpbiA8cm9jaEBzYW1hcmthbmQuaW5maW5pLmZyPgotCi0tIFVwZGF0ZWQgYW4gZW1haWwgYWRkcmVzcyBpbiBDaGFuZ2VMb2cKLQotLSBIaWRlIHZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGVudHJpZXMgZnJvbSBkaXJlY3RvcnkgbGlzdGluZ3Mgd2hlbgotICBjb3JyZXNwb25kaW5nIGNvbnNvbGUgZGV2aWNlIGlzIG5vdCBvcGVuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTAzCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwNAotCi0tIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHNvbWUgZnVuY3Rpb25zCi0KLS0gQWRkZWQgImRvYyIgdGFyZ2V0IHRvIGZzL2RldmZzL01ha2VmaWxlCi0KLS0gQWRkZWQgInY0bCIgZGlyZWN0b3J5IGZvciB2aWRlbzRsaW51eCBkZXZpY2VzCi0KLS0gUmVwbGFjZWQgY2FsbCB0byA8ZGV2ZnNfdW5yZWdpc3Rlcj4gaW4gPHNkX2RldGFjaD4gd2l0aCBjYWxsIHRvCi0gIDxkZXZmc19yZWdpc3Rlcl9wYXJ0aXRpb25zPgotCi0tIE1vdmVkIHJlZ2lzdHJhdGlvbiBmb3Igc3IgYW5kIHNnIGRyaXZlcnMgZnJvbSBkZXRlY3QoKSB0byBhdHRhY2goKQotICBtZXRob2RzCi0KLS0gUmVnaXN0ZXIgZW50cmllcyBpbiA8c3RfYXR0YWNoPiBhbmQgdW5yZWdpc3RlciBpbiA8c3RfZGV0YWNoPgotCi0tIFdvcmsgYXJvdW5kIElERSBkcml2ZXIgdHJlYXRpbmcgQ0QtUk9NIGFzIGdlbmRpc2sKLQotLSBVc2UgPHNlZD4gaW5zdGVhZCBvZiA8dHI+IGluIHJjLmRldmZzCi0KLS0gVXBkYXRlZCBUb0RvIGxpc3QKLQotLSBSZW1vdmVkICJvb3BzLW9uLXBhbmljIiBib290IG9wdGlvbjogbm93IGFsd2F5cyBPb3BzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTA1Ci0KLS0gVW5yZWdpc3RlciBTQ1NJIGhvc3QgZnJvbSA8c2NzaV9ob3N0X25vX2xpc3Q+IGluIDxzY3NpX3VucmVnaXN0ZXI+Ci0gIFRoYW5rcyB0byBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KLQotLSBEb24ndCBzYXZlIC9kZXYvbG9nIGluIHJjLmRldmZzCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNC1wcmUxCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTA2Ci0KLS0gRml4ZWQgc2lsbHkgdHlwbyBpbiBkcml2ZXJzL3Njc2kvc3QuYwotCi0tIEltcHJvdmVkIGRlYnVnZ2luZyBpbiA8ZGV2ZnNfcmVnaXN0ZXI+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTA3Ci0KLS0gQWRkZWQgImRpdW5saW5rIiBhbmQgIm5va21vZCIgYm9vdCBvcHRpb25zCi0KLS0gUmVtb3ZlZCBzdXBlcmZsdW91cyB3YXJuaW5nIG1lc3NhZ2UgaW4gPGRldmZzX2RfaXB1dD4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMDgKLQotLSBSZW1vdmUgZW50cmllcyB3aGVuIHVubG9hZGluZyBzb3VuZCBtb2R1bGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMDkKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy42LXByZTIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMTAKLQotLSBUb29rIGFjY291bnQgb2YgY2hhbmdlIHRvIDxkX2FsbG9jX3Jvb3Q+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTExCi0KLS0gQ3JlYXRlZCBzZXBhcmF0ZSBldmVudCBxdWV1ZSBmb3IgZWFjaCBtb3VudGVkIGRldmZzCi0KLS0gUmVtb3ZlZCA8ZGV2ZnNfaW52YWxpZGF0ZV9kY2FjaGU+Ci0KLS0gQ3JlYXRlZCBuZXcgaW9jdGwoKXMgZm9yIGRldmZzZAotCi0tIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byAzCi0KLS0gRml4ZWQgYnVnIHdoZW4gcmUtY3JlYXRpbmcgZGlyZWN0b3JpZXM6IGNvbnRlbnRzIHdlcmUgbG9zdAotCi0tIEJsb2NrIGFjY2VzcyB0byBpbm9kZXMgdW50aWwgZGV2ZnNkIHVwZGF0ZXMgcGVybWlzc2lvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMTIKLQotLSBNb2RpZmllZCBwYXRjaCBzbyBpdCBhcHBsaWVzIGFnYWluc3QgMi4zLjUgYW5kIDIuMy42Ci0KLS0gVXBkYXRlZCBhbiBlbWFpbCBhZGRyZXNzIGluIENoYW5nZUxvZwotCi0tIERvIG5vdCBhdXRvbWF0aWNhbGx5IGNoYW5nZSBvd25lcnNoaXAvcHJvdGVjdGlvbiBvZiAvZGV2L3R0eTxuPgotCi0tIFVwZGF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZgotCi0tIFN3aXRjaGVkIHRvIHNlbmRpbmcgcHJvY2VzcyB1aWQvZ2lkIHRvIGRldmZzZAotCi0tIFJlbmFtZWQgPGNhbGxfa21vZD4gdG8gPHRyeV9tb2Rsb2FkPgotCi0tIEFkZGVkIERFVkZTRF9OT1RJRllfTE9PS1VQIGV2ZW50Ci0KLS0gQWRkZWQgREVWRlNEX05PVElGWV9DSEFOR0UgZXZlbnQKLQotLSBBZGRlZCBERVZGU0RfTk9USUZZX0NSRUFURSBldmVudAotCi0tIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byA0Ci0KLS0gTW92ZWQga2VybmVsLXNwZWNpZmljIHN0dWZmIHRvIGluY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMTMKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy45Ci0KLS0gUmVzdHJpY3RlZCBwZXJtaXNzaW9ucyBvbiBzb21lIGJsb2NrIGRldmljZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMTQKLQotLSBBZGRlZCBzdXBwb3J0IGZvciAvZGV2L25ldGxpbmsKLSAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+Ci0KLS0gUmV0dXJuIEVJU0RJUiByYXRoZXIgdGhhbiBFSU5WQUwgZm9yIHJlYWQoMikgb24gZGlyZWN0b3JpZXMKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xMAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjExNQotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIGFsbCByZW1haW5pbmcgY2hhcmFjdGVyIGRldmljZXMKLSAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+Ci0KLS0gQ2xlYW5lZCB1cCBuZXRsaW5rIHN1cHBvcnQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMTYKLQotLSBBZGRlZCBzdXBwb3J0IGZvciAvZGV2L3BhcnBvcnQlZAotICBUaGFua3MgdG8gVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+Ci0KLS0gRml4ZWQgcGFyYWxsZWwgcG9ydCBBVEFQSSB0YXBlIGRyaXZlcgotCi0tIEZpeGVkIEF0YXJpIFNMTSBsYXNlciBwcmludGVyIGRyaXZlcgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjExNwotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIENPU0EgY2FyZAotICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KLQotLSBGaXhlZCBkcml2ZXJzL2NoYXIvcHBkZXYuYzogbWlzc2luZyAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0tIEZpeGVkIGRyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWluaXQuYwotICBUaGFua3MgdG8gVmxhZGltaXIgUG9wb3YgPG1hc2hncmFkQHVzYS5uZXQ+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTE4Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMTUtcHJlMwotCi0tIEZpeGVkIGJ1ZyBpbiBsb29wIGRyaXZlcgotCi0tIFVucmVnaXN0ZXIgL2Rldi9scCVkIGVudHJpZXMgaW4gZHJpdmVycy9jaGFyL2xwLmMKLSAgVGhhbmtzIHRvIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BkczIucGcuZ2RhLnBsPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjExOQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjE2Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTIwCi0KLS0gRml4ZWQgYnVnIGluIGRyaXZlcnMvc2NzaS9zY3NpLmMKLQotLSBBZGRlZCAvZGV2L3BwcAotICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xNwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyMQotCi0tIEZpeGVkIGJ1ZyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjE4Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTIyCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMTkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMjMKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4yMAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyNAotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjIxCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTI1Ci0KLS0gQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2luZm8+LCA8ZGV2ZnNfc2V0X2luZm8+LAotICA8ZGV2ZnNfZ2V0X2ZpcnN0X2NoaWxkPiBhbmQgPGRldmZzX2dldF9uZXh0X3NpYmxpbmc+Ci0gIEFkZGVkIDw8ZGlyPj4gcGFyYW1ldGVyIHRvIDxkZXZmc19yZWdpc3Rlcj4sIDxkZXZmc19ta19jb21wYXQ+LAotICA8ZGV2ZnNfbWtfZGlyPiBhbmQgPGRldmZzX2ZpbmRfaGFuZGxlPgotICBXb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBGaXhlZCBhcHBhcmVudCBidWcgaW4gQ09TQSBkcml2ZXIKLQotLSBSZS1pbnN0YXRlZCAic2NzaWhvc3RzPSIgYm9vdCBvcHRpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMjYKLQotLSBBbHdheXMgY3JlYXRlIC9kZXYvcHRzIGlmIENPTkZJR19VTklYOThfUFRZUz15Ci0KLS0gRml4ZWQgY2FsbCB0byA8ZGV2ZnNfbWtfZGlyPiBpbiBkcml2ZXJzL2Jsb2NrL2lkZS1kaXNrLmMKLSAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+Ci0KLS0gQWxsb3cgbXVsdGlwbGUgdW5yZWdpc3RyYXRpb25zCi0KLS0gQ3JlYXRlZCAvZGV2L3Njc2kgaGllcmFyY2h5Ci0gIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyNwotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBObyBsb25nZXIgZGlzYWJsZSBkZXZwdHMgaWYgZGV2ZnMgZW5hYmxlZCAoY2F2ZWF0IGVtcHRvcikKLQotLSBBZGRlZCBmbGFncyBhcnJheSB0byBzdHJ1Y3QgZ2VuZGlzayBhbmQgcmVtb3ZlZCBjb2RlIGZyb20KLSAgZHJpdmVycy9zY3NpL3NkLmMKLQotLSBDcmVhdGVkIC9kZXYvZGlzY3MgaGllcmFyY2h5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTI4Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIENyZWF0ZWQgL2Rldi9jZHJvbXMgaGllcmFyY2h5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTI5Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBzb3VuZCBkZXZpY2VzCi0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHByaW50ZXIgZGV2aWNlcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciB2aWRlbzRsaW51eCBkZXZpY2VzCi0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHBhcmFsbGVsIHBvcnQgZGV2aWNlcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBmcmFtZSBidWZmZXIgZGV2aWNlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzMAotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBBZGRlZCBtYWpvciBhbmQgbWlub3IgbnVtYmVyIHRvIGRldmZzZCBwcm90b2NvbAotCi0tIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byA1Ci0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIFNvdW5kQmxhc3RlciBDRC1ST01zCi0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIG5ldGxpbmsgZGV2aWNlcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIGdlbmVyaWMgZGV2aWNlcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIHRhcGUgZGV2aWNlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzMQotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBTdXBwb3J0IGluZm8gcG9pbnRlciBmb3IgYWxsIGRldmZzIGVudHJ5IHR5cGVzCi0KLS0gQWRkZWQgPDxpbmZvPj4gcGFyYW1ldGVyIHRvIDxkZXZmc19ta19kaXI+IGFuZCA8ZGV2ZnNfbWtfc3ltbGluaz4KLQotLSBSZW1vdmVkIC9kZXYvc3QgaGllcmFyY2h5Ci0KLS0gUmVtb3ZlZCAvZGV2L3NnIGhpZXJhcmNoeQotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBsb29wIGRldmljZXMKLQotLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgSURFIHRhcGUgZGV2aWNlcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIENELVJPTXMKLQotLSBSZW1vdmVkIC9kZXYvc3IgaGllcmFyY2h5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTMyCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBmbG9wcHkgZGV2aWNlcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBSQU1ESVNDcwotCi0tIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBtZXRhLWRldmljZXMKLQotLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgU0NTSSBkaXNjcwotCi0tIENyZWF0ZWQgPGRldmZzX21ha2Vfcm9vdD4KLQotLSBSZW1vdmVkIC9kZXYvc2QgaGllcmFyY2h5Ci0KLS0gU3VwcG9ydCAiLi4vIiB3aGVuIHNlYXJjaGluZyBkZXZmcyBuYW1lc3BhY2UKLQotLSBDcmVhdGVkIC9kZXYvaWRlL2hvc3QqIGhpZXJhcmNoeQotCi0tIFN1cHBvcnRlZCBJREUgaGFyZCBkaXNjcyBpbiAvZGV2L2lkZS9ob3N0KiBoaWVyYXJjaHkKLQotLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgSURFIGRpc2NzCi0KLS0gUmVtb3ZlZCAvZGV2L2lkZS9oZCBoaWVyYXJjaHkKLQotLSBTdXBwb3J0ZWQgSURFIENELVJPTXMgaW4gL2Rldi9pZGUvaG9zdCogaGllcmFyY2h5Ci0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIElERSBDRC1ST01zCi0KLS0gUmVtb3ZlZCAvZGV2L2lkZS9jZCBoaWVyYXJjaHkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMzMKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gQ3JlYXRlZCA8ZGV2ZnNfZ2V0X3VucmVnaXN0ZXJfc2xhdmU+Ci0KLS0gRml4ZWQgYnVnIGluIGZzL3BhcnRpdGlvbnMvY2hlY2suYyB3aGVuIHJlc2Nhbm5pbmcKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMzQKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gUmVtb3ZlZCAvZGV2L3NkLCAvZGV2L3NyLCAvZGV2L3N0IGFuZCAvZGV2L3NnIGRpcmVjdG9yaWVzCi0KLS0gUmVtb3ZlZCAvZGV2L2lkZS9oZCBkaXJlY3RvcnkKLQotLSBFeHBvcnRlZCA8ZGV2ZnNfZ2V0X3BhcmVudD4KLQotLSBDcmVhdGVkIDxkZXZmc19yZWdpc3Rlcl90YXBlPiBhbmQgL2Rldi90YXBlcyBoaWVyYXJjaHkKLQotLSBSZW1vdmVkIC9kZXYvaWRlL210IGhpZXJhcmNoeQotCi0tIFJlbW92ZWQgL2Rldi9pZGUvZmQgaGllcmFyY2h5Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMjUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMzUKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGRldmljZXMKLQotLSBSZW1vdmVkIHVudXNlZCA8ZGV2ZnNfc2V0X3N5bWxpbmtfZGVzdGluYXRpb24+Ci0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHNlcmlhbCBkZXZpY2VzCi0KLS0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIGNvbnNvbGUgZGV2aWNlcwotCi0tIERvIG5vdCBoaWRlIGVudHJpZXMgZnJvbSBkZXZmc2Qgb3IgY2hpbGRyZW4KLQotLSBSZW1vdmVkIERFVkZTX0ZMX1RUWV9DT01QQVQgZmxhZwotCi0tIFJlbW92ZWQgIm5vdHR5Y29tcGF0IiBib290IG9wdGlvbgotCi0tIFJlbW92ZWQgPGRldmZzX21rX2NvbXBhdD4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMzYKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gTW92ZWQgQlNEIHB0eSBkZXZpY2VzIHRvIC9kZXYvcHR5Ci0KLS0gQWRkZWQgREVWRlNfRkxfV0FJVCBmbGFnCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTM3Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFJlYWxseSBmaXhlZCBidWcgaW4gZnMvcGFydGl0aW9ucy9jaGVjay5jIHdoZW4gcmVzY2FubmluZwotCi0tIFN1cHBvcnQgbmV3ICJkaXNjIiBuYW1pbmcgc2NoZW1lIGluIDxnZXRfcmVtb3ZhYmxlX3BhcnRpdGlvbj4KLQotLSBBbGxvdyBOVUxMIGZvcHMgaW4gPGRldmZzX3JlZ2lzdGVyPgotCi0tIFJlbW92ZWQgcmVkdW5kYW50IG5hbWUgZnVuY3Rpb25zIGluIFNDU0kgZGlzYyBhbmQgSURFIGRyaXZlcnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMzgKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gRml4ZWQgb2xkIGJ1Z3MgaW4gZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYywgZHJpdmVycy9jaGFyL3RwcWljMDIuYywKLSAgZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBhbmQgZHJpdmVycy9zY3NpL3Njc2kuYwotICBUaGFua3MgdG8gU2VyZ2V5IEt1YnVzaGluIDxrc2lAa3NpLWxpbnV4LmNvbT4KLQotLSBGYWxsIGJhY2sgdG8gbWFqb3IgdGFibGUgaWYgTlVMTCBmb3BzIGdpdmVuIHRvIDxkZXZmc19yZWdpc3Rlcj4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxMzkKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gQ29ycmVjdGVkIGFuZCBtb3ZlZCA8Z2V0X2Jsa2ZvcHM+IGFuZCA8Z2V0X2NocmZvcHM+IGRlY2xhcmF0aW9ucwotICBmcm9tIGFyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyB0byBpbmNsdWRlL2xpbnV4L2ZzLmgKLQotLSBSZW1vdmVkIG5hbWUgZnVuY3Rpb24gZnJvbSBzdHJ1Y3QgZ2VuZGlzawotCi0tIFVwZGF0ZWQgZGV2ZnMgRkFRCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQwCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjI3Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQxCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIEJ1ZyBmaXggaW4gYXJjaC9tNjhrL2F0YXJpL2pveXN0aWNrLmMKLQotLSBNb3ZlZCBJU0ROIGFuZCBjYXBpIGRldmljZXMgdG8gL2Rldi9pc2RuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQyCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIEJ1ZyBmaXggaW4gZHJpdmVycy9ibG9jay9pZGUtcHJvYmUuYyAocGF0Y2ggY29uZnVzaW9uKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE0MwotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBCdWcgZml4IGluIGRyaXZlcnMvYmxvY2svYmxrcGcuYzpwYXJ0aXRpb25fbmFtZSgpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQ0Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjI5Ci0KLS0gUmVtb3ZlZCBjYWxscyB0byA8ZGV2ZnNfcmVnaXN0ZXI+IGZyb20gY2R1MzFhLCBjbTIwNiwgbWNkIGFuZCBtY2R4Ci0gIENELVJPTSBkcml2ZXJzOiBnZW5lcmljIGRyaXZlciBoYW5kbGVzIHRoaXMgbm93Ci0KLS0gTW92ZWQgam95c3RpY2sgZGV2aWNlcyB0byAvZGV2L2pveXN0aWNrcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE0NQotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zMC1wcmUzCi0KLS0gUmVnaXN0ZXIgd2hvbGUtZGlzYyBlbnRyeSBldmVuIGZvciBpbnZhbGlkIHBhcnRpdGlvbiB0YWJsZXMKLQotLSBGaXhlZCBidWcgaW4gbW91bnRpbmcgcm9vdCBGUyB3aGVuIGluaXRyZCBlbmFibGVkCi0KLS0gRml4ZWQgZGV2aWNlIGVudHJ5IGxlYWsgd2l0aCBJREUgQ0QtUk9NcwotCi0tIEZpeGVkIGNvbXBpbGUgcHJvYmxlbSB3aXRoIGRyaXZlcnMvaXNkbi9pc2RuX2NvbW1vbi5jCi0KLS0gTW92ZWQgQ09TQSBkZXZpY2VzIHRvIC9kZXYvY29zYQotCi0tIFN1cHBvcnQgZmlmb3Mgd2hlbiB1bnJlZ2lzdGVyaW5nCi0KLS0gQ3JlYXRlZCA8ZGV2ZnNfcmVnaXN0ZXJfc2VyaWVzPiBhbmQgdXNlZCBpbiBtYW55IGRyaXZlcnMKLQotLSBNb3ZlZCBDb2RhIGRldmljZXMgdG8gL2Rldi9jb2RhCi0KLS0gTW92ZWQgcGFyYWxsZWwgcG9ydCBJREUgdGFwZXMgdG8gL2Rldi9wdAotCi0tIE1vdmVkIHBhcmFsbGVsIHBvcnQgSURFIGdlbmVyaWMgZGV2aWNlcyB0byAvZGV2L3BnCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQ2Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFJlbW92ZWQgb2Jzb2xldGUgREVWRlNfRkxfQ09NUEFUIGFuZCBERVZGU19GTF9UT0xFUkFOVCBmbGFncwotCi0tIEZpeGVkIGNvbXBpbGUgcHJvYmxlbSB3aXRoIGZzL2NvZGEvcHNkZXYuYwotCi0tIFJlaW5zdGF0ZSBjaGFuZ2UgdG8gPGRldmZzX3JlZ2lzdGVyX2Jsa2Rldj4gaW4KLSAgZHJpdmVycy9ibG9jay9pZGUtcHJvYmUuYyBub3cgdGhhdCBmcy9pc29mcy9pbm9kZS5jIGlzIGZpeGVkCi0KLS0gU3dpdGNoZWQgdG8gPGRldmZzX3JlZ2lzdGVyX2Jsa2Rldj4gaW4gZHJpdmVycy9ibG9jay9mbG9wcHkuYywKLSAgZHJpdmVycy9zY3NpL3NyLmMgYW5kIGRyaXZlcnMvYmxvY2svbWQuYwotCi0tIE1vdmVkIERBQzk2MCBkZXZpY2VzIHRvIC9kZXYvZGFjOTYwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQ3Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjMyLXByZTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNDgKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gUmVtb3ZlZCBrbW9kIHN1cHBvcnQ6IHVzZSBkZXZmc2QgaW5zdGVhZAotCi0tIE1vdmVkIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgdG8gL2Rldi9taXNjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTQ5Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIEVuc3VyZSBpbmNsdWRlL2xpbnV4L2pveXN0aWNrLmggaXMgT0sgZm9yIHVzZXItc3BhY2UKLQotLSBJbXByb3ZlZCBkZWJ1Z2dpbmcgaW4gPGdldF92ZnNfaW5vZGU+Ci0KLS0gRW5zdXJlIGRlbnRyaWVzIGNyZWF0ZWQgYnkgZGV2ZnNkIHdpbGwgYmUgY2xlYW5lZCB1cAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1MAotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zNAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1MQotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zNS1wcmUxCi0KLS0gQ3JlYXRlZCA8ZGV2ZnNfZ2V0X25hbWU+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTUyCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFVwZGF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZgotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjM2LXByZTEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNTMKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDIKLQotLSBSZW1vdmVkIDxkZXZmc19maWxsX2ZpbGU+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTU0Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFRvb2sgYWNjb3VudCBvZiBkZXZpY2UgbnVtYmVyIGNoYW5nZXMgZm9yIC9kZXYvZmIqCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTU1Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjQzLXByZTgKLQotLSBNb3ZlZCAvZGV2L3R0eTAgdG8gL2Rldi92Yy8wCi0KLS0gTW92ZWQgc2VxdWVuY2UgbnVtYmVyIGZvcm1hdHRpbmcgZnJvbSA8X3R0eV9tYWtlX25hbWU+IHRvIGRyaXZlcnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNTYKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gRml4ZWQgYnJlYWthZ2UgaW4gZHJpdmVycy9zY3NpL3NkLmMgZHVlIHRvIHJlY2VudCBTQ1NJIGNoYW5nZXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNTcKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNTgKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDYtcHJlMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1OQotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBGaXhlZCBkcml2ZXJzL2Jsb2NrL21kLmMKLSAgVGhhbmtzIHRvIE1pa2UgR2FsYnJhaXRoIDxtaWtlZ0B3ZWlkZW4uZGU+Ci0KLS0gRG9jdW1lbnRhdGlvbiBmaXhlcwotCi0tIE1vdmVkIGRldmljZSByZWdpc3RyYXRpb24gZnJvbSA8bHBfaW5pdD4gdG8gPGxwX3JlZ2lzdGVyPgotICBUaGFua3MgdG8gVGltIFdhdWdoIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNjAKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gRml4ZWQgZHJpdmVycy9jaGFyL2pveXN0aWNrL2pveXN0aWNrLmMKLSAgVGhhbmtzIHRvIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+Ci0KLS0gRG9jdW1lbnRhdGlvbiB1cGRhdGVzCi0KLS0gRml4ZWQgYXJjaC9pMzg2L2tlcm5lbC9tdHJyLmMgaWYgcHJvY2ZzIGFuZCBkZXZmcyBub3QgZW5hYmxlZAotCi0tIEZpeGVkIGRyaXZlcnMvY2hhci9zdGFsbGlvbi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTYxCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFJlbW92ZSAvZGV2L2lkZSB3aGVuIGlkZS1tb2QgaXMgdW5sb2FkZWQKLQotLSBGaXhlZCBidWcgaW4gZHJpdmVycy9ibG9jay9pZGUtcHJvYmUuYyB3aGVuIHNlY29uZGFyeSBidXQgbm8gcHJpbWFyeQotCi0tIEFkZGVkIERFVkZTX0ZMX05PX1BFUlNJU1RFTkNFIGZsYWcKLQotLSBVc2VkIG5ldyBERVZGU19GTF9OT19QRVJTSVNURU5DRSBmbGFnIGZvciBVbml4OTggcHR5IHNsYXZlcwotCi0tIFJlbW92ZWQgdW5uZWNlc3NhcnkgY2FsbCB0byA8dXBkYXRlX2RldmZzX2lub2RlX2Zyb21fZW50cnk+IGluCi0gIDxkZXZmc19yZWFkZGlyPgotCi0tIE9ubHkgc2V0IGF1dG8tb3duZXJzaGlwIGZvciAvZGV2L3B0eS9zKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2MgotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBTZXQgaW5vZGUtPmlfc2l6ZSB0byBjb3JyZWN0IHNpemUgZm9yIHN5bWxpbmtzCi0gIFRoYW5rcyB0byBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAZ29vcC5vcmc+Ci0KLS0gT25seSBnaXZlIGxvb2t1cCgpIG1ldGhvZCB0byBkaXJlY3RvcmllcyB0byBjb21wbHkgd2l0aCBuZXcgVkZTCi0gIGFzc3VtcHRpb25zCi0KLS0gUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzIGluIHN5bWxpbmsgbWV0aG9kcwotCi0tIERvbid0IGtpbGwgZXhpc3RpbmcgYmxvY2sgb3BzIGluIDxkZXZmc19yZWFkX2lub2RlPgotCi0tIFJlc3RvcmUgYXV0by1vd25lcnNoaXAgZm9yIC9kZXYvcHR5L20qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTYzCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIERvbid0IGNyZWF0ZSBtaXNzaW5nIGRpcmVjdG9yaWVzIGluIDxkZXZmc19maW5kX2hhbmRsZT4KLQotLSBSZW1vdmVkIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvbWstZGV2bGlua3MKLQotLSBVcGRhdGVkIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTY0Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIEZpeGVkIENPTkZJR19ERVZGUyBicmVha2FnZSBpbiBkcml2ZXJzL2NoYXIvc2VyaWFsLmMgaW50cm9kdWNlZCBpbgotICBsaW51eC0yLjMuOTktcHJlNi03Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTY1Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi4zLjk5LXByZTYKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNjYKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gQWRkZWQgQ09ORklHX0RFVkZTX01PVU5UCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTY3Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9SRUFETUUKLQotLSBVcGRhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNjgKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gRGlzYWJsZWQgbXVsdGktbW91bnQgY2FwYWJpbGl0eSAodXNlIFZGUyBiaW5kaW5ncyBpbnN0ZWFkKQotCi0tIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2OQotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBSZW1vdmVkIG11bHRpLW1vdW50IGNvZGUKLQotLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgbWFjcm9zOiBWRlMgaGFzIGNoYW5nZWQgdG9vIG11Y2gKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNzAKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi0KLS0gTWVyZ2VkIGRldmZzIGlub2RlIGludG8gZGV2ZnMgZW50cnkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNzEKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gVXBkYXRlZCBzYW1wbGUgbW9kdWxlcy5jb25mCi0KLS0gUmVtb3ZlZCBkZWFkIGNvZGUgaW4gPGRldmZzX3JlZ2lzdGVyPiB3aGljaCB1c2VkIHRvIGNhbGwKLSAgPGZyZWVfZGVudHJpZXM+Ci0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjQuMC10ZXN0Mi1wcmUzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTcyCi0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIENoYW5nZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19yZWdpc3Rlcj4KLQotLSBDaGFuZ2VkIGludGVyZmFjZSB0byA8ZGV2ZnNfcmVnaXN0ZXJfc2VyaWVzPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3MwotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBTaW1wbGlmaWVkIGludGVyZmFjZSB0byA8ZGV2ZnNfbWtfc3ltbGluaz4KLQotLSBTaW1wbGlmaWVkIGludGVyZmFjZSB0byA8ZGV2ZnNfbWtfZGlyPgotCi0tIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19maW5kX2hhbmRsZT4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNzQKLQotV29yayBzcG9uc29yZWQgYnkgU0dJCi0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTc1Ci0KLVdvcmsgc3BvbnNvcmVkIGJ5IFNHSQotCi0tIERvY0Jvb2sgdXBkYXRlIGZvciBmcy9kZXZmcy9iYXNlLmMKLSAgVGhhbmtzIHRvIFRpbSBXYXVnaCA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLS0gUmVtb3ZlZCBzdGFsZSBmcy90dW5uZWwuYyAod2FzIG5ldmVyIHVzZWQgb3IgY29tcGxldGVkKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3NgotCi1Xb3JrIHNwb25zb3JlZCBieSBTR0kKLQotLSBVcGRhdGVkIFRvRG8gbGlzdAotCi0tIFJlbW92ZWQgc2FtcGxlIG1vZHVsZXMuY29uZjogbm93IGRpc3RyaWJ1dGVkIHdpdGggZGV2ZnNkCi0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjQuMC10ZXN0My1wcmU0ICh3aGljaCBoYWQgZGV2ZnMtcGF0Y2gtdjE3NCkKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxNzcKLQotLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKLQotLSBEb2N1bWVudGF0aW9uIGNsZWFudXBzCi0KLS0gRW5zdXJlIDxkZXZmc19nZW5lcmF0ZV9wYXRoPiB0ZXJtaW5hdGVzIHN0cmluZyBmb3Igcm9vdCBlbnRyeQotICBUaGFua3MgdG8gVGltIEphbnNlbiA8dGltQHRqYW5zZW4uZGU+Ci0KLS0gRXhwb3J0ZWQgPGRldmZzX2dldF9uYW1lPiB0byBtb2R1bGVzCi0KLS0gTWFrZSA8ZGV2ZnNfbWtfc3ltbGluaz4gc2VuZCBldmVudHMgdG8gZGV2ZnNkCi0KLS0gQ2xlYW5lZCB1cCBvcHRpb24gcHJvY2Vzc2luZyBpbiA8ZGV2ZnNfc2V0dXA+Ci0KLS0gRml4ZWQgYnVncyBpbiBoYW5kbGluZyBzeW1saW5rczogY291bGQgbGVhayBvciBjYXVzZSBPb3BzCi0KLS0gQ2xlYW5lZCB1cCBkaXJlY3RvcnkgaGFuZGxpbmcgYnkgc2VwYXJhdGluZyBmb3BzCi0gIFRoYW5rcyB0byBBbGV4YW5kZXIgVmlybyA8dmlyb0BwYXJjZWxmYXJjZS5saW51eC50aGVwbGFuZXQuY28udWs+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTc4Ci0KLS0gRml4ZWQgaGFuZGxpbmcgb2YgaW52ZXJ0ZWQgb3B0aW9ucyBpbiA8ZGV2ZnNfc2V0dXA+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTc5Ci0KLS0gQWRqdXN0ZWQgPHRyeV9tb2Rsb2FkPiB0byBhY2NvdW50IGZvciA8ZGV2ZnNfZ2VuZXJhdGVfcGF0aD4gZml4Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTgwCi0KLS0gRml4ZWQgIUNPTkZJR19ERVZGU19GUyBzdHViIGRlY2xhcmF0aW9uIG9mIDxkZXZmc19nZXRfaW5mbz4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxODEKLQotLSBBbnN3ZXJlZCBxdWVzdGlvbiBwb3NlZCBieSBBbCBWaXJvIGFuZCByZW1vdmVkIGhpcyBjb21tZW50cyBmcm9tIDxkZXZmc19vcGVuPgotCi0tIE1vdmVkIHNldHRpbmcgb2YgcmVnaXN0ZXJlZCBmbGFnIGFmdGVyIG90aGVyIGZpZWxkcyBhcmUgY2hhbmdlZAotCi0tIEZpeGVkIHJhY2UgYmV0d2VlbiA8ZGV2ZnNkX2Nsb3NlPiBhbmQgPGRldmZzZF9ub3RpZnlfb25lPgotCi0tIEdsb2JhbCBWRlMgY2hhbmdlcyBhZGRlZCBib2d1cyBCS0wgdG8gZGV2ZnNkX2Nsb3NlKCk6IHJlbW92ZWQKLQotLSBXaWRlbmVkIGxvY2tpbmcgaW4gPGRldmZzX3JlYWRsaW5rPiBhbmQgPGRldmZzX2ZvbGxvd19saW5rPgotCi0tIFJlcGxhY2VkIDxkZXZmc2RfcmVhZD4gc3RhY2sgdXNhZ2Ugd2l0aCA8ZGV2ZnNkX2lvY3RsPiBrbWFsbG9jCi0KLS0gU2ltcGxpZmllZCBsb2NraW5nIGluIDxkZXZmc2RfaW9jdGw+IGFuZCBmaXhlZCBtZW1vcnkgbGVhawotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4MgotCi0tIENyZWF0ZWQgPGRldmZzXyphbGxvY19tYWpvcj4gYW5kIDxkZXZmc18qYWxsb2NfZGV2bnVtPgotCi0tIFJlbW92ZWQgYnJva2VuIGRldm51bSBhbGxvY2F0aW9uIGFuZCB1c2UgPGRldmZzX2FsbG9jX2Rldm51bT4KLQotLSBGaXhlZCBvbGQgZGV2bnVtIGxlYWsgYnkgY2FsbGluZyBuZXcgPGRldmZzX2RlYWxsb2NfZGV2bnVtPgotCi0tIENyZWF0ZWQgPGRldmZzXyphbGxvY191bmlxdWVfbnVtYmVyPgotCi0tIEZpeGVkIG51bWJlciBsZWFrIGZvciAvZGV2L2Nkcm9tcy9jZHJvbSVkCi0KLS0gRml4ZWQgbnVtYmVyIGxlYWsgZm9yIC9kZXYvZGlzY3MvZGlzYyVkCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTgzCi0KLS0gRml4ZWQgYnVnIGluIDxkZXZmc19zZXR1cD4gd2hpY2ggY291bGQgaGFuZyBib290IHByb2Nlc3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxODQKLQotLSBEb2N1bWVudGF0aW9uIHR5cG8gZml4IGZvciBmcy9kZXZmcy91dGlsLmMKLQotLSBGaXhlZCBkcml2ZXJzL2NoYXIvc3RhbGxpb24uYyBmb3IgZGV2ZnMKLQotLSBBZGRlZCBERVZGU0RfTk9USUZZX0RFTEVURSBldmVudAotCi0tIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQotCi0tIFJlbW92ZWQgI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+IGZyb20gZnMvZGV2ZnMvYmFzZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTg1Ci0KLS0gTWFkZSA8YmxvY2tfc2VtYXBob3JlPiBhbmQgPGNoYXJfc2VtYXBob3JlPiBpbiBmcy9kZXZmcy91dGlsLmMKLSAgcHJpdmF0ZQotCi0tIEZpeGVkIGlub2RlIHRhYmxlIHJhY2VzIGJ5IHJlbW92aW5nIGl0IGFuZCB1c2luZyBpbm9kZS0+dS5nZW5lcmljX2lwCi0gIGluc3RlYWQKLQotLSBNb3ZlZCA8ZGV2ZnNfcmVhZF9pbm9kZT4gaW50byA8Z2V0X3Zmc19pbm9kZT4KLQotLSBNb3ZlZCA8ZGV2ZnNfd3JpdGVfaW5vZGU+IGludG8gPGRldmZzX25vdGlmeV9jaGFuZ2U+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTg2Ci0KLS0gRml4ZWQgcmFjZSBpbiA8ZGV2ZnNfZG9fc3ltbGluaz4gZm9yIHVuaS1wcm9jZXNzb3IKLQotLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxODcKLQotLSBGaXhlZCBkcml2ZXJzL2NoYXIvc3RhbGxpb24uYyBmb3IgZGV2ZnMKLQotLSBGaXhlZCBkcml2ZXJzL2NoYXIvcm9ja2V0LmMgZm9yIGRldmZzCi0KLS0gRml4ZWQgYnVnIGluIDxkZXZmc19hbGxvY191bmlxdWVfbnVtYmVyPjogbGltaXRlZCB0byAxMjggbnVtYmVycwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4OAotCi0tIFVwZGF0ZWQgbWFqb3IgbWFza3MgaW4gZnMvZGV2ZnMvdXRpbC5jIHVwIHRvIExpbnVzJyAibm8gbmV3IG1ham9ycyIKLSAgcHJvY2xhbWF0aW9uLiBCbG9jazogd2VyZSAxMjYgbm93IDEyMiBmcmVlLCBjaGFyOiB3ZXJlIDI2IG5vdyAxOSBmcmVlCi0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi0KLS0gUmVtb3ZlZCByZW1uYW50IG9mIG11bHRpLW1vdW50IHN1cHBvcnQgaW4gPGRldmZzX21rbm9kPgotCi0tIFJlbW92ZWQgdW51c2VkIERFVkZTX0ZMX1NIT1dfVU5SRUcgZmxhZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4OQotCi0tIFJlbW92ZWQgbmxpbmsgZmllbGQgZnJvbSBzdHJ1Y3QgZGV2ZnNfaW5vZGUKLQotLSBSZW1vdmVkIGF1dG8tb3duZXJzaGlwIGZvciAvZGV2L3B0eS8qIChCU0QgcHR5cykgYW5kIHVzZWQKLSAgREVWRlNfRkxfQ1VSUkVOVF9PV05FUnxERVZGU19GTF9OT19QRVJTSVNURU5DRSBmb3IgL2Rldi9wdHkvcyogKGp1c3QKLSAgbGlrZSBVbml4OTggcHR5IHNsYXZlcykgYW5kIG1hZGUgL2Rldi9wdHkvbSogcnctcnctcnctIGFjY2VzcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjE5MAotCi0tIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQotCi0tIFJlcGxhY2VkIEJLTCB3aXRoIGdsb2JhbCByd3NlbSB0byBwcm90ZWN0IHN5bWxpbmsgZGF0YSAocXVpY2sgYW5kCi0gIGRpcnR5IGhhY2spCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTkxCi0KLS0gUmVwbGFjZWQgZ2xvYmFsIHJ3c2VtIGZvciBzeW1saW5rIHdpdGggcGVyLWxpbmsgcmVmY291bnQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxOTIKLQotLSBSZW1vdmVkIHVubmVjZXNzYXJ5ICNpZmRlZiBDT05GSUdfREVWRlNfRlMgZnJvbSBhcmNoL2kzODYva2VybmVsL210cnIuYwotCi0tIFBvcnRlZCB0byBrZXJuZWwgMi40LjEwLXByZTExCi0KLS0gU2V0IGlub2RlLT5pX21hcHBpbmctPmFfb3BzIGZvciBibG9jayBub2RlcyBpbiA8Z2V0X3Zmc19pbm9kZT4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxOTMKLQotLSBXZW50IGJhY2sgdG8gZ2xvYmFsIHJ3c2VtIGZvciBzeW1saW5rcyAocmVmY291bnQgc2NoZW1lIG5vIGdvb2QpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTk0Ci0KLS0gRml4ZWQgb3ZlcnJ1biBpbiA8ZGV2ZnNfbGluaz4gYnkgcmVtb3ZpbmcgZnVuY3Rpb24gKG5vdCBuZWVkZWQpCi0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTk1Ci0KLS0gRml4ZWQgYnVmZmVyIHVuZGVycnVuIGluIDx0cnlfbW9kbG9hZD4KLQotLSBNb3ZlZCBkb3duX3JlYWQoKSBmcm9tIDxzZWFyY2hfZm9yX2VudHJ5X2luX2Rpcj4gdG8gPGZpbmRfZW50cnk+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTk2Ci0KLS0gRml4ZWQgcmFjZSBpbiA8ZGV2ZnNkX2lvY3RsPiB3aGVuIHNldHRpbmcgZXZlbnQgbWFzawotICBUaGFua3MgdG8gS2FyaSBIdXJ0dGEgPGh1cnR0YUBsZWlqYS5taC5mbWkuZmk+Ci0KLS0gQXZvaWQgZGVhZGxvY2sgaW4gPGRldmZzX2ZvbGxvd19saW5rPiBieSB1c2luZyB0ZW1wb3JhcnkgYnVmZmVyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTk3Ci0KLS0gRmlyc3QgcmVsZWFzZSBvZiBuZXcgbG9ja2luZyBjb2RlIGZvciBkZXZmcyBjb3JlICh2MS4wKQotCi0tIEZpeGVkIGJ1ZyBpbiBkcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYxOTgKLQotLSBEaXNjYXJkIHRlbXBvcmFyeSBidWZmZXIsIG5vdyB1c2UgIiVzIiBmb3IgZGVudHJ5IG5hbWVzCi0KLS0gRG9uJ3QgZ2VuZXJhdGUgcGF0aCBpbiA8dHJ5X21vZGxvYWQ+OiB1c2UgZmFrZSBlbnRyeSBpbnN0ZWFkCi0KLS0gVXNlICJleGlzdGluZyIgZGlyZWN0b3J5IGluIDxfZGV2ZnNfbWFrZV9wYXJlbnRfZm9yX2xlYWY+Ci0KLS0gVXNlIHNsYWIgY2FjaGUgcmF0aGVyIHRoYW4gZml4ZWQgYnVmZmVyIGZvciBkZXZmc2QgZXZlbnRzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MTk5Ci0KLS0gUmVtb3ZlZCBvYnNvbGV0ZSB1c2FnZSBvZiBERVZGU19GTF9OT19QRVJTSVNURU5DRQotCi0tIFNlbmQgREVWRlNEX05PVElGWV9SRUdJU1RFUkVEIGV2ZW50cyBpbiA8ZGV2ZnNfbWtfZGlyPgotCi0tIEZpeGVkIGxvY2tpbmcgYnVnIGluIDxkZXZmc19kX3JldmFsaWRhdGVfd2FpdD4gZHVlIHRvIHR5cG8KLQotLSBEbyBub3Qgc2VuZCBDUkVBVEUsIENIQU5HRSwgQVNZTkNfT1BFTiBvciBERUxFVEUgZXZlbnRzIGZyb20gZGV2ZnNkCi0gIG9yIGNoaWxkcmVuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjAwCi0KLS0gUG9ydGVkIHRvIGtlcm5lbCAyLjUuMS1wcmUyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjAxCi0KLS0gRml4ZWQgYnVnIGluIDxkZXZmc2RfcmVhZD46IHdhcyBkZXJlZmVyZW5jaW5nIGZyZWVkIHBvaW50ZXIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyMDIKLQotLSBGaXhlZCBidWcgaW4gPGRldmZzZF9jbG9zZT46IHdhcyBkZXJlZmVyZW5jaW5nIGZyZWVkIHBvaW50ZXIKLQotLSBBZGRlZCBwcm9jZXNzIGdyb3VwIGNoZWNrIGZvciBkZXZmc2QgcHJpdmlsZWdlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwMwotCi0tIFVzZSBTTEFCX0FUT01JQyBpbiA8ZGV2ZnNkX25vdGlmeV9kZT4gZnJvbSA8ZGV2ZnNfZF9kZWxldGU+Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjA0Ci0KLS0gUmVtb3ZlZCBsb25nIG9ic29sZXRlIHJjLmRldmZzCi0KLS0gUmV0dXJuIG9sZCBlbnRyeSBpbiA8ZGV2ZnNfbWtfZGlyPiBmb3IgMi40Lngga2VybmVscwotCi0tIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQotCi0tIEluY3JlbWVudCByZWZjb3VudCBvbiBtb2R1bGUgaW4gPGNoZWNrX2Rpc2NfY2hhbmdlZD4KLQotLSBDcmVhdGVkIDxkZXZmc19nZXRfaGFuZGxlPiBhbmQgZXhwb3J0ZWQgPGRldmZzX3B1dD4KLQotLSBJbmNyZW1lbnQgcmVmY291bnQgb24gbW9kdWxlIGluIDxkZXZmc19nZXRfb3BzPgotCi0tIENyZWF0ZWQgPGRldmZzX3B1dF9vcHM+IGFuZCB1c2VkIHdoZXJlIG5lZWRlZCB0byBmaXggcmFjZXMKLQotLSBBZGRlZCBjbGFyaWZ5aW5nIGNvbW1lbnRzIGluIHJlc3BvbnNlIHRvIHByZWxpbWluYXJ5IEVNQyBjb2RlIHJldmlldwotCi0tIEFkZGVkIHBvaXNvbmluZyB0byA8ZGV2ZnNfcHV0PgotCi0tIEltcHJvdmVkIGRlYnVnZ2luZyBtZXNzYWdlcwotCi0tIEZpeGVkIHVucmVnaXN0ZXIgYnVncyBpbiBkcml2ZXJzL21kL2x2bS1mcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjA1Ci0KLS0gQ29ycmVjdGVkIChtYWRlIHVzZWZ1bCkgZGVidWdnaW5nIG1lc3NhZ2UgaW4gPHVucmVnaXN0ZXI+Ci0KLS0gTW92ZWQgPGttZW1fY2FjaGVfY3JlYXRlPiBpbiA8bW91bnRfZGV2ZnNfZnM+IHRvIDxpbml0X2RldmZzX2ZzPgotCi0tIEZpeGVkIGRyaXZlcnMvbWQvbHZtLWZzLmMgdG8gY3JlYXRlICJsdm0iIGVudHJ5Ci0KLS0gQWRkZWQgbWFnaWMgbnVtYmVyIHRvIGd1YXJkIGFnYWluc3Qgc2NyaWJibGluZyBkcml2ZXJzCi0KLS0gT25seSByZXR1cm4gb2xkIGVudHJ5IGluIDxkZXZmc19ta19kaXI+IGlmIGEgZGlyZWN0b3J5Ci0KLS0gRGVmaW5lZCBtYWNyb3MgZm9yIGVycm9yIGFuZCBkZWJ1ZyBtZXNzYWdlcwotCi0tIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwNgotCi0tIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIENvbXBhcSBjcHFhcnJheSBjb250cm9sbGVycwotCi0tIEZpeGVkIChyYXJlLCBvbGQpIHJhY2UgaW4gPGRldmZzX2xvb2t1cD4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyMDcKLQotLSBGaXhlZCBkZWFkbG9jayBidWcgaW4gPGRldmZzX2RfcmV2YWxpZGF0ZV93YWl0PgotCi0tIFRhZyBWRlMgZGVsZXRhYmxlIGluIDxkZXZmc19ta19zeW1saW5rPiBpZiBoYW5kbGUgaWdub3JlZAotCi0tIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwOAotCi0tIEFkZGVkIEtFUk5fKiB0byByZW1haW5pbmcgbWVzc2FnZXMKLQotLSBDbGVhbmVkIHVwIGRlY2xhcmF0aW9uIG9mIDxzdGF0X3JlYWQ+Ci0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjA5Ci0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi0KLS0gUmVtb3ZlZCBzaWxlbnRseSBpbnRyb2R1Y2VkIGNhbGxzIHRvIGxvY2tfa2VybmVsKCkgYW5kCi0gIHVubG9ja19rZXJuZWwoKSBkdWUgdG8gcmVjZW50IFZGUyBsb2NraW5nIGNoYW5nZXMuIEJLTCBpc24ndAotICByZXF1aXJlZCBpbiBkZXZmcyAKLQotLSBDaGFuZ2VkIDxkZXZmc19ybWRpcj4gdG8gYWxsb3cgbGF0ZXIgYWRkaXRpb25zIGlmIG5vdCB5ZXQgZW1wdHkKLQotLSBBZGRlZCBjYWxscyB0byA8ZGV2ZnNfcmVnaXN0ZXJfcGFydGl0aW9ucz4gaW4gZHJpdmVycy9ibG9jay9ibGtwYy5jCi0gIDxhZGRfcGFydGl0aW9uPiBhbmQgPGRlbF9wYXJ0aXRpb24+Ci0KLS0gRml4ZWQgYnVnIGluIDxkZXZmc19hbGxvY191bmlxdWVfbnVtYmVyPjogd2FzIGNsZWFyaW5nIGJleW9uZAotICBiaXRmaWVsZAotCi0tIEZpeGVkIGJpdGZpZWxkIGRhdGEgdHlwZSBmb3IgPGRldmZzXyphbGxvY19kZXZudW0+Ci0KLS0gTWFkZSBtYWpvciBiaXRmaWVsZCB0eXBlIGFuZCBpbml0aWFsaXNlciA2NCBiaXQgc2FmZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxMAotCi0tIFVwZGF0ZWQgZnMvZGV2ZnMvdXRpbC5jIHRvIGZpeCBzaGlmdCB3YXJuaW5nIG9uIDY0IGJpdCBtYWNoaW5lcwotICBUaGFua3MgdG8gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+Ci0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjExCi0KLS0gRG8gbm90IHB1dCBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlciBkZXZpY2VzIGluIC9kZXYvbWlzYyBpZiB0aGV5Ci0gIHNwZWNpZnkgdGhlaXIgb3duIGRpcmVjdG9yeSAoaS5lLiBjb250YWluIGEgJy8nIGNoYXJhY3RlcikKLQotLSBDb3BpZWQgbWFjcm8gZm9yIGVycm9yIG1lc3NhZ2VzIGZyb20gZnMvZGV2ZnMvYmFzZS5jIHRvCi0gIGZzL2RldmZzL3V0aWwuYyBhbmQgbWFkZSB1c2Ugb2YgdGhpcyBtYWNybwotCi0tIFJlbW92ZWQgMi40LnggY29tcGF0aWJpbGl0eSBjb2RlIGZyb20gZnMvZGV2ZnMvYmFzZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjEyCi0KLS0gQWRkZWQgQktMIHRvIDxkZXZmc19vcGVuPiBiZWNhdXNlIGRyaXZlcnMgc3RpbGwgbmVlZCBpdAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxMwotCi0tIFByb3RlY3RlZCA8c2Nhbl9kaXJfZm9yX3JlbW92YWJsZT4gYW5kIDxnZXRfcmVtb3ZhYmxlX3BhcnRpdGlvbj4KLSAgZnJvbSBjaGFuZ2luZyBkaXJlY3RvcnkgY29udGVudHMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyMTQKLQotLSBTd2l0Y2hlZCB0byBJU08gQyBzdHJ1Y3R1cmUgZmllbGQgaW5pdGlhbGlzZXJzCi0KLS0gU3dpdGNoIHRvIHNldF9jdXJyZW50X3N0YXRlKCkgYW5kIG1vdmUgYmVmb3JlIGFkZF93YWl0X3F1ZXVlKCkKLQotLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKLQotLSBGaXhlZCBkZXZmcyBlbnRyeSBsZWFrIGluIDxkZXZmc19yZWFkZGlyPiB3aGVuICpyZWFkZGlyIGZhaWxzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBwYXRjaCB2MjE1Ci0KLS0gQ3JlYXRlZCA8ZGV2ZnNfZmluZF9hbmRfdW5yZWdpc3Rlcj4KLQotLSBTd2l0Y2hlZCBtYW55IGZ1bmN0aW9ucyBmcm9tIDxkZXZmc19maW5kX2hhbmRsZT4gdG8KLSAgPGRldmZzX2ZpbmRfYW5kX3VucmVnaXN0ZXI+Ci0KLS0gU3dpdGNoZWQgbWFueSBmdW5jdGlvbnMgZnJvbSA8ZGV2ZnNfZmluZF9oYW5kbGU+IHRvIDxkZXZmc19nZXRfaGFuZGxlPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxNgotCi0tIFN3aXRjaGVkIGFyY2gvaWE2NC9zbi9pby9oY2wuYyBmcm9tIDxkZXZmc19maW5kX2hhbmRsZT4gdG8KLSAgPGRldmZzX2dldF9oYW5kbGU+Ci0KLS0gUmVtb3ZlZCBkZXByZWNhdGVkIDxkZXZmc19maW5kX2hhbmRsZT4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIHBhdGNoIHYyMTcKLQotLSBFeHBvcnRlZCA8ZGV2ZnNfZmluZF9hbmRfdW5yZWdpc3Rlcj4gYW5kIDxkZXZmc19vbmx5PiB0byBtb2R1bGVzCi0KLS0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCi0KLS0gRml4ZWQgbW9kdWxlIHVubG9hZCByYWNlIGluIDxkZXZmc19vcGVuPgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxOAotCi0tIFJlbW92ZWQgREVWRlNfRkxfQVVUT19PV05FUiBmbGFnCi0KLS0gU3dpdGNoZWQgbGluZ2VyaW5nIHN0cnVjdHVyZSBmaWVsZCBpbml0aWFsaXNlciB0byBJU08gQwotCi0tIEFkZGVkIGxvY2tpbmcgd2hlbiBzZXR0aW5nL2NsZWFyaW5nIGZsYWdzCi0KLS0gRG9jdW1lbnRhdGlvbiBmaXggaW4gZnMvZGV2ZnMvdXRpbC5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1JFQURNRSBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWJmYmEyLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTk1OSArMCwwIEBACi1EZXZmcyAoRGV2aWNlIEZpbGUgU3lzdGVtKSBGQVEKLQotCi1MaW51eCBEZXZmcyAoRGV2aWNlIEZpbGUgU3lzdGVtKSBGQVEKLVJpY2hhcmQgR29vY2gKLTIwLUFVRy0yMDAyCi0KLQotRG9jdW1lbnQgbGFuZ3VhZ2VzOgotCi0KLQotCi0KLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1OT1RFOiB0aGUgbWFzdGVyIGNvcHkgb2YgdGhpcyBkb2N1bWVudCBpcyBhdmFpbGFibGUgb25saW5lIGF0OgotCi1odHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL2RldmZzLmh0bWwKLWFuZCBsb29rcyBtdWNoIGJldHRlciB0aGFuIHRoZSB0ZXh0IHZlcnNpb24gZGlzdHJpYnV0ZWQgd2l0aCB0aGUKLWtlcm5lbCBzb3VyY2VzLiBBIG1pcnJvciBzaXRlIGlzIGF2YWlsYWJsZSBhdDoKLQotaHR0cDovL3d3dy5yYXMudWNhbGdhcnkuY2EvfnJnb29jaC9saW51eC9kb2NzL2RldmZzLmh0bWwKLQotVGhlcmUgaXMgYWxzbyBhbiBvcHRpb25hbCBkYWVtb24gdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGRldmZzLiBZb3UgY2FuCi1maW5kIG91dCBtb3JlIGFib3V0IGl0IGF0OgotCi1odHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC8KLQotQSBtYWlsaW5nIGxpc3QgaXMgYXZhaWxhYmxlIHdoaWNoIHlvdSBtYXkgc3Vic2NyaWJlIHRvLiBTZW5kCi1lbWFpbAotdG8gbWFqb3Jkb21vQG9zcy5zZ2kuY29tIHdpdGggdGhlIGZvbGxvd2luZyBsaW5lIGluIHRoZQotYm9keSBvZiB0aGUgbWVzc2FnZToKLXN1YnNjcmliZSBkZXZmcwotVG8gdW5zdWJzY3JpYmUsIHNlbmQgdGhlIG1lc3NhZ2UgYm9keToKLXVuc3Vic2NyaWJlIGRldmZzCi1pbnN0ZWFkLiBUaGUgbGlzdCBpcyBhcmNoaXZlZCBhdAotCi1odHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvZGV2ZnMvYXJjaGl2ZS8uCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbnRlbnRzCi0KLQotV2hhdCBpcyBpdD8KLQotV2h5IGRvIGl0PwotCi1XaG8gZWxzZSBkb2VzIGl0PwotCi1Ib3cgaXQgd29ya3MKLQotT3BlcmF0aW9uYWwgaXNzdWVzIChlc3NlbnRpYWwgcmVhZGluZykKLQotSW5zdHJ1Y3Rpb25zIGZvciB0aGUgaW1wYXRpZW50Ci1QZXJtaXNzaW9ucyBwZXJzaXN0ZW5jZSBhY3Jvc3MgcmVib290cwotRGVhbGluZyB3aXRoIGRyaXZlcnMgd2l0aG91dCBkZXZmcyBzdXBwb3J0Ci1BbGwgdGhlIHdheSB3aXRoIERldmZzCi1PdGhlciBJc3N1ZXMKLUtlcm5lbCBOYW1pbmcgU2NoZW1lCi1EZXZmc2QgTmFtaW5nIFNjaGVtZQotT2xkIENvbXBhdGliaWxpdHkgTmFtZXMKLVNDU0kgSG9zdCBQcm9iaW5nIElzc3VlcwotCi0KLQotRGV2aWNlIGRyaXZlcnMgY3VycmVudGx5IHBvcnRlZAotCi1BbGxvY2F0aW9uIG9mIERldmljZSBOdW1iZXJzCi0KLVF1ZXN0aW9ucyBhbmQgQW5zd2VycwotCi1NYWtpbmcgdGhpbmdzIHdvcmsKLUFsdGVybmF0aXZlcyB0byBkZXZmcwotV2hhdCBJIGRvbid0IGxpa2UgYWJvdXQgZGV2ZnMKLUhvdyB0byByZXBvcnQgYnVncwotU3RyYW5nZSBrZXJuZWwgbWVzc2FnZXMKLUNvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZGV2ZnNkCi0KLQotT3RoZXIgcmVzb3VyY2VzCi0KLVRyYW5zbGF0aW9ucyBvZiB0aGlzIGRvY3VtZW50Ci0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1XaGF0IGlzIGl0PwotCi1EZXZmcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byAicmVhbCIgY2hhcmFjdGVyIGFuZCBibG9jayBzcGVjaWFsIGRldmljZXMKLW9uIHlvdXIgcm9vdCBmaWxlc3lzdGVtLiBLZXJuZWwgZGV2aWNlIGRyaXZlcnMgY2FuIHJlZ2lzdGVyIGRldmljZXMgYnkKLW5hbWUgcmF0aGVyIHRoYW4gbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuIFRoZXNlIGRldmljZXMgd2lsbCBhcHBlYXIgaW4KLWRldmZzIGF1dG9tYXRpY2FsbHksIHdpdGggd2hhdGV2ZXIgZGVmYXVsdCBvd25lcnNoaXAgYW5kCi1wcm90ZWN0aW9uIHRoZSBkcml2ZXIgc3BlY2lmaWVkLiBBIGRhZW1vbiAoZGV2ZnNkKSBjYW4gYmUgdXNlZCB0bwotb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdHMuIERldmZzIGhhcyBiZWVuIGluIHRoZSBrZXJuZWwgc2luY2UgMi4zLjQ2LgotCi1OT1RFIHRoYXQgZGV2ZnMgaXMgZW50aXJlbHkgb3B0aW9uYWwuIElmIHlvdSBwcmVmZXIgdGhlIG9sZAotZGlzYy1iYXNlZCBkZXZpY2Ugbm9kZXMsIHRoZW4gc2ltcGx5IGxlYXZlIENPTkZJR19ERVZGU19GUz1uICh0aGUKLWRlZmF1bHQpLiBJbiB0aGlzIGNhc2UsIG5vdGhpbmcgd2lsbCBjaGFuZ2UuICBBTFNPIE5PVEUgdGhhdCBpZiB5b3UgZG8KLWVuYWJsZSBkZXZmcywgdGhlIGRlZmF1bHRzIGFyZSBzdWNoIHRoYXQgZnVsbCBjb21wYXRpYmlsaXR5IGlzCi1tYWludGFpbmVkIHdpdGggdGhlIG9sZCBkZXZpY2VzIG5hbWVzLgotCi1UaGVyZSBhcmUgdHdvIGFzcGVjdHMgdG8gZGV2ZnM6IG9uZSBpcyB0aGUgdW5kZXJseWluZyBkZXZpY2UKLW5hbWVzcGFjZSwgd2hpY2ggaXMgYSBuYW1lc3BhY2UganVzdCBsaWtlIGFueSBtb3VudGVkIGZpbGVzeXN0ZW0uIFRoZQotb3RoZXIgYXNwZWN0IGlzIHRoZSBmaWxlc3lzdGVtIGNvZGUgd2hpY2ggcHJvdmlkZXMgYSB2aWV3IG9mIHRoZQotZGV2aWNlIG5hbWVzcGFjZS4gVGhlIHJlYXNvbiBJIG1ha2UgYSBkaXN0aW5jdGlvbiBpcyBiZWNhdXNlIGRldmZzCi1jYW4gYmUgbW91bnRlZCBtYW55IHRpbWVzLCB3aXRoIGVhY2ggbW91bnQgc2hvd2luZyB0aGUgc2FtZSBkZXZpY2UKLW5hbWVzcGFjZS4gQ2hhbmdlcyBtYWRlIGFyZSBnbG9iYWwgdG8gYWxsIG1vdW50ZWQgZGV2ZnMgZmlsZXN5c3RlbXMuCi1BbHNvLCBiZWNhdXNlIHRoZSBkZXZmcyBuYW1lc3BhY2UgZXhpc3RzIHdpdGhvdXQgYW55IGRldmZzIG1vdW50cywgeW91Ci1jYW4gZWFzaWx5IG1vdW50IHRoZSByb290IGZpbGVzeXN0ZW0gYnkgcmVmZXJyaW5nIHRvIGFuIGVudHJ5IGluIHRoZQotZGV2ZnMgbmFtZXNwYWNlLgotCi0KLVRoZSBjb3N0IG9mIGRldmZzIGlzIGEgc21hbGwgaW5jcmVhc2UgaW4ga2VybmVsIGNvZGUgc2l6ZSBhbmQgbWVtb3J5Ci11c2FnZS4gQWJvdXQgNyBwYWdlcyBvZiBjb2RlIChzb21lIG9mIHRoYXQgaW4gX19pbml0IHNlY3Rpb25zKSBhbmQgNzIKLWJ5dGVzIGZvciBlYWNoIGVudHJ5IGluIHRoZSBuYW1lc3BhY2UuIEEgbW9kZXN0IHN5c3RlbSBoYXMgb25seSBhCi1jb3VwbGUgb2YgaHVuZHJlZCBkZXZpY2UgZW50cmllcywgc28gdGhpcyBjb3N0cyBhIGZldyBtb3JlCi1wYWdlcy4gQ29tcGFyZSB0aGlzIHdpdGggdGhlIHN1Z2dlc3Rpb24gdG8gcHV0IC9kZXYgb24gYSA8YQotaHJlZj0iI3doeS1mYXEtcmFtZGlzYyI+cmFtZGlzYy4KLQotT24gYSB0eXBpY2FsIG1hY2hpbmUsIHRoZSBjb3N0IGlzIHVuZGVyIDAuMiBwZXJjZW50LiBPbiBhIG1vZGVzdAotc3lzdGVtIHdpdGggNjQgTUJ5dGVzIG9mIFJBTSwgdGhlIGNvc3QgaXMgdW5kZXIgMC4xIHBlcmNlbnQuICBUaGUKLWFjY3VzYXRpb25zIG9mICJibG9hdHdhcmUiIGxldmVsbGVkIGF0IGRldmZzIGFyZSBub3QganVzdGlmaWVkLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLVdoeSBkbyBpdD8KLQotVGhlcmUgYXJlIHNldmVyYWwgcHJvYmxlbXMgdGhhdCBkZXZmcyBhZGRyZXNzZXMuIFNvbWUgb2YgdGhlc2UKLXByb2JsZW1zIGFyZSBtb3JlIHNlcmlvdXMgdGhhbiBvdGhlcnMgKGRlcGVuZGluZyBvbiB5b3VyIHBvaW50IG9mCi12aWV3KSwgYW5kIHNvbWUgY2FuIGJlIHNvbHZlZCB3aXRob3V0IGRldmZzLiBIb3dldmVyLCB0aGUgdG90YWxpdHkgb2YKLXRoZXNlIHByb2JsZW1zIHJlYWxseSBjYWxscyBvdXQgZm9yIGRldmZzLgotCi1UaGUgY2hvaWNlIGlzIGEgcGF0Y2h3b3JrIG9mIGluZWZmaWNpZW50IHVzZXIgc3BhY2Ugc29sdXRpb25zLCB3aGljaAotYXJlIGNvbXBsZXggYW5kIGxpa2VseSB0byBiZSBmcmFnaWxlLCBvciB0byB1c2UgYSBzaW1wbGUgYW5kIGVmZmljaWVudAotZGV2ZnMgd2hpY2ggaXMgcm9idXN0LgotCi1UaGVyZSBoYXZlIGJlZW4gbWFueSBjb3VudGVyLXByb3Bvc2FscyB0byBkZXZmcywgYWxsIHNlZWtpbmcgdG8KLXByb3ZpZGUgc29tZSBvZiB0aGUgYmVuZWZpdHMgd2l0aG91dCBhY3R1YWxseSBpbXBsZW1lbnRpbmcgZGV2ZnMuIFNvCi1mYXIgdGhlcmUgaGFzIGJlZW4gYW4gYWJzZW5jZSBvZiBjb2RlIGFuZCBubyBwcm9wb3NlZCBhbHRlcm5hdGl2ZSBoYXMKLWJlZW4gYWJsZSB0byBwcm92aWRlIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBkZXZmcyBkb2VzLiBGdXJ0aGVyLAotYWx0ZXJuYXRpdmUgcHJvcG9zYWxzIHJlcXVpcmUgZmFyIG1vcmUgY29tcGxleGl0eSBpbiB1c2VyLXNwYWNlIChhbmQKLXN0aWxsIGRlbGl2ZXIgbGVzcyBmdW5jdGlvbmFsaXR5IHRoYW4gZGV2ZnMpLiBTb21lIHBlb3BsZSBoYXZlIHRoZQotbWFudHJhIG9mIHJlZHVjaW5nICJrZXJuZWwgYmxvYXQiLCBidXQgZG9uJ3QgY29uc2lkZXIgdGhlIGVmZmVjdHMgb24KLXVzZXItc3BhY2UuCi0KLUEgZ29vZCBzb2x1dGlvbiBsaW1pdHMgdGhlIHRvdGFsIGNvbXBsZXhpdHkgb2Yga2VybmVsLXNwYWNlIGFuZAotdXNlci1zcGFjZS4KLQotCi1NYWpvciZtaW5vciBhbGxvY2F0aW9uCi0KLVRoZSBleGlzdGluZyBzY2hlbWUgcmVxdWlyZXMgdGhlIGFsbG9jYXRpb24gb2YgbWFqb3IgYW5kIG1pbm9yIGRldmljZQotbnVtYmVycyBmb3IgZWFjaCBhbmQgZXZlcnkgZGV2aWNlLiBUaGlzIG1lYW5zIHRoYXQgYSBjZW50cmFsCi1jby1vcmRpbmF0aW5nIGF1dGhvcml0eSBpcyByZXF1aXJlZCB0byBpc3N1ZSB0aGVzZSBkZXZpY2UgbnVtYmVycwotKHVubGVzcyB5b3UncmUgZGV2ZWxvcGluZyBhICJwcml2YXRlIiBkZXZpY2UgZHJpdmVyKSwgaW4gb3JkZXIgdG8KLXByZXNlcnZlIHVuaXF1ZW5lc3MuIERldmZzIHNoaWZ0cyB0aGUgYnVyZGVuIHRvIGEgbmFtZXNwYWNlLiBUaGlzIG1heQotbm90IHNlZW0gbGlrZSBhIGh1Z2UgYmVuZWZpdCwgYnV0IGFjdHVhbGx5IGl0IGlzLiBTaW5jZSBkcml2ZXIgYXV0aG9ycwotd2lsbCBuYXR1cmFsbHkgY2hvb3NlIGEgZGV2aWNlIG5hbWUgd2hpY2ggcmVmbGVjdHMgdGhlIGZ1bmN0aW9uYWxpdHkKLW9mIHRoZSBkZXZpY2UsIHRoZXJlIGlzIGZhciBsZXNzIHBvdGVudGlhbCBmb3IgbmFtZXNwYWNlIGNvbmZsaWN0LgotU29sdmluZyB0aGlzIHJlcXVpcmVzIGEga2VybmVsIGNoYW5nZS4KLQotL2RldiBtYW5hZ2VtZW50Ci0KLUJlY2F1c2UgeW91IGN1cnJlbnRseSBhY2Nlc3MgZGV2aWNlcyB0aHJvdWdoIGRldmljZSBub2RlcywgdGhlc2UgbXVzdAotYmUgY3JlYXRlZCBieSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuIEZvciBzdGFuZGFyZCBkZXZpY2VzIHlvdSBjYW4KLXVzdWFsbHkgZmluZCBhIE1BS0VERVYgcHJvZ3JhbW1lIHdoaWNoIGNyZWF0ZXMgYWxsIHRoZXNlIChodW5kcmVkcyEpCi1vZiBub2Rlcy4gVGhpcyBtZWFucyB0aGF0IGNoYW5nZXMgaW4gdGhlIGtlcm5lbCBtdXN0IGJlIHJlZmxlY3RlZCBieQotY2hhbmdlcyBpbiB0aGUgTUFLRURFViBwcm9ncmFtbWUsIG9yIGVsc2UgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yCi1jcmVhdGVzIGRldmljZSBub2RlcyBieSBoYW5kLgotCi1UaGUgYmFzaWMgcHJvYmxlbSBpcyB0aGF0IHRoZXJlIGFyZSB0d28gc2VwYXJhdGUgZGF0YWJhc2VzIG9mCi1tYWpvciBhbmQgbWlub3IgbnVtYmVycy4gT25lIGlzIGluIHRoZSBrZXJuZWwgYW5kIG9uZSBpcyBpbiAvZGV2IChvcgotaW4gYSBNQUtFREVWIHByb2dyYW1tZSwgaWYgeW91IHdhbnQgdG8gbG9vayBhdCBpdCB0aGF0IHdheSkuIFRoaXMgaXMKLWR1cGxpY2F0aW9uIG9mIGluZm9ybWF0aW9uLCB3aGljaCBpcyBub3QgZ29vZCBwcmFjdGljZS4KLVNvbHZpbmcgdGhpcyByZXF1aXJlcyBhIGtlcm5lbCBjaGFuZ2UuCi0KLS9kZXYgZ3Jvd3RoCi0KLUEgdHlwaWNhbCAvZGV2IGhhcyBvdmVyIDEyMDAgbm9kZXMhIE1vc3Qgb2YgdGhlc2UgZGV2aWNlcyBzaW1wbHkgZG9uJ3QKLWV4aXN0IGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBhdmFpbGFibGUuIEEgaHVnZSAvZGV2IGluY3JlYXNlcyB0aGUKLXRpbWUgdG8gYWNjZXNzIGRldmljZXMgKEknbSBqdXN0IHJlZmVycmluZyB0byB0aGUgZGVudHJ5IGxvb2t1cCB0aW1lcwotYW5kIHRoZSB0aW1lIHRha2VuIHRvIHJlYWQgaW5vZGVzIG9mZiBkaXNjOiB0aGUgbmV4dCBzdWJzZWN0aW9uIHNob3dzCi1zb21lIG1vcmUgaG9ycm9ycykuCi0KLUFuIGV4YW1wbGUgb2YgaG93IGJpZyAvZGV2IGNhbiBncm93IGlzIGlmIHdlIGNvbnNpZGVyIFNDU0kgZGV2aWNlczoKLQotaG9zdCAgICAgICAgICAgNiAgYml0cyAgKHNheSB1cCB0byA2NCBob3N0cyBvbiBhIHJlYWxseSBiaWcgbWFjaGluZSkKLWNoYW5uZWwgICAgICAgIDQgIGJpdHMgIChzYXkgdXAgdG8gMTYgU0NTSSBidXNlcyBwZXIgaG9zdCkKLWlkICAgICAgICAgICAgIDQgIGJpdHMKLWx1biAgICAgICAgICAgIDMgIGJpdHMKLXBhcnRpdGlvbiAgICAgIDYgIGJpdHMKLVRPVEFMICAgICAgICAgIDIzIGJpdHMKLQotCi1UaGlzIHJlcXVpcmVzIDggTWVnYSAoMTAyNCoxMDI0KSBpbm9kZXMgaWYgd2Ugd2FudCB0byBzdG9yZSBhbGwKLXBvc3NpYmxlIGRldmljZSBub2Rlcy4gRXZlbiBpZiB3ZSBzY3JhcCBldmVyeXRoaW5nIGJ1dCBpZCxwYXJ0aXRpb24KLWFuZCBhc3N1bWUgYSBzaW5nbGUgaG9zdCBhZGFwdGVyIHdpdGggYSBzaW5nbGUgU0NTSSBidXMgYW5kIG9ubHkgb25lCi1sb2dpY2FsIHVuaXQgcGVyIFNDU0kgdGFyZ2V0IChpZCksIHRoYXQncyBzdGlsbCAxMCBiaXRzIG9yIDEwMjQKLWlub2Rlcy4gRWFjaCBWRlMgaW5vZGUgdGFrZXMgYXJvdW5kIDI1NiBieXRlcyAoa2VybmVsIDIuMS43OCksIHNvCi10aGF0J3MgMjU2IGtCeXRlcyBvZiBpbm9kZSBzdG9yYWdlIG9uIGRpc2MgKGFzc3VtaW5nIHJlYWwgaW5vZGVzIHRha2UKLWEgc2ltaWxhciBhbW91bnQgb2Ygc3BhY2UgYXMgVkZTIGlub2RlcykuIFRoaXMgaXMgYWN0dWFsbHkgbm90IHNvIGJhZCwKLWJlY2F1c2UgZGlzYyBpcyBjaGVhcCB0aGVzZSBkYXlzLiBFbWJlZGRlZCBzeXN0ZW1zIHdvdWxkIGNhcmUgYWJvdXQKLTI1NiBrQnl0ZXMgb2YgL2RldiBpbm9kZXMsIGJ1dCB5b3UgY291bGQgYXJndWUgdGhhdCBlbWJlZGRlZCBzeXN0ZW1zCi13b3VsZCBoYXZlIGhhbmQtdHVuZWQgL2RldiBkaXJlY3Rvcmllcy4gSSd2ZSBoYWQgdG8gZG8ganVzdCB0aGF0IG9uIG15Ci1lbWJlZGRlZCBzeXN0ZW1zLCBidXQgSSB3b3VsZCByYXRoZXIganVzdCBsZWF2ZSBpdCB0byBkZXZmcy4KLQotQW5vdGhlciBpc3N1ZSBpcyB0aGUgdGltZSB0YWtlbiB0byBsb29rdXAgYW4gaW5vZGUgd2hlbiBmaXJzdAotcmVmZXJlbmNlZC4gTm90IG9ubHkgZG9lcyB0aGlzIHRha2UgdGltZSBpbiBzY2FubmluZyB0aHJvdWdoIGEgbGlzdCBpbgotbWVtb3J5LCBidXQgYWxzbyB0aGUgc2VlayB0aW1lcyB0byByZWFkIHRoZSBpbm9kZXMgb2ZmIGRpc2MuCi1UaGlzIGNvdWxkIGJlIHNvbHZlZCBpbiB1c2VyLXNwYWNlIHVzaW5nIGEgY2xldmVyIHByb2dyYW1tZSB3aGljaAotc2Nhbm5lZCB0aGUga2VybmVsIGxvZ3MgYW5kIGRlbGV0ZWQgL2RldiBlbnRyaWVzIHdoaWNoIGFyZSBub3QKLWF2YWlsYWJsZSBhbmQgY3JlYXRlZCB0aGVtIHdoZW4gdGhleSB3ZXJlIGF2YWlsYWJsZS4gVGhpcyBwcm9ncmFtbWUKLXdvdWxkIG5lZWQgdG8gYmUgcnVuIGV2ZXJ5IHRpbWUgYSBuZXcgbW9kdWxlIHdhcyBsb2FkZWQsIHdoaWNoIHdvdWxkCi1zbG93IHRoaW5ncyBkb3duIGEgbG90LgotCi1UaGVyZSBpcyBhbiBleGlzdGluZyBwcm9ncmFtbWUgY2FsbGVkIHNjc2lkZXYgd2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5Ci1jcmVhdGUgZGV2aWNlIG5vZGVzIGZvciBTQ1NJIGRldmljZXMuIEl0IGNhbiBkbyB0aGlzIGJ5IHNjYW5uaW5nIGZpbGVzCi1pbiAvcHJvYy9zY3NpLiBVbmZvcnR1bmF0ZWx5LCB0byBleHRlbmQgdGhpcyBpZGVhIHRvIG90aGVyIGRldmljZQotbm9kZXMgd291bGQgcmVxdWlyZSBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRyaXZlcnMgKHNvCi10aGV5IHRvbyB3b3VsZCBwcm92aWRlIGluZm9ybWF0aW9uIGluIC9wcm9jKS4gVGhpcyBpcyBhIG5vbi10cml2aWFsCi1jaGFuZ2UgKEkgc2hvdWxkIGtub3c6IGRldmZzIGhhcyBoYWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIpLiBPbmNlCi15b3UgZ28gdG8gdGhpcyBtdWNoIGVmZm9ydCwgeW91IG1heSBhcyB3ZWxsIHVzZSBkZXZmcyBpdHNlbGYgKHdoaWNoCi1hbHNvIHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRpb24pLiAgRnVydGhlcm1vcmUsIHN1Y2ggYSBzeXN0ZW0gd291bGQKLWxpa2VseSBiZSBpbXBsZW1lbnRlZCBpbiBhbiBhZC1ob2MgZmFzaGlvbiwgYXMgZGlmZmVyZW50IGRyaXZlcnMgd2lsbAotcHJvdmlkZSB0aGVpciBpbmZvcm1hdGlvbiBpbiBkaWZmZXJlbnQgd2F5cy4KLQotRGV2ZnMgaXMgbXVjaCBjbGVhbmVyLCBiZWNhdXNlIGl0IChuYXR1cmFsbHkpIGhhcyBhIHVuaWZvcm0gbWVjaGFuaXNtCi10byBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb246IHRoZSBkZXZpY2Ugbm9kZXMgdGhlbXNlbHZlcyEKLQotCi1Ob2RlIHRvIGRyaXZlciBmaWxlX29wZXJhdGlvbnMgdHJhbnNsYXRpb24KLQotVGhlcmUgaXMgYW4gaW1wb3J0YW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgd2F5IGRpc2MtYmFzZWQgY2hhcmFjdGVyCi1hbmQgYmxvY2sgbm9kZXMgYW5kIGRldmZzIGVudHJpZXMgbWFrZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGFuIGVudHJ5Ci1pbiAvZGV2IGFuZCB0aGUgYWN0dWFsIGRldmljZSBkcml2ZXIuCi0KLVdpdGggdGhlIGN1cnJlbnQgOCBiaXQgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbgotZGlzYy1iYXNlZCBjJmIgbm9kZXMgYW5kIHBlci1tYWpvciBkcml2ZXJzIGlzIGRvbmUgdGhyb3VnaCBhCi1maXhlZC1sZW5ndGggdGFibGUgb2YgMTI4IGVudHJpZXMuIFRoZSB2YXJpb3VzIGZpbGVzeXN0ZW0gdHlwZXMgc2V0Ci10aGUgaW5vZGUgb3BlcmF0aW9ucyBmb3IgYyZiIG5vZGVzIHRvIHtjaHIsYmxrfWRldl9pbm9kZV9vcGVyYXRpb25zLAotc28gd2hlbiBhIGRldmljZSBpcyBvcGVuZWQgYSBmZXcgcXVpY2sgbGV2ZWxzIG9mIGluZGlyZWN0aW9uIGJyaW5nIHVzCi10byB0aGUgZHJpdmVyIGZpbGVfb3BlcmF0aW9ucy4KLQotRm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgYSBzZWNvbmQgc3RlcCBpcyByZXF1aXJlZDogdGhlcmUKLWlzIGEgc2NhbiBmb3IgdGhlIGRyaXZlciBlbnRyeSB3aXRoIHRoZSBzYW1lIG1pbm9yIG51bWJlciBhcyB0aGUgZmlsZQotdGhhdCB3YXMgb3BlbmVkLCBhbmQgdGhlIGFwcHJvcHJpYXRlIG1pbm9yIG9wZW4gbWV0aG9kIGlzIGNhbGxlZC4gVGhpcwotc2Nhbm5pbmcgaXMgZG9uZSAqZXZlcnkgdGltZSogeW91IG9wZW4gYSBkZXZpY2Ugbm9kZS4gUG90ZW50aWFsbHksIHlvdQotbWF5IGJlIHNlYXJjaGluZyB0aHJvdWdoIGRvemVucyBvZiBtaXNjLiBlbnRyaWVzIGJlZm9yZSB5b3UgZmluZCB5b3VyCi1vcGVuIG1ldGhvZC4gV2hpbGUgbm90IGFuIGVub3Jtb3VzIHBlcmZvcm1hbmNlIG92ZXJoZWFkLCB0aGlzIGRvZXMKLXNlZW0gcG9pbnRsZXNzLgotCi1MaW51eCAqbXVzdCogbW92ZSBiZXlvbmQgdGhlIDggYml0IG1ham9yIGFuZCBtaW5vciBiYXJyaWVyLAotc29tZWhvdy4gSWYgd2Ugc2ltcGx5IGluY3JlYXNlIGVhY2ggdG8gMTYgYml0cywgdGhlbiB0aGUgaW5kZXhpbmcKLXNjaGVtZSB1c2VkIGZvciBtYWpvciBkcml2ZXIgbG9va3VwIGJlY29tZXMgdW50ZW5hYmxlLCBiZWNhdXNlIHRoZQotbWFqb3IgdGFibGVzIChvbmUgZWFjaCBmb3IgY2hhcmFjdGVyIGFuZCBibG9jayBkZXZpY2VzKSB3b3VsZCBuZWVkIHRvCi1iZSA2NCBrIGVudHJpZXMgbG9uZyAoNTEyIGtCeXRlcyBvbiB4ODYsIDEgTUJ5dGUgZm9yIDY0IGJpdAotc3lzdGVtcykuIFNvIHdlIHdvdWxkIGhhdmUgdG8gdXNlIGEgc2NoZW1lIGxpa2UgdGhhdCB1c2VkIGZvcgotbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXIgZGV2aWNlcywgd2hpY2ggbWVhbnMgdGhlIHNlYXJjaCB0aW1lIGdvZXMgdXAKLWxpbmVhcmx5IHdpdGggdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIG1ham9yIGRldmljZSBkcml2ZXJzIG9uIHlvdXIKLXN5c3RlbS4gTm90IGFsbCAiZGV2aWNlcyIgYXJlIGhhcmR3YXJlLCBzb21lIGFyZSBoaWdoZXItbGV2ZWwgZHJpdmVycwotbGlrZSBLR0ksIHNvIHlvdSBjYW4gZ2V0IG1vcmUgImRldmljZXMiIHdpdGhvdXQgYWRkaW5nIGhhcmR3YXJlCi1Zb3UgY2FuIGltcHJvdmUgdGhpcyBieSBjcmVhdGluZyBhbiBvcmRlcmVkIChiYWxhbmNlZDotKQotYmluYXJ5IHRyZWUsIGluIHdoaWNoIGNhc2UgeW91ciBzZWFyY2ggdGltZSBiZWNvbWVzIGxvZyhOKS4KLUFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGhhc2hpbmcgdG8gc3BlZWQgdXAgdGhlIHNlYXJjaC4KLUJ1dCB3aHkgZG8gdGhhdCBzZWFyY2ggYXQgYWxsIGlmIHlvdSBkb24ndCBoYXZlIHRvPyBPbmNlIGFnYWluLCBpdAotc2VlbXMgcG9pbnRsZXNzLgotCi1Ob3RlIHRoYXQgZGV2ZnMgZG9lc24ndCB1c2UgdGhlIG1ham9yJm1pbm9yIHN5c3RlbS4gRm9yIGRldmZzCi1lbnRyaWVzLCB0aGUgY29ubmVjdGlvbiBpcyBkb25lIHdoZW4geW91IGxvb2t1cCB0aGUgL2RldiBlbnRyeS4gV2hlbgotZGV2ZnNfcmVnaXN0ZXIoKSBpcyBjYWxsZWQsIGFuIGludGVybmFsIHRhYmxlIGlzIGFwcGVuZGVkIHdoaWNoIGhhcwotdGhlIGVudHJ5IG5hbWUgYW5kIHRoZSBmaWxlX29wZXJhdGlvbnMuIElmIHRoZSBkZW50cnkgY2FjaGUgZG9lc24ndAotaGF2ZSB0aGUgL2RldiBlbnRyeSBhbHJlYWR5LCB0aGlzIGludGVybmFsIHRhYmxlIGlzIHNjYW5uZWQgdG8gZ2V0IHRoZQotZmlsZV9vcGVyYXRpb25zLCBhbmQgYW4gaW5vZGUgaXMgY3JlYXRlZC4gSWYgdGhlIGRlbnRyeSBjYWNoZSBhbHJlYWR5Ci1oYXMgdGhlIGVudHJ5LCB0aGVyZSBpcyAqbm8gbG9va3VwIHRpbWUqIChvdGhlciB0aGFuIHRoZSBkZW50cnkgc2NhbgotaXRzZWxmLCBidXQgd2UgY2FuJ3QgYXZvaWQgdGhhdCBhbnl3YXksIGFuZCBiZXNpZGVzIExpbnV4IGRlbnRyaWVzCi1jcmVhbSBvdGhlciBPUydzIHdoaWNoIGRvbid0IGhhdmUgdGhlbTotKS4gRnVydGhlcm1vcmUsIHRoZSBudW1iZXIgb2YKLW5vZGUgZW50cmllcyBpbiBhIGRldmZzIGlzIG9ubHkgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZGV2aWNlCi1lbnRyaWVzLCBub3QgdGhlIG51bWJlciBvZiAqY29uY2VpdmFibGUqIGVudHJpZXMuIEV2ZW4gaWYgeW91IHJlbW92ZQotdW5uZWNlc3NhcnkgZW50cmllcyBpbiBhIGRpc2MtYmFzZWQgL2RldiwgdGhlIG51bWJlciBvZiBjb25jZWl2YWJsZQotZW50cmllcyByZW1haW5zIHRoZSBzYW1lOiB5b3UganVzdCBsaW1pdCB5b3Vyc2VsZiBpbiBvcmRlciB0byBzYXZlCi1zcGFjZS4KLQotRGV2ZnMgcHJvdmlkZXMgYSBmYXN0IGNvbm5lY3Rpb24gYmV0d2VlbiBhIFZGUyBub2RlIGFuZCB0aGUgZGV2aWNlCi1kcml2ZXIsIGluIGEgc2NhbGFibGUgd2F5LgotCi0vZGV2IGFzIGEgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHRvb2wKLQotUmlnaHQgbm93IC9kZXYgY29udGFpbnMgYSBsaXN0IG9mIGNvbmNlaXZhYmxlIGRldmljZXMsIG1vc3Qgb2Ygd2hpY2ggSQotZG9uJ3QgaGF2ZS4gRGV2ZnMgb25seSBzaG93cyB0aG9zZSBkZXZpY2VzIGF2YWlsYWJsZSBvbiBteQotc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgbGlzdGluZyAvZGV2IGlzIGEgaGFuZHkgd2F5IG9mIGNoZWNraW5nIHdoYXQKLWRldmljZXMgYXJlIGF2YWlsYWJsZS4KLQotTWFqb3ImbWlub3Igc2l6ZQotCi1FeGlzdGluZyBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBhcmUgbGltaXRlZCB0byA4IGJpdHMgZWFjaC4gVGhpcyBpcwotbm93IGEgbGltaXRpbmcgZmFjdG9yIGZvciBzb21lIGRyaXZlcnMsIHBhcnRpY3VsYXJseSB0aGUgU0NTSSBkaXNjCi1kcml2ZXIsIHdoaWNoIGNvbnN1bWVzIGEgc2luZ2xlIG1ham9yIG51bWJlci4gT25seSAxNiBkaXNjcyBhcmUKLXN1cHBvcnRlZCwgYW5kIGVhY2ggZGlzYyBtYXkgaGF2ZSBvbmx5IDE1IHBhcnRpdGlvbnMuIE1heWJlIHRoaXMgaXNuJ3QKLWEgcHJvYmxlbSBmb3IgeW91LCBidXQgc29tZSBvZiB1cyBhcmUgYnVpbGRpbmcgaHVnZSBMaW51eCBzeXN0ZW1zIHdpdGgKLWRpc2MgYXJyYXlzLiBXaXRoIGRldmZzIGFuIGFyYml0cmFyeSBwb2ludGVyIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGgKLWVhY2ggZGV2aWNlIGVudHJ5LCB3aGljaCBjYW4gYmUgdXNlZCB0byBnaXZlIGFuIGVmZmVjdGl2ZSAzMiBiaXQKLWRldmljZSBpZGVudGlmaWVyIChpLmUuIHRoYXQncyBsaWtlIGhhdmluZyBhIDMyIGJpdCBtaW5vcgotbnVtYmVyKS4gU2luY2UgdGhpcyBpcyBwcml2YXRlIHRvIHRoZSBrZXJuZWwsIHRoZXJlIGFyZSBubyBDIGxpYnJhcnkKLWNvbXBhdGliaWxpdHkgaXNzdWVzIHdoaWNoIHlvdSB3b3VsZCBoYXZlIHdpdGggaW5jcmVhc2luZyBtYWpvciBhbmQKLW1pbm9yIG51bWJlciBzaXplcy4gU2VlIHRoZSBzZWN0aW9uIG9uICJBbGxvY2F0aW9uIG9mIERldmljZSBOdW1iZXJzIgotZm9yIGRldGFpbHMgb24gbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZS4KLQotU29sdmluZyB0aGlzIHJlcXVpcmVzIGEga2VybmVsIGNoYW5nZS4KLQotU2luY2Ugd3JpdGluZyB0aGlzLCB0aGUga2VybmVsIGhhcyBiZWVuIG1vZGlmaWVkIHNvIHRoYXQgdGhlIFNDU0kgZGlzYwotZHJpdmVyIGhhcyBtb3JlIG1ham9yIG51bWJlcnMgYWxsb2NhdGVkIHRvIGl0IGFuZCBub3cgc3VwcG9ydHMgdXAgdG8KLTEyOCBkaXNjcy4gU2luY2UgdGhlc2UgbWFqb3IgbnVtYmVycyBhcmUgbm9uLWNvbnRpZ3VvdXMgKGEgcmVzdWx0IG9mCi11bnBsYW5uZWQgZXhwYW5zaW9uKSwgdGhlIGltcGxlbWVudGF0aW9uIGlzIGEgbGl0dGxlIG1vcmUgY3VtYmVyc29tZQotdGhhbiBvcmlnaW5hbGx5LgotCi1KdXN0IGxpa2UgdGhlIGNoYW5nZXMgdG8gSVB2NCB0byBmaXggaW1wZW5kaW5nIGxpbWl0YXRpb25zIGluIHRoZQotYWRkcmVzcyBzcGFjZSwgcGVvcGxlIGZpbmQgd2F5cyBhcm91bmQgdGhlIGxpbWl0YXRpb25zLiBJbiB0aGUgbG9uZwotcnVuLCBob3dldmVyLCBzb2x1dGlvbnMgbGlrZSBJUHY2IG9yIGRldmZzIGNhbid0IGJlIHB1dCBvZmYgZm9yZXZlci4KLQotUmVhZC1vbmx5IHJvb3QgZmlsZXN5c3RlbQotCi1IYXZpbmcgeW91ciBkZXZpY2Ugbm9kZXMgb24gdGhlIHJvb3QgZmlsZXN5c3RlbSBtZWFucyB0aGF0IHlvdSBjYW4ndAotb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgcmVhZC1vbmx5IHJvb3QgZmlsZXN5c3RlbS4gVGhpcyBpcyBiZWNhdXNlIHlvdQotd2FudCB0byBjaGFuZ2Ugb3duZXJzaGlwcyBhbmQgcHJvdGVjdGlvbnMgb2YgdHR5IGRldmljZXMuIEV4aXN0aW5nCi1wcmFjdGljZSBwcmV2ZW50cyB5b3UgdXNpbmcgYSBDRC1ST00gYXMgeW91ciByb290IGZpbGVzeXN0ZW0gZm9yIGEKLSpyZWFsKiBzeXN0ZW0uIFN1cmUsIHlvdSBjYW4gYm9vdCBvZmYgYSBDRC1ST00sIGJ1dCB5b3UgY2FuJ3QgY2hhbmdlCi10dHkgb3duZXJzaGlwcywgc28gaXQncyBvbmx5IGdvb2QgZm9yIGluc3RhbGxpbmcuCi0KLUFsc28sIHlvdSBjYW4ndCB1c2UgYSBzaGFyZWQgTkZTIHJvb3QgZmlsZXN5c3RlbSBmb3IgYSBjbHVzdGVyIG9mCi1kaXNjbGVzcyBMaW51eCBtYWNoaW5lcyAoaGF2aW5nIHR0eSBvd25lcnNoaXBzIGNoYW5nZWQgb24gYSBjb21tb24KLS9kZXYgaXMgbm90IGdvb2QpLiBOb3IgY2FuIHlvdSBlbWJlZCB5b3VyIHJvb3QgZmlsZXN5c3RlbSBpbiBhCi1ST00tRlMuCi0KLVlvdSBjYW4gZ2V0IGFyb3VuZCB0aGlzIGJ5IGNyZWF0aW5nIGEgUkFNRElTQyBhdCBib290IHRpbWUsIG1ha2luZwotYW4gZXh0MiBmaWxlc3lzdGVtIGluIGl0LCBtb3VudGluZyBpdCBzb21ld2hlcmUgYW5kIGNvcHlpbmcgdGhlCi1jb250ZW50cyBvZiAvZGV2IGludG8gaXQsIHRoZW4gdW5tb3VudGluZyBpdCBhbmQgbW91bnRpbmcgaXQgb3ZlcgotL2Rldi4KLQotQSBkZXZmcyBpcyBhIGNsZWFuZXIgd2F5IG9mIHNvbHZpbmcgdGhpcy4KLQotTm9uLVVuaXggcm9vdCBmaWxlc3lzdGVtCi0KLU5vbi1Vbml4IGZpbGVzeXN0ZW1zIChzdWNoIGFzIE5URlMpIGNhbid0IGJlIHVzZWQgZm9yIGEgcm9vdAotZmlsZXN5c3RlbSBiZWNhdXNlIHRoZXkgdmFyaW91c2x5IGRvbid0IHN1cHBvcnQgY2hhcmFjdGVyIGFuZCBibG9jawotc3BlY2lhbCBmaWxlcyBvciBzeW1ib2xpYyBsaW5rcy4gWW91IGNhbid0IGhhdmUgYSBzZXBhcmF0ZSBkaXNjLWJhc2VkCi1vciBSQU1ESVNDLWJhc2VkIGZpbGVzeXN0ZW0gbW91bnRlZCBvbiAvZGV2IGJlY2F1c2UgeW91IG5lZWQgZGV2aWNlCi1ub2RlcyBiZWZvcmUgeW91IGNhbiBtb3VudCB0aGVzZS4gRGV2ZnMgY2FuIGJlIG1vdW50ZWQgd2l0aG91dCBhbnkKLWRldmljZSBub2Rlcy4gRGV2bGlua3Mgd29uJ3Qgd29yayBiZWNhdXNlIHN5bWxpbmtzIGFyZW4ndCBzdXBwb3J0ZWQuCi1BbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiBpcyB0byB1c2UgaW5pdHJkIHRvIG1vdW50IGEgUkFNRElTQyBpbml0aWFsCi1yb290IGZpbGVzeXN0ZW0gKHdoaWNoIGlzIHBvcHVsYXRlZCB3aXRoIGEgbWluaW1hbCBzZXQgb2YgZGV2aWNlCi1ub2RlcyksIGFuZCB0aGVuIGNvbnN0cnVjdCBhIG5ldyAvZGV2IGluIGFub3RoZXIgUkFNRElTQywgYW5kIGZpbmFsbHkKLXN3aXRjaCB0byB5b3VyIG5vbi1Vbml4IHJvb3QgZmlsZXN5c3RlbS4gVGhpcyByZXF1aXJlcyBjbGV2ZXIgYm9vdAotc2NyaXB0cyBhbmQgYSBmcmFnaWxlIGFuZCBjb25jZXB0dWFsbHkgY29tcGxleCBib290IHByb2NlZHVyZS4KLQotRGV2ZnMgc29sdmVzIHRoaXMgaW4gYSByb2J1c3QgYW5kIGNvbmNlcHR1YWxseSBzaW1wbGUgd2F5LgotCi1QVFkgc2VjdXJpdHkKLQotQ3VycmVudCBwc2V1ZG8tdHR5IChwdHkpIGRldmljZXMgYXJlIG93bmVkIGJ5IHJvb3QgYW5kIHJlYWQtd3JpdGFibGUKLWJ5IGV2ZXJ5b25lLiBUaGUgdXNlciBvZiBhIHB0eS1wYWlyIGNhbm5vdCBjaGFuZ2UKLW93bmVyc2hpcC9wcm90ZWN0aW9ucyB3aXRob3V0IGJlaW5nIHN1aWQtcm9vdC4KLQotVGhpcyBjb3VsZCBiZSBzb2x2ZWQgd2l0aCBhIHNlY3VyZSB1c2VyLXNwYWNlIGRhZW1vbiB3aGljaCBydW5zIGFzCi1yb290IGFuZCBkb2VzIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgcHR5LXBhaXJzLiBTdWNoIGEgZGFlbW9uIHdvdWxkCi1yZXF1aXJlIG1vZGlmaWNhdGlvbiB0byAqZXZlcnkqIHByb2dyYW1tZSB0aGF0IHdhbnRzIHRvIHVzZSB0aGlzIG5ldwotbWVjaGFuaXNtLiBJdCBhbHNvIHNsb3dzIGRvd24gY3JlYXRpb24gb2YgcHR5LXBhaXJzLgotCi1BbiBhbHRlcm5hdGl2ZSBpcyB0byBjcmVhdGUgYSBuZXcgb3Blbl9wdHkoKSBzeXNjYWxsIHdoaWNoIGRvZXMgbXVjaAotdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHVzZXItc3BhY2UgZGFlbW9uLiBPbmNlIGFnYWluLCB0aGlzIHJlcXVpcmVzCi1tb2RpZmljYXRpb25zIHRvIHB0eS1oYW5kbGluZyBwcm9ncmFtbWVzLgotCi1UaGUgZGV2ZnMgc29sdXRpb24gYWxsb3dzIGEgZGV2aWNlIGRyaXZlciB0byAidGFnIiBjZXJ0YWluIGRldmljZQotZmlsZXMgc28gdGhhdCB3aGVuIGFuIHVub3BlbmVkIGRldmljZSBpcyBvcGVuZWQsIHRoZSBvd25lcnNoaXBzIGFyZQotY2hhbmdlZCB0byB0aGUgY3VycmVudCBldWlkIGFuZCBlZ2lkIG9mIHRoZSBvcGVuaW5nIHByb2Nlc3MsIGFuZCB0aGUKLXByb3RlY3Rpb25zIGFyZSBjaGFuZ2VkIHRvIHRoZSBkZWZhdWx0IHJlZ2lzdGVyZWQgYnkgdGhlIGRyaXZlci4gV2hlbgotdGhlIGRldmljZSBpcyBjbG9zZWQgb3duZXJzaGlwIGlzIHNldCBiYWNrIHRvIHJvb3QgYW5kIHByb3RlY3Rpb25zIGFyZQotc2V0IGJhY2sgdG8gcmVhZC13cml0ZSBmb3IgZXZlcnlib2R5LiBObyBwcm9ncmFtbWUgbmVlZCBiZSBjaGFuZ2VkLgotVGhlIGRldnB0cyBmaWxlc3lzdGVtIHByb3ZpZGVzIHRoaXMgYXV0by1vd25lcnNoaXAgZmVhdHVyZSBmb3IgVW5peDk4Ci1wdHlzLiBJdCBkb2Vzbid0IHN1cHBvcnQgb2xkLXN0eWxlIHB0eSBkZXZpY2VzLCBub3IgZG9lcyBpdCBoYXZlIGFsbAotdGhlIG90aGVyIGZlYXR1cmVzIG9mIGRldmZzLgotCi1JbnRlbGxpZ2VudCBkZXZpY2UgbWFuYWdlbWVudAotCi1EZXZmcyBpbXBsZW1lbnRzIGEgc2ltcGxlIHlldCBwb3dlcmZ1bCBwcm90b2NvbCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoCi1hIGRldmljZSBtYW5hZ2VtZW50IGRhZW1vbiAoZGV2ZnNkKSB3aGljaCBydW5zIGluIHVzZXIgc3BhY2UuIEl0IGlzCi1wb3NzaWJsZSB0byBzZW5kIGEgbWVzc2FnZSAoZWl0aGVyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpIHRvCi1kZXZmc2Qgb24gYW55IGV2ZW50LCBzdWNoIGFzIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBvZiBkZXZpY2UKLWVudHJpZXMsIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV2aWNlcywgbG9va2luZyB1cCBpbm9kZXMsIHNjYW5uaW5nCi1kaXJlY3RvcmllcyBhbmQgbW9yZS4gVGhpcyBoYXMgbWFueSBwb3NzaWJpbGl0aWVzLiBTb21lIG9mIHRoZXNlIGFyZQotYWxyZWFkeSBpbXBsZW1lbnRlZC4gU2VlOgotCi0KLWh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4LwotCi1EZXZpY2UgZW50cnkgcmVnaXN0cmF0aW9uIGV2ZW50cyBjYW4gYmUgdXNlZCBieSBkZXZmc2QgdG8gY2hhbmdlCi1wZXJtaXNzaW9ucyBvZiBuZXdseS1jcmVhdGVkIGRldmljZSBub2Rlcy4gVGhpcyBpcyBvbmUgbWVjaGFuaXNtIHRvCi1jb250cm9sIGRldmljZSBwZXJtaXNzaW9ucy4KLQotRGV2aWNlIGVudHJ5IHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBldmVudHMgY2FuIGJlIHVzZWQgdG8gcnVuCi1wcm9ncmFtbWVzIG9yIHNjcmlwdHMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhdXRvbWF0aWMgbW91bnRpbmcKLW9mIGZpbGVzeXN0ZW1zIHdoZW4gYSBuZXcgYmxvY2sgZGV2aWNlIG1lZGlhIGlzIGluc2VydGVkIGludG8gdGhlCi1kcml2ZS4KLQotQXN5bmNocm9ub3VzIGRldmljZSBvcGVuIGFuZCBjbG9zZSBldmVudHMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50Ci1jbGV2ZXIgcGVybWlzc2lvbnMgbWFuYWdlbWVudC4gRm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIG9uCi0vZGV2L2RzcCBkbyBub3QgYWxsb3cgZXZlcnlib2R5IHRvIHJlYWQgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIGlzCi1zZW5zaWJsZSwgYXMgeW91IGRvbid0IHdhbnQgc29tZSByZW1vdGUgdXNlciByZWNvcmRpbmcgd2hhdCB5b3Ugc2F5IGF0Ci15b3VyIGNvbnNvbGUuIEhvd2V2ZXIsIHRoZSBjb25zb2xlIHVzZXIgaXMgYWxzbyBwcmV2ZW50ZWQgZnJvbQotcmVjb3JkaW5nLiBUaGlzIGJlaGF2aW91ciBpcyBub3QgZGVzaXJhYmxlLiBXaXRoIGFzeW5jaHJvbm91cyBkZXZpY2UKLW9wZW4gYW5kIGNsb3NlIGV2ZW50cywgeW91IGNhbiBoYXZlIGRldmZzZCBydW4gYSBwcm9ncmFtbWUgb3Igc2NyaXB0Ci13aGVuIGNvbnNvbGUgZGV2aWNlcyBhcmUgb3BlbmVkIHRvIGNoYW5nZSB0aGUgb3duZXJzaGlwcyBmb3IgKm90aGVyKgotZGV2aWNlIG5vZGVzIChzdWNoIGFzIC9kZXYvZHNwKS4gT24gY2xvc3VyZSwgeW91IGNhbiBydW4gYSBkaWZmZXJlbnQKLXNjcmlwdCB0byByZXN0b3JlIHBlcm1pc3Npb25zLiBBbiBhZHZhbnRhZ2Ugb2YgdGhpcyBzY2hlbWUgb3ZlcgotbW9kaWZ5aW5nIHRoZSBDIGxpYnJhcnkgdHR5IGhhbmRsaW5nIGlzIHRoYXQgdGhpcyB3b3JrcyBldmVuIGlmIHlvdXIKLXByb2dyYW1tZSBjcmFzaGVzIChob3cgbWFueSB0aW1lcyBoYXZlIHlvdSBzZWVuIHRoZSB1dG1wIGRhdGFiYXNlIHdpdGgKLWxpbmdlcmluZyBlbnRyaWVzIGZvciBub24tZXhpc3RlbnQgbG9naW5zPykuCi0KLVN5bmNocm9ub3VzIGRldmljZSBvcGVuIGV2ZW50cyBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGludGVsbGlnZW50Ci1kZXZpY2UgYWNjZXNzIHByb3RlY3Rpb25zLiBCZWZvcmUgdGhlIGRldmljZSBkcml2ZXIgb3BlbigpIG1ldGhvZCBpcwotY2FsbGVkLCB0aGUgZGFlbW9uIG11c3QgZmlyc3QgdmFsaWRhdGUgdGhlIG9wZW4gYXR0ZW1wdCwgYnkgcnVubmluZyBhbgotZXh0ZXJuYWwgcHJvZ3JhbW1lIG9yIHNjcmlwdC4gVGhpcyBpcyBmYXIgbW9yZSBmbGV4aWJsZSB0aGFuIGFjY2VzcwotY29udHJvbCBsaXN0cywgYXMgYWNjZXNzIGNhbiBiZSBkZXRlcm1pbmVkIG9uIHRoZSBiYXNpcyBvZiBvdGhlcgotc3lzdGVtIGNvbmRpdGlvbnMgaW5zdGVhZCBvZiBqdXN0IHRoZSBVSUQgYW5kIEdJRC4KLQotSW5vZGUgbG9va3VwIGV2ZW50cyBjYW4gYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgbW9kdWxlIGF1dG9sb2FkCi1yZXF1ZXN0cy4gSW5zdGVhZCBvZiB1c2luZyBrbW9kIGRpcmVjdGx5LCB0aGUgZXZlbnQgaXMgc2VudCB0bwotZGV2ZnNkIHdoaWNoIGNhbiBpbXBsZW1lbnQgYW4gYXJiaXRyYXJ5IGF1dGhlbnRpY2F0aW9uIGJlZm9yZSBsb2FkaW5nCi10aGUgbW9kdWxlIGl0c2VsZi4KLQotSW5vZGUgbG9va3VwIGV2ZW50cyBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhcmJpdHJhcnkKLW5hbWVzcGFjZXMsIHdpdGhvdXQgaGF2aW5nIHRvIHJlc29ydCB0byBwb3B1bGF0aW5nIGRldmZzIHdpdGggc3ltbGlua3MKLXRvIGRldmljZXMgdGhhdCBkb24ndCBleGlzdC4KLQotU3BlY3VsYXRpdmUgRGV2aWNlIFNjYW5uaW5nCi0KLUNvbnNpZGVyIGFuIGFwcGxpY2F0aW9uIChsaWtlIGNkcGFyYW5vaWEpIHRoYXQgd2FudHMgdG8gZmluZCBhbGwKLUNELVJPTSBkZXZpY2VzIG9uIHRoZSBzeXN0ZW0gKFNDU0ksIElERSBhbmQgb3RoZXIgdHlwZXMpLCB3aGV0aGVyIG9yCi1ub3QgdGhlaXIgcmVzcGVjdGl2ZSBtb2R1bGVzIGFyZSBsb2FkZWQuIFRoZSBhcHBsaWNhdGlvbiBtdXN0Ci1zcGVjdWxhdGl2ZWx5IG9wZW4gY2VydGFpbiBkZXZpY2Ugbm9kZXMgKHN1Y2ggYXMgL2Rldi9zcjAgZm9yIHRoZSBTQ1NJCi1DRC1ST01zKSBpbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlIG1vZHVsZSBpcyBsb2FkZWQuIFRoaXMgcmVxdWlyZXMKLXRoYXQgYWxsIExpbnV4IGRpc3RyaWJ1dGlvbnMgZm9sbG93IHRoZSBzdGFuZGFyZCBkZXZpY2UgbmFtaW5nIHNjaGVtZQotKGxhc3QgdGltZSBJIGxvb2tlZCBSZWRIYXQgZGlkIHRoaW5ncyBkaWZmZXJlbnRseSkuIERldmZzIHNvbHZlcyB0aGUKLW5hbWluZyBwcm9ibGVtLgotCi1UaGUgc2FtZSBhcHBsaWNhdGlvbiBhbHNvIHdhbnRzIHRvIHNlZSB3aGljaCBkZXZpY2VzIGFyZSBhY3R1YWxseQotYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uIFdpdGggdGhlIGV4aXN0aW5nIHN5c3RlbSBpdCBuZWVkcyB0byByZWFkIHRoZQotL2RldiBkaXJlY3RvcnkgYW5kIHNwZWN1bGF0aXZlbHkgb3BlbiBlYWNoIC9kZXYvc3IqIGRldmljZSB0bwotZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgZXhpc3RzIG9yIG5vdC4gV2l0aCBhIGxhcmdlIC9kZXYgdGhpcyBpcyBhbgotaW5lZmZpY2llbnQgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGlmIHRoZXJlIGFyZSBtYW55IC9kZXYvc3IqIG5vZGVzLiBBCi1zb2x1dGlvbiBsaWtlIHNjc2lkZXYgY291bGQgcmVkdWNlIHRoZSBudW1iZXIgb2YgL2Rldi9zciogZW50cmllcyAoYnV0Ci1vZiBjb3Vyc2UgdGhhdCBhbHNvIHJlcXVpcmVzIGFsbCB0aGF0IGluZWZmaWNpZW50IGRpcmVjdG9yeSBzY2FubmluZykuCi0KLVdpdGggZGV2ZnMsIHRoZSBhcHBsaWNhdGlvbiBjYW4gb3BlbiB0aGUgL2Rldi9zciBkaXJlY3RvcnkKLSh3aGljaCB0cmlnZ2VycyB0aGUgbW9kdWxlIGF1dG9sb2FkaW5nIGlmIHJlcXVpcmVkKSwgYW5kIHByb2NlZWQgdG8KLXJlYWQgL2Rldi9zci4gU2luY2Ugb25seSB0aGUgYXZhaWxhYmxlIGRldmljZXMgd2lsbCBoYXZlCi1lbnRyaWVzLCB0aGVyZSBhcmUgbm8gaW5lZmZpY2VuY2llcyBpbiBkaXJlY3Rvcnkgc2Nhbm5pbmcgb3IgZGV2aWNlCi1vcGVuaW5ncy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hvIGVsc2UgZG9lcyBpdD8KLQotRnJlZUJTRCBoYXMgYSBkZXZmcyBpbXBsZW1lbnRhdGlvbi4gU29sYXJpcyBhbmQgQUlYIGVhY2ggaGF2ZSBhCi1wc2V1ZG8tZGV2ZnMgKHNvbWV0aGluZyBha2luIHRvIHNjc2lkZXYgYnV0IGZvciBhbGwgZGV2aWNlcywgd2l0aCBzb21lCi11bnNwZWNpZmllZCBrZXJuZWwgc3VwcG9ydCkuIEJlT1MsIFBsYW45IGFuZCBRTlggYWxzbyBoYXZlIGl0LiBTR0kncwotSVJJWCA2LjQgYW5kIGFib3ZlIGFsc28gaGF2ZSBhIGRldmljZSBmaWxlc3lzdGVtLgotCi1XaGlsZSB3ZSBzaG91bGRuJ3QganVzdCBhdXRvbWF0aWNhbGx5IGRvIHNvbWV0aGluZyBiZWNhdXNlIG90aGVycyBkbwotaXQsIHdlIHNob3VsZCBub3QgaWdub3JlIHRoZSB3b3JrIG9mIG90aGVycyBlaXRoZXIuIEZyZWVCU0QgaGFzIGEgbG90Ci1vZiBjb21wZXRlbnQgcGVvcGxlIHdvcmtpbmcgb24gaXQsIHNvIHRoZWlyIG9waW5pb24gc2hvdWxkIG5vdCBiZQotYmxpdGhlbHkgaWdub3JlZC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1Ib3cgaXQgd29ya3MKLQotUmVnaXN0ZXJpbmcgZGV2aWNlIGVudHJpZXMKLQotRm9yIGV2ZXJ5IGVudHJ5IChkZXZpY2Ugbm9kZSkgaW4gYSBkZXZmcy1iYXNlZCAvZGV2IGEgZHJpdmVyIG11c3QgY2FsbAotZGV2ZnNfcmVnaXN0ZXIoKS4gVGhpcyBhZGRzIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UgZW50cnksIHRoZQotZmlsZV9vcGVyYXRpb25zIHN0cnVjdHVyZSBwb2ludGVyIGFuZCBhIGZldyBvdGhlciB0aGluZ3MgdG8gYW4KLWludGVybmFsIHRhYmxlLiBEZXZpY2UgZW50cmllcyBtYXkgYmUgYWRkZWQgYW5kIHJlbW92ZWQgYXQgYW55Ci10aW1lLiBXaGVuIGEgZGV2aWNlIGVudHJ5IGlzIHJlZ2lzdGVyZWQsIGl0IGF1dG9tYWdpY2FsbHkgYXBwZWFycyBpbgotYW55IG1vdW50ZWQgZGV2ZnMnLgotCi1Jbm9kZSBsb29rdXAKLQotV2hlbiBhIGxvb2t1cCBvcGVyYXRpb24gb24gYW4gZW50cnkgaXMgcGVyZm9ybWVkIGFuZCBpZiB0aGVyZSBpcyBubwotZHJpdmVyIGluZm9ybWF0aW9uIGZvciB0aGF0IGVudHJ5IGRldmZzIHdpbGwgYXR0ZW1wdCB0byBjYWxsCi1kZXZmc2QuIElmIHN0aWxsIG5vIGRyaXZlciBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgdGhlbiBhIG5lZ2F0aXZlCi1kZW50cnkgaXMgeWllbGRlZCBhbmQgdGhlIG5leHQgc3RhZ2Ugb3BlcmF0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZQotVkZTIChzdWNoIGFzIGNyZWF0ZSgpIG9yIG1rbm9kKCkgaW5vZGUgbWV0aG9kcykuIElmIGRyaXZlciBpbmZvcm1hdGlvbgotY2FuIGJlIGZvdW5kLCBhbiBpbm9kZSBpcyBjcmVhdGVkIChpZiBvbmUgZG9lcyBub3QgZXhpc3QgYWxyZWFkeSkgYW5kCi1hbGwgaXMgd2VsbC4KLQotTWFudWFsbHkgY3JlYXRpbmcgZGV2aWNlIG5vZGVzCi0KLVRoZSBta25vZCgpIG1ldGhvZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbiBvcmRpbmFyeSBuYW1lZCBwaXBlIGluIHRoZQotZGV2ZnMsIG9yIHlvdSBjYW4gY3JlYXRlIGEgY2hhcmFjdGVyIG9yIGJsb2NrIHNwZWNpYWwgaW5vZGUgaWYgb25lCi1kb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiBZb3UgbWF5IHdpc2ggdG8gY3JlYXRlIGEgY2hhcmFjdGVyIG9yIGJsb2NrCi1zcGVjaWFsIGlub2RlIHNvIHRoYXQgeW91IGNhbiBzZXQgcGVybWlzc2lvbnMgYW5kIG93bmVyc2hpcC4gTGF0ZXIsIGlmCi1hIGRldmljZSBkcml2ZXIgcmVnaXN0ZXJzIGFuIGVudHJ5IHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlCi1wZXJtaXNzaW9ucywgb3duZXJzaGlwIGFuZCB0aW1lcyBhcmUgcmV0YWluZWQuIFRoaXMgaXMgaG93IHlvdSBjYW4gc2V0Ci10aGUgcHJvdGVjdGlvbnMgb24gYSBkZXZpY2UgZXZlbiBiZWZvcmUgdGhlIGRyaXZlciBpcyBsb2FkZWQuIE9uY2UgeW91Ci1jcmVhdGUgYW4gaW5vZGUgaXQgYXBwZWFycyBpbiB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuCi0KLVVucmVnaXN0ZXJpbmcgZGV2aWNlIGVudHJpZXMKLQotQSBkZXZpY2UgZHJpdmVyIGNhbGxzIGRldmZzX3VucmVnaXN0ZXIoKSB0byB1bnJlZ2lzdGVyIGFuIGVudHJ5LgotCi1DaHJvb3QoKSBnYW9scwotCi0yLjIueCBrZXJuZWxzCi0KLVRoZSBzZW1hbnRpY3Mgb2YgaW5vZGUgY3JlYXRpb24gYXJlIGRpZmZlcmVudCB3aGVuIGRldmZzIGlzIG1vdW50ZWQKLXdpdGggdGhlICJleHBsaWNpdCIgb3B0aW9uLiBOb3csIHdoZW4gYSBkZXZpY2UgZW50cnkgaXMgcmVnaXN0ZXJlZCwgaXQKLXdpbGwgbm90IGFwcGVhciB1bnRpbCB5b3UgdXNlIG1rbm9kKCkgdG8gY3JlYXRlIHRoZSBkZXZpY2UuIEl0IGRvZXNuJ3QKLW1hdHRlciBpZiB5b3UgbWtub2QoKSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGgKLWRldmZzX3JlZ2lzdGVyKCkuIFRoZSBwdXJwb3NlIG9mIHRoaXMgYmVoYXZpb3VyIGlzIHRvIHN1cHBvcnQKLWNocm9vdCgyKSBnYW9scywgd2hlcmUgeW91IHdhbnQgdG8gbW91bnQgYSBtaW5pbWFsIGRldmZzIGluc2lkZSB0aGUKLWdhb2wuIE9ubHkgdGhlIGRldmljZXMgeW91IHNwZWNpZmljYWxseSB3YW50IHRvIGJlIGF2YWlsYWJsZSAodGhyb3VnaAoteW91ciBta25vZCgpIHNldHVwKSB3aWxsIGJlIGFjY2Vzc2libGUuCi0KLTIuNC54IGtlcm5lbHMKLQotQXMgb2Yga2VybmVsIDIuMy45OSwgdGhlIFZGUyBoYXMgaGFkIHRoZSBhYmlsaXR5IHRvIHJlYmluZCBwYXJ0cyBvZgotdGhlIGdsb2JhbCBmaWxlc3lzdGVtIG5hbWVzcGFjZSBpbnRvIGFub3RoZXIgcGFydCBvZiB0aGUgbmFtZXNwYWNlLgotVGhpcyBub3cgd29ya3MgZXZlbiBhdCB0aGUgbGVhZi1ub2RlIGxldmVsLCB3aGljaCBtZWFucyB0aGF0Ci1pbmRpdmlkdWFsIGZpbGVzIGFuZCBkZXZpY2Ugbm9kZXMgbWF5IGJlIGJvdW5kIGludG8gb3RoZXIgcGFydHMgb2YgdGhlCi1uYW1lc3BhY2UuIFRoaXMgaXMgbGlrZSBtYWtpbmcgbGlua3MsIGJ1dCBiZXR0ZXIsIGJlY2F1c2UgaXQgd29ya3MKLWFjcm9zcyBmaWxlc3lzdGVtcyAodW5saWtlIGhhcmQgbGlua3MpIGFuZCB3b3JrcyB0aHJvdWdoIGNocm9vdCgpCi1nYW9scyAodW5saWtlIHN5bWJvbGljIGxpbmtzKS4KLQotQmVjYXVzZSBvZiB0aGVzZSBpbXByb3ZlbWVudHMgdG8gdGhlIFZGUywgdGhlIG11bHRpLW1vdW50IGNhcGFiaWxpdHkKLWluIGRldmZzIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSBhZG1pbmlzdHJhdG9yIG1heSBjcmVhdGUgYSBtaW5pbWFsCi1kZXZpY2UgdHJlZSBpbnNpZGUgYSBjaHJvb3QoMikgZ2FvbCBieSB1c2luZyBWRlMgYmluZGluZ3MuIEFzIHRoaXMKLXByb3ZpZGVzIG1vc3Qgb2YgdGhlIGZlYXR1cmVzIG9mIHRoZSBkZXZmcyBtdWx0aS1tb3VudCBjYXBhYmlsaXR5LCBJCi1yZW1vdmVkIHRoZSBtdWx0aS1tb3VudCBzdXBwb3J0IGNvZGUgKGFmdGVyIGlzc3VpbmcgYW4gUkZDKS4gVGhpcwoteWllbGRlZCBjb2RlIHNpemUgcmVkdWN0aW9ucyBhbmQgc2ltcGxpZmljYXRpb25zLgotCi1JZiB5b3Ugd2FudCB0byBjb25zdHJ1Y3QgYSBtaW5pbWFsIGNocm9vdCgpIGdhb2wsIHRoZSBmb2xsb3dpbmcKLWNvbW1hbmQgc2hvdWxkIHN1ZmZpY2U6Ci0KLW1vdW50IC0tYmluZCAvZGV2L251bGwgL2dhb2wvZGV2L251bGwKLQotCi1SZXBlYXQgZm9yIG90aGVyIGRldmljZSBub2RlcyB5b3Ugd2FudCB0byBleHBvc2UuIFNpbXBsZSEKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1PcGVyYXRpb25hbCBpc3N1ZXMKLQotCi1JbnN0cnVjdGlvbnMgZm9yIHRoZSBpbXBhdGllbnQKLQotTm9ib2R5IGxpa2VzIHJlYWRpbmcgZG9jdW1lbnRhdGlvbi4gUGVvcGxlIGp1c3Qgd2FudCB0byBnZXQgaW4gdGhlcmUKLWFuZCBwbGF5LiBTbyB0aGlzIHNlY3Rpb24gdGVsbHMgeW91IHF1aWNrbHkgdGhlIHN0ZXBzIHlvdSBuZWVkIHRvIHRha2UKLXRvIHJ1biB3aXRoIGRldmZzIG1vdW50ZWQgb3ZlciAvZGV2LiBTa2lwIHRoZXNlIHN0ZXBzIGFuZCB5b3Ugd2lsbCBlbmQKLXVwIHdpdGggYSBuZWFybHkgdW5ib290YWJsZSBzeXN0ZW0uIFN1YnNlcXVlbnQgc2VjdGlvbnMgZGVzY3JpYmUgdGhlCi1pc3N1ZXMgaW4gbW9yZSBkZXRhaWwsIGFuZCBkaXNjdXNzIG5vbi1lc3NlbnRpYWwgY29uZmlndXJhdGlvbgotb3B0aW9ucy4KLQotRGV2ZnNkCi1PSywgaWYgeW91J3JlIHJlYWRpbmcgdGhpcywgSSBhc3N1bWUgeW91IHdhbnQgdG8gcGxheSB3aXRoCi1kZXZmcy4gRmlyc3QgeW91IHNob3VsZCBlbnN1cmUgdGhhdCAvdXNyL3NyYy9saW51eCBjb250YWlucyBhCi1yZWNlbnQga2VybmVsIHNvdXJjZSB0cmVlLiBUaGVuIHlvdSBuZWVkIHRvIGNvbXBpbGUgZGV2ZnNkLCB0aGUgZGV2aWNlCi1tYW5hZ2VtZW50IGRhZW1vbiwgYXZhaWxhYmxlIGF0Ci0KLWh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4Ly4KLUJlY2F1c2UgdGhlIGtlcm5lbCBoYXMgYSBuYW1pbmcgc2NoZW1lCi13aGljaCBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG5hbWluZyBzY2hlbWUsIHlvdSBuZWVkIHRvCi1pbnN0YWxsIGRldmZzZCBzbyB0aGF0IHNvZnR3YXJlIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgdXNlIHRoZQotb2xkIG5hbWluZyBzY2hlbWUgd2lsbCBub3QgYnJlYWsuCi0KLUNvbXBpbGUgYW5kIGluc3RhbGwgZGV2ZnNkLiBZb3Ugd2lsbCBiZSBwcm92aWRlZCB3aXRoIGEgZGVmYXVsdAotY29uZmlndXJhdGlvbiBmaWxlIC9ldGMvZGV2ZnNkLmNvbmYgd2hpY2ggd2lsbCBwcm92aWRlCi1jb21wYXRpYmlsaXR5IHN5bWxpbmtzIGZvciB0aGUgb2xkIG5hbWluZyBzY2hlbWUuIERvbid0IGNoYW5nZSB0aGlzCi1jb25maWcgZmlsZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuIEV2ZW4gaWYgeW91IHRoaW5rIHlvdQotZG8ga25vdyB3aGF0IHlvdSdyZSBkb2luZywgZG9uJ3QgY2hhbmdlIGl0IHVudGlsIHlvdSd2ZSBmb2xsb3dlZCBhbGwKLXRoZSBzdGVwcyBiZWxvdyBhbmQgYm9vdGVkIGEgZGV2ZnMtZW5hYmxlZCBzeXN0ZW0gYW5kIHZlcmlmaWVkIHRoYXQgaXQKLXdvcmtzLgotCi1Ob3cgZWRpdCB5b3VyIG1haW4gc3lzdGVtIGJvb3Qgc2NyaXB0IHNvIHRoYXQgZGV2ZnNkIGlzIHN0YXJ0ZWQgYXQgdGhlCi12ZXJ5IGJlZ2lubmluZyAoYmVmb3JlIGFueSBmaWxlc3lzdGVtCi1jaGVja3MpLiAvZXRjL3JjLmQvcmMuc3lzaW5pdCBpcyBvZnRlbiB0aGUgbWFpbiBib290IHNjcmlwdAotb24gc3lzdGVtcyB3aXRoIFN5c1Ytc3R5bGUgYm9vdCBzY3JpcHRzLiBPbiBzeXN0ZW1zIHdpdGggQlNELXN0eWxlCi1ib290IHNjcmlwdHMgaXQgaXMgb2Z0ZW4gL2V0Yy9yYy4gQWxzbyBjaGVjawotL3NiaW4vcmMuCi0KLU5PVEUgdGhhdCB0aGUgbGluZSB5b3UgcHV0IGludG8gdGhlIGJvb3QKLXNjcmlwdCBzaG91bGQgYmUgZXhhY3RseToKLQotL3NiaW4vZGV2ZnNkIC9kZXYKLQotRE8gTk9UIHVzZSBzb21lIHNwZWNpYWwgZGFlbW9uLWxhdW5jaGluZwotcHJvZ3JhbW1lLCBvdGhlcndpc2UgdGhlIGJvb3Qgc2NyaXB0IG1heSBub3Qgd2FpdCBmb3IgZGV2ZnNkIHRvIGZpbmlzaAotaW5pdGlhbGlzaW5nLgotCi1TeXN0ZW0gTGlicmFyaWVzCi1UaGVyZSBtYXkgc3RpbGwgYmUgc29tZSBwcm9ibGVtcyBiZWNhdXNlIG9mIGJyb2tlbiBzb2Z0d2FyZSBtYWtpbmcKLWFzc3VtcHRpb25zIGFib3V0IGRldmljZSBuYW1lcy4gSW4gcGFydGljdWxhciwgc29tZSBzb2Z0d2FyZSBkb2VzIG5vdAotaGFuZGxlIGRldmljZXMgd2hpY2ggYXJlIHN5bWJvbGljIGxpbmtzLiBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBsaWJjIDUKLWJhc2VkIHN5c3RlbSwgaW5zdGFsbCBsaWJjIDUuNC40NCAoaWYgeW91IGhhdmUgbGliYyA1LjQuNDYsIGdvIGJhY2sgdG8KLWxpYmMgNS40LjQ0LCB3aGljaCBpcyBhY3R1YWxseSBjb3JyZWN0KS4gSWYgeW91IGFyZSBydW5uaW5nIGEgZ2xpYmMKLWJhc2VkIHN5c3RlbSwgbWFrZSBzdXJlIHlvdSBoYXZlIGdsaWJjIDIuMS4zIG9yIGxhdGVyLgotCi0vZXRjL3NlY3VyZXR0eQotUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcykgaXMgc3VwcG9zZWQgdG8gYmUgYSBmbGV4aWJsZQotbWVjaGFuaXNtIGZvciBwcm92aWRpbmcgYmV0dGVyIHVzZXIgYXV0aGVudGljYXRpb24gYW5kIGFjY2VzcyB0bwotc2VydmljZXMuIFVuZm9ydHVuYXRlbHksIGl0J3MgYWxzbyBmcmFnaWxlLCBjb21wbGV4IGFuZCB1bmRvY3VtZW50ZWQKLShjaGVjayBvdXQgUmVkSGF0IDYuMSwgYW5kIHByb2JhYmx5IG90aGVyIGRpc3RyaWJ1dGlvbnMgYXMgd2VsbCkuIFBBTQotaGFzIHByb2JsZW1zIHdpdGggc3ltYm9saWMgbGlua3MuIEFwcGVuZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIKLS9ldGMvc2VjdXJldHR5IGZpbGU6Ci0KLXZjLzEKLXZjLzIKLXZjLzMKLXZjLzQKLXZjLzUKLXZjLzYKLXZjLzcKLXZjLzgKLQotVGhpcyB3aWxsIG5vdCB3ZWFrZW4gc2VjdXJpdHkuIElmIHlvdSBoYXZlIGEgdmVyc2lvbiBvZiB1dGlsLWxpbnV4Ci1lYXJsaWVyIHRoYW4gMi4xMC5oLCBwbGVhc2UgdXBncmFkZSB0byAyLjEwLmggb3IgbGF0ZXIuIElmIHlvdQotYWJzb2x1dGVseSBjYW5ub3QgdXBncmFkZSwgdGhlbiBhbHNvIGFwcGVuZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvCi15b3VyIC9ldGMvc2VjdXJldHR5IGZpbGU6Ci0KLTEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLQotVGhpcyBtYXkgcG90ZW50aWFsbHkgd2Vha2VuIHNlY3VyaXR5IGJ5IGFsbG93aW5nIHJvb3QgbG9naW5zIG92ZXIgdGhlCi1uZXR3b3JrIChhIHBhc3N3b3JkIGlzIHN0aWxsIHJlcXVpcmVkLCB0aG91Z2gpLiBIb3dldmVyLCBzaW5jZSB0aGVyZQotYXJlIHByb2JsZW1zIHdpdGggZGVhbGluZyB3aXRoIHN5bWxpbmtzLCBJJ20gc3VzcGljaW91cyBvZiB0aGUgbGV2ZWwKLW9mIHNlY3VyaXR5IG9mZmVyZWQgaW4gYW55IGNhc2UuCi0KLVhGcmVlODYKLVdoaWxlIG5vdCBlc3NlbnRpYWwsIGl0J3MgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gdXBncmFkZSB0byBYRnJlZTg2Ci00LjAsIGFzIHBhdGNoZXMgd2VudCBpbiB0byBtYWtlIGl0IG1vcmUgZGV2ZnMtZnJpZW5kbHkuIElmIHlvdSBkb24ndCwKLXlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIGFwcGx5IHRoZSBmb2xsb3dpbmcgcGF0Y2ggdG8KLS9ldGMvc2VjdXJpdHkvY29uc29sZS5wZXJtcyBzbyB0aGF0IG9yZGluYXJ5IHVzZXJzIGNhbiBydW4KLXN0YXJ0eC4gTm90ZSB0aGF0IG5vdCBhbGwgZGlzdHJpYnV0aW9ucyBoYXZlIHRoaXMgZmlsZSAoZS5nLiBEZWJpYW4pLAotc28gaWYgaXQncyBub3QgcHJlc2VudCwgZG9uJ3Qgd29ycnkgYWJvdXQgaXQuCi0KLS0tLSAvZXRjL3NlY3VyaXR5L2NvbnNvbGUucGVybXMub3JpZyAgICBTYXQgQXByIDE3IDE2OjI2OjQ3IDE5OTkgCi0rKysgL2V0Yy9zZWN1cml0eS9jb25zb2xlLnBlcm1zIEZyaSBGZWIgMjUgMjM6NTM6NTUgMjAwMCAKLUBAIC0xNCw3ICsxNCw3IEBAIAotICMgbWFuIDUgY29uc29sZS5wZXJtcyAKLQotICMgZmlsZSBjbGFzc2VzIC0tIHRoZXNlIGFyZSByZWd1bGFyIGV4cHJlc3Npb25zIAotLTxjb25zb2xlPj10dHlbMC05XVswLTldKiA6WzAtOV1cLlswLTldIDpbMC05XSAKLSs8Y29uc29sZT49dHR5WzAtOV1bMC05XSogdmMvWzAtOV1bMC05XSogOlswLTldXC5bMC05XSA6WzAtOV0gCi0KLSAjIGRldmljZSBjbGFzc2VzIC0tIHRoZXNlIGFyZSBzaGVsbC1zdHlsZSBnbG9icyAKLSA8ZmxvcHB5Pj0vZGV2L2ZkWzAtMV0qIAotCi1JZiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHksIHRoZW4gY2hhbmdlIHRoZSBsaW5lOgotCi08Y29uc29sZT49dHR5WzAtOV1bMC05XSogOlswLTldXC5bMC05XSA6WzAtOV0KLQotd2l0aDoKLQotPGNvbnNvbGU+PXR0eVswLTldWzAtOV0qIHZjL1swLTldWzAtOV0qIDpbMC05XVwuWzAtOV0gOlswLTldCi0KLQotRGlzYWJsZSBkZXZwdHMKLUkndmUgaGFkIGEgcmVwb3J0IG9mIGRldnB0cyBtb3VudGVkIG9uIC9kZXYvcHRzIG5vdCB3b3JraW5nCi1jb3JyZWN0bHkuIFNpbmNlIGRldmZzIHdpbGwgYWxzbyBtYW5hZ2UgL2Rldi9wdHMsIHRoZXJlIGlzIG5vCi1uZWVkIHRvIG1vdW50IGRldnB0cyBhcyB3ZWxsLiBZb3Ugc2hvdWxkIGVpdGhlciBlZGl0IHlvdXIKLS9ldGMvZnN0YWIgc28gZGV2cHRzIGlzIG5vdCBtb3VudGVkLCBvciBkaXNhYmxlIGRldnB0cyBmcm9tCi15b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLgotCi1VbnN1cHBvcnRlZCBkcml2ZXJzCi1Ob3QgYWxsIGRyaXZlcnMgaGF2ZSBkZXZmcyBzdXBwb3J0LiBJZiB5b3UgZGVwZW5kIG9uIG9uZSBvZiB0aGVzZQotZHJpdmVycywgeW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBzY3JpcHQgb3IgdGFyZmlsZSB0aGF0IHlvdSBjYW4gdXNlCi1hdCBib290IHRpbWUgdG8gY3JlYXRlIGRldmljZSBub2RlcyBhcyBhcHByb3ByaWF0ZS4gVGhlcmUgaXMgYQotc2VjdGlvbiB3aGljaCBkZXNjcmliZXMgdGhpcy4gQW5vdGhlcgotc2VjdGlvbiBsaXN0cyB0aGUgZHJpdmVycyB3aGljaCBoYXZlCi1kZXZmcyBzdXBwb3J0LgotCi0vZGV2L21vdXNlCi0KLU1hbnkgZGlzcmlidXRpb25zIGNvbmZpZ3VyZSAvZGV2L21vdXNlIHRvIGJlIHRoZSBtb3VzZSBkZXZpY2UKLWZvciBYRnJlZTg2IGFuZCBHUE0uIEkgYWN0dWFsbHkgdGhpbmsgdGhpcyBpcyBhIGJhZCBpZGVhLCBiZWNhdXNlIGl0Ci1hZGRzIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24uIFdoZW4gbG9va2luZyBhdCBhIGNvbmZpZyBmaWxlLCBpZgoteW91IHNlZSAvZGV2L21vdXNlIHlvdSdyZSBsZWZ0IHdvbmRlcmluZyB3aGljaCBtb3VzZQotaXMgYmVpbmcgcmVmZXJyZWQgdG8uIEhlbmNlIEkgcmVjb21tZW5kIHB1dHRpbmcgdGhlIGFjdHVhbCBtb3VzZQotZGV2aWNlIChmb3IgZXhhbXBsZSAvZGV2L3BzYXV4KSBpbnRvIHlvdXIKLS9ldGMvWDExL1hGODZDb25maWcgZmlsZSAoYW5kIHNpbWlsYXJseSBmb3IgdGhlIEdQTQotY29uZmlndXJhdGlvbiBmaWxlKS4KLQotQWx0ZXJuYXRpdmVseSwgdXNlIHRoZSBzYW1lIHRlY2huaXF1ZSB1c2VkIGZvciB1bnN1cHBvcnRlZCBkcml2ZXJzCi1kZXNjcmliZWQgYWJvdmUuCi0KLVRoZSBLZXJuZWwKLUZpbmFsbHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSBkZXZmcyBpcyBjb21waWxlZCBpbnRvIHlvdXIga2VybmVsLiBTZXQKLUNPTkZJR19FWFBFUklNRU5UQUw9eSwgQ09ORklHX0RFVkZTX0ZTPXkgYW5kIENPTkZJR19ERVZGU19NT1VOVD15IGJ5Ci11c2luZyBmYXZvdXJpdGUgY29uZmlndXJhdGlvbiB0b29sIChpLmUuIG1ha2UgY29uZmlnIG9yCi1tYWtlIHhjb25maWcpIGFuZCB0aGVuIG1ha2UgY2xlYW4gYW5kIHRoZW4gcmVjb21waWxlIHlvdXIga2VybmVsIGFuZCAKLW1vZHVsZXMuIEF0IGJvb3QsIGRldmZzIHdpbGwgYmUgbW91bnRlZCBvbnRvIC9kZXYuCi0KLUlmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgYm9vdGluZyAoZm9yIGV4YW1wbGUgaWYgeW91IGZvcmdvdCBhCi1jb25maWd1cmF0aW9uIHN0ZXApLCB5b3UgY2FuIHBhc3MgZGV2ZnM9bm9tb3VudCBhdCB0aGUga2VybmVsCi1ib290IGNvbW1hbmQgbGluZS4gVGhpcyB3aWxsIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIG1vdW50aW5nIGRldmZzIGF0Ci1ib290IHRpbWUgb250byAvZGV2LgotCi1JbiBnZW5lcmFsLCBhIGtlcm5lbCBidWlsdCB3aXRoIENPTkZJR19ERVZGU19GUz15IGJ1dCB3aXRob3V0IG1vdW50aW5nCi1kZXZmcyBvbnRvIC9kZXYgaXMgY29tcGxldGVseSBzYWZlLCBhbmQgcmVxdWlyZXMgbm8KLWNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gT25lIGV4Y2VwdGlvbiB0byB0YWtlIG5vdGUgb2YgaXMgd2hlbgotTEFCRUw9IGRpcmVjdGl2ZXMgYXJlIHVzZWQgaW4gL2V0Yy9mc3RhYi4gSW4gdGhpcwotY2FzZSB5b3Ugd2lsbCBiZSB1bmFibGUgdG8gYm9vdCBwcm9wZXJseS4gVGhpcyBpcyBiZWNhdXNlIHRoZQotbW91bnQoOCkgcHJvZ3JhbW1lIHVzZXMgL3Byb2MvcGFydGl0aW9ucyBhcyBwYXJ0IG9mCi10aGUgdm9sdW1lIGxhYmVsIHNlYXJjaCBwcm9jZXNzLCBhbmQgdGhlIGRldmljZSBuYW1lcyBpdCBmaW5kcyBhcmUgbm90Ci1hdmFpbGFibGUsIGJlY2F1c2Ugc2V0dGluZyBDT05GSUdfREVWRlNfRlM9eSBjaGFuZ2VzIHRoZSBuYW1lcyBpbgotL3Byb2MvcGFydGl0aW9ucywgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgZGV2ZnMgaXMgbW91bnRlZC4KLQotTm93IHlvdSd2ZSBmaW5pc2hlZCBhbGwgdGhlIHN0ZXBzIHJlcXVpcmVkLiBZb3UncmUgbm93IHJlYWR5IHRvIGJvb3QKLXlvdXIgc2hpbnkgbmV3IGtlcm5lbC4gRW5qb3kuCi0KLUNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uCi0KLU9LLCB5b3UndmUgbm93IGJvb3RlZCBhIGRldmZzLWVuYWJsZWQgc3lzdGVtLCBhbmQgZXZlcnl0aGluZyB3b3Jrcy4KLU5vdyB5b3UgbWF5IGZlZWwgbGlrZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiAoY29tbW9uIHRhcmdldHMgYXJlCi0vZXRjL2ZzdGFiIGFuZCAvZXRjL2RldmZzZC5jb25mKS4gU2luY2UgeW91IGhhdmUgYQotc3lzdGVtIHRoYXQgd29ya3MsIGlmIHlvdSBtYWtlIGFueSBjaGFuZ2VzIGFuZCBpdCBkb2Vzbid0IHdvcmssIHlvdQotbm93IGtub3cgdGhhdCB5b3Ugb25seSBoYXZlIHRvIHJlc3RvcmUgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHRoZQotZGVmYXVsdCBhbmQgaXQgd2lsbCB3b3JrIGFnYWluLgotCi0KLVBlcm1pc3Npb25zIHBlcnNpc3RlbmNlIGFjcm9zcyByZWJvb3RzCi0KLUlmIHlvdSBkb24ndCB1c2UgbWtub2QoMikgdG8gY3JlYXRlIGEgZGV2aWNlIGZpbGUsIG5vciB1c2UgY2htb2QoMikgb3IKLWNob3duKDIpIHRvIGNoYW5nZSB0aGUgb3duZXJzaGlwcy9wZXJtaXNzaW9ucywgdGhlIGlub2RlIGN0aW1lIHdpbGwKLXJlbWFpbiBhdCAwICh0aGUgZXBvY2gsIDEyIGFtLCAxLUpBTi0xOTcwLCBHTVQpLiBBbnl0aGluZyB3aXRoIGEgY3RpbWUKLWxhdGVyIHRoYW4gdGhpcyBoYXMgaGFkIGl0J3Mgb3duZXJzaGlwL3Blcm1pc3Npb25zIGNoYW5nZWQuIEhlbmNlLCBhCi1zaW1wbGUgc2NyaXB0IG9yIHByb2dyYW1tZSBtYXkgYmUgdXNlZCB0byB0YXIgdXAgYWxsIGNoYW5nZWQgaW5vZGVzLAotcHJpb3IgdG8gc2h1dGRvd24uIEFsdGhvdWdoIGVmZmVjdGl2ZSwgbWFueSBjb25zaWRlciB0aGlzIGFwcHJvYWNoIGEKLWtsdWRnZS4KLQotQSBtdWNoIGJldHRlciBhcHByb2FjaCBpcyB0byB1c2UgZGV2ZnNkIHRvIHNhdmUgYW5kIHJlc3RvcmUKLXBlcm1pc3Npb25zLiBJdCBtYXkgYmUgY29uZmlndXJlZCB0byByZWNvcmQgY2hhbmdlcyBpbiBwZXJtaXNzaW9ucyBhbmQKLXdpbGwgc2F2ZSB0aGVtIGluIGEgZGF0YWJhc2UgKGluIGZhY3QgYSBkaXJlY3RvcnkgdHJlZSksIGFuZCByZXN0b3JlCi10aGVzZSB1cG9uIGJvb3QuIFRoaXMgaXMgYW4gZWZmaWNpZW50IG1ldGhvZCBhbmQgcmVzdWx0cyBpbiBpbW1lZGlhdGUKLXNhdmluZyBvZiBjdXJyZW50IHBlcm1pc3Npb25zICh1bmxpa2UgdGhlIHRhciBhcHByb2FjaCwgd2hpY2ggc2F2ZXMKLXBlcm1pc3Npb25zIGF0IHNvbWUgdW5zcGVjaWZpZWQgZnV0dXJlIHRpbWUpLgotCi1UaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgc3VwcGxpZWQgd2l0aCBkZXZmc2QgaGFzIGNvbmZpZyBlbnRyaWVzCi13aGljaCB5b3UgbWF5IHVuY29tbWVudCB0byBlbmFibGUgcGVyc2lzdGVuY2UgbWFuYWdlbWVudC4KLQotSWYgeW91IGRlY2lkZSB0byB1c2UgdGhlIHRhciBhcHByb2FjaCBhbnl3YXksIGJlIGF3YXJlIHRoYXQgdGFyIHdpbGwKLWZpcnN0IHVubGluaygyKSBhbiBpbm9kZSBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgZGV2aWNlIG5vZGUuIFRoZQotdW5saW5rKDIpIGhhcyB0aGUgZWZmZWN0IG9mIGJyZWFraW5nIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYSBkZXZmcwotZW50cnkgYW5kIHRoZSBkZXZpY2UgZHJpdmVyLiBJZiB5b3UgdXNlIHRoZSAiZGV2ZnM9b25seSIgYm9vdCBvcHRpb24sCi15b3UgbG9zZSBhY2Nlc3MgdG8gdGhlIGRldmljZSBkcml2ZXIsIHJlcXVpcmluZyB5b3UgdG8gcmVsb2FkIHRoZQotbW9kdWxlLiBJIGNvbnNpZGVyIHRoaXMgYSBidWcgaW4gdGFyICh0aGVyZSBpcyBubyByZWFsIG5lZWQgdG8KLXVubGluaygyKSB0aGUgaW5vZGUgZmlyc3QpLgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBkZXZmc2QgdG8gcHJvdmlkZSBtb3JlIHNvcGhpc3RpY2F0ZWQKLW1hbmFnZW1lbnQgb2YgZGV2aWNlIHBlcm1pc3Npb25zLiBZb3UgY2FuIHVzZSBkZXZmc2QgdG8gc3RvcmUKLXBlcm1pc3Npb25zIGZvciB3aG9sZSBncm91cHMgb2YgZGV2aWNlcyB3aXRoIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24KLWVudHJ5LCByYXRoZXIgdGhhbiB0aGUgY29udmVudGlvbmFsIHNpbmdsZSBlbnRyeSBwZXIgZGV2aWNlIGVudHJ5LgotCi1QZXJtaXNzaW9ucyBkYXRhYmFzZSBzdG9yZWQgaW4gbW91bnRlZC1vdmVyIC9kZXYKLQotSWYgeW91IHdpc2ggdG8gc2F2ZSBhbmQgcmVzdG9yZSB5b3VyIGRldmljZSBwZXJtaXNzaW9ucyBpbnRvIHRoZQotZGlzYy1iYXNlZCAvZGV2IHdoaWxlIHN0aWxsIG1vdW50aW5nIGRldmZzIG9udG8gL2RldgoteW91IG1heSBkbyBzby4gVGhpcyByZXF1aXJlcyBhIDIuNC54IGtlcm5lbCAoaW4gZmFjdCwgMi4zLjk5IG9yCi1sYXRlciksIHdoaWNoIGhhcyB0aGUgVkZTIGJpbmRpbmcgZmFjaWxpdHkuIFlvdSBuZWVkIHRvIGRvIHRoZQotZm9sbG93aW5nIHRvIHNldCB0aGlzIHVwOgotCi0KLQotbWFrZSBzdXJlIHRoZSBrZXJuZWwgZG9lcyBub3QgbW91bnQgZGV2ZnMgYXQgYm9vdCB0aW1lCi0KLQotbWFrZSBzdXJlIHlvdSBoYXZlIGEgY29ycmVjdCAvZGV2L2NvbnNvbGUgZW50cnkgaW4geW91cgotcm9vdCBmaWxlLXN5c3RlbSAod2hlcmUgeW91ciBkaXNjLWJhc2VkIC9kZXYgbGl2ZXMpCi0KLWNyZWF0ZSB0aGUgL2Rldi1zdGF0ZSBkaXJlY3RvcnkKLQotCi1hZGQgdGhlIGZvbGxvd2luZyBsaW5lcyBuZWFyIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB5b3VyIGJvb3QKLXNjcmlwdHM6Ci0KLW1vdW50IC0tYmluZCAvZGV2IC9kZXYtc3RhdGUKLW1vdW50IC10IGRldmZzIG5vbmUgL2RldgotZGV2ZnNkIC9kZXYKLQotCi0KLQotYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciAvZXRjL2RldmZzZC5jb25mIGZpbGU6Ci0KLVJFR0lTVEVSCV5wdFtzeV0JCUlHTk9SRQotQ1JFQVRFCQlecHRbc3ldCQlJR05PUkUKLUNIQU5HRQkJXnB0W3N5XQkJSUdOT1JFCi1ERUxFVEUJCV5wdFtzeV0JCUlHTk9SRQotUkVHSVNURVIJLioJCUNPUFkJL2Rldi1zdGF0ZS8kZGV2bmFtZSAkZGV2cGF0aAotQ1JFQVRFCQkuKgkJQ09QWQkkZGV2cGF0aCAvZGV2LXN0YXRlLyRkZXZuYW1lCi1DSEFOR0UJCS4qCQlDT1BZCSRkZXZwYXRoIC9kZXYtc3RhdGUvJGRldm5hbWUKLURFTEVURQkJLioJCUNGVU5DVElPTiBHTE9CQUwgdW5saW5rIC9kZXYtc3RhdGUvJGRldm5hbWUKLVJFU1RPUkUJCS9kZXYtc3RhdGUKLQotTm90ZSB0aGF0IHRoZSBzYW1wbGUgZGV2ZnNkLmNvbmYgZmlsZSBjb250YWlucyB0aGVzZSBsaW5lcywKLWFzIHdlbGwgYXMgb3RoZXIgc2FtcGxlIGNvbmZpZ3VyYXRpb25zIHlvdSBtYXkgZmluZCB1c2VmdWwuIFNlZSB0aGUKLWRldmZzZCBkaXN0cmlidXRpb24KLQotCi1yZWJvb3QuCi0KLQotCi0KLVBlcm1pc3Npb25zIGRhdGFiYXNlIHN0b3JlZCBpbiBub3JtYWwgZGlyZWN0b3J5Ci0KLUlmIHlvdSBhcmUgdXNpbmcgYW4gb2xkZXIga2VybmVsIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBWRlMgYmluZGluZywKLXRoZW4geW91IHdvbid0IGJlIGFibGUgdG8gaGF2ZSB0aGUgcGVybWlzc2lvbnMgZGF0YWJhc2UgaW4gYQotbW91bnRlZC1vdmVyIC9kZXYuIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwgdXNlIGEgcmVndWxhcgotZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBkYXRhYmFzZS4gVGhlIHNhbXBsZSAvZXRjL2RldmZzZC5jb25mCi1maWxlIGFib3ZlIG1heSBzdGlsbCBiZSB1c2VkLiBZb3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSB0aGUKLS9kZXYtc3RhdGUgZGlyZWN0b3J5IHByaW9yIHRvIGluc3RhbGxpbmcgZGV2ZnNkLiBJZiB5b3UgaGF2ZQotb2xkIHBlcm1pc3Npb25zIGluIC9kZXYsIHRoZW4ganVzdCBjb3B5IChvciBtb3ZlKSB0aGUgZGV2aWNlCi1ub2RlcyBvdmVyIHRvIHRoZSBuZXcgZGlyZWN0b3J5LgotCi1XaGljaCBtZXRob2QgaXMgYmV0dGVyPwotCi1UaGUgYmVzdCBtZXRob2QgaXMgdG8gaGF2ZSB0aGUgcGVybWlzc2lvbnMgZGF0YWJhc2Ugc3RvcmVkIGluIHRoZQotbW91bnRlZC1vdmVyIC9kZXYuIFRoaXMgaXMgYmVjYXVzZSB5b3Ugd2lsbCBub3QgbmVlZCB0byBjb3B5Ci1kZXZpY2Ugbm9kZXMgb3ZlciB0byAvZGV2LXN0YXRlLCBhbmQgYmVjYXVzZSBpdCBhbGxvd3MgeW91IHRvCi1zd2l0Y2ggYmV0d2VlbiBkZXZmcyBhbmQgbm9uLWRldmZzIGtlcm5lbHMsIHdpdGhvdXQgcmVxdWlyaW5nIHlvdSB0bwotY29weSBwZXJtaXNzaW9ucyBiZXR3ZWVuIC9kZXYtc3RhdGUgKGZvciBkZXZmcykgYW5kCi0vZGV2IChmb3Igbm9uLWRldmZzKS4KLQotCi1EZWFsaW5nIHdpdGggZHJpdmVycyB3aXRob3V0IGRldmZzIHN1cHBvcnQKLQotQ3VycmVudGx5LCBub3QgYWxsIGRldmljZSBkcml2ZXJzIGluIHRoZSBrZXJuZWwgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvCi11c2UgZGV2ZnMuIERldmljZSBkcml2ZXJzIHdoaWNoIGRvIG5vdCB5ZXQgaGF2ZSBkZXZmcyBzdXBwb3J0IHdpbGwgbm90Ci1hdXRvbWFnaWNhbGx5IGFwcGVhciBpbiBkZXZmcy4gVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgZGV2aWNlIG5vZGVzCi1mb3IgdGhlc2UgZHJpdmVycyBpcyB0byB1bnBhY2sgYSB0YXJmaWxlIGNvbnRhaW5pbmcgdGhlIHJlcXVpcmVkCi1kZXZpY2Ugbm9kZXMuIFlvdSBjYW4gZG8gdGhpcyBpbiB5b3VyIGJvb3Qgc2NyaXB0cy4gQWxsIHlvdXIgZHJpdmVycwotd2lsbCBub3cgd29yayBhcyBiZWZvcmUuCi0KLUhvcGVmdWxseSBmb3IgbW9zdCBwZW9wbGUgZGV2ZnMgd2lsbCBoYXZlIGVub3VnaCBzdXBwb3J0IHNvIHRoYXQgdGhleQotY2FuIG1vdW50IGRldmZzIGRpcmVjdGx5IG92ZXIgL2RldiB3aXRob3V0IGxvc2luZyBtb3N0IGZ1bmN0aW9uYWxpdHkKLShpLmUuIGxvc2luZyBhY2Nlc3MgdG8gdmFyaW91cyBkZXZpY2VzKS4gQXMgb2YgMjItSkFOLTE5OTggKGRldmZzCi1wYXRjaCB2ZXJzaW9uIDEwKSBJIGFtIG5vdyBydW5uaW5nIHRoaXMgd2F5LiBBbGwgdGhlIGRldmljZXMgSSBoYXZlCi1hcmUgYXZhaWxhYmxlIGluIGRldmZzLCBzbyBJIGRvbid0IGxvc2UgYW55dGhpbmcuCi0KLVdBUk5JTkc6IGlmIHlvdXIgY29uZmlndXJhdGlvbiByZXF1aXJlcyB0aGUgb2xkLXN0eWxlIGRldmljZSBuYW1lcwotKGkuZS4gL2Rldi9oZGExIG9yIC9kZXYvc2RhMSksIHlvdSBtdXN0IGluc3RhbGwgZGV2ZnNkIGFuZCBjb25maWd1cmUKLWl0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgZW50cmllcy4gSXQgaXMgYWxtb3N0IGNlcnRhaW4gdGhhdCB5b3UKLXdpbGwgcmVxdWlyZSB0aGlzLiBOb3RlIHRoYXQgdGhlIGtlcm5lbCBjcmVhdGVzIGEgY29tcGF0aWJpbGl0eSBlbnRyeQotZm9yIHRoZSByb290IGRldmljZSwgc28geW91IGRvbid0IG5lZWQgaW5pdHJkLgotCi1Ob3RlIHRoYXQgeW91IG5vIGxvbmdlciBuZWVkIHRvIG1vdW50IGRldnB0cyBpZiB5b3UgdXNlIFVuaXg5OCBQVFlzLAotYXMgZGV2ZnMgY2FuIG1hbmFnZSAvZGV2L3B0cyBpdHNlbGYuIFRoaXMgc2F2ZXMgeW91IHNvbWUgUkFNLCBhcyB5b3UKLWRvbid0IG5lZWQgdG8gY29tcGlsZSBhbmQgaW5zdGFsbCBkZXZwdHMuIE5vdGUgdGhhdCBzb21lIHZlcnNpb25zIG9mCi1nbGliYyBoYXZlIGEgYnVnIHdpdGggVW5peDk4IHB0eSBoYW5kbGluZyBvbiBkZXZmcyBzeXN0ZW1zLiBDb250YWN0Ci10aGUgZ2xpYmMgbWFpbnRhaW5lcnMgZm9yIGEgZml4LiBHbGliYyAyLjEuMyBoYXMgdGhlIGZpeC4KLQotTm90ZSBhbHNvIHRoYXQgYXBhcnQgZnJvbSBlZGl0aW5nIC9ldGMvZnN0YWIsIG90aGVyIHRoaW5ncyB3aWxsIG5lZWQKLXRvIGJlIGNoYW5nZWQgaWYgeW91ICpkb24ndCogaW5zdGFsbCBkZXZmc2QuIFNvbWUgc29mdHdhcmUgKGxpa2UgdGhlIFgKLXNlcnZlcikgaGFyZC13aXJlIGRldmljZSBuYW1lcyBpbiB0aGVpciBzb3VyY2UuIEl0IHJlYWxseSBpcyBtdWNoCi1lYXNpZXIgdG8gaW5zdGFsbCBkZXZmc2Qgc28gdGhhdCBjb21wYXRpYmlsaXR5IGVudHJpZXMgYXJlIGNyZWF0ZWQuCi1Zb3UgY2FuIHRoZW4gc2xvd2x5IG1pZ3JhdGUgeW91ciBzeXN0ZW0gdG8gdXNpbmcgdGhlIG5ldyBkZXZpY2UgbmFtZXMKLShmb3IgZXhhbXBsZSwgYnkgc3RhcnRpbmcgd2l0aCAvZXRjL2ZzdGFiKSwgYW5kIHRoZW4gbGltaXRpbmcgdGhlCi1jb21wYXRpYmlsaXR5IGVudHJpZXMgdGhhdCBkZXZmc2QgY3JlYXRlcy4KLQotSUYgWU9VIENPTkZJR1VSRSBUTyBNT1VOVCBERVZGUyBBVCBCT09ULCBNQUtFIFNVUkUgWU9VIElOU1RBTEwgREVWRlNECi1CRUZPUkUgWU9VIEJPT1QgQSBERVZGUy1FTkFCTEVEIEtFUk5FTCEKLQotTm93IHRoYXQgZGV2ZnMgaGFzIGdvbmUgaW50byB0aGUgMi4zLjQ2IGtlcm5lbCwgSSdtIGdldHRpbmcgYSBsb3Qgb2YKLXJlcG9ydHMgYmFjay4gTWFueSBvZiB0aGVzZSBhcmUgYmVjYXVzZSBwZW9wbGUgYXJlIHRyeWluZyB0byBydW4KLXdpdGhvdXQgZGV2ZnNkLCBhbmQgaGVuY2Ugc29tZSB0aGluZ3MgYnJlYWsuIFBsZWFzZSBqdXN0IHJ1biBkZXZmc2QgaWYKLXRoaW5ncyBicmVhay4gSSB3YW50IHRvIGNvbmNlbnRyYXRlIG9uIHJlYWwgYnVncyByYXRoZXIgdGhhbgotbWlzY29uZmlndXJhdGlvbiBwcm9ibGVtcyBhdCB0aGUgbW9tZW50LiBJZiBwZW9wbGUgYXJlIHdpbGxpbmcgdG8gZml4Ci1idWdzL2ZhbHNlIGFzc3VtcHRpb25zIGluIG90aGVyIGNvZGUgKGkuZS4gZ2xpYmMsIFggc2VydmVyKSBhbmQgc3VibWl0Ci10aGF0IHRvIHRoZSByZXNwZWN0aXZlIG1haW50YWluZXJzLCB0aGF0IHdvdWxkIGJlIGdyZWF0LgotCi0KLUFsbCB0aGUgd2F5IHdpdGggRGV2ZnMKLQotVGhlIGRldmZzIGtlcm5lbCBwYXRjaCBjcmVhdGVzIGEgcmF0aW9uYWxpc2VkIGRldmljZSB0cmVlLiBBcyBzdGF0ZWQKLWFib3ZlLCBpZiB5b3Ugd2FudCB0byBrZWVwIHVzaW5nIHRoZSBvbGQgL2RldiBuYW1pbmcgc2NoZW1lLAoteW91IGp1c3QgbmVlZCB0byBjb25maWd1cmUgZGV2ZnNkIGFwcG9wcmlhdGVseSAoc2VlIHRoZSBtYW4KLXBhZ2UpLiBQZW9wbGUgd2hvIHByZWZlciB0aGUgb2xkIG5hbWVzIGNhbiBpZ25vcmUgdGhpcyBzZWN0aW9uLiBGb3IKLXRob3NlIG9mIHVzIHdobyBsaWtlIHRoZSByYXRpb25hbGlzZWQgbmFtZXMgYW5kIGFuIHVuY2x1dHRlcmVkCi0vZGV2LCByZWFkIG9uLgotCi1JZiB5b3UgZG9uJ3QgcnVuIGRldmZzZCwgb3IgZG9uJ3QgZW5hYmxlIGNvbXBhdGliaWxpdHkgZW50cnkKLW1hbmFnZW1lbnQsIHRoZW4geW91IHdpbGwgaGF2ZSB0byBjb25maWd1cmUgeW91ciBzeXN0ZW0gdG8gdXNlIHRoZSBuZXcKLW5hbWVzLiBGb3IgZXhhbXBsZSwgeW91IHdpbGwgdGhlbiBuZWVkIHRvIGVkaXQgeW91cgotL2V0Yy9mc3RhYiB0byB1c2UgdGhlIG5ldyBkaXNjIG5hbWluZyBzY2hlbWUuIElmIHlvdSB3YW50IHRvCi1iZSBhYmxlIHRvIGJvb3Qgbm9uLWRldmZzIGtlcm5lbHMsIHlvdSB3aWxsIG5lZWQgY29tcGF0aWJpbGl0eQotc3ltbGlua3MgaW4gdGhlIHVuZGVybHlpbmcgZGlzYy1iYXNlZCAvZGV2IHBvaW50aW5nIGJhY2sgdG8KLXRoZSBvbGQtc3R5bGUgbmFtZXMgZm9yIHdoZW4geW91IGJvb3QgYSBrZXJuZWwgd2l0aG91dCBkZXZmcy4KLQotWW91IGNhbiBzZWxlY3RpdmVseSBkZWNpZGUgd2hpY2ggZGV2aWNlcyB5b3Ugd2FudCBjb21wYXRpYmlsaXR5Ci1lbnRyaWVzIGZvci4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgb25seSB3YW50IGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IKLUJTRCBwc2V1ZG8tdGVybWluYWwgZGV2aWNlcyAob3RoZXJ3aXNlIHlvdSdsbCBoYXZlIHRvIHBhdGNoIHlvdSBDCi1saWJyYXJ5IG9yIHVzZSBVbml4OTggcHR5cyBpbnN0ZWFkKS4gSXQncyBqdXN0IGEgbWF0dGVyIG9mIHB1dHRpbmcgaW4KLXRoZSBjb3JyZWN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBpbnRvIC9kZXYvZGV2ZnNkLmNvbmYuCi0KLVRoZXJlIGFyZSBvdGhlciBjaG9pY2VzIG9mIG5hbWluZyBzY2hlbWVzIHRoYXQgeW91IG1heSBwcmVmZXIuIEZvcgotZXhhbXBsZSwgSSBkb24ndCB1c2UgdGhlIGtlcm5lbC1zdXBwbGllZAotbmFtZXMsIGJlY2F1c2UgdGhleSBhcmUgdG9vIHZlcmJvc2UuIEEgY29tbW9uIG1pc2NvbmNlcHRpb24gaXMKLXRoYXQgdGhlIGtlcm5lbC1zdXBwbGllZCBuYW1lcyBhcmUgbWVhbnQgdG8gYmUgdXNlZCBkaXJlY3RseSBpbgotY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBpcyBub3QgdGhlIGNhc2UuIFRoZXkgYXJlIGRlc2lnbmVkIHRvCi1yZWZsZWN0IHRoZSBsYXlvdXQgb2YgdGhlIGRldmljZXMgYXR0YWNoZWQgYW5kIHRvIHByb3ZpZGUgZWFzeQotY2xhc3NpZmljYXRpb24uCi0KLUlmIHlvdSBsaWtlIHRoZSBrZXJuZWwtc3VwcGxpZWQgbmFtZXMsIHRoYXQncyBmaW5lLiBJZiB5b3UgZG9uJ3QgdGhlbgoteW91IHNob3VsZCBiZSB1c2luZyBkZXZmc2QgdG8gY29uc3RydWN0IGEgbmFtZXNwYWNlIG1vcmUgdG8geW91cgotbGlraW5nLiBEZXZmc2QgaGFzIGJ1aWx0LWluIGNvZGUgdG8gY29uc3RydWN0IGEKLW5hbWVzcGFjZSB0aGF0IGlzIGJvdGggbG9naWNhbCBhbmQgZWFzeSB0bwotbWFuYWdlLiBJbiBlc3NlbmNlLCBpdCBjcmVhdGVzIGEgY29udmVuaWVudCBhYmJyZXZpYXRpb24gb2YgdGhlCi1rZXJuZWwtc3VwcGxpZWQgbmFtZXNwYWNlLgotCi1Zb3UgYXJlIG9mIGNvdXJzZSBmcmVlIHRvIGJ1aWxkIHlvdXIgb3duIG5hbWVzcGFjZS4gRGV2ZnNkIGhhcyBhbGwgdGhlCi1pbmZyYXN0cnVjdHVyZSByZXF1aXJlZCB0byBtYWtlIHRoaXMgZWFzeSBmb3IgeW91LiBBbGwgeW91IG5lZWQgZG8gaXMKLXdyaXRlIGEgc2NyaXB0LiBZb3UgY2FuIGV2ZW4gd3JpdGUgc29tZSBDIGNvZGUgYW5kIGRldmZzZCBjYW4gbG9hZCB0aGUKLXNoYXJlZCBvYmplY3QgYXMgYSBjYWxsYWJsZSBleHRlbnNpb24uCi0KLQotT3RoZXIgSXNzdWVzCi0KLVRoZSBpbml0IHByb2dyYW1tZQotQW5vdGhlciB0aGluZyB0byB0YWtlIG5vdGUgb2YgaXMgd2hldGhlciB5b3VyIGluaXQgcHJvZ3JhbW1lCi1jcmVhdGVzIGEgVW5peCBzb2NrZXQgL2Rldi90ZWxpbml0LiBTb21lIHZlcnNpb25zIG9mIGluaXQKLWNyZWF0ZSAvZGV2L3RlbGluaXQgc28gdGhhdCB0aGUgdGVsaW5pdCBwcm9ncmFtbWUgY2FuCi1jb21tdW5pY2F0ZSB3aXRoIHRoZSBpbml0IHByb2Nlc3MuIElmIHlvdSBoYXZlIHN1Y2ggYSBzeXN0ZW0geW91IG5lZWQKLXRvIG1ha2Ugc3VyZSB0aGF0IGRldmZzIGlzIG1vdW50ZWQgb3ZlciAvZGV2ICpiZWZvcmUqIGluaXQKLXN0YXJ0cy4gSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4ndCBsZWF2ZSB0aGUgbW91bnRpbmcgb2YgZGV2ZnMgdG8KLS9ldGMvcmMsIHNpbmNlIHRoaXMgaXMgZXhlY3V0ZWQgYWZ0ZXIgaW5pdC4gT3RoZXIKLXZlcnNpb25zIG9mIGluaXQgcmVxdWlyZSBhIG5hbWVkIHBpcGUgL2Rldi9pbml0Y3RsCi13aGljaCBtdXN0IGV4aXN0ICpiZWZvcmUqIGluaXQgc3RhcnRzLiBPbmNlIGFnYWluLCB5b3UgbmVlZCB0bwotbW91bnQgZGV2ZnMgYW5kIHRoZW4gY3JlYXRlIHRoZSBuYW1lZCBwaXBlICpiZWZvcmUqIGluaXQKLXN0YXJ0cy4KLQotVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG5vdyBpcyBub3QgdG8gbW91bnQgZGV2ZnMgb250byAvZGV2IGF0Ci1ib290IHRpbWUgZm9yIDIuMy54IGFuZCBsYXRlciBrZXJuZWxzLiBZb3UgY2FuIGNvcnJlY3QgdGhpcyB3aXRoIHRoZQotImRldmZzPW1vdW50IiBib290IG9wdGlvbi4gVGhpcyBzb2x2ZXMgYW55IHByb2JsZW1zIHdpdGggaW5pdCwKLWFuZCBhbHNvIHByZXZlbnRzIHRoZSBkcmVhZGVkOgotCi1DYW5ub3Qgb3BlbiBpbml0aWFsIGNvbnNvbGUKLQotbWVzc2FnZS4gRm9yIDIuMi54IGtlcm5lbHMgd2hlcmUgeW91IG5lZWQgdG8gYXBwbHkgdGhlIGRldmZzIHBhdGNoLAotdGhlIGRlZmF1bHQgaXMgdG8gbW91bnQuCi0KLUlmIHlvdSBoYXZlIGF1dG9tYXRpYyBtb3VudGluZyBvZiBkZXZmcyBvbnRvIC9kZXYgdGhlbiB5b3UKLW1heSBuZWVkIHRvIGNyZWF0ZSAvZGV2L2luaXRjdGwgaW4geW91ciBib290IHNjcmlwdHMuIFRoZQotZm9sbG93aW5nIGxpbmVzIHNob3VsZCBzdWZmaWNlOgotCi1ta25vZCAvZGV2L2luaXRjdGwgcAota2lsbCAtU0lHVVNSMSAxICAgICAgICMgdGVsbCBpbml0IHRoYXQgL2Rldi9pbml0Y3RsIG5vdyBleGlzdHMKLQotQWx0ZXJuYXRpdmVseSwgaWYgeW91IGRvbid0IHdhbnQgdGhlIGtlcm5lbCB0byBtb3VudCBkZXZmcyBvbnRvCi0vZGV2IHRoZW4geW91IGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIHByb2NlZHVyZSBpcyBhCi1ndWlkZWxpbmUgZm9yIGhvdyB0byBnZXQgYXJvdW5kIC9kZXYvaW5pdGN0bCBwcm9ibGVtczoKLQotIyBjZCAvc2JpbgotIyBtdiBpbml0IGluaXQucmVhbAotIyBjYXQgPiBpbml0Ci0jISAvYmluL3NoCi1tb3VudCAtbiAtdCBkZXZmcyBub25lIC9kZXYKLW1rbm9kIC9kZXYvaW5pdGN0bCBwCi1leGVjIC9zYmluL2luaXQucmVhbCAkKgotW2NvbnRyb2wtRF0KLSMgY2htb2QgYSt4IGluaXQKLQotTm90ZSB0aGF0IG5ld2VyIHZlcnNpb25zIG9mIGluaXQgY3JlYXRlIC9kZXYvaW5pdGN0bAotYXV0b21hdGljYWxseSwgc28geW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KLQotTW9kdWxlIGF1dG9sb2FkaW5nCi1Zb3Ugd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSBkZXZmc2QgdG8gZW5hYmxlIG1vZHVsZQotYXV0b2xvYWRpbmcuIFRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB5b3VyCi0vZXRjL2RldmZzZC5jb25mIGZpbGU6Ci0KLUxPT0tVUAkuKgkJTU9ETE9BRAotCi0KLUFzIG9mIGRldmZzZC12MS4zLjEwLCBhIGdlbmVyaWMgL2V0Yy9tb2R1bGVzLmRldmZzCi1jb25maWd1cmF0aW9uIGZpbGUgaXMgaW5zdGFsbGVkLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBNT0RMT0FECi1hY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgY29uZmlndXJhdGlvbnMuIElmIHlvdQotcmVxdWlyZSBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24sIGVkaXQgeW91ciAvZXRjL21vZHVsZXMuY29uZgotZmlsZS4gVGhlIHdheSBtb2R1bGUgYXV0b2xvYWRpbmcgd29yayB3aXRoIGRldmZzIGlzOgotCi0KLWEgcHJvY2VzcyBhdHRlbXB0cyB0byBsb29rdXAgYSBkZXZpY2Ugbm9kZSAoZS5nLiAvZGV2L2ZyZWQpCi0KLQotaWYgdGhhdCBkZXZpY2Ugbm9kZSBkb2VzIG5vdCBleGlzdCwgdGhlIGZ1bGwgcGF0aG5hbWUgaXMgcGFzc2VkIHRvCi1kZXZmc2QgYXMgYSBzdHJpbmcKLQotCi1kZXZmc2Qgd2lsbCBwYXNzIHRoZSBzdHJpbmcgdG8gdGhlIG1vZHByb2JlIHByb2dyYW1tZSAocHJvdmlkZWQgdGhlCi1jb25maWd1cmF0aW9uIGxpbmUgc2hvd24gYWJvdmUgaXMgcHJlc2VudCksIGFuZCBzcGVjaWZpZXMgdGhhdAotL2V0Yy9tb2R1bGVzLmRldmZzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKLQotCi0vZXRjL21vZHVsZXMuZGV2ZnMgaW5jbHVkZXMgL2V0Yy9tb2R1bGVzLmNvbmYgdG8KLWFjY2VzcyBsb2NhbCBjb25maWd1cmF0aW9ucwotCi1tb2Rwcm9iZSB3aWxsIHNlYXJjaCBpdCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGxvb2tpbmcgZm9yIGFuIGFsaWFzCi10aGF0IHRyYW5zbGF0ZXMgdGhlIHBhdGhuYW1lIGludG8gYSBtb2R1bGUgbmFtZQotCi0KLXRoZSB0cmFuc2xhdGVkIHBhdGhuYW1lIGlzIHRoZW4gdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuCi0KLQotSWYgeW91IHdhbnRlZCBhIGxvb2t1cCBvZiAvZGV2L2ZyZWQgdG8gbG9hZCB0aGUKLW15bW9kIG1vZHVsZSwgeW91IHdvdWxkIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uCi1saW5lIGluIC9ldGMvbW9kdWxlcy5jb25mOgotCi1hbGlhcyAgICAvZGV2L2ZyZWQgICAgbXltb2QKLQotVGhlIC9ldGMvbW9kdWxlcy5kZXZmcyBjb25maWd1cmF0aW9uIGZpbGUgcHJvdmlkZXMgbWFueSBzdWNoCi1hbGlhc2VzIGZvciBzdGFuZGFyZCBkZXZpY2UgbmFtZXMuIElmIHlvdSBsb29rIGNsb3NlbHkgYXQgdGhpcyBmaWxlLAoteW91IHdpbGwgbm90ZSB0aGF0IHNvbWUgbW9kdWxlcyByZXF1aXJlIG11bHRpcGxlIGFsaWFzIGNvbmZpZ3VyYXRpb24KLWxpbmVzLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbW9kdWxlIGF1dG9sb2FkaW5nIGZvciBvbGQgYW5kIG5ldwotZGV2aWNlIG5hbWVzLgotCi1Nb3VudGluZyByb290IG9mZiBhIGRldmZzIGRldmljZQotSWYgeW91IHdpc2ggdG8gbW91bnQgcm9vdCBvZmYgYSBkZXZmcyBkZXZpY2Ugd2hlbiB5b3UgcGFzcyB0aGUKLSJkZXZmcz1vbmx5IiBib290IG9wdGlvbiwgdGhlbiB5b3UgbmVlZCB0byBwYXNzIGluIHRoZQotInJvb3Q9PGRldmljZT4iIG9wdGlvbiB0byB0aGUga2VybmVsIHdoZW4gYm9vdGluZy4gSWYgeW91IHVzZQotTElMTywgdGhlbiB5b3UgbXVzdCBoYXZlIHRoaXMgaW4gbGlsby5jb25mOgotCi1hcHBlbmQgPSAicm9vdD08ZGV2aWNlPiIKLQotU3VycHJpc2VkPyBZZXAsIHNvIHdhcyBJLiBJdCB0dXJucyBvdXQgaWYgeW91IGhhdmUgKGFzIG1vc3QgcGVvcGxlCi1kbyk6Ci0KLXJvb3QgPSA8ZGV2aWNlPgotCi0KLXRoZW4gTElMTyB3aWxsIGRldGVybWluZSB0aGUgZGV2aWNlIG51bWJlciBvZiA8ZGV2aWNlPiBhbmQgd2lsbAotd3JpdGUgdGhhdCBkZXZpY2UgbnVtYmVyIGludG8gYSBzcGVjaWFsIHBsYWNlIGluIHRoZSBrZXJuZWwgaW1hZ2UKLWJlZm9yZSBzdGFydGluZyB0aGUga2VybmVsLCBhbmQgdGhlIGtlcm5lbCB3aWxsIHVzZSB0aGF0IGRldmljZSBudW1iZXIKLXRvIG1vdW50IHRoZSByb290IGZpbGVzeXN0ZW0uIFNvLCB1c2luZyB0aGUgImFwcGVuZCIgdmFyaWV0eSBlbnN1cmVzCi10aGF0IExJTE8gcGFzc2VzIHRoZSByb290IGZpbGVzeXN0ZW0gZGV2aWNlIGFzIGEgc3RyaW5nLCB3aGljaCBkZXZmcwotY2FuIHRoZW4gdXNlLgotCi1Ob3RlIHRoYXQgdGhpcyBpc24ndCBhbiBpc3N1ZSBpZiB5b3UgZG9uJ3QgcGFzcyAiZGV2ZnM9b25seSIuCi0KLVRUWSBpc3N1ZXMKLVRoZSB0dHluYW1lKDMpIGZ1bmN0aW9uIGluIHNvbWUgdmVyc2lvbnMgb2YgdGhlIEMgbGlicmFyeSBtYWtlcwotZmFsc2UgYXNzdW1wdGlvbnMgYWJvdXQgZGV2aWNlIGVudHJpZXMgd2hpY2ggYXJlIHN5bWJvbGljIGxpbmtzLiAgVGhlCi10dHkoMSkgcHJvZ3JhbW1lIGlzIG9uZSB0aGF0IGRlcGVuZHMgb24gdGhpcyBmdW5jdGlvbi4gIEkndmUKLXdyaXR0ZW4gYSBwYXRjaCB0byBsaWJjIDUuNC40MyB3aGljaCBmaXhlcyB0aGlzLiBUaGlzIGhhcyBiZWVuCi1pbmNsdWRlZCBpbiBsaWJjIDUuNC40NCBhbmQgYSBzaW1pbGFyIGZpeCBpcyBpbiBnbGliYyAyLjEuMy4KLQotCi1LZXJuZWwgTmFtaW5nIFNjaGVtZQotCi1UaGUga2VybmVsIHByb3ZpZGVzIGEgZGVmYXVsdCBuYW1pbmcgc2NoZW1lLiBUaGlzIHNjaGVtZSBpcyBkZXNpZ25lZAotdG8gbWFrZSBpdCBlYXN5IHRvIHNlYXJjaCBmb3Igc3BlY2lmaWMgZGV2aWNlcyBvciBkZXZpY2UgdHlwZXMsIGFuZCB0bwotdmlldyB0aGUgYXZhaWxhYmxlIGRldmljZXMuIFNvbWUgZGV2aWNlIHR5cGVzIChzdWNoIGFzIGhhcmQgZGlzY3MpLAotaGF2ZSBhIGRpcmVjdG9yeSBvZiBlbnRyaWVzLCBtYWtpbmcgaXQgZWFzeSB0byBzZWUgd2hhdCBkZXZpY2VzIG9mCi10aGF0IGNsYXNzIGFyZSBhdmFpbGFibGUuIE9mdGVuLCB0aGUgZW50cmllcyBhcmUgc3ltYm9saWMgbGlua3MgaW50byBhCi1kaXJlY3RvcnkgdHJlZSB0aGF0IHJlZmxlY3RzIHRoZSB0b3BvbG9neSBvZiBhdmFpbGFibGUgZGV2aWNlcy4gVGhlCi10b3BvbG9naWNhbCB0cmVlIGlzIHVzZWZ1bCBmb3IgZmluZGluZyBob3cgeW91ciBkZXZpY2VzIGFyZSBhcnJhbmdlZC4KLQotQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSBuYW1pbmcgc2NoZW1lcyBmb3IgdGhlIG1vc3QgY29tbW9uIGRyaXZlcnMuIEEKLWxpc3Qgb2YgcmVzZXJ2ZWQgZGV2aWNlIG5hbWVzIGlzCi1hdmFpbGFibGUgZm9yIHJlZmVyZW5jZS4gUGxlYXNlIHNlbmQgZW1haWwgdG8KLXJnb29jaEBhdG5mLmNzaXJvLmF1IHRvIG9idGFpbiBhbiBhbGxvY2F0aW9uLiBQbGVhc2UgYmUKLXBhdGllbnQgKHRoZSBtYWludGFpbmVyIGlzIGJ1c3kpLiBBbiBhbHRlcm5hdGl2ZSBuYW1lIG1heSBiZSBhbGxvY2F0ZWQKLWluc3RlYWQgb2YgdGhlIHJlcXVlc3RlZCBuYW1lLCBhdCB0aGUgZGlzY3JldGlvbiBvZiB0aGUgbWFpbnRhaW5lci4KLQotRGlzYyBEZXZpY2VzCi0KLUFsbCBkaXNjcywgd2hldGhlciBTQ1NJLCBJREUgb3Igd2hhdGV2ZXIsIGFyZSBwbGFjZWQgdW5kZXIgdGhlCi0vZGV2L2Rpc2NzIGhpZXJhcmNoeToKLQotCS9kZXYvZGlzY3MvZGlzYzAJZmlyc3QgZGlzYwotCS9kZXYvZGlzY3MvZGlzYzEJc2Vjb25kIGRpc2MKLQotCi1FYWNoIG9mIHRoZXNlIGVudHJpZXMgaXMgYSBzeW1ib2xpYyBsaW5rIHRvIHRoZSBkaXJlY3RvcnkgZm9yIHRoYXQKLWRldmljZS4gVGhlIGRldmljZSBkaXJlY3RvcnkgY29udGFpbnM6Ci0KLQlkaXNjCWZvciB0aGUgd2hvbGUgZGlzYwotCXBhcnQqCWZvciBpbmRpdmlkdWFsIHBhcnRpdGlvbnMKLQotCi1DRC1ST00gRGV2aWNlcwotCi1BbGwgQ0QtUk9Ncywgd2hldGhlciBTQ1NJLCBJREUgb3Igd2hhdGV2ZXIsIGFyZSBwbGFjZWQgdW5kZXIgdGhlCi0vZGV2L2Nkcm9tcyBoaWVyYXJjaHk6Ci0KLQkvZGV2L2Nkcm9tcy9jZHJvbTAJZmlyc3QgQ0QtUk9NCi0JL2Rldi9jZHJvbXMvY2Ryb20xCXNlY29uZCBDRC1ST00KLQotCi1FYWNoIG9mIHRoZXNlIGVudHJpZXMgaXMgYSBzeW1ib2xpYyBsaW5rIHRvIHRoZSByZWFsIGRldmljZSBlbnRyeSBmb3IKLXRoYXQgZGV2aWNlLgotCi1UYXBlIERldmljZXMKLQotQWxsIHRhcGVzLCB3aGV0aGVyIFNDU0ksIElERSBvciB3aGF0ZXZlciwgYXJlIHBsYWNlZCB1bmRlciB0aGUKLS9kZXYvdGFwZXMgaGllcmFyY2h5OgotCi0JL2Rldi90YXBlcy90YXBlMAlmaXJzdCB0YXBlCi0JL2Rldi90YXBlcy90YXBlMQlzZWNvbmQgdGFwZQotCi0KLUVhY2ggb2YgdGhlc2UgZW50cmllcyBpcyBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIGRpcmVjdG9yeSBmb3IgdGhhdAotZGV2aWNlLiBUaGUgZGV2aWNlIGRpcmVjdG9yeSBjb250YWluczoKLQotCW10CQkJZm9yIG1vZGUgMAotCW10bAkJCWZvciBtb2RlIDEKLQltdG0JCQlmb3IgbW9kZSAyCi0JbXRhCQkJZm9yIG1vZGUgMwotCW10bgkJCWZvciBtb2RlIDAsIG5vIHJld2luZAotCW10bG4JCQlmb3IgbW9kZSAxLCBubyByZXdpbmQKLQltdG1uCQkJZm9yIG1vZGUgMiwgbm8gcmV3aW5kCi0JbXRhbgkJCWZvciBtb2RlIDMsIG5vIHJld2luZAotCi0KLVNDU0kgRGV2aWNlcwotCi1UbyB1bmlxdWVseSBpZGVudGlmeSBhbnkgU0NTSSBkZXZpY2UgcmVxdWlyZXMgdGhlIGZvbGxvd2luZwotaW5mb3JtYXRpb246Ci0KLSAgY29udHJvbGxlcgkoaG9zdCBhZGFwdGVyKQotICBidXMJCShTQ1NJIGNoYW5uZWwpCi0gIHRhcmdldAkoU0NTSSBJRCkKLSAgdW5pdAkJKExvZ2ljYWwgVW5pdCBOdW1iZXIpCi0KLQotQWxsIFNDU0kgZGV2aWNlcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYvc2NzaSAoYXNzdW1pbmcgZGV2ZnMKLWlzIG1vdW50ZWQgb24gL2RldikuIEhlbmNlLCBhIFNDU0kgZGV2aWNlIHdpdGggdGhlIGZvbGxvd2luZwotcGFyYW1ldGVyczogYz0xLGI9Mix0PTMsdT00IHdvdWxkIGFwcGVhciBhczoKLQotCS9kZXYvc2NzaS9ob3N0MS9idXMyL3RhcmdldDMvbHVuNAlkZXZpY2UgZGlyZWN0b3J5Ci0KLQotSW5zaWRlIHRoaXMgZGlyZWN0b3J5LCBhIG51bWJlciBvZiBkZXZpY2UgZW50cmllcyBtYXkgYmUgY3JlYXRlZCwKLWRlcGVuZGluZyBvbiB3aGljaCBTQ1NJIGRldmljZS10eXBlIGRyaXZlcnMgd2VyZSBpbnN0YWxsZWQuCi0KLVNlZSB0aGUgc2VjdGlvbiBvbiB0aGUgZGlzYyBuYW1pbmcgc2NoZW1lIHRvIHNlZSB3aGF0IGVudHJpZXMgdGhlIFNDU0kKLWRpc2MgZHJpdmVyIGNyZWF0ZXMuCi0KLVNlZSB0aGUgc2VjdGlvbiBvbiB0aGUgdGFwZSBuYW1pbmcgc2NoZW1lIHRvIHNlZSB3aGF0IGVudHJpZXMgdGhlIFNDU0kKLXRhcGUgZHJpdmVyIGNyZWF0ZXMuCi0KLVRoZSBTQ1NJIENELVJPTSBkcml2ZXIgY3JlYXRlczoKLQotCWNkCi0KLQotVGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIgY3JlYXRlczoKLQotCWdlbmVyaWMKLQotCi1JREUgRGV2aWNlcwotCi1UbyB1bmlxdWVseSBpZGVudGlmeSBhbnkgSURFIGRldmljZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nCi1pbmZvcm1hdGlvbjoKLQotICBjb250cm9sbGVyCi0gIGJ1cwkJKGFrYS4gcHJpbWFyeS9zZWNvbmRhcnkpCi0gIHRhcmdldAkoYWthLiBtYXN0ZXIvc2xhdmUpCi0gIHVuaXQKLQotCi1BbGwgSURFIGRldmljZXMgYXJlIHBsYWNlZCB1bmRlciAvZGV2L2lkZSwgYW5kIHVzZXMgYSBzaW1pbGFyCi1uYW1pbmcgc2NoZW1lIHRvIHRoZSBTQ1NJIHN1YnN5c3RlbS4KLQotWFQgSGFyZCBEaXNjcwotCi1BbGwgWFQgZGlzY3MgYXJlIHBsYWNlZCB1bmRlciAvZGV2L3hkLiBUaGUgZmlyc3QgWFQgZGlzYyBoYXMKLXRoZSBkaXJlY3RvcnkgL2Rldi94ZC9kaXNjMC4KLQotVFRZIGRldmljZXMKLQotVGhlIHR0eSBkZXZpY2VzIG5vdyBhcHBlYXIgYXM6Ci0KLSAgTmV3IG5hbWUgICAgICAgICAgICAgICAgICAgT2xkLW5hbWUgICAgICAgICAgICAgICAgICAgRGV2aWNlIFR5cGUKLSAgLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0KLSAgL2Rldi90dHMvezAsMSwuLi59ICAgICAgICAgL2Rldi90dHlTezAsMSwuLi59ICAgICAgICAgU2VyaWFsIHBvcnRzCi0gIC9kZXYvY3VhL3swLDEsLi4ufSAgICAgICAgIC9kZXYvY3VhezAsMSwuLi59ICAgICAgICAgIENhbGwgb3V0IGRldmljZXMKLSAgL2Rldi92Yy8wICAgICAgICAgICAgICAgICAgL2Rldi90dHkgICAgICAgICAgICAgICAgICAgQ3VycmVudCB2aXJ0dWFsIGNvbnNvbGUKLSAgL2Rldi92Yy97MSwyLC4uLn0gICAgICAgICAgL2Rldi90dHl7MS4uLjYzfSAgICAgICAgICAgVmlydHVhbCBjb25zb2xlcwotICAvZGV2L3ZjYy97MCwxLC4uLn0gICAgICAgICAvZGV2L3Zjc3sxLi4uNjN9ICAgICAgICAgICBWaXJ0dWFsIGNvbnNvbGVzCi0gIC9kZXYvcHR5L217MCwxLC4uLn0gICAgICAgIC9kZXYvcHR5cD8/ICAgICAgICAgICAgICAgIFBUWSBtYXN0ZXJzCi0gIC9kZXYvcHR5L3N7MCwxLC4uLn0gICAgICAgIC9kZXYvdHR5cD8/ICAgICAgICAgICAgICAgIFBUWSBzbGF2ZXMKLQotCi1SQU1ESVNDUwotCi1UaGUgUkFNRElTQ1MgYXJlIHBsYWNlZCBpbiB0aGVpciBvd24gZGlyZWN0b3J5LCBhbmQgYXJlIG5hbWVkIHRodXM6Ci0KLSAgL2Rldi9yZC97MCwxLDIsLi4ufQotCi0KLU1ldGEgRGV2aWNlcwotCi1UaGUgbWV0YSBkZXZpY2VzIGFyZSBwbGFjZWQgaW4gdGhlaXIgb3duIGRpcmVjdG9yeSwgYW5kIGFyZSBuYW1lZAotdGh1czoKLQotICAvZGV2L21kL3swLDEsMiwuLi59Ci0KLQotRmxvcHB5IGRpc2NzCi0KLUZsb3BweSBkaXNjcyBhcmUgcGxhY2VkIGluIHRoZSAvZGV2L2Zsb3BweSBkaXJlY3RvcnkuCi0KLUxvb3AgZGV2aWNlcwotCi1Mb29wIGRldmljZXMgYXJlIHBsYWNlZCBpbiB0aGUgL2Rldi9sb29wIGRpcmVjdG9yeS4KLQotU291bmQgZGV2aWNlcwotCi1Tb3VuZCBkZXZpY2VzIGFyZSBwbGFjZWQgaW4gdGhlIC9kZXYvc291bmQgZGlyZWN0b3J5Ci0oYXVkaW8sIHNlcXVlbmNlciwgLi4uKS4KLQotCi1EZXZmc2QgTmFtaW5nIFNjaGVtZQotCi1EZXZmc2QgcHJvdmlkZXMgYSBuYW1pbmcgc2NoZW1lIHdoaWNoIGlzIGEgY29udmVuaWVudCBhYmJyZXZpYXRpb24gb2YKLXRoZSBrZXJuZWwtc3VwcGxpZWQgbmFtZXNwYWNlLiBJbiBzb21lCi1jYXNlcywgdGhlIGtlcm5lbC1zdXBwbGllZCBuYW1pbmcgc2NoZW1lIGlzIHF1aXRlIGNvbnZlbmllbnQsIHNvCi1kZXZmc2QgZG9lcyBub3QgcHJvdmlkZSBhbm90aGVyIG5hbWluZyBzY2hlbWUuIFRoZSBjb252ZW5pZW5jZSBuYW1lcwotdGhhdCBkZXZmc2QgY3JlYXRlcyBhcmUgaW4gZmFjdCB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3JpZ2luYWwgZGV2ZnMKLWtlcm5lbCBwYXRjaCBjcmVhdGVkIChiZWZvcmUgTGludXMgbWFuZGF0ZWQgdGhlIEJpZyBOYW1lCi1DaGFuZ2UpLiBUaGVzZSBhcmUgcmVmZXJyZWQgdG8gYXMgIm5ldyBjb21wYXRpYmlsaXR5IGVudHJpZXMiLgotCi1JbiBvcmRlciB0byBjb25maWd1cmUgZGV2ZnNkIHRvIGNyZWF0ZSB0aGVzZSBjb252ZW5pZW5jZSBuYW1lcywgdGhlCi1mb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB5b3VyIC9ldGMvZGV2ZnNkLmNvbmY6Ci0KLVJFR0lTVEVSCS4qCQlNS05FV0NPTVBBVAotVU5SRUdJU1RFUgkuKgkJUk1ORVdDT01QQVQKLQotVGhpcyB3aWxsIGNhdXNlIGRldmZzZCB0byBjcmVhdGUgKGFuZCBkZXN0cm95KSBzeW1ib2xpYyBsaW5rcyB3aGljaAotcG9pbnQgdG8gdGhlIGtlcm5lbC1zdXBwbGllZCBuYW1lcy4KLQotU0NTSSBIYXJkIERpc2NzCi0KLUFsbCBTQ1NJIGRpc2NzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi9zZCAoYXNzdW1pbmcgZGV2ZnMgaXMKLW1vdW50ZWQgb24gL2RldikuIEhlbmNlLCBhIFNDU0kgZGlzYyB3aXRoIHRoZSBmb2xsb3dpbmcKLXBhcmFtZXRlcnM6IGM9MSxiPTIsdD0zLHU9NCB3b3VsZCBhcHBlYXIgYXM6Ci0KLQkvZGV2L3NkL2MxYjJ0M3U0CWZvciB0aGUgd2hvbGUgZGlzYwotCS9kZXYvc2QvYzFiMnQzdTRwNQlmb3IgdGhlIDV0aCBwYXJ0aXRpb24KLQkvZGV2L3NkL2MxYjJ0M3U0cDVzNglmb3IgdGhlIDZ0aCBzbGljZSBpbiB0aGUgNXRoIHBhcnRpdGlvbgotCi0KLVNDU0kgVGFwZXMKLQotQWxsIFNDU0kgdGFwZXMgYXJlIHBsYWNlZCB1bmRlciAvZGV2L3N0LiBBIHNpbWlsYXIgbmFtaW5nCi1zY2hlbWUgaXMgdXNlZCBhcyBmb3IgU0NTSSBkaXNjcy4gQSBTQ1NJIHRhcGUgd2l0aCB0aGUKLXBhcmFtZXRlcnM6Yz0xLGI9Mix0PTMsdT00IHdvdWxkIGFwcGVhciBhczoKLQotCS9kZXYvc3QvYzFiMnQzdTRtMAlmb3IgbW9kZSAwCi0JL2Rldi9zdC9jMWIydDN1NG0xCWZvciBtb2RlIDEKLQkvZGV2L3N0L2MxYjJ0M3U0bTIJZm9yIG1vZGUgMgotCS9kZXYvc3QvYzFiMnQzdTRtMwlmb3IgbW9kZSAzCi0JL2Rldi9zdC9jMWIydDN1NG0wbglmb3IgbW9kZSAwLCBubyByZXdpbmQKLQkvZGV2L3N0L2MxYjJ0M3U0bTFuCWZvciBtb2RlIDEsIG5vIHJld2luZAotCS9kZXYvc3QvYzFiMnQzdTRtMm4JZm9yIG1vZGUgMiwgbm8gcmV3aW5kCi0JL2Rldi9zdC9jMWIydDN1NG0zbglmb3IgbW9kZSAzLCBubyByZXdpbmQKLQotCi1TQ1NJIENELVJPTXMKLQotQWxsIFNDU0kgQ0QtUk9NcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYvc3IuIEEgc2ltaWxhciBuYW1pbmcKLXNjaGVtZSBpcyB1c2VkIGFzIGZvciBTQ1NJIGRpc2NzLiBBIFNDU0kgQ0QtUk9NIHdpdGggdGhlCi1wYXJhbWV0ZXJzOmM9MSxiPTIsdD0zLHU9NCB3b3VsZCBhcHBlYXIgYXM6Ci0KLQkvZGV2L3NyL2MxYjJ0M3U0Ci0KLQotU0NTSSBHZW5lcmljIERldmljZXMKLQotVGhlIGdlbmVyaWMgKGFrYS4gcmF3KSBpbnRlcmZhY2UgZm9yIGFsbCBTQ1NJIGRldmljZXMgYXJlIHBsYWNlZCB1bmRlcgotL2Rldi9zZy4gQSBzaW1pbGFyIG5hbWluZyBzY2hlbWUgaXMgdXNlZCBhcyBmb3IgU0NTSSBkaXNjcy4gQQotU0NTSSBnZW5lcmljIGRldmljZSB3aXRoIHRoZSBwYXJhbWV0ZXJzOmM9MSxiPTIsdD0zLHU9NCB3b3VsZCBhcHBlYXIKLWFzOgotCi0JL2Rldi9zZy9jMWIydDN1NAotCi0KLUlERSBIYXJkIERpc2NzCi0KLUFsbCBJREUgZGlzY3MgYXJlIHBsYWNlZCB1bmRlciAvZGV2L2lkZS9oZCwgdXNpbmcgYSBzaW1pbGFyCi1jb252ZW50aW9uIHRvIFNDU0kgZGlzY3MuIFRoZSBmb2xsb3dpbmcgbWFwcGluZ3MgZXhpc3QgYmV0d2VlbiB0aGUgbmV3Ci1hbmQgdGhlIG9sZCBuYW1lczoKLQotCS9kZXYvaGRhCS9kZXYvaWRlL2hkL2MwYjB0MHUwCi0JL2Rldi9oZGIJL2Rldi9pZGUvaGQvYzBiMHQxdTAKLQkvZGV2L2hkYwkvZGV2L2lkZS9oZC9jMGIxdDB1MAotCS9kZXYvaGRkCS9kZXYvaWRlL2hkL2MwYjF0MXUwCi0KLQotSURFIFRhcGVzCi0KLUEgc2ltaWxhciBuYW1pbmcgc2NoZW1lIGlzIHVzZWQgYXMgZm9yIElERSBkaXNjcy4gVGhlIGVudHJpZXMgd2lsbAotYXBwZWFyIGluIHRoZSAvZGV2L2lkZS9tdCBkaXJlY3RvcnkuCi0KLUlERSBDRC1ST00KLQotQSBzaW1pbGFyIG5hbWluZyBzY2hlbWUgaXMgdXNlZCBhcyBmb3IgSURFIGRpc2NzLiBUaGUgZW50cmllcyB3aWxsCi1hcHBlYXIgaW4gdGhlIC9kZXYvaWRlL2NkIGRpcmVjdG9yeS4KLQotSURFIEZsb3BwaWVzCi0KLUEgc2ltaWxhciBuYW1pbmcgc2NoZW1lIGlzIHVzZWQgYXMgZm9yIElERSBkaXNjcy4gVGhlIGVudHJpZXMgd2lsbAotYXBwZWFyIGluIHRoZSAvZGV2L2lkZS9mZCBkaXJlY3RvcnkuCi0KLVhUIEhhcmQgRGlzY3MKLQotQWxsIFhUIGRpc2NzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi94ZC4gVGhlIGZpcnN0IFhUIGRpc2MKLXdvdWxkIGFwcGVhciBhcyAvZGV2L3hkL2MwdDAuCi0KLQotT2xkIENvbXBhdGliaWxpdHkgTmFtZXMKLQotVGhlIG9sZCBjb21wYXRpYmlsaXR5IG5hbWVzIGFyZSB0aGUgbGVnYWN5IGRldmljZSBuYW1lcywgc3VjaCBhcwotL2Rldi9oZGEsIC9kZXYvc2RhLCAvZGV2L3J0YyBhbmQgc28gb24uCi1EZXZmc2QgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gY3JlYXRlIGNvbXBhdGliaWxpdHkgc3ltbGlua3Mgc28gdGhhdCB5b3UKLW1heSBjb250aW51ZSB0byB1c2UgdGhlIG9sZCBuYW1lcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHNvCi10aGF0IG9sZCBhcHBsaWNhdGlvbnMgd2lsbCBjb250aW51ZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCi0KLUluIG9yZGVyIHRvIGNvbmZpZ3VyZSBkZXZmc2QgdG8gY3JlYXRlIHRoZXNlIGxlZ2FjeSBuYW1lcywgdGhlCi1mb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB5b3VyIC9ldGMvZGV2ZnNkLmNvbmY6Ci0KLVJFR0lTVEVSCS4qCQlNS09MRENPTVBBVAotVU5SRUdJU1RFUgkuKgkJUk1PTERDT01QQVQKLQotVGhpcyB3aWxsIGNhdXNlIGRldmZzZCB0byBjcmVhdGUgKGFuZCBkZXN0cm95KSBzeW1ib2xpYyBsaW5rcyB3aGljaAotcG9pbnQgdG8gdGhlIGtlcm5lbC1zdXBwbGllZCBuYW1lcy4KLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLURldmljZSBkcml2ZXJzIGN1cnJlbnRseSBwb3J0ZWQKLQotLSBBbGwgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXIgZGV2aWNlcyBzdXBwb3J0IGRldmZzICh0aGlzIGlzIGRvbmUKLSAgdHJhbnNwYXJlbnRseSB0aHJvdWdoIG1pc2NfcmVnaXN0ZXIoKSkKLQotLSBTQ1NJIGRpc2NzIGFuZCBnZW5lcmljIGhhcmQgZGlzY3MKLQotLSBDaGFyYWN0ZXIgbWVtb3J5IGRldmljZXMgKG51bGwsIHplcm8sIGZ1bGwgYW5kIHNvIG9uKQotICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0KLS0gTG9vcCBkZXZpY2VzICgvZGV2L2xvb3A/KQotIAotLSBUVFkgZGV2aWNlcyAoY29uc29sZSwgc2VyaWFsIHBvcnRzLCB0ZXJtaW5hbHMgYW5kIHBzZXVkby10ZXJtaW5hbHMpCi0gIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLQotLSBTQ1NJIHRhcGVzICgvZGV2L3Njc2kgYW5kIC9kZXYvdGFwZXMpCi0KLS0gU0NTSSBDRC1ST01zICgvZGV2L3Njc2kgYW5kIC9kZXYvY2Ryb21zKQotCi0tIFNDU0kgZ2VuZXJpYyBkZXZpY2VzICgvZGV2L3Njc2kpCi0KLS0gUkFNRElTQ1MgKC9kZXYvcmFtPykKLQotLSBNZXRhIERldmljZXMgKC9kZXYvbWQqKQotCi0tIEZsb3BweSBkaXNjcyAoL2Rldi9mbG9wcHkpCi0KLS0gUGFyYWxsZWwgcG9ydCBwcmludGVycyAoL2Rldi9wcmludGVycykKLQotLSBTb3VuZCBkZXZpY2VzICgvZGV2L3NvdW5kKQotICBUaGFua3MgdG8gRXJpYyBEdW1hcyA8ZHVtYXNAbGludXguZXUub3JnPiBhbmQKLSAgQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0KLS0gSm95c3RpY2tzICgvZGV2L2pveXN0aWNrcykKLQotLSBTcGFyYyBrZXlib2FyZCAoL2Rldi9rYmQpCi0KLS0gRFNQNTYwMDEgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yICgvZGV2L2RzcDU2aykKLQotLSBBcHBsZSBEZXNrdG9wIEJ1cyAoL2Rldi9hZGIpCi0KLS0gQ29kYSBuZXR3b3JrIGZpbGUgc3lzdGVtICgvZGV2L2NmcyopCi0KLS0gVmlydHVhbCBjb25zb2xlIGNhcHR1cmUgZGV2aWNlcyAoL2Rldi92Y2MpCi0gIFRoYW5rcyB0byBEZW5uaXMgSG91IDxzbWlsYXhAbWluZG1lbGQueWkub3JnPgotCi0tIEZyYW1lIGJ1ZmZlciBkZXZpY2VzICgvZGV2L2ZiKQotCi0tIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyAoL2Rldi92NGwpCi0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1BbGxvY2F0aW9uIG9mIERldmljZSBOdW1iZXJzCi0KLURldmZzIGFsbG93cyB5b3UgdG8gd3JpdGUgYSBkcml2ZXIgd2hpY2ggZG9lc24ndCBuZWVkIHRvIGFsbG9jYXRlIGEKLWRldmljZSBudW1iZXIgKG1ham9yJm1pbm9yIG51bWJlcnMpIGZvciB0aGUgaW50ZXJuYWwgb3BlcmF0aW9uIG9mIHRoZQota2VybmVsLiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgdXNlcnNwYWNlIHByb2dyYW1tZXMgdGhhdCB1c2UKLXRoZSBkZXZpY2UgbnVtYmVyIGFzIGEgdW5pcXVlIGhhbmRsZSBmb3IgYSBkZXZpY2UuIEFuIGV4YW1wbGUgaXMgdGhlCi1maW5kIHByb2dyYW1tZSwgd2hpY2ggdXNlcyBkZXZpY2UgbnVtYmVycyB0byBkZXRlcm1pbmUgd2hldGhlcgotYW4gaW5vZGUgaXMgb24gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSB0aGFuIGFub3RoZXIgaW5vZGUuIFRoZSBkZXZpY2UKLW51bWJlciB1c2VkIGlzIHRoZSBvbmUgZm9yIHRoZSBibG9jayBkZXZpY2Ugd2hpY2ggYSBmaWxlc3lzdGVtIGlzCi11c2luZy4gVG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZSBwcm9ncmFtbWVzLCBibG9jawotZGV2aWNlcyB1c2luZyBkZXZmcyBuZWVkIHRvIGhhdmUgdW5pcXVlIGRldmljZSBudW1iZXJzIGFsbG9jYXRlZCB0bwotdGhlbS4gRnVydGhlcm1vcmUsIFBPU0lYIHNwZWNpZmllcyBkZXZpY2UgbnVtYmVycywgc28gc29tZSBraW5kIG9mCi1kZXZpY2UgbnVtYmVyIG5lZWRzIHRvIGJlIHByZXNlbnRlZCB0byB1c2Vyc3BhY2UuCi0KLVRoZSBzaW1wbGVzdCBvcHRpb24gKGVzcGVjaWFsbHkgd2hlbiBwb3J0aW5nIGRyaXZlcnMgdG8gZGV2ZnMpIGlzIHRvCi1rZWVwIHVzaW5nIHRoZSBvbGQgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuIERldmZzIHdpbGwgdGFrZSB3aGF0ZXZlcgotdmFsdWVzIGFyZSBnaXZlbiBmb3IgbWFqb3ImbWlub3IgYW5kIHBhc3MgdGhlbSBvbnRvIHVzZXJzcGFjZS4KLQotVGhpcyBkZXZpY2UgbnVtYmVyIGlzIGEgMTYgYml0IG51bWJlciwgc28gdGhpcyBsZWF2ZXMgcGxlbnR5IG9mIHNwYWNlCi1mb3IgbGFyZ2UgbnVtYmVycyBvZiBkaXNjcyBhbmQgcGFydGl0aW9ucy4gVGhpcyBzY2hlbWUgY2FuIGFsc28gYmUKLXVzZWQgZm9yIGNoYXJhY3RlciBkZXZpY2VzLCBpbiBwYXJ0aWN1bGFyIHRoZSB0dHkgZGV2aWNlcywgd2hpY2ggYXJlCi1jdXJyZW50bHkgbGltaXRlZCB0byAyNTYgcHNldWRvLXR0eXMgKHRoaXMgbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2YKLXNpbXVsdGFuZW91cyB4dGVybXMgYW5kIHJlbW90ZSBsb2dpbnMpLiAgTm90ZSB0aGF0IHRoZSBkZXZpY2UgbnVtYmVyCi1pcyBsaW1pdGVkIHRvIHRoZSByYW5nZSAzNjg2NC02MTQzOSAobWFqb3JzIDE0NC0yMzkpLCBpbiBvcmRlciB0bwotYXZvaWQgYW55IHBvc3NpYmxlIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIG9mZmljaWFsIGFsbG9jYXRpb25zLgotCi1QbGVhc2Ugbm90ZSB0aGF0IHVzaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBibG9jayBkZXZpY2UgbnVtYmVycyBtYXkKLWJyZWFrIHRoZSBORlMgZGFlbW9ucyAoYm90aCB1c2VyIGFuZCBrZXJuZWwgbW9kZSksIHdoaWNoIGV4cGVjdCBkZXZfdAotZm9yIGEgZ2l2ZW4gZGV2aWNlIHRvIGJlIGNvbnN0YW50IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHJlbW90ZSBtb3VudHMuCi0KLUEgZmluYWwgbm90ZSBvbiB0aGlzIHNjaGVtZTogc2luY2UgaXQgZG9lc24ndCBpbmNyZWFzZSB0aGUgc2l6ZSBvZgotZGV2aWNlIG51bWJlcnMsIHRoZXJlIGFyZSBubyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHVzZXJzcGFjZS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1RdWVzdGlvbnMgYW5kIEFuc3dlcnMKLQotCi1NYWtpbmcgdGhpbmdzIHdvcmsKLUFsdGVybmF0aXZlcyB0byBkZXZmcwotV2hhdCBJIGRvbid0IGxpa2UgYWJvdXQgZGV2ZnMKLUhvdyB0byByZXBvcnQgYnVncwotU3RyYW5nZSBrZXJuZWwgbWVzc2FnZXMKLUNvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZGV2ZnNkCi0KLQotCi1NYWtpbmcgdGhpbmdzIHdvcmsKLQotSGVyZSBhcmUgc29tZSBjb21tb24gcXVlc3Rpb25zIGFuZCBhbnN3ZXJzLgotCi0KLQotRGV2ZnNkIGRvZXNuJ3Qgc3RhcnQKLQotTWFrZSBzdXJlIHlvdSBoYXZlIGNvbXBpbGVkIGFuZCBpbnN0YWxsZWQgZGV2ZnNkCi1NYWtlIHN1cmUgZGV2ZnNkIGlzIGJlaW5nIHN0YXJ0ZWQgZnJvbSB5b3VyIGJvb3QKLXNjcmlwdHMKLU1ha2Ugc3VyZSB5b3UgaGF2ZSBjb25maWd1cmVkIHlvdXIga2VybmVsIHRvIGVuYWJsZSBkZXZmcyAoc2VlCi1iZWxvdykKLU1ha2Ugc3VyZSBkZXZmcyBpcyBtb3VudGVkIChzZWUgYmVsb3cpCi0KLQotRGV2ZnNkIGlzIG5vdCBtYW5hZ2luZyBhbGwgbXkgcGVybWlzc2lvbnMKLQotTWFrZSBzdXJlIHlvdSBhcmUgY2FwdHVyaW5nIHRoZSBhcHByb3ByaWF0ZSBldmVudHMuIEZvciBleGFtcGxlLAotZGV2aWNlIGVudHJpZXMgY3JlYXRlZCBieSB0aGUga2VybmVsIGdlbmVyYXRlIFJFR0lTVEVSIGV2ZW50cywKLWJ1dCB0aG9zZSBjcmVhdGVkIGJ5IGRldmZzZCBnZW5lcmF0ZSBDUkVBVEUgZXZlbnRzLgotCi0KLURldmZzZCBpcyBub3QgY2FwdHVyaW5nIGFsbCBSRUdJU1RFUiBldmVudHMKLQotU2VlIHRoZSBwcmV2aW91cyBlbnRyeTogeW91IG1heSBuZWVkIHRvIGNhcHR1cmUgQ1JFQVRFIGV2ZW50cy4KLQotCi1YIHdpbGwgbm90IHN0YXJ0Ci0KLU1ha2Ugc3VyZSB5b3UgZm9sbG93ZWQgdGhlIHN0ZXBzIAotb3V0bGluZWQgYWJvdmUuCi0KLQotV2h5IGRvbid0IG15IG5ldHdvcmsgZGV2aWNlcyBhcHBlYXIgaW4gZGV2ZnM/Ci0KLVRoaXMgaXMgbm90IGEgYnVnLiBOZXR3b3JrIGRldmljZXMgaGF2ZSB0aGVpciBvd24sIGNvbXBsZXRlbHkgc2VwYXJhdGUKLW5hbWVzcGFjZS4gVGhleSBhcmUgYWNjZXNzZWQgdmlhIHNvY2tldCgyKSBhbmQKLXNldHNvY2tvcHQoMikgY2FsbHMsIGFuZCB0aHVzIHJlcXVpcmUgbm8gZGV2aWNlIG5vZGVzLiBJIGhhdmUKLXJhaXNlZCB0aGUgcG9zc2liaWx0eSBvZiBtb3ZpbmcgbmV0d29yayBkZXZpY2VzIGludG8gdGhlIGRldmljZQotbmFtZXNwYWNlLCBidXQgaGF2ZSBoYWQgbm8gcmVzcG9uc2UuCi0KLQotSG93IGNhbiBJIHRlc3QgaWYgSSBoYXZlIGRldmZzIGNvbXBpbGVkIGludG8gbXkga2VybmVsPwotCi1BbGwgZmlsZXN5c3RlbXMgYnVpbHQtaW4gb3IgY3VycmVudGx5IGxvYWRlZCBhcmUgbGlzdGVkIGluCi0vcHJvYy9maWxlc3lzdGVtcy4gSWYgeW91IHNlZSBhIGRldmZzIGVudHJ5LCB0aGVuCi15b3Uga25vdyB0aGF0IGRldmZzIHdhcyBjb21waWxlZCBpbnRvIHlvdXIga2VybmVsLiBJZiB5b3UgaGF2ZQotY29ycmVjdGx5IGNvbmZpZ3VyZWQgYW5kIHJlYnVpbHQgeW91ciBrZXJuZWwsIHRoZW4gZGV2ZnMgd2lsbCBiZQotYnVpbHQtaW4uIElmIHlvdSB0aGluayB5b3UndmUgY29uZmlndXJlZCBpdCBpbiwgYnV0Ci0vcHJvYy9maWxlc3lzdGVtcyBkb2Vzbid0IHNob3cgaXQsIHlvdSd2ZSBtYWRlIGEgbWlzdGFrZS4KLUNvbW1vbiBtaXN0YWtlcyBpbmNsdWRlOgotCi1Vc2luZyBhIDIuMi54IGtlcm5lbCB3aXRob3V0IGFwcGx5aW5nIHRoZSBkZXZmcyBwYXRjaCAoaWYgeW91Ci1kb24ndCBrbm93IGhvdyB0byBwYXRjaCB5b3VyIGtlcm5lbCwgdXNlIDIuNC54IGluc3RlYWQsIGRvbid0IGJvdGhlcgotYXNraW5nIG1lIGhvdyB0byBwYXRjaCkKLUZvcmdldHRpbmcgdG8gc2V0IENPTkZJR19FWFBFUklNRU5UQUw9eQotRm9yZ2V0dGluZyB0byBzZXQgQ09ORklHX0RFVkZTX0ZTPXkKLUZvcmdldHRpbmcgdG8gc2V0IENPTkZJR19ERVZGU19NT1VOVD15IChpZiB5b3Ugd2FudCBkZXZmcwotdG8gYmUgYXV0b21hdGljYWxseSBtb3VudGVkIGF0IGJvb3QpCi1FZGl0aW5nIHlvdXIgLmNvbmZpZyBtYW51YWxseSwgaW5zdGVhZCBvZiB1c2luZyBtYWtlCi1jb25maWcgb3IgbWFrZSB4Y29uZmlnCi1Gb3JnZXR0aW5nIHRvIHJ1biBtYWtlIGRlcDsgbWFrZSBjbGVhbiBhZnRlciBjaGFuZ2luZyB0aGUKLWNvbmZpZ3VyYXRpb24gYW5kIGJlZm9yZSBjb21waWxpbmcKLUZvcmdldHRpbmcgdG8gY29tcGlsZSB5b3VyIGtlcm5lbCBhbmQgbW9kdWxlcwotRm9yZ2V0dGluZyB0byBpbnN0YWxsIHlvdXIga2VybmVsCi1Gb3JnZXR0aW5nIHRvIGluc3RhbGwgeW91ciBtb2R1bGVzCi0KLVBsZWFzZSBjaGVjayB0d2ljZSB0aGF0IHlvdSd2ZSBkb25lIGFsbCB0aGVzZSBzdGVwcyBiZWZvcmUgc2VuZGluZyBpbgotYSBidWcgcmVwb3J0LgotCi0KLQotSG93IGNhbiBJIHRlc3QgaWYgZGV2ZnMgaXMgbW91bnRlZCBvbiAvZGV2PwotCi1UaGUgZGV2aWNlIGZpbGVzeXN0ZW0gd2lsbCBhbHdheXMgY3JlYXRlIGFuIGVudHJ5IGNhbGxlZAotIi5kZXZmc2QiLCB3aGljaCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRhZW1vbi4gRXZlbgotaWYgdGhlIGRhZW1vbiBpcyBub3QgcnVubmluZywgdGhpcyBlbnRyeSB3aWxsIGV4aXN0LiBUZXN0aW5nIGZvciB0aGUKLWV4aXN0ZW5jZSBvZiB0aGlzIGVudHJ5IGlzIHRoZSBhcHByb3ZlZCBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgaWYgZGV2ZnMKLWlzIG1vdW50ZWQgb3Igbm90LiBOb3RlIHRoYXQgdGhlIHR5cGUgb2YgZW50cnkgKGkuZS4gcmVndWxhciBmaWxlLAotY2hhcmFjdGVyIGRldmljZSwgbmFtZWQgcGlwZSwgZXRjLikgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gT25seQotdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZW50cnkgc2hvdWxkIGJlIHJlbGllZCB1cG9uLgotCi0KLVdoZW4gSSBzdGFydCBkZXZmc2QsIEkgc2VlIHRoZSBlcnJvcjoKLUVycm9yIG9wZW5pbmcgZmlsZTogIi5kZXZmc2QiICAgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeT8KLQotVGhpcyBtZWFucyB0aGF0IGRldmZzIGlzIG5vdCBtb3VudGVkLiBNYWtlIHN1cmUgeW91IGhhdmUgZGV2ZnMgbW91bnRlZC4KLQotCi1Ib3cgZG8gSSBtb3VudCBkZXZmcz8KLQotRmlyc3QgbWFrZSBzdXJlIHlvdSBoYXZlIGRldmZzIGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwgKHNlZQotYWJvdmUpLiBUaGVuIHlvdSB3aWxsIGVpdGhlciBuZWVkIHRvOgotCi1zZXQgQ09ORklHX0RFVkZTX01PVU5UPXkgaW4geW91ciBrZXJuZWwgY29uZmlnCi1wYXNzIGRldmZzPW1vdW50IHRvIHlvdXIgYm9vdCBsb2FkZXIKLW1vdW50IGRldmZzIG1hbnVhbGx5IGluIHlvdXIgYm9vdCBzY3JpcHRzIHdpdGg6Ci1tb3VudCAtdCBub25lIGRldmZzIC9kZXYKLQotCi0KLU1vdW50IGJ5IHZvbHVtZSBMQUJFTD08bGFiZWw+IGRvZXNuJ3Qgd29yayB3aXRoCi1kZXZmcwotCi1Nb3N0IHByb2JhYmx5IHlvdSBhcmUgbm90IG1vdW50aW5nIGRldmZzIG9udG8gL2Rldi4gV2hhdAotaGFwcGVucyBpcyB0aGF0IGlmIHlvdXIga2VybmVsIGNvbmZpZyBoYXMgQ09ORklHX0RFVkZTX0ZTPXkKLXRoZW4gdGhlIGNvbnRlbnRzIG9mIC9wcm9jL3BhcnRpdGlvbnMgd2lsbCBoYXZlIHRoZSBkZXZmcwotbmFtZXMgKHN1Y2ggYXMgc2NzaS9ob3N0MC9idXMwL3RhcmdldDAvbHVuMC9wYXJ0MSkuIFRoZQotY29udGVudHMgb2YgL3Byb2MvcGFydGl0aW9ucyBhcmUgdXNlZCBieSBtb3VudCg4KSB3aGVuCi1tb3VudGluZyBieSB2b2x1bWUgbGFiZWwuIElmIGRldmZzIGlzIG5vdCBtb3VudGVkIG9uIC9kZXYsCi10aGVuIG1vdW50KDgpIHdpbGwgZmFpbCB0byBmaW5kIGRldmljZXMuIFRoZSBzb2x1dGlvbiBpcyB0bwotbWFrZSBzdXJlIHRoYXQgZGV2ZnMgaXMgbW91bnRlZCBvbiAvZGV2LiBTZWUgYWJvdmUgZm9yIGhvdyB0bwotZG8gdGhhdC4KLQotCi1JIGhhdmUgZXh0cmEgb3IgaW5jb3JyZWN0IGVudHJpZXMgaW4gL2RldgotCi1Zb3UgbWF5IGhhdmUgc3RhbGUgZW50cmllcyBpbiB5b3VyIGRldi1zdGF0ZSBhcmVhLiBDaGVjayBmb3IgYQotUkVTVE9SRSBjb25maWd1cmF0aW9uIGxpbmUgaW4geW91ciBkZXZmc2QgY29uZmlndXJhdGlvbgotKHR5cGljYWxseSAvZXRjL2RldmZzZC5jb25mKS4gSWYgeW91IGhhdmUgdGhpcyBsaW5lLCBjaGVjawotdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGZvciBzdGFsZSBlbnRyaWVzLiBSZW1vdmUKLWFueSBlbnRyaWVzIHdoaWNoIGFyZSBpbmNvcnJlY3QsIHRoZW4gcmVib290LgotCi0KLUkgZ2V0ICJVbmFibGUgdG8gb3BlbiBpbml0aWFsIGNvbnNvbGUiIG1lc3NhZ2VzIGF0IGJvb3QKLQotVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiB5b3UgZG9uJ3QgaGF2ZSBkZXZmcyBhdXRvbW91bnRlZCBvbnRvCi0vZGV2IGF0IGJvb3QgdGltZSwgYW5kIHRoZXJlIGlzIG5vIHZhbGlkCi0vZGV2L2NvbnNvbGUgZW50cnkgb24geW91ciByb290IGZpbGUtc3lzdGVtLiBDcmVhdGUgYSB2YWxpZAotL2Rldi9jb25zb2xlIGRldmljZSBub2RlLgotCi0KLQotCi0KLUFsdGVybmF0aXZlcyB0byBkZXZmcwotCi1JJ3ZlIGF0dGVtcHRlZCB0byBjb2xsYXRlIGFsbCB0aGUgYW50aS1kZXZmcyBwcm9wb3NhbHMgYW5kIGV4cGxhaW4KLXRoZWlyIGxpbWl0YXRpb25zLiBVbmRlciBjb25zdHJ1Y3Rpb24uCi0KLQotV2h5IG5vdCBqdXN0IHBhc3MgZGV2aWNlIGNyZWF0ZS9yZW1vdmUgZXZlbnRzIHRvIGEgZGFlbW9uPwotCi1IZXJlIHRoZSBzdWdnZXN0aW9uIGlzIHRvIGRldmVsb3AgYW4gQVBJIGluIHRoZSBrZXJuZWwgc28gdGhhdCBkZXZpY2VzCi1jYW4gcmVnaXN0ZXIgY3JlYXRlIGFuZCByZW1vdmUgZXZlbnRzLCBhbmQgYSBkYWVtb24gbGlzdGVucyBmb3IgdGhvc2UKLWV2ZW50cy4gVGhlIGRhZW1vbiB3b3VsZCB0aGVuIHBvcHVsYXRlL2RlcG9wdWxhdGUgL2RldiAod2hpY2gKLXJlc2lkZXMgb24gZGlzYykuCi0KLVRoaXMgaGFzIHNldmVyYWwgbGltaXRhdGlvbnM6Ci0KLQotaXQgb25seSB3b3JrcyBmb3IgbW9kdWxlcyBsb2FkZWQgYW5kIHVubG9hZGVkIChvciBkZXZpY2VzIGluc2VydGVkCi1hbmQgcmVtb3ZlZCkgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgZmluaXNoZWQgYm9vdGluZy4gV2l0aG91dCBhIGRhdGFiYXNlCi1vZiBldmVudHMsIHRoZXJlIGlzIG5vIHdheSB0aGUgZGFlbW9uIGNvdWxkIGZ1bGx5IHBvcHVsYXRlCi0vZGV2Ci0KLQotaWYgeW91IGFkZCBhIGRhdGFiYXNlIHRvIHRoaXMgc2NoZW1lLCB0aGUgcXVlc3Rpb24gaXMgdGhlbiBob3cgdG8KLXByZXNlbnQgdGhhdCBkYXRhYmFzZSB0byB1c2VyLXNwYWNlLiBJZiB5b3UgbWFrZSBpdCBhIGxpc3Qgb2Ygc3RyaW5ncwotd2l0aCBlbWJlZGRlZCBldmVudCBjb2RlcyB3aGljaCBhcmUgcGFzc2VkIHRocm91Z2ggYSBwaXBlIHRvIHRoZQotZGFlbW9uLCB0aGVuIHRoaXMgaXMgb25seSBvZiB1c2UgdG8gdGhlIGRhZW1vbi4gSSB3b3VsZCBhcmd1ZSB0aGF0IHRoZQotbmF0dXJhbCB3YXkgdG8gcHJlc2VudCB0aGlzIGRhdGEgaXMgdmlhIGEgZmlsZXN5c3RlbSAoc2luY2UgbWFueSBvZgotdGhlIGV2ZW50cyB3aWxsIGJlIG9mIGEgaGllcmFyY2hpY2FsIG5hdHVyZSksIHN1Y2ggYXMgZGV2ZnMuCi1QcmVzZW50aW5nIHRoZSBkYXRhIGFzIGEgZmlsZXN5c3RlbSBtYWtlcyBpdCBlYXN5IGZvciB0aGUgdXNlciB0byBzZWUKLXdoYXQgaXMgYXZhaWxhYmxlIGFuZCBhbHNvIG1ha2VzIGl0IGVhc3kgdG8gd3JpdGUgc2NyaXB0cyB0byBzY2FuIHRoZQotImRhdGFiYXNlIgotCi0KLXRoZSB0aWdodCBiaW5kaW5nIGJldHdlZW4gZGV2aWNlIG5vZGVzIGFuZCBkcml2ZXJzIGlzIG5vIGxvbmdlcgotcG9zc2libGUgKHJlcXVpcmluZyB0aGUgb3RoZXJ3aXNlIHBlcmZlY3RseSBhdm9pZGFibGUKLXRhYmxlIGxvb2t1cHMpCi0KLQoteW91IGNhbm5vdCBjYXRjaCBpbm9kZSBsb29rdXAgZXZlbnRzIG9uIC9kZXYgd2hpY2ggbWVhbnMKLXRoYXQgbW9kdWxlIGF1dG9sb2FkaW5nIHJlcXVpcmVzIGRldmljZSBub2RlcyB0byBiZSBjcmVhdGVkLiBUaGlzIGlzIGEKLXByb2JsZW0sIHBhcnRpY3VsYXJseSBmb3IgZHJpdmVycyB3aGVyZSBvbmx5IGEgZmV3IGlub2RlcyBhcmUgY3JlYXRlZAotZnJvbSBhIHBvdGVudGlhbGx5IGxhcmdlIHNldAotCi0KLXRoaXMgdGVjaG5pcXVlIGNhbid0IGJlIHVzZWQgd2hlbiB0aGUgcm9vdCBGUyBpcyBtb3VudGVkCi1yZWFkLW9ubHkKLQotCi0KLQotSnVzdCBpbXBsZW1lbnQgYSBiZXR0ZXIgc2NzaWRldgotCi1UaGlzIHN1Z2dlc3Rpb24gaW52b2x2ZXMgdGFraW5nIHRoZSBzY3NpZGV2IHByb2dyYW1tZSBhbmQKLWV4dGVuZGluZyBpdCB0byBzY2FuIGZvciBhbGwgZGV2aWNlcywgbm90IGp1c3QgU0NTSSBkZXZpY2VzLiBUaGUKLXNjc2lkZXYgcHJvZ3JhbW1lIHdvcmtzIGJ5IHNjYW5uaW5nIC9wcm9jL3Njc2kKLQotUHJvYmxlbXM6Ci0KLQotdGhlIGtlcm5lbCBkb2VzIG5vdCBjdXJyZW50bHkgcHJvdmlkZSBhIGxpc3Qgb2YgYWxsIGRldmljZXMKLWF2YWlsYWJsZS4gTm90IGFsbCBkcml2ZXJzIHJlZ2lzdGVyIGVudHJpZXMgaW4gL3Byb2Mgb3IKLWdlbmVyYXRlIGtlcm5lbCBtZXNzYWdlcwotCi0KLXRoZXJlIGlzIG5vIHVuaWZvcm0gbWVjaGFuaXNtIHRvIHJlZ2lzdGVyIGRldmljZXMgb3RoZXIgdGhhbiB0aGUKLWRldmZzIEFQSQotCi0KLWltcGxlbWVudGluZyBzdWNoIGFuIEFQSSBpcyB0aGVuIHRoZSBzYW1lIGFzIHRoZQotcHJvcG9zYWwgYWJvdmUKLQotCi0KLQotUHV0IC9kZXYgb24gYSByYW1kaXNjCi0KLVRoaXMgc3VnZ2VzdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBhIHJhbWRpc2MgYW5kIHBvcHVsYXRpbmcgaXQgd2l0aAotZGV2aWNlIG5vZGVzIGFuZCB0aGVuIG1vdW50aW5nIGl0IG92ZXIgL2Rldi4KLQotUHJvYmxlbXM6Ci0KLQotCi10aGlzIGRvZXNuJ3QgaGVscCB3aGVuIG1vdW50aW5nIHRoZSByb290IGZpbGVzeXN0ZW0sIHNpbmNlIHlvdQotc3RpbGwgbmVlZCBhIGRldmljZSBub2RlIHRvIGRvIHRoYXQKLQotCi1pZiB5b3Ugd2FudCB0byB1c2UgdGhpcyB0ZWNobmlxdWUgZm9yIHRoZSByb290IGRldmljZSBub2RlIGFzCi13ZWxsLCB5b3UgbmVlZCB0byB1c2UgaW5pdHJkLiBUaGlzIGNvbXBsaWNhdGVzIHRoZSBib290aW5nIHNlcXVlbmNlCi1hbmQgbWFrZXMgaXQgc2lnbmlmaWNhbnRseSBoYXJkZXIgdG8gYWRtaW5pc3RlciBhbmQgY29uZmlndXJlLiBUaGUKLWluaXRyZCBpcyBlc3NlbnRpYWxseSBvcGFxdWUsIHJvYmJpbmcgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG9mIGVhc3kKLWNvbmZpZ3VyYXRpb24KLQotCi1pbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRvIGNvcnJlY3RseSBwb3B1bGF0ZSB0aGUKLXJhbWRpc2MuIFNvIHdlIGNvbWUgYmFjayB0byB0aGUKLXByb3Bvc2FsIGFib3ZlIHRvICJzb2x2ZSIgdGhpcwotCi0KLWEgcmFtZGlzYy1iYXNlZCBzb2x1dGlvbiB3b3VsZCB0YWtlIG1vcmUga2VybmVsIG1lbW9yeSwgc2luY2UgdGhlCi1iYWNraW5nIHN0b3JlIHdvdWxkIGJlIChhdCBiZXN0KSBub3JtYWwgVkZTIGlub2RlcyBhbmQgZGVudHJpZXMsIHdoaWNoCi10YWtlIDI4NCBieXRlcyBhbmQgMTEyIGJ5dGVzLCByZXNwZWN0aXZlbHksIGZvciBlYWNoIGVudHJ5LiBDb21wYXJlCi10aGF0IHRvIDcyIGJ5dGVzIGZvciBkZXZmcwotCi0KLQotCi1EbyBub3RoaW5nOiB0aGVyZSdzIG5vIHByb2JsZW0KLQotU29tZXRpbWVzIHBlb3BsZSBjYW4gYmUgaGVhcmQgdG8gY2xhaW0gdGhhdCB0aGUgZXhpc3Rpbmcgc2NoZW1lIGlzCi1maW5lLiBUaGlzIGlzIHdoYXQgdGhleSdyZSBpZ25vcmluZzoKLQotCi1kZXZpY2UgbnVtYmVyIHNpemUgKDggYml0cyBlYWNoIGZvciBtYWpvciBhbmQgbWlub3IpIGlzIGEgcmVhbAotbGltaXRhdGlvbiwgYW5kIG11c3QgYmUgZml4ZWQgc29tZWhvdy4gU3lzdGVtcyB3aXRoIGxhcmdlIG51bWJlcnMgb2YKLVNDU0kgZGV2aWNlcywgZm9yIGV4YW1wbGUsIHdpbGwgY29udGludWUgdG8gY29uc3VtZSB0aGUgcmVtYWluaW5nCi11bmFsbG9jYXRlZCBtYWpvciBudW1iZXJzLiBVU0Igd2lsbCBhbHNvIG5lZWQgdG8gcHVzaCBiZXlvbmQgdGhlIDggYml0Ci1taW5vciBsaW1pdGF0aW9uCi0KLQotc2ltcGx5IGluY3JlYXNpbmcgdGhlIGRldmljZSBudW1iZXIgc2l6ZSBpcyBpbnN1ZmZpY2llbnQuIEFwYXJ0Ci1mcm9tIGNhdXNpbmcgYSBsb3Qgb2YgcGFpbiwgaXQgZG9lc24ndCBzb2x2ZSB0aGUgbWFuYWdlbWVudCBpc3N1ZXMKLW9mIGEgL2RldiB3aXRoIHRob3VzYW5kcyBvciBtb3JlIGRldmljZSBub2RlcwotCi0KLWlnbm9yaW5nIHRoZSBwcm9ibGVtIG9mIGEgaHVnZSAvZGV2IHdpbGwgbm90IG1ha2UgaXQgZ28KLWF3YXksIGFuZCBkaXNtaXNzZXMgdGhlIGxlZ2l0aW1hY3kgb2YgYSBsYXJnZSBudW1iZXIgb2YgcGVvcGxlIHdobwotd2FudCBhIGR5bmFtaWMgL2RldgotCi0KLXRoZSBzdGFuZGFyZCByZXNwb25zZSB0aGVuIGJlY29tZXM6ICJ3cml0ZSBhIGRldmljZSBtYW5hZ2VtZW50Ci1kYWVtb24iLCB3aGljaCBicmluZ3MgdXMgYmFjayB0byB0aGUKLXByb3Bvc2FsIGFib3ZlCi0KLQotCi0KLVdoYXQgSSBkb24ndCBsaWtlIGFib3V0IGRldmZzCi0KLUhlcmUgYXJlIHNvbWUgY29tbW9uIGNvbXBsYWludHMgYWJvdXQgZGV2ZnMsIGFuZCBzb21lIHN1Z2dlc3Rpb25zIGFuZAotc29sdXRpb25zIHRoYXQgbWF5IG1ha2UgaXQgbW9yZSBwYWxhdGFibGUgZm9yIHlvdS4gSSBjYW4ndCBwbGVhc2UKLWV2ZXJ5Ym9keSwgYnV0IEkgZG8gdHJ5IDotKQotCi1JIGhhdGUgdGhlIG5hbWluZyBzY2hlbWUKLQotRmlyc3QsIHJlbWVtYmVyIHRoYXQgbm8gbmFtaW5nIHNjaGVtZSB3aWxsIHBsZWFzZSBldmVyeWJvZHkuIFlvdSBoYXRlCi10aGUgc2NoZW1lLCBvdGhlcnMgbG92ZSBpdC4gV2hvJ3MgdG8gc2F5IHdobydzIHJpZ2h0IGFuZCB3aG8ncyB3cm9uZz8KLVVsdGltYXRlbHksIHRoZSBwZXJzb24gd2hvIHdyaXRlcyB0aGUgY29kZSBnZXRzIHRvIGNob29zZSwgYW5kIHdoYXQKLWV4aXN0cyBub3cgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgY2hvaWNlcyBtYWRlIGJ5IHRoZQotZGV2ZnMgYXV0aG9yIGFuZCB0aGUKLWtlcm5lbCBtYWludGFpbmVyIChMaW51cykuCi0KLUhvd2V2ZXIsIG5vdCBhbGwgaXMgbG9zdC4gSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIG5hbWluZwotc2NoZW1lLCBpdCBpcyBhIHNpbXBsZSBtYXR0ZXIgdG8gd3JpdGUgYSBzdGFuZGFsb25lIHNjcmlwdCwgaGFjawotZGV2ZnNkLCBvciB3cml0ZSBhIHNjcmlwdCBjYWxsZWQgYnkgZGV2ZnNkLiBZb3UgY2FuIGNyZWF0ZSB3aGF0ZXZlcgotbmFtaW5nIHNjaGVtZSB5b3UgbGlrZS4KLQotRnVydGhlciwgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGRldmZzIG5hbWluZyBzY2hlbWUKLWZyb20gL2RldiwgeW91IGNhbiBtb3VudCBkZXZmcyBlbHNld2hlcmUgKHNheQotL2RldmZzKSBhbmQgcG9wdWxhdGUgL2RldiB3aXRoIGxpbmtzIGludG8KLS9kZXZmcy4gVGhpcyBwb3B1bGF0aW9uIGNhbiBiZSBhdXRvbWF0ZWQgdXNpbmcgZGV2ZnNkIGlmIHlvdQotd2lzaC4KLQotWW91IGNhbiBldmVuIHVzZSB0aGUgVkZTIGJpbmRpbmcgZmFjaWxpdHkgdG8gbWFrZSB0aGUgbGlua3MsIHJhdGhlcgotdGhhbiB1c2luZyBzeW1ib2xpYyBsaW5rcy4gVGhpcyB3YXksIHlvdSBkb24ndCBldmVuIGhhdmUgdG8gc2VlIHRoZQotImRlc3RpbmF0aW9uIiBvZiB0aGVzZSBzeW1ib2xpYyBsaW5rcy4KLQotRGV2ZnMgcHV0cyBwb2xpY3kgaW50byB0aGUga2VybmVsCi0KLVRoZXJlJ3MgYWxyZWFkeSBwb2xpY3kgaW4gdGhlIGtlcm5lbC4gRGV2aWNlIG51bWJlcnMgYXJlIGluIGZhY3QKLXBvbGljeSAod2h5IHNob3VsZCB0aGUga2VybmVsIGRpY3RhdGUgd2hhdCBkZXZpY2UgbnVtYmVycyBJIHVzZT8pLgotRmFjZSBpdCwgc29tZSBwb2xpY3kgaGFzIHRvIGJlIGluIHRoZSBrZXJuZWwuIFRoZSByZWFsIGRpZmZlcmVuY2UKLWJldHdlZW4gZGV2aWNlIG5hbWVzIGFzIHBvbGljeSBhbmQgZGV2aWNlIG51bWJlcnMgYXMgcG9saWN5IGlzIHRoYXQKLW5vIG9uZSB3aWxsIHVzZSBkZXZpY2UgbnVtYmVycyBkaXJlY3RseSwgYmVjYXVzZSBkZXZpY2UKLW51bWJlcnMgYXJlIGRldm9pZCBvZiBtZWFuaW5nIHRvIGh1bWFucyBhbmQgYXJlIHVnbHkuIEF0IGxlYXN0IHdpdGgKLXRoZSBkZXZmcyBkZXZpY2UgbmFtZXMsIChldmVuIHRob3VnaCB5b3UgY2FuIGFkZCB5b3VyIG93biBuYW1pbmcKLXNjaGVtZSkgc29tZSBwZW9wbGUgd2lsbCB1c2UgdGhlIGRldmZzLXN1cHBsaWVkIG5hbWVzIGRpcmVjdGx5LiBUaGlzCi1vZmZlbmRzIHNvbWUgcGVvcGxlIDotKQotCi1EZXZmcyBpcyBibG9hdHdhcmUKLQotVGhpcyBpcyBub3QgZXZlbiByZW1vdGVseSB0cnVlLiBBcyBzaG93biBhYm92ZSwKLWJvdGggY29kZSBhbmQgZGF0YSBzaXplIGFyZSBxdWl0ZSBtb2Rlc3QuCi0KLQotSG93IHRvIHJlcG9ydCBidWdzCi0KLUlmIHlvdSBoYXZlIChvciB0aGluayB5b3UgaGF2ZSkgYSBidWcgd2l0aCBkZXZmcywgcGxlYXNlIGZvbGxvdyB0aGUKLXN0ZXBzIGJlbG93OgotCi0KLQotbWFrZSBzdXJlIHlvdSBoYXZlIGVuYWJsZWQgZGVidWdnaW5nIG91dHB1dCB3aGVuIGNvbmZpZ3VyaW5nIHlvdXIKLWtlcm5lbC4gWW91IHdpbGwgbmVlZCB0byBzZXQgKGF0IGxlYXN0KSB0aGUgZm9sbG93aW5nIGNvbmZpZyBvcHRpb25zOgotCi1DT05GSUdfREVWRlNfREVCVUc9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfU0xBQj15Ci0KLQotCi1wbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBsYXRlc3QgZGV2ZnMgcGF0Y2hlcyBhcHBsaWVkLiBUaGUKLWxhdGVzdCBrZXJuZWwgdmVyc2lvbiBtaWdodCBub3QgaGF2ZSB0aGUgbGF0ZXN0IGRldmZzIHBhdGNoZXMgYXBwbGllZAoteWV0IChMaW51cyBpcyB2ZXJ5IGJ1c3kpCi0KLQotc2F2ZSBhIGNvcHkgb2YgeW91ciBjb21wbGV0ZSBrZXJuZWwgbG9ncyAocHJlZmVyYWJseSBieQotdXNpbmcgdGhlIGRtZXNnIHByb2dyYW1tZSkgZm9yIGxhdGVyIGluY2x1c2lvbiBpbiB5b3VyIGJ1ZwotcmVwb3J0LiBZb3UgbWF5IG5lZWQgdG8gdXNlIHRoZSAtcyBzd2l0Y2ggdG8gaW5jcmVhc2UgdGhlCi1pbnRlcm5hbCBidWZmZXIgc2l6ZSBzbyB5b3UgY2FuIGNhcHR1cmUgYWxsIHRoZSBib290IG1lc3NhZ2VzLgotRG9uJ3QgZWRpdCBvciB0cmltIHRoZSBkbWVzZyBvdXRwdXQKLQotCi0KLQotdHJ5IGJvb3Rpbmcgd2l0aCBkZXZmcz1kYWxsIHBhc3NlZCB0byB0aGUga2VybmVsIGJvb3QKLWNvbW1hbmQgbGluZSAocmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiB5b3VyIGJvb3Rsb2FkZXIgb24gaG93IHRvIGRvCi10aGlzKSwgYW5kIHNhdmUgdGhlIHJlc3VsdCB0byBhIGZpbGUuIFRoaXMgbWF5IGJlIHF1aXRlIHZlcmJvc2UsIGFuZAotaXQgbWF5IG92ZXJmbG93IHRoZSBtZXNzYWdlcyBidWZmZXIsIGJ1dCB0cnkgdG8gZ2V0IGFzIG11Y2ggb2YgaXQgYXMKLXlvdSBjYW4KLQotCi1zZW5kIGEgY29weSBvZiB5b3VyIGRldmZzZCBjb25maWd1cmF0aW9uIGZpbGUocykKLQotc2VuZCB0aGUgYnVnIHJlcG9ydCB0byBtZSBmaXJzdC4KLURvbid0IGV4cGVjdCB0aGF0IEkgd2lsbCBzZWUgaXQgaWYgeW91IHBvc3QgaXQgdG8gdGhlIGxpbnV4LWtlcm5lbAotbWFpbGluZyBsaXN0LiBJbmNsdWRlIGFsbCB0aGUgaW5mb3JtYXRpb24gbGlzdGVkIGFib3ZlLCBwbHVzCi1hbnl0aGluZyBlbHNlIHRoYXQgeW91IHRoaW5rIG1pZ2h0IGJlIHJlbGV2YW50LiBQdXQgdGhlIHN0cmluZwotZGV2ZnMgc29tZXdoZXJlIGluIHRoZSBzdWJqZWN0IGxpbmUsIHNvIG15IG1haWwgZmlsdGVycyBtYXJrCi1pdCBhcyB1cmdlbnQKLQotCi0KLQotSGVyZSBpcyBhIGdlbmVyYWwgZ3VpZGUgb24gaG93IHRvIGFzayBxdWVzdGlvbnMgaW4gYSB3YXkgdGhhdCBncmVhdGx5Ci1pbXByb3ZlcyB5b3VyIGNoYW5jZXMgb2YgZ2V0dGluZyBhIHJlcGx5OgotCi1odHRwOi8vd3d3LnR1eGVkby5vcmcvfmVzci9mYXFzL3NtYXJ0LXF1ZXN0aW9ucy5odG1sLiBJZiB5b3UgaGF2ZQotYSBidWcgdG8gcmVwb3J0LCB5b3Ugc2hvdWxkIGFsc28gcmVhZAotCi1odHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2J1Z3MuaHRtbC4KLQotCi1TdHJhbmdlIGtlcm5lbCBtZXNzYWdlcwotCi1Zb3UgbWF5IHNlZSBkZXZmcy1yZWxhdGVkIG1lc3NhZ2VzIGluIHlvdXIga2VybmVsIGxvZ3MuIEJlbG93IGFyZSBzb21lCi1tZXNzYWdlcyBhbmQgd2hhdCB0aGV5IG1lYW4gKGFuZCB3aGF0IHlvdSBzaG91bGQgZG8gYWJvdXQgdGhlbSwgaWYKLWFueXRoaW5nKS4KLQotCi0KLWRldmZzX3JlZ2lzdGVyKGZyZWQpOiBjb3VsZCBub3QgYXBwZW5kIHRvIHBhcmVudCwgZXJyOiAtMTcKLQotWW91IG5lZWQgdG8gY2hlY2sgd2hhdCB0aGUgZXJyb3IgY29kZSBtZWFucywgYnV0IHVzdWFsbHkgMTcgbWVhbnMKLUVFWElTVC4gVGhpcyBtZWFucyB0aGF0IGEgZHJpdmVyIGF0dGVtcHRlZCB0byBjcmVhdGUgYW4gZW50cnkKLWZyZWQgaW4gYSBkaXJlY3RvcnksIGJ1dCB0aGVyZSBhbHJlYWR5IHdhcyBhbiBlbnRyeSB3aXRoIHRoYXQKLW5hbWUuIFRoaXMgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGZsYXdlZCBib290IHNjcmlwdHMgd2hpY2ggdW50YXIgYSBidW5jaAotb2YgaW5vZGVzIGludG8gL2RldiwgYXMgYSB3YXkgdG8gcmVzdG9yZSBwZXJtaXNzaW9ucy4gVGhpcwotbWVzc2FnZSBpcyBoYXJtbGVzcywgYXMgdGhlIGRldmljZSBub2RlcyB3aWxsIHN0aWxsCi1wcm92aWRlIGFjY2VzcyB0byB0aGUgZHJpdmVyICh1bmxlc3MgeW91IHVzZSB0aGUgZGV2ZnM9b25seQotYm9vdCBvcHRpb24sIHdoaWNoIGlzIG9ubHkgZm9yIGRlZGljYXRlZCBzb3VsczotKS4gSWYgeW91IHdhbnQgdG8gZ2V0Ci1yaWQgb2YgdGhlc2UgYW5ub3lpbmcgbWVzc2FnZXMsIHVwZ3JhZGUgdG8gZGV2ZnNkLXYxLjMuMjAgYW5kIHVzZSB0aGUKLXJlY29tbWVuZGVkIFJFU1RPUkUgZGlyZWN0aXZlIHRvIHJlc3RvcmUgcGVybWlzc2lvbnMuCi0KLQotZGV2ZnNfbWtfZGlyKGJpbGwpOiB1c2luZyBvbGQgZW50cnkgaW4gZGlyOiBjMTgwODcyNCAiIgotCi1UaGlzIGlzIHNpbWlsYXIgdG8gdGhlIG1lc3NhZ2UgYWJvdmUsIGV4Y2VwdCB0aGF0IGEgZHJpdmVyIGF0dGVtcHRlZAotdG8gY3JlYXRlIGEgZGlyZWN0b3J5IG5hbWVkIGJpbGwsIGFuZCB0aGUgcGFyZW50IGRpcmVjdG9yeQotaGFzIGFuIGVudHJ5IHdpdGggdGhlIHNhbWUgbmFtZS4gSW4gdGhpcyBjYXNlLCB0byBlbnN1cmUgdGhhdCBkcml2ZXJzCi1jb250aW51ZSB0byB3b3JrIHByb3Blcmx5LCB0aGUgb2xkIGVudHJ5IGlzIHJlLXVzZWQgYW5kIGdpdmVuIHRvIHRoZQotZHJpdmVyLiBJbiAyLjUga2VybmVscywgdGhlIGRyaXZlciBpcyBnaXZlbiBhIE5VTEwgZW50cnksIGFuZCB0aHVzLAotdW5kZXIgcmFyZSBjaXJjdW1zdGFuY2VzLCBtYXkgbm90IGNyZWF0ZSB0aGUgcmVxdWlyZSBkZXZpY2Ugbm9kZXMuCi1UaGUgc29sdXRpb24gaXMgdGhlIHNhbWUgYXMgYWJvdmUuCi0KLQotCi0KLQotQ29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBkZXZmc2QKLQotVXN1YWxseSwgeW91IGNhbiBjb21waWxlIGRldmZzZCBqdXN0IGJ5IHR5cGluZyBpbgotbWFrZSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSwgZm9sbG93ZWQgYnkgYSBtYWtlCi1pbnN0YWxsIChhcyByb290KS4gU29tZXRpbWVzLCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMsIHBhcnRpY3VsYXJseQotb24gYnJva2VuIGNvbmZpZ3VyYXRpb25zLgotCi0KLQotZXJyb3IgbWVzc2FnZXMgcmVsYXRpbmcgdG8gREVWRlNEX05PVElGWV9ERUxFVEUKLQotVGhpcyBoYXBwZW5lZCBiZWNhdXNlIHlvdSBoYXZlIGFuIGFuY2llbnQgc2V0IG9mIGtlcm5lbCBoZWFkZXJzCi1pbnN0YWxsZWQgaW4gL3Vzci9pbmNsdWRlL2xpbnV4IG9yIC91c3Ivc3JjL2xpbnV4LgotSW5zdGFsbCBrZXJuZWwgMi40LjEwIG9yIGxhdGVyLiBZb3UgbWF5IG5lZWQgdG8gcGFzcyB0aGUKLUtFUk5FTF9ESVIgdmFyaWFibGUgdG8gbWFrZSAoaWYgeW91IGRpZCBub3QgaW5zdGFsbAotdGhlIG5ldyBrZXJuZWwgc291cmNlcyBhcyAvdXNyL3NyYy9saW51eCksIG9yIHlvdSBtYXkgY29weQotdGhlIGRldmZzX2ZzLmggZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGludG8KLS91c3IvaW5jbHVkZS9saW51eC4KLQotCi0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1PdGhlciByZXNvdXJjZXMKLQotCi0KLURvdWdsYXMgR2lsYmVydCBoYXMgd3JpdHRlbiBhIHVzZWZ1bCBkb2N1bWVudCBhdAotCi1odHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvZGV2ZnNfc2NzaS5odG1sIHdoaWNoCi1leHBsb3JlcyB0aGUgU0NTSSBzdWJzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkZXZmcwotCi0KLURvdWdsYXMgR2lsYmVydCBoYXMgd3JpdHRlbiBhbm90aGVyIHVzZWZ1bCBkb2N1bWVudCBhdAotCi1odHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2NzaS9TQ1NJLTIuNC1IT1dUTy8gd2hpY2gKLWRpc2N1c3NlcyB0aGUgTGludXggU0NTSSBzdWJzeXN0ZW0gaW4gMi40LgotCi0KLUpvaGFubmVzIEVyZGZlbHQgaGFzIHN0YXJ0ZWQgYSBkaXNjdXNzaW9uIHBhcGVyIG9uIExpbnV4IGFuZAotaG90LXN3YXAgZGV2aWNlcywgZGVzY3JpYmluZyB3aGF0IHRoZSByZXF1aXJlbWVudHMgYXJlIGZvciBhIHNjYWxhYmxlCi1zb2x1dGlvbiBhbmQgaG93IGFuZCB3aHkgaGUncyB1c2VkIGRldmZzK2RldmZzZC4gTm90ZSB0aGF0IHRoaXMgaXMgYW4KLWVhcmx5IGRyYWZ0IG9ubHksIGF2YWlsYWJsZSBpbiBwbGFpbiB0ZXh0IGZvcm0gYXQ6Ci0KLWh0dHA6Ly9qb2hhbm5lcy5lcmRmZWx0LmNvbS9ob3Rzd2FwLnR4dC4KLUpvaGFubmVzIGhhcyBwcm9taXNlZCBhIEhUTUwgdmVyc2lvbiB3aWxsIGZvbGxvdy4KLQotCi1JIHByZXNlbnRlZCBhbiBpbnZpdGVkIAotcGFwZXIKLWF0IHRoZQotCi0ybmQgQW5udWFsIFN0b3JhZ2UgTWFuYWdlbWVudCBXb3Jrc2hvcCBoZWxkIGluIE1pYW1pYSwgRmxvcmlkYSwKLVUuUy5BLiBpbiBPY3RvYmVyIDIwMDAuCi0KLQotCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotVHJhbnNsYXRpb25zIG9mIHRoaXMgZG9jdW1lbnQKLQotVGhpcyBkb2N1bWVudCBoYXMgYmVlbiB0cmFuc2xhdGVkIGludG8gb3RoZXIgbGFuZ3VhZ2VzLgotCi0KLQotCi1UaGUgZG9jdW1lbnQgbWFzdGVyIChpbiBFbmdsaXNoKSBieSByZ29vY2hAYXRuZi5jc2lyby5hdSBpcwotYXZhaWxhYmxlIGF0Ci0KLWh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvZGV2ZnMuaHRtbAotCi0KLQotQSBLb3JlYW4gdHJhbnNsYXRpb24gYnkgdmlhdG9yaXNAbm93bnVyaS5uZXQgaXMgYXZhaWxhYmxlIGF0Ci0KLWh0dHA6Ly95b3VyLmRlc3RpbnkucGUua3IvZGV2ZnMvZGV2ZnMuaHRtbAotCi0KLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9zdCBmbGFncyBjb3VydGVzeSBvZiBJVEEncyAKLUZsYWdzIG9mIEFsbCBDb3VudHJpZXMKLXVzZWQgd2l0aCBwZXJtaXNzaW9uLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvVG9EbyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvVG9EbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNWE4Zi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1RvRG8KKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0JCURldmljZSBGaWxlIFN5c3RlbSAoZGV2ZnMpIFRvRG8gTGlzdAotCi0JCVJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCi0JCQkgICAgICAzLUpVTC0yMDAwCi0KLVRoaXMgaXMgYSBsaXN0IG9mIHRoaW5ncyB0byBiZSBkb25lIGZvciBiZXR0ZXIgZGV2ZnMgc3VwcG9ydCBpbiB0aGUKLUxpbnV4IGtlcm5lbC4gSWYgeW91J2QgbGlrZSB0byBjb250cmlidXRlIHRvIHRoZSBkZXZmcywgcGxlYXNlIGhhdmUgYQotbG9vayBhdCB0aGlzIGxpc3QgZm9yIGFueXRoaW5nIHRoYXQgaXMgdW5hbGxvY2F0ZWQuIEFsc28sIGlmIHRoZXJlIGFyZQotaXRlbXMgbWlzc2luZyAoc3VyZWx5KSwgcGxlYXNlIGNvbnRhY3QgbWUgc28gSSBjYW4gYWRkIHRoZW0gdG8gdGhlCi1saXN0IChwcmVmZXJhYmx5IHdpdGggeW91ciBuYW1lIGF0dGFjaGVkIHRvIHRoZW06LSkuCi0KLQotLSA+MjU2IHB0eXMKLSAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgotCi0tIEFtaWdhIGZsb3BweSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svYW1pZmxvcC5jKQotCi0tIEF0YXJpIGZsb3BweSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svYXRhZmxvcC5jKQotCi0tIFNXSU0zIChTdXBlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lIDMpIGZsb3BweSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svc3dpbTMuYykKLQotLSBBbWlnYSBab3Jyb0lJIHJhbWRpc2MgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3oycmFtLmMpCi0KLS0gUGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00gKGRyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jKQotCi0tIFBhcmFsbGVsIHBvcnQgQVRBUEkgZmxvcHB5IChkcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jKQotCi0tIEFQMTAwMCBibG9jayBkcml2ZXIgKGRyaXZlcnMvYXAxMDAwL2FwLmMsIGRyaXZlcnMvYXAxMDAwL2Rkdi5jKQotCi0tIEFyY2hpbWVkZXMgZmxvcHB5IChkcml2ZXJzL2Fjb3JuL2Jsb2NrL2ZkMTc3Mi5jKQotCi0tIE1GTSBoYXJkIGRyaXZlIChkcml2ZXJzL2Fjb3JuL2Jsb2NrL21mbWhkLmMpCi0KLS0gSTJPIGJsb2NrIGRldmljZSAoZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYykKLQotLSBTVC1SQU0gZGV2aWNlIChhcmNoL202OGsvYXRhcmkvc3RyYW0uYykKLQotLSBSYXcgZGV2aWNlcwotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL2Jvb3Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvYm9vdC1vcHRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjNkMzNiLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvYm9vdC1vcHRpb25zCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyogLSotIGF1dG8tZmlsbCAtKi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JCURldmljZSBGaWxlIFN5c3RlbSAoZGV2ZnMpIEJvb3QgT3B0aW9ucwotCi0JCVJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCi0JCQkgICAgICAxOC1BVUctMjAwMQotCi0KLVdoZW4gQ09ORklHX0RFVkZTX0RFQlVHIGlzIGVuYWJsZWQsIHlvdSBjYW4gcGFzcyBzZXZlcmFsIGJvb3Qgb3B0aW9ucwotdG8gdGhlIGtlcm5lbCB0byBkZWJ1ZyBkZXZmcy4gVGhlIGJvb3Qgb3B0aW9ucyBhcmUgcHJlZml4ZWQgYnkKLSJkZXZmcz0iLCBhbmQgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMuIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQuIFRoZQotc3ludGF4IGxvb2tzIGxpa2UgdGhpczoKLQotZGV2ZnM9PG9wdGlvbjE+LDxvcHRpb24yPiw8b3B0aW9uMz4KLQotYW5kIHNvIG9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0byB0dXJuIG9uIGRlYnVnZ2luZyBmb3IgbW9kdWxlCi1sb2FkIHJlcXVlc3RzIGFuZCBkZXZpY2UgcmVnaXN0cmF0aW9uLCB5b3Ugd291bGQgZG86Ci0KLWRldmZzPWRtb2QsZHJlZwotCi1Zb3UgbWF5IHByZWZpeCAibm8iIHRvIGFueSBvcHRpb24uIFRoaXMgd2lsbCBpbnZlcnQgdGhlIG9wdGlvbi4KLQotCi1EZWJ1Z2dpbmcgT3B0aW9ucwotPT09PT09PT09PT09PT09PT0KLQotVGhlc2UgcmVxdWlyZXMgQ09ORklHX0RFVkZTX0RFQlVHIHRvIGJlIGVuYWJsZWQuCi1Ob3RlIHRoYXQgYWxsIGRlYnVnZ2luZyBvcHRpb25zIGhhdmUgJ2QnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIEJ5Ci1kZWZhdWx0IGFsbCBvcHRpb25zIGFyZSBvZmYuIEFsbCBkZWJ1Z2dpbmcgb3V0cHV0IGlzIHNlbnQgdG8gdGhlCi1rZXJuZWwgbG9ncy4gVGhlIGRlYnVnZ2luZyBvcHRpb25zIGRvIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgZGV2ZnMKLXZlcnNpb24gbWVzc2FnZSBhcHBlYXJzIChqdXN0IHByaW9yIHRvIHRoZSByb290IGZpbGVzeXN0ZW0gYmVpbmcKLW1vdW50ZWQpLgotCi1UaGVzZSBhcmUgdGhlIG9wdGlvbnM6Ci0KLWRtb2QJCXByaW50IG1vZHVsZSBsb2FkIHJlcXVlc3RzIHRvIDxyZXF1ZXN0X21vZHVsZT4KLQotZHJlZwkJcHJpbnQgZGV2aWNlIHJlZ2lzdGVyIHJlcXVlc3RzIHRvIDxkZXZmc19yZWdpc3Rlcj4KLQotZHVucmVnCQlwcmludCBkZXZpY2UgdW5yZWdpc3RlciByZXF1ZXN0cyB0byA8ZGV2ZnNfdW5yZWdpc3Rlcj4KLQotZGNoYW5nZQkJcHJpbnQgZGV2aWNlIGNoYW5nZSByZXF1ZXN0cyB0byA8ZGV2ZnNfc2V0X2ZsYWdzPgotCi1kaWxvb2t1cAlwcmludCBpbm9kZSBsb29rdXAgcmVxdWVzdHMKLQotZGlnZXQJCXByaW50IFZGUyBpbm9kZSBhbGxvY2F0aW9ucwotCi1kaXVubGluawlwcmludCBpbm9kZSB1bmxpbmtzCi0KLWRpY2hhbmdlCXByaW50IGlub2RlIGNoYW5nZXMKLQotZGlta25vZAkJcHJpbnQgY2FsbHMgdG8gbWtub2QoMikKLQotZGFsbAkJc29tZSBkZWJ1Z2dpbmcgdHVybmVkIG9uCi0KLQotT3RoZXIgT3B0aW9ucwotPT09PT09PT09PT09PQotCi1UaGVzZSBjb250cm9sIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBkZXZmcy4gVGhlIG9wdGlvbnMgYXJlOgotCi1tb3VudAkJbW91bnQgZGV2ZnMgb250byAvZGV2IGF0IGJvb3QgdGltZQotCi1vbmx5CQlkaXNhYmxlIG5vbi1kZXZmcyBkZXZpY2Ugbm9kZXMgZm9yIGRldmZzLWNhcGFibGUgZHJpdmVycwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0CmluZGV4IDdkZTFjODAuLmIxYjY0NDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5pdHJkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2luaXRyZC50eHQKQEAgLTY3LDggKzY3LDcgQEAKICAgICBhcyB0aGUgbGFzdCBwcm9jZXNzIGhhcyBjbG9zZWQgaXQsIGFsbCBkYXRhIGlzIGZyZWVkIGFuZCAvZGV2L2luaXRyZAogICAgIGNhbid0IGJlIG9wZW5lZCBhbnltb3JlLgogCi0gIHJvb3Q9L2Rldi9yYW0wICAgKHdpdGhvdXQgZGV2ZnMpCi0gIHJvb3Q9L2Rldi9yZC8wICAgKHdpdGggZGV2ZnMpCisgIHJvb3Q9L2Rldi9yYW0wCiAKICAgICBpbml0cmQgaXMgbW91bnRlZCBhcyByb290LCBhbmQgdGhlIG5vcm1hbCBib290IHByb2NlZHVyZSBpcyBmb2xsb3dlZCwKICAgICB3aXRoIHRoZSBSQU0gZGlzayBzdGlsbCBtb3VudGVkIGFzIHJvb3QuCkBAIC05MCw4ICs4OSw3IEBACiBwcm9jZWR1cmUgc2hvdWxkIGNyZWF0ZSB0aGUgL2luaXRyZCBkaXJlY3RvcnkuCiAKIElmIGluaXRyZCB3aWxsIG5vdCBiZSBtb3VudGVkIGluIHNvbWUgY2FzZXMsIGl0cyBjb250ZW50IGlzIHN0aWxsCi1hY2Nlc3NpYmxlIGlmIHRoZSBmb2xsb3dpbmcgZGV2aWNlIGhhcyBiZWVuIGNyZWF0ZWQgKG5vdGUgdGhhdCB0aGlzCi1kb2VzIG5vdCB3b3JrIGlmIHVzaW5nIGRldmZzKToKK2FjY2Vzc2libGUgaWYgdGhlIGZvbGxvd2luZyBkZXZpY2UgaGFzIGJlZW4gY3JlYXRlZDoKIAogIyBta25vZCAvZGV2L2luaXRyZCBiIDEgMjUwIAogIyBjaG1vZCA0MDAgL2Rldi9pbml0cmQKQEAgLTExOSw4ICsxMTcsNyBAQAogICAgIChpZiBzcGFjZSBpcyBjcml0aWNhbCwgeW91IG1heSB3YW50IHRvIHVzZSB0aGUgTWluaXggRlMgaW5zdGVhZCBvZiBFeHQyKQogIDMpIG1vdW50IHRoZSBmaWxlIHN5c3RlbSwgZS5nLgogICAgICMgbW91bnQgLXQgZXh0MiAtbyBsb29wIGluaXRyZCAvbW50Ci0gNCkgY3JlYXRlIHRoZSBjb25zb2xlIGRldmljZSAobm90IG5lY2Vzc2FyeSBpZiB1c2luZyBkZXZmcywgYnV0IGl0IGNhbid0Ci0gICAgaHVydCB0byBkbyBpdCBhbnl3YXkpOgorIDQpIGNyZWF0ZSB0aGUgY29uc29sZSBkZXZpY2U6CiAgICAgIyBta2RpciAvbW50L2RldgogICAgICMgbWtub2QgL21udC9kZXYvY29uc29sZSBjIDUgMQogIDUpIGNvcHkgYWxsIHRoZSBmaWxlcyB0aGF0IGFyZSBuZWVkZWQgdG8gcHJvcGVybHkgdXNlIHRoZSBpbml0cmQKQEAgLTE1MiwxMiArMTQ5LDcgQEAKIAogICByb290PS9kZXYvcmFtMCBpbml0PS9saW51eHJjIHJ3CiAKLWlmIG5vdCB1c2luZyBkZXZmcywgb3IKLQotICByb290PS9kZXYvcmQvMCBpbml0PS9saW51eHJjIHJ3Ci0KLWlmIHVzaW5nIGRldmZzLiAocncgaXMgb25seSBuZWNlc3NhcnkgaWYgd3JpdGluZyB0byB0aGUgaW5pdHJkIGZpbGUKLXN5c3RlbS4pCisocncgaXMgb25seSBuZWNlc3NhcnkgaWYgd3JpdGluZyB0byB0aGUgaW5pdHJkIGZpbGUgc3lzdGVtLikKIAogV2l0aCBMT0FETElOLCB5b3Ugc2ltcGx5IGV4ZWN1dGUKIApAQCAtMjE3LDkgKzIwOSw5IEBACiAjIGV4ZWMgY2hyb290IC4gd2hhdC1mb2xsb3dzIDxkZXYvY29uc29sZSA+ZGV2L2NvbnNvbGUgMj4mMQogCiBXaGVyZSB3aGF0LWZvbGxvd3MgaXMgYSBwcm9ncmFtIHVuZGVyIHRoZSBuZXcgcm9vdCwgZS5nLiAvc2Jpbi9pbml0Ci1JZiB0aGUgbmV3IHJvb3QgZmlsZSBzeXN0ZW0gd2lsbCBiZSB1c2VkIHdpdGggZGV2ZnMgYW5kIGhhcyBubyB2YWxpZAotL2RldiBkaXJlY3RvcnksIGRldmZzIG11c3QgYmUgbW91bnRlZCBiZWZvcmUgaW52b2tpbmcgY2hyb290IGluIG9yZGVyIHRvCi1wcm92aWRlIC9kZXYvY29uc29sZS4KK0lmIHRoZSBuZXcgcm9vdCBmaWxlIHN5c3RlbSB3aWxsIGJlIHVzZWQgd2l0aCB1ZGV2IGFuZCBoYXMgbm8gdmFsaWQKKy9kZXYgZGlyZWN0b3J5LCB1ZGV2IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGludm9raW5nIGNocm9vdCBpbiBvcmRlcgordG8gcHJvdmlkZSAvZGV2L2NvbnNvbGUuCiAKIE5vdGU6IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgcGl2b3Rfcm9vdCBtYXkgY2hhbmdlIHdpdGggdGltZS4gSW4gb3JkZXIKIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5LCB0aGUgZm9sbG93aW5nIHBvaW50cyBzaG91bGQgYmUgb2JzZXJ2ZWQ6CkBAIC0yMzYsNyArMjI4LDcgQEAKIGRpc2sgY2FuIGJlIGZyZWVkOgogCiAjIHVtb3VudCAvaW5pdHJkCi0jIGJsb2NrZGV2IC0tZmx1c2hidWZzIC9kZXYvcmFtMCAgICAjIC9kZXYvcmQvMCBpZiB1c2luZyBkZXZmcworIyBibG9ja2RldiAtLWZsdXNoYnVmcyAvZGV2L3JhbTAKIAogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgaW5pdHJkIHdpdGggYW4gTkZTLW1vdW50ZWQgcm9vdCwgc2VlIHRoZQogcGl2b3Rfcm9vdCg4KSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAppbmRleCAxNTQzODAyLi5lZGMwNGQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CkBAIC0xMTksNyArMTE5LDYgQEAKICdjJwkwMC03RglsaW51eC9jb21zdGF0cy5oCWNvbmZsaWN0IQogJ2MnCTAwLTdGCWxpbnV4L2NvZGEuaAkJY29uZmxpY3QhCiAnZCcJMDAtRkYJbGludXgvY2hhci9kcm0vZHJtL2gJY29uZmxpY3QhCi0nZCcJMDAtMUYJbGludXgvZGV2ZnNfZnMuaAljb25mbGljdCEKICdkJwkwMC1ERglsaW51eC92aWRlb19kZWNvZGVyLmgJY29uZmxpY3QhCiAnZCcJRjAtRkYJbGludXgvZGlnaTEuaAogJ2UnCWFsbAlsaW51eC9kaWdpMS5oCQljb25mbGljdCEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXJxZmxhZ3MtdHJhY2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL2lycWZsYWdzLXRyYWNpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDQ0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lycWZsYWdzLXRyYWNpbmcudHh0CkBAIC0wLDAgKzEsNTcgQEAKK0lSUS1mbGFncyBzdGF0ZSB0cmFjaW5nCisKK3N0YXJ0ZWQgYnkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisKK3RoZSAiaXJxLWZsYWdzIHRyYWNpbmciIGZlYXR1cmUgInRyYWNlcyIgaGFyZGlycSBhbmQgc29mdGlycSBzdGF0ZSwgaW4KK3RoYXQgaXQgZ2l2ZXMgaW50ZXJlc3RlZCBzdWJzeXN0ZW1zIGFuIG9wcG9ydHVuaXR5IHRvIGJlIG5vdGlmaWVkIG9mCitldmVyeSBoYXJkaXJxcy1vZmYvaGFyZGlycXMtb24sIHNvZnRpcnFzLW9mZi9zb2Z0aXJxcy1vbiBldmVudCB0aGF0CitoYXBwZW5zIGluIHRoZSBrZXJuZWwuCisKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUIGlzIG5lZWRlZCBmb3IgQ09ORklHX1BST1ZFX1NQSU5fTE9DS0lORworYW5kIENPTkZJR19QUk9WRV9SV19MT0NLSU5HIHRvIGJlIG9mZmVyZWQgYnkgdGhlIGdlbmVyaWMgbG9jayBkZWJ1Z2dpbmcKK2NvZGUuIE90aGVyd2lzZSBvbmx5IENPTkZJR19QUk9WRV9NVVRFWF9MT0NLSU5HIGFuZAorQ09ORklHX1BST1ZFX1JXU0VNX0xPQ0tJTkcgd2lsbCBiZSBvZmZlcmVkIG9uIGFuIGFyY2hpdGVjdHVyZSAtIHRoZXNlCithcmUgbG9ja2luZyBBUElzIHRoYXQgYXJlIG5vdCB1c2VkIGluIElSUSBjb250ZXh0LiAodGhlIG9uZSBleGNlcHRpb24KK2ZvciByd3NlbXMgaXMgd29ya2VkIGFyb3VuZCkKKworYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIHRoaXMgaXMgY2VydGFpbmx5IG5vdCBpbiB0aGUgInRyaXZpYWwiCitjYXRlZ29yeSwgYmVjYXVzZSBsb3RzIG9mIGxvd2xldmVsIGFzc2VtYmx5IGNvZGUgZGVhbCB3aXRoIGlycS1mbGFncworc3RhdGUgY2hhbmdlcy4gQnV0IGFuIGFyY2hpdGVjdHVyZSBjYW4gYmUgaXJxLWZsYWdzLXRyYWNpbmcgZW5hYmxlZCBpbiBhCityYXRoZXIgc3RyYWlnaHRmb3J3YXJkIGFuZCByaXNrLWZyZWUgbWFubmVyLgorCitBcmNoaXRlY3R1cmVzIHRoYXQgd2FudCB0byBzdXBwb3J0IHRoaXMgbmVlZCB0byBkbyBhIGNvdXBsZSBvZgorY29kZS1vcmdhbml6YXRpb25hbCBjaGFuZ2VzIGZpcnN0OgorCistIG1vdmUgdGhlaXIgaXJxLWZsYWdzIG1hbmlwdWxhdGlvbiBjb2RlIGZyb20gdGhlaXIgYXNtL3N5c3RlbS5oIGhlYWRlcgorICB0byBhc20vaXJxZmxhZ3MuaAorCistIHJlbmFtZSBsb2NhbF9pcnFfZGlzYWJsZSgpL2V0YyB0byByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKS9ldGMuIHNvIHRoYXQKKyAgdGhlIGxpbnV4L2lycWZsYWdzLmggY29kZSBjYW4gaW5qZWN0IGNhbGxiYWNrcyBhbmQgY2FuIGNvbnN0cnVjdCB0aGUKKyAgcmVhbCBsb2NhbF9pcnFfZGlzYWJsZSgpL2V0YyBBUElzLgorCistIGFkZCBhbmQgZW5hYmxlIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgaW4gdGhlaXIgYXJjaCBsZXZlbCBLY29uZmlnIGZpbGUKKworYW5kIHRoZW4gYSBjb3VwbGUgb2YgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBuZWVkZWQgYXMgd2VsbCB0byBpbXBsZW1lbnQKK2lycS1mbGFncy10cmFjaW5nIHN1cHBvcnQ6CisKKy0gaW4gbG93bGV2ZWwgZW50cnkgY29kZSBhZGQgKGJ1aWxkLWNvbmRpdGlvbmFsKSBjYWxscyB0byB0aGUKKyAgdHJhY2VfaGFyZGlycXNfb2ZmKCkvdHJhY2VfaGFyZGlycXNfb24oKSBmdW5jdGlvbnMuIFRoZSBsb2NrIHZhbGlkYXRvcgorICBjbG9zZWx5IGd1YXJkcyB3aGV0aGVyIHRoZSAncmVhbCcgaXJxLWZsYWdzIG1hdGNoZXMgdGhlICd2aXJ0dWFsJworICBpcnEtZmxhZ3Mgc3RhdGUsIGFuZCBjb21wbGFpbnMgbG91ZGx5IChhbmQgdHVybnMgaXRzZWxmIG9mZikgaWYgdGhlCisgIHR3byBkbyBub3QgbWF0Y2guIFVzdWFsbHkgbW9zdCBvZiB0aGUgdGltZSBmb3IgYXJjaCBzdXBwb3J0IGZvcgorICBpcnEtZmxhZ3MtdHJhY2luZyBpcyBzcGVudCBpbiB0aGlzIHN0YXRlOiBsb29rIGF0IHRoZSBsb2NrZGVwCisgIGNvbXBsYWludCwgdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIGFzc2VtYmx5IGNvZGUgd2UgZGlkIG5vdCBjb3ZlciB5ZXQsCisgIGZpeCBhbmQgcmVwZWF0LiBPbmNlIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZCB1cCBhbmQgd29ya3Mgd2l0aG91dCBhCisgIGxvY2tkZXAgY29tcGxhaW50IGluIHRoZSBpcnEtZmxhZ3MtdHJhY2luZyBmdW5jdGlvbnMgYXJjaCBzdXBwb3J0IGlzCisgIGNvbXBsZXRlLgorLSBpZiB0aGUgYXJjaGl0ZWN0dXJlIGhhcyBub24tbWFza2FibGUgaW50ZXJydXB0cyB0aGVuIHRob3NlIG5lZWQgdG8gYmUKKyAgZXhjbHVkZWQgZnJvbSB0aGUgaXJxLXRyYWNpbmcgW2FuZCBsb2NrIHZhbGlkYXRpb25dIG1lY2hhbmlzbSB2aWEKKyAgbG9ja2RlcF9vZmYoKS9sb2NrZGVwX29uKCkuCisKK2luIGdlbmVyYWwgdGhlcmUgaXMgbm8gcmlzayBmcm9tIGhhdmluZyBhbiBpbmNvbXBsZXRlIGlycS1mbGFncy10cmFjaW5nCitpbXBsZW1lbnRhdGlvbiBpbiBhbiBhcmNoaXRlY3R1cmU6IGxvY2tkZXAgd2lsbCBkZXRlY3QgdGhhdCBhbmQgd2lsbAordHVybiBpdHNlbGYgb2ZmLiBJLmUuIHRoZSBsb2NrIHZhbGlkYXRvciB3aWxsIHN0aWxsIGJlIHJlbGlhYmxlLiBUaGVyZQorc2hvdWxkIGJlIG5vIGNyYXNoZXMgZHVlIHRvIGlycS10cmFjaW5nIGJ1Z3MuIChleGNlcHQgaWYgdGhlIGFzc2VtYmx5CitjaGFuZ2VzIGJyZWFrIG90aGVyIGNvZGUgYnkgbW9kaWZ5aW5nIGNvbmRpdGlvbnMgb3IgcmVnaXN0ZXJzIHRoYXQKK3Nob3VsZG50IGJlKQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDBkMTg5YzkuLjE0OWY2MmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0zNSw3ICszNSw2IEBACiAJQVBNCUFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLgogCUFYMjUJQXBwcm9wcmlhdGUgQVguMjUgc3VwcG9ydCBpcyBlbmFibGVkLgogCUNECUFwcHJvcHJpYXRlIENEIHN1cHBvcnQgaXMgZW5hYmxlZC4KLQlERVZGUwlkZXZmcyBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJRURECUJJT1MgRW5oYW5jZWQgRGlzayBEcml2ZSBTZXJ2aWNlcyAoRUREKSBpcyBlbmFibGVkCiAJRUZJCUVGSSBQYXJ0aXRpb25pbmcgKEdQVCkgaXMgZW5hYmxlZApAQCAtNDM2LDEzICs0MzUsMTkgQEAKIAogCWRlYnVnCQlbS05MXSBFbmFibGUga2VybmVsIGRlYnVnZ2luZyAoZXZlbnRzIGxvZyBsZXZlbCkuCiAKKwlkZWJ1Z19sb2Nrc192ZXJib3NlPQorCQkJW0tOTF0gdmVyYm9zZSBzZWxmLXRlc3RzCisJCQlGb3JtYXQ9PDB8MT4KKwkJCVByaW50IGRlYnVnZ2luZyBpbmZvIHdoaWxlIGRvaW5nIHRoZSBsb2NraW5nIEFQSQorCQkJc2VsZi10ZXN0cy4KKwkJCVdlIGRlZmF1bHQgdG8gMCAobm8gZXh0cmEgbWVzc2FnZXMpLCBzZXR0aW5nIGl0IHRvCisJCQkxIHdpbGwgcHJpbnQgX2EgbG90XyBtb3JlIGluZm9ybWF0aW9uIC0gbm9ybWFsbHkKKwkJCW9ubHkgdXNlZnVsIHRvIGtlcm5lbCBkZXZlbG9wZXJzLgorCiAJZGVjbmV0PQkJW0hXLE5FVF0KIAkJCUZvcm1hdDogPGFyZWE+Wyw8bm9kZT5dCiAJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dC4KIAotCWRldmZzPQkJW0RFVkZTXQotCQkJU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvYm9vdC1vcHRpb25zLgotCiAJZGhhc2hfZW50cmllcz0JW0tOTF0KIAkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBkZW50cnkgY2FjaGUuCiAKQEAgLTE2ODksOSArMTY5NCwxNCBAQAogCQkJZGVjcmVhc2UgdGhlIHNpemUgYW5kIGxlYXZlIG1vcmUgcm9vbSBmb3IgZGlyZWN0bHkKIAkJCW1hcHBlZCBrZXJuZWwgUkFNLgogCi0Jdm1oYWx0PQkJW0tOTCxTMzkwXQorCXZtaGFsdD0JCVtLTkwsUzM5MF0gUGVyZm9ybSB6L1ZNIENQIGNvbW1hbmQgYWZ0ZXIgc3lzdGVtIGhhbHQuCisJCQlGb3JtYXQ6IDxjb21tYW5kPgogCi0Jdm1wb2ZmPQkJW0tOTCxTMzkwXQorCXZtcGFuaWM9CVtLTkwsUzM5MF0gUGVyZm9ybSB6L1ZNIENQIGNvbW1hbmQgYWZ0ZXIga2VybmVsIHBhbmljLgorCQkJRm9ybWF0OiA8Y29tbWFuZD4KKworCXZtcG9mZj0JCVtLTkwsUzM5MF0gUGVyZm9ybSB6L1ZNIENQIGNvbW1hbmQgYWZ0ZXIgcG93ZXIgb2ZmLgorCQkJRm9ybWF0OiA8Y29tbWFuZD4KIAogCXdhdmVhcnRpc3Q9CVtIVyxPU1NdCiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXlzLXJlcXVlc3Qta2V5LnR4dAppbmRleCAyMjQ4OGQ3Li5jMWY2NGZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2V5cy1yZXF1ZXN0LWtleS50eHQKQEAgLTMsMTYgKzMsMjMgQEAKIAkJCSAgICAgID09PT09PT09PT09PT09PT09PT0KIAogVGhlIGtleSByZXF1ZXN0IHNlcnZpY2UgaXMgcGFydCBvZiB0aGUga2V5IHJldGVudGlvbiBzZXJ2aWNlIChyZWZlciB0bwotRG9jdW1lbnRhdGlvbi9rZXlzLnR4dCkuIFRoaXMgZG9jdW1lbnQgZXhwbGFpbnMgbW9yZSBmdWxseSBob3cgdGhhdCB0aGUKLXJlcXVlc3RpbmcgYWxnb3JpdGhtIHdvcmtzLgorRG9jdW1lbnRhdGlvbi9rZXlzLnR4dCkuICBUaGlzIGRvY3VtZW50IGV4cGxhaW5zIG1vcmUgZnVsbHkgaG93IHRoZSByZXF1ZXN0aW5nCithbGdvcml0aG0gd29ya3MuCiAKIFRoZSBwcm9jZXNzIHN0YXJ0cyBieSBlaXRoZXIgdGhlIGtlcm5lbCByZXF1ZXN0aW5nIGEgc2VydmljZSBieSBjYWxsaW5nCi1yZXF1ZXN0X2tleSgpOgorcmVxdWVzdF9rZXkqKCk6CiAKIAlzdHJ1Y3Qga2V5ICpyZXF1ZXN0X2tleShjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCiAJCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCiAJCQkJY29uc3QgY2hhciAqY2FsbG91dF9zdHJpbmcpOwogCitvcjoKKworCXN0cnVjdCBrZXkgKnJlcXVlc3Rfa2V5X3dpdGhfYXV4ZGF0YShjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkJCSAgICAgY29uc3QgY2hhciAqY2FsbG91dF9zdHJpbmcsCisJCQkJCSAgICAgdm9pZCAqYXV4KTsKKwogT3IgYnkgdXNlcnNwYWNlIGludm9raW5nIHRoZSByZXF1ZXN0X2tleSBzeXN0ZW0gY2FsbDoKIAogCWtleV9zZXJpYWxfdCByZXF1ZXN0X2tleShjb25zdCBjaGFyICp0eXBlLApAQCAtMjAsMTYgKzI3LDI2IEBACiAJCQkJIGNvbnN0IGNoYXIgKmNhbGxvdXRfaW5mbywKIAkJCQkga2V5X3NlcmlhbF90IGRlc3Rfa2V5cmluZyk7CiAKLVRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFjY2VzcyBwb2ludHMgaXMgdGhhdCB0aGUgaW4ta2VybmVsCi1pbnRlcmZhY2UgZG9lcyBub3QgbmVlZCB0byBsaW5rIHRoZSBrZXkgdG8gYSBrZXlyaW5nIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZwotaW1tZWRpYXRlbHkgZGVzdHJveWVkLiBUaGUga2VybmVsIGludGVyZmFjZSByZXR1cm5zIGEgcG9pbnRlciBkaXJlY3RseSB0byB0aGUKLWtleSwgYW5kIGl0J3MgdXAgdG8gdGhlIGNhbGxlciB0byBkZXN0cm95IHRoZSBrZXkuCitUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGFjY2VzcyBwb2ludHMgaXMgdGhhdCB0aGUgaW4ta2VybmVsIGludGVyZmFjZQorZG9lcyBub3QgbmVlZCB0byBsaW5rIHRoZSBrZXkgdG8gYSBrZXlyaW5nIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBpbW1lZGlhdGVseQorZGVzdHJveWVkLiAgVGhlIGtlcm5lbCBpbnRlcmZhY2UgcmV0dXJucyBhIHBvaW50ZXIgZGlyZWN0bHkgdG8gdGhlIGtleSwgYW5kCitpdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gZGVzdHJveSB0aGUga2V5LgorCitUaGUgcmVxdWVzdF9rZXlfd2l0aF9hdXhkYXRhKCkgY2FsbCBpcyBsaWtlIHRoZSBpbi1rZXJuZWwgcmVxdWVzdF9rZXkoKSBjYWxsLAorZXhjZXB0IHRoYXQgaXQgcGVybWl0cyBhdXhpbGlhcnkgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIHVwY2FsbGVyICh0aGUgZGVmYXVsdAoraXMgTlVMTCkuICBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciB0aG9zZSBrZXkgdHlwZXMgdGhhdCBkZWZpbmUgdGhlaXIgb3duIHVwY2FsbAorbWVjaGFuaXNtIHJhdGhlciB0aGFuIHVzaW5nIC9zYmluL3JlcXVlc3Qta2V5LgogCiBUaGUgdXNlcnNwYWNlIGludGVyZmFjZSBsaW5rcyB0aGUga2V5IHRvIGEga2V5cmluZyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3MKIHRvIHByZXZlbnQgdGhlIGtleSBmcm9tIGdvaW5nIGF3YXksIGFuZCByZXR1cm5zIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBrZXkgdG8KIHRoZSBjYWxsZXIuCiAKIAorVGhlIGZvbGxvd2luZyBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUga2V5IHR5cGVzIGludm9sdmVkIGRvbid0IGRlZmluZSB0aGVpcgorb3duIHVwY2FsbCBtZWNoYW5pc21zLiAgSWYgdGhleSBkbywgdGhlbiB0aG9zZSBzaG91bGQgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoZQorZm9ya2luZyBhbmQgZXhlY3V0aW9uIG9mIC9zYmluL3JlcXVlc3Qta2V5LgorCisKID09PT09PT09PT09CiBUSEUgUFJPQ0VTUwogPT09PT09PT09PT0KQEAgLTQwLDggKzU3LDggQEAKICAgICAgaW50ZXJmYWNlXS4KIAogICgyKSByZXF1ZXN0X2tleSgpIHNlYXJjaGVzIHRoZSBwcm9jZXNzJ3Mgc3Vic2NyaWJlZCBrZXlyaW5ncyB0byBzZWUgaWYgdGhlcmUncwotICAgICBhIHN1aXRhYmxlIGtleSB0aGVyZS4gSWYgdGhlcmUgaXMsIGl0IHJldHVybnMgdGhlIGtleS4gSWYgdGhlcmUgaXNuJ3QsIGFuZAotICAgICBjYWxsb3V0X2luZm8gaXMgbm90IHNldCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcHJvY2VzcworICAgICBhIHN1aXRhYmxlIGtleSB0aGVyZS4gIElmIHRoZXJlIGlzLCBpdCByZXR1cm5zIHRoZSBrZXkuICBJZiB0aGVyZSBpc24ndCwKKyAgICAgYW5kIGNhbGxvdXRfaW5mbyBpcyBub3Qgc2V0LCBhbiBlcnJvciBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgcHJvY2VzcwogICAgICBwcm9jZWVkcyB0byB0aGUgbmV4dCBzdGVwLgogCiAgKDMpIHJlcXVlc3Rfa2V5KCkgc2VlcyB0aGF0IEEgZG9lc24ndCBoYXZlIHRoZSBkZXNpcmVkIGtleSB5ZXQsIHNvIGl0IGNyZWF0ZXMKQEAgLTYyLDcgKzc5LDcgQEAKICAgICAgaW5zdGFudGlhdGlvbi4KIAogICg3KSBUaGUgcHJvZ3JhbSBtYXkgd2FudCB0byBhY2Nlc3MgYW5vdGhlciBrZXkgZnJvbSBBJ3MgY29udGV4dCAoc2F5IGEKLSAgICAgS2VyYmVyb3MgVEdUIGtleSkuIEl0IGp1c3QgcmVxdWVzdHMgdGhlIGFwcHJvcHJpYXRlIGtleSwgYW5kIHRoZSBrZXlyaW5nCisgICAgIEtlcmJlcm9zIFRHVCBrZXkpLiAgSXQganVzdCByZXF1ZXN0cyB0aGUgYXBwcm9wcmlhdGUga2V5LCBhbmQgdGhlIGtleXJpbmcKICAgICAgc2VhcmNoIG5vdGVzIHRoYXQgdGhlIHNlc3Npb24ga2V5cmluZyBoYXMgYXV0aCBrZXkgViBpbiBpdHMgYm90dG9tIGxldmVsLgogCiAgICAgIFRoaXMgd2lsbCBwZXJtaXQgaXQgdG8gdGhlbiBzZWFyY2ggdGhlIGtleXJpbmdzIG9mIHByb2Nlc3MgQSB3aXRoIHRoZQpAQCAtNzksMTAgKzk2LDExIEBACiAoMTApIFRoZSBwcm9ncmFtIHRoZW4gZXhpdHMgMCBhbmQgcmVxdWVzdF9rZXkoKSBkZWxldGVzIGtleSBWIGFuZCByZXR1cm5zIGtleQogICAgICBVIHRvIHRoZSBjYWxsZXIuCiAKLVRoaXMgYWxzbyBleHRlbmRzIGZ1cnRoZXIuIElmIGtleSBXIChzdGVwIDcgYWJvdmUpIGRpZG4ndCBleGlzdCwga2V5IFcgd291bGQgYmUKLWNyZWF0ZWQgdW5pbnN0YW50aWF0ZWQsIGFub3RoZXIgYXV0aCBrZXkgKFgpIHdvdWxkIGJlIGNyZWF0ZWQgKGFzIHBlciBzdGVwIDMpCi1hbmQgYW5vdGhlciBjb3B5IG9mIC9zYmluL3JlcXVlc3Qta2V5IHNwYXduZWQgKGFzIHBlciBzdGVwIDQpOyBidXQgdGhlIGNvbnRleHQKLXNwZWNpZmllZCBieSBhdXRoIGtleSBYIHdpbGwgc3RpbGwgYmUgcHJvY2VzcyBBLCBhcyBpdCB3YXMgaW4gYXV0aCBrZXkgVi4KK1RoaXMgYWxzbyBleHRlbmRzIGZ1cnRoZXIuICBJZiBrZXkgVyAoc3RlcCA3IGFib3ZlKSBkaWRuJ3QgZXhpc3QsIGtleSBXIHdvdWxkCitiZSBjcmVhdGVkIHVuaW5zdGFudGlhdGVkLCBhbm90aGVyIGF1dGgga2V5IChYKSB3b3VsZCBiZSBjcmVhdGVkIChhcyBwZXIgc3RlcAorMykgYW5kIGFub3RoZXIgY29weSBvZiAvc2Jpbi9yZXF1ZXN0LWtleSBzcGF3bmVkIChhcyBwZXIgc3RlcCA0KTsgYnV0IHRoZQorY29udGV4dCBzcGVjaWZpZWQgYnkgYXV0aCBrZXkgWCB3aWxsIHN0aWxsIGJlIHByb2Nlc3MgQSwgYXMgaXQgd2FzIGluIGF1dGgga2V5CitWLgogCiBUaGlzIGlzIGJlY2F1c2UgcHJvY2VzcyBBJ3Mga2V5cmluZ3MgY2FuJ3Qgc2ltcGx5IGJlIGF0dGFjaGVkIHRvCiAvc2Jpbi9yZXF1ZXN0LWtleSBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2VzIGJlY2F1c2UgKGEpIGV4ZWN2ZSB3aWxsIGRpc2NhcmQgdHdvCkBAIC0xMTgsMTcgKzEzNiwxNyBAQAogCiAgKDIpIEl0IGNvbnNpZGVycyBhbGwgdGhlIG5vbi1rZXlyaW5nIGtleXMgd2l0aGluIHRoYXQga2V5cmluZyBhbmQsIGlmIGFueSBrZXkKICAgICAgbWF0Y2hlcyB0aGUgY3JpdGVyaWEgc3BlY2lmaWVkLCBjYWxscyBrZXlfcGVybWlzc2lvbihTRUFSQ0gpIG9uIGl0IHRvIHNlZQotICAgICBpZiB0aGUga2V5IGlzIGFsbG93ZWQgdG8gYmUgZm91bmQuIElmIGl0IGlzLCB0aGF0IGtleSBpcyByZXR1cm5lZDsgaWYKKyAgICAgaWYgdGhlIGtleSBpcyBhbGxvd2VkIHRvIGJlIGZvdW5kLiAgSWYgaXQgaXMsIHRoYXQga2V5IGlzIHJldHVybmVkOyBpZgogICAgICBub3QsIHRoZSBzZWFyY2ggY29udGludWVzLCBhbmQgdGhlIGVycm9yIGNvZGUgaXMgcmV0YWluZWQgaWYgb2YgaGlnaGVyCiAgICAgIHByaW9yaXR5IHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgc2V0LgogCiAgKDMpIEl0IHRoZW4gY29uc2lkZXJzIGFsbCB0aGUga2V5cmluZy10eXBlIGtleXMgaW4gdGhlIGtleXJpbmcgaXQncyBjdXJyZW50bHkKLSAgICAgc2VhcmNoaW5nLiBJdCBjYWxscyBrZXlfcGVybWlzc2lvbihTRUFSQ0gpIG9uIGVhY2gga2V5cmluZywgYW5kIGlmIHRoaXMKKyAgICAgc2VhcmNoaW5nLiAgSXQgY2FsbHMga2V5X3Blcm1pc3Npb24oU0VBUkNIKSBvbiBlYWNoIGtleXJpbmcsIGFuZCBpZiB0aGlzCiAgICAgIGdyYW50cyBwZXJtaXNzaW9uLCBpdCByZWN1cnNlcywgZXhlY3V0aW5nIHN0ZXBzICgyKSBhbmQgKDMpIG9uIHRoYXQKICAgICAga2V5cmluZy4KIAogVGhlIHByb2Nlc3Mgc3RvcHMgaW1tZWRpYXRlbHkgYSB2YWxpZCBrZXkgaXMgZm91bmQgd2l0aCBwZXJtaXNzaW9uIGdyYW50ZWQgdG8KLXVzZSBpdC4gQW55IGVycm9yIGZyb20gYSBwcmV2aW91cyBtYXRjaCBhdHRlbXB0IGlzIGRpc2NhcmRlZCBhbmQgdGhlIGtleSBpcwordXNlIGl0LiAgQW55IGVycm9yIGZyb20gYSBwcmV2aW91cyBtYXRjaCBhdHRlbXB0IGlzIGRpc2NhcmRlZCBhbmQgdGhlIGtleSBpcwogcmV0dXJuZWQuCiAKIFdoZW4gc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3MoKSBpcyBpbnZva2VkLCBpdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHNlYXJjaGVzCkBAIC0xNTMsNyArMTcxLDcgQEAKIHJldHVybmVkLgogCiBPbmx5IGlmIGFsbCB0aGVzZSBmYWlsIGRvZXMgdGhlIHdob2xlIHRoaW5nIGZhaWwgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eQotZXJyb3IuIE5vdGUgdGhhdCBzZXZlcmFsIGVycm9ycyBtYXkgaGF2ZSBjb21lIGZyb20gTFNNLgorZXJyb3IuICBOb3RlIHRoYXQgc2V2ZXJhbCBlcnJvcnMgbWF5IGhhdmUgY29tZSBmcm9tIExTTS4KIAogVGhlIGVycm9yIHByaW9yaXR5IGlzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tleXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dAppbmRleCA2MWMwZmFkLi5lMzczZjAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tleXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2V5cy50eHQKQEAgLTc4MCw2ICs3ODAsMTcgQEAKICAgICBTZWUgYWxzbyBEb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0LgogCiAKKygqKSBUbyBzZWFyY2ggZm9yIGEga2V5LCBwYXNzaW5nIGF1eGlsaWFyeSBkYXRhIHRvIHRoZSB1cGNhbGxlciwgY2FsbDoKKworCXN0cnVjdCBrZXkgKnJlcXVlc3Rfa2V5X3dpdGhfYXV4ZGF0YShjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkJCSAgICAgY29uc3QgY2hhciAqY2FsbG91dF9zdHJpbmcsCisJCQkJCSAgICAgdm9pZCAqYXV4KTsKKworICAgIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHJlcXVlc3Rfa2V5KCksIGV4Y2VwdCB0aGF0IHRoZSBhdXhpbGlhcnkgZGF0YSBpcworICAgIHBhc3NlZCB0byB0aGUga2V5X3R5cGUtPnJlcXVlc3Rfa2V5KCkgb3AgaWYgaXQgZXhpc3RzLgorCisKICgqKSBXaGVuIGl0IGlzIG5vIGxvbmdlciByZXF1aXJlZCwgdGhlIGtleSBzaG91bGQgYmUgcmVsZWFzZWQgdXNpbmc6CiAKIAl2b2lkIGtleV9wdXQoc3RydWN0IGtleSAqa2V5KTsKQEAgLTEwMzEsNiArMTA0MiwyNCBAQAogICAgICBhcyBtaWdodCBoYXBwZW4gd2hlbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciBpcyBhY2Nlc3NlZC4KIAogCisgKCopIGludCAoKnJlcXVlc3Rfa2V5KShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXkgKmF1dGhrZXksIGNvbnN0IGNoYXIgKm9wLAorCQkJdm9pZCAqYXV4KTsKKworICAgICBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbC4gIElmIHByb3ZpZGVkLCByZXF1ZXN0X2tleSgpIGFuZAorICAgICByZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEoKSB3aWxsIGludm9rZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuCisgICAgIHVwY2FsbGluZyB0byAvc2Jpbi9yZXF1ZXN0LWtleSB0byBvcGVyYXRlIHVwb24gYSBrZXkgb2YgdGhpcyB0eXBlLgorCisgICAgIFRoZSBhdXggcGFyYW1ldGVyIGlzIGFzIHBhc3NlZCB0byByZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEoKSBvciBpcyBOVUxMCisgICAgIG90aGVyd2lzZS4gIEFsc28gcGFzc2VkIGFyZSB0aGUga2V5IHRvIGJlIG9wZXJhdGVkIHVwb24sIHRoZQorICAgICBhdXRob3Jpc2F0aW9uIGtleSBmb3IgdGhpcyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYXRpb24gdHlwZSAoY3VycmVudGx5CisgICAgIG9ubHkgImNyZWF0ZSIpLgorCisgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBvbmx5IHdoZW4gdGhlIHVwY2FsbCBpcyBjb21wbGV0ZS4gIFVwb24gcmV0dXJuCisgICAgIHRoZSBhdXRob3Jpc2F0aW9uIGtleSB3aWxsIGJlIHJldm9rZWQsIGFuZCB0aGUgdGFyZ2V0IGtleSB3aWxsIGJlCisgICAgIG5lZ2F0aXZlbHkgaW5zdGFudGlhdGVkIGlmIGl0IGlzIHN0aWxsIHVuaW5zdGFudGlhdGVkLiAgVGhlIGVycm9yIHdpbGwgYmUKKyAgICAgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBvZiByZXF1ZXN0X2tleSooKS4KKworCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBSRVFVRVNULUtFWSBDQUxMQkFDSyBTRVJWSUNFCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tkZXAtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDkzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tkZXAtZGVzaWduLnR4dApAQCAtMCwwICsxLDE5NyBAQAorUnVudGltZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzdGFydGVkIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorYWRkaXRpb25zIGJ5IEFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KKworTG9jay1jbGFzcworLS0tLS0tLS0tLQorCitUaGUgYmFzaWMgb2JqZWN0IHRoZSB2YWxpZGF0b3Igb3BlcmF0ZXMgdXBvbiBpcyBhICdjbGFzcycgb2YgbG9ja3MuCisKK0EgY2xhc3Mgb2YgbG9ja3MgaXMgYSBncm91cCBvZiBsb2NrcyB0aGF0IGFyZSBsb2dpY2FsbHkgdGhlIHNhbWUgd2l0aAorcmVzcGVjdCB0byBsb2NraW5nIHJ1bGVzLCBldmVuIGlmIHRoZSBsb2NrcyBtYXkgaGF2ZSBtdWx0aXBsZSAocG9zc2libHkKK3RlbnMgb2YgdGhvdXNhbmRzIG9mKSBpbnN0YW50aWF0aW9ucy4gRm9yIGV4YW1wbGUgYSBsb2NrIGluIHRoZSBpbm9kZQorc3RydWN0IGlzIG9uZSBjbGFzcywgd2hpbGUgZWFjaCBpbm9kZSBoYXMgaXRzIG93biBpbnN0YW50aWF0aW9uIG9mIHRoYXQKK2xvY2sgY2xhc3MuCisKK1RoZSB2YWxpZGF0b3IgdHJhY2tzIHRoZSAnc3RhdGUnIG9mIGxvY2stY2xhc3NlcywgYW5kIGl0IHRyYWNrcworZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGxvY2stY2xhc3Nlcy4gVGhlIHZhbGlkYXRvciBtYWludGFpbnMgYQorcm9sbGluZyBwcm9vZiB0aGF0IHRoZSBzdGF0ZSBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4KKworVW5saWtlIGFuIGxvY2sgaW5zdGFudGlhdGlvbiwgdGhlIGxvY2stY2xhc3MgaXRzZWxmIG5ldmVyIGdvZXMgYXdheTogd2hlbgorYSBsb2NrLWNsYXNzIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFmdGVyIGJvb3R1cCBpdCBnZXRzIHJlZ2lzdGVyZWQsCithbmQgYWxsIHN1YnNlcXVlbnQgdXNlcyBvZiB0aGF0IGxvY2stY2xhc3Mgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGlzCitsb2NrLWNsYXNzLgorCitTdGF0ZQorLS0tLS0KKworVGhlIHZhbGlkYXRvciB0cmFja3MgbG9jay1jbGFzcyB1c2FnZSBoaXN0b3J5IGludG8gNSBzZXBhcmF0ZSBzdGF0ZSBiaXRzOgorCistICdldmVyIGhlbGQgaW4gaGFyZGlycSBjb250ZXh0JyAgICAgICAgICAgICAgICAgICAgWyA9PSBoYXJkaXJxLXNhZmUgICBdCistICdldmVyIGhlbGQgaW4gc29mdGlycSBjb250ZXh0JyAgICAgICAgICAgICAgICAgICAgWyA9PSBzb2Z0aXJxLXNhZmUgICBdCistICdldmVyIGhlbGQgd2l0aCBoYXJkaXJxcyBlbmFibGVkJyAgICAgICAgICAgICAgICAgWyA9PSBoYXJkaXJxLXVuc2FmZSBdCistICdldmVyIGhlbGQgd2l0aCBzb2Z0aXJxcyBhbmQgaGFyZGlycXMgZW5hYmxlZCcgICAgWyA9PSBzb2Z0aXJxLXVuc2FmZSBdCisKKy0gJ2V2ZXIgdXNlZCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbID09ICF1bnVzZWQgICAgICAgIF0KKworU2luZ2xlLWxvY2sgc3RhdGUgcnVsZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzb2Z0aXJxLXVuc2FmZSBsb2NrLWNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgaGFyZGlycS11bnNhZmUgYXMgd2VsbC4gVGhlCitmb2xsb3dpbmcgc3RhdGVzIGFyZSBleGNsdXNpdmUsIGFuZCBvbmx5IG9uZSBvZiB0aGVtIGlzIGFsbG93ZWQgdG8gYmUKK3NldCBmb3IgYW55IGxvY2stY2xhc3M6CisKKyA8aGFyZGlycS1zYWZlPiBhbmQgPGhhcmRpcnEtdW5zYWZlPgorIDxzb2Z0aXJxLXNhZmU+IGFuZCA8c29mdGlycS11bnNhZmU+CisKK1RoZSB2YWxpZGF0b3IgZGV0ZWN0cyBhbmQgcmVwb3J0cyBsb2NrIHVzYWdlIHRoYXQgdmlvbGF0ZSB0aGVzZQorc2luZ2xlLWxvY2sgc3RhdGUgcnVsZXMuCisKK011bHRpLWxvY2sgZGVwZW5kZW5jeSBydWxlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNhbWUgbG9jay1jbGFzcyBtdXN0IG5vdCBiZSBhY3F1aXJlZCB0d2ljZSwgYmVjYXVzZSB0aGlzIGNvdWxkIGxlYWQKK3RvIGxvY2sgcmVjdXJzaW9uIGRlYWRsb2Nrcy4KKworRnVydGhlcm1vcmUsIHR3byBsb2NrcyBtYXkgbm90IGJlIHRha2VuIGluIGRpZmZlcmVudCBvcmRlcjoKKworIDxMMT4gLT4gPEwyPgorIDxMMj4gLT4gPEwxPgorCitiZWNhdXNlIHRoaXMgY291bGQgbGVhZCB0byBsb2NrIGludmVyc2lvbiBkZWFkbG9ja3MuIChUaGUgdmFsaWRhdG9yCitmaW5kcyBzdWNoIGRlcGVuZGVuY2llcyBpbiBhcmJpdHJhcnkgY29tcGxleGl0eSwgaS5lLiB0aGVyZSBjYW4gYmUgYW55CitvdGhlciBsb2NraW5nIHNlcXVlbmNlIGJldHdlZW4gdGhlIGFjcXVpcmUtbG9jayBvcGVyYXRpb25zLCB0aGUKK3ZhbGlkYXRvciB3aWxsIHN0aWxsIHRyYWNrIGFsbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBsb2Nrcy4pCisKK0Z1cnRoZXJtb3JlLCB0aGUgZm9sbG93aW5nIHVzYWdlIGJhc2VkIGxvY2sgZGVwZW5kZW5jaWVzIGFyZSBub3QgYWxsb3dlZAorYmV0d2VlbiBhbnkgdHdvIGxvY2stY2xhc3NlczoKKworICAgPGhhcmRpcnEtc2FmZT4gICAtPiAgPGhhcmRpcnEtdW5zYWZlPgorICAgPHNvZnRpcnEtc2FmZT4gICAtPiAgPHNvZnRpcnEtdW5zYWZlPgorCitUaGUgZmlyc3QgcnVsZSBjb21lcyBmcm9tIHRoZSBmYWN0IHRoZSBhIGhhcmRpcnEtc2FmZSBsb2NrIGNvdWxkIGJlCit0YWtlbiBieSBhIGhhcmRpcnEgY29udGV4dCwgaW50ZXJydXB0aW5nIGEgaGFyZGlycS11bnNhZmUgbG9jayAtIGFuZAordGh1cyBjb3VsZCByZXN1bHQgaW4gYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jay4gTGlrZXdpc2UsIGEgc29mdGlycS1zYWZlCitsb2NrIGNvdWxkIGJlIHRha2VuIGJ5IGFuIHNvZnRpcnEgY29udGV4dCwgaW50ZXJydXB0aW5nIGEgc29mdGlycS11bnNhZmUKK2xvY2suCisKK1RoZSBhYm92ZSBydWxlcyBhcmUgZW5mb3JjZWQgZm9yIGFueSBsb2NraW5nIHNlcXVlbmNlIHRoYXQgb2NjdXJzIGluIHRoZQora2VybmVsOiB3aGVuIGFjcXVpcmluZyBhIG5ldyBsb2NrLCB0aGUgdmFsaWRhdG9yIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzCithbnkgcnVsZSB2aW9sYXRpb24gYmV0d2VlbiB0aGUgbmV3IGxvY2sgYW5kIGFueSBvZiB0aGUgaGVsZCBsb2Nrcy4KKworV2hlbiBhIGxvY2stY2xhc3MgY2hhbmdlcyBpdHMgc3RhdGUsIHRoZSBmb2xsb3dpbmcgYXNwZWN0cyBvZiB0aGUgYWJvdmUKK2RlcGVuZGVuY3kgcnVsZXMgYXJlIGVuZm9yY2VkOgorCistIGlmIGEgbmV3IGhhcmRpcnEtc2FmZSBsb2NrIGlzIGRpc2NvdmVyZWQsIHdlIGNoZWNrIHdoZXRoZXIgaXQKKyAgdG9vayBhbnkgaGFyZGlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdC4KKworLSBpZiBhIG5ldyBzb2Z0aXJxLXNhZmUgbG9jayBpcyBkaXNjb3ZlcmVkLCB3ZSBjaGVjayB3aGV0aGVyIGl0IHRvb2sKKyAgYW55IHNvZnRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3QuCisKKy0gaWYgYSBuZXcgaGFyZGlycS11bnNhZmUgbG9jayBpcyBkaXNjb3ZlcmVkLCB3ZSBjaGVjayB3aGV0aGVyIGFueQorICBoYXJkaXJxLXNhZmUgbG9jayB0b29rIGl0IGluIHRoZSBwYXN0LgorCistIGlmIGEgbmV3IHNvZnRpcnEtdW5zYWZlIGxvY2sgaXMgZGlzY292ZXJlZCwgd2UgY2hlY2sgd2hldGhlciBhbnkKKyAgc29mdGlycS1zYWZlIGxvY2sgdG9vayBpdCBpbiB0aGUgcGFzdC4KKworKEFnYWluLCB3ZSBkbyB0aGVzZSBjaGVja3MgdG9vIG9uIHRoZSBiYXNpcyB0aGF0IGFuIGludGVycnVwdCBjb250ZXh0Citjb3VsZCBpbnRlcnJ1cHQgX2FueV8gb2YgdGhlIGlycS11bnNhZmUgb3IgaGFyZGlycS11bnNhZmUgbG9ja3MsIHdoaWNoCitjb3VsZCBsZWFkIHRvIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgLSBldmVuIGlmIHRoYXQgbG9jayBzY2VuYXJpbyBkaWQKK25vdCB0cmlnZ2VyIGluIHByYWN0aWNlIHlldC4pCisKK0V4Y2VwdGlvbjogTmVzdGVkIGRhdGEgZGVwZW5kZW5jaWVzIGxlYWRpbmcgdG8gbmVzdGVkIGxvY2tpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIGEgZmV3IGNhc2VzIHdoZXJlIHRoZSBMaW51eCBrZXJuZWwgYWNxdWlyZXMgbW9yZSB0aGFuIG9uZQoraW5zdGFuY2Ugb2YgdGhlIHNhbWUgbG9jay1jbGFzcy4gU3VjaCBjYXNlcyB0eXBpY2FsbHkgaGFwcGVuIHdoZW4gdGhlcmUKK2lzIHNvbWUgc29ydCBvZiBoaWVyYXJjaHkgd2l0aGluIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZS4gSW4gdGhlc2UKK2Nhc2VzIHRoZXJlIGlzIGFuIGluaGVyZW50ICJuYXR1cmFsIiBvcmRlcmluZyBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cworKGRlZmluZWQgYnkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGhpZXJhcmNoeSksIGFuZCB0aGUga2VybmVsIGdyYWJzIHRoZQorbG9ja3MgaW4gdGhpcyBmaXhlZCBvcmRlciBvbiBlYWNoIG9mIHRoZSBvYmplY3RzLgorCitBbiBleGFtcGxlIG9mIHN1Y2ggYW4gb2JqZWN0IGhpZWFyYXJjaHkgdGhhdCByZXN1bHRzIGluICJuZXN0ZWQgbG9ja2luZyIKK2lzIHRoYXQgb2YgYSAid2hvbGUgZGlzayIgYmxvY2stZGV2IG9iamVjdCBhbmQgYSAicGFydGl0aW9uIiBibG9jay1kZXYKK29iamVjdDsgdGhlIHBhcnRpdGlvbiBpcyAicGFydCBvZiIgdGhlIHdob2xlIGRldmljZSBhbmQgYXMgbG9uZyBhcyBvbmUKK2Fsd2F5cyB0YWtlcyB0aGUgd2hvbGUgZGlzayBsb2NrIGFzIGEgaGlnaGVyIGxvY2sgdGhhbiB0aGUgcGFydGl0aW9uCitsb2NrLCB0aGUgbG9jayBvcmRlcmluZyBpcyBmdWxseSBjb3JyZWN0LiBUaGUgdmFsaWRhdG9yIGRvZXMgbm90CithdXRvbWF0aWNhbGx5IGRldGVjdCB0aGlzIG5hdHVyYWwgb3JkZXJpbmcsIGFzIHRoZSBsb2NraW5nIHJ1bGUgYmVoaW5kCit0aGUgb3JkZXJpbmcgaXMgbm90IHN0YXRpYy4KKworSW4gb3JkZXIgdG8gdGVhY2ggdGhlIHZhbGlkYXRvciBhYm91dCB0aGlzIGNvcnJlY3QgdXNhZ2UgbW9kZWwsIG5ldwordmVyc2lvbnMgb2YgdGhlIHZhcmlvdXMgbG9ja2luZyBwcmltaXRpdmVzIHdlcmUgYWRkZWQgdGhhdCBhbGxvdyB5b3UgdG8KK3NwZWNpZnkgYSAibmVzdGluZyBsZXZlbCIuIEFuIGV4YW1wbGUgY2FsbCwgZm9yIHRoZSBibG9jayBkZXZpY2UgbXV0ZXgsCitsb29rcyBsaWtlIHRoaXM6CisKK2VudW0gYmRldl9iZF9tdXRleF9sb2NrX2NsYXNzCit7CisgICAgICAgQkRfTVVURVhfTk9STUFMLAorICAgICAgIEJEX01VVEVYX1dIT0xFLAorICAgICAgIEJEX01VVEVYX1BBUlRJVElPTgorfTsKKworIG11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgsIEJEX01VVEVYX1BBUlRJVElPTik7CisKK0luIHRoaXMgY2FzZSB0aGUgbG9ja2luZyBpcyBkb25lIG9uIGEgYmRldiBvYmplY3QgdGhhdCBpcyBrbm93biB0byBiZSBhCitwYXJ0aXRpb24uCisKK1RoZSB2YWxpZGF0b3IgdHJlYXRzIGEgbG9jayB0aGF0IGlzIHRha2VuIGluIHN1Y2ggYSBuZXN0ZWQgZmFzaW9uIGFzIGEKK3NlcGFyYXRlIChzdWIpY2xhc3MgZm9yIHRoZSBwdXJwb3NlcyBvZiB2YWxpZGF0aW9uLgorCitOb3RlOiBXaGVuIGNoYW5naW5nIGNvZGUgdG8gdXNlIHRoZSBfbmVzdGVkKCkgcHJpbWl0aXZlcywgYmUgY2FyZWZ1bCBhbmQKK2NoZWNrIHJlYWxseSB0aG9yb3VnaGx5IHRoYXQgdGhlIGhpZWFyY2h5IGlzIGNvcnJlY3RseSBtYXBwZWQ7IG90aGVyd2lzZQoreW91IGNhbiBnZXQgZmFsc2UgcG9zaXRpdmVzIG9yIGZhbHNlIG5lZ2F0aXZlcy4KKworUHJvb2Ygb2YgMTAwJSBjb3JyZWN0bmVzczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB2YWxpZGF0b3IgYWNoaWV2ZXMgcGVyZmVjdCwgbWF0aGVtYXRpY2FsICdjbG9zdXJlJyAocHJvb2Ygb2YgbG9ja2luZworY29ycmVjdG5lc3MpIGluIHRoZSBzZW5zZSB0aGF0IGZvciBldmVyeSBzaW1wbGUsIHN0YW5kYWxvbmUgc2luZ2xlLXRhc2sKK2xvY2tpbmcgc2VxdWVuY2UgdGhhdCBvY2N1cmVkIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUKK2tlcm5lbCwgdGhlIHZhbGlkYXRvciBwcm92ZXMgaXQgd2l0aCBhIDEwMCUgY2VydGFpbnR5IHRoYXQgbm8KK2NvbWJpbmF0aW9uIGFuZCB0aW1pbmcgb2YgdGhlc2UgbG9ja2luZyBzZXF1ZW5jZXMgY2FuIGNhdXNlIGFueSBjbGFzcyBvZgorbG9jayByZWxhdGVkIGRlYWRsb2NrLiBbKl0KKworSS5lLiBjb21wbGV4IG11bHRpLUNQVSBhbmQgbXVsdGktdGFzayBsb2NraW5nIHNjZW5hcmlvcyBkbyBub3QgaGF2ZSB0bworb2NjdXIgaW4gcHJhY3RpY2UgdG8gcHJvdmUgYSBkZWFkbG9jazogb25seSB0aGUgc2ltcGxlICdjb21wb25lbnQnCitsb2NraW5nIGNoYWlucyBoYXZlIHRvIG9jY3VyIGF0IGxlYXN0IG9uY2UgKGFueXRpbWUsIGluIGFueQordGFzay9jb250ZXh0KSBmb3IgdGhlIHZhbGlkYXRvciB0byBiZSBhYmxlIHRvIHByb3ZlIGNvcnJlY3RuZXNzLiAoRm9yCitleGFtcGxlLCBjb21wbGV4IGRlYWRsb2NrcyB0aGF0IHdvdWxkIG5vcm1hbGx5IG5lZWQgbW9yZSB0aGFuIDMgQ1BVcyBhbmQKK2EgdmVyeSB1bmxpa2VseSBjb25zdGVsbGF0aW9uIG9mIHRhc2tzLCBpcnEtY29udGV4dHMgYW5kIHRpbWluZ3MgdG8KK29jY3VyLCBjYW4gYmUgZGV0ZWN0ZWQgb24gYSBwbGFpbiwgbGlnaHRseSBsb2FkZWQgc2luZ2xlLUNQVSBzeXN0ZW0gYXMKK3dlbGwhKQorCitUaGlzIHJhZGljYWxseSBkZWNyZWFzZXMgdGhlIGNvbXBsZXhpdHkgb2YgbG9ja2luZyByZWxhdGVkIFFBIG9mIHRoZQora2VybmVsOiB3aGF0IGhhcyB0byBiZSBkb25lIGR1cmluZyBRQSBpcyB0byB0cmlnZ2VyIGFzIG1hbnkgInNpbXBsZSIKK3NpbmdsZS10YXNrIGxvY2tpbmcgZGVwZW5kZW5jaWVzIGluIHRoZSBrZXJuZWwgYXMgcG9zc2libGUsIGF0IGxlYXN0CitvbmNlLCB0byBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzIC0gaW5zdGVhZCBvZiBoYXZpbmcgdG8gdHJpZ2dlciBldmVyeQorcG9zc2libGUgY29tYmluYXRpb24gb2YgbG9ja2luZyBpbnRlcmFjdGlvbiBiZXR3ZWVuIENQVXMsIGNvbWJpbmVkIHdpdGgKK2V2ZXJ5IHBvc3NpYmxlIGhhcmRpcnEgYW5kIHNvZnRpcnEgbmVzdGluZyBzY2VuYXJpbyAod2hpY2ggaXMgaW1wb3NzaWJsZQordG8gZG8gaW4gcHJhY3RpY2UpLgorCitbKl0gYXNzdW1pbmcgdGhhdCB0aGUgdmFsaWRhdG9yIGl0c2VsZiBpcyAxMDAlIGNvcnJlY3QsIGFuZCBubyBvdGhlcgorICAgIHBhcnQgb2YgdGhlIHN5c3RlbSBjb3JydXB0cyB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkYXRvciBpbiBhbnkgd2F5LgorICAgIFdlIGFsc28gYXNzdW1lIHRoYXQgYWxsIE5NSS9TTU0gcGF0aHMgW3doaWNoIGNvdWxkIGludGVycnVwdAorICAgIGV2ZW4gaGFyZGlycS1kaXNhYmxlZCBjb2RlcGF0aHNdIGFyZSBjb3JyZWN0IGFuZCBkbyBub3QgaW50ZXJmZXJlCisgICAgd2l0aCB0aGUgdmFsaWRhdG9yLiBXZSBhbHNvIGFzc3VtZSB0aGF0IHRoZSA2NC1iaXQgJ2NoYWluIGhhc2gnCisgICAgdmFsdWUgaXMgdW5pcXVlIGZvciBldmVyeSBsb2NrLWNoYWluIGluIHRoZSBzeXN0ZW0uIEFsc28sIGxvY2sKKyAgICByZWN1cnNpb24gbXVzdCBub3QgYmUgaGlnaGVyIHRoYW4gMjAuCisKK1BlcmZvcm1hbmNlOgorLS0tLS0tLS0tLS0tCisKK1RoZSBhYm92ZSBydWxlcyByZXF1aXJlIF9tYXNzaXZlXyBhbW91bnRzIG9mIHJ1bnRpbWUgY2hlY2tpbmcuIElmIHdlIGRpZAordGhhdCBmb3IgZXZlcnkgbG9jayB0YWtlbiBhbmQgZm9yIGV2ZXJ5IGlycXMtZW5hYmxlIGV2ZW50LCBpdCB3b3VsZAorcmVuZGVyIHRoZSBzeXN0ZW0gcHJhY3RpY2FsbHkgdW51c2FibHkgc2xvdy4gVGhlIGNvbXBsZXhpdHkgb2YgY2hlY2tpbmcKK2lzIE8oTl4yKSwgc28gZXZlbiB3aXRoIGp1c3QgYSBmZXcgaHVuZHJlZCBsb2NrLWNsYXNzZXMgd2UnZCBoYXZlIHRvIGRvCit0ZW5zIG9mIHRob3VzYW5kcyBvZiBjaGVja3MgZm9yIGV2ZXJ5IGV2ZW50LgorCitUaGlzIHByb2JsZW0gaXMgc29sdmVkIGJ5IGNoZWNraW5nIGFueSBnaXZlbiAnbG9ja2luZyBzY2VuYXJpbycgKHVuaXF1ZQorc2VxdWVuY2Ugb2YgbG9ja3MgdGFrZW4gYWZ0ZXIgZWFjaCBvdGhlcikgb25seSBvbmNlLiBBIHNpbXBsZSBzdGFjayBvZgoraGVsZCBsb2NrcyBpcyBtYWludGFpbmVkLCBhbmQgYSBsaWdodHdlaWdodCA2NC1iaXQgaGFzaCB2YWx1ZSBpcworY2FsY3VsYXRlZCwgd2hpY2ggaGFzaCBpcyB1bmlxdWUgZm9yIGV2ZXJ5IGxvY2sgY2hhaW4uIFRoZSBoYXNoIHZhbHVlLAord2hlbiB0aGUgY2hhaW4gaXMgdmFsaWRhdGVkIGZvciB0aGUgZmlyc3QgdGltZSwgaXMgdGhlbiBwdXQgaW50byBhIGhhc2gKK3RhYmxlLCB3aGljaCBoYXNoLXRhYmxlIGNhbiBiZSBjaGVja2VkIGluIGEgbG9ja2ZyZWUgbWFubmVyLiBJZiB0aGUKK2xvY2tpbmcgY2hhaW4gb2NjdXJzIGFnYWluIGxhdGVyIG9uLCB0aGUgaGFzaCB0YWJsZSB0ZWxscyB1cyB0aGF0IHdlCitkb250IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGNoYWluIGFnYWluLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IGNmMGQ1NDEuLjI4ZDFiYzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTYwMiw3ICs2MDIsNyBAQAogCiBUaGlzIHNlcXVlbmNlIG9mIGV2ZW50cyBpcyBjb21taXR0ZWQgdG8gdGhlIG1lbW9yeSBjb2hlcmVuY2Ugc3lzdGVtIGluIGFuIG9yZGVyCiB0aGF0IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gbWlnaHQgcGVyY2VpdmUgYXMgdGhlIHVub3JkZXJlZCBzZXQgb2YgeyBTVE9SRSBBLAotU1RPUkUgQiwgU1RPUkUgQyB9IGFsbCBvY2N1cmluZyBiZWZvcmUgdGhlIHVub3JkZXJlZCBzZXQgb2YgeyBTVE9SRSBELCBTVE9SRSBFCitTVE9SRSBCLCBTVE9SRSBDIH0gYWxsIG9jY3VycmluZyBiZWZvcmUgdGhlIHVub3JkZXJlZCBzZXQgb2YgeyBTVE9SRSBELCBTVE9SRSBFCiB9OgogCiAJKy0tLS0tLS0rICAgICAgIDogICAgICA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXB2cy1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdnMtc3lzY3RsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NkYmNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdnMtc3lzY3RsLnR4dApAQCAtMCwwICsxLDE0MyBAQAorL3Byb2Mvc3lzL25ldC9pcHY0L3ZzLyogVmFyaWFibGVzOgorCithbV9kcm9wcmF0ZSAtIElOVEVHRVIKKyAgICAgICAgZGVmYXVsdCAxMAorCisgICAgICAgIEl0IHNldHMgdGhlIGFsd2F5cyBtb2RlIGRyb3AgcmF0ZSwgd2hpY2ggaXMgdXNlZCBpbiB0aGUgbW9kZSAzCisgICAgICAgIG9mIHRoZSBkcm9wX3JhdGUgZGVmZW5zZS4KKworYW1lbXRocmVzaCAtIElOVEVHRVIKKyAgICAgICAgZGVmYXVsdCAxMDI0CisKKyAgICAgICAgSXQgc2V0cyB0aGUgYXZhaWxhYmxlIG1lbW9yeSB0aHJlc2hvbGQgKGluIHBhZ2VzKSwgd2hpY2ggaXMKKyAgICAgICAgdXNlZCBpbiB0aGUgYXV0b21hdGljIG1vZGVzIG9mIGRlZmVuc2UuIFdoZW4gdGhlcmUgaXMgbm8KKyAgICAgICAgZW5vdWdoIGF2YWlsYWJsZSBtZW1vcnksIHRoZSByZXNwZWN0aXZlIHN0cmF0ZWd5IHdpbGwgYmUKKyAgICAgICAgZW5hYmxlZCBhbmQgdGhlIHZhcmlhYmxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDIsIG90aGVyd2lzZQorICAgICAgICB0aGUgc3RyYXRlZ3kgaXMgZGlzYWJsZWQgYW5kIHRoZSB2YXJpYWJsZSBpcyAgc2V0ICB0byAxLgorCitjYWNoZV9ieXBhc3MgLSBCT09MRUFOCisgICAgICAgIDAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKKyAgICAgICAgbm90IDAgLSBlbmFibGVkCisKKyAgICAgICAgSWYgaXQgaXMgZW5hYmxlZCwgZm9yd2FyZCBwYWNrZXRzIHRvIHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbgorICAgICAgICBkaXJlY3RseSB3aGVuIG5vIGNhY2hlIHNlcnZlciBpcyBhdmFpbGFibGUgYW5kIGRlc3RpbmF0aW9uCisgICAgICAgIGFkZHJlc3MgaXMgbm90IGxvY2FsIChpcGgtPmRhZGRyIGlzIFJUTl9VTklDQVNUKS4gSXQgaXMgbW9zdGx5CisgICAgICAgIHVzZWQgaW4gdHJhbnNwYXJlbnQgd2ViIGNhY2hlIGNsdXN0ZXIuCisKK2RlYnVnX2xldmVsIC0gSU5URUdFUgorCTAgICAgICAgICAgLSB0cmFuc21pc3Npb24gZXJyb3IgbWVzc2FnZXMgKGRlZmF1bHQpCisJMSAgICAgICAgICAtIG5vbi1mYXRhbCBlcnJvciBtZXNzYWdlcworCTIgICAgICAgICAgLSBjb25maWd1cmF0aW9uCisJMyAgICAgICAgICAtIGRlc3RpbmF0aW9uIHRyYXNoCisJNCAgICAgICAgICAtIGRyb3AgZW50cnkKKwk1ICAgICAgICAgIC0gc2VydmljZSBsb29rdXAKKwk2ICAgICAgICAgIC0gc2NoZWR1bGluZworCTcgICAgICAgICAgLSBjb25uZWN0aW9uIG5ldy9leHBpcmUsIGxvb2t1cCBhbmQgc3luY2hyb25pemF0aW9uCisJOCAgICAgICAgICAtIHN0YXRlIHRyYW5zaXRpb24KKwk5ICAgICAgICAgIC0gYmluZGluZyBkZXN0aW5hdGlvbiwgdGVtcGxhdGUgY2hlY2tzIGFuZCBhcHBsaWNhdGlvbnMKKwkxMCAgICAgICAgIC0gSVBWUyBwYWNrZXQgdHJhbnNtaXNzaW9uCisJMTEgICAgICAgICAtIElQVlMgcGFja2V0IGhhbmRsaW5nIChpcF92c19pbi9pcF92c19vdXQpCisJMTIgb3IgbW9yZSAtIHBhY2tldCB0cmF2ZXJzYWwKKworCU9ubHkgYXZhaWxhYmxlIHdoZW4gSVBWUyBpcyBjb21waWxlZCB3aXRoIHRoZSBDT05GSUdfSVBWU19ERUJVRworCisJSGlnaGVyIGRlYnVnZ2luZyBsZXZlbHMgaW5jbHVkZSB0aGUgbWVzc2FnZXMgZm9yIGxvd2VyIGRlYnVnZ2luZworCWxldmVscywgc28gc2V0dGluZyBkZWJ1ZyBsZXZlbCAyLCBpbmNsdWRlcyBsZXZlbCAwLCAxIGFuZCAyCisJbWVzc2FnZXMuIFRodXMsIGxvZ2dpbmcgYmVjb21lcyBtb3JlIGFuZCBtb3JlIHZlcmJvc2UgdGhlIGhpZ2hlcgorCXRoZSBsZXZlbC4KKworZHJvcF9lbnRyeSAtIElOVEVHRVIKKyAgICAgICAgMCAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKKworICAgICAgICBUaGUgZHJvcF9lbnRyeSBkZWZlbnNlIGlzIHRvIHJhbmRvbWx5IGRyb3AgZW50cmllcyBpbiB0aGUKKyAgICAgICAgY29ubmVjdGlvbiBoYXNoIHRhYmxlLCBqdXN0IGluIG9yZGVyIHRvIGNvbGxlY3QgYmFjayBzb21lCisgICAgICAgIG1lbW9yeSBmb3IgbmV3IGNvbm5lY3Rpb25zLiBJbiB0aGUgY3VycmVudCBjb2RlLCB0aGUKKyAgICAgICAgZHJvcF9lbnRyeSBwcm9jZWR1cmUgY2FuIGJlIGFjdGl2YXRlZCBldmVyeSBzZWNvbmQsIHRoZW4gaXQKKyAgICAgICAgcmFuZG9tbHkgc2NhbnMgMS8zMiBvZiB0aGUgd2hvbGUgYW5kIGRyb3BzIGVudHJpZXMgdGhhdCBhcmUgaW4KKyAgICAgICAgdGhlIFNZTi1SRUNWL1NZTkFDSyBzdGF0ZSwgd2hpY2ggc2hvdWxkIGJlIGVmZmVjdGl2ZSBhZ2FpbnN0CisgICAgICAgIHN5bi1mbG9vZGluZyBhdHRhY2suCisKKyAgICAgICAgVGhlIHZhbGlkIHZhbHVlcyBvZiBkcm9wX2VudHJ5IGFyZSBmcm9tIDAgdG8gMywgd2hlcmUgMCBtZWFucworICAgICAgICB0aGF0IHRoaXMgc3RyYXRlZ3kgaXMgYWx3YXlzIGRpc2FibGVkLCAxIGFuZCAyIG1lYW4gYXV0b21hdGljCisgICAgICAgIG1vZGVzICh3aGVuIHRoZXJlIGlzIG5vIGVub3VnaCBhdmFpbGFibGUgbWVtb3J5LCB0aGUgc3RyYXRlZ3kKKyAgICAgICAgaXMgZW5hYmxlZCBhbmQgdGhlIHZhcmlhYmxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDIsCisgICAgICAgIG90aGVyd2lzZSB0aGUgc3RyYXRlZ3kgaXMgZGlzYWJsZWQgYW5kIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8KKyAgICAgICAgMSksIGFuZCAzIG1lYW5zIHRoYXQgdGhhdCB0aGUgc3RyYXRlZ3kgaXMgYWx3YXlzIGVuYWJsZWQuCisKK2Ryb3BfcGFja2V0IC0gSU5URUdFUgorICAgICAgICAwICAtIGRpc2FibGVkIChkZWZhdWx0KQorCisgICAgICAgIFRoZSBkcm9wX3BhY2tldCBkZWZlbnNlIGlzIGRlc2lnbmVkIHRvIGRyb3AgMS9yYXRlIHBhY2tldHMKKyAgICAgICAgYmVmb3JlIGZvcndhcmRpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuIElmIHRoZSByYXRlIGlzIDEsIHRoZW4KKyAgICAgICAgZHJvcCBhbGwgdGhlIGluY29taW5nIHBhY2tldHMuCisKKyAgICAgICAgVGhlIHZhbHVlIGRlZmluaXRpb24gaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgZHJvcF9lbnRyeS4gSW4KKyAgICAgICAgdGhlIGF1dG9tYXRpYyBtb2RlLCB0aGUgcmF0ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3cKKyAgICAgICAgZm9ybXVsYTogcmF0ZSA9IGFtZW10aHJlc2ggLyAoYW1lbXRocmVzaCAtIGF2YWlsYWJsZV9tZW1vcnkpCisgICAgICAgIHdoZW4gYXZhaWxhYmxlIG1lbW9yeSBpcyBsZXNzIHRoYW4gdGhlIGF2YWlsYWJsZSBtZW1vcnkKKyAgICAgICAgdGhyZXNob2xkLiBXaGVuIHRoZSBtb2RlIDMgaXMgc2V0LCB0aGUgYWx3YXlzIG1vZGUgZHJvcCByYXRlCisgICAgICAgIGlzIGNvbnRyb2xsZWQgYnkgdGhlIC9wcm9jL3N5cy9uZXQvaXB2NC92cy9hbV9kcm9wcmF0ZS4KKworZXhwaXJlX25vZGVzdF9jb25uIC0gQk9PTEVBTgorICAgICAgICAwIC0gZGlzYWJsZWQgKGRlZmF1bHQpCisgICAgICAgIG5vdCAwIC0gZW5hYmxlZAorCisgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAsIHRoZSBsb2FkIGJhbGFuY2VyIHdpbGwgc2lsZW50bHkgZHJvcAorICAgICAgICBwYWNrZXRzIHdoZW4gaXRzIGRlc3RpbmF0aW9uIHNlcnZlciBpcyBub3QgYXZhaWxhYmxlLiBJdCBtYXkKKyAgICAgICAgYmUgdXNlZnVsLCB3aGVuIHVzZXItc3BhY2UgbW9uaXRvcmluZyBwcm9ncmFtIGRlbGV0ZXMgdGhlCisgICAgICAgIGRlc3RpbmF0aW9uIHNlcnZlciAoYmVjYXVzZSBvZiBzZXJ2ZXIgb3ZlcmxvYWQgb3Igd3JvbmcKKyAgICAgICAgZGV0ZWN0aW9uKSBhbmQgYWRkIGJhY2sgdGhlIHNlcnZlciBsYXRlciwgYW5kIHRoZSBjb25uZWN0aW9ucworICAgICAgICB0byB0aGUgc2VydmVyIGNhbiBjb250aW51ZS4KKworICAgICAgICBJZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGxvYWQgYmFsYW5jZXIgd2lsbCBleHBpcmUgdGhlCisgICAgICAgIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHkgd2hlbiBhIHBhY2tldCBhcnJpdmVzIGFuZCBpdHMKKyAgICAgICAgZGVzdGluYXRpb24gc2VydmVyIGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gdGhlIGNsaWVudCBwcm9ncmFtCisgICAgICAgIHdpbGwgYmUgbm90aWZpZWQgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuIFRoaXMgaXMKKyAgICAgICAgZXF1aXZhbGVudCB0byB0aGUgZmVhdHVyZSBzb21lIHBlb3BsZSByZXF1aXJlcyB0byBmbHVzaAorICAgICAgICBjb25uZWN0aW9ucyB3aGVuIGl0cyBkZXN0aW5hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCitleHBpcmVfcXVpZXNjZW50X3RlbXBsYXRlIC0gQk9PTEVBTgorCTAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKKwlub3QgMCAtIGVuYWJsZWQKKworCVdoZW4gc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZSBsb2FkIGJhbGFuY2VyIHdpbGwgZXhwaXJlCisJcGVyc2lzdGVudCB0ZW1wbGF0ZXMgd2hlbiB0aGUgZGVzdGluYXRpb24gc2VydmVyIGlzIHF1aWVzY2VudC4KKwlUaGlzIG1heSBiZSB1c2VmdWwsIHdoZW4gYSB1c2VyIG1ha2VzIGEgZGVzdGluYXRpb24gc2VydmVyCisJcXVpZXNjZW50IGJ5IHNldHRpbmcgaXRzIHdlaWdodCB0byAwIGFuZCBpdCBpcyBkZXNpcmVkIHRoYXQKKwlzdWJzZXF1ZW50IG90aGVyd2lzZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGFyZSBzZW50IHRvIGEKKwlkaWZmZXJlbnQgZGVzdGluYXRpb24gc2VydmVyLiAgQnkgZGVmYXVsdCBuZXcgcGVyc2lzdGVudAorCWNvbm5lY3Rpb25zIGFyZSBhbGxvd2VkIHRvIHF1aWVzY2VudCBkZXN0aW5hdGlvbiBzZXJ2ZXJzLgorCisJSWYgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBsb2FkIGJhbGFuY2VyIHdpbGwgZXhwaXJlIHRoZQorCXBlcnNpc3RlbmNlIHRlbXBsYXRlIGlmIGl0IGlzIHRvIGJlIHVzZWQgdG8gc2NoZWR1bGUgYSBuZXcKKwljb25uZWN0aW9uIGFuZCB0aGUgZGVzdGluYXRpb24gc2VydmVyIGlzIHF1aWVzY2VudC4KKworbmF0X2ljbXBfc2VuZCAtIEJPT0xFQU4KKyAgICAgICAgMCAtIGRpc2FibGVkIChkZWZhdWx0KQorICAgICAgICBub3QgMCAtIGVuYWJsZWQKKworICAgICAgICBJdCBjb250cm9scyBzZW5kaW5nIGljbXAgZXJyb3IgbWVzc2FnZXMgKElDTVBfREVTVF9VTlJFQUNIKQorICAgICAgICBmb3IgVlMvTkFUIHdoZW4gdGhlIGxvYWQgYmFsYW5jZXIgcmVjZWl2ZXMgcGFja2V0cyBmcm9tIHJlYWwKKyAgICAgICAgc2VydmVycyBidXQgdGhlIGNvbm5lY3Rpb24gZW50cmllcyBkb24ndCBleGlzdC4KKworc2VjdXJlX3RjcCAtIElOVEVHRVIKKyAgICAgICAgMCAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKKworICAgICAgICBUaGUgc2VjdXJlX3RjcCBkZWZlbnNlIGlzIHRvIHVzZSBhIG1vcmUgY29tcGxpY2F0ZWQgc3RhdGUKKyAgICAgICAgdHJhbnNpdGlvbiB0YWJsZSBhbmQgc29tZSBwb3NzaWJsZSBzaG9ydCB0aW1lb3V0cyBvZiBlYWNoCisgICAgICAgIHN0YXRlLiBJbiB0aGUgVlMvTkFULCBpdCBkZWxheXMgdGhlIGVudGVyaW5nIHRoZSBFU1RBQkxJU0hFRAorICAgICAgICB1bnRpbCB0aGUgcmVhbCBzZXJ2ZXIgc3RhcnRzIHRvIHNlbmQgZGF0YSBhbmQgQUNLIHBhY2tldAorICAgICAgICAoYWZ0ZXIgMy13YXkgaGFuZHNoYWtlKS4KKworICAgICAgICBUaGUgdmFsdWUgZGVmaW5pdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIGRyb3BfZW50cnkgb3IKKyAgICAgICAgZHJvcF9wYWNrZXQuCisKK3N5bmNfdGhyZXNob2xkIC0gSU5URUdFUgorICAgICAgICBkZWZhdWx0IDMKKworICAgICAgICBJdCBzZXRzIHN5bmNocm9uaXphdGlvbiB0aHJlc2hvbGQsIHdoaWNoIGlzIHRoZSBtaW5pbXVtIG51bWJlcgorICAgICAgICBvZiBpbmNvbWluZyBwYWNrZXRzIHRoYXQgYSBjb25uZWN0aW9uIG5lZWRzIHRvIHJlY2VpdmUgYmVmb3JlCisgICAgICAgIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgc3luY2hyb25pemVkLiBBIGNvbm5lY3Rpb24gd2lsbCBiZQorICAgICAgICBzeW5jaHJvbml6ZWQsIGV2ZXJ5IHRpbWUgdGhlIG51bWJlciBvZiBpdHMgaW5jb21pbmcgcGFja2V0cworICAgICAgICBtb2R1bHVzIDUwIGVxdWFscyB0aGUgdGhyZXNob2xkLiBUaGUgcmFuZ2Ugb2YgdGhlIHRocmVzaG9sZCBpcworICAgICAgICBmcm9tIDAgdG8gNDkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGt0Z2VuLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CmluZGV4IDI3ODc3MWMuLjQ0ZjJmNzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CkBAIC03NCw3ICs3NCw3IEBACiAgcGdzZXQgInBrdF9zaXplIDkwMTQiICAgc2V0cyBwYWNrZXQgc2l6ZSB0byA5MDE0CiAgcGdzZXQgImZyYWdzIDUiICAgICAgICAgcGFja2V0IHdpbGwgY29uc2lzdCBvZiA1IGZyYWdtZW50cwogIHBnc2V0ICJjb3VudCAyMDAwMDAiICAgIHNldHMgbnVtYmVyIG9mIHBhY2tldHMgdG8gc2VuZCwgc2V0IHRvIHplcm8KLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29udGluaW91cyBzZW5kcyB1bnRpbGwgZXhwbGljaXRsIHN0b3BwZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnRpbnVvdXMgc2VuZHMgdW50aWwgZXhwbGljaXRseSBzdG9wcGVkLgogCiAgcGdzZXQgImRlbGF5IDUwMDAiICAgICAgYWRkcyBkZWxheSB0byBoYXJkX3N0YXJ0X3htaXQoKS4gbmFub3NlY29uZHMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wY2kudHh0CmluZGV4IDMyNDJlNWMuLjJiMzk1ZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKQEAgLTIyNSw3ICsyMjUsNyBAQAogVXNlIHRoZXNlIGZvciBhZGRyZXNzIHJlc291cmNlcyB0aGF0IGFyZSBub3QgZGVzY3JpYmVkIGJ5ICJub3JtYWwiIFBDSQogaW50ZXJmYWNlcyAoZS5nLiBCQVIpLgogCi0gICBBbGwgaW50ZXJydXB0IGhhbmRsZXJzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggU0FfU0hJUlEgYW5kIHVzZSB0aGUgZGV2aWQKKyAgIEFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCBJUlFGX1NIQVJFRCBhbmQgdXNlIHRoZSBkZXZpZAogdG8gbWFwIElSUXMgdG8gZGV2aWNlcyAocmVtZW1iZXIgdGhhdCBhbGwgUENJIGludGVycnVwdHMgYXJlIHNoYXJlZCkuCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvY3JjMzJoYXNoLmMgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9jcmMzMmhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmMzNmQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvY3JjMzJoYXNoLmMKQEAgLTAsMCArMSwzMiBAQAorLyogY3JjMzJoYXNoLmMgLSBkZXJpdmVkIGZyb20gbGludXgvbGliL2NyYzMyLmMsIEdOVSBHUEwgdjIgKi8KKy8qIFVzYWdlIGV4YW1wbGU6CiskIC4vY3JjMzJoYXNoICJEdWFsIFNwZWVkIgorKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordW5zaWduZWQgaW50IGNyYzMyKHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGNyYyA9IDA7CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJY3JjID0gKGNyYyA+PiAxKSBeICgoY3JjICYgMSkgPyAweGVkYjg4MzIwIDogMCk7CisJfQorCXJldHVybiBjcmM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJaWYgKGFyZ2MgIT0gMikgeworCQlwcmludGYoIm5vIHN0cmluZyBwYXNzZWQgYXMgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlc3VsdCA9IGNyYzMyKGFyZ3ZbMV0sIHN0cmxlbihhcmd2WzFdKSk7CisJcHJpbnRmKCIweCV4XG4iLCByZXN1bHQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvZGV2aWNldGFibGUudHh0IGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvZGV2aWNldGFibGUudHh0CmluZGV4IDMzNTFjMDM1Li4xOTlhZmQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kZXZpY2V0YWJsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvZGV2aWNldGFibGUudHh0CkBAIC0yNywzNyArMjcsNyBAQAogVGhlIGhleCB2YWx1ZSBhZnRlciAicGEiIGlzIHRoZSBoYXNoIG9mIHByb2R1Y3QgSUQgc3RyaW5nIDEsIGFmdGVyICJwYiIgZm9yCiBzdHJpbmcgMiBhbmQgc28gb24uCiAKLUFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoaXMgc21hbGwgdG9vbCB0byBkZXRlcm1pbmUgdGhlIGNyYzMyIGhhc2guCi1zaW1wbHkgcGFzcyB0aGUgc3RyaW5nIHlvdSB3YW50IHRvIGV2YWx1YXRlIGFzIGFyZ3VtZW50IHRvIHRoaXMgcHJvZ3JhbSwKLWUuZy4KK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGNyYzMyaGFzaCAoc2VlIERvY3VtZW50YXRpb24vcGNtY2lhL2NyYzMyaGFzaC5jKQordG8gZGV0ZXJtaW5lIHRoZSBjcmMzMiBoYXNoLiAgU2ltcGx5IHBhc3MgdGhlIHN0cmluZyB5b3Ugd2FudCB0byBldmFsdWF0ZQorYXMgYXJndW1lbnQgdG8gdGhpcyBwcm9ncmFtLCBlLmcuOgogJCAuL2NyYzMyaGFzaCAiRHVhbCBTcGVlZCIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLyogY3JjMzJoYXNoLmMgLSBkZXJpdmVkIGZyb20gbGludXgvbGliL2NyYzMyLmMsIEdOVSBHUEwgdjIgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXVuc2lnbmVkIGludCBjcmMzMih1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCBpOwotCXVuc2lnbmVkIGludCBjcmMgPSAwOwotCXdoaWxlIChsZW4tLSkgewotCQljcmMgXj0gKnArKzsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCWNyYyA9IChjcmMgPj4gMSkgXiAoKGNyYyAmIDEpID8gMHhlZGI4ODMyMCA6IDApOwotCX0KLQlyZXR1cm4gY3JjOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0OwotCWlmIChhcmdjICE9IDIpIHsKLQkJcHJpbnRmKCJubyBzdHJpbmcgcGFzc2VkIGFzIGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXN1bHQgPSBjcmMzMihhcmd2WzFdLCBzdHJsZW4oYXJndlsxXSkpOwotCXByaW50ZigiMHgleFxuIiwgcmVzdWx0KTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKaW5kZXggMjE3ZTUxNy4uM2M2MmU2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKQEAgLTE0MzYsOSArMTQzNiw5IEBACiAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDFkIDM+OwogICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CiAgICAgICAgICAgICAgICBudW0tY2hhbm5lbHMgPSA8ND47Ci0gICAgICAgICAgICAgICBjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKyAgICAgICAgICAgICAgIGNoYW5uZWwtZmlmby1sZW4gPSA8MTg+OwogICAgICAgICAgICAgICAgZXhlYy11bml0cy1tYXNrID0gPDAwMDAwMGZlPjsKLSAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwwNzNmMTEyNz47CisgICAgICAgICAgICAgICBkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MDEyYjBlYmY+OwogICAgICAgIH07CiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcwppbmRleCAwYTg1YTdlLi5kOWU1OTYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcworKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcwpAQCAtMSw0ICsxLDIwIEBACiAKKzEgUmVsZWFzZSBEYXRlICAgIDogU3VuIE1heSAxNCAyMjo0OTo1MiBQRFQgMjAwNiAtIFN1bWFudCBQYXRybyA8U3VtYW50LlBhdHJvQGxzaWwuY29tPgorMiBDdXJyZW50IFZlcnNpb24gOiAwMC4wMC4wMy4wMQorMyBPbGRlciBWZXJzaW9uICAgOiAwMC4wMC4wMi4wNAorCitpLglBZGRlZCBzdXBwb3J0IGZvciBaQ1IgY29udHJvbGxlci4KKworCQlOZXcgZGV2aWNlIGlkIDB4NDEzIGFkZGVkLgorCitpaS4JQnVnIGZpeCA6IERpc2FibGUgY29udHJvbGxlciBpbnRlcnJ1cHQgYmVmb3JlIGZpcmluZyBJTklUIGNtZCB0byBGVy4KKworCQlJbnRlcnJ1cHQgaXMgZW5hYmxlZCBhZnRlciByZXF1aXJlZCBpbml0aWFsaXphdGlvbiBpcyBvdmVyLgorCQlUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgZHJpdmVyIGlzIHJlYWR5IHRvIGhhbmRsZSBpbnRlcnJ1cHRzIHdoZW4KKwkJaXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb250cm9sbGVyLgorCisJCS1TdW1hbnQgUGF0cm8gPFN1bWFudC5QYXRyb0Bsc2lsLmNvbT4KKwogMSBSZWxlYXNlIERhdGUgICAgOiBXZWQgRmViIDAzIDE0OjMxOjQ0IFBTVCAyMDA2IC0gU3VtYW50IFBhdHJvIDxTdW1hbnQuUGF0cm9AbHNpbC5jb20+CiAyIEN1cnJlbnQgVmVyc2lvbiA6IDAwLjAwLjAyLjA0CiAzIE9sZGVyIFZlcnNpb24gICA6IDAwLjAwLjAyLjA0IApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0CmluZGV4IGUxNjUyMjkuLmRmN2EwMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQKQEAgLTEwOSw3ICsxMDksNyBAQAogCiBJZiB5b3Ugd2FudCB0byBzaGFyZSB0aGUgSVJRIHdpdGggYW5vdGhlciBkZXZpY2UgYW5kIHRoZSBkcml2ZXIgcmVmdXNlcyB0bwogZG8gc28sIHlvdSBtaWdodCBzdWNjZWVkIHdpdGggY2hhbmdpbmcgdGhlIERDMzkwX0lSUSB0eXBlIGluIHRtc2NzaW0uYyB0byAKLVNBX1NISVJRIHwgU0FfSU5URVJSVVBULgorSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELgogCiAKIDMuRmVhdHVyZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODdkNzZhNS4uZjYxYWYyMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTQ3Miw2ICs0NzIsMjIgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KIAorICBNb2R1bGUgc25kLWRhcmxhMjAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVjaG9hdWRpbyBEYXJsYTIwCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3VwcG9ydCBvbiBrZXJuZWwuCisKKyAgTW9kdWxlIHNuZC1kYXJsYTI0CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFY2hvYXVkaW8gRGFybGEyNAorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorCiAgIE1vZHVsZSBzbmQtZHQwMTl4CiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQ5OSw2ICs1MTUsMTQgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KIAorICBNb2R1bGUgc25kLWVjaG8zZworICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFY2hvYXVkaW8gM0cgY2FyZHMgKEdpbmEzRy9MYXlsYTNHKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorCiAgIE1vZHVsZSBzbmQtZW11MTBrMQogICAtLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjU3LDYgKzY4MSwyMiBAQAogICAgIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KIAorICBNb2R1bGUgc25kLWdpbmEyMAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFY2hvYXVkaW8gR2luYTIwCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3VwcG9ydCBvbiBrZXJuZWwuCisKKyAgTW9kdWxlIHNuZC1naW5hMjQKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRWNob2F1ZGlvIEdpbmEyNAorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorCiAgIE1vZHVsZSBzbmQtZ3VzY2xhc3NpYwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzYwLDEyICs4MDAsMTggQEAKIAkgIGJhc2ljCQlmaXhlZCBwaW4gYXNzaWdubWVudCB3L28gU1BESUYKIAkgIGF1dG8JCWF1dG8tY29uZmlnIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKIAotCUFMQzg4Mi84ODMvODg1CisJQUxDODgyLzg4NQogCSAgM3N0YWNrLWRpZwkzLWphY2sgd2l0aCBTUERJRiBJL08KIAkgIDZzdGNrLWRpZwk2LWphY2sgZGlnaXRhbCB3aXRoIFNQRElGIEkvTwogCSAgYXV0bwkJYXV0by1jb25maWcgcmVhZGluZyBCSU9TIChkZWZhdWx0KQogCi0JQUxDODYxCisJQUxDODgzLzg4OAorCSAgM3N0YWNrLWRpZwkzLWphY2sgd2l0aCBTUERJRiBJL08KKwkgIDZzdGFjay1kaWcJNi1qYWNrIGRpZ2l0YWwgd2l0aCBTUERJRiBJL08KKwkgIDZzdGFjay1kaWctZGVtbyAgNi1zdGFjayBkaWdpdGFsIGZvciBJbnRlbCBkZW1vIGJvYXJkCisJICBhdXRvCQlhdXRvLWNvbmZpZyByZWFkaW5nIEJJT1MgKGRlZmF1bHQpCisKKwlBTEM4NjEvNjYwCiAJICAzc3RhY2sJMy1qYWNrCiAJICAzc3RhY2stZGlnCTMtamFjayB3aXRoIFNQRElGIEkvTwogCSAgNnN0YWNrLWRpZwk2LWphY2sgd2l0aCBTUERJRiBJL08KQEAgLTkzNyw2ICs5ODMsMzAgQEAKIAkgIGRyaXZlciBpc24ndCBjb25maWd1cmVkIHByb3Blcmx5IG9yIHlvdSB3YW50IHRvIHRyeSBhbm90aGVyCiAJICB0eXBlIGZvciB0ZXN0aW5nLgogCisgIE1vZHVsZSBzbmQtaW5kaWdvCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVjaG9hdWRpbyBJbmRpZ28KKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgorICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgdGhlIGZpcm13YXJlIGxvYWRlciBzdXBwb3J0IG9uIGtlcm5lbC4KKworICBNb2R1bGUgc25kLWluZGlnb2RqCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRWNob2F1ZGlvIEluZGlnbyBESgorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorCisgIE1vZHVsZSBzbmQtaW5kaWdvaW8KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFY2hvYXVkaW8gSW5kaWdvIElPCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3VwcG9ydCBvbiBrZXJuZWwuCisKICAgTW9kdWxlIHNuZC1pbnRlbDh4MAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEwMzYsNiArMTEwNiwyMiBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCiAKKyAgTW9kdWxlIHNuZC1sYXlsYTIwCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFY2hvYXVkaW8gTGF5bGEyMAorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorCisgIE1vZHVsZSBzbmQtbGF5bGEyNAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRWNob2F1ZGlvIExheWxhMjQKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgorICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgdGhlIGZpcm13YXJlIGxvYWRlciBzdXBwb3J0IG9uIGtlcm5lbC4KKwogICBNb2R1bGUgc25kLW1hZXN0cm8zCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTA1Niw2ICsxMTQyLDE0IEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgTW9kdWxlIHNuZC1taWEKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEVjaG9hdWRpbyBNaWEKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgorICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgdGhlIGZpcm13YXJlIGxvYWRlciBzdXBwb3J0IG9uIGtlcm5lbC4KKwogICBNb2R1bGUgc25kLW1pcm8KICAgLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEwODgsNiArMTE4MiwxNCBAQAogICAgIFdoZW4gbm8gaG90cGx1ZyBmdyBsb2FkZXIgaXMgYXZhaWxhYmxlLCB5b3UgbmVlZCB0byBsb2FkIHRoZQogICAgIGZpcm13YXJlIHZpYSBtaXhhcnRsb2FkZXIgdXRpbGl0eSBpbiBhbHNhLXRvb2xzIHBhY2thZ2UuCiAKKyAgTW9kdWxlIHNuZC1tb25hCisgIC0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFY2hvYXVkaW8gTW9uYQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgorCiAgIE1vZHVsZSBzbmQtbXB1NDAxCiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAppbmRleCA2MzVjYmI5Li42OTg2NmQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogICAgICAgICAgIH0KICAgICAgICAgICBjaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAgICAgICAgICAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiTXkgQ2hpcCIsIGNoaXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJNeSBDaGlwIiwgY2hpcCkpIHsKICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaXJxICVkXG4iLCBwY2ktPmlycSk7CiAgICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwpAQCAtMTMyMyw3ICsxMzIzLDcgQEAKICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiA8IVtDREFUQVsKICAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAgIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgIk15IENoaXAiLCBjaGlwKSkgeworICAgICAgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIk15IENoaXAiLCBjaGlwKSkgewogICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaXJxICVkXG4iLCBwY2ktPmlycSk7CiAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOwogICAgICAgICAgIHJldHVybiAtRUJVU1k7CkBAIC0xMzQyLDcgKzEzNDIsNyBAQAogCiAgICAgICA8cGFyYT4KICAgICAgIE9uIHRoZSBQQ0kgYnVzLCB0aGUgaW50ZXJydXB0cyBjYW4gYmUgc2hhcmVkLiBUaHVzLAotICAgICAgPGNvbnN0YW50PlNBX1NISVJRPC9jb25zdGFudD4gaXMgZ2l2ZW4gYXMgdGhlIGludGVycnVwdCBmbGFnIG9mCisgICAgICA8Y29uc3RhbnQ+SVJRRl9TSEFSRUQ8L2NvbnN0YW50PiBpcyBnaXZlbiBhcyB0aGUgaW50ZXJydXB0IGZsYWcgb2YKICAgICAgIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4uIAogICAgICAgPC9wYXJhPgogCkBAIC0zMDQ4LDcgKzMwNDgsNyBAQAogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgeW91IGFxdWlyZSBhIHNwaW5sb2NrIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kIHRoZQorICAgICAgICAgIElmIHlvdSBhY3F1aXJlIGEgc3BpbmxvY2sgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQgdGhlCiAgICAgICAgIGxvY2sgaXMgdXNlZCBpbiBvdGhlciBwY20gY2FsbGJhY2tzLCB0b28sIHRoZW4geW91IGhhdmUgdG8KICAgICAgICAgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIGJlY2F1c2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAppbmRleCAyZGMyNDZhLi43Y2VlOTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC0yOCw3ICsyOCw3IEBACiAtIGJsb2NrX2R1bXAKIC0gZHJvcC1jYWNoZXMKIC0gem9uZV9yZWNsYWltX21vZGUKLS0gem9uZV9yZWNsYWltX2ludGVydmFsCistIG1pbl91bm1hcHBlZF9yYXRpbwogLSBwYW5pY19vbl9vb20KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE2NywxNyArMTY3LDE4IEBACiBzaHJpbmsgb3BlcmF0aW9uIGlzIGdsb2JhbCwgbWF5IHRha2UgYSBsb25nIHRpbWUgYW5kIGZyZWUgc2xhYnMKIGluIGFsbCBub2RlcyBvZiB0aGUgc3lzdGVtLgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLXpvbmVfcmVjbGFpbV9pbnRlcnZhbDoKK21pbl91bm1hcHBlZF9yYXRpbzoKIAotVGhlIHRpbWUgYWxsb3dlZCBmb3Igb2ZmIG5vZGUgYWxsb2NhdGlvbnMgYWZ0ZXIgem9uZSByZWNsYWltCi1oYXMgZmFpbGVkIHRvIHJlY2xhaW0gZW5vdWdoIHBhZ2VzIHRvIGFsbG93IGEgbG9jYWwgYWxsb2NhdGlvbi4KK1RoaXMgaXMgYXZhaWxhYmxlIG9ubHkgb24gTlVNQSBrZXJuZWxzLgogCi1UaW1lIGlzIHNldCBpbiBzZWNvbmRzIGFuZCBzZXQgYnkgZGVmYXVsdCB0byAzMCBzZWNvbmRzLgorQSBwZXJjZW50YWdlIG9mIHRoZSBmaWxlIGJhY2tlZCBwYWdlcyBpbiBlYWNoIHpvbmUuICBab25lIHJlY2xhaW0gd2lsbCBvbmx5CitvY2N1ciBpZiBtb3JlIHRoYW4gdGhpcyBwZXJjZW50YWdlIG9mIHBhZ2VzIGFyZSBmaWxlIGJhY2tlZCBhbmQgdW5tYXBwZWQuCitUaGlzIGlzIHRvIGluc3VyZSB0aGF0IGEgbWluaW1hbCBhbW91bnQgb2YgbG9jYWwgcGFnZXMgaXMgc3RpbGwgYXZhaWxhYmxlIGZvcgorZmlsZSBJL08gZXZlbiBpZiB0aGUgbm9kZSBpcyBvdmVyYWxsb2NhdGVkLgogCi1SZWR1Y2UgdGhlIGludGVydmFsIGlmIHVuZGVzaXJlZCBvZmYgbm9kZSBhbGxvY2F0aW9ucyBvY2N1ci4gSG93ZXZlciwgdG9vCi1mcmVxdWVudCBzY2FucyB3aWxsIGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb25vZmYgbm9kZSBhbGxvY2F0aW9uIHBlcmZvcm1hbmNlLgorVGhlIGRlZmF1bHQgaXMgMSBwZXJjZW50LgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAppbmRleCA2Y2I2M2RkLi4wMGQ5YTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CkBAIC01MCwzICs1MCw0IEBACiAgNDkgLT4gUGl4ZWxWaWV3IFBsYXlUViBQNzAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTU0OjQ4MTNdCiAgNTAgLT4gTlBHIFRlY2ggUmVhbCBUViBGTSBUb3AgMTAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjA4NDJdCiAgNTEgLT4gV2luRmFzdCBEVFYyMDAwIEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2NWVdCisgNTIgLT4gR2VuaWF0ZWNoIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjAwODRdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3Bjd2Qtd2F0Y2hkb2cudHh0IGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9wY3dkLXdhdGNoZG9nLnR4dAppbmRleCAxMjE4N2EzLi5kOWVlNjMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3Bjd2Qtd2F0Y2hkb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvcGN3ZC13YXRjaGRvZy50eHQKQEAgLTIyLDc4ICsyMiw5IEBACiAgdG8gcnVuIHRoZSBwcm9ncmFtIHdpdGggYW4gIiYiIHRvIHJ1biBpdCBpbiB0aGUgYmFja2dyb3VuZCEpCiAKICBJZiB5b3Ugd2FudCB0byB3cml0ZSBhIHByb2dyYW0gdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBQQyBXYXRjaGRvZwotIGRyaXZlciwgc2ltcGx5IGRvIHRoZSBmb2xsb3dpbmc6CisgZHJpdmVyLCBzaW1wbHkgdXNlIG9mIG1vZGlmeSB0aGUgd2F0Y2hkb2cgdGVzdCBwcm9ncmFtOgorIERvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYwogCi0tLSBTbmlwcGV0IG9mIGNvZGUgLS0KLS8qCi0gKiBXYXRjaGRvZyBEcml2ZXIgVGVzdCBQcm9ncmFtCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0KLWludCBmZDsKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IHNlbmRzIGFuIElPQ1RMIHRvIHRoZSBkcml2ZXIsIHdoaWNoIGluIHR1cm4gdGlja3MKLSAqIHRoZSBQQyBXYXRjaGRvZyBjYXJkIHRvIHJlc2V0IGl0cyBpbnRlcm5hbCB0aW1lciBzbyBpdCBkb2Vzbid0IHRyaWdnZXIKLSAqIGEgY29tcHV0ZXIgcmVzZXQuCi0gKi8KLXZvaWQga2VlcF9hbGl2ZSh2b2lkKQotewotICAgIGludCBkdW1teTsKLQotICAgIGlvY3RsKGZkLCBXRElPQ19LRUVQQUxJVkUsICZkdW1teSk7Ci19Ci0KLS8qCi0gKiBUaGUgbWFpbiBwcm9ncmFtLiAgUnVuIHRoZSBwcm9ncmFtIHdpdGggIi1kIiB0byBkaXNhYmxlIHRoZSBjYXJkLAotICogb3IgIi1lIiB0byBlbmFibGUgdGhlIGNhcmQuCi0gKi8KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgZmQgPSBvcGVuKCIvZGV2L3dhdGNoZG9nIiwgT19XUk9OTFkpOwotCi0gICAgaWYgKGZkID09IC0xKSB7Ci0JZnByaW50ZihzdGRlcnIsICJXYXRjaGRvZyBkZXZpY2Ugbm90IGVuYWJsZWQuXG4iKTsKLQlmZmx1c2goc3RkZXJyKTsKLQlleGl0KC0xKTsKLSAgICB9Ci0KLSAgICBpZiAoYXJnYyA+IDEpIHsKLQlpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbMV0sICItZCIsIDIpKSB7Ci0JICAgIGlvY3RsKGZkLCBXRElPQ19TRVRPUFRJT05TLCBXRElPU19ESVNBQkxFQ0FSRCk7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgY2FyZCBkaXNhYmxlZC5cbiIpOwotCSAgICBmZmx1c2goc3RkZXJyKTsKLQkgICAgZXhpdCgwKTsKLQl9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChhcmd2WzFdLCAiLWUiLCAyKSkgewotCSAgICBpb2N0bChmZCwgV0RJT0NfU0VUT1BUSU9OUywgV0RJT1NfRU5BQkxFQ0FSRCk7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgY2FyZCBlbmFibGVkLlxuIik7Ci0JICAgIGZmbHVzaChzdGRlcnIpOwotCSAgICBleGl0KDApOwotCX0gZWxzZSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAiLWQgdG8gZGlzYWJsZSwgLWUgdG8gZW5hYmxlLlxuIik7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAicnVuIGJ5IGl0c2VsZiB0byB0aWNrIHRoZSBjYXJkLlxuIik7Ci0JICAgIGZmbHVzaChzdGRlcnIpOwotCSAgICBleGl0KDApOwotCX0KLSAgICB9IGVsc2UgewotCWZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgVGlja2luZyBBd2F5IVxuIik7Ci0JZmZsdXNoKHN0ZGVycik7Ci0gICAgfQotCi0gICAgd2hpbGUoMSkgewotCWtlZXBfYWxpdmUoKTsKLQlzbGVlcCgxKTsKLSAgICB9Ci19Ci0tLSBFbmQgc25pcHBldCAtLQogCiAgT3RoZXIgSU9DVEwgZnVuY3Rpb25zIGluY2x1ZGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXNpbXBsZS5jIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9zcmMvd2F0Y2hkb2ctc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjZjE3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXNpbXBsZS5jCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKSB7CisJaW50IGZkID0gb3BlbigiL2Rldi93YXRjaGRvZyIsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPT0gLTEpIHsKKwkJcGVycm9yKCJ3YXRjaGRvZyIpOworCQlleGl0KDEpOworCX0KKwl3aGlsZSAoMSkgeworCQl3cml0ZShmZCwgIlwwIiwgMSk7CisJCWZzeW5jKGZkKTsKKwkJc2xlZXAoMTApOworCX0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWY2YzE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9zcmMvd2F0Y2hkb2ctdGVzdC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBXYXRjaGRvZyBEcml2ZXIgVGVzdCBQcm9ncmFtCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisKK2ludCBmZDsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IHNlbmRzIGFuIElPQ1RMIHRvIHRoZSBkcml2ZXIsIHdoaWNoIGluIHR1cm4gdGlja3MKKyAqIHRoZSBQQyBXYXRjaGRvZyBjYXJkIHRvIHJlc2V0IGl0cyBpbnRlcm5hbCB0aW1lciBzbyBpdCBkb2Vzbid0IHRyaWdnZXIKKyAqIGEgY29tcHV0ZXIgcmVzZXQuCisgKi8KK3ZvaWQga2VlcF9hbGl2ZSh2b2lkKQoreworICAgIGludCBkdW1teTsKKworICAgIGlvY3RsKGZkLCBXRElPQ19LRUVQQUxJVkUsICZkdW1teSk7Cit9CisKKy8qCisgKiBUaGUgbWFpbiBwcm9ncmFtLiAgUnVuIHRoZSBwcm9ncmFtIHdpdGggIi1kIiB0byBkaXNhYmxlIHRoZSBjYXJkLAorICogb3IgIi1lIiB0byBlbmFibGUgdGhlIGNhcmQuCisgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgZmQgPSBvcGVuKCIvZGV2L3dhdGNoZG9nIiwgT19XUk9OTFkpOworCisgICAgaWYgKGZkID09IC0xKSB7CisJZnByaW50ZihzdGRlcnIsICJXYXRjaGRvZyBkZXZpY2Ugbm90IGVuYWJsZWQuXG4iKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlleGl0KC0xKTsKKyAgICB9CisKKyAgICBpZiAoYXJnYyA+IDEpIHsKKwlpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbMV0sICItZCIsIDIpKSB7CisJICAgIGlvY3RsKGZkLCBXRElPQ19TRVRPUFRJT05TLCBXRElPU19ESVNBQkxFQ0FSRCk7CisJICAgIGZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgY2FyZCBkaXNhYmxlZC5cbiIpOworCSAgICBmZmx1c2goc3RkZXJyKTsKKwkgICAgZXhpdCgwKTsKKwl9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChhcmd2WzFdLCAiLWUiLCAyKSkgeworCSAgICBpb2N0bChmZCwgV0RJT0NfU0VUT1BUSU9OUywgV0RJT1NfRU5BQkxFQ0FSRCk7CisJICAgIGZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgY2FyZCBlbmFibGVkLlxuIik7CisJICAgIGZmbHVzaChzdGRlcnIpOworCSAgICBleGl0KDApOworCX0gZWxzZSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiLWQgdG8gZGlzYWJsZSwgLWUgdG8gZW5hYmxlLlxuIik7CisJICAgIGZwcmludGYoc3RkZXJyLCAicnVuIGJ5IGl0c2VsZiB0byB0aWNrIHRoZSBjYXJkLlxuIik7CisJICAgIGZmbHVzaChzdGRlcnIpOworCSAgICBleGl0KDApOworCX0KKyAgICB9IGVsc2UgeworCWZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgVGlja2luZyBBd2F5IVxuIik7CisJZmZsdXNoKHN0ZGVycik7CisgICAgfQorCisgICAgd2hpbGUoMSkgeworCWtlZXBfYWxpdmUoKTsKKwlzbGVlcCgxKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQKaW5kZXggMjFlZDUxMS4uOTU4ZmYzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dApAQCAtMzQsMjIgKzM0LDcgQEAKIHRoZSB3YXRjaGRvZyBpcyBwaW5nZWQgd2l0aGluIGEgY2VydGFpbiB0aW1lLCB0aGlzIHRpbWUgaXMgY2FsbGVkIHRoZQogdGltZW91dCBvciBtYXJnaW4uICBUaGUgc2ltcGxlc3Qgd2F5IHRvIHBpbmcgdGhlIHdhdGNoZG9nIGlzIHRvIHdyaXRlCiBzb21lIGRhdGEgdG8gdGhlIGRldmljZS4gIFNvIGEgdmVyeSBzaW1wbGUgd2F0Y2hkb2cgZGFlbW9uIHdvdWxkIGxvb2sKLWxpa2UgdGhpczoKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIHsKLQlpbnQgZmQ9b3BlbigiL2Rldi93YXRjaGRvZyIsT19XUk9OTFkpOwotCWlmIChmZD09LTEpIHsKLQkJcGVycm9yKCJ3YXRjaGRvZyIpOwotCQlleGl0KDEpOwotCX0KLQl3aGlsZSgxKSB7Ci0JCXdyaXRlKGZkLCAiXDAiLCAxKTsKLQkJc2xlZXAoMTApOwotCX0KLX0KK2xpa2UgdGhpcyBzb3VyY2UgZmlsZTogIHNlZSBEb2N1bWVudGF0aW9uL3dhdGNoZG9nL3NyYy93YXRjaGRvZy1zaW1wbGUuYwogCiBBIG1vcmUgYWR2YW5jZWQgZHJpdmVyIGNvdWxkIGZvciBleGFtcGxlIGNoZWNrIHRoYXQgYSBIVFRQIHNlcnZlciBpcwogc3RpbGwgcmVzcG9uZGluZyBiZWZvcmUgZG9pbmcgdGhlIHdyaXRlIGNhbGwgdG8gcGluZyB0aGUgd2F0Y2hkb2cuCkBAIC0xMTAsNyArOTUsNDAgQEAKICAgICBpb2N0bChmZCwgV0RJT0NfR0VUVElNRU9VVCwgJnRpbWVvdXQpOwogICAgIHByaW50ZigiVGhlIHRpbWVvdXQgd2FzIGlzICVkIHNlY29uZHNcbiIsIHRpbWVvdXQpOwogCi1FbnZpbnJvbm1lbnRhbCBtb25pdG9yaW5nOgorUHJldGltZW91dHM6CisKK1NvbWUgd2F0Y2hkb2cgdGltZXJzIGNhbiBiZSBzZXQgdG8gaGF2ZSBhIHRyaWdnZXIgZ28gb2ZmIGJlZm9yZSB0aGUKK2FjdHVhbCB0aW1lIHRoZXkgd2lsbCByZXNldCB0aGUgc3lzdGVtLiAgVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGFuIE5NSSwKK2ludGVycnVwdCwgb3Igb3RoZXIgbWVjaGFuaXNtLiAgVGhpcyBhbGxvd3MgTGludXggdG8gcmVjb3JkIHVzZWZ1bAoraW5mb3JtYXRpb24gKGxpa2UgcGFuaWMgaW5mb3JtYXRpb24gYW5kIGtlcm5lbCBjb3JlZHVtcHMpIGJlZm9yZSBpdAorcmVzZXRzLgorCisgICAgcHJldGltZW91dCA9IDEwOworICAgIGlvY3RsKGZkLCBXRElPQ19TRVRQUkVUSU1FT1VULCAmcHJldGltZW91dCk7CisKK05vdGUgdGhhdCB0aGUgcHJldGltZW91dCBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSB0aW1lCit3aGVuIHRoZSB0aW1lb3V0IHdpbGwgZ28gb2ZmLiAgSXQgaXMgbm90IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbAordGhlIHByZXRpbWVvdXQuICBTbywgZm9yIGluc3RhbmNlLCBpZiB5b3Ugc2V0IHRoZSB0aW1lb3V0IHRvIDYwIHNlY29uZHMKK2FuZCB0aGUgcHJldGltZW91dCB0byAxMCBzZWNvbmRzLCB0aGUgcHJldGltb3V0IHdpbGwgZ28gb2YgaW4gNTAKK3NlY29uZHMuICBTZXR0aW5nIGEgcHJldGltZW91dCB0byB6ZXJvIGRpc2FibGVzIGl0LgorCitUaGVyZSBpcyBhbHNvIGEgZ2V0IGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBwcmV0aW1lb3V0OgorCisgICAgaW9jdGwoZmQsIFdESU9DX0dFVFBSRVRJTUVPVVQsICZ0aW1lb3V0KTsKKyAgICBwcmludGYoIlRoZSBwcmV0aW1lb3V0IHdhcyBpcyAlZCBzZWNvbmRzXG4iLCB0aW1lb3V0KTsKKworTm90IGFsbCB3YXRjaGRvZyBkcml2ZXJzIHdpbGwgc3VwcG9ydCBhIHByZXRpbWVvdXQuCisKK0dldCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHJlYm9vdDoKKworU29tZSB3YXRjaGRvZyBkcml2ZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVwb3J0IHRoZSByZW1haW5pbmcgdGltZQorYmVmb3JlIHRoZSBzeXN0ZW0gd2lsbCByZWJvb3QuIFRoZSBXRElPQ19HRVRUSU1FTEVGVCBpcyB0aGUgaW9jdGwKK3RoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHJlYm9vdC4KKworICAgIGlvY3RsKGZkLCBXRElPQ19HRVRUSU1FTEVGVCwgJnRpbWVsZWZ0KTsKKyAgICBwcmludGYoIlRoZSB0aW1lb3V0IHdhcyBpcyAlZCBzZWNvbmRzXG4iLCB0aW1lbGVmdCk7CisKK0Vudmlyb25tZW50YWwgbW9uaXRvcmluZzoKIAogQWxsIHdhdGNoZG9nIGRyaXZlcnMgYXJlIHJlcXVpcmVkIHJldHVybiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0sCiBzb21lIGRvIHRlbXBlcmF0dXJlLCBmYW4gYW5kIHBvd2VyIGxldmVsIG1vbml0b3JpbmcsIHNvbWUgY2FuIHRlbGwgeW91CkBAIC0xNjksNiArMTg3LDEwIEBACiAKIAlXRElPRl9TRVRUSU1FT1VUCUNhbiBzZXQvZ2V0IHRoZSB0aW1lb3V0CiAKK1RoZSB3YXRjaGRvZyBjYW4gZG8gcHJldGltZW91dHMuCisKKwlXRElPRl9QUkVUSU1FT1VUCVByZXRpbWVvdXQgKGluIHNlY29uZHMpLCBnZXQvc2V0CisKIAogRm9yIHRob3NlIGRyaXZlcnMgdGhhdCByZXR1cm4gYW55IGJpdHMgc2V0IGluIHRoZSBvcHRpb24gZmllbGQsIHRoZQogR0VUU1RBVFVTIGFuZCBHRVRCT09UU1RBVFVTIGlvY3RscyBjYW4gYmUgdXNlZCB0byBhc2sgZm9yIHRoZSBjdXJyZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLnR4dCBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0CmluZGV4IGRmZmRhMjkuLjRiMWZmNjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0CkBAIC02NSwyOCArNjUsNyBAQAogTWlub3IgbnVtYmVycyBhcmUgaG93ZXZlciBhbGxvY2F0ZWQgZm9yIGl0LgogCiAKLUV4YW1wbGUgV2F0Y2hkb2cgRHJpdmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQotewotCWludCBmZD1vcGVuKCIvZGV2L3dhdGNoZG9nIixPX1dST05MWSk7Ci0JaWYoZmQ9PS0xKQotCXsKLQkJcGVycm9yKCJ3YXRjaGRvZyIpOwotCQlleGl0KDEpOwotCX0KLQl3aGlsZSgxKQotCXsKLQkJd3JpdGUoZmQsIlwwIiwxKTsKLQkJZnN5bmMoZmQpOwotCQlzbGVlcCgxMCk7Ci0JfQotfQorRXhhbXBsZSBXYXRjaGRvZyBEcml2ZXI6ICBzZWUgRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9zcmMvd2F0Y2hkb2ctc2ltcGxlLmMKIAogCiBDb250YWN0IEluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDMxYTEzNzIuLjVmNzZhNGY1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtODYxLDYgKzg2MSw4IEBACiBET0NCT09LIEZPUiBET0NVTUVOVEFUSU9OCiBQOglNYXJ0aW4gV2FpdHoKIE06CXRhbGlAYWRtaW5naWxkZS5vcmcKK1A6CVJhbmR5IER1bmxhcAorTToJcmR1bmxhcEB4ZW5vdGltZS5uZXQKIFQ6CWdpdCBodHRwOi8vdGFsaS5hZG1pbmdpbGRlLm9yZy9naXQvbGludXgtZG9jYm9vay5naXQKIFM6CU1haW50YWluZWQKIApAQCAtOTI1LDIzICs5MjcsMjEgQEAKIAogRURBQy1DT1JFCiBQOglEb3VnIFRob21wc29uCi1NOglub3JzazVAeG1pc3Npb24uY29tLCBkdGhvbXBzb25AbGludXhuZXR3b3J4LmNvbQotUDoJRGF2ZSBQZXRlcnNvbgotTToJZHNwQGxsbmwuZ292LCBkYXZlX3BldGVyc29uQHBvYm94LmNvbQorTToJbm9yc2s1QHhtaXNzaW9uLmNvbQogTDoJYmx1ZXNtb2tlLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJYmx1ZXNtb2tlLnNvdXJjZWZvcmdlLm5ldAotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCiAKIEVEQUMtRTc1MlgKLVA6CURhdmUgUGV0ZXJzb24KLU06CWRzcEBsbG5sLmdvdiwgZGF2ZV9wZXRlcnNvbkBwb2JveC5jb20KK1A6CU1hcmsgR3Jvc3MKK006CW1hcmsuZ3Jvc3NAaW50ZWwuY29tCiBMOglibHVlc21va2UtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglibHVlc21va2Uuc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCiAKIEVEQUMtRTdYWFgKLVA6CURhdmUgUGV0ZXJzb24KLU06CWRzcEBsbG5sLmdvdiwgZGF2ZV9wZXRlcnNvbkBwb2JveC5jb20KK1A6CURvdWcgVGhvbXBzb24KK006CW5vcnNrNUB4bWlzc2lvbi5jb20KIEw6CWJsdWVzbW9rZS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWJsdWVzbW9rZS5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKQEAgLTIzMDAsNiArMjMwMCwxNCBAQAogVzoJaHR0cDovL3d3dy5wbmQtcGMuZGVtb24uY28udWsvcHJvbWlzZS8KIFM6CU1haW50YWluZWQKIAorUFZSVVNCMiBWSURFTzRMSU5VWCBEUklWRVIKK1A6CU1pa2UgSXNlbHkKK006CWlzZWx5QHBvYm94LmNvbQorTDoJcHZydXNiMkBpc2VseS5uZXQKK0w6CXZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbQorVzoJaHR0cDovL3d3dy5pc2VseS5uZXQvcHZydXNiMi8KK1M6CU1haW50YWluZWQKKwogUFhBMnh4IFNVUFBPUlQKIFA6CU5pY29sYXMgUGl0cmUKIE06CW5pY29AY2FtLm9yZwpAQCAtMjU1NywxMyArMjU2NSw2IEBACiBXOglodHRwOi8vd3d3LndpbmlzY2hob2Zlci5hdC9saW51eHNpc3VzYnZnYS5zaHRtbAogUzoJTWFpbnRhaW5lZAogCi1TTUIgRklMRVNZU1RFTQotUDoJVXJiYW4gV2lkbWFyawotTToJdXJiYW5AdGVzdHN0YXRpb24uY29tCi1XOglodHRwOi8vc2FtYmEub3JnLwotTDoJc2FtYmFAc2FtYmEub3JnCi1TOglNYWludGFpbmVkCi0KIFNNQzkxeCBFVEhFUk5FVCBEUklWRVIKIFA6CU5pY29sYXMgUGl0cmUKIE06CW5pY29AY2FtLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBlOTU2MGM2Zi4uYjM2YWViNiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTQxLDggKzQxLDkgQEAKICAgS0JVSUxEX1ZFUkJPU0UgPSAwCiBlbmRpZgogCi0jIENhbGwgc3BhcnNlIGFzIHBhcnQgb2YgY29tcGlsYXRpb24gb2YgQyBmaWxlcwotIyBVc2UgJ21ha2UgQz0xJyB0byBlbmFibGUgc3BhcnNlIGNoZWNraW5nCisjIENhbGwgY2hlY2tlciBhcyBwYXJ0IG9mIGNvbXBpbGF0aW9uIG9mIEMgZmlsZXMKKyMgVXNlICdtYWtlIEM9MScgdG8gZW5hYmxlIGNoZWNraW5nIChzcGFyc2UsIGJ5IGRlZmF1bHQpCisjIE92ZXJyaWRlIHdpdGggJ21ha2UgQz0xIENIRUNLPWNoZWNrZXJfZXhlY3V0YWJsZSBDSEVDS0ZMQUdTPS4uLi4nCiAKIGlmZGVmIEMKICAgaWZlcSAoIiQob3JpZ2luIEMpIiwgImNvbW1hbmQgbGluZSIpCkBAIC0zMDgsNiArMzA5LDkgQEAKIAogQ0ZMQUdTICAgICAgICAgIDo9IC1XYWxsIC1XdW5kZWYgLVdzdHJpY3QtcHJvdG90eXBlcyAtV25vLXRyaWdyYXBocyBcCiAgICAgICAgICAgICAgICAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24KKyMgRm9yY2UgZ2NjIHRvIGJlaGF2ZSBjb3JyZWN0IGV2ZW4gZm9yIGJ1Z2d5IGRpc3RyaWJ1dGlvbnMKK0NGTEFHUyAgICAgICAgICArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3Rvci1hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1mbm8tc3RhY2stcHJvdGVjdG9yKQogQUZMQUdTICAgICAgICAgIDo9IC1EX19BU1NFTUJMWV9fCiAKICMgUmVhZCBLRVJORUxSRUxFQVNFIGZyb20gaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgKGlmIGl0IGV4aXN0cykKQEAgLTgwOCw4ICs4MTIsOCBAQAogIyBwcmVwYXJlMiBjcmVhdGVzIGEgbWFrZWZpbGUgaWYgdXNpbmcgYSBzZXBhcmF0ZSBvdXRwdXQgZGlyZWN0b3J5CiBwcmVwYXJlMjogcHJlcGFyZTMgb3V0cHV0bWFrZWZpbGUKIAotcHJlcGFyZTE6IHByZXBhcmUyIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIGluY2x1ZGUvYXNtIFwKLSAgICAgICAgICAgICAgICAgICBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKK3ByZXBhcmUxOiBwcmVwYXJlMiBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBpbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCBcCisgICAgICAgICAgICAgICAgICAgaW5jbHVkZS9hc20gaW5jbHVkZS9jb25maWcvYXV0by5jb25mCiBpZm5lcSAoJChLQlVJTERfTU9EVUxFUyksKQogCSQoUSlta2RpciAtcCAkKE1PRFZFUkRJUikKIAkkKFEpcm0gLWYgJChNT0RWRVJESVIpLyoKQEAgLTg0NCwyMSArODQ4LDI2IEBACiAjIG5lZWRzIHRvIGJlIHVwZGF0ZWQsIHNvIHRoaXMgY2hlY2sgaXMgZm9yY2VkIG9uIGFsbCBidWlsZHMKIAogdXRzX2xlbiA6PSA2NAotCi1kZWZpbmUgZmlsZWNoa192ZXJzaW9uLmgKK2RlZmluZSBmaWxlY2hrX3V0c3JlbGVhc2UuaAogCWlmIFsgYGVjaG8gLW4gIiQoS0VSTkVMUkVMRUFTRSkiIHwgd2MgLWMgYCAtZ3QgJCh1dHNfbGVuKSBdOyB0aGVuIFwKLQkgIGVjaG8gJyIkKEtFUk5FTFJFTEVBU0UpIiBleGNlZWRzICQodXRzX2xlbikgY2hhcmFjdGVycycgPiYyOyBcCi0JICBleGl0IDE7IFwKLQlmaTsgXAotCShlY2hvIFwjZGVmaW5lIFVUU19SRUxFQVNFIFwiJChLRVJORUxSRUxFQVNFKVwiOyBcCi0JICBlY2hvIFwjZGVmaW5lIExJTlVYX1ZFUlNJT05fQ09ERSBgZXhwciAkKFZFUlNJT04pIFxcKiA2NTUzNiArICQoUEFUQ0hMRVZFTCkgXFwqIDI1NiArICQoU1VCTEVWRUwpYDsgXAotCSBlY2hvICcjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKSc7IFwKLQkpCisJICBlY2hvICciJChLRVJORUxSRUxFQVNFKSIgZXhjZWVkcyAkKHV0c19sZW4pIGNoYXJhY3RlcnMnID4mMjsgICAgXAorCSAgZXhpdCAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKGVjaG8gXCNkZWZpbmUgVVRTX1JFTEVBU0UgXCIkKEtFUk5FTFJFTEVBU0UpXCI7KQogZW5kZWYKIAotaW5jbHVkZS9saW51eC92ZXJzaW9uLmg6ICQoc3JjdHJlZSkvTWFrZWZpbGUgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgRk9SQ0UKK2RlZmluZSBmaWxlY2hrX3ZlcnNpb24uaAorCShlY2hvIFwjZGVmaW5lIExJTlVYX1ZFUlNJT05fQ09ERSAkKHNoZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZXhwciAkKFZFUlNJT04pIFwqIDY1NTM2ICsgJChQQVRDSExFVkVMKSBcKiAyNTYgKyAkKFNVQkxFVkVMKSk7ICAgICBcCisJZWNobyAnI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSknOykKK2VuZGVmCisKK2luY2x1ZGUvbGludXgvdmVyc2lvbi5oOiAkKHNyY3RyZWUpL01ha2VmaWxlIEZPUkNFCiAJJChjYWxsIGZpbGVjaGssdmVyc2lvbi5oKQogCitpbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaDogaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgRk9SQ0UKKwkkKGNhbGwgZmlsZWNoayx1dHNyZWxlYXNlLmgpCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFBIT05ZICs9IGRlcGVuZCBkZXAKQEAgLTk1MSw3ICs5NjAsOCBAQAogIyBEaXJlY3RvcmllcyAmIGZpbGVzIHJlbW92ZWQgd2l0aCAnbWFrZSBtcnByb3BlcicKIE1SUFJPUEVSX0RJUlMgICs9IGluY2x1ZGUvY29uZmlnIGluY2x1ZGUyCiBNUlBST1BFUl9GSUxFUyArPSAuY29uZmlnIC5jb25maWcub2xkIGluY2x1ZGUvYXNtIC52ZXJzaW9uIC5vbGRfdmVyc2lvbiBcCi0gICAgICAgICAgICAgICAgICBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmggaW5jbHVkZS9saW51eC92ZXJzaW9uLmggXAorICAgICAgICAgICAgICAgICAgaW5jbHVkZS9saW51eC9hdXRvY29uZi5oIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oICAgICAgXAorICAgICAgICAgICAgICAgICAgaW5jbHVkZS9saW51eC91dHNyZWxlYXNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkgIE1vZHVsZS5zeW12ZXJzIHRhZ3MgVEFHUyBjc2NvcGUqCiAKICMgY2xlYW4gLSBEZWxldGUgbW9zdCwgYnV0IGxlYXZlIGVub3VnaCB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCkBAIC0xMDYwLDggKzEwNzAsOCBAQAogCiAJQGVjaG8gICcgIG1ha2UgVj0wfDEgW3RhcmdldHNdIDAgPT4gcXVpZXQgYnVpbGQgKGRlZmF1bHQpLCAxID0+IHZlcmJvc2UgYnVpbGQnCiAJQGVjaG8gICcgIG1ha2UgTz1kaXIgW3RhcmdldHNdIExvY2F0ZSBhbGwgb3V0cHV0IGZpbGVzIGluICJkaXIiLCBpbmNsdWRpbmcgLmNvbmZpZycKLQlAZWNobyAgJyAgbWFrZSBDPTEgICBbdGFyZ2V0c10gQ2hlY2sgYWxsIGMgc291cmNlIHdpdGggJCRDSEVDSyAoc3BhcnNlKScKLQlAZWNobyAgJyAgbWFrZSBDPTIgICBbdGFyZ2V0c10gRm9yY2UgY2hlY2sgb2YgYWxsIGMgc291cmNlIHdpdGggJCRDSEVDSyAoc3BhcnNlKScKKwlAZWNobyAgJyAgbWFrZSBDPTEgICBbdGFyZ2V0c10gQ2hlY2sgYWxsIGMgc291cmNlIHdpdGggJCRDSEVDSyAoc3BhcnNlIGJ5IGRlZmF1bHQpJworCUBlY2hvICAnICBtYWtlIEM9MiAgIFt0YXJnZXRzXSBGb3JjZSBjaGVjayBvZiBhbGwgYyBzb3VyY2Ugd2l0aCAkJENIRUNLJwogCUBlY2hvICAnJwogCUBlY2hvICAnRXhlY3V0ZSAibWFrZSIgb3IgIm1ha2UgYWxsIiB0byBidWlsZCBhbGwgdGFyZ2V0cyBtYXJrZWQgd2l0aCBbKl0gJwogCUBlY2hvICAnRm9yIGZ1cnRoZXIgaW5mbyBzZWUgdGhlIC4vUkVBRE1FIGZpbGUnCkBAIC0xMzUyLDcgKzEzNjIsNyBAQAogCiBhX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoQUZMQUdTKSAkKEFGTEFHU19LRVJORUwpIFwKIAkgICQoTk9TVERJTkNfRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkgICQobW9ka2Vybl9hZmxhZ3MpICQoRVhUUkFfQUZMQUdTKSAkKEFGTEFHU18kKCpGKS5vKQorCSAgJChtb2RrZXJuX2FmbGFncykgJChFWFRSQV9BRkxBR1MpICQoQUZMQUdTXyQoYmFzZXRhcmdldCkubykKIAogcXVpZXRfY21kX2FzX29fUyA9IEFTICAgICAgJEAKIGNtZF9hc19vX1MgICAgICAgPSAkKENDKSAkKGFfZmxhZ3MpIC1jIC1vICRAICQ8CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2Jvb3QvYm9vdHAuYyBiL2FyY2gvYWxwaGEvYm9vdC9ib290cC5jCmluZGV4IGVjNTNjMjguLjNhZjIxYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvYm9vdC9ib290cC5jCisrKyBiL2FyY2gvYWxwaGEvYm9vdC9ib290cC5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9ib290L2Jvb3Rwei5jIGIvYXJjaC9hbHBoYS9ib290L2Jvb3Rwei5jCmluZGV4IGE2NjU3ZjIuLjQzMDdiZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvYm9vdC9ib290cHouYworKysgYi9hcmNoL2FscGhhL2Jvb3QvYm9vdHB6LmMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvYm9vdC9tYWluLmMgYi9hcmNoL2FscGhhL2Jvb3QvbWFpbi5jCmluZGV4IDc4YzliMGIuLjkwZWQ1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvYm9vdC9tYWluLmMKKysrIGIvYXJjaC9hbHBoYS9ib290L21haW4uYwpAQCAtNyw3ICs3LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCmluZGV4IGQzODQ4YzUuLjQyNTY0MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYwpAQCAtNSw3ICs1LDYgQEAKICAqIG1vZHVsZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvbnNvbGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL2NvbnNvbGUuYwppbmRleCBjYjNlNzM5Li5mMzEzYjM0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9jb25zb2xlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29uc29sZS5jCkBAIC01LDcgKzUsNiBAQAogICogbm9uLTAgSS9PIGhvc2UKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMKaW5kZXggN2FmMTViZi4uMDFlY2QwOSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCkBAIC00LDcgKzQsNiBAQAogICogS2VybmVsIGVudHJ5LXBvaW50cy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZ2N0LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9nY3QuYwppbmRleCA4ODI3Njg3Li5jMGM3MTU1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9nY3QuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9nY3QuYwpAQCAtMiw3ICsyLDYgQEAKICAqCWxpbnV4L2FyY2gvYWxwaGEva2VybmVsL2djdC5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2hlYWQuUyBiL2FyY2gvYWxwaGEva2VybmVsL2hlYWQuUwppbmRleCAwOTA1NzIxLi4xZTJhNjJhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaGVhZC5TCkBAIC03LDcgKzcsNiBAQAogICogdGhlIGtlcm5lbCBnbG9iYWwgcG9pbnRlciBhbmQganVtcCB0byB0aGUga2VybmVsIGVudHJ5LXBvaW50LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKaW5kZXggZGE2NzdmOC4uNzI5YzQ3NSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIHNob3VsZCBiZSBlYXNpZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00OSwxNSArNDgsMTUgQEAKIAlzdGF0aWMgaW50IGxhc3RfY3B1OwogCWludCBjcHUgPSBsYXN0X2NwdSArIDE7CiAKLQlpZiAoIWlycV9kZXNjW2lycV0uaGFuZGxlci0+c2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCisJaWYgKCFpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSB8fCBpcnFfdXNlcl9hZmZpbml0eVtpcnFdKQogCQlyZXR1cm4gMTsKIAogCXdoaWxlICghY3B1X3Bvc3NpYmxlKGNwdSkpCiAJCWNwdSA9IChjcHUgPCAoTlJfQ1BVUy0xKSA/IGNwdSArIDEgOiAwKTsKIAlsYXN0X2NwdSA9IGNwdTsKIAotCWlycV9hZmZpbml0eVtpcnFdID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXItPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KGlycSwgY3B1bWFza19vZl9jcHUoY3B1KSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtOTMsMTQgKzkyLDE0IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaXJxXSk7CiAjZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpcnFdLmhhbmRsZXItPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpcnFdLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlYyVzIiwKLQkJCShhY3Rpb24tPmZsYWdzICYgU0FfSU5URVJSVVBUKT8nKyc6JyAnLAorCQkJKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKT8nKyc6JyAnLAogCQkJYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KSB7CiAJCQlzZXFfcHJpbnRmKHAsICIsICVjJXMiLAotCQkJCSAgKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpPycrJzonICcsCisJCQkJICAoYWN0aW9uLT5mbGFncyAmIElSUUZfRElTQUJMRUQpPycrJzonICcsCiAJCQkJICAgYWN0aW9uLT5uYW1lKTsKIAkJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCmluZGV4IDlkMzRjZTIuLmRkZjVjZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCkBAIC0yLDcgKzIsNiBAQAogICogQWxwaGEgc3BlY2lmaWMgaXJxIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtMjE1LDcgKzIxNCw3IEBACiAKIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm5hbWUJCT0gInRpbWVyIiwKIH07CiAKQEAgLTIzMyw3ICsyMzIsNyBAQAogaW5pdF9ydGNfaXJxKHZvaWQpCiB7CiAJaXJxX2Rlc2NbUlRDX0lSUV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1JUQ19JUlFdLmhhbmRsZXIgPSAmcnRjX2lycV90eXBlOworCWlycV9kZXNjW1JUQ19JUlFdLmNoaXAgPSAmcnRjX2lycV90eXBlOwogCXNldHVwX2lycShSVENfSVJRLCAmdGltZXJfaXJxYWN0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2k4MjU5LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwppbmRleCBiMTg4NjgzLi5lYmJhZGJjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwpAQCAtNyw3ICs3LDYgQEAKICAqIFN0YXJ0ZWQgaGFja2luZyBmcm9tIGxpbnV4LTIuMy4zMHByZTYvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTA5LDcgKzEwOCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaTgyNTlhX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmk4MjU5YV9pcnFfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoMiwgJmNhc2NhZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3B5eGlzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYwppbmRleCAxNDZhMjBiLi4zYjU4MTQxNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3B5eGlzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3B5eGlzLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQlpZiAoKGlnbm9yZV9tYXNrID4+IGkpICYgMSkKIAkJCWNvbnRpbnVlOwogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQgfCBJUlFfTEVWRUw7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmcHl4aXNfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmcHl4aXNfaXJxX3R5cGU7CiAJfQogCiAJc2V0dXBfaXJxKDE2KzcsICZpc2FfY2FzY2FkZV9pcnFhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3NybS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3NybS5jCmluZGV4IDBhODdlNDYuLjhlNGQxMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfc3JtLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkJaWYgKGkgPCA2NCAmJiAoKGlnbm9yZV9tYXNrID4+IGkpICYgMSkpCiAJCQljb250aW51ZTsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnNybV9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZzcm1faXJxX3R5cGU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9tYWNodmVjX2ltcGwuaCBiL2FyY2gvYWxwaGEva2VybmVsL21hY2h2ZWNfaW1wbC5oCmluZGV4IDExZjk5NmYuLjA4YjgzMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL21hY2h2ZWNfaW1wbC5oCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL21hY2h2ZWNfaW1wbC5oCkBAIC02LDcgKzYsNiBAQAogICogVGhpcyBmaWxlIGhhcyBnb29kaWVzIHRvIGhlbHAgc2ltcGxpZnkgaW5zdGFudGlhdGlvbiBvZiBtYWNoaW5lIHZlY3RvcnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAKIC8qIFdoZWUuICBUaGVzZSBzeXN0ZW1zIGRvbid0IGhhdmUgYW4gSEFFOgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwppbmRleCAyYThiMzY0Li5mZmI3ZDU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwpAQCAtMTIsNyArMTIsNiBAQAogICogTm92IDIwMDAsIEl2YW4gS29rc2hheXNreSA8aW5rQGp1cmFzc2ljLnBhcmsubXN1LnJ1PgogICoJICAgICBQQ0ktUENJIGJyaWRnZXMgY2xlYW51cAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTI0LDEyICsxMjMsMTIgQEAKIAogdm9pZAogcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKKwkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXVuc2lnbmVkIGxvbmcgYWxpZ250bzsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmVzLT5zdGFydDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCS8qIE1ha2Ugc3VyZSB3ZSBzdGFydCBhdCBvdXIgbWluIG9uIGFsbCBob3NlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGM3NjBhODMuLjQxZWJmNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTgsNyArOCw2IEBACiAgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC00NzUsNyArNDc0LDcgQEAKICAqLwogCiB1bnNpZ25lZCBsb25nCi10aHJlYWRfc2F2ZWRfcGModGFza190ICp0KQordGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodCk7CiAJdW5zaWduZWQgbG9uZyBmcCwgc3AgPSB0YXNrX3RocmVhZF9pbmZvKHQpLT5wY2Iua3NwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvdG8uaCBiL2FyY2gvYWxwaGEva2VybmVsL3Byb3RvLmgKaW5kZXggZTE1NjBmYi4uMmE2ZTNkYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvdG8uaAorKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtYzM3YzkzeC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjOTN4LmMKaW5kZXggNDIxZTUxZS4uMjYzNmNjMCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjOTN4LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjOTN4LmMKQEAgLTIsNyArMiw2IEBACiAgKiBTTUMgMzdDOTNYIGluaXRpYWxpemF0aW9uIGNvZGUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMKaW5kZXggNWM5OGZjOC4uOTkwYWM2MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYwpAQCAtNTcsNyArNTcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtY29ucy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3JtY29ucy5jCmluZGV4IDNiMzBkNGYuLjlkN2RmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NybWNvbnMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1jb25zLmMKQEAgLTUsNyArNSw2IEBACiAgKiAoVFRZIGRyaXZlciBhbmQgY29uc29sZSBkcml2ZXIpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfYWxjb3IuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCmluZGV4IGQ3ZjBlOTcuLmQ2OTI2YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCkBAIC04LDcgKzgsNiBAQAogICogQ29kZSBzdXBwb3J0aW5nIHRoZSBBTENPUiBhbmQgWExUIChYTC0zMDAvMzY2LzQzMykuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTE0NCw3ICsxNDMsNyBAQAogCQlpZiAoaSA+PSAxNisyMCAmJiBpIDw9IDE2KzMwKQogCQkJY29udGludWU7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZhbGNvcl9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZhbGNvcl9pcnFfdHlwZTsKIAl9CiAJaTgyNTlhX2lycV90eXBlLmFjayA9IGFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKaW5kZXggOGUzMzc0ZC4uMjVhMjE1MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKQEAgLTksNyArOSw2IEBACiAgKiBQQzE2NCBhbmQgTFgxNjQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTEyNCw3ICsxMjMsNyBAQAogCiAJCWZvciAoaSA9IDE2OyBpIDwgMzU7ICsraSkgewogCQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZjYWJyaW9sZXRfaXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNhYnJpb2xldF9pcnFfdHlwZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYwppbmRleCBkNWRhNmIxLi5kZDYxMDNiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYwpAQCAtMTIsNyArMTIsNiBAQAogICogQ29kZSBzdXBwb3J0aW5nIHRoZSBEUDI2NCAoRVY2K1RTVU5BTUkpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0zMDAsNyArMjk5LDcgQEAKIAlsb25nIGk7CiAJZm9yIChpID0gaW1pbjsgaSA8PSBpbWF4OyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gb3BzOworCQlpcnFfZGVzY1tpXS5jaGlwID0gb3BzOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2ViNjRwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYwppbmRleCA2MWE3OWMzLi5lZDEwOGI2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvZGUgc3VwcG9ydGluZyB0aGUgRUI2NCsgYW5kIEVCNjYuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTEzNyw3ICsxMzYsNyBAQAogCiAJZm9yIChpID0gMTY7IGkgPCAzMjsgKytpKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZlYjY0cF9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlYjY0cF9pcnFfdHlwZTsKIAl9CQkKIAogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19laWdlci5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMKaW5kZXggYmQ2ZTVmMC4uNjRhNzg1YiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQgfCBJUlFfTEVWRUw7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZWlnZXJfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmZWlnZXJfaXJxX3R5cGU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKaW5kZXggZmNhYmI3Yy4uNGFjMmIzMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYwpAQCAtNzQsNyArNzQsNyBAQAogCQkgKiB0aGUgSVBMIGZyb20gYmVpbmcgZHJvcHBlZCBkdXJpbmcgaGFuZGxlciBwcm9jZXNzaW5nLgogCQkgKi8KIAkJaWYgKGlycV9kZXNjW2lycV0uYWN0aW9uKQotCQkJaXJxX2Rlc2NbaXJxXS5hY3Rpb24tPmZsYWdzIHw9IFNBX0lOVEVSUlVQVDsKKwkJCWlycV9kZXNjW2lycV0uYWN0aW9uLT5mbGFncyB8PSBJUlFGX0RJU0FCTEVEOwogCXJldHVybiAwOwogfQogCkBAIC0yMDYsMTEgKzIwNiwxMSBAQAogewogCWluaXRfaTgyNTlhX2lycXMoKTsKIAotCWlycV9kZXNjWzFdLmhhbmRsZXIgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOwotCWlycV9kZXNjWzRdLmhhbmRsZXIgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOwotCWlycV9kZXNjWzNdLmhhbmRsZXIgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOwotCWlycV9kZXNjWzddLmhhbmRsZXIgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOwotCWlycV9kZXNjWzldLmhhbmRsZXIgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOworCWlycV9kZXNjWzFdLmNoaXAgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOworCWlycV9kZXNjWzRdLmNoaXAgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOworCWlycV9kZXNjWzNdLmNoaXAgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOworCWlycV9kZXNjWzddLmNoaXAgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOworCWlycV9kZXNjWzldLmNoaXAgPSAmamVuc2VuX2xvY2FsX2lycV90eXBlOwogCiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCmluZGV4IGUzMmZlZTUuLjM2ZDIxNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCS8qIFNldCB1cCB0aGUgbHNpIGlycXMuICAqLwogCWZvciAoaSA9IDA7IGkgPCAxMjg7ICsraSkgewogCQlpcnFfZGVzY1tiYXNlICsgaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tiYXNlICsgaV0uaGFuZGxlciA9IGxzaV9vcHM7CisJCWlycV9kZXNjW2Jhc2UgKyBpXS5jaGlwID0gbHNpX29wczsKIAl9CiAKIAkvKiBEaXNhYmxlIHRoZSBpbXBsZW1lbnRlZCBpcnFzIGluIGhhcmR3YXJlLiAgKi8KQEAgLTMxNyw3ICszMTcsNyBAQAogCS8qIFNldCB1cCB0aGUgbXNpIGlycXMuICAqLwogCWZvciAoaSA9IDEyODsgaSA8ICgxMjggKyA1MTIpOyArK2kpIHsKIAkJaXJxX2Rlc2NbYmFzZSArIGldLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKLQkJaXJxX2Rlc2NbYmFzZSArIGldLmhhbmRsZXIgPSBtc2lfb3BzOworCQlpcnFfZGVzY1tiYXNlICsgaV0uY2hpcCA9IG1zaV9vcHM7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCkBAIC0zMzUsNyArMzM1LDcgQEAKIAkvKiBSZXNlcnZlIHRoZSBsZWdhY3kgaXJxcy4gICovCiAJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm1hcnZlbF9sZWdhY3lfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmbWFydmVsX2xlZ2FjeV9pcnFfdHlwZTsKIAl9CiAKIAkvKiBJbml0IHRoZSBpbzcgaXJxcy4gICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMKaW5kZXggZDc4YTBkYS4uY2M0YzU4MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pa2FzYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvZGUgc3VwcG9ydGluZyB0aGUgTUlLQVNBIChBbHBoYVNlcnZlciAxMDAwKS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMTE3LDcgKzExNiw3IEBACiAKIAlmb3IgKGkgPSAxNjsgaSA8IDMyOyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm1pa2FzYV9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZtaWthc2FfaXJxX3R5cGU7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbm9yaXRha2UuYwppbmRleCA2NTA2MWY1Li4yZDNjZmY3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbm9yaXRha2UuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbm9yaXRha2UuYwpAQCAtOSw3ICs5LDYgQEAKICAqIENPUkVMTEUgKEFscGhhU2VydmVyIDgwMCksIGFuZCBBTENPUiBQcmltbyAoQWxwaGFTdGF0aW9uIDYwMEEpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xMzksNyArMTM4LDcgQEAKIAogCWZvciAoaSA9IDE2OyBpIDwgNDg7ICsraSkgewogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQgfCBJUlFfTEVWRUw7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbm9yaXRha2VfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmbm9yaXRha2VfaXJxX3R5cGU7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMKaW5kZXggMDU4ODhhMC4uOTQ5NjA3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcmF3aGlkZS5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAogCWZvciAoaSA9IDE2OyBpIDwgMTI4OyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnJhd2hpZGVfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmcmF3aGlkZV9pcnFfdHlwZTsKIAl9CiAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yeDE2NC5jCmluZGV4IDU4NDA0MjQuLjZhZTUwNjA1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJcngxNjRfdXBkYXRlX2lycV9odygwKTsKIAlmb3IgKGkgPSAxNjsgaSA8IDQwOyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnJ4MTY0X2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnJ4MTY0X2lycV90eXBlOwogCX0KIAogCWluaXRfaTgyNTlhX2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMKaW5kZXggYTdmZjg0NC4uYTdhMTQ2NCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb2RlIHN1cHBvcnRpbmcgdGhlIFNhYmxlLCBTYWJsZS1HYW1tYSwgYW5kIEx5bnggc3lzdGVtcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtNTM3LDcgKzUzNiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgKytpKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZzYWJsZV9seW54X2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnNhYmxlX2x5bnhfaXJxX3R5cGU7CiAJfQogCiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Npby5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Npby5jCmluZGV4IDEzMWEyZDkuLmNkODVlZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zaW8uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2lvLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIEtlbmV0aWNzJ3MgUGxhdGZvcm0gMjAwMCwgQXZhbnRpIChBbHBoYVN0YXRpb24pLCBYTCwgYW5kIEFscGhhQm9vazEuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYwppbmRleCA3OTU1YmRmLi4yYzc1Y2QxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAogCWZvciAoaSA9IDE2OyBpIDwgMTI4OyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnRha2FyYV9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZ0YWthcmFfaXJxX3R5cGU7CiAJfQogCiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYwppbmRleCAyNTUxZmI0Li4zMDJhYWIzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYwpAQCAtMTIsNyArMTIsNiBAQAogICoJR3Jhbml0ZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xODksNyArMTg4LDcgQEAKIAlsb25nIGk7CiAJZm9yIChpID0gaW1pbjsgaSA8PSBpbWF4OyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gb3BzOworCQlpcnFfZGVzY1tpXS5jaGlwID0gb3BzOwogCX0KIH0KIApAQCAtMjgwLDE1ICsyNzksMTUgQEAKIAkgKiBhbGwgcmVwb3J0ZWQgdG8gdGhlIGtlcm5lbCBhcyBtYWNoaW5lIGNoZWNrcywgc28gdGhlIGhhbmRsZXIKIAkgKiBpcyBhIG5vcCBzbyBpdCBjYW4gYmUgY2FsbGVkIHRvIGNvdW50IHRoZSBpbmRpdmlkdWFsIGV2ZW50cy4KIAkgKi8KLQlyZXF1ZXN0X2lycSg2MysxNiwgdGl0YW5faW50cl9ub3AsIFNBX0lOVEVSUlVQVCwgCisJcmVxdWVzdF9pcnEoNjMrMTYsIHRpdGFuX2ludHJfbm9wLCBJUlFGX0RJU0FCTEVELAogCQkgICAgIkNDaGlwIEVycm9yIiwgTlVMTCk7Ci0JcmVxdWVzdF9pcnEoNjIrMTYsIHRpdGFuX2ludHJfbm9wLCBTQV9JTlRFUlJVUFQsIAorCXJlcXVlc3RfaXJxKDYyKzE2LCB0aXRhbl9pbnRyX25vcCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICJQQ2hpcCAwIEhfRXJyb3IiLCBOVUxMKTsKLQlyZXF1ZXN0X2lycSg2MSsxNiwgdGl0YW5faW50cl9ub3AsIFNBX0lOVEVSUlVQVCwgCisJcmVxdWVzdF9pcnEoNjErMTYsIHRpdGFuX2ludHJfbm9wLCBJUlFGX0RJU0FCTEVELAogCQkgICAgIlBDaGlwIDEgSF9FcnJvciIsIE5VTEwpOwotCXJlcXVlc3RfaXJxKDYwKzE2LCB0aXRhbl9pbnRyX25vcCwgU0FfSU5URVJSVVBULCAKKwlyZXF1ZXN0X2lycSg2MCsxNiwgdGl0YW5faW50cl9ub3AsIElSUUZfRElTQUJMRUQsCiAJCSAgICAiUENoaXAgMCBDX0Vycm9yIiwgTlVMTCk7Ci0JcmVxdWVzdF9pcnEoNTkrMTYsIHRpdGFuX2ludHJfbm9wLCBTQV9JTlRFUlJVUFQsIAorCXJlcXVlc3RfaXJxKDU5KzE2LCB0aXRhbl9pbnRyX25vcCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICJQQ2hpcCAxIENfRXJyb3IiLCBOVUxMKTsKIAogCS8qIApAQCAtMzQ5LDkgKzM0OCw5IEBACiAJICogSG9vayBhIGNvdXBsZSBvZiBleHRyYSBlcnIgaW50ZXJydXB0cyB0aGF0IHRoZQogCSAqIGNvbW1vbiB0aXRhbiBjb2RlIHdvbid0LgogCSAqLwotCXJlcXVlc3RfaXJxKDUzKzE2LCB0aXRhbl9pbnRyX25vcCwgU0FfSU5URVJSVVBULCAKKwlyZXF1ZXN0X2lycSg1MysxNiwgdGl0YW5faW50cl9ub3AsIElSUUZfRElTQUJMRUQsCiAJCSAgICAiTk1JIiwgTlVMTCk7Ci0JcmVxdWVzdF9pcnEoNTArMTYsIHRpdGFuX2ludHJfbm9wLCBTQV9JTlRFUlJVUFQsIAorCXJlcXVlc3RfaXJxKDUwKzE2LCB0aXRhbl9pbnRyX25vcCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICJUZW1wZXJhdHVyZSBXYXJuaW5nIiwgTlVMTCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwppbmRleCAxNTUzZjQ3Li4yMmM1Nzk4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwpAQCAtMTk5LDE0ICsxOTksMTQgQEAKIAkJaWYgKGkgPT0gMikKIAkJCWNvbnRpbnVlOwogCQlpcnFfZGVzY1tpK2lycV9iaWFzXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQgfCBJUlFfTEVWRUw7Ci0JCWlycV9kZXNjW2kraXJxX2JpYXNdLmhhbmRsZXIgPSAmd2lsZGZpcmVfaXJxX3R5cGU7CisJCWlycV9kZXNjW2kraXJxX2JpYXNdLmNoaXAgPSAmd2lsZGZpcmVfaXJxX3R5cGU7CiAJfQogCiAJaXJxX2Rlc2NbMzYraXJxX2JpYXNdLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKLQlpcnFfZGVzY1szNitpcnFfYmlhc10uaGFuZGxlciA9ICZ3aWxkZmlyZV9pcnFfdHlwZTsKKwlpcnFfZGVzY1szNitpcnFfYmlhc10uY2hpcCA9ICZ3aWxkZmlyZV9pcnFfdHlwZTsKIAlmb3IgKGkgPSA0MDsgaSA8IDY0OyArK2kpIHsKIAkJaXJxX2Rlc2NbaStpcnFfYmlhc10uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpK2lycV9iaWFzXS5oYW5kbGVyID0gJndpbGRmaXJlX2lycV90eXBlOworCQlpcnFfZGVzY1tpK2lycV9iaWFzXS5jaGlwID0gJndpbGRmaXJlX2lycV90eXBlOwogCX0KIAogCXNldHVwX2lycSgzMitpcnFfYmlhcywgJmlzYV9lbmFibGUpOwkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCAzODU5NzQ5Li41MGVjY2RlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAyMDAzLTA2LTAzCVIuIFNjb3R0IEJhaWxleSA8c2NvdHQuYmFpbGV5QGVkcy5jb20+CiAgKglUaWdodGVuIHNhbml0eSBpbiB0aW1lX2luaXQgZnJvbSAxJSAoMTAsMDAwIFBQTSkgdG8gMjUwIFBQTQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMKaW5kZXggZjlkMTIzMS4uZDZlNjY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90cmFwcy5jCkBAIC04LDcgKzgsNiBAQAogICogVGhpcyBmaWxlIGluaXRpYWxpemVzIHRoZSB0cmFwIGVudHJ5IHBvaW50cwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAwOTIyZTA3Li43MTQ3MGU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjY0LWFscGhhIikKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbGliL2NhbGxiYWNrX3NybS5TIGIvYXJjaC9hbHBoYS9saWIvY2FsbGJhY2tfc3JtLlMKaW5kZXggMDUyOGFjZDAuLjg4MDRiZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbGliL2NhbGxiYWNrX3NybS5TCisrKyBiL2FyY2gvYWxwaGEvbGliL2NhbGxiYWNrX3NybS5TCkBAIC0yLDcgKzIsNiBAQAogICoJYXJjaC9hbHBoYS9saWIvY2FsbGJhY2tfc3JtLlMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NvbnNvbGUuaD4KIAogLnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbGliL3VkZWxheS5jIGIvYXJjaC9hbHBoYS9saWIvdWRlbGF5LmMKaW5kZXggMWM4NzliYi4uNjlkNTJhYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9saWIvdWRlbGF5LmMKKysrIGIvYXJjaC9hbHBoYS9saWIvdWRlbGF5LmMKQEAgLTQsNyArNCw2IEBACiAgKiBEZWxheSByb3V0aW5lcywgdXNpbmcgYSBwcmUtY29tcHV0ZWQgImxvb3BzX3Blcl9qaWZmeSIgdmFsdWUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciB1ZGVsYXkncyB1c2Ugb2Ygc21wX3Byb2Nlc3Nvcl9pZCAqLwogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9leHRhYmxlLmMgYi9hcmNoL2FscGhhL21tL2V4dGFibGUuYwppbmRleCBjMzg0OWJhLi5kYzdhZWRhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL2V4dGFibGUuYworKysgYi9hcmNoL2FscGhhL21tL2V4dGFibGUuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGxpbnV4L2FyY2gvYWxwaGEvbW0vZXh0YWJsZS5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vZmF1bHQuYyBiL2FyY2gvYWxwaGEvbW0vZmF1bHQuYwppbmRleCA2NGFjZTVhLi42MjJkYWJkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCkBAIC00LDcgKzQsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9pbml0LmMgYi9hcmNoL2FscGhhL21tL2luaXQuYwppbmRleCA1NDRhYzVkLi45MTdkYWQxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL2luaXQuYworKysgYi9hcmNoL2FscGhhL21tL2luaXQuYwpAQCAtNiw3ICs2LDYgQEAKIAogLyogMi4zLnggem9uZSBhbGxvY2F0b3IsIDE5OTkgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhQHN1c2UuZGU+ICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vbnVtYS5jIGIvYXJjaC9hbHBoYS9tbS9udW1hLmMKaW5kZXggYmY2YjY1Yy4uYjgyNmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9udW1hLmMKKysrIGIvYXJjaC9hbHBoYS9tbS9udW1hLmMKQEAgLTYsNyArNiw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPiBTdVNFCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDNkMWEzZmIuLmY4MWE2MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNDcsNiArNDcsMTggQEAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vbWNhLnR4dD4gKGFuZCBlc3BlY2lhbGx5IHRoZSB3ZWIgcGFnZSBnaXZlbgogCSAgdGhlcmUpIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGJ1aWxkIGFuIE1DQSBidXMga2VybmVsLgogCitjb25maWcgR0VORVJJQ19IQVJESVJRUworCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEhBUkRJUlFTX1NXX1JFU0VORAorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSwogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTEyMSwxMSArMTMzLDExIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFSTSBMdGQgVmVyc2F0aWxlIGJvYXJkLgogCi1jb25maWcgQVJDSF9BVDkxUk05MjAwCi0JYm9vbCAiQXRtZWwgQVQ5MVJNOTIwMCIKK2NvbmZpZyBBUkNIX0FUOTEKKwlib29sICJBdG1lbCBBVDkxIgogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYW4gQXRtZWwKLQkgIEFUOTFSTTkyMDAtYmFzZWQgYm9hcmQuCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgQXRtZWwgQVQ5MVJNOTIwMAorCSAgYW5kIEFUOTFTQU05eHh4IHByb2Nlc3NvcnMuCiAKIGNvbmZpZyBBUkNIX0NMUFM3NTAwCiAJYm9vbCAiQ2lycnVzIENMLVBTNzUwMEZFIgpAQCAtMTg4LDIzICsyMDAsMjcgQEAKIAogY29uZmlnIEFSQ0hfSU9QM1hYCiAJYm9vbCAiSU9QM3h4LWJhc2VkIgorCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSU9QM1hYIChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgogCiBjb25maWcgQVJDSF9JWFA0WFgKIAlib29sICJJWFA0eHgtYmFzZWQiCisJZGVwZW5kcyBvbiBNTVUKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDRYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KIAogY29uZmlnIEFSQ0hfSVhQMjAwMAogCWJvb2wgIklYUDI0MDAvMjgwMC1iYXNlZCIKKwlkZXBlbmRzIG9uIE1NVQogCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDI0MDAvMjgwMCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KIAogY29uZmlnIEFSQ0hfSVhQMjNYWAogIAlib29sICJJWFAyM1hYLWJhc2VkIgorCWRlcGVuZHMgb24gTU1VCiAgCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDIzeHggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCkBAIC0yMjksNiArMjQ1LDcgQEAKIAogY29uZmlnIEFSQ0hfUFhBCiAJYm9vbCAiUFhBMnh4LWJhc2VkIgorCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IEFSQ0hfTVREX1hJUAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsJ3MgUFhBMlhYIHByb2Nlc3NvciBsaW5lLgpAQCAtMzM5LDYgKzM1NiwxMCBAQAogCWRlcGVuZHMgb24gQ1BVX1hTQ0FMRSAmJiAhWFNDQUxFX1BNVV9USU1FUgogCWRlZmF1bHQgeQogCitpZiAhTU1VCitzb3VyY2UgImFyY2gvYXJtL0tjb25maWctbm9tbXUiCitlbmRpZgorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9hcm0vY29tbW9uL0tjb25maWciCkBAIC01MzgsNyArNTU5LDcgQEAKIAkJICAgQVJDSF9MVUJCT0NLIHx8IE1BQ0hfTUFJTlNUT05FIHx8IEFSQ0hfTkVUV0lOREVSIHx8IFwKIAkJICAgQVJDSF9PTUFQIHx8IEFSQ0hfUDcyMFQgfHwgQVJDSF9QWEFfSURQIHx8IFwKIAkJICAgQVJDSF9TQTExMDAgfHwgQVJDSF9TSEFSSyB8fCBBUkNIX1ZFUlNBVElMRSB8fCBcCi0JCSAgIEFSQ0hfQVQ5MVJNOTIwMAorCQkgICBBUkNIX0FUOTFSTTkyMDAgfHwgTUFDSF9UUklaRVBTNAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgTEVEcyBvbiB5b3VyIG1hY2hpbmUgd2lsbCBiZSB1c2VkCiAJICB0byBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGN1cnJlbnQgc3lzdGVtIHN0YXR1cy4KQEAgLTY2OSw3ICs2OTAsNyBAQAogCiBlbmRtZW51CiAKLWlmIChBUkNIX1NBMTEwMCB8fCBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9PTUFQMSkKK2lmIChBUkNIX1NBMTEwMCB8fCBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9PTUFQKQogCiBtZW51ICJDUFUgRnJlcXVlbmN5IHNjYWxpbmciCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYTNiYmFhZi4uMzM0NWM2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTExNCw3ICsxMTQsNyBAQAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9INzIwWCkJICAgOj0gaDcyMHgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQUFFQzIwMDApICAgOj0gYWFlYzIwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUkVBTFZJRVcpICAgOj0gcmVhbHZpZXcKLSBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkgOj0gYXQ5MXJtOTIwMAorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9BVDkxKSAgICAgICA6PSBhdDkxcm05MjAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0VQOTNYWCkgICAgIDo9IGVwOTN4eAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9QTlg0MDA4KSAgICA6PSBwbng0MDA4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX05FVFgpICAgICAgIDo9IG5ldHgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWNscHM3NTAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1jbHBzNzUwMC5TCmluZGV4IDRhOGE2ODkuLjk0MWM1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWNscHM3NTAwLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtY2xwczc1MDAuUwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSBOZXh1cyBFbGVjdHJvbmljcyBMdGQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIAkJLyogVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB3YXlzIHRoZSBrZXJuZWwgY2FuIGJlCiAJCSAgIGJvb3RlZCBvbiBhIDc1MDAgc3lzdGVtOiBmcm9tIEFuZ2VsIChsb2FkZWQgaW4gUkFNKSwgZnJvbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtbDcyMDAuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLWw3MjAwLlMKaW5kZXggYjA4YmQyMy4uZDBlM2IyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtbDcyMDAuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1sNzIwMC5TCkBAIC03LDcgKzcsNiBAQAogICogaXMgbWVyZ2VkIHdpdGggaGVhZC5TIGJ5IHRoZSBsaW5rZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpZm5kZWYgQ09ORklHX0FSQ0hfTDcyMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNhMTEwMC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMKaW5kZXggNWFlZmZmZC4uNGM4YzBlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2hhcnBzbC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2hhcnBzbC5TCmluZGV4IDU5YWQ2OTYuLmViMDA4NGVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaGFycHNsLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2hhcnBzbC5TCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQteHNjYWxlLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC14c2NhbGUuUwppbmRleCBkM2ZlMjUzMy4uNzNjNWQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQteHNjYWxlLlMKQEAgLTUsNyArNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggMjMwMTZmNi4uMTRhOWZmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC04LDcgKzgsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAvKgpAQCAtNDQ4LDggKzQ0NywxMSBAQAogCQltb3YJcjEsICMtMQogCQltY3IJcDE1LCAwLCByMywgYzIsIGMwLCAwCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAkJbWNyCXAxNSwgMCwgcjEsIGMzLCBjMCwgMAlAIGxvYWQgZG9tYWluIGFjY2VzcyBjb250cm9sCi0JCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBsb2FkIGNvbnRyb2wgcmVnaXN0ZXIKLQkJbW92CXBjLCBscgorCQliCTFmCisJCS5hbGlnbgk1CQkJQCBjYWNoZSBsaW5lIGFsaWduZWQKKzE6CQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgbG9hZCBjb250cm9sIHJlZ2lzdGVyCisJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBhbmQgcmVhZCBpdCBiYWNrIHRvCisJCXN1YglwYywgbHIsIHIwLCBsc3IgIzMyCUAgcHJvcGVybHkgZmx1c2ggcGlwZWxpbmUKIAogLyoKICAqIEFsbCBjb2RlIGZvbGxvd2luZyB0aGlzIGxpbmUgaXMgcmVsb2NhdGFibGUuICBJdCBpcyByZWxvY2F0ZWQgYnkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYyBiL2FyY2gvYXJtL2NvbW1vbi9naWMuYwppbmRleCBjMDJkYzgxLi5mM2MxZWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZ2ljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2dpYy5jCkBAIC0zMyw2ICszMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmdpY19kaXN0X2Jhc2U7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2U7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9jb250cm9sbGVyX2xvY2spOwogCiAvKgogICogUm91dGluZXMgdG8gYWNrbm93bGVkZ2UsIGRpc2FibGUgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzCkBAIC01MiwzMiArNTMsNDUgQEAKIHN0YXRpYyB2b2lkIGdpY19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdTMyIG1hc2sgPSAxIDw8IChpcnEgJSAzMik7CisKKwlzcGluX2xvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogCXdyaXRlbChtYXNrLCBnaWNfZGlzdF9iYXNlICsgR0lDX0RJU1RfRU5BQkxFX0NMRUFSICsgKGlycSAvIDMyKSAqIDQpOwogCXdyaXRlbChpcnEsIGdpY19jcHVfYmFzZSArIEdJQ19DUFVfRU9JKTsKKwlzcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGdpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXUzMiBtYXNrID0gMSA8PCAoaXJxICUgMzIpOworCisJc3Bpbl9sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKIAl3cml0ZWwobWFzaywgZ2ljX2Rpc3RfYmFzZSArIEdJQ19ESVNUX0VOQUJMRV9DTEVBUiArIChpcnEgLyAzMikgKiA0KTsKKwlzcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGdpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdTMyIG1hc2sgPSAxIDw8IChpcnEgJSAzMik7CisKKwlzcGluX2xvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogCXdyaXRlbChtYXNrLCBnaWNfZGlzdF9iYXNlICsgR0lDX0RJU1RfRU5BQkxFX1NFVCArIChpcnEgLyAzMikgKiA0KTsKKwlzcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCBnaWNfc2V0X2NwdShzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGdpY19zZXRfY3B1KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrX3ZhbCkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZyA9IGdpY19kaXN0X2Jhc2UgKyBHSUNfRElTVF9UQVJHRVQgKyAoaXJxICYgfjMpOwogCXVuc2lnbmVkIGludCBzaGlmdCA9IChpcnEgJSA0KSAqIDg7CisJdW5zaWduZWQgaW50IGNwdSA9IGZpcnN0X2NwdShtYXNrX3ZhbCk7CiAJdTMyIHZhbDsKIAorCXNwaW5fbG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CisJaXJxX2Rlc2NbaXJxXS5jcHUgPSBjcHU7CiAJdmFsID0gcmVhZGwocmVnKSAmIH4oMHhmZiA8PCBzaGlmdCk7CiAJdmFsIHw9IDEgPDwgKGNwdSArIHNoaWZ0KTsKIAl3cml0ZWwodmFsLCByZWcpOworCXNwaW5fdW5sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKIH0KICNlbmRpZgogCkBAIC04Niw3ICsxMDAsNyBAQAogCS5tYXNrCQk9IGdpY19tYXNrX2lycSwKIAkudW5tYXNrCQk9IGdpY191bm1hc2tfaXJxLAogI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2NwdQk9IGdpY19zZXRfY3B1LAorCS5zZXRfYWZmaW5pdHkJPSBnaWNfc2V0X2NwdSwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCmluZGV4IDBkYWZiYTMuLmZiYzNhYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYworKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIEJhc2VkIG9uIHNhMTExMS5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwppbmRleCAzZjY4ZGI4Li4xY2RiMjZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBBbGwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHByb3ZpZGVkIGhlcmUgYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZAogICogZnJvbSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgd2l0aCBwcm9wZXIgYXJndW1lbnRzIHdoZW4gcmVxdWlyZWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNTEsNyArMTUwLDcgQEAKIHNhMTExMV9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IHN0YXQwLCBzdGF0MSwgaTsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBkZXNjLT5kYXRhOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfZGF0YShpcnEpOwogCiAJc3RhdDAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMCk7CiAJc3RhdDEgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMSk7CkBAIC0xNjksMTEgKzE2OCwxMSBAQAogCiAJZm9yIChpID0gSVJRX1NBMTExMV9TVEFSVDsgc3RhdDA7IGkrKywgc3RhdDAgPj49IDEpCiAJCWlmIChzdGF0MCAmIDEpCi0JCQlkb19lZGdlX0lSUShpLCBpcnFfZGVzYyArIGksIHJlZ3MpOworCQkJaGFuZGxlX2VkZ2VfaXJxKGksIGlycV9kZXNjICsgaSwgcmVncyk7CiAKIAlmb3IgKGkgPSBJUlFfU0ExMTExX1NUQVJUICsgMzI7IHN0YXQxOyBpKyssIHN0YXQxID4+PSAxKQogCQlpZiAoc3RhdDEgJiAxKQotCQkJZG9fZWRnZV9JUlEoaSwgaXJxX2Rlc2MgKyBpLCByZWdzKTsKKwkJCWhhbmRsZV9lZGdlX2lycShpLCBpcnFfZGVzYyArIGksIHJlZ3MpOwogCiAJLyogRm9yIGxldmVsLWJhc2VkIGludGVycnVwdHMgKi8KIAlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi90aW1lLWFjb3JuLmMgYi9hcmNoL2FybS9jb21tb24vdGltZS1hY29ybi5jCmluZGV4IDQ4NmFkZDguLjNmNjBkZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi90aW1lLWFjb3JuLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3RpbWUtYWNvcm4uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC03Niw3ICs3Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlvY190aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gInRpbWVyIiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAogCS5oYW5kbGVyCT0gaW9jX3RpbWVyX2ludGVycnVwdAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3VlbmdpbmUuYyBiL2FyY2gvYXJtL2NvbW1vbi91ZW5naW5lLmMKaW5kZXggZGZjYTU5Ni4uOTVjODUwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3VlbmdpbmUuYworKysgYi9hcmNoL2FybS9jb21tb24vdWVuZ2luZS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYTgyYzUwNS5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYTgyYzUwNS5jCmluZGV4IGVmNzE2YTUuLmJhMmU2MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWE4MmM1MDUuYworKysgYi9hcmNoL2FybS9jb21tb24vdmlhODJjNTA1LmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKaW5kZXggOWUxYzFjYy4uNGYzZDhkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZwpAQCAtMTAzLDYgKzEwMyw3IEBACiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CiBDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCmluZGV4IDZlMDgwNWEuLjA4YjVkYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKQEAgLTEwMyw2ICsxMDMsNyBAQAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQogQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKaW5kZXggNjljMzllMC4uYmVlNzgxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdGViOTIwMF9kZWZjb25maWcKQEAgLTEwNSw2ICsxMDUsNyBAQAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQogQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Nhcm1ldmFfZGVmY29uZmlnCmluZGV4IDVjY2QyOWEuLjhhMDc1YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jYXJtZXZhX2RlZmNvbmZpZwpAQCAtODIsNiArODIsNyBAQAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxPXkKIENPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKaW5kZXggOTRiZDk5My4uMzU5NDE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZwpAQCAtMTAzLDYgKzEwMyw3IEBACiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CiBDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCmluZGV4IDE1MTkxMjQuLjY0MGQ3MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKQEAgLTEwMyw2ICsxMDMsNyBAQAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQogQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCmluZGV4IDUxZGVkMjAuLjFkYjYzM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZwpAQCAtMTA1LDYgKzEwNSw3IEBACiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CiBDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnCmluZGV4IGZlZTRmNTYuLjQ1Mzk2ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mva2I5MjAyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tiOTIwMl9kZWZjb25maWcKQEAgLTgwLDYgKzgwLDcgQEAKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxPXkKIENPTkZJR19BUkNIX0FUOTFSTTkyMDA9eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggZWUzZWNiZC4uMDVhZGIwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwyMCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0Ci0jIFdlZCBOb3YgIDkgMTg6NTM6NDAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3CisjIFRodSBKdW4gMjkgMTU6MjU6MTggMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCkBAIC0yOSwyNiArMzAsMjYgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTU2LDcgKzU3LDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtNjQsNiArNjQsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODEsMTYgKzgyLDI2IEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKQEAgLTk4LDExICsxMDksNiBAQAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAKICMKICMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKQEAgLTE0MSw2ICsxNDcsNyBAQAogQ09ORklHX01BQ0hfT01BUF9IMj15CiAjIENPTkZJR19NQUNIX09NQVBfSDMgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9PTUFQX09TSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05PS0lBNzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfT01BUF9HRU5FUklDIGlzIG5vdCBzZXQKIAogIwpAQCAtMTc3LDcgKzE4NCw2IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCi1DT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTE4OSw2ICsxOTUsOCBAQAogIwogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX05PX0lETEVfSFo9eQorQ09ORklHX0haPTEyOAorIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0yNDksNiArMjU3LDggQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE0gaXMgbm90IHNldAogCiAjCkBAIC0yNTksOSArMjY5LDEyIEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjc4LDEyICsyOTEsMTggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yOTUsNiArMzE0LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zMTIsNyArMzM2LDYgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zMzMsNiArMzU2LDEyIEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQpAQCAtNTI2LDYgKzU1NSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUzNCw2ICs1NjQsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1OSw4ICs1OTAsOCBAQAogIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCkBAIC01NzIsNiArNjAzLDcgQEAKICMKICMgVFBNIGRldmljZXMKICMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCkBAIC01ODAsMTAgKzYxMiwyMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKworIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCkBAIC01OTEsMTMgKzYzNSwyMyBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCiAjCiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTYwNywxMSArNjYxLDEzIEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKQEAgLTYzNSw3ICs2OTEsNiBAQAogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1JMIGlzIG5vdCBzZXQKIAogIwogIyBMb2dvIGNvbmZpZ3VyYXRpb24KQEAgLTY2MCwxNiArNzE1LDE1IEBACiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiBDT05GSUdfU09VTkRfUFJJTUU9eQotIyBDT05GSUdfT0JTT0xFVEVfT1NTX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX09TUyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC02ODAsMTcgKzczNCw2IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAogCiAjCiAjIE1NQy9TRCBDYXJkIHN1cHBvcnQKQEAgLTY5OCwyMCArNzQxLDI3IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKIENPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc0MSw3ICs3OTEsNyBAQAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04NDMsMTAgKzg5MywxMyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCmluZGV4IDU0MDFjMDEuLjJiNGE2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKQEAgLTg1LDYgKzg1LDcgQEAKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQogQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMD15CiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RyaXplcHM0X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY5OGRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKQEAgLTAsMCArMSwxNTc5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKKyMgU2F0IEp1biAyNCAyMjo0NToxNCAyMDA2CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9UUklaRVBTND15CitDT05GSUdfTUFDSF9UUklaRVBTNF9DT05YUz15CisjIENPTkZJR19NQUNIX1RSSVpFUFM0X0FOWSBpcyBub3Qgc2V0CitDT05GSUdfUFhBMjd4PXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD1tCisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1BDTUNJQV9QWEEyWFg9bQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfVElNRVI9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MAorQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgY29uc29sZT10dHlTMCwxMTUyMDBuOCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CitDT05GSUdfRlBFX05XRlBFX1hQPXkKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19QTV9MRUdBQ1k9eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FQTT15CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9DVF9BQ0NUPXkKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KKyMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCisjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1FVRVVFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0lSREE9bQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSTkVUPW0KK0NPTkZJR19JUkNPTU09bQorQ09ORklHX0lSREFfVUxUUkE9eQorCisjCisjIElyREEgb3B0aW9ucworIworQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKK0NPTkZJR19JUkRBX0ZBU1RfUlI9eQorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0lSVFRZX1NJUj1tCisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworCisjCisjIEZJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfVVNCX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfU0lHTUFURUxfRklSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9GSUNQIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJRFRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVDNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJMVUVDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlRMPXkKK0NPTkZJR19ORlRMX1JXPXkKK0NPTkZJR19JTkZUTD15CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKKyMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4NDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfVFJJWkVQUzQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfRE9DMjAwMVBMVVM9eQorQ09ORklHX01URF9ET0NQUk9CRT15CitDT05GSUdfTVREX0RPQ0VDQz15CisjIENPTkZJR19NVERfRE9DUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01URF9ET0NQUk9CRV9BRERSRVNTPTAKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVA9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRERSRVNTPTAKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfQkJUV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD15CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9NAorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15CitDT05GSUdfQkxLX0RFVl9JREVDUz1tCisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfSURFX1BYQV9DRj15CitDT05GSUdfSURFX0FSTT15CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPW0KK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorQ09ORklHX0RBVklDT01fUEhZPXkKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisjIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIworIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dBVkVMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05FVFdBVkUgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMSBGcmVxdWVuY3kgSG9wcGluZyBjYXJkcyBzdXBwb3J0CisjCisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0CisjCitDT05GSUdfSEVSTUVTPW0KKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfSEVSTUVTPW0KKyMgQ09ORklHX1BDTUNJQV9TUEVDVFJVTSBpcyBub3Qgc2V0CitDT05GSUdfQUlST19DUz1tCisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUQVA9bQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKK0NPTkZJR19IT1NUQVBfQ1M9bQorQ09ORklHX05FVF9XSVJFTEVTUz15CisKKyMKKyMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVFNERVY9eQorQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTY0MAorQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9ZPTQ4MAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CisjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAorQ09ORklHX01PVVNFX1NFUklBTD15CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1VJTlBVVD1tCisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU0ExMTAwX1dBVENIRE9HPXkKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCitDT05GSUdfSTJDX1BYQT15CitDT05GSUdfSTJDX1BYQV9TTEFWRT15CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009bQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9bQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VQ0IxNDAwPXkKK0NPTkZJR19VQ0IxNDAwX1RTPXkKKworIworIyBMRUQgZGV2aWNlcworIworQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CitDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLPXkKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj15CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQorQ09ORklHX0ZPTlRTPXkKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfREVWSUNFPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19MQ0RfREVWSUNFPXkKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0hXREVQPW0KK0NPTkZJR19TTkRfUkFXTUlEST1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCisjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworQ09ORklHX1NORF9BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfQUM5N19CVVM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKKworIworIyBBTFNBIEFSTSBkZXZpY2VzCisjCitDT05GSUdfU05EX1BYQTJYWF9QQ009eQorQ09ORklHX1NORF9QWEEyWFhfQUM5Nz15CisKKyMKKyMgVVNCIGRldmljZXMKKyMKK0NPTkZJR19TTkRfVVNCX0FVRElPPW0KKworIworIyBQQ01DSUEgZGV2aWNlcworIworIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVE9VQ0hTQ1JFRU49bQorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fUEFOSklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl8zTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fSVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKK0NPTkZJR19VU0JfRFVNTVlfSENEPXkKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfUFhBPXkKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKworIworIyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1NBMTEwMD15CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTE1IgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlNfRlM9eQorQ09ORklHX0pGRlNfRlNfVkVSQk9TRT0wCitDT05GSUdfSkZGU19QUk9DX0ZTPXkKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjJfQUNMPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1YzX0FDTD15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorQ09ORklHX0xETV9QQVJUSVRJT049eQorIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMTUiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX09QUk9GSUxFPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfU0VDTFZMIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDQ9eQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1JFRURfU09MT01PTj15CitDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBhNjAxYjhiLi5mMGMwY2RiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0yMiw3ICsyMiwxMCBAQAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiBvYmotJChDT05GSUdfT0FCSV9DT01QQVQpCSs9IHN5c19vYWJpLWNvbXBhdC5vCiAKLW9iai0kKENPTkZJR19JV01NWFQpCQkrPSBpd21teHQubworb2JqLSQoQ09ORklHX0NSVU5DSCkJCSs9IGNydW5jaC5vIGNydW5jaC1iaXRzLm8KK0FGTEFHU19jcnVuY2gtYml0cy5vCQk6PSAtV2EsLW1jcHU9ZXA5MzEyCisKK29iai0kKENPTkZJR19JV01NWFQpCQkrPSBpd21teHQubyBpd21teHQtbm90aWZpZXIubwogQUZMQUdTX2l3bW14dC5vCQkJOj0gLVdhLC1tY3B1PWl3bW14dAogCiBpZm5lcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FwbS5jIGIvYXJjaC9hcm0va2VybmVsL2FwbS5jCmluZGV4IDJiZWQyOTAuLjMzYzU1NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcG0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXBtLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIFtUaGlzIGRvY3VtZW50IGlzIGF2YWlsYWJsZSBmcm9tIE1pY3Jvc29mdCBhdDoKICAqICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9od2Rldi9idXNiaW9zL2FtcF8xMi5odG1dCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKaW5kZXggYzQ5YjVkNC4uZGE2OWU2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTEwOSwxMSArMTA5LDEzIEBACiBFWFBPUlRfU1lNQk9MKF9fbWVtemVybyk7CiAKIAkvKiB1c2VyIG1lbSAoc2VnbWVudCkgKi8KLUVYUE9SVF9TWU1CT0woX19hcmNoX2NvcHlfZnJvbV91c2VyKTsKLUVYUE9SVF9TWU1CT0woX19hcmNoX2NvcHlfdG9fdXNlcik7Ci1FWFBPUlRfU1lNQk9MKF9fYXJjaF9jbGVhcl91c2VyKTsKLUVYUE9SVF9TWU1CT0woX19hcmNoX3N0cm5sZW5fdXNlcik7Ci1FWFBPUlRfU1lNQk9MKF9fYXJjaF9zdHJuY3B5X2Zyb21fdXNlcik7CitFWFBPUlRfU1lNQk9MKF9fc3Rybmxlbl91c2VyKTsKK0VYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CisKKyNpZmRlZiBDT05GSUdfTU1VCitFWFBPUlRfU1lNQk9MKF9fY29weV9mcm9tX3VzZXIpOworRVhQT1JUX1NZTUJPTChfX2NvcHlfdG9fdXNlcik7CitFWFBPUlRfU1lNQk9MKF9fY2xlYXJfdXNlcik7CiAKIEVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8xKTsKIEVYUE9SVF9TWU1CT0woX19nZXRfdXNlcl8yKTsKQEAgLTEyMyw2ICsxMjUsNyBAQAogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzIpOwogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzQpOwogRVhQT1JUX1NZTUJPTChfX3B1dF91c2VyXzgpOworI2VuZGlmCiAKIAkvKiBjcnlwdG8gaGFzaCAqLwogRVhQT1JUX1NZTUJPTChzaGFfdHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMzk2ZWZiYS4uY2MyZDU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTYwLDYgKzYwLDkgQEAKICNpZmRlZiBDT05GSUdfSVdNTVhUCiAgIERFRklORShUSV9JV01NWFRfU1RBVEUsCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZnBzdGF0ZS5pd21teHQpKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19DUlVOQ0gKKyAgREVGSU5FKFRJX0NSVU5DSF9TVEFURSwJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcnVuY2hzdGF0ZSkpOworI2VuZGlmCiAgIEJMQU5LKCk7CiAgIERFRklORShTX1IwLAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcjApKTsKICAgREVGSU5FKFNfUjEsCQkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMSkpOwpAQCAtMTAyLDYgKzEwNSw3IEBACiAgIEJMQU5LKCk7CiAgIERFRklORShQUk9DX0lORk9fU1osCQlzaXplb2Yoc3RydWN0IHByb2NfaW5mb19saXN0KSk7CiAgIERFRklORShQUk9DSU5GT19JTklURlVOQywJb2Zmc2V0b2Yoc3RydWN0IHByb2NfaW5mb19saXN0LCBfX2NwdV9mbHVzaCkpOwotICBERUZJTkUoUFJPQ0lORk9fTU1VRkxBR1MsCW9mZnNldG9mKHN0cnVjdCBwcm9jX2luZm9fbGlzdCwgX19jcHVfbW11X2ZsYWdzKSk7CisgIERFRklORShQUk9DSU5GT19NTV9NTVVGTEFHUywJb2Zmc2V0b2Yoc3RydWN0IHByb2NfaW5mb19saXN0LCBfX2NwdV9tbV9tbXVfZmxhZ3MpKTsKKyAgREVGSU5FKFBST0NJTkZPX0lPX01NVUZMQUdTLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY19pbmZvX2xpc3QsIF9fY3B1X2lvX21tdV9mbGFncykpOwogICByZXR1cm4gMDsgCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKaW5kZXggMzAyZmMxNC4uOTY0ZmFhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKiAgQml0cyB0YWtlbiBmcm9tIHZhcmlvdXMgcGxhY2VzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0zMDQsNyArMzAzLDcgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdAogcGRldl9maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnJvb3QsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUzsgaSsrKSB7CkBAIC02MzQsOSArNjMzLDkgQEAKICAqIHdoaWNoIG1pZ2h0IGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCiB2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyAmJiBzdGFydCAmIDB4MzAwKQogCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuYyBiL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuYwppbmRleCA2MGNmYTdmLi4wYTEzODU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NvbXBhdC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgdGhlIGtlcm5lbCBmb3IgNSB5ZWFycyBmcm9tIG5vdyAoMjAwMSkuIFRoaXMgd2lsbCBhbGxvdyBib290IGxvYWRlcnMKICAqICB0byBjb252ZXJ0IHRvIHRoZSBuZXcgc3RydWN0IHRhZyB3YXkuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NydW5jaC1iaXRzLlMgYi9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLWJpdHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjY4ODY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL2NydW5jaC1iaXRzLlMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBhcmNoL2FybS9rZXJuZWwvY3J1bmNoLWJpdHMuUworICogQ2lycnVzIE1hdmVyaWNrQ3J1bmNoIGNvbnRleHQgc3dpdGNoaW5nIGFuZCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KKyAqCisgKiBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSB0aGUgaVdNTVh0IGNvZGUgYnkgTmljb2xhcyBQaXRyZSwgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9lcDkzeHgtcmVncy5oPgorCisvKgorICogV2UgY2FuJ3QgdXNlIGhleCBjb25zdGFudHMgaGVyZSBkdWUgdG8gYSBidWcgaW4gZ2FzLgorICovCisjZGVmaW5lIENSVU5DSF9NVkRYMAkJMAorI2RlZmluZSBDUlVOQ0hfTVZEWDEJCTgKKyNkZWZpbmUgQ1JVTkNIX01WRFgyCQkxNgorI2RlZmluZSBDUlVOQ0hfTVZEWDMJCTI0CisjZGVmaW5lIENSVU5DSF9NVkRYNAkJMzIKKyNkZWZpbmUgQ1JVTkNIX01WRFg1CQk0MAorI2RlZmluZSBDUlVOQ0hfTVZEWDYJCTQ4CisjZGVmaW5lIENSVU5DSF9NVkRYNwkJNTYKKyNkZWZpbmUgQ1JVTkNIX01WRFg4CQk2NAorI2RlZmluZSBDUlVOQ0hfTVZEWDkJCTcyCisjZGVmaW5lIENSVU5DSF9NVkRYMTAJCTgwCisjZGVmaW5lIENSVU5DSF9NVkRYMTEJCTg4CisjZGVmaW5lIENSVU5DSF9NVkRYMTIJCTk2CisjZGVmaW5lIENSVU5DSF9NVkRYMTMJCTEwNAorI2RlZmluZSBDUlVOQ0hfTVZEWDE0CQkxMTIKKyNkZWZpbmUgQ1JVTkNIX01WRFgxNQkJMTIwCisjZGVmaW5lIENSVU5DSF9NVkFYMEwJCTEyOAorI2RlZmluZSBDUlVOQ0hfTVZBWDBNCQkxMzIKKyNkZWZpbmUgQ1JVTkNIX01WQVgwSAkJMTM2CisjZGVmaW5lIENSVU5DSF9NVkFYMUwJCTE0MAorI2RlZmluZSBDUlVOQ0hfTVZBWDFNCQkxNDQKKyNkZWZpbmUgQ1JVTkNIX01WQVgxSAkJMTQ4CisjZGVmaW5lIENSVU5DSF9NVkFYMkwJCTE1MgorI2RlZmluZSBDUlVOQ0hfTVZBWDJNCQkxNTYKKyNkZWZpbmUgQ1JVTkNIX01WQVgySAkJMTYwCisjZGVmaW5lIENSVU5DSF9NVkFYM0wJCTE2NAorI2RlZmluZSBDUlVOQ0hfTVZBWDNNCQkxNjgKKyNkZWZpbmUgQ1JVTkNIX01WQVgzSAkJMTcyCisjZGVmaW5lIENSVU5DSF9EU1BTQwkJMTc2CisKKyNkZWZpbmUgQ1JVTkNIX1NJWkUJCTE4NAorCisJLnRleHQKKworLyoKKyAqIExhenkgc3dpdGNoaW5nIG9mIGNydW5jaCBjb3Byb2Nlc3NvciBjb250ZXh0CisgKgorICogcjEwID0gc3RydWN0IHRocmVhZF9pbmZvIHBvaW50ZXIKKyAqIHI5ICA9IHJldF9mcm9tX2V4Y2VwdGlvbgorICogbHIgID0gdW5kZWZpbmVkIGluc3RyIGV4aXQKKyAqCisgKiBjYWxsZWQgZnJvbSBwcmVmZXRjaCBleGNlcHRpb24gaGFuZGxlciB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKKyAqLworRU5UUlkoY3J1bmNoX3Rhc2tfZW5hYmxlKQorCWxkcglyOCwgPShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxMzAwMDApCUAgc3lzY29uIGFkZHIKKworCWxkcglyMSwgW3I4LCAjMHg4MF0KKwl0c3QJcjEsICMweDAwODAwMDAwCQkJQCBhY2Nlc3MgdG8gY3J1bmNoIGVuYWJsZWQ/CisJbW92bmUJcGMsIGxyCQkJCUAgaWYgc28gbm8gYnVzaW5lc3MgaGVyZQorCW1vdglyMywgIzB4YWEJCQlAIHVubG9jayBzeXNjb24gc3dsb2NrCisJc3RyCXIzLCBbcjgsICMweGMwXQorCW9ycglyMSwgcjEsICMweDAwODAwMDAwCQlAIGVuYWJsZSBhY2Nlc3MgdG8gY3J1bmNoCisJc3RyCXIxLCBbcjgsICMweDgwXQorCisJbGRyCXIzLCA9Y3J1bmNoX293bmVyCisJYWRkCXIwLCByMTAsICNUSV9DUlVOQ0hfU1RBVEUJQCBnZXQgdGFzayBjcnVuY2ggc2F2ZSBhcmVhCisJbGRyCXIyLCBbc3AsICM2MF0JCQlAIGN1cnJlbnQgdGFzayBwYyB2YWx1ZQorCWxkcglyMSwgW3IzXQkJCUAgZ2V0IGN1cnJlbnQgY3J1bmNoIG93bmVyCisJc3RyCXIwLCBbcjNdCQkJQCB0aGlzIHRhc2sgbm93IG93bnMgY3J1bmNoCisJc3ViCXIyLCByMiwgIzQJCQlAIGFkanVzdCBwYyBiYWNrCisJc3RyCXIyLCBbc3AsICM2MF0KKworCWxkcglyMiwgW3I4LCAjMHg4MF0KKwltb3YJcjIsIHIyCQkJCUAgZmx1c2ggb3V0IGVuYWJsZSAoQEBAKQorCisJdGVxCXIxLCAjMAkJCQlAIHRlc3QgZm9yIGxhc3Qgb3duZXJzaGlwCisJbW92CWxyLCByOQkJCQlAIG5vcm1hbCBleGl0IGZyb20gZXhjZXB0aW9uCisJYmVxCWNydW5jaF9sb2FkCQkJQCBubyBvd25lciwgc2tpcCBzYXZlCisKK2NydW5jaF9zYXZlOgorCWNmc3RyNjQJCW12ZHgwLCBbcjEsICNDUlVOQ0hfTVZEWDBdCUAgc2F2ZSA2NGIgcmVnaXN0ZXJzCisJY2ZzdHI2NAkJbXZkeDEsIFtyMSwgI0NSVU5DSF9NVkRYMV0KKwljZnN0cjY0CQltdmR4MiwgW3IxLCAjQ1JVTkNIX01WRFgyXQorCWNmc3RyNjQJCW12ZHgzLCBbcjEsICNDUlVOQ0hfTVZEWDNdCisJY2ZzdHI2NAkJbXZkeDQsIFtyMSwgI0NSVU5DSF9NVkRYNF0KKwljZnN0cjY0CQltdmR4NSwgW3IxLCAjQ1JVTkNIX01WRFg1XQorCWNmc3RyNjQJCW12ZHg2LCBbcjEsICNDUlVOQ0hfTVZEWDZdCisJY2ZzdHI2NAkJbXZkeDcsIFtyMSwgI0NSVU5DSF9NVkRYN10KKwljZnN0cjY0CQltdmR4OCwgW3IxLCAjQ1JVTkNIX01WRFg4XQorCWNmc3RyNjQJCW12ZHg5LCBbcjEsICNDUlVOQ0hfTVZEWDldCisJY2ZzdHI2NAkJbXZkeDEwLCBbcjEsICNDUlVOQ0hfTVZEWDEwXQorCWNmc3RyNjQJCW12ZHgxMSwgW3IxLCAjQ1JVTkNIX01WRFgxMV0KKwljZnN0cjY0CQltdmR4MTIsIFtyMSwgI0NSVU5DSF9NVkRYMTJdCisJY2ZzdHI2NAkJbXZkeDEzLCBbcjEsICNDUlVOQ0hfTVZEWDEzXQorCWNmc3RyNjQJCW12ZHgxNCwgW3IxLCAjQ1JVTkNIX01WRFgxNF0KKwljZnN0cjY0CQltdmR4MTUsIFtyMSwgI0NSVU5DSF9NVkRYMTVdCisKKyNpZmRlZiBfX0FSTUVCX18KKyNlcnJvciBmaXggbWUgZm9yIEFSTUVCCisjZW5kaWYKKworCWNmbXYzMmFsCW12ZngwLCBtdmF4MAkJCUAgc2F2ZSA3MmIgYWNjdW11bGF0b3JzCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMExdCisJY2ZtdjMyYW0JbXZmeDAsIG12YXgwCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYME1dCisJY2ZtdjMyYWgJbXZmeDAsIG12YXgwCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMEhdCisJY2ZtdjMyYWwJbXZmeDAsIG12YXgxCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMUxdCisJY2ZtdjMyYW0JbXZmeDAsIG12YXgxCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMU1dCisJY2ZtdjMyYWgJbXZmeDAsIG12YXgxCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMUhdCisJY2ZtdjMyYWwJbXZmeDAsIG12YXgyCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMkxdCisJY2ZtdjMyYW0JbXZmeDAsIG12YXgyCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMk1dCisJY2ZtdjMyYWgJbXZmeDAsIG12YXgyCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYMkhdCisJY2ZtdjMyYWwJbXZmeDAsIG12YXgzCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYM0xdCisJY2ZtdjMyYW0JbXZmeDAsIG12YXgzCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYM01dCisJY2ZtdjMyYWgJbXZmeDAsIG12YXgzCisJY2ZzdHIzMgkJbXZmeDAsIFtyMSwgI0NSVU5DSF9NVkFYM0hdCisKKwljZm12MzJzYwltdmR4MCwgZHNwc2MJCQlAIHNhdmUgc3RhdHVzIHdvcmQKKwljZnN0cjY0CQltdmR4MCwgW3IxLCAjQ1JVTkNIX0RTUFNDXQorCisJdGVxCQlyMCwgIzAJCQkJQCBhbnl0aGluZyB0byBsb2FkPworCWNmbGRyNjRlcQltdmR4MCwgW3IxLCAjQ1JVTkNIX01WRFgwXQlAIG12ZHgwIHdhcyBjbG9iYmVyZWQKKwltb3ZlcQkJcGMsIGxyCisKK2NydW5jaF9sb2FkOgorCWNmbGRyNjQJCW12ZHgwLCBbcjAsICNDUlVOQ0hfRFNQU0NdCUAgbG9hZCBzdGF0dXMgd29yZAorCWNmbXZzYzMyCWRzcHNjLCBtdmR4MAorCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMExdCUAgbG9hZCA3MmIgYWNjdW11bGF0b3JzCisJY2ZtdmFsMzIJbXZheDAsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYME1dCisJY2ZtdmFtMzIJbXZheDAsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMEhdCisJY2ZtdmFoMzIJbXZheDAsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMUxdCisJY2ZtdmFsMzIJbXZheDEsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMU1dCisJY2ZtdmFtMzIJbXZheDEsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMUhdCisJY2ZtdmFoMzIJbXZheDEsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMkxdCisJY2ZtdmFsMzIJbXZheDIsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMk1dCisJY2ZtdmFtMzIJbXZheDIsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYMkhdCisJY2ZtdmFoMzIJbXZheDIsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYM0xdCisJY2ZtdmFsMzIJbXZheDMsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYM01dCisJY2ZtdmFtMzIJbXZheDMsIG12ZngwCisJY2ZsZHIzMgkJbXZmeDAsIFtyMCwgI0NSVU5DSF9NVkFYM0hdCisJY2ZtdmFoMzIJbXZheDMsIG12ZngwCisKKwljZmxkcjY0CQltdmR4MCwgW3IwLCAjQ1JVTkNIX01WRFgwXQlAIGxvYWQgNjRiIHJlZ2lzdGVycworCWNmbGRyNjQJCW12ZHgxLCBbcjAsICNDUlVOQ0hfTVZEWDFdCisJY2ZsZHI2NAkJbXZkeDIsIFtyMCwgI0NSVU5DSF9NVkRYMl0KKwljZmxkcjY0CQltdmR4MywgW3IwLCAjQ1JVTkNIX01WRFgzXQorCWNmbGRyNjQJCW12ZHg0LCBbcjAsICNDUlVOQ0hfTVZEWDRdCisJY2ZsZHI2NAkJbXZkeDUsIFtyMCwgI0NSVU5DSF9NVkRYNV0KKwljZmxkcjY0CQltdmR4NiwgW3IwLCAjQ1JVTkNIX01WRFg2XQorCWNmbGRyNjQJCW12ZHg3LCBbcjAsICNDUlVOQ0hfTVZEWDddCisJY2ZsZHI2NAkJbXZkeDgsIFtyMCwgI0NSVU5DSF9NVkRYOF0KKwljZmxkcjY0CQltdmR4OSwgW3IwLCAjQ1JVTkNIX01WRFg5XQorCWNmbGRyNjQJCW12ZHgxMCwgW3IwLCAjQ1JVTkNIX01WRFgxMF0KKwljZmxkcjY0CQltdmR4MTEsIFtyMCwgI0NSVU5DSF9NVkRYMTFdCisJY2ZsZHI2NAkJbXZkeDEyLCBbcjAsICNDUlVOQ0hfTVZEWDEyXQorCWNmbGRyNjQJCW12ZHgxMywgW3IwLCAjQ1JVTkNIX01WRFgxM10KKwljZmxkcjY0CQltdmR4MTQsIFtyMCwgI0NSVU5DSF9NVkRYMTRdCisJY2ZsZHI2NAkJbXZkeDE1LCBbcjAsICNDUlVOQ0hfTVZEWDE1XQorCisJbW92CXBjLCBscgorCisvKgorICogQmFjayB1cCBjcnVuY2ggcmVncyB0byBzYXZlIGFyZWEgYW5kIGRpc2FibGUgYWNjZXNzIHRvIHRoZW0KKyAqIChtYWlubHkgZm9yIGdkYiBvciBzbGVlcCBtb2RlIHVzYWdlKQorICoKKyAqIHIwID0gc3RydWN0IHRocmVhZF9pbmZvIHBvaW50ZXIgb2YgdGFyZ2V0IHRhc2sgb3IgTlVMTCBmb3IgYW55CisgKi8KK0VOVFJZKGNydW5jaF90YXNrX2Rpc2FibGUpCisJc3RtZmQJc3AhLCB7cjQsIHI1LCBscn0KKworCW1ycwlpcCwgY3BzcgorCW9ycglyMiwgaXAsICNQU1JfSV9CSVQJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCisJbXNyCWNwc3JfYywgcjIKKworCWxkcglyNCwgPShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxMzAwMDApCUAgc3lzY29uIGFkZHIKKworCWxkcglyMywgPWNydW5jaF9vd25lcgorCWFkZAlyMiwgcjAsICNUSV9DUlVOQ0hfU1RBVEUJQCBnZXQgdGFzayBjcnVuY2ggc2F2ZSBhcmVhCisJbGRyCXIxLCBbcjNdCQkJQCBnZXQgY3VycmVudCBjcnVuY2ggb3duZXIKKwl0ZXEJcjEsICMwCQkJCUAgYW55IGN1cnJlbnQgb3duZXI/CisJYmVxCTFmCQkJCUAgbm86IHF1aXQKKwl0ZXEJcjAsICMwCQkJCUAgYW55IG93bmVyPworCXRlcW5lCXIxLCByMgkJCQlAIG9yIHNwZWNpZmllZCBvbmU/CisJYm5lCTFmCQkJCUAgbm86IHF1aXQKKworCWxkcglyNSwgW3I0LCAjMHg4MF0JCQlAIGVuYWJsZSBhY2Nlc3MgdG8gY3J1bmNoCisJbW92CXIyLCAjMHhhYQorCXN0cglyMiwgW3I0LCAjMHhjMF0KKwlvcnIJcjUsIHI1LCAjMHgwMDgwMDAwMAorCXN0cglyNSwgW3I0LCAjMHg4MF0KKworCW1vdglyMCwgIzAJCQkJQCBub3RoaW5nIHRvIGxvYWQKKwlzdHIJcjAsIFtyM10JCQlAIG5vIG1vcmUgY3VycmVudCBvd25lcgorCWxkcglyMiwgW3I0LCAjMHg4MF0JCQlAIGZsdXNoIG91dCBlbmFibGUgKEBAQCkKKwltb3YJcjIsIHIyCisJYmwJY3J1bmNoX3NhdmUKKworCW1vdglyMiwgIzB4YWEJCQlAIGRpc2FibGUgYWNjZXNzIHRvIGNydW5jaAorCXN0cglyMiwgW3I0LCAjMHhjMF0KKwliaWMJcjUsIHI1LCAjMHgwMDgwMDAwMAorCXN0cglyNSwgW3I0LCAjMHg4MF0KKwlsZHIJcjUsIFtyNCwgIzB4ODBdCQkJQCBmbHVzaCBvdXQgZW5hYmxlIChAQEApCisJbW92CXI1LCByNQorCisxOgltc3IJY3Bzcl9jLCBpcAkJCUAgcmVzdG9yZSBpbnRlcnJ1cHQgbW9kZQorCWxkbWZkCXNwISwge3I0LCByNSwgcGN9CisKKy8qCisgKiBDb3B5IGNydW5jaCBzdGF0ZSB0byBnaXZlbiBtZW1vcnkgYWRkcmVzcworICoKKyAqIHIwID0gc3RydWN0IHRocmVhZF9pbmZvIHBvaW50ZXIgb2YgdGFyZ2V0IHRhc2sKKyAqIHIxID0gbWVtb3J5IGFkZHJlc3Mgd2hlcmUgdG8gc3RvcmUgY3J1bmNoIHN0YXRlCisgKgorICogdGhpcyBpcyBjYWxsZWQgbWFpbmx5IGluIHRoZSBjcmVhdGlvbiBvZiBzaWduYWwgc3RhY2sgZnJhbWVzCisgKi8KK0VOVFJZKGNydW5jaF90YXNrX2NvcHkpCisJbXJzCWlwLCBjcHNyCisJb3JyCXIyLCBpcCwgI1BTUl9JX0JJVAkJQCBkaXNhYmxlIGludGVycnVwdHMKKwltc3IJY3Bzcl9jLCByMgorCisJbGRyCXIzLCA9Y3J1bmNoX293bmVyCisJYWRkCXIyLCByMCwgI1RJX0NSVU5DSF9TVEFURQlAIGdldCB0YXNrIGNydW5jaCBzYXZlIGFyZWEKKwlsZHIJcjMsIFtyM10JCQlAIGdldCBjdXJyZW50IGNydW5jaCBvd25lcgorCXRlcQlyMiwgcjMJCQkJQCBkb2VzIHRoaXMgdGFzayBvd24gaXQuLi4KKwliZXEJMWYKKworCUAgY3VycmVudCBjcnVuY2ggdmFsdWVzIGFyZSBpbiB0aGUgdGFzayBzYXZlIGFyZWEKKwltc3IJY3Bzcl9jLCBpcAkJCUAgcmVzdG9yZSBpbnRlcnJ1cHQgbW9kZQorCW1vdglyMCwgcjEKKwltb3YJcjEsIHIyCisJbW92CXIyLCAjQ1JVTkNIX1NJWkUKKwliCW1lbWNweQorCisxOglAIHRoaXMgdGFzayBvd25zIGNydW5jaCByZWdzIC0tIGdyYWIgYSBjb3B5IGZyb20gdGhlcmUKKwltb3YJcjAsICMwCQkJCUAgbm90aGluZyB0byBsb2FkCisJbW92CXIzLCBscgkJCQlAIHByZXNlcnZlIHJldHVybiBhZGRyZXNzCisJYmwJY3J1bmNoX3NhdmUKKwltc3IJY3Bzcl9jLCBpcAkJCUAgcmVzdG9yZSBpbnRlcnJ1cHQgbW9kZQorCW1vdglwYywgcjMKKworLyoKKyAqIFJlc3RvcmUgY3J1bmNoIHN0YXRlIGZyb20gZ2l2ZW4gbWVtb3J5IGFkZHJlc3MKKyAqCisgKiByMCA9IHN0cnVjdCB0aHJlYWRfaW5mbyBwb2ludGVyIG9mIHRhcmdldCB0YXNrCisgKiByMSA9IG1lbW9yeSBhZGRyZXNzIHdoZXJlIHRvIGdldCBjcnVuY2ggc3RhdGUgZnJvbQorICoKKyAqIHRoaXMgaXMgdXNlZCB0byByZXN0b3JlIGNydW5jaCBzdGF0ZSB3aGVuIHVud2luZGluZyBhIHNpZ25hbCBzdGFjayBmcmFtZQorICovCitFTlRSWShjcnVuY2hfdGFza19yZXN0b3JlKQorCW1ycwlpcCwgY3BzcgorCW9ycglyMiwgaXAsICNQU1JfSV9CSVQJCUAgZGlzYWJsZSBpbnRlcnJ1cHRzCisJbXNyCWNwc3JfYywgcjIKKworCWxkcglyMywgPWNydW5jaF9vd25lcgorCWFkZAlyMiwgcjAsICNUSV9DUlVOQ0hfU1RBVEUJQCBnZXQgdGFzayBjcnVuY2ggc2F2ZSBhcmVhCisJbGRyCXIzLCBbcjNdCQkJQCBnZXQgY3VycmVudCBjcnVuY2ggb3duZXIKKwl0ZXEJcjIsIHIzCQkJCUAgZG9lcyB0aGlzIHRhc2sgb3duIGl0Li4uCisJYmVxCTFmCisKKwlAIHRoaXMgdGFzayBkb2Vzbid0IG93biBjcnVuY2ggcmVncyAtLSB1c2UgaXRzIHNhdmUgYXJlYQorCW1zcgljcHNyX2MsIGlwCQkJQCByZXN0b3JlIGludGVycnVwdCBtb2RlCisJbW92CXIwLCByMgorCW1vdglyMiwgI0NSVU5DSF9TSVpFCisJYgltZW1jcHkKKworMToJQCB0aGlzIHRhc2sgb3ducyBjcnVuY2ggcmVncyAtLSBsb2FkIHRoZW0gZGlyZWN0bHkKKwltb3YJcjAsIHIxCisJbW92CXIxLCAjMAkJCQlAIG5vdGhpbmcgdG8gc2F2ZQorCW1vdglyMywgbHIJCQkJQCBwcmVzZXJ2ZSByZXR1cm4gYWRkcmVzcworCWJsCWNydW5jaF9sb2FkCisJbXNyCWNwc3JfYywgaXAJCQlAIHJlc3RvcmUgaW50ZXJydXB0IG1vZGUKKwltb3YJcGMsIHIzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMgYi9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4MTc1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCisgKiBDaXJydXMgTWF2ZXJpY2tDcnVuY2ggY29udGV4dCBzd2l0Y2hpbmcgYW5kIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZXA5M3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX25vdGlmeS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdHJ1Y3QgY3J1bmNoX3N0YXRlICpjcnVuY2hfb3duZXI7CisKK3ZvaWQgY3J1bmNoX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChjcnVuY2hfb3duZXIgPT0gJnRocmVhZC0+Y3J1bmNoc3RhdGUpCisJCWNydW5jaF9vd25lciA9IE5VTEw7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IGNydW5jaF9lbmFibGVkKHUzMiBkZXZjZmcpCit7CisJcmV0dXJuICEhKGRldmNmZyAmIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19DUlVOQ0hfRU5BQkxFKTsKK30KKworc3RhdGljIGludCBjcnVuY2hfZG8oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKil0OworCXN0cnVjdCBjcnVuY2hfc3RhdGUgKmNydW5jaF9zdGF0ZTsKKwl1MzIgZGV2Y2ZnOworCisJY3J1bmNoX3N0YXRlID0gJnRocmVhZC0+Y3J1bmNoc3RhdGU7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVEhSRUFEX05PVElGWV9GTFVTSDoKKwkJbWVtc2V0KGNydW5jaF9zdGF0ZSwgMCwgc2l6ZW9mKCpjcnVuY2hfc3RhdGUpKTsKKworCQkvKgorCQkgKiBGQUxMVEhST1VHSDogRW5zdXJlIHdlIGRvbid0IHRyeSB0byBvdmVyd3JpdGUgb3VyIG5ld2x5CisJCSAqIGluaXRpYWxpc2VkIHN0YXRlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCBmYXVsdC4KKwkJICovCisKKwljYXNlIFRIUkVBRF9OT1RJRllfUkVMRUFTRToKKwkJY3J1bmNoX3Rhc2tfcmVsZWFzZSh0aHJlYWQpOworCQlicmVhazsKKworCWNhc2UgVEhSRUFEX05PVElGWV9TV0lUQ0g6CisJCWRldmNmZyA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7CisJCWlmIChjcnVuY2hfZW5hYmxlZChkZXZjZmcpIHx8IGNydW5jaF9vd25lciA9PSBjcnVuY2hfc3RhdGUpIHsKKwkJCWRldmNmZyBePSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRTsKKwkJCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7CisJCQlfX3Jhd193cml0ZWwoZGV2Y2ZnLCBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcnVuY2hfbm90aWZpZXJfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBjcnVuY2hfZG8sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcnVuY2hfaW5pdCh2b2lkKQoreworCXRocmVhZF9yZWdpc3Rlcl9ub3RpZmllcigmY3J1bmNoX25vdGlmaWVyX2Jsb2NrKTsKKworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGNydW5jaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGIvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMKaW5kZXggZGEyODBiYS4uYTU3NDdlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMKQEAgLTksNyArOSw2IEBACiAgKgogICogIDMyLWJpdCBkZWJ1Z2dpbmcgY29kZQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAJCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYyBiL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCmluZGV4IDAwYWEyMjUuLmFiNGFkOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKi8KICNkZWZpbmUgRUNBUkRfQwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTYyMCw3ICs2MTksNyBAQAogCQllY2FyZF90ICplYyA9IHNsb3RfdG9fZWNhcmQoc2xvdCk7CiAKIAkJaWYgKGVjLT5jbGFpbWVkKSB7Ci0JCQlzdHJ1Y3QgaXJxZGVzYyAqZCA9IGlycWRlc2MgKyBlYy0+aXJxOworCQkJc3RydWN0IGlycV9kZXNjICpkID0gaXJxX2Rlc2MgKyBlYy0+aXJxOwogCQkJLyoKIAkJCSAqIHRoaXMgdWdseSBjb2RlIGlzIHNvIHRoYXQgd2UgY2FuIG9wZXJhdGUgYQogCQkJICogcHJpb3JpdG9yaXNpbmcgc3lzdGVtOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggODZjOTI1Mi4uN2VhNWYwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgTm90ZTogIHRoZXJlIGlzIGEgU3Ryb25nQVJNIGJ1ZyBpbiB0aGUgU1RNSUEgcm4sIHtyZWdzfV4gaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZXMKICAqICBpdCB0byBzYXZlIHdyb25nIHZhbHVlcy4uLiAgQmUgYXdhcmUhCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vZ2x1ZS5oPgpAQCAtNDkyLDkgKzQ5MSwxNSBAQAogCWIJZG9fZnBlCQkJCUAgQ1AjMSAoRlBFKQogCWIJZG9fZnBlCQkJCUAgQ1AjMiAoRlBFKQogCW1vdglwYywgbHIJCQkJQCBDUCMzCisjaWZkZWYgQ09ORklHX0NSVU5DSAorCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzQgKE1hdmVyaWNrQ3J1bmNoKQorCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzUgKE1hdmVyaWNrQ3J1bmNoKQorCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzYgKE1hdmVyaWNrQ3J1bmNoKQorI2Vsc2UKIAltb3YJcGMsIGxyCQkJCUAgQ1AjNAogCW1vdglwYywgbHIJCQkJQCBDUCM1CiAJbW92CXBjLCBscgkJCQlAIENQIzYKKyNlbmRpZgogCW1vdglwYywgbHIJCQkJQCBDUCM3CiAJbW92CXBjLCBscgkJCQlAIENQIzgKIAltb3YJcGMsIGxyCQkJCUAgQ1AjOQpAQCAtNTg0LDkgKzU4OSw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgU2V0IGRvbWFpbiByZWdpc3RlcgogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSVdNTVhUKQotCWJsCWl3bW14dF90YXNrX3N3aXRjaAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKSAmJiAhZGVmaW5lZChDT05GSUdfSVdNTVhUKQogCWFkZAlyNCwgcjIsICNUSV9DUFVfRE9NQUlOICsgNDAJQCBjcHVfY29udGV4dF9zYXZlLT5leHRyYQogCWxkbWliCXI0LCB7cjQsIHI1fQogCW1hcglhY2MwLCByNCwgcjUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA3NWFmNmQ2Li42ZjVlN2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC03LDcgKzcsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwppbmRleCBmMWMyZmQ1Li44N2FiNGUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9maXEuYyBiL2FyY2gvYXJtL2tlcm5lbC9maXEuYwppbmRleCAxZWMzZjdmLi5lOGU5MDM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZmlxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2ZpcS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKaW5kZXggMmFmN2U0NC4uYWM5ZWIzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAgICBmb3IgMzItYml0IENQVXMgd2hpY2ggaGFzIGEgcHJvY2VzcyBJRCByZWdpc3RlcihDUDE1KS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCAzMzBiOTQ3Li4yMjQyZjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKiAgS2VybmVsIHN0YXJ0dXAgY29kZSBmb3IgYWxsIDMyLWJpdCBDUFVzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCkBAIC0yMjEsNyArMjIwLDcgQEAKIAl0ZXEJcjAsIHI2CiAJYm5lCTFiCiAKLQlsZHIJcjcsIFtyMTAsICNQUk9DSU5GT19NTVVGTEFHU10JQCBtbXVmbGFncworCWxkcglyNywgW3IxMCwgI1BST0NJTkZPX01NX01NVUZMQUdTXSBAIG1tX21tdWZsYWdzCiAKIAkvKgogCSAqIENyZWF0ZSBpZGVudGl0eSBtYXBwaW5nIGZvciBmaXJzdCBNQiBvZiBrZXJuZWwgdG8KQEAgLTI3Miw4ICsyNzEsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTEwKLQliaWMJcjcsIHI3LCAjMHgwYwkJCUAgdHVybiBvZmYgY2FjaGVhYmxlCi0JCQkJCQlAIGFuZCBidWZmZXJhYmxlIGJpdHMKKwlsZHIJcjcsIFtyMTAsICNQUk9DSU5GT19JT19NTVVGTEFHU10gQCBpb19tbXVmbGFncwogCS8qCiAJICogTWFwIGluIElPIHNwYWNlIGZvciBzZXJpYWwgZGVidWdnaW5nLgogCSAqIFRoaXMgYWxsb3dzIGRlYnVnIG1lc3NhZ2VzIHRvIGJlIG91dHB1dApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IGVjMjBmODkuLmMzZDRlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTIxLDEyICsyMSwxMiBAQAogICogIElSUSdzIGFyZSBpbiBmYWN0IGltcGxlbWVudGVkIGEgYml0IGxpa2Ugc2lnbmFsIGhhbmRsZXJzIGZvciB0aGUga2VybmVsLgogICogIE5hdHVyYWxseSBpdCdzIG5vdCBhIDE6MSByZWxhdGlvbiwgYnV0IHRoZXJlIGFyZSBzaW1pbGFyaXRpZXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KQEAgLTM4LDE5MiArMzgsMTggQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAvKgotICogTWF4aW11bSBJUlEgY291bnQuICBDdXJyZW50bHksIHRoaXMgaXMgYXJiaXRhcnkuICBIb3dldmVyLCBpdCBzaG91bGQKLSAqIG5vdCBiZSBzZXQgdG9vIGxvdyB0byBwcmV2ZW50IGZhbHNlIHRyaWdnZXJpbmcuICBDb252ZXJzZWx5LCBpZiBpdAotICogaXMgc2V0IHRvbyBoaWdoLCB0aGVuIHlvdSBjb3VsZCBtaXNzIGEgc3R1Y2sgSVJRLgotICoKLSAqIE1heWJlIHdlIG91Z2h0IHRvIHNldCBhIHRpbWVyIGFuZCByZS1lbmFibGUgdGhlIElSUSBhdCBhIGxhdGVyIHRpbWU/Ci0gKi8KLSNkZWZpbmUgTUFYX0lSUV9DTlQJMTAwMDAwCi0KLXN0YXRpYyBpbnQgbm9pcnFkZWJ1ZyBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXJxX2Vycl9jb3VudDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci1zdGF0aWMgTElTVF9IRUFEKGlycV9wZW5kaW5nKTsKLQotc3RydWN0IGlycWRlc2MgaXJxX2Rlc2NbTlJfSVJRU107Ci12b2lkICgqaW5pdF9hcmNoX2lycSkodm9pZCkgX19pbml0ZGF0YSA9IE5VTEw7Ci0KLS8qCiAgKiBObyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaXJxX2ZpbmlzaCBmdW5jdGlvbiBkZWZpbmVkIGluIGFybS9hcmNoL2lycXMuaC4KICAqLwogI2lmbmRlZiBpcnFfZmluaXNoCiAjZGVmaW5lIGlycV9maW5pc2goaXJxKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotLyoKLSAqIER1bW15IG1hc2svdW5tYXNrIGhhbmRsZXIKLSAqLwotdm9pZCBkdW1teV9tYXNrX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLX0KLQotaXJxcmV0dXJuX3Qgbm9fYWN0aW9uKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmV0dXJuIElSUV9OT05FOwotfQotCi12b2lkIGRvX2JhZF9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlycV9lcnJfY291bnQrKzsKLQlwcmludGsoS0VSTl9FUlIgIklSUTogc3B1cmlvdXMgaW50ZXJydXB0ICVkXG4iLCBpcnEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgYmFkX2NoaXAgPSB7Ci0JLmFjawk9IGR1bW15X21hc2tfdW5tYXNrX2lycSwKLQkubWFzawk9IGR1bW15X21hc2tfdW5tYXNrX2lycSwKLQkudW5tYXNrID0gZHVtbXlfbWFza191bm1hc2tfaXJxLAotfTsKLQotc3RhdGljIHN0cnVjdCBpcnFkZXNjIGJhZF9pcnFfZGVzYyA9IHsKLQkuY2hpcAkJPSAmYmFkX2NoaXAsCi0JLmhhbmRsZQkJPSBkb19iYWRfSVJRLAotCS5wZW5kCQk9IExJU1RfSEVBRF9JTklUKGJhZF9pcnFfZGVzYy5wZW5kKSwKLQkuZGlzYWJsZV9kZXB0aAk9IDEsCi19OwotCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCBzeW5jaHJvbml6ZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCi0Jd2hpbGUgKGRlc2MtPnJ1bm5pbmcpCi0JCWJhcnJpZXIoKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKLQotI2RlZmluZSBzbXBfc2V0X3J1bm5pbmcoZGVzYykJZG8geyBkZXNjLT5ydW5uaW5nID0gMTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc21wX2NsZWFyX3J1bm5pbmcoZGVzYykJZG8geyBkZXNjLT5ydW5uaW5nID0gMDsgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIHNtcF9zZXRfcnVubmluZyhkZXNjKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNtcF9jbGVhcl9ydW5uaW5nKGRlc2MpCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKioKLSAqCWRpc2FibGVfaXJxX25vc3luYyAtIGRpc2FibGUgYW4gaXJxIHdpdGhvdXQgd2FpdGluZwotICoJQGlycTogSW50ZXJydXB0IHRvIGRpc2FibGUKLSAqCi0gKglEaXNhYmxlIHRoZSBzZWxlY3RlZCBpbnRlcnJ1cHQgbGluZS4gIEVuYWJsZXMgYW5kIGRpc2FibGVzCi0gKglhcmUgbmVzdGVkLiAgV2UgZG8gdGhpcyBsYXppbHkuCi0gKgotICoJVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQuCi0gKi8KLXZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycWRlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQlkZXNjLT5kaXNhYmxlX2RlcHRoKys7Ci0JbGlzdF9kZWxfaW5pdCgmZGVzYy0+cGVuZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycV9ub3N5bmMpOwotCi0vKioKLSAqCWRpc2FibGVfaXJxIC0gZGlzYWJsZSBhbiBpcnEgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24KLSAqCUBpcnE6IEludGVycnVwdCB0byBkaXNhYmxlCi0gKgotICoJRGlzYWJsZSB0aGUgc2VsZWN0ZWQgaW50ZXJydXB0IGxpbmUuICBFbmFibGVzIGFuZCBkaXNhYmxlcwotICoJYXJlIG5lc3RlZC4gIFRoaXMgZnVuY3Rpb25zIHdhaXRzIGZvciBhbnkgcGVuZGluZyBJUlEKLSAqCWhhbmRsZXJzIGZvciB0aGlzIGludGVycnVwdCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nLgotICoJSWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmcgYSByZXNvdXJjZSB0aGUgSVJRCi0gKgloYW5kbGVyIG1heSBuZWVkIHlvdSB3aWxsIGRlYWRsb2NrLgotICoKLSAqCVRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCAtIHdpdGggY2FyZSAtIGZyb20gSVJRIGNvbnRleHQuCi0gKi8KLXZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JaWYgKGRlc2MtPmFjdGlvbikKLQkJc3luY2hyb25pemVfaXJxKGlycSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxKTsKLQotLyoqCi0gKgllbmFibGVfaXJxIC0gZW5hYmxlIGludGVycnVwdCBoYW5kbGluZyBvbiBhbiBpcnEKLSAqCUBpcnE6IEludGVycnVwdCB0byBlbmFibGUKLSAqCi0gKglSZS1lbmFibGVzIHRoZSBwcm9jZXNzaW5nIG9mIGludGVycnVwdHMgb24gdGhpcyBJUlEgbGluZS4KLSAqCU5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgc28geW91IG1heQotICoJZ2V0IHVuZXhwZWN0ZWQgcmVzdWx0cyBpZiB5b3UgaG9sZCBJUlFzIGRpc2FibGVkLgotICoKLSAqCVRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LgotICovCi12b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseSghZGVzYy0+ZGlzYWJsZV9kZXB0aCkpIHsKLQkJcHJpbnRrKCJlbmFibGVfaXJxKCV1KSB1bmJhbGFuY2VkIGZyb20gJXBcbiIsIGlycSwKLQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JfSBlbHNlIGlmICghLS1kZXNjLT5kaXNhYmxlX2RlcHRoKSB7Ci0JCWRlc2MtPnByb2JpbmcgPSAwOwotCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgaW50ZXJydXB0IGlzIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkLAotCQkgKiB0cnkgdG8gcmUtcnVuIGl0LiAgV2UgY2FuJ3QgZGlyZWN0bHkgcnVuIGl0Ci0JCSAqIGZyb20gaGVyZSBzaW5jZSB0aGUgY2FsbGVyIG1pZ2h0IGJlIGluIGFuCi0JCSAqIGludGVycnVwdC1wcm90ZWN0ZWQgcmVnaW9uLgotCQkgKi8KLQkJaWYgKGRlc2MtPnBlbmRpbmcgJiYgbGlzdF9lbXB0eSgmZGVzYy0+cGVuZCkpIHsKLQkJCWRlc2MtPnBlbmRpbmcgPSAwOwotCQkJaWYgKCFkZXNjLT5jaGlwLT5yZXRyaWdnZXIgfHwKLQkJCSAgICBkZXNjLT5jaGlwLT5yZXRyaWdnZXIoaXJxKSkKLQkJCQlsaXN0X2FkZCgmZGVzYy0+cGVuZCwgJmlycV9wZW5kaW5nKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwotCi0vKgotICogRW5hYmxlIHdha2Ugb24gc2VsZWN0ZWQgaXJxCi0gKi8KLXZvaWQgZW5hYmxlX2lycV93YWtlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycWRlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQlpZiAoZGVzYy0+Y2hpcC0+c2V0X3dha2UpCi0JCWRlc2MtPmNoaXAtPnNldF93YWtlKGlycSwgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxX3dha2UpOwotCi12b2lkIGRpc2FibGVfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotCWlmIChkZXNjLT5jaGlwLT5zZXRfd2FrZSkKLQkJZGVzYy0+Y2hpcC0+c2V0X3dha2UoaXJxLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX3dha2UpOwordm9pZCAoKmluaXRfYXJjaF9pcnEpKHZvaWQpIF9faW5pdGRhdGEgPSBOVUxMOwordW5zaWduZWQgbG9uZyBpcnFfZXJyX2NvdW50OwogCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKQEAgLTI0Myw4ICs2OSw4IEBACiAJfQogCiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci0JICAgIAlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CisJCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHVubG9jazsKIApAQCAtMjU3LDcgKzgzLDcgQEAKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHVubG9jazoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKICNpZmRlZiBDT05GSUdfQVJDSF9BQ09STgogCQlzaG93X2ZpcV9saXN0KHAsIHYpOwpAQCAtMjcxLDI2NyArOTcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIElSUSBsb2NrIGRldGVjdGlvbi4KLSAqCi0gKiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdldCB1cyBvdXQgb2YgYSBmZXcgbG9ja2VkIHNpdHVhdGlvbnMuCi0gKiBIb3dldmVyLCBpdCBtYXkgdGFrZSBhIHdoaWxlIGZvciB0aGlzIHRvIGhhcHBlbiwgc2luY2Ugd2UgbmVlZAotICogYSBsYXJnZSBudW1iZXIgaWYgSVJRcyB0byBhcHBlYXIgaW4gdGhlIHNhbWUgamlmZmllIHdpdGggdGhlCi0gKiBzYW1lIGluc3RydWN0aW9uIHBvaW50ZXIgKG9yIHdpdGhpbiAyIGluc3RydWN0aW9ucykuCi0gKi8KLXN0YXRpYyBpbnQgY2hlY2tfaXJxX2xvY2soc3RydWN0IGlycWRlc2MgKmRlc2MsIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgaW5zdHJfcHRyID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKLQotCWlmIChkZXNjLT5sY2tfamlmID09IGppZmZpZXMgJiYKLQkgICAgZGVzYy0+bGNrX3BjID49IGluc3RyX3B0ciAmJiBkZXNjLT5sY2tfcGMgPCBpbnN0cl9wdHIgKyA4KSB7Ci0JCWRlc2MtPmxja19jbnQgKz0gMTsKLQotCQlpZiAoZGVzYy0+bGNrX2NudCA+IE1BWF9JUlFfQ05UKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIklSUSBMT0NLOiBJUlElZCBpcyBsb2NraW5nIHRoZSBzeXN0ZW0sIGRpc2FibGVkXG4iLCBpcnEpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQlkZXNjLT5sY2tfY250ID0gMDsKLQkJZGVzYy0+bGNrX3BjICA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7Ci0JCWRlc2MtPmxja19qaWYgPSBqaWZmaWVzOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXJlcG9ydF9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgaW50IHJldCkKLXsKLQlzdGF0aWMgaW50IGNvdW50ID0gMTAwOwotCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQotCWlmIChub2lycWRlYnVnKQotCQlyZXR1cm47Ci0KLQlpZiAocmV0ICE9IElSUV9IQU5ETEVEICYmIHJldCAhPSBJUlFfTk9ORSkgewotCQlpZiAoIWNvdW50KQotCQkJcmV0dXJuOwotCQljb3VudC0tOwotCQlwcmludGsoImlycSV1OiBib2d1cyByZXR2YWwgbWFzayAleFxuIiwgaXJxLCByZXQpOwotCX0gZWxzZSB7Ci0JCWRlc2MtPmlycXNfdW5oYW5kbGVkKys7Ci0JCWlmIChkZXNjLT5pcnFzX3VuaGFuZGxlZCA8PSA5OTkwMCkKLQkJCXJldHVybjsKLQkJZGVzYy0+aXJxc191bmhhbmRsZWQgPSAwOwotCQlwcmludGsoImlycSV1OiBub2JvZHkgY2FyZWRcbiIsIGlycSk7Ci0JfQotCXNob3dfcmVncyhyZWdzKTsKLQlkdW1wX3N0YWNrKCk7Ci0JcHJpbnRrKEtFUk5fRVJSICJoYW5kbGVyczoiKTsKLQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0JZG8gewotCQlwcmludGsoIlxuIiBLRVJOX0VSUiAiWzwlcD5dIiwgYWN0aW9uLT5oYW5kbGVyKTsKLQkJcHJpbnRfc3ltYm9sKCIgKCVzKSIsICh1bnNpZ25lZCBsb25nKWFjdGlvbi0+aGFuZGxlcik7Ci0JCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKLQl9IHdoaWxlIChhY3Rpb24pOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIGludAotX19kb19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCWludCByZXQsIHJldHZhbCA9IDA7Ci0KLQlzcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9USU1FUikgJiYgc3lzdGVtX3RpbWVyLT5keW5fdGljayAhPSBOVUxMKSB7Ci0JCXNwaW5fbG9jaygmc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayk7Ci0JCWlmIChzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5zdGF0ZSAmIERZTl9USUNLX0VOQUJMRUQpCi0JCQlzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5oYW5kbGVyKGlycSwgMCwgcmVncyk7Ci0JCXNwaW5fdW5sb2NrKCZzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5sb2NrKTsKLQl9Ci0jZW5kaWYKLQotCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpKQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQlzdGF0dXMgPSAwOwotCWRvIHsKLQkJcmV0ID0gYWN0aW9uLT5oYW5kbGVyKGlycSwgYWN0aW9uLT5kZXZfaWQsIHJlZ3MpOwotCQlpZiAocmV0ID09IElSUV9IQU5ETEVEKQotCQkJc3RhdHVzIHw9IGFjdGlvbi0+ZmxhZ3M7Ci0JCXJldHZhbCB8PSByZXQ7Ci0JCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKLQl9IHdoaWxlIChhY3Rpb24pOwotCi0JaWYgKHN0YXR1cyAmIFNBX1NBTVBMRV9SQU5ET00pCi0JCWFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyhpcnEpOwotCi0Jc3Bpbl9sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKgotICogVGhpcyBpcyBmb3Igc29mdHdhcmUtZGVjb2RlZCBJUlFzLiAgVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0bwotICogaGFuZGxlIHRoZSBhY2ssIGNsZWFyLCBtYXNrIGFuZCB1bm1hc2sgaXNzdWVzLgotICovCi12b2lkCi1kb19zaW1wbGVfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JY29uc3QgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWRlc2MtPnRyaWdnZXJlZCA9IDE7Ci0KLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKLQotCXNtcF9zZXRfcnVubmluZyhkZXNjKTsKLQotCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQlpZiAoYWN0aW9uKSB7Ci0JCWludCByZXQgPSBfX2RvX2lycShpcnEsIGFjdGlvbiwgcmVncyk7Ci0JCWlmIChyZXQgIT0gSVJRX0hBTkRMRUQpCi0JCQlyZXBvcnRfYmFkX2lycShpcnEsIHJlZ3MsIGRlc2MsIHJldCk7Ci0JfQotCi0Jc21wX2NsZWFyX3J1bm5pbmcoZGVzYyk7Ci19Ci0KLS8qCi0gKiBNb3N0IGVkZ2UtdHJpZ2dlcmVkIElSUSBpbXBsZW1lbnRhdGlvbnMgc2VlbSB0byB0YWtlIGEgYnJva2VuCi0gKiBhcHByb2FjaCB0byB0aGlzLiAgSGVuY2UgdGhlIGNvbXBsZXhpdHkuCi0gKi8KLXZvaWQKLWRvX2VkZ2VfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JZGVzYy0+dHJpZ2dlcmVkID0gMTsKLQotCS8qCi0JICogSWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgdGhpcyBJUlEsIG9yIGl0cyBkaXNhYmxlZCwKLQkgKiB3ZSBzaG91bGRuJ3QgcHJvY2VzcyB0aGUgSVJRLiAgSW5zdGVhZCwgdHVybiBvbiB0aGUKLQkgKiBoYXJkd2FyZSBtYXNrcy4KLQkgKi8KLQlpZiAodW5saWtlbHkoZGVzYy0+cnVubmluZyB8fCBkZXNjLT5kaXNhYmxlX2RlcHRoKSkKLQkJZ290byBydW5uaW5nOwotCi0JLyoKLQkgKiBBY2tub3dsZWRnZSBhbmQgY2xlYXIgdGhlIElSUSwgYnV0IGRvbid0IG1hc2sgaXQuCi0JICovCi0JZGVzYy0+Y2hpcC0+YWNrKGlycSk7Ci0KLQkvKgotCSAqIE1hcmsgdGhlIElSUSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCi0JICovCi0JZGVzYy0+cnVubmluZyA9IDE7Ci0KLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKLQotCWRvIHsKLQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCi0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24pCi0JCQlicmVhazsKLQotCQlpZiAoZGVzYy0+cGVuZGluZyAmJiAhZGVzYy0+ZGlzYWJsZV9kZXB0aCkgewotCQkJZGVzYy0+cGVuZGluZyA9IDA7Ci0JCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKLQkJfQotCi0JCV9fZG9faXJxKGlycSwgYWN0aW9uLCByZWdzKTsKLQl9IHdoaWxlIChkZXNjLT5wZW5kaW5nICYmICFkZXNjLT5kaXNhYmxlX2RlcHRoKTsKLQotCWRlc2MtPnJ1bm5pbmcgPSAwOwotCi0JLyoKLQkgKiBJZiB3ZSB3ZXJlIGRpc2FibGVkIG9yIGZyZWVkLCBzaHV0IGRvd24gdGhlIGhhbmRsZXIuCi0JICovCi0JaWYgKGxpa2VseShkZXNjLT5hY3Rpb24gJiYgIWNoZWNrX2lycV9sb2NrKGRlc2MsIGlycSwgcmVncykpKQotCQlyZXR1cm47Ci0KLSBydW5uaW5nOgotCS8qCi0JICogV2UgZ290IGFub3RoZXIgSVJRIHdoaWxlIHRoaXMgb25lIHdhcyBtYXNrZWQgb3IKLQkgKiBjdXJyZW50bHkgcnVubmluZy4gIERlbGF5IGl0LgotCSAqLwotCWRlc2MtPnBlbmRpbmcgPSAxOwotCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKLX0KLQotLyoKLSAqIExldmVsLWJhc2VkIElSUSBoYW5kbGVyLiAgTmljZSBhbmQgc2ltcGxlLgotICovCi12b2lkCi1kb19sZXZlbF9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JZGVzYy0+dHJpZ2dlcmVkID0gMTsKLQotCS8qCi0JICogQWNrbm93bGVkZ2UsIGNsZWFyIF9BTkRfIGRpc2FibGUgdGhlIGludGVycnVwdC4KLQkgKi8KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKLQotCWlmIChsaWtlbHkoIWRlc2MtPmRpc2FibGVfZGVwdGgpKSB7Ci0JCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOwotCi0JCXNtcF9zZXRfcnVubmluZyhkZXNjKTsKLQotCQkvKgotCQkgKiBSZXR1cm4gd2l0aCB0aGlzIGludGVycnVwdCBtYXNrZWQgaWYgbm8gYWN0aW9uCi0JCSAqLwotCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0JCWlmIChhY3Rpb24pIHsKLQkJCWludCByZXQgPSBfX2RvX2lycShpcnEsIGRlc2MtPmFjdGlvbiwgcmVncyk7Ci0KLQkJCWlmIChyZXQgIT0gSVJRX0hBTkRMRUQpCi0JCQkJcmVwb3J0X2JhZF9pcnEoaXJxLCByZWdzLCBkZXNjLCByZXQpOwotCi0JCQlpZiAobGlrZWx5KCFkZXNjLT5kaXNhYmxlX2RlcHRoICYmCi0JCQkJICAgIWNoZWNrX2lycV9sb2NrKGRlc2MsIGlycSwgcmVncykpKQotCQkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwotCQl9Ci0KLQkJc21wX2NsZWFyX3J1bm5pbmcoZGVzYyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19wZW5kaW5nX2lycXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCBoZWFkLCAqbCwgKm47Ci0KLQlkbyB7Ci0JCXN0cnVjdCBpcnFkZXNjICpkZXNjOwotCi0JCS8qCi0JCSAqIEZpcnN0LCB0YWtlIHRoZSBwZW5kaW5nIGludGVycnVwdHMgb2ZmIHRoZSBsaXN0LgotCQkgKiBUaGUgYWN0IG9mIGNhbGxpbmcgdGhlIGhhbmRsZXJzIG1heSBhZGQgc29tZSBJUlFzCi0JCSAqIGJhY2sgb250byB0aGUgbGlzdC4KLQkJICovCi0JCWhlYWQgPSBpcnFfcGVuZGluZzsKLQkJSU5JVF9MSVNUX0hFQUQoJmlycV9wZW5kaW5nKTsKLQkJaGVhZC5uZXh0LT5wcmV2ID0gJmhlYWQ7Ci0JCWhlYWQucHJldi0+bmV4dCA9ICZoZWFkOwotCi0JCS8qCi0JCSAqIE5vdyBydW4gZWFjaCBlbnRyeS4gIFdlIG11c3QgZGVsZXRlIGl0IGZyb20gb3VyCi0JCSAqIGxpc3QgYmVmb3JlIGNhbGxpbmcgdGhlIGhhbmRsZXIuCi0JCSAqLwotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJmhlYWQpIHsKLQkJCWRlc2MgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBpcnFkZXNjLCBwZW5kKTsKLQkJCWxpc3RfZGVsX2luaXQoJmRlc2MtPnBlbmQpOwotCQkJZGVzY19oYW5kbGVfaXJxKGRlc2MgLSBpcnFfZGVzYywgZGVzYywgcmVncyk7Ci0JCX0KLQotCQkvKgotCQkgKiBUaGUgbGlzdCBtdXN0IGJlIGVtcHR5LgotCQkgKi8KLQkJQlVHX09OKCFsaXN0X2VtcHR5KCZoZWFkKSk7Ci0JfSB3aGlsZSAoIWxpc3RfZW1wdHkoJmlycV9wZW5kaW5nKSk7Ci19CisvKiBIYW5kbGUgYmFkIGludGVycnVwdHMgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgYmFkX2lycV9kZXNjID0geworCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCisJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQKK307CiAKIC8qCiAgKiBkb19JUlEgaGFuZGxlcyBhbGwgaGFyZHdhcmUgSVJRJ3MuICBEZWNvZGVkIElSUXMgc2hvdWxkIG5vdApAQCAtNTUwLDk2ICsxMjAsMTUgQEAKIAkJZGVzYyA9ICZiYWRfaXJxX2Rlc2M7CiAKIAlpcnFfZW50ZXIoKTsKLQlzcGluX2xvY2soJmlycV9jb250cm9sbGVyX2xvY2spOworCiAJZGVzY19oYW5kbGVfaXJxKGlycSwgZGVzYywgcmVncyk7CiAKLQkvKgotCSAqIE5vdyByZS1ydW4gYW55IHBlbmRpbmcgaW50ZXJydXB0cy4KLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmlycV9wZW5kaW5nKSkKLQkJZG9fcGVuZGluZ19pcnFzKHJlZ3MpOwotCisJLyogQVQ5MSBzcGVjaWZpYyB3b3JrYXJvdW5kICovCiAJaXJxX2ZpbmlzaChpcnEpOwogCi0Jc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogCWlycV9leGl0KCk7CiB9CiAKLXZvaWQgX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgaXJxX2hhbmRsZXJfdCBoYW5kbGUsIGludCBpc19jaGFpbmVkKQotewotCXN0cnVjdCBpcnFkZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gaW5zdGFsbCBoYW5kbGVyIGZvciBJUlElZFxuIiwgaXJxKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChoYW5kbGUgPT0gTlVMTCkKLQkJaGFuZGxlID0gZG9fYmFkX0lSUTsKLQotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQotCWlmIChpc19jaGFpbmVkICYmIGRlc2MtPmNoaXAgPT0gJmJhZF9jaGlwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJUcnlpbmcgdG8gaW5zdGFsbCBjaGFpbmVkIGhhbmRsZXIgZm9yIElSUSVkXG4iLCBpcnEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQlpZiAoaGFuZGxlID09IGRvX2JhZF9JUlEpIHsKLQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwotCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKLQkJZGVzYy0+ZGlzYWJsZV9kZXB0aCA9IDE7Ci0JfQotCWRlc2MtPmhhbmRsZSA9IGhhbmRsZTsKLQlpZiAoaGFuZGxlICE9IGRvX2JhZF9JUlEgJiYgaXNfY2hhaW5lZCkgewotCQlkZXNjLT52YWxpZCA9IDA7Ci0JCWRlc2MtPnByb2JlX29rID0gMDsKLQkJZGVzYy0+ZGlzYWJsZV9kZXB0aCA9IDA7Ci0JCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgc2V0X2lycV9jaGlwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFjaGlwICpjaGlwKQotewotCXN0cnVjdCBpcnFkZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gaW5zdGFsbCBjaGlwIGZvciBJUlElZFxuIiwgaXJxKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChjaGlwID09IE5VTEwpCi0JCWNoaXAgPSAmYmFkX2NoaXA7Ci0KLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQlkZXNjLT5jaGlwID0gY2hpcDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci19Ci0KLWludCBzZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGlycWRlc2MgKmRlc2M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVOWElPOwotCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIHNldCBpcnEgdHlwZSBmb3IgSVJRJWRcbiIsIGlycSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQlpZiAoZGVzYy0+Y2hpcC0+c2V0X3R5cGUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQkJcmV0ID0gZGVzYy0+Y2hpcC0+c2V0X3R5cGUoaXJxLCB0eXBlKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHNldF9pcnFfdHlwZSk7Ci0KIHZvaWQgc2V0X2lycV9mbGFncyh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgaWZsYWdzKQogewogCXN0cnVjdCBpcnFkZXNjICpkZXNjOwpAQCAtNjUxLDQyMSArMTQwLDMyIEBACiAJfQogCiAJZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci0JZGVzYy0+dmFsaWQgPSAoaWZsYWdzICYgSVJRRl9WQUxJRCkgIT0gMDsKLQlkZXNjLT5wcm9iZV9vayA9IChpZmxhZ3MgJiBJUlFGX1BST0JFKSAhPSAwOwotCWRlc2MtPm5vYXV0b2VuYWJsZSA9IChpZmxhZ3MgJiBJUlFGX05PQVVUT0VOKSAhPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLX0KLQotaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpCi17Ci0JaW50IHNoYXJlZCA9IDA7Ci0Jc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKLQotCS8qCi0JICogU29tZSBkcml2ZXJzIGxpa2Ugc2VyaWFsLmMgdXNlIHJlcXVlc3RfaXJxKCkgaGVhdmlseSwKLQkgKiBzbyB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGludGVyZmVyZSB3aXRoIGEKLQkgKiBydW5uaW5nIHN5c3RlbS4KLQkgKi8KLQlpZiAobmV3LT5mbGFncyAmIFNBX1NBTVBMRV9SQU5ET00pIHsKLQkJLyoKLQkJICogVGhpcyBmdW5jdGlvbiBtaWdodCBzbGVlcCwgd2Ugd2FudCB0byBjYWxsIGl0IGZpcnN0LAotCQkgKiBvdXRzaWRlIG9mIHRoZSBhdG9taWMgYmxvY2suCi0JCSAqIFllcywgdGhpcyBtaWdodCBjbGVhciB0aGUgZW50cm9weSBwb29sIGlmIHRoZSB3cm9uZwotCQkgKiBkcml2ZXIgaXMgYXR0ZW1wdGVkIHRvIGJlIGxvYWRlZCwgd2l0aG91dCBhY3R1YWxseQotCQkgKiBpbnN0YWxsaW5nIGEgbmV3IGhhbmRsZXIsIGJ1dCBpcyB0aGlzIHJlYWxseSBhIHByb2JsZW0sCi0JCSAqIG9ubHkgdGhlIHN5c2FkbWluIGlzIGFibGUgdG8gZG8gdGhpcy4KLQkJICovCi0JICAgICAgICByYW5kX2luaXRpYWxpemVfaXJxKGlycSk7Ci0JfQotCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGNvZGUgaGFzIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHkKLQkgKi8KLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQlwID0gJmRlc2MtPmFjdGlvbjsKLQlpZiAoKG9sZCA9ICpwKSAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqIENhbid0IHNoYXJlIGludGVycnVwdHMgdW5sZXNzIGJvdGggYWdyZWUgdG8gYW5kIGFyZQotCQkgKiB0aGUgc2FtZSB0eXBlLgotCQkgKi8KLQkJaWYgKCEob2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MgJiBTQV9TSElSUSkgfHwKLQkJICAgICh+b2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MpICYgU0FfVFJJR0dFUl9NQVNLKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfY29udHJvbGxlcl9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJLyogYWRkIG5ldyBpbnRlcnJ1cHQgYXQgZW5kIG9mIGlycSBxdWV1ZSAqLwotCQlkbyB7Ci0JCQlwID0gJm9sZC0+bmV4dDsKLQkJCW9sZCA9ICpwOwotCQl9IHdoaWxlIChvbGQpOwotCQlzaGFyZWQgPSAxOwotCX0KLQotCSpwID0gbmV3OwotCi0JaWYgKCFzaGFyZWQpIHsKLSAJCWRlc2MtPnByb2JpbmcgPSAwOwotCQlkZXNjLT5ydW5uaW5nID0gMDsKLQkJZGVzYy0+cGVuZGluZyA9IDA7Ci0JCWRlc2MtPmRpc2FibGVfZGVwdGggPSAxOwotCi0JCWlmIChuZXctPmZsYWdzICYgU0FfVFJJR0dFUl9NQVNLICYmCi0JCSAgICBkZXNjLT5jaGlwLT5zZXRfdHlwZSkgewotCQkJdW5zaWduZWQgaW50IHR5cGUgPSBuZXctPmZsYWdzICYgU0FfVFJJR0dFUl9NQVNLOwotCQkJZGVzYy0+Y2hpcC0+c2V0X3R5cGUoaXJxLCB0eXBlKTsKLQkJfQotCi0JCWlmICghZGVzYy0+bm9hdXRvZW5hYmxlKSB7Ci0JCQlkZXNjLT5kaXNhYmxlX2RlcHRoID0gMDsKLQkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXJlcXVlc3RfaXJxIC0gYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUKLSAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIGFsbG9jYXRlCi0gKglAaGFuZGxlcjogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIElSUSBvY2N1cnMKLSAqCUBpcnFmbGFnczogSW50ZXJydXB0IHR5cGUgZmxhZ3MKLSAqCUBkZXZuYW1lOiBBbiBhc2NpaSBuYW1lIGZvciB0aGUgY2xhaW1pbmcgZGV2aWNlCi0gKglAZGV2X2lkOiBBIGNvb2tpZSBwYXNzZWQgYmFjayB0byB0aGUgaGFuZGxlciBmdW5jdGlvbgotICoKLSAqCVRoaXMgY2FsbCBhbGxvY2F0ZXMgaW50ZXJydXB0IHJlc291cmNlcyBhbmQgZW5hYmxlcyB0aGUKLSAqCWludGVycnVwdCBsaW5lIGFuZCBJUlEgaGFuZGxpbmcuIEZyb20gdGhlIHBvaW50IHRoaXMKLSAqCWNhbGwgaXMgbWFkZSB5b3VyIGhhbmRsZXIgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQuIFNpbmNlCi0gKgl5b3VyIGhhbmRsZXIgZnVuY3Rpb24gbXVzdCBjbGVhciBhbnkgaW50ZXJydXB0IHRoZSBib2FyZAotICoJcmFpc2VzLCB5b3UgbXVzdCB0YWtlIGNhcmUgYm90aCB0byBpbml0aWFsaXNlIHlvdXIgaGFyZHdhcmUKLSAqCWFuZCB0byBzZXQgdXAgdGhlIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSByaWdodCBvcmRlci4KLSAqCi0gKglEZXZfaWQgbXVzdCBiZSBnbG9iYWxseSB1bmlxdWUuIE5vcm1hbGx5IHRoZSBhZGRyZXNzIG9mIHRoZQotICoJZGV2aWNlIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgYXMgdGhlIGNvb2tpZS4gU2luY2UgdGhlIGhhbmRsZXIKLSAqCXJlY2VpdmVzIHRoaXMgdmFsdWUgaXQgbWFrZXMgc2Vuc2UgdG8gdXNlIGl0LgotICoKLSAqCUlmIHlvdXIgaW50ZXJydXB0IGlzIHNoYXJlZCB5b3UgbXVzdCBwYXNzIGEgbm9uIE5VTEwgZGV2X2lkCi0gKglhcyB0aGlzIGlzIHJlcXVpcmVkIHdoZW4gZnJlZWluZyB0aGUgaW50ZXJydXB0LgotICoKLSAqCUZsYWdzOgotICoKLSAqCVNBX1NISVJRCQlJbnRlcnJ1cHQgaXMgc2hhcmVkCi0gKgotICoJU0FfSU5URVJSVVBUCQlEaXNhYmxlIGxvY2FsIGludGVycnVwdHMgd2hpbGUgcHJvY2Vzc2luZwotICoKLSAqCVNBX1NBTVBMRV9SQU5ET00JVGhlIGludGVycnVwdCBjYW4gYmUgdXNlZCBmb3IgZW50cm9weQotICoKLSAqLwotaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAotCQkgdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MsIGNvbnN0IGNoYXIgKiBkZXZuYW1lLCB2b2lkICpkZXZfaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByZXR2YWw7Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCi0JaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFpcnFfZGVzY1tpcnFdLnZhbGlkIHx8ICFoYW5kbGVyIHx8Ci0JICAgIChpcnFfZmxhZ3MgJiBTQV9TSElSUSAmJiAhZGV2X2lkKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhY3Rpb24gPSAoc3RydWN0IGlycWFjdGlvbiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjdGlvbikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlhY3Rpb24tPmhhbmRsZXIgPSBoYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MgPSBpcnFfZmxhZ3M7Ci0JY3B1c19jbGVhcihhY3Rpb24tPm1hc2spOwotCWFjdGlvbi0+bmFtZSA9IGRldm5hbWU7Ci0JYWN0aW9uLT5uZXh0ID0gTlVMTDsKLQlhY3Rpb24tPmRldl9pZCA9IGRldl9pZDsKLQotCXJldHZhbCA9IHNldHVwX2lycShpcnEsIGFjdGlvbik7Ci0KLQlpZiAocmV0dmFsKQotCQlrZnJlZShhY3Rpb24pOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLUVYUE9SVF9TWU1CT0wocmVxdWVzdF9pcnEpOwotCi0vKioKLSAqCWZyZWVfaXJxIC0gZnJlZSBhbiBpbnRlcnJ1cHQKLSAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIGZyZWUKLSAqCUBkZXZfaWQ6IERldmljZSBpZGVudGl0eSB0byBmcmVlCi0gKgotICoJUmVtb3ZlIGFuIGludGVycnVwdCBoYW5kbGVyLiBUaGUgaGFuZGxlciBpcyByZW1vdmVkIGFuZCBpZiB0aGUKLSAqCWludGVycnVwdCBsaW5lIGlzIG5vIGxvbmdlciBpbiB1c2UgYnkgYW55IGRyaXZlciBpdCBpcyBkaXNhYmxlZC4KLSAqCU9uIGEgc2hhcmVkIElSUSB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQKLSAqCW9uIHRoZSBjYXJkIGl0IGRyaXZlcyBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqCVRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCi0gKi8KLXZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb24sICoqcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFpcnFfZGVzY1tpcnFdLnZhbGlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgSVJRJWRcbiIsaXJxKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKLQlmb3IgKHAgPSAmaXJxX2Rlc2NbaXJxXS5hY3Rpb247IChhY3Rpb24gPSAqcCkgIT0gTlVMTDsgcCA9ICZhY3Rpb24tPm5leHQpIHsKLQkJaWYgKGFjdGlvbi0+ZGV2X2lkICE9IGRldl9pZCkKLQkJCWNvbnRpbnVlOwotCi0JICAgIAkvKiBGb3VuZCBpdCAtIG5vdyBmcmVlIGl0ICovCi0JCSpwID0gYWN0aW9uLT5uZXh0OwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2NvbnRyb2xsZXJfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBmcmVlIElSUSVkXG4iLGlycSk7Ci0JCWR1bXBfc3RhY2soKTsKLQl9IGVsc2UgewotCQlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKLQkJa2ZyZWUoYWN0aW9uKTsKLQl9Ci19Ci0KLUVYUE9SVF9TWU1CT0woZnJlZV9pcnEpOwotCi1zdGF0aWMgREVDTEFSRV9NVVRFWChwcm9iZV9zZW0pOwotCi0vKiBTdGFydCB0aGUgaW50ZXJydXB0IHByb2JpbmcuICBVbmxpa2Ugb3RoZXIgYXJjaGl0ZWN0dXJlcywKLSAqIHdlIGRvbid0IHJldHVybiBhIG1hc2sgb2YgaW50ZXJydXB0cyBmcm9tIHByb2JlX2lycV9vbiwKLSAqIGJ1dCByZXR1cm4gdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIGVuYWJsZWQgZm9yIHRoZSBwcm9iZS4KLSAqIFRoZSBpbnRlcnJ1cHRzIHdoaWNoIGhhdmUgYmVlbiBlbmFibGVkIGZvciBwcm9iaW5nIGlzCi0gKiBpbnN0ZWFkIHJlY29yZGVkIGluIHRoZSBpcnFfZGVzYyBzdHJ1Y3R1cmUuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGksIGlycXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgZGVsYXk7Ci0KLQlkb3duKCZwcm9iZV9zZW0pOwotCi0JLyoKLQkgKiBmaXJzdCBzbmFmZmxlIHVwIGFueSB1bmFzc2lnbmVkIGJ1dAotCSAqIHByb2JlLWFibGUgaW50ZXJydXB0cwotCSAqLwotCXNwaW5fbG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJaWYgKCFpcnFfZGVzY1tpXS5wcm9iZV9vayB8fCBpcnFfZGVzY1tpXS5hY3Rpb24pCi0JCQljb250aW51ZTsKLQotCQlpcnFfZGVzY1tpXS5wcm9iaW5nID0gMTsKLQkJaXJxX2Rlc2NbaV0udHJpZ2dlcmVkID0gMDsKLQkJaWYgKGlycV9kZXNjW2ldLmNoaXAtPnNldF90eXBlKQotCQkJaXJxX2Rlc2NbaV0uY2hpcC0+c2V0X3R5cGUoaSwgSVJRVF9QUk9CRSk7Ci0JCWlycV9kZXNjW2ldLmNoaXAtPnVubWFzayhpKTsKLQkJaXJxcyArPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOwotCi0JLyoKLQkgKiB3YWl0IGZvciBzcHVyaW91cyBpbnRlcnJ1cHRzIHRvIG1hc2sgdGhlbXNlbHZlcyBvdXQgYWdhaW4KLQkgKi8KLQlmb3IgKGRlbGF5ID0gamlmZmllcyArIEhaLzEwOyB0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWxheSk7ICkKLQkJLyogbWluIDEwMG1zIGRlbGF5ICovOwotCi0JLyoKLQkgKiBub3cgZmlsdGVyIG91dCBhbnkgb2J2aW91c2x5IHNwdXJpb3VzIGludGVycnVwdHMKLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCWlmIChpcnFfZGVzY1tpXS5wcm9iaW5nICYmIGlycV9kZXNjW2ldLnRyaWdnZXJlZCkgewotCQkJaXJxX2Rlc2NbaV0ucHJvYmluZyA9IDA7Ci0JCQlpcnFzIC09IDE7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKLQotCXJldHVybiBpcnFzOwotfQotCi1FWFBPUlRfU1lNQk9MKHByb2JlX2lycV9vbik7Ci0KLXVuc2lnbmVkIGludCBwcm9iZV9pcnFfbWFzayh1bnNpZ25lZCBsb25nIGlycXMpCi17Ci0JdW5zaWduZWQgaW50IG1hc2sgPSAwLCBpOwotCi0Jc3Bpbl9sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IDE2ICYmIGkgPCBOUl9JUlFTOyBpKyspCi0JCWlmIChpcnFfZGVzY1tpXS5wcm9iaW5nICYmIGlycV9kZXNjW2ldLnRyaWdnZXJlZCkKLQkJCW1hc2sgfD0gMSA8PCBpOwotCXNwaW5fdW5sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci0KLQl1cCgmcHJvYmVfc2VtKTsKLQotCXJldHVybiBtYXNrOwotfQotRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfbWFzayk7Ci0KLS8qCi0gKiBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgotICogID49IDAgLSBpbnRlcnJ1cHQgbnVtYmVyCi0gKiAgICAtMSAtIG5vIGludGVycnVwdC9tYW55IGludGVycnVwdHMKLSAqLwotaW50IHByb2JlX2lycV9vZmYodW5zaWduZWQgbG9uZyBpcnFzKQotewotCXVuc2lnbmVkIGludCBpOwotCWludCBpcnFfZm91bmQgPSBOT19JUlE7Ci0KLQkvKgotCSAqIGxvb2sgYXQgdGhlIGludGVycnVwdHMsIGFuZCBmaW5kIGV4YWN0bHkgb25lCi0JICogdGhhdCB3ZSB3ZXJlIHByb2JpbmcgaGFzIGJlZW4gdHJpZ2dlcmVkCi0JICovCi0Jc3Bpbl9sb2NrX2lycSgmaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlpZiAoaXJxX2Rlc2NbaV0ucHJvYmluZyAmJgotCQkgICAgaXJxX2Rlc2NbaV0udHJpZ2dlcmVkKSB7Ci0JCQlpZiAoaXJxX2ZvdW5kICE9IE5PX0lSUSkgewotCQkJCWlycV9mb3VuZCA9IE5PX0lSUTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlycV9mb3VuZCA9IGk7Ci0JCX0KLQl9Ci0KLQlpZiAoaXJxX2ZvdW5kID09IC0xKQotCQlpcnFfZm91bmQgPSBOT19JUlE7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKLQotCXVwKCZwcm9iZV9zZW0pOwotCi0JcmV0dXJuIGlycV9mb3VuZDsKLX0KLQotRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfb2ZmKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHJvdXRlX2lycShzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKLXsKLQlwcl9kZWJ1ZygiSVJRJXU6IG1vdmluZyBmcm9tIGNwdSV1IHRvIGNwdSV1XG4iLCBpcnEsIGRlc2MtPmNwdSwgY3B1KTsKLQotCXNwaW5fbG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOwotCWRlc2MtPmNwdSA9IGNwdTsKLQlkZXNjLT5jaGlwLT5zZXRfY3B1KGRlc2MsIGlycSwgY3B1KTsKLQlzcGluX3VubG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOwotfQotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBpbnQKLWlycV9hZmZpbml0eV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpcnFkZXNjICpkZXNjID0gaXJxX2Rlc2MgKyAoKGludClkYXRhKTsKLQlpbnQgbGVuID0gY3B1bWFza19zY25wcmludGYocGFnZSwgY291bnQsIGRlc2MtPmFmZmluaXR5KTsKLQotCWlmIChjb3VudCAtIGxlbiA8IDIpCi0JCXJldHVybiAtRUlOVkFMOwotCXBhZ2VbbGVuKytdID0gJ1xuJzsKLQlwYWdlW2xlbl0gPSAnXDAnOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludAotaXJxX2FmZmluaXR5X3dyaXRlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpcnEgPSAodW5zaWduZWQgaW50KWRhdGE7Ci0Jc3RydWN0IGlycWRlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQljcHVtYXNrX3QgYWZmaW5pdHksIHRtcDsKLQlpbnQgcmV0ID0gLUVJTzsKLQotCWlmICghZGVzYy0+Y2hpcC0+c2V0X2NwdSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBjcHVtYXNrX3BhcnNlKGJ1ZmZlciwgY291bnQsIGFmZmluaXR5KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCWNwdXNfYW5kKHRtcCwgYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRlc2MtPmFmZmluaXR5ID0gYWZmaW5pdHk7Ci0Jcm91dGVfaXJxKGRlc2MsIGlycSwgZmlyc3RfY3B1KHRtcCkpOwotCXJldCA9IGNvdW50OwotCi0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi12b2lkIF9faW5pdCBpbml0X2lycV9wcm9jKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyOwotCWludCBpcnE7Ci0KLQlkaXIgPSBwcm9jX21rZGlyKCJpcnEiLCBOVUxMKTsKLQlpZiAoIWRpcikKLQkJcmV0dXJuOwotCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgewotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwotCQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKLQkJY2hhciBuYW1lWzE2XTsKLQotCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCW1lbXNldChuYW1lLCAwLCBzaXplb2YobmFtZSkpOwotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSkgLSAxLCAiJXUiLCBpcnEpOwotCi0JCWRlc2MtPnByb2NkaXIgPSBwcm9jX21rZGlyKG5hbWUsIGRpcik7Ci0JCWlmICghZGVzYy0+cHJvY2RpcikKLQkJCWNvbnRpbnVlOwotCi0JCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNtcF9hZmZpbml0eSIsIDA2MDAsIGRlc2MtPnByb2NkaXIpOwotCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5ubGluayA9IDE7Ci0JCQllbnRyeS0+ZGF0YSA9ICh2b2lkICopaXJxOwotCQkJZW50cnktPnJlYWRfcHJvYyA9IGlycV9hZmZpbml0eV9yZWFkX3Byb2M7Ci0JCQllbnRyeS0+d3JpdGVfcHJvYyA9IGlycV9hZmZpbml0eV93cml0ZV9wcm9jOwotCQl9Ci0JfQotI2VuZGlmCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlkZXNjLT5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVCB8IElSUV9OT1BST0JFIHwgSVJRX05PQVVUT0VOOworCWlmIChpZmxhZ3MgJiBJUlFGX1ZBTElEKQorCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9OT1JFUVVFU1Q7CisJaWYgKGlmbGFncyAmIElSUUZfUFJPQkUpCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PUFJPQkU7CisJaWYgKCEoaWZsYWdzICYgSVJRRl9OT0FVVE9FTikpCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX05PQVVUT0VOOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKIHsKLQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYzsKIAlpbnQgaXJxOwogCisJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKKwkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVCB8IElSUV9ERUxBWUVEX0RJU0FCTEUgfAorCQkJSVJRX05PUFJPQkU7CisKICNpZmRlZiBDT05GSUdfU01QCiAJYmFkX2lycV9kZXNjLmFmZmluaXR5ID0gQ1BVX01BU0tfQUxMOwogCWJhZF9pcnFfZGVzYy5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAjZW5kaWYKLQotCWZvciAoaXJxID0gMCwgZGVzYyA9IGlycV9kZXNjOyBpcnEgPCBOUl9JUlFTOyBpcnErKywgZGVzYysrKSB7Ci0JCSpkZXNjID0gYmFkX2lycV9kZXNjOwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+cGVuZCk7Ci0JfQotCiAJaW5pdF9hcmNoX2lycSgpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBub2lycWRlYnVnX3NldHVwKGNoYXIgKnN0cikKLXsKLQlub2lycWRlYnVnID0gMTsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgibm9pcnFkZWJ1ZyIsIG5vaXJxZGVidWdfc2V0dXApOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAvKgogICogVGhlIENQVSBoYXMgYmVlbiBtYXJrZWQgb2ZmbGluZS4gIE1pZ3JhdGUgSVJRcyBvZmYgdGhpcyBDUFUuICBJZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2l3bW14dC1ub3RpZmllci5jIGIvYXJjaC9hcm0va2VybmVsL2l3bW14dC1ub3RpZmllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTg2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LW5vdGlmaWVyLmMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LW5vdGlmaWVyLmMKKyAqCisgKiAgWFNjYWxlIGlXTU1YdCAoQ29uY2FuKSBjb250ZXh0IHN3aXRjaGluZyBhbmQgaGFuZGxpbmcKKyAqCisgKiAgSW5pdGlhbCBjb2RlOgorICogIENvcHlyaWdodCAoYykgMjAwMywgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiAgRnVsbCBsYXp5IHN3aXRjaGluZyBzdXBwb3J0LCBvcHRpbWl6YXRpb25zIGFuZCBtb3JlLCBieSBOaWNvbGFzIFBpdHJlCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaXdtbXh0X2RvKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRIUkVBRF9OT1RJRllfRkxVU0g6CisJCS8qCisJCSAqIGZsdXNoX3RocmVhZCgpIHplcm9lcyB0aHJlYWQtPmZwc3RhdGUsIHNvIG5vIG5lZWQKKwkJICogdG8gZG8gYW55dGhpbmcgaGVyZS4KKwkJICoKKwkJICogRkFMTFRIUk9VR0g6IEVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gb3ZlcndyaXRlIG91ciBuZXdseQorCQkgKiBpbml0aWFsaXNlZCBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgZmF1bHQuCisJCSAqLworCisJY2FzZSBUSFJFQURfTk9USUZZX1JFTEVBU0U6CisJCWl3bW14dF90YXNrX3JlbGVhc2UodGhyZWFkKTsKKwkJYnJlYWs7CisKKwljYXNlIFRIUkVBRF9OT1RJRllfU1dJVENIOgorCQlpd21teHRfdGFza19zd2l0Y2godGhyZWFkKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGl3bW14dF9ub3RpZmllcl9ibG9jayA9IHsKKwkubm90aWZpZXJfY2FsbAk9IGl3bW14dF9kbywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGl3bW14dF9pbml0KHZvaWQpCit7CisJdGhyZWFkX3JlZ2lzdGVyX25vdGlmaWVyKCZpd21teHRfbm90aWZpZXJfYmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoaXdtbXh0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2l3bW14dC5TIGIvYXJjaC9hcm0va2VybmVsL2l3bW14dC5TCmluZGV4IGEzYmFlOTUuLmI2M2I1MjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pd21teHQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LlMKQEAgLTI3MSwzMCArMjcxLDI3IEBACiAvKgogICogQ29uY2FuIGhhbmRsaW5nIG9uIHRhc2sgc3dpdGNoCiAgKgotICogcjAgPSBwcmV2aW91cyB0YXNrX3N0cnVjdCBwb2ludGVyIChtdXN0IGJlIHByZXNlcnZlZCkKLSAqIHIxID0gcHJldmlvdXMgdGhyZWFkX2luZm8gcG9pbnRlcgotICogcjIgPSBuZXh0IHRocmVhZF9pbmZvIHBvaW50ZXIgKG11c3QgYmUgcHJlc2VydmVkKQorICogcjAgPSBuZXh0IHRocmVhZF9pbmZvIHBvaW50ZXIKICAqCi0gKiBDYWxsZWQgb25seSBmcm9tIF9fc3dpdGNoX3RvIHdpdGggdGFzayBwcmVlbXB0aW9uIGRpc2FibGVkLgotICogTm8gbmVlZCB0byBjYXJlIGFib3V0IHByZXNlcnZpbmcgcjQgYW5kIGFib3ZlLgorICogQ2FsbGVkIG9ubHkgZnJvbSB0aGUgaXdtbXh0IG5vdGlmaWVyIHdpdGggdGFzayBwcmVlbXB0aW9uIGRpc2FibGVkLgogICovCiBFTlRSWShpd21teHRfdGFza19zd2l0Y2gpCiAKLQltcmMJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAotCXRzdAlyNCwgIzB4MwkJCUAgQ1AwIGFuZCBDUDEgYWNjZXNzaWJsZT8KKwltcmMJcDE1LCAwLCByMSwgYzE1LCBjMSwgMAorCXRzdAlyMSwgIzB4MwkJCUAgQ1AwIGFuZCBDUDEgYWNjZXNzaWJsZT8KIAlibmUJMWYJCQkJQCB5ZXM6IGJsb2NrIHRoZW0gZm9yIG5leHQgdGFzawogCi0JbGRyCXI1LCA9Y29uY2FuX293bmVyCi0JYWRkCXI2LCByMiwgI1RJX0lXTU1YVF9TVEFURQlAIGdldCBuZXh0IHRhc2sgQ29uY2FuIHNhdmUgYXJlYQotCWxkcglyNSwgW3I1XQkJCUAgZ2V0IGN1cnJlbnQgQ29uY2FuIG93bmVyCi0JdGVxCXI1LCByNgkJCQlAIG5leHQgdGFzayBvd25zIGl0PworCWxkcglyMiwgPWNvbmNhbl9vd25lcgorCWFkZAlyMywgcjAsICNUSV9JV01NWFRfU1RBVEUJQCBnZXQgbmV4dCB0YXNrIENvbmNhbiBzYXZlIGFyZWEKKwlsZHIJcjIsIFtyMl0JCQlAIGdldCBjdXJyZW50IENvbmNhbiBvd25lcgorCXRlcQlyMiwgcjMJCQkJQCBuZXh0IHRhc2sgb3ducyBpdD8KIAltb3ZuZQlwYywgbHIJCQkJQCBubzogbGVhdmUgQ29uY2FuIGRpc2FibGVkCiAKLTE6CWVvcglyNCwgcjQsICMzCQkJQCBmbGlwIENvbmNhbiBhY2Nlc3MKLQltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAorMToJZW9yCXIxLCByMSwgIzMJCQlAIGZsaXAgQ29uY2FuIGFjY2VzcworCW1jcglwMTUsIDAsIHIxLCBjMTUsIGMxLCAwCiAKLQltcmMJcDE1LCAwLCByNCwgYzIsIGMwLCAwCi0Jc3ViCXBjLCBsciwgcjQsIGxzciAjMzIJCUAgY3B3YWl0IGFuZCByZXR1cm4KKwltcmMJcDE1LCAwLCByMSwgYzIsIGMwLCAwCisJc3ViCXBjLCBsciwgcjEsIGxzciAjMzIJCUAgY3B3YWl0IGFuZCByZXR1cm4KIAogLyoKICAqIFJlbW92ZSBDb25jYW4gb3duZXJzaGlwIG9mIGdpdmVuIHRhc2sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwppbmRleCAwNTViZjVkLi4yOTgzNjNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqIE1vZHVsZSBhbGxvY2F0aW9uIG1ldGhvZCBzdWdnZXN0ZWQgYnkgQW5kaSBLbGVlbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZTFjNzdlZS4uMzA3OTUzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNTMsOSArMzUyLDYgQEAKIAltZW1zZXQoJnRocmVhZC0+ZnBzdGF0ZSwgMCwgc2l6ZW9mKHVuaW9uIGZwX3N0YXRlKSk7CiAKIAl0aHJlYWRfbm90aWZ5KFRIUkVBRF9OT1RJRllfRkxVU0gsIHRocmVhZCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVdNTVhUKQotCWl3bW14dF90YXNrX3JlbGVhc2UodGhyZWFkKTsKLSNlbmRpZgogfQogCiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQpAQCAtMzYzLDkgKzM1OSw2IEBACiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0YXNrX3RocmVhZF9pbmZvKGRlYWRfdGFzayk7CiAKIAl0aHJlYWRfbm90aWZ5KFRIUkVBRF9OT1RJRllfUkVMRUFTRSwgdGhyZWFkKTsKLSNpZiBkZWZpbmVkKENPTkZJR19JV01NWFQpCi0JaXdtbXh0X3Rhc2tfcmVsZWFzZSh0aHJlYWQpOwotI2VuZGlmCiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpIF9fYXNtX18oInJldF9mcm9tX2ZvcmsiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCBhMWQxYjI5Li45MjU0YmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC05LDcgKzksNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtNjM0LDYgKzYzMywzMiBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUlVOQ0gKKy8qCisgKiBHZXQgdGhlIGNoaWxkIENydW5jaCBzdGF0ZS4KKyAqLworc3RhdGljIGludCBwdHJhY2VfZ2V0Y3J1bmNocmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVmcCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKKworCWNydW5jaF90YXNrX2Rpc2FibGUodGhyZWFkKTsgIC8qIGZvcmNlIGl0IHRvIHJhbSAqLworCXJldHVybiBjb3B5X3RvX3VzZXIodWZwLCAmdGhyZWFkLT5jcnVuY2hzdGF0ZSwgQ1JVTkNIX1NJWkUpCisJCT8gLUVGQVVMVCA6IDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIGNoaWxkIENydW5jaCBzdGF0ZS4KKyAqLworc3RhdGljIGludCBwdHJhY2Vfc2V0Y3J1bmNocmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVmcCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKKworCWNydW5jaF90YXNrX3JlbGVhc2UodGhyZWFkKTsgIC8qIGZvcmNlIGEgcmVsb2FkICovCisJcmV0dXJuIGNvcHlfZnJvbV91c2VyKCZ0aHJlYWQtPmNydW5jaHN0YXRlLCB1ZnAsIENSVU5DSF9TSVpFKQorCQk/IC1FRkFVTFQgOiAwOworfQorI2VuZGlmCisKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKQEAgLTc2NSw2ICs3OTAsMTYgQEAKIAkJCWNoaWxkLT5wdHJhY2VfbWVzc2FnZSA9IGRhdGE7CiAJCQlicmVhazsKIAorI2lmZGVmIENPTkZJR19DUlVOQ0gKKwkJY2FzZSBQVFJBQ0VfR0VUQ1JVTkNIUkVHUzoKKwkJCXJldCA9IHB0cmFjZV9nZXRjcnVuY2hyZWdzKGNoaWxkLCAodm9pZCBfX3VzZXIgKilkYXRhKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFRSQUNFX1NFVENSVU5DSFJFR1M6CisJCQlyZXQgPSBwdHJhY2Vfc2V0Y3J1bmNocmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopZGF0YSk7CisJCQlicmVhazsKKyNlbmRpZgorCiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggMDkzY2NiYS4uN2Q2YTUxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTcsNyArNyw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KQEAgLTExOSw5ICsxMTgsMjQgQEAKICAqIFN0YW5kYXJkIG1lbW9yeSByZXNvdXJjZXMKICAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtZW1fcmVzW10gPSB7Ci0JeyAiVmlkZW8gUkFNIiwgICAwLCAgICAgMCwgICAgIElPUkVTT1VSQ0VfTUVNCQkJfSwKLQl7ICJLZXJuZWwgdGV4dCIsIDAsICAgICAwLCAgICAgSU9SRVNPVVJDRV9NRU0JCQl9LAotCXsgIktlcm5lbCBkYXRhIiwgMCwgICAgIDAsICAgICBJT1JFU09VUkNFX01FTQkJCX0KKwl7CisJCS5uYW1lID0gIlZpZGVvIFJBTSIsCisJCS5zdGFydCA9IDAsCisJCS5lbmQgPSAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkubmFtZSA9ICJLZXJuZWwgdGV4dCIsCisJCS5zdGFydCA9IDAsCisJCS5lbmQgPSAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkubmFtZSA9ICJLZXJuZWwgZGF0YSIsCisJCS5zdGFydCA9IDAsCisJCS5lbmQgPSAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0KIH07CiAKICNkZWZpbmUgdmlkZW9fcmFtICAgbWVtX3Jlc1swXQpAQCAtMTI5LDkgKzE0MywyNCBAQAogI2RlZmluZSBrZXJuZWxfZGF0YSBtZW1fcmVzWzJdCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9fcmVzW10gPSB7Ci0JeyAicmVzZXJ2ZWQiLCAgICAweDNiYywgMHgzYmUsIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJyZXNlcnZlZCIsICAgIDB4Mzc4LCAweDM3ZiwgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgInJlc2VydmVkIiwgICAgMHgyNzgsIDB4MjdmLCBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9CVVNZIH0KKwl7CisJCS5uYW1lID0gInJlc2VydmVkIiwKKwkJLnN0YXJ0ID0gMHgzYmMsCisJCS5lbmQgPSAweDNiZSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfQlVTWQorCX0sCisJeworCQkubmFtZSA9ICJyZXNlcnZlZCIsCisJCS5zdGFydCA9IDB4Mzc4LAorCQkuZW5kID0gMHgzN2YsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX0JVU1kKKwl9LAorCXsKKwkJLm5hbWUgPSAicmVzZXJ2ZWQiLAorCQkuc3RhcnQgPSAweDI3OCwKKwkJLmVuZCA9IDB4MjdmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9CVVNZCisJfQogfTsKIAogI2RlZmluZSBscDAgaW9fcmVzWzBdCkBAIC0zMTUsOSArMzQ0LDkgQEAKIAljcHVfY2FjaGUgPSAqbGlzdC0+Y2FjaGU7CiAjZW5kaWYKIAotCXByaW50aygiQ1BVOiAlcyBbJTA4eF0gcmV2aXNpb24gJWQgKEFSTXYlcylcbiIsCisJcHJpbnRrKCJDUFU6ICVzIFslMDh4XSByZXZpc2lvbiAlZCAoQVJNdiVzKSwgY3I9JTA4eFxuIiwKIAkgICAgICAgY3B1X25hbWUsIHByb2Nlc3Nvcl9pZCwgKGludClwcm9jZXNzb3JfaWQgJiAxNSwKLQkgICAgICAgcHJvY19hcmNoW2NwdV9hcmNoaXRlY3R1cmUoKV0pOworCSAgICAgICBwcm9jX2FyY2hbY3B1X2FyY2hpdGVjdHVyZSgpXSwgY3JfYWxpZ25tZW50KTsKIAogCXNwcmludGYoc3lzdGVtX3V0c25hbWUubWFjaGluZSwgIiVzJWMiLCBsaXN0LT5hcmNoX25hbWUsIEVORElBTk5FU1MpOwogCXNwcmludGYoZWxmX3BsYXRmb3JtLCAiJXMlYyIsIGxpc3QtPmVsZl9uYW1lLCBFTkRJQU5ORVNTKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCAxY2UwNWVjLi40OGNmN2ZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC03LDcgKzcsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTEzMiw2ICsxMzEsMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX0NSVU5DSAorc3RhdGljIGludCBwcmVzZXJ2ZV9jcnVuY2hfY29udGV4dChzdHJ1Y3QgY3J1bmNoX3NpZ2ZyYW1lICpmcmFtZSkKK3sKKwljaGFyIGtidWZbc2l6ZW9mKCpmcmFtZSkgKyA4XTsKKwlzdHJ1Y3QgY3J1bmNoX3NpZ2ZyYW1lICprZnJhbWU7CisKKwkvKiB0aGUgY3J1bmNoIGNvbnRleHQgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLworCWtmcmFtZSA9IChzdHJ1Y3QgY3J1bmNoX3NpZ2ZyYW1lICopKCh1bnNpZ25lZCBsb25nKShrYnVmICsgOCkgJiB+Nyk7CisJa2ZyYW1lLT5tYWdpYyA9IENSVU5DSF9NQUdJQzsKKwlrZnJhbWUtPnNpemUgPSBDUlVOQ0hfU1RPUkFHRV9TSVpFOworCWNydW5jaF90YXNrX2NvcHkoY3VycmVudF90aHJlYWRfaW5mbygpLCAma2ZyYW1lLT5zdG9yYWdlKTsKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIoZnJhbWUsIGtmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpOworfQorCitzdGF0aWMgaW50IHJlc3RvcmVfY3J1bmNoX2NvbnRleHQoc3RydWN0IGNydW5jaF9zaWdmcmFtZSAqZnJhbWUpCit7CisJY2hhciBrYnVmW3NpemVvZigqZnJhbWUpICsgOF07CisJc3RydWN0IGNydW5jaF9zaWdmcmFtZSAqa2ZyYW1lOworCisJLyogdGhlIGNydW5jaCBjb250ZXh0IG11c3QgYmUgNjQgYml0IGFsaWduZWQgKi8KKwlrZnJhbWUgPSAoc3RydWN0IGNydW5jaF9zaWdmcmFtZSAqKSgodW5zaWduZWQgbG9uZykoa2J1ZiArIDgpICYgfjcpOworCWlmIChfX2NvcHlfZnJvbV91c2VyKGtmcmFtZSwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKKwkJcmV0dXJuIC0xOworCWlmIChrZnJhbWUtPm1hZ2ljICE9IENSVU5DSF9NQUdJQyB8fAorCSAgICBrZnJhbWUtPnNpemUgIT0gQ1JVTkNIX1NUT1JBR0VfU0laRSkKKwkJcmV0dXJuIC0xOworCWNydW5jaF90YXNrX3Jlc3RvcmUoY3VycmVudF90aHJlYWRfaW5mbygpLCAma2ZyYW1lLT5zdG9yYWdlKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lXTU1YVAogCiBzdGF0aWMgaW50IHByZXNlcnZlX2l3bW14dF9jb250ZXh0KHN0cnVjdCBpd21teHRfc2lnZnJhbWUgKmZyYW1lKQpAQCAtMjE0LDYgKzI0NCwxMCBAQAogCWVyciB8PSAhdmFsaWRfdXNlcl9yZWdzKHJlZ3MpOwogCiAJYXV4ID0gKHN0cnVjdCBhdXhfc2lnZnJhbWUgX191c2VyICopIHNmLT51Yy51Y19yZWdzcGFjZTsKKyNpZmRlZiBDT05GSUdfQ1JVTkNICisJaWYgKGVyciA9PSAwKQorCQllcnIgfD0gcmVzdG9yZV9jcnVuY2hfY29udGV4dCgmYXV4LT5jcnVuY2gpOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lXTU1YVAogCWlmIChlcnIgPT0gMCAmJiB0ZXN0X3RocmVhZF9mbGFnKFRJRl9VU0lOR19JV01NWFQpKQogCQllcnIgfD0gcmVzdG9yZV9pd21teHRfY29udGV4dCgmYXV4LT5pd21teHQpOwpAQCAtMzMzLDYgKzM2NywxMCBAQAogCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmc2YtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKIAogCWF1eCA9IChzdHJ1Y3QgYXV4X3NpZ2ZyYW1lIF9fdXNlciAqKSBzZi0+dWMudWNfcmVnc3BhY2U7CisjaWZkZWYgQ09ORklHX0NSVU5DSAorCWlmIChlcnIgPT0gMCkKKwkJZXJyIHw9IHByZXNlcnZlX2NydW5jaF9jb250ZXh0KCZhdXgtPmNydW5jaCk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfSVdNTVhUCiAJaWYgKGVyciA9PSAwICYmIHRlc3RfdGhyZWFkX2ZsYWcoVElGX1VTSU5HX0lXTU1YVCkpCiAJCWVyciB8PSBwcmVzZXJ2ZV9pd21teHRfY29udGV4dCgmYXV4LT5pd21teHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IDEzNzBkNzIuLjY4ZTk2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTcsNyArNyw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggOWMxMmQ0Zi4uMDlhNjdkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgMTk5OC0xMi0yMCAgVXBkYXRlZCBOVFAgY29kZSBhY2NvcmRpbmcgdG8gdGVjaG5pY2FsIG1lbW9yYW5kdW0gSmFuICc5NgogICogICAgICAgICAgICAgICJBIEtlcm5lbCBNb2RlbCBmb3IgUHJlY2lzaW9uIFRpbWVrZWVwaW5nIiBieSBEYXZlIE1pbGxzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggMzUyMzBhMC4uMzVhMDUyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAnbGludXgvYXJjaC9hcm0vbGliL3RyYXBzLlMnLiAgTW9zdGx5IGEgZGVidWdnaW5nIGFpZCwgYnV0IHdpbGwgcHJvYmFibHkKICAqICBraWxsIHRoZSBvZmZlbmRpbmcgcHJvY2Vzcy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDJiMjU0ZTguLjNjYTU3NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00LDcgKzQsNiBAQAogICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KIAkKQEAgLTgwLDYgKzc5LDEwIEBACiAJCSooLmV4aXQudGV4dCkKIAkJKiguZXhpdC5kYXRhKQogCQkqKC5leGl0Y2FsbC5leGl0KQorI2lmbmRlZiBDT05GSUdfTU1VCisJCSooLmZpeHVwKQorCQkqKF9fZXhfdGFibGUpCisjZW5kaWYKIAl9CiAKIAkudGV4dCA6IHsJCQkvKiBSZWFsIHRleHQgc2VnbWVudAkJKi8KQEAgLTg3LDcgKzkwLDkgQEAKIAkJCSooLnRleHQpCiAJCQlTQ0hFRF9URVhUCiAJCQlMT0NLX1RFWFQKKyNpZmRlZiBDT05GSUdfTU1VCiAJCQkqKC5maXh1cCkKKyNlbmRpZgogCQkJKiguZ251Lndhcm5pbmcpCiAJCQkqKC5yb2RhdGEpCiAJCQkqKC5yb2RhdGEuKikKQEAgLTE0Miw3ICsxNDcsOSBAQAogCQkgKi8KIAkJLiA9IEFMSUdOKDMyKTsKIAkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyNpZmRlZiBDT05GSUdfTU1VCiAJCSooX19leF90YWJsZSkKKyNlbmRpZgogCQlfX3N0b3BfX19leF90YWJsZSA9IC47CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9NYWtlZmlsZSBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQppbmRleCA3YjcyNmI2Li4zMDM1MWNkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQpAQCAtNiwyOCArNiwzMSBAQAogCiBsaWIteQkJOj0gYmFja3RyYWNlLm8gY2hhbmdlYml0Lm8gY3N1bWlwdjYubyBjc3VtcGFydGlhbC5vICAgXAogCQkgICBjc3VtcGFydGlhbGNvcHkubyBjc3VtcGFydGlhbGNvcHl1c2VyLm8gY2xlYXJiaXQubyBcCi0JCSAgIGNvcHlfcGFnZS5vIGRlbGF5Lm8gZmluZGJpdC5vIG1lbWNoci5vIG1lbWNweS5vICAgIFwKKwkJICAgZGVsYXkubyBmaW5kYml0Lm8gbWVtY2hyLm8gbWVtY3B5Lm8JCSAgICAgIFwKIAkJICAgbWVtbW92ZS5vIG1lbXNldC5vIG1lbXplcm8ubyBzZXRiaXQubyAgICAgICAgICAgICAgXAogCQkgICBzdHJuY3B5X2Zyb21fdXNlci5vIHN0cm5sZW5fdXNlci5vICAgICAgICAgICAgICAgICBcCiAJCSAgIHN0cmNoci5vIHN0cnJjaHIubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJICAgdGVzdGNoYW5nZWJpdC5vIHRlc3RjbGVhcmJpdC5vIHRlc3RzZXRiaXQubyAgICAgICAgXAotCQkgICBnZXR1c2VyLm8gcHV0dXNlci5vIGNsZWFyX3VzZXIubyAgICAgICAgICAgICAgICAgICBcCiAJCSAgIGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIG11bGRpMy5vICAgICAgICAgICAgIFwKIAkJICAgdWNtcGRpMi5vIGxpYjFmdW5jcy5vIGRpdjY0Lm8gc2hhMS5vICAgICAgICAgICAgICAgXAogCQkgICBpby1yZWFkc2IubyBpby13cml0ZXNiLm8gaW8tcmVhZHNsLm8gaW8td3JpdGVzbC5vCiAKK21tdS15CTo9IGNsZWFyX3VzZXIubyBjb3B5X3BhZ2UubyBnZXR1c2VyLm8gcHV0dXNlci5vCisKICMgdGhlIGNvZGUgaW4gdWFjY2Vzcy5TIGlzIG5vdCBwcmVlbXB0aW9uIHNhZmUgYW5kCiAjIHByb2JhYmx5IGZhc3RlciBvbiBBUk12MyBvbmx5CiBpZmVxICgkKENPTkZJR19QUkVFTVBUKSx5KQotICBsaWIteQkrPSBjb3B5X2Zyb21fdXNlci5vIGNvcHlfdG9fdXNlci5vCisgIG1tdS15CSs9IGNvcHlfZnJvbV91c2VyLm8gY29weV90b191c2VyLm8KIGVsc2UKIGlmbmVxICgkKENPTkZJR19DUFVfMzJ2MykseSkKLSAgbGliLXkJKz0gY29weV9mcm9tX3VzZXIubyBjb3B5X3RvX3VzZXIubworICBtbXUteQkrPSBjb3B5X2Zyb21fdXNlci5vIGNvcHlfdG9fdXNlci5vCiBlbHNlCi0gIGxpYi15CSs9IHVhY2Nlc3MubworICBtbXUteQkrPSB1YWNjZXNzLm8KIGVuZGlmCiBlbmRpZgogCitsaWItJChDT05GSUdfTU1VKSArPSAkKG1tdS15KQorCiBpZmVxICgkKENPTkZJR19DUFVfMzJ2MykseSkKICAgbGliLXkJKz0gaW8tcmVhZHN3LWFybXYzLm8gaW8td3JpdGVzdy1hcm12My5vCiBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMgYi9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKaW5kZXggMDU4YjgwZC4uNzQyMzAwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JhY2t0cmFjZS5TCisrKyBiL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUwpAQCAtMTAsNyArMTAsNiBAQAogICogMjcvMDMvMDMgSWFuIE1vbHRvbiBDbGVhbiB1cCBDT05GSUdfQ1BVCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KIAkJLnRleHQKQEAgLTk3LDE2ICs5NiwxMyBAQAogCQliCTEwMDdmCiAKIC8qCi0gKiBGaXh1cCBmb3IgTERNREIKKyAqIEZpeHVwIGZvciBMRE1EQi4gIE5vdGUgdGhhdCB0aGlzIG11c3Qgbm90IGJlIGluIHRoZSBmaXh1cCBzZWN0aW9uLgogICovCi0JCS5zZWN0aW9uIC5maXh1cCwiYXgiCi0JCS5hbGlnbgkwCiAxMDA3OgkJbGRyCXIwLCA9LkxiYWQKIAkJbW92CXIxLCBmcmFtZQogCQlibAlwcmludGsKIAkJbGRtZmQJc3AhLCB7cjQgLSByOCwgcGN9CiAJCS5sdG9yZwotCQkucHJldmlvdXMKIAkJCiAJCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJCS5hbGlnbgkzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYml0b3BzLmggYi9hcmNoL2FybS9saWIvYml0b3BzLmgKaW5kZXggYjhjMTRlOS4uNTQyMjUxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JpdG9wcy5oCisrKyBiL2FyY2gvYXJtL2xpYi9iaXRvcHMuaApAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2ICYmIGRlZmluZWQoQ09ORklHX0NQVV8zMnY2SykKIAkubWFjcm8JYml0b3AsIGluc3RyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvY2xlYXJfdXNlci5TIGIvYXJjaC9hcm0vbGliL2NsZWFyX3VzZXIuUwppbmRleCBlYTQzNWFlLi5lY2IyOGRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY2xlYXJfdXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9jbGVhcl91c2VyLlMKQEAgLTEyLDEzICsxMiwxMyBAQAogCiAJCS50ZXh0CiAKLS8qIFByb3RvdHlwZTogaW50IF9fYXJjaF9jbGVhcl91c2VyKHZvaWQgKmFkZHIsIHNpemVfdCBzeikKKy8qIFByb3RvdHlwZTogaW50IF9fY2xlYXJfdXNlcih2b2lkICphZGRyLCBzaXplX3Qgc3opCiAgKiBQdXJwb3NlICA6IGNsZWFyIHNvbWUgdXNlciBtZW1vcnkKICAqIFBhcmFtcyAgIDogYWRkciAtIHVzZXIgbWVtb3J5IGFkZHJlc3MgdG8gY2xlYXIKICAqICAgICAgICAgIDogc3ogICAtIG51bWJlciBvZiBieXRlcyB0byBjbGVhcgogICogUmV0dXJucyAgOiBudW1iZXIgb2YgYnl0ZXMgTk9UIGNsZWFyZWQKICAqLwotRU5UUlkoX19hcmNoX2NsZWFyX3VzZXIpCitFTlRSWShfX2NsZWFyX3VzZXIpCiAJCXN0bWZkCXNwISwge3IxLCBscn0KIAkJbW92CXIyLCAjMAogCQljbXAJcjEsICM0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvY29weV9mcm9tX3VzZXIuUyBiL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCmluZGV4IDc0OTczOTMuLjZiNzM2M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCkBAIC0xNiw3ICsxNiw3IEBACiAvKgogICogUHJvdG90eXBlOgogICoKLSAqCXNpemVfdCBfX2FyY2hfY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQorICoJc2l6ZV90IF9fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBuKQogICoKICAqIFB1cnBvc2U6CiAgKgpAQCAtODMsNyArODMsNyBAQAogCiAJLnRleHQKIAotRU5UUlkoX19hcmNoX2NvcHlfZnJvbV91c2VyKQorRU5UUlkoX19jb3B5X2Zyb21fdXNlcikKIAogI2luY2x1ZGUgImNvcHlfdGVtcGxhdGUuUyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TIGIvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TCmluZGV4IDRhNmQ4ZWEuLjUyMjRkOTQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY29weV90b191c2VyLlMKKysrIGIvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TCkBAIC0xNiw3ICsxNiw3IEBACiAvKgogICogUHJvdG90eXBlOgogICoKLSAqCXNpemVfdCBfX2FyY2hfY29weV90b191c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgbikKKyAqCXNpemVfdCBfX2NvcHlfdG9fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IG4pCiAgKgogICogUHVycG9zZToKICAqCkBAIC04Niw3ICs4Niw3IEBACiAKIAkudGV4dAogCi1FTlRSWShfX2FyY2hfY29weV90b191c2VyKQorRU5UUlkoX19jb3B5X3RvX3VzZXIpCiAKICNpbmNsdWRlICJjb3B5X3RlbXBsYXRlLlMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TIGIvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMKaW5kZXggMzU2NDlmMC4uMzZlMzc0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMKKysrIGIvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvcGllZCAoc3RybGVuIG9mIGNvcGllZCBzdHJpbmcpLAogICogIC1FRkFVTFQgb24gZXhjZXB0aW9uLCBvciAibGVuIiBpZiB3ZSBmaWxsIHRoZSB3aG9sZSBidWZmZXIKICAqLwotRU5UUlkoX19hcmNoX3N0cm5jcHlfZnJvbV91c2VyKQorRU5UUlkoX19zdHJuY3B5X2Zyb21fdXNlcikKIAltb3YJaXAsIHIxCiAxOglzdWJzCXIyLCByMiwgIzEKIFVTRVIoCWxkcnBsYnQJcjMsIFtyMV0sICMxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3N0cm5sZW5fdXNlci5TIGIvYXJjaC9hcm0vbGliL3N0cm5sZW5fdXNlci5TCmluZGV4IDM2NjhhMTUuLjE4ZDhmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9zdHJubGVuX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvc3Rybmxlbl91c2VyLlMKQEAgLTE0LDEzICsxNCwxMyBAQAogCS50ZXh0CiAJLmFsaWduCTUKIAotLyogUHJvdG90eXBlOiB1bnNpZ25lZCBsb25nIF9fYXJjaF9zdHJubGVuX3VzZXIoY29uc3QgY2hhciAqc3RyLCBsb25nIG4pCisvKiBQcm90b3R5cGU6IHVuc2lnbmVkIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciAqc3RyLCBsb25nIG4pCiAgKiBQdXJwb3NlICA6IGdldCBsZW5ndGggb2YgYSBzdHJpbmcgaW4gdXNlciBtZW1vcnkKICAqIFBhcmFtcyAgIDogc3RyIC0gYWRkcmVzcyBvZiBzdHJpbmcgaW4gdXNlciBtZW1vcnkKICAqIFJldHVybnMgIDogbGVuZ3RoIG9mIHN0cmluZyAqaW5jbHVkaW5nIHRlcm1pbmF0b3IqCiAgKgkgICAgICBvciB6ZXJvIG9uIGV4Y2VwdGlvbiwgb3IgbiArIDEgaWYgdG9vIGxvbmcKICAqLwotRU5UUlkoX19hcmNoX3N0cm5sZW5fdXNlcikKK0VOVFJZKF9fc3Rybmxlbl91c2VyKQogCW1vdglyMiwgcjAKIDE6CiBVU0VSKAlsZHJidAlyMywgW3IwXSwgIzEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvdWFjY2Vzcy5TIGIvYXJjaC9hcm0vbGliL3VhY2Nlc3MuUwppbmRleCAxZjE1NDVkLi5iNDhiZDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvdWFjY2Vzcy5TCisrKyBiL2FyY2gvYXJtL2xpYi91YWNjZXNzLlMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2RlZmluZSBQQUdFX1NISUZUIDEyCiAKLS8qIFByb3RvdHlwZTogaW50IF9fYXJjaF9jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBuKQorLyogUHJvdG90eXBlOiBpbnQgX19jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBuKQogICogUHVycG9zZSAgOiBjb3B5IGEgYmxvY2sgdG8gdXNlciBtZW1vcnkgZnJvbSBrZXJuZWwgbWVtb3J5CiAgKiBQYXJhbXMgICA6IHRvICAgLSB1c2VyIG1lbW9yeQogICogICAgICAgICAgOiBmcm9tIC0ga2VybmVsIG1lbW9yeQpAQCAtMzksNyArMzksNyBAQAogCQlzdWIJcjIsIHIyLCBpcAogCQliCS5MYzJ1X2Rlc3RfYWxpZ25lZAogCi1FTlRSWShfX2FyY2hfY29weV90b191c2VyKQorRU5UUlkoX19jb3B5X3RvX3VzZXIpCiAJCXN0bWZkCXNwISwge3IyLCByNCAtIHI3LCBscn0KIAkJY21wCXIyLCAjNAogCQlibHQJLkxjMnVfbm90X2Vub3VnaApAQCAtMjgzLDcgKzI4Myw3IEBACiA5MDAxOgkJbGRtZmQJc3AhLCB7cjAsIHI0IC0gcjcsIHBjfQogCQkucHJldmlvdXMKIAotLyogUHJvdG90eXBlOiB1bnNpZ25lZCBsb25nIF9fYXJjaF9jb3B5X2Zyb21fdXNlcih2b2lkICp0byxjb25zdCB2b2lkICpmcm9tLHVuc2lnbmVkIGxvbmcgbik7CisvKiBQcm90b3R5cGU6IHVuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICp0byxjb25zdCB2b2lkICpmcm9tLHVuc2lnbmVkIGxvbmcgbik7CiAgKiBQdXJwb3NlICA6IGNvcHkgYSBibG9jayBmcm9tIHVzZXIgbWVtb3J5IHRvIGtlcm5lbCBtZW1vcnkKICAqIFBhcmFtcyAgIDogdG8gICAtIGtlcm5lbCBtZW1vcnkKICAqICAgICAgICAgIDogZnJvbSAtIHVzZXIgbWVtb3J5CkBAIC0zMDIsNyArMzAyLDcgQEAKIAkJc3ViCXIyLCByMiwgaXAKIAkJYgkuTGNmdV9kZXN0X2FsaWduZWQKIAotRU5UUlkoX19hcmNoX2NvcHlfZnJvbV91c2VyKQorRU5UUlkoX19jb3B5X2Zyb21fdXNlcikKIAkJc3RtZmQJc3AhLCB7cjAsIHIyLCByNCAtIHI3LCBscn0KIAkJY21wCXIyLCAjNAogCQlibHQJLkxjZnVfbm90X2Vub3VnaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3VjbXBkaTIuUyBiL2FyY2gvYXJtL2xpYi91Y21wZGkyLlMKaW5kZXggZDg0N2E2Mi4uZjc2ZGUwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL3VjbXBkaTIuUworKysgYi9hcmNoL2FybS9saWIvdWNtcGRpMi5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2lmZGVmIF9fQVJNRUJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYwppbmRleCA2NWJlNWVmLi5iYWE5OTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYwpAQCAtOSw3ICs5LDYgQEAKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTQzLDcgKzE0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGFhZWMyMDAwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiQUFFQy0yMDAwIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBhYWVjMjAwMF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9LY29uZmlnCmluZGV4IDcwZDQwMmYuLjJmODVlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9LY29uZmlnCkBAIC0xLDYgKzEsMjEgQEAKLWlmIEFSQ0hfQVQ5MVJNOTIwMAoraWYgQVJDSF9BVDkxCiAKLW1lbnUgIkFUOTFSTTkyMDAgSW1wbGVtZW50YXRpb25zIgorbWVudSAiQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcCIKKworY29tbWVudCAiQXRtZWwgQVQ5MSBQcm9jZXNzb3JzIgorCitjb25maWcgQVJDSF9BVDkxUk05MjAwCisJYm9vbCAiQVQ5MVJNOTIwMCIKKworY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjAKKwlib29sICJBVDkxU0FNOTI2MCIKKworY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjEKKwlib29sICJBVDkxU0FNOTI2MSIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmIEFSQ0hfQVQ5MVJNOTIwMAogCiBjb21tZW50ICJBVDkxUk05MjAwIEJvYXJkIFR5cGUiCiAKQEAgLTgsNTggKzIzLDg3IEBACiAJYm9vbCAiQWplY28gMUFSTSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKIAloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEFqZWNvJ3MgMUFSTSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQWplY28ncyAxQVJNIFNpbmdsZSBCb2FyZCBDb21wdXRlci4KKwkgIDxodHRwOi8vd3d3LmFqZWNvLmZpL3Byb2R1Y3RzLmh0bT4KIAogY29uZmlnIEFSQ0hfQVQ5MVJNOTIwMERLCiAJYm9vbCAiQXRtZWwgQVQ5MVJNOTIwMC1ESyBEZXZlbG9wbWVudCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxUk05MjAwLURLIERldmVsb3BtZW50IGJvYXJkCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVJNOTIwMC1ESyBEZXZlbG9wbWVudCBib2FyZC4KKwkgIChEaXNjb250aW51ZWQpCisKIAogY29uZmlnIE1BQ0hfQVQ5MVJNOTIwMEVLCiAJYm9vbCAiQXRtZWwgQVQ5MVJNOTIwMC1FSyBFdmFsdWF0aW9uIEtpdCIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxUk05MjAwLUVLIEV2YWx1YXRpb24gS2l0CisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVJNOTIwMC1FSyBFdmFsdWF0aW9uIEtpdC4KKwkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD0zNTA3PgogCiBjb25maWcgTUFDSF9DU0IzMzcKLQlib29sICJDb2dlbnQgQ1NCMzM3IGJvYXJkIgorCWJvb2wgIkNvZ2VudCBDU0IzMzciCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKIAloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvZ2VudCdzIENTQjMzNyBib2FyZAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb2dlbnQncyBDU0IzMzcgYm9hcmQuCisJICA8aHR0cDovL3d3dy5jb2djb21wLmNvbS9jc2JfY3NiMzM3Lmh0bT4KIAogY29uZmlnIE1BQ0hfQ1NCNjM3Ci0JYm9vbCAiQ29nZW50IENTQjYzNyBib2FyZCIKKwlib29sICJDb2dlbnQgQ1NCNjM3IgogCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBDb2dlbnQncyBDU0I2MzcgYm9hcmQKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQ29nZW50J3MgQ1NCNjM3IGJvYXJkLgorCSAgPGh0dHA6Ly93d3cuY29nY29tcC5jb20vY3NiX2NzYjYzNy5odG0+CiAKIGNvbmZpZyBNQUNIX0NBUk1FVkEKLQlib29sICJDb25pdGVjJ3MgQVJNJkVWQSIKKwlib29sICJDb25pdGVjIEFSTSZFVkEiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKIAloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvbml0ZWMncyBBVDkxUk05MjAwLU1DVS1Nb2R1bGUKLQotY29uZmlnIE1BQ0hfS0I5MjAwCi0JYm9vbCAiS3dpa0J5dGUncyBLQjkyMHgiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFSTTkyMDAKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEt3aWtCeXRlJ3MgS0I5MjB4IGJvYXJkCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIENvbml0ZWMncyBBVDkxUk05MjAwLU1DVS1Nb2R1bGUuCisJICA8aHR0cDovL3d3dy5jb25pdGVjLm5ldC9lbmdsaXNoL2xpbnV4Ym9hcmQuaHRtPgogCiBjb25maWcgTUFDSF9BVEVCOTIwMAotCWJvb2wgIkVtYmVzdCdzIEFURUI5MjAwIgorCWJvb2wgIkVtYmVzdCBBVEVCOTIwMCIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgRW1iZXN0J3MgQVRFQjkyMDAgYm9hcmQKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgRW1iZXN0J3MgQVRFQjkyMDAgYm9hcmQuCisJICA8aHR0cDovL3d3dy5lbWJlZGluZm8uY29tL2VuZ2xpc2gvcHJvZHVjdC9BVEVCOTIwMC5hc3A+CisKK2NvbmZpZyBNQUNIX0tCOTIwMAorCWJvb2wgIkt3aWtCeXRlIEtCOTIweCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgS3dpa0J5dGUncyBLQjkyMHggYm9hcmQuCisJICA8aHR0cDovL2t3aWtieXRlLmNvbS9LQjkyMDJfZGVzY3JpcHRpb25fbmV3Lmh0bT4KIAogY29uZmlnIE1BQ0hfS0FGQQogCWJvb2wgIlNwZXJyeS1TdW4gS0FGQSBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgU3BlcnJ5LVN1bidzIEtBRkEgYm9hcmQKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgU3BlcnJ5LVN1bidzIEtBRkEgYm9hcmQuCisKK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpZiBBUkNIX0FUOTFTQU05MjYwCisKK2NvbW1lbnQgIkFUOTFTQU05MjYwIEJvYXJkIFR5cGUiCisKK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpZiBBUkNIX0FUOTFTQU05MjYxCisKK2NvbW1lbnQgIkFUOTFTQU05MjYxIEJvYXJkIFR5cGUiCisKK2VuZGlmCiAKIAotY29tbWVudCAiQVQ5MVJNOTIwMCBGZWF0dXJlIFNlbGVjdGlvbnMiCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY29tbWVudCAiQVQ5MSBGZWF0dXJlIFNlbGVjdGlvbnMiCiAKIGNvbmZpZyBBVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MKIAlib29sICJQcm9ncmFtbWFibGUgQ2xvY2tzIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlCmluZGV4IDgyZGI5NTcuLmMxNzQ4MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKQEAgLTIsMTQgKzIsMTkgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKLW9iai15CQk6PSBjbG9jay5vIGlycS5vIHRpbWUubyBncGlvLm8gY29tbW9uLm8gZGV2aWNlcy5vCitvYmoteQkJOj0gY2xvY2subyBpcnEubyBncGlvLm8gZGV2aWNlcy5vCiBvYmotbQkJOj0KIG9iai1uCQk6PQogb2JqLQkJOj0KIAogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogCi0jIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKKyMgQ1BVLXNwZWNpZmljIHN1cHBvcnQKK29iai0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApCSs9IGF0OTFybTkyMDAubyBhdDkxcm05MjAwX3RpbWUubworb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjApCSs9CitvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkJKz0KKworIyBBVDkxUk05MjAwIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX09ORUFSTSkJKz0gYm9hcmQtMWFybS5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxUk05MjAwREspCSs9IGJvYXJkLWRrLm8KIG9iai0kKENPTkZJR19NQUNIX0FUOTFSTTkyMDBFSykJKz0gYm9hcmQtZWsubwpAQCAtMjAsNiArMjUsMTAgQEAKIG9iai0kKENPTkZJR19NQUNIX0FURUI5MjAwKQkrPSBib2FyZC1lYjkyMDAubwogb2JqLSQoQ09ORklHX01BQ0hfS0FGQSkJCSs9IGJvYXJkLWthZmEubwogCisjIEFUOTFTQU05MjYwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKKworIyBBVDkxU0FNOTI2MSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CisKICMgTEVEcyBzdXBwb3J0CiBsZWQtJChDT05GSUdfQVJDSF9BVDkxUk05MjAwREspCSs9IGxlZHMubwogbGVkLSQoQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLKQkrPSBsZWRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2NvbW1vbi5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5jCmluZGV4IGU4MzZmODUuLjdlMWQwNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jb21tb24uYworICogYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQogICoKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX3RpbWUuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvdGltZS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF90aW1lLmMKaW5kZXggZmMyZDdkNS4uYTkyYTg2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF90aW1lLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfdGltZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFUTUVMCkBAIC0xOSwxNiArMTksMTUgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9jcnRyOwpAQCAtODYsNyArODUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBhdDkxcm05MjAwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiYXQ5MV90aWNrIiwKLQkuZmxhZ3MJCT0gU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IGF0OTFybTkyMDBfdGltZXJfaW50ZXJydXB0CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMKaW5kZXggZTk0NjQ1ZC4uNzk0ZDNmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2IzMzcuYwpAQCAtMTgsNyArMTgsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jCmluZGV4IDY3ZDVmNzcuLmM4YjZmMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2I2MzcuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiNjM3LmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1kay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKaW5kZXggNDhkNzM5MC4uNjU4NzMwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKaW5kZXggNzIyMDJlZC4uODY4MTkyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWVrLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCmluZGV4IDFjZjg1ZDIuLjQzNTJhY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYwppbmRleCA4M2MzNDc0Li41NzgzYzI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKQEAgLTEwLDEyICsxMCwxMyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIApAQCAtMzQwLDcgKzM0MSw3IEBACiAJdm9pZCBfX2lvbWVtCSpwaW87CiAJdTMyCQlpc3I7CiAKLQlwaW8gPSBkZXNjLT5iYXNlOworCXBpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAKIAkvKiB0ZW1wb3JhcmlseSBtYXNrIChsZXZlbCBzZW5zaXRpdmUpIHBhcmVudCBJUlEgKi8KIAlkZXNjLT5jaGlwLT5hY2soaXJxKTsKQEAgLTM1MCwxMiArMzUxLDEyIEBACiAJCWlmICghaXNyKQogCQkJYnJlYWs7CiAKLQkJcGluID0gKHVuc2lnbmVkKSBkZXNjLT5kYXRhOworCQlwaW4gPSAodW5zaWduZWQpIGdldF9pcnFfZGF0YShpcnEpOwogCQlncGlvID0gJmlycV9kZXNjW3Bpbl07CiAKIAkJd2hpbGUgKGlzcikgewogCQkJaWYgKGlzciAmIDEpIHsKLQkJCQlpZiAodW5saWtlbHkoZ3Bpby0+ZGlzYWJsZV9kZXB0aCkpIHsKKwkJCQlpZiAodW5saWtlbHkoZ3Bpby0+ZGVwdGgpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFRoZSBjb3JlIEFSTSBpbnRlcnJ1cHQgaGFuZGxlciBsYXppbHkgZGlzYWJsZXMgSVJRcyBzbwogCQkJCQkgKiBhbm90aGVyIElSUSBtdXN0IGJlIGdlbmVyYXRlZCBiZWZvcmUgaXQgYWN0dWFsbHkgZ2V0cwpAQCAtMzY0LDcgKzM2NSw3IEBACiAJCQkJCWdwaW9faXJxX21hc2socGluKTsKIAkJCQl9CiAJCQkJZWxzZQotCQkJCQlncGlvLT5oYW5kbGUocGluLCBncGlvLCByZWdzKTsKKwkJCQkJZGVzY19oYW5kbGVfaXJxKHBpbiwgZ3BpbywgcmVncyk7CiAJCQl9CiAJCQlwaW4rKzsKIAkJCWdwaW8rKzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYwppbmRleCA3MGY0ZDdhLi5kY2Q1NjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9sZWRzLmMKaW5kZXggMjgxNTBlOC4uMWEzMzM3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2xlZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvbGVkcy5jCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2ZvcnR1bmV0LmMgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2ZvcnR1bmV0LmMKaW5kZXggZmYyNmE4NS4uMzc5MmFiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9mb3J0dW5ldC5jCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvZm9ydHVuZXQuYwpAQCAtMTksNyArMTksNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9wNzIwdC5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9wNzIwdC5jCmluZGV4IDliYTQ1ZjQuLmM4ZWNkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvcDcyMHQuYworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L3A3MjB0LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKaW5kZXggMWEyM2YwZC4uYTA3MWVhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CkBAIC01Nyw3ICs1OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNscHM3MTF4X3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiQ0xQUzcxMXggVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IHA3MjB0X3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczc1MDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMKaW5kZXggNWIxMmNhYi4uOTJlYWViZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMTUsNyArMzE2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2xwczc1MDBfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJDTFBTNzUwMCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5oYW5kbGVyCT0gY2xwczc1MDBfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9jb3JlLmMKaW5kZXggNmQ2MjBkOC4uNzBkZDEyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvY29yZS5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZWJzYTExMF90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIkVCU0ExMTAgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IGVic2ExMTBfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKaW5kZXggY2VjNWEyMS4uZjFiNzQwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCkBAIC0yLDggKzIsMzEgQEAKIAogbWVudSAiQ2lycnVzIEVQOTN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zIgogCitjb25maWcgQ1JVTkNICisJYm9vbCAiU3VwcG9ydCBmb3IgTWF2ZXJpY2tDcnVuY2giCisJaGVscAorCSAgRW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBNYXZlcmlja0NydW5jaC4KKwogY29tbWVudCAiRVA5M3h4IFBsYXRmb3JtcyIKIAorY29uZmlnIE1BQ0hfRURCOTMwMgorCWJvb2wgIlN1cHBvcnQgQ2lycnVzIExvZ2ljIEVEQjkzMDIiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIENpcnJ1cworCSAgTG9naWMgRURCOTMwMiBFdmFsdWF0aW9uIEJvYXJkLgorCitjb25maWcgTUFDSF9FREI5MzE1CisJYm9vbCAiU3VwcG9ydCBDaXJydXMgTG9naWMgRURCOTMxNSIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUgQ2lycnVzCisJICBMb2dpYyBFREI5MzE1IEV2YWx1YXRpb24gQm9hcmQuCisKK2NvbmZpZyBNQUNIX0VEQjkzMTVBCisJYm9vbCAiU3VwcG9ydCBDaXJydXMgTG9naWMgRURCOTMxNUEiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIENpcnJ1cworCSAgTG9naWMgRURCOTMxNUEgRXZhbHVhdGlvbiBCb2FyZC4KKwogY29uZmlnIE1BQ0hfR0VTQkM5MzEyCiAJYm9vbCAiU3VwcG9ydCBHbG9tYXRpb24gR0VTQkMtOTMxMi1zeCIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCmluZGV4IDA1YTQ4YTIuLjFmNWE2YjA0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKQEAgLTYsNSArNiw4IEBACiBvYmotbgkJCTo9CiBvYmotCQkJOj0KIAorb2JqLSQoQ09ORklHX01BQ0hfRURCOTMwMikJKz0gZWRiOTMwMi5vCitvYmotJChDT05GSUdfTUFDSF9FREI5MzE1KQkrPSBlZGI5MzE1Lm8KK29iai0kKENPTkZJR19NQUNIX0VEQjkzMTVBKQkrPSBlZGI5MzE1YS5vCiBvYmotJChDT05GSUdfTUFDSF9HRVNCQzkzMTIpCSs9IGdlc2JjOTMxMi5vCiBvYmotJChDT05GSUdfTUFDSF9UUzcyWFgpCSs9IHRzNzJ4eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggMWZlNzNjMC4uYTg3YTc4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtMTMsNyArMTMsNiBAQAogICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTExNyw3ICsxMTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBlcDkzeHhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJlcDkzeHggdGltZXIiLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBlcDkzeHhfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwMi5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYThlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzAyLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDIuYworICogQ2lycnVzIExvZ2ljIEVEQjkzMDIgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIEthc2hwZXJrbyA8Z2VvcmdlQGNoYXMuY29tLnVhPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZWRiOTMwMl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZGI5MzAyX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDYwMDAwMDAwLAorCS5lbmQJCT0gMHg2MGZmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlZGI5MzAyX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZWRiOTMwMl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZlZGI5MzAyX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzMDJfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWRiOTMwMl9mbGFzaCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoRURCOTMwMiwgIkNpcnJ1cyBMb2dpYyBFREI5MzAyIEV2YWx1YXRpb24gQm9hcmQiKQorCS8qIE1haW50YWluZXI6IEdlb3JnZSBLYXNocGVya28gPGdlb3JnZUBjaGFzLmNvbS51YT4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGVkYjkzMDJfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjc0ODJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxNS5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzE1LmMKKyAqIENpcnJ1cyBMb2dpYyBFREI5MzE1IHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZWRiOTMxNV9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZGI5MzE1X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDYwMDAwMDAwLAorCS5lbmQJCT0gMHg2MWZmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlZGI5MzE1X2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZWRiOTMxNV9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZlZGI5MzE1X2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzMTVfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWRiOTMxNV9mbGFzaCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoRURCOTMxNSwgIkNpcnJ1cyBMb2dpYyBFREI5MzE1IEV2YWx1YXRpb24gQm9hcmQiKQorCS8qIE1haW50YWluZXI6IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gZWRiOTMxNV9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxNWEuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTVhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZmRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTVhLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTVhLmMKKyAqIENpcnJ1cyBMb2dpYyBFREI5MzE1QSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVkYjkzMTVhX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkYjkzMTVhX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDYwMDAwMDAwLAorCS5lbmQJCT0gMHg2MGZmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlZGI5MzE1YV9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVkYjkzMTVhX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmVkYjkzMTVhX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzMTVhX2luaXRfbWFjaGluZSh2b2lkKQoreworCWVwOTN4eF9pbml0X2RldmljZXMoKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVkYjkzMTVhX2ZsYXNoKTsKK30KKworTUFDSElORV9TVEFSVChFREI5MzE1QSwgIkNpcnJ1cyBMb2dpYyBFREI5MzE1QSBFdmFsdWF0aW9uIEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGVkYjkzMTVhX2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9nZXNiYzkzMTIuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCmluZGV4IDQ3Y2M2YzguLmU3NjBmZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMzAsNyArMjksNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGdlc2JjOTMxMl9mbGFzaF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gMHg2MDAwMDAwMCwKLQkuZW5kCQk9IDB4NjA4MDAwMDAsCisJLmVuZAkJPSAweDYwN2ZmZmZmLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKaW5kZXggNmU1YTU2Yy4uZGYzMTVmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xMTgsNyArMTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0czcyeHhfZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IFRTNzJYWF9OT1JfUEhZU19CQVNFLAotCS5lbmQJCT0gVFM3MlhYX05PUl9QSFlTX0JBU0UgKyAweDAxMDAwMDAwLAorCS5lbmQJCT0gVFM3MlhYX05PUl9QSFlTX0JBU0UgKyAweDAwZmZmZmZmLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYwppbmRleCBiYmU2ZTRhLi5hZjkwMGY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCkBAIC03LDcgKzcsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKaW5kZXggMTRhNjJkNi4uMmFmNjEwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCkBAIC02LDYgKzYsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC00Myw3ICs0NCw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBmb290YnJpZGdlX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiVGltZXIxIHRpbWVyIHRpY2siLAogCS5oYW5kbGVyCT0gdGltZXIxX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCmluZGV4IDVkYWNlMjUuLjYwN2VkMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYwpAQCAtMzMyLDE1ICszMzIsMTUgQEAKIAkvKgogCSAqIFdlIGRvbid0IGNhcmUgaWYgdGhlc2UgZmFpbC4KIAkgKi8KLQlyZXF1ZXN0X2lycShJUlFfUENJX1NFUlIsIGRjMjEyODVfc2Vycl9pcnEsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShJUlFfUENJX1NFUlIsIGRjMjEyODVfc2Vycl9pcnEsIElSUUZfRElTQUJMRUQsCiAJCSAgICAiUENJIHN5c3RlbSBlcnJvciIsICZzZXJyX3RpbWVyKTsKLQlyZXF1ZXN0X2lycShJUlFfUENJX1BFUlIsIGRjMjEyODVfcGFyaXR5X2lycSwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKElSUV9QQ0lfUEVSUiwgZGMyMTI4NV9wYXJpdHlfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkgICAgIlBDSSBwYXJpdHkgZXJyb3IiLCAmcGVycl90aW1lcik7Ci0JcmVxdWVzdF9pcnEoSVJRX1BDSV9BQk9SVCwgZGMyMTI4NV9hYm9ydF9pcnEsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShJUlFfUENJX0FCT1JULCBkYzIxMjg1X2Fib3J0X2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICJQQ0kgYWJvcnQiLCBOVUxMKTsKLQlyZXF1ZXN0X2lycShJUlFfRElTQ0FSRF9USU1FUiwgZGMyMTI4NV9kaXNjYXJkX2lycSwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKElSUV9ESVNDQVJEX1RJTUVSLCBkYzIxMjg1X2Rpc2NhcmRfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkgICAgIkRpc2NhcmQgdGltZXIiLCBOVUxMKTsKLQlyZXF1ZXN0X2lycShJUlFfUENJX0RQRVJSLCBkYzIxMjg1X2RwYXJpdHlfaXJxLCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoSVJRX1BDSV9EUEVSUiwgZGMyMTI4NV9kcGFyaXR5X2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICJQQ0kgZGF0YSBwYXJpdHkiLCBOVUxMKTsKIAogCWlmIChjZm5fbW9kZSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jCmluZGV4IDdhNTQ1NzguLjFmOWIwOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZG1hLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqICAgMTctTWFyLTE5OTkgUk1LCUFsbG93IGFueSBFQlNBMjg1LWxpa2UgYXJjaGl0ZWN0dXJlIHRvIGhhdmUKICAqCQkJSVNBIERNQSBjb250cm9sbGVycy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LWxlZHMuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LWxlZHMuYwppbmRleCAyYzdjMzYzLi5hNjRlMjIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS1sZWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUtbGVkcy5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBDaGFuZ2Vsb2c6CiAgKiAgIDAyLTA1LTE5OTkJUk1LCVZhcmlvdXMgY2xlYW51cHMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwppbmRleCBjMWQ3NGY3YS4uYzQ4MTBhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwpAQCAtNiw2ICs2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTcyLDcgKzczLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlzYV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIklTQSB0aW1lciB0aWNrIiwKIAkuaGFuZGxlcgk9IGlzYV90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpc2FfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jCmluZGV4IDIyOWJmMDUuLmExZjM4MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMKQEAgLTUsNyArNSw2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IFJ1c3NlbGwgS2luZywgUGhpbCBCbHVuZGVsbAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWxlZHMuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItbGVkcy5jCmluZGV4IDc0NTFmYzAuLjhlOWNhYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItbGVkcy5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBDaGFuZ2Vsb2c6CiAgKiAgIDAyLTA1LTE5OTkJUk1LCVZhcmlvdXMgY2xlYW51cHMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAxLmMgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMS5jCmluZGV4IGFmOWU0YTUuLmE5YTgyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDEuYwpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBoNzIwMV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gImg3MjAxIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBoNzIwMV90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMi5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDIuYwppbmRleCBhNGE3YzAxLi5kYTY3OGQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAyLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBoNzIwMl90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gImg3MjAyIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBoNzIwMl90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2g3MjAxLWV2YWwuYyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDEtZXZhbC5jCmluZGV4IDE5M2Y5NjguLjQwN2NkNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDEtZXZhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDEtZXZhbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaDcyMDItZXZhbC5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9oNzIwMi1ldmFsLmMKaW5kZXggMzYyNjY4OS4uYmYyYWNkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1oNzIweC9oNzIwMi1ldmFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9oNzIwMi1ldmFsLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jCmluZGV4IGVhODA1YmYuLjZlZDc1MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMKQEAgLTgsMTEgKzgsMTEgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpAQCAtNzIsNyArNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpbXhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJpLk1YIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBpbXhfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKaW5kZXggNTc2YTVlOS4uNDIwMjFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KQEAgLTI4MSw3ICsyODIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpbnRlZ3JhdG9yX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiSW50ZWdyYXRvciBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5oYW5kbGVyCT0gaW50ZWdyYXRvcl90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKaW5kZXggMjI5YTYzYS4uZjkwNDM1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYwpAQCAtMjAsNyArMjAsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci90aW1lLmMKaW5kZXggYmMwN2Y1Mi4uZWU0OWNmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvdGltZS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAogCXh0aW1lLnR2X3NlYyA9IF9fcmF3X3JlYWRsKHJ0Y19iYXNlICsgUlRDX0RSKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBhcm1fcnRjX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBhcm1fcnRjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgInJ0Yy1wbDAzMCIsIGRldik7CiAJaWYgKHJldCkKIAkJZ290byBtYXBfb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L0tjb25maWcKaW5kZXggMmJmZThjNy4uNDQyMmYyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9LY29uZmlnCkBAIC0zMCwxMiArMzAsMTUgQEAKIAlzZWxlY3QgQVJDSF9JT1AzMzEKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgSW50ZWwgSVE4MDMzMgotCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMzIgY2hpcHNldAorCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMzIgY2hpcHNldC4KIAogY29uZmlnIEFSQ0hfRVA4MDIxOQotICAgIGJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBFUDgwMjE5IgotICAgIHNlbGVjdCBBUkNIX0lPUDMyMQotICAgIHNlbGVjdCBBUkNIX0lRMzEyNDQKKwlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgRVA4MDIxOSIKKwlzZWxlY3QgQVJDSF9JT1AzMjEKKwlzZWxlY3QgQVJDSF9JUTMxMjQ0CisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIEVQODAyMTkKKwkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSW50ZWwgODAyMTkgY2hpcHNldCAoYSBJT1AzMjEgdmFyaWFudCkuCiAKICMgV2hpY2ggSU9QIHZhcmlhbnQgYXJlIHdlIHJ1bm5pbmc/CiBjb25maWcgQVJDSF9JT1AzMjEKQEAgLTU2LDggKzU5LDggQEAKIAlib29sICJDaGlwIHN0ZXBwaW5nIEQgb2YgdGhlIElPUDgwMzMxIHByb2Nlc3NvciBvciBJT1A4MDMzMyIKIAlkZXBlbmRzIG9uIChBUkNIX0lPUDMzMSkKIAloZWxwCi0JCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBTdGVwRCBvZiB0aGUgSU9QODAzMzEgb3IgSU9QODAzMwotCQkgIGJhc2VkIHBsYXRmb3Jtcy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgU3RlcEQgb2YgdGhlIElPUDgwMzMxIG9yIElPUDgwMzMKKwkgIGJhc2VkIHBsYXRmb3Jtcy4KIAogZW5kbWVudQogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMKaW5kZXggZmRlZWVmNC4uZDdmNTBlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtc2V0dXAuYwppbmRleCAwZWJiY2IyLi5iNmQwOTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtc2V0dXAuYwpAQCAtMTIsNyArMTIsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKaW5kZXggZDY3YWMwZS4uMDRiMWE2ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYwpAQCAtODUsNyArODUsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaW9wMzIxX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiSU9QMzIxIFRpbWVyIFRpY2siLAogCS5oYW5kbGVyCT0gaW9wMzIxX3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGlvcDMyMV90aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1zZXR1cC5jCmluZGV4IDdiN2I2ZWUuLjNjYzk4ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1zZXR1cC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXRpbWUuYwppbmRleCAzYzFmMGViLi4wYzA5ZTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS10aW1lLmMKQEAgLTgyLDcgKzgyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlvcDMzMV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIklPUDMzMSBUaW1lciBUaWNrIiwKIAkuaGFuZGxlcgk9IGlvcDMzMV90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpb3AzMzFfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKaW5kZXggZWJlNDM5MS4uN2Y5MWY2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCkBAIC0xNCwxMiArMTQsMTIgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTIyNCw3ICsyMjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpeHAyMDAwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiSVhQMjAwMCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5oYW5kbGVyCT0gaXhwMjAwMF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCkBAIC00MDksNyArNDA5LDcgQEAKIAlmb3IoaSA9IDMxOyBpID49IDA7IGktLSkgewogCQlpZihzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJZGVzYyA9IGlycV9kZXNjICsgSVJRX0lYUDIwMDBfRFJBTTBfTUlOX0VSUiArIGk7Ci0JCQlkZXNjLT5oYW5kbGUoSVJRX0lYUDIwMDBfRFJBTTBfTUlOX0VSUiArIGksIGRlc2MsIHJlZ3MpOworCQkJZGVzY19oYW5kbGVfaXJxKElSUV9JWFAyMDAwX0RSQU0wX01JTl9FUlIgKyBpLCBkZXNjLCByZWdzKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9lbnAyNjExLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jCmluZGV4IDUyZmFjODkuLmFjMjkyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9lbnAyNjExLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYwpAQCAtMTgsNyArMTgsNiBAQAogICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI0MDAuYwppbmRleCAwOTEwMTI3Li5hNmYxNDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI0MDAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI0MDAuYwpAQCAtMTQsNyArMTQsNiBAQAogICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMKaW5kZXggMDc2ZTNmOC4uOTFkMzZkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCmluZGV4IGQ2MjhkYTUuLjQwZWVmOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMTY4LDcgKzE2Nyw3IEBACiAJfQogCiAJLyogSG9vayBpbnRvIFBDSSBpbnRlcnJ1cHQgKi8KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjAwMF9QQ0lCLCAmaXhkcDJ4MDBfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9JWFAyMDAwX1BDSUIsIGl4ZHAyeDAwX2lycV9oYW5kbGVyKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAxLmMKaW5kZXggNjY5MTUyODIuLjdmNDIzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xMjgsNyArMTI3LDcgQEAKIAl9CiAKIAkvKiBIb29rIGludG8gUENJIGludGVycnVwdHMgKi8KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjAwMF9QQ0lCLCAmaXhkcDJ4MDFfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9JWFAyMDAwX1BDSUIsIGl4ZHAyeDAxX2lycV9oYW5kbGVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2NvcmUuYwppbmRleCAwNTFlM2Q3Li41NjZhMDc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9jb3JlLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0yNzIsNyArMjcxLDcgQEAKIAl9CiAKIAlpbnRfZGVzYyA9IGlycV9kZXNjICsgaXJxbm87Ci0JaW50X2Rlc2MtPmhhbmRsZShpcnFubywgaW50X2Rlc2MsIHJlZ3MpOworCWRlc2NfaGFuZGxlX2lycShpcnFubywgaW50X2Rlc2MsIHJlZ3MpOwogCiAJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiB9CkBAIC0zNjQsNyArMzYzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGl4cDIzeHhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJJWFAyM3h4IFRpbWVyIFRpY2siLAogCS5oYW5kbGVyCT0gaXhwMjN4eF90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIH07CiAKIHZvaWQgX19pbml0IGl4cDIzeHhfaW5pdF90aW1lcih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2VzcHJlc3NvLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYwppbmRleCBkYzVlNDg5Li43YTg1Y2VkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvZXNwcmVzc28uYwpAQCAtMTAsNyArMTAsNiBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTU5LDcgKzU4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlc3ByZXNzb19mbGFzaF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gMHg5MDAwMDAwMCwKLQkuZW5kCQk9IDB4OTIwMDAwMDAsCisJLmVuZAkJPSAweDkxZmZmZmZmLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9peGRwMjM1MS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2l4ZHAyMzUxLmMKaW5kZXggNTM1YjMzNC4uMzdhMzJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2l4ZHAyMzUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2l4ZHAyMzUxLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTc1LDcgKzc0LDcgQEAKIAkJCWludCBjcGxkX2lycSA9CiAJCQkJSVhQMjNYWF9NQUNIX0lSUShJWERQMjM1MV9JTlRBX0lSUV9CQVNFICsgaSk7CiAJCQljcGxkX2Rlc2MgPSBpcnFfZGVzYyArIGNwbGRfaXJxOwotCQkJY3BsZF9kZXNjLT5oYW5kbGUoY3BsZF9pcnEsIGNwbGRfZGVzYywgcmVncyk7CisJCQlkZXNjX2hhbmRsZV9pcnEoY3BsZF9pcnEsIGNwbGRfZGVzYywgcmVncyk7CiAJCX0KIAl9CiAKQEAgLTExMiw3ICsxMTEsNyBAQAogCQkJaW50IGNwbGRfaXJxID0KIAkJCQlJWFAyM1hYX01BQ0hfSVJRKElYRFAyMzUxX0lOVEJfSVJRX0JBU0UgKyBpKTsKIAkJCWNwbGRfZGVzYyA9IGlycV9kZXNjICsgY3BsZF9pcnE7Ci0JCQljcGxkX2Rlc2MtPmhhbmRsZShjcGxkX2lycSwgY3BsZF9kZXNjLCByZWdzKTsKKwkJCWRlc2NfaGFuZGxlX2lycShjcGxkX2lycSwgY3BsZF9kZXNjLCByZWdzKTsKIAkJfQogCX0KIApAQCAtMTU5LDggKzE1OCw4IEBACiAJCX0KIAl9CiAKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjNYWF9JTlRBLCAmaXhkcDIzNTFfaW50YV9oYW5kbGVyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjNYWF9JTlRCLCAmaXhkcDIzNTFfaW50Yl9oYW5kbGVyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjNYWF9JTlRBLCBpeGRwMjM1MV9pbnRhX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9JWFAyM1hYX0lOVEIsIGl4ZHAyMzUxX2ludGJfaGFuZGxlcik7CiB9CiAKIC8qCkBAIC0zMDQsNyArMzAzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeGRwMjM1MV9mbGFzaF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gMHg5MDAwMDAwMCwKLQkuZW5kCQk9IDB4OTQwMDAwMDAsCisJLmVuZAkJPSAweDkzZmZmZmZmLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYwppbmRleCBhYzcyZjk0Li4zYjM0ZmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3JvYWRydW5uZXIuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9yb2FkcnVubmVyLmMKaW5kZXggYjlmNWQxMy4uZDA2ZTIxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3JvYWRydW5uZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcm9hZHJ1bm5lci5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMTQzLDcgKzE0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugcm9hZHJ1bm5lcl9mbGFzaF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gMHg5MDAwMDAwMCwKLQkuZW5kCQk9IDB4OTQwMDAwMDAsCisJLmVuZAkJPSAweDkzZmZmZmZmLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggYmYyNWE3Ni4uN2MyNWRiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yODgsNyArMjg3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXhwNHh4X3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiSVhQNHh4IFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBpeHA0eHhfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jCmluZGV4IGU2YjdmY2QuLjJjZWJiMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtcGNpLmMKaW5kZXggZGE0MTVkNS4uZDUxNTZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jCkBAIC0xNSw5ICsxNSw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwZzQyNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCmluZGV4IDUyNmZiNjEuLmVkNTI3MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCkBAIC0xNiwxMCArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1wY2kuYwppbmRleCAyNmI3YzAwLi5iOGViYWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtcGNpLmMKQEAgLTE1LDkgKzE1LDkgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBvd2VyLmMKaW5kZXggYTM3NDVlZC4uODFmZmNhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1wb3dlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtcG93ZXIuYwpAQCAtMTcsOSArMTcsOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDIsNyArNDIsNyBAQAogCXNldF9pcnFfdHlwZShOQVMxMDBEX1JCX0lSUSwgSVJRVF9MT1cpOwogCiAJaWYgKHJlcXVlc3RfaXJxKE5BUzEwMERfUkJfSVJRLCAmbmFzMTAwZF9yZXNldF9oYW5kbGVyLAotCQlTQV9JTlRFUlJVUFQsICJOQVMxMDBEIHJlc2V0IGJ1dHRvbiIsIE5VTEwpIDwgMCkgeworCQlJUlFGX0RJU0FCTEVELCAiTkFTMTAwRCByZXNldCBidXR0b24iLCBOVUxMKSA8IDApIHsKIAogCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXQgQnV0dG9uIElSUSAlZCBub3QgYXZhaWxhYmxlXG4iLAogCQkJTkFTMTAwRF9SQl9JUlEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwppbmRleCBlY2U4NjA0Li4wZGU2MzlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwpAQCAtMTUsNyArMTUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcG93ZXIuYwppbmRleCA2ZDM4ZTk3Li5lMmEyMjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlzZXRfaXJxX3R5cGUoTlNMVTJfUEJfSVJRLCBJUlFUX0hJR0gpOwogCiAJaWYgKHJlcXVlc3RfaXJxKE5TTFUyX1JCX0lSUSwgJm5zbHUyX3Jlc2V0X2hhbmRsZXIsCi0JCVNBX0lOVEVSUlVQVCwgIk5TTFUyIHJlc2V0IGJ1dHRvbiIsIE5VTEwpIDwgMCkgeworCQlJUlFGX0RJU0FCTEVELCAiTlNMVTIgcmVzZXQgYnV0dG9uIiwgTlVMTCkgPCAwKSB7CiAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlJlc2V0IEJ1dHRvbiBJUlEgJWQgbm90IGF2YWlsYWJsZVxuIiwKIAkJCU5TTFUyX1JCX0lSUSk7CkBAIC02Myw3ICs2Myw3IEBACiAJfQogCiAJaWYgKHJlcXVlc3RfaXJxKE5TTFUyX1BCX0lSUSwgJm5zbHUyX3Bvd2VyX2hhbmRsZXIsCi0JCVNBX0lOVEVSUlVQVCwgIk5TTFUyIHBvd2VyIGJ1dHRvbiIsIE5VTEwpIDwgMCkgeworCQlJUlFGX0RJU0FCTEVELCAiTlNMVTIgcG93ZXIgYnV0dG9uIiwgTlVMTCkgPCAwKSB7CiAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlBvd2VyIEJ1dHRvbiBJUlEgJWQgbm90IGF2YWlsYWJsZVxuIiwKIAkJCU5TTFUyX1BCX0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWw3MjAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtbDcyMDAvY29yZS5jCmluZGV4IGFjNjI2NDMuLmI3YWY1NjQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWw3MjAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2NvcmUuYwpAQCAtNyw2ICs3LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMKaW5kZXggYzBlNjg1NC4uMzVjMzYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYwppbmRleCBlZjlhZjM3Li5hZDU2NTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKQEAgLTgsMTAgKzgsMTAgQEAKICAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CkBAIC01Myw3ICs1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGxoN2E0MHhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJMSEE3NDB4IFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBsaDdhNDB4X3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jCmluZGV4IGVkZmJkZjQuLjZkNzJjODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uZXR4L3RpbWUuYwpAQCAtNTQsNyArNTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBuZXR4X3RpbWVyX2lycSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiTmV0WCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MgICAgICAgICAgPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MgICAgICAgICAgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlciAgICAgICAgPSBuZXR4X3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCBmOGQ3MTZjLi5kMTM1NTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC02Miw2ICs2MiwxMyBAQAogCSAgU3VwcG9ydCBmb3IgVEkgT01BUCA3MzAgUGVyc2V1czIgYm9hcmQuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAogCSAgYSBib2FyZC4KIAorY29uZmlnIE1BQ0hfT01BUF9GU0FNUExFCisJYm9vbCAiVEkgRi1TYW1wbGUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDczMAorICAgIAloZWxwCisJICBTdXBwb3J0IGZvciBUSSBPTUFQIDg1MCBGLVNhbXBsZSBib2FyZC4gU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzdWNoCisJICBhIGJvYXJkLgorCiBjb25maWcgTUFDSF9WT0lDRUJMVUUKIAlib29sICJWb2ljZWJsdWUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1WFgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCmluZGV4IDllYTcxOTUuLjcxNjVmNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpCSs9IGJvYXJkLWlubm92YXRvci5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIpCSs9IGJvYXJkLXBlcnNldXMyLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfRlNBTVBMRSkJCSs9IGJvYXJkLWZzYW1wbGUubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9PU0spCQkrPSBib2FyZC1vc2subwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9IMykJCSs9IGJvYXJkLWgzLm8KIG9iai0kKENPTkZJR19NQUNIX1ZPSUNFQkxVRSkJCSs9IGJvYXJkLXZvaWNlYmx1ZS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwppbmRleCA3M2RmMzJhLi44NDM3ZDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTgwLDggKzgwLDE1IEBACiAJLmVuYWJsZWRfdWFydHMgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgYW1zX2RlbHRhX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucmVnaXN0ZXJfaG9zdAk9IDEsCisJLmhtY19tb2RlCT0gMTYsCisJLnBpbnNbMF0JPSAyLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgYW1zX2RlbHRhX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVUFSVCwJJmFtc19kZWx0YV91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVVNCLAkJJmFtc19kZWx0YV91c2JfY29uZmlnIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbXNfZGVsdGFfbGVkX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1M2EzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCkBAIC0wLDAgKzEsMzE5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKKyAqCisgKiBNb2RpZmllZCBmcm9tIGJvYXJkLXBlcnNldXMyLmMKKyAqCisgKiBPcmlnaW5hbCBPTUFQNzMwIHN1cHBvcnQgYnkgSmVhbiBQaWhldCA8ai1waWhldEB0aS5jb20+CisgKiBVcGRhdGVkIGZvciAyLjYgYnkgS2V2aW4gSGlsbWFuIDxramhAaGlsbWFuLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2tleXBhZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQtZnNhbXBsZS5oPgorCitzdGF0aWMgaW50IGZzYW1wbGVfa2V5bWFwW10gPSB7CisJS0VZKDAsMCxLRVlfVVApLAorCUtFWSgwLDEsS0VZX1JJR0hUKSwKKwlLRVkoMCwyLEtFWV9MRUZUKSwKKwlLRVkoMCwzLEtFWV9ET1dOKSwKKwlLRVkoMCw0LEtFWV9DRU5URVIpLAorCUtFWSgwLDUsS0VZXzBfNSksCisJS0VZKDEsMCxLRVlfU09GVDIpLAorCUtFWSgxLDEsS0VZX1NFTkQpLAorCUtFWSgxLDIsS0VZX0VORCksCisJS0VZKDEsMyxLRVlfVk9MVU1FRE9XTiksCisJS0VZKDEsNCxLRVlfVk9MVU1FVVApLAorCUtFWSgxLDUsS0VZX1JFQ09SRCksCisJS0VZKDIsMCxLRVlfU09GVDEpLAorCUtFWSgyLDEsS0VZXzMpLAorCUtFWSgyLDIsS0VZXzYpLAorCUtFWSgyLDMsS0VZXzkpLAorCUtFWSgyLDQsS0VZX1NIQVJQKSwKKwlLRVkoMiw1LEtFWV8yXzUpLAorCUtFWSgzLDAsS0VZX0JBQ0spLAorCUtFWSgzLDEsS0VZXzIpLAorCUtFWSgzLDIsS0VZXzUpLAorCUtFWSgzLDMsS0VZXzgpLAorCUtFWSgzLDQsS0VZXzApLAorCUtFWSgzLDUsS0VZX0hFQURTRVRIT09LKSwKKwlLRVkoNCwwLEtFWV9IT01FKSwKKwlLRVkoNCwxLEtFWV8xKSwKKwlLRVkoNCwyLEtFWV80KSwKKwlLRVkoNCwzLEtFWV83KSwKKwlLRVkoNCw0LEtFWV9TVEFSKSwKKwlLRVkoNCw1LEtFWV9QT1dFUiksCisJMAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQsCS8qIFBoeXNpY2FsICovCisJCS5lbmQJPSBIMlAyX0RCR19GUEdBX0VUSFJfU1RBUlQgKyAweGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJTlRfNzMwX01QVV9FWFRfTklSUSwKKwkJLmVuZAk9IDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJib290bG9hZGVyIiwKKwkgICAgICAub2Zmc2V0CQk9IDAsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJwYXJhbXMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJLyoga2VybmVsICovCisJeworCSAgICAgIC5uYW1lCQk9ICJrZXJuZWwiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzJNLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMAorCX0sCisJLyogcmVzdCBvZiBmbGFzaCBpcyBhIGZpbGUgc3lzdGVtICovCisJeworCSAgICAgIC5uYW1lCQk9ICJyb290ZnMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gbm9yX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gT01BUF9DUzBfUEhZUywKKwkuZW5kCQk9IE9NQVBfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZub3JfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfcGxhdGZvcm1fZGF0YSBuYW5kX2RhdGEgPSB7CisJLm9wdGlvbnMJPSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gT01BUF9DUzNfUEhZUywKKwkuZW5kCQk9IE9NQVBfQ1MzX1BIWVMgKyBTWl80SyAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBuYW5kIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZuYW5kX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3BfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRfNzMwX01QVUlPX0tFWVBBRCwKKwkJLmVuZAk9IElOVF83MzBfTVBVSU9fS0VZUEFELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEga3BfZGF0YSA9IHsKKwkucm93cwk9IDgsCisJLmNvbHMJPSA4LAorCS5rZXltYXAgPSBmc2FtcGxlX2tleW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtwX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAma3BfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShrcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGtwX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImxjZF9wMiIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZub3JfZGV2aWNlLAorCSZuYW5kX2RldmljZSwKKwkmc21jOTF4X2RldmljZSwKKwkma3BfZGV2aWNlLAorCSZsY2RfZGV2aWNlLAorfTsKKworI2RlZmluZSBQMl9OQU5EX1JCX0dQSU9fUElOCTYyCisKK3N0YXRpYyBpbnQgbmFuZF9kZXZfcmVhZHkoc3RydWN0IG5hbmRfcGxhdGZvcm1fZGF0YSAqZGF0YSkKK3sKKwlyZXR1cm4gb21hcF9nZXRfZ3Bpb19kYXRhaW4oUDJfTkFORF9SQl9HUElPX1BJTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBmc2FtcGxlX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBmc2FtcGxlX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGZzYW1wbGVfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmZnNhbXBsZV91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmZzYW1wbGVfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZnNhbXBsZV9pbml0KHZvaWQpCit7CisJaWYgKCEob21hcF9yZXF1ZXN0X2dwaW8oUDJfTkFORF9SQl9HUElPX1BJTikpKQorCQluYW5kX2RhdGEuZGV2X3JlYWR5ID0gbmFuZF9kZXZfcmVhZHk7CisKKwlvbWFwX2NmZ19yZWcoTDNfMTYxMF9GTEFTSF9DUzJCX09FKTsKKwlvbWFwX2NmZ19yZWcoTThfMTYxMF9GTEFTSF9DUzJCX1dFKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJb21hcF9ib2FyZF9jb25maWcgPSBmc2FtcGxlX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShmc2FtcGxlX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZnNhbXBsZV9pbml0X3NtYzkxeCh2b2lkKQoreworCWZwZ2Ffd3JpdGUoMSwgSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpOworCW1kZWxheSg1MCk7CisJZnBnYV93cml0ZShmcGdhX3JlYWQoSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpICYgfjEsCisJCSAgIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKTsKKwltZGVsYXkoNTApOworfQorCit2b2lkIG9tYXBfZnNhbXBsZV9pbml0X2lycSh2b2lkKQoreworCW9tYXAxX2luaXRfY29tbW9uX2h3KCk7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7CisJZnNhbXBsZV9pbml0X3NtYzkxeCgpOworfQorCisvKiBPbmx5IEZQR0EgbmVlZHMgdG8gYmUgbWFwcGVkIGhlcmUuIEFsbCBvdGhlcnMgYXJlIGRvbmUgd2l0aCBpb3JlbWFwICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXBfZnNhbXBsZV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gSDJQMl9EQkdfRlBHQV9CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oSDJQMl9EQkdfRlBHQV9TVEFSVCksCisJCS5sZW5ndGgJCT0gSDJQMl9EQkdfRlBHQV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBGU0FNUExFX0NQTERfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEZTQU1QTEVfQ1BMRF9TVEFSVCksCisJCS5sZW5ndGgJCT0gRlNBTVBMRV9DUExEX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2ZzYW1wbGVfbWFwX2lvKHZvaWQpCit7CisJb21hcDFfbWFwX2NvbW1vbl9pbygpOworCWlvdGFibGVfaW5pdChvbWFwX2ZzYW1wbGVfaW9fZGVzYywKKwkJICAgICBBUlJBWV9TSVpFKG9tYXBfZnNhbXBsZV9pb19kZXNjKSk7CisKKwkvKiBFYXJseSwgYm9hcmQtZGVwZW5kZW50IGluaXQgKi8KKworCS8qCisJICogSG9sZCBHU00gUmVzZXQgdW50aWwgbmVlZGVkCisJICovCisJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQNzMwX0RTUF9NX0NUTCkgJiB+MSwgT01BUDczMF9EU1BfTV9DVEwpOworCisJLyoKKwkgKiBVQVJUcyAtPiBkb25lIGF1dG9tYWdpY2FsbHkgYnkgODI1MCBkcml2ZXIKKwkgKi8KKworCS8qCisJICogQ1N4IHRpbWluZ3MsIEdQSU8gTXV4IC4uLiBzZXR1cAorCSAqLworCisJLyogRmxhc2g6IENTMCB0aW1pbmdzIHNldHVwICovCisJb21hcF93cml0ZWwoMHgwMDAwZmZmMywgT01BUDczMF9GTEFTSF9DRkdfMCk7CisJb21hcF93cml0ZWwoMHgwMDAwMDA4OCwgT01BUDczMF9GTEFTSF9BQ0ZHXzApOworCisJLyoKKwkgKiBFdGhlcm5ldCBzdXBwb3J0IHRocm91Z2ggdGhlIGRlYnVnIGJvYXJkCisJICogQ1MxIHRpbWluZ3Mgc2V0dXAKKwkgKi8KKwlvbWFwX3dyaXRlbCgweDAwMDBmZmYzLCBPTUFQNzMwX0ZMQVNIX0NGR18xKTsKKwlvbWFwX3dyaXRlbCgweDAwMDAwMDAwLCBPTUFQNzMwX0ZMQVNIX0FDRkdfMSk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBNUFVfRVhUX05JUlEgSU8gaW4gSU9fQ09ORjkgcmVnaXN0ZXIsCisJICogSXQgaXMgdXNlZCBhcyB0aGUgRXRoZXJuZXQgY29udHJvbGxlciBpbnRlcnJ1cHQKKwkgKi8KKwlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE9NQVA3MzBfSU9fQ09ORl85KSAmIDB4MUZGRkZGRkYsIE9NQVA3MzBfSU9fQ09ORl85KTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0ZTQU1QTEUsICJPTUFQNzMwIEYtU2FtcGxlIikKKy8qIE1haW50YWluZXI6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPiAqLworCS5waHlzX2lvCT0gMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmVmMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDEwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9mc2FtcGxlX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2ZzYW1wbGVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfZnNhbXBsZV9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggNGI4ZDBlYy4uN2IyMDYxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtMTQsNyArMTQsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBlOTBjMTM3Li40Y2JjNjJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAtYWxzYS5oPgogCiBzdGF0aWMgaW50IGlubm92YXRvcl9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0YxKSwKQEAgLTExMiw2ICsxMTQsNDIgQEAKIAkucmVzb3VyY2UJPSAmaW5ub3ZhdG9yX2ZsYXNoX3Jlc291cmNlLAogfTsKIAorI2RlZmluZSBERUZBVUxUX0JJVFBFUlNBTVBMRSAxNgorCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyBtY2JzcF9yZWdzID0geworCS5zcGNyMiA9IEZSRUUgfCBGUlNUIHwgR1JTVCB8IFhSU1QgfCBYSU5UTSgzKSwKKwkuc3BjcjEgPSBSSU5UTSgzKSB8IFJSU1QsCisJLnJjcjIgPSBSUEhBU0UgfCBSRlJMRU4yKE9NQVBfTUNCU1BfV09SRF84KSB8CisJICAgIFJXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KSB8IFJEQVRETFkoMCksCisJLnJjcjEgPSBSRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFJXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkueGNyMiA9IFhQSEFTRSB8IFhGUkxFTjIoT01BUF9NQ0JTUF9XT1JEXzgpIHwKKwkgICAgWFdETEVOMihPTUFQX01DQlNQX1dPUkRfMTYpIHwgWERBVERMWSgwKSB8IFhGSUcsCisJLnhjcjEgPSBYRlJMRU4xKE9NQVBfTUNCU1BfV09SRF84KSB8IFhXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KSwKKwkuc3JncjEgPSBGV0lEKERFRkFVTFRfQklUUEVSU0FNUExFIC0gMSksCisJLnNyZ3IyID0gR1NZTkMgfCBDTEtTUCB8IEZTR00gfCBGUEVSKERFRkFVTFRfQklUUEVSU0FNUExFICogMiAtIDEpLAorCS8qLnBjcjAgPSBGU1hNIHwgRlNSTSB8IENMS1hNIHwgQ0xLUk0gfCBDTEtYUCB8IENMS1JQLCovIC8qIG1jYnNwOiBtYXN0ZXIgKi8KKwkucGNyMCA9IENMS1hQIHwgQ0xLUlAsICAvKiBtY2JzcDogc2xhdmUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9hbHNhX2NvZGVjX2NvbmZpZyBhbHNhX2NvbmZpZyA9IHsKKwkubmFtZQkJCT0gIk9NQVAgSW5ub3ZhdG9yIEFJQzIzIiwKKwkubWNic3BfcmVnc19hbHNhCT0gJm1jYnNwX3JlZ3MsCisJLmNvZGVjX2NvbmZpZ3VyZV9kZXYJPSBOVUxMLCAvLyBhaWMyM19jb25maWd1cmUsCisJLmNvZGVjX3NldF9zYW1wbGVyYXRlCT0gTlVMTCwgLy8gYWljMjNfc2V0X3NhbXBsZXJhdGUsCisJLmNvZGVjX2Nsb2NrX3NldHVwCT0gTlVMTCwgLy8gYWljMjNfY2xvY2tfc2V0dXAsCisJLmNvZGVjX2Nsb2NrX29uCQk9IE5VTEwsIC8vIGFpYzIzX2Nsb2NrX29uLAorCS5jb2RlY19jbG9ja19vZmYJPSBOVUxMLCAvLyBhaWMyM19jbG9ja19vZmYsCisJLmdldF9kZWZhdWx0X3NhbXBsZXJhdGUJPSBOVUxMLCAvLyBhaWMyM19nZXRfZGVmYXVsdF9zYW1wbGVyYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW5ub3ZhdG9yX21jYnNwMV9kZXZpY2UgPSB7CisJLm5hbWUJPSAib21hcF9hbHNhX21jYnNwIiwKKyAJLmlkCT0gMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZhbHNhX2NvbmZpZywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbm5vdmF0b3Jfa3BfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBJTlRfS0VZQk9BUkQsCkBAIC0xMzksNiArMTc3LDEwIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKwogLyogT25seSBGUEdBIG5lZWRzIHRvIGJlIG1hcHBlZCBoZXJlLiBBbGwgb3RoZXJzIGFyZSBkb25lIHdpdGggaW9yZW1hcCAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbm5vdmF0b3IxNTEwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTE3NCwxMyArMjE2LDQ0IEBACiAJLmlkCQk9IC0xLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW5ub3ZhdG9yMTUxMF9zcGlfZGV2aWNlID0geworCS5uYW1lCQk9ICJzcGlfaW5uMTUxMCIsCisJLmlkCQk9IC0xLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlubm92YXRvcjE1MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmlubm92YXRvcl9mbGFzaF9kZXZpY2UsCiAJJmlubm92YXRvcjE1MTBfc21jOTF4X2RldmljZSwKKwkmaW5ub3ZhdG9yX21jYnNwMV9kZXZpY2UsCiAJJmlubm92YXRvcl9rcF9kZXZpY2UsCiAJJmlubm92YXRvcjE1MTBfbGNkX2RldmljZSwKKwkmaW5ub3ZhdG9yMTUxMF9zcGlfZGV2aWNlLAogfTsKIAorc3RhdGljIGludCBpbm5vdmF0b3JfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gIShmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9UT1VDSFNDUkVFTikgJiAoMSA8PCA1KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIGlubm92YXRvcjE1MTBfdHNfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDc4NDYsCisJLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCS8qIGludGVybmFsLCBubyBjYXBhY2l0b3IgKi8KKwkueF9wbGF0ZV9vaG1zCQk9IDQxOSwKKwkueV9wbGF0ZV9vaG1zCQk9IDQ4NiwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBpbm5vdmF0b3JfZ2V0X3BlbmRvd25fc3RhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm9bXSA9IHsgeworCS8qIEZQR0EgKGJ1cyAiMTAiKSBDUzAgaGFzIGFuIGFkczc4NDZlICovCisJLm1vZGFsaWFzCQk9ICJhZHM3ODQ2IiwKKwkucGxhdGZvcm1fZGF0YQkJPSAmaW5ub3ZhdG9yMTUxMF90c19pbmZvLAorCS5pcnEJCQk9IE9NQVAxNTEwX0lOVF9GUEdBX1RTLAorCS5tYXhfc3BlZWRfaHoJCT0gMTIwMDAwIC8qIG1heCBzYW1wbGUgcmF0ZSBhdCAzViAqLworCQkJCQkqIDI2IC8qIGNvbW1hbmQgKyBkYXRhICsgb3ZlcmhlYWQgKi8sCisJLmJ1c19udW0JCT0gMTAsCisJLmNoaXBfc2VsZWN0CQk9IDAsCit9IH07CisKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKQEAgLTMxMSw2ICszODQsOCBAQAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlubm92YXRvcjE1MTBfZGV2aWNlcywgQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2RldmljZXMpKTsKKwkJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8sCisJCQkJQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbykpOwogCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCAxMTYwMDkzLi5iNzQyMjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKQEAgLTI5LDExICsyOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDUsMjUgKzQ0LDEwIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tY2JzcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAtYWxzYS5oPgogCi1zdGF0aWMgaW50IG9za19rZXltYXBbXSA9IHsKLQlLRVkoMCwgMCwgS0VZX0YxKSwKLQlLRVkoMCwgMywgS0VZX1VQKSwKLQlLRVkoMSwgMSwgS0VZX0xFRlRDVFJMKSwKLQlLRVkoMSwgMiwgS0VZX0xFRlQpLAotCUtFWSgyLCAwLCBLRVlfU1BBQ0UpLAotCUtFWSgyLCAxLCBLRVlfRVNDKSwKLQlLRVkoMiwgMiwgS0VZX0RPV04pLAotCUtFWSgzLCAyLCBLRVlfRU5URVIpLAotCUtFWSgzLCAzLCBLRVlfUklHSFQpLAotCTAKLX07Ci0KLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9za19wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTE4MSw0OCArMTY1LDE3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9zazU5MTJfbWNic3AxX2RldmljZSA9IHsKIAkubmFtZQk9ICJvbWFwX2Fsc2FfbWNic3AiLAotIAkuaWQJPSAxLAorCS5pZAk9IDEsCiAJLmRldiA9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmYWxzYV9jb25maWcsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3NrNTkxMl9rcF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IElOVF9LRVlCT0FSRCwKLQkJLmVuZAk9IElOVF9LRVlCT0FSRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIG9za19rcF9kYXRhID0gewotCS5yb3dzCT0gOCwKLQkuY29scwk9IDgsCi0JLmtleW1hcCA9IG9za19rZXltYXAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2s1OTEyX2twX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcC1rZXlwYWQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmb3NrX2twX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3NrNTkxMl9rcF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG9zazU5MTJfa3BfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9sY2RfZGV2aWNlID0gewotCS5uYW1lCQk9ICJsY2Rfb3NrIiwKLQkuaWQJCT0gLTEsCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3NrNTkxMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmb3NrNTkxMl9mbGFzaF9kZXZpY2UsCiAJJm9zazU5MTJfc21jOTF4X2RldmljZSwKIAkmb3NrNTkxMl9jZl9kZXZpY2UsCiAJJm9zazU5MTJfbWNic3AxX2RldmljZSwKLQkmb3NrNTkxMl9rcF9kZXZpY2UsCi0JJm9zazU5MTJfbGNkX2RldmljZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvc2tfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTI3NiwxOCArMjI5LDEwMCBAQAogCS5lbmFibGVkX3VhcnRzID0gKDEgPDwgMCksCiB9OwogCisjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG9za19sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG9za19jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwgICAgICAgICAgICZvc2tfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJCSZvc2tfdWFydF9jb25maWcgfSwKKyNpZmRlZglDT05GSUdfT01BUF9PU0tfTUlTVFJBTAogCXsgT01BUF9UQUdfTENELAkJCSZvc2tfbGNkX2NvbmZpZyB9LAorI2VuZGlmCiB9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9rZXlwYWQuaD4KKworc3RhdGljIGNvbnN0IGludCBvc2tfa2V5bWFwW10gPSB7CisJLyogS0VZKGNvbCwgcm93LCBjb2RlKSAqLworCUtFWSgwLCAwLCBLRVlfRjEpLAkJLyogU1c0ICovCisJS0VZKDAsIDMsIEtFWV9VUCksCQkvKiAoc3cyL3VwKSAqLworCUtFWSgxLCAxLCBLRVlfTEVGVENUUkwpLAkvKiBTVzUgKi8KKwlLRVkoMSwgMiwgS0VZX0xFRlQpLAkJLyogKHN3Mi9sZWZ0KSAqLworCUtFWSgyLCAwLCBLRVlfU1BBQ0UpLAkJLyogU1czICovCisJS0VZKDIsIDEsIEtFWV9FU0MpLAkJLyogU1c2ICovCisJS0VZKDIsIDIsIEtFWV9ET1dOKSwJCS8qIChzdzIvZG93bikgKi8KKwlLRVkoMywgMiwgS0VZX0VOVEVSKSwJCS8qIChzdzIvc2VsZWN0KSAqLworCUtFWSgzLCAzLCBLRVlfUklHSFQpLAkJLyogKHN3Mi9yaWdodCkgKi8KKwkwCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBvc2tfa3BfZGF0YSA9IHsKKwkucm93cwk9IDgsCisJLmNvbHMJPSA4LAorCS5rZXltYXAgPSAoaW50ICopIG9za19rZXltYXAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9zazU5MTJfa3BfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJTlRfS0VZQk9BUkQsCisJCS5lbmQJPSBJTlRfS0VZQk9BUkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2s1OTEyX2twX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb3NrX2twX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3NrNTkxMl9rcF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG9zazU5MTJfa3BfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJsY2Rfb3NrIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWlzdHJhbF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmb3NrNTkxMl9rcF9kZXZpY2UsCisJJm9zazU5MTJfbGNkX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgbWlzdHJhbF9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhb21hcF9nZXRfZ3Bpb19kYXRhaW4oNCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIG1pc3RyYWxfdHNfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDc4NDYsCisJLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCS8qIGludGVybmFsLCBubyBjYXBhY2l0b3IgKi8KKwkueF9wbGF0ZV9vaG1zCQk9IDQxOSwKKwkueV9wbGF0ZV9vaG1zCQk9IDQ4NiwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBtaXN0cmFsX2dldF9wZW5kb3duX3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG1pc3RyYWxfYm9hcmRpbmZvW10gPSB7IHsKKwkvKiBNaWNyb1dpcmUgKGJ1cyAyKSBDUzAgaGFzIGFuIGFkczc4NDZlICovCisJLm1vZGFsaWFzCQk9ICJhZHM3ODQ2IiwKKwkucGxhdGZvcm1fZGF0YQkJPSAmbWlzdHJhbF90c19pbmZvLAorCS5pcnEJCQk9IE9NQVBfR1BJT19JUlEoNCksCisJLm1heF9zcGVlZF9oegkJPSAxMjAwMDAgLyogbWF4IHNhbXBsZSByYXRlIGF0IDNWICovCisJCQkJCSogMjYgLyogY29tbWFuZCArIGRhdGEgKyBvdmVyaGVhZCAqLywKKwkuYnVzX251bQkJPSAyLAorCS5jaGlwX3NlbGVjdAkJPSAwLAorfSB9OworCiAjaWZkZWYJQ09ORklHX1BNCiBzdGF0aWMgaXJxcmV0dXJuX3QKIG9za19taXN0cmFsX3dha2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmlnbm9yZWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjk4LDE0ICszMzMsMTggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9za19taXN0cmFsX2luaXQodm9pZCkKIHsKLQkvKiBGSVhNRSBoZXJlJ3Mgd2hlcmUgdG8gZmVlZCBpbiBmcmFtZWJ1ZmZlciwgdG91Y2hwYWQsIGFuZAotCSAqIGtleWJvYXJkIHNldHVwIC4uLiAgbm90IGluIHRoZSBkcml2ZXJzIGZvciB0aG9zZSBkZXZpY2VzIQotCSAqCi0JICogTk9URTogIHdlIGNvdWxkIGFjdHVhbGx5IHRlbGwgaWYgdGhlcmUncyBhIE1pc3RyYWwgYm9hcmQKKwkvKiBOT1RFOiAgd2UgY291bGQgYWN0dWFsbHkgdGVsbCBpZiB0aGVyZSdzIGEgTWlzdHJhbCBib2FyZAogCSAqIGF0dGFjaGVkLCBlLmcuIGJ5IHRyeWluZyB0byByZWFkIHNvbWV0aGluZyBmcm9tIHRoZSBhZHM3ODQ2LgotCSAqIEJ1dCB0aGlzIGlzIHRvbyBlYXJseSBmb3IgdGhhdC4uLgorCSAqIEJ1dCB0aGlzIGFyY2hfaW5pdCgpIGNvZGUgaXMgdG9vIGVhcmx5IGZvciB0aGF0LCBzaW5jZSB3ZQorCSAqIGNhbid0IHRhbGsgdG8gdGhlIGFkcyBvciBldmVuIHRoZSBpMmMgZWVwcm9tLgogCSAqLwogCisJLy8gb21hcF9jZmdfcmVnKFAxOV8xNjEwX0dQSU82KTsJLy8gQlVTWQorCW9tYXBfY2ZnX3JlZyhQMjBfMTYxMF9HUElPNCk7CS8vIFBFTklSUQorCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKDQpLCBJUlFUX0ZBTExJTkcpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG1pc3RyYWxfYm9hcmRpbmZvLAorCQkJQVJSQVlfU0laRShtaXN0cmFsX2JvYXJkaW5mbykpOworCiAJLyogdGhlIHNpZGV3YXlzIGJ1dHRvbiAoU1cxKSBpcyBmb3IgdXNlIGFzIGEgIndha2V1cCIgYnV0dG9uICovCiAJb21hcF9jZmdfcmVnKE4xNV8xNjEwX01QVUlPMik7CiAJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKE9NQVBfTVBVSU8oMikpID09IDApIHsKQEAgLTMxOCw3ICszNTcsNyBAQAogCQkgKi8KIAkJcmV0ID0gcmVxdWVzdF9pcnEoT01BUF9HUElPX0lSUShPTUFQX01QVUlPKDIpKSwKIAkJCQkmb3NrX21pc3RyYWxfd2FrZV9pbnRlcnJ1cHQsCi0JCQkJU0FfU0hJUlEsICJtaXN0cmFsX3dha2V1cCIsCisJCQkJSVJRRl9TSEFSRUQsICJtaXN0cmFsX3dha2V1cCIsCiAJCQkJJm9za19taXN0cmFsX3dha2VfaW50ZXJydXB0KTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlvbWFwX2ZyZWVfZ3BpbyhPTUFQX01QVUlPKDIpKTsKQEAgLTMyOSw2ICszNjgsOCBAQAogI2VuZGlmCiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX0VSUiAiT1NLK01pc3RyYWw6IHdha2V1cCBidXR0b24gaXMgYXdvbFxuIik7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtaXN0cmFsX2RldmljZXMsIEFSUkFZX1NJWkUobWlzdHJhbF9kZXZpY2VzKSk7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgX19pbml0IG9za19taXN0cmFsX2luaXQodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKaW5kZXggNjE5ZGIxOC4uZjE5NThlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwpAQCAtMSwzICsxLDQgQEAKKy8va2VybmVsL2xpbnV4LW9tYXAtZnNhbXBsZS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMjMiAtIGVkaXQgY2hhbmdlIDM4MDggKHRleHQpCiAvKgogICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwogICoKQEAgLTIwLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CkBAIC0yNzAsOCArMjcyLDEyIEBACiAJLyoKIAkgKiBJbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBub3QgbmVlZCB0byByZXByb2dyYW0gRFBMTC4KIAkgKiBSZXByb2dyYW1taW5nIHRoZSBEUExMIGlzIHRyaWNreSwgaXQgbXVzdCBiZSBkb25lIGZyb20gU1JBTS4KKwkgKiAob24gNzMwLCBiaXQgMTMgbXVzdCBhbHdheXMgYmUgMSkKIAkgKi8KLQlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayhwdHItPmRwbGxjdGxfdmFsLCBwdHItPmNrY3RsX3ZhbCB8IDB4MjAwMCk7CisJZWxzZQorCQlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKIAogCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOwogCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CkBAIC03NDgsNyArNzU0LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJTeXN0ZW0gZnJlcXVlbmNpZXMgbm90IHNldC4gQ2hlY2sgeW91ciBjb25maWcuXG4iKTsKIAkJLyogR3Vlc3Mgc2FuZSB2YWx1ZXMgKDYwTUh6KSAqLwogCQlvbWFwX3dyaXRldygweDIyOTAsIERQTExfQ1RMKTsKLQkJb21hcF93cml0ZXcoMHgxMDA1LCBBUk1fQ0tDVEwpOworCQlvbWFwX3dyaXRldyhjcHVfaXNfb21hcDczMCgpID8gMHgzMDA1IDogMHgxMDA1LCBBUk1fQ0tDVEwpOwogCQlja19kcGxsMS5yYXRlID0gNjAwMDAwMDA7CiAJCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CiAJfQpAQCAtNzYxLDEzICs3NjcsMTcgQEAKIAkgICAgICAgY2tfZHBsbDEucmF0ZSAvIDEwMDAwMDAsIChja19kcGxsMS5yYXRlIC8gMTAwMDAwKSAlIDEwLAogCSAgICAgICBhcm1fY2sucmF0ZSAvIDEwMDAwMDAsIChhcm1fY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCk7CiAKLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfRlNBTVBMRSkKIAkvKiBTZWxlY3Qgc2xpY2VyIG91dHB1dCBhcyBPTUFQIGlucHV0IGNsb2NrICovCiAJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQNzMwX1BDQ19VUExEX0NUUkwpICYgfjB4MSwgT01BUDczMF9QQ0NfVVBMRF9DVFJMKTsKICNlbmRpZgogCiAJLyogVHVybiBvZmYgRFNQIGFuZCBBUk1fVElNWE8uIE1ha2Ugc3VyZSBBUk1fSU5USENLIGlzIG5vdCBkaXZpZGVkICovCi0Jb21hcF93cml0ZXcob21hcF9yZWFkdyhBUk1fQ0tDVEwpICYgMHgwZmZmLCBBUk1fQ0tDVEwpOworCS8qIChvbiA3MzAsIGJpdCAxMyBtdXN0IG5vdCBiZSBjbGVhcmVkKSAqLworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDJmZmYsIEFSTV9DS0NUTCk7CisJZWxzZQorCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDBmZmYsIEFSTV9DS0NUTCk7CiAKIAkvKiBQdXQgRFNQL01QVUkgaW50byByZXNldCB1bnRpbCBuZWVkZWQgKi8KIAlvbWFwX3dyaXRldygwLCBBUk1fUlNUQ1QxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggODQ3MzI5Y2EuLmE2MTFjM2I2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZnBnYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKaW5kZXggYWNhMmExMi4uMzRlYjc5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEzNCw3ICsxMzMsNyBAQAogICogbWFza19hY2sgcm91dGluZSBmb3IgYWxsIG9mIHRoZSBGUEdBIGludGVycnVwdHMgaGFzIGJlZW4gY2hhbmdlZCBmcm9tCiAgKiBmcGdhX21hc2tfYWNrX2lycSgpIHRvIGZwZ2FfYWNrX2lycSgpIHNvIHRoYXQgdGhlIHNwZWNpZmljIEZQR0EgaW50ZXJydXB0CiAgKiBiZWluZyBzZXJ2aWNlZCBpcyBsZWZ0IHVubWFza2VkLiAgV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSB0aGUgRlBHQSBjYXNjYWRlCi0gKiBpbnRlcnJ1cHQgaXMgaW5zdGFsbGVkIHdpdGggdGhlIFNBX0lOVEVSUlVQVCBmbGFnLCB3aGljaCBsZWF2ZXMgYWxsCisgKiBpbnRlcnJ1cHQgaXMgaW5zdGFsbGVkIHdpdGggdGhlIElSUUZfRElTQUJMRUQgZmxhZywgd2hpY2ggbGVhdmVzIGFsbAogICogaW50ZXJydXB0cyBtYXNrZWQgYXQgdGhlIENQVSB3aGlsZSBhbiBGUEdBIGludGVycnVwdCBoYW5kbGVyIGV4ZWN1dGVzLgogICoKICAqIExpbWl0ZWQgdGVzdGluZyBpbmRpY2F0ZXMgdGhhdCB0aGlzIHdvcmthcm91bmQgYXBwZWFycyB0byBiZSBlZmZlY3RpdmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwppbmRleCA1YzYzN2MwLi5kYTEzYzNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IGJlM2EyYTQuLmZhYjhiMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTgsNyArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKaW5kZXggYTA0MzFjMC4uOWUwMzk4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCkBAIC0zNiw3ICszNiw2IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwppbmRleCA2NTA2NTA4Li44OTc2ZmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKQEAgLTksNyArOSw2IEBACiAgKiBUaGUgInN1cmZlciIgZXhwYW5zaW9uIGJvYXJkIGFuZCBIMiBzYW1wbGUgYm9hcmQgYWxzbyBoYXZlIHR3by1jb2xvcgogICogZ3JlZW4rcmVkIExFRHMgKGluIHBhcmFsbGVsKSwgdXNlZCBoZXJlIGZvciB0aW1lciBhbmQgaWRsZSBpbmRpY2F0b3JzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1pbm5vdmF0b3IuYwppbmRleCBjOGZmZDFkLi5hMGNkMDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaW5ub3ZhdG9yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWlubm92YXRvci5jCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1pbm5vdmF0b3IuYwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtb3NrLmMKaW5kZXggMmM4YmRhOC4uM2IyOWU1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1vc2suYwpAQCAtMyw3ICszLDYgQEAKICAqCiAgKiBMRUQgZHJpdmVyIGZvciBPU0ssIGFuZCBvcHRpb25hbGx5IE1pc3RyYWwgUVZHQSwgYm9hcmRzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IDEwZmUwYjMuLmZhNzRlZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtMjIsNyArMjIsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCmluZGV4IGRkZjZiMDcuLmNkNzYxODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKQEAgLTEsMyArMSw0IEBACisvL2tlcm5lbC9saW51eC1vbWFwLWZzYW1wbGUvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jIzMgLSBpbnRlZ3JhdGUgY2hhbmdlIDQ1NDUgKHRleHQpCiAvKgogICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCiAgKgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CkBAIC0zMjYsOCArMzI4LDkgQEAKIAkvKiBzdG9wIERTUCAqLwogCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgJiB+KDEgPDwgRFNQX0VOKSwgQVJNX1JTVENUMSk7CiAKLQkvKiBzaHV0IGRvd24gZHNwX2NrICovCi0Jb21hcF93cml0ZXcob21hcF9yZWFkdyhBUk1fQ0tDVEwpICYgfigxIDw8IEVOX0RTUENLKSwgQVJNX0NLQ1RMKTsKKwkJLyogc2h1dCBkb3duIGRzcF9jayAqLworCWlmICghY3B1X2lzX29tYXA3MzAoKSkKKwkJb21hcF93cml0ZXcob21hcF9yZWFkdyhBUk1fQ0tDVEwpICYgfigxIDw8IEVOX0RTUENLKSwgQVJNX0NLQ1RMKTsKIAogCS8qIHRlbXBvcmFyaWx5IGVuYWJsaW5nIGFwaV9jayB0byBhY2Nlc3MgRFNQIHJlZ2lzdGVycyAqLwogCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0lETEVDVDIpIHwgMSA8PCBFTl9BUElDSywgQVJNX0lETEVDVDIpOwpAQCAtNjg3LDcgKzY5MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXBfd2FrZXVwX2lycSA9IHsKIAkubmFtZQkJPSAicGVyaXBoZXJhbCB3YWtldXAiLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLmhhbmRsZXIJPSBvbWFwX3dha2V1cF9pbnRlcnJ1cHQKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IDliNGNkNjkuLjk3NmVkZmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTgsMTAgKzgsMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KQEAgLTI1Myw3ICsyNTMsNyBAQAogCX0KIAlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihncGlvX25yLCAxKTsKIAlyZXQgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGdwaW9fbnIpLCAmb21hcF9zZXJpYWxfd2FrZV9pbnRlcnJ1cHQsCi0JCQkgIFNBX1RSSUdHRVJfUklTSU5HLCAic2VyaWFsIHdha2V1cCIsIE5VTEwpOworCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLCAic2VyaWFsIHdha2V1cCIsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJb21hcF9mcmVlX2dwaW8oZ3Bpb19ucik7CiAJCXByaW50ayhLRVJOX0VSUiAiTm8gaW50ZXJydXB0IGZvciBVQVJUIHdha2UgR1BJTzogJWlcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKaW5kZXggZTU4Mjk1ZS4uYWJlZjMzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2xlZXAuUwpAQCAtMzIsNyArMzIsNiBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKaW5kZXggYTg1ZmU2MC4uNGQ5MWI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKQEAgLTMzLDcgKzMzLDYgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTk0LDcgKzkzLDcgQEAKICAqIHdpbGwgYnJlYWsuIE9uIFAyLCB0aGUgdGltZXIgY291bnQgcmF0ZSBpcyA2LjUgTUh6IGFmdGVyIHByb2dyYW1taW5nIFBUVgogICogd2l0aCAwLiBUaGlzIGRpdmlkZXMgdGhlIDEzTUh6IGlucHV0IGJ5IDIsIGFuZCBpcyB1bmRvY3VtZW50ZWQuCiAgKi8KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfRlNBTVBMRSkKIC8qIFJFVklTSVQ6IFRoaXMgaWZkZWYgY29uc3RydWN0IHNob3VsZCBiZSByZXBsYWNlZCBieSBhIHF1ZXJ5IHRvIGNsb2NrCiAgKiBmcmFtZXdvcmsgdG8gc2VlIGlmIHRpbWVyIGJhc2UgZnJlcXVlbmN5IGlzIDEyLjAsIDEzLjAgb3IgMTkuMiBNSHouCiAgKi8KQEAgLTE3OCw3ICsxNzcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwX21wdV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIm1wdSB0aW1lciIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IG9tYXBfbXB1X3RpbWVyX2ludGVycnVwdCwKIH07CiAKQEAgLTE5Miw3ICsxOTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwX21wdV90aW1lcjFfaXJxID0gewogCS5uYW1lCQk9ICJtcHUgdGltZXIxIG92ZXJmbG93IiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAogCS5oYW5kbGVyCT0gb21hcF9tcHVfdGltZXIxX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCA1MzdkZDJlLi5hYWI5N2NjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogY29uZmlnIEFSQ0hfT01BUDI0MjAKIAlib29sICJPTUFQMjQyMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWAorCXNlbGVjdCBPTUFQX0RNX1RJTUVSCiAKIGNvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IDExMWVhYTYuLjI2NmQ4OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMywxMiArMywxMyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIG1lbW9yeS5vIHByY20ubyBjbG9jay5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubworb2JqLXkgOj0gaXJxLm8gaWQubyBpby5vIHNyYW0tZm4ubyBtZW1vcnkubyBwcmNtLm8gY2xvY2subyBtdXgubyBkZXZpY2VzLm8gXAorCSBzZXJpYWwubyBncG1jLm8KIAogb2JqLSQoQ09ORklHX09NQVBfTVBVX1RJTUVSKQkJKz0gdGltZXItZ3AubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQKLW9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCitvYmotJChDT05GSUdfUE0pICs9IHBtLm8gcG0tZG9tYWluLm8gc2xlZXAubwogCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX09NQVBfR0VORVJJQykJCSs9IGJvYXJkLWdlbmVyaWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwppbmRleCA2YzZiYTE3Li43OTkzYjdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpAQCAtMjM0LDE3ICsyMzQsMTcgQEAKIAogCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKFNXX0VOVEVSX0dQSU8xNiksIElSUVRfUklTSU5HKTsKIAlpZiAocmVxdWVzdF9pcnEoT01BUF9HUElPX0lSUShTV19FTlRFUl9HUElPMTYpLCAmYXBvbGxvbl9zd19pbnRlcnJ1cHQsCi0JCQkJU0FfU0hJUlEsICJlbnRlciBzdyIsCisJCQkJSVJRRl9TSEFSRUQsICJlbnRlciBzdyIsCiAJCQkJJmFwb2xsb25fc3dfaW50ZXJydXB0KSkKIAkJcmV0dXJuOwogCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKFNXX1VQX0dQSU8xNyksIElSUVRfUklTSU5HKTsKIAlpZiAocmVxdWVzdF9pcnEoT01BUF9HUElPX0lSUShTV19VUF9HUElPMTcpLCAmYXBvbGxvbl9zd19pbnRlcnJ1cHQsCi0JCQkJU0FfU0hJUlEsICJ1cCBzdyIsCisJCQkJSVJRRl9TSEFSRUQsICJ1cCBzdyIsCiAJCQkJJmFwb2xsb25fc3dfaW50ZXJydXB0KSkKIAkJcmV0dXJuOwogCXNldF9pcnFfdHlwZShPTUFQX0dQSU9fSVJRKFNXX0RPV05fR1BJTzU4KSwgSVJRVF9SSVNJTkcpOwogCWlmIChyZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKFNXX0RPV05fR1BJTzU4KSwgJmFwb2xsb25fc3dfaW50ZXJydXB0LAotCQkJCVNBX1NISVJRLCAiZG93biBzdyIsCisJCQkJSVJRRl9TSEFSRUQsICJkb3duIHN3IiwKIAkJCQkmYXBvbGxvbl9zd19pbnRlcnJ1cHQpKQogCQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggNzJlYjRiZi4uZDFiNjQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMTUsNyArMTUsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC02NjAsMjYgKzY1OSwzNSBAQAogCiAJCS8qIElzb2xhdGUgY29udHJvbCByZWdpc3RlciAqLwogCQlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7Ci0JCWRpdl9vZmYgPSBjbGstPnNyY19vZmZzZXQ7CisJCWRpdl9vZmYgPSBjbGstPnJhdGVfb2Zmc2V0OwogCiAJCXZhbGlkcmF0ZSA9IG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgJm5ld19kaXYpOwotCQlpZih2YWxpZHJhdGUgIT0gcmF0ZSkKKwkJaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQogCQkJcmV0dXJuKHJldCk7CiAKIAkJZmllbGRfdmFsID0gb21hcDJfZ2V0X2Nsa3NlbCgmZGl2X3NlbCwgJmZpZWxkX21hc2ssIGNsayk7CiAJCWlmIChkaXZfc2VsID09IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCWlmKGNsay0+ZmxhZ3MgJiBDTV9TWVNDTEtPVVRfU0VMMSl7Ci0JCQlzd2l0Y2gobmV3X2Rpdil7Ci0JCQljYXNlIDE2OiBmaWVsZF92YWwgPSA0OyBicmVhazsKLQkJCWNhc2UgODogIGZpZWxkX3ZhbCA9IDM7IGJyZWFrOwotCQkJY2FzZSA0OiAgZmllbGRfdmFsID0gMjsgYnJlYWs7Ci0JCQljYXNlIDI6ICBmaWVsZF92YWwgPSAxOyBicmVhazsKLQkJCWNhc2UgMTogIGZpZWxkX3ZhbCA9IDA7IGJyZWFrOworCQlpZiAoY2xrLT5mbGFncyAmIENNX1NZU0NMS09VVF9TRUwxKSB7CisJCQlzd2l0Y2ggKG5ld19kaXYpIHsKKwkJCWNhc2UgMTY6CisJCQkJZmllbGRfdmFsID0gNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQlmaWVsZF92YWwgPSAzOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWZpZWxkX3ZhbCA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJZmllbGRfdmFsID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlmaWVsZF92YWwgPSAwOworCQkJCWJyZWFrOwogCQkJfQotCQl9Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlmaWVsZF92YWwgPSBuZXdfZGl2OwogCiAJCXJlZyA9ICh2b2lkIF9faW9tZW0gKilkaXZfc2VsOwpAQCAtNzQ0LDcgKzc1Miw3IEBACiAJCQl2YWwgPSAweDI7CiAJCWJyZWFrOwogCWNhc2UgQ01fV0tVUF9TRUwxOgotCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX0NPUkU7CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9XS1VQOwogCQltYXNrID0gMHgzOwogCQlpZiAoc3JjX2NsayA9PSAmZnVuY18zMmtfY2spCiAJCQl2YWwgPSAweDA7CkBAIC03ODQsOSArNzkyLDkgQEAKIAkJCXZhbCA9IDA7CiAJCWlmIChzcmNfY2xrID09ICZzeXNfY2spCiAJCQl2YWwgPSAxOwotCQlpZiAoc3JjX2NsayA9PSAmZnVuY181NG1fY2spCi0JCQl2YWwgPSAyOwogCQlpZiAoc3JjX2NsayA9PSAmZnVuY185Nm1fY2spCisJCQl2YWwgPSAyOworCQlpZiAoc3JjX2NsayA9PSAmZnVuY181NG1fY2spCiAJCQl2YWwgPSAzOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggNmM3OGQ0Ny4uMjc4MWRmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMTA2Miw3ICsxMDYyLDcgQEAKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkvKiBCaXQ0ICovCi0JLmVuYWJsZV9iaXQJPSAwLAorCS5lbmFibGVfYml0CT0gNCwKIAkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCBmYjdmOTFkLi5hYTQzMjI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEwNSw2ICsxMDQsNTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3RpKHZvaWQpIHt9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9PTUFQMjRYWCkKKworI2luY2x1ZGUgPGFzbS9hcmNoL21jc3BpLmg+CisKKyNkZWZpbmUgT01BUDJfTUNTUEkxX0JBU0UJCTB4NDgwOTgwMDAKKyNkZWZpbmUgT01BUDJfTUNTUEkyX0JBU0UJCTB4NDgwOWEwMDAKKworLyogRklYTUU6IHVzZSByZXNvdXJjZXMgaW5zdGVhZCAqLworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTFfY29uZmlnID0geworCS5iYXNlCQk9IGlvX3AydihPTUFQMl9NQ1NQSTFfQkFTRSksCisJLm51bV9jcwkJPSA0LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTEgPSB7CisJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGkxX2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkyX2NvbmZpZyA9IHsKKwkuYmFzZQkJPSBpb19wMnYoT01BUDJfTUNTUEkyX0JBU0UpLAorCS5udW1fY3MJCT0gMiwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkyID0geworCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAyX21jc3BpMl9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21jc3BpKHZvaWQpIHt9CisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBfX2luaXQgb21hcDJfaW5pdF9kZXZpY2VzKHZvaWQpCkBAIC0xMTMsNiArMTU3LDcgQEAKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwogCW9tYXBfaW5pdF9pMmMoKTsKKwlvbWFwX2luaXRfbWNzcGkoKTsKIAlvbWFwX2luaXRfc3RpKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhNDhmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogR1BNQyBzdXBwb3J0IGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yOiBKdWhhIFlyam9sYQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisKKyN1bmRlZiBERUJVRworCisjZGVmaW5lIEdQTUNfQkFTRQkJMHg2ODAwYTAwMAorI2RlZmluZSBHUE1DX1JFVklTSU9OCQkweDAwCisjZGVmaW5lIEdQTUNfU1lTQ09ORklHCQkweDEwCisjZGVmaW5lIEdQTUNfU1lTU1RBVFVTCQkweDE0CisjZGVmaW5lIEdQTUNfSVJRU1RBVFVTCQkweDE4CisjZGVmaW5lIEdQTUNfSVJRRU5BQkxFCQkweDFjCisjZGVmaW5lIEdQTUNfVElNRU9VVF9DT05UUk9MCTB4NDAKKyNkZWZpbmUgR1BNQ19FUlJfQUREUkVTUwkweDQ0CisjZGVmaW5lIEdQTUNfRVJSX1RZUEUJCTB4NDgKKyNkZWZpbmUgR1BNQ19DT05GSUcJCTB4NTAKKyNkZWZpbmUgR1BNQ19TVEFUVVMJCTB4NTQKKyNkZWZpbmUgR1BNQ19QUkVGRVRDSF9DT05GSUcxCTB4MWUwCisjZGVmaW5lIEdQTUNfUFJFRkVUQ0hfQ09ORklHMgkweDFlNAorI2RlZmluZSBHUE1DX1BSRUZFVENIX0NPTlRST0wJMHgxZTgKKyNkZWZpbmUgR1BNQ19QUkVGRVRDSF9TVEFUVVMJMHgxZjAKKyNkZWZpbmUgR1BNQ19FQ0NfQ09ORklHCQkweDFmNAorI2RlZmluZSBHUE1DX0VDQ19DT05UUk9MCTB4MWY4CisjZGVmaW5lIEdQTUNfRUNDX1NJWkVfQ09ORklHCTB4MWZjCisKKyNkZWZpbmUgR1BNQ19DUzAJCTB4NjAKKyNkZWZpbmUgR1BNQ19DU19TSVpFCQkweDMwCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfYmFzZSA9CisJKHZvaWQgX19pb21lbSAqKSBJT19BRERSRVNTKEdQTUNfQkFTRSk7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpncG1jX2NzX2Jhc2UgPQorCSh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhHUE1DX0JBU0UpICsgR1BNQ19DUzA7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpncG1jX2wzX2NsazsKKworc3RhdGljIHZvaWQgZ3BtY193cml0ZV9yZWcoaW50IGlkeCwgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBncG1jX2Jhc2UgKyBpZHgpOworfQorCitzdGF0aWMgdTMyIGdwbWNfcmVhZF9yZWcoaW50IGlkeCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoZ3BtY19iYXNlICsgaWR4KTsKK30KKwordm9pZCBncG1jX2NzX3dyaXRlX3JlZyhpbnQgY3MsIGludCBpZHgsIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpyZWdfYWRkcjsKKworCXJlZ19hZGRyID0gZ3BtY19jc19iYXNlICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKKwlfX3Jhd193cml0ZWwodmFsLCByZWdfYWRkcik7Cit9CisKK3UzMiBncG1jX2NzX3JlYWRfcmVnKGludCBjcywgaW50IGlkeCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoZ3BtY19jc19iYXNlICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeCk7Cit9CisKKy8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBncG1jX2ZjayB0byBjbG9jayBmcmFtZXdvcmsgYW5kIHVzZSBpdCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3BtY19nZXRfZmNsa19wZXJpb2Qodm9pZCkKK3sKKwkvKiBJbiBwaWNvc2Vjb25kcyAqLworCXJldHVybiAxMDAwMDAwMDAwIC8gKChjbGtfZ2V0X3JhdGUoZ3BtY19sM19jbGspKSAvIDEwMDApOworfQorCit1bnNpZ25lZCBpbnQgZ3BtY19uc190b190aWNrcyh1bnNpZ25lZCBpbnQgdGltZV9ucykKK3sKKwl1bnNpZ25lZCBsb25nIHRpY2tfcHM7CisKKwkvKiBDYWxjdWxhdGUgaW4gcGljb3NlY3MgdG8geWllbGQgbW9yZSBleGFjdCByZXN1bHRzICovCisJdGlja19wcyA9IGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKCk7CisKKwlyZXR1cm4gKHRpbWVfbnMgKiAxMDAwICsgdGlja19wcyAtIDEpIC8gdGlja19wczsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IHNldF9ncG1jX3RpbWluZ19yZWcoaW50IGNzLCBpbnQgcmVnLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKKwkJCSAgICAgICBpbnQgdGltZSwgY29uc3QgY2hhciAqbmFtZSkKKyNlbHNlCitzdGF0aWMgaW50IHNldF9ncG1jX3RpbWluZ19yZWcoaW50IGNzLCBpbnQgcmVnLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKKwkJCSAgICAgICBpbnQgdGltZSkKKyNlbmRpZgoreworCXUzMiBsOworCWludCB0aWNrcywgbWFzaywgbnJfYml0czsKKworCWlmICh0aW1lID09IDApCisJCXRpY2tzID0gMDsKKwllbHNlCisJCXRpY2tzID0gZ3BtY19uc190b190aWNrcyh0aW1lKTsKKwlucl9iaXRzID0gZW5kX2JpdCAtIHN0X2JpdCArIDE7CisJaWYgKHRpY2tzID49IDEgPDwgbnJfYml0cykKKwkJcmV0dXJuIC0xOworCisJbWFzayA9ICgxIDw8IG5yX2JpdHMpIC0gMTsKKwlsID0gZ3BtY19jc19yZWFkX3JlZyhjcywgcmVnKTsKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0lORk8gIkdQTUMgQ1MlZDogJS0xMHM6ICVkIHRpY2tzLCAlM2x1IG5zICh3YXMgJWkgdGlja3MpXG4iLAorCSAgICAgICBjcywgbmFtZSwgdGlja3MsIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKCkgKiB0aWNrcyAvIDEwMDAsCisJICAgICAgIChsID4+IHN0X2JpdCkgJiBtYXNrKTsKKyNlbmRpZgorCWwgJj0gfihtYXNrIDw8IHN0X2JpdCk7CisJbCB8PSB0aWNrcyA8PCBzdF9iaXQ7CisJZ3BtY19jc193cml0ZV9yZWcoY3MsIHJlZywgbCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIEdQTUNfU0VUX09ORShyZWcsIHN0LCBlbmQsIGZpZWxkKSBcCisJaWYgKHNldF9ncG1jX3RpbWluZ19yZWcoY3MsIChyZWcpLCAoc3QpLCAoZW5kKSwJCVwKKwkJCXQtPmZpZWxkLCAjZmllbGQpIDwgMCkJCQlcCisJCXJldHVybiAtMQorI2Vsc2UKKyNkZWZpbmUgR1BNQ19TRVRfT05FKHJlZywgc3QsIGVuZCwgZmllbGQpIFwKKwlpZiAoc2V0X2dwbWNfdGltaW5nX3JlZyhjcywgKHJlZyksIChzdCksIChlbmQpLCB0LT5maWVsZCkgPCAwKSBcCisJCXJldHVybiAtMQorI2VuZGlmCisKK2ludCBncG1jX2NzX2NhbGNfZGl2aWRlcihpbnQgY3MsIHVuc2lnbmVkIGludCBzeW5jX2NsaykKK3sKKwlpbnQgZGl2OworCXUzMiBsOworCisJbCA9IHN5bmNfY2xrICogMTAwMCArIChncG1jX2dldF9mY2xrX3BlcmlvZCgpIC0gMSk7CisJZGl2ID0gbCAvIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKCk7CisJaWYgKGRpdiA+IDQpCisJCXJldHVybiAtMTsKKwlpZiAoZGl2IDwgMCkKKwkJZGl2ID0gMTsKKworCXJldHVybiBkaXY7Cit9CisKK2ludCBncG1jX2NzX3NldF90aW1pbmdzKGludCBjcywgY29uc3Qgc3RydWN0IGdwbWNfdGltaW5ncyAqdCkKK3sKKwlpbnQgZGl2OworCXUzMiBsOworCisJZGl2ID0gZ3BtY19jc19jYWxjX2RpdmlkZXIoY3MsIHQtPnN5bmNfY2xrKTsKKwlpZiAoZGl2IDwgMCkKKwkJcmV0dXJuIC0xOworCisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHMiwgIDAsICAzLCBjc19vbik7CisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHMiwgIDgsIDEyLCBjc19yZF9vZmYpOworCUdQTUNfU0VUX09ORShHUE1DX0NTX0NPTkZJRzIsIDE2LCAyMCwgY3Nfd3Jfb2ZmKTsKKworCUdQTUNfU0VUX09ORShHUE1DX0NTX0NPTkZJRzMsICAwLCAgMywgYWR2X29uKTsKKwlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUczLCAgOCwgMTIsIGFkdl9yZF9vZmYpOworCUdQTUNfU0VUX09ORShHUE1DX0NTX0NPTkZJRzMsIDE2LCAyMCwgYWR2X3dyX29mZik7CisKKwlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUc0LCAgMCwgIDMsIG9lX29uKTsKKwlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUc0LCAgOCwgMTIsIG9lX29mZik7CisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNCwgMTYsIDE5LCB3ZV9vbik7CisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNCwgMjQsIDI4LCB3ZV9vZmYpOworCisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNSwgIDAsICA0LCByZF9jeWNsZSk7CisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNSwgIDgsIDEyLCB3cl9jeWNsZSk7CisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNSwgMTYsIDIwLCBhY2Nlc3MpOworCisJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNSwgMjQsIDI3LCBwYWdlX2J1cnN0X2FjY2Vzcyk7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0lORk8gIkdQTUMgQ1MlZCBDTEsgcGVyaW9kIGlzICVsdSAoZGl2ICVkKVxuIiwKKwkgICAgICAgY3MsIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKCksIGRpdik7CisjZW5kaWYKKworCWwgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCWwgJj0gfjB4MDM7CisJbCB8PSAoZGl2IC0gMSk7CisKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgbG9uZyBncG1jX2NzX2dldF9iYXNlX2FkZHIoaW50IGNzKQoreworCXJldHVybiAoZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUc3KSAmIDB4MWYpIDw8IDI0OworfQorCit2b2lkIF9faW5pdCBncG1jX2luaXQodm9pZCkKK3sKKwl1MzIgbDsKKworCWdwbWNfbDNfY2xrID0gY2xrX2dldChOVUxMLCAiY29yZV9sM19jayIpOworCUJVR19PTihJU19FUlIoZ3BtY19sM19jbGspKTsKKworCWwgPSBncG1jX3JlYWRfcmVnKEdQTUNfUkVWSVNJT04pOworCXByaW50ayhLRVJOX0lORk8gIkdQTUMgcmV2aXNpb24gJWQuJWRcbiIsIChsID4+IDQpICYgMHgwZiwgbCAmIDB4MGYpOworCS8qIFNldCBzbWFydCBpZGxlIG1vZGUgYW5kIGF1dG9tYXRpYyBMMyBjbG9jayBnYXRpbmcgKi8KKwlsID0gZ3BtY19yZWFkX3JlZyhHUE1DX1NZU0NPTkZJRyk7CisJbCAmPSAweDAzIDw8IDM7CisJbCB8PSAoMHgwMiA8PCAzKSB8ICgxIDw8IDApOworCWdwbWNfd3JpdGVfcmVnKEdQTUNfU1lTQ09ORklHLCBsKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwppbmRleCA3NjE4NzMwLi44NzFhY2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDdkNTcxMTYuLmEwNzI4YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yNyw2ICsyNiw3IEBACiBleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKTsKK2V4dGVybiB2b2lkIGdwbWNfaW5pdCh2b2lkKTsKIAogLyoKICAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKQEAgLTY3LDQgKzY3LDUgQEAKIHsKIAlvbWFwMl9tdXhfaW5pdCgpOwogCW9tYXAyX2Nsa19pbml0KCk7CisJZ3BtY19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwppbmRleCBkN2JhZmY2Li4zZWVkNmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCmluZGV4IDFkOTI1ZDYuLjg1Y2JjMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYwpAQCAtMTQsNyArMTQsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggMTE5N2RjMy4uNjBlZjA4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC01Myw2ICs1MiwxMiBAQAogLyogMjR4eCBjbG9ja3MgKi8KIE1VWF9DRkdfMjRYWCgiVzE0XzI0WFhfU1lTX0NMS09VVCIsCTB4MTM3LAkwLAkxLAkxLAkxKQogCisvKiAyNHh4IEdQTUMgd2FpdCBwaW4gbW9uaXRvcmluZyAqLworTVVYX0NGR18yNFhYKCJMM19HUE1DX1dBSVQwIiwJCTB4MDlhLAkwLAkxLAkxLAkxKQorTVVYX0NGR18yNFhYKCJON19HUE1DX1dBSVQxIiwJCTB4MDliLAkwLAkxLAkxLAkxKQorTVVYX0NGR18yNFhYKCJNMV9HUE1DX1dBSVQyIiwJCTB4MDljLAkwLAkxLAkxLAkxKQorTVVYX0NGR18yNFhYKCJQMV9HUE1DX1dBSVQzIiwJCTB4MDlkLAkwLAkxLAkxLAkxKQorCiAvKiAyNHh4IE1jQlNQICovCiBNVVhfQ0ZHXzI0WFgoIlkxNV8yNFhYX01DQlNQMl9DTEtYIiwJMHgxMjQsCTEsCTEsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIlIxNF8yNFhYX01DQlNQMl9GU1giLAkweDEyNSwJMSwJMSwJMCwJMSkKQEAgLTYwLDE4ICs2NSwzOCBAQAogTVVYX0NGR18yNFhYKCJWMTVfMjRYWF9NQ0JTUDJfRFgiLAkweDEyNywJMSwJMSwJMCwJMSkKIAogLyogMjR4eCBHUElPICovCi1NVVhfQ0ZHXzI0WFgoIk0yMV8yNDJYX0dQSU8xMSIsCSAweDBjOSwgIDMsICAgICAgMSwgICAgICAxLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIk0yMV8yNDJYX0dQSU8xMSIsCQkweDBjOSwgIDMsICAgICAgMSwgICAgICAxLCAgICAgIDEpCiBNVVhfQ0ZHXzI0WFgoIkFBMTBfMjQyWF9HUElPMTMiLAkweDBlNSwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCi1NVVhfQ0ZHXzI0WFgoIkFBNl8yNDJYX0dQSU8xNCIsCSAweDBlNiwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCi1NVVhfQ0ZHXzI0WFgoIkFBNF8yNDJYX0dQSU8xNSIsCSAweDBlNywgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCi1NVVhfQ0ZHXzI0WFgoIlkxMV8yNDJYX0dQSU8xNiIsCSAweDBlOCwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkFBNl8yNDJYX0dQSU8xNCIsCQkweDBlNiwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkFBNF8yNDJYX0dQSU8xNSIsCQkweDBlNywgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIlkxMV8yNDJYX0dQSU8xNiIsCQkweDBlOCwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCiBNVVhfQ0ZHXzI0WFgoIkFBMTJfMjQyWF9HUElPMTciLAkweDBlOSwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCi1NVVhfQ0ZHXzI0WFgoIkFBOF8yNDJYX0dQSU81OCIsCSAweDBlYSwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkFBOF8yNDJYX0dQSU81OCIsCQkweDBlYSwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCiBNVVhfQ0ZHXzI0WFgoIlkyMF8yNFhYX0dQSU82MCIsCQkweDEyYywJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVzRfXzI0WFhfR1BJTzc0IiwJIDB4MGYyLCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKK01VWF9DRkdfMjRYWCgiVzRfXzI0WFhfR1BJTzc0IiwJCTB4MGYyLCAgMywgICAgICAwLCAgICAgIDAsICAgICAgMSkKIE1VWF9DRkdfMjRYWCgiTTE1XzI0WFhfR1BJTzkyIiwJCTB4MTBhLAkzLAkwLAkwLAkxKQogTVVYX0NGR18yNFhYKCJWMTRfMjRYWF9HUElPMTE3IiwJMHgxMjgsCTMsCTEsCTAsCTEpCiAKKy8qIDI0MnggREJHIEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiVjRfMjQyWF9HUElPNDkiLAkJMHhkMywJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVzJfMjQyWF9HUElPNTAiLAkJMHhkNCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVTRfMjQyWF9HUElPNTEiLAkJMHhkNSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVjNfMjQyWF9HUElPNTIiLAkJMHhkNiwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVjJfMjQyWF9HUElPNTMiLAkJMHhkNywJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVjZfMjQyWF9HUElPNTMiLAkJMHhjZiwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVDRfMjQyWF9HUElPNTQiLAkJMHhkOCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiWTRfMjQyWF9HUElPNTQiLAkJMHhkMCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVDNfMjQyWF9HUElPNTUiLAkJMHhkOSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVTJfMjQyWF9HUElPNTYiLAkJMHhkYSwJMywJMCwJMCwJMSkKKworLyogMjR4eCBleHRlcm5hbCBETUEgcmVxdWVzdHMgKi8KK01VWF9DRkdfMjRYWCgiQUExMF8yNDJYX0RNQVJFUTAiLAkweDBlNSwgIDIsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkFBNl8yNDJYX0RNQVJFUTEiLAkweDBlNiwgIDIsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkU0XzI0MlhfRE1BUkVRMiIsCQkweDA3NCwgIDIsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkc0XzI0MlhfRE1BUkVRMyIsCQkweDA3MywgIDIsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkQzXzI0MlhfRE1BUkVRNCIsCQkweDA3MiwgIDIsICAgICAgMCwgICAgICAwLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIkUzXzI0MlhfRE1BUkVRNSIsCQkweDA3MSwgIDIsICAgICAgMCwgICAgICAwLCAgICAgIDEpCisKIC8qIFRTQyBJUlEgKi8KIE1VWF9DRkdfMjRYWCgiUDIwXzI0WFhfVFNDX0lSUSIsCTB4MTA4LAkwLAkwLAkwLAkxKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTIwZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kb21haW4uYwpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZG9tYWluLmMKKyAqCisgKiBQb3dlciBkb21haW4gZnVuY3Rpb25zIGZvciBPTUFQMgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgorICogVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBTb21lIGNvZGUgYmFzZWQgb24gZWFybGllciBPTUFQMiBzYW1wbGUgUE0gY29kZQorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKKworLyogUG93ZXIgZG9tYWluIG9mZnNldHMgKi8KKyNkZWZpbmUgUE1fTVBVX09GRlNFVAkJCTB4MTAwCisjZGVmaW5lIFBNX0NPUkVfT0ZGU0VUCQkJMHgyMDAKKyNkZWZpbmUgUE1fR0ZYX09GRlNFVAkJCTB4MzAwCisjZGVmaW5lIFBNX1dLVVBfT0ZGU0VUCQkJMHg0MDAJCS8qIEF1dG9pZGxlIG9ubHkgKi8KKyNkZWZpbmUgUE1fUExMX09GRlNFVAkJCTB4NTAwCQkvKiBBdXRvaWRsZSBvbmx5ICovCisjZGVmaW5lIFBNX0RTUF9PRkZTRVQJCQkweDgwMAorI2RlZmluZSBQTV9NRE1fT0ZGU0VUCQkJMHhjMDAKKworLyogUG93ZXIgZG9tYWluIHdha2UtdXAgZGVwZW5kZW5jeSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBNX1dLREVQX09GRlNFVAkJCTB4YzgKKyNkZWZpbmUJCUVOX01ETQkJCSgxIDw8IDUpCisjZGVmaW5lCQlFTl9XS1VQCQkJKDEgPDwgNCkKKyNkZWZpbmUJCUVOX0dGWAkJCSgxIDw8IDMpCisjZGVmaW5lCQlFTl9EU1AJCQkoMSA8PCAyKQorI2RlZmluZQkJRU5fTVBVCQkJKDEgPDwgMSkKKyNkZWZpbmUJCUVOX0NPUkUJCQkoMSA8PCAwKQorCisvKiBDb3JlIHBvd2VyIGRvbWFpbiBzdGF0ZSB0cmFuc2l0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUE1fUFdTVENUUkxfT0ZGU0VUCQkweGUwCisjZGVmaW5lCQlGT1JDRVNUQVRFCQkoMSA8PCAxOCkJLyogT25seSBmb3IgRFNQICYgR0ZYICovCisjZGVmaW5lCQlNRU00UkVUU1RBVEUJCSgxIDw8IDYpCisjZGVmaW5lCQlNRU0zUkVUU1RBVEUJCSgxIDw8IDUpCisjZGVmaW5lCQlNRU0yUkVUU1RBVEUJCSgxIDw8IDQpCisjZGVmaW5lCQlNRU0xUkVUU1RBVEUJCSgxIDw8IDMpCisjZGVmaW5lCQlMT0dJQ1JFVFNUQVRFCQkoMSA8PCAyKQkvKiBMb2dpYyBpcyByZXRhaW5lZCAqLworI2RlZmluZQkJUE9XRVJTVEFURV9PRkYJCTB4MworI2RlZmluZQkJUE9XRVJTVEFURV9SRVRFTlRJT04JMHgxCisjZGVmaW5lCQlQT1dFUlNUQVRFX09OCQkweDAKKworLyogUG93ZXIgZG9tYWluIHN0YXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIFBNX1BXU1RTVF9PRkZTRVQJCTB4ZTQKKworLyogSGFyZHdhcmUgc3VwZXJ2aXNlZCBzdGF0ZSB0cmFuc2l0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX09GRlNFVAkJMHg0OAorI2RlZmluZQkJQVVUT1NUQVRfTVBVCQkoMSA8PCAwKQkvKiBNUFUgKi8KKyNkZWZpbmUJCUFVVE9TVEFUX0RTUwkJKDEgPDwgMikJLyogQ29yZSAqLworI2RlZmluZQkJQVVUT1NUQVRfTDQJCSgxIDw8IDEpCS8qIENvcmUgKi8KKyNkZWZpbmUJCUFVVE9TVEFUX0wzCQkoMSA8PCAwKQkvKiBDb3JlICovCisjZGVmaW5lCQlBVVRPU1RBVF9HRlgJCSgxIDw8IDApCS8qIEdGWCAqLworI2RlZmluZQkJQVVUT1NUQVRfSVZBCQkoMSA8PCA4KQkvKiAyNDIwIElWQSBpbiBEU1AgZG9tYWluICovCisjZGVmaW5lCQlBVVRPU1RBVF9EU1AJCSgxIDw8IDApCS8qIERTUCAqLworI2RlZmluZQkJQVVUT1NUQVRfTURNCQkoMSA8PCAwKQkvKiBNRE0gKi8KKworLyogQXV0b21hdGljIGNvbnRyb2wgb2YgaW50ZXJmYWNlIGNsb2NrIGlkbGluZyAqLworI2RlZmluZSBDTV9BVVRPSURMRTFfT0ZGU0VUCQkweDMwCisjZGVmaW5lIENNX0FVVE9JRExFMl9PRkZTRVQJCTB4MzQJCS8qIENvcmUgb25seSAqLworI2RlZmluZSBDTV9BVVRPSURMRTNfT0ZGU0VUCQkweDM4CQkvKiBDb3JlIG9ubHkgKi8KKyNkZWZpbmUgQ01fQVVUT0lETEU0X09GRlNFVAkJMHgzYwkJLyogQ29yZSBvbmx5ICovCisjZGVmaW5lCQlBVVRPXzU0TSh4KQkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lCQlBVVRPXzk2TSh4KQkJKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lCQlBVVRPX0RQTEwoeCkJCSgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZQkJQVVUT19TVE9QUEVECQkweDMKKyNkZWZpbmUJCUFVVE9fQllQQVNTX0ZBU1QJMHgyCQkvKiBEUExMIG9ubHkgKi8KKyNkZWZpbmUJCUFVVE9fQllQQVNTX0xPV19QT1dFUgkweDEJCS8qIERQTEwgb25seSAqLworI2RlZmluZQkJQVVUT19ESVNBQkxFRAkJMHgwCisKKy8qIFZvbHRhZ2UgY29udHJvbCBQUkNNX1ZPTFRDVFJMIGJpdHMgKi8KKyNkZWZpbmUJCUFVVE9fRVhUVk9MVAkJKDEgPDwgMTUpCisjZGVmaW5lCQlGT1JDRV9FWFRWT0xUCQkoMSA8PCAxNCkKKyNkZWZpbmUJCVNFVE9GRl9MRVZFTCh4KQkJKCgoeCkgJiAweDMpIDw8IDEyKQorI2RlZmluZQkJTUVNUkVUQ1RSTAkJKDEgPDwgOCkKKyNkZWZpbmUJCVNFVFJFVF9MRVZFTCh4KQkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lCQlWT0xUX0xFVkVMKHgpCQkoKCh4KSAmIDB4MykgPDwgMCkKKworI2RlZmluZSBPTUFQMjRYWF9QUkNNX1ZCQVNFCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFKQorI2RlZmluZSBwcmNtX3JlYWRsKHIpCQlfX3Jhd19yZWFkbChPTUFQMjRYWF9QUkNNX1ZCQVNFICsgKHIpKQorI2RlZmluZSBwcmNtX3dyaXRlbCh2LCByKQlfX3Jhd193cml0ZWwoKHYpLCBPTUFQMjRYWF9QUkNNX1ZCQVNFICsgKHIpKQorCitzdGF0aWMgdTMyIHBtZG9tYWluX2dldF93YWtldXBfZGVwZW5kZW5jaWVzKGludCBkb21haW5fb2Zmc2V0KQoreworCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBQTV9XS0RFUF9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBwbWRvbWFpbl9zZXRfd2FrZXVwX2RlcGVuZGVuY2llcyh1MzIgc3RhdGUsIGludCBkb21haW5fb2Zmc2V0KQoreworCXByY21fd3JpdGVsKHN0YXRlLCBkb21haW5fb2Zmc2V0ICsgUE1fV0tERVBfT0ZGU0VUKTsKK30KKworc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfcG93ZXJzdGF0ZShpbnQgZG9tYWluX29mZnNldCkKK3sKKwlyZXR1cm4gcHJjbV9yZWFkbChkb21haW5fb2Zmc2V0ICsgUE1fUFdTVENUUkxfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUodTMyIHN0YXRlLCBpbnQgZG9tYWluX29mZnNldCkKK3sKKwlwcmNtX3dyaXRlbChzdGF0ZSwgZG9tYWluX29mZnNldCArIFBNX1BXU1RDVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyB1MzIgcG1kb21haW5fZ2V0X2Nsb2NrX2F1dG9jb250cm9sKGludCBkb21haW5fb2Zmc2V0KQoreworCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9DTEtTVENUUkxfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9jb250cm9sKHUzMiBzdGF0ZSwgaW50IGRvbWFpbl9vZmZzZXQpCit7CisJcHJjbV93cml0ZWwoc3RhdGUsIGRvbWFpbl9vZmZzZXQgKyBDTV9DTEtTVENUUkxfT0ZGU0VUKTsKK30KKworc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGUxKGludCBkb21haW5fb2Zmc2V0KQoreworCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTFfT0ZGU0VUKTsKK30KKworLyogQ29yZSBkb21haW4gb25seSAqLworc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGUyKGludCBkb21haW5fb2Zmc2V0KQoreworCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTJfT0ZGU0VUKTsKK30KKworLyogQ29yZSBkb21haW4gb25seSAqLworc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGUzKGludCBkb21haW5fb2Zmc2V0KQoreworCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTNfT0ZGU0VUKTsKK30KKworLyogQ29yZSBkb21haW4gb25seSAqLworc3RhdGljIHUzMiBwbWRvbWFpbl9nZXRfY2xvY2tfYXV0b2lkbGU0KGludCBkb21haW5fb2Zmc2V0KQoreworCXJldHVybiBwcmNtX3JlYWRsKGRvbWFpbl9vZmZzZXQgKyBDTV9BVVRPSURMRTRfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSh1MzIgc3RhdGUsIGludCBkb21haW5fb2Zmc2V0KQoreworCXByY21fd3JpdGVsKHN0YXRlLCBDTV9BVVRPSURMRTFfT0ZGU0VUICsgZG9tYWluX29mZnNldCk7Cit9CisKKy8qIENvcmUgZG9tYWluIG9ubHkgKi8KK3N0YXRpYyB2b2lkIHBtZG9tYWluX3NldF9jbG9ja19hdXRvaWRsZTIodTMyIHN0YXRlLCBpbnQgZG9tYWluX29mZnNldCkKK3sKKwlwcmNtX3dyaXRlbChzdGF0ZSwgQ01fQVVUT0lETEUyX09GRlNFVCArIGRvbWFpbl9vZmZzZXQpOworfQorCisvKiBDb3JlIGRvbWFpbiBvbmx5ICovCitzdGF0aWMgdm9pZCBwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2lkbGUzKHUzMiBzdGF0ZSwgaW50IGRvbWFpbl9vZmZzZXQpCit7CisJcHJjbV93cml0ZWwoc3RhdGUsIENNX0FVVE9JRExFM19PRkZTRVQgKyBkb21haW5fb2Zmc2V0KTsKK30KKworLyogQ29yZSBkb21haW4gb25seSAqLworc3RhdGljIHZvaWQgcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlNCh1MzIgc3RhdGUsIGludCBkb21haW5fb2Zmc2V0KQoreworCXByY21fd3JpdGVsKHN0YXRlLCBDTV9BVVRPSURMRTRfT0ZGU0VUICsgZG9tYWluX29mZnNldCk7Cit9CisKKy8qCisgKiBDb25maWd1cmVzIHBvd2VyIG1hbmFnZW1lbnQgZG9tYWlucyB0byBpZGxlIGNsb2NrcyBhdXRvbWF0aWNhbGx5LgorICovCit2b2lkIHBtZG9tYWluX3NldF9hdXRvaWRsZSh2b2lkKQoreworCXUzMiB2YWw7CisKKwkvKiBTZXQgUExMIGF1dG8gc3RvcCBmb3IgNTRNLCA5Nk0gJiBEUExMICovCisJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMShBVVRPXzU0TShBVVRPX1NUT1BQRUQpIHwKKwkJCQkgICAgIEFVVE9fOTZNKEFVVE9fU1RPUFBFRCkgfAorCQkJCSAgICAgQVVUT19EUExMKEFVVE9fU1RPUFBFRCksIFBNX1BMTF9PRkZTRVQpOworCisJLyogRXh0ZXJuYWwgY2xvY2sgaW5wdXQgY29udHJvbAorCSAqIFJFVklTSVQ6IFNob3VsZCB0aGlzIGJlIGluIGNsb2NrIGZyYW1ld29yaz8KKwkgKi8KKwlQUkNNX0NMS1NSQ19DVFJMIHw9ICgweDMgPDwgMyk7CisKKwkvKiBDb25maWd1cmUgbnVtYmVyIG9mIDMyS0h6IGNsb2NrIGN5Y2xlcyBmb3Igc3lzX2NsayAqLworCVBSQ01fQ0xLU1NFVFVQID0gMHgwMGZmOworCisJLyogQ29uZmlndXJlIGF1dG9tYXRpYyB2b2x0YWdlIHRyYW5zaXRpb24gKi8KKwlQUkNNX1ZPTFRTRVRVUCA9IDA7CisJdmFsID0gUFJDTV9WT0xUQ1RSTDsKKwl2YWwgJj0gfihTRVRPRkZfTEVWRUwoMHgzKSB8IFZPTFRfTEVWRUwoMHgzKSk7CisJdmFsIHw9IFNFVE9GRl9MRVZFTCgxKSB8IFZPTFRfTEVWRUwoMSkgfCBBVVRPX0VYVFZPTFQ7CisJUFJDTV9WT0xUQ1RSTCA9IHZhbDsKKworCS8qIERpc2FibGUgZW11bGF0aW9uIHRvb2xzIGZ1bmN0aW9uYWwgY2xvY2sgKi8KKwlQUkNNX0NMS0VNVUxfQ1RSTCA9IDB4MDsKKworCS8qIFNldCBjb3JlIG1lbW9yeSByZXRlbnRpb24gc3RhdGUgKi8KKwl2YWwgPSBwbWRvbWFpbl9nZXRfcG93ZXJzdGF0ZShQTV9DT1JFX09GRlNFVCk7CisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCXZhbCAmPSB+KDB4NyA8PCAzKTsKKwkJdmFsIHw9IChNRU0zUkVUU1RBVEUgfCBNRU0yUkVUU1RBVEUgfCBNRU0xUkVUU1RBVEUpOworCX0gZWxzZSB7CisJCXZhbCAmPSB+KDB4ZiA8PCAzKTsKKwkJdmFsIHw9IChNRU00UkVUU1RBVEUgfCBNRU0zUkVUU1RBVEUgfCBNRU0yUkVUU1RBVEUgfAorCQkJTUVNMVJFVFNUQVRFKTsKKwl9CisJcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUodmFsLCBQTV9DT1JFX09GRlNFVCk7CisKKwkvKiBPQ1AgaW50ZXJmYWNlIHNtYXJ0IGlkbGUuIFJFVklTSVQ6IEVuYWJsZSBhdXRvaWRsZSBiaXQwID8gKi8KKwl2YWwgPSBTTVNfU1lTQ09ORklHOworCXZhbCAmPSB+KDB4MyA8PCAzKTsKKwl2YWwgfD0gKDB4MiA8PCAzKSB8ICgxIDw8IDApOworCVNNU19TWVNDT05GSUcgfD0gdmFsOworCisJdmFsID0gU0RSQ19TWVNDT05GSUc7CisJdmFsICY9IH4oMHgzIDw8IDMpOworCXZhbCB8PSAoMHgyIDw8IDMpOworCVNEUkNfU1lTQ09ORklHID0gdmFsOworCisJLyogQ29uZmlndXJlIEwzIGludGVyZmFjZSBmb3Igc21hcnQgaWRsZS4KKwkgKiBSRVZJU0lUOiBFbmFibGUgYXV0b2lkbGUgYml0MCA/CisJICovCisJdmFsID0gR1BNQ19TWVNDT05GSUc7CisJdmFsICY9IH4oMHgzIDw8IDMpOworCXZhbCB8PSAoMHgyIDw8IDMpIHwgKDEgPDwgMCk7CisJR1BNQ19TWVNDT05GSUcgPSB2YWw7CisKKwlwbWRvbWFpbl9zZXRfcG93ZXJzdGF0ZShMT0dJQ1JFVFNUQVRFIHwgUE9XRVJTVEFURV9SRVRFTlRJT04sCisJCQkJUE1fTVBVX09GRlNFVCk7CisJcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUoUE9XRVJTVEFURV9SRVRFTlRJT04sIFBNX0NPUkVfT0ZGU0VUKTsKKwlpZiAoIWNwdV9pc19vbWFwMjQyMCgpKQorCQlwbWRvbWFpbl9zZXRfcG93ZXJzdGF0ZShQT1dFUlNUQVRFX1JFVEVOVElPTiwgUE1fTURNX09GRlNFVCk7CisKKwkvKiBBc3N1bWUgc3VzcGVuZCBmdW5jdGlvbiBoYXMgc2F2ZWQgdGhlIHN0YXRlIGZvciBEU1AgYW5kIEdGWCAqLworCXBtZG9tYWluX3NldF9wb3dlcnN0YXRlKEZPUkNFU1RBVEUgfCBQT1dFUlNUQVRFX09GRiwgUE1fRFNQX09GRlNFVCk7CisJcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUoRk9SQ0VTVEFURSB8IFBPV0VSU1RBVEVfT0ZGLCBQTV9HRlhfT0ZGU0VUKTsKKworI2lmIDAKKwkvKiBSRVZJU0lUOiBJbnRlcm5hbCBVU0IgbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAqLworCWZvcmNlX3N0YW5kYnlfdXNiKCk7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQlmb3JjZV9oc21tYygpOworCXNkcmFtX3NlbGZfcmVmcmVzaF9vbl9pZGxlX3JlcSgxKTsKKyNlbmRpZgorCisJLyogRW5hYmxlIGNsb2NrIGF1dG8gY29udHJvbCBmb3IgYWxsIGRvbWFpbnMuCisJICogTm90ZSB0aGF0IENPUkUgZG9tYWluIGluY2x1ZGVzIGFsc28gRFNTLCBMNCAmIEwzLgorCSAqLworCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9NUFUsIFBNX01QVV9PRkZTRVQpOworCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9HRlgsIFBNX0dGWF9PRkZTRVQpOworCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9EU1MgfCBBVVRPU1RBVF9MNCB8IEFVVE9TVEFUX0wzLAorCQkJCSAgICAgICBQTV9DT1JFX09GRlNFVCk7CisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2NvbnRyb2woQVVUT1NUQVRfSVZBIHwgQVVUT1NUQVRfRFNQLAorCQkJCQkgICAgICAgUE1fRFNQX09GRlNFVCk7CisJZWxzZSB7CisJCXBtZG9tYWluX3NldF9jbG9ja19hdXRvY29udHJvbChBVVRPU1RBVF9EU1AsIFBNX0RTUF9PRkZTRVQpOworCQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2NvbnRyb2woQVVUT1NUQVRfTURNLCBQTV9NRE1fT0ZGU0VUKTsKKwl9CisKKwkvKiBFbmFibGUgY2xvY2sgYXV0b2lkbGUgZm9yIGFsbCBkb21haW5zICovCisJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweDIsIFBNX0RTUF9PRkZTRVQpOworCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2lkbGUxKDB4ZmZmZmZmZjksIFBNX0NPUkVfT0ZGU0VUKTsKKwkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMigweDcsIFBNX0NPUkVfT0ZGU0VUKTsKKwkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweDNmLCBQTV9XS1VQX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweGVhZmZmZmYxLCBQTV9DT1JFX09GRlNFVCk7CisJCXBtZG9tYWluX3NldF9jbG9ja19hdXRvaWRsZTIoMHhmZmYsIFBNX0NPUkVfT0ZGU0VUKTsKKwkJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMSgweDdmLCBQTV9XS1VQX09GRlNFVCk7CisJCXBtZG9tYWluX3NldF9jbG9ja19hdXRvaWRsZTEoMHgzLCBQTV9NRE1fT0ZGU0VUKTsKKwl9CisJcG1kb21haW5fc2V0X2Nsb2NrX2F1dG9pZGxlMygweDcsIFBNX0NPUkVfT0ZGU0VUKTsKKwlwbWRvbWFpbl9zZXRfY2xvY2tfYXV0b2lkbGU0KDB4MWYsIFBNX0NPUkVfT0ZGU0VUKTsKK30KKworLyoKKyAqIEluaXRpYWxpemVzIHBvd2VyIGRvbWFpbnMgYnkgcmVtb3Zpbmcgd2FrZS11cCBkZXBlbmRlbmNpZXMgYW5kIHBvd2VyaW5nCisgKiBkb3duIERTUCBhbmQgR0ZYLiBHZXRzIGNhbGxlZCBmcm9tIFBNIGluaXQuIE5vdGUgdGhhdCBEU1AgYW5kIElWQSBjb2RlCisgKiBtdXN0IHJlLWVuYWJsZSBEU1AgYW5kIEdGWCB3aGVuIHVzZWQuCisgKi8KK3ZvaWQgX19pbml0IHBtZG9tYWluX2luaXQodm9pZCkKK3sKKwkvKiBSZW1vdmUgYWxsIGRvbWFpbiB3YWtldXAgZGVwZW5kZW5jaWVzICovCisJcG1kb21haW5fc2V0X3dha2V1cF9kZXBlbmRlbmNpZXMoRU5fV0tVUCB8IEVOX0NPUkUsIFBNX01QVV9PRkZTRVQpOworCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKDAsIFBNX0RTUF9PRkZTRVQpOworCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKDAsIFBNX0dGWF9PRkZTRVQpOworCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKEVOX1dLVVAgfCBFTl9NUFUsIFBNX0NPUkVfT0ZGU0VUKTsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCXBtZG9tYWluX3NldF93YWtldXBfZGVwZW5kZW5jaWVzKDAsIFBNX01ETV9PRkZTRVQpOworCisJLyogUG93ZXIgZG93biBEU1AgYW5kIEdGWCAqLworCXBtZG9tYWluX3NldF9wb3dlcnN0YXRlKFBPV0VSU1RBVEVfT0ZGIHwgRk9SQ0VTVEFURSwgUE1fRFNQX09GRlNFVCk7CisJcG1kb21haW5fc2V0X3Bvd2Vyc3RhdGUoUE9XRVJTVEFURV9PRkYgfCBGT1JDRVNUQVRFLCBQTV9HRlhfT0ZGU0VUKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwppbmRleCA1NjIxNjhmLi5kN2VlZTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzYsMTEgKzM3LDE4IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CiAKKyNpbmNsdWRlICJwcmNtLXJlZ3MuaCIKKwogc3RhdGljIHN0cnVjdCBjbGsgKnZjbGs7CiBzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1faWRsZSkodm9pZCk7CiBzdGF0aWMgdm9pZCAoKm9tYXAyX3NyYW1fc3VzcGVuZCkoaW50IGRsbGN0cmwsIGludCBjcHVfcmV2KTsKIHN0YXRpYyB2b2lkICgqc2F2ZWRfaWRsZSkodm9pZCk7CiAKK2V4dGVybiB2b2lkIF9faW5pdCBwbWRvbWFpbl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcG1kb21haW5fc2V0X2F1dG9pZGxlKHZvaWQpOworCitzdGF0aWMgdW5zaWduZWQgaW50IG9tYXAyNHh4X3NsZWVwX3NhdmVbT01BUDI0WFhfU0xFRVBfU0FWRV9TSVpFXTsKKwogdm9pZCBvbWFwMl9wbV9pZGxlKHZvaWQpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTg3LDIzICs5NSwyNzIgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKyNkZWZpbmUgSU5UMF9XQUtFX01BU0sJKE9NQVBfSVJRX0JJVChJTlRfMjRYWF9HUElPX0JBTksxKSB8CVwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMjRYWF9HUElPX0JBTksyKSB8CVwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMjRYWF9HUElPX0JBTkszKSkKKworI2RlZmluZSBJTlQxX1dBS0VfTUFTSwkoT01BUF9JUlFfQklUKElOVF8yNFhYX0dQSU9fQkFOSzQpKQorCisjZGVmaW5lIElOVDJfV0FLRV9NQVNLCShPTUFQX0lSUV9CSVQoSU5UXzI0WFhfVUFSVDFfSVJRKSB8CVwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMjRYWF9VQVJUMl9JUlEpIHwJXAorCQkJT01BUF9JUlFfQklUKElOVF8yNFhYX1VBUlQzX0lSUSkpCisKKyNkZWZpbmUgcHJlZyhyZWcpCXByaW50aygiJXNcdCgweCVwKTpcdDB4JTA4eFxuIiwgI3JlZywgJnJlZywgcmVnKTsKKworc3RhdGljIHZvaWQgb21hcDJfcG1fZGVidWcoY2hhciAqIGRlc2MpCit7CisJcHJpbnRrKCIlczpcbiIsIGRlc2MpOworCisJcHJlZyhDTV9DTEtTVENUUkxfTVBVKTsKKwlwcmVnKENNX0NMS1NUQ1RSTF9DT1JFKTsKKwlwcmVnKENNX0NMS1NUQ1RSTF9HRlgpOworCXByZWcoQ01fQ0xLU1RDVFJMX0RTUCk7CisJcHJlZyhDTV9DTEtTVENUUkxfTURNKTsKKworCXByZWcoUE1fUFdTVENUUkxfTVBVKTsKKwlwcmVnKFBNX1BXU1RDVFJMX0NPUkUpOworCXByZWcoUE1fUFdTVENUUkxfR0ZYKTsKKwlwcmVnKFBNX1BXU1RDVFJMX0RTUCk7CisJcHJlZyhQTV9QV1NUQ1RSTF9NRE0pOworCisJcHJlZyhQTV9QV1NUU1RfTVBVKTsKKwlwcmVnKFBNX1BXU1RTVF9DT1JFKTsKKwlwcmVnKFBNX1BXU1RTVF9HRlgpOworCXByZWcoUE1fUFdTVFNUX0RTUCk7CisJcHJlZyhQTV9QV1NUU1RfTURNKTsKKworCXByZWcoQ01fQVVUT0lETEUxX0NPUkUpOworCXByZWcoQ01fQVVUT0lETEUyX0NPUkUpOworCXByZWcoQ01fQVVUT0lETEUzX0NPUkUpOworCXByZWcoQ01fQVVUT0lETEU0X0NPUkUpOworCXByZWcoQ01fQVVUT0lETEVfV0tVUCk7CisJcHJlZyhDTV9BVVRPSURMRV9QTEwpOworCXByZWcoQ01fQVVUT0lETEVfRFNQKTsKKwlwcmVnKENNX0FVVE9JRExFX01ETSk7CisKKwlwcmVnKENNX0lDTEtFTjFfQ09SRSk7CisJcHJlZyhDTV9JQ0xLRU4yX0NPUkUpOworCXByZWcoQ01fSUNMS0VOM19DT1JFKTsKKwlwcmVnKENNX0lDTEtFTjRfQ09SRSk7CisJcHJlZyhDTV9JQ0xLRU5fR0ZYKTsKKwlwcmVnKENNX0lDTEtFTl9XS1VQKTsKKwlwcmVnKENNX0lDTEtFTl9EU1ApOworCXByZWcoQ01fSUNMS0VOX01ETSk7CisKKwlwcmVnKENNX0lETEVTVDFfQ09SRSk7CisJcHJlZyhDTV9JRExFU1QyX0NPUkUpOworCXByZWcoQ01fSURMRVNUM19DT1JFKTsKKwlwcmVnKENNX0lETEVTVDRfQ09SRSk7CisJcHJlZyhDTV9JRExFU1RfR0ZYKTsKKwlwcmVnKENNX0lETEVTVF9XS1VQKTsKKwlwcmVnKENNX0lETEVTVF9DS0dFTik7CisJcHJlZyhDTV9JRExFU1RfRFNQKTsKKwlwcmVnKENNX0lETEVTVF9NRE0pOworCisJcHJlZyhSTV9SU1RTVF9NUFUpOworCXByZWcoUk1fUlNUU1RfR0ZYKTsKKwlwcmVnKFJNX1JTVFNUX1dLVVApOworCXByZWcoUk1fUlNUU1RfRFNQKTsKKwlwcmVnKFJNX1JTVFNUX01ETSk7CisKKwlwcmVnKFBNX1dLREVQX01QVSk7CisJcHJlZyhQTV9XS0RFUF9DT1JFKTsKKwlwcmVnKFBNX1dLREVQX0dGWCk7CisJcHJlZyhQTV9XS0RFUF9EU1ApOworCXByZWcoUE1fV0tERVBfTURNKTsKKworCXByZWcoQ01fRkNMS0VOX1dLVVApOworCXByZWcoQ01fSUNMS0VOX1dLVVApOworCXByZWcoQ01fSURMRVNUX1dLVVApOworCXByZWcoQ01fQVVUT0lETEVfV0tVUCk7CisJcHJlZyhDTV9DTEtTRUxfV0tVUCk7CisKKwlwcmVnKFBNX1dLRU5fV0tVUCk7CisJcHJlZyhQTV9XS1NUX1dLVVApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfcG1fc2F2ZV9yZWdpc3RlcnModm9pZCkKK3sKKwkvKiBTYXZlIGludGVycnVwdCByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9TQVZFKElOVENfTUlSMCk7CisJT01BUDI0WFhfU0FWRShJTlRDX01JUjEpOworCU9NQVAyNFhYX1NBVkUoSU5UQ19NSVIyKTsKKworCS8qIFNhdmUgcG93ZXIgY29udHJvbCByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9TQVZFKENNX0NMS1NUQ1RSTF9NUFUpOworCU9NQVAyNFhYX1NBVkUoQ01fQ0xLU1RDVFJMX0NPUkUpOworCU9NQVAyNFhYX1NBVkUoQ01fQ0xLU1RDVFJMX0dGWCk7CisJT01BUDI0WFhfU0FWRShDTV9DTEtTVENUUkxfRFNQKTsKKwlPTUFQMjRYWF9TQVZFKENNX0NMS1NUQ1RSTF9NRE0pOworCisJLyogU2F2ZSBwb3dlciBzdGF0ZSByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9TQVZFKFBNX1BXU1RDVFJMX01QVSk7CisJT01BUDI0WFhfU0FWRShQTV9QV1NUQ1RSTF9DT1JFKTsKKwlPTUFQMjRYWF9TQVZFKFBNX1BXU1RDVFJMX0dGWCk7CisJT01BUDI0WFhfU0FWRShQTV9QV1NUQ1RSTF9EU1ApOworCU9NQVAyNFhYX1NBVkUoUE1fUFdTVENUUkxfTURNKTsKKworCS8qIFNhdmUgYXV0b2lkbGUgcmVnaXN0ZXJzICovCisJT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRTFfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRTJfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRTNfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRTRfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRV9XS1VQKTsKKwlPTUFQMjRYWF9TQVZFKENNX0FVVE9JRExFX1BMTCk7CisJT01BUDI0WFhfU0FWRShDTV9BVVRPSURMRV9EU1ApOworCU9NQVAyNFhYX1NBVkUoQ01fQVVUT0lETEVfTURNKTsKKworCS8qIFNhdmUgaWRsZSBzdGF0ZSByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9TQVZFKENNX0lETEVTVDFfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9JRExFU1QyX0NPUkUpOworCU9NQVAyNFhYX1NBVkUoQ01fSURMRVNUM19DT1JFKTsKKwlPTUFQMjRYWF9TQVZFKENNX0lETEVTVDRfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9JRExFU1RfR0ZYKTsKKwlPTUFQMjRYWF9TQVZFKENNX0lETEVTVF9XS1VQKTsKKwlPTUFQMjRYWF9TQVZFKENNX0lETEVTVF9DS0dFTik7CisJT01BUDI0WFhfU0FWRShDTV9JRExFU1RfRFNQKTsKKwlPTUFQMjRYWF9TQVZFKENNX0lETEVTVF9NRE0pOworCisJLyogU2F2ZSBjbG9jayByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9TQVZFKENNX0ZDTEtFTjFfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9GQ0xLRU4yX0NPUkUpOworCU9NQVAyNFhYX1NBVkUoQ01fSUNMS0VOMV9DT1JFKTsKKwlPTUFQMjRYWF9TQVZFKENNX0lDTEtFTjJfQ09SRSk7CisJT01BUDI0WFhfU0FWRShDTV9JQ0xLRU4zX0NPUkUpOworCU9NQVAyNFhYX1NBVkUoQ01fSUNMS0VONF9DT1JFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX3BtX3Jlc3RvcmVfcmVnaXN0ZXJzKHZvaWQpCit7CisJLyogUmVzdG9yZSBjbG9jayBzdGF0ZSByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9SRVNUT1JFKENNX0NMS1NUQ1RSTF9NUFUpOworCU9NQVAyNFhYX1JFU1RPUkUoQ01fQ0xLU1RDVFJMX0NPUkUpOworCU9NQVAyNFhYX1JFU1RPUkUoQ01fQ0xLU1RDVFJMX0dGWCk7CisJT01BUDI0WFhfUkVTVE9SRShDTV9DTEtTVENUUkxfRFNQKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0NMS1NUQ1RSTF9NRE0pOworCisJLyogUmVzdG9yZSBwb3dlciBzdGF0ZSByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9SRVNUT1JFKFBNX1BXU1RDVFJMX01QVSk7CisJT01BUDI0WFhfUkVTVE9SRShQTV9QV1NUQ1RSTF9DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKFBNX1BXU1RDVFJMX0dGWCk7CisJT01BUDI0WFhfUkVTVE9SRShQTV9QV1NUQ1RSTF9EU1ApOworCU9NQVAyNFhYX1JFU1RPUkUoUE1fUFdTVENUUkxfTURNKTsKKworCS8qIFJlc3RvcmUgaWRsZSBzdGF0ZSByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVDFfQ09SRSk7CisJT01BUDI0WFhfUkVTVE9SRShDTV9JRExFU1QyX0NPUkUpOworCU9NQVAyNFhYX1JFU1RPUkUoQ01fSURMRVNUM19DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVDRfQ09SRSk7CisJT01BUDI0WFhfUkVTVE9SRShDTV9JRExFU1RfR0ZYKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVF9XS1VQKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVF9DS0dFTik7CisJT01BUDI0WFhfUkVTVE9SRShDTV9JRExFU1RfRFNQKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0lETEVTVF9NRE0pOworCisJLyogUmVzdG9yZSBhdXRvaWRsZSByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFMV9DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFMl9DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFM19DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFNF9DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFX1dLVVApOworCU9NQVAyNFhYX1JFU1RPUkUoQ01fQVVUT0lETEVfUExMKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0FVVE9JRExFX0RTUCk7CisJT01BUDI0WFhfUkVTVE9SRShDTV9BVVRPSURMRV9NRE0pOworCisJLyogUmVzdG9yZSBjbG9jayByZWdpc3RlcnMgKi8KKwlPTUFQMjRYWF9SRVNUT1JFKENNX0ZDTEtFTjFfQ09SRSk7CisJT01BUDI0WFhfUkVTVE9SRShDTV9GQ0xLRU4yX0NPUkUpOworCU9NQVAyNFhYX1JFU1RPUkUoQ01fSUNMS0VOMV9DT1JFKTsKKwlPTUFQMjRYWF9SRVNUT1JFKENNX0lDTEtFTjJfQ09SRSk7CisJT01BUDI0WFhfUkVTVE9SRShDTV9JQ0xLRU4zX0NPUkUpOworCU9NQVAyNFhYX1JFU1RPUkUoQ01fSUNMS0VONF9DT1JFKTsKKworCS8qIFJFVklTSVQ6IENsZWFyIGludGVycnVwdHMgaGVyZSAqLworCisJLyogUmVzdG9yZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisJT01BUDI0WFhfUkVTVE9SRShJTlRDX01JUjApOworCU9NQVAyNFhYX1JFU1RPUkUoSU5UQ19NSVIxKTsKKwlPTUFQMjRYWF9SRVNUT1JFKElOVENfTUlSMik7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcG1fc3VzcGVuZCh2b2lkKQoreworCWludCBwcm9jZXNzb3JfdHlwZSA9IDA7CisKKwkvKiBSRVZJU0lUOiAweDIxIG9yIDB4MjY/ICovCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQlwcm9jZXNzb3JfdHlwZSA9IDB4MjE7CisKKwlpZiAoIXByb2Nlc3Nvcl90eXBlKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCisJb21hcDJfcG1fc2F2ZV9yZWdpc3RlcnMoKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBleGNlcHQgZm9yIHRoZSB3YWtlIGV2ZW50cyAqLworCUlOVENfTUlSX1NFVDAgPSAweGZmZmZmZmZmICYgfklOVDBfV0FLRV9NQVNLOworCUlOVENfTUlSX1NFVDEgPSAweGZmZmZmZmZmICYgfklOVDFfV0FLRV9NQVNLOworCUlOVENfTUlSX1NFVDIgPSAweGZmZmZmZmZmICYgfklOVDJfV0FLRV9NQVNLOworCisJcG1kb21haW5fc2V0X2F1dG9pZGxlKCk7CisKKwkvKiBDbGVhciBvbGQgd2FrZS11cCBldmVudHMgKi8KKwlQTV9XS1NUMV9DT1JFID0gMDsKKwlQTV9XS1NUMl9DT1JFID0gMDsKKwlQTV9XS1NUX1dLVVAgPSAwOworCisJLyogRW5hYmxlIHdha2UtdXAgZXZlbnRzICovCisJUE1fV0tFTjFfQ09SRSA9ICgxIDw8IDIyKSB8ICgxIDw8IDIxKTsJLyogVUFSVDEgJiAyICovCisJUE1fV0tFTjJfQ09SRSA9ICgxIDw8IDIpOwkJLyogVUFSVDMgKi8KKwlQTV9XS0VOX1dLVVAgPSAoMSA8PCAyKSB8ICgxIDw8IDApOwkvKiBHUElPICYgR1BUMSAqLworCisJLyogRGlzYWJsZSBjbG9ja3MgZXhjZXB0IGZvciBDTV9JQ0xLRU4yX0NPUkUuIEl0IGdldHMgZGlzYWJsZWQKKwkgKiBpbiB0aGUgU1JBTSBzdXNwZW5kIGNvZGUgKi8KKwlDTV9GQ0xLRU4xX0NPUkUgPSAwOworCUNNX0ZDTEtFTjJfQ09SRSA9IDA7CisJQ01fSUNMS0VOMV9DT1JFID0gMDsKKwlDTV9JQ0xLRU4zX0NPUkUgPSAwOworCUNNX0lDTEtFTjRfQ09SRSA9IDA7CisKKwlvbWFwMl9wbV9kZWJ1ZygiU3RhdHVzIGJlZm9yZSBzdXNwZW5kIik7CisKKwkvKiBNdXN0IHdhaXQgZm9yIHNlcmlhbCBidWZmZXJzIHRvIGNsZWFyICovCisJbWRlbGF5KDIwMCk7CisKKwkvKiBKdW1wIHRvIFNSQU0gc3VzcGVuZCBjb2RlCisJICogUkVWSVNJVDogV2hlbiBpcyB0aGlzIFNEUkNfRExMQl9DVFJMPworCSAqLworCW9tYXAyX3NyYW1fc3VzcGVuZChTRFJDX0RMTEFfQ1RSTCwgcHJvY2Vzc29yX3R5cGUpOworCisJLyogQmFjayBmcm9tIHNsZWVwICovCisJb21hcDJfcG1fcmVzdG9yZV9yZWdpc3RlcnMoKTsKKworCWxvY2FsX2ZpcV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvbWFwMl9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CisJaW50IHJldCA9IDA7CisKIAlzd2l0Y2ggKHN0YXRlKQogCXsKIAljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQkvKiBGSVhNRTogQWRkIHN1c3BlbmQgKi8KKwkJcmV0ID0gb21hcDJfcG1fc3VzcGVuZCgpOwogCQlicmVhazsKLQogCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCisJCXJldCA9IC1FTk9UU1VQUDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBvbWFwMl9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQpAQCAtMTQzLDYgKzQwMCw4IEBACiAJcG1fc2V0X29wcygmb21hcF9wbV9vcHMpOwogCXBtX2lkbGUgPSBvbWFwMl9wbV9pZGxlOwogCisJcG1kb21haW5faW5pdCgpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKaW5kZXggODg5MzQ3OS4uYzJiZjU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwppbmRleCAwMDI5OWNiLi4xNjI0N2Q1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCkBAIC0yMSw3ICsyMSw2IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCmluZGV4IGQyNjFlNGYuLmE1ZWY3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCAxZDJmNWFjLi5mZTVmZDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgogICogICAgICAgICBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICogT01BUCBEdWFsLW1vZGUgdGltZXIgZnJhbWV3b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcwogICoKICAqIFNvbWUgcGFydHMgYmFzZWQgb2ZmIG9mIFRJJ3MgMjR4eCBjb2RlOgogICoKQEAgLTIyLDU0ICsyMywxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG10aW1lci5oPgogCi0jZGVmaW5lIE9NQVAyX0dQX1RJTUVSMV9CQVNFCTB4NDgwMjgwMDAKLSNkZWZpbmUgT01BUDJfR1BfVElNRVIyX0JBU0UJMHg0ODAyYTAwMAotI2RlZmluZSBPTUFQMl9HUF9USU1FUjNfQkFTRQkweDQ4MDc4MDAwCi0jZGVmaW5lIE9NQVAyX0dQX1RJTUVSNF9CQVNFCTB4NDgwN2EwMDAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0aW1lcjsKIAotI2RlZmluZSBHUF9USU1FUl9USURSCQkweDAwCi0jZGVmaW5lIEdQX1RJTUVSX1RJU1IJCTB4MTgKLSNkZWZpbmUgR1BfVElNRVJfVElFUgkJMHgxYwotI2RlZmluZSBHUF9USU1FUl9UQ0xSCQkweDI0Ci0jZGVmaW5lIEdQX1RJTUVSX1RDUlIJCTB4MjgKLSNkZWZpbmUgR1BfVElNRVJfVExEUgkJMHgyYwotI2RlZmluZSBHUF9USU1FUl9UU0lDUgkJMHg0MAotCi0jZGVmaW5lIE9TX1RJTUVSX05SCQkxICAvKiBHUCB0aW1lciAyICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2VbXSA9IHsKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSMV9CQVNFKSwKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSMl9CQVNFKSwKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSM19CQVNFKSwKLQlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSNF9CQVNFKSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRpbWVyX3JlYWRfcmVnKGludCBuciwgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9ncF90aW1lcl9zdGFydCh1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQogewotCXJldHVybiBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlW25yXSArIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl93cml0ZV9yZWcoaW50IG5yLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQotewotCV9fcmF3X3dyaXRlbCh2YWwsIHRpbWVyX2Jhc2VbbnJdICsgcmVnKTsKLX0KLQotLyogTm90ZSB0aGF0IHdlIGFsd2F5cyBlbmFibGUgdGhlIGNsb2NrIHByZXNjYWxlIGRpdmlkZXIgYml0ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfZ3BfdGltZXJfc3RhcnQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQl0bXAgPSAweGZmZmZmZmZmIC0gbG9hZF92YWw7Ci0KLQl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RMRFIsIHRtcCk7Ci0JdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9UQ1JSLCB0bXApOwotCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVElFUiwgMSA8PCAxKTsKLQl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RDTFIsICgxIDw8IDUpIHwgKDEgPDwgMSkgfCAxKTsKKwlvbWFwX2RtX3RpbWVyX3NldF9sb2FkKGdwdGltZXIsIDEsIDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbCk7CisJb21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZShncHRpbWVyLCBPTUFQX1RJTUVSX0lOVF9PVkVSRkxPVyk7CisJb21hcF9kbV90aW1lcl9zdGFydChncHRpbWVyKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG9tYXAyX2dwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCkBAIC03Nyw3ICs0Miw3IEBACiB7CiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKLQl0aW1lcl93cml0ZV9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RJU1IsIDEgPDwgMSk7CisJb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoZ3B0aW1lciwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cpOwogCXRpbWVyX3RpY2socmVncyk7CiAKIAl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwpAQCAtODcsNDEgKzUyLDI2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyX2dwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiZ3AgdGltZXIiLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5oYW5kbGVyCT0gb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX3RpbWVyX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICogc3lzX2NrOwotCXUzMiB0aWNrX3BlcmlvZCA9IDEyMDAwMDsKLQl1MzIgbDsKKwl1MzIgdGlja19wZXJpb2Q7CiAKLQkvKiBSZXNldCBjbG9jayBhbmQgcHJlc2NhbGUgdmFsdWUgKi8KLQl0aW1lcl93cml0ZV9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RDTFIsIDApOworCW9tYXBfZG1fdGltZXJfaW5pdCgpOworCWdwdGltZXIgPSBvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoMSk7CisJQlVHX09OKGdwdGltZXIgPT0gTlVMTCk7CiAKLQlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLQlpZiAoSVNfRVJSKHN5c19jaykpCi0JCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBzeXNfY2tcbiIpOwotCWVsc2UgewotCQljbGtfZW5hYmxlKHN5c19jayk7Ci0JCXRpY2tfcGVyaW9kID0gY2xrX2dldF9yYXRlKHN5c19jaykgLyAxMDA7Ci0JCWNsa19wdXQoc3lzX2NrKTsKLQl9Ci0KLQl0aWNrX3BlcmlvZCAvPSAyOwkvKiBNaW5pbXVtIHByZXNjYWxlIGRpdmlkZXIgaXMgMiAqLworCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShncHRpbWVyLCBPTUFQX1RJTUVSX1NSQ19TWVNfQ0xLKTsKKwl0aWNrX3BlcmlvZCA9IGNsa19nZXRfcmF0ZShvbWFwX2RtX3RpbWVyX2dldF9mY2xrKGdwdGltZXIpKSAvIDEwMDsKIAl0aWNrX3BlcmlvZCAtPSAxOwogCi0JbCA9IHRpbWVyX3JlYWRfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9USURSKTsKLQlwcmludGsoS0VSTl9JTkZPICJPTUFQMiBHUCB0aW1lciAoSFcgdmVyc2lvbiAlZC4lZClcbiIsCi0JICAgICAgIChsID4+IDQpICYgMHgwZiwgbCAmIDB4MGYpOwotCi0Jc2V0dXBfaXJxKDM4LCAmb21hcDJfZ3BfdGltZXJfaXJxKTsKLQotCW9tYXAyX2dwX3RpbWVyX3N0YXJ0KE9TX1RJTUVSX05SLCB0aWNrX3BlcmlvZCk7CisJc2V0dXBfaXJxKG9tYXBfZG1fdGltZXJfZ2V0X2lycShncHRpbWVyKSwgJm9tYXAyX2dwX3RpbWVyX2lycSk7CisJb21hcDJfZ3BfdGltZXJfc3RhcnQodGlja19wZXJpb2QpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7CiAJLmluaXQJPSBvbWFwMl9ncF90aW1lcl9pbml0LAogfTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKaW5kZXggNGNlNjgwNi4uODg4YmY2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCkBAIC04Niw3ICs4Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBueDQwMDhfdGltZXJfaXJxID0gewogCS5uYW1lID0gIlBOWDQwMDggVGljayBUaW1lciIsCi0JLmZsYWdzID0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIgPSBwbng0MDA4X3RpbWVyX2ludGVycnVwdAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggZWE1MTM3Zi4uMDNkMDdjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0zNSw2ICszNSwxMCBAQAogCSAgU0wtQzMwMDAgKFNwaXR6KSwgU0wtQzMxMDAgKEJvcnpvaSkgb3IgU0wtQzYwMDB4IChUb3NhKQogCSAgaGFuZGhlbGQgY29tcHV0ZXIuCiAKK2NvbmZpZyBNQUNIX1RSSVpFUFM0CisJYm9vbCAiS2VpdGggdW5kIEtvZXAgVHJpemVwczQgRElNTS1Nb2R1bGUiCisJc2VsZWN0IFBYQTI3eAorCiBlbmRjaG9pY2UKIAogaWYgUFhBX1NIQVJQU0wKQEAgLTU1LDYgKzU5LDIxIEBACiAKIGVuZGlmCiAKK2lmIE1BQ0hfVFJJWkVQUzQKKworY2hvaWNlCisJcHJvbXB0ICJTZWxlY3QgYmFzZSBib2FyZCBmb3IgVHJpemVwcyA0IG1vZHVsZSIKKworY29uZmlnIE1BQ0hfVFJJWkVQUzRfQ09OWFMKKwlib29sICJDb25YUyBFdmFsIEJvYXJkIgorCitjb25maWcgTUFDSF9UUklaRVBTNF9BTlkKKwlib29sICJhbm90aGVyIEJvYXJkIgorCitlbmRjaG9pY2UKKworZW5kaWYKKwogZW5kbWVudQogCiBjb25maWcgTUFDSF9QT09ETEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggMTYxMDY5MC4uOTA5M2ViMWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzApICs9IGxwZDI3MC5vCiBvYmotJChDT05GSUdfTUFDSF9NQUlOU1RPTkUpICs9IG1haW5zdG9uZS5vCiBvYmotJChDT05GSUdfQVJDSF9QWEFfSURQKSArPSBpZHAubworb2JqLSQoQ09ORklHX01BQ0hfVFJJWkVQUzQpCSs9IHRyaXplcHM0Lm8KIG9iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBjb3JnaV9zc3AubyBjb3JnaV9sY2QubyBzaGFycHNsX3BtLm8gY29yZ2lfcG0ubwogb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBjb3JnaV9zc3AubyBjb3JnaV9sY2QubyBzaGFycHNsX3BtLm8gc3BpdHpfcG0ubwogb2JqLSQoQ09ORklHX01BQ0hfQUtJVEEpCSs9IGFraXRhLWlvZXhwLm8KQEAgLTIzLDYgKzI0LDcgQEAKIGxlZC0kKENPTkZJR19BUkNIX0xVQkJPQ0spICs9IGxlZHMtbHViYm9jay5vCiBsZWQtJChDT05GSUdfTUFDSF9NQUlOU1RPTkUpICs9IGxlZHMtbWFpbnN0b25lLm8KIGxlZC0kKENPTkZJR19BUkNIX1BYQV9JRFApICs9IGxlZHMtaWRwLm8KK2xlZC0kKENPTkZJR19NQUNIX1RSSVpFUFM0KSArPSBsZWRzLXRyaXplcHM0Lm8KIAogb2JqLSQoQ09ORklHX0xFRFMpICs9ICQobGVkLXkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IGJmNjY0OGEuLmNjZTI2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJY29yZ2lfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoQ09SR0lfSVJRX0dQSU9fblNEX0RFVEVDVCwgY29yZ2lfZGV0ZWN0X2ludCwKLQkJCSAgU0FfSU5URVJSVVBUIHwgU0FfVFJJR0dFUl9SSVNJTkcgfCBTQV9UUklHR0VSX0ZBTExJTkcsCisJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY29yZ2lfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKaW5kZXggMzQ3YjlkZS4uNjkxNGQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCmluZGV4IDUzOWI1OTYuLmQ5NjM1ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCkBAIC04OCw4ICs4OCw4IEBACiAKIAlpZiAodHlwZSA9PSBJUlFUX1BST0JFKSB7CiAJICAgIC8qIERvbid0IG1lc3Mgd2l0aCBlbmFibGVkIEdQSU9zIHVzaW5nIHByZWNvbmZpZ3VyZWQgZWRnZXMgb3IKLQkgICAgICAgR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBkdXJpbmcgcHJvYmUgKi8KLQkJaWYgKChHUElPX0lSUV9yaXNpbmdfZWRnZVtpZHhdIHwgR1BJT19JUlFfZmFsbGluZ19lZGdlW2lkeF0pICYKKwkgICAgICAgR1BJT3Mgc2V0IHRvIGFsdGVybmF0ZSBmdW5jdGlvbiBvciB0byBvdXRwdXQgZHVyaW5nIHByb2JlICovCisJCWlmICgoR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSB8IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdIHwgR1BEUihncGlvKSkgJgogCQkgICAgR1BJT19iaXQoZ3BpbykpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKEdBRlIoZ3BpbykgJiAoMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1pZHAuYwppbmRleCA1ZWJhNmVhLi4zOGFhOTI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtaWRwLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKaW5kZXggMDVjZjU2MC4uYWZiYzY2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1sdWJib2NrLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG5hbWVzcGFjZSBjb2xsaXNpb24uICBNb3N0bHkgYWRhcHRlZCB0aGUgTWFpbnN0b25lIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKaW5kZXggYzA2ZDNkNy4uMDY1MjkzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLXRyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLXRyaXplcHM0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjZmM4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtdHJpemVwczQuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtdHJpemVwczQuYworICoKKyAqICBBdXRob3I6CUrDvHJnZW4gU2NoaW5kZWxlCisgKiAgQ3JlYXRlZDoJMjAgMDIsIDIwMDYKKyAqICBDb3B5cmlnaHQ6CUrDvHJnZW4gU2NoaW5kZWxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RyaXplcHM0Lmg+CisKKyNpbmNsdWRlICJsZWRzLmgiCisKKyNkZWZpbmUgTEVEX1NUQVRFX0VOQUJMRUQJMQorI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkyCisKKyNkZWZpbmUgU1lTX0JVU1kJCTB4MDEKKyNkZWZpbmUgSEVBUlRCRUFUCQkweDAyCisjZGVmaW5lIEJMSU5LCQkJMHgwNAorCitzdGF0aWMgdW5zaWduZWQgaW50IGxlZF9zdGF0ZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHdfbGVkX3N0YXRlOworCit2b2lkIHRyaXplcHM0X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2l0Y2ggKGV2dCkgeworCWNhc2UgbGVkX3N0YXJ0OgorCQlod19sZWRfc3RhdGUgPSAwOworCQlweGFfZ3Bpb19tb2RlKCBHUElPX1NZU19CVVNZX0xFRCAgfCBHUElPX09VVCk7CQkvKiBMRUQxICovCisJCXB4YV9ncGlvX21vZGUoIEdQSU9fSEVBUlRCRUFUX0xFRCB8IEdQSU9fT1VUKTsJCS8qIExFRDIgKi8KKwkJbGVkX3N0YXRlID0gTEVEX1NUQVRFX0VOQUJMRUQ7CisJCWJyZWFrOworCisJY2FzZSBsZWRfc3RvcDoKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9jbGFpbToKKwkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9DTEFJTUVEOworCQlod19sZWRfc3RhdGUgPSAwOworCQlicmVhazsKKworCWNhc2UgbGVkX3JlbGVhc2U6CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKKwljYXNlIGxlZF90aW1lcjoKKwkJaHdfbGVkX3N0YXRlIF49IEhFQVJUQkVBVDsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MRURTX0NQVQorCWNhc2UgbGVkX2lkbGVfc3RhcnQ6CisJCWh3X2xlZF9zdGF0ZSAmPSB+U1lTX0JVU1k7CisJCWJyZWFrOworCisJY2FzZSBsZWRfaWRsZV9lbmQ6CisJCWh3X2xlZF9zdGF0ZSB8PSBTWVNfQlVTWTsKKwkJYnJlYWs7CisjZW5kaWYKKworCWNhc2UgbGVkX2hhbHRlZDoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9ncmVlbl9vbjoKKwkJaHdfbGVkX3N0YXRlIHw9IEJMSU5LOworCQlicmVhazsKKworCWNhc2UgbGVkX2dyZWVuX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5CTElOSzsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9hbWJlcl9vbjoKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9hbWJlcl9vZmY6CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVkX29uOgorCQlicmVhazsKKworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkgeworCQlzd2l0Y2ggKGh3X2xlZF9zdGF0ZSkgeworCQkJY2FzZSAwOgorCQkJCUdQU1IoR1BJT19TWVNfQlVTWV9MRUQpICB8PSBHUElPX2JpdChHUElPX1NZU19CVVNZX0xFRCk7CisJCQkJR1BTUihHUElPX0hFQVJUQkVBVF9MRUQpIHw9IEdQSU9fYml0KEdQSU9fSEVBUlRCRUFUX0xFRCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJR1BDUihHUElPX1NZU19CVVNZX0xFRCkgIHw9IEdQSU9fYml0KEdQSU9fU1lTX0JVU1lfTEVEKTsKKwkJCQlHUFNSKEdQSU9fSEVBUlRCRUFUX0xFRCkgfD0gR1BJT19iaXQoR1BJT19IRUFSVEJFQVRfTEVEKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlHUFNSKEdQSU9fU1lTX0JVU1lfTEVEKSAgfD0gR1BJT19iaXQoR1BJT19TWVNfQlVTWV9MRUQpOworCQkJCUdQQ1IoR1BJT19IRUFSVEJFQVRfTEVEKSB8PSBHUElPX2JpdChHUElPX0hFQVJUQkVBVF9MRUQpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCUdQQ1IoR1BJT19TWVNfQlVTWV9MRUQpICB8PSBHUElPX2JpdChHUElPX1NZU19CVVNZX0xFRCk7CisJCQkJR1BDUihHUElPX0hFQVJUQkVBVF9MRUQpIHw9IEdQSU9fYml0KEdQSU9fSEVBUlRCRUFUX0xFRCk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIHR1cm4gYWxsIG9mZiAqLworCQlHUFNSKEdQSU9fU1lTX0JVU1lfTEVEKSAgfD0gR1BJT19iaXQoR1BJT19TWVNfQlVTWV9MRUQpOworCQlHUFNSKEdQSU9fSEVBUlRCRUFUX0xFRCkgfD0gR1BJT19iaXQoR1BJT19IRUFSVEJFQVRfTEVEKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLmMKaW5kZXggYmJlNGQ1Zi4uZTEzZWI4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMuYwpAQCAtMjQsNiArMjQsOCBAQAogCQlsZWRzX2V2ZW50ID0gbWFpbnN0b25lX2xlZHNfZXZlbnQ7CiAJaWYgKG1hY2hpbmVfaXNfcHhhX2lkcCgpKQogCQlsZWRzX2V2ZW50ID0gaWRwX2xlZHNfZXZlbnQ7CisJaWYgKG1hY2hpbmVfaXNfdHJpemVwczQoKSkKKwkJbGVkc19ldmVudCA9IHRyaXplcHM0X2xlZHNfZXZlbnQ7CiAKIAlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLmgKaW5kZXggZDk4ZjZlOS4uNGY4MjliOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMuaApAQCAtMTAsMyArMTAsNCBAQAogZXh0ZXJuIHZvaWQgaWRwX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKIGV4dGVybiB2b2lkIGx1YmJvY2tfbGVkc19ldmVudChsZWRfZXZlbnRfdCBldnQpOwogZXh0ZXJuIHZvaWQgbWFpbnN0b25lX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKK2V4dGVybiB2b2lkIHRyaXplcHM0X2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKaW5kZXggZWMwZjQzYS4uMWE1ZjVjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKQEAgLTI0OCw1OCArMjQ4LDEzNyBAQAogCiAvKiA1LjciIFRGVCBRVkdBIChMb0xvIGRpc3BsYXkgbnVtYmVyIDEpICovCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBzaGFycF9scTA1N3EzZGMwMiBfX2luaXRkYXRhID0gewotCS5waXhjbG9jawkJPSAxMDAwMDAsCi0JLnhyZXMJCQk9IDI0MCwKLQkueXJlcwkJCT0gMzIwLAorCS5waXhjbG9jawkJPSAxNTAwMDAsCisJLnhyZXMJCQk9IDMyMCwKKwkueXJlcwkJCT0gMjQwLAogCS5icHAJCQk9IDE2LAotCS5oc3luY19sZW4JCT0gNjQsCi0JLmxlZnRfbWFyZ2luCQk9IDB4MjcsCi0JLnJpZ2h0X21hcmdpbgkJPSAweDA5LAotCS52c3luY19sZW4JCT0gMHgwNCwKKwkuaHN5bmNfbGVuCQk9IDB4MTQsCisJLmxlZnRfbWFyZ2luCQk9IDB4MjgsCisJLnJpZ2h0X21hcmdpbgkJPSAweDBhLAorCS52c3luY19sZW4JCT0gMHgwMiwKIAkudXBwZXJfbWFyZ2luCQk9IDB4MDgsCiAJLmxvd2VyX21hcmdpbgkJPSAweDE0LAotCS5zeW5jCQkJPSAwLAorCS5zeW5jCQkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKIAkubGNjcjAJCQk9IDB4MDc4MDAwODAsCi0JLmxjY3IzCQkJPSAweDA0NDAwMDA3LAorCS5sY2NyMwkJCT0gMHgwMDQwMDAwMCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gbHBkMjcwX2JhY2tsaWdodF9wb3dlciwKK307CisKKy8qIDEyLjEiIFRGVCBTVkdBIChMb0xvIGRpc3BsYXkgbnVtYmVyIDIpICovCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBzaGFycF9scTEyMXMxZGczMSBfX2luaXRkYXRhID0geworCS5waXhjbG9jawkJPSA1MDAwMCwKKwkueHJlcwkJCT0gODAwLAorCS55cmVzCQkJPSA2MDAsCisJLmJwcAkJCT0gMTYsCisJLmhzeW5jX2xlbgkJPSAweDA1LAorCS5sZWZ0X21hcmdpbgkJPSAweDUyLAorCS5yaWdodF9tYXJnaW4JCT0gMHgwNSwKKwkudnN5bmNfbGVuCQk9IDB4MDQsCisJLnVwcGVyX21hcmdpbgkJPSAweDE0LAorCS5sb3dlcl9tYXJnaW4JCT0gMHgwYSwKKwkuc3luYwkJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCisJLmxjY3IwCQkJPSAweDA3ODAwMDgwLAorCS5sY2NyMwkJCT0gMHgwMDQwMDAwMCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gbHBkMjcwX2JhY2tsaWdodF9wb3dlciwKK307CisKKy8qIDMuNiIgVEZUIFFWR0EgKExvTG8gZGlzcGxheSBudW1iZXIgMykgKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHNoYXJwX2xxMDM2cTFkYTAxIF9faW5pdGRhdGEgPSB7CisJLnBpeGNsb2NrCQk9IDE1MDAwMCwKKwkueHJlcwkJCT0gMzIwLAorCS55cmVzCQkJPSAyNDAsCisJLmJwcAkJCT0gMTYsCisJLmhzeW5jX2xlbgkJPSAweDBlLAorCS5sZWZ0X21hcmdpbgkJPSAweDA0LAorCS5yaWdodF9tYXJnaW4JCT0gMHgwYSwKKwkudnN5bmNfbGVuCQk9IDB4MDMsCisJLnVwcGVyX21hcmdpbgkJPSAweDAzLAorCS5sb3dlcl9tYXJnaW4JCT0gMHgwMywKKwkuc3luYwkJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCisJLmxjY3IwCQkJPSAweDA3ODAwMDgwLAorCS5sY2NyMwkJCT0gMHgwMDQwMDAwMCwKIAkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gbHBkMjcwX2JhY2tsaWdodF9wb3dlciwKIH07CiAKIC8qIDYuNCIgVEZUIFZHQSAoTG9MbyBkaXNwbGF5IG51bWJlciA1KSAqLwogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc2hhcnBfbHE2NGQzNDMgX19pbml0ZGF0YSA9IHsKLQkucGl4Y2xvY2sJCT0gMjAwMDAsCisJLnBpeGNsb2NrCQk9IDI1MDAwLAogCS54cmVzCQkJPSA2NDAsCiAJLnlyZXMJCQk9IDQ4MCwKIAkuYnBwCQkJPSAxNiwKLQkuaHN5bmNfbGVuCQk9IDQ5LAorCS5oc3luY19sZW4JCT0gMHgzMSwKIAkubGVmdF9tYXJnaW4JCT0gMHg4OSwKIAkucmlnaHRfbWFyZ2luCQk9IDB4MTksCi0JLnZzeW5jX2xlbgkJPSAxOCwKKwkudnN5bmNfbGVuCQk9IDB4MTIsCiAJLnVwcGVyX21hcmdpbgkJPSAweDIyLAotCS5sb3dlcl9tYXJnaW4JCT0gMCwKKwkubG93ZXJfbWFyZ2luCQk9IDB4MDAsCiAJLnN5bmMJCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAogCS5sY2NyMAkJCT0gMHgwNzgwMDA4MCwKLQkubGNjcjMJCQk9IDB4MDQ0MDAwMDEsCisJLmxjY3IzCQkJPSAweDAwNDAwMDAwLAorCS5weGFmYl9iYWNrbGlnaHRfcG93ZXIJPSBscGQyNzBfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworLyogMTAuNCIgVEZUIFZHQSAoTG9MbyBkaXNwbGF5IG51bWJlciA3KSAqLworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc2hhcnBfbHExMGQzNjggX19pbml0ZGF0YSA9IHsKKwkucGl4Y2xvY2sJCT0gMjUwMDAsCisJLnhyZXMJCQk9IDY0MCwKKwkueXJlcwkJCT0gNDgwLAorCS5icHAJCQk9IDE2LAorCS5oc3luY19sZW4JCT0gMHgzMSwKKwkubGVmdF9tYXJnaW4JCT0gMHg4OSwKKwkucmlnaHRfbWFyZ2luCQk9IDB4MTksCisJLnZzeW5jX2xlbgkJPSAweDEyLAorCS51cHBlcl9tYXJnaW4JCT0gMHgyMiwKKwkubG93ZXJfbWFyZ2luCQk9IDB4MDAsCisJLnN5bmMJCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorCS5sY2NyMAkJCT0gMHgwNzgwMDA4MCwKKwkubGNjcjMJCQk9IDB4MDA0MDAwMDAsCiAJLnB4YWZiX2JhY2tsaWdodF9wb3dlcgk9IGxwZDI3MF9iYWNrbGlnaHRfcG93ZXIsCiB9OwogCiAvKiAzLjUiIFRGVCBRVkdBIChMb0xvIGRpc3BsYXkgbnVtYmVyIDgpICovCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBzaGFycF9scTAzNXE3ZGIwMl8yMCBfX2luaXRkYXRhID0gewotCS5waXhjbG9jawkJPSAxMDAwMDAsCisJLnBpeGNsb2NrCQk9IDE1MDAwMCwKIAkueHJlcwkJCT0gMjQwLAogCS55cmVzCQkJPSAzMjAsCiAJLmJwcAkJCT0gMTYsCi0JLmhzeW5jX2xlbgkJPSAweDM0LAotCS5sZWZ0X21hcmdpbgkJPSAweDA5LAotCS5yaWdodF9tYXJnaW4JCT0gMHgwOSwKLQkudnN5bmNfbGVuCQk9IDB4MDgsCisJLmhzeW5jX2xlbgkJPSAweDBlLAorCS5sZWZ0X21hcmdpbgkJPSAweDBhLAorCS5yaWdodF9tYXJnaW4JCT0gMHgwYSwKKwkudnN5bmNfbGVuCQk9IDB4MDMsCiAJLnVwcGVyX21hcmdpbgkJPSAweDA1LAogCS5sb3dlcl9tYXJnaW4JCT0gMHgxNCwKLQkuc3luYwkJCT0gMCwKKwkuc3luYwkJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCiAJLmxjY3IwCQkJPSAweDA3ODAwMDgwLAotCS5sY2NyMwkJCT0gMHgwNDQwMDAwNywKKwkubGNjcjMJCQk9IDB4MDA0MDAwMDAsCiAJLnB4YWZiX2JhY2tsaWdodF9wb3dlcgk9IGxwZDI3MF9iYWNrbGlnaHRfcG93ZXIsCiB9OwogCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyAqbHBkMjcwX2xjZF90b191c2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGxwZDI3MF9zZXRfbGNkKGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cm5pY21wKHN0ciwgImxxMDU3cTNkYzAyIiwgMTEpKSB7CisJCWxwZDI3MF9sY2RfdG9fdXNlID0gJnNoYXJwX2xxMDU3cTNkYzAyOworCX0gZWxzZSBpZiAoIXN0cm5pY21wKHN0ciwgImxxMTIxczFkZzMxIiwgMTEpKSB7CisJCWxwZDI3MF9sY2RfdG9fdXNlID0gJnNoYXJwX2xxMTIxczFkZzMxOworCX0gZWxzZSBpZiAoIXN0cm5pY21wKHN0ciwgImxxMDM2cTFkYTAxIiwgMTEpKSB7CisJCWxwZDI3MF9sY2RfdG9fdXNlID0gJnNoYXJwX2xxMDM2cTFkYTAxOworCX0gZWxzZSBpZiAoIXN0cm5pY21wKHN0ciwgImxxNjRkMzQzIiwgOCkpIHsKKwkJbHBkMjcwX2xjZF90b191c2UgPSAmc2hhcnBfbHE2NGQzNDM7CisJfSBlbHNlIGlmICghc3RybmljbXAoc3RyLCAibHExMGQzNjgiLCA4KSkgeworCQlscGQyNzBfbGNkX3RvX3VzZSA9ICZzaGFycF9scTEwZDM2ODsKKwl9IGVsc2UgaWYgKCFzdHJuaWNtcChzdHIsICJscTAzNXE3ZGIwMi0yMCIsIDE0KSkgeworCQlscGQyNzBfbGNkX3RvX3VzZSA9ICZzaGFycF9scTAzNXE3ZGIwMl8yMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJscGQyNzA6IHVua25vd24gbGNkIHBhbmVsIFslc11cbiIsIHN0cik7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImxjZD0iLCBscGQyNzBfc2V0X2xjZCk7CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc21jOTF4X2RldmljZSwKIAkmbHBkMjcwX2F1ZGlvX2RldmljZSwKQEAgLTM0NSw5ICs0MjQsOCBAQAogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKLQkvLyBzZXRfcHhhX2ZiX2luZm8oJnNoYXJwX2xxMDU3cTNkYzAyKTsKLQlzZXRfcHhhX2ZiX2luZm8oJnNoYXJwX2xxNjRkMzQzKTsKLQkvLyBzZXRfcHhhX2ZiX2luZm8oJnNoYXJwX2xxMDM1cTdkYjAyXzIwKTsKKwlpZiAobHBkMjcwX2xjZF90b191c2UgIT0gTlVMTCkKKwkJc2V0X3B4YV9mYl9pbmZvKGxwZDI3MF9sY2RfdG9fdXNlKTsKIAogCXB4YV9zZXRfb2hjaV9pbmZvKCZscGQyNzBfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCAxYWIyNmM2Li42YTlhNjY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC00MTksNyArNDE5LDcgQEAKIAlpbml0X3RpbWVyKCZtbWNfdGltZXIpOwogCW1tY190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRhdGE7CiAJcmV0dXJuIHJlcXVlc3RfaXJxKExVQkJPQ0tfU0RfSVJRLCBsdWJib2NrX2RldGVjdF9pbnQsCi0JCQlTQV9TQU1QTEVfUkFORE9NLCAibHViYm9jay1zZC1kZXRlY3QiLCBkYXRhKTsKKwkJCUlSUUZfU0FNUExFX1JBTkRPTSwgImx1YmJvY2stc2QtZGV0ZWN0IiwgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgbHViYm9ja19tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggYjMwN2YxMS4uMjFkZGYzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCSAqLwogCU1TVF9NU0NXUjEgJj0gfk1TVF9NU0NXUjFfTVNfU0VMOwogCi0JZXJyID0gcmVxdWVzdF9pcnEoTUFJTlNUT05FX01NQ19JUlEsIG1zdG9uZV9kZXRlY3RfaW50LCBTQV9JTlRFUlJVUFQsCisJZXJyID0gcmVxdWVzdF9pcnEoTUFJTlNUT05FX01NQ19JUlEsIG1zdG9uZV9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVELAogCQkJICAgICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIm1haW5zdG9uZV9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggODUyZWE3Mi4uMjExMmM0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDlhOWZhODcuLjZkYmZmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAlwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIHBvb2RsZV9kZXRlY3RfaW50LAotCQkJICBTQV9JTlRFUlJVUFQgfCBTQV9UUklHR0VSX1JJU0lORyB8IFNBX1RSSUdHRVJfRkFMTElORywKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwb29kbGVfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKaW5kZXggNTczYTU3NS4uYzFmMjE3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIGluaXRpYWxpemF0aW9uIHN0dWZmIGZvciBQWEEgbWFjaGluZXMgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gbGF0ZXIgaWYKICAqIG5lZWQgYmUuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IDNiYWE3MDguLjc0ZWVhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKaW5kZXggMGYxNjQ4Ny4uZGI2ZThmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtMTgsMTEgKzE4LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FwbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KQEAgLTE0MiwxOCArMTQyLDE4IEBACiAJcHhhX2dwaW9fbW9kZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2sgfCBHUElPX0lOKTsKIAogCS8qIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycyAqLwotCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4pLCBzaGFycHNsX2FjX2lzciwgU0FfSU5URVJSVVBULCAiQUMgSW5wdXQgRGV0ZWN0Iiwgc2hhcnBzbF9hY19pc3IpKSB7CisJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksIHNoYXJwc2xfYWNfaXNyLCBJUlFGX0RJU0FCTEVELCAiQUMgSW5wdXQgRGV0ZWN0Iiwgc2hhcnBzbF9hY19pc3IpKSB7CiAJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbikpOwogCX0KIAllbHNlIHNldF9pcnFfdHlwZShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4pLElSUVRfQk9USEVER0UpOwogCi0JaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayksIHNoYXJwc2xfZmF0YWxfaXNyLCBTQV9JTlRFUlJVUFQsICJCYXR0ZXJ5IENvdmVyIiwgc2hhcnBzbF9mYXRhbF9pc3IpKSB7CisJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayksIHNoYXJwc2xfZmF0YWxfaXNyLCBJUlFGX0RJU0FCTEVELCAiQmF0dGVyeSBDb3ZlciIsIHNoYXJwc2xfZmF0YWxfaXNyKSkgewogCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQ291bGQgbm90IGdldCBpcnEgJWQuXG4iLCBJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spKTsKIAl9CiAJZWxzZSBzZXRfaXJxX3R5cGUoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSxJUlFUX0ZBTExJTkcpOwogCiAJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpLCBzaGFycHNsX2ZhdGFsX2lzciwgU0FfSU5URVJSVVBULCAiRmF0YWwgQmF0dGVyeSIsIHNoYXJwc2xfZmF0YWxfaXNyKSkgeworCQlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCksIHNoYXJwc2xfZmF0YWxfaXNyLCBJUlFGX0RJU0FCTEVELCAiRmF0YWwgQmF0dGVyeSIsIHNoYXJwc2xfZmF0YWxfaXNyKSkgewogCQkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCkpOwogCQl9CiAJCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpLElSUVRfRkFMTElORyk7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0ZnVsbF9pcnEpCiAJewogCQkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KLQkJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCksIHNoYXJwc2xfY2hyZ19mdWxsX2lzciwgU0FfSU5URVJSVVBULCAiQ08iLCBzaGFycHNsX2NocmdfZnVsbF9pc3IpKSB7CisJCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpLCBzaGFycHNsX2NocmdfZnVsbF9pc3IsIElSUUZfRElTQUJMRUQsICJDTyIsIHNoYXJwc2xfY2hyZ19mdWxsX2lzcikpIHsKIAkJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCkpOwogCQl9CiAJCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCksSVJRVF9SSVNJTkcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggMDY1MGJlZC4uMTU4NzRiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IGViOTkzN2YuLjFjMzJhOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoU1BJVFpfSVJRX0dQSU9fblNEX0RFVEVDVCwgc3BpdHpfZGV0ZWN0X2ludCwKLQkJCSAgU0FfSU5URVJSVVBUIHwgU0FfVFJJR0dFUl9SSVNJTkcgfCBTQV9UUklHR0VSX0ZBTExJTkcsCisJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3BpdHpfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3N0YW5kYnkuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3N0YW5kYnkuUwppbmRleCA2ZjZkYmJkLi5kNzc0NDMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zdGFuZGJ5LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3RhbmRieS5TCkBAIC05LDcgKzksNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwppbmRleCBiOWIyMDU3Li41ZGJkMTkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xMTgsNyArMTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcHhhX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiUFhBIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSBweGFfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IDcxNTJiYzEzLi4yNDkzNTM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAogCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCi0JZXJyID0gcmVxdWVzdF9pcnEoVE9TQV9JUlFfR1BJT19uU0RfREVURUNULCB0b3NhX2RldGVjdF9pbnQsIFNBX0lOVEVSUlVQVCwKKwllcnIgPSByZXF1ZXN0X2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIHRvc2FfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJCQkiTU1DL1NEIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzAwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCkBAIC0wLDAgKzEsNDczIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIEtlaXRoIHVuZCBLb2VwIFRyaXplcHM0IE1vZHVsZSBQbGF0Zm9ybS4KKyAqCisgKiAgQXV0aG9yOglKw7xyZ2VuIFNjaGluZGVsZQorICogIENyZWF0ZWQ6CTIwIDAyLCAyMDA2CisgKiAgQ29weXJpZ2h0OglKw7xyZ2VuIFNjaGluZGVsZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RyaXplcHM0Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGFmYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vaGNpLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT05CT0FSRCBGTEFTSAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHRyaXplcHM0X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLnNpemUgPQkJMHgwMDA0MDAwMCwKKwkJLm9mZnNldCA9CTAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSx7CisJCS5uYW1lID0JCSJLZXJuZWwiLAorCQkuc2l6ZSA9CQkweDAwNDAwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDA0MDAwMAorCX0seworCQkubmFtZSA9CQkiRmlsZXN5c3RlbSIsCisJCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPQkweDAwNDQwMDAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHRyaXplcHM0X2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCQkucGFydHMJCT0gdHJpemVwczRfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh0cml6ZXBzNF9wYXJ0aXRpb25zKQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl82NE0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnRyaXplcHM0X2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQVZJQ09NIERNOTAwMCBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBUUklaRVBTNF9FVEhfUEhZUysweDMwMCwKKwkJLmVuZAk9IFRSSVpFUFM0X0VUSF9QSFlTKzB4NDAwLTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBUUklaRVBTNF9FVEhfUEhZUysweDgzMDAsCisJCS5lbmQJPSBUUklaRVBTNF9FVEhfUEhZUysweDg0MDAtMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IFRSSVpFUFM0X0VUSF9JUlEsCisJCS5lbmQJPSBUUklaRVBTNF9FVEhfSVJRLAorCQkuZmxhZ3MJPSAoSU9SRVNPVVJDRV9JUlEgfCBJUlFUX1JJU0lORyksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImRtOTAwMCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2VzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQWEEyNzAgc2VyaWFsIHBvcnRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHRyaV9zZXJpYWxfcG9ydHNbXSA9IHsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1BYQQorCS8qIHRoaXMgdXNlcyB0aGUgb3duIFBYQSBkcml2ZXIgKi8KKwl7CisJCTAsCisJfSwKKyNlbHNlCisJLyogdGhpcyB1c2VzIHRoZSBnZW5lcmljIDg1MjAgZHJpdmVyICovCisJWzBdID0geworCQkubWVtYmFzZQk9ICh2b2lkICopJkZGVUFSVCwKKwkJLmlycQkJPSBJUlFfRkZVQVJULAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0zMiwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSAoOTIxNjAwKjE2KSwKKwl9LAorCVsxXSA9IHsKKwkJLm1lbWJhc2UJPSAodm9pZCAqKSZCVFVBUlQsCisJCS5pcnEJCT0gSVJRX0JUVUFSVCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNMzIsCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gKDkyMTYwMCoxNiksCisJfSwKKwl7CisJCTAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdWFydF9kZXZpY2VzID0geworCS5uYW1lCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSB0cmlfc2VyaWFsX3BvcnRzLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5yZXNvdXJjZQk9IE5VTEwsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBYQTI3MCBhYzk3IHNvdW5kIGNvZGVjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhYzk3X2F1ZGlvX2RldmljZSA9IHsKKwkubmFtZQkJPSAicHhhMnh4LWFjOTciLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogdHJpemVwczRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmZsYXNoX2RldmljZSwKKwkmdWFydF9kZXZpY2VzLAorCSZkbTkwMDBfZGV2aWNlLAorCSZhYzk3X2F1ZGlvX2RldmljZSwKK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9UUklaRVBTNF9DT05YUworc3RhdGljIHNob3J0IHRyaXplcHNfY29ueHNfYmNyOworCisvKiBQQ0NBUkQgcG93ZXIgc3dpdGNoaW5nIHN1cHBvcnRzIG9ubHkgMywzViAqLwordm9pZCBib2FyZF9wY21jaWFfcG93ZXIoaW50IHBvd2VyKQoreworCWlmIChwb3dlcikgeworCQkvKiBzd2l0Y2ggcG93ZXIgb24sIHB1dCBpbiByZXNldCBhbmQgZW5hYmxlIGJ1ZmZlcnMgKi8KKwkJdHJpemVwc19jb254c19iY3IgfD0gcG93ZXI7CisJCXRyaXplcHNfY29ueHNfYmNyIHw9IENvblhTX0JDUl9DRl9SRVNFVDsKKwkJdHJpemVwc19jb254c19iY3IgJj0gfihDb25YU19CQ1JfQ0ZfQlVGX0VOKTsKKwkJQ29uWFNfQkNSID0gdHJpemVwc19jb254c19iY3I7CisJCS8qIHdhaXQgYSBsaXR0bGUgKi8KKwkJdWRlbGF5KDIwMDApOworCQkvKiB0YWtlIHJlc2V0IGF3YXkgKi8KKwkJdHJpemVwc19jb254c19iY3IgJj0gfihDb25YU19CQ1JfQ0ZfUkVTRVQpOworCQlDb25YU19CQ1IgPSB0cml6ZXBzX2NvbnhzX2JjcjsKKwkJdWRlbGF5KDIwMDApOworCX0gZWxzZSB7CisJCS8qIHB1dCBpbiByZXNldCAqLworCQl0cml6ZXBzX2NvbnhzX2JjciB8PSBDb25YU19CQ1JfQ0ZfUkVTRVQ7CisJCUNvblhTX0JDUiA9IHRyaXplcHNfY29ueHNfYmNyOworCQl1ZGVsYXkoMTAwMCk7CisJCS8qIHN3aXRjaCBwb3dlciBvZmYgKi8KKwkJdHJpemVwc19jb254c19iY3IgJj0gfigweGYpOworCQlDb25YU19CQ1IgPSB0cml6ZXBzX2NvbnhzX2JjcjsKKworCX0KKwlwcl9kZWJ1ZygiJXM6IG8lcyAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIHBvd2VyID8gIm4iOiAiZmYiLCB0cml6ZXBzX2NvbnhzX2Jjcik7Cit9CisKKy8qIGJhY2tsaWdodCBwb3dlciBzd2l0Y2hpbmcgZm9yIExDRCBwYW5lbCAqLworc3RhdGljIHZvaWQgYm9hcmRfYmFja2xpZ2h0X3Bvd2VyKGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJdHJpemVwc19jb254c19iY3IgfD0gQ29uWFNfQkNSX0xfRElTUDsKKwl9IGVsc2UgeworCQl0cml6ZXBzX2NvbnhzX2JjciAmPSB+Q29uWFNfQkNSX0xfRElTUDsKKwl9CisJcHJfZGVidWcoIiVzOiBvJXMgMHgleFxuIiwgX19GVU5DVElPTl9fLCBvbiA/ICJuIiA6ICJmZiIsIHRyaXplcHNfY29ueHNfYmNyKTsKKwlDb25YU19CQ1IgPSB0cml6ZXBzX2NvbnhzX2JjcjsKK30KKworLyogUG93ZXJzdXBwbHkgZm9yIE1NQy9TRCBjYXJkc2xvdCAqLworc3RhdGljIHZvaWQgYm9hcmRfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKKwkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogRklYTUUgZmlsbCBpbiB2YWx1ZXMgaGVyZSAqLworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBGSVhNRSBmaWxsIGluIHZhbHVlcyBoZXJlICovCisJfQorfQorCitzdGF0aWMgc2hvcnQgdHJpemVwc19jb254c19pcmNyOworCisvKiBTd2l0Y2ggbW9kZXMgYW5kIFBvd2VyIGZvciBJUkRBIHJlY2VpdmVyICovCitzdGF0aWMgdm9pZCBib2FyZF9pcmRhX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChtb2RlICYgSVJfU0lSTU9ERSkgeworCQkvKiBTbG93IG1vZGUgKi8KKwkJdHJpemVwc19jb254c19pcmNyICY9IH5Db25YU19JUkNSX01PREU7CisJfSBlbHNlIGlmIChtb2RlICYgSVJfRklSTU9ERSkgeworCQkvKiBGYXN0IG1vZGUgKi8KKwkJdHJpemVwc19jb254c19pcmNyIHw9IENvblhTX0lSQ1JfTU9ERTsKKwl9CisJaWYgKG1vZGUgJiBJUl9PRkYpIHsKKwkJdHJpemVwc19jb254c19pcmNyIHw9IENvblhTX0lSQ1JfU0Q7CisJfSBlbHNlIHsKKwkJdHJpemVwc19jb254c19pcmNyICY9IH5Db25YU19JUkNSX1NEOworCX0KKwkvKiBGSVhNRSB3cml0ZSB2YWx1ZXMgdG8gcmVnaXN0ZXIgKi8KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbHNlCisvKiBmb3Igb3RoZXIgYmFzZWJvYXJkcyBkZWZpbmUgZHVtbWllcyAqLwordm9pZCBib2FyZF9wY21jaWFfcG93ZXIoaW50IHBvd2VyKQl7O30KKyNkZWZpbmUgYm9hcmRfYmFja2xpZ2h0X3Bvd2VyCQlOVUxMCisjZGVmaW5lIGJvYXJkX21jaV9wb3dlcgkJCU5VTEwKKyNkZWZpbmUgYm9hcmRfaXJkYV9tb2RlCQkJTlVMTAorCisjZW5kaWYJCS8qIENPTkZJR19NQUNIX1RSSVpFUFM0X0NPTlhTICovCitFWFBPUlRfU1lNQk9MKGJvYXJkX3BjbWNpYV9wb3dlcik7CisKK3N0YXRpYyBpbnQgdHJpemVwczRfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFyZXR1cm5fdCAoKm1jaV9kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKwkvKiBzZXR1cCBHUElPIGZvciBQWEEyN3ggTU1DIGNvbnRyb2xsZXIgKi8KKwlweGFfZ3Bpb19tb2RlKEdQSU8zMl9NTUNDTEtfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzExMl9NTUNDTURfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzkyX01NQ0RBVDBfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzEwOV9NTUNEQVQxX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMTBfTU1DREFUMl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMTExX01NQ0RBVDNfTUQpOworCisJcHhhX2dwaW9fbW9kZShHUElPX01NQ19ERVQgfCBHUElPX0lOKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKFRSSVpFUFM0X01NQ19JUlEsIG1jaV9kZXRlY3RfaW50LAorCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0cml6ZXBzNF9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cml6ZXBzNF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoVFJJWkVQUzRfTU1DX0lSUSwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdHJpemVwczRfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJPSB0cml6ZXBzNF9tY2lfaW5pdCwKKwkuZXhpdAkJPSB0cml6ZXBzNF9tY2lfZXhpdCwKKwkuc2V0cG93ZXIgCT0gYm9hcmRfbWNpX3Bvd2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdHJpemVwczRfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCisJLnRyYW5zY2VpdmVyX21vZGUgPSBib2FyZF9pcmRhX21vZGUsCit9OworCitzdGF0aWMgaW50IHRyaXplcHM0X29oY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyogc2V0dXAgUG9ydDEgR1BJTyBwaW4uICovCisJcHhhX2dwaW9fbW9kZSggODggfCBHUElPX0FMVF9GTl8xX0lOKTsJLyogVVNCSFBXUjEgKi8KKwlweGFfZ3Bpb19tb2RlKCA4OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsJLyogVVNCSFBFTjEgKi8KKworCS8qIFNldCB0aGUgUG93ZXIgQ29udHJvbCBQb2xhcml0eSBMb3cgYW5kIFBvd2VyIFNlbnNlCisJICAgUG9sYXJpdHkgTG93IHRvIGFjdGl2ZSBsb3cuICovCisJVUhDSFIgPSAoVUhDSFIgfCBVSENIUl9QQ1BMIHwgVUhDSFJfUFNQTCkgJgorCQl+KFVIQ0hSX1NTRVAxIHwgVUhDSFJfU1NFUDIgfCBVSENIUl9TU0VQMyB8IFVIQ0hSX1NTRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHJpemVwczRfb2hjaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIHRyaXplcHM0X29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX1BFUlBPUlRfTU9ERSwKKwkuaW5pdAkJPSB0cml6ZXBzNF9vaGNpX2luaXQsCisJLmV4aXQJCT0gdHJpemVwczRfb2hjaV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB0cml6ZXBzNF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7IAkvKiBDb25YUyBDRlNSICovCisJCS52aXJ0dWFsCT0gVFJJWkVQUzRfQ0ZTUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFJJWkVQUzRfQ0ZTUl9QSFlTKSwKKwkJLmxlbmd0aAkJPSAweDAwMDAxMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsJLyogQ29uWFMgQkNSICovCisJCS52aXJ0dWFsCT0gVFJJWkVQUzRfQk9DUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFJJWkVQUzRfQk9DUl9QSFlTKSwKKwkJLmxlbmd0aAkJPSAweDAwMDAxMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsgCS8qIENvblhTIElSQ1IgKi8KKwkJLnZpcnR1YWwJPSBUUklaRVBTNF9JUkNSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUklaRVBTNF9JUkNSX1BIWVMpLAorCQkubGVuZ3RoCQk9IDB4MDAwMDEwMDAsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJewkvKiBDb25YUyBEQ1IgKi8KKwkJLnZpcnR1YWwJPSBUUklaRVBTNF9ESUNSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUklaRVBTNF9ESUNSX1BIWVMpLAorCQkubGVuZ3RoCQk9IDB4MDAwMDEwMDAsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJewkvKiBDb25YUyBVUFNSICovCisJCS52aXJ0dWFsCT0gVFJJWkVQUzRfVVBTUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFJJWkVQUzRfVVBTUl9QSFlTKSwKKwkJLmxlbmd0aAkJPSAweDAwMDAxMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBzaGFycF9sY2QgX19pbml0ZGF0YSA9IHsKKyAgICAucGl4Y2xvY2sJCT0gNzgwMDAsCisgICAgLnhyZXMJCT0gNjQwLAorICAgIC55cmVzCQk9IDQ4MCwKKyAgICAuYnBwCQk9IDgsCisgICAgLmhzeW5jX2xlbgkJPSA0LAorICAgIC5sZWZ0X21hcmdpbgk9IDQsCisgICAgLnJpZ2h0X21hcmdpbgk9IDQsCisgICAgLnZzeW5jX2xlbgkJPSAyLAorICAgIC51cHBlcl9tYXJnaW4JPSAwLAorICAgIC5sb3dlcl9tYXJnaW4JPSAwLAorICAgIC5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorICAgIC5jbWFwX2dyZXlzY2FsZQk9IDAsCisgICAgLmNtYXBfaW52ZXJzZQk9IDAsCisgICAgLmNtYXBfc3RhdGljCT0gMCwKKyAgICAubGNjcjAJCT0gTENDUjBfQ29sb3IgfCBMQ0NSMF9QYXMgfCBMQ0NSMF9EdWFsLAorICAgIC5sY2NyMwkJPSAweDAzNDBmZjAyLAorICAgIC5weGFmYl9iYWNrbGlnaHRfcG93ZXIgPSBib2FyZF9iYWNrbGlnaHRfcG93ZXIsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdHJpemVwczRfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywgc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsIHN0cnVjdCBtZW1pbmZvICptaSkKK3sKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRyaXplcHM0X2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh0cml6ZXBzNF9kZXZpY2VzLCBBUlJBWV9TSVpFKHRyaXplcHM0X2RldmljZXMpKTsKKworCXNldF9weGFfZmJfaW5mbygmc2hhcnBfbGNkKTsKKworCXB4YV9zZXRfbWNpX2luZm8oJnRyaXplcHM0X21jaV9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X2ZpY3BfaW5mbygmdHJpemVwczRfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X29oY2lfaW5mbygmdHJpemVwczRfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHRyaXplcHM0X21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQodHJpemVwczRfaW9fZGVzYywgQVJSQVlfU0laRSh0cml6ZXBzNF9pb19kZXNjKSk7CisKKwkvKiBmb3IgRGlza09uQ2hpcCAqLworCXB4YV9ncGlvX21vZGUoR1BJTzE1X25DU18xX01EKTsKKworCS8qIGZvciBvZmYtbW9kdWxlIFBJQyBvbiBDb25YUyBib2FyZCAqLworCXB4YV9ncGlvX21vZGUoR1BJT19QSUMgfCBHUElPX0lOKTsKKworCS8qIFVDQjE0MDAgaXJxICovCisJcHhhX2dwaW9fbW9kZShHUElPX1VDQjE0MDAgfCBHUElPX0lOKTsKKworCS8qIGZvciBETTkwMDAgTEFOICovCisJcHhhX2dwaW9fbW9kZShHUElPNzhfbkNTXzJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJT19ETTkwMDAgfCBHUElPX0lOKTsKKworCS8qIGZvciBQQ01DSUEgZGV2aWNlICovCisJcHhhX2dwaW9fbW9kZShHUElPX1BDRCB8IEdQSU9fSU4pOworCXB4YV9ncGlvX21vZGUoR1BJT19QUkRZIHwgR1BJT19JTik7CisKKwkvKiBmb3IgSTJDIGFkYXB0ZXIgKi8KKwlweGFfZ3Bpb19tb2RlKEdQSU8xMTdfSTJDU0NMX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8xMThfSTJDU0RBX01EKTsKKworCS8qIE1NQ19ERVQgcy5vLiAqLworCXB4YV9ncGlvX21vZGUoR1BJT19NTUNfREVUIHwgR1BJT19JTik7CisKKwkvKiB3aGF0cyB0aGF0IGZvciA/Pz8gKi8KKwlweGFfZ3Bpb19tb2RlKEdQSU83OV9uQ1NfM19NRCk7CisKKwlweGFfZ3Bpb19tb2RlKCBHUElPX1NZU19CVVNZX0xFRCAgfCBHUElPX09VVCk7CQkvKiBMRUQxICovCisJcHhhX2dwaW9fbW9kZSggR1BJT19IRUFSVEJFQVRfTEVEIHwgR1BJT19PVVQpOwkJLyogTEVEMiAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfVFJJWkVQUzRfQ09OWFMKKyNpZmRlZiBDT05GSUdfSURFX1BYQV9DRgorCS8qIGlmIGJvb3QgZGlyZWN0IGZyb20gY29tcGFjdCBmbGFzaCBkb250IGRpc2FibGUgcG93ZXIgKi8KKwl0cml6ZXBzX2NvbnhzX2JjciA9IDB4MDAwOTsKKyNlbHNlCisJLyogdGhpcyBpcyB0aGUgcmVzZXQgdmFsdWUgKi8KKwl0cml6ZXBzX2NvbnhzX2JjciA9IDB4MDBBMDsKKyNlbmRpZgorCUNvblhTX0JDUiA9IHRyaXplcHNfY29ueHNfYmNyOworI2VuZGlmCisKKwlQV0VSICA9IDB4MDAwMDAwMDI7CisJUEZFUiAgPSAweDAwMDAwMDAwOworCVBSRVIgID0gMHgwMDAwMDAwMjsKKwlQR1NSMCA9IDB4MDE1OEMwMDA7CisJUEdTUjEgPSAweDAwRkYwMDgwOworCVBHU1IyID0gMHgwMDAxQzAwNDsKKwkvKiBTdG9wIDMuNk1IeiBhbmQgZHJpdmUgSElHSCB0byBQQ01DSUEgYW5kIENTICovCisJUENGUiB8PSBQQ0ZSX09QREU7Cit9CisKK01BQ0hJTkVfU1RBUlQoVFJJWkVQUzQsICJLZWl0aCB1bmQgS29lcCBUcml6ZXBzIElWIG1vZHVsZSIpCisJLyogTUFJTlRBSU5FUigiSsO8cmdlbiBTY2hpbmRlbGUiKSAqLworCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBUUklaRVBTNF9TRFJBTV9CQVNFICsgMHgxMDAsCisJLmZpeHVwCQk9IHRyaXplcHM0X2ZpeHVwLAorCS5pbml0X21hY2hpbmUJPSB0cml6ZXBzNF9pbml0LAorCS5tYXBfaW8JCT0gdHJpemVwczRfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YV9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggZDEzMjcwYy4uZGEwMjg2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KQEAgLTUzNyw3ICs1MzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiByZWFsdmlld190aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIlJlYWxWaWV3IFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIJPSByZWFsdmlld190aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggNjkzZmIxZS4uODRhOTU5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMTksNyArMTksNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYyBiL2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jCmluZGV4IGJkODZmZmIuLmFjNTExZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL2RtYS5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIHN0YXRpYyBpbnQgaW9tZF9yZXF1ZXN0X2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCiB7CiAJcmV0dXJuIHJlcXVlc3RfaXJxKGRtYS0+ZG1hX2lycSwgaW9tZF9kbWFfaGFuZGxlLAotCQkJICAgU0FfSU5URVJSVVBULCBkbWEtPmRldmljZV9pZCwgZG1hKTsKKwkJCSAgIElSUUZfRElTQUJMRUQsIGRtYS0+ZGV2aWNlX2lkLCBkbWEpOwogfQogCiBzdGF0aWMgdm9pZCBpb21kX2ZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKaW5kZXggZmJiZWIwNS4uZGVmNDQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKQEAgLTEzNiw4ICsxMzYsOCBAQAogCQlmb3IgKGkgPSAwOyBzdGF0ICE9IDA7IGkrKywgc3RhdCA+Pj0gMSkgewogCQkJaWYgKHN0YXQgJiAxKSB7CiAJCQkJaXJxbm8gPSBiYXN0X3BjMTA0X2lycXNbaV07Ci0KLQkJCQlkZXNjX2hhbmRsZV9pcnEoaXJxbm8sIGlycV9kZXNjICsgaXJxbm8sIHJlZ3MpOworCQkJCWRlc2MgPSBpcnFfZGVzYyArIGlycW5vOworCQkJCWRlc2NfaGFuZGxlX2lycShpcnFubywgZGVzYywgcmVncyk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVNBLCBiYXN0X2lycV9wYzEwNF9kZW11eCk7CiAKLQkJLyogcmVpZ3N0ZXIgb3VyIElSUXMgKi8KKwkJLyogcmVnaXN0ZXIgb3VyIElSUXMgKi8KIAogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCQl1bnNpZ25lZCBpbnQgaXJxbm8gPSBiYXN0X3BjMTA0X2lycXNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaAppbmRleCBmYTEyNGVkLi43MjZlMmVhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCkBAIC0xNCw3ICsxNCw2IEBACiAgKgkyNy1BdWctMjAwNCBCSkQgIEFkZGVkIHRpbWVycyAwIHRocm91Z2ggMwogICoJMTAtRmViLTIwMDUgQkpECSBBZGRlZCBjYW1lcmEgZnJvbSBndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi50dgogKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCmluZGV4IDRkYmQ4ZTcuLjA5NGNjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIHBvc3NpYmxlIERNQSBmdW5jdGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRwogI2RlZmluZSBERUJVRwpAQCAtNzE5LDcgKzcxOCw3IEBACiAJCXByX2RlYnVnKCJkbWElZDogJXMgOiByZXF1ZXN0aW5nIGlycSAlZFxuIiwKIAkJCSBjaGFubmVsLCBfX0ZVTkNUSU9OX18sIGNoYW4tPmlycSk7CiAKLQkJZXJyID0gcmVxdWVzdF9pcnEoY2hhbi0+aXJxLCBzM2MyNDEwX2RtYV9pcnEsIFNBX0lOVEVSUlVQVCwKKwkJZXJyID0gcmVxdWVzdF9pcnEoY2hhbi0+aXJxLCBzM2MyNDEwX2RtYV9pcnEsIElSUUZfRElTQUJMRUQsCiAJCQkJICBjbGllbnQtPm5hbWUsICh2b2lkICopY2hhbik7CiAKIAkJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCA0M2U5YTU1Li5hNTg5ZmU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMjksNyArMjksNiBAQAogICogICAgIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQV9VQVJUIHRvIFMzQzI0WFhfVkFfVUFSVAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jCmluZGV4IDgzOGJjNTIuLjlhMjI1ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguYwpAQCAtNjksNiArNjksNyBAQAogCiAJczNjX2RldmljZV9pMmMubmFtZSAgPSAiczNjMjQ0MC1pMmMiOwogCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzI0NDAtbmFuZCI7CisJczNjX2RldmljZV91c2JnYWRnZXQubmFtZSA9ICJzM2MyNDQwLXVzYmdhZGdldCI7CiB9CiAKIHZvaWQgX19pbml0IHMzYzI0NHhfaW5pdF9jbG9ja3MoaW50IHh0YWwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCmluZGV4IGRjMjcxNjcuLmE3NTYxYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCkBAIC0yNCw3ICsyNCw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdGltZS5jCmluZGV4IDlkN2I3OTkuLjAwZDFjZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYwpAQCAtMTgsMTEgKzE4LDExIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gczNjMjQxMF90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIlMzQzI0MTAgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IHMzYzI0MTBfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKaW5kZXggNDk1ZjhjNi4uNmIyMmQ4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwpAQCAtODUsOCArODUsOCBAQAogCiAJaWYgKG9uKSB7CiAJCXJldCA9IHJlcXVlc3RfaXJxKElSUV9VU0JPQywgdXNiX3NpbXRlY19vY2lycSwKLQkJCQkgIFNBX0lOVEVSUlVQVCB8IFNBX1RSSUdHRVJfUklTSU5HIHwKLQkJCQkgICBTQV9UUklHR0VSX0ZBTExJTkcsCisJCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJICAgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkJICAiVVNCIE92ZXItY3VycmVudCIsIGluZm8pOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlcXVlc3QgdXNiIG9jIGlycVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9hc3NhYmV0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9hc3NhYmV0LmMKaW5kZXggYzU4ZjEyYi4uYmUwNmQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvYXNzYWJldC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Fzc2FiZXQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NlcmYuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NlcmYuYwppbmRleCA4MjY5YTllLi4zMWFmZTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jZXJmLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2VyZi5jCkBAIC0xMCwxMSArMTAsMTEgQEAKICAqIEphbi0yMDA0IDogUmVtb3ZlZCBpbyBtYXAgZm9yIGZsYXNoIFtGQl0KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDY3NmI1YzUuLmE2YmFiNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiAgMDQtMTYtMjAwMSBMaW5lbyBKYXBhbixJbmMuIC4uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCmluZGV4IDY5NmQ3ZDIuLjQ1YjFlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCkBAIC00NSwxMiArNDUsMTIgQEAKIAl9CiAKIAkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KLQlpZiAoKGVyciA9IHJlcXVlc3RfaXJxKENPTExJRV9JUlFfR1BJT19BQ19JTiwgc2hhcnBzbF9hY19pc3IsIFNBX0lOVEVSUlVQVCwKKwlpZiAoKGVyciA9IHJlcXVlc3RfaXJxKENPTExJRV9JUlFfR1BJT19BQ19JTiwgc2hhcnBzbF9hY19pc3IsIElSUUZfRElTQUJMRUQsCiAJCQkgICAgICAgIkFDSU4iLCBzaGFycHNsX2FjX2lzcikpKSB7CiAJCXByaW50aygiQ291bGQgbm90IGdldCBpcnEgJWQuXG4iLCBDT0xMSUVfSVJRX0dQSU9fQUNfSU4pOwogCQlyZXR1cm47CiAJfQotCWlmICgoZXJyID0gcmVxdWVzdF9pcnEoQ09MTElFX0lSUV9HUElPX0NPLCBzaGFycHNsX2NocmdfZnVsbF9pc3IsIFNBX0lOVEVSUlVQVCwKKwlpZiAoKGVyciA9IHJlcXVlc3RfaXJxKENPTExJRV9JUlFfR1BJT19DTywgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyLCBJUlFGX0RJU0FCTEVELAogCQkJICAgICAgICJDTyIsIHNoYXJwc2xfY2hyZ19mdWxsX2lzcikpKSB7CiAJCWZyZWVfaXJxKENPTExJRV9JUlFfR1BJT19BQ19JTiwgc2hhcnBzbF9hY19pc3IpOwogCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgQ09MTElFX0lSUV9HUElPX0NPKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYwppbmRleCAwNGM5NGFiLi42Mzk1OTc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTExMC5jCkBAIC0xNSw3ICsxNSwxMCBAQAogICogICAgICBTRFJBTSByZWFkcyAocmV2IEEwLCBCMCwgQjEpCiAgKgogICogV2UgaWdub3JlIHJldi4gQTAgYW5kIEIwIGRldmljZXM7IEkgZG9uJ3QgdGhpbmsgdGhleSdyZSB3b3J0aCBzdXBwb3J0aW5nLgorICoKKyAqIFRoZSBTRFJBTSB0eXBlIGNhbiBiZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyBjcHVfc2ExMTEwLnNkcmFtPXR5cGUKICAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzUsNiArMzgsNyBAQAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBzYTExMTBfZHJpdmVyOwogCiBzdHJ1Y3Qgc2RyYW1fcGFyYW1zIHsKKwljb25zdCBjaGFyIG5hbWVbMTZdOwogCXVfY2hhciAgcm93czsJCS8qIGJpdHMJCQkJICovCiAJdV9jaGFyICBjYXNfbGF0ZW5jeTsJLyogY3ljbGVzCQkJICovCiAJdV9jaGFyICB0Y2s7CQkvKiBjbG9jayBjeWNsZSB0aW1lIChucykJICovCkBAIC01MCw1NCArNTQsNTMgQEAKIAl1X2ludAltZGNhc1szXTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RyYW1fcGFyYW1zIHRjNTlzbTcxNl9jbDJfcGFyYW1zIF9faW5pdGRhdGEgPSB7Ci0JLnJvd3MJCQk9IDEyLAotCS50Y2sJCQk9IDEwLAotCS50cmNkCQkJPSAyMCwKLQkudHJwCQkJPSAyMCwKLQkudHdyCQkJPSAxMCwKLQkucmVmcmVzaAkJPSA2NDAwMCwKLQkuY2FzX2xhdGVuY3kJCT0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2RyYW1fcGFyYW1zIHRjNTlzbTcxNl9jbDNfcGFyYW1zIF9faW5pdGRhdGEgPSB7Ci0JLnJvd3MJCQk9IDEyLAotCS50Y2sJCQk9IDgsCi0JLnRyY2QJCQk9IDIwLAotCS50cnAJCQk9IDIwLAotCS50d3IJCQk9IDgsCi0JLnJlZnJlc2gJCT0gNjQwMDAsCi0JLmNhc19sYXRlbmN5CQk9IDMsCi19OwotCi1zdGF0aWMgc3RydWN0IHNkcmFtX3BhcmFtcyBzYW1zdW5nX2s0czY0MTYzMmRfdGM3NSBfX2luaXRkYXRhID0gewotCS5yb3dzCQkJPSAxNCwKLQkudGNrCQkJPSA5LAotCS50cmNkCQkJPSAyNywKLQkudHJwCQkJPSAyMCwKLQkudHdyCQkJPSA5LAotCS5yZWZyZXNoCQk9IDY0MDAwLAotCS5jYXNfbGF0ZW5jeQkJPSAzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzZHJhbV9wYXJhbXMgc2Ftc3VuZ19rbTQxNnM0MDMwY3QgX19pbml0ZGF0YSA9IHsKLQkucm93cwkJCT0gMTMsCi0JLnRjawkJCT0gOCwKLQkudHJjZAkJCT0gMjQsCS8qIDMgQ0xLcyAqLwotCS50cnAJCQk9IDI0LAkvKiAzIENMS3MgKi8KLQkudHdyCQkJPSAxNiwJLyogVHJkbDogMiBDTEtzICovCi0JLnJlZnJlc2gJCT0gNjQwMDAsCi0JLmNhc19sYXRlbmN5CQk9IDMsCi19OwotCi1zdGF0aWMgc3RydWN0IHNkcmFtX3BhcmFtcyB3Ym9uZF93OTgyNTE2YWg3NWxfY2wzX3BhcmFtcyBfX2luaXRkYXRhID0gewotCS5yb3dzCQkJPSAxNiwKLQkudGNrCQkJPSA4LAotCS50cmNkCQkJPSAyMCwKLQkudHJwCQkJPSAyMCwKLQkudHdyCQkJPSA4LAotCS5yZWZyZXNoCQk9IDY0MDAwLAotCS5jYXNfbGF0ZW5jeQkJPSAzLAorc3RhdGljIHN0cnVjdCBzZHJhbV9wYXJhbXMgc2RyYW1fdGJsW10gX19pbml0ZGF0YSA9IHsKKwl7CS8qIFRvc2hpYmEgVEM1OVNNNzE2IENMMiAqLworCQkubmFtZQkJPSAiVEM1OVNNNzE2LUNMMiIsCisJCS5yb3dzCQk9IDEyLAorCQkudGNrCQk9IDEwLAorCQkudHJjZAkJPSAyMCwKKwkJLnRycAkJPSAyMCwKKwkJLnR3cgkJPSAxMCwKKwkJLnJlZnJlc2gJPSA2NDAwMCwKKwkJLmNhc19sYXRlbmN5CT0gMiwKKwl9LCB7CS8qIFRvc2hpYmEgVEM1OVNNNzE2IENMMyAqLworCQkubmFtZQkJPSAiVEM1OVNNNzE2LUNMMyIsCisJCS5yb3dzCQk9IDEyLAorCQkudGNrCQk9IDgsCisJCS50cmNkCQk9IDIwLAorCQkudHJwCQk9IDIwLAorCQkudHdyCQk9IDgsCisJCS5yZWZyZXNoCT0gNjQwMDAsCisJCS5jYXNfbGF0ZW5jeQk9IDMsCisJfSwgewkvKiBTYW1zdW5nIEs0UzY0MTYzMkQgVEM3NSAqLworCQkubmFtZQkJPSAiSzRTNjQxNjMyRCIsCisJCS5yb3dzCQk9IDE0LAorCQkudGNrCQk9IDksCisJCS50cmNkCQk9IDI3LAorCQkudHJwCQk9IDIwLAorCQkudHdyCQk9IDksCisJCS5yZWZyZXNoCT0gNjQwMDAsCisJCS5jYXNfbGF0ZW5jeQk9IDMsCisJfSwgewkvKiBTYW1zdW5nIEtNNDE2UzQwMzBDVCAqLworCQkubmFtZQkJPSAiS000MTZTNDAzMENUIiwKKwkJLnJvd3MJCT0gMTMsCisJCS50Y2sJCT0gOCwKKwkJLnRyY2QJCT0gMjQsCS8qIDMgQ0xLcyAqLworCQkudHJwCQk9IDI0LAkvKiAzIENMS3MgKi8KKwkJLnR3cgkJPSAxNiwJLyogVHJkbDogMiBDTEtzICovCisJCS5yZWZyZXNoCT0gNjQwMDAsCisJCS5jYXNfbGF0ZW5jeQk9IDMsCisJfSwgewkvKiBXaW5ib25kIFc5ODI1MTZBSDc1TCBDTDMgKi8KKwkJLm5hbWUJCT0gIlc5ODI1MTZBSDc1TCIsCisJCS5yb3dzCQk9IDE2LAorCQkudGNrCQk9IDgsCisJCS50cmNkCQk9IDIwLAorCQkudHJwCQk9IDIwLAorCQkudHdyCQk9IDgsCisJCS5yZWZyZXNoCT0gNjQwMDAsCisJCS5jYXNfbGF0ZW5jeQk9IDMsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2RyYW1fcGFyYW1zIHNkcmFtX3BhcmFtczsKQEAgLTMzNiwxOSArMzM5LDM2IEBACiAJLm5hbWUJCT0gInNhMTExMCIsCiB9OwogCitzdGF0aWMgc3RydWN0IHNkcmFtX3BhcmFtcyAqc2ExMTEwX2ZpbmRfc2RyYW0oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc2RyYW1fcGFyYW1zICpzZHJhbTsKKworCWZvciAoc2RyYW0gPSBzZHJhbV90Ymw7IHNkcmFtIDwgc2RyYW1fdGJsICsgQVJSQVlfU0laRShzZHJhbV90YmwpOyBzZHJhbSsrKQorCQlpZiAoc3RyY21wKG5hbWUsIHNkcmFtLT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuIHNkcmFtOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyIHNkcmFtX25hbWVbMTZdOworCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMTBfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3Qgc2RyYW1fcGFyYW1zICpzZHJhbSA9IE5VTEw7CisJc3RydWN0IHNkcmFtX3BhcmFtcyAqc2RyYW07CisJY29uc3QgY2hhciAqbmFtZSA9IHNkcmFtX25hbWU7CiAKLQlpZiAobWFjaGluZV9pc19hc3NhYmV0KCkpCi0JCXNkcmFtID0gJnRjNTlzbTcxNl9jbDNfcGFyYW1zOworCWlmICghbmFtZVswXSkgeworCQlpZiAobWFjaGluZV9pc19hc3NhYmV0KCkpCisJCQluYW1lID0gIlRDNTlTTTcxNi1DTDMiOwogCi0JaWYgKG1hY2hpbmVfaXNfcHRfc3lzdGVtMygpKQotCQlzZHJhbSA9ICZzYW1zdW5nX2s0czY0MTYzMmRfdGM3NTsKKwkJaWYgKG1hY2hpbmVfaXNfcHRfc3lzdGVtMygpKQorCQkJbmFtZSA9ICJLNFM2NDE2MzJEIjsKIAotCWlmIChtYWNoaW5lX2lzX2gzMTAwKCkpCi0JCXNkcmFtID0gJnNhbXN1bmdfa200MTZzNDAzMGN0OworCQlpZiAobWFjaGluZV9pc19oMzEwMCgpKQorCQkJbmFtZSA9ICJLTTQxNlM0MDMwQ1QiOworCX0KIAorCXNkcmFtID0gc2ExMTEwX2ZpbmRfc2RyYW0obmFtZSk7CiAJaWYgKHNkcmFtKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJTRFJBTTogdGNrOiAlZCB0cmNkOiAlZCB0cnA6ICVkIgogCQkJIiB0d3I6ICVkIHJlZnJlc2g6ICVkIGNhc19sYXRlbmN5OiAlZFxuIiwKQEAgLTM2Myw0ICszODMsNSBAQAogCXJldHVybiAwOwogfQogCittb2R1bGVfcGFyYW1fc3RyaW5nKHNkcmFtLCBzZHJhbV9uYW1lLCBzaXplb2Yoc2RyYW1fbmFtZSksIDApOwogYXJjaF9pbml0Y2FsbChzYTExMTBfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwppbmRleCBiZTBlNDQyLi4zYzY0NDFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIAlpID0gZG1hIC0gZG1hX2NoYW47CiAJcmVncyA9IChkbWFfcmVnc190ICopJkREQVIoaSk7Ci0JZXJyID0gcmVxdWVzdF9pcnEoSVJRX0RNQTAgKyBpLCBkbWFfaXJxX2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwKKwllcnIgPSByZXF1ZXN0X2lycShJUlFfRE1BMCArIGksIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgZGV2aWNlX2lkLCByZWdzKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCmluZGV4IDllYTcxNTUuLjQ1NzVmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMKQEAgLTksNyArOSw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYwppbmRleCBiMDRkOTIyLi43MzY0NDc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqCQkJCSAgIGFuZCBhYnN0cmFjdGVkIEVHUElPIGludGVyZmFjZS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03NDEsNyArNzQwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGgzODAwX2lycSA9IHsKIAkubmFtZQkJPSAiaDM4MDBfYXNpYyIsCiAJLmhhbmRsZXIJPSBoMzgwMF9JUlFfZGVtdXgsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIH07CiAKIHUzMiBrcGlvX2ludF9zaGFkb3cgPSAwOwpAQCAtODM2LDcgKzgzNSw3IEBACiAJfQogI2VuZGlmCiAJc2V0X2lycV90eXBlKElSUV9HUElPX0gzODAwX0FTSUMsIElSUVRfUklTSU5HKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJT19IMzgwMF9BU0lDLCAmaDM4MDBfSVJRX2RlbXV4KTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJT19IMzgwMF9BU0lDLCBoMzgwMF9JUlFfZGVtdXgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKaW5kZXggYjNhNTYwMi4uMjg5MWI4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKQEAgLTExLDEyICsxMSwxMyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1hc3NhYmV0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWFzc2FiZXQuYwppbmRleCBlOWFhOWRmLi5lZTk3ODg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWFzc2FiZXQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWFzc2FiZXQuYwpAQCAtOSw3ICs5LDYgQEAKICAqICAgLSBHcmVlbiAtIHRvZ2dsZXMgc3RhdGUgZXZlcnkgNTAgdGltZXIgaW50ZXJydXB0cwogICogICAtIFJlZCAgIC0gb24gaWYgc3lzdGVtIGlzIG5vdCBpZGxlCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtYmFkZ2U0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWJhZGdlNC5jCmluZGV4IDBhOGY4N2IuLjI4MDkyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtYmFkZ2U0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1iYWRnZTQuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWNlcmYuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtY2VyZi5jCmluZGV4IGY2NjM1YTIuLmYzOGVlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtY2VyZi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtY2VyZi5jCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIEF1dGhvcjogPz8/CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtaGFja2tpdC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1oYWNra2l0LmMKaW5kZXggMmU1ZmExNC4uN2U5MWNjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1oYWNra2l0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1oYWNra2l0LmMKQEAgLTksNyArOSw2IEBACiAgKiBUaGUgSGFja0tpdCBoYXMgdHdvIGxlZHMgKEdQSU8gMjIvMjMpLiBUaGUgcmVkIGxlZCAoZ3BpbyAyMikgaXMgdXNlZAogICogYXMgY3B1IGxlZCwgdGhlIGdyZWVuIG9uZSBpcyB1c2VkIGFzIHRpbWVyIGxlZC4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1sYXJ0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWxhcnQuYwppbmRleCAxODc1MDE0Li4yZDI3ZDc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWxhcnQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLWxhcnQuYwpAQCAtOSw3ICs5LDYgQEAKICAqICB0aW1lLCBidXQgaW4gdGhhdCBjYXNlIHRoZSB0aW1lciBldmVudHMgd2lsbCBzdGlsbCBkaWN0YXRlIHRoZQogICogIHBhY2Ugb2YgdGhlIExFRC4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1zaW1wYWQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2xlZHMtc2ltcGFkLmMKaW5kZXggNmEyN2EyZC4uZGVmMDkwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbGVkcy1zaW1wYWQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9sZWRzLXNpbXBhZC5jCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIEF1dGhvcjogSnVlcmdlbiBNZXNzZXJlciA8anVlcmdlbi5tZXNzZXJlckBzaWVtZW5zLmNoPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbGViLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbGViLmMKaW5kZXggMDcwOWViYWIuLmM3YmY3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BsZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbGViLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaGFubm9uLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaGFubm9uLmMKaW5kZXggNWFhZmUwYjUuLjhhY2FiN2IxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaGFubm9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2hhbm5vbi5jCkBAIC0yLDcgKzIsNiBAQAogICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2hhbm5vbi5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NpbXBhZC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2ltcGFkLmMKaW5kZXggZDJjMjNiMi4uYTlhZTFiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2ltcGFkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2ltcGFkLmMKQEAgLTIsNyArMiw2IEBACiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaW1wYWQuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKaW5kZXggZTRiNDM1ZS4uNDlhZTcxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKQEAgLTExMCw3ICsxMTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzYTExMDBfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJTQTExeHggVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IHNhMTEwMF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCmluZGV4IDg3NzYwMGUuLjEwOTVkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAKQEAgLTg5LDcgKzkwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gc2hhcmtfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJTaGFyayBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5oYW5kbGVyCT0gc2hhcmtfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvZG1hLmMKaW5kZXggODM1OTg5YS4uNjc3NGI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jCkBAIC04LDcgKzgsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsIEJsdW5kZWxsCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKaW5kZXggN2JkZWI3MC4uN2NkODZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9sZWRzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqCiAgKiBDaGFuZ2Vsb2c6CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggY2ViZDQ4YS4uYTQzMjUzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMTgsNyArMTgsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtODcwLDcgKzg2OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHZlcnNhdGlsZV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIlZlcnNhdGlsZSBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5oYW5kbGVyCT0gdmVyc2F0aWxlX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcGNpLmMKaW5kZXggNzIyZmJhYi4uNDFiMzcwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcGNpLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIDE0LzA0LzIwMDUgSW5pdGlhbCB2ZXJzaW9uLCBjb2xpbi5raW5nQHBoaWxpcHMuY29tCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfYWIuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9hYi5jCmluZGV4IDFlYjU5NjcuLmIyNTdlZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9hYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9hYi5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKaW5kZXggZjE3YWI0Zi4uNTAzNzI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZWNmNWUyMy4uNWY4MGYxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xNSw4ICsxNSw4IEBACiAJc2VsZWN0IENQVV8zMnYzCiAJc2VsZWN0IENQVV9DQUNIRV9WMwogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAotCXNlbGVjdCBDUFVfQ09QWV9WMwotCXNlbGVjdCBDUFVfVExCX1YzCisJc2VsZWN0IENQVV9DT1BZX1YzIGlmIE1NVQorCXNlbGVjdCBDUFVfVExCX1YzIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBBUk02MTAgaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgQVJNMyBwcm9jZXNzb3IKIAkgIGFuZCB3YXMgcHJvZHVjZWQgYnkgVkxTSSBUZWNobm9sb2d5IEluYy4KQEAgLTMxLDggKzMxLDggQEAKIAlzZWxlY3QgQ1BVXzMydjMKIAlzZWxlY3QgQ1BVX0NBQ0hFX1YzCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCi0Jc2VsZWN0IENQVV9DT1BZX1YzCi0Jc2VsZWN0IENQVV9UTEJfVjMKKwlzZWxlY3QgQ1BVX0NPUFlfVjMgaWYgTU1VCisJc2VsZWN0IENQVV9UTEJfVjMgaWYgTU1VCiAJaGVscAogCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQogCSAgZGVzaWduZWQgYnkgQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBMdGQuIFRoZSBBUk03MTAgaXMgdGhlCkBAIC01MCw4ICs1MCw4IEBACiAJc2VsZWN0IENQVV9BQlJUX0xWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCi0Jc2VsZWN0IENQVV9DT1BZX1Y0V1QKLQlzZWxlY3QgQ1BVX1RMQl9WNFdUCisJc2VsZWN0IENQVV9DT1BZX1Y0V1QgaWYgTU1VCisJc2VsZWN0IENQVV9UTEJfVjRXVCBpZiBNTVUKIAloZWxwCiAJICBBIDMyLWJpdCBSSVNDIHByb2Nlc3NvciB3aXRoIDhrQnl0ZSBDYWNoZSwgV3JpdGUgQnVmZmVyIGFuZAogCSAgTU1VIGJ1aWx0IGFyb3VuZCBhbiBBUk03VERNSSBjb3JlLgpAQCAtNjgsOCArNjgsOCBAQAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCi0Jc2VsZWN0IENQVV9DT1BZX1Y0V0IKLQlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVQorCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBBUk05MjBUIGlzIGxpY2Vuc2VkIHRvIGJlIHByb2R1Y2VkIGJ5IG51bWVyb3VzIHZlbmRvcnMsCiAJICBhbmQgaXMgdXNlZCBpbiB0aGUgTWF2ZXJpY2sgRVA5MzEyIGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgpAQCAtODksOCArODksOCBAQAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCi0Jc2VsZWN0IENQVV9DT1BZX1Y0V0IKLQlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVQorCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBBUk05MjJUIGlzIGEgdmVyc2lvbiBvZiB0aGUgQVJNOTIwVCwgYnV0IHdpdGggc21hbGxlcgogCSAgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgY2FjaGVzLiBJdCBpcyB1c2VkIGluIEFsdGVyYSdzCkBAIC0xMDgsOCArMTA4LDggQEAKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAotCXNlbGVjdCBDUFVfQ09QWV9WNFdCCi0Jc2VsZWN0IENQVV9UTEJfVjRXQkkKKwlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKICAJaGVscAogIAkgIFRoZSBBUk05MjVUIGlzIGEgbWl4IGJldHdlZW4gdGhlIEFSTTkyMFQgYW5kIEFSTTkyNlQsIGJ1dCB3aXRoCiAJICBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgY2FjaGVzLiBJdCBpcyB1c2VkIGluIFRJJ3MgT01BUApAQCAtMTIxLDEzICsxMjEsMTMgQEAKICMgQVJNOTI2VAogY29uZmlnIENQVV9BUk05MjZUCiAJYm9vbCAiU3VwcG9ydCBBUk05MjZUIHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IEFSQ0hfUE5YNDAwOCB8fCBBUkNIX05FVFggfHwgQ1BVX1MzQzI0MTIKLQlkZWZhdWx0IHkgaWYgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9QTlg0MDA4IHx8IEFSQ0hfTkVUWCB8fCBDUFVfUzNDMjQxMgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9QTlg0MDA4IHx8IEFSQ0hfTkVUWCB8fCBDUFVfUzNDMjQxMiB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjEKKwlkZWZhdWx0IHkgaWYgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9QTlg0MDA4IHx8IEFSQ0hfTkVUWCB8fCBDUFVfUzNDMjQxMiB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjEKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKLQlzZWxlY3QgQ1BVX0NPUFlfVjRXQgotCXNlbGVjdCBDUFVfVExCX1Y0V0JJCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCisJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscAogCSAgVGhpcyBpcyBhIHZhcmlhbnQgb2YgdGhlIEFSTTkyMC4gIEl0IGhhcyBzbGlnaHRseSBkaWZmZXJlbnQKIAkgIGluc3RydWN0aW9uIHNlcXVlbmNlcyBmb3IgY2FjaGUgYW5kIFRMQiBvcGVyYXRpb25zLiAgQ3VyaW91c2x5LApAQCAtMTQ0LDggKzE0NCw4IEBACiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKLQlzZWxlY3QgQ1BVX0NPUFlfVjRXQgotCXNlbGVjdCBDUFVfVExCX1Y0V0JJCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCisJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscAogCSAgVGhlIEFSTTEwMjAgaXMgdGhlIDMySyBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgQVJNMTAgcHJvY2Vzc29yLAogCSAgd2l0aCBhbiBhZGRpdGlvbiBvZiBhIGZsb2F0aW5nLXBvaW50IHVuaXQuCkBAIC0xNjEsOCArMTYxLDggQEAKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAotCXNlbGVjdCBDUFVfQ09QWV9WNFdCCi0Jc2VsZWN0IENQVV9UTEJfVjRXQkkKKwlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAlkZXBlbmRzIG9uIG4KIAogIyBBUk0xMDIyRQpAQCAtMTcyLDggKzE3Miw4IEBACiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKLQlzZWxlY3QgQ1BVX0NPUFlfVjRXQiAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKLQlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVSAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAloZWxwCiAJICBUaGUgQVJNMTAyMkUgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFSTXY1VEUgYXJjaGl0ZWN0dXJlCiAJICBiYXNlZCB1cG9uIHRoZSBBUk0xMCBpbnRlZ2VyIGNvcmUgd2l0aCBhIDE2S2lCIEwxIEhhcnZhcmQgY2FjaGUsCkBAIC0xODksOCArMTg5LDggQEAKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VCAjIEJ1dCBuZWVkIEphemVsbGUsIGJ1dCBFVjVUSiBpZ25vcmVzIGJpdCAxMAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAotCXNlbGVjdCBDUFVfQ09QWV9WNFdCICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgotCXNlbGVjdCBDUFVfVExCX1Y0V0JJCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgorCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBBUk0xMDI2RUotUyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVJNdjVURUogYXJjaGl0ZWN0dXJlCiAJICBiYXNlZCB1cG9uIHRoZSBBUk0xMCBpbnRlZ2VyIGNvcmUuCkBAIC0yMDcsOCArMjA3LDggQEAKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0CiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCi0Jc2VsZWN0IENQVV9DT1BZX1Y0V0IKLQlzZWxlY3QgQ1BVX1RMQl9WNFdCCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCisJc2VsZWN0IENQVV9UTEJfVjRXQiBpZiBNTVUKIAloZWxwCiAJICBUaGUgSW50ZWwgU3Ryb25nQVJNKFIpIFNBLTExMCBpcyBhIDMyLWJpdCBtaWNyb3Byb2Nlc3NvciBhbmQKIAkgIGlzIGF2YWlsYWJsZSBhdCBmaXZlIHNwZWVkcyByYW5naW5nIGZyb20gMTAwIE1IeiB0byAyMzMgTUh6LgpAQCAtMjI3LDcgKzIyNyw3IEBACiAJc2VsZWN0IENQVV9BQlJUX0VWNAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAotCXNlbGVjdCBDUFVfVExCX1Y0V0IKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCIGlmIE1NVQogCiAjIFhTY2FsZQogY29uZmlnIENQVV9YU0NBTEUKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCi0Jc2VsZWN0IENQVV9UTEJfVjRXQkkKKwlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAogIyBYU2NhbGUgQ29yZSBWZXJzaW9uIDMKIGNvbmZpZyBDUFVfWFNDMwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKLQlzZWxlY3QgQ1BVX1RMQl9WNFdCSQorCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCXNlbGVjdCBJT18zNgogCiAjIEFSTXY2CkBAIC0yNTgsOCArMjU4LDggQEAKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CiAJc2VsZWN0IENQVV9DQUNIRV9WNgogCXNlbGVjdCBDUFVfQ0FDSEVfVklQVAotCXNlbGVjdCBDUFVfQ09QWV9WNgotCXNlbGVjdCBDUFVfVExCX1Y2CisJc2VsZWN0IENQVV9DT1BZX1Y2IGlmIE1NVQorCXNlbGVjdCBDUFVfVExCX1Y2IGlmIE1NVQogCiAjIEFSTXY2awogY29uZmlnIENQVV8zMnY2SwpAQCAtMjc3LDE3ICsyNzcsMTcgQEAKICMgVGhpcyBkZWZpbmVzIHRoZSBjb21waWxlciBpbnN0cnVjdGlvbiBzZXQgd2hpY2ggZGVwZW5kcyBvbiB0aGUgbWFjaGluZSB0eXBlLgogY29uZmlnIENQVV8zMnYzCiAJYm9vbAotCXNlbGVjdCBUTFNfUkVHX0VNVUwgaWYgU01QCisJc2VsZWN0IFRMU19SRUdfRU1VTCBpZiBTTVAgfHwgIU1NVQogCXNlbGVjdCBORUVEU19TWVNDQUxMX0ZPUl9DTVBYQ0hHIGlmIFNNUAogCiBjb25maWcgQ1BVXzMydjQKIAlib29sCi0Jc2VsZWN0IFRMU19SRUdfRU1VTCBpZiBTTVAKKwlzZWxlY3QgVExTX1JFR19FTVVMIGlmIFNNUCB8fCAhTU1VCiAJc2VsZWN0IE5FRURTX1NZU0NBTExfRk9SX0NNUFhDSEcgaWYgU01QCiAKIGNvbmZpZyBDUFVfMzJ2NQogCWJvb2wKLQlzZWxlY3QgVExTX1JFR19FTVVMIGlmIFNNUAorCXNlbGVjdCBUTFNfUkVHX0VNVUwgaWYgU01QIHx8ICFNTVUKIAlzZWxlY3QgTkVFRFNfU1lTQ0FMTF9GT1JfQ01QWENIRyBpZiBTTVAKIAogY29uZmlnIENQVV8zMnY2CkBAIC0zMzQsNiArMzM0LDcgQEAKIGNvbmZpZyBDUFVfQ0FDSEVfVklQVAogCWJvb2wKIAoraWYgTU1VCiAjIFRoZSBjb3B5LXBhZ2UgbW9kZWwKIGNvbmZpZyBDUFVfQ09QWV9WMwogCWJvb2wKQEAgLTM3Miw2ICszNzMsOCBAQAogY29uZmlnIENQVV9UTEJfVjYKIAlib29sCiAKK2VuZGlmCisKICMKICMgQ1BVIHN1cHBvcnRzIDM2LWJpdCBJL08KICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggMDdhNTM4NS4uMjFhMjc3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTIsMTAgKzIsMTYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBhcm0tc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgogIwogCi1vYmoteQkJCQk6PSBjb25zaXN0ZW50Lm8gZXh0YWJsZS5vIGZhdWx0LWFybXYubyBcCi0JCQkJICAgZmF1bHQubyBmbHVzaC5vIGluaXQubyBpb3JlbWFwLm8gbW1hcC5vIFwKK29iai15CQkJCTo9IGNvbnNpc3RlbnQubyBleHRhYmxlLm8gZmF1bHQubyBpbml0Lm8gXAorCQkJCSAgIGlvbWFwLm8KKworb2JqLSQoQ09ORklHX01NVSkJCSs9IGZhdWx0LWFybXYubyBmbHVzaC5vIGlvcmVtYXAubyBtbWFwLm8gXAogCQkJCSAgIG1tLWFybXYubwogCitpZm5lcSAoJChDT05GSUdfTU1VKSx5KQorb2JqLXkJCQkJKz0gbm9tbXUubworZW5kaWYKKwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBwcm9jLXN5bXMubwogCiBvYmotJChDT05GSUdfQUxJR05NRU5UX1RSQVApCSs9IGFsaWdubWVudC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCmluZGV4IDcwNWM5ODkuLmUwZDIxYmJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYworKysgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwpAQCAtMTEsNyArMTEsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDU0ZTNjNWIuLjJlYmMxYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKQEAgLTcsNyArNyw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IDRhODg0YmEuLmM1ZTA2MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtOCw3ICs4LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDllYTFmODcuLmZlM2Y3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTcsNyArNyw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpAQCAtMjYsOCArMjUsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2RlZmluZSBUQUJMRV9TSVpFCSgyICogUFRSU19QRVJfUFRFICogc2l6ZW9mKHB0ZV90KSkKLQogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pb21hcC5jIGIvYXJjaC9hcm0vbW0vaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjA2NmYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vaW9tYXAuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL2lvbWFwLmMKKyAqCisgKiBNYXAgSU8gcG9ydCBhbmQgUENJIG1lbW9yeSBzcGFjZXMgc28gdGhhdCB7cmVhZCx3cml0ZX1bYndsXSBjYW4KKyAqIGJlIHVzZWQgdG8gYWNjZXNzIHRoaXMgbWVtb3J5LgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmZGVmIF9faW8KK3ZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucikKK3sKKwlyZXR1cm4gX19pbyhwb3J0KTsKK30KK0VYUE9SVF9TWU1CT0woaW9wb3J0X21hcCk7CisKK3ZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKK30KK0VYUE9SVF9TWU1CT0woaW9wb3J0X3VubWFwKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSQordm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisJdW5zaWduZWQgbG9uZyBsZW4gICA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiYXIpOworCisJaWYgKCFsZW4gfHwgIXN0YXJ0KQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobWF4bGVuICYmIGxlbiA+IG1heGxlbikKKwkJbGVuID0gbWF4bGVuOworCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pCisJCXJldHVybiBpb3BvcnRfbWFwKHN0YXJ0LCBsZW4pOworCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQorCQkJcmV0dXJuIGlvcmVtYXAoc3RhcnQsIGxlbik7CisJCXJldHVybiBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChwY2lfaW9tYXApOworCit2b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBWTUFMTE9DX1NUQVJUICYmCisJICAgICh1bnNpZ25lZCBsb25nKWFkZHIgPCBWTUFMTE9DX0VORCkKKwkJaW91bm1hcChhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0wocGNpX2lvdW5tYXApOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKaW5kZXggYzFmNzE4MC4uN2VhYzg3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwpAQCAtMjcsNyArMjcsMTYgQEAKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoKKyAqIFVzZWQgYnkgaW9yZW1hcCgpIGFuZCBpb3VubWFwKCkgY29kZSB0byBtYXJrIChzdXBlcilzZWN0aW9uLW1hcHBlZAorICogSS9PIHJlZ2lvbnMgaW4gdm1fc3RydWN0LT5mbGFncyBmaWVsZC4KKyAqLworI2RlZmluZSBWTV9BUk1fU0VDVElPTl9NQVBQSU5HCTB4ODAwMDAwMDAKIAogc3RhdGljIGlubGluZSB2b2lkCiByZW1hcF9hcmVhX3B0ZShwdGVfdCAqIHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCkBAIC0xMTMsMTAgKzEyMiwxNjggQEAKIAkJZGlyKys7CiAJfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwogCi0JZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKTsKIAlyZXR1cm4gZXJyOwogfQogCisKK3ZvaWQgX19jaGVja19rdm1fc2VxKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGludCBzZXE7CisKKwlkbyB7CisJCXNlcSA9IGluaXRfbW0uY29udGV4dC5rdm1fc2VxOworCQltZW1jcHkocGdkX29mZnNldChtbSwgVk1BTExPQ19TVEFSVCksCisJCSAgICAgICBwZ2Rfb2Zmc2V0X2soVk1BTExPQ19TVEFSVCksCisJCSAgICAgICBzaXplb2YocGdkX3QpICogKHBnZF9pbmRleChWTUFMTE9DX0VORCkgLQorCQkJCQlwZ2RfaW5kZXgoVk1BTExPQ19TVEFSVCkpKTsKKwkJbW0tPmNvbnRleHQua3ZtX3NlcSA9IHNlcTsKKwl9IHdoaWxlIChzZXEgIT0gaW5pdF9tbS5jb250ZXh0Lmt2bV9zZXEpOworfQorCisjaWZuZGVmIENPTkZJR19TTVAKKy8qCisgKiBTZWN0aW9uIHN1cHBvcnQgaXMgdW5zYWZlIG9uIFNNUCAtIElmIHlvdSBpb3VubWFwIGFuZCBpb3JlbWFwIGEgcmVnaW9uLAorICogdGhlIG90aGVyIENQVXMgd2lsbCBub3Qgc2VlIHRoaXMgY2hhbmdlIHVudGlsIHRoZWlyIG5leHQgY29udGV4dCBzd2l0Y2guCisgKiBNZWFud2hpbGUsIChlZykgaWYgYW4gaW50ZXJydXB0IGNvbWVzIGluIG9uIG9uZSBvZiB0aG9zZSBvdGhlciBDUFVzCisgKiB3aGljaCByZXF1aXJlcyB0aGUgbmV3IGlvcmVtYXAnZCByZWdpb24gdG8gYmUgcmVmZXJlbmNlZCwgdGhlIENQVSB3aWxsCisgKiByZWZlcmVuY2UgdGhlIF9vbGRfIHJlZ2lvbi4KKyAqCisgKiBOb3RlIHRoYXQgZ2V0X3ZtX2FyZWEoKSBhbGxvY2F0ZXMgYSBndWFyZCA0SyBwYWdlLCBzbyB3ZSBuZWVkIHRvIG1hc2sKKyAqIHRoZSBzaXplIGJhY2sgdG8gMU1CIGFsaWduZWQgb3Igd2Ugd2lsbCBvdmVyZmxvdyBpbiB0aGUgbG9vcCBiZWxvdy4KKyAqLworc3RhdGljIHZvaWQgdW5tYXBfYXJlYV9zZWN0aW9ucyh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSB2aXJ0LCBlbmQgPSB2aXJ0ICsgKHNpemUgJiB+U1pfMU0pOworCXBnZF90ICpwZ2Q7CisKKwlmbHVzaF9jYWNoZV92dW5tYXAoYWRkciwgZW5kKTsKKwlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisJZG8geworCQlwbWRfdCBwbWQsICpwbWRwID0gcG1kX29mZnNldChwZ2QsIGFkZHIpOworCisJCXBtZCA9ICpwbWRwOworCQlpZiAoIXBtZF9ub25lKHBtZCkpIHsKKwkJCS8qCisJCQkgKiBDbGVhciB0aGUgUE1EIGZyb20gdGhlIHBhZ2UgdGFibGUsIGFuZAorCQkJICogaW5jcmVtZW50IHRoZSBrdm0gc2VxdWVuY2Ugc28gb3RoZXJzCisJCQkgKiBub3RpY2UgdGhpcyBjaGFuZ2UuCisJCQkgKgorCQkJICogTm90ZTogdGhpcyBpcyBzdGlsbCByYWN5IG9uIFNNUCBtYWNoaW5lcy4KKwkJCSAqLworCQkJcG1kX2NsZWFyKHBtZHApOworCQkJaW5pdF9tbS5jb250ZXh0Lmt2bV9zZXErKzsKKworCQkJLyoKKwkJCSAqIEZyZWUgdGhlIHBhZ2UgdGFibGUsIGlmIHRoZXJlIHdhcyBvbmUuCisJCQkgKi8KKwkJCWlmICgocG1kX3ZhbChwbWQpICYgUE1EX1RZUEVfTUFTSykgPT0gUE1EX1RZUEVfVEFCTEUpCisJCQkJcHRlX2ZyZWVfa2VybmVsKHBtZF9wYWdlX2tlcm5lbChwbWQpKTsKKwkJfQorCisJCWFkZHIgKz0gUEdESVJfU0laRTsKKwkJcGdkKys7CisJfSB3aGlsZSAoYWRkciA8IGVuZCk7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRoZSBhY3RpdmVfbW0gaXMgdXAgdG8gZGF0ZSAtIHdlIHdhbnQgdG8KKwkgKiBjYXRjaCBhbnkgdXNlLWFmdGVyLWlvdW5tYXAgY2FzZXMuCisJICovCisJaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbS0+Y29udGV4dC5rdm1fc2VxICE9IGluaXRfbW0uY29udGV4dC5rdm1fc2VxKQorCQlfX2NoZWNrX2t2bV9zZXEoY3VycmVudC0+YWN0aXZlX21tKTsKKworCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodmlydCwgZW5kKTsKK30KKworc3RhdGljIGludAorcmVtYXBfYXJlYV9zZWN0aW9ucyh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgcHJvdCwgYWRkciA9IHZpcnQsIGVuZCA9IHZpcnQgKyBzaXplOworCXBnZF90ICpwZ2Q7CisKKwkvKgorCSAqIFJlbW92ZSBhbmQgZnJlZSBhbnkgUFRFLWJhc2VkIG1hcHBpbmcsIGFuZAorCSAqIHN5bmMgdGhlIGN1cnJlbnQga2VybmVsIG1hcHBpbmcuCisJICovCisJdW5tYXBfYXJlYV9zZWN0aW9ucyh2aXJ0LCBzaXplKTsKKworCXByb3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfRE9NQUlOKERPTUFJTl9JTykgfAorCSAgICAgICAoZmxhZ3MgJiAoTF9QVEVfQ0FDSEVBQkxFIHwgTF9QVEVfQlVGRkVSQUJMRSkpOworCisJLyoKKwkgKiBBUk12NiBhbmQgYWJvdmUgbmVlZCBYTiBzZXQgdG8gcHJldmVudCBzcGVjdWxhdGl2ZSBwcmVmZXRjaGVzCisJICogaGl0dGluZyBJTy4KKwkgKi8KKwlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2KQorCQlwcm90IHw9IFBNRF9TRUNUX1hOOworCisJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOworCWRvIHsKKwkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyKTsKKworCQlwbWRbMF0gPSBfX3BtZChfX3Bmbl90b19waHlzKHBmbikgfCBwcm90KTsKKwkJcGZuICs9IFNaXzFNID4+IFBBR0VfU0hJRlQ7CisJCXBtZFsxXSA9IF9fcG1kKF9fcGZuX3RvX3BoeXMocGZuKSB8IHByb3QpOworCQlwZm4gKz0gU1pfMU0gPj4gUEFHRV9TSElGVDsKKwkJZmx1c2hfcG1kX2VudHJ5KHBtZCk7CisKKwkJYWRkciArPSBQR0RJUl9TSVpFOworCQlwZ2QrKzsKKwl9IHdoaWxlIChhZGRyIDwgZW5kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZW1hcF9hcmVhX3N1cGVyc2VjdGlvbnModW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBmbiwKKwkJCSB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBwcm90LCBhZGRyID0gdmlydCwgZW5kID0gdmlydCArIHNpemU7CisJcGdkX3QgKnBnZDsKKworCS8qCisJICogUmVtb3ZlIGFuZCBmcmVlIGFueSBQVEUtYmFzZWQgbWFwcGluZywgYW5kCisJICogc3luYyB0aGUgY3VycmVudCBrZXJuZWwgbWFwcGluZy4KKwkgKi8KKwl1bm1hcF9hcmVhX3NlY3Rpb25zKHZpcnQsIHNpemUpOworCisJcHJvdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9TVVBFUiB8IFBNRF9TRUNUX0FQX1dSSVRFIHwKKwkJCVBNRF9ET01BSU4oRE9NQUlOX0lPKSB8CisJCQkoZmxhZ3MgJiAoTF9QVEVfQ0FDSEVBQkxFIHwgTF9QVEVfQlVGRkVSQUJMRSkpOworCisJLyoKKwkgKiBBUk12NiBhbmQgYWJvdmUgbmVlZCBYTiBzZXQgdG8gcHJldmVudCBzcGVjdWxhdGl2ZSBwcmVmZXRjaGVzCisJICogaGl0dGluZyBJTy4KKwkgKi8KKwlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2KQorCQlwcm90IHw9IFBNRF9TRUNUX1hOOworCisJcGdkID0gcGdkX29mZnNldF9rKHZpcnQpOworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBzdXBlcl9wbWRfdmFsLCBpOworCisJCXN1cGVyX3BtZF92YWwgPSBfX3Bmbl90b19waHlzKHBmbikgfCBwcm90OworCQlzdXBlcl9wbWRfdmFsIHw9ICgocGZuID4+ICgzMiAtIFBBR0VfU0hJRlQpKSAmIDB4ZikgPDwgMjA7CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyKTsKKworCQkJcG1kWzBdID0gX19wbWQoc3VwZXJfcG1kX3ZhbCk7CisJCQlwbWRbMV0gPSBfX3BtZChzdXBlcl9wbWRfdmFsKTsKKwkJCWZsdXNoX3BtZF9lbnRyeShwbWQpOworCisJCQlhZGRyICs9IFBHRElSX1NJWkU7CisJCQlwZ2QrKzsKKwkJfQorCisJCXBmbiArPSBTVVBFUlNFQ1RJT05fU0laRSA+PiBQQUdFX1NISUZUOworCX0gd2hpbGUgKGFkZHIgPCBlbmQpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCiAvKgogICogUmVtYXAgYW4gYXJiaXRyYXJ5IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIHZpcnR1YWwKICAqIGFkZHJlc3Mgc3BhY2UuIE5lZWRlZCB3aGVuIHRoZSBrZXJuZWwgd2FudHMgdG8gYWNjZXNzIGhpZ2ggYWRkcmVzc2VzCkBAIC0xMzMsMTggKzMwMCw0MiBAQAogX19pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAogCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAgCXN0cnVjdCB2bV9zdHJ1Y3QgKiBhcmVhOworCXVuc2lnbmVkIGludCBjciA9IGdldF9jcigpOworCisJLyoKKwkgKiBIaWdoIG1hcHBpbmdzIG11c3QgYmUgc3VwZXJzZWN0aW9uIGFsaWduZWQKKwkgKi8KKwlpZiAocGZuID49IDB4MTAwMDAwICYmIChfX3Bmbl90b19waHlzKHBmbikgJiB+U1VQRVJTRUNUSU9OX01BU0spKQorCQlyZXR1cm4gTlVMTDsKIAogIAlhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7CiAgCWlmICghYXJlYSkKICAJCXJldHVybiBOVUxMOwogIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKLSAJaWYgKHJlbWFwX2FyZWFfcGFnZXMoYWRkciwgcGZuLCBzaXplLCBmbGFncykpIHsKKworI2lmbmRlZiBDT05GSUdfU01QCisJaWYgKCgoKGNwdV9hcmNoaXRlY3R1cmUoKSA+PSBDUFVfQVJDSF9BUk12NikgJiYgKGNyICYgQ1JfWFApKSB8fAorCSAgICAgICBjcHVfaXNfeHNjMygpKSAmJgorCSAgICAgICAhKChfX3Bmbl90b19waHlzKHBmbikgfCBzaXplIHwgYWRkcikgJiB+U1VQRVJTRUNUSU9OX01BU0spKSB7CisJCWFyZWEtPmZsYWdzIHw9IFZNX0FSTV9TRUNUSU9OX01BUFBJTkc7CisJCWVyciA9IHJlbWFwX2FyZWFfc3VwZXJzZWN0aW9ucyhhZGRyLCBwZm4sIHNpemUsIGZsYWdzKTsKKwl9IGVsc2UgaWYgKCEoKF9fcGZuX3RvX3BoeXMocGZuKSB8IHNpemUgfCBhZGRyKSAmIH5QTURfTUFTSykpIHsKKwkJYXJlYS0+ZmxhZ3MgfD0gVk1fQVJNX1NFQ1RJT05fTUFQUElORzsKKwkJZXJyID0gcmVtYXBfYXJlYV9zZWN0aW9ucyhhZGRyLCBwZm4sIHNpemUsIGZsYWdzKTsKKwl9IGVsc2UKKyNlbmRpZgorCQllcnIgPSByZW1hcF9hcmVhX3BhZ2VzKGFkZHIsIHBmbiwgc2l6ZSwgZmxhZ3MpOworCisJaWYgKGVycikgewogIAkJdnVubWFwKCh2b2lkICopYWRkcik7CiAgCQlyZXR1cm4gTlVMTDsKICAJfQotIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKKworCWZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgYWRkciArIHNpemUpOworCXJldHVybiAodm9pZCBfX2lvbWVtICopIChvZmZzZXQgKyBhZGRyKTsKIH0KIEVYUE9SVF9TWU1CT0woX19pb3JlbWFwX3Bmbik7CiAKQEAgLTE3Myw1MyArMzY0LDM0IEBACiAKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKLQl2dW5tYXAoKHZvaWQgKikoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcpYWRkcikpOworCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wOworCXVuc2lnbmVkIGludCBzZWN0aW9uX21hcHBpbmcgPSAwOworCisJYWRkciA9ICh2b2lkIF9faW9tZW0gKikoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcpYWRkcik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBzZWN0aW9uIGJhc2VkIG1hcHBpbmcgd2UgbmVlZCB0byBoYW5kbGUgaXQKKwkgKiBzcGVjaWFsbHkgYXMgdGhlIFZNIHN1YnlzeXN0ZW0gZG9lcyBub3Qga25vdyBob3cgdG8gaGFuZGxlCisJICogc3VjaCBhIGJlYXN0LiBXZSBuZWVkIHRoZSBsb2NrIGhlcmUgYi9jIHdlIG5lZWQgdG8gY2xlYXIKKwkgKiBhbGwgdGhlIG1hcHBpbmdzIGJlZm9yZSB0aGUgYXJlYSBjYW4gYmUgcmVjbGFpbWVkCisJICogYnkgc29tZW9uZSBlbHNlLgorCSAqLworCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwlmb3IgKHAgPSAmdm1saXN0IDsgKHRtcCA9ICpwKSA7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmKCh0bXAtPmZsYWdzICYgVk1fSU9SRU1BUCkgJiYgKHRtcC0+YWRkciA9PSBhZGRyKSkgeworCQkJaWYgKHRtcC0+ZmxhZ3MgJiBWTV9BUk1fU0VDVElPTl9NQVBQSU5HKSB7CisJCQkJKnAgPSB0bXAtPm5leHQ7CisJCQkJdW5tYXBfYXJlYV9zZWN0aW9ucygodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIsCisJCQkJCQkgICAgdG1wLT5zaXplKTsKKwkJCQlrZnJlZSh0bXApOworCQkJCXNlY3Rpb25fbWFwcGluZyA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKKworCWlmICghc2VjdGlvbl9tYXBwaW5nKQorCQl2dW5tYXAoYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7Ci0KLSNpZmRlZiBfX2lvCi12b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpCi17Ci0JcmV0dXJuIF9faW8ocG9ydCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlvcG9ydF9tYXApOwotCi12b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGlvcG9ydF91bm1hcCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19QQ0kKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7Ci0JdW5zaWduZWQgbG9uZyBsZW4gICA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiYXIpOwotCi0JaWYgKCFsZW4gfHwgIXN0YXJ0KQotCQlyZXR1cm4gTlVMTDsKLQlpZiAobWF4bGVuICYmIGxlbiA+IG1heGxlbikKLQkJbGVuID0gbWF4bGVuOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCXJldHVybiBpb3BvcnRfbWFwKHN0YXJ0LCBsZW4pOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQotCQkJcmV0dXJuIGlvcmVtYXAoc3RhcnQsIGxlbik7Ci0JCXJldHVybiBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChwY2lfaW9tYXApOwotCi12b2lkIHBjaV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpYWRkciA+PSBWTUFMTE9DX1NUQVJUICYmCi0JICAgICh1bnNpZ25lZCBsb25nKWFkZHIgPCBWTUFMTE9DX0VORCkKLQkJaW91bm1hcChhZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2lvdW5tYXApOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbS1hcm12LmMgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKaW5kZXggOTUyNzNkZS4uMzg3NjlmNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLWFybXYuYworKysgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKQEAgLTksNyArOSw2IEBACiAgKgogICogIFBhZ2UgdGFibGUgc2x1ZGdlIGZvciBBUk0gdjMgYW5kIHY0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMjcsNyArMjI2LDcgQEAKIAogCXB0ZSA9IHBtZF9wYWdlKCpwbWQpOwogCXBtZF9jbGVhcihwbWQpOwotCWRlY19wYWdlX3N0YXRlKG5yX3BhZ2VfdGFibGVfcGFnZXMpOworCWRlY196b25lX3BhZ2Vfc3RhdGUodmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nICopcGdkKSwgTlJfUEFHRVRBQkxFKTsKIAlwdGVfbG9ja19kZWluaXQocHRlKTsKIAlwdGVfZnJlZShwdGUpOwogCXBtZF9mcmVlKHBtZCk7CkBAIC0zMDMsMTYgKzMwMiwxNiBAQAogCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAogCQkJCUxfUFRFX1dSSVRFLAogCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCi0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfVU5DQUNIRUQgfAorCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9CSVQ0IHwgUE1EX1NFQ1RfVU5DQUNIRUQgfAogCQkJCVBNRF9TRUNUX0FQX1dSSVRFLAogCQkuZG9tYWluICAgID0gRE9NQUlOX0lPLAogCX0sCiAJW01UX0NBQ0hFQ0xFQU5dID0gewotCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCwKKwkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfQklUNCwKIAkJLmRvbWFpbiAgICA9IERPTUFJTl9LRVJORUwsCiAJfSwKIAlbTVRfTUlOSUNMRUFOXSA9IHsKLQkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9NSU5JQ0FDSEUsCisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9NSU5JQ0FDSEUsCiAJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAogCX0sCiAJW01UX0xPV19WRUNUT1JTXSA9IHsKQEAgLTMyOCwyNSArMzI3LDI1IEBACiAJCS5kb21haW4gICAgPSBET01BSU5fVVNFUiwKIAl9LAogCVtNVF9NRU1PUlldID0gewotCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFLAorCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9CSVQ0IHwgUE1EX1NFQ1RfQVBfV1JJVEUsCiAJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAogCX0sCiAJW01UX1JPTV0gPSB7Ci0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNULAorCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9CSVQ0LAogCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKIAl9LAogCVtNVF9JWFAyMDAwX0RFVklDRV0gPSB7IC8qIElYUDI0MDAgcmVxdWlyZXMgWENCPTEwMSBmb3Igb24tY2hpcCBJL08gKi8KIAkJLnByb3RfcHRlICA9IExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwKIAkJCQlMX1BURV9XUklURSwKIAkJLnByb3RfbDEgICA9IFBNRF9UWVBFX1RBQkxFLAotCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX1VOQ0FDSEVEIHwKKwkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfQklUNCB8IFBNRF9TRUNUX1VOQ0FDSEVEIHwKIAkJCQlQTURfU0VDVF9BUF9XUklURSB8IFBNRF9TRUNUX0JVRkZFUkFCTEUgfAogCQkJCVBNRF9TRUNUX1RFWCgxKSwKIAkJLmRvbWFpbiAgICA9IERPTUFJTl9JTywKIAl9LAogCVtNVF9OT05TSEFSRURfREVWSUNFXSA9IHsKIAkJLnByb3RfbDEgICA9IFBNRF9UWVBFX1RBQkxFLAotCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX05PTlNIQVJFRF9ERVYgfAorCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9CSVQ0IHwgUE1EX1NFQ1RfTk9OU0hBUkVEX0RFViB8CiAJCQkJUE1EX1NFQ1RfQVBfV1JJVEUsCiAJCS5kb21haW4gICAgPSBET01BSU5fSU8sCiAJfQpAQCAtMzc2LDE0ICszNzUsMjEgQEAKIAkJZWNjX21hc2sgPSAwOwogCX0KIAotCWlmIChjcHVfYXJjaCA8PSBDUFVfQVJDSF9BUk12NVRFSiAmJiAhY3B1X2lzX3hzY2FsZSgpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1lbV90eXBlcyk7IGkrKykgeworCS8qCisJICogWHNjYWxlIG11c3Qgbm90IGhhdmUgUE1EIGJpdCA0IHNldCBmb3Igc2VjdGlvbiBtYXBwaW5ncy4KKwkgKi8KKwlpZiAoY3B1X2lzX3hzY2FsZSgpKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1fdHlwZXMpOyBpKyspCisJCQltZW1fdHlwZXNbaV0ucHJvdF9zZWN0ICY9IH5QTURfQklUNDsKKworCS8qCisJICogQVJNdjUgYW5kIGxvd2VyLCBleGNsdWRpbmcgWHNjYWxlLCBiaXQgNCBtdXN0IGJlIHNldCBmb3IKKwkgKiBwYWdlIHRhYmxlcy4KKwkgKi8KKwlpZiAoY3B1X2FyY2ggPCBDUFVfQVJDSF9BUk12NiAmJiAhY3B1X2lzX3hzY2FsZSgpKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1fdHlwZXMpOyBpKyspCiAJCQlpZiAobWVtX3R5cGVzW2ldLnByb3RfbDEpCiAJCQkJbWVtX3R5cGVzW2ldLnByb3RfbDEgfD0gUE1EX0JJVDQ7Ci0JCQlpZiAobWVtX3R5cGVzW2ldLnByb3Rfc2VjdCkKLQkJCQltZW1fdHlwZXNbaV0ucHJvdF9zZWN0IHw9IFBNRF9CSVQ0OwotCQl9Ci0JfQogCiAJY3AgPSAmY2FjaGVfcG9saWNpZXNbY2FjaGVwb2xpY3ldOwogCWtlcm5fcGdwcm90ID0gdXNlcl9wZ3Byb3QgPSBjcC0+cHRlOwpAQCAtNDA3LDggKzQxMyw4IEBACiAJCSAqIGJpdCA0IGJlY29tZXMgWE4gd2hpY2ggd2UgbXVzdCBjbGVhciBmb3IgdGhlCiAJCSAqIGtlcm5lbCBtZW1vcnkgbWFwcGluZy4KIAkJICovCi0JCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCAmPSB+UE1EX0JJVDQ7Ci0JCW1lbV90eXBlc1tNVF9ST01dLnByb3Rfc2VjdCAmPSB+UE1EX0JJVDQ7CisJCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCAmPSB+UE1EX1NFQ1RfWE47CisJCW1lbV90eXBlc1tNVF9ST01dLnByb3Rfc2VjdCAmPSB+UE1EX1NFQ1RfWE47CiAKIAkJLyoKIAkJICogTWFyayBjYWNoZSBjbGVhbiBhcmVhcyBhbmQgWElQIFJPTSByZWFkIG9ubHkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCAzZGU3Zjg0Li4yOWU1NDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9tbS9tbWFwLmMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9ub21tdS5jIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY0ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL25vbW11LmMKKyAqCisgKiBBUk0gdUNMaW51eCBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCit2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZShwYWdlX2FkZHJlc3MocGFnZSkpOworfQorRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfcGFnZSk7CisKK3ZvaWQgX19pb21lbSAqX19pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWYgKHBmbiA+PSAoMHgxMDAwMDAwMDBVTEwgPj4gUEFHRV9TSElGVCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiAodm9pZCBfX2lvbWVtICopIChvZmZzZXQgKyAocGZuIDw8IFBBR0VfU0hJRlQpKTsKK30KK0VYUE9SVF9TWU1CT0woX19pb3JlbWFwX3Bmbik7CisKK3ZvaWQgX19pb21lbSAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwaHlzX2FkZHI7Cit9CitFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CisKK3ZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKK30KK0VYUE9SVF9TWU1CT0woX19pb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggOTU5NTg4OC4uNzAwMjk3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKQEAgLTMsNiArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMCBBUk0gTGltaXRlZAogICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqICBoYWNrZWQgZm9yIG5vbi1wYWdlZC1NTSBieSBIeW9rIFMuIENob2ksIDIwMDMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNSw3ICsyNiw2IEBACiAgKiAgQ09ORklHX0NQVV9BUk0xMDIwX0NQVV9JRExFIC0+IG5vaGx0CiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KQEAgLTEwMSw3ICsxMDEsOSBAQAogCW1vdglpcCwgIzAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcwogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKIAltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJaXAsIGlwLCAjMHgwMDBmIAkJQCAuLi4uLi4uLi4uLi53Y2FtCiAJYmljCWlwLCBpcCwgIzB4MTEwMCAJCUAgLi4uaS4uLnMuLi4uLi4uLgpAQCAtMzU5LDYgKzM2MSw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X2FybTEwMjBfc3dpdGNoX21tKQorI2lmZGVmIENPTkZJR19NTVUKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CiAJbW92CXIxLCAjMHhGCQkJQCAxNiBzZWdtZW50cwpAQCAtMzgzLDYgKzM4Niw3IEBACiAJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCiAJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAJbW92CXBjLCBscgogICAgICAgICAKIC8qCkBAIC0zOTIsNiArMzk2LDcgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfYXJtMTAyMF9zZXRfcHRlKQorI2lmZGVmIENPTkZJR19NTVUKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKIAllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQpAQCAtNDIxLDYgKzQyNiw3IEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAJbW92CXBjLCBscgogCiAJX19JTklUCkBAIC00MzAsMTIgKzQzNiwxNSBAQAogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMgb24gdjQKKyNlbmRpZgorCisJYWRyCXI1LCBhcm0xMDIwX2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAotCWxkcglyNSwgYXJtMTAyMF9jcjFfY2xlYXIKIAliaWMJcjAsIHIwLCByNQotCWxkcglyNSwgYXJtMTAyMF9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KIAlvcnIJcjAsIHIwLCAjMHg0MDAwIAkJQCAuUi4uIC4uLi4gLi4uLiAuLi4uCiAjZW5kaWYKQEAgLTQ0NywxMiArNDU2LDkgQEAKIAkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCiAJICogLjAxMSAxMDAxIC4uMTEgMDEwMQogCSAqLwotCS50eXBlCWFybTEwMjBfY3IxX2NsZWFyLCAjb2JqZWN0Ci0JLnR5cGUJYXJtMTAyMF9jcjFfc2V0LCAjb2JqZWN0Ci1hcm0xMDIwX2NyMV9jbGVhcjoKLQkud29yZAkweDU5M2YKLWFybTEwMjBfY3IxX3NldDoKLQkud29yZAkweDM5MzUKKwkudHlwZQlhcm0xMDIwX2NydmFsLCAjb2JqZWN0Cithcm0xMDIwX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDAwMDU5M2YsIG1tdXNldD0weDAwMDAzOTM1LCB1Y3NldD0weDAwMDAxOTMwCiAKIAlfX0lOSVREQVRBCiAKQEAgLTUxOCw2ICs1MjQsOSBAQAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX2FybTEwMjBfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggYmU2ZDA4MS4uMGMzM2E1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEFSTSBMaW1pdGVkCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICogIGhhY2tlZCBmb3Igbm9uLXBhZ2VkLU1NIGJ5IEh5b2sgUy4gQ2hvaSwgMjAwMy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI1LDcgKzI2LDYgQEAKICAqICBDT05GSUdfQ1BVX0FSTTEwMjBfQ1BVX0lETEUgLT4gbm9obHQKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgpAQCAtMTAxLDcgKzEwMSw5IEBACiAJbW92CWlwLCAjMAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgogCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlpcCwgaXAsICMweDAwMGYgCQlAIC4uLi4uLi4uLi4uLndjYW0KIAliaWMJaXAsIGlwLCAjMHgxMTAwIAkJQCAuLi5pLi4ucy4uLi4uLi4uCkBAIC0zNDQsNiArMzQ2LDcgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfYXJtMTAyMGVfc3dpdGNoX21tKQorI2lmZGVmIENPTkZJR19NTVUKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CiAJbW92CXIxLCAjMHhGCQkJQCAxNiBzZWdtZW50cwpAQCAtMzY3LDYgKzM3MCw3IEBACiAJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCiAJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgogCW1vdglwYywgbHIKICAgICAgICAgCiAvKgpAQCAtMzc2LDYgKzM4MCw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X2FybTEwMjBlX3NldF9wdGUpCisjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCkBAIC00MDMsNiArNDA4LDcgQEAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAltb3YJcGMsIGxyCiAKIAlfX0lOSVQKQEAgLTQxMiwxMiArNDE4LDE0IEBACiAJbW92CXIwLCAjMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorI2VuZGlmCisJYWRyCXI1LCBhcm0xMDIwZV9jcnZhbAorCWxkbWlhCXI1LCB7cjUsIHI2fQogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKLQlsZHIJcjUsIGFybTEwMjBlX2NyMV9jbGVhcgogCWJpYwlyMCwgcjAsIHI1Ci0JbGRyCXI1LCBhcm0xMDIwZV9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KIAlvcnIJcjAsIHIwLCAjMHg0MDAwIAkJQCAuUi4uIC4uLi4gLi4uLiAuLi4uCiAjZW5kaWYKQEAgLTQyOSwxMiArNDM3LDkgQEAKIAkgKiAuUlZJIFpGUlMgQkxEUCBXQ0FNCiAJICogLjAxMSAxMDAxIC4uMTEgMDEwMQogCSAqLwotCS50eXBlCWFybTEwMjBlX2NyMV9jbGVhciwgI29iamVjdAotCS50eXBlCWFybTEwMjBlX2NyMV9zZXQsICNvYmplY3QKLWFybTEwMjBlX2NyMV9jbGVhcjoKLQkud29yZAkweDVmM2YKLWFybTEwMjBlX2NyMV9zZXQ6Ci0JLndvcmQJMHgzOTM1CisJLnR5cGUJYXJtMTAyMGVfY3J2YWwsICNvYmplY3QKK2FybTEwMjBlX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDAwMDdmM2YsIG1tdXNldD0weDAwMDAzOTM1LCB1Y3NldD0weDAwMDAxOTMwCiAKIAlfX0lOSVREQVRBCiAKQEAgLTQ2OCwyNSArNDczLDcgQEAKIAogCS50eXBlCWNwdV9hcm0xMDIwZV9uYW1lLCAjb2JqZWN0CiBjcHVfYXJtMTAyMGVfbmFtZToKLQkuYXNjaWkJIkFSTTEwMjBFIgotI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCi0JLmFzY2lpCSJpIgotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQkuYXNjaWkJImQiCi0jaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICi0JLmFzY2lpCSIod3QpIgotI2Vsc2UKLQkuYXNjaWkJIih3YikiCi0jZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUKLQkuYXNjaWkJIkIiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCi0JLmFzY2lpCSJSUiIKLSNlbmRpZgotCS5hc2NpaQkiXDAiCisJLmFzY2l6CSJBUk0xMDIwRSIKIAkuc2l6ZQljcHVfYXJtMTAyMGVfbmFtZSwgLiAtIGNwdV9hcm0xMDIwZV9uYW1lCiAKIAkuYWxpZ24KQEAgLTUwMSw2ICs0ODgsMTAgQEAKIAkJUE1EX0JJVDQgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKIAliCV9fYXJtMTAyMGVfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCmluZGV4IGY3Nzg1NDUuLjU2NmE1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCkBAIC0zLDYgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgQVJNIExpbWl0ZWQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKiAgaGFja2VkIGZvciBub24tcGFnZWQtTU0gYnkgSHlvayBTLiBDaG9pLCAyMDAzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTQsNyArMTUsNiBAQAogICogZnVuY3Rpb25zIG9uIHRoZSBBUk0xMDIyRS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgpAQCAtOTAsNyArOTAsOSBAQAogCW1vdglpcCwgIzAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcwogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKIAltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJaXAsIGlwLCAjMHgwMDBmIAkJQCAuLi4uLi4uLi4uLi53Y2FtCiAJYmljCWlwLCBpcCwgIzB4MTEwMCAJCUAgLi4uaS4uLnMuLi4uLi4uLgpAQCAtMzMzLDYgKzMzNSw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X2FybTEwMjJfc3dpdGNoX21tKQorI2lmZGVmIENPTkZJR19NTVUKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCW1vdglyMSwgIyhDQUNIRV9EU0VHTUVOVFMgLSAxKSA8PCA1CUAgMTYgc2VnbWVudHMKIDE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKQEAgLTM0OSw2ICszNTIsNyBAQAogCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgogCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKIAltb3YJcGMsIGxyCiAgICAgICAgIAogLyoKQEAgLTM1OCw2ICszNjIsNyBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9hcm0xMDIyX3NldF9wdGUpCisjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCkBAIC0zODUsNiArMzkwLDcgQEAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAltb3YJcGMsIGxyCiAKIAlfX0lOSVQKQEAgLTM5NCwxMiArNDAwLDE0IEBACiAJbW92CXIwLCAjMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorI2VuZGlmCisJYWRyCXI1LCBhcm0xMDIyX2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAotCWxkcglyNSwgYXJtMTAyMl9jcjFfY2xlYXIKIAliaWMJcjAsIHIwLCByNQotCWxkcglyNSwgYXJtMTAyMl9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KIAlvcnIJcjAsIHIwLCAjMHg0MDAwIAkJQCAuUi4uLi4uLi4uLi4uLi4uCiAjZW5kaWYKQEAgLTQxMiwxMiArNDIwLDkgQEAKIAkgKiAuMDExIDEwMDEgLi4xMSAwMTAxCiAJICogCiAJICovCi0JLnR5cGUJYXJtMTAyMl9jcjFfY2xlYXIsICNvYmplY3QKLQkudHlwZQlhcm0xMDIyX2NyMV9zZXQsICNvYmplY3QKLWFybTEwMjJfY3IxX2NsZWFyOgotCS53b3JkCTB4N2YzZgotYXJtMTAyMl9jcjFfc2V0OgotCS53b3JkCTB4MzkzNQorCS50eXBlCWFybTEwMjJfY3J2YWwsICNvYmplY3QKK2FybTEwMjJfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMDAwN2YzZiwgbW11c2V0PTB4MDAwMDM5MzUsIHVjc2V0PTB4MDAwMDE5MzAKIAogCV9fSU5JVERBVEEKIApAQCAtNDUxLDI1ICs0NTYsNyBAQAogCiAJLnR5cGUJY3B1X2FybTEwMjJfbmFtZSwgI29iamVjdAogY3B1X2FybTEwMjJfbmFtZToKLQkuYXNjaWkJImFybTEwMjIiCi0jaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKLQkuYXNjaWkJImkiCi0jZW5kaWYKLSNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQotCS5hc2NpaQkiZCIKLSNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKLQkuYXNjaWkJIih3dCkiCi0jZWxzZQotCS5hc2NpaQkiKHdiKSIKLSNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRQotCS5hc2NpaQkiQiIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KLQkuYXNjaWkJIlJSIgotI2VuZGlmCi0JLmFzY2lpCSJcMCIKKwkuYXNjaXoJIkFSTTEwMjIiCiAJLnNpemUJY3B1X2FybTEwMjJfbmFtZSwgLiAtIGNwdV9hcm0xMDIyX25hbWUKIAogCS5hbGlnbgpAQCAtNDg0LDYgKzQ3MSwxMCBAQAogCQlQTURfQklUNCB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX19hcm0xMDIyX3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCAxNDhjMTExLi42ZWE3NjMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEFSTSBMaW1pdGVkCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICogIGhhY2tlZCBmb3Igbm9uLXBhZ2VkLU1NIGJ5IEh5b2sgUy4gQ2hvaSwgMjAwMy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE0LDcgKzE1LDYgQEAKICAqIGZ1bmN0aW9ucyBvbiB0aGUgQVJNMTAyNkVKLVMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KQEAgLTkwLDcgKzkwLDkgQEAKIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworI2VuZGlmCiAJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCWlwLCBpcCwgIzB4MDAwZiAJCUAgLi4uLi4uLi4uLi4ud2NhbQogCWJpYwlpcCwgaXAsICMweDExMDAgCQlAIC4uLmkuLi5zLi4uLi4uLi4KQEAgLTMyNyw2ICszMjksNyBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9hcm0xMDI2X3N3aXRjaF9tbSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJbW92CXIxLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAxOgltcmMJcDE1LCAwLCByMTUsIGM3LCBjMTQsIDMJCUAgdGVzdCwgY2xlYW4sIGludmFsaWRhdGUKQEAgLTMzOCw2ICszNDEsNyBAQAogCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgogCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKIAltb3YJcGMsIGxyCiAgICAgICAgIAogLyoKQEAgLTM0Nyw2ICszNTEsNyBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9hcm0xMDI2X3NldF9wdGUpCisjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCkBAIC0zNzQsNiArMzc5LDcgQEAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAltb3YJcGMsIGxyCiAKIApAQCAtMzg0LDE3ICszOTAsMTkgQEAKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CiAJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJbW92CXIwLCAjNAkJCQlAIGV4cGxpY2l0bHkgZGlzYWJsZSB3cml0ZWJhY2sKIAltY3IJcDE1LCA3LCByMCwgYzE1LCBjMCwgMAogI2VuZGlmCisJYWRyCXI1LCBhcm0xMDI2X2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAotCWxkcglyNSwgYXJtMTAyNl9jcjFfY2xlYXIKIAliaWMJcjAsIHIwLCByNQotCWxkcglyNSwgYXJtMTAyNl9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KIAlvcnIJcjAsIHIwLCAjMHg0MDAwIAkJQCAuUi4uIC4uLi4gLi4uLiAuLi4uCiAjZW5kaWYKQEAgLTQwNywxMiArNDE1LDkgQEAKIAkgKiAuMDExIDEwMDEgLi4xMSAwMTAxCiAJICogCiAJICovCi0JLnR5cGUJYXJtMTAyNl9jcjFfY2xlYXIsICNvYmplY3QKLQkudHlwZQlhcm0xMDI2X2NyMV9zZXQsICNvYmplY3QKLWFybTEwMjZfY3IxX2NsZWFyOgotCS53b3JkCTB4N2YzZgotYXJtMTAyNl9jcjFfc2V0OgotCS53b3JkCTB4MzkzNQorCS50eXBlCWFybTEwMjZfY3J2YWwsICNvYmplY3QKK2FybTEwMjZfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMDAwN2YzZiwgbW11c2V0PTB4MDAwMDM5MzUsIHVjc2V0PTB4MDAwMDE5MzQKIAogCV9fSU5JVERBVEEKIApAQCAtNDQ3LDI1ICs0NTIsNyBAQAogCiAJLnR5cGUJY3B1X2FybTEwMjZfbmFtZSwgI29iamVjdAogY3B1X2FybTEwMjZfbmFtZToKLQkuYXNjaWkJIkFSTTEwMjZFSi1TIgotI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCi0JLmFzY2lpCSJpIgotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQkuYXNjaWkJImQiCi0jaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICi0JLmFzY2lpCSIod3QpIgotI2Vsc2UKLQkuYXNjaWkJIih3YikiCi0jZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUKLQkuYXNjaWkJIkIiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCi0JLmFzY2lpCSJSUiIKLSNlbmRpZgotCS5hc2NpaQkiXDAiCisJLmFzY2l6CSJBUk0xMDI2RUotUyIKIAkuc2l6ZQljcHVfYXJtMTAyNl9uYW1lLCAuIC0gY3B1X2FybTEwMjZfbmFtZQogCiAJLmFsaWduCkBAIC00ODAsNiArNDY3LDEwIEBACiAJCVBNRF9CSVQ0IHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX2FybTEwMjZfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwppbmRleCA1NDAzNTliLi4wNDMyZTQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1hcm02LDcuUwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCBSdXNzZWxsIEtpbmcKKyAqICBoYWNrZWQgZm9yIG5vbi1wYWdlZC1NTSBieSBIeW9rIFMuIENob2ksIDIwMDMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xOTksMTAgKzIwMCwxMiBAQAogICovCiBFTlRSWShjcHVfYXJtNl9zd2l0Y2hfbW0pCiBFTlRSWShjcHVfYXJtN19zd2l0Y2hfbW0pCisjaWZkZWYgQ09ORklHX01NVQogCQltb3YJcjEsICMwCiAJCW1jcglwMTUsIDAsIHIxLCBjNywgYzAsIDAJCUAgZmx1c2ggY2FjaGUKIAkJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCB1cGRhdGUgcGFnZSB0YWJsZSBwdHIKIAkJbWNyCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBmbHVzaCBUTEJzCisjZW5kaWYKIAkJbW92CXBjLCBscgogCiAvKgpAQCAtMjE0LDYgKzIxNyw3IEBACiAJCS5hbGlnbgk1CiBFTlRSWShjcHVfYXJtNl9zZXRfcHRlKQogRU5UUlkoY3B1X2FybTdfc2V0X3B0ZSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCQllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQpAQCAtMjMyLDYgKzIzNiw3IEBACiAJCW1vdm5lCXIyLCAjMAogCiAJCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAkJbW92CXBjLCBscgogCiAvKgpAQCAtMjQzLDcgKzI0OCw5IEBACiBFTlRSWShjcHVfYXJtN19yZXNldCkKIAkJbW92CXIxLCAjMAogCQltY3IJcDE1LCAwLCByMSwgYzcsIGMwLCAwCQlAIGZsdXNoIGNhY2hlCisjaWZkZWYgQ09ORklHX01NVQogCQltY3IJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGZsdXNoIFRMQgorI2VuZGlmCiAJCW1vdglyMSwgIzB4MzAKIAkJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCB0dXJuIG9mZiBNTVUgZXRjCiAJCW1vdglwYywgcjAKQEAgLTI1MywxOSArMjYwLDI3IEBACiAJCS50eXBlCV9fYXJtNl9zZXR1cCwgI2Z1bmN0aW9uCiBfX2FybTZfc2V0dXA6CW1vdglyMCwgIzAKIAkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMAkJQCBmbHVzaCBjYWNoZXMgb24gdjMKKyNpZmRlZiBDT05GSUdfTU1VCiAJCW1jcglwMTUsIDAsIHIwLCBjNSwgYzAJCUAgZmx1c2ggVExCcyBvbiB2MwogCQltb3YJcjAsICMweDNkCQkJQCAuIC4uUlMgQkxEUCBXQ0FNCiAJCW9ycglyMCwgcjAsICMweDEwMAkJCUAgLiAuLjAxIDAwMTEgMTEwMQorI2Vsc2UKKwkJbW92CXIwLCAjMHgzYwkJCUAgLiAuLlJTIEJMRFAgV0NBLgorI2VuZGlmCiAJCW1vdglwYywgbHIKIAkJLnNpemUJX19hcm02X3NldHVwLCAuIC0gX19hcm02X3NldHVwCiAKIAkJLnR5cGUJX19hcm03X3NldHVwLCAjZnVuY3Rpb24KIF9fYXJtN19zZXR1cDoJbW92CXIwLCAjMAogCQltY3IJcDE1LCAwLCByMCwgYzcsIGMwCQlAIGZsdXNoIGNhY2hlcyBvbiB2MworI2lmZGVmIENPTkZJR19NTVUKIAkJbWNyCXAxNSwgMCwgcjAsIGM1LCBjMAkJQCBmbHVzaCBUTEJzIG9uIHYzCiAJCW1jcglwMTUsIDAsIHIwLCBjMywgYzAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCiAJCW1vdglyMCwgIzB4N2QJCQlAIC4gLi5SUyBCTERQIFdDQU0KIAkJb3JyCXIwLCByMCwgIzB4MTAwCQkJQCAuIC4uMDEgMDExMSAxMTAxCisjZWxzZQorCQltb3YJcjAsICMweDdjCQkJQCAuIC4uUlMgQkxEUCBXQ0EuCisjZW5kaWYKIAkJbW92CXBjLCBscgogCQkuc2l6ZQlfX2FybTdfc2V0dXAsIC4gLSBfX2FybTdfc2V0dXAKIApAQCAtMzQwLDYgKzM1NSwxMCBAQAogCQkubG9uZwkweDQxNTYwNjAwCiAJCS5sb25nCTB4ZmZmZmZmZjAKIAkJLmxvbmcJMHgwMDAwMGMxZQorCQkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCQlQTURfQklUNCB8IFwKKwkJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQkJUE1EX1NFQ1RfQVBfUkVBRAogCQliCV9fYXJtNl9zZXR1cAogCQkubG9uZwljcHVfYXJjaF9uYW1lCiAJCS5sb25nCWNwdV9lbGZfbmFtZQpAQCAtMzU2LDYgKzM3NSwxMCBAQAogCQkubG9uZwkweDQxNTYwNjEwCiAJCS5sb25nCTB4ZmZmZmZmZjAKIAkJLmxvbmcJMHgwMDAwMGMxZQorCQkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCQlQTURfQklUNCB8IFwKKwkJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQkJUE1EX1NFQ1RfQVBfUkVBRAogCQliCV9fYXJtNl9zZXR1cAogCQkubG9uZwljcHVfYXJjaF9uYW1lCiAJCS5sb25nCWNwdV9lbGZfbmFtZQpAQCAtMzcyLDYgKzM5NSwxMCBAQAogCQkubG9uZwkweDQxMDA3MDAwCiAJCS5sb25nCTB4ZmZmZmZmMDAKIAkJLmxvbmcJMHgwMDAwMGMxZQorCQkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCQlQTURfQklUNCB8IFwKKwkJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQkJUE1EX1NFQ1RfQVBfUkVBRAogCQliCV9fYXJtN19zZXR1cAogCQkubG9uZwljcHVfYXJjaF9uYW1lCiAJCS5sb25nCWNwdV9lbGZfbmFtZQpAQCAtMzkzLDYgKzQyMCwxMCBAQAogCQkJUE1EX0JJVDQgfCBcCiAJCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJCVBNRF9TRUNUX0FQX1JFQUQKKwkJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQkJUE1EX0JJVDQgfCBcCisJCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJCVBNRF9TRUNUX0FQX1JFQUQKIAkJYglfX2FybTdfc2V0dXAKIAkJLmxvbmcJY3B1X2FyY2hfbmFtZQogCQkubG9uZwljcHVfZWxmX25hbWUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCmluZGV4IDI2ZjAwZWUuLmMyZjA3MDViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTQsNiArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKICAqICAgICAgICAgICAgICAgICAgICAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEFSTSBMaW1pdGVkLCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqICBoYWNrZWQgZm9yIG5vbi1wYWdlZC1NTSBieSBIeW9rIFMuIENob2ksIDIwMDQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOSw2ICszMCw3IEBACiAgKgkJCW91dCBvZiAncHJvYy1hcm02LDcuUycgcGVyIFJNSyBkaXNjdXNzaW9uCiAgKiAgIDA3LTI1LTIwMDAgU0pICUFkZGVkIGlkbGUgZnVuY3Rpb24uCiAgKiAgIDA4LTI1LTIwMDAJREJTCVVwZGF0ZWQgZm9yIGludGVncmF0aW9uIG9mIEFSTSBMdGQgdmVyc2lvbi4KKyAqICAgMDQtMjAtMjAwNCBIU0MJbW9kaWZpZWQgZm9yIG5vbi1wYWdlZCBtZW1vcnkgbWFuYWdlbWVudCBtb2RlLgogICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTM5LDYgKzQxLDggQEAKICNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCiAvKgogICogRnVuY3Rpb246IGFybTcyMF9wcm9jX2luaXQgKHZvaWQpCiAgKgkgICA6IGFybTcyMF9wcm9jX2ZpbiAodm9pZCkKQEAgLTc1LDEwICs3OSwxMiBAQAogICoJICAgICB0aGUgbmV3LgogICovCiBFTlRSWShjcHVfYXJtNzIwX3N3aXRjaF9tbSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJCW1vdglyMSwgIzAKIAkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlCiAJCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgdXBkYXRlIHBhZ2UgdGFibGUgcHRyCiAJCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUAgZmx1c2ggVExCICh2NCkKKyNlbmRpZgogCQltb3YJcGMsIGxyCiAKIC8qCkBAIC04OSw2ICs5NSw3IEBACiAgKi8KIAkJLmFsaWduCTUKIEVOVFJZKGNwdV9hcm03MjBfc2V0X3B0ZSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCQllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQpAQCAtMTA3LDYgKzExNCw3IEBACiAJCW1vdm5lCXIyLCAjMAogCiAJCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorI2VuZGlmCiAJCW1vdglwYywgbHIKIAogLyoKQEAgLTExNyw3ICsxMjUsOSBAQAogRU5UUlkoY3B1X2FybTcyMF9yZXNldCkKIAkJbW92CWlwLCAjMAogCQltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgY2FjaGUKKyNpZmRlZiBDT05GSUdfTU1VCiAJCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgZmx1c2ggVExCICh2NCkKKyNlbmRpZgogCQltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGdldCBjdHJsIHJlZ2lzdGVyCiAJCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KIAkJYmljCWlwLCBpcCwgIzB4MjEwMAkJCUAgLi52Li4uLnMuLi4uLi4uLgpAQCAtMTMwLDcgKzE0MCw5IEBACiBfX2FybTcxMF9zZXR1cDoKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlcworI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCQlAIGZsdXNoIFRMQiAodjQpCisjZW5kaWYKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCiAJbGRyCXI1LCBhcm03MTBfY3IxX2NsZWFyCiAJYmljCXIwLCByMCwgcjUKQEAgLTE1NiwxMiArMTY4LDE0IEBACiBfX2FybTcyMF9zZXR1cDoKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlcworI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCQlAIGZsdXNoIFRMQiAodjQpCisjZW5kaWYKKwlhZHIJcjUsIGFybTcyMF9jcnZhbAorCWxkbWlhCXI1LCB7cjUsIHI2fQogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIKLQlsZHIJcjUsIGFybTcyMF9jcjFfY2xlYXIKIAliaWMJcjAsIHIwLCByNQotCWxkcglyNSwgYXJtNzIwX2NyMV9zZXQKLQlvcnIJcjAsIHIwLCByNQorCW9ycglyMCwgcjAsIHI2CiAJbW92CXBjLCBscgkJCQlAIF9fcmV0IChoZWFkLlMpCiAJLnNpemUJX19hcm03MjBfc2V0dXAsIC4gLSBfX2FybTcyMF9zZXR1cAogCkBAIC0xNzEsMTIgKzE4NSw5IEBACiAJICogLi4xLiAxMDAxIC4uMTEgMTEwMQogCSAqIAogCSAqLwotCS50eXBlCWFybTcyMF9jcjFfY2xlYXIsICNvYmplY3QKLQkudHlwZQlhcm03MjBfY3IxX3NldCwgI29iamVjdAotYXJtNzIwX2NyMV9jbGVhcjoKLQkud29yZAkweDJmM2YKLWFybTcyMF9jcjFfc2V0OgotCS53b3JkCTB4MjEzZAorCS50eXBlCWFybTcyMF9jcnZhbCwgI29iamVjdAorYXJtNzIwX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDAwMDJmM2YsIG1tdXNldD0weDAwMDAyMTNkLCB1Y3NldD0weDAwMDAwMTMwCiAKIAkJX19JTklUREFUQQogCkBAIC0yMzQsNiArMjQ1LDEwIEBACiAJCQlQTURfQklUNCB8IFwKIAkJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQkJUE1EX1NFQ1RfQVBfUkVBRAorCQkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCQlQTURfQklUNCB8IFwKKwkJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQkJUE1EX1NFQ1RfQVBfUkVBRAogCQliCV9fYXJtNzEwX3NldHVwCQkJCUAgY3B1X2ZsdXNoCiAJCS5sb25nCWNwdV9hcmNoX25hbWUJCQkJQCBhcmNoX25hbWUKIAkJLmxvbmcJY3B1X2VsZl9uYW1lCQkJCUAgZWxmX25hbWUKQEAgLTI1NSw2ICsyNzAsMTAgQEAKIAkJCVBNRF9CSVQ0IHwgXAogCQkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCQlQTURfU0VDVF9BUF9SRUFECisJCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJCVBNRF9CSVQ0IHwgXAorCQkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCQlQTURfU0VDVF9BUF9SRUFECiAJCWIJX19hcm03MjBfc2V0dXAJCQkJQCBjcHVfZmx1c2gKIAkJLmxvbmcJY3B1X2FyY2hfbmFtZQkJCQlAIGFyY2hfbmFtZQogCQkubG9uZwljcHVfZWxmX25hbWUJCQkJQCBlbGZfbmFtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggYTE3Zjc5ZS4uNGFkYjQ2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC0zLDYgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBBUk0gTGltaXRlZAogICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqICBoYWNrZWQgZm9yIG5vbi1wYWdlZC1NTSBieSBIeW9rIFMuIENob2ksIDIwMDMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNSw3ICsyNiw2IEBACiAgKiAgQ09ORklHX0NQVV9BUk05MjBfQ1BVX0lETEUgLT4gbm9obHQKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWh3ZGVmLmg+CkBAIC05Nyw3ICs5Nyw5IEBACiAJbW92CWlwLCAjMAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgogCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KIAliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCkBAIC0zMTcsNiArMzE5LDcgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfYXJtOTIwX3N3aXRjaF9tbSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJbW92CWlwLCAjMAogI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDAJCUAgaW52YWxpZGF0ZSBEIGNhY2hlCkBAIC0zMzcsNiArMzQwLDcgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworI2VuZGlmCiAJbW92CXBjLCBscgogCiAvKgpAQCAtMzQ2LDYgKzM1MCw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X2FybTkyMF9zZXRfcHRlKQorI2lmZGVmIENPTkZJR19NTVUKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKIAllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQpAQCAtMzcyLDYgKzM3Nyw3IEBACiAJbW92CXIwLCByMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAltb3YJcGMsIGxyCiAKIAlfX0lOSVQKQEAgLTM4MSwxMiArMzg3LDE0IEBACiAJbW92CXIwLCAjMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzIG9uIHY0CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyIG9uIHY0CisjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorI2VuZGlmCisJYWRyCXI1LCBhcm05MjBfY3J2YWwKKwlsZG1pYQlyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0Ci0JbGRyCXI1LCBhcm05MjBfY3IxX2NsZWFyCiAJYmljCXIwLCByMCwgcjUKLQlsZHIJcjUsIGFybTkyMF9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogCW1vdglwYywgbHIKIAkuc2l6ZQlfX2FybTkyMF9zZXR1cCwgLiAtIF9fYXJtOTIwX3NldHVwCiAKQEAgLTM5NiwxMiArNDA0LDkgQEAKIAkgKiAuLjExIDAwMDEgLi4xMSAwMTAxCiAJICogCiAJICovCi0JLnR5cGUJYXJtOTIwX2NyMV9jbGVhciwgI29iamVjdAotCS50eXBlCWFybTkyMF9jcjFfc2V0LCAjb2JqZWN0Ci1hcm05MjBfY3IxX2NsZWFyOgotCS53b3JkCTB4M2YzZgotYXJtOTIwX2NyMV9zZXQ6Ci0JLndvcmQJMHgzMTM1CisJLnR5cGUJYXJtOTIwX2NydmFsLCAjb2JqZWN0Cithcm05MjBfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMDAwM2YzZiwgbW11c2V0PTB4MDAwMDMxMzUsIHVjc2V0PTB4MDAwMDExMzAKIAogCV9fSU5JVERBVEEKIApAQCAtNDM1LDE5ICs0NDAsNyBAQAogCiAJLnR5cGUJY3B1X2FybTkyMF9uYW1lLCAjb2JqZWN0CiBjcHVfYXJtOTIwX25hbWU6Ci0JLmFzY2lpCSJBUk05MjBUIgotI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCi0JLmFzY2lpCSJpIgotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQkuYXNjaWkJImQiCi0jaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICi0JLmFzY2lpCSIod3QpIgotI2Vsc2UKLQkuYXNjaWkJIih3YikiCi0jZW5kaWYKLSNlbmRpZgotCS5hc2NpaQkiXDAiCisJLmFzY2l6CSJBUk05MjBUIgogCS5zaXplCWNwdV9hcm05MjBfbmFtZSwgLiAtIGNwdV9hcm05MjBfbmFtZQogCiAJLmFsaWduCkBAIC00NjQsNiArNDU3LDEwIEBACiAJCVBNRF9CSVQ0IHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX2FybTkyMF9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IGJiZGU0YTAuLjU3MWYwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtNCw2ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBBUk0gTGltaXRlZAogICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQWx0ZXJhIENvcnBvcmF0aW9uCisgKiAgaGFja2VkIGZvciBub24tcGFnZWQtTU0gYnkgSHlvayBTLiBDaG9pLCAyMDAzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjYsNyArMjcsNiBAQAogICogIENPTkZJR19DUFVfQVJNOTIyX0NQVV9JRExFIC0+IG5vaGx0CiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgpAQCAtOTksNyArOTksOSBAQAogCW1vdglpcCwgIzAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcwogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKIAltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCiAJYmljCWlwLCBpcCwgIzB4MTEwMAkJCUAgLi4uaS4uLnMuLi4uLi4uLgpAQCAtMzIxLDYgKzMyMyw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X2FybTkyMl9zd2l0Y2hfbW0pCisjaWZkZWYgQ09ORklHX01NVQogCW1vdglpcCwgIzAKICNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQpAQCAtMzQxLDYgKzM0NCw3IEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCiAJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgogCW1vdglwYywgbHIKIAogLyoKQEAgLTM1MCw2ICszNTQsNyBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9hcm05MjJfc2V0X3B0ZSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCiAJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKQEAgLTM3Niw2ICszODEsNyBAQAogCW1vdglyMCwgcjAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAJbW92CXBjLCBscgogCiAJX19JTklUCkBAIC0zODUsMTIgKzM5MSwxNCBAQAogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMgb24gdjQKKyNlbmRpZgorCWFkcglyNSwgYXJtOTIyX2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAotCWxkcglyNSwgYXJtOTIyX2NyMV9jbGVhcgogCWJpYwlyMCwgcjAsIHI1Ci0JbGRyCXI1LCBhcm05MjJfY3IxX3NldAotCW9ycglyMCwgcjAsIHI1CisJb3JyCXIwLCByMCwgcjYKIAltb3YJcGMsIGxyCiAJLnNpemUJX19hcm05MjJfc2V0dXAsIC4gLSBfX2FybTkyMl9zZXR1cAogCkBAIC00MDAsMTIgKzQwOCw5IEBACiAJICogLi4xMSAwMDAxIC4uMTEgMDEwMQogCSAqIAogCSAqLwotCS50eXBlCWFybTkyMl9jcjFfY2xlYXIsICNvYmplY3QKLQkudHlwZQlhcm05MjJfY3IxX3NldCwgI29iamVjdAotYXJtOTIyX2NyMV9jbGVhcjoKLQkud29yZAkweDNmM2YKLWFybTkyMl9jcjFfc2V0OgotCS53b3JkCTB4MzEzNQorCS50eXBlCWFybTkyMl9jcnZhbCwgI29iamVjdAorYXJtOTIyX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDAwMDNmM2YsIG1tdXNldD0weDAwMDAzMTM1LCB1Y3NldD0weDAwMDAxMTMwCiAKIAlfX0lOSVREQVRBCiAKQEAgLTQzOSwxOSArNDQ0LDcgQEAKIAogCS50eXBlCWNwdV9hcm05MjJfbmFtZSwgI29iamVjdAogY3B1X2FybTkyMl9uYW1lOgotCS5hc2NpaQkiQVJNOTIyVCIKLSNpZm5kZWYgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRQotCS5hc2NpaQkiaSIKLSNlbmRpZgotI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCi0JLmFzY2lpCSJkIgotI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAotCS5hc2NpaQkiKHd0KSIKLSNlbHNlCi0JLmFzY2lpCSIod2IpIgotI2VuZGlmCi0jZW5kaWYKLQkuYXNjaWkJIlwwIgorCS5hc2NpegkiQVJNOTIyVCIKIAkuc2l6ZQljcHVfYXJtOTIyX25hbWUsIC4gLSBjcHVfYXJtOTIyX25hbWUKIAogCS5hbGlnbgpAQCAtNDY4LDYgKzQ2MSwxMCBAQAogCQlQTURfQklUNCB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX19hcm05MjJfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCAyMjRjZTIyLi5hZDE1Zjg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKQEAgLTksNiArOSw4IEBACiAgKiAgVXBkYXRlIGZvciBMaW51eC0yLjYgYW5kIGNhY2hlIGZsdXNoIGltcHJvdmVtZW50cwogICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBDb3Jwb3JhdGlvbiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgogICoKKyAqICBoYWNrZWQgZm9yIG5vbi1wYWdlZC1NTSBieSBIeW9rIFMuIENob2ksIDIwMDQuCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNDgsNyArNTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgpAQCAtMTIyLDcgKzEyMyw5IEBACiAJbW92CWlwLCAjMAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgogCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KIAliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCkBAIC0zNjksNiArMzcyLDcgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfYXJtOTI1X3N3aXRjaF9tbSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJbW92CWlwLCAjMAogI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDAJCUAgaW52YWxpZGF0ZSBEIGNhY2hlCkBAIC0zODMsNiArMzg3LDcgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworI2VuZGlmCiAJbW92CXBjLCBscgogCiAvKgpAQCAtMzkyLDYgKzM5Nyw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X2FybTkyNV9zZXRfcHRlKQorI2lmZGVmIENPTkZJR19NTVUKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKIAllb3IJcjEsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQpAQCAtNDIwLDYgKzQyNiw3IEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAJbW92CXBjLCBscgogCiAJX19JTklUCkBAIC00MzgsMTggKzQ0NSwxOSBAQAogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlciBvbiB2NAorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCByMCwgYzgsIGM3CQlAIGludmFsaWRhdGUgSSxEIFRMQnMgb24gdjQKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJbW92CXIwLCAjNAkJCQlAIGRpc2FibGUgd3JpdGUtYmFjayBvbiBjYWNoZXMgZXhwbGljaXRseQogCW1jcglwMTUsIDcsIHIwLCBjMTUsIGMwLCAwCiAjZW5kaWYKIAorCWFkcglyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0Ci0JbGRyCXI1LCBhcm05MjVfY3IxX2NsZWFyCiAJYmljCXIwLCByMCwgcjUKLQlsZHIJcjUsIGFybTkyNV9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KIAlvcnIJcjAsIHIwLCAjMHg0MDAwCQkJQCAuMS4uIC4uLi4gLi4uLiAuLi4uCiAjZW5kaWYKQEAgLTQ2MiwxMiArNDcwLDkgQEAKIAkgKiAuMDExIDAwMDEgLi4xMSAxMTAxCiAJICogCiAJICovCi0JLnR5cGUJYXJtOTI1X2NyMV9jbGVhciwgI29iamVjdAotCS50eXBlCWFybTkyNV9jcjFfc2V0LCAjb2JqZWN0Ci1hcm05MjVfY3IxX2NsZWFyOgotCS53b3JkCTB4N2YzZgotYXJtOTI1X2NyMV9zZXQ6Ci0JLndvcmQJMHgzMTNkCisJLnR5cGUJYXJtOTI1X2NydmFsLCAjb2JqZWN0Cithcm05MjVfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMDAwN2YzZiwgbW11c2V0PTB4MDAwMDMxM2QsIHVjc2V0PTB4MDAwMDExMzAKIAogCV9fSU5JVERBVEEKIApAQCAtNTAxLDIyICs1MDYsNyBAQAogCiAJLnR5cGUJY3B1X2FybTkyNV9uYW1lLCAjb2JqZWN0CiBjcHVfYXJtOTI1X25hbWU6Ci0JLmFzY2lpCSJBUk05MjVUIgotI2lmbmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCi0JLmFzY2lpCSJpIgotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQkuYXNjaWkJImQiCi0jaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICi0JLmFzY2lpCSIod3QpIgotI2Vsc2UKLQkuYXNjaWkJIih3YikiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOCi0JLmFzY2lpCSJSUiIKLSNlbmRpZgotI2VuZGlmCi0JLmFzY2lpCSJcMCIKKwkuYXNjaXoJIkFSTTkyNVQiCiAJLnNpemUJY3B1X2FybTkyNV9uYW1lLCAuIC0gY3B1X2FybTkyNV9uYW1lCiAKIAkuYWxpZ24KQEAgLTUzMSw2ICs1MjEsMTAgQEAKIAkJUE1EX0JJVDQgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKIAliCV9fYXJtOTI1X3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQpAQCAtNTUwLDYgKzU0NCwxMCBAQAogCQlQTURfQklUNCB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX19hcm05MjVfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA0ZTJhMDg3Li4xZTg5ZDQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTMsNiArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEFSTSBMaW1pdGVkCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICogIGhhY2tlZCBmb3Igbm9uLXBhZ2VkLU1NIGJ5IEh5b2sgUy4gQ2hvaSwgMjAwMy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI1LDcgKzI2LDYgQEAKICAqICBDT05GSUdfQ1BVX0FSTTkyNl9DUFVfSURMRSAtPiBub2hsdAogICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KQEAgLTg1LDcgKzg1LDkgQEAKIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworI2VuZGlmCiAJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCWlwLCBpcCwgIzB4MDAwZgkJCUAgLi4uLi4uLi4uLi4ud2NhbQogCWJpYwlpcCwgaXAsICMweDExMDAJCQlAIC4uLmkuLi5zLi4uLi4uLi4KQEAgLTMyOSw2ICszMzEsNyBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9hcm05MjZfc3dpdGNoX21tKQorI2lmZGVmIENPTkZJR19NTVUKIAltb3YJaXAsICMwCiAjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKQEAgLTM0MSw2ICszNDQsNyBAQAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgogCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisjZW5kaWYKIAltb3YJcGMsIGxyCiAKIC8qCkBAIC0zNTAsNiArMzU0LDcgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfYXJtOTI2X3NldF9wdGUpCisjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCWVvcglyMSwgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCkBAIC0zNzgsNiArMzgzLDcgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2VuZGlmCiAJbW92CXBjLCBscgogCiAJX19JTklUCkBAIC0zODcsNyArMzkzLDkgQEAKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisjZW5kaWYKIAogCiAjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICkBAIC0zOTUsMTEgKzQwMywxMSBAQAogCW1jcglwMTUsIDcsIHIwLCBjMTUsIGMwLCAwCiAjZW5kaWYgCiAKKwlhZHIJcjUsIGFybTkyNl9jcnZhbAorCWxkbWlhCXI1LCB7cjUsIHI2fQogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKLQlsZHIJcjUsIGFybTkyNl9jcjFfY2xlYXIKIAliaWMJcjAsIHIwLCByNQotCWxkcglyNSwgYXJtOTI2X2NyMV9zZXQKLQlvcnIJcjAsIHIwLCByNQorCW9ycglyMCwgcjAsIHI2CiAjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTgogCW9ycglyMCwgcjAsICMweDQwMDAJCQlAIC4xLi4gLi4uLiAuLi4uIC4uLi4KICNlbmRpZgpAQCAtNDEyLDEyICs0MjAsOSBAQAogCSAqIC4wMTEgMDAwMSAuLjExIDAxMDEKIAkgKiAKIAkgKi8KLQkudHlwZQlhcm05MjZfY3IxX2NsZWFyLCAjb2JqZWN0Ci0JLnR5cGUJYXJtOTI2X2NyMV9zZXQsICNvYmplY3QKLWFybTkyNl9jcjFfY2xlYXI6Ci0JLndvcmQJMHg3ZjNmCi1hcm05MjZfY3IxX3NldDoKLQkud29yZAkweDMxMzUKKwkudHlwZQlhcm05MjZfY3J2YWwsICNvYmplY3QKK2FybTkyNl9jcnZhbDoKKwljcnZhbAljbGVhcj0weDAwMDA3ZjNmLCBtbXVzZXQ9MHgwMDAwMzEzNSwgdWNzZXQ9MHgwMDAwMTEzNAogCiAJX19JTklUREFUQQogCkBAIC00NTEsMjIgKzQ1Niw3IEBACiAKIAkudHlwZQljcHVfYXJtOTI2X25hbWUsICNvYmplY3QKIGNwdV9hcm05MjZfbmFtZToKLQkuYXNjaWkJIkFSTTkyNkVKLVMiCi0jaWZuZGVmIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUKLQkuYXNjaWkJImkiCi0jZW5kaWYKLSNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQotCS5hc2NpaQkiZCIKLSNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKLQkuYXNjaWkJIih3dCkiCi0jZWxzZQotCS5hc2NpaQkiKHdiKSIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KLQkuYXNjaWkJIlJSIgotI2VuZGlmCi0jZW5kaWYKLQkuYXNjaWkJIlwwIgorCS5hc2NpegkiQVJNOTI2RUotUyIKIAkuc2l6ZQljcHVfYXJtOTI2X25hbWUsIC4gLSBjcHVfYXJtOTI2X25hbWUKIAogCS5hbGlnbgpAQCAtNDgzLDYgKzQ3MywxMCBAQAogCQlQTURfQklUNCB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX19hcm05MjZfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwppbmRleCA3Y2ZjMjYwLi45ZTJjODllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKQEAgLTQ5LDMgKzQ5LDEzIEBACiAJLm1hY3JvCWFzaWQsIHJkLCBybgogCWFuZAlccmQsIFxybiwgIzI1NQogCS5lbmRtCisKKwkubWFjcm8JY3J2YWwsIGNsZWFyLCBtbXVzZXQsIHVjc2V0CisjaWZkZWYgQ09ORklHX01NVQorCS53b3JkCVxjbGVhcgorCS53b3JkCVxtbXVzZXQKKyNlbHNlCisJLndvcmQJXGNsZWFyCisJLndvcmQJXHVjc2V0CisjZW5kaWYKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IGEyZGQ1YWUuLmM4NzgwNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwgS2luZworICogIGhhY2tlZCBmb3Igbm9uLXBhZ2VkLU1NIGJ5IEh5b2sgUy4gQ2hvaSwgMjAwMy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIyLDYgKzIzLDggQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKIC8qCiAgKiB0aGUgY2FjaGUgbGluZSBzaXplIG9mIHRoZSBJIGFuZCBEIGNhY2hlCiAgKi8KQEAgLTY3LDcgKzcwLDkgQEAKIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworI2VuZGlmCiAJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCWlwLCBpcCwgIzB4MDAwZgkJCUAgLi4uLi4uLi4uLi4ud2NhbQogCWJpYwlpcCwgaXAsICMweDExMDAJCQlAIC4uLmkuLi5zLi4uLi4uLi4KQEAgLTEzMCwxMSArMTM1LDE1IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X3NhMTEwX3N3aXRjaF9tbSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCWxyLCBbc3AsICMtNF0hCiAJYmwJdjR3Yl9mbHVzaF9rZXJuX2NhY2hlX2FsbAlAIGNsZWFycyBJUAogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcwogCWxkcglwYywgW3NwXSwgIzQKKyNlbHNlCisJbW92CXBjLCBscgorI2VuZGlmCiAKIC8qCiAgKiBjcHVfc2ExMTBfc2V0X3B0ZShwdGVwLCBwdGUpCkBAIC0xNDMsNiArMTUyLDcgQEAKICAqLwogCS5hbGlnbgk1CiBFTlRSWShjcHVfc2ExMTBfc2V0X3B0ZSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCiAJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKQEAgLTE2NCw2ICsxNzQsNyBAQAogCW1vdglyMCwgcjAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNlbmRpZgogCW1vdglwYywgbHIKIAogCV9fSU5JVApAQCAtMTczLDEyICsxODQsMTUgQEAKIAltb3YJcjEwLCAjMAogCW1jcglwMTUsIDAsIHIxMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcyBvbiB2NAogCW1jcglwMTUsIDAsIHIxMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgcjEwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcyBvbiB2NAorI2VuZGlmCisKKwlhZHIJcjUsIHNhMTEwX2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlciB2NAotCWxkcglyNSwgc2ExMTBfY3IxX2NsZWFyCiAJYmljCXIwLCByMCwgcjUKLQlsZHIJcjUsIHNhMTEwX2NyMV9zZXQKLQlvcnIJcjAsIHIwLCByNQorCW9ycglyMCwgcjAsIHI2CiAJbW92CXBjLCBscgogCS5zaXplCV9fc2ExMTBfc2V0dXAsIC4gLSBfX3NhMTEwX3NldHVwCiAKQEAgLTE4OCwxMiArMjAyLDkgQEAKIAkgKiAuLjAxIDAwMDEgLi4xMSAxMTAxCiAJICogCiAJICovCi0JLnR5cGUJc2ExMTBfY3IxX2NsZWFyLCAjb2JqZWN0Ci0JLnR5cGUJc2ExMTBfY3IxX3NldCwgI29iamVjdAotc2ExMTBfY3IxX2NsZWFyOgotCS53b3JkCTB4M2YzZgotc2ExMTBfY3IxX3NldDoKLQkud29yZAkweDExM2QKKwkudHlwZQlzYTExMF9jcnZhbCwgI29iamVjdAorc2ExMTBfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMDAwM2YzZiwgbW11c2V0PTB4MDAwMDExM2QsIHVjc2V0PTB4MDAwMDExMzAKIAogCV9fSU5JVERBVEEKIApAQCAtMjQ0LDYgKzI1NSw5IEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX3NhMTEwX3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNzc3YWQ5OS4uYjIzYjY2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0yLDYgKzIsNyBAQAogICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgaGFja2VkIGZvciBub24tcGFnZWQtTU0gYnkgSHlvayBTLiBDaG9pLCAyMDAzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjYsNiArMjcsOCBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWh3ZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKIC8qCiAgKiB0aGUgY2FjaGUgbGluZSBzaXplIG9mIHRoZSBJIGFuZCBEIGNhY2hlCiAgKi8KQEAgLTc3LDcgKzgwLDkgQEAKIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworI2VuZGlmCiAJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCWlwLCBpcCwgIzB4MDAwZgkJCUAgLi4uLi4uLi4uLi4ud2NhbQogCWJpYwlpcCwgaXAsICMweDExMDAJCQlAIC4uLmkuLi5zLi4uLi4uLi4KQEAgLTE0MiwxMiArMTQ3LDE2IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkoY3B1X3NhMTEwMF9zd2l0Y2hfbW0pCisjaWZkZWYgQ09ORklHX01NVQogCXN0cglsciwgW3NwLCAjLTRdIQogCWJsCXY0d2JfZmx1c2hfa2Vybl9jYWNoZV9hbGwJQCBjbGVhcnMgSVAKIAltY3IJcDE1LCAwLCBpcCwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKIAltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCiAJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKIAlsZHIJcGMsIFtzcF0sICM0CisjZWxzZQorCW1vdglwYywgbHIKKyNlbmRpZgogCiAvKgogICogY3B1X3NhMTEwMF9zZXRfcHRlKHB0ZXAsIHB0ZSkKQEAgLTE1Niw2ICsxNjUsNyBAQAogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV9zYTExMDBfc2V0X3B0ZSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCiAJZW9yCXIxLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKQEAgLTE3Nyw2ICsxODcsNyBAQAogCW1vdglyMCwgcjAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNlbmRpZgogCW1vdglwYywgbHIKIAogCV9fSU5JVApAQCAtMTg2LDEyICsxOTcsMTQgQEAKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKyNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisjZW5kaWYKKwlhZHIJcjUsIHNhMTEwMF9jcnZhbAorCWxkbWlhCXI1LCB7cjUsIHI2fQogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgdjQKLQlsZHIJcjUsIHNhMTEwMF9jcjFfY2xlYXIKIAliaWMJcjAsIHIwLCByNQotCWxkcglyNSwgc2ExMTAwX2NyMV9zZXQKLQlvcnIJcjAsIHIwLCByNQorCW9ycglyMCwgcjAsIHI2CiAJbW92CXBjLCBscgogCS5zaXplCV9fc2ExMTAwX3NldHVwLCAuIC0gX19zYTExMDBfc2V0dXAKIApAQCAtMjAxLDEyICsyMTQsOSBAQAogCSAqIC4uMTEgMDAwMSAuLjExIDExMDEKIAkgKiAKIAkgKi8KLQkudHlwZQlzYTExMDBfY3IxX2NsZWFyLCAjb2JqZWN0Ci0JLnR5cGUJc2ExMTAwX2NyMV9zZXQsICNvYmplY3QKLXNhMTEwMF9jcjFfY2xlYXI6Ci0JLndvcmQJMHgzZjNmCi1zYTExMDBfY3IxX3NldDoKLQkud29yZAkweDMxM2QKKwkudHlwZQlzYTExMDBfY3J2YWwsICNvYmplY3QKK3NhMTEwMF9jcnZhbDoKKwljcnZhbAljbGVhcj0weDAwMDAzZjNmLCBtbXVzZXQ9MHgwMDAwMzEzZCwgdWNzZXQ9MHgwMDAwMTEzMAogCiAJX19JTklUREFUQQogCkBAIC0yNjUsNiArMjc1LDkgQEAKIAkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKIAliCV9fc2ExMTAwX3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQpAQCAtMjg1LDYgKzI5OCw5IEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX3NhMTEwMF9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCAwOWIxYTQxLi42ZjcyNTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0yLDYgKzIsNyBAQAogICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtdjYuUwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKiAgTW9kaWZpZWQgYnkgQ2F0YWxpbiBNYXJpbmFzIGZvciBub01NVSBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC04OCw2ICs4OSw3IEBACiAgKgktIHdlIGFyZSBub3QgdXNpbmcgc3BsaXQgcGFnZSB0YWJsZXMKICAqLwogRU5UUlkoY3B1X3Y2X3N3aXRjaF9tbSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJbW92CXIyLCAjMAogCWxkcglyMSwgW3IxLCAjTU1fQ09OVEVYVF9JRF0JQCBnZXQgbW0tPmNvbnRleHQuaWQKICNpZmRlZiBDT05GSUdfU01QCkBAIC05Nyw2ICs5OSw3IEBACiAJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBzZXQgVFRCIDAKIAltY3IJcDE1LCAwLCByMSwgYzEzLCBjMCwgMQkJQCBzZXQgY29udGV4dCBJRAorI2VuZGlmCiAJbW92CXBjLCBscgogCiAvKgpAQCAtMTE5LDYgKzEyMiw3IEBACiAgKgkgIDExMTEgICAwICAgMSAgIDEJci93CXIvdwogICovCiBFTlRSWShjcHVfdjZfc2V0X3B0ZSkKKyNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCiAJYmljCXIyLCByMSwgIzB4MDAwMDAzZjAKQEAgLTE0NSw2ICsxNDksNyBAQAogCiAJc3RyCXIyLCBbcjBdCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEgQCBmbHVzaF9wdGUKKyNlbmRpZgogCW1vdglwYywgbHIKIAogCkBAIC0xOTQsMjIgKzE5OSwyNCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTUsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBjYWNoZQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorI2lmZGVmIENPTkZJR19NTVUKIAltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSArIEQgVExCcwogCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDIJCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKICNpZmRlZiBDT05GSUdfU01QCiAJb3JyCXI0LCByNCwgI1RUQl9SR05fV0JXQXxUVEJfUwlAIG1hcmsgUFRXcyBzaGFyZWQsIG91dGVyIGNhY2hlYWJsZQogI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMCwgMQkJQCBsb2FkIFRUQjEKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjaWZkZWYgQ09ORklHX1ZGUAogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDIKIAlvcnIJcjAsIHIwLCAjKDB4ZiA8PCAyMCkKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAyCQlAIEVuYWJsZSBmdWxsIGFjY2VzcyB0byBWRlAKICNlbmRpZgorCWFkcglyNSwgdjZfY3J2YWwKKwlsZG1pYQlyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWdpc3RlcgotCWxkcglyNSwgdjZfY3IxX2NsZWFyCQlAIGdldCBtYXNrIGZvciBiaXRzIHRvIGNsZWFyCiAJYmljCXIwLCByMCwgcjUJCQlAIGNsZWFyIGJpdHMgdGhlbQotCWxkcglyNSwgdjZfY3IxX3NldAkJCUAgZ2V0IG1hc2sgZm9yIGJpdHMgdG8gc2V0Ci0Jb3JyCXIwLCByMCwgcjUJCQlAIHNldCB0aGVtCisJb3JyCXIwLCByMCwgcjYJCQlAIHNldCB0aGVtCiAJbW92CXBjLCBscgkJCQlAIHJldHVybiB0byBoZWFkLlM6X19yZXQKIAogCS8qCkBAIC0yMTgsMTIgKzIyNSw5IEBACiAJICogcnJyciBycnJ4IHh4eDAgMDEwMSB4eHh4IHh4eHggeDExMSB4eHh4IDwgZm9yY2VkCiAJICogICAgICAgICAwIDExMCAgICAgICAwMDExIDEuMDAgLjExMSAxMTAxIDwgd2Ugd2FudAogCSAqLwotCS50eXBlCXY2X2NyMV9jbGVhciwgI29iamVjdAotCS50eXBlCXY2X2NyMV9zZXQsICNvYmplY3QKLXY2X2NyMV9jbGVhcjoKLQkud29yZAkweDAxZTBmYjdmCi12Nl9jcjFfc2V0OgotCS53b3JkCTB4MDBjMDM4N2QKKwkudHlwZQl2Nl9jcnZhbCwgI29iamVjdAordjZfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMWUwZmI3ZiwgbW11c2V0PTB4MDBjMDM4N2QsIHVjc2V0PTB4MDBjMDE4N2MKIAogCS50eXBlCXY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCkBAIC0yNjIsNiArMjY2LDEwIEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX1hOIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX192Nl9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggOGQzMmUyMS4uNGFjZTJkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTQyNiwyMyArNDI2LDI2IEBACiAJb3JyCXIwLCByMCwgIygxIDw8IDEwKQkJQCBlbmFibGUgTDIgZm9yIExMUiBjYWNoZQogI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQkJQCBzZXQgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCisKKwlhZHIJcjUsIHhzYzNfY3J2YWwKKwlsZG1pYQlyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCi0JYmljCXIwLCByMCwgIzB4MDAwMgkJCUAgLi4uLiAuLi4uIC4uLi4gLi5BLgotCW9ycglyMCwgcjAsICMweDAwMDUJCQlAIC4uLi4gLi4uLiAuLi4uIC5DLk0KKwliaWMJcjAsIHIwLCByNQkJCUAgLi4uLiAuLi4uIC4uLi4gLi5BLgorCW9ycglyMCwgcjAsIHI2CQkJQCAuLi4uIC4uLi4gLi4uLiAuQy5NCiAjaWYgQlRCX0VOQUJMRQotCWJpYwlyMCwgcjAsICMweDAyMDAJCQlAIC4uLi4gLi5SLiAuLi4uIC4uLi4KLQlvcnIJcjAsIHIwLCAjMHgzOTAwCQkJQCAuLlZJIFouLlMgLi4uLiAuLi4uCi0jZWxzZQotCWJpYwlyMCwgcjAsICMweDBhMDAJCQlAIC4uLi4gWi5SLiAuLi4uIC4uLi4KLQlvcnIJcjAsIHIwLCAjMHgzMTAwCQkJQCAuLlZJIC4uLlMgLi4uLiAuLi4uCisJb3JyCXIwLCByMCwgIzB4MDAwMDA4MDAJCUAgLi5WSSBaLi5TIC4uLi4gLi4uLgogI2VuZGlmCiAjaWYgTDJfQ0FDSEVfRU5BQkxFCi0Jb3JyIAlyMCwgcjAsICMweDQwMDAwMDAJCUAgTDIgZW5hYmxlCisJb3JyIAlyMCwgcjAsICMweDA0MDAwMDAwCQlAIEwyIGVuYWJsZQogI2VuZGlmCiAJbW92CXBjLCBscgogCiAJLnNpemUJX194c2MzX3NldHVwLCAuIC0gX194c2MzX3NldHVwCiAKKwkudHlwZQl4c2MzX2NydmFsLCAjb2JqZWN0Cit4c2MzX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDQwMDNiMDIsIG1tdXNldD0weDAwMDAzMTA1LCB1Y3NldD0weDAwMDAxMTAwCisKIAlfX0lOSVREQVRBCiAKIC8qCkBAIC00ODcsNyArNDkwLDE0IEBACiBfX3hzYzNfcHJvY19pbmZvOgogCS5sb25nCTB4NjkwNTYwMDAKIAkubG9uZwkweGZmZmZlMDAwCi0JLmxvbmcJMHgwMDAwMGMwZQorCS5sb25nCVBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX3hzYzNfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCAyOWJjYzRkLi41MjE1Mzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTEzOCwxNyArMTM4LDIzIEBACiAgKiB0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCiAgKgogICogbG9jOiBsb2NhdGlvbiB0byBqdW1wIHRvIGZvciBzb2Z0IHJlc2V0CisgKgorICogQmV3YXJlIFBYQTI3MCBlcnJhdHVtIEU3LgogICovCiAJLmFsaWduCTUKIEVOVFJZKGNwdV94c2NhbGVfcmVzZXQpCiAJbW92CXIxLCAjUFNSX0ZfQklUfFBTUl9JX0JJVHxTVkNfTU9ERQogCW1zcgljcHNyX2MsIHIxCQkJQCByZXNldCBDUFNSCisJbWNyCXAxNSwgMCwgcjEsIGMxMCwgYzQsIDEJCUAgdW5sb2NrIEktVExCCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEktVExCCiAJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJYmljCXIxLCByMSwgIzB4MDA4NgkJCUAgLi4uLi4uLi5CLi4uLkNBLgogCWJpYwlyMSwgcjEsICMweDM5MDAJCQlAIC4uVklaLi5TLi4uLi4uLi4KKwlzdWIJcGMsIHBjLCAjNAkJCUAgZmx1c2ggcGlwZWxpbmUKKwlAICoqKiBjYWNoZSBsaW5lIGFsaWduZWQgKioqCiAJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCi0JbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgJiBCVEIKIAliaWMJcjEsIHIxLCAjMHgwMDAxCQkJQCAuLi4uLi4uLi4uLi4uLi5NCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgJiBCVEIKIAltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKIAlAIENBVVRJT046IE1NVSB0dXJuZWQgb2ZmIGZyb20gdGhpcyBwb2ludC4gV2UgY291bnQgb24gdGhlIHBpcGVsaW5lCiAJQCBhbHJlYWR5IGNvbnRhaW5pbmcgdGhvc2UgdHdvIGxhc3QgaW5zdHJ1Y3Rpb25zIHRvIHN1cnZpdmUuCkBAIC00NzUsMTEgKzQ4MSwxMiBAQAogCW9yciAgICAgcjAsIHIwLCAjMSA8PCA2CQkJQCBjcDYgZm9yIElPUDN4eCBhbmQgQnVsdmVyZGUKIAlvcnIJcjAsIHIwLCAjMSA8PCAxMwkJQCBJdHMgdW5kZWZpbmVkIHdoZXRoZXIgdGhpcwogCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMxLCAwCQlAIGFmZmVjdHMgVVNSIG9yIFNWQyBtb2RlcworCisJYWRyCXI1LCB4c2NhbGVfY3J2YWwKKwlsZG1pYQlyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCi0JbGRyCXI1LCB4c2NhbGVfY3IxX2NsZWFyCiAJYmljCXIwLCByMCwgcjUKLQlsZHIJcjUsIHhzY2FsZV9jcjFfc2V0Ci0Jb3JyCXIwLCByMCwgcjUKKwlvcnIJcjAsIHIwLCByNgogCW1vdglwYywgbHIKIAkuc2l6ZQlfX3hzY2FsZV9zZXR1cCwgLiAtIF9feHNjYWxlX3NldHVwCiAKQEAgLTQ4OSwxMiArNDk2LDkgQEAKIAkgKiAuLjExIDEuMDEgLi4uLiAuMTAxCiAJICogCiAJICovCi0JLnR5cGUJeHNjYWxlX2NyMV9jbGVhciwgI29iamVjdAotCS50eXBlCXhzY2FsZV9jcjFfc2V0LCAjb2JqZWN0Ci14c2NhbGVfY3IxX2NsZWFyOgotCS53b3JkCTB4M2IwNwoteHNjYWxlX2NyMV9zZXQ6Ci0JLndvcmQJMHgzOTA1CisJLnR5cGUJeHNjYWxlX2NydmFsLCAjb2JqZWN0Cit4c2NhbGVfY3J2YWw6CisJY3J2YWwJY2xlYXI9MHgwMDAwM2IwNywgbW11c2V0PTB4MDAwMDM5MDUsIHVjc2V0PTB4MDAwMDE5MDAKIAogCV9fSU5JVERBVEEKIApAQCAtNTk1LDYgKzU5OSw5IEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX3hzY2FsZV9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKQEAgLTYxNSw2ICs2MjIsOSBAQAogCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX194c2NhbGVfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCkBAIC02MzUsNiArNjQ1LDkgQEAKIAkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKIAliCV9feHNjYWxlX3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQpAQCAtNjU1LDYgKzY2OCw5IEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX3hzY2FsZV9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKQEAgLTY3NSw2ICs2OTEsOSBAQAogCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX194c2NhbGVfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCkBAIC02OTUsNiArNzE0LDkgQEAKIAkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKIAliICAgICAgIF9feHNjYWxlX3NldHVwCiAJLmxvbmcgICBjcHVfYXJjaF9uYW1lCiAJLmxvbmcgICBjcHVfZWxmX25hbWUKQEAgLTcxNSw2ICs3MzcsOSBAQAogCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIgICAgICAgX194c2NhbGVfc2V0dXAKIAkubG9uZyAgIGNwdV9hcmNoX25hbWUKIAkubG9uZyAgIGNwdV9lbGZfbmFtZQpAQCAtNzM1LDYgKzc2MCw5IEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYiAgICAgICBfX3hzY2FsZV9zZXR1cAogCS5sb25nICAgY3B1X2FyY2hfbmFtZQogCS5sb25nICAgY3B1X2VsZl9uYW1lCkBAIC03NTAsNyArNzc4LDE0IEBACiBfX2l4cDQ2eF9wcm9jX2luZm86CiAJLmxvbmcgICAweDY5MDU0MjAwCiAJLmxvbmcgICAweGZmZmZmZjAwCi0JLmxvbmcgICAweDAwMDAwYzBlCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIgICAgICAgX194c2NhbGVfc2V0dXAKIAkubG9uZyAgIGNwdV9hcmNoX25hbWUKIAkubG9uZyAgIGNwdV9lbGZfbmFtZQpAQCAtNzcxLDYgKzgwNiw5IEBACiAJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCiAJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECiAJYglfX3hzY2FsZV9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKQEAgLTc5MSw2ICs4MjksOSBAQAogCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAogCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX194c2NhbGVfc2V0dXAKIAkubG9uZwljcHVfYXJjaF9uYW1lCiAJLmxvbmcJY3B1X2VsZl9uYW1lCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9mcGExMS5jIGIvYXJjaC9hcm0vbndmcGUvZnBhMTEuYwppbmRleCA3YjNkNzRkLi5jYzYwYWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ud2ZwZS9mcGExMS5jCisrKyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJmcG1vZHVsZS5oIgogI2luY2x1ZGUgImZwbW9kdWxlLmlubCIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZnBhMTEuaCBiL2FyY2gvYXJtL253ZnBlL2ZwYTExLmgKaW5kZXggMjhjZDc5YS4uNGE0ZDAyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbndmcGUvZnBhMTEuaAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcGExMS5oCkBAIC0zMSw3ICszMSw2IEBACiAgKi8KICNkZWZpbmUgR0VUX1VTRVJSRUcoKSAoKHN0cnVjdCBwdF9yZWdzICopKFRIUkVBRF9TVEFSVF9TUCArICh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGhyZWFkX2luZm8oKSkgLSAxKQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KIAogLyogaW5jbHVkZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwZG8uYyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwZG8uYwppbmRleCA0YTMxZGZkLi4yY2ViYjE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcGRvLmMKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3Bkby5jCkBAIC0yMCw3ICsyMCw2IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiZnBhMTEuaCIKICNpbmNsdWRlICJmcG9wY29kZS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcGR0LmMgYi9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcGR0LmMKaW5kZXggMzI4NTlmYS4uNzlmOGU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3BkdC5jCisrKyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwZHQuYwpAQCAtMjAsNyArMjAsNiBAQAogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImZwYTExLmgiCiAjaW5jbHVkZSAic29mdGZsb2F0LmgiCiAjaW5jbHVkZSAiZnBvcGNvZGUuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwcnQuYyBiL2FyY2gvYXJtL253ZnBlL2ZwYTExX2NwcnQuYwppbmRleCA3YzY3MDIzLi45ODQzZGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ud2ZwZS9mcGExMV9jcHJ0LmMKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBhMTFfY3BydC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiZnBhMTEuaCIKICNpbmNsdWRlICJmcG9wY29kZS5oIgogI2luY2x1ZGUgImZwYTExLmlubCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2ZwbW9kdWxlLmMgYi9hcmNoL2FybS9ud2ZwZS9mcG1vZHVsZS5jCmluZGV4IDdkOTc3ZDIuLjRjMGFiNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL2ZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBtb2R1bGUuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImZwYTExLmgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogWFhYICovCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmMgYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5jCmluZGV4IDY3ZmYyYWIuLjkyMmI4MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmMKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuYwpAQCAtMTksNyArMTksNiBAQAogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImZwYTExLmgiCiAjaW5jbHVkZSAic29mdGZsb2F0LmgiCiAjaW5jbHVkZSAiZnBvcGNvZGUuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmggYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCmluZGV4IDY1MjhlMDguLmVjNzhlMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmgKKysrIGIvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuaApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBfX0ZQT1BDT0RFX0hfXwogI2RlZmluZSBfX0ZQT1BDT0RFX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiBBUk0gRmxvYXRpbmcgUG9pbnQgSW5zdHJ1Y3Rpb24gQ2xhc3NlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmggYi9hcmNoL2FybS9ud2ZwZS9zb2Z0ZmxvYXQuaAppbmRleCA5NzhjNjk5Li5lMTEyNWJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ud2ZwZS9zb2Z0ZmxvYXQuaAorKysgYi9hcmNoL2FybS9ud2ZwZS9zb2Z0ZmxvYXQuaApAQCAtMzIsNyArMzIsNiBAQAogI2lmbmRlZiBfX1NPRlRGTE9BVF9IX18KICNkZWZpbmUgX19TT0ZURkxPQVRfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3hzY2FsZS5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMKaW5kZXggZTBmMGIzMi4uMzRmZGM3MzM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJaW50IHJldDsKIAl1MzIgcG1uYyA9IHJlYWRfcG1uYygpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoWFNDQUxFX1BNVV9JUlEsIHhzY2FsZV9wbXVfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCisJcmV0ID0gcmVxdWVzdF9pcnEoWFNDQUxFX1BNVV9JUlEsIHhzY2FsZV9wbXVfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkJIlhTY2FsZSBQTVUiLCAodm9pZCAqKXJlc3VsdHMpOwogCiAJaWYgKHJldCA8IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggZWM0OTQ5NS4uZWM3NTJlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTkxLDcgKzkxLDcgQEAKIAogY29uZmlnIE9NQVBfRE1fVElNRVIKIAlib29sICJVc2UgZHVhbC1tb2RlIHRpbWVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYCiAJaGVscAogCSBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIE9NQVAgRHVhbC1Nb2RlIHRpbWVycy4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCAzMmVjMDRjLi43ZjQ1YzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMTEsNyArMTEsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjgsOSArMjcsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KIAotTElTVF9IRUFEKGNsb2Nrcyk7CitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGNsb2Nrc19tdXRleCk7Ci1ERUZJTkVfU1BJTkxPQ0soY2xvY2tmd19sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tmd19sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zICphcmNoX2Nsb2NrOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggYWRmZmM1YS4uNTdiN2I5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtNyw3ICs3LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKaW5kZXggOThlZGM5Zi4uYTBjNzFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMKQEAgLTI1LDYgKzI1LDE0IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCisjZGVmaW5lIFZFUllfSElfUkFURQk5MDAwMDAwMDAKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisjZGVmaW5lIE1QVV9DTEsJCSJtcHUiCisjZWxzZQorI2RlZmluZSBNUFVfQ0xLCQkidmlydF9wcmNtX3NldCIKKyNlbmRpZgorCiAvKiBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgU0RSQU0gdGltaW5nIGNoYW5nZXMgKi8KIAogaW50IG9tYXBfdmVyaWZ5X3NwZWVkKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQpAQCAtMzYsNyArNDQsNyBAQAogCiAJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwKIAkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7Ci0JbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgIm1wdSIpOworCW1wdV9jbGsgPSBjbGtfZ2V0KE5VTEwsIE1QVV9DTEspOwogCWlmIChJU19FUlIobXB1X2NsaykpCiAJCXJldHVybiBQVFJfRVJSKG1wdV9jbGspOwogCXBvbGljeS0+bWluID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgcG9saWN5LT5taW4gKiAxMDAwKSAvIDEwMDA7CkBAIC01Niw3ICs2NCw3IEBACiAJaWYgKGNwdSkKIAkJcmV0dXJuIDA7CiAKLQltcHVfY2xrID0gY2xrX2dldChOVUxMLCAibXB1Iik7CisJbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgTVBVX0NMSyk7CiAJaWYgKElTX0VSUihtcHVfY2xrKSkKIAkJcmV0dXJuIDA7CiAJcmF0ZSA9IGNsa19nZXRfcmF0ZShtcHVfY2xrKSAvIDEwMDA7CkBAIC03Myw3ICs4MSw3IEBACiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJaW50IHJldCA9IDA7CiAKLQltcHVfY2xrID0gY2xrX2dldChOVUxMLCAibXB1Iik7CisJbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgTVBVX0NMSyk7CiAJaWYgKElTX0VSUihtcHVfY2xrKSkKIAkJcmV0dXJuIFBUUl9FUlIobXB1X2Nsayk7CiAKQEAgLTkzLDcgKzEwMSw3IEBACiB7CiAJc3RydWN0IGNsayAqIG1wdV9jbGs7CiAKLQltcHVfY2xrID0gY2xrX2dldChOVUxMLCAibXB1Iik7CisJbXB1X2NsayA9IGNsa19nZXQoTlVMTCwgTVBVX0NMSyk7CiAJaWYgKElTX0VSUihtcHVfY2xrKSkKIAkJcmV0dXJuIFBUUl9FUlIobXB1X2Nsayk7CiAKQEAgLTEwMiw3ICsxMTAsNyBAQAogCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IG9tYXBfZ2V0c3BlZWQoMCk7CiAJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLCAwKSAvIDEwMDA7Ci0JcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgMjE2MDAwMDAwKSAvIDEwMDA7CisJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgVkVSWV9ISV9SQVRFKSAvIDEwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKIAljbGtfcHV0KG1wdV9jbGspOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA1ZDVkNmViLi4xODEyZjIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTksNyArOSw2IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMDUsNyArMTA0LDcgQEAKIAkJb21hcF9jZmdfcmVnKEUyMF8xNjEwX0tCUjMpOwogCQlvbWFwX2NmZ19yZWcoRTE5XzE2MTBfS0JSNCk7CiAJCW9tYXBfY2ZnX3JlZyhOMTlfMTYxMF9LQlI1KTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKSB7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSB8fCBtYWNoaW5lX2lzX29tYXBfZnNhbXBsZSgpKSB7CiAJCW9tYXBfY2ZnX3JlZyhFMl83MzBfS0JSMCk7CiAJCW9tYXBfY2ZnX3JlZyhKN183MzBfS0JSMSk7CiAJCW9tYXBfY2ZnX3JlZyhFMV83MzBfS0JSMik7CkBAIC0xNjIsOCArMTYxLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMxX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpLAotCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpICsgMHg3ZiwKKwkJLnN0YXJ0CQk9IE9NQVBfTU1DMV9CQVNFLAorCQkuZW5kCQk9IE9NQVBfTU1DMV9CQVNFICsgMHg3ZiwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJewpAQCAtMTkxLDggKzE5MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMl9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSwKLQkJLmVuZAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSArIDB4N2YsCisJCS5zdGFydAkJPSBPTUFQX01NQzJfQkFTRSwKKwkJLmVuZAkJPSBPTUFQX01NQzJfQkFTRSArIDB4N2YsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCA1ZGFjNDIzLi45ZWRkYzk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0yNCw5ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00Myw2ICs0Myw3IEBACiAKICNkZWZpbmUgT01BUF9ETUFfQUNUSVZFCQkweDAxCiAjZGVmaW5lIE9NQVBfRE1BX0NDUl9FTgkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLCTB4ZmZlCiAKICNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkoMHhmZmZlMTAwMCArIDB4ZWMpCiAKQEAgLTE2NiwxOCArMTY3LDI0IEBACiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpICYmIGRtYV90cmlnZ2VyKSB7CiAJCXUzMiB2YWwgPSBPTUFQX0RNQV9DQ1JfUkVHKGxjaCk7CiAKKwkJdmFsICY9IH4oMyA8PCAxOSk7CiAJCWlmIChkbWFfdHJpZ2dlciA+IDYzKQogCQkJdmFsIHw9IDEgPDwgMjA7CiAJCWlmIChkbWFfdHJpZ2dlciA+IDMxKQogCQkJdmFsIHw9IDEgPDwgMTk7CiAKKwkJdmFsICY9IH4oMHgxZik7CiAJCXZhbCB8PSAoZG1hX3RyaWdnZXIgJiAweDFmKTsKIAogCQlpZiAoc3luY19tb2RlICYgT01BUF9ETUFfU1lOQ19GUkFNRSkKIAkJCXZhbCB8PSAxIDw8IDU7CisJCWVsc2UKKwkJCXZhbCAmPSB+KDEgPDwgNSk7CiAKIAkJaWYgKHN5bmNfbW9kZSAmIE9NQVBfRE1BX1NZTkNfQkxPQ0spCiAJCQl2YWwgfD0gMSA8PCAxODsKKwkJZWxzZQorCQkJdmFsICY9IH4oMSA8PCAxOCk7CiAKIAkJaWYgKHNyY19vcl9kc3Rfc3luY2gpCiAJCQl2YWwgfD0gMSA8PCAyNDsJCS8qIHNvdXJjZSBzeW5jaCAqLwpAQCAtMjg2LDIyICsyOTMsMzkgQEAKIAogdm9pZCBvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpCiB7CisJdW5zaWduZWQgaW50IGJ1cnN0ID0gMDsKIAlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCA3KTsKIAogCXN3aXRjaCAoYnVyc3RfbW9kZSkgewogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF9ESVM6CiAJCWJyZWFrOwogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF80OgotCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgweDAyIDw8IDcpOworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCQlidXJzdCA9IDB4MTsKKwkJZWxzZQorCQkJYnVyc3QgPSAweDI7CiAJCWJyZWFrOwogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF84OgotCQkvKiBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgaGFyZHdhcmUKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQlidXJzdCA9IDB4MjsKKwkJCWJyZWFrOworCQl9CisJCS8qIG5vdCBzdXBwb3J0ZWQgYnkgY3VycmVudCBoYXJkd2FyZSBvbiBPTUFQMQogCQkgKiB3IHw9ICgweDAzIDw8IDcpOwogCQkgKiBmYWxsIHRocm91Z2gKIAkJICovCisJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2OgorCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCWJ1cnN0ID0gMHgzOworCQkJYnJlYWs7CisJCX0KKwkJLyogT01BUDEgZG9uJ3Qgc3VwcG9ydCBidXJzdCAxNgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQorCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKGJ1cnN0IDw8IDcpOwogfQogCiAvKiBOb3RlIHRoYXQgZGVzdF9wb3J0IGlzIG9ubHkgZm9yIE9NQVAxICovCkBAIC0zNDgsMzAgKzM3Miw0OSBAQAogCiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpCiB7CisJdW5zaWduZWQgaW50IGJ1cnN0ID0gMDsKIAlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxNCk7CiAKIAlzd2l0Y2ggKGJ1cnN0X21vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfRElTOgogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfNDoKLQkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSAoMHgwMiA8PCAxNCk7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWJ1cnN0ID0gMHgxOworCQllbHNlCisJCQlidXJzdCA9IDB4MjsKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzg6Ci0JCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDMgPDwgMTQpOworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCQlidXJzdCA9IDB4MjsKKwkJZWxzZQorCQkJYnVyc3QgPSAweDM7CiAJCWJyZWFrOworCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF8xNjoKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQlidXJzdCA9IDB4MzsKKwkJCWJyZWFrOworCQl9CisJCS8qIE9NQVAxIGRvbid0IHN1cHBvcnQgYnVyc3QgMTYKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBETUEgYnVyc3QgbW9kZVxuIik7CiAJCUJVRygpOwogCQlyZXR1cm47CiAJfQorCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKGJ1cnN0IDw8IDE0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfZW5hYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpCiB7CiAJdTMyIHN0YXR1czsKIAotCS8qIFJlYWQgQ1NSIHRvIG1ha2Ugc3VyZSBpdCdzIGNsZWFyZWQuICovCi0Jc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhsY2gpOworCS8qIENsZWFyIENTUiAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhsY2gpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlPTUFQX0RNQV9DU1JfUkVHKGxjaCkgPSBPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0s7CiAKIAkvKiBFbmFibGUgc29tZSBuaWNlIGludGVycnVwdHMuICovCiAJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IGRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzOwpAQCAtNDcwLDExICs1MTMsMTMgQEAKIAljaGFuLT5kZXZfbmFtZSA9IGRldl9uYW1lOwogCWNoYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJY2hhbi0+ZGF0YSA9IGRhdGE7Ci0JY2hhbi0+ZW5hYmxlZF9pcnFzID0gT01BUF9ETUFfVE9VVF9JUlEgfCBPTUFQX0RNQV9EUk9QX0lSUSB8Ci0JCQkJT01BUF9ETUFfQkxPQ0tfSVJROworCWNoYW4tPmVuYWJsZWRfaXJxcyA9IE9NQVBfRE1BX0RST1BfSVJRIHwgT01BUF9ETUFfQkxPQ0tfSVJROwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQljaGFuLT5lbmFibGVkX2lycXMgfD0gT01BUDJfRE1BX1RSQU5TX0VSUl9JUlE7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQljaGFuLT5lbmFibGVkX2lycXMgfD0gT01BUDFfRE1BX1RPVVRfSVJROworCWVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQljaGFuLT5lbmFibGVkX2lycXMgfD0gT01BUDJfRE1BX01JU0FMSUdORURfRVJSX0lSUSB8CisJCQlPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUTsKIAogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewogCQkvKiBJZiB0aGUgc3luYyBkZXZpY2UgaXMgc2V0LCBjb25maWd1cmUgaXQgZHluYW1pY2FsbHkuICovCkBAIC00OTQsNyArNTM5LDcgQEAKIAogCQlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShmcmVlX2NoKTsKIAkJLyogQ2xlYXIgdGhlIENTUiByZWdpc3RlciBhbmQgSVJRIHN0YXR1cyByZWdpc3RlciAqLwotCQlPTUFQX0RNQV9DU1JfUkVHKGZyZWVfY2gpID0gMHgwOworCQlPTUFQX0RNQV9DU1JfUkVHKGZyZWVfY2gpID0gT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLOwogCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKIAl9CiAKQEAgLTUzNCw3ICs1NzksNyBAQAogCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOwogCiAJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJT01BUF9ETUFfQ1NSX1JFRyhsY2gpID0gMHgwOworCQlPTUFQX0RNQV9DU1JfUkVHKGxjaCkgPSBPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0s7CiAKIAkJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKIAkJdmFsIHw9IDEgPDwgbGNoOwpAQCAtNzk4LDcgKzg0Myw3IEBACiAJCSAgICAgICAiJWQgKENTUiAlMDR4KVxuIiwgY2gsIGNzcik7CiAJCXJldHVybiAwOwogCX0KLQlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfVE9VVF9JUlEpKQorCWlmICh1bmxpa2VseShjc3IgJiBPTUFQMV9ETUFfVE9VVF9JUlEpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgdGltZW91dCB3aXRoIGRldmljZSAlZFxuIiwKIAkJICAgICAgIGRtYV9jaGFuW2NoXS5kZXZfaWQpOwogCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9EUk9QX0lSUSkpCkBAIC04NDYsMjAgKzg5MSwyMSBAQAogCQlyZXR1cm4gMDsKIAlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpCiAJCXJldHVybiAwOwotCS8qIFJFVklTSVQ6IEFjY29yZGluZyB0byAyNHh4IFRSTSwgdGhlcmUncyBubyBUT1VUX0lFICovCi0JaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVBfRE1BX1RPVVRfSVJRKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHRpbWVvdXQgd2l0aCBkZXZpY2UgJWRcbiIsCi0JCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEpKQogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkIHdpdGggZGV2aWNlICIKIAkJICAgICAgICIlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7Ci0KIAlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEpKQogCQlwcmludGsoS0VSTl9JTkZPICJETUEgdHJhbnNhY3Rpb24gZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCiAJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUDJfRE1BX1NFQ1VSRV9FUlJfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHNlY3VyZSBlcnJvciB3aXRoIGRldmljZSAlZFxuIiwKKwkJICAgICAgIGRtYV9jaGFuW2NoXS5kZXZfaWQpOworCWlmICh1bmxpa2VseShzdGF0dXMgJiBPTUFQMl9ETUFfTUlTQUxJR05FRF9FUlJfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIG1pc2FsaWduZWQgZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKIAotCU9NQVBfRE1BX0NTUl9SRUcoY2gpID0gMHgyMDsKKwlPTUFQX0RNQV9DU1JfUkVHKGNoKSA9IE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSzsKIAogCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CiAJLyogY2ggaW4gdGhpcyBmdW5jdGlvbiBpcyBmcm9tIDAtMzEgd2hpbGUgaW4gcmVnaXN0ZXIgaXQgaXMgMS0zMiAqLwpAQCAtODkzLDcgKzkzOSw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwMjR4eF9kbWFfaXJxID0gewogCS5uYW1lID0gIkRNQSIsCiAJLmhhbmRsZXIgPSBvbWFwMl9kbWFfaXJxX2hhbmRsZXIsCi0JLmZsYWdzID0gU0FfSU5URVJSVVBUCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRAogfTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCmluZGV4IGViYTNjYjUuLjUwNTI0NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwpAQCAtNCw3ICs0LDggQEAKICAqIE9NQVAgRHVhbC1Nb2RlIFRpbWVycwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgotICogQXV0aG9yOiBMYXVyaSBMZXVra3VuZW4gPGxhdXJpLmxldWtrdW5lbkBub2tpYS5jb20+CisgKiBPTUFQMiBzdXBwb3J0IGJ5IEp1aGEgWXJqb2xhCisgKiBBUEkgaW1wcm92ZW1lbnRzIGFuZCBPTUFQMiBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydCBieSBUaW1vIFRlcmFzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjYsMTUgKzI3LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZG10aW1lci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAotI2RlZmluZSBPTUFQX1RJTUVSX0NPVU5UCQk4Ci0KKy8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgT01BUF9USU1FUl9JRF9SRUcJCTB4MDAKICNkZWZpbmUgT01BUF9USU1FUl9PQ1BfQ0ZHX1JFRwkJMHgxMAogI2RlZmluZSBPTUFQX1RJTUVSX1NZU19TVEFUX1JFRwkJMHgxNApAQCAtNTAsNTIgKzUzLDE5NiBAQAogI2RlZmluZSBPTUFQX1RJTUVSX0NBUFRVUkVfUkVHCQkweDNjCiAjZGVmaW5lIE9NQVBfVElNRVJfSUZfQ1RSTF9SRUcJCTB4NDAKIAorLyogdGltZXIgY29udHJvbCByZWcgYml0cyAqLworI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfR1BPQ0ZHCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX0NBUFRNT0RFCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfUFQJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVENNX0xPV1RPSElHSAkoMHgxIDw8IDgpCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9UQ01fSElHSFRPTE9XCSgweDIgPDwgOCkKKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RDTV9CT1RIRURHRVMJKDB4MyA8PCA4KQorI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfU0NQV00JCSgxIDw8IDcpCisjZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9DRQkJKDEgPDwgNikJLyogY29tcGFyZSBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BSRQkJKDEgPDwgNSkJLyogcHJlc2NhbGVyIGVuYWJsZSAqLworI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfUFRWX1NISUZUCTIJCS8qIGhvdyBtdWNoIHRvIHNoaWZ0IHRoZSBwcmVzY2FsZXIgdmFsdWUgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX0FSCQkoMSA8PCAxKQkvKiBhdXRvLXJlbG9hZCBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1NUCQkoMSA8PCAwKQkvKiBzdGFydCB0aW1lciAqLwogCi1zdGF0aWMgc3RydWN0IGRtdGltZXJfaW5mb19zdHJ1Y3QgewotCXN0cnVjdCBsaXN0X2hlYWQJdW51c2VkX3RpbWVyczsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJlc2VydmVkX3RpbWVyczsKLX0gZG1fdGltZXJfaW5mbzsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIGRtX3RpbWVyc1tdID0gewotCXsgLmJhc2U9MHhmZmZiMTQwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSMSB9LAotCXsgLmJhc2U9MHhmZmZiMWMwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSMiB9LAotCXsgLmJhc2U9MHhmZmZiMjQwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSMyB9LAotCXsgLmJhc2U9MHhmZmZiMmMwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSNCB9LAotCXsgLmJhc2U9MHhmZmZiMzQwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSNSB9LAotCXsgLmJhc2U9MHhmZmZiM2MwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSNiB9LAotCXsgLmJhc2U9MHhmZmZiNDQwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSNyB9LAotCXsgLmJhc2U9MHhmZmZiNGMwMCwgLmlycT1JTlRfMTYxMF9HUFRJTUVSOCB9LAotCXsgLmJhc2U9MHgwIH0sCitzdHJ1Y3Qgb21hcF9kbV90aW1lciB7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisJaW50IGlycTsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCXN0cnVjdCBjbGsgKmljbGssICpmY2xrOworI2VuZGlmCisJdm9pZCBfX2lvbWVtICppb19iYXNlOworCXVuc2lnbmVkIHJlc2VydmVkOjE7CiB9OwogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIAorc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIGRtX3RpbWVyc1tdID0geworCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjE0MDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSMSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjFjMDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSMiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjI0MDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSMyB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjJjMDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSNCB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjM0MDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSNSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjNjMDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSNiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjQ0MDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSNyB9LAorCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjRjMDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSOCB9LAorfTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKworc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIGRtX3RpbWVyc1tdID0geworCXsgLnBoeXNfYmFzZSA9IDB4NDgwMjgwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwMmEwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwNzgwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMyB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwN2EwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSNCB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwN2MwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSNSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwN2UwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSNiB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwODAwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSNyB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwODIwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSOCB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwODQwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSOSB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwODYwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMTAgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDQ4MDg4MDAwLCAuaXJxID0gSU5UXzI0WFhfR1BUSU1FUjExIH0sCisJeyAucGh5c19iYXNlID0gMHg0ODA4YTAwMCwgLmlycSA9IElOVF8yNFhYX0dQVElNRVIxMiB9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRtX3NvdXJjZV9uYW1lc1tdID0geworCSJzeXNfY2siLAorCSJmdW5jXzMya19jayIsCisJImFsdF9jayIKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpkbV9zb3VyY2VfY2xvY2tzWzNdOworCisjZWxzZQorCisjZXJyb3IgT01BUCBhcmNoaXRlY3R1cmUgbm90IHN1cHBvcnRlZCEKKworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBpbnQgZG1fdGltZXJfY291bnQgPSBBUlJBWV9TSVpFKGRtX3RpbWVycyk7CiBzdGF0aWMgc3BpbmxvY2tfdCBkbV90aW1lcl9sb2NrOwogCi0KLWlubGluZSB2b2lkIG9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHJlZywgdTMyIHZhbHVlKQorc3RhdGljIGlubGluZSB1MzIgb21hcF9kbV90aW1lcl9yZWFkX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcpCiB7Ci0Jb21hcF93cml0ZWwodmFsdWUsIHRpbWVyLT5iYXNlICsgcmVnKTsKKwlyZXR1cm4gcmVhZGwodGltZXItPmlvX2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIHRpbWVyLT5pb19iYXNlICsgcmVnKTsKIAl3aGlsZSAob21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9XUklURV9QRU5EX1JFRykpCiAJCTsKIH0KIAotdTMyIG9tYXBfZG1fdGltZXJfcmVhZF9yZWcoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcmVnKQorc3RhdGljIHZvaWQgb21hcF9kbV90aW1lcl93YWl0X2Zvcl9yZXNldChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7Ci0JcmV0dXJuIG9tYXBfcmVhZGwodGltZXItPmJhc2UgKyByZWcpOworCWludCBjOworCisJYyA9IDA7CisJd2hpbGUgKCEob21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9TWVNfU1RBVF9SRUcpICYgMSkpIHsKKwkJYysrOworCQlpZiAoYyA+IDEwMDAwMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJUaW1lciBmYWlsZWQgdG8gcmVzZXRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQogfQogCi1pbnQgb21hcF9kbV90aW1lcnNfYWN0aXZlKHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwX2RtX3RpbWVyX3Jlc2V0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwl1MzIgbDsKKworCWlmICh0aW1lciAhPSAmZG1fdGltZXJzWzBdKSB7CisJCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0lGX0NUUkxfUkVHLCAweDA2KTsKKwkJb21hcF9kbV90aW1lcl93YWl0X2Zvcl9yZXNldCh0aW1lcik7CisJfQorCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSh0aW1lciwgT01BUF9USU1FUl9TUkNfU1lTX0NMSyk7CisKKwkvKiBTZXQgdG8gc21hcnQtaWRsZSBtb2RlICovCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfT0NQX0NGR19SRUcpOworCWwgfD0gMHgwMiA8PCAzOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX09DUF9DRkdfUkVHLCBsKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9kbV90aW1lcl9wcmVwYXJlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCWNsa19lbmFibGUodGltZXItPmljbGspOworCWNsa19lbmFibGUodGltZXItPmZjbGspOworI2VuZGlmCisJb21hcF9kbV90aW1lcl9yZXNldCh0aW1lcik7Cit9CisKK3N0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Qodm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBkbV90aW1lcl9jb3VudDsgaSsrKSB7CisJCWlmIChkbV90aW1lcnNbaV0ucmVzZXJ2ZWQpCisJCQljb250aW51ZTsKKworCQl0aW1lciA9ICZkbV90aW1lcnNbaV07CisJCXRpbWVyLT5yZXNlcnZlZCA9IDE7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbV90aW1lcl9sb2NrLCBmbGFncyk7CisKKwlpZiAodGltZXIgIT0gTlVMTCkKKwkJb21hcF9kbV90aW1lcl9wcmVwYXJlKHRpbWVyKTsKKworCXJldHVybiB0aW1lcjsKK30KKworc3RydWN0IG9tYXBfZG1fdGltZXIgKm9tYXBfZG1fdGltZXJfcmVxdWVzdF9zcGVjaWZpYyhpbnQgaWQpCiB7CiAJc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlmb3IgKHRpbWVyID0gJmRtX3RpbWVyc1swXTsgdGltZXItPmJhc2U7ICsrdGltZXIpCi0JCWlmIChvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKSAmCi0JCSAgICBPTUFQX1RJTUVSX0NUUkxfU1QpCi0JCQlyZXR1cm4gMTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOworCWlmIChpZCA8PSAwIHx8IGlkID4gZG1fdGltZXJfY291bnQgfHwgZG1fdGltZXJzW2lkLTFdLnJlc2VydmVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKCJCVUc6IHdhcm5pbmcgYXQgJXM6JWQvJXMoKTogdW5hYmxlIHRvIGdldCB0aW1lciAlZFxuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCBpZCk7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmV0dXJuIDA7CisJdGltZXIgPSAmZG1fdGltZXJzW2lkLTFdOworCXRpbWVyLT5yZXNlcnZlZCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOworCisJb21hcF9kbV90aW1lcl9wcmVwYXJlKHRpbWVyKTsKKworCXJldHVybiB0aW1lcjsKIH0KIAordm9pZCBvbWFwX2RtX3RpbWVyX2ZyZWUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCW9tYXBfZG1fdGltZXJfcmVzZXQodGltZXIpOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisJY2xrX2Rpc2FibGUodGltZXItPmljbGspOworCWNsa19kaXNhYmxlKHRpbWVyLT5mY2xrKTsKKyNlbmRpZgorCVdBUk5fT04oIXRpbWVyLT5yZXNlcnZlZCk7CisJdGltZXItPnJlc2VydmVkID0gMDsKK30KKworaW50IG9tYXBfZG1fdGltZXJfZ2V0X2lycShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisJcmV0dXJuIHRpbWVyLT5pcnE7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQorCitzdHJ1Y3QgY2xrICpvbWFwX2RtX3RpbWVyX2dldF9mY2xrKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwlCVUcoKTsKK30KIAogLyoqCiAgKiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayAtIENoZWNrIGlmIGFueSBydW5uaW5nIHRpbWVycyB1c2UgQVJNWE9SCkBAIC0xMDMsMjUgKzI1MCw3MCBAQAogICovCiBfX3UzMiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayhfX3UzMiBpbnB1dG1hc2spCiB7Ci0JaW50IG47CisJaW50IGk7CiAKIAkvKiBJZiBBUk1YT1IgY2Fubm90IGJlIGlkbGVkIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyB1bm5lY2Vzc2FyeSAqLwogCWlmICghKGlucHV0bWFzayAmICgxIDw8IDEpKSkKIAkJcmV0dXJuIGlucHV0bWFzazsKIAogCS8qIElmIGFueSBhY3RpdmUgdGltZXIgaXMgdXNpbmcgQVJNWE9SIHJldHVybiBtb2RpZmllZCBtYXNrICovCi0JZm9yIChuID0gMDsgZG1fdGltZXJzW25dLmJhc2U7ICsrbikKLQkJaWYgKG9tYXBfZG1fdGltZXJfcmVhZF9yZWcoJmRtX3RpbWVyc1tuXSwgT01BUF9USU1FUl9DVFJMX1JFRykmCi0JCSAgICBPTUFQX1RJTUVSX0NUUkxfU1QpIHsKLQkJCWlmICgoKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKT4+KG4qMikpICYgMHgwMykgPT0gMCkKKwlmb3IgKGkgPSAwOyBpIDwgZG1fdGltZXJfY291bnQ7IGkrKykgeworCQl1MzIgbDsKKworCQlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZygmZG1fdGltZXJzW2ldLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKKwkJaWYgKGwgJiBPTUFQX1RJTUVSX0NUUkxfU1QpIHsKKwkJCWlmICgoKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKSA+PiAoaSAqIDIpKSAmIDB4MDMpID09IDApCiAJCQkJaW5wdXRtYXNrICY9IH4oMSA8PCAxKTsKIAkJCWVsc2UKIAkJCQlpbnB1dG1hc2sgJj0gfigxIDw8IDIpOwogCQl9CisJfQogCiAJcmV0dXJuIGlucHV0bWFzazsKIH0KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKworc3RydWN0IGNsayAqb21hcF9kbV90aW1lcl9nZXRfZmNsayhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit7CisgICAgICAgIHJldHVybiB0aW1lci0+ZmNsazsKK30KKworX191MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2soX191MzIgaW5wdXRtYXNrKQoreworCUJVRygpOworfQorCisjZW5kaWYKKwordm9pZCBvbWFwX2RtX3RpbWVyX3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1RSSUdHRVJfUkVHLCAwKTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX3N0YXJ0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwl1MzIgbDsKKworCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKKwlpZiAoIShsICYgT01BUF9USU1FUl9DVFJMX1NUKSkgeworCQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9TVDsKKwkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworCX0KK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX3N0b3Aoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCXUzMiBsOworCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOworCWlmIChsICYgT01BUF9USU1FUl9DVFJMX1NUKSB7CisJCWwgJj0gfjB4MTsKKwkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworCX0KK30KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfc291cmNlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IHNvdXJjZSkKIHsKQEAgLTEzMyw0OSArMzI1LDg1IEBACiAJb21hcF93cml0ZWwobCwgTU9EX0NPTkZfQ1RSTF8xKTsKIH0KIAorI2Vsc2UKIAotc3RhdGljIHZvaWQgb21hcF9kbV90aW1lcl9yZXNldChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpCiB7Ci0JLyogUmVzZXQgYW5kIHNldCBwb3N0ZWQgbW9kZSAqLwotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0lGX0NUUkxfUkVHLCAweDA2KTsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9PQ1BfQ0ZHX1JFRywgMHgwMik7CisJaWYgKHNvdXJjZSA8IDAgfHwgc291cmNlID49IDMpCisJCXJldHVybjsKIAotCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSh0aW1lciwgT01BUF9USU1FUl9TUkNfQVJNWE9SKTsKKwljbGtfZGlzYWJsZSh0aW1lci0+ZmNsayk7CisJY2xrX3NldF9wYXJlbnQodGltZXItPmZjbGssIGRtX3NvdXJjZV9jbG9ja3Nbc291cmNlXSk7CisJY2xrX2VuYWJsZSh0aW1lci0+ZmNsayk7CisKKwkvKiBXaGVuIHRoZSBmdW5jdGlvbmFsIGNsb2NrIGRpc2FwcGVhcnMsIHRvbyBxdWljayB3cml0ZXMgc2VlbSB0bworCSAqIGNhdXNlIGFuIGFib3J0LiAqLworCV9fZGVsYXkoMTUwMDApOworfQorCisjZW5kaWYKKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGF1dG9yZWxvYWQsCisJCQkgICAgdW5zaWduZWQgaW50IGxvYWQpCit7CisJdTMyIGw7CisKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJaWYgKGF1dG9yZWxvYWQpCisJCWwgfD0gT01BUF9USU1FUl9DVFJMX0FSOworCWVsc2UKKwkJbCAmPSB+T01BUF9USU1FUl9DVFJMX0FSOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9MT0FEX1JFRywgbG9hZCk7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDApOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGVuYWJsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IG1hdGNoKQoreworCXUzMiBsOworCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOworCWlmIChlbmFibGUpCisJCWwgfD0gT01BUF9USU1FUl9DVFJMX0NFOworCWVsc2UKKwkJbCAmPSB+T01BUF9USU1FUl9DVFJMX0NFOworCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9NQVRDSF9SRUcsIG1hdGNoKTsKIH0KIAogCi0KLXN0cnVjdCBvbWFwX2RtX3RpbWVyICogb21hcF9kbV90aW1lcl9yZXF1ZXN0KHZvaWQpCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3B3bShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBkZWZfb24sCisJCQkgICBpbnQgdG9nZ2xlLCBpbnQgdHJpZ2dlcikKIHsKLQlzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOwotCWlmICghbGlzdF9lbXB0eSgmZG1fdGltZXJfaW5mby51bnVzZWRfdGltZXJzKSkgewotCQl0aW1lciA9IChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqKQotCQkJCWRtX3RpbWVyX2luZm8udW51c2VkX3RpbWVycy5uZXh0OwotCQlsaXN0X21vdmVfdGFpbCgoc3RydWN0IGxpc3RfaGVhZCAqKXRpbWVyLAotCQkJCSZkbV90aW1lcl9pbmZvLnJlc2VydmVkX3RpbWVycyk7CisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcpOworCWwgJj0gfihPTUFQX1RJTUVSX0NUUkxfR1BPQ0ZHIHwgT01BUF9USU1FUl9DVFJMX1NDUFdNIHwKKwkgICAgICAgT01BUF9USU1FUl9DVFJMX1BUIHwgKDB4MDMgPDwgMTApKTsKKwlpZiAoZGVmX29uKQorCQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9TQ1BXTTsKKwlpZiAodG9nZ2xlKQorCQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9QVDsKKwlsIHw9IHRyaWdnZXIgPDwgMTA7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOworfQorCit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3ByZXNjYWxlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBwcmVzY2FsZXIpCit7CisJdTMyIGw7CisKKwlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7CisJbCAmPSB+KE9NQVBfVElNRVJfQ1RSTF9QUkUgfCAoMHgwNyA8PCAyKSk7CisJaWYgKHByZXNjYWxlciA+PSAweDAwICYmIHByZXNjYWxlciA8PSAweDA3KSB7CisJCWwgfD0gT01BUF9USU1FUl9DVFJMX1BSRTsKKwkJbCB8PSBwcmVzY2FsZXIgPDwgMjsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHRpbWVyOwotfQotCi0KLXZvaWQgb21hcF9kbV90aW1lcl9mcmVlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jb21hcF9kbV90aW1lcl9yZXNldCh0aW1lcik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1fdGltZXJfbG9jaywgZmxhZ3MpOwotCWxpc3RfbW92ZV90YWlsKChzdHJ1Y3QgbGlzdF9oZWFkICopdGltZXIsICZkbV90aW1lcl9pbmZvLnVudXNlZF90aW1lcnMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiB9CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsCi0JCQkJdW5zaWduZWQgaW50IHZhbHVlKQorCQkJCSAgdW5zaWduZWQgaW50IHZhbHVlKQogewogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0lOVF9FTl9SRUcsIHZhbHVlKTsKIH0KQEAgLTE5MCw5NyArNDE4LDYxIEBACiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfU1RBVF9SRUcsIHZhbHVlKTsKIH0KIAotdm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZV9hdXRvcmVsb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKLXsKLQl1MzIgbDsKLQlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7Ci0JbCB8PSBPTUFQX1RJTUVSX0NUUkxfQVI7Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwotfQotCi12b2lkIG9tYXBfZG1fdGltZXJfdHJpZ2dlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCi17Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDEpOwotfQotCi12b2lkIG9tYXBfZG1fdGltZXJfc2V0X3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTMyIGw7Ci0KLQlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7Ci0JbCB8PSB2YWx1ZSAmIDB4MzsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7Ci19Ci0KLXZvaWQgb21hcF9kbV90aW1lcl9zdGFydChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCi17Ci0JdTMyIGw7Ci0KLQlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7Ci0JbCB8PSBPTUFQX1RJTUVSX0NUUkxfU1Q7Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwotfQotCi12b2lkIG9tYXBfZG1fdGltZXJfc3RvcChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCi17Ci0JdTMyIGw7Ci0KLQlsID0gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRyk7Ci0JbCAmPSB+MHgxOwotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKLX0KLQogdW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKIAlyZXR1cm4gb21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRyk7CiB9CiAKLXZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3ZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKQogewotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NPVU5URVJfUkVHLCAwKTsKKwlyZXR1cm4gb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ09VTlRFUl9SRUcsIHZhbHVlKTsKIH0KIAotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IGxvYWQpCitpbnQgb21hcF9kbV90aW1lcnNfYWN0aXZlKHZvaWQpCiB7Ci0Jb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfTE9BRF9SRUcsIGxvYWQpOwotfQorCWludCBpOwogCi12b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IG1hdGNoKQotewotCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX01BVENIX1JFRywgbWF0Y2gpOwotfQorCWZvciAoaSA9IDA7IGkgPCBkbV90aW1lcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcjsKIAotdm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZV9jb21wYXJlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKLXsKLQl1MzIgbDsKLQotCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKLQlsIHw9IE9NQVBfVElNRVJfQ1RSTF9DRTsKLQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZG1fdGltZXJfaW5pdCh2b2lkKQotewotCXN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcjsKLQotCXNwaW5fbG9ja19pbml0KCZkbV90aW1lcl9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmZG1fdGltZXJfaW5mby51bnVzZWRfdGltZXJzKTsKLQlJTklUX0xJU1RfSEVBRCgmZG1fdGltZXJfaW5mby5yZXNlcnZlZF90aW1lcnMpOwotCi0JdGltZXIgPSAmZG1fdGltZXJzWzBdOwotCXdoaWxlICh0aW1lci0+YmFzZSkgewotCQlsaXN0X2FkZF90YWlsKChzdHJ1Y3QgbGlzdF9oZWFkICopdGltZXIsICZkbV90aW1lcl9pbmZvLnVudXNlZF90aW1lcnMpOwotCQlvbWFwX2RtX3RpbWVyX3Jlc2V0KHRpbWVyKTsKLQkJdGltZXIrKzsKKwkJdGltZXIgPSAmZG1fdGltZXJzW2ldOworCQlpZiAob21hcF9kbV90aW1lcl9yZWFkX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRykgJgorCQkgICAgT01BUF9USU1FUl9DVFJMX1NUKQorCQkJcmV0dXJuIDE7CiAJfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2RtX3RpbWVyX2luaXQodm9pZCkKLXsKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCV9fZG1fdGltZXJfaW5pdCgpOwogCXJldHVybiAwOwogfQogCi1hcmNoX2luaXRjYWxsKG9tYXBfZG1fdGltZXJfaW5pdCk7CitpbnQgb21hcF9kbV90aW1lcl9pbml0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyOworCWludCBpOworCisJaWYgKCEoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXAyNHh4KCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pbml0KCZkbV90aW1lcl9sb2NrKTsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRtX3NvdXJjZV9uYW1lcyk7IGkrKykgeworCQlkbV9zb3VyY2VfY2xvY2tzW2ldID0gY2xrX2dldChOVUxMLCBkbV9zb3VyY2VfbmFtZXNbaV0pOworCQlCVUdfT04oZG1fc291cmNlX2Nsb2Nrc1tpXSA9PSBOVUxMKTsKKwl9CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBkbV90aW1lcl9jb3VudDsgaSsrKSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwkJY2hhciBjbGtfbmFtZVsxNl07CisjZW5kaWYKKworCQl0aW1lciA9ICZkbV90aW1lcnNbaV07CisJCXRpbWVyLT5pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKSBpb19wMnYodGltZXItPnBoeXNfYmFzZSk7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwkJc3ByaW50ZihjbGtfbmFtZSwgImdwdCVkX2ljayIsIGkgKyAxKTsKKwkJdGltZXItPmljbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKwkJc3ByaW50ZihjbGtfbmFtZSwgImdwdCVkX2ZjayIsIGkgKyAxKTsKKwkJdGltZXItPmZjbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKyNlbmRpZgorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZmIuYwppbmRleCAzMDVlOWI5Li41NmFjYjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZmIuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZmIuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBkM2M4ZWE3Li5mZWM3OTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTUzNyw2ICs1MzYsNDkgQEAKIAlfY2xlYXJfZ3Bpb19pcnFiYW5rKGJhbmssIDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpOwogfQogCitzdGF0aWMgdTMyIF9nZXRfZ3Bpb19pcnFiYW5rX21hc2soc3RydWN0IGdwaW9fYmFuayAqYmFuaykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGJhbmstPmJhc2U7CisJaW50IGludiA9IDA7CisJdTMyIGw7CisJdTMyIG1hc2s7CisKKwlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgeworCWNhc2UgTUVUSE9EX01QVUlPOgorCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX01BU0tJVDsKKwkJbWFzayA9IDB4ZmZmZjsKKwkJaW52ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18xNTEwOgorCQlyZWcgKz0gT01BUDE1MTBfR1BJT19JTlRfTUFTSzsKKwkJbWFzayA9IDB4ZmZmZjsKKwkJaW52ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNRVRIT0RfR1BJT18xNjEwOgorCQlyZWcgKz0gT01BUDE2MTBfR1BJT19JUlFFTkFCTEUxOworCQltYXNrID0gMHhmZmZmOworCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzczMDoKKwkJcmVnICs9IE9NQVA3MzBfR1BJT19JTlRfTUFTSzsKKwkJbWFzayA9IDB4ZmZmZmZmZmY7CisJCWludiA9IDE7CisJCWJyZWFrOworCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJcmVnICs9IE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMTsKKwkJbWFzayA9IDB4ZmZmZmZmZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsID0gX19yYXdfcmVhZGwocmVnKTsKKwlpZiAoaW52KQorCQlsID0gfmw7CisJbCAmPSBtYXNrOworCXJldHVybiBsOworfQorCiBzdGF0aWMgdm9pZCBfZW5hYmxlX2dwaW9faXJxYmFuayhzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3Bpb19tYXNrLCBpbnQgZW5hYmxlKQogewogCXZvaWQgX19pb21lbSAqcmVnID0gYmFuay0+YmFzZTsKQEAgLTczNiwxMCArNzc4LDEyIEBACiAJdTMyIGlzcjsKIAl1bnNpZ25lZCBpbnQgZ3Bpb19pcnE7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKKwl1MzIgcmV0cmlnZ2VyID0gMDsKKwlpbnQgdW5tYXNrZWQgPSAwOwogCiAJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAKLQliYW5rID0gKHN0cnVjdCBncGlvX2JhbmsgKikgZGVzYy0+ZGF0YTsKKwliYW5rID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfTVBVSU8pCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX0lOVDsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWApAQCAtNzYwLDE4ICs4MDQsMjIgQEAKICNlbmRpZgogCXdoaWxlKDEpIHsKIAkJdTMyIGlzcl9zYXZlZCwgbGV2ZWxfbWFzayA9IDA7CisJCXUzMiBlbmFibGVkOwogCi0JCWlzcl9zYXZlZCA9IGlzciA9IF9fcmF3X3JlYWRsKGlzcl9yZWcpOworCQllbmFibGVkID0gX2dldF9ncGlvX2lycWJhbmtfbWFzayhiYW5rKTsKKwkJaXNyX3NhdmVkID0gaXNyID0gX19yYXdfcmVhZGwoaXNyX3JlZykgJiBlbmFibGVkOwogCiAJCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykpCiAJCQlpc3IgJj0gMHgwMDAwZmZmZjsKIAotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQkJbGV2ZWxfbWFzayA9CiAJCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCiAJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKSB8CiAJCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCiAJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKKwkJCWxldmVsX21hc2sgJj0gZW5hYmxlZDsKKwkJfQogCiAJCS8qIGNsZWFyIGVkZ2Ugc2Vuc2l0aXZlIGludGVycnVwdHMgYmVmb3JlIGhhbmRsZXIocykgYXJlCiAJCWNhbGxlZCBzbyB0aGF0IHdlIGRvbid0IG1pc3MgYW55IGludGVycnVwdCBvY2N1cnJlZCB3aGlsZQpAQCAtNzgyLDE5ICs4MzAsNTUgQEAKIAogCQkvKiBpZiB0aGVyZSBpcyBvbmx5IGVkZ2Ugc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdHMKIAkJY29uZmlndXJlZCwgd2UgY291bGQgdW5tYXNrIEdQSU8gYmFuayBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgKi8KLQkJaWYgKCFsZXZlbF9tYXNrKQorCQlpZiAoIWxldmVsX21hc2sgJiYgIXVubWFza2VkKSB7CisJCQl1bm1hc2tlZCA9IDE7CiAJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJfQogCisJCWlzciB8PSByZXRyaWdnZXI7CisJCXJldHJpZ2dlciA9IDA7CiAJCWlmICghaXNyKQogCQkJYnJlYWs7CiAKIAkJZ3Bpb19pcnEgPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydDsKIAkJZm9yICg7IGlzciAhPSAwOyBpc3IgPj49IDEsIGdwaW9faXJxKyspIHsKIAkJCXN0cnVjdCBpcnFkZXNjICpkOworCQkJaW50IGlycV9tYXNrOwogCQkJaWYgKCEoaXNyICYgMSkpCiAJCQkJY29udGludWU7CiAJCQlkID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKKwkJCS8qIERvbid0IHJ1biB0aGUgaGFuZGxlciBpZiBpdCdzIGFscmVhZHkgcnVubmluZworCQkJICogb3Igd2FzIGRpc2FibGVkIGxhemVseS4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KChkLT5kZXB0aCB8fAorCQkJCSAgICAgIChkLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpKSkgeworCQkJCWlycV9tYXNrID0gMSA8PAorCQkJCQkoZ3Bpb19pcnEgLSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydCk7CisJCQkJLyogVGhlIHVubWFza2luZyB3aWxsIGJlIGRvbmUgYnkKKwkJCQkgKiBlbmFibGVfaXJxIGluIGNhc2UgaXQgaXMgZGlzYWJsZWQgb3IKKwkJCQkgKiBhZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgaGFuZGxlciBpZgorCQkJCSAqIGl0J3MgYWxyZWFkeSBydW5uaW5nLgorCQkJCSAqLworCQkJCV9lbmFibGVfZ3Bpb19pcnFiYW5rKGJhbmssIGlycV9tYXNrLCAwKTsKKwkJCQlpZiAoIWQtPmRlcHRoKSB7CisJCQkJCS8qIExldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzCisJCQkJCSAqIHdvbid0IGV2ZXIgYmUgcmVlbnRlcmVkCisJCQkJCSAqLworCQkJCQlCVUdfT04obGV2ZWxfbWFzayAmIGlycV9tYXNrKTsKKwkJCQkJZC0+c3RhdHVzIHw9IElSUV9QRU5ESU5HOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKKworCQkJaWYgKHVubGlrZWx5KChkLT5zdGF0dXMgJiBJUlFfUEVORElORykgJiYgIWQtPmRlcHRoKSkgeworCQkJCWlycV9tYXNrID0gMSA8PAorCQkJCQkoZ3Bpb19pcnEgLSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydCk7CisJCQkJZC0+c3RhdHVzICY9IH5JUlFfUEVORElORzsKKwkJCQlfZW5hYmxlX2dwaW9faXJxYmFuayhiYW5rLCBpcnFfbWFzaywgMSk7CisJCQkJcmV0cmlnZ2VyIHw9IGlycV9tYXNrOworCQkJfQogCQl9CiAKIAkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CkBAIC04MDQsMTMgKzg4OCwxNCBAQAogCQkJX2VuYWJsZV9ncGlvX2lycWJhbmsoYmFuaywgaXNyX3NhdmVkICYgbGV2ZWxfbWFzaywgMSk7CiAJCX0KIAotCQkvKiBpZiBiYW5rIGhhcyBhbnkgbGV2ZWwgc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdAotCQljb25maWd1cmVkLCB3ZSBtdXN0IHVubWFzayB0aGUgYmFuayBpbnRlcnJ1cHQgb25seSBhZnRlcgotCQloYW5kbGVyKHMpIGFyZSBleGVjdXRlZCBpbiBvcmRlciB0byBhdm9pZCBzcHVyaW91cyBiYW5rCi0JCWludGVycnVwdCAqLwotCQlpZiAobGV2ZWxfbWFzaykKLQkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCX0KKwkvKiBpZiBiYW5rIGhhcyBhbnkgbGV2ZWwgc2Vuc2l0aXZlIEdQSU8gcGluIGludGVycnVwdAorCWNvbmZpZ3VyZWQsIHdlIG11c3QgdW5tYXNrIHRoZSBiYW5rIGludGVycnVwdCBvbmx5IGFmdGVyCisJaGFuZGxlcihzKSBhcmUgZXhlY3V0ZWQgaW4gb3JkZXIgdG8gYXZvaWQgc3B1cmlvdXMgYmFuaworCWludGVycnVwdCAqLworCWlmICghdW5tYXNrZWQpCisJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCmluZGV4IDhjMWMwMTYuLjA0MjEwNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMKaW5kZXggMzc3OTJkNC4uYjVkMzA3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCmluZGV4IDFhMjRlMmMuLjA0YjQxMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCkBAIC01ODAsNyArNTgwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcF93YWtldXBfaXJxID0gewogCS5uYW1lCQk9ICJwZXJpcGhlcmFsIHdha2V1cCIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkuaGFuZGxlcgk9IG9tYXBfd2FrZXVwX2ludGVycnVwdAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0tZm4uUyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLWZuLlMKaW5kZXggNjY0MTRjYy4uODVjZmZlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0tZm4uUworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS1mbi5TCkBAIC04LDcgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IGI3YmYwOWIuLmU3NTcxODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMTEsNyArMTEsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE1OCwxNCArMTU3LDEyIEBACiAJewkvKiAubGVuZ3RoIGdldHMgZmlsbGVkIGluIGF0IHJ1bnRpbWUgKi8KIAkJLnZpcnR1YWwJPSBPTUFQMV9TUkFNX1ZBLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDFfU1JBTV9QQSksCi0JCS50eXBlCQk9IE1UX0RFVklDRQorCQkudHlwZQkJPSBNVF9NRU1PUlkKIAl9CiB9OwogCiAvKgotICogSW4gb3JkZXIgdG8gdXNlIGxhc3QgMmtCIG9mIFNSQU0gb24gMTYxMWIsIHdlIG11c3Qgcm91bmQgdGhlIHNpemUKLSAqIHVwIHRvIG11bHRpcGxlIG9mIFBBR0VfU0laRS4gV2UgY2Fubm90IHVzZSBpb3JlbWFwIGZvciBTUkFNLCBhcwotICogY2xvY2sgaW5pdCBuZWVkcyBTUkFNIGVhcmx5LgorICogTm90ZSB0aGF0IHdlIGNhbm5vdCB1c2UgaW9yZW1hcCBmb3IgU1JBTSwgYXMgY2xvY2sgaW5pdCBuZWVkcyBTUkFNIGVhcmx5LgogICovCiB2b2lkIF9faW5pdCBvbWFwX21hcF9zcmFtKHZvaWQpCiB7CkBAIC0xODUsOCArMTgyLDcgQEAKIAkJb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuID0gX19waHlzX3RvX3BmbihiYXNlKTsKIAl9CiAKLQlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSAob21hcF9zcmFtX3NpemUgKyBQQUdFX1NJWkUtMSkvUEFHRV9TSVpFOwotCW9tYXBfc3JhbV9pb19kZXNjWzBdLmxlbmd0aCAqPSBQQUdFX1NJWkU7CisJb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoID0gMTAyNCAqIDEwMjQ7CS8qIFVzZSBzZWN0aW9uIGRlc2MgKi8KIAlpb3RhYmxlX2luaXQob21hcF9zcmFtX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcF9zcmFtX2lvX2Rlc2MpKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlNSQU06IE1hcHBlZCBwYSAweCUwOGx4IHRvIHZhIDB4JTA4bHggc2l6ZTogMHglbHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCmluZGV4IDM0NjFhNmMuLjI4MWVjYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCkBAIC03LDYgKzcsNyBAQAogICogUGFydGlhbCB0aW1lciByZXdyaXRlIGFuZCBhZGRpdGlvbmFsIGR5bmFtaWMgdGljayB0aW1lciBzdXBwb3J0IGJ5CiAgKiBUb255IExpbmRnZW4gPHRvbnlAYXRvbWlkZS5jb20+IGFuZAogICogVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKiBPTUFQIER1YWwtbW9kZSB0aW1lciBmcmFtZXdvcmsgc3VwcG9ydCBieSBUaW1vIFRlcmFzCiAgKgogICogTVBVIHRpbWVyIGNvZGUgYmFzZWQgb24gdGhlIG9sZGVyIE1QVSB0aW1lciBjb2RlIGZvciBPTUFQCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUmlkZ2VSdW4sIEluYy4KQEAgLTMzLDcgKzM0LDYgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtdGltZXIuaD4KIAogc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwogCkBAIC03OSwxOCArODAsNiBAQAogI2RlZmluZSBPTUFQMV8zMktfVElNRVJfVFZSCQkweDAwCiAjZGVmaW5lIE9NQVAxXzMyS19USU1FUl9UQ1IJCTB4MDQKIAotLyogMjR4eCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyX0dQX1RJTUVSX0JBU0UJCTB4NDgwMjgwMDAKLSNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCQkweDQ4MDA4NDQwCi0jZGVmaW5lIEdQX1RJTUVSX1RJRFIJCQkweDAwCi0jZGVmaW5lIEdQX1RJTUVSX1RJU1IJCQkweDE4Ci0jZGVmaW5lIEdQX1RJTUVSX1RJRVIJCQkweDFjCi0jZGVmaW5lIEdQX1RJTUVSX1RDTFIJCQkweDI0Ci0jZGVmaW5lIEdQX1RJTUVSX1RDUlIJCQkweDI4Ci0jZGVmaW5lIEdQX1RJTUVSX1RMRFIJCQkweDJjCi0jZGVmaW5lIEdQX1RJTUVSX1RUR1IJCQkweDMwCi0jZGVmaW5lIEdQX1RJTUVSX1RTSUNSCQkJMHg0MAotCiAjZGVmaW5lIE9NQVBfMzJLX1RJQ0tTX1BFUl9IWgkJKDMyNzY4IC8gSFopCiAKIC8qCkBAIC0xMDIsMjQgKzkxLDU1IEBACiAjZGVmaW5lIEpJRkZJRVNfVE9fSFdfVElDS1MobnJfamlmZmllcywgY2xvY2tfcmF0ZSkJCQlcCiAJCQkJKCgobnJfamlmZmllcykgKiAoY2xvY2tfcmF0ZSkpIC8gSFopCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfd3JpdGUoaW50IHZhbCwgaW50IHJlZykKIHsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCW9tYXBfd3JpdGV3KHZhbCwgT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpOwotCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVAyX0dQX1RJTUVSX0JBU0UgKyByZWcpOworCW9tYXBfd3JpdGV3KHZhbCwgT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb21hcF8zMmtfdGltZXJfcmVhZChpbnQgcmVnKQogewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDFfMzJLX1RJTUVSX0JBU0UgKyByZWcpICYgMHhmZmZmZmY7Ci0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybiBvbWFwX3JlYWRsKE9NQVAyX0dQX1RJTUVSX0JBU0UgKyByZWcpOworCXJldHVybiBvbWFwX3JlYWRsKE9NQVAxXzMyS19USU1FUl9CQVNFICsgcmVnKSAmIDB4ZmZmZmZmOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfc3RhcnQodW5zaWduZWQgbG9uZyBsb2FkX3ZhbCkKK3sKKwlvbWFwXzMya190aW1lcl93cml0ZShsb2FkX3ZhbCwgT01BUDFfMzJLX1RJTUVSX1RWUik7CisJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwZiwgT01BUDFfMzJLX1RJTUVSX0NSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKK3sKKwlvbWFwXzMya190aW1lcl93cml0ZSgweDAsIE9NQVAxXzMyS19USU1FUl9DUik7Cit9CisKKyNkZWZpbmUgb21hcF8zMmtfdGltZXJfYWNrX2lycSgpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqZ3B0aW1lcjsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0YXJ0KHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCit7CisJb21hcF9kbV90aW1lcl9zZXRfbG9hZChncHRpbWVyLCAxLCAweGZmZmZmZmZmIC0gbG9hZF92YWwpOworCW9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoZ3B0aW1lciwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cpOworCW9tYXBfZG1fdGltZXJfc3RhcnQoZ3B0aW1lcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzMya190aW1lcl9zdG9wKHZvaWQpCit7CisJb21hcF9kbV90aW1lcl9zdG9wKGdwdGltZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8zMmtfdGltZXJfYWNrX2lycSh2b2lkKQoreworCXUzMiBzdGF0dXMgPSBvbWFwX2RtX3RpbWVyX3JlYWRfc3RhdHVzKGdwdGltZXIpOworCW9tYXBfZG1fdGltZXJfd3JpdGVfc3RhdHVzKGdwdGltZXIsIHN0YXR1cyk7Cit9CisKKyNlbmRpZgorCiAvKgogICogVGhlIDMyS0h6IHN5bmNocm9uaXplZCB0aW1lciBpcyBhbiBhZGRpdGlvbmFsIHRpbWVyIG9uIDE2eHguCiAgKiBJdCBpcyBhbHdheXMgcnVubmluZy4KQEAgLTEyOSwyOSArMTQ5LDYgQEAKIAlyZXR1cm4gb21hcF9yZWFkbChUSU1FUl8zMktfU1lOQ0hST05JWkVEKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0YXJ0KHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCi17Ci0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKGxvYWRfdmFsLCBPTUFQMV8zMktfVElNRVJfVFZSKTsKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwZiwgT01BUDFfMzJLX1RJTUVSX0NSKTsKLQl9Ci0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHhmZmZmZmZmZiAtIGxvYWRfdmFsLCBHUF9USU1FUl9UQ1JSKTsKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoKDEgPDwgMSksIEdQX1RJTUVSX1RJRVIpOwotCQlvbWFwXzMya190aW1lcl93cml0ZSgoMSA8PCAxKSB8IDEsIEdQX1RJTUVSX1RDTFIpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0b3Aodm9pZCkKLXsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKDB4MCwgT01BUDFfMzJLX1RJTUVSX0NSKTsKLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHgwLCBHUF9USU1FUl9UQ0xSKTsKLX0KLQogLyoKICAqIFJvdW5kcyBkb3duIHRvIG5lYXJlc3QgdXNlYy4gTm90ZSB0aGF0IHRoaXMgd2lsbCBvdmVyZmxvdyBmb3IgbGFyZ2VyIHZhbHVlcy4KICAqLwpAQCAtMjAzLDExICsyMDAsNyBAQAogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJdTMyIHN0YXR1cyA9IG9tYXBfMzJrX3RpbWVyX3JlYWQoR1BfVElNRVJfVElTUik7Ci0JCW9tYXBfMzJrX3RpbWVyX3dyaXRlKHN0YXR1cywgR1BfVElNRVJfVElTUik7Ci0JfQotCisJb21hcF8zMmtfdGltZXJfYWNrX2lycSgpOwogCW5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOwogCiAJd2hpbGUgKChzaWduZWQgbG9uZykobm93IC0gb21hcF8zMmtfbGFzdF90aWNrKQpAQCAtMjY1LDEzICsyNTgsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcF8zMmtfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICIzMktIeiB0aW1lciIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkuaGFuZGxlcgk9IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICogZ3B0MV9pY2s7Ci1zdGF0aWMgc3RydWN0IGNsayAqIGdwdDFfZmNrOwotCiBzdGF0aWMgX19pbml0IHZvaWQgb21hcF9pbml0XzMya190aW1lcih2b2lkKQogewogI2lmZGVmIENPTkZJR19OT19JRExFX0haCkBAIC0yODAsMzIgKzI3MCwyMiBAQAogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQogCQlzZXR1cF9pcnEoSU5UX09TX1RJTUVSLCAmb21hcF8zMmtfdGltZXJfaXJxKTsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXNldHVwX2lycSgzNywgJm9tYXBfMzJrX3RpbWVyX2lycSk7CiAJb21hcF90aW1lci5vZmZzZXQgID0gb21hcF8zMmtfdGltZXJfZ2V0dGltZW9mZnNldDsKIAlvbWFwXzMya19sYXN0X3RpY2sgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAJLyogUkVWSVNJVDogQ2hlY2sgMjR4eCBUSU9DUF9DRkcgc2V0dGluZ3MgYWZ0ZXIgaWRsZSB3b3JrcyAqLwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlvbWFwXzMya190aW1lcl93cml0ZSgwLCBHUF9USU1FUl9UQ0xSKTsKLQkJb21hcF93cml0ZWwoMCwgQ01fQ0xLU0VMX1dLVVApOwkJLyogMzJLSHogY2xvY2sgc291cmNlICovCisJCWdwdGltZXIgPSBvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoMSk7CisJCUJVR19PTihncHRpbWVyID09IE5VTEwpOwogCi0JCWdwdDFfaWNrID0gY2xrX2dldChOVUxMLCAiZ3B0MV9pY2siKTsKLQkJaWYgKElTX0VSUihncHQxX2ljaykpCi0JCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgZ3B0MV9pY2tcbiIpOwotCQllbHNlCi0JCQljbGtfZW5hYmxlKGdwdDFfaWNrKTsKLQotCQlncHQxX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwdDFfZmNrIik7Ci0JCWlmIChJU19FUlIoZ3B0MV9mY2spKQotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IGdwdDFfZmNrXG4iKTsKLQkJZWxzZQotCQkJY2xrX2VuYWJsZShncHQxX2Zjayk7Ci0KLQkJbWRlbGF5KDEwMCk7CQkvKiBXYWl0IGZvciBjbG9ja3MgdG8gc3RhYmlsaXplICovCi0KLQkJb21hcF8zMmtfdGltZXJfd3JpdGUoMHg3LCBHUF9USU1FUl9USVNSKTsKKwkJb21hcF9kbV90aW1lcl9zZXRfc291cmNlKGdwdGltZXIsIE9NQVBfVElNRVJfU1JDXzMyX0tIWik7CisJCXNldHVwX2lycShvbWFwX2RtX3RpbWVyX2dldF9pcnEoZ3B0aW1lciksICZvbWFwXzMya190aW1lcl9pcnEpOworCQlvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKGdwdGltZXIsCisJCQlPTUFQX1RJTUVSX0lOVF9DQVBUVVJFIHwgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cgfAorCQkJT01BUF9USU1FUl9JTlRfTUFUQ0gpOwogCX0KKyNlbmRpZgogCiAJb21hcF8zMmtfdGltZXJfc3RhcnQoT01BUF8zMktfVElNRVJfVElDS19QRVJJT0QpOwogfQpAQCAtMzE3LDYgKzI5Nyw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfT01BUF9ETV9USU1FUgorCW9tYXBfZG1fdGltZXJfaW5pdCgpOworI2VuZGlmCiAJb21hcF9pbml0XzMya190aW1lcigpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggMDBhZmM3YTguLjliODE1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKQEAgLTIwLDcgKzIwLDYgQEAKIAogI3VuZGVmCURFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCmluZGV4IDI0NzZmNGMuLjlkMjY1ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKQEAgLTksNyArOSw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L0tjb25maWcgYi9hcmNoL2FybTI2L0tjb25maWcKaW5kZXggY2Y0ZWJmNC4uYzE0ZmU5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9LY29uZmlnCisrKyBiL2FyY2gvYXJtMjYvS2NvbmZpZwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBib29sICJBNTAwMCIKIAlzZWxlY3QgQVJDSF9NQVlfSEFWRV9QQ19GREMKICAgICAgICAgaGVscAotICAgICAgICAgIFNheSBZIGhlcmUgdG8gdG8gc3VwcG9ydCB0aGUgQWNvcm4gQTUwMDAuCisgICAgICAgICAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBY29ybiBBNTAwMC4KIAogCSAgTGludXggY2FuIHN1cHBvcnQgdGhlCiAgICAgICAgICAgaW50ZXJuYWwgSURFIGRpc2sgYW5kIENELVJPTSBpbnRlcmZhY2UsIHNlcmlhbCBhbmQgcGFyYWxsZWwgcG9ydCwKQEAgLTEyOSw3ICsxMjksNyBAQAogY29uZmlnIFhJUF9LRVJORUwKIAlib29sICJFeGVjdXRlIEluIFBsYWNlIChYSVApIGtlcm5lbCBpbWFnZSIKIAloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gY3JlYXRlIGEga2VybmVsIHRoYXQgY2FuIGJlIHByb2dyYW1lZCBpbnRvCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gY3JlYXRlIGEga2VybmVsIHRoYXQgY2FuIGJlIHByb2dyYW1tZWQgaW50bwogCSAgdGhlIE9TIFJPTXMuCiAKIGNvbW1lbnQgIkF0IGxlYXN0IG9uZSBtYXRoIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkIgpAQCAtMTQwLDcgKzE0MCw3IEBACiAJICBTYXkgWSB0byBpbmNsdWRlIHRoZSBOV0ZQRSBmbG9hdGluZyBwb2ludCBlbXVsYXRvciBpbiB0aGUga2VybmVsLgogCSAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gcnVuIG1vc3QgYmluYXJpZXMuIExpbnV4IGRvZXMgbm90IGN1cnJlbnRseQogCSAgc3VwcG9ydCBmbG9hdGluZyBwb2ludCBoYXJkd2FyZSBzbyB5b3UgbmVlZCB0byBzYXkgWSBoZXJlIGV2ZW4gaWYKLQkgIHlvdXIgbWFjaGluZSBoYXMgYW4gRlBBIG9yIGZsb2F0aW5nIHBvaW50IGNvLXByb2Nlc3NvciBwb2R1bGUuCisJICB5b3VyIG1hY2hpbmUgaGFzIGFuIEZQQSBvciBmbG9hdGluZyBwb2ludCBjby1wcm9jZXNzb3IgbW9kdWxlLgogCiAJICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNheSBNIHRvIGJ1aWxkIHRoZSBlbXVsYXRvciBhcyBhIG1vZHVsZQogCSAgKG53ZnBlKSBvciBpbmRlZWQgdG8gbGVhdmUgaXQgb3V0IGFsdG9nZXRoZXIuIEhvd2V2ZXIsIHVubGVzcyB5b3UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtMjYvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCAwMzA3ODA0Li4yYTJjZGEzIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0yNi9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC03LDcgKzcsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKaW5kZXggOWQ2NmMyNy4uMDc5MDdiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9hcm1rc3ltcy5jCkBAIC04LDcgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBhYzY4MmQ1Li43NmQ5ZDdkIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL2NvbXBhdC5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvY29tcGF0LmMKaW5kZXggZGIwMzEwZC4uMjFlOTY2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvY29tcGF0LmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvY29tcGF0LmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqICB0aGUga2VybmVsIGZvciA1IHllYXJzIGZyb20gbm93ICgyMDAxKS4gVGhpcyB3aWxsIGFsbG93IGJvb3QgbG9hZGVycwogICogIHRvIGNvbnZlcnQgdG8gdGhlIG5ldyBzdHJ1Y3QgdGFnIHdheS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9lY2FyZC5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvZWNhcmQuYwppbmRleCBmMjI3OGFhLi4wNDdkMGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9lY2FyZC5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL2VjYXJkLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogI2RlZmluZSBFQ0FSRF9DCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvZmlxLmMgYi9hcmNoL2FybTI2L2tlcm5lbC9maXEuYwppbmRleCBhMjQyNzJiLi5jNDc3NmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9maXEuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9maXEuYwpAQCAtMzYsNyArMzYsNiBAQAogICoJIC0gZW5hYmxlcyBGSVEuCiAgKiAgNi4gR290byAzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtMjYva2VybmVsL2hlYWQuUwppbmRleCA4YmZjNjI1Li45MzU3NWUwIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvaGVhZC5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKgogICogIDI2LWJpdCBrZXJuZWwgc3RhcnR1cCBjb2RlCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybTI2L2tlcm5lbC9pcnEuYwppbmRleCAwOTM0ZTZmLi5kODdkNjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9pcnEuYwpAQCAtMTgsNyArMTgsNiBAQAogICogIElSUSdzIGFyZSBpbiBmYWN0IGltcGxlbWVudGVkIGEgYml0IGxpa2Ugc2lnbmFsIGhhbmRsZXJzIGZvciB0aGUga2VybmVsLgogICogIE5hdHVyYWxseSBpdCdzIG5vdCBhIDE6MSByZWxhdGlvbiwgYnV0IHRoZXJlIGFyZSBzaW1pbGFyaXRpZXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpAQCAtMTkxLDcgKzE5MCw3IEBACiAJaW50IHJldDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKLQlpZiAoIShhY3Rpb24tPmZsYWdzICYgU0FfSU5URVJSVVBUKSkKKwlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCXN0YXR1cyA9IDA7CkBAIC0yMDIsNyArMjAxLDcgQEAKIAkJYWN0aW9uID0gYWN0aW9uLT5uZXh0OwogCX0gd2hpbGUgKGFjdGlvbik7CiAKLQlpZiAoc3RhdHVzICYgU0FfU0FNUExFX1JBTkRPTSkKKwlpZiAoc3RhdHVzICYgSVJRRl9TQU1QTEVfUkFORE9NKQogCQlhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3MoaXJxKTsKIAogCXNwaW5fbG9ja19pcnEoJmlycV9jb250cm9sbGVyX2xvY2spOwpAQCAtNDUyLDcgKzQ1MSw3IEBACiAJICogc28gd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhCiAJICogcnVubmluZyBzeXN0ZW0uCiAJICovCi0JaWYgKG5ldy0+ZmxhZ3MgJiBTQV9TQU1QTEVfUkFORE9NKSB7CisJaWYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1NBTVBMRV9SQU5ET00pIHsKIAkJLyoKIAkJICogVGhpcyBmdW5jdGlvbiBtaWdodCBzbGVlcCwgd2Ugd2FudCB0byBjYWxsIGl0IGZpcnN0LAogCQkgKiBvdXRzaWRlIG9mIHRoZSBhdG9taWMgYmxvY2suCkBAIC00NzIsNyArNDcxLDcgQEAKIAlwID0gJmRlc2MtPmFjdGlvbjsKIAlpZiAoKG9sZCA9ICpwKSAhPSBOVUxMKSB7CiAJCS8qIENhbid0IHNoYXJlIGludGVycnVwdHMgdW5sZXNzIGJvdGggYWdyZWUgdG8gKi8KLQkJaWYgKCEob2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MgJiBTQV9TSElSUSkpIHsKKwkJaWYgKCEob2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9jb250cm9sbGVyX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KQEAgLTUyNywxMSArNTI2LDExIEBACiAgKgogICoJRmxhZ3M6CiAgKgotICoJU0FfU0hJUlEJCUludGVycnVwdCBpcyBzaGFyZWQKKyAqCUlSUUZfU0hBUkVECQlJbnRlcnJ1cHQgaXMgc2hhcmVkCiAgKgotICoJU0FfSU5URVJSVVBUCQlEaXNhYmxlIGxvY2FsIGludGVycnVwdHMgd2hpbGUgcHJvY2Vzc2luZworICoJSVJRRl9ESVNBQkxFRAlEaXNhYmxlIGxvY2FsIGludGVycnVwdHMgd2hpbGUgcHJvY2Vzc2luZwogICoKLSAqCVNBX1NBTVBMRV9SQU5ET00JVGhlIGludGVycnVwdCBjYW4gYmUgdXNlZCBmb3IgZW50cm9weQorICoJSVJRRl9TQU1QTEVfUkFORE9NCVRoZSBpbnRlcnJ1cHQgY2FuIGJlIHVzZWQgZm9yIGVudHJvcHkKICAqCiAgKi8KIApAQCAtNTQzLDcgKzU0Miw3IEBACiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCiAJaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFpcnFfZGVzY1tpcnFdLnZhbGlkIHx8ICFoYW5kbGVyIHx8Ci0JICAgIChpcnFfZmxhZ3MgJiBTQV9TSElSUSAmJiAhZGV2X2lkKSkKKwkgICAgKGlycV9mbGFncyAmIElSUUZfU0hBUkVEICYmICFkZXZfaWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWFjdGlvbiA9IChzdHJ1Y3QgaXJxYWN0aW9uICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDM4NjMwNTYuLmRjZDgxZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjgyZTI0ZC4uOTM0Mzg4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMKQEAgLTksNyArOSw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvYXJtMjYva2VybmVsL3NlbWFwaG9yZS5jCmluZGV4IDMwMjNhNTMuLjU0NDdhMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3NlbWFwaG9yZS5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvc2V0dXAuYwppbmRleCA0ZWIzMjllLi44NDNjMjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL3NldHVwLmMKQEAgLTgsNyArOCw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMmE0OGMxMi4uNmE4ZWY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvc2lnbmFsLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtMjYva2VybmVsL3RpbWUuYwppbmRleCAzMzU1MjUzLi5kYjYzZDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvdGltZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKiAgICAgICAgICAgICAgIkEgS2VybmVsIE1vZGVsIGZvciBQcmVjaXNpb24gVGltZWtlZXBpbmciIGJ5IERhdmUgTWlsbHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yMDYsNyArMjA1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxID0gewogCS5uYW1lCT0gInRpbWVyIiwKLQkuZmxhZ3MJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCT0gSVJRRl9ESVNBQkxFRCwKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybTI2L2tlcm5lbC90cmFwcy5jCmluZGV4IGE3OWRlMDQuLmQ1OTRmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0yNi9rZXJuZWwvdHJhcHMuYwpAQCAtMTUsNyArMTUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtMjYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggODExYTY5MC4uMWZhMzlmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybTI2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9saWIvYmFja3RyYWNlLlMgYi9hcmNoL2FybTI2L2xpYi9iYWNrdHJhY2UuUwppbmRleCBkNzkzZmU0Li5lMjdmZWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2xpYi9iYWNrdHJhY2UuUworKysgYi9hcmNoL2FybTI2L2xpYi9iYWNrdHJhY2UuUwpAQCAtNyw3ICs3LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAJCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMgYi9hcmNoL2FybTI2L2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMKaW5kZXggMjYxZGQxNS4uYTk4ZWVhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9saWIvY3N1bXBhcnRpYWxjb3B5dXNlci5TCisrKyBiL2FyY2gvYXJtMjYvbGliL2NzdW1wYXJ0aWFsY29weXVzZXIuUwpAQCAtNyw3ICs3LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2xpYi9rYmQuYyBiL2FyY2gvYXJtMjYvbGliL2tiZC5jCmluZGV4IDIyZDJjOTNhLi5jYjU2ZTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2xpYi9rYmQuYworKysgYi9hcmNoL2FybTI2L2xpYi9rYmQuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZC5oPgogLy8jaW5jbHVkZSA8bGludXgva2JkX2xsLmg+CiAjaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvbGliL2xpYjFmdW5jcy5TIGIvYXJjaC9hcm0yNi9saWIvbGliMWZ1bmNzLlMKaW5kZXggYjhmOTUxOC4uMGUyOTk3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9saWIvbGliMWZ1bmNzLlMKKysrIGIvYXJjaC9hcm0yNi9saWIvbGliMWZ1bmNzLlMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFJFVAltb3ZzCiAjZGVmaW5lIFJFVGMoeCkJbW92IyN4IyNzCmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L21hY2hpbmUvZG1hLmMgYi9hcmNoL2FybTI2L21hY2hpbmUvZG1hLmMKaW5kZXggY2JjN2M2MS4uNDQwMmE1YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYvbWFjaGluZS9kbWEuYworKysgYi9hcmNoL2FybTI2L21hY2hpbmUvZG1hLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKiAgRE1BIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBBcmNoaW1lZGVzIGFuZCBBNTAwMCBhcmNoaXRlY3R1cmUKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L21hY2hpbmUvaXJxLmMgYi9hcmNoL2FybTI2L21hY2hpbmUvaXJxLmMKaW5kZXggNDM2MTg2My4uYTYwZDU0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9tYWNoaW5lL2lycS5jCisrKyBiL2FyY2gvYXJtMjYvbWFjaGluZS9pcnEuYwpAQCAtMTYsNyArMTYsNiBAQAogICogICAwOC0wOS0yMDAyIElNCUJyb3VnaHQgdXAgdG8gZGF0ZSBmb3IgMi41CiAgKiAgIDAxLTA2LTIwMDMgSk1BICAgICBSZW1vdmVkIGFyY19maXFfY2hpcAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9tbS9leHRhYmxlLmMgYi9hcmNoL2FybTI2L21tL2V4dGFibGUuYwppbmRleCAyZDlmNWI1Li4zOGUxOTU4IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L21tL2V4dGFibGUuYworKysgYi9hcmNoL2FybTI2L21tL2V4dGFibGUuYwpAQCAtMiw3ICsyLDYgQEAKICAqICBsaW51eC9hcmNoL2FybTI2L21tL2V4dGFibGUuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L21tL2ZhdWx0LmMgYi9hcmNoL2FybTI2L21tL2ZhdWx0LmMKaW5kZXggYmQ2ZjJkYi4uNzYxOTM4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtMjYvbW0vZmF1bHQuYwpAQCAtOCw3ICs4LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L21tL2luaXQuYyBiL2FyY2gvYXJtMjYvbW0vaW5pdC5jCmluZGV4IDdkYThhNTIuLjU2MmZhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYvbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtMjYvbW0vaW5pdC5jCkBAIC03LDcgKzcsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYvbndmcGUvZnBtb2R1bGUuYyBiL2FyY2gvYXJtMjYvbndmcGUvZnBtb2R1bGUuYwppbmRleCA1MjU4YzYwLi5hOGZhZDkyIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L253ZnBlL2ZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0yNi9ud2ZwZS9mcG1vZHVsZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFhYWCAqLwogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L253ZnBlL2ZwbW9kdWxlLmggYi9hcmNoL2FybTI2L253ZnBlL2ZwbW9kdWxlLmgKaW5kZXggZWY3MWFhYi4uZjk3MWRkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9ud2ZwZS9mcG1vZHVsZS5oCisrKyBiL2FyY2gvYXJtMjYvbndmcGUvZnBtb2R1bGUuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfX0ZQTU9EVUxFX0hfXwogI2RlZmluZSBfX0ZQTU9EVUxFX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUkVHX09SSUdfUjAJMTYKICNkZWZpbmUgUkVHX0NQU1IJMTUKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9LY29uZmlnIGIvYXJjaC9jcmlzL0tjb25maWcKaW5kZXggODU2YjY2NS4uNmExMjM4YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL0tjb25maWcKQEAgLTI4LDYgKzI4LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgSVJRX1BFUl9DUFUKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBDUklTCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCBlNzNmNDRjLi42MTBiZGIyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2RlZmluZSBBU1NFTUJMRVJfTUFDUk9TX09OTFkKICNpbmNsdWRlIDxhc20vYXJjaC9zdl9hZGRyX2FnLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggMWI1ZTgzZi4uZmZiOGQyMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTIwLDcgKzIwLDYgQEAKIAogI2RlZmluZSBLRVJORUxfTE9BRF9BRFIgMHg0MDAwNDAwMAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL2hlYWQuUyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9oZWFkLlMKaW5kZXggYWRkYjIxOS4uZjIyM2NjMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL2hlYWQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvaGVhZC5TCkBAIC02Myw3ICs2Myw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNkZWZpbmUgQVNTRU1CTEVSX01BQ1JPU19PTkxZCiAjaW5jbHVkZSA8YXNtL2FyY2gvc3ZfYWRkcl9hZy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUva2ltYWdlcmVzY3VlLlMgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUva2ltYWdlcmVzY3VlLlMKaW5kZXggMjY0YmY3YS4uY2JjY2Q2MzE2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUva2ltYWdlcmVzY3VlLlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL2tpbWFnZXJlc2N1ZS5TCkBAIC02LDcgKzYsNiBAQAogICogNDAwNDAwMCBhbmQgYWZ0ZXIgYSB0aW1lb3V0IGp1bXAgdG8gaXQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2RlZmluZSBBU1NFTUJMRVJfTUFDUk9TX09OTFkKICNpbmNsdWRlIDxhc20vc3ZfYWRkcl9hZy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9heGlzZmxhc2htYXAuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jCmluZGV4IDU2YjAzOGMuLjRmYTgxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jCkBAIC0xMzgsNyArMTM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2RzMTMwMi5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZHMxMzAyLmMKaW5kZXggYjEwMGYyNi4uM2NmNGYyMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZHMxMzAyLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZHMxMzAyLmMKQEAgLTEzOSw3ICsxMzksNiBAQAogKiEKICohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2VlcHJvbS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZWVwcm9tLmMKaW5kZXggNTEyZjE2ZC4uMDM3NTgyMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZWVwcm9tLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZWVwcm9tLmMKQEAgLTkzLDcgKzkzLDYgQEAKICohICAgICAgICAoYykgMTk5OSBBeGlzIENvbW11bmljYXRpb25zIEFCLCBMdW5kLCBTd2VkZW4KICohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9ncGlvLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9ncGlvLmMKaW5kZXggMDk5NjNmZS4uNDhmZDgwMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZ3Bpby5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2dwaW8uYwpAQCAtMTM1LDcgKzEzNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC05MzgsMTEgKzkzNywxMSBAQAogCSAqIGluIHNvbWUgdGVzdHMuCiAJICovICAKIAlpZiAocmVxdWVzdF9pcnEoVElNRVIwX0lSUV9OQlIsIGdwaW9fcG9sbF90aW1lcl9pbnRlcnJ1cHQsCi0JCQlTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwiZ3BpbyBwb2xsIiwgTlVMTCkpIHsKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwiZ3BpbyBwb2xsIiwgTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiZXJyOiB0aW1lcjAgaXJxIGZvciBncGlvXG4iKTsKIAl9CiAJaWYgKHJlcXVlc3RfaXJxKFBBX0lSUV9OQlIsIGdwaW9fcGFfaW50ZXJydXB0LAotCQkJU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsImdwaW8gUEEiLCBOVUxMKSkgeworCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCJncGlvIFBBIiwgTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiZXJyOiBQQSBpcnEgZm9yIGdwaW9cbiIpOwogCX0KIAkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2kyYy5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvaTJjLmMKaW5kZXggYjM4MjY3ZC4uNjExNDU5NiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvaTJjLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvaTJjLmMKQEAgLTk2LDcgKzk2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9ldHJheGkyYy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggYWY1MTdjMi4uOGM4MzBlZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtMTgsNyArMTgsNiBAQAogICogJElkOiBwY2Y4NTYzLmMsdiAxLjExIDIwMDUvMDMvMDcgMTM6MTM6MDcgc3RhcnZpayBFeHAgJAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9jcmlza3N5bXMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvY3Jpc2tzeW1zLmMKaW5kZXggYjMzMmJmOS4uZTZiODAxMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9jcmlza3N5bXMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2NyaXNrc3ltcy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9kZWJ1Z3BvcnQuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZGVidWdwb3J0LmMKaW5kZXggZjNhODViNy4uMmI1MzZjYSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9kZWJ1Z3BvcnQuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2RlYnVncG9ydC5jCkBAIC0xMDMsNyArMTAzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KQEAgLTU0MSw3ICs1NDAsNyBAQAogCWR1bW15X2RyaXZlci5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CiAJZHVtbXlfZHJpdmVyLmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkJQjExNTIwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7IC8qIGlzIG5vcm1hbGx5IEI5NjAwIGRlZmF1bHQuLi4gKi8KLQlkdW1teV9kcml2ZXIuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlkdW1teV9kcml2ZXIuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAogCWR1bW15X2RyaXZlci5vcGVuID0gZHVtbXlfb3BlbjsKIAlkdW1teV9kcml2ZXIuY2xvc2UgPSBkdW1teV9jbG9zZTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUwppbmRleCBjODA4MDA1Li5hZTQ1ZDQ1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9lbnRyeS5TCkBAIC0yNjMsNyArMjYzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9mYXN0dGltZXIuYwppbmRleCBjYWMwNWE1Li44Y2JkZjU5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZmFzdHRpbWVyLmMKQEAgLTExMSw3ICsxMTEsNiBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvc3ZpbnRvLmg+CiAjaW5jbHVkZSA8YXNtL2Zhc3R0aW1lci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2hlYWQuUwppbmRleCBmMDBjMTQ1Li5kOTQ2ZDhiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2hlYWQuUwpAQCAtMTgzLDcgKzE4Myw2IEBACiAgKgogICovCiAJCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZGVmaW5lIEFTU0VNQkxFUl9NQUNST1NfT05MWQogLyogVGhlIElPXyogbWFjcm9zIHVzZSB0aGUgIyMgdG9rZW4gY29uY2F0ZW5hdGlvbiBvcGVyYXRvciwgc28KICAgIC10cmFkaXRpb25hbCBtdXN0IG5vdCBiZSB1c2VkIHdoZW4gYXNzZW1ibGluZyB0aGlzIGZpbGUuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKaW5kZXggNGIzNjhhMS4uOTYwOTRjYiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIG1hc2tfaXJxKGlycV9ucikgKCpSX1ZFQ1RfTUFTS19DTFIgPSAxIDw8IChpcnFfbnIpKTsKICNkZWZpbmUgdW5tYXNrX2lycShpcnFfbnIpICgqUl9WRUNUX01BU0tfU0VUID0gMSA8PCAoaXJxX25yKSk7CkBAIC0xNzIsNyArMTcxLDcgQEAKIAogCS8qIEluaXRpYWxpemUgSVJRIGhhbmRsZXIgZGVzY3JpcHRpb3JzLiAqLwogCWZvcihpID0gMjsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmNyaXN2MTBfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmY3Jpc3YxMF9pcnFfdHlwZTsKIAkJc2V0X2ludF92ZWN0b3IoaSwgaW50ZXJydXB0W2ldKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMGE2NzVjZS4uYjY4MzFjZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3NldHVwLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3NldHVwLmMKaW5kZXggYjY2OGQ3Zi4uNjgyZWY5NSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvc2V0dXAuYwpAQCAtMTAsNyArMTAsNiBAQAogICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgaW5pdGlhbGl6YXRpb24KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggZGMzZGZlOS4uOWMyMmI3NiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CkBAIC0yNTIsMTEgKzI1MSwxMSBAQAogICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIHRpbWVyIGlzIFNBX1NISVJRIHNvIGRyaXZlcnMgY2FuIGFkZCBzdHVmZiB0byB0aGUgdGltZXIgaXJxIGNoYWluCi0gKiBpdCBuZWVkcyB0byBiZSBTQV9JTlRFUlJVUFQgdG8gbWFrZSB0aGUgamlmZmllcyB1cGRhdGUgd29yayBwcm9wZXJseQorLyogdGltZXIgaXMgSVJRRl9TSEFSRUQgc28gZHJpdmVycyBjYW4gYWRkIHN0dWZmIHRvIHRoZSB0aW1lciBpcnEgY2hhaW4KKyAqIGl0IG5lZWRzIHRvIGJlIElSUUZfRElTQUJMRUQgdG8gbWFrZSB0aGUgamlmZmllcyB1cGRhdGUgd29yayBwcm9wZXJseQogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTIgID0geyB0aW1lcl9pbnRlcnJ1cHQsIFNBX1NISVJRIHwgU0FfSU5URVJSVVBULAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMiAgPSB7IHRpbWVyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAogCQkJCSAgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTH07CiAKIHZvaWQgX19pbml0CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RyYXBzLmMKaW5kZXggMzRhMjdlYS4uNGJlY2MxYiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdHJhcHMuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zdl9hZGRyX2FnLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvbGliL2RyYW1faW5pdC5TIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9kcmFtX2luaXQuUwppbmRleCAyZWY0YWQ1Ny4uOWNmODM5MyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9kcmFtX2luaXQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvbGliL2RyYW1faW5pdC5TCkBAIC03MCw3ICs3MCw2IEBACiAgKiB1c2VzIHRoaXMgY29kZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIAk7OyBXQVJOSU5HISBUaGUgcmVnaXN0ZXJzIHI4IGFuZCByOSBhcmUgdXNlZCBhcyBwYXJhbWV0ZXJzIGNhcnJ5aW5nCiAJOzsgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGVjb21wcmVzc29yIChpZiB0aGUga2VybmVsIHdhcyBjb21wcmVzc2VkKS4gCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvbW0vaW5pdC5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL21tL2luaXQuYwppbmRleCBmZjM0ODFlLi5lMGZjZDFhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9tbS9pbml0LmMKQEAgLTIsNyArMiw2IEBACiAgKiAgbGludXgvYXJjaC9jcmlzL2FyY2gtdjEwL21tL2luaXQuYwogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvdm1saW51eC5sZHMuUyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC92bWxpbnV4Lmxkcy5TCmluZGV4IDcxYmE3MzYuLjY4OTcyOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC92bWxpbnV4Lmxkcy5TCkBAIC04LDcgKzgsNiBAQAogICogdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiAKICAqLwkKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAJCQogamlmZmllcyA9IGppZmZpZXNfNjQ7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IDBjNTViODMuLjM0Y2VhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC01LDcgKzUsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDMsIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZGVmaW5lIEFTU0VNQkxFUl9NQUNST1NfT05MWQogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9hc20vcmVnX21hcF9hc20uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvYXNtL2dpb19kZWZzX2FzbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA1NDY0NDIzLi4xMTkwMjY5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMjAsNyArMjAsNiBAQAogCiAjZGVmaW5lIEtFUk5FTF9MT0FEX0FEUiAweDQwMDA0MDAwCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL3JlZ19yZHdyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvaGVhZC5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL2hlYWQuUwppbmRleCA2MWVkZTVmLi44Y2RiNDAxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvaGVhZC5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9oZWFkLlMKQEAgLTQsNyArNCw2IEBACiAgKiBSZWRCb290IGJhc2VkIFJGTCBpbnN0ZWFkLiBOb3RoaW5nIHRvIHNlZSBoZXJlLCBtb3ZlIGFsb25nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvcmVnX21hcF9hc20uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvY29uZmlnX2RlZnNfYXNtLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMKaW5kZXggYjY3OWY5OC4uNDE5NTIzMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2dwaW8uYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2dwaW8uYwppbmRleCBhNTUxMjM3Li4wMGU5MTY3ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvZ3Bpby5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2dwaW8uYwpAQCAtNjIsNyArNjIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNzQ1LDExICs3NDQsMTEgQEAKIAkgKiBpbiBzb21lIHRlc3RzLgogCSAqLwogCWlmIChyZXF1ZXN0X2lycShUSU1FUl9JTlRSX1ZFQ1QsIGdwaW9fcG9sbF90aW1lcl9pbnRlcnJ1cHQsCi0JCQlTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwiZ3BpbyBwb2xsIiwgJmFsYXJtbGlzdCkpIHsKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwiZ3BpbyBwb2xsIiwgJmFsYXJtbGlzdCkpIHsKIAkJcHJpbnRrKCJlcnI6IHRpbWVyMCBpcnEgZm9yIGdwaW9cbiIpOwogCX0KIAlpZiAocmVxdWVzdF9pcnEoR0VOX0lPX0lOVFJfVkVDVCwgZ3Bpb19wYV9pbnRlcnJ1cHQsCi0JCQlTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwiZ3BpbyBQQSIsICZhbGFybWxpc3QpKSB7CisJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsImdwaW8gUEEiLCAmYWxhcm1saXN0KSkgewogCQlwcmludGsoImVycjogUEEgaXJxIGZvciBncGlvXG4iKTsKIAl9CiAJLyogZW5hYmxlIHRoZSBnaW8gYW5kIHRpbWVyIGlycSBpbiBnbG9iYWwgY29uZmlnICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9pMmMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2kyYy5jCmluZGV4IDQ0MGMyMGEuLjk1ZjAwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2kyYy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2kyYy5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZXRyYXhpMmMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IGQ3ODhiZGEuLmZmYzZkMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYwppbmRleCAxZTlkMDYyLi5hMmI5YzYwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9iaW9zLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiB2b2lkCiBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggYzg1YTZkZi4uN2MyOTk1NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCkBAIC05LDcgKzksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2FyYml0ZXIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvYXJiaXRlci5jCmluZGV4IDM4NzBkMmZkLi40MjBhNTMxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2FyYml0ZXIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2FyYml0ZXIuYwpAQCAtMSwxNSArMSwxNCBAQAogLyoKLSAqIE1lbW9yeSBhcmJpdGVyIGZ1bmN0aW9ucy4gQWxsb2NhdGVzIGJhbmR3aXRoIHRocm91Z2ggdGhlCisgKiBNZW1vcnkgYXJiaXRlciBmdW5jdGlvbnMuIEFsbG9jYXRlcyBiYW5kd2lkdGggdGhyb3VnaCB0aGUKICAqIGFyYml0ZXIgYW5kIHNldHMgdXAgYXJiaXRlciBicmVha3BvaW50cy4KICAqCiAgKiBUaGUgYWxnb3JpdGhtIGZpcnN0IGFzc2lnbnMgc2xvdHMgdG8gdGhlIGNsaWVudHMgdGhhdCBoYXMgc3BlY2lmaWVkCi0gKiBiYW5kd2l0aCAoZS5nLiBldGhlcm5ldCkgYW5kIHRoZW4gdGhlIHJlbWFpbmluZyBzbG90cyBhcmUgZGl2aWRlZAorICogYmFuZHdpZHRoIChlLmcuIGV0aGVybmV0KSBhbmQgdGhlbiB0aGUgcmVtYWluaW5nIHNsb3RzIGFyZSBkaXZpZGVkCiAgKiBvbiBhbGwgdGhlIGFjdGl2ZSBjbGllbnRzLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBBeGlzIENvbW11bmljYXRpb25zIEFCLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvcmVnX21hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9yZWdfcmR3ci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9tYXJiX2RlZnMuaD4KQEAgLTEyMCw3ICsxMTksNyBAQAogICAgICAgICBjcmlzdjMyX2FyYml0ZXJfY29uZmlnKEVYVF9SRUdJT04pOwogICAgICAgICBjcmlzdjMyX2FyYml0ZXJfY29uZmlnKElOVF9SRUdJT04pOwogCi0JaWYgKHJlcXVlc3RfaXJxKE1FTUFSQl9JTlRSX1ZFQ1QsIGNyaXN2MzJfYXJiaXRlcl9pcnEsIFNBX0lOVEVSUlVQVCwKKwlpZiAocmVxdWVzdF9pcnEoTUVNQVJCX0lOVFJfVkVDVCwgY3Jpc3YzMl9hcmJpdGVyX2lycSwgSVJRRl9ESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJhcmJpdGVyIiwgTlVMTCkpCiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgYWxsb2NhdGUgYXJiaXRlciBJUlFcbiIpOwogCkBAIC0xMzMsOCArMTMyLDggQEAKIAogCiAKLWludCBjcmlzdjMyX2FyYml0ZXJfYWxsb2NhdGVfYmFuZHdpdGgoaW50IGNsaWVudCwgaW50IHJlZ2lvbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJhbmR3aWR0aCkKK2ludCBjcmlzdjMyX2FyYml0ZXJfYWxsb2NhdGVfYmFuZHdpZHRoKGludCBjbGllbnQsIGludCByZWdpb24sCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYmFuZHdpZHRoKQogewogCWludCBpOwogCWludCB0b3RhbF9hc3NpZ25lZCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2NyaXNrc3ltcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9jcmlza3N5bXMuYwppbmRleCAyYzNiYjlhLi5lNTEzZGE3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2NyaXNrc3ltcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvY3Jpc2tzeW1zLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2RlYnVncG9ydC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9kZWJ1Z3BvcnQuYwppbmRleCBmZmMxZWJmLi5kMTI3MmFkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2RlYnVncG9ydC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZGVidWdwb3J0LmMKQEAgLTIsNyArMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KQEAgLTM1Myw3ICszNTIsNyBAQAogCWR1bW15X2RyaXZlci5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CiAJZHVtbXlfZHJpdmVyLmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkJQjExNTIwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7IC8qIGlzIG5vcm1hbGx5IEI5NjAwIGRlZmF1bHQuLi4gKi8KLQlkdW1teV9kcml2ZXIuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlkdW1teV9kcml2ZXIuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAogCWR1bW15X2RyaXZlci5vcGVuID0gZHVtbXlfb3BlbjsKIAlkdW1teV9kcml2ZXIuY2xvc2UgPSBkdW1teV9jbG9zZTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZG1hLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2RtYS5jCmluZGV4IGI5MmU4NTcuLjU3MGUxOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZG1hLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9kbWEuYwpAQCAtMjUsOCArMjUsOCBAQAogCXJlZ19jb25maWdfcndfY2xrX2N0cmwgY2xrX2N0cmw7CiAJcmVnX3N0cm11eF9yd19jZmcgc3RybXV4X2NmZzsKIAotICAgICAgICBpZiAoY3Jpc3YzMl9hcmJpdGVyX2FsbG9jYXRlX2JhbmR3aXRoKGRtYW5yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgJiBETUFfSU5UX01FTSA/IElOVF9SRUdJT04gOiBFWFRfUkVHSU9OLAorICAgICAgICBpZiAoY3Jpc3YzMl9hcmJpdGVyX2FsbG9jYXRlX2JhbmR3aWR0aChkbWFuciwKKwkJCQkJICAgICAgIG9wdGlvbnMgJiBETUFfSU5UX01FTSA/IElOVF9SRUdJT04gOiBFWFRfUkVHSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmR3aWR0aCkpCiAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUwppbmRleCAzYmQ4NTAzLi5mOWQyNzgwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TCkBAIC0xNyw3ICsxNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9mYXN0dGltZXIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZmFzdHRpbWVyLmMKaW5kZXggZWEyYjRhOS4uNWRhZWI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9mYXN0dGltZXIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2Zhc3R0aW1lci5jCkBAIC0xMjAsNyArMTIwLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL3JlZ19tYXAuaD4KQEAgLTk4Miw3ICs5ODEsNyBAQAogICAgIHByb2NfcmVnaXN0ZXJfZHluYW1pYygmcHJvY19yb290LCAmZmFzdHRpbWVyX3Byb2NfZW50cnkpOwogI2VuZGlmCiAjZW5kaWYgLyogUFJPQ19GUyAqLwotICAgIGlmKHJlcXVlc3RfaXJxKFRJTUVSX0lOVFJfVkVDVCwgdGltZXJfdHJpZ19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKyAgICBpZihyZXF1ZXN0X2lycShUSU1FUl9JTlRSX1ZFQ1QsIHRpbWVyX3RyaWdfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogICAgICAgICAgICAgICAgICAgICJmYXN0IHRpbWVyIGludCIsIE5VTEwpKQogICAgIHsKICAgICAgIHByaW50aygiZXJyOiB0aW1lcjEgaXJxXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaGVhZC5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKaW5kZXggM2NmZTU3ZC4uMjBiZDgwYSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQVNTRU1CTEVSX01BQ1JPU19PTkxZCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaW8uYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaW8uYwppbmRleCA2YmM5ZjI2Li5kZmJmY2I4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pby5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYwppbmRleCBjNzhjYzI2Li5jYzM2MWJmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yNjksNyArMjY4LDcgQEAKIGNyaXN2MzJfZG9fSVJRKGludCBpcnEsIGludCBibG9jaywgc3RydWN0IHB0X3JlZ3MqIHJlZ3MpCiB7CiAJLyogSW50ZXJydXB0cyB0aGF0IG1heSBub3QgYmUgbW92ZWQgdG8gYW5vdGhlciBDUFUgYW5kCi0gICAgICAgICAqIGFyZSBTQV9JTlRFUlJVUFQgbWF5IHNraXAgYmxvY2tpbmcuIFRoaXMgaXMgY3VycmVudGx5CisgICAgICAgICAqIGFyZSBJUlFGX0RJU0FCTEVEIG1heSBza2lwIGJsb2NraW5nLiBUaGlzIGlzIGN1cnJlbnRseQogICAgICAgICAgKiBvbmx5IHZhbGlkIGZvciB0aGUgdGltZXIgSVJRIGFuZCB0aGUgSVBJIGFuZCBpcyB1c2VkCiAgICAgICAgICAqIGZvciB0aGUgdGltZXIgaW50ZXJydXB0IHRvIGF2b2lkIHdhdGNoZG9nIHN0YXJ2YXRpb24uCiAgICAgICAgICAqLwpAQCAtMzY5LDcgKzM2OCw3IEBACiAKIAkvKiBQb2ludCBhbGwgSVJRJ3MgdG8gYmFkIGhhbmRsZXJzLiAqLwogCWZvciAoaSA9IEZJUlNUX0lSUSwgaiA9IDA7IGogPCBOUl9JUlFTOyBpKyssIGorKykgewotCQlpcnFfZGVzY1tqXS5oYW5kbGVyID0gJmNyaXN2MzJfaXJxX3R5cGU7CisJCWlycV9kZXNjW2pdLmNoaXAgPSAmY3Jpc3YzMl9pcnFfdHlwZTsKIAkJc2V0X2V4Y2VwdGlvbl92ZWN0b3IoaSwgaW50ZXJydXB0W2pdKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYl9hc20uUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYl9hc20uUwppbmRleCBiMzUwZGQyLi4zZTdmYTllZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9rZ2RiX2FzbS5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYl9hc20uUwpAQCAtNSw3ICs1LDYgQEAKICAqIHBvcnQgZXhjZXB0aW9ucyBmb3Iga2VybmVsIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL2ludHJfdmVjdC5oPgogCiAJOzsgRXhwb3J0ZWQgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYwppbmRleCA4NDM1MTMxLi42MzI2MzUxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYwpAQCAtOCw3ICs4LDYgQEAKICAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NldHVwLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NldHVwLmMKaW5kZXggYjE3YTM5YS4uNDY2MmYzNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2V0dXAuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMywgQXhpcyBDb21tdW5pY2F0aW9ucyBBQi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IGRhNDBkMTkuLjQ2NGVjYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgY3Jpc3YzMl9pcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIGludCBzZW5kX2lwaShpbnQgdmVjdG9yLCBpbnQgd2FpdCwgY3B1bWFza190IGNwdV9tYXNrKTsKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9pcGkgID0geyBjcmlzdjMyX2lwaV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9pcGkgID0geyBjcmlzdjMyX2lwaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVX01BU0tfTk9ORSwgImlwaSIsIE5VTEwsIE5VTEx9OwogCiBleHRlcm4gdm9pZCBjcmlzX21tdV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwppbmRleCBkNDhlMzk3Li41MGYzZjkzIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KQEAgLTI0MiwxMiArMjQxLDE2IEBACiAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogdGltZXIgaXMgU0FfU0hJUlEgc28gZHJpdmVycyBjYW4gYWRkIHN0dWZmIHRvIHRoZSB0aW1lciBpcnEgY2hhaW4KLSAqIGl0IG5lZWRzIHRvIGJlIFNBX0lOVEVSUlVQVCB0byBtYWtlIHRoZSBqaWZmaWVzIHVwZGF0ZSB3b3JrIHByb3Blcmx5CisvKiB0aW1lciBpcyBJUlFGX1NIQVJFRCBzbyBkcml2ZXJzIGNhbiBhZGQgc3R1ZmYgdG8gdGhlIHRpbWVyIGlycSBjaGFpbgorICogaXQgbmVlZHMgdG8gYmUgSVJRRl9ESVNBQkxFRCB0byBtYWtlIHRoZSBqaWZmaWVzIHVwZGF0ZSB3b3JrIHByb3Blcmx5CiAgKi8KIAotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX3RpbWVyICA9IHsgdGltZXJfaW50ZXJydXB0LCBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwKLQkJCQkgIENQVV9NQVNLX05PTkUsICJ0aW1lciIsIE5VTEwsIE5VTEx9Oworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX3RpbWVyICA9IHsKKwkubWFzayA9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCisJLm1hc2sgPSBDUFVfTUFTS19OT05FLAorCS5uYW1lID0gInRpbWVyIgorfTsKIAogdm9pZCBfX2luaXQKIGNyaXNfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90cmFwcy5jCmluZGV4IDZlMzc4NzAuLjI0NjJiMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RyYXBzLmMKQEAgLTIsNyArMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvZHJhbV9pbml0LlMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL2RyYW1faW5pdC5TCmluZGV4IDQ3YjZjZjUuLjE1OGIzZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvZHJhbV9pbml0LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9kcmFtX2luaXQuUwpAQCAtMTYsNyArMTYsNiBAQAogICogdXNlcyB0aGlzIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9hc20vcmVnX21hcF9hc20uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvYXNtL2JpZl9jb3JlX2RlZnNfYXNtLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvaHdfc2V0dGluZ3MuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvaHdfc2V0dGluZ3MuUwppbmRleCA1MTgyZThjLi5mZmY5NDQzNSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9od19zZXR0aW5ncy5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvaHdfc2V0dGluZ3MuUwpAQCAtMTAsNyArMTAsNiBAQAogICogQXV0aG9yczogIE1pa2FlbCBTdGFydmlrIChzdGFydmlrQGF4aXMuY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvYXNtL3JlZ19tYXBfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL2FzbS9iaWZfY29yZV9kZWZzX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9hc20vZ2lvX2RlZnNfYXNtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbGliL25hbmRfaW5pdC5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9uYW5kX2luaXQuUwppbmRleCBhYmE1Yzc1Li5lMDE5ODE2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbGliL25hbmRfaW5pdC5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvbmFuZF9pbml0LlMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvYXNtL3Bpbm11eF9kZWZzX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9hc20vYmlmX2NvcmVfZGVmc19hc20uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvYXNtL2NvbmZpZ19kZWZzX2FzbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiA7OyBUaGVyZSBhcmUgOC1iaXQgTkFORCBmbGFzaGVzIGFuZCAxNi1iaXQgTkFORCBmbGFzaGVzLgogOzsgV2UgbmVlZCB0byB0cmVhdCB0aGVtIHNsaWdodGx5IGRpZmZlcmVudC4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9pbml0LmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vaW5pdC5jCmluZGV4IGYyZmJhMjcuLmE4NGJhN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9pbml0LmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL2luaXQuYwpAQCAtNiwxMiArNiwxMCBAQAogICogQXV0aG9yczogICBCam9ybiBXZXNlbiA8Ympvcm53QGF4aXMuY29tPgogICogICAgICAgICAgICBUb2JpYXMgQW5kZXJiZXJnIDx0b2JpYXNhQGF4aXMuY29tPiwgQ1JJU3YzMiBwb3J0LgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi92bWxpbnV4Lmxkcy5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL3ZtbGludXgubGRzLlMKaW5kZXggYWRiOTQ2MC4uNDcyZDRiMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL3ZtbGludXgubGRzLlMKQEAgLTgsNyArOCw2IEBACiAgKiB0aGUga2VybmVsIGhhcyBib290ZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKIGppZmZpZXMgPSBqaWZmaWVzXzY0OwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKaW5kZXggZDU3ODU5MC4uMWYyMGMxNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwppbmRleCBiNTA0ZGVmLi45MDNlYTYyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIE5hdHVyYWxseSBpdCdzIG5vdCBhIDE6MSByZWxhdGlvbiwgYnV0IHRoZXJlIGFyZSBzaW1pbGFyaXRpZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtNjksNyArNjgsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCkBAIC04Niw3ICs4NSw3IEBACiAvKiBjYWxsZWQgYnkgdGhlIGFzc2VtYmxlciBJUlEgZW50cnkgZnVuY3Rpb25zIGRlZmluZWQgaW4gaXJxLmgKICAqIHRvIGRpc3BhdGNoIHRoZSBpbnRlcnJ1cHRzIHRvIHJlZ2lzdHJlZCBoYW5kbGVycwogICogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdXBvbiBlbnRyeSAtIGRlcGVuZGluZyBvbiBpZiB0aGUKLSAqIGludGVycnVwdCB3YXMgcmVnaXN0cmVkIHdpdGggU0FfSU5URVJSVVBUIG9yIG5vdCwgaW50ZXJydXB0cworICogaW50ZXJydXB0IHdhcyByZWdpc3RyZWQgd2l0aCBJUlFGX0RJU0FCTEVEIG9yIG5vdCwgaW50ZXJydXB0cwogICogYXJlIHJlLWVuYWJsZWQgb3Igbm90LgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvc2V0dXAuYwppbmRleCA2MTlhNmVlLi42ZDk0MWZiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9zZXR1cC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBpbml0aWFsaXphdGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvYnJlYWsuUyBiL2FyY2gvZnJ2L2tlcm5lbC9icmVhay5TCmluZGV4IDY4N2M0OGQuLmVhMTYxZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9icmVhay5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9icmVhay5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2Ntb2RlLlMgYi9hcmNoL2Zydi9rZXJuZWwvY21vZGUuUwppbmRleCA2NTkxZTZhLi44MWJhMjhhIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvY21vZGUuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvY21vZGUuUwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS10YWJsZS5TIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LXRhYmxlLlMKaW5kZXggODE1NjhhYy4uZDNiOTI1MyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LXRhYmxlLlMKKysrIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LXRhYmxlLlMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3lzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zcHItcmVncy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCmluZGV4IDgxZDk0ZTQuLjJhMWZmMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYwppbmRleCBkZWU2MzdmLi5mNzcyNzA0IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaGVhZC1tbXUtZnI0NTEuUyBiL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLW1tdS1mcjQ1MS5TCmluZGV4IGExNDNjMmYuLmM4ZjIxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLW1tdS1mcjQ1MS5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLW1tdS1mcjQ1MS5TCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaGVhZC11Yy1mcjQwMS5TIGIvYXJjaC9mcnYva2VybmVsL2hlYWQtdWMtZnI0MDEuUwppbmRleCA0Y2NmODQxLi5lZTI4MmJlIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaGVhZC11Yy1mcjQwMS5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLXVjLWZyNDAxLlMKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLXVjLWZyNDUxLlMgYi9hcmNoL2Zydi9rZXJuZWwvaGVhZC11Yy1mcjQ1MS5TCmluZGV4IDMxY2I1NGEuLmIxMGQ5YzggMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLXVjLWZyNDUxLlMKKysrIGIvYXJjaC9mcnYva2VybmVsL2hlYWQtdWMtZnI0NTEuUwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2hlYWQtdWMtZnI1NTUuUyBiL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLXVjLWZyNTU1LlMKaW5kZXggZDA4OGRiMi4uMzk5MzdjMSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2hlYWQtdWMtZnI1NTUuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvaGVhZC11Yy1mcjU1NS5TCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaGVhZC5TIGIvYXJjaC9mcnYva2VybmVsL2hlYWQuUwppbmRleCAyOWE1MjY1Li40N2M5OTBhIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9oZWFkLlMKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5MS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMKaW5kZXggOTc3OGUwZi4uMTM4MWFiYyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkzLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYwppbmRleCAyMWNhMmIyLi40OGIyYTY0IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTM0OTMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jCmluZGV4IGMwMDNhZTUuLjk4OGQwMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtcm91dGluZy5jIGIvYXJjaC9mcnYva2VybmVsL2lycS1yb3V0aW5nLmMKaW5kZXggYjkwYjcwYS4uNTM4ODZhZCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS1yb3V0aW5nLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS1yb3V0aW5nLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAkJaWYgKGFjdGlvbikgewogCQkJaW50IHN0YXR1cyA9IDA7CiAKLS8vCQkJaWYgKCEoYWN0aW9uLT5mbGFncyAmIFNBX0lOVEVSUlVQVCkpCisvLwkJCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKSkKIC8vCQkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCQkJZG8gewpAQCAtOTAsNyArOTAsNyBAQAogCQkJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKIAkJCX0gd2hpbGUgKGFjdGlvbik7CiAKLQkJCWlmIChzdGF0dXMgJiBTQV9TQU1QTEVfUkFORE9NKQorCQkJaWYgKHN0YXR1cyAmIElSUUZfU0FNUExFX1JBTkRPTSkKIAkJCQlhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3MoaXJxKTsKIAkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYwppbmRleCA4YjExMmIzLi4wODk2NzAxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBOYXR1cmFsbHkgaXQncyBub3QgYSAxOjEgcmVsYXRpb24sIGJ1dCB0aGVyZSBhcmUgc2ltaWxhcml0aWVzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpAQCAtMzQyLDExICszNDEsMTEgQEAKICAqCiAgKglGbGFnczoKICAqCi0gKglTQV9TSElSUQkJSW50ZXJydXB0IGlzIHNoYXJlZAorICoJSVJRRl9TSEFSRUQJCUludGVycnVwdCBpcyBzaGFyZWQKICAqCi0gKglTQV9JTlRFUlJVUFQJCURpc2FibGUgbG9jYWwgaW50ZXJydXB0cyB3aGlsZSBwcm9jZXNzaW5nCisgKglJUlFGX0RJU0FCTEVECURpc2FibGUgbG9jYWwgaW50ZXJydXB0cyB3aGlsZSBwcm9jZXNzaW5nCiAgKgotICoJU0FfU0FNUExFX1JBTkRPTQlUaGUgaW50ZXJydXB0IGNhbiBiZSB1c2VkIGZvciBlbnRyb3B5CisgKglJUlFGX1NBTVBMRV9SQU5ET00JVGhlIGludGVycnVwdCBjYW4gYmUgdXNlZCBmb3IgZW50cm9weQogICoKICAqLwogCkBAIC0zNjYsNyArMzY1LDcgQEAKIAkgKiB0byBmaWd1cmUgb3V0IHdoaWNoIGludGVycnVwdCBpcyB3aGljaCAobWVzc2VzIHVwIHRoZQogCSAqIGludGVycnVwdCBmcmVlaW5nIGxvZ2ljIGV0YykuCiAJICovCi0JaWYgKGlycWZsYWdzICYgU0FfU0hJUlEpIHsKKwlpZiAoaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkgewogCQlpZiAoIWRldl9pZCkKIAkJCXByaW50aygiQmFkIGJveTogJXMgKGF0IDB4JXgpIGNhbGxlZCB1cyB3aXRob3V0IGEgZGV2X2lkIVxuIiwKIAkJCSAgICAgICBkZXZuYW1lLCAoJmlycSlbLTFdKTsKQEAgLTU3Nyw3ICs1NzYsNyBAQAogCSAqIHNvIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW50ZXJmZXJlIHdpdGggYQogCSAqIHJ1bm5pbmcgc3lzdGVtLgogCSAqLwotCWlmIChuZXctPmZsYWdzICYgU0FfU0FNUExFX1JBTkRPTSkgeworCWlmIChuZXctPmZsYWdzICYgSVJRRl9TQU1QTEVfUkFORE9NKSB7CiAJCS8qCiAJCSAqIFRoaXMgZnVuY3Rpb24gbWlnaHQgc2xlZXAsIHdlIHdhbnQgdG8gY2FsbCBpdCBmaXJzdCwKIAkJICogb3V0c2lkZSBvZiB0aGUgYXRvbWljIGJsb2NrLgpAQCAtNTkzLDcgKzU5Miw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxldmVsLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBjYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBhbGwgcGFydGllcyBhZ3JlZSB0byAqLwotCWlmIChsZXZlbC0+dXNhZ2UgIT0gMCAmJiAhKGxldmVsLT5mbGFncyAmIG5ldy0+ZmxhZ3MgJiBTQV9TSElSUSkpIHsKKwlpZiAobGV2ZWwtPnVzYWdlICE9IDAgJiYgIShsZXZlbC0+ZmxhZ3MgJiBuZXctPmZsYWdzICYgSVJRRl9TSEFSRUQpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxldmVsLT5sb2NrLGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcG0tbWI5MzA5My5jIGIvYXJjaC9mcnYva2VybmVsL3BtLW1iOTMwOTMuYwppbmRleCAzNGQwMWQ3Li5lYWE3YjU4IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcG0tbWI5MzA5My5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9wbS1tYjkzMDkzLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcG0uYyBiL2FyY2gvZnJ2L2tlcm5lbC9wbS5jCmluZGV4IDQzY2UyOGExMy4uZTY1YTlmMSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3BtLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3BtLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDg5ZTZjNC4uZWVlYjFlMiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2Zydi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZjk1MzQ4NC4uZmNmZjgxOSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYwppbmRleCA3OTcxZDY4Li5mMjc4Y2RmMyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3NlbWFwaG9yZS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYwpAQCAtMTAsNyArMTAsNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDFmN2Q2NWYuLmFmMDhjY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMCw4ICsxMCw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zbGVlcC5TIGIvYXJjaC9mcnYva2VybmVsL3NsZWVwLlMKaW5kZXggZTYwNzliOC4uYzliMmQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3NsZWVwLlMKKysrIGIvYXJjaC9mcnYva2VybmVsL3NsZWVwLlMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3lzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc3dpdGNoX3RvLlMgYi9hcmNoL2Zydi9rZXJuZWwvc3dpdGNoX3RvLlMKaW5kZXggMTcwM2RjMi4uOWU1YTU4MyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3N3aXRjaF90by5TCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zd2l0Y2hfdG8uUwpAQCAtMTEsNyArMTEsNiBAQAogIyAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc3lzY3RsLmMgYi9hcmNoL2Zydi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggYjkwODg2My4uY2U2NzY4MCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3N5c2N0bC5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zeXNjdGwuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvdGltZS5jIGIvYXJjaC9mcnYva2VybmVsL3RpbWUuYwppbmRleCAyNGNmODVmLi5kNWI2NGUxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXksIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxICA9IHsKLQl0aW1lcl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTAorCXRpbWVyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9mcnYva2VybmVsL3RyYXBzLmMKaW5kZXggOWViODRiMi4uOThjZTM2MiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3RyYXBzLmMKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggMGEyNmJmNi4uNGYxNjVjOSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC02NCwxMCArNjQsMTAgQEAKICAqLwogdm9pZAogcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKKwkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJCWlmIChzdGFydCAmIDB4MzAwKSB7CiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktaXJxLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWlycS5jCmluZGV4IDQ1YWUzOWQuLjIyNzhjODAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktaXJxLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1pcnEuYwpAQCAtNSw3ICs1LDYgQEAKICAqIGRlcml2ZWQgZnJvbTogYXJjaC9pMzg2L2tlcm5lbC9wY2ktaXJxLmM6IChjKSAxOTk5LS0yMDAwIE1hcnRpbiBNYXJlcyA8bWpAc3VzZS5jej4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jCmluZGV4IGM4ODE3ZjcuLmZiOThlOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL2RtYS1hbGxvYy5jIGIvYXJjaC9mcnYvbW0vZG1hLWFsbG9jLmMKaW5kZXggNjM2YjJmOC4uZGM2NTIyYyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbW0vZG1hLWFsbG9jLmMKKysrIGIvYXJjaC9mcnYvbW0vZG1hLWFsbG9jLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vZXh0YWJsZS5jIGIvYXJjaC9mcnYvbW0vZXh0YWJsZS5jCmluZGV4IGNhYWNmMDMuLjZhZWExMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2V4dGFibGUuYworKysgYi9hcmNoL2Zydi9tbS9leHRhYmxlLmMKQEAgLTIsNyArMiw2IEBACiAgKiBsaW51eC9hcmNoL2Zydi9tbS9leHRhYmxlLmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vaW5pdC5jIGIvYXJjaC9mcnYvbW0vaW5pdC5jCmluZGV4IDg4OTlhYTEuLmI1YjQyODYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2luaXQuYworKysgYi9hcmNoL2Zydi9tbS9pbml0LmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqICAgIC0gQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0va21hcC5jIGIvYXJjaC9mcnYvbW0va21hcC5jCmluZGV4IDQwYjYyYzUuLmZiNzhiZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2ttYXAuYworKysgYi9hcmNoL2Zydi9tbS9rbWFwLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tbS90bGItZmx1c2guUyBiL2FyY2gvZnJ2L21tL3RsYi1mbHVzaC5TCmluZGV4IDZmNDNjNzQuLjc5YjNjNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL3RsYi1mbHVzaC5TCisrKyBiL2FyY2gvZnJ2L21tL3RsYi1mbHVzaC5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL3RsYi1taXNzLlMgYi9hcmNoL2Zydi9tbS90bGItbWlzcy5TCmluZGV4IDg3MjlmN2QuLjA0ZGE2NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL3RsYi1taXNzLlMKKysrIGIvYXJjaC9mcnYvbW0vdGxiLW1pc3MuUwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vdW5hbGlnbmVkLmMgYi9hcmNoL2Zydi9tbS91bmFsaWduZWQuYwppbmRleCAwOWIzNjE0Li44ZjAzNzVmIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS91bmFsaWduZWQuYworKysgYi9hcmNoL2Zydi9tbS91bmFsaWduZWQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9ncGlvLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9ncGlvLmMKaW5kZXggZDE5NTU2OC4uNmEyNWRkNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvZ3Bpby5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL2dwaW8uYwpAQCAtOSw3ICs5LDYgQEAKICAqIEludGVybmFsIEkvTyBQb3J0IE1hbmFnZW1lbnQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYyBiL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKaW5kZXggZjhkNmRlZS4uOWI0YmUwNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9pbnRzLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9pbnRzLmMKaW5kZXggZWRiM2M0MS4uMTQ4OGI2YSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaW50cy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL2ludHMuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJaXJxX2hhbmRsZS0+ZGV2bmFtZSA9IGRldm5hbWU7CiAJaXJxX2xpc3RbaXJxXSA9IGlycV9oYW5kbGU7CiAKLQlpZiAoaXJxX2hhbmRsZS0+ZmxhZ3MgJiBTQV9TQU1QTEVfUkFORE9NKQorCWlmIChpcnFfaGFuZGxlLT5mbGFncyAmIElSUUZfU0FNUExFX1JBTkRPTSkKIAkJcmFuZF9pbml0aWFsaXplX2lycShpcnEpOwogCiAJZW5hYmxlX2lycShpcnEpOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCWlmIChpcnFfbGlzdFtpcnFdKSB7CiAJCQlpcnFfbGlzdFtpcnFdLT5oYW5kbGVyKGlycSwgaXJxX2xpc3RbaXJxXS0+ZGV2X2lkLCBmcCk7CiAJCQlpcnFfbGlzdFtpcnFdLT5jb3VudCsrOwotCQkJaWYgKGlycV9saXN0W2lycV0tPmZsYWdzICYgU0FfU0FNUExFX1JBTkRPTSkKKwkJCWlmIChpcnFfbGlzdFtpcnFdLT5mbGFncyAmIElSUUZfU0FNUExFX1JBTkRPTSkKIAkJCQlhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3MoaXJxKTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTZjY2RkYy4uZTA2MWI2MyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjIsNyArMjIsNiBAQAogICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgcHJvY2VzcyBoYW5kbGluZy4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMGZmNmY3OS4uZjYwMzEzNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3NlbWFwaG9yZS5jCmluZGV4IDFlYmI3OWIuLmQxMmNiYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3NlbWFwaG9yZS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0zLDcgKzMsNiBAQAogICogc3BlY2lmaWMgY2hhbmdlcyBpbiA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3NldHVwLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9zZXR1cC5jCmluZGV4IGY0NjlkOTEuLjEwNzdiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvc2V0dXAuYwpAQCAtMTYsNyArMTYsNiBAQAogICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2Ygc3lzdGVtIHNldHVwCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL2g4MzAwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDc5YjNiZGEuLmRhYjk4ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMSw1ICsxLDQgQEAKIC8qIFN5c3RlbWNhbGwgRW50cnkgVGFibGUgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDE3ZmExMWQuLjY0MDZjMzggMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSw2ICsxLDUgQEAKICNkZWZpbmUgVk1MSU5VWF9TWU1CT0woX3N5bV8pIF8jI19zeW1fCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogdGFyZ2V0IG1lbW9yeSBtYXAgKi8KICNpZmRlZiBDT05GSUdfSDgzMDBIX0dFTkVSSUMKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvbGliL3JvbWZzLlMgYi9hcmNoL2g4MzAwL2xpYi9yb21mcy5TCmluZGV4IGI3MmY5M2EuLjY4OTEwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvbGliL3JvbWZzLlMKKysrIGIvYXJjaC9oODMwMC9saWIvcm9tZnMuUwpAQCAtMSw3ICsxLDYgQEAKIC8qIHJvbWZzIG1vdmUgdG8gX19lYnNzICovCiAKICNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChfX0g4MzAwSF9fKSAKIAkuaDgzMDBoCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL21tL2luaXQuYyBiL2FyY2gvaDgzMDAvbW0vaW5pdC5jCmluZGV4IDA5ZWZjNGIuLmQzZDQwYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvbW0vaW5pdC5jCisrKyBiL2FyY2gvaDgzMDAvbW0vaW5pdC5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgREVDLzIwMDAgLS0gbGludXggMi40IHN1cHBvcnQgPGRhdmlkbUBzbmFwZ2Vhci5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL21tL2ttYXAuYyBiL2FyY2gvaDgzMDAvbW0va21hcC5jCmluZGV4IDQxMDFhYjUuLjI2YWIxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvbW0va21hcC5jCisrKyBiL2FyY2gvaDgzMDAvbW0va21hcC5jCkBAIC04LDcgKzgsNiBAQAogICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jIGIvYXJjaC9oODMwMC9tbS9tZW1vcnkuYwppbmRleCA4MWVhY2U5Li5jY2Q2YWRlIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jCisrKyBiL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIEhhbWlzaCBNYWNkb25hbGQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvY3J0MF9yYW0uUyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvY3J0MF9yYW0uUwppbmRleCAzMWMzNzAzLi5lY2FlYjMxIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L2NydDBfcmFtLlMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC9jcnQwX3JhbS5TCkBAIC0xMCw3ICsxMCw2IEBACiAKICNkZWZpbmUgQVNTRU1CTFkKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9saW5rYWdlLmg+CiAJCiAjaWYgIWRlZmluZWQoQ09ORklHX0JMS0RFVl9SRVNFUlZFKQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC90aW1lci5jCmluZGV4IDA4NmVmYjEuLjI3Y2Q4NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvdGltZXIuYworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L3RpbWVyLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9lbnRyeS5TIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZW50cnkuUwppbmRleCAyMDUyZGJiLi5kMmRlYTI0IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9lbnRyeS5TCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2VudHJ5LlMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3lzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL2NydDBfcmFtLlMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL2NydDBfcmFtLlMKaW5kZXggYjczNTA0Mi4uODBkMGUxNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvY3J0MF9yYW0uUworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL2NydDBfcmFtLlMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2RlZmluZSBBU1NFTUJMWQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KIAkKICNpZiAhZGVmaW5lZChDT05GSUdfQkxLREVWX1JFU0VSVkUpCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL2NydDBfcm9tLlMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL2NydDBfcm9tLlMKaW5kZXggMmUzMmQ4MS4uMTIwYWRkNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy9jcnQwX3JvbS5TCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvY3J0MF9yb20uUwpAQCAtMTAsNyArMTAsNiBAQAogCiAjZGVmaW5lIEFTU0VNQkxZCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgogCQogCS5nbG9iYWwgU1lNQk9MX05BTUUoX3N0YXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jCmluZGV4IDY1OTBmODkuLjZmNWNlZmUwIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL3RpbWVyLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvY3J0MF9yYW0uUyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L2NydDBfcmFtLlMKaW5kZXggYTVjNWE5MS4uZWZjYmVmYiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvY3J0MF9yYW0uUworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9oOG1heC9jcnQwX3JhbS5TCkBAIC0xMCw3ICsxMCw2IEBACiAKICNkZWZpbmUgQVNTRU1CTFkKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9saW5rYWdlLmg+CiAJCiAjaWYgIWRlZmluZWQoQ09ORklHX0JMS0RFVl9SRVNFUlZFKQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L3RpbWVyLmMKaW5kZXggOWFjOWZhNi4uODVhNTc0YSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9oOG1heC90aW1lci5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaW50c19oODMwMGguYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2ludHNfaDgzMDBoLmMKaW5kZXggODZhMTU1NC4uZjE3NzcxMSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaW50c19oODMwMGguYworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9pbnRzX2g4MzAwaC5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC9jcnQwX3JhbS5TIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L2NydDBfcmFtLlMKaW5kZXggODEwNWRjMS4uZDEyYjBkZSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L2NydDBfcmFtLlMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L2NydDBfcmFtLlMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2RlZmluZSBBU1NFTUJMWQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KIAkJCQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L2NydDBfcm9tLlMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvY3J0MF9yb20uUwppbmRleCA2NTc0OGJmMS4uYzAzZDIzYyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L2NydDBfcm9tLlMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L2NydDBfcm9tLlMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2RlZmluZSBBU1NFTUJMWQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KIAkJCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCmluZGV4IDk0NDFhNGYuLmJmYjE0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZW50cnkuUyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2VudHJ5LlMKaW5kZXggYTdhNTNjOC4uYWViMmU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZW50cnkuUworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lbnRyeS5TCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9jcnQwX3JhbS5TIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9jcnQwX3JhbS5TCmluZGV4IDg2ZjQ1MDEuLmIwNDU0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvY3J0MF9yYW0uUworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL2NydDBfcmFtLlMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2RlZmluZSBBU1NFTUJMWQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KIAkJCQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9jcnQwX3JvbS5TIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9jcnQwX3JvbS5TCmluZGV4IGUxOGU0MTIuLjk1YjZmMjggMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvY3J0MF9yb20uUworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL2NydDBfcm9tLlMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2RlZmluZSBBU1NFTUJMWQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KIAkKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvdGltZXIuYwppbmRleCA2MzNjZDhlLi5jMjIxMWM2IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy90aW1lci5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jCmluZGV4IGY2ZWQ2NjMuLjI3MDQ0MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHMuYworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWlycV9oYW5kbGUtPmRldl9pZCAgPSBkZXZfaWQ7CiAJaXJxX2hhbmRsZS0+ZGV2bmFtZSA9IGRldm5hbWU7CiAJaXJxX2xpc3RbaXJxXSA9IGlycV9oYW5kbGU7Ci0JaWYgKGlycV9oYW5kbGUtPmZsYWdzICYgU0FfU0FNUExFX1JBTkRPTSkKKwlpZiAoaXJxX2hhbmRsZS0+ZmxhZ3MgJiBJUlFGX1NBTVBMRV9SQU5ET00pCiAJCXJhbmRfaW5pdGlhbGl6ZV9pcnEoaXJxKTsKIAkKIAkvKiBlbmFibGUgaW50ZXJydXB0ICovCkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJaWYgKGlycV9saXN0W3ZlY10pIHsKIAkJCWlycV9saXN0W3ZlY10tPmhhbmRsZXIodmVjLCBpcnFfbGlzdFt2ZWNdLT5kZXZfaWQsIGZwKTsKIAkJCWlycV9saXN0W3ZlY10tPmNvdW50Kys7Ci0JCQlpZiAoaXJxX2xpc3RbdmVjXS0+ZmxhZ3MgJiBTQV9TQU1QTEVfUkFORE9NKQorCQkJaWYgKGlycV9saXN0W3ZlY10tPmZsYWdzICYgSVJRRl9TQU1QTEVfUkFORE9NKQogCQkJCWFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyh2ZWMpOwogCQl9CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHNfaDhzLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzX2g4cy5jCmluZGV4IDgyNjhkZmQuLjkzMzk1ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHNfaDhzLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50c19oOHMuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcgYi9hcmNoL2kzODYvS2NvbmZpZwppbmRleCAzYmIyMjFkLi5kYWE3NWNlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZworKysgYi9hcmNoL2kzODYvS2NvbmZpZwpAQCAtMTgsNiArMTgsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBMT0NLREVQX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBTRU1BUEhPUkVfU0xFRVBFUlMKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xNzYsNyArMTg0LDcgQEAKIGNvbmZpZyBBQ1BJX1NSQVQKIAlib29sCiAJZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBOVU1BICYmIChYODZfU1VNTUlUIHx8IFg4Nl9HRU5FUklDQVJDSCkKKwlkZXBlbmRzIG9uIEFDUEkgJiYgTlVNQSAmJiAoWDg2X1NVTU1JVCB8fCBYODZfR0VORVJJQ0FSQ0gpCiAJc2VsZWN0IEFDUElfTlVNQQogCiBjb25maWcgSEFWRV9BUkNIX1BBUlNFX1NSQVQKQEAgLTUyOSw2ICs1MzcsNyBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIEhJR0hNRU02NEcKIAlkZWZhdWx0IHkKKwlzZWxlY3QgUkVTT1VSQ0VTXzY0QklUCiAKICMgQ29tbW9uIE5VTUEgRmVhdHVyZXMKIGNvbmZpZyBOVU1BCkBAIC03MzcsNyArNzQ2LDcgQEAKIAkgIGJ1dCBpdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CiAJICB5b3UgY2FuIHN0YXJ0IGFueSBrZXJuZWwgd2l0aCBpdCwgbm90IGp1c3QgTGludXguCiAKLQkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsaWFyaXR5IHRvIHRoZSBleGVjIHN5c3RlbSBjYWxsLgorCSAgVGhlIG5hbWUgY29tZXMgZnJvbSB0aGUgc2ltaWxhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KIAogCSAgSXQgaXMgYW4gb25nb2luZyBwcm9jZXNzIHRvIGJlIGNlcnRhaW4gdGhlIGhhcmR3YXJlIGluIGEgbWFjaGluZQogCSAgaXMgcHJvcGVybHkgc2h1dGRvd24sIHNvIGRvIG5vdCBiZSBzdXJwcmlzZWQgaWYgdGhpcyBjb2RlIGRvZXMgbm90CkBAIC03OTQsNiArODAzLDkgQEAKIAogZW5kbWVudQogCitjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBISUdITUVNCiAKIG1lbnUgIlBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoQUNQSSwgQVBNKSIKIAlkZXBlbmRzIG9uICFYODZfVk9ZQUdFUgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcuZGVidWcgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwppbmRleCBjOTIxOTFiLi5iMzFjMDgwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwpAQCAtMSw1ICsxLDkgQEAKIG1lbnUgIktlcm5lbCBoYWNraW5nIgogCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWJvb2wKKwlkZWZhdWx0IHkKKwogc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKIAogY29uZmlnIEVBUkxZX1BSSU5USwpAQCAtMzEsMTUgKzM1LDYgQEAKIAogCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KIAotY29uZmlnIFNUQUNLX0JBQ0tUUkFDRV9DT0xTCi0JaW50ICJTdGFjayBiYWNrdHJhY2VzIHBlciBsaW5lIiBpZiBERUJVR19LRVJORUwKLQlyYW5nZSAxIDMKLQlkZWZhdWx0IDIKLQloZWxwCi0JICBTZWxlY3RzIGhvdyBtYW55IHN0YWNrIGJhY2t0cmFjZSBlbnRyaWVzIHBlciBsaW5lIHRvIGRpc3BsYXkuCi0KLQkgIFRoaXMgY2FuIHNhdmUgc2NyZWVuIHNwYWNlIHdoZW4gZGlzcGxheWluZyB0cmFjZXMuCi0KIGNvbW1lbnQgIlBhZ2UgYWxsb2MgZGVidWcgaXMgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCBvbiBpMzg2IgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFNPRlRXQVJFX1NVU1BFTkQKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUyBiL2FyY2gvaTM4Ni9ib290L3NldHVwLlMKaW5kZXggY2E2NjhkOS4uZDJiNjg0YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUworKysgYi9hcmNoL2kzODYvYm9vdC9zZXR1cC5TCkBAIC00Niw5ICs0Niw4IEBACiAgKiBieSBSb2JlcnQgU2Nod2ViZWwsIERlY2VtYmVyIDIwMDEgPHJvYmVydEBzY2h3ZWJlbC5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGUuaD4KICNpbmNsdWRlIDxhc20vYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA1ZTcwYzJmLi4xYjQ1MmExIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiAJCXBjaS1kbWEubyBpMzg2X2tzeW1zLm8gaTM4Ny5vIGJvb3RmbGFnLm8gXAogCQlxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8gYWx0ZXJuYXRpdmUubyBpODI1My5vIHRzYy5vCiAKK29iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KIG9iai15CQkJCSs9IGNwdS8KIG9iai15CQkJCSs9IGFjcGkvCiBvYmotJChDT05GSUdfWDg2X0JJT1NfUkVCT09UKQkrPSByZWJvb3QubwpAQCAtMzgsNiArMzksNyBAQAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KIG9iai0kKENPTkZJR19IUEVUX1RJTUVSKSAJKz0gaHBldC5vCiBvYmotJChDT05GSUdfSzhfTkIpCQkrPSBrOC5vCitvYmotJChDT05GSUdfQVVESVQpCQkrPSBhdWRpdC5vCiAKIEVYVFJBX0FGTEFHUyAgIDo9IC10cmFkaXRpb25hbAogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCA5N2NhMTcxLi4wZGI2Mzg3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA1MGViMGUwLi4yOGFiODA2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0xNjgsNiArMTY4LDggQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCisKIHN0YXRpYyB2b2lkIGFsdGVybmF0aXZlc19zbXBfc2F2ZShzdHJ1Y3QgYWx0X2luc3RyICpzdGFydCwgc3RydWN0IGFsdF9pbnN0ciAqZW5kKQogewogCXN0cnVjdCBhbHRfaW5zdHIgKmE7CkBAIC0zMDEsNiArMzAzLDE2IEBACiAJc3RydWN0IHNtcF9hbHRfbW9kdWxlICptb2Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyoKKwkgKiBBIG5vdCB5ZXQgZml4ZWQgYmludXRpbHMgc2VjdGlvbiBoYW5kbGluZyBidWcgcHJldmVudHMKKwkgKiBhbHRlcm5hdGl2ZXMtcmVwbGFjZW1lbnQgZnJvbSB3b3JraW5nIHJlbGlhYmx5LCBzbyB0dXJuCisJICogaXQgb2ZmOgorCSAqLworCXByaW50aygibG9ja2RlcDogbm90IGZpeGluZyB1cCBhbHRlcm5hdGl2ZXMuXG4iKTsKKwlyZXR1cm47CisjZW5kaWYKKwogCWlmIChub19yZXBsYWNlbWVudCB8fCBzbXBfYWx0X29uY2UpCiAJCXJldHVybjsKIAlCVUdfT04oIXNtcCAmJiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSk7CkBAIC0zMjgsNiArMzQwLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXBfYWx0LCBmbGFncyk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIF9faW5pdCBhbHRlcm5hdGl2ZV9pbnN0cnVjdGlvbnModm9pZCkKIHsKIAlpZiAobm9fcmVwbGFjZW1lbnQpIHsKQEAgLTM0OSw2ICszNjMsNyBAQAogCXNtcF9hbHRfb25jZSA9IDE7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoc21wX2FsdF9vbmNlKSB7CiAJCWlmICgxID09IG51bV9wb3NzaWJsZV9jcHVzKCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlNNUCBhbHRlcm5hdGl2ZXM6IHN3aXRjaGluZyB0byBVUCBjb2RlXG4iKTsKQEAgLTM3MCw0ICszODUsNSBAQAogCQkJCQkgICAgX3RleHQsIF9ldGV4dCk7CiAJCWFsdGVybmF0aXZlc19zbXBfc3dpdGNoKDApOwogCX0KKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwppbmRleCA3Y2UwOTQ5Li44Yzg0NGQwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwaWMuYwpAQCAtMTQsNyArMTQsNiBAQAogICoJTWlrYWVsIFBldHRlcnNzb24JOglQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKaW5kZXggN2M1NzI5ZC4uODU5MWYyZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYworKysgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCkBAIC0yMDEsNyArMjAxLDYgQEAKICAqICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9od2Rldi9idXNiaW9zL2FtcF8xMi5odG1dCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hdWRpdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hdWRpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTNjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYva2VybmVsL2F1ZGl0LmMKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitzdGF0aWMgdW5zaWduZWQgZGlyX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGF0dHJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgorfjBVCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9jbGFzc2VzX2luaXQodm9pZCkKK3sKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBjaGF0dHJfY2xhc3MpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGF1ZGl0X2NsYXNzZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2Jvb3RmbGFnLmMgYi9hcmNoL2kzODYva2VybmVsL2Jvb3RmbGFnLmMKaW5kZXggNGMzMGVkMC4uMGI5ODYwNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9ib290ZmxhZy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYm9vdGZsYWcuYwpAQCAtMyw3ICszLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDVmZDY1MzIuLjU2N2IzOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMjQsNyArMjQsNiBAQAogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDE4LDggKzQxNywxNCBAQAogCQlnb3RvIGVycl9mcmVlOwogCiAJcGVyZiA9IGRhdGEtPmFjcGlfZGF0YTsKLQlwb2xpY3ktPmNwdXMgPSBwZXJmLT5zaGFyZWRfY3B1X21hcDsKIAlwb2xpY3ktPnNoYXJlZF90eXBlID0gcGVyZi0+c2hhcmVkX3R5cGU7CisJLyoKKwkgKiBXaWxsIGxldCBwb2xpY3ktPmNwdXMga25vdyBhYm91dCBkZXBlbmRlbmN5IG9ubHkgd2hlbiBzb2Z0d2FyZSAKKwkgKiBjb29yZGluYXRpb24gaXMgcmVxdWlyZWQuCisJICovCisJaWYgKHBvbGljeS0+c2hhcmVkX3R5cGUgPT0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTEwgfHwKKwkgICAgcG9saWN5LT5zaGFyZWRfdHlwZSA9PSBDUFVGUkVRX1NIQVJFRF9UWVBFX0FOWSkKKwkJcG9saWN5LT5jcHVzID0gcGVyZi0+c2hhcmVkX2NwdV9tYXA7CiAKIAlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKSB7CiAJCWFjcGlfY3B1ZnJlcV9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwppbmRleCBhYjY1MDRlLi4zMDRkMmVhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggNjk0ZDQ3OS4uNTQzODI3NiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwpAQCAtMTIsNyArMTIsNiBAQAogICogLSBXZSBkaXNhYmxlIGhhbGYgbXVsdGlwbGllcnMgaWYgQUNQSSBpcyB1c2VkIG9uIEEwIHN0ZXBwaW5nIENQVXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwppbmRleCBmN2U0MzU2Li5iNzdmMTM1OCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBjdXJyZW50ICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtMzk5LDggKzM5OCwxNCBAQAogCQlkcHJpbnRrKFBGWCAib2J0YWluaW5nIEFDUEkgZGF0YSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JcG9saWN5LT5jcHVzID0gcC0+c2hhcmVkX2NwdV9tYXA7CiAJcG9saWN5LT5zaGFyZWRfdHlwZSA9IHAtPnNoYXJlZF90eXBlOworCS8qCisJICogV2lsbCBsZXQgcG9saWN5LT5jcHVzIGtub3cgYWJvdXQgZGVwZW5kZW5jeSBvbmx5IHdoZW4gc29mdHdhcmUgCisJICogY29vcmRpbmF0aW9uIGlzIHJlcXVpcmVkLgorCSAqLworCWlmIChwb2xpY3ktPnNoYXJlZF90eXBlID09IENQVUZSRVFfU0hBUkVEX1RZUEVfQUxMIHx8CisJICAgIHBvbGljeS0+c2hhcmVkX3R5cGUgPT0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTlkpCisJCXBvbGljeS0+Y3B1cyA9IHAtPnNoYXJlZF9jcHVfbWFwOwogCiAJLyogdmVyaWZ5IHRoZSBhY3BpX2RhdGEgKi8KIAlpZiAocC0+c3RhdGVfY291bnQgPD0gMSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggMTBhZmM2NC4uNWEyZTI3MCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svazcuYwppbmRleCBmYzVkNTIxLi5iMDg2MmFmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svazcuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svazcuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IGFmYTA4ODhmLi5kNTU1YmVjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMKaW5kZXggODJkZmZlMC4uMWY5MTUzYSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svcDQuYwppbmRleCBmZDJjNDU5Li5iOTVmMWIzZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCBmNmRmYTlmYi4uZmRlOGJlYSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTE2OCw2ICsxNjcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyBpbnQgY3B1aWRfY2xhc3NfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKQEAgLTE4Nyw2ICsxODcsNyBAQAogewogCS5ub3RpZmllcl9jYWxsID0gY3B1aWRfY2xhc3NfY3B1X2NhbGxiYWNrLAogfTsKKyNlbmRpZiAvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdWlkX2luaXQodm9pZCkKIHsKQEAgLTIwOSw3ICsyMTAsNyBAQAogCQlpZiAoZXJyICE9IDApIAogCQkJZ290byBvdXRfY2xhc3M7CiAJfQotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1aWRfY2xhc3NfY3B1X25vdGlmaWVyKTsKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNwdWlkX2NsYXNzX2NwdV9ub3RpZmllcik7CiAKIAllcnIgPSAwOwogCWdvdG8gb3V0OwpAQCAtMjM0LDcgKzIzNSw3IEBACiAJCWNsYXNzX2RldmljZV9kZXN0cm95KGNwdWlkX2NsYXNzLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSk7CiAJY2xhc3NfZGVzdHJveShjcHVpZF9jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYoQ1BVSURfTUFKT1IsICJjcHUvY3B1aWQiKTsKLQl1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1aWRfY2xhc3NfY3B1X25vdGlmaWVyKTsKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY3B1aWRfY2xhc3NfY3B1X25vdGlmaWVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3B1aWRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2VmaS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYwppbmRleCA5MjAyYjY3Li5mZTE1ODA0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqCVNraXAgbm9uLVdCIG1lbW9yeSBhbmQgaWdub3JlIGVtcHR5IG1lbW9yeSByYW5nZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtNjAxLDggKzYwMCwxMCBAQAogCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyAoKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpIC0gMSk7CiAJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKIAkJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpIDwgMCkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBhbGxvY2F0ZSByZXMgJXMgOiAweCVseC0weCVseFxuIiwKLQkJCQlyZXMtPm5hbWUsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBhbGxvY2F0ZSByZXMgJXMgOiAiCisJCQkJIjB4JWxseC0weCVsbHhcbiIsIHJlcy0+bmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CiAJCS8qCiAJCSAqIFdlIGRvbid0IGtub3cgd2hpY2ggcmVnaW9uIGNvbnRhaW5zIGtlcm5lbCBkYXRhIHNvIHdlIHRyeQogCQkgKiBpdCByZXBlYXRlZGx5IGFuZCBsZXQgdGhlIHJlc291cmNlIG1hbmFnZXIgdGVzdCBpdC4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZWZpX3N0dWIuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvZWZpX3N0dWIuUwppbmRleCAwOGMwMzEyLi5kM2VlNzNhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VmaV9zdHViLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lZmlfc3R1Yi5TCkBAIC01LDcgKzUsNiBAQAogICogdHVybmVkIG9mZi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUwppbmRleCBmYmRiOTMzLi5kOWEyNjBmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCkBAIC00MCw5ICs0MCw5IEBACiAgKiAiY3VycmVudCIgaXMgaW4gcmVnaXN0ZXIgJWVieCBkdXJpbmcgYW55IHNsb3cgZW50cmllcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtNzcsMTIgKzc3LDIxIEBACiBWTV9NQVNLCQk9IDB4MDAwMjAwMDAKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCi0jZGVmaW5lIHByZWVtcHRfc3RvcAkJY2xpCisjZGVmaW5lIHByZWVtcHRfc3RvcAkJY2xpOyBUUkFDRV9JUlFTX09GRgogI2Vsc2UKICNkZWZpbmUgcHJlZW1wdF9zdG9wCiAjZGVmaW5lIHJlc3VtZV9rZXJuZWwJCXJlc3RvcmVfbm9jaGVjawogI2VuZGlmCiAKKy5tYWNybyBUUkFDRV9JUlFTX0lSRVQKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwl0ZXN0bCAkSUZfTUFTSyxFRkxBR1MoJWVzcCkgICAgICMgaW50ZXJydXB0cyBvZmY/CisJanogMWYKKwlUUkFDRV9JUlFTX09OCisxOgorI2VuZGlmCisuZW5kbQorCiAjaWZkZWYgQ09ORklHX1ZNODYKICNkZWZpbmUgcmVzdW1lX3VzZXJzcGFjZV9zaWcJY2hlY2tfdXNlcnNwYWNlCiAjZWxzZQpAQCAtMjU4LDYgKzI2NywxMCBAQAogCUNGSV9SRUdJU1RFUiBlc3AsIGVicAogCW1vdmwgVFNTX3N5c2VudGVyX2VzcDAoJWVzcCksJWVzcAogc3lzZW50ZXJfcGFzdF9lc3A6CisJLyoKKwkgKiBObyBuZWVkIHRvIGZvbGxvdyB0aGlzIGlycXMgb24vb2ZmIHNlY3Rpb246IHRoZSBzeXNjYWxsCisJICogZGlzYWJsZWQgaXJxcyBhbmQgaGVyZSB3ZSBlbmFibGUgaXQgc3RyYWlnaHQgYWZ0ZXIgZW50cnk6CisJICovCiAJc3RpCiAJcHVzaGwgJChfX1VTRVJfRFMpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKQEAgLTMwNCw2ICszMTcsNyBAQAogCWNhbGwgKnN5c19jYWxsX3RhYmxlKCwlZWF4LDQpCiAJbW92bCAlZWF4LEVBWCglZXNwKQogCWNsaQorCVRSQUNFX0lSUVNfT0ZGCiAJbW92bCBUSV9mbGFncyglZWJwKSwgJWVjeAogCXRlc3R3ICRfVElGX0FMTFdPUktfTUFTSywgJWN4CiAJam5lIHN5c2NhbGxfZXhpdF93b3JrCkBAIC0zMTEsNiArMzI1LDcgQEAKIAltb3ZsIEVJUCglZXNwKSwgJWVkeAogCW1vdmwgT0xERVNQKCVlc3ApLCAlZWN4CiAJeG9ybCAlZWJwLCVlYnAKKwlUUkFDRV9JUlFTX09OCiAJc3RpCiAJc3lzZXhpdAogCUNGSV9FTkRQUk9DCkBAIC0zNDAsNiArMzU1LDcgQEAKIAljbGkJCQkJIyBtYWtlIHN1cmUgd2UgZG9uJ3QgbWlzcyBhbiBpbnRlcnJ1cHQKIAkJCQkJIyBzZXR0aW5nIG5lZWRfcmVzY2hlZCBvciBzaWdwZW5kaW5nCiAJCQkJCSMgYmV0d2VlbiBzYW1wbGluZyBhbmQgdGhlIGlyZXQKKwlUUkFDRV9JUlFTX09GRgogCW1vdmwgVElfZmxhZ3MoJWVicCksICVlY3gKIAl0ZXN0dyAkX1RJRl9BTExXT1JLX01BU0ssICVjeAkjIGN1cnJlbnQtPndvcmsKIAlqbmUgc3lzY2FsbF9leGl0X3dvcmsKQEAgLTM1NiwxMiArMzcyLDE1IEBACiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJamUgbGR0X3NzCQkJIyByZXR1cm5pbmcgdG8gdXNlci1zcGFjZSB3aXRoIExEVCBTUwogcmVzdG9yZV9ub2NoZWNrOgorCVRSQUNFX0lSUVNfSVJFVAorcmVzdG9yZV9ub2NoZWNrX25vdHJhY2U6CiAJUkVTVE9SRV9SRUdTCiAJYWRkbCAkNCwgJWVzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAogMToJaXJldAogLnNlY3Rpb24gLmZpeHVwLCJheCIKIGlyZXRfZXhjOgorCVRSQUNFX0lSUVNfT04KIAlzdGkKIAlwdXNobCAkMAkJCSMgbm8gZXJyb3IgY29kZQogCXB1c2hsICRkb19pcmV0X2Vycm9yCkBAIC0zODcsMTEgKzQwNiwxMyBAQAogCXN1YmwgJDgsICVlc3AJCSMgcmVzZXJ2ZSBzcGFjZSBmb3Igc3dpdGNoMTYgcG9pbnRlcgogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CiAJY2xpCisJVFJBQ0VfSVJRU19PRkYKIAltb3ZsICVlc3AsICVlYXgKIAkvKiBTZXQgdXAgdGhlIDE2Yml0IHN0YWNrIGZyYW1lIHdpdGggc3dpdGNoMzIgcG9pbnRlciBvbiB0b3AsCiAJICogYW5kIGEgc3dpdGNoMTYgcG9pbnRlciBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgZnJhbWUuICovCiAJY2FsbCBzZXR1cF94ODZfYm9ndXNfc3RhY2sKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgJIyBmcmFtZSBoYXMgbW92ZWQKKwlUUkFDRV9JUlFTX0lSRVQKIAlSRVNUT1JFX1JFR1MKIAlsc3MgMjArNCglZXNwKSwgJWVzcAkjIHN3aXRjaCB0byAxNmJpdCBzdGFjawogMToJaXJldApAQCAtNDEyLDYgKzQzMyw3IEBACiAJY2xpCQkJCSMgbWFrZSBzdXJlIHdlIGRvbid0IG1pc3MgYW4gaW50ZXJydXB0CiAJCQkJCSMgc2V0dGluZyBuZWVkX3Jlc2NoZWQgb3Igc2lncGVuZGluZwogCQkJCQkjIGJldHdlZW4gc2FtcGxpbmcgYW5kIHRoZSBpcmV0CisJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4CiAJYW5kbCAkX1RJRl9XT1JLX01BU0ssICVlY3gJIyBpcyB0aGVyZSBhbnkgd29yayB0byBiZSBkb25lIG90aGVyCiAJCQkJCSMgdGhhbiBzeXNjYWxsIHRyYWNpbmc/CkBAIC00NjMsNiArNDg1LDcgQEAKIHN5c2NhbGxfZXhpdF93b3JrOgogCXRlc3RiICQoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVHxfVElGX1NJTkdMRVNURVApLCAlY2wKIAlqeiB3b3JrX3BlbmRpbmcKKwlUUkFDRV9JUlFTX09OCiAJc3RpCQkJCSMgY291bGQgbGV0IGRvX3N5c2NhbGxfdHJhY2UoKSBjYWxsCiAJCQkJCSMgc2NoZWR1bGUoKSBpbnN0ZWFkCiAJbW92bCAlZXNwLCAlZWF4CkBAIC01MzYsOSArNTU5LDE0IEBACiB2ZWN0b3I9dmVjdG9yKzEKIC5lbmRyCiAKKy8qCisgKiB0aGUgQ1BVIGF1dG9tYXRpY2FsbHkgZGlzYWJsZXMgaW50ZXJydXB0cyB3aGVuIGV4ZWN1dGluZyBhbiBJUlEgdmVjdG9yLAorICogc28gSVJRLWZsYWdzIHRyYWNpbmcgaGFzIHRvIGZvbGxvdyB0aGF0OgorICovCiAJQUxJR04KIGNvbW1vbl9pbnRlcnJ1cHQ6CiAJU0FWRV9BTEwKKwlUUkFDRV9JUlFTX09GRgogCW1vdmwgJWVzcCwlZWF4CiAJY2FsbCBkb19JUlEKIAlqbXAgcmV0X2Zyb21faW50cgpAQCAtNTUwLDkgKzU3OCwxMCBAQAogCXB1c2hsICR+KG5yKTsJCQlcCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7CVwKIAlTQVZFX0FMTDsJCQlcCisJVFJBQ0VfSVJRU19PRkYJCQlcCiAJbW92bCAlZXNwLCVlYXg7CQkJXAogCWNhbGwgc21wXy8qKi9uYW1lOwkJXAotCWptcCByZXRfZnJvbV9pbnRyOwlcCisJam1wIHJldF9mcm9tX2ludHI7CQlcCiAJQ0ZJX0VORFBST0MKIAogLyogVGhlIGluY2x1ZGUgaXMgd2hlcmUgYWxsIG9mIHRoZSBTTVAgZXRjLiBpbnRlcnJ1cHRzIGNvbWUgZnJvbSAqLwpAQCAtNzI3LDcgKzc1Niw3IEBACiAJeG9ybCAlZWR4LCVlZHgJCSMgemVybyBlcnJvciBjb2RlCiAJbW92bCAlZXNwLCVlYXgJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCBkb19ubWkKLQlqbXAgcmVzdG9yZV9hbGwKKwlqbXAgcmVzdG9yZV9ub2NoZWNrX25vdHJhY2UKIAlDRklfRU5EUFJPQwogCiBubWlfc3RhY2tfZml4dXA6CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCmluZGV4IDNkZWJjMmUuLmViNzlhYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCkBAIC04LDcgKzgsNiBAQAogICovCiAKIC50ZXh0Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwppbmRleCAwMzZhOTg1Li5lM2Q0YjczIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pMzg3LmMgYi9hcmNoL2kzODYva2VybmVsL2kzODcuYwppbmRleCBjNDM1MTk3Li42NjU4NDcyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2kzODcuYworKysgYi9hcmNoL2kzODYva2VybmVsL2kzODcuYwpAQCAtOCw3ICs4LDYgQEAKICAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jCmluZGV4IGMxYTQyZmUuLmQ0NzU2ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL2kzODYva2VybmVsL2k4MjU5LmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTMyLDcgKzEzMSw3IEBACiB7CiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CiAJaW9fYXBpY19pcnFzICY9IH4oMTw8aXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaTgyNTlBX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpODI1OUFfaXJxX3R5cGU7CiAJZW5hYmxlX2lycShpcnEpOwogfQogCkBAIC0zODYsMTIgKzM4NSwxMiBAQAogCQkJLyoKIAkJCSAqIDE2IG9sZC1zdHlsZSBJTlRBLWN5Y2xlIGludGVycnVwdHM6CiAJCQkgKi8KLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaTgyNTlBX2lycV90eXBlOworCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZpODI1OUFfaXJxX3R5cGU7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogJ2hpZ2gnIFBDSSBJUlFzIGZpbGxlZCBpbiBvbiBkZW1hbmQKIAkJCSAqLwotCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZub19pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmbm9faXJxX3R5cGU7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDcyYWU0MTQuLjRmYjMyYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTU4MSw3ICs1ODAsNyBAQAogCQogCS8qIHB1c2ggZXZlcnl0aGluZyB0byBDUFUgMCB0byBnaXZlIHVzIGEgc3RhcnRpbmcgcG9pbnQuICAqLwogCWZvciAoaSA9IDAgOyBpIDwgTlJfSVJRUyA7IGkrKykgewotCQlwZW5kaW5nX2lycV9jcHVtYXNrW2ldID0gY3B1bWFza19vZl9jcHUoMCk7CisJCWlycV9kZXNjW2ldLnBlbmRpbmdfbWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOwogCQlzZXRfcGVuZGluZ19pcnEoaSwgY3B1bWFza19vZl9jcHUoMCkpOwogCX0KIApAQCAtMTIwNSwxNSArMTIwNCwxNyBAQAogI2RlZmluZSBJT0FQSUNfRURHRQkwCiAjZGVmaW5lIElPQVBJQ19MRVZFTAkxCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpb2FwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCitzdGF0aWMgdm9pZCBpb2FwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCiB7Ci0JdW5zaWduZWQgaWR4ID0gdXNlX3BjaV92ZWN0b3IoKSAmJiAhcGxhdGZvcm1fbGVnYWN5X2lycShpcnEpID8gdmVjdG9yIDogaXJxOworCXVuc2lnbmVkIGlkeDsKKworCWlkeCA9IHVzZV9wY2lfdmVjdG9yKCkgJiYgIXBsYXRmb3JtX2xlZ2FjeV9pcnEoaXJxKSA/IHZlY3RvciA6IGlycTsKIAogCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CiAJCQl0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKLQkJaXJxX2Rlc2NbaWR4XS5oYW5kbGVyID0gJmlvYXBpY19sZXZlbF90eXBlOworCQlpcnFfZGVzY1tpZHhdLmNoaXAgPSAmaW9hcGljX2xldmVsX3R5cGU7CiAJZWxzZQotCQlpcnFfZGVzY1tpZHhdLmhhbmRsZXIgPSAmaW9hcGljX2VkZ2VfdHlwZTsKKwkJaXJxX2Rlc2NbaWR4XS5jaGlwID0gJmlvYXBpY19lZGdlX3R5cGU7CiAJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpZHhdKTsKIH0KIApAQCAtMTMyNSw3ICsxMzI2LDcgQEAKIAkgKiBUaGUgdGltZXIgSVJRIGRvZXNuJ3QgaGF2ZSB0byBrbm93IHRoYXQgYmVoaW5kIHRoZQogCSAqIHNjZW5lIHdlIGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgogCSAqLwotCWlycV9kZXNjWzBdLmhhbmRsZXIgPSAmaW9hcGljX2VkZ2VfdHlwZTsKKwlpcnFfZGVzY1swXS5jaGlwID0gJmlvYXBpY19lZGdlX3R5cGU7CiAKIAkvKgogCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKQEAgLTIwNjksNiArMjA3MCwxMyBAQAogI2VuZGlmCiAjZW5kaWYKIAorc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyKHVuc2lnbmVkIGludCBpcnEpCit7CisJc2VuZF9JUElfc2VsZihJT19BUElDX1ZFQ1RPUihpcnEpKTsKKworCXJldHVybiAxOworfQorCiAvKgogICogTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0cyBuZWVkIGRpZmZlcmVudCBoYW5kbGluZywKICAqIHNvIHdlIHVzZSB0d28gc2VwYXJhdGUgSVJRIGRlc2NyaXB0b3JzLiBFZGdlIHRyaWdnZXJlZCBJUlFzIGNhbiBiZQpAQCAtMjA4OCw2ICsyMDk2LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSAJPSBzZXRfaW9hcGljX2FmZmluaXR5LAogI2VuZGlmCisJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlvYXBpY19sZXZlbF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0yMTAxLDYgKzIxMTAsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5IAk9IHNldF9pb2FwaWNfYWZmaW5pdHksCiAjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlciwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKQEAgLTIxMzUsNyArMjE0NSw3IEBACiAJCQkJbWFrZV84MjU5QV9pcnEoaXJxKTsKIAkJCWVsc2UKIAkJCQkvKiBTdHJhbmdlLiBPaCwgd2VsbC4uICovCi0JCQkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJm5vX2lycV90eXBlOworCQkJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZub19pcnFfdHlwZTsKIAkJfQogCX0KIH0KQEAgLTIzNTEsNyArMjM2MSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uIik7CiAKIAlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlpcnFfZGVzY1swXS5oYW5kbGVyID0gJmxhcGljX2lycV90eXBlOworCWlycV9kZXNjWzBdLmNoaXAgPSAmbGFwaWNfaXJxX3R5cGU7CiAJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLwogCWVuYWJsZV84MjU5QV9pcnEoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL2kzODYva2VybmVsL2lycS5jCmluZGV4IGM3MDNiYzcuLjZjYjUyOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pcnEuYwpAQCAtNjAsNiArNjAsMTIgQEAKIAl1MzIgKmlzcDsKICNlbmRpZgogCisJaWYgKHVubGlrZWx5KCh1bnNpZ25lZClpcnEgPj0gTlJfSVJRUykpIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBjYW5ub3QgaGFuZGxlIElSUSAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBpcnEpOworCQlCVUcoKTsKKwl9CisKIAlpcnFfZW50ZXIoKTsKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogCS8qIERlYnVnZ2luZyBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3c6IGlzIHRoZXJlIGxlc3MgdGhhbiAxS0IgZnJlZT8gKi8KQEAgLTc2LDYgKzgyLDEwIEBACiAJfQogI2VuZGlmCiAKKwlpZiAoIWlycV9kZXNjW2lycV0uaGFuZGxlX2lycSkgeworCQlfX2RvX0lSUShpcnEsIHJlZ3MpOworCQlnb3RvIG91dF9leGl0OworCX0KICNpZmRlZiBDT05GSUdfNEtTVEFDS1MKIAogCWN1cmN0eCA9ICh1bmlvbiBpcnFfY3R4ICopIGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKQEAgLTExNSw2ICsxMjUsNyBAQAogI2VuZGlmCiAJCV9fZG9fSVJRKGlycSwgcmVncyk7CiAKK291dF9leGl0OgogCWlycV9leGl0KCk7CiAKIAlyZXR1cm4gMTsKQEAgLTE1NSw3ICsxNjYsNyBAQAogCWlycWN0eC0+dGluZm8udGFzayAgICAgICAgICAgICAgPSBOVUxMOwogCWlycWN0eC0+dGluZm8uZXhlY19kb21haW4gICAgICAgPSBOVUxMOwogCWlycWN0eC0+dGluZm8uY3B1ICAgICAgICAgICAgICAgPSBjcHU7Ci0JaXJxY3R4LT50aW5mby5wcmVlbXB0X2NvdW50ICAgICA9IFNPRlRJUlFfT0ZGU0VUOworCWlycWN0eC0+dGluZm8ucHJlZW1wdF9jb3VudCAgICAgPSAwOwogCWlycWN0eC0+dGluZm8uYWRkcl9saW1pdCAgICAgICAgPSBNQUtFX01NX1NFRygwKTsKIAogCXNvZnRpcnFfY3R4W2NwdV0gPSBpcnFjdHg7CkBAIC0yMDAsNiArMjExLDEwIEBACiAJCQk6ICIwIihpc3ApCiAJCQk6ICJtZW1vcnkiLCAiY2MiLCAiZWR4IiwgImVjeCIsICJlYXgiCiAJCSk7CisJCS8qCisJCSAqIFNob3VsZG50IGhhcHBlbiwgd2UgcmV0dXJuZWQgYWJvdmUgaWYgaW5faW50ZXJydXB0KCk6CisJIAkgKi8KKwkJV0FSTl9PTl9PTkNFKHNvZnRpcnFfY291bnQoKSk7CiAJfQogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMjQzLDcgKzI1OCw3IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKQEAgLTI4NSwxMyArMzAwLDEzIEBACiAJCWlmIChpcnEgPT0gMikKIAkJCWNvbnRpbnVlOwogCi0JCWNwdXNfYW5kKG1hc2ssIGlycV9hZmZpbml0eVtpcnFdLCBtYXApOworCQljcHVzX2FuZChtYXNrLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBtYXApOwogCQlpZiAoYW55X29ubGluZV9jcHUobWFzaykgPT0gTlJfQ1BVUykgewogCQkJcHJpbnRrKCJCcmVha2luZyBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCQkJbWFzayA9IG1hcDsKIAkJfQotCQlpZiAoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5zZXRfYWZmaW5pdHkpCi0JCQlpcnFfZGVzY1tpcnFdLmhhbmRsZXItPnNldF9hZmZpbml0eShpcnEsIG1hc2spOworCQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkpCisJCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwogCQllbHNlIGlmIChpcnFfZGVzY1tpcnFdLmFjdGlvbiAmJiAhKHdhcm5lZCsrKSkKIAkJCXByaW50aygiQ2Fubm90IHNldCBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNzI3ZTQxOS4uZGUyZTE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTI4LDcgKzI4LDYgQEAKICAqCQk8cHJhc2FubmFAaW4uaWJtLmNvbT4gYWRkZWQgZnVuY3Rpb24tcmV0dXJuIHByb2Jlcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbWNhLmMgYi9hcmNoL2kzODYva2VybmVsL21jYS5jCmluZGV4IDU1OGJiMjAuLmNkNTQ1NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9tY2EuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwppbmRleCAwYTg2NTg4Li40MGI0NGNjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKQEAgLTQ5Myw3ICs0OTMsNiBAQAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pY3JvY29kZV9kZXYgPSB7CiAJLm1pbm9yCQk9IE1JQ1JPQ09ERV9NSU5PUiwKIAkubmFtZQkJPSAibWljcm9jb2RlIiwKLQkuZGV2ZnNfbmFtZQk9ICJjcHUvbWljcm9jb2RlIiwKIAkuZm9wcwkJPSAmbWljcm9jb2RlX2ZvcHMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDZiMTM5MmQuLmE3MGI1ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21zci5jIGIvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYwppbmRleCBkMDIyY2I4Li5kNTM1Y2RiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21zci5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0yNTEsNyArMjUwLDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1zcl9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCBtc3JfY2xhc3NfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwogCkBAIC0yNzAsNiArMjcxLDcgQEAKIHsKIAkubm90aWZpZXJfY2FsbCA9IG1zcl9jbGFzc19jcHVfY2FsbGJhY2ssCiB9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IG1zcl9pbml0KHZvaWQpCiB7CkBAIC0yOTIsNyArMjk0LDcgQEAKIAkJaWYgKGVyciAhPSAwKQogCQkJZ290byBvdXRfY2xhc3M7CiAJfQotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmbXNyX2NsYXNzX2NwdV9ub3RpZmllcik7CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtc3JfY2xhc3NfY3B1X25vdGlmaWVyKTsKIAogCWVyciA9IDA7CiAJZ290byBvdXQ7CkBAIC0zMTUsNyArMzE3LDcgQEAKIAkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kobXNyX2NsYXNzLCBNS0RFVihNU1JfTUFKT1IsIGNwdSkpOwogCWNsYXNzX2Rlc3Ryb3kobXNyX2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldihNU1JfTUFKT1IsICJjcHUvbXNyIik7Ci0JdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJm1zcl9jbGFzc19jcHVfbm90aWZpZXIpOworCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtc3JfY2xhc3NfY3B1X25vdGlmaWVyKTsKIH0KIAogbW9kdWxlX2luaXQobXNyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKaW5kZXggYTc2ZTkzMTQuLjJkZDkyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiBzdGF0aWMgX19pbml0IHZvaWQgbm1pX2NwdV9idXN5KHZvaWQgKmRhdGEpCiB7CiAJdm9sYXRpbGUgaW50ICplbmRmbGFnID0gZGF0YTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CiAJLyogSW50ZW50aW9uYWxseSBkb24ndCB1c2UgY3B1X3JlbGF4IGhlcmUuIFRoaXMgaXMKIAkgICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWFsbHkgdGlja3MsCiAJICAgZXZlbiBpZiB0aGVyZSBpcyBhIHNpbXVsYXRvciBvciBzaW1pbGFyIHRoYXQgY2F0Y2hlcyB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbnVtYXEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbnVtYXEuYwppbmRleCAwY2FmMTQ2Li45MDAwZDgyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL251bWFxLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9udW1hcS5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBTZW5kIGZlZWRiYWNrIHRvIDxnb25lQHVzLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2OTQ2YjA2Li45NGUyYzg3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggODdjY2RhYy4uOWY2YWIxNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL2kzODYva2VybmVsL3F1aXJrcy5jCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyB3b3JrLWFyb3VuZHMgZm9yIHg4NiBhbmQgeDg2XzY0IHBsYXRmb3JtIGJ1Z3MuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggZDIwNzI0Mi4uNTRjZmVhYiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jCkBAIC0yLDcgKzIsNiBAQAogICogIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zY3gyMDAuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2N4MjAwLmMKaW5kZXggOWJmNTkwYy4uYzdkM2RmMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zY3gyMDAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NjeDIwMC5jCkBAIC00LDcgKzQsNiBAQAogCiAgICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFNDeDIwMCBzdXBwb3J0LiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jCmluZGV4IDk2N2RjNzQuLjk4MzUyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2VtYXBob3JlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zZW1hcGhvcmUuYwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqIHJ3IHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgTm92ZW1iZXIgMTk5OSBieSBCZW5qYW1pbiBMYUhhaXNlIDxiY3JsQGt2YWNrLm9yZz4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA0YTY1MDQwLi4wOGMwMGQyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBpbml0aWFsaXphdGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CkBAIC0xMzE0LDggKzEzMTMsMTAgQEAKIAlwcm9iZV9yb21zKCk7CiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpyZXM7CisjaWZuZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKIAkJaWYgKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplID4gMHgxMDAwMDAwMDBVTEwpCiAJCQljb250aW51ZTsKKyNlbmRpZgogCQlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfQVRPTUlDKTsKIAkJc3dpdGNoIChlODIwLm1hcFtpXS50eXBlKSB7CiAJCWNhc2UgRTgyMF9SQU06CXJlcy0+bmFtZSA9ICJTeXN0ZW0gUkFNIjsgYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDg5ZTczMTUuLjZmNWZlYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0zNCw3ICszNCw2IEBACiAqCQlSdXN0eSBSdXNzZWxsCToJSGFja2VkIGludG8gc2hhcGUgZm9yIG5ldyAiaG90cGx1ZyIgYm9vdCBwcm9jZXNzLiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NyYXQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3JhdC5jCmluZGV4IDk4OWM4NTIuLmIxODA5YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3JhdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3JhdC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICogU2VuZCBmZWVkYmFjayB0byBQYXQgR2F1Z2hlbiA8Z29uZUB1cy5pYm0uY29tPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MmEwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogYXJjaC9pMzg2L2tlcm5lbC9zdGFja3RyYWNlLmMKKyAqCisgKiBTdGFjayB0cmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKworc3RhdGljIGlubGluZSBpbnQgdmFsaWRfc3RhY2tfcHRyKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sIHZvaWQgKnApCit7CisJcmV0dXJuCXAgPiAodm9pZCAqKXRpbmZvICYmCisJCXAgPCAodm9pZCAqKXRpbmZvICsgVEhSRUFEX1NJWkUgLSAzOworfQorCisvKgorICogU2F2ZSBzdGFjay1iYWNrdHJhY2UgYWRkcmVzc2VzIGludG8gYSBzdGFja190cmFjZSBidWZmZXI6CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc2F2ZV9jb250ZXh0X3N0YWNrKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHVuc2lnbmVkIGludCBza2lwLAorCQkgICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLCB1bnNpZ25lZCBsb25nICpzdGFjaywKKwkJICAgdW5zaWduZWQgbG9uZyBlYnApCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwl3aGlsZSAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCAodm9pZCAqKWVicCkpIHsKKwkJYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKShlYnAgKyA0KTsKKwkJaWYgKCFza2lwKQorCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBhZGRyOworCQllbHNlCisJCQlza2lwLS07CisJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQlicmVhazsKKwkJLyoKKwkJICogYnJlYWsgb3V0IG9mIHJlY3Vyc2l2ZSBlbnRyaWVzIChzdWNoIGFzCisJCSAqIGVuZF9vZl9zdGFja19zdG9wX3Vud2luZF9mdW5jdGlvbik6CisJIAkgKi8KKwkJaWYgKGVicCA9PSAqKHVuc2lnbmVkIGxvbmcgKillYnApCisJCQlicmVhazsKKworCQllYnAgPSAqKHVuc2lnbmVkIGxvbmcgKillYnA7CisJfQorI2Vsc2UKKwl3aGlsZSAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCBzdGFjaykpIHsKKwkJYWRkciA9ICpzdGFjaysrOworCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKSB7CisJCQlpZiAoIXNraXApCisJCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBhZGRyOworCQkJZWxzZQorCQkJCXNraXAtLTsKKwkJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiBlYnA7Cit9CisKKy8qCisgKiBTYXZlIHN0YWNrLWJhY2t0cmFjZSBhZGRyZXNzZXMgaW50byBhIHN0YWNrX3RyYWNlIGJ1ZmZlci4KKyAqIElmIGFsbF9jb250ZXh0cyBpcyBzZXQsIGFsbCBjb250ZXh0cyAoaGFyZGlycSwgc29mdGlycSBhbmQgcHJvY2VzcykKKyAqIGFyZSBzYXZlZC4gSWYgbm90IHNldCB0aGVuIG9ubHkgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBzYXZlZC4KKyAqLwordm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsCisJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGFsbF9jb250ZXh0cywKKwkJICAgICAgdW5zaWduZWQgaW50IHNraXApCit7CisJdW5zaWduZWQgbG9uZyBlYnA7CisJdW5zaWduZWQgbG9uZyAqc3RhY2sgPSAmZWJwOworCisJV0FSTl9PTih0cmFjZS0+bnJfZW50cmllcyB8fCAhdHJhY2UtPm1heF9lbnRyaWVzKTsKKworCWlmICghdGFzayB8fCB0YXNrID09IGN1cnJlbnQpIHsKKwkJLyogR3JhYiBlYnAgcmlnaHQgZnJvbSBvdXIgcmVnczogKi8KKwkJYXNtICgibW92bCAlJWVicCwgJTAiIDogIj1yIiAoZWJwKSk7CisJfSBlbHNlIHsKKwkJLyogZWJwIGlzIHRoZSBsYXN0IHJlZyBwdXNoZWQgYnkgc3dpdGNoX3RvKCk6ICovCisJCWVicCA9ICoodW5zaWduZWQgbG9uZyAqKSB0YXNrLT50aHJlYWQuZXNwOworCX0KKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqY29udGV4dCA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKKwkJCQkoKHVuc2lnbmVkIGxvbmcpc3RhY2sgJiAofihUSFJFQURfU0laRSAtIDEpKSk7CisKKwkJZWJwID0gc2F2ZV9jb250ZXh0X3N0YWNrKHRyYWNlLCBza2lwLCBjb250ZXh0LCBzdGFjaywgZWJwKTsKKwkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKWNvbnRleHQtPnByZXZpb3VzX2VzcDsKKwkJaWYgKCFhbGxfY29udGV4dHMgfHwgIXN0YWNrIHx8CisJCQkJdHJhY2UtPm5yX2VudHJpZXMgPj0gdHJhY2UtPm1heF9lbnRyaWVzKQorCQkJYnJlYWs7CisJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOworCQlpZiAodHJhY2UtPm5yX2VudHJpZXMgPj0gdHJhY2UtPm1heF9lbnRyaWVzKQorCQkJYnJlYWs7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3N5c2VudGVyLmMgYi9hcmNoL2kzODYva2VybmVsL3N5c2VudGVyLmMKaW5kZXggYzYwNDE5ZGUuLjcxM2JhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzZW50ZXIuYworKysgYi9hcmNoL2kzODYva2VybmVsL3N5c2VudGVyLmMKQEAgLTE0OCw4ICsxNDgsMTAgQEAKIAl2bWEtPnZtX21tID0gbW07CiAKIAlyZXQgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpOwotCWlmIChyZXQpCi0JCWdvdG8gZnJlZV92bWE7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOworCQlnb3RvIHVwX2ZhaWw7CisJfQogCiAJY3VycmVudC0+bW0tPmNvbnRleHQudmRzbyA9ICh2b2lkICopYWRkcjsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnN5c2VudGVyX3JldHVybiA9CkBAIC0xNTgsMTAgKzE2MCw2IEBACiB1cF9mYWlsOgogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiByZXQ7Ci0KLWZyZWVfdm1hOgotCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKLQlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBjaGFyICphcmNoX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwppbmRleCA1ZjQzZDA0Li4zMTY0MjFhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgIm1hY2hfdGltZS5oIgogCiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWVfaHBldC5jCmluZGV4IGE1MjlmMGMuLjE0YTEzNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxsaW51eC9ocGV0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKaW5kZXggNzg0NjQwOS4uMmJmOGI1NSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtMTEsNyArMTEsNiBAQAogICogJ1RyYXBzLmMnIGhhbmRsZXMgaGFyZHdhcmUgdHJhcHMgYW5kIGZhdWx0cyBhZnRlciB3ZSBoYXZlIHNhdmVkIHNvbWUKICAqIHN0YXRlIGluICdhc20ucycuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMTE2LDI4ICsxMTUsMTMgQEAKIH0KIAogLyoKLSAqIFByaW50IENPTkZJR19TVEFDS19CQUNLVFJBQ0VfQ09MUyBhZGRyZXNzL3N5bWJvbCBlbnRyaWVzIHBlciBsaW5lLgorICogUHJpbnQgb25lIGFkZHJlc3Mvc3ltYm9sIGVudHJpZXMgcGVyIGxpbmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHByaW50X2FkZHJfYW5kX3N5bWJvbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKmxvZ19sdmwsCi0JCQkJCWludCBwcmludGVkKQorc3RhdGljIGlubGluZSB2b2lkIHByaW50X2FkZHJfYW5kX3N5bWJvbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKmxvZ19sdmwpCiB7Ci0JaWYgKCFwcmludGVkKQotCQlwcmludGsobG9nX2x2bCk7Ci0KLSNpZiBDT05GSUdfU1RBQ0tfQkFDS1RSQUNFX0NPTFMgPT0gMQogCXByaW50aygiIFs8JTA4bHg+XSAiLCBhZGRyKTsKLSNlbHNlCi0JcHJpbnRrKCIgPCUwOGx4PiAiLCBhZGRyKTsKLSNlbmRpZgotCXByaW50X3N5bWJvbCgiJXMiLCBhZGRyKTsKIAotCXByaW50ZWQgPSAocHJpbnRlZCArIDEpICUgQ09ORklHX1NUQUNLX0JBQ0tUUkFDRV9DT0xTOwotCWlmIChwcmludGVkKQotCQlwcmludGsoIiAiKTsKLQllbHNlCi0JCXByaW50aygiXG4iKTsKLQotCXJldHVybiBwcmludGVkOworCXByaW50X3N5bWJvbCgiJXNcbiIsIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLApAQCAtMTQ1LDEyICsxMjksMTEgQEAKIAkJCQljaGFyICpsb2dfbHZsKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlpbnQgcHJpbnRlZCA9IDA7IC8qIG5yIG9mIGVudHJpZXMgYWxyZWFkeSBwcmludGVkIG9uIGN1cnJlbnQgbGluZSAqLwogCiAjaWZkZWYJQ09ORklHX0ZSQU1FX1BPSU5URVIKIAl3aGlsZSAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCAodm9pZCAqKWVicCkpIHsKIAkJYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKShlYnAgKyA0KTsKLQkJcHJpbnRlZCA9IHByaW50X2FkZHJfYW5kX3N5bWJvbChhZGRyLCBsb2dfbHZsLCBwcmludGVkKTsKKwkJcHJpbnRfYWRkcl9hbmRfc3ltYm9sKGFkZHIsIGxvZ19sdmwpOwogCQkvKgogCQkgKiBicmVhayBvdXQgb2YgcmVjdXJzaXZlIGVudHJpZXMgKHN1Y2ggYXMKIAkJICogZW5kX29mX3N0YWNrX3N0b3BfdW53aW5kX2Z1bmN0aW9uKToKQEAgLTE2MywyOCArMTQ2LDIzIEBACiAJd2hpbGUgKHZhbGlkX3N0YWNrX3B0cih0aW5mbywgc3RhY2spKSB7CiAJCWFkZHIgPSAqc3RhY2srKzsKIAkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkKLQkJCXByaW50ZWQgPSBwcmludF9hZGRyX2FuZF9zeW1ib2woYWRkciwgbG9nX2x2bCwgcHJpbnRlZCk7CisJCQlwcmludF9hZGRyX2FuZF9zeW1ib2woYWRkciwgbG9nX2x2bCk7CiAJfQogI2VuZGlmCi0JaWYgKHByaW50ZWQpCi0JCXByaW50aygiXG4iKTsKLQogCXJldHVybiBlYnA7CiB9CiAKLXN0YXRpYyBhc21saW5rYWdlIGludCBzaG93X3RyYWNlX3Vud2luZChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHZvaWQgKmxvZ19sdmwpCitzdGF0aWMgYXNtbGlua2FnZSBpbnQKK3Nob3dfdHJhY2VfdW53aW5kKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqbG9nX2x2bCkKIHsKIAlpbnQgbiA9IDA7Ci0JaW50IHByaW50ZWQgPSAwOyAvKiBuciBvZiBlbnRyaWVzIGFscmVhZHkgcHJpbnRlZCBvbiBjdXJyZW50IGxpbmUgKi8KIAogCXdoaWxlICh1bndpbmQoaW5mbykgPT0gMCAmJiBVTldfUEMoaW5mbykpIHsKLQkJKytuOwotCQlwcmludGVkID0gcHJpbnRfYWRkcl9hbmRfc3ltYm9sKFVOV19QQyhpbmZvKSwgbG9nX2x2bCwgcHJpbnRlZCk7CisJCW4rKzsKKwkJcHJpbnRfYWRkcl9hbmRfc3ltYm9sKFVOV19QQyhpbmZvKSwgbG9nX2x2bCk7CiAJCWlmIChhcmNoX3Vud191c2VyX21vZGUoaW5mbykpCiAJCQlicmVhazsKIAl9Ci0JaWYgKHByaW50ZWQpCi0JCXByaW50aygiXG4iKTsKIAlyZXR1cm4gbjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwppbmRleCAwMGUwMTE4Li44MzU1ZDhkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZtODYuYworKysgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwpAQCAtMzEsNyArMzEsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2xpYi9jaGVja3N1bS5TIGIvYXJjaC9pMzg2L2xpYi9jaGVja3N1bS5TCmluZGV4IDk0Yzc4NjcuLjc1ZmZkMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9saWIvY2hlY2tzdW0uUworKysgYi9hcmNoL2kzODYvbGliL2NoZWNrc3VtLlMKQEAgLTI1LDcgKzI1LDYgQEAKICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAkJCQkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbGliL21lbWNweS5jIGIvYXJjaC9pMzg2L2xpYi9tZW1jcHkuYwppbmRleCA4OTFiMjM1Li44YWM1MWI4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbGliL21lbWNweS5jCisrKyBiL2FyY2gvaTM4Ni9saWIvbWVtY3B5LmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9saWIvbW14LmMgYi9hcmNoL2kzODYvbGliL21teC5jCmluZGV4IDJhZmRhOTQuLjI4MDg0ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9saWIvbW14LmMKKysrIGIvYXJjaC9pMzg2L2xpYi9tbXguYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbGliL3VzZXJjb3B5LmMgYi9hcmNoL2kzODYvbGliL3VzZXJjb3B5LmMKaW5kZXggYzVhYTY1Zi4uNGI3NTIxMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2xpYi91c2VyY29weS5jCisrKyBiL2FyY2gvaTM4Ni9saWIvdXNlcmNvcHkuYwpAQCAtNSw3ICs1LDYgQEAKICAqIENvcHlyaWdodCAxOTk3IEFuZGkgS2xlZW4gPGFrQG11Yy5kZT4KICAqIENvcHlyaWdodCAxOTk3IExpbnVzIFRvcnZhbGRzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYyBiL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYwppbmRleCAwMDQ4MzdjLi5jNTExNzA1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCkBAIC0yLDcgKzIsNiBAQAogICoJTWFjaGluZSBzcGVjaWZpYyBzZXR1cCBmb3IgZ2VuZXJpYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC04MCw3ICs3OSw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0geyB0aW1lcl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTH07CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsgdGltZXJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBDUFVfTUFTS19OT05FLCAidGltZXIiLCBOVUxMLCBOVUxMfTsKIAogLyoqCiAgKiB0aW1lX2luaXRfaG9vayAtIGRvIGFueSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbnMgZm9yIHRoZSBzeXN0ZW0gdGltZXIuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwppbmRleCAwMzdiMmFmLi5lZjdhNmU2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKQEAgLTMsNyArMyw2IEBACiAgKiBEcml2ZXMgdGhlIGxvY2FsIEFQSUMgaW4gImNsdXN0ZXJlZCBtb2RlIi4KICAqLwogI2RlZmluZSBBUElDX0RFRklOSVRJT04gMQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2RlZmF1bHQuYwppbmRleCA3ZGExNGU5Li45NmMxOTgyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2RlZmF1bHQuYworKysgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2RlZmF1bHQuYwpAQCAtMiw3ICsyLDYgQEAKICAqIERlZmF1bHQgZ2VuZXJpYyBBUElDIGRyaXZlci4gVGhpcyBoYW5kbGVzIHVwdG8gOCBDUFVzLgogICovCiAjZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYwppbmRleCA0OGQzZWMzLi44NDVjZGQwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKQEAgLTIsNyArMiw2IEBACiAgKiBBUElDIGRyaXZlciBmb3IgdGhlIFVuaXN5cyBFUzcwMDAgY2hpcHNldC4KICAqLwogI2RlZmluZSBBUElDX0RFRklOSVRJT04gMQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCmluZGV4IGQ1NWZhN2IuLmJjZDFiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYworKysgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKQEAgLTMsNyArMyw2IEBACiAgKiAKICAqIEdlbmVyaWMgeDg2IEFQSUMgZHJpdmVyIHByb2JlIGxheWVyLgogICovICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKaW5kZXggNjVkZGY3NC4uYjczNTAxZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYworKysgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCkBAIC0yLDcgKzIsNiBAQAogICogQVBJQyBkcml2ZXIgZm9yIHRoZSBJQk0gIlN1bW1pdCIgY2hpcHNldC4KICAqLwogI2RlZmluZSBBUElDX0RFRklOSVRJT04gMQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdmlzd3MvbXBwYXJzZS5jIGIvYXJjaC9pMzg2L21hY2gtdmlzd3MvbXBwYXJzZS5jCmluZGV4IDVmM2Q3ZTYuLmYzYzc0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL21wcGFyc2UuYworKysgYi9hcmNoL2kzODYvbWFjaC12aXN3cy9tcHBhcnNlLmMKQEAgLTEsNSArMSw0IEBACiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3NldHVwLmMgYi9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jCmluZGV4IDhhOWUxYTYuLjg4NWM3Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvc2V0dXAuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7CiAJLmhhbmRsZXIgPQl0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzID0JU0FfSU5URVJSVVBULAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCiAJLm5hbWUgPQkJInRpbWVyIiwKIH07CiAKQEAgLTE0MCw4ICsxNDAsOCBAQAogCiAjZGVmaW5lIE1CICgxMDI0ICogMTAyNCkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2dpdndmYl9tZW1fcGh5czsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNnaXZ3ZmJfbWVtX3NpemU7Cit1bnNpZ25lZCBsb25nIHNnaXZ3ZmJfbWVtX3BoeXM7Cit1bnNpZ25lZCBsb25nIHNnaXZ3ZmJfbWVtX3NpemU7CiAKIGxvbmcgbG9uZyBtZW1fc2l6ZSBfX2luaXRkYXRhID0gMDsKIApAQCAtMTc3LDggKzE3Nyw0IEBACiAJYWRkX21lbW9yeV9yZWdpb24oc2dpdndmYl9tZW1fcGh5cywgc2dpdndmYl9tZW1fc2l6ZSwgRTgyMF9SRVNFUlZFRCk7CiAKIAlyZXR1cm4gIlBST00iOwotCi0JLyogUmVtb3ZlIGdjYyB3YXJuaW5ncyAqLwotCSh2b2lkKSBzYW5pdGl6ZV9lODIwX21hcChOVUxMLCBOVUxMKTsKLQkodm9pZCkgY29weV9lODIwX21hcChOVUxMLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3RyYXBzLmMgYi9hcmNoL2kzODYvbWFjaC12aXN3cy90cmFwcy5jCmluZGV4IDk2NDM1MzkuLjUxOTliZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdmlzd3MvdHJhcHMuYwpAQCAtMSw2ICsxLDUgQEAKIC8qIFZJU1dTIHRyYXBzICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYwppbmRleCAzZTY0ZmI3Li44Mjg1MjI1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvdmlzd3NfYXBpYy5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgMjUvMTEvMjAwMiAtIFVwZGF0ZWQgZm9yIDIuNSBieSBBbmRyZXkgUGFuaW4gPHBhemtlQG9yYml0YTEucnU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KQEAgLTI3OCwyMiArMjc3LDIyIEBACiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKIAogCQlpZiAoaSA9PSAwKSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRX0lERTApIHsKLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmY29iYWx0X2lycV90eXBlOworCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMSkgewotCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZjb2JhbHRfaXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChpID09IENPX0lSUV84MjU5KSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnBpaXg0X21hc3Rlcl9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmcGlpeDRfbWFzdGVyX2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKGkgPCBDT19JUlFfQVBJQzApIHsKLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmcGlpeDRfdmlydHVhbF9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmcGlpeDRfdmlydHVhbF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChJU19DT19BUElDKGkpKSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3NldHVwLmMgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3NldHVwLmMKaW5kZXggZGVmYzZlYi4uY2ZhMTZjMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYwpAQCAtMiw3ICsyLDYgQEAKICAqCU1hY2hpbmUgc3BlY2lmaWMgc2V0dXAgZm9yIGdlbmVyaWMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CkBAIC00MSw3ICs0MCw3IEBACiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0geyB0aW1lcl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTH07CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsgdGltZXJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBDUFVfTUFTS19OT05FLCAidGltZXIiLCBOVUxMLCBOVUxMfTsKIAogdm9pZCBfX2luaXQgdGltZV9pbml0X2hvb2sodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKaW5kZXggYjU4NDA2MC4uODBiN2YyZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2Jhc2ljLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCXZveWFnZXJfc21wLmMgLSBWb3lhZ2VyIFNNUCBoYWwgKGVtdWxhdGVzIGxpbnV4IHNtcC5jKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfY2F0LmMKaW5kZXggMTBkMjFkZi4uZjUwYzZjNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX2NhdC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9jYXQuYwpAQCAtMTYsNyArMTYsNiBAQAogICogb2YgYml0IHNoaWZ0IG1hbmlwdWxhdGlvbnMgdG8gc2VuZCBhbmQgcmVjZWl2ZSBwYWNrZXRzIG9uIHRoZQogICogc2VyaWFsIGJ1cyAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCA4MjQyYWY5Li42Yzg2NTc1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCkBAIC05LDcgKzksNiBAQAogICogVGhpcyBmaWxlIHByb3ZpZGVzIGFsbCB0aGUgc2FtZSBleHRlcm5hbCBlbnRyaWVzIGFzIHNtcC5jIGJ1dCB1c2VzCiAgKiB0aGUgdm95YWdlciBoYWwgdG8gcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpAQCAtMTQxOSw3ICsxNDE4LDcgQEAKIAkgKiBUaGlzIGlzIGZvciBsYXRlcjogZmlyc3QgMTYgY29ycmVzcG9uZCB0byBQQyBJUlFzOyBuZXh0IDE2CiAJICogYXJlIFByaW1hcnkgTUMgSVJRcyBhbmQgZmluYWwgMTYgYXJlIFNlY29uZGFyeSBNQyBJUlFzICovCiAJZm9yKGkgPSAwOyBpIDwgNDg7IGkrKykKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ2aWNfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmdmljX2lycV90eXBlOwogfQogCiAvKiBzZW5kIGEgQ1BJIGF0IGxldmVsIGNwaSB0byBhIHNldCBvZiBjcHVzIGluIGNwdXNldCAoc2V0IDEgYml0IHBlcgpAQCAtMTkzOCwzICsxOTM3LDkgQEAKIHsKIAl6YXBfbG93X21hcHBpbmdzKCk7CiB9CisKK3ZvaWQgX19pbml0CitzbXBfc2V0dXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl90aHJlYWQuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl90aHJlYWQuYwppbmRleCAyYjAzODg0Li41MGY2ZGU2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vYm9vdF9pb3JlbWFwLmMgYi9hcmNoL2kzODYvbW0vYm9vdF9pb3JlbWFwLmMKaW5kZXggNTIzYjMwNi4uNWQ0NGY0ZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2Jvb3RfaW9yZW1hcC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9ib290X2lvcmVtYXAuYwpAQCAtMTUsNyArMTUsNiBAQAogICogYm9vdF9wdGVfdCBpcyBkZWZpbmVkIG9ubHkgaWYgdGhpcyBhbGwgd29ya3MgY29ycmVjdGx5CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI3VuZGVmIENPTkZJR19YODZfUEFFCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jCmluZGV4IGZlNmViOTAuLjdjMzkyZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KQEAgLTQzLDcgKzQyLDcgQEAKIGJvb3RtZW1fZGF0YV90IG5vZGUwX2JkYXRhOwogCiAvKgotICogbnVtYSBpbnRlcmZhY2UgLSB3ZSBleHBlY3QgdGhlIG51bWEgYXJjaGl0ZWN0dXJlIHNwZWNmaWMgY29kZSB0byBoYXZlCisgKiBudW1hIGludGVyZmFjZSAtIHdlIGV4cGVjdCB0aGUgbnVtYSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSB0byBoYXZlCiAgKiAgICAgICAgICAgICAgICAgIHBvcHVsYXRlZCB0aGUgZm9sbG93aW5nIGluaXRpYWxpc2F0aW9uLgogICoKICAqIDEpIG5vZGVfb25saW5lX21hcCAgLSB0aGUgbWFwIG9mIGFsbCBub2RlcyBjb25maWd1cmVkIChvbmxpbmUpIGluIHRoZSBzeXN0ZW0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9leHRhYmxlLmMgYi9hcmNoL2kzODYvbW0vZXh0YWJsZS5jCmluZGV4IGY3MDY0NDkuLmRlMDNjNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC9pMzg2L21tL2V4dGFibGUuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGxpbnV4L2FyY2gvaTM4Ni9tbS9leHRhYmxlLmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2ZhdWx0LmMgYi9hcmNoL2kzODYvbW0vZmF1bHQuYwppbmRleCA2ZWU3ZmFhLi5mNzI3OTQ2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vZmF1bHQuYworKysgYi9hcmNoL2kzODYvbW0vZmF1bHQuYwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCiAJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCiAJICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRseSwgaW4gdGhlIGNhc2Ugb2YgYW4KLQkgKiBlcnJvbmVvdXMgZmF1bHQgb2NjdXJpbmcgaW4gYSBjb2RlIHBhdGggd2hpY2ggYWxyZWFkeSBob2xkcyBtbWFwX3NlbQorCSAqIGVycm9uZW91cyBmYXVsdCBvY2N1cnJpbmcgaW4gYSBjb2RlIHBhdGggd2hpY2ggYWxyZWFkeSBob2xkcyBtbWFwX3NlbQogCSAqIHdlIHdpbGwgZGVhZGxvY2sgYXR0ZW1wdGluZyB0byB2YWxpZGF0ZSB0aGUgZmF1bHQgYWdhaW5zdCB0aGUKIAkgKiBhZGRyZXNzIHNwYWNlLiAgTHVja2lseSB0aGUga2VybmVsIG9ubHkgdmFsaWRseSByZWZlcmVuY2VzIHVzZXIKIAkgKiBzcGFjZSBmcm9tIHdlbGwgZGVmaW5lZCBhcmVhcyBvZiBjb2RlLCB3aGljaCBhcmUgbGlzdGVkIGluIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCBhN2Q4OTE1Li4xNzE5YTgxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMiwgUm9oaXQgU2V0aCA8cm9oaXQuc2V0aEBpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vaW5pdC5jIGIvYXJjaC9pMzg2L21tL2luaXQuYwppbmRleCBmODRiMTZlLi44OWU4NDg2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKQEAgLTYsNyArNiw2IEBACiAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTcyNiwxNiArNzI1LDE1IEBACiAKICNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCiAKLWV4dGVybiBjaGFyIF9fc3RhcnRfcm9kYXRhLCBfX2VuZF9yb2RhdGE7CiB2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpJl9fc3RhcnRfcm9kYXRhOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfcm9kYXRhOwogCi0JZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhOyBhZGRyICs9IFBBR0VfU0laRSkKKwlmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKV9fZW5kX3JvZGF0YTsgYWRkciArPSBQQUdFX1NJWkUpCiAJCWNoYW5nZV9wYWdlX2F0dHIodmlydF90b19wYWdlKGFkZHIpLCAxLCBQQUdFX0tFUk5FTF9STyk7CiAKLQlwcmludGsgKCJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgcmVhZC1vbmx5IGRhdGE6ICVsdWtcbiIsCi0JCQkodW5zaWduZWQgbG9uZykoJl9fZW5kX3JvZGF0YSAtICZfX3N0YXJ0X3JvZGF0YSkgPj4gMTApOworCXByaW50aygiV3JpdGUgcHJvdGVjdGluZyB0aGUga2VybmVsIHJlYWQtb25seSBkYXRhOiAldWtcbiIsCisJCQkoX19lbmRfcm9kYXRhIC0gX19zdGFydF9yb2RhdGEpID4+IDEwKTsKIAogCS8qCiAJICogY2hhbmdlX3BhZ2VfYXR0cigpIHJlcXVpcmVzIGEgZ2xvYmFsX2ZsdXNoX3RsYigpIGNhbGwgYWZ0ZXIgaXQuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDM1M2E4MzYuLjg1NjRiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCkBAIC0zLDcgKzMsNiBAQAogICogVGhhbmtzIHRvIEJlbiBMYUhhaXNlIGZvciBwcmVjaW91cyBmZWVkYmFjay4KICAqLyAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jIGIvYXJjaC9pMzg2L21tL3BndGFibGUuYwppbmRleCAyODg5NTY3Li5iZDk4NzY4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMKQEAgLTIsNyArMiw2IEBACiAgKiAgbGludXgvYXJjaC9pMzg2L21tL3BndGFibGUuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zMCw3ICsyOSw2IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcGdfZGF0YV90ICpwZ2RhdDsKIAl1bnNpZ25lZCBsb25nIGk7Ci0Jc3RydWN0IHBhZ2Vfc3RhdGUgcHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbS1pbmZvOlxuIik7CkBAIC01OCwxMiArNTYsMTMgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlZCBwYWdlcyBzaGFyZWRcbiIsIHNoYXJlZCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsIGNhY2hlZCk7CiAKLQlnZXRfcGFnZV9zdGF0ZSgmcHMpOwotCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBkaXJ0eVxuIiwgcHMubnJfZGlydHkpOwotCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyB3cml0ZWJhY2tcbiIsIHBzLm5yX3dyaXRlYmFjayk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJWx1IHBhZ2VzIG1hcHBlZFxuIiwgcHMubnJfbWFwcGVkKTsKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgc2xhYlxuIiwgcHMubnJfc2xhYik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJWx1IHBhZ2VzIHBhZ2V0YWJsZXNcbiIsIHBzLm5yX3BhZ2VfdGFibGVfcGFnZXMpOworCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBkaXJ0eVxuIiwgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkpOworCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyB3cml0ZWJhY2tcbiIsCisJCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSykpOworCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBtYXBwZWRcbiIsIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJWx1IHBhZ2VzIHNsYWJcbiIsIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUIpKTsKKwlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgcGFnZXRhYmxlc1xuIiwKKwkJCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfUEFHRVRBQkxFKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2kzODYuYyBiL2FyY2gvaTM4Ni9wY2kvaTM4Ni5jCmluZGV4IGExNTFmN2EuLjEwMTU0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvaTM4Ni5jCkBAIC00OCwxMCArNDgsMTAgQEAKICAqLwogdm9pZAogcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKKwkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJCWlmIChzdGFydCAmIDB4MzAwKSB7CiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvaW5pdC5jIGIvYXJjaC9pMzg2L3BjaS9pbml0LmMKaW5kZXggZjkxNTZkMy4uYzc2NTBhN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvaW5pdC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJwY2kuaCIKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMgYi9hcmNoL2kzODYvcGNpL2lycS5jCmluZGV4IDhjZTY5NTAuLjRhODk5NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9pcnEuYwpAQCAtNCw3ICs0LDYgQEAKICAqCShjKSAxOTk5LS0yMDAwIE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtODY1LDcgKzg2NCw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCQlpZiAoIShtYXNrICYgKDEgPDwgaSkpKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKHBpcnFfcGVuYWx0eVtpXSA8IHBpcnFfcGVuYWx0eVtuZXdpcnFdICYmIGNhbl9yZXF1ZXN0X2lycShpLCBTQV9TSElSUSkpCisJCQlpZiAocGlycV9wZW5hbHR5W2ldIDwgcGlycV9wZW5hbHR5W25ld2lycV0gJiYgY2FuX3JlcXVlc3RfaXJxKGksIElSUUZfU0hBUkVEKSkKIAkJCQluZXdpcnEgPSBpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS92aXN3cy5jIGIvYXJjaC9pMzg2L3BjaS92aXN3cy5jCmluZGV4IDZjMTc0MzMuLmYxYjQ4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvdmlzd3MuYworKysgYi9hcmNoL2kzODYvcGNpL3Zpc3dzLmMKQEAgLTQsNyArNCw2IEBACiAgKgkoYykgMTk5OS0tMjAwMCBNYXJ0aW4gTWFyZXMgPG1qQHVjdy5jej4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3Bvd2VyL2NwdS5jIGIvYXJjaC9pMzg2L3Bvd2VyL2NwdS5jCmluZGV4IGU2NTE3OTEuLjVhMWFiZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wb3dlci9jcHUuYworKysgYi9hcmNoL2kzODYvcG93ZXIvY3B1LmMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgUGF0cmljayBNb2NoZWwgPG1vY2hlbEBvc2RsLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IGE1NmRmN2IuLjQ3ZGU5ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC03MCw2ICs3MCwxMSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIERNQV9JU19OT1JNQUwKKwlib29sCisJZGVwZW5kcyBvbiBJQTY0X1NHSV9TTjIKKwlkZWZhdWx0IHkKKwogY2hvaWNlCiAJcHJvbXB0ICJTeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IElBNjRfR0VORVJJQwpAQCAtMjcxLDYgKzI3Niw5IEBACiAJICBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMuCiAJICBTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIENQVSBob3RwbHVnLgogCitjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBTQ0hFRF9TTVQKIAlib29sICJTTVQgc2NoZWR1bGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTTVAKQEAgLTQ4OSw2ICs0OTcsMTAgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfSEFSRElSUVMgJiYgU01QCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBJUlFfUEVSX0NQVQorCWJvb2wKKwlkZWZhdWx0IHkKKwogc291cmNlICJhcmNoL2lhNjQvaHAvc2ltL0tjb25maWciCiAKIG1lbnUgIkluc3RydW1lbnRhdGlvbiBTdXBwb3J0IgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCmluZGV4IDc2NmJmNDkuLjlkMWNmZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKQEAgLTExNCw3ICsxMTQsNyBAQAogQ09ORklHX0lPU0FQSUM9eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTcKIENPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9NAorQ09ORklHX05SX0NQVVM9MTYKIENPTkZJR19IT1RQTFVHX0NQVT15CiBDT05GSUdfUEVSTUlUX0JTUF9SRU1PVkU9eQogQ09ORklHX0ZPUkNFX0NQRUlfUkVUQVJHRVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2RpZy9zZXR1cC5jIGIvYXJjaC9pYTY0L2RpZy9zZXR1cC5jCmluZGV4IDM4YWE5YzEuLjVhYjEyYjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kaWcvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvZGlnL3NldHVwLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgVmlqYXkgQ2hhbmRlciA8dmlqYXlAZW5nci5zZ2kuY29tPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDU4MjVkZGUuLmRiOGUxZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMTksNyArMTksNiBAQAogKioKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9ib290L2Jvb3Rsb2FkZXIuYyBiL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9ib290bG9hZGVyLmMKaW5kZXggNTFhN2I3Yi4uYzVlOWJhYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ib290L2Jvb3Rsb2FkZXIuYworKysgYi9hcmNoL2lhNjQvaHAvc2ltL2Jvb3QvYm9vdGxvYWRlci5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIHN0cnVjdCB0YXNrX3N0cnVjdDsJLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgZWxmLmggKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9mdy1lbXUuYyBiL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9mdy1lbXUuYwppbmRleCAzMGZkZmIxLi41YTBhN2FmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvc2ltL2Jvb3QvZnctZW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9ib290L2Z3LWVtdS5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKICMgaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2NvbnNvbGUuYyBiL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fY29uc29sZS5jCmluZGV4IDVkZWZmMjEuLjZlMTQ5YzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fY29uc29sZS5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fY29uc29sZS5jCkBAIC01LDcgKzUsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICogQ29weXJpZ2h0IChDKSAxOTk5IFZpamF5IENoYW5kZXIgPHZpamF5QGVuZ3Iuc2dpLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbV9pcnEuYyBiL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1faXJxLmMKaW5kZXggYzBkMjVhMi4uODE0NTU0NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbV9pcnEuYworKysgYi9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2lycS5jCkBAIC00NCw4ICs0NCw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgKytpKSB7Ci0JCWlkZXNjID0gaXJxX2Rlc2NwKGkpOwotCQlpZiAoaWRlc2MtPmhhbmRsZXIgPT0gJm5vX2lycV90eXBlKQotCQkJaWRlc2MtPmhhbmRsZXIgPSAmaXJxX3R5cGVfaHBfc2ltOworCQlpZGVzYyA9IGlycV9kZXNjICsgaTsKKwkJaWYgKGlkZXNjLT5jaGlwID09ICZub19pcnFfdHlwZSkKKwkJCWlkZXNjLT5jaGlwID0gJmlycV90eXBlX2hwX3NpbTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX3NldHVwLmMgYi9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX3NldHVwLmMKaW5kZXggNjk0ZmM4Ni4uZjIyOTcxOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbV9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fc2V0dXAuYwpAQCAtNSw3ICs1LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqIENvcHlyaWdodCAoQykgMTk5OSBWaWpheSBDaGFuZGVyIDx2aWpheUBlbmdyLnNnaS5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMKaW5kZXggMDYzOWVjMC4uYjUxOTViZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYworKysgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbWV0aC5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEsIDIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYwppbmRleCAwZTVjNmFlLi4wZGFhY2MyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIDA3LzMwLzAyIEQuIE1vc2JlcmdlcglSZXBsYWNlIHN0aSgpL2NsaSgpIHdpdGggZXhwbGljaXQgc3BpbmxvY2tzICYgbG9jYWwgaXJxIG1hc2tpbmcKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQ3LDcgKzQ2LDcgQEAKIAogI2RlZmluZSBOUl9QT1JUUwkxCS8qIG9ubHkgb25lIHBvcnQgZm9yIG5vdyAqLwogCi0jZGVmaW5lIElSUV9UKGluZm8pICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TSEFSRV9JUlEpID8gU0FfU0hJUlEgOiBTQV9JTlRFUlJVUFQpCisjZGVmaW5lIElSUV9UKGluZm8pICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TSEFSRV9JUlEpID8gSVJRRl9TSEFSRUQgOiBJUlFGX0RJU0FCTEVEKQogCiAjZGVmaW5lIFNTQ19HRVRDSEFSCTIxCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL01ha2VmaWxlIGIvYXJjaC9pYTY0L2lhMzIvTWFrZWZpbGUKaW5kZXggNjFjYjYwYS4uYmFhZDhjNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2lhMzIvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai15IDo9IGlhMzJfZW50cnkubyBzeXNfaWEzMi5vIGlhMzJfc2lnbmFsLm8gXAogCSBpYTMyX3N1cHBvcnQubyBpYTMyX3RyYXBzLm8gYmluZm10X2VsZjMyLm8gaWEzMl9sZHQubworb2JqLSQoQ09ORklHX0FVRElUKSArPSBhdWRpdC5vCiAKICMgRG9uJ3QgbGV0IEdDQyB1c2VzIGYxNi1mMzEgc28gdGhhdCBzYXZlX2lhMzJfZnBzdGF0ZV9saXZlKCkgYW5kCiAjIHJlc3RvcmVfaWEzMl9mcHN0YXRlX2xpdmUoKSBjYW4gYmUgc3VyZSB0aGUgbGl2ZSByZWdpc3RlciBjb250YWluIHVzZXItbGV2ZWwgc3RhdGUuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jIGIvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjk0ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYwpAQCAtMCwwICsxLDExIEBACisjaW5jbHVkZSA8YXNtLWkzODYvdW5pc3RkLmg+CisKK3Vuc2lnbmVkIGlhMzJfZGlyX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+Cit+MFUKK307CisKK3Vuc2lnbmVkIGlhMzJfY2hhdHRyX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD4KK34wVQorfTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggZGEwM2MwNi4uZGFhNmI5MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTksNyArOSw2IEBACiAgKiAwNC8xMy8wMQlELiBNb3NiZXJnZXIJZHJvcHBlZCBzYXZpbmcgdHNzZCBpbiBhci5rMS0tLWl0J3Mgbm90IG5lZWRlZAogICogMDkvMTQvMDEJRC4gTW9zYmVyZ2VyCWZpeGVkIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBnZHQvdHNzIHBhZ2UKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaCBiL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmgKaW5kZXggY2NiOThlZC4uNzAzYTY3YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaAorKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMycHJpdi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfSUEzMl9QUklWX0gKICNkZWZpbmUgX0FTTV9JQTY0X0lBMzJfUFJJVl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCmluZGV4IDUzNjZiM2IuLjZhYTNjNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwpAQCAtMTQsNyArMTQsNiBAQAogICogZW52aXJvbm1lbnQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCAwOWEwZGJjLi4wZTQ1NTNmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAKIG9iai0kKENPTkZJR19JQTY0X01DQV9SRUNPVkVSWSkJKz0gbWNhX3JlY292ZXJ5Lm8KIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vIGpwcm9iZXMubwogb2JqLSQoQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SKQkrPSB1bmNhY2hlZC5vCitvYmotJChDT05GSUdfQVVESVQpCQkrPSBhdWRpdC5vCiBtY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCiAKICMgVGhlIGdhdGUgRFNPIGltYWdlIGlzIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCmluZGV4IGZmZjgyOTIuLjJhMWVmNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMKQEAgLTgsNyArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCmluZGV4IGNhMTZkOTUuLmNjZGVmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMTZlN2I2Ni4uNzVhMmEyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNSw3ICs1LDYgQEAKICAqLwogCiAjZGVmaW5lIEFTTV9PRkZTRVRTX0MgMQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTEyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2F1ZGl0LmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitzdGF0aWMgdW5zaWduZWQgZGlyX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGF0dHJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgorfjBVCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9jbGFzc2VzX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisJZXh0ZXJuIF9fdTMyIGlhMzJfZGlyX2NsYXNzW107CisJZXh0ZXJuIF9fdTMyIGlhMzJfY2hhdHRyX2NsYXNzW107CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyLCBpYTMyX2Rpcl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSXzMyLCBpYTMyX2NoYXR0cl9jbGFzcyk7CisjZW5kaWYKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBjaGF0dHJfY2xhc3MpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGF1ZGl0X2NsYXNzZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggNWExYmY4MS4uODZmYWYyMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtOSw3ICs5LDYgQEAKICAqICAgICAgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCmluZGV4IGMzM2QwYmEuLmIxM2MwNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwpAQCAtMjAsNyArMjAsNiBAQAogICogR291dGhhbSBSYW86IDxnb3V0aGFtLnJhb0BpbnRlbC5jb20+CiAgKglTa2lwIG5vbi1XQiBtZW1vcnkgYW5kIGlnbm9yZSBlbXB0eSBtZW1vcnkgcmFuZ2VzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDMyYzk5OWYuLjEyNzAxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTMxLDcgKzMxLDYgQEAKICAqCXBOb25TeXM6CSFwU3lzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LmggYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LmgKaW5kZXggZWJjM2RmYi4uYjgzZWRhYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5oCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuaApAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFByZXNlcnZlZCByZWdpc3RlcnMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gY29kZSBpbiBpdnQuUyBhbmQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMKaW5kZXggODYwNjRjYS4uMzI3NDg1MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMKQEAgLTYsNyArNiw2IEBACiAgKiAJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLmxkcy5TIGIvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLmxkcy5TCmluZGV4IDdjOTllNmUuLmNjMzVjZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2dhdGUubGRzLlMKQEAgLTQsNyArNCw2IEBACiAgKiBpbiBvbmUgcGFnZSkuICBUaGlzIHNjcmlwdCBjb250cm9scyBpdHMgbGF5b3V0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwppbmRleCBmMTc3OGE4Li41NjFiOGYxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwpAQCAtMTksNyArMTksNiBAQAogICogICBTdXBwb3J0IGZvciBDUFUgSG90cGx1ZwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKaW5kZXggYmJjZmQwOC4uYjdjZjY1MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMKQEAgLTUsNyArNSw2IEBACiAgKiBBbGwgb3RoZXIgZXhwb3J0cyBzaG91bGQgYmUgcHV0IGRpcmVjdGx5IGFmdGVyIHRoZSBkZWZpbml0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwppbmRleCBkNThjMWM1Li45YmYxNWZlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwpAQCAtNzksNyArNzksNiBAQAogICogZGVzY3JpYmVpbnRlcnJ1cHRzLiAgTm93IHdlIHVzZSAiSVJRIiBvbmx5IGZvciBMaW51eCBJUlEncy4gIElTQSBJUlEKICAqIChpc2FfaXJxKSBpcyB0aGUgb25seSBleGNlcHRpb24gaW4gdGhpcyBzb3VyY2UgY29kZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ1Niw3ICs0NTUsNyBAQAogc3RhdGljIHZvaWQKIGlvc2FwaWNfYWNrX2VkZ2VfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjX3QgKmlkZXNjID0gaXJxX2Rlc2NwKGlycSk7CisJaXJxX2Rlc2NfdCAqaWRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAogCW1vdmVfbmF0aXZlX2lycShpcnEpOwogCS8qCkBAIC02NTksMTQgKzY1OCwxNCBAQAogCWVsc2UKIAkJaXJxX3R5cGUgPSAmaXJxX3R5cGVfaW9zYXBpY19sZXZlbDsKIAotCWlkZXNjID0gaXJxX2Rlc2NwKHZlY3Rvcik7Ci0JaWYgKGlkZXNjLT5oYW5kbGVyICE9IGlycV90eXBlKSB7Ci0JCWlmIChpZGVzYy0+aGFuZGxlciAhPSAmbm9faXJxX3R5cGUpCisJaWRlc2MgPSBpcnFfZGVzYyArIHZlY3RvcjsKKwlpZiAoaWRlc2MtPmNoaXAgIT0gaXJxX3R5cGUpIHsKKwkJaWYgKGlkZXNjLT5jaGlwICE9ICZub19pcnFfdHlwZSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiJXM6IGNoYW5naW5nIHZlY3RvciAlZCBmcm9tICVzIHRvICVzXG4iLAogCQkJICAgICAgIF9fRlVOQ1RJT05fXywgdmVjdG9yLAotCQkJICAgICAgIGlkZXNjLT5oYW5kbGVyLT50eXBlbmFtZSwgaXJxX3R5cGUtPnR5cGVuYW1lKTsKLQkJaWRlc2MtPmhhbmRsZXIgPSBpcnFfdHlwZTsKKwkJCSAgICAgICBpZGVzYy0+Y2hpcC0+dHlwZW5hbWUsIGlycV90eXBlLT50eXBlbmFtZSk7CisJCWlkZXNjLT5jaGlwID0gaXJxX3R5cGU7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzkzLDE0ICs3OTIsMTQgQEAKIAkJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY3AodmVjdG9yKS0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1t2ZWN0b3JdLmxvY2ssIGZsYWdzKTsKIAlzcGluX2xvY2soJmlvc2FwaWNfbG9jayk7CiAJewogCQlpZiAoZ3NpX3RvX3ZlY3Rvcihnc2kpID4gMCkgewogCQkJaWYgKGxpc3RfZW1wdHkoJmlvc2FwaWNfaW50cl9pbmZvW3ZlY3Rvcl0ucnRlcykpCiAJCQkJZnJlZV9pcnFfdmVjdG9yKHZlY3Rvcik7CiAJCQlzcGluX3VubG9jaygmaW9zYXBpY19sb2NrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjcCh2ZWN0b3IpLT5sb2NrLAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbdmVjdG9yXS5sb2NrLAogCQkJCQkgICAgICAgZmxhZ3MpOwogCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtODEwLDcgKzgwOSw3IEBACiAJCQkgICAgICBwb2xhcml0eSwgdHJpZ2dlcik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlzcGluX3VubG9jaygmaW9zYXBpY19sb2NrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjcCh2ZWN0b3IpLT5sb2NrLAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbdmVjdG9yXS5sb2NrLAogCQkJCQkgICAgICAgZmxhZ3MpOwogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtODI1LDcgKzgyNCw3IEBACiAJCXNldF9ydGUoZ3NpLCB2ZWN0b3IsIGRlc3QsIG1hc2spOwogCX0KIAlzcGluX3VubG9jaygmaW9zYXBpY19sb2NrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY3AodmVjdG9yKS0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW3ZlY3Rvcl0ubG9jaywgZmxhZ3MpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiR1NJICV1ICglcywgJXMpIC0+IENQVSAlZCAoMHglMDR4KSB2ZWN0b3IgJWRcbiIsCiAJICAgICAgIGdzaSwgKHRyaWdnZXIgPT0gSU9TQVBJQ19FREdFID8gImVkZ2UiIDogImxldmVsIiksCkBAIC04NjAsNyArODU5LDcgQEAKIAl9CiAJdmVjdG9yID0gaXJxX3RvX3ZlY3RvcihpcnEpOwogCi0JaWRlc2MgPSBpcnFfZGVzY3AoaXJxKTsKKwlpZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVzYy0+bG9jaywgZmxhZ3MpOwogCXNwaW5fbG9jaygmaW9zYXBpY19sb2NrKTsKIAl7CkBAIC05MDMsNyArOTAyLDcgQEAKIAkJCUJVR19PTihpb3NhcGljX2ludHJfaW5mb1t2ZWN0b3JdLmNvdW50KTsKIAogCQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGRlc2NyaXB0b3IgKi8KLQkJCWlkZXNjLT5oYW5kbGVyID0gJm5vX2lycV90eXBlOworCQkJaWRlc2MtPmNoaXAgPSAmbm9faXJxX3R5cGU7CiAKIAkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gKi8KIAkJCW1lbXNldCgmaW9zYXBpY19pbnRyX2luZm9bdmVjdG9yXSwgMCwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCmluZGV4IDljNzJlYTNmLi43ODUyMzgyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogCQl9CiAjZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAJY3B1X3NldChjcHVfbG9naWNhbF9pZChod2lkKSwgbWFzayk7CiAKIAlpZiAoaXJxIDwgTlJfSVJRUykgewotCQlpcnFfYWZmaW5pdHlbaXJxXSA9IG1hc2s7CisJCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwogCQlpcnFfcmVkaXJbaXJxXSA9IChjaGFyKSAocmVkaXIgJiAweGZmKTsKIAl9CiB9CkBAIC0xMjAsNyArMTIwLDcgQEAKIAlpbnQgCQlpcnEsIG5ld19jcHU7CiAKIAlmb3IgKGlycT0wOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgewotCQlkZXNjID0gaXJxX2Rlc2NwKGlycSk7CisJCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAogCQkvKgogCQkgKiBObyBoYW5kbGluZyBmb3Igbm93LgpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCWlmIChkZXNjLT5zdGF0dXMgPT0gSVJRX1BFUl9DUFUpCiAJCQljb250aW51ZTsKIAotCQljcHVzX2FuZChtYXNrLCBpcnFfYWZmaW5pdHlbaXJxXSwgY3B1X29ubGluZV9tYXApOworCQljcHVzX2FuZChtYXNrLCBpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVfb25saW5lX21hcCk7CiAJCWlmIChhbnlfb25saW5lX2NwdShtYXNrKSA9PSBOUl9DUFVTKSB7CiAJCQkvKgogCQkJICogU2F2ZSBpdCBmb3IgcGhhc2UgMiBwcm9jZXNzaW5nCkBAIC0xNDQsMTUgKzE0NCwxNSBAQAogCQkJLyoKIAkJCSAqIEFsIHRocmVlIGFyZSBlc3NlbnRpYWwsIGN1cnJlbnRseSBXQVJOX09OLi4gbWF5YmUgcGFuaWM/CiAJCQkgKi8KLQkJCWlmIChkZXNjLT5oYW5kbGVyICYmIGRlc2MtPmhhbmRsZXItPmRpc2FibGUgJiYKLQkJCQlkZXNjLT5oYW5kbGVyLT5lbmFibGUgJiYgZGVzYy0+aGFuZGxlci0+c2V0X2FmZmluaXR5KSB7Ci0JCQkJZGVzYy0+aGFuZGxlci0+ZGlzYWJsZShpcnEpOwotCQkJCWRlc2MtPmhhbmRsZXItPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwotCQkJCWRlc2MtPmhhbmRsZXItPmVuYWJsZShpcnEpOworCQkJaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZGlzYWJsZSAmJgorCQkJCWRlc2MtPmNoaXAtPmVuYWJsZSAmJiBkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpIHsKKwkJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CisJCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CisJCQkJZGVzYy0+Y2hpcC0+ZW5hYmxlKGlycSk7CiAJCQl9IGVsc2UgewotCQkJCVdBUk5fT04oKCEoZGVzYy0+aGFuZGxlcikgfHwgIShkZXNjLT5oYW5kbGVyLT5kaXNhYmxlKSB8fAotCQkJCQkJIShkZXNjLT5oYW5kbGVyLT5lbmFibGUpIHx8Ci0JCQkJCQkhKGRlc2MtPmhhbmRsZXItPnNldF9hZmZpbml0eSkpKTsKKwkJCQlXQVJOX09OKCghKGRlc2MtPmNoaXApIHx8ICEoZGVzYy0+Y2hpcC0+ZGlzYWJsZSkgfHwKKwkJCQkJCSEoZGVzYy0+Y2hpcC0+ZW5hYmxlKSB8fAorCQkJCQkJIShkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpKSk7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMgYi9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKaW5kZXggZWY5YTJiNC4uYTA0MTM2NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwpAQCAtMTQsNyArMTQsNiBAQAogICoJCQkJCQlBZGRlZCBDUFUgSG90cGx1ZyBoYW5kbGluZyBmb3IgSVBGLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KQEAgLTIzNiw3ICsyMzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcGlfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0JaGFuZGxlX0lQSSwKLQkuZmxhZ3MgPQlTQV9JTlRFUlJVUFQsCisJLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKIAkubmFtZSA9CQkiSVBJIgogfTsKICNlbmRpZgpAQCAtMjQ5LDkgKzI0OCw5IEBACiAKIAlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7ICsraXJxKQogCQlpZiAoaXJxX3RvX3ZlY3RvcihpcnEpID09IHZlYykgewotCQkJZGVzYyA9IGlycV9kZXNjcChpcnEpOworCQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRVJfQ1BVOwotCQkJZGVzYy0+aGFuZGxlciA9ICZpcnFfdHlwZV9pYTY0X2xzYXBpYzsKKwkJCWRlc2MtPmNoaXAgPSAmaXJxX3R5cGVfaWE2NF9sc2FwaWM7CiAJCQlpZiAoYWN0aW9uKQogCQkJCXNldHVwX2lycShpcnEsIGFjdGlvbik7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2xzYXBpYy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfbHNhcGljLmMKaW5kZXggZWExNGU2YS4uMWFiNThiMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfbHNhcGljLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfbHNhcGljLmMKQEAgLTI2LDYgKzI2LDEzIEBACiAJLyogbnV0aGluZyB0byBkby4uLiAqLwogfQogCitzdGF0aWMgaW50IGxzYXBpY19yZXRyaWdnZXIodW5zaWduZWQgaW50IGlycSkKK3sKKwlpYTY0X3Jlc2VuZF9pcnEoaXJxKTsKKworCXJldHVybiAxOworfQorCiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaXJxX3R5cGVfaWE2NF9sc2FwaWMgPSB7CiAJLnR5cGVuYW1lID0JIkxTQVBJQyIsCiAJLnN0YXJ0dXAgPQlsc2FwaWNfbm9vcF9zdGFydHVwLApAQCAtMzMsNSArNDAsNiBAQAogCS5lbmFibGUgPQlsc2FwaWNfbm9vcCwKIAkuZGlzYWJsZSA9CWxzYXBpY19ub29wLAogCS5hY2sgPQkJbHNhcGljX25vb3AsCi0JLmVuZCA9CQlsc2FwaWNfbm9vcAorCS5lbmQgPQkJbHNhcGljX25vb3AsCisJLnJldHJpZ2dlciA9CWxzYXBpY19yZXRyaWdnZXIsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKaW5kZXggODI5YTQzYy4uNmI3ZmNiZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2l2dC5TCkBAIC0zOCw3ICszOCw2IEBACiAgKiBUYWJsZSBpcyBiYXNlZCB1cG9uIEVBUzIuNiAoT2N0IDE5OTkpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL2JyZWFrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGY5MDM5ZjguLjAwZDljODMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiAgICAgICAgICAgICAgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4gYWRhcHRlZCBmcm9tIGkzODYKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tYWNodmVjLmMgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwppbmRleCA0YjBiNzFkNS4uZDRhNTQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tYWNodmVjLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tYWNodmVjLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggNmEwODgwNi4uMmZiZTQ1MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC01NSw3ICs1NSw2IEBACiAgKiAyMDA1LTEwLTA3IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CiAgKgkgICAgICBBZGQgbm90aWZ5X2RpZSgpIGhvb2tzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTY3OSw3ICs2NzgsNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1pYTY0X21jYV9tb2RpZnlfY29tbShjb25zdCB0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQpCitpYTY0X21jYV9tb2RpZnlfY29tbShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZpb3VzX2N1cnJlbnQpCiB7CiAJY2hhciAqcCwgY29tbVtzaXplb2YoY3VycmVudC0+Y29tbSldOwogCWlmIChwcmV2aW91c19jdXJyZW50LT5waWQpCkBAIC03MTAsNyArNzA5LDcgQEAKICAqIHRoYXQgd2UgY2FuIGRvIGJhY2t0cmFjZSBvbiB0aGUgTUNBL0lOSVQgaGFuZGxlciBjb2RlIGl0c2VsZi4KICAqLwogCi1zdGF0aWMgdGFza190ICoKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKgogaWE2NF9tY2FfbW9kaWZ5X29yaWdpbmFsX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQljb25zdCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdywKIAkJc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICpzb3MsCkBAIC03MjAsNyArNzE5LDcgQEAKIAlpYTY0X3ZhIHZhOwogCWV4dGVybiBjaGFyIGlhNjRfbGVhdmVfa2VybmVsW107CS8qIE5lZWQgYXNtIGFkZHJlc3MsIG5vdCBmdW5jdGlvbiBkZXNjcmlwdG9yICovCiAJY29uc3QgcGFsX21pbl9zdGF0ZV9hcmVhX3QgKm1zID0gc29zLT5wYWxfbWluX3N0YXRlOwotCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZpb3VzX2N1cnJlbnQ7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOwogCXN0cnVjdCBzd2l0Y2hfc3RhY2sgKm9sZF9zdzsKIAl1bnNpZ25lZCBzaXplID0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSArCkBAIC0xMDI0LDcgKzEwMjMsNyBAQAogCXBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190ICpwc3AgPSAocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QgKikKIAkJJnNvcy0+cHJvY19zdGF0ZV9wYXJhbTsKIAlpbnQgcmVjb3ZlciwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZpb3VzX2N1cnJlbnQ7CiAJc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgbmQgPQogCQl7IC5zb3MgPSBzb3MsIC5tb25hcmNoX2NwdSA9ICZtb25hcmNoX2NwdSB9OwogCkBAIC0xMzUzLDcgKzEzNTIsNyBAQAogewogCXN0YXRpYyBhdG9taWNfdCBzbGF2ZXM7CiAJc3RhdGljIGF0b21pY190IG1vbmFyY2hzOwotCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZpb3VzX2N1cnJlbnQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSBuZCA9CiAJCXsgLnNvcyA9IHNvcywgLm1vbmFyY2hfY3B1ID0gJm1vbmFyY2hfY3B1IH07CkBAIC0xNDU4LDM4ICsxNDU3LDM4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNtY2lfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0JaWE2NF9tY2FfY21jX2ludF9oYW5kbGVyLAotCS5mbGFncyA9CVNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAogCS5uYW1lID0JCSJjbWNfaG5kbHIiCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjbWNwX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CWlhNjRfbWNhX2NtY19pbnRfY2FsbGVyLAotCS5mbGFncyA9CVNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAogCS5uYW1lID0JCSJjbWNfcG9sbCIKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG1jYV9yZHp2X2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CWlhNjRfbWNhX3JlbmRlel9pbnRfaGFuZGxlciwKLQkuZmxhZ3MgPQlTQV9JTlRFUlJVUFQsCisJLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKIAkubmFtZSA9CQkibWNhX3JkenYiCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtY2Ffd2t1cF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQlpYTY0X21jYV93YWtldXBfaW50X2hhbmRsZXIsCi0JLmZsYWdzID0JU0FfSU5URVJSVVBULAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCiAJLm5hbWUgPQkJIm1jYV93a3VwIgogfTsKIAogI2lmZGVmIENPTkZJR19BQ1BJCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtY2FfY3BlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CWlhNjRfbWNhX2NwZV9pbnRfaGFuZGxlciwKLQkuZmxhZ3MgPQlTQV9JTlRFUlJVUFQsCisJLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKIAkubmFtZSA9CQkiY3BlX2huZGxyIgogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbWNhX2NwZXBfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0JaWE2NF9tY2FfY3BlX2ludF9jYWxsZXIsCi0JLmZsYWdzID0JU0FfSU5URVJSVVBULAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCiAJLm5hbWUgPQkJImNwZV9wb2xsIgogfTsKICNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwpAQCAtMTc4OCw3ICsxNzg3LDcgQEAKIAkJCWNwZV9wb2xsX2VuYWJsZWQgPSAwOwogCQkJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyArK2lycSkKIAkJCQlpZiAoaXJxX3RvX3ZlY3RvcihpcnEpID09IGNwZV92ZWN0b3IpIHsKLQkJCQkJZGVzYyA9IGlycV9kZXNjcChpcnEpOworCQkJCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJCQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKIAkJCQkJc2V0dXBfaXJxKGlycSwgJm1jYV9jcGVfaXJxYWN0aW9uKTsKIAkJCQkJaWE2NF9jcGVfaXJxID0gaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwppbmRleCBjMWJkMWZlLi45NjA0NzQ5MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKQEAgLTE5LDcgKzE5LDYgQEAKIC8vIDEyLzA4LzA1IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CiAvLwkJICAgVXNlIHBlciBjcHUgTUNBL0lOSVQgc3RhY2tzIGZvciBhbGwgZGF0YS4KIC8vCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCmluZGV4IGNhNjY2NmIuLjhkYjZlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUnVzcyBBbmRlcnNvbiA8cmphQHNnaS5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2X2FzbS5TCmluZGV4IGU2YTU4MGQuLmYyZDQ5MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydl9hc20uUworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnZfYXNtLlMKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRlVKSVRTVSBMSU1JVEVECiAgKiBDb3B5cmlnaHQgKEMpIEhpZGV0b3NoaSBTZXRvIChzZXRvLmhpZGV0b3NoaUBqcC5mdWppdHN1LmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oIGIvYXJjaC9pYTY0L2tlcm5lbC9taW5zdGF0ZS5oCmluZGV4IDg1ZWQ1NDEuLmM5YWM4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWluc3RhdGUuaAorKysgYi9hcmNoL2lhNjQva2VybmVsL21pbnN0YXRlLmgKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggM2EzMGNmYy4uMTU4ZTNjNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAgICBTRUdSRUw2NExTQgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL251bWEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbnVtYS5jCmluZGV4IDA3NjY0OTMuLjFjYzM2MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbnVtYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbnVtYS5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICogICBKZXNzZSBCYXJuZXMgPGpiYXJuZXNAc2dpLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMgYi9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYwppbmRleCAzMDNhOWFmLi4zZjViYWM1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYwpAQCAtMTcsNyArMTcsNiBAQAogICogMTAvMjMvMjAwMQlTLkVyYW5pYW4JdXBkYXRlZCBwYWxfcGVyZl9tb25faW5mbyBidWcgZml4ZXMKICAqIDAzLzI0LzIwMDQJQXNob2sgUmFqCXVwZGF0ZWQgdG8gd29yayB3aXRoIENQVSBIb3RwbHVnCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtOTk4LDcgKzk5Nyw3IEBACiAJfQogCiAJLyogUmVnaXN0ZXIgZm9yIGZ1dHVyZSBkZWxpdmVyeSB2aWEgbm90aWZ5IHJlZ2lzdHJhdGlvbiAqLwotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcGFsaW5mb19jcHVfbm90aWZpZXIpOworCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGFsaW5mb19jcHVfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDZkN2JjOGYuLmM3Y2NkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAJaHR0cDovL3d3dy5ocGwuaHAuY29tL3Jlc2VhcmNoL2xpbnV4L3BlcmZtb24KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTYxNjUsNyArNjE2NCw3IEBACiAJCS8qCiAJCSAqIHdpbGwgcmVwbGF5IHRoZSBQTVUgaW50ZXJydXB0CiAJCSAqLwotCQlpZiAobmVlZF9pcnFfcmVzZW5kKSBod19yZXNlbmRfaXJxKE5VTEwsIElBNjRfUEVSRk1PTl9WRUNUT1IpOworCQlpZiAobmVlZF9pcnFfcmVzZW5kKSBpYTY0X3Jlc2VuZF9pcnEoSUE2NF9QRVJGTU9OX1ZFQ1RPUik7CiAKIAkJcGZtX3N0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV0ucGZtX3JlcGxheV9vdmZsX2ludHJfY291bnQrKzsKIAl9CkBAIC02MzA1LDcgKzYzMDQsNyBAQAogCQkvKgogCQkgKiB3aWxsIHJlcGxheSB0aGUgUE1VIGludGVycnVwdAogCQkgKi8KLQkJaWYgKG5lZWRfaXJxX3Jlc2VuZCkgaHdfcmVzZW5kX2lycShOVUxMLCBJQTY0X1BFUkZNT05fVkVDVE9SKTsKKwkJaWYgKG5lZWRfaXJxX3Jlc2VuZCkgaWE2NF9yZXNlbmRfaXJxKElBNjRfUEVSRk1PTl9WRUNUT1IpOwogCiAJCXBmbV9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldLnBmbV9yZXBsYXlfb3ZmbF9pbnRyX2NvdW50Kys7CiAJfQpAQCAtNjQ0MCw3ICs2NDM5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcGVyZm1vbl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBwZm1faW50ZXJydXB0X2hhbmRsZXIsCi0JLmZsYWdzICAgPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzICAgPSBJUlFGX0RJU0FCTEVELAogCS5uYW1lICAgID0gInBlcmZtb24iCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMKaW5kZXggMzQ0OTQxZC4uZmY4MGVhYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYwpAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjA0NWMyNy4uZWE5MTRjYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTksNyArOSw2IEBACiAgKgkgICAgICBBZGQgbm90aWZ5X2RpZSgpIGhvb2tzLgogICovCiAjZGVmaW5lIF9fS0VSTkVMX1NZU0NBTExTX18JLyogc2VlIDxhc20vdW5pc3RkLmg+ICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZTYxZTE1ZS4uYWE3MDVlNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3B0cmFjZS5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqIERlcml2ZWQgZnJvbSB0aGUgeDg2IGFuZCBBbHBoYSB2ZXJzaW9ucy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsLmMKaW5kZXggNzdmYTY1OS4uNjQyZmRjNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NhbC5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IFZBIExpbnV4IFN5c3RlbXMKICAqIENvcHlyaWdodCAoQykgMTk5OSBXYWx0IERydW1tb25kIDxkcnVtbW9uZEB2YWxpbnV4LmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDZkYmEyZDYuLjZhMzNmNDE0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiAwNi8yNC85OSBXLkRydW1tb25kCWFkZGVkIGJvb3RfY3B1X2RhdGEuCiAgKiAwNS8yOC8wNSBaLiBNZW55aGFydAlEeW5hbWljIHN0cmlkZSBzaXplIGZvciAiZmx1c2hfaWNhY2hlX3JhbmdlKCkiCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IDFkNzkwM2UuLjc3ZjhiNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtNyw3ICs3LDYgQEAKICAqIERlcml2ZWQgZnJvbSBpMzg2IGFuZCBBbHBoYSB2ZXJzaW9ucy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA0NGU5NTQ3Li42MjAzZWQ0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMDUvMDEvMzAgU3VyZXNoIFNpZGRoYSA8c3VyZXNoLmIuc2lkZGhhQGludGVsLmNvbT4KICAqCQkJCQkJU2V0dXAgY3B1X3NpYmxpbmdfbWFwIGFuZCBjcHVfY29yZV9tYXAKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtMTI1LDcgKzEyNCw3IEBACiBleHRlcm4gdm9pZCBzdGFydF9hcCAodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X2lvYmFzZTsKIAotdGFza190ICp0YXNrX2Zvcl9ib290aW5nX2NwdTsKK3N0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19mb3JfYm9vdGluZ19jcHU7CiAKIC8qCiAgKiBTdGF0ZSBmb3IgZWFjaCBDUFUKQEAgLTY3NywxNiArNjc2LDE2IEBACiAJCQluZXdfY3BlaV9jcHUgPSBhbnlfb25saW5lX2NwdShjcHVfb25saW5lX21hcCk7CiAJCQltYXNrID0gY3B1bWFza19vZl9jcHUobmV3X2NwZWlfY3B1KTsKIAkJCXNldF9jcGVpX3RhcmdldF9jcHUobmV3X2NwZWlfY3B1KTsKLQkJCWRlc2MgPSBpcnFfZGVzY3AoaWE2NF9jcGVfaXJxKTsKKwkJCWRlc2MgPSBpcnFfZGVzYyArIGlhNjRfY3BlX2lycTsKIAkJCS8qCiAJCQkgKiBTd2l0Y2ggZm9yIG5vdywgaW1tZWRpYXRseSwgd2UgbmVlZCB0byBkbyBmYWtlIGludHIKIAkJCSAqIGFzIG90aGVyIGludGVycnVwdHMsIGJ1dCBuZWVkIHRvIHN0dWR5IENQRUkgYmVoYXZpb3VyIHdpdGgKIAkJCSAqIHBvbGxpbmcgYmVmb3JlIG1ha2luZyBjaGFuZ2VzLgogCQkJICovCiAJCQlpZiAoZGVzYykgewotCQkJCWRlc2MtPmhhbmRsZXItPmRpc2FibGUoaWE2NF9jcGVfaXJxKTsKLQkJCQlkZXNjLT5oYW5kbGVyLT5zZXRfYWZmaW5pdHkoaWE2NF9jcGVfaXJxLCBtYXNrKTsKLQkJCQlkZXNjLT5oYW5kbGVyLT5lbmFibGUoaWE2NF9jcGVfaXJxKTsKKwkJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlhNjRfY3BlX2lycSk7CisJCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlhNjRfY3BlX2lycSwgbWFzayk7CisJCQkJZGVzYy0+Y2hpcC0+ZW5hYmxlKGlhNjRfY3BlX2lycSk7CiAJCQkJcHJpbnRrICgiUmUtdGFyZ2V0dGluZyBDUEVJIHRvIGNwdSAlZFxuIiwgbmV3X2NwZWlfY3B1KTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jCmluZGV4IGM3Yjk0M2YuLjQwNzIyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3N5c19pYTY0LmMKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwgMjAwMi0yMDAzLCAyMDA1IEhld2xldHQtUGFja2FyZCBDbwogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCmluZGV4IDQ5OTU4OTAuLjY5MjhlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgVkEgTGludXggU3lzdGVtcwogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIzMiw3ICsyMzEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQl0aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzID0JU0FfSU5URVJSVVBULAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCiAJLm5hbWUgPQkJInRpbWVyIgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IDU1MTFkOWMuLmIxNDZmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqCVBvcHVsYXRlIGNwdSBjYWNoZSBlbnRyaWVzIGluIHN5c2ZzIGZvciBjcHUgY2FjaGUgaW5mbwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCmluZGV4IDdjMWRkYzguLmU3YmJiMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKQEAgLTcsNyArNyw2IEBACiAgKiAwNS8xMi8wMCBncmFvIDxnb3V0aGFtLnJhb0BpbnRlbC5jb20+IDogYWRkZWQgaXNyIGluIHNpZ2luZm8gZm9yIFNJR0ZQRQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3ODM2MDBmLi41YjBkNWY2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9jbGVhcl9wYWdlLlMgYi9hcmNoL2lhNjQvbGliL2NsZWFyX3BhZ2UuUwppbmRleCBkNDk4NzA2Li4yZDgxNGU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbGliL2NsZWFyX3BhZ2UuUworKysgYi9hcmNoL2lhNjQvbGliL2NsZWFyX3BhZ2UuUwpAQCAtOCw3ICs4LDYgQEAKICAqIDIvMTIvMDIga2NoZW4JVHVuZWQgZm9yIGJvdGggSXRhbml1bSBhbmQgTWNLaW5sZXkKICAqIDMvMDgvMDIgZGF2aWRtCVNvbWUgbW9yZSB0d2Vha2luZwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9pby5jIGIvYXJjaC9pYTY0L2xpYi9pby5jCmluZGV4IDg5NDllNDQuLmJjZDE2ZjhhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbGliL2lvLmMKKysrIGIvYXJjaC9pYTY0L2xpYi9pby5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9saWIvbWVtY3B5X21jay5TIGIvYXJjaC9pYTY0L2xpYi9tZW1jcHlfbWNrLlMKaW5kZXggOWU1MzRkNS4uYWIwZjg3NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9tZW1jcHlfbWNrLlMKKysrIGIvYXJjaC9pYTY0L2xpYi9tZW1jcHlfbWNrLlMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgogICogQ29weXJpZ2h0IChDKSAyMDAyIEtlbiBDaGVuIDxrZW5uZXRoLncuY2hlbkBpbnRlbC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKaW5kZXggODRmZDFjMS4uMmE4OGNkZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtMTQsNyArMTQsNiBAQAogICogUm91dGluZXMgdXNlZCBieSBpYTY0IG1hY2hpbmVzIHdpdGggY29udGlndW91cyAob3IgdmlydHVhbGx5IGNvbnRpZ3VvdXMpCiAgKiBtZW1vcnkuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9leHRhYmxlLmMgYi9hcmNoL2lhNjQvbW0vZXh0YWJsZS5jCmluZGV4IDZkMjU5ZTMuLjcxYzUwZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC9pYTY0L21tL2V4dGFibGUuYwpAQCAtNSw3ICs1LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggOGQ1MDY3MS4uZWVlNWMxY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvaWE2NC9tbS9odWdldGxicGFnZS5jCkBAIC04LDcgKzgsNiBAQAogICogRmViLCAyMDA0OiBkeW5hbWljIGh1Z2V0bGIgcGFnZSBzaXplIHZpYSBib290IHBhcmFtZXRlcgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggMzgzMDZlOS4uMmY1MGMwNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9udW1hLmMgYi9hcmNoL2lhNjQvbW0vbnVtYS5jCmluZGV4IDRlNWM4YjMuLjY0ZTRjMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9udW1hLmMKKysrIGIvYXJjaC9pYTY0L21tL251bWEuYwpAQCAtMTAsNyArMTAsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgMjAwMi8wOC8wNyBFcmljaCBGb2NodCA8ZWZvY2h0QGVzcy5uZWMuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggNGRiYmNhMC4uZmZhZDc2MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtMTEsNyArMTEsNiBAQAogICogUm9oaXQgU2V0aCA8cm9oaXQuc2V0aEBpbnRlbC5jb20+CiAgKiBLZW4gQ2hlbiA8a2VubmV0aC53LmNoZW5AaW50ZWwuY29tPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L29wcm9maWxlL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9vcHJvZmlsZS9wZXJmbW9uLmMKaW5kZXggYjc5NzVhNC4uYmM0MWRkMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L29wcm9maWxlL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvcGVyZm1vbi5jCkBAIC04LDcgKzgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmZtb24uaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDc3Mzc1YTUuLjI3NjUxMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqIE5vdGU6IEFib3ZlIGxpc3Qgb2YgY29weXJpZ2h0IGhvbGRlcnMgaXMgaW5jb21wbGV0ZS4uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTU2OCw3ICs1NjcsNyBAQAogCiB2b2lkCiBwY2liaW9zX2FsaWduX3Jlc291cmNlICh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCisJCSAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKaW5kZXggZTk1MmVmNC4uMjdkZWU0NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3NuL25vZGVwZGEuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaHViZXJyb3IuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaHViZXJyb3IuYwppbmRleCA1NmFiNmJhLi45NmZiODFlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2h1YmVycm9yLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9odWJlcnJvci5jCkBAIC0xNzgsNyArMTc4LDcgQEAKICAqLwogdm9pZCBodWJfZXJyb3JfaW5pdChzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmRldl9pbmZvKQogewotCWlmIChyZXF1ZXN0X2lycShTR0lfSUlfRVJST1IsICh2b2lkICopaHViX2VpbnRfaGFuZGxlciwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKFNHSV9JSV9FUlJPUiwgKHZvaWQgKilodWJfZWludF9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKIAkJCSJTTl9odWJfZXJyb3IiLCAodm9pZCAqKWh1YmRldl9pbmZvKSkKIAkJcHJpbnRrKCJodWJfZXJyb3JfaW5pdDogRmFpbGVkIHRvIHJlcXVlc3RfaXJxIGZvciAweCVwXG4iLAogCQkgICAgaHViZGV2X2luZm8pOwpAQCAtMTk2LDcgKzE5Niw3IEBACiB2b2lkIGljZV9lcnJvcl9pbml0KHN0cnVjdCBodWJkZXZfaW5mbyAqaHViZGV2X2luZm8pCiB7CiAgICAgICAgIGlmIChyZXF1ZXN0X2lycQotICAgICAgICAgICAgKFNHSV9USU9fRVJST1IsICh2b2lkICopaHViX2VpbnRfaGFuZGxlciwgU0FfU0hJUlEsICJTTl9USU9fZXJyb3IiLAorICAgICAgICAgICAgKFNHSV9USU9fRVJST1IsICh2b2lkICopaHViX2VpbnRfaGFuZGxlciwgSVJRRl9TSEFSRUQsICJTTl9USU9fZXJyb3IiLAogICAgICAgICAgICAgICh2b2lkICopaHViZGV2X2luZm8pKQogICAgICAgICAgICAgICAgIHByaW50aygiaWNlX2Vycm9yX2luaXQ6IHJlcXVlc3RfaXJxKCkgZXJyb3IgaHViZGV2X2luZm8gMHglcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgaHViZGV2X2luZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKaW5kZXggNjc3YzZjMC4uN2JiNmFkMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCkBAIC0yMjUsOCArMjI1LDggQEAKIAlpYTY0X2xhc3RfZGV2aWNlX3ZlY3RvciA9IElBNjRfU04yX0xBU1RfREVWSUNFX1ZFQ1RPUjsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJaWYgKGJhc2VfZGVzY1tpXS5oYW5kbGVyID09ICZub19pcnFfdHlwZSkgewotCQkJYmFzZV9kZXNjW2ldLmhhbmRsZXIgPSAmaXJxX3R5cGVfc247CisJCWlmIChiYXNlX2Rlc2NbaV0uY2hpcCA9PSAmbm9faXJxX3R5cGUpIHsKKwkJCWJhc2VfZGVzY1tpXS5jaGlwID0gJmlycV90eXBlX3NuOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IDkzNTc3YWIuLmRkNmJjZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMS0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC00NTgsNyArNDU3LDcgQEAKIAkgKiBzdXBwb3J0IGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBsaXN0ZW4gdG8gZmFpbGVkIGtleWJvYXJkIHByb2JlCiAJICogbWVzc2FnZXMuCiAJICovCi0JaWYgKHZlcnNpb24gPD0gMHgwMjA5ICYmIGFjcGlfa2JkX2NvbnRyb2xsZXJfcHJlc2VudCkgeworCWlmIChpc19zaHViMSgpICYmIHZlcnNpb24gPD0gMHgwMjA5ICYmIGFjcGlfa2JkX2NvbnRyb2xsZXJfcHJlc2VudCkgewogCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgbGVnYWN5IGtleWJvYXJkIHN1cHBvcnQgYXMgcHJvbSAiCiAJCSAgICAgICAiaXMgdG9vIG9sZCBhbmQgZG9lc24ndCBwcm92aWRlIEZBRFRcbiIpOwogCQlhY3BpX2tiZF9jb250cm9sbGVyX3ByZXNlbnQgPSAwOwpAQCAtNTc3LDcgKzU3Niw4IEBACiAJaW50IGk7CiAJc3RhdGljIGludCB3YXJzX2hhdmVfYmVlbl9jaGVja2VkOwogCi0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwICYmIElTX01FRFVTQSgpKSB7CisJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGNwdWlkID09IDAgJiYgSVNfTUVEVVNBKCkpIHsKIAkJaWYgKGlhNjRfc25faXNfZmFrZV9wcm9tKCkpCiAJCQlzbl9wcm9tX3R5cGUgPSAyOwogCQllbHNlCkBAIC01OTcsNiArNTk3LDEyIEBACiAJc25faHViX2luZm8tPmFzX3NoaWZ0ID0gc25faHViX2luZm8tPm5hc2lkX3NoaWZ0IC0gMjsKIAogCS8qCisJICogRG9uJ3QgY2hlY2sgc3RhdHVzLiBUaGUgU0FMIGNhbGwgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgUFJPTXMKKwkgKiBidXQgYSBmYWlsdXJlIGlzIGhhcm1sZXNzLgorCSAqLworCSh2b2lkKSBpYTY0X3NuX3NldF9jcHVfbnVtYmVyKGNwdWlkKTsKKworCS8qCiAJICogVGhlIGJvb3QgY3B1IG1ha2VzIHRoaXMgY2FsbCBhZ2FpbiBhZnRlciBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBpcwogCSAqIGNvbXBsZXRlLgogCSAqLwpAQCAtNjA3LDcgKzYxMyw2IEBACiAJCWlmIChpYTY0X3NuX2dldF9wcm9tX2ZlYXR1cmVfc2V0KGksICZzbl9wcm9tX2ZlYXR1cmVzW2ldKSAhPSAwKQogCQkJYnJlYWs7CiAKLQljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAljcHVwaHlpZCA9IGdldF9zYXBpY2lkKCk7CiAKIAlpZiAoaWE2NF9zbl9nZXRfc2FwaWNfaW5mbyhjcHVwaHlpZCwgJm5hc2lkLCAmc3Vibm9kZSwgJnNsaWNlKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3Byb21pbmZvX3Byb2MuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3Byb21pbmZvX3Byb2MuYwppbmRleCA2YWUyNzZkLi40ZGNjZTNkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9wcm9taW5mb19wcm9jLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvcHJvbWluZm9fcHJvYy5jCkBAIC04LDcgKzgsNiBAQAogICogTW9kdWxlIHRvIGV4cG9ydCB0aGUgc3lzdGVtJ3MgRmlybXdhcmUgSW50ZXJmYWNlIFRhYmxlcywgaW5jbHVkaW5nCiAgKiBQUk9NIHJldmlzaW9uIG51bWJlcnMgYW5kIGJhbm5lcnMsIGluIC9wcm9jCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25fcHJvY19mcy5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25fcHJvY19mcy5jCmluZGV4IDUxMDAyNjEuLjQzZGRjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX3Byb2NfZnMuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9wcm9jX2ZzLmMKQEAgLTUsNyArNSw2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwppbmRleCA4MjU1YTliLi5jMmY2OWY3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwYXJ0LT5jaGFubmVsX21ncl93cSk7CiAKIAlzcHJpbnRmKHBhcnQtPklQSV9vd25lciwgInhwYyUwMmQiLCBwYXJ0aWQpOwotCXJldCA9IHJlcXVlc3RfaXJxKFNHSV9YUENfTk9USUZZLCB4cGNfbm90aWZ5X0lSUV9oYW5kbGVyLCBTQV9TSElSUSwKKwlyZXQgPSByZXF1ZXN0X2lycShTR0lfWFBDX05PVElGWSwgeHBjX25vdGlmeV9JUlFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCiAJCQkJcGFydC0+SVBJX293bmVyLCAodm9pZCAqKSAodTY0KSBwYXJ0aWQpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKHhwY19jaGFuLCAiY2FuJ3QgcmVnaXN0ZXIgTk9USUZZIElSUSBoYW5kbGVyLCAiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwbmV0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwbmV0LmMKaW5kZXggZTVjNmQzYy4uMDA3NzAzYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cG5ldC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBuZXQuYwpAQCAtMjIsNyArMjIsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jCmluZGV4IGFiMTIxMWUuLjgzOGM5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCSAqIHJlZ2lzdGVyIHRoZSBicmlkZ2UncyBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcgogCSAqLwogCWlmIChyZXF1ZXN0X2lycShTR0lfUENJQVNJQ19FUlJPUiwgKHZvaWQgKilwY2licl9lcnJvcl9pbnRyX2hhbmRsZXIsCi0JCQlTQV9TSElSUSwgIlBDSUJSIGVycm9yIiwgKHZvaWQgKikoc29mdCkpKSB7CisJCQlJUlFGX1NIQVJFRCwgIlBDSUJSIGVycm9yIiwgKHZvaWQgKikoc29mdCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJwY2liciBjYW5ub3QgYWxsb2NhdGUgaW50ZXJydXB0IGZvciBlcnJvciBoYW5kbGVyXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKaW5kZXggMjBkZTcyNy4uYzM2YjBmNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAKIAkvKiBzYW5pdHkgY2hlY2sgcHJvbSByZXYgKi8KIAotCWlmIChzbl9zYWxfcmV2KCkgPCAweDA0MDYpIHsKKwlpZiAoaXNfc2h1YjEoKSAmJiBzbl9zYWxfcmV2KCkgPCAweDA0MDYpIHsKIAkJcHJpbnRrCiAJCSAgICAoS0VSTl9FUlIgIiVzOiAgU0dJIHByb20gcmV2IDQuMDYgb3IgZ3JlYXRlciByZXF1aXJlZCAiCiAJCSAgICAgImZvciB0aW9jYSBzdXBwb3J0XG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNjQ2LDcgKzY0Niw3IEBACiAKIAlpZiAocmVxdWVzdF9pcnEoU0dJX1RJT0NBX0VSUk9SLAogCQkJdGlvY2FfZXJyb3JfaW50cl9oYW5kbGVyLAotCQkJU0FfU0hJUlEsICJUSU9DQSBlcnJvciIsICh2b2lkICopdGlvY2FfY29tbW9uKSkKKwkJCUlSUUZfU0hBUkVELCAiVElPQ0EgZXJyb3IiLCAodm9pZCAqKXRpb2NhX2NvbW1vbikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICIlczogIFVuYWJsZSB0byBnZXQgaXJxICVkLiAgIgogCQkgICAgICAgIkVycm9yIGludGVycnVwdHMgd29uJ3QgYmUgcm91dGVkIGZvciBUSU9DQSBidXMgJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKaW5kZXggMmQ3OTQ4NS4uMTdjZDM0MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAogCWlmIChyZXF1ZXN0X2lycShTR0lfUENJQVNJQ19FUlJPUiwKIAkJCXRpb2NlX2Vycm9yX2ludHJfaGFuZGxlciwKLQkJCVNBX1NISVJRLCAiVElPQ0UgZXJyb3IiLCAodm9pZCAqKXRpb2NlX2NvbW1vbikpCisJCQlJUlFGX1NIQVJFRCwgIlRJT0NFIGVycm9yIiwgKHZvaWQgKil0aW9jZV9jb21tb24pKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6ICBVbmFibGUgdG8gZ2V0IGlycSAlZC4gICIKIAkJICAgICAgICJFcnJvciBpbnRlcnJ1cHRzIHdvbid0IGJlIHJvdXRlZCBmb3IgIgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCAyMzRkOGIxLi45NWEwNTYzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtNyw3ICs3LDYgQEAKICAqLwogCiAJLnRleHQKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL20zMnJfc2lvLmMgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL20zMnJfc2lvLmMKaW5kZXggOGY5YTU3Mi4uYmNlOGFmNSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9tMzJyX3Npby5jCisrKyBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbTMycl9zaW8uYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA3MGZhNzk5Li42MDBkNDBlIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTIsNyArMTIsNiBAQAogICogCQlUaGlzIGlzIGJhc2VkIG9uIGFyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKaW5kZXggYTE4NDMxNy4uZGQxMTk2MyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogT1VUUFVUX0FSQ0gobTMycikKIEVOVFJZKHN0YXJ0dXApCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvYm9vdC9zZXR1cC5TIGIvYXJjaC9tMzJyL2Jvb3Qvc2V0dXAuUwppbmRleCAzOTg1NDI1Li5lZjg0M2Q2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvYm9vdC9zZXR1cC5TCisrKyBiL2FyY2gvbTMyci9ib290L3NldHVwLlMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvbTMyci9rZXJuZWwvYWxpZ24uYwppbmRleCA0OGVjMjk3Li5hYjg3MWNjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9hbGlnbi5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDAzIEhpdG9zaGkgWWFtYW1vdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwppbmRleCA5MjBiYjc0Li5hYzZkODQwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCkBAIC01NCw3ICs1NCw2IEBACiAgKiAgICAgICBAKDB4NmMsc3ApIC0gb3JpZ19yMAkJZGl0dG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2hlYWQuUyBiL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TCmluZGV4IDNlODMxNzMuLjBkM2M4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TCkBAIC0xNCw3ICsxNCw2IEBACiBfX0lOSVREQVRBCiAKIAkudGV4dAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lvX20zMjEwNHV0LmMgYi9hcmNoL20zMnIva2VybmVsL2lvX20zMjEwNHV0LmMKaW5kZXggZDI2YWRhYi4uMjE4OWVjYSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tMzIxMDR1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbTMyMTA0dXQuYwpAQCAtOCw3ICs4LDYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFvdG8gU3VnYWksIEhheWF0byBGdWppd2FyYQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbTMyci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lvX20zMjcwMHV0LmMgYi9hcmNoL20zMnIva2VybmVsL2lvX20zMjcwMHV0LmMKaW5kZXggOTM5OTMyZC4uNTg5OGY0MCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tMzI3MDB1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbTMyNzAwdXQuYwpAQCAtMTEsNyArMTEsNiBAQAogICogIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaS5jCmluZGV4IGE2NjJiNTMuLjMxMzk2NzggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX21hcHBpLmMKQEAgLTcsNyArNyw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTIuYyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkyLmMKaW5kZXggZTcyZDcyNS4uZWNjNmFhOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTIuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX21hcHBpMi5jCkBAIC03LDcgKzcsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTMuYyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fbWFwcGkzLmMKaW5kZXggZWQ2ZGE5My4uYTEzYjVmNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pb19tYXBwaTMuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX21hcHBpMy5jCkBAIC03LDcgKzcsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb19vYWtzMzJyLmMgYi9hcmNoL20zMnIva2VybmVsL2lvX29ha3MzMnIuYwppbmRleCA5MTBkZDEzLi4wNjhiZjQ3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lvX29ha3MzMnIuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lvX29ha3MzMnIuYwpAQCAtNyw3ICs3LDYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0b3NoaSBZYW1hbW90bywgTWFtb3J1IFNha3VnYXdhCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaW9fb3BzcHV0LmMgYi9hcmNoL20zMnIva2VybmVsL2lvX29wc3B1dC5jCmluZGV4IGJlYzY5MjkuLmRhNmM1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fb3BzcHV0LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9pb19vcHNwdXQuYwpAQCAtMTEsNyArMTEsNiBAQAogICogIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pb191c3J2LmMgYi9hcmNoL20zMnIva2VybmVsL2lvX3VzcnYuYwppbmRleCAzOWEzNzlhZi4uYThjMGUyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fdXNydi5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaW9fdXNydi5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbTMyci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lycS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwppbmRleCBhNDYzNGIwLi4zODQxODYxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwppbmRleCBjNTAzMzBmLi44Y2JiYjBiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYworKysgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL21vZHVsZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9tb2R1bGUuYwppbmRleCBmNmE3OWEwLi44ZDQyMDU3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvbW9kdWxlLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNjVmNWU3Li40NGNiZTBjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjEsNyArMjEsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMzQwYTNiZi4uNWYwMmIzMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2VtYXBob3JlLmMKaW5kZXggOWE2ZTZkNy4uOTQwYzJkMyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKgogICogcncgc2VtYXBob3JlcyBpbXBsZW1lbnRlZCBOb3ZlbWJlciAxOTk5IGJ5IEJlbmphbWluIExhSGFpc2UgPGJjcmxAa3ZhY2sub3JnPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwLmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwLmMKaW5kZXggMWZmNDgzYy4uMGE2YzZlNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXAuYwpAQCAtNyw3ICs3LDYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tMzIxMDR1dC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tMzIxMDR1dC5jCmluZGV4IDYzMjhlMTMuLjE2OTJiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbTMyMTA0dXQuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX20zMjEwNHV0LmMKQEAgLTgsNyArOCw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hb3RvIFN1Z2FpLCBIYXlhdG8gRnVqaXdhcmEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtODcsNyArODYsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkKIAkvKiBJTlQjMDogTEFOIGNvbnRyb2xsZXIgb24gTTMyMTA0VVQtTEFOIChTTUM5MUMxMTEpKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uaGFuZGxlciA9ICZtMzIxMDR1dF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5jaGlwID0gJm0zMjEwNHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDBdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU4gfCBNMzJSX0lDVUNSX0lTTU9EMTE7IC8qICJIIiBsZXZlbCBzZW5zZSAqLwpAQCAtOTYsNyArOTUsNyBAQAogCiAJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5oYW5kbGVyID0gJm0zMjEwNHV0X2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmNoaXAgPSAmbTMyMTA0dXRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfTUZUMl0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTjsKQEAgLTEwNSw3ICsxMDQsNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfTTMyUl9TSU8KIAkvKiBTSU8wX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uaGFuZGxlciA9ICZtMzIxMDR1dF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmNoaXAgPSAmbTMyMTA0dXRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfUl0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTjsKQEAgLTExMyw3ICsxMTIsNyBAQAogCiAJLyogU0lPMF9TIDogdWFydCBzZW5kIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmhhbmRsZXIgPSAmbTMyMTA0dXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5jaGlwID0gJm0zMjEwNHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX20zMjcwMHV0LmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX20zMjcwMHV0LmMKaW5kZXggZmFkMWZjOS4uN2VmYzE0NSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tMzI3MDB1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbTMyNzAwdXQuYwpAQCAtMTEsNyArMTEsNiBAQAogICogIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzAxLDcgKzMwMCw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQogCS8qIElOVCMwOiBMQU4gY29udHJvbGxlciBvbiBNMzI3MDBVVC1MQU4gKFNNQzkxQzExMSkqLwogCWlycV9kZXNjW00zMjcwMFVUX0xBTl9JUlFfTEFOXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyNzAwVVRfTEFOX0lSUV9MQU5dLmhhbmRsZXIgPSAmbTMyNzAwdXRfbGFucGxkX2lycV90eXBlOworCWlycV9kZXNjW00zMjcwMFVUX0xBTl9JUlFfTEFOXS5jaGlwID0gJm0zMjcwMHV0X2xhbnBsZF9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzI3MDBVVF9MQU5fSVJRX0xBTl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzI3MDBVVF9MQU5fSVJRX0xBTl0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlsYW5wbGRfaWN1X2RhdGFbaXJxMmxhbnBsZGlycShNMzI3MDBVVF9MQU5fSVJRX0xBTildLmljdWNyID0gUExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSVNNT0QwMjsJLyogIkgiIGVkZ2Ugc2Vuc2UgKi8KQEAgLTMxMCw3ICszMDksNyBAQAogCiAJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5oYW5kbGVyID0gJm0zMjcwMHV0X2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmNoaXAgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfTUZUMl0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTjsKQEAgLTMxOCw3ICszMTcsNyBAQAogCiAJLyogU0lPMCA6IHJlY2VpdmUgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmhhbmRsZXIgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm0zMjcwMHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1JdLmljdWNyID0gMDsKQEAgLTMyNiw3ICszMjUsNyBAQAogCiAJLyogU0lPMCA6IHNlbmQgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmhhbmRsZXIgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5jaGlwID0gJm0zMjcwMHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gMDsKQEAgLTMzNCw3ICszMzMsNyBAQAogCiAJLyogU0lPMSA6IHJlY2VpdmUgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmhhbmRsZXIgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5jaGlwID0gJm0zMjcwMHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1JdLmljdWNyID0gMDsKQEAgLTM0Miw3ICszNDEsNyBAQAogCiAJLyogU0lPMSA6IHNlbmQgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmhhbmRsZXIgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm0zMjcwMHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKQEAgLTM1MCw3ICszNDksNyBAQAogCiAJLyogRE1BMSA6ICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0RNQTFdLmhhbmRsZXIgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uY2hpcCA9ICZtMzI3MDB1dF9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9ETUExXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0RNQTFdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9ETUExXS5pY3VjciA9IDA7CkBAIC0zNTksNyArMzU4LDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX00zMlJfUExEU0lPCiAJLyogSU5UIzE6IFNJTzAgUmVjZWl2ZSBvbiBQTEQgKi8KIAlpcnFfZGVzY1tQTERfSVJRX1NJTzBfUkNWXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uaGFuZGxlciA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uY2hpcCA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tQTERfSVJRX1NJTzBfUkNWXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfU0lPMF9SQ1YpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDM7CkBAIC0zNjcsNyArMzY2LDcgQEAKIAogCS8qIElOVCMxOiBTSU8wIFNlbmQgb24gUExEICovCiAJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1NORF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmhhbmRsZXIgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1NORF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX1NJTzBfU05EKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAzOwpAQCAtMzc2LDcgKzM3NSw3IEBACiAKIAkvKiBJTlQjMTogQ0ZDIElSRVEgb24gUExEICovCiAJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uaGFuZGxlciA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfQ0ZJUkVRKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAnTCcgbGV2ZWwgc2Vuc2UgKi8KQEAgLTM4NCw3ICszODMsNyBAQAogCiAJLyogSU5UIzE6IENGQyBJbnNlcnQgb24gUExEICovCiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5oYW5kbGVyID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRkNfSU5TRVJUKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAwOwkvKiAnTCcgZWRnZSBzZW5zZSAqLwpAQCAtMzkyLDcgKzM5MSw3IEBACiAKIAkvKiBJTlQjMTogQ0ZDIEVqZWN0IG9uIFBMRCAqLwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmhhbmRsZXIgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5jaGlwID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX0NGQ19FSkVDVCldLmljdWNyID0gUExEX0lDVUNSX0lFTnxQTERfSUNVQ1JfSVNNT0QwMjsJLyogJ0gnIGVkZ2Ugc2Vuc2UgKi8KQEAgLTQxNiw3ICs0MTUsNyBAQAogCW91dHcoVVNCQ1JfT1RHUywgVVNCQ1IpOyAJLyogVVNCQ1I6IG5vbi1PVEcgKi8KIAogICAgIGlycV9kZXNjW00zMjcwMFVUX0xDRF9JUlFfVVNCX0lOVDFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLSAgICBpcnFfZGVzY1tNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxXS5oYW5kbGVyID0gJm0zMjcwMHV0X2xjZHBsZF9pcnFfdHlwZTsKKyAgICBpcnFfZGVzY1tNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxXS5jaGlwID0gJm0zMjcwMHV0X2xjZHBsZF9pcnFfdHlwZTsKICAgICBpcnFfZGVzY1tNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxXS5hY3Rpb24gPSAwOwogICAgIGlycV9kZXNjW00zMjcwMFVUX0xDRF9JUlFfVVNCX0lOVDFdLmRlcHRoID0gMTsKICAgICBsY2RwbGRfaWN1X2RhdGFbaXJxMmxjZHBsZGlycShNMzI3MDBVVF9MQ0RfSVJRX1VTQl9JTlQxKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAiTCIgbGV2ZWwgc2Vuc2UgKi8KQEAgLTQzNCw3ICs0MzMsNyBAQAogCSAqIElOVDMjIGlzIHVzZWQgZm9yIEFSCiAJICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmhhbmRsZXIgPSAmbTMyNzAwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uY2hpcCA9ICZtMzI3MDB1dF9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQzXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkuYwppbmRleCAwMGYyNTMyLi42N2RiYmRjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaS5jCkBAIC03LDcgKzcsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTg2LDcgKzg1LDcgQEAKICNpZmRlZiBDT05GSUdfTkUyMDAwCiAJLyogSU5UMCA6IExBTiBjb250cm9sbGVyIChSVEw4MDE5QVMpICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQwXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKQEAgLTk1LDcgKzk0LDcgQEAKIAogCS8qIE1GVDIgOiBzeXN0ZW0gdGltZXIgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uaGFuZGxlciA9ICZtYXBwaV9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX01GVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CkBAIC0xMDQsNyArMTAzLDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX00zMlJfU0lPCiAJLyogU0lPMF9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1JdLmljdWNyID0gMDsKQEAgLTExMiw3ICsxMTEsNyBAQAogCiAJLyogU0lPMF9TIDogdWFydCBzZW5kIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gMDsKQEAgLTEyMCw3ICsxMTksNyBAQAogCiAJLyogU0lPMV9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1JdLmljdWNyID0gMDsKQEAgLTEyOCw3ICsxMjcsNyBAQAogCiAJLyogU0lPMV9TIDogdWFydCBzZW5kIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm1hcHBpX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKQEAgLTEzOCw3ICsxMzcsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX00zMlJfUENDKQogCS8qIElOVDEgOiBwY2NhcmQwIGludGVycnVwdCAqLwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5oYW5kbGVyID0gJm1hcHBpX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmNoaXAgPSAmbWFwcGlfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfSU5UMV0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTiB8IE0zMlJfSUNVQ1JfSVNNT0QwMDsKQEAgLTE0Niw3ICsxNDUsNyBAQAogCiAJLyogSU5UMiA6IHBjY2FyZDEgaW50ZXJydXB0ICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDJdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMl0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQyXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDJdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOIHwgTTMyUl9JQ1VDUl9JU01PRDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTIuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkyLmMKaW5kZXggZWViYzlkOC4uNTVhYmIyMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTIuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMi5jCkBAIC03LDcgKzcsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtODcsNyArODYsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkKIAkvKiBJTlQwIDogTEFOIGNvbnRyb2xsZXIgKFNNQzkxMTExKSAqLwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5oYW5kbGVyID0gJm1hcHBpMl9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQwXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQwXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKQEAgLTk2LDcgKzk1LDcgQEAKIAogCS8qIE1GVDIgOiBzeXN0ZW0gdGltZXIgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uaGFuZGxlciA9ICZtYXBwaTJfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfTUZUMl0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTjsKQEAgLTEwNSw3ICsxMDQsNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfTTMyUl9TSU8KIAkvKiBTSU8wX1IgOiB1YXJ0IHJlY2VpdmUgZGF0YSAqLwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uaGFuZGxlciA9ICZtYXBwaTJfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9SXS5pY3VjciA9IDA7CkBAIC0xMTMsMTQgKzExMiwxNCBAQAogCiAJLyogU0lPMF9TIDogdWFydCBzZW5kIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmhhbmRsZXIgPSAmbWFwcGkyX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfU10uaWN1Y3IgPSAwOwogCWRpc2FibGVfbWFwcGkyX2lycShNMzJSX0lSUV9TSU8wX1MpOwogCS8qIFNJTzFfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5oYW5kbGVyID0gJm1hcHBpMl9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmNoaXAgPSAmbWFwcGkyX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1JdLmljdWNyID0gMDsKQEAgLTEyOCw3ICsxMjcsNyBAQAogCiAJLyogU0lPMV9TIDogdWFydCBzZW5kIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmhhbmRsZXIgPSAmbWFwcGkyX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfU10uaWN1Y3IgPSAwOwpAQCAtMTM4LDcgKzEzNyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfVVNCKQogCS8qIElOVDEgOiBVU0IgSG9zdCBjb250cm9sbGVyIGludGVycnVwdCAqLwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5oYW5kbGVyID0gJm1hcHBpMl9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQxXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQxXS5pY3VjciA9IE0zMlJfSUNVQ1JfSVNNT0QwMTsKQEAgLTE0Nyw3ICsxNDYsNyBAQAogCiAJLyogSUNVQ1I0MDogQ0ZDIElSRVEgKi8KIAlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5oYW5kbGVyID0gJm1hcHBpMl9pcnFfdHlwZTsKKwlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uY2hpcCA9ICZtYXBwaTJfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJaWN1X2RhdGFbUExEX0lSUV9DRklSRVFdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAxOwpAQCAtMTU2LDcgKzE1NSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJLyogSUNVQ1I0MTogQ0ZDIEluc2VydCAqLwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uaGFuZGxlciA9ICZtYXBwaTJfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCWljdV9kYXRhW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMDA7CkBAIC0xNjQsNyArMTYzLDcgQEAKIAogCS8qIElDVUNSNDI6IENGQyBFamVjdCAqLwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmhhbmRsZXIgPSAmbWFwcGkyX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5jaGlwID0gJm1hcHBpMl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlpY3VfZGF0YVtQTERfSVJRX0NGQ19FSkVDVF0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMTA7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9tYXBwaTMuYwppbmRleCBkMmZmMDIxLi45M2RjMDEwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX21hcHBpMy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfbWFwcGkzLmMKQEAgLTcsNyArNyw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8sIE1hbW9ydSBTYWt1Z2F3YQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC04Nyw3ICs4Niw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQogCS8qIElOVDAgOiBMQU4gY29udHJvbGxlciAoU01DOTExMTEpICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDBdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMF0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDBdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOwpAQCAtOTYsNyArOTUsNyBAQAogCiAJLyogTUZUMiA6IHN5c3RlbSB0aW1lciAqLwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5oYW5kbGVyID0gJm1hcHBpM19pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwpAQCAtMTA1LDcgKzEwNCw3IEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1NJTwogCS8qIFNJTzBfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5oYW5kbGVyID0gJm1hcHBpM19pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1JdLmljdWNyID0gMDsKQEAgLTExMywxNCArMTEyLDE0IEBACiAKIAkvKiBTSU8wX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9TXS5pY3VjciA9IDA7CiAJZGlzYWJsZV9tYXBwaTNfaXJxKE0zMlJfSVJRX1NJTzBfUyk7CiAJLyogU0lPMV9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uY2hpcCA9ICZtYXBwaTNfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfUl0uaWN1Y3IgPSAwOwpAQCAtMTI4LDcgKzEyNyw3IEBACiAKIAkvKiBTSU8xX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9TXS5pY3VjciA9IDA7CkBAIC0xMzgsNyArMTM3LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19VU0IpCiAJLyogSU5UMSA6IFVTQiBIb3N0IGNvbnRyb2xsZXIgaW50ZXJydXB0ICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmNoaXAgPSAmbWFwcGkzX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDFdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UMV0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDFdLmljdWNyID0gTTMyUl9JQ1VDUl9JU01PRDAxOwpAQCAtMTQ3LDcgKzE0Niw3IEBACiAKIAkvKiBDRkMgSVJFUSAqLwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKIAlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlpY3VfZGF0YVtQTERfSVJRX0NGSVJFUV0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMDE7CkBAIC0xNTYsNyArMTU1LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKIAkvKiBJQ1VDUjQxOiBDRkMgSW5zZXJ0ICYgZWplY3QgKi8KIAlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19JTlNFUlRdLmhhbmRsZXIgPSAmbWFwcGkzX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uY2hpcCA9ICZtYXBwaTNfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlpY3VfZGF0YVtQTERfSVJRX0NGQ19JTlNFUlRdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDAwOwpAQCAtMTY2LDcgKzE2NSw3IEBACiAKIAkvKiBJREUgSVJFUSAqLwogCWlycV9kZXNjW1BMRF9JUlFfSURFSVJFUV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfSURFSVJFUV0uaGFuZGxlciA9ICZtYXBwaTNfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9JREVJUkVRXS5jaGlwID0gJm1hcHBpM19pcnFfdHlwZTsKIAlpcnFfZGVzY1tQTERfSVJRX0lERUlSRVFdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9JREVJUkVRXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCWljdV9kYXRhW1BMRF9JUlFfSURFSVJFUV0uaWN1Y3IgPSBNMzJSX0lDVUNSX0lFTnxNMzJSX0lDVUNSX0lTTU9EMTA7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29ha3MzMnIuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb2FrczMyci5jCmluZGV4IDBlOWU2MzUuLmNkNjI1OTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb2FrczMyci5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb2FrczMyci5jCkBAIC03LDcgKzcsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRvc2hpIFlhbWFtb3RvLCBNYW1vcnUgU2FrdWdhd2EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtODUsNyArODQsNyBAQAogI2lmZGVmIENPTkZJR19ORTIwMDAKIAkvKiBJTlQzIDogTEFOIGNvbnRyb2xsZXIgKFJUTDgwMTlBUykgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uaGFuZGxlciA9ICZvYWtzMzJyX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmNoaXAgPSAmb2FrczMycl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9JTlQzXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9JTlQzXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOfE0zMlJfSUNVQ1JfSVNNT0QxMDsKQEAgLTk0LDcgKzkzLDcgQEAKIAogCS8qIE1GVDIgOiBzeXN0ZW0gdGltZXIgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uaGFuZGxlciA9ICZvYWtzMzJyX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmNoaXAgPSAmb2FrczMycl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwpAQCAtMTAzLDcgKzEwMiw3IEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9NMzJSX1NJTwogCS8qIFNJTzBfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5oYW5kbGVyID0gJm9ha3MzMnJfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5jaGlwID0gJm9ha3MzMnJfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfUl0uaWN1Y3IgPSAwOwpAQCAtMTExLDcgKzExMCw3IEBACiAKIAkvKiBTSU8wX1MgOiB1YXJ0IHNlbmQgZGF0YSAqLwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uaGFuZGxlciA9ICZvYWtzMzJyX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZvYWtzMzJyX2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1NdLmljdWNyID0gMDsKQEAgLTExOSw3ICsxMTgsNyBAQAogCiAJLyogU0lPMV9SIDogdWFydCByZWNlaXZlIGRhdGEgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmhhbmRsZXIgPSAmb2FrczMycl9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmNoaXAgPSAmb2FrczMycl9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9SXS5pY3VjciA9IDA7CkBAIC0xMjcsNyArMTI2LDcgQEAKIAogCS8qIFNJTzFfUyA6IHVhcnQgc2VuZCBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5oYW5kbGVyID0gJm9ha3MzMnJfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5jaGlwID0gJm9ha3MzMnJfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzFfU10uaWN1Y3IgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vcHNwdXQuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb3BzcHV0LmMKaW5kZXggNTQ4ZThmYy4uNjFkM2IwMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vcHNwdXQuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX29wc3B1dC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMDIsNyArMzAxLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpCiAJLyogSU5UIzA6IExBTiBjb250cm9sbGVyIG9uIE9QU1BVVC1MQU4gKFNNQzkxQzExMSkqLwogCWlycV9kZXNjW09QU1BVVF9MQU5fSVJRX0xBTl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW09QU1BVVF9MQU5fSVJRX0xBTl0uaGFuZGxlciA9ICZvcHNwdXRfbGFucGxkX2lycV90eXBlOworCWlycV9kZXNjW09QU1BVVF9MQU5fSVJRX0xBTl0uY2hpcCA9ICZvcHNwdXRfbGFucGxkX2lycV90eXBlOwogCWlycV9kZXNjW09QU1BVVF9MQU5fSVJRX0xBTl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tPUFNQVVRfTEFOX0lSUV9MQU5dLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJbGFucGxkX2ljdV9kYXRhW2lycTJsYW5wbGRpcnEoT1BTUFVUX0xBTl9JUlFfTEFOKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAyOwkvKiAiSCIgZWRnZSBzZW5zZSAqLwpAQCAtMzExLDcgKzMxMCw3IEBACiAKIAkvKiBNRlQyIDogc3lzdGVtIHRpbWVyICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmhhbmRsZXIgPSAmb3BzcHV0X2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX01GVDJdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU47CkBAIC0zMTksNyArMzE4LDcgQEAKIAogCS8qIFNJTzAgOiByZWNlaXZlICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5oYW5kbGVyID0gJm9wc3B1dF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8wX1JdLmljdWNyID0gMDsKQEAgLTMyNyw3ICszMjYsNyBAQAogCiAJLyogU0lPMCA6IHNlbmQgKi8KIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmhhbmRsZXIgPSAmb3BzcHV0X2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZvcHNwdXRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX1NJTzBfU10uaWN1Y3IgPSAwOwpAQCAtMzM1LDcgKzMzNCw3IEBACiAKIAkvKiBTSU8xIDogcmVjZWl2ZSAqLwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uaGFuZGxlciA9ICZvcHNwdXRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5jaGlwID0gJm9wc3B1dF9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9SXS5pY3VjciA9IDA7CkBAIC0zNDMsNyArMzQyLDcgQEAKIAogCS8qIFNJTzEgOiBzZW5kICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5oYW5kbGVyID0gJm9wc3B1dF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9TSU8xX1NdLmljdWNyID0gMDsKQEAgLTM1MSw3ICszNTAsNyBAQAogCiAJLyogRE1BMSA6ICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0RNQTFdLmhhbmRsZXIgPSAmb3BzcHV0X2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0RNQTFdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX0RNQTFdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfRE1BMV0uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX0RNQTFdLmljdWNyID0gMDsKQEAgLTM2MCw3ICszNTksNyBAQAogI2lmZGVmIENPTkZJR19TRVJJQUxfTTMyUl9QTERTSU8KIAkvKiBJTlQjMTogU0lPMCBSZWNlaXZlIG9uIFBMRCAqLwogCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9SQ1ZdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX1NJTzBfUkNWXS5oYW5kbGVyID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uY2hpcCA9ICZvcHNwdXRfcGxkX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9SQ1ZdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1JDVl0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX1NJTzBfUkNWKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAzOwpAQCAtMzY4LDcgKzM2Nyw3IEBACiAKIAkvKiBJTlQjMTogU0lPMCBTZW5kIG9uIFBMRCAqLwogCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX1NJTzBfU05EXS5oYW5kbGVyID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1NORF0uY2hpcCA9ICZvcHNwdXRfcGxkX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfU0lPMF9TTkRdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9TSU8wX1NORF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX1NJTzBfU05EKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAzOwpAQCAtMzc4LDcgKzM3Nyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJLyogSU5UIzE6IENGQyBJUkVRIG9uIFBMRCAqLwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLmhhbmRsZXIgPSAmb3BzcHV0X3BsZF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uY2hpcCA9ICZvcHNwdXRfcGxkX2lycV90eXBlOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZJUkVRXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfQ0ZJUkVRKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAnTCcgbGV2ZWwgc2Vuc2UgKi8KQEAgLTM4Niw3ICszODUsNyBAQAogCiAJLyogSU5UIzE6IENGQyBJbnNlcnQgb24gUExEICovCiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5oYW5kbGVyID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5jaGlwID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfSU5TRVJUXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0lOU0VSVF0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAlwbGRfaWN1X2RhdGFbaXJxMnBsZGlycShQTERfSVJRX0NGQ19JTlNFUlQpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDA7CS8qICdMJyBlZGdlIHNlbnNlICovCkBAIC0zOTQsNyArMzkzLDcgQEAKIAogCS8qIElOVCMxOiBDRkMgRWplY3Qgb24gUExEICovCiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX0NGQ19FSkVDVF0uaGFuZGxlciA9ICZvcHNwdXRfcGxkX2lycV90eXBlOworCWlycV9kZXNjW1BMRF9JUlFfQ0ZDX0VKRUNUXS5jaGlwID0gJm9wc3B1dF9wbGRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRkNfRUpFQ1QpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDI7CS8qICdIJyBlZGdlIHNlbnNlICovCkBAIC00MjAsNyArNDE5LDcgQEAKIAlvdXR3KFVTQkNSX09UR1MsIFVTQkNSKTsgCS8qIFVTQkNSOiBub24tT1RHICovCiAKICAgICBpcnFfZGVzY1tPUFNQVVRfTENEX0lSUV9VU0JfSU5UMV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotICAgIGlycV9kZXNjW09QU1BVVF9MQ0RfSVJRX1VTQl9JTlQxXS5oYW5kbGVyID0gJm9wc3B1dF9sY2RwbGRfaXJxX3R5cGU7CisgICAgaXJxX2Rlc2NbT1BTUFVUX0xDRF9JUlFfVVNCX0lOVDFdLmNoaXAgPSAmb3BzcHV0X2xjZHBsZF9pcnFfdHlwZTsKICAgICBpcnFfZGVzY1tPUFNQVVRfTENEX0lSUV9VU0JfSU5UMV0uYWN0aW9uID0gMDsKICAgICBpcnFfZGVzY1tPUFNQVVRfTENEX0lSUV9VU0JfSU5UMV0uZGVwdGggPSAxOwogICAgIGxjZHBsZF9pY3VfZGF0YVtpcnEybGNkcGxkaXJxKE9QU1BVVF9MQ0RfSVJRX1VTQl9JTlQxKV0uaWN1Y3IgPSBQTERfSUNVQ1JfSUVOfFBMRF9JQ1VDUl9JU01PRDAxOwkvKiAiTCIgbGV2ZWwgc2Vuc2UgKi8KQEAgLTQzOCw3ICs0MzcsNyBAQAogCSAqIElOVDMjIGlzIHVzZWQgZm9yIEFSCiAJICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmhhbmRsZXIgPSAmb3BzcHV0X2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmNoaXAgPSAmb3BzcHV0X2lycV90eXBlOwogCWlycV9kZXNjW00zMlJfSVJRX0lOVDNdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfSU5UM10uZGVwdGggPSAxOwogCWljdV9kYXRhW00zMlJfSVJRX0lOVDNdLmljdWNyID0gTTMyUl9JQ1VDUl9JRU58TTMyUl9JQ1VDUl9JU01PRDEwOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF91c3J2LmMgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX3VzcnYuYwppbmRleCA2NGJlNjU5Li5mNWI0YjVhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX3VzcnYuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NldHVwX3VzcnYuYwpAQCAtNyw3ICs3LDYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdG9zaGkgWWFtYW1vdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTU4LDcgKzE1Nyw3IEBACiAKIAkvKiBNRlQyIDogc3lzdGVtIHRpbWVyICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmhhbmRsZXIgPSAmbWFwcGlfaXJxX3R5cGU7CisJaXJxX2Rlc2NbTTMyUl9JUlFfTUZUMl0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9NRlQyXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW00zMlJfSVJRX01GVDJdLmRlcHRoID0gMTsKIAlpY3VfZGF0YVtNMzJSX0lSUV9NRlQyXS5pY3VjciA9IE0zMlJfSUNVQ1JfSUVOOwpAQCAtMTY3LDcgKzE2Niw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX00zMlJfU0lPKQogCS8qIFNJTzBfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5oYW5kbGVyID0gJm1hcHBpX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfUl0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1JdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9SXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9SXS5pY3VjciA9IDA7CkBAIC0xNzUsNyArMTc0LDcgQEAKIAogCS8qIFNJTzBfUyA6IHVhcnQgc2VuZCBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5oYW5kbGVyID0gJm1hcHBpX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzBfU10uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8wX1NdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMF9TXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMF9TXS5pY3VjciA9IDA7CkBAIC0xODMsNyArMTgyLDcgQEAKIAogCS8qIFNJTzFfUiA6IHVhcnQgcmVjZWl2ZSBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5oYW5kbGVyID0gJm1hcHBpX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfUl0uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1JdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9SXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9SXS5pY3VjciA9IDA7CkBAIC0xOTEsNyArMTkwLDcgQEAKIAogCS8qIFNJTzFfUyA6IHVhcnQgc2VuZCBkYXRhICovCiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5oYW5kbGVyID0gJm1hcHBpX2lycV90eXBlOworCWlycV9kZXNjW00zMlJfSVJRX1NJTzFfU10uY2hpcCA9ICZtYXBwaV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tNMzJSX0lSUV9TSU8xX1NdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbTTMyUl9JUlFfU0lPMV9TXS5kZXB0aCA9IDE7CiAJaWN1X2RhdGFbTTMyUl9JUlFfU0lPMV9TXS5pY3VjciA9IDA7CkBAIC0yMDEsNyArMjAwLDcgQEAKIAkvKiBJTlQjNjctIzcxOiBDRkMjMCBJUkVRIG9uIFBMRCAqLwogCWZvciAoaSA9IDAgOyBpIDwgQ09ORklHX0NGQ19OVU0gOyBpKysgKSB7CiAJCWlycV9kZXNjW1BMRF9JUlFfQ0YwICsgaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tQTERfSVJRX0NGMCArIGldLmhhbmRsZXIgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOworCQlpcnFfZGVzY1tQTERfSVJRX0NGMCArIGldLmNoaXAgPSAmbTMyNzAwdXRfcGxkX2lycV90eXBlOwogCQlpcnFfZGVzY1tQTERfSVJRX0NGMCArIGldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW1BMRF9JUlFfQ0YwICsgaV0uZGVwdGggPSAxOwkvKiBkaXNhYmxlIG5lc3RlZCBpcnEgKi8KIAkJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRjAgKyBpKV0uaWN1Y3IKQEAgLTIxMiw3ICsyMTEsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCiAJLyogSU5UIzc2OiAxNjU1MkQjMCBJUkVRIG9uIFBMRCAqLwogCWlycV9kZXNjW1BMRF9JUlFfVUFSVDBdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLQlpcnFfZGVzY1tQTERfSVJRX1VBUlQwXS5oYW5kbGVyID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tQTERfSVJRX1VBUlQwXS5jaGlwID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKIAlpcnFfZGVzY1tQTERfSVJRX1VBUlQwXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjW1BMRF9JUlFfVUFSVDBdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9VQVJUMCldLmljdWNyCkBAIC0yMjEsNyArMjIwLDcgQEAKIAogCS8qIElOVCM3NzogMTY1NTJEIzEgSVJFUSBvbiBQTEQgKi8KIAlpcnFfZGVzY1tQTERfSVJRX1VBUlQxXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JaXJxX2Rlc2NbUExEX0lSUV9VQVJUMV0uaGFuZGxlciA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7CisJaXJxX2Rlc2NbUExEX0lSUV9VQVJUMV0uY2hpcCA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9VQVJUMV0uYWN0aW9uID0gMDsKIAlpcnFfZGVzY1tQTERfSVJRX1VBUlQxXS5kZXB0aCA9IDE7CS8qIGRpc2FibGUgbmVzdGVkIGlycSAqLwogCXBsZF9pY3VfZGF0YVtpcnEycGxkaXJxKFBMRF9JUlFfVUFSVDEpXS5pY3VjcgpAQCAtMjMyLDcgKzIzMSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSURDX0FLNDUyNCkgfHwgZGVmaW5lZChDT05GSUdfSURDX0FLNDUyNF9NT0RVTEUpCiAJLyogSU5UIzgwOiBBSzQ1MjQgSVJFUSBvbiBQTEQgKi8KIAlpcnFfZGVzY1tQTERfSVJRX1NORElOVF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCWlycV9kZXNjW1BMRF9JUlFfU05ESU5UXS5oYW5kbGVyID0gJm0zMjcwMHV0X3BsZF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tQTERfSVJRX1NORElOVF0uY2hpcCA9ICZtMzI3MDB1dF9wbGRfaXJxX3R5cGU7CiAJaXJxX2Rlc2NbUExEX0lSUV9TTkRJTlRdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbUExEX0lSUV9TTkRJTlRdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9TTkRJTlQpXS5pY3VjcgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNjQ5OGVlNy4uYTkxNzRlZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgMjAwMC0wNi0yMCAgUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQgYnkgR2FyZXRoIEh1Z2hlcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDg0MGI0MzQuLmZhNzg2NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCkBAIC00MCw3ICs0MCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zeXNfbTMyci5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zeXNfbTMyci5jCmluZGV4IDY3MGNiNDkuLmE5Y2VhMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYworKysgYi9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMKQEAgLTcsNyArNyw2IEBACiAgKiBUYWtlbiBmcm9tIGkzODYgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCmluZGV4IGI4ZTY4YjUuLmRlZDBiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAKICN1bmRlZiAgREVCVUdfVElNRVIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjM4LDcgKzIzNyw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7IHRpbWVyX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCBDUFVfTUFTS19OT05FLAorc3RydWN0IGlycWFjdGlvbiBpcnEwID0geyB0aW1lcl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIENQVV9NQVNLX05PTkUsCiAJCQkgICJNRlQyIiwgTlVMTCwgTlVMTCB9OwogCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYwppbmRleCA1ZmU4ZWQ2Li5jMWRhZjJjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCkBAIC05LDcgKzksNiBAQAogICogJ3RyYXBzLmMnIGhhbmRsZXMgaGFyZHdhcmUgdHJhcHMgYW5kIGZhdWx0cyBhZnRlciB3ZSBoYXZlIHNhdmVkIHNvbWUKICAqIHN0YXRlIGluICdlbnRyeS5TJy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDcyOWEyNjQuLjEzYzdiYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsNyArMSw2IEBACiAvKiBsZCBzY3JpcHQgdG8gbWFrZSBNMzJSIExpbnV4IGtlcm5lbAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9hc2h4ZGkzLlMgYi9hcmNoL20zMnIvbGliL2FzaHhkaTMuUwppbmRleCA3OGVmZmNhLi4xMDc1OTRiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL2FzaHhkaTMuUworKysgYi9hcmNoL20zMnIvbGliL2FzaHhkaTMuUwpAQCAtNiw3ICs2LDYgQEAKICAqLwogLyogJElkJCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIDsKIDsgICAgICBpbnB1dCAgIChyMCxyMSkgIHNyYwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9jaGVja3N1bS5TIGIvYXJjaC9tMzJyL2xpYi9jaGVja3N1bS5TCmluZGV4IGY2ZmMxYmQuLmNmYmUwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9saWIvY2hlY2tzdW0uUworKysgYi9hcmNoL20zMnIvbGliL2NoZWNrc3VtLlMKQEAgLTI4LDcgKzI4LDYgQEAKIC8qICRJZCQgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvZGVsYXkuYyBiL2FyY2gvbTMyci9saWIvZGVsYXkuYwppbmRleCBmYjI5NjMyLi4wNjM4MmEzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9tMzJyL2xpYi9kZWxheS5jCkBAIC03LDcgKzcsNiBAQAogCiAvKiAkSWQkICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2lmZGVmIENPTkZJR19TTVAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9tZW1jcHkuUyBiL2FyY2gvbTMyci9saWIvbWVtY3B5LlMKaW5kZXggODAwODk4YS4uMjA4OWEyMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi9tZW1jcHkuUworKysgYi9hcmNoL20zMnIvbGliL21lbWNweS5TCkBAIC0xNCw3ICsxNCw2IEBACiAKIAogCS50ZXh0Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9tZW1zZXQuUyBiL2FyY2gvbTMyci9saWIvbWVtc2V0LlMKaW5kZXggNmUyNmRmMS4uYjQ3ZmEzNSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi9tZW1zZXQuUworKysgYi9hcmNoL20zMnIvbGliL21lbXNldC5TCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIC8qICRJZCQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAJLnRleHQKIAkuZ2xvYmFsCW1lbXNldApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9zdHJsZW4uUyBiL2FyY2gvbTMyci9saWIvc3RybGVuLlMKaW5kZXggOGQyM2NmYi4uNWY0MWFhYyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi9zdHJsZW4uUworKysgYi9hcmNoL20zMnIvbGliL3N0cmxlbi5TCkBAIC05LDcgKzksNiBAQAogLyogJElkJCAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMgYi9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMKaW5kZXggMmQxZGQyMS4uODk2Y2VmMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi91c2VyY29weS5jCisrKyBiL2FyY2gvbTMyci9saWIvdXNlcmNvcHkuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAxOTk3IExpbnVzIFRvcnZhbGRzCiAgKiBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNCBIaXJva2F6dSBUYWthdGEKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9jYWNoZS5jIGIvYXJjaC9tMzJyL21tL2NhY2hlLmMKaW5kZXggOWY1NGRkOS4uZmFjNzU5NSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2NhY2hlLmMKKysrIGIvYXJjaC9tMzJyL21tL2NhY2hlLmMKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgIEhpcm9rYXp1IFRha2F0YSwgSGF5YXRvIEZ1aml3YXJhCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICN1bmRlZiBNQ0NSCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKaW5kZXggY2Y2MTBhNy4uYWJiMzRjYyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYwpAQCAtNiw3ICs2LDYgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMDMgIEhpdG9zaGkgWWFtYW1vdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYyBiL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jCmluZGV4IGQ5ZDQ4OGQuLjAzZmM0YzggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jCisrKyBiL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jCkBAIC05LDcgKzksNiBAQAogCiAvKiAkSWQ6IGZhdWx0LW5vbW11LmMsdiAxLjEgMjAwNC8wMy8zMCAwNjo0MDo1OSBzYWt1Z2F3YSBFeHAgJCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKaW5kZXggYmY3ZmI1OC4uZGMxOGEzMyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKQEAgLTgsNyArOCw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNDgsNyArMTQ3LDcgQEAKIAkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KIAkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbiB0aGUKIAkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGx5LCBpbiB0aGUgY2FzZSBvZiBhbgotCSAqIGVycm9uZW91cyBmYXVsdCBvY2N1cmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCisJICogZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCiAJICogd2Ugd2lsbCBkZWFkbG9jayBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdCBhZ2FpbnN0IHRoZQogCSAqIGFkZHJlc3Mgc3BhY2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5IHJlZmVyZW5jZXMgdXNlcgogCSAqIHNwYWNlIGZyb20gd2VsbCBkZWZpbmVkIGFyZWFzIG9mIGNvZGUsIHdoaWNoIGFyZSBsaXN0ZWQgaW4gdGhlCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvYW1pZ2Ffa3N5bXMuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlnYV9rc3ltcy5jCmluZGV4IDhmMmUwNTguLjdmZGNmNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9hbWlnYV9rc3ltcy5jCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlnYV9rc3ltcy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2FtaWludHMuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlpbnRzLmMKaW5kZXggZjk0MDNmNC4uOTZjNzlkOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2FtaWdhL2FtaWludHMuYworKysgYi9hcmNoL202OGsvYW1pZ2EvYW1paW50cy5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKgogICogMDcvMDgvOTk6IHJld2FtcCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIC0gd2Ugbm93IGhhdmUgdHdvIHR5cGVzIG9mCiAgKiAgICAgICAgICAgaW50ZXJydXB0cywgbm9ybWFsIGFuZCBmYXN0IGhhbmRsZXJzLCBmYXN0IGhhbmRsZXJzIGJlaW5nCi0gKiAgICAgICAgICAgbWFya2VkIHdpdGggU0FfSU5URVJSVVBUIGFuZCBydW5zIHdpdGggYWxsIG90aGVyIGludGVycnVwdHMKKyAqICAgICAgICAgICBtYXJrZWQgd2l0aCBJUlFGX0RJU0FCTEVEIGFuZCBydW5zIHdpdGggYWxsIG90aGVyIGludGVycnVwdHMKICAqICAgICAgICAgICBkaXNhYmxlZC4gTm9ybWFsIGludGVycnVwdHMgZGlzYWJsZSB0aGVpciBvd24gc291cmNlIGJ1dAogICogICAgICAgICAgIHJ1biB3aXRoIGFsbCBvdGhlciBpbnRlcnJ1cHQgc291cmNlcyBlbmFibGVkLgogICogICAgICAgICAgIFBPUlRTIGFuZCBFWFRFUiBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgc2hhcmVkIGV2ZW4gaWYgdGhlCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvYW1pc291bmQuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCmluZGV4IGFlOTRkYjUuLjFmNWJmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCkBAIC04LDcgKzgsNiBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NoaXByYW0uYyBiL2FyY2gvbTY4ay9hbWlnYS9jaGlwcmFtLmMKaW5kZXggNTU4ZDVmZC4uZGUxMzA0YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2FtaWdhL2NoaXByYW0uYworKysgYi9hcmNoL202OGsvYW1pZ2EvY2hpcHJhbS5jCkBAIC03LDcgKzcsNiBAQAogKioJUmV3cml0dGVuIDE1LzkvMjAwMCBieSBHZWVydCB0byB1c2UgcmVzb3VyY2UgbWFuYWdlbWVudAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NpYS5jIGIvYXJjaC9tNjhrL2FtaWdhL2NpYS5jCmluZGV4IDA5NTZlNDUuLmRiYWQzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jaWEuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY2lhLmMKQEAgLTE3Niw1ICsxNzYsNSBAQAogCS8qIG92ZXJyaWRlIGF1dG8gaW50IGFuZCBpbnN0YWxsIENJQSBoYW5kbGVyICovCiAJbTY4a19zZXR1cF9pcnFfY29udHJvbGxlcigmYXV0b19pcnFfY29udHJvbGxlciwgYmFzZS0+aGFuZGxlcl9pcnEsIDEpOwogCW02OGtfaXJxX3N0YXJ0dXAoYmFzZS0+aGFuZGxlcl9pcnEpOwotCXJlcXVlc3RfaXJxKGJhc2UtPmhhbmRsZXJfaXJxLCBjaWFfaGFuZGxlciwgU0FfU0hJUlEsIGJhc2UtPm5hbWUsIGJhc2UpOworCXJlcXVlc3RfaXJxKGJhc2UtPmhhbmRsZXJfaXJxLCBjaWFfaGFuZGxlciwgSVJRRl9TSEFSRUQsIGJhc2UtPm5hbWUsIGJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IGI1YjhhNDEuLjA5MmU1MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIE1pc2NlbGxhbmVvdXMgQW1pZ2Egc3R1ZmYKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Fwb2xsby9jb25maWcuYyBiL2FyY2gvbTY4ay9hcG9sbG8vY29uZmlnLmMKaW5kZXggOTljNzA5Ny4uNmY0NTgxNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2Fwb2xsby9jb25maWcuYworKysgYi9hcmNoL202OGsvYXBvbGxvL2NvbmZpZy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCA3MjcyODlhLi5iMjA3OTI1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKiBNaXNjZWxsYW5lb3VzIGF0YXJpIHN0dWZmCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCmluZGV4IGFjZTA1ZjcuLjRhZTAxMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9oYWRlcy1wY2kuYyBiL2FyY2gvbTY4ay9hdGFyaS9oYWRlcy1wY2kuYwppbmRleCA4ODg4ZGViLi42Y2E1N2I2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvaGFkZXMtcGNpLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2hhZGVzLXBjaS5jCkBAIC00LDcgKzQsNiBAQAogICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0cmFtLmMgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwppbmRleCAyMmUwNDgxLi5iZjQ1ODhjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvc3RyYW0uYworKysgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwpAQCAtOCw3ICs4LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9ocDMwMC9jb25maWcuYyBiL2FyY2gvbTY4ay9ocDMwMC9jb25maWcuYwppbmRleCAyZWYyNzFjLi4xYzA1YTYyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaHAzMDAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2hwMzAwL2NvbmZpZy5jCkBAIC03LDcgKzcsNiBAQAogICogIGNhbGxlZCBieSBzZXR1cC5jLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYwppbmRleCBhOTAxNjg1ZS4uYWYxNzBjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvYmlvczMyLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYwpAQCAtNiw3ICs2LDYgQEAKICAqIEJhc2VkIG9uIHRoZSBERUMgQWxwaGEgYmlvczMyLmMgYnkgRGF2ZSBSdXNsaW5nIGFuZCBEYXZpZCBNb3NiZXJnZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCmluZGV4IDQ0OWI2MmIuLjkwODNjOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKQEAgLTMzLDcgKzMzLDYgQEAKICAqCQkgZm9yIDY4MDQwCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vZW50cnkuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TIGIvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKaW5kZXggNzAwMDJjMS4uNjczOWU4NyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKQEAgLTI1NSw3ICsyNTUsNiBAQAogICogTUFDX1VTRV9TQ0NfQjoJVXNlIHRoZSBTQ0MgcG9ydCBCIChwcmludGVyKSBmb3Igc2VyaWFsIGRlYnVnIChkZWZhdWx0KS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKaW5kZXggNWE4MzQ0Yi4uYjMzZTM3ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqICAgICAgICAgICB3aGljaCBtdXN0IGJlIHNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvUm9tYW4gWmlwcGVsCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTE5Myw3ICsxOTIsNyBAQAogCXByZXYgPSBpcnFfbGlzdCArIGlycTsKIAlpZiAoKnByZXYpIHsKIAkJLyogQ2FuJ3Qgc2hhcmUgaW50ZXJydXB0cyB1bmxlc3MgYm90aCBhZ3JlZSB0byAqLwotCQlpZiAoISgoKnByZXYpLT5mbGFncyAmIG5vZGUtPmZsYWdzICYgU0FfU0hJUlEpKSB7CisJCWlmICghKCgqcHJldiktPmZsYWdzICYgbm9kZS0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnRyLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCmluZGV4IDFmNWUxYjUuLmFmZjI2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDMzNjQ4ZWYuLjQ1YTQ2NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNTQwNjM4Yy4uZWY4OTA2MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2VtYXBob3JlLmMKaW5kZXggMWViYjc5Yi4uZDEyY2JiZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL202OGsva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0zLDcgKzMsNiBAQAogICogc3BlY2lmaWMgY2hhbmdlcyBpbiA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYwppbmRleCAyMTRhOTVmLi5mMmQ3ZWUwIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jCkBAIC04LDcgKzgsNiBAQAogICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2Ygc3lzdGVtIHNldHVwCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYwppbmRleCBlODZkZTdiLi40NTY5NDA2IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKiBTZXRzIHVwIGFsbCBleGNlcHRpb24gdmVjdG9ycwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDQ5N2I5MjQuLjk5YmEzMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiBQSERSUwogewogICB0ZXh0IFBUX0xPQUQgRklMRUhEUiBQSERSUyBGTEFHUyAoNyk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCA1YTk5OTBlLi44NWRkYTEwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIE1pc2NlbGxhbmVvdXMgbGludXggc3R1ZmYKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jIGIvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCmluZGV4IGNjNjJlZDYuLjRlZWIwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYworKysgYi9hcmNoL202OGsvbWFjL2RlYnVnLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvaW9wLmMgYi9hcmNoL202OGsvbWFjL2lvcC5jCmluZGV4IDRjOGVjZTcuLmJjNjU3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvaW9wLmMKKysrIGIvYXJjaC9tNjhrL21hYy9pb3AuYwpAQCAtMTA0LDcgKzEwNCw2IEBACiAgKiBzaG91bGQgZXhlY3V0ZSBxdWlja2x5LikKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9taXNjLmMgYi9hcmNoL202OGsvbWFjL21pc2MuYwppbmRleCBiYmIwYzNiLi41NmQxZjU2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL21pc2MuYworKysgYi9hcmNoL202OGsvbWFjL21pc2MuYwpAQCAtMiw3ICsyLDYgQEAKICAqIE1pc2NlbGxhbmVvdXMgTWFjNjhLLXNwZWNpZmljIHN0dWZmCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW50cnkuUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbnRyeS5TCmluZGV4IDVlYzJkOTEuLjk1NGI0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbnRyeS5TCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbnRyeS5TCkBAIC0zNSw3ICszNSw2IEBACiAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vZW50cnkuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3V0aWwuUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF91dGlsLlMKaW5kZXggYTlmN2YwMS4uYjA5M2I4NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3V0aWwuUworKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdXRpbC5TCkBAIC0zNSw3ICszNSw2IEBACiAgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImZwX2VtdS5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2luaXQuYyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKaW5kZXggYTE5MGUzOS4uYWI5MDIxMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2luaXQuYworKysgYi9hcmNoL202OGsvbW0vaW5pdC5jCkBAIC03LDcgKzcsNiBAQAogICogIHRvIG1vdG9yb2xhLmMgYW5kIHN1bjNtbXUuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0va21hcC5jIGIvYXJjaC9tNjhrL21tL2ttYXAuYwppbmRleCA0M2ZmYWIwLi5mNDZmMDQ5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0va21hcC5jCisrKyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKQEAgLTcsNyArNyw2IEBACiAgKgkgICAgIHVzZWQgYnkgb3RoZXIgYXJjaGl0ZWN0dXJlcwkJL1JvbWFuIFppcHBlbAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL21lbW9yeS5jIGIvYXJjaC9tNjhrL21tL21lbW9yeS5jCmluZGV4IGEyMjY2NjguLmEwYzA5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9tZW1vcnkuYworKysgYi9hcmNoL202OGsvbW0vbWVtb3J5LmMKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCmluZGV4IGJkYjExMTAuLjQ5MDE1ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCisrKyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCkBAIC04LDcgKzgsNiBAQAogICogTW92ZWQgOC8yMC8xOTk5IFNhbSBDcmVhc2V5CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvcTQwL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3E0MC9jb25maWcuYwppbmRleCBlZmE1MmQzLi45YTE4Mjc4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvcTQwL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKaW5kZXggNTUzYzMwNC4uZDA5ZDAzYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKQEAgLTgsNyArOCw2IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL2luaXQuYyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vaW5pdC5jCmluZGV4IDJlNmFlNTYuLjIwMmFkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL3Byb20vaW5pdC5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vaW5pdC5jCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL3ByaW50Zi5jIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9wcmludGYuYwppbmRleCBlNmVlMTAwLi5lN2JmZGUzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9wcm9tL3ByaW50Zi5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vcHJpbnRmLmMKQEAgLTgsNyArOCw2IEBACiAgKiBhYm91dCBvciB1c2UgaXQhICBJdCdzIHNpbXBsZSBhbmQgc21lbGx5IGFueXdheS4uLi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMgYi9hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jCmluZGV4IDk3YzdiZmQuLjZjMjY1MjIyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9zdW4zZHZtYS5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMKQEAgLTYsNyArNiw2IEBACiAgKiBDb250YWlucyBjb21tb24gcm91dGluZXMgZm9yIHN1bjMvc3VuM3ggRFZNQSBtYW5hZ2VtZW50LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMgYi9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jCmluZGV4IDA5MTI0MzUuLmYxOGI5ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvc3VuM2ludHMuYwpAQCAtNiw3ICs2LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC9jb25maWcuYyBiL2FyY2gvbTY4ay9zdW4zeC9jb25maWcuYwppbmRleCA1MmZiMTc0Li45ODc4OTE3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuM3gvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3N1bjN4L2NvbmZpZy5jCkBAIC02LDcgKzYsNiBAQAogICogYmFzZWQgb24gY29kZSBmcm9tIE9saXZlciBKb3dldHQgPG9saXZlckBqb3dldHQubWFuYXdhdHUuZ2VuLm56PgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKaW5kZXggOGI2ZTcyMy4uZTc2N2YyZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZworKysgYi9hcmNoL202OGtub21tdS9LY29uZmlnCkBAIC01NDAsNiArNTQwLDU5IEBACiAKIGVuZGNob2ljZQogCitjb21tZW50ICJST00gY29uZmlndXJhdGlvbiIKKworY29uZmlnIFJPTQorCWJvb2wgIlNwZWNpZnkgUk9NIGxpbmtlciByZWdpb25zIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIERlZmluZSBhIFJPTSByZWdpb24gZm9yIHRoZSBsaW5rZXIgc2NyaXB0LiBUaGlzIGNyZWF0ZXMgYSBrZXJuZWwKKwkgIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBmbGFzaCwgd2l0aCBwb3NzaWJseSB0aGUgdGV4dCwgYW5kIGRhdGEKKwkgIHJlZ2lvbnMgYmVpbmcgY29waWVkIG91dCB0byBSQU0gYXQgc3RhcnR1cC4KKworY29uZmlnIFJPTUJBU0UKKwloZXggIkFkZHJlc3Mgb2YgdGhlIGJhc2Ugb2YgUk9NIGRldmljZSIKKwlkZWZhdWx0ICIwIgorCWRlcGVuZHMgb24gUk9NCisJaGVscAorCSAgRGVmaW5lIHRoZSBhZGRyZXNzIHRoYXQgdGhlIFJPTSByZWdpb24gc3RhcnRzIGF0LiBTb21lIHBsYXRmb3JtcworCSAgdXNlIHRoaXMgdG8gc2V0IHRoZWlyIGNoaXAgc2VsZWN0IHJlZ2lvbiBhY2NvcmRpbmdseSBmb3IgdGhlIGJvb3QKKwkgIGRldmljZS4KKworY29uZmlnIFJPTVZFQworCWhleCAiQWRkcmVzcyBvZiB0aGUgYmFzZSBvZiB0aGUgUk9NIHZlY3RvcnMiCisJZGVmYXVsdCAiMCIKKwlkZXBlbmRzIG9uIFJPTQorCWhlbHAKKwkgIFRoaXMgaXMgYWxtb3N0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgYmFzZSBvZiB0aGUgUk9NLiBTaW5jZSBvbiBhbGwKKwkgIDY4MDAwIHR5cGUgdmFyaWVudHMgdGhlIHZlY3RvcnMgYXJlIGF0IHRoZSBiYXNlIG9mIHRoZSBib290IGRldmljZQorCSAgb24gc3lzdGVtIHN0YXJ0dXAuCisKK2NvbmZpZyBST01WRUNTSVpFCisJaGV4ICJTaXplIG9mIFJPTSB2ZWN0b3IgcmVnaW9uIChpbiBieXRlcykiCisJZGVmYXVsdCAiMHg0MDAiCisJZGVwZW5kcyBvbiBST00KKwloZWxwCisJICBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIHZlY3RvciByZWdpb24gaW4gUk9NLiBGb3IgbW9zdCA2ODAwMAorCSAgdmFyaWVudHMgdGhpcyB3b3VsZCBiZSAweDQwMCBieXRlcyBpbiBzaXplLiBTZXQgdG8gMCBpZiB5b3UgZG8KKwkgIG5vdCB3YW50IGEgdmVjdG9yIHJlZ2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIFJPTS4KKworY29uZmlnIFJPTVNUQVJUCisJaGV4ICJBZGRyZXNzIG9mIHRoZSBiYXNlIG9mIHN5c3RlbSBpbWFnZSBpbiBST00iCisJZGVmYXVsdCAiMHg0MDAiCisJZGVwZW5kcyBvbiBST00KKwloZWxwCisJICBEZWZpbmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHN5c3RlbSBpbWFnZSBpbiBST00uIENvbW1vbmx5IHRoaXMKKwkgIGlzIHN0cmFpdCBhZnRlciB0aGUgUk9NIHZlY3RvcnMuCisKK2NvbmZpZyBST01TSVpFCisJaGV4ICJTaXplIG9mIHRoZSBST00gZGV2aWNlIgorCWRlZmF1bHQgIjB4MTAwMDAwIgorCWRlcGVuZHMgb24gUk9NCisJaGVscAorCSAgU2l6ZSBvZiB0aGUgUk9NIGRldmljZS4gT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBpcyB1c2VkIHRvIHNldHVwCisJICB0aGUgY2hpcCBzZWxlY3QgdGhhdCBjb250cm9scyB0aGUgYm9vdCBST00gZGV2aWNlLgorCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBleGVjdXRlcyBmcm9tIgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9jb21lbXBjaS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2NvbWVtcGNpLmMKaW5kZXggODY3MDkzOC4uNmVlMDBlZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2NvbWVtcGNpLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2NvbWVtcGNpLmMKQEAgLTksNyArOSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0zNTcsNyArMzU2LDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3ZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9lbnRyeS5TCmluZGV4IDhiMWY0NzIuLjFlN2VhNmEzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwpAQCAtMjQsNyArMjQsNiBAQAogICogbGludXggMi40IHN1cHBvcnQgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKaW5kZXggNDMyMGQ1ZC4uMWU2MjE1MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwppbmRleCBmODYxNzU1Li5jMThhODMzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMzgyY2E1Ny4uOTEzMDExOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZW1hcGhvcmUuYwppbmRleCBjMDgzZjQ3Li5iY2UyYmM3IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc2VtYXBob3JlLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0zLDcgKzMsNiBAQAogICogc3BlY2lmaWMgY2hhbmdlcyBpbiA8YXNtL3NlbWFwaG9yZS1oZWxwZXIuaD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZXR1cC5jCmluZGV4IDk5ZDAzOGUuLmJkZTk4MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZXR1cC5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBzeXN0ZW0gc2V0dXAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDg5N2RlYWEuLjYxN2U0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTExLDcgKzExLDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RpbWUuYwppbmRleCBiOWQ4YWJiLi4xZGI5ODcyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90aW1lLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCQkiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jCmluZGV4IDQ0ZmY3NGUuLjE3NjQ5ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jCkBAIC0xNiw3ICsxNiw2IEBACiAvKgogICogU2V0cyB1cCBhbGwgZXhjZXB0aW9uIHZlY3RvcnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZhMmYwYzYuLmNjZDJjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zLDYzICszLDEyIEBACiAgKgogICoJKEMpIENvcHlyaWdodCAyMDAyLTIwMDYsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CiAgKgotICoJVGhpcyBlbmRzIHVwIGxvb2tpbmcgY29tcGlsY2F0ZWQsIGJlY2F1c2Ugb2YgdGhlIG51bWJlciBvZgotICoJYWRkcmVzcyB2YXJpYXRpb25zIGZvciByYW0gYW5kIHJvbS9mbGFzaCBsYXlvdXRzLiBUaGUgcmVhbAotICoJd29yayBvZiB0aGUgbGlua2VyIHNjcmlwdCBpcyBhbGwgYXQgdGhlIGVuZCwgYW5kIHJlYXNvbmFibHkKLSAqCXN0cmFpdCBmb3J3YXJkLgorICoJVGhpcyBsaW5rZXIgc2NyaXB0IGlzIGVxdWlwZWQgdG8gYnVpbGQgZWl0aGVyIFJPTSBsb2FkZWQgb3IgUkFNCisgKglydW4ga2VybmVscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KIAotLyoKLSAqCU9yaWdpbmFsIFBhbG0gcGlsb3QgKHNhbWUgZm9yIFhjb3BpbG90KS4KLSAqCVRoZXJlIGlzIHJlYWxseSBvbmx5IGEgcm9tIHRhcmdldCBmb3IgdGhpcy4KLSAqLwotI2lmZGVmIENPTkZJR19QSUxPVDMKLSNkZWZpbmUJUk9NVkVDX1NUQVJUCTB4MTBjMDAwMDAKLSNkZWZpbmUJUk9NVkVDX0xFTkdUSAkweDEwNDAwCi0jZGVmaW5lCVJPTV9TVEFSVAkweDEwYzEwNDAwCi0jZGVmaW5lCVJPTV9MRU5HVEgJMHhmZWMwMAotI2RlZmluZQlST01fRU5ECQkweDEwZDAwMDAwCi0jZGVmaW5lCURBVEFfQUREUglDT05GSUdfS0VSTkVMQkFTRQotI2VuZGlmCi0KLS8qCi0gKglTYW1lIHNldHVwIG9uIGJvdGggdGhlIHVDc2ltbSBhbmQgdUNkaW1tLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfVUNTSU1NKSB8fCBkZWZpbmVkKENPTkZJR19VQ0RJTU0pCi0jaWZkZWYgQ09ORklHX1JBTUtFUk5FTAotI2RlZmluZQlST01WRUNfU1RBUlQJMHgxMGMxMDAwMAotI2RlZmluZQlST01WRUNfTEVOR1RICTB4NDAwCi0jZGVmaW5lCVJPTV9TVEFSVAkweDEwYzEwNDAwCi0jZGVmaW5lCVJPTV9MRU5HVEgJMHgxZWZjMDAKLSNkZWZpbmUJUk9NX0VORAkJMHgxMGUwMDAwMAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JPTUtFUk5FTAotI2RlZmluZQlST01WRUNfU1RBUlQJMHgxMGMxMDAwMAotI2RlZmluZQlST01WRUNfTEVOR1RICTB4NDAwCi0jZGVmaW5lCVJPTV9TVEFSVAkweDEwYzEwNDAwCi0jZGVmaW5lCVJPTV9MRU5HVEgJMHgxZWZjMDAKLSNkZWZpbmUJUk9NX0VORAkJMHgxMGUwMDAwMAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJTUVNS0VSTkVMCi0jZGVmaW5lCVJPTVZFQ19TVEFSVAkweDAwNjAwMDAwCi0jZGVmaW5lCVJPTVZFQ19MRU5HVEgJMHg0MDAKLSNkZWZpbmUJUk9NX1NUQVJUCTB4MDA2MDA0MDAKLSNkZWZpbmUJUk9NX0xFTkdUSAkweDFlZmMwMAotI2RlZmluZQlST01fRU5ECQkweDAwN2YwMDAwCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VDUVVJQ0MKLSNkZWZpbmUJUk9NVkVDX1NUQVJUCTB4MDAwMDAwMDAKLSNkZWZpbmUJUk9NVkVDX0xFTkdUSAkweDQwNAotI2RlZmluZQlST01fU1RBUlQJMHgwMDAwMDQwNAotI2RlZmluZQlST01fTEVOR1RICTB4MWZmNmZjCi0jZGVmaW5lCVJPTV9FTkQJCTB4MDAyMDAwMDAKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfUkFNS0VSTkVMKQogI2RlZmluZQlSQU1fU1RBUlQJQ09ORklHX0tFUk5FTEJBU0UKICNkZWZpbmUJUkFNX0xFTkdUSAkoQ09ORklHX1JBTUJBU0UgKyBDT05GSUdfUkFNU0laRSAtIENPTkZJR19LRVJORUxCQVNFKQpAQCAtNzEsNiArMjAsMTAgQEAKICNpZiBkZWZpbmVkKENPTkZJR19ST01LRVJORUwpIHx8IGRlZmluZWQoQ09ORklHX0hJTUVNS0VSTkVMKQogI2RlZmluZQlSQU1fU1RBUlQJQ09ORklHX1JBTUJBU0UKICNkZWZpbmUJUkFNX0xFTkdUSAlDT05GSUdfUkFNU0laRQorI2RlZmluZQlST01WRUNfU1RBUlQJQ09ORklHX1JPTVZFQworI2RlZmluZQlST01WRUNfTEVOR1RICUNPTkZJR19ST01WRUNTSVpFCisjZGVmaW5lCVJPTV9TVEFSVAlDT05GSUdfUk9NU1RBUlQKKyNkZWZpbmUJUk9NX0xFTkdUSAlDT05GSUdfUk9NU0laRQogI2RlZmluZQlURVhUCQlyb20KICNkZWZpbmUJREFUQQkJcmFtCiAjZGVmaW5lCUlOSVQJCXJhbQpAQCAtOTAsNyArNDMsNiBAQAogI2lmZGVmIFJPTV9TVEFSVAogCXJvbXZlYwk6IE9SSUdJTiA9IFJPTVZFQ19TVEFSVCwgTEVOR1RIID0gUk9NVkVDX0xFTkdUSAogCXJvbQk6IE9SSUdJTiA9IFJPTV9TVEFSVCwgTEVOR1RIID0gUk9NX0xFTkdUSAotCWVyb20JOiBPUklHSU4gPSBST01fRU5ELCBMRU5HVEggPSAwCiAjZW5kaWYKIH0KIApAQCAtMTY3LDEzICsxMTksNiBAQAogCQlfZXRleHQgPSAuIDsKIAl9ID4gVEVYVAogCi0jaWZkZWYgUk9NX0VORAotCS4gPSBST01fRU5EIDsKLQkuZXJvbSA6IHsKLQkJX19yb21fZW5kID0gLiA7Ci0JfSA+IGVyb20KLSNlbmRpZgotCiAJLmRhdGEgREFUQV9BRERSIDogewogCQkuID0gQUxJR04oNCk7CiAJCV9zZGF0YSA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbGliL3NlbWFwaG9yZS5TIGIvYXJjaC9tNjhrbm9tbXUvbGliL3NlbWFwaG9yZS5TCmluZGV4IDc2NzY1MzYuLjg3Yzc0NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9zZW1hcGhvcmUuUworKysgYi9hcmNoL202OGtub21tdS9saWIvc2VtYXBob3JlLlMKQEAgLTksNyArOSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKaW5kZXggNzBkMTY1My4uZTRjMjMzZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwpAQCAtMTUsNyArMTUsNiBAQAogICogIERFQy8yMDAwIC0tIGxpbnV4IDIuNCBzdXBwb3J0IDxkYXZpZG1Ac25hcGdlYXIuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbW0va21hcC5jIGIvYXJjaC9tNjhrbm9tbXUvbW0va21hcC5jCmluZGV4IDA0MjEzZTEuLmJjMzJmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L21tL2ttYXAuYworKysgYi9hcmNoL202OGtub21tdS9tbS9rbWFwLmMKQEAgLTUsNyArNSw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L21tL21lbW9yeS5jIGIvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKaW5kZXggMGVlZjcyOS4uNDExZTQ1MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKQEAgLTExLDcgKzExLDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIEhhbWlzaCBNYWNkb25hbGQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDYvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2L2NvbmZpZy5jCmluZGV4IDk4N2M5MWEuLjM0NjU3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDYvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNi9jb25maWcuYwpAQCAtOSw3ICs5LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKaW5kZXggZjM1Yjg2MC4uNDhlNGQ2MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIwNmUvY29uZmlnLmMKQEAgLTgsNyArOCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYwppbmRleCA3MWRlYTJlLi44MjNmNTYxIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKQEAgLTExLDcgKzExLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCmluZGV4IDIyNzY3Y2UuLjg1ZGU4MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYwpAQCAtMTIsNyArMTIsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvY29uZmlnLmMKaW5kZXggMjg5YzE4Mi4uOWQxOWQ1YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2NvbmZpZy5jCkBAIC04LDcgKzgsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKaW5kZXggY2YzNmU3ZC4uZDUwMGUyNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCkBAIC05LDcgKzksNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKaW5kZXggODA0ZGUzMy4uYmJhZTUxNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCkBAIC0xMiw3ICsxMiw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYwppbmRleCBhNWQyYWEzLi4xOGRhZDkwIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKQEAgLTEyLDcgKzEyLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2NvbmZpZy5jCmluZGV4IDdlZDU3ODIuLjgwNzRhYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9jb25maWcuYwpAQCAtOSw3ICs5LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvZW50cnkuUwppbmRleCA5ZGRmNTQ3Li5mMGRiYTg0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9lbnRyeS5TCkBAIC0yNiw3ICsyNiw2IEBACiAgKiBCdWcsIHNwZWVkIGFuZCBtYWludGFpbmFiaWxpdHkgZml4ZXMgYnkgUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQG1hY3FlbC5iZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvaGVhZC5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9oZWFkLlMKaW5kZXggMWQ5ZWIzMC4uZjJlZGI2NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9oZWFkLlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9oZWFkLlMKQEAgLTgsNyArOCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvaW50cy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9pbnRzLmMKaW5kZXggYTEzNGZiMi4uYjRiNTUwOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9pbnRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9pbnRzLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9waXQuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvcGl0LmMKaW5kZXggZWYxNzQ3NC4uOWRjNTY4OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9waXQuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L3BpdC5jCkBAIC0xMiw3ICsxMiw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CkBAIC00OSw3ICs0OCw3IEBACiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqaWNycDsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbXJwOwogCi0JcmVxdWVzdF9pcnEoTUNGSU5UX1ZFQ0JBU0UgKyBNQ0ZJTlRfUElUMSwgaGFuZGxlciwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKE1DRklOVF9WRUNCQVNFICsgTUNGSU5UX1BJVDEsIGhhbmRsZXIsIElSUUZfRElTQUJMRUQsCiAJCSJDb2xkRmlyZSBUaW1lciIsIE5VTEwpOwogCiAJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvdGltZXJzLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L3RpbWVycy5jCmluZGV4IDgzYjhiODkuLjI0NzgxZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvdGltZXJzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy90aW1lcnMuYwpAQCAtOCw3ICs4LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KQEAgLTYyLDcgKzYxLDcgQEAKIAlfX3Jhd193cml0ZXcoTUNGVElNRVJfVE1SX0VOT1JJIHwgTUNGVElNRVJfVE1SX0NMSzE2IHwKIAkJTUNGVElNRVJfVE1SX1JFU1RBUlQgfCBNQ0ZUSU1FUl9UTVJfRU5BQkxFLCBUQShNQ0ZUSU1FUl9UTVIpKTsKIAotCXJlcXVlc3RfaXJxKG1jZl90aW1lcnZlY3RvciwgaGFuZGxlciwgU0FfSU5URVJSVVBULCAidGltZXIiLCBOVUxMKTsKKwlyZXF1ZXN0X2lycShtY2ZfdGltZXJ2ZWN0b3IsIGhhbmRsZXIsIElSUUZfRElTQUJMRUQsICJ0aW1lciIsIE5VTEwpOwogCW1jZl9zZXR0aW1lcmljcigxLCBtY2ZfdGltZXJsZXZlbCk7CiAKICNpZmRlZiBDT05GSUdfSElHSFBST0ZJTEUKQEAgLTEyNiw3ICsxMjUsNyBAQAogCQlNQ0ZUSU1FUl9UTVJfUkVTVEFSVCB8IE1DRlRJTUVSX1RNUl9FTkFCTEUsIFBBKE1DRlRJTUVSX1RNUikpOwogCiAJcmVxdWVzdF9pcnEobWNmX3Byb2ZpbGV2ZWN0b3IsIGNvbGRmaXJlX3Byb2ZpbGVfdGljaywKLQkJKFNBX0lOVEVSUlVQVCB8IElSUV9GTEdfRkFTVCksICJwcm9maWxlIHRpbWVyIiwgTlVMTCk7CisJCShJUlFGX0RJU0FCTEVEIHwgSVJRX0ZMR19GQVNUKSwgInByb2ZpbGUgdGltZXIiLCBOVUxMKTsKIAltY2Zfc2V0dGltZXJpY3IoMiwgNyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvdmVjdG9ycy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy92ZWN0b3JzLmMKaW5kZXggYWMzMTNhMS4uMmE4YjBkMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy92ZWN0b3JzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy92ZWN0b3JzLmMKQEAgLTgsNyArOCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81NDA3L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTQwNy9jb25maWcuYwppbmRleCBmN2M5MDE4Li41YWFkMjY0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81NDA3L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzU0MDcvY29uZmlnLmMKQEAgLTksNyArOSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9NYWtlZmlsZSBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L01ha2VmaWxlCmluZGV4IDFiM2I3MTkuLjVlNTQzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L01ha2VmaWxlCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCiBvYmoteQkJCSs9IGVudHJ5Lm8gaW50cy5vIHRpbWVycy5vCiBvYmotJChDT05GSUdfTTY4MzI4KQkrPSBjb25maWcubworb2JqLSQoQ09ORklHX1JPTSkJKz0gcm9tdmVjLm8KIAogZXh0cmEteQkJCTo9IGhlYWQubwogZXh0cmEtJChDT05GSUdfTTY4MzI4KQkrPSBib290bG9nby5yaCBoZWFkLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvY29uZmlnLmMKaW5kZXggYmNmYTVkN2YuLjI2ZmZlYmEyIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9jb25maWcuYwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2RiZy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCmluZGV4IDdkODk5MGQuLmY5Nzg2MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUwpAQCAtMTAsNyArMTAsNiBAQAogICogTGludXgvbTY4ayBzdXBwb3J0IGJ5IEhhbWlzaCBNYWNkb25hbGQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaGVhZC1kZTIuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2hlYWQtZGUyLlMKaW5kZXggOTRjNWExNi4uOTJkOTY0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaGVhZC1kZTIuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9oZWFkLWRlMi5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUkFNMzJNQikKICNkZWZpbmUJTUVNX0VORAkweDAyMDAwMDAwCS8qIE1lbW9yeSBzaXplIDMyTWIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2hlYWQtcGlsb3QuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2hlYWQtcGlsb3QuUwppbmRleCA0NmIzNjA0Li45ZTA3ZmFhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9oZWFkLXBpbG90LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaGVhZC1waWxvdC5TCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIElNTUVEICMKICNkZWZpbmUJREJHX1BVVEMoeCkJbW92ZWIgSU1NRUQgeCwgMHhmZmZmZjkwNwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC5nbG9iYWwgX3N0ZXh0CiAuZ2xvYmFsIF9zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaGVhZC1yYW0uUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2hlYWQtcmFtLlMKaW5kZXggZThkYzkyNC4uMjUyYjgwYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaGVhZC1yYW0uUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9oZWFkLXJhbS5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAJLmdsb2JhbCBfX21haW4KIAkuZ2xvYmFsIF9fcm9tX3N0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9oZWFkLXJvbS5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaGVhZC1yb20uUwppbmRleCAyMzQ0MzBiLi42ZWM3N2QzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9oZWFkLXJvbS5TCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2hlYWQtcm9tLlMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAJCiAJLmdsb2JhbCBfc3RhcnQKIAkuZ2xvYmFsIF9zdGV4dApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaW50cy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvaW50cy5jCmluZGV4IDc0MzcyMTcuLjJkZGE3MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2ludHMuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9pbnRzLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycW5vZGUuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpAQCAtODIsMjUgKzgzLDYgQEAKIC8qIGlycSBub2RlIHZhcmlhYmxlcyBmb3IgdGhlIDMyIChwb3RlbnRpYWwpIG9uIGNoaXAgc291cmNlcyAqLwogc3RhdGljIGlycV9ub2RlX3QgaW50X2lycV9saXN0W05SX0lSUVNdOwogCi0jaWYgIWRlZmluZWQoQ09ORklHX0RSQUdFTjIpCi1hc20gKCIuZ2xvYmFsIF9zdGFydCwgX19yYW1lbmQvbi90IgotICAgICAiLnNlY3Rpb24gLnJvbXZlYy9uIgotICAgICAiZV92ZWN0b3JzOlxuXHQiCi0gICAgICIubG9uZyBfX3JhbWVuZC00LCBfc3RhcnQsIGJ1c2VyciwgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcFxuXHQiCi0gICAgICIubG9uZyB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwXG5cdCIKLSAgICAgIi5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXBcblx0IgotICAgICAiLmxvbmcgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcFxuXHQiCi0gICAgICIubG9uZyB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwXG5cdCIKLQkvKi5sb25nIGludGhhbmRsZXIsIGludGhhbmRsZXIsIGludGhhbmRsZXIsIGludGhhbmRsZXIKLQkubG9uZyBpbnRoYW5kbGVyNCwgaW50aGFuZGxlciwgaW50aGFuZGxlciwgaW50aGFuZGxlciAgICovCi0JLyogVFJBUCAjMC0xNSAqLwotICAgICAiLmxvbmcgc3lzdGVtX2NhbGwsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXBcblx0IgotICAgICAiLmxvbmcgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcCwgdHJhcFxuXHQiCi0gICAgICIubG9uZyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMFxuXHQiCi0gICAgICIudGV4dFxuIgotICAgICAiaWdub3JlOiBydGUiKTsKLSNlbmRpZgotCiAvKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCiAgKiB0aGUgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvcm9tdmVjLlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9yb212ZWMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTdmZTFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvcm9tdmVjLlMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L3JvbXZlYy5TCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAxOTk2IFJvbWFuIFppcHBlbAorICogQ29weXJpZ2h0IDE5OTkgRC4gSmVmZiBEaW9ubmUgPGplZmZAcnQtY29udHJvbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwNiBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLmdsb2JhbCBfc3RhcnQKKy5nbG9iYWwgX2J1c2VycgorLmdsb2JhbCB0cmFwCisuZ2xvYmFsIHN5c3RlbV9jYWxsCisKKy5zZWN0aW9uIC5yb212ZWMKKworZV92ZWN0b3JzOgorLmxvbmcgQ09ORklHX1JBTUJBU0UrQ09ORklHX1JBTVNJWkUtNCwgX3N0YXJ0LCBidXNlcnIsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy5sb25nIHRyYXAsIHRyYXAsIHRyYXAsIHRyYXAKKy8qIFRSQVAgIzAtMTUgKi8KKy5sb25nIHN5c3RlbV9jYWxsLCB0cmFwLCB0cmFwLCB0cmFwCisubG9uZyB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwCisubG9uZyB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwCisubG9uZyB0cmFwLCB0cmFwLCB0cmFwLCB0cmFwCisubG9uZyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC90aW1lcnMuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L3RpbWVycy5jCmluZGV4IDY4YzJjZDYuLjQzOGVmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L3RpbWVycy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L3RpbWVycy5jCkBAIC0xNCw3ICsxNCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbmZpZy5jCmluZGV4IDNkYjI0NDYuLmM1NDgyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbmZpZy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTE0MSwxMyArMTQwLDEzIEBACiB2b2lkIEJTUF9yZXNldCAodm9pZCkKIHsKICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLSAgYXNtIHZvbGF0aWxlICgiCi0gICAgbW92ZWFsICNfc3RhcnQsICVhMDsKLSAgICBtb3ZlYiAjMCwgMHhGRkZGRjMwMDsKLSAgICBtb3ZlYWwgMCglYTApLCAlc3A7Ci0gICAgbW92ZWFsIDQoJWEwKSwgJWEwOwotICAgIGptcCAoJWEwKTsKLSAgICAiKTsKKyAgYXNtIHZvbGF0aWxlICgKKyAgICAibW92ZWFsICNfc3RhcnQsICVhMDtcbiIKKyAgICAibW92ZWIgIzAsIDB4RkZGRkYzMDA7XG4iCisgICAgIm1vdmVhbCAwKCVhMCksICVzcDtcbiIKKyAgICAibW92ZWFsIDQoJWEwKSwgJWEwO1xuIgorICAgICJqbXAgKCVhMCk7XG4iCisgICAgKTsKIH0KIAogdW5zaWduZWQgY2hhciAqc2NjMV9od2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUwppbmRleCA4ZmY0OGFkLi5mMWFmODk3IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIE02ODM2MCBQb3J0IGJ5IFNFRCBTeXN0ZW1zLCBhbmQgTGluZW8uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2hlYWQtcmFtLlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9oZWFkLXJhbS5TCmluZGV4IGY0OTc3MTMuLjJlYTUxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2hlYWQtcmFtLlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaGVhZC1yYW0uUwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqLwogI2RlZmluZSBBU1NFTUJMWQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAuZ2xvYmFsIF9zdGV4dAogLmdsb2JhbCBfc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2hlYWQtcm9tLlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9oZWFkLXJvbS5TCmluZGV4IDJkMjhjM2UuLjYyZWNmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2hlYWQtcm9tLlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaGVhZC1yb20uUwpAQCAtMTEsNyArMTEsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4ICBELiBKZWZmIERpb25uZSA8amVmZkB1Y2xpbnV4Lm9yZz4sCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC5nbG9iYWwgX3N0ZXh0CiAuZ2xvYmFsIF9zYnNzCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9pbnRzLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9pbnRzLmMKaW5kZXggYmExODRkYi4uNGRmM2MxNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaW50cy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYwpAQCAtMTAsNyArMTAsNiBAQAogICogQ29weXJpZ2h0IChjKSAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHVjbGludXgub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsNiArMTksNyBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaXJxbm9kZS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82OEVaMzI4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjhFWjMyOC9jb25maWcuYwppbmRleCBkOGQ1NmU1Li42NTliODBhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82OEVaMzI4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4RVozMjgvY29uZmlnLmMKQEAgLTE0LDcgKzE0LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC00MiwxMyArNDEsMTMgQEAKIHZvaWQgbTY4ZXozMjhfcmVzZXQodm9pZCkKIHsKICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLSAgYXNtIHZvbGF0aWxlICgiCi0gICAgbW92ZWFsICMweDEwYzAwMDAwLCAlYTA7Ci0gICAgbW92ZWIgIzAsIDB4RkZGRkYzMDA7Ci0gICAgbW92ZWFsIDAoJWEwKSwgJXNwOwotICAgIG1vdmVhbCA0KCVhMCksICVhMDsKLSAgICBqbXAgKCVhMCk7Ci0gICAgIik7CisgIGFzbSB2b2xhdGlsZSAoCisgICAgIm1vdmVhbCAjMHgxMGMwMDAwMCwgJWEwO1xuIgorICAgICJtb3ZlYiAjMCwgMHhGRkZGRjMwMDtcbiIKKyAgICAibW92ZWFsIDAoJWEwKSwgJXNwO1xuIgorICAgICJtb3ZlYWwgNCglYTApLCAlYTA7XG4iCisgICAgImptcCAoJWEwKTtcbiIKKyAgICApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjhWWjMyOC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4VlozMjgvY29uZmlnLmMKaW5kZXggZDkyNjUyNC4uZmNkMTAwYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjhWWjMyOC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82OFZaMzI4L2NvbmZpZy5jCkBAIC0xNCw3ICsxNCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xNDEsMTMgKzE0MCwxMyBAQAogc3RhdGljIHZvaWQgbTY4dnozMjhfcmVzZXQodm9pZCkKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWFzbSB2b2xhdGlsZSAoIgotCQltb3ZlYWwgIzB4MTBjMDAwMDAsICVhMDsKLQkJbW92ZWIgIzAsIDB4RkZGRkYzMDA7Ci0JCW1vdmVhbCAwKCVhMCksICVzcDsKLQkJbW92ZWFsIDQoJWEwKSwgJWEwOwotCQlqbXAgKCVhMCk7Ci0JIik7CisJYXNtIHZvbGF0aWxlICgKKwkJIm1vdmVhbCAjMHgxMGMwMDAwMCwgJWEwO1xuXHQiCisJCSJtb3ZlYiAjMCwgMHhGRkZGRjMwMDtcblx0IgorCQkibW92ZWFsIDAoJWEwKSwgJXNwO1xuXHQiCisJCSJtb3ZlYWwgNCglYTApLCAlYTA7XG5cdCIKKwkJImptcCAoJWEwKTtcbiIKKwkpOwogfQogCiB1bnNpZ25lZCBjaGFyICpjczg5MDBhX2h3YWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggMzVlMDM4YS4uNzQ3YTljMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTMwOCw2ICszMDgsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19NVUxUSVRIUkVBRElORyBpZiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1JUFMgVGVjaG5vbG9naWVzIEF0bGFzIGV2YWx1YXRpb24KIAkgIGJvYXJkLgpAQCAtMzI0LDYgKzMyNSw3IEBACiAJc2VsZWN0IEk4MjU5CiAJc2VsZWN0IE1JUFNfQk9BUkRTX0dFTgogCXNlbGVjdCBNSVBTX0JPTklUTzY0CisJc2VsZWN0IE1JUFNfQ1BVX1NDQUNIRQogCXNlbGVjdCBNSVBTX0dUNjQxMjAKIAlzZWxlY3QgTUlQU19NU0MKIAlzZWxlY3QgU1dBUF9JT19TUEFDRQpAQCAtMzM2LDYgKzMzOCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX01VTFRJVEhSRUFESU5HCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNSVBTIFRlY2hub2xvZ2llcyBNYWx0YSBldmFsdWF0aW9uCiAJICBib2FyZC4KQEAgLTM1OCw3ICszNjEsNyBAQAogCSAgYm9hcmQuCiAKIGNvbmZpZyBXUl9QUE1DCi0JYm9vbCAiU3VwcG9ydCBmb3IgV2luZCBSaXZlciBQUE1DIGJvYXJkIgorCWJvb2wgIldpbmQgUml2ZXIgUFBNQyBib2FyZCIKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVApAQCAtNTM2LDYgKzUzOSw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAogCWhlbHAKIAkgIFlvc2VtaXRlIGlzIGFuIGV2YWx1YXRpb24gYm9hcmQgZm9yIHRoZSBSTTkwMDB4MiBwcm9jZXNzb3IKIAkgIG1hbnVmYWN0dXJlZCBieSBQTUMtU2llcnJhLgpAQCAtNTkwLDYgKzU5NCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfU01QCiAJaGVscAogCSAgVGhpcyBhcmUgdGhlIFNHSSBJbmR5LCBDaGFsbGVuZ2UgUyBhbmQgSW5kaWdvMiwgYXMgd2VsbCBhcyBjZXJ0YWluCiAJICBPRU0gdmFyaWFudHMgbGlrZSB0aGUgVGFuZGVtIENNTiBCMDA2Uy4gVG8gY29tcGlsZSBhIExpbnV4IGtlcm5lbApAQCAtNjAxLDYgKzYwNiw3IEBACiAJc2VsZWN0IEFSQzY0CiAJc2VsZWN0IEJPT1RfRUxGNjQKIAlzZWxlY3QgRE1BX0lQMjcKKwlzZWxlY3QgRUFSTFlfUFJJTlRLCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgUENJX0RPTUFJTlMKIAlzZWxlY3QgU1lTX0hBU19DUFVfUjEwMDAwCkBAIC0xMjQ5LDcgKzEyNTUsNyBAQAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJaGVscAogCSAgTUlQUyBUZWNobm9sb2dpZXMgUjYwMDAgYW5kIFI2MDAwQSBzZXJpZXMgcHJvY2Vzc29ycy4gIE5vdGUgdGhlc2UKLQkgIHByb2Nlc3NvcnMgYXJlIGV4dHJlbWx5IHJhcmUgYW5kIHRoZSBzdXBwb3J0IGZvciB0aGVtIGlzIGluY29tcGxldGUuCisJICBwcm9jZXNzb3JzIGFyZSBleHRyZW1lbHkgcmFyZSBhbmQgdGhlIHN1cHBvcnQgZm9yIHRoZW0gaXMgaW5jb21wbGV0ZS4KIAogY29uZmlnIENQVV9ORVZBREEKIAlib29sICJSTTUyeHgiCkBAIC0xMzcwLDcgKzEzNzYsNyBAQAogZW5kbWVudQogCiAjCi0jIFRoZXNlIHR3byBpbmRpY2F0ZSBhbnkgbGV2ZWxvZiB0aGUgTUlQUzMyIGFuZCBNSVBTNjQgYXJjaGl0ZWN0dXJlCisjIFRoZXNlIHR3byBpbmRpY2F0ZSBhbnkgbGV2ZWwgb2YgdGhlIE1JUFMzMiBhbmQgTUlQUzY0IGFyY2hpdGVjdHVyZQogIwogY29uZmlnIENQVV9NSVBTMzIKIAlib29sCkBAIC0xMzgxLDcgKzEzODcsNyBAQAogCWRlZmF1bHQgeSBpZiBDUFVfTUlQUzY0X1IxIHx8IENQVV9NSVBTNjRfUjIKIAogIwotIyBUaGVzZSB0d28gaW5kaWNhdGUgdGhlIHJldmlzaW9uIG9mIHRoZSBhcmNoaXRlY3R1cmUsIGVpdGhlciAzMiBib3QgNjQgYml0LgorIyBUaGVzZSB0d28gaW5kaWNhdGUgdGhlIHJldmlzaW9uIG9mIHRoZSBhcmNoaXRlY3R1cmUsIGVpdGhlciBSZWxlYXNlIDEgb3IgUmVsZWFzZSAyCiAjCiBjb25maWcgQ1BVX01JUFNSMQogCWJvb2wKQEAgLTE0NzQsNiArMTQ4MCwxMyBAQAogCWJvb2wKIAlzZWxlY3QgQk9BUkRfU0NBQ0hFCiAKKyMKKyMgU3VwcG9ydCBmb3IgYSBNSVBTMzIgLyBNSVBTNjQgc3R5bGUgUy1jYWNoZXMKKyMKK2NvbmZpZyBNSVBTX0NQVV9TQ0FDSEUKKwlib29sCisJc2VsZWN0IEJPQVJEX1NDQUNIRQorCiBjb25maWcgUjUwMDBfQ1BVX1NDQUNIRQogCWJvb2wKIAlzZWxlY3QgQk9BUkRfU0NBQ0hFCkBAIC0xNDkzLDMyICsxNTA2LDU3IEBACiBjb25maWcgQ1BVX0hBU19QUkVGRVRDSAogCWJvb2wKIAotY29uZmlnIE1JUFNfTVQKLQlib29sICJFbmFibGUgTUlQUyBNVCIKLQogY2hvaWNlCiAJcHJvbXB0ICJNSVBTIE1UIG9wdGlvbnMiCi0JZGVwZW5kcyBvbiBNSVBTX01UCisKK2NvbmZpZyBNSVBTX01UX0RJU0FCTEVECisJYm9vbCAiRGlzYWJsZSBtdWx0aXRocmVhZGluZyBzdXBwb3J0LiIKKwloZWxwCisJICBVc2UgdGhpcyBvcHRpb24gaWYgeW91ciB3b3JrbG9hZCBjYW4ndCB0YWtlIGFkdmFudGFnZSBvZgorCSAgTUlQUyBoYXJkd2FyZSBtdWx0aXRocmVhZGluZyBzdXBwb3J0LiAgT24gc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUKKwkgIHRoZSBvcHRpb24gb2YgYW4gTVQtZW5hYmxlZCBwcm9jZXNzb3IgdGhpcyBvcHRpb24gd2lsbCBiZSB0aGUgb25seQorCSAgb3B0aW9uIGluIHRoaXMgbWVudS4KIAogY29uZmlnIE1JUFNfTVRfU01UQwogCWJvb2wgIlNNVEM6IFVzZSBhbGwgVENzIG9uIGFsbCBWUEVzIGZvciBTTVAiCisJZGVwZW5kcyBvbiBDUFVfTUlQUzMyX1IyCisJI2RlcGVuZHMgb24gQ1BVX01JUFM2NF9SMgkJIyBvbmNlIHRoZXJlIGlzIGhhcmR3YXJlIC4uLgorCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX01VTFRJVEhSRUFESU5HCiAJc2VsZWN0IENQVV9NSVBTUjJfSVJRX1ZJCiAJc2VsZWN0IENQVV9NSVBTUjJfU1JTCisJc2VsZWN0IE1JUFNfTVQKIAlzZWxlY3QgU01QCisJaGVscAorCSAgVGhpcyBpcyBhIGtlcm5lbCBtb2RlbCB3aGljaCBpcyBrbm93biBhIFNNVEMgb3IgbGF0ZWx5IGhhcyBiZWVuCisJICBtYXJrZXRlc2VkIGludG8gU01WUC4KIAogY29uZmlnIE1JUFNfTVRfU01QCiAJYm9vbCAiVXNlIDEgVEMgb24gZWFjaCBhdmFpbGFibGUgVlBFIGZvciBTTVAiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfTVVMVElUSFJFQURJTkcKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKKwlzZWxlY3QgQ1BVX01JUFNSMl9TUlMKKwlzZWxlY3QgTUlQU19NVAogCXNlbGVjdCBTTVAKKwloZWxwCisJICBUaGlzIGlzIGEga2VybmVsIG1vZGVsIHdoaWNoIGlzIGFsc28ga25vd24gYSBWU01QIG9yIGxhdGVseQorCSAgaGFzIGJlZW4gbWFya2V0ZXNlZCBpbnRvIFNNVlAuCiAKIGNvbmZpZyBNSVBTX1ZQRV9MT0FERVIKIAlib29sICJWUEUgbG9hZGVyIHN1cHBvcnQuIgotCWRlcGVuZHMgb24gTUlQU19NVAorCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX01VTFRJVEhSRUFESU5HCisJc2VsZWN0IE1JUFNfTVQKIAloZWxwCiAJICBJbmNsdWRlcyBhIGxvYWRlciBmb3IgbG9hZGluZyBhbiBlbGYgcmVsb2NhdGFibGUgb2JqZWN0CiAJICBvbnRvIGFub3RoZXIgVlBFIGFuZCBydW5uaW5nIGl0LgogCiBlbmRjaG9pY2UKIAorY29uZmlnIE1JUFNfTVQKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfTVVMVElUSFJFQURJTkcKKwlib29sCisKIGNvbmZpZyBNSVBTX01UX0ZQQUZGCiAJYm9vbCAiRHluYW1pYyBGUFUgYWZmaW5pdHkgZm9yIEZQLWludGVuc2l2ZSB0aHJlYWRzIgogCWRlcGVuZHMgb24gTUlQU19NVApAQCAtMTU3NSwzMiArMTYxMywyMyBAQAogY29uZmlnIENQVV9IQVNfV0IKIAlib29sCiAKKyMKKyMgVmVjdG9yZWQgaW50ZXJydXB0IG1vZGUgaXMgYW4gUjIgZmVhdHVyZQorIwogY29uZmlnIENQVV9NSVBTUjJfSVJRX1ZJCi0JYm9vbCAiVmVjdG9yZWQgaW50ZXJydXB0IG1vZGUiCi0JZGVwZW5kcyBvbiBDUFVfTUlQU1IyCi0JaGVscAotCSAgIFZlY3RvcmVkIGludGVycnVwdCBtb2RlIGFsbG93aW5nIGZhc3RlciBkaXNwYXRjaGluZyBvZiBpbnRlcnJ1cHRzLgotCSAgIFRoZSBib2FyZCBzdXBwb3J0IGNvZGUgbmVlZHMgdG8gYmUgd3JpdHRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzCi0JICAgbW9kZS4gIENvbXBhdGliaWxpdHkgY29kZSBpcyBpbmNsdWRlZCB0byBhbGxvdyB0aGUga2VybmVsIHRvIHJ1biBvbgotCSAgIGEgQ1BVIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB2ZWN0b3JlZCBpbnRlcnJ1cHRzLiAgSXQncyBzYWZlIHRvCi0JICAgc2F5IFkgaGVyZS4KKwlib29sCiAKKyMKKyMgRXh0ZW5kZWQgaW50ZXJydXB0IG1vZGUgaXMgYW4gUjIgZmVhdHVyZQorIwogY29uZmlnIENQVV9NSVBTUjJfSVJRX0VJCi0JYm9vbCAiRXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgbW9kZSIKLQlkZXBlbmRzIG9uIENQVV9NSVBTUjIKLQloZWxwCi0JICAgRXh0ZW5kZWQgaW50ZXJydXB0IG1vZGUgdGFrZXMgYWR2YW50YWdlIG9mIGFuIGV4dGVybmFsIGludGVycnVwdAotCSAgIGNvbnRyb2xsZXIgdG8gYWxsb3cgZmFzdCBkaXNwYXRjaGluZyBmcm9tIG1hbnkgcG9zc2libGUgaW50ZXJydXB0Ci0JICAgc291cmNlcy4gU2F5IE4gdW5sZXNzIHlvdSBrbm93IHRoYXQgZXh0ZXJuYWwgaW50ZXJydXB0IHN1cHBvcnQgaXMKLQkgICByZXF1aXJlZC4KKwlib29sCiAKKyMKKyMgU2hhZG93IHJlZ2lzdGVycyBhcmUgYW4gUjIgZmVhdHVyZQorIwogY29uZmlnIENQVV9NSVBTUjJfU1JTCi0JYm9vbCAiTWFrZSBzaGFkb3cgc2V0IHJlZ2lzdGVycyBhdmFpbGFibGUgZm9yIGludGVycnVwdCBoYW5kbGVycyIKLQlkZXBlbmRzIG9uIENQVV9NSVBTUjJfSVJRX1ZJIHx8IENQVV9NSVBTUjJfSVJRX0VJCi0JaGVscAotCSAgIEFsbG93IHRoZSBrZXJuZWwgdG8gdXNlIHNoYWRvdyByZWdpc3RlciBzZXRzIGZvciBmYXN0IGludGVycnVwdHMuCi0JICAgSW50ZXJydXB0IGhhbmRsZXJzIG11c3QgYmUgc3BlY2lhbGx5IHdyaXR0ZW4gdG8gdXNlIHNoYWRvdyBzZXRzLgotCSAgIFNheSBOIHVubGVzcyB5b3Uga25vdyB0aGF0IHNoYWRvdyByZWdpc3RlciBzZXQgdXBwb3J0IGlzIG5lZWRlZC4KKwlib29sCiAKIGNvbmZpZyBDUFVfSEFTX1NZTkMKIAlib29sCkBAIC0xNjE4LDYgKzE2NDcsMTEgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBJUlFfUEVSX0NQVQorCWRlcGVuZHMgb24gU01QCisJYm9vbAorCWRlZmF1bHQgeQorCiAjCiAjIC0gSGlnaG1lbSBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgMzItYml0IGtlcm5lbC4KICMgLSBUaGUgY3VycmVudCBoaWdobWVtIGNvZGUgd2lsbCBvbmx5IHdvcmsgcHJvcGVybHkgb24gcGh5c2ljYWxseSBpbmRleGVkCkBAIC0xNjc2LDggKzE3MTAsOCBAQAogCiBjb25maWcgU01QCiAJYm9vbCAiTXVsdGktUHJvY2Vzc2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1JNOTAwMCB8fCAoKFNJQllURV9CQ00xeDgwIHx8IFNJQllURV9CQ00xeDU1IHx8IFNJQllURV9TQjEyNTAgfHwgUUVNVSkgJiYgIVNJQllURV9TVEFOREFMT05FKSB8fCBTR0lfSVAyNyB8fCBNSVBTX01UX1NNUCB8fCBNSVBTX01UX1NNVEMKLQktLS1oZWxwLS0tCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfU01QCisJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4gSWYgeW91IGhhdmUKIAkgIGEgc3lzdGVtIHdpdGggb25seSBvbmUgQ1BVLCBsaWtlIG1vc3QgcGVyc29uYWwgY29tcHV0ZXJzLCBzYXkgTi4gSWYKIAkgIHlvdSBoYXZlIGEgc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUsIHNheSBZLgpAQCAtMTY5Niw2ICsxNzMwLDkgQEAKIAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAorY29uZmlnIFNZU19TVVBQT1JUU19TTVAKKwlib29sCisKIGNvbmZpZyBOUl9DUFVTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTY0KSIKIAlyYW5nZSAyIDY0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggZDU5MzAxNC4uZWJiYjlhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMzc0LDYgKzM3NCw3IEBACiBjZmxhZ3MtJChDT05GSUdfUE1DX1lPU0VNSVRFKQkrPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC15b3NlbWl0ZQogbG9hZC0kKENPTkZJR19QTUNfWU9TRU1JVEUpCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAogCisjCiAjIFFlbXUgc2ltdWxhdGluZyBNSVBTMzIgNEtjCiAjCiBjb3JlLSQoQ09ORklHX1FFTVUpCQkrPSBhcmNoL21pcHMvcWVtdS8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcmMvaWRlbnRpZnkuYyBiL2FyY2gvbWlwcy9hcmMvaWRlbnRpZnkuYwppbmRleCAxYmQ2MTk5Li4zYmE3YzQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXJjL2lkZW50aWZ5LmMKKysrIGIvYXJjaC9taXBzL2FyYy9pZGVudGlmeS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9hdTF4eHhfaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9hdTF4eHhfaXJxbWFwLmMKaW5kZXggNWExZTM2OC4uN2FjZmU5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vYXUxeHh4X2lycW1hcC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2F1MXh4eF9pcnFtYXAuYwpAQCAtMjUsNyArMjUsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmRtYS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZGJkbWEuYwppbmRleCA2ZWUwOTBiLi45ODI0NGQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RiZG1hLmMKQEAgLTMwLDcgKzMwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTI5MCw3ICsyODksNyBAQAogCQkJCS8qIElmIGttYWxsb2MgZmFpbHMsIGl0IGlzIGNhdWdodCBiZWxvdyBzYW1lCiAJCQkJICogYXMgYSBjaGFubmVsIG5vdCBhdmFpbGFibGUuCiAJCQkJICovCi0JCQkJY3RwID0ga21hbGxvYyhzaXplb2YoY2hhbl90YWJfdCksIEdGUF9LRVJORUwpOworCQkJCWN0cCA9IGttYWxsb2Moc2l6ZW9mKGNoYW5fdGFiX3QpLCBHRlBfQVRPTUlDKTsKIAkJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC03MzAsNiArNzI5LDggQEAKIAlyZXR1cm4gcnY7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGF1MXh4eF9kYmRtYV9nZXRfZGVzdCk7CisKIHZvaWQKIGF1MXh4eF9kYmRtYV9zdG9wKHUzMiBjaGFuaWQpCiB7CkBAIC04MjEsNiArODIyLDggQEAKIAlyZXR1cm4gcnY7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGF1MXh4eF9nZXRfZG1hX3Jlc2lkdWUpOworCiB2b2lkCiBhdTF4eHhfZGJkbWFfY2hhbl9mcmVlKHUzMiBjaGFuaWQpCiB7CkBAIC04ODksNyArODkyLDcgQEAKIAkjZXJyb3IgVW5rbm93biBBdTF4MDAgU09DCiAjZW5kaWYKIAotCWlmIChyZXF1ZXN0X2lycShpcnFfbnIsIGRiZG1hX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCWlmIChyZXF1ZXN0X2lycShpcnFfbnIsIGRiZG1hX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCSJBdTF4eHggZGJkbWEiLCAodm9pZCAqKWRiZG1hX2dwdHIpKQogCQlwcmludGsoIkNhbid0IGdldCAxNTUwIGRiZG1hIGlycSIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZGJnX2lvLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmdfaW8uYwppbmRleCA3YmM3NjhlLi4wYTUwYWY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmdfaW8uYwpAQCAtMSw1ICsxLDQgQEAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZG1hLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kbWEuYwppbmRleCAxZDgyZjIyLi5mYjdjNDdjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kbWEuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kbWEuYwpAQCAtMzAsNyArMzAsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9ncGlvLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9ncGlvLmMKaW5kZXggNWY1OTE1Yi4uY2U1NTI5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2dwaW8uYwpAQCAtMTksNyArMTksNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXUxMDAwLmg+CiAjaW5jbHVkZSA8YXUxeHh4X2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKaW5kZXggYWZlMDVlYy4uMjlkNmY4MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtMzEwLDcgKzMwOSw3IEBACiAJICogY2FuIGF2b2lkIGl0LiAgLS1jZ3JheQogCSovCiAJYWN0aW9uLmRldl9pZCA9IGhhbmRsZXI7Ci0JYWN0aW9uLmZsYWdzID0gU0FfSU5URVJSVVBUOworCWFjdGlvbi5mbGFncyA9IElSUUZfRElTQUJMRUQ7CiAJY3B1c19jbGVhcihhY3Rpb24ubWFzayk7CiAJYWN0aW9uLm5hbWUgPSAiQXUxeHh4IFRPWSI7CiAJYWN0aW9uLmhhbmRsZXIgPSBoYW5kbGVyOwpAQCAtMzMzLDMxICszMzIsMzEgQEAKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcyQ0xSKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcxQ0xSKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcwU0VUKTsKLQkJCQlpcnFfZGVzY1tpcnFfbnJdLmhhbmRsZXIgPSAmcmlzZV9lZGdlX2lycV90eXBlOworCQkJCWlycV9kZXNjW2lycV9ucl0uY2hpcCA9ICZyaXNlX2VkZ2VfaXJxX3R5cGU7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElOVENfSU5UX0ZBTExfRURHRTogLyogMDoxOjAgKi8KIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcyQ0xSKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcxU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcwQ0xSKTsKLQkJCQlpcnFfZGVzY1tpcnFfbnJdLmhhbmRsZXIgPSAmZmFsbF9lZGdlX2lycV90eXBlOworCQkJCWlycV9kZXNjW2lycV9ucl0uY2hpcCA9ICZmYWxsX2VkZ2VfaXJxX3R5cGU7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElOVENfSU5UX1JJU0VfQU5EX0ZBTExfRURHRTogLyogMDoxOjEgKi8KIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcyQ0xSKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcxU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcwU0VUKTsKLQkJCQlpcnFfZGVzY1tpcnFfbnJdLmhhbmRsZXIgPSAmZWl0aGVyX2VkZ2VfaXJxX3R5cGU7CisJCQkJaXJxX2Rlc2NbaXJxX25yXS5jaGlwID0gJmVpdGhlcl9lZGdlX2lycV90eXBlOwogCQkJCWJyZWFrOwogCQkJY2FzZSBJTlRDX0lOVF9ISUdIX0xFVkVMOiAvKiAxOjA6MSAqLwogCQkJCWF1X3dyaXRlbCgxPDwoaXJxX25yLTMyKSwgSUMxX0NGRzJTRVQpOwogCQkJCWF1X3dyaXRlbCgxPDwoaXJxX25yLTMyKSwgSUMxX0NGRzFDTFIpOwogCQkJCWF1X3dyaXRlbCgxPDwoaXJxX25yLTMyKSwgSUMxX0NGRzBTRVQpOwotCQkJCWlycV9kZXNjW2lycV9ucl0uaGFuZGxlciA9ICZsZXZlbF9pcnFfdHlwZTsKKwkJCQlpcnFfZGVzY1tpcnFfbnJdLmNoaXAgPSAmbGV2ZWxfaXJxX3R5cGU7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElOVENfSU5UX0xPV19MRVZFTDogLyogMToxOjAgKi8KIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcyU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcxU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcwQ0xSKTsKLQkJCQlpcnFfZGVzY1tpcnFfbnJdLmhhbmRsZXIgPSAmbGV2ZWxfaXJxX3R5cGU7CisJCQkJaXJxX2Rlc2NbaXJxX25yXS5jaGlwID0gJmxldmVsX2lycV90eXBlOwogCQkJCWJyZWFrOwogCQkJY2FzZSBJTlRDX0lOVF9ESVNBQkxFRDogLyogMDowOjAgKi8KIAkJCQlhdV93cml0ZWwoMTw8KGlycV9uci0zMiksIElDMV9DRkcwQ0xSKTsKQEAgLTM4NSwzMSArMzg0LDMxIEBACiAJCQkJYXVfd3JpdGVsKDE8PGlycV9uciwgSUMwX0NGRzJDTFIpOwogCQkJCWF1X3dyaXRlbCgxPDxpcnFfbnIsIElDMF9DRkcxQ0xSKTsKIAkJCQlhdV93cml0ZWwoMTw8aXJxX25yLCBJQzBfQ0ZHMFNFVCk7Ci0JCQkJaXJxX2Rlc2NbaXJxX25yXS5oYW5kbGVyID0gJnJpc2VfZWRnZV9pcnFfdHlwZTsKKwkJCQlpcnFfZGVzY1tpcnFfbnJdLmNoaXAgPSAmcmlzZV9lZGdlX2lycV90eXBlOwogCQkJCWJyZWFrOwogCQkJY2FzZSBJTlRDX0lOVF9GQUxMX0VER0U6IC8qIDA6MTowICovCiAJCQkJYXVfd3JpdGVsKDE8PGlycV9uciwgSUMwX0NGRzJDTFIpOwogCQkJCWF1X3dyaXRlbCgxPDxpcnFfbnIsIElDMF9DRkcxU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8aXJxX25yLCBJQzBfQ0ZHMENMUik7Ci0JCQkJaXJxX2Rlc2NbaXJxX25yXS5oYW5kbGVyID0gJmZhbGxfZWRnZV9pcnFfdHlwZTsKKwkJCQlpcnFfZGVzY1tpcnFfbnJdLmNoaXAgPSAmZmFsbF9lZGdlX2lycV90eXBlOwogCQkJCWJyZWFrOwogCQkJY2FzZSBJTlRDX0lOVF9SSVNFX0FORF9GQUxMX0VER0U6IC8qIDA6MToxICovCiAJCQkJYXVfd3JpdGVsKDE8PGlycV9uciwgSUMwX0NGRzJDTFIpOwogCQkJCWF1X3dyaXRlbCgxPDxpcnFfbnIsIElDMF9DRkcxU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8aXJxX25yLCBJQzBfQ0ZHMFNFVCk7Ci0JCQkJaXJxX2Rlc2NbaXJxX25yXS5oYW5kbGVyID0gJmVpdGhlcl9lZGdlX2lycV90eXBlOworCQkJCWlycV9kZXNjW2lycV9ucl0uY2hpcCA9ICZlaXRoZXJfZWRnZV9pcnFfdHlwZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgSU5UQ19JTlRfSElHSF9MRVZFTDogLyogMTowOjEgKi8KIAkJCQlhdV93cml0ZWwoMTw8aXJxX25yLCBJQzBfQ0ZHMlNFVCk7CiAJCQkJYXVfd3JpdGVsKDE8PGlycV9uciwgSUMwX0NGRzFDTFIpOwogCQkJCWF1X3dyaXRlbCgxPDxpcnFfbnIsIElDMF9DRkcwU0VUKTsKLQkJCQlpcnFfZGVzY1tpcnFfbnJdLmhhbmRsZXIgPSAmbGV2ZWxfaXJxX3R5cGU7CisJCQkJaXJxX2Rlc2NbaXJxX25yXS5jaGlwID0gJmxldmVsX2lycV90eXBlOwogCQkJCWJyZWFrOwogCQkJY2FzZSBJTlRDX0lOVF9MT1dfTEVWRUw6IC8qIDE6MTowICovCiAJCQkJYXVfd3JpdGVsKDE8PGlycV9uciwgSUMwX0NGRzJTRVQpOwogCQkJCWF1X3dyaXRlbCgxPDxpcnFfbnIsIElDMF9DRkcxU0VUKTsKIAkJCQlhdV93cml0ZWwoMTw8aXJxX25yLCBJQzBfQ0ZHMENMUik7Ci0JCQkJaXJxX2Rlc2NbaXJxX25yXS5oYW5kbGVyID0gJmxldmVsX2lycV90eXBlOworCQkJCWlycV9kZXNjW2lycV9ucl0uY2hpcCA9ICZsZXZlbF9pcnFfdHlwZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgSU5UQ19JTlRfRElTQUJMRUQ6IC8qIDA6MDowICovCiAJCQkJYXVfd3JpdGVsKDE8PGlycV9uciwgSUMwX0NGRzBDTFIpOwpAQCAtNTg1LDEzICs1ODQsMTMgQEAKICAqIGF1X3NsZWVwIGZ1bmN0aW9uIGluIHBvd2VyLmMuLi4uLm1heWJlIEkgc2hvdWxkIGp1c3QgcG1fcmVnaXN0ZXIoKQogICogdGhlbSBpbnN0ZWFkPwogICovCi1zdGF0aWMgdWludAlzbGVlcF9pbnRjdGxfY29uZmlnMFsyXTsKLXN0YXRpYyB1aW50CXNsZWVwX2ludGN0bF9jb25maWcxWzJdOwotc3RhdGljIHVpbnQJc2xlZXBfaW50Y3RsX2NvbmZpZzJbMl07Ci1zdGF0aWMgdWludAlzbGVlcF9pbnRjdGxfc3JjWzJdOwotc3RhdGljIHVpbnQJc2xlZXBfaW50Y3RsX2Fzc2lnblsyXTsKLXN0YXRpYyB1aW50CXNsZWVwX2ludGN0bF93YWtlWzJdOwotc3RhdGljIHVpbnQJc2xlZXBfaW50Y3RsX21hc2tbMl07CitzdGF0aWMgdW5zaWduZWQgaW50CXNsZWVwX2ludGN0bF9jb25maWcwWzJdOworc3RhdGljIHVuc2lnbmVkIGludAlzbGVlcF9pbnRjdGxfY29uZmlnMVsyXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfaW50Y3RsX2NvbmZpZzJbMl07CitzdGF0aWMgdW5zaWduZWQgaW50CXNsZWVwX2ludGN0bF9zcmNbMl07CitzdGF0aWMgdW5zaWduZWQgaW50CXNsZWVwX2ludGN0bF9hc3NpZ25bMl07CitzdGF0aWMgdW5zaWduZWQgaW50CXNsZWVwX2ludGN0bF93YWtlWzJdOworc3RhdGljIHVuc2lnbmVkIGludAlzbGVlcF9pbnRjdGxfbWFza1syXTsKIAogdm9pZAogc2F2ZV9hdTF4eHhfaW50Y3RsKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BjaS5jCmluZGV4IGIxMzkyYWIuLmRhNTkxZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BjaS5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggMzI3MDJlNS4uOGZkMjAzZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC03LDcgKzcsNiBAQAogICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wb3dlci5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcG93ZXIuYwppbmRleCBmNDkyNjMxLi43NTA0YTYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wb3dlci5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Bvd2VyLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX2xlZ2FjeS5oPgpAQCAtODAsMTcgKzc5LDE3IEBACiAgKiBXZSBvbmx5IGhhdmUgdG8gc2F2ZS9yZXN0b3JlIHJlZ2lzdGVycyB0aGF0IGFyZW4ndCBvdGhlcndpc2UKICAqIGRvbmUgYXMgcGFydCBvZiBhIGRyaXZlciBwbV8qIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdWludAlzbGVlcF9hdXhfcGxsX2NudHJsOwotc3RhdGljIHVpbnQJc2xlZXBfY3B1X3BsbF9jbnRybDsKLXN0YXRpYyB1aW50CXNsZWVwX3Bpbl9mdW5jdGlvbjsKLXN0YXRpYyB1aW50CXNsZWVwX3VhcnQwX2ludGVuOwotc3RhdGljIHVpbnQJc2xlZXBfdWFydDBfZmlmb2N0bDsKLXN0YXRpYyB1aW50CXNsZWVwX3VhcnQwX2xpbmVjdGw7Ci1zdGF0aWMgdWludAlzbGVlcF91YXJ0MF9jbGtkaXY7Ci1zdGF0aWMgdWludAlzbGVlcF91YXJ0MF9lbmFibGU7Ci1zdGF0aWMgdWludAlzbGVlcF91c2Job3N0X2VuYWJsZTsKLXN0YXRpYyB1aW50CXNsZWVwX3VzYmRldl9lbmFibGU7Ci1zdGF0aWMgdWludAlzbGVlcF9zdGF0aWNfbWVtY3Rscls0XVszXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfYXV4X3BsbF9jbnRybDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfY3B1X3BsbF9jbnRybDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfcGluX2Z1bmN0aW9uOworc3RhdGljIHVuc2lnbmVkIGludAlzbGVlcF91YXJ0MF9pbnRlbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfdWFydDBfZmlmb2N0bDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfdWFydDBfbGluZWN0bDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJc2xlZXBfdWFydDBfY2xrZGl2Oworc3RhdGljIHVuc2lnbmVkIGludAlzbGVlcF91YXJ0MF9lbmFibGU7CitzdGF0aWMgdW5zaWduZWQgaW50CXNsZWVwX3VzYmhvc3RfZW5hYmxlOworc3RhdGljIHVuc2lnbmVkIGludAlzbGVlcF91c2JkZXZfZW5hYmxlOworc3RhdGljIHVuc2lnbmVkIGludAlzbGVlcF9zdGF0aWNfbWVtY3Rscls0XVszXTsKIAogLyogRGVmaW5lIHRoaXMgdG8gY2F1c2UgdGhlIHZhbHVlIHlvdSB3cml0ZSB0byAvcHJvYy9zeXMvcG0vc2xlZXAgdG8KICAqIHNldCB0aGUgVE9ZIHRpbWVyIGZvciB0aGUgYW1vdW50IG9mIHRpbWUgeW91IHdhbnQgdG8gc2xlZXAuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9yZXNldC5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcmVzZXQuYwppbmRleCBjOTNhZjIyLi5kZTU0NDdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Jlc2V0LmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCmluZGV4IDk3MTY1YjYuLmNjNTEzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYwpAQCAtMjUsNyArMjUsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKaW5kZXggODQyZTFiNS4uN2U5ODhiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwpAQCAtMzMsNyArMzMsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi91c2JkZXYuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3VzYmRldi5jCmluZGV4IDJjYWI3NjIuLjYzYmNiM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3VzYmRldi5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3VzYmRldi5jCkBAIC0xNDY1LDE0ICsxNDY1LDE0IEBACiAJICovCiAKIAkvKiByZXF1ZXN0IHRoZSBVU0IgZGV2aWNlIHRyYW5zZmVyIGNvbXBsZXRlIGludGVycnVwdCAqLwotCWlmIChyZXF1ZXN0X2lycShBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCByZXFfc3VzX2ludHIsIFNBX0lOVEVSUlVQVCwKKwlpZiAocmVxdWVzdF9pcnEoQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwgcmVxX3N1c19pbnRyLCBJUlFGX0RJU0FCTEVELAogCQkJIlVTQmRldiByZXEiLCAmdXNiZGV2KSkgewogCQllcnIoIkNhbid0IGdldCBkZXZpY2UgcmVxdWVzdCBpbnRyIik7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CiAJfQogCS8qIHJlcXVlc3QgdGhlIFVTQiBkZXZpY2Ugc3VzcGVuZCBpbnRlcnJ1cHQgKi8KLQlpZiAocmVxdWVzdF9pcnEoQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwgcmVxX3N1c19pbnRyLCBTQV9JTlRFUlJVUFQsCisJaWYgKHJlcXVlc3RfaXJxKEFVMTAwMF9VU0JfREVWX1NVU19JTlQsIHJlcV9zdXNfaW50ciwgSVJRRl9ESVNBQkxFRCwKIAkJCSJVU0JkZXYgc3VzIiwgJnVzYmRldikpIHsKIAkJZXJyKCJDYW4ndCBnZXQgZGV2aWNlIHN1c3BlbmQgaW50ciIpOwogCQlyZXQgPSAtRU5YSU87CkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogCWlmICgoZXAwLT5pbmRtYSA9IHJlcXVlc3RfYXUxMDAwX2RtYShlcF9kbWFfaWRbMF0uaWQsCiAJCQkJCSAgICAgZXBfZG1hX2lkWzBdLnN0ciwKIAkJCQkJICAgICBkbWFfZG9uZV9lcDBfaW50ciwKLQkJCQkJICAgICBTQV9JTlRFUlJVUFQsCisJCQkJCSAgICAgSVJRRl9ESVNBQkxFRCwKIAkJCQkJICAgICAmdXNiZGV2KSkgPCAwKSB7CiAJCWVycigiQ2FuJ3QgZ2V0ICVzIERNQSIsIGVwX2RtYV9pZFswXS5zdHIpOwogCQlyZXQgPSAtRU5YSU87CkBAIC0xNTE2LDcgKzE1MTYsNyBAQAogCQkJCXJlcXVlc3RfYXUxMDAwX2RtYShlcF9kbWFfaWRbZXAtPmFkZHJlc3NdLmlkLAogCQkJCQkJICAgZXBfZG1hX2lkW2VwLT5hZGRyZXNzXS5zdHIsCiAJCQkJCQkgICBkbWFfZG9uZV9lcF9pbnRyLAotCQkJCQkJICAgU0FfSU5URVJSVVBULAorCQkJCQkJICAgSVJRRl9ESVNBQkxFRCwKIAkJCQkJCSAgICZ1c2JkZXYpOwogCQkJaWYgKGVwLT5pbmRtYSA8IDApIHsKIAkJCQllcnIoIkNhbid0IGdldCAlcyBETUEiLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jc2IyNTAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY3NiMjUwL2JvYXJkX3NldHVwLmMKaW5kZXggMWM1NWM1Zi4uMzQ4YzMwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jc2IyNTAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NzYjI1MC9ib2FyZF9zZXR1cC5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY3NiMjUwL2luaXQuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY3NiMjUwL2luaXQuYwppbmRleCBhNDg5OGIxLi44M2YxYjMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NzYjI1MC9pbml0LmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jc2IyNTAvaW5pdC5jCkBAIC02NSw5ICs2NSw5IEBACiAKIAkvKiBXZSB1c2UgYTAgYW5kIGExIHRvIHBhc3MgaW5pdHJkIHN0YXJ0IGFuZCBzaXplLgogCSovCi0JaWYgKCgodWludCkgYXJnYyA+IDApICYmICgodWludClhcmd2ID4gMCkpIHsKLQkJbXlfaW5pdHJkX3N0YXJ0ID0gKHVpbnQpYXJnYzsKLQkJbXlfaW5pdHJkX3NpemUgPSAodWludClhcmd2OworCWlmICgoKHVuc2lnbmVkIGludCkgYXJnYyA+IDApICYmICgodWludClhcmd2ID4gMCkpIHsKKwkJbXlfaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGludClhcmdjOworCQlteV9pbml0cmRfc2l6ZSA9ICh1bnNpZ25lZCBpbnQpYXJndjsKIAl9CiAKIAkvKiBGaXJzdCBhcmd2IGlzIGlnbm9yZWQuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvYm9hcmRfc2V0dXAuYwppbmRleCBmMDBlYzNiLi43YTc5MjkzZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9ib2FyZF9zZXR1cC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2luaXQuYyBiL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2luaXQuYwppbmRleCA0MWUwNTIyLi4wYTNmMDI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2luaXQuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaXJxbWFwLmMKaW5kZXggMDEzOGM1Yi4uM2U1NzI5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaXJxbWFwLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvbWlyYWdlX3RzLmMgYi9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9taXJhZ2VfdHMuYwppbmRleCBjMjk4NTJjLi4wOTQyZGNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9taXJhZ2VfdHMuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9taXJhZ2VfdHMuYwpAQCAtMzEsNyArMzEsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2h5ZHJvZ2VuMy9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2F1MTAwMC9oeWRyb2dlbjMvYm9hcmRfc2V0dXAuYwppbmRleCAyZWZhZTEwLi5kMDgxNjQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2h5ZHJvZ2VuMy9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvaHlkcm9nZW4zL2JvYXJkX3NldHVwLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9oeWRyb2dlbjMvaW5pdC5jIGIvYXJjaC9taXBzL2F1MTAwMC9oeWRyb2dlbjMvaW5pdC5jCmluZGV4IDAxYWIyODQuLjhmMDJiYjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvaHlkcm9nZW4zL2luaXQuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2h5ZHJvZ2VuMy9pbml0LmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL210eC0xL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYXUxMDAwL210eC0xL2JvYXJkX3NldHVwLmMKaW5kZXggNjM4ZGU3Yi4uZTkxN2U1NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9tdHgtMS9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvbXR4LTEvYm9hcmRfc2V0dXAuYwpAQCAtMjgsNyArMjgsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL3BiMTAwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjEwMDAvYm9hcmRfc2V0dXAuYwppbmRleCAwYjQ4MDdkLi4xY2YxOGUxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9wYjEwMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTAwMC9ib2FyZF9zZXR1cC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxMTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTEwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDEzYzJmNmMuLmRiMjdiOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxMTAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjExMDAvYm9hcmRfc2V0dXAuYwpAQCAtMjMsNyArMjMsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjEyMDAvYm9hcmRfc2V0dXAuYwppbmRleCBhNDViMTc1Li44Yjk1M2I5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvcGIxMjAwL2JvYXJkX3NldHVwLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9wYjEyMDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYwppbmRleCBiYWNjMGM2Li4yZDQ5ZjMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYwpAQCAtMjIsNyArMjIsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC0xNzIsNyArMTcxLDcgQEAKIAogCWZvciAoaXJxX25yID0gUEIxMjAwX0lOVF9CRUdJTjsgaXJxX25yIDw9IFBCMTIwMF9JTlRfRU5EOyBpcnFfbnIrKykKIAl7Ci0JCWlycV9kZXNjW2lycV9ucl0uaGFuZGxlciA9ICZleHRlcm5hbF9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaXJxX25yXS5jaGlwID0gJmV4dGVybmFsX2lycV90eXBlOwogCQlwYjEyMDBfZGlzYWJsZV9pcnEoaXJxX25yKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDMwYmI4NzIuLjFhOWEyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtMjMsNyArMjMsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDFlNTk0MzMuLmFlM2Q2YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9ib2FyZF9zZXR1cC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKaW5kZXggOTExMjFlNS4uYjI4ODE1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgaW50IGlvZGV2X29wZW4oc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZmlsZSAqZikKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoaW9kZXZfaXJxLCBpb2Rldl9pcnFoZGwsIFNBX0lOVEVSUlVQVCwKKwlyZXR1cm4gcmVxdWVzdF9pcnEoaW9kZXZfaXJxLCBpb2Rldl9pcnFoZGwsIElSUUZfRElTQUJMRUQsCiAJCQkgICBpb2Rldl9uYW1lLCAmbWlzY2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3NldHVwLmMKaW5kZXggMDA1YjAyNS4uM2Q3NjcwZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl2b2xhdGlsZSB1MzIgKiBjb25zdCBib290X29jZF9iYXNlID0gKHUzMiAqKSAweGJmN2ZjMDAwOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYyBiL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCmluZGV4IDMwMDc5N2QuLjQ2YzIzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCkBAIC0yLDcgKzIsNiBAQAogICogKEMpIFAuIEhvcnRvbiAyMDA2CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMgYi9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKaW5kZXggY2E3MTlkNi4uYzk5NzE0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYwpAQCAtOSw3ICs5LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBieSBMaWFtIERhdmllcyAobGRhdmllc0BhZ2lsZS50dikKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvY29tbW9uL3Byb20uYwppbmRleCAwMGM2MmMxYy4uZWZlZjBmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9jb21tb24vcHJvbS5jCkBAIC03LDcgKzcsNiBAQAogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTIxLDggKzIwLDYgQEAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewogCXN3aXRjaCAobWlwc19tYWNodHlwZSkgewotCWNhc2UgTUFDSF9ORUNfRERCNTA3NDoJCXJldHVybiAiTkVDIEREQiBWcmMtNTA3NCI7Ci0JY2FzZSBNQUNIX05FQ19EREI1NDc2OgkJcmV0dXJuICJORUMgRERCIFZyYy01NDc2IjsKIAljYXNlIE1BQ0hfTkVDX0REQjU0Nzc6CQlyZXR1cm4gIk5FQyBEREIgVnJjLTU0NzciOwogCWNhc2UgTUFDSF9ORUNfUk9DS0hPUFBFUjoJcmV0dXJuICJORUMgUm9ja2hvcHBlciI7CiAJY2FzZSBNQUNIX05FQ19ST0NLSE9QUEVSSUk6ICAgICByZXR1cm4gIk5FQyBSb2NraG9wcGVySUkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnEuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMKaW5kZXggZGU0MzNjZjkuLjIyZmI5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnEuYwpAQCAtMTAsNyArMTAsNiBAQAogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnFfNTQ3Ny5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9pcnFfNTQ3Ny5jCmluZGV4IDVmY2Q1ZjAuLjYzYzNkNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxXzU0NzcuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycV81NDc3LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ2cmM1NDc3X2lycV9jb250cm9sbGVyOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnZyYzU0NzdfaXJxX2NvbnRyb2xsZXI7CiAJfQogCiAJdnJjNTQ3N19pcnFfYmFzZSA9IGlycV9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9zZXR1cC5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9zZXR1cC5jCmluZGV4IDkzMTY3ZWMuLjQ3YmEwYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L3NldHVwLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2RlYy9pbnQtaGFuZGxlci5TCmluZGV4IGU4ZWM5M2UuLjQ1NWE2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvaW50LWhhbmRsZXIuUworKysgYi9hcmNoL21pcHMvZGVjL2ludC1oYW5kbGVyLlMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIFJld3JpdHRlbiBleHRlbnNpdmVseSBmb3IgY29udHJvbGxlci1kcml2ZW4gSVJRIHN1cHBvcnQKICAqIGJ5IE1hY2llaiBXLiBSb3p5Y2tpLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9pb2FzaWMtaXJxLmMgYi9hcmNoL21pcHMvZGVjL2lvYXNpYy1pcnEuYwppbmRleCBkNWJjYTVkLi5kYTJkYmI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL2lvYXNpYy1pcnEuYworKysgYi9hcmNoL21pcHMvZGVjL2lvYXNpYy1pcnEuYwpAQCAtMTQ0LDEzICsxNDQsMTMgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaW9hc2ljX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmlvYXNpY19pcnFfdHlwZTsKIAl9CiAJZm9yICg7IGkgPCBiYXNlICsgSU9fSVJRX0xJTkVTOyBpKyspIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaW9hc2ljX2RtYV9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZpb2FzaWNfZG1hX2lycV90eXBlOwogCX0KIAogCWlvYXNpY19pcnFfYmFzZSA9IGJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL2tuMDItaXJxLmMgYi9hcmNoL21pcHMvZGVjL2tuMDItaXJxLmMKaW5kZXggODk4YmVkNS4uZDQ0YzAwZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9rbjAyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9kZWMva24wMi1pcnEuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gMDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmtuMDJfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAma24wMl9pcnFfdHlwZTsKIAl9CiAKIAlrbjAyX2lycV9iYXNlID0gYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvcHJvbS9pbml0LmMgYi9hcmNoL21pcHMvZGVjL3Byb20vaW5pdC5jCmluZGV4IDMyYTdjYzcuLmJmMjg1ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvcHJvbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL2RlYy9wcm9tL2luaXQuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OCBIYXJhbGQgS29lcmZnZW4KICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCAgTWFjaWVqIFcuIFJvenlja2kKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMgYi9hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMKaW5kZXggMWVkYWYzMC4uMzAyN2NlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OCBIYXJhbGQgS29lcmZnZW4sIEZyaWVkZXIgU3RyZWZmZXIgYW5kIFBhdWwgTS4gQW50b2luZQogICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAyICBNYWNpZWogVy4gUm96eWNraQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3NldHVwLmMgYi9hcmNoL21pcHMvZGVjL3NldHVwLmMKaW5kZXggOWM3MDdiOS4uMjY4NGYxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9kZWMvc2V0dXAuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBidXNpcnEgPSB7Ci0JLmZsYWdzID0gU0FfSU5URVJSVVBULAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiAJLm5hbWUgPSAiYnVzIGVycm9yIiwKIH07CiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogCWNhc2UgTUFDSF9EUzIzMTAwOgkvKiBEUzIxMDAvRFMzMTAwIFBtaW4vUG1heCAqLwogCQlib2FyZF9iZV9oYW5kbGVyID0gZGVjX2tuMDFfYmVfaGFuZGxlcjsKIAkJYnVzaXJxLmhhbmRsZXIgPSBkZWNfa24wMV9iZV9pbnRlcnJ1cHQ7Ci0JCWJ1c2lycS5mbGFncyB8PSBTQV9TSElSUTsKKwkJYnVzaXJxLmZsYWdzIHw9IElSUUZfU0hBUkVEOwogCQlkZWNfa24wMV9iZV9pbml0KCk7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9EUzUwMDBfMVhYOgkvKiBEUzUwMDAvMXh4IDNtaW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3NldHVwLmMgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9zZXR1cC5jCmluZGV4IGEwNGFlYTYuLjYzOWFkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvc2V0dXAuYwpAQCAtMzIsNyArMzIsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC90aW1lLmMgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC90aW1lLmMKaW5kZXggYmZmNWIxYy4uOGNiZTg0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3RpbWUuYwpAQCAtMzIsNyArMzIsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24vTWFrZWZpbGUKaW5kZXggZWJhNTA1MS4uMWVmNjc2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbi9NYWtlZmlsZQpAQCAtMyw0ICszLDMgQEAKICMKIAogb2JqLXkJIAkJKz0gdGltZS5vCi1vYmotJChDT05GSUdfUENJKQkrPSBwY2kubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL3BjaS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL3BjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWU1NDE5Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbi9wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKiBHYWxpbGVvIEV2YWx1YXRpb24gQm9hcmRzIFBDSSBzdXBwb3J0LgotICoKLSAqIFRoZSBnZW5lcmFsLXB1cnBvc2UgZnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgYW5kIGNvbmZpZ3VyZSB0aGUgR1Q2NDEyMEEncwotICogUENJIHJlZ2lzdGVycyAoZnVuY3Rpb24gbmFtZXMgc3RhcnQgd2l0aCBwY2kwIG9yIHBjaTEpIGFyZSBlaXRoZXIgZGlyZWN0Ci0gKiBjb3BpZXMgb2YgZnVuY3Rpb25zIHdyaXR0ZW4gYnkgR2FsaWxlbyBUZWNobm9sb2d5LCBvciBhcmUgbW9kaWZpY2F0aW9ucwotICogb2YgdGhlaXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aCBMaW51eCAyLjQgdnMgTGludXggMi4yLiAgVGhlc2UgZnVuY3Rpb25zCi0gKiBhcmUgQ29weXJpZ2h0IC0gR2FsaWxlbyBUZWNobm9sb2d5LgotICoKLSAqIE90aGVyIGZ1bmN0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIG90aGVyIE1JUFMgUENJIGltcGxlbWVudGF0aW9ucywgb3Igd2VyZQotICogd3JpdHRlbiBieSBSaWRnZVJ1biwgSW5jLCAgQ29weXJpZ2h0IChDKSAyMDAwIFJpZGdlUnVuLCBJbmMuCi0gKiAgIGdsb25ub25AcmlkZ2VydW4uY29tLCBza3JhbnpAcmlkZ2VydW4uY29tLCBzdGV2ZWpAcmlkZ2VydW4uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLQotI2RlZmluZSBTRUxGIDAKLQotLyoKLSAqIHBjaVhSZWFkQ29uZmlnUmVnICAtIFJlYWQgZnJvbSBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCi0gKiAgICAgICAgICAgICAgICAgICAgLSBNYWtlIHN1cmUgdGhlIEdUIGlzIGNvbmZpZ3VyZWQgYXMgYSBtYXN0ZXIgYmVmb3JlCi0gKiAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nIGZyb20gYW5vdGhlciBkZXZpY2Ugb24gdGhlIFBDSS4KLSAqICAgICAgICAgICAgICAgICAgIC0gVGhlIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgQmlnL0xpdHRsZSBlbmRpYW4gY29udmVyc2lvbi4KLSAqIElOUFVUUzogICByZWdPZmZzZXQ6IFRoZSByZWdpc3RlciBvZmZzZXQgYXMgaXQgYXBlYXJzIGluIHRoZSBHVCBzcGVjIChvciBQQ0kKLSAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlYykKLSAqICAgICAgICAgICBwY2lEZXZOdW06IFRoZSBkZXZpY2UgbnVtYmVyIG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4KLSAqIFJFVFVSTlM6IGRhdGEgLCBpZiB0aGUgZGF0YSA9PSAweGZmZmZmZmZmIGNoZWNrIHRoZSBtYXN0ZXIgYWJvcnQgYml0IGluIHRoZQotICogICAgICAgICAgICAgICAgIGNhdXNlIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyB2YWxpZAotICoKLSAqICBDb25maWd1cmF0aW9uIEFkZHJlc3MgMHhDRjg6Ci0gKgotICogICAgICAgMzEgMzAgICAgMjQgMjMgIDE2IDE1ICAxMSAxMCAgICAgOCA3ICAgICAgMiAgMCAgICAgPD1iaXQgTnVtYmVyCi0gKiAgfGNvbmdpZnxSZXNlcnZlZHwgIEJ1cyB8RGV2aWNlfEZ1bmN0aW9ufFJlZ2lzdGVyfDAwfAotICogIHxFbmFibGV8ICAgICAgICB8TnVtYmVyfE51bWJlcnwgTnVtYmVyIHwgTnVtYmVyIHwgIHwgICAgPD1maWVsZCBOYW1lCi0gKgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHBjaTBSZWFkQ29uZmlnUmVnKGludCBvZmZzZXQsIHN0cnVjdCBwY2lfZGV2ICpkZXZpY2UpCi17Ci0JdW5zaWduZWQgaW50IERhdGFGb3JSZWdDZjg7Ci0JdW5zaWduZWQgaW50IGRhdGE7Ci0KLQlEYXRhRm9yUmVnQ2Y4ID0gKChQQ0lfU0xPVChkZXZpY2UtPmRldmZuKSA8PCAxMSkgfAotCQkJIChQQ0lfRlVOQyhkZXZpY2UtPmRldmZuKSA8PCA4KSB8Ci0JCQkgKG9mZnNldCAmIH4weDMpKSB8IDB4ODAwMDAwMDA7Ci0JR1RfV1JJVEUoR1RfUENJMF9DRkdBRERSX09GUywgRGF0YUZvclJlZ0NmOCk7Ci0KLQkvKgotCSAqIFRoZSBjYXN1YWwgb2JzZXJ2ZXIgbWlnaHQgd29uZGVyIHdoeSB0aGUgUkVBRCBpcyBkdXBsaWNhdGVkIGhlcmUsCi0JICogcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBXUklURSwgYW5kIGp1c3QgaGF2ZSB0aGUgc3dhcAotCSAqIGluIHRoZSAiaWYiLiAgVGhhdCdzIGJlY2F1c2UgdGhlcmUgaXMgYSBsYXRlbmN5IHByb2JsZW0gd2l0aCB0cnlpbmcKLQkgKiB0byByZWFkIGltbWVkaWF0ZWx5IGFmdGVyIHNldHRpbmcgdXAgdGhlIGFkZHJlc3MgcmVnaXN0ZXIuICBUaGUgImlmIgotCSAqIGNoZWNrIGdpdmVzIGVub3VnaCB0aW1lIGZvciB0aGUgYWRkcmVzcyB0byBzdGFiaWxpemUsIHNvIHRoZSBSRUFECi0JICogY2FuIHdvcmsuCi0JICovCi0JaWYgKFBDSV9TTE9UKGRldmljZS0+ZGV2Zm4pID09IFNFTEYpCS8qIFRoaXMgYm9hcmQgKi8KLQkJcmV0dXJuIEdUX1JFQUQoR1RfUENJMF9DRkdEQVRBX09GUyk7Ci0JZWxzZQkJLyogUENJIGlzIGxpdHRsZSBlbmRpYW4gc28gc3dhcCB0aGUgRGF0YS4gKi8KLQkJcmV0dXJuIF9fR1RfUkVBRChHVF9QQ0kwX0NGR0RBVEFfT0ZTKTsKLX0KLQotLyoKLSAqIHBjaVhXcml0ZUNvbmZpZ1JlZyAtIFdyaXRlIHRvIGEgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKLSAqICAgICAgICAgICAgICAgICAgICAtIE1ha2Ugc3VyZSB0aGUgR1QgaXMgY29uZmlndXJlZCBhcyBhIG1hc3RlciBiZWZvcmUKLSAqICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmd0byBhbm90aGVyIGRldmljZSBvbiB0aGUgUENJLgotICogICAgICAgICAgICAgICAgICAgIC0gVGhlIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgQmlnL0xpdHRsZSBlbmRpYW4gY29udmVyc2lvbi4KLSAqIElucHV0czogICB1bnNpZ25lZCBpbnQgcmVnT2Zmc2V0OiBUaGUgcmVnaXN0ZXIgb2Zmc2V0IGFzIGl0IGFwZWFycyBpbiB0aGUKLSAqICAgICAgICAgICBHVCBzcGVjCi0gKiAgICAgICAgICAgICAgICAgICAob3IgYW55IG90aGVyIFBDSSBkZXZpY2Ugc3BlYykKLSAqICAgICAgICAgICBwY2lEZXZOdW06IFRoZSBkZXZpY2UgbnVtYmVyIG5lZWRzIHRvIGJlIGFkZHJlc3NlZC4KLSAqCi0gKiAgQ29uZmlndXJhdGlvbiBBZGRyZXNzIDB4Q0Y4OgotICoKLSAqICAgICAgIDMxIDMwICAgIDI0IDIzICAxNiAxNSAgMTEgMTAgICAgIDggNyAgICAgIDIgIDAgICAgIDw9Yml0IE51bWJlcgotICogIHxjb25naWZ8UmVzZXJ2ZWR8ICBCdXMgfERldmljZXxGdW5jdGlvbnxSZWdpc3RlcnwwMHwKLSAqICB8RW5hYmxlfCAgICAgICAgfE51bWJlcnxOdW1iZXJ8IE51bWJlciB8IE51bWJlciB8ICB8ICAgIDw9ZmllbGQgTmFtZQotICoKLSAqLwotc3RhdGljIHZvaWQgcGNpMFdyaXRlQ29uZmlnUmVnKHVuc2lnbmVkIGludCBvZmZzZXQsCi0JCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKmRldmljZSwgdW5zaWduZWQgaW50IGRhdGEpCi17Ci0JdW5zaWduZWQgaW50IERhdGFGb3JSZWdDZjg7Ci0KLQlEYXRhRm9yUmVnQ2Y4ID0gKChQQ0lfU0xPVChkZXZpY2UtPmRldmZuKSA8PCAxMSkgfAotCQkJIChQQ0lfRlVOQyhkZXZpY2UtPmRldmZuKSA8PCA4KSB8Ci0JCQkgKG9mZnNldCAmIH4weDMpKSB8IDB4ODAwMDAwMDA7Ci0JR1RfV1JJVEUoR1RfUENJMF9DRkdBRERSX09GUywgRGF0YUZvclJlZ0NmOCk7Ci0KLQlpZiAoUENJX1NMT1QoZGV2aWNlLT5kZXZmbikgPT0gU0VMRikgCS8qIFRoaXMgYm9hcmQgKi8KLQkJR1RfV1JJVEUoR1RfUENJMF9DRkdEQVRBX09GUywgZGF0YSk7Ci0JZWxzZSAJCQkvKiBjb25maWd1cmF0aW9uIFRyYW5zYWN0aW9uIG92ZXIgdGhlIHBjaS4gKi8KLQkJX19HVF9XUklURShHVF9QQ0kwX0NGR0RBVEFfT0ZTLCBkYXRhKTsKLX0KLQotZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGd0NjQxMjBfcGNpX29wczsKLQotdm9pZCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCi17Ci0JdTMyIHRtcDsKLQlzdHJ1Y3QgcGNpX2RldiBjb250cm9sbGVyOwotCi0JY29udHJvbGxlci5kZXZmbiA9IFNFTEY7Ci0KLQl0bXAgPSBHVF9SRUFEKEdUX1BDSTBfQ01EX09GUyk7CQkvKiBIdWg/Pz8gLS0gUmFsZiAgKi8KLQl0bXAgPSBHVF9SRUFEKEdUX1BDSTBfQkFSRV9PRlMpOwotCi0JLyoKLQkgKiBZb3UgaGF2ZSB0byBlbmFibGUgYnVzIG1hc3RlcmluZyB0byBjb25maWd1cmUgYW55IG90aGVyCi0JICogY2FyZCBvbiB0aGUgYnVzLgotCSAqLwotCXRtcCA9IHBjaTBSZWFkQ29uZmlnUmVnKFBDSV9DT01NQU5ELCAmY29udHJvbGxlcik7Ci0JdG1wIHw9IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX1NFUlI7Ci0JcGNpMFdyaXRlQ29uZmlnUmVnKFBDSV9DT01NQU5ELCAmY29udHJvbGxlciwgdG1wKTsKLQotCS8qCi0JICogIFJlc2V0IFBDSSBJL08gYW5kIFBDSSBNRU0gdmFsdWVzIHRvIG9uZXMgc3VwcG9ydGVkIGJ5IEVWTS4KLQkgKi8KLQlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQJPSBHVF9QQ0lfSU9fQkFTRTsKLQlpb3BvcnRfcmVzb3VyY2UuZW5kCT0gR1RfUENJX0lPX0JBU0UgKyBHVF9QQ0lfSU9fU0laRSAtIDE7Ci0JaW9tZW1fcmVzb3VyY2Uuc3RhcnQJPSBHVF9QQ0lfTUVNX0JBU0U7Ci0JaW9tZW1fcmVzb3VyY2UuZW5kCT0gR1RfUENJX01FTV9CQVNFICsgR1RfUENJX01FTV9TSVpFIC0gMTsKLQotCXBjaV9zY2FuX2J1cygwLCAmZ3Q2NDEyMF9wY2lfb3BzLCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24vdGltZS5jCmluZGV4IDIyODdiNTkuLmQ4MzdiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL3RpbWUuYwpAQCAtOCw3ICs4LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC03OCw3ICs3Nyw3IEBACiAJICogdGhlIHZhbHVlcyB0byB0aGUgY29ycmVjdCBpbnRlcnJ1cHQgbGluZS4KIAkgKi8KIAl0aW1lci5oYW5kbGVyID0gZ3Q2NDEyMF9pcnE7Ci0JdGltZXIuZmxhZ3MgPSBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVDsKKwl0aW1lci5mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRDsKIAl0aW1lci5uYW1lID0gInRpbWVyIjsKIAl0aW1lci5kZXZfaWQgPSBOVUxMOwogCXRpbWVyLm5leHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pcnEuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvaXJxLmMKaW5kZXggNDZjNDY4Yi4uZjQ4OWE4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9pcnEuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL2lycS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkvKiAgTGV0J3MgaW5pdGlhbGl6ZSBvdXIgSVJRIGRlc2NyaXB0b3JzICAqLwogCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gMDsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZub19pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZub19pcnFfdHlwZTsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAwOwogCQlzcGluX2xvY2tfaW5pdCgmaXJxX2Rlc2NbaV0ubG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9kYmdfaW8uYyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2RiZ19pby5jCmluZGV4IGYwYTZhMzguLjIxMjg2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2RiZ19pby5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2RiZ19pby5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0tHREIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L3NldHVwLmMKaW5kZXggMTE5M2EyMi4uOTgwNDY0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9zZXR1cC5jCkBAIC0xNjQsOCArMTY0LDggQEAKIAlwbV9wb3dlcl9vZmYgPSBtb21lbmNvX29jZWxvdF9wb3dlcl9vZmY7CiAKIAkvKgotCSAqIGluaXRyZF9zdGFydCA9ICh1bG9uZylvY2Vsb3RfaW5pdHJkX3N0YXJ0OwotCSAqIGluaXRyZF9lbmQgPSAodWxvbmcpb2NlbG90X2luaXRyZF9zdGFydCArICh1bG9uZylvY2Vsb3RfaW5pdHJkX3NpemU7CisJICogaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpb2NlbG90X2luaXRyZF9zdGFydDsKKwkgKiBpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpb2NlbG90X2luaXRyZF9zdGFydCArICh1bG9uZylvY2Vsb3RfaW5pdHJkX3NpemU7CiAJICogaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKIAkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL01ha2VmaWxlIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL01ha2VmaWxlCmluZGV4IDcyNjA2YjkuLjdjZjUyMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvTWFrZWZpbGUKQEAgLTksNiArOSw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgV2luZCBSaXZlciBNSVBTIDRLQyBQUE1DIEV2YWwgQm9hcmQKICMKIAotb2JqLXkJKz0gaW50LWhhbmRsZXIubyBpcnEubyByZXNldC5vIHNldHVwLm8gdGltZS5vIHBjaS5vCitvYmoteSArPSBpcnEubyByZXNldC5vIHNldHVwLm8gdGltZS5vIHBjaS5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pbnQtaGFuZGxlci5TIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2ludC1oYW5kbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZWU3YjMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2ludC1oYW5kbGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSBXaW5kIFJpdmVyIFN5c3RlbSBJbmMuIFJvbmdrYWkuWmhhbiA8cm9uZ2thaS56aGFuQHdpbmRyaXZlci5jb20+Ci0gKi8KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXdycHBtYy9tYWNoLWd0NjQxMjAuaD4KLQotCS5hbGlnbgk1Ci0JLnNldAlub2F0Ci1ORVNURUQoaGFuZGxlX0lSUSwgUFRfU0laRSwgc3ApCi0JU0FWRV9BTEwKLQlDTEkJCQkJIyBJbXBvcnRhbnQ6IG1hcmsgS0VSTkVMIG1vZGUgIQotCS5zZXQJYXQKLQotCW1mYzAJdDAsIENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCi0JbWZjMAl0MSwgQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCi0JYW5kCXQwLCB0MCwgdDEJCSMgZ2V0IGFsbG93ZWQgaW50ZXJydXB0cwotCWFuZGkJdDAsIHQwLCAweEZGMDAKLQliZXF6CXQwLCAxZgotCW1vdmUJYTEsIHNwCQkJIyBQcmVwYXJlICdzdHJ1Y3QgcHRfcmVncyAqcmVncycgcG9pbnRlcgotCi0JYW5kaQl0MSwgdDAsIENBVVNFRl9JUDcJIyBDUFUgQ29tcGFyZS9Db3VudCBpbnRlcm5hbCB0aW1lcgotCWJuZXoJdDEsIGhhbmRsZV9jcHV0aW1lcl9pcnEKLQlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQNgkjIFVBUlQgMTY1NTAgcG9ydAotCWJuZXoJdDEsIGhhbmRsZV91YXJ0X2lycQotCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAzCSMgUENJIElOVF9BCi0JYm5legl0MSwgaGFuZGxlX3BjaV9pbnRBX2lycQotCi0JLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLwotMToJaglzcHVyaW91c19pbnRlcnJ1cHQKLQlub3AKLUVORChoYW5kbGVfSVJRKQotCi0JLmFsaWduCTUKLWhhbmRsZV9jcHV0aW1lcl9pcnE6Ci0JbGkJYTAsIFdSUFBNQ19NSVBTX1RJTUVSX0lSUQotCWphbAlkb19JUlEKLQlqCXJldF9mcm9tX2lycQotCi0JLmFsaWduCTUKLWhhbmRsZV91YXJ0X2lycToKLQlsaQlhMCwgV1JQUE1DX1VBUlQxNjU1MF9JUlEKLQlqYWwJZG9fSVJRCi0JaglyZXRfZnJvbV9pcnEKLQotCS5hbGlnbgk1Ci1oYW5kbGVfcGNpX2ludEFfaXJxOgotCWxpCWEwLCBXUlBQTUNfUENJX0lOVEFfSVJRCi0JamFsCWRvX0lSUQotCWoJcmV0X2Zyb21faXJxCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pcnEuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pcnEuYwppbmRleCA4NjA1Njg3Li44ZDc1YTQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvaXJxLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2lycS5jCkBAIC0zMCw3ICszMCwxOSBAQAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfSVJRKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUShXUlBQTUNfTUlQU19USU1FUl9JUlEsIHJlZ3MpOwkvKiBDUFUgQ29tcGFyZS9Db3VudCBpbnRlcm5hbCB0aW1lciAqLworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKKwkJZG9fSVJRKFdSUFBNQ19VQVJUMTY1NTBfSVJRLCByZWdzKTsJLyogVUFSVCAxNjU1MCBwb3J0ICovCisJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQorCQlkb19JUlEoV1JQUE1DX1BDSV9JTlRBX0lSUSwgcmVncyk7CS8qIFBDSSBJTlRfQSAqLworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQogCiAvKioKICAqIEluaXRpYWxpemUgR1Q2NDEyMCBJbnRlcnJ1cHQgQ29udHJvbGxlcgpAQCAtNTAsMTIgKzYyLDYgQEAKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewotCS8qIGVuYWJsZSBhbGwgQ1BVIGludGVycnVwdCBiaXRzLiAqLwotCXNldF9jMF9zdGF0dXMoU1QwX0lNKTsJLyogSUUgYml0IGlzIHN0aWxsIDAgKi8KLQotCS8qIEluc3RhbGwgTUlQUyBJbnRlcnJ1cHQgVHJhcCBWZWN0b3IgKi8KLQlzZXRfZXhjZXB0X3ZlY3RvcigwLCBoYW5kbGVfSVJRKTsKLQogCS8qIElSUSAwIC0gNyBhcmUgZm9yIE1JUFMgY29tbW9uIGlycV9jcHUgY29udHJvbGxlciAqLwogCW1pcHNfY3B1X2lycV9pbml0KDApOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9zZXR1cC5jCmluZGV4IDIwYzU5MWUuLjJkYjYzNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9zZXR1cC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIH0KICNlbmRpZgogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWV4dGVybiB2b2lkIHdycHBtY190aW1lX2luaXQodm9pZCk7CiAJZXh0ZXJuIHZvaWQgd3JwcG1jX3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvdGltZS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3RpbWUuYwppbmRleCAxNzVkMjJhLi42YzI0YTgyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy90aW1lLmMKQEAgLTMxLDEwICszMSw2IEBACiB7CiAJLyogSW5zdGFsbCBJU1IgZm9yIHRpbWVyIGludGVycnVwdCAqLwogCXNldHVwX2lycShXUlBQTUNfTUlQU19USU1FUl9JUlEsIGlycSk7Ci0KLQkvKiB0byBnZW5lcmF0ZSB0aGUgZmlyc3QgdGltZXIgaW50ZXJydXB0ICovCi0Jd3JpdGVfYzBfY29tcGFyZShtaXBzX2hwdF9mcmVxdWVuY3kvSFopOwotCXdyaXRlX2MwX2NvdW50KDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvZGJnX2lvLmMKaW5kZXggNmE3Y2NhZi4uOGU5Y2Q4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jCkBAIC0xLDUgKzEsNCBAQAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2lycS5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYwppbmRleCA3N2JlNzIxLi5hNjc0OWM1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pcnEuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2lycS5jCkBAIC0yMDgsMTAgKzIwOCwxMCBAQAogI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDw9IElUODE3Ml9MQVNUX0lSUTsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaXQ4MTcyX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJml0ODE3Ml9pcnFfdHlwZTsKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9kZXNjW2ldLmxvY2spOwogCX0KLQlpcnFfZGVzY1tNSVBTX0NQVV9USU1FUl9JUlFdLmhhbmRsZXIgPSAmY3AwX2lycV90eXBlOworCWlycV9kZXNjW01JUFNfQ1BVX1RJTUVSX0lSUV0uY2hpcCA9ICZjcDBfaXJxX3R5cGU7CiAJc2V0X2MwX3N0YXR1cyhBTExJTlRTX05PVElNRVIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2l0ODE3Ml9jaXIuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX2Npci5jCmluZGV4IDE5ZGViMTUuLmJmYzI1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX2Npci5jCisrKyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX2Npci5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0lUODE3Ml9DSVIKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX3NldHVwLmMKaW5kZXggZGE2YWUwOS4uYTQ2MTVhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYworKysgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2l0ODE3Ml9zZXR1cC5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcG1vbl9wcm9tLmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3Btb25fcHJvbS5jCmluZGV4IDZlNTA1YWYuLjdkMGE3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcG1vbl9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9wbW9uX3Byb20uYwpAQCAtMzUsNyArMzUsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IGJlY2M5YWMuLjQ3OGJlOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC03Myw3ICs3Myw3IEBACiAJCWlycV9kZXNjW2ldLnN0YXR1cyAgICAgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiAgICAgPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aCAgICAgID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciAgICA9ICZyNDAzMF9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCAgICA9ICZyNDAzMF9pcnFfdHlwZTsKIAl9CiAKIAlyNDAzMF93cml0ZV9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2phenovc2V0dXAuYyBiL2FyY2gvbWlwcy9qYXp6L3NldHVwLmMKaW5kZXggYzhkMGRmNy4uMzg1NDEzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovc2V0dXAuYworKysgYi9hcmNoL21pcHMvamF6ei9zZXR1cC5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAyMDAxIGJ5IFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9laXNhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaW5pdC5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2luaXQuYwppbmRleCBhMDY3NGQ3Li5hNTVjYjQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pbml0LmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMKaW5kZXggMTEzMDRkMTMuLjljNDM3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9pcnEuYworKysgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvaXJxLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00MzUsNyArNDM0LDcgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmam1yMzkyN19pcnFfY29udHJvbGxlcjsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZqbXIzOTI3X2lycV9jb250cm9sbGVyOwogCX0KIAogCWptcjM5MjdfaXJxX2Jhc2UgPSBpcnFfYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKaW5kZXggMzA4ZTZjZC4uNmQ0NjM1ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKQEAgLTMzLDcgKzMzLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2FwbS5jIGIvYXJjaC9taXBzL2tlcm5lbC9hcG0uYwppbmRleCAxNWY0NmI0Li43YmRiY2Q4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FwbS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYXBtLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogICogICBoYXMgYWNrbm93bGVkZ2UgZG9lcyB0aGUgYWN0dWFsIHN1c3BlbmQgaGFwcGVuLgogICovCiBzdGF0aWMgaW50Ci1hcG1faW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCithcG1faW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgYXBtX3VzZXIgKmFzID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggZjFiYjZhMi4uZWMyODA3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtOCw3ICs4LDYgQEAKICAqIEtldmluIEtpc3NlbGwsIGtldmlua0BtaXBzLmNvbSBhbmQgQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKaW5kZXggZDI2ODgyNy4uYzA5MzM3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKQEAgLTYsNyArNiw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCA4YzJjMzU5Li5iYTA4ZjA1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTU5Nyw4ICs1OTYsNiBAQAogCQlicmVhazsKIAljYXNlIFBSSURfSU1QXzI1S0Y6CiAJCWMtPmNwdXR5cGUgPSBDUFVfMjVLRjsKLQkJLyogUHJvYmUgZm9yIEwyIGNhY2hlICovCi0JCWMtPnNjYWNoZS5mbGFncyAmPSB+TUlQU19DQUNIRV9OT1RfUFJFU0VOVDsKIAkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF8zNEs6CiAJCWMtPmNwdXR5cGUgPSBDUFVfMzRLOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCmluZGV4IGE5YzZkZTEuLjAxZTdmYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KQEAgLTY2LDcgKzY1LDcgQEAKICNlbmRpZgogCiBGRVhQT1JUKHJldF9mcm9tX2ZvcmspCi0JamFsCXNjaGVkdWxlX3RhaWwJCSMgYTAgPSB0YXNrX3QgKnByZXYKKwlqYWwJc2NoZWR1bGVfdGFpbAkJIyBhMCA9IHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldgogCiBGRVhQT1JUKHN5c2NhbGxfZXhpdCkKIAlsb2NhbF9pcnFfZGlzYWJsZQkJIyBtYWtlIHN1cmUgbmVlZF9yZXNjaGVkIGFuZApAQCAtODcsNyArODYsNyBAQAogCW9yaQl2MSwgdjAsIFRDU1RBVFVTX0lYTVQKIAltdGMwCXYxLCBDUDBfVENTVEFUVVMKIAlhbmRpCXYwLCBUQ1NUQVRVU19JWE1UCi0JZWhiCisJX2VoYgogCW1mYzAJdDAsIENQMF9UQ0NPTlRFWFQKIAlETVQJOQkJCQkjIGRtdCB0MQogCWphbAltaXBzX2loYgpAQCAtOTUsNyArOTQsNyBAQAogCWFuZGkJdDMsIHQwLCAweGZmMDAKIAlvcgl0MiwgdDIsIHQzCiAJbXRjMAl0MiwgQ1AwX1NUQVRVUwotCWVoYgorCV9laGIKIAlhbmRpCXQxLCB0MSwgVlBFQ09OVFJPTF9URQogCWJlcXoJdDEsIDFmCiAJRU1UCkBAIC0xMDUsNyArMTA0LDcgQEAKIAl4b3JpCXYxLCB2MSwgVENTVEFUVVNfSVhNVAogCW9yCXYxLCB2MCwgdjEKIAltdGMwCXYxLCBDUDBfVENTVEFUVVMKLQllaGIKKwlfZWhiCiAJeG9yCXQwLCB0MCwgdDMKIAltdGMwCXQwLCBDUDBfVENDT05URVhUCiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMgYi9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUwppbmRleCA1ZmQ3YThhLi42NjZiYzkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUworKysgYi9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUwpAQCAtMyw3ICszLDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUgQW5kcmVhcyBCdXNzZQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CkBAIC0yOTEsNyArMjkwLDcgQEAKIAkJb3JpCXQxLCB0MiwgVENTVEFUVVNfSVhNVAogCQltdGMwCXQxLCBDUDBfVENTVEFUVVMKIAkJYW5kaQl0MiwgdDIsIFRDU1RBVFVTX0lYTVQKLQkJZWhiCisJCV9laGIKIAkJRE1UCTkJCQkJIyBkbXQJdDEKIAkJamFsCW1pcHNfaWhiCiAJCW5vcApAQCAtMzEwLDcgKzMwOSw3IEBACiAJCXhvcmkJdDEsIHQxLCBUQ1NUQVRVU19JWE1UCiAJCW9yCXQxLCB0MSwgdDIKIAkJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCi0JCWVoYgorCQlfZWhiCiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlMT05HX0wJdjAsIEdEQl9GUl9TVEFUVVMoc3ApCiAJCUxPTkdfTAl2MSwgR0RCX0ZSX0VQQyhzcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLXN0dWIuYwppbmRleCA2ZWNiZGMxLi43MTlkMjY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dkYi1zdHViLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItc3R1Yi5jCkBAIC0xMjAsNyArMTIwLDYgQEAKICAqICAgICAgIGJyZWFrcG9pbnRzLCBzaW5nbGUgc3RlcHBpbmcsCiAgKiAgICAgICBwcmludGluZyB2YXJpYWJsZXMsIGV0Yy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9nZW5leC5TIGIvYXJjaC9taXBzL2tlcm5lbC9nZW5leC5TCmluZGV4IGZmN2FmMzYuLjUyNTRhMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZ2VuZXguUworKysgYi9hcmNoL21pcHMva2VybmVsL2dlbmV4LlMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMiBNYWNpZWogVy4gUm96eWNraQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgpAQCAtMjE0LDcgKzIxMyw3IEBACiAJbXRjMAl0MCwgQ1AwX1RDQ09OVEVYVAogCXhvcgl0MSwgdDEsIHQwCiAJbXRjMAl0MSwgQ1AwX1NUQVRVUwotCWVoYgorCV9laGIKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJQ0xJCiAJbW92ZQlhMCwgc3AKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKaW5kZXggYmRmNmY2ZS4uNDc2YzFlYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIEtldmluIEtpc3NlbGwsIGtldmlua0BtaXBzLmNvbSBhbmQgQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCkBAIC05Niw3ICs5NSw3IEBACiAJLyogQ2xlYXIgVEtTVSwgbGVhdmUgSVhNVCAqLwogCXhvcmkJdDAsIDB4MDAwMDE4MDAKIAltdGMwCXQwLCBDUDBfVENTVEFUVVMKLQllaGIKKwlfZWhiCiAJLyogV2UgbmVlZCB0byBsZWF2ZSB0aGUgZ2xvYmFsIElFIGJpdCBzZXQsIGJ1dCBjbGVhciBFWEwuLi4qLwogCW1mYzAJdDAsIENQMF9TVEFUVVMKIAlvcgl0MCwgU1QwX0NVMCB8IFNUMF9FWEwgfCBTVDBfRVJMIHwgXHNldCB8IFxjbHIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwppbmRleCAwY2I4ZWQ1Li45MWZmYjEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIHZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaTgyNTlBX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpODI1OUFfaXJxX3R5cGU7CiAJZW5hYmxlX2lycShpcnEpOwogfQogCkBAIC0zMjcsNyArMzI3LDcgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaTgyNTlBX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmk4MjU5QV9pcnFfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoMiwgJmlycTIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKaW5kZXggOTdlYmRjNy4uZjhjZDFhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCkBAIC0xNzQsMTQgKzE3NCwxNCBAQAogCiAJCXN3aXRjaCAoaW1wLT5pbV90eXBlKSB7CiAJCWNhc2UgTVNDMDFfSVJRX0VER0U6Ci0JCQlpcnFfZGVzY1tiYXNlK25dLmhhbmRsZXIgPSAmbXNjX2VkZ2VpcnFfdHlwZTsKKwkJCWlycV9kZXNjW2Jhc2Urbl0uY2hpcCA9ICZtc2NfZWRnZWlycV90eXBlOwogCQkJaWYgKGNwdV9oYXNfdmVpYykKIAkJCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVArbio4LCBNU0MwMV9JQ19TVVBfRURHRV9CSVQpOwogCQkJZWxzZQogCQkJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtuKjgsIE1TQzAxX0lDX1NVUF9FREdFX0JJVCB8IGltcC0+aW1fbHZsKTsKIAkJCWJyZWFrOwogCQljYXNlIE1TQzAxX0lSUV9MRVZFTDoKLQkJCWlycV9kZXNjW2Jhc2Urbl0uaGFuZGxlciA9ICZtc2NfbGV2ZWxpcnFfdHlwZTsKKwkJCWlycV9kZXNjW2Jhc2Urbl0uY2hpcCA9ICZtc2NfbGV2ZWxpcnFfdHlwZTsKIAkJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgMCk7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1tdjY0MzR4LmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1tdjY0MzR4LmMKaW5kZXggMDYxM2YxZi4uZjljNzYzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXY2NDM0eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW12NjQzNHguYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gMDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAyOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm12NjQzNDBfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmbXY2NDM0MF9pcnFfdHlwZTsKIAl9CiAKIAlpcnFfYmFzZSA9IGJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1ybTcwMDAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtNzAwMC5jCmluZGV4IDBiMTMwYzUuLjEyMWRhMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtNzAwMC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtNzAwMC5jCkBAIC05MSw3ICs5MSw3IEBACiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnJtN2tfaXJxX2NvbnRyb2xsZXI7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmcm03a19pcnFfY29udHJvbGxlcjsKIAl9CiAKIAlpcnFfYmFzZSA9IGJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1ybTkwMDAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtOTAwMC5jCmluZGV4IDliNWYyMGMuLjI1MTA5YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtOTAwMC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLXJtOTAwMC5jCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZybTlrX2lycV9jb250cm9sbGVyOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnJtOWtfaXJxX2NvbnRyb2xsZXI7CiAJfQogCiAJcm05MDAwX3BlcmZjb3VudF9pcnEgPSBiYXNlICsgMTsKLQlpcnFfZGVzY1tybTkwMDBfcGVyZmNvdW50X2lycV0uaGFuZGxlciA9ICZybTlrX3BlcmZjb3VudGVyX2lycTsKKwlpcnFfZGVzY1tybTkwMDBfcGVyZmNvdW50X2lycV0uY2hpcCA9ICZybTlrX3BlcmZjb3VudGVyX2lycTsKIAogCWlycV9iYXNlID0gYmFzZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDNkY2U3NDIuLmNkZTVlNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5MiBMaW51cyBUb3J2YWxkcwogICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMjAwMCBSYWxmIEJhZWNobGUKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtOTUsNyArOTQsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCkBAIC0xMzcsNyArMTM2LDcgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzICA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uICA9IE5VTEw7CiAJCWlycV9kZXNjW2ldLmRlcHRoICAgPSAxOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm5vX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJm5vX2lycV90eXBlOwogCQlzcGluX2xvY2tfaW5pdCgmaXJxX2Rlc2NbaV0ubG9jayk7CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogCQlpcnFfaHdtYXNrW2ldID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKaW5kZXggNWRiNjdlMy4uMGU0NTVhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKQEAgLTE2NywxNCArMTY3LDE0IEBACiAJCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwogCQkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZtaXBzX210X2NwdV9pcnFfY29udHJvbGxlcjsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmbWlwc19tdF9jcHVfaXJxX2NvbnRyb2xsZXI7CiAJCX0KIAogCWZvciAoaSA9IGlycV9iYXNlICsgMjsgaSA8IGlycV9iYXNlICsgODsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm1pcHNfY3B1X2lycV9jb250cm9sbGVyOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJm1pcHNfY3B1X2lycV9jb250cm9sbGVyOwogCX0KIAogCW1pcHNfY3B1X2lycV9iYXNlID0gaXJxX2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IGE3ZDJiYjMuLjQ1MGFjNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC01LDcgKzUsNiBAQAogICogV3JpdHRlbiBieSBVbGYgQ2FybHNzb24gKHVsZmNAZW5nci5zZ2kuY29tKQogICogc3lzMzJfZXhlY3ZlIGZyb20gaWE2NC9pYTMyIGNvZGUsIEZlYiAyMDAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwcy1tdC5jIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzLW10LmMKaW5kZXggMDIyMzdhNi4uNGRjYzM5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9taXBzLW10LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzLW10LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqIHVzZWQgaW4gc3lzX3NjaGVkX3NldC9nZXRhZmZpbml0eSgpIGluIGtlcm5lbC9zY2hlZC5jLCBzbwogICogY2xvbmVkIGhlcmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdGFza190ICpmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZF90IHBpZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZF90IHBpZCkKIHsKIAlyZXR1cm4gcGlkID8gZmluZF90YXNrX2J5X3BpZChwaWQpIDogY3VycmVudDsKIH0KQEAgLTYyLDcgKzYyLDcgQEAKIAljcHVtYXNrX3QgbmV3X21hc2s7CiAJY3B1bWFza190IGVmZmVjdGl2ZV9tYXNrOwogCWludCByZXR2YWw7Ci0JdGFza190ICpwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCWlmIChsZW4gPCBzaXplb2YobmV3X21hc2spKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXVuc2lnbmVkIGludCByZWFsX2xlbjsKIAljcHVtYXNrX3QgbWFzazsKIAlpbnQgcmV0dmFsOwotCXRhc2tfdCAqcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKIAlyZWFsX2xlbiA9IHNpemVvZihtYXNrKTsKIAlpZiAobGVuIDwgcmVhbF9sZW4pCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jCmluZGV4IDBhNzFhNGMuLmY0NGEwMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCA5NywgOTgsIDk5LCAyMDAwLCAwMSwgMDMsIDA0LCAwNSBieSBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMDEgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCmluZGV4IDlkZWY1NTQuLmQ4YmVlZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCkBAIC01LDcgKzUsNiBAQAogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwNCAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgIE1hY2llaiBXLiBSb3p5Y2tpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDE5OWEwNmU4Li43YWI2N2Y3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhpZW1vIFNldWZlcgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMWQ0NDAyNS4uMzYyZDE3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBBdCB0aGlzIHRpbWUgTGludXgvTUlQUzY0IG9ubHkgc3VwcG9ydHMgc3lzY2FsbCB0cmFjaW5nLCBldmVuIGZvciAzMi1iaXQKICAqIGJpbmFyaWVzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9zd2l0Y2guUyBiL2FyY2gvbWlwcy9rZXJuZWwvcjIzMDBfc3dpdGNoLlMKaW5kZXggMGQ5YzRhMy4uNjU2YmRlMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL3IyMzAwX3N3aXRjaC5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBGdXJ0aGVyIG1vZGlmaWNhdGlvbnMgdG8gbWFrZSB0aGlzIHdvcms6CiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBIYXJhbGQgS29lcmZnZW4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVjdGwuaD4KICNpbmNsdWRlIDxhc20vZnByZWdkZWYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX2ZwdS5TIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfZnB1LlMKaW5kZXggMjgzYTk4NS4uODgwZmE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfZnB1LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfZnB1LlMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAxIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vZnByZWdkZWYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKaW5kZXggZGI5NGU1NS4uZDVjOGI4MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgogICogICAgd3JpdHRlbiBieSBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVjdGwuaD4KICNpbmNsdWRlIDxhc20vZnByZWdkZWYuaD4KQEAgLTk0LDcgKzkzLDcgQEAKIAlvcmkJdDEsIHQyLCBUQ1NUQVRVU19JWE1UCiAJbXRjMAl0MSwgQ1AwX1RDU1RBVFVTCiAJYW5kaQl0MiwgdDIsIFRDU1RBVFVTX0lYTVQKLQllaGIKKwlfZWhiCiAJRE1UCTgJCQkJIyBkbXQJdDAKIAltb3ZlCXQxLHJhCiAJamFsCW1pcHNfaWhiCkBAIC0xMDksNyArMTA4LDcgQEAKIAlvcglhMiwgdDEKIAltdGMwCWEyLCBDUDBfU1RBVFVTCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCWVoYgorCV9laGIKIAlhbmRpCXQwLCB0MCwgVlBFQ09OVFJPTF9URQogCWJlcXoJdDAsIDFmCiAJZW10CkBAIC0xMTgsNyArMTE3LDcgQEAKIAl4b3JpCXQxLCB0MSwgVENTVEFUVVNfSVhNVAogCW9yCXQxLCB0MSwgdDIKIAltdGMwCXQxLCBDUDBfVENTVEFUVVMKLQllaGIKKwlfZWhiCiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCW1vdmUJdjAsIGEwCiAJanIJcmEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggY2FmNzc3Zi4uY2RhYjFiMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBydGx4X2lycSA9IHsKIAkuaGFuZGxlcgk9IHJ0bHhfaW50ZXJydXB0LAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm5hbWUJCT0gIlJUTFgiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCmluZGV4IDJkMmZkZjcuLjhmODEwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNCBUaGllbW8gU2V1ZmVyCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KQEAgLTY0Nyw2ICs2NDYsNyBAQAogCXN5cwlzeXNfdW5zaGFyZQkJMQogCXN5cwlzeXNfc3BsaWNlCQk0CiAJc3lzCXN5c19zeW5jX2ZpbGVfcmFuZ2UJNwkvKiA0MzA1ICovCisJc3lzCXN5c190ZWUJCQk0CiAJLmVuZG0KIAogCS8qIFdlIHByZS1jb21wdXRlIHRoZSBudW1iZXIgb2YgX2luc3RydWN0aW9uXyBieXRlcyBuZWVkZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggOWJhNzUwOC4uYjRhMzRhNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KQEAgLTQ2MiwzICs0NjEsNCBAQAogCVBUUglzeXNfdW5zaGFyZQogCVBUUglzeXNfc3BsaWNlCiAJUFRSCXN5c19zeW5jX2ZpbGVfcmFuZ2UKKwlQVFIJc3lzX3RlZQkJCQkvKiA1MjY1ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggOTQyYWNhMi4uZGY4YzRmOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtNyw3ICs3LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgpAQCAtMzg4LDMgKzM4Nyw0IEBACiAJUFRSCXN5c191bnNoYXJlCiAJUFRSCXN5c19zcGxpY2UKIAlQVFIJc3lzX3N5bmNfZmlsZV9yYW5nZQorCVBUUglzeXNfdGVlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggOGVmYjIzYS4uZjA0ZmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMTMsNyArMTMsNiBAQAogICogdG8gQUJJNjQgY2FsbGluZyBjb252ZW50aW9uLiAgNjQtYml0IHN5c2NhbGxzIGFyZSBhbHNvIHByb2Nlc3NlZAogICogaGVyZSBmb3Igbm93LgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CkBAIC01MTAsNCArNTA5LDUgQEAKIAlQVFIJc3lzX3Vuc2hhcmUKIAlQVFIJc3lzX3NwbGljZQogCVBUUglzeXMzMl9zeW5jX2ZpbGVfcmFuZ2UJCS8qIDQzMDUgKi8KKwlQVFIJc3lzX3RlZQogCS5zaXplCXN5c19jYWxsX3RhYmxlLC4tc3lzX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwppbmRleCBiZmNlYzhkLi41ZWRkOGQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAwIDIwMDEsIDIwMDIgIE1hY2llaiBXLiBSb3p5Y2tpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQ4OCw2ICs0ODcsOSBAQAogewogCWludCBpOwogCisJaWYgKFVOQ0FDX0JBU0UgIT0gSU9fQkFTRSkKKwkJcmV0dXJuOworCiAJY29kZV9yZXNvdXJjZS5zdGFydCA9IHZpcnRfdG9fcGh5cygmX3RleHQpOwogCWNvZGVfcmVzb3VyY2UuZW5kID0gdmlydF90b19waHlzKCZfZXRleHQpIC0gMTsKIAlkYXRhX3Jlc291cmNlLnN0YXJ0ID0gdmlydF90b19waHlzKCZfZXRleHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwtY29tbW9uLmggYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaAppbmRleCBjZTZjYjkxNS4uYjFmMDlkNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwtY29tbW9uLmgKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwtY29tbW9uLmgKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RhdGljIGlubGluZSBpbnQKIHNldHVwX3NpZ2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwppbmRleCA0MDJlZmQyLi42YjRkOWJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAwICBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCmluZGV4IDU3NzcwOTAuLjkzNDI5YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwpAQCAtMTMwLDEzICsxMzAsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX3Jlc2NoZWQgPSB7CiAJLmhhbmRsZXIJPSBpcGlfcmVzY2hlZF9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubmFtZQkJPSAiSVBJX3Jlc2NoZWQiCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FsbCA9IHsKIAkuaGFuZGxlcgk9IGlwaV9jYWxsX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAogCS5uYW1lCQk9ICJJUElfY2FsbCIKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUwppbmRleCBjOWQ2NTE5Li43MmM2ZDk4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLWFzbS5TCkBAIC01MiwxMiArNTIsMTIgQEAKIAkuc2V0CW5vYXQKIAkvKiBEaXNhYmxlIHRocmVhZCBzY2hlZHVsaW5nIHRvIG1ha2UgU3RhdHVzIHVwZGF0ZSBhdG9taWMgKi8KIAlETVQJMjcJCQkJCSMgZG10CWsxCi0JZWhiCisJX2VoYgogCS8qIFNldCBFWEwgKi8KIAltZmMwCWswLENQMF9TVEFUVVMKIAlvcmkJazAsazAsU1QwX0VYTAogCW10YzAJazAsQ1AwX1NUQVRVUwotCWVoYgorCV9laGIKIAkvKiBUaHJlYWQgc2NoZWR1bGluZyBub3cgaW5oaWJpdGVkIGJ5IEVYTC4gUmVzdG9yZSBURSBzdGF0ZS4gKi8KIAlhbmRpCWsxLGsxLFZQRUNPTlRST0xfVEUKIAliZXF6CWsxLDFmCkBAIC04Miw3ICs4Miw3IEBACiAJbGkJazEsU1QwX0NVMAogCW9yCWsxLGsxLGswCiAJbXRjMAlrMSxDUDBfU1RBVFVTCi0JZWhiCisJX2VoYgogCWdldF9zYXZlZF9zcAogCS8qIEludGVycnVwdGluZyBUQyB3aWxsIGhhdmUgcHJlLXNldCB2YWx1ZXMgaW4gc2xvdHMgaW4gdGhlIG5ldyBmcmFtZSAqLwogMjoJc3VidQlrMSxrMSxQVF9TSVpFCkBAIC05MCw3ICs5MCw3IEBACiAJbHcJazAsUFRfVENTVEFUVVMoazEpCiAJLyogV3JpdGUgaXQgdG8gVENTdGF0dXMgdG8gcmVzdG9yZSBDVS9LU1UvSVhNVCBzdGF0ZSAqLwogCW10YzAJazAsJDIsMQotCWVoYgorCV9laGIKIAlsdwlrMCxQVF9FUEMoazEpCiAJbXRjMAlrMCxDUDBfRVBDCiAJLyogU2F2ZSBhbGwgd2lsbCByZWR1bmRhbnRseSByZWNvbXB1dGUgdGhlIFNQLCBidXQgdXNlIGl0IGZvciBub3cgKi8KQEAgLTExNiw3ICsxMTYsNyBAQAogCW1mYzAJdDAsQ1AwX1RDU1RBVFVTCiAJb3JpCXQxLHQwLFRDU1RBVFVTX0lYTVQKIAltdGMwCXQxLENQMF9UQ1NUQVRVUwotCWVoYgorCV9laGIKIAkvKiBXZSBrbm93IHdlJ3JlIGluIGtlcm5lbCBtb2RlLCBzbyBwcmVwYXJlIHN0YWNrIGZyYW1lICovCiAJc3VidQl0MSxzcCxQVF9TSVpFCiAJc3cJcmEsUFRfRVBDKHQxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwppbmRleCA3MGNmMDlhLi5hNDhkOWU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtMTAwMiw3ICsxMDAyLDcgQEAKIAlzZXRfdmlfaGFuZGxlcihNSVBTX0NQVV9JUElfSVJRLCBpcGlfaXJxX2Rpc3BhdGNoKTsKIAogCWlycV9pcGkuaGFuZGxlciA9IGlwaV9pbnRlcnJ1cHQ7Ci0JaXJxX2lwaS5mbGFncyA9IFNBX0lOVEVSUlVQVDsKKwlpcnFfaXBpLmZsYWdzID0gSVJRRl9ESVNBQkxFRDsKIAlpcnFfaXBpLm5hbWUgPSAiU01UQ19JUEkiOwogCiAJc2V0dXBfaXJxX3NtdGMoY3B1X2lwaV9pcnEsICZpcnFfaXBpLCAoMHgxMDAgPDwgTUlQU19DUFVfSVBJX0lSUSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwppbmRleCA1ZThhMThhLi4wNzIxMzE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwpAQCAtNyw3ICs3LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zMDEsNyArMzAwLDcgQEAKICAqCiAgKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgogICovCi1hc21saW5rYWdlIGludCBzeXNfaXBjICh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKK2FzbWxpbmthZ2UgaW50IHN5c19pcGMgKHVuc2lnbmVkIGludCBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsCiAJCQl1bnNpZ25lZCBsb25nIHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKQogewogCWludCB2ZXJzaW9uLCByZXQ7CkBAIC0zNTksMTggKzM1OCwxOCBAQAogCWNhc2UgU0hNQVQ6CiAJCXN3aXRjaCAodmVyc2lvbikgewogCQlkZWZhdWx0OiB7Ci0JCQl1bG9uZyByYWRkcjsKKwkJCXVuc2lnbmVkIGxvbmcgcmFkZHI7CiAJCQlyZXQgPSBkb19zaG1hdCAoZmlyc3QsIChjaGFyIF9fdXNlciAqKSBwdHIsIHNlY29uZCwKIAkJCQkJJnJhZGRyKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKLQkJCXJldHVybiBwdXRfdXNlciAocmFkZHIsICh1bG9uZyBfX3VzZXIgKikgdGhpcmQpOworCQkJcmV0dXJuIHB1dF91c2VyIChyYWRkciwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIHRoaXJkKTsKIAkJfQogCQljYXNlIDE6CS8qIGlCQ1MyIGVtdWxhdG9yIGVudHJ5IHBvaW50ICovCiAJCQlpZiAoIXNlZ21lbnRfZXEoZ2V0X2ZzKCksIGdldF9kcygpKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXJldHVybiBkb19zaG1hdCAoZmlyc3QsIChjaGFyIF9fdXNlciAqKSBwdHIsIHNlY29uZCwKLQkJCQkJICh1bG9uZyAqKSB0aGlyZCk7CisJCQkJCSAodW5zaWduZWQgbG9uZyAqKSB0aGlyZCk7CiAJCX0KIAljYXNlIFNITURUOgogCQlyZXR1cm4gc3lzX3NobWR0ICgoY2hhciBfX3VzZXIgKilwdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwppbmRleCAxM2ZmNGRhLi4yMzkzYzExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwpAQCAtMTEsNyArMTEsNiBAQAogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC01ODAsNyArNTc5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCBhZDE2ZWNlLi44Yjk1ZWNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgIE1hY2llaiBXLiBSb3p5Y2tpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNTAsNyArMTA0OSw3IEBACiAJcmV0dXJuICh2b2lkICopb2xkX2hhbmRsZXI7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyX1NSUwogLyoKICAqIE1JUFNSMiBzaGFkb3cgcmVnaXN0ZXIgc2V0IGFsbG9jYXRpb24KICAqIEZJWE1FOiBTTVAuLi4KQEAgLTEwNjksMTEgKzEwNjgsOSBAQAogCiBzdGF0aWMgdm9pZCBtaXBzX3Nyc19pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjJfU1JTCiAJc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQgPSAoKHJlYWRfYzBfc3JzY3RsKCkgPj4gMjYpICYgMHgwZikgKyAxOwogCXByaW50ayhLRVJOX0lORk8gIiVkIE1JUFNSMiByZWdpc3RlciBzZXRzIGF2YWlsYWJsZVxuIiwKIAkgICAgICAgc2hhZG93X3JlZ2lzdGVycy5zcl9zdXBwb3J0ZWQpOwotI2VuZGlmCiAJc2hhZG93X3JlZ2lzdGVycy5zcl9hbGxvY2F0ZWQgPSAxOwkvKiBTZXQgMCB1c2VkIGJ5IGtlcm5lbCAqLwogfQogCkBAIC0xMTk4LDcgKzExOTUsMTQgQEAKIHsKIAlyZXR1cm4gc2V0X3ZpX3Nyc19oYW5kbGVyKG4sIGFkZHIsIDApOwogfQotI2VuZGlmCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtaXBzX3Nyc19pbml0KHZvaWQpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX01JUFNSMl9TUlMgKi8KIAogLyoKICAqIFRoaXMgaXMgdXNlZCBieSBuYXRpdmUgc2lnbmFsIGhhbmRsaW5nCkBAIC0xMzg4LDkgKzEzOTIsNyBAQAogCWVsc2UKIAkJZWJhc2UgPSBDQUNfQkFTRTsKIAotI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCiAJbWlwc19zcnNfaW5pdCgpOwotI2VuZGlmCiAKIAlwZXJfY3B1X3RyYXBfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9taXBzL2tlcm5lbC91bmFsaWduZWQuYwppbmRleCA1YjVhMzczLi43ZTdkNTQ4MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL21pcHMva2VybmVsL3VuYWxpZ25lZC5jCkBAIC03Miw3ICs3Miw2IEBACiAgKiAgICAgICBBIHN0b3JlIGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeSBtaWdodCBiZSBleGVjdXRlZCBvbmx5IHBhcnRpYWxseS4KICAqICAgICAgIFVuZG8gdGhlIHBhcnRpYWwgc3RvcmUgaW4gdGhpcyBjYXNlLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBiODRkMWY5Li4wYmI5Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYyBiL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYwppbmRleCAyZDM0NzJiLi45MzE2YTAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jCkBAIC0xNTYsNiArMTU2LDYgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzCT0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24JPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aAk9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIJPSAmbGFzYXRfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAJPSAmbGFzYXRfaXJxX3R5cGU7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L2xhc2F0X2JvYXJkLmMgYi9hcmNoL21pcHMvbGFzYXQvbGFzYXRfYm9hcmQuYwppbmRleCBmYzliMGUyLi5kNDI1MTIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvbGFzYXRfYm9hcmQuYworKysgYi9hcmNoL21pcHMvbGFzYXQvbGFzYXRfYm9hcmQuYwpAQCAtMTcsNyArMTcsNiBAQAogICoKICAqIFJvdXRpbmVzIHNwZWNpZmljIHRvIHRoZSBMQVNBVCBib2FyZHMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxhc20vbGFzYXQvbGFzYXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9yZXNldC5jIGIvYXJjaC9taXBzL2xhc2F0L3Jlc2V0LmMKaW5kZXggMTgxYmY2OC4uOWUyMmFjZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3Jlc2V0LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKiBSZXNldCB0aGUgTEFTQVQgYm9hcmQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvc2V0dXAuYyBiL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jCmluZGV4IDNmNjQyNzcuLjIxODdlNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKgogICogTGFzYXQgc3BlY2lmaWMgc2V0dXAuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYyBiL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYwppbmRleCBlM2Q1YWFhLi42ZGQ3YWUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbGFzYXQvbGFzYXQuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi0zMi9kdW1wX3RsYi5jIGIvYXJjaC9taXBzL2xpYi0zMi9kdW1wX3RsYi5jCmluZGV4IGM0OWE5MjUuLjZhNjhkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWItMzIvZHVtcF90bGIuYworKysgYi9hcmNoL21pcHMvbGliLTMyL2R1bXBfdGxiLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgYnkgV2FsZG9yZiBFbGVjdHJvbmljcywgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUuCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi02NC9kdW1wX3RsYi5jIGIvYXJjaC9taXBzL2xpYi02NC9kdW1wX3RsYi5jCmluZGV4IDExYTVmMDEuLmJlODI2MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWItNjQvZHVtcF90bGIuYworKysgYi9hcmNoL21pcHMvbGliLTY0L2R1bXBfdGxiLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgYnkgV2FsZG9yZiBFbGVjdHJvbmljcywgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUuCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9tZW1jcHkuUyBiL2FyY2gvbWlwcy9saWIvbWVtY3B5LlMKaW5kZXggN2Y5YWFmYS4uYTUyNmM2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9tZW1jcHkuUworKysgYi9hcmNoL21pcHMvbGliL21lbWNweS5TCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICogTW5lbW9uaWMgbmFtZXMgZm9yIGFyZ3VtZW50cyB0byBtZW1jcHkvX19jb3B5X3VzZXIKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogSGFjayB0byByZXNvbHZlIGxvbmdzdGFuZGluZyBwcmVmZXRjaCBpc3N1ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2tlcm5lbF9saW5rYWdlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYwppbmRleCA1NmNhMGM2Li41YjMzOTBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYwpAQCAtMTksNyArMTksNiBAQAogICogbWFuaXB1bGF0aW9uIHByaW1pdGl2ZXMgZm9yIHRoZSBBbGdvcml0aG1pY3MgTUlQUwogICogRlBVIEVtdWxhdG9yCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMKaW5kZXggZGI1Mzk1MC4uOWRkNmI4OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMJPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbgk9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoCT0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlcgk9ICZhdGxhc19pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcAk9ICZhdGxhc19pcnFfdHlwZTsKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9kZXNjW2ldLmxvY2spOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19zZXR1cC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3NldHVwLmMKaW5kZXggOGNjOWVmZi4uM2E3YzNkMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3NldHVwLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvaW5pdC5jCmluZGV4IGRmNGU5NDcuLjU4YTBmZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2luaXQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9pbml0LmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqCiAgKiBQUk9NIGxpYnJhcnkgaW5pdGlhbGlzYXRpb24gY29kZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21lbW9yeS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKaW5kZXggZmQ0OTI1Ni4uYzg5ZmNmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqIFBST00gbGlicmFyeSBmdW5jdGlvbnMgZm9yIGFjcXVpcmluZy91c2luZyBtZW1vcnkgZGVzY3JpcHRvcnMgZ2l2ZW4gdG8KICAqIHVzIGZyb20gdGhlIFlBTU9OLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcHJpbnRmLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wcmludGYuYwppbmRleCAyYzFhYjFmLi4xYTcxMWJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wcmludGYuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9wcmludGYuYwpAQCAtMTcsNyArMTcsNiBAQAogICoKICAqIFB1dHRpbmcgdGhpbmdzIG9uIHRoZSBzY3JlZW4vc2VyaWFsIGxpbmUgdXNpbmcgWUFNT05zIGZhY2lsaXRpZXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcmVzZXQuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3Jlc2V0LmMKaW5kZXggNzIxM2MzOS4uMDk5NmJhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcmVzZXQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9yZXNldC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBSZXNldCB0aGUgTUlQUyBib2FyZHMuCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IGE5ZjYxMjQuLjVlMjA3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYwppbmRleCAwNzY2ZTQzLi5iYzRhYzZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYwpAQCAtMTUsNyArMTUsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX3NldHVwLmMKaW5kZXggNjQzMGYxMS4uYTg1NmJkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfc2V0dXAuYwpAQCAtMTcsNyArMTcsNiBAQAogICoKICAqIFNFQUQgc3BlY2lmaWMgc2V0dXAuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX0lSUS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fSVJRLmMKaW5kZXggNWI4NGM3Zi4uZWM1NDlmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fSVJRLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fSVJRLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKiBJbnRlcnJ1cHQgZXhjZXB0aW9uIGRpc3BhdGNoIGNvZGUuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKaW5kZXggZDE2Y2YzOC4uYjc0NDRlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKQEAgLTE3LDcgKzE3LDYgQEAKICAqIEludGVycnVwdCBleGNlcHRpb24gZGlzcGF0Y2ggY29kZS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zZXR1cC5jCmluZGV4IDE1YTVkYWMuLjNkNGE3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc2V0dXAuYwpAQCAtMTYsNyArMTYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYwppbmRleCAwMDQwNzA5Li5jYjQ3ODYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYwpAQCAtMTgsNyArMTgsNiBAQAogLyoKICAqIFNpbXVsYXRvciBQbGF0Zm9ybS1zcGVjaWZpYyBob29rcyBmb3IgU01QIG9wZXJhdGlvbgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV90aW1lLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV90aW1lLmMKaW5kZXggMThiOTY4Yy4uZTdmNjAwMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fdGltZS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3RpbWUuYwpAQCAtMSw1ICsxLDQgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vTWFrZWZpbGUgYi9hcmNoL21pcHMvbW0vTWFrZWZpbGUKaW5kZXggNGE2MjIwMTEuLjE5ZTQxZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbW0vTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19JUDIyX0NQVV9TQ0FDSEUpCSs9IHNjLWlwMjIubwogb2JqLSQoQ09ORklHX1I1MDAwX0NQVV9TQ0FDSEUpICArPSBzYy1yNWsubwogb2JqLSQoQ09ORklHX1JNNzAwMF9DUFVfU0NBQ0hFKQkrPSBzYy1ybTdrLm8KK29iai0kKENPTkZJR19NSVBTX0NQVV9TQ0FDSEUpCSs9IHNjLW1pcHMubwogCiAjCiAjIENob29zZSBvbmUgRE1BIGNvaGVyZW5jeSBtb2RlbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjRrLmMgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwppbmRleCA0YTQzOTI0Li44NTdiNzI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwpAQCAtNyw3ICs3LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTYwLDEzICs1OSwxMyBAQAogLyoKICAqIER1bW15IGNhY2hlIGhhbmRsaW5nIHJvdXRpbmVzIGZvciBtYWNoaW5lcyB3aXRob3V0IGJvYXJkY2FjaGVzCiAgKi8KLXN0YXRpYyB2b2lkIG5vX3NjX25vb3Aodm9pZCkge30KK3N0YXRpYyB2b2lkIGNhY2hlX25vb3Aodm9pZCkge30KIAogc3RhdGljIHN0cnVjdCBiY2FjaGVfb3BzIG5vX3NjX29wcyA9IHsKLQkuYmNfZW5hYmxlID0gKHZvaWQgKilub19zY19ub29wLAotCS5iY19kaXNhYmxlID0gKHZvaWQgKilub19zY19ub29wLAotCS5iY193YmFja19pbnYgPSAodm9pZCAqKW5vX3NjX25vb3AsCi0JLmJjX2ludiA9ICh2b2lkICopbm9fc2Nfbm9vcAorCS5iY19lbmFibGUgPSAodm9pZCAqKWNhY2hlX25vb3AsCisJLmJjX2Rpc2FibGUgPSAodm9pZCAqKWNhY2hlX25vb3AsCisJLmJjX3diYWNrX2ludiA9ICh2b2lkICopY2FjaGVfbm9vcCwKKwkuYmNfaW52ID0gKHZvaWQgKiljYWNoZV9ub29wCiB9OwogCiBzdHJ1Y3QgYmNhY2hlX29wcyAqYmNvcHMgPSAmbm9fc2Nfb3BzOwpAQCAtOTQsNyArOTMsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgIGRjX2xzaXplID0gY3B1X2RjYWNoZV9saW5lX3NpemUoKTsKIAotCWlmIChkY19sc2l6ZSA9PSAxNikKKwlpZiAoZGNfbHNpemUgPT0gMCkKKwkJcjRrX2JsYXN0X2RjYWNoZV9wYWdlID0gKHZvaWQgKiljYWNoZV9ub29wOworCWVsc2UgaWYgKGRjX2xzaXplID09IDE2KQogCQlyNGtfYmxhc3RfZGNhY2hlX3BhZ2UgPSBibGFzdF9kY2FjaGUxNl9wYWdlOwogCWVsc2UgaWYgKGRjX2xzaXplID09IDMyKQogCQlyNGtfYmxhc3RfZGNhY2hlX3BhZ2UgPSByNGtfYmxhc3RfZGNhY2hlX3BhZ2VfZGMzMjsKQEAgLTEwNiw3ICsxMDcsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZGNfbHNpemUgPSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpOwogCi0JaWYgKGRjX2xzaXplID09IDE2KQorCWlmIChkY19sc2l6ZSA9PSAwKQorCQlyNGtfYmxhc3RfZGNhY2hlX3BhZ2VfaW5kZXhlZCA9ICh2b2lkICopY2FjaGVfbm9vcDsKKwllbHNlIGlmIChkY19sc2l6ZSA9PSAxNikKIAkJcjRrX2JsYXN0X2RjYWNoZV9wYWdlX2luZGV4ZWQgPSBibGFzdF9kY2FjaGUxNl9wYWdlX2luZGV4ZWQ7CiAJZWxzZSBpZiAoZGNfbHNpemUgPT0gMzIpCiAJCXI0a19ibGFzdF9kY2FjaGVfcGFnZV9pbmRleGVkID0gYmxhc3RfZGNhY2hlMzJfcGFnZV9pbmRleGVkOwpAQCAtMTE4LDcgKzEyMSw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBkY19sc2l6ZSA9IGNwdV9kY2FjaGVfbGluZV9zaXplKCk7CiAKLQlpZiAoZGNfbHNpemUgPT0gMTYpCisJaWYgKGRjX2xzaXplID09IDApCisJCXI0a19ibGFzdF9kY2FjaGUgPSAodm9pZCAqKWNhY2hlX25vb3A7CisJZWxzZSBpZiAoZGNfbHNpemUgPT0gMTYpCiAJCXI0a19ibGFzdF9kY2FjaGUgPSBibGFzdF9kY2FjaGUxNjsKIAllbHNlIGlmIChkY19sc2l6ZSA9PSAzMikKIAkJcjRrX2JsYXN0X2RjYWNoZSA9IGJsYXN0X2RjYWNoZTMyOwpAQCAtMjAxLDcgKzIwNiw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBpY19sc2l6ZSA9IGNwdV9pY2FjaGVfbGluZV9zaXplKCk7CiAKLQlpZiAoaWNfbHNpemUgPT0gMTYpCisJaWYgKGljX2xzaXplID09IDApCisJCXI0a19ibGFzdF9pY2FjaGVfcGFnZSA9ICh2b2lkICopY2FjaGVfbm9vcDsKKwllbHNlIGlmIChpY19sc2l6ZSA9PSAxNikKIAkJcjRrX2JsYXN0X2ljYWNoZV9wYWdlID0gYmxhc3RfaWNhY2hlMTZfcGFnZTsKIAllbHNlIGlmIChpY19sc2l6ZSA9PSAzMikKIAkJcjRrX2JsYXN0X2ljYWNoZV9wYWdlID0gYmxhc3RfaWNhY2hlMzJfcGFnZTsKQEAgLTIxNiw3ICsyMjMsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgaWNfbHNpemUgPSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpOwogCi0JaWYgKGljX2xzaXplID09IDE2KQorCWlmIChpY19sc2l6ZSA9PSAwKQorCQlyNGtfYmxhc3RfaWNhY2hlX3BhZ2VfaW5kZXhlZCA9ICh2b2lkICopY2FjaGVfbm9vcDsKKwllbHNlIGlmIChpY19sc2l6ZSA9PSAxNikKIAkJcjRrX2JsYXN0X2ljYWNoZV9wYWdlX2luZGV4ZWQgPSBibGFzdF9pY2FjaGUxNl9wYWdlX2luZGV4ZWQ7CiAJZWxzZSBpZiAoaWNfbHNpemUgPT0gMzIpIHsKIAkJaWYgKFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUiAmJiBjcHVfaXNfcjQ2MDBfdjFfeCgpKQpAQCAtMjM4LDcgKzI0Nyw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBpY19sc2l6ZSA9IGNwdV9pY2FjaGVfbGluZV9zaXplKCk7CiAKLQlpZiAoaWNfbHNpemUgPT0gMTYpCisJaWYgKGljX2xzaXplID09IDApCisJCXI0a19ibGFzdF9pY2FjaGUgPSAodm9pZCAqKWNhY2hlX25vb3A7CisJZWxzZSBpZiAoaWNfbHNpemUgPT0gMTYpCiAJCXI0a19ibGFzdF9pY2FjaGUgPSBibGFzdF9pY2FjaGUxNjsKIAllbHNlIGlmIChpY19sc2l6ZSA9PSAzMikgewogCQlpZiAoUjQ2MDBfVjFfSU5ERVhfSUNBQ0hFT1BfV0FSICYmIGNwdV9pc19yNDYwMF92MV94KCkpCkBAIC0yNTgsNyArMjY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjX2xzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKIAogCWlmIChzY2FjaGVfc2l6ZSA9PSAwKQotCQlyNGtfYmxhc3Rfc2NhY2hlX3BhZ2UgPSAodm9pZCAqKW5vX3NjX25vb3A7CisJCXI0a19ibGFzdF9zY2FjaGVfcGFnZSA9ICh2b2lkICopY2FjaGVfbm9vcDsKIAllbHNlIGlmIChzY19sc2l6ZSA9PSAxNikKIAkJcjRrX2JsYXN0X3NjYWNoZV9wYWdlID0gYmxhc3Rfc2NhY2hlMTZfcGFnZTsKIAllbHNlIGlmIChzY19sc2l6ZSA9PSAzMikKQEAgLTI3Niw3ICsyODcsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2NfbHNpemUgPSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpOwogCiAJaWYgKHNjYWNoZV9zaXplID09IDApCi0JCXI0a19ibGFzdF9zY2FjaGVfcGFnZV9pbmRleGVkID0gKHZvaWQgKilub19zY19ub29wOworCQlyNGtfYmxhc3Rfc2NhY2hlX3BhZ2VfaW5kZXhlZCA9ICh2b2lkICopY2FjaGVfbm9vcDsKIAllbHNlIGlmIChzY19sc2l6ZSA9PSAxNikKIAkJcjRrX2JsYXN0X3NjYWNoZV9wYWdlX2luZGV4ZWQgPSBibGFzdF9zY2FjaGUxNl9wYWdlX2luZGV4ZWQ7CiAJZWxzZSBpZiAoc2NfbHNpemUgPT0gMzIpCkBAIC0yOTQsNyArMzA1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjX2xzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKIAogCWlmIChzY2FjaGVfc2l6ZSA9PSAwKQotCQlyNGtfYmxhc3Rfc2NhY2hlID0gKHZvaWQgKilub19zY19ub29wOworCQlyNGtfYmxhc3Rfc2NhY2hlID0gKHZvaWQgKiljYWNoZV9ub29wOwogCWVsc2UgaWYgKHNjX2xzaXplID09IDE2KQogCQlyNGtfYmxhc3Rfc2NhY2hlID0gYmxhc3Rfc2NhY2hlMTY7CiAJZWxzZSBpZiAoc2NfbHNpemUgPT0gMzIpCkBAIC01MDgsNyArNTE5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGZpcl9hcmdzLT5lbmQ7CiAKIAlpZiAoIWNwdV9oYXNfaWNfZmlsbHNfZl9kYykgewotCQlpZiAoZW5kIC0gc3RhcnQgPiBkY2FjaGVfc2l6ZSkgeworCQlpZiAoZW5kIC0gc3RhcnQgPj0gZGNhY2hlX3NpemUpIHsKIAkJCXI0a19ibGFzdF9kY2FjaGUoKTsKIAkJfSBlbHNlIHsKIAkJCVI0NjAwX0hJVF9DQUNIRU9QX1dBUl9JTVBMOwpAQCAtNjgzLDEwICs2OTQsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgYXJnOwogCiAJUjQ2MDBfSElUX0NBQ0hFT1BfV0FSX0lNUEw7Ci0JcHJvdGVjdGVkX3dyaXRlYmFja19kY2FjaGVfbGluZShhZGRyICYgfihkY19sc2l6ZSAtIDEpKTsKKwlpZiAoZGNfbHNpemUpCisJCXByb3RlY3RlZF93cml0ZWJhY2tfZGNhY2hlX2xpbmUoYWRkciAmIH4oZGNfbHNpemUgLSAxKSk7CiAJaWYgKCFjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUgJiYgc2NhY2hlX3NpemUpCiAJCXByb3RlY3RlZF93cml0ZWJhY2tfc2NhY2hlX2xpbmUoYWRkciAmIH4oc2NfbHNpemUgLSAxKSk7Ci0JcHJvdGVjdGVkX2ZsdXNoX2ljYWNoZV9saW5lKGFkZHIgJiB+KGljX2xzaXplIC0gMSkpOworCWlmIChpY19sc2l6ZSkKKwkJcHJvdGVjdGVkX2ZsdXNoX2ljYWNoZV9saW5lKGFkZHIgJiB+KGljX2xzaXplIC0gMSkpOwogCWlmIChNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkJIi5zZXQgcHVzaFxuXHQiCkBAIC05NzMsOCArOTg2LDEwIEBACiAJYy0+aWNhY2hlLndheXNpemUgPSBpY2FjaGVfc2l6ZSAvIGMtPmljYWNoZS53YXlzOwogCWMtPmRjYWNoZS53YXlzaXplID0gZGNhY2hlX3NpemUgLyBjLT5kY2FjaGUud2F5czsKIAotCWMtPmljYWNoZS5zZXRzID0gaWNhY2hlX3NpemUgLyAoYy0+aWNhY2hlLmxpbmVzeiAqIGMtPmljYWNoZS53YXlzKTsKLQljLT5kY2FjaGUuc2V0cyA9IGRjYWNoZV9zaXplIC8gKGMtPmRjYWNoZS5saW5lc3ogKiBjLT5kY2FjaGUud2F5cyk7CisJYy0+aWNhY2hlLnNldHMgPSBjLT5pY2FjaGUubGluZXN6ID8KKwkJaWNhY2hlX3NpemUgLyAoYy0+aWNhY2hlLmxpbmVzeiAqIGMtPmljYWNoZS53YXlzKSA6IDA7CisJYy0+ZGNhY2hlLnNldHMgPSBjLT5kY2FjaGUubGluZXN6ID8KKwkJZGNhY2hlX3NpemUgLyAoYy0+ZGNhY2hlLmxpbmVzeiAqIGMtPmRjYWNoZS53YXlzKSA6IDA7CiAKIAkvKgogCSAqIFIxMDAwMCBhbmQgUjEyMDAwIFAtY2FjaGVzIGFyZSBvZGQgaW4gYSBwb3NpdGl2ZSB3YXkuICBUaGV5J3JlIDMya0IKQEAgLTk5MywxMCArMTAwOCwxNiBAQAogCQlicmVhazsKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMzRLOgotCQlpZiAoIShyZWFkX2MwX2NvbmZpZzcoKSAmICgxIDw8IDE2KSkpCisJY2FzZSBDUFVfNzRLOgorCQlpZiAoKHJlYWRfYzBfY29uZmlnNygpICYgKDEgPDwgMTYpKSkgeworCQkJLyogZWZmZWN0aXZlbHkgcGh5c2ljYWxseSBpbmRleGVkIGRjYWNoZSwKKwkJCSAgIHRodXMgbm8gdmlydHVhbCBhbGlhc2VzLiAqLworCQkJYy0+ZGNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfUElOREVYOworCQkJYnJlYWs7CisJCX0KIAlkZWZhdWx0OgotCQkJaWYgKGMtPmRjYWNoZS53YXlzaXplID4gUEFHRV9TSVpFKQotCQkJCWMtPmRjYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX0FMSUFTRVM7CisJCWlmIChjLT5kY2FjaGUud2F5c2l6ZSA+IFBBR0VfU0laRSkKKwkJCWMtPmRjYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX0FMSUFTRVM7CiAJfQogCiAJc3dpdGNoIChjLT5jcHV0eXBlKSB7CkBAIC0xMDkyLDYgKzExMTMsNyBAQAogCiBleHRlcm4gaW50IHI1a19zY19pbml0KHZvaWQpOwogZXh0ZXJuIGludCBybTdrX3NjX2luaXQodm9pZCk7CitleHRlcm4gaW50IG1pcHNfc2NfaW5pdCh2b2lkKTsKIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3NjYWNoZSh2b2lkKQogewpAQCAtMTEzOSwxNyArMTE2MSwyOSBAQAogCQlyZXR1cm47CiAKIAlkZWZhdWx0OgorCQlpZiAoYy0+aXNhX2xldmVsID09IE1JUFNfQ1BVX0lTQV9NMzJSMSB8fAorCQkgICAgYy0+aXNhX2xldmVsID09IE1JUFNfQ1BVX0lTQV9NMzJSMiB8fAorCQkgICAgYy0+aXNhX2xldmVsID09IE1JUFNfQ1BVX0lTQV9NNjRSMSB8fAorCQkgICAgYy0+aXNhX2xldmVsID09IE1JUFNfQ1BVX0lTQV9NNjRSMikgeworI2lmZGVmIENPTkZJR19NSVBTX0NQVV9TQ0FDSEUKKwkJCWlmIChtaXBzX3NjX2luaXQgKCkpIHsKKwkJCQlzY2FjaGVfc2l6ZSA9IGMtPnNjYWNoZS53YXlzICogYy0+c2NhY2hlLnNldHMgKiBjLT5zY2FjaGUubGluZXN6OworCQkJCXByaW50aygiTUlQUyBzZWNvbmRhcnkgY2FjaGUgJWxka0IsICVzLCBsaW5lc2l6ZSAlZCBieXRlcy5cbiIsCisJCQkJICAgICAgIHNjYWNoZV9zaXplID4+IDEwLAorCQkJCSAgICAgICB3YXlfc3RyaW5nW2MtPnNjYWNoZS53YXlzXSwgYy0+c2NhY2hlLmxpbmVzeik7CisJCQl9CisjZWxzZQorCQkJaWYgKCEoYy0+c2NhY2hlLmZsYWdzICYgTUlQU19DQUNIRV9OT1RfUFJFU0VOVCkpCisJCQkJcGFuaWMoIkR1bm5vIGhvdyB0byBoYW5kbGUgTUlQUzMyIC8gTUlQUzY0IHNlY29uZCBsZXZlbCBjYWNoZSIpOworI2VuZGlmCisJCQlyZXR1cm47CisJCX0KIAkJc2NfcHJlc2VudCA9IDA7CiAJfQogCiAJaWYgKCFzY19wcmVzZW50KQogCQlyZXR1cm47CiAKLQlpZiAoKGMtPmlzYV9sZXZlbCA9PSBNSVBTX0NQVV9JU0FfTTMyUjEgfHwKLQkgICAgIGMtPmlzYV9sZXZlbCA9PSBNSVBTX0NQVV9JU0FfTTY0UjEpICYmCi0JICAgICEoYy0+c2NhY2hlLmZsYWdzICYgTUlQU19DQUNIRV9OT1RfUFJFU0VOVCkpCi0JCXBhbmljKCJEdW5ubyBob3cgdG8gaGFuZGxlIE1JUFMzMiAvIE1JUFM2NCBzZWNvbmQgbGV2ZWwgY2FjaGUiKTsKLQogCS8qIGNvbXB1dGUgYSBjb3VwbGUgb2Ygb3RoZXIgY2FjaGUgdmFyaWFibGVzICovCiAJYy0+c2NhY2hlLndheXNpemUgPSBzY2FjaGVfc2l6ZSAvIGMtPnNjYWNoZS53YXlzOwogCkBAIC0xMjQ2LDEwICsxMjgwLDEyIEBACiAJICogVGhpcyBjb2RlIHN1cHBvcnRzIHZpcnR1YWxseSBpbmRleGVkIHByb2Nlc3NvcnMgYW5kIHdpbGwgYmUKIAkgKiB1bm5lY2Vzc2FyaWx5IGluZWZmaWNpZW50IG9uIHBoeXNpY2FsbHkgaW5kZXhlZCBwcm9jZXNzb3JzLgogCSAqLwotCXNobV9hbGlnbl9tYXNrID0gbWF4X3QoIHVuc2lnbmVkIGxvbmcsCi0JCQkJYy0+ZGNhY2hlLnNldHMgKiBjLT5kY2FjaGUubGluZXN6IC0gMSwKLQkJCQlQQUdFX1NJWkUgLSAxKTsKLQorCWlmIChjLT5kY2FjaGUubGluZXN6KQorCQlzaG1fYWxpZ25fbWFzayA9IG1heF90KCB1bnNpZ25lZCBsb25nLAorCQkJCQljLT5kY2FjaGUuc2V0cyAqIGMtPmRjYWNoZS5saW5lc3ogLSAxLAorCQkJCQlQQUdFX1NJWkUgLSAxKTsKKwllbHNlCisJCXNobV9hbGlnbl9tYXNrID0gUEFHRV9TSVpFLTE7CiAJZmx1c2hfY2FjaGVfYWxsCQk9IHI0a19mbHVzaF9jYWNoZV9hbGw7CiAJX19mbHVzaF9jYWNoZV9hbGwJPSByNGtfX19mbHVzaF9jYWNoZV9hbGw7CiAJZmx1c2hfY2FjaGVfbW0JCT0gcjRrX2ZsdXNoX2NhY2hlX21tOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2Mtc2IxLmMgYi9hcmNoL21pcHMvbW0vYy1zYjEuYwppbmRleCBmOWIxMjk0Li4yZDcxZWZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1zYjEuYworKysgYi9hcmNoL21pcHMvbW0vYy1zYjEuYwpAQCAtMTgsNyArMTgsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NhY2hlLmMgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwppbmRleCA4M2E1NjI5Li5kZGQzYTJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2FjaGUuYworKysgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NlcnItc2IxLmMgYi9hcmNoL21pcHMvbW0vY2Vyci1zYjEuYwppbmRleCAxY2YzYzYwLi5lMTlmYmI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2Vyci1zYjEuYworKysgYi9hcmNoL21pcHMvbW0vY2Vyci1zYjEuYwpAQCAtMTUsNyArMTUsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2RtYS1jb2hlcmVudC5jIGIvYXJjaC9taXBzL21tL2RtYS1jb2hlcmVudC5jCmluZGV4IGY2YjNjNzIyLi43ZmE1ZmQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLWNvaGVyZW50LmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1jb2hlcmVudC5jCkBAIC03LDcgKzcsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBSYWxmIEJhZWNobGUgPHJhbGZAZ251Lm9yZz4KICAqIHN3aXBlZCBmcm9tIGkzODYsIGFuZCBjbG9uZWQgZm9yIE1JUFMgYnkgR2VlcnQsIHBvbGlzaGVkIGJ5IFJhbGYuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9kbWEtbm9uY29oZXJlbnQuYyBiL2FyY2gvbWlwcy9tbS9kbWEtbm9uY29oZXJlbnQuYwppbmRleCBjZDRlYTg0Li4yZWVmZmU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLW5vbmNvaGVyZW50LmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1ub25jb2hlcmVudC5jCkBAIC03LDcgKzcsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBSYWxmIEJhZWNobGUgPHJhbGZAZ251Lm9yZz4KICAqIHN3aXBlZCBmcm9tIGkzODYsIGFuZCBjbG9uZWQgZm9yIE1JUFMgYnkgR2VlcnQsIHBvbGlzaGVkIGJ5IFJhbGYuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwppbmRleCAwYzU0NDM3Li45OWViZjNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMzNmNmUxYy4uODAyYmRkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC04LDcgKzgsNiBAQAogICogS2V2aW4gRC4gS2lzc2VsbCwga2V2aW5rQG1pcHMuY29tIGFuZCBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KICAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1zYjEuYyBiL2FyY2gvbWlwcy9tbS9wZy1zYjEuYwppbmRleCAxNDhjNjViLi5mYzNjNzg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctc2IxLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXNiMS5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BndGFibGUtMzIuYyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTMyLmMKaW5kZXggNGEzYzQ5MS4uNGJkYWEwNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BndGFibGUtMzIuYworKysgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS0zMi5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMyBieSBSYWxmIEJhZWNobGUKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS5jCmluZGV4IDNmZTk0MjAuLjc5MmM2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjUwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IENocmlzIERlYXJtYW4gKGNocmlzQG1pcHMuY29tKSwKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYmNhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlb3BzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcjRrY2FjaGUuaD4KKworLyoKKyAqIE1JUFMzMi9NSVBTNjQgTDIgY2FjaGUgaGFuZGxpbmcKKyAqLworCisvKgorICogV3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlIHRoZSBzZWNvbmRhcnkgY2FjaGUgYmVmb3JlIERNQS4KKyAqLworc3RhdGljIHZvaWQgbWlwc19zY193YmFja19pbnYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJYmxhc3Rfc2NhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplKTsKK30KKworLyoKKyAqIEludmFsaWRhdGUgdGhlIHNlY29uZGFyeSBjYWNoZSBiZWZvcmUgRE1BLgorICovCitzdGF0aWMgdm9pZCBtaXBzX3NjX2ludih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlibGFzdF9pbnZfc2NhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplKTsKK30KKworc3RhdGljIHZvaWQgbWlwc19zY19lbmFibGUodm9pZCkKK3sKKwkvKiBMMiBjYWNoZSBpcyBwZXJtYW5lbnRseSBlbmFibGVkICovCit9CisKK3N0YXRpYyB2b2lkIG1pcHNfc2NfZGlzYWJsZSh2b2lkKQoreworCS8qIEwyIGNhY2hlIGlzIHBlcm1hbmVudGx5IGVuYWJsZWQgKi8KK30KKworc3RhdGljIHN0cnVjdCBiY2FjaGVfb3BzIG1pcHNfc2Nfb3BzID0geworCS5iY19lbmFibGUgPSBtaXBzX3NjX2VuYWJsZSwKKwkuYmNfZGlzYWJsZSA9IG1pcHNfc2NfZGlzYWJsZSwKKwkuYmNfd2JhY2tfaW52ID0gbWlwc19zY193YmFja19pbnYsCisJLmJjX2ludiA9IG1pcHNfc2NfaW52Cit9OworCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgbWlwc19zY19wcm9iZSh2b2lkKQoreworCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY29uZmlnMSwgY29uZmlnMjsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogTWFyayBhcyBub3QgcHJlc2VudCB1bnRpbCBwcm9iZSBjb21wbGV0ZWQgKi8KKwljLT5zY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9OT1RfUFJFU0VOVDsKKworCS8qIElnbm9yZSBhbnl0aGluZyBidXQgTUlQU3h4IHByb2Nlc3NvcnMgKi8KKwlpZiAoYy0+aXNhX2xldmVsICE9IE1JUFNfQ1BVX0lTQV9NMzJSMSAmJgorCSAgICBjLT5pc2FfbGV2ZWwgIT0gTUlQU19DUFVfSVNBX00zMlIyICYmCisJICAgIGMtPmlzYV9sZXZlbCAhPSBNSVBTX0NQVV9JU0FfTTY0UjEgJiYKKwkgICAgYy0+aXNhX2xldmVsICE9IE1JUFNfQ1BVX0lTQV9NNjRSMikKKwkJcmV0dXJuIDA7CisKKwkvKiBEb2VzIHRoaXMgTUlQUzMyL01JUFM2NCBDUFUgaGF2ZSBhIGNvbmZpZzIgcmVnaXN0ZXI/ICovCisJY29uZmlnMSA9IHJlYWRfYzBfY29uZmlnMSgpOworCWlmICghKGNvbmZpZzEgJiBNSVBTX0NPTkZfTSkpCisJCXJldHVybiAwOworCisJY29uZmlnMiA9IHJlYWRfYzBfY29uZmlnMigpOworCXRtcCA9IChjb25maWcyID4+IDQpICYgMHgwZjsKKwlpZiAoMCA8IHRtcCAmJiB0bXAgPD0gNykKKwkJYy0+c2NhY2hlLmxpbmVzeiA9IDIgPDwgdG1wOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwl0bXAgPSAoY29uZmlnMiA+PiA4KSAmIDB4MGY7CisJaWYgKDAgPD0gdG1wICYmIHRtcCA8PSA3KQorCQljLT5zY2FjaGUuc2V0cyA9IDY0IDw8IHRtcDsKKwllbHNlCisJCXJldHVybiAwOworCisJdG1wID0gKGNvbmZpZzIgPj4gMCkgJiAweDBmOworCWlmICgwIDw9IHRtcCAmJiB0bXAgPD0gNykKKwkJYy0+c2NhY2hlLndheXMgPSB0bXAgKyAxOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwljLT5zY2FjaGUud2F5c2l6ZSA9IGMtPnNjYWNoZS5zZXRzICogYy0+c2NhY2hlLmxpbmVzejsKKwljLT5zY2FjaGUud2F5Yml0ID0gX19mZnMoYy0+c2NhY2hlLndheXNpemUpOworCisJYy0+c2NhY2hlLmZsYWdzICY9IH5NSVBTX0NBQ0hFX05PVF9QUkVTRU5UOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBfX2luaXQgbWlwc19zY19pbml0KHZvaWQpCit7CisJaW50IGZvdW5kID0gbWlwc19zY19wcm9iZSAoKTsKKwlpZiAoZm91bmQpIHsKKwkJbWlwc19zY19lbmFibGUoKTsKKwkJYmNvcHMgPSAmbWlwc19zY19vcHM7CisJfQorCXJldHVybiBmb3VuZDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggOTY1Y2I0Yy4uMmNkZTFiNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC04LDcgKzgsNiBAQAogICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yOGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjhrLmMKaW5kZXggMWJmYjA5MS4uMjY2YTQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yOGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI4ay5jCkBAIC04LDcgKzgsNiBAQAogICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCA1NDUwN2JlMi4uZTFhODEzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvZGJnX2lvLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYwppbmRleCBkN2RlYTBhLi5iODVhNjUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1JFTU9URV9ERUJVRykKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYwppbmRleCBlYzQwMzJiLi5mOTA2NzQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9pcnEuYwpAQCAtNzEsNyArNzEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX212NjQzNDAgPSB7Ci0Jbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJNVjY0MzQwLUNhc2NhZGUiLCBOVUxMLCBOVUxMCisJbm9fYWN0aW9uLCBJUlFGX0RJU0FCTEVELCBDUFVfTUFTS19OT05FLCAiTVY2NDM0MC1DYXNjYWRlIiwgTlVMTCwgTlVMTAogfTsKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcHJvbS5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcHJvbS5jCmluZGV4IDFjYWRhYTkuLjNkMjcxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3Byb20uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wcm9tLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqCiAgKiBBZGRlZCBjaGFuZ2VzIGZvciBTTVAgLSBNYW5pc2ggTGFjaHdhbmkgKGxhY2h3YW5pQHBtYy1zaWVycmEuY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3Jlc2V0LmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9yZXNldC5jCmluZGV4IGNlOWZiMmUuLmM3M2IwODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcmVzZXQuYwpAQCAtMTQsNyArMTQsNiBAQAogICogTG91aXMgSGFtaWx0b24sIFJlZCBIYXQsIEluYy4KICAqIGhhbWlsdG9uQHJlZGhhdC5jb20gIFtNSVBTNjQgbW9kaWZpY2F0aW9uc10KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCmluZGV4IGRmMTQ4NTUuLmIwOGU2YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwpAQCAtMzksNyArMzksNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzcwLDggKzM2OSw4IEBACiAJcG1fcG93ZXJfb2ZmID0gbW9tZW5jb19qYWd1YXJfcG93ZXJfb2ZmOwogCiAJLyoKLQkgKiBpbml0cmRfc3RhcnQgPSAodWxvbmcpamFndWFyX2luaXRyZF9zdGFydDsKLQkgKiBpbml0cmRfZW5kID0gKHVsb25nKWphZ3Vhcl9pbml0cmRfc3RhcnQgKyAodWxvbmcpamFndWFyX2luaXRyZF9zaXplOworCSAqIGluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWphZ3Vhcl9pbml0cmRfc3RhcnQ7CisJICogaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKWphZ3Vhcl9pbml0cmRfc3RhcnQgKyAodWxvbmcpamFndWFyX2luaXRyZF9zaXplOwogCSAqIGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7CiAJICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9pcnEuYwppbmRleCA4N2M2M2MzLi43OTM3ODJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL2lycS5jCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX212NjQzNDAgPSB7Ci0Jbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJNVjY0MzQwLUNhc2NhZGUiLCBOVUxMLCBOVUxMCisJbm9fYWN0aW9uLCBJUlFGX0RJU0FCTEVELCBDUFVfTUFTS19OT05FLCAiTVY2NDM0MC1DYXNjYWRlIiwgTlVMTCwgTlVMTAogfTsKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Byb20uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9wcm9tLmMKaW5kZXggOTgwM2RhYS4uMjk2ZDk0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Byb20uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvcHJvbS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiBBdXRob3I6IE1hbmlzaCBMYWNod2FuaSwgbWxhY2h3YW5pQG12aXN0YS5jb20KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9jcGNpLWlycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2NwY2ktaXJxLmMKaW5kZXggYmQ4ODU3OC4uMzFkMTc5YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2NwY2ktaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2NwY2ktaXJxLmMKQEAgLTE0Nyw2ICsxNDcsNiBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMjsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZjcGNpX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNwY2lfaXJxX3R5cGU7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jCmluZGV4IGYwYTZhMzguLjIxMjg2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvZGJnX2lvLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMKaW5kZXggODZmNjFjZS4uOWQ0NGFlMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2lycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYwpAQCAtNTIsMTEgKzUyLDExIEBACiBleHRlcm4gdm9pZCBjcGNpX2lycV9pbml0KHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX2ZwZ2EgPSB7Ci0Jbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIHZpYSBGUEdBIiwgTlVMTCwgTlVMTAorCW5vX2FjdGlvbiwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUgdmlhIEZQR0EiLCBOVUxMLCBOVUxMCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX212NjQzNDAgPSB7Ci0Jbm9fYWN0aW9uLCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIHZpYSBNVjY0MzQwIiwgTlVMTCwgTlVMTAorCW5vX2FjdGlvbiwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUgdmlhIE1WNjQzNDAiLCBOVUxMLCBOVUxMCiB9OwogCiBleHRlcm4gdm9pZCBsbF91YXJ0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvb2NlbG90X2NfZnBnYS5oIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL29jZWxvdF9jX2ZwZ2EuaAppbmRleCA5N2ZiNzdkYS4uNzIyOGNkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL29jZWxvdF9jX2ZwZ2EuaAorKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvb2NlbG90X2NfZnBnYS5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWZuZGVmIF9fT0NFTE9UX0NfRlBHQV9IX18KICNkZWZpbmUgX19PQ0VMT1RfQ19GUEdBX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgT0NFTE9UX0NfQ1MwX0FERFIgICAgICAgKDB4ZmZmZmZmZmZmYzAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wcm9tLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcHJvbS5jCmluZGV4IGU5MjM2NDQuLjRjNTBhMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3Byb20uYwpAQCAtMTQsNyArMTQsNiBAQAogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9yZXNldC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3Jlc2V0LmMKaW5kZXggOWRjZDE1NGMuLjNmZGNiNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9yZXNldC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBMb3VpcyBIYW1pbHRvbiwgUmVkIEhhdCwgSW5jLgogICogaGFtaWx0b25AcmVkaGF0LmNvbSAgW01JUFM2NCBtb2RpZmljYXRpb25zXQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvc2V0dXAuYwppbmRleCAyNTdlMWQxLi42YTQ1MTk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvc2V0dXAuYwpAQCAtNDAsNyArNDAsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0Miw4ICsyNDEsOCBAQAogCXBtX3Bvd2VyX29mZiA9IG1vbWVuY29fb2NlbG90X3Bvd2VyX29mZjsKIAogCS8qCi0JICogaW5pdHJkX3N0YXJ0ID0gKHVsb25nKW9jZWxvdF9pbml0cmRfc3RhcnQ7Ci0JICogaW5pdHJkX2VuZCA9ICh1bG9uZylvY2Vsb3RfaW5pdHJkX3N0YXJ0ICsgKHVsb25nKW9jZWxvdF9pbml0cmRfc2l6ZTsKKwkgKiBpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylvY2Vsb3RfaW5pdHJkX3N0YXJ0OworCSAqIGluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZylvY2Vsb3RfaW5pdHJkX3N0YXJ0ICsgKHVsb25nKW9jZWxvdF9pbml0cmRfc2l6ZTsKIAkgKiBpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOwogCSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvdWFydC1pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy91YXJ0LWlycS5jCmluZGV4IDc1NWJkZTUuLjg1MjI2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy91YXJ0LWlycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy91YXJ0LWlycS5jCkBAIC0xMzcsMTAgKzEzNywxMCBAQAogCWlycV9kZXNjWzgwXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJaXJxX2Rlc2NbODBdLmFjdGlvbiA9IDA7CiAJaXJxX2Rlc2NbODBdLmRlcHRoID0gMjsKLQlpcnFfZGVzY1s4MF0uaGFuZGxlciA9ICZ1YXJ0X2lycV90eXBlOworCWlycV9kZXNjWzgwXS5jaGlwID0gJnVhcnRfaXJxX3R5cGU7CiAKIAlpcnFfZGVzY1s4MV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCWlycV9kZXNjWzgxXS5hY3Rpb24gPSAwOwogCWlycV9kZXNjWzgxXS5kZXB0aCA9IDI7Ci0JaXJxX2Rlc2NbODFdLmhhbmRsZXIgPSAmdWFydF9pcnFfdHlwZTsKKwlpcnFfZGVzY1s4MV0uY2hpcCA9ICZ1YXJ0X2lycV90eXBlOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jCmluZGV4IGYwYTZhMzguLjIxMjg2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZGJnX2lvLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfS0dEQgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZ3QtaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZ3QtaXJxLmMKaW5kZXggOGJkOWI4NC4uOWZiMjQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2d0LWlycS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndC1pcnEuYwpAQCAtMTEsNyArMTEsNiBAQAogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNzQsNyArMTczLDcgQEAKIAkgKiB0aGUgdmFsdWVzIHRvIHRoZSBjb3JyZWN0IGludGVycnVwdCBsaW5lLgogCSAqLwogCXRpbWVyLmhhbmRsZXIgPSAmZ3Q2NDI0MF9wMGludF9pcnE7Ci0JdGltZXIuZmxhZ3MgPSBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVDsKKwl0aW1lci5mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRDsKIAl0aW1lci5uYW1lID0gInRpbWVyIjsKIAl0aW1lci5kZXZfaWQgPSBOVUxMOwogCXRpbWVyLm5leHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3Byb20uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9wcm9tLmMKaW5kZXggNmI0ZjU3Ny4uNjUwOWE5YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3Byb20uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvcHJvbS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvc2V0dXAuYwppbmRleCA3MjE0M2FiLi5jNTgwYjFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvc2V0dXAuYwpAQCAtMzcsNyArMzcsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTc0LDggKzE3Myw4IEBACiAJcG1fcG93ZXJfb2ZmID0gbW9tZW5jb19vY2Vsb3RfcG93ZXJfb2ZmOwogCiAJLyoKLQkgKiBpbml0cmRfc3RhcnQgPSAodWxvbmcpb2NlbG90X2luaXRyZF9zdGFydDsKLQkgKiBpbml0cmRfZW5kID0gKHVsb25nKW9jZWxvdF9pbml0cmRfc3RhcnQgKyAodWxvbmcpb2NlbG90X2luaXRyZF9zaXplOworCSAqIGluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKW9jZWxvdF9pbml0cmRfc3RhcnQ7CisJICogaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKW9jZWxvdF9pbml0cmRfc3RhcnQgKyAodWxvbmcpb2NlbG90X2luaXRyZF9zaXplOwogCSAqIGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7CiAJICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYwppbmRleCBmMjZhMDBlLi5hMDljNWY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX21pcHN4eC5jCkBAIC0xMiwxNiArMTIsNzAgQEAKIAogI2luY2x1ZGUgIm9wX2ltcGwuaCIKIAotI2RlZmluZSBNX1BFUkZDVExfRVhMCQkJKDFVTCAgICA8PCAgMCkKLSNkZWZpbmUgTV9QRVJGQ1RMX0tFUk5FTAkJKDFVTCAgICA8PCAgMSkKLSNkZWZpbmUgTV9QRVJGQ1RMX1NVUEVSVklTT1IJCSgxVUwgICAgPDwgIDIpCi0jZGVmaW5lIE1fUEVSRkNUTF9VU0VSCQkJKDFVTCAgICA8PCAgMykKLSNkZWZpbmUgTV9QRVJGQ1RMX0lOVEVSUlVQVF9FTkFCTEUJKDFVTCAgICA8PCAgNCkKLSNkZWZpbmUgTV9QRVJGQ1RMX0VWRU5UKGV2ZW50KQkJKChldmVudCkgPDwgNSkKLSNkZWZpbmUgTV9QRVJGQ1RMX1dJREUJCQkoMVVMICAgIDw8IDMwKQotI2RlZmluZSBNX1BFUkZDVExfTU9SRQkJCSgxVUwgICAgPDwgMzEpCisjZGVmaW5lIE1fUEVSRkNUTF9FWEwJCQkoMVVMICAgICAgPDwgIDApCisjZGVmaW5lIE1fUEVSRkNUTF9LRVJORUwJCSgxVUwgICAgICA8PCAgMSkKKyNkZWZpbmUgTV9QRVJGQ1RMX1NVUEVSVklTT1IJCSgxVUwgICAgICA8PCAgMikKKyNkZWZpbmUgTV9QRVJGQ1RMX1VTRVIJCQkoMVVMICAgICAgPDwgIDMpCisjZGVmaW5lIE1fUEVSRkNUTF9JTlRFUlJVUFRfRU5BQkxFCSgxVUwgICAgICA8PCAgNCkKKyNkZWZpbmUgTV9QRVJGQ1RMX0VWRU5UKGV2ZW50KQkJKChldmVudCkgIDw8IDUpCisjZGVmaW5lIE1fUEVSRkNUTF9WUEVJRCh2cGUpCQkoKHZwZSkgICAgPDwgMTYpCisjZGVmaW5lIE1fUEVSRkNUTF9NVF9FTihmaWx0ZXIpCQkoKGZpbHRlcikgPDwgMjApCisjZGVmaW5lICAgIE1fVENfRU5fQUxMCQkJTV9QRVJGQ1RMX01UX0VOKDApCisjZGVmaW5lICAgIE1fVENfRU5fVlBFCQkJTV9QRVJGQ1RMX01UX0VOKDEpCisjZGVmaW5lICAgIE1fVENfRU5fVEMJCQlNX1BFUkZDVExfTVRfRU4oMikKKyNkZWZpbmUgTV9QRVJGQ1RMX1RDSUQodGNpZCkJCSgodGNpZCkgICA8PCAyMikKKyNkZWZpbmUgTV9QRVJGQ1RMX1dJREUJCQkoMVVMICAgICAgPDwgMzApCisjZGVmaW5lIE1fUEVSRkNUTF9NT1JFCQkJKDFVTCAgICAgIDw8IDMxKQogCi0jZGVmaW5lIE1fQ09VTlRFUl9PVkVSRkxPVwkJKDFVTCAgICA8PCAzMSkKKyNkZWZpbmUgTV9DT1VOVEVSX09WRVJGTE9XCQkoMVVMICAgICAgPDwgMzEpCisKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVAKKyNkZWZpbmUgV0hBVAkoTV9UQ19FTl9WUEUgfCBNX1BFUkZDVExfVlBFSUQoc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKyNlbHNlCisjZGVmaW5lIFdIQVQJMAorI2VuZGlmCisKKyNkZWZpbmUgX19kZWZpbmVfcGVyZl9hY2Nlc3NvcnMociwgbiwgbnApCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJfYzBfICMjIHIgIyMgbih2b2lkKQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoY3B1KSB7CQkJCQkJCVwKKwljYXNlIDA6CQkJCQkJCQlcCisJCXJldHVybiByZWFkX2MwXyAjIyByICMjIG4oKTsJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJcmV0dXJuIHJlYWRfYzBfICMjIHIgIyMgbnAoKTsJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIHdfYzBfICMjIHIgIyMgbih1bnNpZ25lZCBpbnQgdmFsdWUpCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwkJCQlcCisJCQkJCQkJCQlcCisJc3dpdGNoIChjcHUpIHsJCQkJCQkJXAorCWNhc2UgMDoJCQkJCQkJCVwKKwkJd3JpdGVfYzBfICMjIHIgIyMgbih2YWx1ZSk7CQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQl3cml0ZV9jMF8gIyMgciAjIyBucCh2YWx1ZSk7CQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30JCQkJCQkJCQlcCisKK19fZGVmaW5lX3BlcmZfYWNjZXNzb3JzKHBlcmZjbnRyLCAwLCAyKQorX19kZWZpbmVfcGVyZl9hY2Nlc3NvcnMocGVyZmNudHIsIDEsIDMpCitfX2RlZmluZV9wZXJmX2FjY2Vzc29ycyhwZXJmY250ciwgMiwgMikKK19fZGVmaW5lX3BlcmZfYWNjZXNzb3JzKHBlcmZjbnRyLCAzLCAyKQorCitfX2RlZmluZV9wZXJmX2FjY2Vzc29ycyhwZXJmY3RybCwgMCwgMikKK19fZGVmaW5lX3BlcmZfYWNjZXNzb3JzKHBlcmZjdHJsLCAxLCAzKQorX19kZWZpbmVfcGVyZl9hY2Nlc3NvcnMocGVyZmN0cmwsIDIsIDIpCitfX2RlZmluZV9wZXJmX2FjY2Vzc29ycyhwZXJmY3RybCwgMywgMikKIAogc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wczsKIApAQCAtNjYsMTcgKzEyMCwxNyBAQAogCiAJc3dpdGNoIChjb3VudGVycykgewogCWNhc2UgNDoKLQkJd3JpdGVfYzBfcGVyZmN0cmwzKDApOwotCQl3cml0ZV9jMF9wZXJmY250cjMocmVnLmNvdW50ZXJbM10pOworCQl3X2MwX3BlcmZjdHJsMygwKTsKKwkJd19jMF9wZXJmY250cjMocmVnLmNvdW50ZXJbM10pOwogCWNhc2UgMzoKLQkJd3JpdGVfYzBfcGVyZmN0cmwyKDApOwotCQl3cml0ZV9jMF9wZXJmY250cjIocmVnLmNvdW50ZXJbMl0pOworCQl3X2MwX3BlcmZjdHJsMigwKTsKKwkJd19jMF9wZXJmY250cjIocmVnLmNvdW50ZXJbMl0pOwogCWNhc2UgMjoKLQkJd3JpdGVfYzBfcGVyZmN0cmwxKDApOwotCQl3cml0ZV9jMF9wZXJmY250cjEocmVnLmNvdW50ZXJbMV0pOworCQl3X2MwX3BlcmZjdHJsMSgwKTsKKwkJd19jMF9wZXJmY250cjEocmVnLmNvdW50ZXJbMV0pOwogCWNhc2UgMToKLQkJd3JpdGVfYzBfcGVyZmN0cmwwKDApOwotCQl3cml0ZV9jMF9wZXJmY250cjAocmVnLmNvdW50ZXJbMF0pOworCQl3X2MwX3BlcmZjdHJsMCgwKTsKKwkJd19jMF9wZXJmY250cjAocmVnLmNvdW50ZXJbMF0pOwogCX0KIH0KIApAQCAtODcsMTMgKzE0MSwxMyBAQAogCiAJc3dpdGNoIChjb3VudGVycykgewogCWNhc2UgNDoKLQkJd3JpdGVfYzBfcGVyZmN0cmwzKHJlZy5jb250cm9sWzNdKTsKKwkJd19jMF9wZXJmY3RybDMoV0hBVCB8IHJlZy5jb250cm9sWzNdKTsKIAljYXNlIDM6Ci0JCXdyaXRlX2MwX3BlcmZjdHJsMihyZWcuY29udHJvbFsyXSk7CisJCXdfYzBfcGVyZmN0cmwyKFdIQVQgfCByZWcuY29udHJvbFsyXSk7CiAJY2FzZSAyOgotCQl3cml0ZV9jMF9wZXJmY3RybDEocmVnLmNvbnRyb2xbMV0pOworCQl3X2MwX3BlcmZjdHJsMShXSEFUIHwgcmVnLmNvbnRyb2xbMV0pOwogCWNhc2UgMToKLQkJd3JpdGVfYzBfcGVyZmN0cmwwKHJlZy5jb250cm9sWzBdKTsKKwkJd19jMF9wZXJmY3RybDAoV0hBVCB8IHJlZy5jb250cm9sWzBdKTsKIAl9CiB9CiAKQEAgLTEwNCwxMyArMTU4LDEzIEBACiAKIAlzd2l0Y2ggKGNvdW50ZXJzKSB7CiAJY2FzZSA0OgotCQl3cml0ZV9jMF9wZXJmY3RybDMoMCk7CisJCXdfYzBfcGVyZmN0cmwzKDApOwogCWNhc2UgMzoKLQkJd3JpdGVfYzBfcGVyZmN0cmwyKDApOworCQl3X2MwX3BlcmZjdHJsMigwKTsKIAljYXNlIDI6Ci0JCXdyaXRlX2MwX3BlcmZjdHJsMSgwKTsKKwkJd19jMF9wZXJmY3RybDEoMCk7CiAJY2FzZSAxOgotCQl3cml0ZV9jMF9wZXJmY3RybDAoMCk7CisJCXdfYzBfcGVyZmN0cmwwKDApOwogCX0KIH0KIApAQCAtMTI0LDEyICsxNzgsMTIgQEAKIAlzd2l0Y2ggKGNvdW50ZXJzKSB7CiAjZGVmaW5lIEhBTkRMRV9DT1VOVEVSKG4pCQkJCQkJXAogCWNhc2UgbiArIDE6CQkJCQkJCVwKLQkJY29udHJvbCA9IHJlYWRfYzBfcGVyZmN0cmwgIyMgbigpOwkJCVwKLQkJY291bnRlciA9IHJlYWRfYzBfcGVyZmNudHIgIyMgbigpOwkJCVwKKwkJY29udHJvbCA9IHJfYzBfcGVyZmN0cmwgIyMgbigpOwkJCQlcCisJCWNvdW50ZXIgPSByX2MwX3BlcmZjbnRyICMjIG4oKTsJCQkJXAogCQlpZiAoKGNvbnRyb2wgJiBNX1BFUkZDVExfSU5URVJSVVBUX0VOQUJMRSkgJiYJCVwKIAkJICAgIChjb3VudGVyICYgTV9DT1VOVEVSX09WRVJGTE9XKSkgewkJCVwKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgbik7CQkJXAotCQkJd3JpdGVfYzBfcGVyZmNudHIgIyMgbihyZWcuY291bnRlcltuXSk7CQlcCisJCQl3X2MwX3BlcmZjbnRyICMjIG4ocmVnLmNvdW50ZXJbbl0pOwkJXAogCQkJaGFuZGxlZCA9IDE7CQkJCQlcCiAJCX0KIAlIQU5ETEVfQ09VTlRFUigzKQpAQCAtMTQzLDM1ICsxOTcsNDcgQEAKIAogI2RlZmluZSBNX0NPTkZJRzFfUEMJKDEgPDwgNCkKIAotc3RhdGljIGlubGluZSBpbnQgbl9jb3VudGVycyh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgX19uX2NvdW50ZXJzKHZvaWQpCiB7CiAJaWYgKCEocmVhZF9jMF9jb25maWcxKCkgJiBNX0NPTkZJRzFfUEMpKQogCQlyZXR1cm4gMDsKLQlpZiAoIShyZWFkX2MwX3BlcmZjdHJsMCgpICYgTV9QRVJGQ1RMX01PUkUpKQorCWlmICghKHJfYzBfcGVyZmN0cmwwKCkgJiBNX1BFUkZDVExfTU9SRSkpCiAJCXJldHVybiAxOwotCWlmICghKHJlYWRfYzBfcGVyZmN0cmwxKCkgJiBNX1BFUkZDVExfTU9SRSkpCisJaWYgKCEocl9jMF9wZXJmY3RybDEoKSAmIE1fUEVSRkNUTF9NT1JFKSkKIAkJcmV0dXJuIDI7Ci0JaWYgKCEocmVhZF9jMF9wZXJmY3RybDIoKSAmIE1fUEVSRkNUTF9NT1JFKSkKKwlpZiAoIShyX2MwX3BlcmZjdHJsMigpICYgTV9QRVJGQ1RMX01PUkUpKQogCQlyZXR1cm4gMzsKIAogCXJldHVybiA0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBuX2NvdW50ZXJzKHZvaWQpCit7CisJaW50IGNvdW50ZXJzID0gX19uX2NvdW50ZXJzKCk7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCWlmIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUgPT0gQ1BVXzM0SykKKwkJcmV0dXJuIGNvdW50ZXJzID4+IDE7CisjZW5kaWYKKworCXJldHVybiBjb3VudGVyczsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2NvdW50ZXJzKGludCBjb3VudGVycykKIHsKIAlzd2l0Y2ggKGNvdW50ZXJzKSB7CiAJY2FzZSA0OgotCQl3cml0ZV9jMF9wZXJmY3RybDMoMCk7Ci0JCXdyaXRlX2MwX3BlcmZjbnRyMygwKTsKKwkJd19jMF9wZXJmY3RybDMoMCk7CisJCXdfYzBfcGVyZmNudHIzKDApOwogCWNhc2UgMzoKLQkJd3JpdGVfYzBfcGVyZmN0cmwyKDApOwotCQl3cml0ZV9jMF9wZXJmY250cjIoMCk7CisJCXdfYzBfcGVyZmN0cmwyKDApOworCQl3X2MwX3BlcmZjbnRyMigwKTsKIAljYXNlIDI6Ci0JCXdyaXRlX2MwX3BlcmZjdHJsMSgwKTsKLQkJd3JpdGVfYzBfcGVyZmNudHIxKDApOworCQl3X2MwX3BlcmZjdHJsMSgwKTsKKwkJd19jMF9wZXJmY250cjEoMCk7CiAJY2FzZSAxOgotCQl3cml0ZV9jMF9wZXJmY3RybDAoMCk7Ci0JCXdyaXRlX2MwX3BlcmZjbnRyMCgwKTsKKwkJd19jMF9wZXJmY3RybDAoMCk7CisJCXdfYzBfcGVyZmNudHIwKDApOwogCX0KIH0KIApAQCAtMjAxLDcgKzI2Nyw2IEBACiAJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy8yNUsiOwogCQlicmVhazsKIAotI2lmbmRlZiBDT05GSUdfU01QCiAJY2FzZSBDUFVfMzRLOgogCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvMzRLIjsKIAkJYnJlYWs7CkBAIC0yMDksNyArMjc0LDYgQEAKIAljYXNlIENQVV83NEs6CiAJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy83NEsiOwogCQlicmVhazsKLSNlbmRpZgogCiAJY2FzZSBDUFVfNUtDOgogCQlvcF9tb2RlbF9taXBzeHhfb3BzLmNwdV90eXBlID0gIm1pcHMvNUsiOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKaW5kZXggNDY1Nzc4Yy4uMzVkNTkyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCkBAIC0yMyw3ICsyMyw3IEBACiAjCiAjIFRoZXNlIGFyZSBzdGlsbCBwcmV0dHkgbXVjaCBpbiB0aGUgb2xkIHN0YXRlLCB3YXRjaCwgZ28gYmxpbmQuCiAjCi1vYmotJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJPSBvcHMtdGl0YW4ubyBwY2ktZXhjaXRlLm8gZml4dXAtZXhjaXRlLm8KK29iai0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSBvcHMtdGl0YW4ubyBwY2ktZXhjaXRlLm8gZml4dXAtZXhjaXRlLm8KIG9iai0kKENPTkZJR19EREI1NDc3KQkJKz0gZml4dXAtZGRiNTQ3Ny5vIHBjaS1kZGI1NDc3Lm8gb3BzLWRkYjU0Nzcubwogb2JqLSQoQ09ORklHX0xBU0FUKQkJKz0gcGNpLWxhc2F0Lm8KIG9iai0kKENPTkZJR19NSVBTX0FUTEFTKQkrPSBmaXh1cC1hdGxhcy5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWF0bGFzLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWF0bGFzLmMKaW5kZXggODc5MjBiMi4uNDM5NTEwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1hdGxhcy5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtYXRsYXMuYwpAQCAtMTYsNyArMTYsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLXZyNDEzMy5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC12cjQxMzMuYwppbmRleCBhOGE0N2I0Li44ZTAxZDBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLXZyNDEzMy5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtdnI0MTMzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pIChtbGFjaHdhbmlAbXZpc3RhLmNvbSkKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWF1MTAwMC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtYXUxMDAwLmMKaW5kZXggYmUxNDIwMS4uMGMwYzFlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWF1MTAwMC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWF1MTAwMC5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtdHg0OTI3LmMgYi9hcmNoL21pcHMvcGNpL29wcy10eDQ5MjcuYwppbmRleCA3Njg4Yjc3Li4xNTA0MTljIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy10eDQ5MjcuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy10eDQ5MjcuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDE6Ci0JCSp2YWwgPSAqKHZvbGF0aWxlIHU4ICopICgodWxvbmcpICYgdHg0OTI3X3BjaWNwdHItPgorCQkqdmFsID0gKih2b2xhdGlsZSB1OCAqKSAoKHVuc2lnbmVkIGxvbmcpICYgdHg0OTI3X3BjaWNwdHItPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzJwY2ZnZGF0YSB8CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCiAJCQkJCQkod2hlcmUgJiAzKSk7CkBAIC0xMjgsNyArMTI4LDcgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIDI6Ci0JCSp2YWwgPSAqKHZvbGF0aWxlIHUxNiAqKSAoKHVsb25nKSAmIHR4NDkyN19wY2ljcHRyLT4KKwkJKnZhbCA9ICoodm9sYXRpbGUgdTE2ICopICgodW5zaWduZWQgbG9uZykgJiB0eDQ5MjdfcGNpY3B0ci0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzJwY2ZnZGF0YSB8CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCiAJCQkJCQkod2hlcmUgJiAzKSk7CkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMToKLQkJICoodm9sYXRpbGUgdTggKikgKCh1bG9uZykgJiB0eDQ5MjdfcGNpY3B0ci0+CisJCSAqKHZvbGF0aWxlIHU4ICopICgodW5zaWduZWQgbG9uZykgJiB0eDQ5MjdfcGNpY3B0ci0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGcycGNmZ2RhdGEgfAogI2lmZGVmIF9fTElUVExFX0VORElBTgogCQkJCQkod2hlcmUgJiAzKSkgPSB2YWw7CkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDI6Ci0JCSoodm9sYXRpbGUgdTE2ICopICgodWxvbmcpICYgdHg0OTI3X3BjaWNwdHItPgorCQkqKHZvbGF0aWxlIHUxNiAqKSAoKHVuc2lnbmVkIGxvbmcpICYgdHg0OTI3X3BjaWNwdHItPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZzJwY2ZnZGF0YSB8CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCiAJCQkJCSh3aGVyZSAmIDMpKSA9IHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXR4NDkzOC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtdHg0OTM4LmMKaW5kZXggMGZmMDgzNC4uNDQ1MDA3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtdHg0OTM4LmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtdHg0OTM4LmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOgotCQkqdmFsID0gKih2b2xhdGlsZSB1OCAqKSAoKHVsb25nKSAmIHR4NDkzOF9wY2ljcHRyLT5nMnBjZmdkYXRhIHwKKwkJKnZhbCA9ICoodm9sYXRpbGUgdTggKikgKCh1bnNpZ25lZCBsb25nKSAmIHR4NDkzOF9wY2ljcHRyLT5nMnBjZmdkYXRhIHwKICNpZmRlZiBfX0JJR19FTkRJQU4KIAkJCSAgICAgICgod2hlcmUgJiAzKSBeIDMpKTsKICNlbHNlCkBAIC0xMTQsNyArMTE0LDcgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIDI6Ci0JCSp2YWwgPSAqKHZvbGF0aWxlIHUxNiAqKSAoKHVsb25nKSAmIHR4NDkzOF9wY2ljcHRyLT5nMnBjZmdkYXRhIHwKKwkJKnZhbCA9ICoodm9sYXRpbGUgdTE2ICopICgodW5zaWduZWQgbG9uZykgJiB0eDQ5MzhfcGNpY3B0ci0+ZzJwY2ZnZGF0YSB8CiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJCQkJKCh3aGVyZSAmIDMpIF4gMikpOwogI2Vsc2UKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOgotCQkqKHZvbGF0aWxlIHU4ICopICgodWxvbmcpICYgdHg0OTM4X3BjaWNwdHItPmcycGNmZ2RhdGEgfAorCQkqKHZvbGF0aWxlIHU4ICopICgodW5zaWduZWQgbG9uZykgJiB0eDQ5MzhfcGNpY3B0ci0+ZzJwY2ZnZGF0YSB8CiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJCQkgICgod2hlcmUgJiAzKSBeIDMpKSA9IHZhbDsKICNlbHNlCkBAIC0xNjIsNyArMTYyLDcgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIDI6Ci0JCSoodm9sYXRpbGUgdTE2ICopICgodWxvbmcpICYgdHg0OTM4X3BjaWNwdHItPmcycGNmZ2RhdGEgfAorCQkqKHZvbGF0aWxlIHUxNiAqKSAoKHVuc2lnbmVkIGxvbmcpICYgdHg0OTM4X3BjaWNwdHItPmcycGNmZ2RhdGEgfAogI2lmZGVmIF9fQklHX0VORElBTgogCQkJKCh3aGVyZSAmIDB4MykgXiAweDIpKSA9IHZhbDsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMKaW5kZXggZjRlZjFhMy4uZjY3NzRmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYwpAQCAtMzIsNyArMzIsNiBAQAogICoKICAqIFhYWDogQVQgVEhJUyBUSU1FLCBPTkxZIHRoZSBOQVRJVkUgUENJLVggSU5URVJGQUNFIElTIFNVUFBPUlRFRC4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwaHQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCmluZGV4IGEzZWViZTUuLmJhMmUzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCkBAIC0zMSw3ICszMSw2IEBACiAgKiBwcm9ibGVtLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1pcDMyLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1pcDMyLmMKaW5kZXggMTgwYWY4OS4uMTdjNzkzMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktaXAzMi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWlwMzIuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBLZWl0aCBNIFdlc29sb3dza2kKICAqIENvcHlyaWdodCAoQykgMjAwNCBieSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1zYjEyNTAuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLXNiMTI1MC5jCmluZGV4IDdjY2EzYmQuLjgwZjVlOGM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1zYjEyNTAuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1zYjEyNTAuYwpAQCAtMzAsNyArMzAsNiBAQAogICoga2VybmVsIG1hcHBlZCBtZW1vcnkuICBIb3BlZnVsbHkgbmVpdGhlciBvZiB0aGVzZSBzaG91bGQgYmUgYSBodWdlCiAgKiBwcm9ibGVtLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLmMgYi9hcmNoL21pcHMvcGNpL3BjaS5jCmluZGV4IDRkZmNlMTUuLjVhY2UzNjg2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTYsNyArNiw2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAwNCBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTUxLDExICs1MCwxMSBAQAogICovCiB2b2lkCiBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBkZXYtPnN5c2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQkvKiBNYWtlIHN1cmUgd2Ugc3RhcnQgYXQgb3VyIG1pbiBvbiBhbGwgaG9zZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKaW5kZXggMzllZTYzMS4uOGFjYTMxNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMjAsMTMgKzIxOSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBnaWNfYWN0aW9uID0gewogCS5oYW5kbGVyID0Jbm9fYWN0aW9uLAotCS5mbGFncyA9CVNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAogCS5uYW1lID0JCSJHSUMiLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfYWN0aW9uID0gewogCS5oYW5kbGVyID0Jbm9fYWN0aW9uLAotCS5mbGFncyA9CVNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAogCS5uYW1lID0JCSJUaW1lciIsCiB9OwogCkBAIC0yMzYsNyArMjM1LDcgQEAKIAlpbnQgY29uZmlnUFI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUE5YODU1MF9JTlRfQ1AwX1RPVElOVDsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbGV2ZWxfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmbGV2ZWxfaXJxX3R5cGU7CiAJCXBueDg1NTBfYWNrKGkpOwkvKiBtYXNrIHRoZSBpcnEganVzdCBpbiBjYXNlICAqLwogCX0KIApAQCAtMjczLDcgKzI3Miw3IEBACiAJCS8qIG1hc2svcHJpb3JpdHkgaXMgc3RpbGwgMCBzbyB3ZSB3aWxsIG5vdCBnZXQgYW55CiAJCSAqIGludGVycnVwdHMgdW50aWwgaXQgaXMgdW5tYXNrZWQgKi8KIAotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmxldmVsX2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmxldmVsX2lycV90eXBlOwogCX0KIAogCS8qIFByaW9yaXR5IGxldmVsIDAgKi8KQEAgLTI4MiwxMiArMjgxLDEyIEBACiAJLyogU2V0IGludCB2ZWN0b3IgdGFibGUgYWRkcmVzcyAqLwogCVBOWDg1NTBfR0lDX1ZFQ1RPUl8wID0gUE5YODU1MF9HSUNfVkVDVE9SXzEgPSAwOwogCi0JaXJxX2Rlc2NbTUlQU19DUFVfR0lDX0lSUV0uaGFuZGxlciA9ICZsZXZlbF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNSVBTX0NQVV9HSUNfSVJRXS5jaGlwID0gJmxldmVsX2lycV90eXBlOwogCXNldHVwX2lycShNSVBTX0NQVV9HSUNfSVJRLCAmZ2ljX2FjdGlvbik7CiAKIAkvKiBpbml0IG9mIFRpbWVyIGludGVycnVwdHMgKi8KIAlmb3IgKGkgPSBQTlg4NTUwX0lOVF9USU1FUl9NSU47IGkgPD0gUE5YODU1MF9JTlRfVElNRVJfTUFYOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZsZXZlbF9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZsZXZlbF9pcnFfdHlwZTsKIAl9CiAKIAkvKiBTdG9wIFRpbWVyIDEtMyAqLwpAQCAtMjk1LDcgKzI5NCw3IEBACiAJY29uZmlnUFIgfD0gMHgwMDAwMDAzODsKIAl3cml0ZV9jMF9jb25maWc3KGNvbmZpZ1BSKTsKIAotCWlycV9kZXNjW01JUFNfQ1BVX1RJTUVSX0lSUV0uaGFuZGxlciA9ICZsZXZlbF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tNSVBTX0NQVV9USU1FUl9JUlFdLmNoaXAgPSAmbGV2ZWxfaXJxX3R5cGU7CiAJc2V0dXBfaXJxKE1JUFNfQ1BVX1RJTUVSX0lSUSwgJnRpbWVyX2FjdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3NldHVwLmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9zZXR1cC5jCmluZGV4IDBlNzkxZjQuLjhhYzgxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vc2V0dXAuYwpAQCAtMTcsNyArMTcsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaHQuYwppbmRleCA1NGI2NWE4Li4xZjdjOTk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM4MywxMiArMzgyLDEyIEBACiAKIAogdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIAogICAgICAgICBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmVzLT5zdGFydDsKKyAgICAgICAgICAgICAgICByZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggYG1pcnJvcmVkJyBWR0EgcG9ydHMKICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgc3RyYW5nZSBJU0EgaGFyZHdhcmUsIHNvIHdlIGFsd2F5cyB3YW50IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaXJxLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYwppbmRleCBhMWY1MjRmLi5iOTFkMGFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9pcnEuYwpAQCAtMjYsNyArMjYsNiBAQAogICoKICAqIFNlY29uZCBsZXZlbCBJbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIHRoZSBQTUMtU2llcnJhIFRpdGFuL1lvc2VtaXRlIGJvYXJkCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvcHJvbS5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvcHJvbS5jCmluZGV4IDE2NTI3NWMuLjlmZTQ5NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3Byb20uYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9wcm9tLmMKQEAgLTgsNyArOCw2IEBACiAgKiBBdXRob3I6IE1hbmlzaCBMYWNod2FuaSAobGFjaHdhbmlAcG1jLXNpZXJyYS5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmFsZiBCYWVjaGxlCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItZWlzYS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItZWlzYS5jCmluZGV4IGIxOTgyMDEuLmNlOGU0YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWVpc2EuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1laXNhLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIC0gRml4IG1vcmUgYnVncy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZWlzYS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjc5LDkgKzI3OCw5IEBACiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKIAkJaWYgKGkgPCAoU0dJTlRfRUlTQSArIDgpKQotCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZpcDIyX2Vpc2ExX2lycV90eXBlOworCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZpcDIyX2Vpc2ExX2lycV90eXBlOwogCQllbHNlCi0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmlwMjJfZWlzYTJfaXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJmlwMjJfZWlzYTJfaXJxX3R5cGU7CiAJfQogCiAJLyogQ2Fubm90IHVzZSByZXF1ZXN0X2lycSBiZWNhdXNlIG9mIGttYWxsb2Mgbm90IGJlaW5nIHJlYWR5IGF0IHN1Y2gKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKaW5kZXggZmM2YTdlMi4uMmQ4NzYyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaW50LmMKQEAgLTksNyArOSw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgLSBJbnRlcnJ1cHQgaGFuZGxpbmcgZml4ZXMKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMyBMYWRpc2xhdiBNaWNobCAobGFkaXNAbGludXgtbWlwcy5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpAQCAtMjczLDMyICsyNzIsMzIgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbG9jYWwwX2Nhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubmFtZQkJPSAibG9jYWwwIGNhc2NhZGUiLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbG9jYWwxX2Nhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubmFtZQkJPSAibG9jYWwxIGNhc2NhZGUiLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYnVzZXJyID0gewogCS5oYW5kbGVyCT0gbm9fYWN0aW9uLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm5hbWUJCT0gIkJ1cyBFcnJvciIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtYXAwX2Nhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubmFtZQkJPSAibWFwYWJsZTAgY2FzY2FkZSIsCiB9OwogCiAjaWZkZWYgVVNFX0xJTzNfSVJRCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtYXAxX2Nhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubmFtZQkJPSAibWFwYWJsZTEgY2FzY2FkZSIsCiB9OwogI2RlZmluZSBTR0lfSU5URVJSVVBUUwlTR0lOVF9FTkQKQEAgLTQzNiw3ICs0MzUsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMJPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbgk9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoCT0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlcgk9IGhhbmRsZXI7CisJCWlycV9kZXNjW2ldLmNoaXAJPSBoYW5kbGVyOwogCX0KIAogCS8qIHZlY3RvciBoYW5kbGVyLiB0aGlzIHJlZ2lzdGVyIHRoZSBJUlEgYXMgbm9uLXNoYXJhYmxlICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwppbmRleCBkNzEzODkwLi4yNTA5N2VjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvS2NvbmZpZyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnCmluZGV4IGYxNGVmMzguLjVlOTYwYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnCkBAIC0zMywxMiArMzMsMTMgQEAKIAlkZXBlbmRzIG9uIFNHSV9JUDI3CiAJaGVscAogCSAgQ2hhbmdlIHRoZSB3YXkgYSBMaW51eCBrZXJuZWwgaXMgbG9hZGVkIGludG8gbWVtb3J5IG9uIGEgTUlQUzY0Ci0JICBtYWNoaW5lLiAgVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBzdXBwb3J0IHRleHQgcmVwbGljYXRpb24gYW5kCisJICBtYWNoaW5lLiAgVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBzdXBwb3J0IHRleHQgcmVwbGljYXRpb24gb24KIAkgIE5VTUEuICBJZiB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIGl0LCByZWFkIHRoZSBzb3VyY2UgY29kZS4KIAogY29uZmlnIFJFUExJQ0FURV9LVEVYVAogCWJvb2wgIktlcm5lbCB0ZXh0IHJlcGxpY2F0aW9uIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTR0lfSVAyNworCXNlbGVjdCBNQVBQRURfS0VSTkVMCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgcmVwbGljYXRpbmcgdGhlIGtlcm5lbCB0ZXh0IGFjcm9zcyBtdWx0aXBsZQogCSAgbm9kZXMgaW4gYSBOVU1BIGNsdXN0ZXIuICBUaGlzIHRyYWRlcyBtZW1vcnkgZm9yIHNwZWVkLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlIGIvYXJjaC9taXBzL3NnaS1pcDI3L01ha2VmaWxlCmluZGV4IDY4NmJhMTQuLmE0NTcyNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvTWFrZWZpbGUKQEAgLTIsMTEgKzIsMTIgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBJUDI3IHNwZWNpZmljIGtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CTo9IGlwMjctYmVyci5vIGlwMjctY29uc29sZS5vIGlwMjctaXJxLm8gaXAyNy1pbml0Lm8gXAotCSAgIGlwMjcta2xjb25maWcubyBpcDI3LWtsbnVtYS5vIGlwMjctbWVtb3J5Lm8gaXAyNy1ubWkubyBpcDI3LXJlc2V0Lm8gXAotCSAgIGlwMjctdGltZXIubyBpcDI3LWh1YmlvLm8gaXAyNy14dGFsay5vCitvYmoteQk6PSBpcDI3LWJlcnIubyBpcDI3LWlycS5vIGlwMjctaW5pdC5vIGlwMjcta2xjb25maWcubyBpcDI3LWtsbnVtYS5vIFwKKwkgICBpcDI3LW1lbW9yeS5vIGlwMjctbm1pLm8gaXAyNy1yZXNldC5vIGlwMjctdGltZXIubyBpcDI3LWh1YmlvLm8gXAorCSAgIGlwMjcteHRhbGsubwogCi1vYmotJChDT05GSUdfS0dEQikJKz0gaXAyNy1kYmdpby5vCi1vYmotJChDT05GSUdfU01QKQkrPSBpcDI3LXNtcC5vCitvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBpcDI3LWNvbnNvbGUubworb2JqLSQoQ09ORklHX0tHREIpCQkrPSBpcDI3LWRiZ2lvLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBpcDI3LXNtcC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWNvbnNvbGUuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWNvbnNvbGUuYwppbmRleCAzZTFhYzI5Li4xNDIxMWUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1jb25zb2xlLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctY29uc29sZS5jCkBAIC00NiwzMyArNDYsMjkgQEAKIAl1YXJ0LT5pdV90aHIgPSBjOwogfQogCi1jaGFyIF9faW5pdCBwcm9tX2dldGNoYXIodm9pZCkKK3N0YXRpYyB2b2lkIGlvYzNfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQogewotCXJldHVybiAwOworCXdoaWxlIChuLS0gJiYgKnMpIHsKKwkJaWYgKCpzID09ICdcbicpCisJCQlwcm9tX3B1dGNoYXIoJ1xyJyk7CisJCXByb21fcHV0Y2hhcigqcyk7CisJCXMrKzsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBpb2MzX2NvbnNvbGVfcHJvYmUodm9pZCkKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0IHVwOwotCi0JLyoKLQkgKiBSZWdpc3RlciB0byBpbnRlcnJ1cHQgemVybyBiZWNhdXNlIHdlIHNoYXJlIHRoZSBpbnRlcnJ1cHQgd2l0aAotCSAqIHRoZSBzZXJpYWwgZHJpdmVyIHdoaWNoIHdlIGRvbid0IHByb3Blcmx5IHN1cHBvcnQgeWV0LgotCSAqLwotCW1lbXNldCgmdXAsIDAsIHNpemVvZih1cCkpOwotCXVwLm1lbWJhc2UJPSAodW5zaWduZWQgY2hhciAqKSBjb25zb2xlX3VhcnQoKTsKLQl1cC5pcnEJCT0gMDsKLQl1cC51YXJ0Y2xrCT0gSU9DM19DTEs7Ci0JdXAucmVnc2hpZnQJPSAwOwotCXVwLmlvdHlwZQk9IFVQSU9fTUVNOwotCXVwLmZsYWdzCT0gSU9DM19GTEFHUzsKLQl1cC5saW5lCQk9IDA7Ci0KLQlpZiAoZWFybHlfc2VyaWFsX3NldHVwKCZ1cCkpCi0JCXByaW50ayhLRVJOX0VSUiAiRWFybHkgc2VyaWFsIGluaXQgb2YgcG9ydCAwIGZhaWxlZFxuIik7Ci19CitzdGF0aWMgc3RydWN0IGNvbnNvbGUgaW9jM19jb25zb2xlID0geworCS5uYW1lCT0gImlvYzMiLAorCS53cml0ZQk9IGlvYzNfY29uc29sZV93cml0ZSwKKwkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fQk9PVCwKKwkuaW5kZXgJPSAtMQorfTsKIAogX19pbml0IHZvaWQgaXAyN19zZXR1cF9jb25zb2xlKHZvaWQpCiB7Ci0JaW9jM19jb25zb2xlX3Byb2JlKCk7CisJcmVnaXN0ZXJfY29uc29sZSgmaW9jM19jb25zb2xlKTsKK30KKwordm9pZCBfX2luaXQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJmlvYzNfY29uc29sZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMKaW5kZXggYTZiNDkwZS4uOTA5NGJhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDEgYnkgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwMSBieSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKaW5kZXggMGI2MWEzOS4uNTk3ZWM3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKQEAgLTgsNyArOCw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xMTksNyArMTE4LDcgQEAKIH0KIAogLyoKLSAqIFRoaXMgY29kZSBpcyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXgsIGJlY2F1c2Ugd2UgZG8gU0FfSU5URVJSVVBUCisgKiBUaGlzIGNvZGUgaXMgdW5uZWNlc3NhcmlseSBjb21wbGV4LCBiZWNhdXNlIHdlIGRvIElSUUZfRElTQUJMRUQKICAqIGludHIgZW5hYmxpbmcuIEJhc2ljYWxseSwgb25jZSB3ZSBncmFiIHRoZSBzZXQgb2YgaW50cnMgd2UgbmVlZAogICogdG8gc2VydmljZSwgd2UgbXVzdCBtYXNrIF9hbGxfIHRoZXNlIGludGVycnVwdHM7IGZpcnN0bHksIHRvIG1ha2UKICAqIHN1cmUgdGhlIHNhbWUgaW50ciBkb2VzIG5vdCBpbnRyIGFnYWluLCBjYXVzaW5nIHJlY3Vyc2lvbiB0aGF0CkBAIC0zODYsNyArMzg1LDcgQEAKIAlpcnFfZGVzY1tpcnFdLnN0YXR1cwk9IElSUV9ESVNBQkxFRDsKIAlpcnFfZGVzY1tpcnFdLmFjdGlvbgk9IDA7CiAJaXJxX2Rlc2NbaXJxXS5kZXB0aAk9IDE7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyCT0gJmJyaWRnZV9pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXAJPSAmYnJpZGdlX2lycV90eXBlOwogfQogCiBpbnQgX19kZXZpbml0IHJlcXVlc3RfYnJpZGdlX2lycShzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwppbmRleCA0MWMzZjQwLi5kNzc3YjdkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwpAQCAtMyw3ICszLDYgQEAKICAqIENvcHlyaWdodCAyMDAwIC0gMjAwMSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwMCAtIDIwMDEgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbWVtb3J5LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYwppbmRleCA2YzAwZGNlLi5lZmU2OTcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYwpAQCAtMTAsNyArMTAsNiBAQAogICogT24gU0dJIElQMjcgdGhlIEFSQyBtZW1vcnkgY29uZmlndXJhdGlvbiBkYXRhIGlzIGNvbXBsZXRseSBib2d1cyBidXQKICAqIGFsdGVybmF0ZSBlYXNpZXIgdG8gdXNlIG1lY2hhbmlzbXMgYXJlIGF2YWlsYWJsZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctcmVzZXQuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXJlc2V0LmMKaW5kZXggNDMyMmRiNS4uYzE3MDc2MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctcmVzZXQuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1yZXNldC5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAwNiBieSBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCAxZmI4NjBjLi4zY2E2MTRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBydF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBpcDI3X3J0X3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAogCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gInRpbWVyIgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggOGJhMDgwNC4uM2I3ZTc0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTEyNSw5ICsxMjUsOSBAQAogZXh0ZXJuIGlycXJldHVybl90IGNyaW1lX2NwdWVycl9pbnRyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCiAJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCi1zdHJ1Y3QgaXJxYWN0aW9uIG1lbWVycl9pcnEgPSB7IGNyaW1lX21lbWVycl9pbnRyLCBTQV9JTlRFUlJVUFQsCitzdHJ1Y3QgaXJxYWN0aW9uIG1lbWVycl9pcnEgPSB7IGNyaW1lX21lbWVycl9pbnRyLCBJUlFGX0RJU0FCTEVELAogCQkJQ1BVX01BU0tfTk9ORSwgIkNSSU1FIG1lbW9yeSBlcnJvciIsIE5VTEwsIE5VTEwgfTsKLXN0cnVjdCBpcnFhY3Rpb24gY3B1ZXJyX2lycSA9IHsgY3JpbWVfY3B1ZXJyX2ludHIsIFNBX0lOVEVSUlVQVCwKK3N0cnVjdCBpcnFhY3Rpb24gY3B1ZXJyX2lycSA9IHsgY3JpbWVfY3B1ZXJyX2ludHIsIElSUUZfRElTQUJMRUQsCiAJCQlDUFVfTUFTS19OT05FLCAiQ1JJTUUgQ1BVIGVycm9yIiwgTlVMTCwgTlVMTCB9OwogCiAvKgpAQCAtMzE2LDkgKzMxNiw5IEBACiAJCQkJIE1BQ0VJU0FfS0VZQl9QT0xMX0lOVCB8CVwKIAkJCQkgTUFDRUlTQV9NT1VTRV9JTlQgfAkJXAogCQkJCSBNQUNFSVNBX01PVVNFX1BPTExfSU5UIHwJXAotCQkJCSBNQUNFSVNBX1RJTUVSMF9JTlQgfAkJXAotCQkJCSBNQUNFSVNBX1RJTUVSMV9JTlQgfAkJXAotCQkJCSBNQUNFSVNBX1RJTUVSMl9JTlQpCisJCQkJIE1BQ0VJSVJRRl9USU1FUjBfSU5UIHwJCVwKKwkJCQkgTUFDRUlJUlFGX1RJTUVSMV9JTlQgfAkJXAorCQkJCSBNQUNFSUlSUUZfVElNRVIyX0lOVCkKICNkZWZpbmUgTUFDRUlTQV9TVVBFUklPX0lOVAkoTUFDRUlTQV9QQVJBTExFTF9JTlQgfAkJXAogCQkJCSBNQUNFSVNBX1BBUl9DVFhBX0lOVCB8CQlcCiAJCQkJIE1BQ0VJU0FfUEFSX0NUWEJfSU5UIHwJCVwKQEAgLTM0OSw3ICszNDksNyBAQAogCWNhc2UgTUFDRUlTQV9BVURJT19TV19JUlEgLi4uIE1BQ0VJU0FfQVVESU8zX01FUlJfSVJROgogCQljcmltZV9pbnQgPSBNQUNFX0FVRElPX0lOVDsKIAkJYnJlYWs7Ci0JY2FzZSBNQUNFSVNBX1JUQ19JUlEgLi4uIE1BQ0VJU0FfVElNRVIyX0lSUToKKwljYXNlIE1BQ0VJU0FfUlRDX0lSUSAuLi4gTUFDRUlJUlFGX1RJTUVSMl9JUlE6CiAJCWNyaW1lX2ludCA9IE1BQ0VfTUlTQ19JTlQ7CiAJCWJyZWFrOwogCWNhc2UgTUFDRUlTQV9QQVJBTExFTF9JUlEgLi4uIE1BQ0VJU0FfU0VSSUFMMl9SRE1BT1JfSVJROgpAQCAtNTkxLDcgKzU5MSw3IEBACiAJCWlycV9kZXNjW2lycV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpcnFdLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2lycV0uZGVwdGggPSAwOwotCQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSBjb250cm9sbGVyOworCQlpcnFfZGVzY1tpcnFdLmNoaXAgPSBjb250cm9sbGVyOwogCX0KIAlzZXR1cF9pcnEoQ1JJTUVfTUVNRVJSX0lSUSwgJm1lbWVycl9pcnEpOwogCXNldHVwX2lycShDUklNRV9DUFVFUlJfSVJRLCAmY3B1ZXJyX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYwppbmRleCBhY2JkYWQwLi4yNDBhMmY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSGFyYWxkIEtvZXJmZ2VuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgSWx5YSBBLiBWb2x5bmV0cwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvS2NvbmZpZyBiL2FyY2gvbWlwcy9zaWJ5dGUvS2NvbmZpZwppbmRleCA4MTZhZWU3Li5lYzdhMmNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL0tjb25maWcKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNJQllURV9IQVNfTERUCiAJc2VsZWN0IFNJQllURV9TQjF4eHhfU09DCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAogY29uZmlnIFNJQllURV9CQ00xMTIwCiAJYm9vbApAQCAtMzAsMTEgKzMxLDEzIEBACiAJYm9vbAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNJQllURV9TQjF4eHhfU09DCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAogY29uZmlnIFNJQllURV9CQ00xeDU1CiAJYm9vbAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNJQllURV9TQjF4eHhfU09DCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAogY29uZmlnIFNJQllURV9TQjF4eHhfU09DCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCmluZGV4IGU2MTc2MGIuLjI5ZDNiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC0yNzYsMTAgKzI3NSwxMCBAQAogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CiAJCWlmIChpIDwgQkNNMTQ4MF9OUl9JUlFTKSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmJjbTE0ODBfaXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJmJjbTE0ODBfaXJxX3R5cGU7CiAJCQliY20xNDgwX2lycV9vd25lcltpXSA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm5vX2lycV90eXBlOworCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZub19pcnFfdHlwZTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NldHVwLmMKaW5kZXggZDkwYTBiOC4uODIzNmQwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NldHVwLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3RpbWUuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC90aW1lLmMKaW5kZXggZWZhZjgzZS4uN2UwODhmNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3RpbWUuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiBjb2RlIHRvIGRvIGdlbmVyYWwgYm9va2tlZXBpbmcgKGUuZy4gdXBkYXRlIGppZmZpZXMsIHJ1bgogICogYm90dG9tIGhhbHZlcywgZXRjLikKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY2ZlL2NvbnNvbGUuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY2ZlL2NvbnNvbGUuYwppbmRleCA3NzIxMTAwLi5jNmVjNzQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2NmZS9jb25zb2xlLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jZmUvY29uc29sZS5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY2ZlL3NldHVwLmMgYi9hcmNoL21pcHMvc2lieXRlL2NmZS9zZXR1cC5jCmluZGV4IGVhMzA4MDIuLjZlODk1MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY2ZlL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jZmUvc2V0dXAuYwpAQCAtMTYsNyArMTYsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9idXNfd2F0Y2hlci5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvYnVzX3dhdGNoZXIuYwppbmRleCA0ODJkZWUwLi5iYjkwNjQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9idXNfd2F0Y2hlci5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2J1c193YXRjaGVyLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqIC9wcm9jL2J1c193YXRjaGVyIGlmIFBST0NfRlMgaXMgb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggZjg1M2MzMi4uMWQyODBhYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC0yNDYsMTAgKzI0NSwxMCBAQAogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CiAJCWlmIChpIDwgU0IxMjUwX05SX0lSUVMpIHsKLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmc2IxMjUwX2lycV90eXBlOworCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZzYjEyNTBfaXJxX3R5cGU7CiAJCQlzYjEyNTBfaXJxX293bmVyW2ldID0gMDsKIAkJfSBlbHNlIHsKLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbm9faXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJm5vX2lycV90eXBlOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvcHJvbS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvcHJvbS5jCmluZGV4IDc0MjA0M2Y4Li4zYzMzYTQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvcHJvbS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc2V0dXAuYwppbmRleCBmZGU0NzUxLi5kMGVlMWQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3NldHVwLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYwppbmRleCAxNTg4ZjZkLi40YjY2OWRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvdGltZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiBjb2RlIHRvIGRvIGdlbmVyYWwgYm9va2tlZXBpbmcgKGUuZy4gdXBkYXRlIGppZmZpZXMsIHJ1bgogICogYm90dG9tIGhhbHZlcywgZXRjLikKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYwppbmRleCBmOWU2OTQ5OC4uYTlhNmRiYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYwpAQCAtMjEsNyArMjEsNiBAQAogICogU2V0dXAgY29kZSBmb3IgdGhlIFNXQVJNIGJvYXJkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2lycS5jIGIvYXJjaC9taXBzL3NuaS9pcnEuYwppbmRleCA3MzY1YjQ4Li5jMTllMTU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zbmkvaXJxLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgICAgID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gICAgID0gMDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggICAgICA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgICAgPSAmcGNpYXNpY19pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCAgICA9ICZwY2lhc2ljX2lycV90eXBlOwogCX0KIAogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlExfElFX0lSUTJ8SUVfSVJRM3xJRV9JUlE0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvc2V0dXAuYyBiL2FyY2gvbWlwcy9zbmkvc2V0dXAuYwppbmRleCBhMDUwYmI2YS4uODcwNDg2ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvc2V0dXAuYwpAQCAtNyw3ICs3LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDk3LCA5OCwgMjAwMCwgMDMsIDA0LCAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9laXNhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19pcnEuYwppbmRleCA4Y2E2ODAxLi5hZTlkNTY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5MjdfaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X2lycS5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CkBAIC0yMjcsNyArMjI2LDcgQEAKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwogCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmdHg0OTI3X2lycV9jcDBfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZ0eDQ5MjdfaXJxX2NwMF90eXBlOwogCX0KIAogCXJldHVybjsKQEAgLTQzNSw3ICs0MzQsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMjsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ0eDQ5MjdfaXJxX3BpY190eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnR4NDkyN19pcnFfcGljX3R5cGU7CiAJfQogCiAJc2V0dXBfaXJxKFRYNDkyN19JUlFfTkVTVF9QSUNfT05fQ1AwLCAmdHg0OTI3X2lycV9waWNfYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMKaW5kZXggODFhNWFjZi4uNjRhMWIzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X2lycS5jIGIvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjdfaXJxLmMKaW5kZXggYWVlMDdmZi4uZWMwYTBkZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjdfaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjdfaXJxLmMKQEAgLTExMSw3ICsxMTEsNiBAQAogSlA3IGlzIG5vdCBidXMgbWFzdGVyIC0tIGRvIE5PVCB1c2UgLS0gb25seSA0IHBjaSBidXMgbWFzdGVyJ3MgYWxsb3dlZCAtLSBTb3V0aEJyaWRnZSwgSlA0LCBKUDUsIEpQNgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzM4LDcgKzMzNyw3IEBACiB9CiAKIC8vI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X1BJQ19BQ1RJT04ocykgeyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsIHMsIE5VTEwsIE5VTEwgfQotI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X1BJQ19BQ1RJT04ocykgeyBub19hY3Rpb24sIFNBX1NISVJRLCBDUFVfTUFTS19OT05FLCBzLCBOVUxMLCBOVUxMIH0KKyNkZWZpbmUgVE9TSElCQV9SQlRYNDkyN19QSUNfQUNUSU9OKHMpIHsgbm9fYWN0aW9uLCBJUlFGX1NIQVJFRCwgQ1BVX01BU0tfTk9ORSwgcywgTlVMTCwgTlVMTCB9CiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0b3NoaWJhX3JidHg0OTI3X2lycV9pb2NfYWN0aW9uID0KIFRPU0hJQkFfUkJUWDQ5MjdfUElDX0FDVElPTihUT1NISUJBX1JCVFg0OTI3X0lPQ19OQU1FKTsKICNpZmRlZiBDT05GSUdfVE9TSElCQV9GUENJQjAKQEAgLTM2OCw3ICszNjcsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMzsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ0b3NoaWJhX3JidHg0OTI3X2lycV9pb2NfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZ0b3NoaWJhX3JidHg0OTI3X2lycV9pb2NfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoVE9TSElCQV9SQlRYNDkyN19JUlFfTkVTVF9JT0NfT05fUElDLApAQCAtNTI2LDcgKzUyNSw3IEBACiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0KIAkJICAgICgoaSA8IFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lTQV9NSUQpID8gKDQpIDogKDUpKTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ0b3NoaWJhX3JidHg0OTI3X2lycV9pc2FfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZ0b3NoaWJhX3JidHg0OTI3X2lycV9pc2FfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoVE9TSElCQV9SQlRYNDkyN19JUlFfTkVTVF9JU0FfT05fSU9DLApAQCAtNjkyLDEzICs2OTEsMTMgQEAKIAl7CiAJCXUzMiBpLCBqID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQkJaWYgKHN0cmNtcChpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSwgIm5vbmUiKQorCQkJaWYgKHN0cmNtcChpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSwgIm5vbmUiKQogCQkJICAgID09IDApCiAJCQkJY29udGludWU7CiAKIAkJCWlmICgoaSA+PSAxKQotCQkJICAgICYmIChpcnFfZGVzY1tpIC0gMV0uaGFuZGxlci0+dHlwZW5hbWUgPT0KLQkJCQlpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSkpIHsKKwkJCSAgICAmJiAoaXJxX2Rlc2NbaSAtIDFdLmNoaXAtPnR5cGVuYW1lID09CisJCQkJaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpKSB7CiAJCQkJaisrOwogCQkJfSBlbHNlIHsKIAkJCQlqID0gMDsKQEAgLTcwNywxMiArNzA2LDEyIEBACiAJCQkgICAgKFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lORk8sCiAJCQkgICAgICIlcyBpcnE9MHglMDJ4LyUzZCBzPTB4JTA4eCBoPTB4JTA4eCBhPTB4JTA4eCBhaD0weCUwOHggZD0lMWQgbj0lcy8lMDJkXG4iLAogCQkJICAgICBrZXksIGksIGksIGlycV9kZXNjW2ldLnN0YXR1cywKLQkJCSAgICAgKHUzMikgaXJxX2Rlc2NbaV0uaGFuZGxlciwKKwkJCSAgICAgKHUzMikgaXJxX2Rlc2NbaV0uY2hpcCwKIAkJCSAgICAgKHUzMikgaXJxX2Rlc2NbaV0uYWN0aW9uLAogCQkJICAgICAodTMyKSAoaXJxX2Rlc2NbaV0uYWN0aW9uID8gaXJxX2Rlc2NbaV0uCiAJCQkJICAgIGFjdGlvbi0+aGFuZGxlciA6IDApLAogCQkJICAgICBpcnFfZGVzY1tpXS5kZXB0aCwKLQkJCSAgICAgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUsIGopOworCQkJICAgICBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSwgaik7CiAJCX0KIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19zZXR1cC5jCmluZGV4IDZkY2YwNzcuLmYwZDcwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5Mjdfc2V0dXAuYwpAQCAtNDIsNyArNDIsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKaW5kZXggODczODA1MS4uMGIyZjhjOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vaXJxLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ0eDQ5MzhfaXJxX2NwMF90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnR4NDkzOF9pcnFfY3AwX3R5cGU7CiAJfQogCiAJcmV0dXJuOwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gMDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAyOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnR4NDkzOF9pcnFfcGljX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmdHg0OTM4X2lycV9waWNfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoVFg0OTM4X0lSUV9ORVNUX1BJQ19PTl9DUDAsICZ0eDQ5MzhfaXJxX3BpY19hY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L2lycS5jIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L2lycS5jCmluZGV4IDljZDljMGYuLjNiODI0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9pcnEuYworKysgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5MzgvaXJxLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoID0gMzsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ0b3NoaWJhX3JidHg0OTM4X2lycV9pb2NfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZ0b3NoaWJhX3JidHg0OTM4X2lycV9pb2NfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoUkJUWDQ5MzhfSVJRX0lPQ0lOVCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9wcm9tLmMgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5MzgvcHJvbS5jCmluZGV4IDdkZjhiMzIuLmU0NGRhZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3Byb20uYwpAQCAtMTIsNyArMTIsNiBAQAogICogU3VwcG9ydCBmb3IgVFg0OTM4IGluIDIuNiAtIE1hbmlzaCBMYWNod2FuaSAobWxhY2h3YW5pQG12aXN0YS5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYyBiL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jCmluZGV4IDk2ZTgzM2MuLjY2MTYzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICogU3VwcG9ydCBmb3IgVFg0OTM4IGluIDIuNiAtIE1hbmlzaCBMYWNod2FuaSAobWxhY2h3YW5pQG12aXN0YS5jb20pCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zcGlfZWVwcm9tLmMgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc3BpX2VlcHJvbS5jCmluZGV4IDk1MWEyMDguLjg5NTk2ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zcGlfZWVwcm9tLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NwaV9lZXByb20uYwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKiBTdXBwb3J0IGZvciBUWDQ5MzggaW4gMi42IC0gTWFuaXNoIExhY2h3YW5pIChtbGFjaHdhbmlAbXZpc3RhLmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2ljdS5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaWN1LmMKaW5kZXggMDdhZTE5Yy4uYjkzMjMzMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaWN1LmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaWN1LmMKQEAgLTcyMiwxMCArNzIyLDEwIEBACiAJaWN1Ml93cml0ZShNR0lVSU5USFJFRywgMHhmZmZmKTsKIAogCWZvciAoaSA9IFNZU0lOVDFfSVJRX0JBU0U7IGkgPD0gU1lTSU5UMV9JUlFfTEFTVDsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnN5c2ludDFfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmc3lzaW50MV9pcnFfdHlwZTsKIAogCWZvciAoaSA9IFNZU0lOVDJfSVJRX0JBU0U7IGkgPD0gU1lTSU5UMl9JUlFfTEFTVDsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnN5c2ludDJfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmc3lzaW50Ml9pcnFfdHlwZTsKIAogCWNhc2NhZGVfaXJxKElOVDBfSVJRLCBpY3VfZ2V0X2lycSk7CiAJY2FzY2FkZV9pcnEoSU5UMV9JUlEsIGljdV9nZXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKaW5kZXggODY3OTZiYi4uNjZhYTUwOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKQEAgLTczLDEzICs3MywxMyBAQAogCWlmIChjYXNjYWRlLT5nZXRfaXJxICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IHNvdXJjZV9pcnEgPSBpcnE7CiAJCWRlc2MgPSBpcnFfZGVzYyArIHNvdXJjZV9pcnE7Ci0JCWRlc2MtPmhhbmRsZXItPmFjayhzb3VyY2VfaXJxKTsKKwkJZGVzYy0+Y2hpcC0+YWNrKHNvdXJjZV9pcnEpOwogCQlpcnEgPSBjYXNjYWRlLT5nZXRfaXJxKGlycSwgcmVncyk7CiAJCWlmIChpcnEgPCAwKQogCQkJYXRvbWljX2luYygmaXJxX2Vycl9jb3VudCk7CiAJCWVsc2UKIAkJCWlycV9kaXNwYXRjaChpcnEsIHJlZ3MpOwotCQlkZXNjLT5oYW5kbGVyLT5lbmQoc291cmNlX2lycSk7CisJCWRlc2MtPmNoaXAtPmVuZChzb3VyY2VfaXJxKTsKIAl9IGVsc2UKIAkJZG9fSVJRKGlycSwgcmVncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi92cmM0MTczLmMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi92cmM0MTczLmMKaW5kZXggM2UzMWY4MS4uMmQyODdiOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vdnJjNDE3My5jCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL3ZyYzQxNzMuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJdnI0MXh4X3NldF9pcnFfbGV2ZWwoR0lVX0lSUV9UT19QSU4oY2FzY2FkZV9pcnEpLCBMRVZFTF9MT1cpOwogCiAJZm9yIChpID0gVlJDNDE3M19JUlFfQkFTRTsgaSA8PSBWUkM0MTczX0lSUV9MQVNUOyBpKyspCi0gICAgICAgICAgICAgICAgaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ2cmM0MTczX2lycV90eXBlOworICAgICAgICAgICAgICAgIGlycV9kZXNjW2ldLmNoaXAgPSAmdnJjNDE3M19pcnFfdHlwZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9uZWMtY21idnI0MTMzL2luaXQuYyBiL2FyY2gvbWlwcy92cjQxeHgvbmVjLWNtYnZyNDEzMy9pbml0LmMKaW5kZXggYmU1OTBlZC4uYWUxYWY2YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9uZWMtY21idnI0MTMzL2luaXQuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvaW5pdC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBTdXBwb3J0IGZvciBORUMtQ01CVlI0MTMzIGluIDIuNgogICogTWFuaXNoIExhY2h3YW5pIChtbGFjaHdhbmlAbXZpc3RhLmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1JPQ0tIT1BQRVIKICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvbmVjLWNtYnZyNDEzMy9pcnEuYyBiL2FyY2gvbWlwcy92cjQxeHgvbmVjLWNtYnZyNDEzMy9pcnEuYwppbmRleCAzMWRiNmI2Li43YjI1MTFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvaXJxLmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9uZWMtY21idnI0MTMzL2lycS5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSBJODI1OV9JUlFfQkFTRTsgaSA8PSBJODI1OV9JUlFfTEFTVDsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmk4MjU5X2lycV90eXBlOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmk4MjU5X2lycV90eXBlOwogCiAJc2V0dXBfaXJxKEk4MjU5X1NMQVZFX0lSUSwgJmk4MjU5X3NsYXZlX2Nhc2NhZGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvbTE1MzVwbHVzLmMgYi9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvbTE1MzVwbHVzLmMKaW5kZXggMWY2YjI0ZS4uZjQ1Y2FjYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9uZWMtY21idnI0MTMzL20xNTM1cGx1cy5jCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvbmVjLWNtYnZyNDEzMy9tMTUzNXBsdXMuYwpAQCAtMTQsNyArMTQsNiBAQAogICogU3VwcG9ydCBmb3IgTkVDLUNNQlZSNDEzMyBpbiAyLjYKICAqIEF1dGhvcjogTWFuaXNoIExhY2h3YW5pIChtbGFjaHdhbmlAbXZpc3RhLmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9uZWMtY21idnI0MTMzL3NldHVwLmMgYi9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvc2V0dXAuYwppbmRleCA1MzI3MmE1Li5iMjBiOTNiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvc2V0dXAuYwpAQCAtMTQsNyArMTQsNiBAQAogICogU3VwcG9ydCBmb3IgQ01CVlI0MTMzIGJvYXJkIGluIDIuNgogICogQXV0aG9yOiBNYW5pc2ggTGFjaHdhbmkgKG1sYWNod2FuaUBtdmlzdGEuY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggOTEwZmIzYS4uNmRkMGVhOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC01MSw2ICs1MSwxMCBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgSVJRX1BFUl9DUFUKKwlib29sCisJZGVmYXVsdCB5CisKICMgdW5sZXNzIHlvdSB3YW50IHRvIGltcGxlbWVudCBBQ1BJIG9uIFBBLVJJU0MgLi4uIDstKQogY29uZmlnIFBNCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwppbmRleCBjMDU3YWQ3Li5iYzdjNGE0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwpAQCAtOTcsMTUgKzk3LDE3IEBACiB2b2lkCiBzaG93X2NhY2hlX2luZm8oc3RydWN0IHNlcV9maWxlICptKQogeworCWNoYXIgYnVmWzMyXTsKKwogCXNlcV9wcmludGYobSwgIkktY2FjaGVcdFx0OiAlbGQgS0JcbiIsIAogCQljYWNoZV9pbmZvLmljX3NpemUvMTAyNCApOwotCXNlcV9wcmludGYobSwgIkQtY2FjaGVcdFx0OiAlbGQgS0IgKCVzJXMsICVkLXdheSBhc3NvY2lhdGl2ZSlcbiIsIAorCWlmIChjYWNoZV9pbmZvLmRjX2xvb3AgPT0gMSkKKwkJc25wcmludGYoYnVmLCAzMiwgIiVsdS13YXkgYXNzb2NpYXRpdmUiLCBjYWNoZV9pbmZvLmRjX2xvb3ApOworCXNlcV9wcmludGYobSwgIkQtY2FjaGVcdFx0OiAlbGQgS0IgKCVzJXMsICVzKVxuIiwKIAkJY2FjaGVfaW5mby5kY19zaXplLzEwMjQsCiAJCShjYWNoZV9pbmZvLmRjX2NvbmYuY2Nfd3QgPyAiV1QiOiJXQiIpLAogCQkoY2FjaGVfaW5mby5kY19jb25mLmNjX3NoID8gIiwgc2hhcmVkIEkvRCI6IiIpLAotCQkoY2FjaGVfaW5mby5kY19jb25mLmNjX2Fzc29jKQotCSk7Ci0KKwkJKChjYWNoZV9pbmZvLmRjX2xvb3AgPT0gMSkgPyAiZGlyZWN0IG1hcHBlZCIgOiBidWYpKTsKIAlzZXFfcHJpbnRmKG0sICJJVExCIGVudHJpZXNcdDogJWxkXG4iICJEVExCIGVudHJpZXNcdDogJWxkJXNcbiIsCiAJCWNhY2hlX2luZm8uaXRfc2l6ZSwKIAkJY2FjaGVfaW5mby5kdF9zaXplLApAQCAtMTU4LDExICsxNjAsMTEgQEAKIAkJY2FjaGVfaW5mby5kY19jb25mLmNjX2Jsb2NrLAogCQljYWNoZV9pbmZvLmRjX2NvbmYuY2NfbGluZSwKIAkJY2FjaGVfaW5mby5kY19jb25mLmNjX3NoaWZ0KTsKLQlwcmludGsoIgl3dCAlZCBzaCAlZCBjc3QgJWQgYXNzb2MgJWRcbiIsCisJcHJpbnRrKCIJd3QgJWQgc2ggJWQgY3N0ICVkIGh2ICVkXG4iLAogCQljYWNoZV9pbmZvLmRjX2NvbmYuY2Nfd3QsCiAJCWNhY2hlX2luZm8uZGNfY29uZi5jY19zaCwKIAkJY2FjaGVfaW5mby5kY19jb25mLmNjX2NzdCwKLQkJY2FjaGVfaW5mby5kY19jb25mLmNjX2Fzc29jKTsKKwkJY2FjaGVfaW5mby5kY19jb25mLmNjX2h2KTsKIAogCXByaW50aygiSUMgIGJhc2UgMHglbHggc3RyaWRlIDB4JWx4IGNvdW50IDB4JWx4IGxvb3AgMHglbHhcbiIsCiAJCWNhY2hlX2luZm8uaWNfYmFzZSwKQEAgLTE3NiwxMSArMTc4LDExIEBACiAJCWNhY2hlX2luZm8uaWNfY29uZi5jY19ibG9jaywKIAkJY2FjaGVfaW5mby5pY19jb25mLmNjX2xpbmUsCiAJCWNhY2hlX2luZm8uaWNfY29uZi5jY19zaGlmdCk7Ci0JcHJpbnRrKCIJd3QgJWQgc2ggJWQgY3N0ICVkIGFzc29jICVkXG4iLAorCXByaW50aygiCXd0ICVkIHNoICVkIGNzdCAlZCBodiAlZFxuIiwKIAkJY2FjaGVfaW5mby5pY19jb25mLmNjX3d0LAogCQljYWNoZV9pbmZvLmljX2NvbmYuY2Nfc2gsCiAJCWNhY2hlX2luZm8uaWNfY29uZi5jY19jc3QsCi0JCWNhY2hlX2luZm8uaWNfY29uZi5jY19hc3NvYyk7CisJCWNhY2hlX2luZm8uaWNfY29uZi5jY19odik7CiAKIAlwcmludGsoIkQtVExCIGNvbmY6IHNoICVkIHBhZ2UgJWQgY3N0ICVkIGFpZCAlZCBwYWQxICVkIFxuIiwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX3NoLApAQCAtMjM0LDcgKzIzNiw4IEBACiAKIHZvaWQgZGlzYWJsZV9zcl9oYXNoaW5nKHZvaWQpCiB7Ci0JaW50IHNyaGFzaF90eXBlOworCWludCBzcmhhc2hfdHlwZSwgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgc3BhY2VfYml0czsKIAogCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS5jcHVfdHlwZSkgewogCWNhc2UgcGN4OiAvKiBXZSBzaG91bGRuJ3QgZ2V0IHRoaXMgZmFyLiAgc2V0dXAuYyBzaG91bGQgcHJldmVudCBpdC4gKi8KQEAgLTI2MCw2ICsyNjMsMTMgQEAKIAl9CiAKIAlkaXNhYmxlX3NyX2hhc2hpbmdfYXNtKHNyaGFzaF90eXBlKTsKKworCXJldHZhbCA9IHBkY19zcGFjZWlkX2JpdHMoJnNwYWNlX2JpdHMpOworCS8qIElmIHRoaXMgcHJvY2VkdXJlIGlzbid0IGltcGxlbWVudGVkLCBkb24ndCBwYW5pYy4gKi8KKwlpZiAocmV0dmFsIDwgMCAmJiByZXR2YWwgIT0gUERDX0JBRF9PUFRJT04pCisJCXBhbmljKCJwZGNfc3BhY2VpZF9iaXRzIGNhbGwgZmFpbGVkLlxuIik7CisJaWYgKHNwYWNlX2JpdHMgIT0gMCkKKwkJcGFuaWMoIlNwYWNlSUQgaGFzaGluZyBpcyBzdGlsbCBvbiFcbiIpOwogfQogCiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwppbmRleCBkOWU1M2NmLi45NWMxYjhlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwpAQCAtMjIsNyArMjIsNiBAQAogICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAvKiB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgcG9zc2liaWxpdGllcyB0byBhY3Qgb24gYW4gaW50ZXJydXB0aW9uOgpAQCAtMTYzOCw3ICsxNjM3LDcgQEAKIAlsb2FkMzIJCVBBKHBhX2RiaXRfbG9jayksdDAKIAogZGJpdF9zcGluXzIwdzoKLQlsZGN3ICAgICAgICAgICAgMCh0MCksdDEKKwlMRENXCQkwKHQwKSx0MQogCWNtcGliLD0gICAgICAgICAwLHQxLGRiaXRfc3Bpbl8yMHcKIAlub3AKIApAQCAtMTY3NCw3ICsxNjczLDcgQEAKIAlsb2FkMzIJCVBBKHBhX2RiaXRfbG9jayksdDAKIAogZGJpdF9zcGluXzExOgotCWxkY3cgICAgICAgICAgICAwKHQwKSx0MQorCUxEQ1cJCTAodDApLHQxCiAJY21waWIsPSAgICAgICAgIDAsdDEsZGJpdF9zcGluXzExCiAJbm9wCiAKQEAgLTE3MTQsNyArMTcxMyw3IEBACiAJbG9hZDMyCQlQQShwYV9kYml0X2xvY2spLHQwCiAKIGRiaXRfc3Bpbl8yMDoKLQlsZGN3ICAgICAgICAgICAgMCh0MCksdDEKKwlMRENXCQkwKHQwKSx0MQogCWNtcGliLD0gICAgICAgICAwLHQxLGRiaXRfc3Bpbl8yMAogCW5vcAogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IDJkYzA2YjguLjQzOThkMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBDb3B5cmlnaHQgMTk5OSBUaGUgUHVmZmluIEdyb3VwLCAoQWxleCBkZVZyaWVzLCBEYXZpZCBLZW5uZWR5KQogICogQ29weXJpZ2h0IDIwMDMgR3JhbnQgR3J1bmRsZXIgPGdydW5kbGVyIHBhcmlzYy1saW51eCBvcmc+CiAgKiBDb3B5cmlnaHQgMjAwMywyMDA0IFJ5YW4gQnJhZGV0aWNoIDxyYnJhZEBwYXJpc2MtbGludXgub3JnPgotICogQ29weXJpZ2h0IDIwMDQgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KKyAqIENvcHlyaWdodCAyMDA0LDIwMDYgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KICAqCiAgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI1MiwxMCArMjUyLDggQEAKICNlbmRpZgogCiAvKioKLSAqIHBkY19jaGFzc2lzX2Rpc3AgLSBVcGRhdGVzIGRpc3BsYXkKKyAqIHBkY19jaGFzc2lzX2Rpc3AgLSBVcGRhdGVzIGNoYXNzaXMgY29kZQogICogQHJldHZhbDogLTEgb24gZXJyb3IsIDAgb24gc3VjY2VzcwotICoKLSAqIFdvcmtzIG9uIG9sZCBQREMgb25seSAoRSBjbGFzcywgb3RoZXJzPykKICAqLwogaW50IHBkY19jaGFzc2lzX2Rpc3AodW5zaWduZWQgbG9uZyBkaXNwKQogewpAQCAtMjY5LDYgKzI2NywyMiBAQAogfQogCiAvKioKKyAqIHBkY19jaGFzc2lzX3dhcm4gLSBGZXRjaGVzIGNoYXNzaXMgd2FybmluZ3MKKyAqIEByZXR2YWw6IC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MKKyAqLworaW50IHBkY19jaGFzc2lzX3dhcm4odW5zaWduZWQgbG9uZyAqd2FybikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCXNwaW5fbG9ja19pcnEoJnBkY19sb2NrKTsKKwlyZXR2YWwgPSBtZW1fcGRjX2NhbGwoUERDX0NIQVNTSVMsIFBEQ19DSEFTU0lTX1dBUk4sIF9fcGEocGRjX3Jlc3VsdCkpOworCSp3YXJuID0gcGRjX3Jlc3VsdFswXTsKKwlzcGluX3VubG9ja19pcnEoJnBkY19sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgogICogcGRjX2NvcHJvY19jZmcgLSBUbyBpZGVudGlmeSBjb3Byb2Nlc3NvcnMgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3Nvci4KICAqIEBwZGNfY29wcm9jX2luZm86IFJldHVybiBidWZmZXIgYWRkcmVzcy4KICAqCkBAIC0zOTMsNyArNDA3LDkgQEAKICAqIHBkY19tb2RlbF9zeXNtb2RlbCAtIEdldCB0aGUgc3lzdGVtIG1vZGVsIG5hbWUuCiAgKiBAbmFtZTogQSBjaGFyIGFycmF5IG9mIGF0IGxlYXN0IDgxIGNoYXJhY3RlcnMuCiAgKgotICogR2V0IHN5c3RlbSBtb2RlbCBuYW1lIGZyb20gUERDIFJPTSAoZS5nLiA5MDAwLzcxNSBvciA5MDAwLzc3OC9CMTYwTCkKKyAqIEdldCBzeXN0ZW0gbW9kZWwgbmFtZSBmcm9tIFBEQyBST00gKGUuZy4gOTAwMC83MTUgb3IgOTAwMC83NzgvQjE2MEwpLgorICogVXNpbmcgT1NfSURfSFBVWCB3aWxsIHJldHVybiB0aGUgZXF1aXZhbGVudCBvZiB0aGUgJ21vZGVsbmFtZScgY29tbWFuZAorICogb24gSFAvVVguCiAgKi8KIGludCBwZGNfbW9kZWxfc3lzbW9kZWwoY2hhciAqbmFtZSkKIHsKQEAgLTQ5OCw2ICs1MTQsMjYgQEAKICAgICAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBwZGNfc3BhY2VpZF9iaXRzIC0gUmV0dXJuIHdoZXRoZXIgU3BhY2UgSUQgaGFzaGluZyBpcyB0dXJuZWQgb24uCisgKiBAc3BhY2VfYml0czogU2hvdWxkIGJlIDAsIGlmIG5vdCwgYmFkIG1vam8hCisgKgorICogUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBTcGFjZSBJRCBoYXNoaW5nLgorICovCitpbnQgcGRjX3NwYWNlaWRfYml0cyh1bnNpZ25lZCBsb25nICpzcGFjZV9iaXRzKQoreworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxKCZwZGNfbG9jayk7CisJcGRjX3Jlc3VsdFswXSA9IDA7CisJcmV0dmFsID0gbWVtX3BkY19jYWxsKFBEQ19DQUNIRSwgUERDX0NBQ0hFX1JFVF9TUElELCBfX3BhKHBkY19yZXN1bHQpLCAwKTsKKwljb252ZXJ0X3RvX3dpZGUocGRjX3Jlc3VsdCk7CisJKnNwYWNlX2JpdHMgPSBwZGNfcmVzdWx0WzBdOworCXNwaW5fdW5sb2NrX2lycSgmcGRjX2xvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKwogI2lmbmRlZiBDT05GSUdfUEEyMAogLyoqCiAgKiBwZGNfYnRsYl9pbmZvIC0gUmV0dXJuIGJsb2NrIFRMQiBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwppbmRleCAxOTc5MzZkLi41Yjg4MDNjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtOTQsNyArOTMsNyBAQAogCWlmIChpcnEgPT0gVElNRVJfSVJRIHx8IGlycSA9PSBJUElfSVJRKSB7CiAJCS8qIEJhZCBsaW51eCBkZXNpZ24gZGVjaXNpb24uICBUaGUgbWFzayBoYXMgYWxyZWFkeQogCQkgKiBiZWVuIHNldDsgd2UgbXVzdCByZXNldCBpdCAqLwotCQlpcnFfYWZmaW5pdHlbaXJxXSA9IENQVV9NQVNLX0FMTDsKKwkJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IENQVV9NQVNLX0FMTDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTAsNyArMTA5LDcgQEAKIAlpZiAoY3B1X2NoZWNrX2FmZmluaXR5KGlycSwgJmRlc3QpKQogCQlyZXR1cm47CiAKLQlpcnFfYWZmaW5pdHlbaXJxXSA9IGRlc3Q7CisJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IGRlc3Q7CiB9CiAjZW5kaWYKIApAQCAtMTI1LDYgKzEyNCwxMCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5CT0gY3B1X3NldF9hZmZpbml0eV9pcnEsCiAjZW5kaWYKKwkvKiBYWFg6IE5lZWRzIHRvIGJlIHdyaXR0ZW4uICBXZSBtYW5hZ2VkIHdpdGhvdXQgaXQgc28gZmFyLCBidXQKKwkgKiB3ZSByZWFsbHkgb3VnaHQgdG8gd3JpdGUgaXQuCisJICovCisJLnJldHJpZ2dlcgk9IE5VTEwsCiB9OwogCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKQEAgLTE1OCw3ICsxNjEsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmCiAKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogI2lmbmRlZiBQQVJJU0NfSVJRX0NSMTZfQ09VTlRTCiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCkBAIC0yMTAsMTIgKzIxMywxMiBAQAogewogCWlmIChpcnFfZGVzY1tpcnFdLmFjdGlvbikKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyICE9ICZjcHVfaW50ZXJydXB0X3R5cGUpCisJaWYgKGlycV9kZXNjW2lycV0uY2hpcCAhPSAmY3B1X2ludGVycnVwdF90eXBlKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHR5cGUpIHsKLQkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gdHlwZTsKLQkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyX2RhdGEgPSBkYXRhOworCQlpcnFfZGVzY1tpcnFdLmNoaXAgPSB0eXBlOworCQlpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YSA9IGRhdGE7CiAJCWNwdV9pbnRlcnJ1cHRfdHlwZS5lbmFibGUoaXJxKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNjUsNyArMjY4LDcgQEAKIHVuc2lnbmVkIGxvbmcgdHhuX2FmZmluaXR5X2FkZHIodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKIHsKICNpZmRlZiBDT05GSUdfU01QCi0JaXJxX2FmZmluaXR5W2lycV0gPSBjcHVtYXNrX29mX2NwdShjcHUpOworCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShjcHUpOwogI2VuZGlmCiAKIAlyZXR1cm4gY3B1X2RhdGFbY3B1XS50eG5fYWRkcjsKQEAgLTMyNiw3ICszMjksNyBAQAogCQkvKiBXb3JrIG91ciB3YXkgZnJvbSBNU2IgdG8gTFNiLi4uc2FtZSBvcmRlciB3ZSBhbGxvYyBFSVJzICovCiAJCWZvciAoaXJxID0gVElNRVJfSVJROyBlaXJyX3ZhbCAmJiBiaXQ7IGJpdD4+PTEsIGlycSsrKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCQkJY3B1bWFza190IGRlc3QgPSBpcnFfYWZmaW5pdHlbaXJxXTsKKwkJCWNwdW1hc2tfdCBkZXN0ID0gaXJxX2Rlc2NbaXJxXS5hZmZpbml0eTsKICNlbmRpZgogCQkJaWYgKCEoYml0ICYgZWlycl92YWwpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzYzLDE0ICszNjYsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2FjdGlvbiA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkubmFtZSA9ICJ0aW1lciIsCi0JLmZsYWdzID0gU0FfSU5URVJSVVBULAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiB9OwogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXBpX2FjdGlvbiA9IHsKIAkuaGFuZGxlciA9IGlwaV9pbnRlcnJ1cHQsCiAJLm5hbWUgPSAiSVBJIiwKLQkuZmxhZ3MgPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKIH07CiAjZW5kaWYKIApAQCAtMzc4LDcgKzM4MSw3IEBACiB7CiAJaW50IGk7CiAJZm9yIChpID0gQ1BVX0lSUV9CQVNFOyBpIDw9IENQVV9JUlFfTUFYOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZjcHVfaW50ZXJydXB0X3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmY3B1X2ludGVycnVwdF90eXBlOwogCX0KIAogCWlycV9kZXNjW1RJTUVSX0lSUV0uYWN0aW9uID0gJnRpbWVyX2FjdGlvbjsKQEAgLTQwNCwxMyArNDA3LDYgQEAKIAogfQogCi12b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICp0eXBlLCB1bnNpZ25lZCBpbnQgaXJxKQotewotCS8qIFhYWDogTmVlZHMgdG8gYmUgd3JpdHRlbi4gIFdlIG1hbmFnZWQgd2l0aG91dCBpdCBzbyBmYXIsIGJ1dAotCSAqIHdlIHJlYWxseSBvdWdodCB0byB3cml0ZSBpdC4KLQkgKi8KLX0KLQogdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXByaW50aygidW5leHBlY3RlZCBJUlEgJWRcbiIsIGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZjI3Y2ZlNC4uYWVlMzExOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwpAQCAtODksNiArODksMTIgQEAKIAlyZXR1cm4gaXNfaW5pdChtZSwgbG9jKSB8fCBpc19jb3JlKG1lLCBsb2MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpc19sb2NhbF9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1lLCB2b2lkICpsb2MsIHZvaWQgKmRvdCkKK3sKKwlyZXR1cm4gKGlzX2luaXQobWUsIGxvYykgJiYgaXNfaW5pdChtZSwgZG90KSkgfHwKKwkJKGlzX2NvcmUobWUsIGxvYykgJiYgaXNfY29yZShtZSwgZG90KSk7Cit9CisKIAogI2lmbmRlZiBfX0xQNjRfXwogc3RydWN0IGdvdF9lbnRyeSB7CkBAIC0zNjQsOCArMzcwLDE0IEBACiB9CiAjZW5kaWYgLyogX19MUDY0X18gKi8KIAorZW51bSBlbGZfc3R1Yl90eXBlIHsKKwlFTEZfU1RVQl9HT1QsCisJRUxGX1NUVUJfTUlMTEksCisJRUxGX1NUVUJfRElSRUNULAorfTsKKwogc3RhdGljIEVsZl9BZGRyIGdldF9zdHViKHN0cnVjdCBtb2R1bGUgKm1lLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBsb25nIGFkZGVuZCwKLQlpbnQgbWlsbGljb2RlLCBpbnQgaW5pdF9zZWN0aW9uKQorCWVudW0gZWxmX3N0dWJfdHlwZSBzdHViX3R5cGUsIGludCBpbml0X3NlY3Rpb24pCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCXN0cnVjdCBzdHViX2VudHJ5ICpzdHViOwpAQCAtMzk2LDcgKzQwOCw3IEBACiAJc3R1Yi0+aW5zbnNbMV0gfD0gcmVhc3NlbWJsZV8xNyhycnNlbCh2YWx1ZSwgYWRkZW5kKSAvIDQpOwogCiAjZWxzZQotLyogZm9yIDY0LWJpdCB3ZSBoYXZlIHR3byBraW5kcyBvZiBzdHViczoKKy8qIGZvciA2NC1iaXQgd2UgaGF2ZSB0aHJlZSBraW5kcyBvZiBzdHViczoKICAqIGZvciBub3JtYWwgZnVuY3Rpb24gY2FsbHM6CiAgKiAJbGRkIDAoJWRwKSwlZHAKICAqIAlsZGQgMTAoJWRwKSwgJXIxCkBAIC00MDgsMTggKzQyMCwyMyBAQAogICogCWxkbyAwKCVyMSksICVyMQogICogCWxkZCAxMCglcjEpLCAlcjEKICAqIAlidmUsbiAoJXIxKQorICoKKyAqIGZvciBkaXJlY3QgYnJhbmNoZXMgKGp1bXBzIGJldHdlZW4gZGlmZmVyZW50IHNlY3Rpb24gb2YgdGhlCisgKiBzYW1lIG1vZHVsZSk6CisgKglsZGlsIDAsICVyMQorICoJbGRvIDAoJXIxKSwgJXIxCisgKglidmUsbiAoJXIxKQogICovCi0JaWYgKCFtaWxsaWNvZGUpCi0JeworCXN3aXRjaCAoc3R1Yl90eXBlKSB7CisJY2FzZSBFTEZfU1RVQl9HT1Q6CiAJCXN0dWItPmluc25zWzBdID0gMHg1MzdiMDAwMDsJLyogbGRkIDAoJWRwKSwlZHAJKi8KIAkJc3R1Yi0+aW5zbnNbMV0gPSAweDUzNjEwMDIwOwkvKiBsZGQgMTAoJWRwKSwlcjEJKi8KIAkJc3R1Yi0+aW5zbnNbMl0gPSAweGU4MjBkMDAwOwkvKiBidmUgKCVyMSkJCSovCiAJCXN0dWItPmluc25zWzNdID0gMHg1MzdiMDAzMDsJLyogbGRkIDE4KCVkcCksJWRwCSovCiAKIAkJc3R1Yi0+aW5zbnNbMF0gfD0gcmVhc3NlbWJsZV8xNChnZXRfZ290KG1lLCB2YWx1ZSwgYWRkZW5kKSAmIDB4M2ZmZik7Ci0JfQotCWVsc2UKLQl7CisJCWJyZWFrOworCWNhc2UgRUxGX1NUVUJfTUlMTEk6CiAJCXN0dWItPmluc25zWzBdID0gMHgyMDIwMDAwMDsJLyogbGRpbCAwLCVyMQkJKi8KIAkJc3R1Yi0+aW5zbnNbMV0gPSAweDM0MjEwMDAwOwkvKiBsZG8gMCglcjEpLCAlcjEJKi8KIAkJc3R1Yi0+aW5zbnNbMl0gPSAweDUwMjEwMDIwOwkvKiBsZGQgMTAoJXIxKSwlcjEJKi8KQEAgLTQyNyw3ICs0NDQsMTcgQEAKIAogCQlzdHViLT5pbnNuc1swXSB8PSByZWFzc2VtYmxlXzIxKGxyc2VsKHZhbHVlLCBhZGRlbmQpKTsKIAkJc3R1Yi0+aW5zbnNbMV0gfD0gcmVhc3NlbWJsZV8xNChycnNlbCh2YWx1ZSwgYWRkZW5kKSk7CisJCWJyZWFrOworCWNhc2UgRUxGX1NUVUJfRElSRUNUOgorCQlzdHViLT5pbnNuc1swXSA9IDB4MjAyMDAwMDA7ICAgIC8qIGxkaWwgMCwlcjEgICAgICAgICAgICovCisJCXN0dWItPmluc25zWzFdID0gMHgzNDIxMDAwMDsgICAgLyogbGRvIDAoJXIxKSwgJXIxICAgICAgKi8KKwkJc3R1Yi0+aW5zbnNbMl0gPSAweGU4MjBkMDAyOyAgICAvKiBidmUsbiAoJXIxKSAgICAgICAgICAqLworCisJCXN0dWItPmluc25zWzBdIHw9IHJlYXNzZW1ibGVfMjEobHJzZWwodmFsdWUsIGFkZGVuZCkpOworCQlzdHViLT5pbnNuc1sxXSB8PSByZWFzc2VtYmxlXzE0KHJyc2VsKHZhbHVlLCBhZGRlbmQpKTsKKwkJYnJlYWs7CiAJfQorCiAjZW5kaWYKIAogCXJldHVybiAoRWxmX0FkZHIpc3R1YjsKQEAgLTUzOSwxNCArNTY2LDE0IEBACiAJCQlicmVhazsKIAkJY2FzZSBSX1BBUklTQ19QQ1JFTDE3RjoKIAkJCS8qIDE3LWJpdCBQQyByZWxhdGl2ZSBhZGRyZXNzICovCi0JCQl2YWwgPSBnZXRfc3R1YihtZSwgdmFsLCBhZGRlbmQsIDAsIGlzX2luaXQobWUsIGxvYykpOworCQkJdmFsID0gZ2V0X3N0dWIobWUsIHZhbCwgYWRkZW5kLCBFTEZfU1RVQl9HT1QsIGlzX2luaXQobWUsIGxvYykpOwogCQkJdmFsID0gKHZhbCAtIGRvdCAtIDgpLzQ7CiAJCQlDSEVDS19SRUxPQyh2YWwsIDE3KQogCQkJKmxvYyA9ICgqbG9jICYgfjB4MWYxZmZkKSB8IHJlYXNzZW1ibGVfMTcodmFsKTsKIAkJCWJyZWFrOwogCQljYXNlIFJfUEFSSVNDX1BDUkVMMjJGOgogCQkJLyogMjItYml0IFBDIHJlbGF0aXZlIGFkZHJlc3M7IG9ubHkgZGVmaW5lZCBmb3IgcGEyMCAqLwotCQkJdmFsID0gZ2V0X3N0dWIobWUsIHZhbCwgYWRkZW5kLCAwLCBpc19pbml0KG1lLCBsb2MpKTsKKwkJCXZhbCA9IGdldF9zdHViKG1lLCB2YWwsIGFkZGVuZCwgRUxGX1NUVUJfR09ULCBpc19pbml0KG1lLCBsb2MpKTsKIAkJCURFQlVHUCgiU1RVQiBGT1IgJXMgbG9jICVseCslbHggYXQgJWx4XG4iLCAKIAkJCSAgICAgICBzdHJ0YWIgKyBzeW0tPnN0X25hbWUsICh1bnNpZ25lZCBsb25nKWxvYywgYWRkZW5kLCAKIAkJCSAgICAgICB2YWwpCkBAIC02NDMsMTMgKzY3MCwyMyBAQAogCQkJICAgICAgIHN0cnRhYiArIHN5bS0+c3RfbmFtZSwKIAkJCSAgICAgICBsb2MsIHZhbCk7CiAJCQkvKiBjYW4gd2UgcmVhY2ggaXQgbG9jYWxseT8gKi8KLQkJCWlmKCFpc19sb2NhbChtZSwgKHZvaWQgKil2YWwpKSB7Ci0JCQkJaWYgKHN0cm5jbXAoc3RydGFiICsgc3ltLT5zdF9uYW1lLCAiJCQiLCAyKQorCQkJaWYoIWlzX2xvY2FsX3NlY3Rpb24obWUsICh2b2lkICopdmFsLCAodm9pZCAqKWRvdCkpIHsKKworCQkJCWlmIChpc19sb2NhbChtZSwgKHZvaWQgKil2YWwpKQorCQkJCQkvKiB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZQorCQkJCQkgKiBzeW1ib2wgaXMgbG9jYWwgdG8gdGhlCisJCQkJCSAqIG1vZHVsZSwgYnV0IGluIGEgZGlmZmVyZW50CisJCQkJCSAqIHNlY3Rpb24sIHNvIHN0dWIgdGhlIGp1bXAKKwkJCQkJICogaW4gY2FzZSBpdCdzIG1vcmUgdGhhbiAyMgorCQkJCQkgKiBiaXRzIGF3YXkgKi8KKwkJCQkJdmFsID0gZ2V0X3N0dWIobWUsIHZhbCwgYWRkZW5kLCBFTEZfU1RVQl9ESVJFQ1QsCisJCQkJCQkgICAgICAgaXNfaW5pdChtZSwgbG9jKSk7CisJCQkJZWxzZSBpZiAoc3RybmNtcChzdHJ0YWIgKyBzeW0tPnN0X25hbWUsICIkJCIsIDIpCiAJCQkJICAgID09IDApCi0JCQkJCXZhbCA9IGdldF9zdHViKG1lLCB2YWwsIGFkZGVuZCwgMSwKKwkJCQkJdmFsID0gZ2V0X3N0dWIobWUsIHZhbCwgYWRkZW5kLCBFTEZfU1RVQl9NSUxMSSwKIAkJCQkJCSAgICAgICBpc19pbml0KG1lLCBsb2MpKTsKIAkJCQllbHNlCi0JCQkJCXZhbCA9IGdldF9zdHViKG1lLCB2YWwsIGFkZGVuZCwgMCwKKwkJCQkJdmFsID0gZ2V0X3N0dWIobWUsIHZhbCwgYWRkZW5kLCBFTEZfU1RVQl9HT1QsCiAJCQkJCQkgICAgICAgaXNfaW5pdChtZSwgbG9jKSk7CiAJCQl9CiAJCQlERUJVR1AoIlNUVUIgRk9SICVzIGxvYyAlbHgsIHZhbCAlbHgrJWx4IGF0ICVseFxuIiwgCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUwppbmRleCBmNjAwNTU2Li5lODFjOTkzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMKQEAgLTQwLDcgKzQwLDYgQEAKIAkubGV2ZWwJMi4wCiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3Bzdy5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJseS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCmluZGV4IGZjMTA3YWQuLjZkNTc1NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwppbmRleCA3OWM3ZGIyLi5kM2I4ZmM1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCkBAIC05LDcgKzksNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEdyYW50IEdydW5kbGVyCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9laXNhLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjg5LDcgKzI4OCw3IEBACiAgKiB0aGFuIHJlcy0+c3RhcnQuCiAgKi8KIHZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50KQorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ25tZW50KQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgYWxpZ247CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY2hhc3Npcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jaGFzc2lzLmMKaW5kZXggYTQ1ZTJlMi4uZDQ3YmExYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jaGFzc2lzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jaGFzc2lzLmMKQEAgLTEsOCArMSw4IEBACiAvKiAKLSAqICAgIGludGVyZmFjZXMgdG8gbG9nIENoYXNzaXMgQ29kZXMgdmlhIFBEQyAoZmlybXdhcmUpCisgKiAgICBpbnRlcmZhY2VzIHRvIENoYXNzaXMgQ29kZXMgdmlhIFBEQyAoZmlybXdhcmUpCiAgKgogICogICAgQ29weXJpZ2h0IChDKSAyMDAyIExhdXJlbnQgQ2FuZXQgPGNhbmV0bEBlc2llZS5mcj4KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBUaGliYXV0IFZBUkVORSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPgogICoKICAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzCkBAIC0xNiw2ICsxNiwxMCBAQAogICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogICAgVE9ETzogcG9sbCBjaGFzc2lzIHdhcm5zLCB0cmlnZ2VyIChjb25maWd1cmFibGUpIG1hY2hpbmUgc2h1dGRvd24gd2hlbgorICogICAgCQluZWVkZWQuCisgKiAgICAJICAgIEZpbmQgb3V0IGhvdyB0byBnZXQgQ2hhc3NpcyB3YXJuaW5ncyBvdXQgb2YgUEFUIGJveGVzPwogICovCiAKICN1bmRlZiBQRENfQ0hBU1NJU19ERUJVRwpAQCAtMzAsMTUgKzM0LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2luY2x1ZGUgPGFzbS9wZGNfY2hhc3Npcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGRjLmg+CiAjaW5jbHVkZSA8YXNtL3BkY3BhdC5oPgogCisjZGVmaW5lIFBEQ19DSEFTU0lTX1ZFUgkiMC4wNSIKIAogI2lmZGVmIENPTkZJR19QRENfQ0hBU1NJUwotc3RhdGljIGludCBwZGNfY2hhc3Npc19vbGQgX19yZWFkX21vc3RseSA9IDA7CQogc3RhdGljIHVuc2lnbmVkIGludCBwZGNfY2hhc3Npc19lbmFibGVkIF9fcmVhZF9tb3N0bHkgPSAxOwogCiAKQEAgLTY0LDcgKzY5LDcgQEAKICAqIEN1cnJlbnRseSwgb25seSBFIGNsYXNzIGFuZCBBMTgwIGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhpcy4KICAqIEluc3BpcmVkIGJ5IENocmlzdG9waCBQbGF0dG5lcgogICovCi0KKyNpZiAwCiBzdGF0aWMgdm9pZCBfX2luaXQgcGRjX2NoYXNzaXNfY2hlY2tvbGQodm9pZCkKIHsKIAlzd2l0Y2goQ1BVX0hWRVJTSU9OKSB7CkBAIC03Myw3ICs3OCw2IEBACiAJCWNhc2UgMHg0ODI6CQkvKiBFNDUgKi8KIAkJY2FzZSAweDQ4MzoJCS8qIEU1NSAqLwogCQljYXNlIDB4NTE2OgkJLyogQTE4MCAqLwotCQkJcGRjX2NoYXNzaXNfb2xkID0gMTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC04MSw3ICs4NSw3IEBACiAJfQogCURQUklOVEsoS0VSTl9ERUJVRyAiJXM6IHBkY19jaGFzc2lzX2NoZWNrb2xkKCk7IHBkY19jaGFzc2lzX29sZCA9ICVkXG4iLCBfX0ZJTEVfXywgcGRjX2NoYXNzaXNfb2xkKTsKIH0KLQorI2VuZGlmCiAKIC8qKgogICogcGRjX2NoYXNzaXNfcGFuaWNfZXZlbnQoKSAtIENhbGxlZCBieSB0aGUgcGFuaWMgaGFuZGxlci4KQEAgLTEzMSwzMCArMTM1LDIwIEBACiB2b2lkIF9faW5pdCBwYXJpc2NfcGRjX2NoYXNzaXNfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19QRENfQ0hBU1NJUwotCWludCBoYW5kbGUgPSAwOwogCWlmIChsaWtlbHkocGRjX2NoYXNzaXNfZW5hYmxlZCkpIHsKIAkJRFBSSU5USyhLRVJOX0RFQlVHICIlczogcGFyaXNjX3BkY19jaGFzc2lzX2luaXQoKVxuIiwgX19GSUxFX18pOwogCiAJCS8qIExldCBzZWUgaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gaGFuZGxlLi4uICovCi0JCS8qIENoZWNrIGZvciBQRENfUEFUIG9yIG9sZCBMRUQgUGFuZWwgKi8KLQkJcGRjX2NoYXNzaXNfY2hlY2tvbGQoKTsKLQkJaWYgKGlzX3BkY19wYXQoKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgUERDX1BBVCBjaGFzc2lzIGNvZGVzIHN1cHBvcnQuXG4iKTsKLQkJCWhhbmRsZSA9IDE7Ci0JCX0KLQkJZWxzZSBpZiAodW5saWtlbHkocGRjX2NoYXNzaXNfb2xkKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgb2xkIHN0eWxlIGNoYXNzaXMgTEVEIHBhbmVsIHN1cHBvcnQuXG4iKTsKLQkJCWhhbmRsZSA9IDE7Ci0JCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgJXMgY2hhc3NpcyBjb2RlcyBzdXBwb3J0IHYlc1xuIiwKKwkJCQlpc19wZGNfcGF0KCkgPyAiUERDX1BBVCIgOiAicmVndWxhciIsCisJCQkJUERDX0NIQVNTSVNfVkVSKTsKIAotCQlpZiAoaGFuZGxlKSB7Ci0JCQkvKiBpbml0aWFsaXplIHBhbmljIG5vdGlmaWVyIGNoYWluICovCi0JCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCi0JCQkJCSZwZGNfY2hhc3Npc19wYW5pY19ibG9jayk7CisJCS8qIGluaXRpYWxpemUgcGFuaWMgbm90aWZpZXIgY2hhaW4gKi8KKwkJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCSZwZGNfY2hhc3Npc19wYW5pY19ibG9jayk7CiAKLQkJCS8qIGluaXRpYWxpemUgcmVib290IG5vdGlmaWVyIGNoYWluICovCi0JCQlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBkY19jaGFzc2lzX3JlYm9vdF9ibG9jayk7Ci0JCX0KKwkJLyogaW5pdGlhbGl6ZSByZWJvb3Qgbm90aWZpZXIgY2hhaW4gKi8KKwkJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwZGNfY2hhc3Npc19yZWJvb3RfYmxvY2spOwogCX0KICNlbmRpZiAvKiBDT05GSUdfUERDX0NIQVNTSVMgKi8KIH0KQEAgLTIxNSw5ICsyMDksMTIgQEAKIAkJCX0KIAkJfSBlbHNlIHJldHZhbCA9IC0xOwogI2Vsc2UKLQkJaWYgKHVubGlrZWx5KHBkY19jaGFzc2lzX29sZCkpIHsKKwkJaWYgKDEpIHsKIAkJCXN3aXRjaCAobWVzc2FnZSkgewogCQkJCWNhc2UgUERDX0NIQVNTSVNfRElSRUNUX0JTVEFSVDoKKwkJCQkJcmV0dmFsID0gcGRjX2NoYXNzaXNfZGlzcChQRENfQ0hBU1NJU19ESVNQX0RBVEEoT1NUQVRfSU5JVCkpOworCQkJCQlicmVhazsKKwogCQkJCWNhc2UgUERDX0NIQVNTSVNfRElSRUNUX0JDT01QTEVURToKIAkJCQkJcmV0dmFsID0gcGRjX2NoYXNzaXNfZGlzcChQRENfQ0hBU1NJU19ESVNQX0RBVEEoT1NUQVRfUlVOKSk7CiAJCQkJCWJyZWFrOwpAQCAtMjQ0LDMgKzI0MSw2MSBAQAogI2VuZGlmIC8qIENPTkZJR19QRENfQ0hBU1NJUyAqLwogCXJldHVybiByZXR2YWw7CiB9CisKKyNpZmRlZiBDT05GSUdfUERDX0NIQVNTSVNfV0FSTgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgaW50IHBkY19jaGFzc2lzX3dhcm5fcHJlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJY2hhciAqb3V0ID0gcGFnZTsKKwlpbnQgbGVuLCByZXQ7CisJdW5zaWduZWQgbG9uZyB3YXJuOworCXUzMiB3YXJucmVnOworCisJcmV0ID0gcGRjX2NoYXNzaXNfd2Fybigmd2Fybik7CisJaWYgKHJldCAhPSBQRENfT0spCisJCXJldHVybiAtRUlPOworCisJd2FybnJlZyA9ICh3YXJuICYgMHhGRkZGRkZGRik7CisKKwlpZiAoKHdhcm5yZWcgPj4gMjQpICYgMHhGRikKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiQ2hhc3NpcyBjb21wb25lbnQgZmFpbHVyZSEgKGVnIGZhbiBvciBQU1UpOiAweCUuMnhcbiIsICgod2FybnJlZyA+PiAyNCkgJiAweEZGKSk7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJCYXR0ZXJ5OiAlc1xuIiwgKHdhcm5yZWcgJiAweDA0KSA/ICJMb3chIiA6ICJPSyIpOworCW91dCArPSBzcHJpbnRmKG91dCwgIlRlbXAgbG93OiAlc1xuIiwgKHdhcm5yZWcgJiAweDAyKSA/ICJFeGNlZWRlZCEiIDogIk9LIik7CisJb3V0ICs9IHNwcmludGYob3V0LCAiVGVtcCBtaWQ6ICVzXG4iLCAod2FybnJlZyAmIDB4MDEpID8gIkV4Y2VlZGVkISIgOiAiT0siKTsKKworCWxlbiA9IG91dCAtIHBhZ2UgLSBvZmY7CisJaWYgKGxlbiA8IGNvdW50KSB7CisJCSplb2YgPSAxOworCQlpZiAobGVuIDw9IDApIHJldHVybiAwOworCX0gZWxzZSB7CisJCWxlbiA9IGNvdW50OworCX0KKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBkY19jaGFzc2lzX2NyZWF0ZV9wcm9jZnModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRlc3Q7CisJaW50IHJldDsKKworCXJldCA9IHBkY19jaGFzc2lzX3dhcm4oJnRlc3QpOworCWlmICgocmV0ID09IFBEQ19CQURfUFJPQykgfHwgKHJldCA9PSBQRENfQkFEX09QVElPTikpIHsKKwkJLyogc2VlbXMgdGhhdCBzb21lIGJveGVzIChlZyBMMTAwMCkgZG8gbm90IGltcGxlbWVudCB0aGlzICovCisJCXByaW50ayhLRVJOX0lORk8gIkNoYXNzaXMgd2FybmluZ3Mgbm90IHN1cHBvcnRlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJFbmFibGluZyBQREMgY2hhc3NpcyB3YXJuaW5ncyBzdXBwb3J0IHYlc1xuIiwKKwkJCVBEQ19DSEFTU0lTX1ZFUik7CisJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiY2hhc3NpcyIsIDA0MDAsIE5VTEwsIHBkY19jaGFzc2lzX3dhcm5fcHJlYWQsCisJCQkJTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwocGRjX2NoYXNzaXNfY3JlYXRlX3Byb2Nmcyk7CisKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworI2VuZGlmIC8qIENPTkZJR19QRENfQ0hBU1NJU19XQVJOICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jCmluZGV4IDIxNWQ3OGMuLmNlNzhmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jCkBAIC00NCw3ICs0NCw2IEBACiAjZGVmaW5lIEVBUkxZX0JPT1RVUF9ERUJVRwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGVyZl9hc20uUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wZXJmX2FzbS5TCmluZGV4IGFkYjNjNjQuLjVlN2JiOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZXJmX2FzbS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wZXJmX2FzbS5TCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJseS5oPgogCiAjaWZkZWYgQ09ORklHXzY0QklUCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMKaW5kZXggNmRmOWY2Mi4uOTlkN2ZjYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMjYsNyArMjYsNiBAQAogICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA0MTMyOTJmLi4zZjI4ZGU5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCkBAIC05MSw3ICs5MSw3IEBACiAJCWludCBjb3BpZWQ7CiAKICNpZmRlZiBfX0xQNjRfXwotCQlpZiAocGVyc29uYWxpdHkoY2hpbGQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgeworCQlpZiAoX19pc19jb21wYXRfdGFzayhjaGlsZCkpIHsKIAkJCXVuc2lnbmVkIGludCB0bXA7CiAKIAkJCWFkZHIgJj0gMHhmZmZmZmZmZkw7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAljYXNlIFBUUkFDRV9QT0tFREFUQToKIAkJcmV0ID0gMDsKICNpZmRlZiBfX0xQNjRfXwotCQlpZiAocGVyc29uYWxpdHkoY2hpbGQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgeworCQlpZiAoX19pc19jb21wYXRfdGFzayhjaGlsZCkpIHsKIAkJCXVuc2lnbmVkIGludCB0bXAgPSAodW5zaWduZWQgaW50KWRhdGE7CiAJCQlEQkcoInN5c19wdHJhY2UoUE9LRSVzLCAlZCwgJWx4LCAlbHgpXG4iLAogCQkJCXJlcXVlc3QgPT0gUFRSQUNFX1BPS0VURVhUID8gIlRFWFQiIDogIkRBVEEiLApAQCAtMTQ2LDcgKzE0Niw3IEBACiAJY2FzZSBQVFJBQ0VfUEVFS1VTUjogewogCQlyZXQgPSAtRUlPOwogI2lmZGVmIF9fTFA2NF9fCi0JCWlmIChwZXJzb25hbGl0eShjaGlsZC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyKSB7CisJCWlmIChfX2lzX2NvbXBhdF90YXNrKGNoaWxkKSkgewogCQkJdW5zaWduZWQgaW50IHRtcDsKIAogCQkJaWYgKGFkZHIgJiAoc2l6ZW9mKGludCktMSkpCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJCWdvdG8gb3V0X3RzazsKIAkJfQogI2lmZGVmIF9fTFA2NF9fCi0JCWlmIChwZXJzb25hbGl0eShjaGlsZC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyKSB7CisJCWlmIChfX2lzX2NvbXBhdF90YXNrKGNoaWxkKSkgewogCQkJaWYgKGFkZHIgJiAoc2l6ZW9mKGludCktMSkpCiAJCQkJZ290byBvdXRfdHNrOwogCQkJaWYgKChhZGRyID0gdHJhbnNsYXRlX3Vzcl9vZmZzZXQoYWRkcikpIDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9yZWFsMi5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3JlYWwyLlMKaW5kZXggOGMyODU5Yy4uNzg5MDYxZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3JlYWwyLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3JlYWwyLlMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgSGV3bGV0dCBQYWNrYXJkIChQYXVsIEJhbWUgYmFtZUBwdWZmaW4uZXh0ZXJuYWwuaHAuY29tKQogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3Bzdy5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJseS5oPgpAQCAtMjc2LDE1ICsyNzUsNiBAQAogCiAjZW5kaWYKIAotCS5leHBvcnQgcGNfaW5fdXNlcl9zcGFjZQotCS50ZXh0Ci0JLyogRG9lc24ndCBiZWxvbmcgaGVyZSBidXQgSSBjb3VsZG4ndCBmaW5kIGEgbmljZXIgc3BvdC4gKi8KLQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGNhbGxlZCwgb25seSB1c2VkIGJ5IHByb2ZpbGUgc3R1ZmYgaW4gdGltZS5jICovCi1wY19pbl91c2VyX3NwYWNlOgotCWJ2LG4JMCglcnApCi0Jbm9wCi0KLQogCS5leHBvcnQgX19jYW5vbmljYWxpemVfZnVuY3B0cl9mb3JfY29tcGFyZQogCS50ZXh0CiAJLyogaHR0cDovL2xpc3RzLnBhcmlzYy1saW51eC5vcmcvaHlwZXJtYWlsL3BhcmlzYy1saW51eC8xMDkxNi5odG1sCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCmluZGV4IDRhMzZlYzMuLjNjN2EzZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMDMsNiArMzAyLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgcGFyaXNjX2luaXQodm9pZCkKIHsKKwl1MzIgb3NpZCA9IChPU19JRF9MSU5VWCA8PCAxNik7CisKIAlwYXJpc2NfcHJvY19ta2RpcigpOwogCXBhcmlzY19pbml0X3Jlc291cmNlcygpOwogCWRvX2RldmljZV9pbnZlbnRvcnkoKTsgICAgICAgICAgICAgICAgICAvKiBwcm9iZSBmb3IgaGFyZHdhcmUgKi8KQEAgLTMxMSw2ICszMTIsOSBAQAogCQogCS8qIHNldCB1cCBhIG5ldyBsZWQgc3RhdGUgb24gc3lzdGVtcyBzaGlwcGVkIExFRCBTdGF0ZSBwYW5lbCAqLwogCXBkY19jaGFzc2lzX3NlbmRfc3RhdHVzKFBEQ19DSEFTU0lTX0RJUkVDVF9CU1RBUlQpOworCisJLyogdGVsbCBQREMgd2UncmUgTGludXguIE5ldmVybWluZCBmYWlsdXJlLiAqLworCXBkY19zdGFibGVfd3JpdGUoMHg0MCwgJm9zaWQsIHNpemVvZihvc2lkKSk7CiAJCiAJcHJvY2Vzc29yX2luaXQoKTsKIAlwcmludGsoS0VSTl9JTkZPICJDUFUocyk6ICVkIHggJXMgYXQgJWQuJTA2ZCBNSHpcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggY2MzOGVkZi4uYmI4Mzg4MCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtNzYsNyArNzYsNyBAQAogI2lmZGVmIF9fTFA2NF9fCiAJY29tcGF0X3NpZ3NldF90IG5ld3NldDMyOwogCi0JaWYocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyKXsKKwlpZiAoaXNfY29tcGF0X3Rhc2soKSkgewogCQkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KIAkJaWYgKHNpZ3NldHNpemUgIT0gc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWNvbXBhdF9zaWdzZXRfdCBjb21wYXRfc2V0OwogCXN0cnVjdCBjb21wYXRfcnRfc2lnZnJhbWUgX191c2VyICogY29tcGF0X2ZyYW1lOwogCQotCWlmKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikKKwlpZiAoaXNfY29tcGF0X3Rhc2soKSkKIAkJc2lnZnJhbWVfc2l6ZSA9IFBBUklTQ19SVF9TSUdGUkFNRV9TSVpFMzI7CiAjZW5kaWYKIApAQCAtMTY2LDcgKzE2Niw3IEBACiAjaWZkZWYgX19MUDY0X18KIAljb21wYXRfZnJhbWUgPSAoc3RydWN0IGNvbXBhdF9ydF9zaWdmcmFtZSBfX3VzZXIgKilmcmFtZTsKIAkKLQlpZihwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpeworCWlmIChpc19jb21wYXRfdGFzaygpKSB7CiAJCURCRygyLCJzeXNfcnRfc2lncmV0dXJuOiBFTEYzMiBwcm9jZXNzLlxuIik7CiAJCWlmIChfX2NvcHlfZnJvbV91c2VyKCZjb21wYXRfc2V0LCAmY29tcGF0X2ZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2YoY29tcGF0X3NldCkpKQogCQkJZ290byBnaXZlX3NpZ3NlZ3Y7CkBAIC0xODYsNyArMTg2LDcgQEAKIAogCS8qIEdvb2QgdGhpbmcgd2Ugc2F2ZWQgdGhlIG9sZCBnclszMF0sIGVoPyAqLwogI2lmZGVmIF9fTFA2NF9fCi0JaWYocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyKXsKKwlpZiAoaXNfY29tcGF0X3Rhc2soKSkgewogCQlEQkcoMSwic3lzX3J0X3NpZ3JldHVybjogY29tcGF0X2ZyYW1lLT51Yy51Y19tY29udGV4dCAweCVwXG4iLAogCQkJCSZjb21wYXRfZnJhbWUtPnVjLnVjX21jb250ZXh0KTsKIC8vIEZJWE1FOiBMb2FkIHVwcGVyIGhhbGYgZnJvbSByZWdpc3RlciBmaWxlCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogCWNvbXBhdF9mcmFtZSA9IChzdHJ1Y3QgY29tcGF0X3J0X3NpZ2ZyYW1lIF9fdXNlciAqKWZyYW1lOwogCQotCWlmKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgeworCWlmIChpc19jb21wYXRfdGFzaygpKSB7CiAJCURCRygxLCJzZXR1cF9ydF9mcmFtZTogZnJhbWUtPmluZm8gPSAweCVwXG4iLCAmY29tcGF0X2ZyYW1lLT5pbmZvKTsKIAkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyMzIoJmNvbXBhdF9mcmFtZS0+aW5mbywgaW5mbyk7CiAJCURCRygxLCJTRVRVUF9SVF9GUkFNRTogMVxuIik7CkBAIC0zOTIsNyArMzkyLDcgQEAKIAloYWRkciA9IEEoa2EtPnNhLnNhX2hhbmRsZXIpOwogCS8qIFRoZSBzYV9oYW5kbGVyIG1heSBiZSBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBkZXNjcmlwdG9yICovCiAjaWZkZWYgX19MUDY0X18KLQlpZihwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpIHsKKwlpZiAoaXNfY29tcGF0X3Rhc2soKSkgewogI2VuZGlmCiAJCWlmIChoYWRkciAmIFBBX1BMQUJFTF9GREVTQykgewogCQkJRWxmMzJfRmRlc2MgZmRlc2M7CkBAIC00MjcsMTkgKzQyNywxOSBAQAogCSAqLwogCXNpZ2ZyYW1lX3NpemUgPSBQQVJJU0NfUlRfU0lHRlJBTUVfU0laRTsKICNpZmRlZiBfX0xQNjRfXwotCWlmKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikKKwlpZiAoaXNfY29tcGF0X3Rhc2soKSkKIAkJc2lnZnJhbWVfc2l6ZSA9IFBBUklTQ19SVF9TSUdGUkFNRV9TSVpFMzI7CiAjZW5kaWYKIAlpZiAoaW5fc3lzY2FsbCkgewogCQlyZWdzLT5nclszMV0gPSBoYWRkcjsKICNpZmRlZiBfX0xQNjRfXwotCQlpZihwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYKQorCQlpZiAocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWCkKIAkJCXNpZ2ZyYW1lX3NpemUgfD0gMTsKICNlbmRpZgogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgcHN3ID0gVVNFUl9QU1c7CiAjaWZkZWYgX19MUDY0X18KLQkJaWYocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWCkKKwkJaWYgKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgpCiAJCQlwc3cgfD0gUFNXX1c7CiAjZW5kaWYKIApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJcmVncy0+Z3JbMjZdID0gc2lnOyAgICAgICAgICAgICAgIC8qIHNpZ25hbCBudW1iZXIgKi8KIAkKICNpZmRlZiBfX0xQNjRfXwotCWlmKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMil7CisJaWYgKGlzX2NvbXBhdF90YXNrKCkpIHsKIAkJcmVncy0+Z3JbMjVdID0gQSgmY29tcGF0X2ZyYW1lLT5pbmZvKTsgLyogc2lnaW5mbyBwb2ludGVyICovCiAJCXJlZ3MtPmdyWzI0XSA9IEEoJmNvbXBhdF9mcmFtZS0+dWMpOyAgIC8qIHVjb250ZXh0IHBvaW50ZXIgKi8KIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwppbmRleCBkNmFjMWM2Li45OGU0MDk1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCkBAIC0xOCw3ICsxOCw2IEBACiAqLwogI3VuZGVmIEVOVFJZX1NZU19DUFVTCS8qIHN5c2NhbGwgc3VwcG9ydCBmb3IgaUNPRC1saWtlIGZ1bmN0aW9uYWxpdHkgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCmluZGV4IGQyODZmNjguLmI3NDg2OTggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKQEAgLTksNyArOSw2IEBACiAgKiBlbnZpcm9ubWVudC4gQmFzZWQgaGVhdmlseSBvbiBzeXNfaWEzMi5jIGFuZCBzeXNfc3BhcmMzMi5jLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKaW5kZXggNDc5ZDlhMC4uOTY3MGE4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtMjksMTggKzI5LDYgQEAKIAkubGV2ZWwJCTEuMQogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHXzY0QklUCi0JLm1hY3JvIGZpeHVwX2JyYW5jaCxsYmwKLQliCSAgICBcbGJsCi0JLmVuZG0KLSNlbHNlCi0JLm1hY3JvIGZpeHVwX2JyYW5jaCxsYmwKLQlsZGlsCSAgICBMJVxsYmwsICVyMQotCWxkbwkgICAgUiVcbGJsKCVyMSksICVyMQotCWJ2LG4gICAgICAgICVyMCglcjEpCi0JLmVuZG0KLSNlbmRpZgotCiAJLnRleHQKIAogCS5pbXBvcnQgc3lzY2FsbF9leGl0LGNvZGUKQEAgLTU0MSw3ICs1MjksNyBAQAogIyBlbmRpZgogLyogRU5BQkxFX0xXU19ERUJVRyAqLwogCi0JbGRjdwkwKCVzcjIsJXIyMCksICVyMjgJCQkvKiBUcnkgdG8gYWNxdWlyZSB0aGUgbG9jayAqLworCUxEQ1cJMCglc3IyLCVyMjApLCAlcjI4CQkJLyogVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgKi8KIAljbXBiLDw+LG4JJXIwLCAlcjI4LCBjYXNfYWN0aW9uCQkvKiBEaWQgd2UgZ2V0IGl0PyAqLwogY2FzX3dvdWxkYmxvY2s6CiAJbGRvCTIoJXIwKSwgJXIyOAkJCQkvKiAybmQgY2FzZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKaW5kZXggNTk0OTMwYi4uNWZhY2M5YiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAxOTk4LTEyLTIwICBVcGRhdGVkIE5UUCBjb2RlIGFjY29yZGluZyB0byB0ZWNobmljYWwgbWVtb3JhbmR1bSBKYW4gJzk2CiAgKiAgICAgICAgICAgICAiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTU3LDggKzE1NiwyMiBAQAogCQl1c2VjICs9ICh4dGltZS50dl9uc2VjIC8gMTAwMCk7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CiAKLQl3aGlsZSAodXNlYyA+PSAxMDAwMDAwKSB7Ci0JCXVzZWMgLT0gMTAwMDAwMDsKKwlpZiAodW5saWtlbHkodXNlYyA+IExPTkdfTUFYKSkgeworCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGdldHRpbWVvZmZzZXQgYWRqdXN0bWVudCBpcworCQkgKiBuZWdhdGl2ZSBhbmQgeHRpbWUudHZfbnNlYyBpcyBzbWFsbGVyIHRoYW4gdGhlCisJCSAqIGFkanVzdG1lbnQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJkb19nZXR0aW1lb2ZkYXkoKSBzcHVyaW91cyB4dGltZS50dl9uc2VjIG9mICVsZFxuIiwgdXNlYyk7CisJCXVzZWMgKz0gVVNFQ19QRVJfU0VDOworCQktLXNlYzsKKwkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBpdCBtZWFucyB0aGUgbmVnYXRpdmUKKwkJICogdGltZSBhZGp1c3RtZW50IHdhcyBtb3JlIHRoYW4gYSBzZWNvbmQsIHNvIHRoZXJlJ3MKKwkJICogc29tZXRoaW5nIHNlcmlvdXNseSB3cm9uZyAqLworCQlCVUdfT04odXNlYyA+IExPTkdfTUFYKTsKKwl9CisKKworCXdoaWxlICh1c2VjID49IFVTRUNfUEVSX1NFQykgeworCQl1c2VjIC09IFVTRUNfUEVSX1NFQzsKIAkJKytzZWM7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCmluZGV4IGZmMjAwNjAuLjc3YjI4Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBzdGF0ZSBpbiAnYXNtLnMnLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNjYsNTcgKzY1LDQyIEBACiAjZWxzZQogI2RlZmluZSBSRk1UICIlMDhseCIKICNlbmRpZgorI2RlZmluZSBGRk1UICIlMDE2bGx4IgkvKiBmcHJlZ3MgYXJlIDY0LWJpdCBhbHdheXMgKi8KIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZGVmaW5lIFBSSU5UUkVHUyhsdmwscixmLGZtdCx4KQlcCisJcHJpbnRrKCIlcyVzJTAyZC0lMDJkICAiIGZtdCAiICIgZm10ICIgIiBmbXQgIiAiIGZtdCAiXG4iLAlcCisJCWx2bCwgZiwgKHgpLCAoeCszKSwgKHIpWyh4KSswXSwgKHIpWyh4KSsxXSwJCVwKKwkJKHIpWyh4KSsyXSwgKHIpWyh4KSszXSkKKworc3RhdGljIHZvaWQgcHJpbnRfZ3IoY2hhciAqbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpOwotCWNoYXIgYnVmWzEyOF0sICpwOwotCWNoYXIgKmxldmVsOwotCXVuc2lnbmVkIGxvbmcgY3IzMDsKLQl1bnNpZ25lZCBsb25nIGNyMzE7Ci0JLyogY2FybG9zIHNheXMgdGhhdCBnY2MgdW5kZXJzdGFuZHMgYmV0dGVyIG1lbW9yeSBpbiBhIHN0cnVjdCwKLQkgKiBhbmQgaXQgbWFrZXMgb3VyIGxpZmUgZWFzaWVyIHdpdGggZnByZWdzIC0tIFQtQm9uZSAqLwotCXN0cnVjdCB7IHUzMiBzd1syXTsgfSBzOwotCQotCWxldmVsID0gdXNlcl9tb2RlKHJlZ3MpID8gS0VSTl9ERUJVRyA6IEtFUk5fQ1JJVDsKKwljaGFyIGJ1Zls2NF07CiAKLQlwcmludGsoIiVzXG4iLCBsZXZlbCk7IC8qIGRvbid0IHdhbnQgdG8gaGF2ZSB0aGF0IHByZXR0eSByZWdpc3RlciBkdW1wIG1lc3NlZCB1cCAqLwotCisJcHJpbnRrKCIlc1xuIiwgbGV2ZWwpOwogCXByaW50aygiJXMgICAgIFlacnZXRVNUSExOWEJDVk1jYmNiY2JjYk9HRlJRUERJXG4iLCBsZXZlbCk7CiAJcHJpbnRiaW5hcnkoYnVmLCByZWdzLT5nclswXSwgMzIpOwogCXByaW50aygiJXNQU1c6ICVzICVzXG4iLCBsZXZlbCwgYnVmLCBwcmludF90YWludGVkKCkpOwogCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDQpIHsKLQkJaW50IGo7Ci0JCXAgPSBidWY7Ci0JCXAgKz0gc3ByaW50ZihwLCAiJXNyJTAyZC0lMDJkICIsIGxldmVsLCBpLCBpICsgMyk7Ci0JCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCXAgKz0gc3ByaW50ZihwLCAiICIgUkZNVCwgKGkraikgPT0gMCA/IDAgOiByZWdzLT5ncltpICsgal0pOwotCQl9Ci0JCXByaW50aygiJXNcbiIsIGJ1Zik7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSA0KQorCQlQUklOVFJFR1MobGV2ZWwsIHJlZ3MtPmdyLCAiciIsIFJGTVQsIGkpOworfQogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkgKz0gNCkgewotCQlpbnQgajsKLQkJcCA9IGJ1ZjsKLQkJcCArPSBzcHJpbnRmKHAsICIlc3NyJWQtJWQgICIsIGxldmVsLCBpLCBpICsgMyk7Ci0JCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCXAgKz0gc3ByaW50ZihwLCAiICIgUkZNVCwgcmVncy0+c3JbaSArIGpdKTsKLQkJfQotCQlwcmludGsoIiVzXG4iLCBidWYpOwotCX0KK3N0YXRpYyB2b2lkIHByaW50X2ZyKGNoYXIgKmxldmVsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKwljaGFyIGJ1Zls2NF07CisJc3RydWN0IHsgdTMyIHN3WzJdOyB9IHM7CiAKIAkvKiBGUiBhcmUgNjRiaXQgZXZlcnl3aGVyZS4gTmVlZCB0byB1c2UgYXNtIHRvIGdldCB0aGUgY29udGVudAogCSAqIG9mIGZwc3IvZnBlcjEsIGFuZCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b24ndCBoYXZlIGEgRlAgSWRlbnRpZnkKIAkgKiBpbiBvdXIgd2F5LCBvdGhlcndpc2Ugd2UncmUgc2NyZXdlZC4KIAkgKiBUaGUgZmxkZCBpcyB1c2VkIHRvIHJlc3RvcmUgdGhlIFQtYml0IGlmIHRoZXJlIHdhcyBvbmUsIGFzIHRoZQogCSAqIHN0b3JlIGNsZWFycyBpdCBhbnl3YXkuCi0JICogQlRXLCBQQTIuMCBib29rIHNheXMgInRob3Ugc2hhbGwgbm90IHVzZSBmc3R3IG9uIEZQU1IvRlBFUnMiLiAqLyAKLQlfX2FzbV9fICgKLQkJImZzdGQgJSVmcjAsMCglMSkJXG5cdCIKLQkJImZsZGQgMCglMSksJSVmcjAJXG5cdCIKLQkJOiAiPW0iIChzKSA6ICJyIiAoJnMpIDogIiVyMCIKLQkJKTsKKwkgKiBQQTIuMCBib29rIHNheXMgInRob3Ugc2hhbGwgbm90IHVzZSBmc3R3IG9uIEZQU1IvRlBFUnMiIC0gVC1Cb25lICovCisJYXNtIHZvbGF0aWxlICgiZnN0ZCAlJWZyMCwwKCUxKQlcblx0IgorCQkgICAgICAiZmxkZCAwKCUxKSwlJWZyMAlcblx0IgorCQkgICAgICA6ICI9bSIgKHMpIDogInIiICgmcykgOiAicjAiKTsKIAogCXByaW50aygiJXNcbiIsIGxldmVsKTsKIAlwcmludGsoIiVzICAgICAgVlpPVUlDdW51bmNxY3FjcWNxY3Fjcm11blREVlpPVUlcbiIsIGxldmVsKTsKQEAgLTEyNSwxNCArMTA5LDI1IEBACiAJcHJpbnRrKCIlc0ZQRVIxOiAlMDh4XG4iLCBsZXZlbCwgcy5zd1sxXSk7CiAKIAkvKiBoZXJlIHdlJ2xsIHByaW50IGZyMCBhZ2FpbiwgdGhvIGl0J2xsIGJlIG1lYW5pbmdsZXNzICovCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDQpIHsKLQkJaW50IGo7Ci0JCXAgPSBidWY7Ci0JCXAgKz0gc3ByaW50ZihwLCAiJXNmciUwMmQtJTAyZCAiLCBsZXZlbCwgaSwgaSArIDMpOwotCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJcCArPSBzcHJpbnRmKHAsICIgJTAxNmxseCIsIChpK2opID09IDAgPyAwIDogcmVncy0+ZnJbaStqXSk7Ci0JCXByaW50aygiJXNcbiIsIGJ1Zik7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSA0KQorCQlQUklOVFJFR1MobGV2ZWwsIHJlZ3MtPmZyLCAiZnIiLCBGRk1ULCBpKTsKK30KKwordm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisJY2hhciAqbGV2ZWw7CisJdW5zaWduZWQgbG9uZyBjcjMwLCBjcjMxOworCisJbGV2ZWwgPSB1c2VyX21vZGUocmVncykgPyBLRVJOX0RFQlVHIDogS0VSTl9DUklUOworCisJcHJpbnRfZ3IobGV2ZWwsIHJlZ3MpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkgKz0gNCkKKwkJUFJJTlRSRUdTKGxldmVsLCByZWdzLT5zciwgInNyIiwgUkZNVCwgaSk7CisKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCQlwcmludF9mcihsZXZlbCwgcmVncyk7CiAKIAljcjMwID0gbWZjdGwoMzApOwogCWNyMzEgPSBtZmN0bCgzMSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggZGUwYTFiMi4uYmQyMjMwZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bmFsaWduZWQuYwpAQCAtMjAsNyArMjAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQzLDYgKzQyLDggQEAKIAkiXHRsZGlsIEwlJSIgI2xibCAiLCAlJXIxXG4iCQkJXAogCSJcdGxkbyBSJSUiICNsYmwgIiglJXIxKSwgJSVyMVxuIgkJXAogCSJcdGJ2LG4gJSVyMCglJXIxKVxuIgorLyogSWYgeW91IHVzZSBGSVhVUF9CUkFOQ0gsIHRoZW4geW91IG11c3QgbGlzdCB0aGlzIGNsb2JiZXIgKi8KKyNkZWZpbmUgRklYVVBfQlJBTkNIX0NMT0JCRVIgInIxIgogCiAvKiAxMTExIDExMDAgMDAwMCAwMDAwIDAwMDEgMDAxMSAxMTAwIDAwMDAgKi8KICNkZWZpbmUgT1BDT0RFMShhLGIsYykJKChhKTw8MjZ8KGIpPDwxMnwoYyk8PDYpIApAQCAtMTU3LDcgKzE1OCw3IEBACiAiCS5wcmV2aW91c1xuIgogCTogIj1yIiAodmFsKSwgIj1yIiAocmV0KQogCTogIjAiICh2YWwpLCAiciIgKHNhZGRyKSwgInIiIChyZWdzLT5pc3IpCi0JOiAicjIwIiApOworCTogInIyMCIsIEZJWFVQX0JSQU5DSF9DTE9CQkVSICk7CiAKIAlEUFJJTlRGKCJ2YWwgPSAweCIgUkZNVCAiXG4iLCB2YWwpOwogCkBAIC0yMDIsNyArMjAzLDcgQEAKICIJLnByZXZpb3VzXG4iCiAJOiAiPXIiICh2YWwpLCAiPXIiIChyZXQpCiAJOiAiMCIgKHZhbCksICJyIiAoc2FkZHIpLCAiciIgKHJlZ3MtPmlzcikKLQk6ICJyMTkiLCAicjIwIiApOworCTogInIxOSIsICJyMjAiLCBGSVhVUF9CUkFOQ0hfQ0xPQkJFUiApOwogCiAJRFBSSU5URigidmFsID0gMHgiIFJGTVQgIlxuIiwgdmFsKTsKIApAQCAtMjUzLDcgKzI1NCw3IEBACiAiCS5wcmV2aW91c1xuIgogCTogIj1yIiAodmFsKSwgIj1yIiAocmV0KQogCTogIjAiICh2YWwpLCAiciIgKHNhZGRyKSwgInIiIChyZWdzLT5pc3IpCi0JOiAicjE5IiwgInIyMCIgKTsKKwk6ICJyMTkiLCAicjIwIiwgRklYVVBfQlJBTkNIX0NMT0JCRVIgKTsKICNlbHNlCiAgICAgewogCXVuc2lnbmVkIGxvbmcgdmFsaD0wLHZhbGw9MDsKQEAgLTI4Nyw3ICsyODgsNyBAQAogIgkucHJldmlvdXNcbiIKIAk6ICI9ciIgKHZhbGgpLCAiPXIiICh2YWxsKSwgIj1yIiAocmV0KQogCTogIjAiICh2YWxoKSwgIjEiICh2YWxsKSwgInIiIChzYWRkciksICJyIiAocmVncy0+aXNyKQotCTogInIxOSIsICJyMjAiICk7CisJOiAicjE5IiwgInIyMCIsIEZJWFVQX0JSQU5DSF9DTE9CQkVSICk7CiAJdmFsPSgoX191NjQpdmFsaDw8MzIpfChfX3U2NCl2YWxsOwogICAgIH0KICNlbmRpZgpAQCAtMzM1LDcgKzMzNiw3IEBACiAiCS5wcmV2aW91c1xuIgogCTogIj1yIiAocmV0KQogCTogInIiICh2YWwpLCAiciIgKHJlZ3MtPmlvciksICJyIiAocmVncy0+aXNyKQotCTogInIxOSIgKTsKKwk6ICJyMTkiLCBGSVhVUF9CUkFOQ0hfQ0xPQkJFUiApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM4OSw3ICszOTAsNyBAQAogIgkucHJldmlvdXNcbiIKIAk6ICI9ciIgKHJldCkKIAk6ICJyIiAodmFsKSwgInIiIChyZWdzLT5pb3IpLCAiciIgKHJlZ3MtPmlzcikKLQk6ICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAicjEiICk7CisJOiAicjE5IiwgInIyMCIsICJyMjEiLCAicjIyIiwgInIxIiwgRklYVVBfQlJBTkNIX0NMT0JCRVIgKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDUwLDcgKzQ1MSw3IEBACiAiCS5wcmV2aW91c1xuIgogCTogIj1yIiAocmV0KQogCTogInIiICh2YWwpLCAiciIgKHJlZ3MtPmlvciksICJyIiAocmVncy0+aXNyKQotCTogInIxOSIsICJyMjAiLCAicjIxIiwgInIyMiIsICJyMSIgKTsKKwk6ICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAicjEiLCBGSVhVUF9CUkFOQ0hfQ0xPQkJFUiApOwogI2Vsc2UKICAgICB7CiAJdW5zaWduZWQgbG9uZyB2YWxoPSh2YWw+PjMyKSx2YWxsPSh2YWwmMHhmZmZmZmZmZmwpOwpAQCAtNDk1LDcgKzQ5Niw3IEBACiAiCS5wcmV2aW91c1xuIgogCTogIj1yIiAocmV0KQogCTogInIiICh2YWxoKSwgInIiICh2YWxsKSwgInIiIChyZWdzLT5pb3IpLCAiciIgKHJlZ3MtPmlzcikKLQk6ICJyMTkiLCAicjIwIiwgInIyMSIsICJyMSIgKTsKKwk6ICJyMTkiLCAicjIwIiwgInIyMSIsICJyMSIsIEZJWFVQX0JSQU5DSF9DTE9CQkVSICk7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYwppbmRleCBjYzFjMWFmLi45MjBiZGJmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCkBAIC04LDcgKzgsNiBAQAogICogdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZyBoZXJlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDk0ZGNjMDNhLi45OTg5NDk1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjMsNyArMjMsNiBAQAogICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAvKiBuZWVkZWQgZm9yIHRoZSBwcm9jZXNzb3Igc3BlY2lmaWMgY2FjaGUgYWxpZ25tZW50IHNpemUgKi8JCiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9saWIvYml0b3BzLmMgYi9hcmNoL3BhcmlzYy9saWIvYml0b3BzLmMKaW5kZXggOTBmNDAwYi4uZjM1MjY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbGliL2JpdG9wcy5jCisrKyBiL2FyY2gvcGFyaXNjL2xpYi9iaXRvcHMuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAyMDAwIEdyYW50IEdydW5kbGVyIChncnVuZGxlckBjdXAuaHAuY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2xpYi9maXh1cC5TIGIvYXJjaC9wYXJpc2MvbGliL2ZpeHVwLlMKaW5kZXggZTA2NjFjMi4uZWNjZTNkMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbGliL2ZpeHVwLlMKKysrIGIvYXJjaC9wYXJpc2MvbGliL2ZpeHVwLlMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIAogICogRml4dXAgcm91dGluZXMgZm9yIGtlcm5lbCBleGNlcHRpb24gaGFuZGxpbmcuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibHkuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2xpYi9tZW1jcHkuYyBiL2FyY2gvcGFyaXNjL2xpYi9tZW1jcHkuYwppbmRleCBiNzA5ODAzLi41NTc1ZTQxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9saWIvbWVtY3B5LmMKKysrIGIvYXJjaC9wYXJpc2MvbGliL21lbWNweS5jCkBAIC01Myw3ICs1Myw2IEBACiAgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggNjMxNzEyNS4uZjJiOTZmMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMjgsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vcGRjX2NoYXNzaXMuaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKQEAgLTQxOCwxMSArNDE4LDEwIEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKQogewotCWV4dGVybiBjaGFyIF9fc3RhcnRfcm9kYXRhLCBfX2VuZF9yb2RhdGE7CiAJLyogcm9kYXRhIG1lbW9yeSB3YXMgYWxyZWFkeSBtYXBwZWQgd2l0aCBLRVJORUxfUk8gYWNjZXNzIHJpZ2h0cyBieQogICAgICAgICAgICBwYWdldGFibGVfaW5pdCgpIGFuZCBtYXBfcGFnZXMoKS4gTm8gbmVlZCB0byBkbyBhZGRpdGlvbmFsIHN0dWZmIGhlcmUgKi8KIAlwcmludGsgKEtFUk5fSU5GTyAiV3JpdGUgcHJvdGVjdGluZyB0aGUga2VybmVsIHJlYWQtb25seSBkYXRhOiAlbHVrXG4iLAotCQkodW5zaWduZWQgbG9uZykoJl9fZW5kX3JvZGF0YSAtICZfX3N0YXJ0X3JvZGF0YSkgPj4gMTApOworCQkodW5zaWduZWQgbG9uZykoX19lbmRfcm9kYXRhIC0gX19zdGFydF9yb2RhdGEpID4+IDEwKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IGU5MjJhODguLjI2NDNkYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zMCw2ICszMCwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIElSUV9QRVJfQ1BVCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSwogCWJvb2wKIApAQCAtMzM2LDcgKzM0MCw3IEBACiAKIGNvbmZpZyBFTUJFRERFRDZ4eAogCWJvb2wgIkVtYmVkZGVkIDZ4eC83eHgvN3h4eC1iYXNlZCBib2FyZCIKLQlkZXBlbmRzIG9uIFBQQzMyICYmIEJST0tFTgorCWRlcGVuZHMgb24gUFBDMzIgJiYgKEJST0tFTnx8QlJPS0VOX09OX1NNUCkKIAogY29uZmlnIEFQVVMKIAlib29sICJBbWlnYS1BUFVTIgpAQCAtNDEzLDEyICs0MTcsMTcgQEAKIAlkZWZhdWx0IG4KIAogY29uZmlnIFBQQ19JQk1fQ0VMTF9CTEFERQotCWJvb2wgIiAgSUJNIENlbGwgQmxhZGUiCisJYm9vbCAiSUJNIENlbGwgQmxhZGUiCiAJZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAogCXNlbGVjdCBQUENfQ0VMTF9OQVRJVkUKIAlzZWxlY3QgUFBDX1JUQVMKIAlzZWxlY3QgTU1JT19OVlJBTQogCXNlbGVjdCBQUENfVURCR18xNjU1MAorCXNlbGVjdCBVREJHX1JUQVNfQ09OU09MRQorCitjb25maWcgVURCR19SVEFTX0NPTlNPTEUKKwlib29sCisJZGVmYXVsdCBuCiAKIGNvbmZpZyBYSUNTCiAJZGVwZW5kcyBvbiBQUENfUFNFUklFUwpAQCAtNDMxLDcgKzQ0MCw4IEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBNUElDCi0JZGVwZW5kcyBvbiBQUENfUFNFUklFUyB8fCBQUENfUE1BQyB8fCBQUENfTUFQTEUgfHwgUFBDX0NIUlAKKwlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTIHx8IFBQQ19QTUFDIHx8IFBQQ19NQVBMRSB8fCBQUENfQ0hSUCBcCisJCQkgICAgICAgfHwgTVBDNzQ0OEhQQzIKIAlib29sCiAJZGVmYXVsdCB5CiAKQEAgLTU1Nyw2ICs1NjcsMTMgQEAKIAkgIC9wcm9jL2NwdWluZm8uCiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgorCitjb25maWcgUFBDX1RPREMKKwlkZXBlbmRzIG9uIEVNQkVEREVENnh4CisJYm9vbCAiR2VuZXJpYyBUaW1lLW9mLWRheSBDbG9jayAoVE9EQykgc3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbWFueSBUT0RDL1JUQyBjaGlwcy4KKwogZW5kbWVudQogCiBzb3VyY2UgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCkBAIC02MTgsMTYgKzYzNSwxOSBAQAogCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAorY29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCisJZGVmX2Jvb2wgeQorCiBjb25maWcgS0VYRUMKIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKIAkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290Ci0JICBidXQgaXQgaXMgaW5kZXBlZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CisJICBidXQgaXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5c3RlbSBmaXJtd2FyZS4gICBBbmQgbGlrZSBhIHJlYm9vdAogCSAgeW91IGNhbiBzdGFydCBhbnkga2VybmVsIHdpdGggaXQsIG5vdCBqdXN0IExpbnV4LgogCi0JICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBzaW1pbGlhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KKwkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsYXJpdHkgdG8gdGhlIGV4ZWMgc3lzdGVtIGNhbGwuCiAKIAkgIEl0IGlzIGFuIG9uZ29pbmcgcHJvY2VzcyB0byBiZSBjZXJ0YWluIHRoZSBoYXJkd2FyZSBpbiBhIG1hY2hpbmUKIAkgIGlzIHByb3Blcmx5IHNodXRkb3duLCBzbyBkbyBub3QgYmUgc3VycHJpc2VkIGlmIHRoaXMgY29kZSBkb2VzIG5vdApAQCAtNzk0LDcgKzgxNCw2IEBACiAKIGNvbmZpZyBQUENfSTgyNTkKIAlib29sCi0JZGVmYXVsdCB5IGlmIE1QQzg2NDFfSFBDTgogCWRlZmF1bHQgbgogCiBjb25maWcgUFBDX0lORElSRUNUX1BDSQpAQCAtODE3LDcgKzgzNiw4IEBACiAJYm9vbAogCiBjb25maWcgUENJCi0JYm9vbCAiUENJIHN1cHBvcnQiIGlmIDQweCB8fCBDUE0yIHx8IFBQQ184M3h4IHx8IFBQQ184NXh4IHx8IFBQQ184Nnh4IHx8IFBQQ19NUEM1Mnh4IHx8IChFTUJFRERFRCAmJiBQUENfSVNFUklFUykKKwlib29sICJQQ0kgc3VwcG9ydCIgaWYgNDB4IHx8IENQTTIgfHwgUFBDXzgzeHggfHwgUFBDXzg1eHggfHwgUFBDX01QQzUyeHggfHwgKEVNQkVEREVEICYmIFBQQ19JU0VSSUVTKSBcCisJCQkJICB8fCBNUEM3NDQ4SFBDMgogCWRlZmF1bHQgeSBpZiAhNDB4ICYmICFDUE0yICYmICE4eHggJiYgIUFQVVMgJiYgIVBQQ184M3h4ICYmICFQUENfODV4eCAmJiAhUFBDXzg2eHgKIAlkZWZhdWx0IFBDSV9QRVJNRURJQSBpZiAhNHh4ICYmICFDUE0yICYmICE4eHggJiYgQVBVUwogCWRlZmF1bHQgUENJX1FTUEFOIGlmICE0eHggJiYgIUNQTTIgJiYgOHh4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IGM2OTAwNmEuLmUyOWVmNzdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwpAQCAtMTM0LDEyICsxMzQsMTkgQEAKIAloZWxwCiAJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgZWFybHkgZGVidWdnaW5nIGZvciBBcHBsZSBHNSBtYWNoaW5lcy4KIAotY29uZmlnIFBQQ19FQVJMWV9ERUJVR19SVEFTCitjb25maWcgUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwKIAlib29sICJSVEFTIFBhbmVsIgogCWRlcGVuZHMgb24gUFBDX1JUQVMKIAloZWxwCiAJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgZWFybHkgZGVidWdnaW5nIHZpYSB0aGUgUlRBUyBwYW5lbC4KIAorY29uZmlnIFBQQ19FQVJMWV9ERUJVR19SVEFTX0NPTlNPTEUKKwlib29sICJSVEFTIENvbnNvbGUiCisJZGVwZW5kcyBvbiBQUENfUlRBUworCXNlbGVjdCBVREJHX1JUQVNfQ09OU09MRQorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBlYXJseSBkZWJ1Z2dpbmcgdmlhIHRoZSBSVEFTIGNvbnNvbGUuCisKIGNvbmZpZyBQUENfRUFSTFlfREVCVUdfTUFQTEUKIAlib29sICJNYXBsZSByZWFsIG1vZGUiCiAJZGVwZW5kcyBvbiBQUENfTUFQTEUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcKaW5kZXggYjhiOGQ0Ni4uZTAyOGEyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKLSMgTW9uIEp1biAxOSAxNzoyMzowMyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmM2CisjIFRodSBKdW4gMjIgMTU6Mjg6MzYgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC0xMDYzLDcgKzEwNjMsOCBAQAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdHRVI9eQotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CitDT05GSUdfWE1PTj15CitDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19JUlFTVEFDS1M9eQogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhMDEwYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKQEAgLTAsMCArMSwxMzc4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKKyMgTW9uIEp1bCAgMyAxMjowODo0MSAyMDA2CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ181Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz00CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKKyMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQVVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CitDT05GSUdfUFBDX1JUQVM9eQorIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19SVEFTX1BST0M9eQorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzEwNj15CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9CS0w9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX0lTQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSTgyNTk9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKK0NPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KKyMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCisjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9GRD15CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CitDT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CitDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKKyMgQ09ORklHX0lERURNQV9PTkxZRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKK0NPTkZJR19JREVETUFfQVVUTz15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV83MDAwRkFTU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCitDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9VMTRfMzRGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKKyMKKyMgQ09ORklHX0NEX05PX0lERVNDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVF9UVUxJUD15CisjIENPTkZJR19ERTIxMDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTElQIGlzIG5vdCBzZXQKK0NPTkZJR19ERTRYNT15CisjIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAorIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CitDT05GSUdfUENORVQzMj15CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfODEzOUNQPXkKK0NPTkZJR184MTM5VE9PPXkKKyMgQ09ORklHXzgxMzlUT09fUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fODEyOSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19WSUFfUkhJTkU9eQorIyBDT05GSUdfVklBX1JISU5FX01NSU8gaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX01WNjQzWFhfRVRIPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIXzAgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEhfMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSF8yIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9QQ1NQS1IgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1VJTlBVVD15CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX05WUkFNPXkKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9NQUNNT0RFUz15CitDT05GSUdfRkJfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9PRj15CisjIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQVRST1g9eQorQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU09eQorQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15CitDT05GSUdfRkJfTUFUUk9YX0c9eQorIyBDT05GSUdfRkJfTUFUUk9YX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVRZPXkKK0NPTkZJR19GQl9BVFlfQ1Q9eQorIyBDT05GSUdfRkJfQVRZX0dFTkVSSUNfTENEIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BVFlfR1g9eQorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKK0NPTkZJR19GQl8zREZYPXkKKyMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD1tCisjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIEVuZ2luZSBzdXBwb3J0CisjCisjIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBETUEgQ2xpZW50cworIworCisjCisjIERNQSBEZXZpY2VzCisjCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KKworIworIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorQ09ORklHX1hNT049eQorQ09ORklHX1hNT05fREVGQVVMVD15CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTUwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTIzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmM0CisjIFNhdCBNYXkgMjcgMTg6NDU6NTUgMjAwNgorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR184eHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNnh4PXkKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ2eHg9eQorIyBDT05GSUdfQVBVUyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBVEFOQSBpcyBub3Qgc2V0CisjIENPTkZJR19XSUxMT1cgaXMgbm90IHNldAorIyBDT05GSUdfQ1BDSTY5MCBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlBNQzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVTVE5VVCBpcyBub3Qgc2V0CisjIENPTkZJR19TUFJVQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSERQVSBpcyBub3Qgc2V0CisjIENPTkZJR19FVjY0MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPUEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WTUU1MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSUE1DNzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSUE1DODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTkRQT0lOVCBpcyBub3Qgc2V0CitDT05GSUdfTVBDNzQ0OEhQQzI9eQorIyBDT05GSUdfUkFEU1RPTkVfUFBDN0QgaXMgbm90IHNldAorIyBDT05GSUdfUEFMNCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfRVNUODI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCUzgyNjAgaXMgbm90IHNldAorIyBDT05GSUdfUlBYODI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEUzgyNzIgaXMgbm90IHNldAorIyBDT05GSUdfUFEyRkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSVRFNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVjY0MzYwIGlzIG5vdCBzZXQKK0NPTkZJR19UU0kxMDhfQlJJREdFPXkKKyMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FUQT15CisjIENPTkZJR19TQ1NJX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FUQV9NVj15CisjIENPTkZJR19TQ1NJX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKK0NPTkZJR184MTM5VE9PPXkKKyMgQ09ORklHXzgxMzlUT09fUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fODEyOSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfVFNJMTA4X0VUSD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJkOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMzNiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3CisjIEZyaSBKdW4gMzAgMTc6NTM6MjUgMjAwNgorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHX0NMQVNTSUMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzgzeHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR184eHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNnh4PXkKK0NPTkZJR184M3h4PXkKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfRlVURVg9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19QUENfR0VONTUwPXkKKyMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19NUEM4MzR4X1NZUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODM0eF9JVFg9eQorQ09ORklHX01QQzgzNHg9eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAwODAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgxMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorIyBDT05GSUdfQkxLX0RFVl9JREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRF9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FUQT15CisjIENPTkZJR19TQ1NJX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NBVEFfU0lMPXkKKyMgQ09ORklHX1NDU0lfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPXkKK0NPTkZJR19NRF9MSU5FQVI9eQorQ09ORklHX01EX1JBSUQwPXkKK0NPTkZJR19NRF9SQUlEMT15CisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQ0lDQURBX1BIWT15CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR184M3h4X1dEVD15CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorQ09ORklHX1NQSV9NUEM4M3h4PXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj15CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKK0NPTkZJR19VU0JfR0FER0VUX05FVDIyODA9eQorQ09ORklHX1VTQl9ORVQyMjgwPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCitDT05GSUdfTkVUX0RNQT15CisKKyMKKyMgRE1BIERldmljZXMKKyMKK0NPTkZJR19JTlRFTF9JT0FURE1BPXkKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKKworIworIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UWF9URVhUPXkKK0NPTkZJR19TRVJJQUxfVEVYVF9ERUJVRz15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggODAzODU4ZS4uODE0ZjI0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC01MCw3ICs1MCw4IEBACiBleHRyYS0kKENPTkZJR184eHgpCQk6PSBoZWFkXzh4eC5vCiBleHRyYS15CQkJCSs9IHZtbGludXgubGRzCiAKLW9iai15CQkJCSs9IHRpbWUubyBwcm9tLm8gdHJhcHMubyBzZXR1cC1jb21tb24ubyB1ZGJnLm8KK29iai15CQkJCSs9IHRpbWUubyBwcm9tLm8gdHJhcHMubyBzZXR1cC1jb21tb24ubyBcCisJCQkJICAgdWRiZy5vIG1pc2Mubwogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vIG1pc2NfMzIubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gbWlzY182NC5vIGRtYV82NC5vIGlvbW11Lm8KIG9iai0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkJKz0gcHJvbV9pbml0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmZjI5NDA1Li43ZWU4NDk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9iaW5mbXRfZWxmMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYmluZm10X2VsZjMyLmMKaW5kZXggOGFkNmIwZi4uNWNiNTg3NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9iaW5mbXRfZWxmMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2JpbmZtdF9lbGYzMi5jCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKaW5kZXggNjIyM2QzOS4uZjRlNWUxNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKQEAgLTMsNyArMyw2IEBACiAgKgogICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTEyLDcgKzExMSw3IEBACiAJbG9naWNhbERpc3BsYXlCYXNlID0gKHVuc2lnbmVkIGNoYXIgKilhZGRyZXNzOwogCWRpc3BEZXZpY2VCYXNlID0gKHVuc2lnbmVkIGNoYXIgKilhZGRyZXNzOwogCWRpc3BEZXZpY2VSb3dCeXRlcyA9IHBpdGNoOwotCWRpc3BEZXZpY2VEZXB0aCA9IGRlcHRoOworCWRpc3BEZXZpY2VEZXB0aCA9IGRlcHRoID09IDE1ID8gMTYgOiBkZXB0aDsKIAlkaXNwRGV2aWNlUmVjdFswXSA9IGRpc3BEZXZpY2VSZWN0WzFdID0gMDsKIAlkaXNwRGV2aWNlUmVjdFsyXSA9IHdpZHRoOwogCWRpc3BEZXZpY2VSZWN0WzNdID0gaGVpZ2h0OwpAQCAtMTYxLDIwICsxNjAsMjggQEAKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAwOwogCXUzMiAqcHJvcDsKIAotCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAid2lkdGgiLCBOVUxMKTsKKwlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImxpbnV4LGJvb3R4LXdpZHRoIiwgTlVMTCk7CisJaWYgKHByb3AgPT0gTlVMTCkKKwkJcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJ3aWR0aCIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCXdpZHRoID0gKnByb3A7Ci0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJoZWlnaHQiLCBOVUxMKTsKKwlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImxpbnV4LGJvb3R4LWhlaWdodCIsIE5VTEwpOworCWlmIChwcm9wID09IE5VTEwpCisJCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiaGVpZ2h0IiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaGVpZ2h0ID0gKnByb3A7Ci0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJkZXB0aCIsIE5VTEwpOworCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtZGVwdGgiLCBOVUxMKTsKKwlpZiAocHJvcCA9PSBOVUxMKQorCQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImRlcHRoIiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGVwdGggPSAqcHJvcDsKIAlwaXRjaCA9IHdpZHRoICogKChkZXB0aCArIDcpIC8gOCk7Ci0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJsaW5lYnl0ZXMiLCBOVUxMKTsKKwlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImxpbnV4LGJvb3R4LWxpbmVieXRlcyIsIE5VTEwpOworCWlmIChwcm9wID09IE5VTEwpCisJCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAibGluZWJ5dGVzIiwgTlVMTCk7CiAJaWYgKHByb3ApCiAJCXBpdGNoID0gKnByb3A7CiAJaWYgKHBpdGNoID09IDEpCkBAIC0xOTUsNyArMjAyLDcgQEAKIAlnX21heF9sb2NfWSA9IGhlaWdodCAvIDE2OwogCWRpc3BEZXZpY2VCYXNlID0gKHVuc2lnbmVkIGNoYXIgKilhZGRyZXNzOwogCWRpc3BEZXZpY2VSb3dCeXRlcyA9IHBpdGNoOwotCWRpc3BEZXZpY2VEZXB0aCA9IGRlcHRoOworCWRpc3BEZXZpY2VEZXB0aCA9IGRlcHRoID09IDE1ID8gMTYgOiBkZXB0aDsKIAlkaXNwRGV2aWNlUmVjdFswXSA9IGRpc3BEZXZpY2VSZWN0WzFdID0gMDsKIAlkaXNwRGV2aWNlUmVjdFsyXSA9IHdpZHRoOwogCWRpc3BEZXZpY2VSZWN0WzNdID0gaGVpZ2h0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwppbmRleCAzNjUzODFmLi44YjRhNGVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwppbmRleCAyNzE0MTgzLi5mNjlhZjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgpAQCAtMTI1LDcgKzEyNCwxMiBAQAogCWNtcHdpCXIwLDB4NDQKIAlibmUJMmYKIAotMToJLyogU2F2ZSBISUQwLDEsNCBhbmQgNSAqLworMToJLyogc2tpcCBpZiBub3QgcnVubmluZyBpbiBIViBtb2RlICovCisJbWZtc3IJcjAKKwlybGRpY2wuCXIwLHIwLDQsNjMKKwliZXEJMmYKKworCS8qIFNhdmUgSElEMCwxLDQgYW5kIDUgKi8KIAltZnNwcglyMyxTUFJOX0hJRDAKIAlzdGQJcjMsQ1NfSElEMChyNSkKIAltZnNwcglyMyxTUFJOX0hJRDEKQEAgLTE1OSw3ICsxNjMsMTIgQEAKIAljbXB3aQlyMCwweDQ0CiAJYm5lbHIKIAotMToJLyogQmVmb3JlIGFjY2Vzc2luZyBtZW1vcnksIHdlIG1ha2Ugc3VyZSBybV9jaSBpcyBjbGVhciAqLworMToJLyogc2tpcCBpZiBub3QgcnVubmluZyBpbiBIViBtb2RlICovCisJbWZtc3IJcjAKKwlybGRpY2wuCXIwLHIwLDQsNjMKKwliZXFscgorCisJLyogQmVmb3JlIGFjY2Vzc2luZyBtZW1vcnksIHdlIG1ha2Ugc3VyZSBybV9jaSBpcyBjbGVhciAqLwogCWxpCXIwLDAKIAltZnNwcglyMyxTUFJOX0hJRDQKIAlybGRpbWkJcjMscjAsNDAsMjMJLyogY2xlYXIgYml0IDIzIChybV9jaSkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAxYzExNDg4Li4yNzJlNDM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CkBAIC03MjIsMTggKzcyMSw2IEBACiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NDUwIiwKIAl9LAotICAgICAgICB7ICAgICAgIC8qIDg2NDEgKi8KLSAgICAgICAgICAgICAgIC5wdnJfbWFzayAgICAgICAgICAgICAgID0gMHhmZmZmZmZmZiwKLSAgICAgICAgICAgICAgIC5wdnJfdmFsdWUgICAgICAgICAgICAgID0gMHg4MDA0MDAxMCwKLSAgICAgICAgICAgICAgIC5jcHVfbmFtZSAgICAgICAgICAgICAgID0gIjg2NDEiLAotICAgICAgICAgICAgICAgLmNwdV9mZWF0dXJlcyAgICAgICAgICAgPSBDUFVfRlRSU183NDQ3QSwKLSAgICAgICAgICAgICAgIC5jcHVfdXNlcl9mZWF0dXJlcyAgICAgID0gQ09NTU9OX1VTRVIgfCBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotICAgICAgICAgICAgICAgLmljYWNoZV9ic2l6ZSAgICAgICAgICAgPSAzMiwKLSAgICAgICAgICAgICAgIC5kY2FjaGVfYnNpemUgICAgICAgICAgID0gMzIsCi0gICAgICAgICAgICAgICAubnVtX3BtY3MgICAgICAgICAgICAgICA9IDYsCi0gICAgICAgICAgICAgICAuY3B1X3NldHVwICAgICAgICAgICAgICA9IF9fc2V0dXBfY3B1Xzc0NXgKLSAgICAgICAgfSwKLQogCXsJLyogODJ4eCAoODI0MCwgODI0NSwgODI2MCBhcmUgYWxsIDYwM2UgY29yZXMpICovCiAJCS5wdnJfbWFzawkJPSAweDdmZmYwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDA4MTAwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKaW5kZXggZTI1M2E0NS4uMzU4Y2VjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwpAQCAtMjQsOSArMjQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9rZHVtcC5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KQEAgLTQxLDYgKzQzLDcgQEAKIAogLyogVGhpcyBrZWVwcyBhIHRyYWNrIG9mIHdoaWNoIG9uZSBpcyBjcmFzaGluZyBjcHUuICovCiBpbnQgY3Jhc2hpbmdfY3B1ID0gLTE7CitzdGF0aWMgY3B1bWFza190IGNwdXNfaW5fY3Jhc2ggPSBDUFVfTUFTS19OT05FOwogCiBzdGF0aWMgdTMyICphcHBlbmRfZWxmX25vdGUodTMyICpidWYsIGNoYXIgKm5hbWUsIHVuc2lnbmVkIHR5cGUsIHZvaWQgKmRhdGEsCiAJCQkJCQkJICAgICAgIHNpemVfdCBkYXRhX2xlbikKQEAgLTk4LDM0ICsxMDEsNjYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBhdG9taWNfdCB3YWl0aW5nX2Zvcl9jcmFzaF9pcGk7CitzdGF0aWMgYXRvbWljX3QgZW50ZXJfb25fc29mdF9yZXNldCA9IEFUT01JQ19JTklUKDApOwogCiB2b2lkIGNyYXNoX2lwaV9jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JaWYgKGNwdSA9PSBjcmFzaGluZ19jcHUpCi0JCXJldHVybjsKLQogCWlmICghY3B1X29ubGluZShjcHUpKQogCQlyZXR1cm47CiAKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1c19pbl9jcmFzaCkpCisJCWNyYXNoX3NhdmVfdGhpc19jcHUocmVncywgY3B1KTsKKwljcHVfc2V0KGNwdSwgY3B1c19pbl9jcmFzaCk7CisKKwkvKgorCSAqIEVudGVyZWQgdmlhIHNvZnQtcmVzZXQgLSBjb3VsZCBiZSB0aGUga2R1bXAKKwkgKiBwcm9jZXNzIGlzIGludm9rZWQgdXNpbmcgc29mdC1yZXNldCBvciB1c2VyIGFjdGl2YXRlZAorCSAqIGl0IGlmIHNvbWUgQ1BVIGRpZCBub3QgcmVzcG9uZCB0byBhbiBJUEkuCisJICogRm9yIHNvZnQtcmVzZXQsIHRoZSBzZWNvbmRhcnkgQ1BVIGNhbiBlbnRlciB0aGlzIGZ1bmMKKwkgKiB0d2ljZS4gMSAtIHVzaW5nIElQSSwgYW5kIDIuIHNvZnQtcmVzZXQuCisJICogVGVsbCB0aGUga2V4ZWMgQ1BVIHRoYXQgZW50ZXJlZCB2aWEgc29mdC1yZXNldCBhbmQgcmVhZHkKKwkgKiB0byBnbyBkb3duLgorCSAqLworCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVzX2luX3NyKSkgeworCQljcHVfY2xlYXIoY3B1LCBjcHVzX2luX3NyKTsKKwkJYXRvbWljX2luYygmZW50ZXJfb25fc29mdF9yZXNldCk7CisJfQorCisJLyoKKwkgKiBTdGFydGluZyB0aGUga2R1bXAgYm9vdC4KKwkgKiBUaGlzIGJhcnJpZXIgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBDUFVzIGFyZSBzdG9wcGVkLgorCSAqIElmIG5vdCwgc29mdC1yZXNldCB3aWxsIGJlIGludm9rZWQgdG8gYnJpbmcgb3RoZXIgQ1BVcy4KKwkgKi8KKwl3aGlsZSAoIWNwdV9pc3NldChjcmFzaGluZ19jcHUsIGNwdXNfaW5fY3Jhc2gpKQorCQljcHVfcmVsYXgoKTsKKwogCWlmIChwcGNfbWQua2V4ZWNfY3B1X2Rvd24pCiAJCXBwY19tZC5rZXhlY19jcHVfZG93bigxLCAxKTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQljcmFzaF9zYXZlX3RoaXNfY3B1KHJlZ3MsIGNwdSk7Ci0JYXRvbWljX2RlYygmd2FpdGluZ19mb3JfY3Jhc2hfaXBpKTsKIAlrZXhlY19zbXBfd2FpdCgpOwogCS8qIE5PVFJFQUNIRUQgKi8KIH0KIAotc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKHZvaWQpCisvKgorICogV2FpdCB1bnRpbCBhbGwgQ1BVcyBhcmUgZW50ZXJlZCB2aWEgc29mdC1yZXNldC4KKyAqLworc3RhdGljIHZvaWQgY3Jhc2hfc29mdF9yZXNldF9jaGVjayhpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsvKiBFeGNsdWRpbmcgdGhlIHBhbmljIGNwdSAqLworCisJY3B1X2NsZWFyKGNwdSwgY3B1c19pbl9zcik7CisJd2hpbGUgKGF0b21pY19yZWFkKCZlbnRlcl9vbl9zb2Z0X3Jlc2V0KSAhPSBuY3B1cykKKwkJY3B1X3JlbGF4KCk7Cit9CisKKworc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKGludCBjcHUpCiB7CiAJdW5zaWduZWQgaW50IG1zZWNzOwogCi0JYXRvbWljX3NldCgmd2FpdGluZ19mb3JfY3Jhc2hfaXBpLCBudW1fb25saW5lX2NwdXMoKSAtIDEpOworCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsvKiBFeGNsdWRpbmcgdGhlIHBhbmljIGNwdSAqLwogCiAJY3Jhc2hfc2VuZF9pcGkoY3Jhc2hfaXBpX2NhbGxiYWNrKTsKIAlzbXBfd21iKCk7CkBAIC0xMzMsMTQgKzE2OCwxMyBAQAogCS8qCiAJICogRklYTUU6IFVudGlsIHdlIHdpbGwgaGF2ZSB0aGUgd2F5IHRvIHN0b3Agb3RoZXIgQ1BVU3MgcmVsaWFiYWxseSwKIAkgKiB0aGUgY3Jhc2ggQ1BVIHdpbGwgc2VuZCBhbiBJUEkgYW5kIHdhaXQgZm9yIG90aGVyIENQVXMgdG8KLQkgKiByZXNwb25kLiBJZiBub3QsIHByb2NlZWQgdGhlIGtleGVjIGJvb3QgZXZlbiB0aG91Z2ggd2UgZmFpbGVkIHRvCi0JICogY2FwdHVyZSBvdGhlciBDUFUgc3RhdGVzLgorCSAqIHJlc3BvbmQuCiAJICogRGVsYXkgb2YgYXQgbGVhc3QgMTAgc2Vjb25kcy4KIAkgKi8KLQlwcmludGsoS0VSTl9BTEVSVCAiU2VuZGluZyBJUEkgdG8gb3RoZXIgY3B1cy4uLlxuIik7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlNlbmRpbmcgSVBJIHRvIG90aGVyIGNwdXMuLi5cbiIpOwogCW1zZWNzID0gMTAwMDA7Ci0Jd2hpbGUgKChhdG9taWNfcmVhZCgmd2FpdGluZ19mb3JfY3Jhc2hfaXBpKSA+IDApICYmICgtLW1zZWNzID4gMCkpIHsKLQkJYmFycmllcigpOworCXdoaWxlICgoY3B1c193ZWlnaHQoY3B1c19pbl9jcmFzaCkgPCBuY3B1cykgJiYgKC0tbXNlY3MgPiAwKSkgeworCQljcHVfcmVsYXgoKTsKIAkJbWRlbGF5KDEpOwogCX0KIApAQCAtMTQ5LDE4ICsxODMsNzEgQEAKIAkvKgogCSAqIEZJWE1FOiBJbiBjYXNlIGlmIHdlIGRvIG5vdCBnZXQgYWxsIENQVXMsIG9uZSBwb3NzaWJpbGl0eTogYXNrIHRoZQogCSAqIHVzZXIgdG8gZG8gc29mdCByZXNldCBzdWNoIHRoYXQgd2UgZ2V0IGFsbC4KLQkgKiBJUEkgaGFuZGxlciBpcyBhbHJlYWR5IHNldCBieSB0aGUgcGFuaWMgY3B1IGluaXRpYWxseS4gVGhlcmVmb3JlLAotCSAqIGFsbCBjcHVzIGNvdWxkIGludm9rZSB0aGlzIGhhbmRsZXIgZnJvbSBkaWUoKSBhbmQgdGhlIHBhbmljIENQVQotCSAqIHdpbGwgY2FsbCBtYWNoaW5lX2tleGVjKCkgZGlyZWN0bHkgZnJvbSB0aGlzIGhhbmRsZXIgdG8gZG8KLQkgKiBrZXhlYyBib290LgorCSAqIFNvZnQtcmVzZXQgd2lsbCBiZSB1c2VkIHVudGlsIGJldHRlciBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQuCiAJICovCi0JaWYgKGF0b21pY19yZWFkKCZ3YWl0aW5nX2Zvcl9jcmFzaF9pcGkpKQotCQlwcmludGsoS0VSTl9BTEVSVCAiZG9uZSB3YWl0aW5nOiAlZCBjcHVzIG5vdCByZXNwb25kaW5nXG4iLAotCQkJYXRvbWljX3JlYWQoJndhaXRpbmdfZm9yX2NyYXNoX2lwaSkpOworCWlmIChjcHVzX3dlaWdodChjcHVzX2luX2NyYXNoKSA8IG5jcHVzKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJkb25lIHdhaXRpbmc6ICVkIGNwdShzKSBub3QgcmVzcG9uZGluZ1xuIiwKKwkJCW5jcHVzIC0gY3B1c193ZWlnaHQoY3B1c19pbl9jcmFzaCkpOworCQlwcmludGsoS0VSTl9FTUVSRyAiQWN0aXZhdGUgc29mdC1yZXNldCB0byBzdG9wIG90aGVyIGNwdShzKVxuIik7CisJCWNwdXNfaW5fc3IgPSBDUFVfTUFTS19OT05FOworCQlhdG9taWNfc2V0KCZlbnRlcl9vbl9zb2Z0X3Jlc2V0LCAwKTsKKwkJd2hpbGUgKGNwdXNfd2VpZ2h0KGNwdXNfaW5fY3Jhc2gpIDwgbmNwdXMpCisJCQljcHVfcmVsYXgoKTsKKwl9CisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIENQVXMgYXJlIGVudGVyZWQgdmlhIHNvZnQtcmVzZXQgaWYgdGhlIGtkdW1wIGlzCisJICogaW52b2tlZCB1c2luZyBzb2Z0LXJlc2V0LgorCSAqLworCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVzX2luX3NyKSkKKwkJY3Jhc2hfc29mdF9yZXNldF9jaGVjayhjcHUpOwogCS8qIExlYXZlIHRoZSBJUEkgY2FsbGJhY2sgc2V0ICovCiB9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHNlY29uZGFyeSBjcHVzIG9yIGJ5IGtleGVjIGNwdQorICogaWYgc29mdC1yZXNldCBpcyBhY3RpdmF0ZWQgdG8gc3RvcCBzb21lIENQVXMuCisgKi8KK3ZvaWQgY3Jhc2hfa2V4ZWNfc2Vjb25kYXJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbXNlY3MgPSA1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCS8qIFdhaXQgNW1zIGlmIHRoZSBrZXhlYyBDUFUgaXMgbm90IGVudGVyZWQgeWV0LiAqLworCXdoaWxlIChjcmFzaGluZ19jcHUgPCAwKSB7CisJCWlmICgtLW1zZWNzIDwgMCkgeworCQkJLyoKKwkJCSAqIEVpdGhlciBrZHVtcCBpbWFnZSBpcyBub3QgbG9hZGVkIG9yCisJCQkgKiBrZHVtcCBwcm9jZXNzIGlzIG5vdCBzdGFydGVkIC0gUHJvYmFibHkgeG1vbgorCQkJICogZXhpdGVkIHVzaW5nICd4JyhleGl0IGFuZCByZWNvdmVyKSBvcgorCQkJICoga2V4ZWNfc2hvdWxkX2NyYXNoKCkgZmFpbGVkIGZvciBhbGwgcnVubmluZyB0YXNrcy4KKwkJCSAqLworCQkJY3B1X2NsZWFyKGNwdSwgY3B1c19pbl9zcik7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwkJbWRlbGF5KDEpOworCQljcHVfcmVsYXgoKTsKKwl9CisJaWYgKGNwdSA9PSBjcmFzaGluZ19jcHUpIHsKKwkJLyoKKwkJICogUGFuaWMgQ1BVIHdpbGwgZW50ZXIgdGhpcyBmdW5jIG9ubHkgdmlhIHNvZnQtcmVzZXQuCisJCSAqIFdhaXQgdW50aWwgYWxsIHNlY29uZGFyeSBDUFVzIGVudGVyZWQgYW5kCisJCSAqIHRoZW4gc3RhcnQga2V4ZWMgYm9vdC4KKwkJICovCisJCWNyYXNoX3NvZnRfcmVzZXRfY2hlY2soY3B1KTsKKwkJY3B1X3NldChjcmFzaGluZ19jcHUsIGNwdXNfaW5fY3Jhc2gpOworCQlpZiAocHBjX21kLmtleGVjX2NwdV9kb3duKQorCQkJcHBjX21kLmtleGVjX2NwdV9kb3duKDEsIDApOworCQltYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCX0KKwljcmFzaF9pcGlfY2FsbGJhY2socmVncyk7Cit9CisKICNlbHNlCi1zdGF0aWMgdm9pZCBjcmFzaF9rZXhlY19wcmVwYXJlX2NwdXModm9pZCkKK3N0YXRpYyB2b2lkIGNyYXNoX2tleGVjX3ByZXBhcmVfY3B1cyhpbnQgY3B1KQogewogCS8qCiAJICogbW92ZSB0aGUgc2Vjb25kYXJ5cyB0byB1cyBzbyB0aGF0IHdlIGNhbiBjb3B5CkBAIC0xNzEsNiArMjU4LDEwIEBACiAJc21wX3JlbGVhc2VfY3B1cygpOwogfQogCit2b2lkIGNyYXNoX2tleGVjX3NlY29uZGFyeShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljcHVzX2luX3NyID0gQ1BVX01BU0tfTk9ORTsKK30KICNlbmRpZgogCiB2b2lkIGRlZmF1bHRfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTE5MCwyMyArMjgxLDIzIEBACiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCWZvcl9lYWNoX2lycShpcnEpIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2NwKGlycSk7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCiAJCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykKLQkJCWRlc2MtPmhhbmRsZXItPmVuZChpcnEpOworCQkJZGVzYy0+Y2hpcC0+ZW5kKGlycSk7CiAKIAkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKLQkJCWRlc2MtPmhhbmRsZXItPmRpc2FibGUoaXJxKTsKKwkJCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKIAl9CiAKLQlpZiAocHBjX21kLmtleGVjX2NwdV9kb3duKQotCQlwcGNfbWQua2V4ZWNfY3B1X2Rvd24oMSwgMCk7Ci0KIAkvKgogCSAqIE1ha2UgYSBub3RlIG9mIGNyYXNoaW5nIGNwdS4gV2lsbCBiZSB1c2VkIGluIG1hY2hpbmVfa2V4ZWMKIAkgKiBzdWNoIHRoYXQgYW5vdGhlciBJUEkgd2lsbCBub3QgYmUgc2VudC4KIAkgKi8KIAljcmFzaGluZ19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKCk7CiAJY3Jhc2hfc2F2ZV90aGlzX2NwdShyZWdzLCBjcmFzaGluZ19jcHUpOworCWNyYXNoX2tleGVjX3ByZXBhcmVfY3B1cyhjcmFzaGluZ19jcHUpOworCWNwdV9zZXQoY3Jhc2hpbmdfY3B1LCBjcHVzX2luX2NyYXNoKTsKKwlpZiAocHBjX21kLmtleGVjX2NwdV9kb3duKQorCQlwcGNfbWQua2V4ZWNfY3B1X2Rvd24oMSwgMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggODg2NmZkMi4uYzAzZTgyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwpAQCAtMTksNyArMTksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggMjIxMDYyYy4uNTRkOWY1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtMTgsNyArMTgsNiBAQAogICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCAwYmZlOTA2Li4xNjc5YTcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCmluZGV4IDAxZjcxMjAuLjdlMmM5ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggYjI1YjI1OS4uZDg4ZTE4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwppbmRleCA0N2M3ZmExLi5hY2NiMzlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCkBAIC0yOCw3ICsyOCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNHh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNHh4LlMKaW5kZXggMjU5MGU5Ny4uYWRjN2Y4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzR4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80eHguUwpAQCAtMzEsNyArMzEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwppbmRleCA4MzFhY2JkLi5lMTZlYjJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwpAQCAtMjEsNyArMjEsNiBAQAogICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTg1LDM0ICs4NCw2IEBACiAJLyogQ2F0Y2ggYnJhbmNoIHRvIDAgaW4gcmVhbCBtb2RlICovCiAJdHJhcAogCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JLyoKLQkgKiBBdCBvZmZzZXQgMHgyMCwgdGhlcmUgaXMgYSBwb2ludGVyIHRvIGlTZXJpZXMgTFBBUiBkYXRhLgotCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGh5cGVydmlzb3IKLQkgKi8KLQkuID0gMHgyMAotCS5sbG9uZyBodlJlbGVhc2VEYXRhLUtFUk5FTEJBU0UKLQotCS8qCi0JICogQXQgb2Zmc2V0IDB4MjggYW5kIDB4MzAgYXJlIG9mZnNldHMgdG8gdGhlIG1zY2h1bmtzX21hcAotCSAqIGFycmF5ICh1c2VkIGJ5IHRoZSBpU2VyaWVzIExQQVIgZGVidWdnZXIgdG8gZG8gdHJhbnNsYXRpb24KLQkgKiBiZXR3ZWVuIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgYWJzb2x1dGUgYWRkcmVzc2VzKSBhbmQKLQkgKiB0byB0aGUgcGlkaGFzaCB0YWJsZSAoYWxzbyB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcikKLQkgKi8KLQkubGxvbmcgbXNjaHVua3NfbWFwLUtFUk5FTEJBU0UKLQkubGxvbmcgMAkvKiBwaWRoYXNoLUtFUk5FTEJBU0UgU0ZSWFhYICovCi0KLQkvKiBPZmZzZXQgMHgzOCAtIFBvaW50ZXIgdG8gc3RhcnQgb2YgZW1iZWRkZWQgU3lzdGVtLm1hcCAqLwotCS5nbG9ibAllbWJlZGRlZF9zeXNtYXBfc3RhcnQKLWVtYmVkZGVkX3N5c21hcF9zdGFydDoKLQkubGxvbmcJMAotCS8qIE9mZnNldCAweDQwIC0gUG9pbnRlciB0byBlbmQgb2YgZW1iZWRkZWQgU3lzdGVtLm1hcCAqLwotCS5nbG9ibAllbWJlZGRlZF9zeXNtYXBfZW5kCi1lbWJlZGRlZF9zeXNtYXBfZW5kOgotCS5sbG9uZwkwCi0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KLQogCS8qIFNlY29uZGFyeSBwcm9jZXNzb3JzIHNwaW4gb24gdGhpcyB2YWx1ZSB1bnRpbCBpdCBnb2VzIHRvIDEuICovCiAJLmdsb2JsICBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wCiBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOgpAQCAtMTI0LDYgKzk1LDE1IEBACiBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlOgogCS5sbG9uZwkweDAKIAorI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCS8qCisJICogQXQgb2Zmc2V0IDB4MjAsIHRoZXJlIGlzIGEgcG9pbnRlciB0byBpU2VyaWVzIExQQVIgZGF0YS4KKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBoeXBlcnZpc29yCisJICovCisJLiA9IDB4MjAKKwkubGxvbmcgaHZSZWxlYXNlRGF0YS1LRVJORUxCQVNFCisjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCisKIAkuID0gMHg2MAogLyoKICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIG9uIHBTZXJpZXMgdG8gaG9sZCBzZWNvbmRhcnkgcHJvY2Vzc29ycwpAQCAtMTYwMiw5ICsxNTgyLDYgQEAKIAkvKiBTZXR1cCBzb21lIGNyaXRpY2FsIDk3MCBTUFJzIGJlZm9yZSBzd2l0Y2hpbmcgTU1VIG9mZiAqLwogCWJsCS5fXzk3MF9jcHVfcHJlaW5pdAogCi0JLyogY3B1ICMgKi8KLQlsaQlyMjQsMAotCiAJLyogU3dpdGNoIG9mZiBNTVUgaWYgbm90IGFscmVhZHkgKi8KIAlMT0FEX1JFR19JTU1FRElBVEUocjQsIC5fX2FmdGVyX3Byb21fc3RhcnQgLSBLRVJORUxCQVNFKQogCWFkZAlyNCxyNCxyMzAKQEAgLTE2ODMsNiArMTY2MCw5IEBACiAJCQkJCS8qICAgaS5lLiB3aGVyZSB3ZSBhcmUgcnVubmluZwkgKi8KIAkJCQkJLyoJdGhlIHNvdXJjZSBhZGRyCQkgKi8KIAorCWNtcGRpCXI0LDAJCQkvKiBJbiBzb21lIGNhc2VzIHRoZSBsb2FkZXIgbWF5ICAqLworCWJlcQkuc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtIC8qIGhhdmUgYWxyZWFkeSBwdXQgdXMgYXQgemVybyAqLworCQkJCQkvKiBzbyB3ZSBjYW4gc2tpcCB0aGUgY29weS4gICAgICAqLwogCUxPQURfUkVHX0lNTUVESUFURShyNSxjb3B5X3RvX2hlcmUpIC8qICMgYnl0ZXMgb2YgbWVtb3J5IHRvIGNvcHkgKi8KIAlzdWIJcjUscjUscjI3CiAKQEAgLTE5NjIsMTQgKzE5NDIsNiBAQAogCWxpCXIzLDAKIAlibAkuZG9fY3B1X2Z0cl9maXh1cHMKIAotCUxPQURfUkVHX0lNTUVESUFURShyMjYsIGJvb3RfY3B1aWQpCi0JbHd6CXIyNiwwKHIyNikKLQotCUxPQURfUkVHX0lNTUVESUFURShyMjQsIHBhY2EpCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkgICovCi0JbXVsbGkJcjEzLHIyNixQQUNBX1NJWkUJLyogQ2FsY3VsYXRlIHZhZGRyIG9mIHJpZ2h0IHBhY2EgKi8KLQlhZGQJcjEzLHIxMyxyMjQJCS8qIGZvciB0aGlzIHByb2Nlc3Nvci4JCSAqLwotCW10c3ByCVNQUk5fU1BSRzMscjEzCi0KIAkvKiBwdHIgdG8gY3VycmVudCAqLwogCUxPQURfUkVHX0lNTUVESUFURShyNCwgaW5pdF90YXNrKQogCXN0ZAlyNCxQQUNBQ1VSUkVOVChyMTMpCkBAIC0xOTk1LDE3ICsxOTY3LDYgQEAKIAkvKiBOb3QgcmVhY2hlZCAqLwogCUJVR19PUENPREUKIAotLyogUHV0IHRoZSBwYWNhIHBvaW50ZXIgaW50byByMTMgYW5kIFNQUkczICovCi1fR0xPQkFMKHNldHVwX2Jvb3RfcGFjYSkKLQlMT0FEX1JFR19JTU1FRElBVEUocjMsIGJvb3RfY3B1aWQpCi0JbHd6CXIzLDAocjMpCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCBwYWNhKSAJLyogR2V0IGJhc2UgdmFkZHIgb2YgcGFjYSBhcnJheQkgKi8KLQltdWxsaQlyMyxyMyxQQUNBX1NJWkUJCS8qIENhbGN1bGF0ZSB2YWRkciBvZiByaWdodCBwYWNhICovCi0JYWRkCXIxMyxyMyxyNAkJLyogZm9yIHRoaXMgcHJvY2Vzc29yLgkJICovCi0JbXRzcHIJU1BSTl9TUFJHMyxyMTMKLQotCWJscgotCiAvKgogICogV2UgcHV0IGEgZmV3IHRoaW5ncyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQuCiAgKiBUaGlzIHN0dWZmIGdvZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnNzLCB3aGljaCBpcyBwYWdlLWFsaWduZWQuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggMjg5NDFmNS4uOTAxYmU0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUwpAQCAtMTksNyArMTksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IGRkODZiYmUuLjY2ODc3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTMwLDcgKzMwLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKaW5kZXggZTQ3ZDQwYS4uOTdkZGMwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCkBAIC0zMjMsMTMgKzMyMywxMSBAQAogCQkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MsIGNvbnN0IGNoYXIgKiBkZXZuYW1lLAogCQkJdm9pZCAqZGV2X2lkKQogewotCXVuc2lnbmVkIGludCBpcnEgPSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZyhpc3QpOworCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgaXN0LCAwKTsKIAkKIAlpZiAoaXJxID09IE5PX0lSUSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCi0JaXJxID0gaXJxX29mZnNldF91cChpcnEpOwotCQogCXJldHVybiByZXF1ZXN0X2lycShpcnEsIGhhbmRsZXIsCiAJCQkgICBpcnFfZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CiB9CkBAIC0zMzcsMTIgKzMzNSw5IEBACiAKIHZvaWQgaWJtZWJ1c19mcmVlX2lycShzdHJ1Y3QgaWJtZWJ1c19kZXYgKmRldiwgdTMyIGlzdCwgdm9pZCAqZGV2X2lkKQogewotCXVuc2lnbmVkIGludCBpcnEgPSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZyhpc3QpOworCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfZmluZF9tYXBwaW5nKE5VTEwsIGlzdCk7CiAJCi0JaXJxID0gaXJxX29mZnNldF91cChpcnEpOwogCWZyZWVfaXJxKGlycSwgZGV2X2lkKTsKLQkKLQlyZXR1cm47CiB9CiBFWFBPUlRfU1lNQk9MKGlibWVidXNfZnJlZV9pcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jCmluZGV4IGQ0OTEwNTIuLjQxODBjMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZS5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlXzZ4eC5TCmluZGV4IGI0NWZhMGUuLjAxYmNkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfNnh4LlMKQEAgLTEzLDcgKzEzLDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMKaW5kZXggZDg1YzdjOS4uMzBkZTgxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjQuUwpAQCAtNyw3ICs3LDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKaW5kZXggN2NiNzdjMi4uYmEwNjk0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwpAQCAtMjMsNyArMjMsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTM4LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2tkdW1wLmg+CiAKICNkZWZpbmUgREJHKC4uLikKIApAQCAtNDQwLDggKzQ0MCwzNyBAQAogCXRibC0+aXRfbGFyZ2VoaW50ID0gdGJsLT5pdF9oYWxmcG9pbnQ7CiAJc3Bpbl9sb2NrX2luaXQoJnRibC0+aXRfbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAorCWlmIChwcGNfbWQudGNlX2dldCkgeworCQl1bnNpZ25lZCBsb25nIGluZGV4LCB0Y2V2YWw7CisJCXVuc2lnbmVkIGxvbmcgdGNlY291bnQgPSAwOworCisJCS8qCisJCSAqIFJlc2VydmUgdGhlIGV4aXN0aW5nIG1hcHBpbmdzIGxlZnQgYnkgdGhlIGZpcnN0IGtlcm5lbC4KKwkJICovCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRibC0+aXRfc2l6ZTsgaW5kZXgrKykgeworCQkJdGNldmFsID0gcHBjX21kLnRjZV9nZXQodGJsLCBpbmRleCArIHRibC0+aXRfb2Zmc2V0KTsKKwkJCS8qCisJCQkgKiBGcmVlZCBUQ0UgZW50cnkgY29udGFpbnMgMHg3ZmZmZmZmZmZmZmZmZmZmIG9uIEpTMjAKKwkJCSAqLworCQkJaWYgKHRjZXZhbCAmJiAodGNldmFsICE9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMKSkgeworCQkJCV9fc2V0X2JpdChpbmRleCwgdGJsLT5pdF9tYXApOworCQkJCXRjZWNvdW50Kys7CisJCQl9CisJCX0KKwkJaWYgKCh0YmwtPml0X3NpemUgLSB0Y2Vjb3VudCkgPCBLRFVNUF9NSU5fVENFX0VOVFJJRVMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRDRSB0YWJsZSBpcyBmdWxsOyAiKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImZyZWVpbmcgJWQgZW50cmllcyBmb3IgdGhlIGtkdW1wIGJvb3RcbiIsCisJCQkJS0RVTVBfTUlOX1RDRV9FTlRSSUVTKTsKKwkJCWZvciAoaW5kZXggPSB0YmwtPml0X3NpemUgLSBLRFVNUF9NSU5fVENFX0VOVFJJRVM7CisJCQkJaW5kZXggPCB0YmwtPml0X3NpemU7IGluZGV4KyspCisJCQkJX19jbGVhcl9iaXQoaW5kZXgsIHRibC0+aXRfbWFwKTsKKwkJfQorCX0KKyNlbHNlCiAJLyogQ2xlYXIgdGhlIGhhcmR3YXJlIHRhYmxlIGluIGNhc2UgZmlybXdhcmUgbGVmdCBhbGxvY2F0aW9ucyBpbiBpdCAqLwogCXBwY19tZC50Y2VfZnJlZSh0YmwsIHRibC0+aXRfb2Zmc2V0LCB0YmwtPml0X3NpemUpOworI2VuZGlmCiAKIAlpZiAoIXdlbGNvbWVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIklPTU1VIHRhYmxlIGluaXRpYWxpemVkLCB2aXJ0dWFsIG1lcmdpbmcgJXNcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCA0MGQ0YzE0Li44Y2Y5ODc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTI5LDYgKzI5LDggQEAKICAqIHRvIHJlZHVjZSBjb2RlIHNwYWNlIGFuZCB1bmRlZmluZWQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KICAqLwogCisjdW5kZWYgREVCVUcKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpAQCAtMzgsNyArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDcsNyArNDgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTU4LDM5ICs2MiwzOCBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2VuZGlmCiAKIGludCBfX2lycV9vZmZzZXRfdmFsdWU7Ci0jaWZkZWYgQ09ORklHX1BQQzMyCi1FWFBPUlRfU1lNQk9MKF9faXJxX29mZnNldF92YWx1ZSk7Ci0jZW5kaWYKLQogc3RhdGljIGludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0czsKIAogI2lmZGVmIENPTkZJR19QUEMzMgotI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQotCi11bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107CitFWFBPUlRfU1lNQk9MKF9faXJxX29mZnNldF92YWx1ZSk7CiBhdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7CiAKKyNpZm5kZWYgQ09ORklHX1BQQ19NRVJHRQorI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQordW5zaWduZWQgbG9uZyBwcGNfY2FjaGVkX2lycV9tYXNrW05SX01BU0tfV09SRFNdOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfVEFVX0lOVAogZXh0ZXJuIGludCB0YXVfaW5pdGlhbGl6ZWQ7CiBleHRlcm4gaW50IHRhdV9pbnRlcnJ1cHRzKGludCk7CiAjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIGV4dGVybiBhdG9taWNfdCBpcGlfcmVjdjsKIGV4dGVybiBhdG9taWNfdCBpcGlfc2VudDsKICNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCiAjaWZkZWYgQ09ORklHX1BQQzY0CiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKIAogaW50IGRpc3RyaWJ1dGVfaXJxcyA9IDE7Ci11NjQgcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXI7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQpAQCAtMTIwLDggKzEyMyw4IEBACiAjZWxzZQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQkJaWYgKGRlc2MtPmhhbmRsZXIpCi0JCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+aGFuZGxlci0+dHlwZW5hbWUpOworCQlpZiAoZGVzYy0+Y2hpcCkKKwkJCXNlcV9wcmludGYocCwgIiAlcyAiLCBkZXNjLT5jaGlwLT50eXBlbmFtZSk7CiAJCWVsc2UKIAkJCXNlcV9wdXRzKHAsICIgIE5vbmUgICAgICAiKTsKIAkJc2VxX3ByaW50ZihwLCAiJXMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCAiIDogIkVkZ2UgICIpOwpAQCAtMTY0LDEzICsxNjcsMTMgQEAKIAkJaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1BFUl9DUFUpCiAJCQljb250aW51ZTsKIAotCQljcHVzX2FuZChtYXNrLCBpcnFfYWZmaW5pdHlbaXJxXSwgbWFwKTsKKwkJY3B1c19hbmQobWFzaywgaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFwKTsKIAkJaWYgKGFueV9vbmxpbmVfY3B1KG1hc2spID09IE5SX0NQVVMpIHsKIAkJCXByaW50aygiQnJlYWtpbmcgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAkJCW1hc2sgPSBtYXA7CiAJCX0KLQkJaWYgKGlycV9kZXNjW2lycV0uaGFuZGxlci0+c2V0X2FmZmluaXR5KQotCQkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KQorCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKIAkJZWxzZSBpZiAoaXJxX2Rlc2NbaXJxXS5hY3Rpb24gJiYgISh3YXJuZWQrKykpCiAJCQlwcmludGsoIkNhbm5vdCBzZXQgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAl9CkBAIC0xODMsNyArMTg2LDcgQEAKIAogdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgaXJxOwogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7CiAjZW5kaWYKQEAgLTIxNCwyMiArMjE3LDI2IEBACiAJICovCiAJaXJxID0gcHBjX21kLmdldF9pcnEocmVncyk7CiAKLQlpZiAoaXJxID49IDApIHsKKwlpZiAoaXJxICE9IE5PX0lSUSAmJiBpcnEgIT0gTk9fSVJRX0lHTk9SRSkgewogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKIAkJLyogU3dpdGNoIHRvIHRoZSBpcnEgc3RhY2sgdG8gaGFuZGxlIHRoaXMgKi8KIAkJY3VydHAgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CiAJCWlycXRwID0gaGFyZGlycV9jdHhbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAkJaWYgKGN1cnRwICE9IGlycXRwKSB7CisJCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJCXZvaWQgKmhhbmRsZXIgPSBkZXNjLT5oYW5kbGVfaXJxOworCQkJaWYgKGhhbmRsZXIgPT0gTlVMTCkKKwkJCQloYW5kbGVyID0gJl9fZG9fSVJROwogCQkJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKIAkJCWlycXRwLT5mbGFncyA9IDA7Ci0JCQljYWxsX19fZG9fSVJRKGlycSwgcmVncywgaXJxdHApOworCQkJY2FsbF9oYW5kbGVfaXJxKGlycSwgZGVzYywgcmVncywgaXJxdHAsIGhhbmRsZXIpOwogCQkJaXJxdHAtPnRhc2sgPSBOVUxMOwogCQkJaWYgKGlycXRwLT5mbGFncykKIAkJCQlzZXRfYml0cyhpcnF0cC0+ZmxhZ3MsICZjdXJ0cC0+ZmxhZ3MpOwogCQl9IGVsc2UKICNlbmRpZgotCQkJX19kb19JUlEoaXJxLCByZWdzKTsKLQl9IGVsc2UgaWYgKGlycSAhPSAtMikKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEsIHJlZ3MpOworCX0gZWxzZSBpZiAoaXJxICE9IE5PX0lSUV9JR05PUkUpCiAJCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwogCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOwogCkBAIC0yNDYsMTM4ICsyNTMsMTIgQEAKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzdGF0aWMgaW50IG9uY2UgPSAwOwotCi0JaWYgKG9uY2UpCi0JCXJldHVybjsKLQotCW9uY2UrKzsKLQotI2VuZGlmCiAJcHBjX21kLmluaXRfSVJRKCk7CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJaXJxX2N0eF9pbml0KCk7CiAjZW5kaWYKIH0KIAotI2lmZGVmIENPTkZJR19QUEM2NAotLyoKLSAqIFZpcnR1YWwgSVJRIG1hcHBpbmcgY29kZSwgdXNlZCBvbiBzeXN0ZW1zIHdpdGggWElDUyBpbnRlcnJ1cHQgY29udHJvbGxlcnMuCi0gKi8KLQotI2RlZmluZSBVTkRFRklORURfSVJRIDB4ZmZmZmZmZmYKLXVuc2lnbmVkIGludCB2aXJ0X2lycV90b19yZWFsX21hcFtOUl9JUlFTXTsKLQotLyoKLSAqIERvbid0IHVzZSB2aXJ0dWFsIGlycXMgMCwgMSwgMiBmb3IgZGV2aWNlcy4KLSAqIFRoZSBwY25ldDMyIGRyaXZlciBjb25zaWRlcnMgaW50ZXJydXB0IG51bWJlcnMgPCAyIHRvIGJlIGludmFsaWQsCi0gKiBhbmQgMiBpcyB0aGUgWElDUyBJUEkgaW50ZXJydXB0LgotICogV2UgbGltaXQgdmlydHVhbCBpcnFzIHRvIF9faXJxX29mZmV0X3ZhbHVlIGxlc3MgdGhhbiB2aXJ0X2lycV9tYXggc28KLSAqIHRoYXQgd2hlbiB3ZSBvZmZzZXQgdGhlbSB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhbiBpbnRlcnJ1cHQKLSAqIG51bWJlciA+PSB2aXJ0X2lycV9tYXguCi0gKi8KLSNkZWZpbmUgTUlOX1ZJUlRfSVJRCTMKLQotdW5zaWduZWQgaW50IHZpcnRfaXJxX21heDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3ZpcnRfaXJxOwotc3RhdGljIHVuc2lnbmVkIGludCBucl92aXJ0X2lycXM7Ci0KLXZvaWQKLXZpcnRfaXJxX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWlmICgodmlydF9pcnFfbWF4ID09IDApIHx8ICh2aXJ0X2lycV9tYXggPiAoTlJfSVJRUyAtIDEpKSkKLQkJdmlydF9pcnFfbWF4ID0gTlJfSVJRUyAtIDE7Ci0JbWF4X3ZpcnRfaXJxID0gdmlydF9pcnFfbWF4IC0gX19pcnFfb2Zmc2V0X3ZhbHVlOwotCW5yX3ZpcnRfaXJxcyA9IG1heF92aXJ0X2lycSAtIE1JTl9WSVJUX0lSUSArIDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQl2aXJ0X2lycV90b19yZWFsX21hcFtpXSA9IFVOREVGSU5FRF9JUlE7Ci19Ci0KLS8qIENyZWF0ZSBhIG1hcHBpbmcgZm9yIGEgcmVhbF9pcnEgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgotICogUmV0dXJuIHRoZSB2aXJ0dWFsIGlycSBhcyBhIGNvbnZlbmllbmNlLgotICovCi1pbnQgdmlydF9pcnFfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgaW50IHJlYWxfaXJxKQotewotCXVuc2lnbmVkIGludCB2aXJxLCBmaXJzdF92aXJxOwotCXN0YXRpYyBpbnQgd2FybmVkOwotCi0JaWYgKHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyID09IElDX09QRU5fUElDKQotCQlyZXR1cm4gcmVhbF9pcnE7CS8qIG5vIG1hcHBpbmcgZm9yIG9wZW5waWMgKGZvciBub3cpICovCi0KLQlpZiAocHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPT0gSUNfQ0VMTF9QSUMpCi0JCXJldHVybiByZWFsX2lycTsJLyogbm8gbWFwcGluZyBmb3IgaWljIGVpdGhlciAqLwotCi0JLyogZG9uJ3QgbWFwIGludGVycnVwdHMgPCBNSU5fVklSVF9JUlEgKi8KLQlpZiAocmVhbF9pcnEgPCBNSU5fVklSVF9JUlEpIHsKLQkJdmlydF9pcnFfdG9fcmVhbF9tYXBbcmVhbF9pcnFdID0gcmVhbF9pcnE7Ci0JCXJldHVybiByZWFsX2lycTsKLQl9Ci0KLQkvKiBtYXAgdG8gYSBudW1iZXIgYmV0d2VlbiBNSU5fVklSVF9JUlEgYW5kIG1heF92aXJ0X2lycSAqLwotCXZpcnEgPSByZWFsX2lycTsKLQlpZiAodmlycSA+IG1heF92aXJ0X2lycSkKLQkJdmlycSA9ICh2aXJxICUgbnJfdmlydF9pcnFzKSArIE1JTl9WSVJUX0lSUTsKLQotCS8qIHNlYXJjaCBmb3IgdGhpcyBudW1iZXIgb3IgYSBmcmVlIHNsb3QgKi8KLQlmaXJzdF92aXJxID0gdmlycTsKLQl3aGlsZSAodmlydF9pcnFfdG9fcmVhbF9tYXBbdmlycV0gIT0gVU5ERUZJTkVEX0lSUSkgewotCQlpZiAodmlydF9pcnFfdG9fcmVhbF9tYXBbdmlycV0gPT0gcmVhbF9pcnEpCi0JCQlyZXR1cm4gdmlycTsKLQkJaWYgKCsrdmlycSA+IG1heF92aXJ0X2lycSkKLQkJCXZpcnEgPSBNSU5fVklSVF9JUlE7Ci0JCWlmICh2aXJxID09IGZpcnN0X3ZpcnEpCi0JCQlnb3RvIG5vc3BhY2U7CS8qIG9vcHMsIG5vIGZyZWUgc2xvdHMgKi8KLQl9Ci0KLQl2aXJ0X2lycV90b19yZWFsX21hcFt2aXJxXSA9IHJlYWxfaXJxOwotCXJldHVybiB2aXJxOwotCi0gbm9zcGFjZToKLQlpZiAoIXdhcm5lZCkgewotCQlwcmludGsoS0VSTl9DUklUICJJbnRlcnJ1cHQgdGFibGUgaXMgZnVsbFxuIik7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkluY3JlYXNlIHZpcnRfaXJxX21heCAoY3VycmVudGx5ICVkKSAiCi0JCSAgICAgICAiaW4geW91ciBrZXJuZWwgc291cmNlcyBhbmQgcmVidWlsZC5cbiIsIHZpcnRfaXJxX21heCk7Ci0JCXdhcm5lZCA9IDE7Ci0JfQotCXJldHVybiBOT19JUlE7Ci19Ci0KLS8qCi0gKiBJbiBtb3N0IGNhc2VzIHdpbGwgZ2V0IGEgaGl0IG9uIHRoZSB2ZXJ5IGZpcnN0IHNsb3QgY2hlY2tlZCBpbiB0aGUKLSAqIHZpcnRfaXJxX3RvX3JlYWxfbWFwLiAgT25seSB3aGVuIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZgotICogSVJRcyB3aWxsIHRoaXMgYmUgZXhwZW5zaXZlLgotICovCi11bnNpZ25lZCBpbnQgcmVhbF9pcnFfdG9fdmlydF9zbG93cGF0aCh1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCi17Ci0JdW5zaWduZWQgaW50IHZpcnE7Ci0JdW5zaWduZWQgaW50IGZpcnN0X3ZpcnE7Ci0KLQl2aXJxID0gcmVhbF9pcnE7Ci0KLQlpZiAodmlycSA+IG1heF92aXJ0X2lycSkKLQkJdmlycSA9ICh2aXJxICUgbnJfdmlydF9pcnFzKSArIE1JTl9WSVJUX0lSUTsKLQotCWZpcnN0X3ZpcnEgPSB2aXJxOwotCi0JZG8gewotCQlpZiAodmlydF9pcnFfdG9fcmVhbF9tYXBbdmlycV0gPT0gcmVhbF9pcnEpCi0JCQlyZXR1cm4gdmlycTsKLQotCQl2aXJxKys7Ci0KLQkJaWYgKHZpcnEgPj0gbWF4X3ZpcnRfaXJxKQotCQkJdmlycSA9IDA7Ci0KLQl9IHdoaWxlIChmaXJzdF92aXJxICE9IHZpcnEpOwotCi0JcmV0dXJuIE5PX0lSUTsKLQotfQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAjaWZkZWYgQ09ORklHX0lSUVNUQUNLUwogc3RydWN0IHRocmVhZF9pbmZvICpzb2Z0aXJxX2N0eFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwpAQCAtNDI1LDE4ICszMDYsNTEwIEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlpZiAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkpIHsKLQkJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7Ci0JCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlpZiAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkpCiAJCWRvX3NvZnRpcnFfb25zdGFjaygpOwotCQlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKLQkJX19sb2NhbF9iaF9lbmFibGUoKTsKLQl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRvX3NvZnRpcnEpOwogCisKKy8qCisgKiBJUlEgY29udHJvbGxlciBhbmQgdmlydHVhbCBpbnRlcnJ1cHRzCisgKi8KKworI2lmZGVmIENPTkZJR19QUENfTUVSR0UKKworc3RhdGljIExJU1RfSEVBRChpcnFfaG9zdHMpOworc3RhdGljIHNwaW5sb2NrX3QgaXJxX2JpZ19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCitzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOworc3RhdGljIHVuc2lnbmVkIGludCBpcnFfdmlycV9jb3VudCA9IE5SX0lSUVM7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppcnFfZGVmYXVsdF9ob3N0OworCitzdHJ1Y3QgaXJxX2hvc3QgKmlycV9hbGxvY19ob3N0KHVuc2lnbmVkIGludCByZXZtYXBfdHlwZSwKKwkJCQl1bnNpZ25lZCBpbnQgcmV2bWFwX2FyZywKKwkJCQlzdHJ1Y3QgaXJxX2hvc3Rfb3BzICpvcHMsCisJCQkJaXJxX2h3X251bWJlcl90IGludmFsX2lycSkKK3sKKwlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CisJdW5zaWduZWQgaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGlycV9ob3N0KTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgKnJtYXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSBhbmQgcmV2bWFwIHRhYmxlIGlmIHVzaW5nIGxpbmVhciBtYXBwaW5nICovCisJaWYgKHJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9MSU5FQVIpCisJCXNpemUgKz0gcmV2bWFwX2FyZyAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworCWlmIChtZW1faW5pdF9kb25lKQorCQlob3N0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwllbHNlIHsKKwkJaG9zdCA9IGFsbG9jX2Jvb3RtZW0oc2l6ZSk7CisJCWlmIChob3N0KQorCQkJbWVtc2V0KGhvc3QsIDAsIHNpemUpOworCX0KKwlpZiAoaG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZpbGwgc3RydWN0dXJlICovCisJaG9zdC0+cmV2bWFwX3R5cGUgPSByZXZtYXBfdHlwZTsKKwlob3N0LT5pbnZhbF9pcnEgPSBpbnZhbF9pcnE7CisJaG9zdC0+b3BzID0gb3BzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCisJLyogSWYgaXQncyBhIGxlZ2FjeSBjb250cm9sbGVyLCBjaGVjayBmb3IgZHVwbGljYXRlcyBhbmQKKwkgKiBtYXJrIGl0IGFzIGFsbG9jYXRlZCAod2UgdXNlIGlycSAwIGhvc3QgcG9pbnRlciBmb3IgdGhhdAorCSAqLworCWlmIChyZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfTEVHQUNZKSB7CisJCWlmIChpcnFfbWFwWzBdLmhvc3QgIT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJCQkvKiBJZiB3ZSBhcmUgZWFybHkgYm9vdCwgd2UgY2FuJ3QgZnJlZSB0aGUgc3RydWN0dXJlLAorCQkJICogdG9vIGJhZC4uLgorCQkJICogdGhpcyB3aWxsIGJlIGZpeGVkIG9uY2Ugc2xhYiBpcyBtYWRlIGF2YWlsYWJsZSBlYXJseQorCQkJICogaW5zdGVhZCBvZiB0aGUgY3VycmVudCBjcnVmdAorCQkJICovCisJCQlpZiAobWVtX2luaXRfZG9uZSkKKwkJCQlrZnJlZShob3N0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlycV9tYXBbMF0uaG9zdCA9IGhvc3Q7CisJfQorCisJbGlzdF9hZGQoJmhvc3QtPmxpbmssICZpcnFfaG9zdHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCisJLyogQWRkaXRpb25hbCBzZXR1cHMgcGVyIHJldm1hcCB0eXBlICovCisJc3dpdGNoKHJldm1hcF90eXBlKSB7CisJY2FzZSBJUlFfSE9TVF9NQVBfTEVHQUNZOgorCQkvKiAwIGlzIGFsd2F5cyB0aGUgaW52YWxpZCBudW1iZXIgZm9yIGxlZ2FjeSAqLworCQlob3N0LT5pbnZhbF9pcnEgPSAwOworCQkvKiBzZXR1cCB1cyBhcyB0aGUgaG9zdCBmb3IgYWxsIGxlZ2FjeSBpbnRlcnJ1cHRzICovCisJCWZvciAoaSA9IDE7IGkgPCBOVU1fSVNBX0lOVEVSUlVQVFM7IGkrKykgeworCQkJaXJxX21hcFtpXS5od2lycSA9IDA7CisJCQlzbXBfd21iKCk7CisJCQlpcnFfbWFwW2ldLmhvc3QgPSBob3N0OworCQkJc21wX3dtYigpOworCisJCQkvKiBDbGVhciBzb21lIGZsYWdzICovCisJCQlnZXRfaXJxX2Rlc2MoaSktPnN0YXR1cworCQkJCSY9IH4oSVJRX05PUkVRVUVTVCB8IElSUV9MRVZFTCk7CisKKwkJCS8qIExlZ2FjeSBmbGFncyBhcmUgbGVmdCB0byBkZWZhdWx0IGF0IHRoaXMgcG9pbnQsCisJCQkgKiBvbmUgY2FuIHRoZW4gdXNlIGlycV9jcmVhdGVfbWFwcGluZygpIHRvCisJCQkgKiBleHBsaWNpdGVseSBjaGFuZ2UgdGhlbQorCQkJICovCisJCQlvcHMtPm1hcChob3N0LCBpLCBpLCAwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElSUV9IT1NUX01BUF9MSU5FQVI6CisJCXJtYXAgPSAodW5zaWduZWQgaW50ICopKGhvc3QgKyAxKTsKKwkJZm9yIChpID0gMDsgaSA8IHJldm1hcF9hcmc7IGkrKykKKwkJCXJtYXBbaV0gPSBJUlFfTk9ORTsKKwkJaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnNpemUgPSByZXZtYXBfYXJnOworCQlzbXBfd21iKCk7CisJCWhvc3QtPnJldm1hcF9kYXRhLmxpbmVhci5yZXZtYXAgPSBybWFwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlwcl9kZWJ1ZygiaXJxOiBBbGxvY2F0ZWQgaG9zdCBvZiB0eXBlICVkIEAweCVwXG4iLCByZXZtYXBfdHlwZSwgaG9zdCk7CisKKwlyZXR1cm4gaG9zdDsKK30KKworc3RydWN0IGlycV9ob3N0ICppcnFfZmluZF9ob3N0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaXJxX2hvc3QgKmgsICpmb3VuZCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFdlIG1pZ2h0IHdhbnQgdG8gbWF0Y2ggdGhlIGxlZ2FjeSBjb250cm9sbGVyIGxhc3Qgc2luY2UKKwkgKiBpdCBtaWdodCBwb3RlbnRpYWxseSBiZSBzZXQgdG8gbWF0Y2ggYWxsIGludGVycnVwdHMgaW4KKwkgKiB0aGUgYWJzZW5jZSBvZiBhIGRldmljZSBub2RlLiBUaGlzIGlzbid0IGEgcHJvYmxlbSBzbyBmYXIKKwkgKiB5ZXQgdGhvdWdoLi4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykKKwkJaWYgKGgtPm9wcy0+bWF0Y2ggPT0gTlVMTCB8fCBoLT5vcHMtPm1hdGNoKGgsIG5vZGUpKSB7CisJCQlmb3VuZCA9IGg7CisJCQlicmVhazsKKwkJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJldHVybiBmb3VuZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlycV9maW5kX2hvc3QpOworCit2b2lkIGlycV9zZXRfZGVmYXVsdF9ob3N0KHN0cnVjdCBpcnFfaG9zdCAqaG9zdCkKK3sKKwlwcl9kZWJ1ZygiaXJxOiBEZWZhdWx0IGhvc3Qgc2V0IHRvIEAweCVwXG4iLCBob3N0KTsKKworCWlycV9kZWZhdWx0X2hvc3QgPSBob3N0OworfQorCit2b2lkIGlycV9zZXRfdmlycV9jb3VudCh1bnNpZ25lZCBpbnQgY291bnQpCit7CisJcHJfZGVidWcoImlycTogVHJ5aW5nIHRvIHNldCB2aXJxIGNvdW50IHRvICVkXG4iLCBjb3VudCk7CisKKwlCVUdfT04oY291bnQgPCBOVU1fSVNBX0lOVEVSUlVQVFMpOworCWlmIChjb3VudCA8IE5SX0lSUVMpCisJCWlycV92aXJxX2NvdW50ID0gY291bnQ7Cit9CisKK3Vuc2lnbmVkIGludCBpcnFfY3JlYXRlX21hcHBpbmcoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJCWlycV9od19udW1iZXJfdCBod2lycSwKKwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IHZpcnEsIGhpbnQ7CisKKwlwcl9kZWJ1ZygiaXJxOiBpcnFfY3JlYXRlX21hcHBpbmcoMHglcCwgMHglbHgsIDB4JXgpXG4iLAorCQkgaG9zdCwgaHdpcnEsIGZsYWdzKTsKKworCS8qIExvb2sgZm9yIGRlZmF1bHQgaG9zdCBpZiBuZWNlY3NzYXJ5ICovCisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJaG9zdCA9IGlycV9kZWZhdWx0X2hvc3Q7CisJaWYgKGhvc3QgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcnFfY3JlYXRlX21hcHBpbmcgY2FsbGVkIGZvciIKKwkJICAgICAgICIgTlVMTCBob3N0LCBod2lycT0lbHhcbiIsIGh3aXJxKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIE5PX0lSUTsKKwl9CisJcHJfZGVidWcoImlycTogLT4gdXNpbmcgaG9zdCBAJXBcbiIsIGhvc3QpOworCisJLyogQ2hlY2sgaWYgbWFwcGluZyBhbHJlYWR5IGV4aXN0LCBpZiBpdCBkb2VzLCBjYWxsCisJICogaG9zdC0+b3BzLT5tYXAoKSB0byB1cGRhdGUgdGhlIGZsYWdzCisJICovCisJdmlycSA9IGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOworCWlmICh2aXJxICE9IElSUV9OT05FKSB7CisJCXByX2RlYnVnKCJpcnE6IC0+IGV4aXN0aW5nIG1hcHBpbmcgb24gdmlycSAlZFxuIiwgdmlycSk7CisJCWhvc3QtPm9wcy0+bWFwKGhvc3QsIHZpcnEsIGh3aXJxLCBmbGFncyk7CisJCXJldHVybiB2aXJxOworCX0KKworCS8qIEdldCBhIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlciAqLworCWlmIChob3N0LT5yZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfTEVHQUNZKSB7CisJCS8qIEhhbmRsZSBsZWdhY3kgKi8KKwkJdmlycSA9ICh1bnNpZ25lZCBpbnQpaHdpcnE7CisJCWlmICh2aXJxID09IDAgfHwgdmlycSA+PSBOVU1fSVNBX0lOVEVSUlVQVFMpCisJCQlyZXR1cm4gTk9fSVJROworCQlyZXR1cm4gdmlycTsKKwl9IGVsc2UgeworCQkvKiBBbGxvY2F0ZSBhIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlciAqLworCQloaW50ID0gaHdpcnEgJSBpcnFfdmlycV9jb3VudDsKKwkJdmlycSA9IGlycV9hbGxvY192aXJ0KGhvc3QsIDEsIGhpbnQpOworCQlpZiAodmlycSA9PSBOT19JUlEpIHsKKwkJCXByX2RlYnVnKCJpcnE6IC0+IHZpcnEgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQkJcmV0dXJuIE5PX0lSUTsKKwkJfQorCX0KKwlwcl9kZWJ1ZygiaXJxOiAtPiBvYnRhaW5lZCB2aXJxICVkXG4iLCB2aXJxKTsKKworCS8qIENsZWFyIHNvbWUgZmxhZ3MgKi8KKwlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyAmPSB+KElSUV9OT1JFUVVFU1QgfCBJUlFfTEVWRUwpOworCisJLyogbWFwIGl0ICovCisJaWYgKGhvc3QtPm9wcy0+bWFwKGhvc3QsIHZpcnEsIGh3aXJxLCBmbGFncykpIHsKKwkJcHJfZGVidWcoImlycTogLT4gbWFwcGluZyBmYWlsZWQsIGZyZWVpbmdcbiIpOworCQlpcnFfZnJlZV92aXJ0KHZpcnEsIDEpOworCQlyZXR1cm4gTk9fSVJROworCX0KKwlzbXBfd21iKCk7CisJaXJxX21hcFt2aXJxXS5od2lycSA9IGh3aXJxOworCXNtcF9tYigpOworCXJldHVybiB2aXJxOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2NyZWF0ZV9tYXBwaW5nKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX29mX21hcHBpbmcoc3RydWN0IGRldmljZV9ub2RlICpjb250cm9sbGVyLAorCQkJCQkgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUpCit7CisJc3RydWN0IGlycV9ob3N0ICpob3N0OworCWlycV9od19udW1iZXJfdCBod2lycTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBJUlFfVFlQRV9OT05FOworCisJaWYgKGNvbnRyb2xsZXIgPT0gTlVMTCkKKwkJaG9zdCA9IGlycV9kZWZhdWx0X2hvc3Q7CisJZWxzZQorCQlob3N0ID0gaXJxX2ZpbmRfaG9zdChjb250cm9sbGVyKTsKKwlpZiAoaG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gTk9fSVJROworCisJLyogSWYgaG9zdCBoYXMgbm8gdHJhbnNsYXRpb24sIHRoZW4gd2UgYXNzdW1lIGludGVycnVwdCBsaW5lICovCisJaWYgKGhvc3QtPm9wcy0+eGxhdGUgPT0gTlVMTCkKKwkJaHdpcnEgPSBpbnRzcGVjWzBdOworCWVsc2UgeworCQlpZiAoaG9zdC0+b3BzLT54bGF0ZShob3N0LCBjb250cm9sbGVyLCBpbnRzcGVjLCBpbnRzaXplLAorCQkJCSAgICAgJmh3aXJxLCAmZmxhZ3MpKQorCQkJcmV0dXJuIE5PX0lSUTsKKwl9CisKKwlyZXR1cm4gaXJxX2NyZWF0ZV9tYXBwaW5nKGhvc3QsIGh3aXJxLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcnFfY3JlYXRlX29mX21hcHBpbmcpOworCit1bnNpZ25lZCBpbnQgaXJxX29mX3BhcnNlX2FuZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qgb2ZfaXJxIG9pcnE7CisKKwlpZiAob2ZfaXJxX21hcF9vbmUoZGV2LCBpbmRleCwgJm9pcnEpKQorCQlyZXR1cm4gTk9fSVJROworCisJcmV0dXJuIGlycV9jcmVhdGVfb2ZfbWFwcGluZyhvaXJxLmNvbnRyb2xsZXIsIG9pcnEuc3BlY2lmaWVyLAorCQkJCSAgICAgb2lycS5zaXplKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlycV9vZl9wYXJzZV9hbmRfbWFwKTsKKwordm9pZCBpcnFfZGlzcG9zZV9tYXBwaW5nKHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBpcnFfaG9zdCAqaG9zdCA9IGlycV9tYXBbdmlycV0uaG9zdDsKKwlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk5fT04gKGhvc3QgPT0gTlVMTCk7CisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogTmV2ZXIgdW5tYXAgbGVnYWN5IGludGVycnVwdHMgKi8KKwlpZiAoaG9zdC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX0xFR0FDWSkKKwkJcmV0dXJuOworCisJLyogcmVtb3ZlIGNoaXAgYW5kIGhhbmRsZXIgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgTlVMTCwgTlVMTCk7CisKKwkvKiBNYWtlIHN1cmUgaXQncyBjb21wbGV0ZWQgKi8KKwlzeW5jaHJvbml6ZV9pcnEodmlycSk7CisKKwkvKiBUZWxsIHRoZSBQSUMgYWJvdXQgaXQgKi8KKwlpZiAoaG9zdC0+b3BzLT51bm1hcCkKKwkJaG9zdC0+b3BzLT51bm1hcChob3N0LCB2aXJxKTsKKwlzbXBfbWIoKTsKKworCS8qIENsZWFyIHJldmVyc2UgbWFwICovCisJaHdpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCXN3aXRjaChob3N0LT5yZXZtYXBfdHlwZSkgeworCWNhc2UgSVJRX0hPU1RfTUFQX0xJTkVBUjoKKwkJaWYgKGh3aXJxIDwgaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnNpemUpCisJCQlob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIucmV2bWFwW2h3aXJxXSA9IElSUV9OT05FOworCQlicmVhazsKKwljYXNlIElSUV9IT1NUX01BUF9UUkVFOgorCQkvKiBDaGVjayBpZiByYWRpeCB0cmVlIGFsbG9jYXRlZCB5ZXQgKi8KKwkJaWYgKGhvc3QtPnJldm1hcF9kYXRhLnRyZWUuZ2ZwX21hc2sgPT0gMCkKKwkJCWJyZWFrOworCQkvKiBYWFggcmFkaXggdHJlZSBub3Qgc2FmZSAhIHJlbW92ZSBsb2NrIHdoZW0gaXQgYmVjb21lcyBzYWZlCisJCSAqIGFuZCB1c2Ugc29tZSBSQ1Ugc3luYyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBvayBiZWZvcmUgd2UKKwkJICogY2FuIHJlLXVzZSB0aGF0IG1hcCBlbnRyeQorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCQlyYWRpeF90cmVlX2RlbGV0ZSgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJLyogRGVzdHJveSBtYXAgKi8KKwlzbXBfbWIoKTsKKwlpcnFfbWFwW3ZpcnFdLmh3aXJxID0gaG9zdC0+aW52YWxfaXJxOworCisJLyogU2V0IHNvbWUgZmxhZ3MgKi8KKwlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUOworCisJLyogRnJlZSBpdCAqLworCWlycV9mcmVlX3ZpcnQodmlycSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcnFfZGlzcG9zZV9tYXBwaW5nKTsKKwordW5zaWduZWQgaW50IGlycV9maW5kX21hcHBpbmcoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJICAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBoaW50ID0gaHdpcnEgJSBpcnFfdmlycV9jb3VudDsKKworCS8qIExvb2sgZm9yIGRlZmF1bHQgaG9zdCBpZiBuZWNlY3NzYXJ5ICovCisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJaG9zdCA9IGlycV9kZWZhdWx0X2hvc3Q7CisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE5PX0lSUTsKKworCS8qIGxlZ2FjeSAtPiBiYWlsIGVhcmx5ICovCisJaWYgKGhvc3QtPnJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9MRUdBQ1kpCisJCXJldHVybiBod2lycTsKKworCS8qIFNsb3cgcGF0aCBkb2VzIGEgbGluZWFyIHNlYXJjaCBvZiB0aGUgbWFwICovCisJaWYgKGhpbnQgPCBOVU1fSVNBX0lOVEVSUlVQVFMpCisJCWhpbnQgPSBOVU1fSVNBX0lOVEVSUlVQVFM7CisJaSA9IGhpbnQ7CisJZG8gIHsKKwkJaWYgKGlycV9tYXBbaV0uaG9zdCA9PSBob3N0ICYmCisJCSAgICBpcnFfbWFwW2ldLmh3aXJxID09IGh3aXJxKQorCQkJcmV0dXJuIGk7CisJCWkrKzsKKwkJaWYgKGkgPj0gaXJxX3ZpcnFfY291bnQpCisJCQlpID0gTlVNX0lTQV9JTlRFUlJVUFRTOworCX0gd2hpbGUoaSAhPSBoaW50KTsKKwlyZXR1cm4gTk9fSVJROworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2ZpbmRfbWFwcGluZyk7CisKKwordW5zaWduZWQgaW50IGlycV9yYWRpeF9yZXZtYXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJICAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnRyZWU7CisJc3RydWN0IGlycV9tYXBfZW50cnkgKnB0cjsKKwl1bnNpZ25lZCBpbnQgdmlycTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7CisKKwkvKiBDaGVjayBpZiB0aGUgcmFkaXggdHJlZSBleGlzdCB5ZXQuIFdlIHRlc3QgdGhlIHZhbHVlIG9mCisJICogdGhlIGdmcF9tYXNrIGZvciB0aGF0LiBTbmVha3kgYnV0IHNhdmVzIGFub3RoZXIgaW50IGluIHRoZQorCSAqIHN0cnVjdHVyZS4gSWYgbm90LCB3ZSBmYWxsYmFjayB0byBzbG93IG1vZGUKKwkgKi8KKwl0cmVlID0gJmhvc3QtPnJldm1hcF9kYXRhLnRyZWU7CisJaWYgKHRyZWUtPmdmcF9tYXNrID09IDApCisJCXJldHVybiBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKKworCS8qIFhYWCBDdXJyZW50IHJhZGl4IHRyZWVzIGFyZSBOT1QgU01QIHNhZmUgISEhIFJlbW92ZSB0aGF0IGxvY2sKKwkgKiB3aGVuIHRoYXQgaXMgZml4ZWQgKHdoZW4gTmljaydzIHBhdGNoIGdldHMgaW4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisKKwkvKiBOb3cgdHJ5IHRvIHJlc29sdmUgKi8KKwlwdHIgPSByYWRpeF90cmVlX2xvb2t1cCh0cmVlLCBod2lycSk7CisJLyogRm91bmQgaXQsIHJldHVybiAqLworCWlmIChwdHIpIHsKKwkJdmlycSA9IHB0ciAtIGlycV9tYXA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBJZiBub3QgdGhlcmUsIHRyeSB0byBpbnNlcnQgaXQgKi8KKwl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CisJaWYgKHZpcnEgIT0gTk9fSVJRKQorCQlyYWRpeF90cmVlX2luc2VydCh0cmVlLCB2aXJxLCAmaXJxX21hcFt2aXJxXSk7CisgYmFpbDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gdmlycTsKK30KKwordW5zaWduZWQgaW50IGlycV9saW5lYXJfcmV2bWFwKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKKwkJCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisJdW5zaWduZWQgaW50ICpyZXZtYXA7CisKKwlXQVJOX09OKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9MSU5FQVIpOworCisJLyogQ2hlY2sgcmV2bWFwIGJvdW5kcyAqLworCWlmICh1bmxpa2VseShod2lycSA+PSBob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIuc2l6ZSkpCisJCXJldHVybiBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKKworCS8qIENoZWNrIGlmIHJldm1hcCB3YXMgYWxsb2NhdGVkICovCisJcmV2bWFwID0gaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnJldm1hcDsKKwlpZiAodW5saWtlbHkocmV2bWFwID09IE5VTEwpKQorCQlyZXR1cm4gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CisKKwkvKiBGaWxsIHVwIHJldm1hcCB3aXRoIHNsb3cgcGF0aCBpZiBubyBtYXBwaW5nIGZvdW5kICovCisJaWYgKHVubGlrZWx5KHJldm1hcFtod2lycV0gPT0gTk9fSVJRKSkKKwkJcmV2bWFwW2h3aXJxXSA9IGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOworCisJcmV0dXJuIHJldm1hcFtod2lycV07Cit9CisKK3Vuc2lnbmVkIGludCBpcnFfYWxsb2NfdmlydChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCisJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LAorCQkJICAgIHVuc2lnbmVkIGludCBoaW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZvdW5kID0gTk9fSVJROworCXVuc2lnbmVkIGludCBsaW1pdCA9IGlycV92aXJxX2NvdW50IC0gY291bnQ7CisKKwlpZiAoY291bnQgPT0gMCB8fCBjb3VudCA+IChpcnFfdmlycV9jb3VudCAtIE5VTV9JU0FfSU5URVJSVVBUUykpCisJCXJldHVybiBOT19JUlE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisKKwkvKiBVc2UgaGludCBmb3IgMSBpbnRlcnJ1cHQgaWYgYW55ICovCisJaWYgKGNvdW50ID09IDEgJiYgaGludCA+PSBOVU1fSVNBX0lOVEVSUlVQVFMgJiYKKwkgICAgaGludCA8IGlycV92aXJxX2NvdW50ICYmIGlycV9tYXBbaGludF0uaG9zdCA9PSBOVUxMKSB7CisJCWZvdW5kID0gaGludDsKKwkJZ290byBoaW50X2ZvdW5kOworCX0KKworCS8qIExvb2sgZm9yIGNvdW50IGNvbnNlY3V0aXZlIG51bWJlcnMgaW4gdGhlIGFsbG9jYXRhYmxlCisJICogKG5vbi1sZWdhY3kpIHNwYWNlCisJICovCisJZm9yIChpID0gTlVNX0lTQV9JTlRFUlJVUFRTOyBpIDw9IGxpbWl0OyApIHsKKwkJZm9yIChqID0gaTsgaiA8IChpICsgY291bnQpOyBqKyspCisJCQlpZiAoaXJxX21hcFtqXS5ob3N0ICE9IE5VTEwpIHsKKwkJCQlpID0gaiArIDE7CisJCQkJY29udGludWU7CisJCQl9CisJCWZvdW5kID0gaTsKKwkJYnJlYWs7CisJfQorCWlmIChmb3VuZCA9PSBOT19JUlEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJCXJldHVybiBOT19JUlE7CisJfQorIGhpbnRfZm91bmQ6CisJZm9yIChpID0gZm91bmQ7IGkgPCAoZm91bmQgKyBjb3VudCk7IGkrKykgeworCQlpcnFfbWFwW2ldLmh3aXJxID0gaG9zdC0+aW52YWxfaXJxOworCQlzbXBfd21iKCk7CisJCWlycV9tYXBbaV0uaG9zdCA9IGhvc3Q7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJldHVybiBmb3VuZDsKK30KKwordm9pZCBpcnFfZnJlZV92aXJ0KHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCVdBUk5fT04gKHZpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpOworCVdBUk5fT04gKGNvdW50ID09IDAgfHwgKHZpcnEgKyBjb3VudCkgPiBpcnFfdmlycV9jb3VudCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gdmlycTsgaSA8ICh2aXJxICsgY291bnQpOyBpKyspIHsKKwkJc3RydWN0IGlycV9ob3N0ICpob3N0OworCisJCWlmIChpIDwgTlVNX0lTQV9JTlRFUlJVUFRTIHx8CisJCSAgICAodmlycSArIGNvdW50KSA+IGlycV92aXJxX2NvdW50KQorCQkJY29udGludWU7CisKKwkJaG9zdCA9IGlycV9tYXBbaV0uaG9zdDsKKwkJaXJxX21hcFtpXS5od2lycSA9IGhvc3QtPmludmFsX2lycTsKKwkJc21wX3dtYigpOworCQlpcnFfbWFwW2ldLmhvc3QgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpcnFfZWFybHlfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKKwkJZ2V0X2lycV9kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVDsKK30KKworLyogV2UgbmVlZCB0byBjcmVhdGUgdGhlIHJhZGl4IHRyZWVzIGxhdGUgKi8KK3N0YXRpYyBpbnQgaXJxX2xhdGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBpcnFfaG9zdCAqaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykgeworCQlpZiAoaC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX1RSRUUpCisJCQlJTklUX1JBRElYX1RSRUUoJmgtPnJldm1hcF9kYXRhLnRyZWUsIEdGUF9BVE9NSUMpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChpcnFfbGF0ZV9pbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19QUENfTUVSR0UgKi8KKwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiBpbnQgcGNpX2VuYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKiBwZGV2KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwppbmRleCBmNzg4NjYzLi45ZjA4OThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwpAQCAtMjYsNyArMjYsNiBAQAogICoJCWZvciBQUEM2NAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sMmNyXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9sMmNyXzZ4eC5TCmluZGV4IGQ3ZjRlOTguLjg1OGYyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbDJjcl82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMKQEAgLTQwLDcgKzQwLDYgQEAKIAlBdXRob3I6CVRlcnJ5IEdyZWVuaWF1cyAodGdyZWVAcGh5cy51YWxiZXJ0YS5jYSkKIAlQbGVhc2UgZS1tYWlsIHVwZGF0ZXMgdG8gdGhpcyBmaWxlIHRvIG1lLCB0aGFua3MhCiAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYwppbmRleCA2ZTY3YjViLi43ZTk4ZTc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgpAQCAtMjksNiArMjgsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKm5wOwogCXVuc2lnbmVkIGludAkJCXNwZWVkOwogCXVuc2lnbmVkIGludAkJCWNsb2NrOworCWludAkJCQlpcnFfY2hlY2tfcGFyZW50OwogCXBoeXNfYWRkcl90CQkJdGFkZHI7CiB9IGxlZ2FjeV9zZXJpYWxfaW5mb3NbTUFYX0xFR0FDWV9TRVJJQUxfUE9SVFNdOwogc3RhdGljIHVuc2lnbmVkIGludCBsZWdhY3lfc2VyaWFsX2NvdW50OwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9wb3J0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCB3YW50X2luZGV4LAogCQkJCSAgaW50IGlvdHlwZSwgcGh5c19hZGRyX3QgYmFzZSwKIAkJCQkgIHBoeXNfYWRkcl90IHRhZGRyLCB1bnNpZ25lZCBsb25nIGlycSwKLQkJCQkgIHVwZl90IGZsYWdzKQorCQkJCSAgdXBmX3QgZmxhZ3MsIGludCBpcnFfY2hlY2tfcGFyZW50KQogewogCXUzMiAqY2xrLCAqc3BkLCBjbG9jayA9IEJBU0VfQkFVRCAqIDE2OwogCWludCBpbmRleDsKQEAgLTY5LDcgKzY5LDcgQEAKIAlpZiAobGVnYWN5X3NlcmlhbF9pbmZvc1tpbmRleF0ubnAgIT0gMCkgewogCQkvKiBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgcm9vbSwgbW92ZSBpdCwgZWxzZSBvdmVycmlkZSAqLwogCQlpZiAobGVnYWN5X3NlcmlhbF9jb3VudCA8IE1BWF9MRUdBQ1lfU0VSSUFMX1BPUlRTKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNb3ZlZCBsZWdhY3kgcG9ydCAlZCAtPiAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJNb3ZlZCBsZWdhY3kgcG9ydCAlZCAtPiAlZFxuIiwKIAkJCSAgICAgICBpbmRleCwgbGVnYWN5X3NlcmlhbF9jb3VudCk7CiAJCQlsZWdhY3lfc2VyaWFsX3BvcnRzW2xlZ2FjeV9zZXJpYWxfY291bnRdID0KIAkJCQlsZWdhY3lfc2VyaWFsX3BvcnRzW2luZGV4XTsKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCQlsZWdhY3lfc2VyaWFsX2luZm9zW2luZGV4XTsKIAkJCWxlZ2FjeV9zZXJpYWxfY291bnQrKzsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIlJlcGxhY2luZyBsZWdhY3kgcG9ydCAlZFxuIiwgaW5kZXgpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlcGxhY2luZyBsZWdhY3kgcG9ydCAlZFxuIiwgaW5kZXgpOwogCQl9CiAJfQogCkBAIC05NiwxMCArOTYsMTEgQEAKIAlsZWdhY3lfc2VyaWFsX2luZm9zW2luZGV4XS5ucCA9IG9mX25vZGVfZ2V0KG5wKTsKIAlsZWdhY3lfc2VyaWFsX2luZm9zW2luZGV4XS5jbG9jayA9IGNsb2NrOwogCWxlZ2FjeV9zZXJpYWxfaW5mb3NbaW5kZXhdLnNwZWVkID0gc3BkID8gKnNwZCA6IDA7CisJbGVnYWN5X3NlcmlhbF9pbmZvc1tpbmRleF0uaXJxX2NoZWNrX3BhcmVudCA9IGlycV9jaGVja19wYXJlbnQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBsZWdhY3kgc2VyaWFsIHBvcnQgJWQgZm9yICVzXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJGb3VuZCBsZWdhY3kgc2VyaWFsIHBvcnQgJWQgZm9yICVzXG4iLAogCSAgICAgICBpbmRleCwgbnAtPmZ1bGxfbmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICAlcz0lbGx4LCB0YWRkcj0lbGx4LCBpcnE9JWx4LCBjbGs9JWQsIHNwZWVkPSVkXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICIgICVzPSVsbHgsIHRhZGRyPSVsbHgsIGlycT0lbHgsIGNsaz0lZCwgc3BlZWQ9JWRcbiIsCiAJICAgICAgIChpb3R5cGUgPT0gVVBJT19QT1JUKSA/ICJwb3J0IiA6ICJtZW0iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcpdGFkZHIsIGlycSwKIAkgICAgICAgbGVnYWN5X3NlcmlhbF9wb3J0c1tpbmRleF0udWFydGNsaywKQEAgLTEyNywxMSArMTI4LDEzIEBACiAJCXJldHVybiAtMTsKIAogCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhzb2NfZGV2LCBhZGRycCk7CisJaWYgKGFkZHIgPT0gT0ZfQkFEX0FERFIpCisJCXJldHVybiAtMTsKIAogCS8qIEFkZCBwb3J0LCBpcnEgd2lsbCBiZSBkZWFsdCB3aXRoIGxhdGVyLiBXZSBwYXNzZWQgYSB0cmFuc2xhdGVkCiAJICogSU8gcG9ydCB2YWx1ZS4gSXQgd2lsbCBiZSBmaXhlZCB1cCBsYXRlciBhbG9uZyB3aXRoIHRoZSBpcnEKIAkgKi8KLQlyZXR1cm4gYWRkX2xlZ2FjeV9wb3J0KG5wLCAtMSwgVVBJT19NRU0sIGFkZHIsIGFkZHIsIE5PX0lSUSwgZmxhZ3MpOworCXJldHVybiBhZGRfbGVnYWN5X3BvcnQobnAsIC0xLCBVUElPX01FTSwgYWRkciwgYWRkciwgTk9fSVJRLCBmbGFncywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX3BvcnQoc3RydWN0IGRldmljZV9ub2RlICpucCwKQEAgLTE0Miw2ICsxNDUsOCBAQAogCWludCBpbmRleCA9IC0xOwogCXBoeXNfYWRkcl90IHRhZGRyOwogCisJREJHKCIgLT4gYWRkX2xlZ2FjeV9pc2FfcG9ydCglcylcbiIsIG5wLT5mdWxsX25hbWUpOworCiAJLyogR2V0IHRoZSBJU0EgcG9ydCBudW1iZXIgKi8KIAlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CiAJaWYgKHJlZyA9PSBOVUxMKQpAQCAtMTYyLDkgKzE2NywxMiBAQAogCiAJLyogVHJhbnNsYXRlIElTQSBhZGRyZXNzICovCiAJdGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgcmVnKTsKKwlpZiAodGFkZHIgPT0gT0ZfQkFEX0FERFIpCisJCXJldHVybiAtMTsKIAogCS8qIEFkZCBwb3J0LCBpcnEgd2lsbCBiZSBkZWFsdCB3aXRoIGxhdGVyICovCi0JcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgaW5kZXgsIFVQSU9fUE9SVCwgcmVnWzFdLCB0YWRkciwgTk9fSVJRLCBVUEZfQk9PVF9BVVRPQ09ORik7CisJcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgaW5kZXgsIFVQSU9fUE9SVCwgcmVnWzFdLCB0YWRkciwKKwkJCSAgICAgICBOT19JUlEsIFVQRl9CT09UX0FVVE9DT05GLCAwKTsKIAogfQogCkBAIC0xNzcsNiArMTg1LDggQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJaW50IGlvdHlwZSwgaW5kZXggPSAtMSwgbGluZGV4ID0gMDsKIAorCURCRygiIC0+IGFkZF9sZWdhY3lfcGNpX3BvcnQoJXMpXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwogCS8qIFdlIG9ubHkgc3VwcG9ydCBwb3J0cyB0aGF0IGhhdmUgYSBjbG9jayBmcmVxdWVuY3kgcHJvcGVybHkKIAkgKiBlbmNvZGVkIGluIHRoZSBkZXZpY2UtdHJlZSAodGhhdCBpcyBoYXZlIGFuIGZjb2RlKS4gQW55dGhpbmcKIAkgKiBlbHNlIGNhbid0IGJlIHVzZWQgdGhhdCBlYXJseSBhbmQgd2lsbCBiZSBub3JtYWxseSBwcm9iZWQgYnkKQEAgLTE5NSw2ICsyMDUsOCBAQAogCS8qIFdlIG9ubHkgc3VwcG9ydCBCQVIgMCBmb3Igbm93ICovCiAJaW90eXBlID0gKGZsYWdzICYgSU9SRVNPVVJDRV9NRU0pID8gVVBJT19NRU0gOiBVUElPX1BPUlQ7CiAJYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKHBjaV9kZXYsIGFkZHJwKTsKKwlpZiAoYWRkciA9PSBPRl9CQURfQUREUikKKwkJcmV0dXJuIC0xOwogCiAJLyogU2V0IHRoZSBJTyBiYXNlIHRvIHRoZSBzYW1lIGFzIHRoZSB0cmFuc2xhdGVkIGFkZHJlc3MgZm9yIE1NSU8sCiAJICogb3IgdG8gdGhlIGRvbWFpbiBsb2NhbCBJTyBiYXNlIGZvciBQSU8gKGl0IHdpbGwgYmUgZml4ZWQgdXAgbGF0ZXIpCkBAIC0yMzIsNyArMjQ0LDggQEAKIAkvKiBBZGQgcG9ydCwgaXJxIHdpbGwgYmUgZGVhbHQgd2l0aCBsYXRlci4gV2UgcGFzc2VkIGEgdHJhbnNsYXRlZAogCSAqIElPIHBvcnQgdmFsdWUuIEl0IHdpbGwgYmUgZml4ZWQgdXAgbGF0ZXIgYWxvbmcgd2l0aCB0aGUgaXJxCiAJICovCi0JcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgaW5kZXgsIGlvdHlwZSwgYmFzZSwgYWRkciwgTk9fSVJRLCBVUEZfQk9PVF9BVVRPQ09ORik7CisJcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgaW5kZXgsIGlvdHlwZSwgYmFzZSwgYWRkciwgTk9fSVJRLAorCQkJICAgICAgIFVQRl9CT09UX0FVVE9DT05GLCBucCAhPSBwY2lfZGV2KTsKIH0KICNlbmRpZgogCkBAIC0zMDIsNiArMzE1LDE3IEBACiAJCW9mX25vZGVfcHV0KGlzYSk7CiAJfQogCisJLyogRmlyc3QgZmlsbCBvdXIgYXJyYXkgd2l0aCB0c2ktYnJpZGdlIHBvcnRzICovCisJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCAic2VyaWFsIiwgIm5zMTY1NTAiKSkgIT0gTlVMTDspIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICp0c2kgPSBvZl9nZXRfcGFyZW50KG5wKTsKKwkJaWYgKHRzaSAmJiAhc3RyY21wKHRzaS0+dHlwZSwgInRzaS1icmlkZ2UiKSkgeworCQkJaW5kZXggPSBhZGRfbGVnYWN5X3NvY19wb3J0KG5wLCBucCk7CisJCQlpZiAoaW5kZXggPj0gMCAmJiBucCA9PSBzdGRvdXQpCisJCQkJbGVnYWN5X3NlcmlhbF9jb25zb2xlID0gaW5kZXg7CisJCX0KKwkJb2Zfbm9kZV9wdXQodHNpKTsKKwl9CisKICNpZmRlZiBDT05GSUdfUENJCiAJLyogTmV4dCwgdHJ5IHRvIGxvY2F0ZSBQQ0kgcG9ydHMgKi8KIAlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9hbGxfbm9kZXMobnApKTspIHsKQEAgLTM1MiwyNyArMzc2LDIyIEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwb3J0KQogeworCXVuc2lnbmVkIGludCB2aXJxOworCiAJREJHKCJmaXh1cF9wb3J0X2lycSglZClcbiIsIGluZGV4KTsKIAotCS8qIENoZWNrIGZvciBpbnRlcnJ1cHRzIGluIHRoYXQgbm9kZSAqLwotCWlmIChucC0+bl9pbnRycyA+IDApIHsKLQkJcG9ydC0+aXJxID0gbnAtPmludHJzWzBdLmxpbmU7Ci0JCURCRygiIHBvcnQgJWQgKCVzKSwgaXJxPSVkXG4iLAotCQkgICAgaW5kZXgsIG5wLT5mdWxsX25hbWUsIHBvcnQtPmlycSk7Ci0JCXJldHVybjsKKwl2aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmICh2aXJxID09IE5PX0lSUSAmJiBsZWdhY3lfc2VyaWFsX2luZm9zW2luZGV4XS5pcnFfY2hlY2tfcGFyZW50KSB7CisJCW5wID0gb2ZfZ2V0X3BhcmVudChucCk7CisJCWlmIChucCA9PSBOVUxMKQorCQkJcmV0dXJuOworCQl2aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCQlvZl9ub2RlX3B1dChucCk7CiAJfQotCi0JLyogQ2hlY2sgZm9yIGludGVycnVwdHMgaW4gdGhlIHBhcmVudCAqLwotCW5wID0gb2ZfZ2V0X3BhcmVudChucCk7Ci0JaWYgKG5wID09IE5VTEwpCisJaWYgKHZpcnEgPT0gTk9fSVJRKQogCQlyZXR1cm47CiAKLQlpZiAobnAtPm5faW50cnMgPiAwKSB7Ci0JCXBvcnQtPmlycSA9IG5wLT5pbnRyc1swXS5saW5lOwotCQlEQkcoIiBwb3J0ICVkICglcyksIGlycT0lZFxuIiwKLQkJICAgIGluZGV4LCBucC0+ZnVsbF9uYW1lLCBwb3J0LT5pcnEpOwotCX0KLQlvZl9ub2RlX3B1dChucCk7CisJcG9ydC0+aXJxID0gdmlycTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX3BvcnRfcGlvKGludCBpbmRleCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggYzAyZGVhYS4uMjNmMzRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqIGtleXdvcmQgLSB2YWx1ZSBwYWlycyB0aGF0IHNwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBhcnRpdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNDUsMTEgKzQ0LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfcHBjNjRfbHBhcmNmZzsKICNkZWZpbmUgTFBBUkNGR19CVUZGX1NJWkUgNDA5NgogCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0KIC8qCi0gKiBGb3IgaVNlcmllcyBsZWdhY3kgc3lzdGVtcywgdGhlIFBQQSBwdXJyIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIHRoZQotICogZW11bGF0ZWRfdGltZV9iYXNlIGZpZWxkIGluIHRoZSBwYWNhLgorICogVHJhY2sgc3VtIG9mIGFsbCBwdXJycyBhY3Jvc3MgYWxsIHByb2Nlc3NvcnMuIFRoaXMgaXMgdXNlZCB0byBmdXJ0aGVyCisgKiBjYWxjdWxhdGUgdXNhZ2UgdmFsdWVzIGJ5IGRpZmZlcmVudCBhcHBsaWNhdGlvbnMKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3B1cnIodm9pZCkKIHsKQEAgLTU3LDQ4ICs1NCwzMSBAQAogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN1bV9wdXJyICs9IGxwcGFjYVtjcHVdLmVtdWxhdGVkX3RpbWVfYmFzZTsKKwkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCQlzdW1fcHVyciArPSBscHBhY2FbY3B1XS5lbXVsYXRlZF90aW1lX2Jhc2U7CisJCWVsc2UgeworCQkJc3RydWN0IGNwdV91c2FnZSAqY3U7CiAKLSNpZmRlZiBQVVJSX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gImdldF9wdXJyIGZvciBjcHUgKCVkKSBoYXMgdmFsdWUgKCVsZCkgXG4iLAotCQkJY3B1LCBscHBhY2FbY3B1XS5lbXVsYXRlZF90aW1lX2Jhc2UpOwotI2VuZGlmCisJCQljdSA9ICZwZXJfY3B1KGNwdV91c2FnZV9hcnJheSwgY3B1KTsKKwkJCXN1bV9wdXJyICs9IGN1LT5jdXJyZW50X3RiOworCQl9CiAJfQogCXJldHVybiBzdW1fcHVycjsKIH0KIAotI2RlZmluZSBscGFyY2ZnX3dyaXRlIE5VTEwKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIAogLyoKICAqIE1ldGhvZHMgdXNlZCB0byBmZXRjaCBMUEFSIGRhdGEgd2hlbiBydW5uaW5nIG9uIGFuIGlTZXJpZXMgcGxhdGZvcm0uCiAgKi8KLXN0YXRpYyBpbnQgbHBhcmNmZ19kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3N0YXRpYyBpbnQgaXNlcmllc19scGFyY2ZnX2RhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXVuc2lnbmVkIGxvbmcgcG9vbF9pZCwgbHBfaW5kZXg7CisJdW5zaWduZWQgbG9uZyBwb29sX2lkOwogCWludCBzaGFyZWQsIGVudGl0bGVkX2NhcGFjaXR5LCBtYXhfZW50aXRsZWRfY2FwYWNpdHk7CiAJaW50IHByb2Nlc3NvcnMsIG1heF9wcm9jZXNzb3JzOwogCXVuc2lnbmVkIGxvbmcgcHVyciA9IGdldF9wdXJyKCk7CiAKLQlzZXFfcHJpbnRmKG0sICIlcyAlcyBcbiIsIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7Ci0KIAlzaGFyZWQgPSAoaW50KShnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKTsKLQlzZXFfcHJpbnRmKG0sICJzZXJpYWxfbnVtYmVyPSVjJWMlYyVjJWMlYyVjXG4iLAotCQkgICBlMmEoeEl0RXh0VnBkUGFuZWwubWZnSURbMl0pLAotCQkgICBlMmEoeEl0RXh0VnBkUGFuZWwubWZnSURbM10pLAotCQkgICBlMmEoeEl0RXh0VnBkUGFuZWwuc3lzdGVtU2VyaWFsWzFdKSwKLQkJICAgZTJhKHhJdEV4dFZwZFBhbmVsLnN5c3RlbVNlcmlhbFsyXSksCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5zeXN0ZW1TZXJpYWxbM10pLAotCQkgICBlMmEoeEl0RXh0VnBkUGFuZWwuc3lzdGVtU2VyaWFsWzRdKSwKLQkJICAgZTJhKHhJdEV4dFZwZFBhbmVsLnN5c3RlbVNlcmlhbFs1XSkpOwotCi0Jc2VxX3ByaW50ZihtLCAic3lzdGVtX3R5cGU9JWMlYyVjJWNcbiIsCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5tYWNoaW5lVHlwZVswXSksCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5tYWNoaW5lVHlwZVsxXSksCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5tYWNoaW5lVHlwZVsyXSksCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5tYWNoaW5lVHlwZVszXSkpOwotCi0JbHBfaW5kZXggPSBIdkxwQ29uZmlnX2dldExwSW5kZXgoKTsKLQlzZXFfcHJpbnRmKG0sICJwYXJ0aXRpb25faWQ9JWRcbiIsIChpbnQpbHBfaW5kZXgpOwogCiAJc2VxX3ByaW50ZihtLCAic3lzdGVtX2FjdGl2ZV9wcm9jZXNzb3JzPSVkXG4iLAogCQkgICAoaW50KUh2THBDb25maWdfZ2V0U3lzdGVtUGh5c2ljYWxQcm9jZXNzb3JzKCkpOwpAQCAtMTM3LDYgKzExNywxNCBAQAogCiAJcmV0dXJuIDA7CiB9CisKKyNlbHNlCQkJCS8qIENPTkZJR19QUENfSVNFUklFUyAqLworCitzdGF0aWMgaW50IGlzZXJpZXNfbHBhcmNmZ19kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmCQkJCS8qIENPTkZJR19QUENfSVNFUklFUyAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCkBAIC0yMTMsMjIgKzIwMSw2IEBACiAJCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX1BJQyIpOwogfQogCi0vKiBUcmFjayBzdW0gb2YgYWxsIHB1cnJzIGFjcm9zcyBhbGwgcHJvY2Vzc29ycy4gVGhpcyBpcyB1c2VkIHRvIGZ1cnRoZXIgKi8KLS8qIGNhbGN1bGF0ZSB1c2FnZSB2YWx1ZXMgYnkgZGlmZmVyZW50IGFwcGxpY2F0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3B1cnIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN1bV9wdXJyID0gMDsKLQlpbnQgY3B1OwotCXN0cnVjdCBjcHVfdXNhZ2UgKmN1OwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQljdSA9ICZwZXJfY3B1KGNwdV91c2FnZV9hcnJheSwgY3B1KTsKLQkJc3VtX3B1cnIgKz0gY3UtPmN1cnJlbnRfdGI7Ci0JfQotCXJldHVybiBzdW1fcHVycjsKLX0KLQogI2RlZmluZSBTUExQQVJfQ0hBUkFDVEVSSVNUSUNTX1RPS0VOIDIwCiAjZGVmaW5lIFNQTFBBUl9NQVhMRU5HVEggMTAyNiooc2l6ZW9mKGNoYXIpKQogCkBAIC0zMzMsMzUgKzMwNSwxMyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBscGFyY2ZnX2RhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorc3RhdGljIGludCBwc2VyaWVzX2xwYXJjZmdfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IHBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29yczsKIAlpbnQgcGFydGl0aW9uX2FjdGl2ZV9wcm9jZXNzb3JzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdGRuOwotCWNvbnN0IGNoYXIgKm1vZGVsID0gIiI7Ci0JY29uc3QgY2hhciAqc3lzdGVtX2lkID0gIiI7Ci0JdW5zaWduZWQgaW50ICpscF9pbmRleF9wdHIsIGxwX2luZGV4ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJ0YXNfbm9kZTsKIAlpbnQgKmxyZHJwID0gTlVMTDsKIAotCXJvb3RkbiA9IGZpbmRfcGF0aF9kZXZpY2UoIi8iKTsKLQlpZiAocm9vdGRuKSB7Ci0JCW1vZGVsID0gZ2V0X3Byb3BlcnR5KHJvb3RkbiwgIm1vZGVsIiwgTlVMTCk7Ci0JCXN5c3RlbV9pZCA9IGdldF9wcm9wZXJ0eShyb290ZG4sICJzeXN0ZW0taWQiLCBOVUxMKTsKLQkJbHBfaW5kZXhfcHRyID0gKHVuc2lnbmVkIGludCAqKQotCQkgICAgZ2V0X3Byb3BlcnR5KHJvb3RkbiwgImlibSxwYXJ0aXRpb24tbm8iLCBOVUxMKTsKLQkJaWYgKGxwX2luZGV4X3B0cikKLQkJCWxwX2luZGV4ID0gKmxwX2luZGV4X3B0cjsKLQl9Ci0KLQlzZXFfcHJpbnRmKG0sICIlcyAlcyBcbiIsIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7Ci0KLQlzZXFfcHJpbnRmKG0sICJzZXJpYWxfbnVtYmVyPSVzXG4iLCBzeXN0ZW1faWQpOwotCi0Jc2VxX3ByaW50ZihtLCAic3lzdGVtX3R5cGU9JXNcbiIsIG1vZGVsKTsKLQotCXNlcV9wcmludGYobSwgInBhcnRpdGlvbl9pZD0lZFxuIiwgKGludClscF9pbmRleCk7Ci0KIAlydGFzX25vZGUgPSBmaW5kX3BhdGhfZGV2aWNlKCIvcnRhcyIpOwogCWlmIChydGFzX25vZGUpCiAJCWxyZHJwID0gKGludCAqKWdldF9wcm9wZXJ0eShydGFzX25vZGUsICJpYm0sbHJkci1jYXBhY2l0eSIsCkBAIC01NDksOCArNDk5LDYxIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorI2Vsc2UJCQkJLyogQ09ORklHX1BQQ19QU0VSSUVTICovCisKK3N0YXRpYyBpbnQgcHNlcmllc19scGFyY2ZnX2RhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBscGFyY2ZnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmYpCit7CisJcmV0dXJuIGNvdW50OworfQorCiAjZW5kaWYJCQkJLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKK3N0YXRpYyBpbnQgbHBhcmNmZ19kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3RkbjsKKwljb25zdCBjaGFyICptb2RlbCA9ICIiOworCWNvbnN0IGNoYXIgKnN5c3RlbV9pZCA9ICIiOworCWNvbnN0IGNoYXIgKnRtcDsKKwl1bnNpZ25lZCBpbnQgKmxwX2luZGV4X3B0ciwgbHBfaW5kZXggPSAwOworCisJc2VxX3ByaW50ZihtLCAiJXMgJXMgXG4iLCBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOworCisJcm9vdGRuID0gZmluZF9wYXRoX2RldmljZSgiLyIpOworCWlmIChyb290ZG4pIHsKKwkJdG1wID0gZ2V0X3Byb3BlcnR5KHJvb3RkbiwgIm1vZGVsIiwgTlVMTCk7CisJCWlmICh0bXApIHsKKwkJCW1vZGVsID0gdG1wOworCQkJLyogU2tpcCAiSUJNLCIgLSBzZWUgcGxhdGZvcm1zL2lzZXJpZXMvZHQuYyAqLworCQkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCQkJbW9kZWwgKz0gNDsKKwkJfQorCQl0bXAgPSBnZXRfcHJvcGVydHkocm9vdGRuLCAic3lzdGVtLWlkIiwgTlVMTCk7CisJCWlmICh0bXApIHsKKwkJCXN5c3RlbV9pZCA9IHRtcDsKKwkJCS8qIFNraXAgIklCTSwiIC0gc2VlIHBsYXRmb3Jtcy9pc2VyaWVzL2R0LmMgKi8KKwkJCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQkJCXN5c3RlbV9pZCArPSA0OworCQl9CisJCWxwX2luZGV4X3B0ciA9ICh1bnNpZ25lZCBpbnQgKikKKwkJCWdldF9wcm9wZXJ0eShyb290ZG4sICJpYm0scGFydGl0aW9uLW5vIiwgTlVMTCk7CisJCWlmIChscF9pbmRleF9wdHIpCisJCQlscF9pbmRleCA9ICpscF9pbmRleF9wdHI7CisJfQorCXNlcV9wcmludGYobSwgInNlcmlhbF9udW1iZXI9JXNcbiIsIHN5c3RlbV9pZCk7CisJc2VxX3ByaW50ZihtLCAic3lzdGVtX3R5cGU9JXNcbiIsIG1vZGVsKTsKKwlzZXFfcHJpbnRmKG0sICJwYXJ0aXRpb25faWQ9JWRcbiIsIChpbnQpbHBfaW5kZXgpOworCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXJldHVybiBpc2VyaWVzX2xwYXJjZmdfZGF0YShtLCB2KTsKKwlyZXR1cm4gcHNlcmllc19scGFyY2ZnX2RhdGEobSwgdik7Cit9CisKIHN0YXRpYyBpbnQgbHBhcmNmZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBscGFyY2ZnX2RhdGEsIE5VTEwpOwpAQCAtNTY5LDcgKzU3Miw4IEBACiAJbW9kZV90IG1vZGUgPSBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEg7CiAKIAkvKiBBbGxvdyB3cml0aW5nIGlmIHdlIGhhdmUgRldfRkVBVFVSRV9TUExQQVIgKi8KLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpKSB7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSAmJgorCQkJIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpIHsKIAkJbHBhcmNmZ19mb3BzLndyaXRlID0gbHBhcmNmZ193cml0ZTsKIAkJbW9kZSB8PSBTX0lXVVNSOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKaW5kZXggYThmYTA0ZS4uYjQzOGQ0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKQEAgLTM3OCwxMSArMzc4LDEzIEBACiAJb2Zfbm9kZV9wdXQobm9kZSk7CiB9CiAKLXZvaWQgX19pbml0IGtleGVjX3NldHVwKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBrZXhlY19zZXR1cCh2b2lkKQogewogCWV4cG9ydF9odGFiX3ZhbHVlcygpOwogCWV4cG9ydF9jcmFzaGtfdmFsdWVzKCk7CisJcmV0dXJuIDA7CiB9CitfX2luaXRjYWxsKGtleGVjX3NldHVwKTsKIAogc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfY3Jhc2hrKGNoYXIgKnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMjMwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxsYW5lb3VzIGxvdy1sZXZlbCBmdW5jdGlvbnMuCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKKyAqCisgKiBMYXJnZWx5IHJld3JpdHRlbiBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQorICogYW5kIFBhdWwgTWFja2VycmFzLgorICoKKyAqIEFkYXB0ZWQgZm9yIGlTZXJpZXMgYnkgTWlrZSBDb3JyaWdhbiAobWlrZWpjQHVzLmlibS5jb20pCisgKiBQUEM2NCB1cGRhdGVzIGJ5IERhdmUgRW5nZWJyZXRzZW4gKGVuZ2VicmV0QHVzLmlibS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKKwkudGV4dAorCisjaWZkZWYgQ09ORklHX1BQQzY0CisjZGVmaW5lIElOX1NZTkMJCXR3aQkwLHI1LDA7IGlzeW5jCisjZGVmaW5lIEVJRUlPXzMyCisjZGVmaW5lIFNZTkNfNjQJCXN5bmMKKyNlbHNlIC8qIENPTkZJR19QUEMzMiAqLworI2RlZmluZSBJTl9TWU5DCisjZGVmaW5lIEVJRUlPXzMyCWVpZWlvCisjZGVmaW5lIFNZTkNfNjQKKyNlbmRpZgorLyoKKyAqIFJldHVybnMgKGFkZHJlc3Mgd2UgYXJlIHJ1bm5pbmcgYXQpIC0gKGFkZHJlc3Mgd2Ugd2VyZSBsaW5rZWQgYXQpCisgKiBmb3IgdXNlIGJlZm9yZSB0aGUgdGV4dCBhbmQgZGF0YSBhcmUgbWFwcGVkIHRvIEtFUk5FTEJBU0UuCisgKi8KKworX0dMT0JBTChyZWxvY19vZmZzZXQpCisJbWZscglyMAorCWJsCTFmCisxOgltZmxyCXIzCisJTE9BRF9SRUdfSU1NRURJQVRFKHI0LDFiKQorCXN1YmYJcjMscjQscjMKKwltdGxyCXIwCisJYmxyCisKKy8qCisgKiBhZGRfcmVsb2Nfb2Zmc2V0KHgpIHJldHVybnMgeCArIHJlbG9jX29mZnNldCgpLgorICovCitfR0xPQkFMKGFkZF9yZWxvY19vZmZzZXQpCisJbWZscglyMAorCWJsCTFmCisxOgltZmxyCXI1CisJTE9BRF9SRUdfSU1NRURJQVRFKHI0LDFiKQorCXN1YmYJcjUscjQscjUKKwlhZGQJcjMscjMscjUKKwltdGxyCXIwCisJYmxyCisKKy8qCisgKiBJL08gc3RyaW5nIG9wZXJhdGlvbnMKKyAqCisgKiBpbnNiKHBvcnQsIGJ1ZiwgbGVuKQorICogb3V0c2IocG9ydCwgYnVmLCBsZW4pCisgKiBpbnN3KHBvcnQsIGJ1ZiwgbGVuKQorICogb3V0c3cocG9ydCwgYnVmLCBsZW4pCisgKiBpbnNsKHBvcnQsIGJ1ZiwgbGVuKQorICogb3V0c2wocG9ydCwgYnVmLCBsZW4pCisgKiBpbnN3X25zKHBvcnQsIGJ1ZiwgbGVuKQorICogb3V0c3dfbnMocG9ydCwgYnVmLCBsZW4pCisgKiBpbnNsX25zKHBvcnQsIGJ1ZiwgbGVuKQorICogb3V0c2xfbnMocG9ydCwgYnVmLCBsZW4pCisgKgorICogVGhlICpfbnMgdmVyc2lvbnMgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KKyAqLworX0dMT0JBTChfaW5zYikKKwljbXB3aQkwLHI1LDAKKwltdGN0cglyNQorCXN1YmkJcjQscjQsMQorCWJsZWxyLQorMDA6CWxieglyNSwwKHIzKQorCWVpZWlvCisJc3RidQlyNSwxKHI0KQorCWJkbnoJMDBiCisJSU5fU1lOQworCWJscgorCitfR0xPQkFMKF9vdXRzYikKKwljbXB3aQkwLHI1LDAKKwltdGN0cglyNQorCXN1YmkJcjQscjQsMQorCWJsZWxyLQorMDA6CWxienUJcjUsMShyNCkKKwlzdGIJcjUsMChyMykKKwlFSUVJT18zMgorCWJkbnoJMDBiCisJU1lOQ182NAorCWJscgorCitfR0xPQkFMKF9pbnN3KQorCWNtcHdpCTAscjUsMAorCW10Y3RyCXI1CisJc3ViaQlyNCxyNCwyCisJYmxlbHItCiswMDoJbGhicngJcjUsMCxyMworCWVpZWlvCisJc3RodQlyNSwyKHI0KQorCWJkbnoJMDBiCisJSU5fU1lOQworCWJscgorCitfR0xPQkFMKF9vdXRzdykKKwljbXB3aQkwLHI1LDAKKwltdGN0cglyNQorCXN1YmkJcjQscjQsMgorCWJsZWxyLQorMDA6CWxoenUJcjUsMihyNCkKKwlFSUVJT18zMgorCXN0aGJyeAlyNSwwLHIzCisJYmRuegkwMGIKKwlTWU5DXzY0CisJYmxyCisKK19HTE9CQUwoX2luc2wpCisJY21wd2kJMCxyNSwwCisJbXRjdHIJcjUKKwlzdWJpCXI0LHI0LDQKKwlibGVsci0KKzAwOglsd2JyeAlyNSwwLHIzCisJZWllaW8KKwlzdHd1CXI1LDQocjQpCisJYmRuegkwMGIKKwlJTl9TWU5DCisJYmxyCisKK19HTE9CQUwoX291dHNsKQorCWNtcHdpCTAscjUsMAorCW10Y3RyCXI1CisJc3ViaQlyNCxyNCw0CisJYmxlbHItCiswMDoJbHd6dQlyNSw0KHI0KQorCXN0d2JyeAlyNSwwLHIzCisJRUlFSU9fMzIKKwliZG56CTAwYgorCVNZTkNfNjQKKwlibHIKKworI2lmZGVmIENPTkZJR19QUEMzMgorX0dMT0JBTChfX2lkZV9tbV9pbnN3KQorI2VuZGlmCitfR0xPQkFMKF9pbnN3X25zKQorCWNtcHdpCTAscjUsMAorCW10Y3RyCXI1CisJc3ViaQlyNCxyNCwyCisJYmxlbHItCiswMDoJbGh6CXI1LDAocjMpCisJZWllaW8KKwlzdGh1CXI1LDIocjQpCisJYmRuegkwMGIKKwlJTl9TWU5DCisJYmxyCisKKyNpZmRlZiBDT05GSUdfUFBDMzIKK19HTE9CQUwoX19pZGVfbW1fb3V0c3cpCisjZW5kaWYKK19HTE9CQUwoX291dHN3X25zKQorCWNtcHdpCTAscjUsMAorCW10Y3RyCXI1CisJc3ViaQlyNCxyNCwyCisJYmxlbHItCiswMDoJbGh6dQlyNSwyKHI0KQorCXN0aAlyNSwwKHIzKQorCUVJRUlPXzMyCisJYmRuegkwMGIKKwlTWU5DXzY0CisJYmxyCisKKyNpZmRlZiBDT05GSUdfUFBDMzIKK19HTE9CQUwoX19pZGVfbW1faW5zbCkKKyNlbmRpZgorX0dMT0JBTChfaW5zbF9ucykKKwljbXB3aQkwLHI1LDAKKwltdGN0cglyNQorCXN1YmkJcjQscjQsNAorCWJsZWxyLQorMDA6CWx3eglyNSwwKHIzKQorCWVpZWlvCisJc3R3dQlyNSw0KHI0KQorCWJkbnoJMDBiCisJSU5fU1lOQworCWJscgorCisjaWZkZWYgQ09ORklHX1BQQzMyCitfR0xPQkFMKF9faWRlX21tX291dHNsKQorI2VuZGlmCitfR0xPQkFMKF9vdXRzbF9ucykKKwljbXB3aQkwLHI1LDAKKwltdGN0cglyNQorCXN1YmkJcjQscjQsNAorCWJsZWxyLQorMDA6CWx3enUJcjUsNChyNCkKKwlzdHcJcjUsMChyMykKKwlFSUVJT18zMgorCWJkbnoJMDBiCisJU1lOQ182NAorCWJscgorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCmluZGV4IDAxZDM5MTYuLjU4NzU4ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCkBAIC0xNiw3ICsxNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CkBAIC02MSwzMiArNjAsNiBAQAogCWJscgogCiAvKgotICogUmV0dXJucyAoYWRkcmVzcyB3ZSdyZSBydW5uaW5nIGF0KSAtIChhZGRyZXNzIHdlIHdlcmUgbGlua2VkIGF0KQotICogZm9yIHVzZSBiZWZvcmUgdGhlIHRleHQgYW5kIGRhdGEgYXJlIG1hcHBlZCB0byBLRVJORUxCQVNFLgotICovCi1fR0xPQkFMKHJlbG9jX29mZnNldCkKLQltZmxyCXIwCi0JYmwJMWYKLTE6CW1mbHIJcjMKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsMWIpCi0Jc3ViZglyMyxyNCxyMwotCW10bHIJcjAKLQlibHIKLQotLyoKLSAqIGFkZF9yZWxvY19vZmZzZXQoeCkgcmV0dXJucyB4ICsgcmVsb2Nfb2Zmc2V0KCkuCi0gKi8KLV9HTE9CQUwoYWRkX3JlbG9jX29mZnNldCkKLQltZmxyCXIwCi0JYmwJMWYKLTE6CW1mbHIJcjUKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsMWIpCi0Jc3ViZglyNSxyNCxyNQotCWFkZAlyMyxyMyxyNQotCW10bHIJcjAKLQlibHIKLQotLyoKICAqIHN1Yl9yZWxvY19vZmZzZXQoeCkgcmV0dXJucyB4IC0gcmVsb2Nfb2Zmc2V0KCkuCiAgKi8KIF9HTE9CQUwoc3ViX3JlbG9jX29mZnNldCkKQEAgLTc4MSwxMzYgKzc1NCw2IEBACiAJYmxyCiAKIC8qCi0gKiBJL08gc3RyaW5nIG9wZXJhdGlvbnMKLSAqCi0gKiBpbnNiKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c2IocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnN3KHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c3cocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnNsKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c2wocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnN3X25zKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c3dfbnMocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnNsX25zKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c2xfbnMocG9ydCwgYnVmLCBsZW4pCi0gKgotICogVGhlICpfbnMgdmVyc2lvbnMgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KLSAqLwotX0dMT0JBTChfaW5zYikKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMQotCWJsZWxyLQotMDA6CWxieglyNSwwKHIzKQotCWVpZWlvCi0Jc3RidQlyNSwxKHI0KQotCWJkbnoJMDBiCi0JYmxyCi0KLV9HTE9CQUwoX291dHNiKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCwxCi0JYmxlbHItCi0wMDoJbGJ6dQlyNSwxKHI0KQotCXN0YglyNSwwKHIzKQotCWVpZWlvCi0JYmRuegkwMGIKLQlibHIKLQotX0dMT0JBTChfaW5zdykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoYnJ4CXI1LDAscjMKLQllaWVpbwotCXN0aHUJcjUsMihyNCkKLQliZG56CTAwYgotCWJscgotCi1fR0xPQkFMKF9vdXRzdykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoenUJcjUsMihyNCkKLQllaWVpbwotCXN0aGJyeAlyNSwwLHIzCi0JYmRuegkwMGIKLQlibHIKLQotX0dMT0JBTChfaW5zbCkKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsNAotCWJsZWxyLQotMDA6CWx3YnJ4CXI1LDAscjMKLQllaWVpbwotCXN0d3UJcjUsNChyNCkKLQliZG56CTAwYgotCWJscgotCi1fR0xPQkFMKF9vdXRzbCkKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsNAotCWJsZWxyLQotMDA6CWx3enUJcjUsNChyNCkKLQlzdHdicngJcjUsMCxyMwotCWVpZWlvCi0JYmRuegkwMGIKLQlibHIKLQotX0dMT0JBTChfX2lkZV9tbV9pbnN3KQotX0dMT0JBTChfaW5zd19ucykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoeglyNSwwKHIzKQotCWVpZWlvCi0Jc3RodQlyNSwyKHI0KQotCWJkbnoJMDBiCi0JYmxyCi0KLV9HTE9CQUwoX19pZGVfbW1fb3V0c3cpCi1fR0xPQkFMKF9vdXRzd19ucykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoenUJcjUsMihyNCkKLQlzdGgJcjUsMChyMykKLQllaWVpbwotCWJkbnoJMDBiCi0JYmxyCi0KLV9HTE9CQUwoX19pZGVfbW1faW5zbCkKLV9HTE9CQUwoX2luc2xfbnMpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd3oJcjUsMChyMykKLQllaWVpbwotCXN0d3UJcjUsNChyNCkKLQliZG56CTAwYgotCWJscgotCi1fR0xPQkFMKF9faWRlX21tX291dHNsKQotX0dMT0JBTChfb3V0c2xfbnMpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd3p1CXI1LDQocjQpCi0Jc3R3CXI1LDAocjMpCi0JZWllaW8KLQliZG56CTAwYgotCWJscgotCi0vKgogICogRXh0ZW5kZWQgcHJlY2lzaW9uIHNoaWZ0cy4KICAqCiAgKiBVcGRhdGVkIHRvIGJlIHZhbGlkIGZvciBzaGlmdCBjb3VudHMgZnJvbSAwIHRvIDYzIGluY2x1c2l2ZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMKaW5kZXggZTg4ODNkNC4uYmZiNDA3ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC0xLDE0ICsxLDEyIEBACiAvKgotICogIGFyY2gvcG93ZXJwYy9rZXJuZWwvbWlzYzY0LlMKLSAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgbWlzY2VsbGFuZW91cyBsb3ctbGV2ZWwgZnVuY3Rpb25zLgogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCiAgKgogICogTGFyZ2VseSByZXdyaXR0ZW4gYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkKICAqIGFuZCBQYXVsIE1hY2tlcnJhcy4KICAqIEFkYXB0ZWQgZm9yIGlTZXJpZXMgYnkgTWlrZSBDb3JyaWdhbiAobWlrZWpjQHVzLmlibS5jb20pCi0gKiBQUEM2NCB1cGRhdGVzIGJ5IERhdmUgRW5nZWJyZXRzZW4gKGVuZ2VicmV0QHVzLmlibS5jb20pIAotICogCisgKiBQUEM2NCB1cGRhdGVzIGJ5IERhdmUgRW5nZWJyZXRzZW4gKGVuZ2VicmV0QHVzLmlibS5jb20pCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMTYsNyArMTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpAQCAtMzAsNDEgKzI3LDEwIEBACiAKIAkudGV4dAogCi0vKgotICogUmV0dXJucyAoYWRkcmVzcyB3ZSBhcmUgcnVubmluZyBhdCkgLSAoYWRkcmVzcyB3ZSB3ZXJlIGxpbmtlZCBhdCkKLSAqIGZvciB1c2UgYmVmb3JlIHRoZSB0ZXh0IGFuZCBkYXRhIGFyZSBtYXBwZWQgdG8gS0VSTkVMQkFTRS4KLSAqLwotCi1fR0xPQkFMKHJlbG9jX29mZnNldCkKLQltZmxyCXIwCi0JYmwJMWYKLTE6CW1mbHIJcjMKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsMWIpCi0Jc3ViZglyMyxyNCxyMwotCW10bHIJcjAKLQlibHIKLQotLyoKLSAqIGFkZF9yZWxvY19vZmZzZXQoeCkgcmV0dXJucyB4ICsgcmVsb2Nfb2Zmc2V0KCkuCi0gKi8KLV9HTE9CQUwoYWRkX3JlbG9jX29mZnNldCkKLQltZmxyCXIwCi0JYmwJMWYKLTE6CW1mbHIJcjUKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsMWIpCi0Jc3ViZglyNSxyNCxyNQotCWFkZAlyMyxyMyxyNQotCW10bHIJcjAKLQlibHIKLQogX0dMT0JBTChnZXRfbXNyKQogCW1mbXNyCXIzCiAJYmxyCiAKLV9HTE9CQUwoZ2V0X2RhcikKLQltZmRhcglyMwotCWJscgotCiBfR0xPQkFMKGdldF9zcnIwKQogCW1mc3JyMCAgcjMKIAlibHIKQEAgLTcyLDEwICszOCw2IEBACiBfR0xPQkFMKGdldF9zcnIxKQogCW1mc3JyMSAgcjMKIAlibHIKLQkKLV9HTE9CQUwoZ2V0X3NwKQotCW1yCXIzLHIxCi0JYmxyCiAKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCiBfR0xPQkFMKGNhbGxfZG9fc29mdGlycSkKQEAgLTg5LDYwICs1MSwyMCBAQAogCW10bHIJcjAKIAlibHIKIAotX0dMT0JBTChjYWxsX19fZG9fSVJRKQorX0dMT0JBTChjYWxsX2hhbmRsZV9pcnEpCisJbGQJcjgsMChyNykKIAltZmxyCXIwCiAJc3RkCXIwLDE2KHIxKQotCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI1KQotCW1yCXIxLHI1Ci0JYmwJLl9fZG9fSVJRCisJbXRjdHIJcjgKKwlzdGR1CXIxLFRIUkVBRF9TSVpFLTExMihyNikKKwltcglyMSxyNgorCWJjdHJsCiAJbGQJcjEsMChyMSkKIAlsZAlyMCwxNihyMSkKIAltdGxyCXIwCiAJYmxyCiAjZW5kaWYgLyogQ09ORklHX0lSUVNUQUNLUyAqLwogCi0JLyoKLSAqIFRvIGJlIGNhbGxlZCBieSBDIGNvZGUgd2hpY2ggbmVlZHMgdG8gZG8gc29tZSBvcGVyYXRpb25zIHdpdGggTU1VCi0gKiBkaXNhYmxlZC4gTm90ZSB0aGF0IGludGVycnVwdHMgaGF2ZSB0byBiZSBkaXNhYmxlZCBieSB0aGUgY2FsbGVyCi0gKiBwcmlvciB0byBjYWxsaW5nIHVzLiBUaGUgY29kZSBjYWxsZWQgX01VU1RfIGJlIGluIHRoZSBSTU8gb2YgY291cnNlCi0gKiBhbmQgcGFydCBvZiB0aGUgbGluZWFyIG1hcHBpbmcgYXMgd2UgZG9uJ3QgYXR0ZW1wdCB0byB0cmFuc2xhdGUgdGhlCi0gKiBzdGFjayBwb2ludGVyIGF0IGFsbC4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzdGFjayBzd2l0Y2hlZAotICogdG8gdGhpcyBDUFUgZW1lcmdlbmN5IHN0YWNrCi0gKgotICogcHJvdG90eXBlIGlzIHZvaWQgKmNhbGxfd2l0aF9tbXVfb2ZmKHZvaWQgKmZ1bmMsIHZvaWQgKmRhdGEpOwotICoKLSAqIHRoZSBjYWxsZWQgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdGhlIGZvcm0KLSAqCi0gKiB2b2lkICpjYWxsZWQodm9pZCAqZGF0YSk7IAotICovCi1fR0xPQkFMKGNhbGxfd2l0aF9tbXVfb2ZmKQotCW1mbHIJcjAJCQkvKiBnZXQgbGluaywgc2F2ZSBpdCBvbiBzdGFja2ZyYW1lICovCi0Jc3RkCXIwLDE2KHIxKQotCW1yCXIxLHI1CQkJLyogc2F2ZSBvbGQgc3RhY2sgcHRyICovCi0JbGQJcjEsUEFDQUVNRVJHU1AocjEzKQkvKiBnZXQgZW1lcmcuIHN0YWNrICovCi0Jc3ViaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotCXN0ZAlyMCwxNihyMSkJCS8qIHNhdmUgbGluayBvbiBlbWVyZy4gc3RhY2sgKi8KLQlzdGQJcjUsMChyMSkJCS8qIHNhdmUgb2xkIHN0YWNrIHB0ciBpbiBiYWNrY2hhaW4gKi8KLQlsZAlyMywwKHIzKQkJLyogZ2V0IHRvIHJlYWwgZnVuY3Rpb24gcHRyIChhc3N1bWUgc2FtZSBUT0MpICovCi0JYmwJMmYJCQkvKiB3ZSBuZWVkIExSIHRvIHJldHVybiwgY29udGludWUgYXQgbGFiZWwgMiAqLwotCi0JbGQJcjAsMTYocjEpCQkvKiB3ZSByZXR1cm4gaGVyZSBmcm9tIHRoZSBjYWxsLCBnZXQgTFIgYW5kICovCi0JbGQJcjEsMChyMSkJCS8qIC4uIG9sZCBzdGFjayBwdHIgKi8KLQltdHNwcglTUFJOX1NSUjAscjAJCS8qIGFuZCBnZXQgYmFjayB0byB2aXJ0dWFsIG1vZGUgd2l0aCB0aGVzZSAqLwotCW1mbXNyCXI0Ci0Jb3JpCXI0LHI0LE1TUl9JUnxNU1JfRFIKLQltdHNwcglTUFJOX1NSUjEscjQKLQlyZmlkCi0KLTI6CW10c3ByCVNQUk5fU1JSMCxyMwkJLyogY29taW5nIGZyb20gYWJvdmUsIGVudGVyIHJlYWwgbW9kZSAqLwotCW1yCXIzLHI0CQkJLyogZ2V0IHBhcmFtZXRlciAqLwotCW1mbXNyCXIwCi0Jb3JpCXIwLHIwLE1TUl9JUnxNU1JfRFIKLQl4b3JpCXIwLHIwLE1TUl9JUnxNU1JfRFIKLQltdHNwcglTUFJOX1NSUjEscjAKLQlyZmlkCi0KLQogCS5zZWN0aW9uCSIudG9jIiwiYXciCiBQUEM2NF9DQUNIRVM6CiAJLnRjCQlwcGM2NF9jYWNoZXNbVENdLHBwYzY0X2NhY2hlcwpAQCAtMzIzLDE0NCArMjQ1LDYgQEAKIAliZG56CTFiCiAJaXN5bmMKIAlibHIKLQkKLS8qCi0gKiBJL08gc3RyaW5nIG9wZXJhdGlvbnMKLSAqCi0gKiBpbnNiKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c2IocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnN3KHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c3cocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnNsKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c2wocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnN3X25zKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c3dfbnMocG9ydCwgYnVmLCBsZW4pCi0gKiBpbnNsX25zKHBvcnQsIGJ1ZiwgbGVuKQotICogb3V0c2xfbnMocG9ydCwgYnVmLCBsZW4pCi0gKgotICogVGhlICpfbnMgdmVyc2lvbnMgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KLSAqLwotX0dMT0JBTChfaW5zYikKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMQotCWJsZWxyLQotMDA6CWxieglyNSwwKHIzKQotCWVpZWlvCi0Jc3RidQlyNSwxKHI0KQotCWJkbnoJMDBiCi0JdHdpCTAscjUsMAotCWlzeW5jCi0JYmxyCi0KLV9HTE9CQUwoX291dHNiKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCwxCi0JYmxlbHItCi0wMDoJbGJ6dQlyNSwxKHI0KQotCXN0YglyNSwwKHIzKQotCWJkbnoJMDBiCi0Jc3luYwotCWJscgkKLQotX0dMT0JBTChfaW5zdykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoYnJ4CXI1LDAscjMKLQllaWVpbwotCXN0aHUJcjUsMihyNCkKLQliZG56CTAwYgotCXR3aQkwLHI1LDAKLQlpc3luYwotCWJscgotCi1fR0xPQkFMKF9vdXRzdykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoenUJcjUsMihyNCkKLQlzdGhicngJcjUsMCxyMwkKLQliZG56CTAwYgotCXN5bmMKLQlibHIJCi0KLV9HTE9CQUwoX2luc2wpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd2JyeAlyNSwwLHIzCi0JZWllaW8KLQlzdHd1CXI1LDQocjQpCi0JYmRuegkwMGIKLQl0d2kJMCxyNSwwCi0JaXN5bmMKLQlibHIKLQotX0dMT0JBTChfb3V0c2wpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd3p1CXI1LDQocjQpCi0Jc3R3YnJ4CXI1LDAscjMKLQliZG56CTAwYgotCXN5bmMKLQlibHIJCi0KLS8qIF9HTE9CQUwoaWRlX2luc3cpIG5vdyBpbiBkcml2ZXJzL2lkZS9pZGUtaW9wcy5jICovCi1fR0xPQkFMKF9pbnN3X25zKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCwyCi0JYmxlbHItCi0wMDoJbGh6CXI1LDAocjMpCi0JZWllaW8KLQlzdGh1CXI1LDIocjQpCi0JYmRuegkwMGIKLQl0d2kJMCxyNSwwCi0JaXN5bmMKLQlibHIKLQotLyogX0dMT0JBTChpZGVfb3V0c3cpIG5vdyBpbiBkcml2ZXJzL2lkZS9pZGUtaW9wcy5jICovCi1fR0xPQkFMKF9vdXRzd19ucykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsMgotCWJsZWxyLQotMDA6CWxoenUJcjUsMihyNCkKLQlzdGgJcjUsMChyMykKLQliZG56CTAwYgotCXN5bmMKLQlibHIJCi0KLV9HTE9CQUwoX2luc2xfbnMpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd3oJcjUsMChyMykKLQllaWVpbwotCXN0d3UJcjUsNChyNCkKLQliZG56CTAwYgotCXR3aQkwLHI1LDAKLQlpc3luYwotCWJscgotCi1fR0xPQkFMKF9vdXRzbF9ucykKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsNAotCWJsZWxyLQotMDA6CWx3enUJcjUsNChyNCkKLQlzdHcJcjUsMChyMykKLQliZG56CTAwYgotCXN5bmMKLQlibHIJCiAKIC8qCiAgKiBpZGVudGlmeV9jcHUgYW5kIGNhbGxzIHNldHVwX2NwdQpAQCAtNjA1LDYgKzM4OSw3IEBACiAJYmxyCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpIHx8IGRlZmluZWQoQ09ORklHX1BQQ19NQVBMRSkgKi8KIAorI2lmZGVmIENPTkZJR19DUFVfRlJFUV9QTUFDNjQKIC8qCiAgKiBTQ09NIGFjY2VzcyBmdW5jdGlvbnMgZm9yIDk3MCAoRlggb25seSBmb3Igbm93KQogICoKQEAgLTY3Myw2ICs0NTgsNyBAQAogCS8qIHJlc3RvcmUgaW50ZXJydXB0cyAqLwogCW10bXNyZAlyNSwxCiAJYmxyCisjZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRX1BNQUM2NCAqLwogCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCA5ZmVlZWVmLi4zMjYyYjczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwppbmRleCBmNTA1YTg4Li5jNjg3NDFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwpAQCAtNyw3ICs3LDYgQEAKICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNiw3ICsxNSw2IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgotI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcmVnX3NhdmUuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwppbmRleCBiNTQzMWNjLi44OThkYWU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKQEAgLTIsNyArMiw2IEBACiAgKiBDb21tb24gcG1hYy9wcmVwL2NocnAgcGNpIHJvdXRpbmVzLiAtLSBDb3J0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC05OSw3ICs5OCw3IEBACiAJCWlmICghcmVzLT5mbGFncykKIAkJCWNvbnRpbnVlOwogCQlpZiAocmVzLT5lbmQgPT0gMHhmZmZmZmZmZikgewotCQkJREJHKCJQQ0k6JXMgUmVzb3VyY2UgJWQgWyUwOGx4LSUwOGx4XSBpcyB1bmFzc2lnbmVkXG4iLAorCQkJREJHKCJQQ0k6JXMgUmVzb3VyY2UgJWQgWyUwMTZsbHgtJTAxNmxseF0gaXMgdW5hc3NpZ25lZFxuIiwKIAkJCSAgICBwY2lfbmFtZShkZXYpLCBpLCByZXMtPnN0YXJ0LCByZXMtPmVuZCk7CiAJCQlyZXMtPmVuZCAtPSByZXMtPnN0YXJ0OwogCQkJcmVzLT5zdGFydCA9IDA7CkBAIC0xMTcsNyArMTE2LDcgQEAKIAkJCXJlcy0+c3RhcnQgKz0gb2Zmc2V0OwogCQkJcmVzLT5lbmQgKz0gb2Zmc2V0OwogI2lmZGVmIERFQlVHCi0JCQlwcmludGsoIkZpeHVwIHJlcyAlZCAoJWx4KSBvZiBkZXYgJXM6ICVseCAtPiAlbHhcbiIsCisJCQlwcmludGsoIkZpeHVwIHJlcyAlZCAoJWx4KSBvZiBkZXYgJXM6ICVsbHggLT4gJWxseFxuIiwKIAkJCSAgICAgICBpLCByZXMtPmZsYWdzLCBwY2lfbmFtZShkZXYpLAogCQkJICAgICAgIHJlcy0+c3RhcnQgLSBvZmZzZXQsIHJlcy0+c3RhcnQpOwogI2VuZGlmCkBAIC0xNzMsMTggKzE3MiwxOCBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQordm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAkJaWYgKHNpemUgPiAweDEwMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEkvTyBSZWdpb24gJXMvJWQgdG9vIGxhcmdlIgotCQkJICAgICAgICIgKCVsZCBieXRlcylcbiIsIHBjaV9uYW1lKGRldiksCi0JCQkgICAgICAgZGV2LT5yZXNvdXJjZSAtIHJlcywgc2l6ZSk7CisJCQkgICAgICAgIiAoJWxsZCBieXRlcylcbiIsIHBjaV9uYW1lKGRldiksCisJCQkgICAgICAgZGV2LT5yZXNvdXJjZSAtIHJlcywgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKIAkJfQogCiAJCWlmIChzdGFydCAmIDB4MzAwKSB7CkBAIC0yNTUsOCArMjU0LDggQEAKIAkJCQl9CiAJCQl9CiAKLQkJCURCRygiUENJOiBicmlkZ2UgcnNyYyAlbHguLiVseCAoJWx4KSwgcGFyZW50ICVwXG4iLAotCQkJICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCByZXMtPmZsYWdzLCBwcik7CisJCQlEQkcoIlBDSTogYnJpZGdlIHJzcmMgJWxseC4uJWxseCAoJWx4KSwgcGFyZW50ICVwXG4iLAorCQkJCXJlcy0+c3RhcnQsIHJlcy0+ZW5kLCByZXMtPmZsYWdzLCBwcik7CiAJCQlpZiAocHIpIHsKIAkJCQlpZiAocmVxdWVzdF9yZXNvdXJjZShwciwgcmVzKSA9PSAwKQogCQkJCQljb250aW51ZTsKQEAgLTMwNiw3ICszMDUsNyBAQAogCSpwcCA9IE5VTEw7CiAJZm9yIChwID0gcmVzLT5jaGlsZDsgcCAhPSBOVUxMOyBwID0gcC0+c2libGluZykgewogCQlwLT5wYXJlbnQgPSByZXM7Ci0JCURCRyhLRVJOX0lORk8gIlBDSTogcmVwYXJlbnRlZCAlcyBbJWx4Li4lbHhdIHVuZGVyICVzXG4iLAorCQlEQkcoS0VSTl9JTkZPICJQQ0k6IHJlcGFyZW50ZWQgJXMgWyVsbHguLiVsbHhdIHVuZGVyICVzXG4iLAogCQkgICAgcC0+bmFtZSwgcC0+c3RhcnQsIHAtPmVuZCwgcmVzLT5uYW1lKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNjIsMTMgKzM2MSwxNCBAQAogCQl0cnkgPSBjb25mbGljdC0+c3RhcnQgLSAxOwogCX0KIAlpZiAocmVxdWVzdF9yZXNvdXJjZShwciwgcmVzKSkgewotCQlEQkcoS0VSTl9FUlIgIlBDSTogaHVoPyBjb3VsZG4ndCBtb3ZlIHRvICVseC4uJWx4XG4iLAorCQlEQkcoS0VSTl9FUlIgIlBDSTogaHVoPyBjb3VsZG4ndCBtb3ZlIHRvICVsbHguLiVsbHhcbiIsCiAJCSAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCk7CiAJCXJldHVybiAtMTsJCS8qICJjYW4ndCBoYXBwZW4iICovCiAJfQogCXVwZGF0ZV9icmlkZ2VfYmFzZShidXMsIGkpOwotCXByaW50ayhLRVJOX0lORk8gIlBDSTogYnJpZGdlICVkIHJlc291cmNlICVkIG1vdmVkIHRvICVseC4uJWx4XG4iLAotCSAgICAgICBidXMtPm51bWJlciwgaSwgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCXByaW50ayhLRVJOX0lORk8gIlBDSTogYnJpZGdlICVkIHJlc291cmNlICVkIG1vdmVkIHRvICVsbHguLiVsbHhcbiIsCisJICAgICAgIGJ1cy0+bnVtYmVyLCBpLCAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCXJldHVybiAwOwogfQogCkBAIC00NzksMTQgKzQ3OSwxNCBAQAogewogCXN0cnVjdCByZXNvdXJjZSAqcHIsICpyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKIAotCURCRygiUENJOiVzOiBSZXNvdXJjZSAlZDogJTA4bHgtJTA4bHggKGY9JWx4KVxuIiwKKwlEQkcoIlBDSTolczogUmVzb3VyY2UgJWQ6ICUwMTZsbHgtJTAxNmxseCAoZj0lbHgpXG4iLAogCSAgICBwY2lfbmFtZShkZXYpLCBpZHgsIHItPnN0YXJ0LCByLT5lbmQsIHItPmZsYWdzKTsKIAlwciA9IHBjaV9maW5kX3BhcmVudF9yZXNvdXJjZShkZXYsIHIpOwogCWlmICghcHIgfHwgcmVxdWVzdF9yZXNvdXJjZShwciwgcikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2UgcmVnaW9uICVkIgogCQkgICAgICAgIiBvZiBkZXZpY2UgJXNcbiIsIGlkeCwgcGNpX25hbWUoZGV2KSk7CiAJCWlmIChwcikKLQkJCURCRygiUENJOiAgcGFyZW50IGlzICVwOiAlMDhseC0lMDhseCAoZj0lbHgpXG4iLAorCQkJREJHKCJQQ0k6ICBwYXJlbnQgaXMgJXA6ICUwMTZsbHgtJTAxNmxseCAoZj0lbHgpXG4iLAogCQkJICAgIHByLCBwci0+c3RhcnQsIHByLT5lbmQsIHByLT5mbGFncyk7CiAJCS8qIFdlJ2xsIGFzc2lnbiBhIG5ldyBhZGRyZXNzIGxhdGVyICovCiAJCXItPmZsYWdzIHw9IElPUkVTT1VSQ0VfVU5TRVQ7CkBAIC05NTYsNyArOTU2LDcgQEAKIAkJCXJlcyA9ICZob3NlLT5pb19yZXNvdXJjZTsKIAkJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCQkJcmVzLT5zdGFydCA9IHJhbmdlc1syXTsKLQkJCURCRygiUENJOiBJTyAweCVseCAtPiAweCVseFxuIiwKKwkJCURCRygiUENJOiBJTyAweCVsbHggLT4gMHglbGx4XG4iLAogCQkJCSAgICByZXMtPnN0YXJ0LCByZXMtPnN0YXJ0ICsgc2l6ZSAtIDEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoJCS8qIG1lbW9yeSBzcGFjZSAqLwpAQCAtOTc4LDcgKzk3OCw3IEBACiAJCQkJaWYocmFuZ2VzWzBdICYgMHg0MDAwMDAwMCkKIAkJCQkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1BSRUZFVENIOwogCQkJCXJlcy0+c3RhcnQgPSByYW5nZXNbbmErMl07Ci0JCQkJREJHKCJQQ0k6IE1FTVslZF0gMHglbHggLT4gMHglbHhcbiIsIG1lbW5vLAorCQkJCURCRygiUENJOiBNRU1bJWRdIDB4JWxseCAtPiAweCVsbHhcbiIsIG1lbW5vLAogCQkJCQkgICAgcmVzLT5zdGFydCwgcmVzLT5zdGFydCArIHNpemUgLSAxKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTA3NCw3ICsxMDc0LDcgQEAKIAlEQkcoIlJlbWFwcGluZyBCdXMgJWQsIGJyaWRnZTogJXNcbiIsIGJ1cy0+bnVtYmVyLCBwY2lfbmFtZShicmlkZ2UpKTsKIAlyZXMuc3RhcnQgLT0gKCh1bnNpZ25lZCBsb25nKSBob3NlLT5pb19iYXNlX3ZpcnQgLSBpc2FfaW9fYmFzZSk7CiAJcmVzLmVuZCAtPSAoKHVuc2lnbmVkIGxvbmcpIGhvc2UtPmlvX2Jhc2VfdmlydCAtIGlzYV9pb19iYXNlKTsKLQlEQkcoIiAgSU8gd2luZG93OiAlMDhseC0lMDhseFxuIiwgcmVzLnN0YXJ0LCByZXMuZW5kKTsKKwlEQkcoIiAgSU8gd2luZG93OiAlMDE2bGx4LSUwMTZsbHhcbiIsIHJlcy5zdGFydCwgcmVzLmVuZCk7CiAKIAkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgSS9PIHNlZ21lbnQgZm9yIHRoaXMgYnVzLiAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFLCAmbCk7CkBAIC0xMjIzLDggKzEyMjMsOCBAQAogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPT0gMCkKIAkJCQkJY29udGludWU7Ci0JCQkJREJHKCJUcnlpbmcgdG8gYWxsb2NhdGUgZnJvbSAlMDhseCwgc2l6ZSAlMDhseCBmcm9tIHBhcmVudCIKLQkJCQkgICAgIiByZXMgJWQ6ICUwOGx4IC0+ICUwOGx4XG4iLAorCQkJCURCRygiVHJ5aW5nIHRvIGFsbG9jYXRlIGZyb20gJTAxNmxseCwgc2l6ZSAlMDE2bGx4IGZyb20gcGFyZW50IgorCQkJCSAgICAiIHJlcyAlZDogJTAxNmxseCAtPiAlMDE2bGx4XG4iLAogCQkJCQlyZXMtPnN0YXJ0LCByZXMtPmVuZCwgaSwgci0+c3RhcnQsIHItPmVuZCk7CiAJCQkKIAkJCQlpZiAoYWxsb2NhdGVfcmVzb3VyY2UociwgcmVzLCByZXMtPmVuZCArIDEsIHJlcy0+c3RhcnQsIG1heCwKQEAgLTE0MDQsNiArMTQwNCw0MyBAQAogCS8qIFhYWCBGSVhNRSAtIHVwZGF0ZSBPRiBkZXZpY2UgdHJlZSBub2RlIGludGVycnVwdCBwcm9wZXJ0eSAqLwogfQogCisjaWZkZWYgQ09ORklHX1BQQ19NRVJHRQorLyogWFhYIFRoaXMgaXMgYSBjb3B5IG9mIHRoZSBwcGM2NCB2ZXJzaW9uLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBzdGFydAorICogbWVyZ2luZyB0aGUgMiBQQ0kgbGF5ZXJzCisgKi8KKy8qCisgKiBSZWFkcyB0aGUgaW50ZXJydXB0IHBpbiB0byBkZXRlcm1pbmUgaWYgaW50ZXJydXB0IGlzIHVzZSBieSBjYXJkLgorICogSWYgdGhlIGludGVycnVwdCBpcyB1c2VkLCB0aGVuIGdldHMgdGhlIGludGVycnVwdCBsaW5lIGZyb20gdGhlCisgKiBvcGVuZmlybXdhcmUgYW5kIHNldHMgaXQgaW4gdGhlIHBjaV9kZXYgYW5kIHBjaV9jb25maWcgbGluZS4KKyAqLworaW50IHBjaV9yZWFkX2lycV9saW5lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXN0cnVjdCBvZl9pcnEgb2lycTsKKwl1bnNpZ25lZCBpbnQgdmlycTsKKworCURCRygiVHJ5IHRvIG1hcCBpcnEgZm9yICVzLi4uXG4iLCBwY2lfbmFtZShwY2lfZGV2KSk7CisKKwlpZiAob2ZfaXJxX21hcF9wY2kocGNpX2RldiwgJm9pcnEpKSB7CisJCURCRygiIC0+IGZhaWxlZCAhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCURCRygiIC0+IGdvdCBvbmUsIHNwZWMgJWQgY2VsbHMgKDB4JTA4eC4uLikgb24gJXNcbiIsCisJICAgIG9pcnEuc2l6ZSwgb2lycS5zcGVjaWZpZXJbMF0sIG9pcnEuY29udHJvbGxlci0+ZnVsbF9uYW1lKTsKKworCXZpcnEgPSBpcnFfY3JlYXRlX29mX21hcHBpbmcob2lycS5jb250cm9sbGVyLCBvaXJxLnNwZWNpZmllciwgb2lycS5zaXplKTsKKwlpZih2aXJxID09IE5PX0lSUSkgeworCQlEQkcoIiAtPiBmYWlsZWQgdG8gbWFwICFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXBjaV9kZXYtPmlycSA9IHZpcnE7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgdmlycSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocGNpX3JlYWRfaXJxX2xpbmUpOworI2VuZGlmIC8qIENPTkZJR19QUENfTUVSR0UgKi8KKwogaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKIHsKIAl1MTYgY21kLCBvbGRfY21kOwpAQCAtMTU3NCw4ICsxNjExLDggQEAKIAllbHNlCiAJCXByb3QgfD0gX1BBR0VfR1VBUkRFRDsKIAotCXByaW50aygiUENJIG1hcCBmb3IgJXM6JWx4LCBwcm90OiAlbHhcbiIsIHBjaV9uYW1lKGRldiksIHJwLT5zdGFydCwKLQkgICAgICAgcHJvdCk7CisJcHJpbnRrKCJQQ0kgbWFwIGZvciAlczolbGx4LCBwcm90OiAlbHhcbiIsIHBjaV9uYW1lKGRldiksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnAtPnN0YXJ0LCBwcm90KTsKIAogCXJldHVybiBfX3BncHJvdChwcm90KTsKIH0KQEAgLTE3NTUsNyArMTc5Miw3IEBACiAKIHZvaWQgcGNpX3Jlc291cmNlX3RvX3VzZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwKIAkJCSAgY29uc3Qgc3RydWN0IHJlc291cmNlICpyc3JjLAotCQkJICB1NjQgKnN0YXJ0LCB1NjQgKmVuZCkKKwkJCSAgcmVzb3VyY2Vfc2l6ZV90ICpzdGFydCwgcmVzb3VyY2Vfc2l6ZV90ICplbmQpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3NlKGRldi0+YnVzLT5udW1iZXIpOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IDI0NzkzN2QuLmVmYzBiNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtMTMsNyArMTMsNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMTM4LDExICsxMzcsMTEgQEAKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KIHZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCisJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBhbGlnbnRvOwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CkBAIC0zOTksMTIgKzM5OCw4IEBACiAJfSBlbHNlIHsKIAkJZGV2LT5oZHJfdHlwZSA9IFBDSV9IRUFERVJfVFlQRV9OT1JNQUw7CiAJCWRldi0+cm9tX2Jhc2VfcmVnID0gUENJX1JPTV9BRERSRVNTOworCQkvKiBNYXliZSBkbyBhIGRlZmF1bHQgT0YgbWFwcGluZyBoZXJlICovCiAJCWRldi0+aXJxID0gTk9fSVJROwotCQlpZiAobm9kZS0+bl9pbnRycyA+IDApIHsKLQkJCWRldi0+aXJxID0gbm9kZS0+aW50cnNbMF0ubGluZTsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKLQkJCQkJICAgICAgZGV2LT5pcnEpOwotCQl9CiAJfQogCiAJcGNpX3BhcnNlX29mX2FkZHJzKG5vZGUsIGRldik7CkBAIC0xMjg5LDIzICsxMjg0LDI2IEBACiAgKi8KIGludCBwY2lfcmVhZF9pcnFfbGluZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQl1OCBpbnRwaW47Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVjdCBvZl9pcnEgb2lycTsKKwl1bnNpZ25lZCBpbnQgdmlycTsKIAotICAgIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJmludHBpbik7Ci0JaWYgKGludHBpbiA9PSAwKQotCQlyZXR1cm4gMDsKKwlEQkcoIlRyeSB0byBtYXAgaXJxIGZvciAlcy4uLlxuIiwgcGNpX25hbWUocGNpX2RldikpOwogCi0Jbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwY2lfZGV2KTsKLQlpZiAobm9kZSA9PSBOVUxMKQorCWlmIChvZl9pcnFfbWFwX3BjaShwY2lfZGV2LCAmb2lycSkpIHsKKwkJREJHKCIgLT4gZmFpbGVkICFcbiIpOwogCQlyZXR1cm4gLTE7CisJfQogCi0JaWYgKG5vZGUtPm5faW50cnMgPT0gMCkKKwlEQkcoIiAtPiBnb3Qgb25lLCBzcGVjICVkIGNlbGxzICgweCUwOHguLi4pIG9uICVzXG4iLAorCSAgICBvaXJxLnNpemUsIG9pcnEuc3BlY2lmaWVyWzBdLCBvaXJxLmNvbnRyb2xsZXItPmZ1bGxfbmFtZSk7CisKKwl2aXJxID0gaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKG9pcnEuY29udHJvbGxlciwgb2lycS5zcGVjaWZpZXIsIG9pcnEuc2l6ZSk7CisJaWYodmlycSA9PSBOT19JUlEpIHsKKwkJREJHKCIgLT4gZmFpbGVkIHRvIG1hcCAhXG4iKTsKIAkJcmV0dXJuIC0xOwotCi0JcGNpX2Rldi0+aXJxID0gbm9kZS0+aW50cnNbMF0ubGluZTsKLQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIHBjaV9kZXYtPmlycSk7CisJfQorCXBjaV9kZXYtPmlycSA9IHZpcnE7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgdmlycSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZm1vbl9mc2xfYm9va2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZm1vbl9mc2xfYm9va2UuYwppbmRleCAzMjQ1NWRmLi5iZGMzOTc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZtb25fZnNsX2Jvb2tlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmbW9uX2ZzbF9ib29rZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwppbmRleCBlNmZiMTk0Li5hMGEyZWZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCA0YjA1MmFlLi5lM2I4MGY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jX3BwYzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwppbmRleCAyYWI4ZjJiLi5mNTk4Y2I1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwpAQCAtMTYsNyArMTYsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZTQ3MzI0NTkuLmExMjdhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCA0ODM0NTVjLi5hMTc4N2ZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtMTYsNyArMTYsNiBAQAogI3VuZGVmIERFQlVHCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMCw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CkBAIC04Niw0MjQgKzg3LDYgQEAKIC8qIGV4cG9ydCB0aGF0IHRvIG91dHNpZGUgd29ybGQgKi8KIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwogCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKmRmbHRfaW50ZXJydXB0X2NvbnRyb2xsZXI7Ci1pbnQgbnVtX2ludGVycnVwdF9jb250cm9sbGVyczsKLQotLyoKLSAqIFdyYXBwZXIgZm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciB2YXJpb3VzIGRhdGEgdGhhdCBuZWVkcyB0byBiZQotICogYXR0YWNoZWQgdG8gZGV2aWNlIG5vZGVzIGFzIHRoZXkgYXJlIHByb2Nlc3NlZCBhdCBib290IG9yIHdoZW4KLSAqIGFkZGVkIHRvIHRoZSBkZXZpY2UgdHJlZSBsYXRlciAoZS5nLiBETFBBUikuICBBdCBib290IHRoZXJlIGlzCi0gKiBhbHJlYWR5IGEgcmVnaW9uIHJlc2VydmVkIHNvIHdlIGp1c3QgaW5jcmVtZW50ICptZW1fc3RhcnQgYnkgc2l6ZTsKLSAqIG90aGVyd2lzZSB3ZSBjYWxsIGttYWxsb2MuCi0gKi8KLXN0YXRpYyB2b2lkICogcHJvbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKm1lbV9zdGFydCkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWlmICghbWVtX3N0YXJ0KQotCQlyZXR1cm4ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQotCXRtcCA9ICptZW1fc3RhcnQ7Ci0JKm1lbV9zdGFydCArPSBzaXplOwotCXJldHVybiAodm9pZCAqKXRtcDsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIGRldmljZV9ub2RlIHdpdGggYSBnaXZlbiBwaGFuZGxlLgotICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogZmluZF9waGFuZGxlKHBoYW5kbGUgcGgpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCWZvciAobnAgPSBhbGxub2RlczsgbnAgIT0gMDsgbnAgPSBucC0+YWxsbmV4dCkKLQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IHBoKQotCQkJcmV0dXJuIG5wOwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogRmluZCB0aGUgaW50ZXJydXB0IHBhcmVudCBvZiBhIG5vZGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2RldmluaXQgaW50cl9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpwKQotewotCXBoYW5kbGUgKnBhcnA7Ci0KLQlwYXJwID0gKHBoYW5kbGUgKikgZ2V0X3Byb3BlcnR5KHAsICJpbnRlcnJ1cHQtcGFyZW50IiwgTlVMTCk7Ci0JaWYgKHBhcnAgPT0gTlVMTCkKLQkJcmV0dXJuIHAtPnBhcmVudDsKLQlwID0gZmluZF9waGFuZGxlKCpwYXJwKTsKLQlpZiAocCAhPSBOVUxMKQotCQlyZXR1cm4gcDsKLQkvKgotCSAqIE9uIGEgcG93ZXJtYWMgYm9vdGVkIHdpdGggQm9vdFgsIHdlIGRvbid0IGdldCB0byBrbm93IHRoZQotCSAqIHBoYW5kbGVzIGZvciBhbnkgbm9kZXMsIHNvIGZpbmRfcGhhbmRsZSB3aWxsIHJldHVybiBOVUxMLgotCSAqIEZvcnR1bmF0ZWx5IHRoZXNlIG1hY2hpbmVzIG9ubHkgaGF2ZSBvbmUgaW50ZXJydXB0IGNvbnRyb2xsZXIKLQkgKiBzbyB0aGVyZSBpc24ndCBpbiBmYWN0IGFueSBhbWJpZ3VpdHkuICAtLSBwYXVsdXMKLQkgKi8KLQlpZiAobnVtX2ludGVycnVwdF9jb250cm9sbGVycyA9PSAxKQotCQlwID0gZGZsdF9pbnRlcnJ1cHRfY29udHJvbGxlcjsKLQlyZXR1cm4gcDsKLX0KLQotLyoKLSAqIEZpbmQgb3V0IHRoZSBzaXplIG9mIGVhY2ggZW50cnkgb2YgdGhlIGludGVycnVwdHMgcHJvcGVydHkKLSAqIGZvciBhIG5vZGUuCi0gKi8KLWludCBfX2RldmluaXQgcHJvbV9uX2ludHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnA7Ci0JdW5zaWduZWQgaW50ICppY3A7Ci0KLQlmb3IgKHAgPSBucDsgKHAgPSBpbnRyX3BhcmVudChwKSkgIT0gTlVMTDsgKSB7Ci0JCWljcCA9ICh1bnNpZ25lZCBpbnQgKikKLQkJCWdldF9wcm9wZXJ0eShwLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOwotCQlpZiAoaWNwICE9IE5VTEwpCi0JCQlyZXR1cm4gKmljcDsKLQkJaWYgKGdldF9wcm9wZXJ0eShwLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBOVUxMKSAhPSBOVUxMCi0JCSAgICB8fCBnZXRfcHJvcGVydHkocCwgImludGVycnVwdC1tYXAiLCBOVUxMKSAhPSBOVUxMKSB7Ci0JCQlwcmludGsoIm9vcHMsIG5vZGUgJXMgZG9lc24ndCBoYXZlICNpbnRlcnJ1cHQtY2VsbHNcbiIsCi0JCQkgICAgICAgcC0+ZnVsbF9uYW1lKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotI2lmZGVmIERFQlVHX0lSUQotCXByaW50aygicHJvbV9uX2ludHJfY2VsbHMgZmFpbGVkIGZvciAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0jZW5kaWYKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIE1hcCBhbiBpbnRlcnJ1cHQgZnJvbSBhIGRldmljZSB1cCB0byB0aGUgcGxhdGZvcm0gaW50ZXJydXB0Ci0gKiBkZXNjcmlwdG9yLgotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtYXBfaW50ZXJydXB0KHVuc2lnbmVkIGludCAqKmlycSwgc3RydWN0IGRldmljZV9ub2RlICoqaWN0cmxlciwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1bnNpZ25lZCBpbnQgKmludHMsCi0JCQkJICAgaW50IG5pbnRyYykKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnAsICppcGFyOwotCXVuc2lnbmVkIGludCAqaW1hcCwgKmltYXNrLCAqaXA7Ci0JaW50IGksIGltYXBsZW4sIG1hdGNoOwotCWludCBuZXdpbnRyYyA9IDAsIG5ld2FkZHJjID0gMDsKLQl1bnNpZ25lZCBpbnQgKnJlZzsKLQlpbnQgbmFkZHJjOwotCi0JcmVnID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKLQluYWRkcmMgPSBwcm9tX25fYWRkcl9jZWxscyhucCk7Ci0JcCA9IGludHJfcGFyZW50KG5wKTsKLQl3aGlsZSAocCAhPSBOVUxMKSB7Ci0JCWlmIChnZXRfcHJvcGVydHkocCwgImludGVycnVwdC1jb250cm9sbGVyIiwgTlVMTCkgIT0gTlVMTCkKLQkJCS8qIHRoaXMgbm9kZSBpcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciwgc3RvcCBoZXJlICovCi0JCQlicmVhazsKLQkJaW1hcCA9ICh1bnNpZ25lZCBpbnQgKikKLQkJCWdldF9wcm9wZXJ0eShwLCAiaW50ZXJydXB0LW1hcCIsICZpbWFwbGVuKTsKLQkJaWYgKGltYXAgPT0gTlVMTCkgewotCQkJcCA9IGludHJfcGFyZW50KHApOwotCQkJY29udGludWU7Ci0JCX0KLQkJaW1hc2sgPSAodW5zaWduZWQgaW50ICopCi0JCQlnZXRfcHJvcGVydHkocCwgImludGVycnVwdC1tYXAtbWFzayIsIE5VTEwpOwotCQlpZiAoaW1hc2sgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJvb3BzLCAlcyBoYXMgaW50ZXJydXB0LW1hcCBidXQgbm8gbWFza1xuIiwKLQkJCSAgICAgICBwLT5mdWxsX25hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaW1hcGxlbiAvPSBzaXplb2YodW5zaWduZWQgaW50KTsKLQkJbWF0Y2ggPSAwOwotCQlpcGFyID0gTlVMTDsKLQkJd2hpbGUgKGltYXBsZW4gPiAwICYmICFtYXRjaCkgewotCQkJLyogY2hlY2sgdGhlIGNoaWxkLWludGVycnVwdCBmaWVsZCAqLwotCQkJbWF0Y2ggPSAxOwotCQkJZm9yIChpID0gMDsgaSA8IG5hZGRyYyAmJiBtYXRjaDsgKytpKQotCQkJCW1hdGNoID0gKChyZWdbaV0gXiBpbWFwW2ldKSAmIGltYXNrW2ldKSA9PSAwOwotCQkJZm9yICg7IGkgPCBuYWRkcmMgKyBuaW50cmMgJiYgbWF0Y2g7ICsraSkKLQkJCQltYXRjaCA9ICgoaW50c1tpLW5hZGRyY10gXiBpbWFwW2ldKSAmIGltYXNrW2ldKSA9PSAwOwotCQkJaW1hcCArPSBuYWRkcmMgKyBuaW50cmM7Ci0JCQlpbWFwbGVuIC09IG5hZGRyYyArIG5pbnRyYzsKLQkJCS8qIGdyYWIgdGhlIGludGVycnVwdCBwYXJlbnQgKi8KLQkJCWlwYXIgPSBmaW5kX3BoYW5kbGUoKHBoYW5kbGUpICppbWFwKyspOwotCQkJLS1pbWFwbGVuOwotCQkJaWYgKGlwYXIgPT0gTlVMTCAmJiBudW1faW50ZXJydXB0X2NvbnRyb2xsZXJzID09IDEpCi0JCQkJLyogY29wZSB3aXRoIEJvb3RYIG5vdCBnaXZpbmcgdXMgcGhhbmRsZXMgKi8KLQkJCQlpcGFyID0gZGZsdF9pbnRlcnJ1cHRfY29udHJvbGxlcjsKLQkJCWlmIChpcGFyID09IE5VTEwpIHsKLQkJCQlwcmludGsoIm9vcHMsIG5vIGludCBwYXJlbnQgJXggaW4gbWFwIG9mICVzXG4iLAotCQkJCSAgICAgICBpbWFwWy0xXSwgcC0+ZnVsbF9uYW1lKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCS8qIGZpbmQgdGhlIHBhcmVudCdzICMgYWRkciBhbmQgaW50ciBjZWxscyAqLwotCQkJaXAgPSAodW5zaWduZWQgaW50ICopCi0JCQkJZ2V0X3Byb3BlcnR5KGlwYXIsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7Ci0JCQlpZiAoaXAgPT0gTlVMTCkgewotCQkJCXByaW50aygib29wcywgbm8gI2ludGVycnVwdC1jZWxscyBvbiAlc1xuIiwKLQkJCQkgICAgICAgaXBhci0+ZnVsbF9uYW1lKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCW5ld2ludHJjID0gKmlwOwotCQkJaXAgPSAodW5zaWduZWQgaW50ICopCi0JCQkJZ2V0X3Byb3BlcnR5KGlwYXIsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCQkJbmV3YWRkcmMgPSAoaXAgPT0gTlVMTCk/IDA6ICppcDsKLQkJCWltYXAgKz0gbmV3YWRkcmMgKyBuZXdpbnRyYzsKLQkJCWltYXBsZW4gLT0gbmV3YWRkcmMgKyBuZXdpbnRyYzsKLQkJfQotCQlpZiAoaW1hcGxlbiA8IDApIHsKLQkJCXByaW50aygib29wcywgZXJyb3IgZGVjb2RpbmcgaW50LW1hcCBvbiAlcywgbGVuPSVkXG4iLAotCQkJICAgICAgIHAtPmZ1bGxfbmFtZSwgaW1hcGxlbik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAoIW1hdGNoKSB7Ci0jaWZkZWYgREVCVUdfSVJRCi0JCQlwcmludGsoIm9vcHMsIG5vIG1hdGNoIGluICVzIGludC1tYXAgZm9yICVzXG4iLAotCQkJICAgICAgIHAtPmZ1bGxfbmFtZSwgbnAtPmZ1bGxfbmFtZSk7Ci0jZW5kaWYKLQkJCXJldHVybiAwOwotCQl9Ci0JCXAgPSBpcGFyOwotCQluYWRkcmMgPSBuZXdhZGRyYzsKLQkJbmludHJjID0gbmV3aW50cmM7Ci0JCWludHMgPSBpbWFwIC0gbmludHJjOwotCQlyZWcgPSBpbnRzIC0gbmFkZHJjOwotCX0KLQlpZiAocCA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfSVJRCi0JCXByaW50aygiaG1tbSwgaW50IHRyZWUgZm9yICVzIGRvZXNuJ3QgaGF2ZSBjdHJsZXJcbiIsCi0JCSAgICAgICBucC0+ZnVsbF9uYW1lKTsKLSNlbmRpZgotCQlyZXR1cm4gMDsKLQl9Ci0JKmlycSA9IGludHM7Ci0JKmljdHJsZXIgPSBwOwotCXJldHVybiBuaW50cmM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hcF9pc2Ffc2Vuc2VzWzRdID0gewotCUlSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSwKLQlJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUsCi0JSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFLAotCUlSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFwX21waWNfc2Vuc2VzWzRdID0gewotCUlSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSwKLQlJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUsCi0JLyogMiBzZWVtcyB0byBiZSB1c2VkIGZvciB0aGUgODI1OSBjYXNjYWRlLi4uICovCi0JSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFLAotCUlSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9ORUdBVElWRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGZpbmlzaF9ub2RlX2ludGVycnVwdHMoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKm1lbV9zdGFydCwKLQkJCQkJICAgIGludCBtZWFzdXJlX29ubHkpCi17Ci0JdW5zaWduZWQgaW50ICppbnRzOwotCWludCBpbnRsZW4sIGludHJjZWxscywgaW50cmNvdW50OwotCWludCBpLCBqLCBuLCBzZW5zZTsKLQl1bnNpZ25lZCBpbnQgKmlycSwgdmlycTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmljOwotCWludCB0cmFjZSA9IDA7Ci0KLQkvLyNkZWZpbmUgVFJBQ0UoZm10Li4uKSBkbyB7IGlmICh0cmFjZSkgeyBwcmludGsoZm10KTsgbWRlbGF5KDEwMDApOyB9IH0gd2hpbGUoMCkKLSNkZWZpbmUgVFJBQ0UoZm10Li4uKQotCi0JaWYgKCFzdHJjbXAobnAtPm5hbWUsICJzbXUtZG9vcmJlbGwiKSkKLQkJdHJhY2UgPSAxOwotCi0JVFJBQ0UoIkZpbmlzaGluZyBTTVUgZG9vcmJlbGwgISBudW1faW50ZXJydXB0X2NvbnRyb2xsZXJzID0gJWRcbiIsCi0JICAgICAgbnVtX2ludGVycnVwdF9jb250cm9sbGVycyk7Ci0KLQlpZiAobnVtX2ludGVycnVwdF9jb250cm9sbGVycyA9PSAwKSB7Ci0JCS8qCi0JCSAqIE9sZCBtYWNoaW5lcyBqdXN0IGhhdmUgYSBsaXN0IG9mIGludGVycnVwdCBudW1iZXJzCi0JCSAqIGFuZCBubyBpbnRlcnJ1cHQtY29udHJvbGxlciBub2Rlcy4KLQkJICovCi0JCWludHMgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShucCwgIkFBUEwsaW50ZXJydXB0cyIsCi0JCQkJCQkgICAgICZpbnRsZW4pOwotCQkvKiBYWFggb2xkIGludGVycHJldF9wY2lfcHJvcHMgbG9va2VkIGluIHBhcmVudCB0b28gKi8KLQkJLyogWFhYIG9sZCBpbnRlcnByZXRfbWFjaW9fcHJvcHMgbG9va2VkIGZvciBpbnRlcnJ1cHRzCi0JCSAgIGJlZm9yZSBBQVBMLGludGVycnVwdHMgKi8KLQkJaWYgKGludHMgPT0gTlVMTCkKLQkJCWludHMgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShucCwgImludGVycnVwdHMiLAotCQkJCQkJCSAgICAgJmludGxlbik7Ci0JCWlmIChpbnRzID09IE5VTEwpCi0JCQlyZXR1cm4gMDsKLQotCQlucC0+bl9pbnRycyA9IGludGxlbiAvIHNpemVvZih1bnNpZ25lZCBpbnQpOwotCQlucC0+aW50cnMgPSBwcm9tX2FsbG9jKG5wLT5uX2ludHJzICogc2l6ZW9mKG5wLT5pbnRyc1swXSksCi0JCQkJICAgICAgIG1lbV9zdGFydCk7Ci0JCWlmICghbnAtPmludHJzKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmIChtZWFzdXJlX29ubHkpCi0JCQlyZXR1cm4gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnAtPm5faW50cnM7ICsraSkgewotCQkJbnAtPmludHJzW2ldLmxpbmUgPSAqaW50cysrOwotCQkJbnAtPmludHJzW2ldLnNlbnNlID0gSVJRX1NFTlNFX0xFVkVMCi0JCQkJfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkU7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JaW50cyA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0cyIsICZpbnRsZW4pOwotCVRSQUNFKCJpbnRzPSVwLCBpbnRsZW49JWRcbiIsIGludHMsIGludGxlbik7Ci0JaWYgKGludHMgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JaW50cmNlbGxzID0gcHJvbV9uX2ludHJfY2VsbHMobnApOwotCWludGxlbiAvPSBpbnRyY2VsbHMgKiBzaXplb2YodW5zaWduZWQgaW50KTsKLQlUUkFDRSgiaW50cmNlbGxzPSVkLCBuZXcgaW50bGVuPSVkXG4iLCBpbnRyY2VsbHMsIGludGxlbik7Ci0JbnAtPmludHJzID0gcHJvbV9hbGxvYyhpbnRsZW4gKiBzaXplb2YoKihucC0+aW50cnMpKSwgbWVtX3N0YXJ0KTsKLQlpZiAoIW5wLT5pbnRycykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAobWVhc3VyZV9vbmx5KQotCQlyZXR1cm4gMDsKLQotCWludHJjb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGludGxlbjsgKytpLCBpbnRzICs9IGludHJjZWxscykgewotCQluID0gbWFwX2ludGVycnVwdCgmaXJxLCAmaWMsIG5wLCBpbnRzLCBpbnRyY2VsbHMpOwotCQlUUkFDRSgibWFwLCBpcnE9JWQsIGljPSVwLCBuPSVkXG4iLCBpcnEsIGljLCBuKTsKLQkJaWYgKG4gPD0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGRvbid0IG1hcCBJUlEgbnVtYmVycyB1bmRlciBhIGNhc2NhZGVkIDgyNTkgY29udHJvbGxlciAqLwotCQlpZiAoaWMgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUoaWMsICJjaHJwLGlpYyIpKSB7Ci0JCQlucC0+aW50cnNbaW50cmNvdW50XS5saW5lID0gaXJxWzBdOwotCQkJc2Vuc2UgPSAobiA+IDEpPyAoaXJxWzFdICYgMyk6IDM7Ci0JCQlucC0+aW50cnNbaW50cmNvdW50XS5zZW5zZSA9IG1hcF9pc2Ffc2Vuc2VzW3NlbnNlXTsKLQkJfSBlbHNlIHsKLQkJCXZpcnEgPSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZyhpcnFbMF0pOwotCQkJVFJBQ0UoInZpcnE9JWRcbiIsIHZpcnEpOwotI2lmZGVmIENPTkZJR19QUEM2NAotCQkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ291bGQgbm90IGFsbG9jYXRlIGludGVycnVwdCIKLQkJCQkgICAgICAgIiBudW1iZXIgZm9yICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZgotCQkJbnAtPmludHJzW2ludHJjb3VudF0ubGluZSA9IGlycV9vZmZzZXRfdXAodmlycSk7Ci0JCQlzZW5zZSA9IChuID4gMSk/IChpcnFbMV0gJiAzKTogMTsKLQotCQkJLyogQXBwbGUgdXNlcyBiaXRzIGluIHRoZXJlIGluIGEgZGlmZmVyZW50IHdheSwgbGV0J3MKLQkJCSAqIG9ubHkga2VlcCB0aGUgcmVhbCBzZW5zZSBiaXQgb24gbWFjcwotCQkJICovCi0JCQlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpCi0JCQkJc2Vuc2UgJj0gMHgxOwotCQkJbnAtPmludHJzW2ludHJjb3VudF0uc2Vuc2UgPSBtYXBfbXBpY19zZW5zZXNbc2Vuc2VdOwotCQl9Ci0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkJLyogV2Ugb2Zmc2V0IGlycSBudW1iZXJzIGZvciB0aGUgdTMgTVBJQyBieSAxMjggaW4gUG93ZXJNYWMgKi8KLQkJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpICYmIGljICYmIGljLT5wYXJlbnQpIHsKLQkJCWNoYXIgKm5hbWUgPSBnZXRfcHJvcGVydHkoaWMtPnBhcmVudCwgIm5hbWUiLCBOVUxMKTsKLQkJCWlmIChuYW1lICYmICFzdHJjbXAobmFtZSwgInUzIikpCi0JCQkJbnAtPmludHJzW2ludHJjb3VudF0ubGluZSArPSAxMjg7Ci0JCQllbHNlIGlmICghKG5hbWUgJiYgKCFzdHJjbXAobmFtZSwgIm1hYy1pbyIpIHx8Ci0JCQkJCSAgICAhc3RyY21wKG5hbWUsICJ1NCIpKSkpCi0JCQkJLyogaWdub3JlIG90aGVyIGNhc2NhZGVkIGNvbnRyb2xsZXJzLCBzdWNoIGFzCi0JCQkJICAgdGhlIGsyLXNhdGEtcm9vdCAqLwotCQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0JCWlmIChuID4gMikgewotCQkJcHJpbnRrKCJobW1tLCBnb3QgJWQgaW50ciBjZWxscyBmb3IgJXM6IiwgbiwKLQkJCSAgICAgICBucC0+ZnVsbF9uYW1lKTsKLQkJCWZvciAoaiA9IDA7IGogPCBuOyArK2opCi0JCQkJcHJpbnRrKCIgJWQiLCBpcnFbal0pOwotCQkJcHJpbnRrKCJcbiIpOwotCQl9Ci0JCSsraW50cmNvdW50OwotCX0KLQlucC0+bl9pbnRycyA9IGludHJjb3VudDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmaW5pc2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCSB1bnNpZ25lZCBsb25nICptZW1fc3RhcnQsCi0JCQkJIGludCBtZWFzdXJlX29ubHkpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBmaW5pc2hfbm9kZV9pbnRlcnJ1cHRzKG5wLCBtZW1fc3RhcnQsIG1lYXN1cmVfb25seSk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQotCWZvciAoY2hpbGQgPSBucC0+Y2hpbGQ7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPnNpYmxpbmcpIHsKLQkJcmMgPSBmaW5pc2hfbm9kZShjaGlsZCwgbWVtX3N0YXJ0LCBtZWFzdXJlX29ubHkpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKLQl9Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2Nhbl9pbnRlcnJ1cHRfY29udHJvbGxlcnModm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCWludCBuID0gMDsKLQljaGFyICpuYW1lLCAqaWM7Ci0JaW50IGljbGVuOwotCi0JZm9yIChucCA9IGFsbG5vZGVzOyBucCAhPSBOVUxMOyBucCA9IG5wLT5hbGxuZXh0KSB7Ci0JCWljID0gZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCAmaWNsZW4pOwotCQluYW1lID0gZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwotCQkvKiBjaGVja2luZyBpY2xlbiBtYWtlcyBzdXJlIHdlIGRvbid0IGdldCBhIGZhbHNlCi0JCSAgIG1hdGNoIG9uIC9jaG9zZW4uaW50ZXJydXB0X2NvbnRyb2xsZXIgKi8KLQkJaWYgKChuYW1lICE9IE5VTEwKLQkJICAgICAmJiBzdHJjbXAobmFtZSwgImludGVycnVwdC1jb250cm9sbGVyIikgPT0gMCkKLQkJICAgIHx8IChpYyAhPSBOVUxMICYmIGljbGVuID09IDAKLQkJCSYmIHN0cmNtcChuYW1lLCAiQXBwbGVLaXdpIikpKSB7Ci0JCQlpZiAobiA9PSAwKQotCQkJCWRmbHRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPSBucDsKLQkJCSsrbjsKLQkJfQotCX0KLQludW1faW50ZXJydXB0X2NvbnRyb2xsZXJzID0gbjsKLX0KLQotLyoqCi0gKiBmaW5pc2hfZGV2aWNlX3RyZWUgaXMgY2FsbGVkIG9uY2UgdGhpbmdzIGFyZSBydW5uaW5nIG5vcm1hbGx5Ci0gKiAoaS5lLiB3aXRoIHRleHQgYW5kIGRhdGEgbWFwcGVkIHRvIHRoZSBhZGRyZXNzIHRoZXkgd2VyZSBsaW5rZWQgYXQpLgotICogSXQgdHJhdmVyc2VzIHRoZSBkZXZpY2UgdHJlZSBhbmQgZmlsbHMgaW4gc29tZSBvZiB0aGUgYWRkaXRpb25hbCwKLSAqIGZpZWxkcyBpbiBlYWNoIG5vZGUgbGlrZSB7bl99YWRkcnMgYW5kIHtuX31pbnRycywgdGhlIHZpcnQgaW50ZXJydXB0Ci0gKiBtYXBwaW5nIGlzIGFsc28gaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KLSAqLwotdm9pZCBfX2luaXQgZmluaXNoX2RldmljZV90cmVlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBzaXplID0gMDsKLQotCURCRygiIC0+IGZpbmlzaF9kZXZpY2VfdHJlZVxuIik7Ci0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkvKiBJbml0aWFsaXplIHZpcnR1YWwgSVJRIG1hcCAqLwotCXZpcnRfaXJxX2luaXQoKTsKLSNlbmRpZgotCXNjYW5faW50ZXJydXB0X2NvbnRyb2xsZXJzKCk7Ci0KLQkvKgotCSAqIEZpbmlzaCBkZXZpY2UtdHJlZSAocHJlLXBhcnNpbmcgc29tZSBwcm9wZXJ0aWVzIGV0Yy4uLikKLQkgKiBXZSBkbyB0aGlzIGluIDIgcGFzc2VzLiBPbmUgd2l0aCAibWVhc3VyZV9vbmx5IiBzZXQsIHdoaWNoCi0JICogd2lsbCBvbmx5IG1lYXN1cmUgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkLCB0aGVuIHdlIGNhbgotCSAqIGFsbG9jYXRlIHRoYXQgbWVtb3J5LCBhbmQgY2FsbCBmaW5pc2hfbm9kZSBhZ2Fpbi4gSG93ZXZlciwKLQkgKiB3ZSBtdXN0IGJlIGNhcmVmdWwgYXMgbW9zdCByb3V0aW5lcyB3aWxsIGZhaWwgbm93YWRheXMgd2hlbgotCSAqIHByb21fYWxsb2MoKSByZXR1cm5zIDAsIHNvIHdlIG11c3QgbWFrZSBzdXJlIG91ciBmaXJzdCBwYXNzCi0JICogZG9lc24ndCBzdGFydCBhdCAwLiBXZSBwcmUtaW5pdGlhbGl6ZSBzaXplIHRvIDE2IGZvciB0aGF0Ci0JICogcmVhc29uIGFuZCB0aGVuIHJlbW92ZSB0aG9zZSBhZGRpdGlvbmFsIDE2IGJ5dGVzCi0JICovCi0Jc2l6ZSA9IDE2OwotCWZpbmlzaF9ub2RlKGFsbG5vZGVzLCAmc2l6ZSwgMSk7Ci0Jc2l6ZSAtPSAxNjsKLQotCWlmICgwID09IHNpemUpCi0JCWVuZCA9IHN0YXJ0ID0gMDsKLQllbHNlCi0JCWVuZCA9IHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShsbWJfYWxsb2Moc2l6ZSwgMTI4KSk7Ci0KLQlmaW5pc2hfbm9kZShhbGxub2RlcywgJmVuZCwgMCk7Ci0JQlVHX09OKGVuZCAhPSBzdGFydCArIHNpemUpOwotCi0JREJHKCIgPC0gZmluaXNoX2RldmljZV90cmVlXG4iKTsKLX0KLQogc3RhdGljIGlubGluZSBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpCiB7CiAJcmV0dXJuICgoY2hhciAqKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKQEAgLTk1Miw2ICs1MzUsNyBAQAogCS8qIHB1dCB0aGlzIGJhY2sgb25jZSB3ZSBrbm93IGhvdyB0byB0ZXN0IGlmIGZpcm13YXJlIGRvZXMgNjRrIElPICovCiAJe0NQVV9GVFJfQ0lfTEFSR0VfUEFHRSwgMCwJMSwgMiwgMH0sCiAjZW5kaWYKKwl7Q1BVX0ZUUl9SRUFMX0xFLCBQUENfRkVBVFVSRV9UUlVFX0xFLCA1LCAwLCAwfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjaGVja19jcHVfcGFfZmVhdHVyZXModW5zaWduZWQgbG9uZyBub2RlKQpAQCAtMTEyNCwyNCArNzA4LDYgQEAKICAJCXRjZV9hbGxvY19lbmQgPSAqbHByb3A7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUENfUlRBUwotCS8qIFRvIGhlbHAgZWFybHkgZGVidWdnaW5nIHZpYSB0aGUgZnJvbnQgcGFuZWwsIHdlIHJldHJpZXZlIGEgbWluaW1hbAotCSAqIHNldCBvZiBSVEFTIGluZm9zIG5vdyBpZiBhdmFpbGFibGUKLQkgKi8KLQl7Ci0JCXU2NCAqYmFzZXAsICplbnRyeXAsICpzaXplcDsKLQotCQliYXNlcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHJ0YXMtYmFzZSIsIE5VTEwpOwotCQllbnRyeXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxydGFzLWVudHJ5IiwgTlVMTCk7Ci0JCXNpemVwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgscnRhcy1zaXplIiwgTlVMTCk7Ci0JCWlmIChiYXNlcCAmJiBlbnRyeXAgJiYgc2l6ZXApIHsKLQkJCXJ0YXMuYmFzZSA9ICpiYXNlcDsKLQkJCXJ0YXMuZW50cnkgPSAqZW50cnlwOwotCQkJcnRhcy5zaXplID0gKnNpemVwOwotCQl9Ci0JfQotI2VuZGlmIC8qIENPTkZJR19QUENfUlRBUyAqLwotCiAjaWZkZWYgQ09ORklHX0tFWEVDCiAgICAgICAgbHByb3AgPSAodTY0KilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxjcmFzaGtlcm5lbC1iYXNlIiwgTlVMTCk7CiAgICAgICAgaWYgKGxwcm9wKQpAQCAtMTMyNiw2ICs4OTIsMTEgQEAKIAkvKiBTZXR1cCBmbGF0IGRldmljZS10cmVlIHBvaW50ZXIgKi8KIAlpbml0aWFsX2Jvb3RfcGFyYW1zID0gcGFyYW1zOwogCisjaWZkZWYgQ09ORklHX1BQQ19SVEFTCisJLyogU29tZSBtYWNoaW5lcyBtaWdodCBuZWVkIFJUQVMgaW5mbyBmb3IgZGVidWdnaW5nLCBncmFiIGl0IG5vdy4gKi8KKwlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3J0YXMsIE5VTEwpOworI2VuZGlmCisKIAkvKiBSZXRyaWV2ZSB2YXJpb3VzIGluZm9ybWF0aW9ucyBmcm9tIHRoZSAvY2hvc2VuIG5vZGUgb2YgdGhlCiAJICogZGV2aWNlLXRyZWUsIGluY2x1ZGluZyB0aGUgcGxhdGZvcm0gdHlwZSwgaW5pdHJkIGxvY2F0aW9uIGFuZAogCSAqIHNpemUsIFRDRSByZXNlcnZlLCBhbmQgbW9yZSAuLi4KQEAgLTE0MDEsMjcgKzk3Miw2IEBACiBFWFBPUlRfU1lNQk9MKHByb21fbl9zaXplX2NlbGxzKTsKIAogLyoqCi0gKiBXb3JrIG91dCB0aGUgc2Vuc2UgKGFjdGl2ZS1sb3cgbGV2ZWwgLyBhY3RpdmUtaGlnaCBlZGdlKQotICogb2YgZWFjaCBpbnRlcnJ1cHQgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCi0gKi8KLXZvaWQgX19pbml0IHByb21fZ2V0X2lycV9zZW5zZXModW5zaWduZWQgY2hhciAqc2Vuc2VzLCBpbnQgb2ZmLCBpbnQgbWF4KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JaW50IGksIGo7Ci0KLQkvKiBkZWZhdWx0IHRvIGxldmVsLXRyaWdnZXJlZCAqLwotCW1lbXNldChzZW5zZXMsIElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSwgbWF4IC0gb2ZmKTsKLQotCWZvciAobnAgPSBhbGxub2RlczsgbnAgIT0gMDsgbnAgPSBucC0+YWxsbmV4dCkgewotCQlmb3IgKGogPSAwOyBqIDwgbnAtPm5faW50cnM7IGorKykgewotCQkJaSA9IG5wLT5pbnRyc1tqXS5saW5lOwotCQkJaWYgKGkgPj0gb2ZmICYmIGkgPCBtYXgpCi0JCQkJc2Vuc2VzW2ktb2ZmXSA9IG5wLT5pbnRyc1tqXS5zZW5zZTsKLQkJfQotCX0KLX0KLQotLyoqCiAgKiBDb25zdHJ1Y3QgYW5kIHJldHVybiBhIGxpc3Qgb2YgdGhlIGRldmljZV9ub2RlcyB3aXRoIGEgZ2l2ZW4gbmFtZS4KICAqLwogc3RydWN0IGRldmljZV9ub2RlICpmaW5kX2RldmljZXMoY29uc3QgY2hhciAqbmFtZSkKQEAgLTE4MjAsNyArMTM3MCw2IEBACiAJCQlub2RlLT5kZWFkcHJvcHMgPSBOVUxMOwogCQl9CiAJfQotCWtmcmVlKG5vZGUtPmludHJzKTsKIAlrZnJlZShub2RlLT5mdWxsX25hbWUpOwogCWtmcmVlKG5vZGUtPmRhdGEpOwogCWtmcmVlKG5vZGUpOwpAQCAtMTg5MywxMyArMTQ0Miw3IEBACiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgogICogRml4IHVwIHRoZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhIG5ldyBkZXZpY2Ugbm9kZToKLSAqIG5hbWUsIHR5cGUsIG5fYWRkcnMsIGFkZHJzLCBuX2ludHJzLCBpbnRycywgYW5kIHBjaS1zcGVjaWZpYyBmaWVsZHMKLSAqCi0gKiBBIGxvdCBvZiBib290LXRpbWUgY29kZSBpcyBkdXBsaWNhdGVkIGhlcmUsIGJlY2F1c2UgZnVuY3Rpb25zIHN1Y2gKLSAqIGFzIGZpbmlzaF9ub2RlX2ludGVycnVwdHMsIGludGVycHJldF9wY2lfcHJvcHMsIGV0Yy4gY2Fubm90IHVzZSB0aGUKLSAqIHNsYWIgYWxsb2NhdG9yLgotICoKLSAqIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHNwbGl0IHVwIGludG8gc21hbGxlciBjaHVua3MuCisgKiBuYW1lLCB0eXBlIGFuZCBwY2ktc3BlY2lmaWMgZmllbGRzCiAgKi8KIAogc3RhdGljIGludCBvZl9maW5pc2hfZHluYW1pY19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKQEAgLTE5NDAsOCArMTQ4Myw2IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIFBTRVJJRVNfUkVDT05GSUdfQUREOgogCQllcnIgPSBvZl9maW5pc2hfZHluYW1pY19ub2RlKG5vZGUpOwotCQlpZiAoIWVycikKLQkJCWZpbmlzaF9ub2RlKG5vZGUsIE5VTEwsIDApOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJmaW5pc2hfbm9kZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAkJCWVyciA9IE5PVElGWV9CQUQ7CkBAIC0xOTg3LDggKzE1MjgsNyBAQAogICogRmluZCBhIHByb3BlcnR5IHdpdGggYSBnaXZlbiBuYW1lIGZvciBhIGdpdmVuIG5vZGUKICAqIGFuZCByZXR1cm4gdGhlIHZhbHVlLgogICovCi11bnNpZ25lZCBjaGFyICpnZXRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICBpbnQgKmxlbnApCit2b2lkICpnZXRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbmFtZSwgaW50ICpsZW5wKQogewogCXN0cnVjdCBwcm9wZXJ0eSAqcHAgPSBvZl9maW5kX3Byb3BlcnR5KG5wLG5hbWUsbGVucCk7CiAJcmV0dXJuIHBwID8gcHAtPnZhbHVlIDogTlVMTDsKQEAgLTIxNDgsMyArMTY4OCwyNyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KKworI2lmZGVmIERFQlVHCitzdGF0aWMgc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyIGZsYXRfZHRfYmxvYjsKKworc3RhdGljIGludCBfX2luaXQgZXhwb3J0X2ZsYXRfZGV2aWNlX3RyZWUodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcigicG93ZXJwYyIsIE5VTEwpOworCWlmICghZCkKKwkJcmV0dXJuIDE7CisKKwlmbGF0X2R0X2Jsb2IuZGF0YSA9IGluaXRpYWxfYm9vdF9wYXJhbXM7CisJZmxhdF9kdF9ibG9iLnNpemUgPSBpbml0aWFsX2Jvb3RfcGFyYW1zLT50b3RhbHNpemU7CisKKwlkID0gZGVidWdmc19jcmVhdGVfYmxvYigiZmxhdC1kZXZpY2UtdHJlZSIsIFNfSUZSRUcgfCBTX0lSVVNSLAorCQkJCWQsICZmbGF0X2R0X2Jsb2IpOworCWlmICghZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KK19faW5pdGNhbGwoZXhwb3J0X2ZsYXRfZGV2aWNlX3RyZWUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA4YzI4ZWIwLi5lYmQ1MDFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTE2LDcgKzE2LDYgQEAKICN1bmRlZiBERUJVR19QUk9NCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC05ODgsNyArOTg3LDcgQEAKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgbWVtb3J5IGFsbG9jYXRpb24gbWVjYW5pc20sIHBhcnNlICJtZW1vcnkiIG5vZGVzIGFuZAorICogSW5pdGlhbGl6ZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20sIHBhcnNlICJtZW1vcnkiIG5vZGVzIGFuZAogICogb2J0YWluIHRoYXQgd2F5IHRoZSB0b3Agb2YgbWVtb3J5IGFuZCBSTU8gdG8gc2V0dXAgb3V0IGxvY2FsIGFsbG9jYXRvcgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9pbml0X21lbSh2b2lkKQpAQCAtMTk5MSwxMiArMTk5MCwyMiBAQAogc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX2RldmljZV90cmVlX21hcGxlKHZvaWQpCiB7CiAJcGhhbmRsZSBpc2E7CisJdTMyIHJsb2MgPSAweDAxMDAyMDAwOyAvKiBJTyBzcGFjZTsgUENJIGRldmljZSA9IDQgKi8KIAl1MzIgaXNhX3Jhbmdlc1s2XTsKKwljaGFyICpuYW1lOwogCi0JaXNhID0gY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgQUREUigiL2h0QDAvaXNhQDQiKSk7CisJbmFtZSA9ICIvaHRAMC9pc2FANCI7CisJaXNhID0gY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgQUREUihuYW1lKSk7CisJaWYgKCFQSEFORExFX1ZBTElEKGlzYSkpIHsKKwkJbmFtZSA9ICIvaHRAMC9pc2FANiI7CisJCWlzYSA9IGNhbGxfcHJvbSgiZmluZGRldmljZSIsIDEsIDEsIEFERFIobmFtZSkpOworCQlybG9jID0gMHgwMTAwMzAwMDsgLyogSU8gc3BhY2U7IFBDSSBkZXZpY2UgPSA2ICovCisJfQogCWlmICghUEhBTkRMRV9WQUxJRChpc2EpKQogCQlyZXR1cm47CiAKKwlpZiAocHJvbV9nZXRwcm9wbGVuKGlzYSwgInJhbmdlcyIpICE9IDEyKQorCQlyZXR1cm47CiAJaWYgKHByb21fZ2V0cHJvcChpc2EsICJyYW5nZXMiLCBpc2FfcmFuZ2VzLCBzaXplb2YoaXNhX3JhbmdlcykpCiAJCT09IFBST01fRVJST1IpCiAJCXJldHVybjsKQEAgLTIwMDYsMTUgKzIwMTUsMTUgQEAKIAkJaXNhX3Jhbmdlc1syXSAhPSAweDAwMDEwMDAwKQogCQlyZXR1cm47CiAKLQlwcm9tX3ByaW50ZigiZml4aW5nIHVwIGJvZ3VzIElTQSByYW5nZSBvbiBNYXBsZS4uLlxuIik7CisJcHJvbV9wcmludGYoIkZpeGluZyB1cCBib2d1cyBJU0EgcmFuZ2Ugb24gTWFwbGUvQXBhY2hlLi4uXG4iKTsKIAogCWlzYV9yYW5nZXNbMF0gPSAweDE7CiAJaXNhX3Jhbmdlc1sxXSA9IDB4MDsKLQlpc2FfcmFuZ2VzWzJdID0gMHgwMTAwMjAwMDsgLyogSU8gc3BhY2U7IFBDSSBkZXZpY2UgPSA0ICovCisJaXNhX3Jhbmdlc1syXSA9IHJsb2M7CiAJaXNhX3Jhbmdlc1szXSA9IDB4MDsKIAlpc2FfcmFuZ2VzWzRdID0gMHgwOwogCWlzYV9yYW5nZXNbNV0gPSAweDAwMDEwMDAwOwotCXByb21fc2V0cHJvcChpc2EsICIvaHRAMC9pc2FANCIsICJyYW5nZXMiLAorCXByb21fc2V0cHJvcChpc2EsIG5hbWUsICJyYW5nZXMiLAogCQkJaXNhX3Jhbmdlcywgc2l6ZW9mKGlzYV9yYW5nZXMpKTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9wYXJzZS5jCmluZGV4IDQ1ZGY0MjAuLjIxMDA5YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9wYXJzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9wYXJzZS5jCkBAIC0zOCwxNCArMzgsNiBAQAogc3RhdGljIHZvaWQgb2ZfZHVtcF9hZGRyKGNvbnN0IGNoYXIgKnMsIHUzMiAqYWRkciwgaW50IG5hKSB7IH0KICNlbmRpZgogCi0vKiBSZWFkIGEgYmlnIGFkZHJlc3MgKi8KLXN0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfYWRkcih1MzIgKmNlbGwsIGludCBzaXplKQotewotCXU2NCByID0gMDsKLQl3aGlsZSAoc2l6ZS0tKQotCQlyID0gKHIgPDwgMzIpIHwgKihjZWxsKyspOwotCXJldHVybiByOwotfQogCiAvKiBDYWxsYmFja3MgZm9yIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9ycyAqLwogc3RydWN0IG9mX2J1cyB7CkBAIC03Nyw5ICs2OSw5IEBACiB7CiAJdTY0IGNwLCBzLCBkYTsKIAotCWNwID0gb2ZfcmVhZF9hZGRyKHJhbmdlLCBuYSk7Ci0JcyAgPSBvZl9yZWFkX2FkZHIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOwotCWRhID0gb2ZfcmVhZF9hZGRyKGFkZHIsIG5hKTsKKwljcCA9IG9mX3JlYWRfbnVtYmVyKHJhbmdlLCBuYSk7CisJcyAgPSBvZl9yZWFkX251bWJlcihyYW5nZSArIG5hICsgcG5hLCBucyk7CisJZGEgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7CiAKIAlEQkcoIk9GOiBkZWZhdWx0IG1hcCwgY3A9IlBSdTY0Iiwgcz0iUFJ1NjQiLCBkYT0iUFJ1NjQiXG4iLAogCSAgICBjcCwgcywgZGEpOwpAQCAtOTEsNyArODMsNyBAQAogCiBzdGF0aWMgaW50IG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZSh1MzIgKmFkZHIsIHU2NCBvZmZzZXQsIGludCBuYSkKIHsKLQl1NjQgYSA9IG9mX3JlYWRfYWRkcihhZGRyLCBuYSk7CisJdTY0IGEgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7CiAJbWVtc2V0KGFkZHIsIDAsIG5hICogNCk7CiAJYSArPSBvZmZzZXQ7CiAJaWYgKG5hID4gMSkKQEAgLTEzNSw5ICsxMjcsOSBAQAogCQlyZXR1cm4gT0ZfQkFEX0FERFI7CiAKIAkvKiBSZWFkIGFkZHJlc3MgdmFsdWVzLCBza2lwcGluZyBoaWdoIGNlbGwgKi8KLQljcCA9IG9mX3JlYWRfYWRkcihyYW5nZSArIDEsIG5hIC0gMSk7Ci0JcyAgPSBvZl9yZWFkX2FkZHIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOwotCWRhID0gb2ZfcmVhZF9hZGRyKGFkZHIgKyAxLCBuYSAtIDEpOworCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyAxLCBuYSAtIDEpOworCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOworCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciArIDEsIG5hIC0gMSk7CiAKIAlEQkcoIk9GOiBQQ0kgbWFwLCBjcD0iUFJ1NjQiLCBzPSJQUnU2NCIsIGRhPSJQUnU2NCJcbiIsIGNwLCBzLCBkYSk7CiAKQEAgLTE5NSw5ICsxODcsOSBAQAogCQlyZXR1cm4gT0ZfQkFEX0FERFI7CiAKIAkvKiBSZWFkIGFkZHJlc3MgdmFsdWVzLCBza2lwcGluZyBoaWdoIGNlbGwgKi8KLQljcCA9IG9mX3JlYWRfYWRkcihyYW5nZSArIDEsIG5hIC0gMSk7Ci0JcyAgPSBvZl9yZWFkX2FkZHIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOwotCWRhID0gb2ZfcmVhZF9hZGRyKGFkZHIgKyAxLCBuYSAtIDEpOworCWNwID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyAxLCBuYSAtIDEpOworCXMgID0gb2ZfcmVhZF9udW1iZXIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOworCWRhID0gb2ZfcmVhZF9udW1iZXIoYWRkciArIDEsIG5hIC0gMSk7CiAKIAlEQkcoIk9GOiBJU0EgbWFwLCBjcD0iUFJ1NjQiLCBzPSJQUnU2NCIsIGRhPSJQUnU2NCJcbiIsIGNwLCBzLCBkYSk7CiAKQEAgLTI5NSw3ICsyODcsNyBAQAogCSAqLwogCXJhbmdlcyA9ICh1MzIgKilnZXRfcHJvcGVydHkocGFyZW50LCAicmFuZ2VzIiwgJnJsZW4pOwogCWlmIChyYW5nZXMgPT0gTlVMTCB8fCBybGVuID09IDApIHsKLQkJb2Zmc2V0ID0gb2ZfcmVhZF9hZGRyKGFkZHIsIG5hKTsKKwkJb2Zmc2V0ID0gb2ZfcmVhZF9udW1iZXIoYWRkciwgbmEpOwogCQltZW1zZXQoYWRkciwgMCwgcG5hICogNCk7CiAJCURCRygiT0Y6IG5vIHJhbmdlcywgMToxIHRyYW5zbGF0aW9uXG4iKTsKIAkJZ290byBmaW5pc2g7CkBAIC0zNzgsNyArMzcwLDcgQEAKIAkJLyogSWYgcm9vdCwgd2UgaGF2ZSBmaW5pc2hlZCAqLwogCQlpZiAocGFyZW50ID09IE5VTEwpIHsKIAkJCURCRygiT0Y6IHJlYWNoZWQgcm9vdCBub2RlXG4iKTsKLQkJCXJlc3VsdCA9IG9mX3JlYWRfYWRkcihhZGRyLCBuYSk7CisJCQlyZXN1bHQgPSBvZl9yZWFkX251bWJlcihhZGRyLCBuYSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC00NDIsNyArNDM0LDcgQEAKIAlmb3IgKGkgPSAwOyBwc2l6ZSA+PSBvbmVzaXplOyBwc2l6ZSAtPSBvbmVzaXplLCBwcm9wICs9IG9uZXNpemUsIGkrKykKIAkJaWYgKGkgPT0gaW5kZXgpIHsKIAkJCWlmIChzaXplKQotCQkJCSpzaXplID0gb2ZfcmVhZF9hZGRyKHByb3AgKyBuYSwgbnMpOworCQkJCSpzaXplID0gb2ZfcmVhZF9udW1iZXIocHJvcCArIG5hLCBucyk7CiAJCQlpZiAoZmxhZ3MpCiAJCQkJKmZsYWdzID0gYnVzLT5nZXRfZmxhZ3MocHJvcCk7CiAJCQlyZXR1cm4gcHJvcDsKQEAgLTQ4NCw3ICs0NzYsNyBAQAogCWZvciAoaSA9IDA7IHBzaXplID49IG9uZXNpemU7IHBzaXplIC09IG9uZXNpemUsIHByb3AgKz0gb25lc2l6ZSwgaSsrKQogCQlpZiAoKHByb3BbMF0gJiAweGZmKSA9PSAoKGJhcl9ubyAqIDQpICsgUENJX0JBU0VfQUREUkVTU18wKSkgewogCQkJaWYgKHNpemUpCi0JCQkJKnNpemUgPSBvZl9yZWFkX2FkZHIocHJvcCArIG5hLCBucyk7CisJCQkJKnNpemUgPSBvZl9yZWFkX251bWJlcihwcm9wICsgbmEsIG5zKTsKIAkJCWlmIChmbGFncykKIAkJCQkqZmxhZ3MgPSBidXMtPmdldF9mbGFncyhwcm9wKTsKIAkJCXJldHVybiBwcm9wOwpAQCAtNTY1LDExICs1NTcsNDE0IEBACiAJCXByb3AgPSBnZXRfcHJvcGVydHkoZG4sICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwogCiAJY2VsbHMgPSBwcm9wID8gKih1MzIgKilwcm9wIDogcHJvbV9uX2FkZHJfY2VsbHMoZG4pOwotCSpwaHlzID0gb2ZfcmVhZF9hZGRyKGRtYV93aW5kb3csIGNlbGxzKTsKKwkqcGh5cyA9IG9mX3JlYWRfbnVtYmVyKGRtYV93aW5kb3csIGNlbGxzKTsKIAogCWRtYV93aW5kb3cgKz0gY2VsbHM7CiAKIAlwcm9wID0gZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLCNkbWEtc2l6ZS1jZWxscyIsIE5VTEwpOwogCWNlbGxzID0gcHJvcCA/ICoodTMyICopcHJvcCA6IHByb21fbl9zaXplX2NlbGxzKGRuKTsKLQkqc2l6ZSA9IG9mX3JlYWRfYWRkcihkbWFfd2luZG93LCBjZWxscyk7CisJKnNpemUgPSBvZl9yZWFkX251bWJlcihkbWFfd2luZG93LCBjZWxscyk7CiB9CisKKy8qCisgKiBJbnRlcnJ1cHQgcmVtYXBwZXIKKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IG9mX2lycV93b3JrYXJvdW5kczsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2lycV9kZmx0X3BpYzsKKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwOworCXBoYW5kbGUgKnBhcnA7CisKKwlpZiAoIW9mX25vZGVfZ2V0KGNoaWxkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkbyB7CisJCXBhcnAgPSAocGhhbmRsZSAqKWdldF9wcm9wZXJ0eShjaGlsZCwgImludGVycnVwdC1wYXJlbnQiLCBOVUxMKTsKKwkJaWYgKHBhcnAgPT0gTlVMTCkKKwkJCXAgPSBvZl9nZXRfcGFyZW50KGNoaWxkKTsKKwkJZWxzZSB7CisJCQlpZiAob2ZfaXJxX3dvcmthcm91bmRzICYgT0ZfSU1BUF9OT19QSEFORExFKQorCQkJCXAgPSBvZl9ub2RlX2dldChvZl9pcnFfZGZsdF9waWMpOworCQkJZWxzZQorCQkJCXAgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGFycCk7CisJCX0KKwkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQljaGlsZCA9IHA7CisJfSB3aGlsZSAocCAmJiBnZXRfcHJvcGVydHkocCwgIiNpbnRlcnJ1cHQtY2VsbHMiLCBOVUxMKSA9PSBOVUxMKTsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgdTggb2ZfaXJxX3BjaV9zd2l6emxlKHU4IHNsb3QsIHU4IHBpbikKK3sKKwlyZXR1cm4gKCgocGluIC0gMSkgKyBzbG90KSAlIDQpICsgMTsKK30KKworLyogVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkIGlmIHlvdSBkb24ndCBoYXZlIGFueSBzcGVjaWFsIHdvcmthcm91bmQKKyAqIGZsYWdzIHRvIHBhc3MKKyAqLwordm9pZCBvZl9pcnFfbWFwX2luaXQodW5zaWduZWQgaW50IGZsYWdzKQoreworCW9mX2lycV93b3JrYXJvdW5kcyA9IGZsYWdzOworCisJLyogT2xkV29ybGQsIGRvbid0IGJvdGhlciBsb29raW5nIGF0IG90aGVyIHRoaW5ncyAqLworCWlmIChmbGFncyAmIE9GX0lNQVBfT0xEV09STERfTUFDKQorCQlyZXR1cm47CisKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIHBoYW5kbGVzLCBsZXQncyB0cnkgdG8gbG9jYXRlIGEgZGVmYXVsdCBpbnRlcnJ1cHQKKwkgKiBjb250cm9sbGVyIChoYXBwZW5zIHdoZW4gYm9vdGluZyB3aXRoIEJvb3RYKS4gV2UgZG8gYSBmaXJzdCBtYXRjaAorCSAqIGhlcmUsIGhvcGVmdWxseSwgdGhhdCBvbmx5IGV2ZXIgaGFwcGVucyBvbiBtYWNoaW5lcyB3aXRoIG9uZQorCSAqIGNvbnRyb2xsZXIuCisJICovCisJaWYgKGZsYWdzICYgT0ZfSU1BUF9OT19QSEFORExFKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwkJZm9yKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9hbGxfbm9kZXMobnApKSAhPSBOVUxMOykgeworCQkJaWYgKGdldF9wcm9wZXJ0eShucCwgImludGVycnVwdC1jb250cm9sbGVyIiwgTlVMTCkKKwkJCSAgICA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJLyogU2tpcCAvY2hvc2VuL2ludGVycnVwdC1jb250cm9sbGVyICovCisJCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAiY2hvc2VuIikgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCS8qIEl0IHNlZW1zIGxpa2UgYXQgbGVhc3Qgb25lIHBlcnNvbiBvbiB0aGlzIHBsYW5ldCB3YW50cworCQkJICogdG8gdXNlIEJvb3RYIG9uIGEgbWFjaGluZSB3aXRoIGFuIEFwcGxlS2l3aSBjb250cm9sbGVyCisJCQkgKiB3aGljaCBoYXBwZW5zIHRvIHByZXRlbmQgdG8gYmUgYW4gaW50ZXJydXB0CisJCQkgKiBjb250cm9sbGVyIHRvby4KKwkJCSAqLworCQkJaWYgKHN0cmNtcChucC0+bmFtZSwgIkFwcGxlS2l3aSIpID09IDApCisJCQkJY29udGludWU7CisJCQkvKiBJIHRoaW5rIHdlIGZvdW5kIG9uZSAhICovCisJCQlvZl9pcnFfZGZsdF9waWMgPSBucDsKKwkJCWJyZWFrOworCQl9CisJfQorCit9CisKK2ludCBvZl9pcnFfbWFwX3JhdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgdTMyICppbnRzcGVjLCB1MzIgKmFkZHIsCisJCSAgIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICppcGFyLCAqdG5vZGUsICpvbGQgPSBOVUxMLCAqbmV3cGFyID0gTlVMTDsKKwl1MzIgKnRtcCwgKmltYXAsICppbWFzazsKKwl1MzIgaW50c2l6ZSA9IDEsIGFkZHJzaXplLCBuZXdpbnRzaXplID0gMCwgbmV3YWRkcnNpemUgPSAwOworCWludCBpbWFwbGVuLCBtYXRjaCwgaTsKKworCWlwYXIgPSBvZl9ub2RlX2dldChwYXJlbnQpOworCisJLyogRmlyc3QgZ2V0IHRoZSAjaW50ZXJydXB0LWNlbGxzIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGN1cnNvcgorCSAqIHRoYXQgdGVsbHMgdXMgaG93IHRvIGludGVycHJldCB0aGUgcGFzc2VkLWluIGludHNwZWMuIElmIHRoZXJlCisJICogaXMgbm9uZSwgd2UgYXJlIG5pY2UgYW5kIGp1c3Qgd2FsayB1cCB0aGUgdHJlZQorCSAqLworCWRvIHsKKwkJdG1wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShpcGFyLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOworCQlpZiAodG1wICE9IE5VTEwpIHsKKwkJCWludHNpemUgPSAqdG1wOworCQkJYnJlYWs7CisJCX0KKwkJdG5vZGUgPSBpcGFyOworCQlpcGFyID0gb2ZfaXJxX2ZpbmRfcGFyZW50KGlwYXIpOworCQlvZl9ub2RlX3B1dCh0bm9kZSk7CisJfSB3aGlsZSAoaXBhcik7CisJaWYgKGlwYXIgPT0gTlVMTCkgeworCQlEQkcoIiAtPiBubyBwYXJlbnQgZm91bmQgIVxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlEQkcoIm9mX2lycV9tYXBfcmF3OiBpcGFyPSVzLCBzaXplPSVkXG4iLCBpcGFyLT5mdWxsX25hbWUsIGludHNpemUpOworCisJLyogTG9vayBmb3IgdGhpcyAjYWRkcmVzcy1jZWxscy4gV2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIG9sZCBsaW51eAorCSAqIHRyaWNrIG9mIGxvb2tpbmcgZm9yIHRoZSBwYXJlbnQgaGVyZSBhcyBzb21lIGRldmljZS10cmVlcyByZWx5IG9uIGl0CisJICovCisJb2xkID0gb2Zfbm9kZV9nZXQoaXBhcik7CisJZG8geworCQl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG9sZCwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7CisJCXRub2RlID0gb2ZfZ2V0X3BhcmVudChvbGQpOworCQlvZl9ub2RlX3B1dChvbGQpOworCQlvbGQgPSB0bm9kZTsKKwl9IHdoaWxlKG9sZCAmJiB0bXAgPT0gTlVMTCk7CisJb2Zfbm9kZV9wdXQob2xkKTsKKwlvbGQgPSBOVUxMOworCWFkZHJzaXplID0gKHRtcCA9PSBOVUxMKSA/IDIgOiAqdG1wOworCisJREJHKCIgLT4gYWRkcnNpemU9JWRcbiIsIGFkZHJzaXplKTsKKworCS8qIE5vdyBzdGFydCB0aGUgYWN0dWFsICJwcm9wZXIiIHdhbGsgb2YgdGhlIGludGVycnVwdCB0cmVlICovCisJd2hpbGUgKGlwYXIgIT0gTlVMTCkgeworCQkvKiBOb3cgY2hlY2sgaWYgY3Vyc29yIGlzIGFuIGludGVycnVwdC1jb250cm9sbGVyIGFuZCBpZiBpdCBpcworCQkgKiB0aGVuIHdlIGFyZSBkb25lCisJCSAqLworCQlpZiAoZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtY29udHJvbGxlciIsIE5VTEwpICE9IE5VTEwpIHsKKwkJCURCRygiIC0+IGdvdCBpdCAhXG4iKTsKKwkJCW1lbWNweShvdXRfaXJxLT5zcGVjaWZpZXIsIGludHNwZWMsCisJCQkgICAgICAgaW50c2l6ZSAqIHNpemVvZih1MzIpKTsKKwkJCW91dF9pcnEtPnNpemUgPSBpbnRzaXplOworCQkJb3V0X2lycS0+Y29udHJvbGxlciA9IGlwYXI7CisJCQlvZl9ub2RlX3B1dChvbGQpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBOb3cgbG9vayBmb3IgYW4gaW50ZXJydXB0LW1hcCAqLworCQlpbWFwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShpcGFyLCAiaW50ZXJydXB0LW1hcCIsICZpbWFwbGVuKTsKKwkJLyogTm8gaW50ZXJydXB0IG1hcCwgY2hlY2sgZm9yIGFuIGludGVycnVwdCBwYXJlbnQgKi8KKwkJaWYgKGltYXAgPT0gTlVMTCkgeworCQkJREJHKCIgLT4gbm8gbWFwLCBnZXR0aW5nIHBhcmVudFxuIik7CisJCQluZXdwYXIgPSBvZl9pcnFfZmluZF9wYXJlbnQoaXBhcik7CisJCQlnb3RvIHNraXBsZXZlbDsKKwkJfQorCQlpbWFwbGVuIC89IHNpemVvZih1MzIpOworCisJCS8qIExvb2sgZm9yIGEgbWFzayAqLworCQlpbWFzayA9ICh1MzIgKilnZXRfcHJvcGVydHkoaXBhciwgImludGVycnVwdC1tYXAtbWFzayIsIE5VTEwpOworCisJCS8qIElmIHdlIHdlcmUgcGFzc2VkIG5vICJyZWciIHByb3BlcnR5IGFuZCB3ZSBhdHRlbXB0IHRvIHBhcnNlCisJCSAqIGFuIGludGVycnVwdC1tYXAsIHRoZW4gI2FkZHJlc3MtY2VsbHMgbXVzdCBiZSAwLgorCQkgKiBGYWlsIGlmIGl0J3Mgbm90LgorCQkgKi8KKwkJaWYgKGFkZHIgPT0gTlVMTCAmJiBhZGRyc2l6ZSAhPSAwKSB7CisJCQlEQkcoIiAtPiBubyByZWcgcGFzc2VkIGluIHdoZW4gbmVlZGVkICFcbiIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJLyogUGFyc2UgaW50ZXJydXB0LW1hcCAqLworCQltYXRjaCA9IDA7CisJCXdoaWxlIChpbWFwbGVuID4gKGFkZHJzaXplICsgaW50c2l6ZSArIDEpICYmICFtYXRjaCkgeworCQkJLyogQ29tcGFyZSBzcGVjaWZpZXJzICovCisJCQltYXRjaCA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgYWRkcnNpemUgJiYgbWF0Y2g7ICsraSkgeworCQkJCXUzMiBtYXNrID0gaW1hc2sgPyBpbWFza1tpXSA6IDB4ZmZmZmZmZmZ1OworCQkJCW1hdGNoID0gKChhZGRyW2ldIF4gaW1hcFtpXSkgJiBtYXNrKSA9PSAwOworCQkJfQorCQkJZm9yICg7IGkgPCAoYWRkcnNpemUgKyBpbnRzaXplKSAmJiBtYXRjaDsgKytpKSB7CisJCQkJdTMyIG1hc2sgPSBpbWFzayA/IGltYXNrW2ldIDogMHhmZmZmZmZmZnU7CisJCQkJbWF0Y2ggPQorCQkJCSAgICgoaW50c3BlY1tpLWFkZHJzaXplXSBeIGltYXBbaV0pICYgbWFzaykgPT0gMDsKKwkJCX0KKwkJCWltYXAgKz0gYWRkcnNpemUgKyBpbnRzaXplOworCQkJaW1hcGxlbiAtPSBhZGRyc2l6ZSArIGludHNpemU7CisKKwkJCURCRygiIC0+IG1hdGNoPSVkIChpbWFwbGVuPSVkKVxuIiwgbWF0Y2gsIGltYXBsZW4pOworCisJCQkvKiBHZXQgdGhlIGludGVycnVwdCBwYXJlbnQgKi8KKwkJCWlmIChvZl9pcnFfd29ya2Fyb3VuZHMgJiBPRl9JTUFQX05PX1BIQU5ETEUpCisJCQkJbmV3cGFyID0gb2Zfbm9kZV9nZXQob2ZfaXJxX2RmbHRfcGljKTsKKwkJCWVsc2UKKwkJCQluZXdwYXIgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgocGhhbmRsZSkqaW1hcCk7CisJCQlpbWFwKys7CisJCQktLWltYXBsZW47CisKKwkJCS8qIENoZWNrIGlmIG5vdCBmb3VuZCAqLworCQkJaWYgKG5ld3BhciA9PSBOVUxMKSB7CisJCQkJREJHKCIgLT4gaW1hcCBwYXJlbnQgbm90IGZvdW5kICFcbiIpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKworCQkJLyogR2V0ICNpbnRlcnJ1cHQtY2VsbHMgYW5kICNhZGRyZXNzLWNlbGxzIG9mIG5ldworCQkJICogcGFyZW50CisJCQkgKi8KKwkJCXRtcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobmV3cGFyLCAiI2ludGVycnVwdC1jZWxscyIsCisJCQkJCQkgIE5VTEwpOworCQkJaWYgKHRtcCA9PSBOVUxMKSB7CisJCQkJREJHKCIgLT4gcGFyZW50IGxhY2tzICNpbnRlcnJ1cHQtY2VsbHMgIVxuIik7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJbmV3aW50c2l6ZSA9ICp0bXA7CisJCQl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5ld3BhciwgIiNhZGRyZXNzLWNlbGxzIiwKKwkJCQkJCSAgTlVMTCk7CisJCQluZXdhZGRyc2l6ZSA9ICh0bXAgPT0gTlVMTCkgPyAwIDogKnRtcDsKKworCQkJREJHKCIgLT4gbmV3aW50c2l6ZT0lZCwgbmV3YWRkcnNpemU9JWRcbiIsCisJCQkgICAgbmV3aW50c2l6ZSwgbmV3YWRkcnNpemUpOworCisJCQkvKiBDaGVjayBmb3IgbWFsZm9ybWVkIHByb3BlcnRpZXMgKi8KKwkJCWlmIChpbWFwbGVuIDwgKG5ld2FkZHJzaXplICsgbmV3aW50c2l6ZSkpCisJCQkJZ290byBmYWlsOworCisJCQlpbWFwICs9IG5ld2FkZHJzaXplICsgbmV3aW50c2l6ZTsKKwkJCWltYXBsZW4gLT0gbmV3YWRkcnNpemUgKyBuZXdpbnRzaXplOworCisJCQlEQkcoIiAtPiBpbWFwbGVuPSVkXG4iLCBpbWFwbGVuKTsKKwkJfQorCQlpZiAoIW1hdGNoKQorCQkJZ290byBmYWlsOworCisJCW9mX25vZGVfcHV0KG9sZCk7CisJCW9sZCA9IG9mX25vZGVfZ2V0KG5ld3Bhcik7CisJCWFkZHJzaXplID0gbmV3YWRkcnNpemU7CisJCWludHNpemUgPSBuZXdpbnRzaXplOworCQlpbnRzcGVjID0gaW1hcCAtIGludHNpemU7CisJCWFkZHIgPSBpbnRzcGVjIC0gYWRkcnNpemU7CisKKwlza2lwbGV2ZWw6CisJCS8qIEl0ZXJhdGUgYWdhaW4gd2l0aCBuZXcgcGFyZW50ICovCisJCURCRygiIC0+IG5ldyBwYXJlbnQ6ICVzXG4iLCBuZXdwYXIgPyBuZXdwYXItPmZ1bGxfbmFtZSA6ICI8PiIpOworCQlvZl9ub2RlX3B1dChpcGFyKTsKKwkJaXBhciA9IG5ld3BhcjsKKwkJbmV3cGFyID0gTlVMTDsKKwl9CisgZmFpbDoKKwlvZl9ub2RlX3B1dChpcGFyKTsKKwlvZl9ub2RlX3B1dChvbGQpOworCW9mX25vZGVfcHV0KG5ld3Bhcik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV9tYXBfcmF3KTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKK3N0YXRpYyBpbnQgb2ZfaXJxX21hcF9vbGR3b3JsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgaW50IGluZGV4LAorCQkJICAgICAgIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCit7CisJdTMyICppbnRzOworCWludCBpbnRsZW47CisKKwkvKgorCSAqIE9sZCBtYWNoaW5lcyBqdXN0IGhhdmUgYSBsaXN0IG9mIGludGVycnVwdCBudW1iZXJzCisJICogYW5kIG5vIGludGVycnVwdC1jb250cm9sbGVyIG5vZGVzLgorCSAqLworCWludHMgPSAodTMyICopIGdldF9wcm9wZXJ0eShkZXZpY2UsICJBQVBMLGludGVycnVwdHMiLCAmaW50bGVuKTsKKwlpZiAoaW50cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnRsZW4gLz0gc2l6ZW9mKHUzMik7CisKKwlpZiAoaW5kZXggPj0gaW50bGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW91dF9pcnEtPmNvbnRyb2xsZXIgPSBOVUxMOworCW91dF9pcnEtPnNwZWNpZmllclswXSA9IGludHNbaW5kZXhdOworCW91dF9pcnEtPnNpemUgPSAxOworCisJcmV0dXJuIDA7Cit9CisjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpICovCitzdGF0aWMgaW50IG9mX2lycV9tYXBfb2xkd29ybGQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2ZfaXJxICpvdXRfaXJxKQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmIC8qICEoZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKSkgKi8KKworaW50IG9mX2lycV9tYXBfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwOworCXUzMiAqaW50c3BlYywgKnRtcCwgaW50c2l6ZSwgaW50bGVuLCAqYWRkcjsKKwlpbnQgcmVzOworCisJREJHKCJvZl9pcnFfbWFwX29uZTogZGV2PSVzLCBpbmRleD0lZFxuIiwgZGV2aWNlLT5mdWxsX25hbWUsIGluZGV4KTsKKworCS8qIE9sZFdvcmxkIG1hYyBzdHVmZiBpcyAic3BlY2lhbCIsIGhhbmRsZSBvdXQgb2YgbGluZSAqLworCWlmIChvZl9pcnFfd29ya2Fyb3VuZHMgJiBPRl9JTUFQX09MRFdPUkxEX01BQykKKwkJcmV0dXJuIG9mX2lycV9tYXBfb2xkd29ybGQoZGV2aWNlLCBpbmRleCwgb3V0X2lycSk7CisKKwkvKiBHZXQgdGhlIGludGVycnVwdHMgcHJvcGVydHkgKi8KKwlpbnRzcGVjID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkZXZpY2UsICJpbnRlcnJ1cHRzIiwgJmludGxlbik7CisJaWYgKGludHNwZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaW50bGVuIC89IHNpemVvZih1MzIpOworCisJLyogR2V0IHRoZSByZWcgcHJvcGVydHkgKGlmIGFueSkgKi8KKwlhZGRyID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkZXZpY2UsICJyZWciLCBOVUxMKTsKKworCS8qIExvb2sgZm9yIHRoZSBpbnRlcnJ1cHQgcGFyZW50LiAqLworCXAgPSBvZl9pcnFfZmluZF9wYXJlbnQoZGV2aWNlKTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCBzaXplIG9mIGludGVycnVwdCBzcGVjaWZpZXIgKi8KKwl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHAsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7CisJaWYgKHRtcCA9PSBOVUxMKSB7CisJCW9mX25vZGVfcHV0KHApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaW50c2l6ZSA9ICp0bXA7CisKKwkvKiBDaGVjayBpbmRleCAqLworCWlmIChpbmRleCAqIGludHNpemUgPj0gaW50bGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCBuZXcgc3BlY2lmaWVyIGFuZCBtYXAgaXQgKi8KKwlyZXMgPSBvZl9pcnFfbWFwX3JhdyhwLCBpbnRzcGVjICsgaW5kZXggKiBpbnRzaXplLCBhZGRyLCBvdXRfaXJxKTsKKwlvZl9ub2RlX3B1dChwKTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX21hcF9vbmUpOworCitpbnQgb2ZfaXJxX21hcF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbiwgKnBwbm9kZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcHBkZXY7CisJdTMyIGxzcGVjOworCXUzMiBsYWRkclszXTsKKwl1OCBwaW47CisJaW50IHJjOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGRldmljZSBub2RlLCBpZiB5ZXMsIGZhbGxiYWNrIHRvIHN0YW5kYXJkIE9GCisJICogcGFyc2luZworCSAqLworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOworCWlmIChkbikKKwkJcmV0dXJuIG9mX2lycV9tYXBfb25lKGRuLCAwLCBvdXRfaXJxKTsKKworCS8qIE9rLCB3ZSBkb24ndCwgdGltZSB0byBoYXZlIGZ1bi4gTGV0J3Mgc3RhcnQgYnkgYnVpbGRpbmcgdXAgYW4KKwkgKiBpbnRlcnJ1cHQgc3BlYy4gIHdlIGFzc3VtZSAjaW50ZXJydXB0LWNlbGxzIGlzIDEsIHdoaWNoIGlzIHN0YW5kYXJkCisJICogZm9yIFBDSS4gSWYgeW91IGRvIGRpZmZlcmVudCwgdGhlbiBkb24ndCB1c2UgdGhhdCByb3V0aW5lLgorCSAqLworCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZwaW4pOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisJLyogTm8gcGluLCBleGl0ICovCisJaWYgKHBpbiA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIE5vdyB3ZSB3YWxrIHVwIHRoZSBQQ0kgdHJlZSAqLworCWxzcGVjID0gcGluOworCWZvciAoOzspIHsKKwkJLyogR2V0IHRoZSBwY2lfZGV2IG9mIG91ciBwYXJlbnQgKi8KKwkJcHBkZXYgPSBwZGV2LT5idXMtPnNlbGY7CisKKwkJLyogT3VjaCwgaXQncyBhIGhvc3QgYnJpZGdlLi4uICovCisJCWlmIChwcGRldiA9PSBOVUxMKSB7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCQlwcG5vZGUgPSBwY2lfYnVzX3RvX09GX25vZGUocGRldi0+YnVzKTsKKyNlbHNlCisJCQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc3Q7CisJCQlob3N0ID0gcGNpX2J1c190b19ob3N0KHBkZXYtPmJ1cyk7CisJCQlwcG5vZGUgPSBob3N0ID8gaG9zdC0+YXJjaF9kYXRhIDogTlVMTDsKKyNlbmRpZgorCQkJLyogTm8gbm9kZSBmb3IgaG9zdCBicmlkZ2UgPyBnaXZlIHVwICovCisJCQlpZiAocHBub2RlID09IE5VTEwpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJLyogV2UgZm91bmQgYSBQMlAgYnJpZGdlLCBjaGVjayBpZiBpdCBoYXMgYSBub2RlICovCisJCQlwcG5vZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocHBkZXYpOworCisJCS8qIE9rLCB3ZSBoYXZlIGZvdW5kIGEgcGFyZW50IHdpdGggYSBkZXZpY2Utbm9kZSwgaGFuZCBvdmVyIHRvCisJCSAqIHRoZSBPRiBwYXJzaW5nIGNvZGUuCisJCSAqIFdlIGJ1aWxkIGEgdW5pdCBhZGRyZXNzIGZyb20gdGhlIGxpbnV4IGRldmljZSB0byBiZSB1c2VkIGZvcgorCQkgKiByZXNvbHV0aW9uLiBOb3RlIHRoYXQgd2UgdXNlIHRoZSBsaW51eCBidXMgbnVtYmVyIHdoaWNoIG1heQorCQkgKiBub3QgbWF0Y2ggeW91ciBmaXJtd2FyZSBidXMgbnVtYmVyaW5nLgorCQkgKiBGb3J0dW5hdGVseSwgaW4gbW9zdCBjYXNlcywgaW50ZXJydXB0LW1hcC1tYXNrIGRvZXNuJ3QgaW5jbHVkZQorCQkgKiB0aGUgYnVzIG51bWJlciBhcyBwYXJ0IG9mIHRoZSBtYXRjaGluZy4KKwkJICogWW91IHNob3VsZCBzdGlsbCBiZSBjYXJlZnVsIGFib3V0IHRoYXQgdGhvdWdoIGlmIHlvdSBpbnRlbmQKKwkJICogdG8gcmVseSBvbiB0aGlzIGZ1bmN0aW9uICh5b3Ugc2hpcCAgYSBmaXJtd2FyZSB0aGF0IGRvZXNuJ3QKKwkJICogY3JlYXRlIGRldmljZSBub2RlcyBmb3IgYWxsIFBDSSBkZXZpY2VzKS4KKwkJICovCisJCWlmIChwcG5vZGUpCisJCQlicmVhazsKKworCQkvKiBXZSBjYW4gb25seSBnZXQgaGVyZSBpZiB3ZSBoaXQgYSBQMlAgYnJpZGdlIHdpdGggbm8gbm9kZSwKKwkJICogbGV0J3MgZG8gc3RhbmRhcmQgc3dpenpsaW5nIGFuZCB0cnkgYWdhaW4KKwkJICovCisJCWxzcGVjID0gb2ZfaXJxX3BjaV9zd2l6emxlKFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgbHNwZWMpOworCQlwZGV2ID0gcHBkZXY7CisJfQorCisJbGFkZHJbMF0gPSAocGRldi0+YnVzLT5udW1iZXIgPDwgMTYpCisJCXwgKHBkZXYtPmRldmZuIDw8IDgpOworCWxhZGRyWzFdICA9IGxhZGRyWzJdID0gMDsKKwlyZXR1cm4gb2ZfaXJxX21hcF9yYXcocHBub2RlLCAmbHNwZWMsIGxhZGRyLCBvdXRfaXJxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV9tYXBfcGNpKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS1jb21tb24uaAppbmRleCBjNDJhODYwLi44Nzk3YWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS1jb21tb24uaAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS1jb21tb24uaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfUFBDNjRfUFRSQUNFX0NPTU1PTl9ICiAjZGVmaW5lIF9QUEM2NF9QVFJBQ0VfQ09NTU9OX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IDU1NjNlMmUuLmRlYTc1ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTUsNyArMTUsNiBAQAogICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlMzIuYwppbmRleCA4MjZlZTNkLi45YjlhMjMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZTMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UzMi5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCAxN2RjNzkxLi40YTRjYjU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtMzgsMTYgKzM4LDE5IEBACiBzdHJ1Y3QgcnRhc190IHJ0YXMgPSB7CiAJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQKIH07CitFWFBPUlRfU1lNQk9MKHJ0YXMpOwogCiBzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgewogCWxvbmcgd2FpdGluZzsKIAlzdHJ1Y3QgcnRhc19hcmdzICphcmdzOwogfTsKIAotRVhQT1JUX1NZTUJPTChydGFzKTsKLQogREVGSU5FX1NQSU5MT0NLKHJ0YXNfZGF0YV9idWZfbG9jayk7CitFWFBPUlRfU1lNQk9MKHJ0YXNfZGF0YV9idWZfbG9jayk7CisKIGNoYXIgcnRhc19kYXRhX2J1ZltSVEFTX0RBVEFfQlVGX1NJWkVdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitFWFBPUlRfU1lNQk9MKHJ0YXNfZGF0YV9idWYpOworCiB1bnNpZ25lZCBsb25nIHJ0YXNfcm1vX2J1ZjsKIAogLyoKQEAgLTEwNiwxMSArMTA5LDcxIEBACiAJfQogfQogCi12b2lkIF9faW5pdCB1ZGJnX2luaXRfcnRhcyh2b2lkKQordm9pZCBfX2luaXQgdWRiZ19pbml0X3J0YXNfcGFuZWwodm9pZCkKIHsKIAl1ZGJnX3B1dGMgPSBjYWxsX3J0YXNfZGlzcGxheV9zdGF0dXNfZGVsYXk7CiB9CiAKKyNpZmRlZiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUKKworLyogSWYgeW91IHRoaW5rIHlvdSdyZSBkeWluZyBiZWZvcmUgZWFybHlfaW5pdF9kdF9zY2FuX3J0YXMoKSBkb2VzIGl0cworICogd29yaywgeW91IGNhbiBoYXJkIGNvZGUgdGhlIHRva2VuIHZhbHVlcyBmb3IgeW91ciBmaXJtd2FyZSBoZXJlIGFuZAorICogaGFyZGNvZGUgcnRhcy5iYXNlL2VudHJ5IGV0Yy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBydGFzX3B1dGNoYXJfdG9rZW4gPSBSVEFTX1VOS05PV05fU0VSVklDRTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRhc19nZXRjaGFyX3Rva2VuID0gUlRBU19VTktOT1dOX1NFUlZJQ0U7CisKK3N0YXRpYyB2b2lkIHVkYmdfcnRhc2Nvbl9wdXRjKGNoYXIgYykKK3sKKwlpbnQgdHJpZXM7CisKKwlpZiAoIXJ0YXMuYmFzZSkKKwkJcmV0dXJuOworCisJLyogQWRkIENScyBiZWZvcmUgTEZzICovCisJaWYgKGMgPT0gJ1xuJykKKwkJdWRiZ19ydGFzY29uX3B1dGMoJ1xyJyk7CisKKwkvKiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciB0byBiZSBkaXNwbGF5ZWQsIHdhaXQgYSBiaXQgKi8KKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCAxNjsgdHJpZXMrKykgeworCQlpZiAocnRhc19jYWxsKHJ0YXNfcHV0Y2hhcl90b2tlbiwgMSwgMSwgTlVMTCwgYykgPT0gMCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwMCk7CisJfQorfQorCitzdGF0aWMgaW50IHVkYmdfcnRhc2Nvbl9nZXRjX3BvbGwodm9pZCkKK3sKKwlpbnQgYzsKKworCWlmICghcnRhcy5iYXNlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocnRhc19jYWxsKHJ0YXNfZ2V0Y2hhcl90b2tlbiwgMCwgMiwgJmMpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gYzsKK30KKworc3RhdGljIGludCB1ZGJnX3J0YXNjb25fZ2V0Yyh2b2lkKQoreworCWludCBjOworCisJd2hpbGUgKChjID0gdWRiZ19ydGFzY29uX2dldGNfcG9sbCgpKSA9PSAtMSkKKwkJOworCisJcmV0dXJuIGM7Cit9CisKKwordm9pZCBfX2luaXQgdWRiZ19pbml0X3J0YXNfY29uc29sZSh2b2lkKQoreworCXVkYmdfcHV0YyA9IHVkYmdfcnRhc2Nvbl9wdXRjOworCXVkYmdfZ2V0YyA9IHVkYmdfcnRhc2Nvbl9nZXRjOworCXVkYmdfZ2V0Y19wb2xsID0gdWRiZ19ydGFzY29uX2dldGNfcG9sbDsKK30KKyNlbmRpZiAvKiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgKi8KKwogdm9pZCBydGFzX3Byb2dyZXNzKGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGhleCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7CkBAIC0yMzYsNiArMjk5LDcgQEAKIAl0b2twID0gKGludCAqKSBnZXRfcHJvcGVydHkocnRhcy5kZXYsIHNlcnZpY2UsIE5VTEwpOwogCXJldHVybiB0b2twID8gKnRva3AgOiBSVEFTX1VOS05PV05fU0VSVklDRTsKIH0KK0VYUE9SVF9TWU1CT0wocnRhc190b2tlbik7CiAKICNpZmRlZiBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HCiAvKgpAQCAtMzI4LDcgKzM5Miw3IEBACiAJY2hhciAqYnVmZl9jb3B5ID0gTlVMTDsKIAlpbnQgcmV0OwogCi0JaWYgKHRva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQorCWlmICghcnRhcy5lbnRyeSB8fCB0b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkKIAkJcmV0dXJuIC0xOwogCiAJLyogR290dGEgZG8gc29tZXRoaW5nIGRpZmZlcmVudCBoZXJlLCB1c2UgZ2xvYmFsIGxvY2sgZm9yIG5vdy4uLiAqLwpAQCAtMzY5LDYgKzQzMyw3IEBACiAJfQogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKHJ0YXNfY2FsbCk7CiAKIC8qIEZvciBSVEFTX0JVU1kgKC0yKSwgZGVsYXkgZm9yIDEgbWlsbGlzZWNvbmQuICBGb3IgYW4gZXh0ZW5kZWQgYnVzeSBzdGF0dXMKICAqIGNvZGUgb2YgOTkwbiwgcGVyZm9ybSB0aGUgaGludGVkIGRlbGF5IG9mIDEwXm4gKGxhc3QgZGlnaXQpIG1pbGxpc2Vjb25kcy4KQEAgLTM4OCw2ICs0NTMsNyBAQAogCiAJcmV0dXJuIG1zOwogfQorRVhQT1JUX1NZTUJPTChydGFzX2J1c3lfZGVsYXlfdGltZSk7CiAKIC8qIEZvciBhbiBSVEFTIGJ1c3kgc3RhdHVzIGNvZGUsIHBlcmZvcm0gdGhlIGhpbnRlZCBkZWxheS4gKi8KIHVuc2lnbmVkIGludCBydGFzX2J1c3lfZGVsYXkoaW50IHN0YXR1cykKQEAgLTQwMSw2ICs0NjcsNyBAQAogCiAJcmV0dXJuIG1zOwogfQorRVhQT1JUX1NZTUJPTChydGFzX2J1c3lfZGVsYXkpOwogCiBpbnQgcnRhc19lcnJvcl9yYyhpbnQgcnRhc19yYykKIHsKQEAgLTQ0Niw2ICs1MTMsNyBAQAogCQlyZXR1cm4gcnRhc19lcnJvcl9yYyhyYyk7CiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTChydGFzX2dldF9wb3dlcl9sZXZlbCk7CiAKIGludCBydGFzX3NldF9wb3dlcl9sZXZlbChpbnQgcG93ZXJkb21haW4sIGludCBsZXZlbCwgaW50ICpzZXRsZXZlbCkKIHsKQEAgLTQ2Myw2ICs1MzEsNyBAQAogCQlyZXR1cm4gcnRhc19lcnJvcl9yYyhyYyk7CiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTChydGFzX3NldF9wb3dlcl9sZXZlbCk7CiAKIGludCBydGFzX2dldF9zZW5zb3IoaW50IHNlbnNvciwgaW50IGluZGV4LCBpbnQgKnN0YXRlKQogewpAQCAtNDgwLDYgKzU0OSw3IEBACiAJCXJldHVybiBydGFzX2Vycm9yX3JjKHJjKTsKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MKHJ0YXNfZ2V0X3NlbnNvcik7CiAKIGludCBydGFzX3NldF9pbmRpY2F0b3IoaW50IGluZGljYXRvciwgaW50IGluZGV4LCBpbnQgbmV3X3ZhbHVlKQogewpAQCAtNDk3LDYgKzU2Nyw3IEBACiAJCXJldHVybiBydGFzX2Vycm9yX3JjKHJjKTsKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MKHJ0YXNfc2V0X2luZGljYXRvcik7CiAKIHZvaWQgcnRhc19yZXN0YXJ0KGNoYXIgKmNtZCkKIHsKQEAgLTc5MSwxNCArODYyLDM0IEBACiAjZW5kaWYKIH0KIAoraW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcnRhcyh1bnNpZ25lZCBsb25nIG5vZGUsCisJCWNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJdTMyICpiYXNlcCwgKmVudHJ5cCwgKnNpemVwOwogCi1FWFBPUlRfU1lNQk9MKHJ0YXNfdG9rZW4pOwotRVhQT1JUX1NZTUJPTChydGFzX2NhbGwpOwotRVhQT1JUX1NZTUJPTChydGFzX2RhdGFfYnVmKTsKLUVYUE9SVF9TWU1CT0wocnRhc19kYXRhX2J1Zl9sb2NrKTsKLUVYUE9SVF9TWU1CT0wocnRhc19idXN5X2RlbGF5X3RpbWUpOwotRVhQT1JUX1NZTUJPTChydGFzX2J1c3lfZGVsYXkpOwotRVhQT1JUX1NZTUJPTChydGFzX2dldF9zZW5zb3IpOwotRVhQT1JUX1NZTUJPTChydGFzX2dldF9wb3dlcl9sZXZlbCk7Ci1FWFBPUlRfU1lNQk9MKHJ0YXNfc2V0X3Bvd2VyX2xldmVsKTsKLUVYUE9SVF9TWU1CT0wocnRhc19zZXRfaW5kaWNhdG9yKTsKKwlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJydGFzIikgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwliYXNlcCAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxydGFzLWJhc2UiLCBOVUxMKTsKKwllbnRyeXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxydGFzLWVudHJ5IiwgTlVMTCk7CisJc2l6ZXAgID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicnRhcy1zaXplIiwgTlVMTCk7CisKKwlpZiAoYmFzZXAgJiYgZW50cnlwICYmIHNpemVwKSB7CisJCXJ0YXMuYmFzZSA9ICpiYXNlcDsKKwkJcnRhcy5lbnRyeSA9ICplbnRyeXA7CisJCXJ0YXMuc2l6ZSA9ICpzaXplcDsKKwl9CisKKyNpZmRlZiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUKKwliYXNlcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInB1dC10ZXJtLWNoYXIiLCBOVUxMKTsKKwlpZiAoYmFzZXApCisJCXJ0YXNfcHV0Y2hhcl90b2tlbiA9ICpiYXNlcDsKKworCWJhc2VwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZ2V0LXRlcm0tY2hhciIsIE5VTEwpOworCWlmIChiYXNlcCkKKwkJcnRhc19nZXRjaGFyX3Rva2VuID0gKmJhc2VwOworI2VuZGlmCisKKwkvKiBicmVhayBub3cgKi8KKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwppbmRleCA2ZWI3ZTQ5Li5jZGEwMjI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCkBAIC0yOTcsMTkgKzI5Nyw5IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCXVuc2lnbmVkIGludCBpbmRleDsKLQl1bnNpZ25lZCBpbnQgcm9vdF9zaXplX2NlbGxzID0gMDsKLQl1bnNpZ25lZCBpbnQgKm9wcHJvcCA9IE5VTEw7CiAJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAotCWlmIChwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciA9PSBJQ19PUEVOX1BJQykgewotCQlvcHByb3AgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KHJvb3QsCi0JCQkJInBsYXRmb3JtLW9wZW4tcGljIiwgTlVMTCk7Ci0JfQotCi0Jcm9vdF9zaXplX2NlbGxzID0gcHJvbV9uX3NpemVfY2VsbHMocm9vdCk7Ci0KIAlpbmRleCA9IDA7Ci0KIAlmb3IgKG5vZGUgPSBvZl9nZXRfbmV4dF9jaGlsZChyb290LCBOVUxMKTsKIAkgICAgIG5vZGUgIT0gTlVMTDsKIAkgICAgIG5vZGUgPSBvZl9nZXRfbmV4dF9jaGlsZChyb290LCBub2RlKSkgewpAQCAtMzI0LDEzICszMTQsNiBAQAogCQlzZXR1cF9waGIobm9kZSwgcGhiKTsKIAkJcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3JhbmdlcyhwaGIsIG5vZGUsIDApOwogCQlwY2lfc2V0dXBfcGhiX2lvKHBoYiwgaW5kZXggPT0gMCk7Ci0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCi0JCS8qIFhYWCBUaGlzIGNvZGUgbmVlZCBzZXJpb3VzIGZpeGluZyAuLi4gLS1CZW5IICovCi0JCWlmIChwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciA9PSBJQ19PUEVOX1BJQyAmJiBwU2VyaWVzX21waWMpIHsKLQkJCWludCBhZGRyID0gcm9vdF9zaXplX2NlbGxzICogKGluZGV4ICsgMikgLSAxOwotCQkJbXBpY19hc3NpZ25faXN1KHBTZXJpZXNfbXBpYywgaW5kZXgsIG9wcHJvcFthZGRyXSk7Ci0JCX0KLSNlbmRpZgogCQlpbmRleCsrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggYmQzMjgxMi4uYzZkN2I5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0xMiw3ICsxMiw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAwOTMyYTYyLi5lMGRmMmJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0yLDcgKzIsNiBAQAogICogQ29tbW9uIHByZXAvcG1hYy9jaHJwIGJvb3QgYW5kIHNldHVwIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC01Miw3ICs1MSw2IEBACiAKIGV4dGVybiB2b2lkIGJvb3R4X2luaXQodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyBwaHlzKTsKIAotYm9vdF9pbmZvc190ICpib290X2luZm9zOwogc3RydWN0IGlkZV9tYWNoZGVwX2NhbGxzIHBwY19pZGVfbWQ7CiAKIGludCBib290X2NwdWlkOwpAQCAtMjQxLDcgKzIzOSw2IEBACiAJCXBwY19tZC5pbml0X2Vhcmx5KCk7CiAKIAlmaW5kX2xlZ2FjeV9zZXJpYWxfcG9ydHMoKTsKLQlmaW5pc2hfZGV2aWNlX3RyZWUoKTsKIAogCXNtcF9zZXR1cF9jcHVfbWFwcygpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggNzhmM2E1Zi4uZmQxNzg1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMTIsNyArMTIsNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0xNDksNiArMTQ4LDEzIEBACiAjZGVmaW5lIGNoZWNrX3NtdF9lbmFibGVkKCkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKy8qIFB1dCB0aGUgcGFjYSBwb2ludGVyIGludG8gcjEzIGFuZCBTUFJHMyAqLwordm9pZCBfX2luaXQgc2V0dXBfcGFjYShpbnQgY3B1KQoreworCWxvY2FsX3BhY2EgPSAmcGFjYVtjcHVdOworCW10c3ByKFNQUk5fU1BSRzMsIGxvY2FsX3BhY2EpOworfQorCiAvKgogICogRWFybHkgaW5pdGlhbGl6YXRpb24gZW50cnkgcG9pbnQuIFRoaXMgaXMgY2FsbGVkIGJ5IGhlYWQuUwogICogd2l0aCBNTVUgdHJhbnNsYXRpb24gZGlzYWJsZWQuIFdlIHJlbHkgb24gdGhlICJmZWF0dXJlIiBvZgpAQCAtMTcwLDYgKzE3Niw5IEBACiAKIHZvaWQgX19pbml0IGVhcmx5X3NldHVwKHVuc2lnbmVkIGxvbmcgZHRfcHRyKQogeworCS8qIEFzc3VtZSB3ZSdyZSBvbiBjcHUgMCBmb3Igbm93LiBEb24ndCB3cml0ZSB0byB0aGUgcGFjYSB5ZXQhICovCisJc2V0dXBfcGFjYSgwKTsKKwogCS8qIEVuYWJsZSBlYXJseSBkZWJ1Z2dpbmcgaWYgYW55IHNwZWNpZmllZCAoc2VlIHVkYmcuaCkgKi8KIAl1ZGJnX2Vhcmx5X2luaXQoKTsKIApAQCAtMTgzLDcgKzE5Miw3IEBACiAJZWFybHlfaW5pdF9kZXZ0cmVlKF9fdmEoZHRfcHRyKSk7CiAKIAkvKiBOb3cgd2Uga25vdyB0aGUgbG9naWNhbCBpZCBvZiBvdXIgYm9vdCBjcHUsIHNldHVwIHRoZSBwYWNhLiAqLwotCXNldHVwX2Jvb3RfcGFjYSgpOworCXNldHVwX3BhY2EoYm9vdF9jcHVpZCk7CiAKIAkvKiBGaXggdXAgcGFjYSBmaWVsZHMgcmVxdWlyZWQgZm9yIHRoZSBib290IGNwdSAqLwogCWdldF9wYWNhKCktPmNwdV9zdGFydCA9IDE7CkBAIC0zNTAsMjIgKzM1OSwxNyBAQAogCSAqLwogCXVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpOwogCi0jaWZkZWYgQ09ORklHX0tFWEVDCi0Ja2V4ZWNfc2V0dXAoKTsJLyogcmVxdWlyZXMgdW5mbGF0dGVuZWQgZGV2aWNlIHRyZWUuICovCi0jZW5kaWYKLQogCS8qCiAJICogRmlsbCB0aGUgcHBjNjRfY2FjaGVzICYgc3lzdGVtY2ZnIHN0cnVjdHVyZXMgd2l0aCBpbmZvcm1hdGlvbnMKLQkgKiByZXRyaWV2ZWQgZnJvbSB0aGUgZGV2aWNlLXRyZWUuIE5lZWQgdG8gYmUgY2FsbGVkIGJlZm9yZQotCSAqIGZpbmlzaF9kZXZpY2VfdHJlZSgpIHNpbmNlIHRoZSBsYXRlciByZXF1aXJlcyBzb21lIG9mIHRoZQotCSAqIGluZm9ybWF0aW9ucyBmaWxsZWQgdXAgaGVyZSB0byBwcm9wZXJseSBwYXJzZSB0aGUgaW50ZXJydXB0Ci0JICogdHJlZS4KLQkgKiBJdCBhbHNvIHNldHMgdXAgdGhlIGNhY2hlIGxpbmUgc2l6ZXMgd2hpY2ggYWxsb3dzIHRvIGNhbGwKLQkgKiByb3V0aW5lcyBsaWtlIGZsdXNoX2ljYWNoZV9yYW5nZSAodXNlZCBieSB0aGUgaGFzaCBpbml0Ci0JICogbGF0ZXIgb24pLgorIAkgKiByZXRyaWV2ZWQgZnJvbSB0aGUgZGV2aWNlLXRyZWUuCiAJICovCiAJaW5pdGlhbGl6ZV9jYWNoZV9pbmZvKCk7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgaXJxIHJlbWFwcGluZyBzdWJzeXN0ZW0KKwkgKi8KKwlpcnFfZWFybHlfaW5pdCgpOworCiAjaWZkZWYgQ09ORklHX1BQQ19SVEFTCiAJLyoKIAkgKiBJbml0aWFsaXplIFJUQVMgaWYgYXZhaWxhYmxlCkBAIC0zOTMsMTIgKzM5Nyw2IEBACiAJZmluZF9sZWdhY3lfc2VyaWFsX3BvcnRzKCk7CiAKIAkvKgotCSAqICJGaW5pc2giIHRoZSBkZXZpY2UtdHJlZSwgdGhhdCBpcyBkbyB0aGUgYWN0dWFsIHBhcnNpbmcgb2YKLQkgKiBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzIGxpa2UgdGhlIGludGVycnVwdCBtYXAKLQkgKi8KLQlmaW5pc2hfZGV2aWNlX3RyZWUoKTsKLQotCS8qCiAJICogSW5pdGlhbGl6ZSB4bW9uCiAJICovCiAjaWZkZWYgQ09ORklHX1hNT05fREVGQVVMVApAQCAtNDI2LDggKzQyNCw2IEBACiAKIAlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoInBwYzY0X3BmdF9zaXplICAgICAgICAgICAgICAgID0gMHglbHhcbiIsIHBwYzY0X3BmdF9zaXplKTsKLQlwcmludGsoInBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyICAgID0gMHglbGRcbiIsCi0JICAgICAgIHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyKTsKIAlwcmludGsoInBoeXNpY2FsTWVtb3J5U2l6ZSAgICAgICAgICAgID0gMHglbHhcbiIsIGxtYl9waHlzX21lbV9zaXplKCkpOwogCXByaW50aygicHBjNjRfY2FjaGVzLmRjYWNoZV9saW5lX3NpemUgPSAweCV4XG4iLAogCSAgICAgICBwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCBkNzNiMjVlLi4zMjAzNTNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCA2ZTc1ZDdhLi5mNzJlOGU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC10YnN5bmMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLXRic3luYy5jCmluZGV4IDlhZGVmM2IuLmYxOWUyZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLXRic3luYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLXRic3luYy5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IGM1ZDE3OWQuLjQ2YzU2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtMTcsNyArMTcsNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfMzIuUwppbmRleCA2OTc3M2NjLi43MzY5ZjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwXzMyLlMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKaW5kZXggZWMyNzRlNi4uMmUyOTI4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4gCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggNDY2MmI1OC4uMDEwNDM1MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c3RibC5TCmluZGV4IGVlNzVjY2YuLjU3OWRlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUwpAQCAtMTQsNyArMTQsNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KIAogI2lmZGVmIENPTkZJR19QUEM2NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90YXVfNnh4LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RhdV82eHguYwppbmRleCAyNmJkOGVhMy4uMzY4YTQ5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGF1XzZ4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGF1XzZ4eC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBsaWZlIGluIHBvcnRhYmxlcywgYW5kIGFkZCBhICdwZXJmb3JtYW5jZS93YXR0JyBtZXRyaWMgc29tZXdoZXJlIGluIC9wcm9jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA3ZGQ1ZGFiLi43NzRjMGEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMzIsNyArMzIsNiBAQAogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggNTJmNTY1OS4uM2M2NjgwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMTQsNyArMTQsNiBAQAogICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgaGFyZHdhcmUgZXhjZXB0aW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01Miw5ICs1MSwxMyBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNlbmRpZgorI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogCiAjaWZkZWYgQ09ORklHX1BQQzY0CS8qIFhYWCAqLwogI2RlZmluZSBfSU9fQkFTRQlwY2lfaW9fYmFzZQorI2lmZGVmIENPTkZJR19LRVhFQworY3B1bWFza190IGNwdXNfaW5fc3IgPSBDUFVfTUFTS19OT05FOworI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR0dFUgpAQCAtOTcsNyArMTAwLDcgQEAKIAogaW50IGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKIHsKLQlzdGF0aWMgaW50IGRpZV9jb3VudGVyLCBjcmFzaF9kdW1wX3N0YXJ0ID0gMDsKKwlzdGF0aWMgaW50IGRpZV9jb3VudGVyOwogCiAJaWYgKGRlYnVnZ2VyKHJlZ3MpKQogCQlyZXR1cm4gMTsKQEAgLTEzNywyMSArMTQwLDEyIEBACiAJcHJpbnRfbW9kdWxlcygpOwogCXNob3dfcmVncyhyZWdzKTsKIAlidXN0X3NwaW5sb2NrcygwKTsKLQotCWlmICghY3Jhc2hfZHVtcF9zdGFydCAmJiBrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpIHsKLQkJY3Jhc2hfZHVtcF9zdGFydCA9IDE7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwotCQljcmFzaF9rZXhlYyhyZWdzKTsKLQkJLyogTk9UUkVBQ0hFRCAqLwotCX0KIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKLQlpZiAoY3Jhc2hfZHVtcF9zdGFydCkKLQkJLyoKLQkJICogT25seSBmb3Igc29mdC1yZXNldDogT3RoZXIgQ1BVcyB3aWxsIGJlIHJlc3BvbmRlZCB0byBhbiBJUEkKLQkJICogc2VudCBieSBmaXJzdCBrZXhlYyBDUFUuCi0JCSAqLwotCQlmb3IoOzspCi0JCQk7CisKKwlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpIHx8CisJCWtleGVjX3NyX2FjdGl2YXRlZChzbXBfcHJvY2Vzc29yX2lkKCkpKQorCQljcmFzaF9rZXhlYyhyZWdzKTsKKwljcmFzaF9rZXhlY19zZWNvbmRhcnkocmVncyk7CiAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Iik7CkBAIC0yMTUsNiArMjA5LDEwIEBACiAJCQlyZXR1cm47CiAJfQogCisjaWZkZWYgQ09ORklHX0tFWEVDCisJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdXNfaW5fc3IpOworI2VuZGlmCisKIAlkaWUoIlN5c3RlbSBSZXNldCIsIHJlZ3MsIFNJR0FCUlQpOwogCiAJLyogTXVzdCBkaWUgaWYgdGhlIGludGVycnVwdCBpcyBub3QgcmVjb3ZlcmFibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKaW5kZXggNjdkOWZkOS4uNTczMDkwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KQEAgLTM0LDkgKzMzLDEyIEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUpCiAJLyogRm9yIHVzZSBvbiBBcHBsZSBHNSBtYWNoaW5lcyAqLwogCXVkYmdfaW5pdF9wbWFjX3JlYWxtb2RlKCk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBUykKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX1BBTkVMKQogCS8qIFJUQVMgcGFuZWwgZGVidWcgKi8KLQl1ZGJnX2luaXRfcnRhcygpOworCXVkYmdfaW5pdF9ydGFzX3BhbmVsKCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFKQorCS8qIFJUQVMgY29uc29sZSBkZWJ1ZyAqLworCXVkYmdfaW5pdF9ydGFzX2NvbnNvbGUoKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSkKIAkvKiBNYXBsZSByZWFsIG1vZGUgZGVidWcgKi8KIAl1ZGJnX2luaXRfbWFwbGVfcmVhbG1vZGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKaW5kZXggNWQyOWRjYy4uMDgzNWI0ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC04LDcgKzgsNiBAQAogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggYmMzZTE1Yi4uMWE3ZTE5YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTgsNyArOCw2IEBACiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvY2FjaGVmbHVzaC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvY2FjaGVmbHVzaC5TCmluZGV4IDA5NjI5YWUuLjljYjMxOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMKQEAgLTksNyArOSw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZGF0YXBhZ2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKaW5kZXggNDcwOWYxZC4uZGMyMWU4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZGF0YXBhZ2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCmluZGV4IDdlZWJmZjAuLjA1OTA5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKaW5kZXggMGM2YTM3Yi4uNjhkNDlkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKaW5kZXggY2I0YWUwYS4uNjZhMzZkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2NhY2hlZmx1c2guUwpAQCAtOSw3ICs5LDYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwppbmRleCAzYjJkZDdkLi43OTc5NmRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2RhdGFwYWdlLlMKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKaW5kZXggNGVlODcxZi4uNTZlNzZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKQEAgLTExLDcgKzExLDYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUwppbmRleCA3NDc5ZWRiLi4xN2E4M2ZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TCmluZGV4IDk0MTZiNGEuLjQ5YWMzZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggY2RmNTg2Ny4uZmFkODU4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC0yMTgsNyArMjE4LDYgQEAKIHsKIAlzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2OwogCXVuc2lnbmVkIGludCAqdW5pdF9hZGRyZXNzOwotCXVuc2lnbmVkIGludCAqaXJxX3A7CiAKIAkvKiB3ZSBuZWVkIHRoZSAnZGV2aWNlX3R5cGUnIHByb3BlcnR5LCBpbiBvcmRlciB0byBtYXRjaCB3aXRoIGRyaXZlcnMgKi8KIAlpZiAob2Zfbm9kZS0+dHlwZSA9PSBOVUxMKSB7CkBAIC0yNDMsMTYgKzI0Miw3IEBACiAKIAl2aW9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gb2Zfbm9kZV9nZXQob2Zfbm9kZSk7CiAKLQl2aW9kZXYtPmlycSA9IE5PX0lSUTsKLQlpcnFfcCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkob2Zfbm9kZSwgImludGVycnVwdHMiLCBOVUxMKTsKLQlpZiAoaXJxX3ApIHsKLQkJaW50IHZpcnEgPSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZygqaXJxX3ApOwotCQlpZiAodmlycSA9PSBOT19JUlEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCAiCi0JCQkgICAgICAgIm51bWJlciBmb3IgJXNcbiIsIG9mX25vZGUtPmZ1bGxfbmFtZSk7Ci0JCX0gZWxzZQotCQkJdmlvZGV2LT5pcnEgPSBpcnFfb2Zmc2V0X3VwKHZpcnEpOwotCX0KKwl2aW9kZXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mX25vZGUsIDApOwogCiAJc25wcmludGYodmlvZGV2LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIiV4IiwgKnVuaXRfYWRkcmVzcyk7CiAJdmlvZGV2LT5uYW1lID0gb2Zfbm9kZS0+bmFtZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4YjI1OTUzLi4wMjY2NWEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjZGVmaW5lIFBST1ZJREUzMih4KQlQUk9WSURFKF9fdW51c2VkX18jI3gpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlfMzIuUyBiL2FyY2gvcG93ZXJwYy9saWIvY29weV8zMi5TCmluZGV4IGJlZTUxNDEuLmM2NTdkZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weV8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weV8zMi5TCkBAIC04LDcgKzgsNiBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9sb2Nrcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9sb2Nrcy5jCmluZGV4IDgzNjJmYTIuLjA3N2JlZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvbG9ja3MuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2xvY2tzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMgYi9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMKaW5kZXggYzI1MWQ5OS4uOTU5MGJhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvc3N0ZXAuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NzdGVwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TIGIvYXJjaC9wb3dlcnBjL2xpYi9zdHJpbmcuUwppbmRleCBiOWNhODRlLi5jNGM2MjJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvc3RyaW5nLlMKQEAgLTgsNyArOCw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tYXRoLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aC5jCmluZGV4IDU4OTE1MzQuLjY5MDU4YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21hdGguYwpAQCAtMiw3ICsyLDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSAgRWRkaWUgQy4gRG9zdCAgKGVjZEBhdGVjb20uY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDR4X21tdS5jCmluZGV4IDNkNzljZTIuLjM3NjgyOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQ0eF9tbXUuYwpAQCAtMjQsNyArMjQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80eHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNHh4X21tdS5jCmluZGV4IDRkMDA2YWEuLjgzOGUwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80eHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzR4eF9tbXUuYwpAQCAtMjEsNyArMjEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggYTBhOWUxZS4uNzhhMGQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKaW5kZXggNWQ1ODFiYi4uMTIzZGEwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUwppbmRleCA5NDI1NWJlLi5iZDY4ZGY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUwpAQCAtMjEsNyArMjEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMKaW5kZXggNTJlOTE0Mi4uOWJjMGE5YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGRlc2NyaWJlZCBpbiB0aGUga2VybmVsJ3MgQ09QWUlORyBmaWxlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCmluZGV4IGEwZjNjYmQuLmM5MGYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCkBAIC01MjAsNyArNTIwLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCkKK3ZvaWQgX19pbml0IGhwdGVfaW5pdF9uYXRpdmUodm9pZCkKIHsKIAlwcGNfbWQuaHB0ZV9pbnZhbGlkYXRlCT0gbmF0aXZlX2hwdGVfaW52YWxpZGF0ZTsKIAlwcGNfbWQuaHB0ZV91cGRhdGVwcAk9IG5hdGl2ZV9ocHRlX3VwZGF0ZXBwOwpAQCAtNTMwLDUgKzUzMCw0IEBACiAJcHBjX21kLmhwdGVfY2xlYXJfYWxsCT0gbmF0aXZlX2hwdGVfY2xlYXI7CiAJaWYgKHRsYl9iYXRjaGluZ19lbmFibGVkKCkpCiAJCXBwY19tZC5mbHVzaF9oYXNoX3JhbmdlID0gbmF0aXZlX2ZsdXNoX2hhc2hfcmFuZ2U7Ci0JaHRhYl9maW5pc2hfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggZDAzZmQyYi4uMTkxNTY2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjdW5kZWYgREVCVUcKICN1bmRlZiBERUJVR19MT1cKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTY3LDM0ICsxNjYsMTIgQEAKIAkJaGFzaCA9IGhwdF9oYXNoKHZhLCBzaGlmdCk7CiAJCWhwdGVnID0gKChoYXNoICYgaHRhYl9oYXNoX21hc2spICogSFBURVNfUEVSX0dST1VQKTsKIAotCQkvKiBUaGUgY3JhcCBiZWxvdyBjYW4gYmUgY2xlYW5lZCBvbmNlIHBwZF9tZC5wcm9iZSgpIGNhbgotCQkgKiBzZXQgdXAgdGhlIGhhc2ggY2FsbGJhY2tzLCB0aHVzIHdlIGNhbiBqdXN0IHVzZWQgdGhlCi0JCSAqIG5vcm1hbCBpbnNlcnQgY2FsbGJhY2sgaGVyZS4KLQkJICovCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JCWlmIChtYWNoaW5lX2lzKGlzZXJpZXMpKQotCQkJcmV0ID0gaVNlcmllc19ocHRlX2luc2VydChocHRlZywgdmEsCi0JCQkJCQkgIHBhZGRyLAotCQkJCQkJICB0bXBfbW9kZSwKLQkJCQkJCSAgSFBURV9WX0JPTFRFRCwKLQkJCQkJCSAgcHNpemUpOwotCQllbHNlCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKLQkJaWYgKG1hY2hpbmVfaXMocHNlcmllcykgJiYgZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJCXJldCA9IHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydChocHRlZywgdmEsCi0JCQkJCQkgICAgICAgcGFkZHIsCi0JCQkJCQkgICAgICAgdG1wX21vZGUsCi0JCQkJCQkgICAgICAgSFBURV9WX0JPTFRFRCwKLQkJCQkJCSAgICAgICBwc2l6ZSk7Ci0JCWVsc2UKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQotCQkJcmV0ID0gbmF0aXZlX2hwdGVfaW5zZXJ0KGhwdGVnLCB2YSwKLQkJCQkJCSBwYWRkciwKLQkJCQkJCSB0bXBfbW9kZSwgSFBURV9WX0JPTFRFRCwKLQkJCQkJCSBwc2l6ZSk7Ci0jZW5kaWYKKwkJREJHKCJodGFiX2JvbHRfbWFwcGluZzogY2FsbGluZyAlcFxuIiwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKKworCQlCVUdfT04oIXBwY19tZC5ocHRlX2luc2VydCk7CisJCXJldCA9IHBwY19tZC5ocHRlX2luc2VydChocHRlZywgdmEsIHBhZGRyLAorCQkJCXRtcF9tb2RlLCBIUFRFX1ZfQk9MVEVELCBwc2l6ZSk7CisKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAl9CkBAIC00MTMsNiArMzkwLDQxIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX2JsKHVuc2lnbmVkIGludCAqaW5zbl9hZGRyLCB2b2lkICpmdW5jKQoreworCXVuc2lnbmVkIGxvbmcgZnVuY3AgPSAqKCh1bnNpZ25lZCBsb25nICopZnVuYyk7CisJaW50IG9mZnNldCA9IGZ1bmNwIC0gKHVuc2lnbmVkIGxvbmcpaW5zbl9hZGRyOworCisJKmluc25fYWRkciA9ICh1bnNpZ25lZCBpbnQpKDB4NDgwMDAwMDEgfCAob2Zmc2V0ICYgMHgwM2ZmZmZmYykpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpbnNuX2FkZHIsIDQrCisJCQkgICAodW5zaWduZWQgbG9uZylpbnNuX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9maW5pc2hfaW5pdCh2b2lkKQoreworCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0YWJfY2FsbF9ocHRlX2luc2VydDE7CisJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHRhYl9jYWxsX2hwdGVfaW5zZXJ0MjsKKwlleHRlcm4gdW5zaWduZWQgaW50ICpodGFiX2NhbGxfaHB0ZV9yZW1vdmU7CisJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHRhYl9jYWxsX2hwdGVfdXBkYXRlcHA7CisKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0NjRfY2FsbF9ocHRlX2luc2VydDE7CisJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHQ2NF9jYWxsX2hwdGVfaW5zZXJ0MjsKKwlleHRlcm4gdW5zaWduZWQgaW50ICpodDY0X2NhbGxfaHB0ZV9yZW1vdmU7CisJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHQ2NF9jYWxsX2hwdGVfdXBkYXRlcHA7CisKKwltYWtlX2JsKGh0NjRfY2FsbF9ocHRlX2luc2VydDEsIHBwY19tZC5ocHRlX2luc2VydCk7CisJbWFrZV9ibChodDY0X2NhbGxfaHB0ZV9pbnNlcnQyLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOworCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfcmVtb3ZlLCBwcGNfbWQuaHB0ZV9yZW1vdmUpOworCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfdXBkYXRlcHAsIHBwY19tZC5ocHRlX3VwZGF0ZXBwKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLworCisJbWFrZV9ibChodGFiX2NhbGxfaHB0ZV9pbnNlcnQxLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOworCW1ha2VfYmwoaHRhYl9jYWxsX2hwdGVfaW5zZXJ0MiwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKKwltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX3JlbW92ZSwgcHBjX21kLmhwdGVfcmVtb3ZlKTsKKwltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX3VwZGF0ZXBwLCBwcGNfbWQuaHB0ZV91cGRhdGVwcCk7Cit9CisKIHZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGFibGU7CkBAIC01MjUsNiArNTM3LDggQEAKIAkJCQkJIG1tdV9saW5lYXJfcHNpemUpKTsKIAl9CiAKKwlodGFiX2ZpbmlzaF9pbml0KCk7CisKIAlEQkcoIiA8LSBodGFiX2luaXRpYWxpemUoKVxuIik7CiB9CiAjdW5kZWYgS0IKQEAgLTc4NywxNiArODAxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX2JsKHVuc2lnbmVkIGludCAqaW5zbl9hZGRyLCB2b2lkICpmdW5jKQotewotCXVuc2lnbmVkIGxvbmcgZnVuY3AgPSAqKCh1bnNpZ25lZCBsb25nICopZnVuYyk7Ci0JaW50IG9mZnNldCA9IGZ1bmNwIC0gKHVuc2lnbmVkIGxvbmcpaW5zbl9hZGRyOwotCi0JKmluc25fYWRkciA9ICh1bnNpZ25lZCBpbnQpKDB4NDgwMDAwMDEgfCAob2Zmc2V0ICYgMHgwM2ZmZmZmYykpOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpbnNuX2FkZHIsIDQrCi0JCQkgICAodW5zaWduZWQgbG9uZylpbnNuX2FkZHIpOwotfQotCiAvKgogICogbG93X2hhc2hfZmF1bHQgaXMgY2FsbGVkIHdoZW4gd2UgdGhlIGxvdyBsZXZlbCBoYXNoIGNvZGUgZmFpbGVkCiAgKiB0byBpbnN0ZXJ0IGEgUFRFIGR1ZSB0byBhbiBoeXBlcnZpc29yIGVycm9yCkBAIC04MTUsMjggKzgxOSwzIEBACiAJfQogCWJhZF9wYWdlX2ZhdWx0KHJlZ3MsIGFkZHJlc3MsIFNJR0JVUyk7CiB9Ci0KLXZvaWQgX19pbml0IGh0YWJfZmluaXNoX2luaXQodm9pZCkKLXsKLQlleHRlcm4gdW5zaWduZWQgaW50ICpodGFiX2NhbGxfaHB0ZV9pbnNlcnQxOwotCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0YWJfY2FsbF9ocHRlX2luc2VydDI7Ci0JZXh0ZXJuIHVuc2lnbmVkIGludCAqaHRhYl9jYWxsX2hwdGVfcmVtb3ZlOwotCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0YWJfY2FsbF9ocHRlX3VwZGF0ZXBwOwotCi0jaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQlleHRlcm4gdW5zaWduZWQgaW50ICpodDY0X2NhbGxfaHB0ZV9pbnNlcnQxOwotCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0NjRfY2FsbF9ocHRlX2luc2VydDI7Ci0JZXh0ZXJuIHVuc2lnbmVkIGludCAqaHQ2NF9jYWxsX2hwdGVfcmVtb3ZlOwotCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0NjRfY2FsbF9ocHRlX3VwZGF0ZXBwOwotCi0JbWFrZV9ibChodDY0X2NhbGxfaHB0ZV9pbnNlcnQxLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOwotCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfaW5zZXJ0MiwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKLQltYWtlX2JsKGh0NjRfY2FsbF9ocHRlX3JlbW92ZSwgcHBjX21kLmhwdGVfcmVtb3ZlKTsKLQltYWtlX2JsKGh0NjRfY2FsbF9ocHRlX3VwZGF0ZXBwLCBwcGNfbWQuaHB0ZV91cGRhdGVwcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KLQotCW1ha2VfYmwoaHRhYl9jYWxsX2hwdGVfaW5zZXJ0MSwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKLQltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX2luc2VydDIsIHBwY19tZC5ocHRlX2luc2VydCk7Ci0JbWFrZV9ibChodGFiX2NhbGxfaHB0ZV9yZW1vdmUsIHBwY19tZC5ocHRlX3JlbW92ZSk7Ci0JbWFrZV9ibChodGFiX2NhbGxfaHB0ZV91cGRhdGVwcCwgcHBjX21kLmhwdGVfdXBkYXRlcHApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggYjU3ZmIzYS4uMGU1M2NhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggZDQ1NGNhYS4uM2ZmMzc0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC0yMiw3ICsyMiw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9sbWIuYyBiL2FyY2gvcG93ZXJwYy9tbS9sbWIuYwppbmRleCA4YjZmNTIyLi40YjE3YTczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbG1iLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2xtYi5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCAwODlkOTM5Li5lZWJkOGI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfMzIuYwppbmRleCBlMzI2ZTQyNC4uNzkyMDg2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0XzMyLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF82NC5jCmluZGV4IDY1ZDE4ZGMuLjkwYTA2YWMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfNjQuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNDQsNyArNDMsOSBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKGluZGV4ID4gTUFYX0NPTlRFWFQpIHsKKwkJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAkJaWRyX3JlbW92ZSgmbW11X2NvbnRleHRfaWRyLCBpbmRleCk7CisJCXNwaW5fdW5sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCA5MDYyODYwLi44ZmNhY2IwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwppbmRleCA3YjI3OGQ4My4uYjFkYTAzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKaW5kZXggMmVkNDNhNC4uN2NjZWIyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYyBiL2FyY2gvcG93ZXJwYy9tbS9zbGIuYwppbmRleCA2YThiZjZjLi5kZTBjODg0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYi5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwppbmRleCA4NTQ4ZGNmLi5kYmMxYWJiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwppbmRleCA2OTEzMjBjLi5lZWVhY2FiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMKaW5kZXggMDJlYjIzZS4uOTI1ZmY3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfMzIuYwpAQCAtMjMsNyArMjMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmMKaW5kZXggZTc0NDliMC4uZjZlZWY3OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKaW5kZXggNzY3NWU2Ny4uNWZlN2I3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKQEAgLTE2LDEyICsxNiwyMSBAQAogCSAgMyBQQ0kgc2xvdHMuICBUaGUgUElCcyBQQ0kgaW5pdGlhbGl6YXRpb24gaXMgdGhlIGJvb3Rsb2FkZXIncwogCSAgcmVzcG9uc2libGlsdHkuCiAKK2NvbmZpZyBNUEM4MzR4X0lUWAorCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzR4IElUWCIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEMgODM0eCBJVFggZXZhbHVhdGlvbiBib2FyZC4KKworCSAgQmUgYXdhcmUgdGhhdCBQQ0kgaW5pdGlhbGl6YXRpb24gaXMgdGhlIGJvb3Rsb2FkZXIncworCSAgcmVzcG9uc2libGlsdHkuCisKIGVuZGNob2ljZQogCiBjb25maWcgTVBDODM0eAogCWJvb2wKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQotCWRlZmF1bHQgeSBpZiBNUEM4MzR4X1NZUworCWRlZmF1bHQgeSBpZiBNUEM4MzR4X1NZUyB8fCBNUEM4MzR4X0lUWAogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUKaW5kZXggNWM3MjM2Ny4uOTM4N2ExMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQpAQCAtNCwzICs0LDQgQEAKIG9iai15CQkJCTo9IG1pc2Mubwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaS5vCiBvYmotJChDT05GSUdfTVBDODM0eF9TWVMpCSs9IG1wYzgzNHhfc3lzLm8KK29iai0kKENPTkZJR19NUEM4MzR4X0lUWCkJKz0gbXBjODM0eF9pdHgubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21pc2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9taXNjLmMKaW5kZXggMTQ1NWJjZS4uZjBjNmRmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21pc2MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWlzYy5jCkBAIC05LDcgKzksNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2MzA1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKKyAqCisgKiBNUEM4MzR4IElUWCBib2FyZCBzcGVjaWZpYyByb3V0aW5lcworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaXBpYy5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2luY2x1ZGUgIm1wYzgzeHguaCIKKworI2luY2x1ZGUgPHBsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmg+CisKKyNpZm5kZWYgQ09ORklHX1BDSQordW5zaWduZWQgbG9uZyBpc2FfaW9fYmFzZSA9IDA7Cit1bnNpZ25lZCBsb25nIGlzYV9tZW1fYmFzZSA9IDA7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbnQKK21wYzgzeHhfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyIGlkc2VsLCB1bnNpZ25lZCBjaGFyIHBpbikKK3sKKwlzdGF0aWMgY2hhciBwY2lfaXJxX3RhYmxlW11bNF0gPQorCSAgICAvKgorCSAgICAgKiAgICAgIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKKwkgICAgICogICAgICAgQSAgICAgIEIgICAgICBDICAgICAgRAorCSAgICAgKi8KKwl7CisJCXtQSVJRQiwgUElSUUMsIFBJUlFELCBQSVJRQX0sCS8qIGlkc2VsIDB4MGUgKi8KKwkJe1BJUlFBLCBQSVJRQiwgUElSUUMsIFBJUlFEfSwJLyogaWRzZWwgMHgwZiAqLworCQl7UElSUUMsIFBJUlFELCBQSVJRQSwgUElSUUJ9LAkvKiBpZHNlbCAweDEwICovCisJfTsKKworCWNvbnN0IGxvbmcgbWluX2lkc2VsID0gMHgwZSwgbWF4X2lkc2VsID0gMHgxMCwgaXJxc19wZXJfc2xvdCA9IDQ7CisJcmV0dXJuIFBDSV9JUlFfVEFCTEVfTE9PS1VQOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19QQ0kgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU2V0dXAgdGhlIGFyY2hpdGVjdHVyZQorICoKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1wYzgzNHhfaXR4X3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtcGM4MzR4X2l0eF9zZXR1cF9hcmNoKCkiLCAwKTsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCWlmIChucCAhPSAwKSB7CisJCXVuc2lnbmVkIGludCAqZnAgPQorCQkgICAgKGludCAqKWdldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCQlpZiAoZnAgIT0gMCkKKwkJCWxvb3BzX3Blcl9qaWZmeSA9ICpmcCAvIEhaOworCQllbHNlCisJCQlsb29wc19wZXJfamlmZnkgPSA1MDAwMDAwMCAvIEhaOworCQlvZl9ub2RlX3B1dChucCk7CisJfQorI2lmZGVmIENPTkZJR19QQ0kKKwlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJwY2kiKSkgIT0gTlVMTDspCisJCWFkZF9icmlkZ2UobnApOworCisJcHBjX21kLnBjaV9zd2l6emxlID0gY29tbW9uX3N3aXp6bGU7CisJcHBjX21kLnBjaV9tYXBfaXJxID0gbXBjODN4eF9tYXBfaXJxOworCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM4M3h4X2V4Y2x1ZGVfZGV2aWNlOworI2VuZGlmCisKKyNpZmRlZiAgQ09ORklHX1JPT1RfTkZTCisJUk9PVF9ERVYgPSBSb290X05GUzsKKyNlbHNlCisJUk9PVF9ERVYgPSBSb290X0hEQTE7CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgbXBjODM0eF9pdHhfaW5pdF9JUlEodm9pZCkKK3sKKwl1OCBzZW5zZXNbOF0gPSB7CisJCTAsCQkJLyogRVhUIDAgKi8KKwkJSVJRX1NFTlNFX0xFVkVMLAkvKiBFWFQgMSAqLworCQlJUlFfU0VOU0VfTEVWRUwsCS8qIEVYVCAyICovCisJCTAsCQkJLyogRVhUIDMgKi8KKyNpZmRlZiBDT05GSUdfUENJCisJCUlSUV9TRU5TRV9MRVZFTCwJLyogRVhUIDQgKi8KKwkJSVJRX1NFTlNFX0xFVkVMLAkvKiBFWFQgNSAqLworCQlJUlFfU0VOU0VfTEVWRUwsCS8qIEVYVCA2ICovCisJCUlSUV9TRU5TRV9MRVZFTCwJLyogRVhUIDcgKi8KKyNlbHNlCisJCTAsCQkJLyogRVhUIDQgKi8KKwkJMCwJCQkvKiBFWFQgNSAqLworCQkwLAkJCS8qIEVYVCA2ICovCisJCTAsCQkJLyogRVhUIDcgKi8KKyNlbmRpZgorCX07CisKKwlpcGljX2luaXQoZ2V0X2ltbXJiYXNlKCkgKyAweDAwNzAwLCAwLCAwLCBzZW5zZXMsIDgpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgbWFwcGluZyBwcmlvcml0aWVzLAorCSAqIGluIGNhc2UgdGhlIGJvb3Qgcm9tIGNoYW5nZWQgc29tZXRoaW5nIG9uIHVzLgorCSAqLworCWlwaWNfc2V0X2RlZmF1bHRfcHJpb3JpdHkoKTsKK30KKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBtcGM4MzR4X2l0eF9wcm9iZSh2b2lkKQoreworCS8qIFdlIGFsd2F5cyBtYXRjaCBmb3Igbm93LCBldmVudHVhbGx5IHdlIHNob3VsZCBsb29rIGF0IHRoZSBmbGF0CisJICAgZGV2IHRyZWUgdG8gZW5zdXJlIHRoaXMgaXMgdGhlIGJvYXJkIHdlIGFyZSBzdXBwb3NlIHRvIHJ1biBvbgorCSovCisJcmV0dXJuIDE7Cit9CisKK2RlZmluZV9tYWNoaW5lKG1wYzgzNHhfaXR4KSB7CisJLm5hbWUJCQk9ICJNUEM4MzR4IElUWCIsCisJLnByb2JlCQkJPSBtcGM4MzR4X2l0eF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBtcGM4MzR4X2l0eF9zZXR1cF9hcmNoLAorCS5pbml0X0lSUQkJPSBtcGM4MzR4X2l0eF9pbml0X0lSUSwKKwkuZ2V0X2lycQkJPSBpcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gbXBjODN4eF9yZXN0YXJ0LAorCS50aW1lX2luaXQJCT0gbXBjODN4eF90aW1lX2luaXQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzRjYTRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5oCisgKgorICogTVBDODM0WCBJVFggY29tbW9uIGJvYXJkIGRlZmluaXRpb25zCisgKgorICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9NUEM4M1hYX0lUWF9IX18KKyNkZWZpbmUgX19NQUNIX01QQzgzWFhfSVRYX0hfXworCisjZGVmaW5lIFBJUlFBCU1QQzgzeHhfSVJRX0VYVDQKKyNkZWZpbmUgUElSUUIJTVBDODN4eF9JUlFfRVhUNQorI2RlZmluZSBQSVJRQwlNUEM4M3h4X0lSUV9FWFQ2CisjZGVmaW5lIFBJUlFECU1QQzgzeHhfSVJRX0VYVDcKKworI2VuZGlmCQkJCS8qIF9fTUFDSF9NUEM4M1hYX0lUWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKaW5kZXggN2U3ODlkMi4uM2UxYzE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9wY2kuYwppbmRleCAxNmY3ZDNiLi4zYjVlNTYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3BjaS5jCkBAIC05LDcgKzksNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtOTEsOSArOTAsMTAgQEAKIAkJbXBjODN4eF9wY2kyX2J1c25vID0gaG9zZS0+Zmlyc3RfYnVzbm87CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTVBDODN4eCBQQ0kgaG9zdCBicmlkZ2UgYXQgMHglMDhseC4gIgorCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE1QQzgzeHggUENJIGhvc3QgYnJpZGdlIGF0IDB4JTAxNmxseC4gIgogCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLAotCSAgICAgICByc3JjLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywgaG9zZS0+bGFzdF9idXNubyk7CisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnNyYy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sCisJICAgICAgIGhvc2UtPmxhc3RfYnVzbm8pOwogCiAJREJHKCIgLT5Ib3NlIGF0IDB4JXAsIGNmZ19hZGRyPTB4JXAsY2ZnX2RhdGE9MHglcFxuIiwKIAkgICAgaG9zZSwgaG9zZS0+Y2ZnX2FkZHIsIGhvc2UtPmNmZ19kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmgKaW5kZXggZjc3MGNhZC4uYzBkNTZkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19NQUNIX01QQzg1NDBBRFNfSF9fCiAjZGVmaW5lIF9fTUFDSF9NUEM4NTQwQURTX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAKICNkZWZpbmUgQk9BUkRfQ0NTUkJBUgkJKCh1aW50KTB4ZTAwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCmluZGV4IDVlZWZmMzcuLjA2YTQ5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wY2kuYwppbmRleCBiYWQyOTAxLi4xZDUxZjMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3BjaS5jCkBAIC05LDcgKzksNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzksOSArNzgsMTAgQEAKIAkJbXBjODV4eF9wY2kyX2J1c25vID0gaG9zZS0+Zmlyc3RfYnVzbm87CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTVBDODV4eCBQQ0kgaG9zdCBicmlkZ2UgYXQgMHglMDhseC4gIgorCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE1QQzg1eHggUENJIGhvc3QgYnJpZGdlIGF0IDB4JTAxNmxseC4gIgogCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLAotCQlyc3JjLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywgaG9zZS0+bGFzdF9idXNubyk7CisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnNyYy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sCisJCWhvc2UtPmxhc3RfYnVzbm8pOwogCiAJREJHKCIgLT5Ib3NlIGF0IDB4JXAsIGNmZ19hZGRyPTB4JXAsY2ZnX2RhdGE9MHglcFxuIiwKIAkJaG9zZSwgaG9zZS0+Y2ZnX2FkZHIsIGhvc2UtPmNmZ19kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcKaW5kZXggM2E4Nzg2My4uZDFlY2MwZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcKQEAgLTcsNiArNyw3IEBACiAKIGNvbmZpZyBNUEM4NjQxX0hQQ04KIAlib29sICJGcmVlc2NhbGUgTVBDODY0MSBIUENOIgorCXNlbGVjdCBQUENfSTgyNTkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjQxIEhQQ04gYm9hcmQuCiAKQEAgLTI4LDkgKzI5LDQgQEAKIAlkZXBlbmRzIG9uIFBQQ184Nnh4CiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBQUENfU1REX01NVQotCWJvb2wKLQlkZXBlbmRzIG9uIFBQQ184Nnh4Ci0JZGVmYXVsdCB5Ci0KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQppbmRleCA3YmU3OTZjLi40NzZhNmVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCkBAIC0yLDkgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFBvd2VyUEMgODZ4eCBsaW51eCBrZXJuZWwuCiAjCiAKLQotaWZlcSAoJChDT05GSUdfUFBDXzg2eHgpLHkpCiBvYmotJChDT05GSUdfU01QKQkJKz0gbXBjODZ4eF9zbXAubwotZW5kaWYKIG9iai0kKENPTkZJR19NUEM4NjQxX0hQQ04pCSs9IG1wYzg2eHhfaHBjbi5vCiBvYmotJChDT05GSUdfUENJKQkJKz0gcGNpLm8gbXBjODZ4eF9wY2llLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjQxX2hwY24uaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjQxX2hwY24uaAppbmRleCA1MDQyMjUzLi41ZDJiY2Y3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODY0MV9ocGNuLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2NDFfaHBjbi5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9fTVBDODY0MV9IUENOX0hfXwogI2RlZmluZSBfX01QQzg2NDFfSFBDTl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogLyogUENJIGludGVycnVwdCBjb250cm9sbGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHguaAppbmRleCBlM2M5ZTRmLi4yODM0NDYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4LmgKQEAgLTE1LDExICsxNSwxMyBAQAogICogbXBjODZ4eF8qIGZpbGVzLiBNb3N0bHkgZm9yIHVzZSBieSBtcGM4Nnh4X3NldHVwKCkuCiAgKi8KIAotZXh0ZXJuIGludCBfX2luaXQgYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldik7CitleHRlcm4gaW50IGFkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpOwogCi1leHRlcm4gdm9pZCBfX2luaXQgc2V0dXBfaW5kaXJlY3RfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCitleHRlcm4gaW50IG1wYzg2eHhfZXhjbHVkZV9kZXZpY2UodV9jaGFyIGJ1cywgdV9jaGFyIGRldmZuKTsKKworZXh0ZXJuIHZvaWQgc2V0dXBfaW5kaXJlY3RfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCiAJCQkJICAgICAgIHUzMiBjZmdfYWRkciwgdTMyIGNmZ19kYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCBzZXR1cF9pbmRpcmVjdF9wY2llX25vbWFwKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKK2V4dGVybiB2b2lkIHNldHVwX2luZGlyZWN0X3BjaWVfbm9tYXAoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAogCQkJCQkgICAgIHZvaWQgX19pb21lbSAqY2ZnX2FkZHIsCiAJCQkJCSAgICAgdm9pZCBfX2lvbWVtICpjZmdfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwppbmRleCA0ODNjMjFkLi5lYmFlNzNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTM2LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgogCiAjaW5jbHVkZSAibXBjODZ4eC5oIgorI2luY2x1ZGUgIm1wYzg2NDFfaHBjbi5oIgogCiAjaWZuZGVmIENPTkZJR19QQ0kKIHVuc2lnbmVkIGxvbmcgaXNhX2lvX2Jhc2UgPSAwOwpAQCAtMTg2LDE3ICsxODYsMTMwIEBACiAJcmV0dXJuIFBDSV9JUlFfVEFCTEVfTE9PS1VQICsgSTgyNTlfT0ZGU0VUOwogfQogCi0KLWludAotbXBjODZ4eF9leGNsdWRlX2RldmljZSh1X2NoYXIgYnVzLCB1X2NoYXIgZGV2Zm4pCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfYWxpMTU3NShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotI2lmICFkZWZpbmVkKENPTkZJR19QQ0kpCi0JaWYgKGJ1cyA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSA9PSAwKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotI2VuZGlmCisJdW5zaWduZWQgc2hvcnQgdGVtcDsKIAotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisJLyoKKwkgKiBBTEkxNTc1IGludGVycnVwdHMgcm91dGUgdGFibGUgc2V0dXA6CisJICoKKwkgKiBJUlEgcGluICAgSVJRIworCSAqIFBJUlFBIC0tLS0gMworCSAqIFBJUlFCIC0tLS0gNAorCSAqIFBJUlFDIC0tLS0gNQorCSAqIFBJUlFEIC0tLS0gNgorCSAqIFBJUlFFIC0tLS0gOQorCSAqIFBJUlFGIC0tLS0gMTAKKwkgKiBQSVJRRyAtLS0tIDExCisJICogUElSUUggLS0tLSAxMgorCSAqCisJICogaW50ZXJydXB0cyBmb3IgUENJIHNsb3QwIC0tIFBJUlFBIC8gUElSUUIgLyBQSVJRQyAvIFBJUlFECisJICogICAgICAgICAgICAgICAgUENJIHNsb3QxIC0tIFBJUlFCIC8gUElSUUMgLyBQSVJRRCAvIFBJUlFBCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsIDB4YjkzMTc1NDIpOworCisJLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMSwgaW50ZXJydXB0OiBQSVJRRSAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODYsIDB4MGMpOworCisJLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMiwgaW50ZXJydXB0OiBQSVJRRiAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODcsIDB4MGQpOworCisJLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMywgaW50ZXJydXB0OiBQSVJRSCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODgsIDB4MGYpOworCisJLyogVVNCIDIuMCBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlE3ICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg3NCwgMHgwNik7CisKKwkvKiBBdWRpbyBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFFICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YSwgMHgwYyk7CisKKwkvKiBNb2RlbSBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFGICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YiwgMHgwZCk7CisKKwkvKiBIRCBhdWRpbyBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFHICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YywgMHgwZSk7CisKKwkvKiBTZXJpYWwgQVRBIGludGVycnVwdDogUElSUUQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhkLCAweDBiKTsKKworCS8qIFNNQiBpbnRlcnJ1cHQ6IFBJUlFIICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4ZSwgMHgwZik7CisKKwkvKiBQTVUgQUNQSSBTQ0kgaW50ZXJydXB0OiBQSVJRSCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OGYsIDB4MGYpOworCisJLyogUHJpbWFyeSBQQVRBIElERSBJUlE6IDE0CisJICogU2Vjb25kYXJ5IFBBVEEgSURFIElSUTogMTUKKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCAweDNkKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDc1LCAweDBmKTsKKworCS8qIFNldCBJUlExNCBhbmQgSVJRMTUgdG8gbGVnYWN5IElSUXMgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4NDYsICZ0ZW1wKTsKKwl0ZW1wIHw9IDB4YzAwMDsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDQ2LCB0ZW1wKTsKKworCS8qIFNldCBpODI1OSBpbnRlcnJ1cHQgdHJpZ2dlcgorCSAqIElSUSAzOiAgTGV2ZWwKKwkgKiBJUlEgNDogIExldmVsCisJICogSVJRIDU6ICBMZXZlbAorCSAqIElSUSA2OiAgTGV2ZWwKKwkgKiBJUlEgNzogIExldmVsCisJICogSVJRIDk6ICBMZXZlbAorCSAqIElSUSAxMDogTGV2ZWwKKwkgKiBJUlEgMTE6IExldmVsCisJICogSVJRIDEyOiBMZXZlbAorCSAqIElSUSAxNDogRWRnZQorCSAqIElSUSAxNTogRWRnZQorCSAqLworCW91dGIoMHhmYSwgMHg0ZDApOworCW91dGIoMHgxZSwgMHg0ZDEpOwogfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdWxpNTI4OChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwweDgzLCZjKTsKKwljIHw9IDB4ODA7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MywgYyk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDA5LCAweDAxKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDBhLCAweDA2KTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwweDgzLCZjKTsKKwljICY9IDB4N2Y7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MywgYyk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsMHg4NCwmYyk7CisJYyB8PSAweDAxOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODQsIGMpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdWxpNTIyOShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIHNob3J0IHRlbXA7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHgwNCwgMHgwNDA1KTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4NGEsICZ0ZW1wKTsKKwl0ZW1wIHw9IDB4MTAwMDsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDRhLCB0ZW1wKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGVhcmx5X3VsaTUyNDkoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBjaGFyIHRlbXA7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHgwNCwgMHgwMDA3KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4N2MsICZ0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDdjLCAweDgwKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDA5LCAweDAxKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDdjLCB0ZW1wKTsKKwlkZXYtPmNsYXNzIHw9IDB4MTsKK30KKworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQUwsIDB4MTU3NSwgcXVpcmtfYWxpMTU3NSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg4LCBxdWlya191bGk1Mjg4KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FMLCAweDUyMjksIHF1aXJrX3VsaTUyMjkpOworREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTCwgMHg1MjQ5LCBlYXJseV91bGk1MjQ5KTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYwppbmRleCA5NDRlYzRiLi5iYjdmYjQxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTM0LDggKzMzLDggQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogc21wXzg2eHhfcmVsZWFzZV9jb3JlKGludCBucikKIHsKLQl2b2lkICptY21fdmFkZHI7Ci0JdW5zaWduZWQgbG9uZyB2YWRkciwgcGNyOworCV9fYmUzMiBfX2lvbWVtICptY21fdmFkZHI7CisJdW5zaWduZWQgbG9uZyBwY3I7CiAKIAlpZiAobnIgPCAwIHx8IG5yID49IE5SX0NQVVMpCiAJCXJldHVybjsKQEAgLTQ1LDEwICs0NCw5IEBACiAJICovCiAJbWNtX3ZhZGRyID0gaW9yZW1hcChnZXRfaW1tcmJhc2UoKSArIE1QQzg2eHhfTUNNX09GRlNFVCwKIAkJCSAgICBNUEM4Nnh4X01DTV9TSVpFKTsKLQl2YWRkciA9ICh1bnNpZ25lZCBsb25nKW1jbV92YWRkciArICBNQ01fUE9SVF9DT05GSUdfT0ZGU0VUOwotCXBjciA9IGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopdmFkZHIpOworCXBjciA9IGluX2JlMzIobWNtX3ZhZGRyICsgKE1DTV9QT1JUX0NPTkZJR19PRkZTRVQgPj4gMikpOwogCXBjciB8PSAxIDw8IChuciArIDI0KTsKLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKil2YWRkciwgcGNyKTsKKwlvdXRfYmUzMihtY21fdmFkZHIgKyAoTUNNX1BPUlRfQ09ORklHX09GRlNFVCA+PiAyKSwgcGNyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvcGNpLmMKaW5kZXggNTE4MGRmNy4uYmM1MTM5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9wY2kuYwpAQCAtMTIsNyArMTIsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMjIsMTUgKzEyMSwxMiBAQAogc3RhdGljIHZvaWQgX19pbml0CiBtcGM4Nnh4X3NldHVwX3BjaWUoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCB1MzIgcGNpZV9vZmZzZXQsIHUzMiBwY2llX3NpemUpCiB7Ci0Jdm9sYXRpbGUgc3RydWN0IGNjc3JfcGV4ICpwY2llOwogCXUxNiBjbWQ7CiAJdW5zaWduZWQgaW50IHRlbXBzOwogCiAJREJHKCJQQ0lFIGhvc3QgY29udHJvbGxlciByZWdpc3RlciBvZmZzZXQgMHglMDh4LCBzaXplIDB4JTA4eC5cbiIsCiAJCQlwY2llX29mZnNldCwgcGNpZV9zaXplKTsKIAotCXBjaWUgPSBpb3JlbWFwKHBjaWVfb2Zmc2V0LCBwY2llX3NpemUpOwotCiAJZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCAwLCAwLCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJY21kIHw9IFBDSV9DT01NQU5EX1NFUlIgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkKIAkgICAgfCBQQ0lfQ09NTUFORF9JTzsKQEAgLTE0NCw2ICsxNDAsMTQgQEAKIAllYXJseV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJX1BSSU1BUllfQlVTLCB0ZW1wcyk7CiB9CiAKK2ludCBtcGM4Nnh4X2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKK3sKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pID09IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCiBpbnQgX19pbml0IGFkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CiAJaW50IGxlbjsKQEAgLTE5OCwxMjggKzIwMiwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2FsaTE1NzUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wOwotCi0JLyoKLQkgKiBBTEkxNTc1IGludGVycnVwdHMgcm91dGUgdGFibGUgc2V0dXA6Ci0JICoKLQkgKiBJUlEgcGluICAgSVJRIwotCSAqIFBJUlFBIC0tLS0gMwotCSAqIFBJUlFCIC0tLS0gNAotCSAqIFBJUlFDIC0tLS0gNQotCSAqIFBJUlFEIC0tLS0gNgotCSAqIFBJUlFFIC0tLS0gOQotCSAqIFBJUlFGIC0tLS0gMTAKLQkgKiBQSVJRRyAtLS0tIDExCi0JICogUElSUUggLS0tLSAxMgotCSAqCi0JICogaW50ZXJydXB0cyBmb3IgUENJIHNsb3QwIC0tIFBJUlFBIC8gUElSUUIgLyBQSVJRQyAvIFBJUlFECi0JICogICAgICAgICAgICAgICAgUENJIHNsb3QxIC0tIFBJUlFCIC8gUElSUUMgLyBQSVJRRCAvIFBJUlFBCi0JICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsIDB4YjkzMTc1NDIpOwotCi0JLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMSwgaW50ZXJydXB0OiBQSVJRRSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODYsIDB4MGMpOwotCi0JLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMiwgaW50ZXJydXB0OiBQSVJRRiAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODcsIDB4MGQpOwotCi0JLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMywgaW50ZXJydXB0OiBQSVJRSCAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODgsIDB4MGYpOwotCi0JLyogVVNCIDIuMCBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlE3ICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg3NCwgMHgwNik7Ci0KLQkvKiBBdWRpbyBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFFICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YSwgMHgwYyk7Ci0KLQkvKiBNb2RlbSBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFGICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YiwgMHgwZCk7Ci0KLQkvKiBIRCBhdWRpbyBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFHICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YywgMHgwZSk7Ci0KLQkvKiBTZXJpYWwgQVRBIGludGVycnVwdDogUElSUUQgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhkLCAweDBiKTsKLQotCS8qIFNNQiBpbnRlcnJ1cHQ6IFBJUlFIICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4ZSwgMHgwZik7Ci0KLQkvKiBQTVUgQUNQSSBTQ0kgaW50ZXJydXB0OiBQSVJRSCAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OGYsIDB4MGYpOwotCi0JLyogUHJpbWFyeSBQQVRBIElERSBJUlE6IDE0Ci0JICogU2Vjb25kYXJ5IFBBVEEgSURFIElSUTogMTUKLQkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCAweDNkKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDc1LCAweDBmKTsKLQotCS8qIFNldCBJUlExNCBhbmQgSVJRMTUgdG8gbGVnYWN5IElSUXMgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4NDYsICZ0ZW1wKTsKLQl0ZW1wIHw9IDB4YzAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDQ2LCB0ZW1wKTsKLQotCS8qIFNldCBpODI1OSBpbnRlcnJ1cHQgdHJpZ2dlcgotCSAqIElSUSAzOiAgTGV2ZWwKLQkgKiBJUlEgNDogIExldmVsCi0JICogSVJRIDU6ICBMZXZlbAotCSAqIElSUSA2OiAgTGV2ZWwKLQkgKiBJUlEgNzogIExldmVsCi0JICogSVJRIDk6ICBMZXZlbAotCSAqIElSUSAxMDogTGV2ZWwKLQkgKiBJUlEgMTE6IExldmVsCi0JICogSVJRIDEyOiBMZXZlbAotCSAqIElSUSAxNDogRWRnZQotCSAqIElSUSAxNTogRWRnZQotCSAqLwotCW91dGIoMHhmYSwgMHg0ZDApOwotCW91dGIoMHgxZSwgMHg0ZDEpOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdWxpNTI4OChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwweDgzLCZjKTsKLQljIHw9IDB4ODA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MywgYyk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDA5LCAweDAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDBhLCAweDA2KTsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwweDgzLCZjKTsKLQljICY9IDB4N2Y7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4MywgYyk7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsMHg4NCwmYyk7Ci0JYyB8PSAweDAxOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODQsIGMpOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdWxpNTIyOShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXVuc2lnbmVkIHNob3J0IHRlbXA7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHgwNCwgMHgwNDA1KTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4NGEsICZ0ZW1wKTsKLQl0ZW1wIHw9IDB4MTAwMDsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDRhLCB0ZW1wKTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGVhcmx5X3VsaTUyNDkoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBjaGFyIHRlbXA7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHgwNCwgMHgwMDA3KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4N2MsICZ0ZW1wKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDdjLCAweDgwKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDA5LCAweDAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDdjLCB0ZW1wKTsKLQlkZXYtPmNsYXNzIHw9IDB4MTsKLX0KLQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQUwsIDB4MTU3NSwgcXVpcmtfYWxpMTU3NSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg4LCBxdWlya191bGk1Mjg4KTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FMLCAweDUyMjksIHF1aXJrX3VsaTUyMjkpOwotREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTCwgMHg1MjQ5LCBlYXJseV91bGk1MjQ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCmluZGV4IDI5Mjg2MzYuLjVjZjQ2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQpAQCAtMTQsMyArMTQsNCBAQAogb2JqLSQoQ09ORklHX1BQQ19JU0VSSUVTKQkrPSBpc2VyaWVzLwogb2JqLSQoQ09ORklHX1BQQ19NQVBMRSkJCSs9IG1hcGxlLwogb2JqLSQoQ09ORklHX1BQQ19DRUxMKQkJKz0gY2VsbC8KK29iai0kKENPTkZJR19FTUJFRERFRDZ4eCkJKz0gZW1iZWRkZWQ2eHgvCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCmluZGV4IDM1MmJiYmEuLjBjOGM3YjZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAlkZWZhdWx0IG0KIAlkZXBlbmRzIG9uIFBQQ19DRUxMCiAJc2VsZWN0IFNQVV9CQVNFCisJc2VsZWN0IE1FTU9SWV9IT1RQTFVHCiAJaGVscAogCSAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nCiAJICBVbml0cyBvbiBtYWNoaW5lcyBpbXBsZW1lbnRpbmcgdGhlIEJyb2FkYmFuZCBQcm9jZXNzb3IKQEAgLTE4LDcgKzE5LDYgQEAKIGNvbmZpZyBTUFVGU19NTUFQCiAJYm9vbAogCWRlcGVuZHMgb24gU1BVX0ZTICYmIFNQQVJTRU1FTQotCXNlbGVjdCBNRU1PUllfSE9UUExVRwogCWRlZmF1bHQgeQogCiBjb25maWcgQ0JFX1JBUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCmluZGV4IDFiYmY4MjIuLjlkNWRhNzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKQEAgLTEsNiArMSw5IEBACiAvKgogICogQ2VsbCBJbnRlcm5hbCBJbnRlcnJ1cHQgQ29udHJvbGxlcgogICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCisgKiAgICAgICAgICAgICAgICAgICAgSUJNLCBDb3JwLgorICoKICAqIChDKSBDb3B5cmlnaHQgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkggMjAwNQogICoKICAqIEF1dGhvcjogQXJuZCBCZXJnbWFubiA8YXJuZGJAZGUuaWJtLmNvbT4KQEAgLTIwLDE3ICsyMywxOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKICNpbmNsdWRlICJpbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJjYmVfcmVncy5oIgpAQCAtMzgsMjMxICs0Miw2NSBAQAogc3RydWN0IGlpYyB7CiAJc3RydWN0IGNiZV9paWNfdGhyZWFkX3JlZ3MgX19pb21lbSAqcmVnczsKIAl1OCB0YXJnZXRfaWQ7CisJdTggZW9pX3N0YWNrWzE2XTsKKwlpbnQgZW9pX3B0cjsKKwlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CiB9OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlpYywgaWljKTsKKyNkZWZpbmUgSUlDX05PREVfQ09VTlQJMgorc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqaWljX2hvc3RzW0lJQ19OT0RFX0NPVU5UXTsKIAotdm9pZCBpaWNfbG9jYWxfZW5hYmxlKHZvaWQpCisvKiBDb252ZXJ0IGJldHdlZW4gInBlbmRpbmciIGJpdHMgYW5kIGh3IGlycSBudW1iZXIgKi8KK3N0YXRpYyBpcnFfaHdfbnVtYmVyX3QgaWljX3BlbmRpbmdfdG9faHdudW0oc3RydWN0IGNiZV9paWNfcGVuZGluZ19iaXRzIGJpdHMpCit7CisJdW5zaWduZWQgY2hhciB1bml0ID0gYml0cy5zb3VyY2UgJiAweGY7CisKKwlpZiAoYml0cy5mbGFncyAmIENCRV9JSUNfSVJRX0lQSSkKKwkJcmV0dXJuIElJQ19JUlFfSVBJMCB8IChiaXRzLnByaW8gPj4gNCk7CisJZWxzZSBpZiAoYml0cy5jbGFzcyA8PSAzKQorCQlyZXR1cm4gKGJpdHMuY2xhc3MgPDwgNCkgfCB1bml0OworCWVsc2UKKwkJcmV0dXJuIElJQ19JUlFfSU5WQUxJRDsKK30KKworc3RhdGljIHZvaWQgaWljX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgaWljX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCBpaWNfZW9pKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlpYyAqaWljID0gJl9fZ2V0X2NwdV92YXIoaWljKTsKLQl1NjQgdG1wOwotCi0JLyoKLQkgKiBUaGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyB0aGF0IGlzIHByZXNlbnQgaW4gREQyLnggQ1BVcwotCSAqIGFuZCBzdGlsbCBvbmx5IHBhcnRpYWxseSBmaXhlZCBpbiBERDMuMS4KLQkgKiBUaGlzIGJ1ZyBjYXVzZXMgYSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBwcmlvcml0eSByZWdpc3RlcgotCSAqIG5vdCB0byBtYWtlIGl0IHRoZXJlLCByZXN1bHRpbmcgaW4gYSBzeXN0ZW0gaGFuZyB1bmxlc3Mgd2UKLQkgKiB3cml0ZSBpdCBhZ2Fpbi4KLQkgKiBNYXNraW5nIHdpdGggMHhmMCBpcyBkb25lIGJlY2F1c2UgdGhlIENlbGwgQkUgZG9lcyBub3QKLQkgKiBpbXBsZW1lbnQgdGhlIGxvd2VyIGZvdXIgYml0cyBvZiB0aGUgaW50ZXJydXB0IHByaW9yaXR5LAotCSAqIHRoZXkgYWx3YXlzIHJlYWQgYmFjayBhcyB6ZXJvZXMsIGFsdGhvdWdoIGZ1dHVyZSBDUFVzCi0JICogbWlnaHQgaW1wbGVtZW50IGRpZmZlcmVudCBiaXRzLgotCSAqLwotCWRvIHsKLQkJb3V0X2JlNjQoJmlpYy0+cmVncy0+cHJpbywgMHhmZik7Ci0JCXRtcCA9IGluX2JlNjQoJmlpYy0+cmVncy0+cHJpbyk7Ci0JfSB3aGlsZSAoKHRtcCAmIDB4ZjApICE9IDB4ZjApOworCW91dF9iZTY0KCZpaWMtPnJlZ3MtPnByaW8sIGlpYy0+ZW9pX3N0YWNrWy0taWljLT5lb2lfcHRyXSk7CisJQlVHX09OKGlpYy0+ZW9pX3B0ciA8IDApOwogfQogCi12b2lkIGlpY19sb2NhbF9kaXNhYmxlKHZvaWQpCi17Ci0Jb3V0X2JlNjQoJl9fZ2V0X2NwdV92YXIoaWljKS5yZWdzLT5wcmlvLCAweDApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGlpY19zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGlpY19lbmFibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlpaWNfbG9jYWxfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlpY19kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGlpY19lbmQodW5zaWduZWQgaW50IGlycSkKLXsKLQlpaWNfbG9jYWxfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaWljX3BpYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWljX2NoaXAgPSB7CiAJLnR5cGVuYW1lID0gIiBDRUxMLUlJQyAiLAotCS5zdGFydHVwID0gaWljX3N0YXJ0dXAsCi0JLmVuYWJsZSA9IGlpY19lbmFibGUsCi0JLmRpc2FibGUgPSBpaWNfZGlzYWJsZSwKLQkuZW5kID0gaWljX2VuZCwKKwkubWFzayA9IGlpY19tYXNrLAorCS51bm1hc2sgPSBpaWNfdW5tYXNrLAorCS5lb2kgPSBpaWNfZW9pLAogfTsKIAotc3RhdGljIGludCBpaWNfZXh0ZXJuYWxfZ2V0X2lycShzdHJ1Y3QgY2JlX2lpY19wZW5kaW5nX2JpdHMgcGVuZGluZykKLXsKLQlpbnQgaXJxOwotCXVuc2lnbmVkIGNoYXIgbm9kZSwgdW5pdDsKLQotCW5vZGUgPSBwZW5kaW5nLnNvdXJjZSA+PiA0OwotCXVuaXQgPSBwZW5kaW5nLnNvdXJjZSAmIDB4ZjsKLQlpcnEgPSAtMTsKLQotCS8qCi0JICogVGhpcyBtYXBwaW5nIGlzIHNwZWNpZmljIHRvIHRoZSBDZWxsIEJyb2FkYmFuZAotCSAqIEVuZ2luZS4gV2UgbWlnaHQgbmVlZCB0byBnZXQgdGhlIG51bWJlcnMKLQkgKiBmcm9tIHRoZSBkZXZpY2UgdHJlZSB0byBzdXBwb3J0IGZ1dHVyZSBDUFVzLgotCSAqLwotCXN3aXRjaCAodW5pdCkgewotCWNhc2UgMHgwMDoKLQljYXNlIDB4MGI6Ci0JCS8qCi0JCSAqIE9uZSBvZiB0aGVzZSB1bml0cyBjYW4gYmUgY29ubmVjdGVkCi0JCSAqIHRvIGFuIGV4dGVybmFsIGludGVycnVwdCBjb250cm9sbGVyLgotCQkgKi8KLQkJaWYgKHBlbmRpbmcuY2xhc3MgIT0gMikKLQkJCWJyZWFrOwotCQlpcnEgPSBJSUNfRVhUX09GRlNFVAotCQkJKyBzcGlkZXJfZ2V0X2lycShub2RlKQotCQkJKyBub2RlICogSUlDX05PREVfU1RSSURFOwotCQlicmVhazsKLQljYXNlIDB4MDEgLi4uIDB4MDQ6Ci0JY2FzZSAweDA3IC4uLiAweDBhOgotCQkvKgotCQkgKiBUaGVzZSB1bml0cyBhcmUgY29ubmVjdGVkIHRvIHRoZSBTUEVzCi0JCSAqLwotCQlpZiAocGVuZGluZy5jbGFzcyA+IDIpCi0JCQlicmVhazsKLQkJaXJxID0gSUlDX1NQRV9PRkZTRVQKLQkJCSsgcGVuZGluZy5jbGFzcyAqIElJQ19DTEFTU19TVFJJREUKLQkJCSsgbm9kZSAqIElJQ19OT0RFX1NUUklERQotCQkJKyB1bml0OwotCQlicmVhazsKLQl9Ci0JaWYgKGlycSA9PSAtMSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5leHBlY3RlZCBpbnRlcnJ1cHQgY2xhc3MgJTAyeCwgIgotCQkJInNvdXJjZSAlMDJ4LCBwcmlvICUwMngsIGNwdSAlMDJ4XG4iLCBwZW5kaW5nLmNsYXNzLAotCQkJcGVuZGluZy5zb3VyY2UsIHBlbmRpbmcucHJpbywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlyZXR1cm4gaXJxOwotfQotCiAvKiBHZXQgYW4gSVJRIG51bWJlciBmcm9tIHRoZSBwZW5kaW5nIHN0YXRlIHJlZ2lzdGVyIG9mIHRoZSBJSUMgKi8KLWludCBpaWNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGlpYyAqaWljOwotCWludCBpcnE7Ci0Jc3RydWN0IGNiZV9paWNfcGVuZGluZ19iaXRzIHBlbmRpbmc7CisgIAlzdHJ1Y3QgY2JlX2lpY19wZW5kaW5nX2JpdHMgcGVuZGluZzsKKyAJc3RydWN0IGlpYyAqaWljOwogCi0JaWljID0gJl9fZ2V0X2NwdV92YXIoaWljKTsKLQkqKHVuc2lnbmVkIGxvbmcgKikgJnBlbmRpbmcgPSAKLQkJaW5fYmU2NCgodW5zaWduZWQgbG9uZyBfX2lvbWVtICopICZpaWMtPnJlZ3MtPnBlbmRpbmdfZGVzdHIpOwotCi0JaXJxID0gLTE7Ci0JaWYgKHBlbmRpbmcuZmxhZ3MgJiBDQkVfSUlDX0lSUV9WQUxJRCkgewotCQlpZiAocGVuZGluZy5mbGFncyAmIENCRV9JSUNfSVJRX0lQSSkgewotCQkJaXJxID0gSUlDX0lQSV9PRkZTRVQgKyAocGVuZGluZy5wcmlvID4+IDQpOwotLyoKLQkJCWlmIChpcnEgPiAweDgwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuZXhwZWN0ZWQgSVBJIHByaW8gJTAyeCIKLQkJCQkJIm9uIENQVSAlMDJ4XG4iLCBwZW5kaW5nLnByaW8sCi0JCQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLSovCi0JCX0gZWxzZSB7Ci0JCQlpcnEgPSBpaWNfZXh0ZXJuYWxfZ2V0X2lycShwZW5kaW5nKTsKLQkJfQotCX0KLQlyZXR1cm4gaXJxOwotfQotCi0vKiBoYXJkY29kZWQgcGFydCB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIgZmlybXdhcmUgKi8KLQotc3RhdGljIGludCBzZXR1cF9paWNfaGFyZGNvZGVkKHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlpbnQgbm9kZWlkLCBjcHU7Ci0JdW5zaWduZWQgbG9uZyByZWdzOwotCXN0cnVjdCBpaWMgKmlpYzsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJaWljID0gJnBlcl9jcHUoaWljLCBjcHUpOwotCQlub2RlaWQgPSBjcHUvMjsKLQotCQlmb3IgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOwotCQkgICAgIG5wOwotCQkgICAgIG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJjcHUiKSkgewotCQkJaWYgKG5vZGVpZCA9PSAqKGludCAqKWdldF9wcm9wZXJ0eShucCwgIm5vZGUtaWQiLCBOVUxMKSkKLQkJCQlicmVhazsKLQkJCX0KLQotCQlpZiAoIW5wKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJJSUM6IENQVSAlZCBub3QgZm91bmRcbiIsIGNwdSk7Ci0JCQlpaWMtPnJlZ3MgPSBOVUxMOwotCQkJaWljLT50YXJnZXRfaWQgPSAweGZmOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0KLQkJcmVncyA9ICoobG9uZyAqKWdldF9wcm9wZXJ0eShucCwgImlpYyIsIE5VTEwpOwotCi0JCS8qIGhhY2sgdW50aWwgd2UgaGF2ZSBkZWNpZGVkIG9uIHRoZSBkZXZ0cmVlIGluZm8gKi8KLQkJcmVncyArPSAweDQwMDsKLQkJaWYgKGNwdSAmIDEpCi0JCQlyZWdzICs9IDB4MjA7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiSUlDIGZvciBDUFUgJWQgYXQgJWx4XG4iLCBjcHUsIHJlZ3MpOwotCQlpaWMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MsIHNpemVvZihzdHJ1Y3QgY2JlX2lpY190aHJlYWRfcmVncykpOwotCQlpaWMtPnRhcmdldF9pZCA9IChub2RlaWQgPDwgNCkgKyAoKGNwdSAmIDEpID8gMHhmIDogMHhlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZXR1cF9paWModm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCXVuc2lnbmVkIGxvbmcgKnJlZ3M7Ci0JY2hhciAqY29tcGF0aWJsZTsKLSAJdW5zaWduZWQgKm5wLCBmb3VuZCA9IDA7Ci0Jc3RydWN0IGlpYyAqaWljID0gTlVMTDsKLQotCWZvciAoZG4gPSBOVUxMOyAoZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShkbiwgImludGVycnVwdC1jb250cm9sbGVyIikpOykgewotCQljb21wYXRpYmxlID0gKGNoYXIgKilnZXRfcHJvcGVydHkoZG4sICJjb21wYXRpYmxlIiwgTlVMTCk7Ci0KLQkJaWYgKCFjb21wYXRpYmxlKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJubyBjb21wYXRpYmxlIHByb3BlcnR5IGZvdW5kICFcbiIpOwotCQkJY29udGludWU7Ci0JCX0KLQotIAkJaWYgKHN0cnN0cihjb21wYXRpYmxlLCAiSUJNLENCRUEtSW50ZXJuYWwtSW50ZXJydXB0LUNvbnRyb2xsZXIiKSkKLSAJCQlyZWdzID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcHJvcGVydHkoZG4sInJlZyIsIE5VTEwpOwotIAkJZWxzZQotCQkJY29udGludWU7Ci0KLSAJCWlmICghcmVncykKLSAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJSUM6IG5vIHJlZyBwcm9wZXJ0eVxuIik7Ci0KLSAJCW5wID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShkbiwgImlibSxpbnRlcnJ1cHQtc2VydmVyLXJhbmdlcyIsIE5VTEwpOwotCi0gCQlpZiAoIW5wKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJJSUM6IENQVSBhc3NvY2lhdGlvbiBub3QgZm91bmRcbiIpOwotCQkJaWljLT5yZWdzID0gTlVMTDsKLQkJCWlpYy0+dGFyZ2V0X2lkID0gMHhmZjsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0KLSAJCWlpYyA9ICZwZXJfY3B1KGlpYywgbnBbMF0pOwotIAkJaWljLT5yZWdzID0gaW9yZW1hcChyZWdzWzBdLCBzaXplb2Yoc3RydWN0IGNiZV9paWNfdGhyZWFkX3JlZ3MpKTsKLQkJaWljLT50YXJnZXRfaWQgPSAoKG5wWzBdICYgMikgPDwgMykgKyAoKG5wWzBdICYgMSkgPyAweGYgOiAweGUpOwotIAkJcHJpbnRrKCJJSUMgZm9yIENQVSAlZCBhdCAlbHggbWFwcGVkIHRvICVwXG4iLCBucFswXSwgcmVnc1swXSwgaWljLT5yZWdzKTsKLQotIAkJaWljID0gJnBlcl9jcHUoaWljLCBucFsxXSk7Ci0gCQlpaWMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3NbMl0sIHNpemVvZihzdHJ1Y3QgY2JlX2lpY190aHJlYWRfcmVncykpOwotCQlpaWMtPnRhcmdldF9pZCA9ICgobnBbMV0gJiAyKSA8PCAzKSArICgobnBbMV0gJiAxKSA/IDB4ZiA6IDB4ZSk7Ci0gCQlwcmludGsoIklJQyBmb3IgQ1BVICVkIGF0ICVseCBtYXBwZWQgdG8gJXBcbiIsIG5wWzFdLCByZWdzWzJdLCBpaWMtPnJlZ3MpOwotCi0JCWZvdW5kKys7Ci0gIAl9Ci0KLQlpZiAoZm91bmQpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7CisgCWlpYyA9ICZfX2dldF9jcHVfdmFyKGlpYyk7CisgCSoodW5zaWduZWQgbG9uZyAqKSAmcGVuZGluZyA9CisgCQlpbl9iZTY0KCh1bnNpZ25lZCBsb25nIF9faW9tZW0gKikgJmlpYy0+cmVncy0+cGVuZGluZ19kZXN0cik7CisgCWlpYy0+ZW9pX3N0YWNrWysraWljLT5lb2lfcHRyXSA9IHBlbmRpbmcucHJpbzsKKyAJQlVHX09OKGlpYy0+ZW9pX3B0ciA+IDE1KTsKKwlpZiAocGVuZGluZy5mbGFncyAmIENCRV9JSUNfSVJRX1ZBTElEKQorCQlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAoaWljLT5ob3N0LAorIAkJCQkJIGlpY19wZW5kaW5nX3RvX2h3bnVtKHBlbmRpbmcpKTsKKwlyZXR1cm4gTk9fSVJROwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjcwLDEyICsxMDgsMTIgQEAKIC8qIFVzZSB0aGUgaGlnaGVzdCBpbnRlcnJ1cHQgcHJpb3JpdGllcyBmb3IgSVBJICovCiBzdGF0aWMgaW5saW5lIGludCBpaWNfaXBpX3RvX2lycShpbnQgaXBpKQogewotCXJldHVybiBJSUNfSVBJX09GRlNFVCArIElJQ19OVU1fSVBJUyAtIDEgLSBpcGk7CisJcmV0dXJuIElJQ19JUlFfSVBJMCArIElJQ19OVU1fSVBJUyAtIDEgLSBpcGk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlpY19pcnFfdG9faXBpKGludCBpcnEpCiB7Ci0JcmV0dXJuIElJQ19OVU1fSVBJUyAtIDEgLSAoaXJxIC0gSUlDX0lQSV9PRkZTRVQpOworCXJldHVybiBJSUNfTlVNX0lQSVMgLSAxIC0gKGlycSAtIElJQ19JUlFfSVBJMCk7CiB9CiAKIHZvaWQgaWljX3NldHVwX2NwdSh2b2lkKQpAQCAtMjk0LDIyICsxMzIsNTEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlpY19nZXRfdGFyZ2V0X2lkKTsKIAorc3RydWN0IGlycV9ob3N0ICppaWNfZ2V0X2lycV9ob3N0KGludCBub2RlKQoreworCWlmIChub2RlIDwgMCB8fCBub2RlID49IElJQ19OT0RFX0NPVU5UKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gaWljX2hvc3RzW25vZGVdOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWljX2dldF9pcnFfaG9zdCk7CisKKwogc3RhdGljIGlycXJldHVybl90IGlpY19pcGlfYWN0aW9uKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc21wX21lc3NhZ2VfcmVjdihpaWNfaXJxX3RvX2lwaShpcnEpLCByZWdzKTsKKwlpbnQgaXBpID0gKGludCkobG9uZylkZXZfaWQ7CisKKwlzbXBfbWVzc2FnZV9yZWN2KGlwaSwgcmVncyk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlpY19yZXF1ZXN0X2lwaShpbnQgaXBpLCBjb25zdCBjaGFyICpuYW1lKQogewotCWludCBpcnE7CisJaW50IG5vZGUsIHZpcnE7CiAKLQlpcnEgPSBpaWNfaXBpX3RvX2lycShpcGkpOwotCS8qIElQSXMgYXJlIG1hcmtlZCBTQV9JTlRFUlJVUFQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMKLQkgKiBkaXNhYmxlZCAqLwotCWdldF9pcnFfZGVzYyhpcnEpLT5oYW5kbGVyID0gJmlpY19waWM7Ci0JZ2V0X2lycV9kZXNjKGlycSktPnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKLQlyZXF1ZXN0X2lycShpcnEsIGlpY19pcGlfYWN0aW9uLCBTQV9JTlRFUlJVUFQsIG5hbWUsIE5VTEwpOworCWZvciAobm9kZSA9IDA7IG5vZGUgPCBJSUNfTk9ERV9DT1VOVDsgbm9kZSsrKSB7CisJCWNoYXIgKnJuYW1lOworCQlpZiAoaWljX2hvc3RzW25vZGVdID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhpaWNfaG9zdHNbbm9kZV0sCisJCQkJCSAgaWljX2lwaV90b19pcnEoaXBpKSwgMCk7CisJCWlmICh2aXJxID09IE5PX0lSUSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImlpYzogZmFpbGVkIHRvIG1hcCBJUEkgJXMgb24gbm9kZSAlZFxuIiwKKwkJCSAgICAgICBuYW1lLCBub2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJuYW1lID0ga3phbGxvYyhzdHJsZW4obmFtZSkgKyAxNiwgR0ZQX0tFUk5FTCk7CisJCWlmIChybmFtZSkKKwkJCXNwcmludGYocm5hbWUsICIlcyBub2RlICVkIiwgbmFtZSwgbm9kZSk7CisJCWVsc2UKKwkJCXJuYW1lID0gKGNoYXIgKiluYW1lOworCQlpZiAocmVxdWVzdF9pcnEodmlycSwgaWljX2lwaV9hY3Rpb24sIElSUUZfRElTQUJMRUQsCisJCQkJcm5hbWUsICh2b2lkICopKGxvbmcpaXBpKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJpaWM6IGZhaWxlZCB0byByZXF1ZXN0IElQSSAlcyBvbiBub2RlICVkXG4iLAorCQkJICAgICAgIG5hbWUsIG5vZGUpOworCX0KIH0KIAogdm9pZCBpaWNfcmVxdWVzdF9JUElzKHZvaWQpCkBAIC0zMjAsMzQgKzE4NywxMTkgQEAKIAlpaWNfcmVxdWVzdF9pcGkoUFBDX01TR19ERUJVR0dFUl9CUkVBSywgIklQSS1kZWJ1ZyIpOwogI2VuZGlmIC8qIENPTkZJR19ERUJVR0dFUiAqLwogfQorCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi1zdGF0aWMgdm9pZCBpaWNfc2V0dXBfc3BlX2hhbmRsZXJzKHZvaWQpCi17Ci0JaW50IGJlLCBpc3JjOwogCi0JLyogQXNzdW1lIHR3byB0aHJlYWRzIHBlciBCRSBhcmUgcHJlc2VudCAqLwotCWZvciAoYmU9MDsgYmUgPCBudW1fcHJlc2VudF9jcHVzKCkgLyAyOyBiZSsrKSB7Ci0JCWZvciAoaXNyYyA9IDA7IGlzcmMgPCBJSUNfQ0xBU1NfU1RSSURFICogMzsgaXNyYysrKSB7Ci0JCQlpbnQgaXJxID0gSUlDX05PREVfU1RSSURFICogYmUgKyBJSUNfU1BFX09GRlNFVCArIGlzcmM7Ci0JCQlnZXRfaXJxX2Rlc2MoaXJxKS0+aGFuZGxlciA9ICZpaWNfcGljOwotCQl9Ci0JfQorc3RhdGljIGludCBpaWNfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gaC0+aG9zdF9kYXRhICE9IE5VTEwgJiYgbm9kZSA9PSBoLT5ob3N0X2RhdGE7CiB9CiAKLXZvaWQgaWljX2luaXRfSVJRKHZvaWQpCitzdGF0aWMgaW50IGlpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJaXJxX2h3X251bWJlcl90IGh3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGNwdSwgaXJxX29mZnNldDsKLQlzdHJ1Y3QgaWljICppaWM7CisJaWYgKGh3IDwgSUlDX0lSUV9JUEkwKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmlpY19jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOworCWVsc2UKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZpaWNfY2hpcCwgaGFuZGxlX3BlcmNwdV9pcnEpOworCXJldHVybiAwOworfQogCi0JaWYgKHNldHVwX2lpYygpIDwgMCkKLQkJc2V0dXBfaWljX2hhcmRjb2RlZCgpOworc3RhdGljIGludCBpaWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkgICB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQogCi0JaXJxX29mZnNldCA9IDA7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpaWMgPSAmcGVyX2NwdShpaWMsIGNwdSk7Ci0JCWlmIChpaWMtPnJlZ3MpCi0JCQlvdXRfYmU2NCgmaWljLT5yZWdzLT5wcmlvLCAweGZmKTsKK3sKKwkvKiBDdXJyZW50bHksIHdlIGRvbid0IHRyYW5zbGF0ZSBhbnl0aGluZy4gVGhhdCBuZWVkcyB0byBiZSBmaXhlZCBhcworCSAqIHdlIGdldCBiZXR0ZXIgZGVmaW5lZCBkZXZpY2UtdHJlZXMuIGlpYyBpbnRlcnJ1cHRzIGhhdmUgdG8gYmUKKwkgKiBleHBsaWNpdGVseSBtYXBwZWQgYnkgd2hvZXZlciBuZWVkcyB0aGVtCisJICovCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIGlpY19ob3N0X29wcyA9IHsKKwkubWF0Y2ggPSBpaWNfaG9zdF9tYXRjaCwKKwkubWFwID0gaWljX2hvc3RfbWFwLAorCS54bGF0ZSA9IGlpY19ob3N0X3hsYXRlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfb25lX2lpYyh1bnNpZ25lZCBpbnQgaHdfY3B1LCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJc3RydWN0IGlycV9ob3N0ICpob3N0KQoreworCS8qIFhYWCBGSVhNRTogc2hvdWxkIGxvY2F0ZSB0aGUgbGludXggQ1BVIG51bWJlciBmcm9tIHRoZSBIVyBjcHUKKwkgKiBudW1iZXIgcHJvcGVybHkuIFdlIGFyZSBsdWNreSBmb3Igbm93CisJICovCisJc3RydWN0IGlpYyAqaWljID0gJnBlcl9jcHUoaWljLCBod19jcHUpOworCisJaWljLT5yZWdzID0gaW9yZW1hcChhZGRyLCBzaXplb2Yoc3RydWN0IGNiZV9paWNfdGhyZWFkX3JlZ3MpKTsKKwlCVUdfT04oaWljLT5yZWdzID09IE5VTEwpOworCisJaWljLT50YXJnZXRfaWQgPSAoKGh3X2NwdSAmIDIpIDw8IDMpIHwgKChod19jcHUgJiAxKSA/IDB4ZiA6IDB4ZSk7CisJaWljLT5lb2lfc3RhY2tbMF0gPSAweGZmOworCWlpYy0+aG9zdCA9IGhvc3Q7CisJb3V0X2JlNjQoJmlpYy0+cmVncy0+cHJpbywgMCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJJSUMgZm9yIENQVSAlZCBhdCAlbHggbWFwcGVkIHRvICVwLCB0YXJnZXQgaWQgMHgleFxuIiwKKwkgICAgICAgaHdfY3B1LCBhZGRyLCBpaWMtPnJlZ3MsIGlpYy0+dGFyZ2V0X2lkKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfaWljKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjAsIHIxOworCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKKwlpbnQgZm91bmQgPSAwOworIAl1MzIgKm5wOworCisJZm9yIChkbiA9IE5VTEw7CisJICAgICAoZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShkbiwiaW50ZXJydXB0LWNvbnRyb2xsZXIiKSkgIT0gTlVMTDspIHsKKwkJaWYgKCFkZXZpY2VfaXNfY29tcGF0aWJsZShkbiwKKwkJCQkgICAgICJJQk0sQ0JFQS1JbnRlcm5hbC1JbnRlcnJ1cHQtQ29udHJvbGxlciIpKQorCQkJY29udGludWU7CisgCQlucCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJpYm0saW50ZXJydXB0LXNlcnZlci1yYW5nZXMiLAorCQkJCQkgTlVMTCk7CisgCQlpZiAobnAgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSUlDOiBDUFUgYXNzb2NpYXRpb24gbm90IGZvdW5kXG4iKTsKKwkJCW9mX25vZGVfcHV0KGRuKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRuLCAwLCAmcjApIHx8CisJCSAgICBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRuLCAxLCAmcjEpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJSUM6IENhbid0IHJlc29sdmUgYWRkcmVzc2VzXG4iKTsKKwkJCW9mX25vZGVfcHV0KGRuKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWhvc3QgPSBOVUxMOworCQlpZiAoZm91bmQgPCBJSUNfTk9ERV9DT1VOVCkgeworCQkJaG9zdCA9IGlycV9hbGxvY19ob3N0KElSUV9IT1NUX01BUF9MSU5FQVIsCisJCQkJCSAgICAgIElJQ19TT1VSQ0VfQ09VTlQsCisJCQkJCSAgICAgICZpaWNfaG9zdF9vcHMsCisJCQkJCSAgICAgIElJQ19JUlFfSU5WQUxJRCk7CisJCQlpaWNfaG9zdHNbZm91bmRdID0gaG9zdDsKKwkJCUJVR19PTihpaWNfaG9zdHNbZm91bmRdID09IE5VTEwpOworCQkJaWljX2hvc3RzW2ZvdW5kXS0+aG9zdF9kYXRhID0gb2Zfbm9kZV9nZXQoZG4pOworCQkJZm91bmQrKzsKKwkJfQorCQlpbml0X29uZV9paWMobnBbMF0sIHIwLnN0YXJ0LCBob3N0KTsKKwkJaW5pdF9vbmVfaWljKG5wWzFdLCByMS5zdGFydCwgaG9zdCk7CiAJfQotCWlpY19zZXR1cF9zcGVfaGFuZGxlcnMoKTsKKworCWlmIChmb3VuZCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKK30KKwordm9pZCBfX2luaXQgaWljX2luaXRfSVJRKHZvaWQpCit7CisJLyogRGlzY292ZXIgYW5kIGluaXRpYWxpemUgaWljcyAqLworCWlmIChzZXR1cF9paWMoKSA8IDApCisJCXBhbmljKCJJSUM6IEZhaWxlZCB0byBpbml0aWFsaXplICFcbiIpOworCisJLyogU2V0IG1hc3RlciBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb24gKi8KKwlwcGNfbWQuZ2V0X2lycSA9IGlpY19nZXRfaXJxOworCisJLyogRW5hYmxlIG9uIGN1cnJlbnQgQ1BVICovCisJaWljX3NldHVwX2NwdSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5oCmluZGV4IDc5OWY3N2QuLjU1NjBhOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmgKQEAgLTM3LDI3ICszNywyNCBAQAogICovCiAKIGVudW0gewotCUlJQ19FWFRfT0ZGU0VUICAgPSAweDAwLCAvKiBTdGFydCBvZiBzb3V0aCBicmlkZ2UgSVJRcyAqLwotCUlJQ19OVU1fRVhUICAgICAgPSAweDQwLCAvKiBOdW1iZXIgb2Ygc291dGggYnJpZGdlIElSUXMgKi8KLQlJSUNfU1BFX09GRlNFVCAgID0gMHg0MCwgLyogU3RhcnQgb2YgU1BFIGludGVycnVwdHMgKi8KLQlJSUNfQ0xBU1NfU1RSSURFID0gMHgxMCwgLyogU1BFIElSUXMgcGVyIGNsYXNzICAgICovCi0JSUlDX0lQSV9PRkZTRVQgICA9IDB4NzAsIC8qIFN0YXJ0IG9mIElQSSBJUlFzICovCi0JSUlDX05VTV9JUElTICAgICA9IDB4MTAsIC8qIElSUXMgcmVzZXJ2ZWQgZm9yIElQSSAqLwotCUlJQ19OT0RFX1NUUklERSAgPSAweDgwLCAvKiBUb3RhbCBJUlFzIHBlciBub2RlICAgKi8KKwlJSUNfSVJRX0lOVkFMSUQJCT0gMHhmZiwKKwlJSUNfSVJRX01BWAkJPSAweDNmLAorCUlJQ19JUlFfRVhUX0lPSUYwCT0gMHgyMCwKKwlJSUNfSVJRX0VYVF9JT0lGMQk9IDB4MmIsCisJSUlDX0lSUV9JUEkwCQk9IDB4NDAsCisJSUlDX05VTV9JUElTICAgIAk9IDB4MTAsIC8qIElSUXMgcmVzZXJ2ZWQgZm9yIElQSSAqLworCUlJQ19TT1VSQ0VfQ09VTlQJPSAweDUwLAogfTsKIAogZXh0ZXJuIHZvaWQgaWljX2luaXRfSVJRKHZvaWQpOwotZXh0ZXJuIGludCAgaWljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgaWljX2NhdXNlX0lQSShpbnQgY3B1LCBpbnQgbWVzZyk7CiBleHRlcm4gdm9pZCBpaWNfcmVxdWVzdF9JUElzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaWljX3NldHVwX2NwdSh2b2lkKTsKLWV4dGVybiB2b2lkIGlpY19sb2NhbF9lbmFibGUodm9pZCk7Ci1leHRlcm4gdm9pZCBpaWNfbG9jYWxfZGlzYWJsZSh2b2lkKTsKIAogZXh0ZXJuIHU4IGlpY19nZXRfdGFyZ2V0X2lkKGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBpcnFfaG9zdCAqaWljX2dldF9pcnFfaG9zdChpbnQgbm9kZSk7CiAKIGV4dGVybiB2b2lkIHNwaWRlcl9pbml0X0lSUSh2b2lkKTsKLWV4dGVybiBpbnQgc3BpZGVyX2dldF9pcnEoaW50IG5vZGUpOwogCiAjZW5kaWYKICNlbmRpZiAvKiBBU01fQ0VMTF9QSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5jCmluZGV4IDY5NWFjNGUuLjlmMmU0ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcGVydmFzaXZlLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKaW5kZXggM2QxODMxZC4uMjgyOTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zcHUuaD4KICNpbmNsdWRlIDxhc20vc3B1X3ByaXYxLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KIAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgImlvbW11LmgiCkBAIC04MCwxMCArODAsMjIgQEAKIAlwcmludGsoIioqKiAlMDR4IDogJXNcbiIsIGhleCwgcyA/IHMgOiAiIik7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBjZWxsX3BjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KQorCQlwY2lfcmVhZF9pcnFfbGluZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY2VsbF9pbml0X2lycSh2b2lkKQoreworCWlpY19pbml0X0lSUSgpOworCXNwaWRlcl9pbml0X0lSUSgpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgY2VsbF9zZXR1cF9hcmNoKHZvaWQpCiB7Ci0JcHBjX21kLmluaXRfSVJRICAgICAgID0gaWljX2luaXRfSVJROwotCXBwY19tZC5nZXRfaXJxICAgICAgICA9IGlpY19nZXRfaXJxOwogI2lmZGVmIENPTkZJR19TUFVfQkFTRQogCXNwdV9wcml2MV9vcHMgICAgICAgICA9ICZzcHVfcHJpdjFfbW1pb19vcHM7CiAjZW5kaWYKQEAgLTEwOSw3ICsxMjEsNiBAQAogCS8qIEZpbmQgYW5kIGluaXRpYWxpemUgUENJIGhvc3QgYnJpZGdlcyAqLwogCWluaXRfcGNpX2NvbmZpZ190b2tlbnMoKTsKIAlmaW5kX2FuZF9pbml0X3BoYnMoKTsKLQlzcGlkZXJfaW5pdF9JUlEoKTsKIAljYmVfcGVydmFzaXZlX2luaXQoKTsKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwpAQCAtMTI1LDEyICsxMzYsOCBAQAogewogCURCRygiIC0+IGNlbGxfaW5pdF9lYXJseSgpXG4iKTsKIAotCWhwdGVfaW5pdF9uYXRpdmUoKTsKLQogCWNlbGxfaW5pdF9pb21tdSgpOwogCi0JcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPSBJQ19DRUxMX1BJQzsKLQogCURCRygiIDwtIGNlbGxfaW5pdF9lYXJseSgpXG4iKTsKIH0KIApAQCAtMTM5LDExICsxNDYsMTcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CiAKLQlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpIHx8Ci0JICAgIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikpCi0JCXJldHVybiAxOworCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpICYmCisJICAgICFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIklCTSxDUEJXLTEuMCIpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworI2lmZGVmIENPTkZJR19VREJHX1JUQVNfQ09OU09MRQorCXVkYmdfaW5pdF9ydGFzX2NvbnNvbGUoKTsKKyNlbmRpZgorCisJaHB0ZV9pbml0X25hdGl2ZSgpOworCisJcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC0xNzAsNiArMTgzLDggQEAKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkuY2hlY2tfbGVnYWN5X2lvcG9ydAk9IGNlbGxfY2hlY2tfbGVnYWN5X2lvcG9ydCwKIAkucHJvZ3Jlc3MJCT0gY2VsbF9wcm9ncmVzcywKKwkuaW5pdF9JUlEgICAgICAgCT0gY2VsbF9pbml0X2lycSwKKwkucGNpYmlvc19maXh1cAkJPSBjZWxsX3BjaWJpb3NfZml4dXAsCiAjaWZkZWYgQ09ORklHX0tFWEVDCiAJLm1hY2hpbmVfa2V4ZWMJCT0gZGVmYXVsdF9tYWNoaW5lX2tleGVjLAogCS5tYWNoaW5lX2tleGVjX3ByZXBhcmUJPSBkZWZhdWx0X21hY2hpbmVfa2V4ZWNfcHJlcGFyZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYwppbmRleCBiZGY2YzVmLi40NmFlZjA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCkBAIC0xNCw3ICsxNCw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IDU1Y2JkZDcuLmFlN2VmODggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC01NiwxODQgKzU3LDMxMyBAQAogCVJFSVNXQUlURU4JPSAweDUwOCwgLyogUmVpc3N1ZSBXYWl0IENvbnRyb2wqLwogfTsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3BpZGVyX3BpY3NbNF07CisjZGVmaW5lIFNQSURFUl9DSElQX0NPVU5UCTQKKyNkZWZpbmUgU1BJREVSX1NSQ19DT1VOVAk2NAorI2RlZmluZSBTUElERVJfSVJRX0lOVkFMSUQJNjMKIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3BpZGVyX2dldF9waWMoaW50IGlycSkKK3N0cnVjdCBzcGlkZXJfcGljIHsKKwlzdHJ1Y3QgaXJxX2hvc3QJCSpob3N0OworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXVuc2lnbmVkIGludAkJbm9kZV9pZDsKK307CitzdGF0aWMgc3RydWN0IHNwaWRlcl9waWMgc3BpZGVyX3BpY3NbU1BJREVSX0NISVBfQ09VTlRdOworCitzdGF0aWMgc3RydWN0IHNwaWRlcl9waWMgKnNwaWRlcl92aXJxX3RvX3BpYyh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLQlpbnQgbm9kZSA9IGlycSAvIElJQ19OT0RFX1NUUklERTsKLQlpcnEgJT0gSUlDX05PREVfU1RSSURFOwotCi0JaWYgKGlycSA+PSBJSUNfRVhUX09GRlNFVCAmJgotCSAgICBpcnEgPCBJSUNfRVhUX09GRlNFVCArIElJQ19OVU1fRVhUICYmCi0JICAgIHNwaWRlcl9waWNzKQotCQlyZXR1cm4gc3BpZGVyX3BpY3Nbbm9kZV07Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIGlycV9tYXBbdmlycV0uaG9zdC0+aG9zdF9kYXRhOwogfQogCi1zdGF0aWMgaW50IHNwaWRlcl9nZXRfbnIodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNwaWRlcl9nZXRfaXJxX2NvbmZpZyhzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgc3JjKQogewotCXJldHVybiAoaXJxICUgSUlDX05PREVfU1RSSURFKSAtIElJQ19FWFRfT0ZGU0VUOworCXJldHVybiBwaWMtPnJlZ3MgKyBUSVJfQ0ZHQSArIDggKiBzcmM7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNwaWRlcl9nZXRfaXJxX2NvbmZpZyhpbnQgaXJxKQorc3RhdGljIHZvaWQgc3BpZGVyX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7Ci0Jdm9pZCBfX2lvbWVtICpwaWM7Ci0JcGljID0gc3BpZGVyX2dldF9waWMoaXJxKTsKLQlyZXR1cm4gcGljICsgVElSX0NGR0EgKyA4ICogc3BpZGVyX2dldF9ucihpcnEpOworCXN0cnVjdCBzcGlkZXJfcGljICpwaWMgPSBzcGlkZXJfdmlycV90b19waWModmlycSk7CisJdm9pZCBfX2lvbWVtICpjZmcgPSBzcGlkZXJfZ2V0X2lycV9jb25maWcocGljLCBpcnFfbWFwW3ZpcnFdLmh3aXJxKTsKKworCS8qIFdlIHVzZSBubyBsb2NraW5nIGFzIHdlIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IHRoZSBkZXNjcmlwdG9yIGxvY2sKKwkgKiBmb3IgYWNjZXNzIHRvIGludmlkdWFsIHNvdXJjZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworCSAqLworCW91dF9iZTMyKGNmZywgaW5fYmUzMihjZmcpIHwgMHgzMDAwMDAwMHUpOwogfQogCi1zdGF0aWMgdm9pZCBzcGlkZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3BpZGVyX21hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQogewotCWludCBub2RlaWQgPSAoaXJxIC8gSUlDX05PREVfU1RSSURFKSAqIDB4MTA7Ci0Jdm9pZCBfX2lvbWVtICpjZmcgPSBzcGlkZXJfZ2V0X2lycV9jb25maWcoaXJxKTsKLQlpcnEgPSBzcGlkZXJfZ2V0X25yKGlycSk7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyh2aXJxKTsKKwl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGlycV9tYXBbdmlycV0uaHdpcnEpOwogCi0Jb3V0X2JlMzIoY2ZnLCAoaW5fYmUzMihjZmcpICYgfjB4ZjApfCAweDMxMDcwMDBldSB8IG5vZGVpZCk7Ci0Jb3V0X2JlMzIoY2ZnICsgNCwgaW5fYmUzMihjZmcgKyA0KSB8IDB4MDAwMjAwMDB1IHwgaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgc3BpZGVyX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpjZmcgPSBzcGlkZXJfZ2V0X2lycV9jb25maWcoaXJxKTsKLQlpcnEgPSBzcGlkZXJfZ2V0X25yKGlycSk7Ci0KKwkvKiBXZSB1c2Ugbm8gbG9ja2luZyBhcyB3ZSBzaG91bGQgYmUgY292ZXJlZCBieSB0aGUgZGVzY3JpcHRvciBsb2NrCisJICogZm9yIGFjY2VzcyB0byBpbnZpZHVhbCBzb3VyY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKwkgKi8KIAlvdXRfYmUzMihjZmcsIGluX2JlMzIoY2ZnKSAmIH4weDMwMDAwMDAwdSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3BpZGVyX3N0YXJ0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBzcGlkZXJfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLQlzcGlkZXJfZW5hYmxlX2lycShpcnEpOworCXN0cnVjdCBzcGlkZXJfcGljICpwaWMgPSBzcGlkZXJfdmlycV90b19waWModmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisKKwkvKiBSZXNldCBlZGdlIGRldGVjdGlvbiBsb2dpYyBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpCisJCXJldHVybjsKKworCS8qIE9ubHkgaW50ZXJydXB0cyA0NyB0byA1MCBjYW4gYmUgc2V0IHRvIGVkZ2UgKi8KKwlpZiAoc3JjIDwgNDcgfHwgc3JjID4gNTApCisJCXJldHVybjsKKworCS8qIFBlcmZvcm0gdGhlIGNsZWFyIG9mIHRoZSBlZGdlIGxvZ2ljICovCisJb3V0X2JlMzIocGljLT5yZWdzICsgVElSX0VEQywgMHgxMDAgfCAoc3JjICYgMHhmKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3BpZGVyX3BpYyA9IHsKKwkudHlwZW5hbWUgPSAiIFNQSURFUiAgICIsCisJLnVubWFzayA9IHNwaWRlcl91bm1hc2tfaXJxLAorCS5tYXNrID0gc3BpZGVyX21hc2tfaXJxLAorCS5hY2sgPSBzcGlkZXJfYWNrX2lycSwKK307CisKK3N0YXRpYyBpbnQgc3BpZGVyX2hvc3RfbWF0Y2goc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IGgtPmhvc3RfZGF0YTsKKwlyZXR1cm4gbm9kZSA9PSBwaWMtPm9mX25vZGU7Cit9CisKK3N0YXRpYyBpbnQgc3BpZGVyX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQlpcnFfaHdfbnVtYmVyX3QgaHcsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgc2Vuc2UgPSBmbGFncyAmIElSUV9UWVBFX1NFTlNFX01BU0s7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IGgtPmhvc3RfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGh3KTsKKwlpbnQgbGV2ZWwgPSAwOworCXUzMiBpYzsKKworCS8qIE5vdGUgdGhhdCBvbmx5IGxldmVsIGhpZ2ggaXMgc3VwcG9ydGVkIGZvciBtb3N0IGludGVycnVwdHMgKi8KKwlpZiAoc2Vuc2UgIT0gSVJRX1RZUEVfTk9ORSAmJiBzZW5zZSAhPSBJUlFfVFlQRV9MRVZFTF9ISUdIICYmCisJICAgIChodyA8IDQ3IHx8IGh3ID4gNTApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIERlY29kZSBzZW5zZSB0eXBlICovCisJc3dpdGNoKHNlbnNlKSB7CisJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJaWMgPSAweDM7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgorCQlpYyA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCWljID0gMHgwOworCQlsZXZlbCA9IDE7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwljYXNlIElSUV9UWVBFX05PTkU6CisJCWljID0gMHgxOworCQlsZXZlbCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENvbmZpZ3VyZSB0aGUgc291cmNlLiBPbmUgZ3Jvc3MgaGFjayB0aGF0IHdhcyB0aGVyZSBiZWZvcmUgYW5kCisJICogdGhhdCBJJ3ZlIGtlcHQgYXJvdW5kIGlzIHRoZSBwcmlvcml0eSB0byB0aGUgQkUgd2hpY2ggSSBzZXQgdG8KKwkgKiBiZSB0aGUgc2FtZSBhcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBudW1iZXIuIEkgZG9uJ3Qga25vdyB3ZXRoZXIKKwkgKiB0aGF0J3Mgc3VwcG9zZWQgdG8gbWFrZSBhbnkga2luZCBvZiBzZW5zZSBob3dldmVyLCB3ZSdsbCBoYXZlIHRvCisJICogZGVjaWRlIHRoYXQsIGJ1dCBmb3Igbm93LCBJJ20gbm90IGNoYW5naW5nIHRoZSBiZWhhdmlvdXIuCisJICovCisJb3V0X2JlMzIoY2ZnLCAoaWMgPDwgMjQpIHwgKDB4NyA8PCAxNikgfCAocGljLT5ub2RlX2lkIDw8IDQpIHwgMHhlKTsKKwlvdXRfYmUzMihjZmcgKyA0LCAoMHgyIDw8IDE2KSB8IChodyAmIDB4ZmYpKTsKKworCWlmIChsZXZlbCkKKwkJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmc3BpZGVyX3BpYywgaGFuZGxlX2xldmVsX2lycSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNwaWRlcl9zaHV0ZG93bl9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyBpbnQgc3BpZGVyX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKKwogewotCXNwaWRlcl9kaXNhYmxlX2lycShpcnEpOworCS8qIFNwaWRlciBpbnRlcnJ1cHRzIGhhdmUgMiBjZWxscywgZmlyc3QgaXMgdGhlIGludGVycnVwdCBzb3VyY2UsCisJICogc2Vjb25kLCB3ZWxsLCBJIGRvbid0IGtub3cgZm9yIHN1cmUgeWV0IC4uLiBXZSBtYXNrIHRoZSB0b3AgYml0cworCSAqIGJlY2F1c2Ugb2xkIGRldmljZS10cmVlcyBlbmNvZGUgYSBub2RlIG51bWJlciBpbiB0aGVyZQorCSAqLworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdICYgMHgzZjsKKwkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTEVWRUxfSElHSDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3BpZGVyX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzcGlkZXJfZW5hYmxlX2lycShpcnEpOwotfQotCi1zdGF0aWMgdm9pZCBzcGlkZXJfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXNwaWRlcl9kaXNhYmxlX2lycShpcnEpOwotCWlpY19sb2NhbF9lbmFibGUoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBzcGlkZXJfcGljID0gewotCS50eXBlbmFtZSA9ICIgU1BJREVSICAgIiwKLQkuc3RhcnR1cCA9IHNwaWRlcl9zdGFydHVwX2lycSwKLQkuc2h1dGRvd24gPSBzcGlkZXJfc2h1dGRvd25faXJxLAotCS5lbmFibGUgPSBzcGlkZXJfZW5hYmxlX2lycSwKLQkuZGlzYWJsZSA9IHNwaWRlcl9kaXNhYmxlX2lycSwKLQkuYWNrID0gc3BpZGVyX2Fja19pcnEsCi0JLmVuZCA9IHNwaWRlcl9lbmRfaXJxLAorc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgc3BpZGVyX2hvc3Rfb3BzID0geworCS5tYXRjaCA9IHNwaWRlcl9ob3N0X21hdGNoLAorCS5tYXAgPSBzcGlkZXJfaG9zdF9tYXAsCisJLnhsYXRlID0gc3BpZGVyX2hvc3RfeGxhdGUsCiB9OwogCi1pbnQgc3BpZGVyX2dldF9pcnEoaW50IG5vZGUpCitzdGF0aWMgdm9pZCBzcGlkZXJfaXJxX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXVuc2lnbmVkIGxvbmcgY3M7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gc3BpZGVyX3BpY3Nbbm9kZV07CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IGRlc2MtPmhhbmRsZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY3MsIHZpcnE7CiAKLQljcyA9IGluX2JlMzIocmVncyArIFRJUl9DUykgPj4gMjQ7Ci0KLQlpZiAoY3MgPT0gNjMpCi0JCXJldHVybiAtMTsKKwljcyA9IGluX2JlMzIocGljLT5yZWdzICsgVElSX0NTKSA+PiAyNDsKKwlpZiAoY3MgPT0gU1BJREVSX0lSUV9JTlZBTElEKQorCQl2aXJxID0gTk9fSVJROwogCWVsc2UKLQkJcmV0dXJuIGNzOworCQl2aXJxID0gaXJxX2xpbmVhcl9yZXZtYXAocGljLT5ob3N0LCBjcyk7CisJaWYgKHZpcnEgIT0gTk9fSVJRKQorCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSwgcmVncyk7CisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CiB9CiAKLS8qIGhhcmRjb2RlZCBwYXJ0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlciBmaXJtd2FyZSAqLwotCi12b2lkIHNwaWRlcl9pbml0X0lSUV9oYXJkY29kZWQodm9pZCkKKy8qIEZvciBob29raW5nIHVwIHRoZSBjYXNjYWNlIHdlIGhhdmUgYSBwcm9ibGVtLiBPdXIgZGV2aWNlLXRyZWUgaXMKKyAqIGNyYXAgYW5kIHdlIGRvbid0IGtub3cgb24gd2hpY2ggQkUgaWljIGludGVycnVwdCB3ZSBhcmUgaG9va2VkIG9uIGF0CisgKiBsZWFzdCBub3QgdGhlICJzdGFuZGFyZCIgd2F5LiBXZSBjYW4gcmVjb25zdGl0dXRlIGl0IGJhc2VkIG9uIHR3bworICogaW5mb3JtYXRpb25zIHRob3VnaDogd2hpY2ggQkUgbm9kZSB3ZSBhcmUgY29ubmVjdGVkIHRvIGFuZCB3ZXRoZXIKKyAqIHdlIGFyZSBjb25uZWN0ZWQgdG8gSU9JRjAgb3IgSU9JRjEuIFJpZ2h0IG5vdywgd2UgcmVhbGx5IG9ubHkgY2FyZQorICogYWJvdXQgdGhlIElCTSBjZWxsIGJsYWRlIGFuZCB3ZSBrbm93IHRoYXQgaXRzIGZpcm13YXJlIGdpdmVzIHVzIGFuCisgKiBpbnRlcnJ1cHQtbWFwIHByb3BlcnR5IHdoaWNoIGlzIHByZXR0eSBzdHJhbmdlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzcGlkZXJfZmluZF9jYXNjYWRlX2FuZF9ub2RlKHN0cnVjdCBzcGlkZXJfcGljICpwaWMpCiB7Ci0JaW50IG5vZGU7Ci0JbG9uZyBzcGlkZXJwaWM7Ci0JbG9uZyBwaWNzW10gPSB7IDB4MjQwMDAwMDgwMDAsIDB4MzQwMDAwMDgwMDAgfTsKLQlpbnQgbjsKKwl1bnNpZ25lZCBpbnQgdmlycTsKKwl1MzIgKmltYXAsICp0bXA7CisJaW50IGltYXBsZW4sIGludHNpemUsIHVuaXQ7CisJc3RydWN0IGRldmljZV9ub2RlICppaWM7CisJc3RydWN0IGlycV9ob3N0ICppaWNfaG9zdDsKIAotCXByX2RlYnVnKCIlcyglZCk6IFVzaW5nIGhhcmRjb2RlZCBkZWZhdWx0c1xuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7Ci0KLQlmb3IgKG5vZGUgPSAwOyBub2RlIDwgbnVtX3ByZXNlbnRfY3B1cygpLzI7IG5vZGUrKykgewotCQlzcGlkZXJwaWMgPSBwaWNzW25vZGVdOwotCQlwcmludGsoS0VSTl9ERUJVRyAiU1BJREVSIGFkZHI6ICVseFxuIiwgc3BpZGVycGljKTsKLQkJc3BpZGVyX3BpY3Nbbm9kZV0gPSBpb3JlbWFwKHNwaWRlcnBpYywgMHg4MDApOwotCQlmb3IgKG4gPSAwOyBuIDwgSUlDX05VTV9FWFQ7IG4rKykgewotCQkJaW50IGlycSA9IG4gKyBJSUNfRVhUX09GRlNFVCArIG5vZGUgKiBJSUNfTk9ERV9TVFJJREU7Ci0JCQlnZXRfaXJxX2Rlc2MoaXJxKS0+aGFuZGxlciA9ICZzcGlkZXJfcGljOwotCQl9Ci0KLSAJCS8qIGRvIG5vdCBtYXNrIGFueSBpbnRlcnJ1cHRzIGJlY2F1c2Ugb2YgbGV2ZWwgKi8KLSAJCW91dF9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX01TSywgMHgwKTsKLQotIAkJLyogZGlzYWJsZSBlZGdlIGRldGVjdGlvbiBjbGVhciAqLwotIAkJLyogb3V0X2JlMzIoc3BpZGVyX3BpY3Nbbm9kZV0gKyBUSVJfRURDLCAweDApOyAqLwotCi0gCQkvKiBlbmFibGUgaW50ZXJydXB0IHBhY2tldHMgdG8gYmUgb3V0cHV0ICovCi0gCQlvdXRfYmUzMihzcGlkZXJfcGljc1tub2RlXSArIFRJUl9QSUVOLAotCQkJaW5fYmUzMihzcGlkZXJfcGljc1tub2RlXSArIFRJUl9QSUVOKSB8IDB4MSk7Ci0KLSAJCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IGRldGVjdGlvbiBlbmFibGUgYml0LiBEbyB0aGlzIGxhc3QhICovCi0gCQlvdXRfYmUzMihzcGlkZXJfcGljc1tub2RlXSArIFRJUl9ERU4sCi0JCQlpbl9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX0RFTikgfCAweDEpOworI2lmIDAgLyogRW5hYmxlIHRoYXQgd2hlbiB3ZSBoYXZlIGEgd2F5IHRvIHJldHJlaXZlIHRoZSBub2RlIGFzIHdlbGwgKi8KKwkvKiBGaXJzdCwgd2UgY2hlY2sgd2V0aGVyIHdlIGhhdmUgYSByZWFsICJpbnRlcnJ1cHRzIiBpbiB0aGUgZGV2aWNlCisJICogdHJlZSBpbiBjYXNlIHRoZSBkZXZpY2UtdHJlZSBpcyBldmVyIGZpeGVkCisJICovCisJc3RydWN0IG9mX2lycSBvaXJxOworCWlmIChvZl9pcnFfbWFwX29uZShwaWMtPm9mX25vZGUsIDAsICZvaXJxKSA9PSAwKSB7CisJCXZpcnEgPSBpcnFfY3JlYXRlX29mX21hcHBpbmcob2lycS5jb250cm9sbGVyLCBvaXJxLnNwZWNpZmllciwKKwkJCQkJICAgICBvaXJxLnNpemUpOworCQlnb3RvIGJhaWw7CiAJfQorI2VuZGlmCisKKwkvKiBOb3cgZG8gdGhlIGhvcnJpYmxlIGhhY2tzICovCisJdG1wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShwaWMtPm9mX25vZGUsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7CisJaWYgKHRtcCA9PSBOVUxMKQorCQlyZXR1cm4gTk9fSVJROworCWludHNpemUgPSAqdG1wOworCWltYXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHBpYy0+b2Zfbm9kZSwgImludGVycnVwdC1tYXAiLCAmaW1hcGxlbik7CisJaWYgKGltYXAgPT0gTlVMTCB8fCBpbWFwbGVuIDwgKGludHNpemUgKyAxKSkKKwkJcmV0dXJuIE5PX0lSUTsKKwlpaWMgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZShpbWFwW2ludHNpemVdKTsKKwlpZiAoaWljID09IE5VTEwpCisJCXJldHVybiBOT19JUlE7CisJaW1hcCArPSBpbnRzaXplICsgMTsKKwl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGlpYywgIiNpbnRlcnJ1cHQtY2VsbHMiLCBOVUxMKTsKKwlpZiAodG1wID09IE5VTEwpCisJCXJldHVybiBOT19JUlE7CisJaW50c2l6ZSA9ICp0bXA7CisJLyogQXNzdW1lIHVuaXQgaXMgbGFzdCBlbnRyeSBvZiBpbnRlcnJ1cHQgc3BlY2lmaWVyICovCisJdW5pdCA9IGltYXBbaW50c2l6ZSAtIDFdOworCS8qIE9rLCB3ZSBoYXZlIGEgdW5pdCwgbm93IGxldCdzIHRyeSB0byBnZXQgdGhlIG5vZGUgKi8KKwl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGlpYywgImlibSxpbnRlcnJ1cHQtc2VydmVyLXJhbmdlcyIsIE5VTEwpOworCWlmICh0bXAgPT0gTlVMTCkgeworCQlvZl9ub2RlX3B1dChpaWMpOworCQlyZXR1cm4gTk9fSVJROworCX0KKwkvKiB1Z2x5IGFzIGhlbGwgYnV0IHdvcmtzIGZvciBub3cgKi8KKwlwaWMtPm5vZGVfaWQgPSAoKnRtcCkgPj4gMTsKKwlvZl9ub2RlX3B1dChpaWMpOworCisJLyogT2ssIG5vdyBsZXQncyBnZXQgY3JhY2tpbmcuIFlvdSBtYXkgYXNrIG1lIHdoeSBJIGp1c3QgZGlkbid0IG1hdGNoCisJICogdGhlIGlpYyBob3N0IGZyb20gdGhlIGlpYyBPRiBub2RlLCBidXQgdGhhdCB3YXkgSSdtIHN0aWxsIGNvbXBhdGlibGUKKwkgKiB3aXRoIHJlYWxseSByZWFsbHkgb2xkIG9sZCBmaXJtd2FyZXMgZm9yIHdoaWNoIHdlIGRvbid0IGhhdmUgYSBub2RlCisJICovCisJaWljX2hvc3QgPSBpaWNfZ2V0X2lycV9ob3N0KHBpYy0+bm9kZV9pZCk7CisJaWYgKGlpY19ob3N0ID09IE5VTEwpCisJCXJldHVybiBOT19JUlE7CisJLyogTWFudWZhY3R1cmUgYW4gSUlDIGludGVycnVwdCBudW1iZXIgb2YgY2xhc3MgMiAqLworCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoaWljX2hvc3QsIDB4MjAgfCB1bml0LCAwKTsKKwlpZiAodmlycSA9PSBOT19JUlEpCisJCXByaW50ayhLRVJOX0VSUiAic3BpZGVyX3BpYzogZmFpbGVkIHRvIG1hcCBjYXNjYWRlICEiKTsKKwlyZXR1cm4gdmlycTsKIH0KIAotdm9pZCBzcGlkZXJfaW5pdF9JUlEodm9pZCkKKworc3RhdGljIHZvaWQgX19pbml0IHNwaWRlcl9pbml0X29uZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsIGludCBjaGlwLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlsb25nIHNwaWRlcl9yZWc7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9ICZzcGlkZXJfcGljc1tjaGlwXTsKKwlpbnQgaSwgdmlycTsKKworCS8qIE1hcCByZWdpc3RlcnMgKi8KKwlwaWMtPnJlZ3MgPSBpb3JlbWFwKGFkZHIsIDB4MTAwMCk7CisJaWYgKHBpYy0+cmVncyA9PSBOVUxMKQorCQlwYW5pYygic3BpZGVyX3BpYzogY2FuJ3QgbWFwIHJlZ2lzdGVycyAhIik7CisKKwkvKiBBbGxvY2F0ZSBhIGhvc3QgKi8KKwlwaWMtPmhvc3QgPSBpcnFfYWxsb2NfaG9zdChJUlFfSE9TVF9NQVBfTElORUFSLCBTUElERVJfU1JDX0NPVU5ULAorCQkJCSAgICZzcGlkZXJfaG9zdF9vcHMsIFNQSURFUl9JUlFfSU5WQUxJRCk7CisJaWYgKHBpYy0+aG9zdCA9PSBOVUxMKQorCQlwYW5pYygic3BpZGVyX3BpYzogY2FuJ3QgYWxsb2NhdGUgaXJxIGhvc3QgISIpOworCXBpYy0+aG9zdC0+aG9zdF9kYXRhID0gcGljOworCisJLyogRmlsbCBvdXQgb3RoZXIgYml0cyAqLworCXBpYy0+b2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG9mX25vZGUpOworCisJLyogR28gdGhyb3VnaCBhbGwgc291cmNlcyBhbmQgZGlzYWJsZSB0aGVtICovCisJZm9yIChpID0gMDsgaSA8IFNQSURFUl9TUkNfQ09VTlQ7IGkrKykgeworCQl2b2lkIF9faW9tZW0gKmNmZyA9IHBpYy0+cmVncyArIFRJUl9DRkdBICsgOCAqIGk7CisJCW91dF9iZTMyKGNmZywgaW5fYmUzMihjZmcpICYgfjB4MzAwMDAwMDB1KTsKKwl9CisKKwkvKiBkbyBub3QgbWFzayBhbnkgaW50ZXJydXB0cyBiZWNhdXNlIG9mIGxldmVsICovCisJb3V0X2JlMzIocGljLT5yZWdzICsgVElSX01TSywgMHgwKTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHQgcGFja2V0cyB0byBiZSBvdXRwdXQgKi8KKwlvdXRfYmUzMihwaWMtPnJlZ3MgKyBUSVJfUElFTiwgaW5fYmUzMihwaWMtPnJlZ3MgKyBUSVJfUElFTikgfCAweDEpOworCisJLyogSG9vayB1cCB0aGUgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gdGhlIGlpYyBhbmQgbm9kZWlkICovCisJdmlycSA9IHNwaWRlcl9maW5kX2Nhc2NhZGVfYW5kX25vZGUocGljKTsKKwlpZiAodmlycSA9PSBOT19JUlEpCisJCXJldHVybjsKKwlzZXRfaXJxX2RhdGEodmlycSwgcGljKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcih2aXJxLCBzcGlkZXJfaXJxX2Nhc2NhZGUpOworCisJcHJpbnRrKEtFUk5fSU5GTyAic3BpZGVyX3BpYzogbm9kZSAlZCwgYWRkcjogMHglbHggJXNcbiIsCisJICAgICAgIHBpYy0+bm9kZV9pZCwgYWRkciwgb2Zfbm9kZS0+ZnVsbF9uYW1lKTsKKworCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IGRldGVjdGlvbiBlbmFibGUgYml0LiBEbyB0aGlzIGxhc3QhICovCisJb3V0X2JlMzIocGljLT5yZWdzICsgVElSX0RFTiwgaW5fYmUzMihwaWMtPnJlZ3MgKyBUSVJfREVOKSB8IDB4MSk7Cit9CisKK3ZvaWQgX19pbml0IHNwaWRlcl9pbml0X0lSUSh2b2lkKQoreworCXN0cnVjdCByZXNvdXJjZSByOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47Ci0JY2hhciAqY29tcGF0aWJsZTsKLQlpbnQgbiwgbm9kZSA9IDA7CisJaW50IGNoaXAgPSAwOwogCi0JZm9yIChkbiA9IE5VTEw7IChkbiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKGRuLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKSk7KSB7Ci0JCWNvbXBhdGlibGUgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShkbiwgImNvbXBhdGlibGUiLCBOVUxMKTsKLQotCQlpZiAoIWNvbXBhdGlibGUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc3Ryc3RyKGNvbXBhdGlibGUsICJDQkVBLHBsYXRmb3JtLXNwaWRlci1waWMiKSkKLQkJCXNwaWRlcl9yZWcgPSAqKGxvbmcgKilnZXRfcHJvcGVydHkoZG4sInJlZyIsIE5VTEwpOwotCQllbHNlIGlmIChzdHJzdHIoY29tcGF0aWJsZSwgInN0aSxwbGF0Zm9ybS1zcGlkZXItcGljIikpIHsKLQkJCXNwaWRlcl9pbml0X0lSUV9oYXJkY29kZWQoKTsKLQkJCXJldHVybjsKKwkvKiBYWFggbm9kZSBudW1iZXJzIGFyZSB0b3RhbGx5IGJvZ3VzLiBXZSBfaG9wZV8gd2UgZ2V0IHRoZSBkZXZpY2UKKwkgKiBub2RlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaGVyZSBidXQgdGhhdCdzIGRlZmluaXRlbHkgbm90IGd1YXJhbnRlZWQsCisJICogd2UgbmVlZCB0byBnZXQgdGhlIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUgaW5zdGVhZC4KKwkgKiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gcHJvcGVyIHByb3BlcnR5IGZvciBpdCAoYnV0IG91ciB3aG9sZQorCSAqIGRldmljZS10cmVlIGlzIGJvZ3VzIGFueXdheSkgc28gYWxsIHdlIGNhbiBkbyBpcyBwcmF5IG9yIG1heWJlIHRlc3QKKwkgKiB0aGUgYWRkcmVzcyBhbmQgZGVkdWNlIHRoZSBub2RlLWlkCisJICovCisJZm9yIChkbiA9IE5VTEw7CisJICAgICAoZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShkbiwgImludGVycnVwdC1jb250cm9sbGVyIikpOykgeworCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJDQkVBLHBsYXRmb3JtLXNwaWRlci1waWMiKSkgeworCQkJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZG4sIDAsICZyKSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNwaWRlci1waWM6IEZhaWxlZFxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJzdGkscGxhdGZvcm0tc3BpZGVyLXBpYyIpCisJCQkgICAmJiAoY2hpcCA8IDIpKSB7CisJCQlzdGF0aWMgbG9uZyBoYXJkX2NvZGVkX3BpY3NbXSA9CisJCQkJeyAweDI0MDAwMDA4MDAwLCAweDM0MDAwMDA4MDAwIH07CisJCQlyLnN0YXJ0ID0gaGFyZF9jb2RlZF9waWNzW2NoaXBdOwogCQl9IGVsc2UKIAkJCWNvbnRpbnVlOwotCi0JCWlmICghc3BpZGVyX3JlZykKLQkJCXByaW50aygiaW50ZXJydXB0IGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSByZWcgcHJvcGVydHkgIVxuIik7Ci0KLQkJbiA9IHByb21fbl9hZGRyX2NlbGxzKGRuKTsKLQotCQlpZiAoIG4gIT0gMikKLQkJCXByaW50aygicmVnIHByb3BlcnR5IHdpdGggaW52YWxpZCBudW1iZXIgb2YgZWxlbWVudHMgXG4iKTsKLQotCQlzcGlkZXJfcGljc1tub2RlXSA9IGlvcmVtYXAoc3BpZGVyX3JlZywgMHg4MDApOwotCi0JCXByaW50aygiU1BJREVSIGFkZHI6ICVseCB3aXRoICVpIGFkZHJfY2VsbHMgbWFwcGVkIHRvICVwXG4iLAotCQkgICAgICAgc3BpZGVyX3JlZywgbiwgc3BpZGVyX3BpY3Nbbm9kZV0pOwotCi0JCWZvciAobiA9IDA7IG4gPCBJSUNfTlVNX0VYVDsgbisrKSB7Ci0JCQlpbnQgaXJxID0gbiArIElJQ19FWFRfT0ZGU0VUICsgbm9kZSAqIElJQ19OT0RFX1NUUklERTsKLQkJCWdldF9pcnFfZGVzYyhpcnEpLT5oYW5kbGVyID0gJnNwaWRlcl9waWM7Ci0JCX0KLQotCQkvKiBkbyBub3QgbWFzayBhbnkgaW50ZXJydXB0cyBiZWNhdXNlIG9mIGxldmVsICovCi0JCW91dF9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX01TSywgMHgwKTsKLQotCQkvKiBkaXNhYmxlIGVkZ2UgZGV0ZWN0aW9uIGNsZWFyICovCi0JCS8qIG91dF9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX0VEQywgMHgwKTsgKi8KLQotCQkvKiBlbmFibGUgaW50ZXJydXB0IHBhY2tldHMgdG8gYmUgb3V0cHV0ICovCi0JCW91dF9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX1BJRU4sCi0JCQlpbl9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX1BJRU4pIHwgMHgxKTsKLQotCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCBkZXRlY3Rpb24gZW5hYmxlIGJpdC4gRG8gdGhpcyBsYXN0ISAqLwotCQlvdXRfYmUzMihzcGlkZXJfcGljc1tub2RlXSArIFRJUl9ERU4sCi0JCQlpbl9iZTMyKHNwaWRlcl9waWNzW25vZGVdICsgVElSX0RFTikgfCAweDEpOwotCi0JCW5vZGUrKzsKKwkJc3BpZGVyX2luaXRfb25lKGRuLCBjaGlwKyssIHIuc3RhcnQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKaW5kZXggZGI4MmY1MC4uNWQyMzEzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKQEAgLTE2OCwxMiArMTY4LDEyIEBACiAKIAlzdGF0ICY9IG1hc2s7CiAKLQlpZiAoc3RhdCAmIDEpIC8qIGludmFsaWQgTUZDIERNQSAqLwotCQlfX3NwdV90cmFwX2ludmFsaWRfZG1hKHNwdSk7Ci0KLQlpZiAoc3RhdCAmIDIpIC8qIGludmFsaWQgRE1BIGFsaWdubWVudCAqLworCWlmIChzdGF0ICYgMSkgLyogaW52YWxpZCBETUEgYWxpZ25tZW50ICovCiAJCV9fc3B1X3RyYXBfZG1hX2FsaWduKHNwdSk7CiAKKwlpZiAoc3RhdCAmIDIpIC8qIGludmFsaWQgTUZDIERNQSAqLworCQlfX3NwdV90cmFwX2ludmFsaWRfZG1hKHNwdSk7CisKIAlpZiAoc3RhdCAmIDQpIC8qIGVycm9yIG9uIFNQVSAqLwogCQlfX3NwdV90cmFwX2Vycm9yKHNwdSk7CiAKQEAgLTI2NCw1MSArMjY0LDU3IEBACiAJcmV0dXJuIHN0YXQgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQogCi1zdGF0aWMgaW50Ci1zcHVfcmVxdWVzdF9pcnFzKHN0cnVjdCBzcHUgKnNwdSkKK3N0YXRpYyBpbnQgc3B1X3JlcXVlc3RfaXJxcyhzdHJ1Y3Qgc3B1ICpzcHUpCiB7Ci0JaW50IHJldDsKLQlpbnQgaXJxX2Jhc2U7CisJaW50IHJldCA9IDA7CiAKLQlpcnFfYmFzZSA9IElJQ19OT0RFX1NUUklERSAqIHNwdS0+bm9kZSArIElJQ19TUEVfT0ZGU0VUOworCWlmIChzcHUtPmlycXNbMF0gIT0gTk9fSVJRKSB7CisJCXNucHJpbnRmKHNwdS0+aXJxX2MwLCBzaXplb2YgKHNwdS0+aXJxX2MwKSwgInNwZSUwMmQuMCIsCisJCQkgc3B1LT5udW1iZXIpOworCQlyZXQgPSByZXF1ZXN0X2lycShzcHUtPmlycXNbMF0sIHNwdV9pcnFfY2xhc3NfMCwKKwkJCQkgIElSUUZfRElTQUJMRUQsCisJCQkJICBzcHUtPmlycV9jMCwgc3B1KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gYmFpbDA7CisJfQorCWlmIChzcHUtPmlycXNbMV0gIT0gTk9fSVJRKSB7CisJCXNucHJpbnRmKHNwdS0+aXJxX2MxLCBzaXplb2YgKHNwdS0+aXJxX2MxKSwgInNwZSUwMmQuMSIsCisJCQkgc3B1LT5udW1iZXIpOworCQlyZXQgPSByZXF1ZXN0X2lycShzcHUtPmlycXNbMV0sIHNwdV9pcnFfY2xhc3NfMSwKKwkJCQkgIElSUUZfRElTQUJMRUQsCisJCQkJICBzcHUtPmlycV9jMSwgc3B1KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gYmFpbDE7CisJfQorCWlmIChzcHUtPmlycXNbMl0gIT0gTk9fSVJRKSB7CisJCXNucHJpbnRmKHNwdS0+aXJxX2MyLCBzaXplb2YgKHNwdS0+aXJxX2MyKSwgInNwZSUwMmQuMiIsCisJCQkgc3B1LT5udW1iZXIpOworCQlyZXQgPSByZXF1ZXN0X2lycShzcHUtPmlycXNbMl0sIHNwdV9pcnFfY2xhc3NfMiwKKwkJCQkgIElSUUZfRElTQUJMRUQsCisJCQkJICBzcHUtPmlycV9jMiwgc3B1KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gYmFpbDI7CisJfQorCXJldHVybiAwOwogCi0Jc25wcmludGYoc3B1LT5pcnFfYzAsIHNpemVvZiAoc3B1LT5pcnFfYzApLCAic3BlJTAyZC4wIiwgc3B1LT5udW1iZXIpOwotCXJldCA9IHJlcXVlc3RfaXJxKGlycV9iYXNlICsgc3B1LT5pc3JjLAotCQkgc3B1X2lycV9jbGFzc18wLCBTQV9JTlRFUlJVUFQsIHNwdS0+aXJxX2MwLCBzcHUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0Jc25wcmludGYoc3B1LT5pcnFfYzEsIHNpemVvZiAoc3B1LT5pcnFfYzEpLCAic3BlJTAyZC4xIiwgc3B1LT5udW1iZXIpOwotCXJldCA9IHJlcXVlc3RfaXJxKGlycV9iYXNlICsgSUlDX0NMQVNTX1NUUklERSArIHNwdS0+aXNyYywKLQkJIHNwdV9pcnFfY2xhc3NfMSwgU0FfSU5URVJSVVBULCBzcHUtPmlycV9jMSwgc3B1KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDE7Ci0KLQlzbnByaW50ZihzcHUtPmlycV9jMiwgc2l6ZW9mIChzcHUtPmlycV9jMiksICJzcGUlMDJkLjIiLCBzcHUtPm51bWJlcik7Ci0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxX2Jhc2UgKyAyKklJQ19DTEFTU19TVFJJREUgKyBzcHUtPmlzcmMsCi0JCSBzcHVfaXJxX2NsYXNzXzIsIFNBX0lOVEVSUlVQVCwgc3B1LT5pcnFfYzIsIHNwdSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQyOwotCWdvdG8gb3V0OwotCi1vdXQyOgotCWZyZWVfaXJxKGlycV9iYXNlICsgSUlDX0NMQVNTX1NUUklERSArIHNwdS0+aXNyYywgc3B1KTsKLW91dDE6Ci0JZnJlZV9pcnEoaXJxX2Jhc2UgKyBzcHUtPmlzcmMsIHNwdSk7Ci1vdXQ6CitiYWlsMjoKKwlpZiAoc3B1LT5pcnFzWzFdICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoc3B1LT5pcnFzWzFdLCBzcHUpOworYmFpbDE6CisJaWYgKHNwdS0+aXJxc1swXSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKHNwdS0+aXJxc1swXSwgc3B1KTsKK2JhaWwwOgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1zcHVfZnJlZV9pcnFzKHN0cnVjdCBzcHUgKnNwdSkKK3N0YXRpYyB2b2lkIHNwdV9mcmVlX2lycXMoc3RydWN0IHNwdSAqc3B1KQogewotCWludCBpcnFfYmFzZTsKLQotCWlycV9iYXNlID0gSUlDX05PREVfU1RSSURFICogc3B1LT5ub2RlICsgSUlDX1NQRV9PRkZTRVQ7Ci0KLQlmcmVlX2lycShpcnFfYmFzZSArIHNwdS0+aXNyYywgc3B1KTsKLQlmcmVlX2lycShpcnFfYmFzZSArIElJQ19DTEFTU19TVFJJREUgKyBzcHUtPmlzcmMsIHNwdSk7Ci0JZnJlZV9pcnEoaXJxX2Jhc2UgKyAyKklJQ19DTEFTU19TVFJJREUgKyBzcHUtPmlzcmMsIHNwdSk7CisJaWYgKHNwdS0+aXJxc1swXSAhPSBOT19JUlEpCisJCWZyZWVfaXJxKHNwdS0+aXJxc1swXSwgc3B1KTsKKwlpZiAoc3B1LT5pcnFzWzFdICE9IE5PX0lSUSkKKwkJZnJlZV9pcnEoc3B1LT5pcnFzWzFdLCBzcHUpOworCWlmIChzcHUtPmlycXNbMl0gIT0gTk9fSVJRKQorCQlmcmVlX2lycShzcHUtPmlycXNbMl0sIHNwdSk7CiB9CiAKIHN0YXRpYyBMSVNUX0hFQUQoc3B1X2xpc3QpOwpAQCAtNTU5LDE3ICs1NjUsMzggQEAKIAlpb3VubWFwKCh1OCBfX2lvbWVtICopc3B1LT5sb2NhbF9zdG9yZSk7CiB9CiAKKy8qIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgYWJzdHJhY3RlZCBmb3IgSFYgcGxhdGZvcm1zICovCitzdGF0aWMgaW50IF9faW5pdCBzcHVfbWFwX2ludGVycnVwdHMoc3RydWN0IHNwdSAqc3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKKwl1bnNpZ25lZCBpbnQgaXNyYzsKKwl1MzIgKnRtcDsKKworCWhvc3QgPSBpaWNfZ2V0X2lycV9ob3N0KHNwdS0+bm9kZSk7CisJaWYgKGhvc3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBHZXQgdGhlIGludGVycnVwdCBzb3VyY2UgZnJvbSB0aGUgZGV2aWNlLXRyZWUgKi8KKwl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiaXNyYyIsIE5VTEwpOworCWlmICghdG1wKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlzcHUtPmlzcmMgPSBpc3JjID0gdG1wWzBdOworCisJLyogTm93IG1hcCBpbnRlcnJ1cHRzIG9mIGFsbCAzIGNsYXNzZXMgKi8KKwlzcHUtPmlycXNbMF0gPSBpcnFfY3JlYXRlX21hcHBpbmcoaG9zdCwgMHgwMCB8IGlzcmMsIDApOworCXNwdS0+aXJxc1sxXSA9IGlycV9jcmVhdGVfbWFwcGluZyhob3N0LCAweDEwIHwgaXNyYywgMCk7CisJc3B1LT5pcnFzWzJdID0gaXJxX2NyZWF0ZV9tYXBwaW5nKGhvc3QsIDB4MjAgfCBpc3JjLCAwKTsKKworCS8qIFJpZ2h0IG5vdywgd2Ugb25seSBmYWlsIGlmIGNsYXNzIDIgZmFpbGVkICovCisJcmV0dXJuIHNwdS0+aXJxc1syXSA9PSBOT19JUlEgPyAtRUlOVkFMIDogMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgc3B1X21hcF9kZXZpY2Uoc3RydWN0IHNwdSAqc3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7CiAJY2hhciAqcHJvcDsKIAlpbnQgcmV0OwogCiAJcmV0ID0gLUVOT0RFVjsKLQlwcm9wID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJpc3JjIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKQotCQlnb3RvIG91dDsKLQlzcHUtPmlzcmMgPSAqKHVuc2lnbmVkIGludCAqKXByb3A7Ci0KIAlzcHUtPm5hbWUgPSBnZXRfcHJvcGVydHkobm9kZSwgIm5hbWUiLCBOVUxMKTsKIAlpZiAoIXNwdS0+bmFtZSkKIAkJZ290byBvdXQ7CkBAIC02MzYsNyArNjYzLDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzeXNkZXZfY3JlYXRlX2ZpbGUoJnNwdS0+c3lzZGV2LCAmYXR0cl9pc3JjKTsKKwlpZiAoc3B1LT5pc3JjICE9IDApCisJCXN5c2Rldl9jcmVhdGVfZmlsZSgmc3B1LT5zeXNkZXYsICZhdHRyX2lzcmMpOwogCXN5c2ZzX2FkZF9kZXZpY2VfdG9fbm9kZSgmc3B1LT5zeXNkZXYsIHNwdS0+bmlkKTsKIAogCXJldHVybiAwOwpAQCAtNjY4LDYgKzY5Niw5IEBACiAJc3B1LT5uaWQgPSBvZl9ub2RlX3RvX25pZChzcGUpOwogCWlmIChzcHUtPm5pZCA9PSAtMSkKIAkJc3B1LT5uaWQgPSAwOworCXJldCA9IHNwdV9tYXBfaW50ZXJydXB0cyhzcHUsIHNwZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5tYXA7CiAJc3Bpbl9sb2NrX2luaXQoJnNwdS0+cmVnaXN0ZXJfbG9jayk7CiAJc3B1X21mY19zZHJfc2V0KHNwdSwgbWZzcHIoU1BSTl9TRFIxKSk7CiAJc3B1X21mY19zcjFfc2V0KHNwdSwgMHgzMyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvYmFja2luZ19vcHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9iYWNraW5nX29wcy5jCmluZGV4IGYxZDM1ZGQuLjJkMjJjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9iYWNraW5nX29wcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9iYWNraW5nX29wcy5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggNzg1NGEzOC4uNThlNzk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KQotCQkJCSAgICAgfCBfUEFHRV9OT19DQUNIRSk7CisJCQkJICAgICB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CiAKIAl2bWEtPnZtX29wcyA9ICZzcHVmc19jbnRsX21tYXBfdm1vcHM7CiAJcmV0dXJuIDA7CkBAIC02NzUsNyArNjc1LDcgQEAKIAogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KQotCQkJCSAgICAgfCBfUEFHRV9OT19DQUNIRSk7CisJCQkJICAgICB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CiAKIAl2bWEtPnZtX29wcyA9ICZzcHVmc19zaWduYWwxX21tYXBfdm1vcHM7CiAJcmV0dXJuIDA7CkBAIC03NjIsNyArNzYyLDcgQEAKIAkvKiBGSVhNRTogKi8KIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwogCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkKLQkJCQkgICAgIHwgX1BBR0VfTk9fQ0FDSEUpOworCQkJCSAgICAgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpOwogCiAJdm1hLT52bV9vcHMgPSAmc3B1ZnNfc2lnbmFsMl9tbWFwX3Ztb3BzOwogCXJldHVybiAwOwpAQCAtODUwLDcgKzg1MCw3IEBACiAKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwogCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkKLQkJCQkgICAgIHwgX1BBR0VfTk9fQ0FDSEUpOworCQkJCSAgICAgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpOwogCiAJdm1hLT52bV9vcHMgPSAmc3B1ZnNfbXNzX21tYXBfdm1vcHM7CiAJcmV0dXJuIDA7CkBAIC04OTksNyArODk5LDcgQEAKIAogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KQotCQkJCSAgICAgfCBfUEFHRV9OT19DQUNIRSk7CisJCQkJICAgICB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CiAKIAl2bWEtPnZtX29wcyA9ICZzcHVmc19tZmNfbW1hcF92bW9wczsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9od19vcHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9od19vcHMuYwppbmRleCBlZGUyY2FjLi5jODY3MGY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaHdfb3BzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2h3X29wcy5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCAzZGNjNWQ4Li4xMzUwMjk0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtMjYsNyArMjYsNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYwppbmRleCBhNjU2ZDgxLi45ZDlkODJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N3aXRjaC5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDY0LDcgKzQ2Myw4IEBACiAJICogICAgIFBvbGwgTUZDX0NOVExbUHNdIHVudGlsIHZhbHVlICcxMScgaXMgcmVhZAogCSAqICAgICAocHVyZ2UgY29tcGxldGUpLgogCSAqLwotCVBPTExfV0hJTEVfRkFMU0UoaW5fYmU2NCgmcHJpdjItPm1mY19jb250cm9sX1JXKSAmCisJUE9MTF9XSElMRV9GQUxTRSgoaW5fYmU2NCgmcHJpdjItPm1mY19jb250cm9sX1JXKSAmCisJCQkgTUZDX0NOVExfUFVSR0VfRE1BX1NUQVRVU19NQVNLKSA9PQogCQkJIE1GQ19DTlRMX1BVUkdFX0RNQV9DT01QTEVURSk7CiB9CiAKQEAgLTEwMjgsNyArMTAyOCw4IEBACiAJICogUmVzdG9yZSwgU3RlcCA0Ny4KIAkgKiAgICAgUG9sbCBNRkNfQ05UTFtTc10gdW50aWwgMTEgaXMgcmV0dXJuZWQuCiAJICovCi0JUE9MTF9XSElMRV9GQUxTRShpbl9iZTY0KCZwcml2Mi0+bWZjX2NvbnRyb2xfUlcpICYKKwlQT0xMX1dISUxFX0ZBTFNFKChpbl9iZTY0KCZwcml2Mi0+bWZjX2NvbnRyb2xfUlcpICYKKwkJCSBNRkNfQ05UTF9TVVNQRU5EX0RNQV9TVEFUVVNfTUFTSykgPT0KIAkJCSBNRkNfQ05UTF9TVVNQRU5EX0NPTVBMRVRFKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCmluZGV4IGFjMjI0ODcuLjY4MDJjZGMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCkBAIC0yLDcgKzIsNiBAQAogICogQ0hSUCBwY2kgcm91dGluZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xOSw3ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9vcGVuX3BpYy5oPgogI2luY2x1ZGUgPGFzbS9ncmFja2xlLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KIApAQCAtMTQzLDcgKzE0MSw3IEBACiAJaWYgKG5wID09IE5VTEwgfHwgb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKQogCQlyZXR1cm4gMDsKIAlIeWRyYSA9IGlvcmVtYXAoci5zdGFydCwgci5lbmQtci5zdGFydCk7Ci0JcHJpbnRrKCJIeWRyYSBNYWMgSS9PIGF0ICVseFxuIiwgci5zdGFydCk7CisJcHJpbnRrKCJIeWRyYSBNYWMgSS9PIGF0ICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpci5zdGFydCk7CiAJcHJpbnRrKCJIeWRyYSBGZWF0dXJlX0NvbnRyb2wgd2FzICV4IiwKIAkgICAgICAgaW5fbGUzMigmSHlkcmEtPkZlYXR1cmVfQ29udHJvbCkpOwogCW91dF9sZTMyKCZIeWRyYS0+RmVhdHVyZV9Db250cm9sLCAoSFlEUkFfRkNfU0NDX0NFTExfRU4gfApAQCAtMTYyLDE1ICsxNjAsOSBAQAogY2hycF9wY2liaW9zX2ZpeHVwKHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKIAotCS8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBPcGVuUElDICovCi0JZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKLQkJbnAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQkJaWYgKChucCAhPSAwKSAmJiAobnAtPm5faW50cnMgPiAwKSAmJiAobnAtPmludHJzWzBdLmxpbmUgIT0gMCkpCi0JCQlkZXYtPmlycSA9IG5wLT5pbnRyc1swXS5saW5lOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGRldi0+aXJxKTsKLQl9CisJZm9yX2VhY2hfcGNpX2RldihkZXYpCisJCXBjaV9yZWFkX2lycV9saW5lKGRldik7CiB9CiAKICNkZWZpbmUgUFJHX0NMX1JFU0VUX1ZBTElEIDB4MDAwMTAwMDAKQEAgLTI2Nyw3ICsyNTksNyBAQAogCQkJICAgICAgIGJ1c19yYW5nZVswXSwgYnVzX3JhbmdlWzFdKTsKIAkJcHJpbnRrKCIgY29udHJvbGxlZCBieSAlcyIsIGRldi0+dHlwZSk7CiAJCWlmICghaXNfbG9uZ3RyYWlsKQotCQkJcHJpbnRrKCIgYXQgJWx4Iiwgci5zdGFydCk7CisJCQlwcmludGsoIiBhdCAlbGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyLnN0YXJ0KTsKIAkJcHJpbnRrKCJcbiIpOwogCiAJCWhvc2UgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKaW5kZXggMThkODlmMy4uNTM4ZTMzNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKQEAgLTgsNyArOCw2IEBACiAgKiBib290dXAgc2V0dXAgc3R1ZmYuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNSw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvYWRiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTYwLDcgKzU5LDcgQEAKIGludCBfY2hycF90eXBlOwogRVhQT1JUX1NZTUJPTChfY2hycF90eXBlKTsKIAotc3RydWN0IG1waWMgKmNocnBfbXBpYzsKK3N0YXRpYyBzdHJ1Y3QgbXBpYyAqY2hycF9tcGljOwogCiAvKiBVc2VkIGZvciBkb2luZyBDSFJQIGV2ZW50LXNjYW5zICovCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGltZXJfbGlzdCwgaGVhcnRiZWF0X3RpbWVyKTsKQEAgLTMxNiwyNCArMzE1LDMyIEBACiAJCSAgamlmZmllcyArIGV2ZW50X3NjYW5faW50ZXJ2YWwpOwogfQogCitzdGF0aWMgdm9pZCBjaHJwXzgyNTlfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBpODI1OV9pcnEocmVncyk7CisJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxLCByZWdzKTsKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKK30KKwogLyoKICAqIEZpbmRzIHRoZSBvcGVuLXBpYyBub2RlIGFuZCBzZXRzIHVwIHRoZSBtcGljIGRyaXZlci4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGNocnBfZmluZF9vcGVucGljKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKnJvb3Q7Ci0JaW50IGxlbiwgaSwgaiwgaXJxX2NvdW50OworCWludCBsZW4sIGksIGo7CiAJaW50IGlzdV9zaXplLCBpZHVfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgKmlyYW5nZXMsICpvcHByb3AgPSBOVUxMOwogCWludCBvcGxlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBvcGFkZHI7CiAJaW50IG5hID0gMTsKLQl1bnNpZ25lZCBjaGFyIGluaXRfc2Vuc2VzW05SX0lSUVMgLSBOVU1fODI1OV9JTlRFUlJVUFRTXTsKIAotCW5wID0gZmluZF90eXBlX2RldmljZXMoIm9wZW4tcGljIik7CisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAib3Blbi1waWMiKTsKIAlpZiAobnAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXJvb3QgPSBmaW5kX3BhdGhfZGV2aWNlKCIvIik7CisJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CiAJaWYgKHJvb3QpIHsKIAkJb3Bwcm9wID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkKIAkJCShyb290LCAicGxhdGZvcm0tb3Blbi1waWMiLCAmb3BsZW4pOwpAQCAtMzQ0LDE5ICszNTEsMTUgQEAKIAkJb3BsZW4gLz0gbmEgKiBzaXplb2YodW5zaWduZWQgaW50KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgcmVzb3VyY2UgcjsKLQkJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKSkKLQkJCXJldHVybjsKKwkJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKSkgeworCQkJZ290byBiYWlsOworCQl9CiAJCW9wYWRkciA9IHIuc3RhcnQ7CiAJCW9wbGVuID0gMDsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJPcGVuUElDIGF0ICVseFxuIiwgb3BhZGRyKTsKIAotCWlycV9jb3VudCA9IE5SX0lSUVMgLSBOVU1fSVNBX0lOVEVSUlVQVFMgLSA0OyAvKiBsZWF2ZSByb29tIGZvciBJUElzICovCi0JcHJvbV9nZXRfaXJxX3NlbnNlcyhpbml0X3NlbnNlcywgTlVNX0lTQV9JTlRFUlJVUFRTLCBOUl9JUlFTIC0gNCk7Ci0JLyogaTgyNTkgY2FzY2FkZSBpcyBhbHdheXMgcG9zaXRpdmUgbGV2ZWwgKi8KLQlpbml0X3NlbnNlc1swXSA9IElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRTsKLQogCWlyYW5nZXMgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShucCwgImludGVycnVwdC1yYW5nZXMiLCAmbGVuKTsKIAlpZiAoaXJhbmdlcyA9PSBOVUxMKQogCQlsZW4gPSAwOwkvKiBub24tZGlzdHJpYnV0ZWQgbXBpYyAqLwpAQCAtMzgzLDE1ICszODYsMTIgQEAKIAlpZiAobGVuID4gMSkKIAkJaXN1X3NpemUgPSBpcmFuZ2VzWzNdOwogCi0JY2hycF9tcGljID0gbXBpY19hbGxvYyhvcGFkZHIsIE1QSUNfUFJJTUFSWSwKLQkJCSAgICAgICBpc3Vfc2l6ZSwgTlVNX0lTQV9JTlRFUlJVUFRTLCBpcnFfY291bnQsCi0JCQkgICAgICAgTlJfSVJRUyAtIDQsIGluaXRfc2Vuc2VzLCBpcnFfY291bnQsCi0JCQkgICAgICAgIiBNUElDICAgICIpOworCWNocnBfbXBpYyA9IG1waWNfYWxsb2MobnAsIG9wYWRkciwgTVBJQ19QUklNQVJZLAorCQkJICAgICAgIGlzdV9zaXplLCAwLCAiIE1QSUMgICAgIik7CiAJaWYgKGNocnBfbXBpYyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIE1QSUMgc3RydWN0dXJlXG4iKTsKLQkJcmV0dXJuOworCQlnb3RvIGJhaWw7CiAJfQotCiAJaiA9IG5hIC0gMTsKIAlmb3IgKGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKIAkJaXJhbmdlcyArPSAyOwpAQCAtNDAzLDcgKzQwMywxMCBAQAogCX0KIAogCW1waWNfaW5pdChjaHJwX21waWMpOwotCW1waWNfc2V0dXBfY2FzY2FkZShOVU1fSVNBX0lOVEVSUlVQVFMsIGk4MjU5X2lycV9jYXNjYWRlLCBOVUxMKTsKKwlwcGNfbWQuZ2V0X2lycSA9IG1waWNfZ2V0X2lycTsKKyBiYWlsOgorCW9mX25vZGVfcHV0KHJvb3QpOworCW9mX25vZGVfcHV0KG5wKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoWE1PTikKQEAgLTQxNCwxNCArNDE3LDM0IEBACiB9OwogI2VuZGlmCiAKLXZvaWQgX19pbml0IGNocnBfaW5pdF9JUlEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBjaHJwX2ZpbmRfODI1OSh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKnBpYyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBjaHJwX2ludF9hY2sgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoWE1PTikKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmtiZDsKLSNlbmRpZgorCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycTsKIAorCS8qIExvb2sgZm9yIGNhc2NhZGUgKi8KKwlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCisJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkJCXBpYyA9IG5wOworCQkJYnJlYWs7CisJCX0KKwkvKiBPaywgODI1OSB3YXNuJ3QgZm91bmQuIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlCisJICogd2UgaGF2ZSBhIHBlZ2Fzb3MgdGhhdCBjbGFpbXMgdG8gYmUgY2hycCBidXQgZG9lc24ndCBoYXZlCisJICogYSBwcm9wZXIgaW50ZXJydXB0IHRyZWUKKwkgKi8KKwlpZiAocGljID09IE5VTEwgJiYgY2hycF9tcGljICE9IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpODI1OTogTm90IGZvdW5kIGluIGRldmljZS10cmVlIgorCQkgICAgICAgIiBhc3N1bWluZyBubyBsZWdhY3kgaW50ZXJydXB0c1xuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBMb29rIGZvciBpbnRhY2suIEluIGEgcGVyZmVjdCB3b3JsZCwgd2Ugd291bGQgbG9vayBmb3IgaXQgb24KKwkgKiB0aGUgSVNBIGJ1cyB0aGF0IGhvbGRzIHRoZSA4MjU5IGJ1dCBoZWguLi4gV29ya3MgdGhhdCB3YXkuIElmCisJICogd2UgZXZlciBzZWUgYSBwcm9ibGVtLCB3ZSBjYW4gdHJ5IHRvIHJlLXVzZSB0aGUgcFNlcmllcyBjb2RlIGhlcmUuCisJICogQWxzbywgUGVnYXNvcy10eXBlIHBsYXRmb3JtcyBkb24ndCBoYXZlIGEgcHJvcGVyIG5vZGUgdG8gc3RhcnQKKwkgKiBmcm9tIGFueXdheQorCSAqLwogCWZvciAobnAgPSBmaW5kX2RldmljZXMoInBjaSIpOyBucCAhPSBOVUxMOyBucCA9IG5wLT5uZXh0KSB7CiAJCXVuc2lnbmVkIGludCAqYWRkcnAgPSAodW5zaWduZWQgaW50ICopCiAJCQlnZXRfcHJvcGVydHkobnAsICI4MjU5LWludGVycnVwdC1hY2tub3dsZWRnZSIsIE5VTEwpOwpAQCAtNDMyLDExICs0NTUsMjkgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChucCA9PSBOVUxMKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBmaW5kIFBDSSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgYWRkcmVzc1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5vdCBmaW5kIFBDSSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UiCisJCSAgICAgICAiIGFkZHJlc3MsIHBvbGxpbmdcbiIpOwogCisJaTgyNTlfaW5pdChwaWMsIGNocnBfaW50X2Fjayk7CisJaWYgKHBwY19tZC5nZXRfaXJxID09IE5VTEwpCisJCXBwY19tZC5nZXRfaXJxID0gaTgyNTlfaXJxOworCWlmIChjaHJwX21waWMgIT0gTlVMTCkgeworCQljYXNjYWRlX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHBpYywgMCk7CisJCWlmIChjYXNjYWRlX2lycSA9PSBOT19JUlEpCisJCQlwcmludGsoS0VSTl9FUlIgImk4MjU5OiBmYWlsZWQgdG8gbWFwIGNhc2NhZGUgaXJxXG4iKTsKKwkJZWxzZQorCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZV9pcnEsCisJCQkJCQljaHJwXzgyNTlfY2FzY2FkZSk7CisJfQorfQorCit2b2lkIF9faW5pdCBjaHJwX2luaXRfSVJRKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfVlQpICYmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEQkhJRCkgJiYgZGVmaW5lZChYTU9OKQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqa2JkOworI2VuZGlmCiAJY2hycF9maW5kX29wZW5waWMoKTsKLQotCWk4MjU5X2luaXQoY2hycF9pbnRfYWNrLCAwKTsKKwljaHJwX2ZpbmRfODI1OSgpOwogCiAJaWYgKF9jaHJwX3R5cGUgPT0gX0NIUlBfUGVnYXNvcykKIAkJcHBjX21kLmdldF9pcnEgICAgICAgID0gaTgyNTlfaXJxOwpAQCAtNTIxLDEwICs1NjIsNiBAQAogCURNQV9NT0RFX1JFQUQgPSAweDQ0OwogCURNQV9NT0RFX1dSSVRFID0gMHg0ODsKIAlpc2FfaW9fYmFzZSA9IENIUlBfSVNBX0lPX0JBU0U7CQkvKiBkZWZhdWx0IHZhbHVlICovCi0JcHBjX2RvX2Nhbm9uaWNhbGl6ZV9pcnFzID0gMTsKLQotCS8qIEFzc3VtZSB3ZSBoYXZlIGFuIDgyNTkuLi4gKi8KLQlfX2lycV9vZmZzZXRfdmFsdWUgPSBOVU1fSVNBX0lOVEVSUlVQVFM7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTUzNiw3ICs1NzMsNiBAQAogCS5pbml0CQkJPSBjaHJwX2luaXQyLAogCS5zaG93X2NwdWluZm8JCT0gY2hycF9zaG93X2NwdWluZm8sCiAJLmluaXRfSVJRCQk9IGNocnBfaW5pdF9JUlEsCi0JLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAogCS5wY2liaW9zX2ZpeHVwCQk9IGNocnBfcGNpYmlvc19maXh1cCwKIAkucmVzdGFydAkJPSBydGFzX3Jlc3RhcnQsCiAJLnBvd2VyX29mZgkJPSBydGFzX3Bvd2VyX29mZiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zbXAuYwppbmRleCBiNjE2MDUzLi4xZDIzMDdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NtcC5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KQEAgLTMwLDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3Jlc2lkdWFsLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vb3Blbl9waWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCmluZGV4IDRmZGJjOWEuLmJhMDdhOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKQEAgLTc0LDYgKzc0LDE2IEBACiAJICBTZWxlY3QgU0FORFBPSU5UIGlmIGNvbmZpZ3VyaW5nIGZvciBhIE1vdG9yb2xhIFNhbmRwb2ludCBYMwogCSAgKGFueSBmbGF2b3IpLgogCitjb25maWcgTVBDNzQ0OEhQQzIKKwlib29sICJGcmVlc2NhbGUgTVBDNzQ0OEhQQzIoVGFpZ2EpIgorCXNlbGVjdCBUU0kxMDhfQlJJREdFCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IE1QSUMKKwloZWxwCisJICBTZWxlY3QgTVBDNzQ0OEhQQzIgaWYgY29uZmlndXJpbmcgZm9yIEZyZWVzY2FsZSBNUEM3NDQ4SFBDMiAoVGFpZ2EpCisJICBwbGF0Zm9ybQorCiBjb25maWcgUkFEU1RPTkVfUFBDN0QKIAlib29sICJSYWRzdG9uZSBUZWNobm9sb2d5IFBQQzdEIGJvYXJkIgogCXNlbGVjdCBQUENfSTgyNTkKQEAgLTIyMSw2ICsyMzEsMTEgQEAKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQogCWRlZmF1bHQgeQogCitjb25maWcgVFNJMTA4X0JSSURHRQorCWJvb2wKKwlkZXBlbmRzIG9uIE1QQzc0NDhIUEMyCisJZGVmYXVsdCB5CisKIG1lbnUgIlNldCBicmlkZ2Ugb3B0aW9ucyIKIAlkZXBlbmRzIG9uIE1WNjRYNjAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0OTlmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgNnh4Lzd4eC83eHh4eCBsaW51eCBrZXJuZWwuCisjCitvYmotJChDT05GSUdfTVBDNzQ0OEhQQzIpCSs9IG1wYzc0NDhfaHBjMi5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2E0ZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYwpAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIG1wYzc0NDhfaHBjMi5jCisgKgorICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIHRoZSBGcmVlc2NhbGUgVGFpZ2EgcGxhdGZvcm0KKyAqCisgKiBBdXRob3I6IEphY29iIFBhbgorICoJIGphY29iLnBhbkBmcmVlc2NhbGUuY29tCisgKiBBdXRob3I6IFhpYW5naHVhIFhpYW8KKyAqICAgICAgIHgueGlhb0BmcmVlc2NhbGUuY29tCisgKiBNYWludGFpbmVyOiBSb3kgWmFuZyA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CisgKiAJQWRkIEZsYXQgRGV2aWNlIFRyZWUgc3VwcG9ydCBmb3QgbXBjNzQ0OGhwYzIgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS90c2kxMDguaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgIm1wYzc0NDhfaHBjMi5oIgorI2luY2x1ZGUgPGFzbS90c2kxMDhfaXJxLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKworI3VuZGVmIERFQlVHCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoZm10KTsgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfUENJCitpc2FfaW9fYmFzZSA9IE1QQzc0NDhfSFBDMl9JU0FfSU9fQkFTRTsKK2lzYV9tZW1fYmFzZSA9IE1QQzc0NDhfSFBDMl9JU0FfTUVNX0JBU0U7CitwY2lfZHJhbV9vZmZzZXQgPSBNUEM3NDQ4X0hQQzJfUENJX01FTV9PRkZTRVQ7CisjZW5kaWYKKworZXh0ZXJuIGludCB0c2kxMDhfc2V0dXBfcGNpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKK2V4dGVybiB2b2lkIF9ubWFza19hbmRfb3JfbXNyKHVuc2lnbmVkIGxvbmcgbm1hc2ssIHVuc2lnbmVkIGxvbmcgb3JfdmFsKTsKK2V4dGVybiB2b2lkIHRzaTEwOF9wY2lfaW50X2luaXQodm9pZCk7CitleHRlcm4gaW50IHRzaTEwOF9pcnFfY2FzY2FkZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqdW51c2VkKTsKKworLyoKKyAqIERlZmluZSBhbGwgb2YgdGhlIElSUSBzZW5zZXMgYW5kIHBvbGFyaXRpZXMuICBUYWtlbiBmcm9tIHRoZQorICogbXBjNzQ0OGhwYyAgbWFudWFsLgorICogTm90ZTogIExpa2VseSwgdGhpcyB0YWJsZSBhbmQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzaG91bGQgYmUKKyAqICAgICAgICBvYnRhaW5lZCBhbmQgZGVyaXZlZCBmcm9tIHRoZSBPRiBEZXZpY2UgVHJlZS4KKyAqLworCitzdGF0aWMgdV9jaGFyIG1wYzc0NDhfaHBjMl9waWNfaW5pdHNlbnNlc1tdIF9faW5pdGRhdGEgPSB7CisJLyogRXh0ZXJuYWwgb24tYm9hcmQgc291cmNlcyAqLworCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBJTlRbMF0gWElOVDAgZnJvbSBGUEdBICovCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIElOVFsxXSBYSU5UMSBmcm9tIEZQR0EgKi8KKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogSU5UWzJdIFBIWV9JTlQgZnJvbSBib3RoIEdJR0UgKi8KKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogSU5UWzNdIFJFU0VSVkVEICovCisJLyogSW50ZXJuYWwgVHNpMTA4LzEwOSBpbnRlcnJ1cHQgc291cmNlcyAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBSZXNlcnZlZCBJUlEgKi8KKwkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogUmVzZXJ2ZWQgSVJRICovCisJKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIFJlc2VydmVkIElSUSAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBSZXNlcnZlZCBJUlEgKi8KKwkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogRE1BMCAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBETUExICovCisJKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIERNQTIgKi8KKwkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogRE1BMyAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBVQVJUMCAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBVQVJUMSAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJMkMgKi8KKwkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogR1BJTyAqLworCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBHSUdFMCAqLworCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBHSUdFMSAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBSZXNlcnZlZCBJUlEgKi8KKwkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSExQICovCisJKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIFNEQyAqLworCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBQcm9jZXNzb3IgSUYgKi8KKwkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogUmVzZXJ2ZWQgSVJRICovCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIFBDSS9YIGJsb2NrICovCit9OworCitpbnQgbXBjNzQ0OF9ocGMyX2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKK3sKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pID09IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJZWxzZQorCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisvKgorICogZmluZCBwY2kgc2xvdCBieSBkZXZmbiBpbiBpbnRlcnJ1cHQgbWFwIG9mIE9GIHRyZWUKKyAqLwordTggZmluZF9zbG90X2J5X2RldmZuKHVuc2lnbmVkIGludCAqaW50ZXJydXB0X21hcCwgdW5zaWduZWQgaW50IGRldmZuKQoreworCWludCBpOworCXVuc2lnbmVkIGludCB0bXA7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKyl7CisJCXRtcCA9IGludGVycnVwdF9tYXBbaSo0KjddOworCQlpZiAoKHRtcCA+PiAxMSkgPT0gKGRldmZuID4+IDMpKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiBpOworfQorCisvKgorICogU2NhbnMgdGhlIGludGVycnVwdCBtYXAgZm9yIHBjaSBkZXZpY2UKKyAqLwordm9pZCBtcGM3NDQ4X2hwYzJfZml4dXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwl1bnNpZ25lZCBpbnQgKmludGVycnVwdDsKKwlpbnQgYnVzbnI7CisJaW50IGxlbjsKKwl1OCBzbG90OworCXU4IHBpbjsKKworCS8qIExvb2t1cCB0aGUgaG9zZSAqLworCWJ1c25yID0gZGV2LT5idXMtPm51bWJlcjsKKwlob3NlID0gcGNpX2J1c190b19ob3NlKGJ1c25yKTsKKwlpZiAoIWhvc2UpCisJCXByaW50ayhLRVJOX0VSUiAiTm8gcGNpIGhvc2UgZm91bmRcbiIpOworCisJLyogQ2hlY2sgaXQgaGFzIGFuIE9GIG5vZGUgYXNzb2NpYXRlZCAqLworCW5vZGUgPSAoc3RydWN0IGRldmljZV9ub2RlICopIGhvc2UtPmFyY2hfZGF0YTsKKwlpZiAoIW5vZGUpCisJCXByaW50ayhLRVJOX0VSUiAiTm8gcGNpIG5vZGUgZm91bmRcbiIpOworCisJaW50ZXJydXB0ID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkobm9kZSwgImludGVycnVwdC1tYXAiLCAmbGVuKTsKKwlzbG90ID0gZmluZF9zbG90X2J5X2RldmZuKGludGVycnVwdCwgZGV2LT5kZXZmbik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbik7CisJaWYgKHBpbiA9PSAwIHx8IHBpbiA+IDQpCisJCXBpbiA9IDE7CisJcGluLS07CisJZGV2LT5pcnEgID0gaW50ZXJydXB0W3Nsb3QqNCo3ICsgcGluKjcgKyA1XTsKKwlEQkcoIlRTSV9QQ0k6IGRldi0+aXJxID0gMHgleFxuIiwgZGV2LT5pcnEpOworfQorLyogdGVtcG9yYXJ5IHBjaSBpcnEgbWFwIGZpeHVwKi8KKwordm9pZCBfX2luaXQgbXBjNzQ0OF9ocGMyX3BjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwlmb3JfZWFjaF9wY2lfZGV2KGRldikgeworCQltcGM3NDQ4X2hwYzJfZml4dXBfaXJxKGRldik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgZGV2LT5pcnEpOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IG1wYzc0NDhfaHBjMl9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjcHU7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzc0NDhfaHBjMl9zZXR1cF9hcmNoKCk6c2V0X2JyaWRnZSIsIDApOworCisJY3B1ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCWlmIChjcHUgIT0gMCkgeworCQl1bnNpZ25lZCBpbnQgKmZwOworCisJCWZwID0gKGludCAqKWdldF9wcm9wZXJ0eShjcHUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwkJaWYgKGZwICE9IDApCisJCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKKwkJZWxzZQorCQkJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAgLyBIWjsKKwkJb2Zfbm9kZV9wdXQoY3B1KTsKKwl9CisJdHNpMTA4X2Nzcl92aXJfYmFzZSA9IGdldF92aXJfY3NyYmFzZSgpOworCisjaWZkZWYJQ09ORklHX1JPT1RfTkZTCisJUk9PVF9ERVYgPSBSb290X05GUzsKKyNlbHNlCisJUk9PVF9ERVYgPSBSb290X0hEQTE7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCVJPT1RfREVWID0gUm9vdF9SQU0wOworI2VuZGlmCisKKwkvKiBzZXR1cCBQQ0kgaG9zdCBicmlkZ2UgKi8KKyNpZmRlZiBDT05GSUdfUENJCisJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5wLCAicGNpIikpICE9IE5VTEw7KQorCQl0c2kxMDhfc2V0dXBfcGNpKG5wKTsKKworCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM3NDQ4X2hwYzJfZXhjbHVkZV9kZXZpY2U7CisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJ0c2kxMDg6IHJlc291cmNlcyBzZXQiLCAweDEwMCk7CisjZW5kaWYKKworCXByaW50ayhLRVJOX0lORk8gIk1QQzc0NDhIUEMyIChUQUlHQSkgUGxhdGZvcm1cbiIpOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIkpvaW50bHkgcG9ydGVkIGJ5IEZyZWVzY2FsZSBhbmQgVHVuZHJhIFNlbWljb25kdWN0b3JcbiIpOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIkVuYWJsaW5nIEwyIGNhY2hlIHRoZW4gZW5hYmxpbmcgdGhlIEhJRDAgcHJlZmV0Y2ggZW5naW5lLlxuIik7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgc2V0dXAgYW5kIHNlcnZpY2UuICBJbnRlcnJydXB0cyBvbiB0aGUgbXBjNzQ0OF9ocGMyIGNvbWUKKyAqIGZyb20gdGhlIGZvdXIgZXh0ZXJuYWwgSU5UIHBpbnMsIFBDSSBpbnRlcnJ1cHRzIGFyZSByb3V0ZWQgdmlhCisgKiBQQ0kgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzLCBpdCBnZW5lcmF0ZXMgaW50ZXJuYWwgSVJRMjMKKyAqCisgKiBJbnRlcnJ1cHQgcm91dGluZyBvbiB0aGUgVGFpZ2EgQm9hcmQ6CisgKiBUU0kxMDg6UEJfSU5UWzBdIC0+IENQVTA6SU5UIworICogVFNJMTA4OlBCX0lOVFsxXSAtPiBDUFUwOk1DUCMKKyAqIFRTSTEwODpQQl9JTlRbMl0gLT4gTi9DCisgKiBUU0kxMDg6UEJfSU5UWzNdIC0+IE4vQworICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjNzQ0OF9ocGMyX2luaXRfSVJRKHZvaWQpCit7CisJc3RydWN0IG1waWMgKm1waWM7CisJcGh5c19hZGRyX3QgbXBpY19wYWRkciA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICp0c2lfcGljOworCisJdHNpX3BpYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmICh0c2lfcGljKSB7CisJCXVuc2lnbmVkIGludCBzaXplOworCQl2b2lkICpwcm9wID0gZ2V0X3Byb3BlcnR5KHRzaV9waWMsICJyZWciLCAmc2l6ZSk7CisJCW1waWNfcGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyh0c2lfcGljLCBwcm9wKTsKKwl9CisKKwlpZiAobXBpY19wYWRkciA9PSAwKSB7CisJCXByaW50aygiJXM6IE5vIHRzaTEwOCBQSUMgZm91bmQgIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCURCRygiJXM6IHRzaTEwOHBpYyBwaHlzX2FkZHIgPSAweCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJICAgICh1MzIpIG1waWNfcGFkZHIpOworCisJbXBpYyA9IG1waWNfYWxsb2MobXBpY19wYWRkciwKKwkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfQklHX0VORElBTiB8IE1QSUNfV0FOVFNfUkVTRVQgfAorCQkJTVBJQ19TUFZfRU9JIHwgTVBJQ19NT0RfSUQoTVBJQ19JRF9UU0kxMDgpLAorCQkJMCwgLyogbnVtX3NvdXJjZXMgdXNlZCAqLworCQkJVFNJMTA4X0lSUV9CQVNFLAorCQkJMCwgLyogbnVtX3NvdXJjZXMgdXNlZCAqLworCQkJTlJfSVJRUyAtIDQgLyogWFhYWCAqLywKKwkJCW1wYzc0NDhfaHBjMl9waWNfaW5pdHNlbnNlcywKKwkJCXNpemVvZihtcGM3NDQ4X2hwYzJfcGljX2luaXRzZW5zZXMpLCAiVHNpMTA4X1BJQyIpOworCisJQlVHX09OKG1waWMgPT0gTlVMTCk7IC8qIFhYWFggKi8KKworCW1waWNfaW5pdChtcGljKTsKKwltcGljX3NldHVwX2Nhc2NhZGUoSVJRX1RTSTEwOF9QQ0ksIHRzaTEwOF9pcnFfY2FzY2FkZSwgbXBpYyk7CisJdHNpMTA4X3BjaV9pbnRfaW5pdCgpOworCisJLyogQ29uZmlndXJlIE1QSUMgb3V0cHV0cyB0byBDUFUwICovCisJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfTVBJQ19PRkZTRVQgKyAweDMwYywgMCk7Cit9CisKK3ZvaWQgbXBjNzQ0OF9ocGMyX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc2VxX3ByaW50ZihtLCAidmVuZG9yXHRcdDogRnJlZXNjYWxlIFNlbWljb25kdWN0b3JcbiIpOworCXNlcV9wcmludGYobSwgIm1hY2hpbmVcdFx0OiBNUEM3NDQ4aHBjMlxuIik7Cit9CisKK3ZvaWQgbXBjNzQ0OF9ocGMyX3Jlc3RhcnQoY2hhciAqY21kKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBTZXQgZXhjZXB0aW9uIHByZWZpeCBoaWdoIC0gdG8gdGhlIGZpcm13YXJlICovCisJX25tYXNrX2FuZF9vcl9tc3IoMCwgTVNSX0lQKTsKKworCWZvciAoOzspIDsJCS8qIFNwaW4gdW50aWwgcmVzZXQgaGFwcGVucyAqLworfQorCit2b2lkIG1wYzc0NDhfaHBjMl9wb3dlcl9vZmYodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWZvciAoOzspIDsJCS8qIE5vIHdheSB0byBzaHV0IHBvd2VyIG9mZiB3aXRoIHNvZnR3YXJlICovCit9CisKK3ZvaWQgbXBjNzQ0OF9ocGMyX2hhbHQodm9pZCkKK3sKKwltcGM3NDQ4X2hwYzJfcG93ZXJfb2ZmKCk7Cit9CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgbXBjNzQ0OF9ocGMyX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIm1wYzc0eHgiKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbXBjNzQ0OF9tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlleHRlcm4gdm9pZCB0c2kxMDhfY2xlYXJfcGNpX2NmZ19lcnJvcih2b2lkKTsKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKKworCS8qIEFyZSB3ZSBwcmVwYXJlZCB0byBoYW5kbGUgdGhpcyBmYXVsdCAqLworCWlmICgoZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5uaXApKSAhPSBOVUxMKSB7CisJCXRzaTEwOF9jbGVhcl9wY2lfY2ZnX2Vycm9yKCk7CisJCXJlZ3MtPm1zciB8PSBNU1JfUkk7CisJCXJlZ3MtPm5pcCA9IGVudHJ5LT5maXh1cDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworCit9CitkZWZpbmVfbWFjaGluZShtcGM3NDQ4X2hwYzIpeworCS5uYW1lIAkJCT0gIk1QQzc0NDggSFBDMiIsCisJLnByb2JlIAkJCT0gbXBjNzQ0OF9ocGMyX3Byb2JlLAorCS5zZXR1cF9hcmNoIAkJPSBtcGM3NDQ4X2hwYzJfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEgCQk9IG1wYzc0NDhfaHBjMl9pbml0X0lSUSwKKwkuc2hvd19jcHVpbmZvIAkJPSBtcGM3NDQ4X2hwYzJfc2hvd19jcHVpbmZvLAorCS5nZXRfaXJxIAkJPSBtcGljX2dldF9pcnEsCisJLnBjaWJpb3NfZml4dXAgCQk9IG1wYzc0NDhfaHBjMl9wY2liaW9zX2ZpeHVwLAorCS5yZXN0YXJ0IAkJPSBtcGM3NDQ4X2hwYzJfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IgCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkubWFjaGluZV9jaGVja19leGNlcHRpb249IG1wYzc0NDhfbWFjaGluZV9jaGVja19leGNlcHRpb24sCisJLnByb2dyZXNzIAkJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDNhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBtcGM3NDQ4X2hwYzIuaAorICoKKyAqIERlZmluaXRpb25zIGZvciBGcmVlc2NhbGUgTVBDNzQ0OF9IUEMyIHBsYXRmb3JtCisgKgorICogQXV0aG9yOiBKYWNvYiBQYW4KKyAqICAgICAgICAgamFjb2IucGFuQGZyZWVzY2FsZS5jb20KKyAqIE1haW50YWluZXI6IFJveSBaYW5nIDxyb3kuemFuZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIDIwMDYgKGMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BQQ19QTEFURk9STVNfTVBDNzQ0OF9IUEMyX0gKKyNkZWZpbmUgX19QUENfUExBVEZPUk1TX01QQzc0NDhfSFBDMl9ICisKKyNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgorCisvKiBCYXNlIEFkZHJlc3NlcyBmb3IgdGhlIFBDSSBidXMKKyAqLworI2RlZmluZSBNUEM3NDQ4X0hQQzJfUENJX01FTV9PRkZTRVQJKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QQzc0NDhfSFBDMl9JU0FfSU9fQkFTRQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBDNzQ0OF9IUEMyX0lTQV9NRU1fQkFTRQkoMHgwMDAwMDAwMCkKKyNlbmRpZgkJCQkvKiBfX1BQQ19QTEFURk9STVNfTVBDNzQ0OF9IUEMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKaW5kZXggZDM0NDRhYS4uZDE5NDE0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKQEAgLTI1Miw2ICsyNTIsNyBAQAogewogCWNoYXIgYnVmWzE2XSA9ICJJQk0sIjsKIAorCS8qIE4uQi4gbHBhcmNmZy5jIGtub3dzIGFib3V0IHRoZSAiSUJNLCIgcHJlZml4ZXMgLi4uICovCiAJLyogIklCTSwiICsgbWZnSWRbMjozXSArIHN5c3RlbVNlcmlhbFsxOjVdICovCiAJc3RybmUyYShidWYgKyA0LCB4SXRFeHRWcGRQYW5lbC5tZmdJRCArIDIsIDIpOwogCXN0cm5lMmEoYnVmICsgNiwgeEl0RXh0VnBkUGFuZWwuc3lzdGVtU2VyaWFsICsgMSwgNSk7CkBAIC0yNjQsNiArMjY1LDcgQEAKIAlkdF9wcm9wX3N0cihkdCwgIm1vZGVsIiwgYnVmKTsKIAogCWR0X3Byb3Bfc3RyKGR0LCAiY29tcGF0aWJsZSIsICJJQk0saVNlcmllcyIpOworCWR0X3Byb3BfdTMyKGR0LCAiaWJtLHBhcnRpdGlvbi1ubyIsIEh2THBDb25maWdfZ2V0THBJbmRleCgpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGR0X2RvX3ZkZXZpY2Uoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaHRhYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2h0YWIuYwppbmRleCAzMGJkY2YzLi5lZDQ0ZGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9odGFiLmMKQEAgLTI0MiwxMyArMjQyLDExIEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi12b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpCit2b2lkIF9faW5pdCBocHRlX2luaXRfaVNlcmllcyh2b2lkKQogewogCXBwY19tZC5ocHRlX2ludmFsaWRhdGUJPSBpU2VyaWVzX2hwdGVfaW52YWxpZGF0ZTsKIAlwcGNfbWQuaHB0ZV91cGRhdGVwcAk9IGlTZXJpZXNfaHB0ZV91cGRhdGVwcDsKIAlwcGNfbWQuaHB0ZV91cGRhdGVib2x0ZWRwcCA9IGlTZXJpZXNfaHB0ZV91cGRhdGVib2x0ZWRwcDsKIAlwcGNfbWQuaHB0ZV9pbnNlcnQJPSBpU2VyaWVzX2hwdGVfaW5zZXJ0OwogCXBwY19tZC5ocHRlX3JlbW92ZQk9IGlTZXJpZXNfaHB0ZV9yZW1vdmU7Ci0KLQlodGFiX2ZpbmlzaF9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggNjJiYmJjZi4uMjI3NWU2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtMjMsNyArMjMsNiBAQAogICogICBDcmVhdGVkLCBEZWNlbWJlciAxMywgMjAwMCBieSBXYXluZSBIb2xtCiAgKiBFbmQgQ2hhbmdlIEFjdGl2aXR5CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpAQCAtMTYzLDI3ICsxNjIsNiBAQAogCQlwcmludGsoS0VSTl9FUlIgInBjaV9ldmVudF9oYW5kbGVyOiBOVUxMIGV2ZW50IHJlY2VpdmVkXG4iKTsKIH0KIAotLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGluaXRfSVJRLiAgc2V0IGluIHBwY19tZC5pbml0X0lSUSBieSBpU2VyaWVzX3NldHVwLmMKLSAqIEl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgYnVzIHdhbGsuCi0gKi8KLXZvaWQgX19pbml0IGlTZXJpZXNfaW5pdF9JUlEodm9pZCkKLXsKLQkvKiBSZWdpc3RlciBQQ0kgZXZlbnQgaGFuZGxlciBhbmQgb3BlbiBhbiBldmVudCBwYXRoICovCi0JaW50IHJldDsKLQotCXJldCA9IEh2THBFdmVudF9yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGVfUGNpSW8sCi0JCQkmcGNpX2V2ZW50X2hhbmRsZXIpOwotCWlmIChyZXQgPT0gMCkgewotCQlyZXQgPSBIdkxwRXZlbnRfb3BlblBhdGgoSHZMcEV2ZW50X1R5cGVfUGNpSW8sIDApOwotCQlpZiAocmV0ICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgImlzZXJpZXNfaW5pdF9JUlE6IG9wZW4gZXZlbnQgcGF0aCAiCi0JCQkJCSJmYWlsZWQgd2l0aCByYyAweCV4XG4iLCByZXQpOwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9FUlIgImlzZXJpZXNfaW5pdF9JUlE6IHJlZ2lzdGVyIGhhbmRsZXIgIgotCQkJCSJmYWlsZWQgd2l0aCByYyAweCV4XG4iLCByZXQpOwotfQotCiAjZGVmaW5lIFJFQUxfSVJRX1RPX1NVQkJVUyhpcnEpCSgoKGlycSkgPj4gMTQpICYgMHhmZikKICNkZWZpbmUgUkVBTF9JUlFfVE9fQlVTKGlycSkJKCgoKGlycSkgPj4gNikgJiAweGZmKSArIDEpCiAjZGVmaW5lIFJFQUxfSVJRX1RPX0lEU0VMKGlycSkJKCgoKGlycSkgPj4gMykgJiA3KSArIDEpCkBAIC0xOTcsNyArMTc1LDcgQEAKIHsKIAl1MzIgYnVzLCBkZXZfaWQsIGZ1bmN0aW9uLCBtYXNrOwogCWNvbnN0IHUzMiBzdWJfYnVzID0gMDsKLQl1bnNpZ25lZCBpbnQgcmlycSA9IHZpcnRfaXJxX3RvX3JlYWxfbWFwW2lycV07CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKIAogCS8qIFRoZSBJUlEgaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgYnkgdGhlIGNhbGxlciAqLwogCWJ1cyA9IFJFQUxfSVJRX1RPX0JVUyhyaXJxKTsKQEAgLTIxNCw3ICsxOTIsNyBAQAogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gdmlydF9pcnFfdG9fcmVhbF9tYXBbaXJxXTsKKwl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtpcnFdLmh3aXJxOwogCiAJYnVzID0gUkVBTF9JUlFfVE9fQlVTKHJpcnEpOwogCWZ1bmN0aW9uID0gUkVBTF9JUlFfVE9fRlVOQyhyaXJxKTsKQEAgLTI0Miw5ICsyMjAsOSBAQAogCWZvcl9lYWNoX2lycSAoaXJxKSB7CiAJCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKIAotCQlpZiAoZGVzYyAmJiBkZXNjLT5oYW5kbGVyICYmIGRlc2MtPmhhbmRsZXItPnN0YXJ0dXApIHsKKwkJaWYgKGRlc2MgJiYgZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5zdGFydHVwKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJZGVzYy0+aGFuZGxlci0+c3RhcnR1cChpcnEpOworCQkJZGVzYy0+Y2hpcC0+c3RhcnR1cChpcnEpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCQl9CiAJfQpAQCAtMjU1LDcgKzIzMyw3IEBACiB7CiAJdTMyIGJ1cywgZGV2X2lkLCBmdW5jdGlvbiwgbWFzazsKIAljb25zdCB1MzIgc3ViX2J1cyA9IDA7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSB2aXJ0X2lycV90b19yZWFsX21hcFtpcnFdOworCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CiAKIAkvKiBpcnEgc2hvdWxkIGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyICovCiAJYnVzID0gUkVBTF9JUlFfVE9fQlVTKHJpcnEpOwpAQCAtMjc4LDcgKzI1Niw3IEBACiB7CiAJdTMyIGJ1cywgZGV2X2lkLCBmdW5jdGlvbiwgbWFzazsKIAljb25zdCB1MzIgc3ViX2J1cyA9IDA7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSB2aXJ0X2lycV90b19yZWFsX21hcFtpcnFdOworCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2lycV0uaHdpcnE7CiAKIAkvKiBUaGUgSVJRIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGJ5IHRoZSBjYWxsZXIgKi8KIAlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7CkBAIC0yOTIsMTkgKzI3MCwxOSBAQAogCiBzdGF0aWMgdm9pZCBpc2VyaWVzX2VuZF9JUlEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgcmlycSA9IHZpcnRfaXJxX3RvX3JlYWxfbWFwW2lycV07CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbaXJxXS5od2lycTsKIAogCUh2Q2FsbFBjaV9lb2koUkVBTF9JUlFfVE9fQlVTKHJpcnEpLCBSRUFMX0lSUV9UT19TVUJCVVMocmlycSksCiAJCShSRUFMX0lSUV9UT19JRFNFTChyaXJxKSA8PCA0KSArIFJFQUxfSVJRX1RPX0ZVTkMocmlycSkpOwogfQogCi1zdGF0aWMgaHdfaXJxX2NvbnRyb2xsZXIgaVNlcmllc19JUlFfaGFuZGxlciA9IHsKLQkudHlwZW5hbWUgPSAiaVNlcmllcyBpcnEgY29udHJvbGxlciIsCi0JLnN0YXJ0dXAgPSBpc2VyaWVzX3N0YXJ0dXBfSVJRLAotCS5zaHV0ZG93biA9IGlzZXJpZXNfc2h1dGRvd25fSVJRLAotCS5lbmFibGUgPSBpc2VyaWVzX2VuYWJsZV9JUlEsCi0JLmRpc2FibGUgPSBpc2VyaWVzX2Rpc2FibGVfSVJRLAotCS5lbmQgPSBpc2VyaWVzX2VuZF9JUlEKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXNlcmllc19waWMgPSB7CisJLnR5cGVuYW1lCT0gImlTZXJpZXMgaXJxIGNvbnRyb2xsZXIiLAorCS5zdGFydHVwCT0gaXNlcmllc19zdGFydHVwX0lSUSwKKwkuc2h1dGRvd24JPSBpc2VyaWVzX3NodXRkb3duX0lSUSwKKwkudW5tYXNrCQk9IGlzZXJpZXNfZW5hYmxlX0lSUSwKKwkubWFzawkJPSBpc2VyaWVzX2Rpc2FibGVfSVJRLAorCS5lb2kJCT0gaXNlcmllc19lbmRfSVJRCiB9OwogCiAvKgpAQCAtMzE1LDE3ICsyOTMsMTQgQEAKIGludCBfX2luaXQgaVNlcmllc19hbGxvY2F0ZV9JUlEoSHZCdXNOdW1iZXIgYnVzLAogCQlIdlN1YkJ1c051bWJlciBzdWJfYnVzLCB1MzIgYnN1YmJ1cykKIHsKLQlpbnQgdmlydGlycTsKIAl1bnNpZ25lZCBpbnQgcmVhbGlycTsKIAl1OCBpZHNlbCA9IElTRVJJRVNfR0VUX0RFVklDRV9GUk9NX1NVQkJVUyhic3ViYnVzKTsKIAl1OCBmdW5jdGlvbiA9IElTRVJJRVNfR0VUX0ZVTkNUSU9OX0ZST01fU1VCQlVTKGJzdWJidXMpOwogCiAJcmVhbGlycSA9ICgoKCgoc3ViX2J1cyA8PCA4KSArIChidXMgLSAxKSkgPDwgMykgKyAoaWRzZWwgLSAxKSkgPDwgMykKIAkJKyBmdW5jdGlvbjsKLQl2aXJ0aXJxID0gdmlydF9pcnFfY3JlYXRlX21hcHBpbmcocmVhbGlycSk7CiAKLQlpcnFfZGVzY1t2aXJ0aXJxXS5oYW5kbGVyID0gJmlTZXJpZXNfSVJRX2hhbmRsZXI7Ci0JcmV0dXJuIHZpcnRpcnE7CisJcmV0dXJuIGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCByZWFsaXJxLCBJUlFfVFlQRV9OT05FKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KQEAgLTMzMywxMCArMzA4LDkgQEAKIC8qCiAgKiBHZXQgdGhlIG5leHQgcGVuZGluZyBJUlEuCiAgKi8KLWludCBpU2VyaWVzX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit1bnNpZ25lZCBpbnQgaVNlcmllc19nZXRfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCS8qIC0yIG1lYW5zIGlnbm9yZSB0aGlzIGludGVycnVwdCAqLwotCWludCBpcnEgPSAtMjsKKwlpbnQgaXJxID0gTk9fSVJRX0lHTk9SRTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoZ2V0X2xwcGFjYSgpLT5pbnRfZHdvcmQuZmllbGRzLmlwaV9jbnQpIHsKQEAgLTM1OSw5ICszMzMsNTcgQEAKIAkJfQogCQlzcGluX3VubG9jaygmcGVuZGluZ19pcnFzX2xvY2spOwogCQlpZiAoaXJxID49IE5SX0lSUVMpCi0JCQlpcnEgPSAtMjsKKwkJCWlycSA9IE5PX0lSUV9JR05PUkU7CiAJfQogI2VuZGlmCiAKIAlyZXR1cm4gaXJxOwogfQorCitzdGF0aWMgaW50IGlzZXJpZXNfaXJxX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJaXJxX2h3X251bWJlcl90IGh3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZpc2VyaWVzX3BpYywgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyBpc2VyaWVzX2lycV9ob3N0X29wcyA9IHsKKwkubWFwID0gaXNlcmllc19pcnFfaG9zdF9tYXAsCit9OworCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgaW5pdF9JUlEuICBzZXQgaW4gcHBjX21kLmluaXRfSVJRIGJ5IGlTZXJpZXNfc2V0dXAuYworICogSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBidXMgd2Fsay4KKyAqLwordm9pZCBfX2luaXQgaVNlcmllc19pbml0X0lSUSh2b2lkKQoreworCS8qIFJlZ2lzdGVyIFBDSSBldmVudCBoYW5kbGVyIGFuZCBvcGVuIGFuIGV2ZW50IHBhdGggKi8KKwlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CisJaW50IHJldDsKKworCS8qCisJICogVGhlIEh5cGVydmlzb3Igb25seSBhbGxvd3MgdXMgdXAgdG8gMjU2IGludGVycnVwdAorCSAqIHNvdXJjZXMgKHRoZSBpcnEgbnVtYmVyIGlzIHBhc3NlZCBpbiBhIHU4KS4KKwkgKi8KKwlpcnFfc2V0X3ZpcnFfY291bnQoMjU2KTsKKworCS8qIENyZWF0ZSBpcnEgaG9zdC4gTm8gbmVlZCBmb3IgYSByZXZtYXAgc2luY2UgSFYgd2lsbCBnaXZlIHVzCisJICogYmFjayBvdXIgdmlydHVhbCBpcnEgbnVtYmVyCisJICovCisJaG9zdCA9IGlycV9hbGxvY19ob3N0KElSUV9IT1NUX01BUF9OT01BUCwgMCwgJmlzZXJpZXNfaXJxX2hvc3Rfb3BzLCAwKTsKKwlCVUdfT04oaG9zdCA9PSBOVUxMKTsKKwlpcnFfc2V0X2RlZmF1bHRfaG9zdChob3N0KTsKKworCXJldCA9IEh2THBFdmVudF9yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGVfUGNpSW8sCisJCQkmcGNpX2V2ZW50X2hhbmRsZXIpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBIdkxwRXZlbnRfb3BlblBhdGgoSHZMcEV2ZW50X1R5cGVfUGNpSW8sIDApOworCQlpZiAocmV0ICE9IDApCisJCQlwcmludGsoS0VSTl9FUlIgImlzZXJpZXNfaW5pdF9JUlE6IG9wZW4gZXZlbnQgcGF0aCAiCisJCQkJCSJmYWlsZWQgd2l0aCByYyAweCV4XG4iLCByZXQpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImlzZXJpZXNfaW5pdF9JUlE6IHJlZ2lzdGVyIGhhbmRsZXIgIgorCQkJCSJmYWlsZWQgd2l0aCByYyAweCV4XG4iLCByZXQpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmgKaW5kZXggMTg4YWE4MC4uMWVlODk4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuaApAQCAtNCw2ICs0LDYgQEAKIGV4dGVybiB2b2lkIGlTZXJpZXNfaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gaW50ICBpU2VyaWVzX2FsbG9jYXRlX0lSUShIdkJ1c051bWJlciwgSHZTdWJCdXNOdW1iZXIsIHUzMik7CiBleHRlcm4gdm9pZCBpU2VyaWVzX2FjdGl2YXRlX0lSUXModm9pZCk7Ci1leHRlcm4gaW50IGlTZXJpZXNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaVNlcmllc19nZXRfaXJxKHN0cnVjdCBwdF9yZWdzICopOwogCiAjZW5kaWYgLyogX0lTRVJJRVNfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGFyZGF0YS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMKaW5kZXggNDM4ZTJkYi4uYTc3Njk0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMKQEAgLTYsNyArNiw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGV2ZW50cy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwZXZlbnRzLmMKaW5kZXggOGNhN2I5MzkuLjJhOWY4MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGV2ZW50cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGV2ZW50cy5jCkBAIC01MSwyMCArNTEsMjEgQEAKIHN0YXRpYyBzdHJ1Y3QgSHZMcEV2ZW50ICogZ2V0X25leHRfaHZscGV2ZW50KHZvaWQpCiB7CiAJc3RydWN0IEh2THBFdmVudCAqIGV2ZW50OwotCWV2ZW50ID0gKHN0cnVjdCBIdkxwRXZlbnQgKilodmxwZXZlbnRfcXVldWUueFNsaWNDdXJFdmVudFB0cjsKKwlldmVudCA9IChzdHJ1Y3QgSHZMcEV2ZW50ICopaHZscGV2ZW50X3F1ZXVlLmhxX2N1cnJlbnRfZXZlbnQ7CiAKIAlpZiAoaHZscGV2ZW50X2lzX3ZhbGlkKGV2ZW50KSkgewogCQkvKiBybWIoKSBuZWVkZWQgb25seSBmb3Igd2Vha2x5IGNvbnNpc3RlbnQgbWFjaGluZXMgKHJlZ2F0dGEpICovCiAJCXJtYigpOwogCQkvKiBTZXQgcG9pbnRlciB0byBuZXh0IHBvdGVudGlhbCBldmVudCAqLwotCQlodmxwZXZlbnRfcXVldWUueFNsaWNDdXJFdmVudFB0ciArPSAoKGV2ZW50LT54U2l6ZU1pbnVzMSArCi0JCQkJTHBFdmVudEFsaWduKSAvIExwRXZlbnRBbGlnbikgKiBMcEV2ZW50QWxpZ247CisJCWh2bHBldmVudF9xdWV1ZS5ocV9jdXJyZW50X2V2ZW50ICs9ICgoZXZlbnQtPnhTaXplTWludXMxICsKKwkJCQlJVF9MUF9FVkVOVF9BTElHTikgLyBJVF9MUF9FVkVOVF9BTElHTikgKgorCQkJCQlJVF9MUF9FVkVOVF9BTElHTjsKIAogCQkvKiBXcmFwIHRvIGJlZ2lubmluZyBpZiBubyByb29tIGF0IGVuZCAqLwotCQlpZiAoaHZscGV2ZW50X3F1ZXVlLnhTbGljQ3VyRXZlbnRQdHIgPgotCQkJCWh2bHBldmVudF9xdWV1ZS54U2xpY0xhc3RWYWxpZEV2ZW50UHRyKSB7Ci0JCQlodmxwZXZlbnRfcXVldWUueFNsaWNDdXJFdmVudFB0ciA9Ci0JCQkJaHZscGV2ZW50X3F1ZXVlLnhTbGljRXZlbnRTdGFja1B0cjsKKwkJaWYgKGh2bHBldmVudF9xdWV1ZS5ocV9jdXJyZW50X2V2ZW50ID4KKwkJCQlodmxwZXZlbnRfcXVldWUuaHFfbGFzdF9ldmVudCkgeworCQkJaHZscGV2ZW50X3F1ZXVlLmhxX2N1cnJlbnRfZXZlbnQgPQorCQkJCWh2bHBldmVudF9xdWV1ZS5ocV9ldmVudF9zdGFjazsKIAkJfQogCX0gZWxzZSB7CiAJCWV2ZW50ID0gTlVMTDsKQEAgLTgyLDEwICs4MywxMCBAQAogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPj0gc3ByZWFkX2xwZXZlbnRzKQogCQlyZXR1cm4gMDsKIAotCW5leHRfZXZlbnQgPSAoc3RydWN0IEh2THBFdmVudCAqKWh2bHBldmVudF9xdWV1ZS54U2xpY0N1ckV2ZW50UHRyOworCW5leHRfZXZlbnQgPSAoc3RydWN0IEh2THBFdmVudCAqKWh2bHBldmVudF9xdWV1ZS5ocV9jdXJyZW50X2V2ZW50OwogCiAJcmV0dXJuIGh2bHBldmVudF9pc192YWxpZChuZXh0X2V2ZW50KSB8fAotCQlodmxwZXZlbnRfcXVldWUueFBsaWNPdmVyZmxvd0ludFBlbmRpbmc7CisJCWh2bHBldmVudF9xdWV1ZS5ocV9vdmVyZmxvd19wZW5kaW5nOwogfQogCiBzdGF0aWMgdm9pZCBodmxwZXZlbnRfY2xlYXJfdmFsaWQoc3RydWN0IEh2THBFdmVudCAqIGV2ZW50KQpAQCAtOTUsMTggKzk2LDE4IEBACiAJICogaWUuIG9uIDY0LWJ5dGUgYm91bmRhcmllcy4KIAkgKi8KIAlzdHJ1Y3QgSHZMcEV2ZW50ICp0bXA7Ci0JdW5zaWduZWQgZXh0cmEgPSAoKGV2ZW50LT54U2l6ZU1pbnVzMSArIExwRXZlbnRBbGlnbikgLwotCQkJCQkJIExwRXZlbnRBbGlnbikgLSAxOworCXVuc2lnbmVkIGV4dHJhID0gKChldmVudC0+eFNpemVNaW51czEgKyBJVF9MUF9FVkVOVF9BTElHTikgLworCQkJCUlUX0xQX0VWRU5UX0FMSUdOKSAtIDE7CiAKIAlzd2l0Y2ggKGV4dHJhKSB7CiAJY2FzZSAzOgotCQl0bXAgPSAoc3RydWN0IEh2THBFdmVudCopKChjaGFyKilldmVudCArIDMgKiBMcEV2ZW50QWxpZ24pOworCQl0bXAgPSAoc3RydWN0IEh2THBFdmVudCopKChjaGFyKilldmVudCArIDMgKiBJVF9MUF9FVkVOVF9BTElHTik7CiAJCWh2bHBldmVudF9pbnZhbGlkYXRlKHRtcCk7CiAJY2FzZSAyOgotCQl0bXAgPSAoc3RydWN0IEh2THBFdmVudCopKChjaGFyKilldmVudCArIDIgKiBMcEV2ZW50QWxpZ24pOworCQl0bXAgPSAoc3RydWN0IEh2THBFdmVudCopKChjaGFyKilldmVudCArIDIgKiBJVF9MUF9FVkVOVF9BTElHTik7CiAJCWh2bHBldmVudF9pbnZhbGlkYXRlKHRtcCk7CiAJY2FzZSAxOgotCQl0bXAgPSAoc3RydWN0IEh2THBFdmVudCopKChjaGFyKilldmVudCArIDEgKiBMcEV2ZW50QWxpZ24pOworCQl0bXAgPSAoc3RydWN0IEh2THBFdmVudCopKChjaGFyKilldmVudCArIDEgKiBJVF9MUF9FVkVOVF9BTElHTik7CiAJCWh2bHBldmVudF9pbnZhbGlkYXRlKHRtcCk7CiAJfQogCkBAIC0xMjAsNyArMTIxLDcgQEAKIAlzdHJ1Y3QgSHZMcEV2ZW50ICogZXZlbnQ7CiAKIAkvKiBJZiB3ZSBoYXZlIHJlY3Vyc2VkLCBqdXN0IHJldHVybiAqLwotCWlmICghc3Bpbl90cnlsb2NrKCZodmxwZXZlbnRfcXVldWUubG9jaykpCisJaWYgKCFzcGluX3RyeWxvY2soJmh2bHBldmVudF9xdWV1ZS5ocV9sb2NrKSkKIAkJcmV0dXJuOwogCiAJZm9yICg7OykgewpAQCAtMTQ4LDE3ICsxNDksMTcgQEAKIAkJCQlwcmludGsoS0VSTl9JTkZPICJVbmV4cGVjdGVkIExwIEV2ZW50IHR5cGU9JWRcbiIsIGV2ZW50LT54VHlwZSApOwogCiAJCQlodmxwZXZlbnRfY2xlYXJfdmFsaWQoZXZlbnQpOwotCQl9IGVsc2UgaWYgKGh2bHBldmVudF9xdWV1ZS54UGxpY092ZXJmbG93SW50UGVuZGluZykKKwkJfSBlbHNlIGlmIChodmxwZXZlbnRfcXVldWUuaHFfb3ZlcmZsb3dfcGVuZGluZykKIAkJCS8qCiAJCQkgKiBObyBtb3JlIHZhbGlkIGV2ZW50cy4gSWYgb3ZlcmZsb3cgZXZlbnRzIGFyZQogCQkJICogcGVuZGluZyBwcm9jZXNzIHRoZW0KIAkJCSAqLwotCQkJSHZDYWxsRXZlbnRfZ2V0T3ZlcmZsb3dMcEV2ZW50cyhodmxwZXZlbnRfcXVldWUueEluZGV4KTsKKwkJCUh2Q2FsbEV2ZW50X2dldE92ZXJmbG93THBFdmVudHMoaHZscGV2ZW50X3F1ZXVlLmhxX2luZGV4KTsKIAkJZWxzZQogCQkJYnJlYWs7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmh2bHBldmVudF9xdWV1ZS5sb2NrKTsKKwlzcGluX3VubG9jaygmaHZscGV2ZW50X3F1ZXVlLmhxX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHNldF9zcHJlYWRfbHBldmVudHMoY2hhciAqc3RyKQpAQCAtMTg0LDIwICsxODUsMjAgQEAKIHsKIAl2b2lkICpldmVudFN0YWNrOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmh2bHBldmVudF9xdWV1ZS5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaHZscGV2ZW50X3F1ZXVlLmhxX2xvY2spOwogCiAJLyogQWxsb2NhdGUgYSBwYWdlIGZvciB0aGUgRXZlbnQgU3RhY2suICovCi0JZXZlbnRTdGFjayA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoTHBFdmVudFN0YWNrU2l6ZSk7Ci0JbWVtc2V0KGV2ZW50U3RhY2ssIDAsIExwRXZlbnRTdGFja1NpemUpOworCWV2ZW50U3RhY2sgPSBhbGxvY19ib290bWVtX3BhZ2VzKElUX0xQX0VWRU5UX1NUQUNLX1NJWkUpOworCW1lbXNldChldmVudFN0YWNrLCAwLCBJVF9MUF9FVkVOVF9TVEFDS19TSVpFKTsKIAogCS8qIEludm9rZSB0aGUgaHlwZXJ2aXNvciB0byBpbml0aWFsaXplIHRoZSBldmVudCBzdGFjayAqLwotCUh2Q2FsbEV2ZW50X3NldExwRXZlbnRTdGFjaygwLCBldmVudFN0YWNrLCBMcEV2ZW50U3RhY2tTaXplKTsKKwlIdkNhbGxFdmVudF9zZXRMcEV2ZW50U3RhY2soMCwgZXZlbnRTdGFjaywgSVRfTFBfRVZFTlRfU1RBQ0tfU0laRSk7CiAKLQlodmxwZXZlbnRfcXVldWUueFNsaWNFdmVudFN0YWNrUHRyID0gKGNoYXIgKilldmVudFN0YWNrOwotCWh2bHBldmVudF9xdWV1ZS54U2xpY0N1ckV2ZW50UHRyID0gKGNoYXIgKilldmVudFN0YWNrOwotCWh2bHBldmVudF9xdWV1ZS54U2xpY0xhc3RWYWxpZEV2ZW50UHRyID0gKGNoYXIgKilldmVudFN0YWNrICsKLQkJCQkJKExwRXZlbnRTdGFja1NpemUgLSBMcEV2ZW50TWF4U2l6ZSk7Ci0JaHZscGV2ZW50X3F1ZXVlLnhJbmRleCA9IDA7CisJaHZscGV2ZW50X3F1ZXVlLmhxX2V2ZW50X3N0YWNrID0gZXZlbnRTdGFjazsKKwlodmxwZXZlbnRfcXVldWUuaHFfY3VycmVudF9ldmVudCA9IGV2ZW50U3RhY2s7CisJaHZscGV2ZW50X3F1ZXVlLmhxX2xhc3RfZXZlbnQgPSAoY2hhciAqKWV2ZW50U3RhY2sgKworCQkoSVRfTFBfRVZFTlRfU1RBQ0tfU0laRSAtIElUX0xQX0VWRU5UX01BWF9TSVpFKTsKKwlodmxwZXZlbnRfcXVldWUuaHFfaW5kZXggPSAwOwogfQogCiAvKiBSZWdpc3RlciBhIGhhbmRsZXIgZm9yIGFuIExwRXZlbnQgdHlwZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKaW5kZXggZTY4YjZiNS4uYzI0MTQxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgotI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfY2FsbF94bS5oPgogCiAjaW5jbHVkZSAicHJvY2Vzc29yX3ZwZC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCA2MTdjNzI0Li5jOTYwNWQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtODEsOCArODAsNiBAQAogI2VuZGlmCiAKIGV4dGVybiBpbnQgcmRfc2l6ZTsJCS8qIERlZmluZWQgaW4gZHJpdmVycy9ibG9jay9yZC5jICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBlbWJlZGRlZF9zeXNtYXBfc3RhcnQ7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBlbWJlZGRlZF9zeXNtYXBfZW5kOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpU2VyaWVzX3JlY2FsX3RiOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaVNlcmllc19yZWNhbF90aXRhbjsKQEAgLTI5Nyw4ICsyOTQsNiBAQAogewogCURCRygiIC0+IGlTZXJpZXNfaW5pdF9lYXJseSgpXG4iKTsKIAotCXBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyID0gSUNfSVNFUklFUzsKLQogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQogCS8qCiAJICogSWYgdGhlIGluaXQgUkFNIGRpc2sgaGFzIGJlZW4gY29uZmlndXJlZCBhbmQgdGhlcmUgaXMKQEAgLTMyMSwxMSArMzE2LDYgQEAKIAlpU2VyaWVzX3JlY2FsX3RpdGFuID0gSHZDYWxsWG1fbG9hZFRvZCgpOwogCiAJLyoKLQkgKiBJbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlIG1hbmFnZW1lbnQgcG9pbnRlcnMKLQkgKi8KLQlocHRlX2luaXRfaVNlcmllcygpOwotCi0JLyoKIAkgKiBJbml0aWFsaXplIHRoZSBETUEvVENFIG1hbmFnZW1lbnQKIAkgKi8KIAlpb21tdV9pbml0X2Vhcmx5X2lTZXJpZXMoKTsKQEAgLTU2MywxNiArNTUzLDYgQEAKIAlpZiAobmFjYS54UmFtRGlzaykKIAkJa2xpbWl0ID0gS0VSTkVMQkFTRSArICh1NjQpbmFjYS54UmFtRGlzayArCiAJCQkobmFjYS54UmFtRGlza1NpemUgKiBIV19QQUdFX1NJWkUpOwotCWVsc2UgewotCQkvKgotCQkgKiBObyByYW0gZGlzayB3YXMgaW5jbHVkZWQgLSBjaGVjayBhbmQgc2VlIGlmIHRoZXJlCi0JCSAqIHdhcyBhbiBlbWJlZGRlZCBzeXN0ZW0gbWFwLiAgQ2hhbmdlIGtsaW1pdCB0byB0YWtlCi0JCSAqIGludG8gYWNjb3VudCBhbnkgZW1iZWRkZWQgc3lzdGVtIG1hcAotCQkgKi8KLQkJaWYgKGVtYmVkZGVkX3N5c21hcF9lbmQpCi0JCQlrbGltaXQgPSBLRVJORUxCQVNFICsgKChlbWJlZGRlZF9zeXNtYXBfZW5kICsgNDA5NSkgJgotCQkJCQkweGZmZmZmZmZmZmZmZmYwMDApOwotCX0KIH0KIAogc3RhdGljIGludCBfX2luaXQgaVNlcmllc19zcmNfaW5pdCh2b2lkKQpAQCAtNjc3LDExICs2NTcsNyBAQAogCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9JU0VSSUVTOwogCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9MUEFSOwogCi0JLyoKLQkgKiBUaGUgSHlwZXJ2aXNvciBvbmx5IGFsbG93cyB1cyB1cCB0byAyNTYgaW50ZXJydXB0Ci0JICogc291cmNlcyAodGhlIGlycSBudW1iZXIgaXMgcGFzc2VkIGluIGEgdTgpLgotCSAqLwotCXZpcnRfaXJxX21heCA9IDI1NTsKKwlocHRlX2luaXRfaVNlcmllcygpOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc21wLmMKaW5kZXggNmY5ZDQwNy4uMmViMDk1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuYwpAQCAtMTQsNyArMTQsNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwppbmRleCA5YTRlZmMwLi42M2ExNjcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKQEAgLTM3Niw5ICszNzYsMTAgQEAKIAkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBwY2lfaW9fYmFzZTsKIAkJaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKz0gb2Zmc2V0OwogCQlob3NlLT5pb19yZXNvdXJjZS5lbmQgKz0gb2Zmc2V0OwotCQlwcmludGsoS0VSTl9JTkZPICJQQ0kgSG9zdCAlZCwgaW8gc3RhcnQ6ICVseDsgaW8gZW5kOiAlbHhcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIlBDSSBIb3N0ICVkLCBpbyBzdGFydDogJWxseDsgaW8gZW5kOiAlbGx4XG4iLAogCQkgICAgICAgaG9zZS0+Z2xvYmFsX251bWJlciwKLQkJICAgICAgIGhvc2UtPmlvX3Jlc291cmNlLnN0YXJ0LCBob3NlLT5pb19yZXNvdXJjZS5lbmQpOworCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylob3NlLT5pb19yZXNvdXJjZS5zdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaG9zZS0+aW9fcmVzb3VyY2UuZW5kKTsKIAl9CiB9CiAKQEAgLTQ0MiwxOCArNDQzLDIzIEBACiBpbnQgbWFwbGVfcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGNoYW5uZWwpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlpbnQgaXJxID0gY2hhbm5lbCA/IDE1IDogMTQ7CisJdW5zaWduZWQgaW50IGRlZmlycSA9IGNoYW5uZWwgPyAxNSA6IDE0OworCXVuc2lnbmVkIGludCBpcnE7CiAKIAlpZiAocGRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQU1EIHx8CiAJICAgIHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0lERSkKLQkJcmV0dXJuIGlycTsKKwkJcmV0dXJuIGRlZmlycTsKIAogCW5wID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwogCWlmIChucCA9PSBOVUxMKQotCQlyZXR1cm4gaXJxOwotCWlmIChucC0+bl9pbnRycyA8IDIpCi0JCXJldHVybiBpcnE7Ci0JcmV0dXJuIG5wLT5pbnRyc1tjaGFubmVsICYgMHgxXS5saW5lOworCQlyZXR1cm4gZGVmaXJxOworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCBjaGFubmVsICYgMHgxKTsKKwlpZiAoaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoIkZhaWxlZCB0byBtYXAgb25ib2FyZCBJREUgaW50ZXJydXB0IGZvciBjaGFubmVsICVkXG4iLAorCQkgICAgICAgY2hhbm5lbCk7CisJCXJldHVybiBkZWZpcnE7CisJfQorCXJldHVybiBpcnE7CiB9CiAKIC8qIFhYWDogVG8gcmVtb3ZlIG9uY2UgYWxsIGZpcm13YXJlcyBhcmUgb2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYwppbmRleCBhMDUwNWVhLi5jYjUyOGM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCkBAIC0xMSw5ICsxMSw4IEBACiAgKgogICovCiAKLSNkZWZpbmUgREVCVUcKKyN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTE5OSw1NSArMTk4LDgxIEBACiB7CiAJREJHKCIgLT4gbWFwbGVfaW5pdF9lYXJseVxuIik7CiAKLQkvKiBJbml0aWFsaXplIGhhc2ggdGFibGUsIGZyb20gbm93IG9uLCB3ZSBjYW4gdGFrZSBoYXNoIGZhdWx0cwotCSAqIGFuZCBjYWxsIGlvcmVtYXAKLQkgKi8KLQlocHRlX2luaXRfbmF0aXZlKCk7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgbWFwcGluZyBvcHRpb25zICovCi0JcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPSBJQ19PUEVOX1BJQzsKLQogCWlvbW11X2luaXRfZWFybHlfZGFydCgpOwogCiAJREJHKCIgPC0gbWFwbGVfaW5pdF9lYXJseVxuIik7CiB9CiAKLQotc3RhdGljIF9faW5pdCB2b2lkIG1hcGxlX2luaXRfSVJRKHZvaWQpCisvKgorICogVGhpcyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHBTZXJpZXMgYW5kIENIUlAuIFdlIG5lZWQgdG8gbWFrZSB0aGF0CisgKiBjb2RlIGdlbmVyaWMgYXQgb25lIHBvaW50LCB3aXRoIGFwcHJvcHJpYXRlIGJpdHMgaW4gdGhlIGRldmljZS10cmVlIHRvCisgKiBpZGVudGlmeSB0aGUgcHJlc2VuY2Ugb2YgYW4gSFQgQVBJQworICovCitzdGF0aWMgdm9pZCBfX2luaXQgbWFwbGVfaW5pdF9JUlEodm9pZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290LCAqbnAsICptcGljX25vZGUgPSBOVUxMOwogCXVuc2lnbmVkIGludCAqb3Bwcm9wOwotCXVuc2lnbmVkIGxvbmcgb3BpY19hZGRyOworCXVuc2lnbmVkIGxvbmcgb3BlbnBpY19hZGRyID0gMDsKKwlpbnQgbmFkZHIsIG4sIGksIG9wcGxlbiwgaGFzX2lzdXMgPSAwOwogCXN0cnVjdCBtcGljICptcGljOwotCXVuc2lnbmVkIGNoYXIgc2Vuc2VzWzEyOF07Ci0JaW50IG47CisJdW5zaWduZWQgaW50IGZsYWdzID0gTVBJQ19QUklNQVJZOwogCi0JREJHKCIgLT4gbWFwbGVfaW5pdF9JUlFcbiIpOworCS8qIExvY2F0ZSBNUElDIGluIHRoZSBkZXZpY2UtdHJlZS4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgYnVnCisJICogaW4gTWFwbGUgZGV2aWNlLXRyZWUgd2hlcmUgdGhlIHR5cGUgb2YgdGhlIGNvbnRyb2xsZXIgaXMKKwkgKiBvcGVuLXBpYyBhbmQgbm90IGludGVycnVwdC1jb250cm9sbGVyCisJICovCisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAib3Blbi1waWMiKSB7CisJCW1waWNfbm9kZSA9IG5wOworCQlicmVhazsKKwl9CisJaWYgKG1waWNfbm9kZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkZhaWxlZCB0byBsb2NhdGUgdGhlIE1QSUMgaW50ZXJydXB0IGNvbnRyb2xsZXJcbiIpOworCQlyZXR1cm47CisJfQogCi0JLyogWFhYOiBOb24gc3RhbmRhcmQsIHJlcGxhY2UgdGhhdCB3aXRoIGEgcHJvcGVyIG9wZW5waWMvbXBpYyBub2RlCi0JICogaW4gdGhlIGRldmljZS10cmVlLiBGaW5kIHRoZSBPcGVuIFBJQyBpZiBwcmVzZW50ICovCisJLyogRmluZCBhZGRyZXNzIGxpc3QgaW4gL3BsYXRmb3JtLW9wZW4tcGljICovCiAJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7Ci0Jb3Bwcm9wID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkocm9vdCwKLQkJCQkicGxhdGZvcm0tb3Blbi1waWMiLCBOVUxMKTsKLQlpZiAob3Bwcm9wID09IDApCi0JCXBhbmljKCJPcGVuUElDIG5vdCBmb3VuZCAhXG4iKTsKLQotCW4gPSBwcm9tX25fYWRkcl9jZWxscyhyb290KTsKLQlmb3IgKG9waWNfYWRkciA9IDA7IG4gPiAwOyAtLW4pCi0JCW9waWNfYWRkciA9IChvcGljX2FkZHIgPDwgMzIpICsgKm9wcHJvcCsrOworCW5hZGRyID0gcHJvbV9uX2FkZHJfY2VsbHMocm9vdCk7CisJb3Bwcm9wID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkocm9vdCwgInBsYXRmb3JtLW9wZW4tcGljIiwKKwkJCQkJICAgICAgICZvcHBsZW4pOworCWlmIChvcHByb3AgIT0gMCkgeworCQlvcGVucGljX2FkZHIgPSBvZl9yZWFkX251bWJlcihvcHByb3AsIG5hZGRyKTsKKwkJaGFzX2lzdXMgPSAob3BwbGVuID4gbmFkZHIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiT3BlblBJQyBhZGRyOiAlbHgsIGhhcyBJU1VzOiAlZFxuIiwKKwkJICAgICAgIG9wZW5waWNfYWRkciwgaGFzX2lzdXMpOworCX0KIAlvZl9ub2RlX3B1dChyb290KTsKIAotCS8qIE9idGFpbiBzZW5zZSB2YWx1ZXMgZnJvbSBkZXZpY2UtdHJlZSAqLwotCXByb21fZ2V0X2lycV9zZW5zZXMoc2Vuc2VzLCAwLCAxMjgpOworCUJVR19PTihvcGVucGljX2FkZHIgPT0gMCk7CiAKLQltcGljID0gbXBpY19hbGxvYyhvcGljX2FkZHIsCi0JCQkgIE1QSUNfUFJJTUFSWSB8IE1QSUNfQklHX0VORElBTiB8Ci0JCQkgIE1QSUNfQlJPS0VOX1UzIHwgTVBJQ19XQU5UU19SRVNFVCwKLQkJCSAgMCwgMCwgMTI4LCAxMjgsIHNlbnNlcywgMTI4LCAiVTMtTVBJQyIpOworCS8qIENoZWNrIGZvciBhIGJpZyBlbmRpYW4gTVBJQyAqLworCWlmIChnZXRfcHJvcGVydHkobnAsICJiaWctZW5kaWFuIiwgTlVMTCkgIT0gTlVMTCkKKwkJZmxhZ3MgfD0gTVBJQ19CSUdfRU5ESUFOOworCisJLyogWFhYIE1hcGxlIHNwZWNpZmljIGJpdHMgKi8KKwlmbGFncyB8PSBNUElDX0JST0tFTl9VMyB8IE1QSUNfV0FOVFNfUkVTRVQ7CisKKwkvKiBTZXR1cCB0aGUgb3BlbnBpYyBkcml2ZXIuIE1vcmUgZGV2aWNlLXRyZWUganVua3MsIHdlIGhhcmQgY29kZSBubworCSAqIElTVXMgZm9yIG5vdy4gSSdsbCBoYXZlIHRvIHJldmlzaXQgc29tZSBzdHVmZnMgd2l0aCB0aGUgZm9sa3MgZG9pbmcKKwkgKiB0aGUgZmlybXdhcmUgZm9yIHRob3NlCisJICovCisJbXBpYyA9IG1waWNfYWxsb2MobXBpY19ub2RlLCBvcGVucGljX2FkZHIsIGZsYWdzLAorCQkJICAvKmhhc19pc3VzID8gMTYgOiovIDAsIDAsICIgTVBJQyAgICAgIik7CiAJQlVHX09OKG1waWMgPT0gTlVMTCk7Ci0JbXBpY19pbml0KG1waWMpOwogCi0JREJHKCIgPC0gbWFwbGVfaW5pdF9JUlFcbiIpOworCS8qIEFkZCBJU1VzICovCisJb3BwbGVuIC89IHNpemVvZih1MzIpOworCWZvciAobiA9IDAsIGkgPSBuYWRkcjsgaSA8IG9wcGxlbjsgaSArPSBuYWRkciwgbisrKSB7CisJCXVuc2lnbmVkIGxvbmcgaXN1YWRkciA9IG9mX3JlYWRfbnVtYmVyKG9wcHJvcCArIGksIG5hZGRyKTsKKwkJbXBpY19hc3NpZ25faXN1KG1waWMsIG4sIGlzdWFkZHIpOworCX0KKworCS8qIEFsbCBJU1VzIGFyZSBzZXR1cCwgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gKi8KKwltcGljX2luaXQobXBpYyk7CisJcHBjX21kLmdldF9pcnEgPSBtcGljX2dldF9pcnE7CisJb2Zfbm9kZV9wdXQobXBpY19ub2RlKTsKKwlvZl9ub2RlX3B1dChyb290KTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1hcGxlX3Byb2dyZXNzKGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGhleCkKQEAgLTI2Miw3ICsyODcsOSBAQAogc3RhdGljIGludCBfX2luaXQgbWFwbGVfcHJvYmUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIk1vbWVudHVtLE1hcGxlIikpCisKKwlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTW9tZW50dW0sTWFwbGUiKSAmJgorCSAgICAhb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJNb21lbnR1bSxBcGFjaGUiKSkKIAkJcmV0dXJuIDA7CiAJLyoKIAkgKiBPbiBVMywgdGhlIERBUlQgKGlvbW11KSBtdXN0IGJlIGFsbG9jYXRlZCBub3cgc2luY2UgaXQKQEAgLTI3Miw2ICsyOTksOCBAQAogCSAqLwogCWFsbG9jX2RhcnRfdGFibGUoKTsKIAorCWhwdGVfaW5pdF9uYXRpdmUoKTsKKwogCXJldHVybiAxOwogfQogCkBAIC0yODEsNyArMzEwLDYgQEAKIAkuc2V0dXBfYXJjaAkJPSBtYXBsZV9zZXR1cF9hcmNoLAogCS5pbml0X2Vhcmx5CQk9IG1hcGxlX2luaXRfZWFybHksCiAJLmluaXRfSVJRCQk9IG1hcGxlX2luaXRfSVJRLAotCS5nZXRfaXJxCQk9IG1waWNfZ2V0X2lycSwKIAkucGNpYmlvc19maXh1cAkJPSBtYXBsZV9wY2liaW9zX2ZpeHVwLAogCS5wY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxCT0gbWFwbGVfcGNpX2dldF9sZWdhY3lfaWRlX2lycSwKIAkucmVzdGFydAkJPSBtYXBsZV9yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS90aW1lLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYwppbmRleCBiOWEyYjNkLi45Zjc1NzliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYwpAQCAtMTEsNyArMTEsNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYmFja2xpZ2h0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2JhY2tsaWdodC5jCmluZGV4IDQ5OGIwNDIuLjY5ZjY1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYmFja2xpZ2h0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9iYWNrbGlnaHQuYwpAQCAtNyw3ICs3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CkBAIC0xMTksNyArMTE4LDE0IEBACiAJCWRvd24oJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwogCQlwcm9wcyA9IHBtYWNfYmFja2xpZ2h0LT5wcm9wczsKIAkJcHJvcHMtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzICoKLQkJCXByb3BzLT5tYXhfYnJpZ2h0bmVzcyAvIE9MRF9CQUNLTElHSFRfTUFYOworCQkJKHByb3BzLT5tYXhfYnJpZ2h0bmVzcyArIDEpIC8KKwkJCShPTERfQkFDS0xJR0hUX01BWCArIDEpOworCisJCWlmIChwcm9wcy0+YnJpZ2h0bmVzcyA+IHByb3BzLT5tYXhfYnJpZ2h0bmVzcykKKwkJCXByb3BzLT5icmlnaHRuZXNzID0gcHJvcHMtPm1heF9icmlnaHRuZXNzOworCQllbHNlIGlmIChwcm9wcy0+YnJpZ2h0bmVzcyA8IDApCisJCQlwcm9wcy0+YnJpZ2h0bmVzcyA9IDA7CisKIAkJcHJvcHMtPnVwZGF0ZV9zdGF0dXMocG1hY19iYWNrbGlnaHQpOwogCQl1cCgmcG1hY19iYWNrbGlnaHQtPnNlbSk7CiAKQEAgLTE0MCw4ICsxNDYsMTEgQEAKIAogCQlkb3duKCZwbWFjX2JhY2tsaWdodC0+c2VtKTsKIAkJcHJvcHMgPSBwbWFjX2JhY2tsaWdodC0+cHJvcHM7CisKIAkJcmVzdWx0ID0gcHJvcHMtPmJyaWdodG5lc3MgKgotCQkJT0xEX0JBQ0tMSUdIVF9NQVggLyBwcm9wcy0+bWF4X2JyaWdodG5lc3M7CisJCQkoT0xEX0JBQ0tMSUdIVF9NQVggKyAxKSAvCisJCQkocHJvcHMtPm1heF9icmlnaHRuZXNzICsgMSk7CisKIAkJdXAoJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwogCX0KIAltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKaW5kZXggZWFjYmZkOS4uODcxYjAwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKQEAgLTksMTEgKzksMTAgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNjMsNiArMTYyLDggQEAKIHsKIAl1MzIgdmFsOwogCisJYm9vdHhfZHRfYWRkX3Byb3AoImxpbnV4LGJvb3R4IiwgTlVMTCwgMCwgbWVtX2VuZCk7CisKIAlpZiAoYm9vdHhfaW5mby0+a2VybmVsUGFyYW1zT2Zmc2V0KSB7CiAJCWNoYXIgKmFyZ3MgPSAoY2hhciAqKSgodW5zaWduZWQgbG9uZylib290eF9pbmZvKSArCiAJCQlib290eF9pbmZvLT5rZXJuZWxQYXJhbXNPZmZzZXQ7CkBAIC0xODIsOCArMTgzLDI1IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYm9vdHhfYWRkX2Rpc3BsYXlfcHJvcHModW5zaWduZWQgbG9uZyBiYXNlLAogCQkJCQkgICB1bnNpZ25lZCBsb25nICptZW1fZW5kKQogeworCWJvb3RfaW5mb3NfdCAqYmkgPSBib290eF9pbmZvOworCXUzMiB0bXA7CisKIAlib290eF9kdF9hZGRfcHJvcCgibGludXgsYm9vdC1kaXNwbGF5IiwgTlVMTCwgMCwgbWVtX2VuZCk7CiAJYm9vdHhfZHRfYWRkX3Byb3AoImxpbnV4LG9wZW5lZCIsIE5VTEwsIDAsIG1lbV9lbmQpOworCXRtcCA9IGJpLT5kaXNwRGV2aWNlRGVwdGg7CisJYm9vdHhfZHRfYWRkX3Byb3AoImxpbnV4LGJvb3R4LWRlcHRoIiwgJnRtcCwgNCwgbWVtX2VuZCk7CisJdG1wID0gYmktPmRpc3BEZXZpY2VSZWN0WzJdIC0gYmktPmRpc3BEZXZpY2VSZWN0WzBdOworCWJvb3R4X2R0X2FkZF9wcm9wKCJsaW51eCxib290eC13aWR0aCIsICZ0bXAsIDQsIG1lbV9lbmQpOworCXRtcCA9IGJpLT5kaXNwRGV2aWNlUmVjdFszXSAtIGJpLT5kaXNwRGV2aWNlUmVjdFsxXTsKKwlib290eF9kdF9hZGRfcHJvcCgibGludXgsYm9vdHgtaGVpZ2h0IiwgJnRtcCwgNCwgbWVtX2VuZCk7CisJdG1wID0gYmktPmRpc3BEZXZpY2VSb3dCeXRlczsKKwlib290eF9kdF9hZGRfcHJvcCgibGludXgsYm9vdHgtbGluZWJ5dGVzIiwgJnRtcCwgNCwgbWVtX2VuZCk7CisJdG1wID0gKHUzMiliaS0+ZGlzcERldmljZUJhc2U7CisJaWYgKHRtcCA9PSAwKQorCQl0bXAgPSAodTMyKWJpLT5sb2dpY2FsRGlzcGxheUJhc2U7CisJdG1wICs9IGJpLT5kaXNwRGV2aWNlUmVjdFsxXSAqIGJpLT5kaXNwRGV2aWNlUm93Qnl0ZXM7CisJdG1wICs9IGJpLT5kaXNwRGV2aWNlUmVjdFswXSAqICgoYmktPmRpc3BEZXZpY2VEZXB0aCArIDcpIC8gOCk7CisJYm9vdHhfZHRfYWRkX3Byb3AoImxpbnV4LGJvb3R4LWFkZHIiLCAmdG1wLCA0LCBtZW1fZW5kKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGJvb3R4X2R0X2FkZF9zdHJpbmcoY2hhciAqcywgdW5zaWduZWQgbG9uZyAqbWVtX2VuZCkKQEAgLTIxMiw3ICsyMzAsNyBAQAogCiAJaWYgKCFzdHJjbXAobmFtZXAsICIvY2hvc2VuIikpIHsKIAkJREJHKCIgZGV0ZWN0ZWQgL2Nob3NlbiAhIGFkZGluZyBwcm9wZXJ0aWVzIG5hbWVzICFcbiIpOwotCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxwbGF0Zm9ybSIsIG1lbV9lbmQpOworCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxib290eCIsIG1lbV9lbmQpOwogCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxzdGRvdXQtcGF0aCIsIG1lbV9lbmQpOwogCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxpbml0cmQtc3RhcnQiLCBtZW1fZW5kKTsKIAkJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsaW5pdHJkLWVuZCIsIG1lbV9lbmQpOwpAQCAtMjIzLDYgKzI0MSwxMSBAQAogCQlEQkcoIiBkZXRlY3RlZCBkaXNwbGF5ICEgYWRkaW5nIHByb3BlcnRpZXMgbmFtZXMgIVxuIik7CiAJCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3QtZGlzcGxheSIsIG1lbV9lbmQpOwogCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxvcGVuZWQiLCBtZW1fZW5kKTsKKwkJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsYm9vdHgtZGVwdGgiLCBtZW1fZW5kKTsKKwkJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsYm9vdHgtd2lkdGgiLCBtZW1fZW5kKTsKKwkJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsYm9vdHgtaGVpZ2h0IiwgbWVtX2VuZCk7CisJCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3R4LWxpbmVieXRlcyIsIG1lbV9lbmQpOworCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxib290eC1hZGRyIiwgbWVtX2VuZCk7CiAJCXN0cm5jcHkoYm9vdHhfZGlzcF9wYXRoLCBuYW1lcCwgMjU1KTsKIAl9CiAKQEAgLTQ0NCw3ICs0NjcsMTQgQEAKIAlpZiAoIUJPT1RfSU5GT19JU19WMl9DT01QQVRJQkxFKGJpKSkKIAkJYmktPmxvZ2ljYWxEaXNwbGF5QmFzZSA9IGJpLT5kaXNwRGV2aWNlQmFzZTsKIAorCS8qIEZpeHVwIGRlcHRoIDE2IC0+IDE1IGFzIHRoYXQncyB3aGF0IE1hY09TIGNhbGxzIDE2YnBwICovCisJaWYgKGJpLT5kaXNwRGV2aWNlRGVwdGggPT0gMTYpCisJCWJpLT5kaXNwRGV2aWNlRGVwdGggPSAxNTsKKwogI2lmZGVmIENPTkZJR19CT09UWF9URVhUCisJcHRyID0gKHVuc2lnbmVkIGxvbmcpYmktPmxvZ2ljYWxEaXNwbGF5QmFzZTsKKwlwdHIgKz0gYmktPmRpc3BEZXZpY2VSZWN0WzFdICogYmktPmRpc3BEZXZpY2VSb3dCeXRlczsKKwlwdHIgKz0gYmktPmRpc3BEZXZpY2VSZWN0WzBdICogKChiaS0+ZGlzcERldmljZURlcHRoICsgNykgLyA4KTsKIAlidGV4dF9zZXR1cF9kaXNwbGF5KGJpLT5kaXNwRGV2aWNlUmVjdFsyXSAtIGJpLT5kaXNwRGV2aWNlUmVjdFswXSwKIAkJCSAgICBiaS0+ZGlzcERldmljZVJlY3RbM10gLSBiaS0+ZGlzcERldmljZVJlY3RbMV0sCiAJCQkgICAgYmktPmRpc3BEZXZpY2VEZXB0aCwgYmktPmRpc3BEZXZpY2VSb3dCeXRlcywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY2FjaGUuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY2FjaGUuUwppbmRleCBmYjk3N2RlLi42YmUxYTRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NhY2hlLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jYWNoZS5TCkBAIC0xNCw3ICsxNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKaW5kZXggYWYyYThmOS4uNjI5MjYyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02OCw3ICs2Nyw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNsZWVwX2ZyZXE7CiAKIC8qCi0gKiBEaWZmZXJlbnQgbW9kZWxzIHVzZXMgZGlmZmVyZW50IG1lY2FuaXNtcyB0byBzd2l0Y2ggdGhlIGZyZXF1ZW5jeQorICogRGlmZmVyZW50IG1vZGVscyB1c2VzIGRpZmZlcmVudCBtZWNoYW5pc21zIHRvIHN3aXRjaCB0aGUgZnJlcXVlbmN5CiAgKi8KIHN0YXRpYyBpbnQgKCpzZXRfc3BlZWRfcHJvYykoaW50IGxvd19zcGVlZCk7CiBzdGF0aWMgdW5zaWduZWQgaW50ICgqZ2V0X3NwZWVkX3Byb2MpKHZvaWQpOwpAQCAtMjY4LDcgKzI2Nyw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlIGRlY3JlbWVudGVyIHdvbid0IGludGVycnVwdCB1cyAqLwogCWFzbSB2b2xhdGlsZSgibXRkZWMgJTAiIDogOiAiciIgKDB4N2ZmZmZmZmYpKTsKLQkvKiBNYWtlIHN1cmUgYW55IHBlbmRpbmcgREVDIGludGVycnVwdCBvY2N1cmluZyB3aGlsZSB3ZSBkaWQKKwkvKiBNYWtlIHN1cmUgYW55IHBlbmRpbmcgREVDIGludGVycnVwdCBvY2N1cnJpbmcgd2hpbGUgd2UgZGlkCiAJICogdGhlIGFib3ZlIGRpZG4ndCByZS1lbmFibGUgdGhlIERFQyAqLwogCW1iKCk7CiAJYXNtIHZvbGF0aWxlKCJtdGRlYyAlMCIgOiA6ICJyIiAoMHg3ZmZmZmZmZikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwppbmRleCBiNTdlNDY1Li5mMDhhMTQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwpAQCAtMTAsNyArMTAsNiBAQAogICogdGhhdCBpcyBpTWFjIEc1IGFuZCBsYXRlc3Qgc2luZ2xlIENQVSBkZXNrdG9wLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCmluZGV4IDg1ZTAwY2IuLmY4MzEzYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgIC0gU3BsaXQgc3BsaXQgc3BsaXQuLi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwppbmRleCBjODk2Y2U4Li44Njc3ZjUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwpAQCAtMzAsNyArMzAsNiBAQAogI3VuZGVmIERFQlVHCiAjdW5kZWYgREVCVUdfTE9XCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTIzLDEwICs1MjIsMTEgQEAKIAkJaG9zdC0+c3BlZWQgPSBLV19JMkNfTU9ERV8yNUtIWjsKIAkJYnJlYWs7CiAJfQkKLQlpZiAobnAtPm5faW50cnMgPiAwKQotCQlob3N0LT5pcnEgPSBucC0+aW50cnNbMF0ubGluZTsKLQllbHNlCi0JCWhvc3QtPmlycSA9IE5PX0lSUTsKKwlob3N0LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKGhvc3QtPmlycSA9PSBOT19JUlEpCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJsb3dfaTJjOiBGYWlsZWQgdG8gbWFwIGludGVycnVwdCBmb3IgJXNcbiIsCisJCSAgICAgICBucC0+ZnVsbF9uYW1lKTsKIAogCWhvc3QtPmJhc2UgPSBpb3JlbWFwKCgqYWRkcnApLCAweDEwMDApOwogCWlmIChob3N0LT5iYXNlID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwppbmRleCAyNjJmOTY3Li42YTM2ZWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqICBUb2RvOiAtIGFkZCBzdXBwb3J0IGZvciB0aGUgT0YgcGVyc2lzdGVudCBwcm9wZXJ0aWVzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KQEAgLTMwLDYgKzI5LDggQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9udnJhbS5oPgogCisjaW5jbHVkZSAicG1hYy5oIgorCiAjZGVmaW5lIERFQlVHCiAKICNpZmRlZiBERUJVRwpAQCAtODEsOSArODIsNiBAQAogLy8gWFhYIFR1cm4gdGhhdCBpbnRvIGEgc2VtCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG52X2xvY2spOwogCi1leHRlcm4gaW50IHBtYWNfbmV3d29ybGQ7Ci1leHRlcm4gaW50IHN5c3RlbV9ydW5uaW5nOwotCiBzdGF0aWMgaW50ICgqY29yZTk5X3dyaXRlX2JhbmspKGludCBiYW5rLCB1OCogZGF0YXMpOwogc3RhdGljIGludCAoKmNvcmU5OV9lcmFzZV9iYW5rKShpbnQgYmFuayk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IDgwMDM1ODUuLjU1NmIzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtNDYsNiArNDYsOSBAQAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciAqdTNfYWdwOwogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciAqdTRfcGNpZTsKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnUzX2h0OworI2RlZmluZSBoYXNfc2Vjb25kX29oYXJlIDAKKyNlbHNlCitzdGF0aWMgaW50IGhhc19zZWNvbmRfb2hhcmU7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIGV4dGVybiB1OCBwY2lfY2FjaGVfbGluZV9zaXplOwpAQCAtNjQ3LDYgKzY1MCwzMyBAQAogCWVhcmx5X3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGJ1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgdmFsKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2Vjb25kX29oYXJlKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwY2kxMDZiLDciKTsKKwl1bnNpZ25lZCBjaGFyIGJ1cywgZGV2Zm47CisJdW5zaWduZWQgc2hvcnQgY21kOworCisJaWYgKG5wID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFRoaXMgbXVzdCBydW4gYmVmb3JlIHdlIGluaXRpYWxpemUgdGhlIFBJQ3Mgc2luY2UgdGhlIHNlY29uZAorCSAqIG9oYXJlIGhvc3RzIGEgUElDIHRoYXQgd2lsbCBiZSBhY2Nlc3NlZCB0aGVyZS4KKwkgKi8KKwlpZiAocGNpX2RldmljZV9mcm9tX09GX25vZGUobnAsICZidXMsICZkZXZmbikgPT0gMCkgeworCQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIGhvc2UgPQorCQkJcGNpX2ZpbmRfaG9zZV9mb3JfT0ZfZGV2aWNlKG5wKTsKKwkJaWYgKCFob3NlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGZpbmQgUENJIGhvc2UgZm9yIE9IYXJlMiAhXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQllYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIGJ1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUjsKKwkJY21kICY9IH5QQ0lfQ09NTUFORF9JTzsKKwkJZWFybHlfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgYnVzLCBkZXZmbiwgUENJX0NPTU1BTkQsIGNtZCk7CisJfQorCWhhc19zZWNvbmRfb2hhcmUgPSAxOworfQorCiAvKgogICogU29tZSBBcHBsZSBkZXNrdG9wIG1hY2hpbmVzIGhhdmUgYSBORUMgUEQ3MjAxMDBBIFVTQjIgY29udHJvbGxlcgogICogb24gdGhlIG1vdGhlcmJvYXJkLiBPcGVuIEZpcm13YXJlLCBvbiB0aGVzZSwgd2lsbCBkaXNhYmxlIHRoZQpAQCAtNjg4LDkgKzcxOCw2IEBACiAJCQkgICAgICAgIiBFSENJLCBmaXhpbmcgdXAuLi5cbiIpOwogCQkJZGF0YSAmPSB+MVVMOwogCQkJZWFybHlfd3JpdGVfY29uZmlnX2R3b3JkKGhvc2UsIGJ1cywgZGV2Zm4sIDB4ZTQsIGRhdGEpOwotCQkJZWFybHlfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgYnVzLAotCQkJCQkJZGV2Zm4gfCAyLCBQQ0lfSU5URVJSVVBUX0xJTkUsCi0JCQkJbmVjLT5pbnRyc1swXS5saW5lKTsKIAkJfQogCX0KIH0KQEAgLTkzOSw5ICs5NjYsMTAgQEAKIAkJZGlzcF9uYW1lID0gIkNoYW9zIjsKIAkJcHJpbWFyeSA9IDA7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIkZvdW5kICVzIFBDSSBob3N0IGJyaWRnZSBhdCAweCUwOGx4LiAiCisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgJXMgUENJIGhvc3QgYnJpZGdlIGF0IDB4JTAxNmxseC4gIgogCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLAotCQlkaXNwX25hbWUsIHJzcmMuc3RhcnQsIGhvc2UtPmZpcnN0X2J1c25vLCBob3NlLT5sYXN0X2J1c25vKTsKKwkJZGlzcF9uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXJzcmMuc3RhcnQsIGhvc2UtPmZpcnN0X2J1c25vLAorCQlob3NlLT5sYXN0X2J1c25vKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KIAogCURCRygiIC0+SG9zZSBhdCAweCVwLCBjZmdfYWRkcj0weCVwLGNmZ19kYXRhPTB4JXBcbiIsCkBAIC05NTcsMzAgKzk4NSwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9PRl9pbnRlcnJ1cHRzKHZvaWQpCit2b2lkIF9faW5pdCBwbWFjX3BjaWJpb3NfZml4dXAodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiogZGV2ID0gTlVMTDsKIAotCS8qCi0JICogT3BlbiBGaXJtd2FyZSBvZnRlbiBkb2Vzbid0IGluaXRpYWxpemUgdGhlCi0JICogUENJX0lOVEVSUlVQVF9MSU5FIGNvbmZpZyByZWdpc3RlciBwcm9wZXJseSwgc28gd2UKLQkgKiBzaG91bGQgZmluZCB0aGUgZGV2aWNlIG5vZGUgYW5kIGFwcGx5IHRoZSBpbnRlcnJ1cHQKLQkgKiBvYnRhaW5lZCBmcm9tIHRoZSBPRiBkZXZpY2UtdHJlZQotCSAqLwogCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQkJbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwotCQkvKiB0aGlzIGlzIHRoZSBub2RlLCBzZWUgaWYgaXQgaGFzIGludGVycnVwdHMgKi8KLQkJaWYgKG5vZGUgJiYgbm9kZS0+bl9pbnRycyA+IDApCi0JCQlkZXYtPmlycSA9IG5vZGUtPmludHJzWzBdLmxpbmU7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgZGV2LT5pcnEpOwotCX0KLX0KKwkJLyogUmVhZCBpbnRlcnJ1cHQgZnJvbSB0aGUgZGV2aWNlLXRyZWUgKi8KKwkJcGNpX3JlYWRfaXJxX2xpbmUoZGV2KTsKIAotdm9pZCBfX2luaXQgcG1hY19wY2liaW9zX2ZpeHVwKHZvaWQpCi17Ci0JLyogRml4dXAgaW50ZXJydXB0cyBhY2NvcmRpbmcgdG8gT0YgdHJlZSAqLwotCXBjaWJpb3NfZml4dXBfT0ZfaW50ZXJydXB0cygpOworCQkvKiBGaXh1cCBpbnRlcnJ1cHQgZm9yIHRoZSBtb2RlbS9ldGhlcm5ldCBjb21ibyBjb250cm9sbGVyLgorCQkgKiBvbiBtYWNoaW5lcyB3aXRoIGEgc2Vjb25kIG9oYXJlIGNoaXAuCisJCSAqIFRoZSBudW1iZXIgaW4gdGhlIGRldmljZSB0cmVlICgyNykgaXMgYm9ndXMgKGNvcnJlY3QgZm9yCisJCSAqIHRoZSBldGhlcm5ldC1vbmx5IGJvYXJkIGJ1dCBub3QgdGhlIGNvbWJvIGV0aGVybmV0L21vZGVtCisJCSAqIGJvYXJkKS4gVGhlIHJlYWwgaW50ZXJydXB0IGlzIDI4IG9uIHRoZSBzZWNvbmQgY29udHJvbGxlcgorCQkgKiAtPiAyOCszMiA9IDYwLgorCQkgKi8KKwkJaWYgKGhhc19zZWNvbmRfb2hhcmUgJiYKKwkJICAgIGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVDICYmCisJCSAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9QTFVTKQorCQkJZGV2LT5pcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgNjAsIDApOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19QUEM2NApAQCAtMTA3MCw2ICsxMDk0LDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCiAJaW5pdF9wMnBicmlkZ2UoKTsKKwlpbml0X3NlY29uZF9vaGFyZSgpOwogCWZpeHVwX25lY191c2IyKCk7CiAKIAkvKiBXZSBhcmUgc3RpbGwgaGF2aW5nIHNvbWUgaXNzdWVzIHdpdGggdGhlIFhzZXJ2ZSBHNCwgZW5hYmxpbmcKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKaW5kZXggYTNiZDNlNy4uNmQ2NjM1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTI1LDE5ICsyNCwxOCBAQAogCiBzdGF0aWMgaW50IG1hY2lvX2RvX2dwaW9faXJxX2VuYWJsZShzdHJ1Y3QgcG1mX2Z1bmN0aW9uICpmdW5jKQogewotCWlmIChmdW5jLT5ub2RlLT5uX2ludHJzIDwgMSkKKwl1bnNpZ25lZCBpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZnVuYy0+bm9kZSwgMCk7CisJaWYgKGlycSA9PSBOT19JUlEpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHJlcXVlc3RfaXJxKGZ1bmMtPm5vZGUtPmludHJzWzBdLmxpbmUsIG1hY2lvX2dwaW9faXJxLCAwLAotCQkJICAgZnVuYy0+bm9kZS0+bmFtZSwgZnVuYyk7CisJcmV0dXJuIHJlcXVlc3RfaXJxKGlycSwgbWFjaW9fZ3Bpb19pcnEsIDAsIGZ1bmMtPm5vZGUtPm5hbWUsIGZ1bmMpOwogfQogCiBzdGF0aWMgaW50IG1hY2lvX2RvX2dwaW9faXJxX2Rpc2FibGUoc3RydWN0IHBtZl9mdW5jdGlvbiAqZnVuYykKIHsKLQlpZiAoZnVuYy0+bm9kZS0+bl9pbnRycyA8IDEpCisJdW5zaWduZWQgaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGZ1bmMtPm5vZGUsIDApOworCWlmIChpcnEgPT0gTk9fSVJRKQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZyZWVfaXJxKGZ1bmMtPm5vZGUtPmludHJzWzBdLmxpbmUsIGZ1bmMpOworCWZyZWVfaXJxKGlycSwgZnVuYyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggOTNlNzUwNS4uYjExN2FkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTUsNyArNSw2IEBACiAgKiBGSVhNRTogTE9DS0lORyAhISEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCAxOGJmMzAxLi4zZDMyOGJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjYsMzkgKzY1LDM2IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG1hY19waWNfbG9jayk7CiAKLSNkZWZpbmUgR0FUV0lDS19JUlFfUE9PTF9TSVpFICAgICAgICAxMAotc3RhdGljIHN0cnVjdCBpbnRlcnJ1cHRfaW5mbyBnYXR3aWNrX2ludF9wb29sW0dBVFdJQ0tfSVJRX1BPT0xfU0laRV07Ci0KICNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNfY2FjaGVkX2lycV9tYXNrW05SX01BU0tfV09SRFNdOworc3RhdGljIGludCBwbWFjX2lycV9jYXNjYWRlID0gLTE7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpwbWFjX3BpY19ob3N0OwogCi0vKgotICogTWFyayBhbiBpcnEgYXMgImxvc3QiLiAgVGhpcyBpcyBvbmx5IHVzZWQgb24gdGhlIHBtYWMKLSAqIHNpbmNlIGl0IGNhbiBsb3NlIGludGVycnVwdHMgKHNlZSBwbWFjX3NldF9pcnFfbWFzaykuCi0gKiAtLSBDb3J0Ci0gKi8KLXZvaWQgX19zZXRfbG9zdCh1bnNpZ25lZCBsb25nIGlycV9uciwgaW50IG5va2ljaykKK3N0YXRpYyB2b2lkIF9fcG1hY19yZXRyaWdnZXIodW5zaWduZWQgaW50IGlycV9ucikKIHsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaXJxX25yLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKSkgeworCWlmIChpcnFfbnIgPj0gbWF4X3JlYWxfaXJxcyAmJiBwbWFjX2lycV9jYXNjYWRlID4gMCkgeworCQlfX3NldF9iaXQoaXJxX25yLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKTsKKwkJaXJxX25yID0gcG1hY19pcnFfY2FzY2FkZTsKKwkJbWIoKTsKKwl9CisJaWYgKCFfX3Rlc3RfYW5kX3NldF9iaXQoaXJxX25yLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKSkgewogCQlhdG9taWNfaW5jKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpOwotCQlpZiAoIW5va2ljaykKLQkJCXNldF9kZWMoMSk7CisJCXNldF9kZWMoMSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwbWFjX21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycV9ucikKK3N0YXRpYyB2b2lkIHBtYWNfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKGlycV9uciAmIDB4MWYpOwotICAgICAgICBpbnQgaSA9IGlycV9uciA+PiA1OworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAodmlycSAmIDB4MWYpOworICAgICAgICBpbnQgaSA9IHZpcnEgPj4gNTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgICAgICBpZiAoKHVuc2lnbmVkKWlycV9uciA+PSBtYXhfaXJxcykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2xlYXJfYml0KGlycV9uciwgcHBjX2NhY2hlZF9pcnFfbWFzayk7Ci0gICAgICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaXJxX25yLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKSkKLSAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisgICAgICAgIF9fY2xlYXJfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CisgICAgICAgIGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChzcmMsIHBwY19sb3N0X2ludGVycnVwdHMpKQorICAgICAgICAgICAgICAgIGF0b21pY19kZWMoJnBwY19uX2xvc3RfaW50ZXJydXB0cyk7CiAgICAgICAgIG91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZW5hYmxlLCBwcGNfY2FjaGVkX2lycV9tYXNrW2ldKTsKICAgICAgICAgb3V0X2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2ssIGJpdCk7CiAgICAgICAgIGRvIHsKQEAgLTExMCwxNiArMTA2LDI5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBwbWFjX3NldF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxX25yLCBpbnQgbm9raWNrbG9zdCkKK3N0YXRpYyB2b2lkIHBtYWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFt2aXJxXS5od2lycTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOworICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChzcmMsIHBwY19sb3N0X2ludGVycnVwdHMpKQorICAgICAgICAgICAgICAgIGF0b21pY19kZWMoJnBwY19uX2xvc3RfaW50ZXJydXB0cyk7CisgICAgICAgIG91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOworICAgICAgICAodm9pZClpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcG1hY19zZXRfaXJxX21hc2sodW5zaWduZWQgaW50IGlycV9uciwgaW50IG5va2lja2xvc3QpCiB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IChpcnFfbnIgJiAweDFmKTsKICAgICAgICAgaW50IGkgPSBpcnFfbnIgPj4gNTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgICAgICBpZiAoKHVuc2lnbmVkKWlycV9uciA+PSBtYXhfaXJxcykKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAvKiBlbmFibGUgdW5tYXNrZWQgaW50ZXJydXB0cyAqLwogICAgICAgICBvdXRfbGUzMigmcG1hY19pcnFfaHdbaV0tPmVuYWJsZSwgcHBjX2NhY2hlZF9pcnFfbWFza1tpXSk7CiAKQEAgLTEzNiw3MSArMTQ1LDc4IEBACiAgICAgICAgICAqIHRoZSBiaXQgaW4gdGhlIGZsYWcgcmVnaXN0ZXIgb3IgcmVxdWVzdCBhbm90aGVyIGludGVycnVwdC4KICAgICAgICAgICovCiAgICAgICAgIGlmIChiaXQgJiBwcGNfY2FjaGVkX2lycV9tYXNrW2ldICYgaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmxldmVsKSkKLQkJX19zZXRfbG9zdCgodWxvbmcpaXJxX25yLCBub2tpY2tsb3N0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJCV9fcG1hY19yZXRyaWdnZXIoaXJxX25yKTsKIH0KIAogLyogV2hlbiBhbiBpcnEgZ2V0cyByZXF1ZXN0ZWQgZm9yIHRoZSBmaXJzdCBjbGllbnQsIGlmIGl0J3MgYW4KICAqIGVkZ2UgaW50ZXJydXB0LCB3ZSBjbGVhciBhbnkgcHJldmlvdXMgb25lIG9uIHRoZSBjb250cm9sbGVyCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG1hY19zdGFydHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQorc3RhdGljIHVuc2lnbmVkIGludCBwbWFjX3N0YXJ0dXBfaXJxKHVuc2lnbmVkIGludCB2aXJxKQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoaXJxX25yICYgMHgxZik7Ci0gICAgICAgIGludCBpID0gaXJxX25yID4+IDU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFt2aXJxXS5od2lycTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOworICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogCi0JaWYgKChpcnFfZGVzY1tpcnFfbnJdLnN0YXR1cyAmIElSUV9MRVZFTCkgPT0gMCkKKyAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJaWYgKChpcnFfZGVzY1t2aXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwotICAgICAgICBzZXRfYml0KGlycV9uciwgcHBjX2NhY2hlZF9pcnFfbWFzayk7Ci0gICAgICAgIHBtYWNfc2V0X2lycV9tYXNrKGlycV9uciwgMCk7CisgICAgICAgIF9fc2V0X2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOworICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMCk7CisgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcG1hY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQorc3RhdGljIHZvaWQgcG1hY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLSAgICAgICAgY2xlYXJfYml0KGlycV9uciwgcHBjX2NhY2hlZF9pcnFfbWFzayk7Ci0gICAgICAgIHBtYWNfc2V0X2lycV9tYXNrKGlycV9uciwgMCk7Ci0gICAgICAgIG1iKCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFt2aXJxXS5od2lycTsKKworICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgX19jbGVhcl9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKKyAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOworICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBwbWFjX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9ucikKK3N0YXRpYyB2b2lkIHBtYWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLSAgICAgICAgc2V0X2JpdChpcnFfbnIsIHBwY19jYWNoZWRfaXJxX21hc2spOwotICAgICAgICBwbWFjX3NldF9pcnFfbWFzayhpcnFfbnIsIDApOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCV9fc2V0X2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOworICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMCk7CisgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBtYWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQorc3RhdGljIGludCBwbWFjX3JldHJpZ2dlcih1bnNpZ25lZCBpbnQgdmlycSkKIHsKLQlpZiAoIShpcnFfZGVzY1tpcnFfbnJdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKQotCSAgICAmJiBpcnFfZGVzY1tpcnFfbnJdLmFjdGlvbikgewotICAgICAgICAJc2V0X2JpdChpcnFfbnIsIHBwY19jYWNoZWRfaXJxX21hc2spOwotCSAgICAgICAgcG1hY19zZXRfaXJxX21hc2soaXJxX25yLCAxKTsKLQl9CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlfX3BtYWNfcmV0cmlnZ2VyKGlycV9tYXBbdmlycV0uaHdpcnEpOworICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJldHVybiAxOwogfQogCi0KLXN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBwbWFjX3BpYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG1hY19waWMgPSB7CiAJLnR5cGVuYW1lCT0gIiBQTUFDLVBJQyAiLAogCS5zdGFydHVwCT0gcG1hY19zdGFydHVwX2lycSwKLQkuZW5hYmxlCQk9IHBtYWNfdW5tYXNrX2lycSwKLQkuZGlzYWJsZQk9IHBtYWNfbWFza19pcnEsCi0JLmFjawkJPSBwbWFjX21hc2tfYW5kX2Fja19pcnEsCi0JLmVuZAkJPSBwbWFjX2VuZF9pcnEsCi19OwotCi1zdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgZ2F0d2lja19waWMgPSB7Ci0JLnR5cGVuYW1lCT0gIiBHQVRXSUNLICAiLAotCS5zdGFydHVwCT0gcG1hY19zdGFydHVwX2lycSwKLQkuZW5hYmxlCQk9IHBtYWNfdW5tYXNrX2lycSwKLQkuZGlzYWJsZQk9IHBtYWNfbWFza19pcnEsCi0JLmFjawkJPSBwbWFjX21hc2tfYW5kX2Fja19pcnEsCi0JLmVuZAkJPSBwbWFjX2VuZF9pcnEsCisJLm1hc2sJCT0gcG1hY19tYXNrX2lycSwKKwkuYWNrCQk9IHBtYWNfYWNrX2lycSwKKwkubWFza19hY2sJPSBwbWFjX21hc2tfYW5kX2Fja19pcnEsCisJLnVubWFzawkJPSBwbWFjX3VubWFza19pcnEsCisJLnJldHJpZ2dlcgk9IHBtYWNfcmV0cmlnZ2VyLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IGdhdHdpY2tfYWN0aW9uKGludCBjcGwsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaXJxLCBiaXRzOworCWludCByYyA9IElSUV9OT05FOwogCisgIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWZvciAoaXJxID0gbWF4X2lycXM7IChpcnEgLT0gMzIpID49IG1heF9yZWFsX2lycXM7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yMTAsMTcgKzIyNiwyMCBAQAogCQlpZiAoYml0cyA9PSAwKQogCQkJY29udGludWU7CiAJCWlycSArPSBfX2lsb2cyKGJpdHMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJCV9fZG9fSVJRKGlycSwgcmVncyk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKIAl9Ci0JcHJpbnRrKCJnYXR3aWNrIGlycSBub3QgZnJvbSBnYXR3aWNrIHBpY1xuIik7Ci0JcmV0dXJuIElSUV9OT05FOworICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBwbWFjX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdW5zaWduZWQgaW50IHBtYWNfcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGlycTsKIAl1bnNpZ25lZCBsb25nIGJpdHMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJdm9pZCBwc3VyZ2Vfc21wX21lc3NhZ2VfcmVjdihzdHJ1Y3QgcHRfcmVncyAqKTsKQEAgLTIyOCw5ICsyNDcsMTAgQEAKICAgICAgICAJLyogSVBJJ3MgYXJlIGEgaGFjayBvbiB0aGUgcG93ZXJzdXJnZSAtLSBDb3J0ICovCiAgICAgICAgCWlmICggc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDAgKSB7CiAJCXBzdXJnZV9zbXBfbWVzc2FnZV9yZWN2KHJlZ3MpOwotCQlyZXR1cm4gLTI7CS8qIGlnbm9yZSwgYWxyZWFkeSBoYW5kbGVkICovCisJCXJldHVybiBOT19JUlFfSUdOT1JFOwkvKiBpZ25vcmUsIGFscmVhZHkgaGFuZGxlZCAqLwogICAgICAgICB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLworICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlycSA9IG1heF9yZWFsX2lycXM7IChpcnEgLT0gMzIpID49IDA7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yNDIsMTMzICsyNjIsMTAgQEAKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7CiAJCWJyZWFrOwogCX0KLQotCXJldHVybiBpcnE7Ci19Ci0KLS8qIFRoaXMgcm91dGluZSB3aWxsIGZpeCBzb21lIG1pc3NpbmcgaW50ZXJydXB0IHZhbHVlcyBpbiB0aGUgZGV2aWNlIHRyZWUKLSAqIG9uIHRoZSBnYXR3aWNrIG1hYy1pbyBjb250cm9sbGVyIHVzZWQgYnkgc29tZSBQb3dlckJvb2tzCi0gKgotICogV2Fsa2luZyBvZiBPRiBub2RlcyBjb3VsZCB1c2UgYSBiaXQgbW9yZSBmaXhpbmcgdXAgaGVyZSwgYnV0IGl0J3Mgbm90Ci0gKiB2ZXJ5IGltcG9ydGFudCBhcyB0aGlzIGlzIGFsbCBib290IHRpbWUgY29kZSBvbiBzdGF0aWMgcG9ydGlvbnMgb2YgdGhlCi0gKiBkZXZpY2UtdHJlZS4KLSAqCi0gKiBIb3dldmVyLCB0aGUgbW9kaWZpY2F0aW9ucyBkb25lIHRvICJpbnRycyIgd2lsbCBoYXZlIHRvIGJlIHJlbW92ZWQgYW5kCi0gKiByZXBsYWNlZCB3aXRoIHByb3BlciB1cGRhdGVzIG9mIHRoZSAiaW50ZXJydXB0cyIgcHJvcGVydGllcyBvcgotICogQUFQTCxpbnRlcnJ1cHRzLCB5ZXQgdG8gYmUgZGVjaWRlZCwgb25jZSB0aGUgZHluYW1pYyBwYXJzaW5nIGlzIHRoZXJlLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcG1hY19maXhfZ2F0d2lja19pbnRlcnJ1cHRzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3csCi0JCQkJCSAgICAgICBpbnQgaXJxX2Jhc2UpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCWludCBjb3VudDsKLQotCW1lbXNldChnYXR3aWNrX2ludF9wb29sLCAwLCBzaXplb2YoZ2F0d2lja19pbnRfcG9vbCkpOwotCWNvdW50ID0gMDsKLQlmb3IgKG5vZGUgPSBOVUxMOyAobm9kZSA9IG9mX2dldF9uZXh0X2NoaWxkKGd3LCBub2RlKSkgIT0gTlVMTDspIHsKLQkJLyogRml4IFNDQyAqLwotCQlpZiAoKHN0cmNhc2VjbXAobm9kZS0+bmFtZSwgImVzY2MiKSA9PSAwKSAmJiBub2RlLT5jaGlsZCkgewotCQkJaWYgKG5vZGUtPmNoaWxkLT5uX2ludHJzIDwgMykgewotCQkJCW5vZGUtPmNoaWxkLT5pbnRycyA9ICZnYXR3aWNrX2ludF9wb29sW2NvdW50XTsKLQkJCQljb3VudCArPSAzOwotCQkJfQotCQkJbm9kZS0+Y2hpbGQtPm5faW50cnMgPSAzOwotCQkJbm9kZS0+Y2hpbGQtPmludHJzWzBdLmxpbmUgPSAxNStpcnFfYmFzZTsKLQkJCW5vZGUtPmNoaWxkLT5pbnRyc1sxXS5saW5lID0gIDQraXJxX2Jhc2U7Ci0JCQlub2RlLT5jaGlsZC0+aW50cnNbMl0ubGluZSA9ICA1K2lycV9iYXNlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXJxOiBmaXhlZCBTQ0Mgb24gZ2F0d2ljayIKLQkJCSAgICAgICAiICglZCwlZCwlZClcbiIsCi0JCQkgICAgICAgbm9kZS0+Y2hpbGQtPmludHJzWzBdLmxpbmUsCi0JCQkgICAgICAgbm9kZS0+Y2hpbGQtPmludHJzWzFdLmxpbmUsCi0JCQkgICAgICAgbm9kZS0+Y2hpbGQtPmludHJzWzJdLmxpbmUpOwotCQl9Ci0JCS8qIEZpeCBtZWRpYS1iYXkgJiBsZWZ0IFNXSU0gKi8KLQkJaWYgKHN0cmNhc2VjbXAobm9kZS0+bmFtZSwgIm1lZGlhLWJheSIpID09IDApIHsKLQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSogeWFfbm9kZTsKLQotCQkJaWYgKG5vZGUtPm5faW50cnMgPT0gMCkKLQkJCQlub2RlLT5pbnRycyA9ICZnYXR3aWNrX2ludF9wb29sW2NvdW50KytdOwotCQkJbm9kZS0+bl9pbnRycyA9IDE7Ci0JCQlub2RlLT5pbnRyc1swXS5saW5lID0gMjkraXJxX2Jhc2U7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJpcnE6IGZpeGVkIG1lZGlhLWJheSBvbiBnYXR3aWNrIgotCQkJICAgICAgICIgKCVkKVxuIiwgbm9kZS0+aW50cnNbMF0ubGluZSk7Ci0KLQkJCXlhX25vZGUgPSBub2RlLT5jaGlsZDsKLQkJCXdoaWxlKHlhX25vZGUpIHsKLQkJCQlpZiAoc3RyY2FzZWNtcCh5YV9ub2RlLT5uYW1lLCAiZmxvcHB5IikgPT0gMCkgewotCQkJCQlpZiAoeWFfbm9kZS0+bl9pbnRycyA8IDIpIHsKLQkJCQkJCXlhX25vZGUtPmludHJzID0gJmdhdHdpY2tfaW50X3Bvb2xbY291bnRdOwotCQkJCQkJY291bnQgKz0gMjsKLQkJCQkJfQotCQkJCQl5YV9ub2RlLT5uX2ludHJzID0gMjsKLQkJCQkJeWFfbm9kZS0+aW50cnNbMF0ubGluZSA9IDE5K2lycV9iYXNlOwotCQkJCQl5YV9ub2RlLT5pbnRyc1sxXS5saW5lID0gIDEraXJxX2Jhc2U7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gImlycTogZml4ZWQgZmxvcHB5IG9uIHNlY29uZCBjb250cm9sbGVyICglZCwlZClcbiIsCi0JCQkJCQl5YV9ub2RlLT5pbnRyc1swXS5saW5lLCB5YV9ub2RlLT5pbnRyc1sxXS5saW5lKTsKLQkJCQl9Ci0JCQkJaWYgKHN0cmNhc2VjbXAoeWFfbm9kZS0+bmFtZSwgImF0YTQiKSA9PSAwKSB7Ci0JCQkJCWlmICh5YV9ub2RlLT5uX2ludHJzIDwgMikgewotCQkJCQkJeWFfbm9kZS0+aW50cnMgPSAmZ2F0d2lja19pbnRfcG9vbFtjb3VudF07Ci0JCQkJCQljb3VudCArPSAyOwotCQkJCQl9Ci0JCQkJCXlhX25vZGUtPm5faW50cnMgPSAyOwotCQkJCQl5YV9ub2RlLT5pbnRyc1swXS5saW5lID0gMTQraXJxX2Jhc2U7Ci0JCQkJCXlhX25vZGUtPmludHJzWzFdLmxpbmUgPSAgMytpcnFfYmFzZTsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXJxOiBmaXhlZCBpZGUgb24gc2Vjb25kIGNvbnRyb2xsZXIgKCVkLCVkKVxuIiwKLQkJCQkJCXlhX25vZGUtPmludHJzWzBdLmxpbmUsIHlhX25vZGUtPmludHJzWzFdLmxpbmUpOwotCQkJCX0KLQkJCQl5YV9ub2RlID0geWFfbm9kZS0+c2libGluZzsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY291bnQgPiAxMCkgewotCQlwcmludGsoIldBUk5JTkcgISEgR2F0d2ljayBpbnRlcnJ1cHQgcG9vbCBvdmVyZmxvd1xuIik7Ci0JCXByaW50aygiICBHQVRXSUNLX0lSUV9QT09MX1NJWkUgPSAlZFxuIiwgR0FUV0lDS19JUlFfUE9PTF9TSVpFKTsKLQkJcHJpbnRrKCIgICAgICAgICAgICAgIHJlcXVlc3RlZCA9ICVkXG4iLCBjb3VudCk7Ci0JfQotfQotCi0vKgotICogVGhlIFBvd2VyQm9vayAzNDAwLzI0MDAvMzUwMCBjYW4gaGF2ZSBhIGNvbWJvIGV0aGVybmV0L21vZGVtCi0gKiBjYXJkIHdoaWNoIGluY2x1ZGVzIGFuIG9oYXJlIGNoaXAgdGhhdCBhY3RzIGFzIGEgc2Vjb25kIGludGVycnVwdAotICogY29udHJvbGxlci4gIElmIHdlIGZpbmQgdGhpcyBzZWNvbmQgb2hhcmUsIHNldCBpdCB1cCBhbmQgZml4IHRoZQotICogaW50ZXJydXB0IHZhbHVlIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlIGV0aGVybmV0IGNoaXAuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfc2Vjb25kX29oYXJlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JdW5zaWduZWQgY2hhciBidXMsIGRldmZuOwotCXVuc2lnbmVkIHNob3J0IGNtZDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmV0aGVyOwotCi0JLyogVGhpcyBjb2RlIGRvZXNuJ3Qgc3RyaWN0bHkgYmVsb25nIGhlcmUsIGl0IGNvdWxkIGJlIHBhcnQgb2YKLQkgKiBlaXRoZXIgdGhlIFBDSSBpbml0aWFsaXNhdGlvbiBvciB0aGUgZmVhdHVyZSBjb2RlLiBJdCdzIGtlcHQKLQkgKiBoZXJlIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCi0JICovCi0JaWYgKHBjaV9kZXZpY2VfZnJvbV9PRl9ub2RlKG5wLCAmYnVzLCAmZGV2Zm4pID09IDApIHsKLQkJc3RydWN0IHBjaV9jb250cm9sbGVyKiBob3NlID0KLQkJCXBjaV9maW5kX2hvc2VfZm9yX09GX2RldmljZShucCk7Ci0JCWlmICghaG9zZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIFBDSSBob3NlIGZvciBPSGFyZTIgIVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCBidXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0JCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVI7Ci0JCWNtZCAmPSB+UENJX0NPTU1BTkRfSU87Ci0JCWVhcmx5X3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGJ1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjbWQpOwotCX0KLQotCS8qIEZpeCBpbnRlcnJ1cHQgZm9yIHRoZSBtb2RlbS9ldGhlcm5ldCBjb21ibyBjb250cm9sbGVyLiBUaGUgbnVtYmVyCi0JICogaW4gdGhlIGRldmljZSB0cmVlICgyNykgaXMgYm9ndXMgKGNvcnJlY3QgZm9yIHRoZSBldGhlcm5ldC1vbmx5Ci0JICogYm9hcmQgYnV0IG5vdCB0aGUgY29tYm8gZXRoZXJuZXQvbW9kZW0gYm9hcmQpLgotCSAqIFRoZSByZWFsIGludGVycnVwdCBpcyAyOCBvbiB0aGUgc2Vjb25kIGNvbnRyb2xsZXIgLT4gMjgrMzIgPSA2MC4KLQkgKi8KLQlldGhlciA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwY2kxMDExLDE0Iik7Ci0JaWYgKGV0aGVyICYmIGV0aGVyLT5uX2ludHJzID4gMCkgewotCQlldGhlci0+aW50cnNbMF0ubGluZSA9IDYwOwotCQlwcmludGsoS0VSTl9JTkZPICJpcnE6IEZpeGVkIGV0aGVybmV0IElSUSB0byAlZFxuIiwKLQkJICAgICAgIGV0aGVyLT5pbnRyc1swXS5saW5lKTsKLQl9Ci0Jb2Zfbm9kZV9wdXQoZXRoZXIpOworICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseShpcnEgPCAwKSkKKwkJcmV0dXJuIE5PX0lSUTsKKwlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAocG1hY19waWNfaG9zdCwgaXJxKTsKIH0KIAogI2lmZGVmIENPTkZJR19YTU9OCkBAIC0zODIsMjIgKzI3OSw2NSBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBnYXR3aWNrX2Nhc2NhZGVfYWN0aW9uID0gewogCS5oYW5kbGVyCT0gZ2F0d2lja19hY3Rpb24sCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCS5uYW1lCQk9ICJjYXNjYWRlIiwKIH07CiAKK3N0YXRpYyBpbnQgcG1hY19waWNfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwkvKiBXZSBtYXRjaCBhbGwsIHdlIGRvbid0IGFsd2F5cyBoYXZlIGEgbm9kZSBhbnl3YXkgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwbWFjX3BpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHcsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisJaW50IGxldmVsOworCisJaWYgKGh3ID49IG1heF9pcnFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE1hcmsgbGV2ZWwgaW50ZXJydXB0cywgc2V0IGRlbGF5ZWQgZGlzYWJsZSBmb3IgZWRnZSBvbmVzIGFuZCBzZXQKKwkgKiBoYW5kbGVycworCSAqLworCWxldmVsID0gISEobGV2ZWxfbWFza1todyA+PiA1XSAmICgxVUwgPDwgKGh3ICYgMHgxZikpKTsKKwlpZiAobGV2ZWwpCisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJZWxzZQorCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RFTEFZRURfRElTQUJMRTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnBtYWNfcGljLCBsZXZlbCA/CisJCQkJIGhhbmRsZV9sZXZlbF9pcnEgOiBoYW5kbGVfZWRnZV9pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtYWNfcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJICAgICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICAgICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsCisJCQkgICAgICAgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCisKK3sKKwkqb3V0X2h3aXJxID0gKmludHNwZWM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHBtYWNfcGljX2hvc3Rfb3BzID0geworCS5tYXRjaCA9IHBtYWNfcGljX2hvc3RfbWF0Y2gsCisJLm1hcCA9IHBtYWNfcGljX2hvc3RfbWFwLAorCS54bGF0ZSA9IHBtYWNfcGljX2hvc3RfeGxhdGUsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcG1hY19waWNfcHJvYmVfb2xkc3R5bGUodm9pZCkKIHsKICAgICAgICAgaW50IGk7Ci0JaW50IGlycV9jYXNjYWRlID0gLTE7CiAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWFzdGVyID0gTlVMTDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNsYXZlID0gTlVMTDsKIAl1OCBfX2lvbWVtICphZGRyOwogCXN0cnVjdCByZXNvdXJjZSByOwogCiAJLyogU2V0IG91ciBnZXRfaXJxIGZ1bmN0aW9uICovCi0JcHBjX21kLmdldF9pcnEgPSBwbWFjX2dldF9pcnE7CisJcHBjX21kLmdldF9pcnEgPSBwbWFjX3BpY19nZXRfaXJxOwogCiAJLyoKIAkgKiBGaW5kIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0eXBlICYgbm9kZQpAQCAtNDE1LDcgKzM1NSw2IEBACiAJCWlmIChzbGF2ZSkgewogCQkJbWF4X2lycXMgPSA2NDsKIAkJCWxldmVsX21hc2tbMV0gPSBPSEFSRV9MRVZFTF9NQVNLOwotCQkJZW5hYmxlX3NlY29uZF9vaGFyZShzbGF2ZSk7CiAJCX0KIAl9IGVsc2UgaWYgKChtYXN0ZXIgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAibWFjLWlvIikpICE9IE5VTEwpIHsKIAkJbWF4X2lycXMgPSBtYXhfcmVhbF9pcnFzID0gNjQ7CkBAIC00MzksMTQgKzM3OCwxOCBAQAogCQkJbWF4X2lycXMgPSAxMjg7CiAJCQlsZXZlbF9tYXNrWzJdID0gSEVBVEhST1dfTEVWRUxfTUFTSzsKIAkJCWxldmVsX21hc2tbM10gPSAwOwotCQkJcG1hY19maXhfZ2F0d2lja19pbnRlcnJ1cHRzKHNsYXZlLCBtYXhfcmVhbF9pcnFzKTsKIAkJfQogCX0KIAlCVUdfT04obWFzdGVyID09IE5VTEwpOwogCi0JLyogU2V0IHRoZSBoYW5kbGVyIGZvciB0aGUgbWFpbiBQSUMgKi8KLQlmb3IgKCBpID0gMDsgaSA8IG1heF9yZWFsX2lycXMgOyBpKysgKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnBtYWNfcGljOworCS8qCisJICogQWxsb2NhdGUgYW4gaXJxIGhvc3QKKwkgKi8KKwlwbWFjX3BpY19ob3N0ID0gaXJxX2FsbG9jX2hvc3QoSVJRX0hPU1RfTUFQX0xJTkVBUiwgbWF4X2lycXMsCisJCQkJICAgICAgICZwbWFjX3BpY19ob3N0X29wcywKKwkJCQkgICAgICAgbWF4X2lycXMpOworCUJVR19PTihwbWFjX3BpY19ob3N0ID09IE5VTEwpOworCWlycV9zZXRfZGVmYXVsdF9ob3N0KHBtYWNfcGljX2hvc3QpOwogCiAJLyogR2V0IGFkZHJlc3NlcyBvZiBmaXJzdCBjb250cm9sbGVyIGlmIHdlIGhhdmUgYSBub2RlIGZvciBpdCAqLwogCUJVR19PTihvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1hc3RlciwgMCwgJnIpKTsKQEAgLTQ3MywzOSArNDE2LDM4IEBACiAJCQlwbWFjX2lycV9od1tpKytdID0KIAkJCQkodm9sYXRpbGUgc3RydWN0IHBtYWNfaXJxX2h3IF9faW9tZW0gKikKIAkJCQkoYWRkciArIDB4MTApOwotCQlpcnFfY2FzY2FkZSA9IHNsYXZlLT5pbnRyc1swXS5saW5lOworCQlwbWFjX2lycV9jYXNjYWRlID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoc2xhdmUsIDApOwogCiAJCXByaW50ayhLRVJOX0lORk8gImlycTogRm91bmQgc2xhdmUgQXBwbGUgUElDICVzIGZvciAlZCBpcnFzIgogCQkgICAgICAgIiBjYXNjYWRlOiAlZFxuIiwgc2xhdmUtPmZ1bGxfbmFtZSwKLQkJICAgICAgIG1heF9pcnFzIC0gbWF4X3JlYWxfaXJxcywgaXJxX2Nhc2NhZGUpOworCQkgICAgICAgbWF4X2lycXMgLSBtYXhfcmVhbF9pcnFzLCBwbWFjX2lycV9jYXNjYWRlKTsKIAl9CiAJb2Zfbm9kZV9wdXQoc2xhdmUpOwogCi0JLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbiBhbGwgY29udHJvbGxlcnMgKi8KKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGluIGFsbCBjb250cm9sbGVycyAqLwogCWZvciAoaSA9IDA7IGkgKiAzMiA8IG1heF9pcnFzOyArK2kpCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZW5hYmxlLCAwKTsKIAotCS8qIG1hcmsgbGV2ZWwgaW50ZXJydXB0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXhfaXJxczsgaSsrKQotCQlpZiAobGV2ZWxfbWFza1tpID4+IDVdICYgKDFVTCA8PCAoaSAmIDB4MWYpKSkKLQkJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9MRVZFTDsKKwkvKiBIb29rdXAgY2FzY2FkZSBpcnEgKi8KKwlpZiAoc2xhdmUgJiYgcG1hY19pcnFfY2FzY2FkZSAhPSBOT19JUlEpCisJCXNldHVwX2lycShwbWFjX2lycV9jYXNjYWRlLCAmZ2F0d2lja19jYXNjYWRlX2FjdGlvbik7CiAKLQkvKiBTZXR1cCBoYW5kbGVycyBmb3Igc2Vjb25kYXJ5IGNvbnRyb2xsZXIgYW5kIGhvb2sgY2FzY2FkZSBpcnEqLwotCWlmIChzbGF2ZSkgewotCQlmb3IgKCBpID0gbWF4X3JlYWxfaXJxcyA7IGkgPCBtYXhfaXJxcyA7IGkrKyApCi0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmdhdHdpY2tfcGljOwotCQlzZXR1cF9pcnEoaXJxX2Nhc2NhZGUsICZnYXR3aWNrX2Nhc2NhZGVfYWN0aW9uKTsKLQl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiaXJxOiBTeXN0ZW0gaGFzICVkIHBvc3NpYmxlIGludGVycnVwdHNcbiIsIG1heF9pcnFzKTsKICNpZmRlZiBDT05GSUdfWE1PTgotCXNldHVwX2lycSgyMCwgJnhtb25fYWN0aW9uKTsKKwlzZXR1cF9pcnEoaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIDIwLCAwKSwgJnhtb25fYWN0aW9uKTsKICNlbmRpZgogfQogI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCi1zdGF0aWMgaW50IHBtYWNfdTNfY2FzY2FkZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIHBtYWNfdTNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JcmV0dXJuIG1waWNfZ2V0X29uZV9pcnEoKHN0cnVjdCBtcGljICopZGF0YSwgcmVncyk7CisJc3RydWN0IG1waWMgKm1waWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBtcGljX2dldF9vbmVfaXJxKG1waWMsIHJlZ3MpOworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSwgcmVncyk7CisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwbWFjX3BpY19zZXR1cF9tcGljX25taShzdHJ1Y3QgbXBpYyAqbXBpYykKQEAgLTUxNSwyMSArNDU3LDIwIEBACiAJaW50IG5taV9pcnE7CiAKIAlwc3dpdGNoID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInByb2dyYW1tZXItc3dpdGNoIik7Ci0JaWYgKHBzd2l0Y2ggJiYgcHN3aXRjaC0+bl9pbnRycykgewotCQlubWlfaXJxID0gcHN3aXRjaC0+aW50cnNbMF0ubGluZTsKLQkJbXBpY19pcnFfc2V0X3ByaW9yaXR5KG5taV9pcnEsIDkpOwotCQlzZXR1cF9pcnEobm1pX2lycSwgJnhtb25fYWN0aW9uKTsKKwlpZiAocHN3aXRjaCkgeworCQlubWlfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocHN3aXRjaCwgMCk7CisJCWlmIChubWlfaXJxICE9IE5PX0lSUSkgeworCQkJbXBpY19pcnFfc2V0X3ByaW9yaXR5KG5taV9pcnEsIDkpOworCQkJc2V0dXBfaXJxKG5taV9pcnEsICZ4bW9uX2FjdGlvbik7CisJCX0KKwkJb2Zfbm9kZV9wdXQocHN3aXRjaCk7CiAJfQotCW9mX25vZGVfcHV0KHBzd2l0Y2gpOwogI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1hNT04pICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAqLwogfQogCiBzdGF0aWMgc3RydWN0IG1waWMgKiBfX2luaXQgcG1hY19zZXR1cF9vbmVfbXBpYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkJaW50IG1hc3RlcikKIHsKLQl1bnNpZ25lZCBjaGFyIHNlbnNlc1sxMjhdOwotCWludCBvZmZzZXQgPSBtYXN0ZXIgPyAwIDogMTI4OwotCWludCBjb3VudCA9IG1hc3RlciA/IDEyOCA6IDEyNDsKIAljb25zdCBjaGFyICpuYW1lID0gbWFzdGVyID8gIiBNUElDIDEgICAiIDogIiBNUElDIDIgICAiOwogCXN0cnVjdCByZXNvdXJjZSByOwogCXN0cnVjdCBtcGljICptcGljOwpAQCAtNTQyLDggKzQ4Myw2IEBACiAKIAlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9FTkFCTEVfTVBJQywgbnAsIDAsIDApOwogCi0JcHJvbV9nZXRfaXJxX3NlbnNlcyhzZW5zZXMsIG9mZnNldCwgb2Zmc2V0ICsgY291bnQpOwotCiAJZmxhZ3MgfD0gTVBJQ19XQU5UU19SRVNFVDsKIAlpZiAoZ2V0X3Byb3BlcnR5KG5wLCAiYmlnLWVuZGlhbiIsIE5VTEwpKQogCQlmbGFncyB8PSBNUElDX0JJR19FTkRJQU47CkBAIC01NTQsOCArNDkzLDcgQEAKIAlpZiAobWFzdGVyICYmIChmbGFncyAmIE1QSUNfQklHX0VORElBTikpCiAJCWZsYWdzIHw9IE1QSUNfQlJPS0VOX1UzOwogCi0JbXBpYyA9IG1waWNfYWxsb2Moci5zdGFydCwgZmxhZ3MsIDAsIG9mZnNldCwgY291bnQsIG1hc3RlciA/IDI1MiA6IDAsCi0JCQkgIHNlbnNlcywgY291bnQsIG5hbWUpOworCW1waWMgPSBtcGljX2FsbG9jKG5wLCByLnN0YXJ0LCBmbGFncywgMCwgMCwgbmFtZSk7CiAJaWYgKG1waWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTU2OCw2ICs1MDYsNyBAQAogewogCXN0cnVjdCBtcGljICptcGljMSwgKm1waWMyOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICptYXN0ZXIgPSBOVUxMLCAqc2xhdmUgPSBOVUxMOworCXVuc2lnbmVkIGludCBjYXNjYWRlOwogCiAJLyogV2UgY2FuIGhhdmUgdXAgdG8gMiBNUElDcyBjYXNjYWRlZCAqLwogCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgIm9wZW4tcGljIikpCkBAIC02MDQsMTYgKzU0MywyNCBAQAogCW9mX25vZGVfcHV0KG1hc3Rlcik7CiAKIAkvKiBObyBzbGF2ZSwgbGV0J3MgZ28gb3V0ICovCi0JaWYgKHNsYXZlID09IE5VTEwgfHwgc2xhdmUtPm5faW50cnMgPCAxKQorCWlmIChzbGF2ZSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAorCS8qIEdldC9NYXAgc2xhdmUgaW50ZXJydXB0ICovCisJY2FzY2FkZSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHNsYXZlLCAwKTsKKwlpZiAoY2FzY2FkZSA9PSBOT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbWFwIGNhc2NhZGUgSVJRXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbXBpYzIgPSBwbWFjX3NldHVwX29uZV9tcGljKHNsYXZlLCAwKTsKIAlpZiAobXBpYzIgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXR1cCBzbGF2ZSBNUElDXG4iKTsKIAkJb2Zfbm9kZV9wdXQoc2xhdmUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JbXBpY19zZXR1cF9jYXNjYWRlKHNsYXZlLT5pbnRyc1swXS5saW5lLCBwbWFjX3UzX2Nhc2NhZGUsIG1waWMyKTsKKwlzZXRfaXJxX2RhdGEoY2FzY2FkZSwgbXBpYzIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGUsIHBtYWNfdTNfY2FzY2FkZSk7CiAKIAlvZl9ub2RlX3B1dChzbGF2ZSk7CiAJcmV0dXJuIDA7CkBAIC02MjIsNiArNTY5LDE5IEBACiAKIHZvaWQgX19pbml0IHBtYWNfcGljX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJLyogV2UgY29uZmlndXJlIHRoZSBPRiBwYXJzaW5nIGJhc2VkIG9uIG91ciBvbGR3b3JsZCB2cy4gbmV3d29ybGQKKwkgKiBwbGF0Zm9ybSB0eXBlIGFuZCB3ZXRoZXIgd2Ugd2VyZSBib290ZWQgYnkgQm9vdFguCisJICovCisjaWZkZWYgQ09ORklHX1BQQzMyCisJaWYgKCFwbWFjX25ld3dvcmxkKQorCQlmbGFncyB8PSBPRl9JTUFQX09MRFdPUkxEX01BQzsKKwlpZiAoZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LGJvb3R4IiwgTlVMTCkgIT0gTlVMTCkKKwkJZmxhZ3MgfD0gT0ZfSU1BUF9OT19QSEFORExFOworCW9mX2lycV9tYXBfaW5pdChmbGFncyk7CisjZW5kaWYgLyogQ09ORklHX1BQQ18zMiAqLworCiAJLyogV2UgZmlyc3QgdHJ5IHRvIGRldGVjdCBBcHBsZSdzIG5ldyBDb3JlOTkgY2hpcHNldCwgc2luY2UgbWFjLWlvCiAJICogaXMgcXVpdGUgZGlmZmVyZW50IG9uIHRob3NlIG1hY2hpbmVzIGFuZCBjb250YWlucyBhbiBJQk0gTVBJQzIuCiAJICovCkBAIC02NDQsNiArNjA0LDcgQEAKIAogLyogVGhpcyB1c2VkIHRvIGJlIHBhc3NlZCBieSB0aGUgUE1VIGRyaXZlciBidXQgdGhhdCBsaW5rIGdvdAogICogYnJva2VuIHdpdGggdGhlIG5ldyBkcml2ZXIgbW9kZWwuIFdlIHVzZSB0aGlzIHR3ZWFrIGZvciBub3cuLi4KKyAqIFdlIHJlYWxseSB3YW50IHRvIGRvIHRoaW5ncyBkaWZmZXJlbnRseSB0aG91Z2guLi4KICAqLwogc3RhdGljIGludCBwbWFjcGljX2ZpbmRfdmlhaW50KHZvaWQpCiB7CkBAIC02NTcsNyArNjE4LDcgQEAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJ2aWEtcG11Iik7CiAJaWYgKG5wID09IE5VTEwpCiAJCWdvdG8gbm90X2ZvdW5kOwotCXZpYWludCA9IG5wLT5pbnRyc1swXS5saW5lOworCXZpYWludCA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTs7CiAjZW5kaWYgLyogQ09ORklHX0FEQl9QTVUgKi8KIAogbm90X2ZvdW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wbWFjLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaAppbmRleCAyMWM3YjBmLi45NGU3YjI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaApAQCAtMTIsNiArMTIsOCBAQAogCiBzdHJ1Y3QgcnRjX3RpbWU7CiAKK2V4dGVybiBpbnQgcG1hY19uZXd3b3JsZDsKKwogZXh0ZXJuIGxvbmcgcG1hY190aW1lX2luaXQodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwbWFjX2dldF9ib290X3RpbWUodm9pZCk7CiBleHRlcm4gdm9pZCBwbWFjX2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggOWNjN2RiNy4uMzFhOWRhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtMjMsNyArMjMsNiBAQAogICogYm9vdHVwIHNldHVwIHN0dWZmLi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTYwMCwxMyArNTk5LDYgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IHBtYWNfaW5pdF9lYXJseSh2b2lkKQogewotI2lmZGVmIENPTkZJR19QUEM2NAotCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSwgZnJvbSBub3cgb24sIHdlIGNhbiB0YWtlIGhhc2ggZmF1bHRzCi0JICogYW5kIGNhbGwgaW9yZW1hcAotCSAqLwotCWhwdGVfaW5pdF9uYXRpdmUoKTsKLSNlbmRpZgotCiAJLyogRW5hYmxlIGVhcmx5IGJ0ZXh0IGRlYnVnIGlmIHJlcXVlc3RlZCAqLwogCWlmIChzdHJzdHIoY21kX2xpbmUsICJidGV4dGRiZyIpKSB7CiAJCXVkYmdfYWRiX2luaXRfZWFybHkoKTsKQEAgLTYyMSw5ICs2MTMsNiBAQAogCXVkYmdfYWRiX2luaXQoISFzdHJzdHIoY21kX2xpbmUsICJidGV4dGRiZyIpKTsKIAogI2lmZGVmIENPTkZJR19QUEM2NAotCS8qIFNldHVwIGludGVycnVwdCBtYXBwaW5nIG9wdGlvbnMgKi8KLQlwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciA9IElDX09QRU5fUElDOwotCiAJaW9tbXVfaW5pdF9lYXJseV9kYXJ0KCk7CiAjZW5kaWYKIH0KQEAgLTY4Myw2ICs2NzIsOCBAQAogCSAqIHBhcnQgb2YgdGhlIGNhY2hlYWJsZSBsaW5hciBtYXBwaW5nCiAJICovCiAJYWxsb2NfZGFydF90YWJsZSgpOworCisJaHB0ZV9pbml0X25hdGl2ZSgpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2xlZXAuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2xlZXAuUwppbmRleCAyMmIxMTNkLi4xMTc0Y2ExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NsZWVwLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbGVlcC5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggMTA2NWQ4Ny4uODI3YjcxMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC0zNzgsNyArMzc3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcHN1cmdlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IHBzdXJnZV9wcmltYXJ5X2ludHIsCi0JLmZsYWdzID0gU0FfSU5URVJSVVBULAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInByaW1hcnkgSVBJIiwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCmluZGV4IDg5MDc1OGEuLmE0MTczOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCkBAIC05LDcgKzksNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgQmVuamFtaW4gSGVycmVuc2NobWlkdC4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfYWRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfYWRiLmMKaW5kZXggMDZjODI2NS4uNjEyNGU1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX2FkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19hZGIuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCmluZGV4IGI0ZmE5ZjAuLjM3ZTViMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKQEAgLTgsNyArOCw2IEBACiAgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IDBlYzlhNTQuLmFhYWQyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgKgogICogcFNlcmllcyBzeXN0ZW1zIHdpbGwgaXNvbGF0ZSBhIFBDSSBzbG90IGlmIHRoZSBQQ0ktSG9zdAogICogYnJpZGdlIGRldGVjdHMgYWRkcmVzcyBvciBkYXRhIHBhcml0eSBlcnJvcnMsIERNQSdzCi0gKiBvY2N1cmluZyB0byB3aWxkIGFkZHJlc3NlcyAod2hpY2ggdXN1YWxseSBoYXBwZW4gZHVlIHRvCisgKiBvY2N1cnJpbmcgdG8gd2lsZCBhZGRyZXNzZXMgKHdoaWNoIHVzdWFsbHkgaGFwcGVuIGR1ZSB0bwogICogYnVncyBpbiBkZXZpY2UgZHJpdmVycyBvciBpbiBQQ0kgYWRhcHRlciBmaXJtd2FyZSkuCiAgKiBTbG90IGlzb2xhdGlvbnMgYWxzbyBvY2N1ciBpZiAjU0VSUiwgI1BFUlIgb3Igb3RoZXIgbWlzYwogICogUENJLXJlbGF0ZWQgZXJyb3JzIGFyZSBkZXRlY3RlZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggZDAzYThiMC4uZDY3YWYyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC05Miw2ICs5MSwxNSBAQAogCQkqKHRjZXArKykgPSAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0Y2VfZ2V0X3BzZXJpZXMoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgpCit7CisJdTY0ICp0Y2VwOworCisJaW5kZXggPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKKwl0Y2VwID0gKCh1NjQgKil0YmwtPml0X2Jhc2UpICsgaW5kZXg7CisKKwlyZXR1cm4gKnRjZXA7Cit9CiAKIHN0YXRpYyB2b2lkIHRjZV9idWlsZF9wU2VyaWVzTFAoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgdGNlbnVtLAogCQkJCWxvbmcgbnBhZ2VzLCB1bnNpZ25lZCBsb25nIHVhZGRyLApAQCAtMjM1LDYgKzI0MywyNSBAQAogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgdGNlX2dldF9wU2VyaWVzTFAoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgdGNlbnVtKQoreworCXU2NCByYzsKKwl1bnNpZ25lZCBsb25nIHRjZV9yZXQ7CisKKwl0Y2VudW0gPDw9IFRDRV9QQUdFX0ZBQ1RPUjsKKwlyYyA9IHBscGFyX3RjZV9nZXQoKHU2NCl0YmwtPml0X2luZGV4LCAodTY0KXRjZW51bSA8PCAxMiwgJnRjZV9yZXQpOworCisJaWYgKHJjICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoInRjZV9nZXRfcFNlcmllc0xQOiBwbHBhcl90Y2VfZ2V0IGZhaWxlZC4gcmM9JWxkXG4iLAorCQkJcmMpOworCQlwcmludGsoIlx0aW5kZXggICA9IDB4JWx4XG4iLCAodTY0KXRibC0+aXRfaW5kZXgpOworCQlwcmludGsoIlx0dGNlbnVtICA9IDB4JWx4XG4iLCAodTY0KXRjZW51bSk7CisJCXNob3dfc3RhY2soY3VycmVudCwgKHVuc2lnbmVkIGxvbmcgKilfX2dldF9TUCgpKTsKKwl9CisKKwlyZXR1cm4gdGNlX3JldDsKK30KKwogc3RhdGljIHZvaWQgaW9tbXVfdGFibGVfc2V0cGFybXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIsCiAJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCiAJCQkJIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKQpAQCAtMjU0LDcgKzI4MSwxMCBAQAogCX0KIAogCXRibC0+aXRfYmFzZSA9ICh1bnNpZ25lZCBsb25nKV9fdmEoKmJhc2VwKTsKKworI2lmbmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogCW1lbXNldCgodm9pZCAqKXRibC0+aXRfYmFzZSwgMCwgKnNpemVwKTsKKyNlbmRpZgogCiAJdGJsLT5pdF9idXNubyA9IHBoYi0+YnVzLT5udW1iZXI7CiAKQEAgLTU2MCwxMSArNTkwLDEzIEBACiAJCQlwcGNfbWQudGNlX2J1aWxkID0gdGNlX2J1aWxkX3BTZXJpZXNMUDsKIAkJCXBwY19tZC50Y2VfZnJlZQkgPSB0Y2VfZnJlZV9wU2VyaWVzTFA7CiAJCX0KKwkJcHBjX21kLnRjZV9nZXQgICA9IHRjZV9nZXRfcFNlcmllc0xQOwogCQlwcGNfbWQuaW9tbXVfYnVzX3NldHVwID0gaW9tbXVfYnVzX3NldHVwX3BTZXJpZXNMUDsKIAkJcHBjX21kLmlvbW11X2Rldl9zZXR1cCA9IGlvbW11X2Rldl9zZXR1cF9wU2VyaWVzTFA7CiAJfSBlbHNlIHsKIAkJcHBjX21kLnRjZV9idWlsZCA9IHRjZV9idWlsZF9wU2VyaWVzOwogCQlwcGNfbWQudGNlX2ZyZWUgID0gdGNlX2ZyZWVfcFNlcmllczsKKwkJcHBjX21kLnRjZV9nZXQgICA9IHRjZV9nZXRfcHNlcmllczsKIAkJcHBjX21kLmlvbW11X2J1c19zZXR1cCA9IGlvbW11X2J1c19zZXR1cF9wU2VyaWVzOwogCQlwcGNfbWQuaW9tbXVfZGV2X3NldHVwID0gaW9tbXVfZGV2X3NldHVwX3BTZXJpZXM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKaW5kZXggNjM0YjdkMC4uM2FlYjQwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICN1bmRlZiBERUJVR19MT1cKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgpAQCAtNTEzLDcgKzUxMiw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBTZXJpZXNfbHBhcl90bGJpZV9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgaHB0ZV9pbml0X2xwYXIodm9pZCkKK3ZvaWQgX19pbml0IGhwdGVfaW5pdF9scGFyKHZvaWQpCiB7CiAJcHBjX21kLmhwdGVfaW52YWxpZGF0ZQk9IHBTZXJpZXNfbHBhcl9ocHRlX2ludmFsaWRhdGU7CiAJcHBjX21kLmhwdGVfdXBkYXRlcHAJPSBwU2VyaWVzX2xwYXJfaHB0ZV91cGRhdGVwcDsKQEAgLTUyMiw2ICs1MjEsNCBAQAogCXBwY19tZC5ocHRlX3JlbW92ZQk9IHBTZXJpZXNfbHBhcl9ocHRlX3JlbW92ZTsKIAlwcGNfbWQuZmx1c2hfaGFzaF9yYW5nZQk9IHBTZXJpZXNfbHBhcl9mbHVzaF9oYXNoX3JhbmdlOwogCXBwY19tZC5ocHRlX2NsZWFyX2FsbCAgID0gcFNlcmllc19scGFyX2hwdGFiX2NsZWFyOwotCi0JaHRhYl9maW5pc2hfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCmluZGV4IDk2MzljNjYuLjlkZjc4MzA4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYwpAQCAtNzIsMzIgKzcyLDYyIEBACiAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAotc3RhdGljIHZvaWQgcmVxdWVzdF9yYXNfaXJxcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjaGFyICpwcm9wbmFtZSwKKworc3RhdGljIHZvaWQgcmVxdWVzdF9yYXNfaXJxcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCiAJCQljb25zdCBjaGFyICpuYW1lKQogewotCXVuc2lnbmVkIGludCAqaXJlZywgbGVuLCBpOwotCWludCB2aXJxLCBuX2ludHI7CisJaW50IGksIGluZGV4LCBjb3VudCA9IDA7CisJc3RydWN0IG9mX2lycSBvaXJxOworCXUzMiAqb3BpY3Byb3A7CisJdW5zaWduZWQgaW50IG9waWNwbGVuOworCXVuc2lnbmVkIGludCB2aXJxc1sxNl07CiAKLQlpcmVnID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShucCwgcHJvcG5hbWUsICZsZW4pOwotCWlmIChpcmVnID09IE5VTEwpCi0JCXJldHVybjsKLQluX2ludHIgPSBwcm9tX25faW50cl9jZWxscyhucCk7Ci0JbGVuIC89IG5faW50ciAqIHNpemVvZigqaXJlZyk7CisJLyogQ2hlY2sgZm9yIG9ic29sZXRlICJvcGVuLXBpYy1pbnRlcnJ1cHQiIHByb3BlcnR5LiBJZiBwcmVzZW50LCB0aGVuCisJICogbWFwIHRob3NlIGludGVycnVwdHMgdXNpbmcgdGhlIGRlZmF1bHQgaW50ZXJydXB0IGhvc3QgYW5kIGRlZmF1bHQKKwkgKiB0cmlnZ2VyCisJICovCisJb3BpY3Byb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAib3Blbi1waWMtaW50ZXJydXB0IiwgJm9waWNwbGVuKTsKKwlpZiAob3BpY3Byb3ApIHsKKwkJb3BpY3BsZW4gLz0gc2l6ZW9mKHUzMik7CisJCWZvciAoaSA9IDA7IGkgPCBvcGljcGxlbjsgaSsrKSB7CisJCQlpZiAoY291bnQgPiAxNSkKKwkJCQlicmVhazsKKwkJCXZpcnFzW2NvdW50XSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCAqKG9waWNwcm9wKyspLAorCQkJCQkJCSBJUlFfVFlQRV9OT05FKTsKKwkJCWlmICh2aXJxc1tjb3VudF0gPT0gTk9fSVJRKQorCQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCAiCisJCQkJICAgICAgICJudW1iZXIgZm9yICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJCWVsc2UKKwkJCQljb3VudCsrOwogCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXZpcnEgPSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZygqaXJlZyk7Ci0JCWlmICh2aXJxID09IE5PX0lSUSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICIKLQkJCSAgICAgICAibnVtYmVyIGZvciAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0JCQlyZXR1cm47CiAJCX0KLQkJaWYgKHJlcXVlc3RfaXJxKGlycV9vZmZzZXRfdXAodmlycSksIGhhbmRsZXIsIDAsIG5hbWUsIE5VTEwpKSB7CisJfQorCS8qIEVsc2UgdXNlIG5vcm1hbCBpbnRlcnJ1cHQgdHJlZSBwYXJzaW5nICovCisJZWxzZSB7CisJCS8qIEZpcnN0IHRyeSB0byBkbyBhIHByb3BlciBPRiB0cmVlIHBhcnNpbmcgKi8KKwkJZm9yIChpbmRleCA9IDA7IG9mX2lycV9tYXBfb25lKG5wLCBpbmRleCwgJm9pcnEpID09IDA7CisJCSAgICAgaW5kZXgrKykgeworCQkJaWYgKGNvdW50ID4gMTUpCisJCQkJYnJlYWs7CisJCQl2aXJxc1tjb3VudF0gPSBpcnFfY3JlYXRlX29mX21hcHBpbmcob2lycS5jb250cm9sbGVyLAorCQkJCQkJCSAgICBvaXJxLnNwZWNpZmllciwKKwkJCQkJCQkgICAgb2lycS5zaXplKTsKKwkJCWlmICh2aXJxc1tjb3VudF0gPT0gTk9fSVJRKQorCQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCAiCisJCQkJICAgICAgICJudW1iZXIgZm9yICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJCWVsc2UKKwkJCQljb3VudCsrOworCQl9CisJfQorCisJLyogTm93IHJlcXVlc3QgdGhlbSAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChyZXF1ZXN0X2lycSh2aXJxc1tpXSwgaGFuZGxlciwgMCwgbmFtZSwgTlVMTCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0ICVkIGZvciAiCi0JCQkgICAgICAgIiVzXG4iLCBpcnFfb2Zmc2V0X3VwKHZpcnEpLCBucC0+ZnVsbF9uYW1lKTsKKwkJCSAgICAgICAiJXNcbiIsIHZpcnFzW2ldLCBucC0+ZnVsbF9uYW1lKTsKIAkJCXJldHVybjsKIAkJfQotCQlpcmVnICs9IG5faW50cjsKIAl9CiB9CiAKQEAgLTExNSwyMCArMTQ1LDE0IEBACiAJLyogSW50ZXJuYWwgRXJyb3JzICovCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2V2ZW50LXNvdXJjZXMvaW50ZXJuYWwtZXJyb3JzIik7CiAJaWYgKG5wICE9IE5VTEwpIHsKLQkJcmVxdWVzdF9yYXNfaXJxcyhucCwgIm9wZW4tcGljLWludGVycnVwdCIsIHJhc19lcnJvcl9pbnRlcnJ1cHQsCi0JCQkJICJSQVNfRVJST1IiKTsKLQkJcmVxdWVzdF9yYXNfaXJxcyhucCwgImludGVycnVwdHMiLCByYXNfZXJyb3JfaW50ZXJydXB0LAotCQkJCSAiUkFTX0VSUk9SIik7CisJCXJlcXVlc3RfcmFzX2lycXMobnAsIHJhc19lcnJvcl9pbnRlcnJ1cHQsICJSQVNfRVJST1IiKTsKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0KIAogCS8qIEVQT1cgRXZlbnRzICovCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2V2ZW50LXNvdXJjZXMvZXBvdy1ldmVudHMiKTsKIAlpZiAobnAgIT0gTlVMTCkgewotCQlyZXF1ZXN0X3Jhc19pcnFzKG5wLCAib3Blbi1waWMtaW50ZXJydXB0IiwgcmFzX2Vwb3dfaW50ZXJydXB0LAotCQkJCSAiUkFTX0VQT1ciKTsKLQkJcmVxdWVzdF9yYXNfaXJxcyhucCwgImludGVycnVwdHMiLCByYXNfZXBvd19pbnRlcnJ1cHQsCi0JCQkJICJSQVNfRVBPVyIpOworCQlyZXF1ZXN0X3Jhc19pcnFzKG5wLCByYXNfZXBvd19pbnRlcnJ1cHQsICJSQVNfRVBPVyIpOwogCQlvZl9ub2RlX3B1dChucCk7CiAJfQogCkBAIC0xNjIsNyArMTg2LDcgQEAKIAogCXN0YXR1cyA9IHJ0YXNfY2FsbChyYXNfY2hlY2tfZXhjZXB0aW9uX3Rva2VuLCA2LCAxLCBOVUxMLAogCQkJICAgUkFTX1ZFQ1RPUl9PRkZTRVQsCi0JCQkgICB2aXJ0X2lycV90b19yZWFsKGlycV9vZmZzZXRfZG93bihpcnEpKSwKKwkJCSAgIGlycV9tYXBbaXJxXS5od2lycSwKIAkJCSAgIFJUQVNfRVBPV19XQVJOSU5HIHwgUlRBU19QT1dFUk1HTV9FVkVOVFMsCiAJCQkgICBjcml0aWNhbCwgX19wYSgmcmFzX2xvZ19idWYpLAogCQkJCXJ0YXNfZ2V0X2Vycm9yX2xvZ19tYXgoKSk7CkBAIC0xOTgsNyArMjIyLDcgQEAKIAogCXN0YXR1cyA9IHJ0YXNfY2FsbChyYXNfY2hlY2tfZXhjZXB0aW9uX3Rva2VuLCA2LCAxLCBOVUxMLAogCQkJICAgUkFTX1ZFQ1RPUl9PRkZTRVQsCi0JCQkgICB2aXJ0X2lycV90b19yZWFsKGlycV9vZmZzZXRfZG93bihpcnEpKSwKKwkJCSAgIGlycV9tYXBbaXJxXS5od2lycSwKIAkJCSAgIFJUQVNfSU5URVJOQUxfRVJST1IsIDEgLypUaW1lIENyaXRpY2FsICovLAogCQkJICAgX19wYSgmcmFzX2xvZ19idWYpLAogCQkJCXJ0YXNfZ2V0X2Vycm9yX2xvZ19tYXgoKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IDFlMjg1MTguLjU0YTUyNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNzcsNiArNzYsOSBAQAogI2RlZmluZSBEQkcoZm10Li4uKQogI2VuZGlmCiAKKy8qIG1vdmUgdGhvc2UgYXdheSB0byBhIC5oICovCitleHRlcm4gdm9pZCBzbXBfaW5pdF9wc2VyaWVzX21waWModm9pZCk7CitleHRlcm4gdm9pZCBzbXBfaW5pdF9wc2VyaWVzX3hpY3Modm9pZCk7CiBleHRlcm4gdm9pZCBmaW5kX3VkYmdfdnRlcm0odm9pZCk7CiAKIGludCBmd25taV9hY3RpdmU7ICAvKiBUUlVFIGlmIGFuIEZXTk1JIGhhbmRsZXIgaXMgcHJlc2VudCAqLwpAQCAtODQsNyArODYsNyBAQAogc3RhdGljIHZvaWQgcHNlcmllc19zaGFyZWRfaWRsZV9zbGVlcCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBzZXJpZXNfZGVkaWNhdGVkX2lkbGVfc2xlZXAodm9pZCk7CiAKLXN0cnVjdCBtcGljICpwU2VyaWVzX21waWM7CitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpwU2VyaWVzX21waWNfbm9kZTsKIAogc3RhdGljIHZvaWQgcFNlcmllc19zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewpAQCAtMTE5LDYzICsxMjEsOTIgQEAKIAkJZndubWlfYWN0aXZlID0gMTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHBTZXJpZXNfaW5pdF9tcGljKHZvaWQpCit2b2lkIHBzZXJpZXNfODI1OV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCAqYWRkcnA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1bnNpZ25lZCBsb25nIGludGFjayA9IDA7Ci0KLQkvKiBBbGwgSVNVcyBhcmUgc2V0dXAsIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uICovCi0JbXBpY19pbml0KHBTZXJpZXNfbXBpYyk7Ci0KLQkvKiBDaGVjayB3aGF0IGtpbmQgb2YgY2FzY2FkZSBBQ0sgd2UgaGF2ZSAqLwotICAgICAgICBpZiAoIShucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwY2kiKSkKLSAgICAgICAgICAgIHx8ICEoYWRkcnAgPSAodW5zaWduZWQgaW50ICopCi0gICAgICAgICAgICAgICAgIGdldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwgTlVMTCkpKQotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgcGNpIHRvIGdldCBhY2sgYWRkcmVzc1xuIik7Ci0gICAgICAgIGVsc2UKLQkJaW50YWNrID0gYWRkcnBbcHJvbV9uX2FkZHJfY2VsbHMobnApLTFdOwotCW9mX25vZGVfcHV0KG5wKTsKLQotCS8qIFNldHVwIHRoZSBsZWdhY3kgaW50ZXJydXB0cyAmIGNvbnRyb2xsZXIgKi8KLQlpODI1OV9pbml0KGludGFjaywgMCk7Ci0KLQkvKiBIb29rIGNhc2NhZGUgdG8gbXBpYyAqLwotCW1waWNfc2V0dXBfY2FzY2FkZShOVU1fSVNBX0lOVEVSUlVQVFMsIGk4MjU5X2lycV9jYXNjYWRlLCBOVUxMKTsKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBpODI1OV9pcnEocmVncyk7CisJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxLCByZWdzKTsKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHBTZXJpZXNfc2V0dXBfbXBpYyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHBzZXJpZXNfbXBpY19pbml0X0lSUSh2b2lkKQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpvbGQsICpjYXNjYWRlID0gTlVMTDsKKyAgICAgICAgdW5zaWduZWQgaW50ICphZGRycDsKKwl1bnNpZ25lZCBsb25nIGludGFjayA9IDA7CiAJdW5zaWduZWQgaW50ICpvcHByb3A7CiAJdW5zaWduZWQgbG9uZyBvcGVucGljX2FkZHIgPSAwOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHNlbnNlc1tOUl9JUlFTIC0gTlVNX0lTQV9JTlRFUlJVUFRTXTsKLSAgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpyb290OwotCWludCBpcnFfY291bnQ7CisJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOworCWludCBuYWRkciwgbiwgaSwgb3BwbGVuOworCXN0cnVjdCBtcGljICptcGljOwogCi0JLyogRmluZCB0aGUgT3BlbiBQSUMgaWYgcHJlc2VudCAqLwotCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCW9wcHJvcCA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KHJvb3QsICJwbGF0Zm9ybS1vcGVuLXBpYyIsIE5VTEwpOworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwluYWRkciA9IHByb21fbl9hZGRyX2NlbGxzKG5wKTsKKwlvcHByb3AgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShucCwgInBsYXRmb3JtLW9wZW4tcGljIiwgJm9wcGxlbik7CiAJaWYgKG9wcHJvcCAhPSAwKSB7Ci0JCWludCBuID0gcHJvbV9uX2FkZHJfY2VsbHMocm9vdCk7Ci0KLQkJZm9yIChvcGVucGljX2FkZHIgPSAwOyBuID4gMDsgLS1uKQotCQkJb3BlbnBpY19hZGRyID0gKG9wZW5waWNfYWRkciA8PCAzMikgKyAqb3Bwcm9wKys7CisJCW9wZW5waWNfYWRkciA9IG9mX3JlYWRfbnVtYmVyKG9wcHJvcCwgbmFkZHIpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiT3BlblBJQyBhZGRyOiAlbHhcbiIsIG9wZW5waWNfYWRkcik7CiAJfQotCW9mX25vZGVfcHV0KHJvb3QpOworCW9mX25vZGVfcHV0KG5wKTsKIAogCUJVR19PTihvcGVucGljX2FkZHIgPT0gMCk7CiAKLQkvKiBHZXQgdGhlIHNlbnNlIHZhbHVlcyBmcm9tIE9GICovCi0JcHJvbV9nZXRfaXJxX3NlbnNlcyhzZW5zZXMsIE5VTV9JU0FfSU5URVJSVVBUUywgTlJfSVJRUyk7Ci0JCiAJLyogU2V0dXAgdGhlIG9wZW5waWMgZHJpdmVyICovCi0JaXJxX2NvdW50ID0gTlJfSVJRUyAtIE5VTV9JU0FfSU5URVJSVVBUUyAtIDQ7IC8qIGxlYXZlIHJvb20gZm9yIElQSXMgKi8KLQlwU2VyaWVzX21waWMgPSBtcGljX2FsbG9jKG9wZW5waWNfYWRkciwgTVBJQ19QUklNQVJZLAotCQkJCSAgMTYsIDE2LCBpcnFfY291bnQsIC8qIGlzdSBzaXplLCBpcnEgb2Zmc2V0LCBpcnEgY291bnQgKi8gCi0JCQkJICBOUl9JUlFTIC0gNCwgLyogaXBpIG9mZnNldCAqLwotCQkJCSAgc2Vuc2VzLCBpcnFfY291bnQsIC8qIHNlbnNlICYgc2Vuc2Ugc2l6ZSAqLwotCQkJCSAgIiBNUElDICAgICAiKTsKKwltcGljID0gbXBpY19hbGxvYyhwU2VyaWVzX21waWNfbm9kZSwgb3BlbnBpY19hZGRyLAorCQkJICBNUElDX1BSSU1BUlksCisJCQkgIDE2LCAyNTAsIC8qIGlzdSBzaXplLCBpcnEgY291bnQgKi8KKwkJCSAgIiBNUElDICAgICAiKTsKKwlCVUdfT04obXBpYyA9PSBOVUxMKTsKKworCS8qIEFkZCBJU1VzICovCisJb3BwbGVuIC89IHNpemVvZih1MzIpOworCWZvciAobiA9IDAsIGkgPSBuYWRkcjsgaSA8IG9wcGxlbjsgaSArPSBuYWRkciwgbisrKSB7CisJCXVuc2lnbmVkIGxvbmcgaXN1YWRkciA9IG9mX3JlYWRfbnVtYmVyKG9wcHJvcCArIGksIG5hZGRyKTsKKwkJbXBpY19hc3NpZ25faXN1KG1waWMsIG4sIGlzdWFkZHIpOworCX0KKworCS8qIEFsbCBJU1VzIGFyZSBzZXR1cCwgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gKi8KKwltcGljX2luaXQobXBpYyk7CisKKwkvKiBMb29rIGZvciBjYXNjYWRlICovCisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKQorCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJjaHJwLGlpYyIpKSB7CisJCQljYXNjYWRlID0gbnA7CisJCQlicmVhazsKKwkJfQorCWlmIChjYXNjYWRlID09IE5VTEwpCisJCXJldHVybjsKKworCWNhc2NhZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2FzY2FkZSwgMCk7CisJaWYgKGNhc2NhZGUgPT0gTk9fSVJRKSB7CisJCXByaW50ayhLRVJOX0VSUiAieGljczogZmFpbGVkIHRvIG1hcCBjYXNjYWRlIGludGVycnVwdCIpOworCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgQUNLIHR5cGUgKi8KKwlmb3IgKG9sZCA9IG9mX25vZGVfZ2V0KGNhc2NhZGUpOyBvbGQgIT0gTlVMTCA7IG9sZCA9IG5wKSB7CisJCW5wID0gb2ZfZ2V0X3BhcmVudChvbGQpOworCQlvZl9ub2RlX3B1dChvbGQpOworCQlpZiAobnAgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAicGNpIikgIT0gMCkKKwkJCWNvbnRpbnVlOworCQlhZGRycCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICI4MjU5LWludGVycnVwdC1hY2tub3dsZWRnZSIsCisJCQkJCSAgICBOVUxMKTsKKwkJaWYgKGFkZHJwID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJbmFkZHIgPSBwcm9tX25fYWRkcl9jZWxscyhucCk7CisJCWludGFjayA9IGFkZHJwW25hZGRyLTFdOworCQlpZiAobmFkZHIgPiAxKQorCQkJaW50YWNrIHw9ICgodW5zaWduZWQgbG9uZylhZGRycFtuYWRkci0yXSkgPDwgMzI7CisJfQorCWlmIChpbnRhY2spCisJCXByaW50ayhLRVJOX0RFQlVHICJtcGljOiBQQ0kgODI1OSBpbnRhY2sgYXQgMHglMDE2bHhcbiIsCisJCSAgICAgICBpbnRhY2spOworCWk4MjU5X2luaXQoY2FzY2FkZSwgaW50YWNrKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihjYXNjYWRlX2lycSwgcHNlcmllc184MjU5X2Nhc2NhZGUpOwogfQogCiBzdGF0aWMgdm9pZCBwc2VyaWVzX2xwYXJfZW5hYmxlX3BtY3Modm9pZCkKQEAgLTE5MywyMyArMjI0LDY3IEBACiAJCWdldF9scHBhY2EoKS0+cG1jcmVnc19pbl91c2UgPSAxOwogfQogCisjaWZkZWYgQ09ORklHX0tFWEVDCitzdGF0aWMgdm9pZCBwc2VyaWVzX2tleGVjX2NwdV9kb3duX21waWMoaW50IGNyYXNoX3NodXRkb3duLCBpbnQgc2Vjb25kYXJ5KQoreworCW1waWNfdGVhcmRvd25fdGhpc19jcHUoc2Vjb25kYXJ5KTsKK30KKworc3RhdGljIHZvaWQgcHNlcmllc19rZXhlY19jcHVfZG93bl94aWNzKGludCBjcmFzaF9zaHV0ZG93biwgaW50IHNlY29uZGFyeSkKK3sKKwkvKiBEb24ndCByaXNrIGEgaHlwZXJ2aXNvciBjYWxsIGlmIHdlJ3JlIGNyYXNoaW5nICovCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSAmJiAhY3Jhc2hfc2h1dGRvd24pIHsKKwkJdW5zaWduZWQgbG9uZyB2cGEgPSBfX3BhKGdldF9scHBhY2EoKSk7CisKKwkJaWYgKHVucmVnaXN0ZXJfdnBhKGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLCB2cGEpKSB7CisJCQlwcmludGsoIlZQQSBkZXJlZ2lzdHJhdGlvbiBvZiBjcHUgJXUgKGh3X2NwdV9pZCAlZCkgIgorCQkJCQkiZmFpbGVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJfQorCX0KKwl4aWNzX3RlYXJkb3duX2NwdShzZWNvbmRhcnkpOworfQorI2VuZGlmIC8qIENPTkZJR19LRVhFQyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgcHNlcmllc19kaXNjb3Zlcl9waWModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWNoYXIgKnR5cGVwOworCisJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKG5wLAorCQkJCQkJICAgImludGVycnVwdC1jb250cm9sbGVyIikpOykgeworCQl0eXBlcCA9IChjaGFyICopZ2V0X3Byb3BlcnR5KG5wLCAiY29tcGF0aWJsZSIsIE5VTEwpOworCQlpZiAoc3Ryc3RyKHR5cGVwLCAib3Blbi1waWMiKSkgeworCQkJcFNlcmllc19tcGljX25vZGUgPSBvZl9ub2RlX2dldChucCk7CisJCQlwcGNfbWQuaW5pdF9JUlEgICAgICAgPSBwc2VyaWVzX21waWNfaW5pdF9JUlE7CisJCQlwcGNfbWQuZ2V0X2lycSAgICAgICAgPSBtcGljX2dldF9pcnE7CisjaWZkZWYgQ09ORklHX0tFWEVDCisJCQlwcGNfbWQua2V4ZWNfY3B1X2Rvd24gPSBwc2VyaWVzX2tleGVjX2NwdV9kb3duX21waWM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU01QCisJCQlzbXBfaW5pdF9wc2VyaWVzX21waWMoKTsKKyNlbmRpZgorCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHN0cnN0cih0eXBlcCwgInBwYy14aWNwIikpIHsKKwkJCXBwY19tZC5pbml0X0lSUSAgICAgICA9IHhpY3NfaW5pdF9JUlE7CisjaWZkZWYgQ09ORklHX0tFWEVDCisJCQlwcGNfbWQua2V4ZWNfY3B1X2Rvd24gPSBwc2VyaWVzX2tleGVjX2NwdV9kb3duX3hpY3M7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU01QCisJCQlzbXBfaW5pdF9wc2VyaWVzX3hpY3MoKTsKKyNlbmRpZgorCQkJcmV0dXJuOworCQl9CisJfQorCXByaW50ayhLRVJOX0VSUiAicFNlcmllc19kaXNjb3Zlcl9waWM6IGZhaWxlZCB0byByZWNvZ25pemUiCisJICAgICAgICIgaW50ZXJydXB0LWNvbnRyb2xsZXJcbiIpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcFNlcmllc19zZXR1cF9hcmNoKHZvaWQpCiB7Ci0JLyogRml4dXAgcHBjX21kIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotCWlmIChwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciA9PSBJQ19PUEVOX1BJQykgewotCQlwcGNfbWQuaW5pdF9JUlEgICAgICAgPSBwU2VyaWVzX2luaXRfbXBpYzsKLQkJcHBjX21kLmdldF9pcnEgICAgICAgID0gbXBpY19nZXRfaXJxOwotCQkvKiBBbGxvY2F0ZSB0aGUgbXBpYyBub3csIHNvIHRoYXQgZmluZF9hbmRfaW5pdF9waGJzKCkgY2FuCi0JCSAqIGZpbGwgdGhlIElTVXMgKi8KLQkJcFNlcmllc19zZXR1cF9tcGljKCk7Ci0JfSBlbHNlIHsKLQkJcHBjX21kLmluaXRfSVJRICAgICAgID0geGljc19pbml0X0lSUTsKLQkJcHBjX21kLmdldF9pcnEgICAgICAgID0geGljc19nZXRfaXJxOwotCX0KKwkvKiBEaXNjb3ZlciBQSUMgdHlwZSBhbmQgc2V0dXAgcHBjX21kIGFjY29yZGluZ2x5ICovCisJcHNlcmllc19kaXNjb3Zlcl9waWMoKTsKIAotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfaW5pdF9wU2VyaWVzKCk7Ci0jZW5kaWYKIAkvKiBvcGVucGljIGdsb2JhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICg2NC1iaXQgZm9ybWF0KS4gKi8KIAkvKiBvcGVucGljIEludGVycnVwdCBTb3VyY2UgVW5pdCBwb2ludGVyICg2NC1iaXQgZm9ybWF0KS4gKi8KIAkvKiBweXRob24wIGZhY2lsaXR5IGFyZWEgKG1taW8pICg2NC1iaXQgZm9ybWF0KSBSRUFMIGFkZHJlc3MuICovCkBAIC0yNjEsNDEgKzMzNiwxMSBAQAogfQogYXJjaF9pbml0Y2FsbChwU2VyaWVzX2luaXRfcGFuZWwpOwogCi1zdGF0aWMgIHZvaWQgX19pbml0IHBTZXJpZXNfZGlzY292ZXJfcGljKHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQljaGFyICp0eXBlcDsKLQotCS8qCi0JICogU2V0dXAgaW50ZXJydXB0IG1hcHBpbmcgb3B0aW9ucyB0aGF0IGFyZSBuZWVkZWQgZm9yIGZpbmlzaF9kZXZpY2VfdHJlZQotCSAqIHRvIHByb3Blcmx5IHBhcnNlIHRoZSBPRiBpbnRlcnJ1cHQgdHJlZSAmIGRvIHRoZSB2aXJ0dWFsIGlycSBtYXBwaW5nCi0JICovCi0JX19pcnFfb2Zmc2V0X3ZhbHVlID0gTlVNX0lTQV9JTlRFUlJVUFRTOwotCXBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyID0gSUNfSU5WQUxJRDsKLQlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpKTspIHsKLQkJdHlwZXAgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShucCwgImNvbXBhdGlibGUiLCBOVUxMKTsKLQkJaWYgKHN0cnN0cih0eXBlcCwgIm9wZW4tcGljIikpIHsKLQkJCXBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyID0gSUNfT1BFTl9QSUM7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChzdHJzdHIodHlwZXAsICJwcGMteGljcCIpKSB7Ci0JCQlwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciA9IElDX1BQQ19YSUM7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAocHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPT0gSUNfSU5WQUxJRCkKLQkJcHJpbnRrKCJwU2VyaWVzX2Rpc2NvdmVyX3BpYzogZmFpbGVkIHRvIHJlY29nbml6ZSIKLQkJCSIgaW50ZXJydXB0LWNvbnRyb2xsZXJcbiIpOwotCi19Ci0KIHN0YXRpYyB2b2lkIHBTZXJpZXNfbWFjaF9jcHVfZGllKHZvaWQpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlpZGxlX3Rhc2tfZXhpdCgpOwotCS8qIFNvbWUgaGFyZHdhcmUgcmVxdWlyZXMgY2xlYXJpbmcgdGhlIENQUFIsIHdoaWxlIG90aGVyIGhhcmR3YXJlIGRvZXMgbm90Ci0JICogaXQgaXMgc2FmZSBlaXRoZXIgd2F5Ci0JICovCi0JcFNlcmllc0xQX2NwcHJfaW5mbygwLCAwKTsKKwl4aWNzX3RlYXJkb3duX2NwdSgwKTsKIAlydGFzX3N0b3Bfc2VsZigpOwogCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZS4uLiAqLwogCUJVRygpOwpAQCAtMzIyLDExICszNjcsNiBAQAogCURCRygiIC0+IHBTZXJpZXNfaW5pdF9lYXJseSgpXG4iKTsKIAogCWZ3X2ZlYXR1cmVfaW5pdCgpOwotCQotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlocHRlX2luaXRfbHBhcigpOwotCWVsc2UKLQkJaHB0ZV9pbml0X25hdGl2ZSgpOwogCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCWZpbmRfdWRiZ192dGVybSgpOwpAQCAtMzM4LDggKzM3OCw2IEBACiAKIAlpb21tdV9pbml0X2Vhcmx5X3BTZXJpZXMoKTsKIAotCXBTZXJpZXNfZGlzY292ZXJfcGljKCk7Ci0KIAlEQkcoIiA8LSBwU2VyaWVzX2luaXRfZWFybHkoKVxuIik7CiB9CiAKQEAgLTM4NCw2ICs0MjIsMTEgQEAKIAlpZiAob2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGh5cGVydGFzLWZ1bmN0aW9ucyIsIE5VTEwpICE9IE5VTEwpCiAgCQlwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzIHw9IEZXX0ZFQVRVUkVfTFBBUjsKIAorCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlocHRlX2luaXRfbHBhcigpOworCWVsc2UKKwkJaHB0ZV9pbml0X25hdGl2ZSgpOworCiAgCXJldHVybiAxOwogfQogCkBAIC01MDYsMjcgKzU0OSw2IEBACiAJcmV0dXJuIFBDSV9QUk9CRV9OT1JNQUw7CiB9CiAKLSNpZmRlZiBDT05GSUdfS0VYRUMKLXN0YXRpYyB2b2lkIHBzZXJpZXNfa2V4ZWNfY3B1X2Rvd24oaW50IGNyYXNoX3NodXRkb3duLCBpbnQgc2Vjb25kYXJ5KQotewotCS8qIERvbid0IHJpc2sgYSBoeXBlcnZpc29yIGNhbGwgaWYgd2UncmUgY3Jhc2hpbmcgKi8KLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpICYmICFjcmFzaF9zaHV0ZG93bikgewotCQl1bnNpZ25lZCBsb25nIHZwYSA9IF9fcGEoZ2V0X2xwcGFjYSgpKTsKLQotCQlpZiAodW5yZWdpc3Rlcl92cGEoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIHZwYSkpIHsKLQkJCXByaW50aygiVlBBIGRlcmVnaXN0cmF0aW9uIG9mIGNwdSAldSAoaHdfY3B1X2lkICVkKSAiCi0JCQkJCSJmYWlsZWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwKLQkJCQkJaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCQl9Ci0JfQotCi0JaWYgKHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyID09IElDX09QRU5fUElDKQotCQltcGljX3RlYXJkb3duX3RoaXNfY3B1KHNlY29uZGFyeSk7Ci0JZWxzZQotCQl4aWNzX3RlYXJkb3duX2NwdShzZWNvbmRhcnkpOwotfQotI2VuZGlmCi0KIGRlZmluZV9tYWNoaW5lKHBzZXJpZXMpIHsKIAkubmFtZQkJCT0gInBTZXJpZXMiLAogCS5wcm9iZQkJCT0gcFNlcmllc19wcm9iZSwKQEAgLTU1MSw3ICs1NzMsNiBAQAogCS5zeXN0ZW1fcmVzZXRfZXhjZXB0aW9uID0gcFNlcmllc19zeXN0ZW1fcmVzZXRfZXhjZXB0aW9uLAogCS5tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbiA9IHBTZXJpZXNfbWFjaGluZV9jaGVja19leGNlcHRpb24sCiAjaWZkZWYgQ09ORklHX0tFWEVDCi0JLmtleGVjX2NwdV9kb3duCQk9IHBzZXJpZXNfa2V4ZWNfY3B1X2Rvd24sCiAJLm1hY2hpbmVfa2V4ZWMJCT0gZGVmYXVsdF9tYWNoaW5lX2tleGVjLAogCS5tYWNoaW5lX2tleGVjX3ByZXBhcmUJPSBkZWZhdWx0X21hY2hpbmVfa2V4ZWNfcHJlcGFyZSwKIAkubWFjaGluZV9jcmFzaF9zaHV0ZG93bgk9IGRlZmF1bHRfbWFjaGluZV9jcmFzaF9zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCAzY2Y3OGE2Li5hYzYxMDk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC0xNCw3ICsxNCw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQxNywyNyArNDE2LDEyIEBACiAjZW5kaWYKIAogLyogVGhpcyBpcyBjYWxsZWQgdmVyeSBlYXJseSAqLwotdm9pZCBfX2luaXQgc21wX2luaXRfcFNlcmllcyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHNtcF9pbml0X3BzZXJpZXModm9pZCkKIHsKIAlpbnQgaTsKIAogCURCRygiIC0+IHNtcF9pbml0X3BTZXJpZXMoKVxuIik7CiAKLQlzd2l0Y2ggKHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyKSB7Ci0jaWZkZWYgQ09ORklHX01QSUMKLQljYXNlIElDX09QRU5fUElDOgotCQlzbXBfb3BzID0gJnBTZXJpZXNfbXBpY19zbXBfb3BzOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YSUNTCi0JY2FzZSBJQ19QUENfWElDOgotCQlzbXBfb3BzID0gJnBTZXJpZXNfeGljc19zbXBfb3BzOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXBhbmljKCJJbnZhbGlkIGludGVycnVwdCBjb250cm9sbGVyIik7Ci0JfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJc21wX29wcy0+Y3B1X2Rpc2FibGUgPSBwU2VyaWVzX2NwdV9kaXNhYmxlOwogCXNtcF9vcHMtPmNwdV9kaWUgPSBwU2VyaWVzX2NwdV9kaWU7CkBAIC00NzIsMyArNDU2LDE4IEBACiAJREJHKCIgPC0gc21wX2luaXRfcFNlcmllcygpXG4iKTsKIH0KIAorI2lmZGVmIENPTkZJR19NUElDCit2b2lkIF9faW5pdCBzbXBfaW5pdF9wc2VyaWVzX21waWModm9pZCkKK3sKKwlzbXBfb3BzID0gJnBTZXJpZXNfbXBpY19zbXBfb3BzOworCisJc21wX2luaXRfcHNlcmllcygpOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHNtcF9pbml0X3BzZXJpZXNfeGljcyh2b2lkKQoreworCXNtcF9vcHMgPSAmcFNlcmllc194aWNzX3NtcF9vcHM7CisKKwlzbXBfaW5pdF9wc2VyaWVzKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCBiMTRmOWI1Li43MTY5NzJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTgsNyArOCw5IEBACiAgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjdW5kZWYgREVCVUcKKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKwogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0zMiwyNiArMzUsNiBAQAogCiAjaW5jbHVkZSAieGljcy5oIgogCi1zdGF0aWMgdW5zaWduZWQgaW50IHhpY3Nfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIHhpY3NfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIHhpY3NfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCB4aWNzX21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCB4aWNzX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCB4aWNzX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxX25yLCBjcHVtYXNrX3QgY3B1bWFzayk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgeGljc19waWMgPSB7Ci0JLnR5cGVuYW1lID0gIiBYSUNTICAgICAiLAotCS5zdGFydHVwID0geGljc19zdGFydHVwLAotCS5lbmFibGUgPSB4aWNzX2VuYWJsZV9pcnEsCi0JLmRpc2FibGUgPSB4aWNzX2Rpc2FibGVfaXJxLAotCS5hY2sgPSB4aWNzX21hc2tfYW5kX2Fja19pcnEsCi0JLmVuZCA9IHhpY3NfZW5kX2lycSwKLQkuc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKLX07Ci0KLS8qIFRoaXMgaXMgdXNlZCB0byBtYXAgcmVhbCBpcnEgbnVtYmVycyB0byB2aXJ0dWFsICovCi1zdGF0aWMgc3RydWN0IHJhZGl4X3RyZWVfcm9vdCBpcnFfbWFwID0gUkFESVhfVFJFRV9JTklUKEdGUF9BVE9NSUMpOwotCiAjZGVmaW5lIFhJQ1NfSVBJCQkyCiAjZGVmaW5lIFhJQ1NfSVJRX1NQVVJJT1VTCTAKIApAQCAtNjAsNyArNDMsNyBAQAogCiAvKgogICogTWFyayBJUElzIGFzIGhpZ2hlciBwcmlvcml0eSBzbyB3ZSBjYW4gdGFrZSB0aGVtIGluc2lkZSBpbnRlcnJ1cHRzIHRoYXQKLSAqIGFyZW50IG1hcmtlZCBTQV9JTlRFUlJVUFQKKyAqIGFyZW50IG1hcmtlZCBJUlFGX0RJU0FCTEVECiAgKi8KICNkZWZpbmUgSVBJX1BSSU9SSVRZCQk0CiAKQEAgLTgyLDEyICs2NSwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHhpY3NfaXBsIF9faW9tZW0gKnhpY3NfcGVyX2NwdVtOUl9DUFVTXTsKIAotc3RhdGljIGludCB4aWNzX2lycV84MjU5X2Nhc2NhZGUgPSAwOwotc3RhdGljIGludCB4aWNzX2lycV84MjU5X2Nhc2NhZGVfcmVhbCA9IDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfc2VydmVyID0gMHhGRjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9IDg7CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKnhpY3NfaG9zdDsKKwogLyoKICAqIFhJQ1Mgb25seSBoYXMgYSBzaW5nbGUgSVBJLCBzbyBlbmNvZGUgdGhlIG1lc3NhZ2VzIHBlciBDUFUKICAqLwpAQCAtOTksNDggKzgyLDM0IEBACiBzdGF0aWMgaW50IGlibV9pbnRfb247CiBzdGF0aWMgaW50IGlibV9pbnRfb2ZmOwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50ICgqeGlycl9pbmZvX2dldCkoaW50IGNwdSk7Ci0Jdm9pZCAoKnhpcnJfaW5mb19zZXQpKGludCBjcHUsIGludCB2YWwpOwotCXZvaWQgKCpjcHByX2luZm8pKGludCBjcHUsIHU4IHZhbCk7Ci0Jdm9pZCAoKnFpcnJfaW5mbykoaW50IGNwdSwgdTggdmFsKTsKLX0geGljc19vcHM7CisKKy8qIERpcmVjdCBIVyBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCiAKIAotLyogU01QICovCi0KLXN0YXRpYyBpbnQgcFNlcmllc194aXJyX2luZm9fZ2V0KGludCBuX2NwdSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpcmVjdF94aXJyX2luZm9fZ2V0KGludCBuX2NwdSkKIHsKIAlyZXR1cm4gaW5fYmUzMigmeGljc19wZXJfY3B1W25fY3B1XS0+eGlyci53b3JkKTsKIH0KIAotc3RhdGljIHZvaWQgcFNlcmllc194aXJyX2luZm9fc2V0KGludCBuX2NwdSwgaW50IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGRpcmVjdF94aXJyX2luZm9fc2V0KGludCBuX2NwdSwgaW50IHZhbHVlKQogewogCW91dF9iZTMyKCZ4aWNzX3Blcl9jcHVbbl9jcHVdLT54aXJyLndvcmQsIHZhbHVlKTsKIH0KIAotc3RhdGljIHZvaWQgcFNlcmllc19jcHByX2luZm8oaW50IG5fY3B1LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXJlY3RfY3Bwcl9pbmZvKGludCBuX2NwdSwgdTggdmFsdWUpCiB7CiAJb3V0XzgoJnhpY3NfcGVyX2NwdVtuX2NwdV0tPnhpcnIuYnl0ZXNbMF0sIHZhbHVlKTsKIH0KIAotc3RhdGljIHZvaWQgcFNlcmllc19xaXJyX2luZm8oaW50IG5fY3B1LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXJlY3RfcWlycl9pbmZvKGludCBuX2NwdSwgdTggdmFsdWUpCiB7CiAJb3V0XzgoJnhpY3NfcGVyX2NwdVtuX2NwdV0tPnFpcnIuYnl0ZXNbMF0sIHZhbHVlKTsKIH0KIAotc3RhdGljIHhpY3Nfb3BzIHBTZXJpZXNfb3BzID0gewotCXBTZXJpZXNfeGlycl9pbmZvX2dldCwKLQlwU2VyaWVzX3hpcnJfaW5mb19zZXQsCi0JcFNlcmllc19jcHByX2luZm8sCi0JcFNlcmllc19xaXJyX2luZm8KLX07CiAKLXN0YXRpYyB4aWNzX29wcyAqb3BzID0gJnBTZXJpZXNfb3BzOworLyogTFBBUiBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCiAKIAotLyogTFBBUiAqLwotCiBzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZW9pKHVuc2lnbmVkIGxvbmcgeGlycikKIHsKIAlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRU9JLCB4aXJyKTsKQEAgLTE2Miw3ICsxMzEsNyBAQAogCXJldHVybiBwbHBhcl9oY2FsbChIX1hJUlIsIDAsIDAsIDAsIDAsIHhpcnJfcmV0LCAmZHVtbXksICZkdW1teSk7CiB9CiAKLXN0YXRpYyBpbnQgcFNlcmllc0xQX3hpcnJfaW5mb19nZXQoaW50IG5fY3B1KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHBhcl94aXJyX2luZm9fZ2V0KGludCBuX2NwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CiAJdW5zaWduZWQgbG9uZyByZXR1cm5fdmFsdWU7CkBAIC0xNzAsMTAgKzEzOSwxMCBAQAogCWxwYXJfcmMgPSBwbHBhcl94aXJyKCZyZXR1cm5fdmFsdWUpOwogCWlmIChscGFyX3JjICE9IEhfU1VDQ0VTUykKIAkJcGFuaWMoIiBiYWQgcmV0dXJuIGNvZGUgeGlyciAtIHJjID0gJWx4IFxuIiwgbHBhcl9yYyk7Ci0JcmV0dXJuIChpbnQpcmV0dXJuX3ZhbHVlOworCXJldHVybiAodW5zaWduZWQgaW50KXJldHVybl92YWx1ZTsKIH0KIAotc3RhdGljIHZvaWQgcFNlcmllc0xQX3hpcnJfaW5mb19zZXQoaW50IG5fY3B1LCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbHBhcl94aXJyX2luZm9fc2V0KGludCBuX2NwdSwgaW50IHZhbHVlKQogewogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAl1bnNpZ25lZCBsb25nIHZhbDY0ID0gdmFsdWUgJiAweGZmZmZmZmZmOwpAQCAtMTg0LDcgKzE1Myw3IEBACiAJCSAgICAgIHZhbDY0KTsKIH0KIAotdm9pZCBwU2VyaWVzTFBfY3Bwcl9pbmZvKGludCBuX2NwdSwgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbHBhcl9jcHByX2luZm8oaW50IG5fY3B1LCB1OCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CiAKQEAgLTE5Myw3ICsxNjIsNyBAQAogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIGNwcHIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBTZXJpZXNMUF9xaXJyX2luZm8oaW50IG5fY3B1ICwgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgbHBhcl9xaXJyX2luZm8oaW50IG5fY3B1ICwgdTggdmFsdWUpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFyX3JjOwogCkBAIC0yMDIsNDMgKzE3MSwxNiBAQAogCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIHFpcnIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7CiB9CiAKLXhpY3Nfb3BzIHBTZXJpZXNMUF9vcHMgPSB7Ci0JcFNlcmllc0xQX3hpcnJfaW5mb19nZXQsCi0JcFNlcmllc0xQX3hpcnJfaW5mb19zZXQsCi0JcFNlcmllc0xQX2NwcHJfaW5mbywKLQlwU2VyaWVzTFBfcWlycl9pbmZvCi19OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHhpY3Nfc3RhcnR1cCh1bnNpZ25lZCBpbnQgdmlycSkKLXsKLQl1bnNpZ25lZCBpbnQgaXJxOworLyogSGlnaCBsZXZlbCBoYW5kbGVycyBhbmQgaW5pdCBjb2RlICovCiAKLQlpcnEgPSBpcnFfb2Zmc2V0X2Rvd24odmlycSk7Ci0JaWYgKHJhZGl4X3RyZWVfaW5zZXJ0KCZpcnFfbWFwLCB2aXJ0X2lycV90b19yZWFsKGlycSksCi0JCQkgICAgICAmdmlydF9pcnFfdG9fcmVhbF9tYXBbaXJxXSkgPT0gLUVOT01FTSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiT3V0IG9mIG1lbW9yeSBjcmVhdGluZyByZWFsIC0+IHZpcnR1YWwiCi0JCSAgICAgICAiIElSUSBtYXBwaW5nIGZvciBpcnEgJXUgKHJlYWwgMHgleClcbiIsCi0JCSAgICAgICB2aXJxLCB2aXJ0X2lycV90b19yZWFsKGlycSkpOwotCXhpY3NfZW5hYmxlX2lycSh2aXJxKTsKLQlyZXR1cm4gMDsJLyogcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgKi8KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByZWFsX2lycV90b192aXJ0KHVuc2lnbmVkIGludCByZWFsX2lycSkKLXsKLQl1bnNpZ25lZCBpbnQgKnB0cjsKLQotCXB0ciA9IHJhZGl4X3RyZWVfbG9va3VwKCZpcnFfbWFwLCByZWFsX2lycSk7Ci0JaWYgKHB0ciA9PSBOVUxMKQotCQlyZXR1cm4gTk9fSVJROwotCXJldHVybiBwdHIgLSB2aXJ0X2lycV90b19yZWFsX21hcDsKLX0KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBpbnQgZ2V0X2lycV9zZXJ2ZXIodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyBpbnQgZ2V0X2lycV9zZXJ2ZXIodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgaW50IHNlcnZlcjsKIAkvKiBGb3IgdGhlIG1vbWVudCBvbmx5IGltcGxlbWVudCBkZWxpdmVyeSB0byBhbGwgY3B1cyBvciBvbmUgY3B1ICovCi0JY3B1bWFza190IGNwdW1hc2sgPSBpcnFfYWZmaW5pdHlbaXJxXTsKKwljcHVtYXNrX3QgY3B1bWFzayA9IGlycV9kZXNjW3ZpcnFdLmFmZmluaXR5OwogCWNwdW1hc2tfdCB0bXAgPSBDUFVfTUFTS19OT05FOwogCiAJaWYgKCFkaXN0cmlidXRlX2lycXMpCkBAIC0yNTksMjMgKzIwMSwyOCBAQAogCiB9CiAjZWxzZQotc3RhdGljIGludCBnZXRfaXJxX3NlcnZlcih1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGludCBnZXRfaXJxX3NlcnZlcih1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAlyZXR1cm4gZGVmYXVsdF9zZXJ2ZXI7CiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgeGljc19lbmFibGVfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorCitzdGF0aWMgdm9pZCB4aWNzX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgY2FsbF9zdGF0dXM7CiAJdW5zaWduZWQgaW50IHNlcnZlcjsKIAotCWlycSA9IHZpcnRfaXJxX3RvX3JlYWwoaXJxX29mZnNldF9kb3duKHZpcnEpKTsKLQlpZiAoaXJxID09IFhJQ1NfSVBJKQorCXByX2RlYnVnKCJ4aWNzOiB1bm1hc2sgdmlycSAlZFxuIiwgdmlycSk7CisKKwlpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnE7CisJcHJfZGVidWcoIiAtPiBtYXAgdG8gaHdpcnEgMHgleFxuIiwgaXJxKTsKKwlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKIAkJcmV0dXJuOwogCiAJc2VydmVyID0gZ2V0X2lycV9zZXJ2ZXIodmlycSk7CisKIAljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsIGlycSwgc2VydmVyLAogCQkJCURFRkFVTFRfUFJJT1JJVFkpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7CkBAIC0yOTQsNyArMjQxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHhpY3NfZGlzYWJsZV9yZWFsX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgeGljc19tYXNrX3JlYWxfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGNhbGxfc3RhdHVzOwogCXVuc2lnbmVkIGludCBzZXJ2ZXI7CkBAIC0zMTksNzUgKzI2Niw4NiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgeGljc19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK3N0YXRpYyB2b2lkIHhpY3NfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAotCWlycSA9IHZpcnRfaXJxX3RvX3JlYWwoaXJxX29mZnNldF9kb3duKHZpcnEpKTsKLQl4aWNzX2Rpc2FibGVfcmVhbF9pcnEoaXJxKTsKKwlwcl9kZWJ1ZygieGljczogbWFzayB2aXJxICVkXG4iLCB2aXJxKTsKKworCWlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKKwlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJcmV0dXJuOworCXhpY3NfbWFza19yZWFsX2lycShpcnEpOwogfQogCi1zdGF0aWMgdm9pZCB4aWNzX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwkvKiBmb3JjZSBhIHJldmVyc2UgbWFwcGluZyBvZiB0aGUgaW50ZXJydXB0IHNvIGl0IGdldHMgaW4gdGhlIGNhY2hlICovCisJaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycV9yYWRpeF9yZXZtYXAoeGljc19ob3N0LCBpcnEpOworCisJLyogdW5tYXNrIGl0ICovCisJeGljc191bm1hc2tfaXJxKHZpcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB4aWNzX2VvaV9kaXJlY3QodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCiAJaW9zeW5jKCk7Ci0Jb3BzLT54aXJyX2luZm9fc2V0KGNwdSwgKCgweGZmIDw8IDI0KSB8Ci0JCQkJICh2aXJ0X2lycV90b19yZWFsKGlycV9vZmZzZXRfZG93bihpcnEpKSkpKTsKLQorCWRpcmVjdF94aXJyX2luZm9fc2V0KGNwdSwgKDB4ZmYgPDwgMjQpIHwgaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgeGljc19tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCisKK3N0YXRpYyB2b2lkIHhpY3NfZW9pX2xwYXIodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCi0JaWYgKGlycSA8IGlycV9vZmZzZXRfdmFsdWUoKSkgewotCQlpODI1OV9waWMuYWNrKGlycSk7Ci0JCWlvc3luYygpOwotCQlvcHMtPnhpcnJfaW5mb19zZXQoY3B1LCAoKDB4ZmY8PDI0KSB8Ci0JCQkJCSB4aWNzX2lycV84MjU5X2Nhc2NhZGVfcmVhbCkpOwotCQlpb3N5bmMoKTsKLQl9CisJaW9zeW5jKCk7CisJbHBhcl94aXJyX2luZm9fc2V0KGNwdSwgKDB4ZmYgPDwgMjQpIHwgaXJxKTsKIH0KIAotaW50IHhpY3NfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhpY3NfcmVtYXBfaXJxKHVuc2lnbmVkIGludCB2ZWMpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBpbnQgdmVjOwotCWludCBpcnE7CisJdW5zaWduZWQgaW50IGlycTsKIAotCXZlYyA9IG9wcy0+eGlycl9pbmZvX2dldChjcHUpOwotCS8qICAodmVjID4+IDI0KSA9PSBvbGQgcHJpb3JpdHkgKi8KIAl2ZWMgJj0gMHgwMGZmZmZmZjsKIAotCS8qIGZvciBzYW5pdHksIHRoaXMgaGFkIGJldHRlciBiZSA8IE5SX0lSUVMgLSAxNiAqLwotCWlmICh2ZWMgPT0geGljc19pcnFfODI1OV9jYXNjYWRlX3JlYWwpIHsKLQkJaXJxID0gaTgyNTlfaXJxKHJlZ3MpOwotCQl4aWNzX2VuZF9pcnEoaXJxX29mZnNldF91cCh4aWNzX2lycV84MjU5X2Nhc2NhZGUpKTsKLQl9IGVsc2UgaWYgKHZlYyA9PSBYSUNTX0lSUV9TUFVSSU9VUykgewotCQlpcnEgPSAtMTsKLQl9IGVsc2UgewotCQlpcnEgPSByZWFsX2lycV90b192aXJ0KHZlYyk7Ci0JCWlmIChpcnEgPT0gTk9fSVJRKQotCQkJaXJxID0gcmVhbF9pcnFfdG9fdmlydF9zbG93cGF0aCh2ZWMpOwotCQlpZiAoaXJxID09IE5PX0lSUSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJJbnRlcnJ1cHQgJXUgKHJlYWwpIGlzIGludmFsaWQsIgotCQkJICAgICAgICIgZGlzYWJsaW5nIGl0LlxuIiwgdmVjKTsKLQkJCXhpY3NfZGlzYWJsZV9yZWFsX2lycSh2ZWMpOwotCQl9IGVsc2UKLQkJCWlycSA9IGlycV9vZmZzZXRfdXAoaXJxKTsKLQl9Ci0JcmV0dXJuIGlycTsKKwlpZiAodmVjID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm4gTk9fSVJROworCWlycSA9IGlycV9yYWRpeF9yZXZtYXAoeGljc19ob3N0LCB2ZWMpOworCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpCisJCXJldHVybiBpcnE7CisKKwlwcmludGsoS0VSTl9FUlIgIkludGVycnVwdCAldSAocmVhbCkgaXMgaW52YWxpZCwiCisJICAgICAgICIgZGlzYWJsaW5nIGl0LlxuIiwgdmVjKTsKKwl4aWNzX21hc2tfcmVhbF9pcnEodmVjKTsKKwlyZXR1cm4gTk9fSVJROworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhpY3NfZ2V0X2lycV9kaXJlY3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXJldHVybiB4aWNzX3JlbWFwX2lycShkaXJlY3RfeGlycl9pbmZvX2dldChjcHUpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfbHBhcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJcmV0dXJuIHhpY3NfcmVtYXBfaXJxKGxwYXJfeGlycl9pbmZvX2dldChjcHUpKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKIAotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2Rpc3BhdGNoKGludCBjcHUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlvcHMtPnFpcnJfaW5mbyhjcHUsIDB4ZmYpOwotCiAJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKIAogCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKQEAgLTQxOSwxODAgKzM3Nyw0MiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotdm9pZCB4aWNzX2NhdXNlX0lQSShpbnQgY3B1KQotewotCW9wcy0+cWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLXZvaWQgeGljc19zZXR1cF9jcHUodm9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCW9wcy0+Y3Bwcl9pbmZvKGNwdSwgMHhmZik7Ci0JaW9zeW5jKCk7CisJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIDB4ZmYpOwogCi0JLyoKLQkgKiBQdXQgdGhlIGNhbGxpbmcgcHJvY2Vzc29yIGludG8gdGhlIEdJUS4gIFRoaXMgaXMgcmVhbGx5IG9ubHkKLQkgKiBuZWNlc3NhcnkgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQgYXMgdGhlIE9GIHN0YXJ0LWNwdSBpbnRlcmZhY2UKLQkgKiBwZXJmb3JtcyB0aGlzIGZ1bmN0aW9uIGZvciB1cyBvbiBwcmltYXJ5IHRocmVhZHMuCi0JICoKLQkgKiBYWFg6IHVuZG8gb2YgdGVhcmRvd24gb24ga2V4ZWMgbmVlZHMgdGhpcyB0b28sIGFzIG1heSBob3RwbHVnCi0JICovCi0JcnRhc19zZXRfaW5kaWNhdG9yKEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCi0JCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKKwlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1LCByZWdzKTsKIH0KIAotdm9pZCB4aWNzX2luaXRfSVJRKHZvaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfYWN0aW9uX2xwYXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGludHJfc2l6ZSA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1aW50ICppcmVnLCBpbGVuLCBpbmR4ID0gMDsKLQl1bnNpZ25lZCBsb25nIGludHJfYmFzZSA9IDA7Ci0Jc3RydWN0IHhpY3NfaW50ZXJydXB0X25vZGUgewotCQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl9IGludG5vZGVzW05SX0NQVVNdOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlwcGM2NF9ib290X21zZygweDIwLCAiWElDUyBJbml0Iik7CisJbHBhcl9xaXJyX2luZm8oY3B1LCAweGZmKTsKIAotCWlibV9nZXRfeGl2ZSA9IHJ0YXNfdG9rZW4oImlibSxnZXQteGl2ZSIpOwotCWlibV9zZXRfeGl2ZSA9IHJ0YXNfdG9rZW4oImlibSxzZXQteGl2ZSIpOwotCWlibV9pbnRfb24gID0gcnRhc190b2tlbigiaWJtLGludC1vbiIpOwotCWlibV9pbnRfb2ZmID0gcnRhc190b2tlbigiaWJtLGludC1vZmYiKTsKKwlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1LCByZWdzKTsKK30KIAotCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIlBvd2VyUEMtRXh0ZXJuYWwtSW50ZXJydXB0LVByZXNlbnRhdGlvbiIpOwotCWlmICghbnApCi0JCXBhbmljKCJ4aWNzX2luaXRfSVJROiBjYW4ndCBmaW5kIGludGVycnVwdCBwcmVzZW50YXRpb24iKTsKLQotbmV4dG5vZGU6Ci0JaXJlZyA9ICh1aW50ICopZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGludGVycnVwdC1zZXJ2ZXItcmFuZ2VzIiwgTlVMTCk7Ci0JaWYgKGlyZWcpIHsKLQkJLyoKLQkJICogc2V0IG5vZGUgc3RhcnRpbmcgaW5kZXggZm9yIHRoaXMgbm9kZQotCQkgKi8KLQkJaW5keCA9ICppcmVnOwotCX0KLQotCWlyZWcgPSAodWludCAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsICZpbGVuKTsKLQlpZiAoIWlyZWcpCi0JCXBhbmljKCJ4aWNzX2luaXRfSVJROiBjYW4ndCBmaW5kIGludGVycnVwdCByZWcgcHJvcGVydHkiKTsKLQotCXdoaWxlIChpbGVuKSB7Ci0JCWludG5vZGVzW2luZHhdLmFkZHIgPSAodW5zaWduZWQgbG9uZykqaXJlZysrIDw8IDMyOwotCQlpbGVuIC09IHNpemVvZih1aW50KTsKLQkJaW50bm9kZXNbaW5keF0uYWRkciB8PSAqaXJlZysrOwotCQlpbGVuIC09IHNpemVvZih1aW50KTsKLQkJaW50bm9kZXNbaW5keF0uc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSppcmVnKysgPDwgMzI7Ci0JCWlsZW4gLT0gc2l6ZW9mKHVpbnQpOwotCQlpbnRub2Rlc1tpbmR4XS5zaXplIHw9ICppcmVnKys7Ci0JCWlsZW4gLT0gc2l6ZW9mKHVpbnQpOwotCQlpbmR4Kys7Ci0JCWlmIChpbmR4ID49IE5SX0NQVVMpIGJyZWFrOwotCX0KLQotCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKTsKLQlpZiAoKGluZHggPCBOUl9DUFVTKSAmJiBucCkgZ290byBuZXh0bm9kZTsKLQotCS8qIEZpbmQgdGhlIHNlcnZlciBudW1iZXJzIGZvciB0aGUgYm9vdCBjcHUuICovCi0JZm9yIChucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKLQkgICAgIG5wOwotCSAgICAgbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgImNwdSIpKSB7Ci0JCWlyZWcgPSAodWludCAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsICZpbGVuKTsKLQkJaWYgKGlyZWcgJiYgaXJlZ1swXSA9PSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGJvb3RfY3B1aWQpKSB7Ci0JCQlpcmVnID0gKHVpbnQgKilnZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLAotCQkJCQkJICAgICZpbGVuKTsKLQkJCWkgPSBpbGVuIC8gc2l6ZW9mKGludCk7Ci0JCQlpZiAoaXJlZyAmJiBpID4gMCkgewotCQkJCWRlZmF1bHRfc2VydmVyID0gaXJlZ1swXTsKLQkJCQlkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gaXJlZ1tpLTFdOyAvKiB0YWtlIGxhc3QgZWxlbWVudCAqLwotCQkJfQotCQkJaXJlZyA9ICh1aW50ICopZ2V0X3Byb3BlcnR5KG5wLAotCQkJCQkiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKLQkJCWlmIChpcmVnKQotCQkJCWludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9ICppcmVnOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jb2Zfbm9kZV9wdXQobnApOwotCi0JaW50cl9iYXNlID0gaW50bm9kZXNbMF0uYWRkcjsKLQlpbnRyX3NpemUgPSBpbnRub2Rlc1swXS5zaXplOwotCi0JbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKTsKLQlpZiAoIW5wKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ4aWNzOiBubyBJU0EgaW50ZXJydXB0IGNvbnRyb2xsZXJcbiIpOwotCQl4aWNzX2lycV84MjU5X2Nhc2NhZGVfcmVhbCA9IC0xOwotCQl4aWNzX2lycV84MjU5X2Nhc2NhZGUgPSAtMTsKLQl9IGVsc2UgewotCQlpcmVnID0gKHVpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0cyIsIE5VTEwpOwotCQlpZiAoIWlyZWcpCi0JCQlwYW5pYygieGljc19pbml0X0lSUTogY2FuJ3QgZmluZCBJU0EgaW50ZXJydXB0cyBwcm9wZXJ0eSIpOwotCi0JCXhpY3NfaXJxXzgyNTlfY2FzY2FkZV9yZWFsID0gKmlyZWc7Ci0JCXhpY3NfaXJxXzgyNTlfY2FzY2FkZQotCQkJPSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZyh4aWNzX2lycV84MjU5X2Nhc2NhZGVfcmVhbCk7Ci0JCWk4MjU5X2luaXQoMCwgMCk7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQl9Ci0KK3ZvaWQgeGljc19jYXVzZV9JUEkoaW50IGNwdSkKK3sKIAlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJb3BzID0gJnBTZXJpZXNMUF9vcHM7Ci0JZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQkJaW50IGhhcmRfaWQ7CisJCWxwYXJfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKKwllbHNlCisJCWRpcmVjdF9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOworfQogCi0JCQkvKiBGSVhNRTogRG8gdGhpcyBkeW5hbWljYWxseSEgLS1SUiAqLwotCQkJaWYgKCFjcHVfcHJlc2VudChpKSkKLQkJCQljb250aW51ZTsKLQotCQkJaGFyZF9pZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaSk7Ci0JCQl4aWNzX3Blcl9jcHVbaV0gPSBpb3JlbWFwKGludG5vZGVzW2hhcmRfaWRdLmFkZHIsCi0JCQkJCQkgIGludG5vZGVzW2hhcmRfaWRdLnNpemUpOwotCQl9Ci0jZWxzZQotCQl4aWNzX3Blcl9jcHVbMF0gPSBpb3JlbWFwKGludHJfYmFzZSwgaW50cl9zaXplKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JfQogCi0JZm9yIChpID0gaXJxX29mZnNldF92YWx1ZSgpOyBpIDwgTlJfSVJRUzsgKytpKQotCQlnZXRfaXJxX2Rlc2MoaSktPmhhbmRsZXIgPSAmeGljc19waWM7Ci0KLQl4aWNzX3NldHVwX2NwdSgpOwotCi0JcHBjNjRfYm9vdF9tc2coMHgyMSwgIlhJQ1MgRG9uZSIpOwotfQotCi0vKgotICogV2UgY2FudCBkbyB0aGlzIGluIGluaXRfSVJRIGJlY2F1c2Ugd2UgbmVlZCB0aGUgbWVtb3J5IHN1YnN5c3RlbSB1cCBmb3IKLSAqIHJlcXVlc3RfaXJxKCkKLSAqLwotc3RhdGljIGludCBfX2luaXQgeGljc19zZXR1cF9pODI1OSh2b2lkKQorc3RhdGljIHZvaWQgeGljc19zZXRfY3B1X3ByaW9yaXR5KGludCBjcHUsIHVuc2lnbmVkIGNoYXIgY3BwcikKIHsKLQlpZiAocHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgPT0gSUNfUFBDX1hJQyAmJgotCSAgICB4aWNzX2lycV84MjU5X2Nhc2NhZGUgIT0gLTEpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGlycV9vZmZzZXRfdXAoeGljc19pcnFfODI1OV9jYXNjYWRlKSwKLQkJCQlub19hY3Rpb24sIDAsICI4MjU5IGNhc2NhZGUiLCBOVUxMKSkKLQkJCXByaW50ayhLRVJOX0VSUiAieGljc19zZXR1cF9pODI1OTogY291bGRuJ3QgZ2V0IDgyNTkgIgotCQkJCQkiY2FzY2FkZVxuIik7Ci0JfQotCXJldHVybiAwOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlscGFyX2NwcHJfaW5mbyhjcHUsIGNwcHIpOworCWVsc2UKKwkJZGlyZWN0X2NwcHJfaW5mbyhjcHUsIGNwcHIpOworCWlvc3luYygpOwogfQotYXJjaF9pbml0Y2FsbCh4aWNzX3NldHVwX2k4MjU5KTsKLQotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgeGljc19yZXF1ZXN0X0lQSXModm9pZCkKLXsKLQl2aXJ0X2lycV90b19yZWFsX21hcFtYSUNTX0lQSV0gPSBYSUNTX0lQSTsKLQotCS8qIElQSXMgYXJlIG1hcmtlZCBTQV9JTlRFUlJVUFQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMgZGlzYWJsZWQgKi8KLQlyZXF1ZXN0X2lycShpcnFfb2Zmc2V0X3VwKFhJQ1NfSVBJKSwgeGljc19pcGlfYWN0aW9uLCBTQV9JTlRFUlJVUFQsCi0JCSAgICAiSVBJIiwgTlVMTCk7Ci0JZ2V0X2lycV9kZXNjKGlycV9vZmZzZXRfdXAoWElDU19JUEkpKS0+c3RhdHVzIHw9IElSUV9QRVJfQ1BVOwotfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHhpY3Nfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCB2aXJxLCBjcHVtYXNrX3QgY3B1bWFzaykKIHsKQEAgLTYwMiw4ICs0MjIsOCBAQAogCXVuc2lnbmVkIGxvbmcgbmV3bWFzazsKIAljcHVtYXNrX3QgdG1wID0gQ1BVX01BU0tfTk9ORTsKIAotCWlycSA9IHZpcnRfaXJxX3RvX3JlYWwoaXJxX29mZnNldF9kb3duKHZpcnEpKTsKLQlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBOT19JUlEpCisJaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlmIChpcnEgPT0gWElDU19JUEkgfHwgaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQogCQlyZXR1cm47CiAKIAlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCB4aWNzX3N0YXR1cywgaXJxKTsKQEAgLTYzNCwxNSArNDU0LDMzMyBAQAogCX0KIH0KIAotdm9pZCB4aWNzX3RlYXJkb3duX2NwdShpbnQgc2Vjb25kYXJ5KQordm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlvcHMtPmNwcHJfaW5mbyhjcHUsIDB4MDApOwotCWlvc3luYygpOworCXhpY3Nfc2V0X2NwdV9wcmlvcml0eShjcHUsIDB4ZmYpOwogCi0JLyogQ2xlYXIgSVBJICovCi0Jb3BzLT5xaXJyX2luZm8oY3B1LCAweGZmKTsKKwkvKgorCSAqIFB1dCB0aGUgY2FsbGluZyBwcm9jZXNzb3IgaW50byB0aGUgR0lRLiAgVGhpcyBpcyByZWFsbHkgb25seQorCSAqIG5lY2Vzc2FyeSBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCBhcyB0aGUgT0Ygc3RhcnQtY3B1IGludGVyZmFjZQorCSAqIHBlcmZvcm1zIHRoaXMgZnVuY3Rpb24gZm9yIHVzIG9uIHByaW1hcnkgdGhyZWFkcy4KKwkgKgorCSAqIFhYWDogdW5kbyBvZiB0ZWFyZG93biBvbiBrZXhlYyBuZWVkcyB0aGlzIHRvbywgYXMgbWF5IGhvdHBsdWcKKwkgKi8KKwlydGFzX3NldF9pbmRpY2F0b3IoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKKwkJKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGljc19waWNfZGlyZWN0ID0geworCS50eXBlbmFtZSA9ICIgWElDUyAgICAgIiwKKwkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKKwkubWFzayA9IHhpY3NfbWFza19pcnEsCisJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKKwkuZW9pID0geGljc19lb2lfZGlyZWN0LAorCS5zZXRfYWZmaW5pdHkgPSB4aWNzX3NldF9hZmZpbml0eQorfTsKKworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2xwYXIgPSB7CisJLnR5cGVuYW1lID0gIiBYSUNTICAgICAiLAorCS5zdGFydHVwID0geGljc19zdGFydHVwLAorCS5tYXNrID0geGljc19tYXNrX2lycSwKKwkudW5tYXNrID0geGljc191bm1hc2tfaXJxLAorCS5lb2kgPSB4aWNzX2VvaV9scGFyLAorCS5zZXRfYWZmaW5pdHkgPSB4aWNzX3NldF9hZmZpbml0eQorfTsKKworCitzdGF0aWMgaW50IHhpY3NfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwkvKiBJQk0gbWFjaGluZXMgaGF2ZSBpbnRlcnJ1cHQgcGFyZW50cyBvZiB2YXJpb3VzIGZ1bmt5IHR5cGVzIGZvciB0aGluZ3MKKwkgKiBsaWtlIHZkZXZpY2VzLCBldmVudHMsIGV0Yy4uLiBUaGUgdHJpY2sgd2UgdXNlIGhlcmUgaXMgdG8gbWF0Y2gKKwkgKiBldmVyeXRoaW5nIGhlcmUgZXhjZXB0IHRoZSBsZWdhY3kgODI1OSB3aGljaCBpcyBjb21wYXRpYmxlICJjaHJwLGlpYyIKKwkgKi8KKwlyZXR1cm4gIWRldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJjaHJwLGlpYyIpOworfQorCitzdGF0aWMgaW50IHhpY3NfaG9zdF9tYXBfZGlyZWN0KHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJaXJxX2h3X251bWJlcl90IGh3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IHNlbnNlID0gZmxhZ3MgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCisJcHJfZGVidWcoInhpY3M6IG1hcF9kaXJlY3QgdmlycSAlZCwgaHdpcnEgMHglbHgsIGZsYWdzOiAweCV4XG4iLAorCQkgdmlycSwgaHcsIGZsYWdzKTsKKworCWlmIChzZW5zZSAmJiBzZW5zZSAhPSBJUlFfVFlQRV9MRVZFTF9MT1cpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInhpY3M6IHVzaW5nIHVuc3VwcG9ydGVkIHNlbnNlIDB4JXgiCisJCSAgICAgICAiIGZvciBpcnEgJWQgKGg6IDB4JWx4KVxuIiwgZmxhZ3MsIHZpcnEsIGh3KTsKKworCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnhpY3NfcGljX2RpcmVjdCwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4aWNzX2hvc3RfbWFwX2xwYXIoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgIGlycV9od19udW1iZXJfdCBodywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCBzZW5zZSA9IGZsYWdzICYgSVJRX1RZUEVfU0VOU0VfTUFTSzsKKworCXByX2RlYnVnKCJ4aWNzOiBtYXBfbHBhciB2aXJxICVkLCBod2lycSAweCVseCwgZmxhZ3M6IDB4JXhcbiIsCisJCSB2aXJxLCBodywgZmxhZ3MpOworCisJaWYgKHNlbnNlICYmIHNlbnNlICE9IElSUV9UWVBFX0xFVkVMX0xPVykKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAieGljczogdXNpbmcgdW5zdXBwb3J0ZWQgc2Vuc2UgMHgleCIKKwkJICAgICAgICIgZm9yIGlycSAlZCAoaDogMHglbHgpXG4iLCBmbGFncywgdmlycSwgaHcpOworCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmeGljc19waWNfbHBhciwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4aWNzX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKKworeworCS8qIEN1cnJlbnQgeGljcyBpbXBsZW1lbnRhdGlvbiB0cmFuc2xhdGVzIGV2ZXJ5dGhpbmcKKwkgKiB0byBsZXZlbC4gSXQgaXMgbm90IHRlY2huaWNhbGx5IHJpZ2h0IGZvciBNU0lzIGJ1dCB0aGlzCisJICogaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LiBXZSBtaWdodCBnZXQgc21hcnRlciBpbiB0aGUgZnV0dXJlCisJICovCisJKm91dF9od2lycSA9IGludHNwZWNbMF07CisJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyB4aWNzX2hvc3RfZGlyZWN0X29wcyA9IHsKKwkubWF0Y2ggPSB4aWNzX2hvc3RfbWF0Y2gsCisJLm1hcCA9IHhpY3NfaG9zdF9tYXBfZGlyZWN0LAorCS54bGF0ZSA9IHhpY3NfaG9zdF94bGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHhpY3NfaG9zdF9scGFyX29wcyA9IHsKKwkubWF0Y2ggPSB4aWNzX2hvc3RfbWF0Y2gsCisJLm1hcCA9IHhpY3NfaG9zdF9tYXBfbHBhciwKKwkueGxhdGUgPSB4aWNzX2hvc3RfeGxhdGUsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgeGljc19pbml0X2hvc3Qodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2hvc3Rfb3BzICpvcHM7CisKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJb3BzID0gJnhpY3NfaG9zdF9scGFyX29wczsKKwllbHNlCisJCW9wcyA9ICZ4aWNzX2hvc3RfZGlyZWN0X29wczsKKwl4aWNzX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChJUlFfSE9TVF9NQVBfVFJFRSwgMCwgb3BzLAorCQkJCSAgIFhJQ1NfSVJRX1NQVVJJT1VTKTsKKwlCVUdfT04oeGljc19ob3N0ID09IE5VTEwpOworCWlycV9zZXRfZGVmYXVsdF9ob3N0KHhpY3NfaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB4aWNzX21hcF9vbmVfY3B1KGludCBod19pZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgaTsKKworCS8qIFRoaXMgbWF5IGxvb2sgZ3Jvc3MgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vdywgd2UgZG9uJ3QgcXVpdGUKKwkgKiBoYXZlIGEgaGFyZCAtPiBsaW51eCBwcm9jZXNzb3IgaWQgbWF0Y2hpbmcuCisJICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJaWYgKCFjcHVfcHJlc2VudChpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaHdfaWQgPT0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpKSkgeworCQkJeGljc19wZXJfY3B1W2ldID0gaW9yZW1hcChhZGRyLCBzaXplKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbHNlCisJaWYgKGh3X2lkICE9IDApCisJCXJldHVybjsKKwl4aWNzX3Blcl9jcHVbMF0gPSBpb3JlbWFwKGFkZHIsIHNpemUpOworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IHhpY3NfaW5pdF9vbmVfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqaW5keCkKK3sKKwl1bnNpZ25lZCBpbnQgaWxlbjsKKwl1MzIgKmlyZWc7CisKKwkvKiBUaGlzIGNvZGUgZG9lcyB0aGUgdGhlb3JpY2FsbHkgYnJva2VuIGFzc3VtcHRpb24gdGhhdCB0aGUgaW50ZXJydXB0CisJICogc2VydmVyIG51bWJlcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBoYXJkIENQVSBudW1iZXJzLgorCSAqIFRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBzbyBmYXIgYnV0IHdlIGFyZSBwbGF5aW5nIHdpdGggZmlyZS4uLgorCSAqIHNob3VsZCBiZSBmaXhlZCBvbmUgb2YgdGhlc2UgZGF5cy4gLUJlbkguCisJICovCisJaXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJpYm0saW50ZXJydXB0LXNlcnZlci1yYW5nZXMiLCBOVUxMKTsKKworCS8qIERvIHRoYXQgZXZlciBoYXBwZW4gPyB3ZSdsbCBrbm93IHNvb24gZW5vdWdoLi4uIGJ1dCBldmVuIGdvb2Qnb2xkCisJICogZjgwIGRvZXMgaGF2ZSB0aGF0IHByb3BlcnR5IC4uCisJICovCisJV0FSTl9PTihpcmVnID09IE5VTEwpOworCWlmIChpcmVnKSB7CisJCS8qCisJCSAqIHNldCBub2RlIHN0YXJ0aW5nIGluZGV4IGZvciB0aGlzIG5vZGUKKwkJICovCisJCSppbmR4ID0gKmlyZWc7CisJfQorCWlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmlsZW4pOworCWlmICghaXJlZykKKwkJcGFuaWMoInhpY3NfaW5pdF9JUlE6IGNhbid0IGZpbmQgaW50ZXJydXB0IHJlZyBwcm9wZXJ0eSIpOworCisJd2hpbGUgKGlsZW4gPj0gKDQgKiBzaXplb2YodTMyKSkpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplOworCisJCS8qIFhYWCBVc2UgcHJvcGVyIE9GIHBhcnNpbmcgY29kZSBoZXJlICEhISAqLworCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpKmlyZWcrKyA8PCAzMjsKKwkJaWxlbiAtPSBzaXplb2YodTMyKTsKKwkJYWRkciB8PSAqaXJlZysrOworCQlpbGVuIC09IHNpemVvZih1MzIpOworCQlzaXplID0gKHVuc2lnbmVkIGxvbmcpKmlyZWcrKyA8PCAzMjsKKwkJaWxlbiAtPSBzaXplb2YodTMyKTsKKwkJc2l6ZSB8PSAqaXJlZysrOworCQlpbGVuIC09IHNpemVvZih1MzIpOworCQl4aWNzX21hcF9vbmVfY3B1KCppbmR4LCBhZGRyLCBzaXplKTsKKwkJKCppbmR4KSsrOworCX0KK30KKworCitzdGF0aWMgdm9pZCBfX2luaXQgeGljc19zZXR1cF84MjU5X2Nhc2NhZGUodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqb2xkLCAqZm91bmQgPSBOVUxMOworCWludCBjYXNjYWRlLCBuYWRkcjsKKwl1MzIgKmFkZHJwOworCXVuc2lnbmVkIGxvbmcgaW50YWNrID0gMDsKKworCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgImludGVycnVwdC1jb250cm9sbGVyIikKKwkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgeworCQkJZm91bmQgPSBucDsKKwkJCWJyZWFrOworCQl9CisJaWYgKGZvdW5kID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInhpY3M6IG5vIElTQSBpbnRlcnJ1cHQgY29udHJvbGxlclxuIik7CisJCXJldHVybjsKKwl9CisJY2FzY2FkZSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGZvdW5kLCAwKTsKKwlpZiAoY2FzY2FkZSA9PSBOT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzOiBmYWlsZWQgdG8gbWFwIGNhc2NhZGUgaW50ZXJydXB0Iik7CisJCXJldHVybjsKKwl9CisJcHJfZGVidWcoInhpY3M6IGNhc2NhZGUgbWFwcGVkIHRvIGlycSAlZFxuIiwgY2FzY2FkZSk7CisKKwlmb3IgKG9sZCA9IG9mX25vZGVfZ2V0KGZvdW5kKTsgb2xkICE9IE5VTEwgOyBvbGQgPSBucCkgeworCQlucCA9IG9mX2dldF9wYXJlbnQob2xkKTsKKwkJb2Zfbm9kZV9wdXQob2xkKTsKKwkJaWYgKG5wID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKHN0cmNtcChucC0+bmFtZSwgInBjaSIpICE9IDApCisJCQljb250aW51ZTsKKwkJYWRkcnAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiODI1OS1pbnRlcnJ1cHQtYWNrbm93bGVkZ2UiLCBOVUxMKTsKKwkJaWYgKGFkZHJwID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJbmFkZHIgPSBwcm9tX25fYWRkcl9jZWxscyhucCk7CisJCWludGFjayA9IGFkZHJwW25hZGRyLTFdOworCQlpZiAobmFkZHIgPiAxKQorCQkJaW50YWNrIHw9ICgodW5zaWduZWQgbG9uZylhZGRycFtuYWRkci0yXSkgPDwgMzI7CisJfQorCWlmIChpbnRhY2spCisJCXByaW50ayhLRVJOX0RFQlVHICJ4aWNzOiBQQ0kgODI1OSBpbnRhY2sgYXQgMHglMDE2bHhcbiIsIGludGFjayk7CisJaTgyNTlfaW5pdChmb3VuZCwgaW50YWNrKTsKKwlvZl9ub2RlX3B1dChmb3VuZCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZSwgcHNlcmllc184MjU5X2Nhc2NhZGUpOworfQorCit2b2lkIF9faW5pdCB4aWNzX2luaXRfSVJRKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1MzIgKmlyZWcsIGlsZW4sIGluZHggPSAwOworCWludCBmb3VuZCA9IDA7CisKKwlwcGM2NF9ib290X21zZygweDIwLCAiWElDUyBJbml0Iik7CisKKwlpYm1fZ2V0X3hpdmUgPSBydGFzX3Rva2VuKCJpYm0sZ2V0LXhpdmUiKTsKKwlpYm1fc2V0X3hpdmUgPSBydGFzX3Rva2VuKCJpYm0sc2V0LXhpdmUiKTsKKwlpYm1faW50X29uICA9IHJ0YXNfdG9rZW4oImlibSxpbnQtb24iKTsKKwlpYm1faW50X29mZiA9IHJ0YXNfdG9rZW4oImlibSxpbnQtb2ZmIik7CisKKwlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKSB7CisJCWZvdW5kID0gMTsKKwkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCQlicmVhazsKKwkJeGljc19pbml0X29uZV9ub2RlKG5wLCAmaW5keCk7CisJfQorCWlmIChmb3VuZCA9PSAwKQorCQlyZXR1cm47CisKKwl4aWNzX2luaXRfaG9zdCgpOworCisJLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KKwlmb3IgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCSAgICAgbnA7CisJICAgICBucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5wLCAiY3B1IikpIHsKKwkJaXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCAmaWxlbik7CisJCWlmIChpcmVnICYmIGlyZWdbMF0gPT0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKSkgeworCQkJaXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsCisJCQkJCQkgICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLAorCQkJCQkJICAgJmlsZW4pOworCQkJaSA9IGlsZW4gLyBzaXplb2YoaW50KTsKKwkJCWlmIChpcmVnICYmIGkgPiAwKSB7CisJCQkJZGVmYXVsdF9zZXJ2ZXIgPSBpcmVnWzBdOworCQkJCS8qIHRha2UgbGFzdCBlbGVtZW50ICovCisJCQkJZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IGlyZWdbaS0xXTsKKwkJCX0KKwkJCWlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLAorCQkJCQkiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKKwkJCWlmIChpcmVnKQorCQkJCWludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9ICppcmVnOworCQkJYnJlYWs7CisJCX0KKwl9CisJb2Zfbm9kZV9wdXQobnApOworCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCXBwY19tZC5nZXRfaXJxID0geGljc19nZXRfaXJxX2xwYXI7CisJZWxzZQorCQlwcGNfbWQuZ2V0X2lycSA9IHhpY3NfZ2V0X2lycV9kaXJlY3Q7CisKKwl4aWNzX3NldHVwX2NwdSgpOworCisJeGljc19zZXR1cF84MjU5X2Nhc2NhZGUoKTsKKworCXBwYzY0X2Jvb3RfbXNnKDB4MjEsICJYSUNTIERvbmUiKTsKK30KKworCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCB4aWNzX3JlcXVlc3RfSVBJcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcGk7CisKKwlpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSwgMCk7CisJQlVHX09OKGlwaSA9PSBOT19JUlEpOworCisJLyoKKwkgKiBJUElzIGFyZSBtYXJrZWQgSVJRRl9ESVNBQkxFRCBhcyB0aGV5IG11c3QgcnVuIHdpdGggaXJxcworCSAqIGRpc2FibGVkCisJICovCisJc2V0X2lycV9oYW5kbGVyKGlwaSwgaGFuZGxlX3BlcmNwdV9pcnEpOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlyZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9scGFyLCBJUlFGX0RJU0FCTEVELAorCQkJICAgICJJUEkiLCBOVUxMKTsKKwllbHNlCisJCXJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2RpcmVjdCwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAiSVBJIiwgTlVMTCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCit2b2lkIHhpY3NfdGVhcmRvd25fY3B1KGludCBzZWNvbmRhcnkpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgaXBpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCXhpY3Nfc2V0X2NwdV9wcmlvcml0eShjcHUsIDApOwogCiAJLyoKIAkgKiB3ZSBuZWVkIHRvIEVPSSB0aGUgSVBJIGlmIHdlIGdvdCBoZXJlIGZyb20ga2V4ZWMgZG93biBJUEkKQEAgLTY1MSw3ICs3ODksMTMgQEAKIAkgKiBzaG91bGQgd2UgYmUgZmxhZ2dpbmcgaWRsZSBsb29wIGluc3RlYWQ/CiAJICogb3IgY3JlYXRpbmcgc29tZSB0YXNrIHRvIGJlIHNjaGVkdWxlZD8KIAkgKi8KLQlvcHMtPnhpcnJfaW5mb19zZXQoY3B1LCBYSUNTX0lQSSk7CisKKwlpcGkgPSBpcnFfZmluZF9tYXBwaW5nKHhpY3NfaG9zdCwgWElDU19JUEkpOworCWlmIChpcGkgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybjsKKwlkZXNjID0gZ2V0X2lycV9kZXNjKGlwaSk7CisJaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW9pKQorCQlkZXNjLT5jaGlwLT5lb2koWElDU19JUEkpOwogCiAJLyoKIAkgKiBTb21lIG1hY2hpbmVzIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgY3B1IGluIHRoZSBHSVEsCkBAIC02NTksOCArODAzLDggQEAKIAkgKi8KIAlpZiAoc2Vjb25kYXJ5KQogCQlydGFzX3NldF9pbmRpY2F0b3IoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKLQkJCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLQotCQkJZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CisJCQkJICAgKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtCisJCQkJICAgZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTY3Miw4ICs4MTYsNyBAQAogCXVuc2lnbmVkIGludCBpcnEsIHZpcnEsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIFJlamVjdCBhbnkgaW50ZXJydXB0IHRoYXQgd2FzIHF1ZXVlZCB0byB1cy4uLiAqLwotCW9wcy0+Y3Bwcl9pbmZvKGNwdSwgMCk7Ci0JaW9zeW5jKCk7CisJeGljc19zZXRfY3B1X3ByaW9yaXR5KGNwdSwgMCk7CiAKIAkvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KIAlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3IoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKQEAgLTY4MSwyOSArODI0LDI4IEBACiAJV0FSTl9PTihzdGF0dXMgPCAwKTsKIAogCS8qIEFsbG93IElQSXMgYWdhaW4uLi4gKi8KLQlvcHMtPmNwcHJfaW5mbyhjcHUsIERFRkFVTFRfUFJJT1JJVFkpOwotCWlvc3luYygpOworCXhpY3Nfc2V0X2NwdV9wcmlvcml0eShjcHUsIERFRkFVTFRfUFJJT1JJVFkpOwogCiAJZm9yX2VhY2hfaXJxKHZpcnEpIHsKLQkJaXJxX2Rlc2NfdCAqZGVzYzsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCQlpbnQgeGljc19zdGF0dXNbMl07CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJLyogV2UgY2FudCBzZXQgYWZmaW5pdHkgb24gSVNBIGludGVycnVwdHMgKi8KLQkJaWYgKHZpcnEgPCBpcnFfb2Zmc2V0X3ZhbHVlKCkpCisJCWlmICh2aXJxIDwgTlVNX0lTQV9JTlRFUlJVUFRTKQogCQkJY29udGludWU7Ci0KLQkJZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKLQkJaXJxID0gdmlydF9pcnFfdG9fcmVhbChpcnFfb2Zmc2V0X2Rvd24odmlycSkpOwotCisJCWlmIChpcnFfbWFwW3ZpcnFdLmhvc3QgIT0geGljc19ob3N0KQorCQkJY29udGludWU7CisJCWlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKIAkJLyogV2UgbmVlZCB0byBnZXQgSVBJcyBzdGlsbC4gKi8KLQkJaWYgKGlycSA9PSBYSUNTX0lQSSB8fCBpcnEgPT0gTk9fSVJRKQorCQlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKIAkJCWNvbnRpbnVlOworCQlkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOwogCiAJCS8qIFdlIG9ubHkgbmVlZCB0byBtaWdyYXRlIGVuYWJsZWQgSVJRUyAqLwotCQlpZiAoZGVzYyA9PSBOVUxMIHx8IGRlc2MtPmhhbmRsZXIgPT0gTlVMTAorCQlpZiAoZGVzYyA9PSBOVUxMIHx8IGRlc2MtPmNoaXAgPT0gTlVMTAogCQkgICAgfHwgZGVzYy0+YWN0aW9uID09IE5VTEwKLQkJICAgIHx8IGRlc2MtPmhhbmRsZXItPnNldF9hZmZpbml0eSA9PSBOVUxMKQorCQkgICAgfHwgZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtNzI4LDggKzg3MCw4IEBACiAJCSAgICAgICB2aXJxLCBjcHUpOwogCiAJCS8qIFJlc2V0IGFmZmluaXR5IHRvIGFsbCBjcHVzICovCi0JCWRlc2MtPmhhbmRsZXItPnNldF9hZmZpbml0eSh2aXJxLCBDUFVfTUFTS19BTEwpOwotCQlpcnFfYWZmaW5pdHlbdmlycV0gPSBDUFVfTUFTS19BTEw7CisJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSh2aXJxLCBDUFVfTUFTS19BTEwpOworCQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gQ1BVX01BU0tfQUxMOwogdW5sb2NrOgogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKaW5kZXggZTE0YzcwOC4uNmVlMTA1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCkBAIC0xNCwxMyArMTQsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKLXZvaWQgeGljc19pbml0X0lSUSh2b2lkKTsKLWludCB4aWNzX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKik7Ci12b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpOwotdm9pZCB4aWNzX3RlYXJkb3duX2NwdShpbnQgc2Vjb25kYXJ5KTsKLXZvaWQgeGljc19jYXVzZV9JUEkoaW50IGNwdSk7Ci12b2lkIHhpY3NfcmVxdWVzdF9JUElzKHZvaWQpOwotdm9pZCB4aWNzX21pZ3JhdGVfaXJxc19hd2F5KHZvaWQpOworZXh0ZXJuIHZvaWQgeGljc19pbml0X0lSUSh2b2lkKTsKK2V4dGVybiB2b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpOworZXh0ZXJuIHZvaWQgeGljc190ZWFyZG93bl9jcHUoaW50IHNlY29uZGFyeSk7CitleHRlcm4gdm9pZCB4aWNzX2NhdXNlX0lQSShpbnQgY3B1KTsKK2V4dGVybiAgdm9pZCB4aWNzX3JlcXVlc3RfSVBJcyh2b2lkKTsKK2V4dGVybiB2b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCk7CiAKIC8qIGZpcnN0IGFyZ3VtZW50IGlzIGlnbm9yZWQgZm9yIG5vdyovCiB2b2lkIHBTZXJpZXNMUF9jcHByX2luZm8oaW50IG5fY3B1LCB1OCB2YWx1ZSk7CkBAIC0zMSw0ICszMCw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKIAorc3RydWN0IGlycV9kZXNjOworZXh0ZXJuIHZvaWQgcHNlcmllc184MjU5X2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKICNlbmRpZiAvKiBfUE9XRVJQQ19LRVJORUxfWElDU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQppbmRleCBjZWY5NWIwLi5jZWJmYWUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKQEAgLTQsNyArNCw2IEBACiAKIG9iai0kKENPTkZJR19NUElDKQkJKz0gbXBpYy5vCiBvYmotJChDT05GSUdfUFBDX0lORElSRUNUX1BDSSkJKz0gaW5kaXJlY3RfcGNpLm8KLW9iai0kKENPTkZJR19QUENfSTgyNTkpCQkrPSBpODI1OS5vCiBvYmotJChDT05GSUdfUFBDX01QQzEwNikJKz0gZ3JhY2tsZS5vCiBvYmotJChDT05GSUdfQk9PS0UpCQkrPSBkY3Iubwogb2JqLSQoQ09ORklHXzQweCkJCSs9IGRjci5vCkBAIC0xMiwzICsxMSw5IEBACiBvYmotJChDT05GSUdfTU1JT19OVlJBTSkJKz0gbW1pb19udnJhbS5vCiBvYmotJChDT05GSUdfUFBDXzgzeHgpCQkrPSBpcGljLm8KIG9iai0kKENPTkZJR19GU0xfU09DKQkJKz0gZnNsX3NvYy5vCitvYmotJChDT05GSUdfUFBDX1RPREMpCQkrPSB0b2RjLm8KK29iai0kKENPTkZJR19UU0kxMDhfQlJJREdFKQkrPSB0c2kxMDhfcGNpLm8gdHNpMTA4X2Rldi5vCisKK2lmZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKK29iai0kKENPTkZJR19QUENfSTgyNTkpCQkrPSBpODI1OS5vCisgZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydC5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0LmgKaW5kZXggYzJkMDU3Ni4uMWM4ODE3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0LmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0LmgKQEAgLTQ3LDggKzQ3LDEyIEBACiAvKiBVNCByZWdpc3RlcnMgKi8KICNkZWZpbmUgREFSVF9CQVNFX1U0X0JBU0VfTUFTSwkweGZmZmZmZgogI2RlZmluZSBEQVJUX0JBU0VfVTRfQkFTRV9TSElGVAkwCi0jZGVmaW5lIERBUlRfQ05UTF9VNF9GTFVTSFRMQgkweDIwMDAwMDAwCiAjZGVmaW5lIERBUlRfQ05UTF9VNF9FTkFCTEUJMHg4MDAwMDAwMAorI2RlZmluZSBEQVJUX0NOVExfVTRfSU9ORQkweDQwMDAwMDAwCisjZGVmaW5lIERBUlRfQ05UTF9VNF9GTFVTSFRMQgkweDIwMDAwMDAwCisjZGVmaW5lIERBUlRfQ05UTF9VNF9JRExFCTB4MTAwMDAwMDAKKyNkZWZpbmUgREFSVF9DTlRMX1U0X1BBUl9FTgkweDA4MDAwMDAwCisjZGVmaW5lIERBUlRfQ05UTF9VNF9JT05FX01BU0sJMHgwN2ZmZmZmZgogI2RlZmluZSBEQVJUX1NJWkVfVTRfU0laRV9NQVNLCTB4MWZmZgogI2RlZmluZSBEQVJUX1NJWkVfVTRfU0laRV9TSElGVAkwCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggNjIzMjA5MS4uZTMyZmFkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xMDEsOCArMTAwLDggQEAKIAlpZiAobCA9PSAoMUwgPDwgbGltaXQpKSB7CiAJCWlmIChsaW1pdCA8IDQpIHsKIAkJCWxpbWl0Kys7Ci0JCSAgICAgICAgcmVnID0gREFSVF9JTihEQVJUX0NOVEwpOwotCQkgICAgICAgIHJlZyAmPSB+aW52X2JpdDsKKwkJCXJlZyA9IERBUlRfSU4oREFSVF9DTlRMKTsKKwkJCXJlZyAmPSB+aW52X2JpdDsKIAkJCURBUlRfT1VUKERBUlRfQ05UTCwgcmVnKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0gZWxzZQpAQCAtMTExLDExICsxMTAsMzkgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYXJ0X3RsYl9pbnZhbGlkYXRlX29uZSh1bnNpZ25lZCBsb25nIGJ1c19ycG4pCit7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgbCwgbGltaXQ7CisKKwlyZWcgPSBEQVJUX0NOVExfVTRfRU5BQkxFIHwgREFSVF9DTlRMX1U0X0lPTkUgfAorCQkoYnVzX3JwbiAmIERBUlRfQ05UTF9VNF9JT05FX01BU0spOworCURBUlRfT1VUKERBUlRfQ05UTCwgcmVnKTsKKworCWxpbWl0ID0gMDsKK3dhaXRfbW9yZToKKwlsID0gMDsKKwl3aGlsZSAoKERBUlRfSU4oREFSVF9DTlRMKSAmIERBUlRfQ05UTF9VNF9JT05FKSAmJiBsIDwgKDFMIDw8IGxpbWl0KSkgeworCQlybWIoKTsKKwkJbCsrOworCX0KKworCWlmIChsID09ICgxTCA8PCBsaW1pdCkpIHsKKwkJaWYgKGxpbWl0IDwgNCkgeworCQkJbGltaXQrKzsKKwkJCWdvdG8gd2FpdF9tb3JlOworCQl9IGVsc2UKKwkJCXBhbmljKCJEQVJUOiBUTEIgZGlkIG5vdCBmbHVzaCBhZnRlciB3YWl0aW5nIGEgbG9uZyAiCisJCQkgICAgICAidGltZS4gQnVnZ3kgVTQgPyIpOworCX0KK30KKwogc3RhdGljIHZvaWQgZGFydF9mbHVzaChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKIHsKLQlpZiAoZGFydF9kaXJ0eSkKKwlpZiAoZGFydF9kaXJ0eSkgewogCQlkYXJ0X3RsYl9pbnZhbGlkYXRlX2FsbCgpOwotCWRhcnRfZGlydHkgPSAwOworCQlkYXJ0X2RpcnR5ID0gMDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGRhcnRfYnVpbGQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwsIGxvbmcgaW5kZXgsCkBAIC0xMjQsNiArMTUxLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgKmRwOwogCXVuc2lnbmVkIGludCBycG47CisJbG9uZyBsOwogCiAJREJHKCJkYXJ0OiBidWlsZCBhdDogJWx4LCAlbHgsIGFkZHI6ICV4XG4iLCBpbmRleCwgbnBhZ2VzLCB1YWRkcik7CiAKQEAgLTEzNSw3ICsxNjMsOCBAQAogCS8qIE9uIFUzLCBhbGwgbWVtb3J5IGlzIGNvbnRpZ291cywgc28gd2UgY2FuIG1vdmUgdGhpcwogCSAqIG91dCBvZiB0aGUgbG9vcC4KIAkgKi8KLQl3aGlsZSAobnBhZ2VzLS0pIHsKKwlsID0gbnBhZ2VzOworCXdoaWxlIChsLS0pIHsKIAkJcnBuID0gdmlydF90b19hYnModWFkZHIpID4+IERBUlRfUEFHRV9TSElGVDsKIAogCQkqKGRwKyspID0gREFSVE1BUF9WQUxJRCB8IChycG4gJiBEQVJUTUFQX1JQTk1BU0spOwpAQCAtMTQzLDcgKzE3MiwxNCBAQAogCQl1YWRkciArPSBEQVJUX1BBR0VfU0laRTsKIAl9CiAKLQlkYXJ0X2RpcnR5ID0gMTsKKwlpZiAoZGFydF9pc191NCkgeworCQlycG4gPSBpbmRleDsKKwkJbWIoKTsgLyogbWFrZSBzdXJlIGFsbCB1cGRhdGVzIGhhdmUgcmVhY2hlZCBtZW1vcnkgKi8KKwkJd2hpbGUgKG5wYWdlcy0tKQorCQkJZGFydF90bGJfaW52YWxpZGF0ZV9vbmUocnBuKyspOworCX0gZWxzZSB7CisJCWRhcnRfZGlydHkgPSAxOworCX0KIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IDcxYTMyNzUuLmU5ODM5NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC05LDcgKzksNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCmluZGV4IGI3YWMzMmYuLjcyYzczYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKQEAgLTYsMTEgKzYsMTYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLworI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogCiBzdGF0aWMgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpwY2lfaW50YWNrOyAvKiBSTywgZ2l2ZXMgdXMgdGhlIGlycSB2ZWN0b3IgKi8KIApAQCAtMjAsNyArMjUsOCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGk4MjU5X2xvY2spOwogCi1zdGF0aWMgaW50IGk4MjU5X3BpY19pcnFfb2Zmc2V0Oworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqaTgyNTlfbm9kZTsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKmk4MjU5X2hvc3Q7CiAKIC8qCiAgKiBBY2tub3dsZWRnZSB0aGUgSVJRIHVzaW5nIGVpdGhlciB0aGUgUENJIGhvc3QgYnJpZGdlJ3MgaW50ZXJydXB0CkBAIC0yOCwxNiArMzQsMTggQEAKICAqIHdoaWNoIGlzIGNhbGxlZC4gIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHBvbGxpbmcgaXMgYnJva2VuIG9uIHNvbWUKICAqIElCTSBhbmQgTW90b3JvbGEgUFJlUCBib3hlcyBzbyB3ZSBtdXN0IHVzZSB0aGUgaW50LWFjayBmZWF0dXJlIG9uIHRoZW0uCiAgKi8KLWludCBpODI1OV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit1bnNpZ25lZCBpbnQgaTgyNTlfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCBpcnE7Ci0KLQlzcGluX2xvY2soJmk4MjU5X2xvY2spOworCWludCBsb2NrID0gMDsKIAogCS8qIEVpdGhlciBpbnQtYWNrIG9yIHBvbGwgZm9yIHRoZSBJUlEgKi8KIAlpZiAocGNpX2ludGFjaykKIAkJaXJxID0gcmVhZGIocGNpX2ludGFjayk7CiAJZWxzZSB7CisJCXNwaW5fbG9jaygmaTgyNTlfbG9jayk7CisJCWxvY2sgPSAxOworCiAJCS8qIFBlcmZvcm0gYW4gaW50ZXJydXB0IGFja25vd2xlZGdlIGN5Y2xlIG9uIGNvbnRyb2xsZXIgMS4gKi8KIAkJb3V0YigweDBDLCAweDIwKTsJCS8qIHByZXBhcmUgZm9yIHBvbGwgKi8KIAkJaXJxID0gaW5iKDB4MjApICYgNzsKQEAgLTYyLDE2ICs3MCwxMyBAQAogCQlpZiAoIXBjaV9pbnRhY2spCiAJCQlvdXRiKDB4MEIsIDB4MjApOwkvKiBJU1IgcmVnaXN0ZXIgKi8KIAkJaWYofmluYigweDIwKSAmIDB4ODApCi0JCQlpcnEgPSAtMTsKLQl9CisJCQlpcnEgPSBOT19JUlE7CisJfSBlbHNlIGlmIChpcnEgPT0gMHhmZikKKwkJaXJxID0gTk9fSVJROwogCi0Jc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOwotCXJldHVybiBpcnEgKyBpODI1OV9waWNfaXJxX29mZnNldDsKLX0KLQotaW50IGk4MjU5X2lycV9jYXNjYWRlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICp1bnVzZWQpCi17Ci0JcmV0dXJuIGk4MjU5X2lycShyZWdzKTsKKwlpZiAobG9jaykKKwkJc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOworCXJldHVybiBpcnE7CiB9CiAKIHN0YXRpYyB2b2lkIGk4MjU5X21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycV9ucikKQEAgLTc5LDcgKzg0LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKLQlpcnFfbnIgLT0gaTgyNTlfcGljX2lycV9vZmZzZXQ7CiAJaWYgKGlycV9uciA+IDcpIHsKIAkJY2FjaGVkX0ExIHw9IDEgPDwgKGlycV9uci04KTsKIAkJaW5iKDB4QTEpOyAJLyogRFVNTVkgKi8KQEAgLTEwNSw4ICsxMDksOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlwcl9kZWJ1ZygiaTgyNTlfbWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKLQlpcnFfbnIgLT0gaTgyNTlfcGljX2lycV9vZmZzZXQ7CiAJaWYgKGlycV9uciA8IDgpCiAJCWNhY2hlZF8yMSB8PSAxIDw8IGlycV9ucjsKIAllbHNlCkBAIC0xMTksOCArMTI0LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJcHJfZGVidWcoImk4MjU5X3VubWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKLQlpcnFfbnIgLT0gaTgyNTlfcGljX2lycV9vZmZzZXQ7CiAJaWYgKGlycV9uciA8IDgpCiAJCWNhY2hlZF8yMSAmPSB+KDEgPDwgaXJxX25yKTsKIAllbHNlCkBAIC0xMjksMTkgKzEzNSwxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaTgyNTlfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpCi0JICAgICYmIGlycV9kZXNjW2lycV0uYWN0aW9uKQotCQlpODI1OV91bm1hc2tfaXJxKGlycSk7Ci19Ci0KLXN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpODI1OV9waWMgPSB7Ci0JLnR5cGVuYW1lID0gIiBpODI1OSAgICAiLAotCS5lbmFibGUgPSBpODI1OV91bm1hc2tfaXJxLAotCS5kaXNhYmxlID0gaTgyNTlfbWFza19pcnEsCi0JLmFjayA9IGk4MjU5X21hc2tfYW5kX2Fja19pcnEsCi0JLmVuZCA9IGk4MjU5X2VuZF9pcnEsCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGk4MjU5X3BpYyA9IHsKKwkudHlwZW5hbWUJPSAiIGk4MjU5ICAgICIsCisJLm1hc2sJCT0gaTgyNTlfbWFza19pcnEsCisJLnVubWFzawkJPSBpODI1OV91bm1hc2tfaXJxLAorCS5tYXNrX2Fjawk9IGk4MjU5X21hc2tfYW5kX2Fja19pcnEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBpYzFfaW9yZXMgPSB7CkBAIC0xNjUsMjUgKzE2Myw4NCBAQAogCS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGk4MjU5X2lycWFjdGlvbiA9IHsKLQkuaGFuZGxlciA9IG5vX2FjdGlvbiwKLQkuZmxhZ3MgPSBTQV9JTlRFUlJVUFQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAotCS5uYW1lID0gIjgyYzU5IHNlY29uZGFyeSBjYXNjYWRlIiwKK3N0YXRpYyBpbnQgaTgyNTlfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gaTgyNTlfbm9kZSA9PSBOVUxMIHx8IGk4MjU5X25vZGUgPT0gbm9kZTsKK30KKworc3RhdGljIGludCBpODI1OV9ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICBpcnFfaHdfbnVtYmVyX3QgaHcsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlwcl9kZWJ1ZygiaTgyNTlfaG9zdF9tYXAoJWQsIDB4JWx4KVxuIiwgdmlycSwgaHcpOworCisJLyogV2UgYmxvY2sgdGhlIGludGVybmFsIGNhc2NhZGUgKi8KKwlpZiAoaHcgPT0gMikKKwkJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVDsKKworCS8qIFdlIHVzZSB0aGUgbGV2ZWwgc3R1ZmYgb25seSBmb3Igbm93LCB3ZSBtaWdodCB3YW50IHRvCisJICogYmUgbW9yZSBjYXV0aW91cyBoZXJlIGJ1dCB0aGF0IHdvcmtzIGZvciBub3cKKwkgKi8KKwlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZpODI1OV9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpODI1OV9ob3N0X3VubWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEpCit7CisJLyogTWFrZSBzdXJlIGlycSBpcyBtYXNrZWQgaW4gaGFyZHdhcmUgKi8KKwlpODI1OV9tYXNrX2lycSh2aXJxKTsKKworCS8qIHJlbW92ZSBjaGlwIGFuZCBoYW5kbGVyICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIE5VTEwsIE5VTEwpOworCisJLyogTWFrZSBzdXJlIGl0J3MgY29tcGxldGVkICovCisJc3luY2hyb25pemVfaXJxKHZpcnEpOworfQorCitzdGF0aWMgaW50IGk4MjU5X2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJICAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hcF9pc2Ffc2Vuc2VzWzRdID0geworCQlJUlFfVFlQRV9MRVZFTF9MT1csCisJCUlSUV9UWVBFX0xFVkVMX0hJR0gsCisJCUlSUV9UWVBFX0VER0VfRkFMTElORywKKwkJSVJRX1RZUEVfRURHRV9SSVNJTkcsCisJfTsKKworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOworCWlmIChpbnRzaXplID4gMSAmJiBpbnRzcGVjWzFdIDwgNCkKKwkJKm91dF9mbGFncyA9IG1hcF9pc2Ffc2Vuc2VzW2ludHNwZWNbMV1dOworCWVsc2UKKwkJKm91dF9mbGFncyA9IElSUV9UWVBFX05PTkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgaTgyNTlfaG9zdF9vcHMgPSB7CisJLm1hdGNoID0gaTgyNTlfaG9zdF9tYXRjaCwKKwkubWFwID0gaTgyNTlfaG9zdF9tYXAsCisJLnVubWFwID0gaTgyNTlfaG9zdF91bm1hcCwKKwkueGxhdGUgPSBpODI1OV9ob3N0X3hsYXRlLAogfTsKIAotLyoKLSAqIGk4MjU5X2luaXQoKQotICogaW50YWNrX2FkZHIgLSBQQ0kgaW50ZXJydXB0IGFja25vd2xlZGdlIChyZWFsKSBhZGRyZXNzIHdoaWNoIHdpbGwgcmV0dXJuCi0gKiAgICAgICAgICAgICAgIHRoZSBhY3RpdmUgaXJxIGZyb20gdGhlIDgyNTkKKy8qKioqCisgKiBpODI1OV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgbGVnYWN5IGNvbnRyb2xsZXIKKyAqIEBub2RlOiBkZXZpY2Ugbm9kZSBvZiB0aGUgbGVnYWN5IFBJQyAoY2FuIGJlIE5VTEwsIGJ1dCB0aGVuLCBpdCB3aWxsIG1hdGNoCisgKiAgICAgICAgYWxsIGludGVycnVwdHMsIHNvIGJld2FyZSkKKyAqIEBpbnRhY2tfYWRkcjogUENJIGludGVycnVwdCBhY2tub3dsZWRnZSAocmVhbCkgYWRkcmVzcyB3aGljaCB3aWxsIHJldHVybgorICogICAgICAgICAgICAgCSB0aGUgYWN0aXZlIGlycSBmcm9tIHRoZSA4MjU5CiAgKi8KLXZvaWQgX19pbml0IGk4MjU5X2luaXQodW5zaWduZWQgbG9uZyBpbnRhY2tfYWRkciwgaW50IG9mZnNldCkKK3ZvaWQgaTgyNTlfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHVuc2lnbmVkIGxvbmcgaW50YWNrX2FkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAorCS8qIGluaXRpYWxpemUgdGhlIGNvbnRyb2xsZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwotCWk4MjU5X3BpY19pcnFfb2Zmc2V0ID0gb2Zmc2V0OworCisJLyogTWFzayBhbGwgZmlyc3QgKi8KKwlvdXRiKDB4ZmYsIDB4QTEpOworCW91dGIoMHhmZiwgMHgyMSk7CiAKIAkvKiBpbml0IG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwogCW91dGIoMHgxMSwgMHgyMCk7IC8qIFN0YXJ0IGluaXQgc2VxdWVuY2UgKi8KQEAgLTE5NywyMSArMjU0LDM2IEBACiAJb3V0YigweDAyLCAweEExKTsgLyogZWRnZSB0cmlnZ2VyZWQsIENhc2NhZGUgKHNsYXZlKSBvbiBJUlEyICovCiAJb3V0YigweDAxLCAweEExKTsgLyogU2VsZWN0IDgwODYgbW9kZSAqLwogCisJLyogVGhhdCB0aGluZyBpcyBzbG93ICovCisJdWRlbGF5KDEwMCk7CisKIAkvKiBhbHdheXMgcmVhZCBJU1IgKi8KIAlvdXRiKDB4MEIsIDB4MjApOwogCW91dGIoMHgwQiwgMHhBMCk7CiAKLQkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCisJLyogVW5tYXNrIHRoZSBpbnRlcm5hbCBjYXNjYWRlICovCisJY2FjaGVkXzIxICY9IH4oMSA8PCAyKTsKKworCS8qIFNldCBpbnRlcnJ1cHQgbWFza3MgKi8KIAlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CiAJb3V0YihjYWNoZWRfMjEsIDB4MjEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9JU0FfSU5URVJSVVBUUzsgKytpKQotCQlpcnFfZGVzY1tvZmZzZXQgKyBpXS5oYW5kbGVyID0gJmk4MjU5X3BpYzsKKwkvKiBjcmVhdGUgYSBsZWdhY3kgaG9zdCAqLworCWlmIChub2RlKQorCQlpODI1OV9ub2RlID0gb2Zfbm9kZV9nZXQobm9kZSk7CisJaTgyNTlfaG9zdCA9IGlycV9hbGxvY19ob3N0KElSUV9IT1NUX01BUF9MRUdBQ1ksIDAsICZpODI1OV9ob3N0X29wcywgMCk7CisJaWYgKGk4MjU5X2hvc3QgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImk4MjU5OiBmYWlsZWQgdG8gYWxsb2NhdGUgaXJxIGhvc3QgIVxuIik7CisJCXJldHVybjsKKwl9CiAKIAkvKiByZXNlcnZlIG91ciByZXNvdXJjZXMgKi8KLQlzZXR1cF9pcnEob2Zmc2V0ICsgMiwgJmk4MjU5X2lycWFjdGlvbik7CisJLyogWFhYIHNob3VsZCB3ZSBjb250aW51ZSBkb2luZyB0aGF0ID8gaXQgc2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMKKwkgKiB3aXRoIGZ1cnRoZXIgcmVxdWVzdGluZyBvZiBQQ0kgSU8gcmVzb3VyY2VzIGZvciB0aGF0IHJhbmdlLi4uCisJICogbmVlZCB0byBsb29rIGludG8gaXQuCisJICovCiAJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcGljMV9pb3Jlcyk7CiAJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcGljMl9pb3Jlcyk7CiAJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcGljX2VkZ2VjdHJsX2lvcmVzKTsKQEAgLTIxOSw0ICsyOTEsNSBAQAogCWlmIChpbnRhY2tfYWRkciAhPSAwKQogCQlwY2lfaW50YWNrID0gaW9yZW1hcChpbnRhY2tfYWRkciwgMSk7CiAKKwlwcmludGsoS0VSTl9JTkZPICJpODI1OSBsZWdhY3kgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW5pdGlhbGl6ZWRcbiIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCA4ZjAxZTBmLi40NjgwMWY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VNU1IsIHRlbXApOwogCiAJZm9yIChpID0gMCA7IGkgPCBOUl9JUElDX0lOVFMgOyBpKyspIHsKLQkJaXJxX2Rlc2NbaStpcnFfb2Zmc2V0XS5oYW5kbGVyID0gJmlwaWM7CisJCWlycV9kZXNjW2kraXJxX29mZnNldF0uY2hpcCA9ICZpcGljOwogCQlpcnFfZGVzY1tpK2lycV9vZmZzZXRdLnN0YXR1cyA9IElSUV9MRVZFTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggYmZmZTUwZC4uN2QzMWQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTE3LDcgKzE3LDYgQEAKICN1bmRlZiBERUJVR19JUlEKICN1bmRlZiBERUJVR19MT1cKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTAxLDggKzEwMCw4IEBACiAKIAlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1BSSU1BUlkpCiAJCWNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JcmV0dXJuIF9tcGljX3JlYWQobXBpYy0+ZmxhZ3MgJiBNUElDX0JJR19FTkRJQU4sIG1waWMtPmNwdXJlZ3NbY3B1XSwgcmVnKTsKKwlyZXR1cm4gX21waWNfcmVhZChtcGljLT5mbGFncyAmIE1QSUNfQklHX0VORElBTiwKKwkJCSAgbXBpYy0+Y3B1cmVnc1tjcHVdLCByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX21waWNfY3B1X3dyaXRlKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsdWUpCkBAIC0zNDEsMjcgKzM0MCwxOSBAQAogI2VuZGlmIC8qIENPTkZJR19NUElDX0JST0tFTl9VMyAqLwogCiAKKyNkZWZpbmUgbXBpY19pcnFfdG9faHcodmlycSkJKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKKwogLyogRmluZCBhbiBtcGljIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGxpbnV4IGludGVycnVwdCAqLwogc3RhdGljIHN0cnVjdCBtcGljICptcGljX2ZpbmQodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50ICppc19pcGkpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljczsKKwl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKIAotCXdoaWxlKG1waWMpIHsKLQkJLyogc2VhcmNoIElQSXMgZmlyc3Qgc2luY2UgdGhleSBtYXkgb3ZlcnJpZGUgdGhlIG1haW4gaW50ZXJydXB0cyAqLwotCQlpZiAoaXJxID49IG1waWMtPmlwaV9vZmZzZXQgJiYgaXJxIDwgKG1waWMtPmlwaV9vZmZzZXQgKyA0KSkgewotCQkJaWYgKGlzX2lwaSkKLQkJCQkqaXNfaXBpID0gMTsKLQkJCXJldHVybiBtcGljOwotCQl9Ci0JCWlmIChpcnEgPj0gbXBpYy0+aXJxX29mZnNldCAmJgotCQkgICAgaXJxIDwgKG1waWMtPmlycV9vZmZzZXQgKyBtcGljLT5pcnFfY291bnQpKSB7Ci0JCQlpZiAoaXNfaXBpKQotCQkJCSppc19pcGkgPSAwOwotCQkJcmV0dXJuIG1waWM7Ci0JCX0KLQkJbXBpYyA9IG1waWMgLT4gbmV4dDsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJaWYgKGlycSA8IE5VTV9JU0FfSU5URVJSVVBUUykKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGlzX2lwaSkKKwkJKmlzX2lwaSA9IChzcmMgPj0gTVBJQ19WRUNfSVBJXzAgJiYgc3JjIDw9IE1QSUNfVkVDX0lQSV8zKTsKKworCXJldHVybiBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKIH0KIAogLyogQ29udmVydCBhIGNwdSBtYXNrIGZyb20gbG9naWNhbCB0byBwaHlzaWNhbCBjcHUgbnVtYmVycy4gKi8KQEAgLTM3OSwxNCArMzcwLDE0IEBACiAvKiBHZXQgdGhlIG1waWMgc3RydWN0dXJlIGZyb20gdGhlIElQSSBudW1iZXIgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1waWMgKiBtcGljX2Zyb21faXBpKHVuc2lnbmVkIGludCBpcGkpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihpcnFfZGVzY1tpcGldLmhhbmRsZXIsIHN0cnVjdCBtcGljLCBoY19pcGkpOworCXJldHVybiBpcnFfZGVzY1tpcGldLmNoaXBfZGF0YTsKIH0KICNlbmRpZgogCiAvKiBHZXQgdGhlIG1waWMgc3RydWN0dXJlIGZyb20gdGhlIGlycSBudW1iZXIgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1waWMgKiBtcGljX2Zyb21faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihpcnFfZGVzY1tpcnFdLmhhbmRsZXIsIHN0cnVjdCBtcGljLCBoY19pcnEpOworCXJldHVybiBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKIH0KIAogLyogU2VuZCBhbiBFT0kgKi8KQEAgLTM5OSw5ICszOTAsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtcGljX2lwaV9hY3Rpb24oaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgbXBpYyAqbXBpYyA9IGRldl9pZDsKLQotCXNtcF9tZXNzYWdlX3JlY3YoaXJxIC0gbXBpYy0+aXBpX29mZnNldCwgcmVncyk7CisJc21wX21lc3NhZ2VfcmVjdihtcGljX2lycV90b19odyhpcnEpIC0gTVBJQ19WRUNfSVBJXzAsIHJlZ3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCkBAIC00MTEsMTEgKzQwMCwxMSBAQAogICovCiAKIAotc3RhdGljIHZvaWQgbXBpY19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtcGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcHMgPSAxMDAwMDA7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlycSAtIG1waWMtPmlycV9vZmZzZXQ7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CiAKIAlEQkcoIiVwOiAlczogZW5hYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMsIG1waWMtPm5hbWUsIGlycSwgc3JjKTsKIApAQCAtNDMwLDM5ICs0MTksMTMgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZShtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JUlFfVkVDVE9SX1BSSSkgJiBNUElDX1ZFQ1BSSV9NQVNLKTsJCi0KLSNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKLQlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX0JST0tFTl9VMykgewotCQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxIC0gbXBpYy0+aXJxX29mZnNldDsKLQkJaWYgKG1waWNfaXNfaHRfaW50ZXJydXB0KG1waWMsIHNyYykgJiYKLQkJICAgIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9MRVZFTCkpCi0JCQltcGljX2h0X2VuZF9pcnEobXBpYywgc3JjKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX01QSUNfQlJPS0VOX1UzICovCiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXBpY19zdGFydHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9VMwotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnEgLSBtcGljLT5pcnFfb2Zmc2V0OwotI2VuZGlmIC8qIENPTkZJR19NUElDX0JST0tFTl9VMyAqLwotCi0JbXBpY19lbmFibGVfaXJxKGlycSk7Ci0KLSNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKLQlpZiAobXBpY19pc19odF9pbnRlcnJ1cHQobXBpYywgc3JjKSkKLQkJbXBpY19zdGFydHVwX2h0X2ludGVycnVwdChtcGljLCBzcmMsIGlycV9kZXNjW2lycV0uc3RhdHVzKTsKLSNlbmRpZiAvKiBDT05GSUdfTVBJQ19CUk9LRU5fVTMgKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBtcGljX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtcGljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGxvb3BzID0gMTAwMDAwOwogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnEgLSBtcGljLT5pcnFfb2Zmc2V0OworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOwogCiAJREJHKCIlczogZGlzYWJsZV9pcnE6ICVkIChzcmMgJWQpXG4iLCBtcGljLT5uYW1lLCBpcnEsIHNyYyk7CiAKQEAgLTQ3OSwyMCArNDQyLDYgQEAKIAl9IHdoaWxlKCEobXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkkpICYgTVBJQ19WRUNQUklfTUFTSykpOwogfQogCi1zdGF0aWMgdm9pZCBtcGljX3NodXRkb3duX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9VMwotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnEgLSBtcGljLT5pcnFfb2Zmc2V0OwotCi0JaWYgKG1waWNfaXNfaHRfaW50ZXJydXB0KG1waWMsIHNyYykpCi0JCW1waWNfc2h1dGRvd25faHRfaW50ZXJydXB0KG1waWMsIHNyYywgaXJxX2Rlc2NbaXJxXS5zdGF0dXMpOwotCi0jZW5kaWYgLyogQ09ORklHX01QSUNfQlJPS0VOX1UzICovCi0KLQltcGljX2Rpc2FibGVfaXJxKGlycSk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1waWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOwpAQCAtNTA1LDMwICs0NTQsNzQgQEAKIAkgKiBsYXRjaGVkIGFub3RoZXIgZWRnZSBpbnRlcnJ1cHQgY29taW5nIGluIGFueXdheQogCSAqLwogCi0jaWZkZWYgQ09ORklHX01QSUNfQlJPS0VOX1UzCi0JaWYgKG1waWMtPmZsYWdzICYgTVBJQ19CUk9LRU5fVTMpIHsKLQkJdW5zaWduZWQgaW50IHNyYyA9IGlycSAtIG1waWMtPmlycV9vZmZzZXQ7Ci0JCWlmIChtcGljX2lzX2h0X2ludGVycnVwdChtcGljLCBzcmMpICYmCi0JCSAgICAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTEVWRUwpKQotCQkJbXBpY19odF9lbmRfaXJxKG1waWMsIHNyYyk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19NUElDX0JST0tFTl9VMyAqLwotCiAJbXBpY19lb2kobXBpYyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKKworc3RhdGljIHZvaWQgbXBpY191bm1hc2tfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKGlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CisKKwltcGljX3VubWFza19pcnEoaXJxKTsKKworCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9MRVZFTCkKKwkJbXBpY19odF9lbmRfaXJxKG1waWMsIHNyYyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXBpY19zdGFydHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOworCisJbXBpY191bm1hc2tfaXJxKGlycSk7CisJbXBpY19zdGFydHVwX2h0X2ludGVycnVwdChtcGljLCBzcmMsIGlycV9kZXNjW2lycV0uc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtcGljX3NodXRkb3duX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOworCisJbXBpY19zaHV0ZG93bl9odF9pbnRlcnJ1cHQobXBpYywgc3JjLCBpcnFfZGVzY1tpcnFdLnN0YXR1cyk7CisJbXBpY19tYXNrX2lycShpcnEpOworfQorCitzdGF0aWMgdm9pZCBtcGljX2VuZF9odF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKKworI2lmZGVmIERFQlVHX0lSUQorCURCRygiJXM6IGVuZF9pcnE6ICVkXG4iLCBtcGljLT5uYW1lLCBpcnEpOworI2VuZGlmCisJLyogV2UgYWx3YXlzIEVPSSBvbiBlbmRfaXJxKCkgZXZlbiBmb3IgZWRnZSBpbnRlcnJ1cHRzIHNpbmNlIHRoYXQKKwkgKiBzaG91bGQgb25seSBsb3dlciB0aGUgcHJpb3JpdHksIHRoZSBNUElDIHNob3VsZCBoYXZlIHByb3Blcmx5CisJICogbGF0Y2hlZCBhbm90aGVyIGVkZ2UgaW50ZXJydXB0IGNvbWluZyBpbiBhbnl3YXkKKwkgKi8KKworCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9MRVZFTCkKKwkJbXBpY19odF9lbmRfaXJxKG1waWMsIHNyYyk7CisJbXBpY19lb2kobXBpYyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTVBJQ19CUk9LRU5fVTMgKi8KKwogI2lmZGVmIENPTkZJR19TTVAKIAotc3RhdGljIHZvaWQgbXBpY19lbmFibGVfaXBpKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtcGljX3VubWFza19pcGkodW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcGkoaXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxIC0gbXBpYy0+aXBpX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKSAtIE1QSUNfVkVDX0lQSV8wOwogCiAJREJHKCIlczogZW5hYmxlX2lwaTogJWQgKGlwaSAlZClcbiIsIG1waWMtPm5hbWUsIGlycSwgc3JjKTsKIAltcGljX2lwaV93cml0ZShzcmMsIG1waWNfaXBpX3JlYWQoc3JjKSAmIH5NUElDX1ZFQ1BSSV9NQVNLKTsKIH0KIAotc3RhdGljIHZvaWQgbXBpY19kaXNhYmxlX2lwaSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbXBpY19tYXNrX2lwaSh1bnNpZ25lZCBpbnQgaXJxKQogewogCS8qIE5FVkVSIGRpc2FibGUgYW4gSVBJLi4uIHRoYXQncyBqdXN0IHBsYWluIHdyb25nISAqLwogfQpAQCAtNTQxLDcgKzUzNCw3IEBACiAJICogSVBJcyBhcmUgbWFya2VkIElSUV9QRVJfQ1BVLiBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YKIAkgKiBwcmV2ZW50aW5nIHRoZSBJUlFfUEVORElORy9JUlFfSU5QUk9HUkVTUyBsb2dpYyBmcm9tCiAJICogYXBwbHlpbmcgdG8gdGhlbS4gV2UgRU9JIHRoZW0gbGF0ZSB0byBhdm9pZCByZS1lbnRlcmluZy4KLQkgKiBXZSBtYXJrIElQSSdzIHdpdGggU0FfSU5URVJSVVBUIGFzIHRoZXkgbXVzdCBydW4gd2l0aAorCSAqIFdlIG1hcmsgSVBJJ3Mgd2l0aCBJUlFGX0RJU0FCTEVEIGFzIHRoZXkgbXVzdCBydW4gd2l0aAogCSAqIGlycXMgZGlzYWJsZWQuCiAJICovCiAJbXBpY19lb2kobXBpYyk7CkBAIC01NTIsMjkgKzU0NSwxNzYgQEAKIHN0YXRpYyB2b2lkIG1waWNfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBjcHVtYXNrKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycShpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOwogCiAJY3B1bWFza190IHRtcDsKIAogCWNwdXNfYW5kKHRtcCwgY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwogCi0JbXBpY19pcnFfd3JpdGUoaXJxIC0gbXBpYy0+aXJxX29mZnNldCwgTVBJQ19JUlFfREVTVElOQVRJT04sCisJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lSUV9ERVNUSU5BVElPTiwKIAkJICAgICAgIG1waWNfcGh5c21hc2soY3B1c19hZGRyKHRtcClbMF0pKTsJCiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXBpY19mbGFnc190b192ZWNwcmkodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgKmxldmVsKQoreworCXVuc2lnbmVkIGludCB2ZWNwcmk7CisKKwkvKiBOb3cgY29udmVydCBzZW5zZSB2YWx1ZSAqLworCXN3aXRjaChmbGFncyAmIElSUV9UWVBFX1NFTlNFX01BU0spIHsKKwljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQl2ZWNwcmkgPSBNUElDX1ZFQ1BSSV9TRU5TRV9FREdFIHwKKwkJCU1QSUNfVkVDUFJJX1BPTEFSSVRZX1BPU0lUSVZFOworCQkqbGV2ZWwgPSAwOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJdmVjcHJpID0gTVBJQ19WRUNQUklfU0VOU0VfRURHRSB8CisJCQlNUElDX1ZFQ1BSSV9QT0xBUklUWV9ORUdBVElWRTsKKwkJKmxldmVsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQl2ZWNwcmkgPSBNUElDX1ZFQ1BSSV9TRU5TRV9MRVZFTCB8CisJCQlNUElDX1ZFQ1BSSV9QT0xBUklUWV9QT1NJVElWRTsKKwkJKmxldmVsID0gMTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJZGVmYXVsdDoKKwkJdmVjcHJpID0gTVBJQ19WRUNQUklfU0VOU0VfTEVWRUwgfAorCQkJTVBJQ19WRUNQUklfUE9MQVJJVFlfTkVHQVRJVkU7CisJCSpsZXZlbCA9IDE7CisJfQorCXJldHVybiB2ZWNwcmk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY19pcnFfY2hpcCA9IHsKKwkubWFzawk9IG1waWNfbWFza19pcnEsCisJLnVubWFzawk9IG1waWNfdW5tYXNrX2lycSwKKwkuZW9pCT0gbXBpY19lbmRfaXJxLAorfTsKKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY19pcGlfY2hpcCA9IHsKKwkubWFzawk9IG1waWNfbWFza19pcGksCisJLnVubWFzawk9IG1waWNfdW5tYXNrX2lwaSwKKwkuZW9pCT0gbXBpY19lbmRfaXBpLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY19pcnFfaHRfY2hpcCA9IHsKKwkuc3RhcnR1cAk9IG1waWNfc3RhcnR1cF9odF9pcnEsCisJLnNodXRkb3duCT0gbXBpY19zaHV0ZG93bl9odF9pcnEsCisJLm1hc2sJCT0gbXBpY19tYXNrX2lycSwKKwkudW5tYXNrCQk9IG1waWNfdW5tYXNrX2h0X2lycSwKKwkuZW9pCQk9IG1waWNfZW5kX2h0X2lycSwKK307CisjZW5kaWYgLyogQ09ORklHX01QSUNfQlJPS0VOX1UzICovCisKKworc3RhdGljIGludCBtcGljX2hvc3RfbWF0Y2goc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IG1waWMgKm1waWMgPSBoLT5ob3N0X2RhdGE7CisKKwkvKiBFeGFjdCBtYXRjaCwgdW5sZXNzIG1waWMgbm9kZSBpcyBOVUxMICovCisJcmV0dXJuIG1waWMtPm9mX25vZGUgPT0gTlVMTCB8fCBtcGljLT5vZl9ub2RlID09IG5vZGU7Cit9CisKK3N0YXRpYyBpbnQgbXBpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJIGlycV9od19udW1iZXJfdCBodywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CisJc3RydWN0IG1waWMgKm1waWMgPSBoLT5ob3N0X2RhdGE7CisJdW5zaWduZWQgaW50IHZlY3ByaSA9IE1QSUNfVkVDUFJJX1NFTlNFX0xFVkVMIHwKKwkJTVBJQ19WRUNQUklfUE9MQVJJVFlfTkVHQVRJVkU7CisJaW50IGxldmVsOworCisJcHJfZGVidWcoIm1waWM6IG1hcCB2aXJxICVkLCBod2lycSAweCVseCwgZmxhZ3M6IDB4JXhcbiIsCisJCSB2aXJxLCBodywgZmxhZ3MpOworCisJaWYgKGh3ID09IE1QSUNfVkVDX1NQVVJSSU9VUykKKwkJcmV0dXJuIC1FSU5WQUw7CisjaWZkZWYgQ09ORklHX1NNUAorCWVsc2UgaWYgKGh3ID49IE1QSUNfVkVDX0lQSV8wKSB7CisJCVdBUk5fT04oIShtcGljLT5mbGFncyAmIE1QSUNfUFJJTUFSWSkpOworCisJCXByX2RlYnVnKCJtcGljOiBtYXBwaW5nIGFzIElQSVxuIik7CisJCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIG1waWMpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1waWMtPmhjX2lwaSwKKwkJCQkJIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworCWlmIChodyA+PSBtcGljLT5pcnFfY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSWYgbm8gc2Vuc2UgcHJvdmlkZWQsIGNoZWNrIGRlZmF1bHQgc2Vuc2UgYXJyYXkgKi8KKwlpZiAoKChmbGFncyAmIElSUV9UWVBFX1NFTlNFX01BU0spID09IElSUV9UWVBFX05PTkUpICYmCisJICAgIG1waWMtPnNlbnNlcyAmJiBodyA8IG1waWMtPnNlbnNlc19jb3VudCkKKwkJZmxhZ3MgfD0gbXBpYy0+c2Vuc2VzW2h3XTsKKworCXZlY3ByaSA9IG1waWNfZmxhZ3NfdG9fdmVjcHJpKGZsYWdzLCAmbGV2ZWwpOworCWlmIChsZXZlbCkKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwljaGlwID0gJm1waWMtPmhjX2lycTsKKworI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9VMworCS8qIENoZWNrIGZvciBIVCBpbnRlcnJ1cHRzLCBvdmVycmlkZSB2ZWNwcmkgKi8KKwlpZiAobXBpY19pc19odF9pbnRlcnJ1cHQobXBpYywgaHcpKSB7CisJCXZlY3ByaSAmPSB+KE1QSUNfVkVDUFJJX1NFTlNFX01BU0sgfAorCQkJICAgIE1QSUNfVkVDUFJJX1BPTEFSSVRZX01BU0spOworCQl2ZWNwcmkgfD0gTVBJQ19WRUNQUklfUE9MQVJJVFlfUE9TSVRJVkU7CisJCWNoaXAgPSAmbXBpYy0+aGNfaHRfaXJxOworCX0KKyNlbmRpZgorCisJLyogUmVjb25maWd1cmUgaXJxICovCisJdmVjcHJpIHw9IE1QSUNfVkVDUFJJX01BU0sgfCBodyB8ICg4IDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKTsKKwltcGljX2lycV93cml0ZShodywgTVBJQ19JUlFfVkVDVE9SX1BSSSwgdmVjcHJpKTsKKworCXByX2RlYnVnKCJtcGljOiBtYXBwaW5nIGFzIElSUVxuIik7CisKKwlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBtcGljKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgY2hpcCwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKKworeworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hcF9tcGljX3NlbnNlc1s0XSA9IHsKKwkJSVJRX1RZUEVfRURHRV9SSVNJTkcsCisJCUlSUV9UWVBFX0xFVkVMX0xPVywKKwkJSVJRX1RZUEVfTEVWRUxfSElHSCwKKwkJSVJRX1RZUEVfRURHRV9GQUxMSU5HLAorCX07CisKKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwlpZiAoaW50c2l6ZSA+IDEgJiYgaW50c3BlY1sxXSA8IDQpCisJCSpvdXRfZmxhZ3MgPSBtYXBfbXBpY19zZW5zZXNbaW50c3BlY1sxXV07CisJZWxzZQorCQkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTk9ORTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyBtcGljX2hvc3Rfb3BzID0geworCS5tYXRjaCA9IG1waWNfaG9zdF9tYXRjaCwKKwkubWFwID0gbXBpY19ob3N0X21hcCwKKwkueGxhdGUgPSBtcGljX2hvc3RfeGxhdGUsCit9OwogCiAvKgogICogRXhwb3J0ZWQgZnVuY3Rpb25zCiAgKi8KIAotCi1zdHJ1Y3QgbXBpYyAqIF9faW5pdCBtcGljX2FsbG9jKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorc3RydWN0IG1waWMgKiBfX2luaXQgbXBpY19hbGxvYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCiAJCQkJdW5zaWduZWQgaW50IGZsYWdzLAogCQkJCXVuc2lnbmVkIGludCBpc3Vfc2l6ZSwKLQkJCQl1bnNpZ25lZCBpbnQgaXJxX29mZnNldCwKIAkJCQl1bnNpZ25lZCBpbnQgaXJxX2NvdW50LAotCQkJCXVuc2lnbmVkIGludCBpcGlfb2Zmc2V0LAotCQkJCXVuc2lnbmVkIGNoYXIgKnNlbnNlcywKLQkJCQl1bnNpZ25lZCBpbnQgc2Vuc2VzX2NvdW50LAogCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG1waWMJKm1waWM7CkBAIC01ODYsMzMgKzcyNiwzOCBAQAogCWlmIChtcGljID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCQotCiAJbWVtc2V0KG1waWMsIDAsIHNpemVvZihzdHJ1Y3QgbXBpYykpOwogCW1waWMtPm5hbWUgPSBuYW1lOworCW1waWMtPm9mX25vZGUgPSBub2RlID8gb2Zfbm9kZV9nZXQobm9kZSkgOiBOVUxMOwogCisJbXBpYy0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KElSUV9IT1NUX01BUF9MSU5FQVIsIDI1NiwKKwkJCQkgICAgICAgJm1waWNfaG9zdF9vcHMsCisJCQkJICAgICAgIE1QSUNfVkVDX1NQVVJSSU9VUyk7CisJaWYgKG1waWMtPmlycWhvc3QgPT0gTlVMTCkgeworCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbXBpYy0+aXJxaG9zdC0+aG9zdF9kYXRhID0gbXBpYzsKKwltcGljLT5oY19pcnEgPSBtcGljX2lycV9jaGlwOwogCW1waWMtPmhjX2lycS50eXBlbmFtZSA9IG5hbWU7Ci0JbXBpYy0+aGNfaXJxLnN0YXJ0dXAgPSBtcGljX3N0YXJ0dXBfaXJxOwotCW1waWMtPmhjX2lycS5zaHV0ZG93biA9IG1waWNfc2h1dGRvd25faXJxOwotCW1waWMtPmhjX2lycS5lbmFibGUgPSBtcGljX2VuYWJsZV9pcnE7Ci0JbXBpYy0+aGNfaXJxLmRpc2FibGUgPSBtcGljX2Rpc2FibGVfaXJxOwotCW1waWMtPmhjX2lycS5lbmQgPSBtcGljX2VuZF9pcnE7CiAJaWYgKGZsYWdzICYgTVBJQ19QUklNQVJZKQogCQltcGljLT5oY19pcnEuc2V0X2FmZmluaXR5ID0gbXBpY19zZXRfYWZmaW5pdHk7CisjaWZkZWYgQ09ORklHX01QSUNfQlJPS0VOX1UzCisJbXBpYy0+aGNfaHRfaXJxID0gbXBpY19pcnFfaHRfY2hpcDsKKwltcGljLT5oY19odF9pcnEudHlwZW5hbWUgPSBuYW1lOworCWlmIChmbGFncyAmIE1QSUNfUFJJTUFSWSkKKwkJbXBpYy0+aGNfaHRfaXJxLnNldF9hZmZpbml0eSA9IG1waWNfc2V0X2FmZmluaXR5OworI2VuZGlmIC8qIENPTkZJR19NUElDX0JST0tFTl9VMyAqLwogI2lmZGVmIENPTkZJR19TTVAKKwltcGljLT5oY19pcGkgPSBtcGljX2lwaV9jaGlwOwogCW1waWMtPmhjX2lwaS50eXBlbmFtZSA9IG5hbWU7Ci0JbXBpYy0+aGNfaXBpLmVuYWJsZSA9IG1waWNfZW5hYmxlX2lwaTsKLQltcGljLT5oY19pcGkuZGlzYWJsZSA9IG1waWNfZGlzYWJsZV9pcGk7Ci0JbXBpYy0+aGNfaXBpLmVuZCA9IG1waWNfZW5kX2lwaTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAltcGljLT5mbGFncyA9IGZsYWdzOwogCW1waWMtPmlzdV9zaXplID0gaXN1X3NpemU7Ci0JbXBpYy0+aXJxX29mZnNldCA9IGlycV9vZmZzZXQ7CiAJbXBpYy0+aXJxX2NvdW50ID0gaXJxX2NvdW50OwotCW1waWMtPmlwaV9vZmZzZXQgPSBpcGlfb2Zmc2V0OwogCW1waWMtPm51bV9zb3VyY2VzID0gMDsgLyogc28gZmFyICovCi0JbXBpYy0+c2Vuc2VzID0gc2Vuc2VzOwotCW1waWMtPnNlbnNlc19jb3VudCA9IHNlbnNlc19jb3VudDsKIAogCS8qIE1hcCB0aGUgZ2xvYmFsIHJlZ2lzdGVycyAqLwogCW1waWMtPmdyZWdzID0gaW9yZW1hcChwaHlzX2FkZHIgKyBNUElDX0dSRUdfQkFTRSwgMHgxMDAwKTsKQEAgLTY4MCw4ICs4MjUsMTAgQEAKIAltcGljLT5uZXh0ID0gbXBpY3M7CiAJbXBpY3MgPSBtcGljOwogCi0JaWYgKGZsYWdzICYgTVBJQ19QUklNQVJZKQorCWlmIChmbGFncyAmIE1QSUNfUFJJTUFSWSkgewogCQltcGljX3ByaW1hcnkgPSBtcGljOworCQlpcnFfc2V0X2RlZmF1bHRfaG9zdChtcGljLT5pcnFob3N0KTsKKwl9CiAKIAlyZXR1cm4gbXBpYzsKIH0KQEAgLTY5OCwyNiArODQ1LDEwIEBACiAJCW1waWMtPm51bV9zb3VyY2VzID0gaXN1X2ZpcnN0ICsgbXBpYy0+aXN1X3NpemU7CiB9CiAKLXZvaWQgX19pbml0IG1waWNfc2V0dXBfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBtcGljX2Nhc2NhZGVfdCBoYW5kbGVyLAotCQkJICAgICAgIHZvaWQgKmRhdGEpCit2b2lkIF9faW5pdCBtcGljX3NldF9kZWZhdWx0X3NlbnNlcyhzdHJ1Y3QgbXBpYyAqbXBpYywgdTggKnNlbnNlcywgaW50IGNvdW50KQogewotCXN0cnVjdCBtcGljICptcGljID0gbXBpY19maW5kKGlycSwgTlVMTCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFN5bmNocm9uaXphdGlvbiBoZXJlIGlzIGEgYml0IGRvZGd5LCBzbyBkb24ndCB0cnkgdG8gcmVwbGFjZSBjYXNjYWRlCi0JICogaW50ZXJydXB0cyBvbiB0aGUgZmx5IHRvbyBvZnRlbiAuLi4gYnV0IG5vcm1hbGx5IGl0J3Mgc2V0IHVwIGF0IGJvb3QuCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwotCWlmIChtcGljLT5jYXNjYWRlKQkgICAgICAgCi0JCW1waWNfZGlzYWJsZV9pcnEobXBpYy0+Y2FzY2FkZV92ZWMgKyBtcGljLT5pcnFfb2Zmc2V0KTsKLQltcGljLT5jYXNjYWRlID0gTlVMTDsKLQl3bWIoKTsKLQltcGljLT5jYXNjYWRlX3ZlYyA9IGlycSAtIG1waWMtPmlycV9vZmZzZXQ7Ci0JbXBpYy0+Y2FzY2FkZV9kYXRhID0gZGF0YTsKLQl3bWIoKTsKLQltcGljLT5jYXNjYWRlID0gaGFuZGxlcjsKLQltcGljX2VuYWJsZV9pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwltcGljLT5zZW5zZXMgPSBzZW5zZXM7CisJbXBpYy0+c2Vuc2VzX2NvdW50ID0gY291bnQ7CiB9CiAKIHZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYykKQEAgLTcyNSw2ICs4NTYsMTEgQEAKIAlpbnQgaTsKIAogCUJVR19PTihtcGljLT5udW1fc291cmNlcyA9PSAwKTsKKwlXQVJOX09OKG1waWMtPm51bV9zb3VyY2VzID4gTVBJQ19WRUNfSVBJXzApOworCisJLyogU2FuaXRpemUgc291cmNlIGNvdW50ICovCisJaWYgKG1waWMtPm51bV9zb3VyY2VzID4gTVBJQ19WRUNfSVBJXzApCisJCW1waWMtPm51bV9zb3VyY2VzID0gTVBJQ19WRUNfSVBJXzA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJtcGljOiBJbml0aWFsaXppbmcgZm9yICVkIHNvdXJjZXNcbiIsIG1waWMtPm51bV9zb3VyY2VzKTsKIApAQCAtNzQ4LDEyICs4ODQsNiBAQAogCQkJICAgICAgIE1QSUNfVkVDUFJJX01BU0sgfAogCQkJICAgICAgICgxMCA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCkgfAogCQkJICAgICAgIChNUElDX1ZFQ19JUElfMCArIGkpKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWlmICghKG1waWMtPmZsYWdzICYgTVBJQ19QUklNQVJZKSkKLQkJCWNvbnRpbnVlOwotCQlpcnFfZGVzY1ttcGljLT5pcGlfb2Zmc2V0K2ldLnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKLQkJaXJxX2Rlc2NbbXBpYy0+aXBpX29mZnNldCtpXS5oYW5kbGVyID0gJm1waWMtPmhjX2lwaTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJfQogCiAJLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHQgc291cmNlcyAqLwpAQCAtNzY0LDMxICs4OTQsMjEgQEAKIAkvKiBEbyB0aGUgSFQgUElDIGZpeHVwcyBvbiBVMyBicm9rZW4gbXBpYyAqLwogCURCRygiTVBJQyBmbGFnczogJXhcbiIsIG1waWMtPmZsYWdzKTsKIAlpZiAoKG1waWMtPmZsYWdzICYgTVBJQ19CUk9LRU5fVTMpICYmIChtcGljLT5mbGFncyAmIE1QSUNfUFJJTUFSWSkpCi0JCW1waWNfc2Nhbl9odF9waWNzKG1waWMpOworIAkJbXBpY19zY2FuX2h0X3BpY3MobXBpYyk7CiAjZW5kaWYgLyogQ09ORklHX01QSUNfQlJPS0VOX1UzICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX3NvdXJjZXM7IGkrKykgewogCQkvKiBzdGFydCB3aXRoIHZlY3RvciA9IHNvdXJjZSBudW1iZXIsIGFuZCBtYXNrZWQgKi8KIAkJdTMyIHZlY3ByaSA9IE1QSUNfVkVDUFJJX01BU0sgfCBpIHwgKDggPDwgTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQpOwotCQlpbnQgbGV2ZWwgPSAwOworCQlpbnQgbGV2ZWwgPSAxOwogCQkKLQkJLyogaWYgaXQncyBhbiBJUEksIHdlIHNraXAgaXQgKi8KLQkJaWYgKChtcGljLT5pcnFfb2Zmc2V0ICsgaSkgPj0gKG1waWMtPmlwaV9vZmZzZXQgKyBpKSAmJgotCQkgICAgKG1waWMtPmlycV9vZmZzZXQgKyBpKSA8ICAobXBpYy0+aXBpX29mZnNldCArIGkgKyA0KSkKLQkJCWNvbnRpbnVlOwotCiAJCS8qIGRvIHNlbnNlcyBtdW5naW5nICovCi0JCWlmIChtcGljLT5zZW5zZXMgJiYgaSA8IG1waWMtPnNlbnNlc19jb3VudCkgewotCQkJaWYgKG1waWMtPnNlbnNlc1tpXSAmIElSUV9TRU5TRV9MRVZFTCkKLQkJCQl2ZWNwcmkgfD0gTVBJQ19WRUNQUklfU0VOU0VfTEVWRUw7Ci0JCQlpZiAobXBpYy0+c2Vuc2VzW2ldICYgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKQotCQkJCXZlY3ByaSB8PSBNUElDX1ZFQ1BSSV9QT0xBUklUWV9QT1NJVElWRTsKLQkJfSBlbHNlCisJCWlmIChtcGljLT5zZW5zZXMgJiYgaSA8IG1waWMtPnNlbnNlc19jb3VudCkKKwkJCXZlY3ByaSA9IG1waWNfZmxhZ3NfdG9fdmVjcHJpKG1waWMtPnNlbnNlc1tpXSwKKwkJCQkJCSAgICAgICZsZXZlbCk7CisJCWVsc2UKIAkJCXZlY3ByaSB8PSBNUElDX1ZFQ1BSSV9TRU5TRV9MRVZFTDsKIAotCQkvKiByZW1lbWJlciBpZiBpdCB3YXMgYSBsZXZlbCBpbnRlcnJ1cHRzICovCi0JCWxldmVsID0gKHZlY3ByaSAmIE1QSUNfVkVDUFJJX1NFTlNFX0xFVkVMKTsKLQogCQkvKiBkZWFsIHdpdGggYnJva2VuIFUzICovCiAJCWlmIChtcGljLT5mbGFncyAmIE1QSUNfQlJPS0VOX1UzKSB7CiAjaWZkZWYgQ09ORklHX01QSUNfQlJPS0VOX1UzCkBAIC04MDksMTIgKzkyOSw2IEBACiAJCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSVJRX1ZFQ1RPUl9QUkksIHZlY3ByaSk7CiAJCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSVJRX0RFU1RJTkFUSU9OLAogCQkJICAgICAgIDEgPDwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JCS8qIGluaXQgbGludXggZGVzY3JpcHRvcnMgKi8KLQkJaWYgKGkgPCBtcGljLT5pcnFfY291bnQpIHsKLQkJCWlycV9kZXNjW21waWMtPmlycV9vZmZzZXQraV0uc3RhdHVzID0gbGV2ZWwgPyBJUlFfTEVWRUwgOiAwOwotCQkJaXJxX2Rlc2NbbXBpYy0+aXJxX29mZnNldCtpXS5oYW5kbGVyID0gJm1waWMtPmhjX2lycTsKLQkJfQogCX0KIAkKIAkvKiBJbml0IHNwdXJyaW91cyB2ZWN0b3IgKi8KQEAgLTg1NSwxOSArOTY5LDIwIEBACiB7CiAJaW50IGlzX2lwaTsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZmluZChpcnEsICZpc19pcGkpOworCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHJlZzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAoaXNfaXBpKSB7Ci0JCXJlZyA9IG1waWNfaXBpX3JlYWQoaXJxIC0gbXBpYy0+aXBpX29mZnNldCkgJgorCQlyZWcgPSBtcGljX2lwaV9yZWFkKHNyYyAtIE1QSUNfVkVDX0lQSV8wKSAmCiAJCQl+TVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSzsKLQkJbXBpY19pcGlfd3JpdGUoaXJxIC0gbXBpYy0+aXBpX29mZnNldCwKKwkJbXBpY19pcGlfd3JpdGUoc3JjIC0gTVBJQ19WRUNfSVBJXzAsCiAJCQkgICAgICAgcmVnIHwgKHByaSA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCkpOwogCX0gZWxzZSB7Ci0JCXJlZyA9IG1waWNfaXJxX3JlYWQoaXJxIC0gbXBpYy0+aXJxX29mZnNldCxNUElDX0lSUV9WRUNUT1JfUFJJKQorCQlyZWcgPSBtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JUlFfVkVDVE9SX1BSSSkKIAkJCSYgfk1QSUNfVkVDUFJJX1BSSU9SSVRZX01BU0s7Ci0JCW1waWNfaXJxX3dyaXRlKGlycSAtIG1waWMtPmlycV9vZmZzZXQsIE1QSUNfSVJRX1ZFQ1RPUl9QUkksCisJCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JUlFfVkVDVE9SX1BSSSwKIAkJCSAgICAgICByZWcgfCAocHJpIDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwpAQCAtODc3LDE0ICs5OTIsMTUgQEAKIHsKIAlpbnQgaXNfaXBpOwogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19maW5kKGlycSwgJmlzX2lwaSk7CisJdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcmVnOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCWlmIChpc19pcGkpCi0JCXJlZyA9IG1waWNfaXBpX3JlYWQoaXJxIC0gbXBpYy0+aXBpX29mZnNldCk7CisJCXJlZyA9IG1waWNfaXBpX3JlYWQoc3JjID0gTVBJQ19WRUNfSVBJXzApOwogCWVsc2UKLQkJcmVnID0gbXBpY19pcnFfcmVhZChpcnEgLSBtcGljLT5pcnFfb2Zmc2V0LCBNUElDX0lSUV9WRUNUT1JfUFJJKTsKKwkJcmVnID0gbXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAocmVnICYgTVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSykgPj4gTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQ7CiB9CkBAIC05MDYsNyArMTAyMiw3IEBACiAgCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIHdhbnQgaW50cnMuIGRlZmF1bHQgYWZmaW5pdHkgaXMgMHhmZmZmZmZmZgogCSAqIHVudGlsIGNoYW5nZWQgdmlhIC9wcm9jLiBUaGF0J3MgaG93IGl0J3MgZG9uZSBvbiB4ODYuIElmIHdlIHdhbnQKIAkgKiBpdCBkaWZmZXJlbnRseSwgdGhlbiB3ZSBzaG91bGQgbWFrZSBzdXJlIHdlIGFsc28gY2hhbmdlIHRoZSBkZWZhdWx0Ci0JICogdmFsdWVzIG9mIGlycV9hZmZpbml0eSBpbiBpcnEuYy4KKwkgKiB2YWx1ZXMgb2YgaXJxX2Rlc2NbXS5hZmZpbml0eSBpbiBpcnEuYy4KICAJICovCiAJaWYgKGRpc3RyaWJ1dGVfaXJxcykgewogCSAJZm9yIChpID0gMDsgaSA8IG1waWMtPm51bV9zb3VyY2VzIDsgaSsrKQpAQCAtOTc5LDM3ICsxMDk1LDIwIEBACiAJCSAgICAgICBtcGljX3BoeXNtYXNrKGNwdV9tYXNrICYgY3B1c19hZGRyKGNwdV9vbmxpbmVfbWFwKVswXSkpOwogfQogCi1pbnQgbXBpY19nZXRfb25lX2lycShzdHJ1Y3QgbXBpYyAqbXBpYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit1bnNpZ25lZCBpbnQgbXBpY19nZXRfb25lX2lycShzdHJ1Y3QgbXBpYyAqbXBpYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdTMyIGlycTsKKwl1MzIgc3JjOwogCi0JaXJxID0gbXBpY19jcHVfcmVhZChNUElDX0NQVV9JTlRBQ0spICYgTVBJQ19WRUNQUklfVkVDVE9SX01BU0s7CisJc3JjID0gbXBpY19jcHVfcmVhZChNUElDX0NQVV9JTlRBQ0spICYgTVBJQ19WRUNQUklfVkVDVE9SX01BU0s7CiAjaWZkZWYgREVCVUdfTE9XCi0JREJHKCIlczogZ2V0X29uZV9pcnEoKTogJWRcbiIsIG1waWMtPm5hbWUsIGlycSk7CisJREJHKCIlczogZ2V0X29uZV9pcnEoKTogJWRcbiIsIG1waWMtPm5hbWUsIHNyYyk7CiAjZW5kaWYKLQlpZiAobXBpYy0+Y2FzY2FkZSAmJiBpcnEgPT0gbXBpYy0+Y2FzY2FkZV92ZWMpIHsKLSNpZmRlZiBERUJVR19MT1cKLQkJREJHKCIlczogY2FzY2FkaW5nIC4uLlxuIiwgbXBpYy0+bmFtZSk7Ci0jZW5kaWYKLQkJaXJxID0gbXBpYy0+Y2FzY2FkZShyZWdzLCBtcGljLT5jYXNjYWRlX2RhdGEpOwotCQltcGljX2VvaShtcGljKTsKLQkJcmV0dXJuIGlycTsKLQl9Ci0JaWYgKHVubGlrZWx5KGlycSA9PSBNUElDX1ZFQ19TUFVSUklPVVMpKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGlycSA8IE1QSUNfVkVDX0lQSV8wKSB7Ci0jaWZkZWYgREVCVUdfSVJRCi0JCURCRygiJXM6IGlycSAlZFxuIiwgbXBpYy0+bmFtZSwgaXJxICsgbXBpYy0+aXJxX29mZnNldCk7Ci0jZW5kaWYKLQkJcmV0dXJuIGlycSArIG1waWMtPmlycV9vZmZzZXQ7Ci0JfQotI2lmZGVmIERFQlVHX0lQSQotICAgICAgIAlEQkcoIiVzOiBpcGkgJWQgIVxuIiwgbXBpYy0+bmFtZSwgaXJxIC0gTVBJQ19WRUNfSVBJXzApOwotI2VuZGlmCi0JcmV0dXJuIGlycSAtIE1QSUNfVkVDX0lQSV8wICsgbXBpYy0+aXBpX29mZnNldDsKKwlpZiAodW5saWtlbHkoc3JjID09IE1QSUNfVkVDX1NQVVJSSU9VUykpCisJCXJldHVybiBOT19JUlE7CisJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKG1waWMtPmlycWhvc3QsIHNyYyk7CiB9CiAKLWludCBtcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit1bnNpZ25lZCBpbnQgbXBpY19nZXRfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19wcmltYXJ5OwogCkBAIC0xMDIzLDIyICsxMTIyLDI3IEBACiB2b2lkIG1waWNfcmVxdWVzdF9pcGlzKHZvaWQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX3ByaW1hcnk7Ci0KKwlpbnQgaTsKKwlzdGF0aWMgY2hhciAqaXBpX25hbWVzW10gPSB7CisJCSJJUEkwIChjYWxsIGZ1bmN0aW9uKSIsCisJCSJJUEkxIChyZXNjaGVkdWxlKSIsCisJCSJJUEkyICh1bnVzZWQpIiwKKwkJIklQSTMgKGRlYnVnZ2VyIGJyZWFrKSIsCisJfTsKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKLQkKLQlwcmludGsoInJlcXVlc3RpbmcgSVBJcyAuLi4gXG4iKTsKIAotCS8qIElQSXMgYXJlIG1hcmtlZCBTQV9JTlRFUlJVUFQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMgZGlzYWJsZWQgKi8KLQlyZXF1ZXN0X2lycShtcGljLT5pcGlfb2Zmc2V0KzAsIG1waWNfaXBpX2FjdGlvbiwgU0FfSU5URVJSVVBULAotCQkgICAgIklQSTAgKGNhbGwgZnVuY3Rpb24pIiwgbXBpYyk7Ci0JcmVxdWVzdF9pcnEobXBpYy0+aXBpX29mZnNldCsxLCBtcGljX2lwaV9hY3Rpb24sIFNBX0lOVEVSUlVQVCwKLQkJICAgIklQSTEgKHJlc2NoZWR1bGUpIiwgbXBpYyk7Ci0JcmVxdWVzdF9pcnEobXBpYy0+aXBpX29mZnNldCsyLCBtcGljX2lwaV9hY3Rpb24sIFNBX0lOVEVSUlVQVCwKLQkJICAgIklQSTIgKHVudXNlZCkiLCBtcGljKTsKLQlyZXF1ZXN0X2lycShtcGljLT5pcGlfb2Zmc2V0KzMsIG1waWNfaXBpX2FjdGlvbiwgU0FfSU5URVJSVVBULAotCQkgICAiSVBJMyAoZGVidWdnZXIgYnJlYWspIiwgbXBpYyk7CisJcHJpbnRrKEtFUk5fSU5GTyAibXBpYzogcmVxdWVzdGluZyBJUElzIC4uLiBcbiIpOwogCi0JcHJpbnRrKCJJUElzIHJlcXVlc3RlZC4uLiBcbiIpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHZpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcobXBpYy0+aXJxaG9zdCwKKwkJCQkJCSAgICAgICBNUElDX1ZFQ19JUElfMCArIGksIDApOworCQlpZiAodmlwaSA9PSBOT19JUlEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBJUEkgJWRcbiIsIGkpOworCQkJYnJlYWs7CisJCX0KKwkJcmVxdWVzdF9pcnEodmlwaSwgbXBpY19pcGlfYWN0aW9uLCBJUlFGX0RJU0FCTEVELAorCQkJICAgIGlwaV9uYW1lc1tpXSwgbXBpYyk7CisJfQogfQogCiB2b2lkIHNtcF9tcGljX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90b2RjLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RvZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTY1OTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90b2RjLmMKQEAgLTAsMCArMSwzOTIgQEAKKy8qCisgKiBUaW1lIG9mIERheSBDbG9jayBzdXBwb3J0IGZvciB0aGUgTTQ4VDM1LCBNNDhUMzcsIE00OFQ1OSwgYW5kIE1DMTQ2ODE4CisgKiBSZWFsIFRpbWUgQ2xvY2tzL1RpbWVrZWVwZXJzLgorICoKKyAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8bWdyZWVyQG12aXN0YS5jb20+CisgKgorICogMjAwMS0yMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdG9kYy5oPgorCisvKgorICogRGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBvbiB5b3VyIGJvYXJkIGFuZCB5b3VyIGJvYXJkIGRlc2lnbiwgdGhlCisgKiBSVEMvTlZSQU0gbWF5IGJlIGFjY2Vzc2VkIGVpdGhlciBkaXJlY3RseSAobGlrZSBub3JtYWwgbWVtb3J5KSBvciB2aWEKKyAqIGFkZHJlc3MvZGF0YSByZWdpc3RlcnMuICBJZiB5b3VyIGJvYXJkIHVzZXMgdGhlIGRpcmVjdCBtZXRob2QsIHNldAorICogJ252cmFtX2RhdGEnIHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgeW91ciBudnJhbSBhbmQgbGVhdmUgJ252cmFtX2FzMCcgYW5kCisgKiAnbnZyYW1fYXMxJyBOVUxMLiAgSWYgeW91ciBib2FyZCB1c2VzIGFkZHJlc3MvZGF0YSByZWdzIHRvIGFjY2VzcyBudnJhbSwKKyAqIHNldCAnbnZyYW1fYXMwJyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgYnl0ZSwgc2V0ICdudnJhbV9hczEnIHRvIHRoZQorICogYWRkcmVzcyBvZiB0aGUgdXBwZXIgYnl0ZSAobGVhdmUgTlVMTCBpZiB1c2luZyBtYzE0NjgxOCksIGFuZCBzZXQKKyAqICdudnJhbV9kYXRhJyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgOC1iaXQgZGF0YSByZWdpc3Rlci4KKyAqCisgKiBOb3RlOiBFdmVuIHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZhcmlvdXMgUlRDIGNoaXBzIHNheSB0aGF0IGl0CisgKiAJIHRha2UgdXAgdG8gYSBzZWNvbmQgYmVmb3JlIGl0IHN0YXJ0cyB1cGRhdGluZyBvbmNlIHRoZSAnUicgYml0IGlzCisgKiAJIGNsZWFyZWQsIHRoZXkgYWx3YXlzIHNlZW0gdG8gdXBkYXRlIGV2ZW4gdGhvdWdoIHdlIGJhbmcgb24gaXQgbWFueQorICogCSB0aW1lcyBhIHNlY29uZC4gIFRoaXMgaXMgdHJ1ZSwgZXhjZXB0IGZvciB0aGUgRGFsbGFzIFNlbWkgMTc0Ni8xNzQ3CisgKiAJIChwb3NzaWJseSBvdGhlcnMpLiAgVGhvc2UgY2hpcHMgc2VlbSB0byBoYXZlIGEgcmVhbCBwcm9ibGVtIHdoZW5ldmVyCisgKiAJIHdlIHNldCB0aGUgJ1InIGJpdCBiZWZvcmUgcmVhZGluZyB0aGVtLCB0aGV5IGJhc2ljYWxseSBzdG9wIGNvdW50aW5nLgorICogCSAJCQkJCS0tTUFHCisgKi8KKworLyoKKyAqICd0b2RjX2luZm8nIHNob3VsZCBiZSBpbml0aWFsaXplZCBpbiB5b3VyICpfc2V0dXAuYyBmaWxlIHRvCisgKiBwb2ludCB0byBhIGZ1bGx5IGluaXRpYWxpemVkICd0b2RjX2luZm9fdCcgc3RydWN0dXJlLgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIHRoZSByZWdpc3RlciBvZmZzZXRzIGZvciB5b3VyIHBhcnRpY3VsYXIKKyAqIFRPREMvUlRDIGNoaXAuCisgKiBUT0RDX0FMTE9DKCkvVE9EQ19JTklUKCkgd2lsbCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGlzIHRhYmxlIGZvciB5b3UuCisgKi8KKworI2lmZGVmCVJUQ19GUkVRX1NFTEVDVAorI3VuZGVmCVJUQ19GUkVRX1NFTEVDVAorI2RlZmluZQlSVENfRlJFUV9TRUxFQ1QJCWNvbnRyb2xfYgkvKiBSZWdpc3RlciBBICovCisjZW5kaWYKKworI2lmZGVmCVJUQ19DT05UUk9MCisjdW5kZWYJUlRDX0NPTlRST0wKKyNkZWZpbmUJUlRDX0NPTlRST0wJCWNvbnRyb2xfYQkvKiBSZWdpc3RlciBCICovCisjZW5kaWYKKworI2lmZGVmCVJUQ19JTlRSX0ZMQUdTCisjdW5kZWYJUlRDX0lOVFJfRkxBR1MKKyNkZWZpbmUJUlRDX0lOVFJfRkxBR1MJCXdhdGNoZG9nCS8qIFJlZ2lzdGVyIEMgKi8KKyNlbmRpZgorCisjaWZkZWYJUlRDX1ZBTElECisjdW5kZWYJUlRDX1ZBTElECisjZGVmaW5lCVJUQ19WQUxJRAkJaW50ZXJydXB0cwkvKiBSZWdpc3RlciBEICovCisjZW5kaWYKKworLyogQWNjZXNzIHJvdXRpbmVzIHdoZW4gUlRDIGFjY2Vzc2VkIGRpcmVjdGx5IChsaWtlIG5vcm1hbCBtZW1vcnkpICovCit1X2NoYXIKK3RvZGNfZGlyZWN0X3JlYWRfdmFsKGludCBhZGRyKQoreworCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopKHRvZGNfaW5mby0+bnZyYW1fZGF0YSArIGFkZHIpKTsKK30KKwordm9pZAordG9kY19kaXJlY3Rfd3JpdGVfdmFsKGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwl3cml0ZWIodmFsLCAodm9pZCBfX2lvbWVtICopKHRvZGNfaW5mby0+bnZyYW1fZGF0YSArIGFkZHIpKTsKKwlyZXR1cm47Cit9CisKKy8qIEFjY2VzcyByb3V0aW5lcyBmb3IgYWNjZXNzaW5nIG00OHR4eCB0eXBlIGNoaXBzIHZpYSBhZGRyL2RhdGEgcmVncyAqLwordV9jaGFyCit0b2RjX200OHR4eF9yZWFkX3ZhbChpbnQgYWRkcikKK3sKKwlvdXRiKGFkZHIsIHRvZGNfaW5mby0+bnZyYW1fYXMwKTsKKwlvdXRiKGFkZHI+PnRvZGNfaW5mby0+YXMwX2JpdHMsIHRvZGNfaW5mby0+bnZyYW1fYXMxKTsKKwlyZXR1cm4gaW5iKHRvZGNfaW5mby0+bnZyYW1fZGF0YSk7Cit9CisKK3ZvaWQKK3RvZGNfbTQ4dHh4X3dyaXRlX3ZhbChpbnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJb3V0YihhZGRyLCB0b2RjX2luZm8tPm52cmFtX2FzMCk7CisJb3V0YihhZGRyPj50b2RjX2luZm8tPmFzMF9iaXRzLCB0b2RjX2luZm8tPm52cmFtX2FzMSk7CisJb3V0Yih2YWwsIHRvZGNfaW5mby0+bnZyYW1fZGF0YSk7CisJcmV0dXJuOworfQorCisvKiBBY2Nlc3Mgcm91dGluZXMgZm9yIGFjY2Vzc2luZyBtYzE0NjgxOCB0eXBlIGNoaXBzIHZpYSBhZGRyL2RhdGEgcmVncyAqLwordV9jaGFyCit0b2RjX21jMTQ2ODE4X3JlYWRfdmFsKGludCBhZGRyKQoreworCW91dGJfcChhZGRyLCB0b2RjX2luZm8tPm52cmFtX2FzMCk7CisJcmV0dXJuIGluYl9wKHRvZGNfaW5mby0+bnZyYW1fZGF0YSk7Cit9CisKK3ZvaWQKK3RvZGNfbWMxNDY4MThfd3JpdGVfdmFsKGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlvdXRiX3AoYWRkciwgdG9kY19pbmZvLT5udnJhbV9hczApOworCW91dGJfcCh2YWwsIHRvZGNfaW5mby0+bnZyYW1fZGF0YSk7Cit9CisKKworLyoKKyAqIFJvdXRpbmVzIHRvIG1ha2UgUlRDIGNoaXBzIHdpdGggTlZSQU0gYnVyaWVkIGJlaGluZCBhbiBhZGRyL2RhdGEgcGFpcgorICogaGF2ZSB0aGUgTlZSQU0gYW5kIGNsb2NrIHJlZ3MgYXBwZWFyIGF0IHRoZSBzYW1lIGxldmVsLgorICogVGhlIE5WUkFNIHdpbGwgYXBwZWFyIHRvIHN0YXJ0IGF0IGFkZHIgMCBhbmQgdGhlIGNsb2NrIHJlZ3Mgd2lsbCBhcHBlYXIKKyAqIHRvIHN0YXJ0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBOVlJBTSAoYWN0dWFsbHksIHN0YXJ0IGF0IG9mZnNldAorICogdG9kY19pbmZvLT5udnJhbV9zaXplKS4KKyAqLworc3RhdGljIGlubGluZSB1X2NoYXIKK3RvZGNfcmVhZF92YWwoaW50IGFkZHIpCit7CisJdV9jaGFyCXZhbDsKKworCWlmICh0b2RjX2luZm8tPnN3X2ZsYWdzICYgVE9EQ19GTEFHXzJfTEVWRUxfTlZSQU0pIHsKKwkJaWYgKGFkZHIgPCB0b2RjX2luZm8tPm52cmFtX3NpemUpIHsgLyogTlZSQU0gKi8KKwkJCXBwY19tZC5ydGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+bnZyYW1fYWRkcl9yZWcsIGFkZHIpOworCQkJdmFsID0gcHBjX21kLnJ0Y19yZWFkX3ZhbCh0b2RjX2luZm8tPm52cmFtX2RhdGFfcmVnKTsKKwkJfSBlbHNlIHsgLyogQ2xvY2sgUmVnICovCisJCQlhZGRyIC09IHRvZGNfaW5mby0+bnZyYW1fc2l6ZTsKKwkJCXZhbCA9IHBwY19tZC5ydGNfcmVhZF92YWwoYWRkcik7CisJCX0KKwl9IGVsc2UKKwkJdmFsID0gcHBjX21kLnJ0Y19yZWFkX3ZhbChhZGRyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordG9kY193cml0ZV92YWwoaW50IGFkZHIsIHVfY2hhciB2YWwpCit7CisJaWYgKHRvZGNfaW5mby0+c3dfZmxhZ3MgJiBUT0RDX0ZMQUdfMl9MRVZFTF9OVlJBTSkgeworCQlpZiAoYWRkciA8IHRvZGNfaW5mby0+bnZyYW1fc2l6ZSkgeyAvKiBOVlJBTSAqLworCQkJcHBjX21kLnJ0Y193cml0ZV92YWwodG9kY19pbmZvLT5udnJhbV9hZGRyX3JlZywgYWRkcik7CisJCQlwcGNfbWQucnRjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPm52cmFtX2RhdGFfcmVnLCB2YWwpOworCQl9IGVsc2UgeyAvKiBDbG9jayBSZWcgKi8KKwkJCWFkZHIgLT0gdG9kY19pbmZvLT5udnJhbV9zaXplOworCQkJcHBjX21kLnJ0Y193cml0ZV92YWwoYWRkciwgdmFsKTsKKwkJfQorCX0gZWxzZQorCQlwcGNfbWQucnRjX3dyaXRlX3ZhbChhZGRyLCB2YWwpOworfQorCisvKgorICogVE9EQyByb3V0aW5lcworICoKKyAqIFRoZXJlIGlzIHNvbWUgdWdseSBzdHVmZiBpbiB0aGF0IHRoZXJlIGFyZSBhc3N1bXB0aW9ucyBmb3IgdGhlIG1jMTQ2ODE4LgorICoKKyAqIEFzc3VtcHRpb25zOgorICoJLSB0b2RjX2luZm8tPmNvbnRyb2xfYSBoYXMgdGhlIG9mZnNldCBhcyBtYzE0NjgxOCBSZWdpc3RlciBCIHJlZworICoJLSB0b2RjX2luZm8tPmNvbnRyb2xfYiBoYXMgdGhlIG9mZnNldCBhcyBtYzE0NjgxOCBSZWdpc3RlciBBIHJlZworICoJLSBtNDh0eHggY29udHJvbCByZWcncyB3cml0ZSBlbmFibGUgb3IgJ1cnIGJpdCBpcyBzYW1lIGFzCisgKgkgIG1jMTQ2ODE4IFJlZ2lzdGVyIEIgJ1NFVCcgYml0IChpLmUuLCAweDgwKQorICoKKyAqIFRoZXNlIGFzc3VtcHRpb25zIHdlcmUgbWFkZSB0byBtYWtlIHRoZSBjb2RlIHNpbXBsZXIuCisgKi8KK2xvbmcgX19pbml0Cit0b2RjX3RpbWVfaW5pdCh2b2lkKQoreworCXVfY2hhcgljbnRsX2I7CisKKwlpZiAoIXBwY19tZC5ydGNfcmVhZF92YWwpCisJCXBwY19tZC5ydGNfcmVhZF92YWwgPSBwcGNfbWQubnZyYW1fcmVhZF92YWw7CisJaWYgKCFwcGNfbWQucnRjX3dyaXRlX3ZhbCkKKwkJcHBjX21kLnJ0Y193cml0ZV92YWwgPSBwcGNfbWQubnZyYW1fd3JpdGVfdmFsOworCisJY250bF9iID0gdG9kY19yZWFkX3ZhbCh0b2RjX2luZm8tPmNvbnRyb2xfYik7CisKKwlpZiAodG9kY19pbmZvLT5ydGNfdHlwZSA9PSBUT0RDX1RZUEVfTUMxNDY4MTgpIHsKKwkJaWYgKChjbnRsX2IgJiAweDcwKSAhPSAweDIwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJUT0RDIHJlYWwtdGltZS1jbG9jayB3YXMgc3RvcHBlZC4iCisJCQkJIiAgTm93IHN0YXJ0aW5nLi4uIik7CisJCQljbnRsX2IgJj0gfjB4NzA7CisJCQljbnRsX2IgfD0gMHgyMDsKKwkJfQorCisJCXRvZGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+Y29udHJvbF9iLCBjbnRsX2IpOworCX0gZWxzZSBpZiAodG9kY19pbmZvLT5ydGNfdHlwZSA9PSBUT0RDX1RZUEVfRFMxNzI4NSkgeworCQl1X2NoYXIgbW9kZTsKKworCQltb2RlID0gdG9kY19yZWFkX3ZhbChUT0RDX1RZUEVfRFMxNzI4NV9DTlRMX0EpOworCQkvKiBNYWtlIHN1cmUgY291bnRkb3duIGNsZWFyIGlzIG5vdCBzZXQgKi8KKwkJbW9kZSAmPSB+MHg0MDsKKwkJLyogRW5hYmxlIG9zY2lsbGF0b3IsIGV4dGVuZGVkIHJlZ2lzdGVyIHNldCAqLworCQltb2RlIHw9IDB4MzA7CisJCXRvZGNfd3JpdGVfdmFsKFRPRENfVFlQRV9EUzE3Mjg1X0NOVExfQSwgbW9kZSk7CisKKwl9IGVsc2UgaWYgKHRvZGNfaW5mby0+cnRjX3R5cGUgPT0gVE9EQ19UWVBFX0RTMTUwMSkgeworCQl1X2NoYXIJbW9udGg7CisKKwkJdG9kY19pbmZvLT5lbmFibGVfcmVhZCA9IFRPRENfRFMxNTAxX0NOVExfQl9URTsKKwkJdG9kY19pbmZvLT5lbmFibGVfd3JpdGUgPSBUT0RDX0RTMTUwMV9DTlRMX0JfVEU7CisKKwkJbW9udGggPSB0b2RjX3JlYWRfdmFsKHRvZGNfaW5mby0+bW9udGgpOworCisJCWlmICgobW9udGggJiAweDgwKSA9PSAweDgwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJUT0RDICVzICVzXG4iLAorCQkJCSJyZWFsLXRpbWUtY2xvY2sgd2FzIHN0b3BwZWQuIiwKKwkJCQkiTm93IHN0YXJ0aW5nLi4uIik7CisJCQltb250aCAmPSB+MHg4MDsKKwkJCXRvZGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+bW9udGgsIG1vbnRoKTsKKwkJfQorCisJCWNudGxfYiAmPSB+VE9EQ19EUzE1MDFfQ05UTF9CX1RFOworCQl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPmNvbnRyb2xfYiwgY250bF9iKTsKKwl9IGVsc2UgeyAvKiBtdXN0IGJlIGEgbTQ4dHh4IHR5cGUgKi8KKwkJdV9jaGFyCWNudGxfYTsKKworCQl0b2RjX2luZm8tPmVuYWJsZV9yZWFkID0gVE9EQ19NSzQ4VFhYX0NOVExfQV9SOworCQl0b2RjX2luZm8tPmVuYWJsZV93cml0ZSA9IFRPRENfTUs0OFRYWF9DTlRMX0FfVzsKKworCQljbnRsX2EgPSB0b2RjX3JlYWRfdmFsKHRvZGNfaW5mby0+Y29udHJvbF9hKTsKKworCQkvKiBDaGVjayAmIGNsZWFyIFNUT1AgYml0IGluIGNvbnRyb2wgQiByZWdpc3RlciAqLworCQlpZiAoY250bF9iICYgVE9EQ19NSzQ4VFhYX0RBWV9DQikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiVE9EQyAlcyAlc1xuIiwKKwkJCQkicmVhbC10aW1lLWNsb2NrIHdhcyBzdG9wcGVkLiIsCisJCQkJIk5vdyBzdGFydGluZy4uLiIpOworCisJCQljbnRsX2EgfD0gdG9kY19pbmZvLT5lbmFibGVfd3JpdGU7CisJCQljbnRsX2IgJj0gflRPRENfTUs0OFRYWF9EQVlfQ0I7LyogU3RhcnQgT3NjaWwgKi8KKworCQkJdG9kY193cml0ZV92YWwodG9kY19pbmZvLT5jb250cm9sX2EsIGNudGxfYSk7CisJCQl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPmNvbnRyb2xfYiwgY250bF9iKTsKKwkJfQorCisJCS8qIE1ha2Ugc3VyZSBSRUFEICYgV1JJVEUgYml0cyBhcmUgY2xlYXJlZC4gKi8KKwkJY250bF9hICY9IH4odG9kY19pbmZvLT5lbmFibGVfd3JpdGUgfCB0b2RjX2luZm8tPmVuYWJsZV9yZWFkKTsKKwkJdG9kY193cml0ZV92YWwodG9kY19pbmZvLT5jb250cm9sX2EsIGNudGxfYSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGVyZSBpcyBzb21lIHVnbHkgc3R1ZmYgaW4gdGhhdCB0aGVyZSBhcmUgYXNzdW1wdGlvbnMgdGhhdCBmb3IgYSBtYzE0NjgxOCwKKyAqIHRoZSB0b2RjX2luZm8tPmNvbnRyb2xfYSBoYXMgdGhlIG9mZnNldCBvZiB0aGUgbWMxNDY4MTggUmVnaXN0ZXIgQiByZWcgYW5kCisgKiB0aGF0IHRoZSByZWdpc3RlcidzcyAnU0VUJyBiaXQgaXMgdGhlIHNhbWUgYXMgdGhlIG00OHR4eCdzIHdyaXRlIGVuYWJsZQorICogYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyIG9mIHRoZSBtNDh0eHggKGkuZS4sIDB4ODApLgorICoKKyAqIEl0IHdhcyBkb25lIHRvIG1ha2UgdGhlIGNvZGUgbG9vayBzaW1wbGVyLgorICovCit2b2lkCit0b2RjX2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXVpbnQJeWVhciA9IDAsIG1vbiA9IDAsIG1kYXkgPSAwLCBob3VyID0gMCwgbWluID0gMCwgc2VjID0gMDsKKwl1aW50CWxpbWl0LCBpOworCXVfY2hhcglzYXZlX2NvbnRyb2wsIHVpcCA9IDA7CisJZXh0ZXJuIHZvaWQgR3JlZ29yaWFuRGF5KHN0cnVjdCBydGNfdGltZSAqKTsKKworCXNwaW5fbG9jaygmcnRjX2xvY2spOworCXNhdmVfY29udHJvbCA9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5jb250cm9sX2EpOworCisJaWYgKHRvZGNfaW5mby0+cnRjX3R5cGUgIT0gVE9EQ19UWVBFX01DMTQ2ODE4KSB7CisJCWxpbWl0ID0gMTsKKworCQlzd2l0Y2ggKHRvZGNfaW5mby0+cnRjX3R5cGUpIHsKKwkJY2FzZSBUT0RDX1RZUEVfRFMxNTUzOgorCQljYXNlIFRPRENfVFlQRV9EUzE1NTc6CisJCWNhc2UgVE9EQ19UWVBFX0RTMTc0MzoKKwkJY2FzZSBUT0RDX1RZUEVfRFMxNzQ2OgkvKiBYWFhYIEJBRCBIQUNLIC0+IEZJWCAqLworCQljYXNlIFRPRENfVFlQRV9EUzE3NDc6CisJCWNhc2UgVE9EQ19UWVBFX0RTMTcyODU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRvZGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+Y29udHJvbF9hLAorCQkJCShzYXZlX2NvbnRyb2wgfCB0b2RjX2luZm8tPmVuYWJsZV9yZWFkKSk7CisJCX0KKwl9IGVsc2UKKwkJbGltaXQgPSAxMDAwMDAwMDA7CisKKwlmb3IgKGk9MDsgaTxsaW1pdDsgaSsrKSB7CisJCWlmICh0b2RjX2luZm8tPnJ0Y190eXBlID09IFRPRENfVFlQRV9NQzE0NjgxOCkKKwkJCXVpcCA9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5SVENfRlJFUV9TRUxFQ1QpOworCisJCXNlYyA9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5zZWNvbmRzKSAmIDB4N2Y7CisJCW1pbiA9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5taW51dGVzKSAmIDB4N2Y7CisJCWhvdXIgPSB0b2RjX3JlYWRfdmFsKHRvZGNfaW5mby0+aG91cnMpICYgMHgzZjsKKwkJbWRheSA9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5kYXlfb2ZfbW9udGgpICYgMHgzZjsKKwkJbW9uID0gdG9kY19yZWFkX3ZhbCh0b2RjX2luZm8tPm1vbnRoKSAmIDB4MWY7CisJCXllYXIgPSB0b2RjX3JlYWRfdmFsKHRvZGNfaW5mby0+eWVhcikgJiAweGZmOworCisJCWlmICh0b2RjX2luZm8tPnJ0Y190eXBlID09IFRPRENfVFlQRV9NQzE0NjgxOCkgeworCQkJdWlwIHw9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5SVENfRlJFUV9TRUxFQ1QpOworCQkJaWYgKCh1aXAgJiBSVENfVUlQKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRvZGNfaW5mby0+cnRjX3R5cGUgIT0gVE9EQ19UWVBFX01DMTQ2ODE4KSB7CisJCXN3aXRjaCAodG9kY19pbmZvLT5ydGNfdHlwZSkgeworCQljYXNlIFRPRENfVFlQRV9EUzE1NTM6CisJCWNhc2UgVE9EQ19UWVBFX0RTMTU1NzoKKwkJY2FzZSBUT0RDX1RZUEVfRFMxNzQzOgorCQljYXNlIFRPRENfVFlQRV9EUzE3NDY6CS8qIFhYWFggQkFEIEhBQ0sgLT4gRklYICovCisJCWNhc2UgVE9EQ19UWVBFX0RTMTc0NzoKKwkJY2FzZSBUT0RDX1RZUEVfRFMxNzI4NToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2F2ZV9jb250cm9sICY9IH4odG9kY19pbmZvLT5lbmFibGVfcmVhZCk7CisJCQl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPmNvbnRyb2xfYSwgc2F2ZV9jb250cm9sKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcnRjX2xvY2spOworCisJaWYgKCh0b2RjX2luZm8tPnJ0Y190eXBlICE9IFRPRENfVFlQRV9NQzE0NjgxOCkKKwkJCXx8ICgoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgPT0gMCkKKwkJCXx8IFJUQ19BTFdBWVNfQkNEKSB7CisJCUJDRF9UT19CSU4oc2VjKTsKKwkJQkNEX1RPX0JJTihtaW4pOworCQlCQ0RfVE9fQklOKGhvdXIpOworCQlCQ0RfVE9fQklOKG1kYXkpOworCQlCQ0RfVE9fQklOKG1vbik7CisJCUJDRF9UT19CSU4oeWVhcik7CisJfQorCisJaWYgKCh5ZWFyICsgMTkwMCkgPCAxOTcwKSB7CisJCXllYXIgKz0gMTAwOworCX0KKworCXRtLT50bV9zZWMgPSBzZWM7CisJdG0tPnRtX21pbiA9IG1pbjsKKwl0bS0+dG1faG91ciA9IGhvdXI7CisJdG0tPnRtX21kYXkgPSBtZGF5OworCXRtLT50bV9tb24gPSBtb247CisJdG0tPnRtX3llYXIgPSB5ZWFyOworCisJR3JlZ29yaWFuRGF5KHRtKTsKK30KKworaW50Cit0b2RjX3NldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXVfY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3QgPSAwOworCisJc3Bpbl9sb2NrKCZydGNfbG9jayk7CisJc2F2ZV9jb250cm9sID0gdG9kY19yZWFkX3ZhbCh0b2RjX2luZm8tPmNvbnRyb2xfYSk7CisKKwkvKiBBc3N1bWluZyBNSzQ4VDU5X1JUQ19DQV9XUklURSAmIFJUQ19TRVQgYXJlIGVxdWFsICovCisJdG9kY193cml0ZV92YWwodG9kY19pbmZvLT5jb250cm9sX2EsCisJCShzYXZlX2NvbnRyb2wgfCB0b2RjX2luZm8tPmVuYWJsZV93cml0ZSkpOworCXNhdmVfY29udHJvbCAmPSB+KHRvZGNfaW5mby0+ZW5hYmxlX3dyaXRlKTsgLyogaW4gY2FzZSBpdCB3YXMgc2V0ICovCisKKwlpZiAodG9kY19pbmZvLT5ydGNfdHlwZSA9PSBUT0RDX1RZUEVfTUMxNDY4MTgpIHsKKwkJc2F2ZV9mcmVxX3NlbGVjdCA9IHRvZGNfcmVhZF92YWwodG9kY19pbmZvLT5SVENfRlJFUV9TRUxFQ1QpOworCQl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPlJUQ19GUkVRX1NFTEVDVCwKKwkJCXNhdmVfZnJlcV9zZWxlY3QgfCBSVENfRElWX1JFU0VUMik7CisJfQorCisJaWYgKCh0b2RjX2luZm8tPnJ0Y190eXBlICE9IFRPRENfVFlQRV9NQzE0NjgxOCkKKwkJCXx8ICgoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgPT0gMCkKKwkJCXx8IFJUQ19BTFdBWVNfQkNEKSB7CisJCUJJTl9UT19CQ0QodG0tPnRtX3NlYyk7CisJCUJJTl9UT19CQ0QodG0tPnRtX21pbik7CisJCUJJTl9UT19CQ0QodG0tPnRtX2hvdXIpOworCQlCSU5fVE9fQkNEKHRtLT50bV9tb24pOworCQlCSU5fVE9fQkNEKHRtLT50bV9tZGF5KTsKKwkJQklOX1RPX0JDRCh0bS0+dG1feWVhcik7CisJfQorCisJdG9kY193cml0ZV92YWwodG9kY19pbmZvLT5zZWNvbmRzLCB0bS0+dG1fc2VjKTsKKwl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPm1pbnV0ZXMsIHRtLT50bV9taW4pOworCXRvZGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+aG91cnMsIHRtLT50bV9ob3VyKTsKKwl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPm1vbnRoLCB0bS0+dG1fbW9uKTsKKwl0b2RjX3dyaXRlX3ZhbCh0b2RjX2luZm8tPmRheV9vZl9tb250aCwgdG0tPnRtX21kYXkpOworCXRvZGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+eWVhciwgdG0tPnRtX3llYXIpOworCisJdG9kY193cml0ZV92YWwodG9kY19pbmZvLT5jb250cm9sX2EsIHNhdmVfY29udHJvbCk7CisKKwlpZiAodG9kY19pbmZvLT5ydGNfdHlwZSA9PSBUT0RDX1RZUEVfTUMxNDY4MTgpCisJCXRvZGNfd3JpdGVfdmFsKHRvZGNfaW5mby0+UlRDX0ZSRVFfU0VMRUNULCBzYXZlX2ZyZXFfc2VsZWN0KTsKKworCXNwaW5fdW5sb2NrKCZydGNfbG9jayk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTBjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIHRzaTEwOC8xMDkgZGV2aWNlIHNldHVwIGNvZGUKKyAqCisgKiBNYWludGFpbmVkIGJ5IFJveSBaYW5nIDwgdGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20gPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vdHNpMTA4Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoZm10KTsgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworc3RhdGljIHBoeXNfYWRkcl90IHRzaTEwOF9jc3JfYmFzZSA9IC0xOworCitwaHlzX2FkZHJfdCBnZXRfY3NyYmFzZSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdHNpOworCisJaWYgKHRzaTEwOF9jc3JfYmFzZSAhPSAtMSkKKwkJcmV0dXJuIHRzaTEwOF9jc3JfYmFzZTsKKworCXRzaSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJ0c2ktYnJpZGdlIik7CisJaWYgKHRzaSkgeworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJdm9pZCAqcHJvcCA9IGdldF9wcm9wZXJ0eSh0c2ksICJyZWciLCAmc2l6ZSk7CisJCXRzaTEwOF9jc3JfYmFzZSA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKHRzaSwgcHJvcCk7CisJCW9mX25vZGVfcHV0KHRzaSk7CisJfTsKKwlyZXR1cm4gdHNpMTA4X2Nzcl9iYXNlOworfQorCit1MzIgZ2V0X3Zpcl9jc3JiYXNlKHZvaWQpCit7CisJcmV0dXJuICh1MzIpIChpb3JlbWFwKGdldF9jc3JiYXNlKCksIDB4MTAwMDApKTsKK30KKworRVhQT1JUX1NZTUJPTChnZXRfY3NyYmFzZSk7CitFWFBPUlRfU1lNQk9MKGdldF92aXJfY3NyYmFzZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHRzaTEwOF9ldGhfb2ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdHNpX2V0aF9kZXY7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlpbnQgcmV0OworCisJZm9yIChucCA9IE5VTEwsIGkgPSAwOworCSAgICAgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJuZXR3b3JrIiwgInRzaS1ldGhlcm5ldCIpKSAhPSBOVUxMOworCSAgICAgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSByWzJdOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeTsKKwkJaHdfaW5mbyB0c2lfZXRoX2RhdGE7CisJCXVuc2lnbmVkIGludCAqaWQ7CisJCXVuc2lnbmVkIGludCAqcGh5X2lkOworCQl2b2lkICptYWNfYWRkcjsKKwkJcGhhbmRsZSAqcGg7CisKKwkJbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7CisJCW1lbXNldCgmdHNpX2V0aF9kYXRhLCAwLCBzaXplb2YodHNpX2V0aF9kYXRhKSk7CisKKwkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOworCQlEQkcoIiVzOiBuYW1lOnN0YXJ0LT5lbmQgPSAlczoweCVseC0+IDB4JWx4XG4iLAorCQkJX19GVU5DVElPTl9fLHJbMF0ubmFtZSwgclswXS5zdGFydCwgclswXS5lbmQpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJclsxXS5uYW1lID0gInR4IjsKKwkJclsxXS5zdGFydCA9IG5wLT5pbnRyc1swXS5saW5lOworCQlyWzFdLmVuZCA9IG5wLT5pbnRyc1swXS5saW5lOworCQlyWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisKKwkJdHNpX2V0aF9kZXYgPQorCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgidHNpLWV0aGVybmV0IiwgaSwgJnJbMF0sCisJCQkJCQkgICAgbnAtPm5faW50cnMgKyAxKTsKKworCQlpZiAoSVNfRVJSKHRzaV9ldGhfZGV2KSkgeworCQkJcmV0ID0gUFRSX0VSUih0c2lfZXRoX2Rldik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCW1hY19hZGRyID0gZ2V0X3Byb3BlcnR5KG5wLCAiYWRkcmVzcyIsIE5VTEwpOworCQltZW1jcHkodHNpX2V0aF9kYXRhLm1hY19hZGRyLCBtYWNfYWRkciwgNik7CisKKwkJcGggPSAocGhhbmRsZSAqKSBnZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CisJCXBoeSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7CisKKwkJaWYgKHBoeSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnJlZzsKKwkJfQorCisJCWlkID0gKHUzMiAqKSBnZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CisJCXBoeV9pZCA9ICh1MzIgKikgZ2V0X3Byb3BlcnR5KHBoeSwgInBoeS1pZCIsIE5VTEwpOworCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHBoeSwgMCwgJnJlcyk7CisJCWlmIChyZXQpIHsKKwkJCW9mX25vZGVfcHV0KHBoeSk7CisJCQlnb3RvIHVucmVnOworCQl9CisJCXRzaV9ldGhfZGF0YS5yZWdzID0gclswXS5zdGFydDsKKwkJdHNpX2V0aF9kYXRhLnBoeXJlZ3MgPSByZXMuc3RhcnQ7CisJCXRzaV9ldGhfZGF0YS5waHkgPSAqcGh5X2lkOworCQl0c2lfZXRoX2RhdGEuaXJxX251bSA9IG5wLT5pbnRyc1swXS5saW5lOworCQlvZl9ub2RlX3B1dChwaHkpOworCQlyZXQgPQorCQkgICAgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHRzaV9ldGhfZGV2LCAmdHNpX2V0aF9kYXRhLAorCQkJCQkgICAgIHNpemVvZihod19pbmZvKSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucmVnOworCX0KKwlyZXR1cm4gMDsKK3VucmVnOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHRzaV9ldGhfZGV2KTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKHRzaTEwOF9ldGhfb2ZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjVkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9wY2kuYwpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvbW1vbiByb3V0aW5lcyBmb3IgVHVuZHJhIFNlbWljb25kdWN0b3IgVFNJMTA4IGhvc3QgYnJpZGdlLgorICoKKyAqIDIwMDQtMjAwNSAoYykgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEF1dGhvcjogQWxleCBCb3VuaW5lIChhbGV4YW5kcmViQHR1bmRyYS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3RzaTEwOC5oPgorI2luY2x1ZGUgPGFzbS90c2kxMDhfaXJxLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworI3VuZGVmIERFQlVHCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKHguLi4pIHByaW50ayh4KQorI2Vsc2UKKyNkZWZpbmUgREJHKHguLi4pCisjZW5kaWYKKworI2RlZmluZSB0c2lfbWtfY29uZmlnX2FkZHIoYnVzLCBkZXZmdW5jLCBvZmZzZXQpIFwKKwkoKCgoYnVzKTw8MTYpIHwgKChkZXZmdW5jKTw8OCkgfCAob2Zmc2V0ICYgMHhmYykpICsgdHNpMTA4X3BjaV9jZmdfYmFzZSkKKwordTMyIHRzaTEwOF9wY2lfY2ZnX2Jhc2U7Cit1MzIgdHNpMTA4X2Nzcl92aXJfYmFzZTsKKworZXh0ZXJuIHUzMiBnZXRfdmlyX2NzcmJhc2Uodm9pZCk7CitleHRlcm4gdTMyIHRzaTEwOF9yZWFkX3JlZyh1MzIgcmVnX29mZnNldCk7CitleHRlcm4gdm9pZCB0c2kxMDhfd3JpdGVfcmVnKHUzMiByZWdfb2Zmc2V0LCB1MzIgdmFsKTsKKworaW50Cit0c2kxMDhfZGlyZWN0X3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2ZnVuYywKKwkJCSAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqY2ZnX2FkZHI7CisKKwlpZiAocHBjX21kLnBjaV9leGNsdWRlX2RldmljZSkKKwkJaWYgKHBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UoYnVzLT5udW1iZXIsIGRldmZ1bmMpKQorCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWNmZ19hZGRyID0gKHVuc2lnbmVkIGNoYXIgKikodHNpX21rX2NvbmZpZ19hZGRyKGJ1cy0+bnVtYmVyLAorCQkJCQkJCWRldmZ1bmMsIG9mZnNldCkgfAorCQkJCQkJCShvZmZzZXQgJiAweDAzKSk7CisKKyNpZmRlZiBERUJVRworCXByaW50aygiUENJIENGRyB3cml0ZSA6ICIpOworCXByaW50aygiJWQ6MHgleDoweCV4ICIsIGJ1cy0+bnVtYmVyLCBkZXZmdW5jLCBvZmZzZXQpOworCXByaW50aygiJWQgQUREUj0weCUwOHggIiwgbGVuLCAodWludCkgY2ZnX2FkZHIpOworCXByaW50aygiZGF0YSA9IDB4JTA4eFxuIiwgdmFsKTsKKyNlbmRpZgorCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCW91dF84KCh1OCAqKSBjZmdfYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvdXRfbGUxNigodTE2ICopIGNmZ19hZGRyLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvdXRfbGUzMigodTMyICopIGNmZ19hZGRyLCB2YWwpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCit2b2lkIHRzaTEwOF9jbGVhcl9wY2lfZXJyb3IodTMyIHBjaV9jZmdfYmFzZSkKK3sKKwl1MzIgZXJyX3N0YXQsIGVycl9hZGRyLCBwY2lfc3RhdDsKKworCS8qCisJICogUXVpZXRseSBjbGVhciBQQiBhbmQgUENJIGVycm9yIGZsYWdzIHNldCBhcyByZXN1bHQKKwkgKiBvZiBQQ0kvWCBjb25maWd1cmF0aW9uIHJlYWQgcmVxdWVzdHMuCisJICovCisKKwkvKiBSZWFkIFBCIEVycm9yIExvZyBSZWdpc3RlcnMgKi8KKworCWVycl9zdGF0ID0gdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQl9PRkZTRVQgKyBUU0kxMDhfUEJfRVJSQ1MpOworCWVycl9hZGRyID0gdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQl9PRkZTRVQgKyBUU0kxMDhfUEJfQUVSUik7CisKKwlpZiAoZXJyX3N0YXQgJiBUU0kxMDhfUEJfRVJSQ1NfRVMpIHsKKwkJLyogQ2xlYXIgZXJyb3IgZmxhZyAqLworCQl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQl9PRkZTRVQgKyBUU0kxMDhfUEJfRVJSQ1MsCisJCQkJIFRTSTEwOF9QQl9FUlJDU19FUyk7CisKKwkJLyogQ2xlYXIgcmVhZCBlcnJvciByZXBvcnRlZCBpbiBQQl9JU1IgKi8KKwkJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfUEJfT0ZGU0VUICsgVFNJMTA4X1BCX0lTUiwKKwkJCQkgVFNJMTA4X1BCX0lTUl9QQlNfUkRfRVJSKTsKKworCQkvKiBDbGVhciBQQ0kvWCBidXMgY2ZnIGVycm9ycyBpZiBhcHBsaWNhYmxlICovCisJCWlmICgoZXJyX2FkZHIgJiAweEZGMDAwMDAwKSA9PSBwY2lfY2ZnX2Jhc2UpIHsKKwkJCXBjaV9zdGF0ID0KKwkJCSAgICB0c2kxMDhfcmVhZF9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0NTUik7CisJCQl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsgVFNJMTA4X1BDSV9DU1IsCisJCQkJCSBwY2lfc3RhdCk7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgX190c2kxMDhfcmVhZF9wY2lfY29uZmlnKHgsIGFkZHIsIG9wKQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCSIJIm9wIiAlMCwwLCUxXG4iCQlcCisJCSIxOgllaWVpb1xuIgkJCVwKKwkJIjI6XG4iCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCisJCSIzOglsaSAlMCwtMVxuIgkJCVwKKwkJIgliIDJiXG4iCQkJCVwKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKKwkJIgkuYWxpZ24gMlxuIgkJCVwKKwkJIgkubG9uZyAxYiwzYlxuIgkJCVwKKwkJIi50ZXh0IgkJCQkJXAorCQk6ICI9ciIoeCkgOiAiciIoYWRkcikpCisKK2ludAordHNpMTA4X2RpcmVjdF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsCisJCQkgIGludCBsZW4sIHUzMiAqIHZhbCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpjZmdfYWRkcjsKKwl1MzIgdGVtcDsKKworCWlmIChwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlKQorCQlpZiAocHBjX21kLnBjaV9leGNsdWRlX2RldmljZShidXMtPm51bWJlciwgZGV2Zm4pKQorCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWNmZ19hZGRyID0gKHVuc2lnbmVkIGNoYXIgKikodHNpX21rX2NvbmZpZ19hZGRyKGJ1cy0+bnVtYmVyLAorCQkJCQkJCWRldmZuLAorCQkJCQkJCW9mZnNldCkgfCAob2Zmc2V0ICYKKwkJCQkJCQkJICAgMHgwMykpOworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCV9fdHNpMTA4X3JlYWRfcGNpX2NvbmZpZyh0ZW1wLCBjZmdfYWRkciwgImxiengiKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlfX3RzaTEwOF9yZWFkX3BjaV9jb25maWcodGVtcCwgY2ZnX2FkZHIsICJsaGJyeCIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlfX3RzaTEwOF9yZWFkX3BjaV9jb25maWcodGVtcCwgY2ZnX2FkZHIsICJsd2JyeCIpOworCQlicmVhazsKKwl9CisKKwkqdmFsID0gdGVtcDsKKworI2lmZGVmIERFQlVHCisJaWYgKCgweEZGRkZGRkZGICE9IHRlbXApICYmICgweEZGRkYgIT0gdGVtcCkgJiYgKDB4RkYgIT0gdGVtcCkpIHsKKwkJcHJpbnRrKCJQQ0kgQ0ZHIHJlYWQgOiAiKTsKKwkJcHJpbnRrKCIlZDoweCV4OjB4JXggIiwgYnVzLT5udW1iZXIsIGRldmZuLCBvZmZzZXQpOworCQlwcmludGsoIiVkIEFERFI9MHglMDh4ICIsIGxlbiwgKHVpbnQpIGNmZ19hZGRyKTsKKwkJcHJpbnRrKCJkYXRhID0gMHgleFxuIiwgKnZhbCk7CisJfQorI2VuZGlmCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKwordm9pZCB0c2kxMDhfY2xlYXJfcGNpX2NmZ19lcnJvcih2b2lkKQoreworCXRzaTEwOF9jbGVhcl9wY2lfZXJyb3IoVFNJMTA4X1BDSV9DRkdfQkFTRV9QSFlTKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIHRzaTEwOF9kaXJlY3RfcGNpX29wcyA9IHsKKwl0c2kxMDhfZGlyZWN0X3JlYWRfY29uZmlnLAorCXRzaTEwOF9kaXJlY3Rfd3JpdGVfY29uZmlnCit9OworCitpbnQgX19pbml0IHRzaTEwOF9zZXR1cF9wY2koc3RydWN0IGRldmljZV9ub2RlICpkZXYpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisJc3RydWN0IHJlc291cmNlIHJzcmM7CisJaW50ICpidXNfcmFuZ2U7CisJaW50IHByaW1hcnkgPSAwLCBoYXNfYWRkcmVzcyA9IDA7CisKKwkvKiBQQ0kgQ29uZmlnIG1hcHBpbmcgKi8KKwl0c2kxMDhfcGNpX2NmZ19iYXNlID0gKHUzMilpb3JlbWFwKFRTSTEwOF9QQ0lfQ0ZHX0JBU0VfUEhZUywKKwkJCVRTSTEwOF9QQ0lfQ0ZHX1NJWkUpOworCURCRygiVFNJX1BDSTogJXMgdHNpMTA4X3BjaV9jZmdfYmFzZT0weCV4XG4iLCBfX0ZVTkNUSU9OX18sCisJICAgIHRzaTEwOF9wY2lfY2ZnX2Jhc2UpOworCisJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KKwloYXNfYWRkcmVzcyA9IChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnJzcmMpID09IDApOworCisJLyogR2V0IGJ1cyByYW5nZSBpZiBhbnkgKi8KKwlidXNfcmFuZ2UgPSAoaW50ICopZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKKwkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKwl9CisKKwlob3NlID0gcGNpYmlvc19hbGxvY19jb250cm9sbGVyKCk7CisKKwlpZiAoIWhvc2UpIHsKKwkJcHJpbnRrKCJQQ0kgSG9zdCBicmlkZ2UgaW5pdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaG9zZS0+YXJjaF9kYXRhID0gZGV2OworCWhvc2UtPnNldF9jZmdfdHlwZSA9IDE7CisKKwlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVswXSA6IDA7CisJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CisKKwkoaG9zZSktPm9wcyA9ICZ0c2kxMDhfZGlyZWN0X3BjaV9vcHM7CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCB0c2kxMDggUENJIGhvc3QgYnJpZGdlIGF0IDB4JTA4bHguICIKKwkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKKwkgICAgICAgcnNyYy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sIGhvc2UtPmxhc3RfYnVzbm8pOworCisJLyogSW50ZXJwcmV0IHRoZSAicmFuZ2VzIiBwcm9wZXJ0eSAqLworCS8qIFRoaXMgYWxzbyBtYXBzIHRoZSBJL08gcmVnaW9uIGFuZCBzZXRzIGlzYV9pby9tZW1fYmFzZSAqLworCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoaG9zZSwgZGV2LCBwcmltYXJ5KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvdyBsZXZlbCB1dGlsaXR5IGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaW50X21hc2sodV9pbnQgaXJxKQoreworCXVfaW50IGlycF9jZmc7CisJaW50IGludF9saW5lID0gKGlycSAtIElSUV9QQ0lfSU5UQURfQkFTRSk7CisKKwlpcnBfY2ZnID0gdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsgVFNJMTA4X1BDSV9JUlBfQ0ZHX0NUTCk7CisJbWIoKTsKKwlpcnBfY2ZnIHw9ICgxIDw8IGludF9saW5lKTsJLyogSU5UeF9ESVIgPSBvdXRwdXQgKi8KKwlpcnBfY2ZnICY9IH4oMyA8PCAoOCArIChpbnRfbGluZSAqIDIpKSk7CS8qIElOVHhfVFlQRSA9IHVudXNlZCAqLworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9DRkdfQ1RMLCBpcnBfY2ZnKTsKKwltYigpOworCWlycF9jZmcgPSB0c2kxMDhfcmVhZF9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9DRkdfQ1RMKTsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X3BjaV9pbnRfdW5tYXNrKHVfaW50IGlycSkKK3sKKwl1X2ludCBpcnBfY2ZnOworCWludCBpbnRfbGluZSA9IChpcnEgLSBJUlFfUENJX0lOVEFEX0JBU0UpOworCisJaXJwX2NmZyA9IHRzaTEwOF9yZWFkX3JlZyhUU0kxMDhfUENJX09GRlNFVCArIFRTSTEwOF9QQ0lfSVJQX0NGR19DVEwpOworCW1iKCk7CisJaXJwX2NmZyAmPSB+KDEgPDwgaW50X2xpbmUpOworCWlycF9jZmcgfD0gKDMgPDwgKDggKyAoaW50X2xpbmUgKiAyKSkpOworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9DRkdfQ1RMLCBpcnBfY2ZnKTsKKwltYigpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3BjaV9zb3VyY2Uodm9pZCkKK3sKKwl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsgVFNJMTA4X1BDSV9JUlBfQ0ZHX0NUTCwKKwkJCTB4MDAwMGZmMDApOworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9FTkFCTEUsCisJCQlUU0kxMDhfUENJX0lSUF9FTkFCTEVfUF9JTlQpOworCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9wY2lfc291cmNlKHZvaWQpCit7CisJdV9pbnQgdGVtcCA9IDA7CisJaW50IGlycSA9IC0xOworCWludCBpOworCXVfaW50IHBjaV9pcnBfc3RhdDsKKwlzdGF0aWMgaW50IG1hc2sgPSAwOworCisJLyogUmVhZCBQQ0kvWCBibG9jayBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJcGNpX2lycF9zdGF0ID0gdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsgVFNJMTA4X1BDSV9JUlBfU1RBVCk7CisJbWIoKTsKKworCWlmIChwY2lfaXJwX3N0YXQgJiBUU0kxMDhfUENJX0lSUF9TVEFUX1BfSU5UKSB7CisJCS8qIFByb2Nlc3MgSW50ZXJydXB0IGZyb20gUENJIGJ1cyBJTlRBIyAtIElOVEQjIGxpbmVzICovCisJCXRlbXAgPQorCQkgICAgdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsKKwkJCQkgICAgVFNJMTA4X1BDSV9JUlBfSU5UQUQpICYgMHhmOworCQltYigpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrLCBtYXNrKyspIHsKKwkJCWlmICh0ZW1wICYgKDEgPDwgbWFzayAlIDQpKSB7CisJCQkJaXJxID0gSVJRX1BDSV9JTlRBICsgbWFzayAlIDQ7CisJCQkJbWFzaysrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gUENJIGJsb2NrICovCisJCXRlbXAgPSB0c2kxMDhfcmVhZF9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9FTkFCTEUpOworCQl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsgVFNJMTA4X1BDSV9JUlBfRU5BQkxFLAorCQkJCXRlbXAgJiB+VFNJMTA4X1BDSV9JUlBfRU5BQkxFX1BfSU5UKTsKKwkJbWIoKTsKKwkJKHZvaWQpdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsgVFNJMTA4X1BDSV9JUlBfRU5BQkxFKTsKKwkJbWIoKTsKKwl9CisjaWZkZWYgREVCVUcKKwllbHNlIHsKKwkJcHJpbnRrKCJUU0kxMDhfUElDOiBlcnJvciBpbiBUU0kxMDhfUENJX0lSUF9TVEFUXG4iKTsKKwkJcGNpX2lycF9zdGF0ID0KKwkJICAgIHRzaTEwOF9yZWFkX3JlZyhUU0kxMDhfUENJX09GRlNFVCArIFRTSTEwOF9QQ0lfSVJQX1NUQVQpOworCQl0ZW1wID0KKwkJICAgIHRzaTEwOF9yZWFkX3JlZyhUU0kxMDhfUENJX09GRlNFVCArIFRTSTEwOF9QQ0lfSVJQX0lOVEFEKTsKKwkJbWIoKTsKKwkJcHJpbnRrKCI+PiBzdGF0PTB4JTA4eCBpbnRhZD0weCUwOHggIiwgcGNpX2lycF9zdGF0LCB0ZW1wKTsKKwkJdGVtcCA9CisJCSAgICB0c2kxMDhfcmVhZF9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9DRkdfQ1RMKTsKKwkJbWIoKTsKKwkJcHJpbnRrKCJjZmdfY3RsPTB4JTA4eCAiLCB0ZW1wKTsKKwkJdGVtcCA9CisJCSAgICB0c2kxMDhfcmVhZF9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9FTkFCTEUpOworCQltYigpOworCQlwcmludGsoImlycF9lbmFibGU9MHglMDh4XG4iLCB0ZW1wKTsKKwl9CisjZW5kaWYJLyogZW5kIG9mIERFQlVHICovCisKKwlyZXR1cm4gaXJxOworfQorCisKKy8qCisgKiBMaW51eCBkZXNjcmlwdG9yIGxldmVsIGNhbGxiYWNrcworICovCisKK3N0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX2VuYWJsZSh1X2ludCBpcnEpCit7CisJdHNpMTA4X3BjaV9pbnRfdW5tYXNrKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX2Rpc2FibGUodV9pbnQgaXJxKQoreworCXRzaTEwOF9wY2lfaW50X21hc2soaXJxKTsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X3BjaV9pcnFfYWNrKHVfaW50IGlycSkKK3sKKwl0c2kxMDhfcGNpX2ludF9tYXNrKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIHRzaTEwOF9wY2lfaXJxX2VuZCh1X2ludCBpcnEpCit7CisJdHNpMTA4X3BjaV9pbnRfdW5tYXNrKGlycSk7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBmcm9tIFBDSSBibG9jayAqLworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBUU0kxMDhfUENJX0lSUF9FTkFCTEUsCisJCQkgdHNpMTA4X3JlYWRfcmVnKFRTSTEwOF9QQ0lfT0ZGU0VUICsKKwkJCQkJIFRTSTEwOF9QQ0lfSVJQX0VOQUJMRSkgfAorCQkJIFRTSTEwOF9QQ0lfSVJQX0VOQUJMRV9QX0lOVCk7CisJbWIoKTsKK30KKworLyoKKyAqIEludGVycnVwdCBjb250cm9sbGVyIGRlc2NyaXB0b3IgZm9yIGNhc2NhZGVkIFBDSSBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAqLworCitzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgdHNpMTA4X3BjaV9pcnEgPSB7CisJLnR5cGVuYW1lID0gInRzaTEwOF9QQ0lfaW50IiwKKwkuZW5hYmxlID0gdHNpMTA4X3BjaV9pcnFfZW5hYmxlLAorCS5kaXNhYmxlID0gdHNpMTA4X3BjaV9pcnFfZGlzYWJsZSwKKwkuYWNrID0gdHNpMTA4X3BjaV9pcnFfYWNrLAorCS5lbmQgPSB0c2kxMDhfcGNpX2lycV9lbmQsCit9OworCisvKgorICogRXhwb3J0ZWQgZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIFRoZSBUc2kxMDggUENJIGludGVycnVwdHMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KKyAqCisgKiBUaGUgSU5UQSMgLSBJTlREIyBpbnRlcnJ1cHRzIG9uIHRoZSBQQ0kgYnVzIGFyZSByZXBvcnRlZCBieSB0aGUgUENJIGJsb2NrCisgKiB0byB0aGUgTVBJQyB1c2luZyBzaW5nbGUgaW50ZXJydXB0IHNvdXJjZSAoSVJRX1RTSTEwOF9QQ0kpLiBUaGVyZWZvcmUgdGhlCisgKiBQQ0kgYmxvY2sgaGFzIHRvIGJlIHRyZWF0ZWQgYXMgYSBjYXNjYWRlZCBpbnRlcnJ1cHQgY29udHJvbGxlciBjb25uZWN0ZWQKKyAqIHRvIHRoZSBNUElDLgorICovCisKK3ZvaWQgX19pbml0IHRzaTEwOF9wY2lfaW50X2luaXQodm9pZCkKK3sKKwl1X2ludCBpOworCisJREJHKCJUc2kxMDhfcGNpX2ludF9pbml0OiBpbml0aWFsaXppbmcgUENJIGludGVycnVwdHNcbiIpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9QQ0lfSVJRUzsgaSsrKSB7CisJCWlycV9kZXNjW2kgKyBJUlFfUENJX0lOVEFEX0JBU0VdLmhhbmRsZXIgPSAmdHNpMTA4X3BjaV9pcnE7CisJCWlycV9kZXNjW2kgKyBJUlFfUENJX0lOVEFEX0JBU0VdLnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJfQorCisJaW5pdF9wY2lfc291cmNlKCk7Cit9CisKK2ludCB0c2kxMDhfaXJxX2Nhc2NhZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKnVudXNlZCkKK3sKKwlyZXR1cm4gZ2V0X3BjaV9zb3VyY2UoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCAwNzQxZGY4Li4xNzliMTBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC04LDcgKzgsNiBAQAogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzR4eF9pby9zZXJpYWxfc2ljYy5jIGIvYXJjaC9wcGMvNHh4X2lvL3NlcmlhbF9zaWNjLmMKaW5kZXggOThiMjVmYS4uYjgxYTM2N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjLzR4eF9pby9zZXJpYWxfc2ljYy5jCisrKyBiL2FyY2gvcHBjLzR4eF9pby9zZXJpYWxfc2ljYy5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiBpcyBjb21wYXRpYmxlIHdpdGggbm9ybWFsIHR0eVMqIGRldmljZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xNzU4LDcgKzE3NTcsNyBAQAogICAgIHNpY2Nub3JtYWxfZHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwogICAgIHNpY2Nub3JtYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CiAgICAgc2ljY25vcm1hbF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotICAgIHNpY2Nub3JtYWxfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworICAgIHNpY2Nub3JtYWxfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogICAgIHR0eV9zZXRfb3BlcmF0aW9ucyhzaWNjbm9ybWFsX2RyaXZlciwgJnNpY2Nfb3BzKTsKIAogICAgIGlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHNpY2Nub3JtYWxfZHJpdmVyKSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzgyNjBfaW8vZmNjX2VuZXQuYyBiL2FyY2gvcHBjLzgyNjBfaW8vZmNjX2VuZXQuYwppbmRleCA0ZWRlZWRlLi5lMzQ3ZmU4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy84MjYwX2lvL2ZjY19lbmV0LmMKKysrIGIvYXJjaC9wcGMvODI2MF9pby9mY2NfZW5ldC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjExNyw3ICsyMTE2LDcgQEAKIAogI2lmZGVmCVBIWV9JTlRFUlJVUFQKICNpZmRlZiBDT05GSUdfQURTODI3MgotCWlmIChyZXF1ZXN0X2lycShQSFlfSU5URVJSVVBULCBtaWlfbGlua19pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShQSFlfSU5URVJSVVBULCBtaWlfbGlua19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSJtaWkiLCBkZXYpIDwgMCkKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiQ2FuJ3QgZ2V0IE1JSSBJUlEgJWRcbiIsIFBIWV9JTlRFUlJVUFQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzh4eF9pby9jb21tcHJvYy5jIGIvYXJjaC9wcGMvOHh4X2lvL2NvbW1wcm9jLmMKaW5kZXggMTJiODRjYS4uOWIzYWNlMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvOHh4X2lvL2NvbW1wcm9jLmMKKysrIGIvYXJjaC9wcGMvOHh4X2lvL2NvbW1wcm9jLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgKiBpbnRlcnJ1cHQgdmVjdG9ycwogICAgICAgICAgKi8KICAgICAgICAgZm9yICggaSA9IENQTV9JUlFfT0ZGU0VUIDsgaSA8IENQTV9JUlFfT0ZGU0VUICsgTlJfQ1BNX0lOVFMgOyBpKysgKQotICAgICAgICAgICAgICAgIGlycV9kZXNjW2ldLmhhbmRsZXIgPSAmY3BtX3BpYzsKKyAgICAgICAgICAgICAgICBpcnFfZGVzY1tpXS5jaGlwID0gJmNwbV9waWM7CiAKIAkvKiBTZXQgb3VyIGludGVycnVwdCBoYW5kbGVyIHdpdGggdGhlIGNvcmUgQ1BVLgkqLwogCWlmIChzZXR1cF9pcnEoQ1BNX0lOVEVSUlVQVCwgJmNwbV9pbnRlcnJ1cHRfaXJxYWN0aW9uKSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzh4eF9pby9jczQyMTguaCBiL2FyY2gvcHBjLzh4eF9pby9jczQyMTguaAppbmRleCBmMWM3MzkyLi5lNWY5NDMwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy84eHhfaW8vY3M0MjE4LmgKKysrIGIvYXJjaC9wcGMvOHh4X2lvL2NzNDIxOC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjZGVmaW5lIF9jczQyMThfaF8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgU05EX05ERVZTCTI1NgkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIGRldmljZXMgKi8KICNkZWZpbmUgU05EX0RFVl9DVEwJMAkvKiBDb250cm9sIHBvcnQgL2Rldi9taXhlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvOHh4X2lvL2NzNDIxOF90ZG0uYyBiL2FyY2gvcHBjLzh4eF9pby9jczQyMThfdGRtLmMKaW5kZXggYTg5MjM1Ni4uZjVmMzAwZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvOHh4X2lvL2NzNDIxOF90ZG0uYworKysgYi9hcmNoL3BwYy84eHhfaW8vY3M0MjE4X3RkbS5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy84eHhfaW8vZW5ldC5jIGIvYXJjaC9wcGMvOHh4X2lvL2VuZXQuYwppbmRleCBlY2U2YTlmLi5hNjk1Mzc1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy84eHhfaW8vZW5ldC5jCisrKyBiL2FyY2gvcHBjLzh4eF9pby9lbmV0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIHNtYWxsIHBhY2tldHMuCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzh4eF9pby9mZWMuYyBiL2FyY2gvcHBjLzh4eF9pby9mZWMuYwppbmRleCA2MmY2OGQ2Li44YjYyOTViIDEwMDY0NAotLS0gYS9hcmNoL3BwYy84eHhfaW8vZmVjLmMKKysrIGIvYXJjaC9wcGMvOHh4X2lvL2ZlYy5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiBUaG9tYXMgTGFuZ2UsIHRob21hc0Bjb3JlbGF0dXMuY29tCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy84eHhfaW8vbWljcm9wYXRjaC5jIGIvYXJjaC9wcGMvOHh4X2lvL21pY3JvcGF0Y2guYwppbmRleCAzMTJhZjA3Li5jZmFkNDZiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy84eHhfaW8vbWljcm9wYXRjaC5jCisrKyBiL2FyY2gvcHBjLzh4eF9pby9taWNyb3BhdGNoLmMKQEAgLTQsNyArNCw2IEBACiAgKiBhbHNvIHJlbG9jYXRlcyBTTUMyLCBidXQgdGhpcyB3b3VsZCByZXF1aXJlIGFkZGl0aW9uYWwgY2hhbmdlcwogICogdG8gdWFydC5jLCBzbyBJIGFtIGhvbGRpbmcgb2ZmIG9uIHRoYXQgZm9yIGEgbW9tZW50LgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvS2NvbmZpZyBiL2FyY2gvcHBjL0tjb25maWcKaW5kZXggYjU1ZGU0Zi4uYTA0Y2RmMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvS2NvbmZpZworKysgYi9hcmNoL3BwYy9LY29uZmlnCkBAIC0yMTksMTAgKzIxOSwxMCBAQAogCWhlbHAKIAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKIAkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290Ci0JICBidXQgaXQgaXMgaW5kZXBlZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CisJICBidXQgaXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5c3RlbSBmaXJtd2FyZS4gICBBbmQgbGlrZSBhIHJlYm9vdAogCSAgeW91IGNhbiBzdGFydCBhbnkga2VybmVsIHdpdGggaXQsIG5vdCBqdXN0IExpbnV4LgogCi0JICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBzaW1pbGlhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KKwkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsYXJpdHkgdG8gdGhlIGV4ZWMgc3lzdGVtIGNhbGwuCiAKIAkgIEl0IGlzIGFuIG9uZ29pbmcgcHJvY2VzcyB0byBiZSBjZXJ0YWluIHRoZSBoYXJkd2FyZSBpbiBhIG1hY2hpbmUKIAkgIGlzIHByb3Blcmx5IHNodXRkb3duLCBzbyBkbyBub3QgYmUgc3VycHJpc2VkIGlmIHRoaXMgY29kZSBkb2VzIG5vdApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYW1pZ2EvYW1paW50cy5jIGIvYXJjaC9wcGMvYW1pZ2EvYW1paW50cy5jCmluZGV4IGIyYmJhMDUuLjI2NWZjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2FtaWdhL2FtaWludHMuYworKysgYi9hcmNoL3BwYy9hbWlnYS9hbWlpbnRzLmMKQEAgLTM1LDcgKzM1LDYgQEAKICAqICAgICAgICAgICAvSmVzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9wcGMvYW1pZ2EvY29uZmlnLmMKaW5kZXggYmJlNDdjOS4uYmM1MGVkMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9wcGMvYW1pZ2EvY29uZmlnLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIE1pc2NlbGxhbmVvdXMgQW1pZ2Egc3R1ZmYKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9jb21tb24vY3J0MC5TIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vY3J0MC5TCmluZGV4IDRkMzFiODIuLjhmMGVmMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvY29tbW9uL2NydDAuUworKysgYi9hcmNoL3BwYy9ib290L2NvbW1vbi9jcnQwLlMKQEAgLTE4LDcgKzE4LDYgQEAKICAqICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAKIAkudGV4dApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9jb21tb24vbWlzYy1jb21tb24uYyBiL2FyY2gvcHBjL2Jvb3QvY29tbW9uL21pc2MtY29tbW9uLmMKaW5kZXggMDczODMwYS4uOGUxZmNjZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9jb21tb24vbWlzYy1jb21tb24uYworKysgYi9hcmNoL3BwYy9ib290L2NvbW1vbi9taXNjLWNvbW1vbi5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgkvKiBmb3IgdmFfIGJpdHMgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAjaW5jbHVkZSAibm9uc3RkaW8uaCIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvY29tbW9uL25zMTY1NTAuYyBiL2FyY2gvcHBjL2Jvb3QvY29tbW9uL25zMTY1NTAuYwppbmRleCA0ZjAwYzkzLi5mYzViNzIwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L2NvbW1vbi9uczE2NTUwLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vbnMxNjU1MC5jCkBAIC0yLDcgKzIsNiBAQAogICogQ09NMSBOUzE2NTUwIHN1cHBvcnQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9lbWJlZF9jb25maWcuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2VtYmVkX2NvbmZpZy5jCmluZGV4IDNhNTFiMTAuLjg0MGJmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2VtYmVkX2NvbmZpZy5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2VtYmVkX2NvbmZpZy5jCkBAIC04LDcgKzgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpZmRlZiBDT05GSUdfOHh4CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9oZWFkLlMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9oZWFkLlMKaW5kZXggMTYwZGExMC4uMWI0ZDdiMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvaGVhZC5TCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2hlYWQuUwpAQCAtMTEsNyArMTEsNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tOHh4X3R0eS5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbTh4eF90dHkuYwppbmRleCAxZDI3NzhlLi5jYWNjNDBmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tOHh4X3R0eS5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL204eHhfdHR5LmMKQEAgLTgsNyArOCw2IEBACiAgKiB1c2UgQ09NMSBpbnN0ZWFkIG9mIFNNQzEgYXMgdGhlIGNvbnNvbGUgcG9ydC4gIFRoaXMga2luZGEgc3Vja3MKICAqIGZvciB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzbyBoZXJlIHdlIGZvcmNlIHRoZSB1c2Ugb2YgU01DMSBhZ2Fpbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNoZXN0bnV0LmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNoZXN0bnV0LmMKaW5kZXggYjk0ZTE0Mi4uMTRhNGI1NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1jaGVzdG51dC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtY2hlc3RudXQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL212NjR4NjBfZGVmcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1lbWJlZGRlZC5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1lbWJlZGRlZC5jCmluZGV4IDM4NjVmM2YuLjEwMjE5ZWVjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWVtYmVkZGVkLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1lbWJlZGRlZC5jCkBAIC02LDcgKzYsNiBAQAogICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6IFRvbSBSaW5pIDx0cmluaUBrZXJuZWwuY3Jhc2hpbmcub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1ldjY0MjYwLmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQyNjAuYwppbmRleCAyNjc4YzIyLi4wYjM5Nzg2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQyNjAuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQyNjAuYwpAQCAtMTAsNyArMTAsNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQzNjAuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDM2MC5jCmluZGV4IGEyMTJiNWIuLjk2ZWFlYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDM2MC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDM2MC5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXY2NHg2MF9kZWZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWthdGFuYS5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1rYXRhbmEuYwppbmRleCBkOTdmMmVlLi43OWExYmJjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWthdGFuYS5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2Mta2F0YW5hLmMKQEAgLTksNyArOSw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdjY0eDYwX2RlZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtbXY2NHg2MC5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1tdjY0eDYwLmMKaW5kZXggNzFmZjIwZi4uMjhiMzEwOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1tdjY0eDYwLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1tdjY0eDYwLmMKQEAgLTksNyArOSw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdjY0eDYwX2RlZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtcHJlcC5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1wcmVwLmMKaW5kZXggNjNkZWY5ZC4uMDA4NmUxYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1wcmVwLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1wcmVwLmMKQEAgLTQsNyArNCw2IEBACiAgKiBJbiB0aGUgcGFzdDogR2FyeSBUaG9tYXMsIENvcnQgRG91Z2FuIDxjb3J0QGNzLm5tdC5lZHU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9yZXNpZHVhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1zcHJ1Y2UuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2Mtc3BydWNlLmMKaW5kZXggMGNhZDJmNS4uNWIzYTZjNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1zcHJ1Y2UuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLXNwcnVjZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MuYwppbmRleCAzZDc4NTcxLi5hNWRmMDg5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjNTJ4eF90dHkuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21wYzUyeHhfdHR5LmMKaW5kZXggMTk2NDQ5My4uN2I1OTI0Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21wYzUyeHhfdHR5LmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjNTJ4eF90dHkuYwpAQCAtOSw3ICs5LDYgQEAKICAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL212NjR4NjBfdHR5LmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9tdjY0eDYwX3R0eS5jCmluZGV4IDBjNTJmNWMuLjc4MWUwNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL212NjR4NjBfdHR5LmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXY2NHg2MF90dHkuYwpAQCAtMTIsNyArMTIsNiBAQAogCiAvKiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIGRpc2FibGVkIChMMSwgTDIsIEwzKS4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2luY2x1ZGUgPGFzbS9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL29wZW5iaW9zLmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9vcGVuYmlvcy5jCmluZGV4IDNmMmVkNTMuLjZmZjI3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL29wZW5iaW9zLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvb3BlbmJpb3MuYwpAQCAtMTIsNyArMTIsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAjaW5jbHVkZSA8YXNtL2libTR4eC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcGlicy5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcGlicy5jCmluZGV4IDY3MjIyZDUuLmYzOWQwMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL3BpYnMuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9waWJzLmMKQEAgLTYsNyArNiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcmVsb2NhdGUuUyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL3JlbG9jYXRlLlMKaW5kZXggMjUzMzExMy4uMGMwMjE1NSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcmVsb2NhdGUuUworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9yZWxvY2F0ZS5TCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDJmNWM1ZTEuLjFmOTFlY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC04LDcgKzgsNiBAQAogICogI2RlZmluZXMgZnJvbSB0aGUgYXNzZW1ibHktbGFuZ3VhZ2Ugb3V0cHV0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUyBiL2FyY2gvcHBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKaW5kZXggZDdiZmQ2MC4uNmE2NzRlOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNC5TCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9kbWEtbWFwcGluZy5jIGIvYXJjaC9wcGMva2VybmVsL2RtYS1tYXBwaW5nLmMKaW5kZXggNjE0NjVlYy4uMTBmZWM3MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2RtYS1tYXBwaW5nLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUwppbmRleCAxYWRjOTE0Li5hOWQ0NTUzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUwpAQCAtMTksNyArMTksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWQuUwppbmRleCAwMTMwM2VmLi4xMDAwNTJhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzQ0eC5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfNDR4LlMKaW5kZXggMGQ4Yjg4Mi4uN2U0NGRlNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfNDR4LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfNDR4LlMKQEAgLTI4LDcgKzI4LDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzR4eC5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfNHh4LlMKaW5kZXggMTBjMjYxYy4uNTFkYTE1NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfNHh4LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfNHh4LlMKQEAgLTMxLDcgKzMxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzh4eC5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggN2EyZjIwNS4uOTQ0YzM1YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMKQEAgLTE5LDcgKzE5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKaW5kZXggZGQ4NmJiZS4uNjY4NzdiZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTMwLDcgKzMwLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCmluZGV4IDVhOTM2NTYuLjJmYTAwNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL21pc2MuUwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BjaS5jIGIvYXJjaC9wcGMva2VybmVsL3BjaS5jCmluZGV4IGQyMGFjY2YuLjYzODA4ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKQEAgLTIsNyArMiw2IEBACiAgKiBDb21tb24gcHJlcC9jaHJwIHBjaSByb3V0aW5lcy4gLS0gQ29ydAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtOTUsOCArOTQsMTAgQEAKIAkJaWYgKCFyZXMtPmZsYWdzKQogCQkJY29udGludWU7CiAJCWlmIChyZXMtPmVuZCA9PSAweGZmZmZmZmZmKSB7Ci0JCQlEQkcoIlBDSTolcyBSZXNvdXJjZSAlZCBbJTA4bHgtJTA4bHhdIGlzIHVuYXNzaWduZWRcbiIsCi0JCQkgICAgcGNpX25hbWUoZGV2KSwgaSwgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCQkJREJHKCJQQ0k6JXMgUmVzb3VyY2UgJWQgWyUwMTZsbHgtJTAxNmxseF0gaXMgdW5hc3NpZ25lZFxuIiwKKwkJCQlwY2lfbmFtZShkZXYpLCBpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKIAkJCXJlcy0+ZW5kIC09IHJlcy0+c3RhcnQ7CiAJCQlyZXMtPnN0YXJ0ID0gMDsKIAkJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9VTlNFVDsKQEAgLTE2OSwxOCArMTcwLDE4IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmVzLT5zdGFydDsKKwkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCQlpZiAoc2l6ZSA+IDB4MTAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogSS9PIFJlZ2lvbiAlcy8lZCB0b28gbGFyZ2UiCi0JCQkgICAgICAgIiAoJWxkIGJ5dGVzKVxuIiwgcGNpX25hbWUoZGV2KSwKLQkJCSAgICAgICBkZXYtPnJlc291cmNlIC0gcmVzLCBzaXplKTsKKwkJCSAgICAgICAiICglbGxkIGJ5dGVzKVxuIiwgcGNpX25hbWUoZGV2KSwKKwkJCSAgICAgICBkZXYtPnJlc291cmNlIC0gcmVzLCAodW5zaWduZWQgbG9uZyBsb25nKXNpemUpOwogCQl9CiAKIAkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKQEAgLTI1MSw4ICsyNTIsOSBAQAogCQkJCX0KIAkJCX0KIAotCQkJREJHKCJQQ0k6IGJyaWRnZSByc3JjICVseC4uJWx4ICglbHgpLCBwYXJlbnQgJXBcbiIsCi0JCQkgICAgcmVzLT5zdGFydCwgcmVzLT5lbmQsIHJlcy0+ZmxhZ3MsIHByKTsKKwkJCURCRygiUENJOiBicmlkZ2UgcnNyYyAlbGx4Li4lbGx4ICglbHgpLCBwYXJlbnQgJXBcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsIHJlcy0+ZmxhZ3MsIHByKTsKIAkJCWlmIChwcikgewogCQkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKHByLCByZXMpID09IDApCiAJCQkJCWNvbnRpbnVlOwpAQCAtMzAyLDggKzMwNCw5IEBACiAJKnBwID0gTlVMTDsKIAlmb3IgKHAgPSByZXMtPmNoaWxkOyBwICE9IE5VTEw7IHAgPSBwLT5zaWJsaW5nKSB7CiAJCXAtPnBhcmVudCA9IHJlczsKLQkJREJHKEtFUk5fSU5GTyAiUENJOiByZXBhcmVudGVkICVzIFslbHguLiVseF0gdW5kZXIgJXNcbiIsCi0JCSAgICBwLT5uYW1lLCBwLT5zdGFydCwgcC0+ZW5kLCByZXMtPm5hbWUpOworCQlEQkcoS0VSTl9JTkZPICJQQ0k6IHJlcGFyZW50ZWQgJXMgWyVsbHguLiVsbHhdIHVuZGVyICVzXG4iLAorCQkJcC0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5zdGFydCwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcC0+ZW5kLCByZXMtPm5hbWUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM1OCwxMyArMzYxLDE1IEBACiAJCXRyeSA9IGNvbmZsaWN0LT5zdGFydCAtIDE7CiAJfQogCWlmIChyZXF1ZXN0X3Jlc291cmNlKHByLCByZXMpKSB7Ci0JCURCRyhLRVJOX0VSUiAiUENJOiBodWg/IGNvdWxkbid0IG1vdmUgdG8gJWx4Li4lbHhcbiIsCi0JCSAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCk7CisJCURCRyhLRVJOX0VSUiAiUENJOiBodWg/IGNvdWxkbid0IG1vdmUgdG8gJWxseC4uJWxseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCQlyZXR1cm4gLTE7CQkvKiAiY2FuJ3QgaGFwcGVuIiAqLwogCX0KIAl1cGRhdGVfYnJpZGdlX2Jhc2UoYnVzLCBpKTsKLQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IGJyaWRnZSAlZCByZXNvdXJjZSAlZCBtb3ZlZCB0byAlbHguLiVseFxuIiwKLQkgICAgICAgYnVzLT5udW1iZXIsIGksIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwlwcmludGsoS0VSTl9JTkZPICJQQ0k6IGJyaWRnZSAlZCByZXNvdXJjZSAlZCBtb3ZlZCB0byAlbGx4Li4lbGx4XG4iLAorCQlidXMtPm51bWJlciwgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDc1LDE1ICs0ODAsMTcgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnByLCAqciA9ICZkZXYtPnJlc291cmNlW2lkeF07CiAKLQlEQkcoIlBDSTolczogUmVzb3VyY2UgJWQ6ICUwOGx4LSUwOGx4IChmPSVseClcbiIsCi0JICAgIHBjaV9uYW1lKGRldiksIGlkeCwgci0+c3RhcnQsIHItPmVuZCwgci0+ZmxhZ3MpOworCURCRygiUENJOiVzOiBSZXNvdXJjZSAlZDogJTAxNmxseC0lMDE2bGx4IChmPSVseClcbiIsCisJICAgIHBjaV9uYW1lKGRldiksIGlkeCwgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5zdGFydCwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQsIHItPmZsYWdzKTsKIAlwciA9IHBjaV9maW5kX3BhcmVudF9yZXNvdXJjZShkZXYsIHIpOwogCWlmICghcHIgfHwgcmVxdWVzdF9yZXNvdXJjZShwciwgcikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2UgcmVnaW9uICVkIgogCQkgICAgICAgIiBvZiBkZXZpY2UgJXNcbiIsIGlkeCwgcGNpX25hbWUoZGV2KSk7CiAJCWlmIChwcikKLQkJCURCRygiUENJOiAgcGFyZW50IGlzICVwOiAlMDhseC0lMDhseCAoZj0lbHgpXG4iLAotCQkJICAgIHByLCBwci0+c3RhcnQsIHByLT5lbmQsIHByLT5mbGFncyk7CisJCQlEQkcoIlBDSTogIHBhcmVudCBpcyAlcDogJTAxNmxseC0lMDE2bGx4IChmPSVseClcbiIsCisJCQkJcHIsICh1bnNpZ25lZCBsb25nIGxvbmcpcHItPnN0YXJ0LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcHItPmVuZCwgcHItPmZsYWdzKTsKIAkJLyogV2UnbGwgYXNzaWduIGEgbmV3IGFkZHJlc3MgbGF0ZXIgKi8KIAkJci0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9VTlNFVDsKIAkJci0+ZW5kIC09IHItPnN0YXJ0OwpAQCAtOTUyLDggKzk1OSw4IEBACiAJZWxzZQogCQlwcm90IHw9IF9QQUdFX0dVQVJERUQ7CiAKLQlwcmludGsoIlBDSSBtYXAgZm9yICVzOiVseCwgcHJvdDogJWx4XG4iLCBwY2lfbmFtZShkZXYpLCBycC0+c3RhcnQsCi0JICAgICAgIHByb3QpOworCXByaW50aygiUENJIG1hcCBmb3IgJXM6JWxseCwgcHJvdDogJWx4XG4iLCBwY2lfbmFtZShkZXYpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXJwLT5zdGFydCwgcHJvdCk7CiAKIAlyZXR1cm4gX19wZ3Byb3QocHJvdCk7CiB9CkBAIC0xMTIyLDcgKzExMjksNyBAQAogCiB2b2lkIHBjaV9yZXNvdXJjZV90b191c2VyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsCiAJCQkgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcnNyYywKLQkJCSAgdTY0ICpzdGFydCwgdTY0ICplbmQpCisJCQkgIHJlc291cmNlX3NpemVfdCAqc3RhcnQsIHJlc291cmNlX3NpemVfdCAqZW5kKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zZShkZXYtPmJ1cy0+bnVtYmVyKTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcHBjLXN0dWIuYyBiL2FyY2gvcHBjL2tlcm5lbC9wcGMtc3R1Yi5jCmluZGV4IGQ2MTg4OWMuLjVmOWVlN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGMtc3R1Yi5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wcGMtc3R1Yi5jCkBAIC05OSw3ICs5OSw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19odGFiLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2h0YWIuYwppbmRleCA3NWM2NDUwLi5iZDEyOWQzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2h0YWIuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2h0YWIuYwpAQCAtMTAsNyArMTAsNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCBiMjUwYjFiLi41MGMxYjQ3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggNGI0NjA3ZC4uZmFmMjk0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKQEAgLTIsNyArMiw2IEBACiAgKiBDb21tb24gcHJlcCBib290IGFuZCBzZXR1cCBjb2RlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3NtcC10YnN5bmMuYyBiL2FyY2gvcHBjL2tlcm5lbC9zbXAtdGJzeW5jLmMKaW5kZXggNmE1Njk0Zi4uMTU3Njc1OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NtcC10YnN5bmMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvc21wLXRic3luYy5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcHBjL2tlcm5lbC9zbXAuYwppbmRleCBmNzc3OTVhLi5jYTU3ZTg5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NtcC5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BwYy9rZXJuZWwvdGltZS5jCmluZGV4IDUzZWE3MjMuLjZhYjhjYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3RpbWUuYwpAQCAtNDIsNyArNDIsNiBAQAogICogICAgICAgICAgICAgIkEgS2VybmVsIE1vZGVsIGZvciBQcmVjaXNpb24gVGltZWtlZXBpbmciIGJ5IERhdmUgTWlsbHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwppbmRleCAxYzBkNjgwLi5kN2E0MzMwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbGliL2xvY2tzLmMgYi9hcmNoL3BwYy9saWIvbG9ja3MuYwppbmRleCBjNDUwZGM0Li5lYTRhZWU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9saWIvbG9ja3MuYworKysgYi9hcmNoL3BwYy9saWIvbG9ja3MuYwpAQCAtNCw3ICs0LDYgQEAKICAqIFdyaXR0ZW4gYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbGliL3N0cmluZy5TIGIvYXJjaC9wcGMvbGliL3N0cmluZy5TCmluZGV4IDJlMjU4YzQuLjg0ZWQzM2FiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9saWIvc3RyaW5nLlMKKysrIGIvYXJjaC9wcGMvbGliL3N0cmluZy5TCkBAIC04LDcgKzgsNiBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vNDR4X21tdS5jIGIvYXJjaC9wcGMvbW0vNDR4X21tdS5jCmluZGV4IGUwMTUyYTkuLjBhMGEwNDg3YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vNDR4X21tdS5jCisrKyBiL2FyY2gvcHBjL21tLzQ0eF9tbXUuYwpAQCAtMjQsNyArMjQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tLzR4eF9tbXUuYyBiL2FyY2gvcHBjL21tLzR4eF9tbXUuYwppbmRleCA0ZDAwNmFhLi44MzhlMDlkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9tbS80eHhfbW11LmMKKysrIGIvYXJjaC9wcGMvbW0vNHh4X21tdS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vZmF1bHQuYyBiL2FyY2gvcHBjL21tL2ZhdWx0LmMKaW5kZXggOGUwOGNhMzIuLjVjZGZiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wcGMvbW0vZmF1bHQuYwpAQCAtMTMsNyArMTMsNiBAQAogICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3BwYy9tbS9mc2xfYm9va2VfbW11LmMKaW5kZXggNWQ1ODFiYi4uMTIzZGEwMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vZnNsX2Jvb2tlX21tdS5jCisrKyBiL2FyY2gvcHBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtMjYsNyArMjYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tL2hhc2h0YWJsZS5TIGIvYXJjaC9wcGMvbW0vaGFzaHRhYmxlLlMKaW5kZXggMzFkMGE5Mi4uZTc1Njk0MiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vaGFzaHRhYmxlLlMKKysrIGIvYXJjaC9wcGMvbW0vaGFzaHRhYmxlLlMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9pbml0LmMgYi9hcmNoL3BwYy9tbS9pbml0LmMKaW5kZXggYzliZDE4NC4uNTIzMzkyZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vaW5pdC5jCisrKyBiL2FyY2gvcHBjL21tL2luaXQuYwpAQCAtMTgsNyArMTgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tL21lbV9waWVjZXMuYyBiL2FyY2gvcHBjL21tL21lbV9waWVjZXMuYwppbmRleCAzZDYzOTA1Li42MDMwYTBkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9tbS9tZW1fcGllY2VzLmMKKysrIGIvYXJjaC9wcGMvbW0vbWVtX3BpZWNlcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9tbXVfY29udGV4dC5jIGIvYXJjaC9wcGMvbW0vbW11X2NvbnRleHQuYwppbmRleCA4Nzg0ZjM3Li44NWFmYTdmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9tbS9tbXVfY29udGV4dC5jCisrKyBiL2FyY2gvcHBjL21tL21tdV9jb250ZXh0LmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9wZ3RhYmxlLmMgYi9hcmNoL3BwYy9tbS9wZ3RhYmxlLmMKaW5kZXggNzA2YmNhOC4uMzU0YTk0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcHBjL21tL3BndGFibGUuYwpAQCAtMjAsNyArMjAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tL3BwY19tbXUuYyBiL2FyY2gvcHBjL21tL3BwY19tbXUuYwppbmRleCAyNWJiNmYzLi45NzNmMWU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9tbS9wcGNfbW11LmMKKysrIGIvYXJjaC9wcGMvbW0vcHBjX21tdS5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tL3RsYi5jIGIvYXJjaC9wcGMvbW0vdGxiLmMKaW5kZXggNjA2YjAyMy4uZmEyOTc0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vdGxiLmMKKysrIGIvYXJjaC9wcGMvbW0vdGxiLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmMKaW5kZXggYjk0MGNmZC4uMzQ5NjYwYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uaAppbmRleCAzMWMwZGQ2Li5kY2QzZDA5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX19BU01fQkFNQk9PX0hfXwogI2RlZmluZSBfX0FTTV9CQU1CT09fSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmg+CiAKIC8qIEYvVyBUTEIgbWFwcGluZyB1c2VkIGluIGJvb3Rsb2FkZXIgZ2x1ZSB0byByZXNldCBFTUFDICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYnViaW5nYS5jCmluZGV4IGNlNDhhNGYuLjQwMDlmNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYnViaW5nYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYnViaW5nYS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9idWJpbmdhLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaAppbmRleCA2MDZhYTlmLi41YzQwODA2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaApAQCAtMTksNyArMTksNiBAQAogI2lmbmRlZiBfX0JVQklOR0FfSF9fCiAjZGVmaW5lIF9fQlVCSU5HQV9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2NwY2k0MDUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvY3BjaTQwNS5jCmluZGV4IDk3MGI2OTguLjM2NzQzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvY3BjaTQwNS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvY3BjaTQwNS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jCmluZGV4IGI0ZWNiOWMuLmYwZjljYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuaAppbmRleCAyN2IyZTc3Li5mNDBlMzNkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fQVNNX0VCT05ZX0hfXwogI2RlZmluZSBfX0FTTV9FQk9OWV9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvaWJtNDQwZ3AuaD4KIAogLyogRi9XIFRMQiBtYXBwaW5nIHVzZWQgaW4gYm9vdGxvYWRlciBnbHVlIHRvIHJlc2V0IEVNQUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZXA0MDUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZXA0MDUuYwppbmRleCA2ZWZhOTFmLi5hZTVjODIwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2VwNDA1LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5jCkBAIC05LDcgKzksNiBAQAogICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCiAgKiBvciBpbXBsaWVkLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuYwppbmRleCA1NWFmNzY5Li5mYjM2MzBhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVlcC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVlcC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVlcC5oCmluZGV4IGZlNDY2NDAuLjNlZjIwYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWVwLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19BU01fSUJNNDA1RVBfSF9fCiAjZGVmaW5lIF9fQVNNX0lCTTQwNUVQX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGlibTQwNS5oIGF0IGJvdHRvbSBvZiB0aGlzIGZpbGUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5jCmluZGV4IGU1NzAwNDYuLjJhYzY3YTJmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5oCmluZGV4IGVhZjBlZjU3Li45ZjE1ZTU1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0lCTTQwNUdQX0hfXwogI2RlZmluZSBfX0FTTV9JQk00MDVHUF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBpYm00MDUuaCBhdCBib3R0b20gb2YgdGhpcyBmaWxlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3ByLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5jCmluZGV4IDQ5ZGE2MWYuLjlmNGRhY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3ByLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncHIuYwpAQCAtNyw3ICs3LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncHIuaAppbmRleCBlOTBjNWRkZS4uOWUwMWYxNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncHIuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0lCTTQwNUdQUl9IX18KICNkZWZpbmUgX19BU01fSUJNNDA1R1BSX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGlibTQwNS5oIGF0IGJvdHRvbSBvZiB0aGlzIGZpbGUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBlcC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBlcC5oCmluZGV4IDYxNzE3ZTguLmQ5MjU3MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZXAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19QUENfUExBVEZPUk1TX0lCTTQ0MEVQX0gKICNkZWZpbmUgX19QUENfUExBVEZPUk1TX0lCTTQ0MEVQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KIAogLyogVUFSVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBncC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBncC5oCmluZGV4IDdiMjc2M2IuLjM5MWM5MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3AuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGdwLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX19QUENfUExBVEZPUk1TX0lCTTQ0MEdQX0gKICNkZWZpbmUgX19QUENfUExBVEZPUk1TX0lCTTQ0MEdQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBVQVJUICovCiAjZGVmaW5lIFBQQzQ0MEdQX1VBUlQwX0FERFIJMHgwMDAwMDAwMTQwMDAwMjAwVUxMCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGd4LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGd4LmgKaW5kZXggMDcwYTM0ZS4uNTk5YzQyOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBneC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3guaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX1BQQ19QTEFURk9STVNfSUJNNDQwR1hfSAogI2RlZmluZSBfX1BQQ19QTEFURk9STVNfSUJNNDQwR1hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwc3AuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwc3AuaAppbmRleCA3N2U4YmIyLi4yOTc4NjgyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MHNwLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBzcC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fUFBDX1BMQVRGT1JNU19JQk00NDBTUF9ICiAjZGVmaW5lIF9fUFBDX1BMQVRGT1JNU19JQk00NDBTUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmMKaW5kZXggZjFkY2IwYS4uMWFmYzM2NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libW5wNDA1aC5jCkBAIC03LDcgKzcsNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9vY3AuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2libW5wNDA1aC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmgKaW5kZXggMmM2ODNmNmEuLjRhYTg4MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9JQk1OUDQwNUhfSF9fCiAjZGVmaW5lIF9fQVNNX0lCTU5QNDA1SF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBpYm00MDUuaCBhdCBib3R0b20gb2YgdGhpcyBmaWxlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RiNC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmgKaW5kZXggOWRlNDI2NS4uMzFhMDhhYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fSUJNU1RCNF9IX18KICNkZWZpbmUgX19BU01fSUJNU1RCNF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBzZXJpYWwgcG9ydCBkZWZpbmVzICovCiAjZGVmaW5lIFNUQjA0eHh4X0lPX0JBU0UJKCh1aW50KTB4ZTAwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YngyNS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGJ4MjUuaAppbmRleCA2ODg0YTQ5Li4zMWI2MzM0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YngyNS5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RieDI1LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fSUJNU1RCWDI1X0hfXwogI2RlZmluZSBfX0FTTV9JQk1TVEJYMjVfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogc2VyaWFsIHBvcnQgZGVmaW5lcyAqLwogI2RlZmluZSBTVEJ4MjV4eF9JT19CQVNFCSgodWludCkweGUwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYwppbmRleCA1YzM3ZGUyLi42MTcwNmVmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uYwpAQCAtMTEsNyArMTEsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uaAppbmRleCBlMGRiNmE4Li42OGRkNDZiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2x1YW4uaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfX0FTTV9MVUFOX0hfXwogI2RlZmluZSBfX0FTTV9MVUFOX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9pYm00NDBzcC5oPgogCiAvKiBGL1cgVExCIG1hcHBpbmcgdXNlZCBpbiBib290bG9hZGVyIGdsdWUgdG8gcmVzZXQgRU1BQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKaW5kZXggNTU0Nzc2ZC4uODRlOTk5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuaAppbmRleCA3Yzc5OWE5Li44OTczMGNlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpZm5kZWYgX19BU01fT0NPVEVBX0hfXwogI2RlZmluZSBfX0FTTV9PQ09URUFfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2libTQ0MGd4Lmg+CiAKIC8qIEYvVyBUTEIgbWFwcGluZyB1c2VkIGluIGJvb3Rsb2FkZXIgZ2x1ZSB0byByZXNldCBFTUFDICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3BwYzQ0MHNwZS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9wcGM0NDBzcGUuaAppbmRleCBkM2E2MjBkLi5mMWU4NjdjNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9wcGM0NDBzcGUuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3BwYzQ0MHNwZS5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fUFBDX1BMQVRGT1JNU19QUEM0NDBTUEVfSAogI2RlZmluZSBfX1BQQ19QTEFURk9STVNfUFBDNDQwU1BFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2libTQ0eC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmMKaW5kZXggNTNkYTJiNC4uZWRmNGQzNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcmVkd29vZDUuYwpAQCAtOSw3ICs5LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q2LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q2LmMKaW5kZXggNDFiMjdkMS4uMDA2ZTI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNi5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcmVkd29vZDYuYwpAQCAtNyw3ICs3LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmMKaW5kZXggYmFiMzFlYi4uYzQ3NDkzZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuYwpAQCAtOSw3ICs5LDYgQEAKICAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwogICogb3IgaW1wbGllZC4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmgKaW5kZXggZGFlMDE2Mi4uNjliMTY5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuaApAQCAtMTksNyArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9TWUNBTU9SRV9IX18KICNkZWZpbmUgX19BU01fU1lDQU1PUkVfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2libTQwNWdwci5oPgogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3dhbG51dC5jCmluZGV4IDZiZDc3OTAuLmY0MTRkMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuYwpAQCAtMTEsNyArMTEsNiBAQAogICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCiAgKiBvciBpbXBsaWVkLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3dhbG51dC5oCmluZGV4IGYxM2E1NzcuLmQ5YzRlYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuaApAQCAtMjEsNyArMjEsNiBAQAogI2lmbmRlZiBfX0FTTV9XQUxOVVRfSF9fCiAjZGVmaW5lIF9fQVNNX1dBTE5VVF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvaWJtNDA1Z3AuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWwzMDAuYwppbmRleCBkOTdhN2YyLi5mYjVmMGI1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sMzAwLmMKQEAgLTksNyArOSw2IEBACiAgKiAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWw0MDMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sNDAzLmMKaW5kZXggNGMwYzdlNC4uY2IzYmY3YSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWw0MDMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDQwMy5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94cGFyYW1ldGVycy94cGFyYW1ldGVycy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94cGFyYW1ldGVycy94cGFyYW1ldGVycy5oCmluZGV4IDRjZjIxZjIuLmNkN2QwZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hwYXJhbWV0ZXJzL3hwYXJhbWV0ZXJzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1hJTElOWF9NTDMwMCkKICAgI2luY2x1ZGUgInhwYXJhbWV0ZXJzX21sMzAwLmgiCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMKaW5kZXggZjI4N2RjZC4uMzQ2Nzg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveXVjY2EuYwpAQCAtMTIsNyArMTIsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5oCmluZGV4IDdhZTIzMDEuLmJjOTY4NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveXVjY2EuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19BU01fWVVDQ0FfSF9fCiAjZGVmaW5lIF9fQVNNX1lVQ0NBX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9wcGM0NDBzcGUuaD4KIAogLyogRi9XIFRMQiBtYXBwaW5nIHVzZWQgaW4gYm9vdGxvYWRlciBnbHVlIHRvIHJlc2V0IEVNQUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCmluZGV4IDExNjI2ZGQuLjMzOTdmMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtMTEsNyArMTEsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmgKaW5kZXggNjcyN2JiZC4uZDJlMDZjOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fTUFDSF9NUEM4M1hYX1NZU19IX18KICNkZWZpbmUgX19NQUNIX01QQzgzWFhfU1lTX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPHN5c2xpYi9wcGM4M3h4X3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5jCmluZGV4IDliMDE0ZGYuLjRmODM5ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuYwpAQCAtMTEsNyArMTEsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmgKaW5kZXggMGI1ZTdmZi4uNzU1OWY5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fTUFDSF9NUEM4NTQwQURTX0hfXwogI2RlZmluZSBfX01BQ0hfTVBDODU0MEFEU19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPHN5c2xpYi9wcGM4NXh4X3NldHVwLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTU1X2Nkcy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU1NV9jZHMuaAppbmRleCA5NzU0ZGJkLi40Zjc5YzM3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTU1X2Nkcy5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NTVfY2RzLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX19NQUNIX01QQzg1NTVDRFNfSF9fCiAjZGVmaW5lIF9fTUFDSF9NUEM4NTU1Q0RTX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8c3lzbGliL3BwYzg1eHhfc2V0dXAuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMKaW5kZXggMGNiMmU4Ni4uZDkwY2QyNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMzIsNyArMTMxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY3BtMl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBjcG0yX2Nhc2NhZGUsCi0JLmZsYWdzID0gU0FfSU5URVJSVVBULAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gImNwbTJfY2FzY2FkZSIsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmgKaW5kZXggYzIyNDdjMi4uOWYxODVhYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fTUFDSF9NUEM4NTYwQURTX0gKICNkZWZpbmUgX19NQUNIX01QQzg1NjBBRFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8c3lzbGliL3BwYzg1eHhfc2V0dXAuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYwppbmRleCA4ZmQ5ZDc2Li42NzQ4MDZlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYwpAQCAtMTEsNyArMTEsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uaAppbmRleCBkZThkNDFhLi5hYmYzMjI4MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX19NQUNIX01QQzg1WFhfQURTX0hfXwogI2RlZmluZSBfX01BQ0hfTVBDODVYWF9BRFNfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYwppbmRleCA0MzY4ZGMzLi43NTIwNDU4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYwpAQCAtMTEsNyArMTEsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTM3LDcgKzEzNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNwbTJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gY3BtMl9jYXNjYWRlLAotCS5mbGFncyA9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAogCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJjcG0yX2Nhc2NhZGUiLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzX2NvbW1vbi5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKaW5kZXggNjJkZjU0Zi4uMzJjNTQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX19NQUNIX01QQzg1WFhfQ0RTX0hfXwogI2RlZmluZSBfX01BQ0hfTVBDODVYWF9DRFNfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCmluZGV4IGI3Mzc3OGUuLjc2NGQ1ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaAppbmRleCA0NGZmYWEyLi5jN2Q2MWNmMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfX01BQ0hfU0JDODU2MF9IX18KICNkZWZpbmUgX19NQUNIX1NCQzg1NjBfSF9fCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzg1eHgvc2JjODV4eC5oPgogCiAjZGVmaW5lIENQTV9NQVBfQUREUiAgICAoQ0NTUkJBUiArIE1QQzg1eHhfQ1BNX09GRlNFVCkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYwppbmRleCBkM2ZmMjgwLi4yYzU4N2NhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmgKaW5kZXggNWRkOGI2YS4uMjFlYTdhNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX1BMQVRGT1JNU184NVhYX1NCQzg1WFhfSF9fCiAjZGVmaW5lIF9fUExBVEZPUk1TXzg1WFhfU0JDODVYWF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKaW5kZXggOGQ3YmFhOS4uNDk1YWE3OSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwpAQCAtMTYsNyArMTYsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTY3LDcgKzE2Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNwbTJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gY3BtMl9jYXNjYWRlLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAiY3BtMl9jYXNjYWRlIiwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmgKaW5kZXggM2Y3MWY4Zi4uYzZlMzRjMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX01BQ0hfU1RYX0dQM19ICiAjZGVmaW5lIF9fTUFDSF9TVFhfR1AzX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKaW5kZXggMDBhZjEzMi4uMTg5ZWQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYwpAQCAtMTQsNyArMTQsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTkxLDcgKzE5MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNwbTJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gY3BtMl9jYXNjYWRlLAotCS5mbGFncyA9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAogCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJjcG0yX2Nhc2NhZGUiLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguaAppbmRleCA2MTJkODA1Li41NzI4NGU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9fTUFDSF9UUU04NVhYX0gKICNkZWZpbmUgX19NQUNIX1RRTTg1WFhfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9hcHVzX3BjaS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2FwdXNfcGNpLmMKaW5kZXggMzNkYWQ2ZC4uZGMxNjVmMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2FwdXNfcGNpLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2FwdXNfcGNpLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIENPTkZJR19BTUlHQQogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvYXB1c19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2FwdXNfc2V0dXAuYwppbmRleCBmZTBjZGMwLi4xZDAzNGVhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvYXB1c19zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9hcHVzX3NldHVwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqICBBbWlnYSBzcGVjaWZpYyBzdHVmZiBpbnRvIG1hY2gvYW1pZ2EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzM0LDkgKzczMyw5IEBACiAJZm9yICggaSA9IDAgOyBpIDwgQU1JX0lSUVM7IGkrKyApIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0xFVkVMOwogCQlpZiAoaSA8IElSUV9BTUlHQV9BVVRPKSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmFtaWdhX2lycWN0cmw7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJmFtaWdhX2lycWN0cmw7CiAJCX0gZWxzZSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmFtaWdhX3N5c19pcnFjdHJsOworCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZhbWlnYV9zeXNfaXJxY3RybDsKIAkJCWFjdGlvbiA9ICZhbWlnYV9zeXNfaXJxYWN0aW9uW2ktSVJRX0FNSUdBX0FVVE9dOwogCQkJaWYgKGFjdGlvbi0+bmFtZSkKIAkJCQlzZXR1cF9pcnEoaSwgYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jY20uaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jY20uaAppbmRleCBlZGI4N2I1Li42OTAwMGIxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2NtLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NjbS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfX01BQ0hfQ0NNX0gKICNkZWZpbmUgX19NQUNIX0NDTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKaW5kZXggZjMyNGY3NS4uYTc2NGFlNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKQEAgLTksNyArOSw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NwY2k2OTAuYwppbmRleCA3OTA0NzVjLi5lNzhiY2NmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jcGNpNjkwLmMKQEAgLTgsNyArOCw2IEBACiAgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKICAqIG9yIGltcGxpZWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MjYwLmMKaW5kZXggMzFlOGUyMS4uNDk1N2E3YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDI2MC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKiBOb3RlOiBUaGUgNzUwQ1hlIGFuZCA3NDUwIGFyZSBub3Qgc3RhYmxlIHdpdGggYSAxMjVNSHogb3IgMTMzTUh6IFRDTEsvU1lTQ0xLLgogICogCUF0IDEwME1IeiwgdGhleSBhcmUgc29saWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuYwppbmRleCAxMDRhYzliLi45MGVkMzc1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9mYWRzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZmFkcy5oCmluZGV4IGUxYzBiMWIuLjJmOWYwZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9mYWRzLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2ZhZHMuaApAQCAtMTksNyArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9GQURTX0hfXwogI2RlZmluZSBfX0FTTV9GQURTX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3Byb20uUyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfcHJvbS5TCmluZGV4IGIxODFmMjEuLmU4Yzg0ZDI0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3Byb20uUworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3Byb20uUwpAQCAtNiw3ICs2LDYgQEAKICAqICAgIC0tLURhbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvZ2VtaW5pLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3NlcmlhbC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXJpYWwuaAppbmRleCA2OTg1NWFlLi5iOTE1ZWZmNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXJpYWwuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3NlcmlhbC5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfX0FTTVBQQ19HRU1JTklfU0VSSUFMX0gKICNkZWZpbmUgX19BU01QUENfR0VNSU5JX1NFUklBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvZ2VtaW5pLmg+CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX01BTllfUE9SVFMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfc2V0dXAuYwppbmRleCAwMDkwZmYxNS4uZjQ4MDQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfc2V0dXAuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jCmluZGV4IDc1ZGMyZWUuLmUwZjExMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2hkcHUuYwpAQCAtMTIsNyArMTIsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtODM4LDcgKzgzNyw3IEBACiAJCW12NjR4NjBfd3JpdGUoJmJoLCBNVjY0MzYwX0NQVTBfRE9PUkJFTExfQ0xSLCAweGZmKTsKIAkJbXY2NHg2MF93cml0ZSgmYmgsIE1WNjQzNjBfQ1BVMF9ET09SQkVMTF9NQVNLLCAweGZmKTsKIAkJcmVxdWVzdF9pcnEoNjAsIGhkcHVfc21wX2NwdTBfaW50X2hhbmRsZXIsCi0JCQkgICAgU0FfSU5URVJSVVBULCBoZHB1X3NtcDAsIDApOworCQkJICAgIElSUUZfRElTQUJMRUQsIGhkcHVfc21wMCwgMCk7CiAJfQogCiAJaWYgKGNwdV9uciA9PSAxKSB7CkBAIC04NTgsNyArODU3LDcgQEAKIAkJbXY2NHg2MF93cml0ZSgmYmgsIE1WNjQzNjBfQ1BVMV9ET09SQkVMTF9DTFIsIDB4MCk7CiAJCW12NjR4NjBfd3JpdGUoJmJoLCBNVjY0MzYwX0NQVTFfRE9PUkJFTExfTUFTSywgMHhmZik7CiAJCXJlcXVlc3RfaXJxKDI4LCBoZHB1X3NtcF9jcHUxX2ludF9oYW5kbGVyLAotCQkJICAgIFNBX0lOVEVSUlVQVCwgaGRwdV9zbXAxLCAwKTsKKwkJCSAgICBJUlFGX0RJU0FCTEVELCBoZHB1X3NtcDEsIDApOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2hlcm1lcy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2hlcm1lcy5oCmluZGV4IDE5OGZjNTkuLmRlOTFhZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZXJtZXMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaGVybWVzLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9fTUFDSF9IRVJNRVNfSAogI2RlZmluZSBfX01BQ0hfSEVSTUVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2lwODYwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaXA4NjAuaAppbmRleCA4YzM4MzZjLi4yZjFmODZjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaXA4NjAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaXA4NjAuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX19NQUNIX0lQODYwX0gKICNkZWZpbmUgX19NQUNIX0lQODYwX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2l2bXM4LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaXZtczguaAppbmRleCBkNGJlMzEwLi45MTA5ZTY4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaXZtczguaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaXZtczguaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfX0FTTV9JVk1TOF9IX18KICNkZWZpbmUgX19BU01fSVZNUzhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuYwppbmRleCBhZDIxMjgwLi43MjBmOGIzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMva2F0YW5hLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2thdGFuYS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBTdXBwb3J0cyB0aGUgQXJ0ZXN5biA3NTBpLCA3NTJpLCBhbmQgMzc1MC4gIFRoZSA3NTJpIGlzIHZpcnR1YWxseSBpZGVudGljYWwKICAqIHRvIHRoZSA3NTBpIGV4Y2VwdCB0aGF0IGl0IGhhcyBhbiBtdjY0NDYwIGJyaWRnZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2xhbnRlYy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2xhbnRlYy5oCmluZGV4IDhjODc2NDIuLjVlNWViNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9sYW50ZWMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbGFudGVjLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9fTUFDSF9MQU5URUNfSAogI2RlZmluZSBfX01BQ0hfTEFOVEVDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2xpdGU1MjAwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYwppbmRleCBmZWNiZTlhLi5iOWU5ZGI2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYwpAQCAtMjEsNyArMjEsNiBAQAogICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbG9wZWMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCmluZGV4IGM2NDQ1YTcuLjE4ZGM2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2x3bW9uLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbHdtb24uaAppbmRleCA5OTViZjUxLi5lNjNmM2IwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbHdtb24uaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbHdtb24uaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX19NQUNIX0xXTU9OX0gKICNkZWZpbmUgX19NQUNIX0xXTU9OX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCmluZGV4IGQ5MTlkYWIuLmYxOWI2MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHMuaAppbmRleCBhODBiN2QxMS4uZDNiYmJiMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkcy5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHMuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfX0FTTV9NUEM4ODVBRFNfSF9fCiAjZGVmaW5lIF9fQVNNX01QQzg4NUFEU19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jCmluZGV4IDRiODg2NzkuLmMxZmM0YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzX3NldHVwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL212bWU1MTAwLmMKaW5kZXggYzcxN2NkOTIuLmJiOGQ0YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCkBAIC05LDcgKzksNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDRfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wYWw0X3NldHVwLmMKaW5kZXggM2MzZDg4MS4uM2RhNDdkOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDRfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXR1cC5jCkBAIC05LDcgKzksNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGN1X2UuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wY3VfZS5oCmluZGV4IDkxYTgyMGEuLmEyYzAzYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wY3VfZS5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wY3VfZS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfX01BQ0hfUENVX0VfSAogI2RlZmluZSBfX01BQ0hfUENVX0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG93ZXJwbWMyNTAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wb3dlcnBtYzI1MC5jCmluZGV4IGMzYTg2YmUuLjRkNDY2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wb3dlcnBtYzI1MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wb3dlcnBtYzI1MC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5jCmluZGV4IGRlMjc2MWUuLjk3NzgxMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmgKaW5kZXggNmIyNmRkMy4uMmIyODdmNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BxMmFkcy5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19NQUNIX0FEUzgyNjBfREVGUwogI2RlZmluZSBfX01BQ0hfQURTODI2MF9ERUZTCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3BjaS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfcGNpLmMKaW5kZXggZTUwYjk5OS4uYzYyN2JhNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfcGNpLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfcGNpLmMKQEAgLTYsNyArNiw2IEBACiAgKiBUaGUgbW90aGVyYm9hcmQgcm91dGVzL21hcHMgd2lsbCBkaXNhcHBlYXIgc2hvcnRseS4gLS0gQ29ydAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKaW5kZXggZTg2ZjYxNS4uNjQzNmJlZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBib290dXAgc2V0dXAgc3R1ZmYuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM3NTAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCmluZGV4IGNkZDljZmIuLmZjYWI1MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCkBAIC05LDcgKzksNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BycG1jODAwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwppbmRleCBlNDU5YTE5Li5mNGFkZTVjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwpAQCAtNyw3ICs3LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKaW5kZXggYmMyNmI2ZC4uM2JiNTMwYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqIFNDU0kgLyBWR0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzMTEsNyArMTMxMCw3IEBACiAKIAkvKiBIb29rIHVwIGk4MjU5IGludGVycnVwdCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gR1BQMjggKi8KIAlyZXF1ZXN0X2lycShtdjY0MzYwX2lycV9iYXNlICsgTVY2NHg2MF9JUlFfR1BQMjgsIHBwYzdkX2k4MjU5X2ludHIsCi0JCSAgICBTQV9JTlRFUlJVUFQsICJJODI1OSAoR1BQMjgpIGludGVycnVwdCIsICh2b2lkICopMCk7CisJCSAgICBJUlFGX0RJU0FCTEVELCAiSTgyNTkgKEdQUDI4KSBpbnRlcnJ1cHQiLCAodm9pZCAqKTApOwogCiAJLyogQ29uZmlndXJlIE1QUDE2IGFzIHdhdGNoZG9nIE5NSSwgTVBQMTcgYXMgd2F0Y2hkb2cgV0RFICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JweGNsYXNzaWMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ycHhjbGFzc2ljLmgKaW5kZXggNmRhYTEwOS4uNTdhMmE1NSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JweGNsYXNzaWMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcnB4Y2xhc3NpYy5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX01BQ0hfUlBYX0RFRlMKICNkZWZpbmUgX19NQUNIX1JQWF9ERUZTCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qIEEgQm9hcmQgSW5mb3JtYXRpb24gc3RydWN0dXJlIHRoYXQgaXMgZ2l2ZW4gdG8gYSBwcm9ncmFtIHdoZW4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9ycHhsaXRlLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcnB4bGl0ZS5oCmluZGV4IGRlZWU1YmQuLjcxOTc4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9ycHhsaXRlLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JweGxpdGUuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19NQUNIX1JQWF9ERUZTCiAjZGVmaW5lIF9fTUFDSF9SUFhfREVGUwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKiBBIEJvYXJkIEluZm9ybWF0aW9uIHN0cnVjdHVyZSB0aGF0IGlzIGdpdmVuIHRvIGEgcHJvZ3JhbSB3aGVuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMKaW5kZXggNmRjNDU5ZGUuLmE3NjAwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMKQEAgLTYwLDcgKzYwLDYgQEAKICAqIGZvdW5kLCB3ZSBjYW4gaG9wZWZ1bGx5IHN0b3AgaGFyZGNvZGluZyAzMk1CIG9mIFJBTS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NiYzgyeHguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYmM4Mnh4LmMKaW5kZXggODY2ODA3Yi4uNjBiNzY5YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NiYzgyeHguYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2JjODJ4eC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KQEAgLTE0Niw3ICsxNDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzYmM4Mnh4X2k4MjU5X2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IHNiYzgyeHhfaTgyNTlfZGVtdXgsCi0JLmZsYWdzID0gU0FfSU5URVJSVVBULAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gImk4MjU5IGRlbXV4IiwKIH07CkBAIC0xNzIsNyArMTcxLDcgQEAKIAkKIAkvKiBTZXQgdXAgdGhlIGludGVycnVwdCBoYW5kbGVycyBmb3IgdGhlIGk4MjU5IElSUXMgKi8KIAlmb3IgKGkgPSBOUl9TSVVfSU5UUzsgaSA8IE5SX1NJVV9JTlRTICsgODsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZzYmM4Mnh4X2k4MjU5X2ljOworICAgICAgICAgICAgICAgIGlycV9kZXNjW2ldLmNoaXAgPSAmc2JjODJ4eF9pODI1OV9pYzsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zcHJ1Y2UuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zcHJ1Y2UuYwppbmRleCAzNzgzZGVjLi4zYzc4NDI3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc3BydWNlLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NwcnVjZS5jCkBAIC05LDcgKzksNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3RxbTgyNjAuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy90cW04MjYwLmgKaW5kZXggYzdhNzhhNi4uN2Y4YzlhNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3RxbTgyNjAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvdHFtODI2MC5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfX1RRTTgyNjBfUExBVEZPUk0KICNkZWZpbmUgX19UUU04MjYwX1BMQVRGT1JNCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy90cW04eHguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy90cW04eHguaAppbmRleCA0M2FjMDY0Li42NjIxMzFkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvdHFtOHh4LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3RxbTh4eC5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX01BQ0hfVFFNOHh4X0gKICNkZWZpbmUgX19NQUNIX1RRTTh4eF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQppbmRleCA0OTA3NDljLi4yNDk3YmJjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCkBAIC0xMDQsMyArMTA0LDUgQEAKIGlmZXEgKCQoQ09ORklHX1BQQ19NUEM1Mnh4KSx5KQogb2JqLSQoQ09ORklHX1BDSSkJCSs9IG1wYzUyeHhfcGNpLm8KIGVuZGlmCisKK29iai0kKENPTkZJR19QUENfSTgyNTkpCQkrPSBpODI1OS5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvYnRleHQuYyBiL2FyY2gvcHBjL3N5c2xpYi9idGV4dC5jCmluZGV4IDEyZmE4M2UuLmQxMTY2NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9idGV4dC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9idGV4dC5jCkBAIC0zLDExICszLDEwIEBACiAgKgogICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vYm9vdHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9jcGM3MDBfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvY3BjNzAwX3BpYy5jCmluZGV4IDVhZGQwYTkuLjE3MmFhMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9jcGM3MDBfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwYzcwMF9waWMuYwpAQCAtMTQwLDEyICsxNDAsMTIgQEAKIAkJCQkJCSAgICAgICAgLyogSVJRIDAgaXMgaGlnaGVzdCAqLwogCiAJZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZjcGM3MDBfcGljOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNwYzcwMF9waWM7CiAJCWNwYzcwMF9waWNfaW5pdF9pcnEoaSk7CiAJfQogCiAJZm9yIChpID0gMjA7IGkgPCAzMjsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmY3BjNzAwX3BpYzsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjcGM3MDBfcGljOwogCQljcGM3MDBfcGljX2luaXRfaXJxKGkpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYwppbmRleCAyOWQ5NWQ0MS4uYzBmZWUwYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCS8qIEVuYWJsZSBjaGFpbmluZyB0byBPcGVuUElDLCBhbmQgbWFrZSBldmVyeXRoaW5nIGxldmVsCiAJICovCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQTV9JTlRTOyBpKyspIHsKLQkJaXJxX2Rlc2NbaStDUE1fSVJRX09GRlNFVF0uaGFuZGxlciA9ICZjcG0yX3BpYzsKKwkJaXJxX2Rlc2NbaStDUE1fSVJRX09GRlNFVF0uY2hpcCA9ICZjcG0yX3BpYzsKIAkJaXJxX2Rlc2NbaStDUE1fSVJRX09GRlNFVF0uc3RhdHVzIHw9IElSUV9MRVZFTDsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2RiZy5jIGIvYXJjaC9wcGMvc3lzbGliL2dlbjU1MF9kYmcuYwppbmRleCA5ZmNmZjc0Li45MjkzZjVjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2RiZy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9nZW41NTBfZGJnLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CQkvKiBGb3IgbGludXgvc2VyaWFsX2NvcmUuaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2dlbjU1MF9rZ2RiLmMgYi9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYwppbmRleCA4NzQwNzhhLi45ODdjYzA0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYwpAQCAtMTUsNyArMTUsNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2d0NjQyNjBfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYwppbmRleCBkYzNiZDllLi43ZmQ1NTBhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYwpAQCAtOTgsNyArOTgsNyBAQAogCiAJLyogdXNlIHRoZSBndDY0MjYwIGZvciBhbGwgKHBvc3NpYmxlKSBpbnRlcnJ1cHQgc291cmNlcyAqLwogCWZvciAoaSA9IGd0NjQyNjBfaXJxX2Jhc2U7IGkgPCAoZ3Q2NDI2MF9pcnFfYmFzZSArIDk2KTsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmd0NjQyNjBfcGljOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmd0NjQyNjBfcGljOwogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJndDY0MjYwX2luaXRfaXJxOiBleGl0IiwgMHgwKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAJLyogUmVnaXN0ZXIgQ1BVIGludGVyZmFjZSBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWlmICgocmMgPSByZXF1ZXN0X2lycShNVjY0eDYwX0lSUV9DUFVfRVJSLAotCQlndDY0MjYwX2NwdV9lcnJvcl9pbnRfaGFuZGxlciwgU0FfSU5URVJSVVBULCBDUFVfSU5UUl9TVFIsIDApKSkKKwkJZ3Q2NDI2MF9jcHVfZXJyb3JfaW50X2hhbmRsZXIsIElSUUZfRElTQUJMRUQsIENQVV9JTlRSX1NUUiwgMCkpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCByZWdpc3RlciBjcHUgZXJyb3IgaGFuZGxlcjogJWQiLCByYyk7CiAKIAltdjY0eDYwX3dyaXRlKCZiaCwgTVY2NHg2MF9DUFVfRVJSX01BU0ssIDApOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAKIAkvKiBSZWdpc3RlciBQQ0kgMCBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWlmICgocmMgPSByZXF1ZXN0X2lycShNVjY0MzYwX0lSUV9QQ0kwLCBndDY0MjYwX3BjaV9lcnJvcl9pbnRfaGFuZGxlciwKLQkJICAgIFNBX0lOVEVSUlVQVCwgUENJMF9JTlRSX1NUUiwgKHZvaWQgKikwKSkpCisJCSAgICBJUlFGX0RJU0FCTEVELCBQQ0kwX0lOVFJfU1RSLCAodm9pZCAqKTApKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgcmVnaXN0ZXIgcGNpIDAgZXJyb3IgaGFuZGxlcjogJWQiLAogCQkJcmMpOwogCkBAIC0zMTQsNyArMzE0LDcgQEAKIAogCS8qIFJlZ2lzdGVyIFBDSSAxIGVycm9yIGludGVycnVwdCBoYW5kbGVyICovCiAJaWYgKChyYyA9IHJlcXVlc3RfaXJxKE1WNjQzNjBfSVJRX1BDSTEsIGd0NjQyNjBfcGNpX2Vycm9yX2ludF9oYW5kbGVyLAotCQkgICAgU0FfSU5URVJSVVBULCBQQ0kxX0lOVFJfU1RSLCAodm9pZCAqKTEpKSkKKwkJICAgIElSUUZfRElTQUJMRUQsIFBDSTFfSU5UUl9TVFIsICh2b2lkICopMSkpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCByZWdpc3RlciBwY2kgMSBlcnJvciBoYW5kbGVyOiAlZCIsCiAJCQlyYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pODI1OS5jIGIvYXJjaC9wcGMvc3lzbGliL2k4MjU5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzNTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pODI1OS5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogaTgyNTkgaW50ZXJydXB0IGNvbnRyb2xsZXIgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisKK3N0YXRpYyB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnBjaV9pbnRhY2s7IC8qIFJPLCBnaXZlcyB1cyB0aGUgaXJxIHZlY3RvciAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZWRfODI1OVsyXSA9IHsgMHhmZiwgMHhmZiB9OworI2RlZmluZSBjYWNoZWRfQTEgKGNhY2hlZF84MjU5WzBdKQorI2RlZmluZSBjYWNoZWRfMjEgKGNhY2hlZF84MjU5WzFdKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGk4MjU5X2xvY2spOworCitzdGF0aWMgaW50IGk4MjU5X3BpY19pcnFfb2Zmc2V0OworCisvKgorICogQWNrbm93bGVkZ2UgdGhlIElSUSB1c2luZyBlaXRoZXIgdGhlIFBDSSBob3N0IGJyaWRnZSdzIGludGVycnVwdAorICogYWNrbm93bGVkZ2UgZmVhdHVyZSBvciBwb2xsLiAgSG93IGk4MjU5X2luaXQoKSBpcyBjYWxsZWQgZGV0ZXJtaW5lcworICogd2hpY2ggaXMgY2FsbGVkLiAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgcG9sbGluZyBpcyBicm9rZW4gb24gc29tZQorICogSUJNIGFuZCBNb3Rvcm9sYSBQUmVQIGJveGVzIHNvIHdlIG11c3QgdXNlIHRoZSBpbnQtYWNrIGZlYXR1cmUgb24gdGhlbS4KKyAqLworaW50IGk4MjU5X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaXJxOworCisJc3Bpbl9sb2NrKCZpODI1OV9sb2NrKTsKKworCS8qIEVpdGhlciBpbnQtYWNrIG9yIHBvbGwgZm9yIHRoZSBJUlEgKi8KKwlpZiAocGNpX2ludGFjaykKKwkJaXJxID0gcmVhZGIocGNpX2ludGFjayk7CisJZWxzZSB7CisJCS8qIFBlcmZvcm0gYW4gaW50ZXJydXB0IGFja25vd2xlZGdlIGN5Y2xlIG9uIGNvbnRyb2xsZXIgMS4gKi8KKwkJb3V0YigweDBDLCAweDIwKTsJCS8qIHByZXBhcmUgZm9yIHBvbGwgKi8KKwkJaXJxID0gaW5iKDB4MjApICYgNzsKKwkJaWYgKGlycSA9PSAyICkgeworCQkJLyoKKwkJCSAqIEludGVycnVwdCBpcyBjYXNjYWRlZCBzbyBwZXJmb3JtIGludGVycnVwdAorCQkJICogYWNrbm93bGVkZ2Ugb24gY29udHJvbGxlciAyLgorCQkJICovCisJCQlvdXRiKDB4MEMsIDB4QTApOwkvKiBwcmVwYXJlIGZvciBwb2xsICovCisJCQlpcnEgPSAoaW5iKDB4QTApICYgNykgKyA4OworCQl9CisJfQorCisJaWYgKGlycSA9PSA3KSB7CisJCS8qCisJCSAqIFRoaXMgbWF5IGJlIGEgc3B1cmlvdXMgaW50ZXJydXB0LgorCQkgKgorCQkgKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIChJU1IpLiBJZiB0aGUgbW9zdAorCQkgKiBzaWduaWZpY2FudCBiaXQgaXMgbm90IHNldCB0aGVuIHRoZXJlIGlzIG5vIHZhbGlkCisJCSAqIGludGVycnVwdC4KKwkJICovCisJCWlmICghcGNpX2ludGFjaykKKwkJCW91dGIoMHgwQiwgMHgyMCk7CS8qIElTUiByZWdpc3RlciAqLworCQlpZih+aW5iKDB4MjApICYgMHg4MCkKKwkJCWlycSA9IC0xOworCX0KKworCXNwaW5fdW5sb2NrKCZpODI1OV9sb2NrKTsKKwlyZXR1cm4gaXJxICsgaTgyNTlfcGljX2lycV9vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGk4MjU5X21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlpcnFfbnIgLT0gaTgyNTlfcGljX2lycV9vZmZzZXQ7CisJaWYgKGlycV9uciA+IDcpIHsKKwkJY2FjaGVkX0ExIHw9IDEgPDwgKGlycV9uci04KTsKKwkJaW5iKDB4QTEpOyAJLyogRFVNTVkgKi8KKwkJb3V0YihjYWNoZWRfQTEsIDB4QTEpOworCQlvdXRiKDB4MjAsIDB4QTApOwkvKiBOb24tc3BlY2lmaWMgRU9JICovCisJCW91dGIoMHgyMCwgMHgyMCk7CS8qIE5vbi1zcGVjaWZpYyBFT0kgdG8gY2FzY2FkZSAqLworCX0gZWxzZSB7CisJCWNhY2hlZF8yMSB8PSAxIDw8IGlycV9ucjsKKwkJaW5iKDB4MjEpOyAJLyogRFVNTVkgKi8KKwkJb3V0YihjYWNoZWRfMjEsIDB4MjEpOworCQlvdXRiKDB4MjAsIDB4MjApOwkvKiBOb24tc3BlY2lmaWMgRU9JICovCisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTlfc2V0X2lycV9tYXNrKGludCBpcnFfbnIpCit7CisJb3V0YihjYWNoZWRfQTEsMHhBMSk7CisJb3V0YihjYWNoZWRfMjEsMHgyMSk7Cit9CisKK3N0YXRpYyB2b2lkIGk4MjU5X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJaXJxX25yIC09IGk4MjU5X3BpY19pcnFfb2Zmc2V0OworCWlmIChpcnFfbnIgPCA4KQorCQljYWNoZWRfMjEgfD0gMSA8PCBpcnFfbnI7CisJZWxzZQorCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOworCWk4MjU5X3NldF9pcnFfbWFzayhpcnFfbnIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTlfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCWlycV9uciAtPSBpODI1OV9waWNfaXJxX29mZnNldDsKKwlpZiAoaXJxX25yIDwgOCkKKwkJY2FjaGVkXzIxICY9IH4oMSA8PCBpcnFfbnIpOworCWVsc2UKKwkJY2FjaGVkX0ExICY9IH4oMSA8PCAoaXJxX25yLTgpKTsKKwlpODI1OV9zZXRfaXJxX21hc2soaXJxX25yKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaTgyNTlfcGljID0geworCS50eXBlbmFtZQk9ICIgaTgyNTkgICAgIiwKKwkubWFzawkJPSBpODI1OV9tYXNrX2lycSwKKwkudW5tYXNrCQk9IGk4MjU5X3VubWFza19pcnEsCisJLm1hc2tfYWNrCT0gaTgyNTlfbWFza19hbmRfYWNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGljMV9pb3JlcyA9IHsKKwkubmFtZSA9ICI4MjU5IChtYXN0ZXIpIiwKKwkuc3RhcnQgPSAweDIwLAorCS5lbmQgPSAweDIxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGljMl9pb3JlcyA9IHsKKwkubmFtZSA9ICI4MjU5IChzbGF2ZSkiLAorCS5zdGFydCA9IDB4YTAsCisJLmVuZCA9IDB4YTEsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaWNfZWRnZWN0cmxfaW9yZXMgPSB7CisJLm5hbWUgPSAiODI1OSBlZGdlIGNvbnRyb2wiLAorCS5zdGFydCA9IDB4NGQwLAorCS5lbmQgPSAweDRkMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1ksCit9OworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpODI1OV9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPSBub19hY3Rpb24sCisJLmZsYWdzID0gU0FfSU5URVJSVVBULAorCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKKwkubmFtZSA9ICI4MmM1OSBzZWNvbmRhcnkgY2FzY2FkZSIsCit9OworCisvKgorICogaTgyNTlfaW5pdCgpCisgKiBpbnRhY2tfYWRkciAtIFBDSSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgKHJlYWwpIGFkZHJlc3Mgd2hpY2ggd2lsbCByZXR1cm4KKyAqICAgICAgICAgICAgICAgdGhlIGFjdGl2ZSBpcnEgZnJvbSB0aGUgODI1OQorICovCit2b2lkIF9faW5pdCBpODI1OV9pbml0KHVuc2lnbmVkIGxvbmcgaW50YWNrX2FkZHIsIGludCBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJaTgyNTlfcGljX2lycV9vZmZzZXQgPSBvZmZzZXQ7CisKKwkvKiBpbml0IG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCW91dGIoMHgxMSwgMHgyMCk7IC8qIFN0YXJ0IGluaXQgc2VxdWVuY2UgKi8KKwlvdXRiKDB4MDAsIDB4MjEpOyAvKiBWZWN0b3IgYmFzZSAqLworCW91dGIoMHgwNCwgMHgyMSk7IC8qIGVkZ2UgdGlnZ2VyZWQsIENhc2NhZGUgKHNsYXZlKSBvbiBJUlEyICovCisJb3V0YigweDAxLCAweDIxKTsgLyogU2VsZWN0IDgwODYgbW9kZSAqLworCisJLyogaW5pdCBzbGF2ZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCW91dGIoMHgxMSwgMHhBMCk7IC8qIFN0YXJ0IGluaXQgc2VxdWVuY2UgKi8KKwlvdXRiKDB4MDgsIDB4QTEpOyAvKiBWZWN0b3IgYmFzZSAqLworCW91dGIoMHgwMiwgMHhBMSk7IC8qIGVkZ2UgdHJpZ2dlcmVkLCBDYXNjYWRlIChzbGF2ZSkgb24gSVJRMiAqLworCW91dGIoMHgwMSwgMHhBMSk7IC8qIFNlbGVjdCA4MDg2IG1vZGUgKi8KKworCS8qIGFsd2F5cyByZWFkIElTUiAqLworCW91dGIoMHgwQiwgMHgyMCk7CisJb3V0YigweDBCLCAweEEwKTsKKworCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KKwlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CisJb3V0YihjYWNoZWRfMjEsIDB4MjEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9JU0FfSU5URVJSVVBUUzsgKytpKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihvZmZzZXQgKyBpLCAmaTgyNTlfcGljLAorCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9kZXNjW29mZnNldCArIGldLnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJfQorCisJLyogcmVzZXJ2ZSBvdXIgcmVzb3VyY2VzICovCisJc2V0dXBfaXJxKG9mZnNldCArIDIsICZpODI1OV9pcnFhY3Rpb24pOworCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnBpYzFfaW9yZXMpOworCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnBpYzJfaW9yZXMpOworCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnBpY19lZGdlY3RybF9pb3Jlcyk7CisKKwlpZiAoaW50YWNrX2FkZHIgIT0gMCkKKwkJcGNpX2ludGFjayA9IGlvcmVtYXAoaW50YWNrX2FkZHIsIDEpOworCit9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3BfY29tbW9uLmMgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3BfY29tbW9uLmMKaW5kZXggZmJhYWU1Zi4uYTM5MjdlYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGdwX2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uYwpAQCAtMTMsNyArMTMsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3BfY29tbW9uLmggYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3BfY29tbW9uLmgKaW5kZXggZjQ4NTI5Zi4uOTRkNzgzNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGdwX2NvbW1vbi5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uaApAQCAtMTYsNyArMTYsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPHN5c2xpYi9pYm00NHhfY29tbW9uLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uYyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uYwppbmRleCBmNmNjMTY4Li40Yjc3ZTZjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KQEAgLTE1MCw3ICsxNDksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBJbnN0YWxsIGVycm9yIGhhbmRsZXIgKi8KLQlpZiAocmVxdWVzdF9pcnEoODcsIGwyY19lcnJvcl9oYW5kbGVyLCBTQV9JTlRFUlJVUFQsICJMMkMiLCAwKSA8IDApeworCWlmIChyZXF1ZXN0X2lycSg4NywgbDJjX2Vycm9yX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJMMkMiLCAwKSA8IDApewogCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBpbnN0YWxsIEwyQyBlcnJvciBoYW5kbGVyLCBjYWNoZSBpcyBub3QgZW5hYmxlZFxuIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmggYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmgKaW5kZXggYTAzZWM2MDIuLjhkNmYyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uaAorKysgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmgKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPHN5c2xpYi9pYm00NHhfY29tbW9uLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwc3BfY29tbW9uLmMgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwc3BfY29tbW9uLmMKaW5kZXggMjkzZTQxMy4uNTcxZjhiYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MHNwX2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBzcF9jb21tb24uYwpAQCAtMTMsNyArMTMsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDR4X2NvbW1vbi5jIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0eF9jb21tb24uYwppbmRleCAxNGE5ODFhLi4wMWY5OWI0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDR4X2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NHhfY29tbW9uLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfcGNpX2VycmF0dW05LmMgYi9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfcGNpX2VycmF0dW05LmMKaW5kZXggOTllNGJjMC4uOTc0NTgxZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL204MjYwX3BjaV9lcnJhdHVtOS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9wY2lfZXJyYXR1bTkuYwpAQCAtMTUsNyArMTUsNiBAQAogICogb3IgaW1wbGllZC4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9zZXR1cC5jCmluZGV4IGI3YTZjYjIuLjE1ZjBkNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9zZXR1cC5jCkBAIC02LDcgKzYsNiBAQAogICogIEZ1cnRoZXIgbW9kaWZpZWQgZm9yIGdlbmVyaWMgOHh4IGFuZCA4MjYwIGJ5IERhbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL204Mnh4X3BjaS5jIGIvYXJjaC9wcGMvc3lzbGliL204Mnh4X3BjaS5jCmluZGV4IDE5NDFhOGMuLmQzZmEyNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tODJ4eF9wY2kuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbTgyeHhfcGNpLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwcTJwY2lfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gcHEycGNpX2lycV9kZW11eCwKLQkuZmxhZ3MgCSA9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgCSA9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sJID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkgPSAiUFEyIFBDSSBjYXNjYWRlIiwKIH07CkBAIC0xNTksNyArMTU5LDcgQEAKIAlpbW1hcC0+aW1fbWVtY3RsLm1lbWNfb3I4ID0gMHhmZmZmODAxMDsKICNlbmRpZgogCWZvciAoaXJxID0gTlJfQ1BNX0lOVFM7IGlycSA8IE5SX0NQTV9JTlRTICsgNDsgaXJxKyspCi0JCWlycV9kZXNjW2lycV0uaGFuZGxlciA9ICZwcTJwY2lfaWM7CisJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZwcTJwY2lfaWM7CiAKIAkvKiBtYWtlIFBDSSBJUlEgbGV2ZWwgc2Vuc2l0aXZlICovCiAJaW1tYXAtPmltX2ludGN0bC5pY19zaWV4ciAmPQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL204eHhfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tOHh4X3NldHVwLmMKaW5kZXggZGFlOWFmNy4uNTQzMDNhNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL204eHhfc2V0dXAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbTh4eF9zZXR1cC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBib290dXAgc2V0dXAgc3R1ZmYuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNDcsMTMgKzM0NiwxMyBAQAogCWludCBpOwogCiAJZm9yIChpID0gU0lVX0lSUV9PRkZTRVQgOyBpIDwgU0lVX0lSUV9PRkZTRVQgKyBOUl9TSVVfSU5UUyA7IGkrKykKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZwcGM4eHhfcGljOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnBwYzh4eF9waWM7CiAKIAljcG1faW50ZXJydXB0X2luaXQoKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKIAlmb3IgKGkgPSBJODI1OV9JUlFfT0ZGU0VUIDsgaSA8IEk4MjU5X0lSUV9PRkZTRVQgKyBOUl84MjU5X0lOVFMgOyBpKyspCi0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmaTgyNTlfcGljOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJmk4MjU5X3BpYzsKIAogCWk4MjU5X3BpY19pcnFfb2Zmc2V0ID0gSTgyNTlfSVJRX09GRlNFVDsKIAlpODI1OV9pbml0KDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGNpLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwppbmRleCA1YTVhN2E5Li4yMGEwZWFjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwpAQCAtMTEsNyArMTEsNiBAQAogICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9waWMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BpYy5jCmluZGV4IGM0NDA2ZjkuLjY0MjViNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BpYy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BpYy5jCkBAIC0yMDQsOSArMjA0LDkgQEAKIAlvdXRfYmUzMigmaW50ci0+bWFpbl9wcmkxLCAwKTsKIAlvdXRfYmUzMigmaW50ci0+bWFpbl9wcmkyLCAwKTsKIAotCS8qIEluaXRpYWxpemUgaXJxX2Rlc2NbaV0uaGFuZGxlcidzIHdpdGggbXBjNTJ4eF9pYy4gKi8KKwkvKiBJbml0aWFsaXplIGlycV9kZXNjW2ldLmNoaXAncyB3aXRoIG1wYzUyeHhfaWMuICovCiAJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm1wYzUyeHhfaWM7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmbXBjNTJ4eF9pYzsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0xFVkVMOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMKaW5kZXggZWU2Mzc5Yi4uODBjNjA5MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfc2V0dXAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9zZXR1cC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL212NjQzNjBfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NDM2MF9waWMuYwppbmRleCA1YTE5Njk3Li4zZjZkMTYyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXY2NDM2MF9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NDM2MF9waWMuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJLyogQWxsIGludGVycnVwdHMgYXJlIGxldmVsIGludGVycnVwdHMgKi8KIAlmb3IgKGkgPSBtdjY0MzYwX2lycV9iYXNlOyBpIDwgKG12NjQzNjBfaXJxX2Jhc2UgKyA5Nik7IGkrKykgewogCQlpcnFfZGVzY1tpXS5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm12NjQzNjBfcGljOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJm12NjQzNjBfcGljOwogCX0KIAogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCkBAIC0zODAsNyArMzgwLDcgQEAKIAkvKiBDbGVhciBvbGQgZXJyb3JzIGFuZCByZWdpc3RlciBDUFUgaW50ZXJmYWNlIGVycm9yIGludHIgaGFuZGxlciAqLwogCW12NjR4NjBfd3JpdGUoJmJoLCBNVjY0eDYwX0NQVV9FUlJfQ0FVU0UsIDApOwogCWlmICgocmMgPSByZXF1ZXN0X2lycShNVjY0eDYwX0lSUV9DUFVfRVJSICsgbXY2NDM2MF9pcnFfYmFzZSwKLQkJbXY2NDM2MF9jcHVfZXJyb3JfaW50X2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwgQ1BVX0lOVFJfU1RSLCAwKSkpCisJCW12NjQzNjBfY3B1X2Vycm9yX2ludF9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELCBDUFVfSU5UUl9TVFIsIDApKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgcmVnaXN0ZXIgY3B1IGVycm9yIGhhbmRsZXI6ICVkIiwgcmMpOwogCiAJbXY2NHg2MF93cml0ZSgmYmgsIE1WNjR4NjBfQ1BVX0VSUl9NQVNLLCAwKTsKQEAgLTM4OSwxNCArMzg5LDE0IEBACiAJLyogQ2xlYXIgb2xkIGVycm9ycyBhbmQgcmVnaXN0ZXIgaW50ZXJuYWwgU1JBTSBlcnJvciBpbnRyIGhhbmRsZXIgKi8KIAltdjY0eDYwX3dyaXRlKCZiaCwgTVY2NDM2MF9TUkFNX0VSUl9DQVVTRSwgMCk7CiAJaWYgKChyYyA9IHJlcXVlc3RfaXJxKE1WNjQzNjBfSVJRX1NSQU1fUEFSX0VSUiArIG12NjQzNjBfaXJxX2Jhc2UsCi0JCW12NjQzNjBfc3JhbV9lcnJvcl9pbnRfaGFuZGxlcixTQV9JTlRFUlJVUFQsU1JBTV9JTlRSX1NUUiwgMCkpKQorCQltdjY0MzYwX3NyYW1fZXJyb3JfaW50X2hhbmRsZXIsSVJRRl9ESVNBQkxFRCxTUkFNX0lOVFJfU1RSLCAwKSkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IHJlZ2lzdGVyIFNSQU0gZXJyb3IgaGFuZGxlcjogJWQiLHJjKTsKIAogCS8qIENsZWFyIG9sZCBlcnJvcnMgYW5kIHJlZ2lzdGVyIFBDSSAwIGVycm9yIGludHIgaGFuZGxlciAqLwogCW12NjR4NjBfd3JpdGUoJmJoLCBNVjY0eDYwX1BDSTBfRVJSX0NBVVNFLCAwKTsKIAlpZiAoKHJjID0gcmVxdWVzdF9pcnEoTVY2NDM2MF9JUlFfUENJMCArIG12NjQzNjBfaXJxX2Jhc2UsCiAJCQltdjY0MzYwX3BjaV9lcnJvcl9pbnRfaGFuZGxlciwKLQkJCVNBX0lOVEVSUlVQVCwgUENJMF9JTlRSX1NUUiwgKHZvaWQgKikwKSkpCisJCQlJUlFGX0RJU0FCTEVELCBQQ0kwX0lOVFJfU1RSLCAodm9pZCAqKTApKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgcmVnaXN0ZXIgcGNpIDAgZXJyb3IgaGFuZGxlcjogJWQiLAogCQkJcmMpOwogCkBAIC00MTEsNyArNDExLDcgQEAKIAltdjY0eDYwX3dyaXRlKCZiaCwgTVY2NHg2MF9QQ0kxX0VSUl9DQVVTRSwgMCk7CiAJaWYgKChyYyA9IHJlcXVlc3RfaXJxKE1WNjQzNjBfSVJRX1BDSTEgKyBtdjY0MzYwX2lycV9iYXNlLAogCQkJbXY2NDM2MF9wY2lfZXJyb3JfaW50X2hhbmRsZXIsCi0JCQlTQV9JTlRFUlJVUFQsIFBDSTFfSU5UUl9TVFIsICh2b2lkICopMSkpKQorCQkJSVJRRl9ESVNBQkxFRCwgUENJMV9JTlRSX1NUUiwgKHZvaWQgKikxKSkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IHJlZ2lzdGVyIHBjaSAxIGVycm9yIGhhbmRsZXI6ICVkIiwKIAkJCXJjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL212NjR4NjBfZGJnLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF9kYmcuYwppbmRleCA5Y2YxODc2Li5lMTg3NjI2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF9kYmcuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF9kYmcuYwpAQCAtMTgsNyArMTgsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9tdjY0eDYwLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb2NwLmMgYi9hcmNoL3BwYy9zeXNsaWIvb2NwLmMKaW5kZXggYTRlY2MyZS4uNTBjNTU2MiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29jcC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9vY3AuYwpAQCAtMzYsNyArMzYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMKaW5kZXggNzA0NTZjOC4uYWEwYjk1NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMKQEAgLTYsNyArNiw2IEBACiAgKiAgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzczLDcgKzM3Miw3IEBACiAJCQkJT1BFTlBJQ19WRUNfSVBJK2krb2Zmc2V0KTsKIAkJLyogSVBJcyBhcmUgcGVyLUNQVSAqLwogCQlpcnFfZGVzY1tPUEVOUElDX1ZFQ19JUEkraStvZmZzZXRdLnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKLQkJaXJxX2Rlc2NbT1BFTlBJQ19WRUNfSVBJK2krb2Zmc2V0XS5oYW5kbGVyID0gJm9wZW5fcGljX2lwaTsKKwkJaXJxX2Rlc2NbT1BFTlBJQ19WRUNfSVBJK2krb2Zmc2V0XS5jaGlwID0gJm9wZW5fcGljX2lwaTsKIAl9CiAjZW5kaWYKIApAQCAtNDA4LDcgKzQwNyw3IEBACiAKIAkvKiBJbml0IGRlc2NyaXB0b3JzICovCiAJZm9yIChpID0gb2Zmc2V0OyBpIDwgTnVtU291cmNlcyArIG9mZnNldDsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm9wZW5fcGljOworCQlpcnFfZGVzY1tpXS5jaGlwID0gJm9wZW5fcGljOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3B1cmlvdXMgaW50ZXJydXB0ICovCiAJaWYgKHBwY19tZC5wcm9ncmVzcykgcHBjX21kLnByb2dyZXNzKCJvcGVucGljOiBzcHVyaW91cyIsMHgzYmQpOwpAQCAtNTc2LDE4ICs1NzUsMjEgQEAKIAlpZiAoT3BlblBJQyA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQkvKiBJUElzIGFyZSBtYXJrZWQgU0FfSU5URVJSVVBUIGFzIHRoZXkgbXVzdCBydW4gd2l0aCBpcnFzIGRpc2FibGVkICovCisJLyoKKyAJICogSVBJcyBhcmUgbWFya2VkIElSUUZfRElTQUJMRUQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMKKwkgKiBkaXNhYmxlZAorCSAqLwogCXJlcXVlc3RfaXJxKE9QRU5QSUNfVkVDX0lQSStvcGVuX3BpY19pcnFfb2Zmc2V0LAotCQkgICAgb3BlbnBpY19pcGlfYWN0aW9uLCBTQV9JTlRFUlJVUFQsCisJCSAgICBvcGVucGljX2lwaV9hY3Rpb24sIElSUUZfRElTQUJMRUQsCiAJCSAgICAiSVBJMCAoY2FsbCBmdW5jdGlvbikiLCBOVUxMKTsKIAlyZXF1ZXN0X2lycShPUEVOUElDX1ZFQ19JUEkrb3Blbl9waWNfaXJxX29mZnNldCsxLAotCQkgICAgb3BlbnBpY19pcGlfYWN0aW9uLCBTQV9JTlRFUlJVUFQsCisJCSAgICBvcGVucGljX2lwaV9hY3Rpb24sIElSUUZfRElTQUJMRUQsCiAJCSAgICAiSVBJMSAocmVzY2hlZHVsZSkiLCBOVUxMKTsKIAlyZXF1ZXN0X2lycShPUEVOUElDX1ZFQ19JUEkrb3Blbl9waWNfaXJxX29mZnNldCsyLAotCQkgICAgb3BlbnBpY19pcGlfYWN0aW9uLCBTQV9JTlRFUlJVUFQsCisJCSAgICBvcGVucGljX2lwaV9hY3Rpb24sIElSUUZfRElTQUJMRUQsCiAJCSAgICAiSVBJMiAoaW52YWxpZGF0ZSB0bGIpIiwgTlVMTCk7CiAJcmVxdWVzdF9pcnEoT1BFTlBJQ19WRUNfSVBJK29wZW5fcGljX2lycV9vZmZzZXQrMywKLQkJICAgIG9wZW5waWNfaXBpX2FjdGlvbiwgU0FfSU5URVJSVVBULAorCQkgICAgb3BlbnBpY19pcGlfYWN0aW9uLCBJUlFGX0RJU0FCTEVELAogCQkgICAgIklQSTMgKHhtb24gYnJlYWspIiwgTlVMTCk7CiAKIAlmb3IgKCBpID0gMDsgaSA8IE9QRU5QSUNfTlVNX0lQSSA7IGkrKyApCkBAIC02MTUsOCArNjE3LDggQEAKICAJLyogbGV0IHRoZSBvcGVucGljIGtub3cgd2Ugd2FudCBpbnRycy4gZGVmYXVsdCBhZmZpbml0eQogIAkgKiBpcyAweGZmZmZmZmZmIHVudGlsIGNoYW5nZWQgdmlhIC9wcm9jCiAgCSAqIFRoYXQncyBob3cgaXQncyBkb25lIG9uIHg4Ni4gSWYgd2Ugd2FudCBpdCBkaWZmZXJlbnRseSwgdGhlbgotIAkgKiB3ZSBzaG91bGQgbWFrZSBzdXJlIHdlIGFsc28gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBpcnFfYWZmaW5pdHkKLSAJICogaW4gaXJxLmMuCisgCSAqIHdlIHNob3VsZCBtYWtlIHN1cmUgd2UgYWxzbyBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWVzIG9mCisJICogaXJxX2Rlc2NbXS5hZmZpbml0eSBpbiBpcnEuYy4KICAJICovCiAgCWZvciAoaSA9IDA7IGkgPCBOdW1Tb3VyY2VzOyBpKyspCiAJCW9wZW5waWNfbWFwaXJxKGksIG1zaywgQ1BVX01BU0tfQUxMKTsKQEAgLTY5Miw3ICs2OTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvcGVucGljX2Nhc2NhZGVfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gbm9fYWN0aW9uLAotCS5mbGFncyA9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAogCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYwppbmRleCBiY2JlNDBkLi5lMWZmOTcxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljMi5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgcmVnaXN0ZXIgYWNjZXNzZXMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjkwLDcgKzI4OSw3IEBACiAKIAkvKiBJbml0IGRlc2NyaXB0b3JzICovCiAJZm9yIChpID0gb2Zmc2V0OyBpIDwgTnVtU291cmNlcyArIG9mZnNldDsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm9wZW5fcGljMjsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZvcGVuX3BpYzI7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KIAlpZiAocHBjX21kLnByb2dyZXNzKSBwcGNfbWQucHJvZ3Jlc3MoIm9wZW5waWMyOiBzcHVyaW91cyIsMHgzYmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzQwM19waWMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0MDNfcGljLmMKaW5kZXggYzQ2MDQzYy4uMTU4NGM4YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzQwM19waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNDAzX3BpYy5jCkBAIC0xMjEsNSArMTIxLDUgQEAKIAlwcGNfbWQuZ2V0X2lycSA9IHBwYzQwM19waWNfZ2V0X2lycTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCi0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmcHBjNDAzX2FpYzsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZwcGM0MDNfYWljOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzQ0MHNwZV9wY2llLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNDQwc3BlX3BjaWUuYwppbmRleCAxNTA5ZmMxLi5kZDVkNGI5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjNDQwc3BlX3BjaWUuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNDQwc3BlX3BjaWUuYwpAQCAtOCw3ICs4LDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2RtYS5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9kbWEuYwppbmRleCBiNDBiOTZhLi4xZWVmNGZmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2RtYS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfZG1hLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3BpYy5jCmluZGV4IGZkOWFmMGYuLjc0NTY4NWRmNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3BpYy5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpAQCAtMjc2LDcgKzI3NSw3IEBACiAKIAkvKiBBdHRhY2ggbG93LWxldmVsIGhhbmRsZXJzICovCiAJZm9yIChpID0gMDsgaSA8IChOUl9VSUNTIDw8IDUpOyArK2kpIHsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZfX3VpY1tpID4+IDVdLmRlY2w7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmX191aWNbaSA+PiA1XS5kZWNsOwogCQlpZiAoaXNfbGV2ZWxfc2Vuc2l0aXZlKGkpKQogCQkJaXJxX2Rlc2NbaV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMKaW5kZXggZTgzYTgzZi4uZGViZTE0YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2V0dXAuYwpAQCAtMTMsNyArMTMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2dkbWEuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2dkbWEuYwppbmRleCAyODBlYTAxMC4uMmY4M2UxNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZ2RtYS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2dkbWEuYwpAQCAtMTksNyArMTksNiBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmMKaW5kZXggMjZhZmQ2My4uZWM0NjZkYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBBZGRlZCBQQ0kgc3VwcG9ydCAtLSBUb255IExpIDx0b255LmxpQGZyZWVzY2FsZS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuaCBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmgKaW5kZXggNDc4YjAxMS4uYjkxOGEyZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuaAorKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaWZuZGVmIF9fUFBDX1NZU0xJQl9QUEM4M1hYX1NFVFVQX0gKICNkZWZpbmUgX19QUENfU1lTTElCX1BQQzgzWFhfU0VUVVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtcGM4M3h4X2ZpbmRfZW5kX29mX21lbW9yeSh2b2lkKSBfX2luaXQ7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9jb21tb24uYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X2NvbW1vbi5jCmluZGV4IDAxNDVjOTYuLmU1YWM2OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X2NvbW1vbi5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X2NvbW1vbi5oIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmgKaW5kZXggMTgyNzQ0YS4uNGZjNDA1NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19QUENfU1lTTElCX1BQQzg1WFhfQ09NTU9OX0gKICNkZWZpbmUgX19QUENfU1lTTElCX1BQQzg1WFhfQ09NTU9OX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogLyogUHJvdmlkZSBhY2Nlc3MgdG8gY2NzcmJhciBmb3IgYW55IG1vZHVsZXMsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfcmlvLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9yaW8uYwppbmRleCAyOTdmM2I1Li5kOWI0NzFiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9yaW8uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9yaW8uYwpAQCAtMTAsNyArMTAsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9yaW8uaCBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3Jpby5oCmluZGV4IGMwODI3YTIuLjZkM2ZmMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3Jpby5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3Jpby5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fUFBDX1NZU0xJQl9QUEM4NVhYX1JJT19ICiAjZGVmaW5lIF9fUFBDX1NZU0xJQl9QUEM4NVhYX1JJT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKIGV4dGVybiB2b2lkIG1wYzg1eHhfcmlvX3NldHVwKGludCBsYXdfc3RhcnQsIGludCBsYXdfc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYwppbmRleCA3OWI3MDg5Li4yNDc1ZWM2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuaCBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmgKaW5kZXggZjU1YjgwMy4uNmZmNzk5OSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuaAorKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fUFBDX1NZU0xJQl9QUEM4NVhYX1NFVFVQX0gKICNkZWZpbmUgX19QUENfU1lTTElCX1BQQzg1WFhfU0VUVVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4eHhfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjOHh4X3BpYy5jCmluZGV4IDNlNmY1MWEuLmQ2YzI1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzh4eF9waWMuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjOHh4X3BpYy5oIGIvYXJjaC9wcGMvc3lzbGliL3BwYzh4eF9waWMuaAppbmRleCA3ODQ5MzVlLi5kN2Q5ZjY1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjOHh4X3BpYy5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4eHhfcGljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9QUENfS0VSTkVMX1BQQzh4eF9ICiAjZGVmaW5lIF9QUENfS0VSTkVMX1BQQzh4eF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3FzcGFuX3BjaS5jIGIvYXJjaC9wcGMvc3lzbGliL3FzcGFuX3BjaS5jCmluZGV4IDA5NzBiNWQuLjg1MDUzYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9xc3Bhbl9wY2kuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcXNwYW5fcGNpLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIHdlIGhhdmUgc3dpdGNoZWQgdGhlIGNoaXAgc2VsZWN0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3hpbGlueF9waWMuYyBiL2FyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMKaW5kZXggZTY3MmI2MDAuLjM5YTkzZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3hpbGlueF9waWMuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJcHBjX21kLmdldF9pcnEgPSB4aWxpbnhfcGljX2dldF9pcnE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgKytpKSB7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmeGlsaW54X2ludGM7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmeGlsaW54X2ludGM7CiAKIAkJaWYgKFhQQVJfSU5UQ18wX0tJTkRfT0ZfSU5UUiAmICgweDAwMDAwMDAxIDw8IGkpKQogCQkJaXJxX2Rlc2NbaV0uc3RhdHVzICY9IH5JUlFfTEVWRUw7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy94bW9uL3ByaXZpbnN0LmggYi9hcmNoL3BwYy94bW9uL3ByaXZpbnN0LmgKaW5kZXggOTM5NzhjMC4uYzQ5MmEzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3htb24vcHJpdmluc3QuaAorKysgYi9hcmNoL3BwYy94bW9uL3ByaXZpbnN0LmgKQEAgLTEsNyArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgR0VUUkVHKHJlZykJCVwKICAgICBzdGF0aWMgaW5saW5lIGludCBnZXRfICMjIHJlZyAodm9pZCkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMveG1vbi9zdGFydC5jIGIvYXJjaC9wcGMveG1vbi9zdGFydC5jCmluZGV4IGNmYzJkNmEuLmY3ZTkyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3htb24vc3RhcnQuYworKysgYi9hcmNoL3BwYy94bW9uL3N0YXJ0LmMKQEAgLTEsNyArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3htb24veG1vbi5jIGIvYXJjaC9wcGMveG1vbi94bW9uLmMKaW5kZXggMDZmYTQ0Yi4uMzdkMjM0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wcGMveG1vbi94bW9uLmMKQEAgLTMsNyArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCA4MjFhMTQxLi4yMjRmYmZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNyw2ICs3LDE0IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgTE9DS0RFUF9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSwogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwppbmRleCBmNTNiNmQ1Li4yMjgzOTMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwpAQCAtMSw1ICsxLDkgQEAKIG1lbnUgIktlcm5lbCBoYWNraW5nIgogCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWJvb2wKKwlkZWZhdWx0IHkKKwogc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL01ha2VmaWxlIGIvYXJjaC9zMzkwL01ha2VmaWxlCmluZGV4IGIzNzkxZmIuLjc0ZWY1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvTWFrZWZpbGUKQEAgLTM0LDYgKzM0LDExIEBACiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjkwMCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ejkwMCkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOTkwKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OTkwKQogCisjCisjIFByZXZlbnQgdGFpbC1jYWxsIG9wdGltaXphdGlvbnMsIHRvIGdldCBjbGVhcmVyIGJhY2t0cmFjZXM6CisjCitjZmxhZ3MtJChDT05GSUdfRlJBTUVfUE9JTlRFUikgKz0gLWZuby1vcHRpbWl6ZS1zaWJsaW5nLWNhbGxzCisKICMgb2xkIHN0eWxlIG9wdGlvbiBmb3IgcGFja2VkIHN0YWNrcwogaWZlcSAoJChjYWxsIGNjLW9wdGlvbi15biwtbWtlcm5lbC1iYWNrY2hhaW4pLHkpCiBjZmxhZ3MtJChDT05GSUdfUEFDS19TVEFDSykgICs9IC1ta2VybmVsLWJhY2tjaGFpbiAtRF9fUEFDS19TVEFDSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhLmggYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaAppbmRleCBlODA2YTg5Li43MWQ2NWViIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaAorKysgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaApAQCAtMyw5ICszLDkgQEAKICAqCiAgKiBEZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIGZvciBMaW51eCAtIHovVk0gTW9uaXRvciBTdHJlYW0uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiwgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkguCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNiBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILgogICoKLSAqIEF1dGhvcjogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGRzY0BkZS5pYm0uY29tPgorICogQXV0aG9yOiBHZXJhbGQgU2NoYWVmZXIgPGdlcmFsZC5zY2hhZWZlckBkZS5pYm0uY29tPgogICovCiAKIC8vI2RlZmluZSBBUFBMREFUQV9ERUJVRwkJCS8qIERlYnVnIG1lc3NhZ2VzIG9uL29mZiAqLwpAQCAtMjksNiArMjksMjIgQEAKICNkZWZpbmUgQ1RMX0FQUExEQVRBX05FVF9TVU0JMjEyNQogI2RlZmluZSBDVExfQVBQTERBVEFfUFJPQwkyMTI2CiAKKyNpZm5kZWYgQ09ORklHXzY0QklUCisKKyNkZWZpbmUgQVBQTERBVEFfU1RBUlRfSU5URVJWQUxfUkVDIDB4MDAJLyogRnVuY3Rpb24gY29kZXMgZm9yICovCisjZGVmaW5lIEFQUExEQVRBX1NUT1BfUkVDCSAgICAweDAxCS8qIERJQUcgMHhEQwkgICovCisjZGVmaW5lIEFQUExEQVRBX0dFTl9FVkVOVF9SRUNPUkQgICAweDAyCisjZGVmaW5lIEFQUExEQVRBX1NUQVJUX0NPTkZJR19SRUMgICAweDAzCisKKyNlbHNlCisKKyNkZWZpbmUgQVBQTERBVEFfU1RBUlRfSU5URVJWQUxfUkVDIDB4ODAKKyNkZWZpbmUgQVBQTERBVEFfU1RPUF9SRUMJICAgIDB4ODEKKyNkZWZpbmUgQVBQTERBVEFfR0VOX0VWRU5UX1JFQ09SRCAgIDB4ODIKKyNkZWZpbmUgQVBQTERBVEFfU1RBUlRfQ09ORklHX1JFQyAgIDB4ODMKKworI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCiAjZGVmaW5lIFBfSU5GTyh4Li4uKQlwcmludGsoS0VSTl9JTkZPIE1ZX1BSSU5UX05BTUUgIiBpbmZvOiAiIHgpCiAjZGVmaW5lIFBfRVJST1IoeC4uLikJcHJpbnRrKEtFUk5fRVJSIE1ZX1BSSU5UX05BTUUgIiBlcnJvcjogIiB4KQogI2RlZmluZSBQX1dBUk5JTkcoeC4uLikJcHJpbnRrKEtFUk5fV0FSTklORyBNWV9QUklOVF9OQU1FICIgc3RhdHVzOiAiIHgpCkBAIC01Myw3ICs2OSwxMSBAQAogCXZvaWQgKmRhdGE7CQkJCS8qIHJlY29yZCBkYXRhICovCiAJdW5zaWduZWQgaW50IHNpemU7CQkJLyogc2l6ZSBvZiByZWNvcmQgKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsJCQkvKiBUSElTX01PRFVMRSAqLworCWNoYXIgbW9kX2x2bFsyXTsJCQkvKiBtb2RpZmljYXRpb24gbGV2ZWwsIEVCQ0RJQyAqLwogfTsKIAogZXh0ZXJuIGludCBhcHBsZGF0YV9yZWdpc3Rlcl9vcHMoc3RydWN0IGFwcGxkYXRhX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIGFwcGxkYXRhX3VucmVnaXN0ZXJfb3BzKHN0cnVjdCBhcHBsZGF0YV9vcHMgKm9wcyk7CitleHRlcm4gaW50IGFwcGxkYXRhX2RpYWcoY2hhciByZWNvcmRfbnIsIHUxNiBmdW5jdGlvbiwgdW5zaWduZWQgbG9uZyBidWZmZXIsCisJCQkgdTE2IGxlbmd0aCwgY2hhciAqbW9kX2x2bCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCmluZGV4IDU0ZDM1YzEuLmQwZjgyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwpAQCAtNSwxMiArNSwxMSBAQAogICogRXhwb3J0cyBhcHBsZGF0YV9yZWdpc3Rlcl9vcHMoKSBhbmQgYXBwbGRhdGFfdW5yZWdpc3Rlcl9vcHMoKSBmb3IgdGhlCiAgKiBkYXRhIGdhdGhlcmluZyBtb2R1bGVzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILgorICogQ29weXJpZ2h0IChDKSAyMDAzLDIwMDYgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSC4KICAqCi0gKiBBdXRob3I6IEdlcmFsZCBTY2hhZWZlciA8Z2VyYWxkc2NAZGUuaWJtLmNvbT4KKyAqIEF1dGhvcjogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQwLDIyICszOSw2IEBACiAKICNkZWZpbmUgVE9EX01JQ1JPCTB4MDEwMDAJCQkvKiBuci4gb2YgVE9EIGNsb2NrIHVuaXRzCiAJCQkJCQkgICBmb3IgMSBtaWNyb3NlY29uZCAqLwotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQotI2RlZmluZSBBUFBMREFUQV9TVEFSVF9JTlRFUlZBTF9SRUMgMHgwMCAgIAkvKiBGdW5jdGlvbiBjb2RlcyBmb3IgKi8KLSNkZWZpbmUgQVBQTERBVEFfU1RPUF9SRUMJICAgIDB4MDEJLyogRElBRyAweERDCSAgKi8KLSNkZWZpbmUgQVBQTERBVEFfR0VOX0VWRU5UX1JFQ09SRCAgIDB4MDIKLSNkZWZpbmUgQVBQTERBVEFfU1RBUlRfQ09ORklHX1JFQyAgIDB4MDMKLQotI2Vsc2UKLQotI2RlZmluZSBBUFBMREFUQV9TVEFSVF9JTlRFUlZBTF9SRUMgMHg4MAotI2RlZmluZSBBUFBMREFUQV9TVE9QX1JFQyAgIAkgICAgMHg4MQotI2RlZmluZSBBUFBMREFUQV9HRU5fRVZFTlRfUkVDT1JEICAgMHg4MgotI2RlZmluZSBBUFBMREFUQV9TVEFSVF9DT05GSUdfUkVDICAgMHg4MwotCi0jZW5kaWYgLyogQ09ORklHXzY0QklUICovCi0KIAogLyoKICAqIFBhcmFtZXRlciBsaXN0IGZvciBESUFHTk9TRSBYJ0RDJwpAQCAtMTk1LDggKzE3OCw4IEBACiAgKgogICogcHJlcGFyZSBwYXJhbWV0ZXIgbGlzdCwgaXNzdWUgRElBRyAweERDCiAgKi8KLXN0YXRpYyBpbnQgYXBwbGRhdGFfZGlhZyhjaGFyIHJlY29yZF9uciwgdTE2IGZ1bmN0aW9uLCB1bnNpZ25lZCBsb25nIGJ1ZmZlciwKLQkJCXUxNiBsZW5ndGgpCitpbnQgYXBwbGRhdGFfZGlhZyhjaGFyIHJlY29yZF9uciwgdTE2IGZ1bmN0aW9uLCB1bnNpZ25lZCBsb25nIGJ1ZmZlciwKKwkJCXUxNiBsZW5ndGgsIGNoYXIgKm1vZF9sdmwpCiB7CiAJdW5zaWduZWQgbG9uZyByeTsKIAlzdHJ1Y3QgYXBwbGRhdGFfcHJvZHVjdF9pZCB7CkBAIC0yMTQsNyArMTk3LDcgQEAKIAkJLnJlY29yZF9uciAgPSByZWNvcmRfbnIsCiAJCS52ZXJzaW9uX25yID0gezB4RjIsIDB4RjZ9LAkJLyogIjI2IiAqLwogCQkucmVsZWFzZV9uciA9IHsweEYwLCAweEYxfSwJCS8qICIwMSIgKi8KLQkJLm1vZF9sdmwgICAgPSB7MHhGMCwgMHhGMH0sCQkvKiAiMDAiICovCisJCS5tb2RfbHZsICAgID0ge21vZF9sdmxbMF0sIG1vZF9sdmxbMV19LAogCX07CiAJc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0ID0gewogCQkJCS5kaWFnID0gMHhEQywKQEAgLTQ2NywyNCArNDUwLDI1IEBACiAJCQltb2R1bGVfcHV0KG9wcy0+b3duZXIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJb3BzLT5hY3RpdmUgPSAxOwogCQlvcHMtPmNhbGxiYWNrKG9wcy0+ZGF0YSk7CS8vIGluaXQgcmVjb3JkCiAJCXJjID0gYXBwbGRhdGFfZGlhZyhvcHMtPnJlY29yZF9uciwKIAkJCQkJQVBQTERBVEFfU1RBUlRfSU5URVJWQUxfUkVDLAotCQkJCQkodW5zaWduZWQgbG9uZykgb3BzLT5kYXRhLCBvcHMtPnNpemUpOworCQkJCQkodW5zaWduZWQgbG9uZykgb3BzLT5kYXRhLCBvcHMtPnNpemUsCisJCQkJCW9wcy0+bW9kX2x2bCk7CiAJCWlmIChyYyAhPSAwKSB7CiAJCQlQX0VSUk9SKCJTVEFSVCBESUFHIDB4REMgZm9yICVzIGZhaWxlZCwgIgogCQkJCSJyZXR1cm4gY29kZTogJWRcbiIsIG9wcy0+bmFtZSwgcmMpOwogCQkJbW9kdWxlX3B1dChvcHMtPm93bmVyKTsKLQkJCW9wcy0+YWN0aXZlID0gMDsKIAkJfSBlbHNlIHsKIAkJCVBfSU5GTygiTW9uaXRvcmluZyAlcyBkYXRhIGVuYWJsZWQsICIKIAkJCQkiRElBRyAweERDIHN0YXJ0ZWQuXG4iLCBvcHMtPm5hbWUpOworCQkJb3BzLT5hY3RpdmUgPSAxOwogCQl9CiAJfSBlbHNlIGlmICgoYnVmWzBdID09ICcwJykgJiYgKG9wcy0+YWN0aXZlID09IDEpKSB7CiAJCW9wcy0+YWN0aXZlID0gMDsKIAkJcmMgPSBhcHBsZGF0YV9kaWFnKG9wcy0+cmVjb3JkX25yLCBBUFBMREFUQV9TVE9QX1JFQywKLQkJCQkodW5zaWduZWQgbG9uZykgb3BzLT5kYXRhLCBvcHMtPnNpemUpOworCQkJCSh1bnNpZ25lZCBsb25nKSBvcHMtPmRhdGEsIG9wcy0+c2l6ZSwKKwkJCQlvcHMtPm1vZF9sdmwpOwogCQlpZiAocmMgIT0gMCkgewogCQkJUF9FUlJPUigiU1RPUCBESUFHIDB4REMgZm9yICVzIGZhaWxlZCwgIgogCQkJCSJyZXR1cm4gY29kZTogJWRcbiIsIG9wcy0+bmFtZSwgcmMpOwpAQCAtNjMzLDcgKzYxNyw3IEBACiAJc3Bpbl91bmxvY2soJmFwcGxkYXRhX3RpbWVyX2xvY2spOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgaW50IF9fY3B1aW5pdAogYXBwbGRhdGFfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKQEAgLTcxMCw3ICs2OTQsOCBAQAogCWxpc3RfZm9yX2VhY2gobGgsICZhcHBsZGF0YV9vcHNfbGlzdCkgewogCQlvcHMgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3QgYXBwbGRhdGFfb3BzLCBsaXN0KTsKIAkJcmMgPSBhcHBsZGF0YV9kaWFnKG9wcy0+cmVjb3JkX25yLCBBUFBMREFUQV9TVE9QX1JFQywKLQkJCQkodW5zaWduZWQgbG9uZykgb3BzLT5kYXRhLCBvcHMtPnNpemUpOworCQkJCSh1bnNpZ25lZCBsb25nKSBvcHMtPmRhdGEsIG9wcy0+c2l6ZSwKKwkJCQlvcHMtPm1vZF9sdmwpOwogCQlpZiAocmMgIT0gMCkgewogCQkJUF9FUlJPUigiU1RPUCBESUFHIDB4REMgZm9yICVzIGZhaWxlZCwgIgogCQkJCSJyZXR1cm4gY29kZTogJWRcbiIsIG9wcy0+bmFtZSwgcmMpOwpAQCAtNzM5LDYgKzcyNCw3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGFwcGxkYXRhX3JlZ2lzdGVyX29wcyk7CiBFWFBPUlRfU1lNQk9MX0dQTChhcHBsZGF0YV91bnJlZ2lzdGVyX29wcyk7CitFWFBPUlRfU1lNQk9MX0dQTChhcHBsZGF0YV9kaWFnKTsKIAogI2lmZGVmIE1PRFVMRQogLyoKQEAgLTc3OSw4ICs3NjUsNiBAQAogI2VuZGlmIC8qIE1PRFVMRSAqLwogRVhQT1JUX1NZTUJPTF9HUEwoc2lfc3dhcGluZm8pOwogRVhQT1JUX1NZTUJPTF9HUEwobnJfdGhyZWFkcyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChhdmVucnVuKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGdldF9mdWxsX3BhZ2Vfc3RhdGUpOwogRVhQT1JUX1NZTUJPTF9HUEwobnJfcnVubmluZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChucl9pb3dhaXQpOwogLy9FWFBPUlRfU1lNQk9MX0dQTChucl9jb250ZXh0X3N3aXRjaGVzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9tZW0uYyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9tZW0uYwppbmRleCBmMGUyZmJlLi5hYjNiMDc2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfbWVtLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX21lbS5jCkBAIC00LDEyICs0LDExIEBACiAgKiBEYXRhIGdhdGhlcmluZyBtb2R1bGUgZm9yIExpbnV4LVZNIE1vbml0b3IgU3RyZWFtLCBTdGFnZSAxLgogICogQ29sbGVjdHMgZGF0YSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILgorICogQ29weXJpZ2h0IChDKSAyMDAzLDIwMDYgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSC4KICAqCi0gKiBBdXRob3I6IEdlcmFsZCBTY2hhZWZlciA8Z2VyYWxkc2NAZGUuaWJtLmNvbT4KKyAqIEF1dGhvcjogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTEwNywyMSArMTA2LDIxIEBACiAJICogc2VyaWFsaXplZCB0aHJvdWdoIHRoZSBhcHBsZGF0YV9vcHNfbG9jayBhbmQgY2FuIHVzZSBzdGF0aWMKIAkgKi8KIAlzdGF0aWMgc3RydWN0IHN5c2luZm8gdmFsOwotCXN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBwczsKKwl1bnNpZ25lZCBsb25nIGV2W05SX1ZNX0VWRU5UX0lURU1TXTsKIAlzdHJ1Y3QgYXBwbGRhdGFfbWVtX2RhdGEgKm1lbV9kYXRhOwogCiAJbWVtX2RhdGEgPSBkYXRhOwogCW1lbV9kYXRhLT5zeW5jX2NvdW50XzErKzsKIAotCWdldF9mdWxsX3BhZ2Vfc3RhdGUoJnBzKTsKLQltZW1fZGF0YS0+cGdwZ2luICAgICA9IHBzLnBncGdpbiA+PiAxOwotCW1lbV9kYXRhLT5wZ3Bnb3V0ICAgID0gcHMucGdwZ291dCA+PiAxOwotCW1lbV9kYXRhLT5wc3dwaW4gICAgID0gcHMucHN3cGluOwotCW1lbV9kYXRhLT5wc3dwb3V0ICAgID0gcHMucHN3cG91dDsKLQltZW1fZGF0YS0+cGdhbGxvYyAgICA9IHBzLnBnYWxsb2NfaGlnaCArIHBzLnBnYWxsb2Nfbm9ybWFsICsKLQkJCSAgICAgICBwcy5wZ2FsbG9jX2RtYTsKLQltZW1fZGF0YS0+cGdmYXVsdCAgICA9IHBzLnBnZmF1bHQ7Ci0JbWVtX2RhdGEtPnBnbWFqZmF1bHQgPSBwcy5wZ21hamZhdWx0OworCWFsbF92bV9ldmVudHMoZXYpOworCW1lbV9kYXRhLT5wZ3BnaW4gICAgID0gZXZbUEdQR0lOXSA+PiAxOworCW1lbV9kYXRhLT5wZ3Bnb3V0ICAgID0gZXZbUEdQR09VVF0gPj4gMTsKKwltZW1fZGF0YS0+cHN3cGluICAgICA9IGV2W1BTV1BJTl07CisJbWVtX2RhdGEtPnBzd3BvdXQgICAgPSBldltQU1dQT1VUXTsKKwltZW1fZGF0YS0+cGdhbGxvYyAgICA9IGV2W1BHQUxMT0NfSElHSF0gKyBldltQR0FMTE9DX05PUk1BTF0gKworCQkJICAgICAgIGV2W1BHQUxMT0NfRE1BXTsKKwltZW1fZGF0YS0+cGdmYXVsdCAgICA9IGV2W1BHRkFVTFRdOworCW1lbV9kYXRhLT5wZ21hamZhdWx0ID0gZXZbUEdNQUpGQVVMVF07CiAKIAlzaV9tZW1pbmZvKCZ2YWwpOwogCW1lbV9kYXRhLT5zaGFyZWRyYW0gPSB2YWwuc2hhcmVkcmFtOwpAQCAtMTMwLDcgKzEyOSw4IEBACiAJbWVtX2RhdGEtPnRvdGFsaGlnaCA9IFAySyh2YWwudG90YWxoaWdoKTsKIAltZW1fZGF0YS0+ZnJlZWhpZ2ggID0gUDJLKHZhbC5mcmVlaGlnaCk7CiAJbWVtX2RhdGEtPmJ1ZmZlcnJhbSA9IFAySyh2YWwuYnVmZmVycmFtKTsKLQltZW1fZGF0YS0+Y2FjaGVkICAgID0gUDJLKGF0b21pY19yZWFkKCZucl9wYWdlY2FjaGUpIC0gdmFsLmJ1ZmZlcnJhbSk7CisJbWVtX2RhdGEtPmNhY2hlZCAgICA9IFAySyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX1BBR0VTKQorCQkJCS0gdmFsLmJ1ZmZlcnJhbSk7CiAKIAlzaV9zd2FwaW5mbygmdmFsKTsKIAltZW1fZGF0YS0+dG90YWxzd2FwID0gUDJLKHZhbC50b3RhbHN3YXApOwpAQCAtMTUyLDYgKzE1Miw3IEBACiAJLmNhbGxiYWNrICA9ICZhcHBsZGF0YV9nZXRfbWVtX2RhdGEsCiAJLmRhdGEgICAgICA9ICZhcHBsZGF0YV9tZW1fZGF0YSwKIAkub3duZXIgICAgID0gVEhJU19NT0RVTEUsCisJLm1vZF9sdmwgICA9IHsweEYwLCAweEYwfSwJCS8qIEVCQ0RJQyAiMDAiICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9uZXRfc3VtLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfbmV0X3N1bS5jCmluZGV4IDJhNGM3NDMuLjA3NWU2MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9uZXRfc3VtLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX25ldF9zdW0uYwpAQCAtNSwxMiArNSwxMSBAQAogICogQ29sbGVjdHMgYWNjdW11bGF0ZWQgbmV0d29yayBzdGF0aXN0aWNzIChQYWNrZXRzIHJlY2VpdmVkL3RyYW5zbWl0dGVkLAogICogZHJvcHBlZCwgZXJyb3JzLCAuLi4pLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILgorICogQ29weXJpZ2h0IChDKSAyMDAzLDIwMDYgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSC4KICAqCi0gKiBBdXRob3I6IEdlcmFsZCBTY2hhZWZlciA8Z2VyYWxkc2NAZGUuaWJtLmNvbT4KKyAqIEF1dGhvcjogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTE1Miw2ICsxNTEsNyBAQAogCS5jYWxsYmFjayAgPSAmYXBwbGRhdGFfZ2V0X25ldF9zdW1fZGF0YSwKIAkuZGF0YSAgICAgID0gJmFwcGxkYXRhX25ldF9zdW1fZGF0YSwKIAkub3duZXIgICAgID0gVEhJU19NT0RVTEUsCisJLm1vZF9sdmwgICA9IHsweEYwLCAweEYwfSwJCS8qIEVCQ0RJQyAiMDAiICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9vcy5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX29zLmMKaW5kZXggOTlkZGQzYi4uMTYxYWNjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX29zLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX29zLmMKQEAgLTQsMTIgKzQsMTEgQEAKICAqIERhdGEgZ2F0aGVyaW5nIG1vZHVsZSBmb3IgTGludXgtVk0gTW9uaXRvciBTdHJlYW0sIFN0YWdlIDEuCiAgKiBDb2xsZWN0cyBtaXNjLiBPUyByZWxhdGVkIGRhdGEgKENQVSB1dGlsaXphdGlvbiwgcnVubmluZyBwcm9jZXNzZXMpLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILgorICogQ29weXJpZ2h0IChDKSAyMDAzLDIwMDYgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSC4KICAqCi0gKiBBdXRob3I6IEdlcmFsZCBTY2hhZWZlciA8Z2VyYWxkc2NAZGUuaWJtLmNvbT4KKyAqIEF1dGhvcjogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQ0LDExICs0MywxNCBAQAogCXUzMiBwZXJfY3B1X3N5c3RlbTsJLyogLi4uIHNwZW50IGluIGtlcm5lbCBtb2RlICAgICAgICAgKi8KIAl1MzIgcGVyX2NwdV9pZGxlOwkvKiAuLi4gc3BlbnQgaW4gaWRsZSBtb2RlICAgICAgICAgICAqLwogCi0vLyBOZXcgaW4gMi42IC0tPgorCS8qIE5ldyBpbiAyLjYgKi8KIAl1MzIgcGVyX2NwdV9pcnE7CS8qIC4uLiBzcGVudCBpbiBpbnRlcnJ1cHRzICAgICAgICAgICovCiAJdTMyIHBlcl9jcHVfc29mdGlycTsJLyogLi4uIHNwZW50IGluIHNvZnRpcnFzICAgICAgICAgICAgKi8KIAl1MzIgcGVyX2NwdV9pb3dhaXQ7CS8qIC4uLiBzcGVudCB3aGlsZSB3YWl0aW5nIGZvciBJL08gICovCi0vLyA8LS0gTmV3IGluIDIuNgorCisJLyogTmV3IGluIG1vZGlmaWNhdGlvbiBsZXZlbCAwMSAqLworCXUzMiBwZXJfY3B1X3N0ZWFsOwkvKiAuLi4gc3RvbGVuIGJ5IGh5cGVydmlzb3IJICAgICovCisJdTMyIGNwdV9pZDsJCS8qIG51bWJlciBvZiB0aGlzIENQVQkJICAgICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYXBwbGRhdGFfb3NfZGF0YSB7CkBAIC02OCwxMCArNzAsOSBAQAogCXUzMiBhdmVucnVuWzNdOwkJLyogYXZlcmFnZSBuci4gb2YgcnVubmluZyBwcm9jZXNzZXMgZHVyaW5nICovCiAJCQkJLyogdGhlIGxhc3QgMSwgNSBhbmQgMTUgbWludXRlcyAqLwogCi0vLyBOZXcgaW4gMi42IC0tPgorCS8qIE5ldyBpbiAyLjYgKi8KIAl1MzIgbnJfaW93YWl0OwkJLyogbnVtYmVyIG9mIGJsb2NrZWQgdGhyZWFkcwogCQkJCSAgICh3YWl0aW5nIGZvciBJL08pICAgICAgICAgICAgICAgKi8KLS8vIDwtLSBOZXcgaW4gMi42CiAKIAkvKiBwZXIgY3B1IGRhdGEgKi8KIAlzdHJ1Y3QgYXBwbGRhdGFfb3NfcGVyX2NwdSBvc19jcHVbMF07CkBAIC03OSw2ICs4MCwxNCBAQAogCiBzdGF0aWMgc3RydWN0IGFwcGxkYXRhX29zX2RhdGEgKmFwcGxkYXRhX29zX2RhdGE7CiAKK3N0YXRpYyBzdHJ1Y3QgYXBwbGRhdGFfb3BzIG9wcyA9IHsKKwkuY3RsX25yICAgID0gQ1RMX0FQUExEQVRBX09TLAorCS5uYW1lCSAgID0gIm9zIiwKKwkucmVjb3JkX25yID0gQVBQTERBVEFfUkVDT1JEX09TX0lELAorCS5vd25lcgkgICA9IFRISVNfTU9EVUxFLAorCS5tb2RfbHZsICAgPSB7MHhGMCwgMHhGMX0sCQkvKiBFQkNESUMgIjAxIiAqLworfTsKKwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbGRhdGFfcHJpbnRfZGVidWcoc3RydWN0IGFwcGxkYXRhX29zX2RhdGEgKm9zX2RhdGEpCiB7CkBAIC0xMDAsMTUgKzEwOSwxNyBAQAogCVBfREVCVUcoIm5yX2NwdXMgPSAldVxuIiwgb3NfZGF0YS0+bnJfY3B1cyk7CiAJZm9yIChpID0gMDsgaSA8IG9zX2RhdGEtPm5yX2NwdXM7IGkrKykgewogCQlQX0RFQlVHKCJjcHUldSA6IHVzZXIgPSAldSwgbmljZSA9ICV1LCBzeXN0ZW0gPSAldSwgIgotCQkJImlkbGUgPSAldSwgaXJxID0gJXUsIHNvZnRpcnEgPSAldSwgaW93YWl0ID0gJXVcbiIsCi0JCQkJaSwKKwkJCSJpZGxlID0gJXUsIGlycSA9ICV1LCBzb2Z0aXJxID0gJXUsIGlvd2FpdCA9ICV1LCAiCisJCQkic3RlYWwgPSAldVxuIiwKKwkJCQlvc19kYXRhLT5vc19jcHVbaV0uY3B1X2lkLAogCQkJCW9zX2RhdGEtPm9zX2NwdVtpXS5wZXJfY3B1X3VzZXIsCiAJCQkJb3NfZGF0YS0+b3NfY3B1W2ldLnBlcl9jcHVfbmljZSwKIAkJCQlvc19kYXRhLT5vc19jcHVbaV0ucGVyX2NwdV9zeXN0ZW0sCiAJCQkJb3NfZGF0YS0+b3NfY3B1W2ldLnBlcl9jcHVfaWRsZSwKIAkJCQlvc19kYXRhLT5vc19jcHVbaV0ucGVyX2NwdV9pcnEsCiAJCQkJb3NfZGF0YS0+b3NfY3B1W2ldLnBlcl9jcHVfc29mdGlycSwKLQkJCQlvc19kYXRhLT5vc19jcHVbaV0ucGVyX2NwdV9pb3dhaXQpOworCQkJCW9zX2RhdGEtPm9zX2NwdVtpXS5wZXJfY3B1X2lvd2FpdCwKKwkJCQlvc19kYXRhLT5vc19jcHVbaV0ucGVyX2NwdV9zdGVhbCk7CiAJfQogCiAJUF9ERUJVRygic3luY19jb3VudF8xID0gJXVcbiIsIG9zX2RhdGEtPnN5bmNfY291bnRfMSk7CkBAIC0xMjMsMTQgKzEzNCwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBhcHBsZGF0YV9nZXRfb3NfZGF0YSh2b2lkICpkYXRhKQogewotCWludCBpLCBqOworCWludCBpLCBqLCByYzsKIAlzdHJ1Y3QgYXBwbGRhdGFfb3NfZGF0YSAqb3NfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbmV3X3NpemU7CiAKIAlvc19kYXRhID0gZGF0YTsKIAlvc19kYXRhLT5zeW5jX2NvdW50XzErKzsKIAotCW9zX2RhdGEtPm5yX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKLQogCW9zX2RhdGEtPm5yX3RocmVhZHMgPSBucl90aHJlYWRzOwogCW9zX2RhdGEtPm5yX3J1bm5pbmcgPSBucl9ydW5uaW5nKCk7CiAJb3NfZGF0YS0+bnJfaW93YWl0ICA9IG5yX2lvd2FpdCgpOwpAQCAtMTU0LDkgKzE2NCw0NCBAQAogCQkJY3B1dGltZV90b19qaWZmaWVzKGtzdGF0X2NwdShpKS5jcHVzdGF0LnNvZnRpcnEpOwogCQlvc19kYXRhLT5vc19jcHVbal0ucGVyX2NwdV9pb3dhaXQgPQogCQkJY3B1dGltZV90b19qaWZmaWVzKGtzdGF0X2NwdShpKS5jcHVzdGF0Lmlvd2FpdCk7CisJCW9zX2RhdGEtPm9zX2NwdVtqXS5wZXJfY3B1X3N0ZWFsID0KKwkJCWNwdXRpbWVfdG9famlmZmllcyhrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbCk7CisJCW9zX2RhdGEtPm9zX2NwdVtqXS5jcHVfaWQgPSBpOwogCQlqKys7CiAJfQogCisJb3NfZGF0YS0+bnJfY3B1cyA9IGo7CisKKwluZXdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXBwbGRhdGFfb3NfZGF0YSkgKworCQkgICAob3NfZGF0YS0+bnJfY3B1cyAqIHNpemVvZihzdHJ1Y3QgYXBwbGRhdGFfb3NfcGVyX2NwdSkpOworCWlmIChvcHMuc2l6ZSAhPSBuZXdfc2l6ZSkgeworCQlpZiAob3BzLmFjdGl2ZSkgeworCQkJcmMgPSBhcHBsZGF0YV9kaWFnKEFQUExEQVRBX1JFQ09SRF9PU19JRCwKKwkJCQkJICAgQVBQTERBVEFfU1RBUlRfSU5URVJWQUxfUkVDLAorCQkJCQkgICAodW5zaWduZWQgbG9uZykgb3BzLmRhdGEsIG5ld19zaXplLAorCQkJCQkgICBvcHMubW9kX2x2bCk7CisJCQlpZiAocmMgIT0gMCkgeworCQkJCVBfRVJST1IoIm9zOiBTVEFSVCBORVcgRElBRyAweERDIGZhaWxlZCwgIgorCQkJCQkicmV0dXJuIGNvZGU6ICVkLCBuZXcgc2l6ZSA9ICVpXG4iLCByYywKKwkJCQkJbmV3X3NpemUpOworCQkJCVBfSU5GTygib3M6IHN0b3BwaW5nIG9sZCByZWNvcmQgbm93XG4iKTsKKwkJCX0gZWxzZQorCQkJCVBfSU5GTygib3M6IG5ldyByZWNvcmQgc2l6ZSA9ICVpXG4iLCBuZXdfc2l6ZSk7CisKKwkJCXJjID0gYXBwbGRhdGFfZGlhZyhBUFBMREFUQV9SRUNPUkRfT1NfSUQsCisJCQkJCSAgIEFQUExEQVRBX1NUT1BfUkVDLAorCQkJCQkgICAodW5zaWduZWQgbG9uZykgb3BzLmRhdGEsIG9wcy5zaXplLAorCQkJCQkgICBvcHMubW9kX2x2bCk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQlQX0VSUk9SKCJvczogU1RPUCBPTEQgRElBRyAweERDIGZhaWxlZCwgIgorCQkJCQkicmV0dXJuIGNvZGU6ICVkLCBvbGQgc2l6ZSA9ICVpXG4iLCByYywKKwkJCQkJb3BzLnNpemUpOworCQkJZWxzZQorCQkJCVBfSU5GTygib3M6IG9sZCByZWNvcmQgc2l6ZSA9ICVpIHN0b3BwZWRcbiIsCisJCQkJCW9wcy5zaXplKTsKKwkJfQorCQlvcHMuc2l6ZSA9IG5ld19zaXplOworCX0KIAlvc19kYXRhLT50aW1lc3RhbXAgPSBnZXRfY2xvY2soKTsKIAlvc19kYXRhLT5zeW5jX2NvdW50XzIrKzsKICNpZmRlZiBBUFBMREFUQV9ERUJVRwpAQCAtMTY1LDE1ICsyMTAsNiBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGRhdGFfb3BzIG9wcyA9IHsKLQkuY3RsX25yICAgID0gQ1RMX0FQUExEQVRBX09TLAotCS5uYW1lCSAgID0gIm9zIiwKLQkucmVjb3JkX25yID0gQVBQTERBVEFfUkVDT1JEX09TX0lELAotCS5jYWxsYmFjayAgPSAmYXBwbGRhdGFfZ2V0X29zX2RhdGEsCi0JLm93bmVyICAgICA9IFRISVNfTU9EVUxFLAotfTsKLQotCiAvKgogICogYXBwbGRhdGFfb3NfaW5pdCgpCiAgKgpAQCAtMTgxLDI2ICsyMTcsMjUgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXBwbGRhdGFfb3NfaW5pdCh2b2lkKQogewotCWludCByYywgc2l6ZTsKKwlpbnQgcmMsIG1heF9zaXplOwogCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXBwbGRhdGFfb3NfZGF0YSkgKwotCQkoTlJfQ1BVUyAqIHNpemVvZihzdHJ1Y3QgYXBwbGRhdGFfb3NfcGVyX2NwdSkpOwotCWlmIChzaXplID4gQVBQTERBVEFfTUFYX1JFQ19TSVpFKSB7Ci0JCVBfRVJST1IoIlNpemUgb2YgcmVjb3JkID0gJWksIGJpZ2dlciB0aGFuIG1heGltdW0gKCVpKSFcbiIsCi0JCQlzaXplLCBBUFBMREFUQV9NQVhfUkVDX1NJWkUpOworCW1heF9zaXplID0gc2l6ZW9mKHN0cnVjdCBhcHBsZGF0YV9vc19kYXRhKSArCisJCSAgIChOUl9DUFVTICogc2l6ZW9mKHN0cnVjdCBhcHBsZGF0YV9vc19wZXJfY3B1KSk7CisJaWYgKG1heF9zaXplID4gQVBQTERBVEFfTUFYX1JFQ19TSVpFKSB7CisJCVBfRVJST1IoIk1heC4gc2l6ZSBvZiBPUyByZWNvcmQgPSAlaSwgYmlnZ2VyIHRoYW4gbWF4aW11bSAiCisJCQkicmVjb3JkIHNpemUgKCVpKVxuIiwgbWF4X3NpemUsIEFQUExEQVRBX01BWF9SRUNfU0laRSk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCVBfREVCVUcoInNpemVvZihvcykgPSAlaSwgc2l6ZW9mKG9zX2NwdSkgPSAlbHVcbiIsIHNpemUsCisJUF9ERUJVRygibWF4LiBzaXplb2Yob3MpID0gJWksIHNpemVvZihvc19jcHUpID0gJWx1XG4iLCBtYXhfc2l6ZSwKIAkJc2l6ZW9mKHN0cnVjdCBhcHBsZGF0YV9vc19wZXJfY3B1KSk7CiAKLQlhcHBsZGF0YV9vc19kYXRhID0ga21hbGxvYyhzaXplLCBHRlBfRE1BKTsKKwlhcHBsZGF0YV9vc19kYXRhID0ga3phbGxvYyhtYXhfc2l6ZSwgR0ZQX0RNQSk7CiAJaWYgKGFwcGxkYXRhX29zX2RhdGEgPT0gTlVMTCkgewogCQlQX0VSUk9SKCJObyBtZW1vcnkgZm9yICVzIVxuIiwgb3BzLm5hbWUpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQltZW1zZXQoYXBwbGRhdGFfb3NfZGF0YSwgMCwgc2l6ZSk7CiAKIAlhcHBsZGF0YV9vc19kYXRhLT5wZXJfY3B1X3NpemUgPSBzaXplb2Yoc3RydWN0IGFwcGxkYXRhX29zX3Blcl9jcHUpOwogCWFwcGxkYXRhX29zX2RhdGEtPmNwdV9vZmZzZXQgICA9IG9mZnNldG9mKHN0cnVjdCBhcHBsZGF0YV9vc19kYXRhLApAQCAtMjA4LDcgKzI0Myw3IEBACiAJUF9ERUJVRygiY3B1IG9mZnNldCA9ICV1XG4iLCBhcHBsZGF0YV9vc19kYXRhLT5jcHVfb2Zmc2V0KTsKIAogCW9wcy5kYXRhID0gYXBwbGRhdGFfb3NfZGF0YTsKLQlvcHMuc2l6ZSA9IHNpemU7CisJb3BzLmNhbGxiYWNrICA9ICZhcHBsZGF0YV9nZXRfb3NfZGF0YTsKIAlyYyA9IGFwcGxkYXRhX3JlZ2lzdGVyX29wcygmb3BzKTsKIAlpZiAocmMgIT0gMCkgewogCQlQX0VSUk9SKCJFcnJvciByZWdpc3RlcmluZyBvcHMsIHJjID0gJWlcbiIsIHJjKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IDkyNjliNTcuLmVhYmYwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYzMikJKz0gYmluZm10X2VsZjMyLm8KIAogb2JqLSQoQ09ORklHX1ZJUlRfVElNRVIpCSs9IHZ0aW1lLm8KK29iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KIAogIyBLZXhlYyBwYXJ0CiBTMzkwX0tFWEVDX09CSlMgOj0gbWFjaGluZV9rZXhlYy5vIGNyYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAzZjcwMThlLi5lYzUxNGZlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC00LDcgKzQsNiBAQAogICogYW5kIGZvcm1hdCB0aGUgcmVxdWlyZWQgZGF0YS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyogVXNlIG1hcmtlciBpZiB5b3UgbmVlZCB0byBzZXBhcmF0ZSB0aGUgdmFsdWVzIGxhdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9zMzkwL2tlcm5lbC9iaW5mbXRfZWxmMzIuYwppbmRleCAxZjQ1MWMyLi45NTY1YTJkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2JpbmZtdF9lbGYzMi5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYmluZm10X2VsZjMyLmMKQEAgLTEzNSw3ICsxMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CkBAIC0xNzcsMTEgKzE3Niw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAKLSN1bmRlZiBORVdfVE9fT0xEX1VJRAotI3VuZGVmIE5FV19UT19PTERfR0lECi0jZGVmaW5lIE5FV19UT19PTERfVUlEKHVpZCkgKCh1aWQpID4gNjU1MzUpID8gKHUxNilvdmVyZmxvd3VpZCA6ICh1MTYpKHVpZCkKLSNkZWZpbmUgTkVXX1RPX09MRF9HSUQoZ2lkKSAoKGdpZCkgPiA2NTUzNSkgPyAodTE2KW92ZXJmbG93Z2lkIDogKHUxNikoZ2lkKSAKLQogI2RlZmluZSBlbGZfYWRkcl90CXUzMgogLyoKICNkZWZpbmUgaW5pdF9lbGZfYmluZm10IGluaXRfZWxmMzJfYmluZm10CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwppbmRleCA1ZTE0ZGUzLi5jYWJiNGZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+IApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaCBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKaW5kZXggMzg5OGY2Ni4uMWExOGUyOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1MzOTBYX1MzOTBfSAogI2RlZmluZSBfQVNNX1MzOTBYX1MzOTBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggYjRjODE1ZC4uZDQ5Yjg3NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqICAxOTk3LTExLTI4ICBNb2RpZmllZCBmb3IgUE9TSVguMWIgc2lnbmFscyBieSBSaWNoYXJkIEhlbmRlcnNvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKaW5kZXggMDZhM2ZiYy4uN2JhMjA5MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwpAQCAtMTAsNyArMTAsNiBAQAogICogICAgQnVncmVwb3J0cyB0bzogPExpbnV4MzkwQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggYjI0NDg0OC4uNWI1Nzk5YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CkBAIC01OSw2ICs1OCwyMSBAQAogCiAjZGVmaW5lIEJBU0VEKG5hbWUpIG5hbWUtc3lzdGVtX2NhbGwoJXIxMykKIAorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCS5tYWNybwlUUkFDRV9JUlFTX09OCisJbAklcjEsQkFTRUQoLkx0cmFjZV9pcnFfb24pCisJYmFzcgklcjE0LCVyMQorCS5lbmRtCisKKwkubWFjcm8JVFJBQ0VfSVJRU19PRkYKKwlsCSVyMSxCQVNFRCguTHRyYWNlX2lycV9vZmYpCisJYmFzcgklcjE0LCVyMQorCS5lbmRtCisjZWxzZQorI2RlZmluZSBUUkFDRV9JUlFTX09OCisjZGVmaW5lIFRSQUNFX0lSUVNfT0ZGCisjZW5kaWYKKwogLyoKICAqIFJlZ2lzdGVyIHVzYWdlIGluIGludGVycnVwdCBoYW5kbGVyczoKICAqICAgIFI5ICAtIHBvaW50ZXIgdG8gY3VycmVudCB0YXNrIHN0cnVjdHVyZQpAQCAtOTMsMTMgKzEwNywyMiBAQAogCWwJJXIxMyxfX0xDX1NWQ19ORVdfUFNXKzQJIyBsb2FkICZzeXN0ZW1fY2FsbCB0byAlcjEzCiAJLmVuZG0KIAotCS5tYWNybwlTQVZFX0FMTCBwc3dvcmcsc2F2ZWFyZWEsc3luYworCS5tYWNybwlTQVZFX0FMTF9TWU5DIHBzd29yZyxzYXZlYXJlYQogCWxhCSVyMTIsXHBzd29yZwotCS5pZglcc3luYwogCXRtCVxwc3dvcmcrMSwweDAxCQkjIHRlc3QgcHJvYmxlbSBzdGF0ZSBiaXQKIAlieglCQVNFRCgyZikJCSMgc2tpcCBzdGFjayBzZXR1cCBzYXZlCiAJbAklcjE1LF9fTENfS0VSTkVMX1NUQUNLCSMgcHJvYmxlbSBzdGF0ZSAtPiBsb2FkIGtzcAotCS5lbHNlCisjaWZkZWYgQ09ORklHX0NIRUNLX1NUQUNLCisJYglCQVNFRCgzZikKKzI6CXRtbAklcjE1LFNUQUNLX1NJWkUgLSBDT05GSUdfU1RBQ0tfR1VBUkQKKwlieglCQVNFRChzdGFja19vdmVyZmxvdykKKzM6CisjZW5kaWYKKzI6CisJLmVuZG0KKworCS5tYWNybwlTQVZFX0FMTF9BU1lOQyBwc3dvcmcsc2F2ZWFyZWEKKwlsYQklcjEyLFxwc3dvcmcKIAl0bQlccHN3b3JnKzEsMHgwMQkJIyB0ZXN0IHByb2JsZW0gc3RhdGUgYml0CiAJYm56CUJBU0VEKDFmKQkJIyBmcm9tIHVzZXIgLT4gbG9hZCBhc3luYyBzdGFjawogCWNsYwlccHN3b3JnKzQoNCksQkFTRUQoLkxjcml0aWNhbF9lbmQpCkBAIC0xMTUsNyArMTM4LDYgQEAKIAlzcmEJJXIxNCxTVEFDS19TSElGVAogCWJlCUJBU0VEKDJmKQogMToJbAklcjE1LF9fTENfQVNZTkNfU1RBQ0sKLQkuZW5kaWYKICNpZmRlZiBDT05GSUdfQ0hFQ0tfU1RBQ0sKIAliCUJBU0VEKDNmKQogMjoJdG1sCSVyMTUsU1RBQ0tfU0laRSAtIENPTkZJR19TVEFDS19HVUFSRApAQCAtMTk2LDcgKzIxOCw3IEBACiAJU1RPUkVfVElNRVIgX19MQ19TWU5DX0VOVEVSX1RJTUVSCiBzeXNjX3NhdmVhbGw6CiAJU0FWRV9BTExfQkFTRSBfX0xDX1NBVkVfQVJFQQotICAgICAgICBTQVZFX0FMTCBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBLDEKKwlTQVZFX0FMTF9TWU5DIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKIAlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogCWxoCSVyNywweDhhCSAgIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwpAQCAtMjIxLDggKzI0Myw5IEBACiBzeXNjX25yX29rOgogCW12YwlTUF9BUkdTKDQsJXIxNSksU1BfUjcoJXIxNSkKIHN5c2NfZG9fcmVzdGFydDoKKwlsCSVyOCxCQVNFRCguTHN5c2NfdGFibGUpCiAJdG0JX19USV9mbGFncyszKCVyOSksKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVQpCi0gICAgICAgIGwgICAgICAgJXI4LHN5c19jYWxsX3RhYmxlLXN5c3RlbV9jYWxsKCVyNywlcjEzKSAjIGdldCBzeXN0ZW0gY2FsbCBhZGRyLgorCWwJJXI4LDAoJXI3LCVyOCkJICAjIGdldCBzeXN0ZW0gY2FsbCBhZGRyLgogICAgICAgICBibnogICAgIEJBU0VEKHN5c2NfdHJhY2VzeXMpCiAgICAgICAgIGJhc3IgICAgJXIxNCwlcjggICAgICAgICAgIyBjYWxsIHN5c194eHh4CiAgICAgICAgIHN0ICAgICAgJXIyLFNQX1IyKCVyMTUpICAgIyBzdG9yZSByZXR1cm4gdmFsdWUgKGNoYW5nZSBSMiBvbiBzdGFjaykKQEAgLTMyMyw5ICszNDYsMTAgQEAKIAliYXNyCSVyMTQsJXIxCiAJY2xjCVNQX1IyKDQsJXIxNSksQkFTRUQoLkxucl9zeXNjYWxscykKIAlibmwJQkFTRUQoc3lzY190cmFjZW5vZ28pCisJbAklcjgsQkFTRUQoLkxzeXNjX3RhYmxlKQogCWwJJXI3LFNQX1IyKCVyMTUpICAgICAgICAjIHN0cmFjZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIAogCXNsbAklcjcsMiAgICAgICAgICAgICAgICAgICMgIHN5c3RlbSBjYWxsCi0JbAklcjgsc3lzX2NhbGxfdGFibGUtc3lzdGVtX2NhbGwoJXI3LCVyMTMpCisJbAklcjgsMCglcjcsJXI4KQogc3lzY190cmFjZWdvOgogCWxtCSVyMywlcjYsU1BfUjMoJXIxNSkKIAlsCSVyMixTUF9PUklHX1IyKCVyMTUpCkBAIC0zNTIsNiArMzc2LDcgQEAKIAlzdAklcjE1LFNQX1IxNSglcjE1KQkjIHN0b3JlIHN0YWNrIHBvaW50ZXIgZm9yIG5ldyBrdGhyZWFkCiAwOglsICAgICAgICVyMSxCQVNFRCguTHNjaGVkdGFpbCkKIAliYXNyICAgICVyMTQsJXIxCisJVFJBQ0VfSVJRU19PTgogICAgICAgICBzdG9zbSAgIF9fU0ZfRU1QVFkoJXIxNSksMHgwMyAgICAgIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJYglCQVNFRChzeXNjX3JldHVybikKIApAQCAtNDI1LDcgKzQ1MCw3IEBACiAJU0FWRV9BTExfQkFTRSBfX0xDX1NBVkVfQVJFQQogICAgICAgICB0bSAgICAgIF9fTENfUEdNX0lOVF9DT0RFKzEsMHg4MCAjIGNoZWNrIHdoZXRoZXIgd2UgZ290IGEgcGVyIGV4Y2VwdGlvbgogICAgICAgICBibnogICAgIEJBU0VEKHBnbV9wZXIpICAgICAgICAgICAjIGdvdCBwZXIgZXhjZXB0aW9uIC0+IHNwZWNpYWwgY2FzZQotCVNBVkVfQUxMIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEsMQorCVNBVkVfQUxMX1NZTkMgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgaW50ZXJydXB0aW5nIGZyb20gdXNlciA/CkBAIC00NjQsNyArNDg5LDcgQEAKICMgTm9ybWFsIHBlciBleGNlcHRpb24KICMKIHBnbV9wZXJfc3RkOgotCVNBVkVfQUxMIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEsMQorCVNBVkVfQUxMX1NZTkMgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgaW50ZXJydXB0aW5nIGZyb20gdXNlciA/CkBAIC00OTAsNyArNTE1LDcgQEAKICMgaXQgd2FzIGEgc2luZ2xlIHN0ZXBwZWQgU1ZDIHRoYXQgaXMgY2F1c2luZyBhbGwgdGhlIHRyb3VibGUKICMKIHBnbV9zdmNwZXI6Ci0JU0FWRV9BTEwgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSwxCisJU0FWRV9BTExfU1lOQyBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KQEAgLTUwNyw2ICs1MzIsNyBAQAogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg0LCVyMSksX19MQ19QRVJfQUREUkVTUwogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKIAlvaQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAorCVRSQUNFX0lSUVNfT04KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJYglCQVNFRChzeXNjX2RvX3N2YykKIApAQCAtNTE5LDcgKzU0NSw3IEBACiAJU1RPUkVfVElNRVIgX19MQ19BU1lOQ19FTlRFUl9USU1FUgogCXN0Y2sJX19MQ19JTlRfQ0xPQ0sKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBKzE2Ci0gICAgICAgIFNBVkVfQUxMIF9fTENfSU9fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSsxNiwwCisJU0FWRV9BTExfQVNZTkMgX19MQ19JT19PTERfUFNXLF9fTENfU0FWRV9BUkVBKzE2CiAJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfSU9fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSsxNgogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPwpAQCAtNTMwLDkgKzU1NiwxMSBAQAogaW9fbm9fdnRpbWU6CiAjZW5kaWYKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAorCVRSQUNFX0lSUVNfT0ZGCiAgICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5MZG9fSVJRKSAgICAgICAgIyBsb2FkIGFkZHJlc3Mgb2YgZG9fSVJRCiAgICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCiAgICAgICAgIGJhc3IgICAgJXIxNCwlcjEgICAgICAgICAgIyBicmFuY2ggdG8gc3RhbmRhcmQgaXJxIGhhbmRsZXIKKwlUUkFDRV9JUlFTX09OCiAKIGlvX3JldHVybjoKICAgICAgICAgdG0gICAgICBTUF9QU1crMSglcjE1KSwweDAxICAgICMgcmV0dXJuaW5nIHRvIHVzZXIgPwpAQCAtNjMxLDcgKzY1OSw3IEBACiAJU1RPUkVfVElNRVIgX19MQ19BU1lOQ19FTlRFUl9USU1FUgogCXN0Y2sJX19MQ19JTlRfQ0xPQ0sKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBKzE2Ci0gICAgICAgIFNBVkVfQUxMIF9fTENfRVhUX09MRF9QU1csX19MQ19TQVZFX0FSRUErMTYsMAorCVNBVkVfQUxMX0FTWU5DIF9fTENfRVhUX09MRF9QU1csX19MQ19TQVZFX0FSRUErMTYKIAlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19FWFRfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSsxNgogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPwpAQCAtNjQyLDEwICs2NzAsMTIgQEAKIGV4dF9ub192dGltZToKICNlbmRpZgogCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CisJVFJBQ0VfSVJRU19PRkYKIAlsYQklcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKIAlsaAklcjMsX19MQ19FWFRfSU5UX0NPREUgICMgZ2V0IGludGVycnVwdGlvbiBjb2RlCiAJbAklcjEsQkFTRUQoLkxkb19leHRpbnQpCiAJYmFzcgklcjE0LCVyMQorCVRSQUNFX0lSUVNfT04KIAliCUJBU0VEKGlvX3JldHVybikKIAogX19jcml0aWNhbF9lbmQ6CkBAIC02NTcsMjEgKzY4NywzMSBAQAogICAgICAgICAuZ2xvYmwgbWNja19pbnRfaGFuZGxlcgogbWNja19pbnRfaGFuZGxlcjoKIAlzcHQJX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCSMgcmV2YWxpZGF0ZSBjcHUgdGltZXIKLQltdmMJX19MQ19BU1lOQ19FTlRFUl9USU1FUig4KSxfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEKIAlsbQklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEJIyByZXZhbGlkYXRlIGdwcnMKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBKzMyCiAJbGEJJXIxMixfX0xDX01DS19PTERfUFNXCiAJdG0JX19MQ19NQ0NLX0NPREUsMHg4MCAgICAgIyBzeXN0ZW0gZGFtYWdlPwogCWJvCUJBU0VEKG1jY2tfaW50X21haW4pCSMgeWVzIC0+IHJlc3Qgb2YgbWNjayBjb2RlIGludmFsaWQKLQl0bQlfX0xDX01DQ0tfQ09ERSs1LDB4MDIgICAjIHN0b3JlZCBjcHUgdGltZXIgdmFsdWUgdmFsaWQ/Ci0JYm8JQkFTRUQoMGYpCi0Jc3B0CV9fTENfTEFTVF9VUERBVEVfVElNRVIJIyByZXZhbGlkYXRlIGNwdSB0aW1lcgogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0JbXZjCV9fTENfQVNZTkNfRU5URVJfVElNRVIoOCksX19MQ19MQVNUX1VQREFURV9USU1FUgotCW12YwlfX0xDX1NZTkNfRU5URVJfVElNRVIoOCksX19MQ19MQVNUX1VQREFURV9USU1FUgotCW12YwlfX0xDX0VYSVRfVElNRVIoOCksX19MQ19MQVNUX1VQREFURV9USU1FUgorCW12YwlfX0xDX1NBVkVfQVJFQSs1Mig4KSxfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCisJbXZjCV9fTENfQVNZTkNfRU5URVJfVElNRVIoOCksX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCisJdG0JX19MQ19NQ0NLX0NPREUrNSwweDAyCSMgc3RvcmVkIGNwdSB0aW1lciB2YWx1ZSB2YWxpZD8KKwlibwlCQVNFRCgxZikKKwlsYQklcjE0LF9fTENfU1lOQ19FTlRFUl9USU1FUgorCWNsYwkwKDgsJXIxNCksX19MQ19BU1lOQ19FTlRFUl9USU1FUgorCWJsCUJBU0VEKDBmKQorCWxhCSVyMTQsX19MQ19BU1lOQ19FTlRFUl9USU1FUgorMDoJY2xjCTAoOCwlcjE0KSxfX0xDX0VYSVRfVElNRVIKKwlibAlCQVNFRCgwZikKKwlsYQklcjE0LF9fTENfRVhJVF9USU1FUgorMDoJY2xjCTAoOCwlcjE0KSxfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCisJYmwJQkFTRUQoMGYpCisJbGEJJXIxNCxfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCiswOglzcHQJMCglcjE0KQorCW12YwlfX0xDX0FTWU5DX0VOVEVSX1RJTUVSKDgpLDAoJXIxNCkKKzE6CiAjZW5kaWYKLTA6CXRtCV9fTENfTUNDS19DT0RFKzIsMHgwOSAgICMgbXdwICsgaWEgb2Ygb2xkIHBzdyB2YWxpZD8KKwl0bQlfX0xDX01DQ0tfQ09ERSsyLDB4MDkJIyBtd3AgKyBpYSBvZiBvbGQgcHN3IHZhbGlkPwogCWJubwlCQVNFRChtY2NrX2ludF9tYWluKQkjIG5vIC0+IHNraXAgY2xlYW51cCBjcml0aWNhbAogCXRtCV9fTENfTUNLX09MRF9QU1crMSwweDAxCSMgdGVzdCBwcm9ibGVtIHN0YXRlIGJpdAogCWJueglCQVNFRChtY2NrX2ludF9tYWluKQkjIGZyb20gdXNlciAtPiBsb2FkIGFzeW5jIHN0YWNrCkBAIC02OTEsNyArNzMxLDcgQEAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCV9fTENfTUNDS19DT0RFKzIsMHgwOCAgICMgbXdwIG9mIG9sZCBwc3cgdmFsaWQ/CiAJYm5vCUJBU0VEKG1jY2tfbm9fdnRpbWUpCSMgbm8gLT4gc2tpcCBjbGVhbnVwIGNyaXRpY2FsCi0JdG0JX19MQ19NQ0tfT0xEX1BTVysxLDB4MDEgIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KKwl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgaW50ZXJydXB0aW5nIGZyb20gdXNlciA/CiAJYnoJQkFTRUQobWNja19ub192dGltZSkKIAlVUERBVEVfVlRJTUUgX19MQ19FWElUX1RJTUVSLF9fTENfQVNZTkNfRU5URVJfVElNRVIsX19MQ19VU0VSX1RJTUVSCiAJVVBEQVRFX1ZUSU1FIF9fTENfTEFTVF9VUERBVEVfVElNRVIsX19MQ19FWElUX1RJTUVSLF9fTENfU1lTVEVNX1RJTUVSCkBAIC03MTIsOSArNzUyLDI1IEBACiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgdHVybiBkYXQgb24KIAl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX01DQ0tfUEVORElORwogCWJubwlCQVNFRChtY2NrX3JldHVybikKKwlUUkFDRV9JUlFTX09GRgogCWwJJXIxLEJBU0VEKC5MczM5MF9oYW5kbGVfbWNjaykKIAliYXNyCSVyMTQsJXIxCQkjIGNhbGwgbWFjaGluZSBjaGVjayBoYW5kbGVyCisJVFJBQ0VfSVJRU19PTgogbWNja19yZXR1cm46CisJbXZjCV9fTENfUkVUVVJOX01DQ0tfUFNXKDgpLFNQX1BTVyglcjE1KSAjIG1vdmUgcmV0dXJuIFBTVworCW5pCV9fTENfUkVUVVJOX01DQ0tfUFNXKzEsMHhmZCAjIGNsZWFyIHdhaXQgc3RhdGUgYml0CisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKKwltdmMJX19MQ19BU1lOQ19FTlRFUl9USU1FUig4KSxfX0xDX1NBVkVfQVJFQSs1MgorCXRtCV9fTENfUkVUVVJOX01DQ0tfUFNXKzEsMHgwMSAjIHJldHVybmluZyB0byB1c2VyID8KKwlibm8JQkFTRUQoMGYpCisJbG0JJXIwLCVyMTUsU1BfUjAoJXIxNSkJIyBsb2FkIGdwcnMgMC0xNQorCXN0cHQJX19MQ19FWElUX1RJTUVSCisJbHBzdwlfX0xDX1JFVFVSTl9NQ0NLX1BTVwkjIGJhY2sgdG8gY2FsbGVyCiswOgorI2VuZGlmCisJbG0JJXIwLCVyMTUsU1BfUjAoJXIxNSkJIyBsb2FkIGdwcnMgMC0xNQorCWxwc3cJX19MQ19SRVRVUk5fTUNDS19QU1cJIyBiYWNrIHRvIGNhbGxlcgorCiAgICAgICAgIFJFU1RPUkVfQUxMIF9fTENfUkVUVVJOX01DQ0tfUFNXLDAKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTc4MSw2ICs4MzcsOCBAQAogCS5sb25nCXN5c2NfbGVhdmUgKyAweDgwMDAwMDAwLCBzeXNjX3dvcmtfbG9vcCArIDB4ODAwMDAwMDAKIGNsZWFudXBfdGFibGVfc3lzY193b3JrX2xvb3A6CiAJLmxvbmcJc3lzY193b3JrX2xvb3AgKyAweDgwMDAwMDAwLCBzeXNjX3Jlc2NoZWR1bGUgKyAweDgwMDAwMDAwCitjbGVhbnVwX3RhYmxlX2lvX3JldHVybjoKKwkubG9uZwlpb19yZXR1cm4gKyAweDgwMDAwMDAwLCBpb19sZWF2ZSArIDB4ODAwMDAwMDAKIGNsZWFudXBfdGFibGVfaW9fbGVhdmU6CiAJLmxvbmcJaW9fbGVhdmUgKyAweDgwMDAwMDAwLCBpb19kb25lICsgMHg4MDAwMDAwMAogY2xlYW51cF90YWJsZV9pb193b3JrX2xvb3A6CkBAIC04MDcsNiArODY1LDExIEBACiAJY2xjCTQoNCwlcjEyKSxCQVNFRChjbGVhbnVwX3RhYmxlX3N5c2Nfd29ya19sb29wKzQpCiAJYmwJQkFTRUQoY2xlYW51cF9zeXNjX3JldHVybikKIDA6CisJY2xjCTQoNCwlcjEyKSxCQVNFRChjbGVhbnVwX3RhYmxlX2lvX3JldHVybikKKwlibAlCQVNFRCgwZikKKwljbGMJNCg0LCVyMTIpLEJBU0VEKGNsZWFudXBfdGFibGVfaW9fcmV0dXJuKzQpCisJYmwJQkFTRUQoY2xlYW51cF9pb19yZXR1cm4pCiswOgogCWNsYwk0KDQsJXIxMiksQkFTRUQoY2xlYW51cF90YWJsZV9pb19sZWF2ZSkKIAlibAlCQVNFRCgwZikKIAljbGMJNCg0LCVyMTIpLEJBU0VEKGNsZWFudXBfdGFibGVfaW9fbGVhdmUrNCkKQEAgLTgzOSw3ICs5MDIsNyBAQAogCW12YwlfX0xDX1NBVkVfQVJFQSgxNiksMCglcjEyKQogMDoJc3QJJXIxMyw0KCVyMTIpCiAJc3QJJXIxMixfX0xDX1NBVkVfQVJFQSs0OAkjIGFyZ2gKLQlTQVZFX0FMTCBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBLDEKKwlTQVZFX0FMTF9TWU5DIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKIAlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogCWwJJXIxMixfX0xDX1NBVkVfQVJFQSs0OAkjIGFyZ2gKIAlzdAklcjE1LDEyKCVyMTIpCkBAIC05NzEsNyArMTAzNCwxMiBAQAogLkx0cmFjZTogICAgICAgLmxvbmcgIHN5c2NhbGxfdHJhY2UKIC5MdmZvcms6ICAgICAgIC5sb25nICBzeXNfdmZvcmsKIC5Mc2NoZWR0YWlsOiAgIC5sb25nICBzY2hlZHVsZV90YWlsCi0KKy5Mc3lzY190YWJsZTogIC5sb25nICBzeXNfY2FsbF90YWJsZQorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworLkx0cmFjZV9pcnFfb246LmxvbmcgIHRyYWNlX2hhcmRpcnFzX29uCisuTHRyYWNlX2lycV9vZmY6CisJICAgICAgIC5sb25nICB0cmFjZV9oYXJkaXJxc19vZmYKKyNlbmRpZgogLkxjcml0aWNhbF9zdGFydDoKICAgICAgICAgICAgICAgIC5sb25nICBfX2NyaXRpY2FsX3N0YXJ0ICsgMHg4MDAwMDAwMAogLkxjcml0aWNhbF9lbmQ6CkBAIC05NzksOSArMTA0Nyw4IEBACiAuTGNsZWFudXBfY3JpdGljYWw6CiAgICAgICAgICAgICAgICAubG9uZyAgY2xlYW51cF9jcml0aWNhbAogCisJICAgICAgIC5zZWN0aW9uIC5yb2RhdGEsICJhIgogI2RlZmluZSBTWVNDQUxMKGVzYSxlc2FtZSxlbXUpCS5sb25nIGVzYQotCS5nbG9ibCAgc3lzX2NhbGxfdGFibGUKIHN5c19jYWxsX3RhYmxlOgogI2luY2x1ZGUgInN5c2NhbGxzLlMiCiAjdW5kZWYgU1lTQ0FMTAotCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IDJhYzA5NWIuLjU2ZjVmNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KQEAgLTU5LDYgKzU4LDE5IEBACiAKICNkZWZpbmUgQkFTRUQobmFtZSkgbmFtZS1zeXN0ZW1fY2FsbCglcjEzKQogCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJLm1hY3JvCVRSQUNFX0lSUVNfT04KKwkgYnJhc2wJJXIxNCx0cmFjZV9oYXJkaXJxc19vbgorCS5lbmRtCisKKwkubWFjcm8JVFJBQ0VfSVJRU19PRkYKKwkgYnJhc2wJJXIxNCx0cmFjZV9oYXJkaXJxc19vZmYKKwkuZW5kbQorI2Vsc2UKKyNkZWZpbmUgVFJBQ0VfSVJRU19PTgorI2RlZmluZSBUUkFDRV9JUlFTX09GRgorI2VuZGlmCisKIAkubWFjcm8gIFNUT1JFX1RJTUVSIGxjX29mZnNldAogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAJc3RwdAlcbGNfb2Zmc2V0CkBAIC04NywxMyArOTksMjIgQEAKIAlsYXJsCSVyMTMsc3lzdGVtX2NhbGwKIAkuZW5kbQogCi0gICAgICAgIC5tYWNybyAgU0FWRV9BTEwgcHN3b3JnLHNhdmVhcmVhLHN5bmMKKwkubWFjcm8JU0FWRV9BTExfU1lOQyBwc3dvcmcsc2F2ZWFyZWEKIAlsYQklcjEyLFxwc3dvcmcKLQkuaWYJXHN5bmMKIAl0bQlccHN3b3JnKzEsMHgwMQkJIyB0ZXN0IHByb2JsZW0gc3RhdGUgYml0CiAJanoJMmYJCQkjIHNraXAgc3RhY2sgc2V0dXAgc2F2ZQogCWxnCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBwcm9ibGVtIHN0YXRlIC0+IGxvYWQga3NwCi0JLmVsc2UKKyNpZmRlZiBDT05GSUdfQ0hFQ0tfU1RBQ0sKKwlqCTNmCisyOgl0bWwJJXIxNSxTVEFDS19TSVpFIC0gQ09ORklHX1NUQUNLX0dVQVJECisJanoJc3RhY2tfb3ZlcmZsb3cKKzM6CisjZW5kaWYKKzI6CisJLmVuZG0KKworCS5tYWNybwlTQVZFX0FMTF9BU1lOQyBwc3dvcmcsc2F2ZWFyZWEKKwlsYQklcjEyLFxwc3dvcmcKIAl0bQlccHN3b3JnKzEsMHgwMQkJIyB0ZXN0IHByb2JsZW0gc3RhdGUgYml0CiAJam56CTFmCQkJIyBmcm9tIHVzZXIgLT4gbG9hZCBrZXJuZWwgc3RhY2sKIAljbGMJXHBzd29yZys4KDgpLEJBU0VEKC5MY3JpdGljYWxfZW5kKQpAQCAtMTA4LDcgKzEyOSw2IEBACiAJc3JhZwklcjE0LCVyMTQsU1RBQ0tfU0hJRlQKIAlqegkyZgogMToJbGcJJXIxNSxfX0xDX0FTWU5DX1NUQUNLCSMgbG9hZCBhc3luYyBzdGFjawotCS5lbmRpZgogI2lmZGVmIENPTkZJR19DSEVDS19TVEFDSwogCWoJM2YKIDI6CXRtbAklcjE1LFNUQUNLX1NJWkUgLSBDT05GSUdfU1RBQ0tfR1VBUkQKQEAgLTE4Nyw3ICsyMDcsNyBAQAogCVNUT1JFX1RJTUVSIF9fTENfU1lOQ19FTlRFUl9USU1FUgogc3lzY19zYXZlYWxsOgogCVNBVkVfQUxMX0JBU0UgX19MQ19TQVZFX0FSRUEKLSAgICAgICAgU0FWRV9BTEwgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSwxCisJU0FWRV9BTExfU1lOQyBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAgICAgICAgIENSRUFURV9TVEFDS19GUkFNRSBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAJbGxnaCAgICAlcjcsX19MQ19TVkNfSU5UX0NPREUgIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwpAQCAtMzQ3LDYgKzM2Nyw3IEBACiAJam8JMGYKIAlzdGcJJXIxNSxTUF9SMTUoJXIxNSkJIyBzdG9yZSBzdGFjayBwb2ludGVyIGZvciBuZXcga3RocmVhZAogMDoJYnJhc2wgICAlcjE0LHNjaGVkdWxlX3RhaWwKKwlUUkFDRV9JUlFTX09OCiAgICAgICAgIHN0b3NtICAgMjQoJXIxNSksMHgwMyAgICAgIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJaglzeXNjX3JldHVybgogCkBAIC00NDYsNyArNDY3LDcgQEAKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBCiAgICAgICAgIHRtICAgICAgX19MQ19QR01fSU5UX0NPREUrMSwweDgwICMgY2hlY2sgd2hldGhlciB3ZSBnb3QgYSBwZXIgZXhjZXB0aW9uCiAgICAgICAgIGpueiAgICAgcGdtX3BlciAgICAgICAgICAgICAgICAgICMgZ290IHBlciBleGNlcHRpb24gLT4gc3BlY2lhbCBjYXNlCi0JU0FWRV9BTEwgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSwxCisJU0FWRV9BTExfU1lOQyBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KQEAgLTQ4NSw3ICs1MDYsNyBAQAogIyBOb3JtYWwgcGVyIGV4Y2VwdGlvbgogIwogcGdtX3Blcl9zdGQ6Ci0JU0FWRV9BTEwgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSwxCisJU0FWRV9BTExfU1lOQyBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KQEAgLTUxMSw3ICs1MzIsNyBAQAogIyBpdCB3YXMgYSBzaW5nbGUgc3RlcHBlZCBTVkMgdGhhdCBpcyBjYXVzaW5nIGFsbCB0aGUgdHJvdWJsZQogIwogcGdtX3N2Y3BlcjoKLQlTQVZFX0FMTCBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBLDEKKwlTQVZFX0FMTF9TWU5DIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKIAlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPwpAQCAtNTI4LDYgKzU0OSw3IEBACiAJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDgsJXIxKSxfX0xDX1BFUl9BRERSRVNTCiAJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjEpLF9fTENfUEVSX0FDQ0VTU19JRAogCW9pCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCisJVFJBQ0VfSVJRU19PTgogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKIAlqCXN5c2NfZG9fc3ZjCiAKQEAgLTUzOSw3ICs1NjEsNyBAQAogCVNUT1JFX1RJTUVSIF9fTENfQVNZTkNfRU5URVJfVElNRVIKIAlzdGNrCV9fTENfSU5UX0NMT0NLCiAJU0FWRV9BTExfQkFTRSBfX0xDX1NBVkVfQVJFQSszMgotICAgICAgICBTQVZFX0FMTCBfX0xDX0lPX09MRF9QU1csX19MQ19TQVZFX0FSRUErMzIsMAorCVNBVkVfQUxMX0FTWU5DIF9fTENfSU9fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSszMgogCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX0lPX09MRF9QU1csX19MQ19TQVZFX0FSRUErMzIKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KQEAgLTU1MCw4ICs1NzIsMTAgQEAKIGlvX25vX3Z0aW1lOgogI2VuZGlmCiAJbGcJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CisJVFJBQ0VfSVJRU19PRkYKICAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKIAlicmFzbCAgICVyMTQsZG9fSVJRICAgICAgICAgICAgIyBjYWxsIHN0YW5kYXJkIGlycSBoYW5kbGVyCisJVFJBQ0VfSVJRU19PTgogCiBpb19yZXR1cm46CiAgICAgICAgIHRtICAgICAgU1BfUFNXKzEoJXIxNSksMHgwMSAgICAjIHJldHVybmluZyB0byB1c2VyID8KQEAgLTY0Nyw3ICs2NzEsNyBAQAogCVNUT1JFX1RJTUVSIF9fTENfQVNZTkNfRU5URVJfVElNRVIKIAlzdGNrCV9fTENfSU5UX0NMT0NLCiAJU0FWRV9BTExfQkFTRSBfX0xDX1NBVkVfQVJFQSszMgotICAgICAgICBTQVZFX0FMTCBfX0xDX0VYVF9PTERfUFNXLF9fTENfU0FWRV9BUkVBKzMyLDAKKwlTQVZFX0FMTF9BU1lOQyBfX0xDX0VYVF9PTERfUFNXLF9fTENfU0FWRV9BUkVBKzMyCiAJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfRVhUX09MRF9QU1csX19MQ19TQVZFX0FSRUErMzIKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KQEAgLTY1OCw5ICs2ODIsMTEgQEAKIGV4dF9ub192dGltZToKICNlbmRpZgogCWxnCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAorCVRSQUNFX0lSUVNfT0ZGCiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KSAgICAjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCiAJbGxnaAklcjMsX19MQ19FWFRfSU5UX0NPREUgICMgZ2V0IGludGVycnVwdGlvbiBjb2RlCiAJYnJhc2wgICAlcjE0LGRvX2V4dGludAorCVRSQUNFX0lSUVNfT04KIAlqCWlvX3JldHVybgogCiBfX2NyaXRpY2FsX2VuZDoKQEAgLTY3MiwyMSArNjk4LDMyIEBACiBtY2NrX2ludF9oYW5kbGVyOgogCWxhCSVyMSw0MDk1CQkjIHJldmFsaWRhdGUgcjEKIAlzcHQJX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBLTQwOTUoJXIxKQkjIHJldmFsaWRhdGUgY3B1IHRpbWVyCi0JbXZjCV9fTENfQVNZTkNfRU5URVJfVElNRVIoOCksX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBLTQwOTUoJXIxKQogICAJbG1nICAgICAlcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtNDA5NSglcjEpIyByZXZhbGlkYXRlIGdwcnMKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBKzY0CiAJbGEJJXIxMixfX0xDX01DS19PTERfUFNXCiAJdG0JX19MQ19NQ0NLX0NPREUsMHg4MCAgICAgIyBzeXN0ZW0gZGFtYWdlPwogCWpvCW1jY2tfaW50X21haW4JCSMgeWVzIC0+IHJlc3Qgb2YgbWNjayBjb2RlIGludmFsaWQKLQl0bQlfX0xDX01DQ0tfQ09ERSs1LDB4MDIgICAjIHN0b3JlZCBjcHUgdGltZXIgdmFsdWUgdmFsaWQ/Ci0Jam8JMGYKLQlzcHQJX19MQ19MQVNUX1VQREFURV9USU1FUgogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0JbXZjCV9fTENfQVNZTkNfRU5URVJfVElNRVIoOCksX19MQ19MQVNUX1VQREFURV9USU1FUgotCW12YwlfX0xDX1NZTkNfRU5URVJfVElNRVIoOCksX19MQ19MQVNUX1VQREFURV9USU1FUgotCW12YwlfX0xDX0VYSVRfVElNRVIoOCksX19MQ19MQVNUX1VQREFURV9USU1FUgorCWxhCSVyMTQsNDA5NQorCW12YwlfX0xDX1NBVkVfQVJFQSsxMDQoOCksX19MQ19BU1lOQ19FTlRFUl9USU1FUgorCW12YwlfX0xDX0FTWU5DX0VOVEVSX1RJTUVSKDgpLF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQS00MDk1KCVyMTQpCisJdG0JX19MQ19NQ0NLX0NPREUrNSwweDAyCSMgc3RvcmVkIGNwdSB0aW1lciB2YWx1ZSB2YWxpZD8KKwlqbwkxZgorCWxhCSVyMTQsX19MQ19TWU5DX0VOVEVSX1RJTUVSCisJY2xjCTAoOCwlcjE0KSxfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCisJamwJMGYKKwlsYQklcjE0LF9fTENfQVNZTkNfRU5URVJfVElNRVIKKzA6CWNsYwkwKDgsJXIxNCksX19MQ19FWElUX1RJTUVSCisJamwJMGYKKwlsYQklcjE0LF9fTENfRVhJVF9USU1FUgorMDoJY2xjCTAoOCwlcjE0KSxfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCisJamwJMGYKKwlsYQklcjE0LF9fTENfTEFTVF9VUERBVEVfVElNRVIKKzA6CXNwdAkwKCVyMTQpCisJbXZjCV9fTENfQVNZTkNfRU5URVJfVElNRVIoOCksMCglcjE0KQorMToKICNlbmRpZgotMDoJdG0JX19MQ19NQ0NLX0NPREUrMiwweDA5ICAgIyBtd3AgKyBpYSBvZiBvbGQgcHN3IHZhbGlkPworCXRtCV9fTENfTUNDS19DT0RFKzIsMHgwOQkjIG13cCArIGlhIG9mIG9sZCBwc3cgdmFsaWQ/CiAJam5vCW1jY2tfaW50X21haW4JCSMgbm8gLT4gc2tpcCBjbGVhbnVwIGNyaXRpY2FsCiAJdG0gICAgICBfX0xDX01DS19PTERfUFNXKzEsMHgwMSAjIHRlc3QgcHJvYmxlbSBzdGF0ZSBiaXQKIAlqbnoJbWNja19pbnRfbWFpbgkJIyBmcm9tIHVzZXIgLT4gbG9hZCBrZXJuZWwgc3RhY2sKQEAgLTcwNSw3ICs3NDIsNyBAQAogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAJdG0JX19MQ19NQ0NLX0NPREUrMiwweDA4CSMgbXdwIG9mIG9sZCBwc3cgdmFsaWQ/CiAJam5vCW1jY2tfbm9fdnRpbWUJCSMgbm8gLT4gbm8gdGltZXIgdXBkYXRlCi0JdG0gICAgICBfX0xDX01DS19PTERfUFNXKzEsMHgwMSAjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPworCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KIAlqegltY2NrX25vX3Z0aW1lCiAJVVBEQVRFX1ZUSU1FIF9fTENfRVhJVF9USU1FUixfX0xDX0FTWU5DX0VOVEVSX1RJTUVSLF9fTENfVVNFUl9USU1FUgogCVVQREFURV9WVElNRSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSLF9fTENfRVhJVF9USU1FUixfX0xDX1NZU1RFTV9USU1FUgpAQCAtNzI1LDkgKzc2MiwyMSBAQAogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAkjIHR1cm4gZGF0IG9uCiAJdG0JX19USV9mbGFncys3KCVyOSksX1RJRl9NQ0NLX1BFTkRJTkcKIAlqbm8JbWNja19yZXR1cm4KKwlUUkFDRV9JUlFTX09GRgogCWJyYXNsCSVyMTQsczM5MF9oYW5kbGVfbWNjaworCVRSQUNFX0lSUVNfT04KIG1jY2tfcmV0dXJuOgotICAgICAgICBSRVNUT1JFX0FMTCBfX0xDX1JFVFVSTl9NQ0NLX1BTVywwCisJbXZjCV9fTENfUkVUVVJOX01DQ0tfUFNXKDE2KSxTUF9QU1coJXIxNSkgIyBtb3ZlIHJldHVybiBQU1cKKwluaQlfX0xDX1JFVFVSTl9NQ0NLX1BTVysxLDB4ZmQgIyBjbGVhciB3YWl0IHN0YXRlIGJpdAorCWxtZwklcjAsJXIxNSxTUF9SMCglcjE1KQkjIGxvYWQgZ3BycyAwLTE1CisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKKwltdmMJX19MQ19BU1lOQ19FTlRFUl9USU1FUig4KSxfX0xDX1NBVkVfQVJFQSsxMDQKKwl0bQlfX0xDX1JFVFVSTl9NQ0NLX1BTVysxLDB4MDEgIyByZXR1cm5pbmcgdG8gdXNlciA/CisJam5vCTBmCisJc3RwdAlfX0xDX0VYSVRfVElNRVIKKzA6CisjZW5kaWYKKwlscHN3ZQlfX0xDX1JFVFVSTl9NQ0NLX1BTVwkjIGJhY2sgdG8gY2FsbGVyCiAKICNpZmRlZiBDT05GSUdfU01QCiAvKgpAQCAtNzg5LDYgKzgzOCw4IEBACiAJLnF1YWQJc3lzY19sZWF2ZSwgc3lzY193b3JrX2xvb3AKIGNsZWFudXBfdGFibGVfc3lzY193b3JrX2xvb3A6CiAJLnF1YWQJc3lzY193b3JrX2xvb3AsIHN5c2NfcmVzY2hlZHVsZQorY2xlYW51cF90YWJsZV9pb19yZXR1cm46CisJLnF1YWQJaW9fcmV0dXJuLCBpb19sZWF2ZQogY2xlYW51cF90YWJsZV9pb19sZWF2ZToKIAkucXVhZAlpb19sZWF2ZSwgaW9fZG9uZQogY2xlYW51cF90YWJsZV9pb193b3JrX2xvb3A6CkBAIC04MTUsNiArODY2LDExIEBACiAJY2xjCTgoOCwlcjEyKSxCQVNFRChjbGVhbnVwX3RhYmxlX3N5c2Nfd29ya19sb29wKzgpCiAJamwJY2xlYW51cF9zeXNjX3JldHVybgogMDoKKwljbGMJOCg4LCVyMTIpLEJBU0VEKGNsZWFudXBfdGFibGVfaW9fcmV0dXJuKQorCWpsCTBmCisJY2xjCTgoOCwlcjEyKSxCQVNFRChjbGVhbnVwX3RhYmxlX2lvX3JldHVybis4KQorCWpsCWNsZWFudXBfaW9fcmV0dXJuCiswOgogCWNsYwk4KDgsJXIxMiksQkFTRUQoY2xlYW51cF90YWJsZV9pb19sZWF2ZSkKIAlqbAkwZgogCWNsYwk4KDgsJXIxMiksQkFTRUQoY2xlYW51cF90YWJsZV9pb19sZWF2ZSs4KQpAQCAtODQ3LDcgKzkwMyw3IEBACiAJbXZjCV9fTENfU0FWRV9BUkVBKDMyKSwwKCVyMTIpCiAwOglzdGcJJXIxMyw4KCVyMTIpCiAJc3RnCSVyMTIsX19MQ19TQVZFX0FSRUErOTYJIyBhcmdoCi0JU0FWRV9BTEwgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQSwxCisJU0FWRV9BTExfU1lOQyBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKIAlsZwklcjEyLF9fTENfU0FWRV9BUkVBKzk2CSMgYXJnaAogCXN0ZwklcjE1LDI0KCVyMTIpCkBAIC05NTYsOCArMTAxMiw4IEBACiAuTGNyaXRpY2FsX2VuZDoKICAgICAgICAgICAgICAgIC5xdWFkICBfX2NyaXRpY2FsX2VuZAogCisJICAgICAgIC5zZWN0aW9uIC5yb2RhdGEsICJhIgogI2RlZmluZSBTWVNDQUxMKGVzYSxlc2FtZSxlbXUpCS5sb25nIGVzYW1lCi0JLmdsb2JsICBzeXNfY2FsbF90YWJsZQogc3lzX2NhbGxfdGFibGU6CiAjaW5jbHVkZSAic3lzY2FsbHMuUyIKICN1bmRlZiBTWVNDQUxMCkBAIC05NjUsNyArMTAyMSw2IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCiAjZGVmaW5lIFNZU0NBTEwoZXNhLGVzYW1lLGVtdSkJLmxvbmcgZW11Ci0JLmdsb2JsICBzeXNfY2FsbF90YWJsZV9lbXUKIHN5c19jYWxsX3RhYmxlX2VtdToKICNpbmNsdWRlICJzeXNjYWxscy5TIgogI3VuZGVmIFNZU0NBTEwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggZWE4OGQwNi4uYWRhZDg4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGFyY2gvczM5MC9rZXJuZWwvaGVhZC5TCiAgKgotICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwgMjAwNQorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMTk5OSwyMDA2CiAgKgogICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgpAQCAtMjMsNyArMjMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KQEAgLTQ4MiwyNCArNDgxLDIzIEBACiAKIC5tYWNybyBHRVRfSVBMX0RFVklDRQogLkxnZXRfaXBsX2RldmljZToKLQliYXNyICAlcjEyLDAKLS5MR0lEOglsICAgICAlcjEsMHhiOAkJCSMgZ2V0IHNpZAorCWwgICAgICVyMSwweGI4CQkJIyBnZXQgc2lkCiAJc2xsICAgJXIxLDE1CQkJIyB0ZXN0IGlmIHN1YmNoYW5uZWwgaXMgZW5hYmxlZAogCXNybCAgICVyMSwzMQogCWx0ciAgICVyMSwlcjEKLQlieiAgICAwKCVyMTQpCQkJIyBzdWJjaGFubmVsIGRpc2FibGVkCisJYnogICAgMmYtLkxQRzEoJXIxMykJCSMgc3ViY2hhbm5lbCBkaXNhYmxlZAogCWwgICAgICVyMSwweGI4Ci0JbGEgICAgJXI1LC5MaXBsX3NjaGliLS5MR0lEKCVyMTIpCisJbGEgICAgJXI1LC5MaXBsX3NjaGliLS5MUEcxKCVyMTMpCiAJc3RzY2ggMCglcjUpCQkgICAgICAgICMgZ2V0IHNjaGliIG9mIHN1YmNoYW5uZWwKLQlibnogICAwKCVyMTQpCQkJIyBzY2hpYiBub3QgYXZhaWxhYmxlCisJYm56ICAgMmYtLkxQRzEoJXIxMykJCSMgc2NoaWIgbm90IGF2YWlsYWJsZQogCXRtICAgIDUoJXI1KSwweDAxCQkjIGRldm5vIHZhbGlkPwotCWJubyAgIDAoJXIxNCkKLQlsYSAgICAlcjYsaXBsX3BhcmFtZXRlcl9mbGFncy0uTEdJRCglcjEyKQorCWJubyAgIDJmLS5MUEcxKCVyMTMpCisJbGEgICAgJXI2LGlwbF9wYXJhbWV0ZXJfZmxhZ3MtLkxQRzEoJXIxMykKIAlvaSAgICAzKCVyNiksMHgwMQkJIyBzZXQgZmxhZwotCWxhICAgICVyMixpcGxfZGV2bm8tLkxHSUQoJXIxMikKKwlsYSAgICAlcjIsaXBsX2Rldm5vLS5MUEcxKCVyMTMpCiAJbXZjICAgMCgyLCVyMiksNiglcjUpCQkjIHN0b3JlIGRldm5vCiAJdG0gICAgNCglcjUpLDB4ODAJCSMgcWRpbyBjYXBhYmxlIGRldmljZT8KLQlibm8gICAwKCVyMTQpCisJYm5vICAgMmYtLkxQRzEoJXIxMykKIAlvaSAgICAzKCVyNiksMHgwMgkJIyBzZXQgZmxhZwogCiAJIyBjb3B5IGlwbCBwYXJhbWV0ZXJzCkBAIC01MjMsNyArNTIxLDcgQEAKIAlhciAgICAlcjIsJXIxCiAJc3IgICAgJXIwLCVyNAogCWpuZSAgIDFiCi0JYiAgICAgMCglcjE0KQorCWIgICAgIDJmLS5MUEcxKCVyMTMpCiAKIAkuYWxpZ24gNAogLkxpcGxfc2NoaWI6CkBAIC01MzcsNiArNTM1LDcgQEAKIAkuZ2xvYmwgaXBsX2Rldm5vCiBpcGxfZGV2bm86CiAJLndvcmQgMAorMjoKIC5lbmRtCiAKICNpZmRlZiBDT05GSUdfNjRCSVQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IDJkM2IwODkuLmQwMGRlMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCiAgKgotICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNQorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNSwyMDA2CiAgKgogICogICBBdXRob3Iocyk6CUhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPgogICoJCU1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KQEAgLTE2LDEyICsxNiwzMSBAQAogIyBvciBsaW5sb2FkIG9yIFNBTElQTAogIwogCS5vcmcJMHgxMDAwMAotc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSAjIGdldCBiYXNlCi0uTFBHMToJbAklcjEsIC5MZ2V0X2lwbF9kZXZpY2VfYWRkci0uTFBHMSglcjEzKQotCWJhc3IJJXIxNCwgJXIxCitzdGFydHVwOmJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzA6CWwJJXIxMywwZi0uTFBHMCglcjEzKQorCWIJMCglcjEzKQorMDoJLmxvbmcJc3RhcnR1cF9jb250aW51ZQorCisjCisjIHBhcmFtcyBhdCAxMDQwMCAoc2V0dXAuaCkKKyMKKwkub3JnCVBBUk1BUkVBCisJLmxvbmcJMCwwCQkJIyBJUExfREVWSUNFCisJLmxvbmcJMCxSQU1ESVNLX09SSUdJTgkjIElOSVRSRF9TVEFSVAorCS5sb25nCTAsUkFNRElTS19TSVpFCQkjIElOSVRSRF9TSVpFCisKKwkub3JnCUNPTU1BTkRfTElORQorCS5ieXRlCSJyb290PS9kZXYvcmFtMCBybyIKKwkuYnl0ZQkwCisKKwkub3JnCTB4MTEwMDAKKworc3RhcnR1cF9jb250aW51ZToKKwliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKKy5MUEcxOglHRVRfSVBMX0RFVklDRQogCWxjdGwJJWMwLCVjMTUsLkxjdGwtLkxQRzEoJXIxMykgIyBsb2FkIGNvbnRyb2wgcmVnaXN0ZXJzCi0JbGEJJXIxMixfcHN0YXJ0LS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQotCQkJCQkgIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQorCWwJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQorCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCiAJbXZjCV9fTENfSVBMREVWKDQpLElQTF9ERVZJQ0UtUEFSTUFSRUEoJXIxMikKIAogIwpAQCAtNTEsOCArNzAsOCBAQAogCWEJJXIxLF9fTENfRVhUX05FV19QU1crNAkjIHNldCBoYW5kbGVyCiAJc3QJJXIxLF9fTENfRVhUX05FV19QU1crNAogCi0JbGEJJXI0LF9wc3RhcnQtLkxQRzEoJXIxMykJIyAlcjQgaXMgb3VyIGluZGV4IGZvciBzY2NiIHN0dWZmCi0JbGEJJXIxLCAuTHNjY2ItUEFSTUFSRUEoJXI0KQkjIG91ciBzY2NiCisJbAklcjQsLkxzY2NiYWRkci0uTFBHMSglcjEzKSAjICVyNCBpcyBvdXIgaW5kZXggZm9yIHNjY2Igc3R1ZmYKKwlscgklcjEsJXI0CQkJIyBvdXIgc2NjYgogCS5pbnNuCXJyZSwweGIyMjAwMDAwLCVyMiwlcjEJIyBzZXJ2aWNlIGNhbGwKIAlpcG0JJXIxCiAJc3JsCSVyMSwyOAkJCSMgZ2V0IGNjIGNvZGUKQEAgLTYzLDcgKzgyLDcgQEAKIAliZQkuTHNlcnZpY2VjYWxsLS5MUEcxKCVyMTMpCiAJbHBzdwkuTHdhaXRzY2xwLS5MUEcxKCVyMTMpCiAuTHNjbHBoOgotCWxoCSVyMSwuTHNjY2JyLVBBUk1BUkVBKCVyNCkKKwlsaAklcjEsLkxzY2Nici0uTHNjY2IoJXI0KQogCWNoaQklcjEsMHgxMAkJIyAweDAwMTAgaXMgdGhlIHN1Y2VzcyBjb2RlCiAJamUJLkxwcm9jc2NjYgkJIyBsZXQncyBwcm9jZXNzIHRoZSBzY2NiCiAJY2hpCSVyMSwweDFmMApAQCAtNzQsNyArOTMsNyBAQAogCWIJLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQogLkxwcm9jc2NjYjoKIAlsaGkJJXIxLDAKLQlpY20JJXIxLDMsLkxzY3BpbmNyMS1QQVJNQVJFQSglcjQpICMgdXNlIHRoaXMgb25lIGlmICE9IDAKKwlpY20JJXIxLDMsLkxzY3BpbmNyMS0uTHNjY2IoJXI0KSAjIHVzZSB0aGlzIG9uZSBpZiAhPSAwCiAJam56CS5Mc2NuZAogCWxoaQklcjEsMHg4MDAJCSMgb3RoZXJ3aXNlIHJlcG9ydCAyR0IKIC5Mc2NuZDoKQEAgLTg0LDEwICsxMDMsMTAgQEAKIAlscgklcjEsJXIzCiAuTG5vMmdiOgogCXhyCSVyMywlcjMJCQkjIHNhbWUgbG9naWMKLQlpYwklcjMsLkxzY3BhMS1QQVJNQVJFQSglcjQpCisJaWMJJXIzLC5Mc2NwYTEtLkxzY2NiKCVyNCkKIAljaGkJJXIzLDB4MDAKIAlqbmUJLkxjb21wbWVtCi0JbAklcjMsLkxzY3BhMi1QQVJNQVJFQSglcjEzKQorCWwJJXIzLC5Mc2NwYTItLkxzY2NiKCVyNCkKIC5MY29tcG1lbToKIAltcgklcjIsJXIxCQkJIyBtZW0gaW4gTUIgb24gMTI4LWJpdAogCWwJJXIxLC5Mb25lbWItLkxQRzEoJXIxMykKQEAgLTk1LDggKzExNCw2IEBACiAJYgkuTGZjaHVuay0uTFBHMSglcjEzKQogCiAJLmFsaWduIDQKLS5MZ2V0X2lwbF9kZXZpY2VfYWRkcjoKLQkubG9uZwkuTGdldF9pcGxfZGV2aWNlCiAuTHBtYXNrOgogCS5ieXRlCTAKIC5hbGlnbiA4CkBAIC0yNDIsNiArMjU5LDggQEAKIAkubG9uZwkwCQkJIyBjcjEzOiBob21lIHNwYWNlIHNlZ21lbnQgdGFibGUKIAkubG9uZwkweGMwMDAwMDAwCQkjIGNyMTQ6IG1hY2hpbmUgY2hlY2sgaGFuZGxpbmcgb2ZmCiAJLmxvbmcJMAkJCSMgY3IxNTogbGlua2FnZSBzdGFjayBvcGVyYXRpb25zCisuTGR1Y3Q6CS5sb25nCTAsMCwwLDAsMCwwLDAsMAorCS5sb25nCTAsMCwwLDAsMCwwLDAsMAogLkxwY21lbToubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa21lbQogLkxwY2ZwdToubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa2ZwdQogLkxwY2NzcDoubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa2NzcApAQCAtMjUyLDI1ICsyNzEsOSBAQAogLkxtZmxhZ3M6LmxvbmcJbWFjaGluZV9mbGFncwogLkxic3NfYmduOiAgLmxvbmcgX19ic3Nfc3RhcnQKIC5MYnNzX2VuZDogIC5sb25nIF9lbmQKLQotCS5vcmcJUEFSTUFSRUEtNjQKLS5MZHVjdDoJLmxvbmcJMCwwLDAsMCwwLDAsMCwwCi0JLmxvbmcJMCwwLDAsMCwwLDAsMCwwCi0KLSMKLSMgcGFyYW1zIGF0IDEwNDAwIChzZXR1cC5oKQotIwotCS5vcmcJUEFSTUFSRUEKLQkuZ2xvYmFsIF9wc3RhcnQKLV9wc3RhcnQ6Ci0JLmxvbmcJMCwwCQkJIyBJUExfREVWSUNFCi0JLmxvbmcJMCxSQU1ESVNLX09SSUdJTgkjIElOSVRSRF9TVEFSVAotCS5sb25nCTAsUkFNRElTS19TSVpFCQkjIElOSVRSRF9TSVpFCi0KLQkub3JnCUNPTU1BTkRfTElORQotCS5ieXRlCSJyb290PS9kZXYvcmFtMCBybyIKLQkuYnl0ZQkwCi0JLm9yZwkweDExMDAwCisuTHBhcm1hZGRyOiAubG9uZyBQQVJNQVJFQQorLkxzY2NiYWRkcjogLmxvbmcgLkxzY2NiCisJLmFsaWduCTQwOTYKIC5Mc2NjYjoKIAkuaHdvcmQJMHgxMDAwCQkJIyBsZW5ndGgsIG9uZSBwYWdlCiAJLmJ5dGUJMHgwMCwweDAwLDB4MDAKQEAgLTI4NywxOCArMjkwLDE0IEBACiAuTHNjcGluY3IyOgogCS5xdWFkCTB4MDAKIAkuZmlsbAkzOTg0LDEsMAotCS5vcmcJMHgxMjAwMAotCS5nbG9iYWwJX3BlbmQKLV9wZW5kOgotCi0JR0VUX0lQTF9ERVZJQ0UKKwkuYWxpZ24JNDA5NgogCiAjaWZkZWYgQ09ORklHX1NIQVJFRF9LRVJORUwKIAkub3JnCTB4MTAwMDAwCiAjZW5kaWYKIAogIwotIyBzdGFydHVwLWNvZGUsIHJ1bm5pbmcgaW4gdmlydHVhbCBtb2RlCisjIHN0YXJ0dXAtY29kZSwgcnVubmluZyBpbiBhYnNvbHV0ZSBhZGRyZXNzaW5nIG1vZGUKICMKIAkuZ2xvYmwJX3N0ZXh0CiBfc3RleHQ6CWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKaW5kZXggZjA4YzA2Zi4uNDc3NDRmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKICAqCi0gKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMDUKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAwNgogICoKICAqICAgQXV0aG9yKHMpOglIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQlNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0xNSwxOCArMTUsMzcgQEAKICMgdGhpcyBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBpcGwgbG9hZGVyIG9yIGRpcmVjdGx5IGJ5IFBTVyByZXN0YXJ0CiAjIG9yIGxpbmxvYWQgb3IgU0FMSVBMCiAjCi0gICAgICAgIC5vcmcgIDB4MTAwMDAKLXN0YXJ0dXA6YmFzciAgJXIxMywwICAgICAgICAgICAgICAgICAgICAgIyBnZXQgYmFzZQorCS5vcmcgIDB4MTAwMDAKK3N0YXJ0dXA6YmFzciAgJXIxMywwCQkJICMgZ2V0IGJhc2UKKy5MUEcwOglsICAgICAlcjEzLDBmLS5MUEcwKCVyMTMpCisJYiAgICAgMCglcjEzKQorMDoJLmxvbmcgc3RhcnR1cF9jb250aW51ZQorCisjCisjIHBhcmFtcyBhdCAxMDQwMCAoc2V0dXAuaCkKKyMKKwkub3JnICAgUEFSTUFSRUEKKwkucXVhZCAgMAkJCSMgSVBMX0RFVklDRQorCS5xdWFkICBSQU1ESVNLX09SSUdJTgkJIyBJTklUUkRfU1RBUlQKKwkucXVhZCAgUkFNRElTS19TSVpFCQkjIElOSVRSRF9TSVpFCisKKwkub3JnICAgQ09NTUFORF9MSU5FCisJLmJ5dGUgICJyb290PS9kZXYvcmFtMCBybyIKKwkuYnl0ZSAgMAorCisJLm9yZyAgIDB4MTEwMDAKKworc3RhcnR1cF9jb250aW51ZToKKwliYXNyICAlcjEzLDAJCQkgIyBnZXQgYmFzZQogLkxQRzE6ICBzbGwgICAlcjEzLDEgICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBoaWdoIG9yZGVyIGJpdAogICAgICAgICBzcmwgICAlcjEzLDEKLQlsICAgICAlcjEsLkxnZXRfaXBsX2RldmljZV9hZGRyLS5MUEcxKCVyMTMpCi0JYmFzciAgJXIxNCwlcjEKKwlHRVRfSVBMX0RFVklDRQogICAgICAgICBsaGkgICAlcjEsMSAgICAgICAgICAgICAgICAgICAgICAjIG1vZGUgMSA9IGVzYW1lCiAgICAgICAgIHNsciAgICVyMCwlcjAgICAgICAgICAgICAgICAgICAgICMgc2V0IGNwdWlkIHRvIHplcm8KICAgICAgICAgc2lncCAgJXIxLCVyMCwweDEyICAgICAgICAgICAgICAgIyBzd2l0Y2ggdG8gZXNhbWUgbW9kZQogCXNhbTY0CQkJCSAjIHN3aXRjaCB0byA2NCBiaXQgbW9kZQogCWxjdGxnICVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpICMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwotCWxhcmwgICVyMTIsX3BzdGFydCAgICAgICAgICAgICAgICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQorCWxnICAgICVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkgIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQogICAgICAgICBtdmMgICBfX0xDX0lQTERFVig0KSxJUExfREVWSUNFKzQtUEFSTUFSRUEoJXIxMikKIApAQCAtNTUsOCArNzQsOCBAQAogCWxhcmwgICVyMSwuTHNjbHBoCiAJc3RnICAgJXIxLF9fTENfRVhUX05FV19QU1crOAkjIHNldCBoYW5kbGVyCiAKLQlsYXJsICAlcjQsX3BzdGFydAkJIyAlcjQgaXMgb3VyIGluZGV4IGZvciBzY2NiIHN0dWZmCi0JbGEgICAgJXIxLC5Mc2NjYi1QQVJNQVJFQSglcjQpCSMgb3VyIHNjY2IKKwlsYXJsICAlcjQsLkxzY2NiCQkjICVyNCBpcyBvdXIgaW5kZXggZm9yIHNjY2Igc3R1ZmYKKwlsZ3IgICAlcjEsJXI0CQkJIyBvdXIgc2NjYgogCS5pbnNuIHJyZSwweGIyMjAwMDAwLCVyMiwlcjEJIyBzZXJ2aWNlIGNhbGwKIAlpcG0gICAlcjEKIAlzcmwgICAlcjEsMjgJCQkjIGdldCBjYyBjb2RlCkBAIC02Nyw3ICs4Niw3IEBACiAJYmUgICAgLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQogCWxwc3dlIC5Md2FpdHNjbHAtLkxQRzEoJXIxMykKIC5Mc2NscGg6Ci0JbGggICAgJXIxLC5Mc2NjYnItUEFSTUFSRUEoJXI0KQorCWxoICAgICVyMSwuTHNjY2JyLS5Mc2NjYiglcjQpCiAJY2hpICAgJXIxLDB4MTAJCQkjIDB4MDAxMCBpcyB0aGUgc3VjZXNzIGNvZGUKIAlqZSAgICAuTHByb2NzY2NiCQkjIGxldCdzIHByb2Nlc3MgdGhlIHNjY2IKIAljaGkgICAlcjEsMHgxZjAKQEAgLTc4LDE1ICs5NywxNSBAQAogCWIgICAgIC5Mc2VydmljZWNhbGwtLkxQRzEoJXIxMykKIC5McHJvY3NjY2I6CiAJbGdoaSAgJXIxLDAKLQlpY20gICAlcjEsMywuTHNjcGluY3IxLVBBUk1BUkVBKCVyNCkgIyB1c2UgdGhpcyBvbmUgaWYgIT0gMAorCWljbSAgICVyMSwzLC5Mc2NwaW5jcjEtLkxzY2NiKCVyNCkgIyB1c2UgdGhpcyBvbmUgaWYgIT0gMAogCWpueiAgIC5Mc2NuZAotCWxnICAgICVyMSwuTHNjcGluY3IyLVBBUk1BUkVBKCVyNCkgIyBvdGhlcndpc2UgdXNlIHRoaXMgb25lCisJbGcgICAgJXIxLC5Mc2NwaW5jcjItLkxzY2NiKCVyNCkgIyBvdGhlcndpc2UgdXNlIHRoaXMgb25lCiAuTHNjbmQ6CiAJeHIgICAgJXIzLCVyMwkJCSMgc2FtZSBsb2dpYwotCWljICAgICVyMywuTHNjcGExLVBBUk1BUkVBKCVyNCkKKwlpYyAgICAlcjMsLkxzY3BhMS0uTHNjY2IoJXI0KQogCWNoaSAgICVyMywweDAwCiAJam5lICAgLkxjb21wbWVtCi0JbCAgICAgJXIzLC5Mc2NwYTItUEFSTUFSRUEoJXIxMykKKwlsICAgICAlcjMsLkxzY3BhMi0uTHNjY2IoJXI0KQogLkxjb21wbWVtOgogCW1sZ3IgICVyMiwlcjEJCQkjIG1lbSBpbiBNQiBvbiAxMjgtYml0CiAJbCAgICAgJXIxLC5Mb25lbWItLkxQRzEoJXIxMykKQEAgLTk0LDggKzExMyw2IEBACiAJYiAgICAgLkxmY2h1bmstLkxQRzEoJXIxMykKIAogCS5hbGlnbiA0Ci0uTGdldF9pcGxfZGV2aWNlX2FkZHI6Ci0JLmxvbmcgLkxnZXRfaXBsX2RldmljZQogLkxwbWFzazoKIAkuYnl0ZSAwCiAJLmFsaWduIDgKQEAgLTI0MiwyOSArMjU5LDE2IEBACiAgICAgICAgIC5xdWFkICAwICAgICAgICAgICAgICAgICAgICAgICAgIyBjcjEzOiBob21lIHNwYWNlIHNlZ21lbnQgdGFibGUKICAgICAgICAgLnF1YWQgIDB4YzAwMDAwMDAgICAgICAgICAgICAgICAjIGNyMTQ6IG1hY2hpbmUgY2hlY2sgaGFuZGxpbmcgb2ZmCiAgICAgICAgIC5xdWFkICAwICAgICAgICAgICAgICAgICAgICAgICAgIyBjcjE1OiBsaW5rYWdlIHN0YWNrIG9wZXJhdGlvbnMKKy5MZHVjdDogLmxvbmcgMCwwLDAsMCwwLDAsMCwwCisJLmxvbmcgMCwwLDAsMCwwLDAsMCwwCiAuTHBjbXNrOi5xdWFkICAweDAwMDAwMDAxODAwMDAwMDAKIC5MNG1hbGlnbjoucXVhZCAweGZmZmZmZmZmZmZjMDAwMDAKIC5Mc2NhbjJnOi5xdWFkIDB4ODAwMDAwMDAgKyAweDIwMDAwIC0gOCAjIDJHQiArIDEyOEsgLSA4CiAuTG5vcDoJLmxvbmcgIDB4MDcwMDA3MDAKKy5McGFybWFkZHI6CisJLnF1YWQJUEFSTUFSRUEKIAotCS5vcmcgUEFSTUFSRUEtNjQKLS5MZHVjdDoJLmxvbmcgMCwwLDAsMCwwLDAsMCwwCi0JLmxvbmcgMCwwLDAsMCwwLDAsMCwwCi0KLSMKLSMgcGFyYW1zIGF0IDEwNDAwIChzZXR1cC5oKQotIwotCS5vcmcgICBQQVJNQVJFQQotCS5nbG9iYWwgX3BzdGFydAotX3BzdGFydDoKLQkucXVhZCAgMCAgICAgICAgICAgICAgICAgICAgICAgICMgSVBMX0RFVklDRQotICAgICAgICAucXVhZCAgUkFNRElTS19PUklHSU4gICAgICAgICAgICMgSU5JVFJEX1NUQVJUCi0gICAgICAgIC5xdWFkICBSQU1ESVNLX1NJWkUgICAgICAgICAgICAgIyBJTklUUkRfU0laRQotCi0gICAgICAgIC5vcmcgICBDT01NQU5EX0xJTkUKLSAgICAJLmJ5dGUgICJyb290PS9kZXYvcmFtMCBybyIKLSAgICAgICAgLmJ5dGUgIDAKLQkub3JnICAgMHgxMTAwMAorCS5hbGlnbiA0MDk2CiAuTHNjY2I6CiAJLmh3b3JkIDB4MTAwMAkJCSMgbGVuZ3RoLCBvbmUgcGFnZQogCS5ieXRlIDB4MDAsMHgwMCwweDAwCkBAIC0yODEsMTggKzI4NSwxNCBAQAogLkxzY3BpbmNyMjoKIAkucXVhZCAweDAwCiAJLmZpbGwgMzk4NCwxLDAKLQkub3JnIDB4MTIwMDAKLQkuZ2xvYmFsIF9wZW5kCi1fcGVuZDoJCi0KLQlHRVRfSVBMX0RFVklDRQorCS5hbGlnbiA0MDk2CiAKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTAogCS5vcmcgICAweDEwMDAwMAogI2VuZGlmCiAJCiAjCi0jIHN0YXJ0dXAtY29kZSwgcnVubmluZyBpbiB2aXJ0dWFsIG1vZGUKKyMgc3RhcnR1cC1jb2RlLCBydW5uaW5nIGluIGFic29sdXRlIGFkZHJlc3NpbmcgbW9kZQogIwogICAgICAgICAuZ2xvYmwgX3N0ZXh0CiBfc3RleHQ6CWJhc3IgICVyMTMsMCAgICAgICAgICAgICAgICAgICAgIyBnZXQgYmFzZQpAQCAtMzI2LDQgKzMyNiwzIEBACiAgICAgICAgICAgICAuYWxpZ24gOAogLkxkdzogICAgICAgLnF1YWQgIDB4MDAwMjAwMDE4MDAwMDAwMCwweDAwMDAwMDAwMDAwMDAwMDAKIC5MYXJlZ3M6ICAgIC5sb25nICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCi0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXJxLmMgYi9hcmNoL3MzOTAva2VybmVsL2lycS5jCmluZGV4IDQ4MGI2YTUuLjFlZWY1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcnEuYwpAQCAtNjksMTAgKzY5LDYgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwotCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCiAJaWYgKGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSB7CiAJCS8qIEdldCBjdXJyZW50IHN0YWNrIHBvaW50ZXIuICovCiAJCWFzbSB2b2xhdGlsZSgibGEgJTAsMCgxNSkiIDogIj1hIiAob2xkKSk7CkBAIC05NSwxMCArOTEsNiBAQAogCQkJX19kb19zb2Z0aXJxKCk7CiAJfQogCi0JYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7Ci0KLQlfX2xvY2FsX2JoX2VuYWJsZSgpOwotCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDRhMGY1YTEuLjc4YzhlNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTQzLDYgKzE0Miw3IEBACiAJCXJldHVybjsKIAl9CiAKKwl0cmFjZV9oYXJkaXJxc19vbigpOwogCS8qIFdhaXQgZm9yIGV4dGVybmFsLCBJL08gb3IgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHQuICovCiAJX19sb2FkX3Bzd19tYXNrKFBTV19LRVJORUxfQklUUyB8IFBTV19NQVNLX1dBSVQgfAogCQkJUFNXX01BU0tfSU8gfCBQU1dfTUFTS19FWFQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwppbmRleCA0MTc2Yzc3Li5jNzNhNDU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwpAQCAtMyw3ICszLDYgQEAKICAqCiAgKiAgUzM5MCB2ZXJzaW9uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTQ2LDggKzQ1LDYgQEAKICAqLwogZXh0ZXJuIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncyk7CiBFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKLUVYUE9SVF9TWU1CT0wob3ZlcmZsb3d1aWQpOwotRVhQT1JUX1NZTUJPTChvdmVyZmxvd2dpZCk7CiBFWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYjI4MjAzNC4uMWNhMzRmNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTM3LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTE1LDYgKzExNSw3IEBACiAgKi8KIGNoYXIgdm1oYWx0X2NtZFsxMjhdID0gIiI7CiBjaGFyIHZtcG9mZl9jbWRbMTI4XSA9ICIiOworY2hhciB2bXBhbmljX2NtZFsxMjhdID0gIiI7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdHJuY3B5X3NraXBfcXVvdGUoY2hhciAqZHN0LCBjaGFyICpzcmMsIGludCBuKQogewpAQCAtMTQ2LDYgKzE0NywzOCBAQAogCiBfX3NldHVwKCJ2bXBvZmY9Iiwgdm1wb2ZmX3NldHVwKTsKIAorc3RhdGljIGludCB2bXBhbmljX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkgIHZvaWQgKmRhdGEpCit7CisJaWYgKE1BQ0hJTkVfSVNfVk0gJiYgc3RybGVuKHZtcGFuaWNfY21kKSA+IDApCisJCWNwY21kKHZtcGFuaWNfY21kLCBOVUxMLCAwLCBOVUxMKTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKyNkZWZpbmUgUEFOSUNfUFJJX1ZNUEFOSUMJMAorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHZtcGFuaWNfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB2bXBhbmljX25vdGlmeSwKKwkucHJpb3JpdHkgPSBQQU5JQ19QUklfVk1QQU5JQworfTsKKworc3RhdGljIGludCBfX2luaXQgdm1wYW5pY19zZXR1cChjaGFyICpzdHIpCit7CisJc3RhdGljIGludCByZWdpc3Rlcl9kb25lIF9faW5pdGRhdGEgPSAwOworCisJc3RybmNweV9za2lwX3F1b3RlKHZtcGFuaWNfY21kLCBzdHIsIDEyNyk7CisJdm1wYW5pY19jbWRbMTI3XSA9IDA7CisJaWYgKCFyZWdpc3Rlcl9kb25lKSB7CisJCXJlZ2lzdGVyX2RvbmUgPSAxOworCQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJCSAgICAgICAmdm1wYW5pY19uYik7CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJ2bXBhbmljPSIsIHZtcGFuaWNfc2V0dXApOworCiAvKgogICogY29uZGV2PSBhbmQgY29ubW9kZT0gc2V0dXAgcGFyYW1ldGVyLgogICovCkBAIC0yODksMTkgKzMyMiwzNCBAQAogCiB2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQogewotCWNvbnNvbGVfdW5ibGFuaygpOworCWlmICghaW5faW50ZXJydXB0KCkgfHwgb29wc19pbl9wcm9ncmVzcykKKwkJLyoKKwkJICogT25seSB1bmJsYW5rIHRoZSBjb25zb2xlIGlmIHdlIGFyZSBjYWxsZWQgaW4gZW5hYmxlZAorCQkgKiBjb250ZXh0IG9yIGEgYnVzdF9zcGlubG9ja3MgY2xlYXJlZCB0aGUgd2F5IGZvciB1cy4KKwkJICovCisJCWNvbnNvbGVfdW5ibGFuaygpOwogCV9tYWNoaW5lX3Jlc3RhcnQoY29tbWFuZCk7CiB9CiAKIHZvaWQgbWFjaGluZV9oYWx0KHZvaWQpCiB7Ci0JY29uc29sZV91bmJsYW5rKCk7CisJaWYgKCFpbl9pbnRlcnJ1cHQoKSB8fCBvb3BzX2luX3Byb2dyZXNzKQorCQkvKgorCQkgKiBPbmx5IHVuYmxhbmsgdGhlIGNvbnNvbGUgaWYgd2UgYXJlIGNhbGxlZCBpbiBlbmFibGVkCisJCSAqIGNvbnRleHQgb3IgYSBidXN0X3NwaW5sb2NrcyBjbGVhcmVkIHRoZSB3YXkgZm9yIHVzLgorCQkgKi8KKwkJY29uc29sZV91bmJsYW5rKCk7CiAJX21hY2hpbmVfaGFsdCgpOwogfQogCiB2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JY29uc29sZV91bmJsYW5rKCk7CisJaWYgKCFpbl9pbnRlcnJ1cHQoKSB8fCBvb3BzX2luX3Byb2dyZXNzKQorCQkvKgorCQkgKiBPbmx5IHVuYmxhbmsgdGhlIGNvbnNvbGUgaWYgd2UgYXJlIGNhbGxlZCBpbiBlbmFibGVkCisJCSAqIGNvbnRleHQgb3IgYSBidXN0X3NwaW5sb2NrcyBjbGVhcmVkIHRoZSB3YXkgZm9yIHVzLgorCQkgKi8KKwkJY29uc29sZV91bmJsYW5rKCk7CiAJX21hY2hpbmVfcG93ZXJfb2ZmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCmluZGV4IGQ0OGNmYzcuLmE4ODdiNjg2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKQEAgLTExLDcgKzExLDYgQEAKICAqICAxOTk3LTExLTI4ICBNb2RpZmllZCBmb3IgUE9TSVguMWIgc2lnbmFscyBieSBSaWNoYXJkIEhlbmRlcnNvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvc3RhY2t0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODNmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogYXJjaC9zMzkwL2tlcm5lbC9zdGFja3RyYWNlLmMKKyAqCisgKiBTdGFjayB0cmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CisgKiAgQXV0aG9yKHMpOiBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNhdmVfY29udGV4dF9zdGFjayhzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpza2lwLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzcCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG93LAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBoaWdoKQoreworCXN0cnVjdCBzdGFja19mcmFtZSAqc2Y7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJd2hpbGUoMSkgeworCQlzcCAmPSBQU1dfQUREUl9JTlNOOworCQlpZiAoc3AgPCBsb3cgfHwgc3AgPiBoaWdoKQorCQkJcmV0dXJuIHNwOworCQlzZiA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKilzcDsKKwkJd2hpbGUoMSkgeworCQkJYWRkciA9IHNmLT5ncHJzWzhdICYgUFNXX0FERFJfSU5TTjsKKwkJCWlmICghKCpza2lwKSkKKwkJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CisJCQllbHNlCisJCQkJKCpza2lwKS0tOworCQkJaWYgKHRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllcykKKwkJCQlyZXR1cm4gc3A7CisJCQlsb3cgPSBzcDsKKwkJCXNwID0gc2YtPmJhY2tfY2hhaW4gJiBQU1dfQUREUl9JTlNOOworCQkJaWYgKCFzcCkKKwkJCQlicmVhazsKKwkJCWlmIChzcCA8PSBsb3cgfHwgc3AgPiBoaWdoIC0gc2l6ZW9mKCpzZikpCisJCQkJcmV0dXJuIHNwOworCQkJc2YgPSAoc3RydWN0IHN0YWNrX2ZyYW1lICopc3A7CisJCX0KKwkJLyogWmVybyBiYWNrY2hhaW4gZGV0ZWN0ZWQsIGNoZWNrIGZvciBpbnRlcnJ1cHQgZnJhbWUuICovCisJCXNwID0gKHVuc2lnbmVkIGxvbmcpKHNmICsgMSk7CisJCWlmIChzcCA8PSBsb3cgfHwgc3AgPiBoaWdoIC0gc2l6ZW9mKCpyZWdzKSkKKwkJCXJldHVybiBzcDsKKwkJcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKXNwOworCQlhZGRyID0gcmVncy0+cHN3LmFkZHIgJiBQU1dfQUREUl9JTlNOOworCQlpZiAoISgqc2tpcCkpCisJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CisJCWVsc2UKKwkJCSgqc2tpcCktLTsKKwkJaWYgKHRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllcykKKwkJCXJldHVybiBzcDsKKwkJbG93ID0gc3A7CisJCXNwID0gcmVncy0+Z3Byc1sxNV07CisJfQorfQorCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwKKwkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgYWxsX2NvbnRleHRzLAorCQkgICAgICB1bnNpZ25lZCBpbnQgc2tpcCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHNwIGFzbSAoIjE1Iik7CisJdW5zaWduZWQgbG9uZyBvcmlnX3NwOworCisJc3AgJj0gUFNXX0FERFJfSU5TTjsKKwlvcmlnX3NwID0gc3A7CisKKwlzcCA9IHNhdmVfY29udGV4dF9zdGFjayh0cmFjZSwgJnNraXAsIHNwLAorCQkJCVMzOTBfbG93Y29yZS5wYW5pY19zdGFjayAtIFBBR0VfU0laRSwKKwkJCQlTMzkwX2xvd2NvcmUucGFuaWNfc3RhY2spOworCWlmICgoc3AgIT0gb3JpZ19zcCkgJiYgIWFsbF9jb250ZXh0cykKKwkJcmV0dXJuOworCXNwID0gc2F2ZV9jb250ZXh0X3N0YWNrKHRyYWNlLCAmc2tpcCwgc3AsCisJCQkJUzM5MF9sb3djb3JlLmFzeW5jX3N0YWNrIC0gQVNZTkNfU0laRSwKKwkJCQlTMzkwX2xvd2NvcmUuYXN5bmNfc3RhY2spOworCWlmICgoc3AgIT0gb3JpZ19zcCkgJiYgIWFsbF9jb250ZXh0cykKKwkJcmV0dXJuOworCWlmICh0YXNrKQorCQlzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsICZza2lwLCBzcCwKKwkJCQkgICAodW5zaWduZWQgbG9uZykgdGFza19zdGFja19wYWdlKHRhc2spLAorCQkJCSAgICh1bnNpZ25lZCBsb25nKSB0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSk7CisJZWxzZQorCQlzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsICZza2lwLCBzcCwgUzM5MF9sb3djb3JlLnRocmVhZF9pbmZvLAorCQkJCSAgIFMzOTBfbG93Y29yZS50aHJlYWRfaW5mbyArIFRIUkVBRF9TSVpFKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDJhNmM2ZWYuLmY3ZmU5YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCBhNDY3OTNiLi4xMjI0MGMwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAnVHJhcHMuYycgaGFuZGxlcyBoYXJkd2FyZSB0cmFwcyBhbmQgZmF1bHRzIGFmdGVyIHdlIGhhdmUgc2F2ZWQgc29tZQogICogc3RhdGUgaW4gJ2FzbS5zJy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xNTAsMTMgKzE0OSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwogCWludCBpOwogCi0JLy8gZGVidWdnaW5nIGFpZDogInNob3dfc3RhY2soTlVMTCk7IiBwcmludHMgdGhlCi0JLy8gYmFjayB0cmFjZSBmb3IgdGhpcyBjcHUuCi0KIAlpZiAoIXNwKQotCQlzcCA9IHRhc2sgPyAodW5zaWduZWQgbG9uZyAqKSB0YXNrLT50aHJlYWQua3NwIDogX19yMTU7CisJCXN0YWNrID0gdGFzayA/ICh1bnNpZ25lZCBsb25nICopIHRhc2stPnRocmVhZC5rc3AgOiBfX3IxNTsKKwllbHNlCisJCXN0YWNrID0gc3A7CiAKLQlzdGFjayA9IHNwOwogCWZvciAoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgewogCQlpZiAoKChhZGRyX3QpIHN0YWNrICYgKFRIUkVBRF9TSVpFLTEpKSA9PSAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOWYzNGJiNS4uZmY1ZjdiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMyw3ICszLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKIE9VVFBVVF9GT1JNQVQoImVsZjMyLXMzOTAiLCAiZWxmMzItczM5MCIsICJlbGYzMi1zMzkwIikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwppbmRleCAxZjA0MzlkLi4yMzA2Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCkBAIC03LDcgKzcsNiBAQAogICogICAgQXV0aG9yKHMpOiBKYW4gR2xhdWJlciA8amFuLmdsYXViZXJAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCmluZGV4IDcxZjBhMmYuLjQ2OGY0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTExLDcgKzExLDYgQEAKICAqICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gTWFyZXMgPG1qQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbWF0aC1lbXUvbWF0aC5jIGIvYXJjaC9zMzkwL21hdGgtZW11L21hdGguYwppbmRleCA2NDhkZjcxLi5iNDk1N2M4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbWF0aC1lbXUvbWF0aC5jCisrKyBiL2FyY2gvczM5MC9tYXRoLWVtdS9tYXRoLmMKQEAgLTksNyArOSw2IEBACiAgKiAgICAgICAgICB0aGF0IGRvZXMgbm90IGhhdmUgdGhlIElFRUUgZnB1IChhbGwgcHJvY2Vzc29ycyBiZWZvcmUgRzUpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCA1MTU5NmY0Li44MWJlMmZlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC04LDcgKzgsNiBAQAogICogIENvbGxhYm9yYXRpdmUgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJmYWNlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA4MWFkZTQwLi44MzNkNTk0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMTAsNyArMTAsNiBAQAogICogICAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggYTA1NTg5NC4uZWI2ZWJmZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC05LDcgKzksNiBAQAogICogICAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjQsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIApAQCAtOTAsMTcgKzkxLDYgQEAKICAgICAgICAgcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIixjYWNoZWQpOwogfQogCi0vKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcyAqLwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfdGV4dDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9ldGV4dDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9lZGF0YTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fYnNzX3N0YXJ0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2VuZDsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0X2JlZ2luOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0X2VuZDsKLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSB6aG9sZXNfc2l6ZVtdOwogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKQEAgLTExNyw2ICsxMDcsMTAgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4gPSAwOwogICAgICAgICB1bnNpZ25lZCBsb25nIHBnZGlyX2sgPSAoX19wYShzd2FwcGVyX3BnX2RpcikgJiBQQUdFX01BU0spIHwgX0tFUk5TRUdfVEFCTEU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc3NtX21hc2sgPSAweDA0MDAwMDAwTDsKKwl1bnNpZ25lZCBsb25nIHJvX3N0YXJ0X3Bmbiwgcm9fZW5kX3BmbjsKKworCXJvX3N0YXJ0X3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YSk7CisJcm9fZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKTsKIAogCS8qIHVubWFwIHdob2xlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwogCQpAQCAtMTQ0LDcgKzEzOCwxMCBAQAogICAgICAgICAgICAgICAgIHBnX2RpcisrOwogCiAgICAgICAgICAgICAgICAgZm9yICh0bXAgPSAwIDsgdG1wIDwgUFRSU19QRVJfUFRFIDsgdG1wKysscGdfdGFibGUrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHRlID0gcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMKTsKKwkJCWlmIChwZm4gPj0gcm9fc3RhcnRfcGZuICYmIHBmbiA8IHJvX2VuZF9wZm4pCisJCQkJcHRlID0gcGZuX3B0ZShwZm4sIF9fcGdwcm90KF9QQUdFX1JPKSk7CisJCQllbHNlCisJCQkJcHRlID0gcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZm4gPj0gbWF4X2xvd19wZm4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ZV9jbGVhcigmaW5pdF9tbSwgMCwgJnB0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHRlKHBnX3RhYmxlLCBwdGUpOwpAQCAtMTc2LDYgKzE3Myw3IEBACiB9CiAKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLworCiB2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQogewogICAgICAgICBwZ2RfdCAqIHBnX2RpcjsKQEAgLTE4NywxMyArMTg1LDE1IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGdkaXJfayA9IChfX3BhKHN3YXBwZXJfcGdfZGlyKSAmIFBBR0VfTUFTSykgfAogICAgICAgICAgIF9LRVJOX1JFR0lPTl9UQUJMRTsKIAlzdGF0aWMgY29uc3QgaW50IHNzbV9tYXNrID0gMHgwNDAwMDAwMEw7Ci0KIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAl1bnNpZ25lZCBsb25nIGRtYV9wZm4sIGhpZ2hfcGZuOworCXVuc2lnbmVkIGxvbmcgcm9fc3RhcnRfcGZuLCByb19lbmRfcGZuOwogCiAJbWVtc2V0KHpvbmVzX3NpemUsIDAsIHNpemVvZih6b25lc19zaXplKSk7CiAJZG1hX3BmbiA9IE1BWF9ETUFfQUREUkVTUyA+PiBQQUdFX1NISUZUOwogCWhpZ2hfcGZuID0gbWF4X2xvd19wZm47CisJcm9fc3RhcnRfcGZuID0gUEZOX0RPV04oKHVuc2lnbmVkIGxvbmcpJl9fc3RhcnRfcm9kYXRhKTsKKwlyb19lbmRfcGZuID0gUEZOX1VQKCh1bnNpZ25lZCBsb25nKSZfX2VuZF9yb2RhdGEpOwogCiAJaWYgKGRtYV9wZm4gPiBoaWdoX3BmbikKIAkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBoaWdoX3BmbjsKQEAgLTIzMiw3ICsyMzIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtX2RpciwgcHRfZGlyKTsKIAkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDAgOyBrIDwgUFRSU19QRVJfUFRFIDsgaysrLHB0X2RpcisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCk7CisJCQkJaWYgKHBmbiA+PSByb19zdGFydF9wZm4gJiYgcGZuIDwgcm9fZW5kX3BmbikKKwkJCQkJcHRlID0gcGZuX3B0ZShwZm4sIF9fcGdwcm90KF9QQUdFX1JPKSk7CisJCQkJZWxzZQorCQkJCQlwdGUgPSBwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGZuID49IG1heF9sb3dfcGZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRlX2NsZWFyKCZpbml0X21tLCAwLCAmcHRlKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yODMsNiArMjg2LDkgQEAKICAgICAgICAgICAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKICAgICAgICAgICAgICAgICBkYXRhc2l6ZSA+PjEwLAogICAgICAgICAgICAgICAgIGluaXRzaXplID4+IDEwKTsKKwlwcmludGsoIldyaXRlIHByb3RlY3RlZCBrZXJuZWwgcmVhZC1vbmx5IGRhdGE6ICUjbHggLSAlI2x4XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZykmX19zdGFydF9yb2RhdGEsCisJICAgICAgIFBGTl9BTElHTigodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKSAtIDEpOwogfQogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDJiY2VjZjQuLjFhMGRiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTQ2NSwxMCArNDY1LDEwIEBACiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKLQkgIGJ1dCBpdCBpcyBpbmRlcGVkZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICBBbmQgbGlrZSBhIHJlYm9vdAorCSAgYnV0IGl0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICBBbmQgbGlrZSBhIHJlYm9vdAogCSAgeW91IGNhbiBzdGFydCBhbnkga2VybmVsIHdpdGggaXQsIG5vdCBqdXN0IExpbnV4LgogCi0JICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBzaW1pbGlhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KKwkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsYXJpdHkgdG8gdGhlIGV4ZWMgc3lzdGVtIGNhbGwuCiAKIAkgIEl0IGlzIGFuIG9uZ29pbmcgcHJvY2VzcyB0byBiZSBjZXJ0YWluIHRoZSBoYXJkd2FyZSBpbiBhIG1hY2hpbmUKIAkgIGlzIHByb3Blcmx5IHNodXRkb3duLCBzbyBkbyBub3QgYmUgc3VycHJpc2VkIGlmIHRoaXMgY29kZSBkb2VzIG5vdApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYWR4L2lycV9tYXNrcmVnLmMgYi9hcmNoL3NoL2JvYXJkcy9hZHgvaXJxX21hc2tyZWcuYwppbmRleCBjMDk3M2Y4Li40YjJhYmU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9hZHgvaXJxX21hc2tyZWcuYworKysgYi9hcmNoL3NoL2JvYXJkcy9hZHgvaXJxX21hc2tyZWcuYwpAQCAtMTMsNyArMTMsNiBAQAogICogRWFjaCBiaXQgb2YgdGhlIHJlZ2lzdGVyIGlzIGZvciBtYXNraW5nIGVhY2ggaW50ZXJydXB0LiAgCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KQEAgLTEwMiw2ICsxMDEsNiBAQAogdm9pZCBtYWtlX21hc2tyZWdfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJm1hc2tyZWdfaXJxX3R5cGU7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJm1hc2tyZWdfaXJxX3R5cGU7CiAJZGlzYWJsZV9tYXNrcmVnX2lycShpcnEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvaW8uYwppbmRleCBhOWZkZTc4Li42ODM1MzgxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvaW8uYwpAQCAtMTQsNyArMTQsNiBAQAogICogSU8gZnVuY3Rpb25zIGZvciBhIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2lycS5jCmluZGV4IDZkZGJjYzcuLmFjOTQ2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvaXJxLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNTMsNyArMjUyLDcgQEAKICAgICAgICAgLyogc2FuaXR5IGNoZWNrIGZpcnN0ICovCiAgICAgICAgIGlmKGlycSA+PSBCSUdTVVJfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfSVJRX0hJR0gpIHsKICAgICAgICAgICAgICAgICAvKiBzYXZlIHRoZSBoYW5kbGVyIGluIHRoZSBtYWluIGRlc2NyaXB0aW9uIHRhYmxlICovCi0gICAgICAgICAgICAgICAgaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJmJpZ3N1cl9sMWlycV90eXBlOworICAgICAgICAgICAgICAgIGlycV9kZXNjW2lycV0uY2hpcCA9ICZiaWdzdXJfbDFpcnFfdHlwZTsKICAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKICAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLmFjdGlvbiA9IDA7CiAgICAgICAgICAgICAgICAgaXJxX2Rlc2NbaXJxXS5kZXB0aCA9IDE7CkBAIC0yNzAsNyArMjY5LDcgQEAKICAgICAgICAgLyogc2FuaXR5IGNoZWNrIGZpcnN0ICovCiAgICAgICAgIGlmKGlycSA+PSBCSUdTVVJfMk5ETFZMX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSXzJORExWTF9JUlFfSElHSCkgewogICAgICAgICAgICAgICAgIC8qIHNhdmUgdGhlIGhhbmRsZXIgaW4gdGhlIG1haW4gZGVzY3JpcHRpb24gdGFibGUgKi8KLSAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmYmlnc3VyX2wyaXJxX3R5cGU7CisgICAgICAgICAgICAgICAgaXJxX2Rlc2NbaXJxXS5jaGlwID0gJmJpZ3N1cl9sMmlycV90eXBlOwogICAgICAgICAgICAgICAgIGlycV9kZXNjW2lycV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwogICAgICAgICAgICAgICAgIGlycV9kZXNjW2lycV0uYWN0aW9uID0gMDsKICAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLmRlcHRoID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9sZWQuYwppbmRleCAwYTIzMzljLi42YjA4YzBlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2xlZC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBUaGlzIGZpbGUgY29udGFpbnMgQmlnIFN1ciBzcGVjaWZpYyBMRUQgY29kZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2JpZ3N1ci9iaWdzdXIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvc2V0dXAuYwppbmRleCBlNjliZTA1Li5kZmVlZGU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvc2V0dXAuYwpAQCAtMjAsNyArMjAsNiBAQAogICogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvY2F0Njg3MDEvc2V0dXAuYwppbmRleCBhZThhMzUwLi45MGU1MTc1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2NhdDY4NzAxL3NldHVwLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9jcXJlZWsvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9jcXJlZWsvaXJxLmMKaW5kZXggZDFkYTBkOC4uMjk1NWFkYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvY3FyZWVrL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9pcnEuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCWNxcmVla19pcnFfZGF0YVsxNF0uc3RhdF9wb3J0ID0gQlJJREdFX0lERV9JTlRSX1NUQVQ7CiAJCWNxcmVla19pcnFfZGF0YVsxNF0uYml0ID0gMTsKIAotCQlpcnFfZGVzY1sxNF0uaGFuZGxlciA9ICZjcXJlZWtfaXJxX3R5cGU7CisJCWlycV9kZXNjWzE0XS5jaGlwID0gJmNxcmVla19pcnFfdHlwZTsKIAkJaXJxX2Rlc2NbMTRdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbMTRdLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjWzE0XS5kZXB0aCA9IDE7CkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJY3FyZWVrX2lycV9kYXRhWzEwXS5iaXQgPSAoMSA8PCAxMCk7CiAKIAkJLyogWFhYOiBFcnIuLi4gd2UgbWF5IG5lZWQgZGVtdWx0aXBsZXhlciBmb3IgSVNBIGlycS4uLiAqLwotCQlpcnFfZGVzY1sxMF0uaGFuZGxlciA9ICZjcXJlZWtfaXJxX3R5cGU7CisJCWlycV9kZXNjWzEwXS5jaGlwID0gJmNxcmVla19pcnFfdHlwZTsKIAkJaXJxX2Rlc2NbMTBdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbMTBdLmFjdGlvbiA9IDA7CiAJCWlycV9kZXNjWzEwXS5kZXB0aCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9jcXJlZWsvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9zZXR1cC5jCmluZGV4IDI5YjUzN2MuLmVmZjRlZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9zZXR1cC5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvZHJlYW1jYXN0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3Qvc2V0dXAuYwppbmRleCA1NWRlY2UzLi4wMDI3YjgwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3Qvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3Qvc2V0dXAuYwpAQCAtNzAsNyArNzAsNyBAQAogCiAJLyogQXNzaWduIGFsbCB2aXJ0dWFsIElSUXMgdG8gdGhlIFN5c3RlbSBBU0lDIGludC4gaGFuZGxlciAqLwogCWZvciAoaSA9IEhXX0VWRU5UX0lSUV9CQVNFOyBpIDwgSFdfRVZFTlRfSVJRX01BWDsgaSsrKQotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnN5c3RlbWFzaWNfaW50OworCQlpcnFfZGVzY1tpXS5jaGlwID0gJnN5c3RlbWFzaWNfaW50OwogCiAJYm9hcmRfdGltZV9pbml0ID0gYWljYV90aW1lX2luaXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvZWMzMTA0L3NldHVwLmMKaW5kZXggNTEzMGJhMi4uNGIzZWYxNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvZWMzMTA0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvZWMzMTA0L3NldHVwLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJc3RyW2ldID0gY3RybF9yZWFkYihFQzMxMDRfQkFTRSArIGkpOwogCiAJZm9yIChpID0gRUMzMTA0X0lSUUJBU0U7IGkgPCBFQzMxMDRfSVJRQkFTRSArIDMyOyBpKyspCi0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZWMzMTA0X2ludDsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlYzMxMDRfaW50OwogCiAJcHJpbnRrKCJpbml0aWFsaXppbmcgRUMzMTA0IFwiJS44c1wiIGF0ICUwOHgsIElSUSAlZCwgSVJRIGJhc2UgJWRcbiIsCiAJICAgICAgIHN0ciwgRUMzMTA0X0JBU0UsIEVDMzEwNF9JUlEsIEVDMzEwNF9JUlFCQVNFKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9oYXJwL2lycS5jCmluZGV4IDUyZDBiYTMuLjk2YmI0MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvaGFycC9pcnEuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEJhc2VzIG9uIHRoZSBJUFIgaXJxIHN5c3RlbQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKQEAgLTExNCw3ICsxMTMsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG1ha2VfaGFycF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaGFycF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmaGFycF9pcnFfdHlwZTsKIAlkaXNhYmxlX2hhcnBfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9oYXJwL2xlZC5jCmluZGV4IDc2Y2E0Y2MuLmFlYjdiMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvaGFycC9sZWQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBTVDQwU1RCMSBIQVJQIGFuZCBjb21wYXRpYmxlIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJwL2hhcnAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvaGFycC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaGFycC9zZXR1cC5jCmluZGV4IDA1YjAxYjguLjg4NmU0NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9oYXJwL3NldHVwLmMKQEAgLTksNyArOSw2IEBACiAgKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q0MFNUQjEgSEFSUCBhbmQgY29tcGF0aWJsZSBzdXBwb3J0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvc2V0dXAuYwppbmRleCA2ZDk0YThlLi43MWYzMTU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3NldHVwLmMKQEAgLTksNyArOSw2IEBACiAgKiBTZXR1cCBjb2RlIGZvciBhbiBIUDY4MCAgKGludGVybmFsIHBlcmlwaGVyaWFscyBvbmx5KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL2xlZC5jCmluZGV4IDBhMzFiZWUuLjFmZTM2OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9sZWQuYwpAQCAtNiw3ICs2LDYgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBJbnRlcmZhY2UgTVBDLTEyMTEgc3BlY2lmaWMgTEVEIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdGF0aWMgdm9pZCBtYWNoX2xlZChpbnQgcG9zaXRpb24sIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvcGNpLmMgYi9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3BjaS5jCmluZGV4IGJhM2E2NTQuLjRlZDFhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvcGNpLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9wY2kuYwpAQCAtMTEsNyArMTEsNiBAQAogICogIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI3Myw5ICsyNzIsOSBAQAogfQogCiB2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQlpZiAoc3RhcnQgPj0gMHgxMDAwMFVMKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3NldHVwLmMKaW5kZXggMmJiNTgxYi4uMmJmYjIyMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvc2V0dXAuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgpAQCAtMTk0LDcgKzE5Myw3IEBACiAKIHN0YXRpYyB2b2lkIG1ha2VfbXBjMTIxMV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmbXBjMTIxMV9pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmbXBjMTIxMV9pcnFfdHlwZTsKIAlpcnFfZGVzY1tpcnFdLnN0YXR1cyAgPSBJUlFfRElTQUJMRUQ7CiAJaXJxX2Rlc2NbaXJxXS5hY3Rpb24gID0gMDsKIAlpcnFfZGVzY1tpcnFdLmRlcHRoICAgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2ZwZ2EuYyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9mcGdhLmMKaW5kZXggM2ExZWM5NC4uOTU2YzIzOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2ZwZ2EuYworKysgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvZnBnYS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9nYWxpbGVvLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvZ2FsaWxlby5jCmluZGV4IDI3NmZhMTEuLjI5ZTQ4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9nYWxpbGVvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2dhbGlsZW8uYwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CkBAIC01MzYsNyArNTM1LDcgQEAKIH0KIAogdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKKwkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaW8uYwppbmRleCA2NWYzZmQwLi40NjcxYjZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaW8uYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaXJxLmMKaW5kZXggNzE1ZThmZS4uNWQ3MzBjNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9pcnEuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEJhc2VzIG9uIHRoZSBJUFIgaXJxIHN5c3RlbQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKQEAgLTE1MCw3ICsxNDksNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG1ha2Vfb2RfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJm9kX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZvZF9pcnFfdHlwZTsKIAlkaXNhYmxlX29kX2lycShpcnEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvbGVkLmMKaW5kZXggNzM0NzQyZS4uODYwZDdmMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2xlZC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9sZWQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBhbiBPdmVyZHJpdmUgc3BlY2lmaWMgTEVEIGZlYXR1cmUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vb3ZlcmRyaXZlL292ZXJkcml2ZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvc2V0dXAuYwppbmRleCA5NGY2MTY1Li5hM2E3NzQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvc2V0dXAuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFNUTWljcm9lbGVjdHJvbmljcyBPdmVyZHJpdmUgU3VwcG9ydC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9lZG9zazc3MDUvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvZWRvc2s3NzA1L3NldHVwLmMKaW5kZXggOGI2ZjBjMi4uYmExNDNmYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9lZG9zazc3MDUvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2Vkb3NrNzcwNS9zZXR1cC5jCkBAIC05LDcgKzksNiBAQAogICogYm9hcmQgYnkgUy4gRHVubiwgMjAwMy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pby5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pby5jCmluZGV4IDQ1Njc1M2QuLjNhMWFiZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lvLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIGV4cGVjdGF0aW9uIG9mIGxhdGVyIFN1cGVySU8gYW5kIFBDTUNJQSBhY2Nlc3MuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pcnEuYwppbmRleCBlZDRjNWI1Li43MDViN2RkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaXJxLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIExpbmVvIHVTb2x1dGlvbnMsIEluYy4gMjAwMy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtODYsNyArODUsNyBAQAogc3RhdGljIHZvaWQgbWFrZV9oczc3NTFydm9pcF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaHM3NzUxcnZvaXBfaXJxX3R5cGU7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJmhzNzc1MXJ2b2lwX2lycV90eXBlOwogCWRpc2FibGVfaHM3NzUxcnZvaXBfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2xlZC5jCmluZGV4IDE4YTEzYzguLmI2NjA4ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9sZWQuYwpAQCAtMTAsNyArMTAsNiBAQAogICogTGluZW8gdVNvbHV0aW9ucywgSW5jLiAyMDAzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL21hY2guYwppbmRleCA4YmJlZDYwLi5jYWY5NjdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL21hY2guYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL21hY2guYwpAQCAtOSw3ICs5LDYgQEAKICAqIE1hY2hpbmUgdmVjdG9yIGZvciB0aGUgUmVuZXNhcyBUZWNobm9sb2d5IHNhbGVzIEhTNzc1MVJWb0lQCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL3BjaS5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9wY2kuYwppbmRleCA3YTQ0MmQxLi43ZTU3ODZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL3BjaS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvcGNpLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFJlbmVzYXMgU0g3NzUxUiBIUzc3NTFSVm9JUCBib2FyZAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvc2V0dXAuYwppbmRleCBmMWE3OGI2Li4yOWZiNWZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9zZXR1cC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBMaW5lbyB1U29sdXRpb25zLCBJbmMuIDIwMDMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jCmluZGV4IGQzNmM5MzcuLjE1NDUzNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvaXJxLmMKQEAgLTksNyArOSw2IEBACiAgKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMTAwLDcgKzk5LDcgQEAKIHN0YXRpYyB2b2lkIG1ha2VfcnRzNzc1MXIyZF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmcnRzNzc1MXIyZF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmcnRzNzc1MXIyZF9pcnFfdHlwZTsKIAlkaXNhYmxlX3J0czc3NTFyMmRfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9sZWQuYwppbmRleCA5OTkzMjU5Li40ZDE2ZGU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2xlZC5jCkBAIC05LDcgKzksNiBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIFJlbmVzYXMgVGVjaG5vbG9neSBTYWxlcyBSVFM3NzUxUjJEIHNwZWNpZmljIExFRCBjb2RlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvbWFjaC5jCmluZGV4IDYxMDc0MDUuLjVlZDllOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9tYWNoLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL21hY2guYwpAQCAtOSw3ICs5LDYgQEAKICAqIE1hY2hpbmUgdmVjdG9yIGZvciB0aGUgUmVuZXNhcyBUZWNobm9sb2d5IHNhbGVzIFJUUzc3NTFSMkQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9pcnEuYwppbmRleCA3YTJlYjEwLi44MzcyZDk2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3N5c3RlbWgvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zeXN0ZW1oL2lycS5jCkBAIC05LDcgKzksNiBAQAogICogSm9uYXRoYW4gU2hvcnQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApAQCAtMTA1LDcgKzEwNCw3IEBACiB2b2lkIG1ha2Vfc3lzdGVtaF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmc3lzdGVtaF9pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmc3lzdGVtaF9pcnFfdHlwZTsKIAlkaXNhYmxlX3N5c3RlbWhfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaW8uYwppbmRleCAzYzg5ZGVmLi5mNDQ5YTk0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9pby5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzAwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9pcnEuYwppbmRleCA5NmM4YzIzLi4yMTZhNzhkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaXJxLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvbGVkLmMKaW5kZXggMDJjN2Y4NC4uYWQ1MWYwYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9sZWQuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2xlZC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBUaGlzIGZpbGUgY29udGFpbnMgU29sdXRpb24gRW5naW5lIHNwZWNpZmljIExFRCBjb2RlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3NlNzMwMC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL3NldHVwLmMKaW5kZXggMDg1MzZiYy4uZWJjZDk4ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvc2V0dXAuYwpAQCAtNyw3ICs3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjX2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pby5jCmluZGV4IDczNjQ4Y2IuLjc1NWRmNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaW8uYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3NlNzMxODAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaXJxLmMKaW5kZXggNzBmMDRjYS4uNDM0NGQwZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaXJxLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC04NSw3ICs4NCw3IEBACiBtYWtlX2ludHJlcV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaW50cmVxX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbnRyZXFfaXJxX3R5cGU7CiAJZGlzYWJsZV9pbnRyZXFfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvbGVkLmMKaW5kZXggMWU4ZjFjZi4uNjEwNDM5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvbGVkLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBTb2x1dGlvbiBFbmdpbmUgc3BlY2lmaWMgTEVEIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzE4MC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvc2V0dXAuYwppbmRleCAwN2ZhOTBjLi5jZGI3YjVmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL3NldHVwLmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pcnEuYwppbmRleCAyMTA4OTdiLi4zZTU1ODcxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvaXJxLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvbGVkLmMKaW5kZXggNWM2NGU4YS4uM2NkZGJkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9sZWQuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2xlZC5jCkBAIC05LDcgKzksNiBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIFNvbHV0aW9uIEVuZ2luZSBzcGVjaWZpYyBMRUQgY29kZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NlL3NlLmg+CiAKIHN0YXRpYyB2b2lkIG1hY2hfbGVkKGludCBwb3NpdGlvbiwgaW50IHZhbHVlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L21hY2guYwppbmRleCBmOWI0YzU2Li42ZWMwN2JkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L21hY2guYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L21hY2guYwpAQCAtOSw3ICs5LDYgQEAKICAqIE1hY2hpbmUgdmVjdG9yIGZvciB0aGUgSGl0YWNoaSBTb2x1dGlvbkVuZ2luZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9zZXR1cC5jCmluZGV4IDJiZWQ0NmYuLjdkMWEwNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L3NldHVwLmMKQEAgLTgsNyArOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2lycS5jCmluZGV4IGFkNzFmM2UuLmJmNmMwMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9pcnEuYwpAQCAtOSw3ICs5LDYgQEAKICAqIElhbiBkYSBTaWx2YSBhbmQgSmVyZW15IFNpZWdlbCwgMjAwMS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2xlZC5jCmluZGV4IDBjNzg4MjMuLmE4Nzg3MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9sZWQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBTb2x1dGlvbiBFbmdpbmUgc3BlY2lmaWMgTEVEIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZTc3NTEvc2U3NzUxLmg+CiAKIHN0YXRpYyB2b2lkIG1hY2hfbGVkKGludCBwb3NpdGlvbiwgaW50IHZhbHVlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL21hY2guYwppbmRleCAxNmQzODZiLi42MmQ4ZDNlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL21hY2guYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL21hY2guYwpAQCAtOSw3ICs5LDYgQEAKICAqIE1hY2hpbmUgdmVjdG9yIGZvciB0aGUgSGl0YWNoaSA3NzUxIFNvbHV0aW9uRW5naW5lCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3BjaS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9wY2kuYwppbmRleCAxZjI3M2VmLi4zZWUwMzAxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3BjaS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvcGNpLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIEhpdGFjaGkgU0g3NzUxIFNvbHV0aW9uIEVuZ2luZSBib2FyZCAoTVM3NzUxU0UwMSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3NldHVwLmMKaW5kZXggOWQxMTFiYi4uNDhkYzVhZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYwpAQCAtOSw3ICs5LDYgQEAKICAqIElhbiBkYSBTaWx2YSBhbmQgSmVyZW15IFNpZWdlbCwgMjAwMS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zaDAzL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvc2gwMy9sZWQuYwppbmRleCBjODUxYjBiLi5kMzg1NjJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zaDAzL2xlZC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvbGVkLmMKQEAgLTYsNyArNiw2IEBACiAgKiBUaGlzIGZpbGUgY29udGFpbnMgSW50ZXJmYWNlIENUUC9QQ0ktU0gwMyBzcGVjaWZpYyBMRUQgY29kZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlkZXIvU3VuIHBhdHRlcm4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYwppbmRleCBkMmEwOGNhLi42MDI5MGY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zaDAzL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2gwMy9zZXR1cC5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zaDIwMDAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jCmluZGV4IGEyOTBiMWQuLjJmZTZhMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zbmFwZ2Vhci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvc2V0dXAuYwppbmRleCAwOGZjOTgzLi5mMWY3YzcwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zbmFwZ2Vhci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3NldHVwLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC01MSw3ICs1MCw3IEBACiB7CiAJcHJpbnRrKCJTbmFwR2VhcjogRXJhc2VDb25maWcgaW5pdFxuIik7CiAJLyogU2V0dXAgIkVyYXNlQ29uZmlnIiBzd2l0Y2ggb24gZXh0ZXJuYWwgSVJRIDAgKi8KLQlpZiAocmVxdWVzdF9pcnEoSVJMMF9JUlEsIGVyYXNlY29uZmlnX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCWlmIChyZXF1ZXN0X2lycShJUkwwX0lSUSwgZXJhc2Vjb25maWdfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkJCSJFcmFzZSBDb25maWciLCBOVUxMKSkKIAkJcHJpbnRrKCJTbmFwR2VhcjogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSVkIGZvciBSZXNldCB3aXRjaFxuIiwKIAkJCQlJUkwwX0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pby5jCmluZGV4IDFlZDdmODguLjQ4MzZiOTQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYwpAQCAtMTEsNyArMTEsNiBAQAogICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2lycS5jCmluZGV4IGVmY2JkODYuLjIzNjM5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaXJxLmMKQEAgLTksNyArOSw2IEBACiAgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApAQCAtMTQ3LDcgKzE0Niw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbWFrZV9taWNyb2Rldl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmbWljcm9kZXZfaXJxX3R5cGU7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJm1pY3JvZGV2X2lycV90eXBlOwogCWRpc2FibGVfbWljcm9kZXZfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9sZWQuYwppbmRleCA1MmE5OGU2Li5hMzhmNTM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2xlZC5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgTEVEX1JFR0lTVEVSIDB4YTYxMDRkMjAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L3NldHVwLmMKaW5kZXggODkyYjE0ZC4uNjFiNDAyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L3NldHVwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvdW5rbm93bi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvdW5rbm93bi9zZXR1cC5jCmluZGV4IDAyZTg0ZjAuLmM1ZTRlZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3Vua25vd24vc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy91bmtub3duL3NldHVwLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIG1ldGhvZCB0byBzdGFydCBkZWJ1Z2dpbmcgYSBuZXcgYm9hcmQgZHVyaW5nIGJyaW5nLXVwIHVudGlsIHByb3BlciBib2FyZAogICogc2V0dXAgY29kZSBpcyB3cml0dGVuLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IDg4ZGIwNGQuLjRjMjZhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTcsNyArNyw2IEBACiAKIC50ZXh0CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKIAkuZ2xvYmFsCXN0YXJ0dXAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAyMTFlOTExLi5mMmZlZDVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBNb2RpZmllZCB0byB1c2Ugc3RhbmRhcmQgTGludXhTSCBCSU9TIGJ5IEdyZWcgQmFua3MgN0p1bDIwMDAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwogI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEvaW8uYyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9pby5jCmluZGV4IDRjMDYyZDYuLmFjMzA2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9pby5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9pby5jCkBAIC00LDcgKzQsNiBAQAogICoJVHlwaWNhbCBJL08gcm91dGluZXMgZm9yIEhENjQ0NjEgc3lzdGVtLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS9oZDY0NDYxLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9zZXR1cC5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMKaW5kZXggZjAxNGI5Yi4uYWQxMjYwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMKQEAgLTQsNyArNCw2IEBACiAgKglIaXRhY2hpIEhENjQ0NjEgY29tcGFuaW9uIGNoaXAgc3VwcG9ydAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTM0LDcgKzEzMyw3IEBACiAJcmV0dXJuIF9faXJxX2RlbXV4KGlycSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7IGhkNjQ0NjFfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJIRDY0NDYxIiwgTlVMTCwgTlVMTCB9Oworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCA9IHsgaGQ2NDQ2MV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIENQVV9NQVNLX05PTkUsICJIRDY0NDYxIiwgTlVMTCwgTlVMTCB9OwogCiBpbnQgX19pbml0IHNldHVwX2hkNjQ0NjEodm9pZCkKIHsKQEAgLTE1NCw3ICsxNTMsNyBAQAogCW91dHcoMHhmZmZmLCBIRDY0NDYxX05JTVIpOwogCiAJZm9yIChpID0gSEQ2NDQ2MV9JUlFCQVNFOyBpIDwgSEQ2NDQ2MV9JUlFCQVNFICsgMTY7IGkrKykgewotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmhkNjQ0NjFfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmaGQ2NDQ2MV9pcnFfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoQ09ORklHX0hENjQ0NjFfSVJRLCAmaXJxMCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjUvZ3Bpby5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDY1L2dwaW8uYwppbmRleCA5Nzg1ZmRlLi43MjMyMGQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjUvZ3Bpby5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9ncGlvLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWlmICghcmVxdWVzdF9yZWdpb24oSEQ2NDQ2NV9SRUdfR1BBQ1IsIDB4MTAwMCwgTU9ETkFNRSkpCiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKHJlcXVlc3RfaXJxKEhENjQ0NjVfSVJRX0dQSU8sIGhkNjQ0NjVfZ3Bpb19pbnRlcnJ1cHQsCi0JICAgIAkJU0FfSU5URVJSVVBULCBNT0ROQU1FLCAwKSkKKwkgICAgCQlJUlFGX0RJU0FCTEVELCBNT0ROQU1FLCAwKSkKIAkJZ290byBvdXRfaXJxZmFpbGVkOwogCiAgICAgCXByaW50aygiSEQ2NDQ2NSBHUElPIGxheWVyIG9uIGlycSAlZFxuIiwgSEQ2NDQ2NV9JUlFfR1BJTyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjUvaW8uYyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9pby5jCmluZGV4IDg0Y2IxNDIuLjU4NzA0ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9pby5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9pby5jCkBAIC05LDcgKzksNiBAQAogICogVHlwaWNhbCBJL08gcm91dGluZXMgZm9yIEhENjQ0NjUgc3lzdGVtLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9zZXR1cC5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDY1L3NldHVwLmMKaW5kZXggNjhlNGM0ZS4uZDJiMjg1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDY1L3NldHVwLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDY1L3NldHVwLmMKQEAgLTksNyArOSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgWUFFR0FTSEkgVGFrZXNoaQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTU0LDcgKzE1Myw3IEBACiAJcmV0dXJuIGlycTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7IGhkNjQ0NjVfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJIRDY0NDY1IiwgTlVMTCwgTlVMTH07CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsgaGQ2NDQ2NV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIENQVV9NQVNLX05PTkUsICJIRDY0NDY1IiwgTlVMTCwgTlVMTH07CiAKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfaGQ2NDQ2NSh2b2lkKQpAQCAtMTgyLDcgKzE4MSw3IEBACiAJb3V0dygweGZmZmYsIEhENjQ0NjVfUkVHX05JTVIpOyAJLyogbWFzayBhbGwgaW50ZXJydXB0cyAqLwogCiAJZm9yIChpID0gMDsgaSA8IEhENjQ0NjVfSVJRX05VTSA7IGkrKykgewotCQlpcnFfZGVzY1tIRDY0NDY1X0lSUV9CQVNFICsgaV0uaGFuZGxlciA9ICZoZDY0NDY1X2lycV90eXBlOworCQlpcnFfZGVzY1tIRDY0NDY1X0lSUV9CQVNFICsgaV0uY2hpcCA9ICZoZDY0NDY1X2lycV90eXBlOwogCX0KIAogCXNldHVwX2lycShDT05GSUdfSEQ2NDQ2NV9JUlEsICZpcnEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9pcnEuYyBiL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9pcnEuYwppbmRleCAyZWUzMzBiLi4wZGMxZmI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvaXJxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L2lycS5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE2Niw3ICsxNjUsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLm5hbWUJCT0gInZveWFnZXJneCIsCiAJLmhhbmRsZXIJPSB2b3lhZ2VyZ3hfaW50ZXJydXB0LAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKQEAgLTE5MSw3ICsxOTAsNyBAQAogCQkJZmxhZyA9IDE7CiAJCX0KIAkJaWYgKGZsYWcgPT0gMSkKLQkJCWlycV9kZXNjW1ZPWUFHRVJfSVJRX0JBU0UgKyBpXS5oYW5kbGVyID0gJnZveWFnZXJneF9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW1ZPWUFHRVJfSVJRX0JBU0UgKyBpXS5jaGlwID0gJnZveWFnZXJneF9pcnFfdHlwZTsKIAl9CiAKIAlzZXR1cF9pcnEoSVJRX1ZPWUFHRVIsICZpcnEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWcyLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1nMi5jCmluZGV4IDVhZmFiNmYuLjBmODY2ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWcyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtZzIuYwpAQCAtNTYsNyArNTYsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZzJfZG1hX2lycSA9IHsKIAkubmFtZQkJPSAiZzIgRE1BIGhhbmRsZXIiLAogCS5oYW5kbGVyCT0gZzJfZG1hX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAogfTsKIAogc3RhdGljIGludCBnMl9lbmFibGVfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYwppbmRleCBkZjYwNDk3Li4zMGE1ODBhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCkBAIC03MCw3ICs3MCw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwdnIyX2RtYV9pcnEgPSB7CiAJLm5hbWUJCT0gInB2cjIgRE1BIGhhbmRsZXIiLAogCS5oYW5kbGVyCT0gcHZyMl9kbWFfaW50ZXJydXB0LAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRtYV9vcHMgcHZyMl9kbWFfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKaW5kZXggY2NhMjZjNC4uZTAyOGEyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC05MSw3ICs5MCw3IEBACiAJCSBjaGFuLT5jaGFuKTsKIAogCXJldHVybiByZXF1ZXN0X2lycShnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbiksIGRtYV90ZWksCi0JCQkgICBTQV9JTlRFUlJVUFQsIG5hbWUsIGNoYW4pOworCQkJICAgSVJRRl9ESVNBQkxFRCwgbmFtZSwgY2hhbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2RtYWNfZnJlZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMjU5LDcgKzI1OCw3IEBACiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINAogCW1ha2VfaXByX2lycShETUFFX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKLQlpID0gcmVxdWVzdF9pcnEoRE1BRV9JUlEsIGRtYV9lcnIsIFNBX0lOVEVSUlVQVCwgIkRNQUMgQWRkcmVzcyBFcnJvciIsIDApOworCWkgPSByZXF1ZXN0X2lycShETUFFX0lSUSwgZG1hX2VyciwgSVJRRl9ESVNBQkxFRCwgIkRNQUMgQWRkcmVzcyBFcnJvciIsIDApOwogCWlmIChpIDwgMCkKIAkJcmV0dXJuIGk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZG1hLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9kbWEtZHJlYW1jYXN0LmMKaW5kZXggZTEyNDE4Yi4uNmFjZjAyYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9kbWEtZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9kbWEtZHJlYW1jYXN0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKaW5kZXggY2YzMGUyZi4uNjNiMWM2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWJpZ3N1ci5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtYmlnc3VyLmMKaW5kZXggOWI0M2RhNi4uYWU4MmM2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtYmlnc3VyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtYmlnc3VyLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1kcmVhbWNhc3QuYwppbmRleCA2OWFmODBiLi4yM2Q1Mjc5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1kcmVhbWNhc3QuYwpAQCAtMTUsNyArMTUsNiBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCmluZGV4IGJlYWZhMTEuLjgzMTcxZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFJlbmVzYXMgU0g3NzUxUiBSVFM3NzUxUjJEIGJvYXJkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2gwMy5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2gwMy5jCmluZGV4IGRmMjE5OTcuLmU1OGQ1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoMDMuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDAzLmMKQEAgLTQsNyArNCw2IEBACiAgKiBQQ0kgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBJbnRlcmZhY2UgQ1RQL1BDSS1TSDAzIGJvYXJkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc25hcGdlYXIuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNuYXBnZWFyLmMKaW5kZXggNmZkYjk3Ni4uM2NiZDE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc25hcGdlYXIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zbmFwZ2Vhci5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBQQ0kgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBTbmFwR2VhciBib2FyZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCmluZGV4IDMwYjE0YWMuLjY4MmYzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCkBAIC0xNSw3ICsxNSw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zdDQwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zdDQwLmMKaW5kZXggY2I2NzUyMS4uN2M4MWI4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc3Q0MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXN0NDAuYwpAQCAtNyw3ICs3LDYgQEAKICAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgU1Q0MCBQQ0kgaGFyZHdhcmUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CkBAIC00NDgsNyArNDQ3LDcgQEAKIAkJICAgICBQSFlTQUREUihtZW1vcnlfZW5kKSAtIFBIWVNBRERSKG1lbW9yeV9zdGFydCkpOwogCiAJaWYgKHJlcXVlc3RfaXJxKFNUNDBQQ0lfRVJSX0lSUSwgc3Q0MF9wY2lfaXJxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIFNBX0lOVEVSUlVQVCwgInN0NDBwY2kiLCBOVUxMKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRCwgInN0NDBwY2kiLCBOVUxMKSkgewogCQlwcmludGsoS0VSTl9FUlIgInN0NDBwY2k6IENhbm5vdCBob29rIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGMxNjY5OTAuLjNkNTQ2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNzUsNyArNzUsNyBAQAogfQogCiB2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiAJCQkgICAgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKIAogLyoKQEAgLTg1LDEwICs4NSwxMCBAQAogICogbW9kdWxvIDB4NDAwLgogICovCiB2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJCWlmIChzdGFydCAmIDB4MzAwKSB7CiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NmLWVuYWJsZXIuYyBiL2FyY2gvc2gva2VybmVsL2NmLWVuYWJsZXIuYwppbmRleCA3YTNiMThmLi5mMWY5YWI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jZi1lbmFibGVyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jCkBAIC05LDcgKzksNiBAQAogICogIEVuYWJsZSB0aGUgQ0YgY29uZmlndXJhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMKaW5kZXggYmFlZDlhNS4uYTMzYWUzZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwpAQCAtMTA1LDYgKzEwNSw2IEBACiB2b2lkIG1ha2VfaW1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJmltYXNrX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbWFza19pcnFfdHlwZTsKIAllbmFibGVfaXJxKGlycSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMyLmMKaW5kZXggMDZlOGFmYS4uMzAwNjRiZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50YzIuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaW50YzJfaXJxX3R5cGU7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJmludGMyX2lycV90eXBlOwogCiAJZGlzYWJsZV9pbnRjMl9pcnEoaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IGU1NTE1MGUuLjBmNTQ1OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtMTUsNyArMTUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTE1LDcgKzExNCw3IEBACiAJaXByX2RhdGFbaXJxXS5zaGlmdCA9IHBvcyo0OyAvKiBQT1NpdGlvbiAoMC0zKSB4IDQgbWVhbnMgc2hpZnQgKi8KIAlpcHJfZGF0YVtpcnFdLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaXByX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpcHJfaXJxX3R5cGU7CiAJZGlzYWJsZV9pcHJfaXJxKGlycSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvcGludC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9waW50LmMKaW5kZXggOTVkNjAyNC4uODBjZDgxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9waW50LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9waW50LmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTg1LDcgKzg0LDcgQEAKIHZvaWQgbWFrZV9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCWlycV9kZXNjW2lycV0uaGFuZGxlciA9ICZwaW50X2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZwaW50X2lycV90eXBlOwogCWRpc2FibGVfcGludF9pcnEoaXJxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCmluZGV4IDk2NmMwODUuLmNjMDRlOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIAkuYWxpZ24gMgogCS5kYXRhCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMKaW5kZXggODIyMWU5ZC4uMjZhMjdkZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9leC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZXguUwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogCS5hbGlnbiAyCiAJLmRhdGEKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwppbmRleCA4NDM3ZWE3Li43ODFkYmIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpAQCAtNDE3LDcgKzQxNiw2IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugc3FfZGV2ID0gewogCS5taW5vcgkJPSBTVE9SRV9RVUVVRV9NSU5PUiwKIAkubmFtZQkJPSAic3EiLAotCS5kZXZmc19uYW1lCT0gImNwdS9zcSIsCiAJLmZvcHMJCT0gJnNxX2ZvcHMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnkuUwppbmRleCBhNDQwZDM2Li43ZGZkMmJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LlMKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vY3B1L21tdV9jb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IGI1NmU3OTYuLmMyZTA3ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCmluZGV4IDM4ODdiNGYuLmY3ZWViYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBiMDY5NWNmLi44MjIxYjM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysgYi9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtOCw3ICs4LDYgQEAKICAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2RlZmluZSBQQUdFX1NJWkUgICAgICA0MDk2IC8qIG11c3QgYmUgc2FtZSB2YWx1ZSBhcyBpbiA8YXNtL3BhZ2UuaD4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IGQ1ZDAzMjUuLjI0NWVkOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDYyYzdkMWMuLjZjMGZiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWUuYwppbmRleCAzMTRhMjc1Li5hMTU4OWY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwppbmRleCA5NmE2NGNiLi5kNDIxMmFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRtdV9pcnEgPSB7CiAJLm5hbWUJCT0gInRpbWVyIiwKIAkuaGFuZGxlcgk9IHRtdV90aW1lcl9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubWFzawkJPSBDUFVfTUFTS19OT05FLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKaW5kZXggN2ViMDY3MS4uZDlkYjExOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAnVHJhcHMuYycgaGFuZGxlcyBoYXJkd2FyZSB0cmFwcyBhbmQgZmF1bHRzIGFmdGVyIHdlIGhhdmUgc2F2ZWQgc29tZQogICogc3RhdGUgaW4gJ2VudHJ5LlMnLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDUxYmRjMWMuLjk1ZmRkOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMiw3ICsyLDYgQEAKICAqIGxkIHNjcmlwdCB0byBtYWtlIFN1cGVySCBMaW51eCBrZXJuZWwKICAqIFdyaXR0ZW4gYnkgTmlpYmUgWXV0YWthCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9tZW1jcHktc2g0LlMgYi9hcmNoL3NoL2xpYi9tZW1jcHktc2g0LlMKaW5kZXggNTVmMjI3NC4uZGI2YjczNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWIvbWVtY3B5LXNoNC5TCisrKyBiL2FyY2gvc2gvbGliL21lbWNweS1zaDQuUwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiB2b2lkICptZW1jcHkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IGFiODMzYWRmLi41MjRjZWE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2xlYXJfcGFnZS5TIGIvYXJjaC9zaC9tbS9jbGVhcl9wYWdlLlMKaW5kZXggYWU1OGE2MS4uMDhhY2VhZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jbGVhcl9wYWdlLlMKKysrIGIvYXJjaC9zaC9tbS9jbGVhcl9wYWdlLlMKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgIE5paWJlIFl1dGFrYQogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZXh0YWJsZS5jIGIvYXJjaC9zaC9tbS9leHRhYmxlLmMKaW5kZXggNTA1ZWRlNy4uYzFjZjQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC9zaC9tbS9leHRhYmxlLmMKQEAgLTQsNyArNCw2IEBACiAgKiAgIGxpbnV4L2FyY2gvaTM4Ni9tbS9leHRhYmxlLmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jCmluZGV4IGEzNTY4ZmQuLjJhODViYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCA3N2I0YTgzLi44ZWEyN2NhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtOSw3ICs5LDYgQEAKICAqICAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZy1zaDQuYyBiL2FyY2gvc2gvbW0vcGctc2g0LmMKaW5kZXggZTU5MDdjNy4uYzc3NmI2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZy1zaDQuYworKysgYi9hcmNoL3NoL21tL3BnLXNoNC5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3NoNjQvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA4OWRiZjQ1Li5lZTdhMWI2IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3NoNjQvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEFkYXB0ZWQgZm9yIFNIbWVkaWEgZnJvbSBzaCBieSBTdHVhcnQgTWVuZWZ5LCBNYXkgMjAwMgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKiBjYWNoZS5jICovCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL3NoNjQvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKaW5kZXggMTVhNzM3ZC4uNTljMmVmNCAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc2g2NC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtNCw3ICs0LDYgQEAKICAqIE1vZGlmaWVkIGJ5IFN0dWFydCBNZW5lZnkgZnJvbSBhcmNoL3NoL3ZtbGludXgubGRzLlMgd3JpdHRlbiBieSBOaWliZSBZdXRha2EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTElUVExFX0VORElBTgogLyogT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2g2NGwtbGludXgiLCAiZWxmMzItc2g2NGwtbGludXgiLCAiZWxmMzItc2g2NGwtbGludXgiKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9hbHBoYW51bS5jIGIvYXJjaC9zaDY0L2tlcm5lbC9hbHBoYW51bS5jCmluZGV4IDU2ZDZmOWYuLjkwNzlkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvYWxwaGFudW0uYworKysgYi9hcmNoL3NoNjQva2VybmVsL2FscGhhbnVtLmMKQEAgLTksNyArOSw2IEBACiAgKiBNYWNoaW5lLWluZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgOC1kaWdpdCBhbHBoYW51bWVyaWMgZGlzcGxheQogICogKGUuZy4gQWdpbGVudCBIRFNQLTI1M3gpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL2RtYS5jIGIvYXJjaC9zaDY0L2tlcm5lbC9kbWEuYwppbmRleCAwOWNkOWY0Li4zMmM2ZjA1IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvZG1hLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfZG10ZSA9IHsKIAkuaGFuZGxlcgk9IGRtYV9tdGUsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIAkubmFtZQkJPSAiRE1BIE1URSIsCiB9OwogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2RlcnIgPSB7CiAJLmhhbmRsZXIJPSBkbWFfZXJyLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm5hbWUJCT0gIkRNQSBFcnJvciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NoNjQva2VybmVsL2VudHJ5LlMKaW5kZXggMmUyY2ZlMi4uNDBkNDUzNCAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3NoNjQva2VybmVsL2hlYWQuUwppbmRleCBjYzBiNjI4Li5mMzc0MGRkIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3NoNjQva2VybmVsL2hlYWQuUwpAQCAtMjAsNyArMjAsNiBAQAogICogICAgQWRkIGVhcmx5IFNDSUYgY29uc29sZSBEVExCIG1hcHBpbmcuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoNjQva2VybmVsL2lycS5jCmluZGV4IGQ2OTg3OWMuLmU3ZTA3ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9pcnEuYwpAQCAtMTUsNyArMTUsNiBAQAogICogTmF0dXJhbGx5IGl0J3Mgbm90IGEgMToxIHJlbGF0aW9uLCBidXQgdGhlcmUgYXJlIHNpbWlsYXJpdGllcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpAQCAtNjUsNyArNjQsNyBAQAogCQkJZ290byB1bmxvY2s7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9pcnFfaW50Yy5jIGIvYXJjaC9zaDY0L2tlcm5lbC9pcnFfaW50Yy5jCmluZGV4IGZjOTliZjRlLi40MmMwN2QyIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL2lycV9pbnRjLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9pcnFfaW50Yy5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNzgsNyArMTc3LDcgQEAKIHZvaWQgbWFrZV9pbnRjX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCWlycV9kZXNjW2lycV0uaGFuZGxlciA9ICZpbnRjX2lycV90eXBlOworCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbnRjX2lycV90eXBlOwogCWRpc2FibGVfaW50Y19pcnEoaXJxKTsKIH0KIApAQCAtMjA4LDcgKzIwNyw3IEBACiAJLyogU2V0IGRlZmF1bHQ6IHBlci1saW5lIGVuYWJsZS9kaXNhYmxlLCBwcmlvcml0eSBkcml2ZW4gYWNrL2VvaSAqLwogCWZvciAoaSA9IDA7IGkgPCBOUl9JTlRDX0lSUVM7IGkrKykgewogCQlpZiAocGxhdGZvcm1faW50X3ByaW9yaXR5W2ldICE9IE5PX1BSSU9SSVRZKSB7Ci0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmludGNfaXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJmludGNfaXJxX3R5cGU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvbGVkLmMgYi9hcmNoL3NoNjQva2VybmVsL2xlZC5jCmluZGV4IGNmOTkzYzQuLmUzNWQzZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvbGVkLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9sZWQuYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKiBGbGFzaCB0aGUgTEVEcwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wY2lfc2g1LmMgYi9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYwppbmRleCA2MTk3ODc5Li45ZGFlNjg5IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgU0g1IFBDSSBoYXJkd2FyZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KQEAgLTQ3NCwxMyArNDczLDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKIHsKICAgICAgICAgaWYgKHJlcXVlc3RfaXJxKElSUV9FUlIsIHBjaXNoNV9lcnJfaXJxLAotICAgICAgICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBULCAiUENJIEVycm9yIixOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUQsICJQQ0kgRXJyb3IiLE5VTEwpIDwgMCkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiUENJU0g1OiBDYW5ub3QgaG9vayBQQ0lfUEVSUiBpbnRlcnJ1cHRcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlcXVlc3RfaXJxKElSUV9TRVJSLCBwY2lzaDVfc2Vycl9pcnEsCi0gICAgICAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFQsICJQQ0kgU0VSUiBpbnRlcnJ1cHQiLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUQsICJQQ0kgU0VSUiBpbnRlcnJ1cHQiLCBOVUxMKSA8IDApIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlBDSVNINTogQ2Fubm90IGhvb2sgUENJX1NFUlIgaW50ZXJydXB0XG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wY2liaW9zLmMgYi9hcmNoL3NoNjQva2VybmVsL3BjaWJpb3MuYwppbmRleCA1MGM2MWRjLi45NDU5MjBiIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3BjaWJpb3MuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3BjaWJpb3MuYwpAQCAtNjksMTAgKzY5LDEwIEBACiAgKiBtb2R1bG8gMHg0MDAuCiAgKi8KIHZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCisJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IHJlcy0+c3RhcnQ7CisJCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCAxZGE5YzYxLi5kYmE4ZTE0IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzUsNyArMzUsNiBAQAogI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zaDY0L2tlcm5lbC9wdHJhY2UuYwppbmRleCBjZDIyZTk0Li40ZTk1ZTE4IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2g2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBkYTk4ZDhkLi4wMzU5ZmE2IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9zZXR1cC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYyBiL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYwppbmRleCA2ZjNhMWM5Li42ZWZkZmEyIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zaDY0L2tlcm5lbC90aW1lLmMKaW5kZXggNmI4ZjRkMi4uYjgxNjJlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC90aW1lLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk1ICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQ4NSw4ICs0ODQsOCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7IHRpbWVyX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCBDUFVfTUFTS19OT05FLCAidGltZXIiLCBOVUxMLCBOVUxMfTsKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTEgID0geyBzaDY0X3J0Y19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgQ1BVX01BU0tfTk9ORSwgInJ0YyIsIE5VTEwsIE5VTEx9Oworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7IHRpbWVyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTH07CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnExICA9IHsgc2g2NF9ydGNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBDUFVfTUFTS19OT05FLCAicnRjIiwgTlVMTCwgTlVMTH07CiAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zaDY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDdkOWY3YTYuLmE4ZmNjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NoNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIyLDcgKzIyLDYgQEAKICAqICAgIFJlbW92ZSBzdXBwb3J0IGZvciBhbmNpZW50IHRvb2xjaGFpbnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2xpYi9jLWNoZWNrc3VtLmMgYi9hcmNoL3NoNjQvbGliL2MtY2hlY2tzdW0uYwppbmRleCBhODJkOGYxLi41M2MxY2FiIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbGliL2MtY2hlY2tzdW0uYworKysgYi9hcmNoL3NoNjQvbGliL2MtY2hlY2tzdW0uYwpAQCAtNyw3ICs3LDYgQEAKIAogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2xpYi9kYmcuYyBiL2FyY2gvc2g2NC9saWIvZGJnLmMKaW5kZXggNTgwODczMy4uMTMyNmY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2xpYi9kYmcuYworKysgYi9hcmNoL3NoNjQvbGliL2RiZy5jCkBAIC04LDcgKzgsNiBAQAogLS0gQ29weXJpZ2h0IDIwMDQgUmljaGFyZCBDdXJub3cgKGV2dF9kZWJ1ZyBldGMpCiAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9saWIvaW8uYyBiL2FyY2gvc2g2NC9saWIvaW8uYwppbmRleCAyNzdlMTFiLi41ODdiYWEzIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbGliL2lvLmMKKysrIGIvYXJjaC9zaDY0L2xpYi9pby5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2xpYi9pb21hcC5jIGIvYXJjaC9zaDY0L2xpYi9pb21hcC5jCmluZGV4IDgzYzVmMGMuLjVjZDNkNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9saWIvaW9tYXAuYworKysgYi9hcmNoL3NoNjQvbGliL2lvbWFwLmMKQEAgLTksNyArOSw2IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9saWIvbWVtY3B5LmMgYi9hcmNoL3NoNjQvbGliL21lbWNweS5jCmluZGV4IGM3ODVkMGEuLmZiYTQzNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9saWIvbWVtY3B5LmMKKysrIGIvYXJjaC9zaDY0L2xpYi9tZW1jcHkuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbGliL3VkZWxheS5jIGIvYXJjaC9zaDY0L2xpYi91ZGVsYXkuYwppbmRleCBkYWQyZjI1Li4zMjc2NTM5IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbGliL3VkZWxheS5jCisrKyBiL2FyY2gvc2g2NC9saWIvdWRlbGF5LmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbWFjaC1jYXltYW4vaW9tYXAuYyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pb21hcC5jCmluZGV4IGQ2YTUzOGMuLjJkMDZlOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pb21hcC5jCisrKyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pb21hcC5jCkBAIC05LDcgKzksNiBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYXltYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pcnEuYyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pcnEuYwppbmRleCBmNzk3Yzg0Li4yMjhjZTYxIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbWFjaC1jYXltYW4vaXJxLmMKKysrIGIvYXJjaC9zaDY0L21hY2gtY2F5bWFuL2lycS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgU3R1YXJ0IE1lbmVmeQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ1LDEzICs0NCwxMyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2F5bWFuX2FjdGlvbl9zbXNjID0gewogCS5uYW1lCQk9ICJDYXltYW4gU01TQyBNdXgiLAogCS5oYW5kbGVyCT0gY2F5bWFuX2ludGVycnVwdF9zbXNjLAotCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXltYW5fYWN0aW9uX3BjaTIgPSB7CiAJLm5hbWUJCT0gIkNheW1hbiBQQ0kyIE11eCIsCiAJLmhhbmRsZXIJPSBjYXltYW5faW50ZXJydXB0X3BjaTIsCi0JLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKIH07CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9jYXltYW5faXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xODcsNyArMTg2LDcgQEAKIAl9CiAKIAlmb3IgKGk9MDsgaTxOUl9FWFRfSVJRUzsgaSsrKSB7Ci0JCWlycV9kZXNjW1NUQVJUX0VYVF9JUlFTICsgaV0uaGFuZGxlciA9ICZjYXltYW5faXJxX3R5cGU7CisJCWlycV9kZXNjW1NUQVJUX0VYVF9JUlFTICsgaV0uY2hpcCA9ICZjYXltYW5faXJxX3R5cGU7CiAJfQogCiAJLyogU2V0dXAgdGhlIFNNU0MgaW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbWFjaC1jYXltYW4vc2V0dXAuYyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9zZXR1cC5jCmluZGV4IGM3OTMyNDUuLmQ4NDg5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9zZXR1cC5jCisrKyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9zZXR1cC5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tYWNoLWhhcnAvc2V0dXAuYyBiL2FyY2gvc2g2NC9tYWNoLWhhcnAvc2V0dXAuYwppbmRleCAzOTM4YTY1Li5mY2Q5MGFmIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbWFjaC1oYXJwL3NldHVwLmMKKysrIGIvYXJjaC9zaDY0L21hY2gtaGFycC9zZXR1cC5jCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tYWNoLXJvbXJhbS9zZXR1cC5jIGIvYXJjaC9zaDY0L21hY2gtcm9tcmFtL3NldHVwLmMKaW5kZXggYTliYTAzZi4uZWI5OGExNiAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21hY2gtcm9tcmFtL3NldHVwLmMKKysrIGIvYXJjaC9zaDY0L21hY2gtcm9tcmFtL3NldHVwLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21hY2gtc2ltL3NldHVwLmMgYi9hcmNoL3NoNjQvbWFjaC1zaW0vc2V0dXAuYwppbmRleCBhNjg2MzljLi5mMDk0MDBjIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbWFjaC1zaW0vc2V0dXAuYworKysgYi9hcmNoL3NoNjQvbWFjaC1zaW0vc2V0dXAuYwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbW0vY2FjaGUuYyBiL2FyY2gvc2g2NC9tbS9jYWNoZS5jCmluZGV4IGMwYzFiMjEzLi40MjE0ODdjIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vY2FjaGUuYworKysgYi9hcmNoL3NoNjQvbW0vY2FjaGUuYwpAQCAtMTMsNyArMTMsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tbS9leHRhYmxlLmMgYi9hcmNoL3NoNjQvbW0vZXh0YWJsZS5jCmluZGV4IDlkYTUwZTI4Yi4uYTJlNmUwNSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21tL2V4dGFibGUuYworKysgYi9hcmNoL3NoNjQvbW0vZXh0YWJsZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKgogICogQ2xvbmVkIGZyb20gdGhlIDIuNSBTSCB2ZXJzaW9uLi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zaDY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggM2Q4OWYyYS4uMTg3Y2YwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9zaDY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMWY1NTIzMS4uMjlkN2NmZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBPbiBzcGFyYywgdGhyZWFkX2luZm8gZGF0YSBpcyBzdGF0aWMgYW5kIFRJX1hYWCBvZmZzZXRzIGFyZSBjb21wdXRlZCBieSBoYW5kLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogLy8gI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpby5jCmluZGV4IGQzYjM2NDguLjExOGYzZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW8uYwpAQCAtNSw3ICs1LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwppbmRleCBkN2JmYzYxLi4yNTlhNTU5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYwppbmRleCBmY2IwYzA0Li5hZGJhOWRmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCkBAIC03LDcgKzcsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZWJ1cy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZWJ1cy5jCmluZGV4IGE3YTQ4OTIuLjgxYzBjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VidXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9lYnVzLmMKQEAgLTcsNyArNyw2IEBACiAgKiBGaXhlcyBmb3IgZGlmZmVyZW50IHBsYXRmb3JtcyBieSBQZXRlIFphaXRjZXYuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKaW5kZXggODg3ZjZhMS4uYTRlZGZmNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk3IEFudG9uIEJsYW5jaGFyZCAoYW50b25AcHJvZ3NvYy51dHMuZWR1LmF1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWQuUwppbmRleCA0MmQzZGU1Li45YTIxOWU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vaGVhZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaWRwcm9tLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYwppbmRleCAyZTFiMGY2Li4zYTViYWQ1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYwpAQCAtNSw3ICs1LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwppbmRleCBhZTRjNjY3Li44NjU0YjQ0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwpAQCAtMjYsNiArMjYsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9zYnVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtMTQzLDYgKzE0NSwyMSBAQAogCSAgICBwaHlyZXMtPnN0YXJ0ICsgb2Zmc2V0LCBzaXplLCBuYW1lKTsKIH0KIAordm9pZCBfX2lvbWVtICpvZl9pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBsb25nIHNpemUsIGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIF9zcGFyY19hbGxvY19pbyhyZXMtPmZsYWdzICYgMHhGLAorCQkJICAgICAgIHJlcy0+c3RhcnQgKyBvZmZzZXQsCisJCQkgICAgICAgc2l6ZSwgbmFtZSk7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2lvcmVtYXApOworCit2b2lkIG9mX2lvdW5tYXAodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW91bm1hcChiYXNlKTsKK30KK0VYUE9SVF9TWU1CT0wob2ZfaW91bm1hcCk7CisKIC8qCiAgKi8KIHZvaWQgc2J1c19pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMjA4LDcgKzIyNSw3IEBACiAJcGEgJj0gUEFHRV9NQVNLOwogCXNwYXJjX21hcGlvcmFuZ2UoYnVzLCBwYSwgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAocmVzLT5zdGFydCArIG9mZnNldCk7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykocmVzLT5zdGFydCArIG9mZnNldCk7CiB9CiAKIC8qCkBAIC0zMjUsNyArMzQyLDcgQEAKIAkJcmVzLT5uYW1lID0gc2Rldi0+cHJvbV9uYW1lOwogCX0KIAotCXJldHVybiAodm9pZCAqKXJlcy0+c3RhcnQ7CisJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydDsKIAogZXJyX25vaW9tbXU6CiAJcmVsZWFzZV9yZXNvdXJjZShyZXMpOwpAQCAtODE5LDcgKzgzNiw5IEBACiAJCWlmIChwICsgMzIgPj0gZSkJLyogQmV0dGVyIHRoYW4gbm90aGluZyAqLwogCQkJYnJlYWs7CiAJCWlmICgobm0gPSByLT5uYW1lKSA9PSAwKSBubSA9ICI/Pz8iOwotCQlwICs9IHNwcmludGYocCwgIiUwOGx4LSUwOGx4OiAlc1xuIiwgci0+c3RhcnQsIHItPmVuZCwgbm0pOworCQlwICs9IHNwcmludGYocCwgIiUwMTZsbHgtJTAxNmxseDogJXNcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5zdGFydCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCwgbm0pOwogCX0KIAogCXJldHVybiBwLWJ1ZjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMKaW5kZXggYWFjOGFmNS4uY2RlNzMzMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMKQEAgLTExLDcgKzExLDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBBbnRvbiBCbGFuY2hhcmQgKGFudG9uQHNhbWJhLm9yZykKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTE5MiwxMSArMTkxLDExIEBACiAJCX0KICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJWMgJXMiLAotCQkJKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpID8gJysnIDogJyAnLAorCQkJKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKSA/ICcrJyA6ICcgJywKIAkJCWFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpIHsKIAkJCXNlcV9wcmludGYocCwgIiwlcyAlcyIsCi0JCQkJKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpID8gIiArIiA6ICIiLAorCQkJCShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgPyAiICsiIDogIiIsCiAJCQkJYWN0aW9uLT5uYW1lKTsKIAkJfQogCQlzZXFfcHV0YyhwLCAnXG4nKTsKQEAgLTI0NCw3ICsyNDMsNyBAQAogCQkJcHJpbnRrKCJUcnlpbmcgdG8gZnJlZSBmcmVlIHNoYXJlZCBJUlElZFxuIixpcnEpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JfSBlbHNlIGlmIChhY3Rpb24tPmZsYWdzICYgU0FfU0hJUlEpIHsKKwl9IGVsc2UgaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgewogCQlwcmludGsoIlRyeWluZyB0byBmcmVlIHNoYXJlZCBJUlElZCB3aXRoIE5VTEwgZGV2aWNlIElEXG4iLCBpcnEpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMzk2LDkgKzM5NSw5IEBACiAKIAlhY3Rpb24gPSBzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uOwogCWlmKGFjdGlvbikgewotCQlpZihhY3Rpb24tPmZsYWdzICYgU0FfU0hJUlEpCisJCWlmKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkKIAkJCXBhbmljKCJUcnlpbmcgdG8gcmVnaXN0ZXIgZmFzdCBpcnEgd2hlbiBhbHJlYWR5IHNoYXJlZC5cbiIpOwotCQlpZihpcnFmbGFncyAmIFNBX1NISVJRKQorCQlpZihpcnFmbGFncyAmIElSUUZfU0hBUkVEKQogCQkJcGFuaWMoIlRyeWluZyB0byByZWdpc3RlciBmYXN0IGlycSBhcyBzaGFyZWQuXG4iKTsKIAogCQkvKiBBbnl3YXksIHNvbWVvbmUgYWxyZWFkeSBvd25zIGl0IHNvIGNhbm5vdCBiZSBtYWRlIGZhc3QuICovCkBAIC00OTgsMTEgKzQ5NywxMSBAQAogCWFjdGlvbnAgPSAmc3BhcmNfaXJxW2NwdV9pcnFdLmFjdGlvbjsKIAlhY3Rpb24gPSAqYWN0aW9ucDsKIAlpZiAoYWN0aW9uKSB7Ci0JCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9TSElSUSkgfHwgIShpcnFmbGFncyAmIFNBX1NISVJRKSkgeworCQlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHx8ICEoaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkpIHsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQotCQlpZiAoKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpICE9IChpcnFmbGFncyAmIFNBX0lOVEVSUlVQVCkpIHsKKwkJaWYgKChhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgIT0gKGlycWZsYWdzICYgSVJRRl9ESVNBQkxFRCkpIHsKIAkJCXByaW50aygiQXR0ZW1wdCB0byBtaXggZmFzdCBhbmQgc2xvdyBpbnRlcnJ1cHRzIG9uIElSUSVkIGRlbmllZFxuIiwgaXJxKTsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMKaW5kZXggODBhODA5NC4uYmM5NTZjNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTEyOSw2ICsxMjksMjYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gZGF0YTsKKworCXJldHVybiAob3AtPm5vZGUgPT0gZHApOworfQorCitzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZvZl9idXNfdHlwZSwgTlVMTCwKKwkJCQkJICAgICBkcCwgbm9kZV9tYXRjaCk7CisKKwlpZiAoZGV2KQorCQlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9kZXZpY2VfYnlfbm9kZSk7CisKICNpZmRlZiBDT05GSUdfUENJCiBzdHJ1Y3QgYnVzX3R5cGUgZWJ1c19idXNfdHlwZSA9IHsKICAgICAgICAubmFtZQk9ICJlYnVzIiwKQEAgLTE1MywxMCArMTczLDQ1OSBAQAogRVhQT1JUX1NZTUJPTChzYnVzX2J1c190eXBlKTsKICNlbmRpZgogCitzdHJ1Y3QgYnVzX3R5cGUgb2ZfYnVzX3R5cGUgPSB7CisgICAgICAgLm5hbWUJPSAib2YiLAorICAgICAgIC5tYXRjaAk9IG9mX3BsYXRmb3JtX2J1c19tYXRjaCwKKyAgICAgICAucHJvYmUJPSBvZl9kZXZpY2VfcHJvYmUsCisgICAgICAgLnJlbW92ZQk9IG9mX2RldmljZV9yZW1vdmUsCisgICAgICAgLnN1c3BlbmQJPSBvZl9kZXZpY2Vfc3VzcGVuZCwKKyAgICAgICAucmVzdW1lCT0gb2ZfZGV2aWNlX3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MKG9mX2J1c190eXBlKTsKKworc3RhdGljIGlubGluZSB1NjQgb2ZfcmVhZF9hZGRyKHUzMiAqY2VsbCwgaW50IHNpemUpCit7CisJdTY0IHIgPSAwOworCXdoaWxlIChzaXplLS0pCisJCXIgPSAociA8PCAzMikgfCAqKGNlbGwrKyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZXRfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCSAgICAgaW50ICphZGRyYywgaW50ICpzaXplYykKK3sKKwlpZiAoYWRkcmMpCisJCSphZGRyYyA9IG9mX25fYWRkcl9jZWxscyhkcCk7CisJaWYgKHNpemVjKQorCQkqc2l6ZWMgPSBvZl9uX3NpemVfY2VsbHMoZHApOworfQorCisvKiBNYXggYWRkcmVzcyBzaXplIHdlIGRlYWwgd2l0aCAqLworI2RlZmluZSBPRl9NQVhfQUREUl9DRUxMUwk0CisKK3N0cnVjdCBvZl9idXMgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJY29uc3QgY2hhcgkqYWRkcl9wcm9wX25hbWU7CisJaW50CQkoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCk7CisJdm9pZAkJKCpjb3VudF9jZWxscykoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwKKwkJCQkgICAgICAgaW50ICphZGRyYywgaW50ICpzaXplYyk7CisJdTY0CQkoKm1hcCkodTMyICphZGRyLCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSk7CisJaW50CQkoKnRyYW5zbGF0ZSkodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpOworCXVuc2lnbmVkIGludAkoKmdldF9mbGFncykodTMyICphZGRyKTsKK307CisKKy8qCisgKiBEZWZhdWx0IHRyYW5zbGF0b3IgKGdlbmVyaWMgYnVzKQorICovCisKK3N0YXRpYyB2b2lkIG9mX2J1c19kZWZhdWx0X2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LAorCQkJCSAgICAgICBpbnQgKmFkZHJjLCBpbnQgKnNpemVjKQoreworCWdldF9jZWxscyhkZXYsIGFkZHJjLCBzaXplYyk7Cit9CisKK3N0YXRpYyB1NjQgb2ZfYnVzX2RlZmF1bHRfbWFwKHUzMiAqYWRkciwgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCit7CisJdTY0IGNwLCBzLCBkYTsKKworCWNwID0gb2ZfcmVhZF9hZGRyKHJhbmdlLCBuYSk7CisJcyAgPSBvZl9yZWFkX2FkZHIocmFuZ2UgKyBuYSArIHBuYSwgbnMpOworCWRhID0gb2ZfcmVhZF9hZGRyKGFkZHIsIG5hKTsKKworCWlmIChkYSA8IGNwIHx8IGRhID49IChjcCArIHMpKQorCQlyZXR1cm4gT0ZfQkFEX0FERFI7CisJcmV0dXJuIGRhIC0gY3A7Cit9CisKK3N0YXRpYyBpbnQgb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQoreworCXU2NCBhID0gb2ZfcmVhZF9hZGRyKGFkZHIsIG5hKTsKKwltZW1zZXQoYWRkciwgMCwgbmEgKiA0KTsKKwlhICs9IG9mZnNldDsKKwlpZiAobmEgPiAxKQorCQlhZGRyW25hIC0gMl0gPSBhID4+IDMyOworCWFkZHJbbmEgLSAxXSA9IGEgJiAweGZmZmZmZmZmdTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19kZWZhdWx0X2dldF9mbGFncyh1MzIgKmFkZHIpCit7CisJcmV0dXJuIElPUkVTT1VSQ0VfTUVNOworfQorCisKKy8qCisgKiBQQ0kgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3IKKyAqLworCitzdGF0aWMgaW50IG9mX2J1c19wY2lfbWF0Y2goc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gIXN0cmNtcChucC0+dHlwZSwgInBjaSIpIHx8ICFzdHJjbXAobnAtPnR5cGUsICJwY2lleCIpOworfQorCitzdGF0aWMgdm9pZCBvZl9idXNfcGNpX2NvdW50X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJICAgaW50ICphZGRyYywgaW50ICpzaXplYykKK3sKKwlpZiAoYWRkcmMpCisJCSphZGRyYyA9IDM7CisJaWYgKHNpemVjKQorCQkqc2l6ZWMgPSAyOworfQorCitzdGF0aWMgdTY0IG9mX2J1c19wY2lfbWFwKHUzMiAqYWRkciwgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCit7CisJdTY0IGNwLCBzLCBkYTsKKworCS8qIENoZWNrIGFkZHJlc3MgdHlwZSBtYXRjaCAqLworCWlmICgoYWRkclswXSBeIHJhbmdlWzBdKSAmIDB4MDMwMDAwMDApCisJCXJldHVybiBPRl9CQURfQUREUjsKKworCS8qIFJlYWQgYWRkcmVzcyB2YWx1ZXMsIHNraXBwaW5nIGhpZ2ggY2VsbCAqLworCWNwID0gb2ZfcmVhZF9hZGRyKHJhbmdlICsgMSwgbmEgLSAxKTsKKwlzICA9IG9mX3JlYWRfYWRkcihyYW5nZSArIG5hICsgcG5hLCBucyk7CisJZGEgPSBvZl9yZWFkX2FkZHIoYWRkciArIDEsIG5hIC0gMSk7CisKKwlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCXJldHVybiBkYSAtIGNwOworfQorCitzdGF0aWMgaW50IG9mX2J1c19wY2lfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQoreworCXJldHVybiBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUoYWRkciArIDEsIG9mZnNldCwgbmEgLSAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfcGNpX2dldF9mbGFncyh1MzIgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwl1MzIgdyA9IGFkZHJbMF07CisKKwlzd2l0Y2goKHcgPj4gMjQpICYgMHgwMykgeworCWNhc2UgMHgwMToKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKKwljYXNlIDB4MDI6IC8qIDMyIGJpdHMgKi8KKwljYXNlIDB4MDM6IC8qIDY0IGJpdHMgKi8KKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU07CisJfQorCWlmICh3ICYgMHg0MDAwMDAwMCkKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKy8qCisgKiBTQlVTIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9yCisgKi8KKworc3RhdGljIGludCBvZl9idXNfc2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXJldHVybiAhc3RyY21wKG5wLT5uYW1lLCAic2J1cyIpIHx8CisJCSFzdHJjbXAobnAtPm5hbWUsICJzYmkiKTsKK30KKworc3RhdGljIHZvaWQgb2ZfYnVzX3NidXNfY291bnRfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwKKwkJCQkgICBpbnQgKmFkZHJjLCBpbnQgKnNpemVjKQoreworCWlmIChhZGRyYykKKwkJKmFkZHJjID0gMjsKKwlpZiAoc2l6ZWMpCisJCSpzaXplYyA9IDE7Cit9CisKK3N0YXRpYyB1NjQgb2ZfYnVzX3NidXNfbWFwKHUzMiAqYWRkciwgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCit7CisJcmV0dXJuIG9mX2J1c19kZWZhdWx0X21hcChhZGRyLCByYW5nZSwgbmEsIG5zLCBwbmEpOworfQorCitzdGF0aWMgaW50IG9mX2J1c19zYnVzX3RyYW5zbGF0ZSh1MzIgKmFkZHIsIHU2NCBvZmZzZXQsIGludCBuYSkKK3sKKwlyZXR1cm4gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlKGFkZHIsIG9mZnNldCwgbmEpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19zYnVzX2dldF9mbGFncyh1MzIgKmFkZHIpCit7CisJcmV0dXJuIElPUkVTT1VSQ0VfTUVNOworfQorCisKKy8qCisgKiBBcnJheSBvZiBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcnMKKyAqLworCitzdGF0aWMgc3RydWN0IG9mX2J1cyBvZl9idXNzZXNbXSA9IHsKKwkvKiBQQ0kgKi8KKwl7CisJCS5uYW1lID0gInBjaSIsCisJCS5hZGRyX3Byb3BfbmFtZSA9ICJhc3NpZ25lZC1hZGRyZXNzZXMiLAorCQkubWF0Y2ggPSBvZl9idXNfcGNpX21hdGNoLAorCQkuY291bnRfY2VsbHMgPSBvZl9idXNfcGNpX2NvdW50X2NlbGxzLAorCQkubWFwID0gb2ZfYnVzX3BjaV9tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfcGNpX3RyYW5zbGF0ZSwKKwkJLmdldF9mbGFncyA9IG9mX2J1c19wY2lfZ2V0X2ZsYWdzLAorCX0sCisJLyogU0JVUyAqLworCXsKKwkJLm5hbWUgPSAic2J1cyIsCisJCS5hZGRyX3Byb3BfbmFtZSA9ICJyZWciLAorCQkubWF0Y2ggPSBvZl9idXNfc2J1c19tYXRjaCwKKwkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX3NidXNfY291bnRfY2VsbHMsCisJCS5tYXAgPSBvZl9idXNfc2J1c19tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfc2J1c190cmFuc2xhdGUsCisJCS5nZXRfZmxhZ3MgPSBvZl9idXNfc2J1c19nZXRfZmxhZ3MsCisJfSwKKwkvKiBEZWZhdWx0ICovCisJeworCQkubmFtZSA9ICJkZWZhdWx0IiwKKwkJLmFkZHJfcHJvcF9uYW1lID0gInJlZyIsCisJCS5tYXRjaCA9IE5VTEwsCisJCS5jb3VudF9jZWxscyA9IG9mX2J1c19kZWZhdWx0X2NvdW50X2NlbGxzLAorCQkubWFwID0gb2ZfYnVzX2RlZmF1bHRfbWFwLAorCQkudHJhbnNsYXRlID0gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlLAorCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX2RlZmF1bHRfZ2V0X2ZsYWdzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9mX2J1cyAqb2ZfbWF0Y2hfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZl9idXNzZXMpOyBpICsrKQorCQlpZiAoIW9mX2J1c3Nlc1tpXS5tYXRjaCB8fCBvZl9idXNzZXNbaV0ubWF0Y2gobnApKQorCQkJcmV0dXJuICZvZl9idXNzZXNbaV07CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGJ1aWxkX29uZV9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwKKwkJCQkgICAgIHN0cnVjdCBvZl9idXMgKmJ1cywKKwkJCQkgICAgIHN0cnVjdCBvZl9idXMgKnBidXMsCisJCQkJICAgICB1MzIgKmFkZHIsCisJCQkJICAgICBpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3sKKwl1MzIgKnJhbmdlczsKKwl1bnNpZ25lZCBpbnQgcmxlbjsKKwlpbnQgcm9uZTsKKwl1NjQgb2Zmc2V0ID0gT0ZfQkFEX0FERFI7CisKKwlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LCAicmFuZ2VzIiwgJnJsZW4pOworCWlmIChyYW5nZXMgPT0gTlVMTCB8fCBybGVuID09IDApIHsKKwkJb2Zmc2V0ID0gb2ZfcmVhZF9hZGRyKGFkZHIsIG5hKTsKKwkJbWVtc2V0KGFkZHIsIDAsIHBuYSAqIDQpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwkvKiBOb3cgd2FsayB0aHJvdWdoIHRoZSByYW5nZXMgKi8KKwlybGVuIC89IDQ7CisJcm9uZSA9IG5hICsgcG5hICsgbnM7CisJZm9yICg7IHJsZW4gPj0gcm9uZTsgcmxlbiAtPSByb25lLCByYW5nZXMgKz0gcm9uZSkgeworCQlvZmZzZXQgPSBidXMtPm1hcChhZGRyLCByYW5nZXMsIG5hLCBucywgcG5hKTsKKwkJaWYgKG9mZnNldCAhPSBPRl9CQURfQUREUikKKwkJCWJyZWFrOworCX0KKwlpZiAob2Zmc2V0ID09IE9GX0JBRF9BRERSKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShhZGRyLCByYW5nZXMgKyBuYSwgNCAqIHBuYSk7CisKK2ZpbmlzaDoKKwkvKiBUcmFuc2xhdGUgaXQgaW50byBwYXJlbnQgYnVzIHNwYWNlICovCisJcmV0dXJuIHBidXMtPnRyYW5zbGF0ZShhZGRyLCBvZmZzZXQsIHBuYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCQkgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKK3sKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpwX29wOworCXN0cnVjdCBvZl9idXMgKmJ1czsKKwlpbnQgbmEsIG5zOworCWludCBpbmRleCwgbnVtX3JlZzsKKwl2b2lkICpwcmVnOworCisJaWYgKCFwYXJlbnQpCisJCXJldHVybjsKKworCXBfb3AgPSB0b19vZl9kZXZpY2UocGFyZW50KTsKKwlidXMgPSBvZl9tYXRjaF9idXMocF9vcC0+bm9kZSk7CisJYnVzLT5jb3VudF9jZWxscyhvcC0+bm9kZSwgJm5hLCAmbnMpOworCisJcHJlZyA9IG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgYnVzLT5hZGRyX3Byb3BfbmFtZSwgJm51bV9yZWcpOworCWlmICghcHJlZyB8fCBudW1fcmVnID09IDApCisJCXJldHVybjsKKworCS8qIENvbnZlcnQgdG8gbnVtLWNlbGxzLiAgKi8KKwludW1fcmVnIC89IDQ7CisKKwkvKiBDb252ZXIgdG8gbnVtLWVudHJpZXMuICAqLworCW51bV9yZWcgLz0gbmEgKyBuczsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9yZWc7IGluZGV4KyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyID0gJm9wLT5yZXNvdXJjZVtpbmRleF07CisJCXUzMiBhZGRyW09GX01BWF9BRERSX0NFTExTXTsKKwkJdTMyICpyZWcgPSAocHJlZyArIChpbmRleCAqICgobmEgKyBucykgKiA0KSkpOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHAgPSBwX29wLT5ub2RlOworCQlzdHJ1Y3Qgb2ZfYnVzICpwYnVzOworCQl1NjQgc2l6ZSwgcmVzdWx0ID0gT0ZfQkFEX0FERFI7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBkbmEsIGRuczsKKwkJaW50IHBuYSwgcG5zOworCisJCXNpemUgPSBvZl9yZWFkX2FkZHIocmVnICsgbmEsIG5zKTsKKwkJZmxhZ3MgPSBidXMtPmdldF9mbGFncyhyZWcpOworCisJCW1lbWNweShhZGRyLCByZWcsIG5hICogNCk7CisKKwkJLyogSWYgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaGFzIG5vIHJhbmdlcyBwcm9wZXJ0eSB0byBhcHBseSwKKwkJICoganVzdCB1c2UgYSAxPC0+MSBtYXBwaW5nLgorCQkgKi8KKwkJaWYgKG9mX2ZpbmRfcHJvcGVydHkocHAsICJyYW5nZXMiLCBOVUxMKSA9PSBOVUxMKSB7CisJCQlyZXN1bHQgPSBvZl9yZWFkX2FkZHIoYWRkciwgbmEpOworCQkJZ290byBidWlsZF9yZXM7CisJCX0KKworCQlkbmEgPSBuYTsKKwkJZG5zID0gbnM7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWRwID0gcHA7CisJCQlwcCA9IGRwLT5wYXJlbnQ7CisJCQlpZiAoIXBwKSB7CisJCQkJcmVzdWx0ID0gb2ZfcmVhZF9hZGRyKGFkZHIsIGRuYSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXBidXMgPSBvZl9tYXRjaF9idXMocHApOworCQkJcGJ1cy0+Y291bnRfY2VsbHMoZHAsICZwbmEsICZwbnMpOworCisJCQlpZiAoYnVpbGRfb25lX3Jlc291cmNlKGRwLCBidXMsIHBidXMsIGFkZHIsIGRuYSwgZG5zLCBwbmEpKQorCQkJCWJyZWFrOworCisJCQlkbmEgPSBwbmE7CisJCQlkbnMgPSBwbnM7CisJCQlidXMgPSBwYnVzOworCQl9CisKKwlidWlsZF9yZXM6CisJCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKKwkJaWYgKHJlc3VsdCAhPSBPRl9CQURfQUREUikgeworCQkJci0+c3RhcnQgPSByZXN1bHQgJiAweGZmZmZmZmZmOworCQkJci0+ZW5kID0gcmVzdWx0ICsgc2l6ZSAtIDE7CisJCQlyLT5mbGFncyA9IGZsYWdzIHwgKChyZXN1bHQgPj4gMzJVTEwpICYgMHhmZlVMKTsKKwkJfSBlbHNlIHsKKwkJCXItPnN0YXJ0ID0gfjBVTDsKKwkJCXItPmVuZCA9IH4wVUw7CisJCX0KKwkJci0+bmFtZSA9IG9wLT5ub2RlLT5uYW1lOworCX0KK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2UgKiBfX2luaXQgc2Nhbl9vbmVfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJCQkgc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGxpbnV4X3Byb21faXJxcyAqaW50cjsKKwlpbnQgbGVuLCBpOworCisJaWYgKCFvcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlvcC0+bm9kZSA9IGRwOworCisJb3AtPmNsb2NrX2ZyZXEgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJjbG9jay1mcmVxdWVuY3kiLAorCQkJCQkgICAgICAgKDI1KjEwMDAqMTAwMCkpOworCW9wLT5wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJ1cGEtcG9ydGlkIiwgLTEpOworCWlmIChvcC0+cG9ydGlkID09IC0xKQorCQlvcC0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgLTEpOworCisJaW50ciA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImludHIiLCAmbGVuKTsKKwlpZiAoaW50cikgeworCQlvcC0+bnVtX2lycXMgPSBsZW4gLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21faXJxcyk7CisJCWZvciAoaSA9IDA7IGkgPCBvcC0+bnVtX2lycXM7IGkrKykKKwkJCW9wLT5pcnFzW2ldID0gaW50cltpXS5wcmk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50ICppcnEgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJpbnRlcnJ1cHRzIiwgJmxlbik7CisKKwkJaWYgKGlycSkgeworCQkJb3AtPm51bV9pcnFzID0gbGVuIC8gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgb3AtPm51bV9pcnFzOyBpKyspCisJCQkJb3AtPmlycXNbaV0gPSBpcnFbaV07CisJCX0gZWxzZSB7CisJCQlvcC0+bnVtX2lycXMgPSAwOworCQl9CisJfQorCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGQpIHsKKwkJc3RhdGljIGludCBwaWxfdG9fc2J1c1tdID0geworCQkJMCwgMCwgMSwgMiwgMCwgMywgMCwgNCwgMCwgNSwgMCwgNiwgMCwgNywgMCwgMCwKKwkJfTsKKwkJc3RydWN0IGRldmljZV9ub2RlICpidXNwID0gZHAtPnBhcmVudDsKKwkJc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOworCQlpbnQgYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoYnVzcCwgImJvYXJkIyIsIDApOworCQlpbnQgc2xvdDsKKworCQlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJCXNsb3QgPSByZWdzLT53aGljaF9pbzsKKworCQlmb3IgKGkgPSAwOyBpIDwgb3AtPm51bV9pcnFzOyBpKyspIHsKKwkJCWludCB0aGlzX2lycSA9IG9wLT5pcnFzW2ldOworCQkJaW50IHNidXNsID0gcGlsX3RvX3NidXNbdGhpc19pcnFdOworCisJCQlpZiAoc2J1c2wpCisJCQkJdGhpc19pcnEgPSAoKChib2FyZCArIDEpIDw8IDUpICsKKwkJCQkJICAgIChzYnVzbCA8PCAyKSArCisJCQkJCSAgICBzbG90KTsKKworCQkJb3AtPmlycXNbaV0gPSB0aGlzX2lycTsKKwkJfQorCX0KKworCWJ1aWxkX2RldmljZV9yZXNvdXJjZXMob3AsIHBhcmVudCk7CisKKwlvcC0+ZGV2LnBhcmVudCA9IHBhcmVudDsKKwlvcC0+ZGV2LmJ1cyA9ICZvZl9idXNfdHlwZTsKKwlpZiAoIXBhcmVudCkKKwkJc3RyY3B5KG9wLT5kZXYuYnVzX2lkLCAicm9vdCIpOworCWVsc2UKKwkJc3RyY3B5KG9wLT5kZXYuYnVzX2lkLCBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CisKKwlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKG9wKSkgeworCQlwcmludGsoIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgb2YgZGV2aWNlLlxuIiwKKwkJICAgICAgIGRwLT5mdWxsX25hbWUpOworCQlrZnJlZShvcCk7CisJCW9wID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gb3A7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzY2FuX3RyZWUoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXdoaWxlIChkcCkgeworCQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IHNjYW5fb25lX2RldmljZShkcCwgcGFyZW50KTsKKworCQlpZiAob3ApCisJCQlzY2FuX3RyZWUoZHAtPmNoaWxkLCAmb3AtPmRldik7CisKKwkJZHAgPSBkcC0+c2libGluZzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzY2FuX29mX2RldmljZXModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOworCXN0cnVjdCBvZl9kZXZpY2UgKnBhcmVudDsKKworCXBhcmVudCA9IHNjYW5fb25lX2RldmljZShyb290LCBOVUxMKTsKKwlpZiAoIXBhcmVudCkKKwkJcmV0dXJuOworCisJc2Nhbl90cmVlKHJvb3QtPmNoaWxkLCAmcGFyZW50LT5kZXYpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBvZl9idXNfZHJpdmVyX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyOwogCisJZXJyID0gYnVzX3JlZ2lzdGVyKCZvZl9idXNfdHlwZSk7CiAjaWZkZWYgQ09ORklHX1BDSQogCWlmICghZXJyKQogCQllcnIgPSBidXNfcmVnaXN0ZXIoJmVidXNfYnVzX3R5cGUpOwpAQCAtMTY1LDcgKzYzNCwxMSBAQAogCWlmICghZXJyKQogCQllcnIgPSBidXNfcmVnaXN0ZXIoJnNidXNfYnVzX3R5cGUpOwogI2VuZGlmCi0JcmV0dXJuIDA7CisKKwlpZiAoIWVycikKKwkJc2Nhbl9vZl9kZXZpY2VzKCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBwb3N0Y29yZV9pbml0Y2FsbChvZl9idXNfZHJpdmVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCmluZGV4IGJjZmRkZGQuLmJmZDMxYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIENQLTEyMDAgYnkgRXJpYyBCcm93ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzQ2LDcgKzc0NSw3IEBACiAJd3JpdGVsIChQQ0lfQ09VTlRFUl9JUlFfU0VUKHRpbWVyX2lycSwgMCksCiAJCXBjaWMtPnBjaWNfcmVncytQQ0lfQ09VTlRFUl9JUlEpOwogCWlycSA9IHJlcXVlc3RfaXJxKHRpbWVyX2lycSwgcGNpY190aW1lcl9oYW5kbGVyLAotCQkJICAoU0FfSU5URVJSVVBUIHwgU0FfU1RBVElDX0FMTE9DKSwgInRpbWVyIiwgTlVMTCk7CisJCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGlycSkgewogCQlwcm9tX3ByaW50ZigidGltZV9pbml0OiB1bmFibGUgdG8gYXR0YWNoIElSUSVkXG4iLCB0aW1lcl9pcnEpOwogCQlwcm9tX2hhbHQoKTsKQEAgLTg2MCw3ICs4NTksNyBAQAogfQogCiB2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAxMThjYWM4Li44OWEyOGNjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmMKaW5kZXggOTQ2Y2U2ZC4uNGIwNmRjYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uYwpAQCAtMTkwLDYgKzE5MCwzNiBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9nZXRpbnRwcm9wX2RlZmF1bHQpOwogCitpbnQgb2Zfbl9hZGRyX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50KiBpcDsKKwlkbyB7CisJCWlmIChucC0+cGFyZW50KQorCQkJbnAgPSBucC0+cGFyZW50OworCQlpcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7CisJCWlmIChpcCAhPSBOVUxMKQorCQkJcmV0dXJuICppcDsKKwl9IHdoaWxlIChucC0+cGFyZW50KTsKKwkvKiBObyAjYWRkcmVzcy1jZWxscyBwcm9wZXJ0eSBmb3IgdGhlIHJvb3Qgbm9kZSwgZGVmYXVsdCB0byAyICovCisJcmV0dXJuIDI7Cit9CitFWFBPUlRfU1lNQk9MKG9mX25fYWRkcl9jZWxscyk7CisKK2ludCBvZl9uX3NpemVfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQqIGlwOworCWRvIHsKKwkJaWYgKG5wLT5wYXJlbnQpCisJCQlucCA9IG5wLT5wYXJlbnQ7CisJCWlwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKKwkJaWYgKGlwICE9IE5VTEwpCisJCQlyZXR1cm4gKmlwOworCX0gd2hpbGUgKG5wLT5wYXJlbnQpOworCS8qIE5vICNzaXplLWNlbGxzIHByb3BlcnR5IGZvciB0aGUgcm9vdCBub2RlLCBkZWZhdWx0IHRvIDEgKi8KKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0wob2Zfbl9zaXplX2NlbGxzKTsKKwogaW50IG9mX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWwsIGludCBsZW4pCiB7CiAJc3RydWN0IHByb3BlcnR5ICoqcHJldnA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYwppbmRleCBhODkzYTljLi44NjA2ZWY0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC00OTYsNyArNDk1LDcgQEAKIAkJaWYgKCFwKQogCQkJZXJyID0gLUVOT01FTTsKIAkJZWxzZQotCQkJcmVnaXN0ZXJfY3B1KHAsIGksIE5VTEwpOworCQkJcmVnaXN0ZXJfY3B1KHAsIGkpOwogCX0KIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbC5jCmluZGV4IDA3NDhkODEuLmM5MzAxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbC5jCkBAIC03LDcgKzcsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0ICAgKGVjZEBza3luZXQuYmUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwppbmRleCBmZDdkZWFiLi41ZmI5ODdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKQEAgLTksNyArOSw2IEBACiAjZGVmaW5lIEVYUE9SVF9TWU1UQUJfU1RST1BTCiAjZGVmaW5lIFBST01MSUJfSU5URVJOQUwKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRjX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKaW5kZXggMGYyZDhkOS4uNGJlMmM4NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKQEAgLTksNyArOSw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk2IERhdmUgUmVkbWFuIChkamhyQHRhZHBvbGUuY28udWspCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CkBAIC0xODAsNyArMTc5LDcgQEAKIAogCWlycSA9IHJlcXVlc3RfaXJxKFRJTUVSX0lSUSwKIAkJCSAgY291bnRlcl9mbiwKLQkJCSAgKFNBX0lOVEVSUlVQVCB8IFNBX1NUQVRJQ19BTExPQyksCisJCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwKIAkJCSAgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGlycSkgewogCQlwcm9tX3ByaW50ZigidGltZV9pbml0OiB1bmFibGUgdG8gYXR0YWNoIElSUSVkXG4iLFRJTUVSX0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCmluZGV4IDljMzBlMzUuLjc0ZWVkOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCkBAIC02LDcgKzYsNiBAQAogICogIEhlYXZpbHkgYmFzZWQgb24gYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CkBAIC0xMDgsMTMgKzEwNywxMyBAQAogCQkJICAgICAgIGtzdGF0X2NwdShjcHVfbG9naWNhbF9tYXAoeCkpLmlycXNbaV0pOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiVjICVzIiwKLQkJCShhY3Rpb24tPmZsYWdzICYgU0FfSU5URVJSVVBUKSA/ICcrJyA6ICcgJywKKwkJCShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgPyAnKycgOiAnICcsCiAJCQlhY3Rpb24tPm5hbWUpOwogCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CiAJCWZvciAoOzspIHsKIAkJCWZvciAoOyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgewogCQkJCXNlcV9wcmludGYocCwgIiwlcyAlcyIsCi0JCQkJCShhY3Rpb24tPmZsYWdzICYgU0FfSU5URVJSVVBUKSA/ICIgKyIgOiAiIiwKKwkJCQkJKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKSA/ICIgKyIgOiAiIiwKIAkJCQkJYWN0aW9uLT5uYW1lKTsKIAkJCX0KIAkJCWlmICghc2J1c2wpIGJyZWFrOwpAQCAtMTYxLDcgKzE2MCw3IEBACiAJCQlwcmludGsoIlRyeWluZyB0byBmcmVlIGZyZWUgc2hhcmVkIElSUSVkXG4iLGlycSk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KLQl9IGVsc2UgaWYgKGFjdGlvbi0+ZmxhZ3MgJiBTQV9TSElSUSkgeworCX0gZWxzZSBpZiAoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB7CiAJCXByaW50aygiVHJ5aW5nIHRvIGZyZWUgc2hhcmVkIElSUSVkIHdpdGggTlVMTCBkZXZpY2UgSURcbiIsIGlycSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC0yOTksMTMgKzI5OCwxMyBAQAogCWFjdGlvbiA9ICphY3Rpb25wOwogCQogCWlmIChhY3Rpb24pIHsKLQkJaWYgKChhY3Rpb24tPmZsYWdzICYgU0FfU0hJUlEpICYmIChpcnFmbGFncyAmIFNBX1NISVJRKSkgeworCQlpZiAoKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgJiYgKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpKSB7CiAJCQlmb3IgKHRtcCA9IGFjdGlvbjsgdG1wLT5uZXh0OyB0bXAgPSB0bXAtPm5leHQpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWlmICgoYWN0aW9uLT5mbGFncyAmIFNBX0lOVEVSUlVQVCkgXiAoaXJxZmxhZ3MgJiBTQV9JTlRFUlJVUFQpKSB7CisJCWlmICgoYWN0aW9uLT5mbGFncyAmIElSUUZfRElTQUJMRUQpIF4gKGlycWZsYWdzICYgSVJRRl9ESVNBQkxFRCkpIHsKIAkJCXByaW50aygiQXR0ZW1wdCB0byBtaXggZmFzdCBhbmQgc2xvdyBpbnRlcnJ1cHRzIG9uIElSUSVkIGRlbmllZFxuIiwgaXJxKTsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQ5MSw3ICs0OTAsNyBAQAogCiAJaXJxID0gcmVxdWVzdF9pcnEoVElNRVJfSVJRLAogCQkJICBjb3VudGVyX2ZuLAotCQkJICAoU0FfSU5URVJSVVBUIHwgU0FfU1RBVElDX0FMTE9DKSwKKwkJCSAgKElSUUZfRElTQUJMRUQgfCBTQV9TVEFUSUNfQUxMT0MpLAogCQkJICAidGltZXIiLCBOVUxMKTsKIAlpZiAoaXJxKSB7CiAJCXByb21fcHJpbnRmKCJ0aW1lX2luaXQ6IHVuYWJsZSB0byBhdHRhY2ggSVJRJWRcbiIsVElNRVJfSVJRKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKaW5kZXggYTI5NmMxMy4uN2NlZmEzMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKQEAgLTksNyArOSw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk2IERhdmUgUmVkbWFuIChkamhyQHRhZHBvbGUuY28udWspCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CkBAIC0yNzksNyArMjc4LDcgQEAKIAogCWlycSA9IHJlcXVlc3RfaXJxKFRJTUVSX0lSUSwKIAkJCSAgY291bnRlcl9mbiwKLQkJCSAgKFNBX0lOVEVSUlVQVCB8IFNBX1NUQVRJQ19BTExPQyksCisJCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwKIAkJCSAgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGlycSkgewogCQlwcm9tX3ByaW50ZigidGltZV9pbml0OiB1bmFibGUgdG8gYXR0YWNoIElSUSVkXG4iLFRJTUVSX0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc29sYXJpcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NvbGFyaXMuYwppbmRleCBmYjc1Nzg1Li5jMDlhZmQ5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc29sYXJpcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zb2xhcmlzLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAbnVjbGVjdS51bmFtLm14KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3N1bm9zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3Vub3MuYwppbmRleCAyODhkZTI3Li5hYTBmYjJlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3Vub3MuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3Vub3MuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJICogc2ltcGxlLCBpdCBob3BlZnVsbHkgd29ya3MgaW4gbW9zdCBvYnZpb3VzIGNhc2VzLi4gRWFzeSB0bwogCSAqIGZvb2wgaXQsIGJ1dCB0aGlzIHNob3VsZCBjYXRjaCBtb3N0IG1pc3Rha2VzLgogCSAqLwotCWZyZWVwYWdlcyA9IGdldF9wYWdlX2NhY2hlX3NpemUoKTsKKwlmcmVlcGFnZXMgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX1BBR0VTKTsKIAlmcmVlcGFnZXMgPj49IDE7CiAJZnJlZXBhZ2VzICs9IG5yX2ZyZWVfcGFnZXMoKTsKIAlmcmVlcGFnZXMgKz0gbnJfc3dhcF9wYWdlczsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUwppbmRleCAyODU2NTUxLi4xMGRmMzhlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCkBAIC05LDcgKzksNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1IEFkcmlhbiBNLiBSb2RyaWd1ZXogKGFkcmlhbkByZW11cy5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIAkuZGF0YQogCS5hbGlnbiA0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aWNrMTQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RpY2sxNC5jCmluZGV4IDU5MTU0N2EuLmQzYjRkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpY2sxNC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpY2sxNC5jCkBAIC03NCw3ICs3NCw3IEBACiAKIAlpZiAoIXJlcXVlc3RfaXJxKGlycV9uciwKIAkJCSBoYW5kbGVyLAotCQkJIChTQV9JTlRFUlJVUFQgfCBTQV9TVEFUSUNfQUxMT0MpLAorCQkJIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwKIAkJCSAiY291bnRlcjE0IiwKIAkJCSBOVUxMKSkgewogCQlpbnN0YWxsX2xpbnV4X3RpY2tlcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCmluZGV4IDdkYWRjZGIuLjA0ZWIxZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIDE5OTctMDktMTAJVXBkYXRlZCBOVFAgY29kZSBhY2NvcmRpbmcgdG8gdGVjaG5pY2FsIG1lbW9yYW5kdW0gSmFuICc5NgogICoJCSJBIEtlcm5lbCBNb2RlbCBmb3IgUHJlY2lzaW9uIFRpbWVrZWVwaW5nIiBieSBEYXZlIE1pbGxzCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC00Miw2ICs0MSw3IEBACiAjaW5jbHVkZSA8YXNtL3N1bjRwYWRkci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaWMuaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKIApAQCAtMjczLDgzICsyNzMsMzEgQEAKICNlbmRpZgogfQogCi0vKiBQcm9iZSBmb3IgdGhlIG1vc3RlayByZWFsIHRpbWUgY2xvY2sgY2hpcC4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xvY2tfcHJvYmUodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNsb2NrX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgY2xrX3JlZ1syXTsKLQljaGFyIG1vZGVsWzEyOF07Ci0JcmVnaXN0ZXIgaW50IG5vZGUsIGNwdXVuaXQsIGJvb3RidXM7Ci0Jc3RydWN0IHJlc291cmNlIHI7CisJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOworCWNoYXIgKm1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibW9kZWwiLCBOVUxMKTsKIAotCWNwdXVuaXQgPSBib290YnVzID0gMDsKLQltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CisJaWYgKCFtb2RlbCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBEZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc3RhcnRpbmcgUFJPTSBub2RlIGZvciB0aGUgcHJvYmUuICovCi0Jbm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOwotCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKSB7Ci0JY2FzZSBzdW40YzoKLQkJYnJlYWs7Ci0JY2FzZSBzdW40bToKLQkJbm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9zZWFyY2hzaWJsaW5ncyhub2RlLCAib2JpbyIpKTsKLQkJYnJlYWs7Ci0JY2FzZSBzdW40ZDoKLQkJbm9kZSA9IHByb21fZ2V0Y2hpbGQoYm9vdGJ1cyA9IHByb21fc2VhcmNoc2libGluZ3MocHJvbV9nZXRjaGlsZChjcHV1bml0ID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhub2RlLCAiY3B1LXVuaXQiKSksICJib290YnVzIikpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcm9tX3ByaW50ZigiQ0xPQ0s6IFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSFcbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQkvKiBGaW5kIHRoZSBQUk9NIG5vZGUgZGVzY3JpYmluZyB0aGUgcmVhbCB0aW1lIGNsb2NrLiAqLwotCXNwX2Nsb2NrX3R5cCA9IE1TVEtfSU5WQUxJRDsKLQlub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhub2RlLCJlZXByb20iKTsKLQlpZiAoIW5vZGUpIHsKLQkJcHJvbV9wcmludGYoIkNMT0NLOiBObyBjbG9jayBmb3VuZCFcbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQkvKiBHZXQgdGhlIG1vZGVsIG5hbWUgYW5kIHNldHVwIGV2ZXJ5dGhpbmcgdXAuICovCi0JbW9kZWxbMF0gPSAnXDAnOwotCXByb21fZ2V0c3RyaW5nKG5vZGUsICJtb2RlbCIsIG1vZGVsLCBzaXplb2YobW9kZWwpKTsKLQlpZiAoc3RyY21wKG1vZGVsLCAibWs0OHQwMiIpID09IDApIHsKKwlpZiAoIXN0cmNtcChtb2RlbCwgIm1rNDh0MDIiKSkgewogCQlzcF9jbG9ja190eXAgPSBNU1RLNDhUMDI7Ci0JCWlmIChwcm9tX2dldHByb3BlcnR5KG5vZGUsICJyZWciLCAoY2hhciAqKSBjbGtfcmVnLCBzaXplb2YoY2xrX3JlZykpID09IC0xKSB7Ci0JCQlwcm9tX3ByaW50ZigiY2xvY2tfcHJvYmU6IEZBSUxFRCFcbiIpOwotCQkJcHJvbV9oYWx0KCk7Ci0JCX0KLQkJaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40ZCkKLQkJCXByb21fYXBwbHlfZ2VuZXJpY19yYW5nZXMgKGJvb3RidXMsIGNwdXVuaXQsIGNsa19yZWcsIDEpOwotCQllbHNlCi0JCQlwcm9tX2FwcGx5X29iaW9fcmFuZ2VzKGNsa19yZWcsIDEpOworCiAJCS8qIE1hcCB0aGUgY2xvY2sgcmVnaXN0ZXIgaW8gYXJlYSByZWFkLW9ubHkgKi8KLQkJci5mbGFncyA9IGNsa19yZWdbMF0ud2hpY2hfaW87Ci0JCXIuc3RhcnQgPSBjbGtfcmVnWzBdLnBoeXNfYWRkcjsKLQkJbXN0azQ4dDAyX3JlZ3MgPSBzYnVzX2lvcmVtYXAoJnIsIDAsCi0JCSAgICBzaXplb2Yoc3RydWN0IG1vc3RlazQ4dDAyKSwgIm1rNDh0MDIiKTsKKwkJbXN0azQ4dDAyX3JlZ3MgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1vc3RlazQ4dDAyKSwKKwkJCQkJICAgICJtazQ4dDAyIik7CiAJCW1zdGs0OHQwOF9yZWdzID0gTlVMTDsgIC8qIFRvIGNhdGNoIHdlaXJkbmVzcyAqLwotCX0gZWxzZSBpZiAoc3RyY21wKG1vZGVsLCAibWs0OHQwOCIpID09IDApIHsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobW9kZWwsICJtazQ4dDA4IikpIHsKIAkJc3BfY2xvY2tfdHlwID0gTVNUSzQ4VDA4OwotCQlpZihwcm9tX2dldHByb3BlcnR5KG5vZGUsICJyZWciLCAoY2hhciAqKSBjbGtfcmVnLAotCQkJCSAgICBzaXplb2YoY2xrX3JlZykpID09IC0xKSB7Ci0JCQlwcm9tX3ByaW50ZigiY2xvY2tfcHJvYmU6IEZBSUxFRCFcbiIpOwotCQkJcHJvbV9oYWx0KCk7Ci0JCX0KLQkJaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40ZCkKLQkJCXByb21fYXBwbHlfZ2VuZXJpY19yYW5nZXMgKGJvb3RidXMsIGNwdXVuaXQsIGNsa19yZWcsIDEpOwotCQllbHNlCi0JCQlwcm9tX2FwcGx5X29iaW9fcmFuZ2VzKGNsa19yZWcsIDEpOwotCQkvKiBNYXAgdGhlIGNsb2NrIHJlZ2lzdGVyIGlvIGFyZWEgcmVhZC1vbmx5ICovCi0JCS8qIFhYWCByL28gYXR0cmlidXRlIGlzIHNvbWV3aGVyZSBpbiByLmZsYWdzICovCi0JCXIuZmxhZ3MgPSBjbGtfcmVnWzBdLndoaWNoX2lvOwotCQlyLnN0YXJ0ID0gY2xrX3JlZ1swXS5waHlzX2FkZHI7Ci0JCW1zdGs0OHQwOF9yZWdzID0gc2J1c19pb3JlbWFwKCZyLCAwLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBtb3N0ZWs0OHQwOCksICJtazQ4dDA4Iik7CisJCW1zdGs0OHQwOF9yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCAwLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtb3N0ZWs0OHQwOCksCisJCQkJCSAgICAibWs0OHQwOCIpOwogCiAJCW1zdGs0OHQwMl9yZWdzID0gJm1zdGs0OHQwOF9yZWdzLT5yZWdzOwotCX0gZWxzZSB7Ci0JCXByb21fcHJpbnRmKCJDTE9DSzogVW5rbm93biBtb2RlbCBuYW1lICclcydcbiIsbW9kZWwpOwotCQlwcm9tX2hhbHQoKTsKLQl9CisJfSBlbHNlCisJCXJldHVybiAtRU5PREVWOwogCiAJLyogUmVwb3J0IGEgbG93IGJhdHRlcnkgdm9sdGFnZSBjb25kaXRpb24uICovCiAJaWYgKGhhc19sb3dfYmF0dGVyeSgpKQpAQCAtMzU4LDYgKzMwNiwyOCBAQAogCS8qIEtpY2sgc3RhcnQgdGhlIGNsb2NrIGlmIGl0IGlzIGNvbXBsZXRlbHkgc3RvcHBlZC4gKi8KIAlpZiAobW9zdGVrX3JlYWQobXN0azQ4dDAyX3JlZ3MgKyBNT1NURUtfU0VDKSAmIE1TVEtfU1RPUCkKIAkJa2lja19zdGFydF9jbG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNsb2NrX21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJlZXByb20iLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBjbG9ja19kcml2ZXIgPSB7CisJLm5hbWUJCT0gImNsb2NrIiwKKwkubWF0Y2hfdGFibGUJPSBjbG9ja19tYXRjaCwKKwkucHJvYmUJCT0gY2xvY2tfcHJvYmUsCit9OworCisKKy8qIFByb2JlIGZvciB0aGUgbW9zdGVrIHJlYWwgdGltZSBjbG9jayBjaGlwLiAqLworc3RhdGljIHZvaWQgY2xvY2tfaW5pdCh2b2lkKQoreworCW9mX3JlZ2lzdGVyX2RyaXZlcigmY2xvY2tfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOwogfQogCiB2b2lkIF9faW5pdCBzYnVzX3RpbWVfaW5pdCh2b2lkKQpAQCAtMzc2LDcgKzM0Niw3IEBACiAJaWYgKEFSQ0hfU1VONCkKIAkJc3VuNF9jbG9ja19wcm9iZSgpOwogCWVsc2UKLQkJY2xvY2tfcHJvYmUoKTsKKwkJY2xvY2tfaW5pdCgpOwogCiAJc3BhcmNfaW5pdF90aW1lcnModGltZXJfaW50ZXJydXB0KTsKIAkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jCmluZGV4IDQxZDQ1YzIuLjZhNzBkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEkgaGF0ZSB0cmFwcyBvbiB0aGUgc3BhcmMsIGdycnIuLi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4gIC8qIGZvciBqaWZmaWVzICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2F0b21pYy5TIGIvYXJjaC9zcGFyYy9saWIvYXRvbWljLlMKaW5kZXggZjQ4YWQwYy4uMTc4Y2JiOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvYXRvbWljLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvYXRvbWljLlMKQEAgLTMsNyArMyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwZnMucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHNyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2JpdG9wcy5TIGIvYXJjaC9zcGFyYy9saWIvYml0b3BzLlMKaW5kZXggM2U5Mzk5Ny4uY2I3ZmI2NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvYml0b3BzLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvYml0b3BzLlMKQEAgLTMsNyArMyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Bzci5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9yd3NlbS5TIGIvYXJjaC9zcGFyYy9saWIvcndzZW0uUwppbmRleCBlNzU3OGRjLi4yMDY1Nzc0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9yd3NlbS5TCisrKyBiL2FyY2gvc3BhcmMvbGliL3J3c2VtLlMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSmFrdWIgSmVsaW5layAoamFrdWJAcmVkaGF0LmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wc3IuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9idGZpeHVwLmMgYi9hcmNoL3NwYXJjL21tL2J0Zml4dXAuYwppbmRleCBmMTQ3YTQ0Li5lYzQyMzFjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2J0Zml4dXAuYworKysgYi9hcmNoL3NwYXJjL21tL2J0Zml4dXAuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OCBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZXh0YWJsZS5jIGIvYXJjaC9zcGFyYy9tbS9leHRhYmxlLmMKaW5kZXggYzk4NDVjNy4uMTZjYzI4OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9leHRhYmxlLmMKQEAgLTIsNyArMiw2IEBACiAgKiBsaW51eC9hcmNoL3NwYXJjL21tL2V4dGFibGUuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2h5cGVyc3BhcmMuUyBiL2FyY2gvc3BhcmMvbW0vaHlwZXJzcGFyYy5TCmluZGV4IGEyMzFjY2EuLmQyOWNjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaHlwZXJzcGFyYy5TCisrKyBiL2FyY2gvc3BhcmMvbW0vaHlwZXJzcGFyYy5TCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndHNybW11Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAJLnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0LmMKaW5kZXggY2ZhN2QzNC4uYzg1ZGRmMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0LmMKQEAgLTcsNyArNyw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pby11bml0LmMgYi9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYwppbmRleCBlZWZmZmExLi40MmMxYzcwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYworKysgYi9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NywxOTk4IEpha3ViIEplbGluZWsgICAgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCiAgKi8KICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pb21tdS5jIGIvYXJjaC9zcGFyYy9tbS9pb21tdS5jCmluZGV4IDcyMTU4NDkuLmJlMDQyZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW9tbXUuYworKysgYi9hcmNoL3NwYXJjL21tL2lvbW11LmMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBKYWt1YiBKZWxpbmVrICAgIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQogICovCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggNThjNjVjYy4uMTZlMTNmNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25Ac2FtYmEub3JnKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwppbmRleCA0OWYyOGMxLi43ZmRkZGYzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCkBAIC0xMCw3ICsxMCw2IEBACiAKICNkZWZpbmUgTlJfVEFTS19CVUNLRVRTIDUxMgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3N3aWZ0LlMgYi9hcmNoL3NwYXJjL21tL3N3aWZ0LlMKaW5kZXggY2Q5MGYzZi4uOWY0Y2QzOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zd2lmdC5TCisrKyBiL2FyY2gvc3BhcmMvbW0vc3dpZnQuUwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wc3IuaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vdHN1bmFtaS5TIGIvYXJjaC9zcGFyYy9tbS90c3VuYW1pLlMKaW5kZXggNjk3YWY2MS4uNDk4OGU2YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS90c3VuYW1pLlMKKysrIGIvYXJjaC9zcGFyYy9tbS90c3VuYW1pLlMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3Bzci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS92aWtpbmcuUyBiL2FyY2gvc3BhcmMvbW0vdmlraW5nLlMKaW5kZXggM2NiZDZkZS4uNzU0YzYyMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS92aWtpbmcuUworKysgYi9hcmNoL3NwYXJjL21tL3Zpa2luZy5TCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5ICBQYXZlbCBTZW1lcmFkICAoc2VtZXJhZEBzczEwMDAubXMubWZmLmN1bmkuY3opCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHNyLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vaW5pdC5jIGIvYXJjaC9zcGFyYy9wcm9tL2luaXQuYwppbmRleCBiODM0MDljLi41MGFiZmIxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vaW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0LmMKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vbWVtb3J5LmMgYi9hcmNoL3NwYXJjL3Byb20vbWVtb3J5LmMKaW5kZXggYzIwZTUzMC4uYjBjMGY5YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL21lbW9yeS5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9tZW1vcnkuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NyBNaWNoYWVsIEEuIEdyaWZmaXRoIChncmlmQGFjbS5vcmcpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL21pc2MuYyBiL2FyY2gvc3BhcmMvcHJvbS9taXNjLmMKaW5kZXggYzg0MGMyMC4uMTk0MmM3YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL21pc2MuYworKysgYi9hcmNoL3NwYXJjL3Byb20vbWlzYy5jCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9hdXhpby5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9hdXhpby5jCmluZGV4IGMyYzY5YzEuLjcxODM1MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXV4aW8uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2F1eGlvLmMKQEAgLTExLDEwICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCi0jaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NidXMuaD4KLSNpbmNsdWRlIDxhc20vZWJ1cy5oPgogI2luY2x1ZGUgPGFzbS9hdXhpby5oPgogCiB2b2lkIF9faW9tZW0gKmF1eGlvX3JlZ2lzdGVyID0gTlVMTDsKQEAgLTExMSwxMiArMTEwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBhdXhpb19yZXBvcnRfZGV2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQVVYSU86IEZvdW5kIGRldmljZSBhdCAlc1xuIiwKLQkgICAgICAgZHAtPmZ1bGxfbmFtZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF1eGlvX21hdGNoW10gPSB7CiAJewogCQkubmFtZSA9ICJhdXhpbyIsCkBAIC0xMjYsNjcgKzExOSw0OCBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdXhpb19tYXRjaCk7CiAKLSNpZmRlZiBDT05GSUdfU0JVUwotc3RhdGljIGludCBfX2RldmluaXQgYXV4aW9fc2J1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQorc3RhdGljIGludCBfX2RldmluaXQgYXV4aW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYgPSB0b19zYnVzX2RldmljZSgmZGV2LT5kZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBkZXYtPm5vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JYXV4aW9fZGV2dHlwZSAgPSBBVVhJT19UWVBFX1NCVVM7Ci0JYXV4aW9fcmVnaXN0ZXIgPSBzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCAwLAotCQkJCSAgICAgIHNkZXYtPnJlZ19hZGRyc1swXS5yZWdfc2l6ZSwKLQkJCQkgICAgICAiYXV4aWxpYXJ5SU8iKTsKKwlpZiAoIXN0cmNtcChkcC0+cGFyZW50LT5uYW1lLCAiZWJ1cyIpKSB7CisJCWF1eGlvX2RldnR5cGUgPSBBVVhJT19UWVBFX0VCVVM7CisJCXNpemUgPSBzaXplb2YodTMyKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoZHAtPnBhcmVudC0+bmFtZSwgInNidXMiKSkgeworCQlhdXhpb19kZXZ0eXBlID0gQVVYSU9fVFlQRV9TQlVTOworCQlzaXplID0gMTsKKwl9IGVsc2UgeworCQlwcmludGsoImF1eGlvOiBVbmtub3duIHBhcmVudCBidXMgdHlwZSBbJXNdXG4iLAorCQkgICAgICAgZHAtPnBhcmVudC0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlhdXhpb19yZWdpc3RlciA9IG9mX2lvcmVtYXAoJmRldi0+cmVzb3VyY2VbMF0sIDAsIHNpemUsICJhdXhpbyIpOwogCWlmICghYXV4aW9fcmVnaXN0ZXIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JYXV4aW9fcmVwb3J0X2RldihkZXYtPm5vZGUpOwotCXJldHVybiAwOwotfQorCXByaW50ayhLRVJOX0lORk8gIkFVWElPOiBGb3VuZCBkZXZpY2UgYXQgJXNcbiIsCisJICAgICAgIGRwLT5mdWxsX25hbWUpOwogCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBhdXhpb19zYnVzX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXV4aW8iLAotCS5tYXRjaF90YWJsZQk9IGF1eGlvX21hdGNoLAotCS5wcm9iZQkJPSBhdXhpb19zYnVzX3Byb2JlLAotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIGludCBfX2RldmluaXQgYXV4aW9fZWJ1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZSAqZWRldiA9IHRvX2VidXNfZGV2aWNlKCZkZXYtPmRldik7Ci0KLQlhdXhpb19kZXZ0eXBlICA9IEFVWElPX1RZUEVfRUJVUzsKLQlhdXhpb19yZWdpc3RlciA9IGlvcmVtYXAoZWRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIHNpemVvZih1MzIpKTsKLQlpZiAoIWF1eGlvX3JlZ2lzdGVyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWF1eGlvX3JlcG9ydF9kZXYoZGV2LT5ub2RlKTsKLQotCWF1eGlvX3NldF9sZWQoQVVYSU9fTEVEX09OKTsKKwlpZiAoYXV4aW9fZGV2dHlwZSA9PSBBVVhJT19UWVBFX0VCVVMpCisJCWF1eGlvX3NldF9sZWQoQVVYSU9fTEVEX09OKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBhdXhpb19lYnVzX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGF1eGlvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiYXV4aW8iLAogCS5tYXRjaF90YWJsZQk9IGF1eGlvX21hdGNoLAotCS5wcm9iZQkJPSBhdXhpb19lYnVzX3Byb2JlLAorCS5wcm9iZQkJPSBhdXhpb19wcm9iZSwKIH07Ci0jZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgYXV4aW9fcHJvYmUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF1eGlvX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU0JVUwotCW9mX3JlZ2lzdGVyX2RyaXZlcigmYXV4aW9fc2J1c19kcml2ZXIsICZzYnVzX2J1c190eXBlKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QQ0kKLQlvZl9yZWdpc3Rlcl9kcml2ZXIoJmF1eGlvX2VidXNfZHJpdmVyLCAmZWJ1c19idXNfdHlwZSk7Ci0jZW5kaWYKLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmF1eGlvX2RyaXZlciwgJm9mX2J1c190eXBlKTsKIH0KIAogLyogTXVzdCBiZSBhZnRlciBzdWJzeXNfaW5pdGNhbGwoKSBzbyB0aGF0IGJ1c3NlcyBhcmUgcHJvYmVkLiAgTXVzdAogICogYmUgYmVmb3JlIGRldmljZV9pbml0Y2FsbCgpIGJlY2F1c2UgdGhpbmdzIGxpa2UgdGhlIGZsb3BweSBkcml2ZXIKICAqIG5lZWQgdG8gdXNlIHRoZSBBVVhJTyByZWdpc3Rlci4KICAqLwotZnNfaW5pdGNhbGwoYXV4aW9fcHJvYmUpOworZnNfaW5pdGNhbGwoYXV4aW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9iaW5mbXRfZWxmMzIuYwppbmRleCA4YTJhYmNjLi5hOThmM2FlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9lbGYzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jCmluZGV4IDExY2MwY2EuLjdlYjgxZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kZXZpY2VzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYwppbmRleCAzODkzMDFjLi5mOGVmMmYyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMSw4ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KLSNpbmNsdWRlIDxhc20vdmRldi5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogLyogVXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc2VzIHRvIE5hdFNlbWkgU1VQRVIgSS9PIGNoaXAgY29uZmlndXJlCiAgKiBvcGVyYXRpb25zIGluIGFzbS9uczg3MzAzLmgKQEAgLTMyLDEwMCArMjksNiBAQAogZXh0ZXJuIHZvaWQgY3B1X3Byb2JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2VudHJhbF9wcm9iZSh2b2lkKTsKIAotdTMyIHN1bjR2X3ZkZXZfZGV2aGFuZGxlOwotc3RydWN0IGRldmljZV9ub2RlICpzdW40dl92ZGV2X3Jvb3Q7Ci0KLXN0cnVjdCB2ZGV2X2ludG1hcCB7Ci0JdW5zaWduZWQgaW50IHBoeXM7Ci0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBpbnQgY25vZGU7Ci0JdW5zaWduZWQgaW50IGNpbnRlcnJ1cHQ7Ci19OwotCi1zdHJ1Y3QgdmRldl9pbnRtYXNrIHsKLQl1bnNpZ25lZCBpbnQgcGh5czsKLQl1bnNpZ25lZCBpbnQgaW50ZXJydXB0OwotCXVuc2lnbmVkIGludCBfX3VudXNlZDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmRldl9pbnRtYXAgKnZkZXZfaW50bWFwOwotc3RhdGljIGludCB2ZGV2X251bV9pbnRtYXA7Ci1zdGF0aWMgc3RydWN0IHZkZXZfaW50bWFzayAqdmRldl9pbnRtYXNrOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfdmlydHVhbF9kZXZpY2VfcHJvYmUodm9pZCkKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcDsKLQlpbnQgc3o7Ci0KLQlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikKLQkJcmV0dXJuOwotCi0JZHAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAidmlydHVhbC1kZXZpY2VzIik7Ci0JaWYgKCFkcCkgewotCQlwcm9tX3ByaW50ZigiU1VONFY6IEZhdGFsIGVycm9yLCBubyB2aXJ0dWFsLWRldmljZXMgbm9kZS5cbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQlzdW40dl92ZGV2X3Jvb3QgPSBkcDsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JcmVncyA9IHByb3AtPnZhbHVlOwotCXN1bjR2X3ZkZXZfZGV2aGFuZGxlID0gKHJlZ3NbMF0ucGh5c19hZGRyID4+IDMyVUwpICYgMHgwZmZmZmZmZjsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAiaW50ZXJydXB0LW1hcCIsICZzeik7Ci0JdmRldl9pbnRtYXAgPSBwcm9wLT52YWx1ZTsKLQl2ZGV2X251bV9pbnRtYXAgPSBzeiAvIHNpemVvZihzdHJ1Y3QgdmRldl9pbnRtYXApOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJpbnRlcnJ1cHQtbWFwLW1hc2siLCBOVUxMKTsKLQl2ZGV2X2ludG1hc2sgPSBwcm9wLT52YWx1ZTsKLQotCXByaW50aygiJXM6IFZpcnR1YWwgRGV2aWNlIEJ1cyBkZXZoYW5kbGVbJXhdXG4iLAotCSAgICAgICBkcC0+ZnVsbF9uYW1lLCBzdW40dl92ZGV2X2RldmhhbmRsZSk7Ci19Ci0KLXVuc2lnbmVkIGludCBzdW40dl92ZGV2X2RldmljZV9pbnRlcnJ1cHQoc3RydWN0IGRldmljZV9ub2RlICpkZXZfbm9kZSkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JdW5zaWduZWQgaW50IGlycSwgcmVnOwotCWludCBpOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZGV2X25vZGUsICJpbnRlcnJ1cHRzIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKSB7Ci0JCXByaW50aygiVkRFVjogQ2Fubm90IGdldCBcImludGVycnVwdHNcIiAiCi0JCSAgICAgICAicHJvcGVydHkgZm9yIE9CUCBub2RlICVzXG4iLAotCQkgICAgICAgZGV2X25vZGUtPmZ1bGxfbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpcnEgPSAqKHVuc2lnbmVkIGludCAqKSBwcm9wLT52YWx1ZTsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRldl9ub2RlLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKSB7Ci0JCXByaW50aygiVkRFVjogQ2Fubm90IGdldCBcInJlZ1wiICIKLQkJICAgICAgICJwcm9wZXJ0eSBmb3IgT0JQIG5vZGUgJXNcbiIsCi0JCSAgICAgICBkZXZfbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJlZyA9ICoodW5zaWduZWQgaW50ICopIHByb3AtPnZhbHVlOwotCi0JZm9yIChpID0gMDsgaSA8IHZkZXZfbnVtX2ludG1hcDsgaSsrKSB7Ci0JCWlmICh2ZGV2X2ludG1hcFtpXS5waHlzID09IChyZWcgJiB2ZGV2X2ludG1hc2stPnBoeXMpICYmCi0JCSAgICB2ZGV2X2ludG1hcFtpXS5pcnEgPT0gKGlycSAmIHZkZXZfaW50bWFzay0+aW50ZXJydXB0KSkgewotCQkJaXJxID0gdmRldl9pbnRtYXBbaV0uY2ludGVycnVwdDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGkgPT0gdmRldl9udW1faW50bWFwKSB7Ci0JCXByaW50aygiVkRFVjogTm8gbWF0Y2hpbmcgaW50ZXJydXB0IG1hcCBlbnRyeSAiCi0JCSAgICAgICAiZm9yIE9CUCBub2RlICVzXG4iLCBkZXZfbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHN1bjR2X2J1aWxkX2lycShzdW40dl92ZGV2X2RldmhhbmRsZSwgaXJxKTsKLX0KLQogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9taWRfcHJvcCh2b2lkKQogewogCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkKQEAgLTI5MCw3ICsxOTMsNiBAQAogCX0KICNlbmRpZgogCi0Jc3VuNHZfdmlydHVhbF9kZXZpY2VfcHJvYmUoKTsKIAljZW50cmFsX3Byb2JlKCk7CiAKIAljcHVfcHJvYmUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMKaW5kZXggOThlMGE4Yy4uOGE5YjQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTIwLDYgKzE5LDggQEAKICNpbmNsdWRlIDxhc20vcGJtLmg+CiAjaW5jbHVkZSA8YXNtL2VidXMuaD4KICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vYnBwLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xMzksNyArMTQwLDcgQEAKIAogCWlmIChvbikgewogCQlpZiAocC0+ZmxhZ3MgJiBFQlVTX0RNQV9GTEFHX1VTRV9FQkRNQV9IQU5ETEVSKSB7Ci0JCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCBlYnVzX2RtYV9pcnEsIFNBX1NISVJRLCBwLT5uYW1lLCBwKSkKKwkJCWlmIChyZXF1ZXN0X2lycShwLT5pcnEsIGVidXNfZG1hX2lycSwgSVJRRl9TSEFSRUQsIHAtPm5hbWUsIHApKQogCQkJCXJldHVybiAtRUJVU1k7CiAJCX0KIApAQCAtMjc5LDQ1ICsyODAsMTIgQEAKIAlyZXR1cm4gbWVtOwogfQogCi1pbnQgX19pbml0IGVidXNfaW50bWFwX21hdGNoKHN0cnVjdCBsaW51eF9lYnVzICplYnVzLAotCQkJICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZywKLQkJCSAgICAgaW50ICppbnRlcnJ1cHQpCitzdGF0aWMgdm9pZCBfX2luaXQgZmlsbF9lYnVzX2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgc3RydWN0IGxpbnV4X2VidXNfY2hpbGQgKmRldiwKKwkJCQkgICBpbnQgbm9uX3N0YW5kYXJkX3JlZ3MpCiB7Ci0Jc3RydWN0IGxpbnV4X3Byb21fZWJ1c19pbnRtYXAgKmltYXA7Ci0Jc3RydWN0IGxpbnV4X3Byb21fZWJ1c19pbnRtYXNrICppbWFzazsKLQl1bnNpZ25lZCBpbnQgaGksIGxvLCBpcnE7Ci0JaW50IGksIGxlbiwgbl9pbWFwOwotCi0JaW1hcCA9IG9mX2dldF9wcm9wZXJ0eShlYnVzLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJmxlbik7Ci0JaWYgKCFpbWFwKQotCQlyZXR1cm4gMDsKLQluX2ltYXAgPSBsZW4gLyBzaXplb2YoaW1hcFswXSk7Ci0KLQlpbWFzayA9IG9mX2dldF9wcm9wZXJ0eShlYnVzLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwLW1hc2siLCBOVUxMKTsKLQlpZiAoIWltYXNrKQotCQlyZXR1cm4gMDsKLQotCWhpID0gcmVnLT53aGljaF9pbyAmIGltYXNrLT5waHlzX2hpOwotCWxvID0gcmVnLT5waHlzX2FkZHIgJiBpbWFzay0+cGh5c19sbzsKLQlpcnEgPSAqaW50ZXJydXB0ICYgaW1hc2stPmludGVycnVwdDsKLQlmb3IgKGkgPSAwOyBpIDwgbl9pbWFwOyBpKyspIHsKLQkJaWYgKChpbWFwW2ldLnBoeXNfaGkgPT0gaGkpICYmCi0JCSAgICAoaW1hcFtpXS5waHlzX2xvID09IGxvKSAmJgotCQkgICAgKGltYXBbaV0uaW50ZXJydXB0ID09IGlycSkpIHsKLQkJCSppbnRlcnJ1cHQgPSBpbWFwW2ldLmNpbnRlcnJ1cHQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXZvaWQgX19pbml0IGZpbGxfZWJ1c19jaGlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAotCQkJICAgIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcHJlZywKLQkJCSAgICBzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCAqZGV2LAotCQkJICAgIGludCBub25fc3RhbmRhcmRfcmVncykKLXsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcDsKIAlpbnQgKnJlZ3M7Ci0JaW50ICppcnFzOwogCWludCBpLCBsZW47CiAKIAlkZXYtPnByb21fbm9kZSA9IGRwOwpAQCAtMzU0LDEyICszMjIsMTYgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBQUk9NSU5UUl9NQVg7IGkrKykKLQkJZGV2LT5pcnFzW2ldID0gUENJX0lSUV9OT05FOwotCi0JaXJxcyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImludGVycnVwdHMiLCAmbGVuKTsKLQlpZiAoIWlycXMpIHsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZHApOworCWlmICghb3ApIHsKIAkJZGV2LT5udW1faXJxcyA9IDA7CisJfSBlbHNlIHsKKwkJZGV2LT5udW1faXJxcyA9IG9wLT5udW1faXJxczsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2lycXM7IGkrKykKKwkJCWRldi0+aXJxc1tpXSA9IG9wLT5pcnFzW2ldOworCX0KKworCWlmICghZGV2LT5udW1faXJxcykgewogCQkvKgogCQkgKiBPaCwgd2VsbCwgc29tZSBQUk9NcyBkb24ndCBleHBvcnQgaW50ZXJydXB0cwogCQkgKiBwcm9wZXJ0eSB0byBjaGlsZHJlbiBvZiBFQnVzIGRldmljZXMuLi4KQEAgLTM3NSwyMyArMzQ3LDYgQEAKIAkJCQlkZXYtPmlycXNbMF0gPSBkZXYtPnBhcmVudC0+aXJxc1sxXTsKIAkJCX0KIAkJfQotCX0gZWxzZSB7Ci0JCWRldi0+bnVtX2lycXMgPSBsZW4gLyBzaXplb2YoaXJxc1swXSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9pcnFzOyBpKyspIHsKLQkJCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGRldi0+YnVzLT5wYXJlbnQ7Ci0JCQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IHBibS0+cGFyZW50OwotCi0JCQlpZiAoZWJ1c19pbnRtYXBfbWF0Y2goZGV2LT5idXMsIHByZWcsICZpcnFzW2ldKSAhPSAtMSkgewotCQkJCWRldi0+aXJxc1tpXSA9IHAtPmlycV9idWlsZChwYm0sCi0JCQkJCQkJICAgIGRldi0+YnVzLT5zZWxmLAotCQkJCQkJCSAgICBpcnFzW2ldKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogSWYgd2UgZ2V0IGEgYm9ndXMgaW50ZXJydXB0IHByb3BlcnR5LCBqdXN0Ci0JCQkJICogcmVjb3JkIHRoZSByYXcgdmFsdWUgaW5zdGVhZCBvZiBwdW50aW5nLgotCQkJCSAqLwotCQkJCWRldi0+aXJxc1tpXSA9IGlycXNbaV07Ci0JCQl9Ci0JCX0KIAl9CiB9CiAKQEAgLTQwMyw3MiArMzU4LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19pbml0IGZpbGxfZWJ1c19kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX2luaXQgZmlsbF9lYnVzX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7CiAJc3RydWN0IGxpbnV4X2VidXNfY2hpbGQgKmNoaWxkOwotCWludCAqaXJxczsKLQlpbnQgaSwgbiwgbGVuOworCXN0cnVjdCBvZl9kZXZpY2UgKm9wOworCWludCBpLCBsZW47CiAKIAlkZXYtPnByb21fbm9kZSA9IGRwOwogCiAJcHJpbnRrKCIgWyVzIiwgZHAtPm5hbWUpOwogCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsICZsZW4pOwotCWlmICghcmVncykgeworCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CisJaWYgKCFvcCkgewogCQlkZXYtPm51bV9hZGRycyA9IDA7Ci0JCWdvdG8gcHJvYmVfaW50ZXJydXB0czsKLQl9Ci0KLQlpZiAobGVuICUgc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycykpIHsKLQkJcHJvbV9wcmludGYoIlVHSDogcHJvcGxlbiBmb3IgJXMgd2FzICVkLCBuZWVkIG11bHRpcGxlIG9mICVkXG4iLAotCQkJICAgIGRldi0+cHJvbV9ub2RlLT5uYW1lLCBsZW4sCi0JCQkgICAgKGludClzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzKSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQlkZXYtPm51bV9hZGRycyA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMpOwotCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2FkZHJzOyBpKyspIHsKLQkJLyogWFhYIExlYXJuIGhvdyB0byBpbnRlcnByZXQgZWJ1cyByYW5nZXMuLi4gLURhdmVNICovCi0JCWlmIChyZWdzW2ldLndoaWNoX2lvID49IDB4MTApCi0JCQluID0gKHJlZ3NbaV0ud2hpY2hfaW8gLSAweDEwKSA+PiAyOwotCQllbHNlCi0JCQluID0gcmVnc1tpXS53aGljaF9pbzsKLQotCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ICA9IGRldi0+YnVzLT5zZWxmLT5yZXNvdXJjZVtuXS5zdGFydDsKLQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArPSAodW5zaWduZWQgbG9uZylyZWdzW2ldLnBoeXNfYWRkcjsKLQkJZGV2LT5yZXNvdXJjZVtpXS5lbmQgICAgPQotCQkJKGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyAodW5zaWduZWQgbG9uZylyZWdzW2ldLnJlZ19zaXplIC0gMVVMKTsKLQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyAgPSBJT1JFU09VUkNFX01FTTsKLQkJZGV2LT5yZXNvdXJjZVtpXS5uYW1lICAgPSBkZXYtPnByb21fbm9kZS0+bmFtZTsKLQkJcmVxdWVzdF9yZXNvdXJjZSgmZGV2LT5idXMtPnNlbGYtPnJlc291cmNlW25dLAotCQkJCSAmZGV2LT5yZXNvdXJjZVtpXSk7Ci0JfQotCi1wcm9iZV9pbnRlcnJ1cHRzOgotCWZvciAoaSA9IDA7IGkgPCBQUk9NSU5UUl9NQVg7IGkrKykKLQkJZGV2LT5pcnFzW2ldID0gUENJX0lSUV9OT05FOwotCi0JaXJxcyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImludGVycnVwdHMiLCAmbGVuKTsKLQlpZiAoIWlycXMpIHsKIAkJZGV2LT5udW1faXJxcyA9IDA7CiAJfSBlbHNlIHsKLQkJZGV2LT5udW1faXJxcyA9IGxlbiAvIHNpemVvZihpcnFzWzBdKTsKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2lycXM7IGkrKykgewotCQkJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gZGV2LT5idXMtPnBhcmVudDsKLQkJCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gcGJtLT5wYXJlbnQ7CisJCSh2b2lkKSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCAmbGVuKTsKKwkJZGV2LT5udW1fYWRkcnMgPSBsZW4gLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzKTsKIAotCQkJaWYgKGVidXNfaW50bWFwX21hdGNoKGRldi0+YnVzLCAmcmVnc1swXSwgJmlycXNbaV0pICE9IC0xKSB7Ci0JCQkJZGV2LT5pcnFzW2ldID0gcC0+aXJxX2J1aWxkKHBibSwKLQkJCQkJCQkgICAgZGV2LT5idXMtPnNlbGYsCi0JCQkJCQkJICAgIGlycXNbaV0pOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBJZiB3ZSBnZXQgYSBib2d1cyBpbnRlcnJ1cHQgcHJvcGVydHksIGp1c3QKLQkJCQkgKiByZWNvcmQgdGhlIHJhdyB2YWx1ZSBpbnN0ZWFkIG9mIHB1bnRpbmcuCi0JCQkJICovCi0JCQkJZGV2LT5pcnFzW2ldID0gaXJxc1tpXTsKLQkJCX0KLQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fYWRkcnM7IGkrKykKKwkJCW1lbWNweSgmZGV2LT5yZXNvdXJjZVtpXSwKKwkJCSAgICAgICAmb3AtPnJlc291cmNlW2ldLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKworCQlkZXYtPm51bV9pcnFzID0gb3AtPm51bV9pcnFzOworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faXJxczsgaSsrKQorCQkJZGV2LT5pcnFzW2ldID0gb3AtPmlycXNbaV07CiAJfQogCiAJZGV2LT5vZmRldi5ub2RlID0gZHA7CkBAIC00OTAsNyArNDA1LDcgQEAKIAkJY2hpbGQtPm5leHQgPSBOVUxMOwogCQljaGlsZC0+cGFyZW50ID0gZGV2OwogCQljaGlsZC0+YnVzID0gZGV2LT5idXM7Ci0JCWZpbGxfZWJ1c19jaGlsZChkcCwgcmVncywgY2hpbGQsCisJCWZpbGxfZWJ1c19jaGlsZChkcCwgY2hpbGQsCiAJCQkJY2hpbGRfcmVnc19ub25zdGFuZGFyZChkZXYpKTsKIAogCQl3aGlsZSAoKGRwID0gZHAtPnNpYmxpbmcpICE9IE5VTEwpIHsKQEAgLTUwMCw3ICs0MTUsNyBAQAogCQkJY2hpbGQtPm5leHQgPSBOVUxMOwogCQkJY2hpbGQtPnBhcmVudCA9IGRldjsKIAkJCWNoaWxkLT5idXMgPSBkZXYtPmJ1czsKLQkJCWZpbGxfZWJ1c19jaGlsZChkcCwgcmVncywgY2hpbGQsCisJCQlmaWxsX2VidXNfY2hpbGQoZHAsIGNoaWxkLAogCQkJCQljaGlsZF9yZWdzX25vbnN0YW5kYXJkKGRldikpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IGJlODVjZTIuLjBhYWEzNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsOTgsOTkgSmFrdWIgSmVsaW5layAgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpbmNsdWRlIDxhc20vaGVhZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TCmluZGV4IDE0OTM4MzguLjRiMmJmOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZXRyYXAuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2V0cmFwLlMKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTkgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMzFjNTg5Mi4uNzU2ODRiNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAbnVjbGVjdS51bmFtLm14KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwppbmRleCBjYzg5YjA2Li40ZTY0NzI0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggIEpha3ViIEplbGluZWsgICAgKGpqQHVsdHJhLmxpbnV4LmN6KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpAQCAtMTUxLDcgKzE1MCw3IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlOXMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlOXMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCkBAIC0yMjQsNyArMjIzLDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKIHsKLQljcHVtYXNrX3QgbWFzayA9IGlycV9hZmZpbml0eVt2aXJ0X2lycV07CisJY3B1bWFza190IG1hc2sgPSBpcnFfZGVzY1t2aXJ0X2lycV0uYWZmaW5pdHk7CiAJaW50IGNwdWlkOwogCiAJaWYgKGNwdXNfZXF1YWwobWFzaywgQ1BVX01BU0tfQUxMKSkgewpAQCAtNDE0LDggKzQxMywxMiBAQAogCWRhdGEtPnByZV9oYW5kbGVyX2FyZzEgPSBhcmcxOwogCWRhdGEtPnByZV9oYW5kbGVyX2FyZzIgPSBhcmcyOwogCi0JZGVzYy0+aGFuZGxlciA9IChkZXNjLT5oYW5kbGVyID09ICZzdW40dV9pcnEgPwotCQkJICZzdW40dV9pcnFfYWNrIDogJnN1bjR2X2lycV9hY2spOworCWlmIChkZXNjLT5jaGlwID09ICZzdW40dV9pcnFfYWNrIHx8CisJICAgIGRlc2MtPmNoaXAgPT0gJnN1bjR2X2lycV9hY2spCisJCXJldHVybjsKKworCWRlc2MtPmNoaXAgPSAoZGVzYy0+Y2hpcCA9PSAmc3VuNHVfaXJxID8KKwkJICAgICAgJnN1bjR1X2lycV9hY2sgOiAmc3VuNHZfaXJxX2Fjayk7CiB9CiAKIHVuc2lnbmVkIGludCBidWlsZF9pcnEoaW50IGlub2ZpeHVwLCB1bnNpZ25lZCBsb25nIGljbHIsIHVuc2lnbmVkIGxvbmcgaW1hcCkKQEAgLTQzMSw3ICs0MzQsNyBAQAogCWJ1Y2tldCA9ICZpdmVjdG9yX3RhYmxlW2lub107CiAJaWYgKCFidWNrZXQtPnZpcnRfaXJxKSB7CiAJCWJ1Y2tldC0+dmlydF9pcnEgPSB2aXJ0X2lycV9hbGxvYyhfX2lycShidWNrZXQpKTsKLQkJaXJxX2Rlc2NbYnVja2V0LT52aXJ0X2lycV0uaGFuZGxlciA9ICZzdW40dV9pcnE7CisJCWlycV9kZXNjW2J1Y2tldC0+dmlydF9pcnFdLmNoaXAgPSAmc3VuNHVfaXJxOwogCX0KIAogCWRlc2MgPSBpcnFfZGVzYyArIGJ1Y2tldC0+dmlydF9pcnE7CkBAIC00NjUsNyArNDY4LDcgQEAKIAlidWNrZXQgPSAmaXZlY3Rvcl90YWJsZVtzeXNpbm9dOwogCWlmICghYnVja2V0LT52aXJ0X2lycSkgewogCQlidWNrZXQtPnZpcnRfaXJxID0gdmlydF9pcnFfYWxsb2MoX19pcnEoYnVja2V0KSk7Ci0JCWlycV9kZXNjW2J1Y2tldC0+dmlydF9pcnFdLmhhbmRsZXIgPSAmc3VuNHZfaXJxOworCQlpcnFfZGVzY1tidWNrZXQtPnZpcnRfaXJxXS5jaGlwID0gJnN1bjR2X2lycTsKIAl9CiAKIAlkZXNjID0gaXJxX2Rlc2MgKyBidWNrZXQtPnZpcnRfaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pc2EuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXNhLmMKaW5kZXggNmYxNmRlZS4uMGYzYWVjNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pc2EuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lzYS5jCkBAIC0zLDYgKzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vaXNhLmg+CiAKIHN0cnVjdCBzcGFyY19pc2FfYnJpZGdlICppc2FfY2hhaW47CkBAIC00NiwxMDcgKzQ4LDE2IEBACiAJcmV0dXJuIHByZWdzOwogfQogCi0vKiBJIGNhbid0IGJlbGlldmUgdGhleSBkaWRuJ3QgcHV0IGEgcmVhbCBJTk8gaW4gdGhlIGlzYSBkZXZpY2UKLSAqIGludGVycnVwdHMgcHJvcGVydHkuICBUaGUgd2hvbGUgcG9pbnQgb2YgdGhlIE9CUCBwcm9wZXJ0aWVzCi0gKiBpcyB0byBzaGllbGQgdGhlIGtlcm5lbCBmcm9tIElSUSByb3V0aW5nIGRldGFpbHMuCi0gKgotICogVGhlIFAxMjc1IHN0YW5kYXJkIGZvciBJU0EgZGV2aWNlcyBzZWVtcyB0byBhbHNvIGhhdmUgYmVlbgotICogdG90YWxseSBpZ25vcmVkLgotICoKLSAqIE9uIGxhdGVyIHN5c3RlbXMsIGFuIGludGVycnVwdC1tYXAgYW5kIGludGVycnVwdC1tYXAtbWFzayBzY2hlbWUKLSAqIGFraW4gdG8gRUJVUyBpcyB1c2VkLgotICovCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQJb2JwX2lycTsKLQlpbnQJcGNpX2lubzsKLX0gZ3JvdmVyX2lycV90YWJsZVtdID0gewotCXsgMSwgMHgwMCB9LAkvKiBkbWEsIHVua25vd24gaW5vIGF0IHRoaXMgcG9pbnQgKi8KLQl7IDIsIDB4MjcgfSwJLyogZmxvcHB5ICovCi0JeyAzLCAweDIyIH0sCS8qIHBhcmFsbGVsICovCi0JeyA0LCAweDJiIH0sCS8qIHNlcmlhbCAqLwotCXsgNSwgMHgyNSB9LAkvKiBhY3BpIHBvd2VyIG1hbmFnZW1lbnQgKi8KLQotCXsgMCwgMHgwMCB9CS8qIGVuZCBvZiB0YWJsZSAqLwotfTsKLQotc3RhdGljIGludCBfX2luaXQgaXNhX2Rldl9nZXRfaXJxX3VzaW5nX2ltYXAoc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmlzYV9kZXYsCi0JCQkJCSAgICAgc3RydWN0IHNwYXJjX2lzYV9icmlkZ2UgKmlzYV9iciwKLQkJCQkJICAgICBpbnQgKmludGVycnVwdCwKLQkJCQkJICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZykKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbV9lYnVzX2ludG1hcCAqaW1hcDsKLQlzdHJ1Y3QgbGludXhfcHJvbV9lYnVzX2ludG1hcCAqaW1hc2s7Ci0JdW5zaWduZWQgaW50IGhpLCBsbywgaXJxOwotCWludCBpLCBsZW4sIG5faW1hcDsKLQotCWltYXAgPSBvZl9nZXRfcHJvcGVydHkoaXNhX2JyLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJmxlbik7Ci0JaWYgKCFpbWFwKQotCQlyZXR1cm4gMDsKLQluX2ltYXAgPSBsZW4gLyBzaXplb2YoaW1hcFswXSk7Ci0KLQlpbWFzayA9IG9mX2dldF9wcm9wZXJ0eShpc2FfYnItPnByb21fbm9kZSwgImludGVycnVwdC1tYXAtbWFzayIsIE5VTEwpOwotCWlmICghaW1hc2spCi0JCXJldHVybiAwOwotCi0JaGkgPSByZWctPndoaWNoX2lvICYgaW1hc2stPnBoeXNfaGk7Ci0JbG8gPSByZWctPnBoeXNfYWRkciAmIGltYXNrLT5waHlzX2xvOwotCWlycSA9ICppbnRlcnJ1cHQgJiBpbWFzay0+aW50ZXJydXB0OwotCWZvciAoaSA9IDA7IGkgPCBuX2ltYXA7IGkrKykgewotCQlpZiAoKGltYXBbaV0ucGh5c19oaSA9PSBoaSkgJiYKLQkJICAgIChpbWFwW2ldLnBoeXNfbG8gPT0gbG8pICYmCi0JCSAgICAoaW1hcFtpXS5pbnRlcnJ1cHQgPT0gaXJxKSkgewotCQkJKmludGVycnVwdCA9IGltYXBbaV0uY2ludGVycnVwdDsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAtMTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGlzYV9kZXZfZ2V0X2lycShzdHJ1Y3Qgc3BhcmNfaXNhX2RldmljZSAqaXNhX2RldiwKIAkJCQkgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnByZWdzKQogewotCWludCBpcnFfcHJvcDsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoaXNhX2Rldi0+cHJvbV9ub2RlKTsKIAotCWlycV9wcm9wID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGlzYV9kZXYtPnByb21fbm9kZSwKLQkJCQkJICJpbnRlcnJ1cHRzIiwgLTEpOwotCWlmIChpcnFfcHJvcCA8PSAwKSB7Ci0JCWdvdG8gbm9faXJxOworCWlmICghb3AgfHwgIW9wLT5udW1faXJxcykgeworCQlpc2FfZGV2LT5pcnEgPSBQQ0lfSVJRX05PTkU7CiAJfSBlbHNlIHsKLQkJc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnBjaWM7Ci0JCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKLQkJaW50IGk7Ci0KLQkJaWYgKG9mX2ZpbmRfcHJvcGVydHkoaXNhX2Rldi0+YnVzLT5wcm9tX25vZGUsCi0JCQkJICAgICAiaW50ZXJydXB0LW1hcCIsIE5VTEwpKSB7Ci0JCQlpZiAoIWlzYV9kZXZfZ2V0X2lycV91c2luZ19pbWFwKGlzYV9kZXYsCi0JCQkJCQkJaXNhX2Rldi0+YnVzLAotCQkJCQkJCSZpcnFfcHJvcCwKLQkJCQkJCQlwcmVncykpCi0JCQkJZ290byByb3V0ZV9pcnE7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBncm92ZXJfaXJxX3RhYmxlW2ldLm9icF9pcnEgIT0gMDsgaSsrKSB7Ci0JCQlpZiAoZ3JvdmVyX2lycV90YWJsZVtpXS5vYnBfaXJxID09IGlycV9wcm9wKSB7Ci0JCQkJaW50IGlubyA9IGdyb3Zlcl9pcnFfdGFibGVbaV0ucGNpX2lubzsKLQotCQkJCWlmIChpbm8gPT0gMCkKLQkJCQkJZ290byBub19pcnE7Ci0gCi0JCQkJaXJxX3Byb3AgPSBpbm87Ci0JCQkJZ290byByb3V0ZV9pcnE7Ci0JCQl9Ci0JCX0KLQkJZ290byBub19pcnE7Ci0KLXJvdXRlX2lycToKLQkJcGJtID0gaXNhX2Rldi0+YnVzLT5wYXJlbnQ7Ci0JCXBjaWMgPSBwYm0tPnBhcmVudDsKLQkJaXNhX2Rldi0+aXJxID0gcGNpYy0+aXJxX2J1aWxkKHBibSwgTlVMTCwgaXJxX3Byb3ApOwotCQlyZXR1cm47CisJCWlzYV9kZXYtPmlycSA9IG9wLT5pcnFzWzBdOwogCX0KLQotbm9faXJxOgotCWlzYV9kZXYtPmlycSA9IFBDSV9JUlFfTk9ORTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGlzYV9maWxsX2NoaWxkcmVuKHN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICpwYXJlbnRfaXNhX2RldikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMmUxYzgyNC4uOGU3NWVkNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTMsNyArMyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2t0bGIuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3RsYi5TCmluZGV4IDMxZGExZTUuLmU0OTJkYjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3RsYi5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwva3RsYi5TCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LDk4LDk5IEpha3ViIEplbGluZWsgIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKaW5kZXggNzY4NDc1Yi4uMTY5YjAxNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jCkBAIC0xMjksNiArMTI5LDQzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCit2b2lkIF9faW9tZW0gKm9mX2lvcmVtYXAoc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSByZXMtPnN0YXJ0ICsgb2Zmc2V0OworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXQsIHNpemUsIG5hbWUpKQorCQlyZXQgPSAwOworCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgcmV0OworfQorRVhQT1JUX1NZTUJPTChvZl9pb3JlbWFwKTsKKwordm9pZCBvZl9pb3VubWFwKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJlbGVhc2VfcmVnaW9uKCh1bnNpZ25lZCBsb25nKSBiYXNlLCBzaXplKTsKK30KK0VYUE9SVF9TWU1CT0wob2ZfaW91bm1hcCk7CisKK3N0YXRpYyBpbnQgbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gZGF0YTsKKworCXJldHVybiAob3AtPm5vZGUgPT0gZHApOworfQorCitzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZvZl9idXNfdHlwZSwgTlVMTCwKKwkJCQkJICAgICBkcCwgbm9kZV9tYXRjaCk7CisKKwlpZiAoZGV2KQorCQlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9kZXZpY2VfYnlfbm9kZSk7CisKICNpZmRlZiBDT05GSUdfUENJCiBzdHJ1Y3QgYnVzX3R5cGUgaXNhX2J1c190eXBlID0gewogICAgICAgIC5uYW1lCT0gImlzYSIsCkBAIC0xNjMsMTAgKzIwMCw2NTcgQEAKIEVYUE9SVF9TWU1CT0woc2J1c19idXNfdHlwZSk7CiAjZW5kaWYKIAorc3RydWN0IGJ1c190eXBlIG9mX2J1c190eXBlID0geworICAgICAgIC5uYW1lCT0gIm9mIiwKKyAgICAgICAubWF0Y2gJPSBvZl9wbGF0Zm9ybV9idXNfbWF0Y2gsCisgICAgICAgLnByb2JlCT0gb2ZfZGV2aWNlX3Byb2JlLAorICAgICAgIC5yZW1vdmUJPSBvZl9kZXZpY2VfcmVtb3ZlLAorICAgICAgIC5zdXNwZW5kCT0gb2ZfZGV2aWNlX3N1c3BlbmQsCisgICAgICAgLnJlc3VtZQk9IG9mX2RldmljZV9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTChvZl9idXNfdHlwZSk7CisKK3N0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfYWRkcih1MzIgKmNlbGwsIGludCBzaXplKQoreworCXU2NCByID0gMDsKKwl3aGlsZSAoc2l6ZS0tKQorCQlyID0gKHIgPDwgMzIpIHwgKihjZWxsKyspOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCit7CisJaWYgKGFkZHJjKQorCQkqYWRkcmMgPSBvZl9uX2FkZHJfY2VsbHMoZHApOworCWlmIChzaXplYykKKwkJKnNpemVjID0gb2Zfbl9zaXplX2NlbGxzKGRwKTsKK30KKworLyogTWF4IGFkZHJlc3Mgc2l6ZSB3ZSBkZWFsIHdpdGggKi8KKyNkZWZpbmUgT0ZfTUFYX0FERFJfQ0VMTFMJNAorCitzdHJ1Y3Qgb2ZfYnVzIHsKKwljb25zdCBjaGFyCSpuYW1lOworCWNvbnN0IGNoYXIJKmFkZHJfcHJvcF9uYW1lOworCWludAkJKCptYXRjaCkoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQpOworCXZvaWQJCSgqY291bnRfY2VsbHMpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsCisJCQkJICAgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpOworCXU2NAkJKCptYXApKHUzMiAqYWRkciwgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpOworCWludAkJKCp0cmFuc2xhdGUpKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfZmxhZ3MpKHUzMiAqYWRkcik7Cit9OworCisvKgorICogRGVmYXVsdCB0cmFuc2xhdG9yIChnZW5lcmljIGJ1cykKKyAqLworCitzdGF0aWMgdm9pZCBvZl9idXNfZGVmYXVsdF9jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKKwkJCQkgICAgICAgaW50ICphZGRyYywgaW50ICpzaXplYykKK3sKKwlnZXRfY2VsbHMoZGV2LCBhZGRyYywgc2l6ZWMpOworfQorCitzdGF0aWMgdTY0IG9mX2J1c19kZWZhdWx0X21hcCh1MzIgKmFkZHIsIHUzMiAqcmFuZ2UsIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKQoreworCXU2NCBjcCwgcywgZGE7CisKKwljcCA9IG9mX3JlYWRfYWRkcihyYW5nZSwgbmEpOworCXMgID0gb2ZfcmVhZF9hZGRyKHJhbmdlICsgbmEgKyBwbmEsIG5zKTsKKwlkYSA9IG9mX3JlYWRfYWRkcihhZGRyLCBuYSk7CisKKwlpZiAoZGEgPCBjcCB8fCBkYSA+PSAoY3AgKyBzKSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCXJldHVybiBkYSAtIGNwOworfQorCitzdGF0aWMgaW50IG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZSh1MzIgKmFkZHIsIHU2NCBvZmZzZXQsIGludCBuYSkKK3sKKwl1NjQgYSA9IG9mX3JlYWRfYWRkcihhZGRyLCBuYSk7CisJbWVtc2V0KGFkZHIsIDAsIG5hICogNCk7CisJYSArPSBvZmZzZXQ7CisJaWYgKG5hID4gMSkKKwkJYWRkcltuYSAtIDJdID0gYSA+PiAzMjsKKwlhZGRyW25hIC0gMV0gPSBhICYgMHhmZmZmZmZmZnU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfZGVmYXVsdF9nZXRfZmxhZ3ModTMyICphZGRyKQoreworCXJldHVybiBJT1JFU09VUkNFX01FTTsKK30KKworLyoKKyAqIFBDSSBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcgorICovCisKK3N0YXRpYyBpbnQgb2ZfYnVzX3BjaV9tYXRjaChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXJldHVybiAhc3RyY21wKG5wLT50eXBlLCAicGNpIikgfHwgIXN0cmNtcChucC0+dHlwZSwgInBjaWV4Iik7Cit9CisKK3N0YXRpYyB2b2lkIG9mX2J1c19wY2lfY291bnRfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkgICBpbnQgKmFkZHJjLCBpbnQgKnNpemVjKQoreworCWlmIChhZGRyYykKKwkJKmFkZHJjID0gMzsKKwlpZiAoc2l6ZWMpCisJCSpzaXplYyA9IDI7Cit9CisKK3N0YXRpYyB1NjQgb2ZfYnVzX3BjaV9tYXAodTMyICphZGRyLCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3sKKwl1NjQgY3AsIHMsIGRhOworCisJLyogQ2hlY2sgYWRkcmVzcyB0eXBlIG1hdGNoICovCisJaWYgKChhZGRyWzBdIF4gcmFuZ2VbMF0pICYgMHgwMzAwMDAwMCkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCisJLyogUmVhZCBhZGRyZXNzIHZhbHVlcywgc2tpcHBpbmcgaGlnaCBjZWxsICovCisJY3AgPSBvZl9yZWFkX2FkZHIocmFuZ2UgKyAxLCBuYSAtIDEpOworCXMgID0gb2ZfcmVhZF9hZGRyKHJhbmdlICsgbmEgKyBwbmEsIG5zKTsKKwlkYSA9IG9mX3JlYWRfYWRkcihhZGRyICsgMSwgbmEgLSAxKTsKKworCWlmIChkYSA8IGNwIHx8IGRhID49IChjcCArIHMpKQorCQlyZXR1cm4gT0ZfQkFEX0FERFI7CisJcmV0dXJuIGRhIC0gY3A7Cit9CisKK3N0YXRpYyBpbnQgb2ZfYnVzX3BjaV90cmFuc2xhdGUodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpCit7CisJcmV0dXJuIG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZShhZGRyICsgMSwgb2Zmc2V0LCBuYSAtIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19wY2lfZ2V0X2ZsYWdzKHUzMiAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCXUzMiB3ID0gYWRkclswXTsKKworCXN3aXRjaCgodyA+PiAyNCkgJiAweDAzKSB7CisJY2FzZSAweDAxOgorCQlmbGFncyB8PSBJT1JFU09VUkNFX0lPOworCWNhc2UgMHgwMjogLyogMzIgYml0cyAqLworCWNhc2UgMHgwMzogLyogNjQgYml0cyAqLworCQlmbGFncyB8PSBJT1JFU09VUkNFX01FTTsKKwl9CisJaWYgKHcgJiAweDQwMDAwMDAwKQorCQlmbGFncyB8PSBJT1JFU09VUkNFX1BSRUZFVENIOworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIElTQSBidXMgc3BlY2lmaWMgdHJhbnNsYXRvcgorICovCisKK3N0YXRpYyBpbnQgb2ZfYnVzX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXJldHVybiAhc3RyY21wKG5wLT5uYW1lLCAiaXNhIik7Cit9CisKK3N0YXRpYyB2b2lkIG9mX2J1c19pc2FfY291bnRfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwKKwkJCQkgICBpbnQgKmFkZHJjLCBpbnQgKnNpemVjKQoreworCWlmIChhZGRyYykKKwkJKmFkZHJjID0gMjsKKwlpZiAoc2l6ZWMpCisJCSpzaXplYyA9IDE7Cit9CisKK3N0YXRpYyB1NjQgb2ZfYnVzX2lzYV9tYXAodTMyICphZGRyLCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3sKKwl1NjQgY3AsIHMsIGRhOworCisJLyogQ2hlY2sgYWRkcmVzcyB0eXBlIG1hdGNoICovCisJaWYgKChhZGRyWzBdIF4gcmFuZ2VbMF0pICYgMHgwMDAwMDAwMSkKKwkJcmV0dXJuIE9GX0JBRF9BRERSOworCisJLyogUmVhZCBhZGRyZXNzIHZhbHVlcywgc2tpcHBpbmcgaGlnaCBjZWxsICovCisJY3AgPSBvZl9yZWFkX2FkZHIocmFuZ2UgKyAxLCBuYSAtIDEpOworCXMgID0gb2ZfcmVhZF9hZGRyKHJhbmdlICsgbmEgKyBwbmEsIG5zKTsKKwlkYSA9IG9mX3JlYWRfYWRkcihhZGRyICsgMSwgbmEgLSAxKTsKKworCWlmIChkYSA8IGNwIHx8IGRhID49IChjcCArIHMpKQorCQlyZXR1cm4gT0ZfQkFEX0FERFI7CisJcmV0dXJuIGRhIC0gY3A7Cit9CisKK3N0YXRpYyBpbnQgb2ZfYnVzX2lzYV90cmFuc2xhdGUodTMyICphZGRyLCB1NjQgb2Zmc2V0LCBpbnQgbmEpCit7CisJcmV0dXJuIG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZShhZGRyICsgMSwgb2Zmc2V0LCBuYSAtIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19pc2FfZ2V0X2ZsYWdzKHUzMiAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCXUzMiB3ID0gYWRkclswXTsKKworCWlmICh3ICYgMSkKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKKwllbHNlCisJCWZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIFNCVVMgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3IKKyAqLworCitzdGF0aWMgaW50IG9mX2J1c19zYnVzX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuICFzdHJjbXAobnAtPm5hbWUsICJzYnVzIikgfHwKKwkJIXN0cmNtcChucC0+bmFtZSwgInNiaSIpOworfQorCitzdGF0aWMgdm9pZCBvZl9idXNfc2J1c19jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLAorCQkJCSAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCit7CisJaWYgKGFkZHJjKQorCQkqYWRkcmMgPSAyOworCWlmIChzaXplYykKKwkJKnNpemVjID0gMTsKK30KKworc3RhdGljIHU2NCBvZl9idXNfc2J1c19tYXAodTMyICphZGRyLCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3sKKwlyZXR1cm4gb2ZfYnVzX2RlZmF1bHRfbWFwKGFkZHIsIHJhbmdlLCBuYSwgbnMsIHBuYSk7Cit9CisKK3N0YXRpYyBpbnQgb2ZfYnVzX3NidXNfdHJhbnNsYXRlKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKQoreworCXJldHVybiBvZl9idXNfZGVmYXVsdF90cmFuc2xhdGUoYWRkciwgb2Zmc2V0LCBuYSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX3NidXNfZ2V0X2ZsYWdzKHUzMiAqYWRkcikKK3sKKwlyZXR1cm4gSU9SRVNPVVJDRV9NRU07Cit9CisKKworLyoKKyAqIEFycmF5IG9mIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9ycworICovCisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfYnVzIG9mX2J1c3Nlc1tdID0geworCS8qIFBDSSAqLworCXsKKwkJLm5hbWUgPSAicGNpIiwKKwkJLmFkZHJfcHJvcF9uYW1lID0gImFzc2lnbmVkLWFkZHJlc3NlcyIsCisJCS5tYXRjaCA9IG9mX2J1c19wY2lfbWF0Y2gsCisJCS5jb3VudF9jZWxscyA9IG9mX2J1c19wY2lfY291bnRfY2VsbHMsCisJCS5tYXAgPSBvZl9idXNfcGNpX21hcCwKKwkJLnRyYW5zbGF0ZSA9IG9mX2J1c19wY2lfdHJhbnNsYXRlLAorCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX3BjaV9nZXRfZmxhZ3MsCisJfSwKKwkvKiBJU0EgKi8KKwl7CisJCS5uYW1lID0gImlzYSIsCisJCS5hZGRyX3Byb3BfbmFtZSA9ICJyZWciLAorCQkubWF0Y2ggPSBvZl9idXNfaXNhX21hdGNoLAorCQkuY291bnRfY2VsbHMgPSBvZl9idXNfaXNhX2NvdW50X2NlbGxzLAorCQkubWFwID0gb2ZfYnVzX2lzYV9tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfaXNhX3RyYW5zbGF0ZSwKKwkJLmdldF9mbGFncyA9IG9mX2J1c19pc2FfZ2V0X2ZsYWdzLAorCX0sCisJLyogU0JVUyAqLworCXsKKwkJLm5hbWUgPSAic2J1cyIsCisJCS5hZGRyX3Byb3BfbmFtZSA9ICJyZWciLAorCQkubWF0Y2ggPSBvZl9idXNfc2J1c19tYXRjaCwKKwkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX3NidXNfY291bnRfY2VsbHMsCisJCS5tYXAgPSBvZl9idXNfc2J1c19tYXAsCisJCS50cmFuc2xhdGUgPSBvZl9idXNfc2J1c190cmFuc2xhdGUsCisJCS5nZXRfZmxhZ3MgPSBvZl9idXNfc2J1c19nZXRfZmxhZ3MsCisJfSwKKwkvKiBEZWZhdWx0ICovCisJeworCQkubmFtZSA9ICJkZWZhdWx0IiwKKwkJLmFkZHJfcHJvcF9uYW1lID0gInJlZyIsCisJCS5tYXRjaCA9IE5VTEwsCisJCS5jb3VudF9jZWxscyA9IG9mX2J1c19kZWZhdWx0X2NvdW50X2NlbGxzLAorCQkubWFwID0gb2ZfYnVzX2RlZmF1bHRfbWFwLAorCQkudHJhbnNsYXRlID0gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlLAorCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX2RlZmF1bHRfZ2V0X2ZsYWdzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9mX2J1cyAqb2ZfbWF0Y2hfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZl9idXNzZXMpOyBpICsrKQorCQlpZiAoIW9mX2J1c3Nlc1tpXS5tYXRjaCB8fCBvZl9idXNzZXNbaV0ubWF0Y2gobnApKQorCQkJcmV0dXJuICZvZl9idXNzZXNbaV07CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGJ1aWxkX29uZV9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwKKwkJCQkgICAgIHN0cnVjdCBvZl9idXMgKmJ1cywKKwkJCQkgICAgIHN0cnVjdCBvZl9idXMgKnBidXMsCisJCQkJICAgICB1MzIgKmFkZHIsCisJCQkJICAgICBpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3sKKwl1MzIgKnJhbmdlczsKKwl1bnNpZ25lZCBpbnQgcmxlbjsKKwlpbnQgcm9uZTsKKwl1NjQgb2Zmc2V0ID0gT0ZfQkFEX0FERFI7CisKKwlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LCAicmFuZ2VzIiwgJnJsZW4pOworCWlmIChyYW5nZXMgPT0gTlVMTCB8fCBybGVuID09IDApIHsKKwkJb2Zmc2V0ID0gb2ZfcmVhZF9hZGRyKGFkZHIsIG5hKTsKKwkJbWVtc2V0KGFkZHIsIDAsIHBuYSAqIDQpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwkvKiBOb3cgd2FsayB0aHJvdWdoIHRoZSByYW5nZXMgKi8KKwlybGVuIC89IDQ7CisJcm9uZSA9IG5hICsgcG5hICsgbnM7CisJZm9yICg7IHJsZW4gPj0gcm9uZTsgcmxlbiAtPSByb25lLCByYW5nZXMgKz0gcm9uZSkgeworCQlvZmZzZXQgPSBidXMtPm1hcChhZGRyLCByYW5nZXMsIG5hLCBucywgcG5hKTsKKwkJaWYgKG9mZnNldCAhPSBPRl9CQURfQUREUikKKwkJCWJyZWFrOworCX0KKwlpZiAob2Zmc2V0ID09IE9GX0JBRF9BRERSKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShhZGRyLCByYW5nZXMgKyBuYSwgNCAqIHBuYSk7CisKK2ZpbmlzaDoKKwkvKiBUcmFuc2xhdGUgaXQgaW50byBwYXJlbnQgYnVzIHNwYWNlICovCisJcmV0dXJuIHBidXMtPnRyYW5zbGF0ZShhZGRyLCBvZmZzZXQsIHBuYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCQkgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKK3sKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpwX29wOworCXN0cnVjdCBvZl9idXMgKmJ1czsKKwlpbnQgbmEsIG5zOworCWludCBpbmRleCwgbnVtX3JlZzsKKwl2b2lkICpwcmVnOworCisJaWYgKCFwYXJlbnQpCisJCXJldHVybjsKKworCXBfb3AgPSB0b19vZl9kZXZpY2UocGFyZW50KTsKKwlidXMgPSBvZl9tYXRjaF9idXMocF9vcC0+bm9kZSk7CisJYnVzLT5jb3VudF9jZWxscyhvcC0+bm9kZSwgJm5hLCAmbnMpOworCisJcHJlZyA9IG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgYnVzLT5hZGRyX3Byb3BfbmFtZSwgJm51bV9yZWcpOworCWlmICghcHJlZyB8fCBudW1fcmVnID09IDApCisJCXJldHVybjsKKworCS8qIENvbnZlcnQgdG8gbnVtLWNlbGxzLiAgKi8KKwludW1fcmVnIC89IDQ7CisKKwkvKiBDb252ZXIgdG8gbnVtLWVudHJpZXMuICAqLworCW51bV9yZWcgLz0gbmEgKyBuczsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9yZWc7IGluZGV4KyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyID0gJm9wLT5yZXNvdXJjZVtpbmRleF07CisJCXUzMiBhZGRyW09GX01BWF9BRERSX0NFTExTXTsKKwkJdTMyICpyZWcgPSAocHJlZyArIChpbmRleCAqICgobmEgKyBucykgKiA0KSkpOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHAgPSBwX29wLT5ub2RlOworCQlzdHJ1Y3Qgb2ZfYnVzICpwYnVzOworCQl1NjQgc2l6ZSwgcmVzdWx0ID0gT0ZfQkFEX0FERFI7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBkbmEsIGRuczsKKwkJaW50IHBuYSwgcG5zOworCisJCXNpemUgPSBvZl9yZWFkX2FkZHIocmVnICsgbmEsIG5zKTsKKwkJZmxhZ3MgPSBidXMtPmdldF9mbGFncyhyZWcpOworCisJCW1lbWNweShhZGRyLCByZWcsIG5hICogNCk7CisKKwkJLyogSWYgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaGFzIG5vIHJhbmdlcyBwcm9wZXJ0eSB0byBhcHBseSwKKwkJICoganVzdCB1c2UgYSAxPC0+MSBtYXBwaW5nLiAgVW5sZXNzIGl0IGlzIHRoZSAnZG1hJyBjaGlsZAorCQkgKiBvZiBhbiBpc2EgYnVzLCB3aGljaCBtdXN0IGJlIHBhc3NlZCB1cCB0b3dhcmRzIHRoZSByb290LgorCQkgKgorCQkgKiBBbHNvLCBkb24ndCB0cnkgdG8gdHJhbnNsYXRlIFBNVSBidXMgZGV2aWNlIHJlZ2lzdGVycy4KKwkJICovCisJCWlmICgob2ZfZmluZF9wcm9wZXJ0eShwcCwgInJhbmdlcyIsIE5VTEwpID09IE5VTEwgJiYKKwkJICAgICBzdHJjbXAocHAtPm5hbWUsICJkbWEiKSAhPSAwKSB8fAorCQkgICAgIXN0cmNtcChwcC0+bmFtZSwgInBtdSIpKSB7CisJCQlyZXN1bHQgPSBvZl9yZWFkX2FkZHIoYWRkciwgbmEpOworCQkJZ290byBidWlsZF9yZXM7CisJCX0KKworCQlkbmEgPSBuYTsKKwkJZG5zID0gbnM7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWRwID0gcHA7CisJCQlwcCA9IGRwLT5wYXJlbnQ7CisJCQlpZiAoIXBwKSB7CisJCQkJcmVzdWx0ID0gb2ZfcmVhZF9hZGRyKGFkZHIsIGRuYSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXBidXMgPSBvZl9tYXRjaF9idXMocHApOworCQkJcGJ1cy0+Y291bnRfY2VsbHMoZHAsICZwbmEsICZwbnMpOworCisJCQlpZiAoYnVpbGRfb25lX3Jlc291cmNlKGRwLCBidXMsIHBidXMsIGFkZHIsIGRuYSwgZG5zLCBwbmEpKQorCQkJCWJyZWFrOworCisJCQlkbmEgPSBwbmE7CisJCQlkbnMgPSBwbnM7CisJCQlidXMgPSBwYnVzOworCQl9CisKKwlidWlsZF9yZXM6CisJCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKKwkJaWYgKHJlc3VsdCAhPSBPRl9CQURfQUREUikgeworCQkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCQkJcmVzdWx0ICY9IDB4MGZmZmZmZmZmZmZmZmZmZlVMOworCisJCQlyLT5zdGFydCA9IHJlc3VsdDsKKwkJCXItPmVuZCA9IHJlc3VsdCArIHNpemUgLSAxOworCQkJci0+ZmxhZ3MgPSBmbGFnczsKKwkJfSBlbHNlIHsKKwkJCXItPnN0YXJ0ID0gfjBVTDsKKwkJCXItPmVuZCA9IH4wVUw7CisJCX0KKwkJci0+bmFtZSA9IG9wLT5ub2RlLT5uYW1lOworCX0KK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9faW5pdAorYXBwbHlfaW50ZXJydXB0X21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBwLAorCQkgICAgdTMyICppbWFwLCBpbnQgaW1sZW4sIHUzMiAqaW1hc2ssCisJCSAgICB1bnNpZ25lZCBpbnQgKmlycV9wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3A7CisJdW5zaWduZWQgaW50IGlycSA9ICppcnFfcDsKKwlzdHJ1Y3Qgb2ZfYnVzICpidXM7CisJcGhhbmRsZSBoYW5kbGU7CisJdTMyICpyZWc7CisJaW50IG5hLCBudW1fcmVnLCBpOworCisJYnVzID0gb2ZfbWF0Y2hfYnVzKHBwKTsKKwlidXMtPmNvdW50X2NlbGxzKGRwLCAmbmEsIE5VTEwpOworCisJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgJm51bV9yZWcpOworCWlmICghcmVnIHx8ICFudW1fcmVnKQorCQlyZXR1cm4gTlVMTDsKKworCWltbGVuIC89ICgobmEgKyAzKSAqIDQpOworCWhhbmRsZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGltbGVuOyBpKyspIHsKKwkJaW50IGo7CisKKwkJZm9yIChqID0gMDsgaiA8IG5hOyBqKyspIHsKKwkJCWlmICgocmVnW2pdICYgaW1hc2tbal0pICE9IGltYXBbal0pCisJCQkJZ290byBuZXh0OworCQl9CisJCWlmIChpbWFwW25hXSA9PSBpcnEpIHsKKwkJCWhhbmRsZSA9IGltYXBbbmEgKyAxXTsKKwkJCWlycSA9IGltYXBbbmEgKyAyXTsKKwkJCWJyZWFrOworCQl9CisKKwluZXh0OgorCQlpbWFwICs9IChuYSArIDMpOworCX0KKwlpZiAoaSA9PSBpbWxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwkqaXJxX3AgPSBpcnE7CisJY3AgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZShoYW5kbGUpOworCisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwY2lfaXJxX3N3aXp6bGUoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICpwcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzICpyZWdzOworCXVuc2lnbmVkIGludCBkZXZmbiwgc2xvdCwgcmV0OworCisJaWYgKGlycSA8IDEgfHwgaXJxID4gNCkKKwkJcmV0dXJuIGlycTsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXJlZ3MpCisJCXJldHVybiBpcnE7CisKKwlkZXZmbiA9IChyZWdzLT5waHlzX2hpID4+IDgpICYgMHhmZjsKKwlzbG90ID0gKGRldmZuID4+IDMpICYgMHgxZjsKKworCXJldCA9ICgoaXJxIC0gMSArIChzbG90ICYgMykpICYgMykgKyAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgYnVpbGRfb25lX2RldmljZV9pcnEoc3RydWN0IG9mX2RldmljZSAqb3AsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCQkJCQl1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+bm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBwLCAqaXA7CisJdW5zaWduZWQgaW50IG9yaWdfaXJxID0gaXJxOworCisJaWYgKGlycSA9PSAweGZmZmZmZmZmKQorCQlyZXR1cm4gaXJxOworCisJaWYgKGRwLT5pcnFfdHJhbnMpIHsKKwkJaXJxID0gZHAtPmlycV90cmFucy0+aXJxX2J1aWxkKGRwLCBpcnEsCisJCQkJCSAgICAgICBkcC0+aXJxX3RyYW5zLT5kYXRhKTsKKyNpZiAxCisJCXByaW50aygiJXM6IGRpcmVjdCB0cmFuc2xhdGUgJXggLS0+ICV4XG4iLAorCQkgICAgICAgZHAtPmZ1bGxfbmFtZSwgb3JpZ19pcnEsIGlycSk7CisjZW5kaWYKKwkJcmV0dXJuIGlycTsKKwl9CisKKwkvKiBTb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZC4gIFdhbGsgdXAgdG8gdGhlIHJvb3QsIGFwcGx5aW5nCisJICogaW50ZXJydXB0LW1hcCBvciBidXMgc3BlY2lmaWMgdHJhbnNsYXRpb25zLCB1bnRpbCB3ZSBoaXQKKwkgKiBhbiBJUlEgdHJhbnNsYXRvci4KKwkgKgorCSAqIElmIHdlIGhpdCBhIGJ1cyB0eXBlIG9yIHNpdHVhdGlvbiB3ZSBjYW5ub3QgaGFuZGxlLCB3ZQorCSAqIHN0b3AgYW5kIGFzc3VtZSB0aGF0IHRoZSBvcmlnaW5hbCBJUlEgbnVtYmVyIHdhcyBpbiBhCisJICogZm9ybWF0IHdoaWNoIGhhcyBzcGVjaWFsIG1lYW5pbmcgdG8gaXQncyBpbW1lZGlhdGUgcGFyZW50LgorCSAqLworCXBwID0gZHAtPnBhcmVudDsKKwlpcCA9IE5VTEw7CisJd2hpbGUgKHBwKSB7CisJCXZvaWQgKmltYXAsICppbXNrOworCQlpbnQgaW1sZW47CisKKwkJaW1hcCA9IG9mX2dldF9wcm9wZXJ0eShwcCwgImludGVycnVwdC1tYXAiLCAmaW1sZW4pOworCQlpbXNrID0gb2ZfZ2V0X3Byb3BlcnR5KHBwLCAiaW50ZXJydXB0LW1hcC1tYXNrIiwgTlVMTCk7CisJCWlmIChpbWFwICYmIGltc2spIHsKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaXJldDsKKwkJCWludCB0aGlzX29yaWdfaXJxID0gaXJxOworCisJCQlpcmV0ID0gYXBwbHlfaW50ZXJydXB0X21hcChkcCwgcHAsCisJCQkJCQkgICBpbWFwLCBpbWxlbiwgaW1zaywKKwkJCQkJCSAgICZpcnEpOworI2lmIDEKKwkJCXByaW50aygiJXM6IEFwcGx5IFslczoleF0gaW1hcCAtLT4gWyVzOiV4XVxuIiwKKwkJCSAgICAgICBvcC0+bm9kZS0+ZnVsbF9uYW1lLAorCQkJICAgICAgIHBwLT5mdWxsX25hbWUsIHRoaXNfb3JpZ19pcnEsCisJCQkgICAgICAgKGlyZXQgPyBpcmV0LT5mdWxsX25hbWUgOiAiTlVMTCIpLCBpcnEpOworI2VuZGlmCisJCQlpZiAoIWlyZXQpCisJCQkJYnJlYWs7CisKKwkJCWlmIChpcmV0LT5pcnFfdHJhbnMpIHsKKwkJCQlpcCA9IGlyZXQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIXN0cmNtcChwcC0+dHlwZSwgInBjaSIpIHx8CisJCQkgICAgIXN0cmNtcChwcC0+dHlwZSwgInBjaWV4IikpIHsKKwkJCQl1bnNpZ25lZCBpbnQgdGhpc19vcmlnX2lycSA9IGlycTsKKworCQkJCWlycSA9IHBjaV9pcnFfc3dpenpsZShkcCwgcHAsIGlycSk7CisjaWYgMQorCQkJCXByaW50aygiJXM6IFBDSSBzd2l6emxlIFslc10gJXggLS0+ICV4XG4iLAorCQkJCSAgICAgICBvcC0+bm9kZS0+ZnVsbF9uYW1lLAorCQkJCSAgICAgICBwcC0+ZnVsbF9uYW1lLCB0aGlzX29yaWdfaXJxLCBpcnEpOworI2VuZGlmCisJCQl9CisKKwkJCWlmIChwcC0+aXJxX3RyYW5zKSB7CisJCQkJaXAgPSBwcDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlkcCA9IHBwOworCQlwcCA9IHBwLT5wYXJlbnQ7CisJfQorCWlmICghaXApCisJCXJldHVybiBvcmlnX2lycTsKKworCWlycSA9IGlwLT5pcnFfdHJhbnMtPmlycV9idWlsZChvcC0+bm9kZSwgaXJxLAorCQkJCSAgICAgICBpcC0+aXJxX3RyYW5zLT5kYXRhKTsKKyNpZiAxCisJcHJpbnRrKCIlczogQXBwbHkgSVJRIHRyYW5zIFslc10gJXggLS0+ICV4XG4iLAorCSAgICAgICBvcC0+bm9kZS0+ZnVsbF9uYW1lLCBpcC0+ZnVsbF9uYW1lLCBvcmlnX2lycSwgaXJxKTsKKyNlbmRpZgorCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2UgKiBfX2luaXQgc2Nhbl9vbmVfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJCQkgc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX0tFUk5FTCk7CisJdW5zaWduZWQgaW50ICppcnE7CisJaW50IGxlbiwgaTsKKworCWlmICghb3ApCisJCXJldHVybiBOVUxMOworCisJb3AtPm5vZGUgPSBkcDsKKworCW9wLT5jbG9ja19mcmVxID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiY2xvY2stZnJlcXVlbmN5IiwKKwkJCQkJICAgICAgICgyNSoxMDAwKjEwMDApKTsKKwlvcC0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAidXBhLXBvcnRpZCIsIC0xKTsKKwlpZiAob3AtPnBvcnRpZCA9PSAtMSkKKwkJb3AtPnBvcnRpZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgInBvcnRpZCIsIC0xKTsKKworCWlycSA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImludGVycnVwdHMiLCAmbGVuKTsKKwlpZiAoaXJxKSB7CisJCW1lbWNweShvcC0+aXJxcywgaXJxLCBsZW4pOworCQlvcC0+bnVtX2lycXMgPSBsZW4gLyA0OworCX0gZWxzZSB7CisJCW9wLT5udW1faXJxcyA9IDA7CisJfQorCisJYnVpbGRfZGV2aWNlX3Jlc291cmNlcyhvcCwgcGFyZW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgb3AtPm51bV9pcnFzOyBpKyspCisJCW9wLT5pcnFzW2ldID0gYnVpbGRfb25lX2RldmljZV9pcnEob3AsIHBhcmVudCwgb3AtPmlycXNbaV0pOworCisJb3AtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CisJb3AtPmRldi5idXMgPSAmb2ZfYnVzX3R5cGU7CisJaWYgKCFwYXJlbnQpCisJCXN0cmNweShvcC0+ZGV2LmJ1c19pZCwgInJvb3QiKTsKKwllbHNlCisJCXN0cmNweShvcC0+ZGV2LmJ1c19pZCwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCisJaWYgKG9mX2RldmljZV9yZWdpc3RlcihvcCkpIHsKKwkJcHJpbnRrKCIlczogQ291bGQgbm90IHJlZ2lzdGVyIG9mIGRldmljZS5cbiIsCisJCSAgICAgICBkcC0+ZnVsbF9uYW1lKTsKKwkJa2ZyZWUob3ApOworCQlvcCA9IE5VTEw7CisJfQorCisJcmV0dXJuIG9wOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2Nhbl90cmVlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKK3sKKwl3aGlsZSAoZHApIHsKKwkJc3RydWN0IG9mX2RldmljZSAqb3AgPSBzY2FuX29uZV9kZXZpY2UoZHAsIHBhcmVudCk7CisKKwkJaWYgKG9wKQorCQkJc2Nhbl90cmVlKGRwLT5jaGlsZCwgJm9wLT5kZXYpOworCisJCWRwID0gZHAtPnNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2Nhbl9vZl9kZXZpY2VzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBzY2FuX29uZV9kZXZpY2Uocm9vdCwgTlVMTCk7CisJaWYgKCFwYXJlbnQpCisJCXJldHVybjsKKworCXNjYW5fdHJlZShyb290LT5jaGlsZCwgJnBhcmVudC0+ZGV2KTsKK30KKwogc3RhdGljIGludCBfX2luaXQgb2ZfYnVzX2RyaXZlcl9pbml0KHZvaWQpCiB7Ci0JaW50IGVyciA9IDA7CisJaW50IGVycjsKIAorCWVyciA9IGJ1c19yZWdpc3Rlcigmb2ZfYnVzX3R5cGUpOwogI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAoIWVycikKIAkJZXJyID0gYnVzX3JlZ2lzdGVyKCZpc2FfYnVzX3R5cGUpOwpAQCAtMTc3LDcgKzg2MSwxMSBAQAogCWlmICghZXJyKQogCQllcnIgPSBidXNfcmVnaXN0ZXIoJnNidXNfYnVzX3R5cGUpOwogI2VuZGlmCi0JcmV0dXJuIDA7CisKKwlpZiAoIWVycikKKwkJc2Nhbl9vZl9kZXZpY2VzKCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBwb3N0Y29yZV9pbml0Y2FsbChvZl9idXNfZHJpdmVyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKaW5kZXggNmM5ZTNlOS4uZTAyZjAxYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IEpha3ViIEplbGluZWsgICAoampAdWx0cmEubGludXguY3opCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMzA3LDcgKzMwNiw2IEBACiAJCXAtPnNjYW5fYnVzKHApOwogfQogCi1leHRlcm4gdm9pZCBjbG9ja19wcm9iZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBvd2VyX2luaXQodm9pZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQpAQCAtMzIwLDcgKzMxOCw2IEBACiAKIAlpc2FfaW5pdCgpOwogCWVidXNfaW5pdCgpOwotCWNsb2NrX3Byb2JlKCk7CiAJcG93ZXJfaW5pdCgpOwogCiAJcmV0dXJuIDA7CkBAIC0zNTcsNyArMzU0LDcgQEAKIH0KIAogdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKKwkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogfQogCkBAIC00MDYsMTQgKzQwMyw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKTsKIAotZXh0ZXJuIGludCBwY2lfaXJxX3ZlcmJvc2U7Ci0KIGNoYXIgKiBfX2luaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCiB7Ci0JaWYgKCFzdHJjbXAoc3RyLCAiaXJxX3ZlcmJvc2UiKSkgewotCQlwY2lfaXJxX3ZlcmJvc2UgPSAxOwotCQlyZXR1cm4gTlVMTDsKLQl9CiAJcmV0dXJuIHN0cjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfY29tbW9uLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYwppbmRleCBiMDZhMjk1Li43YTU5Y2M3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYwpAQCAtMTAsMTIgKzEwLDEwIEBACiAKICNpbmNsdWRlIDxhc20vcGJtLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAKICNpbmNsdWRlICJwY2lfaW1wbC5oIgogCi0vKiBQYXNzICJwY2k9aXJxX3ZlcmJvc2UiIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRvIGVuYWJsZSB0aGlzLiAgKi8KLWludCBwY2lfaXJxX3ZlcmJvc2U7Ci0KIC8qIEZpeCBzZWxmIGRldmljZSBvZiBCVVMgYW5kIGhvb2sgaXQgaW50byBCVVMtPnNlbGYuCiAgKiBUaGUgcGNpX3NjYW5fYnVzIGRvZXMgbm90IGRvIHRoaXMgZm9yIHRoZSBob3N0IGJyaWRnZS4KICAqLwpAQCAtMTY5LDYgKzE2Nyw3IEBACiAJfQogCXBjcC0+cGJtID0gcGJtOwogCXBjcC0+cHJvbV9ub2RlID0gZHA7CisJcGNwLT5vcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZHApOwogCW1lbWNweShwY3AtPnByb21fcmVncywgcHJlZ3MsCiAJICAgICAgIG5yZWdzICogc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMpKTsKIAlwY3AtPm51bV9wcm9tX3JlZ3MgPSBucmVnczsKQEAgLTU0OSwyOTYgKzU0OCwxOCBAQAogCQlwY2lfYXNzaWduX3VuYXNzaWduZWQocGJtLCBidXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwY2lfc2xvdF9zd2l2ZWwoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqdG9wbGV2ZWxfcGRldiwKLQkJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCSAgIHVuc2lnbmVkIGludCBpbnRlcnJ1cHQpCi17Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCWlmICh1bmxpa2VseShpbnRlcnJ1cHQgPCAxIHx8IGludGVycnVwdCA+IDQpKSB7Ci0JCXByaW50aygiJXM6IERldmljZSAlcyBpbnRlcnJ1cHQgdmFsdWUgb2YgJXUgaXMgc3RyYW5nZS5cbiIsCi0JCSAgICAgICBwYm0tPm5hbWUsIHBjaV9uYW1lKHBkZXYpLCBpbnRlcnJ1cHQpOwotCQlyZXR1cm4gaW50ZXJydXB0OwotCX0KLQotCXJldCA9ICgoaW50ZXJydXB0IC0gMSArIChQQ0lfU0xPVChwZGV2LT5kZXZmbikgJiAzKSkgJiAzKSArIDE7Ci0KLQlpZiAocGNpX2lycV92ZXJib3NlKQotCQlwcmludGsoIiVzOiAlcyBJUlEgU3dpdmVsICVzIFsleDoleF0gLT4gWyV4XVxuIiwKLQkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUodG9wbGV2ZWxfcGRldiksIHBjaV9uYW1lKHBkZXYpLAotCQkgICAgICAgaW50ZXJydXB0LCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwY2lfYXBwbHlfaW50bWFwKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCQkJICAgIHN0cnVjdCBwY2lfZGV2ICp0b3BsZXZlbF9wZGV2LAotCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKnBidXMsCi0JCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJICAgIHVuc2lnbmVkIGludCBpbnRlcnJ1cHQsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKipjbm9kZSkKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwICppbWFwOwotCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXNrICppbWFzazsKLQlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGJ1c19wY3AgPSBwYnVzLT5zeXNkYXRhOwotCXN0cnVjdCBwY2lkZXZfY29va2llICpwZGV2X3BjcCA9IHBkZXYtPnN5c2RhdGE7Ci0Jc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcHJlZ3MgPSBwZGV2X3BjcC0+cHJvbV9yZWdzOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlpbnQgcGxlbiwgbnVtX2ltYXAsIGk7Ci0JdW5zaWduZWQgaW50IGhpLCBtaWQsIGxvLCBpcnEsIG9yaWdfaW50ZXJydXB0OwotCi0JKmNub2RlID0gcGJ1c19wY3AtPnByb21fbm9kZTsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KHBidXNfcGNwLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJnBsZW4pOwotCWlmICghcHJvcCB8fAotCSAgICAocGxlbiAlIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwKSkgIT0gMCkgewotCQlwcmludGsoIiVzOiBEZXZpY2UgJXMgaW50ZXJydXB0LW1hcCBoYXMgYmFkIGxlbiAlZFxuIiwKLQkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUocGJ1cyksIHBsZW4pOwotCQlnb3RvIG5vX2ludG1hcDsKLQl9Ci0JaW1hcCA9IHByb3AtPnZhbHVlOwotCW51bV9pbWFwID0gcGxlbiAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwKTsKLQotCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KHBidXNfcGNwLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwLW1hc2siLCAmcGxlbik7Ci0JaWYgKCFwcm9wIHx8Ci0JICAgIChwbGVuICUgc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXNrKSkgIT0gMCkgewotCQlwcmludGsoIiVzOiBEZXZpY2UgJXMgaW50ZXJydXB0LW1hcC1tYXNrIGhhcyBiYWQgbGVuICVkXG4iLAotCQkgICAgICAgcGJtLT5uYW1lLCBwY2lfbmFtZShwYnVzKSwgcGxlbik7Ci0JCWdvdG8gbm9faW50bWFwOwotCX0KLQlpbWFzayA9IHByb3AtPnZhbHVlOwotCi0Jb3JpZ19pbnRlcnJ1cHQgPSBpbnRlcnJ1cHQ7Ci0KLQloaSAgID0gcHJlZ3MtPnBoeXNfaGkgJiBpbWFzay0+cGh5c19oaTsKLQltaWQgID0gcHJlZ3MtPnBoeXNfbWlkICYgaW1hc2stPnBoeXNfbWlkOwotCWxvICAgPSBwcmVncy0+cGh5c19sbyAmIGltYXNrLT5waHlzX2xvOwotCWlycSAgPSBpbnRlcnJ1cHQgJiBpbWFzay0+aW50ZXJydXB0OwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9pbWFwOyBpKyspIHsKLQkJaWYgKGltYXBbaV0ucGh5c19oaSAgPT0gaGkgICAmJgotCQkgICAgaW1hcFtpXS5waHlzX21pZCA9PSBtaWQgICYmCi0JCSAgICBpbWFwW2ldLnBoeXNfbG8gID09IGxvICAgJiYKLQkJICAgIGltYXBbaV0uaW50ZXJydXB0ID09IGlycSkgewotCQkJKmNub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoaW1hcFtpXS5jbm9kZSk7Ci0JCQlpbnRlcnJ1cHQgPSBpbWFwW2ldLmNpbnRlcnJ1cHQ7Ci0JCX0KLQl9Ci0KLQlpZiAocGNpX2lycV92ZXJib3NlKQotCQlwcmludGsoIiVzOiAlcyBNQVAgQlVTICVzIERFViAlcyBbJXhdIC0+IFsleF1cbiIsCi0JCSAgICAgICBwYm0tPm5hbWUsIHBjaV9uYW1lKHRvcGxldmVsX3BkZXYpLAotCQkgICAgICAgcGNpX25hbWUocGJ1cyksIHBjaV9uYW1lKHBkZXYpLAotCQkgICAgICAgb3JpZ19pbnRlcnJ1cHQsIGludGVycnVwdCk7Ci0KLW5vX2ludG1hcDoKLQlyZXR1cm4gaW50ZXJydXB0OwotfQotCi0vKiBGb3IgZWFjaCBQQ0kgYnVzIG9uIHRoZSB3YXkgdG8gdGhlIHJvb3Q6Ci0gKiAxKSBJZiBpdCBoYXMgYW4gaW50ZXJydXB0LW1hcCBwcm9wZXJ0eSwgYXBwbHkgaXQuCi0gKiAyKSBFbHNlLCBzd2l2ZWwgdGhlIGludGVycnVwdCBudW1iZXIgYmFzZWQgdXBvbiB0aGUgUENJIGRldmljZSBudW1iZXIuCi0gKgotICogUmV0dXJuIHRoZSAiSVJRIGNvbnRyb2xsZXIiIG5vZGUuICBJZiB0aGlzIGlzIHRoZSBQQk0ncyBkZXZpY2Ugbm9kZSwKLSAqIGFsbCBpbnRlcnJ1cHQgdHJhbnNsYXRpb25zIGFyZSBjb21wbGV0ZSwgZWxzZSB3ZSBzaG91bGQgdXNlIHRoYXQgbm9kZSdzCi0gKiAicmVnIiBwcm9wZXJ0eSB0byBhcHBseSB0aGUgUEJNJ3MgImludGVycnVwdC17bWFwLG1hc2t9IiB0byB0aGUgaW50ZXJydXB0LgotICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19pbml0Ci1wY2lfaW50bWFwX21hdGNoX3RvX3Jvb3Qoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJIHVuc2lnbmVkIGludCAqaW50ZXJydXB0KQotewotCXN0cnVjdCBwY2lfZGV2ICp0b3BsZXZlbF9wZGV2ID0gcGRldjsKLQlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqdG9wbGV2ZWxfcGNwID0gdG9wbGV2ZWxfcGRldi0+c3lzZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNub2RlID0gdG9wbGV2ZWxfcGNwLT5wcm9tX25vZGU7Ci0KLQl3aGlsZSAocGRldi0+YnVzLT5udW1iZXIgIT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKLQkJc3RydWN0IHBjaV9kZXYgKnBidXMgPSBwZGV2LT5idXMtPnNlbGY7Ci0JCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3AgPSBwYnVzLT5zeXNkYXRhOwotCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQkJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkocGNwLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwIiwgTlVMTCk7Ci0JCWlmICghcHJvcCkgewotCQkJKmludGVycnVwdCA9IHBjaV9zbG90X3N3aXZlbChwYm0sIHRvcGxldmVsX3BkZXYsCi0JCQkJCQkgICAgIHBkZXYsICppbnRlcnJ1cHQpOwotCQkJY25vZGUgPSBwY3AtPnByb21fbm9kZTsKLQkJfSBlbHNlIHsKLQkJCSppbnRlcnJ1cHQgPSBwY2lfYXBwbHlfaW50bWFwKHBibSwgdG9wbGV2ZWxfcGRldiwKLQkJCQkJCSAgICAgIHBidXMsIHBkZXYsCi0JCQkJCQkgICAgICAqaW50ZXJydXB0LCAmY25vZGUpOwotCi0JCQl3aGlsZSAocGNwLT5wcm9tX25vZGUgIT0gY25vZGUgJiYKLQkJCSAgICAgICBwYnVzLT5idXMtPm51bWJlciAhPSBwYm0tPnBjaV9maXJzdF9idXNubykgewotCQkJCXBidXMgPSBwYnVzLT5idXMtPnNlbGY7Ci0JCQkJcGNwID0gcGJ1cy0+c3lzZGF0YTsKLQkJCX0KLQkJfQotCQlwZGV2ID0gcGJ1czsKLQotCQlpZiAoY25vZGUgPT0gcGJtLT5wcm9tX25vZGUpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gY25vZGU7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBjaV9pbnRtYXBfbWF0Y2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCAqaW50ZXJydXB0KQotewotCXN0cnVjdCBwY2lkZXZfY29va2llICpkZXZfcGNwID0gcGRldi0+c3lzZGF0YTsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBkZXZfcGNwLT5wYm07Ci0Jc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcmVnOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY25vZGU7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXVuc2lnbmVkIGludCBoaSwgbWlkLCBsbywgaXJxOwotCWludCBpLCBwbGVuOwotCi0JY25vZGUgPSBwY2lfaW50bWFwX21hdGNoX3RvX3Jvb3QocGJtLCBwZGV2LCBpbnRlcnJ1cHQpOwotCWlmIChjbm9kZSA9PSBwYm0tPnByb21fbm9kZSkKLQkJZ290byBzdWNjZXNzOwotCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoY25vZGUsICJyZWciLCAmcGxlbik7Ci0JaWYgKCFwcm9wIHx8Ci0JICAgIChwbGVuICUgc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMpKSAhPSAwKSB7Ci0JCXByaW50aygiJXM6IE9CUCBub2RlICVzIHJlZyBwcm9wZXJ0eSBoYXMgYmFkIGxlbiAlZFxuIiwKLQkJICAgICAgIHBibS0+bmFtZSwgY25vZGUtPmZ1bGxfbmFtZSwgcGxlbik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JcmVnID0gcHJvcC0+dmFsdWU7Ci0KLQloaSAgID0gcmVnWzBdLnBoeXNfaGkgJiBwYm0tPnBibV9pbnRtYXNrLT5waHlzX2hpOwotCW1pZCAgPSByZWdbMF0ucGh5c19taWQgJiBwYm0tPnBibV9pbnRtYXNrLT5waHlzX21pZDsKLQlsbyAgID0gcmVnWzBdLnBoeXNfbG8gJiBwYm0tPnBibV9pbnRtYXNrLT5waHlzX2xvOwotCWlycSAgPSAqaW50ZXJydXB0ICYgcGJtLT5wYm1faW50bWFzay0+aW50ZXJydXB0OwotCi0JZm9yIChpID0gMDsgaSA8IHBibS0+bnVtX3BibV9pbnRtYXA7IGkrKykgewotCQlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwICppbnRtYXA7Ci0KLQkJaW50bWFwID0gJnBibS0+cGJtX2ludG1hcFtpXTsKLQotCQlpZiAoaW50bWFwLT5waHlzX2hpICA9PSBoaSAgJiYKLQkJICAgIGludG1hcC0+cGh5c19taWQgPT0gbWlkICYmCi0JCSAgICBpbnRtYXAtPnBoeXNfbG8gID09IGxvICAmJgotCQkgICAgaW50bWFwLT5pbnRlcnJ1cHQgPT0gaXJxKSB7Ci0JCQkqaW50ZXJydXB0ID0gaW50bWFwLT5jaW50ZXJydXB0OwotCQkJZ290byBzdWNjZXNzOwotCQl9Ci0JfQotCi1mYWlsOgotCXJldHVybiAwOwotCi1zdWNjZXNzOgotCWlmIChwY2lfaXJxX3ZlcmJvc2UpCi0JCXByaW50aygiJXM6IFJvdXRpbmcgYnVzWyUyeF0gc2xvdFslMnhdIHRvIElOT1slMDJ4XVxuIiwKLQkJICAgICAgIHBibS0+bmFtZSwKLQkJICAgICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCi0JCSAgICAgICAqaW50ZXJydXB0KTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHBkZXZfZml4dXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3AgPSBwZGV2LT5zeXNkYXRhOwotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IHBjcC0+cGJtOwotCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gcGJtLT5wYXJlbnQ7Ci0JdW5zaWduZWQgaW50IHBvcnRpZCA9IHBibS0+cG9ydGlkOwotCXVuc2lnbmVkIGludCBwcm9tX2lycTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gcGNwLT5wcm9tX25vZGU7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gcGNwLT5vcDsKIAotCS8qIElmIHRoaXMgaXMgYW4gZW1wdHkgRUJVUyBkZXZpY2UsIHNvbWV0aW1lcyBPQlAgZmFpbHMgdG8KLQkgKiBnaXZlIGl0IGEgdmFsaWQgZnVsbHkgc3BlY2lmaWVkIGludGVycnVwdHMgcHJvcGVydHkuCi0JICogVGhlIEVCVVMgaG9va2VkIHVwIHRvIFN1bkhNRSBvbiBQQ0kgSS9PIGJvYXJkcyBvZgotCSAqIEV4MDAwIHN5c3RlbXMgaXMgb25lIHN1Y2ggY2FzZS4KLQkgKgotCSAqIFRoZSBpbnRlcnJ1cHQgaXMgbm90IGltcG9ydGFudCBzbyBqdXN0IGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfU1VOICYmCi0JICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NVTl9FQlVTICYmCi0JICAgICFkcC0+Y2hpbGQpIHsKLQkJcGRldi0+aXJxID0gMDsKKwlpZiAob3AtPmlycXNbMF0gPT0gMHhmZmZmZmZmZikgeworCQlwZGV2LT5pcnEgPSBQQ0lfSVJRX05PTkU7CiAJCXJldHVybjsKIAl9CiAKLQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgImludGVycnVwdHMiLCBOVUxMKTsKLQlpZiAoIXByb3ApIHsKLQkJcGRldi0+aXJxID0gMDsKLQkJcmV0dXJuOwotCX0KLQlwcm9tX2lycSA9ICoodW5zaWduZWQgaW50ICopIHByb3AtPnZhbHVlOworCXBkZXYtPmlycSA9IG9wLT5pcnFzWzBdOwogCi0JaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IpIHsKLQkJLyogRnVsbHkgc3BlY2lmaWVkIGFscmVhZHk/ICovCi0JCWlmICgoKHByb21faXJxICYgUENJX0lSUV9JR04pID4+IDYpID09IHBvcnRpZCkgewotCQkJcGRldi0+aXJxID0gcC0+aXJxX2J1aWxkKHBibSwgcGRldiwgcHJvbV9pcnEpOwotCQkJZ290byBoYXZlX2lycTsKLQkJfQotCi0JCS8qIEFuIG9uYm9hcmQgZGV2aWNlPyAoYml0IDUgc2V0KSAqLwotCQlpZiAoKHByb21faXJxICYgUENJX0lSUV9JTk8pICYgMHgyMCkgewotCQkJcGRldi0+aXJxID0gcC0+aXJxX2J1aWxkKHBibSwgcGRldiwgKHBvcnRpZCA8PCA2IHwgcHJvbV9pcnEpKTsKLQkJCWdvdG8gaGF2ZV9pcnE7Ci0JCX0KLQl9Ci0KLQkvKiBDYW4gd2UgZmluZCBhIG1hdGNoaW5nIGVudHJ5IGluIHRoZSBpbnRlcnJ1cHQtbWFwPyAqLwotCWlmIChwY2lfaW50bWFwX21hdGNoKHBkZXYsICZwcm9tX2lycSkpIHsKLQkJcGRldi0+aXJxID0gcC0+aXJxX2J1aWxkKHBibSwgcGRldiwgKHBvcnRpZCA8PCA2KSB8IHByb21faXJxKTsKLQkJZ290byBoYXZlX2lycTsKLQl9Ci0KLQkvKiBPaywgd2UgaGF2ZSB0byBkbyBpdCB0aGUgaGFyZCB3YXkuICovCi0JewotCQl1bnNpZ25lZCBpbnQgYnVzLCBzbG90LCBsaW5lOwotCi0JCWJ1cyA9IChwYm0gPT0gJnBibS0+cGFyZW50LT5wYm1fQikgPyAoMSA8PCA0KSA6IDA7Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIGxlZ2FsIGludGVycnVwdCBwcm9wZXJ0eSwgdXNlIGl0IGFzCi0JCSAqIHRoZSBJUlEgbGluZS4KLQkJICovCi0JCWlmIChwcm9tX2lycSA+IDAgJiYgcHJvbV9pcnEgPCA1KSB7Ci0JCQlsaW5lID0gKChwcm9tX2lycSAtIDEpICYgMyk7Ci0JCX0gZWxzZSB7Ci0JCQl1OCBwY2lfaXJxX2xpbmU7Ci0KLQkJCS8qIEVsc2UganVzdCBkaXJlY3RseSBjb25zdWx0IFBDSSBjb25maWcgc3BhY2UuICovCi0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBjaV9pcnFfbGluZSk7Ci0JCQlsaW5lID0gKChwY2lfaXJxX2xpbmUgLSAxKSAmIDMpOwotCQl9Ci0KLQkJLyogTm93IGZpZ3VyZSBvdXQgdGhlIHNsb3QuCi0JCSAqCi0JCSAqIEJhc2ljYWxseSwgZGV2aWNlIG51bWJlciB6ZXJvIG9uIHRoZSB0b3AtbGV2ZWwgYnVzIGlzCi0JCSAqIGFsd2F5cyB0aGUgUENJIGhvc3QgY29udHJvbGxlci4gIFNsb3QgMCBpcyB0aGVuIGRldmljZSAxLgotCQkgKiBQQk0gQSBzdXBwb3J0cyB0d28gZXh0ZXJuYWwgc2xvdHMgKDAgYW5kIDEpLCBhbmQgUEJNIEIKLQkJICogc3VwcG9ydHMgNCBleHRlcm5hbCBzbG90cyAoMCwgMSwgMiwgYW5kIDMpLiAgT24tYm9hcmQgUENJCi0JCSAqIGRldmljZXMgYXJlIHdpcmVkIHRvIGRldmljZSBudW1iZXJzIG91dHNpZGUgb2YgdGhlc2UKLQkJICogcmFuZ2VzLiAtRGF2ZU0KLSAJCSAqLwotCQlpZiAocGRldi0+YnVzLT5udW1iZXIgPT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKLQkJCXNsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbikgLSBwYm0tPnBjaV9maXJzdF9zbG90OwotCQl9IGVsc2UgewotCQkJc3RydWN0IHBjaV9kZXYgKmJ1c19kZXY7Ci0KLQkJCS8qIFVuZGVybmVhdGggYSBicmlkZ2UsIHVzZSBzbG90IG51bWJlciBvZiBwYXJlbnQKLQkJCSAqIGJyaWRnZSB3aGljaCBpcyBjbG9zZXN0IHRvIHRoZSBQQk0uCi0JCQkgKi8KLQkJCWJ1c19kZXYgPSBwZGV2LT5idXMtPnNlbGY7Ci0JCQl3aGlsZSAoYnVzX2Rldi0+YnVzICYmCi0JCQkgICAgICAgYnVzX2Rldi0+YnVzLT5udW1iZXIgIT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pCi0JCQkJYnVzX2RldiA9IGJ1c19kZXYtPmJ1cy0+c2VsZjsKLQotCQkJc2xvdCA9IFBDSV9TTE9UKGJ1c19kZXYtPmRldmZuKSAtIHBibS0+cGNpX2ZpcnN0X3Nsb3Q7Ci0JCX0KLQkJc2xvdCA9IHNsb3QgPDwgMjsKLQotCQlwZGV2LT5pcnEgPSBwLT5pcnFfYnVpbGQocGJtLCBwZGV2LAotCQkJCQkgKChwb3J0aWQgPDwgNikgJiBQQ0lfSVJRX0lHTikgfAotCQkJCQkgKGJ1cyB8IHNsb3QgfCBsaW5lKSk7Ci0JfQotCi1oYXZlX2lycToKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAogCQkJICAgICAgcGRldi0+aXJxICYgUENJX0lSUV9JTk8pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9wc3ljaG8uYwppbmRleCA1YjIyNjFlLi4xOTdhN2ZmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9wc3ljaG8uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9wc3ljaG8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3RhcmZpcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KIAogI2luY2x1ZGUgInBjaV9pbXBsLmgiCiAjaW5jbHVkZSAiaW9tbXVfY29tbW9uLmgiCkBAIC0yMDgsMTEwICsyMDksNiBAQAogCS53cml0ZSA9CXBzeWNob193cml0ZV9wY2lfY2ZnLAogfTsKIAotLyogUFNZQ0hPIGludGVycnVwdCBtYXBwaW5nIHN1cHBvcnQuICovCi0jZGVmaW5lIFBTWUNIT19JTUFQX0FfU0xPVDAJMHgwYzAwVUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfQl9TTE9UMAkweDBjMjBVTAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHN5Y2hvX3BjaXNsb3RfaW1hcF9vZmZzZXQodW5zaWduZWQgbG9uZyBpbm8pCi17Ci0JdW5zaWduZWQgaW50IGJ1cyA9ICAoaW5vICYgMHgxMCkgPj4gNDsKLQl1bnNpZ25lZCBpbnQgc2xvdCA9IChpbm8gJiAweDBjKSA+PiAyOwotCi0JaWYgKGJ1cyA9PSAwKQotCQlyZXR1cm4gUFNZQ0hPX0lNQVBfQV9TTE9UMCArIChzbG90ICogOCk7Ci0JZWxzZQotCQlyZXR1cm4gUFNZQ0hPX0lNQVBfQl9TTE9UMCArIChzbG90ICogOCk7Ci19Ci0KLSNkZWZpbmUgUFNZQ0hPX0lNQVBfU0NTSQkweDEwMDBVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9FVEgJCTB4MTAwOFVMCi0jZGVmaW5lIFBTWUNIT19JTUFQX0JQUAkJMHgxMDEwVUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfQVVfUkVDCTB4MTAxOFVMCi0jZGVmaW5lIFBTWUNIT19JTUFQX0FVX1BMQVkJMHgxMDIwVUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfUEZBSUwJMHgxMDI4VUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfS01TCQkweDEwMzBVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9GTFBZCTB4MTAzOFVMCi0jZGVmaW5lIFBTWUNIT19JTUFQX1NIVwkJMHgxMDQwVUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfS0JECQkweDEwNDhVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9NUwkJMHgxMDUwVUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfU0VSCQkweDEwNThVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9USU0wCTB4MTA2MFVMCi0jZGVmaW5lIFBTWUNIT19JTUFQX1RJTTEJMHgxMDY4VUwKLSNkZWZpbmUgUFNZQ0hPX0lNQVBfVUUJCTB4MTA3MFVMCi0jZGVmaW5lIFBTWUNIT19JTUFQX0NFCQkweDEwNzhVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9BX0VSUgkweDEwODBVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9CX0VSUgkweDEwODhVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9QTUdNVAkweDEwOTBVTAotI2RlZmluZSBQU1lDSE9fSU1BUF9HRlgJCTB4MTA5OFVMCi0jZGVmaW5lIFBTWUNIT19JTUFQX0VVUEEJMHgxMGEwVUwKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19vbmJvYXJkX2ltYXBfb2ZmW10gPSB7Ci0vKjB4MjAqLwlQU1lDSE9fSU1BUF9TQ1NJLAotLyoweDIxKi8JUFNZQ0hPX0lNQVBfRVRILAotLyoweDIyKi8JUFNZQ0hPX0lNQVBfQlBQLAotLyoweDIzKi8JUFNZQ0hPX0lNQVBfQVVfUkVDLAotLyoweDI0Ki8JUFNZQ0hPX0lNQVBfQVVfUExBWSwKLS8qMHgyNSovCVBTWUNIT19JTUFQX1BGQUlMLAotLyoweDI2Ki8JUFNZQ0hPX0lNQVBfS01TLAotLyoweDI3Ki8JUFNZQ0hPX0lNQVBfRkxQWSwKLS8qMHgyOCovCVBTWUNIT19JTUFQX1NIVywKLS8qMHgyOSovCVBTWUNIT19JTUFQX0tCRCwKLS8qMHgyYSovCVBTWUNIT19JTUFQX01TLAotLyoweDJiKi8JUFNZQ0hPX0lNQVBfU0VSLAotLyoweDJjKi8JUFNZQ0hPX0lNQVBfVElNMCwKLS8qMHgyZCovCVBTWUNIT19JTUFQX1RJTTEsCi0vKjB4MmUqLwlQU1lDSE9fSU1BUF9VRSwKLS8qMHgyZiovCVBTWUNIT19JTUFQX0NFLAotLyoweDMwKi8JUFNZQ0hPX0lNQVBfQV9FUlIsCi0vKjB4MzEqLwlQU1lDSE9fSU1BUF9CX0VSUiwKLS8qMHgzMiovCVBTWUNIT19JTUFQX1BNR01UCi19OwotI2RlZmluZSBQU1lDSE9fT05CT0FSRF9JUlFfQkFTRQkJMHgyMAotI2RlZmluZSBQU1lDSE9fT05CT0FSRF9JUlFfTEFTVAkJMHgzMgotI2RlZmluZSBwc3ljaG9fb25ib2FyZF9pbWFwX29mZnNldChfX2lubykgXAotCV9fb25ib2FyZF9pbWFwX29mZlsoX19pbm8pIC0gUFNZQ0hPX09OQk9BUkRfSVJRX0JBU0VdCi0KLSNkZWZpbmUgUFNZQ0hPX0lDTFJfQV9TTE9UMAkweDE0MDBVTAotI2RlZmluZSBQU1lDSE9fSUNMUl9TQ1NJCTB4MTgwMFVMCi0KLSNkZWZpbmUgcHN5Y2hvX2ljbHJfb2Zmc2V0KGlubykJCQkJCSAgICAgIFwKLQkoKGlubyAmIDB4MjApID8gKFBTWUNIT19JQ0xSX1NDU0kgKyAoKChpbm8pICYgMHgxZikgPDwgMykpIDogIFwKLQkJCShQU1lDSE9fSUNMUl9BX1NMT1QwICsgKCgoaW5vKSAmIDB4MWYpPDwzKSkpCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHN5Y2hvX2lycV9idWlsZChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCi0JCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBpbm8pCi17Ci0JdW5zaWduZWQgbG9uZyBpbWFwLCBpY2xyOwotCXVuc2lnbmVkIGxvbmcgaW1hcF9vZmYsIGljbHJfb2ZmOwotCWludCBpbm9maXh1cCA9IDA7Ci0KLQlpbm8gJj0gUENJX0lSUV9JTk87Ci0JaWYgKGlubyA8IFBTWUNIT19PTkJPQVJEX0lSUV9CQVNFKSB7Ci0JCS8qIFBDSSBzbG90ICovCi0JCWltYXBfb2ZmID0gcHN5Y2hvX3BjaXNsb3RfaW1hcF9vZmZzZXQoaW5vKTsKLQl9IGVsc2UgewotCQkvKiBPbmJvYXJkIGRldmljZSAqLwotCQlpZiAoaW5vID4gUFNZQ0hPX09OQk9BUkRfSVJRX0xBU1QpIHsKLQkJCXByb21fcHJpbnRmKCJwc3ljaG9faXJxX2J1aWxkOiBXYWNreSBJTk8gWyV4XVxuIiwgaW5vKTsKLQkJCXByb21faGFsdCgpOwotCQl9Ci0JCWltYXBfb2ZmID0gcHN5Y2hvX29uYm9hcmRfaW1hcF9vZmZzZXQoaW5vKTsKLQl9Ci0KLQkvKiBOb3cgYnVpbGQgdGhlIElSUSBidWNrZXQuICovCi0JaW1hcCA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgaW1hcF9vZmY7Ci0JaW1hcCArPSA0OwotCi0JaWNscl9vZmYgPSBwc3ljaG9faWNscl9vZmZzZXQoaW5vKTsKLQlpY2xyID0gcGJtLT5jb250cm9sbGVyX3JlZ3MgKyBpY2xyX29mZjsKLQlpY2xyICs9IDQ7Ci0KLQlpZiAoKGlubyAmIDB4MjApID09IDApCi0JCWlub2ZpeHVwID0gaW5vICYgMHgwMzsKLQotCXJldHVybiBidWlsZF9pcnEoaW5vZml4dXAsIGljbHIsIGltYXApOwotfQotCiAvKiBQU1lDSE8gZXJyb3IgaGFuZGxpbmcgc3VwcG9ydC4gKi8KIGVudW0gcHN5Y2hvX2Vycm9yX3R5cGUgewogCVVFX0VSUiwgQ0VfRVJSLCBQQ0lfRVJSCkBAIC05NDQsNTEgKzg0MSwzNCBAQAogI2RlZmluZSAgUFNZQ0hPX0VDQ0NUUkxfRUUJIDB4ODAwMDAwMDAwMDAwMDAwMFVMIC8qIEVuYWJsZSBFQ0MgQ2hlY2tpbmcgKi8KICNkZWZpbmUgIFBTWUNIT19FQ0NDVFJMX1VFCSAweDQwMDAwMDAwMDAwMDAwMDBVTCAvKiBFbmFibGUgVUUgSW50ZXJydXB0cyAqLwogI2RlZmluZSAgUFNZQ0hPX0VDQ0NUUkxfQ0UJIDB4MjAwMDAwMDAwMDAwMDAwMFVMIC8qIEVuYWJsZSBDRSBJTnRlcnJ1cHRzICovCi0jZGVmaW5lIFBTWUNIT19VRV9JTk8JCTB4MmUKLSNkZWZpbmUgUFNZQ0hPX0NFX0lOTwkJMHgyZgotI2RlZmluZSBQU1lDSE9fUENJRVJSX0FfSU5PCTB4MzAKLSNkZWZpbmUgUFNZQ0hPX1BDSUVSUl9CX0lOTwkweDMxCiBzdGF0aWMgdm9pZCBwc3ljaG9fcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnApCiB7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gJnAtPnBibV9BOyAvKiBhcmJpdHJhcnkgKi8KKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVnczsKLQl1bnNpZ25lZCBpbnQgaXJxLCBwb3J0aWQgPSBwYm0tPnBvcnRpZDsKIAl1NjQgdG1wOwogCi0JLyogQnVpbGQgSVJRcyBhbmQgcmVnaXN0ZXIgaGFuZGxlcnMuICovCi0JaXJxID0gcHN5Y2hvX2lycV9idWlsZChwYm0sIE5VTEwsIChwb3J0aWQgPDwgNikgfCBQU1lDSE9fVUVfSU5PKTsKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBwc3ljaG9fdWVfaW50ciwKLQkJCVNBX1NISVJRLCAiUFNZQ0hPIFVFIiwgcCkgPCAwKSB7Ci0JCXByb21fcHJpbnRmKCJQU1lDSE8lZDogQ2Fubm90IHJlZ2lzdGVyIFVFIGludGVycnVwdC5cbiIsCi0JCQkgICAgcC0+aW5kZXgpOwotCQlwcm9tX2hhbHQoKTsKLQl9CisJaWYgKCFvcCkKKwkJcmV0dXJuOwogCi0JaXJxID0gcHN5Y2hvX2lycV9idWlsZChwYm0sIE5VTEwsIChwb3J0aWQgPDwgNikgfCBQU1lDSE9fQ0VfSU5PKTsKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBwc3ljaG9fY2VfaW50ciwKLQkJCVNBX1NISVJRLCAiUFNZQ0hPIENFIiwgcCkgPCAwKSB7Ci0JCXByb21fcHJpbnRmKCJQU1lDSE8lZDogQ2Fubm90IHJlZ2lzdGVyIENFIGludGVycnVwdC5cbiIsCi0JCQkgICAgcC0+aW5kZXgpOwotCQlwcm9tX2hhbHQoKTsKLQl9CisJLyogUHN5Y2hvIGludGVycnVwdCBwcm9wZXJ0eSBvcmRlciBpczoKKwkgKiAwOiBQQ0lFUlIgUEJNIEIgSU5PCisJICogMTogVUUgRVJSCisJICogMjogQ0UgRVJSCisJICogMzogUE9XRVIgRkFJTAorCSAqIDQ6IFNQQVJFIEhBUkRXQVJFCisJICogNTogUENJRVJSIFBCTSBBIElOTworCSAqLwogCi0JcGJtID0gJnAtPnBibV9BOwotCWlycSA9IHBzeWNob19pcnFfYnVpbGQocGJtLCBOVUxMLCAocG9ydGlkIDw8IDYpIHwgUFNZQ0hPX1BDSUVSUl9BX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgcHN5Y2hvX3BjaWVycl9pbnRyLAotCQkJU0FfU0hJUlEsICJQU1lDSE8gUENJRVJSIiwgJnAtPnBibV9BKSA8IDApIHsKLQkJcHJvbV9wcmludGYoIlBTWUNITyVkKFBCTUEpOiBDYW5ub3QgcmVnaXN0ZXIgUGNpRVJSIGludGVycnVwdC5cbiIsCi0JCQkgICAgcC0+aW5kZXgpOwotCQlwcm9tX2hhbHQoKTsKLQl9CisJaWYgKG9wLT5udW1faXJxcyA8IDYpCisJCXJldHVybjsKIAotCXBibSA9ICZwLT5wYm1fQjsKLQlpcnEgPSBwc3ljaG9faXJxX2J1aWxkKHBibSwgTlVMTCwgKHBvcnRpZCA8PCA2KSB8IFBTWUNIT19QQ0lFUlJfQl9JTk8pOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHBzeWNob19wY2llcnJfaW50ciwKLQkJCVNBX1NISVJRLCAiUFNZQ0hPIFBDSUVSUiIsICZwLT5wYm1fQikgPCAwKSB7Ci0JCXByb21fcHJpbnRmKCJQU1lDSE8lZChQQk1CKTogQ2Fubm90IHJlZ2lzdGVyIFBjaUVSUiBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHAtPmluZGV4KTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQorCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzFdLCBwc3ljaG9fdWVfaW50ciwgSVJRRl9TSEFSRUQsICJQU1lDSE8gVUUiLCBwKTsKKwlyZXF1ZXN0X2lycShvcC0+aXJxc1syXSwgcHN5Y2hvX2NlX2ludHIsIElSUUZfU0hBUkVELCAiUFNZQ0hPIENFIiwgcCk7CisJcmVxdWVzdF9pcnEob3AtPmlycXNbNV0sIHBzeWNob19wY2llcnJfaW50ciwgSVJRRl9TSEFSRUQsCisJCSAgICAiUFNZQ0hPIFBDSUVSUi1BIiwgJnAtPnBibV9BKTsKKwlyZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgcHN5Y2hvX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJICAgICJQU1lDSE8gUENJRVJSLUIiLCAmcC0+cGJtX0IpOwogCiAJLyogRW5hYmxlIFVFIGFuZCBDRSBpbnRlcnJ1cHRzIGZvciBjb250cm9sbGVyLiAqLwogCXBzeWNob193cml0ZShiYXNlICsgUFNZQ0hPX0VDQ19DVFJMLApAQCAtMTE3MSw5ICsxMDUxLDcgQEAKIAogCS8qIElmIG5lY2Vzc2FyeSwgaG9vayB1cyB1cCBmb3Igc3RhcmZpcmUgSVJRIHRyYW5zbGF0aW9ucy4gKi8KIAlpZiAodGhpc19pc19zdGFyZmlyZSkKLQkJcC0+c3RhcmZpcmVfY29va2llID0gc3RhcmZpcmVfaG9va3VwKHAtPnBibV9BLnBvcnRpZCk7Ci0JZWxzZQotCQlwLT5zdGFyZmlyZV9jb29raWUgPSBOVUxMOworCQlzdGFyZmlyZV9ob29rdXAocC0+cGJtX0EucG9ydGlkKTsKIH0KIAogI2RlZmluZSBQU1lDSE9fSVJRX1JFVFJZCTB4MWEwMFVMCkBAIC0xNDA4LDcgKzEyODYsNiBAQAogCXAtPmluZGV4ID0gcGNpX251bV9jb250cm9sbGVycysrOwogCXAtPnBibXNfc2FtZV9kb21haW4gPSAwOwogCXAtPnNjYW5fYnVzID0gcHN5Y2hvX3NjYW5fYnVzOwotCXAtPmlycV9idWlsZCA9IHBzeWNob19pcnFfYnVpbGQ7CiAJcC0+YmFzZV9hZGRyZXNzX3VwZGF0ZSA9IHBzeWNob19iYXNlX2FkZHJlc3NfdXBkYXRlOwogCXAtPnJlc291cmNlX2FkanVzdCA9IHBzeWNob19yZXNvdXJjZV9hZGp1c3Q7CiAJcC0+cGNpX29wcyA9ICZwc3ljaG9fb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2FicmUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NhYnJlLmMKaW5kZXggMjZmMTk0Yy4uNDU4OTE4NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2FicmUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zYWJyZS5jCkBAIC00ODUsMTE0ICs0ODUsNiBAQAogCS53cml0ZSA9CXNhYnJlX3dyaXRlX3BjaV9jZmcsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYWJyZV9wY2lzbG90X2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQotewotCXVuc2lnbmVkIGludCBidXMgPSAgKGlubyAmIDB4MTApID4+IDQ7Ci0JdW5zaWduZWQgaW50IHNsb3QgPSAoaW5vICYgMHgwYykgPj4gMjsKLQotCWlmIChidXMgPT0gMCkKLQkJcmV0dXJuIFNBQlJFX0lNQVBfQV9TTE9UMCArIChzbG90ICogOCk7Ci0JZWxzZQotCQlyZXR1cm4gU0FCUkVfSU1BUF9CX1NMT1QwICsgKHNsb3QgKiA4KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19vbmJvYXJkX2ltYXBfb2ZmW10gPSB7Ci0vKjB4MjAqLwlTQUJSRV9JTUFQX1NDU0ksCi0vKjB4MjEqLwlTQUJSRV9JTUFQX0VUSCwKLS8qMHgyMiovCVNBQlJFX0lNQVBfQlBQLAotLyoweDIzKi8JU0FCUkVfSU1BUF9BVV9SRUMsCi0vKjB4MjQqLwlTQUJSRV9JTUFQX0FVX1BMQVksCi0vKjB4MjUqLwlTQUJSRV9JTUFQX1BGQUlMLAotLyoweDI2Ki8JU0FCUkVfSU1BUF9LTVMsCi0vKjB4MjcqLwlTQUJSRV9JTUFQX0ZMUFksCi0vKjB4MjgqLwlTQUJSRV9JTUFQX1NIVywKLS8qMHgyOSovCVNBQlJFX0lNQVBfS0JELAotLyoweDJhKi8JU0FCUkVfSU1BUF9NUywKLS8qMHgyYiovCVNBQlJFX0lNQVBfU0VSLAotLyoweDJjKi8JMCAvKiByZXNlcnZlZCAqLywKLS8qMHgyZCovCTAgLyogcmVzZXJ2ZWQgKi8sCi0vKjB4MmUqLwlTQUJSRV9JTUFQX1VFLAotLyoweDJmKi8JU0FCUkVfSU1BUF9DRSwKLS8qMHgzMCovCVNBQlJFX0lNQVBfUENJRVJSLAotfTsKLSNkZWZpbmUgU0FCUkVfT05CT0FSRF9JUlFfQkFTRQkJMHgyMAotI2RlZmluZSBTQUJSRV9PTkJPQVJEX0lSUV9MQVNUCQkweDMwCi0jZGVmaW5lIHNhYnJlX29uYm9hcmRfaW1hcF9vZmZzZXQoX19pbm8pIFwKLQlfX29uYm9hcmRfaW1hcF9vZmZbKF9faW5vKSAtIFNBQlJFX09OQk9BUkRfSVJRX0JBU0VdCi0KLSNkZWZpbmUgc2FicmVfaWNscl9vZmZzZXQoaW5vKQkJCQkJICAgICAgXAotCSgoaW5vICYgMHgyMCkgPyAoU0FCUkVfSUNMUl9TQ1NJICsgKCgoaW5vKSAmIDB4MWYpIDw8IDMpKSA6ICBcCi0JCQkoU0FCUkVfSUNMUl9BX1NMT1QwICsgKCgoaW5vKSAmIDB4MWYpPDwzKSkpCi0KLS8qIFdoZW4gYSBkZXZpY2UgbGl2ZXMgYmVoaW5kIGEgYnJpZGdlIGRlZXBlciBpbiB0aGUgUENJIGJ1cyB0b3BvbG9neQotICogdGhhbiBBUEIsIGEgc3BlY2lhbCBzZXF1ZW5jZSBtdXN0IHJ1biB0byBtYWtlIHN1cmUgYWxsIHBlbmRpbmcgRE1BCi0gKiB0cmFuc2ZlcnMgYXQgdGhlIHRpbWUgb2YgSVJRIGRlbGl2ZXJ5IGFyZSB2aXNpYmxlIGluIHRoZSBjb2hlcmVuY3kKLSAqIGRvbWFpbiBieSB0aGUgY3B1LiAgVGhpcyBzZXF1ZW5jZSBpcyB0byBwZXJmb3JtIGEgcmVhZCBvbiB0aGUgZmFyCi0gKiBzaWRlIG9mIHRoZSBub24tQVBCIGJyaWRnZSwgdGhlbiBwZXJmb3JtIGEgcmVhZCBvZiBTYWJyZSdzIERNQQotICogd3JpdGUtc3luYyByZWdpc3Rlci4KLSAqLwotc3RhdGljIHZvaWQgc2FicmVfd3N5bmNfaGFuZGxlcih1bnNpZ25lZCBpbnQgaW5vLCB2b2lkICpfYXJnMSwgdm9pZCAqX2FyZzIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBfYXJnMTsKLQl1bnNpZ25lZCBsb25nIHN5bmNfcmVnID0gKHVuc2lnbmVkIGxvbmcpIF9hcmcyOwotCXUxNiBfdW51c2VkOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1ZFTkRPUl9JRCwgJl91bnVzZWQpOwotCXNhYnJlX3JlYWQoc3luY19yZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNhYnJlX2lycV9idWlsZChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCi0JCQkJICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICB1bnNpZ25lZCBpbnQgaW5vKQotewotCXVuc2lnbmVkIGxvbmcgaW1hcCwgaWNscjsKLQl1bnNpZ25lZCBsb25nIGltYXBfb2ZmLCBpY2xyX29mZjsKLQlpbnQgaW5vZml4dXAgPSAwOwotCWludCB2aXJ0X2lycTsKLQotCWlubyAmPSBQQ0lfSVJRX0lOTzsKLQlpZiAoaW5vIDwgU0FCUkVfT05CT0FSRF9JUlFfQkFTRSkgewotCQkvKiBQQ0kgc2xvdCAqLwotCQlpbWFwX29mZiA9IHNhYnJlX3BjaXNsb3RfaW1hcF9vZmZzZXQoaW5vKTsKLQl9IGVsc2UgewotCQkvKiBvbmJvYXJkIGRldmljZSAqLwotCQlpZiAoaW5vID4gU0FCUkVfT05CT0FSRF9JUlFfTEFTVCkgewotCQkJcHJvbV9wcmludGYoInNhYnJlX2lycV9idWlsZDogV2Fja3kgSU5PIFsleF1cbiIsIGlubyk7Ci0JCQlwcm9tX2hhbHQoKTsKLQkJfQotCQlpbWFwX29mZiA9IHNhYnJlX29uYm9hcmRfaW1hcF9vZmZzZXQoaW5vKTsKLQl9Ci0KLQkvKiBOb3cgYnVpbGQgdGhlIElSUSBidWNrZXQuICovCi0JaW1hcCA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgaW1hcF9vZmY7Ci0JaW1hcCArPSA0OwotCi0JaWNscl9vZmYgPSBzYWJyZV9pY2xyX29mZnNldChpbm8pOwotCWljbHIgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIGljbHJfb2ZmOwotCWljbHIgKz0gNDsKLQotCWlmICgoaW5vICYgMHgyMCkgPT0gMCkKLQkJaW5vZml4dXAgPSBpbm8gJiAweDAzOwotCi0JdmlydF9pcnEgPSBidWlsZF9pcnEoaW5vZml4dXAsIGljbHIsIGltYXApOwotCi0JaWYgKHBkZXYpIHsKLQkJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcCA9IHBkZXYtPnN5c2RhdGE7Ci0KLQkJaWYgKHBkZXYtPmJ1cy0+bnVtYmVyICE9IHBjcC0+cGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKLQkJCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gcGNwLT5wYm0tPnBhcmVudDsKLQotCQkJaXJxX2luc3RhbGxfcHJlX2hhbmRsZXIodmlydF9pcnEsCi0JCQkJCQlzYWJyZV93c3luY19oYW5kbGVyLAotCQkJCQkJcGRldiwKLQkJCQkJCSh2b2lkICopCi0JCQkJCQlwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKwotCQkJCQkJU0FCUkVfV1JTWU5DKTsKLQkJfQotCX0KLQlyZXR1cm4gdmlydF9pcnE7Ci19Ci0KIC8qIFNBQlJFIGVycm9yIGhhbmRsaW5nIHN1cHBvcnQuICovCiBzdGF0aWMgdm9pZCBzYWJyZV9jaGVja19pb21tdV9lcnJvcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBhZnNyLApAQCAtOTI5LDE3ICs4MjEsMzAgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIFhYWCBXaGF0IGFib3V0IFBvd2VyRmFpbC9Qb3dlck1hbmFnZW1lbnQ/Pz8gLURhdmVNICovCi0jZGVmaW5lIFNBQlJFX1VFX0lOTwkJMHgyZQotI2RlZmluZSBTQUJSRV9DRV9JTk8JCTB4MmYKLSNkZWZpbmUgU0FCUkVfUENJRVJSX0lOTwkweDMwCiBzdGF0aWMgdm9pZCBzYWJyZV9yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKIHsKIAlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSAmcC0+cGJtX0E7IC8qIGFyYml0cmFyeSAqLworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBwYm0tPnByb21fbm9kZTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcDsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBwYm0tPmNvbnRyb2xsZXJfcmVnczsKLQl1bnNpZ25lZCBsb25nIGlycSwgcG9ydGlkID0gcGJtLT5wb3J0aWQ7CiAJdTY0IHRtcDsKIAorCWlmIChwYm0tPmNoaXBfdHlwZSA9PSBQQk1fQ0hJUF9UWVBFX1NBQlJFKQorCQlkcCA9IGRwLT5wYXJlbnQ7CisKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZHApOworCWlmICghb3ApCisJCXJldHVybjsKKworCS8qIFNhYnJlL0h1bW1pbmdiaXJkIElSUSBwcm9wZXJ0eSBsYXlvdXQgaXM6CisJICogMDogUENJIEVSUgorCSAqIDE6IFVFIEVSUgorCSAqIDI6IENFIEVSUgorCSAqIDM6IFBPV0VSIEZBSUwKKwkgKi8KKwlpZiAob3AtPm51bV9pcnFzIDwgNCkKKwkJcmV0dXJuOworCiAJLyogV2UgY2xlYXIgdGhlIGVycm9yIGJpdHMgaW4gdGhlIGFwcHJvcHJpYXRlIEFGU1IgYmVmb3JlCiAJICogcmVnaXN0ZXJpbmcgdGhlIGhhbmRsZXIgc28gdGhhdCB3ZSBkb24ndCBnZXQgc3B1cmlvdXMKIAkgKiBpbnRlcnJ1cHRzLgpAQCAtOTQ4LDMyICs4NTMsMTYgQEAKIAkJICAgIChTQUJSRV9VRUFGU1JfUERSRCB8IFNBQlJFX1VFQUZTUl9QRFdSIHwKIAkJICAgICBTQUJSRV9VRUFGU1JfU0RSRCB8IFNBQlJFX1VFQUZTUl9TRFdSIHwKIAkJICAgICBTQUJSRV9VRUFGU1JfU0RURSB8IFNBQlJFX1VFQUZTUl9QRFRFKSk7Ci0JaXJxID0gc2FicmVfaXJxX2J1aWxkKHBibSwgTlVMTCwgKHBvcnRpZCA8PCA2KSB8IFNBQlJFX1VFX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc2FicmVfdWVfaW50ciwKLQkJCVNBX1NISVJRLCAiU0FCUkUgVUUiLCBwKSA8IDApIHsKLQkJcHJvbV9wcmludGYoIlNBQlJFJWQ6IENhbm5vdCByZWdpc3RlciBVRSBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHAtPmluZGV4KTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQorCisJcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHNhYnJlX3VlX2ludHIsIElSUUZfU0hBUkVELCAiU0FCUkUgVUUiLCBwKTsKIAogCXNhYnJlX3dyaXRlKGJhc2UgKyBTQUJSRV9DRV9BRlNSLAogCQkgICAgKFNBQlJFX0NFQUZTUl9QRFJEIHwgU0FCUkVfQ0VBRlNSX1BEV1IgfAogCQkgICAgIFNBQlJFX0NFQUZTUl9TRFJEIHwgU0FCUkVfQ0VBRlNSX1NEV1IpKTsKLQlpcnEgPSBzYWJyZV9pcnFfYnVpbGQocGJtLCBOVUxMLCAocG9ydGlkIDw8IDYpIHwgU0FCUkVfQ0VfSU5PKTsKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzYWJyZV9jZV9pbnRyLAotCQkJU0FfU0hJUlEsICJTQUJSRSBDRSIsIHApIDwgMCkgewotCQlwcm9tX3ByaW50ZigiU0FCUkUlZDogQ2Fubm90IHJlZ2lzdGVyIENFIGludGVycnVwdC5cbiIsCi0JCQkgICAgcC0+aW5kZXgpOwotCQlwcm9tX2hhbHQoKTsKLQl9CiAKLQlpcnEgPSBzYWJyZV9pcnFfYnVpbGQocGJtLCBOVUxMLCAocG9ydGlkIDw8IDYpIHwgU0FCUkVfUENJRVJSX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc2FicmVfcGNpZXJyX2ludHIsCi0JCQlTQV9TSElSUSwgIlNBQlJFIFBDSUVSUiIsIHApIDwgMCkgewotCQlwcm9tX3ByaW50ZigiU0FCUkUlZDogQ2Fubm90IHJlZ2lzdGVyIFBjaUVSUiBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHAtPmluZGV4KTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQorCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBzYWJyZV9jZV9pbnRyLCBJUlFGX1NIQVJFRCwgIlNBQlJFIENFIiwgcCk7CisJcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNhYnJlX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJICAgICJTQUJSRSBQQ0lFUlIiLCBwKTsKIAogCXRtcCA9IHNhYnJlX3JlYWQoYmFzZSArIFNBQlJFX1BDSUNUUkwpOwogCXRtcCB8PSBTQUJSRV9QQ0lDVFJMX0VSUkVOOwpAQCAtMTQ5Miw3ICsxMzgxLDYgQEAKIAlwLT5pbmRleCA9IHBjaV9udW1fY29udHJvbGxlcnMrKzsKIAlwLT5wYm1zX3NhbWVfZG9tYWluID0gMTsKIAlwLT5zY2FuX2J1cyA9IHNhYnJlX3NjYW5fYnVzOwotCXAtPmlycV9idWlsZCA9IHNhYnJlX2lycV9idWlsZDsKIAlwLT5iYXNlX2FkZHJlc3NfdXBkYXRlID0gc2FicmVfYmFzZV9hZGRyZXNzX3VwZGF0ZTsKIAlwLT5yZXNvdXJjZV9hZGp1c3QgPSBzYWJyZV9yZXNvdXJjZV9hZGp1c3Q7CiAJcC0+cGNpX29wcyA9ICZzYWJyZV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zY2hpem8uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCmluZGV4IGYxNjQ0OWMuLjc1YWRlODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCkBAIC0yMTcsMTE2ICsyMTcsNiBAQAogCS53cml0ZSA9CXNjaGl6b193cml0ZV9wY2lfY2ZnLAogfTsKIAotLyogU0NISVpPIGludGVycnVwdCBtYXBwaW5nIHN1cHBvcnQuICBVbmxpa2UgUHN5Y2hvLCBmb3IgdGhpcyBjb250cm9sbGVyIHRoZQotICogaW1hcC9pY2xyIHJlZ2lzdGVycyBhcmUgcGVyLVBCTS4KLSAqLwotI2RlZmluZSBTQ0hJWk9fSU1BUF9CQVNFCTB4MTAwMFVMCi0jZGVmaW5lIFNDSElaT19JQ0xSX0JBU0UJMHgxNDAwVUwKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoaXpvX2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQotewotCXJldHVybiBTQ0hJWk9fSU1BUF9CQVNFICsgKGlubyAqIDhVTCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pY2xyX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKLXsKLQlyZXR1cm4gU0NISVpPX0lDTFJfQkFTRSArIChpbm8gKiA4VUwpOwotfQotCi1zdGF0aWMgdm9pZCB0b21hdGlsbG9fd3N5bmNfaGFuZGxlcih1bnNpZ25lZCBpbnQgaW5vLCB2b2lkICpfYXJnMSwgdm9pZCAqX2FyZzIpCi17Ci0JdW5zaWduZWQgbG9uZyBzeW5jX3JlZyA9ICh1bnNpZ25lZCBsb25nKSBfYXJnMjsKLQl1NjQgbWFzayA9IDFVTCA8PCAoaW5vICYgSU1BUF9JTk8pOwotCXU2NCB2YWw7Ci0JaW50IGxpbWl0OwotCi0Jc2NoaXpvX3dyaXRlKHN5bmNfcmVnLCBtYXNrKTsKLQotCWxpbWl0ID0gMTAwMDAwOwotCXZhbCA9IDA7Ci0Jd2hpbGUgKC0tbGltaXQpIHsKLQkJdmFsID0gc2NoaXpvX3JlYWQoc3luY19yZWcpOwotCQlpZiAoISh2YWwgJiBtYXNrKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAobGltaXQgPD0gMCkgewotCQlwcmludGsoInRvbWF0aWxsb193c3luY19oYW5kbGVyOiBETUEgd29uJ3Qgc3luYyBbJWx4OiVseF1cbiIsCi0JCSAgICAgICB2YWwsIG1hc2spOwotCX0KLQotCWlmIChfYXJnMSkgewotCQlzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZWxpbmVbNjRdCi0JCQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNjQpKSk7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkICUlZnBycywgJTBcblx0IgotCQkJCSAgICAgIm9yICUwLCAlNCwgJTFcblx0IgotCQkJCSAgICAgIndyICUxLCAweDAsICUlZnByc1xuXHQiCi0JCQkJICAgICAic3RkYSAlJWYwLCBbJTVdICU2XG5cdCIKLQkJCQkgICAgICJ3ciAlMCwgMHgwLCAlJWZwcnNcblx0IgotCQkJCSAgICAgIm1lbWJhciAjU3luYyIKLQkJCQkgICAgIDogIj0mciIgKG1hc2spLCAiPSZyIiAodmFsKQotCQkJCSAgICAgOiAiMCIgKG1hc2spLCAiMSIgKHZhbCksCi0JCQkJICAgICAiaSIgKEZQUlNfRkVGKSwgInIiICgmY2FjaGVsaW5lWzBdKSwKLQkJCQkgICAgICJpIiAoQVNJX0JMS19DT01NSVRfUCkpOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoaXpvX2lub190b19pY2xyKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCQkJdW5zaWduZWQgaW50IGlubykKLXsKLQlpbm8gJj0gUENJX0lSUV9JTk87Ci0JcmV0dXJuIHBibS0+cGJtX3JlZ3MgKyBzY2hpem9faWNscl9vZmZzZXQoaW5vKSArIDQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pbm9fdG9faW1hcChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCi0JCQkJCXVuc2lnbmVkIGludCBpbm8pCi17Ci0JaW5vICY9IFBDSV9JUlFfSU5POwotCXJldHVybiBwYm0tPnBibV9yZWdzICsgc2NoaXpvX2ltYXBfb2Zmc2V0KGlubykgKyA0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjaGl6b19pcnFfYnVpbGQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgaW5vKQotewotCXVuc2lnbmVkIGxvbmcgaW1hcCwgaWNscjsKLQlpbnQgaWduX2ZpeHVwOwotCWludCB2aXJ0X2lycTsKLQotCWlubyAmPSBQQ0lfSVJRX0lOTzsKLQotCS8qIE5vdyBidWlsZCB0aGUgSVJRIGJ1Y2tldC4gKi8KLQlpbWFwID0gc2NoaXpvX2lub190b19pbWFwKHBibSwgaW5vKTsKLQlpY2xyID0gc2NoaXpvX2lub190b19pY2xyKHBibSwgaW5vKTsKLQotCS8qIE9uIFNjaGl6bywgbm8gaW5vZml4dXAgb2NjdXJzLiAgVGhpcyBpcyBiZWNhdXNlIGVhY2gKLQkgKiBJTk8gaGFzIGl0J3Mgb3duIElNQVAgcmVnaXN0ZXIuICBPbiBQc3ljaG8gYW5kIFNhYnJlCi0JICogdGhlcmUgaXMgb25seSBvbmUgSU1BUCByZWdpc3RlciBmb3IgZWFjaCBQQ0kgc2xvdCBldmVuCi0JICogdGhvdWdoIGZvdXIgZGlmZmVyZW50IElOT3MgY2FuIGJlIGdlbmVyYXRlZCBieSBlYWNoCi0JICogUENJIHNsb3QuCi0JICoKLQkgKiBCdXQsIGZvciBKQlVTIHZhcmlhbnRzIChlc3NlbnRpYWxseSwgVG9tYXRpbGxvKSwgd2UgaGF2ZQotCSAqIHRvIGZpeHVwIHRoZSBsb3dlc3QgYml0IG9mIHRoZSBpbnRlcnJ1cHQgZ3JvdXAgbnVtYmVyLgotCSAqLwotCWlnbl9maXh1cCA9IDA7Ci0JaWYgKHBibS0+Y2hpcF90eXBlID09IFBCTV9DSElQX1RZUEVfVE9NQVRJTExPKSB7Ci0JCWlmIChwYm0tPnBvcnRpZCAmIDEpCi0JCQlpZ25fZml4dXAgPSAoMSA8PCA2KTsKLQl9Ci0KLQl2aXJ0X2lycSA9IGJ1aWxkX2lycShpZ25fZml4dXAsIGljbHIsIGltYXApOwotCi0JaWYgKHBkZXYgJiYgcGJtLT5jaGlwX3R5cGUgPT0gUEJNX0NISVBfVFlQRV9UT01BVElMTE8pIHsKLQkJaXJxX2luc3RhbGxfcHJlX2hhbmRsZXIodmlydF9pcnEsCi0JCQkJCXRvbWF0aWxsb193c3luY19oYW5kbGVyLAotCQkJCQkoKHBibS0+Y2hpcF92ZXJzaW9uIDw9IDQpID8KLQkJCQkJICh2b2lkICopIDEgOiAodm9pZCAqKSAwKSwKLQkJCQkJKHZvaWQgKikgcGJtLT5zeW5jX3JlZyk7Ci0JfQotCi0JcmV0dXJuIHZpcnRfaXJxOwotfQotCiAvKiBTQ0hJWk8gZXJyb3IgaGFuZGxpbmcgc3VwcG9ydC4gKi8KIGVudW0gc2NoaXpvX2Vycm9yX3R5cGUgewogCVVFX0VSUiwgQ0VfRVJSLCBQQ0lfRVJSLCBTQUZBUklfRVJSCkBAIC0zNjIsMzQgKzI1Miw2IEBACiAJcmV0dXJuICZwLT5wYm1fQTsKIH0KIAotc3RhdGljIHZvaWQgc2NoaXpvX2NsZWFyX290aGVyX2Vycl9pbnRyKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLCBpbnQgaXJxKQotewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKLQl1bnNpZ25lZCBsb25nIGljbHI7Ci0KLQkvKiBEbyBub3QgY2xlYXIgdGhlIGludGVycnVwdCBmb3IgdGhlIG90aGVyIFBDSSBidXMuCi0JICoKLQkgKiBUaGlzICJBQ0sgYm90aCBQQk0gSVJRcyIgb25seSBuZWVkcyB0byBiZSBwZXJmb3JtZWQKLQkgKiBmb3IgY2hpcC13aWRlIGVycm9yIGludGVycnVwdHMuCi0JICovCi0JaWYgKChpcnEgJiBJTUFQX0lOTykgPT0gU0NISVpPX1BDSUVSUl9BX0lOTyB8fAotCSAgICAoaXJxICYgSU1BUF9JTk8pID09IFNDSElaT19QQ0lFUlJfQl9JTk8pCi0JCXJldHVybjsKLQotCXBibSA9IHBibV9mb3JfaW5vKHAsIGlycSk7Ci0JaWYgKHBibSA9PSAmcC0+cGJtX0EpCi0JCXBibSA9ICZwLT5wYm1fQjsKLQllbHNlCi0JCXBibSA9ICZwLT5wYm1fQTsKLQotCXNjaGl6b19pcnFfYnVpbGQocGJtLCBOVUxMLAotCQkJIChwYm0tPnBvcnRpZCA8PCA2KSB8IChpcnEgJiBJTUFQX0lOTykpOwotCi0JaWNsciA9IHNjaGl6b19pbm9fdG9faWNscihwYm0sCi0JCQkJICAocGJtLT5wb3J0aWQgPDwgNikgfCAoaXJxICYgSU1BUF9JTk8pKTsKLQl1cGFfd3JpdGVsKElDTFJfSURMRSwgaWNscik7Ci19Ci0KICNkZWZpbmUgU0NISVpPX1NUQ19FUlIJMHhiODAwVUwgLyogLS0+IDB4YmEwMCAqLwogI2RlZmluZSBTQ0hJWk9fU1RDX1RBRwkweGJhMDBVTCAvKiAtLT4gMHhiYTgwICovCiAjZGVmaW5lIFNDSElaT19TVENfTElORQkweGJiMDBVTCAvKiAtLT4gMHhiYjgwICovCkBAIC03MjAsOCArNTgyLDYgQEAKIAkvKiBJbnRlcnJvZ2F0ZSBJT01NVSBmb3IgZXJyb3Igc3RhdHVzLiAqLwogCXNjaGl6b19jaGVja19pb21tdV9lcnJvcihwLCBVRV9FUlIpOwogCi0Jc2NoaXpvX2NsZWFyX290aGVyX2Vycl9pbnRyKHAsIGlycSk7Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTgxMSw4ICs2NzEsNiBAQAogCQlwcmludGsoIihub25lKSIpOwogCXByaW50aygiXVxuIik7CiAKLQlzY2hpem9fY2xlYXJfb3RoZXJfZXJyX2ludHIocCwgaXJxKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTAzMyw4ICs4OTEsNiBAQAogCWlmIChlcnJvcl9iaXRzICYgKFNDSElaT19QQ0lBRlNSX1BQRVJSIHwgU0NISVpPX1BDSUFGU1JfU1BFUlIpKQogCQlwY2lfc2Nhbl9mb3JfcGFyaXR5X2Vycm9yKHAsIHBibSwgcGJtLT5wY2lfYnVzKTsKIAotCXNjaGl6b19jbGVhcl9vdGhlcl9lcnJfaW50cihwLCBpcnEpOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xMDkwLDcgKzk0Niw2IEBACiAJCXByaW50aygiUENJJWQ6IFVuZXhwZWN0ZWQgU2FmYXJpL0pCVVMgZXJyb3IgaW50ZXJydXB0LCBlcnJsb2dbJTAxNmx4XVxuIiwKIAkJICAgICAgIHAtPmluZGV4LCBlcnJsb2cpOwogCi0JCXNjaGl6b19jbGVhcl9vdGhlcl9lcnJfaW50cihwLCBpcnEpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0xMDk4LDcgKzk1Myw2IEBACiAJICAgICAgIHAtPmluZGV4KTsKIAlzY2hpem9fY2hlY2tfaW9tbXVfZXJyb3IocCwgU0FGQVJJX0VSUik7CiAKLQlzY2hpem9fY2xlYXJfb3RoZXJfZXJyX2ludHIocCwgaXJxKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTExMzAsNzQgKzk4NCw0NyBAQAogc3RhdGljIHZvaWQgdG9tYXRpbGxvX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwKQogewogCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKLQl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBvZl9kZXZpY2UgKm9wOwogCXU2NCB0bXAsIGVycl9tYXNrLCBlcnJfbm9fbWFzazsKIAotCS8qIEJ1aWxkIElSUXMgYW5kIHJlZ2lzdGVyIGhhbmRsZXJzLiAqLworCS8qIFRvbWF0aWxsbyBJUlEgcHJvcGVydHkgbGF5b3V0IGlzOgorCSAqIDA6IFBDSUVSUgorCSAqIDE6IFVFIEVSUgorCSAqIDI6IENFIEVSUgorCSAqIDM6IFNFUlIKKwkgKiA0OiBQT1dFUiBGQUlMPworCSAqLworCiAJcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1VFX0lOTyk7Ci0JaXJxID0gc2NoaXpvX2lycV9idWlsZChwYm0sIE5VTEwsIChwYm0tPnBvcnRpZCA8PCA2KSB8IFNDSElaT19VRV9JTk8pOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNjaGl6b191ZV9pbnRyLAotCQkJU0FfU0hJUlEsICJUT01BVElMTE8gVUUiLCBwKSA8IDApIHsKLQkJcHJvbV9wcmludGYoIiVzOiBDYW5ub3QgcmVnaXN0ZXIgVUUgaW50ZXJydXB0LlxuIiwKLQkJCSAgICBwYm0tPm5hbWUpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0JdG1wID0gdXBhX3JlYWRsKHNjaGl6b19pbm9fdG9faW1hcChwYm0sIChwYm0tPnBvcnRpZCA8PCA2KSB8IFNDSElaT19VRV9JTk8pKTsKLQl1cGFfd3JpdGVsKHRtcCwgKHBibS0+cGJtX3JlZ3MgKwotCQkJIHNjaGl6b19pbWFwX29mZnNldChTQ0hJWk9fVUVfSU5PKSArIDQpKTsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOworCWlmIChvcCkKKwkJcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHNjaGl6b191ZV9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAiVE9NQVRJTExPX1VFIiwgcCk7CiAKIAlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fQ0VfSU5PKTsKLQlpcnEgPSBzY2hpem9faXJxX2J1aWxkKHBibSwgTlVMTCwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX0NFX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc2NoaXpvX2NlX2ludHIsCi0JCQlTQV9TSElSUSwgIlRPTUFUSUxMTyBDRSIsIHApIDwgMCkgewotCQlwcm9tX3ByaW50ZigiJXM6IENhbm5vdCByZWdpc3RlciBDRSBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHBibS0+bmFtZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQl0bXAgPSB1cGFfcmVhZGwoc2NoaXpvX2lub190b19pbWFwKHBibSwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX0NFX0lOTykpOwotCXVwYV93cml0ZWwodG1wLCAocGJtLT5wYm1fcmVncyArCi0JCQkgc2NoaXpvX2ltYXBfb2Zmc2V0KFNDSElaT19DRV9JTk8pICsgNCkpOworCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPnByb21fbm9kZSk7CisJaWYgKG9wKQorCQlyZXF1ZXN0X2lycShvcC0+aXJxc1syXSwgc2NoaXpvX2NlX2ludHIsIElSUUZfU0hBUkVELAorCQkJICAgICJUT01BVElMTE8gQ0UiLCBwKTsKIAogCXBibSA9IHBibV9mb3JfaW5vKHAsIFNDSElaT19QQ0lFUlJfQV9JTk8pOwotCWlycSA9IHNjaGl6b19pcnFfYnVpbGQocGJtLCBOVUxMLCAoKHBibS0+cG9ydGlkIDw8IDYpIHwKLQkJCQkJICAgU0NISVpPX1BDSUVSUl9BX0lOTykpOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNjaGl6b19wY2llcnJfaW50ciwKLQkJCVNBX1NISVJRLCAiVE9NQVRJTExPIFBDSUVSUiIsIHBibSkgPCAwKSB7Ci0JCXByb21fcHJpbnRmKCIlczogQ2Fubm90IHJlZ2lzdGVyIFBCTSBBIFBjaUVSUiBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHBibS0+bmFtZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQl0bXAgPSB1cGFfcmVhZGwoc2NoaXpvX2lub190b19pbWFwKHBibSwgKChwYm0tPnBvcnRpZCA8PCA2KSB8Ci0JCQkJCQkgU0NISVpPX1BDSUVSUl9BX0lOTykpKTsKLQl1cGFfd3JpdGVsKHRtcCwgKHBibS0+cGJtX3JlZ3MgKwotCQkJIHNjaGl6b19pbWFwX29mZnNldChTQ0hJWk9fUENJRVJSX0FfSU5PKSArIDQpKTsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOworCWlmIChvcCkKKwkJcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgSVJRRl9TSEFSRUQsCisJCQkgICAgIlRPTUFUSUxMTyBQQ0lFUlItQSIsIHBibSk7CisKIAogCXBibSA9IHBibV9mb3JfaW5vKHAsIFNDSElaT19QQ0lFUlJfQl9JTk8pOwotCWlycSA9IHNjaGl6b19pcnFfYnVpbGQocGJtLCBOVUxMLCAoKHBibS0+cG9ydGlkIDw8IDYpIHwKLQkJCQkJICAgIFNDSElaT19QQ0lFUlJfQl9JTk8pKTsKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzY2hpem9fcGNpZXJyX2ludHIsCi0JCQlTQV9TSElSUSwgIlRPTUFUSUxMTyBQQ0lFUlIiLCBwYm0pIDwgMCkgewotCQlwcm9tX3ByaW50ZigiJXM6IENhbm5vdCByZWdpc3RlciBQQk0gQiBQY2lFUlIgaW50ZXJydXB0LlxuIiwKLQkJCSAgICBwYm0tPm5hbWUpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0JdG1wID0gdXBhX3JlYWRsKHNjaGl6b19pbm9fdG9faW1hcChwYm0sICgocGJtLT5wb3J0aWQgPDwgNikgfAotCQkJCQkJIFNDSElaT19QQ0lFUlJfQl9JTk8pKSk7Ci0JdXBhX3dyaXRlbCh0bXAsIChwYm0tPnBibV9yZWdzICsKLQkJCSBzY2hpem9faW1hcF9vZmZzZXQoU0NISVpPX1BDSUVSUl9CX0lOTykgKyA0KSk7CisJb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+cHJvbV9ub2RlKTsKKwlpZiAob3ApCisJCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBzY2hpem9fcGNpZXJyX2ludHIsIElSUUZfU0hBUkVELAorCQkJICAgICJUT01BVElMTE8gUENJRVJSLUIiLCBwYm0pOwogCiAJcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1NFUlJfSU5PKTsKLQlpcnEgPSBzY2hpem9faXJxX2J1aWxkKHBibSwgTlVMTCwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX1NFUlJfSU5PKTsKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzY2hpem9fc2FmYXJpZXJyX2ludHIsCi0JCQlTQV9TSElSUSwgIlRPTUFUSUxMTyBTRVJSIiwgcCkgPCAwKSB7Ci0JCXByb21fcHJpbnRmKCIlczogQ2Fubm90IHJlZ2lzdGVyIFNhZmFyaUVSUiBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHBibS0+bmFtZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQl0bXAgPSB1cGFfcmVhZGwoc2NoaXpvX2lub190b19pbWFwKHBibSwgKChwYm0tPnBvcnRpZCA8PCA2KSB8Ci0JCQkJCQkgU0NISVpPX1NFUlJfSU5PKSkpOwotCXVwYV93cml0ZWwodG1wLCAocGJtLT5wYm1fcmVncyArCi0JCQkgc2NoaXpvX2ltYXBfb2Zmc2V0KFNDSElaT19TRVJSX0lOTykgKyA0KSk7CisJb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+cHJvbV9ub2RlKTsKKwlpZiAob3ApCisJCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzNdLCBzY2hpem9fc2FmYXJpZXJyX2ludHIsIElSUUZfU0hBUkVELAorCQkJICAgICJUT01BVElMTE8gU0VSUiIsIHApOwogCiAJLyogRW5hYmxlIFVFIGFuZCBDRSBpbnRlcnJ1cHRzIGZvciBjb250cm9sbGVyLiAqLwogCXNjaGl6b193cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fRUNDX0NUUkwsCkBAIC0xMjY1LDY0ICsxMDkyLDQ3IEBACiBzdGF0aWMgdm9pZCBzY2hpem9fcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnApCiB7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwotCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IG9mX2RldmljZSAqb3A7CiAJdTY0IHRtcCwgZXJyX21hc2ssIGVycl9ub19tYXNrOwogCi0JLyogQnVpbGQgSVJRcyBhbmQgcmVnaXN0ZXIgaGFuZGxlcnMuICovCisJLyogU2NoaXpvIElSUSBwcm9wZXJ0eSBsYXlvdXQgaXM6CisJICogMDogUENJRVJSCisJICogMTogVUUgRVJSCisJICogMjogQ0UgRVJSCisJICogMzogU0VSUgorCSAqIDQ6IFBPV0VSIEZBSUw/CisJICovCisKIAlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fVUVfSU5PKTsKLQlpcnEgPSBzY2hpem9faXJxX2J1aWxkKHBibSwgTlVMTCwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX1VFX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc2NoaXpvX3VlX2ludHIsCi0JCQlTQV9TSElSUSwgIlNDSElaTyBVRSIsIHApIDwgMCkgewotCQlwcm9tX3ByaW50ZigiJXM6IENhbm5vdCByZWdpc3RlciBVRSBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHBibS0+bmFtZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQl0bXAgPSB1cGFfcmVhZGwoc2NoaXpvX2lub190b19pbWFwKHBibSwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX1VFX0lOTykpOwotCXVwYV93cml0ZWwodG1wLCAocGJtLT5wYm1fcmVncyArIHNjaGl6b19pbWFwX29mZnNldChTQ0hJWk9fVUVfSU5PKSArIDQpKTsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOworCWlmIChvcCkKKwkJcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHNjaGl6b191ZV9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAiU0NISVpPX1VFIiwgcCk7CiAKIAlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fQ0VfSU5PKTsKLQlpcnEgPSBzY2hpem9faXJxX2J1aWxkKHBibSwgTlVMTCwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX0NFX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc2NoaXpvX2NlX2ludHIsCi0JCQlTQV9TSElSUSwgIlNDSElaTyBDRSIsIHApIDwgMCkgewotCQlwcm9tX3ByaW50ZigiJXM6IENhbm5vdCByZWdpc3RlciBDRSBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHBibS0+bmFtZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQl0bXAgPSB1cGFfcmVhZGwoc2NoaXpvX2lub190b19pbWFwKHBibSwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX0NFX0lOTykpOwotCXVwYV93cml0ZWwodG1wLCAocGJtLT5wYm1fcmVncyArIHNjaGl6b19pbWFwX29mZnNldChTQ0hJWk9fQ0VfSU5PKSArIDQpKTsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOworCWlmIChvcCkKKwkJcmVxdWVzdF9pcnEob3AtPmlycXNbMl0sIHNjaGl6b19jZV9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAiU0NISVpPIENFIiwgcCk7CiAKIAlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fUENJRVJSX0FfSU5PKTsKLQlpcnEgPSBzY2hpem9faXJxX2J1aWxkKHBibSwgTlVMTCwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX1BDSUVSUl9BX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc2NoaXpvX3BjaWVycl9pbnRyLAotCQkJU0FfU0hJUlEsICJTQ0hJWk8gUENJRVJSIiwgcGJtKSA8IDApIHsKLQkJcHJvbV9wcmludGYoIiVzOiBDYW5ub3QgcmVnaXN0ZXIgUEJNIEEgUGNpRVJSIGludGVycnVwdC5cbiIsCi0JCQkgICAgcGJtLT5uYW1lKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCXRtcCA9IHVwYV9yZWFkbChzY2hpem9faW5vX3RvX2ltYXAocGJtLCAocGJtLT5wb3J0aWQgPDwgNikgfCBTQ0hJWk9fUENJRVJSX0FfSU5PKSk7Ci0JdXBhX3dyaXRlbCh0bXAsIChwYm0tPnBibV9yZWdzICsgc2NoaXpvX2ltYXBfb2Zmc2V0KFNDSElaT19QQ0lFUlJfQV9JTk8pICsgNCkpOworCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPnByb21fbm9kZSk7CisJaWYgKG9wKQorCQlyZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgc2NoaXpvX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAiU0NISVpPIFBDSUVSUi1BIiwgcGJtKTsKKwogCiAJcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1BDSUVSUl9CX0lOTyk7Ci0JaXJxID0gc2NoaXpvX2lycV9idWlsZChwYm0sIE5VTEwsIChwYm0tPnBvcnRpZCA8PCA2KSB8IFNDSElaT19QQ0lFUlJfQl9JTk8pOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNjaGl6b19wY2llcnJfaW50ciwKLQkJCVNBX1NISVJRLCAiU0NISVpPIFBDSUVSUiIsICZwLT5wYm1fQikgPCAwKSB7Ci0JCXByb21fcHJpbnRmKCIlczogQ2Fubm90IHJlZ2lzdGVyIFBCTSBCIFBjaUVSUiBpbnRlcnJ1cHQuXG4iLAotCQkJICAgIHBibS0+bmFtZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQl0bXAgPSB1cGFfcmVhZGwoc2NoaXpvX2lub190b19pbWFwKHBibSwgKHBibS0+cG9ydGlkIDw8IDYpIHwgU0NISVpPX1BDSUVSUl9CX0lOTykpOwotCXVwYV93cml0ZWwodG1wLCAocGJtLT5wYm1fcmVncyArIHNjaGl6b19pbWFwX29mZnNldChTQ0hJWk9fUENJRVJSX0JfSU5PKSArIDQpKTsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOworCWlmIChvcCkKKwkJcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgSVJRRl9TSEFSRUQsCisJCQkgICAgIlNDSElaTyBQQ0lFUlItQiIsIHBibSk7CiAKIAlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fU0VSUl9JTk8pOwotCWlycSA9IHNjaGl6b19pcnFfYnVpbGQocGJtLCBOVUxMLCAocGJtLT5wb3J0aWQgPDwgNikgfCBTQ0hJWk9fU0VSUl9JTk8pOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNjaGl6b19zYWZhcmllcnJfaW50ciwKLQkJCVNBX1NISVJRLCAiU0NISVpPIFNFUlIiLCBwKSA8IDApIHsKLQkJcHJvbV9wcmludGYoIiVzOiBDYW5ub3QgcmVnaXN0ZXIgU2FmYXJpRVJSIGludGVycnVwdC5cbiIsCi0JCQkgICAgcGJtLT5uYW1lKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCXRtcCA9IHVwYV9yZWFkbChzY2hpem9faW5vX3RvX2ltYXAocGJtLCAocGJtLT5wb3J0aWQgPDwgNikgfCBTQ0hJWk9fU0VSUl9JTk8pKTsKLQl1cGFfd3JpdGVsKHRtcCwgKHBibS0+cGJtX3JlZ3MgKyBzY2hpem9faW1hcF9vZmZzZXQoU0NISVpPX1NFUlJfSU5PKSArIDQpKTsKKwlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOworCWlmIChvcCkKKwkJcmVxdWVzdF9pcnEob3AtPmlycXNbM10sIHNjaGl6b19zYWZhcmllcnJfaW50ciwgSVJRRl9TSEFSRUQsCisJCQkgICAgIlNDSElaTyBTRVJSIiwgcCk7CiAKIAkvKiBFbmFibGUgVUUgYW5kIENFIGludGVycnVwdHMgZm9yIGNvbnRyb2xsZXIuICovCiAJc2NoaXpvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19FQ0NfQ1RSTCwKQEAgLTIwMjIsNyArMTgzMiw2IEBACiAJcC0+c2Nhbl9idXMgPSAoY2hpcF90eXBlID09IFBCTV9DSElQX1RZUEVfVE9NQVRJTExPID8KIAkJICAgICAgIHRvbWF0aWxsb19zY2FuX2J1cyA6CiAJCSAgICAgICBzY2hpem9fc2Nhbl9idXMpOwotCXAtPmlycV9idWlsZCA9IHNjaGl6b19pcnFfYnVpbGQ7CiAJcC0+YmFzZV9hZGRyZXNzX3VwZGF0ZSA9IHNjaGl6b19iYXNlX2FkZHJlc3NfdXBkYXRlOwogCXAtPnJlc291cmNlX2FkanVzdCA9IHNjaGl6b19yZXNvdXJjZV9hZGp1c3Q7CiAJcC0+cGNpX29wcyA9ICZzY2hpem9fb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKaW5kZXggYjY5ZTIyNy4uMDNhZDRjMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCkBAIC04NDMsMTUgKzg0Myw2IEBACiAJLyogWFhYIHJlZ2lzdGVyIGVycm9yIGludGVycnVwdCBoYW5kbGVycyBYWFggKi8KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBwY2lfc3VuNHZfaXJxX2J1aWxkKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCQkJc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCXVuc2lnbmVkIGludCBkZXZpbm8pCi17Ci0JdTMyIGRldmhhbmRsZSA9IHBibS0+ZGV2aGFuZGxlOwotCi0JcmV0dXJuIHN1bjR2X2J1aWxkX2lycShkZXZoYW5kbGUsIGRldmlubyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHBjaV9zdW40dl9iYXNlX2FkZHJlc3NfdXBkYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzb3VyY2UpCiB7CiAJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcCA9IHBkZXYtPnN5c2RhdGE7CkBAIC0xMjAwLDcgKzExOTEsNiBAQAogCXAtPnBibXNfc2FtZV9kb21haW4gPSAwOwogCiAJcC0+c2Nhbl9idXMgPSBwY2lfc3VuNHZfc2Nhbl9idXM7Ci0JcC0+aXJxX2J1aWxkID0gcGNpX3N1bjR2X2lycV9idWlsZDsKIAlwLT5iYXNlX2FkZHJlc3NfdXBkYXRlID0gcGNpX3N1bjR2X2Jhc2VfYWRkcmVzc191cGRhdGU7CiAJcC0+cmVzb3VyY2VfYWRqdXN0ID0gcGNpX3N1bjR2X3Jlc291cmNlX2FkanVzdDsKIAlwLT5wY2lfb3BzID0gJnBjaV9zdW40dl9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKaW5kZXggOTQ5NmM3Ny4uZTU1NDY2YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwpAQCAtNiw3ICs2LDYgQEAKIAogI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xNyw5ICsxNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2VidXMuaD4KLSNpbmNsdWRlIDxhc20vaXNhLmg+CiAjaW5jbHVkZSA8YXNtL2F1eGlvLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KIApAQCAtMzAsNiArMzAsNyBAQAogaW50IHNjb25zX3B3cm9mZiA9IDE7IAogCiAjaWZkZWYgQ09ORklHX1BDSQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogc3RhdGljIHZvaWQgX19pb21lbSAqcG93ZXJfcmVnOwogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocG93ZXJkX3dhaXQpOwpAQCAtMTE1LDI3ICsxMTYsMzMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHBvd2VyX3Byb2JlX2NvbW1vbihzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGludCBfX2RldmluaXQgcG93ZXJfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewotCXBvd2VyX3JlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgMHg0KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZvcC0+cmVzb3VyY2VbMF07CisJdW5zaWduZWQgaW50IGlycT0gb3AtPmlycXNbMF07CiAKLQlwcmludGsoInBvd2VyOiBDb250cm9sIHJlZyBhdCAlcCAuLi4gIiwgcG93ZXJfcmVnKTsKKwlwb3dlcl9yZWcgPSBvZl9pb3JlbWFwKHJlcywgMCwgMHg0LCAicG93ZXIiKTsKKworCXByaW50aygiJXM6IENvbnRyb2wgcmVnIGF0ICVseCAuLi4gIiwKKwkgICAgICAgb3AtPm5vZGUtPm5hbWUsIHJlcy0+c3RhcnQpOwogCiAJcG93ZXJvZmZfbWV0aG9kID0gbWFjaGluZV9oYWx0OyAgLyogYWJsZSB0byB1c2UgdGhlIHN0YW5kYXJkIGhhbHQgKi8KIAotCWlmIChoYXNfYnV0dG9uX2ludGVycnVwdChpcnEsIGRldi0+bm9kZSkpIHsKKwlpZiAoaGFzX2J1dHRvbl9pbnRlcnJ1cHQoaXJxLCBvcC0+bm9kZSkpIHsKIAkJaWYgKGtlcm5lbF90aHJlYWQocG93ZXJkLCBOVUxMLCBDTE9ORV9GUykgPCAwKSB7CiAJCQlwcmludGsoIkZhaWxlZCB0byBzdGFydCBwb3dlciBkYWVtb24uXG4iKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQl9CiAJCXByaW50aygicG93ZXJkIHJ1bm5pbmcuXG4iKTsKIAogCQlpZiAocmVxdWVzdF9pcnEoaXJxLAotCQkJCXBvd2VyX2hhbmRsZXIsIFNBX1NISVJRLCAicG93ZXIiLCBOVUxMKSA8IDApCisJCQkJcG93ZXJfaGFuZGxlciwgMCwgInBvd2VyIiwgTlVMTCkgPCAwKQogCQkJcHJpbnRrKCJwb3dlcjogRXJyb3IsIGNhbm5vdCByZWdpc3RlciBJUlEgaGFuZGxlci5cbiIpOwogCX0gZWxzZSB7CiAJCXByaW50aygibm90IHVzaW5nIHBvd2VyZC5cbiIpOwogCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwb3dlcl9tYXRjaFtdID0gewpAQCAtMTQ1LDQ0ICsxNTIsMTUgQEAKIAl7fSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGVidXNfcG93ZXJfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYgPSB0b19lYnVzX2RldmljZSgmZGV2LT5kZXYpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmVkZXYtPnJlc291cmNlWzBdOwotCXVuc2lnbmVkIGludCBpcnEgPSBlZGV2LT5pcnFzWzBdOwotCi0JcG93ZXJfcHJvYmVfY29tbW9uKGRldiwgcmVzLGlycSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZWJ1c19wb3dlcl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBwb3dlcl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInBvd2VyIiwKIAkubWF0Y2hfdGFibGUJPSBwb3dlcl9tYXRjaCwKLQkucHJvYmUJCT0gZWJ1c19wb3dlcl9wcm9iZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGlzYV9wb3dlcl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICppZGV2ID0gdG9faXNhX2RldmljZSgmZGV2LT5kZXYpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmlkZXYtPnJlc291cmNlOwotCXVuc2lnbmVkIGludCBpcnEgPSBpZGV2LT5pcnE7Ci0KLQlwb3dlcl9wcm9iZV9jb21tb24oZGV2LCByZXMsaXJxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBpc2FfcG93ZXJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJwb3dlciIsCi0JLm1hdGNoX3RhYmxlCT0gcG93ZXJfbWF0Y2gsCi0JLnByb2JlCQk9IGlzYV9wb3dlcl9wcm9iZSwKKwkucHJvYmUJCT0gcG93ZXJfcHJvYmUsCiB9OwogCiB2b2lkIF9faW5pdCBwb3dlcl9pbml0KHZvaWQpCiB7Ci0Jb2ZfcmVnaXN0ZXJfZHJpdmVyKCZlYnVzX3Bvd2VyX2RyaXZlciwgJmVidXNfYnVzX3R5cGUpOwotCW9mX3JlZ2lzdGVyX2RyaXZlcigmaXNhX3Bvd2VyX2RyaXZlciwgJmlzYV9idXNfdHlwZSk7CisJb2ZfcmVnaXN0ZXJfZHJpdmVyKCZwb3dlcl9kcml2ZXIsICZvZl9idXNfdHlwZSk7CiAJcmV0dXJuOwogfQogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMWM3Y2EyZi4uN2Q3NWNkNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEyLDcgKzEyLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjYsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CiAjaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9tLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYwppbmRleCA4ZTg3ZTdlLi5mYTQ4NGQ0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYwpAQCAtMTUsNiArMTUsNyBAQAogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjMsNyArMjQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL3VwYS5oPgogCiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsKIApAQCAtMTkwLDYgKzE5NSwzNiBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9nZXRpbnRwcm9wX2RlZmF1bHQpOwogCitpbnQgb2Zfbl9hZGRyX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50KiBpcDsKKwlkbyB7CisJCWlmIChucC0+cGFyZW50KQorCQkJbnAgPSBucC0+cGFyZW50OworCQlpcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7CisJCWlmIChpcCAhPSBOVUxMKQorCQkJcmV0dXJuICppcDsKKwl9IHdoaWxlIChucC0+cGFyZW50KTsKKwkvKiBObyAjYWRkcmVzcy1jZWxscyBwcm9wZXJ0eSBmb3IgdGhlIHJvb3Qgbm9kZSwgZGVmYXVsdCB0byAyICovCisJcmV0dXJuIDI7Cit9CitFWFBPUlRfU1lNQk9MKG9mX25fYWRkcl9jZWxscyk7CisKK2ludCBvZl9uX3NpemVfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQqIGlwOworCWRvIHsKKwkJaWYgKG5wLT5wYXJlbnQpCisJCQlucCA9IG5wLT5wYXJlbnQ7CisJCWlwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKKwkJaWYgKGlwICE9IE5VTEwpCisJCQlyZXR1cm4gKmlwOworCX0gd2hpbGUgKG5wLT5wYXJlbnQpOworCS8qIE5vICNzaXplLWNlbGxzIHByb3BlcnR5IGZvciB0aGUgcm9vdCBub2RlLCBkZWZhdWx0IHRvIDEgKi8KKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0wob2Zfbl9zaXplX2NlbGxzKTsKKwogaW50IG9mX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWwsIGludCBsZW4pCiB7CiAJc3RydWN0IHByb3BlcnR5ICoqcHJldnA7CkBAIC0yNTMsNiArMjg4LDc3NyBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJCisvKiBQU1lDSE8gaW50ZXJydXB0IG1hcHBpbmcgc3VwcG9ydC4gKi8KKyNkZWZpbmUgUFNZQ0hPX0lNQVBfQV9TTE9UMAkweDBjMDBVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9CX1NMT1QwCTB4MGMyMFVMCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwc3ljaG9fcGNpc2xvdF9pbWFwX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKK3sKKwl1bnNpZ25lZCBpbnQgYnVzID0gIChpbm8gJiAweDEwKSA+PiA0OworCXVuc2lnbmVkIGludCBzbG90ID0gKGlubyAmIDB4MGMpID4+IDI7CisKKwlpZiAoYnVzID09IDApCisJCXJldHVybiBQU1lDSE9fSU1BUF9BX1NMT1QwICsgKHNsb3QgKiA4KTsKKwllbHNlCisJCXJldHVybiBQU1lDSE9fSU1BUF9CX1NMT1QwICsgKHNsb3QgKiA4KTsKK30KKworI2RlZmluZSBQU1lDSE9fSU1BUF9TQ1NJCTB4MTAwMFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX0VUSAkJMHgxMDA4VUwKKyNkZWZpbmUgUFNZQ0hPX0lNQVBfQlBQCQkweDEwMTBVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9BVV9SRUMJMHgxMDE4VUwKKyNkZWZpbmUgUFNZQ0hPX0lNQVBfQVVfUExBWQkweDEwMjBVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9QRkFJTAkweDEwMjhVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9LTVMJCTB4MTAzMFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX0ZMUFkJMHgxMDM4VUwKKyNkZWZpbmUgUFNZQ0hPX0lNQVBfU0hXCQkweDEwNDBVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9LQkQJCTB4MTA0OFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX01TCQkweDEwNTBVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9TRVIJCTB4MTA1OFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX1RJTTAJMHgxMDYwVUwKKyNkZWZpbmUgUFNZQ0hPX0lNQVBfVElNMQkweDEwNjhVTAorI2RlZmluZSBQU1lDSE9fSU1BUF9VRQkJMHgxMDcwVUwKKyNkZWZpbmUgUFNZQ0hPX0lNQVBfQ0UJCTB4MTA3OFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX0FfRVJSCTB4MTA4MFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX0JfRVJSCTB4MTA4OFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX1BNR01UCTB4MTA5MFVMCisjZGVmaW5lIFBTWUNIT19JTUFQX0dGWAkJMHgxMDk4VUwKKyNkZWZpbmUgUFNZQ0hPX0lNQVBfRVVQQQkweDEwYTBVTAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3BzeWNob19vbmJvYXJkX2ltYXBfb2ZmW10gPSB7CisvKjB4MjAqLwlQU1lDSE9fSU1BUF9TQ1NJLAorLyoweDIxKi8JUFNZQ0hPX0lNQVBfRVRILAorLyoweDIyKi8JUFNZQ0hPX0lNQVBfQlBQLAorLyoweDIzKi8JUFNZQ0hPX0lNQVBfQVVfUkVDLAorLyoweDI0Ki8JUFNZQ0hPX0lNQVBfQVVfUExBWSwKKy8qMHgyNSovCVBTWUNIT19JTUFQX1BGQUlMLAorLyoweDI2Ki8JUFNZQ0hPX0lNQVBfS01TLAorLyoweDI3Ki8JUFNZQ0hPX0lNQVBfRkxQWSwKKy8qMHgyOCovCVBTWUNIT19JTUFQX1NIVywKKy8qMHgyOSovCVBTWUNIT19JTUFQX0tCRCwKKy8qMHgyYSovCVBTWUNIT19JTUFQX01TLAorLyoweDJiKi8JUFNZQ0hPX0lNQVBfU0VSLAorLyoweDJjKi8JUFNZQ0hPX0lNQVBfVElNMCwKKy8qMHgyZCovCVBTWUNIT19JTUFQX1RJTTEsCisvKjB4MmUqLwlQU1lDSE9fSU1BUF9VRSwKKy8qMHgyZiovCVBTWUNIT19JTUFQX0NFLAorLyoweDMwKi8JUFNZQ0hPX0lNQVBfQV9FUlIsCisvKjB4MzEqLwlQU1lDSE9fSU1BUF9CX0VSUiwKKy8qMHgzMiovCVBTWUNIT19JTUFQX1BNR01UCit9OworI2RlZmluZSBQU1lDSE9fT05CT0FSRF9JUlFfQkFTRQkJMHgyMAorI2RlZmluZSBQU1lDSE9fT05CT0FSRF9JUlFfTEFTVAkJMHgzMgorI2RlZmluZSBwc3ljaG9fb25ib2FyZF9pbWFwX29mZnNldChfX2lubykgXAorCV9fcHN5Y2hvX29uYm9hcmRfaW1hcF9vZmZbKF9faW5vKSAtIFBTWUNIT19PTkJPQVJEX0lSUV9CQVNFXQorCisjZGVmaW5lIFBTWUNIT19JQ0xSX0FfU0xPVDAJMHgxNDAwVUwKKyNkZWZpbmUgUFNZQ0hPX0lDTFJfU0NTSQkweDE4MDBVTAorCisjZGVmaW5lIHBzeWNob19pY2xyX29mZnNldChpbm8pCQkJCQkgICAgICBcCisJKChpbm8gJiAweDIwKSA/IChQU1lDSE9fSUNMUl9TQ1NJICsgKCgoaW5vKSAmIDB4MWYpIDw8IDMpKSA6ICBcCisJCQkoUFNZQ0hPX0lDTFJfQV9TTE9UMCArICgoKGlubykgJiAweDFmKTw8MykpKQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBzeWNob19pcnFfYnVpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpbm8sCisJCQkJICAgICB2b2lkICpfZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xsZXJfcmVncyA9ICh1bnNpZ25lZCBsb25nKSBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJdW5zaWduZWQgbG9uZyBpbWFwX29mZiwgaWNscl9vZmY7CisJaW50IGlub2ZpeHVwID0gMDsKKworCWlubyAmPSAweDNmOworCWlmIChpbm8gPCBQU1lDSE9fT05CT0FSRF9JUlFfQkFTRSkgeworCQkvKiBQQ0kgc2xvdCAqLworCQlpbWFwX29mZiA9IHBzeWNob19wY2lzbG90X2ltYXBfb2Zmc2V0KGlubyk7CisJfSBlbHNlIHsKKwkJLyogT25ib2FyZCBkZXZpY2UgKi8KKwkJaWYgKGlubyA+IFBTWUNIT19PTkJPQVJEX0lSUV9MQVNUKSB7CisJCQlwcm9tX3ByaW50ZigicHN5Y2hvX2lycV9idWlsZDogV2Fja3kgSU5PIFsleF1cbiIsIGlubyk7CisJCQlwcm9tX2hhbHQoKTsKKwkJfQorCQlpbWFwX29mZiA9IHBzeWNob19vbmJvYXJkX2ltYXBfb2Zmc2V0KGlubyk7CisJfQorCisJLyogTm93IGJ1aWxkIHRoZSBJUlEgYnVja2V0LiAqLworCWltYXAgPSBjb250cm9sbGVyX3JlZ3MgKyBpbWFwX29mZjsKKwlpbWFwICs9IDQ7CisKKwlpY2xyX29mZiA9IHBzeWNob19pY2xyX29mZnNldChpbm8pOworCWljbHIgPSBjb250cm9sbGVyX3JlZ3MgKyBpY2xyX29mZjsKKwlpY2xyICs9IDQ7CisKKwlpZiAoKGlubyAmIDB4MjApID09IDApCisJCWlub2ZpeHVwID0gaW5vICYgMHgwMzsKKworCXJldHVybiBidWlsZF9pcnEoaW5vZml4dXAsIGljbHIsIGltYXApOworfQorCitzdGF0aWMgdm9pZCBwc3ljaG9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKKworCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKKwlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBwc3ljaG9faXJxX2J1aWxkOworCisJcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOworCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSAodm9pZCAqKSByZWdzWzJdLnBoeXNfYWRkcjsKK30KKworI2RlZmluZSBzYWJyZV9yZWFkKF9fcmVnKSBcCisoewl1NjQgX19yZXQ7IFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YSBbJTFdICUyLCAlMCIgXAorCQkJICAgICA6ICI9ciIgKF9fcmV0KSBcCisJCQkgICAgIDogInIiIChfX3JlZyksICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpIFwKKwkJCSAgICAgOiAibWVtb3J5Iik7IFwKKwlfX3JldDsgXAorfSkKKworc3RydWN0IHNhYnJlX2lycV9kYXRhIHsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xsZXJfcmVnczsKKwl1bnNpZ25lZCBpbnQgcGNpX2ZpcnN0X2J1c25vOworfTsKKyNkZWZpbmUgU0FCUkVfQ09ORklHU1BBQ0UJMHgwMDEwMDAwMDBVTAorI2RlZmluZSBTQUJSRV9XUlNZTkMJCTB4MWMyMFVMCisKKyNkZWZpbmUgU0FCUkVfQ09ORklHX0JBU0UoQ09ORklHX1NQQUNFKQlcCisJKENPTkZJR19TUEFDRSB8ICgxVUwgPDwgMjQpKQorI2RlZmluZSBTQUJSRV9DT05GSUdfRU5DT0RFKEJVUywgREVWRk4sIFJFRykJXAorCSgoKHVuc2lnbmVkIGxvbmcpKEJVUykgICA8PCAxNikgfAlcCisJICgodW5zaWduZWQgbG9uZykoREVWRk4pIDw8IDgpICB8CVwKKwkgKCh1bnNpZ25lZCBsb25nKShSRUcpKSkKKworLyogV2hlbiBhIGRldmljZSBsaXZlcyBiZWhpbmQgYSBicmlkZ2UgZGVlcGVyIGluIHRoZSBQQ0kgYnVzIHRvcG9sb2d5CisgKiB0aGFuIEFQQiwgYSBzcGVjaWFsIHNlcXVlbmNlIG11c3QgcnVuIHRvIG1ha2Ugc3VyZSBhbGwgcGVuZGluZyBETUEKKyAqIHRyYW5zZmVycyBhdCB0aGUgdGltZSBvZiBJUlEgZGVsaXZlcnkgYXJlIHZpc2libGUgaW4gdGhlIGNvaGVyZW5jeQorICogZG9tYWluIGJ5IHRoZSBjcHUuICBUaGlzIHNlcXVlbmNlIGlzIHRvIHBlcmZvcm0gYSByZWFkIG9uIHRoZSBmYXIKKyAqIHNpZGUgb2YgdGhlIG5vbi1BUEIgYnJpZGdlLCB0aGVuIHBlcmZvcm0gYSByZWFkIG9mIFNhYnJlJ3MgRE1BCisgKiB3cml0ZS1zeW5jIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBzYWJyZV93c3luY19oYW5kbGVyKHVuc2lnbmVkIGludCBpbm8sIHZvaWQgKl9hcmcxLCB2b2lkICpfYXJnMikKK3sKKwl1bnNpZ25lZCBpbnQgcGh5c19oaSA9ICh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBsb25nKSBfYXJnMTsKKwlzdHJ1Y3Qgc2FicmVfaXJxX2RhdGEgKmlycV9kYXRhID0gX2FyZzI7CisJdW5zaWduZWQgbG9uZyBjb250cm9sbGVyX3JlZ3MgPSBpcnFfZGF0YS0+Y29udHJvbGxlcl9yZWdzOworCXVuc2lnbmVkIGxvbmcgc3luY19yZWcgPSBjb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9XUlNZTkM7CisJdW5zaWduZWQgbG9uZyBjb25maWdfc3BhY2UgPSBjb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9DT05GSUdTUEFDRTsKKwl1bnNpZ25lZCBpbnQgYnVzLCBkZXZmbjsKKwl1MTYgX3VudXNlZDsKKworCWNvbmZpZ19zcGFjZSA9IFNBQlJFX0NPTkZJR19CQVNFKGNvbmZpZ19zcGFjZSk7CisKKwlidXMgPSAocGh5c19oaSA+PiAxNikgJiAweGZmOworCWRldmZuID0gKHBoeXNfaGkgPj4gOCkgJiAweGZmOworCisJY29uZmlnX3NwYWNlIHw9IFNBQlJFX0NPTkZJR19FTkNPREUoYnVzLCBkZXZmbiwgMHgwMCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWVtYmFyICNTeW5jXG5cdCIKKwkJCSAgICAgImxkdWhhIFslMV0gJTIsICUwXG5cdCIKKwkJCSAgICAgIm1lbWJhciAjU3luYyIKKwkJCSAgICAgOiAiPXIiIChfdW51c2VkKQorCQkJICAgICA6ICJyIiAoKHUxNiAqKSBjb25maWdfc3BhY2UpLAorCQkJICAgICAgICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0VfTCkKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwlzYWJyZV9yZWFkKHN5bmNfcmVnKTsKK30KKworI2RlZmluZSBTQUJSRV9JTUFQX0FfU0xPVDAJMHgwYzAwVUwKKyNkZWZpbmUgU0FCUkVfSU1BUF9CX1NMT1QwCTB4MGMyMFVMCisjZGVmaW5lIFNBQlJFX0lNQVBfU0NTSQkJMHgxMDAwVUwKKyNkZWZpbmUgU0FCUkVfSU1BUF9FVEgJCTB4MTAwOFVMCisjZGVmaW5lIFNBQlJFX0lNQVBfQlBQCQkweDEwMTBVTAorI2RlZmluZSBTQUJSRV9JTUFQX0FVX1JFQwkweDEwMThVTAorI2RlZmluZSBTQUJSRV9JTUFQX0FVX1BMQVkJMHgxMDIwVUwKKyNkZWZpbmUgU0FCUkVfSU1BUF9QRkFJTAkweDEwMjhVTAorI2RlZmluZSBTQUJSRV9JTUFQX0tNUwkJMHgxMDMwVUwKKyNkZWZpbmUgU0FCUkVfSU1BUF9GTFBZCQkweDEwMzhVTAorI2RlZmluZSBTQUJSRV9JTUFQX1NIVwkJMHgxMDQwVUwKKyNkZWZpbmUgU0FCUkVfSU1BUF9LQkQJCTB4MTA0OFVMCisjZGVmaW5lIFNBQlJFX0lNQVBfTVMJCTB4MTA1MFVMCisjZGVmaW5lIFNBQlJFX0lNQVBfU0VSCQkweDEwNThVTAorI2RlZmluZSBTQUJSRV9JTUFQX1VFCQkweDEwNzBVTAorI2RlZmluZSBTQUJSRV9JTUFQX0NFCQkweDEwNzhVTAorI2RlZmluZSBTQUJSRV9JTUFQX1BDSUVSUgkweDEwODBVTAorI2RlZmluZSBTQUJSRV9JTUFQX0dGWAkJMHgxMDk4VUwKKyNkZWZpbmUgU0FCUkVfSU1BUF9FVVBBCQkweDEwYTBVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0FfU0xPVDAJMHgxNDAwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9CX1NMT1QwCTB4MTQ4MFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfU0NTSQkJMHgxODAwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9FVEgJCTB4MTgwOFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfQlBQCQkweDE4MTBVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0FVX1JFQwkweDE4MThVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0FVX1BMQVkJMHgxODIwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9QRkFJTAkweDE4MjhVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0tNUwkJMHgxODMwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9GTFBZCQkweDE4MzhVTAorI2RlZmluZSBTQUJSRV9JQ0xSX1NIVwkJMHgxODQwVUwKKyNkZWZpbmUgU0FCUkVfSUNMUl9LQkQJCTB4MTg0OFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfTVMJCTB4MTg1MFVMCisjZGVmaW5lIFNBQlJFX0lDTFJfU0VSCQkweDE4NThVTAorI2RlZmluZSBTQUJSRV9JQ0xSX1VFCQkweDE4NzBVTAorI2RlZmluZSBTQUJSRV9JQ0xSX0NFCQkweDE4NzhVTAorI2RlZmluZSBTQUJSRV9JQ0xSX1BDSUVSUgkweDE4ODBVTAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYWJyZV9wY2lzbG90X2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXVuc2lnbmVkIGludCBidXMgPSAgKGlubyAmIDB4MTApID4+IDQ7CisJdW5zaWduZWQgaW50IHNsb3QgPSAoaW5vICYgMHgwYykgPj4gMjsKKworCWlmIChidXMgPT0gMCkKKwkJcmV0dXJuIFNBQlJFX0lNQVBfQV9TTE9UMCArIChzbG90ICogOCk7CisJZWxzZQorCQlyZXR1cm4gU0FCUkVfSU1BUF9CX1NMT1QwICsgKHNsb3QgKiA4KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19zYWJyZV9vbmJvYXJkX2ltYXBfb2ZmW10gPSB7CisvKjB4MjAqLwlTQUJSRV9JTUFQX1NDU0ksCisvKjB4MjEqLwlTQUJSRV9JTUFQX0VUSCwKKy8qMHgyMiovCVNBQlJFX0lNQVBfQlBQLAorLyoweDIzKi8JU0FCUkVfSU1BUF9BVV9SRUMsCisvKjB4MjQqLwlTQUJSRV9JTUFQX0FVX1BMQVksCisvKjB4MjUqLwlTQUJSRV9JTUFQX1BGQUlMLAorLyoweDI2Ki8JU0FCUkVfSU1BUF9LTVMsCisvKjB4MjcqLwlTQUJSRV9JTUFQX0ZMUFksCisvKjB4MjgqLwlTQUJSRV9JTUFQX1NIVywKKy8qMHgyOSovCVNBQlJFX0lNQVBfS0JELAorLyoweDJhKi8JU0FCUkVfSU1BUF9NUywKKy8qMHgyYiovCVNBQlJFX0lNQVBfU0VSLAorLyoweDJjKi8JMCAvKiByZXNlcnZlZCAqLywKKy8qMHgyZCovCTAgLyogcmVzZXJ2ZWQgKi8sCisvKjB4MmUqLwlTQUJSRV9JTUFQX1VFLAorLyoweDJmKi8JU0FCUkVfSU1BUF9DRSwKKy8qMHgzMCovCVNBQlJFX0lNQVBfUENJRVJSLAorfTsKKyNkZWZpbmUgU0FCUkVfT05CT0FSRF9JUlFfQkFTRQkJMHgyMAorI2RlZmluZSBTQUJSRV9PTkJPQVJEX0lSUV9MQVNUCQkweDMwCisjZGVmaW5lIHNhYnJlX29uYm9hcmRfaW1hcF9vZmZzZXQoX19pbm8pIFwKKwlfX3NhYnJlX29uYm9hcmRfaW1hcF9vZmZbKF9faW5vKSAtIFNBQlJFX09OQk9BUkRfSVJRX0JBU0VdCisKKyNkZWZpbmUgc2FicmVfaWNscl9vZmZzZXQoaW5vKQkJCQkJICAgICAgXAorCSgoaW5vICYgMHgyMCkgPyAoU0FCUkVfSUNMUl9TQ1NJICsgKCgoaW5vKSAmIDB4MWYpIDw8IDMpKSA6ICBcCisJCQkoU0FCUkVfSUNMUl9BX1NMT1QwICsgKCgoaW5vKSAmIDB4MWYpPDwzKSkpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2FicmVfaXJxX2J1aWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgIHVuc2lnbmVkIGludCBpbm8sCisJCQkJICAgIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBzYWJyZV9pcnFfZGF0YSAqaXJxX2RhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2xsZXJfcmVncyA9IGlycV9kYXRhLT5jb250cm9sbGVyX3JlZ3M7CisJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcmVnczsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJdW5zaWduZWQgbG9uZyBpbWFwX29mZiwgaWNscl9vZmY7CisJaW50IGlub2ZpeHVwID0gMDsKKwlpbnQgdmlydF9pcnE7CisKKwlpbm8gJj0gMHgzZjsKKwlpZiAoaW5vIDwgU0FCUkVfT05CT0FSRF9JUlFfQkFTRSkgeworCQkvKiBQQ0kgc2xvdCAqLworCQlpbWFwX29mZiA9IHNhYnJlX3BjaXNsb3RfaW1hcF9vZmZzZXQoaW5vKTsKKwl9IGVsc2UgeworCQkvKiBvbmJvYXJkIGRldmljZSAqLworCQlpZiAoaW5vID4gU0FCUkVfT05CT0FSRF9JUlFfTEFTVCkgeworCQkJcHJvbV9wcmludGYoInNhYnJlX2lycV9idWlsZDogV2Fja3kgSU5PIFsleF1cbiIsIGlubyk7CisJCQlwcm9tX2hhbHQoKTsKKwkJfQorCQlpbWFwX29mZiA9IHNhYnJlX29uYm9hcmRfaW1hcF9vZmZzZXQoaW5vKTsKKwl9CisKKwkvKiBOb3cgYnVpbGQgdGhlIElSUSBidWNrZXQuICovCisJaW1hcCA9IGNvbnRyb2xsZXJfcmVncyArIGltYXBfb2ZmOworCWltYXAgKz0gNDsKKworCWljbHJfb2ZmID0gc2FicmVfaWNscl9vZmZzZXQoaW5vKTsKKwlpY2xyID0gY29udHJvbGxlcl9yZWdzICsgaWNscl9vZmY7CisJaWNsciArPSA0OworCisJaWYgKChpbm8gJiAweDIwKSA9PSAwKQorCQlpbm9maXh1cCA9IGlubyAmIDB4MDM7CisKKwl2aXJ0X2lycSA9IGJ1aWxkX2lycShpbm9maXh1cCwgaWNsciwgaW1hcCk7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKHJlZ3MgJiYKKwkgICAgKChyZWdzLT5waHlzX2hpID4+IDE2KSAmIDB4ZmYpICE9IGlycV9kYXRhLT5wY2lfZmlyc3RfYnVzbm8pIHsKKwkJaXJxX2luc3RhbGxfcHJlX2hhbmRsZXIodmlydF9pcnEsCisJCQkJCXNhYnJlX3dzeW5jX2hhbmRsZXIsCisJCQkJCSh2b2lkICopIChsb25nKSByZWdzLT5waHlzX2hpLAorCQkJCQkodm9pZCAqKQorCQkJCQljb250cm9sbGVyX3JlZ3MgKworCQkJCQlTQUJSRV9XUlNZTkMpOworCX0KKworCXJldHVybiB2aXJ0X2lycTsKK30KKworc3RhdGljIHZvaWQgc2FicmVfaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKKwlzdHJ1Y3Qgc2FicmVfaXJxX2RhdGEgKmlycV9kYXRhOworCXUzMiAqYnVzcmFuZ2U7CisKKwlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7CisJZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gc2FicmVfaXJxX2J1aWxkOworCisJaXJxX2RhdGEgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2FicmVfaXJxX2RhdGEpKTsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpcnFfZGF0YS0+Y29udHJvbGxlcl9yZWdzID0gcmVnc1swXS5waHlzX2FkZHI7CisKKwlidXNyYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImJ1cy1yYW5nZSIsIE5VTEwpOworCWlycV9kYXRhLT5wY2lfZmlyc3RfYnVzbm8gPSBidXNyYW5nZVswXTsKKworCWRwLT5pcnFfdHJhbnMtPmRhdGEgPSBpcnFfZGF0YTsKK30KKworLyogU0NISVpPIGludGVycnVwdCBtYXBwaW5nIHN1cHBvcnQuICBVbmxpa2UgUHN5Y2hvLCBmb3IgdGhpcyBjb250cm9sbGVyIHRoZQorICogaW1hcC9pY2xyIHJlZ2lzdGVycyBhcmUgcGVyLVBCTS4KKyAqLworI2RlZmluZSBTQ0hJWk9fSU1BUF9CQVNFCTB4MTAwMFVMCisjZGVmaW5lIFNDSElaT19JQ0xSX0JBU0UJMHgxNDAwVUwKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoaXpvX2ltYXBfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXJldHVybiBTQ0hJWk9fSU1BUF9CQVNFICsgKGlubyAqIDhVTCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pY2xyX29mZnNldCh1bnNpZ25lZCBsb25nIGlubykKK3sKKwlyZXR1cm4gU0NISVpPX0lDTFJfQkFTRSArIChpbm8gKiA4VUwpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hpem9faW5vX3RvX2ljbHIodW5zaWduZWQgbG9uZyBwYm1fcmVncywKKwkJCQkJdW5zaWduZWQgaW50IGlubykKK3sKKwlyZXR1cm4gcGJtX3JlZ3MgKyBzY2hpem9faWNscl9vZmZzZXQoaW5vKSArIDQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGl6b19pbm9fdG9faW1hcCh1bnNpZ25lZCBsb25nIHBibV9yZWdzLAorCQkJCQl1bnNpZ25lZCBpbnQgaW5vKQoreworCXJldHVybiBwYm1fcmVncyArIHNjaGl6b19pbWFwX29mZnNldChpbm8pICsgNDsKK30KKworI2RlZmluZSBzY2hpem9fcmVhZChfX3JlZykgXAorKHsJdTY0IF9fcmV0OyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEgWyUxXSAlMiwgJTAiIFwKKwkJCSAgICAgOiAiPXIiIChfX3JldCkgXAorCQkJICAgICA6ICJyIiAoX19yZWcpLCAiaSIgKEFTSV9QSFlTX0JZUEFTU19FQ19FKSBcCisJCQkgICAgIDogIm1lbW9yeSIpOyBcCisJX19yZXQ7IFwKK30pCisjZGVmaW5lIHNjaGl6b193cml0ZShfX3JlZywgX192YWwpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlMCwgWyUxXSAlMiIgXAorCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8gXAorCQkJICAgICA6ICJyIiAoX192YWwpLCAiciIgKF9fcmVnKSwgXAorCQkJICAgICAgICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpIFwKKwkJCSAgICAgOiAibWVtb3J5IikKKworc3RhdGljIHZvaWQgdG9tYXRpbGxvX3dzeW5jX2hhbmRsZXIodW5zaWduZWQgaW50IGlubywgdm9pZCAqX2FyZzEsIHZvaWQgKl9hcmcyKQoreworCXVuc2lnbmVkIGxvbmcgc3luY19yZWcgPSAodW5zaWduZWQgbG9uZykgX2FyZzI7CisJdTY0IG1hc2sgPSAxVUwgPDwgKGlubyAmIElNQVBfSU5PKTsKKwl1NjQgdmFsOworCWludCBsaW1pdDsKKworCXNjaGl6b193cml0ZShzeW5jX3JlZywgbWFzayk7CisKKwlsaW1pdCA9IDEwMDAwMDsKKwl2YWwgPSAwOworCXdoaWxlICgtLWxpbWl0KSB7CisJCXZhbCA9IHNjaGl6b19yZWFkKHN5bmNfcmVnKTsKKwkJaWYgKCEodmFsICYgbWFzaykpCisJCQlicmVhazsKKwl9CisJaWYgKGxpbWl0IDw9IDApIHsKKwkJcHJpbnRrKCJ0b21hdGlsbG9fd3N5bmNfaGFuZGxlcjogRE1BIHdvbid0IHN5bmMgWyVseDolbHhdXG4iLAorCQkgICAgICAgdmFsLCBtYXNrKTsKKwl9CisKKwlpZiAoX2FyZzEpIHsKKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVsaW5lWzY0XQorCQkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZCAlJWZwcnMsICUwXG5cdCIKKwkJCQkgICAgICJvciAlMCwgJTQsICUxXG5cdCIKKwkJCQkgICAgICJ3ciAlMSwgMHgwLCAlJWZwcnNcblx0IgorCQkJCSAgICAgInN0ZGEgJSVmMCwgWyU1XSAlNlxuXHQiCisJCQkJICAgICAid3IgJTAsIDB4MCwgJSVmcHJzXG5cdCIKKwkJCQkgICAgICJtZW1iYXIgI1N5bmMiCisJCQkJICAgICA6ICI9JnIiIChtYXNrKSwgIj0mciIgKHZhbCkKKwkJCQkgICAgIDogIjAiIChtYXNrKSwgIjEiICh2YWwpLAorCQkJCSAgICAgImkiIChGUFJTX0ZFRiksICJyIiAoJmNhY2hlbGluZVswXSksCisJCQkJICAgICAiaSIgKEFTSV9CTEtfQ09NTUlUX1ApKTsKKwl9Cit9CisKK3N0cnVjdCBzY2hpem9faXJxX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgcGJtX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBzeW5jX3JlZzsKKwl1MzIgcG9ydGlkOworCWludCBjaGlwX3ZlcnNpb247Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHNjaGl6b19pcnFfYnVpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpbm8sCisJCQkJICAgICB2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhICppcnFfZGF0YSA9IF9kYXRhOworCXVuc2lnbmVkIGxvbmcgcGJtX3JlZ3MgPSBpcnFfZGF0YS0+cGJtX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBpbWFwLCBpY2xyOworCWludCBpZ25fZml4dXA7CisJaW50IHZpcnRfaXJxOworCWludCBpc190b21hdGlsbG87CisKKwlpbm8gJj0gMHgzZjsKKworCS8qIE5vdyBidWlsZCB0aGUgSVJRIGJ1Y2tldC4gKi8KKwlpbWFwID0gc2NoaXpvX2lub190b19pbWFwKHBibV9yZWdzLCBpbm8pOworCWljbHIgPSBzY2hpem9faW5vX3RvX2ljbHIocGJtX3JlZ3MsIGlubyk7CisKKwkvKiBPbiBTY2hpem8sIG5vIGlub2ZpeHVwIG9jY3Vycy4gIFRoaXMgaXMgYmVjYXVzZSBlYWNoCisJICogSU5PIGhhcyBpdCdzIG93biBJTUFQIHJlZ2lzdGVyLiAgT24gUHN5Y2hvIGFuZCBTYWJyZQorCSAqIHRoZXJlIGlzIG9ubHkgb25lIElNQVAgcmVnaXN0ZXIgZm9yIGVhY2ggUENJIHNsb3QgZXZlbgorCSAqIHRob3VnaCBmb3VyIGRpZmZlcmVudCBJTk9zIGNhbiBiZSBnZW5lcmF0ZWQgYnkgZWFjaAorCSAqIFBDSSBzbG90LgorCSAqCisJICogQnV0LCBmb3IgSkJVUyB2YXJpYW50cyAoZXNzZW50aWFsbHksIFRvbWF0aWxsbyksIHdlIGhhdmUKKwkgKiB0byBmaXh1cCB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgaW50ZXJydXB0IGdyb3VwIG51bWJlci4KKwkgKi8KKwlpZ25fZml4dXAgPSAwOworCisJaXNfdG9tYXRpbGxvID0gKGlycV9kYXRhLT5zeW5jX3JlZyAhPSAwVUwpOworCisJaWYgKGlzX3RvbWF0aWxsbykgeworCQlpZiAoaXJxX2RhdGEtPnBvcnRpZCAmIDEpCisJCQlpZ25fZml4dXAgPSAoMSA8PCA2KTsKKwl9CisKKwl2aXJ0X2lycSA9IGJ1aWxkX2lycShpZ25fZml4dXAsIGljbHIsIGltYXApOworCisJaWYgKGlzX3RvbWF0aWxsbykgeworCQlpcnFfaW5zdGFsbF9wcmVfaGFuZGxlcih2aXJ0X2lycSwKKwkJCQkJdG9tYXRpbGxvX3dzeW5jX2hhbmRsZXIsCisJCQkJCSgoaXJxX2RhdGEtPmNoaXBfdmVyc2lvbiA8PSA0KSA/CisJCQkJCSAodm9pZCAqKSAxIDogKHZvaWQgKikgMCksCisJCQkJCSh2b2lkICopIGlycV9kYXRhLT5zeW5jX3JlZyk7CisJfQorCisJcmV0dXJuIHZpcnRfaXJxOworfQorCitzdGF0aWMgdm9pZCBzY2hpem9faXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKKwlzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhICppcnFfZGF0YTsKKworCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKKwlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBzY2hpem9faXJxX2J1aWxkOworCisJaXJxX2RhdGEgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2NoaXpvX2lycV9kYXRhKSk7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJZHAtPmlycV90cmFucy0+ZGF0YSA9IGlycV9kYXRhOworCisJaXJxX2RhdGEtPnBibV9yZWdzID0gcmVnc1swXS5waHlzX2FkZHI7CisJaXJxX2RhdGEtPnN5bmNfcmVnID0gcmVnc1szXS5waHlzX2FkZHIgKyAweDFhMThVTDsKKwlpcnFfZGF0YS0+cG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgMCk7CisJaXJxX2RhdGEtPmNoaXBfdmVyc2lvbiA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgInZlcnNpb24jIiwgMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNpX3N1bjR2X2lycV9idWlsZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLAorCQkJCQl1bnNpZ25lZCBpbnQgZGV2aW5vLAorCQkJCQl2b2lkICpfZGF0YSkKK3sKKwl1MzIgZGV2aGFuZGxlID0gKHUzMikgKHVuc2lnbmVkIGxvbmcpIF9kYXRhOworCisJcmV0dXJuIHN1bjR2X2J1aWxkX2lycShkZXZoYW5kbGUsIGRldmlubyk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9zdW40dl9pcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOworCisJZHAtPmlycV90cmFucyA9IHByb21fZWFybHlfYWxsb2Moc2l6ZW9mKHN0cnVjdCBvZl9pcnFfY29udHJvbGxlcikpOworCWRwLT5pcnFfdHJhbnMtPmlycV9idWlsZCA9IHBjaV9zdW40dl9pcnFfYnVpbGQ7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJZHAtPmlycV90cmFucy0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKQorCQkoKHJlZ3MtPnBoeXNfYWRkciA+PiAzMlVMKSAmIDB4MGZmZmZmZmYpOworfQorI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKworI2lmZGVmIENPTkZJR19TQlVTCisvKiBJTk8gbnVtYmVyIHRvIElNQVAgcmVnaXN0ZXIgb2Zmc2V0IGZvciBTWVNJTyBleHRlcm5hbCBJUlEncy4KKyAqIFRoaXMgc2hvdWxkIGNvbmZvcm0gdG8gYm90aCBTdW5maXJlL1dpbGRmaXJlIHNlcnZlciBhbmQgRnVzaW9uCisgKiBkZXNrdG9wIGRlc2lnbnMuCisgKi8KKyNkZWZpbmUgU1lTSU9fSU1BUF9TTE9UMAkweDJjMDRVTAorI2RlZmluZSBTWVNJT19JTUFQX1NMT1QxCTB4MmMwY1VMCisjZGVmaW5lIFNZU0lPX0lNQVBfU0xPVDIJMHgyYzE0VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9TTE9UMwkweDJjMWNVTAorI2RlZmluZSBTWVNJT19JTUFQX1NDU0kJCTB4MzAwNFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfRVRICQkweDMwMGNVTAorI2RlZmluZSBTWVNJT19JTUFQX0JQUAkJMHgzMDE0VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9BVURJTwkweDMwMWNVTAorI2RlZmluZSBTWVNJT19JTUFQX1BGQUlMCTB4MzAyNFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfS01TCQkweDMwMmNVTAorI2RlZmluZSBTWVNJT19JTUFQX0ZMUFkJCTB4MzAzNFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfU0hXCQkweDMwM2NVTAorI2RlZmluZSBTWVNJT19JTUFQX0tCRAkJMHgzMDQ0VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9NUwkJMHgzMDRjVUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9TRVIJCTB4MzA1NFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfVElNMAkJMHgzMDY0VUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9USU0xCQkweDMwNmNVTAorI2RlZmluZSBTWVNJT19JTUFQX1VFCQkweDMwNzRVTAorI2RlZmluZSBTWVNJT19JTUFQX0NFCQkweDMwN2NVTAorI2RlZmluZSBTWVNJT19JTUFQX1NCRVJSCTB4MzA4NFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfUE1HTVQJMHgzMDhjVUwKKyNkZWZpbmUgU1lTSU9fSU1BUF9HRlgJCTB4MzA5NFVMCisjZGVmaW5lIFNZU0lPX0lNQVBfRVVQQQkJMHgzMDljVUwKKworI2RlZmluZSBib2dvbiAgICAgKCh1bnNpZ25lZCBsb25nKSAtMSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2lvX2lycV9vZmZzZXRzW10gPSB7CisJLyogU0JVUyBTbG90IDAgLS0+IDMsIGxldmVsIDEgLS0+IDcgKi8KKwlTWVNJT19JTUFQX1NMT1QwLCBTWVNJT19JTUFQX1NMT1QwLCBTWVNJT19JTUFQX1NMT1QwLCBTWVNJT19JTUFQX1NMT1QwLAorCVNZU0lPX0lNQVBfU0xPVDAsIFNZU0lPX0lNQVBfU0xPVDAsIFNZU0lPX0lNQVBfU0xPVDAsIFNZU0lPX0lNQVBfU0xPVDAsCisJU1lTSU9fSU1BUF9TTE9UMSwgU1lTSU9fSU1BUF9TTE9UMSwgU1lTSU9fSU1BUF9TTE9UMSwgU1lTSU9fSU1BUF9TTE9UMSwKKwlTWVNJT19JTUFQX1NMT1QxLCBTWVNJT19JTUFQX1NMT1QxLCBTWVNJT19JTUFQX1NMT1QxLCBTWVNJT19JTUFQX1NMT1QxLAorCVNZU0lPX0lNQVBfU0xPVDIsIFNZU0lPX0lNQVBfU0xPVDIsIFNZU0lPX0lNQVBfU0xPVDIsIFNZU0lPX0lNQVBfU0xPVDIsCisJU1lTSU9fSU1BUF9TTE9UMiwgU1lTSU9fSU1BUF9TTE9UMiwgU1lTSU9fSU1BUF9TTE9UMiwgU1lTSU9fSU1BUF9TTE9UMiwKKwlTWVNJT19JTUFQX1NMT1QzLCBTWVNJT19JTUFQX1NMT1QzLCBTWVNJT19JTUFQX1NMT1QzLCBTWVNJT19JTUFQX1NMT1QzLAorCVNZU0lPX0lNQVBfU0xPVDMsIFNZU0lPX0lNQVBfU0xPVDMsIFNZU0lPX0lNQVBfU0xPVDMsIFNZU0lPX0lNQVBfU0xPVDMsCisKKwkvKiBPbmJvYXJkIGRldmljZXMgKG5vdCByZWxldmFudC91c2VkIG9uIFN1bkZpcmUpLiAqLworCVNZU0lPX0lNQVBfU0NTSSwKKwlTWVNJT19JTUFQX0VUSCwKKwlTWVNJT19JTUFQX0JQUCwKKwlib2dvbiwKKwlTWVNJT19JTUFQX0FVRElPLAorCVNZU0lPX0lNQVBfUEZBSUwsCisJYm9nb24sCisJYm9nb24sCisJU1lTSU9fSU1BUF9LTVMsCisJU1lTSU9fSU1BUF9GTFBZLAorCVNZU0lPX0lNQVBfU0hXLAorCVNZU0lPX0lNQVBfS0JELAorCVNZU0lPX0lNQVBfTVMsCisJU1lTSU9fSU1BUF9TRVIsCisJYm9nb24sCisJYm9nb24sCisJU1lTSU9fSU1BUF9USU0wLAorCVNZU0lPX0lNQVBfVElNMSwKKwlib2dvbiwKKwlib2dvbiwKKwlTWVNJT19JTUFQX1VFLAorCVNZU0lPX0lNQVBfQ0UsCisJU1lTSU9fSU1BUF9TQkVSUiwKKwlTWVNJT19JTUFQX1BNR01ULAorfTsKKworI3VuZGVmIGJvZ29uCisKKyNkZWZpbmUgTlVNX1NZU0lPX09GRlNFVFMgQVJSQVlfU0laRShzeXNpb19pcnFfb2Zmc2V0cykKKworLyogQ29udmVydCBJbnRlcnJ1cHQgTWFwcGluZyByZWdpc3RlciBwb2ludGVyIHRvIGFzc29jaWF0ZWQKKyAqIEludGVycnVwdCBDbGVhciByZWdpc3RlciBwb2ludGVyLCBTWVNJTyBzcGVjaWZpYyB2ZXJzaW9uLgorICovCisjZGVmaW5lIFNZU0lPX0lDTFJfVU5VU0VEMAkweDM0MDBVTAorI2RlZmluZSBTWVNJT19JQ0xSX1NMT1QwCTB4MzQwY1VMCisjZGVmaW5lIFNZU0lPX0lDTFJfU0xPVDEJMHgzNDRjVUwKKyNkZWZpbmUgU1lTSU9fSUNMUl9TTE9UMgkweDM0OGNVTAorI2RlZmluZSBTWVNJT19JQ0xSX1NMT1QzCTB4MzRjY1VMCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNpb19pbWFwX3RvX2ljbHIodW5zaWduZWQgbG9uZyBpbWFwKQoreworCXVuc2lnbmVkIGxvbmcgZGlmZiA9IFNZU0lPX0lDTFJfVU5VU0VEMCAtIFNZU0lPX0lNQVBfU0xPVDA7CisJcmV0dXJuIGltYXAgKyBkaWZmOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNidXNfb2ZfYnVpbGRfaXJxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGlubywKKwkJCQkgICAgICB2b2lkICpfZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ19iYXNlID0gKHVuc2lnbmVkIGxvbmcpIF9kYXRhOworCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJaW50IHNidXNfc2xvdCA9IDA7CisJaW50IHNidXNfbGV2ZWwgPSAwOworCisJaW5vICY9IDB4M2Y7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKHJlZ3MpCisJCXNidXNfc2xvdCA9IHJlZ3MtPndoaWNoX2lvOworCisJaWYgKGlubyA8IDB4MjApCisJCWlubyArPSAoc2J1c19zbG90ICogOCk7CisKKwlpbWFwID0gc3lzaW9faXJxX29mZnNldHNbaW5vXTsKKwlpZiAoaW1hcCA9PSAoKHVuc2lnbmVkIGxvbmcpLTEpKSB7CisJCXByb21fcHJpbnRmKCJnZXRfaXJxX3RyYW5zbGF0aW9uczogQmFkIFNZU0lPIElOT1sleF1cbiIsCisJCQkgICAgaW5vKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCWltYXAgKz0gcmVnX2Jhc2U7CisKKwkvKiBTWVNJTyBpbmNvbnNpc3RlbmN5LiAgRm9yIGV4dGVybmFsIFNMT1RTLCB3ZSBoYXZlIHRvIHNlbGVjdAorCSAqIHRoZSByaWdodCBJQ0xSIHJlZ2lzdGVyIGJhc2VkIHVwb24gdGhlIGxvd2VyIFNCVVMgaXJxIGxldmVsCisJICogYml0cy4KKwkgKi8KKwlpZiAoaW5vID49IDB4MjApIHsKKwkJaWNsciA9IHN5c2lvX2ltYXBfdG9faWNscihpbWFwKTsKKwl9IGVsc2UgeworCQlzYnVzX2xldmVsID0gaW5vICYgMHg3OworCisJCXN3aXRjaChzYnVzX3Nsb3QpIHsKKwkJY2FzZSAwOgorCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QxOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWljbHIgPSByZWdfYmFzZSArIFNZU0lPX0lDTFJfU0xPVDI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSAzOgorCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMzsKKwkJCWJyZWFrOworCQl9OworCisJCWljbHIgKz0gKCh1bnNpZ25lZCBsb25nKXNidXNfbGV2ZWwgLSAxVUwpICogOFVMOworCX0KKwlyZXR1cm4gYnVpbGRfaXJxKHNidXNfbGV2ZWwsIGljbHIsIGltYXApOworfQorCitzdGF0aWMgdm9pZCBzYnVzX2lycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CisKKwlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7CisJZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gc2J1c19vZl9idWlsZF9pcnE7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJZHAtPmlycV90cmFucy0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKSByZWdzLT5waHlzX2FkZHI7Cit9CisjZW5kaWYgLyogQ09ORklHX1NCVVMgKi8KKworCitzdGF0aWMgdW5zaWduZWQgaW50IGNlbnRyYWxfYnVpbGRfaXJxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGlubywKKwkJCQkgICAgICB2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlbnRyYWxfZHAgPSBfZGF0YTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpjZW50cmFsX29wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjZW50cmFsX2RwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGljbHI7CisJdTMyIHRtcDsKKworCWlmICghc3RyY21wKGRwLT5uYW1lLCAiZWVwcm9tIikpIHsKKwkJcmVzID0gJmNlbnRyYWxfb3AtPnJlc291cmNlWzVdOworCX0gZWxzZSBpZiAoIXN0cmNtcChkcC0+bmFtZSwgInpzIikpIHsKKwkJcmVzID0gJmNlbnRyYWxfb3AtPnJlc291cmNlWzRdOworCX0gZWxzZSBpZiAoIXN0cmNtcChkcC0+bmFtZSwgImNsb2NrLWJvYXJkIikpIHsKKwkJcmVzID0gJmNlbnRyYWxfb3AtPnJlc291cmNlWzNdOworCX0gZWxzZSB7CisJCXJldHVybiBpbm87CisJfQorCisJaW1hcCA9IHJlcy0+c3RhcnQgKyAweDAwVUw7CisJaWNsciA9IHJlcy0+c3RhcnQgKyAweDEwVUw7CisKKwkvKiBTZXQgdGhlIElOTyBzdGF0ZSB0byBpZGxlLCBhbmQgZGlzYWJsZS4gICovCisJdXBhX3dyaXRlbCgwLCBpY2xyKTsKKwl1cGFfcmVhZGwoaWNscik7CisKKwl0bXAgPSB1cGFfcmVhZGwoaW1hcCk7CisJdG1wICY9IH4weDgwMDAwMDAwOworCXVwYV93cml0ZWwodG1wLCBpbWFwKTsKKworCXJldHVybiBidWlsZF9pcnEoMCwgaWNsciwgaW1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNlbnRyYWxfaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKKwlkcC0+aXJxX3RyYW5zID0gcHJvbV9lYXJseV9hbGxvYyhzaXplb2Yoc3RydWN0IG9mX2lycV9jb250cm9sbGVyKSk7CisJZHAtPmlycV90cmFucy0+aXJxX2J1aWxkID0gY2VudHJhbF9idWlsZF9pcnE7CisKKwlkcC0+aXJxX3RyYW5zLT5kYXRhID0gZHA7Cit9CisKK3N0cnVjdCBpcnFfdHJhbnMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAoKmluaXQpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKK307CisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgc3RydWN0IGlycV90cmFucyBwY2lfaXJxX3RyYW5zX3RhYmxlW10gPSB7CisJeyAiU1VOVyxzYWJyZSIsIHNhYnJlX2lycV90cmFuc19pbml0IH0sCisJeyAicGNpMTA4ZSxhMDAwIiwgc2FicmVfaXJxX3RyYW5zX2luaXQgfSwKKwl7ICJwY2kxMDhlLGEwMDEiLCBzYWJyZV9pcnFfdHJhbnNfaW5pdCB9LAorCXsgIlNVTlcscHN5Y2hvIiwgcHN5Y2hvX2lycV90cmFuc19pbml0IH0sCisJeyAicGNpMTA4ZSw4MDAwIiwgcHN5Y2hvX2lycV90cmFuc19pbml0IH0sCisJeyAiU1VOVyxzY2hpem8iLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJwY2kxMDhlLDgwMDEiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJTVU5XLHNjaGl6bysiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJwY2kxMDhlLDgwMDIiLCBzY2hpem9faXJxX3RyYW5zX2luaXQgfSwKKwl7ICJTVU5XLHRvbWF0aWxsbyIsIHNjaGl6b19pcnFfdHJhbnNfaW5pdCB9LAorCXsgInBjaTEwOGUsYTgwMSIsIHNjaGl6b19pcnFfdHJhbnNfaW5pdCB9LAorCXsgIlNVTlcsc3VuNHYtcGNpIiwgcGNpX3N1bjR2X2lycV90cmFuc19pbml0IH0sCit9OworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VuNHZfdmRldl9pcnFfYnVpbGQoc3RydWN0IGRldmljZV9ub2RlICpkcCwKKwkJCQkJIHVuc2lnbmVkIGludCBkZXZpbm8sCisJCQkJCSB2b2lkICpfZGF0YSkKK3sKKwl1MzIgZGV2aGFuZGxlID0gKHUzMikgKHVuc2lnbmVkIGxvbmcpIF9kYXRhOworCisJcmV0dXJuIHN1bjR2X2J1aWxkX2lycShkZXZoYW5kbGUsIGRldmlubyk7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjR2X3ZkZXZfaXJxX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVnczsKKworCWRwLT5pcnFfdHJhbnMgPSBwcm9tX2Vhcmx5X2FsbG9jKHNpemVvZihzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIpKTsKKwlkcC0+aXJxX3RyYW5zLT5pcnFfYnVpbGQgPSBzdW40dl92ZGV2X2lycV9idWlsZDsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlkcC0+aXJxX3RyYW5zLT5kYXRhID0gKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpCisJCSgocmVncy0+cGh5c19hZGRyID4+IDMyVUwpICYgMHgwZmZmZmZmZik7Cit9CisKK3N0YXRpYyB2b2lkIGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCit7CisJY29uc3QgY2hhciAqbW9kZWw7CisJaW50IGk7CisKKwltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIm1vZGVsIiwgTlVMTCk7CisJaWYgKCFtb2RlbCkKKwkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJjb21wYXRpYmxlIiwgTlVMTCk7CisJaWYgKCFtb2RlbCkKKwkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1BDSQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9pcnFfdHJhbnNfdGFibGUpOyBpKyspIHsKKwkJc3RydWN0IGlycV90cmFucyAqdCA9ICZwY2lfaXJxX3RyYW5zX3RhYmxlW2ldOworCisJCWlmICghc3RyY21wKG1vZGVsLCB0LT5uYW1lKSkKKwkJCXJldHVybiB0LT5pbml0KGRwKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0JVUworCWlmICghc3RyY21wKGRwLT5uYW1lLCAic2J1cyIpIHx8CisJICAgICFzdHJjbXAoZHAtPm5hbWUsICJzYmkiKSkKKwkJcmV0dXJuIHNidXNfaXJxX3RyYW5zX2luaXQoZHApOworI2VuZGlmCisJaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJjZW50cmFsIikpCisJCXJldHVybiBjZW50cmFsX2lycV90cmFuc19pbml0KGRwLT5jaGlsZCk7CisJaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJ2aXJ0dWFsLWRldmljZXMiKSkKKwkJcmV0dXJuIHN1bjR2X3ZkZXZfaXJxX3RyYW5zX2luaXQoZHApOworfQorCiBzdGF0aWMgaW50IGlzX3Jvb3Rfbm9kZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQogewogCWlmICghZHApCkBAIC02NzYsMTAgKzE0ODIsMTAgQEAKIAlkcC0+dHlwZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIik7CiAJZHAtPm5vZGUgPSBub2RlOwogCi0JLyogQnVpbGQgaW50ZXJydXB0cyBsYXRlci4uLiAqLwotCiAJZHAtPnByb3BlcnRpZXMgPSBidWlsZF9wcm9wX2xpc3Qobm9kZSk7CiAKKwlpcnFfdHJhbnNfaW5pdChkcCk7CisKIAlyZXR1cm4gZHA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUwppbmRleCA3MTMwZTg2Li4zNTIyY2Q2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9ydHJhcC5TCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zYnVzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYwppbmRleCBhYzA1ZTBmLi5jNDlhNTc3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYwpAQCAtMTA2NSw3ICsxMDY1LDcgQEAKIAogCWlycSA9IHNidXNfYnVpbGRfaXJxKHNidXMsIFNZU0lPX1VFX0lOTyk7CiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgc3lzaW9fdWVfaGFuZGxlciwKLQkJCVNBX1NISVJRLCAiU1lTSU8gVUUiLCBzYnVzKSA8IDApIHsKKwkJCUlSUUZfU0hBUkVELCAiU1lTSU8gVUUiLCBzYnVzKSA8IDApIHsKIAkJcHJvbV9wcmludGYoIlNZU0lPWyV4XTogQ2Fubm90IHJlZ2lzdGVyIFVFIGludGVycnVwdC5cbiIsCiAJCQkgICAgc2J1cy0+cG9ydGlkKTsKIAkJcHJvbV9oYWx0KCk7CkBAIC0xMDczLDcgKzEwNzMsNyBAQAogCiAJaXJxID0gc2J1c19idWlsZF9pcnEoc2J1cywgU1lTSU9fQ0VfSU5PKTsKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBzeXNpb19jZV9oYW5kbGVyLAotCQkJU0FfU0hJUlEsICJTWVNJTyBDRSIsIHNidXMpIDwgMCkgeworCQkJSVJRRl9TSEFSRUQsICJTWVNJTyBDRSIsIHNidXMpIDwgMCkgewogCQlwcm9tX3ByaW50ZigiU1lTSU9bJXhdOiBDYW5ub3QgcmVnaXN0ZXIgQ0UgaW50ZXJydXB0LlxuIiwKIAkJCSAgICBzYnVzLT5wb3J0aWQpOwogCQlwcm9tX2hhbHQoKTsKQEAgLTEwODEsNyArMTA4MSw3IEBACiAKIAlpcnEgPSBzYnVzX2J1aWxkX2lycShzYnVzLCBTWVNJT19TQlVTRVJSX0lOTyk7CiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgc3lzaW9fc2J1c19lcnJvcl9oYW5kbGVyLAotCQkJU0FfU0hJUlEsICJTWVNJTyBTQlVTIEVycm9yIiwgc2J1cykgPCAwKSB7CisJCQlJUlFGX1NIQVJFRCwgIlNZU0lPIFNCVVMgRXJyb3IiLCBzYnVzKSA8IDApIHsKIAkJcHJvbV9wcmludGYoIlNZU0lPWyV4XTogQ2Fubm90IHJlZ2lzdGVyIFNCVVMgRXJyb3IgaW50ZXJydXB0LlxuIiwKIAkJCSAgICBzYnVzLT5wb3J0aWQpOwogCQlwcm9tX2hhbHQoKTsKQEAgLTEyMjEsOSArMTIyMSw3IEBACiAKIAkvKiBOb3cgc29tZSBYZmlyZSBzcGVjaWZpYyBncm90Li4uICovCiAJaWYgKHRoaXNfaXNfc3RhcmZpcmUpCi0JCXNidXMtPnN0YXJmaXJlX2Nvb2tpZSA9IHN0YXJmaXJlX2hvb2t1cChzYnVzLT5wb3J0aWQpOwotCWVsc2UKLQkJc2J1cy0+c3RhcmZpcmVfY29va2llID0gTlVMTDsKKwkJc3RhcmZpcmVfaG9va3VwKHNidXMtPnBvcnRpZCk7CiAKIAlzeXNpb19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzYnVzKTsKIH0KQEAgLTEyNjksOCArMTI2Nyw2IEBACiB2b2lkIF9faW5pdCBzYnVzX2FyY2hfcG9zdGluaXQodm9pZCkKIHsKIAlleHRlcm4gdm9pZCBmaXJldHJ1Y2tfaW5pdCh2b2lkKTsKLQlleHRlcm4gdm9pZCBjbG9ja19wcm9iZSh2b2lkKTsKIAogCWZpcmV0cnVja19pbml0KCk7Ci0JY2xvY2tfcHJvYmUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCAxMTZkOTYzLi5hNzMxNDA0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggY2ExMWE0Yy4uOTZkNTZhOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbC5jCkBAIC04LDcgKzgsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5NywxOTk4IEpha3ViIEplbGluZWsgICAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZkZWYgQ09ORklHX1NQQVJDMzJfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CS8qIGZvciBjb21wYXRfb2xkX3NpZ3NldF90ICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKaW5kZXggNGFjMzVkZC4uNDE3M2RlNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNkZWZpbmUgRVhQT1JUX1NZTVRBQl9TVFJPUFMKICNkZWZpbmUgUFJPTUxJQl9JTlRFUk5BTAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3RhcmZpcmUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3RhcmZpcmUuYwppbmRleCBhZTg1OWQ0Li5iOTMwZmVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N0YXJmaXJlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdGFyZmlyZS5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgc3RydWN0IHN0YXJmaXJlX2lycWluZm8gKnNmbGlzdCA9IE5VTEw7CiAKIC8qIEJlYW0gbWUgdXAgU2NvdHQoTWNOZWlsKXkuLi4gKi8KLXZvaWQgKnN0YXJmaXJlX2hvb2t1cChpbnQgdXBhaWQpCit2b2lkIHN0YXJmaXJlX2hvb2t1cChpbnQgdXBhaWQpCiB7CiAJc3RydWN0IHN0YXJmaXJlX2lycWluZm8gKnA7CiAJdW5zaWduZWQgbG9uZyB0cmVnX2Jhc2UsIGh3bWlkLCBpOwpAQCAtODEsOCArODEsNiBAQAogCXAtPnVwYWlkID0gdXBhaWQ7CiAJcC0+bmV4dCA9IHNmbGlzdDsKIAlzZmxpc3QgPSBwOwotCi0JcmV0dXJuICh2b2lkICopIHA7CiB9CiAKIHVuc2lnbmVkIGludCBzdGFyZmlyZV90cmFuc2xhdGUodW5zaWduZWQgbG9uZyBpbWFwLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCmluZGV4IGJkZjFmNGQuLmMwOWFiNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggSmFrdWIgSmVsaW5layAgIChqakB1bHRyYS5saW51eC5jeikKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKIC8qIE5PVEU6IGNhbGwgYXMganVtcCBicmVha3MgcmV0dXJuIHN0YWNrLCB3ZSBoYXZlIHRvIGF2b2lkIHRoYXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCmluZGV4IDdhODY5MTMuLjUxYzA1NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYwpAQCAtNiw3ICs2LDYgQEAKICAqIHBsYXRmb3JtLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwppbmRleCAzMTAzMGJmLi5jODhhZTIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC04LDcgKzgsNiBAQAogICogZW52aXJvbm1lbnQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCmluZGV4IGFlNWIzMmYuLjg3ZWJkZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3N1bm9zMzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCSAqIHNpbXBsZSwgaXQgaG9wZWZ1bGx5IHdvcmtzIGluIG1vc3Qgb2J2aW91cyBjYXNlcy4uIEVhc3kgdG8KIAkgKiBmb29sIGl0LCBidXQgdGhpcyBzaG91bGQgY2F0Y2ggbW9zdCBtaXN0YWtlcy4KIAkgKi8KLQlmcmVlcGFnZXMgPSBnZXRfcGFnZV9jYWNoZV9zaXplKCk7CisJZnJlZXBhZ2VzID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9QQUdFUyk7CiAJZnJlZXBhZ2VzID4+PSAxOwogCWZyZWVwYWdlcyArPSBucl9mcmVlX3BhZ2VzKCk7CiAJZnJlZXBhZ2VzICs9IG5yX3N3YXBfcGFnZXM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TCmluZGV4IDExMzZmYzQuLjQxOWE2M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUgQWRyaWFuIE0uIFJvZHJpZ3VleiAoYWRyaWFuQHJlbXVzLnJ1dGdlcnMuZWR1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogCS50ZXh0CiAJLmFsaWduCTQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKaW5kZXggMzQ4YjgyMC4uOGRjYmZiZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKQEAgLTksNyArOSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgVGhvbWFzIEsuIER5YXMgKHRkeWFzQGVkZW4ucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM4LDExICszNyw4IEBACiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL2ZoYy5oPgotI2luY2x1ZGUgPGFzbS9wYm0uaD4KLSNpbmNsdWRlIDxhc20vZWJ1cy5oPgotI2luY2x1ZGUgPGFzbS9pc2EuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vc3RhcmZpcmUuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CkBAIC03NzAsMjE5ICs3NjYsNDQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IF9fY2xvY2tfYXNzaWduX2NvbW1vbih2b2lkIF9faW9tZW0gKmFkZHIsIGNoYXIgKm1vZGVsKQorc3RhdGljIGludCBfX2RldmluaXQgY2xvY2tfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewotCWlmIChtb2RlbFs1XSA9PSAnMCcgJiYgbW9kZWxbNl0gPT0gJzInKSB7Ci0JCW1zdGs0OHQwMl9yZWdzID0gYWRkcjsKLQl9IGVsc2UgaWYobW9kZWxbNV0gPT0gJzAnICYmIG1vZGVsWzZdID09ICc4JykgewotCQltc3RrNDh0MDhfcmVncyA9IGFkZHI7Ci0JCW1zdGs0OHQwMl9yZWdzID0gbXN0azQ4dDA4X3JlZ3MgKyBNT1NURUtfNDhUMDhfNDhUMDI7Ci0JfSBlbHNlIHsKLQkJbXN0azQ4dDU5X3JlZ3MgPSBhZGRyOwotCQltc3RrNDh0MDJfcmVncyA9IG1zdGs0OHQ1OV9yZWdzICsgTU9TVEVLXzQ4VDU5XzQ4VDAyOwotCX0KLX0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CisJY2hhciAqbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJtb2RlbCIsIE5VTEwpOworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICpyZWdzOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgY2xvY2tfYXNzaWduX2Nsa19yZWcoc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpjbGtfcmVnLAotCQkJCQljaGFyICptb2RlbCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CisJaWYgKCFtb2RlbCB8fCAhY2xvY2tfbW9kZWxfbWF0Y2hlcyhtb2RlbCkpCisJCXJldHVybiAtRU5PREVWOwogCi0JYWRkciA9ICgodW5zaWduZWQgbG9uZykgY2xrX3JlZ1swXS5waHlzX2FkZHIgfAotCQkoKCh1bnNpZ25lZCBsb25nKSBjbGtfcmVnWzBdLndoaWNoX2lvKSA8PCAzMlVMKSk7CisJLyogT24gYW4gRW50ZXJwcmlzZSBzeXN0ZW0gdGhlcmUgY2FuIGJlIG11bHRpcGxlIG1vc3RlayBjbG9ja3MuCisJICogV2Ugc2hvdWxkIG9ubHkgbWF0Y2ggdGhlIG9uZSB0aGF0IGlzIG9uIHRoZSBjZW50cmFsIEZIQyBidXMuCisJICovCisJaWYgKCFzdHJjbXAoZHAtPnBhcmVudC0+bmFtZSwgImZoYyIpICYmCisJICAgIHN0cmNtcChkcC0+cGFyZW50LT5wYXJlbnQtPm5hbWUsICJjZW50cmFsIikgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlfX2Nsb2NrX2Fzc2lnbl9jb21tb24oKHZvaWQgX19pb21lbSAqKSBhZGRyLCBtb2RlbCk7Ci19CisJc2l6ZSA9IChvcC0+cmVzb3VyY2VbMF0uZW5kIC0gb3AtPnJlc291cmNlWzBdLnN0YXJ0KSArIDE7CisJcmVncyA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgMCwgc2l6ZSwgImNsb2NrIik7CisJaWYgKCFyZWdzKQorCQlyZXR1cm4gLUVOT01FTTsKIAotc3RhdGljIGludCBfX2luaXQgY2xvY2tfcHJvYmVfY2VudHJhbCh2b2lkKQotewotCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyBjbGtfcmVnWzJdLCAqcHI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcDsKLQljaGFyICptb2RlbDsKLQotCWlmICghY2VudHJhbF9idXMpCi0JCXJldHVybiAwOwotCi0JLyogR2V0IENlbnRyYWwgRkhDJ3MgcHJvbSBub2RlLiAgKi8KLQlkcCA9IGNlbnRyYWxfYnVzLT5jaGlsZC0+cHJvbV9ub2RlOwotCi0JLyogVGhlbiBnZXQgdGhlIGZpcnN0IGNoaWxkIGRldmljZSBiZWxvdyBpdC4gICovCi0JZHAgPSBkcC0+Y2hpbGQ7Ci0KLQl3aGlsZSAoZHApIHsKLQkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJtb2RlbCIsIE5VTEwpOwotCQlpZiAoIW1vZGVsIHx8ICFjbG9ja19tb2RlbF9tYXRjaGVzKG1vZGVsKSkKLQkJCWdvdG8gbmV4dF9zaWJsaW5nOwotCi0JCXByID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JCW1lbWNweShjbGtfcmVnLCBwciwgc2l6ZW9mKGNsa19yZWcpKTsKLQotCQlhcHBseV9maGNfcmFuZ2VzKGNlbnRyYWxfYnVzLT5jaGlsZCwgY2xrX3JlZywgMSk7Ci0JCWFwcGx5X2NlbnRyYWxfcmFuZ2VzKGNlbnRyYWxfYnVzLCBjbGtfcmVnLCAxKTsKLQotCQljbG9ja19hc3NpZ25fY2xrX3JlZyhjbGtfcmVnLCBtb2RlbCk7Ci0JCXJldHVybiAxOwotCi0JbmV4dF9zaWJsaW5nOgotCQlkcCA9IGRwLT5zaWJsaW5nOwotCX0KLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHZvaWQgX19pbml0IGNsb2NrX2lzYV9lYnVzX2Fzc2lnbl9yZWdzKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBjaGFyICptb2RlbCkKLXsKIAlpZiAoIXN0cmNtcChtb2RlbCwgImRzMTI4NyIpIHx8CiAJICAgICFzdHJjbXAobW9kZWwsICJtNTgxOSIpIHx8CiAJICAgICFzdHJjbXAobW9kZWwsICJtNTgxOXAiKSB8fAogCSAgICAhc3RyY21wKG1vZGVsLCAibTU4MjMiKSkgewotCQlkczEyODdfcmVncyA9IHJlcy0+c3RhcnQ7CisJCWRzMTI4N19yZWdzID0gKHVuc2lnbmVkIGxvbmcpIHJlZ3M7CisJfSBlbHNlIGlmIChtb2RlbFs1XSA9PSAnMCcgJiYgbW9kZWxbNl0gPT0gJzInKSB7CisJCW1zdGs0OHQwMl9yZWdzID0gcmVnczsKKwl9IGVsc2UgaWYobW9kZWxbNV0gPT0gJzAnICYmIG1vZGVsWzZdID09ICc4JykgeworCQltc3RrNDh0MDhfcmVncyA9IHJlZ3M7CisJCW1zdGs0OHQwMl9yZWdzID0gbXN0azQ4dDA4X3JlZ3MgKyBNT1NURUtfNDhUMDhfNDhUMDI7CiAJfSBlbHNlIHsKLQkJbXN0azQ4dDU5X3JlZ3MgPSAodm9pZCBfX2lvbWVtICopIHJlcy0+c3RhcnQ7CisJCW1zdGs0OHQ1OV9yZWdzID0gcmVnczsKIAkJbXN0azQ4dDAyX3JlZ3MgPSBtc3RrNDh0NTlfcmVncyArIE1PU1RFS180OFQ1OV80OFQwMjsKIAl9Ci19CiAKLXN0YXRpYyBpbnQgX19pbml0IGNsb2NrX3Byb2JlX29uZV9lYnVzX2RldihzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcCA9IGVkZXYtPnByb21fbm9kZTsKLQljaGFyICptb2RlbDsKLQotCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibW9kZWwiLCBOVUxMKTsKLQlpZiAoIWNsb2NrX21vZGVsX21hdGNoZXMobW9kZWwpKQotCQlyZXR1cm4gMDsKLQotCWNsb2NrX2lzYV9lYnVzX2Fzc2lnbl9yZWdzKCZlZGV2LT5yZXNvdXJjZVswXSwgbW9kZWwpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNsb2NrX3Byb2JlX2VidXModm9pZCkKLXsKLQlzdHJ1Y3QgbGludXhfZWJ1cyAqZWJ1czsKLQotCWZvcl9lYWNoX2VidXMoZWJ1cykgewotCQlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXY7Ci0KLQkJZm9yX2VhY2hfZWJ1c2RldihlZGV2LCBlYnVzKSB7Ci0JCQlpZiAoY2xvY2tfcHJvYmVfb25lX2VidXNfZGV2KGVkZXYpKQotCQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNsb2NrX3Byb2JlX29uZV9pc2FfZGV2KHN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICppZGV2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBpZGV2LT5wcm9tX25vZGU7Ci0JY2hhciAqbW9kZWw7Ci0KLQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIm1vZGVsIiwgTlVMTCk7Ci0JaWYgKCFjbG9ja19tb2RlbF9tYXRjaGVzKG1vZGVsKSkKLQkJcmV0dXJuIDA7Ci0KLQljbG9ja19pc2FfZWJ1c19hc3NpZ25fcmVncygmaWRldi0+cmVzb3VyY2UsIG1vZGVsKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjbG9ja19wcm9iZV9pc2Eodm9pZCkKLXsKLQlzdHJ1Y3Qgc3BhcmNfaXNhX2JyaWRnZSAqaXNhX2JyOwotCi0JZm9yX2VhY2hfaXNhKGlzYV9icikgewotCQlzdHJ1Y3Qgc3BhcmNfaXNhX2RldmljZSAqaXNhX2RldjsKLQotCQlmb3JfZWFjaF9pc2FkZXYoaXNhX2RldiwgaXNhX2JyKSB7Ci0JCQlpZiAoY2xvY2tfcHJvYmVfb25lX2lzYV9kZXYoaXNhX2RldikpCi0JCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUENJICovCi0KLSNpZmRlZiBDT05GSUdfU0JVUwotc3RhdGljIGludCBfX2luaXQgY2xvY2tfcHJvYmVfb25lX3NidXNfZGV2KHN0cnVjdCBzYnVzX2J1cyAqc2J1cywgc3RydWN0IHNidXNfZGV2ICpzZGV2KQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgbW9kZWxbNjRdOwotCXZvaWQgX19pb21lbSAqYWRkcjsKLQotCXByb21fZ2V0c3RyaW5nKHNkZXYtPnByb21fbm9kZSwgIm1vZGVsIiwgbW9kZWwsIHNpemVvZihtb2RlbCkpOwotCWlmICghY2xvY2tfbW9kZWxfbWF0Y2hlcyhtb2RlbCkpCi0JCXJldHVybiAwOwotCi0JcmVzID0gJnNkZXYtPnJlc291cmNlWzBdOwotCWFkZHIgPSBzYnVzX2lvcmVtYXAocmVzLCAwLCAweDgwMFVMLCAiZWVwcm9tIik7Ci0KLQlfX2Nsb2NrX2Fzc2lnbl9jb21tb24oYWRkciwgbW9kZWwpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNsb2NrX3Byb2JlX3NidXModm9pZCkKLXsKLQlzdHJ1Y3Qgc2J1c19idXMgKnNidXM7Ci0KLQlmb3JfZWFjaF9zYnVzKHNidXMpIHsKLQkJc3RydWN0IHNidXNfZGV2ICpzZGV2OwotCi0JCWZvcl9lYWNoX3NidXNkZXYoc2Rldiwgc2J1cykgewotCQkJaWYgKGNsb2NrX3Byb2JlX29uZV9zYnVzX2RldihzYnVzLCBzZGV2KSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IGNsb2NrX3Byb2JlKHZvaWQpCi17Ci0Jc3RhdGljIGludCBpbnZva2VkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaW52b2tlZCkKLQkJcmV0dXJuOwotCWludm9rZWQgPSAxOwotCi0JaWYgKHRoaXNfaXNfc3RhcmZpcmUpIHsKLQkJeHRpbWUudHZfc2VjID0gc3RhcmZpcmVfZ2V0X3RpbWUoKTsKLQkJeHRpbWUudHZfbnNlYyA9IChJTklUSUFMX0pJRkZJRVMgJSBIWikgKiAoTlNFQ19QRVJfU0VDIC8gSFopOwotCQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIC14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgewotCQl4dGltZS50dl9zZWMgPSBoeXBlcnZpc29yX2dldF90aW1lKCk7Ci0JCXh0aW1lLnR2X25zZWMgPSAoSU5JVElBTF9KSUZGSUVTICUgSFopICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKLQkJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBDaGVjayBGSEMgQ2VudHJhbCB0aGVuIEVCVVNzIHRoZW4gSVNBIGJyaWRnZXMgdGhlbiBTQlVTcy4KLQkgKiBUaGF0IHdheSB3ZSBoYW5kbGUgdGhlIHByZXNlbmNlIG9mIG11bHRpcGxlIHByb3Blcmx5LgotCSAqCi0JICogQXMgYSBzcGVjaWFsIGNhc2UsIG1hY2hpbmVzIHdpdGggQ2VudHJhbCBtdXN0IHByb3ZpZGUgdGhlCi0JICogdGltZXIgY2hpcCB0aGVyZS4KLQkgKi8KLQlpZiAoIWNsb2NrX3Byb2JlX2NlbnRyYWwoKSAmJgotI2lmZGVmIENPTkZJR19QQ0kKLQkgICAgIWNsb2NrX3Byb2JlX2VidXMoKSAmJgotCSAgICAhY2xvY2tfcHJvYmVfaXNhKCkgJiYKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TQlVTCi0JICAgICFjbG9ja19wcm9iZV9zYnVzKCkKLSNlbmRpZgotCQkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gY2xvY2sgY2hpcCBmb3VuZC5cbiIpOwotCQlyZXR1cm47Ci0JfQorCXByaW50ayhLRVJOX0lORk8gIiVzOiBDbG9jayByZWdzIGF0ICVwXG4iLCBkcC0+ZnVsbF9uYW1lLCByZWdzKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtOTk5LDggKzgyMCw1MiBAQAogCXNldF9zeXN0ZW1fdGltZSgpOwogCQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjbG9ja19tYXRjaFtdID0geworCXsKKwkJLm5hbWUgPSAiZWVwcm9tIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAicnRjIiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgY2xvY2tfZHJpdmVyID0geworCS5uYW1lCQk9ICJjbG9jayIsCisJLm1hdGNoX3RhYmxlCT0gY2xvY2tfbWF0Y2gsCisJLnByb2JlCQk9IGNsb2NrX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xvY2tfaW5pdCh2b2lkKQoreworCWlmICh0aGlzX2lzX3N0YXJmaXJlKSB7CisJCXh0aW1lLnR2X3NlYyA9IHN0YXJmaXJlX2dldF90aW1lKCk7CisJCXh0aW1lLnR2X25zZWMgPSAoSU5JVElBTF9KSUZGSUVTICUgSFopICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKKwkJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CisJCXJldHVybiAwOworCX0KKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQl4dGltZS50dl9zZWMgPSBoeXBlcnZpc29yX2dldF90aW1lKCk7CisJCXh0aW1lLnR2X25zZWMgPSAoSU5JVElBTF9KSUZGSUVTICUgSFopICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKKwkJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmNsb2NrX2RyaXZlciwgJm9mX2J1c190eXBlKTsKK30KKworLyogTXVzdCBiZSBhZnRlciBzdWJzeXNfaW5pdGNhbGwoKSBzbyB0aGF0IGJ1c3NlcyBhcmUgcHJvYmVkLiAgTXVzdAorICogYmUgYmVmb3JlIGRldmljZV9pbml0Y2FsbCgpIGJlY2F1c2UgdGhpbmdzIGxpa2UgdGhlIFJUQyBkcml2ZXIKKyAqIG5lZWQgdG8gc2VlIHRoZSBjbG9jayByZWdpc3RlcnMuCisgKi8KK2ZzX2luaXRjYWxsKGNsb2NrX2luaXQpOworCiAvKiBUaGlzIGlzIGdldHMgdGhlIG1hc3RlciBUSUNLX0lOVCB0aW1lciBnb2luZy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNwYXJjNjRfaW5pdF90aW1lcnModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwppbmRleCAxZmYzNGIwLi42ODQyMGUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCkBAIC05LDcgKzksNiBAQAogICogSSBsaWtlIHRyYXBzIG9uIHY5LCA6KSkpKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAgLyogZm9yIGppZmZpZXMgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHNiLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RzYi5TCmluZGV4IGEwYzhiYTUuLmVlZGY5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHNiLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90c2IuUwpAQCAtMyw3ICszLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3RzYi5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90dGFibGUuUwppbmRleCBlZTQ1Y2EyLi5kN2QyYThiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHRhYmxlLlMKQEAgLTMsNyArMyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDEsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogCS5nbG9ibAlzcGFyYzY0X3R0YWJsZV90bDAsIHNwYXJjNjRfdHRhYmxlX3RsMQogCS5nbG9ibAl0bDBfaWNwZSwgdGwxX2ljcGUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IGJiMmQ2ODUuLmE5Yjc2NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KIAogLyogI2RlZmluZSBERUJVR19NTkEgKi8KQEAgLTI5MSw3ICsyOTIsOCBAQAogCWlmIChjb3VudCA8IDUpIHsKIAkJbGFzdF90aW1lID0gamlmZmllczsKIAkJY291bnQrKzsKLQkJcHJpbnRrKCJLZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBhdCBUUENbJWx4XVxuIiwgcmVncy0+dHBjKTsKKwkJcHJpbnRrKCJLZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBhdCBUUENbJWx4XSAiLCByZWdzLT50cGMpOworCQlwcmludF9zeW1ib2woIiVzXG4iLCByZWdzLT50cGMpOwogCX0KIAogCWlmICghb2tfZm9yX2tlcm5lbChpbnNuKSB8fCBkaXIgPT0gYm90aCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9hdG9taWMuUyBiL2FyY2gvc3BhcmM2NC9saWIvYXRvbWljLlMKaW5kZXggZmFmODdjMy4uOTYzMzc1MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9hdG9taWMuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL2F0b21pYy5TCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogCiAJLnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvYml0b3BzLlMgYi9hcmNoL3NwYXJjNjQvbGliL2JpdG9wcy5TCmluZGV4IDMxYWZiZmUuLjg5MjQzMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvYml0b3BzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9iaXRvcHMuUwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KIAogCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL21jb3VudC5TIGIvYXJjaC9zcGFyYzY0L2xpYi9tY291bnQuUwppbmRleCAyZWYyZTI2Li45ZTQ1MzRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL21jb3VudC5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvbWNvdW50LlMKQEAgLTUsNyArNSw2IEBACiAgKiBUaGlzIGNhbiBhbHNvIGJlIHR3ZWFrZWQgZm9yIGtlcm5lbCBzdGFjayBvdmVyZmxvdyBkZXRlY3Rpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggZmJiYmViYi4uNTNiOWIxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jIGIvYXJjaC9zcGFyYzY0L21tL2luaXQuYwppbmRleCBjYjc1YTI3Li5kY2JhNGU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKQEAgLTUsNyArNSw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKICAqLwogIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vdWx0cmEuUyBiL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCmluZGV4IGY4NDc5ZmEuLmQ3MGI2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCisrKyBiL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAwIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYyBiL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYwppbmRleCA1NzdiZGU4Li4wYjQyMTM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvcHJvbS9taXNjLmMKKysrIGIvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCmluZGV4IDcxOWM5MDkuLjgxMzVlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4gCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jCmluZGV4IGZjNjY2OWUuLmJjM2RmOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tzeXMuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIApAQCAtMTkwLDggKzE4OSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2ZnNfbWtfY2RldihNS0RFVigzMCwgMCksIFNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLCAic29ja3N5cyIpOwotCiAJZmlsZSA9IGZjaGVjayhyZXQpOwogCS8qIE4uQi4gSXMgdGhpcyB2YWxpZD8gU3VwcG9zZSB0aGUgZl9vcHMgYXJlIGluIGEgbW9kdWxlIC4uLiAqLwogCXNvY2tzeXNfZmlsZV9vcHMgPSAqZmlsZS0+Zl9vcDsKQEAgLTIwNyw1ICsyMDQsNCBAQAogewogCWlmICh1bnJlZ2lzdGVyX2NocmRldigzMCwgInNvY2tzeXMiKSkKIAkJcHJpbnRrICgiQ291bGRuJ3QgdW5yZWdpc3RlciBzb2Nrc3lzIGNoYXJhY3RlciBkZXZpY2VcbiIpOwotCWRldmZzX3JlbW92ZSAoInNvY2tzeXMiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUteDg2XzY0IGIvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQKaW5kZXggZGZkODhiNi4uZGZmZDExOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQKKysrIGIvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQKQEAgLTYsOSArNiwxMSBAQAogCiAjV2UgI3VuZGVmIF9feDg2XzY0X18gZm9yIGtlcm5lbHNwYWNlLCBub3QgZm9yIHVzZXJzcGFjZSB3aGVyZQogI2l0J3MgbmVlZGVkIGZvciBoZWFkZXJzIHRvIHdvcmshCi1DRkxBR1MgKz0gLVVfXyQoU1VCQVJDSClfXyAtZm5vLWJ1aWx0aW4KLVVTRVJfQ0ZMQUdTICs9IC1mbm8tYnVpbHRpbgorQ0ZMQUdTICs9IC1VX18kKFNVQkFSQ0gpX18gLWZuby1idWlsdGluIC1tNjQKK1VTRVJfQ0ZMQUdTICs9IC1mbm8tYnVpbHRpbiAtbTY0CiBDSEVDS0ZMQUdTICArPSAtbTY0CitBRkxBR1MgKz0gLW02NAorTERGTEFHUyArPSAtbSBlbGZfeDg2XzY0CiAKIEVMRl9BUkNIIDo9IGkzODY6eDg2LTY0CiBFTEZfRk9STUFUIDo9IGVsZjY0LXg4Ni02NApAQCAtMTYsMyArMTgsNCBAQAogIyBOb3Qgb24gYWxsIDY0LWJpdCBkaXN0cm9zIC9saWIgaXMgYSBzeW1saW5rIHRvIC9saWI2NC4gUExEIGlzIGFuIGV4YW1wbGUuCiAKIExJTkstJChDT05GSUdfTERfU0NSSVBUX0RZTikgKz0gLVdsLC1ycGF0aCwvbGliNjQKK0xJTksteSArPSAtbTY0CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvaGFyZGRvZ19rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvaGFyZGRvZ19rZXJuLmMKaW5kZXggZDE4YTk3NC4uNjRmZjIyYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2hhcmRkb2dfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9oYXJkZG9nX2tlcm4uYwpAQCAtMzUsNyArMzUsNiBAQAogICovCiAgCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKaW5kZXggNmMyZDRjYy4uZWJlYmFhYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgImxpbnV4L2xpc3QuaCIKICNpbmNsdWRlICJsaW51eC9rZC5oIgogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgotI2luY2x1ZGUgImxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCiAjaW5jbHVkZSAiY2hhbl9rZXJuLmgiCiAjaW5jbHVkZSAiaXJxX3VzZXIuaCIKQEAgLTM3NCw3ICszNzMsNyBAQAogCWludCBlcnI7CiAKIAkvKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGhlcmUgYmVjYXVzZSB3ZSByZWdpc3RlcmVkIHRoZSBpbnRlcnJ1cHQgd2l0aAotCSAqIFNBX0lOVEVSUlVQVCAoc2VlIGxpbmVfc2V0dXBfaXJxKS4qLworCSAqIElSUUZfRElTQUJMRUQgKHNlZSBsaW5lX3NldHVwX2lycSkuKi8KIAogCXNwaW5fbG9ja19pcnEoJmxpbmUtPmxvY2spOwogCWVyciA9IGZsdXNoX2J1ZmZlcihsaW5lKTsKQEAgLTQwNyw3ICs0MDYsNyBAQAogaW50IGxpbmVfc2V0dXBfaXJxKGludCBmZCwgaW50IGlucHV0LCBpbnQgb3V0cHV0LCBzdHJ1Y3QgbGluZSAqbGluZSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbGluZV9kcml2ZXIgKmRyaXZlciA9IGxpbmUtPmRyaXZlcjsKLQlpbnQgZXJyID0gMCwgZmxhZ3MgPSBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET007CisJaW50IGVyciA9IDAsIGZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NOwogCiAJaWYgKGlucHV0KQogCQllcnIgPSB1bV9yZXF1ZXN0X2lycShkcml2ZXItPnJlYWRfaXJxLCBmZCwgSVJRX1JFQUQsCkBAIC02NTUsNyArNjU0LDYgQEAKIAogCWRyaXZlci0+ZHJpdmVyX25hbWUgPSBsaW5lX2RyaXZlci0+bmFtZTsKIAlkcml2ZXItPm5hbWUgPSBsaW5lX2RyaXZlci0+ZGV2aWNlX25hbWU7Ci0JZHJpdmVyLT5kZXZmc19uYW1lID0gbGluZV9kcml2ZXItPmRldmZzX25hbWU7CiAJZHJpdmVyLT5tYWpvciA9IGxpbmVfZHJpdmVyLT5tYWpvcjsKIAlkcml2ZXItPm1pbm9yX3N0YXJ0ID0gbGluZV9kcml2ZXItPm1pbm9yX3N0YXJ0OwogCWRyaXZlci0+dHlwZSA9IGxpbmVfZHJpdmVyLT50eXBlOwpAQCAtNzY5LDcgKzc2Nyw3IEBACiAJc3Bpbl91bmxvY2soJndpbmNoX2hhbmRsZXJfbG9jayk7CiAKIAlpZih1bV9yZXF1ZXN0X2lycShXSU5DSF9JUlEsIGZkLCBJUlFfUkVBRCwgd2luY2hfaW50ZXJydXB0LAotCQkJICBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sCisJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJCSAgIndpbmNoIiwgd2luY2gpIDwgMCkKIAkJcHJpbnRrKCJyZWdpc3Rlcl93aW5jaF9pcnEgLSBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCmluZGV4IDc5MTQ5MzEuLmI0MTQ1MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZyZWJvb3Rfbm90aWZpZXIpOwogCiAJZXJyID0gdW1fcmVxdWVzdF9pcnEoTUNPTlNPTEVfSVJRLCBzb2NrLCBJUlFfUkVBRCwgbWNvbnNvbGVfaW50ZXJydXB0LAotCQkJICAgICBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sCisJCQkgICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJCSAgICAgIm1jb25zb2xlIiwgKHZvaWQgKilzb2NrKTsKIAlpZiAoZXJyKXsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IElSUSBmb3IgbWFuYWdlbWVudCBjb25zb2xlXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggOGM3Mjc5Yi4uNTAxZjk1NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCX0KIAogCWVyciA9IHVtX3JlcXVlc3RfaXJxKGRldi0+aXJxLCBscC0+ZmQsIElSUV9SRUFELCB1bWxfbmV0X2ludGVycnVwdCwKLQkJCSAgICAgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYoZXJyICE9IDApewogCQlwcmludGsoS0VSTl9FUlIgInVtbF9uZXRfb3BlbjogZmFpbGVkIHRvIGdldCBpcnEoJWQpXG4iLCBlcnIpOwogCQllcnIgPSAtRU5FVFVOUkVBQ0g7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKaW5kZXggMTg5ODM5ZS4uNzM3NTVmMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCSAgLnBvcnQgCT0gcG9ydCB9KTsKIAogCWlmKHVtX3JlcXVlc3RfaXJxKFRFTE5FVERfSVJRLCBzb2NrZXRbMF0sIElSUV9SRUFELCBwaXBlX2ludGVycnVwdCwgCi0JCQkgIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgCisJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJCSAgInRlbG5ldGQiLCBjb25uKSl7CiAJCXByaW50ayhLRVJOX0VSUiAicG9ydF9hY2NlcHQgOiBmYWlsZWQgdG8gZ2V0IElSUSBmb3IgIgogCQkgICAgICAgInRlbG5ldGRcbiIpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCWlmKHVtX3JlcXVlc3RfaXJxKEFDQ0VQVF9JUlEsIGZkLCBJUlFfUkVBRCwgcG9ydF9pbnRlcnJ1cHQsIAotCQkJICBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sICJwb3J0IiwKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLCAicG9ydCIsCiAJCQkgIHBvcnQpKXsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZ2V0IElSUSBmb3IgcG9ydCAlZFxuIiwgcG9ydF9udW0pOwogCQlnb3RvIG91dF9jbG9zZTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zc2wuYyBiL2FyY2gvdW0vZHJpdmVycy9zc2wuYwppbmRleCBhNGQ2NDE1Li42ZGFmZDZmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc3NsLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NzbC5jCkBAIC01NCw3ICs1NCw2IEBACiBzdGF0aWMgc3RydWN0IGxpbmVfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSAJCQk9ICJVTUwgc2VyaWFsIGxpbmUiLAogCS5kZXZpY2VfbmFtZSAJCT0gInR0eVMiLAotCS5kZXZmc19uYW1lIAkJPSAidHRzLyIsCiAJLm1ham9yIAkJCT0gVFRZX01BSk9SLAogCS5taW5vcl9zdGFydCAJCT0gNjQsCiAJLnR5cGUgCQkgCT0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zdGRlcnJfY29uc29sZS5jIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGVycl9jb25zb2xlLmMKaW5kZXggNDI5YWU4ZS4uNmQyY2YzMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3N0ZGVycl9jb25zb2xlLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGVycl9jb25zb2xlLmMKQEAgLTgsMTAgKzgsNyBAQAogCiAvKgogICogRG9uJ3QgcmVnaXN0ZXIgYnkgZGVmYXVsdCAtLSBhcyB0aGlzIHJlZ2lzdGVyZXMgdmVyeSBlYXJseSBpbiB0aGUKLSAqIGJvb3QgcHJvY2VzcyBpdCBiZWNvbWVzIHRoZSBkZWZhdWx0IGNvbnNvbGUuICBBbmQgYXMgdGhpcyBpc24ndCBhCi0gKiByZWFsIHR0eSBkcml2ZXIgaW5pdCBpc24ndCBhYmxlIHRvIG9wZW4gL2Rldi9jb25zb2xlIHRoZW4uCi0gKgotICogSW4gbW9zdCBjYXNlcyB0aGlzIGlzbid0IHdoYXQgeW91IHdhbnQgLi4uCisgKiBib290IHByb2Nlc3MgaXQgYmVjb21lcyB0aGUgZGVmYXVsdCBjb25zb2xlLgogICovCiBzdGF0aWMgaW50IHVzZV9zdGRlcnJfY29uc29sZSA9IDA7CiAKQEAgLTQzLDMgKzQwLDIwIEBACiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJzdGRlcnI9Iiwgc3RkZXJyX3NldHVwKTsKKworLyogVGhlIHByZXZpb3VzIGJlaGF2aW9yIG9mIG5vdCB1bnJlZ2lzdGVyaW5nIGxlZCB0byAvZGV2L2NvbnNvbGUgYmVpbmcKKyAqIGltcG9zc2libGUgdG8gb3Blbi4gIE15IEZDNSBmaWxlc3lzdGVtIHN0YXJ0ZWQgaGF2aW5nIGluaXQgZGllLCBhbmQgdGhlCisgKiBzeXN0ZW0gcGFuaWNpbmcgYmVjYXVzZSBvZiB0aGlzLiAgVW5yZWdpc3RlcmluZyBjYXVzZXMgdGhlIHJlYWwKKyAqIGNvbnNvbGUgdG8gYmVjb21lIHRoZSBkZWZhdWx0IGNvbnNvbGUsIGFuZCAvZGV2L2NvbnNvbGUgY2FuIHRoZW4gYmUKKyAqIG9wZW5lZC4gIE1ha2luZyB0aGlzIGFuIGluaXRjYWxsIG1ha2VzIHRoaXMgaGFwcGVuIGxhdGUgZW5vdWdoIHRoYXQKKyAqIHRoZXJlIGlzIG5vIGFkZGVkIHZhbHVlIGluIGR1bXBpbmcgZXZlcnl0aGluZyB0byBzdGRlcnIsIGFuZCB0aGUKKyAqIG5vcm1hbCBjb25zb2xlIGlzIGdvb2QgZW5vdWdoIHRvIHNob3cgeW91IGFsbCBhdmFpbGFibGUgb3V0cHV0LgorICovCitzdGF0aWMgaW50IF9faW5pdCB1bnJlZ2lzdGVyX3N0ZGVycih2b2lkKQoreworCXVucmVnaXN0ZXJfY29uc29sZSgmc3RkZXJyX2NvbnNvbGUpOworCisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwodW5yZWdpc3Rlcl9zdGRlcnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuYyBiL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmMKaW5kZXggNjFkYjhiMi4uODU2ZjU2OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5jCkBAIC02MCw3ICs2MCw2IEBACiBzdGF0aWMgc3RydWN0IGxpbmVfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSAJCQk9ICJVTUwgY29uc29sZSIsCiAJLmRldmljZV9uYW1lIAkJPSAidHR5IiwKLQkuZGV2ZnNfbmFtZSAJCT0gInZjLyIsCiAJLm1ham9yIAkJCT0gVFRZX01BSk9SLAogCS5taW5vcl9zdGFydCAJCT0gMCwKIAkudHlwZSAJCSAJPSBUVFlfRFJJVkVSX1RZUEVfQ09OU09MRSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggMjkwY2VjNmQuLjYwMmQ3MjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAibGludXgvYmxrZGV2LmgiCiAjaW5jbHVkZSAibGludXgvaGRyZWcuaCIKICNpbmNsdWRlICJsaW51eC9pbml0LmgiCi0jaW5jbHVkZSAibGludXgvZGV2ZnNfZnNfa2VybmVsLmgiCiAjaW5jbHVkZSAibGludXgvY2Ryb20uaCIKICNpbmNsdWRlICJsaW51eC9wcm9jX2ZzLmgiCiAjaW5jbHVkZSAibGludXgvY3R5cGUuaCIKQEAgLTYyOCw3ICs2MjcsNiBAQAogCQkJCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7Ci0JY2hhciBmcm9tW3NpemVvZigidWJkL25ubm5uXDAiKV0sIHRvW3NpemVvZigiZGlzY25ubm5uL2Rpc2NcMCIpXTsKIAlpbnQgZXJyOwogCiAJZGlzayA9IGFsbG9jX2Rpc2soMSA8PCBVQkRfU0hJRlQpOwpAQCAtNjM5LDIwICs2MzcsMTAgQEAKIAlkaXNrLT5maXJzdF9taW5vciA9IHVuaXQgPDwgVUJEX1NISUZUOwogCWRpc2stPmZvcHMgPSAmdWJkX2Jsb3BzOwogCXNldF9jYXBhY2l0eShkaXNrLCBzaXplIC8gNTEyKTsKLQlpZihtYWpvciA9PSBNQUpPUl9OUil7CisJaWYobWFqb3IgPT0gTUFKT1JfTlIpCiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAidWJkJWMiLCAnYScgKyB1bml0KTsKLQkJc3ByaW50ZihkaXNrLT5kZXZmc19uYW1lLCAidWJkL2Rpc2MlZCIsIHVuaXQpOwotCQlzcHJpbnRmKGZyb20sICJ1YmQvJWQiLCB1bml0KTsKLQkJc3ByaW50Zih0bywgImRpc2MlZC9kaXNjIiwgdW5pdCk7Ci0JCWVyciA9IGRldmZzX21rX3N5bWxpbmsoZnJvbSwgdG8pOwotCQlpZihlcnIpCi0JCQlwcmludGsoInViZF9uZXdfZGlzayBmYWlsZWQgdG8gbWFrZSBsaW5rIGZyb20gJXMgdG8gIgotCQkJICAgICAgICIlcywgZXJyb3IgPSAlZFxuIiwgZnJvbSwgdG8sIGVycik7Ci0JfQotCWVsc2UgeworCWVsc2UKIAkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJ1YmRfZmFrZSVkIiwgdW5pdCk7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgInViZF9mYWtlL2Rpc2MlZCIsIHVuaXQpOwotCX0KIAogCS8qIHN5c2ZzIHJlZ2lzdGVyIChub3QgZm9yIGlkZSBmYWtlIGRldmljZXMpICovCiAJaWYgKG1ham9yID09IE1BSk9SX05SKSB7CkBAIC04NDEsNyArODI5LDYgQEAKIHsKICAgICAgICAgaW50IGk7CiAKLQlkZXZmc19ta19kaXIoInViZCIpOwogCWlmIChyZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIsICJ1YmQiKSkKIAkJcmV0dXJuIC0xOwogCkBAIC04NTUsNyArODQyLDYgQEAKIAkJY2hhciBuYW1lW3NpemVvZigidWJkX25ublwwIildOwogCiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInViZF8lZCIsIGZha2VfbWFqb3IpOwotCQlkZXZmc19ta19kaXIobmFtZSk7CiAJCWlmIChyZWdpc3Rlcl9ibGtkZXYoZmFrZV9tYWpvciwgInViZCIpKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTg4OCw3ICs4NzQsNyBAQAogCQlyZXR1cm4oMCk7CiAJfQogCWVyciA9IHVtX3JlcXVlc3RfaXJxKFVCRF9JUlEsIHRocmVhZF9mZCwgSVJRX1JFQUQsIHViZF9pbnRyLAotCQkJICAgICBTQV9JTlRFUlJVUFQsICJ1YmQiLCB1YmRfZGV2KTsKKwkJCSAgICAgSVJRRl9ESVNBQkxFRCwgInViZCIsIHViZF9kZXYpOwogCWlmKGVyciAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgInVtX3JlcXVlc3RfaXJxIGZhaWxlZCAtIGVycm5vID0gJWRcbiIsIC1lcnIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3h0ZXJtX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy94dGVybV9rZXJuLmMKaW5kZXggZDI2OWE4MC4uNjAzNmVjOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3h0ZXJtX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMveHRlcm1fa2Vybi5jCkBAIC01NCw3ICs1NCw3IEBACiAJaW5pdF9jb21wbGV0aW9uKCZkYXRhLT5yZWFkeSk7CiAKIAllcnIgPSB1bV9yZXF1ZXN0X2lycShYVEVSTV9JUlEsIHNvY2tldCwgSVJRX1JFQUQsIHh0ZXJtX2ludGVycnVwdCwgCi0JCQkgICAgIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgCisJCQkgICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJCSAgICAgInh0ZXJtIiwgZGF0YSk7CiAJaWYgKGVycil7CiAJCXByaW50ayhLRVJOX0VSUiAieHRlcm1fZmQgOiBmYWlsZWQgdG8gZ2V0IElSUSBmb3IgeHRlcm0sICIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9saW5lLmggYi9hcmNoL3VtL2luY2x1ZGUvbGluZS5oCmluZGV4IDZhYzBmODIuLjI3YmYyZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9saW5lLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2xpbmUuaApAQCAtMTcsNyArMTcsNiBAQAogc3RydWN0IGxpbmVfZHJpdmVyIHsKIAljaGFyICpuYW1lOwogCWNoYXIgKmRldmljZV9uYW1lOwotCWNoYXIgKmRldmZzX25hbWU7CiAJc2hvcnQgbWFqb3I7CiAJc2hvcnQgbWlub3Jfc3RhcnQ7CiAJc2hvcnQgdHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5oCmluZGV4IDkzOWNjNDcuLjkxZDEyOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaApAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2lycS5jIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKaW5kZXggMmZmZGEwMS4uYmZkMGJkYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CisJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpAQCAtNDUxLDEzICs0NTEsMTMgQEAKIAlpcnFfZGVzY1tUSU1FUl9JUlFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAlpcnFfZGVzY1tUSU1FUl9JUlFdLmFjdGlvbiA9IE5VTEw7CiAJaXJxX2Rlc2NbVElNRVJfSVJRXS5kZXB0aCA9IDE7Ci0JaXJxX2Rlc2NbVElNRVJfSVJRXS5oYW5kbGVyID0gJlNJR1ZUQUxSTV9pcnFfdHlwZTsKKwlpcnFfZGVzY1tUSU1FUl9JUlFdLmNoaXAgPSAmU0lHVlRBTFJNX2lycV90eXBlOwogCWVuYWJsZV9pcnEoVElNRVJfSVJRKTsKIAlmb3IgKGkgPSAxOyBpIDwgTlJfSVJRUzsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKIAkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOwotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJm5vcm1hbF9pcnFfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZub3JtYWxfaXJxX3R5cGU7CiAJCWVuYWJsZV9pcnEoaSk7CiAJfQogfQpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJfQogCiAJZXJyID0gdW1fcmVxdWVzdF9pcnEoaXJxLCBmZHNbMF0sIElSUV9SRUFELCBoYW5kbGVyLAotCQkJICAgICBTQV9JTlRFUlJVUFQgfCBTQV9TQU1QTEVfUkFORE9NLCBuYW1lLAorCQkJICAgICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLCBuYW1lLAogCQkJICAgICAodm9pZCAqKSAobG9uZykgZmRzWzBdKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50aygiaW5pdF9haW9faXJxIC0gOiB1bV9yZXF1ZXN0X2lycSBmYWlsZWQsIGVyciA9ICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2lnaW9fa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvc2lnaW9fa2Vybi5jCmluZGV4IDFjMTMwMGYuLjUxYjY3NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NpZ2lvX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9zaWdpb19rZXJuLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gdW1fcmVxdWVzdF9pcnEoU0lHSU9fV1JJVEVfSVJRLCBmZCwgSVJRX1JFQUQsIHNpZ2lvX2ludGVycnVwdCwKLQkJCSAgICAgU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwgIndyaXRlIHNpZ2lvIiwKKwkJCSAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgIndyaXRlIHNpZ2lvIiwKIAkJCSAgICAgTlVMTCk7CiAJaWYoZXJyKXsKIAkJcHJpbnRrKCJ3cml0ZV9zaWdpb19pcnEgOiB1bV9yZXF1ZXN0X2lycSBmYWlsZWQsIGVyciA9ICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMKaW5kZXggYzVjOTg4NS4uNjI0Y2EyMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL21tdS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAkJZnJlZV9wYWdlKG1tdS0+aWQuc3RhY2spOwogCQlwdGVfbG9ja19kZWluaXQodmlydF90b19wYWdlKG1tdS0+bGFzdF9wYWdlX3RhYmxlKSk7CiAJCXB0ZV9mcmVlX2tlcm5lbCgocHRlX3QgKikgbW11LT5sYXN0X3BhZ2VfdGFibGUpOwotICAgICAgICAgICAgICAgIGRlY19wYWdlX3N0YXRlKG5yX3BhZ2VfdGFibGVfcGFnZXMpOworCQlkZWNfem9uZV9wYWdlX3N0YXRlKHZpcnRfdG9fcGFnZShtbXUtPmxhc3RfcGFnZV90YWJsZSksIE5SX1BBR0VUQUJMRSk7CiAjaWZkZWYgQ09ORklHXzNfTEVWRUxfUEdUQUJMRVMKIAkJcG1kX2ZyZWUoKHBtZF90ICopIG1tdS0+bGFzdF9wbWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3VhY2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvdWFjY2Vzcy5jCmluZGV4IDU5OTJjMzIuLjg5MTJjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvdWFjY2Vzcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvdWFjY2Vzcy5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgImxpbnV4L2tlcm5lbC5oIgogI2luY2x1ZGUgImxpbnV4L3N0cmluZy5oIgogI2luY2x1ZGUgImxpbnV4L2ZzLmgiCisjaW5jbHVkZSAibGludXgvaGFyZGlycS5oIgogI2luY2x1ZGUgImxpbnV4L2hpZ2htZW0uaCIKICNpbmNsdWRlICJhc20vcGFnZS5oIgogI2luY2x1ZGUgImFzbS9wZ3RhYmxlLmgiCkBAIC0zOCw3ICszOSw3IEBACiAJcmV0dXJuKCh1bnNpZ25lZCBsb25nKSBwaHlzKTsKIH0KIAotc3RhdGljIGludCBkb19vcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4sIGludCBpc193cml0ZSwKK3N0YXRpYyBpbnQgZG9fb3Bfb25lX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUsCiAJCSBpbnQgKCpvcCkodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCB2b2lkICphcmcpLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC00OSw5ICs1MCwxMSBAQAogCQlyZXR1cm4oLTEpOwogCiAJcGFnZSA9IHBoeXNfdG9fcGFnZShhZGRyKTsKLQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGttYXAocGFnZSkgKyAoYWRkciAmIH5QQUdFX01BU0spOworCWFkZHIgPSAodW5zaWduZWQgbG9uZykga21hcF9hdG9taWMocGFnZSwgS01fVU1MX1VTRVJDT1BZKSArIChhZGRyICYgflBBR0VfTUFTSyk7CisKIAluID0gKCpvcCkoYWRkciwgbGVuLCBhcmcpOwotCWt1bm1hcChwYWdlKTsKKworCWt1bm1hcF9hdG9taWMocGFnZSwgS01fVU1MX1VTRVJDT1BZKTsKIAogCXJldHVybihuKTsKIH0KQEAgLTc3LDcgKzgwLDcgQEAKIAlyZW1haW4gPSBsZW47CiAKIAljdXJyZW50LT50aHJlYWQuZmF1bHRfY2F0Y2hlciA9IGptcGJ1ZjsKLQluID0gZG9fb3AoYWRkciwgc2l6ZSwgaXNfd3JpdGUsIG9wLCBhcmcpOworCW4gPSBkb19vcF9vbmVfcGFnZShhZGRyLCBzaXplLCBpc193cml0ZSwgb3AsIGFyZyk7CiAJaWYobiAhPSAwKXsKIAkJKnJlcyA9IChuIDwgMCA/IHJlbWFpbiA6IDApOwogCQlnb3RvIG91dDsKQEAgLTkxLDcgKzk0LDcgQEAKIAl9CiAKIAl3aGlsZShhZGRyIDwgKChhZGRyICsgcmVtYWluKSAmIFBBR0VfTUFTSykpewotCQluID0gZG9fb3AoYWRkciwgUEFHRV9TSVpFLCBpc193cml0ZSwgb3AsIGFyZyk7CisJCW4gPSBkb19vcF9vbmVfcGFnZShhZGRyLCBQQUdFX1NJWkUsIGlzX3dyaXRlLCBvcCwgYXJnKTsKIAkJaWYobiAhPSAwKXsKIAkJCSpyZXMgPSAobiA8IDAgPyByZW1haW4gOiAwKTsKIAkJCWdvdG8gb3V0OwpAQCAtMTA1LDcgKzEwOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW4gPSBkb19vcChhZGRyLCByZW1haW4sIGlzX3dyaXRlLCBvcCwgYXJnKTsKKwluID0gZG9fb3Bfb25lX3BhZ2UoYWRkciwgcmVtYWluLCBpc193cml0ZSwgb3AsIGFyZyk7CiAJaWYobiAhPSAwKQogCQkqcmVzID0gKG4gPCAwID8gcmVtYWluIDogMCk7CiAJZWxzZSAqcmVzID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWUuYyBiL2FyY2gvdW0va2VybmVsL3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhMmFlNy4uMDAwMDAwMAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSAidXNlcl91dGlsLmgiCi0jaW5jbHVkZSAia2Vybl91dGlsLmgiCi0jaW5jbHVkZSAidXNlci5oIgotI2luY2x1ZGUgInByb2Nlc3MuaCIKLSNpbmNsdWRlICJ0aW1lX3VzZXIuaCIKLSNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgIm9zLmgiCi0KLS8qIFhYWCBUaGlzIHJlYWxseSBuZWVkcyB0byBiZSBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQgaW4gYSBrZXJuZWwgZmlsZSBzaW5jZQotICogaXQncyBpbiA8bGludXgvdGltZS5oPgotICovCi1leHRlcm4gc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljOwotCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgeHRpbWU7Ci0KLXN0cnVjdCB0aW1ldmFsIGxvY2FsX29mZnNldCA9IHsgMCwgMCB9OwotCi12b2lkIHRpbWVyKHZvaWQpCi17Ci0JZ2V0dGltZW9mZGF5KCZ4dGltZSwgTlVMTCk7Ci0JdGltZXJhZGQoJnh0aW1lLCAmbG9jYWxfb2Zmc2V0LCAmeHRpbWUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfaW50ZXJ2YWwoaW50IHRpbWVyX3R5cGUpCi17Ci0JaW50IHVzZWMgPSAxMDAwMDAwL2h6KCk7Ci0Jc3RydWN0IGl0aW1lcnZhbCBpbnRlcnZhbCA9ICgoc3RydWN0IGl0aW1lcnZhbCkgeyB7IDAsIHVzZWMgfSwKLQkJCQkJCQkgIHsgMCwgdXNlYyB9IH0pOwotCi0JaWYoc2V0aXRpbWVyKHRpbWVyX3R5cGUsICZpbnRlcnZhbCwgTlVMTCkgPT0gLTEpCi0JCXBhbmljKCJzZXRpdGltZXIgZmFpbGVkIC0gZXJybm8gPSAlZFxuIiwgZXJybm8pOwotfQotCi12b2lkIGVuYWJsZV90aW1lcih2b2lkKQotewotCXNldF9pbnRlcnZhbChJVElNRVJfVklSVFVBTCk7Ci19Ci0KLXZvaWQgcHJlcGFyZV90aW1lcih2b2lkICogcHRyKQotewotCWludCB1c2VjID0gMTAwMDAwMC9oeigpOwotCSooc3RydWN0IGl0aW1lcnZhbCAqKXB0ciA9ICgoc3RydWN0IGl0aW1lcnZhbCkgeyB7IDAsIHVzZWMgfSwKLQkJCQkJCQkgeyAwLCB1c2VjIH19KTsKLX0KLQotdm9pZCBkaXNhYmxlX3RpbWVyKHZvaWQpCi17Ci0Jc3RydWN0IGl0aW1lcnZhbCBkaXNhYmxlID0gKChzdHJ1Y3QgaXRpbWVydmFsKSB7IHsgMCwgMCB9LCB7IDAsIDAgfX0pOwotCWlmKChzZXRpdGltZXIoSVRJTUVSX1ZJUlRVQUwsICZkaXNhYmxlLCBOVUxMKSA8IDApIHx8Ci0JICAgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgJmRpc2FibGUsIE5VTEwpIDwgMCkpCi0JCXByaW50aygiZGlzbmFibGVfdGltZXIgLSBzZXRpdGltZXIgZmFpbGVkLCBlcnJubyA9ICVkXG4iLAotCQkgICAgICAgZXJybm8pOwotCS8qIElmIHRoZXJlIGFyZSBzaWduYWxzIGFscmVhZHkgcXVldWVkLCBhZnRlciB1bmJsb2NraW5nIGlnbm9yZSB0aGVtICovCi0Jc2V0X2hhbmRsZXIoU0lHQUxSTSwgU0lHX0lHTiwgMCwgLTEpOwotCXNldF9oYW5kbGVyKFNJR1ZUQUxSTSwgU0lHX0lHTiwgMCwgLTEpOwotfQotCi12b2lkIHN3aXRjaF90aW1lcnMoaW50IHRvX3JlYWwpCi17Ci0Jc3RydWN0IGl0aW1lcnZhbCBkaXNhYmxlID0gKChzdHJ1Y3QgaXRpbWVydmFsKSB7IHsgMCwgMCB9LCB7IDAsIDAgfX0pOwotCXN0cnVjdCBpdGltZXJ2YWwgZW5hYmxlID0gKChzdHJ1Y3QgaXRpbWVydmFsKSB7IHsgMCwgMTAwMDAwMC9oeigpIH0sCi0JCQkJCQkJeyAwLCAxMDAwMDAwL2h6KCkgfX0pOwotCWludCBvbGQsIG5ldzsKLQotCWlmKHRvX3JlYWwpewotCQlvbGQgPSBJVElNRVJfVklSVFVBTDsKLQkJbmV3ID0gSVRJTUVSX1JFQUw7Ci0JfQotCWVsc2UgewotCQlvbGQgPSBJVElNRVJfUkVBTDsKLQkJbmV3ID0gSVRJTUVSX1ZJUlRVQUw7Ci0JfQotCi0JaWYoKHNldGl0aW1lcihvbGQsICZkaXNhYmxlLCBOVUxMKSA8IDApIHx8Ci0JICAgKHNldGl0aW1lcihuZXcsICZlbmFibGUsIE5VTEwpKSkKLQkJcHJpbnRrKCJzd2l0Y2hfdGltZXJzIC0gc2V0aXRpbWVyIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKLQkJICAgICAgIGVycm5vKTsKLX0KLQotdm9pZCB1bWxfaWRsZV90aW1lcih2b2lkKQotewotCWlmKHNpZ25hbChTSUdWVEFMUk0sIFNJR19JR04pID09IFNJR19FUlIpCi0JCXBhbmljKCJDb3VsZG4ndCB1bnNldCBTSUdWVEFMUk0gaGFuZGxlciIpOwotCQotCXNldF9oYW5kbGVyKFNJR0FMUk0sIChfX3NpZ2hhbmRsZXJfdCkgYWxhcm1faGFuZGxlciwgCi0JCSAgICBTQV9SRVNUQVJULCBTSUdVU1IxLCBTSUdJTywgU0lHV0lOQ0gsIFNJR1ZUQUxSTSwgLTEpOwotCXNldF9pbnRlcnZhbChJVElNRVJfUkVBTCk7Ci19Ci0KLWV4dGVybiB2b2lkIGt0aW1lX2dldF90cyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKLSNkZWZpbmUgZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUodHMpIGt0aW1lX2dldF90cyh0cykKLQotdm9pZCB0aW1lX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93OwotCi0JaWYoc2lnbmFsKFNJR1ZUQUxSTSwgYm9vdF90aW1lcl9oYW5kbGVyKSA9PSBTSUdfRVJSKQotCQlwYW5pYygiQ291bGRuJ3Qgc2V0IFNJR1ZUQUxSTSBoYW5kbGVyIik7Ci0Jc2V0X2ludGVydmFsKElUSU1FUl9WSVJUVUFMKTsKLQotCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZub3cpOwotCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyA9IC1ub3cudHZfc2VjOwotCXdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgPSAtbm93LnR2X25zZWM7Ci19Ci0KLS8qIERlZmluZWQgaW4gbGludXgva3RpbWVyLmgsIHdoaWNoIGNhbid0IGJlIGluY2x1ZGVkIGhlcmUgKi8KLSNkZWZpbmUgY2xvY2tfd2FzX3NldCgpCQlkbyB7IH0gd2hpbGUgKDApCi0KLXZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZmxhZ3MgPSB0aW1lX2xvY2soKTsKLQlnZXR0aW1lb2ZkYXkodHYsIE5VTEwpOwotCXRpbWVyYWRkKHR2LCAmbG9jYWxfb2Zmc2V0LCB0dik7Ci0JdGltZV91bmxvY2soZmxhZ3MpOwotCWNsb2NrX3dhc19zZXQoKTsKLX0KLQotaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB0aW1ldmFsIHR2X2luOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKSB0di0+dHZfbnNlYyA+PSBVTV9OU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdHZfaW4udHZfc2VjID0gdHYtPnR2X3NlYzsKLQl0dl9pbi50dl91c2VjID0gdHYtPnR2X25zZWMgLyAxMDAwOwotCi0JZmxhZ3MgPSB0aW1lX2xvY2soKTsKLQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0JdGltZXJzdWIoJnR2X2luLCAmbm93LCAmbG9jYWxfb2Zmc2V0KTsKLQl0aW1lX3VubG9jayhmbGFncyk7Ci0KLQlyZXR1cm4oMCk7Ci19Ci0KLXZvaWQgaWRsZV9zbGVlcChpbnQgc2VjcykKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0KLQl0cy50dl9zZWMgPSBzZWNzOwotCXRzLnR2X25zZWMgPSAwOwotCW5hbm9zbGVlcCgmdHMsIE5VTEwpOwotfQotCi0vKiBYWFggVGhpcyBwYXJ0bHkgZHVwbGljYXRlcyBpbml0X2lycV9zaWduYWxzICovCi0KLXZvaWQgdXNlcl90aW1lX2luaXQodm9pZCkKLXsKLQlzZXRfaGFuZGxlcihTSUdWVEFMUk0sIChfX3NpZ2hhbmRsZXJfdCkgYWxhcm1faGFuZGxlciwKLQkJICAgIFNBX09OU1RBQ0sgfCBTQV9SRVNUQVJULCBTSUdVU1IxLCBTSUdJTywgU0lHV0lOQ0gsCi0JCSAgICBTSUdBTFJNLCBTSUdVU1IyLCAtMSk7Ci0Jc2V0X2hhbmRsZXIoU0lHQUxSTSwgKF9fc2lnaGFuZGxlcl90KSBhbGFybV9oYW5kbGVyLAotCQkgICAgU0FfT05TVEFDSyB8IFNBX1JFU1RBUlQsIFNJR1VTUjEsIFNJR0lPLCBTSUdXSU5DSCwKLQkJICAgIFNJR1ZUQUxSTSwgU0lHVVNSMiwgLTEpOwotCXNldF9pbnRlcnZhbChJVElNRVJfVklSVFVBTCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90aW1lX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3RpbWVfa2Vybi5jCmluZGV4IDg3Y2RiYzUuLmQ3ZTA0NGI1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC90aW1lX2tlcm4uYwpAQCAtOTYsMTEgKzk2LDE1IEBACiAKIHZvaWQgZG9fYm9vdF90aW1lcl9oYW5kbGVyKHN0cnVjdCBzaWdjb250ZXh0ICogc2MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwogCiAJQ0hPT1NFX01PREUoKHZvaWQpIChVUFRfU0MoJnJlZ3MucmVncykgPSBzYyksCiAJCSAgICAodm9pZCkgKHJlZ3MucmVncy5za2FzLmlzX3VzZXIgPSAwKSk7CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAlkb190aW1lcigmcmVncyk7CisJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lcl9zcGlubG9jayk7CkBAIC0xMjUsMjUgKzEyOSwxNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKIAlkb190aW1lcihyZWdzKTsKIAotCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCW5zZWNzID0gZ2V0X3RpbWUoKSArIGxvY2FsX29mZnNldDsKIAl4dGltZS50dl9zZWMgPSBuc2VjcyAvIE5TRUNfUEVSX1NFQzsKIAl4dGltZS50dl9uc2VjID0gbnNlY3MgLSB4dGltZS50dl9zZWMgKiBOU0VDX1BFUl9TRUM7CisKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuKElSUV9IQU5ETEVEKTsKLX0KLQotbG9uZyB1bV90aW1lKGludCBfX3VzZXIgKnRsb2MpCi17Ci0JbG9uZyByZXQgPSBnZXRfdGltZSgpIC8gTlNFQ19QRVJfU0VDOwotCi0JaWYoKHRsb2MgIT0gTlVMTCkgJiYgcHV0X3VzZXIocmV0LCB0bG9jKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQpAQCAtMTc0LDE4ICsxNzAsNiBAQAogCWNsb2NrX3dhc19zZXQoKTsKIH0KIAotbG9uZyB1bV9zdGltZShpbnQgX191c2VyICp0cHRyKQotewotCWludCB2YWx1ZTsKLQotCWlmIChnZXRfdXNlcih2YWx1ZSwgdHB0cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzZXRfdGltZSgodW5zaWduZWQgbG9uZyBsb25nKSB2YWx1ZSAqIE5TRUNfUEVSX1NFQyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQogewogCXNldF90aW1lKCh1bnNpZ25lZCBsb25nIGxvbmcpIHR2LT50dl9zZWMgKiBOU0VDX1BFUl9TRUMgKyB0di0+dHZfbnNlYyk7CkBAIC0yMTEsNyArMTk1LDcgQEAKIAlpbnQgZXJyOwogCiAJdXNlcl90aW1lX2luaXQoKTsKLQllcnIgPSByZXF1ZXN0X2lycShUSU1FUl9JUlEsIHVtX3RpbWVyLCBTQV9JTlRFUlJVUFQsICJ0aW1lciIsIE5VTEwpOworCWVyciA9IHJlcXVlc3RfaXJxKFRJTUVSX0lSUSwgdW1fdGltZXIsIElSUUZfRElTQUJMRUQsICJ0aW1lciIsIE5VTEwpOwogCWlmKGVyciAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgInRpbWVyX2luaXQgOiByZXF1ZXN0X2lycSBmYWlsZWQgLSAiCiAJCSAgICAgICAiZXJybm8gPSAlZFxuIiwgLWVycik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90dC9wcm9jZXNzX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jCmluZGV4IGE5YzE0NDMuLjgzNjhjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJcGFuaWMoInJlYWQgZmFpbGVkIGluIHN1c3BlbmRfbmV3X3RocmVhZCwgZXJyID0gJWQiLCAtZXJyKTsKIH0KIAotdm9pZCBzY2hlZHVsZV90YWlsKHRhc2tfdCAqcHJldik7Cit2b2lkIHNjaGVkdWxlX3RhaWwoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKIAogc3RhdGljIHZvaWQgbmV3X3RocmVhZF9oYW5kbGVyKGludCBzaWcpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMgYi9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMKaW5kZXggN2Q1MWRkNy4uMzdjZmU3NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwpAQCAtNDk1LDYgKzQ5NSw3IEBACiB7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCiB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCiAJCQkJIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCiAJCQkJIHZvaWQgKnRleHQsICB2b2lkICp0ZXh0X2VuZCkKQEAgLTUwNCwzICs1MDUsNCBAQAogdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKQogewogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAxNjYwYTc2OS4uNzJhY2RjZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDQgKzEsNSBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorLyogaW4gY2FzZSB0aGUgcHJlcHJvY2Vzc29yIGlzIGEgMzJiaXQgb25lICovCisjdW5kZWYgaTM4NgogI2lmZGVmIENPTkZJR19MRF9TQ1JJUFRfU1RBVElDCiAjaW5jbHVkZSAidW1sLmxkcy5TIgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L21lbS5jCmluZGV4IGM2NDMyZTcuLjU2MGM4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpAQCAtNTUsNyArNTUsNyBAQAogICovCiBzdGF0aWMgaW50IG5leHQoaW50IGZkLCBjaGFyICpidWYsIGludCBzaXplLCBjaGFyIGMpCiB7Ci0JaW50IG47CisJaW50IG4sIGxlbjsKIAljaGFyICpwdHI7CiAKIAl3aGlsZSgocHRyID0gc3RyY2hyKGJ1ZiwgYykpID09IE5VTEwpewpAQCAtNjksNyArNjksMTcgQEAKIAl9CiAKIAlwdHIrKzsKLQltZW1tb3ZlKGJ1ZiwgcHRyLCBzdHJsZW4ocHRyKSArIDEpOworCWxlbiA9IHN0cmxlbihwdHIpOworCW1lbW1vdmUoYnVmLCBwdHIsIGxlbiArIDEpOworCisJLyogUmVmaWxsIHRoZSBidWZmZXIgc28gdGhhdCBpZiB0aGVyZSdzIGEgcGFydGlhbCBzdHJpbmcgdGhhdCB3ZSBjYXJlCisJICogYWJvdXQsIGl0IHdpbGwgYmUgY29tcGxldGVkLCBhbmQgd2UgY2FuIHJlY29nbml6ZSBpdC4KKwkgKi8KKwluID0gcmVhZChmZCwgJmJ1ZltsZW5dLCBzaXplIC0gbGVuIC0gMSk7CisJaWYobiA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlidWZbbGVuICsgbl0gPSAnXDAnOwogCXJldHVybiAxOwogfQogCkBAIC0yMDAsOCArMjEwLDExIEBACiAJCWV4aXQoMSk7CiAJfQogCi0gICAgICAgIGlmIChsc2VlazY0KGZkLCBsZW4sIFNFRUtfU0VUKSA8IDApIHsKLSAJCXBlcnJvcigib3Nfc2Vla19maWxlIik7CisJLyogU2VlayB0byBsZW4gLSAxIGJlY2F1c2Ugd3JpdGluZyBhIGNoYXJhY3RlciB0aGVyZSB3aWxsCisJICogaW5jcmVhc2UgdGhlIGZpbGUgc2l6ZSBieSBvbmUgYnl0ZSwgdG8gdGhlIGRlc2lyZWQgbGVuZ3RoLgorCSAqLworCWlmIChsc2VlazY0KGZkLCBsZW4gLSAxLCBTRUVLX1NFVCkgPCAwKSB7CisJCXBlcnJvcigib3Nfc2Vla19maWxlIik7CiAJCWV4aXQoMSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3VtaWQuYyBiL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jCmluZGV4IDM2MmRiMDUuLjQ4MDkyYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdW1pZC5jCkBAIC02NywzMiArNjcsNTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGFjdHVhbGx5X2RvX3JlbW92ZShjaGFyICpkaXIpCisvKgorICogVW5saW5rcyB0aGUgZmlsZXMgY29udGFpbmVkIGluIEBkaXIgYW5kIHRoZW4gcmVtb3ZlcyBAZGlyLgorICogRG9lc24ndCBoYW5kbGUgZGlyZWN0b3J5IHRyZWVzLCBzbyBpdCdzIG5vdCBsaWtlIHJtIC1yZiwgYnV0IGFsbW9zdCBzdWNoLiBXZQorICogaWdub3JlIEVOT0VOVCBlcnJvcnMgZm9yIGFueXRoaW5nICh0aGV5IGhhcHBlbiwgc3RyYW5nZWx5IGVub3VnaCAtIHBvc3NpYmx5IGR1ZQorICogdG8gcmFjZXMgYmV0d2VlbiBtdWx0aXBsZSBkeWluZyBVTUwgdGhyZWFkcykuCisgKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX2ZpbGVzX2FuZF9kaXIoY2hhciAqZGlyKQogewogCURJUiAqZGlyZWN0b3J5OwogCXN0cnVjdCBkaXJlbnQgKmVudDsKIAlpbnQgbGVuOwogCWNoYXIgZmlsZVsyNTZdOworCWludCByZXQ7CiAKIAlkaXJlY3RvcnkgPSBvcGVuZGlyKGRpcik7Ci0JaWYoZGlyZWN0b3J5ID09IE5VTEwpCi0JCXJldHVybiAtZXJybm87CisJaWYgKGRpcmVjdG9yeSA9PSBOVUxMKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gLWVycm5vOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CiAKLQl3aGlsZSgoZW50ID0gcmVhZGRpcihkaXJlY3RvcnkpKSAhPSBOVUxMKXsKLQkJaWYoIXN0cmNtcChlbnQtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGVudC0+ZF9uYW1lLCAiLi4iKSkKKwl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyZWN0b3J5KSkgIT0gTlVMTCkgeworCQlpZiAoIXN0cmNtcChlbnQtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGVudC0+ZF9uYW1lLCAiLi4iKSkKIAkJCWNvbnRpbnVlOwogCQlsZW4gPSBzdHJsZW4oZGlyKSArIHNpemVvZigiLyIpICsgc3RybGVuKGVudC0+ZF9uYW1lKSArIDE7Ci0JCWlmKGxlbiA+IHNpemVvZihmaWxlKSkKLQkJCXJldHVybiAtRTJCSUc7CisJCWlmIChsZW4gPiBzaXplb2YoZmlsZSkpIHsKKwkJCXJldCA9IC1FMkJJRzsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJc3ByaW50ZihmaWxlLCAiJXMvJXMiLCBkaXIsIGVudC0+ZF9uYW1lKTsKLQkJaWYodW5saW5rKGZpbGUpIDwgMCkKLQkJCXJldHVybiAtZXJybm87CisJCWlmICh1bmxpbmsoZmlsZSkgPCAwICYmIGVycm5vICE9IEVOT0VOVCkgeworCQkJcmV0ID0gLWVycm5vOworCQkJZ290byBvdXQ7CisJCX0KIAl9Ci0JaWYocm1kaXIoZGlyKSA8IDApCi0JCXJldHVybiAtZXJybm87CiAKLQlyZXR1cm4gMDsKKwlpZiAocm1kaXIoZGlyKSA8IDAgJiYgZXJybm8gIT0gRU5PRU5UKSB7CisJCXJldCA9IC1lcnJubzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwljbG9zZWRpcihkaXJlY3RvcnkpOworCXJldHVybiByZXQ7CiB9CiAKIC8qIFRoaXMgc2F5cyB0aGF0IHRoZXJlIGlzbid0IGFscmVhZHkgYSB1c2VyIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGV2ZW4gaWYKQEAgLTEwMyw5ICsxMjQsMTAgQEAKICAqIAlzb21ldGhpbmcgb3RoZXIgdGhhbiBVTUwgc3RpY2tpbmcgc3R1ZmYgaW4gdGhlIGRpcmVjdG9yeQogICoJdGhpcyBib290IHJhY2luZyB3aXRoIGEgc2h1dGRvd24gb2YgdGhlIG90aGVyIFVNTAogICogSW4gYW55IG9mIHRoZXNlIGNhc2VzLCB0aGUgZGlyZWN0b3J5IGlzbid0IHVzZWZ1bCBmb3IgYW55dGhpbmcgZWxzZS4KKyAqCisgKiBCb29sZWFuIHJldHVybjogMSBpZiBpbiB1c2UsIDAgb3RoZXJ3aXNlLgogICovCi0KLXN0YXRpYyBpbnQgbm90X2RlYWRfeWV0KGNoYXIgKmRpcikKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3VtZGlyX3VzZWQoY2hhciAqZGlyKQogewogCWNoYXIgZmlsZVtzdHJsZW4odW1sX2RpcikgKyBVTUlEX0xFTiArIHNpemVvZigiL3BpZFwwIildOwogCWNoYXIgcGlkW3NpemVvZigibm5ubm5cMCIpXSwgKmVuZDsKQEAgLTExMyw3ICsxMzUsNyBAQAogCiAJbiA9IHNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzL3BpZCIsIGRpcik7CiAJaWYobiA+PSBzaXplb2YoZmlsZSkpewotCQlwcmludGsoIm5vdF9kZWFkX3lldCAtIHBpZCBmaWxlbmFtZSB0b28gbG9uZ1xuIik7CisJCXByaW50aygiaXNfdW1kaXJfdXNlZCAtIHBpZCBmaWxlbmFtZSB0b28gbG9uZ1xuIik7CiAJCWVyciA9IC1FMkJJRzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTIzLDcgKzE0NSw3IEBACiAJaWYoZmQgPCAwKSB7CiAJCWZkID0gLWVycm5vOwogCQlpZihmZCAhPSAtRU5PRU5UKXsKLQkJCXByaW50aygibm90X2RlYWRfeWV0IDogY291bGRuJ3Qgb3BlbiBwaWQgZmlsZSAnJXMnLCAiCisJCQlwcmludGsoImlzX3VtZGlyX3VzZWQgOiBjb3VsZG4ndCBvcGVuIHBpZCBmaWxlICclcycsICIKIAkJCSAgICAgICAiZXJyID0gJWRcbiIsIGZpbGUsIC1mZCk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xMzIsMTggKzE1NCwxOCBAQAogCWVyciA9IDA7CiAJbiA9IHJlYWQoZmQsIHBpZCwgc2l6ZW9mKHBpZCkpOwogCWlmKG4gPCAwKXsKLQkJcHJpbnRrKCJub3RfZGVhZF95ZXQgOiBjb3VsZG4ndCByZWFkIHBpZCBmaWxlICclcycsICIKKwkJcHJpbnRrKCJpc191bWRpcl91c2VkIDogY291bGRuJ3QgcmVhZCBwaWQgZmlsZSAnJXMnLCAiCiAJCSAgICAgICAiZXJyID0gJWRcbiIsIGZpbGUsIGVycm5vKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfSBlbHNlIGlmKG4gPT0gMCl7Ci0JCXByaW50aygibm90X2RlYWRfeWV0IDogY291bGRuJ3QgcmVhZCBwaWQgZmlsZSAnJXMnLCAiCisJCXByaW50aygiaXNfdW1kaXJfdXNlZCA6IGNvdWxkbid0IHJlYWQgcGlkIGZpbGUgJyVzJywgIgogCQkgICAgICAgIjAtYnl0ZSByZWFkXG4iLCBmaWxlKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCiAJcCA9IHN0cnRvdWwocGlkLCAmZW5kLCAwKTsKIAlpZihlbmQgPT0gcGlkKXsKLQkJcHJpbnRrKCJub3RfZGVhZF95ZXQgOiBjb3VsZG4ndCBwYXJzZSBwaWQgZmlsZSAnJXMnLCAiCisJCXByaW50aygiaXNfdW1kaXJfdXNlZCA6IGNvdWxkbid0IHBhcnNlIHBpZCBmaWxlICclcycsICIKIAkJICAgICAgICJlcnJubyA9ICVkXG4iLCBmaWxlLCBlcnJubyk7CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KQEAgLTE1MywxOSArMTc1LDMyIEBACiAJCXJldHVybiAxOwogCX0KIAotCWVyciA9IGFjdHVhbGx5X2RvX3JlbW92ZShkaXIpOwotCWlmKGVycikKLQkJcHJpbnRrKCJub3RfZGVhZF95ZXQgLSBhY3R1YWxseV9kb19yZW1vdmUgZmFpbGVkIHdpdGggIgotCQkgICAgICAgImVyciA9ICVkXG4iLCBlcnIpOwotCi0JcmV0dXJuIGVycjsKLQogb3V0X2Nsb3NlOgogCWNsb3NlKGZkKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRyeSB0byByZW1vdmUgdGhlIGRpcmVjdG9yeSBAZGlyIHVubGVzcyBpdCdzIGluIHVzZS4KKyAqIFByZWNvbmRpdGlvbjogQGRpciBleGlzdHMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIDwgMCBmb3IgZmFpbHVyZSBpbiByZW1vdmFsIG9yIGlmIHRoZSBkaXJlY3RvcnkgaXMgaW4KKyAqIHVzZS4KKyAqLworc3RhdGljIGludCB1bWRpcl90YWtlX2lmX2RlYWQoY2hhciAqZGlyKQoreworCWludCByZXQ7CisJaWYgKGlzX3VtZGlyX3VzZWQoZGlyKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXQgPSByZW1vdmVfZmlsZXNfYW5kX2RpcihkaXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCJpc191bWRpcl91c2VkIC0gcmVtb3ZlX2ZpbGVzX2FuZF9kaXIgZmFpbGVkIHdpdGggIgorCQkgICAgICAgImVyciA9ICVkXG4iLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgY3JlYXRlX3BpZF9maWxlKHZvaWQpCiB7CiAJY2hhciBmaWxlW3N0cmxlbih1bWxfZGlyKSArIFVNSURfTEVOICsgc2l6ZW9mKCIvcGlkXDAiKV07CkBAIC0yNDQsMTEgKzI3OSw3IEBACiAJCWlmKGVyciAhPSAtRUVYSVNUKQogCQkJZ290byBlcnI7CiAKLQkJLyogMSAgIC0+IHRoaXMgdW1pZCBpcyBhbHJlYWR5IGluIHVzZQotCQkgKiA8IDAgLT4gd2UgY291bGRuJ3QgcmVtb3ZlIHRoZSB1bWlkIGRpcmVjdG9yeQotCQkgKiBJbiBlaXRoZXIgY2FzZSwgd2UgY2FuJ3QgdXNlIHRoaXMgdW1pZCwgc28gcmV0dXJuIC1FRVhJU1QuCi0JCSAqLwotCQlpZihub3RfZGVhZF95ZXQodG1wKSAhPSAwKQorCQlpZiAodW1kaXJfdGFrZV9pZl9kZWFkKHRtcCkgPCAwKQogCQkJZ290byBlcnI7CiAKIAkJZXJyID0gbWtkaXIodG1wLCAwNzc3KTsKQEAgLTM0NCw5ICszNzUsOSBAQAogCWNoYXIgZGlyW3N0cmxlbih1bWxfZGlyKSArIFVNSURfTEVOICsgMV0sIGVycjsKIAogCXNwcmludGYoZGlyLCAiJXMlcyIsIHVtbF9kaXIsIHVtaWQpOwotCWVyciA9IGFjdHVhbGx5X2RvX3JlbW92ZShkaXIpOworCWVyciA9IHJlbW92ZV9maWxlc19hbmRfZGlyKGRpcik7CiAJaWYoZXJyKQotCQlwcmludGYoInJlbW92ZV91bWlkX2RpciAtIGFjdHVhbGx5X2RvX3JlbW92ZSBmYWlsZWQgd2l0aCAiCisJCXByaW50ZigicmVtb3ZlX3VtaWRfZGlyIC0gcmVtb3ZlX2ZpbGVzX2FuZF9kaXIgZmFpbGVkIHdpdGggIgogCQkgICAgICAgImVyciA9ICVkXG4iLCBlcnIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMgYi9hcmNoL3VtL3NjcmlwdHMvTWFrZWZpbGUucnVsZXMKaW5kZXggMTM0N2RjNi4uODEzMDc3ZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zY3JpcHRzL01ha2VmaWxlLnJ1bGVzCisrKyBiL2FyY2gvdW0vc2NyaXB0cy9NYWtlZmlsZS5ydWxlcwpAQCAtOCw3ICs4LDcgQEAKIFVTRVJfT0JKUyA6PSAkKGZvcmVhY2ggZmlsZSwkKFVTRVJfT0JKUyksJChvYmopLyQoZmlsZSkpCiAKICQoVVNFUl9PQkpTOi5vPS4lKTogXAotCWNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChVU0VSX0NGTEFHUykgJChDRkxBR1NfJCgqRikubykKKwljX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoVVNFUl9DRkxBR1MpICQoQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKICQoVVNFUl9PQkpTKSA6IENIRUNLRkxBR1MgOj0gLURfX2xpbnV4X18gLURsaW51eCAtRF9fU1REQ19fIFwKIAktRHVuaXggLURfX3VuaXhfXyAtRF9fJChTVUJBUkNIKV9fCiAKQEAgLTE3LDcgKzE3LDcgQEAKIFVOUFJPRklMRV9PQkpTIDo9ICQoZm9yZWFjaCBmaWxlLCQoVU5QUk9GSUxFX09CSlMpLCQob2JqKS8kKGZpbGUpKQogCiAkKFVOUFJPRklMRV9PQkpTOi5vPS4lKTogXAotCWNfZmxhZ3MgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChjYWxsIHVucHJvZmlsZSwkKFVTRVJfQ0ZMQUdTKSkgJChDRkxBR1NfJCgqRikubykKKwljX2ZsYWdzID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoY2FsbCB1bnByb2ZpbGUsJChVU0VSX0NGTEFHUykpICQoQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKICQoVU5QUk9GSUxFX09CSlMpIDogQ0hFQ0tGTEFHUyA6PSAtRF9fbGludXhfXyAtRGxpbnV4IC1EX19TVERDX18gXAogCS1EdW5peCAtRF9fdW5peF9fIC1EX18kKFNVQkFSQ0gpX18KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9jaGVja3N1bS5TIGIvYXJjaC91bS9zeXMtaTM4Ni9jaGVja3N1bS5TCmluZGV4IGQ5OGIyZmYuLjYyYzdlNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvY2hlY2tzdW0uUworKysgYi9hcmNoL3VtL3N5cy1pMzg2L2NoZWNrc3VtLlMKQEAgLTI1LDcgKzI1LDYgQEAKICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAkJCQkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZS5jIGIvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2UuYwppbmRleCA2MDI4YmM3Li4yOGJmMDExIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZS5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlLmMKQEAgLTMsNyArMyw2IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJsaW51eC9tbS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCmluZGV4IDFmZjYxNDcuLjI0OTc1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c19jYWxsX3RhYmxlLlMKQEAgLTcsOCArNyw2IEBACiAjZGVmaW5lIHN5c192bTg2b2xkIHN5c19uaV9zeXNjYWxsCiAjZGVmaW5lIHN5c192bTg2IHN5c19uaV9zeXNjYWxsCiAKLSNkZWZpbmUgc3lzX3N0aW1lIHVtX3N0aW1lCi0jZGVmaW5lIHN5c190aW1lIHVtX3RpbWUKICNkZWZpbmUgb2xkX21tYXAgb2xkX21tYXBfaTM4NgogCiAjaW5jbHVkZSAiLi4vLi4vaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL21pc2MuUyBiL2FyY2gvdW0vc3lzLXBwYy9taXNjLlMKaW5kZXggZjBjOTcxZGIuLjEzNjRiN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXBwYy9taXNjLlMKKysrIGIvYXJjaC91bS9zeXMtcHBjL21pc2MuUwpAQCAtMTUsNyArMTUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgInBwY19hc20uaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMKaW5kZXggMzRiMmU4NC4uOWU5YWQ3MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbF90YWJsZS5jCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIF9fTk9fU1RVQlMKIApAQCAtMjAsMTIgKzE5LDYgQEAKIC8qI2RlZmluZSBzeXNfc2V0X3RocmVhZF9hcmVhIHN5c19uaV9zeXNjYWxsCiAjZGVmaW5lIHN5c19nZXRfdGhyZWFkX2FyZWEgc3lzX25pX3N5c2NhbGwqLwogCi0vKiBGb3IgX19OUl90aW1lLiBUaGUgeDg2LTY0IG5hbWUgaG9wZWZ1bGx5IHdpbGwgY2hhbmdlIGZyb20gc3lzX3RpbWU2NCB0bwotICogc3lzX3RpbWUgKHNpbmNlIHRoZSBjdXJyZW50IHNpdHVhdGlvbiBpcyBib2d1cykuIEkndmUgc2VudCBhIHBhdGNoIHRvIGNsZWFudXAKLSAqIHRoaXMuIFJlbW92ZSBiZWxvdyB0aGUgb2Jzb2xldGVkIGxpbmUuICovCi0jZGVmaW5lIHN5c190aW1lNjQgdW1fdGltZQotI2RlZmluZSBzeXNfdGltZSB1bV90aW1lCi0KIC8qIE9uIFVNTCB3ZSBjYWxsIGl0IHRoaXMgd2F5ICgib2xkIiBtZWFucyBpdCdzIG5vdCBtbWFwMikgKi8KICNkZWZpbmUgc3lzX21tYXAgb2xkX21tYXAKIC8qIE9uIHg4Ni02NCBzeXNfdW5hbWUgaXMgYWN0dWFsbHkgc3lzX25ld3VuYW1lIHBsdXMgYSBjb21wYXRpYmlsaXR5IHRyaWNrLgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9hbm5hLmMgYi9hcmNoL3Y4NTAva2VybmVsL2FubmEuYwppbmRleCBkMDUwMmUxLi40MDg5MmQzIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL2FubmEuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL2FubmEuYwpAQCAtMTEsNyArMTEsNiBAQAogICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9hczg1ZXAxLmMgYi9hcmNoL3Y4NTAva2VybmVsL2FzODVlcDEuYwppbmRleCBkNzhjNWU0Li41MzUyZjhhIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL2FzODVlcDEuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL2FzODVlcDEuYwpAQCAtMTEsNyArMTEsNiBAQAogICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9mcGdhODVlMmMuYyBiL2FyY2gvdjg1MC9rZXJuZWwvZnBnYTg1ZTJjLmMKaW5kZXggZDgwOTQ1MS4uY2IwNGE2OSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9mcGdhODVlMmMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL2ZwZ2E4NWUyYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL2didXNfaW50LmMgYi9hcmNoL3Y4NTAva2VybmVsL2didXNfaW50LmMKaW5kZXggOTI5MThiOC4uMjVkNjM2ZSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9nYnVzX2ludC5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvZ2J1c19pbnQuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJCS8qIEZpcnN0IGVuYWJsZSB0aGUgQ1BVIGludGVycnVwdC4gICovCiAJCWludCBydmFsID0KIAkJCXJlcXVlc3RfaXJxIChJUlFfR0lOVChnaW50KSwgZ2J1c19pbnRfaGFuZGxlX2lycSwKLQkJCQkgICAgIFNBX0lOVEVSUlVQVCwKKwkJCQkgICAgIElSUUZfRElTQUJMRUQsCiAJCQkJICAgICAiZ2J1c19pbnRfaGFuZGxlciIsCiAJCQkJICAgICAmZ2ludF9udW1fYWN0aXZlX2lycXNbZ2ludF0pOwogCQlpZiAocnZhbCAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9pcnEuYyBiL2FyY2gvdjg1MC9rZXJuZWwvaXJxLmMKaW5kZXggN2ExNTFjMi4uODU4YzQ1OCAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL2lycS5jCkBAIC02NSwxMCArNjUsMTAgQEAKIAkJCWludCBqOwogCQkJaW50IGNvdW50ID0gMDsKIAkJCWludCBudW0gPSAtMTsKLQkJCWNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IGlycV9kZXNjW2lycV0uaGFuZGxlci0+dHlwZW5hbWU7CisJCQljb25zdCBjaGFyICp0eXBlX25hbWUgPSBpcnFfZGVzY1tpcnFdLmNoaXAtPnR5cGVuYW1lOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKQotCQkJCWlmIChpcnFfZGVzY1tqXS5oYW5kbGVyLT50eXBlbmFtZSA9PSB0eXBlX25hbWUpeworCQkJCWlmIChpcnFfZGVzY1tqXS5jaGlwLT50eXBlbmFtZSA9PSB0eXBlX25hbWUpewogCQkJCQlpZiAoaXJxID09IGopCiAJCQkJCQludW0gPSBjb3VudDsKIAkJCQkJY291bnQrKzsKQEAgLTExNyw3ICsxMTcsNyBAQAogCQlpcnFfZGVzY1tiYXNlX2lycV0uc3RhdHVzICA9IElSUV9ESVNBQkxFRDsKIAkJaXJxX2Rlc2NbYmFzZV9pcnFdLmFjdGlvbiAgPSBOVUxMOwogCQlpcnFfZGVzY1tiYXNlX2lycV0uZGVwdGggICA9IDE7Ci0JCWlycV9kZXNjW2Jhc2VfaXJxXS5oYW5kbGVyID0gaXJxX3R5cGU7CisJCWlycV9kZXNjW2Jhc2VfaXJxXS5jaGlwID0gaXJxX3R5cGU7CiAJCWJhc2VfaXJxICs9IGludGVydmFsOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvbWEuYyBiL2FyY2gvdjg1MC9rZXJuZWwvbWEuYwppbmRleCBiM2RmYmM1Li4yYWE4YWIwIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL21hLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9tYS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvbWUyLmMgYi9hcmNoL3Y4NTAva2VybmVsL21lMi5jCmluZGV4IDY1MjdjMjEuLjE0YjBjODggMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvbWUyLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9tZTIuYwpAQCAtMTEsNyArMTEsNiBAQAogICogV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDU3MjE4YzcuLmM0Zjg0NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9jYi5jIGIvYXJjaC92ODUwL2tlcm5lbC9ydGVfY2IuYwppbmRleCAwYzc5NGI5Li4wZjdmNmNkIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9jYi5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX2NiLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9ydGVfY2JfbGVkcy5jIGIvYXJjaC92ODUwL2tlcm5lbC9ydGVfY2JfbGVkcy5jCmluZGV4IGI2NjJhZDguLmY2NTQwODggMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvcnRlX2NiX2xlZHMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3J0ZV9jYl9sZWRzLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9tYTFfY2IuYyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21hMV9jYi5jCmluZGV4IDM4NzNlMjcuLjlhNzE2ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21hMV9jYi5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21hMV9jYi5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9ydGVfbWJfYV9wY2kuYyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21iX2FfcGNpLmMKaW5kZXggZmZiYjZkMC4uZjM2Yjc3OCAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9ydGVfbWJfYV9wY2kuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3J0ZV9tYl9hX3BjaS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMjksNyArMzI4LDcgQEAKIAogdm9pZAogcGNpYmlvc19hbGlnbl9yZXNvdXJjZSAodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCisJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9tZTJfY2IuYyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21lMl9jYi5jCmluZGV4IGZhYWYzZDkuLjNiZTM1NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21lMl9jYi5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21lMl9jYi5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtMjY0LDcgKzI2Myw3IEBACiAKIAlpZiAoY2JfcGljX2FjdGl2ZV9pcnFzID09IDApIHsKIAkJcnZhbCA9IHJlcXVlc3RfaXJxIChJUlFfQ0JfUElDLCBjYl9waWNfaGFuZGxlX2lycSwKLQkJCQkgICAgU0FfSU5URVJSVVBULCAiY2JfcGljX2hhbmRsZXIiLCAwKTsKKwkJCQkgICAgSVJRRl9ESVNBQkxFRCwgImNiX3BpY19oYW5kbGVyIiwgMCk7CiAJCWlmIChydmFsICE9IDApCiAJCQlyZXR1cm4gcnZhbDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9uYjg1ZV9jYi5jIGIvYXJjaC92ODUwL2tlcm5lbC9ydGVfbmI4NWVfY2IuYwppbmRleCA5OTBiMjBiLi5iNGEwNDVkIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9uYjg1ZV9jYi5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX25iODVlX2NiLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9zaW0uYyBiL2FyY2gvdjg1MC9rZXJuZWwvc2ltLmMKaW5kZXggMTcwNDlhYS4uNDY3YjRhYSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9zaW0uYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3NpbS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3NpbTg1ZTIuYyBiL2FyY2gvdjg1MC9rZXJuZWwvc2ltODVlMi5jCmluZGV4IDkxMTE2MTMuLjU2NmRkZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvc2ltODVlMi5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvc2ltODVlMi5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3N5c2NhbGxzLmMgYi9hcmNoL3Y4NTAva2VybmVsL3N5c2NhbGxzLmMKaW5kZXggOTIyNGNiNi4uMmVjMDcwMCAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9zeXNjYWxscy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvc3lzY2FsbHMuYwpAQCAtMTUsNyArMTUsNiBAQAogICogICAgIGFuZCBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3RlZy5jIGIvYXJjaC92ODUwL2tlcm5lbC90ZWcuYwppbmRleCA0OTVjZjhmLi4yOTBkNTA2IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3RlZy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvdGVnLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Y4NTAva2VybmVsL3RpbWUuYwppbmRleCBjMWU4NWMyLi5hMGI0NjY5IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3RpbWUuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiBzdGF0aWMgaW50IHRpbWVyX2Rldl9pZDsKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKIAl0aW1lcl9pbnRlcnJ1cHQsCi0JU0FfSU5URVJSVVBULAorCUlSUUZfRElTQUJMRUQsCiAJQ1BVX01BU0tfTk9ORSwKIAkidGltZXIiLAogCSZ0aW1lcl9kZXZfaWQsCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYyBiL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jCmluZGV4IDZiY2ZjZmUuLmMwM2FkNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC92ODUwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDViMmZmY2MuLjYzMzk5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Y4NTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExLDcgKzExLDYgQEAKICAqIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzQGdudS5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFZNTElOVVhfU1lNQk9MKF9zeW1fKSBfIyNfc3ltXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9LY29uZmlnIGIvYXJjaC94ODZfNjQvS2NvbmZpZwppbmRleCBjY2M0YTdmLi4yOGRmN2Q4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9LY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L0tjb25maWcKQEAgLTI0LDYgKzI0LDE0IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgTE9DS0RFUF9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgU0VNQVBIT1JFX1NMRUVQRVJTCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtMzcwLDYgKzM3OCw4IEBACiAJCWNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy4KIAkJU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBDUFUgaG90cGx1Zy4KIAorY29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCisJZGVmX2Jvb2wgeQogCiBjb25maWcgSFBFVF9USU1FUgogCWJvb2wKQEAgLTQ1OSwxMCArNDY5LDEwIEBACiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKLQkgIGJ1dCBpdCBpcyBpbmRlcGVkZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKKwkgIGJ1dCBpdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CiAJICB5b3UgY2FuIHN0YXJ0IGFueSBrZXJuZWwgd2l0aCBpdCwgbm90IGp1c3QgTGludXguCiAKLQkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsaWFyaXR5IHRvIHRoZSBleGVjIHN5c3RlbSBjYWxsLgorCSAgVGhlIG5hbWUgY29tZXMgZnJvbSB0aGUgc2ltaWxhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KIAogCSAgSXQgaXMgYW4gb25nb2luZyBwcm9jZXNzIHRvIGJlIGNlcnRhaW4gdGhlIGhhcmR3YXJlIGluIGEgbWFjaGluZQogCSAgaXMgcHJvcGVybHkgc2h1dGRvd24sIHNvIGRvIG5vdCBiZSBzdXJwcmlzZWQgaWYgdGhpcyBjb2RlIGRvZXMgbm90CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9LY29uZmlnLmRlYnVnIGIvYXJjaC94ODZfNjQvS2NvbmZpZy5kZWJ1ZwppbmRleCAxZDkyYWI1Li43NzVkMjExIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gveDg2XzY0L0tjb25maWcuZGVidWcKQEAgLTEsNSArMSw5IEBACiBtZW51ICJLZXJuZWwgaGFja2luZyIKIAorY29uZmlnIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKIGNvbmZpZyBERUJVR19ST0RBVEEKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2Jvb3Qvc2V0dXAuUyBiL2FyY2gveDg2XzY0L2Jvb3Qvc2V0dXAuUwppbmRleCAxMmVhMGI2Li5hNTBiNjMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9ib290L3NldHVwLlMKKysrIGIvYXJjaC94ODZfNjQvYm9vdC9zZXR1cC5TCkBAIC00NSw5ICs0NSw4IEBACiAgKiBBZGRlZCBsb25nIG1vZGUgY2hlY2tpbmcgYW5kIFNTRSBmb3JjZS4gTWFyY2ggMjAwMywgQW5kaSBLbGVlbi4JCQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZS5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlCmluZGV4IGU5MjYzYjQuLjYyYmM1ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9NYWtlZmlsZQpAQCAtMTEsNiArMTEsOSBAQAogCiBvYmotJChDT05GSUdfSUEzMl9BT1VUKSArPSBpYTMyX2FvdXQubwogCithdWRpdC1jbGFzcy0kKENPTkZJR19BVURJVCkgOj0gYXVkaXQubworb2JqLSQoQ09ORklHX0lBMzJfRU1VTEFUSU9OKSArPSAkKGF1ZGl0LWNsYXNzLXkpCisKICQob2JqKS9zeXNjYWxsMzJfc3lzY2FsbC5vOiBcCiAJJChmb3JlYWNoIEYsc3lzZW50ZXIgc3lzY2FsbCwkKG9iaikvdnN5c2NhbGwtJEYuc28pCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvYXVkaXQuYyBiL2FyY2gveDg2XzY0L2lhMzIvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjk0ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9hdWRpdC5jCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlIDxhc20taTM4Ni91bmlzdGQuaD4KKwordW5zaWduZWQgaWEzMl9kaXJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaD4KK34wVQorfTsKKwordW5zaWduZWQgaWEzMl9jaGF0dHJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgorfjBVCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggYzUzNmZhOS4uOWI1YmI0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CQogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsMzIuaD4KKyNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscyAoKGlhMzJfc3lzY2FsbF9lbmQgLSBpYTMyX3N5c19jYWxsX3RhYmxlKS84KQpAQCAtNzUsNiArNzYsMTAgQEAKIAlzd2FwZ3MKIAltb3ZxCSVnczpwZGFfa2VybmVsc3RhY2ssICVyc3AKIAlhZGRxCSQoUERBX1NUQUNLT0ZGU0VUKSwlcnNwCQorCS8qCisJICogTm8gbmVlZCB0byBmb2xsb3cgdGhpcyBpcnFzIG9uL29mZiBzZWN0aW9uOiB0aGUgc3lzY2FsbAorCSAqIGRpc2FibGVkIGlycXMsIGhlcmUgd2UgZW5hYmxlIGl0IHN0cmFpZ2h0IGFmdGVyIGVudHJ5OgorCSAqLwogCXN0aQkKICAJbW92bAklZWJwLCVlYnAJCS8qIHplcm8gZXh0ZW5zaW9uICovCiAJcHVzaHEJJF9fVVNFUjMyX0RTCkBAIC0xMTgsNiArMTIzLDcgQEAKIAltb3ZxCSVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCWNsaQorCVRSQUNFX0lSUVNfT0ZGCiAJdGVzdGwJJF9USUZfQUxMV09SS19NQVNLLHRocmVhZGluZm9fZmxhZ3MoJXIxMCkKIAlqbnoJaW50X3JldF9mcm9tX3N5c19jYWxsCiAJYW5kbCAgICAkflRTX0NPTVBBVCx0aHJlYWRpbmZvX3N0YXR1cyglcjEwKQpAQCAtMTMyLDYgKzEzOCw3IEBACiAJQ0ZJX1JFR0lTVEVSIHJzcCxyY3gKIAltb3ZsCSRWU1lTQ0FMTDMyX1NZU0VYSVQsJWVkeAkvKiBVc2VyICVlaXAgKi8KIAlDRklfUkVHSVNURVIgcmlwLHJkeAorCVRSQUNFX0lSUVNfT04KIAlzd2FwZ3MKIAlzdGkJCS8qIHN0aSBvbmx5IHRha2VzIGVmZmVjdCBhZnRlciB0aGUgbmV4dCBpbnN0cnVjdGlvbiAqLwogCS8qIHN5c2V4aXQgKi8KQEAgLTE4Niw2ICsxOTMsMTAgQEAKIAltb3ZsCSVlc3AsJXI4ZAogCUNGSV9SRUdJU1RFUglyc3AscjgKIAltb3ZxCSVnczpwZGFfa2VybmVsc3RhY2ssJXJzcAorCS8qCisJICogTm8gbmVlZCB0byBmb2xsb3cgdGhpcyBpcnFzIG9uL29mZiBzZWN0aW9uOiB0aGUgc3lzY2FsbAorCSAqIGRpc2FibGVkIGlycXMgYW5kIGhlcmUgd2UgZW5hYmxlIGl0IHN0cmFpZ2h0IGFmdGVyIGVudHJ5OgorCSAqLwogCXN0aQogCVNBVkVfQVJHUyA4LDEsMQogCW1vdmwgCSVlYXgsJWVheAkvKiB6ZXJvIGV4dGVuc2lvbiAqLwpAQCAtMjIwLDYgKzIzMSw3IEBACiAJbW92cSAlcmF4LFJBWC1BUkdPRkZTRVQoJXJzcCkKIAlHRVRfVEhSRUFEX0lORk8oJXIxMCkKIAljbGkKKwlUUkFDRV9JUlFTX09GRgogCXRlc3RsICRfVElGX0FMTFdPUktfTUFTSyx0aHJlYWRpbmZvX2ZsYWdzKCVyMTApCiAJam56ICBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKIAlhbmRsICR+VFNfQ09NUEFULHRocmVhZGluZm9fc3RhdHVzKCVyMTApCkBAIC0yMjgsNiArMjQwLDcgQEAKIAlDRklfUkVHSVNURVIgcmlwLHJjeAogCW1vdmwgRUZMQUdTLUFSR09GRlNFVCglcnNwKSwlcjExZAkKIAkvKkNGSV9SRUdJU1RFUiByZmxhZ3MscjExKi8KKwlUUkFDRV9JUlFTX09OCiAJbW92bCBSU1AtQVJHT0ZGU0VUKCVyc3ApLCVlc3AKIAlDRklfUkVTVE9SRSByc3AKIAlzd2FwZ3MKQEAgLTI4Niw3ICsyOTksMTEgQEAKIAkvKkNGSV9SRUxfT0ZGU0VUCXJmbGFncyxFRkxBR1MtUklQKi8KIAkvKkNGSV9SRUxfT0ZGU0VUCWNzLENTLVJJUCovCiAJQ0ZJX1JFTF9PRkZTRVQJcmlwLFJJUC1SSVAKLQlzd2FwZ3MJCisJc3dhcGdzCisJLyoKKwkgKiBObyBuZWVkIHRvIGZvbGxvdyB0aGlzIGlycXMgb24vb2ZmIHNlY3Rpb246IHRoZSBzeXNjYWxsCisJICogZGlzYWJsZWQgaXJxcyBhbmQgaGVyZSB3ZSBlbmFibGUgaXQgc3RyYWlnaHQgYWZ0ZXIgZW50cnk6CisJICovCiAJc3RpCiAJbW92bCAlZWF4LCVlYXgKIAlwdXNocSAlcmF4CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL3g4Nl82NC9pYTMyL3N5c19pYTMyLmMKaW5kZXggZGM4ODE1NC4uOWMxMzA5OSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvc3lzX2lhMzIuYwpAQCAtMjAsNyArMjAsNiBAQAogICogVGhpcyBzaG91bGQgYmUgZml4ZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4gCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYWViOWM1Ni4uYjVhYWVhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQAogCQlzZXR1cDY0Lm8gYm9vdGZsYWcubyBlODIwLm8gcmVib290Lm8gcXVpcmtzLm8gaTgyMzcubyBcCiAJCXBjaS1kbWEubyBwY2ktbm9tbXUubyBhbHRlcm5hdGl2ZS5vCiAKK29iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KIG9iai0kKENPTkZJR19YODZfTUNFKSAgICAgICAgICs9IG1jZS5vCiBvYmotJChDT05GSUdfWDg2X01DRV9JTlRFTCkJKz0gbWNlX2ludGVsLm8KIG9iai0kKENPTkZJR19YODZfTUNFX0FNRCkJKz0gbWNlX2FtZC5vCkBAIC0zNSw2ICszNiw3IEBACiBvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBwbXRpbWVyLm8KIG9iai0kKENPTkZJR19YODZfVlNNUCkJCSs9IHZzbXAubwogb2JqLSQoQ09ORklHX0s4X05CKQkJKz0gazgubworb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXQubwogCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDA5MWJjNzkuLjVlYmY2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMjYsNyArMjYsNiBAQAogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCmluZGV4IGExOTVlZjAuLjU4YWY4ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCkBAIC05LDcgKzksNiBAQAogICogCiAgKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jCmluZGV4IGIyZWFkOTEuLjJiOGNlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FwaWMuYwpAQCAtMTQsNyArMTQsNiBAQAogICoJTWlrYWVsIFBldHRlcnNzb24JOglQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2F1ZGl0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDY3YWE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2F1ZGl0LmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitzdGF0aWMgdW5zaWduZWQgZGlyX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGF0dHJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgorfjBVCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9jbGFzc2VzX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KKwlleHRlcm4gX191MzIgaWEzMl9kaXJfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgaWEzMl9jaGF0dHJfY2xhc3NbXTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEVfMzIsIGlhMzJfZGlyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFJfMzIsIGlhMzJfY2hhdHRyX2NsYXNzKTsKKyNlbmRpZgorCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFIsIGNoYXR0cl9jbGFzcyk7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwoYXVkaXRfY2xhc3Nlc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCmluZGV4IDllOTRkODMuLmI4ZWVlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwpAQCAtOCw3ICs4LDYgQEAKICAqICBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggMjJjYWM0NC4uZDQ2NGRkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTI4LDcgKzI4LDYgQEAKICAqLwogCiAjZGVmaW5lIEFTU0VNQkxZIDEKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CkBAIC00MiwxMyArNDEsMjQgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KIAogCS5jb2RlNjQKIAogI2lmbmRlZiBDT05GSUdfUFJFRU1QVAogI2RlZmluZSByZXRpbnRfa2VybmVsIHJldGludF9yZXN0b3JlX2FyZ3MKICNlbmRpZgkKLQkKKworCisubWFjcm8gVFJBQ0VfSVJRU19JUkVUUSBvZmZzZXQ9QVJHT0ZGU0VUCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJYnQgICAkOSxFRkxBR1MtXG9mZnNldCglcnNwKQkvKiBpbnRlcnJ1cHRzIG9mZj8gKi8KKwlqbmMgIDFmCisJVFJBQ0VfSVJRU19PTgorMToKKyNlbmRpZgorLmVuZG0KKwogLyoKICAqIEMgY29kZSBpcyBub3Qgc3VwcG9zZWQgdG8ga25vdyBhYm91dCB1bmRlZmluZWQgdG9wIG9mIHN0YWNrLiBFdmVyeSB0aW1lIAogICogYSBDIGZ1bmN0aW9uIHdpdGggYW4gcHRfcmVncyBhcmd1bWVudCBpcyBjYWxsZWQgZnJvbSB0aGUgU1lTQ0FMTCBiYXNlZCAKQEAgLTE5NSw2ICsyMDUsMTAgQEAKIAlzd2FwZ3MKIAltb3ZxCSVyc3AsJWdzOnBkYV9vbGRyc3AgCiAJbW92cQklZ3M6cGRhX2tlcm5lbHN0YWNrLCVyc3AKKwkvKgorCSAqIE5vIG5lZWQgdG8gZm9sbG93IHRoaXMgaXJxcyBvZmYvb24gc2VjdGlvbiAtIGl0J3Mgc3RyYWlnaHQKKwkgKiBhbmQgc2hvcnQ6CisJICovCiAJc3RpCQkJCQkKIAlTQVZFX0FSR1MgOCwxCiAJbW92cSAgJXJheCxPUklHX1JBWC1BUkdPRkZTRVQoJXJzcCkgCkBAIC0yMjAsMTAgKzIzNCwxNSBAQAogc3lzcmV0X2NoZWNrOgkJCiAJR0VUX1RIUkVBRF9JTkZPKCVyY3gpCiAJY2xpCisJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIHRocmVhZGluZm9fZmxhZ3MoJXJjeCksJWVkeAogCWFuZGwgJWVkaSwlZWR4CiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJam56ICBzeXNyZXRfY2FyZWZ1bCAKKwkvKgorCSAqIHN5c3JldHEgd2lsbCByZS1lbmFibGUgaW50ZXJydXB0czoKKwkgKi8KKwlUUkFDRV9JUlFTX09OCiAJbW92cSBSSVAtQVJHT0ZGU0VUKCVyc3ApLCVyY3gKIAlDRklfUkVHSVNURVIJcmlwLHJjeAogCVJFU1RPUkVfQVJHUyAwLC1BUkdfU0tJUCwxCkBAIC0yMzgsNiArMjU3LDcgQEAKIAlDRklfUkVTVE9SRV9TVEFURQogCWJ0ICRUSUZfTkVFRF9SRVNDSEVELCVlZHgKIAlqbmMgc3lzcmV0X3NpZ25hbAorCVRSQUNFX0lSUVNfT04KIAlzdGkKIAlwdXNocSAlcmRpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDgKQEAgLTI0OCw2ICsyNjgsNyBAQAogCiAJLyogSGFuZGxlIGEgc2lnbmFsICovIAogc3lzcmV0X3NpZ25hbDoKKwlUUkFDRV9JUlFTX09OCiAJc3RpCiAJdGVzdGwgJChfVElGX1NJR1BFTkRJTkd8X1RJRl9OT1RJRllfUkVTVU1FfF9USUZfU0lOR0xFU1RFUCksJWVkeAogCWp6ICAgIDFmCkBAIC0yNjIsNiArMjgzLDcgQEAKIAkvKiBVc2UgSVJFVCBiZWNhdXNlIHVzZXIgY291bGQgaGF2ZSBjaGFuZ2VkIGZyYW1lLiBUaGlzCiAJICAgd29ya3MgYmVjYXVzZSBwdHJlZ3NjYWxsX2NvbW1vbiBoYXMgY2FsbGVkIEZJWFVQX1RPUF9PRl9TVEFDSy4gKi8KIAljbGkKKwlUUkFDRV9JUlFTX09GRgogCWptcCBpbnRfd2l0aF9jaGVjawogCQogYmFkc3lzOgpAQCAtMzEwLDYgKzMzMiw3IEBACiAJQ0ZJX1JFTF9PRkZTRVQJcjEwLFIxMC1BUkdPRkZTRVQKIAlDRklfUkVMX09GRlNFVAlyMTEsUjExLUFSR09GRlNFVAogCWNsaQorCVRSQUNFX0lSUVNfT0ZGCiAJdGVzdGwgJDMsQ1MtQVJHT0ZGU0VUKCVyc3ApCiAJamUgcmV0aW50X3Jlc3RvcmVfYXJncwogCW1vdmwgJF9USUZfQUxMV09SS19NQVNLLCVlZGkKQEAgLTMyOCw2ICszNTEsNyBAQAogaW50X2NhcmVmdWw6CiAJYnQgJFRJRl9ORUVEX1JFU0NIRUQsJWVkeAogCWpuYyAgaW50X3ZlcnlfY2FyZWZ1bAorCVRSQUNFX0lSUVNfT04KIAlzdGkKIAlwdXNocSAlcmRpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDgKQEAgLTMzNSwxMCArMzU5LDEyIEBACiAJcG9wcSAlcmRpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAJY2xpCisJVFJBQ0VfSVJRU19PRkYKIAlqbXAgaW50X3dpdGhfY2hlY2sKIAogCS8qIGhhbmRsZSBzaWduYWxzIGFuZCB0cmFjaW5nIC0tIGJvdGggcmVxdWlyZSBhIGZ1bGwgc3RhY2sgZnJhbWUgKi8KIGludF92ZXJ5X2NhcmVmdWw6CisJVFJBQ0VfSVJRU19PTgogCXN0aQogCVNBVkVfUkVTVAogCS8qIENoZWNrIGZvciBzeXNjYWxsIGV4aXQgdHJhY2UgKi8JCkBAIC0zNTIsNiArMzc4LDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKIAlhbmRsICR+KF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TSU5HTEVTVEVQKSwlZWRpCiAJY2xpCisJVFJBQ0VfSVJRU19PRkYKIAlqbXAgaW50X3Jlc3RvcmVfcmVzdAogCQogaW50X3NpZ25hbDoKQEAgLTM2NCw2ICszOTEsNyBAQAogaW50X3Jlc3RvcmVfcmVzdDoKIAlSRVNUT1JFX1JFU1QKIAljbGkKKwlUUkFDRV9JUlFTX09GRgogCWptcCBpbnRfd2l0aF9jaGVjawogCUNGSV9FTkRQUk9DCiBFTkQoaW50X3JldF9mcm9tX3N5c19jYWxsKQpAQCAtNDg1LDYgKzUxMywxMCBAQAogCXN3YXBncwkKIDE6CWluY2wJJWdzOnBkYV9pcnFjb3VudAkjIFJFRC1QRU4gc2hvdWxkIGNoZWNrIHByZWVtcHQgY291bnQKIAljbW92ZXEgJWdzOnBkYV9pcnFzdGFja3B0ciwlcnNwCisJLyoKKwkgKiBXZSBlbnRlcmVkIGFuIGludGVycnVwdCBjb250ZXh0IC0gaXJxcyBhcmUgb2ZmOgorCSAqLworCVRSQUNFX0lSUVNfT0ZGCiAJY2FsbCBcZnVuYwogCS5lbmRtCiAKQEAgLTQ5NCw2ICs1MjYsNyBAQAogCS8qIDAoJXJzcCk6IG9sZHJzcC1BUkdPRkZTRVQgKi8KIHJldF9mcm9tX2ludHI6CiAJY2xpCQorCVRSQUNFX0lSUVNfT0ZGCiAJZGVjbCAlZ3M6cGRhX2lycWNvdW50CiAJbGVhdmVxCiAJQ0ZJX0RFRl9DRkFfUkVHSVNURVIJcnNwCkBAIC01MTYsOSArNTQ5LDIxIEBACiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJam56ICByZXRpbnRfY2FyZWZ1bAogcmV0aW50X3N3YXBnczoJIAkKKwkvKgorCSAqIFRoZSBpcmV0cSBjb3VsZCByZS1lbmFibGUgaW50ZXJydXB0czoKKwkgKi8KKwljbGkKKwlUUkFDRV9JUlFTX0lSRVRRCiAJc3dhcGdzIAorCWptcCByZXN0b3JlX2FyZ3MKKwogcmV0aW50X3Jlc3RvcmVfYXJnczoJCQkJCiAJY2xpCisJLyoKKwkgKiBUaGUgaXJldHEgY291bGQgcmUtZW5hYmxlIGludGVycnVwdHM6CisJICovCisJVFJBQ0VfSVJRU19JUkVUUQorcmVzdG9yZV9hcmdzOgogCVJFU1RPUkVfQVJHUyAwLDgsMAkJCQkJCQogaXJldF9sYWJlbDoJCiAJaXJldHEKQEAgLTUzMSw2ICs1NzYsNyBAQAogCS8qIHJ1bm5pbmcgd2l0aCBrZXJuZWwgZ3MgKi8KIGJhZF9pcmV0OgogCW1vdnEgJDExLCVyZGkJLyogU0lHU0VHViAqLworCVRSQUNFX0lSUVNfT04KIAlzdGkKIAlqbXAgZG9fZXhpdAkJCQogCS5wcmV2aW91cwkKQEAgLTU0MCw2ICs1ODYsNyBAQAogCUNGSV9SRVNUT1JFX1NUQVRFCiAJYnQgICAgJFRJRl9ORUVEX1JFU0NIRUQsJWVkeAogCWpuYyAgIHJldGludF9zaWduYWwKKwlUUkFDRV9JUlFTX09OCiAJc3RpCiAJcHVzaHEgJXJkaQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAk4CkBAIC01NDgsMTEgKzU5NSwxMyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAktOAogCUdFVF9USFJFQURfSU5GTyglcmN4KQogCWNsaQorCVRSQUNFX0lSUVNfT0ZGCiAJam1wIHJldGludF9jaGVjawogCQogcmV0aW50X3NpZ25hbDoKIAl0ZXN0bCAkKF9USUZfU0lHUEVORElOR3xfVElGX05PVElGWV9SRVNVTUV8X1RJRl9TSU5HTEVTVEVQKSwlZWR4CiAJanogICAgcmV0aW50X3N3YXBncworCVRSQUNFX0lSUVNfT04KIAlzdGkKIAlTQVZFX1JFU1QKIAltb3ZxICQtMSxPUklHX1JBWCglcnNwKSAJCQkKQEAgLTU2MSw2ICs2MTAsNyBAQAogCWNhbGwgZG9fbm90aWZ5X3Jlc3VtZQogCVJFU1RPUkVfUkVTVAogCWNsaQorCVRSQUNFX0lSUVNfT0ZGCiAJbW92bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVkaQogCUdFVF9USFJFQURfSU5GTyglcmN4KQogCWptcCByZXRpbnRfY2hlY2sKQEAgLTY2Nyw3ICs3MTcsNyBAQAogCiAJLyogZXJyb3IgY29kZSBpcyBvbiB0aGUgc3RhY2sgYWxyZWFkeSAqLwogCS8qIGhhbmRsZSBOTUkgbGlrZSBleGNlcHRpb25zIHRoYXQgY2FuIGhhcHBlbiBldmVyeXdoZXJlICovCi0JLm1hY3JvIHBhcmFub2lkZW50cnkgc3ltLCBpc3Q9MAorCS5tYWNybyBwYXJhbm9pZGVudHJ5IHN5bSwgaXN0PTAsIGlycXRyYWNlPTEKIAlTQVZFX0FMTAogCWNsZAogCW1vdmwgJDEsJWVieApAQCAtNjkyLDggKzc0Miw3MyBAQAogCWFkZHEJJEVYQ0VQVElPTl9TVEtTWiwgcGVyX2NwdV9faW5pdF90c3MgKyBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXJicCkKIAkuZW5kaWYKIAljbGkKKwkuaWYgXGlycXRyYWNlCisJVFJBQ0VfSVJRU19PRkYKKwkuZW5kaWYKIAkuZW5kbQotCQorCisJLyoKKyAJICogIlBhcmFub2lkIiBleGl0IHBhdGggZnJvbSBleGNlcHRpb24gc3RhY2suCisgIAkgKiBQYXJhbm9pZCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBieSBOTUlzIGFuZCBjYW5ub3QgdGFrZQorCSAqIGFueSBrZXJuZWwgc3RhdGUgZm9yIGdyYW50ZWQuCisJICogV2UgZG9uJ3QgZG8ga2VybmVsIHByZWVtcHRpb24gY2hlY2tzIGhlcmUsIGJlY2F1c2Ugb25seQorCSAqIE5NSSBzaG91bGQgYmUgY29tbW9uIGFuZCBpdCBkb2VzIG5vdCBlbmFibGUgSVJRcyBhbmQKKwkgKiBjYW5ub3QgZ2V0IHJlc2NoZWR1bGUgdGlja3MuCisJICoKKwkgKiAidHJhY2UiIGlzIDAgZm9yIHRoZSBOTUkgaGFuZGxlciBvbmx5LCBiZWNhdXNlIGlycS10cmFjaW5nCisJICogaXMgZnVuZGFtZW50YWxseSBOTUktdW5zYWZlLiAod2UgY2Fubm90IGNoYW5nZSB0aGUgc29mdCBhbmQKKwkgKiBoYXJkIGZsYWdzIGF0IG9uY2UsIGF0b21pY2FsbHkpCisJICovCisJLm1hY3JvIHBhcmFub2lkZXhpdCB0cmFjZT0xCisJLyogZWJ4OglubyBzd2FwZ3MgZmxhZyAqLworcGFyYW5vaWRfZXhpdFx0cmFjZToKKwl0ZXN0bCAlZWJ4LCVlYngJCQkJLyogc3dhcGdzIG5lZWRlZD8gKi8KKwlqbnogcGFyYW5vaWRfcmVzdG9yZVx0cmFjZQorCXRlc3RsICQzLENTKCVyc3ApCisJam56ICAgcGFyYW5vaWRfdXNlcnNwYWNlXHRyYWNlCitwYXJhbm9pZF9zd2FwZ3NcdHJhY2U6CisJVFJBQ0VfSVJRU19JUkVUUSAwCisJc3dhcGdzCitwYXJhbm9pZF9yZXN0b3JlXHRyYWNlOgorCVJFU1RPUkVfQUxMIDgKKwlpcmV0cQorcGFyYW5vaWRfdXNlcnNwYWNlXHRyYWNlOgorCUdFVF9USFJFQURfSU5GTyglcmN4KQorCW1vdmwgdGhyZWFkaW5mb19mbGFncyglcmN4KSwlZWJ4CisJYW5kbCAkX1RJRl9XT1JLX01BU0ssJWVieAorCWp6IHBhcmFub2lkX3N3YXBnc1x0cmFjZQorCW1vdnEgJXJzcCwlcmRpCQkJLyogJnB0X3JlZ3MgKi8KKwljYWxsIHN5bmNfcmVncworCW1vdnEgJXJheCwlcnNwCQkJLyogc3dpdGNoIHN0YWNrIGZvciBzY2hlZHVsaW5nICovCisJdGVzdGwgJF9USUZfTkVFRF9SRVNDSEVELCVlYngKKwlqbnogcGFyYW5vaWRfc2NoZWR1bGVcdHJhY2UKKwltb3ZsICVlYngsJWVkeAkJCS8qIGFyZzM6IHRocmVhZCBmbGFncyAqLworCS5pZiBcdHJhY2UKKwlUUkFDRV9JUlFTX09OCisJLmVuZGlmCisJc3RpCisJeG9ybCAlZXNpLCVlc2kgCQkJLyogYXJnMjogb2xkc2V0ICovCisJbW92cSAlcnNwLCVyZGkgCQkJLyogYXJnMTogJnB0X3JlZ3MgKi8KKwljYWxsIGRvX25vdGlmeV9yZXN1bWUKKwljbGkKKwkuaWYgXHRyYWNlCisJVFJBQ0VfSVJRU19PRkYKKwkuZW5kaWYKKwlqbXAgcGFyYW5vaWRfdXNlcnNwYWNlXHRyYWNlCitwYXJhbm9pZF9zY2hlZHVsZVx0cmFjZToKKwkuaWYgXHRyYWNlCisJVFJBQ0VfSVJRU19PTgorCS5lbmRpZgorCXN0aQorCWNhbGwgc2NoZWR1bGUKKwljbGkKKwkuaWYgXHRyYWNlCisJVFJBQ0VfSVJRU19PRkYKKwkuZW5kaWYKKwlqbXAgcGFyYW5vaWRfdXNlcnNwYWNlXHRyYWNlCisJQ0ZJX0VORFBST0MKKwkuZW5kbQorCiAvKgogICogRXhjZXB0aW9uIGVudHJ5IHBvaW50LiBUaGlzIGV4cGVjdHMgYW4gZXJyb3IgY29kZS9vcmlnX3JheCBvbiB0aGUgc3RhY2sKICAqIGFuZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW4gJXJheC4JCkBAIC03NDksNiArODY0LDcgQEAKIAltb3ZsICVlYngsJWVheAkJCiAJUkVTVE9SRV9SRVNUCiAJY2xpCisJVFJBQ0VfSVJRU19PRkYKIAlHRVRfVEhSRUFEX0lORk8oJXJjeCkJCiAJdGVzdGwgJWVheCwlZWF4CiAJam5lICByZXRpbnRfa2VybmVsCkBAIC03NTYsNiArODcyLDEwIEBACiAJbW92bCAgJF9USUZfV09SS19NQVNLLCVlZGkKIAlhbmRsICAlZWRpLCVlZHgKIAlqbnogIHJldGludF9jYXJlZnVsCisJLyoKKwkgKiBUaGUgaXJldCBtaWdodCByZXN0b3JlIGZsYWdzOgorCSAqLworCVRSQUNFX0lSUVNfSVJFVFEKIAlzd2FwZ3MgCiAJUkVTVE9SRV9BUkdTIDAsOCwwCQkJCQkJCiAJam1wIGlyZXRfbGFiZWwKQEAgLTkxNyw4ICsxMDM3LDcgQEAKIAlwdXNocSAkMAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CQkKIAlwYXJhbm9pZGVudHJ5IGRvX2RlYnVnLCBERUJVR19TVEFDSwotCWptcCBwYXJhbm9pZF9leGl0Ci0JQ0ZJX0VORFBST0MKKwlwYXJhbm9pZGV4aXQKIEVORChkZWJ1ZykKIAkucHJldmlvdXMgLnRleHQKIApAQCAtOTI3LDQ5ICsxMDQ2LDEzIEBACiAJSU5UUl9GUkFNRQogCXB1c2hxICQtMQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JcGFyYW5vaWRlbnRyeSBkb19ubWkKLQkvKgotIAkgKiAiUGFyYW5vaWQiIGV4aXQgcGF0aCBmcm9tIGV4Y2VwdGlvbiBzdGFjay4KLSAgCSAqIFBhcmFub2lkIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IE5NSXMgYW5kIGNhbm5vdCB0YWtlCi0JICogYW55IGtlcm5lbCBzdGF0ZSBmb3IgZ3JhbnRlZC4KLQkgKiBXZSBkb24ndCBkbyBrZXJuZWwgcHJlZW1wdGlvbiBjaGVja3MgaGVyZSwgYmVjYXVzZSBvbmx5Ci0JICogTk1JIHNob3VsZCBiZSBjb21tb24gYW5kIGl0IGRvZXMgbm90IGVuYWJsZSBJUlFzIGFuZAotCSAqIGNhbm5vdCBnZXQgcmVzY2hlZHVsZSB0aWNrcy4KLQkgKi8KLQkvKiBlYng6CW5vIHN3YXBncyBmbGFnICovCi1wYXJhbm9pZF9leGl0OgotCXRlc3RsICVlYngsJWVieAkJCQkvKiBzd2FwZ3MgbmVlZGVkPyAqLwotCWpueiBwYXJhbm9pZF9yZXN0b3JlCi0JdGVzdGwgJDMsQ1MoJXJzcCkKLQlqbnogICBwYXJhbm9pZF91c2Vyc3BhY2UKLXBhcmFub2lkX3N3YXBnczoJCi0Jc3dhcGdzCi1wYXJhbm9pZF9yZXN0b3JlOgkKLQlSRVNUT1JFX0FMTCA4Ci0JaXJldHEKLXBhcmFub2lkX3VzZXJzcGFjZToJCi0JR0VUX1RIUkVBRF9JTkZPKCVyY3gpCi0JbW92bCB0aHJlYWRpbmZvX2ZsYWdzKCVyY3gpLCVlYngKLQlhbmRsICRfVElGX1dPUktfTUFTSywlZWJ4Ci0JanogcGFyYW5vaWRfc3dhcGdzCi0JbW92cSAlcnNwLCVyZGkJCQkvKiAmcHRfcmVncyAqLwotCWNhbGwgc3luY19yZWdzCi0JbW92cSAlcmF4LCVyc3AJCQkvKiBzd2l0Y2ggc3RhY2sgZm9yIHNjaGVkdWxpbmcgKi8KLQl0ZXN0bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVieAotCWpueiBwYXJhbm9pZF9zY2hlZHVsZQotCW1vdmwgJWVieCwlZWR4CQkJLyogYXJnMzogdGhyZWFkIGZsYWdzICovCi0Jc3RpCi0JeG9ybCAlZXNpLCVlc2kgCQkJLyogYXJnMjogb2xkc2V0ICovCi0JbW92cSAlcnNwLCVyZGkgCQkJLyogYXJnMTogJnB0X3JlZ3MgKi8KLQljYWxsIGRvX25vdGlmeV9yZXN1bWUKLQljbGkKLQlqbXAgcGFyYW5vaWRfdXNlcnNwYWNlCi1wYXJhbm9pZF9zY2hlZHVsZToKLQlzdGkKLQljYWxsIHNjaGVkdWxlCi0JY2xpCi0Jam1wIHBhcmFub2lkX3VzZXJzcGFjZQotCUNGSV9FTkRQUk9DCisJcGFyYW5vaWRlbnRyeSBkb19ubWksIDAsIDAKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlwYXJhbm9pZGV4aXQgMAorI2Vsc2UKKwlqbXAgcGFyYW5vaWRfZXhpdDEKKyAJQ0ZJX0VORFBST0MKKyNlbmRpZgogRU5EKG5taSkKIAkucHJldmlvdXMgLnRleHQKIApAQCAtOTc4LDcgKzEwNjEsNyBAQAogIAlwdXNocSAkMAogIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAogIAlwYXJhbm9pZGVudHJ5IGRvX2ludDMsIERFQlVHX1NUQUNLCi0gCWptcCBwYXJhbm9pZF9leGl0CisgCWptcCBwYXJhbm9pZF9leGl0MQogIAlDRklfRU5EUFJPQwogRU5EKGludDMpCiAJLnByZXZpb3VzIC50ZXh0CkBAIC0xMDA3LDcgKzEwOTAsNyBAQAogRU5UUlkoZG91YmxlX2ZhdWx0KQogCVhDUFRfRlJBTUUKIAlwYXJhbm9pZGVudHJ5IGRvX2RvdWJsZV9mYXVsdAotCWptcCBwYXJhbm9pZF9leGl0CisJam1wIHBhcmFub2lkX2V4aXQxCiAJQ0ZJX0VORFBST0MKIEVORChkb3VibGVfZmF1bHQpCiAKQEAgLTEwMjMsNyArMTEwNiw3IEBACiBFTlRSWShzdGFja19zZWdtZW50KQogCVhDUFRfRlJBTUUKIAlwYXJhbm9pZGVudHJ5IGRvX3N0YWNrX3NlZ21lbnQKLQlqbXAgcGFyYW5vaWRfZXhpdAorCWptcCBwYXJhbm9pZF9leGl0MQogCUNGSV9FTkRQUk9DCiBFTkQoc3RhY2tfc2VnbWVudCkKIApAQCAtMTA1MSw3ICsxMTM0LDcgQEAKIAlwdXNocSAkMAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CQogCXBhcmFub2lkZW50cnkgZG9fbWFjaGluZV9jaGVjawotCWptcCBwYXJhbm9pZF9leGl0CisJam1wIHBhcmFub2lkX2V4aXQxCiAJQ0ZJX0VORFBST0MKIEVORChtYWNoaW5lX2NoZWNrKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZnVuY3Rpb25saXN0IGIvYXJjaC94ODZfNjQva2VybmVsL2Z1bmN0aW9ubGlzdAppbmRleCAyYmNlYmRjLi4wMWZhMjM1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2Z1bmN0aW9ubGlzdAorKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZnVuY3Rpb25saXN0CkBAIC0zODQsNyArMzg0LDYgQEAKICooLnRleHQuX19lbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0KQogKigudGV4dC53YWtlX3VwX2JpdCkKICooLnRleHQudW51c2VfbW0pCi0qKC50ZXh0LnNrYl9yZWxlYXNlX2RhdGEpCiAqKC50ZXh0LnNocmlua19pY2FjaGVfbWVtb3J5KQogKigudGV4dC5zY2hlZF9iYWxhbmNlX3NlbGYpCiAqKC50ZXh0Ll9fcG1kX2FsbG9jKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2dlbmFwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9nZW5hcGljLmMKaW5kZXggN2E2NGVhMS4uOGU3OGE3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2dlbmFwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpYy5jCkBAIC04LDcgKzgsNiBAQAogICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKICAqIEphbWVzIENsZXZlcmRvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpY19jbHVzdGVyLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpY19jbHVzdGVyLmMKaW5kZXggNDNmY2Y2Mi4uMzAyMDkxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9nZW5hcGljX2NsdXN0ZXIuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpY19jbHVzdGVyLmMKQEAgLTksNyArOSw2IEBACiAgKiBNYXJ0aW4gQmxpZ2gsIEFuZGkgS2xlZW4sIEphbWVzIEJvdHRvbWxleSwgSm9obiBTdHVsdHosIGFuZAogICogSmFtZXMgQ2xldmVyZG9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9nZW5hcGljX2ZsYXQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9nZW5hcGljX2ZsYXQuYwppbmRleCAyMWM3MDY2Li5lYjg2ZDM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZ2VuYXBpY19mbGF0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2dlbmFwaWNfZmxhdC5jCkBAIC04LDcgKzgsNiBAQAogICogTWFydGluIEJsaWdoLCBBbmRpIEtsZWVuLCBKYW1lcyBCb3R0b21sZXksIEpvaG4gU3R1bHR6LCBhbmQKICAqIEphbWVzIENsZXZlcmRvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMKaW5kZXggZTZhNzFjOS4uMzY2NDdjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQuYwpAQCAtODUsNiArODUsMTEgQEAKIAljbGVhcl9ic3MoKTsKIAogCS8qCisJICogVGhpcyBtdXN0IGJlIGNhbGxlZCByZWFsbHksIHJlYWxseSBlYXJseToKKwkgKi8KKwlsb2NrZGVwX2luaXQoKTsKKworCS8qCiAJICogc3dpdGNoIHRvIGluaXRfbGV2ZWw0X3BndCBmcm9tIGJvb3RfbGV2ZWw0X3BndAogCSAqLwogCW1lbWNweShpbml0X2xldmVsNF9wZ3QsIGJvb3RfbGV2ZWw0X3BndCwgUFRSU19QRVJfUEdEKnNpemVvZihwZ2RfdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2kzODcuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pMzg3LmMKaW5kZXggNDRkZGIxZS4uM2FhMWU5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2kzODcuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaTM4Ny5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgdGhlIDY0Yml0IHVzZXIgc3BhY2Ugc2VlcyBhIEZYU0FWRSBmcmFtZSBkaXJlY3RseS4gCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9pODI1OS5jIGIvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMKaW5kZXggODZiMmMxZS4uMDQzNGIxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMKQEAgLTEsNSArMSw0IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTIzNSw3ICsyMzQsNyBAQAogewogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwogCWlvX2FwaWNfaXJxcyAmPSB+KDE8PGlycSk7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJmk4MjU5QV9pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmaTgyNTlBX2lycV90eXBlOwogCWVuYWJsZV9pcnEoaXJxKTsKIH0KIApAQCAtNDY4LDEyICs0NjcsMTIgQEAKIAkJCS8qCiAJCQkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgogCQkJICovCi0JCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmk4MjU5QV9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmaTgyNTlBX2lycV90eXBlOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqICdoaWdoJyBQQ0kgSVJRcyBmaWxsZWQgaW4gb24gZGVtYW5kCiAJCQkgKi8KLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmbm9faXJxX3R5cGU7CisJCQlpcnFfZGVzY1tpXS5jaGlwID0gJm5vX2lycV90eXBlOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKaW5kZXggYzc2OGQ4YS4uOTI0YTRhMzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KQEAgLTg3NiwxNSArODc1LDE3IEBACiAjZGVmaW5lIElPQVBJQ19FREdFCTAKICNkZWZpbmUgSU9BUElDX0xFVkVMCTEKIAotc3RhdGljIGlubGluZSB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKK3N0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKIHsKLQl1bnNpZ25lZCBpZHggPSB1c2VfcGNpX3ZlY3RvcigpICYmICFwbGF0Zm9ybV9sZWdhY3lfaXJxKGlycSkgPyB2ZWN0b3IgOiBpcnE7CisJdW5zaWduZWQgaWR4OworCisJaWR4ID0gdXNlX3BjaV92ZWN0b3IoKSAmJiAhcGxhdGZvcm1fbGVnYWN5X2lycShpcnEpID8gdmVjdG9yIDogaXJxOwogCiAJaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKIAkJCXRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQotCQlpcnFfZGVzY1tpZHhdLmhhbmRsZXIgPSAmaW9hcGljX2xldmVsX3R5cGU7CisJCWlycV9kZXNjW2lkeF0uY2hpcCA9ICZpb2FwaWNfbGV2ZWxfdHlwZTsKIAllbHNlCi0JCWlycV9kZXNjW2lkeF0uaGFuZGxlciA9ICZpb2FwaWNfZWRnZV90eXBlOworCQlpcnFfZGVzY1tpZHhdLmNoaXAgPSAmaW9hcGljX2VkZ2VfdHlwZTsKIAlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lkeF0pOwogfQogCkBAIC05ODYsNyArOTg3LDcgQEAKIAkgKiBUaGUgdGltZXIgSVJRIGRvZXNuJ3QgaGF2ZSB0byBrbm93IHRoYXQgYmVoaW5kIHRoZQogCSAqIHNjZW5lIHdlIGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgogCSAqLwotCWlycV9kZXNjWzBdLmhhbmRsZXIgPSAmaW9hcGljX2VkZ2VfdHlwZTsKKwlpcnFfZGVzY1swXS5jaGlwID0gJmlvYXBpY19lZGdlX3R5cGU7CiAKIAkvKgogCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKQEAgLTE2MTYsNiArMTYxNywxMyBAQAogI2VuZGlmIC8vIENPTkZJR19TTVAKICNlbmRpZiAvLyBDT05GSUdfUENJX01TSQogCitzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXIodW5zaWduZWQgaW50IGlycSkKK3sKKwlzZW5kX0lQSV9zZWxmKElPX0FQSUNfVkVDVE9SKGlycSkpOworCisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBMZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHRzIG5lZWQgZGlmZmVyZW50IGhhbmRsaW5nLAogICogc28gd2UgdXNlIHR3byBzZXBhcmF0ZSBJUlEgZGVzY3JpcHRvcnMuIEVkZ2UgdHJpZ2dlcmVkIElSUXMgY2FuIGJlCkBAIC0xNjM2LDYgKzE2NDQsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5ID0gc2V0X2lvYXBpY19hZmZpbml0eSwKICNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyLAogfTsKIAogc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBpb2FwaWNfbGV2ZWxfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMTY0OSw2ICsxNjU4LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSA9IHNldF9pb2FwaWNfYWZmaW5pdHksCiAjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlciwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKQEAgLTE2ODMsNyArMTY5Myw3IEBACiAJCQkJbWFrZV84MjU5QV9pcnEoaXJxKTsKIAkJCWVsc2UKIAkJCQkvKiBTdHJhbmdlLiBPaCwgd2VsbC4uICovCi0JCQkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJm5vX2lycV90eXBlOworCQkJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZub19pcnFfdHlwZTsKIAkJfQogCX0KIH0KQEAgLTE5MDAsNyArMTkxMCw3IEBACiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLiIpOwogCiAJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JaXJxX2Rlc2NbMF0uaGFuZGxlciA9ICZsYXBpY19pcnFfdHlwZTsKKwlpcnFfZGVzY1swXS5jaGlwID0gJmxhcGljX2lycV90eXBlOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLwogCWVuYWJsZV84MjU5QV9pcnEoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pcnEuYwppbmRleCAzYmUwYTdlLi41MjIxYTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2lycS5jCkBAIC03OSw3ICs3OSw3IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKQEAgLTExOCw2ICsxMTgsMTIgQEAKIAkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICAqLwogCXVuc2lnbmVkIGlycSA9IH5yZWdzLT5vcmlnX3JheDsKIAorCWlmICh1bmxpa2VseShpcnEgPj0gTlJfSVJRUykpIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBjYW5ub3QgaGFuZGxlIElSUSAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBpcnEpOworCQlCVUcoKTsKKwl9CisKIAlleGl0X2lkbGUoKTsKIAlpcnFfZW50ZXIoKTsKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwpAQCAtMTQwLDEzICsxNDYsMTMgQEAKIAkJaWYgKGlycSA9PSAyKQogCQkJY29udGludWU7CiAKLQkJY3B1c19hbmQobWFzaywgaXJxX2FmZmluaXR5W2lycV0sIG1hcCk7CisJCWNwdXNfYW5kKG1hc2ssIGlycV9kZXNjW2lycV0uYWZmaW5pdHksIG1hcCk7CiAJCWlmIChhbnlfb25saW5lX2NwdShtYXNrKSA9PSBOUl9DUFVTKSB7CiAJCQlwcmludGsoIkJyZWFraW5nIGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CiAJCQltYXNrID0gbWFwOwogCQl9Ci0JCWlmIChpcnFfZGVzY1tpcnFdLmhhbmRsZXItPnNldF9hZmZpbml0eSkKLQkJCWlycV9kZXNjW2lycV0uaGFuZGxlci0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CisJCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSkKKwkJCWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CiAJCWVsc2UgaWYgKGlycV9kZXNjW2lycV0uYWN0aW9uICYmICEod2FybmVkKyspKQogCQkJcHJpbnRrKCJDYW5ub3Qgc2V0IGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CiAJfQpAQCAtMTcxLDggKzE3NywxMCBAQAogIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAgCXBlbmRpbmcgPSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKTsKICAJLyogU3dpdGNoIHRvIGludGVycnVwdCBzdGFjayAqLwotIAlpZiAocGVuZGluZykKKyAJaWYgKHBlbmRpbmcpIHsKIAkJY2FsbF9zb2Z0aXJxKCk7CisJCVdBUk5fT05fT05DRShzb2Z0aXJxX2NvdW50KCkpOworCX0KICAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkb19zb2Z0aXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGZhMWQxOWMuLmZmYzczYWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYwpAQCAtMzEsNyArMzEsNiBAQAogICogICAgICAgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHJldHVybiBwcm9iZXMgZnVuY3Rpb25hbGl0eQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21wcGFyc2UuYwppbmRleCAwODNkYTdlLi5hMWFiNDE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKaW5kZXggMzk5NDg5Yy4uNWJhYTBjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwpAQCAtMTIsNyArMTIsNiBAQAogICogIE1pa2FlbCBQZXR0ZXJzc29uCTogUE0gY29udmVydGVkIHRvIGRyaXZlciBtb2RlbC4gRGlzYWJsZS9lbmFibGUgQVBJLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0xMjgsNyArMTI3LDcgQEAKIHN0YXRpYyBfX2luaXQgdm9pZCBubWlfY3B1X2J1c3kodm9pZCAqZGF0YSkKIHsKIAl2b2xhdGlsZSBpbnQgKmVuZGZsYWcgPSBkYXRhOwotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkvKiBJbnRlbnRpb25hbGx5IGRvbid0IHVzZSBjcHVfcmVsYXggaGVyZS4gVGhpcyBpcwogCSAgIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlYWxseSB0aWNrcywKIAkgICBldmVuIGlmIHRoZXJlIGlzIGEgc2ltdWxhdG9yIG9yIHNpbWlsYXIgdGhhdCBjYXRjaGVzIHRoZQpAQCAtNjA3LDExICs2MDYsMTMgQEAKIAl2bWFsbG9jX3N5bmNfYWxsKCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5taV9jYWxsYmFjaywgY2FsbGJhY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2V0X25taV9jYWxsYmFjayk7CiAKIHZvaWQgdW5zZXRfbm1pX2NhbGxiYWNrKHZvaWQpCiB7CiAJbm1pX2NhbGxiYWNrID0gZHVtbXlfbm1pX2NhbGxiYWNrOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodW5zZXRfbm1pX2NhbGxiYWNrKTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYwppbmRleCA0Y2E2NzRkLi42ZDNlNjFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYwpAQCAtMTAsNyArMTAsNiBAQAogICogQ29weXJpZ2h0IDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGNhNTZlMTkuLmJiNjc0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCXN5c3RlbV91dHNuYW1lLnZlcnNpb24pOwogCXByaW50aygiUklQOiAlMDRseDpbPCUwMTZseD5dICIsIHJlZ3MtPmNzICYgMHhmZmZmLCByZWdzLT5yaXApOwogCXByaW50a19hZGRyZXNzKHJlZ3MtPnJpcCk7IAotCXByaW50aygiXG5SU1A6ICUwNGx4OiUwMTZseCAgRUZMQUdTOiAlMDhseFxuIiwgcmVncy0+c3MsIHJlZ3MtPnJzcCwKKwlwcmludGsoIlJTUDogJTA0bHg6JTAxNmx4ICBFRkxBR1M6ICUwOGx4XG4iLCByZWdzLT5zcywgcmVncy0+cnNwLAogCQlyZWdzLT5lZmxhZ3MpOwogCXByaW50aygiUkFYOiAlMDE2bHggUkJYOiAlMDE2bHggUkNYOiAlMDE2bHhcbiIsCiAJICAgICAgIHJlZ3MtPnJheCwgcmVncy0+cmJ4LCByZWdzLT5yY3gpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCAxMTI5OTE4Li4wOTI1NTE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCmluZGV4IGY1OTM0Y2IuLjZmZTU4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYwpAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzIFN1U0UgTGFicyAvIEFuZGkgS2xlZW4uCiAgKiBTZWUgc2V0dXAuYyBmb3Igb2xkZXIgY2hhbmdlbG9nLgogICovIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKaW5kZXggNTQwYzBjYy4uYjdjNzA1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCkBAIC0zOCw3ICszOCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTc3Niw2ICs3NzUsOCBAQAogCX07CiAJREVDTEFSRV9XT1JLKHdvcmssIGRvX2ZvcmtfaWRsZSwgJmNfaWRsZSk7CiAKKwlsb2NrZGVwX3NldF9jbGFzcygmY19pZGxlLmRvbmUud2FpdC5sb2NrLCAmd2FpdHF1ZXVlX2xvY2tfa2V5KTsKKwogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgZ2R0cyBvZiBzZWNvbmRhcnkgY3B1cy4gSG90cGx1ZyBpcyBjb25zaWRlcmVkICovCiAJaWYgKCFjcHVfZ2R0X2Rlc2NyW2NwdV0uYWRkcmVzcyAmJgogCQkhKGNwdV9nZHRfZGVzY3JbY3B1XS5hZGRyZXNzID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjZjU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBhcmNoL3g4Nl82NC9rZXJuZWwvc3RhY2t0cmFjZS5jCisgKgorICogU3RhY2sgdHJhY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50Citpbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXJldHVybiBhZGRyID49IHN0YXJ0ICYmIGFkZHIgPD0gZW5kOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworZ2V0X3N0YWNrX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgc3RhY2spCit7CisJdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwgc3RhY2tfZW5kLCBmbGFnczsKKwlpbnQgaSwgY3B1OworCisJLyoKKwkgKiBUaGUgbW9zdCBjb21tb24gY2FzZSBpcyB0aGF0IHdlIGFyZSBpbiB0aGUgdGFzayBzdGFjazoKKwkgKi8KKwlzdGFja19zdGFydCA9ICh1bnNpZ25lZCBsb25nKXRhc2stPnRocmVhZF9pbmZvOworCXN0YWNrX2VuZCA9IHN0YWNrX3N0YXJ0ICsgVEhSRUFEX1NJWkU7CisKKwlpZiAoaW5fcmFuZ2Uoc3RhY2tfc3RhcnQsIHN0YWNrLCBzdGFja19lbmQpKQorCQlyZXR1cm4gc3RhY2tfZW5kOworCisJLyoKKwkgKiBXZSBhcmUgaW4gYW4gaW50ZXJydXB0IGlmIGlycXN0YWNrcHRyIGlzIHNldDoKKwkgKi8KKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNwdSA9IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0YWNrX2VuZCA9ICh1bnNpZ25lZCBsb25nKWNwdV9wZGEoY3B1KS0+aXJxc3RhY2twdHI7CisKKwlpZiAoc3RhY2tfZW5kKSB7CisJCXN0YWNrX3N0YXJ0ID0gc3RhY2tfZW5kICYgfihJUlFTVEFDS1NJWkUtMSk7CisJCWlmIChpbl9yYW5nZShzdGFja19zdGFydCwgc3RhY2ssIHN0YWNrX2VuZCkpCisJCQlnb3RvIG91dF9yZXN0b3JlOworCQkvKgorCQkgKiBXZSBnZXQgaGVyZSBpZiB3ZSBhcmUgaW4gYW4gSVJRIGNvbnRleHQgYnV0IHdlCisJCSAqIGFyZSBhbHNvIGluIGFuIGV4Y2VwdGlvbiBzdGFjay4KKwkJICovCisJfQorCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgYWxsIGV4Y2VwdGlvbiBzdGFja3MsIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIKKwkgKiAnc3RhY2snIGlzIGluIG9uZSBvZiB0aGVtOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBOX0VYQ0VQVElPTl9TVEFDS1M7IGkrKykgeworCQkvKgorCQkgKiBzZXQgJ2VuZCcgdG8gdGhlIGVuZCBvZiB0aGUgZXhjZXB0aW9uIHN0YWNrLgorCQkgKi8KKwkJc3RhY2tfZW5kID0gcGVyX2NwdShpbml0X3RzcywgY3B1KS5pc3RbaV07CisJCXN0YWNrX3N0YXJ0ID0gc3RhY2tfZW5kIC0gRVhDRVBUSU9OX1NUS1NaOworCisJCS8qCisJCSAqIElzICdzdGFjaycgYWJvdmUgdGhpcyBleGNlcHRpb24gZnJhbWUncyBlbmQ/CisJCSAqIElmIHllcyB0aGVuIHNraXAgdG8gdGhlIG5leHQgZnJhbWUuCisJCSAqLworCQlpZiAoc3RhY2sgPj0gc3RhY2tfZW5kKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElzICdzdGFjaycgYWJvdmUgdGhpcyBleGNlcHRpb24gZnJhbWUncyBzdGFydCBhZGRyZXNzPworCQkgKiBJZiB5ZXMgdGhlbiB3ZSBmb3VuZCB0aGUgcmlnaHQgZnJhbWUuCisJCSAqLworCQlpZiAoc3RhY2sgPj0gc3RhY2tfc3RhcnQpCisJCQlnb3RvIG91dF9yZXN0b3JlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBkZWJ1ZyBzdGFjaywgYW5kIGlmIGl0IGhhcyBhIGxhcmdlciBzaXplIHRoYW4KKwkJICogdGhlIHVzdWFsIGV4Y2VwdGlvbiBzdGFja3MsIHRoZW4gJ3N0YWNrJyBtaWdodCBzdGlsbAorCQkgKiBiZSB3aXRoaW4gdGhlIGxvd2VyIHBvcnRpb24gb2YgdGhlIGRlYnVnIHN0YWNrOgorCQkgKi8KKyNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgorCQlpZiAoaSA9PSBERUJVR19TVEFDSyAtIDEgJiYgc3RhY2sgPj0gc3RhY2tfZW5kIC0gREVCVUdfU1RLU1opIHsKKwkJCS8qCisJCQkgKiBCbGFjayBtYWdpYy4gQSBsYXJnZSBkZWJ1ZyBzdGFjayBpcyBjb21wb3NlZCBvZgorCQkJICogbXVsdGlwbGUgZXhjZXB0aW9uIHN0YWNrIGVudHJpZXMsIHdoaWNoIHdlCisJCQkgKiBpdGVyYXRlIHRocm91Z2ggbm93LiBEb250IGxvb2s6CisJCQkgKi8KKwkJCWRvIHsKKwkJCQlzdGFja19lbmQgLT0gRVhDRVBUSU9OX1NUS1NaOworCQkJCXN0YWNrX3N0YXJ0IC09IEVYQ0VQVElPTl9TVEtTWjsKKwkJCX0gd2hpbGUgKHN0YWNrIDwgc3RhY2tfc3RhcnQpOworCisJCQlnb3RvIG91dF9yZXN0b3JlOworCQl9CisjZW5kaWYKKwl9CisJLyoKKwkgKiBPaywgJ3N0YWNrJyBpcyBub3QgcG9pbnRpbmcgdG8gYW55IG9mIHRoZSBzeXN0ZW0gc3RhY2tzLgorCSAqLworCXN0YWNrX2VuZCA9IDA7CisKK291dF9yZXN0b3JlOgorCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gc3RhY2tfZW5kOworfQorCisKKy8qCisgKiBTYXZlIHN0YWNrLWJhY2t0cmFjZSBhZGRyZXNzZXMgaW50byBhIHN0YWNrX3RyYWNlIGJ1ZmZlcjoKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzYXZlX2NvbnRleHRfc3RhY2soc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwgdW5zaWduZWQgaW50IHNraXAsCisJCSAgIHVuc2lnbmVkIGxvbmcgc3RhY2ssIHVuc2lnbmVkIGxvbmcgc3RhY2tfZW5kKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCisJdW5zaWduZWQgbG9uZyBwcmV2X3N0YWNrID0gMDsKKworCXdoaWxlIChpbl9yYW5nZShwcmV2X3N0YWNrLCBzdGFjaywgc3RhY2tfZW5kKSkgeworCQlwcl9kZWJ1Zygic3RhY2s6ICAgICAgICAgICVwXG4iLCAodm9pZCAqKXN0YWNrKTsKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSgoKHVuc2lnbmVkIGxvbmcgKilzdGFjaylbMV0pOworCQlwcl9kZWJ1ZygiYWRkcjogICAgICAgICAgICVwXG4iLCAodm9pZCAqKWFkZHIpOworCQlpZiAoIXNraXApCisJCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHItMTsKKwkJZWxzZQorCQkJc2tpcC0tOworCQlpZiAodHJhY2UtPm5yX2VudHJpZXMgPj0gdHJhY2UtPm1heF9lbnRyaWVzKQorCQkJYnJlYWs7CisJCWlmICghYWRkcikKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBTdGFjayBmcmFtZXMgbXVzdCBnbyBmb3J3YXJkcyAob3RoZXJ3aXNlIGEgbG9vcCBjb3VsZAorCQkgKiBoYXBwZW4gaWYgdGhlIHN0YWNrZnJhbWUgaXMgY29ycnVwdGVkKSwgc28gd2UgbW92ZQorCQkgKiBwcmV2X3N0YWNrIGZvcndhcmRzOgorCQkgKi8KKwkJcHJldl9zdGFjayA9IHN0YWNrOworCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nKSgoKHVuc2lnbmVkIGxvbmcgKilzdGFjaylbMF0pOworCX0KKwlwcl9kZWJ1ZygiaW52YWxpZDogICAgICAgICVwXG4iLCAodm9pZCAqKXN0YWNrKTsKKyNlbHNlCisJd2hpbGUgKHN0YWNrIDwgc3RhY2tfZW5kKSB7CisJCWFkZHIgPSAoKHVuc2lnbmVkIGxvbmcgKilzdGFjaylbMF07CisJCXN0YWNrICs9IHNpemVvZihsb25nKTsKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworCQkJaWYgKCFza2lwKQorCQkJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gYWRkci0xOworCQkJZWxzZQorCQkJCXNraXAtLTsKKwkJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gc3RhY2s7Cit9CisKKyNkZWZpbmUgTUFYX1NUQUNLUyAxMAorCisvKgorICogU2F2ZSBzdGFjay1iYWNrdHJhY2UgYWRkcmVzc2VzIGludG8gYSBzdGFja190cmFjZSBidWZmZXIuCisgKiBJZiBhbGxfY29udGV4dHMgaXMgc2V0LCBhbGwgY29udGV4dHMgKGhhcmRpcnEsIHNvZnRpcnEgYW5kIHByb2Nlc3MpCisgKiBhcmUgc2F2ZWQuIElmIG5vdCBzZXQgdGhlbiBvbmx5IHRoZSBjdXJyZW50IGNvbnRleHQgaXMgc2F2ZWQuCisgKi8KK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLAorCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBhbGxfY29udGV4dHMsCisJCSAgICAgIHVuc2lnbmVkIGludCBza2lwKQoreworCXVuc2lnbmVkIGxvbmcgc3RhY2sgPSAodW5zaWduZWQgbG9uZykmc3RhY2s7CisJaW50IGksIG5yX3N0YWNrcyA9IDAsIHN0YWNrc19kb25lW01BWF9TVEFDS1NdOworCisJV0FSTl9PTih0cmFjZS0+bnJfZW50cmllcyB8fCAhdHJhY2UtPm1heF9lbnRyaWVzKTsKKworCWlmICghdGFzaykKKwkJdGFzayA9IGN1cnJlbnQ7CisKKwlwcl9kZWJ1ZygidGFzazogJXAsIHRpOiAlcFxuIiwgdGFzaywgdGFzay0+dGhyZWFkX2luZm8pOworCisJaWYgKCF0YXNrIHx8IHRhc2sgPT0gY3VycmVudCkgeworCQkvKiBHcmFiIHJicCByaWdodCBmcm9tIG91ciByZWdzOiAqLworCQlhc20gKCJtb3YgJSVyYnAsICUwIiA6ICI9ciIgKHN0YWNrKSk7CisJCXByX2RlYnVnKCJyYnA6ICAgICAgICAgICAgJXBcbiIsICh2b2lkICopc3RhY2spOworCX0gZWxzZSB7CisJCS8qIHJicCBpcyB0aGUgbGFzdCByZWcgcHVzaGVkIGJ5IHN3aXRjaF90bygpOiAqLworCQlzdGFjayA9IHRhc2stPnRocmVhZC5yc3A7CisJCXByX2RlYnVnKCJvdGhlciB0YXNrIHJzcDogJXBcbiIsICh2b2lkICopc3RhY2spOworCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nKSgoKHVuc2lnbmVkIGxvbmcgKilzdGFjaylbMF0pOworCQlwcl9kZWJ1Zygib3RoZXIgdGFzayByYnA6ICVwXG4iLCAodm9pZCAqKXN0YWNrKTsKKwl9CisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIHN0YWNrX2VuZCA9IGdldF9zdGFja19lbmQodGFzaywgc3RhY2spOworCisJCXByX2RlYnVnKCJzdGFjazogICAgICAgICAgJXBcbiIsICh2b2lkICopc3RhY2spOworCQlwcl9kZWJ1Zygic3RhY2sgZW5kOiAgICAgICVwXG4iLCAodm9pZCAqKXN0YWNrX2VuZCk7CisKKwkJLyoKKwkJICogSW52YWxpZCBzdGFjayBhZGRyZXM/CisJCSAqLworCQlpZiAoIXN0YWNrX2VuZCkKKwkJCXJldHVybjsKKwkJLyoKKwkJICogV2VyZSB3ZSBpbiB0aGlzIHN0YWNrIGFscmVhZHk/IChyZWN1cnNpb24pCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnJfc3RhY2tzOyBpKyspCisJCQlpZiAoc3RhY2tzX2RvbmVbaV0gPT0gc3RhY2tfZW5kKQorCQkJCXJldHVybjsKKwkJc3RhY2tzX2RvbmVbbnJfc3RhY2tzXSA9IHN0YWNrX2VuZDsKKworCQlzdGFjayA9IHNhdmVfY29udGV4dF9zdGFjayh0cmFjZSwgc2tpcCwgc3RhY2ssIHN0YWNrX2VuZCk7CisJCWlmICghYWxsX2NvbnRleHRzIHx8ICFzdGFjayB8fAorCQkJCXRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllcykKKwkJCXJldHVybjsKKwkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7CisJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQlyZXR1cm47CisJCWlmICgrK25yX3N0YWNrcyA+PSBNQVhfU1RBQ0tTKQorCQkJcmV0dXJuOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggZWNiZDM0Yy4uOTFmN2U2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3VzcGVuZC5jCkBAIC03LDcgKzcsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDAxIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3lzY2FsbC5jCmluZGV4IDdjMTc2YjMuLjIxM2ZkNmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N5c2NhbGwuYwpAQCAtMyw3ICszLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBfX05PX1NUVUJTCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCmluZGV4IGViYmVlNmYuLmI5ZmY3NTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwpAQCAtODg5LDcgKzg4OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7Ci0JdGltZXJfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsIENQVV9NQVNLX05PTkUsICJ0aW1lciIsIE5VTEwsIE5VTEwKKwl0aW1lcl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIENQVV9NQVNLX05PTkUsICJ0aW1lciIsIE5VTEwsIE5VTEwKIH07CiAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYwppbmRleCAzZDExYTJmLi43OWQwNWM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogJ1RyYXBzLmMnIGhhbmRsZXMgaGFyZHdhcmUgdHJhcHMgYW5kIGZhdWx0cyBhZnRlciB3ZSBoYXZlIHNhdmVkIHNvbWUKICAqIHN0YXRlIGluICdlbnRyeS5TJy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xMTEsMjggKzExMCwzMSBAQAogc3RhdGljIGludCBjYWxsX3RyYWNlID0gMTsKIAogI2lmZGVmIENPTkZJR19LQUxMU1lNUwotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+IAotaW50IHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsgCisjIGluY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Cit2b2lkIHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDAsIHN5bXNpemU7CiAJY29uc3QgY2hhciAqc3ltbmFtZTsKIAljaGFyICptb2RuYW1lOwotCWNoYXIgKmRlbGltID0gIjoiOyAKKwljaGFyICpkZWxpbSA9ICI6IjsKIAljaGFyIG5hbWVidWZbMTI4XTsKIAotCXN5bW5hbWUgPSBrYWxsc3ltc19sb29rdXAoYWRkcmVzcywgJnN5bXNpemUsICZvZmZzZXQsICZtb2RuYW1lLCBuYW1lYnVmKTsgCi0JaWYgKCFzeW1uYW1lKSAKLQkJcmV0dXJuIHByaW50aygiWzwlMDE2bHg+XSIsIGFkZHJlc3MpOwotCWlmICghbW9kbmFtZSkgCisJc3ltbmFtZSA9IGthbGxzeW1zX2xvb2t1cChhZGRyZXNzLCAmc3ltc2l6ZSwgJm9mZnNldCwKKwkJCQkJJm1vZG5hbWUsIG5hbWVidWYpOworCWlmICghc3ltbmFtZSkgeworCQlwcmludGsoIiBbPCUwMTZseD5dXG4iLCBhZGRyZXNzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIW1vZG5hbWUpCiAJCW1vZG5hbWUgPSBkZWxpbSA9ICIiOyAJCQotICAgICAgICByZXR1cm4gcHJpbnRrKCI8JTAxNmx4PnslcyVzJXMlcyUrbGR9IiwKLQkJICAgICAgYWRkcmVzcywgZGVsaW0sIG1vZG5hbWUsIGRlbGltLCBzeW1uYW1lLCBvZmZzZXQpOyAKLX0gCisJcHJpbnRrKCIgWzwlMDE2bHg+XSAlcyVzJXMlcysweCVseC8weCVseFxuIiwKKwkJYWRkcmVzcywgZGVsaW0sIG1vZG5hbWUsIGRlbGltLCBzeW1uYW1lLCBvZmZzZXQsIHN5bXNpemUpOworfQogI2Vsc2UKLWludCBwcmludGtfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17IAotCXJldHVybiBwcmludGsoIls8JTAxNmx4Pl0iLCBhZGRyZXNzKTsKLX0gCit2b2lkIHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwcmludGsoIiBbPCUwMTZseD5dXG4iLCBhZGRyZXNzKTsKK30KICNlbmRpZgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqaW5fZXhjZXB0aW9uX3N0YWNrKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgbG9uZyBzdGFjaywKQEAgLTE1MCwxMCArMTUyLDIyIEBACiAJfTsKIAl1bnNpZ25lZCBrOwogCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgYWxsIGV4Y2VwdGlvbiBzdGFja3MsIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIKKwkgKiAnc3RhY2snIGlzIGluIG9uZSBvZiB0aGVtOgorCSAqLwogCWZvciAoayA9IDA7IGsgPCBOX0VYQ0VQVElPTl9TVEFDS1M7IGsrKykgewogCQl1bnNpZ25lZCBsb25nIGVuZDsKIAorCQkvKgorCQkgKiBzZXQgJ2VuZCcgdG8gdGhlIGVuZCBvZiB0aGUgZXhjZXB0aW9uIHN0YWNrLgorCQkgKi8KIAkJc3dpdGNoIChrICsgMSkgeworCQkvKgorCQkgKiBUT0RPOiB0aGlzIGJsb2NrIGlzIG5vdCBuZWVkZWQgaSB0aGluaywgYmVjYXVzZQorCQkgKiBzZXR1cDY0LmM6Y3B1X2luaXQoKSBzZXRzIHVwIHQtPmlzdFtERUJVR19TVEFDS10KKwkJICogcHJvcGVybHkgdG9vLgorCQkgKi8KICNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgogCQljYXNlIERFQlVHX1NUQUNLOgogCQkJZW5kID0gY3B1X3BkYShjcHUpLT5kZWJ1Z3N0YWNrICsgREVCVUdfU1RLU1o7CkBAIC0xNjMsMTkgKzE3Nyw0MyBAQAogCQkJZW5kID0gcGVyX2NwdShpbml0X3RzcywgY3B1KS5pc3Rba107CiAJCQlicmVhazsKIAkJfQorCQkvKgorCQkgKiBJcyAnc3RhY2snIGFib3ZlIHRoaXMgZXhjZXB0aW9uIGZyYW1lJ3MgZW5kPworCQkgKiBJZiB5ZXMgdGhlbiBza2lwIHRvIHRoZSBuZXh0IGZyYW1lLgorCQkgKi8KIAkJaWYgKHN0YWNrID49IGVuZCkKIAkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBJcyAnc3RhY2snIGFib3ZlIHRoaXMgZXhjZXB0aW9uIGZyYW1lJ3Mgc3RhcnQgYWRkcmVzcz8KKwkJICogSWYgeWVzIHRoZW4gd2UgZm91bmQgdGhlIHJpZ2h0IGZyYW1lLgorCQkgKi8KIAkJaWYgKHN0YWNrID49IGVuZCAtIEVYQ0VQVElPTl9TVEtTWikgeworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSBvbmx5IGl0ZXJhdGUgdGhyb3VnaCBhbiBleGNlcHRpb24KKwkJCSAqIHN0YWNrIG9uY2UuIElmIGl0IGNvbWVzIHVwIGZvciB0aGUgc2Vjb25kIHRpbWUKKwkJCSAqIHRoZW4gdGhlcmUncyBzb21ldGhpbmcgd3JvbmcgZ29pbmcgb24gLSBqdXN0CisJCQkgKiBicmVhayBvdXQgYW5kIHJldHVybiBOVUxMOgorCQkJICovCiAJCQlpZiAoKnVzZWRwICYgKDFVIDw8IGspKQogCQkJCWJyZWFrOwogCQkJKnVzZWRwIHw9IDFVIDw8IGs7CiAJCQkqaWRwID0gaWRzW2tdOwogCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nICopZW5kOwogCQl9CisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBkZWJ1ZyBzdGFjaywgYW5kIGlmIGl0IGhhcyBhIGxhcmdlciBzaXplIHRoYW4KKwkJICogdGhlIHVzdWFsIGV4Y2VwdGlvbiBzdGFja3MsIHRoZW4gJ3N0YWNrJyBtaWdodCBzdGlsbAorCQkgKiBiZSB3aXRoaW4gdGhlIGxvd2VyIHBvcnRpb24gb2YgdGhlIGRlYnVnIHN0YWNrOgorCQkgKi8KICNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgogCQlpZiAoayA9PSBERUJVR19TVEFDSyAtIDEgJiYgc3RhY2sgPj0gZW5kIC0gREVCVUdfU1RLU1opIHsKIAkJCXVuc2lnbmVkIGogPSBOX0VYQ0VQVElPTl9TVEFDS1MgLSAxOwogCisJCQkvKgorCQkJICogQmxhY2sgbWFnaWMuIEEgbGFyZ2UgZGVidWcgc3RhY2sgaXMgY29tcG9zZWQgb2YKKwkJCSAqIG11bHRpcGxlIGV4Y2VwdGlvbiBzdGFjayBlbnRyaWVzLCB3aGljaCB3ZQorCQkJICogaXRlcmF0ZSB0aHJvdWdoIG5vdy4gRG9udCBsb29rOgorCQkJICovCiAJCQlkbyB7CiAJCQkJKytqOwogCQkJCWVuZCAtPSBFWENFUFRJT05fU1RLU1o7CkBAIC0xOTQsMjAgKzIzMiwxNCBAQAogCiBzdGF0aWMgaW50IHNob3dfdHJhY2VfdW53aW5kKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqY29udGV4dCkKIHsKLQlpbnQgaSA9IDExLCBuID0gMDsKKwlpbnQgbiA9IDA7CiAKIAl3aGlsZSAodW53aW5kKGluZm8pID09IDAgJiYgVU5XX1BDKGluZm8pKSB7Ci0JCSsrbjsKLQkJaWYgKGkgPiA1MCkgewotCQkJcHJpbnRrKCJcbiAgICAgICAiKTsKLQkJCWkgPSA3OwotCQl9IGVsc2UKLQkJCWkgKz0gcHJpbnRrKCIgIik7Ci0JCWkgKz0gcHJpbnRrX2FkZHJlc3MoVU5XX1BDKGluZm8pKTsKKwkJbisrOworCQlwcmludGtfYWRkcmVzcyhVTldfUEMoaW5mbykpOwogCQlpZiAoYXJjaF91bndfdXNlcl9tb2RlKGluZm8pKQogCQkJYnJlYWs7CiAJfQotCXByaW50aygiXG4iKTsKIAlyZXR1cm4gbjsKIH0KIApAQCAtMjI1LDcgKzI1Nyw3IEBACiAJaW50IGkgPSAxMTsKIAl1bnNpZ25lZCB1c2VkID0gMDsKIAotCXByaW50aygiXG5DYWxsIFRyYWNlOiIpOworCXByaW50aygiXG5DYWxsIFRyYWNlOlxuIik7CiAKIAlpZiAoIXRzaykKIAkJdHNrID0gY3VycmVudDsKQEAgLTI1MSwxNiArMjgzLDE1IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFByaW50IGZ1bmN0aW9uIGNhbGwgZW50cmllcyB3aXRoaW4gYSBzdGFjay4gJ2NvbmQnIGlzIHRoZQorCSAqICJlbmQgb2Ygc3RhY2tmcmFtZSIgY29uZGl0aW9uLCB0aGF0IHRoZSAnc3RhY2srKycKKwkgKiBpdGVyYXRpb24gd2lsbCBldmVudHVhbGx5IHRyaWdnZXIuCisJICovCiAjZGVmaW5lIEhBTkRMRV9TVEFDSyhjb25kKSBcCiAJZG8gd2hpbGUgKGNvbmQpIHsgXAogCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAqc3RhY2srKzsgXAogCQlpZiAoa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeyBcCi0JCQlpZiAoaSA+IDUwKSB7IFwKLQkJCQlwcmludGsoIlxuICAgICAgICIpOyBcCi0JCQkJaSA9IDA7IFwKLQkJCX0gXAotCQkJZWxzZSBcCi0JCQkJaSArPSBwcmludGsoIiAiKTsgXAogCQkJLyogXAogCQkJICogSWYgdGhlIGFkZHJlc3MgaXMgZWl0aGVyIGluIHRoZSB0ZXh0IHNlZ21lbnQgb2YgdGhlIFwKIAkJCSAqIGtlcm5lbCwgb3IgaW4gdGhlIHJlZ2lvbiB3aGljaCBjb250YWlucyB2bWFsbG9jJ2VkIFwKQEAgLTI2OSwyMCArMzAwLDMwIEBACiAJCQkgKiBkb3duIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2ggd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZSBcCiAJCQkgKiBvdXQgdGhlIGNhbGwgcGF0aCB0aGF0IHdhcyB0YWtlbi4gXAogCQkJICovIFwKLQkJCWkgKz0gcHJpbnRrX2FkZHJlc3MoYWRkcik7IFwKKwkJCXByaW50a19hZGRyZXNzKGFkZHIpOyBcCiAJCX0gXAogCX0gd2hpbGUgKDApCiAKLQlmb3IoOyA7ICkgeworCS8qCisJICogUHJpbnQgZnVuY3Rpb24gY2FsbCBlbnRyaWVzIGluIGFsbCBzdGFja3MsIHN0YXJ0aW5nIGF0IHRoZQorCSAqIGN1cnJlbnQgc3RhY2sgYWRkcmVzcy4gSWYgdGhlIHN0YWNrcyBjb25zaXN0IG9mIG5lc3RlZAorCSAqIGV4Y2VwdGlvbnMKKwkgKi8KKwlmb3IgKCA7IDsgKSB7CiAJCWNvbnN0IGNoYXIgKmlkOwogCQl1bnNpZ25lZCBsb25nICplc3RhY2tfZW5kOwogCQllc3RhY2tfZW5kID0gaW5fZXhjZXB0aW9uX3N0YWNrKGNwdSwgKHVuc2lnbmVkIGxvbmcpc3RhY2ssCiAJCQkJCQkmdXNlZCwgJmlkKTsKIAogCQlpZiAoZXN0YWNrX2VuZCkgewotCQkJaSArPSBwcmludGsoIiA8JXM+IiwgaWQpOworCQkJcHJpbnRrKCIgPCVzPiIsIGlkKTsKIAkJCUhBTkRMRV9TVEFDSyAoc3RhY2sgPCBlc3RhY2tfZW5kKTsKLQkJCWkgKz0gcHJpbnRrKCIgPEVPRT4iKTsKKwkJCXByaW50aygiIDxFT0U+Iik7CisJCQkvKgorCQkJICogV2UgbGluayB0byB0aGUgbmV4dCBzdGFjayB2aWEgdGhlCisJCQkgKiBzZWNvbmQtdG8tbGFzdCBwb2ludGVyIChpbmRleCAtMiB0byBlbmQpIGluIHRoZQorCQkJICogZXhjZXB0aW9uIHN0YWNrOgorCQkJICovCiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIGVzdGFja19lbmRbLTJdOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI5MiwxOSArMzMzLDI4IEBACiAJCQkJKElSUVNUQUNLU0laRSAtIDY0KSAvIHNpemVvZigqaXJxc3RhY2spOwogCiAJCQlpZiAoc3RhY2sgPj0gaXJxc3RhY2sgJiYgc3RhY2sgPCBpcnFzdGFja19lbmQpIHsKLQkJCQlpICs9IHByaW50aygiIDxJUlE+Iik7CisJCQkJcHJpbnRrKCIgPElSUT4iKTsKIAkJCQlIQU5ETEVfU1RBQ0sgKHN0YWNrIDwgaXJxc3RhY2tfZW5kKTsKKwkJCQkvKgorCQkJCSAqIFdlIGxpbmsgdG8gdGhlIG5leHQgc3RhY2sgKHdoaWNoIHdvdWxkIGJlCisJCQkJICogdGhlIHByb2Nlc3Mgc3RhY2sgbm9ybWFsbHkpIHRoZSBsYXN0CisJCQkJICogcG9pbnRlciAoaW5kZXggLTEgdG8gZW5kKSBpbiB0aGUgSVJRIHN0YWNrOgorCQkJCSAqLwogCQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgKGlycXN0YWNrX2VuZFstMV0pOwogCQkJCWlycXN0YWNrX2VuZCA9IE5VTEw7Ci0JCQkJaSArPSBwcmludGsoIiA8RU9JPiIpOworCQkJCXByaW50aygiIDxFT0k+Iik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBUaGlzIHByaW50cyB0aGUgcHJvY2VzcyBzdGFjazoKKwkgKi8KIAlIQU5ETEVfU1RBQ0sgKCgobG9uZykgc3RhY2sgJiAoVEhSRUFEX1NJWkUtMSkpICE9IDApOwogI3VuZGVmIEhBTkRMRV9TVEFDSworCiAJcHJpbnRrKCJcbiIpOwogfQogCkBAIC0zMzgsOCArMzg4LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChpICYmICgoaSAlIDQpID09IDApKQotCQkJcHJpbnRrKCJcbiAgICAgICAiKTsKLQkJcHJpbnRrKCIlMDE2bHggIiwgKnN0YWNrKyspOworCQkJcHJpbnRrKCJcbiIpOworCQlwcmludGsoIiAlMDE2bHgiLCAqc3RhY2srKyk7CiAJCXRvdWNoX25taV93YXRjaGRvZygpOwogCX0KIAlzaG93X3RyYWNlKHRzaywgcmVncywgcnNwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMWM2YTVmMy4uN2M0ZGUzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTYsNyArNiw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICN1bmRlZiBpMzg2CS8qIGluIGNhc2UgdGhlIHByZXByb2Nlc3NvciBpcyBhIDMyYml0IG9uZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9saWIvdGh1bmsuUyBiL2FyY2gveDg2XzY0L2xpYi90aHVuay5TCmluZGV4IGU0OWFmMDAuLjMzMmVhNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2xpYi90aHVuay5TCisrKyBiL2FyY2gveDg2XzY0L2xpYi90aHVuay5TCkBAIC00Nyw2ICs0NywxMSBAQAogCXRodW5rX3JldHJheCBfX2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUsX19kb3duX2ludGVycnVwdGlibGUKIAl0aHVua19yZXRyYXggX19kb3duX2ZhaWxlZF90cnlsb2NrLF9fZG93bl90cnlsb2NrCiAJdGh1bmsgX191cF93YWtldXAsX191cAorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJdGh1bmsgdHJhY2VfaGFyZGlycXNfb25fdGh1bmssdHJhY2VfaGFyZGlycXNfb24KKwl0aHVuayB0cmFjZV9oYXJkaXJxc19vZmZfdGh1bmssdHJhY2VfaGFyZGlycXNfb2ZmCisjZW5kaWYKIAkKIAkvKiBTQVZFX0FSR1MgYmVsb3cgaXMgdXNlZCBvbmx5IGZvciB0aGUgLmNmaSBkaXJlY3RpdmVzIGl0IGNvbnRhaW5zLiAqLwogCUNGSV9TVEFSVFBST0MKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL2V4dGFibGUuYyBiL2FyY2gveDg2XzY0L21tL2V4dGFibGUuYwppbmRleCAyZDc4ZjlmLi43OWFjNmU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC94ODZfNjQvbW0vZXh0YWJsZS5jCkBAIC0yLDcgKzIsNiBAQAogICogbGludXgvYXJjaC94ODZfNjQvbW0vZXh0YWJsZS5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vZmF1bHQuYyBiL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMKaW5kZXggMDhkYzY5Ni4uYWM4ZWE2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jCkBAIC01LDcgKzUsNiBAQAogICogIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQxOCw3ICs0MTcsNyBAQAogCS8qIFdoZW4gcnVubmluZyBpbiB0aGUga2VybmVsIHdlIGV4cGVjdCBmYXVsdHMgdG8gb2NjdXIgb25seSB0bwogCSAqIGFkZHJlc3NlcyBpbiB1c2VyIHNwYWNlLiAgQWxsIG90aGVyIGZhdWx0cyByZXByZXNlbnQgZXJyb3JzIGluIHRoZQogCSAqIGtlcm5lbCBhbmQgc2hvdWxkIGdlbmVyYXRlIGFuIE9PUFMuICBVbmZvcnR1bmF0bHksIGluIHRoZSBjYXNlIG9mIGFuCi0JICogZXJyb25lb3VzIGZhdWx0IG9jY3VyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9zZW0KKwkgKiBlcnJvbmVvdXMgZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9zZW0KIAkgKiB3ZSB3aWxsIGRlYWRsb2NrIGF0dGVtcHRpbmcgdG8gdmFsaWRhdGUgdGhlIGZhdWx0IGFnYWluc3QgdGhlCiAJICogYWRkcmVzcyBzcGFjZS4gIEx1Y2tpbHkgdGhlIGtlcm5lbCBvbmx5IHZhbGlkbHkgcmVmZXJlbmNlcyB1c2VyCiAJICogc3BhY2UgZnJvbSB3ZWxsIGRlZmluZWQgYXJlYXMgb2YgY29kZSwgd2hpY2ggYXJlIGxpc3RlZCBpbiB0aGUKQEAgLTU3MSw3ICs1NzAsNiBAQAogCQlwcmludGsoS0VSTl9BTEVSVCAiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgcGFnaW5nIHJlcXVlc3QiKTsKIAlwcmludGsoIiBhdCAlMDE2bHggUklQOiBcbiIgS0VSTl9BTEVSVCxhZGRyZXNzKTsKIAlwcmludGtfYWRkcmVzcyhyZWdzLT5yaXApOwotCXByaW50aygiXG4iKTsKIAlkdW1wX3BhZ2V0YWJsZShhZGRyZXNzKTsKIAl0c2stPnRocmVhZC5jcjIgPSBhZGRyZXNzOwogCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL2luaXQuYyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwppbmRleCA5NWJkMjMyLi5kMTRmYjJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMKKysrIGIvYXJjaC94ODZfNjQvbW0vaW5pdC5jCkBAIC02LDcgKzYsNiBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiwyMDAzIEFuZGkgS2xlZW4gPGFrQHN1c2UuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC02NzksMTYgKzY3OCwxNSBAQAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogCi1leHRlcm4gY2hhciBfX3N0YXJ0X3JvZGF0YSwgX19lbmRfcm9kYXRhOwogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylfX3N0YXJ0X3JvZGF0YTsKIAotCWZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpJl9fZW5kX3JvZGF0YTsgYWRkciArPSBQQUdFX1NJWkUpCisJZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZylfX2VuZF9yb2RhdGE7IGFkZHIgKz0gUEFHRV9TSVpFKQogCQljaGFuZ2VfcGFnZV9hdHRyX2FkZHIoYWRkciwgMSwgUEFHRV9LRVJORUxfUk8pOwogCiAJcHJpbnRrICgiV3JpdGUgcHJvdGVjdGluZyB0aGUga2VybmVsIHJlYWQtb25seSBkYXRhOiAlbHVrXG4iLAotCQkJKCZfX2VuZF9yb2RhdGEgLSAmX19zdGFydF9yb2RhdGEpID4+IDEwKTsKKwkJCShfX2VuZF9yb2RhdGEgLSBfX3N0YXJ0X3JvZGF0YSkgPj4gMTApOwogCiAJLyoKIAkgKiBjaGFuZ2VfcGFnZV9hdHRyX2FkZHIoKSByZXF1aXJlcyBhIGdsb2JhbF9mbHVzaF90bGIoKSBjYWxsIGFmdGVyIGl0LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vbW1hcC5jIGIvYXJjaC94ODZfNjQvbW0vbW1hcC5jCmluZGV4IDQzZTliOTkuLjgwYmJhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL21tYXAuYworKysgYi9hcmNoL3g4Nl82NC9tbS9tbWFwLmMKQEAgLTEsNyArMSw2IEBACiAvKiBDb3B5cmlnaHQgMjAwNSBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKiBMaWNlbnNlZCB1bmRlciBHUEwsIHYuMgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2XzY0L21tL3BhZ2VhdHRyLmMKaW5kZXggNTMxYWQyMS4uMjY4NWIxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Nl82NC9tbS9wYWdlYXR0ci5jCkBAIC0zLDcgKzMsNiBAQAogICogVGhhbmtzIHRvIEJlbiBMYUhhaXNlIGZvciBwcmVjaW91cyBmZWVkYmFjay4KICAqLyAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtZWxmL2Jvb3RzdHJhcC5TIGIvYXJjaC94dGVuc2EvYm9vdC9ib290LWVsZi9ib290c3RyYXAuUwppbmRleCA3Y2JhOTRhLi5mODU3ZmM3IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtZWxmL2Jvb3RzdHJhcC5TCisrKyBiL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvYm9vdHN0cmFwLlMKQEAgLTIsNyArMiw2IEBACiAjaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9zcGVjcmVnLmg+CiAjaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2NvcHJvY2Vzc29yLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvY29wcm9jZXNzb3IuUwppbmRleCAzNTYxOTJhLi5jZjVhOTNmIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvY29wcm9jZXNzb3IuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvY29wcm9jZXNzb3IuUwpAQCAtMjQsNyArMjQsNiBAQAogICogYXNzaWduZWQgd2hlbiB0aGUgWHRlbnNhIHByb2Nlc3NvciBpcyBnZW5lcmF0ZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5TCmluZGV4IDZlOWI1MjIuLmMwN2NiMjUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUwpAQCAtMTYsNyArMTYsNiBAQAogICovCiAKICNpbmNsdWRlIDx4dGVuc2EvY2FjaGVhc20uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IDUxZjliZWQuLjFjZjc0NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCiAJCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCkBAIC0xODEsNyArMTgxLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaT0wOyBpIDwgWFRFTlNBX05SX0lSUVM7IGkrKykKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZ4dGVuc2FfaXJxX3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmeHRlbnNhX2lycV90eXBlOwogCiAJY2FjaGVkX2lycV9tYXNrID0gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCmluZGV4IGM2ZjQ3MWIuLjg3MDlmODIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC03MSwxMyArNzAsMTMgQEAKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KIHZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLSAgICAJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisgICAgCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJCWlmIChzaXplID4gMHgxMDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBJL08gUmVnaW9uICVzLyVkIHRvbyBsYXJnZSIKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wbGF0Zm9ybS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMKaW5kZXggYTE3OTMwNy4uNjk2NzVmMiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIENocmlzIFphbmtlbCA8Y2hyaXNAemFua2VsLm5ldD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2NGE2NDllLi5hN2M0MTc4IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIEtldmluIENoZWEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCmluZGV4IDRjYzg1MjguLjUwNjRkOTMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIE1hcmMgR2F1dGhpZXI8bWFyY0B0ZW5zaWxpY2EuY29tPiA8bWFyY0BhbHVtbmkudXdhdGVybG9vLmNhPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDUxM2VkOGQuLmVkYjI5NDEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBNYXJjIEdhdXRoaWVyPG1hcmNAdGVuc2lsaWNhLmNvbT4gPG1hcmNAYWx1bW5pLnV3YXRlcmxvby5jYT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuYwppbmRleCBmMjBjNjQ5Li40Njg4YmEyIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbHMuYwpAQCAtMTgsNyArMTgsNiBAQAogCiAjZGVmaW5lIERFQlVHCTAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKaW5kZXggZmUxNDkwOS4uNDEyYWIzMiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDaHJpcyBaYW5rZWwgPGNocmlzQHphbmtlbC5uZXQ+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CkBAIC01Myw3ICs1Miw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0JdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9CVNBX0lOVEVSUlVQVCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAogCS5uYW1lID0JCSJ0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDVlZDcxZGYuLmFiNmNkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZGVmaW5lIF9OT0NMQU5HVUFHRQogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwveHRlbnNhX2tzeW1zLmMKaW5kZXggYTE1YjZlMy4uMGI0Y2I5MyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3h0ZW5zYV9rc3ltcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC94dGVuc2Ffa3N5bXMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogSm9lIFRheWxvciA8am9lQHRlbnNpbGljYS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMgYi9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKaW5kZXggZTFiZTQyMy4uNjYwZWYwNSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vaW5pdC5jCisrKyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwpAQCAtMTUsNyArMTUsNiBAQAogICogS2V2aW4gQ2hlYQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvY29uc29sZS5jCmluZGV4IDJhNTgwZWYuLjIyZDNjNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL2NvbnNvbGUuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCmluZGV4IDBkYzU1Y2MuLmQ5NjE2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwpAQCAtMTYsNyArMTYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3Mvc2V0dXAuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9zZXR1cC5jCmluZGV4IDIzNzkwYTUuLmM4YTQyYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9zZXR1cC5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9zZXR1cC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2Jsb2NrL2FzLWlvc2NoZWQuYyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwppbmRleCAzYWYzMWVkLi41ZGE1NmQ0IDEwMDY0NAotLS0gYS9ibG9jay9hcy1pb3NjaGVkLmMKKysrIGIvYmxvY2svYXMtaW9zY2hlZC5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZWxldmF0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrdHJhY2UuYyBiL2Jsb2NrL2Jsa3RyYWNlLmMKaW5kZXggMzZmM2ExNy4uOTI5MjVlNyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrdHJhY2UuYworKysgYi9ibG9jay9ibGt0cmFjZS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggZTI1MjIzZS4uMTAyZWJjMiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZXZhdG9yLmg+CmRpZmYgLS1naXQgYS9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMgYi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKaW5kZXggNDQ2OWRkOC4uYzdjYTlmMCAxMDA2NDQKLS0tIGEvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYwpAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9lbGV2YXRvci5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCBkMDBiMjgzLi5iYzdiYWVlIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9lbGV2YXRvci5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCA4ZDczMzk1Li4yNWQxZjQyIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTIsNyArMiw2IEBACiAgKiAgZ2VuZGlzayBoYW5kbGluZwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CmRpZmYgLS1naXQgYS9ibG9jay9sbF9yd19ibGsuYyBiL2Jsb2NrL2xsX3J3X2Jsay5jCmluZGV4IGVlZTAzYTMuLmFiMTdjNzIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2xsX3J3X2Jsay5jCisrKyBiL2Jsb2NrL2xsX3J3X2Jsay5jCkBAIC0xMCw3ICsxMCw2IEBACiAvKgogICogVGhpcyBoYW5kbGVzIGFsbCByZWFkL3dyaXRlIHJlcXVlc3RzIHRvIGJsb2NrIGRldmljZXMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CkBAIC0yNTE3LDcgKzI1MTYsNyBAQAogaW50IGJsa19leGVjdXRlX3JxKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssCiAJCSAgIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGF0X2hlYWQpCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwogCWNoYXIgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzExNyw5ICszMTE2LDkgQEAKIAlCSU9fQlVHX09OKCFiaW8tPmJpX2lvX3ZlYyk7CiAJYmlvLT5iaV9ydyB8PSBydzsKIAlpZiAocncgJiBXUklURSkKLQkJbW9kX3BhZ2Vfc3RhdGUocGdwZ291dCwgY291bnQpOworCQljb3VudF92bV9ldmVudHMoUEdQR09VVCwgY291bnQpOwogCWVsc2UKLQkJbW9kX3BhZ2Vfc3RhdGUocGdwZ2luLCBjb3VudCk7CisJCWNvdW50X3ZtX2V2ZW50cyhQR1BHSU4sIGNvdW50KTsKIAogCWlmICh1bmxpa2VseShibG9ja19kdW1wKSkgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Fjb3JuL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL2Fjb3JuL2Jsb2NrL0tjb25maWcKaW5kZXggMDczYWRkMy4uYTBmZjI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY29ybi9ibG9jay9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNvcm4vYmxvY2svS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKICMKIAogbWVudSAiQWNvcm4tc3BlY2lmaWMgYmxvY2sgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIEFSQ0hfQUNPUk4KKwlkZXBlbmRzIG9uIEFSQ0hfQVJDIHx8IEFSQ0hfQTVLCiAKIGNvbmZpZyBCTEtfREVWX0ZEMTc3MgogCXRyaXN0YXRlICJPbGQgQXJjaGltZWRlcyBmbG9wcHkgKDE3NzIpIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Fjb3JuL2Jsb2NrL21mbWhkLmMgYi9kcml2ZXJzL2Fjb3JuL2Jsb2NrL21mbWhkLmMKaW5kZXggY2UwNzRmNi4uM2RkNmI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY29ybi9ibG9jay9tZm1oZC5jCisrKyBiL2RyaXZlcnMvYWNvcm4vYmxvY2svbWZtaGQuYwpAQCAtOTksNyArOTksNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0xMjc5LDcgKzEyNzgsNyBAQAogCiAJcHJpbnRrKCJtZm06IGRldGVjdGVkICVkIGhhcmQgZHJpdmUlc1xuIiwgbWZtX2RyaXZlcywKIAkJCQltZm1fZHJpdmVzID09IDEgPyAiIiA6ICJzIik7Ci0JcmV0ID0gcmVxdWVzdF9pcnEobWZtX2lycSwgbWZtX2ludGVycnVwdF9oYW5kbGVyLCBTQV9JTlRFUlJVUFQsICJNRk0gaGFyZGRpc2siLCBOVUxMKTsKKwlyZXQgPSByZXF1ZXN0X2lycShtZm1faXJxLCBtZm1faW50ZXJydXB0X2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJNRk0gaGFyZGRpc2siLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCXByaW50aygibWZtOiB1bmFibGUgdG8gZ2V0IElSUSVkXG4iLCBtZm1faXJxKTsKIAkJZ290byBvdXQ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCA2MTBkMmNjLi5iYzI2NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMTMzLDYgKzEzMywxMyBAQAogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBBQ1BJIGZhbiBkZXZpY2VzLCBhbGxvd2luZyB1c2VyLW1vZGUgCiAJICBhcHBsaWNhdGlvbnMgdG8gcGVyZm9ybSBiYXNpYyBmYW4gY29udHJvbCAob24sIG9mZiwgc3RhdHVzKS4KIAorY29uZmlnIEFDUElfRE9DSworCXRyaXN0YXRlICJEb2NrIgorCWRlcGVuZHMgb24gIUFDUElfSUJNX0RPQ0sKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgY29udHJvbGxlZCBkb2NraW5nIHN0YXRpb25zCisKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICJQcm9jZXNzb3IiCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggNTk4NGI0Zi4uZjBhNjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfQlVUVE9OKQkrPSBidXR0b24ubwogb2JqLSQoQ09ORklHX0FDUElfRUMpCQkrPSBlYy5vCiBvYmotJChDT05GSUdfQUNQSV9GQU4pCQkrPSBmYW4ubworb2JqLSQoQ09ORklHX0FDUElfRE9DSykJCSs9IGRvY2subwogb2JqLSQoQ09ORklHX0FDUElfVklERU8pCSs9IHZpZGVvLm8gCiBvYmotJChDT05GSUdfQUNQSV9IT1RLRVkpCSs9IGhvdGtleS5vCiBvYmoteQkJCQkrPSBwY2lfcm9vdC5vIHBjaV9saW5rLm8gcGNpX2lycS5vIHBjaV9iaW5kLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggNzgzOWI4My4uMzZjYTM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTg0LDIwICs4NCwxOCBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9hY19nZXRfc3RhdGUiKTsKIAogCWlmICghYWMpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoYWMtPmhhbmRsZSwgIl9QU1IiLCBOVUxMLCAmYWMtPnN0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciByZWFkaW5nIEFDIEFkYXB0ZXIgc3RhdGVcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkVycm9yIHJlYWRpbmcgQUMgQWRhcHRlciBzdGF0ZSIpKTsKIAkJYWMtPnN0YXRlID0gQUNQSV9BQ19TVEFUVVNfVU5LTk9XTjsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTAsMTQgKzEwOCwxMyBAQAogewogCXN0cnVjdCBhY3BpX2FjICphYyA9IChzdHJ1Y3QgYWNwaV9hYyAqKXNlcS0+cHJpdmF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYWNfc2VxX3Nob3ciKTsKIAogCWlmICghYWMpCi0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoYWNwaV9hY19nZXRfc3RhdGUoYWMpKSB7CiAJCXNlcV9wdXRzKHNlcSwgIkVSUk9SOiBVbmFibGUgdG8gcmVhZCBBQyBBZGFwdGVyIHN0YXRlXG4iKTsKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAlzZXFfcHV0cyhzZXEsICJzdGF0ZTogICAgICAgICAgICAgICAgICAgIik7CkBAIC0xMzMsNyArMTMwLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYWNfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE0NSwxMyArMTQyLDEyIEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2FjX2FkZF9mcyIpOwogCiAJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IHByb2NfbWtkaXIoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCiAJCQkJCQkgICAgIGFjcGlfYWNfZGlyKTsKIAkJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXJldHVybiAtRU5PREVWOwogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKQEAgLTE1OSwyMSArMTU1LDE4IEBACiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShBQ1BJX0FDX0ZJTEVfU1RBVEUsCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX0FDX0ZJTEVfU1RBVEUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9hY19mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYWNfcmVtb3ZlX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYWNfcmVtb3ZlX2ZzIik7CiAKIAlpZiAoYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9BQ19GSUxFX1NUQVRFLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CkBAIC0xODIsNyArMTc1LDcgQEAKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBOVUxMOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5NCwxMyArMTg3LDEyIEBACiAJc3RydWN0IGFjcGlfYWMgKmFjID0gKHN0cnVjdCBhY3BpX2FjICopZGF0YTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2FjX25vdGlmeSIpOwogCiAJaWYgKCFhYykKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGFjLT5oYW5kbGUsICZkZXZpY2UpKQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQUNQSV9BQ19OT1RJRllfU1RBVFVTOgpAQCAtMjEzLDcgKzIwNSw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBhY3BpX2FjX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTIyMiwxNCArMjE0LDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfYWMgKmFjID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYWNfYWRkIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWFjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFjKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChhYywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2FjKSk7CiAKIAlhYy0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CkBAIC0yNDksOCArMjQwLDYgQEAKIAkJCQkJICAgICBBQ1BJX0RFVklDRV9OT1RJRlksIGFjcGlfYWNfbm90aWZ5LAogCQkJCQkgICAgIGFjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciBpbnN0YWxsaW5nIG5vdGlmeSBoYW5kbGVyXG4iKSk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTI2NSw3ICsyNTQsNyBAQAogCQlrZnJlZShhYyk7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX2FjX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCkBAIC0yNzMsNTUgKzI2Miw0OSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX2FjICphYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2FjX3JlbW92ZSIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWFjID0gKHN0cnVjdCBhY3BpX2FjICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoYWMtPmhhbmRsZSwKIAkJCQkJICAgIEFDUElfREVWSUNFX05PVElGWSwgYWNwaV9hY19ub3RpZnkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciByZW1vdmluZyBub3RpZnkgaGFuZGxlclxuIikpOwogCiAJYWNwaV9hY19yZW1vdmVfZnMoZGV2aWNlKTsKIAogCWtmcmVlKGFjKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9hY19pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2FjX2luaXQiKTsKIAogCWFjcGlfYWNfZGlyID0gcHJvY19ta2RpcihBQ1BJX0FDX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfYWNfZGlyKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCWFjcGlfYWNfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2FjX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9BQ19DTEFTUywgYWNwaV9yb290X2Rpcik7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9hY19leGl0KHZvaWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9hY19leGl0Iik7CiAKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9hY19kcml2ZXIpOwogCiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9BQ19DTEFTUywgYWNwaV9yb290X2Rpcik7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIG1vZHVsZV9pbml0KGFjcGlfYWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKaW5kZXggMTAxMjI4NC4uY2Q1NzM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwpAQCAtMTI4LDcgKzEyOCw2IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX21lbW9yeV9pbmZvICppbmZvLCAqbjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2dldF9kZXZpY2VfcmVzb3VyY2VzIik7CiAKIAlzdGF0dXMgPSBhY3BpX3dhbGtfcmVzb3VyY2VzKG1lbV9kZXZpY2UtPmhhbmRsZSwgTUVUSE9EX05BTUVfX0NSUywKIAkJCQkgICAgIGFjcGlfbWVtb3J5X2dldF9yZXNvdXJjZSwgbWVtX2RldmljZSk7CkBAIC0xNTAsMjMgKzE0OSwyMSBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBkZXZpY2UgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfZ2V0X2RldmljZSIpOwogCiAJaWYgKCFhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkgJiYgZGV2aWNlKQogCQlnb3RvIGVuZDsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwaGFuZGxlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGluIGFjcGlfZ2V0X3BhcmVudFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJDYW5ub3QgZmluZCBhY3BpIHBhcmVudCIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogR2V0IHRoZSBwYXJlbnQgZGV2aWNlICovCiAJc3RhdHVzID0gYWNwaV9idXNfZ2V0X2RldmljZShwaGFuZGxlLCAmcGRldmljZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgaW4gYWNwaV9idXNfZ2V0X2RldmljZVxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJDYW5ub3QgZ2V0IGFjcGkgYnVzIGRldmljZSIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyoKQEAgLTE3NSwzMCArMTcyLDI5IEBACiAJICovCiAJc3RhdHVzID0gYWNwaV9idXNfYWRkKCZkZXZpY2UsIHBkZXZpY2UsIGhhbmRsZSwgQUNQSV9CVVNfVFlQRV9ERVZJQ0UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiRXJyb3IgaW4gYWNwaV9idXNfYWRkXG4iKSk7Ci0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkNhbm5vdCBhZGQgYWNwaSBidXMiKSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogICAgICAgZW5kOgogCSptZW1fZGV2aWNlID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWlmICghKCptZW1fZGV2aWNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlxuIGRyaXZlciBkYXRhIG5vdCBmb3VuZCIpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX21lbW9yeV9jaGVja19kZXZpY2Uoc3RydWN0IGFjcGlfbWVtb3J5X2RldmljZSAqbWVtX2RldmljZSkKIHsKIAl1bnNpZ25lZCBsb25nIGN1cnJlbnRfc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfY2hlY2tfZGV2aWNlIik7CiAKIAkvKiBHZXQgZGV2aWNlIHByZXNlbnQvYWJzZW50IGluZm9ybWF0aW9uIGZyb20gdGhlIF9TVEEgKi8KIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfaW50ZWdlcihtZW1fZGV2aWNlLT5oYW5kbGUsICJfU1RBIiwKIAkJCQkJICAgICAgIE5VTEwsICZjdXJyZW50X3N0YXR1cykpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCS8qCiAJICogQ2hlY2sgZm9yIGRldmljZSBzdGF0dXMuIERldmljZSBzaG91bGQgYmUKIAkgKiBwcmVzZW50L2VuYWJsZWQvZnVuY3Rpb25pbmcuCkBAIC0yMDYsOSArMjAyLDkgQEAKIAlpZiAoISgoY3VycmVudF9zdGF0dXMgJiBBQ1BJX01FTU9SWV9TVEFfUFJFU0VOVCkKIAkgICAgICAmJiAoY3VycmVudF9zdGF0dXMgJiBBQ1BJX01FTU9SWV9TVEFfRU5BQkxFRCkKIAkgICAgICAmJiAoY3VycmVudF9zdGF0dXMgJiBBQ1BJX01FTU9SWV9TVEFfRlVOQ1RJT05BTCkpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2Uoc3RydWN0IGFjcGlfbWVtb3J5X2RldmljZSAqbWVtX2RldmljZSkKQEAgLTIxNywxMyArMjEzLDExIEBACiAJc3RydWN0IGFjcGlfbWVtb3J5X2luZm8gKmluZm87CiAJaW50IG5vZGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX21lbW9yeV9lbmFibGVfZGV2aWNlIik7CiAKIAkvKiBHZXQgdGhlIHJhbmdlIGZyb20gdGhlIF9DUlMgKi8KIAlyZXN1bHQgPSBhY3BpX21lbW9yeV9nZXRfZGV2aWNlX3Jlc291cmNlcyhtZW1fZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiXG5nZXRfZGV2aWNlX3Jlc291cmNlcyBmYWlsZWRcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZ2V0X2RldmljZV9yZXNvdXJjZXMgZmFpbGVkXG4iKTsKIAkJbWVtX2RldmljZS0+c3RhdGUgPSBNRU1PUllfSU5WQUxJRF9TVEFURTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0yNTQsNyArMjQ4LDcgQEAKIAkJbnVtX2VuYWJsZWQrKzsKIAl9CiAJaWYgKCFudW1fZW5hYmxlZCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiXG5hZGRfbWVtb3J5IGZhaWxlZFxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJhZGRfbWVtb3J5IGZhaWxlZFxuIik7CiAJCW1lbV9kZXZpY2UtPnN0YXRlID0gTUVNT1JZX0lOVkFMSURfU1RBVEU7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2OSw3ICsyNjMsNiBAQAogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzsKIAl1bnNpZ25lZCBsb25nIGN1cnJlbnRfc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfcG93ZXJkb3duX2RldmljZSIpOwogCiAJLyogSXNzdWUgdGhlIF9FSjAgY29tbWFuZCAqLwogCWFyZ19saXN0LmNvdW50ID0gMTsKQEAgLTI4MCwyMSArMjczLDIxIEBACiAJCQkJICAgICAgIl9FSjAiLCAmYXJnX2xpc3QsIE5VTEwpOwogCS8qIFJldHVybiBvbiBfRUowIGZhaWx1cmUgKi8KIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIl9FSjAgZmFpbGVkLlxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJfRUowIGZhaWxlZCIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogRXZhbHV0ZSBfU1RBIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIobWVtX2RldmljZS0+aGFuZGxlLCAiX1NUQSIsCiAJCQkJICAgICAgIE5VTEwsICZjdXJyZW50X3N0YXR1cyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ2hlY2sgZm9yIGRldmljZSBzdGF0dXMuICBEZXZpY2Ugc2hvdWxkIGJlIGRpc2FibGVkICovCiAJaWYgKGN1cnJlbnRfc3RhdHVzICYgQUNQSV9NRU1PUllfU1RBX0VOQUJMRUQpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9tZW1vcnlfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IGFjcGlfbWVtb3J5X2RldmljZSAqbWVtX2RldmljZSkKQEAgLTMwMiw3ICsyOTUsNiBAQAogCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfbWVtb3J5X2luZm8gKmluZm8sICpuOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfZGlzYWJsZV9kZXZpY2UiKTsKIAogCS8qCiAJICogQXNrIHRoZSBWTSB0byBvZmZsaW5lIHRoaXMgbWVtb3J5IHJhbmdlLgpAQCAtMzIwLDggKzMxMiw2IEBACiAJLyogUG93ZXItb2ZmIGFuZCBlamVjdCB0aGUgZGV2aWNlICovCiAJcmVzdWx0ID0gYWNwaV9tZW1vcnlfcG93ZXJkb3duX2RldmljZShtZW1fZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRGV2aWNlIFBvd2VyIERvd24gZmFpbGVkLlxuIikpOwogCQkvKiBTZXQgdGhlIHN0YXR1cyBvZiB0aGUgZGV2aWNlIHRvIGludmFsaWQgKi8KIAkJbWVtX2RldmljZS0+c3RhdGUgPSBNRU1PUllfSU5WQUxJRF9TVEFURTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTMzNiw3ICszMjYsNiBAQAogCXN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2U7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX21lbW9yeV9kZXZpY2Vfbm90aWZ5Iik7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6CkBAIC0zNDgsMTUgKzMzNywxNCBAQAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCQkgICJcblJlY2VpdmVkIERFVklDRSBDSEVDSyBub3RpZmljYXRpb24gZm9yIGRldmljZVxuIikpOwogCQlpZiAoYWNwaV9tZW1vcnlfZ2V0X2RldmljZShoYW5kbGUsICZtZW1fZGV2aWNlKSkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiRXJyb3IgaW4gZmluZGluZyBkcml2ZXIgZGF0YVxuIikpOwotCQkJcmV0dXJuX1ZPSUQ7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDYW5ub3QgZmluZCBkcml2ZXIgZGF0YVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoIWFjcGlfbWVtb3J5X2NoZWNrX2RldmljZShtZW1fZGV2aWNlKSkgewogCQkJaWYgKGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2UobWVtX2RldmljZSkpCi0JCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJCSAgIkVycm9yIGluIGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2VcbiIpKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJCSAgICAiQ2Fubm90IGVuYWJsZSBtZW1vcnkgZGV2aWNlXG4iKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1Q6CkBAIC0zNjQsMTQgKzM1MiwxMiBAQAogCQkJCSAgIlxuUmVjZWl2ZWQgRUpFQ1QgUkVRVUVTVCBub3RpZmljYXRpb24gZm9yIGRldmljZVxuIikpOwogCiAJCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkRldmljZSBkb2Vzbid0IGV4aXN0XG4iKSk7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJEZXZpY2UgZG9lc24ndCBleGlzdFxuIik7CiAJCQlicmVhazsKIAkJfQogCQltZW1fZGV2aWNlID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCQlpZiAoIW1lbV9kZXZpY2UpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkRyaXZlciBEYXRhIGlzIE5VTExcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkRyaXZlciBEYXRhIGlzIE5VTExcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzgyLDggKzM2OCw4IEBACiAJCSAqICAgICAgd2l0aCBnZW5lcmljIHN5c2ZzIGRyaXZlcgogCQkgKi8KIAkJaWYgKGFjcGlfbWVtb3J5X2Rpc2FibGVfZGV2aWNlKG1lbV9kZXZpY2UpKQotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiRXJyb3IgaW4gYWNwaV9tZW1vcnlfZGlzYWJsZV9kZXZpY2VcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkgICAgIkRpc2FibGUgbWVtb3J5IGRldmljZVxuIik7CiAJCS8qCiAJCSAqIFRCRDogSW52b2tlIGFjcGlfYnVzX3JlbW92ZSB0byBjbGVhbnVwIGRhdGEgc3RydWN0dXJlcwogCQkgKi8KQEAgLTM5NCw3ICszODAsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9tZW1vcnlfZGV2aWNlX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTQwMiwxNCArMzg4LDEzIEBACiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9tZW1vcnlfZGV2aWNlICptZW1fZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2RldmljZV9hZGQiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJbWVtX2RldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1lbV9kZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KG1lbV9kZXZpY2UsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9tZW1vcnlfZGV2aWNlKSk7CiAKIAlJTklUX0xJU1RfSEVBRCgmbWVtX2RldmljZS0+cmVzX2xpc3QpOwpAQCAtNDIyLDcgKzQwNyw3IEBACiAJcmVzdWx0ID0gYWNwaV9tZW1vcnlfZ2V0X2RldmljZV9yZXNvdXJjZXMobWVtX2RldmljZSk7CiAJaWYgKHJlc3VsdCkgewogCQlrZnJlZShtZW1fZGV2aWNlKTsKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAJfQogCiAJLyogU2V0IHRoZSBkZXZpY2Ugc3RhdGUgKi8KQEAgLTQzMCwyMiArNDE1LDIxIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlcyBcbiIsIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfbWVtb3J5X2RldmljZV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewogCXN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UgKm1lbV9kZXZpY2UgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfZGV2aWNlX3JlbW92ZSIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbV9kZXZpY2UgPSAoc3RydWN0IGFjcGlfbWVtb3J5X2RldmljZSAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlrZnJlZShtZW1fZGV2aWNlKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX21lbW9yeV9kZXZpY2Vfc3RhcnQgKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtNDUzLDggKzQzNyw2IEBACiAJc3RydWN0IGFjcGlfbWVtb3J5X2RldmljZSAqbWVtX2RldmljZTsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2RldmljZV9zdGFydCIpOwotCiAJbWVtX2RldmljZSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCWlmICghYWNwaV9tZW1vcnlfY2hlY2tfZGV2aWNlKG1lbV9kZXZpY2UpKSB7CkBAIC00NjQsNyArNDQ2LDcgQEAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCiAJCQkJIkVycm9yIGluIGFjcGlfbWVtb3J5X2VuYWJsZV9kZXZpY2VcbiIpKTsKIAl9Ci0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoKQEAgLTQ3NywxNiArNDU5LDE1IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImlzX21lbW9yeV9kZXZpY2UiKTsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfRVJST1IpOworCQlyZXR1cm4gc3RhdHVzOwogCiAJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwogCWlmICghKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpKSB7CiAJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9FUlJPUik7CisJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKIAloYXJkd2FyZV9pZCA9IGluZm8tPmhhcmR3YXJlX2lkLnZhbHVlOwpAQCAtNDk1LDcgKzQ3Niw3IEBACiAJCXN0YXR1cyA9IEFFX0VSUk9SOwogCiAJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTUwNCwyMSArNDg1LDE3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfcmVnaXN0ZXJfbm90aWZ5X2hhbmRsZXIiKTsKIAogCXN0YXR1cyA9IGlzX21lbW9yeV9kZXZpY2UoaGFuZGxlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CS8qIGNvbnRpbnVlICovCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKXsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgImhhbmRsZSBpcyBubyBtZW1vcnkgZGV2aWNlIikpOworCQlyZXR1cm4gQUVfT0s7CS8qIGNvbnRpbnVlICovCisJfQogCiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGhhbmRsZSwgQUNQSV9TWVNURU1fTk9USUZZLAogCQkJCQkgICAgIGFjcGlfbWVtb3J5X2RldmljZV9ub3RpZnksIE5VTEwpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsJLyogY29udGludWUgKi8KLQl9Ci0KLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkvKiBjb250aW51ZSAqLworCXJldHVybiBBRV9PSzsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzCkBAIC01MjcsMjIgKzUwNCwxOCBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2RlcmVnaXN0ZXJfbm90aWZ5X2hhbmRsZXIiKTsKIAogCXN0YXR1cyA9IGlzX21lbW9yeV9kZXZpY2UoaGFuZGxlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CS8qIGNvbnRpbnVlICovCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKXsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgImhhbmRsZSBpcyBubyBtZW1vcnkgZGV2aWNlIikpOworCQlyZXR1cm4gQUVfT0s7CS8qIGNvbnRpbnVlICovCisJfQogCiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoaGFuZGxlLAogCQkJCQkgICAgQUNQSV9TWVNURU1fTk9USUZZLAogCQkJCQkgICAgYWNwaV9tZW1vcnlfZGV2aWNlX25vdGlmeSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgcmVtb3Zpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsJLyogY29udGludWUgKi8KLQl9CiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm4gQUVfT0s7CS8qIGNvbnRpbnVlICovCiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfbWVtb3J5X2RldmljZV9pbml0KHZvaWQpCkBAIC01NTAsMTIgKzUyMywxMSBAQAogCWludCByZXN1bHQ7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9tZW1vcnlfZGV2aWNlX2luaXQiKTsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9tZW1vcnlfZGV2aWNlX2RyaXZlcik7CiAKIAlpZiAocmVzdWx0IDwgMCkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKIAkJCQkgICAgIEFDUElfVUlOVDMyX01BWCwKQEAgLTU2MywxOSArNTM1LDE4IEBACiAJCQkJICAgICBOVUxMLCBOVUxMKTsKIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAid2Fsa19uYW1lc3BhY2UgZmFpbGVkXG4iKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJ3YWxrX25hbWVzcGFjZSBmYWlsZWQiKSk7CiAJCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX21lbW9yeV9kZXZpY2VfZHJpdmVyKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX21lbW9yeV9kZXZpY2VfZXhpdCh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfbWVtb3J5X2RldmljZV9leGl0Iik7CiAKIAkvKgogCSAqIEFkZGluZyB0aGlzIHRvIHVuLWluc3RhbGwgbm90aWZpY2F0aW9uIGhhbmRsZXJzIGZvciBhbGwgdGhlIGRldmljZQpAQCAtNTg3LDExICs1NTgsMTEgQEAKIAkJCQkgICAgIE5VTEwsIE5VTEwpOwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAid2Fsa19uYW1lc3BhY2UgZmFpbGVkXG4iKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJ3YWxrX25hbWVzcGFjZSBmYWlsZWQiKSk7CiAKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9tZW1vcnlfZGV2aWNlX2RyaXZlcik7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIG1vZHVsZV9pbml0KGFjcGlfbWVtb3J5X2RldmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYwppbmRleCA4MzlmNDIzLi4wNTVjZmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYXN1c19ob3RrX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19BU1VTLCBhY3BpX3Jvb3RfZGlyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiByZXN1bHQ7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCmluZGV4IDcwMmU4NTcuLjAwYjA3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtMTMyLDE3ICsxMzIsMTYgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgZGF0YSA9IHsgMCwgTlVMTCB9OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYmF0dGVyeV9nZXRfaW5mbyIpOwogCiAJaWYgKCFiYXR0ZXJ5IHx8ICFiaWYpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBFdmFsdXRlIF9CSUYgKi8KIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGJhdHRlcnktPmhhbmRsZSwgIl9CSUYiLCBOVUxMLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX0JJRlxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9CSUYiKSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXBhY2thZ2UgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKQEAgLTE1MSw3ICsxNTAsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9leHRyYWN0X3BhY2thZ2UocGFja2FnZSwgJmZvcm1hdCwgJmRhdGEpOwogCWlmIChzdGF0dXMgIT0gQUVfQlVGRkVSX09WRVJGTE9XKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBleHRyYWN0aW5nIF9CSUZcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV4dHJhY3RpbmcgX0JJRiIpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMTY1LDcgKzE2NCw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX2V4dHJhY3RfcGFja2FnZShwYWNrYWdlLCAmZm9ybWF0LCAmZGF0YSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBleHRyYWN0aW5nIF9CSUZcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV4dHJhY3RpbmcgX0JJRiIpKTsKIAkJa2ZyZWUoZGF0YS5wb2ludGVyKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CkBAIC0xNzcsNyArMTc2LDcgQEAKIAlpZiAoIXJlc3VsdCkKIAkJKCpiaWYpID0gKHN0cnVjdCBhY3BpX2JhdHRlcnlfaW5mbyAqKWRhdGEucG9pbnRlcjsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE5MywxNyArMTkyLDE2IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGRhdGEgPSB7IDAsIE5VTEwgfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2JhdHRlcnlfZ2V0X3N0YXR1cyIpOwogCiAJaWYgKCFiYXR0ZXJ5IHx8ICFic3QpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBFdmFsdXRlIF9CU1QgKi8KIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGJhdHRlcnktPmhhbmRsZSwgIl9CU1QiLCBOVUxMLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX0JTVFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9CU1QiKSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXBhY2thZ2UgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKQEAgLTIxMiw3ICsyMTAsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9leHRyYWN0X3BhY2thZ2UocGFja2FnZSwgJmZvcm1hdCwgJmRhdGEpOwogCWlmIChzdGF0dXMgIT0gQUVfQlVGRkVSX09WRVJGTE9XKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBleHRyYWN0aW5nIF9CU1RcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV4dHJhY3RpbmcgX0JTVCIpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMjI2LDcgKzIyNCw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX2V4dHJhY3RfcGFja2FnZShwYWNrYWdlLCAmZm9ybWF0LCAmZGF0YSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBleHRyYWN0aW5nIF9CU1RcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV4dHJhY3RpbmcgX0JTVCIpKTsKIAkJa2ZyZWUoZGF0YS5wb2ludGVyKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CkBAIC0yMzgsNyArMjM2LDcgQEAKIAlpZiAoIXJlc3VsdCkKIAkJKCpic3QpID0gKHN0cnVjdCBhY3BpX2JhdHRlcnlfc3RhdHVzICopZGF0YS5wb2ludGVyOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludApAQCAtMjQ4LDI1ICsyNDYsMjQgQEAKIAl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJX1RZUEVfSU5URUdFUiB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0ID0geyAxLCAmYXJnMCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X3NldF9hbGFybSIpOwogCiAJaWYgKCFiYXR0ZXJ5KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFiYXR0ZXJ5LT5mbGFncy5hbGFybSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWFyZzAuaW50ZWdlci52YWx1ZSA9IGFsYXJtOwogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYmF0dGVyeS0+aGFuZGxlLCAiX0JUUCIsICZhcmdfbGlzdCwgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiQWxhcm0gc2V0IHRvICVkXG4iLCAodTMyKSBhbGFybSkpOwogCiAJYmF0dGVyeS0+YWxhcm0gPSBhbGFybTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfY2hlY2soc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKQEAgLTI3NywxOCArMjc0LDE3IEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCXN0cnVjdCBhY3BpX2JhdHRlcnlfaW5mbyAqYmlmID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYmF0dGVyeV9jaGVjayIpOwogCiAJaWYgKCFiYXR0ZXJ5KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZShiYXR0ZXJ5LT5oYW5kbGUsICZkZXZpY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3N0YXR1cyhkZXZpY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJLyogSW5zZXJ0aW9uPyAqLwogCkBAIC0zMDAsNyArMjk2LDcgQEAKIAogCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X2luZm8oYmF0dGVyeSwgJmJpZik7CiAJCWlmIChyZXN1bHQpCi0JCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJCXJldHVybiByZXN1bHQ7CiAKIAkJYmF0dGVyeS0+ZmxhZ3MucG93ZXJfdW5pdCA9IGJpZi0+cG93ZXJfdW5pdDsKIAkJYmF0dGVyeS0+dHJpcHMud2FybmluZyA9IGJpZi0+ZGVzaWduX2NhcGFjaXR5X3dhcm5pbmc7CkBAIC0zMjQsNyArMzIwLDcgQEAKIAogCWJhdHRlcnktPmZsYWdzLnByZXNlbnQgPSBkZXZpY2UtPnN0YXR1cy5iYXR0ZXJ5X3ByZXNlbnQ7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzM5LDcgKzMzNSw2IEBACiAJc3RydWN0IGFjcGlfYmF0dGVyeV9pbmZvICpiaWYgPSBOVUxMOwogCWNoYXIgKnVuaXRzID0gIj8iOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X3JlYWRfaW5mbyIpOwogCiAJaWYgKCFiYXR0ZXJ5KQogCQlnb3RvIGVuZDsKQEAgLTQwOSw3ICs0MDQsNyBAQAogICAgICAgZW5kOgogCWtmcmVlKGJpZik7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTQyNCw3ICs0MTksNiBAQAogCXN0cnVjdCBhY3BpX2JhdHRlcnlfc3RhdHVzICpic3QgPSBOVUxMOwogCWNoYXIgKnVuaXRzID0gIj8iOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X3JlYWRfc3RhdGUiKTsKIAogCWlmICghYmF0dGVyeSkKIAkJZ290byBlbmQ7CkBAIC00NTgsOCArNDUyLDYgQEAKIAlpZiAoKGJzdC0+c3RhdGUgJiAweDAxKSAmJiAoYnN0LT5zdGF0ZSAmIDB4MDIpKSB7CiAJCXNlcV9wcmludGYoc2VxLAogCQkJICAgImNoYXJnaW5nIHN0YXRlOiAgICAgICAgICBjaGFyZ2luZy9kaXNjaGFyZ2luZ1xuIik7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiQmF0dGVyeSBDaGFyZ2luZyBhbmQgRGlzY2hhcmdpbmc/XG4iKSk7CiAJfSBlbHNlIGlmIChic3QtPnN0YXRlICYgMHgwMSkKIAkJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgZGlzY2hhcmdpbmdcbiIpOwogCWVsc2UgaWYgKGJzdC0+c3RhdGUgJiAweDAyKQpAQCAtNDg5LDcgKzQ4MSw3IEBACiAgICAgICBlbmQ6CiAJa2ZyZWUoYnN0KTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfc3RhdGVfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTUwMiw3ICs0OTQsNiBAQAogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKXNlcS0+cHJpdmF0ZTsKIAljaGFyICp1bml0cyA9ICI/IjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYmF0dGVyeV9yZWFkX2FsYXJtIik7CiAKIAlpZiAoIWJhdHRlcnkpCiAJCWdvdG8gZW5kOwpAQCAtNTI3LDcgKzUxOCw3IEBACiAJCXNlcV9wcmludGYoc2VxLCAiJWQgJXNoXG4iLCAodTMyKSBiYXR0ZXJ5LT5hbGFybSwgdW5pdHMpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNTQwLDI1ICs1MzEsMjQgQEAKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKW0tPnByaXZhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2JhdHRlcnlfd3JpdGVfYWxhcm0iKTsKIAogCWlmICghYmF0dGVyeSB8fCAoY291bnQgPiBzaXplb2YoYWxhcm1fc3RyaW5nKSAtIDEpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFiYXR0ZXJ5LT5mbGFncy5wcmVzZW50KQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGFsYXJtX3N0cmluZywgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlhbGFybV9zdHJpbmdbY291bnRdID0gJ1wwJzsKIAogCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oYmF0dGVyeSwKIAkJCQkJc2ltcGxlX3N0cnRvdWwoYWxhcm1fc3RyaW5nLCBOVUxMLCAwKSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKLQlyZXR1cm5fVkFMVUUoY291bnQpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfYWxhcm1fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTU5NSwxMyArNTg1LDEyIEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2JhdHRlcnlfYWRkX2ZzIik7CiAKIAlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKIAkJCQkJCSAgICAgYWNwaV9iYXR0ZXJ5X2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCkBAIC02MDksOSArNTk4LDcgQEAKIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KEFDUElfQkFUVEVSWV9GSUxFX0lORk8sCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX0JBVFRFUllfRklMRV9JTkZPKSk7CisJCXJldHVybiAtRU5PREVWOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfYmF0dGVyeV9pbmZvX29wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC02MjIsOSArNjA5LDcgQEAKIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KEFDUElfQkFUVEVSWV9GSUxFX1NUQVRVUywKIAkJCQkgIFNfSVJVR08sIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJyVzJyBmcyBlbnRyeVxuIiwKLQkJCQkgIEFDUElfQkFUVEVSWV9GSUxFX1NUQVRVUykpOworCQlyZXR1cm4gLUVOT0RFVjsKIAllbHNlIHsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX2JhdHRlcnlfc3RhdGVfb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTYzNiwyMSArNjIxLDE4IEBACiAJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX0JBVFRFUllfRklMRV9BTEFSTSkpOworCQlyZXR1cm4gLUVOT0RFVjsKIAllbHNlIHsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX2JhdHRlcnlfYWxhcm1fb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZW1vdmVfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X3JlbW92ZV9mcyIpOwogCiAJaWYgKGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfQkFUVEVSWV9GSUxFX0FMQVJNLApAQCAtNjY0LDcgKzY0Niw3IEBACiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gTlVMTDsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NzYsMTMgKzY1OCwxMiBAQAogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKWRhdGE7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X25vdGlmeSIpOwogCiAJaWYgKCFiYXR0ZXJ5KQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfQkFUVEVSWV9OT1RJRllfU1RBVFVTOgpAQCAtNjk2LDcgKzY3Nyw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtNzA1LDE0ICs2ODYsMTMgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X2FkZCIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYXR0ZXJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYmF0dGVyeSksIEdGUF9LRVJORUwpOwogCWlmICghYmF0dGVyeSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQoYmF0dGVyeSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2JhdHRlcnkpKTsKIAogCWJhdHRlcnktPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwpAQCAtNzMyLDggKzcxMiw2IEBACiAJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgIGFjcGlfYmF0dGVyeV9ub3RpZnksIGJhdHRlcnkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtNzQ4LDcgKzcyNiw3IEBACiAJCWtmcmVlKGJhdHRlcnkpOwogCX0KIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCkBAIC03NTYsNTYgKzczNCw1MCBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2JhdHRlcnlfcmVtb3ZlIik7CiAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYmF0dGVyeSA9IChzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoYmF0dGVyeS0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgYWNwaV9iYXR0ZXJ5X25vdGlmeSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIHJlbW92aW5nIG5vdGlmeSBoYW5kbGVyXG4iKSk7CiAKIAlhY3BpX2JhdHRlcnlfcmVtb3ZlX2ZzKGRldmljZSk7CiAKIAlrZnJlZShiYXR0ZXJ5KTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9iYXR0ZXJ5X2luaXQodm9pZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYmF0dGVyeV9pbml0Iik7CiAKIAlhY3BpX2JhdHRlcnlfZGlyID0gcHJvY19ta2RpcihBQ1BJX0JBVFRFUllfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9iYXR0ZXJ5X2RpcikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAlhY3BpX2JhdHRlcnlfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2JhdHRlcnlfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0JBVFRFUllfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFjcGlfYmF0dGVyeV9leGl0KHZvaWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9iYXR0ZXJ5X2V4aXQiKTsKIAogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2JhdHRlcnlfZHJpdmVyKTsKIAogCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfQkFUVEVSWV9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIG1vZHVsZV9pbml0KGFjcGlfYmF0dGVyeV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBkZDM5ODNjLi5lYTVhMDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC02MCwyMSArNjAsMTkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2dldF9kZXZpY2UiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVEJEOiBTdXBwb3J0IGZpeGVkLWZlYXR1cmUgZGV2aWNlcyAqLwogCiAJc3RhdHVzID0gYWNwaV9nZXRfZGF0YShoYW5kbGUsIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgKHZvaWQgKiopZGV2aWNlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgISpkZXZpY2UpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLCAiTm8gY29udGV4dCBmb3Igb2JqZWN0IFslcF1cbiIsCi0JCQkJICBoYW5kbGUpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiTm8gY29udGV4dCBmb3Igb2JqZWN0IFslcF0iLCBoYW5kbGUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9kZXZpY2UpOwpAQCAtODQsMTAgKzgyLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bnNpZ25lZCBsb25nIHN0YSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19nZXRfc3RhdHVzIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCiAJICogRXZhbHVhdGUgX1NUQSBpZiBwcmVzZW50LgpAQCAtOTYsNyArOTMsNyBAQAogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPSAoaW50KXN0YTsKIAl9CiAKQEAgLTEyMCw3ICsxMTcsNyBAQAogCQkJICBkZXZpY2UtPnBucC5idXNfaWQsCiAJCQkgICh1MzIpIFNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpKSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfZ2V0X3N0YXR1cyk7CkBAIC0xMzYsMTEgKzEzMywxMCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIHBzYyA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19nZXRfcG93ZXIiKTsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCSpzdGF0ZSA9IEFDUElfU1RBVEVfVU5LTk9XTjsKIApAQCAtMTU5LDEyICsxNTUsMTIgQEAKIAkJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9QU0MiLAogCQkJCQkJICAgICAgIE5VTEwsICZwc2MpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCWRldmljZS0+cG93ZXIuc3RhdGUgPSAoaW50KXBzYzsKIAkJfSBlbHNlIGlmIChkZXZpY2UtPnBvd2VyLmZsYWdzLnBvd2VyX3Jlc291cmNlcykgewogCQkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfaW5mZXJyZWRfc3RhdGUoZGV2aWNlKTsKIAkJCWlmIChyZXN1bHQpCi0JCQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKIAkJfQogCiAJCSpzdGF0ZSA9IGRldmljZS0+cG93ZXIuc3RhdGU7CkBAIC0xNzMsNyArMTY5LDcgQEAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgWyVzXSBwb3dlciBzdGF0ZSBpcyBEJWRcbiIsCiAJCQkgIGRldmljZS0+cG5wLmJ1c19pZCwgZGV2aWNlLT5wb3dlci5zdGF0ZSkpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9wb3dlcik7CkBAIC0xODUsMjEgKzE4MSwyMCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAljaGFyIG9iamVjdF9uYW1lWzVdID0geyAnXycsICdQJywgJ1MnLCAnMCcgKyBzdGF0ZSwgJ1wwJyB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfc2V0X3Bvd2VyIik7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAlpZiAoKHN0YXRlIDwgQUNQSV9TVEFURV9EMCkgfHwgKHN0YXRlID4gQUNQSV9TVEFURV9EMykpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIHZhbGlkIHRhcmdldCBzdGF0ZSAqLwogCiAJaWYgKCFkZXZpY2UtPmZsYWdzLnBvd2VyX21hbmFnZWFibGUpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCSAgIkRldmljZSBpcyBub3QgcG93ZXIgbWFuYWdlYWJsZVxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXByaW50ayhLRVJOX0RFQlVHICJEZXZpY2UgYFslc10nIGlzIG5vdCBwb3dlciBtYW5hZ2VhYmxlIiwKKwkJCQlkZXZpY2UtPmtvYmoubmFtZSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAkvKgogCSAqIEdldCBkZXZpY2UncyBjdXJyZW50IHBvd2VyIHN0YXRlIGlmIGl0J3MgdW5rbm93bgpAQCAtMjExLDE4ICsyMDYsMTggQEAKIAkJaWYgKHN0YXRlID09IGRldmljZS0+cG93ZXIuc3RhdGUpIHsKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBpcyBhbHJlYWR5IGF0IEQlZFxuIiwKIAkJCQkJICBzdGF0ZSkpOwotCQkJcmV0dXJuX1ZBTFVFKDApOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJaWYgKCFkZXZpY2UtPnBvd2VyLnN0YXRlc1tzdGF0ZV0uZmxhZ3MudmFsaWQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLCAiRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgRCVkXG4iLAotCQkJCSAgc3RhdGUpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgRCVkXG4iLCBzdGF0ZSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoZGV2aWNlLT5wYXJlbnQgJiYgKHN0YXRlIDwgZGV2aWNlLT5wYXJlbnQtPnBvd2VyLnN0YXRlKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1dBUk4sCi0JCQkJICAiQ2Fubm90IHNldCBkZXZpY2UgdG8gYSBoaWdoZXItcG93ZXJlZCBzdGF0ZSB0aGFuIHBhcmVudFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkgICAgICAiQ2Fubm90IHNldCBkZXZpY2UgdG8gYSBoaWdoZXItcG93ZXJlZCIKKwkJCSAgICAgICIgc3RhdGUgdGhhbiBwYXJlbnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKgpAQCAtMjY0LDE1ICsyNTksMTUgQEAKIAogICAgICAgZW5kOgogCWlmIChyZXN1bHQpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkgICJFcnJvciB0cmFuc2l0aW9uaW5nIGRldmljZSBbJXNdIHRvIEQlZFxuIiwKLQkJCQkgIGRldmljZS0+cG5wLmJ1c19pZCwgc3RhdGUpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCSAgICAgICJUcmFuc2l0aW9uaW5nIGRldmljZSBbJXNdIHRvIEQlZFxuIiwKKwkJCSAgICAgIGRldmljZS0+cG5wLmJ1c19pZCwgc3RhdGUpOwogCWVsc2UKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIkRldmljZSBbJXNdIHRyYW5zaXRpb25lZCB0byBEJWRcbiIsCiAJCQkJICBkZXZpY2UtPnBucC5idXNfaWQsIHN0YXRlKSk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX3NldF9wb3dlcik7CkBAIC0yOTMsMTggKzI4OCwxNyBAQAogCXN0cnVjdCBhY3BpX2J1c19ldmVudCAqZXZlbnQgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfZ2VuZXJhdGVfZXZlbnQiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogZHJvcCBldmVudCBvbiB0aGUgZmxvb3IgaWYgbm8gb25lJ3MgbGlzdGVuaW5nICovCiAJaWYgKCFldmVudF9pc19vcGVuKQotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCiAJZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9idXNfZXZlbnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCiAJc3RyY3B5KGV2ZW50LT5kZXZpY2VfY2xhc3MsIGRldmljZS0+cG5wLmRldmljZV9jbGFzcyk7CiAJc3RyY3B5KGV2ZW50LT5idXNfaWQsIGRldmljZS0+cG5wLmJ1c19pZCk7CkBAIC0zMTcsNyArMzExLDcgQEAKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWNwaV9idXNfZXZlbnRfcXVldWUpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dlbmVyYXRlX2V2ZW50KTsKQEAgLTMyOSwxMCArMzIzLDkgQEAKIAogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfcmVjZWl2ZV9ldmVudCIpOwogCiAJaWYgKCFldmVudCkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChsaXN0X2VtcHR5KCZhY3BpX2J1c19ldmVudF9saXN0KSkgewogCkBAIC0zNDYsNyArMzM5LDcgQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlyZXR1cm5fVkFMVUUoLUVSRVNUQVJUU1lTKTsKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFjcGlfYnVzX2V2ZW50X2xvY2ssIGZsYWdzKTsKQEAgLTM1NywxMyArMzUwLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNwaV9idXNfZXZlbnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFlbnRyeSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCW1lbWNweShldmVudCwgZW50cnksIHNpemVvZihzdHJ1Y3QgYWNwaV9idXNfZXZlbnQpKTsKIAogCWtmcmVlKGVudHJ5KTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19yZWNlaXZlX2V2ZW50KTsKQEAgLTM3OCwxMCArMzcxLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwogCXN0cnVjdCBhY3BpX2RldmljZV9zdGF0dXMgb2xkX3N0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2NoZWNrX2RldmljZSIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoc3RhdHVzX2NoYW5nZWQpCiAJCSpzdGF0dXNfY2hhbmdlZCA9IDA7CkBAIC0zOTgsMTUgKzM5MCwxNSBAQAogCQkJaWYgKHN0YXR1c19jaGFuZ2VkKQogCQkJCSpzdGF0dXNfY2hhbmdlZCA9IDE7CiAJCX0KLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX2J1c19nZXRfc3RhdHVzKGRldmljZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKFNUUlVDVF9UT19JTlQob2xkX3N0YXR1cykgPT0gU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykpCi0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc3RhdHVzX2NoYW5nZWQpCiAJCSpzdGF0dXNfY2hhbmdlZCA9IDE7CkBAIC00MjIsNyArNDE0LDcgQEAKIAkJLyogVEJEOiBIYW5kbGUgZGV2aWNlIHJlbW92YWwgKi8KIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9idXNfY2hlY2tfc2NvcGUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC00MzAsMjUgKzQyMiwyNCBAQAogCWludCByZXN1bHQgPSAwOwogCWludCBzdGF0dXNfY2hhbmdlZCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19jaGVja19zY29wZSIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBTdGF0dXMgQ2hhbmdlPyAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX2NoZWNrX2RldmljZShkZXZpY2UsICZzdGF0dXNfY2hhbmdlZCk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAlpZiAoIXN0YXR1c19jaGFuZ2VkKQotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBUQkQ6IEVudW1lcmF0ZSBjaGlsZCBkZXZpY2VzIHdpdGhpbiB0aGlzIGRldmljZSdzIHNjb3BlIGFuZAogCSAqICAgICAgIHJ1biBhY3BpX2J1c19jaGVja19kZXZpY2UoKSdzIG9uIHRoZW0uCiAJICovCiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNDYxLDEwICs0NTIsOSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX25vdGlmeSIpOwogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAodHlwZSkgewogCkBAIC01MzksNyArNTI5LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTUzLDcgKzU0Myw2IEBACiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3QgPSB7IDEsICZhcmcgfTsKIAljaGFyICptZXNzYWdlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2luaXRfaXJxIik7CiAKIAkvKiAKIAkgKiBMZXQgdGhlIHN5c3RlbSBrbm93IHdoYXQgaW50ZXJydXB0IG1vZGVsIHdlIGFyZSB1c2luZyBieQpAQCAtNTcyLDcgKzU2MSw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJVbmtub3duIGludGVycnVwdCByb3V0aW5nIG1vZGVsXG4iKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiVXNpbmcgJXMgZm9yIGludGVycnVwdCByb3V0aW5nXG4iLCBtZXNzYWdlKTsKQEAgLTU4MSwxMSArNTcwLDExIEBACiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLCAiXFxfUElDIiwgJmFyZ19saXN0LCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgJiYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBldmFsdWF0aW5nIF9QSUNcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUElDIikpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgX19pbml0IGFjcGlfZWFybHlfaW5pdCh2b2lkKQpAQCAtNTkzLDEwICs1ODIsOSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IHNpemVvZihhY3BpX2ZhZHQpLCAmYWNwaV9mYWR0IH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Vhcmx5X2luaXQiKTsKIAogCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkNvcmUgcmV2aXNpb24gJTA4eFxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKIApAQCAtNjU2LDExICs2NDQsMTEgQEAKIAkJZ290byBlcnJvcjA7CiAJfQogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogCiAgICAgICBlcnJvcjA6CiAJZGlzYWJsZV9hY3BpKCk7Ci0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2J1c19pbml0KHZvaWQpCkBAIC02NjksNyArNjU3LDYgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlleHRlcm4gYWNwaV9zdGF0dXMgYWNwaV9vc19pbml0aWFsaXplMSh2b2lkKTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2luaXQiKTsKIAogCXN0YXR1cyA9IGFjcGlfb3NfaW5pdGlhbGl6ZTEoKTsKIApAQCAtNzMxLDEyICs3MTgsMTIgQEAKIAkgKi8KIAlhY3BpX3Jvb3RfZGlyID0gcHJvY19ta2RpcihBQ1BJX0JVU19GSUxFX1JPT1QsIE5VTEwpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogCiAJLyogTWltaWMgc3RydWN0dXJlZCBleGNlcHRpb24gaGFuZGxpbmcgKi8KICAgICAgIGVycm9yMToKIAlhY3BpX3Rlcm1pbmF0ZSgpOwotCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogZGVjbF9zdWJzeXMoYWNwaSwgTlVMTCwgTlVMTCk7CkBAIC03NDUsMTEgKzczMiwxMCBAQAogewogCWludCByZXN1bHQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9pbml0Iik7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiSW50ZXJwcmV0ZXIgZGlzYWJsZWQuXG4iKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlmaXJtd2FyZV9yZWdpc3RlcigmYWNwaV9zdWJzeXMpOwpAQCAtNzcwLDcgKzc1Niw3IEBACiAJfSBlbHNlCiAJCWRpc2FibGVfYWNwaSgpOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3Vic3lzX2luaXRjYWxsKGFjcGlfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggNGI2ZDlmMC4uMDI1OTQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtMTEyLDE1ICsxMTIsMTQgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IChzdHJ1Y3QgYWNwaV9idXR0b24gKilzZXEtPnByaXZhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1dHRvbl9pbmZvX3NlcV9zaG93Iik7CiAKIAlpZiAoIWJ1dHRvbiB8fCAhYnV0dG9uLT5kZXZpY2UpCi0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAKIAlzZXFfcHJpbnRmKHNlcSwgInR5cGU6ICAgICAgICAgICAgICAgICAgICAlc1xuIiwKIAkJICAgYWNwaV9kZXZpY2VfbmFtZShidXR0b24tPmRldmljZSkpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEzNCwxMCArMTMzLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnV0dG9uX3N0YXRlX3NlcV9zaG93Iik7CiAKIAlpZiAoIWJ1dHRvbiB8fCAhYnV0dG9uLT5kZXZpY2UpCi0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoYnV0dG9uLT5oYW5kbGUsICJfTElEIiwgTlVMTCwgJnN0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTE0Nyw3ICsxNDUsNyBAQAogCQkJICAgKHN0YXRlID8gIm9wZW4iIDogImNsb3NlZCIpKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fc3RhdGVfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE2NCwxMCArMTYyLDkgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1dHRvbl9hZGRfZnMiKTsKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlidXR0b24gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKQEAgLTE5NSwyMSArMTkyLDE5IEBACiAJfQogCiAJaWYgKCFlbnRyeSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwgZW50cnkpOwogCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShBQ1BJX0JVVFRPTl9GSUxFX0lORk8sCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX0JVVFRPTl9GSUxFX0lORk8pKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9idXR0b25faW5mb19mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTIyMSw5ICsyMTYsNyBAQAogCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KEFDUElfQlVUVE9OX0ZJTEVfU1RBVEUsCiAJCQkJCSAgU19JUlVHTywgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwogCQlpZiAoIWVudHJ5KQotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnIGZzIGVudHJ5XG4iLAotCQkJCQkgIEFDUElfQlVUVE9OX0ZJTEVfSU5GTykpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWVsc2UgewogCQkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX2J1dHRvbl9zdGF0ZV9mb3BzOwogCQkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC0yMzEsMTQgKzIyNCwxMyBAQAogCQl9CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1dHRvbl9yZW1vdmVfZnMiKTsKIAogCWJ1dHRvbiA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpZiAoYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpIHsKQEAgLTI1Myw3ICsyNDUsNyBAQAogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IE5VTEw7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjY0LDEwICsyNTYsOSBAQAogewogCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gKHN0cnVjdCBhY3BpX2J1dHRvbiAqKWRhdGE7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1dHRvbl9ub3RpZnkiKTsKIAogCWlmICghYnV0dG9uIHx8ICFidXR0b24tPmRldmljZSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfQlVUVE9OX05PVElGWV9TVEFUVVM6CkBAIC0yODAsMjEgKzI3MSwyMCBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IChzdHJ1Y3QgYWNwaV9idXR0b24gKilkYXRhOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkIik7CiAKIAlpZiAoIWJ1dHRvbikKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAogCWFjcGlfYnV0dG9uX25vdGlmeShidXR0b24tPmhhbmRsZSwgQUNQSV9CVVRUT05fTk9USUZZX1NUQVRVUywgYnV0dG9uKTsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTMwMywxNCArMjkzLDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXR0b25fYWRkIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJ1dHRvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2J1dHRvbiksIEdGUF9LRVJORUwpOwogCWlmICghYnV0dG9uKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChidXR0b24sIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9idXR0b24pKTsKIAogCWJ1dHRvbi0+ZGV2aWNlID0gZGV2aWNlOwpAQCAtMzQ5LDggKzMzOCw4IEBACiAJCXNwcmludGYoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgIiVzLyVzIiwKIAkJCUFDUElfQlVUVE9OX0NMQVNTLCBBQ1BJX0JVVFRPTl9TVUJDTEFTU19MSUQpOwogCX0gZWxzZSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJVbnN1cHBvcnRlZCBoaWQgWyVzXVxuIiwKLQkJCQkgIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuc3VwcG9ydGVkIGhpZCBbJXNdXG4iLAorCQkJICAgIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMzgxLDggKzM3MCw2IEBACiAJfQogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgaW5zdGFsbGluZyBub3RpZnkgaGFuZGxlclxuIikpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC00MDYsNyArMzkzLDcgQEAKIAkJa2ZyZWUoYnV0dG9uKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCkBAIC00MTQsMTAgKzQwMSw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1dHRvbl9yZW1vdmUiKTsKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlidXR0b24gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKQEAgLTQ0MCwzOSArNDI2LDMzIEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciByZW1vdmluZyBub3RpZnkgaGFuZGxlclxuIikpOwotCiAJYWNwaV9idXR0b25fcmVtb3ZlX2ZzKGRldmljZSk7CiAKIAlrZnJlZShidXR0b24pOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2J1dHRvbl9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1dHRvbl9pbml0Iik7CiAKIAlhY3BpX2J1dHRvbl9kaXIgPSBwcm9jX21rZGlyKEFDUElfQlVUVE9OX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfYnV0dG9uX2RpcikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAlhY3BpX2J1dHRvbl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2J1dHRvbl9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfQlVUVE9OX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX2J1dHRvbl9leGl0KHZvaWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXR0b25fZXhpdCIpOwogCiAJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfYnV0dG9uX2RyaXZlcik7CiAKQEAgLTQ4NCw3ICs0NjQsNyBAQAogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0JVVFRPTl9TVUJDTEFTU19MSUQsIGFjcGlfYnV0dG9uX2Rpcik7CiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9CVVRUT05fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBtb2R1bGVfaW5pdChhY3BpX2J1dHRvbl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYyBiL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYwppbmRleCBiNjlhOGNhLi43ZjdlNDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jCkBAIC03MywxNyArNzMsMTYgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBzdGE7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJpc19kZXZpY2VfcHJlc2VudCIpOwogCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9TVEEiLCAmdGVtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoMSk7CS8qIF9TVEEgbm90IGZvdW5kLCBhc3NtdWUgZGV2aWNlIHByZXNlbnQgKi8KKwkJcmV0dXJuIDE7CS8qIF9TVEEgbm90IGZvdW5kLCBhc3NtdWUgZGV2aWNlIHByZXNlbnQgKi8KIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1RBIiwgTlVMTCwgJnN0YSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoMCk7CS8qIEZpcm13YXJlIGVycm9yICovCisJCXJldHVybiAwOwkvKiBGaXJtd2FyZSBlcnJvciAqLwogCi0JcmV0dXJuX1ZBTFVFKChzdGEgJiBBQ1BJX1NUQV9QUkVTRU5UKSA9PSBBQ1BJX1NUQV9QUkVTRU5UKTsKKwlyZXR1cm4gKChzdGEgJiBBQ1BJX1NUQV9QUkVTRU5UKSA9PSBBQ1BJX1NUQV9QUkVTRU5UKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05MSwxNiArOTAsMTUgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9jb250YWluZXIgKmNvbnRhaW5lcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfY29udGFpbmVyX2FkZCIpOwogCiAJaWYgKCFkZXZpY2UpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgImRldmljZSBpcyBOVUxMXG4iKSk7Ci0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZGV2aWNlIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAljb250YWluZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9jb250YWluZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbnRhaW5lcikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbXNldChjb250YWluZXIsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9jb250YWluZXIpKTsKIAljb250YWluZXItPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwpAQCAtMTExLDcgKzEwOSw3IEBACiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIDwlcz4gYmlkIDwlcz5cbiIsCiAJCQkgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2NvbnRhaW5lcl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQpAQCAtMTMwLDIzICsxMjgsMjIgQEAKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBkZXY7CiAJaW50IHJlc3VsdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImNvbnRhaW5lcl9kZXZpY2VfYWRkIik7CiAKIAlpZiAoYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJnBoYW5kbGUpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UocGhhbmRsZSwgJnBkZXYpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGFjcGlfYnVzX2FkZChkZXZpY2UsIHBkZXYsIGhhbmRsZSwgQUNQSV9CVVNfVFlQRV9ERVZJQ0UpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmVzdWx0ID0gYWNwaV9idXNfc3RhcnQoKmRldmljZSk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBjb250YWluZXJfbm90aWZ5X2NiKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIHR5cGUsIHZvaWQgKmNvbnRleHQpCkBAIC0xNTYsNyArMTUzLDYgQEAKIAlpbnQgcHJlc2VudDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJjb250YWluZXJfbm90aWZ5X2NiIik7CiAKIAlwcmVzZW50ID0gaXNfZGV2aWNlX3ByZXNlbnQoaGFuZGxlKTsKIApAQCAtMTkyLDcgKzE4OCw3IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzCkBAIC0yMDUsMTEgKzIwMSwxMCBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlpbnQgKmFjdGlvbiA9IGNvbnRleHQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJjb250YWluZXJfd2Fsa19uYW1lc3BhY2VfY2IiKTsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpIHx8ICFidWZmZXIucG9pbnRlcikgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQlyZXR1cm4gQUVfT0s7CiAJfQogCiAJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwpAQCAtMjQzLDcgKzIzOCw3IEBACiAgICAgICBlbmQ6CiAJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2NvbnRhaW5lcl9pbml0KHZvaWQpCkBAIC0yNjksNyArMjY0LDYgQEAKIHsKIAlpbnQgYWN0aW9uID0gVU5JTlNUQUxMX05PVElGWV9IQU5ETEVSOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9jb250YWluZXJfZXhpdCIpOwogCiAJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLAogCQkJICAgIEFDUElfUk9PVF9PQkpFQ1QsCkBAIC0yNzgsNyArMjcyLDcgQEAKIAogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2NvbnRhaW5lcl9kcml2ZXIpOwogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBtb2R1bGVfaW5pdChhY3BpX2NvbnRhaW5lcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKaW5kZXggMjYzMzIyYi4uMzVjNmFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2RlYnVnLmMKQEAgLTE1NSwxMyArMTU1LDEyIEBACiB7CiAJY2hhciBkZWJ1Z19zdHJpbmdbMTJdID0geyAnXDAnIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3N5c3RlbV93cml0ZV9kZWJ1ZyIpOwogCiAJaWYgKGNvdW50ID4gc2l6ZW9mKGRlYnVnX3N0cmluZykgLSAxKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGRlYnVnX3N0cmluZywgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlkZWJ1Z19zdHJpbmdbY291bnRdID0gJ1wwJzsKIApAQCAtMTczLDEwICsxNzIsMTAgQEAKIAkJYWNwaV9kYmdfbGV2ZWwgPSBzaW1wbGVfc3RydG91bChkZWJ1Z19zdHJpbmcsIE5VTEwsIDApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybl9WQUxVRShjb3VudCk7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2RlYnVnX2luaXQodm9pZCkKQEAgLTE4NSwxMCArMTg0LDkgQEAKIAlpbnQgZXJyb3IgPSAwOwogCWNoYXIgKm5hbWU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2RlYnVnX2luaXQiKTsKIAogCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCiAJLyogJ2RlYnVnX2xheWVyJyBbUi9XXSAqLwogCW5hbWUgPSBBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xBWUVSOwpAQCAtMjEzLDE1ICsyMTEsMTIgQEAKIAkJZ290byBFcnJvcjsKIAogICAgICAgRG9uZToKLQlyZXR1cm5fVkFMVUUoZXJyb3IpOworCXJldHVybiBlcnJvcjsKIAogICAgICAgRXJyb3I6Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJyVzJyBwcm9jIGZzIGVudHJ5XG4iLCBuYW1lKSk7Ci0KIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xFVkVMLCBhY3BpX3Jvb3RfZGlyKTsKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1NZU1RFTV9GSUxFX0RFQlVHX0xBWUVSLCBhY3BpX3Jvb3RfZGlyKTsKLQllcnJvciA9IC1FRkFVTFQ7CisJZXJyb3IgPSAtRU5PREVWOwogCWdvdG8gRG9uZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNpbml0LmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYwppbmRleCBiYmRmOTkwLi5kYWY1MWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc2luaXQuYwpAQCAtMTI1LDM3ICsxMjUsNyBAQAogCQlpZiAoaW5mby0+dGFibGVfZGVzYy0+cG9pbnRlci0+cmV2aXNpb24gPT0gMSkgewogCQkJbm9kZS0+ZmxhZ3MgfD0gQU5PQkpfREFUQV9XSURUSF8zMjsKIAkJfQotI2lmZGVmIEFDUElfSU5JVF9QQVJTRV9NRVRIT0RTCi0JCS8qCi0JCSAqIE5vdGUgMTEvMjAwNTogUmVtb3ZlZCB0aGlzIGNvZGUgdG8gcGFyc2UgYWxsIG1ldGhvZHMgZHVyaW5nIHRhYmxlCi0JCSAqIGxvYWQgYmVjYXVzZSBpdCBjYXVzZXMgcHJvYmxlbXMgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMgZHVyaW5nIHRoZQotCQkgKiBwYXJzZS4gQWxzbywgaXQgc2VlbXMgbGlrZSBvdmVya2lsbCBhbmQgd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0bwotCQkgKiBhYm9ydCBhIHRhYmxlIGxvYWQgYmVjYXVzZSBvZiBhbiBpc3N1ZSB3aXRoIGEgc2luZ2xlIG1ldGhvZC4KLQkJICovCiAKLQkJLyoKLQkJICogUHJpbnQgYSBkb3QgZm9yIGVhY2ggbWV0aG9kIHVubGVzcyB3ZSBhcmUgZ29pbmcgdG8gcHJpbnQKLQkJICogdGhlIGVudGlyZSBwYXRobmFtZQotCQkgKi8KLQkJaWYgKCEoYWNwaV9kYmdfbGV2ZWwgJiBBQ1BJX0xWX0lOSVRfTkFNRVMpKSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULCAiLiIpKTsKLQkJfQotCi0JCS8qCi0JCSAqIEFsd2F5cyBwYXJzZSBtZXRob2RzIHRvIGRldGVjdCBlcnJvcnMsIHdlIHdpbGwgZGVsZXRlCi0JCSAqIHRoZSBwYXJzZSB0cmVlIGJlbG93Ci0JCSAqLwotCQlzdGF0dXMgPSBhY3BpX2RzX3BhcnNlX21ldGhvZChvYmpfaGFuZGxlKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiTWV0aG9kICVwIFslNC40c10gLSBwYXJzZSBmYWlsdXJlLCAlcyIsCi0JCQkJICAgIG9ial9oYW5kbGUsCi0JCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfaGFuZGxlKSwKLQkJCQkgICAgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKLQotCQkJLyogVGhpcyBwYXJzZSBmYWlsZWQsIGJ1dCB3ZSB3aWxsIGNvbnRpbnVlIHBhcnNpbmcgbW9yZSBtZXRob2RzICovCi0JCX0KLSNlbmRpZgogCQlpbmZvLT5tZXRob2RfY291bnQrKzsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jCmluZGV4IGJjOWFjYTQuLmEzOWEzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYwpAQCAtNTIsNiArNTIsMTAgQEAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0RJU1BBVENIRVIKIEFDUElfTU9EVUxFX05BTUUoImRzbWV0aG9kIikKIAorLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2RzX2NyZWF0ZV9tZXRob2RfbXV0ZXgodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbWV0aG9kX2Rlc2MpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2RzX21ldGhvZF9lcnJvcgpAQCAtNjcsNiArNzEsNyBAQAogICogICAgICAgICAgICAgIE5vdGU6IEFsbG93cyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgdG8gY2hhbmdlIHRoZSBzdGF0dXMgY29kZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIGFjcGlfc3RhdHVzCiBhY3BpX2RzX21ldGhvZF9lcnJvcihhY3BpX3N0YXR1cyBzdGF0dXMsIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7CkBAIC0xMTMsMTEgKzExOCw1MSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2RzX2NyZWF0ZV9tZXRob2RfbXV0ZXgKKyAqCisgKiBQQVJBTUVURVJTOiAgb2JqX2Rlc2MgICAgICAgICAgICAtIFRoZSBtZXRob2Qgb2JqZWN0CisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDcmVhdGUgYSBtdXRleCBvYmplY3QgZm9yIGEgc2VyaWFsaXplZCBjb250cm9sIG1ldGhvZAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9kc19jcmVhdGVfbWV0aG9kX211dGV4KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm1ldGhvZF9kZXNjKQoreworCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm11dGV4X2Rlc2M7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9OQU1FKGRzX2NyZWF0ZV9tZXRob2RfbXV0ZXgpOworCisJLyogQ3JlYXRlIHRoZSBuZXcgbXV0ZXggb2JqZWN0ICovCisKKwltdXRleF9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9NVVRFWCk7CisJaWYgKCFtdXRleF9kZXNjKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCX0KKworCS8qIENyZWF0ZSB0aGUgYWN0dWFsIE9TIE11dGV4ICovCisKKwlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9tdXRleCgmbXV0ZXhfZGVzYy0+bXV0ZXgub3NfbXV0ZXgpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwltdXRleF9kZXNjLT5tdXRleC5zeW5jX2xldmVsID0gbWV0aG9kX2Rlc2MtPm1ldGhvZC5zeW5jX2xldmVsOworCW1ldGhvZF9kZXNjLT5tZXRob2QubXV0ZXggPSBtdXRleF9kZXNjOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbgogICoKICAqIFBBUkFNRVRFUlM6ICBtZXRob2Rfbm9kZSAgICAgICAgIC0gTm9kZSBvZiB0aGUgbWV0aG9kCiAgKiAgICAgICAgICAgICAgb2JqX2Rlc2MgICAgICAgICAgICAtIFRoZSBtZXRob2Qgb2JqZWN0Ci0gKiAgICAgICAgICAgICAgY2FsbGluZ19tZXRob2Rfbm9kZSAtIENhbGxlciBvZiB0aGlzIG1ldGhvZCAoaWYgbm9uLW51bGwpCisgKiAgICAgICAgICAgICAgd2Fsa19zdGF0ZSAgICAgICAgICAtIGN1cnJlbnQgc3RhdGUsIE5VTEwgaWYgbm90IHlldCBleGVjdXRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBtZXRob2QuCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTEyOCw5ICsxNzMsOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMKLWFjcGlfZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqIG1ldGhvZF9ub2RlLAotCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiBvYmpfZGVzYywKLQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqIGNhbGxpbmdfbWV0aG9kX25vZGUpCithY3BpX2RzX2JlZ2luX21ldGhvZF9leGVjdXRpb24oc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9ub2RlLAorCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAorCQkJICAgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKQEAgLTE0OSwzNSArMTk0LDgwIEBACiAJfQogCiAJLyoKLQkgKiBJZiB0aGVyZSBpcyBhIGNvbmN1cnJlbmN5IGxpbWl0IG9uIHRoaXMgbWV0aG9kLCB3ZSBuZWVkIHRvCi0JICogb2J0YWluIGEgdW5pdCBmcm9tIHRoZSBtZXRob2Qgc2VtYXBob3JlLgorCSAqIElmIHRoaXMgbWV0aG9kIGlzIHNlcmlhbGl6ZWQsIHdlIG5lZWQgdG8gYWNxdWlyZSB0aGUgbWV0aG9kIG11dGV4LgogCSAqLwotCWlmIChvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkgeworCWlmIChvYmpfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCkgewogCQkvKgotCQkgKiBBbGxvdyByZWN1cnNpdmUgbWV0aG9kIGNhbGxzLCB1cCB0byB0aGUgcmVlbnRyYW5jeS9jb25jdXJyZW5jeQotCQkgKiBsaW1pdCBpbXBvc2VkIGJ5IHRoZSBTRVJJQUxJWkVEIHJ1bGUgYW5kIHRoZSBzeW5jX2xldmVsIG1ldGhvZAotCQkgKiBwYXJhbWV0ZXIuCi0JCSAqCi0JCSAqIFRoZSBwb2ludCBvZiB0aGlzIGNvZGUgaXMgdG8gYXZvaWQgcGVybWFuZW50bHkgYmxvY2tpbmcgYQotCQkgKiB0aHJlYWQgdGhhdCBpcyBtYWtpbmcgcmVjdXJzaXZlIG1ldGhvZCBjYWxscy4KKwkJICogQ3JlYXRlIGEgbXV0ZXggZm9yIHRoZSBtZXRob2QgaWYgaXQgaXMgZGVmaW5lZCB0byBiZSBTZXJpYWxpemVkCisJCSAqIGFuZCBhIG11dGV4IGhhcyBub3QgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuIFdlIGRlZmVyIHRoZSBtdXRleCBjcmVhdGlvbgorCQkgKiB1bnRpbCBhIG1ldGhvZCBpcyBhY3R1YWxseSBleGVjdXRlZCwgdG8gbWluaW1pemUgdGhlIG9iamVjdCBjb3VudAogCQkgKi8KLQkJaWYgKG1ldGhvZF9ub2RlID09IGNhbGxpbmdfbWV0aG9kX25vZGUpIHsKLQkJCWlmIChvYmpfZGVzYy0+bWV0aG9kLnRocmVhZF9jb3VudCA+PQotCQkJICAgIG9ial9kZXNjLT5tZXRob2QuY29uY3VycmVuY3kpIHsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX01FVEhPRF9MSU1JVCk7CisJCWlmICghb2JqX2Rlc2MtPm1ldGhvZC5tdXRleCkgeworCQkJc3RhdHVzID0gYWNwaV9kc19jcmVhdGVfbWV0aG9kX211dGV4KG9ial9kZXNjKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJfQogCQl9CiAKIAkJLyoKLQkJICogR2V0IGEgdW5pdCBmcm9tIHRoZSBtZXRob2Qgc2VtYXBob3JlLiBUaGlzIHJlbGVhc2VzIHRoZQotCQkgKiBpbnRlcnByZXRlciBpZiB3ZSBibG9jayAodGhlbiByZWFjcXVpcmVzIGl0KQorCQkgKiBUaGUgY3VycmVudF9zeW5jX2xldmVsIChwZXItdGhyZWFkKSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bworCQkgKiB0aGUgc3luYyBsZXZlbCBvZiB0aGUgbWV0aG9kLiBUaGlzIG1lY2hhbmlzbSBwcm92aWRlcyBzb21lCisJCSAqIGRlYWRsb2NrIHByZXZlbnRpb24KKwkJICoKKwkJICogVG9wLWxldmVsIG1ldGhvZCBpbnZvY2F0aW9uIGhhcyBubyB3YWxrIHN0YXRlIGF0IHRoaXMgcG9pbnQKIAkJICovCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V4X3N5c3RlbV93YWl0X3NlbWFwaG9yZShvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSwKLQkJCQkJCSAgQUNQSV9XQUlUX0ZPUkVWRVIpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlpZiAod2Fsa19zdGF0ZSAmJgorCQkgICAgKHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsID4KKwkJICAgICBvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5zeW5jX2xldmVsKSkgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkgICAgIkNhbm5vdCBhY3F1aXJlIE11dGV4IGZvciBtZXRob2QgWyU0LjRzXSwgY3VycmVudCBTeW5jTGV2ZWwgaXMgdG9vIGxhcmdlICglZCkiLAorCQkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUobWV0aG9kX25vZGUpLAorCQkJCSAgICB3YWxrX3N0YXRlLT50aHJlYWQtPmN1cnJlbnRfc3luY19sZXZlbCkpOworCisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX01VVEVYX09SREVSKTsKIAkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgbWV0aG9kIG11dGV4IGlmIG5lY2Vzc2FyeS4gRG8gbm90IGFjcXVpcmUgbXV0ZXggZm9yIGEKKwkJICogcmVjdXJzaXZlIGNhbGwuCisJCSAqLworCQlpZiAoIXdhbGtfc3RhdGUgfHwKKwkJICAgICFvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQgfHwKKwkJICAgICh3YWxrX3N0YXRlLT50aHJlYWQgIT0KKwkJICAgICBvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQpKSB7CisJCQkvKgorCQkJICogQWNxdWlyZSB0aGUgbWV0aG9kIG11dGV4LiBUaGlzIHJlbGVhc2VzIHRoZSBpbnRlcnByZXRlciBpZiB3ZQorCQkJICogYmxvY2sgKGFuZCByZWFjcXVpcmVzIGl0IGJlZm9yZSBpdCByZXR1cm5zKQorCQkJICovCisJCQlzdGF0dXMgPQorCQkJICAgIGFjcGlfZXhfc3lzdGVtX3dhaXRfbXV0ZXgob2JqX2Rlc2MtPm1ldGhvZC5tdXRleC0+CisJCQkJCQkgICAgICBtdXRleC5vc19tdXRleCwKKwkJCQkJCSAgICAgIEFDUElfV0FJVF9GT1JFVkVSKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQkJfQorCisJCQkvKiBVcGRhdGUgdGhlIG11dGV4IGFuZCB3YWxrIGluZm8gYW5kIHNhdmUgdGhlIG9yaWdpbmFsIHN5bmNfbGV2ZWwgKi8KKworCQkJaWYgKHdhbGtfc3RhdGUpIHsKKwkJCQlvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC4KKwkJCQkgICAgb3JpZ2luYWxfc3luY19sZXZlbCA9CisJCQkJICAgIHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsOworCisJCQkJb2JqX2Rlc2MtPm1ldGhvZC5tdXRleC0+bXV0ZXgub3duZXJfdGhyZWFkID0KKwkJCQkgICAgd2Fsa19zdGF0ZS0+dGhyZWFkOworCQkJCXdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsID0KKwkJCQkgICAgb2JqX2Rlc2MtPm1ldGhvZC5zeW5jX2xldmVsOworCQkJfSBlbHNlIHsKKwkJCQlvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC4KKwkJCQkgICAgb3JpZ2luYWxfc3luY19sZXZlbCA9CisJCQkJICAgIG9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4LnN5bmNfbGV2ZWw7CisJCQl9CisJCX0KKworCQkvKiBBbHdheXMgaW5jcmVhc2UgYWNxdWlzaXRpb24gZGVwdGggKi8KKworCQlvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5hY3F1aXNpdGlvbl9kZXB0aCsrOwogCX0KIAogCS8qCkBAIC0yMDAsMTAgKzI5MCwxMCBAQAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCiAgICAgICBjbGVhbnVwOgotCS8qIE9uIGVycm9yLCBtdXN0IHNpZ25hbCB0aGUgbWV0aG9kIHNlbWFwaG9yZSBpZiBwcmVzZW50ICovCisJLyogT24gZXJyb3IsIG11c3QgcmVsZWFzZSB0aGUgbWV0aG9kIG11dGV4IChpZiBwcmVzZW50KSAqLwogCi0JaWYgKG9ial9kZXNjLT5tZXRob2Quc2VtYXBob3JlKSB7Ci0JCSh2b2lkKWFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZShvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSwgMSk7CisJaWYgKG9ial9kZXNjLT5tZXRob2QubXV0ZXgpIHsKKwkJYWNwaV9vc19yZWxlYXNlX211dGV4KG9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4Lm9zX211dGV4KTsKIAl9CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CkBAIC0yNTMsMTAgKzM0MywxMCBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTlVMTF9PQkpFQ1QpOwogCX0KIAotCS8qIEluaXQgZm9yIG5ldyBtZXRob2QsIHBvc3NpYmx5IHdhaXQgb24gY29uY3VycmVuY3kgc2VtYXBob3JlICovCisJLyogSW5pdCBmb3IgbmV3IG1ldGhvZCwgcG9zc2libHkgd2FpdCBvbiBtZXRob2QgbXV0ZXggKi8KIAogCXN0YXR1cyA9IGFjcGlfZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbihtZXRob2Rfbm9kZSwgb2JqX2Rlc2MsCi0JCQkJCQl0aGlzX3dhbGtfc3RhdGUtPm1ldGhvZF9ub2RlKTsKKwkJCQkJCXRoaXNfd2Fsa19zdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTQ3OCw2ICs1NjgsOCBAQAogICogICAgICAgICAgICAgIGNyZWF0ZWQsIGRlbGV0ZSBhbGwgbG9jYWxzIGFuZCBhcmd1bWVudHMsIGFuZCBkZWxldGUgdGhlIHBhcnNlCiAgKiAgICAgICAgICAgICAgdHJlZSBpZiByZXF1ZXN0ZWQuCiAgKgorICogTVVURVg6ICAgICAgIEludGVycHJldGVyIGlzIGxvY2tlZAorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQKQEAgLTUwMywyNiArNTk1LDIxIEBACiAJfQogCiAJLyoKLQkgKiBMb2NrIHRoZSBwYXJzZXIgd2hpbGUgd2UgdGVybWluYXRlIHRoaXMgbWV0aG9kLgotCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgdGhyZWFkIGV4ZWN1dGluZyB0aGUgbWV0aG9kLAotCSAqIHdlIGhhdmUgYWRkaXRpb25hbCBjbGVhbnVwIHRvIHBlcmZvcm0KKwkgKiBJZiBtZXRob2QgaXMgc2VyaWFsaXplZCwgcmVsZWFzZSB0aGUgbXV0ZXggYW5kIHJlc3RvcmUgdGhlCisJICogY3VycmVudCBzeW5jIGxldmVsIGZvciB0aGlzIHRocmVhZAogCSAqLwotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9DT05UUk9MX01FVEhPRCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9WT0lEOwotCX0KKwlpZiAobWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleCkgewogCi0JLyogU2lnbmFsIGNvbXBsZXRpb24gb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZCBpZiBuZWNlc3NhcnkgKi8KKwkJLyogQWNxdWlzaXRpb24gRGVwdGggaGFuZGxlcyByZWN1cnNpdmUgY2FsbHMgKi8KIAotCWlmIChtZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkgewotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKG1ldGhvZF9kZXNjLT5tZXRob2Quc2VtYXBob3JlLCAxKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCW1ldGhvZF9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4LmFjcXVpc2l0aW9uX2RlcHRoLS07CisJCWlmICghbWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleC0+bXV0ZXguYWNxdWlzaXRpb25fZGVwdGgpIHsKKwkJCXdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsID0KKwkJCSAgICBtZXRob2RfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC4KKwkJCSAgICBvcmlnaW5hbF9zeW5jX2xldmVsOwogCi0JCQkvKiBJZ25vcmUgZXJyb3IgYW5kIGNvbnRpbnVlICovCi0KLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCi0JCQkJCSJDb3VsZCBub3Qgc2lnbmFsIG1ldGhvZCBzZW1hcGhvcmUiKSk7CisJCQlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleC0+bXV0ZXguCisJCQkJCSAgICAgIG9zX211dGV4KTsKIAkJfQogCX0KIApAQCAtNTM3LDcgKzYyNCw3IEBACiAKIAkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OworCQkJcmV0dXJuX1ZPSUQ7CiAJCX0KIAogCQkvKgpAQCAtNTgwLDE4ICs2NjcsMTYgQEAKIAkJLyoKIAkJICogU3VwcG9ydCB0byBkeW5hbWljYWxseSBjaGFuZ2UgYSBtZXRob2QgZnJvbSBub3Rfc2VyaWFsaXplZCB0bwogCQkgKiBTZXJpYWxpemVkIGlmIGl0IGFwcGVhcnMgdGhhdCB0aGUgbWV0aG9kIGlzIGluY29ycmVjdGx5IHdyaXR0ZW4gYW5kCi0JCSAqIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgdGhyZWFkIGV4ZWN1dGlvbi4gIFRoZSBiZXN0IGV4YW1wbGUgb2YgdGhpcwotCQkgKiBpcyBpZiBzdWNoIGEgbWV0aG9kIGNyZWF0ZXMgbmFtZXNwYWNlIG9iamVjdHMgYW5kIGJsb2Nrcy4gIEEgc2Vjb25kCisJCSAqIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgdGhyZWFkIGV4ZWN1dGlvbi4gVGhlIGJlc3QgZXhhbXBsZSBvZiB0aGlzCisJCSAqIGlzIGlmIHN1Y2ggYSBtZXRob2QgY3JlYXRlcyBuYW1lc3BhY2Ugb2JqZWN0cyBhbmQgYmxvY2tzLiBBIHNlY29uZAogCQkgKiB0aHJlYWQgd2lsbCBmYWlsIHdpdGggYW4gQUVfQUxSRUFEWV9FWElTVFMgZXhjZXB0aW9uCiAJCSAqCiAJCSAqIFRoaXMgY29kZSBpcyBoZXJlIGJlY2F1c2Ugd2UgbXVzdCB3YWl0IHVudGlsIHRoZSBsYXN0IHRocmVhZCBleGl0cwogCQkgKiBiZWZvcmUgY3JlYXRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBzZW1hcGhvcmUuCiAJCSAqLwotCQlpZiAoKG1ldGhvZF9kZXNjLT5tZXRob2QuY29uY3VycmVuY3kgPT0gMSkgJiYKLQkJICAgICghbWV0aG9kX2Rlc2MtPm1ldGhvZC5zZW1hcGhvcmUpKSB7Ci0JCQlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9zZW1hcGhvcmUoMSwgMSwKLQkJCQkJCQkgICZtZXRob2RfZGVzYy0+bWV0aG9kLgotCQkJCQkJCSAgc2VtYXBob3JlKTsKKwkJaWYgKChtZXRob2RfZGVzYy0+bWV0aG9kLm1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCkKKwkJICAgICYmICghbWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleCkpIHsKKwkJCXN0YXR1cyA9IGFjcGlfZHNfY3JlYXRlX21ldGhvZF9tdXRleChtZXRob2RfZGVzYyk7CiAJCX0KIAogCQkvKiBObyBtb3JlIHRocmVhZHMsIHdlIGNhbiBmcmVlIHRoZSBvd25lcl9pZCAqLwpAQCAtNTk5LDE0NCArNjg0LDUgQEAKIAkJYWNwaV91dF9yZWxlYXNlX293bmVyX2lkKCZtZXRob2RfZGVzYy0+bWV0aG9kLm93bmVyX2lkKTsKIAl9CiAKLSAgICAgIGV4aXQ6Ci0JKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0NPTlRST0xfTUVUSE9EKTsKIAlyZXR1cm5fVk9JRDsKIH0KLQotI2lmZGVmIEFDUElfSU5JVF9QQVJTRV9NRVRIT0RTCi0JLyoKLQkgKiBOb3RlIDExLzIwMDU6IFJlbW92ZWQgdGhpcyBjb2RlIHRvIHBhcnNlIGFsbCBtZXRob2RzIGR1cmluZyB0YWJsZQotCSAqIGxvYWQgYmVjYXVzZSBpdCBjYXVzZXMgcHJvYmxlbXMgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMgZHVyaW5nIHRoZQotCSAqIHBhcnNlLiBBbHNvLCBpdCBzZWVtcyBsaWtlIG92ZXJraWxsIGFuZCB3ZSBwcm9iYWJseSBkb24ndCB3YW50IHRvCi0JICogYWJvcnQgYSB0YWJsZSBsb2FkIGJlY2F1c2Ugb2YgYW4gaXNzdWUgd2l0aCBhIHNpbmdsZSBtZXRob2QuCi0JICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfZHNfcGFyc2VfbWV0aG9kCi0gKgotICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgIC0gTWV0aG9kIG5vZGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFBhcnNlIHRoZSBBTUwgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1ldGhvZC4KLSAqCi0gKiBNVVRFWDogICAgICAgQXNzdW1lcyBwYXJzZXIgaXMgbG9ja2VkCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9zdGF0dXMgYWNwaV9kc19wYXJzZV9tZXRob2Qoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjOwotCXVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0ICpvcDsKLQlzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIoZHNfcGFyc2VfbWV0aG9kLCBub2RlKTsKLQotCS8qIFBhcmFtZXRlciBWYWxpZGF0aW9uICovCi0KLQlpZiAoIW5vZGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05VTExfRU5UUlkpOwotCX0KLQotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsCi0JCQkgICIqKioqIFBhcnNpbmcgWyU0LjRzXSAqKioqIE5hbWVkT2JqPSVwXG4iLAotCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUobm9kZSksIG5vZGUpKTsKLQotCS8qIEV4dHJhY3QgdGhlIG1ldGhvZCBvYmplY3QgZnJvbSB0aGUgbWV0aG9kIE5vZGUgKi8KLQotCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwotCWlmICghb2JqX2Rlc2MpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05VTExfT0JKRUNUKTsKLQl9Ci0KLQkvKiBDcmVhdGUgYSBtdXRleCBmb3IgdGhlIG1ldGhvZCBpZiB0aGVyZSBpcyBhIGNvbmN1cnJlbmN5IGxpbWl0ICovCi0KLQlpZiAoKG9ial9kZXNjLT5tZXRob2QuY29uY3VycmVuY3kgIT0gQUNQSV9JTkZJTklURV9DT05DVVJSRU5DWSkgJiYKLQkgICAgKCFvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkpIHsKLQkJc3RhdHVzID0gYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlKG9ial9kZXNjLT5tZXRob2QuY29uY3VycmVuY3ksCi0JCQkJCQkgIG9ial9kZXNjLT5tZXRob2QuY29uY3VycmVuY3ksCi0JCQkJCQkgICZvYmpfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEFsbG9jYXRlIGEgbmV3IHBhcnNlciBvcCB0byBiZSB0aGUgcm9vdCBvZiB0aGUgcGFyc2VkCi0JICogbWV0aG9kIHRyZWUKLQkgKi8KLQlvcCA9IGFjcGlfcHNfYWxsb2Nfb3AoQU1MX01FVEhPRF9PUCk7Ci0JaWYgKCFvcCkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKLQl9Ci0KLQkvKiBJbml0IG5ldyBvcCB3aXRoIHRoZSBtZXRob2QgbmFtZSBhbmQgcG9pbnRlciBiYWNrIHRvIHRoZSBOb2RlICovCi0KLQlhY3BpX3BzX3NldF9uYW1lKG9wLCBub2RlLT5uYW1lLmludGVnZXIpOwotCW9wLT5jb21tb24ubm9kZSA9IG5vZGU7Ci0KLQkvKgotCSAqIEdldCBhIG5ldyBvd25lcl9pZCBmb3Igb2JqZWN0cyBjcmVhdGVkIGJ5IHRoaXMgbWV0aG9kLiBOYW1lc3BhY2UKLQkgKiBvYmplY3RzIChzdWNoIGFzIE9wZXJhdGlvbiBSZWdpb25zKSBjYW4gYmUgY3JlYXRlZCBkdXJpbmcgdGhlCi0JICogZmlyc3QgcGFzcyBwYXJzZS4KLQkgKi8KLQlzdGF0dXMgPSBhY3BpX3V0X2FsbG9jYXRlX293bmVyX2lkKCZvYmpfZGVzYy0+bWV0aG9kLm93bmVyX2lkKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCS8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyB3YWxrIHN0YXRlICovCi0KLQl3YWxrX3N0YXRlID0KLQkgICAgYWNwaV9kc19jcmVhdGVfd2Fsa19zdGF0ZShvYmpfZGVzYy0+bWV0aG9kLm93bmVyX2lkLCBOVUxMLCBOVUxMLAotCQkJCSAgICAgIE5VTEwpOwotCWlmICghd2Fsa19zdGF0ZSkgewotCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7Ci0JCWdvdG8gY2xlYW51cDI7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV9kc19pbml0X2FtbF93YWxrKHdhbGtfc3RhdGUsIG9wLCBub2RlLAotCQkJCSAgICAgICBvYmpfZGVzYy0+bWV0aG9kLmFtbF9zdGFydCwKLQkJCQkgICAgICAgb2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoLCBOVUxMLCAxKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJYWNwaV9kc19kZWxldGVfd2Fsa19zdGF0ZSh3YWxrX3N0YXRlKTsKLQkJZ290byBjbGVhbnVwMjsKLQl9Ci0KLQkvKgotCSAqIFBhcnNlIHRoZSBtZXRob2QsIGZpcnN0IHBhc3MKLQkgKgotCSAqIFRoZSBmaXJzdCBwYXNzIGxvYWQgaXMgd2hlcmUgbmV3bHkgZGVjbGFyZWQgbmFtZWQgb2JqZWN0cyBhcmUgYWRkZWQgaW50bwotCSAqIHRoZSBuYW1lc3BhY2UuICBBY3R1YWwgZXZhbHVhdGlvbiBvZiB0aGUgbmFtZWQgb2JqZWN0cyAod2hhdCB3b3VsZCBiZQotCSAqIGNhbGxlZCBhICJzZWNvbmQgcGFzcyIpIGhhcHBlbnMgZHVyaW5nIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZQotCSAqIG1ldGhvZCBzbyB0aGF0IG9wZXJhbmRzIHRvIHRoZSBuYW1lZCBvYmplY3RzIGNhbiB0YWtlIG9uIGR5bmFtaWMKLQkgKiBydW4tdGltZSB2YWx1ZXMuCi0JICovCi0Jc3RhdHVzID0gYWNwaV9wc19wYXJzZV9hbWwod2Fsa19zdGF0ZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gY2xlYW51cDI7Ci0JfQotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwKLQkJCSAgIioqKiogWyU0LjRzXSBQYXJzZWQgKioqKiBOYW1lZE9iaj0lcCBPcD0lcFxuIiwKLQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLCBub2RlLCBvcCkpOwotCi0JLyoKLQkgKiBEZWxldGUgdGhlIHBhcnNlIHRyZWUuIFdlIHNpbXBseSByZS1wYXJzZSB0aGUgbWV0aG9kIGZvciBldmVyeQotCSAqIGV4ZWN1dGlvbiBzaW5jZSB0aGVyZSBpc24ndCBtdWNoIG92ZXJoZWFkIChjb21wYXJlZCB0byBrZWVwaW5nIGxvdHMKLQkgKiBvZiBwYXJzZSB0cmVlcyBhcm91bmQpCi0JICovCi0JYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX3N1YnRyZWUobm9kZSk7Ci0JYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKG9ial9kZXNjLT5tZXRob2Qub3duZXJfaWQpOwotCi0gICAgICBjbGVhbnVwMjoKLQlhY3BpX3V0X3JlbGVhc2Vfb3duZXJfaWQoJm9ial9kZXNjLT5tZXRob2Qub3duZXJfaWQpOwotCi0gICAgICBjbGVhbnVwOgotCWFjcGlfcHNfZGVsZXRlX3BhcnNlX3RyZWUob3ApOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dleGVjLmMgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dleGVjLmMKaW5kZXggM2FjYmQ5MS4uYjFkZWQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3ZXhlYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2V4ZWMuYwpAQCAtNDcyLDcgKzQ3Miw2IEBACiAJCQkgICAgYWNwaV9kc19yZXN1bHRfcHVzaCh3YWxrX3N0YXRlLT5yZXN1bHRfb2JqLAogCQkJCQkJd2Fsa19zdGF0ZSk7CiAJCX0KLQogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC01MTAsNiArNTA5LDcgQEAKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAogCQkJCQkJICAiTWV0aG9kIFJlZmVyZW5jZSBpbiBhIFBhY2thZ2UsIE9wPSVwXG4iLAogCQkJCQkJICBvcCkpOworCiAJCQkJb3AtPmNvbW1vbi5ub2RlID0KIAkJCQkgICAgKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICopb3AtPmFzbC52YWx1ZS4KIAkJCQkgICAgYXJnLT5hc2wubm9kZS0+b2JqZWN0OwpAQCAtNjcwLDcgKzY3MCw2IEBACiAKIAkJCQlzdGF0dXMgPSBhY3BpX2RzX3Jlc3VsdF9zdGFja19wb3Aod2Fsa19zdGF0ZSk7CiAJCQl9Ci0KIAkJCWJyZWFrOwogCiAJCWNhc2UgQU1MX1RZUEVfVU5ERUZJTkVEOgpAQCAtNzA4LDcgKzcwNyw2IEBACiAJICogQ2hlY2sgaWYgd2UganVzdCBjb21wbGV0ZWQgdGhlIGV2YWx1YXRpb24gb2YgYQogCSAqIGNvbmRpdGlvbmFsIHByZWRpY2F0ZQogCSAqLwotCiAJaWYgKChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgJiYKIAkgICAgKHdhbGtfc3RhdGUtPmNvbnRyb2xfc3RhdGUpICYmCiAJICAgICh3YWxrX3N0YXRlLT5jb250cm9sX3N0YXRlLT5jb21tb24uc3RhdGUgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2xvYWQuYyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd2xvYWQuYwppbmRleCAzNTA3NDM5Li5lM2NhN2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dsb2FkLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3bG9hZC5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAkJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpIHsKIAkJCS8qCiAJCQkgKiBUYWJsZSBkaXNhc3NlbWJseToKLQkJCSAqIFRhcmdldCBvZiBTY29wZSgpIG5vdCBmb3VuZC4gIEdlbmVyYXRlIGFuIEV4dGVybmFsIGZvciBpdCwgYW5kCisJCQkgKiBUYXJnZXQgb2YgU2NvcGUoKSBub3QgZm91bmQuIEdlbmVyYXRlIGFuIEV4dGVybmFsIGZvciBpdCwgYW5kCiAJCQkgKiBpbnNlcnQgdGhlIG5hbWUgaW50byB0aGUgbmFtZXNwYWNlLgogCQkJICovCiAJCQlhY3BpX2RtX2FkZF90b19leHRlcm5hbF9saXN0KHBhdGgsIEFDUElfVFlQRV9ERVZJQ0UsIDApOwpAQCAtMjEwLDE2ICsyMTAsMTUgQEAKIAkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCQkvKgotCQkJICogVGhlc2UgdHlwZXMgd2Ugd2lsbCBhbGxvdywgYnV0IHdlIHdpbGwgY2hhbmdlIHRoZSB0eXBlLiAgVGhpcworCQkJICogVGhlc2UgdHlwZXMgd2Ugd2lsbCBhbGxvdywgYnV0IHdlIHdpbGwgY2hhbmdlIHRoZSB0eXBlLiBUaGlzCiAJCQkgKiBlbmFibGVzIHNvbWUgZXhpc3RpbmcgY29kZSBvZiB0aGUgZm9ybToKIAkJCSAqCiAJCQkgKiAgTmFtZSAoREVCLCAwKQogCQkJICogIFNjb3BlIChERUIpIHsgLi4uIH0KIAkJCSAqCi0JCQkgKiBOb3RlOiBzaWxlbnRseSBjaGFuZ2UgdGhlIHR5cGUgaGVyZS4gIE9uIHRoZSBzZWNvbmQgcGFzcywgd2Ugd2lsbCByZXBvcnQKKwkJCSAqIE5vdGU6IHNpbGVudGx5IGNoYW5nZSB0aGUgdHlwZSBoZXJlLiBPbiB0aGUgc2Vjb25kIHBhc3MsIHdlIHdpbGwgcmVwb3J0CiAJCQkgKiBhIHdhcm5pbmcKIAkJCSAqLwotCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJCSAgIlR5cGUgb3ZlcnJpZGUgLSBbJTQuNHNdIGhhZCBpbnZhbGlkIHR5cGUgKCVzKSBmb3IgU2NvcGUgb3BlcmF0b3IsIGNoYW5nZWQgdG8gKFNjb3BlKVxuIiwKIAkJCQkJICBwYXRoLApAQCAtMjQyLDcgKzI0MSw2IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQogCQkvKgogCQkgKiBGb3IgYWxsIG90aGVyIG5hbWVkIG9wY29kZXMsIHdlIHdpbGwgZW50ZXIgdGhlIG5hbWUgaW50bwogCQkgKiB0aGUgbmFtZXNwYWNlLgpAQCAtMjU5LDcgKzI1Nyw2IEBACiAJCSAqICAgICAgIGJ1ZmZlcl9maWVsZCwgb3IgUGFja2FnZSksIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgaXMgYWxyZWFkeQogCQkgKiAgICAgICBpbiB0aGUgbmFtZXNwYWNlLgogCQkgKi8KLQogCQlpZiAod2Fsa19zdGF0ZS0+ZGVmZXJyZWRfbm9kZSkgewogCiAJCQkvKiBUaGlzIG5hbWUgaXMgYWxyZWFkeSBpbiB0aGUgbmFtZXNwYWNlLCBnZXQgdGhlIG5vZGUgKi8KQEAgLTI5Myw4ICsyOTAsOCBAQAogCQl9CiAKIAkJLyoKLQkJICogRW50ZXIgdGhlIG5hbWVkIHR5cGUgaW50byB0aGUgaW50ZXJuYWwgbmFtZXNwYWNlLiAgV2UgZW50ZXIgdGhlIG5hbWUKLQkJICogYXMgd2UgZ28gZG93bndhcmQgaW4gdGhlIHBhcnNlIHRyZWUuICBBbnkgbmVjZXNzYXJ5IHN1Ym9iamVjdHMgdGhhdAorCQkgKiBFbnRlciB0aGUgbmFtZWQgdHlwZSBpbnRvIHRoZSBpbnRlcm5hbCBuYW1lc3BhY2UuIFdlIGVudGVyIHRoZSBuYW1lCisJCSAqIGFzIHdlIGdvIGRvd253YXJkIGluIHRoZSBwYXJzZSB0cmVlLiBBbnkgbmVjZXNzYXJ5IHN1Ym9iamVjdHMgdGhhdAogCQkgKiBpbnZvbHZlIGFyZ3VtZW50cyB0byB0aGUgb3Bjb2RlIG11c3QgYmUgY3JlYXRlZCBhcyB3ZSBnbyBiYWNrIHVwIHRoZQogCQkgKiBwYXJzZSB0cmVlIGxhdGVyLgogCQkgKi8KQEAgLTMyNywxMiArMzI0LDEyIEBACiAJCQkJCQkJICAgIChzdGF0dXMpOwogCQkJCQkJfQogCQkJCQl9CisKIAkJCQkJc3RhdHVzID0gQUVfT0s7CiAJCQkJfQogCQkJfQogCiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQogCQkJCUFDUElfRVJST1JfTkFNRVNQQUNFKHBhdGgsIHN0YXR1cyk7CiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCQl9CkBAIC00MzQsOSArNDMxLDEzIEBACiAJCQlzdGF0dXMgPQogCQkJICAgIGFjcGlfZXhfY3JlYXRlX3JlZ2lvbihvcC0+bmFtZWQuZGF0YSwKIAkJCQkJCSAgb3AtPm5hbWVkLmxlbmd0aCwKLQkJCQkJCSAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpCi0JCQkJCQkgICgob3AtPmNvbW1vbi52YWx1ZS5hcmcpLT4KLQkJCQkJCSAgIGNvbW1vbi52YWx1ZS5pbnRlZ2VyKSwKKwkJCQkJCSAgKGFjcGlfYWRyX3NwYWNlX3R5cGUpICgob3AtPgorCQkJCQkJCQkJICBjb21tb24uCisJCQkJCQkJCQkgIHZhbHVlLgorCQkJCQkJCQkJICBhcmcpLT4KKwkJCQkJCQkJCSBjb21tb24uCisJCQkJCQkJCQkgdmFsdWUuCisJCQkJCQkJCQkgaW50ZWdlciksCiAJCQkJCQkgIHdhbGtfc3RhdGUpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC00NzQsNyArNDc1LDcgQEAKIAkJCSAqIG1ldGhvZF9vcCBwa2dfbGVuZ3RoIG5hbWVfc3RyaW5nIG1ldGhvZF9mbGFncyB0ZXJtX2xpc3QKIAkJCSAqCiAJCQkgKiBOb3RlOiBXZSBtdXN0IGNyZWF0ZSB0aGUgbWV0aG9kIG5vZGUvb2JqZWN0IHBhaXIgYXMgc29vbiBhcyB3ZQotCQkJICogc2VlIHRoZSBtZXRob2QgZGVjbGFyYXRpb24uICBUaGlzIGFsbG93cyBsYXRlciBwYXNzMSBwYXJzaW5nCisJCQkgKiBzZWUgdGhlIG1ldGhvZCBkZWNsYXJhdGlvbi4gVGhpcyBhbGxvd3MgbGF0ZXIgcGFzczEgcGFyc2luZwogCQkJICogb2YgaW52b2NhdGlvbnMgb2YgdGhlIG1ldGhvZCAobmVlZCB0byBrbm93IHRoZSBudW1iZXIgb2YKIAkJCSAqIGFyZ3VtZW50cy4pCiAJCQkgKi8KQEAgLTQ5OSw2ICs1MDAsNyBAQAogCQkJCQkJCQkgIGxlbmd0aCwKIAkJCQkJCQkJICB3YWxrX3N0YXRlKTsKIAkJCQl9CisKIAkJCQl3YWxrX3N0YXRlLT5vcGVyYW5kc1swXSA9IE5VTEw7CiAJCQkJd2Fsa19zdGF0ZS0+bnVtX29wZXJhbmRzID0gMDsKIApAQCAtNTcwLDcgKzU3Miw2IEBACiAjaWZkZWYgQUNQSV9FTkFCTEVfTU9EVUxFX0xFVkVMX0NPREUKIAkJCWlmICgod2Fsa19zdGF0ZS0+b3BfaW5mby0+Y2xhc3MgPT0gQU1MX0NMQVNTX0VYRUNVVEUpIHx8CiAJCQkgICAgKHdhbGtfc3RhdGUtPm9wX2luZm8tPmNsYXNzID09IEFNTF9DTEFTU19DT05UUk9MKSkgewotCiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKIAkJCQkJCSAgIkJlZ2luL0VYRUM6ICVzIChmbCAlOC44WClcbiIsCiAJCQkJCQkgIHdhbGtfc3RhdGUtPm9wX2luZm8tPm5hbWUsCkBAIC02MDIsNyArNjAzLDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIEdldCBuYW1lIGZyb20gdGhlIG9wICovCiAKLQkJCWJ1ZmZlcl9wdHIgPSAoY2hhciAqKSZvcC0+bmFtZWQubmFtZTsKKwkJCWJ1ZmZlcl9wdHIgPSBBQ1BJX0NBU1RfUFRSKGNoYXIsICZvcC0+bmFtZWQubmFtZSk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBHZXQgdGhlIG5hbWVzdHJpbmcgZnJvbSB0aGUgcmF3IEFNTCAqLwpAQCAtNjI5LDcgKzYzMCw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBTUxfSU5UX05BTUVQQVRIX09QOgotCiAJCS8qCiAJCSAqIFRoZSBuYW1lX3BhdGggaXMgYW4gb2JqZWN0IHJlZmVyZW5jZSB0byBhbiBleGlzdGluZyBvYmplY3QuCiAJCSAqIERvbid0IGVudGVyIHRoZSBuYW1lIGludG8gdGhlIG5hbWVzcGFjZSwgYnV0IGxvb2sgaXQgdXAKQEAgLTY0Miw3ICs2NDIsNiBAQAogCQlicmVhazsKIAogCWNhc2UgQU1MX1NDT1BFX09QOgotCiAJCS8qCiAJCSAqIFRoZSBQYXRoIGlzIGFuIG9iamVjdCByZWZlcmVuY2UgdG8gYW4gZXhpc3Rpbmcgb2JqZWN0LgogCQkgKiBEb24ndCBlbnRlciB0aGUgbmFtZSBpbnRvIHRoZSBuYW1lc3BhY2UsIGJ1dCBsb29rIGl0IHVwCkBAIC02NjQsNiArNjYzLDcgQEAKICNlbmRpZgogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCX0KKwogCQkvKgogCQkgKiBXZSBtdXN0IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0YXJnZXQgaXMKIAkJICogb25lIG9mIHRoZSBvcGNvZGVzIHRoYXQgYWN0dWFsbHkgb3BlbnMgYSBzY29wZQpAQCAtNjgzLDEzICs2ODMsMTIgQEAKIAkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCQkvKgotCQkJICogVGhlc2UgdHlwZXMgd2Ugd2lsbCBhbGxvdywgYnV0IHdlIHdpbGwgY2hhbmdlIHRoZSB0eXBlLiAgVGhpcworCQkJICogVGhlc2UgdHlwZXMgd2Ugd2lsbCBhbGxvdywgYnV0IHdlIHdpbGwgY2hhbmdlIHRoZSB0eXBlLiBUaGlzCiAJCQkgKiBlbmFibGVzIHNvbWUgZXhpc3RpbmcgY29kZSBvZiB0aGUgZm9ybToKIAkJCSAqCiAJCQkgKiAgTmFtZSAoREVCLCAwKQogCQkJICogIFNjb3BlIChERUIpIHsgLi4uIH0KIAkJCSAqLwotCiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCiAJCQkJICAgICAgIlR5cGUgb3ZlcnJpZGUgLSBbJTQuNHNdIGhhZCBpbnZhbGlkIHR5cGUgKCVzKSBmb3IgU2NvcGUgb3BlcmF0b3IsIGNoYW5nZWQgdG8gKFNjb3BlKSIsCiAJCQkJICAgICAgYnVmZmVyX3B0ciwKQEAgLTcyOSwxNCArNzI4LDE0IEBACiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJCX0KLQogCQkJfQorCiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCQl9CiAKIAkJLyoKLQkJICogRW50ZXIgdGhlIG5hbWVkIHR5cGUgaW50byB0aGUgaW50ZXJuYWwgbmFtZXNwYWNlLiAgV2UgZW50ZXIgdGhlIG5hbWUKLQkJICogYXMgd2UgZ28gZG93bndhcmQgaW4gdGhlIHBhcnNlIHRyZWUuICBBbnkgbmVjZXNzYXJ5IHN1Ym9iamVjdHMgdGhhdAorCQkgKiBFbnRlciB0aGUgbmFtZWQgdHlwZSBpbnRvIHRoZSBpbnRlcm5hbCBuYW1lc3BhY2UuIFdlIGVudGVyIHRoZSBuYW1lCisJCSAqIGFzIHdlIGdvIGRvd253YXJkIGluIHRoZSBwYXJzZSB0cmVlLiBBbnkgbmVjZXNzYXJ5IHN1Ym9iamVjdHMgdGhhdAogCQkgKiBpbnZvbHZlIGFyZ3VtZW50cyB0byB0aGUgb3Bjb2RlIG11c3QgYmUgY3JlYXRlZCBhcyB3ZSBnbyBiYWNrIHVwIHRoZQogCQkgKiBwYXJzZSB0cmVlIGxhdGVyLgogCQkgKgpAQCAtNzg3LDcgKzc4Niw2IEBACiAJICogY2FuIGdldCBpdCBhZ2FpbiBxdWlja2x5IHdoZW4gdGhpcyBzY29wZSBpcyBjbG9zZWQKIAkgKi8KIAlvcC0+Y29tbW9uLm5vZGUgPSBub2RlOwotCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTkyMiw3ICs5MjAsNiBAQAogI2lmbmRlZiBBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04KIAogCWNhc2UgQU1MX1RZUEVfQ1JFQVRFX0ZJRUxEOgotCiAJCS8qCiAJCSAqIENyZWF0ZSB0aGUgZmllbGQgb2JqZWN0LCBidXQgdGhlIGZpZWxkIGJ1ZmZlciBhbmQgaW5kZXggbXVzdAogCQkgKiBiZSBldmFsdWF0ZWQgbGF0ZXIgZHVyaW5nIHRoZSBleGVjdXRpb24gcGhhc2UKQEAgLTkzMSw3ICs5MjgsNiBAQAogCQlicmVhazsKIAogCWNhc2UgQU1MX1RZUEVfTkFNRURfRklFTEQ6Ci0KIAkJLyoKIAkJICogSWYgd2UgYXJlIGV4ZWN1dGluZyBhIG1ldGhvZCwgaW5pdGlhbGl6ZSB0aGUgZmllbGQKIAkJICovCkBAIC0xMDUxLDYgKzEwNDcsNyBAQAogCQkJICogYXJndW1lbnQgaXMgdGhlIHNwYWNlX2lkLiAoV2UgbXVzdCBzYXZlIHRoZSBhZGRyZXNzIG9mIHRoZQogCQkJICogQU1MIG9mIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb3BlcmFuZHMpCiAJCQkgKi8KKwogCQkJLyoKIAkJCSAqIElmIHdlIGhhdmUgYSB2YWxpZCByZWdpb24sIGluaXRpYWxpemUgaXQKIAkJCSAqIE5hbWVzcGFjZSBpcyBOT1QgbG9ja2VkIGF0IHRoaXMgcG9pbnQuCkBAIC0xMDgwLDcgKzEwNzcsNyBAQAogCQkJICogbWV0aG9kX29wIHBrZ19sZW5ndGggbmFtZV9zdHJpbmcgbWV0aG9kX2ZsYWdzIHRlcm1fbGlzdAogCQkJICoKIAkJCSAqIE5vdGU6IFdlIG11c3QgY3JlYXRlIHRoZSBtZXRob2Qgbm9kZS9vYmplY3QgcGFpciBhcyBzb29uIGFzIHdlCi0JCQkgKiBzZWUgdGhlIG1ldGhvZCBkZWNsYXJhdGlvbi4gIFRoaXMgYWxsb3dzIGxhdGVyIHBhc3MxIHBhcnNpbmcKKwkJCSAqIHNlZSB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uLiBUaGlzIGFsbG93cyBsYXRlciBwYXNzMSBwYXJzaW5nCiAJCQkgKiBvZiBpbnZvY2F0aW9ucyBvZiB0aGUgbWV0aG9kIChuZWVkIHRvIGtub3cgdGhlIG51bWJlciBvZgogCQkJICogYXJndW1lbnRzLikKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwYTk0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTAsMCArMSw3MzkgQEAKKy8qCisgKiAgZG9jay5jIC0gQUNQSSBkb2NrIHN0YXRpb24gZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBLcmlzdGVuIENhcmxzb24gQWNjYXJkaSA8a3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tPgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorCisjZGVmaW5lIEFDUElfRE9DS19EUklWRVJfTkFNRSAiQUNQSSBEb2NrIFN0YXRpb24gRHJpdmVyIgorCitBQ1BJX01PRFVMRV9OQU1FKCJkb2NrIikKK01PRFVMRV9BVVRIT1IoIktyaXN0ZW4gQ2FybHNvbiBBY2NhcmRpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oQUNQSV9ET0NLX0RSSVZFUl9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBkb2NrX25vdGlmaWVyX2xpc3Q7CisKK3N0cnVjdCBkb2NrX3N0YXRpb24geworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZG9ja190aW1lOworCXUzMiBmbGFnczsKKwlzcGlubG9ja190IGRkX2xvY2s7CisJc3BpbmxvY2tfdCBocF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgZGVwZW5kZW50X2RldmljZXM7CisJc3RydWN0IGxpc3RfaGVhZCBob3RwbHVnX2RldmljZXM7Cit9OworCitzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBob3RwbHVnX2xpc3Q7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlcjsKKwl2b2lkICpjb250ZXh0OworfTsKKworI2RlZmluZSBET0NLX0RPQ0tJTkcJMHgwMDAwMDAwMQorI2RlZmluZSBET0NLX0VWRU5UCUtPQkpfRE9DSworI2RlZmluZSBVTkRPQ0tfRVZFTlQJS09CSl9VTkRPQ0sKKworc3RhdGljIHN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBEb2NrIERlcGVuZGVudCBkZXZpY2UgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogIGFsbG9jX2RvY2tfZGVwZW5kZW50X2RldmljZSAtIGFsbG9jYXRlIGFuZCBpbml0IGEgZGVwZW5kZW50IGRldmljZQorICogIEBoYW5kbGU6IHRoZSBhY3BpX2hhbmRsZSBvZiB0aGUgZGVwZW5kZW50IGRldmljZQorICoKKyAqICBBbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZGVwZW5kZW50IGRldmljZSBzdHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIHJlZmVyZW5jZWQKKyAqICBieSB0aGUgYWNwaSBoYW5kbGUKKyAqLworc3RhdGljIHN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKgorYWxsb2NfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZDsKKworCWRkID0ga3phbGxvYyhzaXplb2YoKmRkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRkKSB7CisJCWRkLT5oYW5kbGUgPSBoYW5kbGU7CisJCUlOSVRfTElTVF9IRUFEKCZkZC0+bGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZkZC0+aG90cGx1Z19saXN0KTsKKwl9CisJcmV0dXJuIGRkOworfQorCisvKioKKyAqIGFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UgLSBhc3NvY2lhdGUgYSBkZXZpY2Ugd2l0aCB0aGUgZG9jayBzdGF0aW9uCisgKiBAZHM6IFRoZSBkb2NrIHN0YXRpb24KKyAqIEBkZDogVGhlIGRlcGVuZGVudCBkZXZpY2UKKyAqCisgKiBBZGQgdGhlIGRlcGVuZGVudCBkZXZpY2UgdG8gdGhlIGRvY2sncyBkZXBlbmRlbnQgZGV2aWNlIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzLAorCQkJICBzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZCkKK3sKKwlzcGluX2xvY2soJmRzLT5kZF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZkZC0+bGlzdCwgJmRzLT5kZXBlbmRlbnRfZGV2aWNlcyk7CisJc3Bpbl91bmxvY2soJmRzLT5kZF9sb2NrKTsKK30KKworLyoqCisgKiBkb2NrX2FkZF9ob3RwbHVnX2RldmljZSAtIGFzc29jaWF0ZSBhIGhvdHBsdWcgaGFuZGxlciB3aXRoIHRoZSBkb2NrIHN0YXRpb24KKyAqIEBkczogVGhlIGRvY2sgc3RhdGlvbgorICogQGRkOiBUaGUgZGVwZW5kZW50IGRldmljZSBzdHJ1Y3QKKyAqCisgKiBBZGQgdGhlIGRlcGVuZGVudCBkZXZpY2UgdG8gdGhlIGRvY2sncyBob3RwbHVnIGRldmljZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCitkb2NrX2FkZF9ob3RwbHVnX2RldmljZShzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcywKKwkJCXN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKmRkKQoreworCXNwaW5fbG9jaygmZHMtPmhwX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRkLT5ob3RwbHVnX2xpc3QsICZkcy0+aG90cGx1Z19kZXZpY2VzKTsKKwlzcGluX3VubG9jaygmZHMtPmhwX2xvY2spOworfQorCisvKioKKyAqIGRvY2tfZGVsX2hvdHBsdWdfZGV2aWNlIC0gcmVtb3ZlIGEgaG90cGx1ZyBoYW5kbGVyIGZyb20gdGhlIGRvY2sgc3RhdGlvbgorICogQGRzOiBUaGUgZG9jayBzdGF0aW9uCisgKiBAZGQ6IHRoZSBkZXBlbmRlbnQgZGV2aWNlIHN0cnVjdAorICoKKyAqIERlbGV0ZSB0aGUgZGVwZW5kZW50IGRldmljZSBmcm9tIHRoZSBkb2NrJ3MgaG90cGx1ZyBkZXZpY2UgbGlzdAorICovCitzdGF0aWMgdm9pZAorZG9ja19kZWxfaG90cGx1Z19kZXZpY2Uoc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMsCisJCQlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZCkKK3sKKwlzcGluX2xvY2soJmRzLT5ocF9sb2NrKTsKKwlsaXN0X2RlbCgmZGQtPmhvdHBsdWdfbGlzdCk7CisJc3Bpbl91bmxvY2soJmRzLT5ocF9sb2NrKTsKK30KKworLyoqCisgKiBmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZSAtIGdldCBhIGRldmljZSBkZXBlbmRlbnQgb24gdGhpcyBkb2NrCisgKiBAZHM6IHRoZSBkb2NrIHN0YXRpb24KKyAqIEBoYW5kbGU6IHRoZSBhY3BpX2hhbmRsZSBvZiB0aGUgZGV2aWNlIHdlIHdhbnQKKyAqCisgKiBpdGVyYXRlIG92ZXIgdGhlIGRlcGVuZGVudCBkZXZpY2UgbGlzdCBmb3IgdGhpcyBkb2NrLiAgSWYgdGhlCisgKiBkZXBlbmRlbnQgZGV2aWNlIG1hdGNoZXMgdGhlIGhhbmRsZSwgcmV0dXJuLgorICovCitzdGF0aWMgc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqCitmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcywgYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKmRkOworCisJc3Bpbl9sb2NrKCZkcy0+ZGRfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmRzLT5kZXBlbmRlbnRfZGV2aWNlcywgbGlzdCkgeworCQlpZiAoaGFuZGxlID09IGRkLT5oYW5kbGUpIHsKKwkJCXNwaW5fdW5sb2NrKCZkcy0+ZGRfbG9jayk7CisJCQlyZXR1cm4gZGQ7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmRzLT5kZF9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBEb2NrIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogaXNfZG9jayAtIHNlZSBpZiBhIGRldmljZSBpcyBhIGRvY2sgc3RhdGlvbgorICogQGhhbmRsZTogYWNwaSBoYW5kbGUgb2YgdGhlIGRldmljZQorICoKKyAqIElmIGFuIGFjcGkgb2JqZWN0IGhhcyBhIF9EQ0sgbWV0aG9kLCB0aGVuIGl0IGlzIGJ5IGRlZmluaXRpb24gYSBkb2NrCisgKiBzdGF0aW9uLCBzbyByZXR1cm4gdHJ1ZS4KKyAqLworc3RhdGljIGludCBpc19kb2NrKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgdG1wOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9EQ0siLCAmdG1wKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIGlzX2RvY2tfZGV2aWNlIC0gc2VlIGlmIGEgZGV2aWNlIGlzIG9uIGEgZG9jayBzdGF0aW9uCisgKiBAaGFuZGxlOiBhY3BpIGhhbmRsZSBvZiB0aGUgZGV2aWNlCisgKgorICogSWYgdGhpcyBkZXZpY2UgaXMgZWl0aGVyIHRoZSBkb2NrIHN0YXRpb24gaXRzZWxmLAorICogb3IgaXMgYSBkZXZpY2UgZGVwZW5kZW50IG9uIHRoZSBkb2NrIHN0YXRpb24sIHRoZW4gaXQKKyAqIGlzIGEgZG9jayBkZXZpY2UKKyAqLworaW50IGlzX2RvY2tfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlpZiAoIWRvY2tfc3RhdGlvbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfZG9jayhoYW5kbGUpIHx8IGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXNfZG9ja19kZXZpY2UpOworCisvKioKKyAqIGRvY2tfcHJlc2VudCAtIHNlZSBpZiB0aGUgZG9jayBzdGF0aW9uIGlzIHByZXNlbnQuCisgKiBAZHM6IHRoZSBkb2NrIHN0YXRpb24KKyAqCisgKiBleGVjdXRlIHRoZSBfU1RBIG1ldGhvZC4gIG5vdGUgdGhhdCBwcmVzZW50IGRvZXMgbm90CisgKiBpbXBseSB0aGF0IHdlIGFyZSBkb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgZG9ja19wcmVzZW50KHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzKQoreworCXVuc2lnbmVkIGxvbmcgc3RhOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWlmIChkcykgeworCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZHMtPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKKwkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIHN0YSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKKy8qKgorICogZG9ja19jcmVhdGVfYWNwaV9kZXZpY2UgLSBhZGQgbmV3IGRldmljZXMgdG8gYWNwaQorICogQGhhbmRsZSAtIGhhbmRsZSBvZiB0aGUgZGV2aWNlIHRvIGFkZAorICoKKyAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgbmV3IGFjcGlfZGV2aWNlIGZvciB0aGUgZ2l2ZW4KKyAqICBoYW5kbGUgaWYgb25lIGRvZXMgbm90IGV4aXN0IGFscmVhZHkuICBUaGlzIHNob3VsZCBjYXVzZQorICogIGFjcGkgdG8gc2NhbiBmb3IgZHJpdmVycyBmb3IgdGhlIGdpdmVuIGRldmljZXMsIGFuZCBjYWxsCisgKiAgbWF0Y2hpbmcgZHJpdmVyJ3MgYWRkIHJvdXRpbmUuCisgKgorICogIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhY3BpX2RldmljZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBoYW5kbGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkb2NrX2NyZWF0ZV9hY3BpX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOworCXN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50X2RldmljZTsKKwlhY3BpX2hhbmRsZSBwYXJlbnQ7CisJaW50IHJldDsKKworCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpIHsKKwkJLyoKKwkJICogbm8gZGV2aWNlIGNyZWF0ZWQgZm9yIHRoaXMgb2JqZWN0LAorCQkgKiBzbyB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKwkJICovCisJCWFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwYXJlbnQpOworCQlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShwYXJlbnQsICZwYXJlbnRfZGV2aWNlKSkKKwkJCXBhcmVudF9kZXZpY2UgPSBOVUxMOworCisJCXJldCA9IGFjcGlfYnVzX2FkZCgmZGV2aWNlLCBwYXJlbnRfZGV2aWNlLCBoYW5kbGUsCisJCQlBQ1BJX0JVU19UWVBFX0RFVklDRSk7CisJCWlmIChyZXQpIHsKKwkJCXByX2RlYnVnKCJlcnJvciBhZGRpbmcgYnVzLCAleFxuIiwKKwkJCQktcmV0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCXJldHVybiBkZXZpY2U7Cit9CisKKy8qKgorICogZG9ja19yZW1vdmVfYWNwaV9kZXZpY2UgLSByZW1vdmUgdGhlIGFjcGlfZGV2aWNlIHN0cnVjdCBmcm9tIGFjcGkKKyAqIEBoYW5kbGUgLSB0aGUgaGFuZGxlIG9mIHRoZSBkZXZpY2UgdG8gcmVtb3ZlCisgKgorICogIFRlbGwgYWNwaSB0byByZW1vdmUgdGhlIGFjcGlfZGV2aWNlLiAgVGhpcyBzaG91bGQgY2F1c2UgYW55IGxvYWRlZAorICogIGRyaXZlciB0byBoYXZlIGl0J3MgcmVtb3ZlIHJvdXRpbmUgY2FsbGVkLgorICovCitzdGF0aWMgdm9pZCBkb2NrX3JlbW92ZV9hY3BpX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJaW50IHJldDsKKworCWlmICghYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZkZXZpY2UpKSB7CisJCXJldCA9IGFjcGlfYnVzX3RyaW0oZGV2aWNlLCAxKTsKKwkJaWYgKHJldCkKKwkJCXByX2RlYnVnKCJlcnJvciByZW1vdmluZyBidXMsICV4XG4iLCAtcmV0KTsKKwl9Cit9CisKKworLyoqCisgKiBob3RwbHVnX2RvY2tfZGV2aWNlcyAtIGluc2VydCBvciByZW1vdmUgZGV2aWNlcyBvbiB0aGUgZG9jayBzdGF0aW9uCisgKiBAZHM6IHRoZSBkb2NrIHN0YXRpb24KKyAqIEBldmVudDogZWl0aGVyIGJ1cyBjaGVjayBvciBlamVjdCByZXF1ZXN0CisgKgorICogU29tZSBkZXZpY2VzIG9uIHRoZSBkb2NrIHN0YXRpb24gbmVlZCB0byBoYXZlIGRyaXZlcnMgY2FsbGVkCisgKiB0byBwZXJmb3JtIGhvdHBsdWcgb3BlcmF0aW9ucyBhZnRlciBhIGRvY2sgZXZlbnQgaGFzIG9jY3VycmVkLgorICogVHJhdmVyc2UgdGhlIGxpc3Qgb2YgZG9jayBkZXZpY2VzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIGEKKyAqIGhvdHBsdWcgaGFuZGxlciwgYW5kIGNhbGwgdGhlIGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkIGhvdHBsdWdfZG9ja19kZXZpY2VzKHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzLCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisKKwlzcGluX2xvY2soJmRzLT5ocF9sb2NrKTsKKworCS8qCisJICogRmlyc3QgY2FsbCBkcml2ZXIgc3BlY2lmaWMgaG90cGx1ZyBmdW5jdGlvbnMKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRkLCAmZHMtPmhvdHBsdWdfZGV2aWNlcywgaG90cGx1Z19saXN0KSB7CisJCWlmIChkZC0+aGFuZGxlcikKKwkJCWRkLT5oYW5kbGVyKGRkLT5oYW5kbGUsIGV2ZW50LCBkZC0+Y29udGV4dCk7CisJfQorCisJLyoKKwkgKiBOb3cgbWFrZSBzdXJlIHRoYXQgYW4gYWNwaV9kZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaAorCSAqIGRlcGVuZGVudCBkZXZpY2UsIG9yIHJlbW92ZWQgaWYgdGhpcyBpcyBhbiBlamVjdCByZXF1ZXN0LgorCSAqIFRoaXMgd2lsbCBjYXVzZSBhY3BpX2RyaXZlcnMgdG8gYmUgc3RvcHBlZC9zdGFydGVkIGlmIHRoZXkKKwkgKiBleGlzdAorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZkcy0+ZGVwZW5kZW50X2RldmljZXMsIGxpc3QpIHsKKwkJaWYgKGV2ZW50ID09IEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1QpCisJCQlkb2NrX3JlbW92ZV9hY3BpX2RldmljZShkZC0+aGFuZGxlKTsKKwkJZWxzZQorCQkJZG9ja19jcmVhdGVfYWNwaV9kZXZpY2UoZGQtPmhhbmRsZSk7CisJfQorCXNwaW5fdW5sb2NrKCZkcy0+aHBfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGRvY2tfZXZlbnQoc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMsIHUzMiBldmVudCwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKworCWRldmljZSA9IGRvY2tfY3JlYXRlX2FjcGlfZGV2aWNlKGRzLT5oYW5kbGUpOworCWlmIChkZXZpY2UpCisJCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmtvYmosIG51bSk7Cit9CisKKy8qKgorICogZWplY3RfZG9jayAtIHJlc3BvbmQgdG8gYSBkb2NrIGVqZWN0IHJlcXVlc3QKKyAqIEBkczogdGhlIGRvY2sgc3RhdGlvbgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIF9EQ0sgaXMgY2FsbGVkLCB0byBleGVjdXRlIHRoZSBkb2NrIHN0YXRpb24ncworICogX0VKMCBtZXRob2QuCisgKi8KK3N0YXRpYyB2b2lkIGVqZWN0X2RvY2soc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMpCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3Q7CisJdW5pb24gYWNwaV9vYmplY3QgYXJnOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSB0bXA7CisKKwkvKiBhbGwgZG9jayBkZXZpY2VzIHNob3VsZCBoYXZlIF9FSjAsIGJ1dCBjaGVjayBhbnl3YXkgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZHMtPmhhbmRsZSwgIl9FSjAiLCAmdG1wKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJfZGVidWcoIk5vIF9FSjAgc3VwcG9ydCBmb3IgZG9jayBkZXZpY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJYXJnX2xpc3QuY291bnQgPSAxOworCWFyZ19saXN0LnBvaW50ZXIgPSAmYXJnOworCWFyZy50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJYXJnLmludGVnZXIudmFsdWUgPSAxOworCisJaWYgKEFDUElfRkFJTFVSRShhY3BpX2V2YWx1YXRlX29iamVjdChkcy0+aGFuZGxlLCAiX0VKMCIsCisJCQkJCSAgICAgICZhcmdfbGlzdCwgTlVMTCkpKQorCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGV2YWx1YXRlIF9FSjAhXG4iKTsKK30KKworLyoqCisgKiBoYW5kbGVfZG9jayAtIGhhbmRsZSBhIGRvY2sgZXZlbnQKKyAqIEBkczogdGhlIGRvY2sgc3RhdGlvbgorICogQGRvY2s6IHRvIGRvY2ssIG9yIHVuZG9jayAtIHRoYXQgaXMgdGhlIHF1ZXN0aW9uCisgKgorICogRXhlY3V0ZSB0aGUgX0RDSyBtZXRob2QgaW4gcmVzcG9uc2UgdG8gYW4gYWNwaSBldmVudAorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZG9jayhzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcywgaW50IGRvY2spCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0OworCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0cnVjdCBhY3BpX2J1ZmZlciBuYW1lX2J1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCisJYWNwaV9nZXRfbmFtZShkcy0+aGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZuYW1lX2J1ZmZlcik7CisJb2JqID0gbmFtZV9idWZmZXIucG9pbnRlcjsKKworCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlc1xuIiwgZG9jayA/ICJkb2NraW5nIiA6ICJ1bmRvY2tpbmciKTsKKworCS8qIF9EQ0sgbWV0aG9kIGhhcyBvbmUgYXJndW1lbnQgKi8KKwlhcmdfbGlzdC5jb3VudCA9IDE7CisJYXJnX2xpc3QucG9pbnRlciA9ICZhcmc7CisJYXJnLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlhcmcuaW50ZWdlci52YWx1ZSA9IGRvY2s7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZHMtPmhhbmRsZSwgIl9EQ0siLCAmYXJnX2xpc3QsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcHJfZGVidWcoIiVzOiBmYWlsZWQgdG8gZXhlY3V0ZSBfRENLXG4iLCBvYmotPnN0cmluZy5wb2ludGVyKTsKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJa2ZyZWUobmFtZV9idWZmZXIucG9pbnRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb2NrKHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzKQoreworCWhhbmRsZV9kb2NrKGRzLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVuZG9jayhzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcykKK3sKKwloYW5kbGVfZG9jayhkcywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZWdpbl9kb2NrKHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzKQoreworCWRzLT5mbGFncyB8PSBET0NLX0RPQ0tJTkc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9kb2NrKHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzKQoreworCWRzLT5mbGFncyAmPSB+KERPQ0tfRE9DS0lORyk7CisJZHMtPmxhc3RfZG9ja190aW1lID0gamlmZmllczsKK30KKworLyoqCisgKiBkb2NrX2luX3Byb2dyZXNzIC0gc2VlIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGhhbmRsaW5nIGEgZG9jayBldmVudAorICogQGRzOiB0aGUgZG9jayBzdGF0aW9uCisgKgorICogU29tZXRpbWVzIHdoaWxlIGRvY2tpbmcsIGZhbHNlIGRvY2sgZXZlbnRzIGNhbiBiZSBzZW50IHRvIHRoZSBkcml2ZXIKKyAqIGJlY2F1c2UgZ29vZCBjb25uZWN0aW9ucyBhcmVuJ3QgbWFkZSBvciBzb21lIG90aGVyIHJlYXNvbi4gIElnbm9yZSB0aGVzZQorICogaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgZG9pbmcgc29tZXRoaW5nLgorICovCitzdGF0aWMgaW50IGRvY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMpCit7CisJaWYgKChkcy0+ZmxhZ3MgJiBET0NLX0RPQ0tJTkcpIHx8CisJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIChkcy0+bGFzdF9kb2NrX3RpbWUgKyBIWikpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiByZWdpc3Rlcl9kb2NrX25vdGlmaWVyIC0gYWRkIHlvdXJzZWxmIHRvIHRoZSBkb2NrIG5vdGlmaWVyIGxpc3QKKyAqIEBuYjogdGhlIGNhbGxlcnMgbm90aWZpZXIgYmxvY2sKKyAqCisgKiBJZiBhIGRyaXZlciB3aXNoZXMgdG8gYmUgbm90aWZpZWQgYWJvdXQgZG9jayBldmVudHMsIHRoZXkgY2FuCisgKiB1c2UgdGhpcyBmdW5jdGlvbiB0byBwdXQgYSBub3RpZmllciBibG9jayBvbiB0aGUgZG9jayBub3RpZmllciBsaXN0LgorICogdGhpcyBub3RpZmllciBjYWxsIGNoYWluIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGEgZG9jayBldmVudCwgYnV0CisgKiBiZWZvcmUgaG90cGx1Z2dpbmcgYW55IG5ldyBkZXZpY2VzLgorICovCitpbnQgcmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmRvY2tfbm90aWZpZXJfbGlzdCwgbmIpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kb2NrX25vdGlmaWVyKTsKKworLyoqCisgKiB1bnJlZ2lzdGVyX2RvY2tfbm90aWZpZXIgLSByZW1vdmUgeW91cnNlbGYgZnJvbSB0aGUgZG9jayBub3RpZmllciBsaXN0CisgKiBAbmI6IHRoZSBjYWxsZXJzIG5vdGlmaWVyIGJsb2NrCisgKi8KK3ZvaWQgdW5yZWdpc3Rlcl9kb2NrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmRvY2tfbm90aWZpZXJfbGlzdCwgbmIpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2RvY2tfbm90aWZpZXIpOworCisvKioKKyAqIHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UgLSByZWdpc3RlciBhIGhvdHBsdWcgZnVuY3Rpb24KKyAqIEBoYW5kbGU6IHRoZSBoYW5kbGUgb2YgdGhlIGRldmljZQorICogQGhhbmRsZXI6IHRoZSBhY3BpX25vdGlmaWVyX2hhbmRsZXIgdG8gY2FsbCBhZnRlciBkb2NraW5nCisgKiBAY29udGV4dDogZGV2aWNlIHNwZWNpZmljIGRhdGEKKyAqCisgKiBJZiBhIGRyaXZlciB3b3VsZCBsaWtlIHRvIHBlcmZvcm0gYSBob3RwbHVnIG9wZXJhdGlvbiBhZnRlciBhIGRvY2sKKyAqIGV2ZW50LCB0aGV5IGNhbiByZWdpc3RlciBhbiBhY3BpX25vdGlmaXlfaGFuZGxlciB0byBiZSBjYWxsZWQgYnkKKyAqIHRoZSBkb2NrIGRyaXZlciBhZnRlciBfRENLIGlzIGV4ZWN1dGVkLgorICovCitpbnQKK3JlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkgICAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisKKwlpZiAoIWRvY2tfc3RhdGlvbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIG1ha2Ugc3VyZSB0aGlzIGhhbmRsZSBpcyBmb3IgYSBkZXZpY2UgZGVwZW5kZW50IG9uIHRoZSBkb2NrLAorCSAqIHRoaXMgd291bGQgaW5jbHVkZSB0aGUgZG9jayBzdGF0aW9uIGl0c2VsZgorCSAqLworCWRkID0gZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpOworCWlmIChkZCkgeworCQlkZC0+aGFuZGxlciA9IGhhbmRsZXI7CisJCWRkLT5jb250ZXh0ID0gY29udGV4dDsKKwkJZG9ja19hZGRfaG90cGx1Z19kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKTsKKworLyoqCisgKiB1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UgLSByZW1vdmUgeW91cnNlbGYgZnJvbSB0aGUgaG90cGx1ZyBsaXN0CisgKiBAaGFuZGxlOiB0aGUgYWNwaSBoYW5kbGUgb2YgdGhlIGRldmljZQorICovCit2b2lkIHVucmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisKKwlpZiAoIWRvY2tfc3RhdGlvbikKKwkJcmV0dXJuOworCisJZGQgPSBmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSk7CisJaWYgKGRkKQorCQlkb2NrX2RlbF9ob3RwbHVnX2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKTsKKworLyoqCisgKiBkb2NrX25vdGlmeSAtIGFjdCB1cG9uIGFuIGFjcGkgZG9jayBub3RpZmljYXRpb24KKyAqIEBoYW5kbGU6IHRoZSBkb2NrIHN0YXRpb24gaGFuZGxlCisgKiBAZXZlbnQ6IHRoZSBhY3BpIGV2ZW50CisgKiBAZGF0YTogb3VyIGRyaXZlciBkYXRhIHN0cnVjdAorICoKKyAqIElmIHdlIGFyZSBub3RpZmllZCB0byBkb2NrLCB0aGVuIGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jayBpcworICogcHJlc2VudCBhbmQgdGhlbiBkb2NrLiAgTm90aWZ5IGFsbCBkcml2ZXJzIG9mIHRoZSBkb2NrIGV2ZW50LAorICogYW5kIHRoZW4gaG90cGx1ZyBhbmQgZGV2aWNlcyB0aGF0IG1heSBuZWVkIGhvdHBsdWdnaW5nLiAgRm9yIHVuZG9jaworICogY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkb2NrIGRldmljZSBpcyBzdGlsbCBwcmVzZW50LCB0aGVuIHVuZG9jaworICogYW5kIGhvdHJlbW92ZSBhbGwgdGhlIGRldmljZXMgdGhhdCBtYXkgbmVlZCByZW1vdmluZy4KKyAqLworc3RhdGljIHZvaWQgZG9ja19ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMgPSAoc3RydWN0IGRvY2tfc3RhdGlvbiAqKWRhdGE7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6CisJCWlmICghZG9ja19pbl9wcm9ncmVzcyhkcykgJiYgZG9ja19wcmVzZW50KGRzKSkgeworCQkJYmVnaW5fZG9jayhkcyk7CisJCQlkb2NrKGRzKTsKKwkJCWlmICghZG9ja19wcmVzZW50KGRzKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byBkb2NrIVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmZG9ja19ub3RpZmllcl9saXN0LAorCQkJCQkJICAgZXZlbnQsIE5VTEwpOworCQkJaG90cGx1Z19kb2NrX2RldmljZXMoZHMsIGV2ZW50KTsKKwkJCWNvbXBsZXRlX2RvY2soZHMpOworCQkJZG9ja19ldmVudChkcywgZXZlbnQsIERPQ0tfRVZFTlQpOworCQl9CisJCWJyZWFrOworCWNhc2UgQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLOgorCS8qCisgICAgICAgICAqIEFjY29yZGluZyB0byBhY3BpIHNwZWMgMy4wYSwgaWYgYSBERVZJQ0VfQ0hFQ0sgbm90aWZpY2F0aW9uCisgICAgICAgICAqIGlzIHNlbnQgYW5kIF9EQ0sgaXMgcHJlc2VudCwgaXQgaXMgYXNzdW1lZCB0byBtZWFuIGFuCisgICAgICAgICAqIHVuZG9jayByZXF1ZXN0LiAgVGhpcyBub3RpZnkgcm91dGluZSB3aWxsIG9ubHkgYmUgY2FsbGVkCisgICAgICAgICAqIGZvciBvYmplY3RzIGRlZmluaW5nIF9EQ0ssIHNvIHdlIHdpbGwgZmFsbCB0aHJvdWdoIHRvIGVqZWN0CisgICAgICAgICAqIHJlcXVlc3QgaGVyZS4gIEhvd2V2ZXIsIHdlIHdpbGwgcGFzcyBhbiBlamVjdCByZXF1ZXN0IHRocm91Z2gKKwkgKiB0byB0aGUgZHJpdmVyIHdobyB3aXNoIHRvIGhvdHBsdWcuCisgICAgICAgICAqLworCWNhc2UgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDoKKwkJaWYgKCFkb2NrX2luX3Byb2dyZXNzKGRzKSAmJiBkb2NrX3ByZXNlbnQoZHMpKSB7CisJCQkvKgorCQkJICogaGVyZSB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSB1bmRvY2sKKwkJCSAqIGV2ZW50IHByaW9yIHRvIGFjdHVhbGx5IGRvaW5nIHRoZSB1bmRvY2sKKwkJCSAqIHNvIHRoYXQgdGhlIGRldmljZSBzdHJ1Y3Qgc3RpbGwgZXhpc3RzLgorCQkJICovCisJCQlkb2NrX2V2ZW50KGRzLCBldmVudCwgVU5ET0NLX0VWRU5UKTsKKwkJCWhvdHBsdWdfZG9ja19kZXZpY2VzKGRzLCBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKTsKKwkJCXVuZG9jayhkcyk7CisJCQllamVjdF9kb2NrKGRzKTsKKwkJCWlmIChkb2NrX3ByZXNlbnQoZHMpKQorCQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byB1bmRvY2shXG4iKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJVbmtub3duIGRvY2sgZXZlbnQgJWRcbiIsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogZmluZF9kb2NrX2RldmljZXMgLSBmaW5kIGRldmljZXMgb24gdGhlIGRvY2sgc3RhdGlvbgorICogQGhhbmRsZTogdGhlIGhhbmRsZSBvZiB0aGUgZGV2aWNlIHdlIGFyZSBleGFtaW5pbmcKKyAqIEBsdmw6IHVudXNlZAorICogQGNvbnRleHQ6IHRoZSBkb2NrIHN0YXRpb24gcHJpdmF0ZSBkYXRhCisgKiBAcnY6IHVudXNlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGFjcGlfd2Fsa19uYW1lc3BhY2UuICBJdCB3aWxsCisgKiBjaGVjayB0byBzZWUgaWYgYW4gb2JqZWN0IGhhcyBhbiBfRUpEIG1ldGhvZC4gIElmIGl0IGRvZXMsIHRoZW4gaXQKKyAqIHdpbGwgc2VlIGlmIGl0IGlzIGRlcGVuZGVudCBvbiB0aGUgZG9jayBzdGF0aW9uLgorICovCitzdGF0aWMgYWNwaV9zdGF0dXMKK2ZpbmRfZG9ja19kZXZpY2VzKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSB0bXA7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMgPSAoc3RydWN0IGRvY2tfc3RhdGlvbiAqKWNvbnRleHQ7CisJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisKKwlzdGF0dXMgPSBhY3BpX2J1c19nZXRfZWpkKGhhbmRsZSwgJnRtcCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gQUVfT0s7CisKKwlpZiAodG1wID09IGRzLT5oYW5kbGUpIHsKKwkJZGQgPSBhbGxvY19kb2NrX2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKTsKKwkJaWYgKGRkKQorCQkJYWRkX2RvY2tfZGVwZW5kZW50X2RldmljZShkcywgZGQpOworCX0KKworCXJldHVybiBBRV9PSzsKK30KKworLyoqCisgKiBkb2NrX2FkZCAtIGFkZCBhIG5ldyBkb2NrIHN0YXRpb24KKyAqIEBoYW5kbGU6IHRoZSBkb2NrIHN0YXRpb24gaGFuZGxlCisgKgorICogYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplIGEgbmV3IGRvY2sgc3RhdGlvbiBkZXZpY2UuICBGaW5kIGFsbCBkZXZpY2VzCisgKiB0aGF0IGFyZSBvbiB0aGUgZG9jayBzdGF0aW9uLCBhbmQgcmVnaXN0ZXIgZm9yIGRvY2sgZXZlbnQgbm90aWZpY2F0aW9ucy4KKyAqLworc3RhdGljIGludCBkb2NrX2FkZChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJaW50IHJldDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CisKKwkvKiBhbGxvY2F0ZSAmIGluaXRpYWxpemUgdGhlIGRvY2tfc3RhdGlvbiBwcml2YXRlIGRhdGEgKi8KKwlkb2NrX3N0YXRpb24gPSBremFsbG9jKHNpemVvZigqZG9ja19zdGF0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkb2NrX3N0YXRpb24pCisJCXJldHVybiAtRU5PTUVNOworCWRvY2tfc3RhdGlvbi0+aGFuZGxlID0gaGFuZGxlOworCWRvY2tfc3RhdGlvbi0+bGFzdF9kb2NrX3RpbWUgPSBqaWZmaWVzIC0gSFo7CisJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMpOworCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmhvdHBsdWdfZGV2aWNlcyk7CisJc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+ZGRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+aHBfbG9jayk7CisKKwkvKiBGaW5kIGRlcGVuZGVudCBkZXZpY2VzICovCisJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJICAgIEFDUElfVUlOVDMyX01BWCwgZmluZF9kb2NrX2RldmljZXMsIGRvY2tfc3RhdGlvbiwKKwkJCSAgICBOVUxMKTsKKworCS8qIGFkZCB0aGUgZG9jayBzdGF0aW9uIGFzIGEgZGV2aWNlIGRlcGVuZGVudCBvbiBpdHNlbGYgKi8KKwlkZCA9IGFsbG9jX2RvY2tfZGVwZW5kZW50X2RldmljZShoYW5kbGUpOworCWlmICghZGQpIHsKKwkJa2ZyZWUoZG9ja19zdGF0aW9uKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CisKKwkvKiByZWdpc3RlciBmb3IgZG9jayBldmVudHMgKi8KKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZG9ja19zdGF0aW9uLT5oYW5kbGUsCisJCQkJCSAgICAgQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkgICAgIGRvY2tfbm90aWZ5LCBkb2NrX3N0YXRpb24pOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIGluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXJcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGRvY2tfYWRkX2VycjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgXG4iLCBBQ1BJX0RPQ0tfRFJJVkVSX05BTUUpOworCisJcmV0dXJuIDA7CisKK2RvY2tfYWRkX2VycjoKKwlrZnJlZShkb2NrX3N0YXRpb24pOworCWtmcmVlKGRkKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRvY2tfcmVtb3ZlIC0gZnJlZSB1cCByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgZG9jayBzdGF0aW9uCisgKi8KK3N0YXRpYyBpbnQgZG9ja19yZW1vdmUodm9pZCkKK3sKKwlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZCwgKnRtcDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoIWRvY2tfc3RhdGlvbikKKwkJcmV0dXJuIDA7CisKKwkvKiByZW1vdmUgZGVwZW5kZW50IGRldmljZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGQsIHRtcCwgJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMsCisJCQkJIGxpc3QpCisJICAgIGtmcmVlKGRkKTsKKworCS8qIHJlbW92ZSBkb2NrIG5vdGlmeSBoYW5kbGVyICovCisJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZG9ja19zdGF0aW9uLT5oYW5kbGUsCisJCQkJCSAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCisJCQkJCSAgICBkb2NrX25vdGlmeSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlbW92aW5nIG5vdGlmeSBoYW5kbGVyXG4iKTsKKworCS8qIGZyZWUgZG9jayBzdGF0aW9uIG1lbW9yeSAqLworCWtmcmVlKGRvY2tfc3RhdGlvbik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZmluZF9kb2NrIC0gbG9vayBmb3IgYSBkb2NrIHN0YXRpb24KKyAqIEBoYW5kbGU6IGFjcGkgaGFuZGxlIG9mIGEgZGV2aWNlCisgKiBAbHZsOiB1bnVzZWQKKyAqIEBjb250ZXh0OiBjb3VudGVyIG9mIGRvY2sgc3RhdGlvbnMgZm91bmQKKyAqIEBydjogdW51c2VkCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgYWNwaV93YWxrX25hbWVzcGFjZSB0byBsb29rIGZvciBkb2NrIHN0YXRpb25zLgorICovCitzdGF0aWMgYWNwaV9zdGF0dXMKK2ZpbmRfZG9jayhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKK3sKKwlpbnQgKmNvdW50ID0gKGludCAqKWNvbnRleHQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisKKwlpZiAoaXNfZG9jayhoYW5kbGUpKSB7CisJCWlmIChkb2NrX2FkZChoYW5kbGUpID49IDApIHsKKwkJCSgqY291bnQpKys7CisJCQlzdGF0dXMgPSBBRV9DVFJMX1RFUk1JTkFURTsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkb2NrX2luaXQodm9pZCkKK3sKKwlpbnQgbnVtID0gMDsKKworCWRvY2tfc3RhdGlvbiA9IE5VTEw7CisKKwkvKiBsb29rIGZvciBhIGRvY2sgc3RhdGlvbiAqLworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKKwkJCSAgICBBQ1BJX1VJTlQzMl9NQVgsIGZpbmRfZG9jaywgJm51bSwgTlVMTCk7CisKKwlpZiAoIW51bSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRvY2tfZXhpdCh2b2lkKQoreworCWRvY2tfcmVtb3ZlKCk7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKGRvY2tfaW5pdCk7Cittb2R1bGVfZXhpdChkb2NrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCAxOGIzZWE5Li44YzVkN2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMjA3LDE2ICsyMDcsMTUgQEAKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfd2FpdCIpOwogCiAJZWMtPmludHIuZXhwZWN0X2V2ZW50ID0gZXZlbnQ7CiAJc21wX21iKCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX0VDX0VWRU5UX0lCRToKLQkJaWYgKH5hY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIGV2ZW50KSB7CisJCWlmICh+YWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfSUJGKSB7CiAJCQllYy0+aW50ci5leHBlY3RfZXZlbnQgPSAwOwotCQkJcmV0dXJuX1ZBTFVFKDApOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIzOCwxNiArMjM3LDE2IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQUNQSV9FQ19FVkVOVF9PQkY6CiAJCWlmIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19PQkYpCi0JCQlyZXR1cm5fVkFMVUUoMCk7CisJCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfRUNfRVZFTlRfSUJFOgogCQlpZiAofmFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX0lCRikKLQkJCXJldHVybl9WQUxVRSgwKTsKKwkJCXJldHVybiAwOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoLUVUSU1FKTsKKwlyZXR1cm4gLUVUSU1FOwogfQogCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKQEAgLTI2MCw3ICsyNTksNiBAQAogCXUzMiB0bXAgPSAwOwogCWludCBzdGF0dXMgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19lbnRlcl9idXJzdF9tb2RlIik7CiAKIAlzdGF0dXMgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKIAlpZiAoc3RhdHVzICE9IC1FSU5WQUwgJiYgIShzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfQlVSU1QpKSB7CkBAIC0yNzIsMjIgKzI3MCwyMSBAQAogCQlzdGF0dXMgPSBhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfT0JGKTsKIAkJYWNwaV9od19sb3dfbGV2ZWxfcmVhZCg4LCAmdG1wLCAmZWMtPmNvbW1vbi5kYXRhX2FkZHIpOwogCQlpZiAodG1wICE9IDB4OTApIHsJLyogQnVyc3QgQUNLIGJ5dGUgKi8KLQkJCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiAJYXRvbWljX3NldCgmZWMtPmludHIubGVhdmluZ19idXJzdCwgMCk7Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogICAgICAgZW5kOgotCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJFcnJvciBpbiBhY3BpX2VjX3dhaXRcbiIpOwotCXJldHVybl9WQUxVRSgtMSk7CisJQUNQSV9FWENFUFRJT04gKChBRV9JTkZPLCBzdGF0dXMsICJFQyB3YWl0LCBidXJzdCBtb2RlIik7CisJcmV0dXJuIC0xOwogfQogCiBpbnQgYWNwaV9lY19sZWF2ZV9idXJzdF9tb2RlKHVuaW9uIGFjcGlfZWMgKmVjKQogewogCWludCBzdGF0dXMgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19sZWF2ZV9idXJzdF9tb2RlIik7CiAKIAlzdGF0dXMgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKIAlpZiAoc3RhdHVzICE9IC1FSU5WQUwgJiYgKHN0YXR1cyAmIEFDUElfRUNfRkxBR19CVVJTVCkpewpAQCAtMjk4LDEwICsyOTUsMTAgQEAKIAkJYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0ZMQUdfSUJGKTsKIAl9IAogCWF0b21pY19zZXQoJmVjLT5pbnRyLmxlYXZpbmdfYnVyc3QsIDEpOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIGVuZDoKLQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAibGVhdmUgYnVyc3RfbW9kZTplcnJvclxuIik7Ci0JcmV0dXJuX1ZBTFVFKC0xKTsKKwlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRUMgbGVhdmUgYnVyc3QgbW9kZSIpOworCXJldHVybiAtMTsKIH0KICNlbmRpZiAvKiBBQ1BJX0ZVVFVSRV9VU0FHRSAqLwogCkBAIC0zMjUsMTcgKzMyMiwxNiBAQAogCWludCByZXN1bHQgPSAwOwogCXUzMiBnbGsgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19yZWFkIik7CiAKIAlpZiAoIWVjIHx8ICFkYXRhKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJKmRhdGEgPSAwOwogCiAJaWYgKGVjLT5jb21tb24uZ2xvYmFsX2xvY2spIHsKIAkJc3RhdHVzID0gYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKEFDUElfRUNfVURFTEFZX0dMSywgJmdsayk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChkb3duX2ludGVycnVwdGlibGUoJmVjLT5wb2xsLnNlbSkpIHsKQEAgLTM2NSw3ICszNjEsNyBAQAogCWlmIChlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKQogCQlhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soZ2xrKTsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19wb2xsX3dyaXRlKHVuaW9uIGFjcGlfZWMgKmVjLCB1OCBhZGRyZXNzLCB1OCBkYXRhKQpAQCAtMzc0LDE1ICszNzAsMTQgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1MzIgZ2xrID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfd3JpdGUiKTsKIAogCWlmICghZWMpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZWMtPmNvbW1vbi5nbG9iYWxfbG9jaykgewogCQlzdGF0dXMgPSBhY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2soQUNQSV9FQ19VREVMQVlfR0xLLCAmZ2xrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZWMtPnBvbGwuc2VtKSkgewpAQCAtNDE1LDcgKzQxMCw3IEBACiAJaWYgKGVjLT5jb21tb24uZ2xvYmFsX2xvY2spCiAJCWFjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayhnbGspOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX2ludHJfcmVhZCh1bmlvbiBhY3BpX2VjICplYywgdTggYWRkcmVzcywgdTMyICogZGF0YSkKQEAgLTQyMywxNyArNDE4LDE2IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGdsazsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfcmVhZCIpOwogCiAJaWYgKCFlYyB8fCAhZGF0YSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCSpkYXRhID0gMDsKIAogCWlmIChlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKSB7CiAJCXN0YXR1cyA9IGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jayhBQ1BJX0VDX1VERUxBWV9HTEssICZnbGspOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKQEAgLTQ2Nyw3ICs0NjEsNyBAQAogCWlmIChlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKQogCQlhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soZ2xrKTsKIAotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19pbnRyX3dyaXRlKHVuaW9uIGFjcGlfZWMgKmVjLCB1OCBhZGRyZXNzLCB1OCBkYXRhKQpAQCAtNDc1LDE1ICs0NjksMTQgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAl1MzIgZ2xrOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY193cml0ZSIpOwogCiAJaWYgKCFlYykKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKSB7CiAJCXN0YXR1cyA9IGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jayhBQ1BJX0VDX1VERUxBWV9HTEssICZnbGspOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKQEAgLTUxNiw3ICs1MDksNyBAQAogCWlmIChlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKQogCQlhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soZ2xrKTsKIAotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC01NzQsMTcgKzU2NywxNiBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXUzMiBnbGsgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19xdWVyeSIpOwogCiAJaWYgKCFlYyB8fCAhZGF0YSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCSpkYXRhID0gMDsKIAogCWlmIChlYy0+Y29tbW9uLmdsb2JhbF9sb2NrKSB7CiAJCXN0YXR1cyA9IGFjcGlfYWNxdWlyZV9nbG9iYWxfbG9jayhBQ1BJX0VDX1VERUxBWV9HTEssICZnbGspOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKgpAQCAtNjEzLDIzICs2MDUsMjIgQEAKIAlpZiAoZWMtPmNvbW1vbi5nbG9iYWxfbG9jaykKIAkJYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrKGdsayk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogc3RhdGljIGludCBhY3BpX2VjX2ludHJfcXVlcnkodW5pb24gYWNwaV9lYyAqZWMsIHUzMiAqIGRhdGEpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGdsazsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfcXVlcnkiKTsKIAogCWlmICghZWMgfHwgIWRhdGEpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJKmRhdGEgPSAwOwogCiAJaWYgKGVjLT5jb21tb24uZ2xvYmFsX2xvY2spIHsKIAkJc3RhdHVzID0gYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKEFDUElfRUNfVURFTEFZX0dMSywgJmdsayk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWRvd24oJmVjLT5pbnRyLnNlbSk7CkBAIC02NjIsNyArNjUzLDcgQEAKIAlpZiAoZWMtPmNvbW1vbi5nbG9iYWxfbG9jaykKIAkJYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrKGdsayk7CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjkxLDEzICs2ODIsMTIgQEAKIAkJJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicKIAl9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19ncGVfcXVlcnkiKTsKIAogCWlmICghZWNfY3h0KQogCQlnb3RvIGVuZDsKIAogCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZlYy0+cG9sbC5zZW0pKSB7Ci0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAJfQogCWFjcGlfaHdfbG93X2xldmVsX3JlYWQoOCwgJnZhbHVlLCAmZWMtPmNvbW1vbi5jb21tYW5kX2FkZHIpOwogCXVwKCZlYy0+cG9sbC5zZW0pOwpAQCAtNzM0LDcgKzcyNCw2IEBACiAJCSc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnCiAJfTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfZ3BlX3F1ZXJ5Iik7CiAKIAlpZiAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfU0NJKQogCQlyZXN1bHQgPSBhY3BpX2VjX3F1ZXJ5KGVjLCAmdmFsdWUpOwpAQCAtNzkzLDEyICs3ODIsMTUgQEAKIAljYXNlIEFDUElfRUNfRVZFTlRfT0JGOgogCQlpZiAoISh2YWx1ZSAmIEFDUElfRUNfRkxBR19PQkYpKQogCQkJYnJlYWs7CisJCWVjLT5pbnRyLmV4cGVjdF9ldmVudCA9IDA7CisJCXdha2VfdXAoJmVjLT5pbnRyLndhaXQpOworCQlicmVhazsKIAljYXNlIEFDUElfRUNfRVZFTlRfSUJFOgogCQlpZiAoKHZhbHVlICYgQUNQSV9FQ19GTEFHX0lCRikpCiAJCQlicmVhazsKIAkJZWMtPmludHIuZXhwZWN0X2V2ZW50ID0gMDsKIAkJd2FrZV91cCgmZWMtPmludHIud2FpdCk7Ci0JCXJldHVybiBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC04NDYsMTUgKzgzOCwxNCBAQAogCWFjcGlfaW50ZWdlciBmX3YgPSAwOwogCWludCBpID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfc3BhY2VfaGFuZGxlciIpOwogCiAJaWYgKChhZGRyZXNzID4gMHhGRikgfHwgIXZhbHVlIHx8ICFoYW5kbGVyX2NvbnRleHQpCi0JCXJldHVybl9WQUxVRShBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKIAlpZiAoYml0X3dpZHRoICE9IDggJiYgYWNwaV9zdHJpY3QpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKIAkJICAgICAgICJhY3BpX2VjX3NwYWNlX2hhbmRsZXI6IGJpdF93aWR0aCBzaG91bGQgYmUgOFxuIik7Ci0JCXJldHVybl9WQUxVRShBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAJfQogCiAJZWMgPSAodW5pb24gYWNwaV9lYyAqKWhhbmRsZXJfY29udGV4dDsKQEAgLTg5MywxNiArODg0LDE2IEBACiAgICAgICBvdXQ6CiAJc3dpdGNoIChyZXN1bHQpIHsKIAljYXNlIC1FSU5WQUw6Ci0JCXJldHVybl9WQUxVRShBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0RFVjoKLQkJcmV0dXJuX1ZBTFVFKEFFX05PVF9GT1VORCk7CisJCXJldHVybiBBRV9OT1RfRk9VTkQ7CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FOgotCQlyZXR1cm5fVkFMVUUoQUVfVElNRSk7CisJCXJldHVybiBBRV9USU1FOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm5fVkFMVUUoQUVfT0spOworCQlyZXR1cm4gQUVfT0s7CiAJfQogfQogCkBAIC05MTYsNyArOTA3LDYgQEAKIHsKIAl1bmlvbiBhY3BpX2VjICplYyA9ICh1bmlvbiBhY3BpX2VjICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19yZWFkX2luZm8iKTsKIAogCWlmICghZWMpCiAJCWdvdG8gZW5kOwpAQCAtOTMxLDcgKzkyMSw3IEBACiAJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5jb21tb24uZ3BlX2JpdCwgQUNQSV9OT1RfSVNSKTsKIAogICAgICAgZW5kOgotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTk1MSwzMyArOTQxLDI5IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VjX2FkZF9mcyIpOwogCiAJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IHByb2NfbWtkaXIoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCiAJCQkJCQkgICAgIGFjcGlfZWNfZGlyKTsKIAkJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoQUNQSV9FQ19GSUxFX0lORk8sIFNfSVJVR08sCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJyVzJyBmcyBlbnRyeVxuIiwKLQkJCQkgIEFDUElfRUNfRklMRV9JTkZPKSk7CisJCXJldHVybiAtRU5PREVWOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfZWNfaW5mb19vcHM7CiAJCWVudHJ5LT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19yZW1vdmVfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19yZW1vdmVfZnMiKTsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0VDX0ZJTEVfSU5GTywgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwpAQCAtOTg1LDcgKzk3MSw3IEBACiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gTlVMTDsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05OTgsMTQgKzk4NCwxMyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXVuaW9uIGFjcGlfZWMgKmVjID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZWNfYWRkIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVjID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCWlmICghZWMpCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGVjLCAwLCBzaXplb2YodW5pb24gYWNwaV9lYykpOwogCiAJZWMtPmNvbW1vbi5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTEwMzgsOCArMTAyMyw3IEBACiAJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihlYy0+Y29tbW9uLmhhbmRsZSwgIl9HUEUiLCBOVUxMLAogCQkJCSAgJmVjLT5jb21tb24uZ3BlX2JpdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3Igb2J0YWluaW5nIEdQRSBiaXQgYXNzaWdubWVudFxuIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiT2J0YWluaW5nIEdQRSBiaXQiKSk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTEwNTksNyArMTA0Myw3IEBACiAJaWYgKHJlc3VsdCkKIAkJa2ZyZWUoZWMpOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIHN0YXRpYyBpbnQgYWNwaV9lY19pbnRyX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTEwNjcsMTQgKzEwNTEsMTMgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAl1bmlvbiBhY3BpX2VjICplYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VjX2FkZCIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAllYyA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVjKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChlYywgMCwgc2l6ZW9mKHVuaW9uIGFjcGlfZWMpKTsKIAogCWVjLT5jb21tb24uaGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CkBAIC0xMTEwLDggKzEwOTMsNyBAQAogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmNvbW1vbi5oYW5kbGUsICJfR1BFIiwgTlVMTCwKIAkJCQkgICZlYy0+Y29tbW9uLmdwZV9iaXQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIG9idGFpbmluZyBHUEUgYml0IGFzc2lnbm1lbnRcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiT2J0YWluaW5nIEdQRSBiaXQgYXNzaWdubWVudFxuIik7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTExMzEsMTcgKzExMTMsMTYgQEAKIAlpZiAocmVzdWx0KQogCQlrZnJlZShlYyk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKIAl1bmlvbiBhY3BpX2VjICplYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VjX3JlbW92ZSIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAllYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIApAQCAtMTE0OSw3ICsxMTMwLDcgQEAKIAogCWtmcmVlKGVjKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzCkBAIC0xMTg4LDE1ICsxMTY5LDE0IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9lYyAqZWMgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19zdGFydCIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAllYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCWlmICghZWMpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgogCSAqIEdldCBJL08gcG9ydCBhZGRyZXNzZXMuIENvbnZlcnQgdG8gR0FTIGZvcm1hdC4KQEAgLTEyMDUsOSArMTE4NSw4IEBACiAJCQkJICAgICBhY3BpX2VjX2lvX3BvcnRzLCBlYyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpCiAJICAgIHx8IGVjLT5jb21tb24uY29tbWFuZF9hZGRyLnJlZ2lzdGVyX2JpdF93aWR0aCA9PSAwKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgZ2V0dGluZyBJL08gcG9ydCBhZGRyZXNzZXMiKSk7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgZ2V0dGluZyBJL08gcG9ydCBhZGRyZXNzZXNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAllYy0+Y29tbW9uLnN0YXR1c19hZGRyID0gZWMtPmNvbW1vbi5jb21tYW5kX2FkZHI7CkBAIC0xMjI0LDcgKzEyMDMsNyBAQAogCQkJCQkgIEFDUElfR1BFX0VER0VfVFJJR0dFUkVELAogCQkJCQkgICZhY3BpX2VjX2dwZV9oYW5kbGVyLCBlYyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWFjcGlfc2V0X2dwZV90eXBlKE5VTEwsIGVjLT5jb21tb24uZ3BlX2JpdCwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKIAlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmNvbW1vbi5ncGVfYml0LCBBQ1BJX05PVF9JU1IpOwpAQCAtMTIzNiwxMCArMTIxNSwxMCBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlYy0+Y29tbW9uLmdwZV9iaXQsCiAJCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoQUVfT0spOworCXJldHVybiBBRV9PSzsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX3N0b3Aoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQpAQCAtMTI0NywxMCArMTIyNiw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9lYyAqZWMgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19zdG9wIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCkBAIC0xMjU4LDE1ICsxMjM2LDE1IEBACiAJCQkJCQkgICBBQ1BJX0FEUl9TUEFDRV9FQywKIAkJCQkJCSAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5jb21tb24uZ3BlX2JpdCwKIAkJCQkgICAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzIF9faW5pdApAQCAtMTUzNiwyMyArMTUxNCwyMiBAQAogewogCWludCByZXN1bHQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9lY19pbml0Iik7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCWFjcGlfZWNfZGlyID0gcHJvY19ta2RpcihBQ1BJX0VDX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfZWNfZGlyKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJLyogTm93IHJlZ2lzdGVyIHRoZSBkcml2ZXIgZm9yIHRoZSBFQyAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9lY19kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfRUNfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChhY3BpX2VjX2luaXQpOwpAQCAtMTU2MSwxMyArMTUzOCwxMiBAQAogI2lmIDAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX2VjX2V4aXQodm9pZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VjX2V4aXQiKTsKIAogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2VjX2RyaXZlcik7CiAKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0VDX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KICNlbmRpZgkJCQkvKiAwICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudC5jIGIvZHJpdmVycy9hY3BpL2V2ZW50LmMKaW5kZXggMmRiYjFiMGYuLmE5MDFiMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC00OCwxOCArNDgsMTcgQEAKIAlzdGF0aWMgaW50IGNoYXJzX3JlbWFpbmluZyA9IDA7CiAJc3RhdGljIGNoYXIgKnB0cjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfc3lzdGVtX3JlYWRfZXZlbnQiKTsKIAogCWlmICghY2hhcnNfcmVtYWluaW5nKSB7CiAJCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9idXNfZXZlbnQpKTsKIAogCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkgICAgJiYgKGxpc3RfZW1wdHkoJmFjcGlfYnVzX2V2ZW50X2xpc3QpKSkKLQkJCXJldHVybl9WQUxVRSgtRUFHQUlOKTsKKwkJCXJldHVybiAtRUFHQUlOOwogCiAJCXJlc3VsdCA9IGFjcGlfYnVzX3JlY2VpdmVfZXZlbnQoJmV2ZW50KTsKIAkJaWYgKHJlc3VsdCkKLQkJCXJldHVybl9WQUxVRShyZXN1bHQpOworCQkJcmV0dXJuIHJlc3VsdDsKIAogCQljaGFyc19yZW1haW5pbmcgPSBzcHJpbnRmKHN0ciwgIiVzICVzICUwOHggJTA4eFxuIiwKIAkJCQkJICBldmVudC5kZXZpY2VfY2xhc3MgPyBldmVudC4KQEAgLTc1LDEzICs3NCwxMyBAQAogCX0KIAogCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBwdHIsIGNvdW50KSkKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCSpwcG9zICs9IGNvdW50OwogCWNoYXJzX3JlbWFpbmluZyAtPSBjb3VudDsKIAlwdHIgKz0gY291bnQ7CiAKLQlyZXR1cm5fVkFMVUUoY291bnQpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGludCBhY3BpX3N5c3RlbV9jbG9zZV9ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTExMiwyMiArMTExLDE4IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9ldmVudF9pbml0Iik7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCS8qICdldmVudCcgW1JdICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZXZlbnQiLCBTX0lSVVNSLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoZW50cnkpCiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9zeXN0ZW1fZXZlbnRfb3BzOwogCWVsc2UgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJyVzJyBwcm9jIGZzIGVudHJ5XG4iLAotCQkJCSAgImV2ZW50IikpOwotCQllcnJvciA9IC1FRkFVTFQ7CisJCWVycm9yID0gLUVOT0RFVjsKIAl9Ci0JcmV0dXJuX1ZBTFVFKGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChhY3BpX2V2ZW50X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jCmluZGV4IGYwMWQzMzkuLmM3NmMwNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMKQEAgLTM4Miw3ICszODIsNiBAQAogCXUzMiBzdGF0dXNfcmVnOwogCXUzMiBlbmFibGVfcmVnOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwotCWFjcGlfY3B1X2ZsYWdzIGh3X2ZsYWdzOwogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAlhY3BpX25hdGl2ZV91aW50IGo7CiAKQEAgLTM5NCw4ICszOTMsMTEgQEAKIAkJcmV0dXJuIChpbnRfc3RhdHVzKTsKIAl9CiAKLQkvKiBXZSBuZWVkIHRvIGhvbGQgdGhlIEdQRSBsb2NrIG5vdywgaGFyZHdhcmUgbG9jayBpbiB0aGUgbG9vcCAqLwotCisJLyoKKwkgKiBXZSBuZWVkIHRvIG9idGFpbiB0aGUgR1BFIGxvY2sgZm9yIGJvdGggdGhlIGRhdGEgc3RydWN0cyBhbmQgcmVnaXN0ZXJzCisJICogTm90ZTogTm90IG5lY2Vzc2FyeSB0byBvYnRhaW4gdGhlIGhhcmR3YXJlIGxvY2ssIHNpbmNlIHRoZSBHUEUgcmVnaXN0ZXJzCisJICogYXJlIG93bmVkIGJ5IHRoZSBncGVfbG9jay4KKwkgKi8KIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKIAogCS8qIEV4YW1pbmUgYWxsIEdQRSBibG9ja3MgYXR0YWNoZWQgdG8gdGhpcyBpbnRlcnJ1cHQgbGV2ZWwgKi8KQEAgLTQxMyw4ICs0MTUsNiBAQAogCiAJCQlncGVfcmVnaXN0ZXJfaW5mbyA9ICZncGVfYmxvY2stPnJlZ2lzdGVyX2luZm9baV07CiAKLQkJCWh3X2ZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7Ci0KIAkJCS8qIFJlYWQgdGhlIFN0YXR1cyBSZWdpc3RlciAqLwogCiAJCQlzdGF0dXMgPQpAQCAtNDIzLDggKzQyMyw2IEBACiAJCQkJCQkgICAmZ3BlX3JlZ2lzdGVyX2luZm8tPgogCQkJCQkJICAgc3RhdHVzX2FkZHJlc3MpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jaywKLQkJCQkJCSAgICAgaHdfZmxhZ3MpOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQogCkBAIC00MzUsOCArNDMzLDYgQEAKIAkJCQkJCSAgICZlbmFibGVfcmVnLAogCQkJCQkJICAgJmdwZV9yZWdpc3Rlcl9pbmZvLT4KIAkJCQkJCSAgIGVuYWJsZV9hZGRyZXNzKTsKLQkJCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2ssIGh3X2ZsYWdzKTsKLQogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmFjZS5jCmluZGV4IDc2YzM0YTYuLjRmOTQ4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmFjZS5jCkBAIC00MTQsMTIgKzQxNCwxMyBAQAogCiAJaWYgKCghZGV2aWNlKSB8fAogCSAgICAoIWhhbmRsZXIpIHx8IChoYW5kbGVyX3R5cGUgPiBBQ1BJX01BWF9OT1RJRllfSEFORExFUl9UWVBFKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgZGV2aWNlIGhhbmRsZSAqLwpAQCAtNDI3LDcgKzQyOCw3IEBACiAJbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGRldmljZSk7CiAJaWYgKCFub2RlKSB7CiAJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQlnb3RvIHVubG9jazsKIAl9CiAKIAkvKiBSb290IE9iamVjdCAqLwpAQCAtNDQxLDcgKzQ0Miw3IEBACiAJCSAgICAoKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgJiYKIAkJICAgICAhYWNwaV9nYmxfZGV2aWNlX25vdGlmeS5oYW5kbGVyKSkgewogCQkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQlnb3RvIHVubG9jazsKIAkJfQogCiAJCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwpAQCAtNDUwLDcgKzQ1MSw3IEBACiAJCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7CiAJCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQkJZ290byBleGl0OwogCQl9CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewpAQCAtNDczLDcgKzQ3NCw3IEBACiAKIAkJaWYgKCFhY3BpX2V2X2lzX25vdGlmeV9vYmplY3Qobm9kZSkpIHsKIAkJCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCWdvdG8gdW5sb2NrOwogCQl9CiAKIAkJLyogQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIGludGVybmFsIG9iamVjdCAqLwpAQCAtNDgxLDcgKzQ4Miw3IEBACiAJCW9ial9kZXNjID0gYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KG5vZGUpOwogCQlpZiAoIW9ial9kZXNjKSB7CiAJCQlzdGF0dXMgPSBBRV9OT1RfRVhJU1Q7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCWdvdG8gdW5sb2NrOwogCQl9CiAKIAkJLyogT2JqZWN0IGV4aXN0cyAtIG1ha2Ugc3VyZSB0aGVyZSdzIGFuIGV4aXN0aW5nIGhhbmRsZXIgKi8KQEAgLTQ5MSw3ICs0OTIsNyBAQAogCQkJaWYgKCghbm90aWZ5X29iaikgfHwKIAkJCSAgICAobm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgIT0gaGFuZGxlcikpIHsKIAkJCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwotCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCQkJLyogTWFrZSBzdXJlIGFsbCBkZWZlcnJlZCB0YXNrcyBhcmUgY29tcGxldGVkICovCiAKQEAgLTQ5OSw3ICs1MDAsNyBAQAogCQkJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKIAkJCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCQkJZ290byBleGl0OwogCQkJfQogCiAJCQkvKiBSZW1vdmUgdGhlIGhhbmRsZXIgKi8KQEAgLTUxMiw3ICs1MTMsNyBAQAogCQkJaWYgKCghbm90aWZ5X29iaikgfHwKIAkJCSAgICAobm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgIT0gaGFuZGxlcikpIHsKIAkJCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOwotCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCQkJLyogTWFrZSBzdXJlIGFsbCBkZWZlcnJlZCB0YXNrcyBhcmUgY29tcGxldGVkICovCiAKQEAgLTUyMCw3ICs1MjEsNyBAQAogCQkJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKIAkJCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCQkJZ290byBleGl0OwogCQkJfQogCiAJCQkvKiBSZW1vdmUgdGhlIGhhbmRsZXIgKi8KQEAgLTUyOSw4ICs1MzAsMTEgQEAKIAkJfQogCX0KIAotICAgICAgdW5sb2NrX2FuZF9leGl0OgordW5sb2NrOgogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworZXhpdDoKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJSZW1vdmluZyBub3RpZnkgaGFuZGxlciIpKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtNTY4LDEyICs1NzIsMTMgQEAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCiAJaWYgKCghYWRkcmVzcykgfHwgKHR5cGUgPiBBQ1BJX0dQRV9YUlVQVF9UWVBFX01BU0spKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJZ290byBleGl0OwogCX0KIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJZ290byBleGl0OwogCX0KIAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCkBAIC01ODEsNyArNTg2LDcgQEAKIAlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOwogCWlmICghZ3BlX2V2ZW50X2luZm8pIHsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzbid0IGEgaGFuZGxlciB0aGVyZSBhbHJlYWR5ICovCkBAIC01ODksNyArNTk0LDcgQEAKIAlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CiAJICAgIEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIpIHsKIAkJc3RhdHVzID0gQUVfQUxSRUFEWV9FWElTVFM7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQlnb3RvIHVubG9jazsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdCBoYW5kbGVyIG9iamVjdCAqLwpAQCAtNTk3LDcgKzYwMiw3IEBACiAJaGFuZGxlciA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHNpemVvZihzdHJ1Y3QgYWNwaV9oYW5kbGVyX2luZm8pKTsKIAlpZiAoIWhhbmRsZXIpIHsKIAkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJaGFuZGxlci0+YWRkcmVzcyA9IGFkZHJlc3M7CkBAIC02MDgsNyArNjEzLDcgQEAKIAogCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJLyogSW5zdGFsbCB0aGUgaGFuZGxlciAqLwpAQCAtNjIzLDggKzYyOCwxMiBAQAogCiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAotICAgICAgdW5sb2NrX2FuZF9leGl0OgordW5sb2NrOgogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOworZXhpdDoKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIkluc3RhbGxpbmcgbm90aWZ5IGhhbmRsZXIgZmFpbGVkIikpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjb25maWcuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbmZpZy5jCmluZGV4IDgyMzM1MjQuLjgzZmVkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbmZpZy5jCkBAIC0yNjYsNiArMjY2LDEwIEBACiAJCX0KIAl9CiAKKwlBQ1BJX0lORk8oKEFFX0lORk8sCisJCSAgICJEeW5hbWljIE9FTSBUYWJsZSBMb2FkIC0gWyU0LjRzXSBPZW1JZCBbJTYuNnNdIE9lbVRhYmxlSWQgWyU4LjhzXSIsCisJCSAgIHRhYmxlLT5zaWduYXR1cmUsIHRhYmxlLT5vZW1faWQsIHRhYmxlLT5vZW1fdGFibGVfaWQpKTsKKwogCSpyZXR1cm5fZGVzYyA9IGRkYl9oYW5kbGU7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CkBAIC00NDYsNiArNDUwLDEwIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAorCUFDUElfSU5GTygoQUVfSU5GTywKKwkJICAgIkR5bmFtaWMgU1NEVCBMb2FkIC0gT2VtSWQgWyU2LjZzXSBPZW1UYWJsZUlkIFslOC44c10iLAorCQkgICB0YWJsZV9wdHItPm9lbV9pZCwgdGFibGVfcHRyLT5vZW1fdGFibGVfaWQpKTsKKwogICAgICAgY2xlYW51cDoKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9GUkVFKHRhYmxlX3B0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jCmluZGV4IDEwNmRjNzIuLjM0ZWVjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkgKiB0aGF0IHRoZSBldmVudCBpcyBjcmVhdGVkIGluIGFuIHVuc2lnbmFsbGVkIHN0YXRlCiAJICovCiAJc3RhdHVzID0gYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlKEFDUElfTk9fVU5JVF9MSU1JVCwgMCwKLQkJCQkJICAmb2JqX2Rlc2MtPmV2ZW50LnNlbWFwaG9yZSk7CisJCQkJCSAgJm9ial9kZXNjLT5ldmVudC5vc19zZW1hcGhvcmUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtMjI2LDEyICsyMjYsOSBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JLyoKLQkgKiBDcmVhdGUgdGhlIGFjdHVhbCBPUyBzZW1hcGhvcmUuCi0JICogT25lIHVuaXQgbWF4IHRvIG1ha2UgaXQgYSBtdXRleCwgd2l0aCBvbmUgaW5pdGlhbCB1bml0IHRvIGFsbG93Ci0JICogdGhlIG11dGV4IHRvIGJlIGFjcXVpcmVkLgotCSAqLwotCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX3NlbWFwaG9yZSgxLCAxLCAmb2JqX2Rlc2MtPm11dGV4LnNlbWFwaG9yZSk7CisJLyogQ3JlYXRlIHRoZSBhY3R1YWwgT1MgTXV0ZXggKi8KKworCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX211dGV4KCZvYmpfZGVzYy0+bXV0ZXgub3NfbXV0ZXgpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtNTY1LDcgKzU2Miw3IEBACiAJb2JqX2Rlc2MtPm1ldGhvZC5hbWxfbGVuZ3RoID0gYW1sX2xlbmd0aDsKIAogCS8qCi0JICogRGlzYXNzZW1ibGUgdGhlIG1ldGhvZCBmbGFncy4gIFNwbGl0IG9mZiB0aGUgQXJnIENvdW50CisJICogRGlzYXNzZW1ibGUgdGhlIG1ldGhvZCBmbGFncy4gU3BsaXQgb2ZmIHRoZSBBcmcgQ291bnQKIAkgKiBmb3IgZWZmaWNpZW5jeQogCSAqLwogCW1ldGhvZF9mbGFncyA9ICh1OCkgb3BlcmFuZFsxXS0+aW50ZWdlci52YWx1ZTsKQEAgLTU3NiwyMSArNTczLDE5IEBACiAJICAgICh1OCkgKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfQVJHX0NPVU5UKTsKIAogCS8qCi0JICogR2V0IHRoZSBjb25jdXJyZW5jeSBjb3VudC4gIElmIHJlcXVpcmVkLCBhIHNlbWFwaG9yZSB3aWxsIGJlCisJICogR2V0IHRoZSBzeW5jX2xldmVsLiBJZiBtZXRob2QgaXMgc2VyaWFsaXplZCwgYSBtdXRleCB3aWxsIGJlCiAJICogY3JlYXRlZCBmb3IgdGhpcyBtZXRob2Qgd2hlbiBpdCBpcyBwYXJzZWQuCiAJICovCiAJaWYgKGFjcGlfZ2JsX2FsbF9tZXRob2RzX3NlcmlhbGl6ZWQpIHsKLQkJb2JqX2Rlc2MtPm1ldGhvZC5jb25jdXJyZW5jeSA9IDE7CisJCW9ial9kZXNjLT5tZXRob2Quc3luY19sZXZlbCA9IDA7CiAJCW9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzIHw9IEFNTF9NRVRIT0RfU0VSSUFMSVpFRDsKIAl9IGVsc2UgaWYgKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCkgewogCQkvKgotCQkgKiBBQ1BJIDEuMDogQ29uY3VycmVuY3kgPSAxCi0JCSAqIEFDUEkgMi4wOiBDb25jdXJyZW5jeSA9IChzeW5jX2xldmVsIChpbiBtZXRob2QgZGVjbGFyYXRpb24pICsgMSkKKwkJICogQUNQSSAxLjA6IHN5bmNfbGV2ZWwgPSAwCisJCSAqIEFDUEkgMi4wOiBzeW5jX2xldmVsID0gc3luY19sZXZlbCBpbiBtZXRob2QgZGVjbGFyYXRpb24KIAkJICovCi0JCW9ial9kZXNjLT5tZXRob2QuY29uY3VycmVuY3kgPSAodTgpCi0JCSAgICAoKChtZXRob2RfZmxhZ3MgJiBBTUxfTUVUSE9EX1NZTkNIX0xFVkVMKSA+PiA0KSArIDEpOwotCX0gZWxzZSB7Ci0JCW9ial9kZXNjLT5tZXRob2QuY29uY3VycmVuY3kgPSBBQ1BJX0lORklOSVRFX0NPTkNVUlJFTkNZOworCQlvYmpfZGVzYy0+bWV0aG9kLnN5bmNfbGV2ZWwgPSAodTgpCisJCSAgICAoKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU1lOQ0hfTEVWRUwpID4+IDQpOwogCX0KIAogCS8qIEF0dGFjaCB0aGUgbmV3IG9iamVjdCB0byB0aGUgbWV0aG9kIE5vZGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYwppbmRleCA3Yjk3MThlLi4yNDUwOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jCkBAIC0xMTgsMTQgKzExOCwxNCBAQAogCiBzdGF0aWMgc3RydWN0IGFjcGlfZXhkdW1wX2luZm8gYWNwaV9leF9kdW1wX2V2ZW50WzJdID0gewogCXtBQ1BJX0VYRF9JTklULCBBQ1BJX0VYRF9UQUJMRV9TSVpFKGFjcGlfZXhfZHVtcF9ldmVudCksIE5VTEx9LAotCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQoZXZlbnQuc2VtYXBob3JlKSwgIlNlbWFwaG9yZSJ9CisJe0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChldmVudC5vc19zZW1hcGhvcmUpLCAiT3NTZW1hcGhvcmUifQogfTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvIGFjcGlfZXhfZHVtcF9tZXRob2RbOF0gPSB7CiAJe0FDUElfRVhEX0lOSVQsIEFDUElfRVhEX1RBQkxFX1NJWkUoYWNwaV9leF9kdW1wX21ldGhvZCksIE5VTEx9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5wYXJhbV9jb3VudCksICJQYXJhbUNvdW50In0sCi0Je0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQobWV0aG9kLmNvbmN1cnJlbmN5KSwgIkNvbmN1cnJlbmN5In0sCi0Je0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChtZXRob2Quc2VtYXBob3JlKSwgIlNlbWFwaG9yZSJ9LAorCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5zeW5jX2xldmVsKSwgIlN5bmMgTGV2ZWwifSwKKwl7QUNQSV9FWERfUE9JTlRFUiwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5tdXRleCksICJNdXRleCJ9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5vd25lcl9pZCksICJPd25lciBJZCJ9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC50aHJlYWRfY291bnQpLCAiVGhyZWFkIENvdW50In0sCiAJe0FDUElfRVhEX1VJTlQzMiwgQUNQSV9FWERfT0ZGU0VUKG1ldGhvZC5hbWxfbGVuZ3RoKSwgIkFtbCBMZW5ndGgifSwKQEAgLTEzOCw3ICsxMzgsNyBAQAogCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQobXV0ZXgub3duZXJfdGhyZWFkKSwgIk93bmVyIFRocmVhZCJ9LAogCXtBQ1BJX0VYRF9VSU5UMTYsIEFDUElfRVhEX09GRlNFVChtdXRleC5hY3F1aXNpdGlvbl9kZXB0aCksCiAJICJBY3F1aXJlIERlcHRoIn0sCi0Je0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChtdXRleC5zZW1hcGhvcmUpLCAiU2VtYXBob3JlIn0KKwl7QUNQSV9FWERfUE9JTlRFUiwgQUNQSV9FWERfT0ZGU0VUKG11dGV4Lm9zX211dGV4KSwgIk9zTXV0ZXgifQogfTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2V4ZHVtcF9pbmZvIGFjcGlfZXhfZHVtcF9yZWdpb25bN10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmbGRpby5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZmxkaW8uYwppbmRleCAwNTEwNTNmLi40MGYwYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGZsZGlvLmMKQEAgLTcyNywxMSArNzI3LDIzIEBACiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCi0JCS8qIE1lcmdlIHdpdGggcHJldmlvdXMgZGF0dW0gaWYgbmVjZXNzYXJ5ICovCi0KLQkJbWVyZ2VkX2RhdHVtIHw9IHJhd19kYXR1bSA8PAotCQkgICAgKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCAtCi0JCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KTsKKwkJLyoKKwkJICogTWVyZ2Ugd2l0aCBwcmV2aW91cyBkYXR1bSBpZiBuZWNlc3NhcnkuCisJCSAqCisJCSAqIE5vdGU6IEJlZm9yZSB0aGUgc2hpZnQsIGNoZWNrIGlmIHRoZSBzaGlmdCB2YWx1ZSB3aWxsIGJlIGxhcmdlciB0aGFuCisJCSAqIHRoZSBpbnRlZ2VyIHNpemUuIElmIHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KKwkJICogVGhpcyBhdm9pZHMgdGhlIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGJldHdlZW4gZGlmZmVyZW50IGNvbXBpbGVycworCQkgKiBjb25jZXJuaW5nIHNoaWZ0IHZhbHVlcyBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0IGRhdGEgd2lkdGguCisJCSAqLworCQlpZiAoKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCAtCisJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KSA8CisJCSAgICBBQ1BJX0lOVEVHRVJfQklUX1NJWkUpIHsKKwkJCW1lcmdlZF9kYXR1bSB8PQorCQkJICAgIHJhd19kYXR1bSA8PCAob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC4KKwkJCQkJICBhY2Nlc3NfYml0X3dpZHRoIC0KKwkJCQkJICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLgorCQkJCQkgIHN0YXJ0X2ZpZWxkX2JpdF9vZmZzZXQpOworCQl9CiAKIAkJaWYgKGkgPT0gZGF0dW1fY291bnQpIHsKIAkJCWJyZWFrOwpAQCAtODA4LDEzICs4MjAsMjMgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JVRkZFUl9PVkVSRkxPVyk7CiAJfQogCi0JLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGRhdHVtcyAoYWNjZXNzIHdpZHRoIGRhdGEgaXRlbXMpICovCisJLyoKKwkgKiBDcmVhdGUgdGhlIGJpdG1hc2tzIHVzZWQgZm9yIGJpdCBpbnNlcnRpb24uCisJICogTm90ZTogVGhpcyBpZi9lbHNlIGlzIHVzZWQgdG8gYnlwYXNzIGNvbXBpbGVyIGRpZmZlcmVuY2VzIHdpdGggdGhlCisJICogc2hpZnQgb3BlcmF0b3IKKwkgKi8KKwlpZiAob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYml0X3dpZHRoID09IEFDUElfSU5URUdFUl9CSVRfU0laRSkgeworCQl3aWR0aF9tYXNrID0gQUNQSV9JTlRFR0VSX01BWDsKKwl9IGVsc2UgeworCQl3aWR0aF9tYXNrID0KKwkJICAgIEFDUElfTUFTS19CSVRTX0FCT1ZFKG9ial9kZXNjLT5jb21tb25fZmllbGQuCisJCQkJCSBhY2Nlc3NfYml0X3dpZHRoKTsKKwl9CiAKLQl3aWR0aF9tYXNrID0KLQkgICAgQUNQSV9NQVNLX0JJVFNfQUJPVkUob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYml0X3dpZHRoKTsKLQltYXNrID0KLQkgICAgd2lkdGhfbWFzayAmIEFDUElfTUFTS19CSVRTX0JFTE9XKG9ial9kZXNjLT5jb21tb25fZmllbGQuCi0JCQkJCSAgICAgIHN0YXJ0X2ZpZWxkX2JpdF9vZmZzZXQpOworCW1hc2sgPSB3aWR0aF9tYXNrICYKKwkgICAgQUNQSV9NQVNLX0JJVFNfQkVMT1cob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KTsKKworCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBkYXR1bXMgKGFjY2VzcyB3aWR0aCBkYXRhIGl0ZW1zKSAqLwogCiAJZGF0dW1fY291bnQgPSBBQ1BJX1JPVU5EX1VQX1RPKG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCwKIAkJCQkgICAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5hY2Nlc3NfYml0X3dpZHRoKTsKQEAgLTg0OCwxMiArODcwLDI5IEBACiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQogCi0JCS8qIFN0YXJ0IG5ldyBvdXRwdXQgZGF0dW0gYnkgbWVyZ2luZyB3aXRoIHByZXZpb3VzIGlucHV0IGRhdHVtICovCi0KIAkJZmllbGRfb2Zmc2V0ICs9IG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2J5dGVfd2lkdGg7Ci0JCW1lcmdlZF9kYXR1bSA9IHJhd19kYXR1bSA+PgotCQkgICAgKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCAtCi0JCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KTsKKworCQkvKgorCQkgKiBTdGFydCBuZXcgb3V0cHV0IGRhdHVtIGJ5IG1lcmdpbmcgd2l0aCBwcmV2aW91cyBpbnB1dCBkYXR1bQorCQkgKiBpZiBuZWNlc3NhcnkuCisJCSAqCisJCSAqIE5vdGU6IEJlZm9yZSB0aGUgc2hpZnQsIGNoZWNrIGlmIHRoZSBzaGlmdCB2YWx1ZSB3aWxsIGJlIGxhcmdlciB0aGFuCisJCSAqIHRoZSBpbnRlZ2VyIHNpemUuIElmIHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KKwkJICogVGhpcyBhdm9pZHMgdGhlIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGJldHdlZW4gZGlmZmVyZW50IGNvbXBpbGVycworCQkgKiBjb25jZXJuaW5nIHNoaWZ0IHZhbHVlcyBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0IGRhdGEgd2lkdGguCisJCSAqLworCQlpZiAoKG9ial9kZXNjLT5jb21tb25fZmllbGQuYWNjZXNzX2JpdF93aWR0aCAtCisJCSAgICAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5zdGFydF9maWVsZF9iaXRfb2Zmc2V0KSA8CisJCSAgICBBQ1BJX0lOVEVHRVJfQklUX1NJWkUpIHsKKwkJCW1lcmdlZF9kYXR1bSA9CisJCQkgICAgcmF3X2RhdHVtID4+IChvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLgorCQkJCQkgIGFjY2Vzc19iaXRfd2lkdGggLQorCQkJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCisJCQkJCSAgc3RhcnRfZmllbGRfYml0X29mZnNldCk7CisJCX0gZWxzZSB7CisJCQltZXJnZWRfZGF0dW0gPSAwOworCQl9CisKIAkJbWFzayA9IHdpZHRoX21hc2s7CiAKIAkJaWYgKGkgPT0gZGF0dW1fY291bnQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jCmluZGV4IDkzMDk4ZDYuLmQ4YWMyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bXV0ZXguYwpAQCAtMTYxLDEyICsxNjEsMTMgQEAKIAogCS8qCiAJICogQ3VycmVudCBTeW5jIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzeW5jIGxldmVsIG9mIHRoZQotCSAqIG11dGV4LiAgVGhpcyBtZWNoYW5pc20gcHJvdmlkZXMgc29tZSBkZWFkbG9jayBwcmV2ZW50aW9uCisJICogbXV0ZXguIFRoaXMgbWVjaGFuaXNtIHByb3ZpZGVzIHNvbWUgZGVhZGxvY2sgcHJldmVudGlvbgogCSAqLwogCWlmICh3YWxrX3N0YXRlLT50aHJlYWQtPmN1cnJlbnRfc3luY19sZXZlbCA+IG9ial9kZXNjLT5tdXRleC5zeW5jX2xldmVsKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIkNhbm5vdCBhY3F1aXJlIE11dGV4IFslNC40c10sIGluY29ycmVjdCBTeW5jTGV2ZWwiLAotCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfZGVzYy0+bXV0ZXgubm9kZSkpKTsKKwkJCSAgICAiQ2Fubm90IGFjcXVpcmUgTXV0ZXggWyU0LjRzXSwgY3VycmVudCBTeW5jTGV2ZWwgaXMgdG9vIGxhcmdlICglZCkiLAorCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfZGVzYy0+bXV0ZXgubm9kZSksCisJCQkgICAgd2Fsa19zdGF0ZS0+dGhyZWFkLT5jdXJyZW50X3N5bmNfbGV2ZWwpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9NVVRFWF9PUkRFUik7CiAJfQogCkBAIC0xNzgsOCArMTc5LDcgQEAKIAogCQlpZiAoKG9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQtPnRocmVhZF9pZCA9PQogCQkgICAgIHdhbGtfc3RhdGUtPnRocmVhZC0+dGhyZWFkX2lkKSB8fAotCQkgICAgKG9ial9kZXNjLT5tdXRleC5zZW1hcGhvcmUgPT0KLQkJICAgICBhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmUpKSB7CisJCSAgICAob2JqX2Rlc2MtPm11dGV4Lm9zX211dGV4ID09IEFDUElfR0xPQkFMX0xPQ0spKSB7CiAJCQkvKgogCQkJICogVGhlIG11dGV4IGlzIGFscmVhZHkgb3duZWQgYnkgdGhpcyB0aHJlYWQsCiAJCQkgKiBqdXN0IGluY3JlbWVudCB0aGUgYWNxdWlzaXRpb24gZGVwdGgKQEAgLTI2NCw3ICsyNjQsNyBAQAogCSAqLwogCWlmICgob2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZC0+dGhyZWFkX2lkICE9CiAJICAgICB3YWxrX3N0YXRlLT50aHJlYWQtPnRocmVhZF9pZCkKLQkgICAgJiYgKG9ial9kZXNjLT5tdXRleC5zZW1hcGhvcmUgIT0gYWNwaV9nYmxfZ2xvYmFsX2xvY2tfc2VtYXBob3JlKSkgeworCSAgICAmJiAob2JqX2Rlc2MtPm11dGV4Lm9zX211dGV4ICE9IEFDUElfR0xPQkFMX0xPQ0spKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIlRocmVhZCAlWCBjYW5ub3QgcmVsZWFzZSBNdXRleCBbJTQuNHNdIGFjcXVpcmVkIGJ5IHRocmVhZCAlWCIsCiAJCQkgICAgd2Fsa19zdGF0ZS0+dGhyZWFkLT50aHJlYWRfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN5c3RlbS5jCmluZGV4IDUyYmVlZTMuLjZiNWQxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN5c3RlbS5jCkBAIC02MywxNCArNjMsMTQgQEAKICAqICAgICAgICAgICAgICBpbnRlcnByZXRlciBpcyByZWxlYXNlZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUoYWNwaV9oYW5kbGUgc2VtYXBob3JlLCB1MTYgdGltZW91dCkKK2FjcGlfc3RhdHVzIGFjcGlfZXhfc3lzdGVtX3dhaXRfc2VtYXBob3JlKGFjcGlfc2VtYXBob3JlIHNlbWFwaG9yZSwgdTE2IHRpbWVvdXQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfc3RhdHVzIHN0YXR1czI7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3N5c3RlbV93YWl0X3NlbWFwaG9yZSk7CiAKLQlzdGF0dXMgPSBhY3BpX29zX3dhaXRfc2VtYXBob3JlKHNlbWFwaG9yZSwgMSwgMCk7CisJc3RhdHVzID0gYWNwaV9vc193YWl0X3NlbWFwaG9yZShzZW1hcGhvcmUsIDEsIEFDUElfRE9fTk9UX1dBSVQpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0xMDMsNiArMTAzLDU5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfZXhfc3lzdGVtX3dhaXRfbXV0ZXgKKyAqCisgKiBQQVJBTUVURVJTOiAgTXV0ZXggICAgICAgICAgIC0gTXV0ZXggdG8gd2FpdCBvbgorICogICAgICAgICAgICAgIFRpbWVvdXQgICAgICAgICAtIE1heCB0aW1lIHRvIHdhaXQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IEltcGxlbWVudHMgYSBzZW1hcGhvcmUgd2FpdCB3aXRoIGEgY2hlY2sgdG8gc2VlIGlmIHRoZQorICogICAgICAgICAgICAgIHNlbWFwaG9yZSBpcyBhdmFpbGFibGUgaW1tZWRpYXRlbHkuICBJZiBpdCBpcyBub3QsIHRoZQorICogICAgICAgICAgICAgIGludGVycHJldGVyIGlzIHJlbGVhc2VkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzIGFjcGlfZXhfc3lzdGVtX3dhaXRfbXV0ZXgoYWNwaV9tdXRleCBtdXRleCwgdTE2IHRpbWVvdXQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfc3RhdHVzIHN0YXR1czI7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3N5c3RlbV93YWl0X211dGV4KTsKKworCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChtdXRleCwgQUNQSV9ET19OT1RfV0FJVCk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCWlmIChzdGF0dXMgPT0gQUVfVElNRSkgeworCisJCS8qIFdlIG11c3Qgd2FpdCwgc28gdW5sb2NrIHRoZSBpbnRlcnByZXRlciAqLworCisJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOworCisJCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChtdXRleCwgdGltZW91dCk7CisKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAorCQkJCSAgIioqKiBUaHJlYWQgYXdha2UgYWZ0ZXIgYmxvY2tpbmcsICVzXG4iLAorCQkJCSAgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKKworCQkvKiBSZWFjcXVpcmUgdGhlIGludGVycHJldGVyICovCisKKwkJc3RhdHVzMiA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMyKSkgeworCisJCQkvKiBSZXBvcnQgZmF0YWwgZXJyb3IsIGNvdWxkIG5vdCBhY3F1aXJlIGludGVycHJldGVyICovCisKKwkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMyKTsKKwkJfQorCX0KKworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V4X3N5c3RlbV9kb19zdGFsbAogICoKICAqIFBBUkFNRVRFUlM6ICBob3dfbG9uZyAgICAgICAgLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gc3RhbGwsCkBAIC0xNzYsNyArMjI5LDcgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9leF9zeXN0ZW1fYWNxdWlyZV9tdXRleAogICoKLSAqIFBBUkFNRVRFUlM6ICB0aW1lX2Rlc2MgICAgICAgLSBUaGUgJ3RpbWUgdG8gZGVsYXknIG9iamVjdCBkZXNjcmlwdG9yCisgKiBQQVJBTUVURVJTOiAgdGltZV9kZXNjICAgICAgIC0gTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtdXRleAogICogICAgICAgICAgICAgIG9ial9kZXNjICAgICAgICAtIFRoZSBvYmplY3QgZGVzY3JpcHRvciBmb3IgdGhpcyBvcAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKQEAgLTIwMSwxNCArMjU0LDE0IEBACiAKIAkvKiBTdXBwb3J0IGZvciB0aGUgX0dMXyBNdXRleCBvYmplY3QgLS0gZ28gZ2V0IHRoZSBnbG9iYWwgbG9jayAqLwogCi0JaWYgKG9ial9kZXNjLT5tdXRleC5zZW1hcGhvcmUgPT0gYWNwaV9nYmxfZ2xvYmFsX2xvY2tfc2VtYXBob3JlKSB7CisJaWYgKG9ial9kZXNjLT5tdXRleC5vc19tdXRleCA9PSBBQ1BJX0dMT0JBTF9MT0NLKSB7CiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX2V2X2FjcXVpcmVfZ2xvYmFsX2xvY2soKHUxNikgdGltZV9kZXNjLT5pbnRlZ2VyLnZhbHVlKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9leF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUob2JqX2Rlc2MtPm11dGV4LnNlbWFwaG9yZSwKLQkJCQkJICAgICAgICh1MTYpIHRpbWVfZGVzYy0+aW50ZWdlci52YWx1ZSk7CisJc3RhdHVzID0gYWNwaV9leF9zeXN0ZW1fd2FpdF9tdXRleChvYmpfZGVzYy0+bXV0ZXgub3NfbXV0ZXgsCisJCQkJCSAgICh1MTYpIHRpbWVfZGVzYy0+aW50ZWdlci52YWx1ZSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTIzOSwxMyArMjkyLDEzIEBACiAKIAkvKiBTdXBwb3J0IGZvciB0aGUgX0dMXyBNdXRleCBvYmplY3QgLS0gcmVsZWFzZSB0aGUgZ2xvYmFsIGxvY2sgKi8KIAotCWlmIChvYmpfZGVzYy0+bXV0ZXguc2VtYXBob3JlID09IGFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZSkgeworCWlmIChvYmpfZGVzYy0+bXV0ZXgub3NfbXV0ZXggPT0gQUNQSV9HTE9CQUxfTE9DSykgewogCQlzdGF0dXMgPSBhY3BpX2V2X3JlbGVhc2VfZ2xvYmFsX2xvY2soKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKG9ial9kZXNjLT5tdXRleC5zZW1hcGhvcmUsIDEpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCWFjcGlfb3NfcmVsZWFzZV9tdXRleChvYmpfZGVzYy0+bXV0ZXgub3NfbXV0ZXgpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjgsNyArMzIxLDggQEAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3N5c3RlbV9zaWduYWxfZXZlbnQpOwogCiAJaWYgKG9ial9kZXNjKSB7Ci0JCXN0YXR1cyA9IGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZShvYmpfZGVzYy0+ZXZlbnQuc2VtYXBob3JlLCAxKTsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZShvYmpfZGVzYy0+ZXZlbnQub3Nfc2VtYXBob3JlLCAxKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTI5OSw3ICszNTMsNyBAQAogCiAJaWYgKG9ial9kZXNjKSB7CiAJCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V4X3N5c3RlbV93YWl0X3NlbWFwaG9yZShvYmpfZGVzYy0+ZXZlbnQuc2VtYXBob3JlLAorCQkgICAgYWNwaV9leF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUob2JqX2Rlc2MtPmV2ZW50Lm9zX3NlbWFwaG9yZSwKIAkJCQkJCSAgKHUxNikgdGltZV9kZXNjLT5pbnRlZ2VyLgogCQkJCQkJICB2YWx1ZSk7CiAJfQpAQCAtMzIyLDcgKzM3Niw3IEBACiBhY3BpX3N0YXR1cyBhY3BpX2V4X3N5c3RlbV9yZXNldF9ldmVudCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYykKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQl2b2lkICp0ZW1wX3NlbWFwaG9yZTsKKwlhY3BpX3NlbWFwaG9yZSB0ZW1wX3NlbWFwaG9yZTsKIAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIApAQCAtMzMzLDggKzM4Nyw4IEBACiAJc3RhdHVzID0KIAkgICAgYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlKEFDUElfTk9fVU5JVF9MSU1JVCwgMCwgJnRlbXBfc2VtYXBob3JlKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJKHZvaWQpYWNwaV9vc19kZWxldGVfc2VtYXBob3JlKG9ial9kZXNjLT5ldmVudC5zZW1hcGhvcmUpOwotCQlvYmpfZGVzYy0+ZXZlbnQuc2VtYXBob3JlID0gdGVtcF9zZW1hcGhvcmU7CisJCSh2b2lkKWFjcGlfb3NfZGVsZXRlX3NlbWFwaG9yZShvYmpfZGVzYy0+ZXZlbnQub3Nfc2VtYXBob3JlKTsKKwkJb2JqX2Rlc2MtPmV2ZW50Lm9zX3NlbWFwaG9yZSA9IHRlbXBfc2VtYXBob3JlOwogCX0KIAogCXJldHVybiAoc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9mYW4uYyBiL2RyaXZlcnMvYWNwaS9mYW4uYwppbmRleCAxY2QyNTc4Li4zOGFjYzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZmFuLmMKKysrIGIvZHJpdmVycy9hY3BpL2Zhbi5jCkBAIC03OCw3ICs3OCw2IEBACiAJc3RydWN0IGFjcGlfZmFuICpmYW4gPSBzZXEtPnByaXZhdGU7CiAJaW50IHN0YXRlID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZmFuX3JlYWRfc3RhdGUiKTsKIAogCWlmIChmYW4pIHsKIAkJaWYgKGFjcGlfYnVzX2dldF9wb3dlcihmYW4tPmhhbmRsZSwgJnN0YXRlKSkKQEAgLTg3LDcgKzg2LDcgQEAKIAkJCXNlcV9wcmludGYoc2VxLCAic3RhdHVzOiAgICAgICAgICAgICAgICAgICVzXG4iLAogCQkJCSAgICFzdGF0ZSA/ICJvbiIgOiAib2ZmIik7CiAJfQotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2Zhbl9zdGF0ZV9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTA0LDIyICsxMDMsMjEgQEAKIAlzdHJ1Y3QgYWNwaV9mYW4gKmZhbiA9IChzdHJ1Y3QgYWNwaV9mYW4gKiltLT5wcml2YXRlOwogCWNoYXIgc3RhdGVfc3RyaW5nWzEyXSA9IHsgJ1wwJyB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9mYW5fd3JpdGVfc3RhdGUiKTsKIAogCWlmICghZmFuIHx8IChjb3VudCA+IHNpemVvZihzdGF0ZV9zdHJpbmcpIC0gMSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RhdGVfc3RyaW5nLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCXN0YXRlX3N0cmluZ1tjb3VudF0gPSAnXDAnOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfc2V0X3Bvd2VyKGZhbi0+aGFuZGxlLAogCQkJCSAgICBzaW1wbGVfc3RydG91bChzdGF0ZV9zdHJpbmcsIE5VTEwsIDApKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAotCXJldHVybl9WQUxVRShjb3VudCk7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX2Zhbl9zdGF0ZV9vcHMgPSB7CkBAIC0xMzUsMTYgKzEzMywxNSBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9mYW5fYWRkX2ZzIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpIHsKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBwcm9jX21rZGlyKGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAogCQkJCQkJICAgICBhY3BpX2Zhbl9kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQotCQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIApAQCAtMTUzLDIxICsxNTAsMTggQEAKIAkJCQkgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkgIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJyVzJyBmcyBlbnRyeVxuIiwKLQkJCQkgIEFDUElfRkFOX0ZJTEVfU1RBVEUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9mYW5fc3RhdGVfb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZmFuX3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Zhbl9yZW1vdmVfZnMiKTsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0ZBTl9GSUxFX1NUQVRFLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CkBAIC0xNzUsNyArMTY5LDcgQEAKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBOVUxMOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4OCwxNCArMTgyLDEzIEBACiAJc3RydWN0IGFjcGlfZmFuICpmYW4gPSBOVUxMOwogCWludCBzdGF0ZSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Zhbl9hZGQiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJZmFuID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZmFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmYW4pCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGZhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2ZhbikpOwogCiAJZmFuLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTIwNSw4ICsxOTgsNyBAQAogCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKGZhbi0+aGFuZGxlLCAmc3RhdGUpOwogCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciByZWFkaW5nIHBvd2VyIHN0YXRlXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlJlYWRpbmcgcG93ZXIgc3RhdGVcbiIpOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTIyNiwxNyArMjE4LDE2IEBACiAJaWYgKHJlc3VsdCkKIAkJa2ZyZWUoZmFuKTsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9mYW5fcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgYWNwaV9mYW4gKmZhbiA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Zhbl9yZW1vdmUiKTsKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmYW4gPSAoc3RydWN0IGFjcGlfZmFuICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCkBAIC0yNDQsNyArMjM1LDcgQEAKIAogCWtmcmVlKGZhbik7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9mYW5fc3VzcGVuZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKQpAQCAtMjgzLDMxICsyNzQsMjkgQEAKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZmFuX2luaXQiKTsKIAogCWFjcGlfZmFuX2RpciA9IHByb2NfbWtkaXIoQUNQSV9GQU5fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9mYW5fZGlyKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCWFjcGlfZmFuX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9mYW5fZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0ZBTl9DTEFTUywgYWNwaV9yb290X2Rpcik7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9mYW5fZXhpdCh2b2lkKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZmFuX2V4aXQiKTsKIAogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Zhbl9kcml2ZXIpOwogCiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9GQU5fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBtb2R1bGVfaW5pdChhY3BpX2Zhbl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3JlZ3MuYyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3JlZ3MuYwppbmRleCBhZTE0MmRlLi4zMTQzZjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMKKysrIGIvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3cmVncy5jCkBAIC0xNzIsOSArMTcyLDkgQEAKIAl9CiAKIAkvKgotCSAqIFRoZSBwYWNrYWdlIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuICBOT1RFIChNYXJjaCAyMDA1KTogVGhpcworCSAqIFRoZSBwYWNrYWdlIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIE5PVEUgKE1hcmNoIDIwMDUpOiBUaGlzCiAJICogZ29lcyBhZ2FpbnN0IHRoZSBjdXJyZW50IEFDUEkgc3BlYyB3aGljaCBkZWZpbmVzIHRoaXMgb2JqZWN0IGFzIGEKLQkgKiBwYWNrYWdlIHdpdGggb25lIGVuY29kZWQgRFdPUkQgZWxlbWVudC4gIEhvd2V2ZXIsIGV4aXN0aW5nIHByYWN0aWNlCisJICogcGFja2FnZSB3aXRoIG9uZSBlbmNvZGVkIERXT1JEIGVsZW1lbnQuIEhvd2V2ZXIsIGV4aXN0aW5nIHByYWN0aWNlCiAJICogYnkgQklPUyB2ZW5kb3JzIHNlZW1zIHRvIGJlIHRvIGhhdmUgMiBvciBtb3JlIGVsZW1lbnRzLCBhdCBsZWFzdAogCSAqIG9uZSBwZXIgc2xlZXAgdHlwZSAoQS9CKS4KIAkgKi8KQEAgLTI1NSw3ICsyNTUsNyBAQAogICogICAgICAgICAgICAgIHJldHVybl92YWx1ZSAgICAtIFZhbHVlIHRoYXQgd2FzIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgLSBMb2NrIHRoZSBoYXJkd2FyZSBvciBub3QKICAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCB0aGUgdmFsdWUgcmVhZCBmcm9tIHNwZWNpZmllZCBSZWdpc3Rlci4gIFZhbHVlCisgKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCB0aGUgdmFsdWUgcmVhZCBmcm9tIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKICAqICAgICAgICAgICAgICByZXR1cm5lZCBpcyBub3JtYWxpemVkIHRvIGJpdDAgKGlzIHNoaWZ0ZWQgYWxsIHRoZSB3YXkgcmlnaHQpCiAgKgogICogREVTQ1JJUFRJT046IEFDUEkgYml0X3JlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uCkBAIC0zNjEsOCArMzYxLDggQEAKIAljYXNlIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUzoKIAogCQkvKgotCQkgKiBTdGF0dXMgUmVnaXN0ZXJzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgcmVzdC4gIENsZWFyIGJ5Ci0JCSAqIHdyaXRpbmcgMSwgYW5kIHdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LiAgU28sIHRoZSBvbmx5IHJlbGV2YW50CisJCSAqIFN0YXR1cyBSZWdpc3RlcnMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0LiBDbGVhciBieQorCQkgKiB3cml0aW5nIDEsIGFuZCB3cml0aW5nIDAgaGFzIG5vIGVmZmVjdC4gU28sIHRoZSBvbmx5IHJlbGV2YW50CiAJCSAqIGluZm9ybWF0aW9uIGlzIHRoZSBzaW5nbGUgYml0IHdlJ3JlIGludGVyZXN0ZWQgaW4sIGFsbCBvdGhlcnMgc2hvdWxkCiAJCSAqIGJlIHdyaXR0ZW4gYXMgMCBzbyB0aGV5IHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQuCiAJCSAqLwpAQCAtNDY3LDE0ICs0NjcsMTMgQEAKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9od19yZWdpc3Rlcl9yZWFkCiAgKgotICogUEFSQU1FVEVSUzogIHVzZV9sb2NrICAgICAgICAgICAgLSBNdXRleCBodyBhY2Nlc3MKLSAqICAgICAgICAgICAgICByZWdpc3Rlcl9pZCAgICAgICAgIC0gcmVnaXN0ZXJfaUQgKyBPZmZzZXQKKyAqIFBBUkFNRVRFUlM6ICB1c2VfbG9jayAgICAgICAgICAgIC0gTG9jayBoYXJkd2FyZT8gVHJ1ZS9GYWxzZQorICogICAgICAgICAgICAgIHJlZ2lzdGVyX2lkICAgICAgICAgLSBBQ1BJIFJlZ2lzdGVyIElECiAgKiAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICAgICAgICAtIFdoZXJlIHRoZSByZWdpc3RlciB2YWx1ZSBpcyByZXR1cm5lZAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMgYW5kIHRoZSB2YWx1ZSByZWFkLgogICoKLSAqIERFU0NSSVBUSU9OOiBBY3BpIHJlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uICBSZWdpc3RlcnMgYXJlIHJlYWQgYXQgdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gb2Zmc2V0LgorICogREVTQ1JJUFRJT046IFJlYWQgZnJvbSB0aGUgc3BlY2lmaWVkIEFDUEkgcmVnaXN0ZXIKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYWNwaV9zdGF0dXMKQEAgLTU4MCwxNCArNTc5LDI2IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUKICAqCi0gKiBQQVJBTUVURVJTOiAgdXNlX2xvY2sgICAgICAgICAgICAtIE11dGV4IGh3IGFjY2VzcwotICogICAgICAgICAgICAgIHJlZ2lzdGVyX2lkICAgICAgICAgLSByZWdpc3Rlcl9pRCArIE9mZnNldAorICogUEFSQU1FVEVSUzogIHVzZV9sb2NrICAgICAgICAgICAgLSBMb2NrIGhhcmR3YXJlPyBUcnVlL0ZhbHNlCisgKiAgICAgICAgICAgICAgcmVnaXN0ZXJfaWQgICAgICAgICAtIEFDUEkgUmVnaXN0ZXIgSUQKICAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIC0gVGhlIHZhbHVlIHRvIHdyaXRlCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBBY3BpIHJlZ2lzdGVyIFdyaXRlIGZ1bmN0aW9uLiAgUmVnaXN0ZXJzIGFyZSB3cml0dGVuIGF0IHRoZQotICogICAgICAgICAgICAgIGdpdmVuIG9mZnNldC4KKyAqIERFU0NSSVBUSU9OOiBXcml0ZSB0byB0aGUgc3BlY2lmaWVkIEFDUEkgcmVnaXN0ZXIKKyAqCisgKiBOT1RFOiBJbiBhY2NvcmRhbmNlIHdpdGggdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiwgdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5CisgKiBwcmVzZXJ2ZXMgdGhlIHZhbHVlIG9mIHRoZSBmb2xsb3dpbmcgYml0cywgbWVhbmluZyB0aGF0IHRoZXNlIGJpdHMgY2Fubm90IGJlCisgKiBjaGFuZ2VkIHZpYSB0aGlzIGludGVyZmFjZToKKyAqCisgKiBQTTFfQ09OVFJPTFswXSA9IFNDSV9FTgorICogUE0xX0NPTlRST0xbOV0KKyAqIFBNMV9TVEFUVVNbMTFdCisgKgorICogQUNQSSBSZWZlcmVuY2VzOgorICogMSkgSGFyZHdhcmUgSWdub3JlZCBCaXRzOiBXaGVuIHNvZnR3YXJlIHdyaXRlcyB0byBhIHJlZ2lzdGVyIHdpdGggaWdub3JlZAorICogICAgICBiaXQgZmllbGRzLCBpdCBwcmVzZXJ2ZXMgdGhlIGlnbm9yZWQgYml0IGZpZWxkcworICogMikgU0NJX0VOOiBPU1BNIGFsd2F5cyBwcmVzZXJ2ZXMgdGhpcyBiaXQgcG9zaXRpb24KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC01OTUsNiArNjA2LDcgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9jcHVfZmxhZ3MgbG9ja19mbGFncyA9IDA7CisJdTMyIHJlYWRfdmFsdWU7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3JlZ2lzdGVyX3dyaXRlKTsKIApAQCAtNjA1LDYgKzYxNywyMiBAQAogCXN3aXRjaCAocmVnaXN0ZXJfaWQpIHsKIAljYXNlIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUzoJLyogMTYtYml0IGFjY2VzcyAqLwogCisJCS8qIFBlcmZvcm0gYSByZWFkIGZpcnN0IHRvIHByZXNlcnZlIGNlcnRhaW4gYml0cyAocGVyIEFDUEkgc3BlYykgKi8KKworCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCisJCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCisJCQkJCSAgICAgICAmcmVhZF92YWx1ZSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCX0KKworCQkvKiBJbnNlcnQgdGhlIGJpdHMgdG8gYmUgcHJlc2VydmVkICovCisKKwkJQUNQSV9JTlNFUlRfQklUUyh2YWx1ZSwgQUNQSV9QTTFfU1RBVFVTX1BSRVNFUlZFRF9CSVRTLAorCQkJCSByZWFkX3ZhbHVlKTsKKworCQkvKiBOb3cgd2UgY2FuIHdyaXRlIHRoZSBkYXRhICovCisKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfaHdfbG93X2xldmVsX3dyaXRlKDE2LCB2YWx1ZSwKIAkJCQkJICAgICZhY3BpX2dibF9GQURULT54cG0xYV9ldnRfYmxrKTsKQEAgLTYzNSw2ICs2NjMsMjUgQEAKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTDoJLyogMTYtYml0IGFjY2VzcyAqLwogCisJCS8qCisJCSAqIFBlcmZvcm0gYSByZWFkIGZpcnN0IHRvIHByZXNlcnZlIGNlcnRhaW4gYml0cyAocGVyIEFDUEkgc3BlYykKKwkJICoKKwkJICogTm90ZTogVGhpcyBpbmNsdWRlcyBTQ0lfRU4sIHdlIG5ldmVyIHdhbnQgdG8gY2hhbmdlIHRoaXMgYml0CisJCSAqLworCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCisJCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAorCQkJCQkgICAgICAgJnJlYWRfdmFsdWUpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQl9CisKKwkJLyogSW5zZXJ0IHRoZSBiaXRzIHRvIGJlIHByZXNlcnZlZCAqLworCisJCUFDUElfSU5TRVJUX0JJVFModmFsdWUsIEFDUElfUE0xX0NPTlRST0xfUFJFU0VSVkVEX0JJVFMsCisJCQkJIHJlYWRfdmFsdWUpOworCisJCS8qIE5vdyB3ZSBjYW4gd3JpdGUgdGhlIGRhdGEgKi8KKwogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9od19sb3dfbGV2ZWxfd3JpdGUoMTYsIHZhbHVlLAogCQkJCQkgICAgJmFjcGlfZ2JsX0ZBRFQtPnhwbTFhX2NudF9ibGspOwpAQCAtNzI2LDcgKzc3Myw3IEBACiAJCXJldHVybiAoQUVfT0spOwogCX0KIAotCS8qIEdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3MuICBIYW5kbGVzIHBvc3NpYmxlIGFsaWdubWVudCBpc3N1ZXMgKi8KKwkvKiBHZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBhZGRyZXNzLiBIYW5kbGVzIHBvc3NpYmxlIGFsaWdubWVudCBpc3N1ZXMgKi8KIAogCUFDUElfTU9WRV82NF9UT182NCgmYWRkcmVzcywgJnJlZy0+YWRkcmVzcyk7CiAJaWYgKCFhZGRyZXNzKSB7CkBAIC03OTgsNyArODQ1LDcgQEAKIAkJcmV0dXJuIChBRV9PSyk7CiAJfQogCi0JLyogR2V0IGEgbG9jYWwgY29weSBvZiB0aGUgYWRkcmVzcy4gIEhhbmRsZXMgcG9zc2libGUgYWxpZ25tZW50IGlzc3VlcyAqLworCS8qIEdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3MuIEhhbmRsZXMgcG9zc2libGUgYWxpZ25tZW50IGlzc3VlcyAqLwogCiAJQUNQSV9NT1ZFXzY0X1RPXzY0KCZhZGRyZXNzLCAmcmVnLT5hZGRyZXNzKTsKIAlpZiAoIWFkZHJlc3MpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ob3RrZXkuYyBiL2RyaXZlcnMvYWNwaS9ob3RrZXkuYwppbmRleCBjMjViMmI5Li5mZDgxYTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaG90a2V5LmMKKysrIGIvZHJpdmVycy9hY3BpL2hvdGtleS5jCkBAIC0yMzEsMTEgKzIzMSwxMCBAQAogCiBzdGF0aWMgaW50IGhvdGtleV9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaG90a2V5X2luZm9fc2VxX3Nob3ciKTsKIAogCXNlcV9wcmludGYoc2VxLCAiSG90a2V5IGdlbmVyaWMgZHJpdmVyIHZlcjogJXNcbiIsIEhPVEtFWV9BQ1BJX1ZFUlNJT04pOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGhvdGtleV9pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yNjYsNyArMjY1LDYgQEAKIAkgICAgKHN0cnVjdCBhY3BpX3BvbGxpbmdfaG90a2V5ICopc2VxLT5wcml2YXRlOwogCWNoYXIgKmJ1ZjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImhvdGtleV9wb2xsaW5nX3NlcV9zaG93Iik7CiAKIAlpZiAocG9sbF9ob3RrZXktPnBvbGxfcmVzdWx0KSB7CiAJCWJ1ZiA9IGZvcm1hdF9yZXN1bHQocG9sbF9ob3RrZXktPnBvbGxfcmVzdWx0KTsKQEAgLTI3NCw3ICsyNzIsNyBAQAogCQkJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1Zik7CiAJCWtmcmVlKGJ1Zik7CiAJfQotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBob3RrZXlfcG9sbGluZ19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMjkzLDcgKzI5MSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cmllczsKIAlpbnQgdmFsID0gLTE7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJob3RrZXlfZ2V0X2ludGVybmFsX2V2ZW50Iik7CiAKIAlsaXN0X2Zvcl9lYWNoKGVudHJpZXMsIGxpc3QtPmVudHJpZXMpIHsKIAkJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9CkBAIC0zMDUsNyArMzAyLDcgQEAKIAkJfQogCX0KIAotCXJldHVybl9WQUxVRSh2YWwpOworCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMTQsMTUgKzMxMSwxNCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAl1MzIgaW50ZXJuYWxfZXZlbnQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2hvdGtleV9ub3RpZnlfaGFuZGxlciIpOwogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCWludGVybmFsX2V2ZW50ID0gaG90a2V5X2dldF9pbnRlcm5hbF9ldmVudChldmVudCwgJmdsb2JhbF9ob3RrZXlfbGlzdCk7CiAJYWNwaV9idXNfZ2VuZXJhdGVfZXZlbnQoZGV2aWNlLCBpbnRlcm5hbF9ldmVudCwgMCk7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIC8qIE5lZWQgdG8gaW52ZW50IGF1dG9tYXRpY2FsbHkgaG90a2V5IGFkZCBtZXRob2QgKi8KQEAgLTM0Niw3ICszNDIsNiBAQAogCWNoYXIgcHJvY19uYW1lWzgwXTsKIAltb2RlX3QgbW9kZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImNyZWF0ZV9wb2xsaW5nX3Byb2MiKTsKIAltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVUdPOwogCiAJc3ByaW50Zihwcm9jX25hbWUsICIlZCIsIGRldmljZS0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtKTsKQEAgLTM1NiwxMCArMzUxLDcgQEAKIAlwcm9jID0gY3JlYXRlX3Byb2NfZW50cnkocHJvY19uYW1lLCBtb2RlLCBob3RrZXlfcHJvY19kaXIpOwogCiAJaWYgKCFwcm9jKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiSG90a2V5OiBVbmFibGUgdG8gY3JlYXRlICVzIGVudHJ5XG4iLAotCQkJCSAgZGV2aWNlLT5wb2xsX2hvdGtleS5wb2xsX21ldGhvZCkpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7CiAJCXByb2MtPnByb2NfZm9wcyA9ICZob3RrZXlfcG9sbGluZ19mb3BzOwogCQlwcm9jLT5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtMzY4LDcgKzM2MCw3IEBACiAJCXByb2MtPmdpZCA9IDA7CiAJCWRldmljZS0+cG9sbF9ob3RrZXkucHJvYyA9IHByb2M7CiAJfQotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBob3RrZXlfYWRkKHVuaW9uIGFjcGlfaG90a2V5ICpkZXZpY2UpCkBAIC0zNzYsNyArMzY4LDYgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJob3RrZXlfYWRkIik7CiAKIAlpZiAoZGV2aWNlLT5saW5rLmhvdGtleV90eXBlID09IEFDUElfSE9US0VZX0VWRU5UKSB7CiAJCWFjcGlfYnVzX2dldF9kZXZpY2UoZGV2aWNlLT5ldmVudF9ob3RrZXkuYnVzX2hhbmRsZSwgJmRldik7CkBAIC0zOTEsMTQgKzM4MiwxMyBAQAogCiAJbGlzdF9hZGRfdGFpbCgmZGV2aWNlLT5saW5rLmVudHJpZXMsIGdsb2JhbF9ob3RrZXlfbGlzdC5lbnRyaWVzKTsKIAotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgaG90a2V5X3JlbW92ZSh1bmlvbiBhY3BpX2hvdGtleSAqZGV2aWNlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXMsICpuZXh0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaG90a2V5X3JlbW92ZSIpOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJpZXMsIG5leHQsIGdsb2JhbF9ob3RrZXlfbGlzdC5lbnRyaWVzKSB7CiAJCXVuaW9uIGFjcGlfaG90a2V5ICprZXkgPQpAQCAtNDEyLDE0ICs0MDIsMTMgQEAKIAkJfQogCX0KIAlrZnJlZShkZXZpY2UpOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBob3RrZXlfdXBkYXRlKHVuaW9uIGFjcGlfaG90a2V5ICprZXkpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cmllczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImhvdGtleV91cGRhdGUiKTsKIAogCWxpc3RfZm9yX2VhY2goZW50cmllcywgZ2xvYmFsX2hvdGtleV9saXN0LmVudHJpZXMpIHsKIAkJdW5pb24gYWNwaV9ob3RrZXkgKnRtcCA9CkBAIC00NjEsMTkgKzQ1MCwxOCBAQAogCQkJCSAqLwogCQkJCWtmcmVlKGtleSk7CiAJCQl9Ci0JCQlyZXR1cm5fVkFMVUUoMCk7CisJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi0JcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2hvdGtleV9kZXZpY2UodW5pb24gYWNwaV9ob3RrZXkgKmtleSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImZyZWVfaG90a2V5X2RldmljZSIpOwogCiAJaWYgKGtleS0+bGluay5ob3RrZXlfdHlwZSA9PSBBQ1BJX0hPVEtFWV9FVkVOVCkgewogCQlhY3BpX2J1c19nZXRfZGV2aWNlKGtleS0+ZXZlbnRfaG90a2V5LmJ1c19oYW5kbGUsICZkZXYpOwpAQCAtNDkzLDcgKzQ4MSw3IEBACiAJCWZyZWVfcG9sbF9ob3RrZXlfYnVmZmVyKGtleSk7CiAJfQogCWtmcmVlKGtleSk7Ci0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2hvdGtleV9idWZmZXIodW5pb24gYWNwaV9ob3RrZXkgKmtleSkKQEAgLTUxNCw3ICs1MDIsNiBAQAogCWFjcGlfaGFuZGxlIHRtcF9oYW5kbGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJpbml0X2hvdGtleV9kZXZpY2UiKTsKIAogCWlmIChzdGRfbnVtIDwgMCB8fCBJU19QT0xMKHN0ZF9udW0pIHx8ICFrZXkpCiAJCWdvdG8gZG9fZmFpbDsKQEAgLTU0MSw5ICs1MjgsOSBAQAogCQkJCSBtZXRob2QsICZ0bXBfaGFuZGxlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCWdvdG8gZG9fZmFpbDsKLQlyZXR1cm5fVkFMVUUoQUVfT0spOworCXJldHVybiBBRV9PSzsKICAgICAgIGRvX2ZhaWw6Ci0JcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgaW50CkBAIC01NTUsNyArNTQyLDYgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlhY3BpX2hhbmRsZSB0bXBfaGFuZGxlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaW5pdF9wb2xsX2hvdGtleV9kZXZpY2UiKTsKIAogCWlmIChzdGRfbnVtIDwgMCB8fCBJU19FVkVOVChzdGRfbnVtKSB8fCAha2V5KQogCQlnb3RvIGRvX2ZhaWw7CkBAIC01OTAsMjIgKzU3NiwyMCBAQAogCSAgICAodW5pb24gYWNwaV9vYmplY3QgKilrbWFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIEdGUF9LRVJORUwpOwogCWlmICgha2V5LT5wb2xsX2hvdGtleS5wb2xsX3Jlc3VsdCkKIAkJZ290byBkb19mYWlsOwotCXJldHVybl9WQUxVRShBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogICAgICAgZG9fZmFpbDoKLQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgaG90a2V5X29wZW5fY29uZmlnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImhvdGtleV9vcGVuX2NvbmZpZyIpOwotCXJldHVybl9WQUxVRShzaW5nbGVfb3BlbgorCXJldHVybiAoc2luZ2xlX29wZW4KIAkJICAgICAoZmlsZSwgaG90a2V5X2NvbmZpZ19zZXFfc2hvdywgUERFKGlub2RlKS0+ZGF0YSkpOwogfQogCiBzdGF0aWMgaW50IGhvdGtleV9wb2xsX29wZW5fY29uZmlnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImhvdGtleV9wb2xsX29wZW5fY29uZmlnIik7Ci0JcmV0dXJuX1ZBTFVFKHNpbmdsZV9vcGVuCisJcmV0dXJuIChzaW5nbGVfb3BlbgogCQkgICAgIChmaWxlLCBob3RrZXlfcG9sbF9jb25maWdfc2VxX3Nob3csIFBERShpbm9kZSktPmRhdGEpKTsKIH0KIApAQCAtNjE4LDcgKzYwMiw2IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1cyA9IHsgQUNQSV9QQVRITkFNRV9NQVgsIGJ1c19uYW1lIH07CiAJc3RydWN0IGFjcGlfYnVmZmVyIGFjdCA9IHsgQUNQSV9QQVRITkFNRV9NQVgsIGFjdGlvbl9uYW1lIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCgiaG90a2V5X2NvbmZpZ19zZXFfc2hvdyIpKTsKIAogCWxpc3RfZm9yX2VhY2goZW50cmllcywgaG90a2V5X2xpc3QtPmVudHJpZXMpIHsKIAkJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9CkBAIC02MzYsNyArNjE5LDcgQEAKIAkJfQogCX0KIAlzZXFfcHV0cyhzZXEsICJcbiIpOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBob3RrZXlfcG9sbF9jb25maWdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKQEAgLTY0OCw3ICs2MzEsNiBAQAogCXN0cnVjdCBhY3BpX2J1ZmZlciBidXMgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBidXNfbmFtZSB9OwogCXN0cnVjdCBhY3BpX2J1ZmZlciBhY3QgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBhY3Rpb25fbmFtZSB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgoImhvdGtleV9jb25maWdfc2VxX3Nob3ciKSk7CiAKIAlsaXN0X2Zvcl9lYWNoKGVudHJpZXMsIGhvdGtleV9saXN0LT5lbnRyaWVzKSB7CiAJCXVuaW9uIGFjcGlfaG90a2V5ICprZXkgPQpAQCAtNjY2LDcgKzY0OCw3IEBACiAJCX0KIAl9CiAJc2VxX3B1dHMoc2VxLCAiXG4iKTsKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTY3OCw3ICs2NjAsNiBAQAogCSAgY2hhciAqKm1ldGhvZCwgaW50ICppbnRlcm5hbF9ldmVudF9udW0sIGludCAqZXh0ZXJuYWxfZXZlbnRfbnVtKQogewogCWNoYXIgKnRtcCwgKnRtcDEsIGNvdW50OwotCUFDUElfRlVOQ1RJT05fVFJBQ0UoKCJnZXRfcGFybXMiKSk7CiAKIAlzc2NhbmYoY29uZmlnX3JlY29yZCwgIiVkIiwgY21kKTsKIApAQCAtNzQ0LDkgKzcyNSw5IEBACiAJICAgIDApCiAJCWdvdG8gZG9fZmFpbDsKIAotCXJldHVybl9WQUxVRSg2KTsKKwlyZXR1cm4gNjsKICAgICAgIGRvX2ZhaWw6Ci0JcmV0dXJuX1ZBTFVFKC0xKTsKKwlyZXR1cm4gLTE7CiB9CiAKIC8qICBjb3VudCBpcyBsZW5ndGggZm9yIG9uZSBpbnB1dCByZWNvcmQgKi8KQEAgLTc2MywxNiArNzQ0LDE1IEBACiAJaW50IHJldCA9IDA7CiAJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCgiaG90a2V5X3dyaXRlX2NvbmZpZyIpKTsKIAogCWNvbmZpZ19yZWNvcmQgPSAoY2hhciAqKWttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmZpZ19yZWNvcmQpCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoY29uZmlnX3JlY29yZCwgYnVmZmVyLCBjb3VudCkpIHsKIAkJa2ZyZWUoY29uZmlnX3JlY29yZCk7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIGRhdGEgXG4iKSk7Ci0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWNvbmZpZ19yZWNvcmRbY291bnRdID0gMDsKIApAQCAtNzkyLDkgKzc3Miw4IEBACiAJCWtmcmVlKGJ1c19tZXRob2QpOwogCQlrZnJlZShhY3Rpb25faGFuZGxlKTsKIAkJa2ZyZWUobWV0aG9kKTsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJJbnZhbGlkIGRhdGEgZm9ybWF0IHJldD0lZFxuIiwgcmV0KSk7Ci0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBkYXRhIGZvcm1hdCByZXQ9JWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWtleSA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfaG90a2V5KSwgR0ZQX0tFUk5FTCk7CkBAIC04MDYsNyArNzg1LDcgQEAKIAkJdG1wID0gZ2V0X2hvdGtleV9ieV9ldmVudCgmZ2xvYmFsX2hvdGtleV9saXN0LAogCQkJCQkgIGludGVybmFsX2V2ZW50X251bSk7CiAJCWlmICghdG1wKQotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQga2V5IikpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBrZXlcbiIpOwogCQllbHNlCiAJCQltZW1jcHkoa2V5LCB0bXAsIHNpemVvZih1bmlvbiBhY3BpX2hvdGtleSkpOwogCQlnb3RvIGNvbnRfY21kOwpAQCAtODI4LDggKzgwNyw4IEBACiAJCWVsc2UKIAkJCWZyZWVfcG9sbF9ob3RrZXlfYnVmZmVyKGtleSk7CiAJCWtmcmVlKGtleSk7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIGhvdGtleSBcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGhvdGtleVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogICAgICAgY29udF9jbWQ6CkBAIC04NTUsMTUgKzgzNCwxNSBAQAogCQlnb3RvIGZhaWxfb3V0OwogCQlicmVhazsKIAl9Ci0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiAgICAgICBmYWlsX291dDoKIAlpZiAoSVNfRVZFTlQoaW50ZXJuYWxfZXZlbnRfbnVtKSkKIAkJZnJlZV9ob3RrZXlfYnVmZmVyKGtleSk7CiAJZWxzZQogCQlmcmVlX3BvbGxfaG90a2V5X2J1ZmZlcihrZXkpOwogCWtmcmVlKGtleSk7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgImludmFsaWQga2V5XG4iKSk7Ci0JcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImludmFsaWQga2V5XG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoKQEAgLTg4MCw3ICs4NTksNiBAQAogCXVuaW9uIGFjcGlfb2JqZWN0IGluX29iajsJLyogdGhlIG9ubHkgcGFyYW0gd2UgdXNlICovCiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgid3JpdGVfYWNwaV9pbnQiKTsKIAlwYXJhbXMuY291bnQgPSAxOwogCXBhcmFtcy5wb2ludGVyID0gJmluX29iajsKIAlpbl9vYmoudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwpAQCAtODg4LDcgKzg2Niw3IEBACiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIChjaGFyICopbWV0aG9kLCAmcGFyYW1zLCBvdXRwdXQpOwogCi0JcmV0dXJuX1ZBTFVFKHN0YXR1cyA9PSBBRV9PSyk7CisJcmV0dXJuIChzdGF0dXMgPT0gQUVfT0spOwogfQogCiBzdGF0aWMgaW50IHJlYWRfYWNwaV9pbnQoYWNwaV9oYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyICptZXRob2QsCkBAIC04OTgsNyArODc2LDYgQEAKIAl1bmlvbiBhY3BpX29iamVjdCBvdXRfb2JqOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoInJlYWRfYWNwaV9pbnQiKTsKIAlvdXRwdXQubGVuZ3RoID0gc2l6ZW9mKG91dF9vYmopOwogCW91dHB1dC5wb2ludGVyID0gJm91dF9vYmo7CiAKQEAgLTkwNyw4ICs4ODQsOCBAQAogCQl2YWwtPmludGVnZXIudmFsdWUgPSBvdXRfb2JqLmludGVnZXIudmFsdWU7CiAJCXZhbC0+dHlwZSA9IG91dF9vYmoudHlwZTsKIAl9IGVsc2UKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIm51bGwgdmFsIHBvaW50ZXIiKSk7Ci0JcmV0dXJuX1ZBTFVFKChzdGF0dXMgPT0gQUVfT0spCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIm51bGwgdmFsIHBvaW50ZXJcbiIpOworCXJldHVybiAoKHN0YXR1cyA9PSBBRV9PSykKIAkJICAgICAmJiAob3V0X29iai50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSk7CiB9CiAKQEAgLTk0NSwyNCArOTIyLDIzIEBACiAJaW50IGV2ZW50LCBtZXRob2RfdHlwZSwgdHlwZSwgdmFsdWU7CiAJdW5pb24gYWNwaV9ob3RrZXkgKmtleTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImhvdGtleV9leGVjdGVfYW1sX21ldGhvZCIpOwogCiAJYXJnID0gKGNoYXIgKilrbWFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcmcpCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJYXJnW2NvdW50XSA9IDA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoYXJnLCBidWZmZXIsIGNvdW50KSkgewogCQlrZnJlZShhcmcpOwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBhcmd1bWVudCAyIikpOwotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgYXJndW1lbnQgMlxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChzc2NhbmYoYXJnLCAiJWQ6JWQ6JWQ6JWQiLCAmZXZlbnQsICZtZXRob2RfdHlwZSwgJnR5cGUsICZ2YWx1ZSkgIT0KIAkgICAgNCkgewogCQlrZnJlZShhcmcpOwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBhcmd1bWVudCAzIikpOwotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgYXJndW1lbnQgM1xuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlrZnJlZShhcmcpOwogCWlmICh0eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CkBAIC05ODcsMTIgKzk2MywxMiBAQAogCiAJCX0KIAl9IGVsc2UgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiTm90IHN1cHBvcnRlZCIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJOb3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybl9WQUxVRShjb3VudCk7CisJcmV0dXJuIGNvdW50OwogICAgICAgZG9fZmFpbDoKLQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJcmV0dXJuIC1FSU5WQUw7CiAKIH0KIApAQCAtMTAwMSw3ICs5NzcsNiBAQAogCWludCByZXN1bHQ7CiAJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVR087CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJob3RrZXlfaW5pdCIpOwogCiAJaWYgKGFjcGlfZGlzYWJsZWQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTAxMyw5ICs5ODgsNiBAQAogCiAJaG90a2V5X3Byb2NfZGlyID0gcHJvY19ta2RpcihIT1RLRVlfUFJPQywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFob3RrZXlfcHJvY19kaXIpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJIb3RrZXk6IFVuYWJsZSB0byBjcmVhdGUgJXMgZW50cnlcbiIsCi0JCQkJICBIT1RLRVlfUFJPQykpOwogCQlyZXR1cm4gKC1FTk9ERVYpOwogCX0KIAlob3RrZXlfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC0xMDIzLDkgKzk5NSw2IEBACiAJaG90a2V5X2NvbmZpZyA9CiAJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KEhPVEtFWV9FVl9DT05GSUcsIG1vZGUsIGhvdGtleV9wcm9jX2Rpcik7CiAJaWYgKCFob3RrZXlfY29uZmlnKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiSG90a2V5OiBVbmFibGUgdG8gY3JlYXRlICVzIGVudHJ5XG4iLAotCQkJCSAgSE9US0VZX0VWX0NPTkZJRykpOwogCQlnb3RvIGRvX2ZhaWwxOwogCX0gZWxzZSB7CiAJCWhvdGtleV9jb25maWctPnByb2NfZm9wcyA9ICZob3RrZXlfY29uZmlnX2ZvcHM7CkBAIC0xMDM4LDEwICsxMDA3LDYgQEAKIAlob3RrZXlfcG9sbF9jb25maWcgPQogCSAgICBjcmVhdGVfcHJvY19lbnRyeShIT1RLRVlfUExfQ09ORklHLCBtb2RlLCBob3RrZXlfcHJvY19kaXIpOwogCWlmICghaG90a2V5X3BvbGxfY29uZmlnKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiSG90a2V5OiBVbmFibGUgdG8gY3JlYXRlICVzIGVudHJ5XG4iLAotCQkJCSAgSE9US0VZX0VWX0NPTkZJRykpOwotCiAJCWdvdG8gZG9fZmFpbDI7CiAJfSBlbHNlIHsKIAkJaG90a2V5X3BvbGxfY29uZmlnLT5wcm9jX2ZvcHMgPSAmaG90a2V5X3BvbGxfY29uZmlnX2ZvcHM7CkBAIC0xMDUzLDkgKzEwMTgsNiBAQAogCiAJaG90a2V5X2FjdGlvbiA9IGNyZWF0ZV9wcm9jX2VudHJ5KEhPVEtFWV9BQ1RJT04sIG1vZGUsIGhvdGtleV9wcm9jX2Rpcik7CiAJaWYgKCFob3RrZXlfYWN0aW9uKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiSG90a2V5OiBVbmFibGUgdG8gY3JlYXRlICVzIGVudHJ5XG4iLAotCQkJCSAgSE9US0VZX0FDVElPTikpOwogCQlnb3RvIGRvX2ZhaWwzOwogCX0gZWxzZSB7CiAJCWhvdGtleV9hY3Rpb24tPnByb2NfZm9wcyA9ICZob3RrZXlfYWN0aW9uX2ZvcHM7CkBAIC0xMDY2LDkgKzEwMjgsNiBAQAogCiAJaG90a2V5X2luZm8gPSBjcmVhdGVfcHJvY19lbnRyeShIT1RLRVlfSU5GTywgbW9kZSwgaG90a2V5X3Byb2NfZGlyKTsKIAlpZiAoIWhvdGtleV9pbmZvKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiSG90a2V5OiBVbmFibGUgdG8gY3JlYXRlICVzIGVudHJ5XG4iLAotCQkJCSAgSE9US0VZX0lORk8pKTsKIAkJZ290byBkb19mYWlsNDsKIAl9IGVsc2UgewogCQlob3RrZXlfaW5mby0+cHJvY19mb3BzID0gJmhvdGtleV9pbmZvX2ZvcHM7CkBAIC0xMTA0LDcgKzEwNjMsNiBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXMsICpuZXh0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaG90a2V5X2V4aXQiKTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyaWVzLCBuZXh0LCBnbG9iYWxfaG90a2V5X2xpc3QuZW50cmllcykgewogCQl1bmlvbiBhY3BpX2hvdGtleSAqa2V5ID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9tb3RoZXJib2FyZC5jIGIvZHJpdmVycy9hY3BpL21vdGhlcmJvYXJkLmMKaW5kZXggZDUxZDY4Zi4uZWM2YjdmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL21vdGhlcmJvYXJkLmMKKysrIGIvZHJpdmVycy9hY3BpL21vdGhlcmJvYXJkLmMKQEAgLTUyLDEzICs1MiwxMiBAQAogewogCXN0cnVjdCByZXNvdXJjZSAqcmVxdWVzdGVkX3JlcyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Jlc2VydmVfaW9fcmFuZ2VzIik7CiAKIAlpZiAocmVzLT50eXBlID09IEFDUElfUkVTT1VSQ0VfVFlQRV9JTykgewogCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbyAqaW9fcmVzID0gJnJlcy0+ZGF0YS5pbzsKIAogCQlpZiAoaW9fcmVzLT5taW5pbXVtICE9IGlvX3Jlcy0+bWF4aW11bSkKLQkJCXJldHVybl9WQUxVRShBRV9PSyk7CisJCQlyZXR1cm4gQUVfT0s7CiAJCWlmIChJU19SRVNFUlZFRF9BRERSCiAJCSAgICAoaW9fcmVzLT5taW5pbXVtLCBpb19yZXMtPmFkZHJlc3NfbGVuZ3RoKSkgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLApAQCAtOTIsNyArOTEsNyBAQAogCiAJaWYgKHJlcXVlc3RlZF9yZXMpCiAJCXJlcXVlc3RlZF9yZXMtPmZsYWdzICY9IH5JT1JFU09VUkNFX0JVU1k7Ci0JcmV0dXJuX1ZBTFVFKEFFX09LKTsKKwlyZXR1cm4gQUVfT0s7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9tb3RoZXJib2FyZF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWNjZXNzLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zYWNjZXNzLmMKaW5kZXggNDhmYWRhZC4uYzFjNmMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNhY2Nlc3MuYwpAQCAtMTk2LDMzICsxOTYsMzAgQEAKIAkJCQkgICAgKHU4KSAoQUNQSV9UT19JTlRFR0VSKHZhbCkgLSAxKTsKIAogCQkJCWlmIChBQ1BJX1NUUkNNUChpbml0X3ZhbC0+bmFtZSwgIl9HTF8iKSA9PSAwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIENyZWF0ZSBhIGNvdW50aW5nIHNlbWFwaG9yZSBmb3IgdGhlCi0JCQkJCSAqIGdsb2JhbCBsb2NrCi0JCQkJCSAqLworCisJCQkJCS8qIENyZWF0ZSBhIGNvdW50aW5nIHNlbWFwaG9yZSBmb3IgdGhlIGdsb2JhbCBsb2NrICovCisKIAkJCQkJc3RhdHVzID0KIAkJCQkJICAgIGFjcGlfb3NfY3JlYXRlX3NlbWFwaG9yZQogCQkJCQkgICAgKEFDUElfTk9fVU5JVF9MSU1JVCwgMSwKLQkJCQkJICAgICAmb2JqX2Rlc2MtPm11dGV4LnNlbWFwaG9yZSk7CisJCQkJCSAgICAgJmFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZSk7CiAJCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlCiAJCQkJCQkgICAgKG9ial9kZXNjKTsKIAkJCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJCQl9CiAKLQkJCQkJLyoKLQkJCQkJICogV2UganVzdCBjcmVhdGVkIHRoZSBtdXRleCBmb3IgdGhlCi0JCQkJCSAqIGdsb2JhbCBsb2NrLCBzYXZlIGl0Ci0JCQkJCSAqLwotCQkJCQlhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmUgPQotCQkJCQkgICAgb2JqX2Rlc2MtPm11dGV4LnNlbWFwaG9yZTsKKwkJCQkJLyogTWFyayB0aGlzIG11dGV4IGFzIHZlcnkgc3BlY2lhbCAqLworCisJCQkJCW9ial9kZXNjLT5tdXRleC5vc19tdXRleCA9CisJCQkJCSAgICBBQ1BJX0dMT0JBTF9MT0NLOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIENyZWF0ZSBhIG11dGV4ICovCiAKLQkJCQkJc3RhdHVzID0gYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlKDEsIDEsCi0JCQkJCQkJCQkgICZvYmpfZGVzYy0+Ci0JCQkJCQkJCQkgIG11dGV4LgotCQkJCQkJCQkJICBzZW1hcGhvcmUpOworCQkJCQlzdGF0dXMgPQorCQkJCQkgICAgYWNwaV9vc19jcmVhdGVfbXV0ZXgoJm9ial9kZXNjLT4KKwkJCQkJCQkJIG11dGV4LgorCQkJCQkJCQkgb3NfbXV0ZXgpOwogCQkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZQogCQkJCQkJICAgIChvYmpfZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS5jIGIvZHJpdmVycy9hY3BpL251bWEuYwppbmRleCAxM2Q2ZDViZC4uNGQ2MjI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL251bWEuYworKysgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggMWJiNTU4YS4uNWE0NjhlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtMjUsNyArMjUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMTM3LDYgKzEzNiw3IEBACiAjZW5kaWYKIH0KIAorCiBleHRlcm4gaW50IGFjcGlfaW5fcmVzdW1lOwogdm9pZCAqYWNwaV9vc19hbGxvY2F0ZShhY3BpX3NpemUgc2l6ZSkKIHsKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAJYWNwaV9pcnFfaGFuZGxlciA9IGhhbmRsZXI7CiAJYWNwaV9pcnFfY29udGV4dCA9IGNvbnRleHQ7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgYWNwaV9pcnEsIFNBX1NISVJRLCAiYWNwaSIsIGFjcGlfaXJxKSkgeworCWlmIChyZXF1ZXN0X2lycShpcnEsIGFjcGlfaXJxLCBJUlFGX1NIQVJFRCwgImFjcGkiLCBhY3BpX2lycSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiU0NJIChJUlElZCkgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIGlycSk7CiAJCXJldHVybiBBRV9OT1RfQUNRVUlSRUQ7CiAJfQpAQCAtNTg2LDE5ICs1ODYsMTggQEAKIHsKIAlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJvc19leGVjdXRlX2RlZmVycmVkIik7CiAKIAlkcGMgPSAoc3RydWN0IGFjcGlfb3NfZHBjICopY29udGV4dDsKIAlpZiAoIWRwYykgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCAoTlVMTCkgY29udGV4dC5cbiIpKTsKLQkJcmV0dXJuX1ZPSUQ7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgKE5VTEwpIGNvbnRleHRcbiIpOworCQlyZXR1cm47CiAJfQogCiAJZHBjLT5mdW5jdGlvbihkcGMtPmNvbnRleHQpOwogCiAJa2ZyZWUoZHBjKTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBhY3BpX29zX2V4ZWN1dGVfdGhyZWFkKHZvaWQgKmNvbnRleHQpCkBAIC02ODgsMzUgKzY4NywxOSBAQAogLyoKICAqIEFsbG9jYXRlIHRoZSBtZW1vcnkgZm9yIGEgc3BpbmxvY2sgYW5kIGluaXRpYWxpemUgaXQuCiAgKi8KLWFjcGlfc3RhdHVzIGFjcGlfb3NfY3JlYXRlX2xvY2soYWNwaV9oYW5kbGUgKiBvdXRfaGFuZGxlKQorYWNwaV9zdGF0dXMgYWNwaV9vc19jcmVhdGVfbG9jayhhY3BpX3NwaW5sb2NrICogaGFuZGxlKQogewotCXNwaW5sb2NrX3QgKmxvY2tfcHRyOworCXNwaW5fbG9ja19pbml0KCpoYW5kbGUpOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3NfY3JlYXRlX2xvY2siKTsKLQotCWxvY2tfcHRyID0gYWNwaV9vc19hbGxvY2F0ZShzaXplb2Yoc3BpbmxvY2tfdCkpOwotCi0Jc3Bpbl9sb2NrX2luaXQobG9ja19wdHIpOwotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwgIkNyZWF0aW5nIHNwaW5sb2NrWyVwXS5cbiIsIGxvY2tfcHRyKSk7Ci0KLQkqb3V0X2hhbmRsZSA9IGxvY2tfcHRyOwotCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwlyZXR1cm4gQUVfT0s7CiB9CiAKIC8qCiAgKiBEZWFsbG9jYXRlIHRoZSBtZW1vcnkgZm9yIGEgc3BpbmxvY2suCiAgKi8KLXZvaWQgYWNwaV9vc19kZWxldGVfbG9jayhhY3BpX2hhbmRsZSBoYW5kbGUpCit2b2lkIGFjcGlfb3NfZGVsZXRlX2xvY2soYWNwaV9zcGlubG9jayBoYW5kbGUpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3NfY3JlYXRlX2xvY2siKTsKLQotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsICJEZWxldGluZyBzcGlubG9ja1slcF0uXG4iLCBoYW5kbGUpKTsKLQotCWFjcGlfb3NfZnJlZShoYW5kbGUpOwotCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBhY3BpX3N0YXR1cwpAQCAtNzI0LDExICs3MDcsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2VtYXBob3JlICpzZW0gPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3NfY3JlYXRlX3NlbWFwaG9yZSIpOwogCiAJc2VtID0gYWNwaV9vc19hbGxvY2F0ZShzaXplb2Yoc3RydWN0IHNlbWFwaG9yZSkpOwogCWlmICghc2VtKQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwkJcmV0dXJuIEFFX05PX01FTU9SWTsKIAltZW1zZXQoc2VtLCAwLCBzaXplb2Yoc3RydWN0IHNlbWFwaG9yZSkpOwogCiAJc2VtYV9pbml0KHNlbSwgaW5pdGlhbF91bml0cyk7CkBAIC03MzgsNyArNzIwLDcgQEAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLCAiQ3JlYXRpbmcgc2VtYXBob3JlWyVwfCVkXS5cbiIsCiAJCQkgICpoYW5kbGUsIGluaXRpYWxfdW5pdHMpKTsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfb3NfY3JlYXRlX3NlbWFwaG9yZSk7CkBAIC03NTQsMTcgKzczNiwxNiBAQAogewogCXN0cnVjdCBzZW1hcGhvcmUgKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopaGFuZGxlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3NfZGVsZXRlX3NlbWFwaG9yZSIpOwogCiAJaWYgKCFzZW0pCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLCAiRGVsZXRpbmcgc2VtYXBob3JlWyVwXS5cbiIsIGhhbmRsZSkpOwogCiAJYWNwaV9vc19mcmVlKHNlbSk7CiAJc2VtID0gTlVMTDsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfb3NfZGVsZXRlX3NlbWFwaG9yZSk7CkBAIC03ODQsMTMgKzc2NSwxMiBAQAogCXN0cnVjdCBzZW1hcGhvcmUgKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopaGFuZGxlOwogCWludCByZXQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3Nfd2FpdF9zZW1hcGhvcmUiKTsKIAogCWlmICghc2VtIHx8ICh1bml0cyA8IDEpKQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwogCiAJaWYgKHVuaXRzID4gMSkKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX1NVUFBPUlQpOworCQlyZXR1cm4gQUVfU1VQUE9SVDsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsICJXYWl0aW5nIGZvciBzZW1hcGhvcmVbJXB8JWR8JWRdXG4iLAogCQkJICBoYW5kbGUsIHVuaXRzLCB0aW1lb3V0KSk7CkBAIC04MzksMTcgKzgxOSwxNyBAQAogCX0KIAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkZhaWxlZCB0byBhY3F1aXJlIHNlbWFwaG9yZVslcHwlZHwlZF0sICVzXG4iLAorCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLAorCQkJCSAgIkZhaWxlZCB0byBhY3F1aXJlIHNlbWFwaG9yZVslcHwlZHwlZF0sICVzIiwKIAkJCQkgIGhhbmRsZSwgdW5pdHMsIHRpbWVvdXQsCiAJCQkJICBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOwogCX0gZWxzZSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsCi0JCQkJICAiQWNxdWlyZWQgc2VtYXBob3JlWyVwfCVkfCVkXVxuIiwgaGFuZGxlLAorCQkJCSAgIkFjcXVpcmVkIHNlbWFwaG9yZVslcHwlZHwlZF0iLCBoYW5kbGUsCiAJCQkJICB1bml0cywgdGltZW91dCkpOwogCX0KIAotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9vc193YWl0X3NlbWFwaG9yZSk7CkBAIC04NjEsMjAgKzg0MSwxOSBAQAogewogCXN0cnVjdCBzZW1hcGhvcmUgKnNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopaGFuZGxlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3Nfc2lnbmFsX3NlbWFwaG9yZSIpOwogCiAJaWYgKCFzZW0gfHwgKHVuaXRzIDwgMSkpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKIAlpZiAodW5pdHMgPiAxKQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfU1VQUE9SVCk7CisJCXJldHVybiBBRV9TVVBQT1JUOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwgIlNpZ25hbGluZyBzZW1hcGhvcmVbJXB8JWRdXG4iLCBoYW5kbGUsCiAJCQkgIHVuaXRzKSk7CiAKIAl1cChzZW0pOwogCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwlyZXR1cm4gQUVfT0s7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKTsKQEAgLTEwNDMsMTAgKzEwMjIsMTAgQEAKICAqIGhhbmRsZSBpcyBhIHBvaW50ZXIgdG8gdGhlIHNwaW5sb2NrX3QuCiAgKi8KIAotYWNwaV9jcHVfZmxhZ3MgYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9oYW5kbGUgaGFuZGxlKQorYWNwaV9jcHVfZmxhZ3MgYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9zcGlubG9jayBsb2NrcCkKIHsKIAlhY3BpX2NwdV9mbGFncyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgoc3BpbmxvY2tfdCAqKSBoYW5kbGUsIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrcCwgZmxhZ3MpOwogCXJldHVybiBmbGFnczsKIH0KIApAQCAtMTA1NCw5ICsxMDMzLDkgQEAKICAqIFJlbGVhc2UgYSBzcGlubG9jay4gU2VlIGFib3ZlLgogICovCiAKLXZvaWQgYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2NwdV9mbGFncyBmbGFncykKK3ZvaWQgYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9zcGlubG9jayBsb2NrcCwgYWNwaV9jcHVfZmxhZ3MgZmxhZ3MpCiB7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgoc3BpbmxvY2tfdCAqKSBoYW5kbGUsIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2twLCBmbGFncyk7CiB9CiAKICNpZm5kZWYgQUNQSV9VU0VfTE9DQUxfQ0FDSEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3BhcnNlLmMKaW5kZXggN2VlMmYyZS4uYTAyYWE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BhcnNlci9wc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc3BhcnNlLmMKQEAgLTQ2OSw2ICs0NjksMTYgQEAKIAl9CiAKIAl3YWxrX3N0YXRlLT50aHJlYWQgPSB0aHJlYWQ7CisKKwkvKgorCSAqIElmIGV4ZWN1dGluZyBhIG1ldGhvZCwgdGhlIHN0YXJ0aW5nIHN5bmNfbGV2ZWwgaXMgdGhpcyBtZXRob2QncworCSAqIHN5bmNfbGV2ZWwKKwkgKi8KKwlpZiAod2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MpIHsKKwkJd2Fsa19zdGF0ZS0+dGhyZWFkLT5jdXJyZW50X3N5bmNfbGV2ZWwgPQorCQkgICAgd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5zeW5jX2xldmVsOworCX0KKwogCWFjcGlfZHNfcHVzaF93YWxrX3N0YXRlKHdhbGtfc3RhdGUsIHRocmVhZCk7CiAKIAkvKgpAQCAtNTA1LDYgKzUxNSwxMCBAQAogCQkJc3RhdHVzID0KIAkJCSAgICBhY3BpX2RzX2NhbGxfY29udHJvbF9tZXRob2QodGhyZWFkLCB3YWxrX3N0YXRlLAogCQkJCQkJCU5VTEwpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgYWNwaV9kc19tZXRob2RfZXJyb3Ioc3RhdHVzLCB3YWxrX3N0YXRlKTsKKwkJCX0KIAogCQkJLyoKIAkJCSAqIElmIHRoZSB0cmFuc2ZlciB0byB0aGUgbmV3IG1ldGhvZCBtZXRob2QgY2FsbCB3b3JrZWQsIGEgbmV3IHdhbGsKQEAgLTUyNSw3ICs1MzksNyBAQAogCQkJLyogQ2hlY2sgZm9yIHBvc3NpYmxlIG11bHRpLXRocmVhZCByZWVudHJhbmN5IHByb2JsZW0gKi8KIAogCQkJaWYgKChzdGF0dXMgPT0gQUVfQUxSRUFEWV9FWElTVFMpICYmCi0JCQkgICAgKCF3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLnNlbWFwaG9yZSkpIHsKKwkJCSAgICAoIXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QubXV0ZXgpKSB7CiAJCQkJLyoKIAkJCQkgKiBNZXRob2QgdHJpZWQgdG8gY3JlYXRlIGFuIG9iamVjdCB0d2ljZS4gVGhlIHByb2JhYmxlIGNhdXNlIGlzCiAJCQkJICogdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBoYW5kbGUgcmVlbnRyYW5jeS4KQEAgLTUzNyw3ICs1NTEsNyBAQAogCQkJCSAqLwogCQkJCXdhbGtfc3RhdGUtPm1ldGhvZF9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzIHw9CiAJCQkJICAgIEFNTF9NRVRIT0RfU0VSSUFMSVpFRDsKLQkJCQl3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLmNvbmN1cnJlbmN5ID0gMTsKKwkJCQl3YWxrX3N0YXRlLT5tZXRob2RfZGVzYy0+bWV0aG9kLnN5bmNfbGV2ZWwgPSAwOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jIGIvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKaW5kZXggMmE3MThkZi4uMWUyYWU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMKQEAgLTQ3LDExICs0NywxMCBAQAogc3RhdGljIHZvaWQgYWNwaV9wY2lfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZ1bmN0aW9uLAogCQkJCSAgdm9pZCAqY29udGV4dCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9kYXRhX2hhbmRsZXIiKTsKIAogCS8qIFRCRDogQW55dGhpbmcgd2UgbmVlZCB0byBkbyBoZXJlPyAqLwogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiAvKioKQEAgLTY4LDI1ICs2NywyNCBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9wY2lfZGF0YSAqZGF0YSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2dldF9wY2lfaWQiKTsKIAogCWlmICghaWQpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CiAJaWYgKHJlc3VsdCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkludmFsaWQgQUNQSSBCdXMgY29udGV4dCBmb3IgZGV2aWNlICVzXG4iLAotCQkJCSAgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PVF9FWElTVCk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCSAgICAiSW52YWxpZCBBQ1BJIEJ1cyBjb250ZXh0IGZvciBkZXZpY2UgJXNcbiIsCisJCQkgICAgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOworCQlyZXR1cm4gQUVfTk9UX0VYSVNUOwogCX0KIAogCXN0YXR1cyA9IGFjcGlfZ2V0X2RhdGEoaGFuZGxlLCBhY3BpX3BjaV9kYXRhX2hhbmRsZXIsICh2b2lkICoqKSZkYXRhKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgIWRhdGEpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJJbnZhbGlkIEFDUEktUENJIGNvbnRleHQgZm9yIGRldmljZSAlc1xuIiwKLQkJCQkgIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCSJJbnZhbGlkIEFDUEktUENJIGNvbnRleHQgZm9yIGRldmljZSAlcyIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKKwkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkqaWQgPSBkYXRhLT5pZDsKQEAgLTEwMyw3ICsxMDEsNyBAQAogCQkJICBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwgaWQtPnNlZ21lbnQsIGlkLT5idXMsCiAJCQkgIGlkLT5kZXZpY2UsIGlkLT5mdW5jdGlvbikpOwogCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwlyZXR1cm4gQUVfT0s7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9nZXRfcGNpX2lkKTsKQEAgLTEyMCwxNCArMTE4LDEzIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfYmluZCIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+cGFyZW50KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcGF0aG5hbWUgPSBrbWFsbG9jKEFDUElfUEFUSE5BTUVfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhdGhuYW1lKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChwYXRobmFtZSwgMCwgQUNQSV9QQVRITkFNRV9NQVgpOwogCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX1BBVEhOQU1FX01BWDsKIAlidWZmZXIucG9pbnRlciA9IHBhdGhuYW1lOwpAQCAtMTM1LDcgKzEzMiw3IEBACiAJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7CiAJCWtmcmVlKHBhdGhuYW1lKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2lfZGF0YSkpOwogCkBAIC0xNTEsOSArMTQ4LDkgQEAKIAlzdGF0dXMgPSBhY3BpX2dldF9kYXRhKGRldmljZS0+cGFyZW50LT5oYW5kbGUsIGFjcGlfcGNpX2RhdGFfaGFuZGxlciwKIAkJCSAgICAgICAodm9pZCAqKikmcGRhdGEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCAhcGRhdGEgfHwgIXBkYXRhLT5idXMpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJJbnZhbGlkIEFDUEktUENJIGNvbnRleHQgZm9yIHBhcmVudCBkZXZpY2UgJXNcbiIsCi0JCQkJICBhY3BpX2RldmljZV9iaWQoZGV2aWNlLT5wYXJlbnQpKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIkludmFsaWQgQUNQSS1QQ0kgY29udGV4dCBmb3IgcGFyZW50IGRldmljZSAlcyIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKGRldmljZS0+cGFyZW50KSkpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0yMDYsMTAgKzIwMywxMCBAQAogCQlnb3RvIGVuZDsKIAl9CiAJaWYgKCFkYXRhLT5kZXYtPmJ1cykgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkRldmljZSAlMDJ4OiUwMng6JTAyeC4lMDJ4IGhhcyBpbnZhbGlkICdidXMnIGZpZWxkXG4iLAotCQkJCSAgZGF0YS0+aWQuc2VnbWVudCwgZGF0YS0+aWQuYnVzLAotCQkJCSAgZGF0YS0+aWQuZGV2aWNlLCBkYXRhLT5pZC5mdW5jdGlvbikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkgICAgIkRldmljZSAlMDJ4OiUwMng6JTAyeC4lMDJ4IGhhcyBpbnZhbGlkICdidXMnIGZpZWxkXG4iLAorCQkJICAgIGRhdGEtPmlkLnNlZ21lbnQsIGRhdGEtPmlkLmJ1cywKKwkJCSAgICBkYXRhLT5pZC5kZXZpY2UsIGRhdGEtPmlkLmZ1bmN0aW9uKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMjM3LDkgKzIzNCw5IEBACiAJICovCiAJc3RhdHVzID0gYWNwaV9hdHRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwgYWNwaV9wY2lfZGF0YV9oYW5kbGVyLCBkYXRhKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gYXR0YWNoIEFDUEktUENJIGNvbnRleHQgdG8gZGV2aWNlICVzXG4iLAotCQkJCSAgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKKwkJCQkiVW5hYmxlIHRvIGF0dGFjaCBBQ1BJLVBDSSBjb250ZXh0IHRvIGRldmljZSAlcyIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMjY5LDcgKzI2Niw3IEBACiAJaWYgKHJlc3VsdCkKIAkJa2ZyZWUoZGF0YSk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBpbnQgYWNwaV9wY2lfdW5iaW5kKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtMjgwLDE0ICsyNzcsMTMgQEAKIAljaGFyICpwYXRobmFtZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgMCwgTlVMTCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfdW5iaW5kIik7CiAKIAlpZiAoIWRldmljZSB8fCAhZGV2aWNlLT5wYXJlbnQpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwYXRobmFtZSA9IChjaGFyICopa21hbGxvYyhBQ1BJX1BBVEhOQU1FX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXRobmFtZSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQocGF0aG5hbWUsIDAsIEFDUElfUEFUSE5BTUVfTUFYKTsKIAogCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX1BBVEhOQU1FX01BWDsKQEAgLTMwMSwxOCArMjk3LDE4IEBACiAJICAgIGFjcGlfZ2V0X2RhdGEoZGV2aWNlLT5oYW5kbGUsIGFjcGlfcGNpX2RhdGFfaGFuZGxlciwKIAkJCSAgKHZvaWQgKiopJmRhdGEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBnZXQgZGF0YSBmcm9tIGRldmljZSAlc1xuIiwKLQkJCQkgIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIlVuYWJsZSB0byBnZXQgZGF0YSBmcm9tIGRldmljZSAlcyIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQogCiAJc3RhdHVzID0gYWNwaV9kZXRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwgYWNwaV9wY2lfZGF0YV9oYW5kbGVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gZGV0YWNoIGRhdGEgZnJvbSBkZXZpY2UgJXNcbiIsCi0JCQkJICBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSkpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCSJVbmFibGUgdG8gZGV0YWNoIGRhdGEgZnJvbSBkZXZpY2UgJXMiLAorCQkJCWFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKSk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTMyMiw3ICszMTgsNyBAQAogCWtmcmVlKGRhdGEpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogaW50CkBAIC0zMzUsMTEgKzMzMSwxMCBAQAogCWNoYXIgKnBhdGhuYW1lID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyAwLCBOVUxMIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9iaW5kX3Jvb3QiKTsKIAogCXBhdGhuYW1lID0gKGNoYXIgKilrbWFsbG9jKEFDUElfUEFUSE5BTUVfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhdGhuYW1lKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChwYXRobmFtZSwgMCwgQUNQSV9QQVRITkFNRV9NQVgpOwogCiAJYnVmZmVyLmxlbmd0aCA9IEFDUElfUEFUSE5BTUVfTUFYOwpAQCAtMzQ3LDEzICszNDIsMTMgQEAKIAogCWlmICghZGV2aWNlIHx8ICFpZCB8fCAhYnVzKSB7CiAJCWtmcmVlKHBhdGhuYW1lKTsKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcGNpX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpIHsKIAkJa2ZyZWUocGF0aG5hbWUpOwotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9kYXRhKSk7CiAKQEAgLTM2OSw5ICszNjQsOSBAQAogCiAJc3RhdHVzID0gYWNwaV9hdHRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwgYWNwaV9wY2lfZGF0YV9oYW5kbGVyLCBkYXRhKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gYXR0YWNoIEFDUEktUENJIGNvbnRleHQgdG8gZGV2aWNlICVzXG4iLAotCQkJCSAgcGF0aG5hbWUpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKKwkJCQkiVW5hYmxlIHRvIGF0dGFjaCBBQ1BJLVBDSSBjb250ZXh0IHRvIGRldmljZSAlcyIsCisJCQkJcGF0aG5hbWUpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMzgxLDUgKzM3Niw1IEBACiAJaWYgKHJlc3VsdCAhPSAwKQogCQlrZnJlZShkYXRhKTsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwppbmRleCA2NWFlZTc5Li5mZWRhMDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01NSwxMCArNTQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3BydF9lbnRyeSAqZW50cnkgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfaXJxX2ZpbmRfcHJ0X2VudHJ5Iik7CiAKIAlpZiAoIWFjcGlfcHJ0LmNvdW50KQotCQlyZXR1cm5fUFRSKE5VTEwpOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogUGFyc2UgdGhyb3VnaCBhbGwgUFJUIGVudHJpZXMgbG9va2luZyBmb3IgYSBtYXRjaCBvbiB0aGUgc3BlY2lmaWVkCkBAIC03MywxMiArNzEsMTIgQEAKIAkJICAgICYmIChkZXZpY2UgPT0gZW50cnktPmlkLmRldmljZSkKIAkJICAgICYmIChwaW4gPT0gZW50cnktPnBpbikpIHsKIAkJCXNwaW5fdW5sb2NrKCZhY3BpX3BydF9sb2NrKTsKLQkJCXJldHVybl9QVFIoZW50cnkpOworCQkJcmV0dXJuIGVudHJ5OwogCQl9CiAJfQogCiAJc3Bpbl91bmxvY2soJmFjcGlfcHJ0X2xvY2spOwotCXJldHVybl9QVFIoTlVMTCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTg3LDE0ICs4NSwxMyBAQAogewogCXN0cnVjdCBhY3BpX3BydF9lbnRyeSAqZW50cnkgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfaXJxX2FkZF9lbnRyeSIpOwogCiAJaWYgKCFwcnQpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BydF9lbnRyeSksIEdGUF9LRVJORUwpOwogCWlmICghZW50cnkpCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfcHJ0X2VudHJ5KSk7CiAKIAllbnRyeS0+aWQuc2VnbWVudCA9IHNlZ21lbnQ7CkBAIC0xNDEsNyArMTM4LDcgQEAKIAlhY3BpX3BydC5jb3VudCsrOwogCXNwaW5fdW5sb2NrKCZhY3BpX3BydF9sb2NrKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE2MywxMSArMTYwLDEwIEBACiAJc3RydWN0IGFjcGlfcGNpX3JvdXRpbmdfdGFibGUgKmVudHJ5ID0gTlVMTDsKIAlzdGF0aWMgaW50IGZpcnN0X3RpbWUgPSAxOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfaXJxX2FkZF9wcnQiKTsKIAogCXBhdGhuYW1lID0gKGNoYXIgKilrbWFsbG9jKEFDUElfUEFUSE5BTUVfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhdGhuYW1lKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChwYXRobmFtZSwgMCwgQUNQSV9QQVRITkFNRV9NQVgpOwogCiAJaWYgKGZpcnN0X3RpbWUpIHsKQEAgLTE5NywyNCArMTkzLDI0IEBACiAJa2ZyZWUocGF0aG5hbWUpOwogCXN0YXR1cyA9IGFjcGlfZ2V0X2lycV9yb3V0aW5nX3RhYmxlKGhhbmRsZSwgJmJ1ZmZlcik7CiAJaWYgKHN0YXR1cyAhPSBBRV9CVUZGRVJfT1ZFUkZMT1cpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX1BSVCBbJXNdXG4iLAotCQkJCSAgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUFJUIFslc10iLAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXBydCA9IGttYWxsb2MoYnVmZmVyLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcnQpIHsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHBydCwgMCwgYnVmZmVyLmxlbmd0aCk7CiAJYnVmZmVyLnBvaW50ZXIgPSBwcnQ7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9pcnFfcm91dGluZ190YWJsZShoYW5kbGUsICZidWZmZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiRXJyb3IgZXZhbHVhdGluZyBfUFJUIFslc11cbiIsCi0JCQkJICBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUFJUIFslc10iLAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKSk7CiAJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAllbnRyeSA9IHBydDsKQEAgLTIyNyw3ICsyMjMsNyBAQAogCiAJa2ZyZWUocHJ0KTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBhY3BpX3BjaV9pcnFfZGVsX3BydChpbnQgc2VnbWVudCwgaW50IGJ1cykKQEAgLTI2MiwxNiArMjU4LDE1IEBACiB7CiAJaW50IGlycTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX2FsbG9jYXRlX2lycSIpOwogCiAJaWYgKGVudHJ5LT5saW5rLmhhbmRsZSkgewogCQlpcnEgPSBhY3BpX3BjaV9saW5rX2FsbG9jYXRlX2lycShlbnRyeS0+bGluay5oYW5kbGUsCiAJCQkJCQkgZW50cnktPmxpbmsuaW5kZXgsIHRyaWdnZXJpbmcsCiAJCQkJCQkgcG9sYXJpdHksIGxpbmspOwogCQlpZiAoaXJxIDwgMCkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCQkgICJJbnZhbGlkIElSUSBsaW5rIHJvdXRpbmcgZW50cnlcbiIpKTsKLQkJCXJldHVybl9WQUxVRSgtMSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCQkJCSAgICAgICJJbnZhbGlkIElSUSBsaW5rIHJvdXRpbmcgZW50cnlcbiIpOworCQkJcmV0dXJuIC0xOwogCQl9CiAJfSBlbHNlIHsKIAkJaXJxID0gZW50cnktPmxpbmsuaW5kZXg7CkBAIC0yODAsNyArMjc1LDcgQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJGb3VuZCBJUlEgJWRcbiIsIGlycSkpOwotCXJldHVybl9WQUxVRShpcnEpOworCXJldHVybiBpcnE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI4OSwxMyArMjg0LDEyIEBACiB7CiAJaW50IGlycTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX2ZyZWVfaXJxIik7CiAJaWYgKGVudHJ5LT5saW5rLmhhbmRsZSkgewogCQlpcnEgPSBhY3BpX3BjaV9saW5rX2ZyZWVfaXJxKGVudHJ5LT5saW5rLmhhbmRsZSk7CiAJfSBlbHNlIHsKIAkJaXJxID0gZW50cnktPmxpbmsuaW5kZXg7CiAJfQotCXJldHVybl9WQUxVRShpcnEpOworCXJldHVybiBpcnE7CiB9CiAKIC8qCkBAIC0zMTUsNyArMzA5LDYgQEAKIAlpbnQgYnVzX25yID0gYnVzLT5udW1iZXI7CiAJaW50IHJldDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX2lycV9sb29rdXAiKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCSAgIlNlYXJjaGluZyBmb3IgUFJUIGVudHJ5IGZvciAlMDJ4OiUwMng6JTAyeFslY11cbiIsCkBAIC0zMjQsMTEgKzMxNywxMSBAQAogCWVudHJ5ID0gYWNwaV9wY2lfaXJxX2ZpbmRfcHJ0X2VudHJ5KHNlZ21lbnQsIGJ1c19uciwgZGV2aWNlLCBwaW4pOwogCWlmICghZW50cnkpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiUFJUIGVudHJ5IG5vdCBmb3VuZFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0ID0gZnVuYyhlbnRyeSwgdHJpZ2dlcmluZywgcG9sYXJpdHksIGxpbmspOwotCXJldHVybl9WQUxVRShyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0zNDYsMTAgKzMzOSw5IEBACiAJaW50IGlycSA9IC0xOwogCXU4IGJyaWRnZV9waW4gPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfaXJxX2Rlcml2ZSIpOwogCiAJaWYgKCFkZXYpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiAKIAkgKiBBdHRlbXB0IHRvIGRlcml2ZSBhbiBJUlEgZm9yIHRoaXMgZGV2aWNlIGZyb20gYSBwYXJlbnQgYnJpZGdlJ3MKQEAgLTM2Niw3ICszNTgsNyBAQAogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkJCSAgIk5vIGludGVycnVwdCBwaW4gY29uZmlndXJlZCBmb3IgZGV2aWNlICVzXG4iLAogCQkJCQkJICBwY2lfbmFtZShicmlkZ2UpKSk7Ci0JCQkJcmV0dXJuX1ZBTFVFKC0xKTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQkvKiBQaW4gaXMgZnJvbSAwIHRvIDMgKi8KIAkJCWJyaWRnZV9waW4tLTsKQEAgLTM3OSwxNiArMzcxLDE1IEBACiAJfQogCiAJaWYgKGlycSA8IDApIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCSAgIlVuYWJsZSB0byBkZXJpdmUgSVJRIGZvciBkZXZpY2UgJXNcbiIsCi0JCQkJICBwY2lfbmFtZShkZXYpKSk7Ci0JCXJldHVybl9WQUxVRSgtMSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gZGVyaXZlIElSUSBmb3IgZGV2aWNlICVzXG4iLAorCQkJICAgICAgcGNpX25hbWUoZGV2KSk7CisJCXJldHVybiAtMTsKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXJpdmUgSVJRICVkIGZvciBkZXZpY2UgJXMgZnJvbSAlc1xuIiwKIAkJCSAgaXJxLCBwY2lfbmFtZShkZXYpLCBwY2lfbmFtZShicmlkZ2UpKSk7CiAKLQlyZXR1cm5fVkFMVUUoaXJxKTsKKwlyZXR1cm4gaXJxOwogfQogCiAvKgpAQCAtNDA2LDI0ICszOTcsMjIgQEAKIAljaGFyICpsaW5rID0gTlVMTDsKIAlpbnQgcmM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9pcnFfZW5hYmxlIik7CiAKIAlpZiAoIWRldikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBpbiA9IGRldi0+cGluOwogCWlmICghcGluKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkgICJObyBpbnRlcnJ1cHQgcGluIGNvbmZpZ3VyZWQgZm9yIGRldmljZSAlc1xuIiwKIAkJCQkgIHBjaV9uYW1lKGRldikpKTsKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAJcGluLS07CiAKIAlpZiAoIWRldi0+YnVzKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiSW52YWxpZCAoTlVMTCkgJ2J1cycgZmllbGRcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIChOVUxMKSAnYnVzJyBmaWVsZFxuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIApAQCAtNDU1LDEwICs0NDQsMTAgQEAKIAkJCXByaW50aygiIC0gdXNpbmcgSVJRICVkXG4iLCBkZXYtPmlycSk7CiAJCQlhY3BpX3JlZ2lzdGVyX2dzaShkZXYtPmlycSwgQUNQSV9MRVZFTF9TRU5TSVRJVkUsCiAJCQkJCSAgQUNQSV9BQ1RJVkVfTE9XKTsKLQkJCXJldHVybl9WQUxVRSgwKTsKKwkJCXJldHVybiAwOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKCJcbiIpOwotCQkJcmV0dXJuX1ZBTFVFKDApOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKQEAgLTQ2Niw3ICs0NTUsNyBAQAogCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIlBDSSBJbnRlcnJ1cHQgJXNbJWNdOiBmYWlsZWQgIgogCQkgICAgICAgInRvIHJlZ2lzdGVyIEdTSVxuIiwgcGNpX25hbWUoZGV2KSwgKCdBJyArIHBpbikpOwotCQlyZXR1cm5fVkFMVUUocmMpOworCQlyZXR1cm4gcmM7CiAJfQogCWRldi0+aXJxID0gcmM7CiAKQEAgLTQ4MCw3ICs0NjksNyBAQAogCSAgICAgICAodHJpZ2dlcmluZyA9PSBBQ1BJX0xFVkVMX1NFTlNJVElWRSkgPyAibGV2ZWwiIDogImVkZ2UiLAogCSAgICAgICAocG9sYXJpdHkgPT0gQUNQSV9BQ1RJVkVfTE9XKSA/ICJsb3ciIDogImhpZ2giLCBkZXYtPmlycSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9wY2lfaXJxX2VuYWJsZSk7CkBAIC00OTcsMTQgKzQ4NiwxMyBAQAogCWludCB0cmlnZ2VyaW5nID0gQUNQSV9MRVZFTF9TRU5TSVRJVkU7CiAJaW50IHBvbGFyaXR5ID0gQUNQSV9BQ1RJVkVfTE9XOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfaXJxX2Rpc2FibGUiKTsKIAogCWlmICghZGV2IHx8ICFkZXYtPmJ1cykKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXBpbiA9IGRldi0+cGluOwogCWlmICghcGluKQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCXBpbi0tOwogCiAJLyoKQEAgLTUyMiw3ICs1MTAsNyBAQAogCQkJCQkgICZ0cmlnZ2VyaW5nLCAmcG9sYXJpdHksIE5VTEwsCiAJCQkJCSAgYWNwaV9wY2lfZnJlZV9pcnEpOwogCWlmIChnc2kgPCAwKQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBUQkQ6IEl0IG1pZ2h0IGJlIHdvcnRoIGNsZWFyaW5nIGRldi0+aXJxIGJ5IG1hZ2ljIGNvbnN0YW50CkBAIC01MzQsNSArNTIyLDUgQEAKIAogCWFjcGlfdW5yZWdpc3Rlcl9nc2koZ3NpKTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKaW5kZXggMjI4YmRiNi4uMWJhZGNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKQEAgLTEwNywyNiArMTA3LDIzIEBACiAJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSAoc3RydWN0IGFjcGlfcGNpX2xpbmsgKiljb250ZXh0OwogCXUzMiBpID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX2xpbmtfY2hlY2tfcG9zc2libGUiKTsKIAogCXN3aXRjaCAocmVzb3VyY2UtPnR5cGUpIHsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9TVEFSVF9ERVBFTkRFTlQ6Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCXJldHVybiBBRV9PSzsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9JUlE6CiAJCXsKIAkJCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lycSAqcCA9ICZyZXNvdXJjZS0+ZGF0YS5pcnE7CiAJCQlpZiAoIXAgfHwgIXAtPmludGVycnVwdF9jb3VudCkgewotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkJCSAgIkJsYW5rIElSUSByZXNvdXJjZVxuIikpOwotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkJsYW5rIElSUSByZXNvdXJjZVxuIik7CisJCQkJcmV0dXJuIEFFX09LOwogCQkJfQogCQkJZm9yIChpID0gMDsKIAkJCSAgICAgKGkgPCBwLT5pbnRlcnJ1cHRfY291bnQKIAkJCSAgICAgICYmIGkgPCBBQ1BJX1BDSV9MSU5LX01BWF9QT1NTSUJMRSk7IGkrKykgewogCQkJCWlmICghcC0+aW50ZXJydXB0c1tpXSkgewotCQkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1dBUk4sCi0JCQkJCQkJICAiSW52YWxpZCBJUlEgJWRcbiIsCi0JCQkJCQkJICBwLT5pbnRlcnJ1cHRzW2ldKSk7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJJbnZhbGlkIElSUSAlZFxuIiwKKwkJCQkJCSAgICAgIHAtPmludGVycnVwdHNbaV0pOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJbGluay0+aXJxLnBvc3NpYmxlW2ldID0gcC0+aW50ZXJydXB0c1tpXTsKQEAgLTE0MiwxNyArMTM5LDE2IEBACiAJCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9leHRlbmRlZF9pcnEgKnAgPQogCQkJICAgICZyZXNvdXJjZS0+ZGF0YS5leHRlbmRlZF9pcnE7CiAJCQlpZiAoIXAgfHwgIXAtPmludGVycnVwdF9jb3VudCkgewotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkJCSAgIkJsYW5rIEVYVCBJUlEgcmVzb3VyY2VcbiIpKTsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkJCSAgICAgICJCbGFuayBFWFQgSVJRIHJlc291cmNlXG4iKTsKKwkJCQlyZXR1cm4gQUVfT0s7CiAJCQl9CiAJCQlmb3IgKGkgPSAwOwogCQkJICAgICAoaSA8IHAtPmludGVycnVwdF9jb3VudAogCQkJICAgICAgJiYgaSA8IEFDUElfUENJX0xJTktfTUFYX1BPU1NJQkxFKTsgaSsrKSB7CiAJCQkJaWYgKCFwLT5pbnRlcnJ1cHRzW2ldKSB7Ci0JCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkJCQkgICJJbnZhbGlkIElSUSAlZFxuIiwKLQkJCQkJCQkgIHAtPmludGVycnVwdHNbaV0pKTsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkludmFsaWQgSVJRICVkXG4iLAorCQkJCQkJICAgICAgcC0+aW50ZXJydXB0c1tpXSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQlsaW5rLT5pcnEucG9zc2libGVbaV0gPSBwLT5pbnRlcnJ1cHRzW2ldOwpAQCAtMTY0LDM1ICsxNjAsMzMgQEAKIAkJCWJyZWFrOwogCQl9CiAJZGVmYXVsdDoKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJSZXNvdXJjZSBpcyBub3QgYW4gSVJRIGVudHJ5XG4iKSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlJlc291cmNlIGlzIG5vdCBhbiBJUlEgZW50cnlcbiIpOworCQlyZXR1cm4gQUVfT0s7CiAJfQogCi0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX0NUUkxfVEVSTUlOQVRFKTsKKwlyZXR1cm4gQUVfQ1RSTF9URVJNSU5BVEU7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wY2lfbGlua19nZXRfcG9zc2libGUoc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmspCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfbGlua19nZXRfcG9zc2libGUiKTsKIAogCWlmICghbGluaykKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMobGluay0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fUFJTLAogCQkJCSAgICAgYWNwaV9wY2lfbGlua19jaGVja19wb3NzaWJsZSwgbGluayk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBldmFsdWF0aW5nIF9QUlNcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUFJTIikpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkgICJGb3VuZCAlZCBwb3NzaWJsZSBJUlFzXG4iLAogCQkJICBsaW5rLT5pcnEucG9zc2libGVfY291bnQpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzCkBAIC0yMDAsNyArMTk0LDYgQEAKIHsKIAlpbnQgKmlycSA9IChpbnQgKiljb250ZXh0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfbGlua19jaGVja19jdXJyZW50Iik7CiAKIAlzd2l0Y2ggKHJlc291cmNlLT50eXBlKSB7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSVJROgpAQCAtMjEzLDcgKzIwNiw3IEBACiAJCQkJICovCiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCQkJICAiQmxhbmsgSVJRIHJlc291cmNlXG4iKSk7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKKwkJCQlyZXR1cm4gQUVfT0s7CiAJCQl9CiAJCQkqaXJxID0gcC0+aW50ZXJydXB0c1swXTsKIAkJCWJyZWFrOwpAQCAtMjI3LDIwICsyMjAsMjAgQEAKIAkJCQkgKiBleHRlbmRlZCBJUlEgZGVzY3JpcHRvcnMgbXVzdAogCQkJCSAqIHJldHVybiBhdCBsZWFzdCAxIElSUQogCQkJCSAqLwotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkJCSAgIkJsYW5rIEVYVCBJUlEgcmVzb3VyY2VcbiIpKTsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkJCSAgICAgICJCbGFuayBFWFQgSVJRIHJlc291cmNlXG4iKTsKKwkJCQlyZXR1cm4gQUVfT0s7CiAJCQl9CiAJCQkqaXJxID0gcC0+aW50ZXJydXB0c1swXTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJSZXNvdXJjZSAlZCBpc24ndCBhbiBJUlFcbiIsIHJlc291cmNlLT50eXBlKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlJlc291cmNlICVkIGlzbid0IGFuIElSUVxuIiwgcmVzb3VyY2UtPnR5cGUpOwogCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUc6Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJCXJldHVybiBBRV9PSzsKIAl9Ci0JcmV0dXJuX0FDUElfU1RBVFVTKEFFX0NUUkxfVEVSTUlOQVRFKTsKKwlyZXR1cm4gQUVfQ1RSTF9URVJNSU5BVEU7CiB9CiAKIC8qCkBAIC0yNTYsMTAgKzI0OSw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJaW50IGlycSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9saW5rX2dldF9jdXJyZW50Iik7CiAKIAlpZiAoIWxpbmsgfHwgIWxpbmstPmhhbmRsZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxpbmstPmlycS5hY3RpdmUgPSAwOwogCkBAIC0yNjgsMTQgKzI2MCwxMyBAQAogCQkvKiBRdWVyeSBfU1RBLCBzZXQgbGluay0+ZGV2aWNlLT5zdGF0dXMgKi8KIAkJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3N0YXR1cyhsaW5rLT5kZXZpY2UpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCQkgICJVbmFibGUgdG8gcmVhZCBzdGF0dXNcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byByZWFkIHN0YXR1c1xuIik7CiAJCQlnb3RvIGVuZDsKIAkJfQogCiAJCWlmICghbGluay0+ZGV2aWNlLT5zdGF0dXMuZW5hYmxlZCkgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTGluayBkaXNhYmxlZFxuIikpOwotCQkJcmV0dXJuX1ZBTFVFKDApOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKQEAgLTI4NiwxMyArMjc3LDEzIEBACiAJc3RhdHVzID0gYWNwaV93YWxrX3Jlc291cmNlcyhsaW5rLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19DUlMsCiAJCQkJICAgICBhY3BpX3BjaV9saW5rX2NoZWNrX2N1cnJlbnQsICZpcnEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiRXJyb3IgZXZhbHVhdGluZyBfQ1JTXG4iKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9DUlMiKSk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KIAogCWlmIChhY3BpX3N0cmljdCAmJiAhaXJxKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJfQ1JTIHJldHVybmVkIDBcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiX0NSUyByZXR1cm5lZCAwXG4iKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAl9CiAKQEAgLTMwMSw3ICsyOTIsNyBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkxpbmsgYXQgSVJRICVkIFxuIiwgbGluay0+aXJxLmFjdGl2ZSkpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX3BjaV9saW5rX3NldChzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluaywgaW50IGlycSkKQEAgLTMxNCwxNCArMzA1LDEzIEBACiAJfSAqcmVzb3VyY2U7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgMCwgTlVMTCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfbGlua19zZXQiKTsKIAogCWlmICghbGluayB8fCAhaXJxKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzb3VyY2UgPSBrbWFsbG9jKHNpemVvZigqcmVzb3VyY2UpICsgMSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZXNvdXJjZSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbXNldChyZXNvdXJjZSwgMCwgc2l6ZW9mKCpyZXNvdXJjZSkgKyAxKTsKIAlidWZmZXIubGVuZ3RoID0gc2l6ZW9mKCpyZXNvdXJjZSkgKyAxOwpAQCAtMzYyLDcgKzM1Miw3IEBACiAJCS8qIGlnbm9yZSByZXNvdXJjZV9zb3VyY2UsIGl0J3Mgb3B0aW9uYWwgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJBQ1BJIEJVRzogcmVzb3VyY2VfdHlwZSAlZFxuIiwgbGluay0+aXJxLnJlc291cmNlX3R5cGUpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIFJlc291cmNlX3R5cGUgJWRcbiIsIGxpbmstPmlycS5yZXNvdXJjZV90eXBlKTsKIAkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJZ290byBlbmQ7CiAKQEAgLTM3NCw3ICszNjQsNyBAQAogCiAJLyogY2hlY2sgZm9yIHRvdGFsIGZhaWx1cmUgKi8KIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX1NSU1xuIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfU1JTIikpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0zODIsMTQgKzM3MiwxNCBAQAogCS8qIFF1ZXJ5IF9TVEEsIHNldCBkZXZpY2UtPnN0YXR1cyAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9zdGF0dXMobGluay0+ZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJVbmFibGUgdG8gcmVhZCBzdGF0dXNcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5hYmxlIHRvIHJlYWQgc3RhdHVzXG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCWlmICghbGluay0+ZGV2aWNlLT5zdGF0dXMuZW5hYmxlZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAotCQkgICAgICAgIiVzIFslc10gZGlzYWJsZWQgYW5kIHJlZmVyZW5jZWQsIEJJT1MgYnVnLlxuIiwKLQkJICAgICAgIGFjcGlfZGV2aWNlX25hbWUobGluay0+ZGV2aWNlKSwKLQkJICAgICAgIGFjcGlfZGV2aWNlX2JpZChsaW5rLT5kZXZpY2UpKTsKKwkJCSAgICAgICIlcyBbJXNdIGRpc2FibGVkIGFuZCByZWZlcmVuY2VkLCBCSU9TIGJ1Z1xuIiwKKwkJCSAgICAgIGFjcGlfZGV2aWNlX25hbWUobGluay0+ZGV2aWNlKSwKKwkJCSAgICAgIGFjcGlfZGV2aWNlX2JpZChsaW5rLT5kZXZpY2UpKTsKIAl9CiAKIAkvKiBRdWVyeSBfQ1JTLCBzZXQgbGluay0+aXJxLmFjdGl2ZSAqLwpAQCAtNDA4LDkgKzM5OCw5IEBACiAJCSAqIGFzc3VtZSBfU1JTIHdvcmtlZCBhbmQgb3ZlcnJpZGUgX0NSUyB2YWx1ZS4KIAkJICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCi0JCSAgICAgICAiJXMgWyVzXSBCSU9TIHJlcG9ydGVkIElSUSAlZCwgdXNpbmcgSVJRICVkXG4iLAotCQkgICAgICAgYWNwaV9kZXZpY2VfbmFtZShsaW5rLT5kZXZpY2UpLAotCQkgICAgICAgYWNwaV9kZXZpY2VfYmlkKGxpbmstPmRldmljZSksIGxpbmstPmlycS5hY3RpdmUsIGlycSk7CisJCQkgICAgICAiJXMgWyVzXSBCSU9TIHJlcG9ydGVkIElSUSAlZCwgdXNpbmcgSVJRICVkXG4iLAorCQkJICAgICAgYWNwaV9kZXZpY2VfbmFtZShsaW5rLT5kZXZpY2UpLAorCQkJICAgICAgYWNwaV9kZXZpY2VfYmlkKGxpbmstPmRldmljZSksIGxpbmstPmlycS5hY3RpdmUsIGlycSk7CiAJCWxpbmstPmlycS5hY3RpdmUgPSBpcnE7CiAJfQogCkBAIC00MTgsNyArNDA4LDcgQEAKIAogICAgICAgZW5kOgogCWtmcmVlKHJlc291cmNlKTsKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDkyLDcgKzQ4Miw2IEBACiAJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwogCWludCBpID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfaXJxX3BlbmFsdHlfaW5pdCIpOwogCiAJLyoKIAkgKiBVcGRhdGUgcGVuYWx0aWVzIHRvIGZhY2lsaXRhdGUgSVJRIGJhbGFuY2luZy4KQEAgLTUwMSw4ICs0OTAsNyBAQAogCiAJCWxpbmsgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBhY3BpX3BjaV9saW5rLCBub2RlKTsKIAkJaWYgKCFsaW5rKSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCQkgICJJbnZhbGlkIGxpbmsgY29udGV4dFxuIikpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNTMwLDcgKzUxOCw3IEBACiAJLyogQWRkIGEgcGVuYWx0eSBmb3IgdGhlIFNDSSAqLwogCWFjcGlfaXJxX3BlbmFsdHlbYWNwaV9mYWR0LnNjaV9pbnRdICs9IFBJUlFfUEVOQUxUWV9QQ0lfVVNJTkc7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9pcnFfYmFsYW5jZTsJLyogMDogc3RhdGljLCAxOiBiYWxhbmNlICovCkBAIC01NDAsMTMgKzUyOCwxMiBAQAogCWludCBpcnE7CiAJaW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9saW5rX2FsbG9jYXRlIik7CiAKIAlpZiAobGluay0+aXJxLmluaXRpYWxpemVkKSB7CiAJCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkKIAkJCS8qIFRoaXMgbWVhbnMgdGhlIGxpbmsgaXMgZGlzYWJsZWQgYnV0IGluaXRpYWxpemVkICovCiAJCQlhY3BpX3BjaV9saW5rX3NldChsaW5rLCBsaW5rLT5pcnEuYWN0aXZlKTsKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtNTYyLDcgKzU0OSw3IEBACiAJaWYgKGkgPT0gbGluay0+aXJxLnBvc3NpYmxlX2NvdW50KSB7CiAJCWlmIChhY3BpX3N0cmljdCkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJfQ1JTICVkIG5vdCBmb3VuZCIKLQkJCSAgICAgICAiIGluIF9QUlNcbiIsIGxpbmstPmlycS5hY3RpdmUpOworCQkJCSAgICAgICIgaW4gX1BSU1xuIiwgbGluay0+aXJxLmFjdGl2ZSk7CiAJCWxpbmstPmlycS5hY3RpdmUgPSAwOwogCX0KIApAQCAtNTg5LDEyICs1NzYsMTEgQEAKIAogCS8qIEF0dGVtcHQgdG8gZW5hYmxlIHRoZSBsaW5rIGRldmljZSBhdCB0aGlzIElSUS4gKi8KIAlpZiAoYWNwaV9wY2lfbGlua19zZXQobGluaywgaXJxKSkgewotCQlwcmludGsoUFJFRklYCi0JCSAgICAgICAiVW5hYmxlIHRvIHNldCBJUlEgZm9yICVzIFslc10gKGxpa2VseSBidWdneSBBQ1BJIEJJT1MpLlxuIgotCQkgICAgICAgIlRyeSBwY2k9bm9hY3BpIG9yIGFjcGk9b2ZmXG4iLAotCQkgICAgICAgYWNwaV9kZXZpY2VfbmFtZShsaW5rLT5kZXZpY2UpLAotCQkgICAgICAgYWNwaV9kZXZpY2VfYmlkKGxpbmstPmRldmljZSkpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byBzZXQgSVJRIGZvciAlcyBbJXNdLiAiCisJCQkgICAgIlRyeSBwY2k9bm9hY3BpIG9yIGFjcGk9b2ZmXG4iLAorCQkJICAgIGFjcGlfZGV2aWNlX25hbWUobGluay0+ZGV2aWNlKSwKKwkJCSAgICBhY3BpX2RldmljZV9iaWQobGluay0+ZGV2aWNlKSk7CisJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7CiAJCWFjcGlfaXJxX3BlbmFsdHlbbGluay0+aXJxLmFjdGl2ZV0gKz0gUElSUV9QRU5BTFRZX1BDSV9VU0lORzsKIAkJcHJpbnRrKFBSRUZJWCAiJXMgWyVzXSBlbmFibGVkIGF0IElSUSAlZFxuIiwKQEAgLTYwNCw3ICs1OTAsNyBAQAogCiAJbGluay0+aXJxLmluaXRpYWxpemVkID0gMTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTYyMiwzNiArNjA4LDM1IEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX2xpbmtfYWxsb2NhdGVfaXJxIik7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CiAJaWYgKHJlc3VsdCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBsaW5rIGRldmljZVxuIikpOwotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGxpbmsgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWxpbmsgPSAoc3RydWN0IGFjcGlfcGNpX2xpbmsgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJaWYgKCFsaW5rKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIGxpbmsgY29udGV4dFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGxpbmsgY29udGV4dFxuIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAkvKiBUQkQ6IFN1cHBvcnQgbXVsdGlwbGUgaW5kZXggKElSUSkgZW50cmllcyBwZXIgTGluayBEZXZpY2UgKi8KIAlpZiAoaW5kZXgpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgaW5kZXggJWRcbiIsIGluZGV4KSk7Ci0JCXJldHVybl9WQUxVRSgtMSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgaW5kZXggJWRcbiIsIGluZGV4KTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCW11dGV4X2xvY2soJmFjcGlfbGlua19sb2NrKTsKIAlpZiAoYWNwaV9wY2lfbGlua19hbGxvY2F0ZShsaW5rKSkgewogCQltdXRleF91bmxvY2soJmFjcGlfbGlua19sb2NrKTsKLQkJcmV0dXJuX1ZBTFVFKC0xKTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghbGluay0+aXJxLmFjdGl2ZSkgewogCQltdXRleF91bmxvY2soJmFjcGlfbGlua19sb2NrKTsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkxpbmsgYWN0aXZlIElSUSBpcyAwIVxuIikpOwotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJMaW5rIGFjdGl2ZSBJUlEgaXMgMCFcbiIpOworCQlyZXR1cm4gLTE7CiAJfQogCWxpbmstPnJlZmNudCsrOwogCW11dGV4X3VubG9jaygmYWNwaV9saW5rX2xvY2spOwpAQCAtNjY1LDcgKzY1MCw3IEBACiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAiTGluayAlcyBpcyByZWZlcmVuY2VkXG4iLAogCQkJICBhY3BpX2RldmljZV9iaWQobGluay0+ZGV2aWNlKSkpOwotCXJldHVybl9WQUxVRShsaW5rLT5pcnEuYWN0aXZlKTsKKwlyZXR1cm4gKGxpbmstPmlycS5hY3RpdmUpOwogfQogCiAvKgpAQCAtNjc4LDI1ICs2NjMsMjQgQEAKIAlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluayA9IE5VTEw7CiAJYWNwaV9zdGF0dXMgcmVzdWx0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfbGlua19mcmVlX2lycSIpOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZkZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgbGluayBkZXZpY2VcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC0xKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGRldmljZVxuIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAlsaW5rID0gKHN0cnVjdCBhY3BpX3BjaV9saW5rICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWlmICghbGluaykgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC0xKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJbXV0ZXhfbG9jaygmYWNwaV9saW5rX2xvY2spOwogCWlmICghbGluay0+aXJxLmluaXRpYWxpemVkKSB7CiAJCW11dGV4X3VubG9jaygmYWNwaV9saW5rX2xvY2spOwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiTGluayBpc24ndCBpbml0aWFsaXplZFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJMaW5rIGlzbid0IGluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIC0xOwogCX0KICNpZmRlZglGVVRVUkVfVVNFCiAJLyoKQEAgLTcxOCw3ICs3MDIsNyBAQAogCQlhY3BpX3V0X2V2YWx1YXRlX29iamVjdChsaW5rLT5oYW5kbGUsICJfRElTIiwgMCwgTlVMTCk7CiAJfQogCW11dGV4X3VubG9jaygmYWNwaV9saW5rX2xvY2spOwotCXJldHVybl9WQUxVRShsaW5rLT5pcnEuYWN0aXZlKTsKKwlyZXR1cm4gKGxpbmstPmlycS5hY3RpdmUpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzMyLDE0ICs3MTYsMTMgQEAKIAlpbnQgaSA9IDA7CiAJaW50IGZvdW5kID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX2xpbmtfYWRkIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wY2lfbGluayksIEdGUF9LRVJORUwpOwogCWlmICghbGluaykKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9saW5rKSk7CiAKIAlsaW5rLT5kZXZpY2UgPSBkZXZpY2U7CkBAIC03ODgsMTcgKzc3MSwxNiBAQAogCWlmIChyZXN1bHQpCiAJCWtmcmVlKGxpbmspOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX3BjaV9saW5rX3Jlc3VtZShzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluaykKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9saW5rX3Jlc3VtZSIpOwogCiAJaWYgKGxpbmstPnJlZmNudCAmJiBsaW5rLT5pcnEuYWN0aXZlICYmIGxpbmstPmlycS5pbml0aWFsaXplZCkKLQkJcmV0dXJuX1ZBTFVFKGFjcGlfcGNpX2xpbmtfc2V0KGxpbmssIGxpbmstPmlycS5hY3RpdmUpKTsKKwkJcmV0dXJuIChhY3BpX3BjaV9saW5rX3NldChsaW5rLCBsaW5rLT5pcnEuYWN0aXZlKSk7CiAJZWxzZQotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogfQogCiAvKgpAQCAtODExLDcgKzc5Myw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiaXJxcm91dGVyX3Jlc3VtZSIpOwogCiAJLyogTWFrZSBzdXJlIFNDSSBpcyBlbmFibGVkIGFnYWluIChBcHBsZSBmaXJtd2FyZSBidWc/KSAqLwogCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1NDSV9FTkFCTEUsIDEsIEFDUElfTVRYX0RPX05PVF9MT0NLKTsKQEAgLTgyMCwyNCArODAxLDIyIEBACiAJbGlzdF9mb3JfZWFjaChub2RlLCAmYWNwaV9saW5rLmVudHJpZXMpIHsKIAkJbGluayA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGFjcGlfcGNpX2xpbmssIG5vZGUpOwogCQlpZiAoIWxpbmspIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkludmFsaWQgbGluayBjb250ZXh0XG4iKSk7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGxpbmsgY29udGV4dFxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCQlhY3BpX3BjaV9saW5rX3Jlc3VtZShsaW5rKTsKIAl9CiAJYWNwaV9pbl9yZXN1bWUgPSAwOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3BjaV9saW5rX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfbGlua19yZW1vdmUiKTsKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsaW5rID0gKHN0cnVjdCBhY3BpX3BjaV9saW5rICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCkBAIC04NDcsNyArODI2LDcgQEAKIAogCWtmcmVlKGxpbmspOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtOTUzLDM0ICs5MzIsMzIgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJpcnFyb3V0ZXJfaW5pdF9zeXNmcyIpOwogCiAJaWYgKGFjcGlfZGlzYWJsZWQgfHwgYWNwaV9ub2lycSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpcnFyb3V0ZXJfc3lzZGV2X2NsYXNzKTsKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2lycXJvdXRlcik7CiAKLQlyZXR1cm5fVkFMVUUoZXJyb3IpOworCXJldHVybiBlcnJvcjsKIH0KIAogZGV2aWNlX2luaXRjYWxsKGlycXJvdXRlcl9pbml0X3N5c2ZzKTsKIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9wY2lfbGlua19pbml0KHZvaWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfbGlua19pbml0Iik7CiAKIAlpZiAoYWNwaV9ub2lycSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCWFjcGlfbGluay5jb3VudCA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmFjcGlfbGluay5lbnRyaWVzKTsKIAogCWlmIChhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcGNpX2xpbmtfZHJpdmVyKSA8IDApCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChhY3BpX3BjaV9saW5rX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA0YzMxM2VhLi44ZjEwNDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMTYwLDE0ICsxNjAsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wY2lfcm9vdF9hZGQiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcm9vdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9yb290KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyb290KQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChyb290LCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfcGNpX3Jvb3QpKTsKIAlJTklUX0xJU1RfSEVBRCgmcm9vdC0+bm9kZSk7CiAKQEAgLTE5OCw3ICsxOTcsNyBAQAogCQlyb290LT5pZC5zZWdtZW50ID0gMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX1NFR1xuIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfU0VHIikpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0yMTksNyArMjE4LDcgQEAKIAkJcm9vdC0+aWQuYnVzID0gMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX0JCTlxuIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfQkJOIikpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0yMzEsOCArMjMwLDkgQEAKIAkJCWludCBidXMgPSAwOwogCQkJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCQkgICJXcm9uZyBfQkJOIHZhbHVlLCBwbGVhc2UgcmVib290IGFuZCB1c2luZyBvcHRpb24gJ3BjaT1ub2FjcGknXG4iKSk7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJICAgICJXcm9uZyBfQkJOIHZhbHVlLCByZWJvb3QiCisJCQkJICAgICIgYW5kIHVzZSBvcHRpb24gJ3BjaT1ub2FjcGknXG4iKTsKIAogCQkJc3RhdHVzID0gdHJ5X2dldF9yb290X2JyaWRnZV9idXNucihyb290LT5oYW5kbGUsICZidXMpOwogCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpAQCAtMjczLDkgKzI3Myw5IEBACiAJICovCiAJcm9vdC0+YnVzID0gcGNpX2FjcGlfc2Nhbl9yb290KGRldmljZSwgcm9vdC0+aWQuc2VnbWVudCwgcm9vdC0+aWQuYnVzKTsKIAlpZiAoIXJvb3QtPmJ1cykgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkJ1cyAlMDR4OiUwMnggbm90IHByZXNlbnQgaW4gUENJIG5hbWVzcGFjZVxuIiwKLQkJCQkgIHJvb3QtPmlkLnNlZ21lbnQsIHJvb3QtPmlkLmJ1cykpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkgICAgIkJ1cyAlMDR4OiUwMnggbm90IHByZXNlbnQgaW4gUENJIG5hbWVzcGFjZVxuIiwKKwkJCSAgICByb290LT5pZC5zZWdtZW50LCByb290LT5pZC5idXMpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0zMDYsNDYgKzMwNiw0MyBAQAogCQlrZnJlZShyb290KTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfcGNpX3Jvb3Rfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3Q7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9yb290X3N0YXJ0Iik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJvb3QsICZhY3BpX3BjaV9yb290cywgbm9kZSkgewogCQlpZiAocm9vdC0+aGFuZGxlID09IGRldmljZS0+aGFuZGxlKSB7CiAJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKHJvb3QtPmJ1cyk7Ci0JCQlyZXR1cm5fVkFMVUUoMCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wY2lfcm9vdF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewogCXN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290ID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcGNpX3Jvb3RfcmVtb3ZlIik7CiAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcm9vdCA9IChzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCWtmcmVlKHJvb3QpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BjaV9yb290X2luaXQodm9pZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3BjaV9yb290X2luaXQiKTsKIAogCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCS8qIERFQlVHOgogCSAgIGFjcGlfZGJnX2xheWVyID0gQUNQSV9QQ0lfQ09NUE9ORU5UOwpAQCAtMzUzLDkgKzM1MCw5IEBACiAJICovCiAKIAlpZiAoYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjaV9yb290X2RyaXZlcikgPCAwKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoYWNwaV9wY2lfcm9vdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wb3dlci5jIGIvZHJpdmVycy9hY3BpL3Bvd2VyLmMKaW5kZXggNjJhNTU5NS4uMjI0ZjcyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMKKysrIGIvZHJpdmVycy9hY3BpL3Bvd2VyLmMKQEAgLTk4LDIzICs5OCwyMSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcG93ZXJfZ2V0X2NvbnRleHQiKTsKIAogCWlmICghcmVzb3VyY2UpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CiAJaWYgKHJlc3VsdCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1dBUk4sICJFcnJvciBnZXR0aW5nIGNvbnRleHQgWyVwXVxuIiwKLQkJCQkgIGhhbmRsZSkpOwotCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkdldHRpbmcgY29udGV4dCBbJXBdXG4iLCBoYW5kbGUpOworCQlyZXR1cm4gcmVzdWx0OwogCX0KIAogCSpyZXNvdXJjZSA9IChzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpZiAoIXJlc291cmNlKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcG93ZXJfZ2V0X3N0YXRlKHN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlICpyZXNvdXJjZSkKQEAgLTEyMiwxNCArMTIwLDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5zaWduZWQgbG9uZyBzdGEgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wb3dlcl9nZXRfc3RhdGUiKTsKIAogCWlmICghcmVzb3VyY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIocmVzb3VyY2UtPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoc3RhICYgMHgwMSkKIAkJcmVzb3VyY2UtPnN0YXRlID0gQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTjsKQEAgLTEzOSw3ICsxMzYsNyBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlJlc291cmNlIFslc10gaXMgJXNcbiIsCiAJCQkgIHJlc291cmNlLT5uYW1lLCByZXNvdXJjZS0+c3RhdGUgPyAib24iIDogIm9mZiIpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Bvd2VyX2dldF9saXN0X3N0YXRlKHN0cnVjdCBhY3BpX2hhbmRsZV9saXN0ICpsaXN0LCBpbnQgKnN0YXRlKQpAQCAtMTQ4LDIwICsxNDUsMTkgQEAKIAlzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBOVUxMOwogCXUzMiBpID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcG93ZXJfZ2V0X2xpc3Rfc3RhdGUiKTsKIAogCWlmICghbGlzdCB8fCAhc3RhdGUpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgJ29uJyBJRkYgYWxsIHJlc291cmNlcyBhcmUgJ29uJy4gKi8KIAogCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5jb3VudDsgaSsrKSB7CiAJCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X2NvbnRleHQobGlzdC0+aGFuZGxlc1tpXSwgJnJlc291cmNlKTsKIAkJaWYgKHJlc3VsdCkKLQkJCXJldHVybl9WQUxVRShyZXN1bHQpOworCQkJcmV0dXJuIHJlc3VsdDsKIAkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfc3RhdGUocmVzb3VyY2UpOwogCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCQlyZXR1cm4gcmVzdWx0OwogCiAJCSpzdGF0ZSA9IHJlc291cmNlLT5zdGF0ZTsKIApAQCAtMTcyLDcgKzE2OCw3IEBACiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiUmVzb3VyY2UgbGlzdCBpcyAlc1xuIiwKIAkJCSAgKnN0YXRlID8gIm9uIiA6ICJvZmYiKSk7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfcG93ZXJfb24oYWNwaV9oYW5kbGUgaGFuZGxlKQpAQCAtMTgyLDExICsxNzgsMTAgQEAKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcG93ZXJfb24iKTsKIAogCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X2NvbnRleHQoaGFuZGxlLCAmcmVzb3VyY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJcmVzb3VyY2UtPnJlZmVyZW5jZXMrKzsKIApAQCAtMTk0LDI5ICsxODksMjkgQEAKIAkgICAgfHwgKHJlc291cmNlLT5zdGF0ZSA9PSBBQ1BJX1BPV0VSX1JFU09VUkNFX1NUQVRFX09OKSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJSZXNvdXJjZSBbJXNdIGFscmVhZHkgb25cbiIsCiAJCQkJICByZXNvdXJjZS0+bmFtZSkpOwotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCX0KIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHJlc291cmNlLT5oYW5kbGUsICJfT04iLCBOVUxMLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXN1bHQgPSBhY3BpX3Bvd2VyX2dldF9zdGF0ZShyZXNvdXJjZSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAJaWYgKHJlc291cmNlLT5zdGF0ZSAhPSBBQ1BJX1BPV0VSX1JFU09VUkNFX1NUQVRFX09OKQotCQlyZXR1cm5fVkFMVUUoLUVOT0VYRUMpOworCQlyZXR1cm4gLUVOT0VYRUM7CiAKIAkvKiBVcGRhdGUgdGhlIHBvd2VyIHJlc291cmNlJ3MgX2RldmljZV8gcG93ZXIgc3RhdGUgKi8KIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKHJlc291cmNlLT5oYW5kbGUsICZkZXZpY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCWRldmljZS0+cG93ZXIuc3RhdGUgPSBBQ1BJX1NUQVRFX0QwOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiUmVzb3VyY2UgWyVzXSB0dXJuZWQgb25cbiIsCiAJCQkgIHJlc291cmNlLT5uYW1lKSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wb3dlcl9vZmZfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKQEAgLTIyNiwxMSArMjIxLDEwIEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlICpyZXNvdXJjZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Bvd2VyX29mZl9kZXZpY2UiKTsKIAogCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X2NvbnRleHQoaGFuZGxlLCAmcmVzb3VyY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJaWYgKHJlc291cmNlLT5yZWZlcmVuY2VzKQogCQlyZXNvdXJjZS0+cmVmZXJlbmNlcy0tOwpAQCAtMjM5LDM1ICsyMzMsMzUgQEAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIlJlc291cmNlIFslc10gaXMgc3RpbGwgaW4gdXNlLCBkZXJlZmVyZW5jaW5nXG4iLAogCQkJCSAgZGV2aWNlLT5wbnAuYnVzX2lkKSk7Ci0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHJlc291cmNlLT5zdGF0ZSA9PSBBQ1BJX1BPV0VSX1JFU09VUkNFX1NUQVRFX09GRikgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJSZXNvdXJjZSBbJXNdIGFscmVhZHkgb2ZmXG4iLAogCQkJCSAgZGV2aWNlLT5wbnAuYnVzX2lkKSk7Ci0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QocmVzb3VyY2UtPmhhbmRsZSwgIl9PRkYiLCBOVUxMLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXN1bHQgPSBhY3BpX3Bvd2VyX2dldF9zdGF0ZShyZXNvdXJjZSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAJaWYgKHJlc291cmNlLT5zdGF0ZSAhPSBBQ1BJX1BPV0VSX1JFU09VUkNFX1NUQVRFX09GRikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9FWEVDKTsKKwkJcmV0dXJuIC1FTk9FWEVDOwogCiAJLyogVXBkYXRlIHRoZSBwb3dlciByZXNvdXJjZSdzIF9kZXZpY2VfIHBvd2VyIHN0YXRlICovCiAJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X2RldmljZShyZXNvdXJjZS0+aGFuZGxlLCAmZGV2aWNlKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAlkZXZpY2UtPnBvd2VyLnN0YXRlID0gQUNQSV9TVEFURV9EMzsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlJlc291cmNlIFslc10gdHVybmVkIG9mZlxuIiwKIAkJCSAgcmVzb3VyY2UtPm5hbWUpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTI4MywzMSArMjc3LDI5IEBACiAJaW50IGk7CiAJaW50IHJldCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyIik7CiAJaWYgKCFkZXYgfHwgIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkKQotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlyZXR1cm4gLTE7CiAKIAlhcmcuaW50ZWdlci52YWx1ZSA9IDE7CiAJLyogT3BlbiBwb3dlciByZXNvdXJjZSAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXYtPndha2V1cC5yZXNvdXJjZXMuY291bnQ7IGkrKykgewogCQlyZXQgPSBhY3BpX3Bvd2VyX29uKGRldi0+d2FrZXVwLnJlc291cmNlcy5oYW5kbGVzW2ldKTsKIAkJaWYgKHJldCkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiRXJyb3IgdHJhbnNpdGlvbiBwb3dlciBzdGF0ZVxuIikpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVHJhbnNpdGlvbiBwb3dlciBzdGF0ZVxuIik7CiAJCQlkZXYtPndha2V1cC5mbGFncy52YWxpZCA9IDA7Ci0JCQlyZXR1cm5fVkFMVUUoLTEpOworCQkJcmV0dXJuIC0xOwogCQl9CiAJfQogCiAJLyogRXhlY3V0ZSBQU1cgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXYtPmhhbmRsZSwgIl9QU1ciLCAmYXJnX2xpc3QsIE5VTEwpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSAmJiAoc3RhdHVzICE9IEFFX05PVF9GT1VORCkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRlIF9QU1dcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXZhbHVhdGUgX1BTV1xuIik7CiAJCWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkID0gMDsKIAkJcmV0ID0gLTE7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTMyMywzMiArMzE1LDMwIEBACiAJaW50IGk7CiAJaW50IHJldCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlciIpOwogCiAJaWYgKCFkZXYgfHwgIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkKQotCQlyZXR1cm5fVkFMVUUoLTEpOworCQlyZXR1cm4gLTE7CiAKIAlhcmcuaW50ZWdlci52YWx1ZSA9IDA7CiAJLyogRXhlY3V0ZSBQU1cgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXYtPmhhbmRsZSwgIl9QU1ciLCAmYXJnX2xpc3QsIE5VTEwpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSAmJiAoc3RhdHVzICE9IEFFX05PVF9GT1VORCkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRlIF9QU1dcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXZhbHVhdGUgX1BTV1xuIik7CiAJCWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkID0gMDsKLQkJcmV0dXJuX1ZBTFVFKC0xKTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCS8qIENsb3NlIHBvd2VyIHJlc291cmNlICovCiAJZm9yIChpID0gMDsgaSA8IGRldi0+d2FrZXVwLnJlc291cmNlcy5jb3VudDsgaSsrKSB7CiAJCXJldCA9IGFjcGlfcG93ZXJfb2ZmX2RldmljZShkZXYtPndha2V1cC5yZXNvdXJjZXMuaGFuZGxlc1tpXSk7CiAJCWlmIChyZXQpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkVycm9yIHRyYW5zaXRpb24gcG93ZXIgc3RhdGVcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlRyYW5zaXRpb24gcG93ZXIgc3RhdGVcbiIpOwogCQkJZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgPSAwOwotCQkJcmV0dXJuX1ZBTFVFKC0xKTsKKwkJCXJldHVybiAtMTsKIAkJfQogCX0KIAotCXJldHVybl9WQUxVRShyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNjIsMTAgKzM1Miw5IEBACiAJaW50IGxpc3Rfc3RhdGUgPSAwOwogCWludCBpID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcG93ZXJfZ2V0X2luZmVycmVkX3N0YXRlIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRldmljZS0+cG93ZXIuc3RhdGUgPSBBQ1BJX1NUQVRFX1VOS05PV047CiAKQEAgLTM4MCwxNyArMzY5LDE3IEBACiAKIAkJcmVzdWx0ID0gYWNwaV9wb3dlcl9nZXRfbGlzdF9zdGF0ZShsaXN0LCAmbGlzdF9zdGF0ZSk7CiAJCWlmIChyZXN1bHQpCi0JCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJCXJldHVybiByZXN1bHQ7CiAKIAkJaWYgKGxpc3Rfc3RhdGUgPT0gQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTikgewogCQkJZGV2aWNlLT5wb3dlci5zdGF0ZSA9IGk7Ci0JCQlyZXR1cm5fVkFMVUUoMCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAogCWRldmljZS0+cG93ZXIuc3RhdGUgPSBBQ1BJX1NUQVRFX0QzOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBpbnQgYWNwaV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpCkBAIC00MDAsMTQgKzM4OSwxMyBAQAogCXN0cnVjdCBhY3BpX2hhbmRsZV9saXN0ICp0bCA9IE5VTEw7CS8qIFRhcmdldCBSZXNvdXJjZXMgKi8KIAlpbnQgaSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Bvd2VyX3RyYW5zaXRpb24iKTsKIAogCWlmICghZGV2aWNlIHx8IChzdGF0ZSA8IEFDUElfU1RBVEVfRDApIHx8IChzdGF0ZSA+IEFDUElfU1RBVEVfRDMpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChkZXZpY2UtPnBvd2VyLnN0YXRlIDwgQUNQSV9TVEFURV9EMCkKIAkgICAgfHwgKGRldmljZS0+cG93ZXIuc3RhdGUgPiBBQ1BJX1NUQVRFX0QzKSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNsID0gJmRldmljZS0+cG93ZXIuc3RhdGVzW2RldmljZS0+cG93ZXIuc3RhdGVdLnJlc291cmNlczsKIAl0bCA9ICZkZXZpY2UtPnBvd2VyLnN0YXRlc1tzdGF0ZV0ucmVzb3VyY2VzOwpAQCAtNDQ0LDExICs0MzIsMTAgQEAKIAlkZXZpY2UtPnBvd2VyLnN0YXRlID0gc3RhdGU7CiAgICAgICBlbmQ6CiAJaWYgKHJlc3VsdCkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCSAgIkVycm9yIHRyYW5zaXRpb25pbmcgZGV2aWNlIFslc10gdG8gRCVkXG4iLAotCQkJCSAgZGV2aWNlLT5wbnAuYnVzX2lkLCBzdGF0ZSkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVHJhbnNpdGlvbmluZyBkZXZpY2UgWyVzXSB0byBEJWRcbiIsCisJCQkgICAgICBkZXZpY2UtPnBucC5idXNfaWQsIHN0YXRlKTsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjEsNyArNDQ4LDYgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wb3dlcl9zZXFfc2hvdyIpOwogCiAJcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKilzZXEtPnByaXZhdGU7CiAKQEAgLTQ4OCw3ICs0NzQsNyBAQAogCQkgICByZXNvdXJjZS0+b3JkZXIsIHJlc291cmNlLT5yZWZlcmVuY2VzKTsKIAogICAgICAgZW5kOgotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Bvd2VyX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01MDAsMzYgKzQ4NiwzMiBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wb3dlcl9hZGRfZnMiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IHByb2NfbWtkaXIoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCiAJCQkJCQkgICAgIGFjcGlfcG93ZXJfZGlyKTsKIAkJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qICdzdGF0dXMnIFtSXSAqLwogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoQUNQSV9QT1dFUl9GSUxFX1NUQVRVUywKIAkJCQkgIFNfSVJVR08sIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJyVzJyBmcyBlbnRyeVxuIiwKLQkJCQkgIEFDUElfUE9XRVJfRklMRV9TVEFUVVMpKTsKKwkJcmV0dXJuIC1FSU87CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9wb3dlcl9mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wb3dlcl9yZW1vdmVfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wb3dlcl9yZW1vdmVfZnMiKTsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BPV0VSX0ZJTEVfU1RBVFVTLApAQCAtNTM4LDcgKzUyMCw3IEBACiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gTlVMTDsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NTMsMTQgKzUzNSwxMyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0IGFjcGlfb2JqZWN0OwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IHNpemVvZihhY3BpX29iamVjdCksICZhY3BpX29iamVjdCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wb3dlcl9hZGQiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzb3VyY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwogCWlmICghcmVzb3VyY2UpCi0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KHJlc291cmNlLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UpKTsKIAogCXJlc291cmNlLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTYwNSwxNyArNTg2LDE2IEBACiAJaWYgKHJlc3VsdCkKIAkJa2ZyZWUocmVzb3VyY2UpOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Bvd2VyX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcG93ZXJfcmVtb3ZlIik7CiAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKQEAgLTYyMywzMSArNjAzLDMwIEBACiAKIAlrZnJlZShyZXNvdXJjZSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcG93ZXJfaW5pdCh2b2lkKQogewogCWludCByZXN1bHQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wb3dlcl9pbml0Iik7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZhY3BpX3Bvd2VyX3Jlc291cmNlX2xpc3QpOwogCiAJYWNwaV9wb3dlcl9kaXIgPSBwcm9jX21rZGlyKEFDUElfUE9XRVJfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9wb3dlcl9kaXIpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcG93ZXJfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BPV0VSX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChhY3BpX3Bvd2VyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBkZWNhZWJiLi41MjY3NDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtMTIyLDEwICsxMjIsOSBAQAogCXU4IHZhbHVlMSA9IDA7CiAJdTggdmFsdWUyID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2VycmF0YV9waWl4NCIpOwogCiAJaWYgKCFkZXYpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgogCSAqIE5vdGUgdGhhdCAnZGV2JyByZWZlcmVuY2VzIHRoZSBQSUlYNCBBQ1BJIENvbnRyb2xsZXIuCkBAIC0yMTgsNyArMjE3LDcgQEAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIlR5cGUtRiBETUEgbGl2ZWxvY2sgZXJyYXR1bSAoQzMgZGlzYWJsZWQpXG4iKSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZXJyYXRhKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCkBAIC0yMjYsMTAgKzIyNSw5IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEiKTsKIAogCWlmICghcHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgogCSAqIFBJSVg0CkBAIC0yNDIsNyArMjQwLDcgQEAKIAkJcGNpX2Rldl9wdXQoZGV2KTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjU4LDEwICsyNTYsOSBAQAogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpwZGNfaW4gPSBwci0+cGRjOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyIpOwogCiAJaWYgKCFwZGNfaW4pCi0JCXJldHVybl9WQUxVRShzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOwogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QocHItPmhhbmRsZSwgIl9QREMiLCBwZGNfaW4sIE5VTEwpOwogCkBAIC0yNjksNyArMjY2LDcgQEAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkgICAgIkNvdWxkIG5vdCBldmFsdWF0ZSBfUERDLCB1c2luZyBsZWdhY3kgcGVyZi4gY29udHJvbC4uLlxuIikpOwogCi0JcmV0dXJuX1ZBTFVFKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4Miw3ICsyNzksNiBAQAogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfaW5mb19zZXFfc2hvdyIpOwogCiAJaWYgKCFwcikKIAkJZ290byBlbmQ7CkBAIC0zMDEsNyArMjk3LDcgQEAKIAkJICAgcHItPmZsYWdzLmxpbWl0ID8gInllcyIgOiAibm8iKTsKIAogICAgICAgZW5kOgotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0zMTQsMTMgKzMxMCwxMiBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfYWRkX2ZzIik7CiAKIAlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKIAkJCQkJCSAgICAgYWNwaV9wcm9jZXNzb3JfZGlyKTsKIAkJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAlhY3BpX2RldmljZV9kaXIoZGV2aWNlKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIApAQCAtMzI4LDkgKzMyMyw3IEBACiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9GSUxFX0lORk8sCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1BST0NFU1NPUl9GSUxFX0lORk8pKTsKKwkJcmV0dXJuIC1FSU87CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9wcm9jZXNzb3JfaW5mb19mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTM0Miw5ICszMzUsNyBAQAogCQkJCSAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCSAgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwogCWlmICghZW50cnkpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnIGZzIGVudHJ5XG4iLAotCQkJCSAgQUNQSV9QUk9DRVNTT1JfRklMRV9USFJPVFRMSU5HKSk7CisJCXJldHVybiAtRUlPOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC0zNTYsMjEgKzM0NywxOCBAQAogCQkJCSAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCSAgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwogCWlmICghZW50cnkpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnIGZzIGVudHJ5XG4iLAotCQkJCSAgQUNQSV9QUk9DRVNTT1JfRklMRV9MSU1JVCkpOworCQlyZXR1cm4gLUVJTzsKIAllbHNlIHsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX3Byb2Nlc3Nvcl9saW1pdF9mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9yZW1vdmVfZnMiKTsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9GSUxFX0lORk8sCkBAIC0zODMsNyArMzcxLDcgQEAKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBOVUxMOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogVXNlIHRoZSBhY3BpaWQgaW4gTUFEVCB0byBtYXAgY3B1cyBpbiBjYXNlIG9mIFNNUCAqLwpAQCAtNDMwLDEwICs0MTgsOSBAQAogCWludCBjcHVfaW5kZXg7CiAJc3RhdGljIGludCBjcHUwX2luaXRpYWxpemVkOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZ2V0X2luZm8iKTsKIAogCWlmICghcHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQogCQllcnJhdGEuc21wID0gVFJVRTsKQEAgLTQ1OSw5ICs0NDYsOCBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHByLT5oYW5kbGUsIE5VTEwsIE5VTEwsICZidWZmZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIGV2YWx1YXRpbmcgcHJvY2Vzc29yIG9iamVjdFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkV2YWx1YXRpbmcgcHJvY2Vzc29yIG9iamVjdFxuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qCkBAIC00OTAsMTAgKzQ3NiwxMCBAQAogCWlmIChjcHVfaW5kZXggPT0gLTEpIHsKIAkJaWYgKEFDUElfRkFJTFVSRQogCQkgICAgKGFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0KHByLT5oYW5kbGUsICZwci0+aWQpKSkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiRXJyb3IgZ2V0dGluZyBjcHVpbmRleCBmb3IgYWNwaWlkIDB4JXhcbiIsCi0JCQkJCSAgcHItPmFjcGlfaWQpKTsKLQkJCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkgICAgIkdldHRpbmcgY3B1aW5kZXggZm9yIGFjcGlpZCAweCV4XG4iLAorCQkJCSAgICBwci0+YWNwaV9pZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIApAQCAtNTAzLDggKzQ4OSw4IEBACiAJaWYgKCFvYmplY3QucHJvY2Vzc29yLnBibGtfYWRkcmVzcykKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTm8gUEJMSyAoTlVMTCBhZGRyZXNzKVxuIikpOwogCWVsc2UgaWYgKG9iamVjdC5wcm9jZXNzb3IucGJsa19sZW5ndGggIT0gNikKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgUEJMSyBsZW5ndGggWyVkXVxuIiwKLQkJCQkgIG9iamVjdC5wcm9jZXNzb3IucGJsa19sZW5ndGgpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBQQkxLIGxlbmd0aCBbJWRdXG4iLAorCQkJICAgIG9iamVjdC5wcm9jZXNzb3IucGJsa19sZW5ndGgpOwogCWVsc2UgewogCQlwci0+dGhyb3R0bGluZy5hZGRyZXNzID0gb2JqZWN0LnByb2Nlc3Nvci5wYmxrX2FkZHJlc3M7CiAJCXByLT50aHJvdHRsaW5nLmR1dHlfb2Zmc2V0ID0gYWNwaV9mYWR0LmR1dHlfb2Zmc2V0OwpAQCAtNTI4LDcgKzUxNCw3IEBACiAJYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyhwcik7CiAJYWNwaV9wcm9jZXNzb3JfZ2V0X2xpbWl0X2luZm8ocHIpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCAqcHJvY2Vzc29yX2RldmljZV9hcnJheVtOUl9DUFVTXTsKQEAgLTUzOSwxNCArNTI1LDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX3N0YXJ0Iik7CiAKIAlwciA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2dldF9pbmZvKHByKTsKIAlpZiAocmVzdWx0KSB7CiAJCS8qIFByb2Nlc3NvciBpcyBwaHlzaWNhbGx5IG5vdCBwcmVzZW50ICovCi0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJQlVHX09OKChwci0+aWQgPj0gTlJfQ1BVUykgfHwgKHByLT5pZCA8IDApKTsKQEAgLTU2MCw3ICs1NDUsNyBAQAogCSAgICBwcm9jZXNzb3JfZGV2aWNlX2FycmF5W3ByLT5pZF0gIT0gKHZvaWQgKilkZXZpY2UpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQklPUyByZXBvcnRlZCB3cm9uZyBBQ1BJIGlkIgogCQkJImZvciB0aGUgcHJvY2Vzc29yXG4iKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcHJvY2Vzc29yX2RldmljZV9hcnJheVtwci0+aWRdID0gKHZvaWQgKilkZXZpY2U7CiAKQEAgLTU3MiwxMCArNTU3LDYgQEAKIAogCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihwci0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCiAJCQkJCSAgICAgYWNwaV9wcm9jZXNzb3Jfbm90aWZ5LCBwcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgaW5zdGFsbGluZyBkZXZpY2Ugbm90aWZ5IGhhbmRsZXJcbiIpKTsKLQl9CiAKIAkvKiBfUERDIGNhbGwgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UgKGlmIHJlcWQuKS4gKi8KIAlhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHByKTsKQEAgLTU5Miw3ICs1NzMsNyBAQAogCiAgICAgICBlbmQ6CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCkBAIC02MDAsMTMgKzU4MSwxMiBAQAogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopZGF0YTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9ub3RpZnkiKTsKIAogCWlmICghcHIpCi0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAKIAlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShwci0+aGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfUFJPQ0VTU09SX05PVElGWV9QRVJGT1JNQU5DRToKQEAgLTYyNCwyMSArNjA0LDIwIEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9hZGQiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChwciwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3Byb2Nlc3NvcikpOwogCiAJcHItPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwpAQCAtNjQ2LDcgKzYyNSw3IEBACiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0NMQVNTKTsKIAlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBwcjsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQpAQCAtNjU0LDMxICs2MzMsMjYgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX3JlbW92ZSIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByID0gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCWlmIChwci0+aWQgPj0gTlJfQ1BVUykgewogCQlrZnJlZShwcik7Ci0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHR5cGUgPT0gQUNQSV9CVVNfUkVNT1ZBTF9FSkVDVCkgewogCQlpZiAoYWNwaV9wcm9jZXNzb3JfaGFuZGxlX2VqZWN0KHByKSkKLQkJCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWFjcGlfcHJvY2Vzc29yX3Bvd2VyX2V4aXQocHIsIGRldmljZSk7CiAKIAlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihwci0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCiAJCQkJCSAgICBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkVycm9yIHJlbW92aW5nIG5vdGlmeSBoYW5kbGVyXG4iKSk7Ci0JfQogCiAJYWNwaV9wcm9jZXNzb3JfcmVtb3ZlX2ZzKGRldmljZSk7CiAKQEAgLTY4Niw3ICs2NjAsNyBAQAogCiAJa2ZyZWUocHIpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX0FDUElfSE9UUExVR19DUFUKQEAgLTcwMSwxNSArNjc1LDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgc3RhID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImlzX3Byb2Nlc3Nvcl9wcmVzZW50Iik7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCAhKHN0YSAmIEFDUElfU1RBX1BSRVNFTlQpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiUHJvY2Vzc29yIERldmljZSBpcyBub3QgcHJlc2VudFxuIikpOwotCQlyZXR1cm5fVkFMVUUoMCk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJQcm9jZXNzb3IgRGV2aWNlIGlzIG5vdCBwcmVzZW50IikpOworCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuX1ZBTFVFKDEpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMKQEAgLTcxOSwzMCArNjkxLDI5IEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICpwZGV2OwogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9kZXZpY2VfYWRkIik7CiAKIAlpZiAoYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJnBoYW5kbGUpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UocGhhbmRsZSwgJnBkZXYpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGFjcGlfYnVzX2FkZChkZXZpY2UsIHBkZXYsIGhhbmRsZSwgQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1IpKSB7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJYWNwaV9idXNfc3RhcnQoKmRldmljZSk7CiAKIAlwciA9IGFjcGlfZHJpdmVyX2RhdGEoKmRldmljZSk7CiAJaWYgKCFwcikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgocHItPmlkID49IDApICYmIChwci0+aWQgPCBOUl9DUFVTKSkgewogCQlrb2JqZWN0X3VldmVudCgmKCpkZXZpY2UpLT5rb2JqLCBLT0JKX09OTElORSk7CiAJfQotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTc1Miw3ICs3MjMsNiBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAlpbnQgcmVzdWx0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfaG90cGx1Z19ub3RpZnkiKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfTk9USUZZX0JVU19DSEVDSzoKQEAgLTc2NywxNSArNzM3LDE0IEBACiAJCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpIHsKIAkJCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2RldmljZV9hZGQoaGFuZGxlLCAmZGV2aWNlKTsKIAkJCWlmIChyZXN1bHQpCi0JCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJCSAgIlVuYWJsZSB0byBhZGQgdGhlIGRldmljZVxuIikpOworCQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkJICAgICJVbmFibGUgdG8gYWRkIHRoZSBkZXZpY2VcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQlwciA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAkJaWYgKCFwcikgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiRHJpdmVyIGRhdGEgaXMgTlVMTFxuIikpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRHJpdmVyIGRhdGEgaXMgTlVMTFxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC03ODgsOSArNzU3LDggQEAKIAkJaWYgKCghcmVzdWx0KSAmJiAoKHByLT5pZCA+PSAwKSAmJiAocHItPmlkIDwgTlJfQ1BVUykpKSB7CiAJCQlrb2JqZWN0X3VldmVudCgmZGV2aWNlLT5rb2JqLCBLT0JKX09OTElORSk7CiAJCX0gZWxzZSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCQkgICJEZXZpY2UgWyVzXSBmYWlsZWQgdG8gc3RhcnRcbiIsCi0JCQkJCSAgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkRldmljZSBbJXNdIGZhaWxlZCB0byBzdGFydFxuIiwKKwkJCQkgICAgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDoKQEAgLTc5OCwxNSArNzY2LDE1IEBACiAJCQkJICAicmVjZWl2ZWQgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVFxuIikpOwogCiAJCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkRldmljZSBkb24ndCBleGlzdCwgZHJvcHBpbmcgRUpFQ1RcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkgICAgIkRldmljZSBkb24ndCBleGlzdCwgZHJvcHBpbmcgRUpFQ1RcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJcHIgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJCWlmICghcHIpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkRyaXZlciBkYXRhIGlzIE5VTEwsIGRyb3BwaW5nIEVKRUNUXG4iKSk7Ci0JCQlyZXR1cm5fVk9JRDsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkgICAgIkRyaXZlciBkYXRhIGlzIE5VTEwsIGRyb3BwaW5nIEVKRUNUXG4iKTsKKwkJCXJldHVybjsKIAkJfQogCiAJCWlmICgocHItPmlkIDwgTlJfQ1BVUykgJiYgKGNwdV9wcmVzZW50KHByLT5pZCkpKQpAQCAtODE4LDcgKzc4Niw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGFjcGlfc3RhdHVzCkBAIC04NTcsMjEgKzgyNSwyMCBAQAogCiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wcm9jZXNzb3JfaG90YWRkX2luaXQoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnBfY3B1KQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2hvdGFkZF9pbml0Iik7CiAKIAlpZiAoIWlzX3Byb2Nlc3Nvcl9wcmVzZW50KGhhbmRsZSkpIHsKLQkJcmV0dXJuX1ZBTFVFKEFFX0VSUk9SKTsKKwkJcmV0dXJuIEFFX0VSUk9SOwogCX0KIAogCWlmIChhY3BpX21hcF9sc2FwaWMoaGFuZGxlLCBwX2NwdSkpCi0JCXJldHVybl9WQUxVRShBRV9FUlJPUik7CisJCXJldHVybiBBRV9FUlJPUjsKIAogCWlmIChhcmNoX3JlZ2lzdGVyX2NwdSgqcF9jcHUpKSB7CiAJCWFjcGlfdW5tYXBfbHNhcGljKCpwX2NwdSk7Ci0JCXJldHVybl9WQUxVRShBRV9FUlJPUik7CisJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoQUVfT0spOworCXJldHVybiBBRV9PSzsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9oYW5kbGVfZWplY3Qoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKQEAgLTkyOCwyMCArODk1LDE5IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9pbml0Iik7CiAKIAltZW1zZXQoJnByb2Nlc3NvcnMsIDAsIHNpemVvZihwcm9jZXNzb3JzKSk7CiAJbWVtc2V0KCZlcnJhdGEsIDAsIHNpemVvZihlcnJhdGEpKTsKIAogCWFjcGlfcHJvY2Vzc29yX2RpciA9IHByb2NfbWtkaXIoQUNQSV9QUk9DRVNTT1JfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9wcm9jZXNzb3JfZGlyKQotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCWFjcGlfcHJvY2Vzc29yX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wcm9jZXNzb3JfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7Ci0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJYWNwaV9wcm9jZXNzb3JfaW5zdGFsbF9ob3RwbHVnX25vdGlmeSgpOwpAQCAtOTUwLDEyICs5MTYsMTEgQEAKIAogCWFjcGlfcHJvY2Vzc29yX3BwY19pbml0KCk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3Byb2Nlc3Nvcl9leGl0KHZvaWQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZXhpdCIpOwogCiAJYWNwaV9wcm9jZXNzb3JfcHBjX2V4aXQoKTsKIApAQCAtOTY3LDcgKzkzMiw3IEBACiAKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIG1vZHVsZV9pbml0KGFjcGlfcHJvY2Vzc29yX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCA4YTc0YmYzLi5lNDM5ZWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgICAgICAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0ICBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgogICogIAkJCS0gQWRkZWQgcHJvY2Vzc29yIGhvdHBsdWcgc3VwcG9ydAogICogIENvcHlyaWdodCAoQykgMjAwNSAgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CkBAIC05OSw2ICs5OSw5IEBACiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0ZGF0YSBwcm9jZXNzb3JfcG93ZXJfZG1pX3RhYmxlW10gPSB7CiAJeyBzZXRfbWF4X2NzdGF0ZSwgIklCTSBUaGlua1BhZCBSNDBlIiwgewogCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiSUJNIiksCisJICBETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwiMVNFVDcwV1ciKX0sICh2b2lkICopMX0sCisJeyBzZXRfbWF4X2NzdGF0ZSwgIklCTSBUaGlua1BhZCBSNDBlIiwgeworCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiSUJNIiksCiAJICBETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwiMVNFVDYwV1ciKX0sICh2b2lkICopMX0sCiAJeyBzZXRfbWF4X2NzdGF0ZSwgIklCTSBUaGlua1BhZCBSNDBlIiwgewogCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiSUJNIiksCkBAIC0yNjEsMjEgKzI2NCwxNSBAQAogCQl1MzIgYm1fc3RhdHVzID0gMDsKIAkJdW5zaWduZWQgbG9uZyBkaWZmID0gamlmZmllcyAtIHByLT5wb3dlci5ibV9jaGVja190aW1lc3RhbXA7CiAKLQkJaWYgKGRpZmYgPiAzMikKLQkJCWRpZmYgPSAzMjsKKwkJaWYgKGRpZmYgPiAzMSkKKwkJCWRpZmYgPSAzMTsKIAotCQl3aGlsZSAoZGlmZikgewotCQkJLyogaWYgd2UgZGlkbid0IGdldCBjYWxsZWQsIGFzc3VtZSB0aGVyZSB3YXMgYnVzbWFzdGVyIGFjdGl2aXR5ICovCi0JCQlkaWZmLS07Ci0JCQlpZiAoZGlmZikKLQkJCQlwci0+cG93ZXIuYm1fYWN0aXZpdHkgfD0gMHgxOwotCQkJcHItPnBvd2VyLmJtX2FjdGl2aXR5IDw8PSAxOwotCQl9CisJCXByLT5wb3dlci5ibV9hY3Rpdml0eSA8PD0gZGlmZjsKIAogCQlhY3BpX2dldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1NUQVRVUywKIAkJCQkgICZibV9zdGF0dXMsIEFDUElfTVRYX0RPX05PVF9MT0NLKTsKIAkJaWYgKGJtX3N0YXR1cykgewotCQkJcHItPnBvd2VyLmJtX2FjdGl2aXR5Kys7CisJCQlwci0+cG93ZXIuYm1fYWN0aXZpdHkgfD0gMHgxOwogCQkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsCiAJCQkJCSAgMSwgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOwogCQl9CkBAIC0yODcsMTYgKzI4NCwxNiBAQAogCQllbHNlIGlmIChlcnJhdGEucGlpeDQuYm1pc3gpIHsKIAkJCWlmICgoaW5iX3AoZXJyYXRhLnBpaXg0LmJtaXN4ICsgMHgwMikgJiAweDAxKQogCQkJICAgIHx8IChpbmJfcChlcnJhdGEucGlpeDQuYm1pc3ggKyAweDBBKSAmIDB4MDEpKQotCQkJCXByLT5wb3dlci5ibV9hY3Rpdml0eSsrOworCQkJCXByLT5wb3dlci5ibV9hY3Rpdml0eSB8PSAweDE7CiAJCX0KIAogCQlwci0+cG93ZXIuYm1fY2hlY2tfdGltZXN0YW1wID0gamlmZmllczsKIAogCQkvKgotCQkgKiBBcHBseSBidXMgbWFzdGVyaW5nIGRlbW90aW9uIHBvbGljeS4gIEF1dG9tYXRpY2FsbHkgZGVtb3RlCisJCSAqIElmIGJ1cyBtYXN0ZXJpbmcgaXMgb3Igd2FzIGFjdGl2ZSB0aGlzIGppZmZ5LCBkZW1vdGUKIAkJICogdG8gYXZvaWQgYSBmYXVsdHkgdHJhbnNpdGlvbi4gIE5vdGUgdGhhdCB0aGUgcHJvY2Vzc29yCiAJCSAqIHdvbid0IGVudGVyIGEgbG93LXBvd2VyIHN0YXRlIGR1cmluZyB0aGlzIGNhbGwgKHRvIHRoaXMKLQkJICogZnVuY2l0b24pIGJ1dCBzaG91bGQgdXBvbiB0aGUgbmV4dC4KKwkJICogZnVuY3Rpb24pIGJ1dCBzaG91bGQgdXBvbiB0aGUgbmV4dC4KIAkJICoKIAkJICogVEJEOiBBIGJldHRlciBwb2xpY3kgbWlnaHQgYmUgdG8gZmFsbGJhY2sgdG8gdGhlIGRlbW90aW9uCiAJCSAqICAgICAgc3RhdGUgKHVzZSBpdCBmb3IgdGhpcyBxdWFudHVtIG9ubHkpIGlzdGVhZCBvZgpAQCAtMzA0LDcgKzMwMSw4IEBACiAJCSAqICAgICAgcXVhbGlmaWNhdGlvbi4gIFRoaXMgbWF5LCBob3dldmVyLCBpbnRyb2R1Y2UgRE1BCiAJCSAqICAgICAgaXNzdWVzIChlLmcuIGZsb3BweSBETUEgdHJhbnNmZXIgb3ZlcnJ1bi91bmRlcnJ1bikuCiAJCSAqLwotCQlpZiAocHItPnBvd2VyLmJtX2FjdGl2aXR5ICYgY3gtPmRlbW90aW9uLnRocmVzaG9sZC5ibSkgeworCQlpZiAoKHByLT5wb3dlci5ibV9hY3Rpdml0eSAmIDB4MSkgJiYKKwkJICAgIGN4LT5kZW1vdGlvbi50aHJlc2hvbGQuYm0pIHsKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJCW5leHRfc3RhdGUgPSBjeC0+ZGVtb3Rpb24uc3RhdGU7CiAJCQlnb3RvIGVuZDsKQEAgLTMyMiw4ICszMjAsNiBAQAogCQljeCA9ICZwci0+cG93ZXIuc3RhdGVzW0FDUElfU1RBVEVfQzFdOwogI2VuZGlmCiAKLQljeC0+dXNhZ2UrKzsKLQogCS8qCiAJICogU2xlZXA6CiAJICogLS0tLS0tCkBAIC0zNjUsNyArMzYxLDkgQEAKIAkJdDEgPSBpbmwoYWNwaV9mYWR0LnhwbV90bXJfYmxrLmFkZHJlc3MpOwogCQkvKiBJbnZva2UgQzIgKi8KIAkJaW5iKGN4LT5hZGRyZXNzKTsKLQkJLyogRHVtbXkgb3AgLSBtdXN0IGRvIHNvbWV0aGluZyB1c2VsZXNzIGFmdGVyIFBfTFZMMiByZWFkICovCisJCS8qIER1bW15IHdhaXQgb3AgLSBtdXN0IGRvIHNvbWV0aGluZyB1c2VsZXNzIGFmdGVyIFBfTFZMMiByZWFkCisJCSAgIGJlY2F1c2UgY2hpcHNldHMgY2Fubm90IGd1YXJhbnRlZSB0aGF0IFNUUENMSyMgc2lnbmFsCisJCSAgIGdldHMgYXNzZXJ0ZWQgaW4gdGltZSB0byBmcmVlemUgZXhlY3V0aW9uIHByb3Blcmx5LiAqLwogCQl0MiA9IGlubChhY3BpX2ZhZHQueHBtX3Rtcl9ibGsuYWRkcmVzcyk7CiAJCS8qIEdldCBlbmQgdGltZSAodGlja3MpICovCiAJCXQyID0gaW5sKGFjcGlfZmFkdC54cG1fdG1yX2Jsay5hZGRyZXNzKTsKQEAgLTQwMyw3ICs0MDEsNyBAQAogCQl0MSA9IGlubChhY3BpX2ZhZHQueHBtX3Rtcl9ibGsuYWRkcmVzcyk7CiAJCS8qIEludm9rZSBDMyAqLwogCQlpbmIoY3gtPmFkZHJlc3MpOwotCQkvKiBEdW1teSBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwzIHJlYWQgKi8KKwkJLyogRHVtbXkgd2FpdCBvcCAoc2VlIGFib3ZlKSAqLwogCQl0MiA9IGlubChhY3BpX2ZhZHQueHBtX3Rtcl9ibGsuYWRkcmVzcyk7CiAJCS8qIEdldCBlbmQgdGltZSAodGlja3MpICovCiAJCXQyID0gaW5sKGFjcGlfZmFkdC54cG1fdG1yX2Jsay5hZGRyZXNzKTsKQEAgLTQzMCw2ICs0MjgsOSBAQAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXJldHVybjsKIAl9CisJY3gtPnVzYWdlKys7CisJaWYgKChjeC0+dHlwZSAhPSBBQ1BJX1NUQVRFX0MxKSAmJiAoc2xlZXBfdGlja3MgPiAwKSkKKwkJY3gtPnRpbWUgKz0gc2xlZXBfdGlja3M7CiAKIAluZXh0X3N0YXRlID0gcHItPnBvd2VyLnN0YXRlOwogCkBAIC01MTcsMTAgKzUxOCw5IEBACiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpoaWdoZXIgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3g7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9zZXRfcG93ZXJfcG9saWN5Iik7CiAKIAlpZiAoIXByKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKIAkgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgQ3ggc3RhdGUgcG9saWN5IChPUyBpZGxlIGhhbmRsZXIpLgpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJfQogCiAJaWYgKCFzdGF0ZV9pc19zZXQpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBkZW1vdGlvbiAqLwogCWZvciAoaSA9IDE7IGkgPCBBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVI7IGkrKykgewpAQCAtNTgzLDE4ICs1ODMsMTcgQEAKIAkJaGlnaGVyID0gY3g7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvX2ZhZHQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9nZXRfcG93ZXJfaW5mb19mYWR0Iik7CiAKIAlpZiAoIXByKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFwci0+cGJsaykKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGlmIGluZm8gaXMgb2J0YWluZWQgZnJvbSBwYmxrL2ZhZHQsIHR5cGUgZXF1YWxzIHN0YXRlICovCiAJcHItPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0MyXS50eXBlID0gQUNQSV9TVEFURV9DMjsKQEAgLTYwNiw3ICs2MDUsNyBAQAogCSAqIGFuIFNNUCBzeXN0ZW0uIAogCSAqLwogCWlmICgobnVtX29ubGluZV9jcHVzKCkgPiAxKSAmJiAhYWNwaV9mYWR0LnBsdmwyX3VwKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogI2VuZGlmCiAKIAkvKiBkZXRlcm1pbmUgQzIgYW5kIEMzIGFkZHJlc3MgZnJvbSBwYmxrICovCkBAIC02MjIsMTIgKzYyMSwxMSBAQAogCQkJICBwci0+cG93ZXIuc3RhdGVzW0FDUElfU1RBVEVfQzJdLmFkZHJlc3MsCiAJCQkgIHByLT5wb3dlci5zdGF0ZXNbQUNQSV9TVEFURV9DM10uYWRkcmVzcykpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvX2RlZmF1bHRfYzEoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9nZXRfcG93ZXJfaW5mb19kZWZhdWx0X2MxIik7CiAKIAkvKiBaZXJvIGluaXRpYWxpemUgYWxsIHRoZSBDLXN0YXRlcyBpbmZvLiAqLwogCW1lbXNldChwci0+cG93ZXIuc3RhdGVzLCAwLCBzaXplb2YocHItPnBvd2VyLnN0YXRlcykpOwpAQCAtNjQwLDcgKzYzOCw3IEBACiAJcHItPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0MwXS52YWxpZCA9IDE7CiAJcHItPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0MxXS52YWxpZCA9IDE7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Bvd2VyX2luZm9fY3N0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCkBAIC02NTIsMTAgKzY1MCw5IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqY3N0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZ2V0X3Bvd2VyX2luZm9fY3N0Iik7CiAKIAlpZiAobm9jc3QpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAljdXJyZW50X2NvdW50ID0gMTsKIApAQCAtNjY3LDE1ICs2NjQsMTQgQEAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChwci0+aGFuZGxlLCAiX0NTVCIsIE5VTEwsICZidWZmZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJObyBfQ1NULCBnaXZpbmcgdXBcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAljc3QgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKIAogCS8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgMiBlbGVtZW50cyAqLwogCWlmICghY3N0IHx8IChjc3QtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHx8IGNzdC0+cGFja2FnZS5jb3VudCA8IDIpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJub3QgZW5vdWdoIGVsZW1lbnRzIGluIF9DU1RcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAibm90IGVub3VnaCBlbGVtZW50cyBpbiBfQ1NUXG4iKTsKIAkJc3RhdHVzID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtNjg0LDggKzY4MCw3IEBACiAKIAkvKiBWYWxpZGF0ZSBudW1iZXIgb2YgcG93ZXIgc3RhdGVzLiAqLwogCWlmIChjb3VudCA8IDEgfHwgY291bnQgIT0gY3N0LT5wYWNrYWdlLmNvdW50IC0gMSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgImNvdW50IGdpdmVuIGJ5IF9DU1QgaXMgbm90IHZhbGlkXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImNvdW50IGdpdmVuIGJ5IF9DU1QgaXMgbm90IHZhbGlkXG4iKTsKIAkJc3RhdHVzID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtNzc1LDE1ICs3NzAsMTQgQEAKICAgICAgIGVuZDoKIAlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwogCi0JcmV0dXJuX1ZBTFVFKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfdmVyaWZ5X2MyKHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3gpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZ2V0X3Bvd2VyX3ZlcmlmeV9jMiIpOwogCiAJaWYgKCFjeC0+YWRkcmVzcykKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCS8qCiAJICogQzIgbGF0ZW5jeSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAKQEAgLTc5Miw3ICs3ODYsNyBAQAogCWVsc2UgaWYgKGN4LT5sYXRlbmN5ID4gQUNQSV9QUk9DRVNTT1JfTUFYX0MyX0xBVEVOQ1kpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgImxhdGVuY3kgdG9vIGxhcmdlIFslZF1cbiIsIGN4LT5sYXRlbmN5KSk7Ci0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTgwMiw3ICs3OTYsNyBAQAogCWN4LT52YWxpZCA9IDE7CiAJY3gtPmxhdGVuY3lfdGlja3MgPSBVU19UT19QTV9USU1FUl9USUNLUyhjeC0+bGF0ZW5jeSk7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX3Bvd2VyX3ZlcmlmeV9jMyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLApAQCAtODEwLDEwICs4MDQsOSBAQAogewogCXN0YXRpYyBpbnQgYm1fY2hlY2tfZmxhZzsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl92ZXJpZnlfYzMiKTsKIAogCWlmICghY3gtPmFkZHJlc3MpCi0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAKIAkvKgogCSAqIEMzIGxhdGVuY3kgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwMApAQCAtODIyLDcgKzgxNSw3IEBACiAJZWxzZSBpZiAoY3gtPmxhdGVuY3kgPiBBQ1BJX1BST0NFU1NPUl9NQVhfQzNfTEFURU5DWSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJICAibGF0ZW5jeSB0b28gbGFyZ2UgWyVkXVxuIiwgY3gtPmxhdGVuY3kpKTsKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAl9CiAKIAkvKgpAQCAtODM1LDcgKzgyOCw3IEBACiAJZWxzZSBpZiAoZXJyYXRhLnBpaXg0LmZkbWEpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIkMzIG5vdCBzdXBwb3J0ZWQgb24gUElJWDQgd2l0aCBUeXBlLUYgRE1BXG4iKSk7Ci0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAJfQogCiAJLyogQWxsIHRoZSBsb2dpYyBoZXJlIGFzc3VtZXMgZmxhZ3MuYm1fY2hlY2sgaXMgc2FtZSBhY3Jvc3MgYWxsIENQVXMgKi8KQEAgLTg1Miw3ICs4NDUsNyBAQAogCQlpZiAoIXByLT5mbGFncy5ibV9jb250cm9sKSB7CiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJCSAgIkMzIHN1cHBvcnQgcmVxdWlyZXMgYnVzIG1hc3RlcmluZyBjb250cm9sXG4iKSk7Ci0JCQlyZXR1cm5fVk9JRDsKKwkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC04NjMsNyArODU2LDcgQEAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkJICAiQ2FjaGUgaW52YWxpZGF0aW9uIHNob3VsZCB3b3JrIHByb3Blcmx5IgogCQkJCQkgICIgZm9yIEMzIHRvIGJlIGVuYWJsZWQgb24gU01QIHN5c3RlbXNcbiIpKTsKLQkJCXJldHVybl9WT0lEOworCQkJcmV0dXJuOwogCQl9CiAJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfUkxELAogCQkJCSAgMCwgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOwpAQCAtODc4LDcgKzg3MSw3IEBACiAJY3gtPnZhbGlkID0gMTsKIAljeC0+bGF0ZW5jeV90aWNrcyA9IFVTX1RPX1BNX1RJTUVSX1RJQ0tTKGN4LT5sYXRlbmN5KTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl92ZXJpZnkoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKQEAgLTkzNyw3ICs5MzAsNiBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCByZXN1bHQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9nZXRfcG93ZXJfaW5mbyIpOwogCiAJLyogTk9URTogdGhlIGlkbGUgdGhyZWFkIG1heSBub3QgYmUgcnVubmluZyB3aGlsZSBjYWxsaW5nCiAJICogdGhpcyBmdW5jdGlvbiAqLwpAQCAtOTYwLDcgKzk1Miw3IEBACiAJICovCiAJcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3Jfc2V0X3Bvd2VyX3BvbGljeShwcik7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAkvKgogCSAqIGlmIG9uZSBzdGF0ZSBvZiB0eXBlIEMyIG9yIEMzIGlzIGF2YWlsYWJsZSwgbWFyayB0aGlzCkBAIC05NzQsMjQgKzk2NiwyMyBAQAogCQl9CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBpbnQgYWNwaV9wcm9jZXNzb3JfY3N0X2hhc19jaGFuZ2VkKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9jc3RfaGFzX2NoYW5nZWQiKTsKIAogCWlmICghcHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobm9jc3QpIHsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoIXByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJLyogRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGlkbGUgbG9vcCAqLwogCXBtX2lkbGUgPSBwbV9pZGxlX3NhdmU7CkBAIC0xMDAyLDcgKzk5Myw3IEBACiAJaWYgKChwci0+ZmxhZ3MucG93ZXIgPT0gMSkgJiYgKHByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lKSkKIAkJcG1faWRsZSA9IGFjcGlfcHJvY2Vzc29yX2lkbGU7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiBwcm9jIGludGVyZmFjZSAqLwpAQCAtMTAxMiw3ICsxMDAzLDYgQEAKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqKXNlcS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX3Bvd2VyX3NlcV9zaG93Iik7CiAKIAlpZiAoIXByKQogCQlnb3RvIGVuZDsKQEAgLTEwNjQsMTMgKzEwNTQsMTQgQEAKIAkJZWxzZQogCQkJc2VxX3B1dHMoc2VxLCAiZGVtb3Rpb25bLS1dICIpOwogCi0JCXNlcV9wcmludGYoc2VxLCAibGF0ZW5jeVslMDNkXSB1c2FnZVslMDhkXVxuIiwKKwkJc2VxX3ByaW50ZihzZXEsICJsYXRlbmN5WyUwM2RdIHVzYWdlWyUwOGRdIGR1cmF0aW9uWyUwMjBsbHVdXG4iLAogCQkJICAgcHItPnBvd2VyLnN0YXRlc1tpXS5sYXRlbmN5LAotCQkJICAgcHItPnBvd2VyLnN0YXRlc1tpXS51c2FnZSk7CisJCQkgICBwci0+cG93ZXIuc3RhdGVzW2ldLnVzYWdlLAorCQkJICAgcHItPnBvd2VyLnN0YXRlc1tpXS50aW1lKTsKIAl9CiAKICAgICAgIGVuZDoKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEwOTQsNyArMTA4NSw2IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0Iik7CiAKIAlpZiAoIWZpcnN0X3J1bikgewogCQlkbWlfY2hlY2tfc3lzdGVtKHByb2Nlc3Nvcl9wb3dlcl9kbWlfdGFibGUpOwpAQCAtMTEwNiwxNCArMTA5NiwxNCBAQAogCX0KIAogCWlmICghcHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYWNwaV9mYWR0LmNzdF9jbnQgJiYgIW5vY3N0KSB7CiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX29zX3dyaXRlX3BvcnQoYWNwaV9mYWR0LnNtaV9jbWQsIGFjcGlfZmFkdC5jc3RfY250LCA4KTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCQkgICJOb3RpZnlpbmcgQklPUyBvZiBfQ1NUIGFiaWxpdHkgZmFpbGVkXG4iKSk7CisJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCQkiTm90aWZ5aW5nIEJJT1Mgb2YgX0NTVCBhYmlsaXR5IGZhaWxlZCIpKTsKIAkJfQogCX0KIApAQCAtMTE0Miw5ICsxMTMyLDcgQEAKIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KEFDUElfUFJPQ0VTU09SX0ZJTEVfUE9XRVIsCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1BST0NFU1NPUl9GSUxFX1BPV0VSKSk7CisJCXJldHVybiAtRUlPOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfcHJvY2Vzc29yX3Bvd2VyX2ZvcHM7CiAJCWVudHJ5LT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtMTE1MywxMyArMTE0MSwxMiBAQAogCiAJcHItPmZsYWdzLnBvd2VyX3NldHVwX2RvbmUgPSAxOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBpbnQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfZXhpdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAogCQkJICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfcG93ZXJfZXhpdCIpOwogCiAJcHItPmZsYWdzLnBvd2VyX3NldHVwX2RvbmUgPSAwOwogCkBAIC0xMTc5LDUgKzExNjYsNSBAQAogCQljcHVfaWRsZV93YWl0KCk7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwppbmRleCA0MWFhYWJhLi4xNGEwMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwpAQCAtMTA4LDEwICsxMDgsOSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBwcGMgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZ2V0X3BsYXRmb3JtX2xpbWl0Iik7CiAKIAlpZiAoIXByKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKIAkgKiBfUFBDIGluZGljYXRlcyB0aGUgbWF4aW11bSBzdGF0ZSBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybQpAQCAtMTIzLDEzICsxMjIsMTMgQEAKIAkJYWNwaV9wcm9jZXNzb3JfcHBjX3N0YXR1cyB8PSBQUENfSU5fVVNFOwogCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkVycm9yIGV2YWx1YXRpbmcgX1BQQ1xuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFdmFsdWF0aW5nIF9QUEMiKSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXByLT5wZXJmb3JtYW5jZV9wbGF0Zm9ybV9saW1pdCA9IChpbnQpcHBjOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBpbnQgYWNwaV9wcm9jZXNzb3JfcHBjX2hhc19jaGFuZ2VkKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCkBAIC0xNjgsMTggKzE2NywxNyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0ICpwY3QgPSBOVUxMOwogCXVuaW9uIGFjcGlfb2JqZWN0IG9iaiA9IHsgMCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZ2V0X3BlcmZvcm1hbmNlX2NvbnRyb2wiKTsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHByLT5oYW5kbGUsICJfUENUIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBldmFsdWF0aW5nIF9QQ1RcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUENUIikpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlwY3QgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKIAlpZiAoIXBjdCB8fCAocGN0LT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKQogCSAgICB8fCAocGN0LT5wYWNrYWdlLmNvdW50ICE9IDIpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIF9QQ1QgZGF0YVxuIikpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIF9QQ1QgZGF0YVxuIik7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTE5Myw4ICsxOTEsNyBAQAogCWlmICgob2JqLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikKIAkgICAgfHwgKG9iai5idWZmZXIubGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjdF9yZWdpc3RlcikpCiAJICAgIHx8IChvYmouYnVmZmVyLnBvaW50ZXIgPT0gTlVMTCkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJJbnZhbGlkIF9QQ1QgZGF0YSAoY29udHJvbF9yZWdpc3RlcilcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBfUENUIGRhdGEgKGNvbnRyb2xfcmVnaXN0ZXIpXG4iKTsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMjEwLDggKzIwNyw3IEBACiAJaWYgKChvYmoudHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKQogCSAgICB8fCAob2JqLmJ1ZmZlci5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGFjcGlfcGN0X3JlZ2lzdGVyKSkKIAkgICAgfHwgKG9iai5idWZmZXIucG9pbnRlciA9PSBOVUxMKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkludmFsaWQgX1BDVCBkYXRhIChzdGF0dXNfcmVnaXN0ZXIpXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX1BDVCBkYXRhIChzdGF0dXNfcmVnaXN0ZXIpXG4iKTsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMjIyLDcgKzIxOCw3IEBACiAgICAgICBlbmQ6CiAJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3BlcmZvcm1hbmNlX3N0YXRlcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQpAQCAtMjM1LDE3ICsyMzEsMTYgQEAKIAl1bmlvbiBhY3BpX29iamVjdCAqcHNzID0gTlVMTDsKIAlpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMiKTsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHByLT5oYW5kbGUsICJfUFNTIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBldmFsdWF0aW5nIF9QU1NcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfUFNTIikpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlwc3MgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKIAlpZiAoIXBzcyB8fCAocHNzLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBfUFNTIGRhdGFcbiIpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBfUFNTIGRhdGFcbiIpOwogCQlyZXN1bHQgPSAtRUZBVUxUOwogCQlnb3RvIGVuZDsKIAl9CkBAIC0yNzQsOCArMjY5LDcgQEAKIAkJc3RhdHVzID0gYWNwaV9leHRyYWN0X3BhY2thZ2UoJihwc3MtPnBhY2thZ2UuZWxlbWVudHNbaV0pLAogCQkJCQkgICAgICAmZm9ybWF0LCAmc3RhdGUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkludmFsaWQgX1BTUyBkYXRhXG4iKSk7CisJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiSW52YWxpZCBfUFNTIGRhdGEiKSk7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJa2ZyZWUocHItPnBlcmZvcm1hbmNlLT5zdGF0ZXMpOwogCQkJZ290byBlbmQ7CkBAIC0yOTEsOCArMjg1LDggQEAKIAkJCQkgICh1MzIpIHB4LT5jb250cm9sLCAodTMyKSBweC0+c3RhdHVzKSk7CiAKIAkJaWYgKCFweC0+Y29yZV9mcmVxdWVuY3kpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkludmFsaWQgX1BTUyBkYXRhOiBmcmVxIGlzIHplcm9cbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKKwkJCQkgICAgIkludmFsaWQgX1BTUyBkYXRhOiBmcmVxIGlzIHplcm9cbiIpOwogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWtmcmVlKHByLT5wZXJmb3JtYW5jZS0+c3RhdGVzKTsKIAkJCWdvdG8gZW5kOwpAQCAtMzAyLDcgKzI5Niw3IEBACiAgICAgICBlbmQ6CiAJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3BlcmZvcm1hbmNlX2luZm8oc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKQEAgLTMxMSwzMSArMzA1LDMwIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9pbmZvIik7CiAKIAlpZiAoIXByIHx8ICFwci0+cGVyZm9ybWFuY2UgfHwgIXByLT5oYW5kbGUpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUocHItPmhhbmRsZSwgIl9QQ1QiLCAmaGFuZGxlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIkFDUEktYmFzZWQgcHJvY2Vzc29yIHBlcmZvcm1hbmNlIGNvbnRyb2wgdW5hdmFpbGFibGVcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2VfY29udHJvbChwcik7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2Vfc3RhdGVzKHByKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2dldF9wbGF0Zm9ybV9saW1pdChwcik7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnlfc21tKHN0cnVjdCBtb2R1bGUgKmNhbGxpbmdfbW9kdWxlKQpAQCAtMzQzLDEzICszMzYsMTIgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RhdGljIGludCBpc19kb25lID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX25vdGlmeV9zbW0iKTsKIAogCWlmICghKGFjcGlfcHJvY2Vzc29yX3BwY19zdGF0dXMgJiBQUENfUkVHSVNURVJFRCkpCi0JCXJldHVybl9WQUxVRSgtRUJVU1kpOworCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChjYWxsaW5nX21vZHVsZSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBpc19kb25lIGlzIHNldCB0byBuZWdhdGl2ZSBpZiBhbiBlcnJvciBvY2N1cmVkLAogCSAqIGFuZCB0byBwb3N0aXRpdmUgaWYgX25vXyBlcnJvciBvY2N1cmVkLCBidXQgU01NCkBAIC0zNTgsMTAgKzM1MCwxMCBAQAogCSAqLwogCWlmIChpc19kb25lID4gMCkgewogCQltb2R1bGVfcHV0KGNhbGxpbmdfbW9kdWxlKTsKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGlzX2RvbmUgPCAwKSB7CiAJCW1vZHVsZV9wdXQoY2FsbGluZ19tb2R1bGUpOwotCQlyZXR1cm5fVkFMVUUoaXNfZG9uZSk7CisJCXJldHVybiBpc19kb25lOwogCX0KIAogCWlzX2RvbmUgPSAtRUlPOwpAQCAtMzcwLDcgKzM2Miw3IEBACiAJaWYgKCghYWNwaV9mYWR0LnNtaV9jbWQpIHx8ICghYWNwaV9mYWR0LnBzdGF0ZV9jbnQpKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIk5vIFNNSSBwb3J0IG9yIHBzdGF0ZV9jbnRcbiIpKTsKIAkJbW9kdWxlX3B1dChjYWxsaW5nX21vZHVsZSk7Ci0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLApAQCAtMzg3LDEyICszNzksMTIgQEAKIAlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoYWNwaV9mYWR0LnNtaV9jbWQsCiAJCQkJICAgICh1MzIpIGFjcGlfZmFkdC5wc3RhdGVfY250LCA4KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJGYWlsZWQgdG8gd3JpdGUgcHN0YXRlX2NudCBbMHgleF0gdG8gIgotCQkJCSAgInNtaV9jbWQgWzB4JXhdXG4iLCBhY3BpX2ZhZHQucHN0YXRlX2NudCwKLQkJCQkgIGFjcGlfZmFkdC5zbWlfY21kKSk7CisJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJIkZhaWxlZCB0byB3cml0ZSBwc3RhdGVfY250IFsweCV4XSB0byAiCisJCQkJInNtaV9jbWQgWzB4JXhdIiwgYWNwaV9mYWR0LnBzdGF0ZV9jbnQsCisJCQkJYWNwaV9mYWR0LnNtaV9jbWQpKTsKIAkJbW9kdWxlX3B1dChjYWxsaW5nX21vZHVsZSk7Ci0JCXJldHVybl9WQUxVRShzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIFN1Y2Nlc3MuIElmIHRoZXJlJ3Mgbm8gX1BQQywgd2UgbmVlZCB0byBmZWFyIG5vdGhpbmcsIHNvCkBAIC00MDIsNyArMzk0LDcgQEAKIAlpZiAoIShhY3BpX3Byb2Nlc3Nvcl9wcGNfc3RhdHVzICYgUFBDX0lOX1VTRSkpCiAJCW1vZHVsZV9wdXQoY2FsbGluZ19tb2R1bGUpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfcHJvY2Vzc29yX25vdGlmeV9zbW0pOwpAQCAtNDIzLDcgKzQxNSw2IEBACiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKilzZXEtPnByaXZhdGU7CiAJaW50IGk7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9wZXJmX3NlcV9zaG93Iik7CiAKIAlpZiAoIXByKQogCQlnb3RvIGVuZDsKQEAgLTQ0Nyw3ICs0MzgsNyBAQAogCQkJICAgKHUzMikgcHItPnBlcmZvcm1hbmNlLT5zdGF0ZXNbaV0udHJhbnNpdGlvbl9sYXRlbmN5KTsKIAogICAgICAgZW5kOgotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9wZXJmX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC00NjksMjMgKzQ2MCwyMiBAQAogCXVuc2lnbmVkIGludCBuZXdfc3RhdGUgPSAwOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSBwb2xpY3k7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl93cml0ZV9wZXJmb3JtYW5jZSIpOwogCiAJaWYgKCFwciB8fCAoY291bnQgPiBzaXplb2Yoc3RhdGVfc3RyaW5nKSAtIDEpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcGVyZiA9IHByLT5wZXJmb3JtYW5jZTsKIAlpZiAoIXBlcmYpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RhdGVfc3RyaW5nLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCXN0YXRlX3N0cmluZ1tjb3VudF0gPSAnXDAnOwogCW5ld19zdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKHN0YXRlX3N0cmluZywgTlVMTCwgMCk7CiAKIAlpZiAobmV3X3N0YXRlID49IHBlcmYtPnN0YXRlX2NvdW50KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJY3B1ZnJlcV9nZXRfcG9saWN5KCZwb2xpY3ksIHByLT5pZCk7CiAKQEAgLTQ5NSw5ICs0ODUsOSBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZwb2xpY3kpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCi0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfY3B1ZnJlcV9hZGRfZmlsZShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQpAQCAtNTA1LDQyICs0OTUsMzYgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2NwdWZyZXFfYWRkZmlsZSIpOwogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UocHItPmhhbmRsZSwgJmRldmljZSkpCi0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAKIAkvKiBhZGQgZmlsZSAncGVyZm9ybWFuY2UnIFtSL1ddICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9GSUxFX1BFUkZPUk1BTkNFLAogCQkJCSAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCSAgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwotCWlmICghZW50cnkpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnIGZzIGVudHJ5XG4iLAotCQkJCSAgQUNQSV9QUk9DRVNTT1JfRklMRV9QRVJGT1JNQU5DRSkpOwotCWVsc2UgeworCWlmIChlbnRyeSl7CiAJCWFjcGlfcHJvY2Vzc29yX3BlcmZfZm9wcy53cml0ZSA9IGFjcGlfcHJvY2Vzc29yX3dyaXRlX3BlcmZvcm1hbmNlOwogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfcHJvY2Vzc29yX3BlcmZfZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfY3B1ZnJlcV9yZW1vdmVfZmlsZShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfY3B1ZnJlcV9hZGRmaWxlIik7CiAKIAlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShwci0+aGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCS8qIHJlbW92ZSBmaWxlICdwZXJmb3JtYW5jZScgKi8KIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9GSUxFX1BFUkZPUk1BTkNFLAogCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKICNlbHNlCkBAIC02OTgsMTIgKzY4MiwxMiBAQAogCQkvKiBWYWxpZGF0ZSB0aGUgRG9tYWluIGluZm8gKi8KIAkJY291bnRfdGFyZ2V0ID0gcGRvbWFpbi0+bnVtX3Byb2Nlc3NvcnM7CiAJCWNvdW50ID0gMTsKLQkJaWYgKHBkb21haW4tPmNvb3JkX3R5cGUgPT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQUxMIHx8Ci0JCSAgICBwZG9tYWluLT5jb29yZF90eXBlID09IERPTUFJTl9DT09SRF9UWVBFX0hXX0FMTCkgeworCQlpZiAocGRvbWFpbi0+Y29vcmRfdHlwZSA9PSBET01BSU5fQ09PUkRfVFlQRV9TV19BTEwpCiAJCQlwci0+cGVyZm9ybWFuY2UtPnNoYXJlZF90eXBlID0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTEw7Ci0JCX0gZWxzZSBpZiAocGRvbWFpbi0+Y29vcmRfdHlwZSA9PSBET01BSU5fQ09PUkRfVFlQRV9TV19BTlkpIHsKKwkJZWxzZSBpZiAocGRvbWFpbi0+Y29vcmRfdHlwZSA9PSBET01BSU5fQ09PUkRfVFlQRV9IV19BTEwpCisJCQlwci0+cGVyZm9ybWFuY2UtPnNoYXJlZF90eXBlID0gQ1BVRlJFUV9TSEFSRURfVFlQRV9IVzsKKwkJZWxzZSBpZiAocGRvbWFpbi0+Y29vcmRfdHlwZSA9PSBET01BSU5fQ09PUkRfVFlQRV9TV19BTlkpCiAJCQlwci0+cGVyZm9ybWFuY2UtPnNoYXJlZF90eXBlID0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTlk7Ci0JCX0KIAogCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaikgewogCQkJaWYgKGkgPT0gaikKQEAgLTc4NCwyMiArNzY4LDIxIEBACiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX3JlZ2lzdGVyX3BlcmZvcm1hbmNlIik7CiAKIAlpZiAoIShhY3BpX3Byb2Nlc3Nvcl9wcGNfc3RhdHVzICYgUFBDX1JFR0lTVEVSRUQpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwogCiAJcHIgPSBwcm9jZXNzb3JzW2NwdV07CiAJaWYgKCFwcikgewogCQltdXRleF91bmxvY2soJnBlcmZvcm1hbmNlX211dGV4KTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAocHItPnBlcmZvcm1hbmNlKSB7CiAJCW11dGV4X3VubG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwotCQlyZXR1cm5fVkFMVUUoLUVCVVNZKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlXQVJOX09OKCFwZXJmb3JtYW5jZSk7CkBAIC04MDksMTMgKzc5MiwxMyBAQAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2VfaW5mbyhwcikpIHsKIAkJcHItPnBlcmZvcm1hbmNlID0gTlVMTDsKIAkJbXV0ZXhfdW5sb2NrKCZwZXJmb3JtYW5jZV9tdXRleCk7Ci0JCXJldHVybl9WQUxVRSgtRUlPKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJYWNwaV9jcHVmcmVxX2FkZF9maWxlKHByKTsKIAogCW11dGV4X3VubG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSk7CkBAIC04MjYsMTQgKzgwOSwxMyBAQAogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlIik7CiAKIAltdXRleF9sb2NrKCZwZXJmb3JtYW5jZV9tdXRleCk7CiAKIAlwciA9IHByb2Nlc3NvcnNbY3B1XTsKIAlpZiAoIXByKSB7CiAJCW11dGV4X3VubG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChwci0+cGVyZm9ybWFuY2UpCkBAIC04NDQsNyArODI2LDcgQEAKIAogCW11dGV4X3VubG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwppbmRleCBmOTlhZDA1Li5lZjVlMGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwpAQCAtNTQsMTMgKzU0LDEyIEBACiAJdTE2IHB4ID0gMDsKIAl1MTYgdHggPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfYXBwbHlfbGltaXQiKTsKIAogCWlmICghcHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXByLT5mbGFncy5saW1pdCkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChwci0+ZmxhZ3MudGhyb3R0bGluZykgewogCQlpZiAocHItPmxpbWl0LnVzZXIudHggPiB0eCkKQEAgLTgyLDkgKzgxLDkgQEAKIAogICAgICAgZW5kOgogCWlmIChyZXN1bHQpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJVbmFibGUgdG8gc2V0IGxpbWl0XG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byBzZXQgbGltaXRcbiIpOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQpAQCAtMjAwLDE5ICsxOTksMTggQEAKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJaW50IHR4ID0gMCwgbWF4X3R4X3B4ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX3NldF90aGVybWFsX2xpbWl0Iik7CiAKIAlpZiAoKHR5cGUgPCBBQ1BJX1BST0NFU1NPUl9MSU1JVF9OT05FKQogCSAgICB8fCAodHlwZSA+IEFDUElfUFJPQ0VTU09SX0xJTUlUX0RFQ1JFTUVOVCkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAlwciA9IChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJaWYgKCFwcikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFRoZXJtYWwgbGltaXRzIGFyZSBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgUHgvVHggc3RhdGUuICovCiAJaWYgKHByLT5mbGFncy50aHJvdHRsaW5nKQpAQCAtMjg5LDMwICsyODcsMjggQEAKIAogCQlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9hcHBseV9saW1pdChwcik7CiAJCWlmIChyZXN1bHQpCi0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCQkgICJVbmFibGUgdG8gc2V0IHRoZXJtYWwgbGltaXRcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byBzZXQgdGhlcm1hbCBsaW1pdFxuIik7CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiVGhlcm1hbCBsaW1pdCBub3cgKFAlZDpUJWQpXG4iLAogCQkJCSAgcHItPmxpbWl0LnRoZXJtYWwucHgsIHByLT5saW1pdC50aGVybWFsLnR4KSk7CiAJfSBlbHNlCiAJCXJlc3VsdCA9IDA7CiAJaWYgKG1heF90eF9weCkKLQkJcmV0dXJuX1ZBTFVFKDEpOworCQlyZXR1cm4gMTsKIAllbHNlCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogfQogCiBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X2xpbWl0X2luZm8oc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl9nZXRfbGltaXRfaW5mbyIpOwogCiAJaWYgKCFwcikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChwci0+ZmxhZ3MudGhyb3R0bGluZykKIAkJcHItPmZsYWdzLmxpbWl0ID0gMTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogL3Byb2MgaW50ZXJmYWNlICovCkBAIC0zMjEsNyArMzE3LDYgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqKXNlcS0+cHJpdmF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2xpbWl0X3NlcV9zaG93Iik7CiAKIAlpZiAoIXByKQogCQlnb3RvIGVuZDsKQEAgLTMzOSw3ICszMzQsNyBAQAogCQkgICBwci0+bGltaXQudGhlcm1hbC5weCwgcHItPmxpbWl0LnRoZXJtYWwudHgpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2xpbWl0X29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0zNTksMzYgKzM1NCwzMyBAQAogCWludCBweCA9IDA7CiAJaW50IHR4ID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX3dyaXRlX2xpbWl0Iik7CiAKIAlpZiAoIXByIHx8IChjb3VudCA+IHNpemVvZihsaW1pdF9zdHJpbmcpIC0gMSkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgYXJndW1lbnRcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY29weV9mcm9tX3VzZXIobGltaXRfc3RyaW5nLCBidWZmZXIsIGNvdW50KSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBkYXRhXG4iKSk7Ci0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJbGltaXRfc3RyaW5nW2NvdW50XSA9ICdcMCc7CiAKIAlpZiAoc3NjYW5mKGxpbWl0X3N0cmluZywgIiVkOiVkIiwgJnB4LCAmdHgpICE9IDIpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgZGF0YSBmb3JtYXRcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGRhdGEgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHByLT5mbGFncy50aHJvdHRsaW5nKSB7CiAJCWlmICgodHggPCAwKSB8fCAodHggPiAocHItPnRocm90dGxpbmcuc3RhdGVfY291bnQgLSAxKSkpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIHR4XG4iKSk7Ci0JCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIHR4XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXByLT5saW1pdC51c2VyLnR4ID0gdHg7CiAJfQogCiAJcmVzdWx0ID0gYWNwaV9wcm9jZXNzb3JfYXBwbHlfbGltaXQocHIpOwogCi0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9wcm9jZXNzb3JfbGltaXRfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggYjk2NjU0OS4uZDA0NGVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTU1LDEzICs1NSwxMiBAQAogCXUzMiBkdXR5X21hc2sgPSAwOwogCXUzMiBkdXR5X3ZhbHVlID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfcHJvY2Vzc29yX2dldF90aHJvdHRsaW5nIik7CiAKIAlpZiAoIXByKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFwci0+ZmxhZ3MudGhyb3R0bGluZykKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByLT50aHJvdHRsaW5nLnN0YXRlID0gMDsKIApAQCAtOTMsNyArOTIsNyBAQAogCQkJICAiVGhyb3R0bGluZyBzdGF0ZSBpcyBUJWQgKCVkJSUgdGhyb3R0bGluZyBhcHBsaWVkKVxuIiwKIAkJCSAgc3RhdGUsIHByLT50aHJvdHRsaW5nLnN0YXRlc1tzdGF0ZV0ucGVyZm9ybWFuY2UpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGFjcGlfcHJvY2Vzc29yX3NldF90aHJvdHRsaW5nKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIGludCBzdGF0ZSkKQEAgLTEwMiwxOSArMTAxLDE4IEBACiAJdTMyIGR1dHlfbWFzayA9IDA7CiAJdTMyIGR1dHlfdmFsdWUgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3Jfc2V0X3Rocm90dGxpbmciKTsKIAogCWlmICghcHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoKHN0YXRlIDwgMCkgfHwgKHN0YXRlID4gKHByLT50aHJvdHRsaW5nLnN0YXRlX2NvdW50IC0gMSkpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFwci0+ZmxhZ3MudGhyb3R0bGluZykKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChzdGF0ZSA9PSBwci0+dGhyb3R0bGluZy5zdGF0ZSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCS8qCiAJICogQ2FsY3VsYXRlIHRoZSBkdXR5X3ZhbHVlIGFuZCBkdXR5X21hc2suCkBAIC0xNjUsNyArMTYzLDcgQEAKIAkJCSAgKHByLT50aHJvdHRsaW5nLnN0YXRlc1tzdGF0ZV0ucGVyZm9ybWFuY2UgPyBwci0+CiAJCQkgICB0aHJvdHRsaW5nLnN0YXRlc1tzdGF0ZV0ucGVyZm9ybWFuY2UgLyAxMCA6IDApKSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19pbmZvKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCkBAIC0xNzQsNyArMTcyLDYgQEAKIAlpbnQgc3RlcCA9IDA7CiAJaW50IGkgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyIpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAicGJsa19hZGRyZXNzWzB4JTA4eF0gZHV0eV9vZmZzZXRbJWRdIGR1dHlfd2lkdGhbJWRdXG4iLApAQCAtMTgzLDIxICsxODAsMjEgQEAKIAkJCSAgcHItPnRocm90dGxpbmcuZHV0eV93aWR0aCkpOwogCiAJaWYgKCFwcikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRCRDogU3VwcG9ydCBBQ1BJIDIuMCBvYmplY3RzICovCiAKIAlpZiAoIXByLT50aHJvdHRsaW5nLmFkZHJlc3MpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTm8gdGhyb3R0bGluZyByZWdpc3RlclxuIikpOwotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoIXByLT50aHJvdHRsaW5nLmR1dHlfd2lkdGgpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTm8gdGhyb3R0bGluZyBzdGF0ZXNcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAJLyogVEJEOiBTdXBwb3J0IGR1dHlfY3ljbGUgdmFsdWVzIHRoYXQgc3BhbiBiaXQgNC4gKi8KIAllbHNlIGlmICgocHItPnRocm90dGxpbmcuZHV0eV9vZmZzZXQgKyBwci0+dGhyb3R0bGluZy5kdXR5X3dpZHRoKSA+IDQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLCAiZHV0eV9jeWNsZSBzcGFucyBiaXQgNFxuIikpOwotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJkdXR5X2N5Y2xlIHNwYW5zIGJpdCA0XG4iKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyoKQEAgLTIwOCw3ICsyMDUsNyBAQAogCWlmIChlcnJhdGEucGlpeDQudGhyb3R0bGUpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIlRocm90dGxpbmcgbm90IHN1cHBvcnRlZCBvbiBQSUlYNCBBLSBvciBCLXN0ZXBcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAlwci0+dGhyb3R0bGluZy5zdGF0ZV9jb3VudCA9IDEgPDwgYWNwaV9mYWR0LmR1dHlfd2lkdGg7CkBAIC0yNTQsNyArMjUxLDcgQEAKIAlpZiAocmVzdWx0KQogCQlwci0+ZmxhZ3MudGhyb3R0bGluZyA9IDA7CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKiBwcm9jIGludGVyZmFjZSAqLwpAQCAtMjY2LDcgKzI2Myw2IEBACiAJaW50IGkgPSAwOwogCWludCByZXN1bHQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9wcm9jZXNzb3JfdGhyb3R0bGluZ19zZXFfc2hvdyIpOwogCiAJaWYgKCFwcikKIAkJZ290byBlbmQ7CkBAIC0yOTYsNyArMjkyLDcgQEAKIAkJCSAgICB0aHJvdHRsaW5nLnN0YXRlc1tpXS5wZXJmb3JtYW5jZSAvIDEwIDogMCkpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLApAQCAtMzE1LDEzICszMTEsMTIgQEAKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqKW0tPnByaXZhdGU7CiAJY2hhciBzdGF0ZV9zdHJpbmdbMTJdID0geyAnXDAnIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3Byb2Nlc3Nvcl93cml0ZV90aHJvdHRsaW5nIik7CiAKIAlpZiAoIXByIHx8IChjb3VudCA+IHNpemVvZihzdGF0ZV9zdHJpbmcpIC0gMSkpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RhdGVfc3RyaW5nLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCXN0YXRlX3N0cmluZ1tjb3VudF0gPSAnXDAnOwogCkBAIC0zMjksOSArMzI0LDkgQEAKIAkJCQkJICAgICAgIHNpbXBsZV9zdHJ0b3VsKHN0YXRlX3N0cmluZywKIAkJCQkJCQkgICAgICBOVUxMLCAwKSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKLQlyZXR1cm5fVkFMVUUoY291bnQpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nX2ZvcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCBmODMxNmEwLi44NjFhYzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTE2MiwxMSArMTYyLDEwIEBACiAKIHZvaWQgYWNwaV9idXNfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZ1bmN0aW9uLCB2b2lkICpjb250ZXh0KQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2RhdGFfaGFuZGxlciIpOwogCiAJLyogVEJEICovCiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X3Bvd2VyX2ZsYWdzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtMTc1LDcgKzE3NCw2IEBACiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gTlVMTDsKIAl1MzIgaSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19nZXRfcG93ZXJfZmxhZ3MiKTsKIAogCS8qCiAJICogUG93ZXIgTWFuYWdlbWVudCBGbGFncwpAQCAtMjI4LDcgKzIyNiw3IEBACiAKIAlkZXZpY2UtPnBvd2VyLnN0YXRlID0gQUNQSV9TVEFURV9VTktOT1dOOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBpbnQgYWNwaV9tYXRjaF9pZHMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGNoYXIgKmlkcykKQEAgLTMwNiwyMCArMzA0LDE4IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19nZXRfd2FrZXVwX2ZsYWdzIik7CiAKIAkvKiBfUFJXICovCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlLT5oYW5kbGUsICJfUFJXIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJFcnJvciBldmFsdWF0aW5nIF9QUldcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV2YWx1YXRpbmcgX1BSVyIpKTsKIAkJZ290byBlbmQ7CiAJfQogCiAJcGFja2FnZSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKWJ1ZmZlci5wb2ludGVyOwogCXN0YXR1cyA9IGFjcGlfYnVzX2V4dHJhY3Rfd2FrZXVwX2RldmljZV9wb3dlcl9wYWNrYWdlKGRldmljZSwgcGFja2FnZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgZXh0cmFjdGluZyBfUFJXIHBhY2thZ2VcbiIpKTsKKwkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkV4dHJhY3RpbmcgX1BSVyBwYWNrYWdlIikpOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTMzMyw3ICszMjksNyBAQAogICAgICAgZW5kOgogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy53YWtlX2NhcGFibGUgPSAwOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4OSwxOSArNDg1LDE4IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19kcml2ZXJfaW5pdCIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWRyaXZlcikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghZHJpdmVyLT5vcHMuYWRkKQotCQlyZXR1cm5fVkFMVUUoLUVOT1NZUyk7CisJCXJldHVybiAtRU5PU1lTOwogCiAJcmVzdWx0ID0gZHJpdmVyLT5vcHMuYWRkKGRldmljZSk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZpY2UtPmRyaXZlciA9IE5VTEw7CiAJCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IE5VTEw7Ci0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCX0KIAogCWRldmljZS0+ZHJpdmVyID0gZHJpdmVyOwpAQCAtNTEzLDcgKzUwOCw3IEBACiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkgICJEcml2ZXIgc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIGRldmljZVxuIikpOwotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3Qoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC01MjEsMTAgKzUxNiw5IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFjcGlfZHJpdmVyICpkcml2ZXI7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3QiKTsKIAogCWlmICghKGRyaXZlciA9IGRldmljZS0+ZHJpdmVyKSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCWlmIChkcml2ZXItPm9wcy5zdGFydCkgewogCQlyZXN1bHQgPSBkcml2ZXItPm9wcy5zdGFydChkZXZpY2UpOwpAQCAtNTMyLDE0ICs1MjYsMTMgQEAKIAkJCWRyaXZlci0+b3BzLnJlbW92ZShkZXZpY2UsIEFDUElfQlVTX1JFTU9WQUxfTk9STUFMKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBhY3BpX2RyaXZlcl9hdHRhY2goc3RydWN0IGFjcGlfZHJpdmVyICpkcnYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2RyaXZlcl9hdHRhY2giKTsKIAogCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZhY3BpX2RldmljZV9saXN0KSB7CkBAIC01NjgsNyArNTYxLDYgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZHJpdmVyX2RldGFjaCIpOwogCiAJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJmFjcGlfZGV2aWNlX2xpc3QpIHsKQEAgLTU5OCwxNyArNTkwLDE2IEBACiAgKi8KIGludCBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGFjcGlfZHJpdmVyICpkcml2ZXIpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyIik7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZHJpdmVyLT5ub2RlLCAmYWNwaV9idXNfZHJpdmVycyk7CiAJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCWFjcGlfZHJpdmVyX2F0dGFjaChkcml2ZXIpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcik7CkBAIC02NDYsNyArNjM3LDYgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2ZpbmRfZHJpdmVyIik7CiAKIAlzcGluX2xvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmYWNwaV9idXNfZHJpdmVycykgewpAQCAtNjY2LDE5ICs2NTYsNDEgQEAKIAlzcGluX3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAKICAgICAgIERvbmU6Ci0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBFbnVtZXJhdGlvbgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorYWNwaV9zdGF0dXMKK2FjcGlfYnVzX2dldF9lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqZWpkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSB0bXA7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRUpEIiwgJnRtcCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX0VKRCIsIE5VTEwsICZidWZmZXIpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQlvYmogPSBidWZmZXIucG9pbnRlcjsKKwkJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsIG9iai0+c3RyaW5nLnBvaW50ZXIsIGVqZCk7CisJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfYnVzX2dldF9lamQpOworCisKIHN0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X2ZsYWdzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfaGFuZGxlIHRlbXAgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfZ2V0X2ZsYWdzIik7CiAKIAkvKiBQcmVzZW5jZSBvZiBfU1RBIGluZGljYXRlcyAnZHluYW1pY19zdGF0dXMnICovCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX1NUQSIsICZ0ZW1wKTsKQEAgLTcyNCw3ICs3MzYsNyBAQAogCiAJLyogVEJEOiBQZWZvcm1hbmNlIG1hbmFnZW1lbnQgKi8KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLApAQCAtOTE4LDEwICs5MzAsOSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX2RyaXZlciAqZHJpdmVyOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfcmVtb3ZlIik7CiAKIAlpZiAoIWRldikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRyaXZlciA9IGRldi0+ZHJpdmVyOwogCkBAIC05MzAsMTIgKzk0MSwxMiBAQAogCQlpZiAoZHJpdmVyLT5vcHMuc3RvcCkgewogCQkJcmVzdWx0ID0gZHJpdmVyLT5vcHMuc3RvcChkZXYsIEFDUElfQlVTX1JFTU9WQUxfRUpFQ1QpOwogCQkJaWYgKHJlc3VsdCkKLQkJCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OwogCQl9CiAKIAkJcmVzdWx0ID0gZGV2LT5kcml2ZXItPm9wcy5yZW1vdmUoZGV2LCBBQ1BJX0JVU19SRU1PVkFMX0VKRUNUKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCQlyZXR1cm4gcmVzdWx0OwogCQl9CiAKIAkJYXRvbWljX2RlYygmZGV2LT5kcml2ZXItPnJlZmVyZW5jZXMpOwpAQCAtOTQ0LDcgKzk1NSw3IEBACiAJfQogCiAJaWYgKCFybWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPmZsYWdzLmJ1c19hZGRyZXNzKSB7CiAJCWlmICgoZGV2LT5wYXJlbnQpICYmIChkZXYtPnBhcmVudC0+b3BzLnVuYmluZCkpCkBAIC05NTMsNyArOTY0LDcgQEAKIAogCWFjcGlfZGV2aWNlX3VucmVnaXN0ZXIoZGV2LCBBQ1BJX0JVU19SRU1PVkFMX0VKRUNUKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtOTYzLDE1ICs5NzQsMTQgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2FkZF9zaW5nbGVfb2JqZWN0Iik7CiAKIAlpZiAoIWNoaWxkKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXZpY2UpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKSk7Ci0JCXJldHVybl9WQUxVRSgtRU5PTUVNKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZSkpOwogCkBAIC0xMDk2LDcgKzExMDYsNyBAQAogCQlrZnJlZShkZXZpY2UpOwogCX0KIAotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9idXNfc2NhbihzdHJ1Y3QgYWNwaV9kZXZpY2UgKnN0YXJ0LCBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMpCkBAIC0xMTA5LDEwICsxMTE5LDkgQEAKIAlhY3BpX29iamVjdF90eXBlIHR5cGUgPSAwOwogCXUzMiBsZXZlbCA9IDE7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19zY2FuIik7CiAKIAlpZiAoIXN0YXJ0KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcGFyZW50ID0gc3RhcnQ7CiAJcGhhbmRsZSA9IHN0YXJ0LT5oYW5kbGU7CkBAIC0xMjA5LDcgKzEyMTgsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBpbnQKQEAgLTEyMTksNyArMTIyOCw2IEBACiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfYnVzX2FkZCIpOwogCiAJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdChjaGlsZCwgcGFyZW50LCBoYW5kbGUsIHR5cGUpOwogCWlmICghcmVzdWx0KSB7CkBAIC0xMjI3LDcgKzEyMzUsNyBAQAogCQlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKCpjaGlsZCwgJm9wcyk7CiAJfQotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfYWRkKTsKQEAgLTEyMzcsMTAgKzEyNDUsOSBAQAogCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2J1c19zdGFydCIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXN1bHQgPSBhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3QoZGV2aWNlKTsKIAlpZiAoIXJlc3VsdCkgewpAQCAtMTI0OCw3ICsxMjU1LDcgQEAKIAkJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwogCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGRldmljZSwgJm9wcyk7CiAJfQotCXJldHVybl9WQUxVRShyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfc3RhcnQpOwpAQCAtMTMxNCwxMCArMTMyMSw5IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9idXNfc2Nhbl9maXhlZCIpOwogCiAJaWYgKCFyb290KQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJLyoKIAkgKiBFbnVtZXJhdGUgYWxsIGZpeGVkLWZlYXR1cmUgZGV2aWNlcy4KQEAgLTEzMzgsNyArMTM0NCw3IEBACiAJCQlyZXN1bHQgPSBhY3BpX3N0YXJ0X3NpbmdsZV9vYmplY3QoZGV2aWNlKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAKQEAgLTE0MjcsNyArMTQzMyw3IEBACiB9CiAKIAotc3RydWN0IGJ1c190eXBlIGFjcGlfYnVzX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGJ1c190eXBlIGFjcGlfYnVzX3R5cGUgPSB7CiAJLm5hbWUJCT0gImFjcGkiLAogCS5zdXNwZW5kCT0gYWNwaV9kZXZpY2Vfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGFjcGlfZGV2aWNlX3Jlc3VtZSwKQEAgLTE0NDAsMTAgKzE0NDYsOSBAQAogCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3NjYW5faW5pdCIpOwogCiAJaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybl9WQUxVRSgwKTsKKwkJcmV0dXJuIDA7CiAKIAlrc2V0X3JlZ2lzdGVyKCZhY3BpX25hbWVzcGFjZV9rc2V0KTsKIApAQCAtMTQ4OCw3ICsxNDkzLDcgQEAKIAkJYWNwaV9kZXZpY2VfdW5yZWdpc3RlcihhY3BpX3Jvb3QsIEFDUElfQlVTX1JFTU9WQUxfTk9STUFMKTsKIAogICAgICAgRG9uZToKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdWJzeXNfaW5pdGNhbGwoYWNwaV9zY2FuX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IGE5MzRhYzQuLmM5MGJkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTQ3LDEwICs0Nyw5IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9zeXN0ZW1fcmVhZF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9zeXN0ZW1fcmVhZF9pbmZvIik7CiAKIAlzZXFfcHJpbnRmKHNlcSwgInZlcnNpb246ICAgICAgICAgICAgICAgICAleFxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9zeXN0ZW1faW5mb19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtODAsMTcgKzc5LDE2IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGRzZHQgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3NpemVfdCByZXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3N5c3RlbV9yZWFkX2RzZHQiKTsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfVEFCTEVfSURfRFNEVCwgMSwgJmRzZHQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJlcyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsCiAJCQkJICAgICAgZHNkdC5wb2ludGVyLCBkc2R0Lmxlbmd0aCk7CiAJYWNwaV9vc19mcmVlKGRzZHQucG9pbnRlcik7CiAKLQlyZXR1cm5fVkFMVUUocmVzKTsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgc3NpemVfdCBhY3BpX3N5c3RlbV9yZWFkX2ZhZHQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LApAQCAtMTA4LDE3ICsxMDYsMTYgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgZmFkdCA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzc2l6ZV90IHJlczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfc3lzdGVtX3JlYWRfZmFkdCIpOwogCiAJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9UQUJMRV9JRF9GQURULCAxLCAmZmFkdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJcmVzID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywKIAkJCQkgICAgICBmYWR0LnBvaW50ZXIsIGZhZHQubGVuZ3RoKTsKIAlhY3BpX29zX2ZyZWUoZmFkdC5wb2ludGVyKTsKIAotCXJldHVybl9WQUxVRShyZXMpOworCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfc3lzdGVtX2luaXQodm9pZCkKQEAgLTEyNywxMCArMTI0LDkgQEAKIAlpbnQgZXJyb3IgPSAwOwogCWNoYXIgKm5hbWU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3N5c3RlbV9pbml0Iik7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCS8qICdpbmZvJyBbUl0gKi8KIAluYW1lID0gQUNQSV9TWVNURU1fRklMRV9JTkZPOwpAQCAtMTU4LDEyICsxNTQsOSBAQAogCQlnb3RvIEVycm9yOwogCiAgICAgICBEb25lOgotCXJldHVybl9WQUxVRShlcnJvcik7CisJcmV0dXJuIGVycm9yOwogCiAgICAgICBFcnJvcjoKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnIHByb2MgZnMgZW50cnlcbiIsIG5hbWUpKTsKLQogCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfU1lTVEVNX0ZJTEVfRkFEVCwgYWNwaV9yb290X2Rpcik7CiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9TWVNURU1fRklMRV9EU0RULCBhY3BpX3Jvb3RfZGlyKTsKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1NZU1RFTV9GSUxFX0lORk8sIGFjcGlfcm9vdF9kaXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy5jCmluZGV4IGVkNWU4ODEuLmJmYjNiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggZTdmZTNhMS4uYzg1NWY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC0yMjIsNTEgKzIyMiw0OCBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX2dldF90ZW1wZXJhdHVyZSIpOwogCiAJaWYgKCF0eikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXR6LT5sYXN0X3RlbXBlcmF0dXJlID0gdHotPnRlbXBlcmF0dXJlOwogCiAJc3RhdHVzID0KIAkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKHR6LT5oYW5kbGUsICJfVE1QIiwgTlVMTCwgJnR6LT50ZW1wZXJhdHVyZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiVGVtcGVyYXR1cmUgaXMgJWx1IGRLXG4iLAogCQkJICB0ei0+dGVtcGVyYXR1cmUpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfZ2V0X3BvbGxpbmdfZnJlcXVlbmN5KHN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX2dldF9wb2xsaW5nX2ZyZXF1ZW5jeSIpOwogCiAJaWYgKCF0eikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcih0ei0+aGFuZGxlLCAiX1RaUCIsIE5VTEwsCiAJCQkJICAmdHotPnBvbGxpbmdfZnJlcXVlbmN5KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJQb2xsaW5nIGZyZXF1ZW5jeSBpcyAlbHUgZFNcbiIsCiAJCQkgIHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSkpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9zZXRfcG9sbGluZyhzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiwgaW50IHNlY29uZHMpCiB7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3NldF9wb2xsaW5nIik7CiAKIAlpZiAoIXR6KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJdHotPnBvbGxpbmdfZnJlcXVlbmN5ID0gc2Vjb25kcyAqIDEwOwkvKiBDb252ZXJ0IHZhbHVlIHRvIGRlY2ktc2Vjb25kcyAqLwogCkBAIC0yNzQsNyArMjcxLDcgQEAKIAkJCSAgIlBvbGxpbmcgZnJlcXVlbmN5IHNldCB0byAlbHUgc2Vjb25kc1xuIiwKIAkJCSAgdHotPnBvbGxpbmdfZnJlcXVlbmN5KSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3NldF9jb29saW5nX21vZGUoc3RydWN0IGFjcGlfdGhlcm1hbCAqdHosIGludCBtb2RlKQpAQCAtMjg0LDI5ICsyODEsMjggQEAKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdCA9IHsgMSwgJmFyZzAgfTsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3NldF9jb29saW5nX21vZGUiKTsKIAogCWlmICghdHopCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUodHotPmhhbmRsZSwgIl9TQ1AiLCAmaGFuZGxlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiX1NDUCBub3QgcHJlc2VudFxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWFyZzAuaW50ZWdlci52YWx1ZSA9IG1vZGU7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsICZhcmdfbGlzdCwgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJdHotPmNvb2xpbmdfbW9kZSA9IG1vZGU7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJDb29saW5nIG1vZGUgWyVzXVxuIiwKIAkJCSAgbW9kZSA/ICJwYXNzaXZlIiA6ICJhY3RpdmUiKSk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2dldF90cmlwX3BvaW50cyhzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKQEAgLTMxNCwxMCArMzEwLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlpbnQgaSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfZ2V0X3RyaXBfcG9pbnRzIik7CiAKIAlpZiAoIXR6KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogQ3JpdGljYWwgU2h1dGRvd24gKHJlcXVpcmVkKSAqLwogCkBAIC0zMjUsOCArMzIwLDggQEAKIAkJCQkgICAgICAgJnR6LT50cmlwcy5jcml0aWNhbC50ZW1wZXJhdHVyZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCA9IDA7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJObyBjcml0aWNhbCB0aHJlc2hvbGRcbiIpKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiTm8gY3JpdGljYWwgdGhyZXNob2xkIikpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9IGVsc2UgewogCQl0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MudmFsaWQgPSAxOwogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCkBAIC0zODQsOCArMzc5LDcgQEAKIAkJCXR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkID0gMDsKIAogCQlpZiAoIXR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKQotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCQkgICJJbnZhbGlkIHBhc3NpdmUgdGhyZXNob2xkXG4iKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiSW52YWxpZCBwYXNzaXZlIHRocmVzaG9sZFxuIik7CiAJCWVsc2UKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkJICAiRm91bmQgcGFzc2l2ZSB0aHJlc2hvbGQgWyVsdV1cbiIsCkBAIC00MTQsMjkgKzQwOCwyNyBAQAogCQkJCQkgICJGb3VuZCBhY3RpdmUgdGhyZXNob2xkIFslZF06WyVsdV1cbiIsCiAJCQkJCSAgaSwgdHotPnRyaXBzLmFjdGl2ZVtpXS50ZW1wZXJhdHVyZSkpOwogCQl9IGVsc2UKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkludmFsaWQgYWN0aXZlIHRocmVzaG9sZCBbJWRdXG4iLAotCQkJCQkgIGkpKTsKKwkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJCSJJbnZhbGlkIGFjdGl2ZSB0aHJlc2hvbGQgWyVkXSIsIGkpKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2dldF9kZXZpY2VzKHN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6KQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX2dldF9kZXZpY2VzIik7CiAKIAlpZiAoIXR6KQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJc3RhdHVzID0KIAkgICAgYWNwaV9ldmFsdWF0ZV9yZWZlcmVuY2UodHotPmhhbmRsZSwgIl9UWkQiLCBOVUxMLCAmdHotPmRldmljZXMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfY2FsbF91c2VybW9kZShjaGFyICpwYXRoKQpAQCAtNDQ0LDEwICs0MzYsOSBAQAogCWNoYXIgKmFyZ3ZbMl0gPSB7IE5VTEwsIE5VTEwgfTsKIAljaGFyICplbnZwWzNdID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfY2FsbF91c2VybW9kZSIpOwogCiAJaWYgKCFwYXRoKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYXJndlswXSA9IHBhdGg7CiAKQEAgLTQ1Nyw3ICs0NDgsNyBAQAogCiAJY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LCBlbnZwLCAwKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfY3JpdGljYWwoc3RydWN0IGFjcGlfdGhlcm1hbCAqdHopCkBAIC00NjUsMjAgKzQ1NiwxOSBAQAogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF9jcml0aWNhbCIpOwogCiAJaWYgKCF0eiB8fCAhdHotPnRyaXBzLmNyaXRpY2FsLmZsYWdzLnZhbGlkKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHR6LT50ZW1wZXJhdHVyZSA+PSB0ei0+dHJpcHMuY3JpdGljYWwudGVtcGVyYXR1cmUpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLCAiQ3JpdGljYWwgdHJpcCBwb2ludFxuIikpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiQ3JpdGljYWwgdHJpcCBwb2ludFxuIik7CiAJCXR6LT50cmlwcy5jcml0aWNhbC5mbGFncy5lbmFibGVkID0gMTsKIAl9IGVsc2UgaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy5lbmFibGVkKQogCQl0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCA9IDA7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKHR6LT5oYW5kbGUsICZkZXZpY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJcHJpbnRrKEtFUk5fRU1FUkcKIAkgICAgICAgIkNyaXRpY2FsIHRlbXBlcmF0dXJlIHJlYWNoZWQgKCVsZCBDKSwgc2h1dHRpbmcgZG93bi5cbiIsCkBAIC00ODgsNyArNDc4LDcgQEAKIAogCWFjcGlfdGhlcm1hbF9jYWxsX3VzZXJtb2RlKEFDUElfVEhFUk1BTF9QQVRIX1BPV0VST0ZGKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfaG90KHN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6KQpAQCAtNDk2LDI3ICs0ODYsMjYgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfaG90Iik7CiAKIAlpZiAoIXR6IHx8ICF0ei0+dHJpcHMuaG90LmZsYWdzLnZhbGlkKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHR6LT50ZW1wZXJhdHVyZSA+PSB0ei0+dHJpcHMuaG90LnRlbXBlcmF0dXJlKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwgIkhvdCB0cmlwIHBvaW50XG4iKSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJIb3QgdHJpcCBwb2ludFxuIik7CiAJCXR6LT50cmlwcy5ob3QuZmxhZ3MuZW5hYmxlZCA9IDE7CiAJfSBlbHNlIGlmICh0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQpCiAJCXR6LT50cmlwcy5ob3QuZmxhZ3MuZW5hYmxlZCA9IDA7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKHR6LT5oYW5kbGUsICZkZXZpY2UpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJYWNwaV9idXNfZ2VuZXJhdGVfZXZlbnQoZGV2aWNlLCBBQ1BJX1RIRVJNQUxfTk9USUZZX0hPVCwKIAkJCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQpOwogCiAJLyogVEJEOiBDYWxsIHVzZXItbW9kZSAic2xlZXAoUzQpIiBmdW5jdGlvbiAqLwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfcGFzc2l2ZShzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKQEAgLTUyNiw3ICs1MTUsNiBAQAogCWludCB0cmVuZCA9IDA7CiAJaW50IGkgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3Bhc3NpdmUiKTsKIAogCWlmICghdHogfHwgIXR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKQogCQlyZXR1cm47CkBAIC02MTUsNyArNjAzLDYgQEAKIAlpbnQgaiA9IDA7CiAJdW5zaWduZWQgbG9uZyBtYXh0ZW1wID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF9hY3RpdmUiKTsKIAogCWlmICghdHopCiAJCXJldHVybjsKQEAgLTY0MiwxMCArNjI5LDEwIEBACiAJCQkJCQkgICAgICAgaGFuZGxlc1tqXSwKIAkJCQkJCSAgICAgICBBQ1BJX1NUQVRFX0QwKTsKIAkJCQlpZiAocmVzdWx0KSB7Ci0JCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkJCQkgICJVbmFibGUgdG8gdHVybiBjb29saW5nIGRldmljZSBbJXBdICdvbidcbiIsCi0JCQkJCQkJICBhY3RpdmUtPmRldmljZXMuCi0JCQkJCQkJICBoYW5kbGVzW2pdKSk7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkJCQkgICAgICAiVW5hYmxlIHRvIHR1cm4gY29vbGluZyBkZXZpY2UgWyVwXSAnb24nXG4iLAorCQkJCQkJICAgICAgYWN0aXZlLT5kZXZpY2VzLgorCQkJCQkJICAgICAgaGFuZGxlc1tqXSk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQlhY3RpdmUtPmZsYWdzLmVuYWJsZWQgPSAxOwpAQCAtNjY3LDkgKzY1NCw5IEBACiAJCQlyZXN1bHQgPSBhY3BpX2J1c19zZXRfcG93ZXIoYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0sCiAJCQkJCQkgICAgQUNQSV9TVEFURV9EMyk7CiAJCQlpZiAocmVzdWx0KSB7Ci0JCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCQkJICAiVW5hYmxlIHRvIHR1cm4gY29vbGluZyBkZXZpY2UgWyVwXSAnb2ZmJ1xuIiwKLQkJCQkJCSAgYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0pKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCQkJCQkgICAgICAiVW5hYmxlIHRvIHR1cm4gY29vbGluZyBkZXZpY2UgWyVwXSAnb2ZmJ1xuIiwKKwkJCQkJICAgICAgYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0pOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYWN0aXZlLT5mbGFncy5lbmFibGVkID0gMDsKQEAgLTY5NywxOCArNjg0LDE3IEBACiAJaW50IGkgPSAwOwogCXN0cnVjdCBhY3BpX3RoZXJtYWxfc3RhdGUgc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfY2hlY2siKTsKIAogCWlmICghdHopIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgKE5VTEwpIGNvbnRleHQuXG4iKSk7Ci0JCXJldHVybl9WT0lEOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIChOVUxMKSBjb250ZXh0XG4iKTsKKwkJcmV0dXJuOwogCX0KIAogCXN0YXRlID0gdHotPnN0YXRlOwogCiAJcmVzdWx0ID0gYWNwaV90aGVybWFsX2dldF90ZW1wZXJhdHVyZSh0eik7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCW1lbXNldCgmdHotPnN0YXRlLCAwLCBzaXplb2YodHotPnN0YXRlKSk7CiAKQEAgLTc5Nyw3ICs3ODMsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODEwLDcgKzc5Niw2IEBACiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSAoc3RydWN0IGFjcGlfdGhlcm1hbCAqKXNlcS0+cHJpdmF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF9zdGF0ZV9zZXFfc2hvdyIpOwogCiAJaWYgKCF0eikKIAkJZ290byBlbmQ7CkBAIC04MzMsNyArODE4LDcgQEAKIAl9CiAKICAgICAgIGVuZDoKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3N0YXRlX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC04NDYsNyArODMxLDYgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3RlbXBfc2VxX3Nob3ciKTsKIAogCWlmICghdHopCiAJCWdvdG8gZW5kOwpAQCAtODU5LDcgKzg0Myw3IEBACiAJCSAgIEtFTFZJTl9UT19DRUxTSVVTKHR6LT50ZW1wZXJhdHVyZSkpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF90ZW1wX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC04NzMsNyArODU3LDYgQEAKIAlpbnQgaSA9IDA7CiAJaW50IGogPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3RyaXBfc2VxX3Nob3ciKTsKIAogCWlmICghdHopCiAJCWdvdG8gZW5kOwpAQCAtOTEzLDcgKzg5Niw3IEBACiAJfQogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF90cmlwX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC05MzQsMjggKzkxNywyNSBAQAogCWludCAqYWN0aXZlOwogCWludCBpID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF93cml0ZV90cmlwX3BvaW50cyIpOwogCiAJbGltaXRfc3RyaW5nID0ga21hbGxvYyhBQ1BJX1RIRVJNQUxfTUFYX0xJTUlUX1NUUl9MRU4sIEdGUF9LRVJORUwpOwogCWlmICghbGltaXRfc3RyaW5nKQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCiAJbWVtc2V0KGxpbWl0X3N0cmluZywgMCwgQUNQSV9USEVSTUFMX01BWF9MSU1JVF9TVFJfTEVOKTsKIAogCWFjdGl2ZSA9IGttYWxsb2MoQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY3RpdmUpIHsKIAkJa2ZyZWUobGltaXRfc3RyaW5nKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpZiAoIXR6IHx8IChjb3VudCA+IEFDUElfVEhFUk1BTF9NQVhfTElNSVRfU1RSX0xFTiAtIDEpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIGFyZ3VtZW50XG4iKSk7CiAJCWNvdW50ID0gLUVJTlZBTDsKIAkJZ290byBlbmQ7CiAJfQogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGxpbWl0X3N0cmluZywgYnVmZmVyLCBjb3VudCkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgZGF0YVxuIikpOwogCQljb3VudCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTk2OCw3ICs5NDgsNiBAQAogCQkgICAgICZhY3RpdmVbNV0sICZhY3RpdmVbNl0sICZhY3RpdmVbN10sICZhY3RpdmVbOF0sCiAJCSAgICAgJmFjdGl2ZVs5XSk7CiAJaWYgKCEobnVtID49IDUgJiYgbnVtIDwgKEFDUElfVEhFUk1BTF9NQVhfQUNUSVZFICsgMykpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIGRhdGEgZm9ybWF0XG4iKSk7CiAJCWNvdW50ID0gLUVJTlZBTDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtOTg1LDE0ICs5NjQsMTMgQEAKICAgICAgIGVuZDoKIAlrZnJlZShhY3RpdmUpOwogCWtmcmVlKGxpbWl0X3N0cmluZyk7Ci0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2Nvb2xpbmdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX2Nvb2xpbmdfc2VxX3Nob3ciKTsKIAogCWlmICghdHopCiAJCWdvdG8gZW5kOwpAQCAtMTAwOCw3ICs5ODYsNyBAQAogCQkJICAgdHotPmNvb2xpbmdfbW9kZSA/ICJwYXNzaXZlIiA6ICJhY3RpdmUiKTsKIAogICAgICAgZW5kOgotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfY29vbGluZ19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTAyNywxNiArMTAwNSwxNSBAQAogCWludCByZXN1bHQgPSAwOwogCWNoYXIgbW9kZV9zdHJpbmdbMTJdID0geyAnXDAnIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfd3JpdGVfY29vbGluZ19tb2RlIik7CiAKIAlpZiAoIXR6IHx8IChjb3VudCA+IHNpemVvZihtb2RlX3N0cmluZykgLSAxKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghdHotPmZsYWdzLmNvb2xpbmdfbW9kZSkKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihtb2RlX3N0cmluZywgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAltb2RlX3N0cmluZ1tjb3VudF0gPSAnXDAnOwogCkBAIC0xMDQ0LDE4ICsxMDIxLDE3IEBACiAJCQkJCSAgICAgICBzaW1wbGVfc3RydG91bChtb2RlX3N0cmluZywgTlVMTCwKIAkJCQkJCQkgICAgICAwKSk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAlhY3BpX3RoZXJtYWxfY2hlY2sodHopOwogCi0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3BvbGxpbmdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3BvbGxpbmdfc2VxX3Nob3ciKTsKIAogCWlmICghdHopCiAJCWdvdG8gZW5kOwpAQCAtMTA2OSw3ICsxMDQ1LDcgQEAKIAkJICAgKHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSAvIDEwKSk7CiAKICAgICAgIGVuZDoKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3BvbGxpbmdfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEwODksMTMgKzEwNjUsMTIgQEAKIAljaGFyIHBvbGxpbmdfc3RyaW5nWzEyXSA9IHsgJ1wwJyB9OwogCWludCBzZWNvbmRzID0gMDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF93cml0ZV9wb2xsaW5nIik7CiAKIAlpZiAoIXR6IHx8IChjb3VudCA+IHNpemVvZihwb2xsaW5nX3N0cmluZykgLSAxKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihwb2xsaW5nX3N0cmluZywgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlwb2xsaW5nX3N0cmluZ1tjb3VudF0gPSAnXDAnOwogCkBAIC0xMTAzLDI0ICsxMDc4LDIzIEBACiAKIAlyZXN1bHQgPSBhY3BpX3RoZXJtYWxfc2V0X3BvbGxpbmcodHosIHNlY29uZHMpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJYWNwaV90aGVybWFsX2NoZWNrKHR6KTsKIAotCXJldHVybl9WQUxVRShjb3VudCk7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9hZGRfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfYWRkX2ZzIik7CiAKIAlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKIAkJCQkJCSAgICAgYWNwaV90aGVybWFsX2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCkBAIC0xMTI4LDkgKzExMDIsNyBAQAogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoQUNQSV9USEVSTUFMX0ZJTEVfU1RBVEUsCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1RIRVJNQUxfRklMRV9TVEFURSkpOworCQlyZXR1cm4gLUVOT0RFVjsKIAllbHNlIHsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX3RoZXJtYWxfc3RhdGVfZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC0xMTQxLDkgKzExMTMsNyBAQAogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoQUNQSV9USEVSTUFMX0ZJTEVfVEVNUEVSQVRVUkUsCiAJCQkJICBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1RIRVJNQUxfRklMRV9URU1QRVJBVFVSRSkpOworCQlyZXR1cm4gLUVOT0RFVjsKIAllbHNlIHsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX3RoZXJtYWxfdGVtcF9mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTExNTUsOSArMTEyNSw3IEBACiAJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1RIRVJNQUxfRklMRV9UUklQX1BPSU5UUykpOworCQlyZXR1cm4gLUVOT0RFVjsKIAllbHNlIHsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX3RoZXJtYWxfdHJpcF9mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTExNjksOSArMTEzNyw3IEBACiAJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1RIRVJNQUxfRklMRV9DT09MSU5HX01PREUpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV90aGVybWFsX2Nvb2xpbmdfZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC0xMTgzLDIxICsxMTQ5LDE4IEBACiAJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICclcycgZnMgZW50cnlcbiIsCi0JCQkJICBBQ1BJX1RIRVJNQUxfRklMRV9QT0xMSU5HX0ZSRVEpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV90aGVybWFsX3BvbGxpbmdfZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfcmVtb3ZlX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF9yZW1vdmVfZnMiKTsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1RIRVJNQUxfRklMRV9QT0xMSU5HX0ZSRVEsCkBAIC0xMjE0LDcgKzExNzcsNyBAQAogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IE5VTEw7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTIyNiwxMyArMTE4OSwxMiBAQAogCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilkYXRhOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdGhlcm1hbF9ub3RpZnkiKTsKIAogCWlmICghdHopCi0JCXJldHVybl9WT0lEOworCQlyZXR1cm47CiAKIAlpZiAoYWNwaV9idXNfZ2V0X2RldmljZSh0ei0+aGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfVEhFUk1BTF9OT1RJRllfVEVNUEVSQVRVUkU6CkBAIC0xMjU0LDI3ICsxMjE2LDI2IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfZ2V0X2luZm8oc3RydWN0IGFjcGlfdGhlcm1hbCAqdHopCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfZ2V0X2luZm8iKTsKIAogCWlmICghdHopCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBHZXQgdGVtcGVyYXR1cmUgW19UTVBdIChyZXF1aXJlZCkgKi8KIAlyZXN1bHQgPSBhY3BpX3RoZXJtYWxfZ2V0X3RlbXBlcmF0dXJlKHR6KTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIEdldCB0cmlwIHBvaW50cyBbX0NSVCwgX1BTViwgZXRjLl0gKHJlcXVpcmVkKSAqLwogCXJlc3VsdCA9IGFjcGlfdGhlcm1hbF9nZXRfdHJpcF9wb2ludHModHopOwogCWlmIChyZXN1bHQpCi0JCXJldHVybl9WQUxVRShyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJLyogU2V0IHRoZSBjb29saW5nIG1vZGUgW19TQ1BdIHRvIGFjdGl2ZSBjb29saW5nIChkZWZhdWx0KSAqLwogCXJlc3VsdCA9IGFjcGlfdGhlcm1hbF9zZXRfY29vbGluZ19tb2RlKHR6LCBBQ1BJX1RIRVJNQUxfTU9ERV9BQ1RJVkUpOwpAQCAtMTMxNCw3ICsxMjc1LDcgQEAKIAlpZiAoIXJlc3VsdCkKIAkJdHotPmZsYWdzLmRldmljZXMgPSAxOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC0xMzIzLDE0ICsxMjg0LDEzIEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX2FkZCIpOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAl0eiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3RoZXJtYWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXR6KQotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldCh0eiwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RoZXJtYWwpKTsKIAogCXR6LT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTEzNTUsOCArMTMxNSw2IEBACiAJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgIGFjcGlfdGhlcm1hbF9ub3RpZnksIHR6KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciBpbnN0YWxsaW5nIG5vdGlmeSBoYW5kbGVyXG4iKSk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTEzNzEsNyArMTMyOSw3IEBACiAJCWtmcmVlKHR6KTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQpAQCAtMTM3OSwxMCArMTMzNyw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX3JlbW92ZSIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKQEAgLTEzOTgsOSArMTM1NSw2IEBACiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIodHotPmhhbmRsZSwKIAkJCQkJICAgIEFDUElfREVWSUNFX05PVElGWSwKIAkJCQkJICAgIGFjcGlfdGhlcm1hbF9ub3RpZnkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJFcnJvciByZW1vdmluZyBub3RpZnkgaGFuZGxlclxuIikpOwogCiAJLyogVGVybWluYXRlIHBvbGljeSAqLwogCWlmICh0ei0+dHJpcHMucGFzc2l2ZS5mbGFncy52YWxpZCAmJiB0ei0+dHJpcHMucGFzc2l2ZS5mbGFncy5lbmFibGVkKSB7CkBAIC0xNDE2LDcgKzEzNzAsNyBAQAogCWFjcGlfdGhlcm1hbF9yZW1vdmVfZnMoZGV2aWNlKTsKIAogCWtmcmVlKHR6KTsKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKQpAQCAtMTQyNCw3ICsxMzc4LDcgQEAKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IE5VTEw7CiAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJdHogPSAoc3RydWN0IGFjcGlfdGhlcm1hbCAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIApAQCAtMTQzNywzMSArMTM5MSwyOSBAQAogewogCWludCByZXN1bHQgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV90aGVybWFsX2luaXQiKTsKIAogCWFjcGlfdGhlcm1hbF9kaXIgPSBwcm9jX21rZGlyKEFDUElfVEhFUk1BTF9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX3RoZXJtYWxfZGlyKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCWFjcGlfdGhlcm1hbF9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfdGhlcm1hbF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfVEhFUk1BTF9DTEFTUywgYWNwaV9yb290X2Rpcik7Ci0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV90aGVybWFsX2V4aXQodm9pZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3RoZXJtYWxfZXhpdCIpOwogCiAJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfdGhlcm1hbF9kcml2ZXIpOwogCiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9USEVSTUFMX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogbW9kdWxlX2luaXQoYWNwaV90aGVybWFsX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jCmluZGV4IDY3YjlmMzIuLjM4ZWJlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMKQEAgLTE1NSwyMSArMTU1LDMwIEBACiAJY2FzZSBBQ1BJX1RZUEVfTVVURVg6CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywKLQkJCQkgICIqKioqKiBNdXRleCAlcCwgU2VtYXBob3JlICVwXG4iLAotCQkJCSAgb2JqZWN0LCBvYmplY3QtPm11dGV4LnNlbWFwaG9yZSkpOworCQkJCSAgIioqKioqIE11dGV4ICVwLCBPUyBNdXRleCAlcFxuIiwKKwkJCQkgIG9iamVjdCwgb2JqZWN0LT5tdXRleC5vc19tdXRleCkpOwogCi0JCWFjcGlfZXhfdW5saW5rX211dGV4KG9iamVjdCk7Ci0JCSh2b2lkKWFjcGlfb3NfZGVsZXRlX3NlbWFwaG9yZShvYmplY3QtPm11dGV4LnNlbWFwaG9yZSk7CisJCWlmIChvYmplY3QtPm11dGV4Lm9zX211dGV4ICE9IEFDUElfR0xPQkFMX0xPQ0spIHsKKwkJCWFjcGlfZXhfdW5saW5rX211dGV4KG9iamVjdCk7CisJCQlhY3BpX29zX2RlbGV0ZV9tdXRleChvYmplY3QtPm11dGV4Lm9zX211dGV4KTsKKwkJfSBlbHNlIHsKKwkJCS8qIEdsb2JhbCBMb2NrICJtdXRleCIgaXMgYWN0dWFsbHkgYSBjb3VudGluZyBzZW1hcGhvcmUgKi8KKworCQkJKHZvaWQpCisJCQkgICAgYWNwaV9vc19kZWxldGVfc2VtYXBob3JlCisJCQkgICAgKGFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZSk7CisJCQlhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmUgPSBOVUxMOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1RZUEVfRVZFTlQ6CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywKLQkJCQkgICIqKioqKiBFdmVudCAlcCwgU2VtYXBob3JlICVwXG4iLAotCQkJCSAgb2JqZWN0LCBvYmplY3QtPmV2ZW50LnNlbWFwaG9yZSkpOworCQkJCSAgIioqKioqIEV2ZW50ICVwLCBPUyBTZW1hcGhvcmUgJXBcbiIsCisJCQkJICBvYmplY3QsIG9iamVjdC0+ZXZlbnQub3Nfc2VtYXBob3JlKSk7CiAKLQkJKHZvaWQpYWNwaV9vc19kZWxldGVfc2VtYXBob3JlKG9iamVjdC0+ZXZlbnQuc2VtYXBob3JlKTsKLQkJb2JqZWN0LT5ldmVudC5zZW1hcGhvcmUgPSBOVUxMOworCQkodm9pZClhY3BpX29zX2RlbGV0ZV9zZW1hcGhvcmUob2JqZWN0LT5ldmVudC5vc19zZW1hcGhvcmUpOworCQlvYmplY3QtPmV2ZW50Lm9zX3NlbWFwaG9yZSA9IE5VTEw7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1RZUEVfTUVUSE9EOgpAQCAtMTc3LDEyICsxODYsMTMgQEAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9BTExPQ0FUSU9OUywKIAkJCQkgICIqKioqKiBNZXRob2QgJXBcbiIsIG9iamVjdCkpOwogCi0JCS8qIERlbGV0ZSB0aGUgbWV0aG9kIHNlbWFwaG9yZSBpZiBpdCBleGlzdHMgKi8KKwkJLyogRGVsZXRlIHRoZSBtZXRob2QgbXV0ZXggaWYgaXQgZXhpc3RzICovCiAKLQkJaWYgKG9iamVjdC0+bWV0aG9kLnNlbWFwaG9yZSkgewotCQkJKHZvaWQpYWNwaV9vc19kZWxldGVfc2VtYXBob3JlKG9iamVjdC0+bWV0aG9kLgotCQkJCQkJICAgICAgIHNlbWFwaG9yZSk7Ci0JCQlvYmplY3QtPm1ldGhvZC5zZW1hcGhvcmUgPSBOVUxMOworCQlpZiAob2JqZWN0LT5tZXRob2QubXV0ZXgpIHsKKwkJCWFjcGlfb3NfZGVsZXRlX211dGV4KG9iamVjdC0+bWV0aG9kLm11dGV4LT5tdXRleC4KKwkJCQkJICAgICBvc19tdXRleCk7CisJCQlhY3BpX3V0X2RlbGV0ZV9vYmplY3RfZGVzYyhvYmplY3QtPm1ldGhvZC5tdXRleCk7CisJCQlvYmplY3QtPm1ldGhvZC5tdXRleCA9IE5VTEw7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYwppbmRleCBlNTk5OWM2Li4wMTQwMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGdsb2JhbC5jCkBAIC03OTQsNiArNzk0LDcgQEAKIAogCS8qIEdsb2JhbCBMb2NrIHN1cHBvcnQgKi8KIAorCWFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZSA9IE5VTEw7CiAJYWNwaV9nYmxfZ2xvYmFsX2xvY2tfYWNxdWlyZWQgPSBGQUxTRTsKIAlhY3BpX2dibF9nbG9iYWxfbG9ja190aHJlYWRfY291bnQgPSAwOwogCWFjcGlfZ2JsX2dsb2JhbF9sb2NrX2hhbmRsZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWlzYy5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYwppbmRleCA1Yzc1ZDM1Li4zMzI2ODMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtaXNjLmMKQEAgLTQxLDYgKzQxLDggQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CiAKQEAgLTk2Miw2ICs5NjQsNyBAQAogCWFjcGlfb3NfdnByaW50Zihmb3JtYXQsIGFyZ3MpOwogCWFjcGlfb3NfcHJpbnRmKCIgWyVYXVxuIiwgQUNQSV9DQV9WRVJTSU9OKTsKIH0KK0VYUE9SVF9TWU1CT0woYWNwaV91dF9leGNlcHRpb24pOwogCiB2b2lkIEFDUElfSU5URVJOQUxfVkFSX1hGQUNFCiBhY3BpX3V0X3dhcm5pbmcoY2hhciAqbW9kdWxlX25hbWUsIHUzMiBsaW5lX251bWJlciwgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtdXRleC5jCmluZGV4IDI1ZWIzNDMuLmRmYzhmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtdXRleC5jCkBAIC04MiwxMiArODIsOSBAQAogCiAJLyogQ3JlYXRlIHRoZSBzcGlubG9ja3MgZm9yIHVzZSBhdCBpbnRlcnJ1cHQgbGV2ZWwgKi8KIAotCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX2xvY2soJmFjcGlfZ2JsX2dwZV9sb2NrKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQorCXNwaW5fbG9ja19pbml0KGFjcGlfZ2JsX2dwZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdChhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAotCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX2xvY2soJmFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0xNDYsOSArMTQzLDggQEAKIAl9CiAKIAlpZiAoIWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4KSB7Ci0JCXN0YXR1cyA9IGFjcGlfb3NfY3JlYXRlX3NlbWFwaG9yZSgxLCAxLAotCQkJCQkJICAmYWNwaV9nYmxfbXV0ZXhfaW5mbwotCQkJCQkJICBbbXV0ZXhfaWRdLm11dGV4KTsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3NfY3JlYXRlX211dGV4KCZhY3BpX2dibF9tdXRleF9pbmZvW211dGV4X2lkXS5tdXRleCk7CiAJCWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLnRocmVhZF9pZCA9CiAJCSAgICBBQ1BJX01VVEVYX05PVF9BQ1FVSVJFRDsKIAkJYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0udXNlX2NvdW50ID0gMDsKQEAgLTE3MSw3ICsxNjcsNiBAQAogCiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV91dF9kZWxldGVfbXV0ZXgoYWNwaV9tdXRleF9oYW5kbGUgbXV0ZXhfaWQpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRV9VMzIodXRfZGVsZXRlX211dGV4LCBtdXRleF9pZCk7CiAKQEAgLTE3OSwxMiArMTc0LDEyIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX29zX2RlbGV0ZV9zZW1hcGhvcmUoYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0ubXV0ZXgpOworCWFjcGlfb3NfZGVsZXRlX211dGV4KGFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4KTsKIAogCWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4ID0gTlVMTDsKIAlhY3BpX2dibF9tdXRleF9pbmZvW211dGV4X2lkXS50aHJlYWRfaWQgPSBBQ1BJX01VVEVYX05PVF9BQ1FVSVJFRDsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTEsOCArMjQ2LDggQEAKIAkJCSAgIlRocmVhZCAlWCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgTXV0ZXggWyVzXVxuIiwKIAkJCSAgdGhpc190aHJlYWRfaWQsIGFjcGlfdXRfZ2V0X211dGV4X25hbWUobXV0ZXhfaWQpKSk7CiAKLQlzdGF0dXMgPSBhY3BpX29zX3dhaXRfc2VtYXBob3JlKGFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4LAotCQkJCQkxLCBBQ1BJX1dBSVRfRk9SRVZFUik7CisJc3RhdHVzID0gYWNwaV9vc19hY3F1aXJlX211dGV4KGFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4LAorCQkJCSAgICAgICBBQ1BJX1dBSVRfRk9SRVZFUik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsCiAJCQkJICAiVGhyZWFkICVYIGFjcXVpcmVkIE11dGV4IFslc11cbiIsCkBAIC0yODQsNyArMjc5LDYgQEAKIAogYWNwaV9zdGF0dXMgYWNwaV91dF9yZWxlYXNlX211dGV4KGFjcGlfbXV0ZXhfaGFuZGxlIG11dGV4X2lkKQogewotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlhY3BpX3RocmVhZF9pZCB0aGlzX3RocmVhZF9pZDsKIAogCUFDUElfRlVOQ1RJT05fTkFNRSh1dF9yZWxlYXNlX211dGV4KTsKQEAgLTM0MCwxOSArMzM0LDYgQEAKIAogCWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLnRocmVhZF9pZCA9IEFDUElfTVVURVhfTk9UX0FDUVVJUkVEOwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKGFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4LCAxKTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCSJUaHJlYWQgJVggY291bGQgbm90IHJlbGVhc2UgTXV0ZXggWyVYXSIsCi0JCQkJdGhpc190aHJlYWRfaWQsIG11dGV4X2lkKSk7Ci0JfSBlbHNlIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwKLQkJCQkgICJUaHJlYWQgJVggcmVsZWFzZWQgTXV0ZXggWyVzXVxuIiwKLQkJCQkgIHRoaXNfdGhyZWFkX2lkLAotCQkJCSAgYWNwaV91dF9nZXRfbXV0ZXhfbmFtZShtdXRleF9pZCkpKTsKLQl9Ci0KLQlyZXR1cm4gKHN0YXR1cyk7CisJYWNwaV9vc19yZWxlYXNlX211dGV4KGFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLm11dGV4KTsKKwlyZXR1cm4gKEFFX09LKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlscy5jIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKaW5kZXggNmI1MTY4NS4uMTkzMGUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKQEAgLTU4LDMxICs1OCwyOSBAQAogCXU4ICpoZWFkID0gTlVMTDsKIAl1OCAqdGFpbCA9IE5VTEw7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2V4dHJhY3RfcGFja2FnZSIpOwogCiAJaWYgKCFwYWNrYWdlIHx8IChwYWNrYWdlLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKQogCSAgICB8fCAocGFja2FnZS0+cGFja2FnZS5jb3VudCA8IDEpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwKLQkJCQkgICJJbnZhbGlkICdwYWNrYWdlJyBhcmd1bWVudFxuIikpOwotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJJbnZhbGlkIHBhY2thZ2UgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAl9CiAKIAlpZiAoIWZvcm1hdCB8fCAhZm9ybWF0LT5wb2ludGVyIHx8IChmb3JtYXQtPmxlbmd0aCA8IDEpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfV0FSTiwgIkludmFsaWQgJ2Zvcm1hdCcgYXJndW1lbnRcbiIpKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiSW52YWxpZCBmb3JtYXQgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAl9CiAKIAlpZiAoIWJ1ZmZlcikgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1dBUk4sICJJbnZhbGlkICdidWZmZXInIGFyZ3VtZW50XG4iKSk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkludmFsaWQgYnVmZmVyIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAJfQogCiAJZm9ybWF0X2NvdW50ID0gKGZvcm1hdC0+bGVuZ3RoIC8gc2l6ZW9mKGNoYXIpKSAtIDE7CiAJaWYgKGZvcm1hdF9jb3VudCA+IHBhY2thZ2UtPnBhY2thZ2UuY291bnQpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCSAgIkZvcm1hdCBzcGVjaWZpZXMgbW9yZSBvYmplY3RzIFslZF0gdGhhbiBleGlzdCBpbiBwYWNrYWdlIFslZF0uIiwKLQkJCQkgIGZvcm1hdF9jb3VudCwgcGFja2FnZS0+cGFja2FnZS5jb3VudCkpOwotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX0RBVEEpOworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiRm9ybWF0IHNwZWNpZmllcyBtb3JlIG9iamVjdHMgWyVkXSIKKwkJCSAgICAgICIgdGhhbiBleGlzdCBpbiBwYWNrYWdlIFslZF0uXG4iLAorCQkJICAgICAgZm9ybWF0X2NvdW50LCBwYWNrYWdlLT5wYWNrYWdlLmNvdW50KTsKKwkJcmV0dXJuIEFFX0JBRF9EQVRBOwogCX0KIAogCWZvcm1hdF9zdHJpbmcgPSAoY2hhciAqKWZvcm1hdC0+cG9pbnRlcjsKQEAgLTk1LDcgKzkzLDcgQEAKIAkJdW5pb24gYWNwaV9vYmplY3QgKmVsZW1lbnQgPSAmKHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbaV0pOwogCiAJCWlmICghZWxlbWVudCkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9EQVRBKTsKKwkJCXJldHVybiBBRV9CQURfREFUQTsKIAkJfQogCiAJCXN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewpAQCAtMTEzLDEwICsxMTEsMTEgQEAKIAkJCQl0YWlsX29mZnNldCArPSBzaXplb2YoY2hhciAqKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9XQVJOLAotCQkJCQkJICAiSW52YWxpZCBwYWNrYWdlIGVsZW1lbnQgWyVkXTogZ290IG51bWJlciwgZXhwZWNpbmcgWyVjXS5cbiIsCi0JCQkJCQkgIGksIGZvcm1hdF9zdHJpbmdbaV0pKTsKLQkJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX0RBVEEpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJJbnZhbGlkIHBhY2thZ2UgZWxlbWVudCIKKwkJCQkJICAgICAgIiBbJWRdOiBnb3QgbnVtYmVyLCBleHBlY2luZyIKKwkJCQkJICAgICAgIiBbJWNdXG4iLAorCQkJCQkgICAgICBpLCBmb3JtYXRfc3RyaW5nW2ldKTsKKwkJCQlyZXR1cm4gQUVfQkFEX0RBVEE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlicmVhazsKQEAgLTEzOCwxMCArMTM3LDExIEBACiAJCQkJdGFpbF9vZmZzZXQgKz0gc2l6ZW9mKHU4ICopOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1dBUk4sCi0JCQkJCQkgICJJbnZhbGlkIHBhY2thZ2UgZWxlbWVudCBbJWRdIGdvdCBzdHJpbmcvYnVmZmVyLCBleHBlY2luZyBbJWNdLlxuIiwKLQkJCQkJCSAgaSwgZm9ybWF0X3N0cmluZ1tpXSkpOwotCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfREFUQSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkludmFsaWQgcGFja2FnZSBlbGVtZW50IgorCQkJCQkgICAgICAiIFslZF0gZ290IHN0cmluZy9idWZmZXIsIgorCQkJCQkgICAgICAiIGV4cGVjaW5nIFslY11cbiIsCisJCQkJCSAgICAgIGksIGZvcm1hdF9zdHJpbmdbaV0pOworCQkJCXJldHVybiBBRV9CQURfREFUQTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJCQkJCSAgIkZvdW5kIHVuc3VwcG9ydGVkIGVsZW1lbnQgYXQgaW5kZXg9JWRcbiIsCiAJCQkJCSAgaSkpOwogCQkJLyogVEJEOiBoYW5kbGUgbmVzdGVkIHBhY2thZ2VzLi4uICovCi0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfU1VQUE9SVCk7CisJCQlyZXR1cm4gQUVfU1VQUE9SVDsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTYyLDkgKzE2Miw5IEBACiAJICovCiAJaWYgKGJ1ZmZlci0+bGVuZ3RoIDwgc2l6ZV9yZXF1aXJlZCkgewogCQlidWZmZXItPmxlbmd0aCA9IHNpemVfcmVxdWlyZWQ7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CVUZGRVJfT1ZFUkZMT1cpOworCQlyZXR1cm4gQUVfQlVGRkVSX09WRVJGTE9XOwogCX0gZWxzZSBpZiAoYnVmZmVyLT5sZW5ndGggIT0gc2l6ZV9yZXF1aXJlZCB8fCAhYnVmZmVyLT5wb2ludGVyKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAJfQogCiAJaGVhZCA9IGJ1ZmZlci0+cG9pbnRlcjsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQl1bmlvbiBhY3BpX29iamVjdCAqZWxlbWVudCA9ICYocGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1tpXSk7CiAKIAkJaWYgKCFlbGVtZW50KSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX0RBVEEpOworCQkJcmV0dXJuIEFFX0JBRF9EQVRBOwogCQl9CiAKIAkJc3dpdGNoIChlbGVtZW50LT50eXBlKSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJfQogCX0KIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfZXh0cmFjdF9wYWNrYWdlKTsKQEAgLTI1OCwxNCArMjU4LDEzIEBACiAJdW5pb24gYWNwaV9vYmplY3QgKmVsZW1lbnQ7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgMCwgTlVMTCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyIik7CiAKIAlpZiAoIWRhdGEpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKIAllbGVtZW50ID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVsZW1lbnQpCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOworCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwogCiAJbWVtc2V0KGVsZW1lbnQsIDAsIHNpemVvZih1bmlvbiBhY3BpX29iamVjdCkpOwogCWJ1ZmZlci5sZW5ndGggPSBzaXplb2YodW5pb24gYWNwaV9vYmplY3QpOwpAQCAtMjc0LDEzICsyNzMsMTMgQEAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJYWNwaV91dGlsX2V2YWxfZXJyb3IoaGFuZGxlLCBwYXRobmFtZSwgc3RhdHVzKTsKIAkJa2ZyZWUoZWxlbWVudCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCWlmIChlbGVtZW50LT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIEFFX0JBRF9EQVRBKTsKIAkJa2ZyZWUoZWxlbWVudCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfREFUQSk7CisJCXJldHVybiBBRV9CQURfREFUQTsKIAl9CiAKIAkqZGF0YSA9IGVsZW1lbnQtPmludGVnZXIudmFsdWU7CkBAIC0yODgsNyArMjg3LDcgQEAKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlJldHVybiB2YWx1ZSBbJWx1XVxuIiwgKmRhdGEpKTsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJcmV0dXJuIEFFX09LOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfZXZhbHVhdGVfaW50ZWdlcik7CkBAIC0zMDMsMTUgKzMwMiwxNCBAQAogCWFjcGlfb2JqZWN0ICplbGVtZW50ID0gTlVMTDsKIAlhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2V2YWx1YXRlX3N0cmluZyIpOwogCiAJaWYgKCFkYXRhKQotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBwYXRobmFtZSwgYXJndW1lbnRzLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJYWNwaV91dGlsX2V2YWxfZXJyb3IoaGFuZGxlLCBwYXRobmFtZSwgc3RhdHVzKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CiAJfQogCiAJZWxlbWVudCA9IChhY3BpX29iamVjdCAqKSBidWZmZXIucG9pbnRlcjsKQEAgLTMyMCwxMyArMzE4LDEzIEBACiAJICAgIHx8IChlbGVtZW50LT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpCiAJICAgIHx8ICFlbGVtZW50LT5zdHJpbmcubGVuZ3RoKSB7CiAJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIEFFX0JBRF9EQVRBKTsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9EQVRBKTsKKwkJcmV0dXJuIEFFX0JBRF9EQVRBOwogCX0KIAogCSpkYXRhID0ga21hbGxvYyhlbGVtZW50LT5zdHJpbmcubGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIikpOwotCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIk1lbW9yeSBhbGxvY2F0aW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldCgqZGF0YSwgMCwgZWxlbWVudC0+c3RyaW5nLmxlbmd0aCArIDEpOwogCkBAIC0zMzYsNyArMzM0LDcgQEAKIAogCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCXJldHVybiBBRV9PSzsKIH0KICNlbmRpZgogCkBAIC0zNTIsMTAgKzM1MCw5IEBACiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAl1MzIgaSA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2V2YWx1YXRlX3JlZmVyZW5jZSIpOwogCiAJaWYgKCFsaXN0KSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAJfQogCiAJLyogRXZhbHVhdGUgb2JqZWN0LiAqLwpAQCAtMzY3LDMyICszNjQsMjkgQEAKIAlwYWNrYWdlID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CiAKIAlpZiAoKGJ1ZmZlci5sZW5ndGggPT0gMCkgfHwgIXBhY2thZ2UpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJObyByZXR1cm4gb2JqZWN0IChsZW4gJVggcHRyICVwKVxuIiwKLQkJCQkgICh1bnNpZ25lZClidWZmZXIubGVuZ3RoLCBwYWNrYWdlKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIk5vIHJldHVybiBvYmplY3QgKGxlbiAlWCBwdHIgJXApXG4iLAorCQkJICAgICh1bnNpZ25lZClidWZmZXIubGVuZ3RoLCBwYWNrYWdlKTsKIAkJc3RhdHVzID0gQUVfQkFEX0RBVEE7CiAJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIHN0YXR1cyk7CiAJCWdvdG8gZW5kOwogCX0KIAlpZiAocGFja2FnZS0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIkV4cGVjdGluZyBhIFtQYWNrYWdlXSwgZm91bmQgdHlwZSAlWFxuIiwKLQkJCQkgIHBhY2thZ2UtPnR5cGUpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXhwZWN0aW5nIGEgW1BhY2thZ2VdLCBmb3VuZCB0eXBlICVYXG4iLAorCQkJICAgIHBhY2thZ2UtPnR5cGUpOwogCQlzdGF0dXMgPSBBRV9CQURfREFUQTsKIAkJYWNwaV91dGlsX2V2YWxfZXJyb3IoaGFuZGxlLCBwYXRobmFtZSwgc3RhdHVzKTsKIAkJZ290byBlbmQ7CiAJfQogCWlmICghcGFja2FnZS0+cGFja2FnZS5jb3VudCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIltQYWNrYWdlXSBoYXMgemVybyBlbGVtZW50cyAoJXApXG4iLAotCQkJCSAgcGFja2FnZSkpOworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJbUGFja2FnZV0gaGFzIHplcm8gZWxlbWVudHMgKCVwKVxuIiwKKwkJCSAgICBwYWNrYWdlKTsKIAkJc3RhdHVzID0gQUVfQkFEX0RBVEE7CiAJCWFjcGlfdXRpbF9ldmFsX2Vycm9yKGhhbmRsZSwgcGF0aG5hbWUsIHN0YXR1cyk7CiAJCWdvdG8gZW5kOwogCX0KIAogCWlmIChwYWNrYWdlLT5wYWNrYWdlLmNvdW50ID4gQUNQSV9NQVhfSEFORExFUykgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKKwkJcmV0dXJuIEFFX05PX01FTU9SWTsKIAl9CiAJbGlzdC0+Y291bnQgPSBwYWNrYWdlLT5wYWNrYWdlLmNvdW50OwogCkBAIC00MDQsOSArMzk4LDkgQEAKIAogCQlpZiAoZWxlbWVudC0+dHlwZSAhPSBBQ1BJX1RZUEVfQU5ZKSB7CiAJCQlzdGF0dXMgPSBBRV9CQURfREFUQTsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJCSAgIkV4cGVjdGluZyBhIFtSZWZlcmVuY2VdIHBhY2thZ2UgZWxlbWVudCwgZm91bmQgdHlwZSAlWFxuIiwKLQkJCQkJICBlbGVtZW50LT50eXBlKSk7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkJICAgICJFeHBlY3RpbmcgYSBbUmVmZXJlbmNlXSBwYWNrYWdlIGVsZW1lbnQsIGZvdW5kIHR5cGUgJVhcbiIsCisJCQkJICAgIGVsZW1lbnQtPnR5cGUpOwogCQkJYWNwaV91dGlsX2V2YWxfZXJyb3IoaGFuZGxlLCBwYXRobmFtZSwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00MjYsNyArNDIwLDcgQEAKIAogCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBFWFBPUlRfU1lNQk9MKGFjcGlfZXZhbHVhdGVfcmVmZXJlbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggZTdlOWE2OTMuLjlmZWI2MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC0yNzIsMTAgKzI3Miw5IEBACiBhY3BpX3ZpZGVvX2RldmljZV9xdWVyeShzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgbG9uZyAqc3RhdGUpCiB7CiAJaW50IHN0YXR1czsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9xdWVyeSIpOwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9ER1MiLCBOVUxMLCBzdGF0ZSk7CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50CkBAIC0yODQsMTEgKzI4MywxMCBAQAogewogCWludCBzdGF0dXM7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9nZXRfc3RhdGUiKTsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9EQ1MiLCBOVUxMLCBzdGF0ZSk7CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50CkBAIC0yOTksMTIgKzI5NywxMSBAQAogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDEsICZhcmcwIH07CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9zZXRfc3RhdGUiKTsKIAogCWFyZzAuaW50ZWdlci52YWx1ZSA9IHN0YXRlOwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9EU1MiLCAmYXJncywgJnJldCk7CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50CkBAIC0zMTUsMjggKzMxMiwyNyBAQAogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fZGV2aWNlX2xjZF9xdWVyeV9sZXZlbHMiKTsKIAogCSpsZXZlbHMgPSBOVUxMOwogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlLT5oYW5kbGUsICJfQkNMIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKLQkJcmV0dXJuX1ZBTFVFKHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CiAJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CiAJaWYgKCFvYmogfHwgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgX0JDTCBkYXRhXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX0JDTCBkYXRhXG4iKTsKIAkJc3RhdHVzID0gLUVGQVVMVDsKIAkJZ290byBlcnI7CiAJfQogCiAJKmxldmVscyA9IG9iajsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIAogICAgICAgZXJyOgogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTM0NiwxMyArMzQyLDEyIEBACiAJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbCIpOwogCiAJYXJnMC5pbnRlZ2VyLnZhbHVlID0gbGV2ZWw7CiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2aWNlLT5oYW5kbGUsICJfQkNNIiwgJmFyZ3MsIE5VTEwpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgInNldF9sZXZlbCBzdGF0dXM6ICV4XG4iLCBzdGF0dXMpOwotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTM2MCwxMSArMzU1LDEwIEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKmxldmVsKQogewogCWludCBzdGF0dXM7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50Iik7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5oYW5kbGUsICJfQlFDIiwgTlVMTCwgbGV2ZWwpOwogCi0JcmV0dXJuX1ZBTFVFKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludApAQCAtMzc3LDM0ICszNzEsMzMgQEAKIAl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJX1RZUEVfSU5URUdFUiB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDEsICZhcmcwIH07CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9nZXRfRURJRCIpOwogCiAJKmVkaWQgPSBOVUxMOwogCiAJaWYgKCFkZXZpY2UpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGxlbmd0aCA9PSAxMjgpCiAJCWFyZzAuaW50ZWdlci52YWx1ZSA9IDE7CiAJZWxzZSBpZiAobGVuZ3RoID09IDI1NikKIAkJYXJnMC5pbnRlZ2VyLnZhbHVlID0gMjsKIAllbHNlCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9EREMiLCAmYXJncywgJmJ1ZmZlcik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CiAKIAlpZiAob2JqICYmIG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSKQogCQkqZWRpZCA9IG9iajsKIAllbHNlIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgIkludmFsaWQgX0REQyBkYXRhXG4iKSk7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX0REQyBkYXRhXG4iKTsKIAkJc3RhdHVzID0gLUVGQVVMVDsKIAkJa2ZyZWUob2JqKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKiBidXMgKi8KQEAgLTQxNyw3ICs0MTAsNiBAQAogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzAgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJncyA9IHsgMSwgJmFyZzAgfTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX3NldF9QT1NUIik7CiAKIAlhcmcwLmludGVnZXIudmFsdWUgPSBvcHRpb247CiAKQEAgLTQyNSw3ICs0MTcsNyBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJc3RhdHVzID0gdG1wID8gKC1FSU5WQUwpIDogKEFFX09LKTsKIAotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQzMywxMSArNDI1LDEwIEBACiB7CiAJaW50IHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX2dldF9QT1NUIik7CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIodmlkZW8tPmhhbmRsZSwgIl9HUEQiLCBOVUxMLCBpZCk7CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50CkBAIC00NDUsMTIgKzQzNiwxMSBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgKm9wdGlvbnMpCiB7CiAJaW50IHN0YXR1czsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2J1c19QT1NUX29wdGlvbnMiKTsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcih2aWRlby0+aGFuZGxlLCAiX1ZQTyIsIE5VTEwsIG9wdGlvbnMpOwogCSpvcHRpb25zICY9IDM7CiAKLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgpAQCAtNDgxLDcgKzQ3MSw2IEBACiAJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfRE9TIik7CiAKIAlpZiAoYmlvc19mbGFnIDwgMCB8fCBiaW9zX2ZsYWcgPiAzIHx8IGxjZF9mbGFnIDwgMCB8fCBsY2RfZmxhZyA+IDEpIHsKIAkJc3RhdHVzID0gLTE7CkBAIC00OTIsNyArNDgxLDcgQEAKIAlhY3BpX2V2YWx1YXRlX29iamVjdCh2aWRlby0+aGFuZGxlLCAiX0RPUyIsICZhcmdzLCBOVUxMKTsKIAogICAgICAgRmFpbGVkOgotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC01MTQsNyArNTAzLDYgQEAKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzcyAqYnIgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2VfZmluZF9jYXAiKTsKIAogCW1lbXNldCgmZGV2aWNlLT5jYXAsIDAsIDQpOwogCkBAIC01NjAsOCArNTQ4LDcgQEAKIAkJCQlvID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopJm9iai0+cGFja2FnZS4KIAkJCQkgICAgZWxlbWVudHNbaV07CiAJCQkJaWYgKG8tPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKLQkJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJCQkgICJJbnZhbGlkIGRhdGFcbiIpKTsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBkYXRhXG4iKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCWJyLT5sZXZlbHNbY291bnRdID0gKHUzMikgby0+aW50ZWdlci52YWx1ZTsKQEAgLTU4Myw3ICs1NzAsNyBAQAogCiAJa2ZyZWUob2JqKTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogLyoKQEAgLTYzMCwxMCArNjE3LDkgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAtRU5PRU5UOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfY2hlY2siKTsKIAogCWlmICghdmlkZW8pCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBTaW5jZSB0aGVyZSBpcyBubyBISUQsIENJRCBhbmQgc28gb24gZm9yIFZHQSBkcml2ZXIsIHdlIGhhdmUKIAkgKiB0byBjaGVjayB3ZWxsIGtub3duIHJlcXVpcmVkIG5vZGVzLgpAQCAtNjU3LDcgKzY0Myw3IEBACiAJCXN0YXR1cyA9IDA7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY3Myw3ICs2NTksNiBAQAogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0KIAkgICAgKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fZGV2aWNlX2luZm9fc2VxX3Nob3ciKTsKIAogCWlmICghZGV2KQogCQlnb3RvIGVuZDsKQEAgLTY5Miw3ICs2NzcsNyBAQAogCXNlcV9wcmludGYoc2VxLCAia25vd24gYnkgYmlvczogJXNcbiIsIGRldi0+ZmxhZ3MuYmlvcyA/ICJ5ZXMiIDogIm5vIik7CiAKICAgICAgIGVuZDoKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTcwOSw3ICs2OTQsNiBAQAogCSAgICAoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9zdGF0ZV9zZXFfc2hvdyIpOwogCiAJaWYgKCFkZXYpCiAJCWdvdG8gZW5kOwpAQCAtNzI5LDcgKzcxMyw3IEBACiAJCXNlcV9wcmludGYoc2VxLCAiPG5vdCBzdXBwb3J0ZWQ+XG4iKTsKIAogICAgICAgZW5kOgotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtNzUwLDEzICs3MzQsMTIgQEAKIAljaGFyIHN0clsxMl0gPSB7IDAgfTsKIAl1MzIgc3RhdGUgPSAwOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfc3RhdGUiKTsKIAogCWlmICghZGV2IHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCXN0cltjb3VudF0gPSAwOwogCXN0YXRlID0gc2ltcGxlX3N0cnRvdWwoc3RyLCBOVUxMLCAwKTsKQEAgLTc2NSw5ICs3NDgsOSBAQAogCXN0YXR1cyA9IGFjcGlfdmlkZW9fZGV2aWNlX3NldF9zdGF0ZShkZXYsIHN0YXRlKTsKIAogCWlmIChzdGF0dXMpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm5fVkFMVUUoY291bnQpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGludApAQCAtNzc3LDExICs3NjAsMTAgQEAKIAkgICAgKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKIAlpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3Nfc2VxX3Nob3ciKTsKIAogCWlmICghZGV2IHx8ICFkZXYtPmJyaWdodG5lc3MpIHsKIAkJc2VxX3ByaW50ZihzZXEsICI8bm90IHN1cHBvcnRlZD5cbiIpOwotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCX0KIAogCXNlcV9wcmludGYoc2VxLCAibGV2ZWxzOiAiKTsKQEAgLTc4OSw3ICs3NzEsNyBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIiAlZCIsIGRldi0+YnJpZ2h0bmVzcy0+bGV2ZWxzW2ldKTsKIAlzZXFfcHJpbnRmKHNlcSwgIlxuY3VycmVudDogJWRcbiIsIGRldi0+YnJpZ2h0bmVzcy0+Y3Vycik7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTgxMCwxOSArNzkyLDE4IEBACiAJdW5zaWduZWQgaW50IGxldmVsID0gMDsKIAlpbnQgaTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX2JyaWdodG5lc3MiKTsKIAogCWlmICghZGV2IHx8ICFkZXYtPmJyaWdodG5lc3MgfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm5fVkFMVUUoLUVGQVVMVCk7CisJCXJldHVybiAtRUZBVUxUOwogCiAJc3RyW2NvdW50XSA9IDA7CiAJbGV2ZWwgPSBzaW1wbGVfc3RydG91bChzdHIsIE5VTEwsIDApOwogCiAJaWYgKGxldmVsID4gMTAwKQotCQlyZXR1cm5fVkFMVUUoLUVGQVVMVCk7CisJCXJldHVybiAtRUZBVUxUOwogCiAJLyogdmFsaWRhdGUgdGhvdWdoIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBsZXZlbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5icmlnaHRuZXNzLT5jb3VudDsgaSsrKQpAQCAtODMzLDcgKzgxNCw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2VfRURJRF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQpAQCAtODQ0LDcgKzgyNSw2IEBACiAJaW50IGk7CiAJdW5pb24gYWNwaV9vYmplY3QgKmVkaWQgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2VfRURJRF9zZXFfc2hvdyIpOwogCiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0OwpAQCAtODY5LDcgKzg0OSw3IEBACiAJZWxzZQogCQlrZnJlZShlZGlkKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtODg0LDI4ICs4NjQsMjYgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZF9kZXY7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9hZGRfZnMiKTsKIAogCWlmICghZGV2aWNlKQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJdmlkX2RldiA9IChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJaWYgKCF2aWRfZGV2KQotCQlyZXR1cm5fVkFMVUUoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IHByb2NfbWtkaXIoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCiAJCQkJCQkgICAgIHZpZF9kZXYtPnZpZGVvLT5kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQotCQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCS8qICdpbmZvJyBbUl0gKi8KIAllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpbmZvIiwgU19JUlVHTywgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwogCWlmICghZW50cnkpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnaW5mbycgZnMgZW50cnlcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV92aWRlb19kZXZpY2VfaW5mb19mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTkxNyw4ICs4OTUsNyBAQAogCSAgICBjcmVhdGVfcHJvY19lbnRyeSgic3RhdGUiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgICAgICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICdzdGF0ZScgZnMgZW50cnlcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWFjcGlfdmlkZW9fZGV2aWNlX3N0YXRlX2ZvcHMud3JpdGUgPSBhY3BpX3ZpZGVvX2RldmljZV93cml0ZV9zdGF0ZTsKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX3ZpZGVvX2RldmljZV9zdGF0ZV9mb3BzOwpAQCAtOTMxLDggKzkwOCw3IEBACiAJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJicmlnaHRuZXNzIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgICAgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwogCWlmICghZW50cnkpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnYnJpZ2h0bmVzcycgZnMgZW50cnlcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcy53cml0ZSA9IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX2JyaWdodG5lc3M7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19mb3BzOwpAQCAtOTQzLDI1ICs5MTksMjMgQEAKIAkvKiAnRURJRCcgW1JdICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiRURJRCIsIFNfSVJVR08sIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJ2JyaWdodG5lc3MnIGZzIGVudHJ5XG4iKSk7CisJCXJldHVybiAtRU5PREVWOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfdmlkZW9fZGV2aWNlX0VESURfZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2RldmljZV9yZW1vdmVfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2aWRfZGV2OwotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fZGV2aWNlX3JlbW92ZV9mcyIpOwogCiAJdmlkX2RldiA9IChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJaWYgKCF2aWRfZGV2IHx8ICF2aWRfZGV2LT52aWRlbyB8fCAhdmlkX2Rldi0+dmlkZW8tPmRpcikKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlyZW1vdmVfcHJvY19lbnRyeSgiaW5mbyIsIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKQEAgLTk3Miw3ICs5NDYsNyBAQAogCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IE5VTEw7CiAJfQogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiAvKiB2aWRlbyBidXMgKi8KQEAgLTk4MCw3ICs5NTQsNiBAQAogewogCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSAoc3RydWN0IGFjcGlfdmlkZW9fYnVzICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfaW5mb19zZXFfc2hvdyIpOwogCiAJaWYgKCF2aWRlbykKIAkJZ290byBlbmQ7CkBAIC05OTMsNyArOTY2LDcgQEAKIAkJICAgdmlkZW8tPmZsYWdzLnBvc3QgPyAieWVzIiA6ICJubyIpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEwMDYsNyArOTc5LDYgQEAKIHsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKXNlcS0+cHJpdmF0ZTsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX1JPTV9zZXFfc2hvdyIpOwogCiAJaWYgKCF2aWRlbykKIAkJZ290byBlbmQ7CkBAIC0xMDE1LDcgKzk4Nyw3IEBACiAJc2VxX3ByaW50ZihzZXEsICI8VE9ETz5cbiIpOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX1JPTV9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTAyOSw3ICsxMDAxLDYgQEAKIAl1bnNpZ25lZCBsb25nIG9wdGlvbnM7CiAJaW50IHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX1BPU1RfaW5mb19zZXFfc2hvdyIpOwogCiAJaWYgKCF2aWRlbykKIAkJZ290byBlbmQ7CkBAIC0xMDUyLDcgKzEwMjMsNyBAQAogCX0gZWxzZQogCQlzZXFfcHJpbnRmKHNlcSwgIjxub3Qgc3VwcG9ydGVkPlxuIik7CiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMDY4LDcgKzEwMzksNiBAQAogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBpZDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX1BPU1Rfc2VxX3Nob3ciKTsKIAogCWlmICghdmlkZW8pCiAJCWdvdG8gZW5kOwpAQCAtMTA4MSwxOCArMTA1MSwxNyBAQAogCXNlcV9wcmludGYoc2VxLCAiZGV2aWNlIHBvc3RlZCBpcyA8JXM+XG4iLCBkZXZpY2VfZGVjb2RlW2lkICYgM10pOwogCiAgICAgICBlbmQ6Ci0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX0RPU19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSAoc3RydWN0IGFjcGlfdmlkZW9fYnVzICopc2VxLT5wcml2YXRlOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfRE9TX3NlcV9zaG93Iik7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIkRPUyBzZXR0aW5nOiA8JWQ+XG4iLCB2aWRlby0+ZG9zX3NldHRpbmcpOwogCi0JcmV0dXJuX1ZBTFVFKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX1BPU1Rfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTExMTcsMjIgKzEwODYsMjEgQEAKIAljaGFyIHN0clsxMl0gPSB7IDAgfTsKIAl1bnNpZ25lZCBsb25nIG9wdCwgb3B0aW9uczsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX3dyaXRlX1BPU1QiKTsKIAogCWlmICghdmlkZW8gfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9IGFjcGlfdmlkZW9fYnVzX1BPU1Rfb3B0aW9ucyh2aWRlbywgJm9wdGlvbnMpOwogCWlmICghQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCXN0cltjb3VudF0gPSAwOwogCW9wdCA9IHN0cnRvdWwoc3RyLCBOVUxMLCAwKTsKIAlpZiAob3B0ID4gMykKLQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQlyZXR1cm4gLUVGQVVMVDsKIAogCS8qIGp1c3QgaW4gY2FzZSBhbiBPRU0gJ2ZvcmdldCcgdGhlIG1vdGhlcmJvYXJkLi4uICovCiAJb3B0aW9ucyB8PSAxOwpAQCAtMTE0MCwxMSArMTEwOCwxMSBAQAogCWlmIChvcHRpb25zICYgKDF1bCA8PCBvcHQpKSB7CiAJCXN0YXR1cyA9IGFjcGlfdmlkZW9fYnVzX3NldF9QT1NUKHZpZGVvLCBvcHQpOwogCQlpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQkJcmV0dXJuX1ZBTFVFKC1FRkFVTFQpOworCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAl9CiAKLQlyZXR1cm5fVkFMVUUoY291bnQpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTExNTgsMjUgKzExMjYsMjQgQEAKIAljaGFyIHN0clsxMl0gPSB7IDAgfTsKIAl1bnNpZ25lZCBsb25nIG9wdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX3dyaXRlX0RPUyIpOwogCiAJaWYgKCF2aWRlbyB8fCBjb3VudCArIDEgPiBzaXplb2Ygc3RyKQotCQlyZXR1cm5fVkFMVUUoLUVJTlZBTCk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzdHJbY291bnRdID0gMDsKIAlvcHQgPSBzdHJ0b3VsKHN0ciwgTlVMTCwgMCk7CiAJaWYgKG9wdCA+IDcpCi0JCXJldHVybl9WQUxVRSgtRUZBVUxUKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzdGF0dXMgPSBhY3BpX3ZpZGVvX2J1c19ET1ModmlkZW8sIG9wdCAmIDB4MywgKG9wdCAmIDB4NCkgPj4gMik7CiAKIAlpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlyZXR1cm5fVkFMVUUoLUVGQVVMVCk7CisJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuX1ZBTFVFKGNvdW50KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtMTE4NCw3ICsxMTUxLDYgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfYWRkX2ZzIik7CiAKIAl2aWRlbyA9IChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKQEAgLTExOTIsNyArMTE1OCw3IEBACiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKIAkJCQkJCSAgICAgYWNwaV92aWRlb19kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQotCQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCXZpZGVvLT5kaXIgPSBhY3BpX2RldmljZV9kaXIoZGV2aWNlKTsKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQpAQCAtMTIwMCw4ICsxMTY2LDcgQEAKIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiaW5mbyIsIFNfSVJVR08sIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJ2luZm8nIGZzIGVudHJ5XG4iKSk7CisJCXJldHVybiAtRU5PREVWOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfdmlkZW9fYnVzX2luZm9fZm9wczsKIAkJZW50cnktPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CkBAIC0xMjExLDggKzExNzYsNyBAQAogCS8qICdST00nIFtSXSAqLwogCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoIlJPTSIsIFNfSVJVR08sIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJ1JPTScgZnMgZW50cnlcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV92aWRlb19idXNfUk9NX2ZvcHM7CiAJCWVudHJ5LT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtMTIyMyw4ICsxMTg3LDcgQEAKIAllbnRyeSA9CiAJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJQT1NUX2luZm8iLCBTX0lSVUdPLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CiAJaWYgKCFlbnRyeSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkgICJVbmFibGUgdG8gY3JlYXRlICdQT1NUX2luZm8nIGZzIGVudHJ5XG4iKSk7CisJCXJldHVybiAtRU5PREVWOwogCWVsc2UgewogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfdmlkZW9fYnVzX1BPU1RfaW5mb19mb3BzOwogCQllbnRyeS0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKQEAgLTEyMzYsOCArMTE5OSw3IEBACiAJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJQT1NUIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lSVVNSLAogCQkJICAgICAgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwogCWlmICghZW50cnkpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSAnUE9TVCcgZnMgZW50cnlcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWFjcGlfdmlkZW9fYnVzX1BPU1RfZm9wcy53cml0ZSA9IGFjcGlfdmlkZW9fYnVzX3dyaXRlX1BPU1Q7CiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV92aWRlb19idXNfUE9TVF9mb3BzOwpAQCAtMTI1MCw4ICsxMjEyLDcgQEAKIAkgICAgY3JlYXRlX3Byb2NfZW50cnkoIkRPUyIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JUlVTUiwKIAkJCSAgICAgIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAlpZiAoIWVudHJ5KQotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAotCQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgJ0RPUycgZnMgZW50cnlcbiIpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZWxzZSB7CiAJCWFjcGlfdmlkZW9fYnVzX0RPU19mb3BzLndyaXRlID0gYWNwaV92aWRlb19idXNfd3JpdGVfRE9TOwogCQllbnRyeS0+cHJvY19mb3BzID0gJmFjcGlfdmlkZW9fYnVzX0RPU19mb3BzOwpAQCAtMTI1OSwxNCArMTIyMCwxMyBAQAogCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfcmVtb3ZlX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2J1c19yZW1vdmVfZnMiKTsKIAogCXZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIApAQCAtMTI4MCw3ICsxMjQwLDcgQEAKIAkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBOVUxMOwogCX0KIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyOTcsMTAgKzEyNTcsOSBAQAogCWludCBzdGF0dXM7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkYXRhOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfZ2V0X29uZV9kZXZpY2UiKTsKIAogCWlmICghZGV2aWNlIHx8ICF2aWRlbykKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXR1cyA9CiAJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9BRFIiLCBOVUxMLCAmZGV2aWNlX2lkKTsKQEAgLTEzMDgsNyArMTI2Nyw3IEBACiAKIAkJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWRhdGEpCi0JCQlyZXR1cm5fVkFMVUUoLUVOT01FTSk7CisJCQlyZXR1cm4gLUVOT01FTTsKIAogCQltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSkpOwogCkBAIC0xMzU5LDEwICsxMzE4LDEwIEBACiAKIAkJYWNwaV92aWRlb19kZXZpY2VfYWRkX2ZzKGRldmljZSk7CiAKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoLUVOT0VOVCk7CisJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKIC8qCkBAIC0xNDA1LDcgKzEzNjQsNiBAQAogCQkgICAgICAgc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IGk7Ci0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2VfYmluZCIpOwogCiAjZGVmaW5lIElEU19WQUwoaSkgdmlkZW8tPmF0dGFjaGVkX2FycmF5W2ldLnZhbHVlLmludF92YWwKICNkZWZpbmUgSURTX0JJTkQoaSkgdmlkZW8tPmF0dGFjaGVkX2FycmF5W2ldLmJpbmRfaW5mbwpAQCAtMTQ0MiwxNyArMTQwMCwxNiBAQAogCXVuaW9uIGFjcGlfb2JqZWN0ICpkb2QgPSBOVUxMOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2RldmljZV9lbnVtZXJhdGUiKTsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHZpZGVvLT5oYW5kbGUsICJfRE9EIiwgTlVMTCwgJmJ1ZmZlcik7CiAJaWYgKCFBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiRXJyb3IgZXZhbHVhdGluZyBfRE9EXG4iKSk7Ci0JCXJldHVybl9WQUxVRShzdGF0dXMpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfRE9EIikpOworCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCWRvZCA9ICh1bmlvbiBhY3BpX29iamVjdCAqKWJ1ZmZlci5wb2ludGVyOwogCWlmICghZG9kIHx8IChkb2QtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsICJJbnZhbGlkIF9ET0QgZGF0YVxuIikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiSW52YWxpZCBfRE9EIGRhdGEiKSk7CiAJCXN0YXR1cyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE0NzYsOCArMTQzMyw3IEBACiAJCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSZkb2QtPnBhY2thZ2UuZWxlbWVudHNbaV07CiAKIAkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiSW52YWxpZCBfRE9EIGRhdGFcbiIpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX0RPRCBkYXRhXG4iKTsKIAkJCWFjdGl2ZV9kZXZpY2VfbGlzdFtpXS52YWx1ZS5pbnRfdmFsID0KIAkJCSAgICBBQ1BJX1ZJREVPX0hFQURfSU5WQUxJRDsKIAkJfQpAQCAtMTQ5NSw3ICsxNDUxLDcgQEAKIAl2aWRlby0+YXR0YWNoZWRfY291bnQgPSBjb3VudDsKICAgICAgIG91dDoKIAlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC0xNTIwLDcgKzE0NzYsNiBAQAogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX3N3aXRjaF9vdXRwdXQiKTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmdmlkZW8tPnZpZGVvX2RldmljZV9saXN0KSB7CiAJCWRldiA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UsIGVudHJ5KTsKQEAgLTE1NTEsNyArMTUwNiw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybl9WQUxVRShzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE1NzgsNyArMTUzMyw2IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2dldF9kZXZpY2VzIik7CiAKIAlhY3BpX3ZpZGVvX2RldmljZV9lbnVtZXJhdGUodmlkZW8pOwogCkBAIC0xNTkxLDEzICsxNTQ1LDEyIEBACiAKIAkJc3RhdHVzID0gYWNwaV92aWRlb19idXNfZ2V0X29uZV9kZXZpY2UoZGV2LCB2aWRlbyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKLQkJCQkJICAiQ2FudCBhdHRhY2ggZGV2aWNlXG4iKSk7CisJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiQ2FudCBhdHRhY2ggZGV2aWNlIikpOwogCQkJY29udGludWU7CiAJCX0KIAogCX0KLQlyZXR1cm5fVkFMVUUoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX3B1dF9vbmVfZGV2aWNlKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlKQpAQCAtMTYwNSwxMCArMTU1OCw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW87CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2J1c19wdXRfb25lX2RldmljZSIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+dmlkZW8pCi0JCXJldHVybl9WQUxVRSgtRU5PRU5UKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAl2aWRlbyA9IGRldmljZS0+dmlkZW87CiAKQEAgLTE2MjAsMTEgKzE1NzIsOCBAQAogCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgYWNwaV92aWRlb19kZXZpY2Vfbm90aWZ5KTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgcmVtb3Zpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKIAotCXJldHVybl9WQUxVRSgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19wdXRfZGV2aWNlcyhzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvKQpAQCAtMTYzMiw3ICsxNTgxLDYgQEAKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfcHV0X2RldmljZXMiKTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmdmlkZW8tPnZpZGVvX2RldmljZV9saXN0KSB7CiAJCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGF0YSA9CkBAIC0xNjUxLDcgKzE1OTksNyBAQAogCQlrZnJlZShkYXRhKTsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qIGFjcGlfdmlkZW8gaW50ZXJmYWNlICovCkBAIC0xNjcxLDE0ICsxNjE5LDEzIEBACiAJc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbyA9IChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKilkYXRhOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX25vdGlmeSIpOwogCXByaW50aygidmlkZW8gYnVzIG5vdGlmeVxuIik7CiAKIAlpZiAoIXZpZGVvKQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfVklERU9fTk9USUZZX1NXSVRDSDoJLyogVXNlciByZXF1ZXN0IHRoYXQgYSBzd2l0Y2ggb2NjdXIsCkBAIC0xNzA3LDcgKzE2NTQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm5fVk9JRDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGFjcGlfdmlkZW9fZGV2aWNlX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKQEAgLTE3MTYsMTQgKzE2NjMsMTMgQEAKIAkgICAgKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKWRhdGE7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19kZXZpY2Vfbm90aWZ5Iik7CiAKIAlwcmludGsoInZpZGVvIGRldmljZSBub3RpZnlcbiIpOwogCWlmICghdmlkZW9fZGV2aWNlKQotCQlyZXR1cm5fVk9JRDsKKwkJcmV0dXJuOwogCiAJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKSkKLQkJcmV0dXJuX1ZPSUQ7CisJCXJldHVybjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFDUElfVklERU9fTk9USUZZX1NXSVRDSDoJLyogY2hhbmdlIGluIHN0YXR1cyAoY3ljbGUgb3V0cHV0IGRldmljZSkgKi8KQEAgLTE3NDMsNyArMTY4OSw3IEBACiAJCQkJICAiVW5zdXBwb3J0ZWQgZXZlbnQgWzB4JXhdXG4iLCBldmVudCkpOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuX1ZPSUQ7CisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKQEAgLTE3NTIsMTQgKzE2OTgsMTMgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSBOVUxMOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfYWRkIik7CiAKIAlpZiAoIWRldmljZSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZpZGVvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfdmlkZW9fYnVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2aWRlbykKLQkJcmV0dXJuX1ZBTFVFKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQodmlkZW8sIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV92aWRlb19idXMpKTsKIAogCXZpZGVvLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTE4MDYsNyArMTc1MSw3IEBACiAJaWYgKHJlc3VsdCkKIAkJa2ZyZWUodmlkZW8pOwogCi0JcmV0dXJuX1ZBTFVFKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQpAQCAtMTgxNCwxMCArMTc1OSw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gTlVMTDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfdmlkZW9fYnVzX3JlbW92ZSIpOwogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKLQkJcmV0dXJuX1ZBTFVFKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIApAQCAtMTgyNiw5ICsxNzcwLDYgQEAKIAlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcih2aWRlby0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgYWNwaV92aWRlb19idXNfbm90aWZ5KTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCi0JCQkJICAiRXJyb3IgcmVtb3Zpbmcgbm90aWZ5IGhhbmRsZXJcbiIpKTsKIAogCWFjcGlfdmlkZW9fYnVzX3B1dF9kZXZpY2VzKHZpZGVvKTsKIAlhY3BpX3ZpZGVvX2J1c19yZW1vdmVfZnMoZGV2aWNlKTsKQEAgLTE4MzYsNyArMTc3Nyw3IEBACiAJa2ZyZWUodmlkZW8tPmF0dGFjaGVkX2FycmF5KTsKIAlrZnJlZSh2aWRlbyk7CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE4NDYsMTAgKzE3ODcsOSBAQAogCWFjcGlfaGFuZGxlIGhfZHVtbXkyOwogCWFjcGlfaGFuZGxlIGhfZHVtbXkzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV92aWRlb19idXNfbWF0Y2giKTsKIAogCWlmICghZGV2aWNlIHx8ICFkcml2ZXIpCi0JCXJldHVybl9WQUxVRSgtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBTaW5jZSB0aGVyZSBpcyBubyBISUQsIENJRCBmb3IgQUNQSSBWaWRlbyBkcml2ZXJzLCB3ZSBoYXZlCiAJICogdG8gY2hlY2sgd2VsbCBrbm93biByZXF1aXJlZCBub2RlcyBmb3IgZWFjaCBmZWF0dXJlIHdlIHN1cHBvcnQuCkBAIC0xODU4LDI2ICsxNzk4LDI1IEBACiAJLyogRG9lcyB0aGlzIGRldmljZSBhYmxlIHRvIHN1cHBvcnQgdmlkZW8gc3dpdGNoaW5nID8gKi8KIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET0QiLCAmaF9kdW1teTEpKSAmJgogCSAgICBBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPUyIsICZoX2R1bW15MikpKQotCQlyZXR1cm5fVkFMVUUoMCk7CisJCXJldHVybiAwOwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBhYmxlIHRvIHJldHJpZXZlIGEgdmlkZW8gUk9NID8gKi8KIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ST00iLCAmaF9kdW1teTEpKSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAogCS8qIERvZXMgdGhpcyBkZXZpY2UgYWJsZSB0byBjb25maWd1cmUgd2hpY2ggdmlkZW8gaGVhZCB0byBiZSBQT1NUZWQgPyAqLwogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX1ZQTyIsICZoX2R1bW15MSkpICYmCiAJICAgIEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfR1BEIiwgJmhfZHVtbXkyKSkgJiYKIAkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9TUEQiLCAmaF9kdW1teTMpKSkKLQkJcmV0dXJuX1ZBTFVFKDApOworCQlyZXR1cm4gMDsKIAotCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWNwaV92aWRlb19pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2luaXQiKTsKIAogCS8qCiAJICAgYWNwaV9kYmdfbGV2ZWwgPSAweEZGRkZGRkZGOwpAQCAtMTg4NiwyNyArMTgyNSwyNiBAQAogCiAJYWNwaV92aWRlb19kaXIgPSBwcm9jX21rZGlyKEFDUElfVklERU9fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV92aWRlb19kaXIpCi0JCXJldHVybl9WQUxVRSgtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYWNwaV92aWRlb19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfdmlkZW9fYnVzKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1ZJREVPX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKLQkJcmV0dXJuX1ZBTFVFKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm5fVkFMVUUoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3ZpZGVvX2V4aXQodm9pZCkKIHsKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX3ZpZGVvX2V4aXQiKTsKIAogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3ZpZGVvX2J1cyk7CiAKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1ZJREVPX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAotCXJldHVybl9WT0lEOworCXJldHVybjsKIH0KIAogbW9kdWxlX2luaXQoYWNwaV92aWRlb19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW1iYS9idXMuYyBiL2RyaXZlcnMvYW1iYS9idXMuYwppbmRleCA4ODk4NTVkLi45ZTNlMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FtYmEvYnVzLmMKKysrIGIvZHJpdmVycy9hbWJhL2J1cy5jCkBAIC0xODAsOCArMTgwLDkgQEAKIGFtYmFfYXR0cihpZCwgIiUwOHhcbiIsIGRldi0+cGVyaXBoaWQpOwogYW1iYV9hdHRyKGlycTAsICIldVxuIiwgZGV2LT5pcnFbMF0pOwogYW1iYV9hdHRyKGlycTEsICIldVxuIiwgZGV2LT5pcnFbMV0pOwotYW1iYV9hdHRyKHJlc291cmNlLCAiXHQlMDhseFx0JTA4bHhcdCUwOGx4XG4iLAotCSAgZGV2LT5yZXMuc3RhcnQsIGRldi0+cmVzLmVuZCwgZGV2LT5yZXMuZmxhZ3MpOworYW1iYV9hdHRyKHJlc291cmNlLCAiXHQlMDE2bGx4XHQlMDE2bGx4XHQlMDE2bHhcbiIsCisJICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXMuc3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXMuZW5kLAorCSBkZXYtPnJlcy5mbGFncyk7CiAKIC8qKgogICoJYW1iYV9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBBTUJBIGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vYWR1bW15LmMgYi9kcml2ZXJzL2F0bS9hZHVtbXkuYwppbmRleCBkMTM4N2NmLi42Y2M5M2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9hZHVtbXkuYworKysgYi9kcml2ZXJzL2F0bS9hZHVtbXkuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGFkdW1teS5jOiBhIGR1bW15IEFUTSBkcml2ZXIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCmluZGV4IDRiNmJmMTljLi40NTIxYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKKysrIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE5OTUsNyArMTk5Niw3IEBACiAgICAgfQogICAgIGkgKz0gMTsKICAgfQotICBpZiAoKnBvaW50ZXIgPT0gMHhkZWFkYmVlZikgeworICBpZiAoKnBvaW50ZXIgPT0gQVRNX1BPSVNPTikgewogICAgIHJldHVybiBsb2FkZXJfc3RhcnQgKGxiLCBkZXYsIHVjb2RlX3N0YXJ0KTsKICAgfSBlbHNlIHsKICAgICAvLyBjYXN0IG5lZWRlZCBhcyB0aGVyZSBpcyBubyAlPyBmb3IgcG9pbnRlciBkaWZmZXJuY2VzCkBAIC0yMjU3LDcgKzIyNTgsOCBAQAogCX0KIAogCVBSSU5URCAoREJHX0lORk8sICJmb3VuZCBNYWRnZSBBVE0gYWRhcHRlciAoYW1iKSBhdCIKLQkJIiBJTyAlbHgsIElSUSAldSwgTUVNICVwIiwgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDEpLAorCQkiIElPICVsbHgsIElSUSAldSwgTUVNICVwIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMSksCiAJCWlycSwgYnVzX3RvX3ZpcnQocGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApKSk7CiAKIAkvLyBjaGVjayBJTyByZWdpb24KQEAgLTIyODUsNyArMjI4Nyw3IEBACiAJc2V0dXBfcGNpX2RldihwY2lfZGV2KTsKIAogCS8vIGdyYWIgKGJ1dCBzaGFyZSkgSVJRIGFuZCBpbnN0YWxsIGhhbmRsZXIKLQllcnIgPSByZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9oYW5kbGVyLCBTQV9TSElSUSwgREVWX0xBQkVMLCBkZXYpOworCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgaW50ZXJydXB0X2hhbmRsZXIsIElSUUZfU0hBUkVELCBERVZfTEFCRUwsIGRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJUFJJTlRLIChLRVJOX0VSUiwgInJlcXVlc3QgSVJRIGZhaWxlZCEiKTsKIAkJZ290byBvdXRfcmVzZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmggYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmgKaW5kZXggODRhOTMwNi4uODI5NjQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5oCisrKyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuaApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBBTUJBU1NBRE9SX0gKICNkZWZpbmUgQU1CQVNTQURPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19BVE1fQU1CQVNTQURPUl9ERUJVRwogI2RlZmluZSBERUJVR19BTUJBU1NBRE9SCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9lbmkuYyBiL2RyaXZlcnMvYXRtL2VuaS5jCmluZGV4IGMxM2M0ZDcuLmRmMzU5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2VuaS5jCisrKyBiL2RyaXZlcnMvYXRtL2VuaS5jCkBAIC00LDcgKzQsNiBAQAogIAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTE3OTgsNyArMTc5Nyw3IEBACiAKIAlEUFJJTlRLKCI+ZW5pX3N0YXJ0XG4iKTsKIAllbmlfZGV2ID0gRU5JX0RFVihkZXYpOwotCWlmIChyZXF1ZXN0X2lycShlbmlfZGV2LT5pcnEsJmVuaV9pbnQsU0FfU0hJUlEsREVWX0xBQkVMLGRldikpIHsKKwlpZiAocmVxdWVzdF9pcnEoZW5pX2Rldi0+aXJxLCZlbmlfaW50LElSUUZfU0hBUkVELERFVl9MQUJFTCxkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgIihpdGYgJWQpOiBJUlElZCBpcyBhbHJlYWR5IGluIHVzZVxuIiwKIAkJICAgIGRldi0+bnVtYmVyLGVuaV9kZXYtPmlycSk7CiAJCWVycm9yID0gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwppbmRleCAxYmNhODZlLi4zOGZjMDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKKysrIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCkBAIC0xNjU4LDkgKzE2NTgsMTAgQEAKIAlmdW5jX2VudGVyICgpOwogCXBjaV9kZXYgPSBkZXYtPnBjaV9kZXY7CiAKLQlwcmludGsgKEtFUk5fSU5GTyAiZm91bmQgYSBGaXJlU3RyZWFtICVkIGNhcmQsIGJhc2UgJTA4bHgsIGlycSVkLlxuIiwgCisJcHJpbnRrIChLRVJOX0lORk8gImZvdW5kIGEgRmlyZVN0cmVhbSAlZCBjYXJkLCBiYXNlICUxNmxseCwgaXJxJWQuXG4iLAogCQlJU19GUzUwKGRldik/NTA6MTU1LAotCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCksIGRldi0+cGNpX2Rldi0+aXJxKTsKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCksCisJCWRldi0+cGNpX2Rldi0+aXJxKTsKIAogCWlmIChmc19kZWJ1ZyAmIEZTX0RFQlVHX0lOSVQpCiAJCW15X2hkICgodW5zaWduZWQgY2hhciAqKSBkZXYsIHNpemVvZiAoKmRldikpOwpAQCAtMTgyOCw3ICsxODI5LDcgQEAKIAkJaW5pdF9xIChkZXYsICZkZXYtPnJ4X3JxW2ldLCBSWEJfUlEoaSksIFJYUlFfTkVOVFJJRVMsIDEpOwogCiAJZGV2LT5pcnEgPSBwY2lfZGV2LT5pcnE7Ci0JaWYgKHJlcXVlc3RfaXJxIChkZXYtPmlycSwgZnNfaXJxLCBTQV9TSElSUSwgImZpcmVzdHJlYW0iLCBkZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxIChkZXYtPmlycSwgZnNfaXJxLCBJUlFGX1NIQVJFRCwgImZpcmVzdHJlYW0iLCBkZXYpKSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICJjb3VsZG4ndCBnZXQgaXJxICVkIGZvciBmaXJlc3RyZWFtLlxuIiwgcGNpX2Rldi0+aXJxKTsKIAkJLyogWFhYIHVuZG8gYWxsIHByZXZpb3VzIHN0dWZmLi4uICovCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggOTI5MjNiZi4uOTg2MjIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjEyNCw3ICsyMTIzLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBmb3JlMjAwZV9pcnFfcmVxdWVzdChzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewotICAgIGlmIChyZXF1ZXN0X2lycShmb3JlMjAwZS0+aXJxLCBmb3JlMjAwZV9pbnRlcnJ1cHQsIFNBX1NISVJRLCBmb3JlMjAwZS0+bmFtZSwgZm9yZTIwMGUtPmF0bV9kZXYpIDwgMCkgeworICAgIGlmIChyZXF1ZXN0X2lycShmb3JlMjAwZS0+aXJxLCBmb3JlMjAwZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBmb3JlMjAwZS0+bmFtZSwgZm9yZTIwMGUtPmF0bV9kZXYpIDwgMCkgewogCiAJcHJpbnRrKEZPUkUyMDBFICJ1bmFibGUgdG8gcmVzZXJ2ZSBJUlEgJXMgZm9yIGRldmljZSAlc1xuIiwKIAkgICAgICAgZm9yZTIwMGVfaXJxX2l0b2EoZm9yZTIwMGUtPmlycSksIGZvcmUyMDBlLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmggYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oCmluZGV4IDI1NThlYjguLmY5YWJmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuaApAQCAtMyw3ICszLDYgQEAKICNkZWZpbmUgX0ZPUkUyMDBFX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogcnggYnVmZmVyIHNpemVzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hlLmMgYi9kcml2ZXJzL2F0bS9oZS5jCmluZGV4IGZkZTkzMzQuLmQzNjkxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hlLmMKKysrIGIvZHJpdmVycy9hdG0vaGUuYwpAQCAtNTUsNyArNTUsNiBAQAogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtMTAwOCw3ICsxMDA3LDcgQEAKIAloZV93cml0ZWwoaGVfZGV2LCAweDAsIEdSUF81NF9NQVApOwogCWhlX3dyaXRlbChoZV9kZXYsIDB4MCwgR1JQXzc2X01BUCk7CiAKLQlpZiAocmVxdWVzdF9pcnEoaGVfZGV2LT5wY2lfZGV2LT5pcnEsIGhlX2lycV9oYW5kbGVyLCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsIERFVl9MQUJFTCwgaGVfZGV2KSkgeworCWlmIChyZXF1ZXN0X2lycShoZV9kZXYtPnBjaV9kZXYtPmlycSwgaGVfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsIERFVl9MQUJFTCwgaGVfZGV2KSkgewogCQlocHJpbnRrKCJpcnEgJWQgYWxyZWFkeSBpbiB1c2VcbiIsIGhlX2Rldi0+cGNpX2Rldi0+aXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSAgIApAQCAtMTAxOCw3ICsxMDE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19kZXZpbml0CiBoZV9zdGFydChzdHJ1Y3QgYXRtX2RldiAqZGV2KQogewogCXN0cnVjdCBoZV9kZXYgKmhlX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hvcml6b24uYyBiL2RyaXZlcnMvYXRtL2hvcml6b24uYwppbmRleCA4MjFjODFlLi5kMTExM2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKKysrIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCkBAIC0yNzM1LDcgKzI3MzUsNyBAQAogCWlycSA9IHBjaV9kZXYtPmlycTsKIAlpZiAocmVxdWVzdF9pcnEoaXJxLAogCQkJaW50ZXJydXB0X2hhbmRsZXIsCi0JCQlTQV9TSElSUSwgLyogaXJxZmxhZ3MgZ3Vlc3MgKi8KKwkJCUlSUUZfU0hBUkVELCAvKiBpcnFmbGFncyBndWVzcyAqLwogCQkJREVWX0xBQkVMLCAvKiBuYW1lIGd1ZXNzICovCiAJCQlkZXYpKSB7CiAJCVBSSU5URChEQkdfV0FSTiwgInJlcXVlc3QgSVJRIGZhaWxlZCEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hvcml6b24uaCBiL2RyaXZlcnMvYXRtL2hvcml6b24uaAppbmRleCBlMmNjNzAyLi40NDYxMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9ob3Jpem9uLmgKKysrIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWZuZGVmIERSSVZFUl9BVE1fSE9SSVpPTl9ICiAjZGVmaW5lIERSSVZFUl9BVE1fSE9SSVpPTl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19BVE1fSE9SSVpPTl9ERUJVRwogI2RlZmluZSBERUJVR19IT1JJWk9OCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwppbmRleCAwYWFiZmMyLi4zMjUzMjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKQEAgLTM1OCw3ICszNTgsNyBAQAogfTsKIAogCi1pbnQgaWR0NzcxMDVfaW5pdChzdHJ1Y3QgYXRtX2RldiAqZGV2KQoraW50IF9fZGV2aW5pdCBpZHQ3NzEwNV9pbml0KHN0cnVjdCBhdG1fZGV2ICpkZXYpCiB7CiAJZGV2LT5waHkgPSAmaWR0NzcxMDVfb3BzOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcxMDUuaCBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmgKaW5kZXggOGJhODIxOC4uM2ZkMmJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcxMDUuaAorKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5oCkBAIC03Niw3ICs3Niw3IEBACiAjZGVmaW5lIElEVDc3MTA1X0NUUlNFTF9SSEVDCTB4MDEJLyogVywgUnggSEVDIEVycm9yIENvdW50ZXIgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLWludCBpZHQ3NzEwNV9pbml0KHN0cnVjdCBhdG1fZGV2ICpkZXYpIF9faW5pdDsKK2ludCBpZHQ3NzEwNV9pbml0KHN0cnVjdCBhdG1fZGV2ICpkZXYpOwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwppbmRleCBiNGE3NmNhLi5iMDM2OWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKQEAgLTM0LDggKzM0LDggQEAKIAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMzM4Nyw3ICszMzg3LDcgQEAKIAkJd3JpdGVsKFNBUl9TVEFUX1RNUk9GLCBTQVJfUkVHX1NUQVQpOwogCX0KIAlJUFJJTlRLKCIlczogUmVxdWVzdCBJUlEgLi4uICIsIGNhcmQtPm5hbWUpOwotCWlmIChyZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgaWR0NzcyNTJfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBpZHQ3NzI1Ml9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQljYXJkLT5uYW1lLCBjYXJkKSAhPSAwKSB7CiAJCXByaW50aygiJXM6IGNhbid0IGFsbG9jYXRlIElSUS5cbiIsIGNhcmQtPm5hbWUpOwogCQlkZWluaXRfY2FyZChjYXJkKTsKQEAgLTM2NTgsNyArMzY1OCw3IEBACiAJd3JpdGVsKFNBUl9DTURfV1JJVEVfU1JBTSB8ICgwIDw8IDIpLCBTQVJfUkVHX0NNRCk7CiAKIAlmb3IgKGFkZHIgPSAweDQwMDA7IGFkZHIgPCAweDgwMDAwOyBhZGRyICs9IDB4NDAwMCkgewotCQl3cml0ZWwoMHhkZWFkYmVlZiwgU0FSX1JFR19EUjApOworCQl3cml0ZWwoQVRNX1BPSVNPTiwgU0FSX1JFR19EUjApOwogCQl3cml0ZWwoU0FSX0NNRF9XUklURV9TUkFNIHwgKGFkZHIgPDwgMiksIFNBUl9SRUdfQ01EKTsKIAogCQl3cml0ZWwoU0FSX0NNRF9SRUFEX1NSQU0gfCAoMCA8PCAyKSwgU0FSX1JFR19DTUQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaXBoYXNlLmMgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwppbmRleCAyZTJlNTBlLi5mMjBiMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pcGhhc2UuYworKysgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwpAQCAtMjI4NCw3ICsyMjg0LDcgQEAKIH0gIAogCSAgCiAJICAKLXN0YXRpYyBpbnQgX19pbml0IGlhX2luaXQoc3RydWN0IGF0bV9kZXYgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlhX2luaXQoc3RydWN0IGF0bV9kZXYgKmRldikKIHsgIAogCUlBREVWICppYWRldjsgIAogCXVuc2lnbmVkIGxvbmcgcmVhbF9iYXNlOwpAQCAtMjQ4MCw3ICsyNDgwLDcgQEAKIAkJCSAgaWFkZXYtPnJ4X2RsZV9kbWEpOyAgCiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlhX3N0YXJ0KHN0cnVjdCBhdG1fZGV2ICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpYV9zdGFydChzdHJ1Y3QgYXRtX2RldiAqZGV2KQogeyAgCiAJSUFERVYgKmlhZGV2OyAgCiAJaW50IGVycm9yOyAgCkBAIC0yNDg4LDcgKzI0ODgsNyBAQAogCXUzMiBjdHJsX3JlZzsgIAogCUlGX0VWRU5UKHByaW50aygiPmlhX3N0YXJ0XG4iKTspICAKIAlpYWRldiA9IElOUEhfSUFfREVWKGRldik7ICAKLSAgICAgICAgaWYgKHJlcXVlc3RfaXJxKGlhZGV2LT5pcnEsICZpYV9pbnQsIFNBX1NISVJRLCBERVZfTEFCRUwsIGRldikpIHsgIAorICAgICAgICBpZiAocmVxdWVzdF9pcnEoaWFkZXYtPmlycSwgJmlhX2ludCwgSVJRRl9TSEFSRUQsIERFVl9MQUJFTCwgZGV2KSkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgIihpdGYgJWQpOiBJUlElZCBpcyBhbHJlYWR5IGluIHVzZVxuIiwgIAogICAgICAgICAgICAgICAgICAgICBkZXYtPm51bWJlciwgaWFkZXYtPmlycSk7ICAKIAkJZXJyb3IgPSAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaXBoYXNlLmggYi9kcml2ZXJzL2F0bS9pcGhhc2UuaAppbmRleCBiOGQwYmQ0Li4xMzNlZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pcGhhc2UuaAorKysgYi9kcml2ZXJzL2F0bS9pcGhhc2UuaApAQCAtNDMsNyArNDMsNiBAQAogI2lmbmRlZiBJUEhBU0VfSCAgCiAjZGVmaW5lIElQSEFTRV9IICAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIElBREJHIERFRklORSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJQURlYnVnRmxhZyBCaXQgTWFwICovIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbGFuYWkuYyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKaW5kZXggY2FjMDllMy4uZmU2MGE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbGFuYWkuYworKysgYi9kcml2ZXJzL2F0bS9sYW5haS5jCkBAIC0yMjQwLDcgKzIyNDAsNyBAQAogCWNvbmYyX3dyaXRlKGxhbmFpKTsKIAlyZWdfd3JpdGUobGFuYWksIFRYX0ZJRk9fREVQVEgsIFR4RGVwdGhfUmVnKTsKIAlyZWdfd3JpdGUobGFuYWksIDAsIENCUl9JQ0dfUmVnKTsJLyogQ0JSIGRlZmF1bHRzIHRvIG5vIGxpbWl0ICovCi0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X2lycShsYW5haS0+cGNpLT5pcnEsIGxhbmFpX2ludCwgU0FfU0hJUlEsCisJaWYgKChyZXN1bHQgPSByZXF1ZXN0X2lycShsYW5haS0+cGNpLT5pcnEsIGxhbmFpX2ludCwgSVJRRl9TSEFSRUQsCiAJICAgIERFVl9MQUJFTCwgbGFuYWkpKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgIjogY2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0XG4iKTsKIAkJZ290byBlcnJvcl92Y2N0YWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL25pY3N0YXIuYyBiL2RyaXZlcnMvYXRtL25pY3N0YXIuYwppbmRleCAwNzRhYmM4Li5iODAzNjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKKysrIGIvZHJpdmVycy9hdG0vbmljc3Rhci5jCkBAIC0zNiw3ICszNiw2IEBACiAvKiBIZWFkZXIgZmlsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CkBAIC02MjYsNyArNjI1LDcgQEAKICAgIGlmIChtYWNbaV0gPT0gTlVMTCkKICAgICAgIG5pY3N0YXJfaW5pdF9lcHJvbShjYXJkLT5tZW1iYXNlKTsKIAotICAgaWYgKHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCAmbnNfaXJxX2hhbmRsZXIsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLCAibmljc3RhciIsIGNhcmQpICE9IDApCisgICBpZiAocmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsICZuc19pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAibmljc3RhciIsIGNhcmQpICE9IDApCiAgICB7CiAgICAgICBwcmludGsoIm5pY3N0YXIlZDogY2FuJ3QgYWxsb2NhdGUgSVJRICVkLlxuIiwgaSwgcGNpZGV2LT5pcnEpOwogICAgICAgZXJyb3IgPSA5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc3VuaS5jIGIvZHJpdmVycy9hdG0vc3VuaS5jCmluZGV4IGIxZDA2M2NjLi5mMDRmMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zdW5pLmMKKysrIGIvZHJpdmVycy9hdG0vc3VuaS5jCkBAIC0yODksNyArMjg5LDcgQEAKIH07CiAKIAotaW50IHN1bmlfaW5pdChzdHJ1Y3QgYXRtX2RldiAqZGV2KQoraW50IF9fZGV2aW5pdCBzdW5pX2luaXQoc3RydWN0IGF0bV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBjaGFyIG1yaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vemF0bS5jIGIvZHJpdmVycy9hdG0vemF0bS5jCmluZGV4IGY0ODQ3NDcuLjJjNjVlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3phdG0uYworKysgYi9kcml2ZXJzL2F0bS96YXRtLmMKQEAgLTMsNyArMyw2IEBACiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTI3MSw3ICsxMjcwLDcgQEAKIAl6YXRtX2Rldi0+cnhfbWFwID0gemF0bV9kZXYtPnR4X21hcCA9IE5VTEw7CiAgCWZvciAoaSA9IDA7IGkgPCBOUl9NQlg7IGkrKykKICAJCXphdG1fZGV2LT5tYnhfc3RhcnRbaV0gPSAwOwotIAllcnJvciA9IHJlcXVlc3RfaXJxKHphdG1fZGV2LT5pcnEsIHphdG1faW50LCBTQV9TSElSUSwgREVWX0xBQkVMLCBkZXYpOworIAllcnJvciA9IHJlcXVlc3RfaXJxKHphdG1fZGV2LT5pcnEsIHphdG1faW50LCBJUlFGX1NIQVJFRCwgREVWX0xBQkVMLCBkZXYpOwogCWlmIChlcnJvciA8IDApIHsKICAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwgIihpdGYgJWQpOiBJUlElZCBpcyBhbHJlYWR5IGluIHVzZVxuIiwKICAJCSAgICBkZXYtPm51bWJlcix6YXRtX2Rldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3phdG0uaCBiL2RyaXZlcnMvYXRtL3phdG0uaAppbmRleCA0MTZmZTBmLi5hZTkxNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS96YXRtLmgKKysrIGIvZHJpdmVycy9hdG0vemF0bS5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBEUklWRVJfQVRNX1pBVE1fSAogI2RlZmluZSBEUklWRVJfQVRNX1pBVE1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggMDUwZDg2ZC4uODNmYThiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IDlhYTEyNzQuLmRlODkwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCAyN2MyMTc2Li5iMjFmODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTgsNyArOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggYjQwMDMxNC4uNTYyNjAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCBlYWUyYmRjLi5kN2RlMTc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC00MCwyNCArNDAsMTMgQEAKIAlpbnQgbjsKIAlpbnQgbmlkID0gZGV2LT5pZDsKIAlzdHJ1Y3Qgc3lzaW5mbyBpOwotCXN0cnVjdCBwYWdlX3N0YXRlIHBzOwogCXVuc2lnbmVkIGxvbmcgaW5hY3RpdmU7CiAJdW5zaWduZWQgbG9uZyBhY3RpdmU7CiAJdW5zaWduZWQgbG9uZyBmcmVlOwogCiAJc2lfbWVtaW5mb19ub2RlKCZpLCBuaWQpOwotCWdldF9wYWdlX3N0YXRlX25vZGUoJnBzLCBuaWQpOwogCV9fZ2V0X3pvbmVfY291bnRzKCZhY3RpdmUsICZpbmFjdGl2ZSwgJmZyZWUsIE5PREVfREFUQShuaWQpKTsKIAotCS8qIENoZWNrIGZvciBuZWdhdGl2ZSB2YWx1ZXMgaW4gdGhlc2UgYXBwcm94aW1hdGUgY291bnRlcnMgKi8KLQlpZiAoKGxvbmcpcHMubnJfZGlydHkgPCAwKQotCQlwcy5ucl9kaXJ0eSA9IDA7Ci0JaWYgKChsb25nKXBzLm5yX3dyaXRlYmFjayA8IDApCi0JCXBzLm5yX3dyaXRlYmFjayA9IDA7Ci0JaWYgKChsb25nKXBzLm5yX21hcHBlZCA8IDApCi0JCXBzLm5yX21hcHBlZCA9IDA7Ci0JaWYgKChsb25nKXBzLm5yX3NsYWIgPCAwKQotCQlwcy5ucl9zbGFiID0gMDsKIAogCW4gPSBzcHJpbnRmKGJ1ZiwgIlxuIgogCQkgICAgICAgIk5vZGUgJWQgTWVtVG90YWw6ICAgICAlOGx1IGtCXG4iCkBAIC03MSw3ICs2MCwxMiBAQAogCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBEaXJ0eTogICAgICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIFdyaXRlYmFjazogICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgRmlsZVBhZ2VzOiAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBNYXBwZWQ6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFub25QYWdlczogICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgUGFnZVRhYmxlczogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBORlMgVW5zdGFibGU6ICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEJvdW5jZTogICAgICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgU2xhYjogICAgICAgICAlOGx1IGtCXG4iLAogCQkgICAgICAgbmlkLCBLKGkudG90YWxyYW0pLAogCQkgICAgICAgbmlkLCBLKGkuZnJlZXJhbSksCkBAIC04MiwxMCArNzYsMTUgQEAKIAkJICAgICAgIG5pZCwgSyhpLmZyZWVoaWdoKSwKIAkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtIC0gaS50b3RhbGhpZ2gpLAogCQkgICAgICAgbmlkLCBLKGkuZnJlZXJhbSAtIGkuZnJlZWhpZ2gpLAotCQkgICAgICAgbmlkLCBLKHBzLm5yX2RpcnR5KSwKLQkJICAgICAgIG5pZCwgSyhwcy5ucl93cml0ZWJhY2spLAotCQkgICAgICAgbmlkLCBLKHBzLm5yX21hcHBlZCksCi0JCSAgICAgICBuaWQsIEsocHMubnJfc2xhYikpOworCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0ZJTEVfRElSVFkpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9XUklURUJBQ0spKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9GSUxFX1BBR0VTKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfRklMRV9NQVBQRUQpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BTk9OX1BBR0VTKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfUEFHRVRBQkxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfVU5TVEFCTEVfTkZTKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQk9VTkNFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfU0xBQikpKTsKIAluICs9IGh1Z2V0bGJfcmVwb3J0X25vZGVfbWVtaW5mbyhuaWQsIGJ1ZiArIG4pOwogCXJldHVybiBuOwogfQpAQCAtOTUsMjggKzk0LDYgQEAKIAogc3RhdGljIHNzaXplX3Qgbm9kZV9yZWFkX251bWFzdGF0KHN0cnVjdCBzeXNfZGV2aWNlICogZGV2LCBjaGFyICogYnVmKQogewotCXVuc2lnbmVkIGxvbmcgbnVtYV9oaXQsIG51bWFfbWlzcywgaW50ZXJsZWF2ZV9oaXQsIG51bWFfZm9yZWlnbjsKLQl1bnNpZ25lZCBsb25nIGxvY2FsX25vZGUsIG90aGVyX25vZGU7Ci0JaW50IGksIGNwdTsKLQlwZ19kYXRhX3QgKnBnID0gTk9ERV9EQVRBKGRldi0+aWQpOwotCW51bWFfaGl0ID0gMDsKLQludW1hX21pc3MgPSAwOwotCWludGVybGVhdmVfaGl0ID0gMDsKLQludW1hX2ZvcmVpZ24gPSAwOwotCWxvY2FsX25vZGUgPSAwOwotCW90aGVyX25vZGUgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykgewotCQlzdHJ1Y3Qgem9uZSAqeiA9ICZwZy0+bm9kZV96b25lc1tpXTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzID0gem9uZV9wY3AoeixjcHUpOwotCQkJbnVtYV9oaXQgKz0gcHMtPm51bWFfaGl0OwotCQkJbnVtYV9taXNzICs9IHBzLT5udW1hX21pc3M7Ci0JCQludW1hX2ZvcmVpZ24gKz0gcHMtPm51bWFfZm9yZWlnbjsKLQkJCWludGVybGVhdmVfaGl0ICs9IHBzLT5pbnRlcmxlYXZlX2hpdDsKLQkJCWxvY2FsX25vZGUgKz0gcHMtPmxvY2FsX25vZGU7Ci0JCQlvdGhlcl9ub2RlICs9IHBzLT5vdGhlcl9ub2RlOwotCQl9Ci0JfQogCXJldHVybiBzcHJpbnRmKGJ1ZiwKIAkJICAgICAgICJudW1hX2hpdCAlbHVcbiIKIAkJICAgICAgICJudW1hX21pc3MgJWx1XG4iCkBAIC0xMjQsMTIgKzEwMSwxMiBAQAogCQkgICAgICAgImludGVybGVhdmVfaGl0ICVsdVxuIgogCQkgICAgICAgImxvY2FsX25vZGUgJWx1XG4iCiAJCSAgICAgICAib3RoZXJfbm9kZSAlbHVcbiIsCi0JCSAgICAgICBudW1hX2hpdCwKLQkJICAgICAgIG51bWFfbWlzcywKLQkJICAgICAgIG51bWFfZm9yZWlnbiwKLQkJICAgICAgIGludGVybGVhdmVfaGl0LAotCQkgICAgICAgbG9jYWxfbm9kZSwKLQkJICAgICAgIG90aGVyX25vZGUpOworCQkgICAgICAgbm9kZV9wYWdlX3N0YXRlKGRldi0+aWQsIE5VTUFfSElUKSwKKwkJICAgICAgIG5vZGVfcGFnZV9zdGF0ZShkZXYtPmlkLCBOVU1BX01JU1MpLAorCQkgICAgICAgbm9kZV9wYWdlX3N0YXRlKGRldi0+aWQsIE5VTUFfRk9SRUlHTiksCisJCSAgICAgICBub2RlX3BhZ2Vfc3RhdGUoZGV2LT5pZCwgTlVNQV9JTlRFUkxFQVZFX0hJVCksCisJCSAgICAgICBub2RlX3BhZ2Vfc3RhdGUoZGV2LT5pZCwgTlVNQV9MT0NBTCksCisJCSAgICAgICBub2RlX3BhZ2Vfc3RhdGUoZGV2LT5pZCwgTlVNQV9PVEhFUikpOwogfQogc3RhdGljIFNZU0RFVl9BVFRSKG51bWFzdGF0LCBTX0lSVUdPLCBub2RlX3JlYWRfbnVtYXN0YXQsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAwZDJlMTAxLi5mZGZhM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIGFuY2VzdHJhbCBkZXBlbmRlbmNpZXMgdGhhdCB0aGUgc3Vic3lzdGVtIGxpc3QgbWFpbnRhaW5zLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICJwb3dlci5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc2h1dGRvd24uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zaHV0ZG93bi5jCmluZGV4IDg4MjZhNWIuLjM0ODNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zaHV0ZG93bi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zaHV0ZG93bi5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggNjg1ODE3OC4uMDRlNWRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogYWRkIHRoZW1zZWx2ZXMgYXMgY2hpbGRyZW4gb2YgdGhlIHN5c3RlbSBidXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKaW5kZXggZGQ4YTE1MC4uNGNkMjNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYworKysgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCkBAIC0yNTMwLDcgKzI1MzAsNiBAQAogCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPk1heEJsb2Nrc1BlckNvbW1hbmQpOwogCWRpc2stPnF1ZXVlID0gUmVxdWVzdFF1ZXVlOwogCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAicmQvYyVkZCVkIiwgQ29udHJvbGxlci0+Q29udHJvbGxlck51bWJlciwgbik7Ci0Jc3ByaW50ZihkaXNrLT5kZXZmc19uYW1lLCAicmQvaG9zdCVkL3RhcmdldCVkIiwgQ29udHJvbGxlci0+Q29udHJvbGxlck51bWJlciwgbik7CiAJZGlzay0+bWFqb3IgPSBNYWpvck51bWJlcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IG4gPDwgREFDOTYwX01heFBhcnRpdGlvbnNCaXRzOwogCWRpc2stPmZvcHMgPSAmREFDOTYwX0Jsb2NrRGV2aWNlT3BlcmF0aW9uczsKQEAgLTMwMTUsNyArMzAxNCw3IEBACiAgICAgIEFjcXVpcmUgc2hhcmVkIGFjY2VzcyB0byB0aGUgSVJRIENoYW5uZWwuCiAgICovCiAgIElSUV9DaGFubmVsID0gUENJX0RldmljZS0+aXJxOwotICBpZiAocmVxdWVzdF9pcnEoSVJRX0NoYW5uZWwsIEludGVycnVwdEhhbmRsZXIsIFNBX1NISVJRLAorICBpZiAocmVxdWVzdF9pcnEoSVJRX0NoYW5uZWwsIEludGVycnVwdEhhbmRsZXIsIElSUUZfU0hBUkVELAogCQkgICAgICBDb250cm9sbGVyLT5GdWxsTW9kZWxOYW1lLCBDb250cm9sbGVyKSA8IDApCiAgIHsKIAlEQUM5NjBfRXJyb3IoIlVuYWJsZSB0byBhY3F1aXJlIElSUSBDaGFubmVsICVkIGZvciBDb250cm9sbGVyIGF0XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL2Fjc2kuYwppbmRleCAxOTZjMGVjLi4wYjgwZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Fjc2kuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Fjc2kuYwpAQCAtNDMsNyArNDMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTE3MzIsMTMgKzE3MzEsMTAgQEAKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhY3NpX2dlbmRpc2tbaV07CiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAiYWQlYyIsICdhJytpKTsKIAkJYWlwID0gJmFjc2lfaW5mb1tORGV2aWNlc107Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgImFkL3RhcmdldCVkL2x1biVkIiwgYWlwLT50YXJnZXQsIGFpcC0+bHVuKTsKIAkJZGlzay0+bWFqb3IgPSBBQ1NJX01BSk9SOwogCQlkaXNrLT5maXJzdF9taW5vciA9IGkgPDwgNDsKLQkJaWYgKGFjc2lfaW5mb1tpXS50eXBlICE9IEhBUkRESVNLKSB7CisJCWlmIChhY3NpX2luZm9baV0udHlwZSAhPSBIQVJERElTSykKIAkJCWRpc2stPm1pbm9ycyA9IDE7Ci0JCQlzdHJjYXQoZGlzay0+ZGV2ZnNfbmFtZSwgIi9kaXNjIik7Ci0JCX0KIAkJZGlzay0+Zm9wcyA9ICZhY3NpX2ZvcHM7CiAJCWRpc2stPnByaXZhdGVfZGF0YSA9ICZhY3NpX2luZm9baV07CiAJCXNldF9jYXBhY2l0eShkaXNrLCBhY3NpX2luZm9baV0uc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Fjc2lfc2xtLmMgYi9kcml2ZXJzL2Jsb2NrL2Fjc2lfc2xtLmMKaW5kZXggNGNiOWMxMy4uNDAzMGE4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hY3NpX3NsbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svYWNzaV9zbG0uYwpAQCAtNjUsNyArNjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEwMDUsMTEgKzEwMDQsNiBAQAogCUJ1ZmZlclAgPSBTTE1CdWZmZXI7CiAJU0xNU3RhdGUgPSBJRExFOwogCQotCWRldmZzX21rX2Rpcigic2xtIik7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9TTE07IGkrKykgewotCQlkZXZmc19ta19jZGV2KE1LREVWKEFDU0lfTUFKT1IsIGkpLAotCQkJCVNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLCAic2xtLyVkIiwgaSk7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0xMDMyLDEwICsxMDI2LDYgQEAKIAogdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfU0xNOyBpKyspCi0JCWRldmZzX3JlbW92ZSgic2xtLyVkIiwgaSk7Ci0JZGV2ZnNfcmVtb3ZlKCJzbG0iKTsKIAlpZiAodW5yZWdpc3Rlcl9jaHJkZXYoIEFDU0lfTUFKT1IsICJzbG0iICkgIT0gMCkKIAkJcHJpbnRrKCBLRVJOX0VSUiAiYWNzaV9zbG06IGNsZWFudXBfbW9kdWxlIGZhaWxlZFxuIik7CiAJYXRhcmlfc3RyYW1fZnJlZSggU0xNQnVmZmVyICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggMzliMGY1My4uMWM0ZGYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMzE1OSw3ICszMTU5LDcgQEAKIAkvKiBtYWtlIHN1cmUgdGhlIGJvYXJkIGludGVycnVwdHMgYXJlIG9mZiAqLwogCWhiYVtpXS0+YWNjZXNzLnNldF9pbnRyX21hc2soaGJhW2ldLCBDQ0lTU19JTlRSX09GRik7CiAJaWYgKHJlcXVlc3RfaXJxKGhiYVtpXS0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBkb19jY2lzc19pbnRyLAotCQkJU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsIGhiYVtpXS0+ZGV2bmFtZSwgaGJhW2ldKSkgeworCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBoYmFbaV0tPmRldm5hbWUsIGhiYVtpXSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogVW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVzXG4iLAogCQkgICAgICAgaGJhW2ldLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGhiYVtpXS0+ZGV2bmFtZSk7CiAJCWdvdG8gY2xlYW4yOwpAQCAtMzI0OCw3ICszMjQ4LDYgQEAKIAogCQlxLT5xdWV1ZWRhdGEgPSBoYmFbaV07CiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAiY2Npc3MvYyVkZCVkIiwgaSwgaik7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgImNjaXNzL2hvc3QlZC90YXJnZXQlZCIsIGksIGopOwogCQlkaXNrLT5tYWpvciA9IGhiYVtpXS0+bWFqb3I7CiAJCWRpc2stPmZpcnN0X21pbm9yID0gaiA8PCBOV0RfU0hJRlQ7CiAJCWRpc2stPmZvcHMgPSAmY2Npc3NfZm9wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCA1ZWI2ZmI3Li43NTdmNDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMzQ4LDcgKzM0Nyw2IEBACiAJZm9yKGogPSAwOyBqIDwgTldEOyBqKyspIHsKIAkJaWYgKGlkYV9nZW5kaXNrW2ldW2pdLT5mbGFncyAmIEdFTkhEX0ZMX1VQKQogCQkJZGVsX2dlbmRpc2soaWRhX2dlbmRpc2tbaV1bal0pOwotCQlkZXZmc19yZW1vdmUoImlkYS9jJWRkJWQiLGksaik7CiAJCXB1dF9kaXNrKGlkYV9nZW5kaXNrW2ldW2pdKTsKIAl9CiAJYmxrX2NsZWFudXBfcXVldWUoaGJhW2ldLT5xdWV1ZSk7CkBAIC00MTAsNyArNDA4LDcgQEAKIAl9CiAJaGJhW2ldLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoYmFbaV0sIDApOwogCWlmIChyZXF1ZXN0X2lycShoYmFbaV0tPmludHIsIGRvX2lkYV9pbnRyLAotCQlTQV9JTlRFUlJVUFR8U0FfU0hJUlEsIGhiYVtpXS0+ZGV2bmFtZSwgaGJhW2ldKSkKKwkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgaGJhW2ldLT5kZXZuYW1lLCBoYmFbaV0pKQogCXsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVzXG4iLAogCQkJCWhiYVtpXS0+aW50ciwgaGJhW2ldLT5kZXZuYW1lKTsKQEAgLTE4MDcsOCArMTgwNSw2IEBACiAKIAkJCQl9CiAKLQkJCQlzcHJpbnRmKGRpc2stPmRldmZzX25hbWUsICJpZGEvYyVkZCVkIiwgY3RsciwgbG9nX3VuaXQpOwotCiAJCQkJaW5mb19wLT5waHlzX2RyaXZlcyA9CiAJCQkJICAgIHNlbnNlX2NvbmZpZ19idWYtPmN0bHJfcGh5c19kcnY7CiAJCQkJaW5mb19wLT5kcnZfYXNzaWduX21hcApAQCAtMTg0NCw3ICsxODQwLDYgQEAKIAkJfQogCX0KIAotCWRldmZzX3JlbW92ZSgiaWRhIik7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImNwcWFycmF5IiwgcHJvY19yb290X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGRmZjFlNjcuLjUxMDlmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtMTc3LDcgKzE3Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIGZvciBpbnZhbGlkYXRlX2J1ZmZlcnMoKSAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0yMjQsNyArMjIzLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB2aXJ0dWFsX2RtYV9wb3J0ID0gMHgzZjA7CiBpcnFyZXR1cm5fdCBmbG9wcHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIGludCBzZXRfZG9yKGludCBmZGMsIGNoYXIgbWFzaywgY2hhciBkYXRhKTsKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX2RldmZzX2VudHJpZXMoaW50IGRyaXZlKSBfX2luaXQ7CiAKICNkZWZpbmUgS182NAkweDEwMDAwCQkvKiA2NEtCICovCiAKQEAgLTI1MSwxOCArMjQ5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgkvKiBmb3IgdGhlIGNvbXBhdGliaWxpdHkgZWplY3QgaW9jdGwgKi8KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKLS8qCi0gKiBJbnRlcnJ1cHQgZnJlZWluZyBhbHNvIG1lYW5zIC9wcm9jIFZGUyB3b3JrIC0gZG9udCBkbyBpdAotICogZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gV2UgcHVzaCB0aGlzIHdvcmsgaW50byBrZXZlbnRkOgotICovCi1zdGF0aWMgdm9pZCBmZF9mcmVlX2lycV9mbih2b2lkICpkYXRhKQotewotCWZkX2ZyZWVfaXJxKCk7Ci19Ci0KLXN0YXRpYyBERUNMQVJFX1dPUksoZmRfZnJlZV9pcnFfd29yaywgZmRfZnJlZV9pcnFfZm4sIE5VTEwpOwotCi0KIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY3VycmVudF9yZXE7CiBzdGF0aWMgc3RydWN0IHJlcXVlc3RfcXVldWUgKmZsb3BweV9xdWV1ZTsKIHN0YXRpYyB2b2lkIGRvX2ZkX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICogcSk7CkBAIC04MjgsMTUgKzgxNCw2IEBACiAJCQlVRFJTLT5zZWxlY3RfZGF0ZSA9IGppZmZpZXM7CiAJCX0KIAl9Ci0JLyoKLQkgKiAgICAgIFdlIHNob3VsZCBwcm9wYWdhdGUgZmFpbHVyZXMgdG8gZ3JhYiB0aGUgcmVzb3VyY2VzIGJhY2sKLQkgKiAgICAgIG5pY2VseSBmcm9tIGhlcmUuIEFjdHVhbGx5IHdlIG91Z2h0IHRvIHJld3JpdGUgdGhlIGZkCi0JICogICAgICBkcml2ZXIgc29tZSBkYXkgdG9vLgotCSAqLwotCWlmIChuZXdkb3IgJiBGTE9QUFlfTU9UT1JfTUFTSykKLQkJZmxvcHB5X2dyYWJfaXJxX2FuZF9kbWEoKTsKLQlpZiAob2xkZG9yICYgRkxPUFBZX01PVE9SX01BU0spCi0JCWZsb3BweV9yZWxlYXNlX2lycV9hbmRfZG1hKCk7CiAJcmV0dXJuIG9sZGRvcjsKIH0KIApAQCAtODk0LDggKzg3MSw2IEBACiAJCSAgICAgICBsaW5lKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlpZiAoZmxvcHB5X2dyYWJfaXJxX2FuZF9kbWEoKSA9PSAtMSkKLQkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZmZGNfYnVzeSkpIHsKIAkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CkBAIC05MTcsNiArODkyLDggQEAKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmZmRjX3dhaXQsICZ3YWl0KTsKKworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCX0KIAljb21tYW5kX3N0YXR1cyA9IEZEX0NPTU1BTkRfTk9ORTsKIApAQCAtOTUwLDcgKzkyNyw2IEBACiAJaWYgKGVsdl9uZXh0X3JlcXVlc3QoZmxvcHB5X3F1ZXVlKSkKIAkJZG9fZmRfcmVxdWVzdChmbG9wcHlfcXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZsb3BweV9sb2NrLCBmbGFncyk7Ci0JZmxvcHB5X3JlbGVhc2VfaXJxX2FuZF9kbWEoKTsKIAl3YWtlX3VwKCZmZGNfd2FpdCk7CiB9CiAKQEAgLTM2NzYsNyArMzY1Miw2IEBACiAJCQkJZmlyc3QgPSAwOwogCQkJfQogCQkJcHJpbnRrKCIlcyBmZCVkIGlzICVzIiwgcHJlcGVuZCwgZHJpdmUsIG5hbWUpOwotCQkJcmVnaXN0ZXJfZGV2ZnNfZW50cmllcyhkcml2ZSk7CiAJCX0KIAkJKlVEUCA9ICpwYXJhbXM7CiAJfQpAQCAtMzY5Nyw4ICszNjcyLDggQEAKIAl9CiAJaWYgKCFVRFJTLT5mZF9yZWYpCiAJCW9wZW5lZF9iZGV2W2RyaXZlXSA9IE5VTEw7Ci0JZmxvcHB5X3JlbGVhc2VfaXJxX2FuZF9kbWEoKTsKIAltdXRleF91bmxvY2soJm9wZW5fbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzcyOSw5ICszNzA0LDYgQEAKIAlpZiAoVURSUy0+ZmRfcmVmID09IC0xIHx8IChVRFJTLT5mZF9yZWYgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpKSkKIAkJZ290byBvdXQyOwogCi0JaWYgKGZsb3BweV9ncmFiX2lycV9hbmRfZG1hKCkpCi0JCWdvdG8gb3V0MjsKLQogCWlmIChmaWxwLT5mX2ZsYWdzICYgT19FWENMKQogCQlVRFJTLT5mZF9yZWYgPSAtMTsKIAllbHNlCkBAIC0zODA4LDcgKzM3ODAsNiBAQAogCQlVRFJTLT5mZF9yZWYtLTsKIAlpZiAoIVVEUlMtPmZkX3JlZikKIAkJb3BlbmVkX2JkZXZbZHJpdmVdID0gTlVMTDsKLQlmbG9wcHlfcmVsZWFzZV9pcnFfYW5kX2RtYSgpOwogb3V0MjoKIAltdXRleF91bmxvY2soJm9wZW5fbG9jayk7CiAJcmV0dXJuIHJlczsKQEAgLTM4MjUsMTQgKzM3OTYsOSBAQAogCQlyZXR1cm4gMTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIFVEUlMtPmxhc3RfY2hlY2tlZCArIFVEUC0+Y2hlY2tmcmVxKSkgewotCQlpZiAoZmxvcHB5X2dyYWJfaXJxX2FuZF9kbWEoKSkgewotCQkJcmV0dXJuIDE7Ci0JCX0KLQogCQlsb2NrX2ZkYyhkcml2ZSwgMCk7CiAJCXBvbGxfZHJpdmUoMCwgMCk7CiAJCXByb2Nlc3NfZmRfcmVxdWVzdCgpOwotCQlmbG9wcHlfcmVsZWFzZV9pcnFfYW5kX2RtYSgpOwogCX0KIAogCWlmIChVVEVTVEYoRkRfRElTS19DSEFOR0VEKSB8fApAQCAtMzk1NCwzNyArMzkyMCw2IEBACiAJLm1lZGlhX2NoYW5nZWQJPSBjaGVja19mbG9wcHlfY2hhbmdlLAogCS5yZXZhbGlkYXRlX2Rpc2sgPSBmbG9wcHlfcmV2YWxpZGF0ZSwKIH07Ci1zdGF0aWMgY2hhciAqdGFibGVbXSA9IHsKLQkiIiwgImQzNjAiLCAiaDEyMDAiLCAidTM2MCIsICJ1NzIwIiwgImgzNjAiLCAiaDcyMCIsCi0JInUxNDQwIiwgInUyODgwIiwgIkNvbXBhUSIsICJoMTQ0MCIsICJ1MTY4MCIsICJoNDEwIiwKLQkidTgyMCIsICJoMTQ3NiIsICJ1MTcyMiIsICJoNDIwIiwgInU4MzAiLCAiaDE0OTQiLCAidTE3NDMiLAotCSJoODgwIiwgInUxMDQwIiwgInUxMTIwIiwgImgxNjAwIiwgInUxNzYwIiwgInUxOTIwIiwKLQkidTMyMDAiLCAidTM1MjAiLCAidTM4NDAiLCAidTE4NDAiLCAidTgwMCIsICJ1MTYwMCIsCi0JTlVMTAotfTsKLXN0YXRpYyBpbnQgdDM2MFtdID0geyAxLCAwIH0sCi0JdDEyMDBbXSA9IHsgMiwgNSwgNiwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjMsIDAgfSwKLQl0M2luW10gPSB7IDgsIDksIDI2LCAyNywgMjgsIDcsIDExLCAxNSwgMTksIDI0LCAyNSwgMjksIDMxLCAzLCA0LCAxMywKLQkJCTE3LCAyMSwgMjIsIDMwLCAwIH07Ci1zdGF0aWMgaW50ICp0YWJsZV9zdXBbXSA9Ci0gICAgeyBOVUxMLCB0MzYwLCB0MTIwMCwgdDNpbiArIDUgKyA4LCB0M2luICsgNSwgdDNpbiwgdDNpbiB9OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVnaXN0ZXJfZGV2ZnNfZW50cmllcyhpbnQgZHJpdmUpCi17Ci0JaW50IGJhc2VfbWlub3IgPSAoZHJpdmUgPCA0KSA/IGRyaXZlIDogKDEyNCArIGRyaXZlKTsKLQotCWlmIChVRFAtPmNtb3MgPCBBUlJBWV9TSVpFKGRlZmF1bHRfZHJpdmVfcGFyYW1zKSkgewotCQlpbnQgaSA9IDA7Ci0JCWRvIHsKLQkJCWludCBtaW5vciA9IGJhc2VfbWlub3IgKyAodGFibGVfc3VwW1VEUC0+Y21vc11baV0gPDwgMik7Ci0KLQkJCWRldmZzX21rX2JkZXYoTUtERVYoRkxPUFBZX01BSk9SLCBtaW5vciksCi0JCQkJICAgICAgU19JRkJMSyB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8Ci0JCQkJICAgICAgU19JV0dSUCwgImZsb3BweS8lZCVzIiwgZHJpdmUsCi0JCQkJICAgICAgdGFibGVbdGFibGVfc3VwW1VEUC0+Y21vc11baV1dKTsKLQkJfSB3aGlsZSAodGFibGVfc3VwW1VEUC0+Y21vc11baSsrXSk7Ci0JfQotfQogCiAvKgogICogRmxvcHB5IERyaXZlciBpbml0aWFsaXphdGlvbgpAQCAtNDI2MSwxMSArNDE5Niw5IEBACiAJCW1vdG9yX29mZl90aW1lcltkcl0uZnVuY3Rpb24gPSBtb3Rvcl9vZmZfY2FsbGJhY2s7CiAJfQogCi0JZGV2ZnNfbWtfZGlyKCJmbG9wcHkiKTsKLQogCWVyciA9IHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X2RldmZzX3JlbW92ZTsKKwkJZ290byBvdXRfcHV0X2Rpc2s7CiAKIAlmbG9wcHlfcXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmZmxvcHB5X2xvY2spOwogCWlmICghZmxvcHB5X3F1ZXVlKSB7CkBAIC00MzgyLDcgKzQzMTUsNiBAQAogCWZkYyA9IDA7CiAJZGVsX3RpbWVyKCZmZF90aW1lb3V0KTsKIAljdXJyZW50X2RyaXZlID0gMDsKLQlmbG9wcHlfcmVsZWFzZV9pcnFfYW5kX2RtYSgpOwogCWluaXRpYWxpc2luZyA9IDA7CiAJaWYgKGhhdmVfbm9fZmRjKSB7CiAJCURQUklOVCgibm8gZmxvcHB5IGNvbnRyb2xsZXJzIGZvdW5kXG4iKTsKQEAgLTQ0MjQsOCArNDM1Niw2IEBACiAJYmxrX2NsZWFudXBfcXVldWUoZmxvcHB5X3F1ZXVlKTsKIG91dF91bnJlZ19ibGtkZXY6CiAJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKLW91dF9kZXZmc19yZW1vdmU6Ci0JZGV2ZnNfcmVtb3ZlKCJmbG9wcHkiKTsKIG91dF9wdXRfZGlzazoKIAl3aGlsZSAoZHItLSkgewogCQlkZWxfdGltZXIoJm1vdG9yX29mZl90aW1lcltkcl0pOwpAQCAtNDU0Miw3ICs0NDcyLDcgQEAKIAlpZiAoaXJxZG1hX2FsbG9jYXRlZCkgewogCQlmZF9kaXNhYmxlX2RtYSgpOwogCQlmZF9mcmVlX2RtYSgpOwotCQlzY2hlZHVsZV93b3JrKCZmZF9mcmVlX2lycV93b3JrKTsKKwkJZmRfZnJlZV9pcnEoKTsKIAkJaXJxZG1hX2FsbG9jYXRlZCA9IDA7CiAJfQogCXNldF9kb3IoMCwgfjAsIDgpOwpAQCAtNDU4NiwxOSArNDUxNiw2IEBACiAKIHN0YXRpYyBjaGFyICpmbG9wcHk7CiAKLXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfZGV2ZnNfZW50cmllcyhpbnQgZHJpdmUpCi17Ci0JaW50IGk7Ci0KLQlpZiAoVURQLT5jbW9zIDwgQVJSQVlfU0laRShkZWZhdWx0X2RyaXZlX3BhcmFtcykpIHsKLQkJaSA9IDA7Ci0JCWRvIHsKLQkJCWRldmZzX3JlbW92ZSgiZmxvcHB5LyVkJXMiLCBkcml2ZSwKLQkJCQkgICAgIHRhYmxlW3RhYmxlX3N1cFtVRFAtPmNtb3NdW2ldXSk7Ci0JCX0gd2hpbGUgKHRhYmxlX3N1cFtVRFAtPmNtb3NdW2krK10pOwotCX0KLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2Zsb3BweV9jZmdfc3RyaW5nKGNoYXIgKmNmZykKIHsKIAljaGFyICpwdHI7CkBAIC00NjM1LDEzICs0NTUyLDExIEBACiAJCWlmICgoYWxsb3dlZF9kcml2ZV9tYXNrICYgKDEgPDwgZHJpdmUpKSAmJgogCQkgICAgZmRjX3N0YXRlW0ZEQyhkcml2ZSldLnZlcnNpb24gIT0gRkRDX05PTkUpIHsKIAkJCWRlbF9nZW5kaXNrKGRpc2tzW2RyaXZlXSk7Ci0JCQl1bnJlZ2lzdGVyX2RldmZzX2VudHJpZXMoZHJpdmUpOwogCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZmbG9wcHlfZGV2aWNlW2RyaXZlXS5kZXYsICZkZXZfYXR0cl9jbW9zKTsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZmbG9wcHlfZGV2aWNlW2RyaXZlXSk7CiAJCX0KIAkJcHV0X2Rpc2soZGlza3NbZHJpdmVdKTsKIAl9Ci0JZGV2ZnNfcmVtb3ZlKCJmbG9wcHkiKTsKIAogCWRlbF90aW1lcl9zeW5jKCZmZF90aW1lb3V0KTsKIAlkZWxfdGltZXJfc3luYygmZmRfdGltZXIpOwpAQCAtNDY1Myw4ICs0NTY4LDYgQEAKIAkvKiBlamVjdCBkaXNrLCBpZiBhbnkgKi8KIAlmZF9lamVjdCgwKTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CQkvKiBmZF9mcmVlX2lycSgpIG1pZ2h0IGJlIHBlbmRpbmcgKi8KLQogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRldmljZV9yZWxlYXNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCAzYzc0ZWE3Li43YjNiOTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNTAsNyArNTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjMsNyArNjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIxMCw3ICsyMDgsNyBAQAogewogCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsgLyoga3Vkb3MgdG8gTkZzY2tpbmdTICovCiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcyA9IG1hcHBpbmctPmFfb3BzOworCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHMgPSBtYXBwaW5nLT5hX29wczsKIAlwZ29mZl90IGluZGV4OwogCXVuc2lnbmVkIG9mZnNldCwgYnZfb2ZmczsKIAlpbnQgbGVuLCByZXQ7CkBAIC03ODQsNyArNzgyLDcgQEAKIAogCWVycm9yID0gLUVJTlZBTDsKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7Ci0JCXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHMgPSBtYXBwaW5nLT5hX29wczsKKwkJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcyA9IG1hcHBpbmctPmFfb3BzOwogCQkvKgogCQkgKiBJZiB3ZSBjYW4ndCByZWFkIC0gc29ycnkuIElmIHdlIG9ubHkgY2FuJ3Qgd3JpdGUgLSB3ZWxsLAogCQkgKiBpdCdzIGdvaW5nIHRvIGJlIHJlYWQtb25seS4KQEAgLTEyNzcsOCArMTI3NSw2IEBACiAJCQlnb3RvIG91dF9tZW0zOwogCX0KIAotCWRldmZzX21rX2RpcigibG9vcCIpOwotCiAJZm9yIChpID0gMDsgaSA8IG1heF9sb29wOyBpKyspIHsKIAkJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9ICZsb29wX2RldltpXTsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkaXNrc1tpXTsKQEAgLTEyOTYsNyArMTI5Miw2IEBACiAJCWRpc2stPmZpcnN0X21pbm9yID0gaTsKIAkJZGlzay0+Zm9wcyA9ICZsb19mb3BzOwogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImxvb3AlZCIsIGkpOwotCQlzcHJpbnRmKGRpc2stPmRldmZzX25hbWUsICJsb29wLyVkIiwgaSk7CiAJCWRpc2stPnByaXZhdGVfZGF0YSA9IGxvOwogCQlkaXNrLT5xdWV1ZSA9IGxvLT5sb19xdWV1ZTsKIAl9CkBAIC0xMzEwLDcgKzEzMDUsNiBAQAogb3V0X21lbTQ6CiAJd2hpbGUgKGktLSkKIAkJYmxrX2NsZWFudXBfcXVldWUobG9vcF9kZXZbaV0ubG9fcXVldWUpOwotCWRldmZzX3JlbW92ZSgibG9vcCIpOwogCWkgPSBtYXhfbG9vcDsKIG91dF9tZW0zOgogCXdoaWxlIChpLS0pCkBAIC0xMzMzLDcgKzEzMjcsNiBAQAogCQlibGtfY2xlYW51cF9xdWV1ZShsb29wX2RldltpXS5sb19xdWV1ZSk7CiAJCXB1dF9kaXNrKGRpc2tzW2ldKTsKIAl9Ci0JZGV2ZnNfcmVtb3ZlKCJsb29wIik7CiAJaWYgKHVucmVnaXN0ZXJfYmxrZGV2KExPT1BfTUFKT1IsICJsb29wIikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvb3A6IGNhbm5vdCB1bnJlZ2lzdGVyIGJsa2RldlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDdmNTU0ZjIuLjBhMWIxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMjksOCArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KLQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpAQCAtNTIsOSArNTAsOSBAQAogI2RlZmluZSBEQkdfUlggICAgICAgICAgMHgwMjAwCiAjZGVmaW5lIERCR19UWCAgICAgICAgICAweDA0MDAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdmbGFnczsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmJkc19tYXggPSAxNjsKICNlbmRpZiAvKiBOREVCVUcgKi8KIAorc3RhdGljIHVuc2lnbmVkIGludCBuYmRzX21heCA9IDE2Owogc3RhdGljIHN0cnVjdCBuYmRfZGV2aWNlIG5iZF9kZXZbTUFYX05CRF07CiAKIC8qCkBAIC02NDIsNyArNjQwLDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICJuYmQ6IHJlZ2lzdGVyZWQgZGV2aWNlIGF0IG1ham9yICVkXG4iLCBOQkRfTUFKT1IpOwogCWRwcmludGsoREJHX0lOSVQsICJuYmQ6IGRlYnVnZmxhZ3M9MHgleFxuIiwgZGVidWdmbGFncyk7CiAKLQlkZXZmc19ta19kaXIoIm5iZCIpOwogCWZvciAoaSA9IDA7IGkgPCBuYmRzX21heDsgaSsrKSB7CiAJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbmJkX2RldltpXS5kaXNrOwogCQluYmRfZGV2W2ldLmZpbGUgPSBOVUxMOwpAQCAtNjYwLDcgKzY1Nyw2IEBACiAJCWRpc2stPnByaXZhdGVfZGF0YSA9ICZuYmRfZGV2W2ldOwogCQlkaXNrLT5mbGFncyB8PSBHRU5IRF9GTF9TVVBQUkVTU19QQVJUSVRJT05fSU5GTzsKIAkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJuYmQlZCIsIGkpOwotCQlzcHJpbnRmKGRpc2stPmRldmZzX25hbWUsICJuYmQvJWQiLCBpKTsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDB4N2ZmZmZjMDBVTEwgPDwgMSk7IC8qIDIgVEIgKi8KIAkJYWRkX2Rpc2soZGlzayk7CiAJfQpAQCAtNjg2LDcgKzY4Miw2IEBACiAJCQlwdXRfZGlzayhkaXNrKTsKIAkJfQogCX0KLQlkZXZmc19yZW1vdmUoIm5iZCIpOwogCXVucmVnaXN0ZXJfYmxrZGV2KE5CRF9NQUpPUiwgIm5iZCIpOwogCXByaW50ayhLRVJOX0lORk8gIm5iZDogdW5yZWdpc3RlcmVkIGRldmljZSBhdCBtYWpvciAlZFxuIiwgTkJEX01BSk9SKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BhcmlkZS5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGFyaWRlLmMKaW5kZXggY2U5NGFhMS4uNGIyNThmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGFyaWRlLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGFyaWRlLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNkZWZpbmUgUElfVkVSU0lPTiAgICAgICIxLjA2IgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwppbmRleCA4NTJiNTY0Li4xYTlkZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKQEAgLTcwNyw3ICs3MDcsNyBAQAogCQkJaWYgKHBpX2luaXQocGYtPnBpLCAwLCBjb25mW0RfUFJUXSwgY29uZltEX01PRF0sCiAJCQkJICAgIGNvbmZbRF9VTkldLCBjb25mW0RfUFJPXSwgY29uZltEX0RMWV0sCiAJCQkJICAgIHBmX3NjcmF0Y2gsIFBJX1BGLCB2ZXJib3NlLCBwZi0+bmFtZSkpIHsKLQkJCQlpZiAoIXBmX3Byb2JlKHBmKSAmJiBwZi0+ZGlzaykgeworCQkJCWlmIChwZi0+ZGlzayAmJiAhcGZfcHJvYmUocGYpKSB7CiAJCQkJCXBmLT5wcmVzZW50ID0gMTsKIAkJCQkJaysrOwogCQkJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMKaW5kZXggNzliODY4Mi4uMTNmOTk4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZy5jCkBAIC0xNTYsNyArMTU2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tdGlvLmg+CkBAIC02NzQsMjUgKzY3MywxNSBAQAogCQllcnIgPSBQVFJfRVJSKHBnX2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KLQlkZXZmc19ta19kaXIoInBnIik7CiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBHX1VOSVRTOyB1bml0KyspIHsKIAkJc3RydWN0IHBnICpkZXYgPSAmZGV2aWNlc1t1bml0XTsKLQkJaWYgKGRldi0+cHJlc2VudCkgeworCQlpZiAoZGV2LT5wcmVzZW50KQogCQkJY2xhc3NfZGV2aWNlX2NyZWF0ZShwZ19jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLAogCQkJCQlOVUxMLCAicGcldSIsIHVuaXQpOwotCQkJZXJyID0gZGV2ZnNfbWtfY2RldihNS0RFVihtYWpvciwgdW5pdCksCi0JCQkJICAgICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLCAicGcvJXUiLAotCQkJCSAgICAgIHVuaXQpOwotCQkJaWYgKGVycikgCi0JCQkJZ290byBvdXRfY2xhc3M7Ci0JCX0KIAl9CiAJZXJyID0gMDsKIAlnb3RvIG91dDsKIAotb3V0X2NsYXNzOgotCWNsYXNzX2RldmljZV9kZXN0cm95KHBnX2NsYXNzLCBNS0RFVihtYWpvciwgdW5pdCkpOwotCWNsYXNzX2Rlc3Ryb3kocGdfY2xhc3MpOwogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgInBnIik7CiBvdXQ6CkBAIC03MDUsMTMgKzY5NCwxMCBAQAogCiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBHX1VOSVRTOyB1bml0KyspIHsKIAkJc3RydWN0IHBnICpkZXYgPSAmZGV2aWNlc1t1bml0XTsKLQkJaWYgKGRldi0+cHJlc2VudCkgeworCQlpZiAoZGV2LT5wcmVzZW50KQogCQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kocGdfY2xhc3MsIE1LREVWKG1ham9yLCB1bml0KSk7Ci0JCQlkZXZmc19yZW1vdmUoInBnLyV1IiwgdW5pdCk7Ci0JCX0KIAl9CiAJY2xhc3NfZGVzdHJveShwZ19jbGFzcyk7Ci0JZGV2ZnNfcmVtb3ZlKCJwZyIpOwogCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCBuYW1lKTsKIAogCWZvciAodW5pdCA9IDA7IHVuaXQgPCBQR19VTklUUzsgdW5pdCsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYwppbmRleCBkMjAxM2QzLi4zNWZiMjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMKQEAgLTE0MSw3ICsxNDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KQEAgLTk3MSwzMiArOTcwLDE1IEBACiAJCWdvdG8gb3V0X2NocmRldjsKIAl9CiAKLQlkZXZmc19ta19kaXIoInB0Iik7CiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBUX1VOSVRTOyB1bml0KyspCiAJCWlmIChwdFt1bml0XS5wcmVzZW50KSB7CiAJCQljbGFzc19kZXZpY2VfY3JlYXRlKHB0X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgdW5pdCksCiAJCQkJCU5VTEwsICJwdCVkIiwgdW5pdCk7Ci0JCQllcnIgPSBkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCB1bml0KSwKLQkJCQkgICAgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQkJICAgICAgInB0LyVkIiwgdW5pdCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kocHRfY2xhc3MsIE1LREVWKG1ham9yLCB1bml0KSk7Ci0JCQkJZ290byBvdXRfY2xhc3M7Ci0JCQl9CiAJCQljbGFzc19kZXZpY2VfY3JlYXRlKHB0X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksCiAJCQkJCU5VTEwsICJwdCVkbiIsIHVuaXQpOwotCQkJZXJyID0gZGV2ZnNfbWtfY2RldihNS0RFVihtYWpvciwgdW5pdCArIDEyOCksCi0JCQkJICAgICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJCSAgICAgICJwdC8lZG4iLCB1bml0KTsKLQkJCWlmIChlcnIpIHsKLQkJCQljbGFzc19kZXZpY2VfZGVzdHJveShwdF9jbGFzcywgTUtERVYobWFqb3IsIHVuaXQgKyAxMjgpKTsKLQkJCQlnb3RvIG91dF9jbGFzczsKLQkJCX0KIAkJfQogCWdvdG8gb3V0OwogCi1vdXRfY2xhc3M6Ci0JY2xhc3NfZGVzdHJveShwdF9jbGFzcyk7CiBvdXRfY2hyZGV2OgogCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCAicHQiKTsKIG91dDoKQEAgLTEwMDksMTIgKzk5MSw5IEBACiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBUX1VOSVRTOyB1bml0KyspCiAJCWlmIChwdFt1bml0XS5wcmVzZW50KSB7CiAJCQljbGFzc19kZXZpY2VfZGVzdHJveShwdF9jbGFzcywgTUtERVYobWFqb3IsIHVuaXQpKTsKLQkJCWRldmZzX3JlbW92ZSgicHQvJWQiLCB1bml0KTsKIAkJCWNsYXNzX2RldmljZV9kZXN0cm95KHB0X2NsYXNzLCBNS0RFVihtYWpvciwgdW5pdCArIDEyOCkpOwotCQkJZGV2ZnNfcmVtb3ZlKCJwdC8lZG4iLCB1bml0KTsKIAkJfQogCWNsYXNzX2Rlc3Ryb3kocHRfY2xhc3MpOwotCWRldmZzX3JlbW92ZSgicHQiKTsKIAl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgbmFtZSk7CiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBUX1VOSVRTOyB1bml0KyspCiAJCWlmIChwdFt1bml0XS5wcmVzZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCBhMDRmNjA2Li5iZGUyYzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtNDQsNyArNDQsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9wa3RjZHZkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI2MTIsNyArMjYxMSw2IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcGt0X21pc2MgPSB7CiAJLm1pbm9yIAkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCiAJLm5hbWUgIAkJPSAicGt0Y2R2ZCIsCi0JLmRldmZzX25hbWUgCT0gInBrdGNkdmQvY29udHJvbCIsCiAJLmZvcHMgIAkJPSAmcGt0X2N0bF9mb3BzCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzMmVzZGkuYyBiL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCmluZGV4IGJlYTc1ZjIuLjU1Mzc5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMyZXNkaS5jCkBAIC0yOSw3ICsyOSw2IEBACiAKICNkZWZpbmUgREVWSUNFX05BTUUgIlBTLzIgRVNESSIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CkBAIC0zNDEsOSArMzQwLDkgQEAKIAkvKiB0cnkgdG8gZ3JhYiBJUlEsIGFuZCB0cnkgdG8gZ3JhYiBhIHNsb3cgSVJRIGlmIGl0IGZhaWxzLCBzbyB3ZSBjYW4KIAkgICBzaGFyZSB3aXRoIHRoZSBTQ1NJIGRyaXZlciAqLwogCWlmIChyZXF1ZXN0X2lycShQUzJFU0RJX0lSUSwgcHMyZXNkaV9pbnRlcnJ1cHRfaGFuZGxlciwKLQkJICBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwgIlBTLzIgRVNESSIsICZwczJlc2RpX2dlbmRpc2spCisJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAiUFMvMiBFU0RJIiwgJnBzMmVzZGlfZ2VuZGlzaykKIAkgICAgJiYgcmVxdWVzdF9pcnEoUFMyRVNESV9JUlEsIHBzMmVzZGlfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkgICBTQV9TSElSUSwgIlBTLzIgRVNESSIsICZwczJlc2RpX2dlbmRpc2spCisJCQkgICBJUlFGX1NIQVJFRCwgIlBTLzIgRVNESSIsICZwczJlc2RpX2dlbmRpc2spCiAJICAgICkgewogCQlwcmludGsoIiVzOiBVbmFibGUgdG8gZ2V0IElSUSAlZFxuIiwgREVWSUNFX05BTUUsIFBTMkVTRElfSVJRKTsKIAkJZXJyb3IgPSAtRUJVU1k7CkBAIC00MjEsNyArNDIwLDYgQEAKIAkJZGlzay0+bWFqb3IgPSBQUzJFU0RJX01BSk9SOwogCQlkaXNrLT5maXJzdF9taW5vciA9IGk8PDY7CiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAiZWQlYyIsICdhJytpKTsKLQkJc3ByaW50ZihkaXNrLT5kZXZmc19uYW1lLCAiZWQvdGFyZ2V0JWQiLCBpKTsKIAkJZGlzay0+Zm9wcyA9ICZwczJlc2RpX2ZvcHM7CiAJCXBzMmVzZGlfZ2VuZGlza1tpXSA9IGRpc2s7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yZC5jIGIvZHJpdmVycy9ibG9jay9yZC5jCmluZGV4IDk0MGJmZDcuLjNjZjI0NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JkLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqIGFuZCBzZXQgYmxrX3NpemUgZm9yIC1FTk9TUEMsICAgICBXZXJuZXIgRmluayA8d2VybmVyQHN1c2UuZGU+LCBBcHIgJzk5CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC01MCw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CkBAIC0xOTEsNyArMTg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZGlza19hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZGlza19hb3BzID0gewogCS5yZWFkcGFnZQk9IHJhbWRpc2tfcmVhZHBhZ2UsCiAJLnByZXBhcmVfd3JpdGUJPSByYW1kaXNrX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IHJhbWRpc2tfY29tbWl0X3dyaXRlLApAQCAtNDEyLDcgKzQxMCw2IEBACiAJCXB1dF9kaXNrKHJkX2Rpc2tzW2ldKTsKIAkJYmxrX2NsZWFudXBfcXVldWUocmRfcXVldWVbaV0pOwogCX0KLQlkZXZmc19yZW1vdmUoInJkIik7CiAJdW5yZWdpc3Rlcl9ibGtkZXYoUkFNRElTS19NQUpPUiwgInJhbWRpc2siKTsKIH0KIApAQCAtNDQyLDggKzQzOSw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRldmZzX21rX2RpcigicmQiKTsKLQogCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ7IGkrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHJkX2Rpc2tzW2ldOwogCkBAIC00NjEsNyArNDU2LDYgQEAKIAkJZGlzay0+cXVldWUgPSByZF9xdWV1ZVtpXTsKIAkJZGlzay0+ZmxhZ3MgfD0gR0VOSERfRkxfU1VQUFJFU1NfUEFSVElUSU9OX0lORk87CiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAicmFtJWQiLCBpKTsKLQkJc3ByaW50ZihkaXNrLT5kZXZmc19uYW1lLCAicmQvJWQiLCBpKTsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIHJkX3NpemUgKiAyKTsKIAkJYWRkX2Rpc2socmRfZGlza3NbaV0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwppbmRleCAwMWYwNDJmLi5jYzQyZTc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltMy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwpAQCAtMTYsNyArMTYsNiBAQAogICogaGFuZGxlIEdDUiBkaXNrcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjUsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMjUyLDggKzI1MCw2IEBACiBzdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyBpbnQgZmxvcHB5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7CiBzdGF0aWMgaW50IGZsb3BweV9yZXZhbGlkYXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKLXN0YXRpYyBpbnQgc3dpbTNfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnN3aW1zKTsKLWludCBzd2ltM19pbml0KHZvaWQpOwogCiAjaWZuZGVmIENPTkZJR19QTUFDX01FRElBQkFZCiAjZGVmaW5lIGNoZWNrX21lZGlhX2JheSh3aGljaCwgd2hhdCkJMQpAQCAtMTAxMywxMTcgKzEwMDksNjMgQEAKIAkucmV2YWxpZGF0ZV9kaXNrPSBmbG9wcHlfcmV2YWxpZGF0ZSwKIH07CiAKLWludCBzd2ltM19pbml0KHZvaWQpCitzdGF0aWMgaW50IHN3aW0zX2FkZF9kZXZpY2Uoc3RydWN0IG1hY2lvX2RldiAqbWRldiwgaW50IGluZGV4KQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3dpbTsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQlpbnQgaTsKLQotCWRldmZzX21rX2RpcigiZmxvcHB5Iik7Ci0KLQlzd2ltID0gZmluZF9kZXZpY2VzKCJmbG9wcHkiKTsKLQl3aGlsZSAoc3dpbSAmJiAoZmxvcHB5X2NvdW50IDwgTUFYX0ZMT1BQSUVTKSkKLQl7Ci0JCXN3aW0zX2FkZF9kZXZpY2Uoc3dpbSk7Ci0JCXN3aW0gPSBzd2ltLT5uZXh0OwotCX0KLQotCXN3aW0gPSBmaW5kX2RldmljZXMoInN3aW0zIik7Ci0Jd2hpbGUgKHN3aW0gJiYgKGZsb3BweV9jb3VudCA8IE1BWF9GTE9QUElFUykpCi0JewotCQlzd2ltM19hZGRfZGV2aWNlKHN3aW0pOwotCQlzd2ltID0gc3dpbS0+bmV4dDsKLQl9Ci0KLQlpZiAoIWZsb3BweV9jb3VudCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmxvcHB5X2NvdW50OyBpKyspIHsKLQkJZGlza3NbaV0gPSBhbGxvY19kaXNrKDEpOwotCQlpZiAoIWRpc2tzW2ldKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3dpbTNfcXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmc3dpbTNfbG9jayk7Ci0JaWYgKCFzd2ltM19xdWV1ZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9xdWV1ZTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmxvcHB5X2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkaXNrc1tpXTsKLQkJZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7Ci0JCWRpc2stPmZpcnN0X21pbm9yID0gaTsKLQkJZGlzay0+Zm9wcyA9ICZmbG9wcHlfZm9wczsKLQkJZGlzay0+cHJpdmF0ZV9kYXRhID0gJmZsb3BweV9zdGF0ZXNbaV07Ci0JCWRpc2stPnF1ZXVlID0gc3dpbTNfcXVldWU7Ci0JCWRpc2stPmZsYWdzIHw9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgaSk7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgImZsb3BweS8lZCIsIGkpOwotCQlzZXRfY2FwYWNpdHkoZGlzaywgMjg4MCk7Ci0JCWFkZF9kaXNrKGRpc2spOwotCX0KLQlyZXR1cm4gMDsKLQotb3V0X3F1ZXVlOgotCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7Ci1vdXQ6Ci0Jd2hpbGUgKGktLSkKLQkJcHV0X2Rpc2soZGlza3NbaV0pOwotCS8qIHNob3VsZG4ndCB3ZSBkbyBzb21ldGhpbmcgd2l0aCByZXN1bHRzIG9mIHN3aW1fYWRkX2RldmljZSgpPyAqLwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc3dpbTNfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnN3aW0pCi17CisJc3RydWN0IGRldmljZV9ub2RlICpzd2ltID0gbWRldi0+b2ZkZXYubm9kZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lZGlhYmF5OwotCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gJmZsb3BweV9zdGF0ZXNbZmxvcHB5X2NvdW50XTsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzX3JlZywgcmVzX2RtYTsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9ICZmbG9wcHlfc3RhdGVzW2luZGV4XTsKKwlpbnQgcmMgPSAtRUJVU1k7CiAKLQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShzd2ltLCAwLCAmcmVzX3JlZykgfHwKLQkgICAgb2ZfYWRkcmVzc190b19yZXNvdXJjZShzd2ltLCAxLCAmcmVzX2RtYSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzd2ltMzogQ2FuJ3QgZ2V0IGFkZHJlc3Nlc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIENoZWNrICYgUmVxdWVzdCByZXNvdXJjZXMgKi8KKwlpZiAobWFjaW9fcmVzb3VyY2VfY291bnQobWRldikgPCAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlmZCVkOiBubyBhZGRyZXNzIGZvciAlc1xuIiwKKwkJICAgICAgIGluZGV4LCBzd2ltLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOWElPOwogCX0KLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHJlc19yZWcuc3RhcnQsIHJlc19yZWcuZW5kIC0gcmVzX3JlZy5zdGFydCArIDEsCi0JCQkgICAgICAgIiAocmVnKSIpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzd2ltMzogQ2FuJ3QgcmVxdWVzdCByZWdpc3RlciBzcGFjZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChtYWNpb19pcnFfY291bnQobWRldikgPCAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZkJWQ6IG5vIGludHJzIGZvciBkZXZpY2UgJXNcbiIsCisJCQlpbmRleCwgc3dpbS0+ZnVsbF9uYW1lKTsKIAl9Ci0JaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihyZXNfZG1hLnN0YXJ0LCByZXNfZG1hLmVuZCAtIHJlc19kbWEuc3RhcnQgKyAxLAotCQkJICAgICAgICIgKGRtYSkiKSA9PSBOVUxMKSB7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXNfcmVnLnN0YXJ0LAotCQkJCSAgIHJlc19yZWcuZW5kIC0gcmVzX3JlZy5zdGFydCArIDEpOwotCQlwcmludGsoS0VSTl9FUlIgInN3aW0zOiBDYW4ndCByZXF1ZXN0IERNQSBzcGFjZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChtYWNpb19yZXF1ZXN0X3Jlc291cmNlKG1kZXYsIDAsICJzd2ltMyAobW1pbykiKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZkJWQ6IGNhbid0IHJlcXVlc3QgbW1pbyByZXNvdXJjZSBmb3IgJXNcbiIsCisJCSAgICAgICBpbmRleCwgc3dpbS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CisJaWYgKG1hY2lvX3JlcXVlc3RfcmVzb3VyY2UobWRldiwgMSwgInN3aW0zIChkbWEpIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmZCVkOiBjYW4ndCByZXF1ZXN0IGRtYSByZXNvdXJjZSBmb3IgJXNcbiIsCisJCSAgICAgICBpbmRleCwgc3dpbS0+ZnVsbF9uYW1lKTsKKwkJbWFjaW9fcmVsZWFzZV9yZXNvdXJjZShtZGV2LCAwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYsIGZzKTsKIAotCWlmIChzd2ltLT5uX2ludHJzIDwgMikgewotCQlwcmludGsoS0VSTl9JTkZPICJzd2ltMzogZXhwZWN0aW5nIDIgaW50cnMgKG5faW50cnM6JWQpXG4iLAotCQkgICAgICAgc3dpbS0+bl9pbnRycyk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXNfcmVnLnN0YXJ0LAotCQkJCSAgIHJlc19yZWcuZW5kIC0gcmVzX3JlZy5zdGFydCArIDEpOwotCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzX2RtYS5zdGFydCwKLQkJCQkgICByZXNfZG1hLmVuZCAtIHJlc19kbWEuc3RhcnQgKyAxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbWVkaWFiYXkgPSAoc3RyY2FzZWNtcChzd2ltLT5wYXJlbnQtPnR5cGUsICJtZWRpYS1iYXkiKSA9PSAwKSA/IHN3aW0tPnBhcmVudCA6IE5VTEw7CisJbWVkaWFiYXkgPSAoc3RyY2FzZWNtcChzd2ltLT5wYXJlbnQtPnR5cGUsICJtZWRpYS1iYXkiKSA9PSAwKSA/CisJCXN3aW0tPnBhcmVudCA6IE5VTEw7CiAJaWYgKG1lZGlhYmF5ID09IE5VTEwpCiAJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1NXSU0zX0VOQUJMRSwgc3dpbSwgMCwgMSk7CiAJCiAJbWVtc2V0KGZzLCAwLCBzaXplb2YoKmZzKSk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzLT5sb2NrKTsKIAlmcy0+c3RhdGUgPSBpZGxlOwotCWZzLT5zd2ltMyA9IChzdHJ1Y3Qgc3dpbTMgX19pb21lbSAqKWlvcmVtYXAocmVzX3JlZy5zdGFydCwgMHgyMDApOwotCWZzLT5kbWEgPSAoc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqKWlvcmVtYXAocmVzX2RtYS5zdGFydCwgMHgyMDApOwotCWZzLT5zd2ltM19pbnRyID0gc3dpbS0+aW50cnNbMF0ubGluZTsKLQlmcy0+ZG1hX2ludHIgPSBzd2ltLT5pbnRyc1sxXS5saW5lOworCWZzLT5zd2ltMyA9IChzdHJ1Y3Qgc3dpbTMgX19pb21lbSAqKQorCQlpb3JlbWFwKG1hY2lvX3Jlc291cmNlX3N0YXJ0KG1kZXYsIDApLCAweDIwMCk7CisJaWYgKGZzLT5zd2ltMyA9PSBOVUxMKSB7CisJCXByaW50aygiZmQlZDogY291bGRuJ3QgbWFwIHJlZ2lzdGVycyBmb3IgJXNcbiIsCisJCSAgICAgICBpbmRleCwgc3dpbS0+ZnVsbF9uYW1lKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZWxlYXNlOworCX0KKwlmcy0+ZG1hID0gKHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKikKKwkJaW9yZW1hcChtYWNpb19yZXNvdXJjZV9zdGFydChtZGV2LCAxKSwgMHgyMDApOworCWlmIChmcy0+ZG1hID09IE5VTEwpIHsKKwkJcHJpbnRrKCJmZCVkOiBjb3VsZG4ndCBtYXAgRE1BIGZvciAlc1xuIiwKKwkJICAgICAgIGluZGV4LCBzd2ltLT5mdWxsX25hbWUpOworCQlpb3VubWFwKGZzLT5zd2ltMyk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisJZnMtPnN3aW0zX2ludHIgPSBtYWNpb19pcnEobWRldiwgMCk7CisJZnMtPmRtYV9pbnRyID0gbWFjaW9faXJxKG1kZXYsIDEpOzsKIAlmcy0+Y3VyX2N5bCA9IC0xOwogCWZzLT5jdXJfc2VjdG9yID0gLTE7CiAJZnMtPnNlY3BlcmN5bCA9IDM2OwpAQCAtMTEzNywxNSArMTA3OSwxNiBAQAogCXN0X2xlMTYoJmZzLT5kbWFfY21kWzFdLmNvbW1hbmQsIERCRE1BX1NUT1ApOwogCiAJaWYgKHJlcXVlc3RfaXJxKGZzLT5zd2ltM19pbnRyLCBzd2ltM19pbnRlcnJ1cHQsIDAsICJTV0lNMyIsIGZzKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGdldCBpcnEgJWQgZm9yIFNXSU0zXG4iLCBmcy0+c3dpbTNfaW50cik7CisJCXByaW50ayhLRVJOX0VSUiAiZmQlZDogY291bGRuJ3QgcmVxdWVzdCBpcnEgJWQgZm9yICVzXG4iLAorCQkgICAgICAgaW5kZXgsIGZzLT5zd2ltM19pbnRyLCBzd2ltLT5mdWxsX25hbWUpOwogCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9TV0lNM19FTkFCTEUsIHN3aW0sIDAsIDApOworCQlnb3RvIG91dF91bm1hcDsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAvKgogCWlmIChyZXF1ZXN0X2lycShmcy0+ZG1hX2ludHIsIGZkX2RtYV9pbnRlcnJ1cHQsIDAsICJTV0lNMy1kbWEiLCBmcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBnZXQgaXJxICVkIGZvciBTV0lNMyBETUEiLAogCQkgICAgICAgZnMtPmRtYV9pbnRyKTsKLQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfU1dJTTNfRU5BQkxFLCBzd2ltLCAwLCAwKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAqLwpAQCAtMTE1NSw4ICsxMDk4LDkwIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiZmQlZDogU1dJTTMgZmxvcHB5IGNvbnRyb2xsZXIgJXNcbiIsIGZsb3BweV9jb3VudCwKIAkJbWVkaWFiYXkgPyAiaW4gbWVkaWEgYmF5IiA6ICIiKTsKIAotCWZsb3BweV9jb3VudCsrOwotCQorCXJldHVybiAwOworCisgb3V0X3VubWFwOgorCWlvdW5tYXAoZnMtPmRtYSk7CisJaW91bm1hcChmcy0+c3dpbTMpOworCisgb3V0X3JlbGVhc2U6CisJbWFjaW9fcmVsZWFzZV9yZXNvdXJjZShtZGV2LCAwKTsKKwltYWNpb19yZWxlYXNlX3Jlc291cmNlKG1kZXYsIDEpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltM19hdHRhY2goc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJaW50IGksIHJjOworCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCisJLyogQWRkIHRoZSBkcml2ZSAqLworCXJjID0gc3dpbTNfYWRkX2RldmljZShtZGV2LCBmbG9wcHlfY291bnQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogTm93IGNyZWF0ZSB0aGUgcXVldWUgaWYgbm90IHRoZXJlIHlldCAqLworCWlmIChzd2ltM19xdWV1ZSA9PSBOVUxMKSB7CisJCS8qIElmIHdlIGZhaWxlZCwgdGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYXMgdGhlIGRyaXZlciBpcyBzdGlsbAorCQkgKiB0b28gZHVtYiB0byByZW1vdmUgdGhlIGRldmljZSwganVzdCBiYWlsIG91dAorCQkgKi8KKwkJaWYgKHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpKQorCQkJcmV0dXJuIDA7CisJCXN3aW0zX3F1ZXVlID0gYmxrX2luaXRfcXVldWUoZG9fZmRfcmVxdWVzdCwgJnN3aW0zX2xvY2spOworCQlpZiAoc3dpbTNfcXVldWUgPT0gTlVMTCkgeworCQkJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogTm93IHJlZ2lzdGVyIHRoYXQgZGlzay4gU2FtZSBjb21tZW50IGFib3V0IGZhaWx1cmUgaGFuZGxpbmcgKi8KKwlpID0gZmxvcHB5X2NvdW50Kys7CisJZGlzayA9IGRpc2tzW2ldID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoZGlzayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWRpc2stPm1ham9yID0gRkxPUFBZX01BSk9SOworCWRpc2stPmZpcnN0X21pbm9yID0gaTsKKwlkaXNrLT5mb3BzID0gJmZsb3BweV9mb3BzOworCWRpc2stPnByaXZhdGVfZGF0YSA9ICZmbG9wcHlfc3RhdGVzW2ldOworCWRpc2stPnF1ZXVlID0gc3dpbTNfcXVldWU7CisJZGlzay0+ZmxhZ3MgfD0gR0VOSERfRkxfUkVNT1ZBQkxFOworCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGkpOworCXNldF9jYXBhY2l0eShkaXNrLCAyODgwKTsKKwlhZGRfZGlzayhkaXNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzd2ltM19tYXRjaFtdID0KK3sKKwl7CisJLm5hbWUJCT0gInN3aW0zIiwKKwl9LAorCXsKKwkuY29tcGF0aWJsZQk9ICJvaGFyZS1zd2ltMyIKKwl9LAorCXsKKwkuY29tcGF0aWJsZQk9ICJzd2ltMyIKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgc3dpbTNfZHJpdmVyID0KK3sKKwkubmFtZSAJCT0gInN3aW0zIiwKKwkubWF0Y2hfdGFibGUJPSBzd2ltM19tYXRjaCwKKwkucHJvYmUJCT0gc3dpbTNfYXR0YWNoLAorI2lmIDAKKwkuc3VzcGVuZAk9IHN3aW0zX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzd2ltM19yZXN1bWUsCisjZW5kaWYKK307CisKKworaW50IHN3aW0zX2luaXQodm9pZCkKK3sKKwltYWNpb19yZWdpc3Rlcl9kcml2ZXIoJnN3aW0zX2RyaXZlcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3g4LmMgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCmluZGV4IDJhZTA4YjM0Li5jNmJlZWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zeDguYworKysgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0xNTEwLDcgKzE1MDksNiBAQAogCQlwb3J0LT5kaXNrID0gZGlzazsKIAkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsIERSVl9OQU1FICIvJXUiLAogCQkJKHVuc2lnbmVkIGludCkgKGhvc3QtPmlkICogQ0FSTV9NQVhfUE9SVFMpICsgaSk7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgRFJWX05BTUUgIi8ldV8ldSIsIGhvc3QtPmlkLCBpKTsKIAkJZGlzay0+bWFqb3IgPSBob3N0LT5tYWpvcjsKIAkJZGlzay0+Zmlyc3RfbWlub3IgPSBpICogQ0FSTV9NSU5PUlNfUEVSX01BSk9SOwogCQlkaXNrLT5mb3BzID0gJmNhcm1fYmRfb3BzOwpAQCAtMTY3MiwxNSArMTY3MCwxMyBAQAogCWlmIChob3N0LT5mbGFncyAmIEZMX0RZTl9NQUpPUikKIAkJaG9zdC0+bWFqb3IgPSByYzsKIAotCWRldmZzX21rX2RpcihEUlZfTkFNRSk7Ci0KIAlyYyA9IGNhcm1faW5pdF9kaXNrcyhob3N0KTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dF9ibGtkZXZfZGlza3M7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAotCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBjYXJtX2ludGVycnVwdCwgU0FfU0hJUlEsIERSVl9OQU1FLCBob3N0KTsKKwlyYyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2FybV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgaG9zdCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiKCVzKTogaXJxIGFsbG9jIGZhaWx1cmVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CkBAIC0xNjk0LDkgKzE2OTAsMTAgQEAKIAlEUFJJTlRLKCJ3YWl0aW5nIGZvciBwcm9iZV9jb21wXG4iKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZob3N0LT5wcm9iZV9jb21wKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBwY2kgJXMsIHBvcnRzICVkLCBpbyAlbHgsIGlycSAldSwgbWFqb3IgJWRcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBjaSAlcywgcG9ydHMgJWQsIGlvICVsbHgsIGlycSAldSwgbWFqb3IgJWRcbiIsCiAJICAgICAgIGhvc3QtPm5hbWUsIHBjaV9uYW1lKHBkZXYpLCAoaW50KSBDQVJNX01BWF9QT1JUUywKLQkgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsIGhvc3QtPm1ham9yKTsKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCSAgIHBkZXYtPmlycSwgaG9zdC0+bWFqb3IpOwogCiAJY2FybV9ob3N0X2lkKys7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwpAQCAtMTczOCw3ICsxNzM1LDYgQEAKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgaG9zdCk7CiAJY2FybV9mcmVlX2Rpc2tzKGhvc3QpOwotCWRldmZzX3JlbW92ZShEUlZfTkFNRSk7CiAJdW5yZWdpc3Rlcl9ibGtkZXYoaG9zdC0+bWFqb3IsIGhvc3QtPm5hbWUpOwogCWlmIChob3N0LT5tYWpvciA9PSAxNjApCiAJCWNsZWFyX2JpdCgwLCAmY2FybV9tYWpvcl9hbGxvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggNjBlOWE5NC4uZDYyYjQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMjQsMTIgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiX3VzdWFsLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAidWIiCi0jZGVmaW5lIERFVkZTX05BTUUgRFJWX05BTUUKIAogI2RlZmluZSBVQl9NQUpPUiAxODAKIApAQCAtMjI5MSw3ICsyMjg5LDYgQEAKIAkJZ290byBlcnJfZGlza2FsbG9jOwogCiAJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsIERSVl9OQU1FICIlYyIsIGx1bi0+aWQgKyAnYScpOwotCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgREVWRlNfTkFNRSAiLyVjIiwgbHVuLT5pZCArICdhJyk7CiAJZGlzay0+bWFqb3IgPSBVQl9NQUpPUjsKIAlkaXNrLT5maXJzdF9taW5vciA9IGx1bi0+aWQgKiBVQl9QQVJUU19QRVJfTFVOOwogCWRpc2stPmZvcHMgPSAmdWJfYmRfZm9wczsKQEAgLTI0NDUsNyArMjQ0Miw2IEBACiAKIAlpZiAoKHJjID0gcmVnaXN0ZXJfYmxrZGV2KFVCX01BSk9SLCBEUlZfTkFNRSkpICE9IDApCiAJCWdvdG8gZXJyX3JlZ2Jsa2RldjsKLQlkZXZmc19ta19kaXIoREVWRlNfTkFNRSk7CiAKIAlpZiAoKHJjID0gdXNiX3JlZ2lzdGVyKCZ1Yl9kcml2ZXIpKSAhPSAwKQogCQlnb3RvIGVycl9yZWdpc3RlcjsKQEAgLTI0NTQsNyArMjQ1MCw2IEBACiAJcmV0dXJuIDA7CiAKIGVycl9yZWdpc3RlcjoKLQlkZXZmc19yZW1vdmUoREVWRlNfTkFNRSk7CiAJdW5yZWdpc3Rlcl9ibGtkZXYoVUJfTUFKT1IsIERSVl9OQU1FKTsKIGVycl9yZWdibGtkZXY6CiAJcmV0dXJuIHJjOwpAQCAtMjQ2NCw3ICsyNDU5LDYgQEAKIHsKIAl1c2JfZGVyZWdpc3RlcigmdWJfZHJpdmVyKTsKIAotCWRldmZzX3JlbW92ZShERVZGU19OQU1FKTsKIAl1bnJlZ2lzdGVyX2Jsa2RldihVQl9NQUpPUiwgRFJWX05BTUUpOwogCXVzYl91c3VhbF9jbGVhcl9wcmVzZW50KFVTQl9VU19UWVBFX1VCKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdW1lbS5jIGIvZHJpdmVycy9ibG9jay91bWVtLmMKaW5kZXggZjdkNGM2NS4uNWQ4OTI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91bWVtLmMKKysrIGIvZHJpdmVycy9ibG9jay91bWVtLmMKQEAgLTM1LDcgKzM1LDYgQEAKICAqLwogCiAvLyNkZWZpbmUgREVCVUcgLyogdW5jb21tZW50IGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZvIChwcl9kZWJ1ZykgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CkBAIC0xMDQxLDcgKzEwNDAsNyBAQAogCWNhcmQtPndpbl9zaXplID0gZGF0YTsKIAogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBtbV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAicGNpLXVtZW0iLCBjYXJkKSkgeworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgbW1faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgInBjaS11bWVtIiwgY2FyZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJNTSVkOiBVbmFibGUgdG8gYWxsb2NhdGUgSVJRXG4iLCBjYXJkLT5jYXJkX251bWJlcik7CiAJCXJldCA9IC1FTk9ERVY7CiAKQEAgLTExOTIsNyArMTE5MSw2IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jYXJkczsgaSsrKSB7CiAJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbW1fZ2VuZGlza1tpXTsKIAkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJ1bWVtJWMiLCAnYScraSk7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgInVtZW0vY2FyZCVkIiwgaSk7CiAJCXNwaW5fbG9ja19pbml0KCZjYXJkc1tpXS5sb2NrKTsKIAkJZGlzay0+bWFqb3IgPSBtYWpvcl9ucjsKIAkJZGlzay0+Zmlyc3RfbWlub3IgID0gaSA8PCBNTV9TSElGVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggYjBkZjRmNS4uZWM1YTFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTU5LDcgKzU5LDYgQEAKICAqIG51bWJlcnMgMC0yNTUgd2UgZ2V0IGEgbWF4aW11bSBvZiAzMiBkaXNrcy4KICAqLwogI2RlZmluZSBWSU9EX0dFTkhEX05BTUUJCSJpc2VyaWVzL3ZkIgotI2RlZmluZSBWSU9EX0dFTkhEX0RFVkZTX05BTUUJImlzZXJpZXMvZGlzYyIKIAogI2RlZmluZSBWSU9EX1ZFUlMJCSIxLjY0IgogCkBAIC01MjMsOCArNTIyLDYgQEAKIAllbHNlCiAJCXNucHJpbnRmKGctPmRpc2tfbmFtZSwgc2l6ZW9mKGctPmRpc2tfbmFtZSksCiAJCQkJVklPRF9HRU5IRF9OQU1FICIlYyIsICdhJyArIChkZXZfbm8gJSAyNikpOwotCXNucHJpbnRmKGctPmRldmZzX25hbWUsIHNpemVvZihnLT5kZXZmc19uYW1lKSwKLQkJCSIlcyVkIiwgVklPRF9HRU5IRF9ERVZGU19OQU1FLCBkZXZfbm8pOwogCWctPmZvcHMgPSAmdmlvZGFzZF9mb3BzOwogCWctPnF1ZXVlID0gcTsKIAlnLT5wcml2YXRlX2RhdGEgPSBkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZC5jIGIvZHJpdmVycy9ibG9jay94ZC5jCmluZGV4IGNiY2U3YzUuLmU4MjhlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hkLmMKQEAgLTIxNSw3ICsyMTUsNiBAQAogCQlkaXNrLT5tYWpvciA9IFhUX0RJU0tfTUFKT1I7CiAJCWRpc2stPmZpcnN0X21pbm9yID0gaTw8NjsKIAkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJ4ZCVjIiwgaSsnYScpOwotCQlzcHJpbnRmKGRpc2stPmRldmZzX25hbWUsICJ4ZC90YXJnZXQlZCIsIGkpOwogCQlkaXNrLT5mb3BzID0gJnhkX2ZvcHM7CiAJCWRpc2stPnByaXZhdGVfZGF0YSA9IHA7CiAJCWRpc2stPnF1ZXVlID0geGRfcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3oycmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKaW5kZXggYmI1ZThkNi4uODJkZGJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96MnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svejJyYW0uYwpAQCAtMzU0LDcgKzM1NCw2IEBACiAgICAgejJyYW1fZ2VuZGlzay0+Zmlyc3RfbWlub3IgPSAwOwogICAgIHoycmFtX2dlbmRpc2stPmZvcHMgPSAmejJfZm9wczsKICAgICBzcHJpbnRmKHoycmFtX2dlbmRpc2stPmRpc2tfbmFtZSwgInoycmFtIik7Ci0gICAgc3RyY3B5KHoycmFtX2dlbmRpc2stPmRldmZzX25hbWUsIHoycmFtX2dlbmRpc2stPmRpc2tfbmFtZSk7CiAKICAgICB6MnJhbV9nZW5kaXNrLT5xdWV1ZSA9IHoyX3F1ZXVlOwogICAgIGFkZF9kaXNrKHoycmFtX2dlbmRpc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jCmluZGV4IDNlN2EwNjcuLjZmNjcxNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JjbTIwM3guYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwppbmRleCA4OTQ3Yzg4Li4yM2Y5NjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCA0NzNhMTNiLi44ZWViZjljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNzQwLDYgKzczOSw3IEBACiAKIAloZGV2LT50eXBlID0gSENJX1BDQ0FSRDsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGluZm87CisJU0VUX0hDSURFVl9ERVYoaGRldiwgJmluZm8tPnBfZGV2LT5kZXYpOwogCiAJaGRldi0+b3BlbiAgICAgPSBibHVlY2FyZF9oY2lfb3BlbjsKIAloZGV2LT5jbG9zZSAgICA9IGJsdWVjYXJkX2hjaV9jbG9zZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKaW5kZXggOTQ0Njk2MC4uZTAyMzFkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggYjk0YWMyZi4uZGY3YmIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtMjEsNyArMjEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTU4Myw2ICs1ODIsNyBAQAogCiAJaGRldi0+dHlwZSA9IEhDSV9QQ0NBUkQ7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBpbmZvOworCVNFVF9IQ0lERVZfREVWKGhkZXYsICZpbmZvLT5wX2Rldi0+ZGV2KTsKIAogCWhkZXYtPm9wZW4gICAgID0gYnQzY19oY2lfb3BlbjsKIAloZGV2LT5jbG9zZSAgICA9IGJ0M2NfaGNpX2Nsb3NlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYwppbmRleCA5Y2U0YzkzLi43NDZjY2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYwpAQCAtMjAsNyArMjAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUwMyw2ICs1MDIsNyBAQAogCiAJaGRldi0+dHlwZSA9IEhDSV9QQ0NBUkQ7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBpbmZvOworCVNFVF9IQ0lERVZfREVWKGhkZXYsICZpbmZvLT5wX2Rldi0+ZGV2KTsKIAogCWhkZXYtPm9wZW4gICAgID0gYnR1YXJ0X2hjaV9vcGVuOwogCWhkZXYtPmNsb3NlICAgID0gYnR1YXJ0X2hjaV9jbG9zZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwppbmRleCBlZDhkY2E4Li4wZTk5ZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDg1LDYgKzQ4NCw3IEBACiAKIAloZGV2LT50eXBlID0gSENJX1BDQ0FSRDsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGluZm87CisJU0VUX0hDSURFVl9ERVYoaGRldiwgJmluZm8tPnBfZGV2LT5kZXYpOwogCiAJaGRldi0+b3BlbiAgICAgPSBkdGwxX2hjaV9vcGVuOwogCWhkZXYtPmNsb3NlICAgID0gZHRsMV9oY2lfY2xvc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYwppbmRleCA3YmQ0ZWY5Li5kMGNmYWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY3NwLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCmluZGV4IDQ4MDRkNDcuLmFkNjJhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwppbmRleCA2MTM2NzNiLi4xOTk0MjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwpAQCAtMjMsNyArMjMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwppbmRleCA5MjM4MmU4Li42YTBjMjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCkBAIC0zMSw3ICszMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTIzLDYgKzEyMiw5IEBACiAJLyogUlRYIFRlbGVjb20gYmFzZWQgYWRhcHRlciB3aXRoIGJ1Z2d5IFNDTyBzdXBwb3J0ICovCiAJeyBVU0JfREVWSUNFKDB4MDQwMCwgMHgwODA3KSwgLmRyaXZlcl9pbmZvID0gSENJX0JST0tFTl9JU09DIH0sCiAKKwkvKiBCZWxraW4gRjhUMDEyICovCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHgwMDEyKSwgLmRyaXZlcl9pbmZvID0gSENJX1dST05HX1NDT19NVFUgfSwKKwogCS8qIERpZ2lhbnN3ZXIgZGV2aWNlcyAqLwogCXsgVVNCX0RFVklDRSgweDA4ZmQsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IEhDSV9ESUdJQU5TV0VSIH0sCiAJeyBVU0JfREVWSUNFKDB4MDhmZCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gSENJX0lHTk9SRSB9LApAQCAtMTMwLDYgKzEzMiw5IEBACiAJLyogQ1NSIEJsdWVDb3JlIEJsdWV0b290aCBTbmlmZmVyICovCiAJeyBVU0JfREVWSUNFKDB4MGExMiwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gSENJX1NOSUZGRVIgfSwKIAorCS8qIEZyb250bGluZSBDb21Qcm9iZSBCbHVldG9vdGggU25pZmZlciAqLworCXsgVVNCX0RFVklDRSgweDE2ZDMsIDB4MDAwMiksIC5kcml2ZXJfaW5mbyA9IEhDSV9TTklGRkVSIH0sCisKIAl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTk4NSw2ICs5OTAsOSBAQAogCWlmIChyZXNldCB8fCBpZC0+ZHJpdmVyX2luZm8gJiBIQ0lfUkVTRVQpCiAJCXNldF9iaXQoSENJX1FVSVJLX1JFU0VUX09OX0lOSVQsICZoZGV2LT5xdWlya3MpOwogCisJaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEhDSV9XUk9OR19TQ09fTVRVKQorCQlzZXRfYml0KEhDSV9RVUlSS19GSVhVUF9CVUZGRVJfU0laRSwgJmhkZXYtPnF1aXJrcyk7CisKIAlpZiAoaWQtPmRyaXZlcl9pbmZvICYgSENJX1NOSUZGRVIpIHsKIAkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA+IDB4OTk3KQogCQkJc2V0X2JpdChIQ0lfUVVJUktfUkFXX0RFVklDRSwgJmhkZXYtPnF1aXJrcyk7CkBAIC0xMDQzLDEwICsxMDUxLDgxIEBACiAJaGNpX2ZyZWVfZGV2KGhkZXYpOwogfQogCitzdGF0aWMgaW50IGhjaV91c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGhjaV91c2IgKmh1c2IgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBsaXN0X2hlYWQga2lsbGVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlpZiAoIWh1c2IgfHwgaW50ZiA9PSBodXNiLT5pc29jX2lmYWNlKQorCQlyZXR1cm4gMDsKKworCWhjaV9zdXNwZW5kX2RldihodXNiLT5oZGV2KTsKKworCUlOSVRfTElTVF9IRUFEKCZraWxsZWQpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzdHJ1Y3QgX3VyYl9xdWV1ZSAqcSA9ICZodXNiLT5wZW5kaW5nX3FbaV07CisJCXN0cnVjdCBfdXJiICpfdXJiLCAqX3RtcDsKKworCQl3aGlsZSAoKF91cmIgPSBfdXJiX2RlcXVldWUocSkpKSB7CisJCQkvKiByZXNldCBxdWV1ZSBzaW5jZSBfdXJiX2RlcXVldWUgc2V0cyBpdCB0byBOVUxMICovCisJCQlfdXJiLT5xdWV1ZSA9IHE7CisJCQl1c2Jfa2lsbF91cmIoJl91cmItPnVyYik7CisJCQlsaXN0X2FkZCgmX3VyYi0+bGlzdCwgJmtpbGxlZCk7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShfdXJiLCBfdG1wLCAma2lsbGVkLCBsaXN0KSB7CisJCQlsaXN0X21vdmVfdGFpbCgmX3VyYi0+bGlzdCwgJnEtPmhlYWQpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhjaV91c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBoY2lfdXNiICpodXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpLCBlcnIgPSAwOworCisJaWYgKCFodXNiIHx8IGludGYgPT0gaHVzYi0+aXNvY19pZmFjZSkKKwkJcmV0dXJuIDA7CisJCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzdHJ1Y3QgX3VyYl9xdWV1ZSAqcSA9ICZodXNiLT5wZW5kaW5nX3FbaV07CisJCXN0cnVjdCBfdXJiICpfdXJiOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShfdXJiLCAmcS0+aGVhZCwgbGlzdCkgeworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIoJl91cmItPnVyYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwloY2lfcmVzdW1lX2RldihodXNiLT5oZGV2KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGNpX3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImhjaV91c2IiLAogCS5wcm9iZQkJPSBoY2lfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gaGNpX3VzYl9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gaGNpX3VzYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gaGNpX3VzYl9yZXN1bWUsCiAJLmlkX3RhYmxlCT0gYmx1ZXRvb3RoX2lkcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuaAppbmRleCAzNzEwMGE2Li45NjNmYzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmgKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5oCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIEhDSV9TTklGRkVSCQkweDEwCiAjZGVmaW5lIEhDSV9CQ005MjAzNQkJMHgyMAogI2RlZmluZSBIQ0lfQlJPS0VOX0lTT0MJCTB4NDAKKyNkZWZpbmUgSENJX1dST05HX1NDT19NVFUJMHg4MAogCiAjZGVmaW5lIEhDSV9NQVhfSUZBQ0VfTlVNCTMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKaW5kZXggODU3MzgyMi4uYWFjNjdhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYwpAQCAtMjMsNyArMjMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI3OCw3ICsyNzcsNiBAQAogCiAJaGRldi0+dHlwZSA9IEhDSV9WSENJOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gdmhjaTsKLQlTRVRfSENJREVWX0RFVihoZGV2LCB2aGNpX21pc2NkZXYuZGV2KTsKIAogCWhkZXYtPm9wZW4gICAgID0gdmhjaV9vcGVuX2RldjsKIAloZGV2LT5jbG9zZSAgICA9IHZoY2lfY2xvc2VfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9henRjZC5jIGIvZHJpdmVycy9jZHJvbS9henRjZC5jCmluZGV4IGVjMDA0ODkuLmVjNDY5NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vYXp0Y2QuYworKysgYi9kcml2ZXJzL2Nkcm9tL2F6dGNkLmMKQEAgLTE5MTgsNyArMTkxOCw2IEBACiAJYXp0X2Rpc2stPmZpcnN0X21pbm9yID0gMDsKIAlhenRfZGlzay0+Zm9wcyA9ICZhenRfZm9wczsKIAlzcHJpbnRmKGF6dF9kaXNrLT5kaXNrX25hbWUsICJhenRjZCIpOwotCXNwcmludGYoYXp0X2Rpc2stPmRldmZzX25hbWUsICJhenRjZCIpOwogCWF6dF9kaXNrLT5xdWV1ZSA9IGF6dF9xdWV1ZTsKIAlhZGRfZGlzayhhenRfZGlzayk7CiAJYXp0X2ludmFsaWRhdGVfYnVmZmVycygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IDMxNzBlYWEuLmNhMjdlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTI2Myw3ICsyNjMsNiBAQAogLyogI2RlZmluZSBFUlJMT0dNQVNLIChDRF9XQVJOSU5HfENEX09QRU58Q0RfQ09VTlRfVFJBQ0tTfENEX0NMT1NFKSAqLwogLyogI2RlZmluZSBFUlJMT0dNQVNLIChDRF9XQVJOSU5HfENEX1JFR19VTlJFR3xDRF9ET19JT0NUTHxDRF9PUEVOfENEX0NMT1NFfENEX0NPVU5UX1RSQUNLUykgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMgYi9kcml2ZXJzL2Nkcm9tL2NkdTMxYS5jCmluZGV4IDcyZmZkNjQuLjM3YmRiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHUzMWEuYwpAQCAtMTYxLDcgKzE2MSw2IEBACiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMTQyLDcgKzMxNDEsNyBAQAogCiAJaWYgKGNkdTMxYV9pcnEgPiAwKSB7CiAJCWlmIChyZXF1ZXN0X2lycQotCQkgICAgKGNkdTMxYV9pcnEsIGNkdTMxYV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwkJICAgIChjZHUzMWFfaXJxLCBjZHUzMWFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICJjZHUzMWEiLCBOVUxMKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVuYWJsZSB0byBncmFiIElSUSVkIGZvciAiCiAJCQkJCSJ0aGUgQ0RVMzFBIGRyaXZlclxuIiwgY2R1MzFhX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2NtMjA2LmMgYi9kcml2ZXJzL2Nkcm9tL2NtMjA2LmMKaW5kZXggZjQzYTk4OC4uOWIwNWRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jbTIwNi5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY20yMDYuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtOTE1LDcgKzkxNCw3IEBACiAJY2QtPmRzYiA9IHdhaXRfZHNiKCk7CiB9CiAKLXVjaCBiY2RiaW4odW5zaWduZWQgY2hhciBiY2QpCitzdGF0aWMgdWNoIGJjZGJpbih1bnNpZ25lZCBjaGFyIGJjZCkKIHsJCQkJLyogc3RvbGVuIGZyb20gbWNkLmMhICovCiAJcmV0dXJuIChiY2QgPj4gNCkgKiAxMCArIChiY2QgJiAweGYpOwogfQpAQCAtMTUzMyw3ICsxNTMyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19jbTIwNl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBfX2NtMjA2X2luaXQodm9pZCkKIHsKIAlwYXJzZV9vcHRpb25zKCk7CiAjaWYgIWRlZmluZWQoQVVUT19QUk9CRV9NT0RVTEUpCkBAIC0xNTk0LDggKzE1OTMsMyBAQAogI2VuZGlmCQkJCS8qICFNT0RVTEUgKi8KIE1PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihDTTIwNl9DRFJPTV9NQUpPUik7CiAKLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjb21waWxlLWNvbW1hbmQ6ICJnY2MgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtbTQ4NiAtRE1PRFVMRSAtRE1PRFZFUlNJT05TIC1pbmNsdWRlIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCAgLWMgLW8gY20yMDYubyBjbTIwNi5jIgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2dzY2QuYyBiL2RyaXZlcnMvY2Ryb20vZ3NjZC5jCmluZGV4IGFkNTQ2NGEuLmI2ZWU1MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vZ3NjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vZ3NjZC5jCkBAIC05NTUsNyArOTU1LDYgQEAKIAlnc2NkX2Rpc2stPmZpcnN0X21pbm9yID0gMDsKIAlnc2NkX2Rpc2stPmZvcHMgPSAmZ3NjZF9mb3BzOwogCXNwcmludGYoZ3NjZF9kaXNrLT5kaXNrX25hbWUsICJnc2NkIik7Ci0Jc3ByaW50Zihnc2NkX2Rpc2stPmRldmZzX25hbWUsICJnc2NkIik7CiAKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAiZ3NjZCIpKSB7CiAJCXJldCA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL21jZHguYyBiL2RyaXZlcnMvY2Ryb20vbWNkeC5jCmluZGV4IDBmNmU3YWEuLmRjZDFhYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vbWNkeC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vbWNkeC5jCkBAIC03NCw3ICs3NCw2IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNkZWZpbmUgTUFKT1JfTlIgTUlUU1VNSV9YX0NEUk9NX01BSk9SCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAKICNpbmNsdWRlICJtY2R4LmgiCiAKQEAgLTExOTQsNyArMTE5Myw3IEBACiAJfQogCiAJeHRyYWNlKElOSVQsICJpbml0KCkgc3Vic2NyaWJlIGlycSBhbmQgaS9vXG4iKTsKLQlpZiAocmVxdWVzdF9pcnEoc3R1ZmZwLT5pcnEsIG1jZHhfaW50ciwgU0FfSU5URVJSVVBULCAibWNkeCIsIHN0dWZmcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoc3R1ZmZwLT5pcnEsIG1jZHhfaW50ciwgSVJRRl9ESVNBQkxFRCwgIm1jZHgiLCBzdHVmZnApKSB7CiAJCXJlbGVhc2VfcmVnaW9uKHN0dWZmcC0+d3JlZ19kYXRhLCBNQ0RYX0lPX1NJWkUpOwogCQl4d2FybigiJXM9MHglMDN4LCVkOiBJbml0IGZhaWxlZC4gQ2FuJ3QgZ2V0IGlycSAoJWQpLlxuIiwKIAkJICAgICAgTUNEWCwgc3R1ZmZwLT53cmVnX2RhdGEsIHN0dWZmcC0+aXJxLCBzdHVmZnAtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL29wdGNkLmMgYi9kcml2ZXJzL2Nkcm9tL29wdGNkLmMKaW5kZXggMGIwZWFiNC4uMjUwMzJkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9vcHRjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vb3B0Y2QuYwpAQCAtMjAzMyw3ICsyMDMzLDYgQEAKIAlvcHRjZF9kaXNrLT5maXJzdF9taW5vciA9IDA7CiAJb3B0Y2RfZGlzay0+Zm9wcyA9ICZvcHRfZm9wczsKIAlzcHJpbnRmKG9wdGNkX2Rpc2stPmRpc2tfbmFtZSwgIm9wdGNkIik7Ci0Jc3ByaW50ZihvcHRjZF9kaXNrLT5kZXZmc19uYW1lLCAib3B0Y2QiKTsKIAogCWlmICghcmVxdWVzdF9yZWdpb24ob3B0Y2RfcG9ydCwgNCwgIm9wdGNkIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJvcHRjZDogY29uZmxpY3QsIEkvTyBwb3J0IDB4JXggYWxyZWFkeSB1c2VkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9zYnBjZC5jIGIvZHJpdmVycy9jZHJvbS9zYnBjZC5jCmluZGV4IDA1YzllODYuLmJhNTBlNWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3NicGNkLmMKKysrIGIvZHJpdmVycy9jZHJvbS9zYnBjZC5jCkBAIC0zNzEsNyArMzcxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMzgyLDcgKzM4MSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJzYnBjZC5oIgogCiAjZGVmaW5lIE1BSk9SX05SIE1BVFNVU0hJVEFfQ0RST01fTUFKT1IKQEAgLTU4MDgsOCArNTgwNiw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRldmZzX21rX2Rpcigic2JwIik7Ci0KIAlmb3IgKGo9MDtqPE5SX1NCUENEO2orKykKIAl7CiAJCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqIHNicGNkX2luZm9wOwpAQCAtNTg3MSw3ICs1ODY3LDYgQEAKIAkJZGlzay0+Zm9wcyA9ICZzYnBjZF9iZG9wczsKIAkJc3RyY3B5KGRpc2stPmRpc2tfbmFtZSwgc2JwY2RfaW5mb3AtPm5hbWUpOwogCQlkaXNrLT5mbGFncyA9IEdFTkhEX0ZMX0NEOwotCQlzcHJpbnRmKGRpc2stPmRldmZzX25hbWUsICJzYnAvYzB0JWQiLCBwLT5kcnZfaWQpOwogCQlwLT5kaXNrID0gZGlzazsKIAkJaWYgKHJlZ2lzdGVyX2Nkcm9tKHNicGNkX2luZm9wKSkKIAkJewpAQCAtNTkwNiw3ICs1OTAxLDYgQEAKIAkJaWYgKERfU1tqXS5kcnZfaWQ9PS0xKSBjb250aW51ZTsKIAkJZGVsX2dlbmRpc2soRF9TW2pdLmRpc2spOwogCQlwdXRfZGlzayhEX1Nbal0uZGlzayk7Ci0JCWRldmZzX3JlbW92ZSgic2JwL2MwdCVkIiwgaik7CiAJCXZmcmVlKERfU1tqXS5zYnBfYnVmKTsKIAkJaWYgKERfU1tqXS5zYnBfYXVkc2l6PjApCiAJCQl2ZnJlZShEX1Nbal0uYXVkX2J1Zik7CkBAIC01OTE3LDcgKzU5MTEsNiBAQAogCQl9CiAJCXZmcmVlKERfU1tqXS5zYnBjZF9pbmZvcCk7CiAJfQotCWRldmZzX3JlbW92ZSgic2JwIik7CiAJbXNnKERCR19JTkYsICIlcyBtb2R1bGUgcmVsZWFzZWQuXG4iLCBtYWpvcl9uYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9zamNkLmMgYi9kcml2ZXJzL2Nkcm9tL3NqY2QuYwppbmRleCA3NGIxY2FkLi5iZjVhZWY0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vc2pjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vc2pjZC5jCkBAIC0xNjk1LDcgKzE2OTUsNiBAQAogCXNqY2RfZGlzay0+Zmlyc3RfbWlub3IgPSAwLAogCXNqY2RfZGlzay0+Zm9wcyA9ICZzamNkX2ZvcHMsCiAJc3ByaW50ZihzamNkX2Rpc2stPmRpc2tfbmFtZSwgInNqY2QiKTsKLQlzcHJpbnRmKHNqY2RfZGlzay0+ZGV2ZnNfbmFtZSwgInNqY2QiKTsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oc2pjZF9iYXNlLCA0LCJzamNkIikpIHsKIAkJcHJpbnRrCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3NvbnljZDUzNS5jIGIvZHJpdmVycy9jZHJvbS9zb255Y2Q1MzUuYwppbmRleCBlNjU2NTk5Li4zMGFiNTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3NvbnljZDUzNS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vc29ueWNkNTM1LmMKQEAgLTE1MjcsNyArMTUyNyw3IEBACiAJfQogCWlmIChzb255NTM1X2lycV91c2VkID4gMCkgewogCSAgICBpZiAocmVxdWVzdF9pcnEoc29ueTUzNV9pcnFfdXNlZCwgY2R1NTM1X2ludGVycnVwdCwKLQkJCQkJCVNBX0lOVEVSUlVQVCwgQ0RVNTM1X0hBTkRMRSwgTlVMTCkpIHsKKwkJCQkJCUlSUUZfRElTQUJMRUQsIENEVTUzNV9IQU5ETEUsIE5VTEwpKSB7CiAJCQlwcmludGsoIlVuYWJsZSB0byBncmFiIElSUSVkIGZvciB0aGUgIiBDRFU1MzVfTUVTU0FHRV9OQU1FCiAJCQkJCSIgZHJpdmVyOyBwb2xsaW5nIGluc3RlYWQuXG4iLCBzb255NTM1X2lycV91c2VkKTsKIAkJCXNvbnk1MzVfaXJxX3VzZWQgPSAwOwpAQCAtMTU4OSw3ICsxNTg5LDYgQEAKIAljZHVfZGlzay0+Zmlyc3RfbWlub3IgPSAwOwogCWNkdV9kaXNrLT5mb3BzID0gJmNkdV9mb3BzOwogCXNwcmludGYoY2R1X2Rpc2stPmRpc2tfbmFtZSwgImNkdSIpOwotCXNwcmludGYoY2R1X2Rpc2stPmRldmZzX25hbWUsICJjZHU1MzUiKTsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oc29ueTUzNV9jZF9iYXNlX2lvLCA0LCBDRFU1MzVfSEFORExFKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HInNvbnljZDUzNTogVW5hYmxlIHRvIHJlcXVlc3QgcmVnaW9uIDB4JXhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggYWY2YjNiZi4uNTRjYTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL3Zpby5oPgogCiAjZGVmaW5lIFZJT0NEX0RFVklDRQkJCSJpc2VyaWVzL3ZjZCIKLSNkZWZpbmUgVklPQ0RfREVWSUNFX0RFVkZTCQkiaXNlcmllcy92Y2QiCiAKICNkZWZpbmUgVklPQ0RfVkVSUyAiMS4wNiIKIApAQCAtNjg4LDggKzY4Nyw2IEBACiAJZ2VuZGlzay0+Zmlyc3RfbWlub3IgPSBkZXZpY2VubzsKIAlzdHJuY3B5KGdlbmRpc2stPmRpc2tfbmFtZSwgYy0+bmFtZSwKIAkJCXNpemVvZihnZW5kaXNrLT5kaXNrX25hbWUpKTsKLQlzbnByaW50ZihnZW5kaXNrLT5kZXZmc19uYW1lLCBzaXplb2YoZ2VuZGlzay0+ZGV2ZnNfbmFtZSksCi0JCQlWSU9DRF9ERVZJQ0VfREVWRlMgIiVkIiwgZGV2aWNlbm8pOwogCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgMSk7CiAJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIDEpOwogCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCA0MDk2IC8gNTEyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggNDEwZDcwYy4uYzQwZTQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTk2MSw2ICs5NjEsNyBAQAogCiBjb25maWcgTlNDX0dQSU8KIAl0cmlzdGF0ZSAiTmF0U2VtaSBCYXNlIEdQSU8gU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFg4Nl8zMgogCSMgc2VsZWN0ZWQgYnkgU0N4MjAwX0dQSU8gYW5kIFBDODczNnhfR1BJTwogCSMgd2hhdCBhYm91dCAyIHNlbGVjdG9ycyBkaWZmZXJpbmc6IG0gIT0geQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCA5ODI2YTM5Li4yMmY4Y2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIEFHUAogCXRyaXN0YXRlICIvZGV2L2FncGdhcnQgKEFHUCBTdXBwb3J0KSIKIAlkZXBlbmRzIG9uIEFMUEhBIHx8IElBNjQgfHwgUFBDIHx8IFg4NgorCWRlcGVuZHMgb24gUENJCiAJLS0taGVscC0tLQogCSAgQUdQIChBY2NlbGVyYXRlZCBHcmFwaGljcyBQb3J0KSBpcyBhIGJ1cyBzeXN0ZW0gbWFpbmx5IHVzZWQgdG8KIAkgIGNvbm5lY3QgZ3JhcGhpY3MgY2FyZHMgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IGY2OTBlZTguLjhjZDUyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtOCw3ICs4LDYgQEAKICAqIHdvcmsgaXMgZG9uZSBpbiB0aGUgbm9ydGhicmlkZ2UocykuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTczNCw3ICs3MzMsNyBAQAogCiAJaWYgKGFncF9vZmYpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcikgPiAwKSB7CisJaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKSA8IDApIHsKIAkJc3RydWN0IHBjaV9kZXYgKmRldjsKIAkJaWYgKCFhZ3BfdHJ5X3Vuc3VwcG9ydGVkICYmICFhZ3BfdHJ5X3Vuc3VwcG9ydGVkX2Jvb3QpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBzdXBwb3J0ZWQgQUdQIGJyaWRnZSBmb3VuZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCAxNjA1NjQzNC4uZjI0NGM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTQxLDcgKzQxLDYgQEAKIH07CiAKIAotCiB0eXBlZGVmIHN0cnVjdCBfYXRpX3BhZ2VfbWFwIHsKIAl1bnNpZ25lZCBsb25nICpyZWFsOwogCXVuc2lnbmVkIGxvbmcgX19pb21lbSAqcmVtYXBwZWQ7CkBAIC0xNDEsNyArMTQwLDggQEAKIAlhdGlfZ2VuZXJpY19wcml2YXRlLm51bV90YWJsZXMgPSBucl90YWJsZXM7CiAJYXRpX2dlbmVyaWNfcHJpdmF0ZS5nYXR0X3BhZ2VzID0gdGFibGVzOwogCi0JaWYgKHJldHZhbCAhPSAwKSBhdGlfZnJlZV9nYXR0X3BhZ2VzKCk7CisJaWYgKHJldHZhbCAhPSAwKQorCQlhdGlfZnJlZV9nYXR0X3BhZ2VzKCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMjE5LDE2ICsyMTksMTYgQEAKIAlhdGlfZ2VuZXJpY19wcml2YXRlLnJlZ2lzdGVycyA9ICh2b2xhdGlsZSB1OCBfX2lvbWVtICopIGlvcmVtYXAodGVtcCwgNDA5Nik7CiAKIAlpZiAoaXNfcjIwMCgpKQotICAgICAgIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFncF9icmlkZ2UtPmRldiwgQVRJX1JTMTAwX0lHX0FHUE1PREUsIDB4MjAwMDApOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFncF9icmlkZ2UtPmRldiwgQVRJX1JTMTAwX0lHX0FHUE1PREUsIDB4MjAwMDApOwogCWVsc2UKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhZ3BfYnJpZGdlLT5kZXYsIEFUSV9SUzMwMF9JR19BR1BNT0RFLCAweDIwMDAwKTsKIAogCS8qIGFkZHJlc3MgdG8gbWFwIHRvbyAqLwotICAgICAgICAvKgorCS8qCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFncF9icmlkZ2UuZGV2LCBBR1BfQVBCQVNFLCAmdGVtcCk7CiAJYWdwX2JyaWRnZS5nYXJ0X2J1c19hZGRyID0gKHRlbXAgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAiSUdQMzIwIGdhcnRfYnVzX2FkZHI6ICV4XG4iLCBhZ3BfYnJpZGdlLmdhcnRfYnVzX2FkZHIpOwotICAgICAgICAqLworCSovCiAJd3JpdGVsKDB4NjAwMDAsIGF0aV9nZW5lcmljX3ByaXZhdGUucmVnaXN0ZXJzK0FUSV9HQVJUX0ZFQVRVUkVfSUQpOwogCXJlYWRsKGF0aV9nZW5lcmljX3ByaXZhdGUucmVnaXN0ZXJzK0FUSV9HQVJUX0ZFQVRVUkVfSUQpOwkvKiBQQ0kgUG9zdGluZy4qLwogCkBAIC0yNDUsMTkgKzI0NSwyMSBAQAogCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYWdwX2F0aV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwotCi0JcmV0dXJuIGF0aV9jb25maWd1cmUoKTsKLX0KLQogc3RhdGljIGludCBhZ3BfYXRpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXBjaV9zYXZlX3N0YXRlKGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDMpOwogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgYWdwX2F0aV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKworCXJldHVybiBhdGlfY29uZmlndXJlKCk7Cit9CiAjZW5kaWYKIAogLyoKQEAgLTMyMSw5ICszMjMsOSBAQAogCXVuc2lnbmVkIGxvbmcgX19pb21lbSAqY3VyX2dhdHQ7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCi0JaWYgKHR5cGUgIT0gMCB8fCBtZW0tPnR5cGUgIT0gMCkgeworCWlmICh0eXBlICE9IDAgfHwgbWVtLT50eXBlICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCWZvciAoaSA9IHBnX3N0YXJ0OyBpIDwgKG1lbS0+cGFnZV9jb3VudCArIHBnX3N0YXJ0KTsgaSsrKSB7CiAJCWFkZHIgPSAoaSAqIFBBR0VfU0laRSkgKyBhZ3BfYnJpZGdlLT5nYXJ0X2J1c19hZGRyOwogCQljdXJfZ2F0dCA9IEdFVF9HQVRUKGFkZHIpOwpAQCAtNTAyLDkgKzUwNCw4IEBACiAKIAlicmlkZ2UtPmRldiA9IHBkZXY7CiAJYnJpZGdlLT5jYXBuZHggPSBjYXBfcHRyOwotCQotCWJyaWRnZS0+ZHJpdmVyID0gJmF0aV9nZW5lcmljX2JyaWRnZTsKIAorCWJyaWRnZS0+ZHJpdmVyID0gJmF0aV9nZW5lcmljX2JyaWRnZTsKIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJEZXRlY3RlZCBBdGkgJXMgY2hpcHNldFxuIiwKIAkJCWRldnNbal0uY2hpcHNldF9uYW1lKTsKQEAgLTU0Niw4ICs1NDcsOCBAQAogCS5wcm9iZQkJPSBhZ3BfYXRpX3Byb2JlLAogCS5yZW1vdmUJCT0gYWdwX2F0aV9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJPSBhZ3BfYXRpX3Jlc3VtZSwKIAkuc3VzcGVuZAk9IGFncF9hdGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFncF9hdGlfcmVzdW1lLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMKaW5kZXggZmZjZjE1Yy4uZDljNWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYwpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWdwX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWdwX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggYTkyYWI1My4uY2M1ZWEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqIFRPRE86CiAgKiAtIEFsbG9jYXRlIG1vcmUgdGhhbiBvcmRlciAwIHBhZ2VzIHRvIGF2b2lkIHRvbyBtdWNoIGxpbmVhciBtYXAgc3BsaXR0aW5nLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwppbmRleCA0YzY3MTM1Li5kZjdmMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwpAQCAtMzc2LDYgKzM3NiwyOSBAQAogCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWdwX252aWRpYV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcGNpX3NhdmVfc3RhdGUgKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUgKHBkZXYsIDMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWdwX252aWRpYV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyogc2V0IHBvd2VyIHN0YXRlIDAgYW5kIHJlc3RvcmUgUENJIHNwYWNlICovCisJcGNpX3NldF9wb3dlcl9zdGF0ZSAocGRldiwgMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKiByZWNvbmZpZ3VyZSBBR1AgaGFyZHdhcmUgYWdhaW4gKi8KKwludmlkaWFfY29uZmlndXJlKCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfbnZpZGlhX3BjaV90YWJsZVtdID0gewogCXsKIAkuY2xhc3MJCT0gKFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4KSwKQEAgLTQwMyw2ICs0MjYsMTAgQEAKIAkuaWRfdGFibGUJPSBhZ3BfbnZpZGlhX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX252aWRpYV9wcm9iZSwKIAkucmVtb3ZlCQk9IGFncF9udmlkaWFfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gYWdwX252aWRpYV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYWdwX252aWRpYV9yZXN1bWUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFncF9udmlkaWFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCmluZGV4IDY2MDJiMzEuLjlkNjcxM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIAkJZXZlciBwb3NzaWJsZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI3VuZGVmIFNFUklBTF9QQVJBTk9JQV9DSEVDSwpAQCAtMjA1Miw3ICsyMDUxLDcgQEAKIAogCS8qIHNldCBJU1JzLCBhbmQgdGhlbiBkaXNhYmxlIHRoZSByeCBpbnRlcnJ1cHRzICovCiAJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1RCRSwgc2VyX3R4X2ludCwgMCwgInNlcmlhbCBUWCIsIHN0YXRlKTsKLQlyZXF1ZXN0X2lycShJUlFfQU1JR0FfUkJGLCBzZXJfcnhfaW50LCBTQV9JTlRFUlJVUFQsICJzZXJpYWwgUlgiLCBzdGF0ZSk7CisJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1JCRiwgc2VyX3J4X2ludCwgSVJRRl9ESVNBQkxFRCwgInNlcmlhbCBSWCIsIHN0YXRlKTsKIAogCS8qIHR1cm4gb2ZmIFJ4IGFuZCBUeCBpbnRlcnJ1cHRzICovCiAJY3VzdG9tLmludGVuYSA9IElGX1JCRiB8IElGX1RCRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKaW5kZXggOTI3NWQ1ZS4uMTBhMzg5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCQkgICAgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYWNfaW50ZXJydXB0KGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIAkucmVhZCA9IGFjX3JlYWQsCkBAIC0yMDksMTMgKzIwOSwxNiBAQAogCQlSYW1JTyA9IGlvcmVtYXAoZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgTEVOX1JBTV9JTyk7CiAKIAkJaWYgKCFSYW1JTykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWMubzogRmFpbGVkIHRvIGlvcmVtYXAgUENJIG1lbW9yeSBzcGFjZSBhdCAweCVseFxuIiwgZGV2LT5yZXNvdXJjZVswXS5zdGFydCk7CisJCQlwcmludGsoS0VSTl9JTkZPICJhYy5vOiBGYWlsZWQgdG8gaW9yZW1hcCBQQ0kgbWVtb3J5ICIKKwkJCQkic3BhY2UgYXQgMHglbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXNvdXJjZVswXS5zdGFydCk7CiAJCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXBwbGljb20gJXMgZm91bmQgYXQgbWVtIDB4JWx4LCBpcnEgJWRcbiIsCi0JCSAgICAgICBhcHBsaWNvbV9wY2lfZGV2bmFtZXNbZGV2LT5kZXZpY2UtMV0sIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIAorCQlwcmludGsoS0VSTl9JTkZPICJBcHBsaWNvbSAlcyBmb3VuZCBhdCBtZW0gMHglbGx4LCBpcnEgJWRcbiIsCisJCSAgICAgICBhcHBsaWNvbV9wY2lfZGV2bmFtZXNbZGV2LT5kZXZpY2UtMV0sCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCiAJCSAgICAgICBkZXYtPmlycSk7CiAKIAkJYm9hcmRubyA9IGFjX3JlZ2lzdGVyX2JvYXJkKGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIFJhbUlPLDApOwpAQCAtMjI2LDcgKzIyOSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmFjX2ludGVycnVwdCwgU0FfU0hJUlEsICJBcHBsaWNvbSBQQ0kiLCAmZHVtbXkpKSB7CisJCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmFjX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJBcHBsaWNvbSBQQ0kiLCAmZHVtbXkpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZCBub3QgYWxsb2NhdGUgSVJRICVkIGZvciBQQ0kgQXBwbGljb20gZGV2aWNlLlxuIiwgZGV2LT5pcnEpOwogCQkJaW91bm1hcChSYW1JTyk7CiAJCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKQEAgLTI3Myw3ICsyNzYsNyBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFwcGxpY29tIElTQSBjYXJkIGZvdW5kIGF0IG1lbSAweCVseCwgaXJxICVkXG4iLCBtZW0gKyAoTEVOX1JBTV9JTyppKSwgaXJxKTsKIAogCQlpZiAoIW51bWlzYSkgewotCQkJaWYgKHJlcXVlc3RfaXJxKGlycSwgJmFjX2ludGVycnVwdCwgU0FfU0hJUlEsICJBcHBsaWNvbSBJU0EiLCAmZHVtbXkpKSB7CisJCQlpZiAocmVxdWVzdF9pcnEoaXJxLCAmYWNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIkFwcGxpY29tIElTQSIsICZkdW1teSkpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgYWxsb2NhdGUgSVJRICVkIGZvciBJU0EgQXBwbGljb20gZGV2aWNlLlxuIiwgaXJxKTsKIAkJCQlpb3VubWFwKFJhbUlPKTsKIAkJCQlhcGJzW2JvYXJkbm8gLSAxXS5SYW1JTyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY29uc29sZW1hcC5jIGIvZHJpdmVycy9jaGFyL2NvbnNvbGVtYXAuYwppbmRleCBjODVhNGZhLi4wNGExMjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY29uc29sZW1hcC5jCisrKyBiL2RyaXZlcnMvY2hhci9jb25zb2xlbWFwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIEZpeCBidWcgaW4gaW52ZXJzZSB0cmFuc2xhdGlvbi4gU3RhbmlzbGF2IFZvcm9ueWkgPHN0YXNAY250aS51YW5ldC5raGFya292LnVhPiwgRGVjIDE5OTgKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2NzNTUzNV9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwppbmRleCA0NmQ2NjAzLi44Y2UzZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjczU1MzVfZ3Bpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3M1NTM1X2dwaW9fZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkud3JpdGUJPSBjczU1MzVfZ3Bpb193cml0ZSwKIAkucmVhZAk9IGNzNTUzNV9ncGlvX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCmluZGV4IDEyMmU3YTcuLmMxYzY3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCisrKyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCkBAIC02MzMsNyArNjMzLDYgQEAKIC8qCiAgKiBJbmNsdWRlIHNlY3Rpb24gCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpAQCAtNDYxMyw3ICs0NjEyLDcgQEAKIAogICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlIElSUSAqLwogICAgICAgICAgICAgICAgIGlmKHJlcXVlc3RfaXJxKGN5X2lzYV9pcnEsIGN5eV9pbnRlcnJ1cHQsCi0JCQkJICAgU0FfSU5URVJSVVBULCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpCisJCQkJICAgSVJRRl9ESVNBQkxFRCwgIkN5Y2xvbS1ZIiwgJmN5X2NhcmRbal0pKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiQ3ljbG9tLVkvSVNBIGZvdW5kIGF0IDB4JWx4ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBjeV9pc2FfYWRkcmVzcyk7CkBAIC00Nzg2LDcgKzQ3ODUsNyBAQAogCiAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGUgSVJRICovCiAgICAgICAgICAgICAgICAgaWYocmVxdWVzdF9pcnEoY3lfcGNpX2lycSwgY3l5X2ludGVycnVwdCwKLQkJICAgICAgICBTQV9TSElSUSwgIkN5Y2xvbS1ZIiwgJmN5X2NhcmRbal0pKQorCQkgICAgICAgIElSUUZfU0hBUkVELCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9QQ0kgZm91bmQgYXQgMHglbHggIiwKIAkJCSAgICAodWxvbmcpIGN5X3BjaV9waHlzMik7CkBAIC00OTY2LDcgKzQ5NjUsNyBAQAogICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlIElSUSBvbmx5IGlmIGJvYXJkIGhhcyBhbiBJUlEgKi8KIAkJaWYoIChjeV9wY2lfaXJxICE9IDApICYmIChjeV9wY2lfaXJxICE9IDI1NSkgKSB7CiAJCSAgICBpZihyZXF1ZXN0X2lycShjeV9wY2lfaXJxLCBjeXpfaW50ZXJydXB0LAotCQkJU0FfU0hJUlEsICJDeWNsYWRlcy1aIiwgJmN5X2NhcmRbal0pKQorCQkJSVJRRl9TSEFSRUQsICJDeWNsYWRlcy1aIiwgJmN5X2NhcmRbal0pKQogCQkgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tOFpvL1BDSSBmb3VuZCBhdCAweCVseCAiLAogCQkJICAgICh1bG9uZykgY3lfcGNpX3BoeXMyKTsKQEAgLTUwNjAsNyArNTA1OSw3IEBACiAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGUgSVJRIG9ubHkgaWYgYm9hcmQgaGFzIGFuIElSUSAqLwogCQlpZiggKGN5X3BjaV9pcnEgIT0gMCkgJiYgKGN5X3BjaV9pcnEgIT0gMjU1KSApIHsKIAkJICAgIGlmKHJlcXVlc3RfaXJxKGN5X3BjaV9pcnEsIGN5el9pbnRlcnJ1cHQsCi0JCQlTQV9TSElSUSwgIkN5Y2xhZGVzLVoiLCAmY3lfY2FyZFtqXSkpCisJCQlJUlFGX1NIQVJFRCwgIkN5Y2xhZGVzLVoiLCAmY3lfY2FyZFtqXSkpCiAJCSAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkN5Y2xvbS1aZS9QQ0kgZm91bmQgYXQgMHglbHggIiwKIAkJCSAgICAodWxvbmcpIGN5X3BjaV9waHlzMik7CkBAIC01MjUwLDcgKzUyNDksNiBAQAogICAgIGN5X3NlcmlhbF9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAgICAgY3lfc2VyaWFsX2RyaXZlci0+ZHJpdmVyX25hbWUgPSAiY3ljbGFkZXMiOwogICAgIGN5X3NlcmlhbF9kcml2ZXItPm5hbWUgPSAidHR5QyI7Ci0gICAgY3lfc2VyaWFsX2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ0dHMvQyI7CiAgICAgY3lfc2VyaWFsX2RyaXZlci0+bWFqb3IgPSBDWUNMQURFU19NQUpPUjsKICAgICBjeV9zZXJpYWxfZHJpdmVyLT5taW5vcl9zdGFydCA9IDA7CiAgICAgY3lfc2VyaWFsX2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZGVjc2VyaWFsLmMgYi9kcml2ZXJzL2NoYXIvZGVjc2VyaWFsLmMKaW5kZXggYWExNDQwOS4uODVmNDA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RlY3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9kZWNzZXJpYWwuYwpAQCAtMTYsNyArMTYsNiBAQAogICogICAgICBjb25zb2xlIGRldmljZSBJIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2Ugb25seSBvbmUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vZGVjL21hY2h0eXBlLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybS5oCmluZGV4IDlkYTBkZGIuLjU2NDJhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm0uaApAQCAtMzgsNyArMzgsNiBAQAogCiAjaWYgZGVmaW5lZChfX2xpbnV4X18pCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CQkvKiBGb3IgX0lPKiBtYWNyb3MgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQlfSU9DX05SKG4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCmluZGV4IGNiNzZlNWMuLmQyYTU2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oCkBAIC00NCw3ICs0NCw2IEBACiAgKiBjYW4gYnVpbGQgdGhlIERSTSAocGFydCBvZiBQSSBEUkkpLiA0LzIxLzIwMDAgUyArIEIgKi8KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogI2VuZGlmCQkJCS8qIF9fYWxwaGFfXyAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKaW5kZXggNjExYTExNy4uZWJkYjcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJLyogSW5zdGFsbCBoYW5kbGVyICovCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSVJRX1NIQVJFRCkpCi0JCXNoX2ZsYWdzID0gU0FfU0hJUlE7CisJCXNoX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZGV2LT5kcml2ZXItPmlycV9oYW5kbGVyLAogCQkJICBzaF9mbGFncywgZGV2LT5kZXZuYW1lLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYwppbmRleCA3ZTMzMThlLi41NjgxY2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuYwpAQCAtMzMsNyArMzMsNiBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnkuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCmluZGV4IDcxNGQ5YWUuLmYxYjk3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21lbW9yeS5oCkBAIC0zMyw3ICszMyw2IEBACiAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbWVtb3J5X2RlYnVnLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnlfZGVidWcuaAppbmRleCBkMTE3Y2M5Li43NDU4MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnlfZGVidWcuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tZW1vcnlfZGVidWcuaApAQCAtMzEsNyArMzEsNiBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZW1fc3RhdHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc2NhdHRlci5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc2NhdHRlci5jCmluZGV4IGNlODFiZjIuLjA2ZWY3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NjYXR0ZXIuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zY2F0dGVyLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgImRybVAuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggMGI5Zjk4YS4uNTFhZDk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zeXNmcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZmZiX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9mZmJfZHJ2LmMKaW5kZXggYzEzZjlhYi4uZGQ0NTExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9mZmJfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9mZmJfZHJ2LmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJmZmIuaCIKICNpbmNsdWRlICJkcm1QLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kcnYuYwppbmRleCBkZmU2YWQyLi5mYWJiOWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODEwX2Rydi5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJpODEwX2RybS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2Rydi5jCmluZGV4IDcyMjY1ODEuLjM4OTU5N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZHJ2LmMKQEAgLTMyLDcgKzMyLDYgQEAKICAqICAgIEtlaXRoIFdoaXR3ZWxsIDxrZWl0aEB0dW5nc3RlbmdyYXBoaWNzLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgImk4MzBfZHJtLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCmluZGV4IDlmN2VkMGUuLmUzMGY1NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2Rydi5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJtZ2FfZHJtLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmMKaW5kZXggZTIwNDUwYS4uNjEwOGU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuYwpAQCAtMjksNyArMjksNiBAQAogICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAicjEyOF9kcm0uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmMKaW5kZXggYjA0ZWQxYi4uZWI5ODVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmMKaW5kZXggYWE2YzBkMS4uZWVlNTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zYXZhZ2VfZHJ2LmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAic2F2YWdlX2RybS5oIgogI2luY2x1ZGUgInNhdmFnZV9kcnYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJ2LmMKaW5kZXggNmY2ZDdkNi4uNWU5ZGM4NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAic2lzX2RybS5oIgogI2luY2x1ZGUgInNpc19kcnYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdGRmeF9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vdGRmeF9kcnYuYwppbmRleCBiYWE0NDE2Li4wMTJmZjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3RkZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS90ZGZ4X2Rydi5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJ0ZGZ4X2Rydi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5jCmluZGV4IDNmMDEyMjUuLmIzZDM2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJ2aWFfZHJtLmgiCiAjaW5jbHVkZSAidmlhX2Rydi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RzMTI4Ni5jIGIvZHJpdmVycy9jaGFyL2RzMTI4Ni5jCmluZGV4IGQ3NTVjYWMuLjIxYzgyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kczEyODYuYworKysgYi9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKQEAgLTI4MSw3ICsyODEsNyBAQAogICoJVGhlIHZhcmlvdXMgZmlsZSBvcGVyYXRpb25zIHdlIHN1cHBvcnQuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHMxMjg2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkczEyODZfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSBkczEyODZfcmVhZCwKIAkucG9sbAkJPSBkczEyODZfcG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczEzMDIuYyBiL2RyaXZlcnMvY2hhci9kczEzMDIuYwppbmRleCBhNzVlODYwLi5iY2RiMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHMxMzAyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzMTMwMi5jCkBAIC0xMiw3ICsxMiw2IEBACiAqIQogKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjgzLDcgKzI4Miw3IEBACiAKIC8qIFRoZSB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucyB3ZSBzdXBwb3J0LiAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Y19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gcnRjX2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczE2MjAuYyBiL2RyaXZlcnMvY2hhci9kczE2MjAuYwppbmRleCA2MmNkYTI1Li40OGNiOGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHMxNjIwLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzMTYyMC5jCkBAIC0yLDcgKzIsNiBAQAogICogbGludXgvZHJpdmVycy9jaGFyL2RzMTYyMC5jOiBEYWxsYXMgU2VtaWNvbmR1Y3RvcnMgRFMxNjIwCiAgKiAgIHRoZXJtb21ldGVyIGRyaXZlciAoYXMgdXNlZCBpbiB0aGUgUmViZWwuY29tIE5ldFdpbmRlcikKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpAQCAtMzM3LDcgKzMzNiw3IEBACiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3RoZXJtX2RzMTYyMDsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkczE2MjBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzMTYyMF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBub25zZWVrYWJsZV9vcGVuLAogCS5yZWFkCQk9IGRzMTYyMF9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RzcDU2ay5jIGIvZHJpdmVycy9jaGFyL2RzcDU2ay5jCmluZGV4IGUyMzNjZjIuLjliMWJmNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kc3A1NmsuYworKysgYi9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKQEAgLTQ4NCw3ICs0ODMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkc3A1NmtfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzcDU2a19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBkc3A1NmtfcmVhZCwKIAkud3JpdGUJCT0gZHNwNTZrX3dyaXRlLApAQCAtNTE4LDE3ICs1MTcsOSBAQAogCX0KIAljbGFzc19kZXZpY2VfY3JlYXRlKGRzcDU2a19jbGFzcywgTlVMTCwgTUtERVYoRFNQNTZLX01BSk9SLCAwKSwgTlVMTCwgImRzcDU2ayIpOwogCi0JZXJyID0gZGV2ZnNfbWtfY2RldihNS0RFVihEU1A1NktfTUFKT1IsIDApLAotCQkgICAgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsICJkc3A1NmsiKTsKLQlpZihlcnIpCi0JCWdvdG8gb3V0X2NsYXNzOwotCiAJcHJpbnRrKGJhbm5lcik7CiAJZ290byBvdXQ7CiAKLW91dF9jbGFzczoKLQljbGFzc19kZXZpY2VfZGVzdHJveShkc3A1NmtfY2xhc3MsIE1LREVWKERTUDU2S19NQUpPUiwgMCkpOwotCWNsYXNzX2Rlc3Ryb3koZHNwNTZrX2NsYXNzKTsKIG91dF9jaHJkZXY6CiAJdW5yZWdpc3Rlcl9jaHJkZXYoRFNQNTZLX01BSk9SLCAiZHNwNTZrIik7CiBvdXQ6CkBAIC01NDEsNyArNTMyLDYgQEAKIAljbGFzc19kZXZpY2VfZGVzdHJveShkc3A1NmtfY2xhc3MsIE1LREVWKERTUDU2S19NQUpPUiwgMCkpOwogCWNsYXNzX2Rlc3Ryb3koZHNwNTZrX2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldihEU1A1NktfTUFKT1IsICJkc3A1NmsiKTsKLQlkZXZmc19yZW1vdmUoImRzcDU2ayIpOwogfQogbW9kdWxlX2V4aXQoZHNwNTZrX2NsZWFudXBfZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2R0bGsuYyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKaW5kZXggODdkY2FhMi4uNWU4MmMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2R0bGsuYworKysgYi9kcml2ZXJzL2NoYXIvZHRsay5jCkBAIC02Miw3ICs2Miw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogZm9yIF9faW5pdCwgbW9kdWxlX3tpbml0LGV4aXR9ICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgkJLyogZm9yIFBPTExJTiwgZXRjLiAqLwogI2luY2x1ZGUgPGxpbnV4L2R0bGsuaD4JCS8qIGxvY2FsIGhlYWRlciBmaWxlIGZvciBEb3VibGVUYWxrIHZhbHVlcyAqLwotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpZmRlZiBUUkFDSU5HCkBAIC05NSw3ICs5NCw3IEBACiBzdGF0aWMgaW50IGR0bGtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHRsa19mb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR0bGtfZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGR0bGtfcmVhZCwKQEAgLTMzNyw5ICszMzYsNiBAQAogCWlmIChkdGxrX2Rldl9wcm9iZSgpID09IDApCiAJCXByaW50aygiLCBNQUpPUiAlZFxuIiwgZHRsa19tYWpvcik7CiAKLQlkZXZmc19ta19jZGV2KE1LREVWKGR0bGtfbWFqb3IsIERUTEtfTUlOT1IpLAotCQkgICAgICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLCAiZHRsayIpOwotCiAJaW5pdF90aW1lcigmZHRsa190aW1lcik7CiAJZHRsa190aW1lci5mdW5jdGlvbiA9IGR0bGtfdGltZXJfdGljazsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkdGxrX3Byb2Nlc3NfbGlzdCk7CkBAIC0zNTcsNyArMzUzLDYgQEAKIAogCWR0bGtfd3JpdGVfdHRzKERUTEtfQ0xFQVIpOwogCXVucmVnaXN0ZXJfY2hyZGV2KGR0bGtfbWFqb3IsICJkdGxrIik7Ci0JZGV2ZnNfcmVtb3ZlKCJkdGxrIik7CiAJcmVsZWFzZV9yZWdpb24oZHRsa19wb3J0X2xwYywgRFRMS19JT19FWFRFTlQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZWMzMTA0X2tleWIuYyBiL2RyaXZlcnMvY2hhci9lYzMxMDRfa2V5Yi5jCmluZGV4IDRhZWQ2NjkuLmFiYWMxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lYzMxMDRfa2V5Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9lYzMxMDRfa2V5Yi5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKiAocHJ1bXBmQHR1eC5vcmcpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lZmlydGMuYyBiL2RyaXZlcnMvY2hhci9lZmlydGMuYwppbmRleCAwMDkwZTdhLi4wMDQxNDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZWZpcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2VmaXJ0Yy5jCkBAIC0yODUsNyArMjg1LDcgQEAKICAqCVRoZSB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucyB3ZSBzdXBwb3J0LgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVmaV9ydGNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVmaV9ydGNfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGVmaV9ydGNfaW9jdGwsCiAJLm9wZW4JCT0gZWZpX3J0Y19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggZGMwNjAyYS4uODZkMjkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMCw3ICszMCw2IEBACiAvKiBTZWUgUkVBRE1FLmVwY2EgZm9yIGNoYW5nZSBoaXN0b3J5IC0tREFUKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTEyMzIsNyArMTIzMSw2IEBACiAKIAlwY19kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcGNfZHJpdmVyLT5uYW1lID0gInR0eUQiOyAKLQlwY19kcml2ZXItPmRldmZzX25hbWUgPSAidHRzL0QiOwogCXBjX2RyaXZlci0+bWFqb3IgPSBESUdJX01BSk9SOyAKIAlwY19kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMDsKIAlwY19kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VzcC5jIGIvZHJpdmVycy9jaGFyL2VzcC5jCmluZGV4IDkyMjE3NGQuLmFmY2Q4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lc3AuYworKysgYi9kcml2ZXJzL2NoYXIvZXNwLmMKQEAgLTg4Myw3ICs4ODMsNyBAQAogCSAqIEFsbG9jYXRlIHRoZSBJUlEKIAkgKi8KIAotCXJldHZhbCA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwgcnNfaW50ZXJydXB0X3NpbmdsZSwgU0FfU0hJUlEsCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaW5mby0+aXJxLCByc19pbnRlcnJ1cHRfc2luZ2xlLCBJUlFGX1NIQVJFRCwKIAkJCSAgICAgImVzcCBzZXJpYWwiLCBpbmZvKTsKIAogCWlmIChyZXR2YWwpIHsKQEAgLTI0NDksNyArMjQ0OSw2IEBACiAJCiAJZXNwX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAllc3BfZHJpdmVyLT5uYW1lID0gInR0eVAiOwotCWVzcF9kcml2ZXItPmRldmZzX25hbWUgPSAidHRzL1AiOwogCWVzcF9kcml2ZXItPm1ham9yID0gRVNQX0lOX01BSk9SOwogCWVzcF9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMDsKIAllc3BfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mZGMtaW8uYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mZGMtaW8uYwppbmRleCAwOTNmZGY5Li42NWM5ZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmRjLWlvLmMKKysrIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pby5jCkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogCQkvKiAgR2V0IGZhc3QgaW50ZXJydXB0IGhhbmRsZXIuCiAJCSAqLwogCQlpZiAocmVxdWVzdF9pcnEoZmRjLmlycSwgZnRhcGVfaW50ZXJydXB0LAotCQkJCVNBX0lOVEVSUlVQVCwgImZ0IiwgZnRhcGVfaWQpKSB7CisJCQkJSVJRRl9ESVNBQkxFRCwgImZ0IiwgZnRhcGVfaWQpKSB7CiAJCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2J1ZywKIAkJCQkgICAgIlVuYWJsZSB0byBncmFiIElSUSVkIGZvciBmdGFwZSBkcml2ZXIiLAogCQkJCSAgICBmZGMuaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuYwppbmRleCA5NTZiMjU4Li44ZTUwYmZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWNhbGlici5jCisrKyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuYwpAQCAtMjQsNyArMjQsNiBAQAogICogICAgICBmdW5jdGlvbnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jdGwuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jdGwuYwppbmRleCAzMmUwNDM5Li41ZDdjMWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWN0bC5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAgICAgIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyICJmdGFwZSIgZm9yIExpbnV4LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWluaXQuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pbml0LmMKaW5kZXggYjU0MjYwZC4uNDk5ODEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWluaXQuYworKysgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtaW5pdC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAgICAgIGZvciB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMCBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXByb2MuYwppbmRleCBjNjYyNTFlOS4uZTgwNWIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXByb2MuYworKysgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKglPbGQgY29kZSByZW1vdmVkLCBzd2l0Y2hlZCB0byBkeW5hbWljIHByb2MgZW50cnkuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfRlRfUFJPQ19GUykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXNldHVwLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtc2V0dXAuYwppbmRleCAyODBhMWE1Li42NzgzNDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtc2V0dXAuYworKysgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtc2V0dXAuYwpAQCAtMjUsNyArMjUsNiBAQAogICogICAgICAiZnRhcGUiIGZvciBMaW51eC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgKaW5kZXggZmE3Y2QyMC4uMjk1MDgxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaAorKysgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oCkBAIC0yOCw3ICsyOCw2IEBACiAgKiAgICAgIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyICJmdGFwZSIgZm9yIExpbnV4LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZV9zeW1zLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGVfc3ltcy5jCmluZGV4IDVkYzNhMzguLjhlMGRjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZV9zeW1zLmMKKysrIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlX3N5bXMuYwpAQCAtMjUsNyArMjUsNiBAQAogICogICAgICBleHBvcnRzIHRvIGl0cyBoaWdoIGxldmVsIGNsaWVudHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1jdGwuYwppbmRleCA2Yzc4NzRlNS4uMjJiYTBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWN0bC5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmgKaW5kZXggNDE0MTU5OC4uOGU2ZjJkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmgKKysrIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmgKQEAgLTI3LDcgKzI3LDYgQEAKICAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAgZmxvcHB5LXRhcGUgZHJpdmVyIGZvciBMaW51eC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdGlvLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWluaXQuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWluaXQuYwppbmRleCA4MjEzNTdjLi4xNjRhMWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1pbml0LmMKKysrIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtaW5pdC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKiAgICAgIHRvIHRoZSBmdGFwZSBmbG9wcHkgdGFwZSBkcml2ZXIgZm9yIExpbnV4CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTMzLDcgKzMyLDYgQEAKICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3pmdGFwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTg4LDcgKzg2LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHpmdF93cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmLAogCQkJIHNpemVfdCByZXFfbGVuLCBsb2ZmX3QgKnBwb3MpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZnRfY2RldiA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZnRfY2RldiA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IHpmdF9yZWFkLApAQCAtMzMyLDI5ICszMzAsMTEgQEAKIAl6ZnRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ6ZnQiKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWNsYXNzX2RldmljZV9jcmVhdGUoemZ0X2NsYXNzLCBOVUxMLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSksIE5VTEwsICJxZnQlaSIsIGkpOwotCQlkZXZmc19ta19jZGV2KE1LREVWKFFJQzExN19UQVBFX01BSk9SLCBpKSwKLQkJCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQkJInFmdCVpIiwgaSk7CiAJCWNsYXNzX2RldmljZV9jcmVhdGUoemZ0X2NsYXNzLCBOVUxMLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDQpLCBOVUxMLCAibnFmdCVpIiwgaSk7Ci0JCWRldmZzX21rX2NkZXYoTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyA0KSwKLQkJCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQkJIm5xZnQlaSIsIGkpOwogCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAxNiksIE5VTEwsICJ6cWZ0JWkiLCBpKTsKLQkJZGV2ZnNfbWtfY2RldihNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDE2KSwKLQkJCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQkJInpxZnQlaSIsIGkpOwogCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAyMCksIE5VTEwsICJuenFmdCVpIiwgaSk7Ci0JCWRldmZzX21rX2NkZXYoTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAyMCksCi0JCQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJCSJuenFmdCVpIiwgaSk7CiAJCWNsYXNzX2RldmljZV9jcmVhdGUoemZ0X2NsYXNzLCBOVUxMLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDMyKSwgTlVMTCwgInJhd3FmdCVpIiwgaSk7Ci0JCWRldmZzX21rX2NkZXYoTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAzMiksCi0JCQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJCSJyYXdxZnQlaSIsIGkpOwogCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAzNiksIE5VTEwsICJucmF3cmF3cWZ0JWkiLCBpKTsKLQkJZGV2ZnNfbWtfY2RldihNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDM2KSwKLQkJCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQkJIm5yYXdxZnQlaSIsIGkpOwogCX0KIAogI2lmZGVmIENPTkZJR19aRlRfQ09NUFJFU1NPUgpAQCAtMzgwLDE3ICszNjAsMTEgQEAKIAkJVFJBQ0UoZnRfdF9pbmZvLCAic3VjY2Vzc2Z1bCIpOwogCX0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlkZXZmc19yZW1vdmUoInFmdCVpIiwgaSk7CiAJCWNsYXNzX2RldmljZV9kZXN0cm95KHpmdF9jbGFzcywgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkpKTsKLQkJZGV2ZnNfcmVtb3ZlKCJucWZ0JWkiLCBpKTsKIAkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koemZ0X2NsYXNzLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDQpKTsKLQkJZGV2ZnNfcmVtb3ZlKCJ6cWZ0JWkiLCBpKTsKIAkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koemZ0X2NsYXNzLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDE2KSk7Ci0JCWRldmZzX3JlbW92ZSgibnpxZnQlaSIsIGkpOwogCQljbGFzc19kZXZpY2VfZGVzdHJveSh6ZnRfY2xhc3MsIE1LREVWKFFJQzExN19UQVBFX01BSk9SLCBpICsgMjApKTsKLQkJZGV2ZnNfcmVtb3ZlKCJyYXdxZnQlaSIsIGkpOwogCQljbGFzc19kZXZpY2VfZGVzdHJveSh6ZnRfY2xhc3MsIE1LREVWKFFJQzExN19UQVBFX01BSk9SLCBpICsgMzIpKTsKLQkJZGV2ZnNfcmVtb3ZlKCJucmF3cWZ0JWkiLCBpKTsKIAkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koemZ0X2NsYXNzLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDM2KSk7CiAJfQogCWNsYXNzX2Rlc3Ryb3koemZ0X2NsYXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9nZW5ydGMuYyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwppbmRleCA1ODhmY2E1Li44MTdkYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCkBAIC00Myw3ICs0Myw2IEBACiAjZGVmaW5lIFJUQ19WRVJTSU9OCSIxLjA3IgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KQEAgLTQ4Myw3ICs0ODIsNyBAQAogICoJVGhlIHZhcmlvdXMgZmlsZSBvcGVyYXRpb25zIHdlIHN1cHBvcnQuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2VuX3J0Y19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2VuX3J0Y19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKICNpZmRlZiBDT05GSUdfR0VOX1JUQ19YCiAJLnJlYWQJCT0gZ2VuX3J0Y19yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggMDc0NzNjZC4uOGFmYmEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zOTYsNyArMzk1LDcgQEAKIAogCQlzcHJpbnRmKGRldnAtPmhkX25hbWUsICJocGV0JWQiLCAoaW50KShkZXZwIC0gaHBldHAtPmhwX2RldikpOwogCQlpcnFfZmxhZ3MgPSBkZXZwLT5oZF9mbGFncyAmIEhQRVRfU0hBUkVEX0lSUQotCQkJCQkJPyBTQV9TSElSUSA6IFNBX0lOVEVSUlVQVDsKKwkJCQkJCT8gSVJRRl9TSEFSRUQgOiBJUlFGX0RJU0FCTEVEOwogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBocGV0X2ludGVycnVwdCwgaXJxX2ZsYWdzLAogCQkJCWRldnAtPmhkX25hbWUsICh2b2lkICopZGV2cCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaHBldDogSVJRICVkIGlzIG5vdCBmcmVlXG4iLCBpcnEpOwpAQCAtNTU0LDcgKzU1Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHBldF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHBldF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLnJlYWQgPSBocGV0X3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IGE1YzZhOWQuLmNhMmY1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNDcsNyArMzQ2LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocC0+bG9jaywgZmxhZ3MpOwogCS8qIGNoZWNrIGVycm9yLCBmYWxsYmFjayB0byBub24taXJxICovCiAJaWYgKGlycSAhPSBOT19JUlEpCi0JCXJjID0gcmVxdWVzdF9pcnEoaXJxLCBodmNfaGFuZGxlX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiaHZjX2NvbnNvbGUiLCBocCk7CisJCXJjID0gcmVxdWVzdF9pcnEoaXJxLCBodmNfaGFuZGxlX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImh2Y19jb25zb2xlIiwgaHApOwogCiAJLyoKIAkgKiBJZiB0aGUgcmVxdWVzdF9pcnEoKSBmYWlscyBhbmQgd2UgcmV0dXJuIGFuIGVycm9yLiAgVGhlIHR0eSBsYXllcgpAQCAtODIwLDcgKzgxOSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZHJ2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCWRydi0+ZGV2ZnNfbmFtZSA9ICJodmMvIjsKIAlkcnYtPmRyaXZlcl9uYW1lID0gImh2YyI7CiAJZHJ2LT5uYW1lID0gImh2YyI7CiAJZHJ2LT5tYWpvciA9IEhWQ19NQUpPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNzLmMgYi9kcml2ZXJzL2NoYXIvaHZjcy5jCmluZGV4IGFmYTI2YjYuLjQ1ODlmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNzLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y3MuYwpAQCAtODk5LDcgKzg5OSw3IEBACiAJICogdGhlIGNvbm4gd2FzIHJlZ2lzdGVyZWQgYW5kIG5vdy4KIAkgKi8KIAlpZiAoIShyYyA9IHJlcXVlc3RfaXJxKGlycSwgJmh2Y3NfaGFuZGxlX2ludGVycnVwdCwKLQkJCQlTQV9JTlRFUlJVUFQsICJpYm1odmNzIiwgaHZjc2QpKSkgeworCQkJCUlSUUZfRElTQUJMRUQsICJpYm1odmNzIiwgaHZjc2QpKSkgewogCQkvKgogCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGUgdnR5LXNlcnZlciB3YXMgcmVtb3ZlZCBhZnRlciB0aGUgaXJxIHdhcwogCQkgKiByZXF1ZXN0ZWQgYnV0IGJlZm9yZSB3ZSBoYXZlIHRpbWUgdG8gZW5hYmxlIGludGVycnVwdHMuCkBAIC0xMzYzLDcgKzEzNjMsNiBAQAogCiAJaHZjc190dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSA9IGh2Y3NfZHJpdmVyX25hbWU7CiAJaHZjc190dHlfZHJpdmVyLT5uYW1lID0gaHZjc19kZXZpY2Vfbm9kZTsKLQlodmNzX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSBodmNzX2RldmljZV9ub2RlOwogCiAJLyoKIAkgKiBXZSdsbCBsZXQgdGhlIHN5c3RlbSBhc3NpZ24gdXMgYSBtYWpvciBudW1iZXIsIGluZGljYXRlZCBieSBsZWF2aW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZzaS5jIGIvZHJpdmVycy9jaGFyL2h2c2kuYwppbmRleCBhMDM3MGVkLi41NjYxMmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZzaS5jCisrKyBiL2RyaXZlcnMvY2hhci9odnNpLmMKQEAgLTExNTQsNyArMTE1NCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaHZzaV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JaHZzaV9kcml2ZXItPmRldmZzX25hbWUgPSAiaHZzaS8iOwogCWh2c2lfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJodnNpIjsKIAlodnNpX2RyaXZlci0+bmFtZSA9ICJodnNpIjsKIAlodnNpX2RyaXZlci0+bWFqb3IgPSBIVlNJX01BSk9SOwpAQCAtMTE2OSw3ICsxMTY4LDcgQEAKIAkJc3RydWN0IGh2c2lfc3RydWN0ICpocCA9ICZodnNpX3BvcnRzW2ldOwogCQlpbnQgcmV0ID0gMTsKIAotCQlyZXQgPSByZXF1ZXN0X2lycShocC0+dmlycSwgaHZzaV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgImh2c2kiLCBocCk7CisJCXJldCA9IHJlcXVlc3RfaXJxKGhwLT52aXJxLCBodnNpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImh2c2kiLCBocCk7CiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9FUlIgIkhWU0k6IGNvdWxkbid0IHJlc2VydmUgaXJxIDB4JXggKGVycm9yICVpKVxuIiwKIAkJCQlocC0+dmlycSwgcmV0KTsKQEAgLTEzMDAsMTMgKzEyOTksMTIgQEAKIAkJaHAtPmluYnVmX2VuZCA9IGhwLT5pbmJ1ZjsKIAkJaHAtPnN0YXRlID0gSFZTSV9DTE9TRUQ7CiAJCWhwLT52dGVybW5vID0gKnZ0ZXJtbm87Ci0JCWhwLT52aXJxID0gdmlydF9pcnFfY3JlYXRlX21hcHBpbmcoaXJxWzBdKTsKKwkJaHAtPnZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgaXJxWzBdLCAwKTsKIAkJaWYgKGhwLT52aXJxID09IE5PX0lSUSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgY3JlYXRlIGlycSBtYXBwaW5nIGZvciAweCV4XG4iLAotCQkJCV9fRlVOQ1RJT05fXywgaHAtPnZpcnEpOworCQkJCV9fRlVOQ1RJT05fXywgaXJxWzBdKTsKIAkJCWNvbnRpbnVlOwotCQl9IGVsc2UKLQkJCWhwLT52aXJxID0gaXJxX29mZnNldF91cChocC0+dmlycSk7CisJCX0KIAogCQlodnNpX2NvdW50Kys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwppbmRleCA4OGIwMjY2Li4xNTRhODFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcm5nX2NocmRldl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBybmdfY2hyZGV2X29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gcm5nX2Rldl9vcGVuLAogCS5yZWFkCQk9IHJuZ19kZXZfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pOGsuYyBiL2RyaXZlcnMvY2hhci9pOGsuYwppbmRleCBmM2MzYWFmLi4zNTNkOWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaThrLmMKKysrIGIvZHJpdmVycy9jaGFyL2k4ay5jCkBAIC04MCw3ICs4MCw3IEBACiBzdGF0aWMgaW50IGk4a19pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAogCQkgICAgIHVuc2lnbmVkIGxvbmcpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOGtfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk4a19mb3BzID0gewogCS5vcGVuCQk9IGk4a19vcGVuX2ZzLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pMmVsbGlzLmggYi9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuaAppbmRleCA1MTBiMDI2Li41ZWFiZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuaAorKysgYi9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuaApAQCAtNDcsNyArNDcsNiBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBNYW5kYXRvcnkgSW5jbHVkZXM6CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJpcDJ0eXBlcy5oIgogI2luY2x1ZGUgImkyaHcuaCIgICAgICAgLy8gVGhlIGhhcmR3YXJlIGRlZmluaXRpb25zCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKaW5kZXggOWFiMzNjMy4uNTE4ZWNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKQEAgLTgyLDcgKzgyLDYgQEAKIC8qKioqKioqKioqKiovCiAvKiBJbmNsdWRlcyAqLwogLyoqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC05MSw3ICs5MCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMjM1LDcgKzIzMyw3IEBACiAvKiBUaGlzIGlzIHRoZSBkcml2ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGlwMmlwbCBkZXZpY2UsIHdoaWNoIGlzIHVzZWQgdG8KICAqIGRvd25sb2FkIHRoZSBsb2Fkd2FyZSB0byB0aGUgYm9hcmRzLgogICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcDJfaXBsID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXAyX2lwbCA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gaXAyX2lwbF9yZWFkLAogCS53cml0ZQkJPSBpcDJfaXBsX3dyaXRlLApAQCAtNDE0LDkgKzQxMiw3IEBACiAJCQkvKiBmcmVlIGlvIGFkZHJlc3NlcyBhbmQgVGliZXQgKi8KIAkJCXJlbGVhc2VfcmVnaW9uKCBpcDJjb25maWcuYWRkcltpXSwgOCApOwogCQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koaXAyX2NsYXNzLCBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSkpOwotCQkJZGV2ZnNfcmVtb3ZlKCJpcDIvaXBsJWQiLCBpKTsKIAkJCWNsYXNzX2RldmljZV9kZXN0cm95KGlwMl9jbGFzcywgTUtERVYoSVAyX0lQTF9NQUpPUiwgNCAqIGkgKyAxKSk7Ci0JCQlkZXZmc19yZW1vdmUoImlwMi9zdGF0JWQiLCBpKTsKIAkJfQogCQkvKiBEaXNhYmxlIGFuZCByZW1vdmUgaW50ZXJydXB0IGhhbmRsZXIuICovCiAJCWlmICggKGlwMmNvbmZpZy5pcnFbaV0gPiAwKSAmJiBoYXZlX3JlcXVlc3RlZF9pcnEoaXAyY29uZmlnLmlycVtpXSkgKSB7CQpAQCAtNDI1LDcgKzQyMSw2IEBACiAJCX0KIAl9CiAJY2xhc3NfZGVzdHJveShpcDJfY2xhc3MpOwotCWRldmZzX3JlbW92ZSgiaXAyIik7CiAJaWYgKCAoIGVyciA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlciAoIGlwMl90dHlfZHJpdmVyICkgKSApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IGZhaWxlZCB0byB1bnJlZ2lzdGVyIHR0eSBkcml2ZXIgKCVkKVxuIiwgZXJyKTsKIAl9CkBAIC00OTYsOCArNDkxLDggQEAKIC8qIGluaXRpYWxpc2F0aW9uIG9mIHRoZSBkZXZpY2VzIGFuZCBkcml2ZXIgc3RydWN0dXJlcywgYW5kIHJlZ2lzdGVycyBpdHNlbGYgICovCiAvKiB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFNBX0lOVEVSUlVQVC0gaWYgc2V0IGJsb2NrcyBhbGwgaW50ZXJydXB0cyBlbHNlIG9ubHkgdGhpcyBsaW5lICovCi0vKiBTQV9TSElSUSAgICAtIGZvciBzaGFyZWQgaXJxIFBDSSBvciBtYXliZSBFSVNBIG9ubHkgKi8KKy8qIElSUUZfRElTQUJMRUQgLSBpZiBzZXQgYmxvY2tzIGFsbCBpbnRlcnJ1cHRzIGVsc2Ugb25seSB0aGlzIGxpbmUgKi8KKy8qIElSUUZfU0hBUkVEICAgIC0gZm9yIHNoYXJlZCBpcnEgUENJIG9yIG1heWJlIEVJU0Egb25seSAqLwogLyogU0FfUkFORE9NICAgLSBjYW4gYmUgc291cmNlIGZvciBjZXJ0LiByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgKi8KICNkZWZpbmUgSVAyX1NBX0ZMQUdTCTAKIApAQCAtNjc1LDcgKzY3MCw2IEBACiAKIAlpcDJfdHR5X2RyaXZlci0+b3duZXIJCSAgICA9IFRISVNfTU9EVUxFOwogCWlwMl90dHlfZHJpdmVyLT5uYW1lICAgICAgICAgICAgICAgICA9ICJ0dHlGIjsKLQlpcDJfdHR5X2RyaXZlci0+ZGV2ZnNfbmFtZQkgICAgPSAidHRzL0YiOwogCWlwMl90dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSAgICAgICAgICA9IHBjRHJpdmVyX25hbWU7CiAJaXAyX3R0eV9kcml2ZXItPm1ham9yICAgICAgICAgICAgICAgID0gSVAyX1RUWV9NQUpPUjsKIAlpcDJfdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgICAgICAgICAgPSAwOwpAQCAtNjgzLDcgKzY3Nyw3IEBACiAJaXAyX3R0eV9kcml2ZXItPnN1YnR5cGUgICAgICAgICAgICAgID0gU0VSSUFMX1RZUEVfTk9STUFMOwogCWlwMl90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgICAgICAgICA9IHR0eV9zdGRfdGVybWlvczsKIAlpcDJfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMHxDUzh8Q1JFQUR8SFVQQ0x8Q0xPQ0FMOwotCWlwMl90dHlfZHJpdmVyLT5mbGFncyAgICAgICAgICAgICAgICA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCWlwMl90dHlfZHJpdmVyLT5mbGFncyAgICAgICAgICAgICAgICA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhpcDJfdHR5X2RyaXZlciwgJmlwMl9vcHMpOwogCiAJaXAydHJhY2UgKElUUkNfTk9fUE9SVCwgSVRSQ19JTklULCAzLCAwICk7CkBAIC03MjQsMjYgKzcxOCw5IEBACiAJCQkJY2xhc3NfZGV2aWNlX2NyZWF0ZShpcDJfY2xhc3MsIE5VTEwsCiAJCQkJCQlNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSksCiAJCQkJCQlOVUxMLCAiaXBsJWQiLCBpKTsKLQkJCQllcnIgPSBkZXZmc19ta19jZGV2KE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpKSwKLQkJCQkJCVNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSUZDSFIsCi0JCQkJCQkiaXAyL2lwbCVkIiwgaSk7Ci0JCQkJaWYgKGVycikgewotCQkJCQljbGFzc19kZXZpY2VfZGVzdHJveShpcDJfY2xhc3MsCi0JCQkJCQlNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSkpOwotCQkJCQlnb3RvIG91dF9jbGFzczsKLQkJCQl9Ci0KIAkJCQljbGFzc19kZXZpY2VfY3JlYXRlKGlwMl9jbGFzcywgTlVMTCwKIAkJCQkJCU1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpICsgMSksCiAJCQkJCQlOVUxMLCAic3RhdCVkIiwgaSk7Ci0JCQkJZXJyID0gZGV2ZnNfbWtfY2RldihNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSArIDEpLAotCQkJCQkJU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JRkNIUiwKLQkJCQkJCSJpcDIvc3RhdCVkIiwgaSk7Ci0JCQkJaWYgKGVycikgewotCQkJCQljbGFzc19kZXZpY2VfZGVzdHJveShpcDJfY2xhc3MsCi0JCQkJCQlNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSArIDEpKTsKLQkJCQkJZ290byBvdXRfY2xhc3M7Ci0JCQkJfQogCiAJCQkgICAgZm9yICggYm94ID0gMDsgYm94IDwgQUJTX01BWF9CT1hFUzsgKytib3ggKQogCQkJICAgIHsKQEAgLTc3Niw3ICs3NTMsNyBAQAogCQkJCWlmIChoYXZlX3JlcXVlc3RlZF9pcnEoaXAyY29uZmlnLmlycVtpXSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCXJjID0gcmVxdWVzdF9pcnEoIGlwMmNvbmZpZy5pcnFbaV0sIGlwMl9pbnRlcnJ1cHQsCi0JCQkJCUlQMl9TQV9GTEFHUyB8IChpcDJjb25maWcudHlwZVtpXSA9PSBQQ0kgPyBTQV9TSElSUSA6IDApLAorCQkJCQlJUDJfU0FfRkxBR1MgfCAoaXAyY29uZmlnLnR5cGVbaV0gPT0gUENJID8gSVJRRl9TSEFSRUQgOiAwKSwKIAkJCQkJcGNOYW1lLCAodm9pZCAqKSZwY05hbWUpOwogCQkJCWlmIChyYykgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIklQMjogYW4gcmVxdWVzdF9pcnEgZmFpbGVkOiBlcnJvciAlZFxuIixyYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyNy1ydGMuYyBiL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCmluZGV4IDNhY2RhYzMuLmE0OGRhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCkBAIC0xOTYsNyArMTk2LDcgQEAKICAqCVRoZSB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucyB3ZSBzdXBwb3J0LgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Y19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pb2N0bAkJPSBydGNfaW9jdGwsCiAJLm9wZW4JCT0gcnRjX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCmluZGV4IGUxYzk1MzcuLjY4ZDdjNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCkBAIC0zMSw3ICszMSw2IEBACiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTQwLDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXBtaS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzY3LDcgKzc2NSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtaV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtaV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gaXBtaV9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC04MDQsOSArODAyLDYgQEAKIAlkZXZfdCBkZXYgPSBNS0RFVihpcG1pX21ham9yLCBpZl9udW0pOwogCXN0cnVjdCBpcG1pX3JlZ19saXN0ICplbnRyeTsKIAotCWRldmZzX21rX2NkZXYoZGV2LCBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCSAgICAgICJpcG1pZGV2LyVkIiwgaWZfbnVtKTsKLQogCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyeSkgewogCQlwcmludGsoS0VSTl9FUlIgImlwbWlfZGV2aW50ZjogVW5hYmxlIHRvIGNyZWF0ZSB0aGUiCkBAIC04MzYsNyArODMxLDYgQEAKIAl9CiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koaXBtaV9jbGFzcywgZGV2KTsKIAltdXRleF91bmxvY2soJnJlZ19saXN0X211dGV4KTsKLQlkZXZmc19yZW1vdmUoImlwbWlkZXYvJWQiLCBpZl9udW0pOwogfQogCiBzdGF0aWMgc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgc21pX3dhdGNoZXIgPQpAQCAtODcyLDggKzg2Niw2IEBACiAJCWlwbWlfbWFqb3IgPSBydjsKIAl9CiAKLQlkZXZmc19ta19kaXIoREVWSUNFX05BTUUpOwotCiAJcnYgPSBpcG1pX3NtaV93YXRjaGVyX3JlZ2lzdGVyKCZzbWlfd2F0Y2hlcik7CiAJaWYgKHJ2KSB7CiAJCXVucmVnaXN0ZXJfY2hyZGV2KGlwbWlfbWFqb3IsIERFVklDRV9OQU1FKTsKQEAgLTg5OCw3ICs4OTAsNiBAQAogCW11dGV4X3VubG9jaygmcmVnX2xpc3RfbXV0ZXgpOwogCWNsYXNzX2Rlc3Ryb3koaXBtaV9jbGFzcyk7CiAJaXBtaV9zbWlfd2F0Y2hlcl91bnJlZ2lzdGVyKCZzbWlfd2F0Y2hlcik7Ci0JZGV2ZnNfcmVtb3ZlKERFVklDRV9OQU1FKTsKIAl1bnJlZ2lzdGVyX2NocmRldihpcG1pX21ham9yLCBERVZJQ0VfTkFNRSk7CiB9CiBtb2R1bGVfZXhpdChjbGVhbnVwX2lwbWkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwppbmRleCA4M2VkNmFlLi4wYWE1ZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYwpAQCAtMzEsNyArMzEsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTM3MzgsMTEgKzM3MzcsOCBAQAogCXByb2NfaXBtaV9yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKLQlpbml0X3RpbWVyKCZpcG1pX3RpbWVyKTsKLQlpcG1pX3RpbWVyLmRhdGEgPSAwOwotCWlwbWlfdGltZXIuZnVuY3Rpb24gPSBpcG1pX3RpbWVvdXQ7Ci0JaXBtaV90aW1lci5leHBpcmVzID0gamlmZmllcyArIElQTUlfVElNRU9VVF9KSUZGSUVTOwotCWFkZF90aW1lcigmaXBtaV90aW1lcik7CisJc2V0dXBfdGltZXIoJmlwbWlfdGltZXIsIGlwbWlfdGltZW91dCwgMCk7CisJbW9kX3RpbWVyKCZpcG1pX3RpbWVyLCBqaWZmaWVzICsgSVBNSV9USU1FT1VUX0pJRkZJRVMpOwogCiAJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LCAmcGFuaWNfYmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKaW5kZXggZDBiNWMwOC4uOGQ5NDFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwpAQCAtMzEsNyArMzEsNiBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMTAxYzE0Yi4uZjU3ZWJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTM4LDcgKzM4LDYgQEAKICAqIGFuZCBkcml2ZXMgdGhlIHJlYWwgU01JIHN0YXRlIG1hY2hpbmUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTUsMjMgKzU0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwotI2luY2x1ZGUgPGxpbnV4L2hydGltZS5oPgotIyBpZiBkZWZpbmVkKHNjaGVkdWxlX25leHRfaW50KQotLyogT2xkIGhpZ2gtcmVzIHRpbWVyIGNvZGUsIGRvIHRyYW5zbGF0aW9ucy4gKi8KLSMgIGRlZmluZSBnZXRfYXJjaF9jeWNsZXMoYSkgcXVpY2tfdXBkYXRlX2ppZmZpZXNfc3ViKGEpCi0jICBkZWZpbmUgYXJjaF9jeWNsZXNfcGVyX2ppZmZ5IGN5Y2xlc19wZXJfamlmZmllcwotIyBlbmRpZgotc3RhdGljIGlubGluZSB2b2lkIGFkZF91c2VjX3RvX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0LCBsb25nIHYpCi17Ci0JdC0+YXJjaF9jeWNsZV9leHBpcmVzICs9IG5zZWNfdG9fYXJjaF9jeWNsZSh2ICogMTAwMCk7Ci0Jd2hpbGUgKHQtPmFyY2hfY3ljbGVfZXhwaXJlcyA+PSBhcmNoX2N5Y2xlc19wZXJfamlmZnkpCi0JewotCQl0LT5leHBpcmVzKys7Ci0JCXQtPmFyY2hfY3ljbGVfZXhwaXJlcyAtPSBhcmNoX2N5Y2xlc19wZXJfamlmZnk7Ci0JfQotfQotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcG1pX3NtaS5oPgpAQCAtMjQzLDggKzIyNSw2IEBACiAJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmeGFjdGlvbl9ub3RpZmllcl9saXN0LCBuYik7CiB9CiAKLXN0YXRpYyB2b2lkIHNpX3Jlc3RhcnRfc2hvcnRfdGltZXIoc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbyk7Ci0KIHN0YXRpYyB2b2lkIGRlbGl2ZXJfcmVjdl9tc2coc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbywKIAkJCSAgICAgc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKQogewpAQCAtNzY4LDcgKzc0OCw2IEBACiAJICAgICYmIChzbWlfaW5mby0+Y3Vycl9tc2cgPT0gTlVMTCkpCiAJewogCQlzdGFydF9uZXh0X21zZyhzbWlfaW5mbyk7Ci0JCXNpX3Jlc3RhcnRfc2hvcnRfdGltZXIoc21pX2luZm8pOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoc21pX2luZm8tPnNpX2xvY2spLCBmbGFncyk7CiB9CkBAIC04MzMsMzcgKzgxMiw2IEBACiAKIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOwogCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgb2ZmIGFuZCB3aXRoIHRoZSBzaV9sb2NrIGhlbGQuICovCi1zdGF0aWMgdm9pZCBzaV9yZXN0YXJ0X3Nob3J0X3RpbWVyKHN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8pCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfSElHSF9SRVNfVElNRVJTKQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBqaWZmaWVzX25vdzsKLQl1bnNpZ25lZCBsb25nIHNlcTsKLQotCWlmIChkZWxfdGltZXIoJihzbWlfaW5mby0+c2lfdGltZXIpKSkgewotCQkvKiBJZiB3ZSBkb24ndCBkZWxldGUgdGhlIHRpbWVyLCB0aGVuIGl0IHdpbGwgZ28gb2ZmCi0JCSAgIGltbWVkaWF0ZWx5LCBhbnl3YXkuICBTbyB3ZSBvbmx5IHByb2Nlc3MgaWYgd2UKLQkJICAgYWN0dWFsbHkgZGVsZXRlIHRoZSB0aW1lci4gKi8KLQotCQlkbyB7Ci0JCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkJCWppZmZpZXNfbm93ID0gamlmZmllczsKLQkJCXNtaV9pbmZvLT5zaV90aW1lci5leHBpcmVzID0gamlmZmllc19ub3c7Ci0JCQlzbWlfaW5mby0+c2lfdGltZXIuYXJjaF9jeWNsZV9leHBpcmVzCi0JCQkJPSBnZXRfYXJjaF9jeWNsZXMoamlmZmllc19ub3cpOwotCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKLQotCQlhZGRfdXNlY190b190aW1lcigmc21pX2luZm8tPnNpX3RpbWVyLCBTSV9TSE9SVF9USU1FT1VUX1VTRUMpOwotCi0JCWFkZF90aW1lcigmKHNtaV9pbmZvLT5zaV90aW1lcikpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc21pX2luZm8tPmNvdW50X2xvY2ssIGZsYWdzKTsKLQkJc21pX2luZm8tPnRpbWVvdXRfcmVzdGFydHMrKzsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21pX2luZm8tPmNvdW50X2xvY2ssIGZsYWdzKTsKLQl9Ci0jZW5kaWYKLX0KLQogc3RhdGljIHZvaWQgc21pX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzbWlfaW5mbyAgICpzbWlfaW5mbyA9IChzdHJ1Y3Qgc21pX2luZm8gKikgZGF0YTsKQEAgLTkwNCwzMSArODUyLDE1IEBACiAJLyogSWYgdGhlIHN0YXRlIG1hY2hpbmUgYXNrcyBmb3IgYSBzaG9ydCBkZWxheSwgdGhlbiBzaG9ydGVuCiAgICAgICAgICAgIHRoZSB0aW1lciB0aW1lb3V0LiAqLwogCWlmIChzbWlfcmVzdWx0ID09IFNJX1NNX0NBTExfV0lUSF9ERUxBWSkgewotI2lmIGRlZmluZWQoQ09ORklHX0hJR0hfUkVTX1RJTUVSUykKLQkJdW5zaWduZWQgbG9uZyBzZXE7Ci0jZW5kaWYKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNtaV9pbmZvLT5jb3VudF9sb2NrLCBmbGFncyk7CiAJCXNtaV9pbmZvLT5zaG9ydF90aW1lb3V0cysrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbWlfaW5mby0+Y291bnRfbG9jaywgZmxhZ3MpOwotI2lmIGRlZmluZWQoQ09ORklHX0hJR0hfUkVTX1RJTUVSUykKLQkJZG8gewotCQkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JCQlzbWlfaW5mby0+c2lfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7Ci0JCQlzbWlfaW5mby0+c2lfdGltZXIuYXJjaF9jeWNsZV9leHBpcmVzCi0JCQkJPSBnZXRfYXJjaF9jeWNsZXMoc21pX2luZm8tPnNpX3RpbWVyLmV4cGlyZXMpOwotCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKLQkJYWRkX3VzZWNfdG9fdGltZXIoJnNtaV9pbmZvLT5zaV90aW1lciwgU0lfU0hPUlRfVElNRU9VVF9VU0VDKTsKLSNlbHNlCiAJCXNtaV9pbmZvLT5zaV90aW1lci5leHBpcmVzID0gamlmZmllcyArIDE7Ci0jZW5kaWYKIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc21pX2luZm8tPmNvdW50X2xvY2ssIGZsYWdzKTsKIAkJc21pX2luZm8tPmxvbmdfdGltZW91dHMrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21pX2luZm8tPmNvdW50X2xvY2ssIGZsYWdzKTsKIAkJc21pX2luZm8tPnNpX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgU0lfVElNRU9VVF9KSUZGSUVTOwotI2lmIGRlZmluZWQoQ09ORklHX0hJR0hfUkVTX1RJTUVSUykKLQkJc21pX2luZm8tPnNpX3RpbWVyLmFyY2hfY3ljbGVfZXhwaXJlcyA9IDA7Ci0jZW5kaWYKIAl9CiAKICBkb19hZGRfdGltZXI6CkBAIC0xMTA5LDcgKzEwNDEsNyBAQAogCWlmIChpbmZvLT5zaV90eXBlID09IFNJX0JUKSB7CiAJCXJ2ID0gcmVxdWVzdF9pcnEoaW5mby0+aXJxLAogCQkJCSBzaV9idF9pcnFfaGFuZGxlciwKLQkJCQkgU0FfSU5URVJSVVBULAorCQkJCSBJUlFGX0RJU0FCTEVELAogCQkJCSBERVZJQ0VfTkFNRSwKIAkJCQkgaW5mbyk7CiAJCWlmICghcnYpCkBAIC0xMTE5LDcgKzEwNTEsNyBAQAogCX0gZWxzZQogCQlydiA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwKIAkJCQkgc2lfaXJxX2hhbmRsZXIsCi0JCQkJIFNBX0lOVEVSUlVQVCwKKwkJCQkgSVJRRl9ESVNBQkxFRCwKIAkJCQkgREVWSUNFX05BTUUsCiAJCQkJIGluZm8pOwogCWlmIChydikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCmluZGV4IDhmODg2NzEuLmFjY2FhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pcG1pLmg+CkBAIC04MDgsNyArODA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtaV93ZG9nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG1pX3dkb2dfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5yZWFkICAgID0gaXBtaV9yZWFkLAogCS5wb2xsICAgID0gaXBtaV9wb2xsLApAQCAtOTQ5LDkgKzk0OCwxMCBAQAogCQkJLyogRGlzYWJsZSB0aGUgV0RUIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duLiAqLwogCQkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9OT05FOwogCQkJcGFuaWNfaGFsdF9pcG1pX3NldF90aW1lb3V0KCk7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSBpZiAoaXBtaV93YXRjaGRvZ19zdGF0ZSAhPSBXRE9HX1RJTUVPVVRfTk9ORSkgewogCQkJLyogU2V0IGEgbG9uZyB0aW1lciB0byBsZXQgdGhlIHJlYm9vdCBoYXBwZW5zLCBidXQKLQkJCSAgIHJlYm9vdCBpZiBpdCBoYW5ncy4gKi8KKwkJCSAgIHJlYm9vdCBpZiBpdCBoYW5ncywgYnV0IG9ubHkgaWYgdGhlIHdhdGNoZG9nCisJCQkgICB0aW1lciB3YXMgYWxyZWFkeSBydW5uaW5nLiAqLwogCQkJdGltZW91dCA9IDEyMDsKIAkJCXByZXRpbWVvdXQgPSAwOwogCQkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9SRVNFVDsKQEAgLTk3MywxNiArOTczLDE3IEBACiB7CiAJc3RhdGljIGludCBwYW5pY19ldmVudF9oYW5kbGVkID0gMDsKIAotCS8qIE9uIGEgcGFuaWMsIGlmIHdlIGhhdmUgYSBwYW5pYyB0aW1lb3V0LCBtYWtlIHN1cmUgdGhhdCB0aGUgdGhpbmcKLQkgICByZWJvb3RzLCBldmVuIGlmIGl0IGhhbmdzIGR1cmluZyB0aGF0IHBhbmljLiAqLwotCWlmICh3YXRjaGRvZ191c2VyICYmICFwYW5pY19ldmVudF9oYW5kbGVkKSB7Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgcGFuaWMgZG9lc24ndCBoYW5nLCBhbmQgbWFrZSBzdXJlIHdlCi0JCSAgIGRvIHRoaXMgb25seSBvbmNlLiAqLworCS8qIE9uIGEgcGFuaWMsIGlmIHdlIGhhdmUgYSBwYW5pYyB0aW1lb3V0LCBtYWtlIHN1cmUgdG8gZXh0ZW5kCisJICAgdGhlIHdhdGNoZG9nIHRpbWVyIHRvIGEgcmVhc29uYWJsZSB2YWx1ZSB0byBjb21wbGV0ZSB0aGUKKwkgICBwYW5pYywgaWYgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIHJ1bm5pbmcuICBQbHVzIHRoZQorCSAgIHByZXRpbWVvdXQgaXMgbWVhbmluZ2xlc3MgYXQgcGFuaWMgdGltZS4gKi8KKwlpZiAod2F0Y2hkb2dfdXNlciAmJiAhcGFuaWNfZXZlbnRfaGFuZGxlZCAmJgorCSAgICBpcG1pX3dhdGNoZG9nX3N0YXRlICE9IFdET0dfVElNRU9VVF9OT05FKSB7CisJCS8qIE1ha2Ugc3VyZSB3ZSBkbyB0aGlzIG9ubHkgb25jZS4gKi8KIAkJcGFuaWNfZXZlbnRfaGFuZGxlZCA9IDE7CiAJICAgIAogCQl0aW1lb3V0ID0gMjU1OwogCQlwcmV0aW1lb3V0ID0gMDsKLQkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9SRVNFVDsKIAkJcGFuaWNfaGFsdF9pcG1pX3NldF90aW1lb3V0KCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKaW5kZXggZWZhYWExOS4uOTEzYmUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiSVNJQ09NOiBGYWlsZWQgdG8gbG9jayBDYXJkICgweCVseClcbiIsCiAJCWNhcmQtPmJhc2UpOwogCi0JcmV0dXJuIDA7CS8qIEZhaWxlZCB0byBhcXVpcmUgdGhlIGNhcmQhICovCisJcmV0dXJuIDA7CS8qIEZhaWxlZCB0byBhY3F1aXJlIHRoZSBjYXJkISAqLwogfQogCiBzdGF0aWMgaW50IGxvY2tfY2FyZF9hdF9pbnRlcnJ1cHQoc3RydWN0IGlzaV9ib2FyZCAqY2FyZCkKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBjYXJkLT5mbGFncyk7CiAJfQogCS8qIEZhaWxpbmcgaW4gaW50ZXJydXB0IGlzIGFuIGFjY2VwdGFibGUgZXZlbnQgKi8KLQlyZXR1cm4gMDsJLyogRmFpbGVkIHRvIGFxdWlyZSB0aGUgY2FyZCEgKi8KKwlyZXR1cm4gMDsJLyogRmFpbGVkIHRvIGFjcXVpcmUgdGhlIGNhcmQhICovCiB9CiAKIHN0YXRpYyB2b2lkIHVubG9ja19jYXJkKHN0cnVjdCBpc2lfYm9hcmQgKmNhcmQpCkBAIC0xNTgxLDcgKzE1ODEsNiBAQAogCiAJaXNpY29tX25vcm1hbC0+b3duZXIJCQk9IFRISVNfTU9EVUxFOwogCWlzaWNvbV9ub3JtYWwtPm5hbWUgCQkJPSAidHR5TSI7Ci0JaXNpY29tX25vcm1hbC0+ZGV2ZnNfbmFtZQkgCT0gImlzaWNvbS8iOwogCWlzaWNvbV9ub3JtYWwtPm1ham9yCQkJPSBJU0lDT01fTk1BSk9SOwogCWlzaWNvbV9ub3JtYWwtPm1pbm9yX3N0YXJ0CQk9IDA7CiAJaXNpY29tX25vcm1hbC0+dHlwZQkJCT0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKQEAgLTE2MTUsMTQgKzE2MTQsMTQgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGlzaV9ib2FyZCAqYm9hcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IFNBX0lOVEVSUlVQVDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9ESVNBQkxFRDsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAogCWlmICghYm9hcmQtPmJhc2UpCiAJCWdvdG8gZW5kOwogCiAJaWYgKGJvYXJkLT5pc2EgPT0gTk8pCi0JCWlycWZsYWdzIHw9IFNBX1NISVJROworCQlpcnFmbGFncyB8PSBJUlFGX1NIQVJFRDsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGJvYXJkLT5pcnEsIGlzaWNvbV9pbnRlcnJ1cHQsIGlycWZsYWdzLAogCQlJU0lDT01fTkFNRSwgYm9hcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IGVmMjBjMWYuLjg0ZGZjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMzksMTYgKzM4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vpc2EuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xMzcsNiArMTM0LDEwIEBACiAKIHN0YXRpYyBpbnQJc3RsaV9ucmJyZHMgPSBBUlJBWV9TSVpFKHN0bGlfYnJkY29uZik7CiAKKy8qIHN0bGlfbG9jayBtdXN0IE5PVCBiZSB0YWtlbiBob2xkaW5nIGJyZF9sb2NrICovCitzdGF0aWMgc3BpbmxvY2tfdCBzdGxpX2xvY2s7CS8qIFRUWSBsb2dpYyBsb2NrICovCitzdGF0aWMgc3BpbmxvY2tfdCBicmRfbG9jazsJLyogQm9hcmQgbG9naWMgbG9jayAqLworCiAvKgogICoJVGhlcmUgaXMgc29tZSBleHBlcmltZW50YWwgRUlTQSBib2FyZCBkZXRlY3Rpb24gY29kZSBpbiB0aGlzIGRyaXZlci4KICAqCUJ5IGRlZmF1bHQgaXQgaXMgZGlzYWJsZWQsIGJ1dCBmb3IgdGhvc2UgdGhhdCB3YW50IHRvIHRyeSBpdCBvdXQsCkBAIC0xNzMsMTQgKzE3NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlcgkqc3RsaV9zZXJpYWw7CiAKLS8qCi0gKglXZSB3aWxsIG5lZWQgdG8gYWxsb2NhdGUgYSB0ZW1wb3Jhcnkgd3JpdGUgYnVmZmVyIGZvciBjaGFycyB0aGF0Ci0gKgljb21lIGRpcmVjdCBmcm9tIHVzZXIgc3BhY2UuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYSBjb3B5IGZyb20gdXNlcgotICoJc3BhY2UgbWlnaHQgY2F1c2UgYSBwYWdlIGZhdWx0ICh0eXBpY2FsbHkgb24gYSBzeXN0ZW0gdGhhdCBpcwotICoJc3dhcHBpbmchKS4gQWxsIHBvcnRzIHdpbGwgc2hhcmUgb25lIGJ1ZmZlciAtIHNpbmNlIGlmIHRoZSBzeXN0ZW0KLSAqCWlzIGFscmVhZHkgc3dhcHBpbmcgYSBzaGFyZWQgYnVmZmVyIHdvbid0IG1ha2UgdGhpbmdzIGFueSB3b3JzZS4KLSAqLwotc3RhdGljIGNoYXIJCQkqc3RsaV90bXB3cml0ZWJ1ZjsKIAogI2RlZmluZQlTVExJX1RYQlVGU0laRQkJNDA5NgogCkBAIC0yODgsNyArMjgxLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgTU9EVUxFCiAvKgogICoJRGVmaW5lIHNvbWUgc3RyaW5nIGxhYmVscyBmb3IgYXJndW1lbnRzIHBhc3NlZCBmcm9tIHRoZSBtb2R1bGUKICAqCWxvYWQgbGluZS4gVGhlc2UgYWxsb3cgZm9yIGVhc3kgYm9hcmQgZGVmaW5pdGlvbnMsIGFuZCBlYXN5CkBAIC0zODcsOCArMzc5LDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShib2FyZDMsIGNoYXJwLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYm9hcmQzLCAiQm9hcmQgMyBjb25maWcgLT4gbmFtZVssaW9hZGRyWyxtZW1hZGRyXSIpOwogCi0jZW5kaWYKLQogLyoKICAqCVNldCB1cCBhIGRlZmF1bHQgbWVtb3J5IGFkZHJlc3MgdGFibGUgZm9yIEVJU0EgYm9hcmQgcHJvYmluZy4KICAqCVRoZSBkZWZhdWx0IGFkZHJlc3NlcyBhcmUgYWxsIGJlbGxvdyAxTWJ5dGUsIHdoaWNoIGhhcyB0byBiZSB0aGUKQEAgLTQxOSw3ICs0MDksNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpc3RhbGxpb25fcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9TVEFMTElPTiwgUENJX0RFVklDRV9JRF9FQ1JBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1RBTExJT04sIFBDSV9ERVZJQ0VfSURfRUNSQSksIH0sCiAJeyAwIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXN0YWxsaW9uX3BjaV90YmwpOwpAQCAtNjQ5LDE0ICs2MzksOCBAQAogICoJUHJvdG90eXBlIGFsbCBmdW5jdGlvbnMgaW4gdGhpcyBkcml2ZXIhCiAgKi8KIAotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQJc3RsaV9hcmdicmRzKHZvaWQpOwogc3RhdGljIGludAlzdGxpX3BhcnNlYnJkKHN0bGNvbmZfdCAqY29uZnAsIGNoYXIgKiphcmdwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcJc3RsaV9hdG9sKGNoYXIgKnN0cik7Ci0jZW5kaWYKLQotaW50CQlzdGxpX2luaXQodm9pZCk7CitzdGF0aWMgaW50CXN0bGlfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQJc3RsaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkCXN0bGlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIGludAlzdGxpX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTY4Miw3ICs2NjYsNyBAQAogc3RhdGljIHNzaXplX3QJc3RsaV9tZW1yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApOwogc3RhdGljIHNzaXplX3QJc3RsaV9tZW13cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKTsKIHN0YXRpYyBpbnQJc3RsaV9tZW1pb2N0bChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkCXN0bGlfYnJkcG9sbChzdGxpYnJkX3QgKmJyZHAsIHZvbGF0aWxlIGNka2hkcl90ICpoZHJwKTsKK3N0YXRpYyB2b2lkCXN0bGlfYnJkcG9sbChzdGxpYnJkX3QgKmJyZHAsIGNka2hkcl90IF9faW9tZW0gKmhkcnApOwogc3RhdGljIHZvaWQJc3RsaV9wb2xsKHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQJc3RsaV9ob3N0Y21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHApOwogc3RhdGljIGludAlzdGxpX2luaXRvcGVuKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHApOwpAQCAtNjkzLDcgKzY3Nyw4IEBACiBzdGF0aWMgaW50CXN0bGlfc2V0cG9ydChzdGxpcG9ydF90ICpwb3J0cCk7CiBzdGF0aWMgaW50CXN0bGlfY21kd2FpdChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKIHN0YXRpYyB2b2lkCXN0bGlfc2VuZGNtZChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKLXN0YXRpYyB2b2lkCXN0bGlfZG9kZWxheWNtZChzdGxpcG9ydF90ICpwb3J0cCwgdm9sYXRpbGUgY2RrY3RybF90ICpjcCk7CitzdGF0aWMgdm9pZAlfX3N0bGlfc2VuZGNtZChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKK3N0YXRpYyB2b2lkCXN0bGlfZG9kZWxheWNtZChzdGxpcG9ydF90ICpwb3J0cCwgY2RrY3RybF90IF9faW9tZW0gKmNwKTsKIHN0YXRpYyB2b2lkCXN0bGlfbWthc3lwb3J0KHN0bGlwb3J0X3QgKnBvcnRwLCBhc3lwb3J0X3QgKnBwLCBzdHJ1Y3QgdGVybWlvcyAqdGlvc3ApOwogc3RhdGljIHZvaWQJc3RsaV9ta2FzeXNpZ3MoYXN5c2lnc190ICpzcCwgaW50IGR0ciwgaW50IHJ0cyk7CiBzdGF0aWMgbG9uZwlzdGxpX21rdGlvY20odW5zaWduZWQgbG9uZyBzaWd2YWx1ZSk7CkBAIC03NjMsNyArNzQ4LDcgQEAKICAqCXdpbGwgZ2l2ZSBhY2Nlc3MgdG8gdGhlIHNoYXJlZCBtZW1vcnkgb24gdGhlIFN0YWxsaW9uIGludGVsbGlnZW50CiAgKglib2FyZC4gVGhpcyBpcyBhbHNvIGEgdmVyeSB1c2VmdWwgZGVidWdnaW5nIHRvb2wuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCXN0bGlfZnNpb21lbSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCXN0bGlfZnNpb21lbSA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gc3RsaV9tZW1yZWFkLAogCS53cml0ZQkJPSBzdGxpX21lbXdyaXRlLApAQCAtNzkxLDI2ICs3NzYsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqaXN0YWxsaW9uX2NsYXNzOwogCi0jaWZkZWYgTU9EVUxFCi0KIC8qCiAgKglMb2FkYWJsZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gc3R1ZmYuCiAgKi8KIAogc3RhdGljIGludCBfX2luaXQgaXN0YWxsaW9uX21vZHVsZV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJpbml0X21vZHVsZSgpXG4iKTsKLSNlbmRpZgotCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CiAJc3RsaV9pbml0KCk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7Ci0KLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgxOSw1NiArNzkyLDQzIEBACiB7CiAJc3RsaWJyZF90CSpicmRwOwogCXN0bGlwb3J0X3QJKnBvcnRwOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50CQlpLCBqOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoImNsZWFudXBfbW9kdWxlKClcbiIpOwotI2VuZGlmCi0KIAlwcmludGsoS0VSTl9JTkZPICJVbmxvYWRpbmcgJXM6IHZlcnNpb24gJXNcbiIsIHN0bGlfZHJ2dGl0bGUsCiAJCXN0bGlfZHJ2dmVyc2lvbik7CiAKLQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQljbGkoKTsKLQotLyoKLSAqCUZyZWUgdXAgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMgdXNlZCBieSB0aGUgcG9ydHMuIFRoaXMgaW5jbHVkZXMKLSAqCW1lbW9yeSBhbmQgaW50ZXJydXB0cy4KLSAqLworCS8qCisJICoJRnJlZSB1cCBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBwb3J0cy4gVGhpcyBpbmNsdWRlcworCSAqCW1lbW9yeSBhbmQgaW50ZXJydXB0cy4KKwkgKi8KIAlpZiAoc3RsaV90aW1lcm9uKSB7CiAJCXN0bGlfdGltZXJvbiA9IDA7Ci0JCWRlbF90aW1lcigmc3RsaV90aW1lcmxpc3QpOworCQlkZWxfdGltZXJfc3luYygmc3RsaV90aW1lcmxpc3QpOwogCX0KIAogCWkgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RsaV9zZXJpYWwpOwogCWlmIChpKSB7CiAJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byB1bi1yZWdpc3RlciB0dHkgZHJpdmVyLCAiCiAJCQkiZXJybm89JWRcbiIsIC1pKTsKLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJcHV0X3R0eV9kcml2ZXIoc3RsaV9zZXJpYWwpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJZGV2ZnNfcmVtb3ZlKCJzdGFsaW9tZW0vJWQiLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQljbGFzc19kZXZpY2VfZGVzdHJveShpc3RhbGxpb25fY2xhc3MsIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSkpOwotCX0KLQlkZXZmc19yZW1vdmUoInN0YWxpb21lbSIpOwogCWNsYXNzX2Rlc3Ryb3koaXN0YWxsaW9uX2NsYXNzKTsKIAlpZiAoKGkgPSB1bnJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iKSkpCiAJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byB1bi1yZWdpc3RlciBzZXJpYWwgbWVtb3J5IGRldmljZSwgIgogCQkJImVycm5vPSVkXG4iLCAtaSk7CiAKLQlrZnJlZShzdGxpX3RtcHdyaXRlYnVmKTsKIAlrZnJlZShzdGxpX3R4Y29va2J1Zik7CiAKIAlmb3IgKGkgPSAwOyAoaSA8IHN0bGlfbnJicmRzKTsgaSsrKSB7Ci0JCWlmICgoYnJkcCA9IHN0bGlfYnJkc1tpXSkgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQorCQlpZiAoKGJyZHAgPSBzdGxpX2JyZHNbaV0pID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJZm9yIChqID0gMDsgKGogPCBTVExfTUFYUE9SVFMpOyBqKyspIHsKIAkJCXBvcnRwID0gYnJkcC0+cG9ydHNbal07Ci0JCQlpZiAocG9ydHAgIT0gKHN0bGlwb3J0X3QgKikgTlVMTCkgewotCQkJCWlmIChwb3J0cC0+dHR5ICE9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKQorCQkJaWYgKHBvcnRwICE9IE5VTEwpIHsKKwkJCQlpZiAocG9ydHAtPnR0eSAhPSBOVUxMKQogCQkJCQl0dHlfaGFuZ3VwKHBvcnRwLT50dHkpOwogCQkJCWtmcmVlKHBvcnRwKTsKIAkJCX0KQEAgLTg3OCwxMCArODM4LDggQEAKIAkJaWYgKGJyZHAtPmlvc2l6ZSA+IDApCiAJCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7CiAJCWtmcmVlKGJyZHApOwotCQlzdGxpX2JyZHNbaV0gPSAoc3RsaWJyZF90ICopIE5VTEw7CisJCXN0bGlfYnJkc1tpXSA9IE5VTEw7CiAJfQotCi0JcmVzdG9yZV9mbGFncyhmbGFncyk7CiB9CiAKIG1vZHVsZV9pbml0KGlzdGFsbGlvbl9tb2R1bGVfaW5pdCk7CkBAIC04OTUsMTkgKzg1MywxNSBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2FyZ2JyZHModm9pZCkKIHsKLQlzdGxjb25mX3QJY29uZjsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0JaW50CQlpOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bGlfYXJnYnJkcygpXG4iKTsKLSNlbmRpZgorCXN0bGNvbmZfdCBjb25mOworCXN0bGlicmRfdCAqYnJkcDsKKwlpbnQgaTsKIAogCWZvciAoaSA9IHN0bGlfbnJicmRzOyBpIDwgQVJSQVlfU0laRShzdGxpX2JyZHNwKTsgaSsrKSB7CiAJCW1lbXNldCgmY29uZiwgMCwgc2l6ZW9mKGNvbmYpKTsKIAkJaWYgKHN0bGlfcGFyc2VicmQoJmNvbmYsIHN0bGlfYnJkc3BbaV0pID09IDApCiAJCQljb250aW51ZTsKLQkJaWYgKChicmRwID0gc3RsaV9hbGxvY2JyZCgpKSA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlzdGxpX25yYnJkcyA9IGkgKyAxOwogCQlicmRwLT5icmRuciA9IGk7CkBAIC05MjYsOSArODgwLDkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RsaV9hdG9sKGNoYXIgKnN0cikKIHsKLQl1bnNpZ25lZCBsb25nCXZhbDsKLQlpbnQJCWJhc2UsIGM7Ci0JY2hhcgkJKnNwOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBiYXNlLCBjOworCWNoYXIgKnNwOwogCiAJdmFsID0gMDsKIAlzcCA9IHN0cjsKQEAgLTk2MiwxNSArOTE2LDExIEBACiAKIHN0YXRpYyBpbnQgc3RsaV9wYXJzZWJyZChzdGxjb25mX3QgKmNvbmZwLCBjaGFyICoqYXJncCkKIHsKLQljaGFyCSpzcDsKLQlpbnQJaTsKKwljaGFyICpzcDsKKwlpbnQgaTsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3BhcnNlYnJkKGNvbmZwPSV4LGFyZ3A9JXgpXG4iLCAoaW50KSBjb25mcCwgKGludCkgYXJncCk7Ci0jZW5kaWYKLQotCWlmICgoYXJncFswXSA9PSAoY2hhciAqKSBOVUxMKSB8fCAoKmFyZ3BbMF0gPT0gMCkpCi0JCXJldHVybigwKTsKKwlpZiAoYXJncFswXSA9PSBOVUxMIHx8ICphcmdwWzBdID09IDApCisJCXJldHVybiAwOwogCiAJZm9yIChzcCA9IGFyZ3BbMF0sIGkgPSAwOyAoKCpzcCAhPSAwKSAmJiAoaSA8IDI1KSk7IHNwKyssIGkrKykKIAkJKnNwID0gVE9MT1dFUigqc3ApOwpAQCAtOTg1LDQ3ICs5MzUsNDAgQEAKIAl9CiAKIAljb25mcC0+YnJkdHlwZSA9IHN0bGlfYnJkc3RyW2ldLnR5cGU7Ci0JaWYgKChhcmdwWzFdICE9IChjaGFyICopIE5VTEwpICYmICgqYXJncFsxXSAhPSAwKSkKKwlpZiAoYXJncFsxXSAhPSBOVUxMICYmICphcmdwWzFdICE9IDApCiAJCWNvbmZwLT5pb2FkZHIxID0gc3RsaV9hdG9sKGFyZ3BbMV0pOwotCWlmICgoYXJncFsyXSAhPSAoY2hhciAqKSBOVUxMKSAmJiAoKmFyZ3BbMl0gIT0gMCkpCisJaWYgKGFyZ3BbMl0gIT0gIE5VTEwgJiYgKmFyZ3BbMl0gIT0gMCkKIAkJY29uZnAtPm1lbWFkZHIgPSBzdGxpX2F0b2woYXJncFsyXSk7CiAJcmV0dXJuKDEpOwogfQogCi0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IHN0bGlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0Jc3RsaXBvcnRfdAkqcG9ydHA7Ci0JdW5zaWduZWQgaW50CW1pbm9yZGV2OwotCWludAkJYnJkbnIsIHBvcnRuciwgcmM7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV9vcGVuKHR0eT0leCxmaWxwPSV4KTogZGV2aWNlPSVzXG4iLCAoaW50KSB0dHksCi0JCShpbnQpIGZpbHAsIHR0eS0+bmFtZSk7Ci0jZW5kaWYKKwlzdGxpYnJkX3QgKmJyZHA7CisJc3RsaXBvcnRfdCAqcG9ydHA7CisJdW5zaWduZWQgaW50IG1pbm9yZGV2OworCWludCBicmRuciwgcG9ydG5yLCByYzsKIAogCW1pbm9yZGV2ID0gdHR5LT5pbmRleDsKIAlicmRuciA9IE1JTk9SMkJSRChtaW5vcmRldik7CiAJaWYgKGJyZG5yID49IHN0bGlfbnJicmRzKQotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCWJyZHAgPSBzdGxpX2JyZHNbYnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOworCWlmIChicmRwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCWlmICgoYnJkcC0+c3RhdGUgJiBCU1RfU1RBUlRFRCkgPT0gMCkKLQkJcmV0dXJuKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAlwb3J0bnIgPSBNSU5PUjJQT1JUKG1pbm9yZGV2KTsKIAlpZiAoKHBvcnRuciA8IDApIHx8IChwb3J0bnIgPiBicmRwLT5ucnBvcnRzKSkKLQkJcmV0dXJuKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXBvcnRwID0gYnJkcC0+cG9ydHNbcG9ydG5yXTsKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOworCWlmIChwb3J0cCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAocG9ydHAtPmRldm5yIDwgMSkKLQkJcmV0dXJuKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCiAvKgpAQCAtMTAzNyw4ICs5ODAsOCBAQAogCWlmIChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7CiAJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBvcnRwLT5jbG9zZV93YWl0KTsKIAkJaWYgKHBvcnRwLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCi0JCQlyZXR1cm4oLUVBR0FJTik7Ci0JCXJldHVybigtRVJFU1RBUlRTWVMpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCiAvKgpAQCAtMTA1NCw3ICs5OTcsNyBAQAogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfSU5JVElBTElaSU5HLCAmcG9ydHAtPnN0YXRlKSk7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4oLUVSRVNUQVJUU1lTKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmICgocG9ydHAtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpID09IDApIHsKIAkJc2V0X2JpdChTVF9JTklUSUFMSVpJTkcsICZwb3J0cC0+c3RhdGUpOwpAQCAtMTA2NSw3ICsxMDA4LDcgQEAKIAkJY2xlYXJfYml0KFNUX0lOSVRJQUxJWklORywgJnBvcnRwLT5zdGF0ZSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPnJhd193YWl0KTsKIAkJaWYgKHJjIDwgMCkKLQkJCXJldHVybihyYyk7CisJCQlyZXR1cm4gcmM7CiAJfQogCiAvKgpAQCAtMTA3Nyw4ICsxMDIwLDggQEAKIAlpZiAocG9ydHAtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0cC0+Y2xvc2Vfd2FpdCk7CiAJCWlmIChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQotCQkJcmV0dXJuKC1FQUdBSU4pOwotCQlyZXR1cm4oLUVSRVNUQVJUU1lTKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCX0KIAogLyoKQEAgLTEwODgsMzggKzEwMzEsMzMgQEAKICAqLwogCWlmICghKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewogCQlpZiAoKHJjID0gc3RsaV93YWl0Y2FycmllcihicmRwLCBwb3J0cCwgZmlscCkpICE9IDApCi0JCQlyZXR1cm4ocmMpOworCQkJcmV0dXJuIHJjOwogCX0KIAlwb3J0cC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgc3RsaV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0Jc3RsaXBvcnRfdAkqcG9ydHA7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX2Nsb3NlKHR0eT0leCxmaWxwPSV4KVxuIiwgKGludCkgdHR5LCAoaW50KSBmaWxwKTsKLSNlbmRpZgorCXN0bGlicmRfdCAqYnJkcDsKKwlzdGxpcG9ydF90ICpwb3J0cDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RsaXBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQljbGkoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RsaV9sb2NrLCBmbGFncyk7CiAJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkpIHsKLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0bGlfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAocG9ydHAtPnJlZmNvdW50ICE9IDEpKQogCQlwb3J0cC0+cmVmY291bnQgPSAxOwogCWlmIChwb3J0cC0+cmVmY291bnQtLSA+IDEpIHsKLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0bGlfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTM0LDYgKzEwNzIsOCBAQAogCWlmICh0dHkgPT0gc3RsaV90eGNvb2t0dHkpCiAJCXN0bGlfZmx1c2hjaGFycyh0dHkpOwogCXR0eS0+Y2xvc2luZyA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RsaV9sb2NrLCBmbGFncyk7CisKIAlpZiAocG9ydHAtPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkKIAkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIHBvcnRwLT5jbG9zaW5nX3dhaXQpOwogCkBAIC0xMTU3LDcgKzEwOTcsNyBAQAogCXN0bGlfZmx1c2hidWZmZXIodHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydHAtPnR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMOworCXBvcnRwLT50dHkgPSBOVUxMOwogCiAJaWYgKHBvcnRwLT5vcGVud2FpdGNudCkgewogCQlpZiAocG9ydHAtPmNsb3NlX2RlbGF5KQpAQCAtMTE2Nyw3ICsxMTA3LDYgQEAKIAogCXBvcnRwLT5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+Y2xvc2Vfd2FpdCk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExODIsNDUgKzExMjEsNDEgQEAKIAogc3RhdGljIGludCBzdGxpX2luaXRvcGVuKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHApCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKLQlhc3lub3RpZnlfdAkJbnQ7Ci0JYXN5cG9ydF90CQlhcG9ydDsKLQlpbnQJCQlyYzsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX2luaXRvcGVuKGJyZHA9JXgscG9ydHA9JXgpXG4iLCAoaW50KSBicmRwLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWFzeW5vdGlmeV90IG50OworCWFzeXBvcnRfdCBhcG9ydDsKKwlpbnQgcmM7CiAKIAlpZiAoKHJjID0gc3RsaV9yYXdvcGVuKGJyZHAsIHBvcnRwLCAwLCAxKSkgPCAwKQotCQlyZXR1cm4ocmMpOworCQlyZXR1cm4gcmM7CiAKIAltZW1zZXQoJm50LCAwLCBzaXplb2YoYXN5bm90aWZ5X3QpKTsKIAludC5kYXRhID0gKERUX1RYTE9XIHwgRFRfVFhFTVBUWSB8IERUX1JYQlVTWSB8IERUX1JYQlJFQUspOwogCW50LnNpZ25hbCA9IFNHX0RDRDsKIAlpZiAoKHJjID0gc3RsaV9jbWR3YWl0KGJyZHAsIHBvcnRwLCBBX1NFVE5PVElGWSwgJm50LAogCSAgICBzaXplb2YoYXN5bm90aWZ5X3QpLCAwKSkgPCAwKQotCQlyZXR1cm4ocmMpOworCQlyZXR1cm4gcmM7CiAKIAl0dHkgPSBwb3J0cC0+dHR5OwotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybigtRU5PREVWKTsKKwlpZiAodHR5ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCXN0bGlfbWthc3lwb3J0KHBvcnRwLCAmYXBvcnQsIHR0eS0+dGVybWlvcyk7CiAJaWYgKChyYyA9IHN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9TRVRQT1JULCAmYXBvcnQsCiAJICAgIHNpemVvZihhc3lwb3J0X3QpLCAwKSkgPCAwKQotCQlyZXR1cm4ocmMpOworCQlyZXR1cm4gcmM7CiAKIAlzZXRfYml0KFNUX0dFVFNJR1MsICZwb3J0cC0+c3RhdGUpOwogCWlmICgocmMgPSBzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfR0VUU0lHTkFMUywgJnBvcnRwLT5hc2lnLAogCSAgICBzaXplb2YoYXN5c2lnc190KSwgMSkpIDwgMCkKLQkJcmV0dXJuKHJjKTsKKwkJcmV0dXJuIHJjOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RfR0VUU0lHUywgJnBvcnRwLT5zdGF0ZSkpCiAJCXBvcnRwLT5zaWdzID0gc3RsaV9ta3Rpb2NtKHBvcnRwLT5hc2lnLnNpZ3ZhbHVlKTsKIAlzdGxpX21rYXN5c2lncygmcG9ydHAtPmFzaWcsIDEsIDEpOwogCWlmICgocmMgPSBzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfU0VUU0lHTkFMUywgJnBvcnRwLT5hc2lnLAogCSAgICBzaXplb2YoYXN5c2lnc190KSwgMCkpIDwgMCkKLQkJcmV0dXJuKHJjKTsKKwkJcmV0dXJuIHJjOwogCi0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjM0LDIyICsxMTY5LDE1IEBACiAKIHN0YXRpYyBpbnQgc3RsaV9yYXdvcGVuKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgd2FpdCkKIHsKLQl2b2xhdGlsZSBjZGtoZHJfdAkqaGRycDsKLQl2b2xhdGlsZSBjZGtjdHJsX3QJKmNwOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJpdHM7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JaW50CQkJcmM7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV9yYXdvcGVuKGJyZHA9JXgscG9ydHA9JXgsYXJnPSV4LHdhaXQ9JWQpXG4iLAotCQkoaW50KSBicmRwLCAoaW50KSBwb3J0cCwgKGludCkgYXJnLCB3YWl0KTsKLSNlbmRpZgorCWNka2hkcl90IF9faW9tZW0gKmhkcnA7CisJY2RrY3RybF90IF9faW9tZW0gKmNwOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqYml0czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKIAogLyoKICAqCVNlbmQgYSBtZXNzYWdlIHRvIHRoZSBzbGF2ZSB0byBvcGVuIHRoaXMgcG9ydC4KICAqLwotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOwogCiAvKgogICoJU2xhdmUgaXMgYWxyZWFkeSBjbG9zaW5nIHRoaXMgcG9ydC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgaGFuZ3VwCkBAIC0xMjYwLDcgKzExODgsNiBAQAogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfQ0xPU0lORywgJnBvcnRwLT5zdGF0ZSkpOwogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CiAKQEAgLTEyNjksMTkgKzExOTYsMjAgQEAKICAqCW1lbW9yeS4gT25jZSB0aGUgbWVzc2FnZSBpcyBpbiBzZXQgdGhlIHNlcnZpY2UgYml0cyB0byBzYXkgdGhhdAogICoJdGhpcyBwb3J0IHdhbnRzIHNlcnZpY2UuCiAgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAlFQlJERU5BQkxFKGJyZHApOwotCWNwID0gJigodm9sYXRpbGUgY2RrYXN5X3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcikpLT5jdHJsOwotCWNwLT5vcGVuYXJnID0gYXJnOwotCWNwLT5vcGVuID0gMTsKLQloZHJwID0gKHZvbGF0aWxlIGNka2hkcl90ICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgQ0RLX0NES0FERFIpOwotCWJpdHMgPSAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldCArCisJY3AgPSAmKChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpKS0+Y3RybDsKKwl3cml0ZWwoYXJnLCAmY3AtPm9wZW5hcmcpOworCXdyaXRlYigxLCAmY3AtPm9wZW4pOworCWhkcnAgPSAoY2RraGRyX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwliaXRzID0gKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldCArCiAJCXBvcnRwLT5wb3J0aWR4OwotCSpiaXRzIHw9IHBvcnRwLT5wb3J0Yml0OworCXdyaXRlYihyZWFkYihiaXRzKSB8IHBvcnRwLT5wb3J0Yml0LCBiaXRzKTsKIAlFQlJERElTQUJMRShicmRwKTsKIAogCWlmICh3YWl0ID09IDApIHsKLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7Ci0JCXJldHVybigwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAvKgpAQCAtMTI5MCwxNSArMTIxOCwxNiBAQAogICovCiAJcmMgPSAwOwogCXNldF9iaXQoU1RfT1BFTklORywgJnBvcnRwLT5zdGF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfT1BFTklORywgJnBvcnRwLT5zdGF0ZSkpOwogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmMgPSAtRVJFU1RBUlRTWVM7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CiAKIAlpZiAoKHJjID09IDApICYmIChwb3J0cC0+cmMgIT0gMCkpCiAJCXJjID0gLUVJTzsKLQlyZXR1cm4ocmMpOworCXJldHVybiByYzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTMxMSwxOSArMTI0MCwxMSBAQAogCiBzdGF0aWMgaW50IHN0bGlfcmF3Y2xvc2Uoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCB3YWl0KQogewotCXZvbGF0aWxlIGNka2hkcl90CSpoZHJwOwotCXZvbGF0aWxlIGNka2N0cmxfdAkqY3A7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqYml0czsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlpbnQJCQlyYzsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3Jhd2Nsb3NlKGJyZHA9JXgscG9ydHA9JXgsYXJnPSV4LHdhaXQ9JWQpXG4iLAotCQkoaW50KSBicmRwLCAoaW50KSBwb3J0cCwgKGludCkgYXJnLCB3YWl0KTsKLSNlbmRpZgotCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CisJY2RraGRyX3QgX19pb21lbSAqaGRycDsKKwljZGtjdHJsX3QgX19pb21lbSAqY3A7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOwogCiAvKgogICoJU2xhdmUgaXMgYWxyZWFkeSBjbG9zaW5nIHRoaXMgcG9ydC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgaGFuZ3VwCkBAIC0xMzMzLDcgKzEyNTQsNiBAQAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocG9ydHAtPnJhd193YWl0LAogCQkJCSF0ZXN0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKSk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CiAJfQpAQCAtMTM0MSwyMSArMTI2MSwyMiBAQAogLyoKICAqCVdyaXRlIHRoZSBjbG9zZSBjb21tYW5kIGludG8gc2hhcmVkIG1lbW9yeS4KICAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwogCUVCUkRFTkFCTEUoYnJkcCk7Ci0JY3AgPSAmKCh2b2xhdGlsZSBjZGthc3lfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKSktPmN0cmw7Ci0JY3AtPmNsb3NlYXJnID0gYXJnOwotCWNwLT5jbG9zZSA9IDE7Ci0JaGRycCA9ICh2b2xhdGlsZSBjZGtoZHJfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKLQliaXRzID0gKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGhkcnApICsgYnJkcC0+c2xhdmVvZmZzZXQgKworCWNwID0gJigoY2RrYXN5X3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKSktPmN0cmw7CisJd3JpdGVsKGFyZywgJmNwLT5jbG9zZWFyZyk7CisJd3JpdGViKDEsICZjcC0+Y2xvc2UpOworCWhkcnAgPSAoY2RraGRyX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwliaXRzID0gKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldCArCiAJCXBvcnRwLT5wb3J0aWR4OwotCSpiaXRzIHw9IHBvcnRwLT5wb3J0Yml0OworCXdyaXRlYihyZWFkYihiaXRzKSB8cG9ydHAtPnBvcnRiaXQsIGJpdHMpOwogCUVCUkRESVNBQkxFKGJyZHApOwogCiAJc2V0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKTsKLQlpZiAod2FpdCA9PSAwKSB7Ci0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwotCQlyZXR1cm4oMCk7Ci0JfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CisKKwlpZiAod2FpdCA9PSAwKQorCQlyZXR1cm4gMDsKIAogLyoKICAqCVNsYXZlIGlzIGluIGFjdGlvbiwgc28gbm93IHdlIG11c3Qgd2FpdCBmb3IgdGhlIG9wZW4gYWNrbm93bGVkZ21lbnQKQEAgLTEzNjYsMTEgKzEyODcsMTAgQEAKIAkJCSF0ZXN0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKSk7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyYyA9IC1FUkVTVEFSVFNZUzsKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAogCWlmICgocmMgPT0gMCkgJiYgKHBvcnRwLT5yYyAhPSAwKSkKIAkJcmMgPSAtRUlPOwotCXJldHVybihyYyk7CisJcmV0dXJuIHJjOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzg0LDM2ICsxMzA0LDIxIEBACiAKIHN0YXRpYyBpbnQgc3RsaV9jbWR3YWl0KHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX2NtZHdhaXQoYnJkcD0leCxwb3J0cD0leCxjbWQ9JXgsYXJnPSV4LHNpemU9JWQsIgotCQkiY29weWJhY2s9JWQpXG4iLCAoaW50KSBicmRwLCAoaW50KSBwb3J0cCwgKGludCkgY21kLAotCQkoaW50KSBhcmcsIHNpemUsIGNvcHliYWNrKTsKLSNlbmRpZgotCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnRwLT5yYXdfd2FpdCwKIAkJCSF0ZXN0X2JpdChTVF9DTURJTkcsICZwb3J0cC0+c3RhdGUpKTsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCX0KIAogCXN0bGlfc2VuZGNtZChicmRwLCBwb3J0cCwgY21kLCBhcmcsIHNpemUsIGNvcHliYWNrKTsKIAogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKSk7Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CiAKIAlpZiAocG9ydHAtPnJjICE9IDApCi0JCXJldHVybigtRUlPKTsKLQlyZXR1cm4oMCk7CisJCXJldHVybiAtRUlPOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDI1LDIyICsxMzMwLDE4IEBACiAKIHN0YXRpYyBpbnQgc3RsaV9zZXRwb3J0KHN0bGlwb3J0X3QgKnBvcnRwKQogewotCXN0bGlicmRfdAkqYnJkcDsKLQlhc3lwb3J0X3QJYXBvcnQ7CisJc3RsaWJyZF90ICpicmRwOworCWFzeXBvcnRfdCBhcG9ydDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3NldHBvcnQocG9ydHA9JXgpXG4iLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKLQotCWlmIChwb3J0cCA9PSAoc3RsaXBvcnRfdCAqKSBOVUxMKQotCQlyZXR1cm4oLUVOT0RFVik7Ci0JaWYgKHBvcnRwLT50dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybigtRU5PREVWKTsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApICYmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQotCQlyZXR1cm4oLUVOT0RFVik7CisJaWYgKHBvcnRwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChwb3J0cC0+dHR5ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChwb3J0cC0+YnJkbnIgPCAwICYmIHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOworCWlmIChicmRwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCiAJc3RsaV9ta2FzeXBvcnQocG9ydHAsICZhcG9ydCwgcG9ydHAtPnR0eS0+dGVybWlvcyk7CiAJcmV0dXJuKHN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9TRVRQT1JULCAmYXBvcnQsIHNpemVvZihhc3lwb3J0X3QpLCAwKSk7CkBAIC0xNDU1LDEzICsxMzU2LDggQEAKIAogc3RhdGljIGludCBzdGxpX3dhaXRjYXJyaWVyKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JaW50CQlyYywgZG9jbG9jYWw7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV93YWl0Y2FycmllcihicmRwPSV4LHBvcnRwPSV4LGZpbHA9JXgpXG4iLAotCQkoaW50KSBicmRwLCAoaW50KSBwb3J0cCwgKGludCkgZmlscCk7Ci0jZW5kaWYKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYywgZG9jbG9jYWw7CiAKIAlyYyA9IDA7CiAJZG9jbG9jYWwgPSAwOwpAQCAtMTQ2OSwxMSArMTM2NSwxMSBAQAogCWlmIChwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKQogCQlkb2Nsb2NhbCsrOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0bGlfbG9jaywgZmxhZ3MpOwogCXBvcnRwLT5vcGVud2FpdGNudCsrOwogCWlmICghIHR0eV9odW5nX3VwX3AoZmlscCkpCiAJCXBvcnRwLT5yZWZjb3VudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0bGlfbG9jaywgZmxhZ3MpOwogCiAJZm9yICg7OykgewogCQlzdGxpX21rYXN5c2lncygmcG9ydHAtPmFzaWcsIDEsIDEpOwpAQCAtMTQ5OSwxMiArMTM5NSwxMyBAQAogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwb3J0cC0+b3Blbl93YWl0KTsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RsaV9sb2NrLCBmbGFncyk7CiAJaWYgKCEgdHR5X2h1bmdfdXBfcChmaWxwKSkKIAkJcG9ydHAtPnJlZmNvdW50Kys7CiAJcG9ydHAtPm9wZW53YWl0Y250LS07Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RsaV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4ocmMpOworCXJldHVybiByYzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTUxNyw0NiArMTQxNCwzOCBAQAogCiBzdGF0aWMgaW50IHN0bGlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7Ci0Jdm9sYXRpbGUgY2RrYXN5X3QJKmFwOwotCXZvbGF0aWxlIGNka2hkcl90CSpoZHJwOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJpdHM7Ci0JdW5zaWduZWQgY2hhcgkJKnNoYnVmLCAqY2hidWY7Ci0Jc3RsaXBvcnRfdAkJKnBvcnRwOwotCXN0bGlicmRfdAkJKmJyZHA7Ci0JdW5zaWduZWQgaW50CQlsZW4sIHN0bGVuLCBoZWFkLCB0YWlsLCBzaXplOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWNka2FzeV90IF9faW9tZW0gKmFwOworCWNka2hkcl90IF9faW9tZW0gKmhkcnA7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpiaXRzOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqc2hidWY7CisJdW5zaWduZWQgY2hhciAqY2hidWY7CisJc3RsaXBvcnRfdCAqcG9ydHA7CisJc3RsaWJyZF90ICpicmRwOworCXVuc2lnbmVkIGludCBsZW4sIHN0bGVuLCBoZWFkLCB0YWlsLCBzaXplOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV93cml0ZSh0dHk9JXgsYnVmPSV4LGNvdW50PSVkKVxuIiwKLQkJKGludCkgdHR5LCAoaW50KSBidWYsIGNvdW50KTsKLSNlbmRpZgotCi0JaWYgKCh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpIHx8Ci0JICAgIChzdGxpX3RtcHdyaXRlYnVmID09IChjaGFyICopIE5VTEwpKQotCQlyZXR1cm4oMCk7CiAJaWYgKHR0eSA9PSBzdGxpX3R4Y29va3R0eSkKIAkJc3RsaV9mbHVzaGNoYXJzKHR0eSk7CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RsaXBvcnRfdCAqKSBOVUxMKQotCQlyZXR1cm4oMCk7CisJaWYgKHBvcnRwID09IE5VTEwpCisJCXJldHVybiAwOwogCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCi0JCXJldHVybigwKTsKKwkJcmV0dXJuIDA7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKLQkJcmV0dXJuKDApOworCWlmIChicmRwID09IE5VTEwpCisJCXJldHVybiAwOwogCWNoYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOwogCiAvKgogICoJQWxsIGRhdGEgaXMgbm93IGxvY2FsLCBzaG92ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGludG8gc2hhcmVkIG1lbW9yeS4KICAqLwotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwogCUVCUkRFTkFCTEUoYnJkcCk7Ci0JYXAgPSAodm9sYXRpbGUgY2RrYXN5X3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcik7Ci0JaGVhZCA9ICh1bnNpZ25lZCBpbnQpIGFwLT50eHEuaGVhZDsKLQl0YWlsID0gKHVuc2lnbmVkIGludCkgYXAtPnR4cS50YWlsOwotCWlmICh0YWlsICE9ICgodW5zaWduZWQgaW50KSBhcC0+dHhxLnRhaWwpKQotCQl0YWlsID0gKHVuc2lnbmVkIGludCkgYXAtPnR4cS50YWlsOworCWFwID0gKGNka2FzeV90IF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcik7CisJaGVhZCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZhcC0+dHhxLmhlYWQpOworCXRhaWwgPSAodW5zaWduZWQgaW50KSByZWFkdygmYXAtPnR4cS50YWlsKTsKKwlpZiAodGFpbCAhPSAoKHVuc2lnbmVkIGludCkgcmVhZHcoJmFwLT50eHEudGFpbCkpKQorCQl0YWlsID0gKHVuc2lnbmVkIGludCkgcmVhZHcoJmFwLT50eHEudGFpbCk7CiAJc2l6ZSA9IHBvcnRwLT50eHNpemU7CiAJaWYgKGhlYWQgPj0gdGFpbCkgewogCQlsZW4gPSBzaXplIC0gKGhlYWQgLSB0YWlsKSAtIDE7CkBAIC0xNTY4LDExICsxNDU3LDExIEBACiAKIAlsZW4gPSBNSU4obGVuLCBjb3VudCk7CiAJY291bnQgPSAwOwotCXNoYnVmID0gKGNoYXIgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+dHhvZmZzZXQpOworCXNoYnVmID0gKGNoYXIgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT50eG9mZnNldCk7CiAKIAl3aGlsZSAobGVuID4gMCkgewogCQlzdGxlbiA9IE1JTihsZW4sIHN0bGVuKTsKLQkJbWVtY3B5KChzaGJ1ZiArIGhlYWQpLCBjaGJ1Ziwgc3RsZW4pOworCQltZW1jcHlfdG9pbyhzaGJ1ZiArIGhlYWQsIGNoYnVmLCBzdGxlbik7CiAJCWNoYnVmICs9IHN0bGVuOwogCQlsZW4gLT0gc3RsZW47CiAJCWNvdW50ICs9IHN0bGVuOwpAQCAtMTU4MywyMCArMTQ3MiwxOSBAQAogCQl9CiAJfQogCi0JYXAgPSAodm9sYXRpbGUgY2RrYXN5X3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcik7Ci0JYXAtPnR4cS5oZWFkID0gaGVhZDsKKwlhcCA9IChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpOworCXdyaXRldyhoZWFkLCAmYXAtPnR4cS5oZWFkKTsKIAlpZiAodGVzdF9iaXQoU1RfVFhCVVNZLCAmcG9ydHAtPnN0YXRlKSkgewotCQlpZiAoYXAtPmNoYW5nZWQuZGF0YSAmIERUX1RYRU1QVFkpCi0JCQlhcC0+Y2hhbmdlZC5kYXRhICY9IH5EVF9UWEVNUFRZOworCQlpZiAocmVhZGwoJmFwLT5jaGFuZ2VkLmRhdGEpICYgRFRfVFhFTVBUWSkKKwkJCXdyaXRlbChyZWFkbCgmYXAtPmNoYW5nZWQuZGF0YSkgJiB+RFRfVFhFTVBUWSwgJmFwLT5jaGFuZ2VkLmRhdGEpOwogCX0KLQloZHJwID0gKHZvbGF0aWxlIGNka2hkcl90ICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgQ0RLX0NES0FERFIpOwotCWJpdHMgPSAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldCArCisJaGRycCA9IChjZGtoZHJfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgQ0RLX0NES0FERFIpOworCWJpdHMgPSAoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKSBoZHJwKSArIGJyZHAtPnNsYXZlb2Zmc2V0ICsKIAkJcG9ydHAtPnBvcnRpZHg7Ci0JKmJpdHMgfD0gcG9ydHAtPnBvcnRiaXQ7CisJd3JpdGViKHJlYWRiKGJpdHMpIHwgcG9ydHAtPnBvcnRiaXQsIGJpdHMpOwogCXNldF9iaXQoU1RfVFhCVVNZLCAmcG9ydHAtPnN0YXRlKTsKIAlFQlJERElTQUJMRShicmRwKTsKLQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4oY291bnQpOwogfQpAQCAtMTYxMywxNCArMTUwMSw4IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfcHV0Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQogewotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3B1dGNoYXIodHR5PSV4LGNoPSV4KVxuIiwgKGludCkgdHR5LCAoaW50KSBjaCk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybjsKIAlpZiAodHR5ICE9IHN0bGlfdHhjb29rdHR5KSB7Ci0JCWlmIChzdGxpX3R4Y29va3R0eSAhPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwkJaWYgKHN0bGlfdHhjb29rdHR5ICE9IE5VTEwpCiAJCQlzdGxpX2ZsdXNoY2hhcnMoc3RsaV90eGNvb2t0dHkpOwogCQlzdGxpX3R4Y29va3R0eSA9IHR0eTsKIAl9CkBAIC0xNjQwLDI5ICsxNTIyLDI2IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfZmx1c2hjaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXZvbGF0aWxlIGNka2hkcl90CSpoZHJwOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJpdHM7Ci0Jdm9sYXRpbGUgY2RrYXN5X3QJKmFwOwotCXN0cnVjdCB0dHlfc3RydWN0CSpjb29rdHR5OwotCXN0bGlwb3J0X3QJCSpwb3J0cDsKLQlzdGxpYnJkX3QJCSpicmRwOwotCXVuc2lnbmVkIGludAkJbGVuLCBzdGxlbiwgaGVhZCwgdGFpbCwgc2l6ZSwgY291bnQsIGNvb2tzaXplOwotCXVuc2lnbmVkIGNoYXIJCSpidWYsICpzaGJ1ZjsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX2ZsdXNoY2hhcnModHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgorCWNka2hkcl90IF9faW9tZW0gKmhkcnA7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpiaXRzOworCWNka2FzeV90IF9faW9tZW0gKmFwOworCXN0cnVjdCB0dHlfc3RydWN0ICpjb29rdHR5OworCXN0bGlwb3J0X3QgKnBvcnRwOworCXN0bGlicmRfdCAqYnJkcDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBzdGxlbiwgaGVhZCwgdGFpbCwgc2l6ZSwgY291bnQsIGNvb2tzaXplOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnNoYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAljb29rc2l6ZSA9IHN0bGlfdHhjb29rc2l6ZTsKIAljb29rdHR5ID0gc3RsaV90eGNvb2t0dHk7CiAJc3RsaV90eGNvb2tzaXplID0gMDsKIAlzdGxpX3R4Y29va3JlYWxzaXplID0gMDsKLQlzdGxpX3R4Y29va3R0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMOworCXN0bGlfdHhjb29rdHR5ID0gTlVMTDsKIAotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47Ci0JaWYgKGNvb2t0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKGNvb2t0dHkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlmICh0dHkgIT0gY29va3R0eSkKIAkJdHR5ID0gY29va3R0eTsKQEAgLTE2NzAsMjMgKzE1NDksMjIgQEAKIAkJcmV0dXJuOwogCiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RsaXBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CiAJaWYgKChwb3J0cC0+YnJkbnIgPCAwKSB8fCAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKSkKIAkJcmV0dXJuOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAJRUJSREVOQUJMRShicmRwKTsKIAotCWFwID0gKHZvbGF0aWxlIGNka2FzeV90ICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpOwotCWhlYWQgPSAodW5zaWduZWQgaW50KSBhcC0+dHhxLmhlYWQ7Ci0JdGFpbCA9ICh1bnNpZ25lZCBpbnQpIGFwLT50eHEudGFpbDsKLQlpZiAodGFpbCAhPSAoKHVuc2lnbmVkIGludCkgYXAtPnR4cS50YWlsKSkKLQkJdGFpbCA9ICh1bnNpZ25lZCBpbnQpIGFwLT50eHEudGFpbDsKKwlhcCA9IChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpOworCWhlYWQgPSAodW5zaWduZWQgaW50KSByZWFkdygmYXAtPnR4cS5oZWFkKTsKKwl0YWlsID0gKHVuc2lnbmVkIGludCkgcmVhZHcoJmFwLT50eHEudGFpbCk7CisJaWYgKHRhaWwgIT0gKCh1bnNpZ25lZCBpbnQpIHJlYWR3KCZhcC0+dHhxLnRhaWwpKSkKKwkJdGFpbCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZhcC0+dHhxLnRhaWwpOwogCXNpemUgPSBwb3J0cC0+dHhzaXplOwogCWlmIChoZWFkID49IHRhaWwpIHsKIAkJbGVuID0gc2l6ZSAtIChoZWFkIC0gdGFpbCkgLSAxOwpAQCAtMTcwMyw3ICsxNTgxLDcgQEAKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXN0bGVuID0gTUlOKGxlbiwgc3RsZW4pOwotCQltZW1jcHkoKHNoYnVmICsgaGVhZCksIGJ1Ziwgc3RsZW4pOworCQltZW1jcHlfdG9pbyhzaGJ1ZiArIGhlYWQsIGJ1Ziwgc3RsZW4pOwogCQlidWYgKz0gc3RsZW47CiAJCWxlbiAtPSBzdGxlbjsKIAkJY291bnQgKz0gc3RsZW47CkBAIC0xNzE0LDczICsxNTkyLDY2IEBACiAJCX0KIAl9CiAKLQlhcCA9ICh2b2xhdGlsZSBjZGthc3lfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKTsKLQlhcC0+dHhxLmhlYWQgPSBoZWFkOworCWFwID0gKGNka2FzeV90IF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcik7CisJd3JpdGV3KGhlYWQsICZhcC0+dHhxLmhlYWQpOwogCiAJaWYgKHRlc3RfYml0KFNUX1RYQlVTWSwgJnBvcnRwLT5zdGF0ZSkpIHsKLQkJaWYgKGFwLT5jaGFuZ2VkLmRhdGEgJiBEVF9UWEVNUFRZKQotCQkJYXAtPmNoYW5nZWQuZGF0YSAmPSB+RFRfVFhFTVBUWTsKKwkJaWYgKHJlYWRsKCZhcC0+Y2hhbmdlZC5kYXRhKSAmIERUX1RYRU1QVFkpCisJCQl3cml0ZWwocmVhZGwoJmFwLT5jaGFuZ2VkLmRhdGEpICYgfkRUX1RYRU1QVFksICZhcC0+Y2hhbmdlZC5kYXRhKTsKIAl9Ci0JaGRycCA9ICh2b2xhdGlsZSBjZGtoZHJfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKLQliaXRzID0gKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGhkcnApICsgYnJkcC0+c2xhdmVvZmZzZXQgKworCWhkcnAgPSAoY2RraGRyX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwliaXRzID0gKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldCArCiAJCXBvcnRwLT5wb3J0aWR4OwotCSpiaXRzIHw9IHBvcnRwLT5wb3J0Yml0OworCXdyaXRlYihyZWFkYihiaXRzKSB8IHBvcnRwLT5wb3J0Yml0LCBiaXRzKTsKIAlzZXRfYml0KFNUX1RYQlVTWSwgJnBvcnRwLT5zdGF0ZSk7CiAKIAlFQlJERElTQUJMRShicmRwKTsKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmRfbG9jaywgZmxhZ3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgc3RsaV93cml0ZXJvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQl2b2xhdGlsZSBjZGthc3lycV90CSpycDsKLQlzdGxpcG9ydF90CQkqcG9ydHA7Ci0Jc3RsaWJyZF90CQkqYnJkcDsKLQl1bnNpZ25lZCBpbnQJCWhlYWQsIHRhaWwsIGxlbjsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwljZGthc3lycV90IF9faW9tZW0gKnJwOworCXN0bGlwb3J0X3QgKnBvcnRwOworCXN0bGlicmRfdCAqYnJkcDsKKwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbCwgbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV93cml0ZXJvb20odHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKLQkJcmV0dXJuKDApOwogCWlmICh0dHkgPT0gc3RsaV90eGNvb2t0dHkpIHsKIAkJaWYgKHN0bGlfdHhjb29rcmVhbHNpemUgIT0gMCkgewogCQkJbGVuID0gc3RsaV90eGNvb2tyZWFsc2l6ZSAtIHN0bGlfdHhjb29rc2l6ZTsKLQkJCXJldHVybihsZW4pOworCQkJcmV0dXJuIGxlbjsKIAkJfQogCX0KIAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuKDApOworCWlmIChwb3J0cCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQotCQlyZXR1cm4oMCk7CisJCXJldHVybiAwOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCi0JCXJldHVybigwKTsKKwlpZiAoYnJkcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwogCUVCUkRFTkFCTEUoYnJkcCk7Ci0JcnAgPSAmKCh2b2xhdGlsZSBjZGthc3lfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKSktPnR4cTsKLQloZWFkID0gKHVuc2lnbmVkIGludCkgcnAtPmhlYWQ7Ci0JdGFpbCA9ICh1bnNpZ25lZCBpbnQpIHJwLT50YWlsOwotCWlmICh0YWlsICE9ICgodW5zaWduZWQgaW50KSBycC0+dGFpbCkpCi0JCXRhaWwgPSAodW5zaWduZWQgaW50KSBycC0+dGFpbDsKKwlycCA9ICYoKGNka2FzeV90IF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcikpLT50eHE7CisJaGVhZCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZycC0+aGVhZCk7CisJdGFpbCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZycC0+dGFpbCk7CisJaWYgKHRhaWwgIT0gKCh1bnNpZ25lZCBpbnQpIHJlYWR3KCZycC0+dGFpbCkpKQorCQl0YWlsID0gKHVuc2lnbmVkIGludCkgcmVhZHcoJnJwLT50YWlsKTsKIAlsZW4gPSAoaGVhZCA+PSB0YWlsKSA/IChwb3J0cC0+dHhzaXplIC0gKGhlYWQgLSB0YWlsKSkgOiAodGFpbCAtIGhlYWQpOwogCWxlbi0tOwogCUVCUkRESVNBQkxFKGJyZHApOwotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CiAKIAlpZiAodHR5ID09IHN0bGlfdHhjb29rdHR5KSB7CiAJCXN0bGlfdHhjb29rcmVhbHNpemUgPSBsZW47CiAJCWxlbiAtPSBzdGxpX3R4Y29va3NpemU7CiAJfQotCXJldHVybihsZW4pOworCXJldHVybiBsZW47CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3OTUsNDQgKzE2NjYsMzcgQEAKIAogc3RhdGljIGludCBzdGxpX2NoYXJzaW5idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQl2b2xhdGlsZSBjZGthc3lycV90CSpycDsKLQlzdGxpcG9ydF90CQkqcG9ydHA7Ci0Jc3RsaWJyZF90CQkqYnJkcDsKLQl1bnNpZ25lZCBpbnQJCWhlYWQsIHRhaWwsIGxlbjsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwljZGthc3lycV90IF9faW9tZW0gKnJwOworCXN0bGlwb3J0X3QgKnBvcnRwOworCXN0bGlicmRfdCAqYnJkcDsKKwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbCwgbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV9jaGFyc2luYnVmZmVyKHR0eT0leClcbiIsIChpbnQpIHR0eSk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybigwKTsKIAlpZiAodHR5ID09IHN0bGlfdHhjb29rdHR5KQogCQlzdGxpX2ZsdXNoY2hhcnModHR5KTsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCi0JCXJldHVybigwKTsKKwlpZiAocG9ydHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAJaWYgKChwb3J0cC0+YnJkbnIgPCAwKSB8fCAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKSkKLQkJcmV0dXJuKDApOworCQlyZXR1cm4gMDsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm4oMCk7CisJaWYgKGJyZHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKLQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQljbGkoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAlFQlJERU5BQkxFKGJyZHApOwotCXJwID0gJigodm9sYXRpbGUgY2RrYXN5X3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcikpLT50eHE7Ci0JaGVhZCA9ICh1bnNpZ25lZCBpbnQpIHJwLT5oZWFkOwotCXRhaWwgPSAodW5zaWduZWQgaW50KSBycC0+dGFpbDsKLQlpZiAodGFpbCAhPSAoKHVuc2lnbmVkIGludCkgcnAtPnRhaWwpKQotCQl0YWlsID0gKHVuc2lnbmVkIGludCkgcnAtPnRhaWw7CisJcnAgPSAmKChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpKS0+dHhxOworCWhlYWQgPSAodW5zaWduZWQgaW50KSByZWFkdygmcnAtPmhlYWQpOworCXRhaWwgPSAodW5zaWduZWQgaW50KSByZWFkdygmcnAtPnRhaWwpOworCWlmICh0YWlsICE9ICgodW5zaWduZWQgaW50KSByZWFkdygmcnAtPnRhaWwpKSkKKwkJdGFpbCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZycC0+dGFpbCk7CiAJbGVuID0gKGhlYWQgPj0gdGFpbCkgPyAoaGVhZCAtIHRhaWwpIDogKHBvcnRwLT50eHNpemUgLSAodGFpbCAtIGhlYWQpKTsKIAlpZiAoKGxlbiA9PSAwKSAmJiB0ZXN0X2JpdChTVF9UWEJVU1ksICZwb3J0cC0+c3RhdGUpKQogCQlsZW4gPSAxOwogCUVCUkRESVNBQkxFKGJyZHApOwotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4obGVuKTsKKwlyZXR1cm4gbGVuOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODQzLDEyICsxNzA3LDggQEAKIAogc3RhdGljIGludCBzdGxpX2dldHNlcmlhbChzdGxpcG9ydF90ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKIHsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdAlzaW87Ci0Jc3RsaWJyZF90CQkqYnJkcDsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX2dldHNlcmlhbChwb3J0cD0leCxzcD0leClcbiIsIChpbnQpIHBvcnRwLCAoaW50KSBzcCk7Ci0jZW5kaWYKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzaW87CisJc3RsaWJyZF90ICpicmRwOwogCiAJbWVtc2V0KCZzaW8sIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpOwogCXNpby50eXBlID0gUE9SVF9VTktOT1dOOwpAQCAtMTg2Myw3ICsxNzIzLDcgQEAKIAlzaW8uaHViNiA9IDA7CiAKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgIT0gKHN0bGlicmRfdCAqKSBOVUxMKQorCWlmIChicmRwICE9IE5VTEwpCiAJCXNpby5wb3J0ID0gYnJkcC0+aW9iYXNlOwogCQkKIAlyZXR1cm4gY29weV90b191c2VyKHNwLCAmc2lvLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKSA/CkBAIC0xODgwLDEyICsxNzQwLDggQEAKIAogc3RhdGljIGludCBzdGxpX3NldHNlcmlhbChzdGxpcG9ydF90ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKIHsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdAlzaW87Ci0JaW50CQkJcmM7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsaV9zZXRzZXJpYWwocG9ydHA9JXAsc3A9JXApXG4iLCBwb3J0cCwgc3ApOwotI2VuZGlmCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2lvOworCWludCByYzsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmc2lvLCBzcCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTg5NCw3ICsxNzUwLDcgQEAKIAkJICAgIChzaW8uY2xvc2VfZGVsYXkgIT0gcG9ydHAtPmNsb3NlX2RlbGF5KSB8fAogCQkgICAgKChzaW8uZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9CiAJCSAgICAocG9ydHAtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCi0JCQlyZXR1cm4oLUVQRVJNKTsKKwkJCXJldHVybiAtRVBFUk07CiAJfSAKIAogCXBvcnRwLT5mbGFncyA9IChwb3J0cC0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKQEAgLTE5MDUsOCArMTc2MSw4IEBACiAJcG9ydHAtPmN1c3RvbV9kaXZpc29yID0gc2lvLmN1c3RvbV9kaXZpc29yOwogCiAJaWYgKChyYyA9IHN0bGlfc2V0cG9ydChwb3J0cCkpIDwgMCkKLQkJcmV0dXJuKHJjKTsKLQlyZXR1cm4oMCk7CisJCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTkxNywxOSArMTc3MywxOSBAQAogCXN0bGlicmRfdCAqYnJkcDsKIAlpbnQgcmM7CiAKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCi0JCXJldHVybigwKTsKKwlpZiAocG9ydHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCQlyZXR1cm4gMDsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm4oMCk7CisJaWYgKGJyZHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAJaWYgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKQotCQlyZXR1cm4oLUVJTyk7CisJCXJldHVybiAtRUlPOwogCiAJaWYgKChyYyA9IHN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9HRVRTSUdOQUxTLAogCQkJICAgICAgICZwb3J0cC0+YXNpZywgc2l6ZW9mKGFzeXNpZ3NfdCksIDEpKSA8IDApCi0JCXJldHVybihyYyk7CisJCXJldHVybiByYzsKIAogCXJldHVybiBzdGxpX21rdGlvY20ocG9ydHAtPmFzaWcuc2lndmFsdWUpOwogfQpAQCAtMTk0MSwxNSArMTc5NywxNSBAQAogCXN0bGlicmRfdCAqYnJkcDsKIAlpbnQgcnRzID0gLTEsIGR0ciA9IC0xOwogCi0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCi0JCXJldHVybigtRU5PREVWKTsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQotCQlyZXR1cm4oMCk7CisJaWYgKHBvcnRwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKKwkJcmV0dXJuIDA7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKLQkJcmV0dXJuKDApOworCWlmIChicmRwID09IE5VTEwpCisJCXJldHVybiAwOwogCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKLQkJcmV0dXJuKC1FSU8pOworCQlyZXR1cm4gLUVJTzsKIAogCWlmIChzZXQgJiBUSU9DTV9SVFMpCiAJCXJ0cyA9IDE7CkBAIC0xOTY4LDMyICsxODI0LDI1IEBACiAKIHN0YXRpYyBpbnQgc3RsaV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RsaXBvcnRfdAkqcG9ydHA7Ci0Jc3RsaWJyZF90CSpicmRwOwotCXVuc2lnbmVkIGludAlpdmFsOwotCWludAkJcmM7CisJc3RsaXBvcnRfdCAqcG9ydHA7CisJc3RsaWJyZF90ICpicmRwOworCXVuc2lnbmVkIGludCBpdmFsOworCWludCByYzsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX2lvY3RsKHR0eT0leCxmaWxlPSV4LGNtZD0leCxhcmc9JXgpXG4iLAotCQkoaW50KSB0dHksIChpbnQpIGZpbGUsIGNtZCwgKGludCkgYXJnKTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCi0JCXJldHVybigwKTsKKwlpZiAocG9ydHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCQlyZXR1cm4gMDsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm4oMCk7CisJaWYgKGJyZHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoKGNtZCAhPSBUSU9DR1NFUklBTCkgJiYgKGNtZCAhPSBUSU9DU1NFUklBTCkgJiYKICAJICAgIChjbWQgIT0gQ09NX0dFVFBPUlRTVEFUUykgJiYgKGNtZCAhPSBDT01fQ0xSUE9SVFNUQVRTKSkgewogCQlpZiAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpCi0JCQlyZXR1cm4oLUVJTyk7CisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyYyA9IDA7CkBAIC0yMDQwLDcgKzE4ODksNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4ocmMpOworCXJldHVybiByYzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjA1MiwyNCArMTkwMSwyMCBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX3NldHRlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCkKIHsKLQlzdGxpcG9ydF90CSpwb3J0cDsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0Jc3RydWN0IHRlcm1pb3MJKnRpb3NwOwotCWFzeXBvcnRfdAlhcG9ydDsKKwlzdGxpcG9ydF90ICpwb3J0cDsKKwlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHRlcm1pb3MgKnRpb3NwOworCWFzeXBvcnRfdCBhcG9ydDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3NldHRlcm1pb3ModHR5PSV4LG9sZD0leClcbiIsIChpbnQpIHR0eSwgKGludCkgb2xkKTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQorCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJdGlvc3AgPSB0dHktPnRlcm1pb3M7CkBAIC0yMTAyLDE4ICsxOTQ3LDkgQEAKIAogc3RhdGljIHZvaWQgc3RsaV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0bGlwb3J0X3QJKnBvcnRwOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bGlfdGhyb3R0bGUodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlzdGxpcG9ydF90CSpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCi0JCXJldHVybjsKLQogCXNldF9iaXQoU1RfUlhTVE9QLCAmcG9ydHAtPnN0YXRlKTsKIH0KIApAQCAtMjEyNyw4OCArMTk2MywzMCBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxpcG9ydF90CSpwb3J0cDsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3VudGhyb3R0bGUodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlzdGxpcG9ydF90CSpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCi0JCXJldHVybjsKLQogCWNsZWFyX2JpdChTVF9SWFNUT1AsICZwb3J0cC0+c3RhdGUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKglTdG9wIHRoZSB0cmFuc21pdHRlci4gQmFzaWNhbGx5IHRvIGRvIHRoaXMgd2Ugd2lsbCBqdXN0IHR1cm4gVFgKLSAqCWludGVycnVwdHMgb2ZmLgorICoJU3RvcCB0aGUgdHJhbnNtaXR0ZXIuCiAgKi8KIAogc3RhdGljIHZvaWQgc3RsaV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RsaWJyZF90CSpicmRwOwotCXN0bGlwb3J0X3QJKnBvcnRwOwotCWFzeWN0cmxfdAlhY3RybDsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxpX3N0b3AodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKLQkJcmV0dXJuOwotCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCi0JCXJldHVybjsKLQlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoJmFjdHJsLCAwLCBzaXplb2YoYXN5Y3RybF90KSk7Ci0JYWN0cmwudHhjdHJsID0gQ1RfU1RPUEZMT1c7Ci0jaWYgMAotCXN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9QT1JUQ1RSTCwgJmFjdHJsLCBzaXplb2YoYXN5Y3RybF90KSwgMCk7Ci0jZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICoJU3RhcnQgdGhlIHRyYW5zbWl0dGVyIGFnYWluLiBKdXN0IHR1cm4gVFggaW50ZXJydXB0cyBiYWNrIG9uLgorICoJU3RhcnQgdGhlIHRyYW5zbWl0dGVyIGFnYWluLgogICovCiAKIHN0YXRpYyB2b2lkIHN0bGlfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxpcG9ydF90CSpwb3J0cDsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0JYXN5Y3RybF90CWFjdHJsOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bGlfc3RhcnQodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKLQkJcmV0dXJuOwotCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCi0JCXJldHVybjsKLQlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoJmFjdHJsLCAwLCBzaXplb2YoYXN5Y3RybF90KSk7Ci0JYWN0cmwudHhjdHJsID0gQ1RfU1RBUlRGTE9XOwotI2lmIDAKLQlzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfUE9SVENUUkwsICZhY3RybCwgc2l6ZW9mKGFzeWN0cmxfdCksIDApOwotI2VuZGlmCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMjQsMjIgKzIwMDIsOSBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2RvaGFuZ3VwKHZvaWQgKmFyZykKIHsKLQlzdGxpcG9ydF90CSpwb3J0cDsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfZG9oYW5ndXAocG9ydHA9JXgpXG4iLCAoaW50KSBhcmcpOwotI2VuZGlmCi0KLQkvKgotCSAqIEZJWE1FOiBUaGVyZSdzIGEgbW9kdWxlIHJlbW92YWwgcmFjZSBoZXJlOiB0dHlfaGFuZ3VwCi0JICogY2FsbHMgc2NoZWR1bGVfd29yayB3aGljaCB3aWxsIGNhbGwgaW50byB0aGlzCi0JICogZHJpdmVyIGxhdGVyLgotCSAqLwotCXBvcnRwID0gKHN0bGlwb3J0X3QgKikgYXJnOwotCWlmIChwb3J0cCAhPSAoc3RsaXBvcnRfdCAqKSBOVUxMKSB7Ci0JCWlmIChwb3J0cC0+dHR5ICE9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKSB7Ci0JCQl0dHlfaGFuZ3VwKHBvcnRwLT50dHkpOwotCQl9CisJc3RsaXBvcnRfdCAqcG9ydHAgPSAoc3RsaXBvcnRfdCAqKSBhcmc7CisJaWYgKHBvcnRwLT50dHkgIT0gTlVMTCkgeworCQl0dHlfaGFuZ3VwKHBvcnRwLT50dHkpOwogCX0KIH0KIApAQCAtMjI1NCwzMSArMjAxOSwyNSBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0bGlwb3J0X3QJKnBvcnRwOwotCXN0bGlicmRfdAkqYnJkcDsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOworCXN0bGlwb3J0X3QgKnBvcnRwOworCXN0bGlicmRfdCAqYnJkcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9oYW5ndXAodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKLQkJcmV0dXJuOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCisJaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQogCQlyZXR1cm47CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKKwlpZiAoYnJkcCA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7Ci0JaWYgKCEgdGVzdF9iaXQoU1RfQ0xPU0lORywgJnBvcnRwLT5zdGF0ZSkpCisJaWYgKCF0ZXN0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKSkKIAkJc3RsaV9yYXdjbG9zZShicmRwLCBwb3J0cCwgMCwgMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RsaV9sb2NrLCBmbGFncyk7CiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSB7CiAJCXN0bGlfbWthc3lzaWdzKCZwb3J0cC0+YXNpZywgMCwgMCk7CiAJCWlmICh0ZXN0X2JpdChTVF9DTURJTkcsICZwb3J0cC0+c3RhdGUpKSB7CkBAIC0yMjkwLDE0ICsyMDQ5LDE1IEBACiAJCQkJJnBvcnRwLT5hc2lnLCBzaXplb2YoYXN5c2lnc190KSwgMCk7CiAJCX0KIAl9Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CiAKIAljbGVhcl9iaXQoU1RfVFhCVVNZLCAmcG9ydHAtPnN0YXRlKTsKIAljbGVhcl9iaXQoU1RfUlhTVE9QLCAmcG9ydHAtPnN0YXRlKTsKIAlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwotCXBvcnRwLT50dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTDsKKwlwb3J0cC0+dHR5ID0gTlVMTDsKIAlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJcG9ydHAtPnJlZmNvdW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGxpX2xvY2ssIGZsYWdzKTsKKwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPm9wZW5fd2FpdCk7CiB9CiAKQEAgLTIzMTIsMjkgKzIwNzIsMjIgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9mbHVzaGJ1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0bGlwb3J0X3QJKnBvcnRwOwotCXN0bGlicmRfdAkqYnJkcDsKLQl1bnNpZ25lZCBsb25nCWZ0eXBlLCBmbGFnczsKKwlzdGxpcG9ydF90ICpwb3J0cDsKKwlzdGxpYnJkX3QgKmJyZHA7CisJdW5zaWduZWQgbG9uZyBmdHlwZSwgZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2ZsdXNoYnVmZmVyKHR0eT0leClcbiIsIChpbnQpIHR0eSk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQorCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAJaWYgKHR0eSA9PSBzdGxpX3R4Y29va3R0eSkgewotCQlzdGxpX3R4Y29va3R0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMOworCQlzdGxpX3R4Y29va3R0eSA9IE5VTEw7CiAJCXN0bGlfdHhjb29rc2l6ZSA9IDA7CiAJCXN0bGlfdHhjb29rcmVhbHNpemUgPSAwOwogCX0KQEAgLTIzNDYsMTUgKzIwOTksMTAgQEAKIAkJCWZ0eXBlIHw9IEZMVVNIUlg7CiAJCQljbGVhcl9iaXQoU1RfRE9GTFVTSFJYLCAmcG9ydHAtPnN0YXRlKTsKIAkJfQotCQlzdGxpX3NlbmRjbWQoYnJkcCwgcG9ydHAsIEFfRkxVU0gsICZmdHlwZSwKLQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSwgMCk7CisJCV9fc3RsaV9zZW5kY21kKGJyZHAsIHBvcnRwLCBBX0ZMVVNILCAmZnR5cGUsIHNpemVvZih1MzIpLCAwKTsKIAl9Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpICYmCi0JICAgIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwl0dHlfd2FrZXVwKHR0eSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNjQsNTUgKzIxMTIsMzEgQEAKIAlzdGxpYnJkX3QJKmJyZHA7CiAJc3RsaXBvcnRfdAkqcG9ydHA7CiAJbG9uZwkJYXJnOwotCS8qIGxvbmcgc2F2ZXN0YXRlLCBzYXZldGltZTsgKi8KIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfYnJlYWtjdGwodHR5PSV4LHN0YXRlPSVkKVxuIiwgKGludCkgdHR5LCBzdGF0ZSk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQorCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0vKgotICoJRHVlIHRvIGEgYnVnIGluIHRoZSB0dHkgc2VuZF9icmVhaygpIGNvZGUgd2UgbmVlZCB0byBwcmVzZXJ2ZQotICoJdGhlIGN1cnJlbnQgcHJvY2VzcyBzdGF0ZSBhbmQgdGltZW91dC4uLgotCXNhdmV0aW1lID0gY3VycmVudC0+dGltZW91dDsKLQlzYXZlc3RhdGUgPSBjdXJyZW50LT5zdGF0ZTsKLSAqLwotCiAJYXJnID0gKHN0YXRlID09IC0xKSA/IEJSRUFLT04gOiBCUkVBS09GRjsKIAlzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfQlJFQUssICZhcmcsIHNpemVvZihsb25nKSwgMCk7Ci0KLS8qCi0gKgotCWN1cnJlbnQtPnRpbWVvdXQgPSBzYXZldGltZTsKLQljdXJyZW50LT5zdGF0ZSA9IHNhdmVzdGF0ZTsKLSAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB2b2lkIHN0bGlfd2FpdHVudGlsc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCkKIHsKLQlzdGxpcG9ydF90CSpwb3J0cDsKLQl1bnNpZ25lZCBsb25nCXRlbmQ7CisJc3RsaXBvcnRfdCAqcG9ydHA7CisJdW5zaWduZWQgbG9uZyB0ZW5kOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV93YWl0dW50aWxzZW50KHR0eT0leCx0aW1lb3V0PSV4KVxuIiwgKGludCkgdHR5LCB0aW1lb3V0KTsKLSNlbmRpZgotCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAogCWlmICh0aW1lb3V0ID09IDApCkBAIC0yNDM2LDE5ICsyMTYwLDEzIEBACiAJc3RsaXBvcnRfdAkqcG9ydHA7CiAJYXN5Y3RybF90CWFjdHJsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9zZW5keGNoYXIodHR5PSV4LGNoPSV4KVxuIiwgKGludCkgdHR5LCBjaCk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQorCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJbWVtc2V0KCZhY3RybCwgMCwgc2l6ZW9mKGFzeWN0cmxfdCkpOwpAQCAtMjQ2MCw3ICsyMTc4LDYgQEAKIAkJYWN0cmwudHhjdHJsID0gQ1RfU0VORENIUjsKIAkJYWN0cmwudHhpbWRjaCA9IGNoOwogCX0KLQogCXN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9QT1JUQ1RSTCwgJmFjdHJsLCBzaXplb2YoYXN5Y3RybF90KSwgMCk7CiB9CiAKQEAgLTI0NzYsMTcgKzIxOTMsMTcgQEAKIAogc3RhdGljIGludCBzdGxpX3BvcnRpbmZvKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcykKIHsKLQljaGFyCSpzcCwgKnVhcnQ7Ci0JaW50CXJjLCBjbnQ7CisJY2hhciAqc3AsICp1YXJ0OworCWludCByYywgY250OwogCiAJcmMgPSBzdGxpX3BvcnRjbWRzdGF0cyhwb3J0cCk7CiAKIAl1YXJ0ID0gIlVOS05PV04iOwogCWlmIChicmRwLT5zdGF0ZSAmIEJTVF9TVEFSVEVEKSB7CiAJCXN3aXRjaCAoc3RsaV9jb21zdGF0cy5od2lkKSB7Ci0JCWNhc2UgMDoJCXVhcnQgPSAiMjY4MSI7IGJyZWFrOwotCQljYXNlIDE6CQl1YXJ0ID0gIlNDMjYxOTgiOyBicmVhazsKLQkJZGVmYXVsdDoJdWFydCA9ICJDRDE0MDAiOyBicmVhazsKKwkJY2FzZSAwOgl1YXJ0ID0gIjI2ODEiOyBicmVhazsKKwkJY2FzZSAxOgl1YXJ0ID0gIlNDMjYxOTgiOyBicmVhazsKKwkJZGVmYXVsdDp1YXJ0ID0gIkNEMTQwMCI7IGJyZWFrOwogCQl9CiAJfQogCkBAIC0yNTM3LDE3ICsyMjU0LDExIEBACiAKIHN0YXRpYyBpbnQgc3RsaV9yZWFkcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0Jc3RsaXBvcnRfdAkqcG9ydHA7Ci0JaW50CQlicmRuciwgcG9ydG5yLCB0b3RhbHBvcnQ7Ci0JaW50CQljdXJvZmYsIG1heG9mZjsKLQljaGFyCQkqcG9zOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9yZWFkcHJvYyhwYWdlPSV4LHN0YXJ0PSV4LG9mZj0leCxjb3VudD0lZCxlb2Y9JXgsIgotCQkiZGF0YT0leFxuIiwgKGludCkgcGFnZSwgKGludCkgc3RhcnQsIChpbnQpIG9mZiwgY291bnQsCi0JCShpbnQpIGVvZiwgKGludCkgZGF0YSk7Ci0jZW5kaWYKKwlzdGxpYnJkX3QgKmJyZHA7CisJc3RsaXBvcnRfdCAqcG9ydHA7CisJaW50IGJyZG5yLCBwb3J0bnIsIHRvdGFscG9ydDsKKwlpbnQgY3Vyb2ZmLCBtYXhvZmY7CisJY2hhciAqcG9zOwogCiAJcG9zID0gcGFnZTsKIAl0b3RhbHBvcnQgPSAwOwpAQCAtMjU2OCw3ICsyMjc5LDcgQEAKICAqLwogCWZvciAoYnJkbnIgPSAwOyAoYnJkbnIgPCBzdGxpX25yYnJkcyk7IGJyZG5yKyspIHsKIAkJYnJkcCA9IHN0bGlfYnJkc1ticmRucl07Ci0JCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKKwkJaWYgKGJyZHAgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYnJkcC0+c3RhdGUgPT0gMCkKIAkJCWNvbnRpbnVlOwpAQCAtMjU4Myw3ICsyMjk0LDcgQEAKIAkJZm9yIChwb3J0bnIgPSAwOyAocG9ydG5yIDwgYnJkcC0+bnJwb3J0cyk7IHBvcnRucisrLAogCQkgICAgdG90YWxwb3J0KyspIHsKIAkJCXBvcnRwID0gYnJkcC0+cG9ydHNbcG9ydG5yXTsKLQkJCWlmIChwb3J0cCA9PSAoc3RsaXBvcnRfdCAqKSBOVUxMKQorCQkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQkJY29udGludWU7CiAJCQlpZiAob2ZmID49IChjdXJvZmYgKz0gTUFYTElORSkpCiAJCQkJY29udGludWU7CkBAIC0yNjEwLDQ5ICsyMzIxLDU0IEBACiAgKglhIHBvbGwgcm91dGluZSB0aGF0IGRvZXMgbm90IGhhdmUgdXNlciBjb250ZXh0LiBUaGVyZWZvcmUgeW91IGNhbm5vdAogICoJY29weSBiYWNrIGRpcmVjdGx5IGludG8gdXNlciBzcGFjZSwgb3IgdG8gdGhlIGtlcm5lbCBzdGFjayBvZiBhCiAgKglwcm9jZXNzLiBUaGlzIHJvdXRpbmUgZG9lcyBub3Qgc2xlZXAsIHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZS4KKyAqCisgKglUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgYnJkX2xvY2sgKHNlZSBhbHNvIHN0bGlfc2VuZGNtZCB0aGUgdXN1YWwKKyAqCWVudHJ5IHBvaW50KQogICovCiAKLXN0YXRpYyB2b2lkIHN0bGlfc2VuZGNtZChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKQorc3RhdGljIHZvaWQgX19zdGxpX3NlbmRjbWQoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmFyZywgaW50IHNpemUsIGludCBjb3B5YmFjaykKIHsKLQl2b2xhdGlsZSBjZGtoZHJfdAkqaGRycDsKLQl2b2xhdGlsZSBjZGtjdHJsX3QJKmNwOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJpdHM7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJY2RraGRyX3QgX19pb21lbSAqaGRycDsKKwljZGtjdHJsX3QgX19pb21lbSAqY3A7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX3NlbmRjbWQoYnJkcD0leCxwb3J0cD0leCxjbWQ9JXgsYXJnPSV4LHNpemU9JWQsIgotCQkiY29weWJhY2s9JWQpXG4iLCAoaW50KSBicmRwLCAoaW50KSBwb3J0cCwgKGludCkgY21kLAotCQkoaW50KSBhcmcsIHNpemUsIGNvcHliYWNrKTsKLSNlbmRpZgotCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAKIAlpZiAodGVzdF9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBjb21tYW5kIGFscmVhZHkgYnVzeSwgY21kPSV4IVxuIiwKIAkJCQkoaW50KSBjbWQpOwotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAogCUVCUkRFTkFCTEUoYnJkcCk7Ci0JY3AgPSAmKCh2b2xhdGlsZSBjZGthc3lfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKSktPmN0cmw7CisJY3AgPSAmKChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpKS0+Y3RybDsKIAlpZiAoc2l6ZSA+IDApIHsKLQkJbWVtY3B5KCh2b2lkICopICYoY3AtPmFyZ3NbMF0pLCBhcmcsIHNpemUpOworCQltZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopICYoY3AtPmFyZ3NbMF0pLCBhcmcsIHNpemUpOwogCQlpZiAoY29weWJhY2spIHsKIAkJCXBvcnRwLT5hcmdwID0gYXJnOwogCQkJcG9ydHAtPmFyZ3NpemUgPSBzaXplOwogCQl9CiAJfQotCWNwLT5zdGF0dXMgPSAwOwotCWNwLT5jbWQgPSBjbWQ7Ci0JaGRycCA9ICh2b2xhdGlsZSBjZGtoZHJfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKLQliaXRzID0gKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGhkcnApICsgYnJkcC0+c2xhdmVvZmZzZXQgKworCXdyaXRlbCgwLCAmY3AtPnN0YXR1cyk7CisJd3JpdGVsKGNtZCwgJmNwLT5jbWQpOworCWhkcnAgPSAoY2RraGRyX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwliaXRzID0gKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldCArCiAJCXBvcnRwLT5wb3J0aWR4OwotCSpiaXRzIHw9IHBvcnRwLT5wb3J0Yml0OworCXdyaXRlYihyZWFkYihiaXRzKSB8IHBvcnRwLT5wb3J0Yml0LCBiaXRzKTsKIAlzZXRfYml0KFNUX0NNRElORywgJnBvcnRwLT5zdGF0ZSk7CiAJRUJSRERJU0FCTEUoYnJkcCk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3RsaV9zZW5kY21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spCit7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwlfX3N0bGlfc2VuZGNtZChicmRwLCBwb3J0cCwgY21kLCBhcmcsIHNpemUsIGNvcHliYWNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmRfbG9jaywgZmxhZ3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNjY3LDI4ICsyMzgzLDIzIEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfcmVhZChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwKQogewotCXZvbGF0aWxlIGNka2FzeXJxX3QJKnJwOwotCXZvbGF0aWxlIGNoYXIJCSpzaGJ1ZjsKKwljZGthc3lycV90IF9faW9tZW0gKnJwOworCWNoYXIgX19pb21lbSAqc2hidWY7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKLQl1bnNpZ25lZCBpbnQJCWhlYWQsIHRhaWwsIHNpemU7Ci0JdW5zaWduZWQgaW50CQlsZW4sIHN0bGVuOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9yZWFkKGJyZHA9JXgscG9ydHA9JWQpXG4iLAotCQkJKGludCkgYnJkcCwgKGludCkgcG9ydHApOwotI2VuZGlmCisJdW5zaWduZWQgaW50IGhlYWQsIHRhaWwsIHNpemU7CisJdW5zaWduZWQgaW50IGxlbiwgc3RsZW47CiAKIAlpZiAodGVzdF9iaXQoU1RfUlhTVE9QLCAmcG9ydHAtPnN0YXRlKSkKIAkJcmV0dXJuOwogCXR0eSA9IHBvcnRwLT50dHk7Ci0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXJwID0gJigodm9sYXRpbGUgY2RrYXN5X3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcikpLT5yeHE7Ci0JaGVhZCA9ICh1bnNpZ25lZCBpbnQpIHJwLT5oZWFkOwotCWlmIChoZWFkICE9ICgodW5zaWduZWQgaW50KSBycC0+aGVhZCkpCi0JCWhlYWQgPSAodW5zaWduZWQgaW50KSBycC0+aGVhZDsKLQl0YWlsID0gKHVuc2lnbmVkIGludCkgcnAtPnRhaWw7CisJcnAgPSAmKChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpKS0+cnhxOworCWhlYWQgPSAodW5zaWduZWQgaW50KSByZWFkdygmcnAtPmhlYWQpOworCWlmIChoZWFkICE9ICgodW5zaWduZWQgaW50KSByZWFkdygmcnAtPmhlYWQpKSkKKwkJaGVhZCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZycC0+aGVhZCk7CisJdGFpbCA9ICh1bnNpZ25lZCBpbnQpIHJlYWR3KCZycC0+dGFpbCk7CiAJc2l6ZSA9IHBvcnRwLT5yeHNpemU7CiAJaWYgKGhlYWQgPj0gdGFpbCkgewogCQlsZW4gPSBoZWFkIC0gdGFpbDsKQEAgLTI2OTksMTIgKzI0MTAsMTUgQEAKIAl9CiAKIAlsZW4gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbik7Ci0JLyogRklYTUUgOiBpb21hcCA/ICovCi0Jc2hidWYgPSAodm9sYXRpbGUgY2hhciAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5yeG9mZnNldCk7CisKKwlzaGJ1ZiA9IChjaGFyIF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+cnhvZmZzZXQpOwogCiAJd2hpbGUgKGxlbiA+IDApIHsKKwkJdW5zaWduZWQgY2hhciAqY3B0cjsKKwogCQlzdGxlbiA9IE1JTihsZW4sIHN0bGVuKTsKLQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIChjaGFyICopKHNoYnVmICsgdGFpbCksIHN0bGVuKTsKKwkJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcodHR5LCAmY3B0ciwgc3RsZW4pOworCQltZW1jcHlfZnJvbWlvKGNwdHIsIHNoYnVmICsgdGFpbCwgc3RsZW4pOwogCQlsZW4gLT0gc3RsZW47CiAJCXRhaWwgKz0gc3RsZW47CiAJCWlmICh0YWlsID49IHNpemUpIHsKQEAgLTI3MTIsOCArMjQyNiw4IEBACiAJCQlzdGxlbiA9IGhlYWQ7CiAJCX0KIAl9Ci0JcnAgPSAmKCh2b2xhdGlsZSBjZGthc3lfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKSktPnJ4cTsKLQlycC0+dGFpbCA9IHRhaWw7CisJcnAgPSAmKChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpKS0+cnhxOworCXdyaXRldyh0YWlsLCAmcnAtPnRhaWwpOwogCiAJaWYgKGhlYWQgIT0gdGFpbCkKIAkJc2V0X2JpdChTVF9SWElORywgJnBvcnRwLT5zdGF0ZSk7CkBAIC0yNzI5LDkgKzI0NDMsOSBAQAogICoJZGlmZmljdWx0IHRvIGRlYWwgd2l0aCB0aGVtIGhlcmUuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9kb2RlbGF5Y21kKHN0bGlwb3J0X3QgKnBvcnRwLCB2b2xhdGlsZSBjZGtjdHJsX3QgKmNwKQorc3RhdGljIHZvaWQgc3RsaV9kb2RlbGF5Y21kKHN0bGlwb3J0X3QgKnBvcnRwLCBjZGtjdHJsX3QgX19pb21lbSAqY3ApCiB7Ci0JaW50CWNtZDsKKwlpbnQgY21kOwogCiAJaWYgKHRlc3RfYml0KFNUX0RPU0lHUywgJnBvcnRwLT5zdGF0ZSkpIHsKIAkJaWYgKHRlc3RfYml0KFNUX0RPRkxVU0hUWCwgJnBvcnRwLT5zdGF0ZSkgJiYKQEAgLTI3NDYsMTAgKzI0NjAsMTAgQEAKIAkJY2xlYXJfYml0KFNUX0RPRkxVU0hUWCwgJnBvcnRwLT5zdGF0ZSk7CiAJCWNsZWFyX2JpdChTVF9ET0ZMVVNIUlgsICZwb3J0cC0+c3RhdGUpOwogCQljbGVhcl9iaXQoU1RfRE9TSUdTLCAmcG9ydHAtPnN0YXRlKTsKLQkJbWVtY3B5KCh2b2lkICopICYoY3AtPmFyZ3NbMF0pLCAodm9pZCAqKSAmcG9ydHAtPmFzaWcsCisJCW1lbWNweV90b2lvKCh2b2lkIF9faW9tZW0gKikgJihjcC0+YXJnc1swXSksICh2b2lkICopICZwb3J0cC0+YXNpZywKIAkJCXNpemVvZihhc3lzaWdzX3QpKTsKLQkJY3AtPnN0YXR1cyA9IDA7Ci0JCWNwLT5jbWQgPSBjbWQ7CisJCXdyaXRlbCgwLCAmY3AtPnN0YXR1cyk7CisJCXdyaXRlbChjbWQsICZjcC0+Y21kKTsKIAkJc2V0X2JpdChTVF9DTURJTkcsICZwb3J0cC0+c3RhdGUpOwogCX0gZWxzZSBpZiAodGVzdF9iaXQoU1RfRE9GTFVTSFRYLCAmcG9ydHAtPnN0YXRlKSB8fAogCSAgICB0ZXN0X2JpdChTVF9ET0ZMVVNIUlgsICZwb3J0cC0+c3RhdGUpKSB7CkBAIC0yNzU3LDkgKzI0NzEsOSBAQAogCQljbWQgfD0gKCh0ZXN0X2JpdChTVF9ET0ZMVVNIUlgsICZwb3J0cC0+c3RhdGUpKSA/IEZMVVNIUlggOiAwKTsKIAkJY2xlYXJfYml0KFNUX0RPRkxVU0hUWCwgJnBvcnRwLT5zdGF0ZSk7CiAJCWNsZWFyX2JpdChTVF9ET0ZMVVNIUlgsICZwb3J0cC0+c3RhdGUpOwotCQltZW1jcHkoKHZvaWQgKikgJihjcC0+YXJnc1swXSksICh2b2lkICopICZjbWQsIHNpemVvZihpbnQpKTsKLQkJY3AtPnN0YXR1cyA9IDA7Ci0JCWNwLT5jbWQgPSBBX0ZMVVNIOworCQltZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopICYoY3AtPmFyZ3NbMF0pLCAodm9pZCAqKSAmY21kLCBzaXplb2YoaW50KSk7CisJCXdyaXRlbCgwLCAmY3AtPnN0YXR1cyk7CisJCXdyaXRlbChBX0ZMVVNILCAmY3AtPmNtZCk7CiAJCXNldF9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKTsKIAl9CiB9CkBAIC0yNzc5LDMwICsyNDkzLDI1IEBACiAKIHN0YXRpYyBpbnQgc3RsaV9ob3N0Y21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHApCiB7Ci0Jdm9sYXRpbGUgY2RrYXN5X3QJKmFwOwotCXZvbGF0aWxlIGNka2N0cmxfdAkqY3A7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKLQlhc3lub3RpZnlfdAkJbnQ7Ci0JdW5zaWduZWQgbG9uZwkJb2xkc2lnczsKLQlpbnQJCQlyYywgZG9uZXJ4OworCWNka2FzeV90IF9faW9tZW0gKmFwOworCWNka2N0cmxfdCBfX2lvbWVtICpjcDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWFzeW5vdGlmeV90IG50OworCXVuc2lnbmVkIGxvbmcgb2xkc2lnczsKKwlpbnQgcmMsIGRvbmVyeDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfaG9zdGNtZChicmRwPSV4LGNoYW5ucj0lZClcbiIsCi0JCQkoaW50KSBicmRwLCBjaGFubnIpOwotI2VuZGlmCi0KLQlhcCA9ICh2b2xhdGlsZSBjZGthc3lfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT5hZGRyKTsKKwlhcCA9IChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpOwogCWNwID0gJmFwLT5jdHJsOwogCiAvKgogICoJQ2hlY2sgaWYgd2UgYXJlIHdhaXRpbmcgZm9yIGFuIG9wZW4gY29tcGxldGlvbiBtZXNzYWdlLgogICovCiAJaWYgKHRlc3RfYml0KFNUX09QRU5JTkcsICZwb3J0cC0+c3RhdGUpKSB7Ci0JCXJjID0gKGludCkgY3AtPm9wZW5hcmc7Ci0JCWlmICgoY3AtPm9wZW4gPT0gMCkgJiYgKHJjICE9IDApKSB7CisJCXJjID0gcmVhZGwoJmNwLT5vcGVuYXJnKTsKKwkJaWYgKHJlYWRiKCZjcC0+b3BlbikgPT0gMCAmJiByYyAhPSAwKSB7CiAJCQlpZiAocmMgPiAwKQogCQkJCXJjLS07Ci0JCQljcC0+b3BlbmFyZyA9IDA7CisJCQl3cml0ZWwoMCwgJmNwLT5vcGVuYXJnKTsKIAkJCXBvcnRwLT5yYyA9IHJjOwogCQkJY2xlYXJfYml0KFNUX09QRU5JTkcsICZwb3J0cC0+c3RhdGUpOwogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+cmF3X3dhaXQpOwpAQCAtMjgxMywxMSArMjUyMiwxMSBAQAogICoJQ2hlY2sgaWYgd2UgYXJlIHdhaXRpbmcgZm9yIGEgY2xvc2UgY29tcGxldGlvbiBtZXNzYWdlLgogICovCiAJaWYgKHRlc3RfYml0KFNUX0NMT1NJTkcsICZwb3J0cC0+c3RhdGUpKSB7Ci0JCXJjID0gKGludCkgY3AtPmNsb3NlYXJnOwotCQlpZiAoKGNwLT5jbG9zZSA9PSAwKSAmJiAocmMgIT0gMCkpIHsKKwkJcmMgPSAoaW50KSByZWFkbCgmY3AtPmNsb3NlYXJnKTsKKwkJaWYgKHJlYWRiKCZjcC0+Y2xvc2UpID09IDAgJiYgcmMgIT0gMCkgewogCQkJaWYgKHJjID4gMCkKIAkJCQlyYy0tOwotCQkJY3AtPmNsb3NlYXJnID0gMDsKKwkJCXdyaXRlbCgwLCAmY3AtPmNsb3NlYXJnKTsKIAkJCXBvcnRwLT5yYyA9IHJjOwogCQkJY2xlYXJfYml0KFNUX0NMT1NJTkcsICZwb3J0cC0+c3RhdGUpOwogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+cmF3X3dhaXQpOwpAQCAtMjgyOSwxNiArMjUzOCwxNiBAQAogICoJbmVlZCB0byBjb3B5IG91dCB0aGUgY29tbWFuZCByZXN1bHRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbW1hbmQuCiAgKi8KIAlpZiAodGVzdF9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKSkgewotCQlyYyA9IGNwLT5zdGF0dXM7Ci0JCWlmICgoY3AtPmNtZCA9PSAwKSAmJiAocmMgIT0gMCkpIHsKKwkJcmMgPSByZWFkbCgmY3AtPnN0YXR1cyk7CisJCWlmIChyZWFkbCgmY3AtPmNtZCkgPT0gMCAmJiByYyAhPSAwKSB7CiAJCQlpZiAocmMgPiAwKQogCQkJCXJjLS07Ci0JCQlpZiAocG9ydHAtPmFyZ3AgIT0gKHZvaWQgKikgTlVMTCkgewotCQkJCW1lbWNweShwb3J0cC0+YXJncCwgKHZvaWQgKikgJihjcC0+YXJnc1swXSksCisJCQlpZiAocG9ydHAtPmFyZ3AgIT0gTlVMTCkgeworCQkJCW1lbWNweV9mcm9taW8ocG9ydHAtPmFyZ3AsICh2b2lkIF9faW9tZW0gKikgJihjcC0+YXJnc1swXSksCiAJCQkJCXBvcnRwLT5hcmdzaXplKTsKLQkJCQlwb3J0cC0+YXJncCA9ICh2b2lkICopIE5VTEw7CisJCQkJcG9ydHAtPmFyZ3AgPSBOVUxMOwogCQkJfQotCQkJY3AtPnN0YXR1cyA9IDA7CisJCQl3cml0ZWwoMCwgJmNwLT5zdGF0dXMpOwogCQkJcG9ydHAtPnJjID0gcmM7CiAJCQljbGVhcl9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKTsKIAkJCXN0bGlfZG9kZWxheWNtZChwb3J0cCwgY3ApOwpAQCAtMjg3NywxOCArMjU4NiwxNSBAQAogCQlpZiAobnQuZGF0YSAmIERUX1RYRU1QVFkpCiAJCQljbGVhcl9iaXQoU1RfVFhCVVNZLCAmcG9ydHAtPnN0YXRlKTsKIAkJaWYgKG50LmRhdGEgJiAoRFRfVFhFTVBUWSB8IERUX1RYTE9XKSkgewotCQkJaWYgKHR0eSAhPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkgewotCQkJCWlmICgodHR5LT5mbGFncyAmICgxIDw8IFRUWV9ET19XUklURV9XQUtFVVApKSAmJgotCQkJCSAgICB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgewotCQkJCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApKHR0eSk7Ci0JCQkJCUVCUkRFTkFCTEUoYnJkcCk7Ci0JCQkJfQorCQkJaWYgKHR0eSAhPSBOVUxMKSB7CisJCQkJdHR5X3dha2V1cCh0dHkpOworCQkJCUVCUkRFTkFCTEUoYnJkcCk7CiAJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCQkJfQogCQl9CiAKIAkJaWYgKChudC5kYXRhICYgRFRfUlhCUkVBSykgJiYgKHBvcnRwLT5yeG1hcmttc2sgJiBCUktJTlQpKSB7Ci0JCQlpZiAodHR5ICE9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKSB7CisJCQlpZiAodHR5ICE9IE5VTEwpIHsKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSyk7CiAJCQkJaWYgKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NBSykgewogCQkJCQlkb19TQUsodHR5KTsKQEAgLTI5MzIsMTQgKzI2MzgsMTQgQEAKICAqCWF0IHRoZSBjZGsgaGVhZGVyIHN0cnVjdHVyZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxpX2JyZHBvbGwoc3RsaWJyZF90ICpicmRwLCB2b2xhdGlsZSBjZGtoZHJfdCAqaGRycCkKK3N0YXRpYyB2b2lkIHN0bGlfYnJkcG9sbChzdGxpYnJkX3QgKmJyZHAsIGNka2hkcl90IF9faW9tZW0gKmhkcnApCiB7Ci0Jc3RsaXBvcnRfdAkqcG9ydHA7Ci0JdW5zaWduZWQgY2hhcglob3N0Yml0c1soU1RMX01BWENIQU5TIC8gOCkgKyAxXTsKLQl1bnNpZ25lZCBjaGFyCXNsYXZlYml0c1soU1RMX01BWENIQU5TIC8gOCkgKyAxXTsKLQl1bnNpZ25lZCBjaGFyCSpzbGF2ZXA7Ci0JaW50CQliaXRwb3MsIGJpdGF0LCBiaXRzaXplOwotCWludCAJCWNoYW5uciwgbnJkZXZzLCBzbGF2ZWJpdGNoYW5nZTsKKwlzdGxpcG9ydF90ICpwb3J0cDsKKwl1bnNpZ25lZCBjaGFyIGhvc3RiaXRzWyhTVExfTUFYQ0hBTlMgLyA4KSArIDFdOworCXVuc2lnbmVkIGNoYXIgc2xhdmViaXRzWyhTVExfTUFYQ0hBTlMgLyA4KSArIDFdOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqc2xhdmVwOworCWludCBiaXRwb3MsIGJpdGF0LCBiaXRzaXplOworCWludCBjaGFubnIsIG5yZGV2cywgc2xhdmViaXRjaGFuZ2U7CiAKIAliaXRzaXplID0gYnJkcC0+Yml0c2l6ZTsKIAlucmRldnMgPSBicmRwLT5ucmRldnM7CkBAIC0yOTUxLDcgKzI2NTcsNyBAQAogICoJOCBzZXJ2aWNlIGJpdHMgYXQgYSB0aW1lIGluIHRoZSBpbm5lciBsb29wLCBzbyB3ZSBjYW4gYnlwYXNzCiAgKgl0aGUgbG90IGlmIG5vbmUgb2YgdGhlbSB3YW50IHNlcnZpY2UuCiAgKi8KLQltZW1jcHkoJmhvc3RiaXRzWzBdLCAoKCh1bnNpZ25lZCBjaGFyICopIGhkcnApICsgYnJkcC0+aG9zdG9mZnNldCksCisJbWVtY3B5X2Zyb21pbygmaG9zdGJpdHNbMF0sICgoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKSBoZHJwKSArIGJyZHAtPmhvc3RvZmZzZXQpLAogCQliaXRzaXplKTsKIAogCW1lbXNldCgmc2xhdmViaXRzWzBdLCAwLCBiaXRzaXplKTsKQEAgLTI5NzgsMTEgKzI2ODQsMTEgQEAKICAqCXNlcnZpY2UgbWF5IGluaXRpYXRlIG1vcmUgc2xhdmUgcmVxdWVzdHMuCiAgKi8KIAlpZiAoc2xhdmViaXRjaGFuZ2UpIHsKLQkJaGRycCA9ICh2b2xhdGlsZSBjZGtoZHJfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKLQkJc2xhdmVwID0gKCh1bnNpZ25lZCBjaGFyICopIGhkcnApICsgYnJkcC0+c2xhdmVvZmZzZXQ7CisJCWhkcnAgPSAoY2RraGRyX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwkJc2xhdmVwID0gKCh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgaGRycCkgKyBicmRwLT5zbGF2ZW9mZnNldDsKIAkJZm9yIChiaXRwb3MgPSAwOyAoYml0cG9zIDwgYml0c2l6ZSk7IGJpdHBvcysrKSB7Ci0JCQlpZiAoc2xhdmViaXRzW2JpdHBvc10pCi0JCQkJc2xhdmVwW2JpdHBvc10gJj0gfnNsYXZlYml0c1tiaXRwb3NdOworCQkJaWYgKHJlYWRiKHNsYXZlYml0cyArIGJpdHBvcykpCisJCQkJd3JpdGViKHJlYWRiKHNsYXZlcCArIGJpdHBvcykgJiB+c2xhdmViaXRzW2JpdHBvc10sIHNsYXZlYml0cyArIGJpdHBvcyk7CiAJCX0KIAl9CiB9CkBAIC0zMDAwLDkgKzI3MDYsOSBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX3BvbGwodW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jdm9sYXRpbGUgY2RraGRyX3QJKmhkcnA7Ci0Jc3RsaWJyZF90CQkqYnJkcDsKLQlpbnQgCQkJYnJkbnI7CisJY2RraGRyX3QgX19pb21lbSAqaGRycDsKKwlzdGxpYnJkX3QgKmJyZHA7CisJaW50IGJyZG5yOwogCiAJc3RsaV90aW1lcmxpc3QuZXhwaXJlcyA9IFNUTElfVElNRU9VVDsKIAlhZGRfdGltZXIoJnN0bGlfdGltZXJsaXN0KTsKQEAgLTMwMTIsMTYgKzI3MTgsMTggQEAKICAqLwogCWZvciAoYnJkbnIgPSAwOyAoYnJkbnIgPCBzdGxpX25yYnJkcyk7IGJyZG5yKyspIHsKIAkJYnJkcCA9IHN0bGlfYnJkc1ticmRucl07Ci0JCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKKwkJaWYgKGJyZHAgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGJyZHAtPnN0YXRlICYgQlNUX1NUQVJURUQpID09IDApCiAJCQljb250aW51ZTsKIAorCQlzcGluX2xvY2soJmJyZF9sb2NrKTsKIAkJRUJSREVOQUJMRShicmRwKTsKLQkJaGRycCA9ICh2b2xhdGlsZSBjZGtoZHJfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKLQkJaWYgKGhkcnAtPmhvc3RyZXEpCisJCWhkcnAgPSAoY2RraGRyX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwkJaWYgKHJlYWRiKCZoZHJwLT5ob3N0cmVxKSkKIAkJCXN0bGlfYnJkcG9sbChicmRwLCBoZHJwKTsKIAkJRUJSRERJU0FCTEUoYnJkcCk7CisJCXNwaW5fdW5sb2NrKCZicmRfbG9jayk7CiAJfQogfQogCkBAIC0zMDM0LDExICsyNzQyLDYgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9ta2FzeXBvcnQoc3RsaXBvcnRfdCAqcG9ydHAsIGFzeXBvcnRfdCAqcHAsIHN0cnVjdCB0ZXJtaW9zICp0aW9zcCkKIHsKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX21rYXN5cG9ydChwb3J0cD0leCxwcD0leCx0aW9zcD0lZClcbiIsCi0JCShpbnQpIHBvcnRwLCAoaW50KSBwcCwgKGludCkgdGlvc3ApOwotI2VuZGlmCi0KIAltZW1zZXQocHAsIDAsIHNpemVvZihhc3lwb3J0X3QpKTsKIAogLyoKQEAgLTMxNTcsMTEgKzI4NjAsNiBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX21rYXN5c2lncyhhc3lzaWdzX3QgKnNwLCBpbnQgZHRyLCBpbnQgcnRzKQogewotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfbWthc3lzaWdzKHNwPSV4LGR0cj0lZCxydHM9JWQpXG4iLAotCQkJKGludCkgc3AsIGR0ciwgcnRzKTsKLSNlbmRpZgotCiAJbWVtc2V0KHNwLCAwLCBzaXplb2YoYXN5c2lnc190KSk7CiAJaWYgKGR0ciA+PSAwKSB7CiAJCXNwLT5zaWduYWwgfD0gU0dfRFRSOwpAQCAtMzE4MiwxMyArMjg4MCw3IEBACiAKIHN0YXRpYyBsb25nIHN0bGlfbWt0aW9jbSh1bnNpZ25lZCBsb25nIHNpZ3ZhbHVlKQogewotCWxvbmcJdGlvY207Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX21rdGlvY20oc2lndmFsdWU9JXgpXG4iLCAoaW50KSBzaWd2YWx1ZSk7Ci0jZW5kaWYKLQotCXRpb2NtID0gMDsKKwlsb25nCXRpb2NtID0gMDsKIAl0aW9jbSB8PSAoKHNpZ3ZhbHVlICYgU0dfRENEKSA/IFRJT0NNX0NEIDogMCk7CiAJdGlvY20gfD0gKChzaWd2YWx1ZSAmIFNHX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKIAl0aW9jbSB8PSAoKHNpZ3ZhbHVlICYgU0dfUkkpID8gVElPQ01fUkkgOiAwKTsKQEAgLTMyMTAsMTAgKzI5MDIsNiBAQAogCXN0bGlwb3J0X3QJKnBvcnRwOwogCWludAkJaSwgcGFuZWxuciwgcGFuZWxwb3J0OwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9pbml0cG9ydHMoYnJkcD0leClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCi0KIAlmb3IgKGkgPSAwLCBwYW5lbG5yID0gMCwgcGFuZWxwb3J0ID0gMDsgKGkgPCBicmRwLT5ucnBvcnRzKTsgaSsrKSB7CiAJCXBvcnRwID0ga3phbGxvYyhzaXplb2Yoc3RsaXBvcnRfdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnRwKSB7CkBAIC0zMjQwLDcgKzI5MjgsNyBAQAogCQlicmRwLT5wb3J0c1tpXSA9IHBvcnRwOwogCX0KIAotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzI1MywxMCArMjk0MSw2IEBACiB7CiAJdW5zaWduZWQgbG9uZwltZW1jb25mOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9lY3Bpbml0KGJyZHA9JWQpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgotCiAJb3V0YihFQ1BfQVRTVE9QLCAoYnJkcC0+aW9iYXNlICsgRUNQX0FUQ09ORlIpKTsKIAl1ZGVsYXkoMTApOwogCW91dGIoRUNQX0FURElTQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9BVENPTkZSKSk7CkBAIC0zMjcwLDkgKzI5NTQsNiBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2VjcGVuYWJsZShzdGxpYnJkX3QgKmJyZHApCiB7CQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfZWNwZW5hYmxlKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgogCW91dGIoRUNQX0FURU5BQkxFLCAoYnJkcC0+aW9iYXNlICsgRUNQX0FUQ09ORlIpKTsKIH0KIApAQCAtMzI4MCw5ICsyOTYxLDYgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9lY3BkaXNhYmxlKHN0bGlicmRfdCAqYnJkcCkKIHsJCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9lY3BkaXNhYmxlKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgogCW91dGIoRUNQX0FURElTQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9BVENPTkZSKSk7CiB9CiAKQEAgLTMyOTAsMTMgKzI5NjgsOCBAQAogCiBzdGF0aWMgY2hhciAqc3RsaV9lY3BnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpCiB7CQotCXZvaWQJCSpwdHI7Ci0JdW5zaWduZWQgY2hhcgl2YWw7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2VjcGdldG1lbXB0cihicmRwPSV4LG9mZnNldD0leClcbiIsIChpbnQpIGJyZHAsCi0JCShpbnQpIG9mZnNldCk7Ci0jZW5kaWYKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgY2hhciB2YWw7CiAKIAlpZiAob2Zmc2V0ID4gYnJkcC0+bWVtc2l6ZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBzaGFyZWQgbWVtb3J5IHBvaW50ZXI9JXggb3V0IG9mICIKQEAgLTMzMTYsMTAgKzI5ODksNiBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2VjcHJlc2V0KHN0bGlicmRfdCAqYnJkcCkKIHsJCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9lY3ByZXNldChicmRwPSV4KVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKLQogCW91dGIoRUNQX0FUU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9BVENPTkZSKSk7CiAJdWRlbGF5KDEwKTsKIAlvdXRiKEVDUF9BVERJU0FCTEUsIChicmRwLT5pb2Jhc2UgKyBFQ1BfQVRDT05GUikpOwpAQCAtMzMzMCw5ICsyOTk5LDYgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9lY3BpbnRyKHN0bGlicmRfdCAqYnJkcCkKIHsJCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9lY3BpbnRyKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgogCW91dGIoMHgxLCBicmRwLT5pb2Jhc2UpOwogfQogCkBAIC0zMzQ2LDEwICszMDEyLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nCW1lbWNvbmY7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2VjcGVpaW5pdChicmRwPSV4KVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKLQogCW91dGIoMHgxLCAoYnJkcC0+aW9iYXNlICsgRUNQX0VJQlJERU5BQikpOwogCW91dGIoRUNQX0VJU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9FSUNPTkZSKSk7CiAJdWRlbGF5KDEwKTsKQEAgLTMzODMsMTEgKzMwNDUsNiBAQAogCXZvaWQJCSpwdHI7CiAJdW5zaWduZWQgY2hhcgl2YWw7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2VjcGVpZ2V0bWVtcHRyKGJyZHA9JXgsb2Zmc2V0PSV4LGxpbmU9JWQpXG4iLAotCQkoaW50KSBicmRwLCAoaW50KSBvZmZzZXQsIGxpbmUpOwotI2VuZGlmCi0KIAlpZiAob2Zmc2V0ID4gYnJkcC0+bWVtc2l6ZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBzaGFyZWQgbWVtb3J5IHBvaW50ZXI9JXggb3V0IG9mICIKIAkJCQkicmFuZ2UgYXQgbGluZT0lZCglZCksIGJyZD0lZFxuIiwKQEAgLTM0MzcsOCArMzA5NCw4IEBACiAKIHN0YXRpYyBjaGFyICpzdGxpX2VjcG1jZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQogewkKLQl2b2lkCQkqcHRyOwotCXVuc2lnbmVkIGNoYXIJdmFsOworCXZvaWQgKnB0cjsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCWlmIChvZmZzZXQgPiBicmRwLT5tZW1zaXplKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IHNoYXJlZCBtZW1vcnkgcG9pbnRlcj0leCBvdXQgb2YgIgpAQCAtMzQ3MiwxMCArMzEyOSw2IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfZWNwcGNpaW5pdChzdGxpYnJkX3QgKmJyZHApCiB7Ci0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9lY3BwY2lpbml0KGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgotCiAJb3V0YihFQ1BfUENJU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9QQ0lDT05GUikpOwogCXVkZWxheSgxMCk7CiAJb3V0YigwLCAoYnJkcC0+aW9iYXNlICsgRUNQX1BDSUNPTkZSKSk7CkBAIC0zNDg5LDExICszMTQyLDYgQEAKIAl2b2lkCQkqcHRyOwogCXVuc2lnbmVkIGNoYXIJdmFsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9lY3BwY2lnZXRtZW1wdHIoYnJkcD0leCxvZmZzZXQ9JXgsbGluZT0lZClcbiIsCi0JCShpbnQpIGJyZHAsIChpbnQpIG9mZnNldCwgbGluZSk7Ci0jZW5kaWYKLQogCWlmIChvZmZzZXQgPiBicmRwLT5tZW1zaXplKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IHNoYXJlZCBtZW1vcnkgcG9pbnRlcj0leCBvdXQgb2YgIgogCQkJCSJyYW5nZSBhdCBsaW5lPSVkKCVkKSwgYm9hcmQ9JWRcbiIsCkBAIC0zNTI4LDEwICszMTc2LDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nCW1lbWNvbmY7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX29uYmluaXQoYnJkcD0lZClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCi0KIAlvdXRiKE9OQl9BVFNUT1AsIChicmRwLT5pb2Jhc2UgKyBPTkJfQVRDT05GUikpOwogCXVkZWxheSgxMCk7CiAJb3V0YihPTkJfQVRESVNBQkxFLCAoYnJkcC0+aW9iYXNlICsgT05CX0FUQ09ORlIpKTsKQEAgLTM1NDcsOSArMzE5MSw2IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfb25iZW5hYmxlKHN0bGlicmRfdCAqYnJkcCkKIHsJCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9vbmJlbmFibGUoYnJkcD0leClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCiAJb3V0YigoYnJkcC0+ZW5hYnZhbCB8IE9OQl9BVEVOQUJMRSksIChicmRwLT5pb2Jhc2UgKyBPTkJfQVRDT05GUikpOwogfQogCkBAIC0zNTU3LDkgKzMxOTgsNiBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX29uYmRpc2FibGUoc3RsaWJyZF90ICpicmRwKQogewkKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX29uYmRpc2FibGUoYnJkcD0leClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCiAJb3V0YigoYnJkcC0+ZW5hYnZhbCB8IE9OQl9BVERJU0FCTEUpLCAoYnJkcC0+aW9iYXNlICsgT05CX0FUQ09ORlIpKTsKIH0KIApAQCAtMzU2OSwxMSArMzIwNyw2IEBACiB7CQogCXZvaWQJKnB0cjsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfb25iZ2V0bWVtcHRyKGJyZHA9JXgsb2Zmc2V0PSV4KVxuIiwgKGludCkgYnJkcCwKLQkJKGludCkgb2Zmc2V0KTsKLSNlbmRpZgotCiAJaWYgKG9mZnNldCA+IGJyZHAtPm1lbXNpemUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogc2hhcmVkIG1lbW9yeSBwb2ludGVyPSV4IG91dCBvZiAiCiAJCQkJInJhbmdlIGF0IGxpbmU9JWQoJWQpLCBicmQ9JWRcbiIsCkBAIC0zNTg5LDExICszMjIyLDYgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9vbmJyZXNldChzdGxpYnJkX3QgKmJyZHApCiB7CQotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9vbmJyZXNldChicmRwPSV4KVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKLQogCW91dGIoT05CX0FUU1RPUCwgKGJyZHAtPmlvYmFzZSArIE9OQl9BVENPTkZSKSk7CiAJdWRlbGF5KDEwKTsKIAlvdXRiKE9OQl9BVERJU0FCTEUsIChicmRwLT5pb2Jhc2UgKyBPTkJfQVRDT05GUikpOwpAQCAtMzYxMCwxMCArMzIzOCw2IEBACiB7CiAJdW5zaWduZWQgbG9uZwltZW1jb25mOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9vbmJlaW5pdChicmRwPSVkKVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKLQogCW91dGIoMHgxLCAoYnJkcC0+aW9iYXNlICsgT05CX0VJQlJERU5BQikpOwogCW91dGIoT05CX0VJU1RPUCwgKGJyZHAtPmlvYmFzZSArIE9OQl9FSUNPTkZSKSk7CiAJdWRlbGF5KDEwKTsKQEAgLTM2MzIsOSArMzI1Niw2IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfb25iZWVuYWJsZShzdGxpYnJkX3QgKmJyZHApCiB7CQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfb25iZWVuYWJsZShicmRwPSV4KVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKIAlvdXRiKE9OQl9FSUVOQUJMRSwgKGJyZHAtPmlvYmFzZSArIE9OQl9FSUNPTkZSKSk7CiB9CiAKQEAgLTM2NDIsOSArMzI2Myw2IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfb25iZWRpc2FibGUoc3RsaWJyZF90ICpicmRwKQogewkKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX29uYmVkaXNhYmxlKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgogCW91dGIoT05CX0VJRElTQUJMRSwgKGJyZHAtPmlvYmFzZSArIE9OQl9FSUNPTkZSKSk7CiB9CiAKQEAgLTM2NTIsMTMgKzMyNzAsOCBAQAogCiBzdGF0aWMgY2hhciAqc3RsaV9vbmJlZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQogewkKLQl2b2lkCQkqcHRyOwotCXVuc2lnbmVkIGNoYXIJdmFsOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9vbmJlZ2V0bWVtcHRyKGJyZHA9JXgsb2Zmc2V0PSV4LGxpbmU9JWQpXG4iLAotCQkoaW50KSBicmRwLCAoaW50KSBvZmZzZXQsIGxpbmUpOwotI2VuZGlmCisJdm9pZCAqcHRyOworCXVuc2lnbmVkIGNoYXIgdmFsOwogCiAJaWYgKG9mZnNldCA+IGJyZHAtPm1lbXNpemUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogc2hhcmVkIG1lbW9yeSBwb2ludGVyPSV4IG91dCBvZiAiCkBAIC0zNjgxLDExICszMjk0LDYgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9vbmJlcmVzZXQoc3RsaWJyZF90ICpicmRwKQogewkKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fRVJSICJzdGxpX29uYmVyZXNldChicmRwPSV4KVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKLQogCW91dGIoT05CX0VJU1RPUCwgKGJyZHAtPmlvYmFzZSArIE9OQl9FSUNPTkZSKSk7CiAJdWRlbGF5KDEwKTsKIAlvdXRiKE9OQl9FSURJU0FCTEUsIChicmRwLT5pb2Jhc2UgKyBPTkJfRUlDT05GUikpOwpAQCAtMzcwMCwxMSArMzMwOCw2IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfYmJ5aW5pdChzdGxpYnJkX3QgKmJyZHApCiB7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0VSUiAic3RsaV9iYnlpbml0KGJyZHA9JWQpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgotCiAJb3V0YihCQllfQVRTVE9QLCAoYnJkcC0+aW9iYXNlICsgQkJZX0FUQ09ORlIpKTsKIAl1ZGVsYXkoMTApOwogCW91dGIoMCwgKGJyZHAtPmlvYmFzZSArIEJCWV9BVENPTkZSKSk7CkBAIC0zNzE3LDI0ICszMzIwLDEzIEBACiAKIHN0YXRpYyBjaGFyICpzdGxpX2JieWdldG1lbXB0cihzdGxpYnJkX3QgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKIHsJCi0Jdm9pZAkJKnB0cjsKLQl1bnNpZ25lZCBjaGFyCXZhbDsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgY2hhciB2YWw7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0VSUiAic3RsaV9iYnlnZXRtZW1wdHIoYnJkcD0leCxvZmZzZXQ9JXgpXG4iLCAoaW50KSBicmRwLAotCQkoaW50KSBvZmZzZXQpOwotI2VuZGlmCisJQlVHX09OKG9mZnNldCA+IGJyZHAtPm1lbXNpemUpOwogCi0JaWYgKG9mZnNldCA+IGJyZHAtPm1lbXNpemUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogc2hhcmVkIG1lbW9yeSBwb2ludGVyPSV4IG91dCBvZiAiCi0JCQkJInJhbmdlIGF0IGxpbmU9JWQoJWQpLCBicmQ9JWRcbiIsCi0JCQkJKGludCkgb2Zmc2V0LCBsaW5lLCBfX0xJTkVfXywgYnJkcC0+YnJkbnIpOwotCQlwdHIgPSBOVUxMOwotCQl2YWwgPSAwOwotCX0gZWxzZSB7Ci0JCXB0ciA9IGJyZHAtPm1lbWJhc2UgKyAob2Zmc2V0ICUgQkJZX1BBR0VTSVpFKTsKLQkJdmFsID0gKHVuc2lnbmVkIGNoYXIpIChvZmZzZXQgLyBCQllfUEFHRVNJWkUpOwotCX0KKwlwdHIgPSBicmRwLT5tZW1iYXNlICsgKG9mZnNldCAlIEJCWV9QQUdFU0laRSk7CisJdmFsID0gKHVuc2lnbmVkIGNoYXIpIChvZmZzZXQgLyBCQllfUEFHRVNJWkUpOwogCW91dGIodmFsLCAoYnJkcC0+aW9iYXNlICsgQkJZX0FUQ09ORlIpKTsKIAlyZXR1cm4ocHRyKTsKIH0KQEAgLTM3NDMsMTEgKzMzMzUsNiBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2JieXJlc2V0KHN0bGlicmRfdCAqYnJkcCkKIHsJCi0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2JieXJlc2V0KGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgotCiAJb3V0YihCQllfQVRTVE9QLCAoYnJkcC0+aW9iYXNlICsgQkJZX0FUQ09ORlIpKTsKIAl1ZGVsYXkoMTApOwogCW91dGIoMCwgKGJyZHAtPmlvYmFzZSArIEJCWV9BVENPTkZSKSk7CkBAIC0zNzYyLDExICszMzQ5LDYgQEAKIAogc3RhdGljIHZvaWQgc3RsaV9zdGFsaW5pdChzdGxpYnJkX3QgKmJyZHApCiB7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX3N0YWxpbml0KGJyZHA9JWQpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgotCiAJb3V0YigweDEsIGJyZHAtPmlvYmFzZSk7CiAJbWRlbGF5KDEwMDApOwogfQpAQCAtMzc3NSwzNiArMzM1NywxOCBAQAogCiBzdGF0aWMgY2hhciAqc3RsaV9zdGFsZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQogewkKLQl2b2lkCSpwdHI7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX3N0YWxnZXRtZW1wdHIoYnJkcD0leCxvZmZzZXQ9JXgpXG4iLCAoaW50KSBicmRwLAotCQkoaW50KSBvZmZzZXQpOwotI2VuZGlmCi0KLQlpZiAob2Zmc2V0ID4gYnJkcC0+bWVtc2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBzaGFyZWQgbWVtb3J5IHBvaW50ZXI9JXggb3V0IG9mICIKLQkJCQkicmFuZ2UgYXQgbGluZT0lZCglZCksIGJyZD0lZFxuIiwKLQkJCQkoaW50KSBvZmZzZXQsIGxpbmUsIF9fTElORV9fLCBicmRwLT5icmRucik7Ci0JCXB0ciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcHRyID0gYnJkcC0+bWVtYmFzZSArIChvZmZzZXQgJSBTVEFMX1BBR0VTSVpFKTsKLQl9Ci0JcmV0dXJuKHB0cik7CisJQlVHX09OKG9mZnNldCA+IGJyZHAtPm1lbXNpemUpOworCXJldHVybiBicmRwLT5tZW1iYXNlICsgKG9mZnNldCAlIFNUQUxfUEFHRVNJWkUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB2b2lkIHN0bGlfc3RhbHJlc2V0KHN0bGlicmRfdCAqYnJkcCkKIHsJCi0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqdmVjcDsKKwl1MzIgX19pb21lbSAqdmVjcDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfc3RhbHJlc2V0KGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgotCi0JdmVjcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChicmRwLT5tZW1iYXNlICsgMHgzMCk7Ci0JKnZlY3AgPSAweGZmZmYwMDAwOworCXZlY3AgPSAodTMyIF9faW9tZW0gKikgKGJyZHAtPm1lbWJhc2UgKyAweDMwKTsKKwl3cml0ZWwoMHhmZmZmMDAwMCwgdmVjcCk7CiAJb3V0YigwLCBicmRwLT5pb2Jhc2UpOwogCW1kZWxheSgxMDAwKTsKIH0KQEAgLTM4MTgsMTUgKzMzODIsMTEgQEAKIAogc3RhdGljIGludCBzdGxpX2luaXRlY3Aoc3RsaWJyZF90ICpicmRwKQogewotCWNka2VjcHNpZ190CXNpZzsKLQljZGtlY3BzaWdfdAkqc2lnc3A7Ci0JdW5zaWduZWQgaW50CXN0YXR1cywgbnh0aWQ7Ci0JY2hhcgkJKm5hbWU7Ci0JaW50CQlwYW5lbG5yLCBucnBvcnRzOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9pbml0ZWNwKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgorCWNka2VjcHNpZ190IHNpZzsKKwljZGtlY3BzaWdfdCBfX2lvbWVtICpzaWdzcDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBueHRpZDsKKwljaGFyICpuYW1lOworCWludCBwYW5lbG5yLCBucnBvcnRzOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSwgImlzdGFsbGlvbiIpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTM4MzQsNyArMzM5NCw3IEBACiAJaWYgKChicmRwLT5pb2Jhc2UgPT0gMCkgfHwgKGJyZHAtPm1lbWFkZHIgPT0gMCkpCiAJewogCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7Ci0JCXJldHVybigtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJYnJkcC0+aW9zaXplID0gRUNQX0lPU0laRTsKQEAgLTM5MDMsNyArMzQ2Myw3IEBACiAKIAlkZWZhdWx0OgogCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7Ci0JCXJldHVybigtRUlOVkFMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAvKgpAQCAtMzkxNSwxMCArMzQ3NSwxMCBAQAogCUVCUkRJTklUKGJyZHApOwogCiAJYnJkcC0+bWVtYmFzZSA9IGlvcmVtYXAoYnJkcC0+bWVtYWRkciwgYnJkcC0+bWVtc2l6ZSk7Ci0JaWYgKGJyZHAtPm1lbWJhc2UgPT0gKHZvaWQgKikgTlVMTCkKKwlpZiAoYnJkcC0+bWVtYmFzZSA9PSBOVUxMKQogCXsKIAkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOwotCQlyZXR1cm4oLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogLyoKQEAgLTM5MjcsMjMgKzM0ODcsMTQgQEAKICAqCXRoaXMgaXMsIGFuZCB3aGF0IGl0IGlzIGNvbm5lY3RlZCB0byBpdC4KICAqLwogCUVCUkRFTkFCTEUoYnJkcCk7Ci0Jc2lnc3AgPSAoY2RrZWNwc2lnX3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBDREtfU0lHQUREUik7CisJc2lnc3AgPSAoY2RrZWNwc2lnX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19TSUdBRERSKTsKIAltZW1jcHkoJnNpZywgc2lnc3AsIHNpemVvZihjZGtlY3BzaWdfdCkpOwogCUVCUkRESVNBQkxFKGJyZHApOwogCi0jaWYgMAotCXByaW50aygiJXMoJWQpOiBzaWctPiBtYWdpYz0leCByb209JXggcGFuZWw9JXgsJXgsJXgsJXgsJXgsJXgsJXgsJXhcbiIsCi0JCV9fRklMRV9fLCBfX0xJTkVfXywgKGludCkgc2lnLm1hZ2ljLCBzaWcucm9tdmVyLCBzaWcucGFuZWxpZFswXSwKLQkJKGludCkgc2lnLnBhbmVsaWRbMV0sIChpbnQpIHNpZy5wYW5lbGlkWzJdLAotCQkoaW50KSBzaWcucGFuZWxpZFszXSwgKGludCkgc2lnLnBhbmVsaWRbNF0sCi0JCShpbnQpIHNpZy5wYW5lbGlkWzVdLCAoaW50KSBzaWcucGFuZWxpZFs2XSwKLQkJKGludCkgc2lnLnBhbmVsaWRbN10pOwotI2VuZGlmCi0KLQlpZiAoc2lnLm1hZ2ljICE9IEVDUF9NQUdJQykKKwlpZiAoc2lnLm1hZ2ljICE9IGNwdV90b19sZTMyKEVDUF9NQUdJQykpCiAJewogCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7Ci0JCXJldHVybigtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAvKgpAQCAtMzk2Nyw3ICszNTE4LDcgQEAKIAogCiAJYnJkcC0+c3RhdGUgfD0gQlNUX0ZPVU5EOwotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzk3OSwyMCArMzUzMCwxNiBAQAogCiBzdGF0aWMgaW50IHN0bGlfaW5pdG9uYihzdGxpYnJkX3QgKmJyZHApCiB7Ci0JY2Rrb25ic2lnX3QJc2lnOwotCWNka29uYnNpZ190CSpzaWdzcDsKLQljaGFyCQkqbmFtZTsKLQlpbnQJCWk7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2luaXRvbmIoYnJkcD0leClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCisJY2Rrb25ic2lnX3Qgc2lnOworCWNka29uYnNpZ190IF9faW9tZW0gKnNpZ3NwOworCWNoYXIgKm5hbWU7CisJaW50IGk7CiAKIC8qCiAgKglEbyBhIGJhc2ljIHNhbml0eSBjaGVjayBvbiB0aGUgSU8gYW5kIG1lbW9yeSBhZGRyZXNzZXMuCiAgKi8KLQlpZiAoKGJyZHAtPmlvYmFzZSA9PSAwKSB8fCAoYnJkcC0+bWVtYWRkciA9PSAwKSkKLQkJcmV0dXJuKC1FTk9ERVYpOworCWlmIChicmRwLT5pb2Jhc2UgPT0gMCB8fCBicmRwLT5tZW1hZGRyID09IDApCisJCXJldHVybiAtRU5PREVWOwogCiAJYnJkcC0+aW9zaXplID0gT05CX0lPU0laRTsKIAkKQEAgLTQwMTAsNyArMzU1Nyw2IEBACiAJY2FzZSBCUkRfT05CT0FSRDI6CiAJY2FzZSBCUkRfT05CT0FSRDJfMzI6CiAJY2FzZSBCUkRfT05CT0FSRFJTOgotCQlicmRwLT5tZW1iYXNlID0gKHZvaWQgKikgYnJkcC0+bWVtYWRkcjsKIAkJYnJkcC0+bWVtc2l6ZSA9IE9OQl9NRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IE9OQl9BVFBBR0VTSVpFOwogCQlicmRwLT5pbml0ID0gc3RsaV9vbmJpbml0OwpAQCAtNDAyOCw3ICszNTc0LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEJSRF9PTkJPQVJERToKLQkJYnJkcC0+bWVtYmFzZSA9ICh2b2lkICopIGJyZHAtPm1lbWFkZHI7CiAJCWJyZHAtPm1lbXNpemUgPSBPTkJfRUlNRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IE9OQl9FSVBBR0VTSVpFOwogCQlicmRwLT5pbml0ID0gc3RsaV9vbmJlaW5pdDsKQEAgLTQwNDQsNyArMzU4OSw2IEBACiAJY2FzZSBCUkRfQlJVTUJZNDoKIAljYXNlIEJSRF9CUlVNQlk4OgogCWNhc2UgQlJEX0JSVU1CWTE2OgotCQlicmRwLT5tZW1iYXNlID0gKHZvaWQgKikgYnJkcC0+bWVtYWRkcjsKIAkJYnJkcC0+bWVtc2l6ZSA9IEJCWV9NRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IEJCWV9QQUdFU0laRTsKIAkJYnJkcC0+aW5pdCA9IHN0bGlfYmJ5aW5pdDsKQEAgLTQwNTgsNyArMzYwMiw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCUkRfU1RBTExJT046Ci0JCWJyZHAtPm1lbWJhc2UgPSAodm9pZCAqKSBicmRwLT5tZW1hZGRyOwogCQlicmRwLT5tZW1zaXplID0gU1RBTF9NRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IFNUQUxfUEFHRVNJWkU7CiAJCWJyZHAtPmluaXQgPSBzdGxpX3N0YWxpbml0OwpAQCAtNDA3Myw3ICszNjE2LDcgQEAKIAogCWRlZmF1bHQ6CiAJCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYmFzZSwgYnJkcC0+aW9zaXplKTsKLQkJcmV0dXJuKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIC8qCkBAIC00MDg1LDEwICszNjI4LDEwIEBACiAJRUJSRElOSVQoYnJkcCk7CiAKIAlicmRwLT5tZW1iYXNlID0gaW9yZW1hcChicmRwLT5tZW1hZGRyLCBicmRwLT5tZW1zaXplKTsKLQlpZiAoYnJkcC0+bWVtYmFzZSA9PSAodm9pZCAqKSBOVUxMKQorCWlmIChicmRwLT5tZW1iYXNlID09IE5VTEwpCiAJewogCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7Ci0JCXJldHVybigtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAvKgpAQCAtNDA5NywyMSArMzY0MCwxNyBAQAogICoJdGhpcyBpcywgYW5kIGhvdyBtYW55IHBvcnRzLgogICovCiAJRUJSREVOQUJMRShicmRwKTsKLQlzaWdzcCA9IChjZGtvbmJzaWdfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19TSUdBRERSKTsKLQltZW1jcHkoJnNpZywgc2lnc3AsIHNpemVvZihjZGtvbmJzaWdfdCkpOworCXNpZ3NwID0gKGNka29uYnNpZ190IF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBDREtfU0lHQUREUik7CisJbWVtY3B5X2Zyb21pbygmc2lnLCBzaWdzcCwgc2l6ZW9mKGNka29uYnNpZ190KSk7CiAJRUJSRERJU0FCTEUoYnJkcCk7CiAKLSNpZiAwCi0JcHJpbnRrKCIlcyglZCk6IHNpZy0+IG1hZ2ljPSV4OiV4OiV4OiV4IHJvbXZlcj0leCBhbWFzaz0leDoleDoleFxuIiwKLQkJX19GSUxFX18sIF9fTElORV9fLCBzaWcubWFnaWMwLCBzaWcubWFnaWMxLCBzaWcubWFnaWMyLAotCQlzaWcubWFnaWMzLCBzaWcucm9tdmVyLCBzaWcuYW1hc2swLCBzaWcuYW1hc2sxLCBzaWcuYW1hc2syKTsKLSNlbmRpZgotCi0JaWYgKChzaWcubWFnaWMwICE9IE9OQl9NQUdJQzApIHx8IChzaWcubWFnaWMxICE9IE9OQl9NQUdJQzEpIHx8Ci0JICAgIChzaWcubWFnaWMyICE9IE9OQl9NQUdJQzIpIHx8IChzaWcubWFnaWMzICE9IE9OQl9NQUdJQzMpKQorCWlmIChzaWcubWFnaWMwICE9IGNwdV90b19sZTE2KE9OQl9NQUdJQzApIHx8CisJICAgIHNpZy5tYWdpYzEgIT0gY3B1X3RvX2xlMTYoT05CX01BR0lDMSkgfHwKKwkgICAgc2lnLm1hZ2ljMiAhPSBjcHVfdG9fbGUxNihPTkJfTUFHSUMyKSB8fAorCSAgICBzaWcubWFnaWMzICE9IGNwdV90b19sZTE2KE9OQl9NQUdJQzMpKQogCXsKIAkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOwotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogLyoKQEAgLTQxMzIsNyArMzY3MSw3IEBACiAKIAogCWJyZHAtPnN0YXRlIHw9IEJTVF9GT1VORDsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxNDUsMzEgKzM2ODQsMjUgQEAKIAogc3RhdGljIGludCBzdGxpX3N0YXJ0YnJkKHN0bGlicmRfdCAqYnJkcCkKIHsKLQl2b2xhdGlsZSBjZGtoZHJfdAkqaGRycDsKLQl2b2xhdGlsZSBjZGttZW1fdAkqbWVtcDsKLQl2b2xhdGlsZSBjZGthc3lfdAkqYXA7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0Jc3RsaXBvcnRfdAkJKnBvcnRwOwotCWludAkJCXBvcnRuciwgbnJkZXZzLCBpLCByYzsKKwljZGtoZHJfdCBfX2lvbWVtICpoZHJwOworCWNka21lbV90IF9faW9tZW0gKm1lbXA7CisJY2RrYXN5X3QgX19pb21lbSAqYXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdGxpcG9ydF90ICpwb3J0cDsKKwlpbnQgcG9ydG5yLCBucmRldnMsIGksIHJjID0gMDsKKwl1MzIgbWVtb2ZmOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9zdGFydGJyZChicmRwPSV4KVxuIiwgKGludCkgYnJkcCk7Ci0jZW5kaWYKLQotCXJjID0gMDsKLQotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwogCUVCUkRFTkFCTEUoYnJkcCk7Ci0JaGRycCA9ICh2b2xhdGlsZSBjZGtoZHJfdCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIENES19DREtBRERSKTsKKwloZHJwID0gKGNka2hkcl90IF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBDREtfQ0RLQUREUik7CiAJbnJkZXZzID0gaGRycC0+bnJkZXZzOwogCiAjaWYgMAogCXByaW50aygiJXMoJWQpOiBDREsgdmVyc2lvbiAlZC4lZC4lZCAtLT4gIgogCQkibnJkZXZzPSVkIG1lbXA9JXggaG9zdHA9JXggc2xhdmVwPSV4XG4iLAotCQkgX19GSUxFX18sIF9fTElORV9fLCBoZHJwLT52ZXJfcmVsZWFzZSwgaGRycC0+dmVyX21vZGlmaWNhdGlvbiwKLQkJIGhkcnAtPnZlcl9maXgsIG5yZGV2cywgKGludCkgaGRycC0+bWVtcCwgKGludCkgaGRycC0+aG9zdHAsCi0JCSAoaW50KSBoZHJwLT5zbGF2ZXApOworCQkgX19GSUxFX18sIF9fTElORV9fLCByZWFkYigmaGRycC0+dmVyX3JlbGVhc2UpLCByZWFkYigmaGRycC0+dmVyX21vZGlmaWNhdGlvbiksCisJCSByZWFkYigmaGRycC0+dmVyX2ZpeCksIG5yZGV2cywgKGludCkgcmVhZGwoJmhkcnAtPm1lbXApLCByZWFkbCgmaGRycC0+aG9zdHApLAorCQkgcmVhZGwoJmhkcnAtPnNsYXZlcCkpOwogI2VuZGlmCiAKIAlpZiAobnJkZXZzIDwgKGJyZHAtPm5ycG9ydHMgKyAxKSkgewpAQCAtNDE4MSwxNCArMzcxNCwxNCBAQAogCWJyZHAtPmhvc3RvZmZzZXQgPSBoZHJwLT5ob3N0cCAtIENES19DREtBRERSOwogCWJyZHAtPnNsYXZlb2Zmc2V0ID0gaGRycC0+c2xhdmVwIC0gQ0RLX0NES0FERFI7CiAJYnJkcC0+Yml0c2l6ZSA9IChucmRldnMgKyA3KSAvIDg7Ci0JbWVtcCA9ICh2b2xhdGlsZSBjZGttZW1fdCAqKSBoZHJwLT5tZW1wOwotCWlmICgoKHVuc2lnbmVkIGxvbmcpIG1lbXApID4gYnJkcC0+bWVtc2l6ZSkgeworCW1lbW9mZiA9IHJlYWRsKCZoZHJwLT5tZW1wKTsKKwlpZiAobWVtb2ZmID4gYnJkcC0+bWVtc2l6ZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBjb3JydXB0ZWQgc2hhcmVkIG1lbW9yeSByZWdpb24/XG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIHN0bGlfZG9uZXN0YXJ0dXA7CiAJfQotCW1lbXAgPSAodm9sYXRpbGUgY2RrbWVtX3QgKikgRUJSREdFVE1FTVBUUihicmRwLCAodW5zaWduZWQgbG9uZykgbWVtcCk7Ci0JaWYgKG1lbXAtPmR0eXBlICE9IFRZUF9BU1lOQ1RSTCkgeworCW1lbXAgPSAoY2RrbWVtX3QgX19pb21lbSAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIG1lbW9mZik7CisJaWYgKHJlYWR3KCZtZW1wLT5kdHlwZSkgIT0gVFlQX0FTWU5DVFJMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IG5vIHNsYXZlIGNvbnRyb2wgZGV2aWNlIGZvdW5kXG4iKTsKIAkJZ290byBzdGxpX2RvbmVzdGFydHVwOwogCX0KQEAgLTQyMDAsMTkgKzM3MzMsMTkgQEAKICAqCWNoYW5nZSBwYWdlcyB3aGlsZSByZWFkaW5nIG1lbW9yeSBtYXAuCiAgKi8KIAlmb3IgKGkgPSAxLCBwb3J0bnIgPSAwOyAoaSA8IG5yZGV2cyk7IGkrKywgcG9ydG5yKyssIG1lbXArKykgewotCQlpZiAobWVtcC0+ZHR5cGUgIT0gVFlQX0FTWU5DKQorCQlpZiAocmVhZHcoJm1lbXAtPmR0eXBlKSAhPSBUWVBfQVNZTkMpCiAJCQlicmVhazsKIAkJcG9ydHAgPSBicmRwLT5wb3J0c1twb3J0bnJdOwotCQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKKwkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQlicmVhazsKIAkJcG9ydHAtPmRldm5yID0gaTsKLQkJcG9ydHAtPmFkZHIgPSBtZW1wLT5vZmZzZXQ7CisJCXBvcnRwLT5hZGRyID0gcmVhZGwoJm1lbXAtPm9mZnNldCk7CiAJCXBvcnRwLT5yZXFiaXQgPSAodW5zaWduZWQgY2hhcikgKDB4MSA8PCAoaSAqIDggLyBucmRldnMpKTsKIAkJcG9ydHAtPnBvcnRpZHggPSAodW5zaWduZWQgY2hhcikgKGkgLyA4KTsKIAkJcG9ydHAtPnBvcnRiaXQgPSAodW5zaWduZWQgY2hhcikgKDB4MSA8PCAoaSAlIDgpKTsKIAl9CiAKLQloZHJwLT5zbGF2ZXJlcSA9IDB4ZmY7CisJd3JpdGViKDB4ZmYsICZoZHJwLT5zbGF2ZXJlcSk7CiAKIC8qCiAgKglGb3IgZWFjaCBwb3J0IHNldHVwIGEgbG9jYWwgY29weSBvZiB0aGUgUlggYW5kIFRYIGJ1ZmZlciBvZmZzZXRzCkBAIC00MjIxLDIyICszNzU0LDIyIEBACiAgKi8KIAlmb3IgKGkgPSAxLCBwb3J0bnIgPSAwOyAoaSA8IG5yZGV2cyk7IGkrKywgcG9ydG5yKyspIHsKIAkJcG9ydHAgPSBicmRwLT5wb3J0c1twb3J0bnJdOwotCQlpZiAocG9ydHAgPT0gKHN0bGlwb3J0X3QgKikgTlVMTCkKKwkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQlicmVhazsKIAkJaWYgKHBvcnRwLT5hZGRyID09IDApCiAJCQlicmVhazsKLQkJYXAgPSAodm9sYXRpbGUgY2RrYXN5X3QgKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+YWRkcik7Ci0JCWlmIChhcCAhPSAodm9sYXRpbGUgY2RrYXN5X3QgKikgTlVMTCkgewotCQkJcG9ydHAtPnJ4c2l6ZSA9IGFwLT5yeHEuc2l6ZTsKLQkJCXBvcnRwLT50eHNpemUgPSBhcC0+dHhxLnNpemU7Ci0JCQlwb3J0cC0+cnhvZmZzZXQgPSBhcC0+cnhxLm9mZnNldDsKLQkJCXBvcnRwLT50eG9mZnNldCA9IGFwLT50eHEub2Zmc2V0OworCQlhcCA9IChjZGthc3lfdCBfX2lvbWVtICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgcG9ydHAtPmFkZHIpOworCQlpZiAoYXAgIT0gTlVMTCkgeworCQkJcG9ydHAtPnJ4c2l6ZSA9IHJlYWR3KCZhcC0+cnhxLnNpemUpOworCQkJcG9ydHAtPnR4c2l6ZSA9IHJlYWR3KCZhcC0+dHhxLnNpemUpOworCQkJcG9ydHAtPnJ4b2Zmc2V0ID0gcmVhZGwoJmFwLT5yeHEub2Zmc2V0KTsKKwkJCXBvcnRwLT50eG9mZnNldCA9IHJlYWRsKCZhcC0+dHhxLm9mZnNldCk7CiAJCX0KIAl9CiAKIHN0bGlfZG9uZXN0YXJ0dXA6CiAJRUJSRERJU0FCTEUoYnJkcCk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAogCWlmIChyYyA9PSAwKQogCQlicmRwLT5zdGF0ZSB8PSBCU1RfU1RBUlRFRDsKQEAgLTQyNDcsNyArMzc4MCw3IEBACiAJCWFkZF90aW1lcigmc3RsaV90aW1lcmxpc3QpOwogCX0KIAotCXJldHVybihyYyk7CisJcmV0dXJuIHJjOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MjU4LDEwICszNzkxLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3RsaV9icmRpbml0KHN0bGlicmRfdCAqYnJkcCkKIHsKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX2JyZGluaXQoYnJkcD0leClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCi0KIAlzdGxpX2JyZHNbYnJkcC0+YnJkbnJdID0gYnJkcDsKIAogCXN3aXRjaCAoYnJkcC0+YnJkdHlwZSkgewpAQCAtNDI4OSwxMSArMzgxOCwxMSBAQAogCWNhc2UgQlJEX0VDSFBDSToKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogJXMgYm9hcmQgdHlwZSBub3Qgc3VwcG9ydGVkIGluICIKIAkJCQkidGhpcyBkcml2ZXJcbiIsIHN0bGlfYnJkbmFtZXNbYnJkcC0+YnJkdHlwZV0pOwotCQlyZXR1cm4oRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogYm9hcmQ9JWQgaXMgdW5rbm93biBib2FyZCAiCiAJCQkJInR5cGU9JWRcbiIsIGJyZHAtPmJyZG5yLCBicmRwLT5icmR0eXBlKTsKLQkJcmV0dXJuKEVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgoYnJkcC0+c3RhdGUgJiBCU1RfRk9VTkQpID09IDApIHsKQEAgLTQzMDEsNyArMzgzMCw3IEBACiAJCQkJImlvPSV4IG1lbT0leFxuIiwKIAkJCXN0bGlfYnJkbmFtZXNbYnJkcC0+YnJkdHlwZV0sIGJyZHAtPmJyZG5yLAogCQkJYnJkcC0+aW9iYXNlLCAoaW50KSBicmRwLT5tZW1hZGRyKTsKLQkJcmV0dXJuKEVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXN0bGlfaW5pdHBvcnRzKGJyZHApOwpAQCAtNDMwOSw3ICszODM4LDcgQEAKIAkJIm5ycGFuZWxzPSVkIG5ycG9ydHM9JWRcbiIsIHN0bGlfYnJkbmFtZXNbYnJkcC0+YnJkdHlwZV0sCiAJCWJyZHAtPmJyZG5yLCBicmRwLT5pb2Jhc2UsIChpbnQpIGJyZHAtPm1lbWFkZHIsCiAJCWJyZHAtPm5ycGFuZWxzLCBicmRwLT5ucnBvcnRzKTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQzMjEsMTQgKzM4NTAsMTAgQEAKIAogc3RhdGljIGludCBzdGxpX2Vpc2FtZW1wcm9iZShzdGxpYnJkX3QgKmJyZHApCiB7Ci0JY2RrZWNwc2lnX3QJZWNwc2lnLCAqZWNwc2lncDsKLQljZGtvbmJzaWdfdAlvbmJzaWcsICpvbmJzaWdwOworCWNka2VjcHNpZ190CWVjcHNpZywgX19pb21lbSAqZWNwc2lncDsKKwljZGtvbmJzaWdfdAlvbmJzaWcsIF9faW9tZW0gKm9uYnNpZ3A7CiAJaW50CQlpLCBmb3VuZGl0OwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9laXNhbWVtcHJvYmUoYnJkcD0leClcbiIsIChpbnQpIGJyZHApOwotI2VuZGlmCi0KIC8qCiAgKglGaXJzdCB1cCB3ZSByZXNldCB0aGUgYm9hcmQsIHRvIGdldCBpdCBpbnRvIGEga25vd24gc3RhdGUuIFRoZXJlCiAgKglpcyBvbmx5IDIgYm9hcmQgdHlwZXMgaGVyZSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBEb247dCB1c2UgdGhlCkBAIC00MzUyLDcgKzM4NzcsNyBAQAogCQltZGVsYXkoMSk7CiAJCXN0bGlfb25iZWVuYWJsZShicmRwKTsKIAl9IGVsc2UgewotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWZvdW5kaXQgPSAwOwpAQCAtNDM2NCwyNSArMzg4OSwyNCBAQAogICovCiAJZm9yIChpID0gMDsgKGkgPCBzdGxpX2Vpc2FtZW1wc2l6ZSk7IGkrKykgewogCQlicmRwLT5tZW1hZGRyID0gc3RsaV9laXNhbWVtcHJvYmVhZGRyc1tpXTsKLQkJYnJkcC0+bWVtYmFzZSA9ICh2b2lkICopIGJyZHAtPm1lbWFkZHI7CiAJCWJyZHAtPm1lbWJhc2UgPSBpb3JlbWFwKGJyZHAtPm1lbWFkZHIsIGJyZHAtPm1lbXNpemUpOwotCQlpZiAoYnJkcC0+bWVtYmFzZSA9PSAodm9pZCAqKSBOVUxMKQorCQlpZiAoYnJkcC0+bWVtYmFzZSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJaWYgKGJyZHAtPmJyZHR5cGUgPT0gQlJEX0VDUEUpIHsKLQkJCWVjcHNpZ3AgPSAoY2RrZWNwc2lnX3QgKikgc3RsaV9lY3BlaWdldG1lbXB0cihicmRwLAorCQkJZWNwc2lncCA9IChjZGtlY3BzaWdfdCBfX2lvbWVtICopIHN0bGlfZWNwZWlnZXRtZW1wdHIoYnJkcCwKIAkJCQlDREtfU0lHQUREUiwgX19MSU5FX18pOwotCQkJbWVtY3B5KCZlY3BzaWcsIGVjcHNpZ3AsIHNpemVvZihjZGtlY3BzaWdfdCkpOwotCQkJaWYgKGVjcHNpZy5tYWdpYyA9PSBFQ1BfTUFHSUMpCisJCQltZW1jcHlfZnJvbWlvKCZlY3BzaWcsIGVjcHNpZ3AsIHNpemVvZihjZGtlY3BzaWdfdCkpOworCQkJaWYgKGVjcHNpZy5tYWdpYyA9PSBjcHVfdG9fbGUzMihFQ1BfTUFHSUMpKQogCQkJCWZvdW5kaXQgPSAxOwogCQl9IGVsc2UgewotCQkJb25ic2lncCA9IChjZGtvbmJzaWdfdCAqKSBzdGxpX29uYmVnZXRtZW1wdHIoYnJkcCwKKwkJCW9uYnNpZ3AgPSAoY2Rrb25ic2lnX3QgX19pb21lbSAqKSBzdGxpX29uYmVnZXRtZW1wdHIoYnJkcCwKIAkJCQlDREtfU0lHQUREUiwgX19MSU5FX18pOwotCQkJbWVtY3B5KCZvbmJzaWcsIG9uYnNpZ3AsIHNpemVvZihjZGtvbmJzaWdfdCkpOwotCQkJaWYgKChvbmJzaWcubWFnaWMwID09IE9OQl9NQUdJQzApICYmCi0JCQkgICAgKG9uYnNpZy5tYWdpYzEgPT0gT05CX01BR0lDMSkgJiYKLQkJCSAgICAob25ic2lnLm1hZ2ljMiA9PSBPTkJfTUFHSUMyKSAmJgotCQkJICAgIChvbmJzaWcubWFnaWMzID09IE9OQl9NQUdJQzMpKQorCQkJbWVtY3B5X2Zyb21pbygmb25ic2lnLCBvbmJzaWdwLCBzaXplb2YoY2Rrb25ic2lnX3QpKTsKKwkJCWlmICgob25ic2lnLm1hZ2ljMCA9PSBjcHVfdG9fbGUxNihPTkJfTUFHSUMwKSkgJiYKKwkJCSAgICAob25ic2lnLm1hZ2ljMSA9PSBjcHVfdG9fbGUxNihPTkJfTUFHSUMxKSkgJiYKKwkJCSAgICAob25ic2lnLm1hZ2ljMiA9PSBjcHVfdG9fbGUxNihPTkJfTUFHSUMyKSkgJiYKKwkJCSAgICAob25ic2lnLm1hZ2ljMyA9PSBjcHVfdG9fbGUxNihPTkJfTUFHSUMzKSkpCiAJCQkJZm91bmRpdCA9IDE7CiAJCX0KIApAQCAtNDQwNiw5ICszOTMwLDkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogZmFpbGVkIHRvIHByb2JlIHNoYXJlZCBtZW1vcnkgIgogCQkJCSJyZWdpb24gZm9yICVzIGluIEVJU0Egc2xvdD0lZFxuIiwKIAkJCXN0bGlfYnJkbmFtZXNbYnJkcC0+YnJkdHlwZV0sIChicmRwLT5pb2Jhc2UgPj4gMTIpKTsKLQkJcmV0dXJuKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHN0bGlfZ2V0YnJkbnIodm9pZCkKQEAgLTQ0MzksMjIgKzM5NjMsMTYgQEAKIAogc3RhdGljIGludCBzdGxpX2ZpbmRlaXNhYnJkcyh2b2lkKQogewotCXN0bGlicmRfdAkqYnJkcDsKLQl1bnNpZ25lZCBpbnQJaW9iYXNlLCBlaWQ7Ci0JaW50CQlpOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9maW5kZWlzYWJyZHMoKVxuIik7Ci0jZW5kaWYKKwlzdGxpYnJkX3QgKmJyZHA7CisJdW5zaWduZWQgaW50IGlvYmFzZSwgZWlkOworCWludCBpOwogCiAvKgotICoJRmlyc3RseSBjaGVjayBpZiB0aGlzIGlzIGFuIEVJU0Egc3lzdGVtLiBEbyB0aGlzIGJ5IHByb2JpbmcgZm9yCi0gKgl0aGUgc3lzdGVtIGJvYXJkIEVJU0EgSUQuIElmIHRoaXMgaXMgbm90IGFuIEVJU0Egc3lzdGVtIHRoZW4KKyAqCUZpcnN0bHkgY2hlY2sgaWYgdGhpcyBpcyBhbiBFSVNBIHN5c3RlbS4gIElmIHRoaXMgaXMgbm90IGFuIEVJU0Egc3lzdGVtIHRoZW4KICAqCWRvbid0IGJvdGhlciBnb2luZyBhbnkgZnVydGhlciEKICAqLwotCW91dGIoMHhmZiwgMHhjODApOwotCWlmIChpbmIoMHhjODApID09IDB4ZmYpCi0JCXJldHVybigwKTsKKwlpZiAoRUlTQV9idXMpCisJCXJldHVybiAwOwogCiAvKgogICoJTG9va3MgbGlrZSBhbiBFSVNBIHN5c3RlbSwgc28gZ28gc2VhcmNoaW5nIGZvciBFSVNBIGJvYXJkcy4KQEAgLTQ0NzIsNyArMzk5MCw3IEBACiAgKi8KIAkJZm9yIChpID0gMDsgKGkgPCBTVExfTUFYQlJEUyk7IGkrKykgewogCQkJYnJkcCA9IHN0bGlfYnJkc1tpXTsKLQkJCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKKwkJCWlmIChicmRwID09IE5VTEwpCiAJCQkJY29udGludWU7CiAJCQlpZiAoYnJkcC0+aW9iYXNlID09IGlvYmFzZSkKIAkJCQlicmVhazsKQEAgLTQ0ODQsMTAgKzQwMDIsMTAgQEAKICAqCQlXZSBoYXZlIGZvdW5kIGEgU3RhbGxpb24gYm9hcmQgYW5kIGl0IGlzIG5vdCBjb25maWd1cmVkIGFscmVhZHkuCiAgKgkJQWxsb2NhdGUgYSBib2FyZCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemUgaXQuCiAgKi8KLQkJaWYgKChicmRwID0gc3RsaV9hbGxvY2JyZCgpKSA9PSAoc3RsaWJyZF90ICopIE5VTEwpCi0JCQlyZXR1cm4oLUVOT01FTSk7CisJCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlpZiAoKGJyZHAtPmJyZG5yID0gc3RsaV9nZXRicmRucigpKSA8IDApCi0JCQlyZXR1cm4oLUVOT01FTSk7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJZWlkID0gaW5iKGlvYmFzZSArIDB4YzgyKTsKIAkJaWYgKGVpZCA9PSBFQ1BfRUlTQUlEKQogCQkJYnJkcC0+YnJkdHlwZSA9IEJSRF9FQ1BFOwpAQCAtNDUwMiw3ICs0MDIwLDcgQEAKIAkJc3RsaV9icmRpbml0KGJyZHApOwogCX0KIAotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDUyMywzMiArNDA0MSwxOCBAQAogCiBzdGF0aWMgaW50IHN0bGlfaW5pdHBjaWJyZChpbnQgYnJkdHlwZSwgc3RydWN0IHBjaV9kZXYgKmRldnApCiB7Ci0Jc3RsaWJyZF90CSpicmRwOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3RsaV9pbml0cGNpYnJkKGJyZHR5cGU9JWQsYnVzbnI9JXgsZGV2bnI9JXgpXG4iLAotCQlicmR0eXBlLCBkZXYtPmJ1cy0+bnVtYmVyLCBkZXYtPmRldmZuKTsKLSNlbmRpZgorCXN0bGlicmRfdCAqYnJkcDsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZwKSkKLQkJcmV0dXJuKC1FSU8pOwotCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm4oLUVOT01FTSk7CisJCXJldHVybiAtRUlPOworCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKChicmRwLT5icmRuciA9IHN0bGlfZ2V0YnJkbnIoKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlNUQUxMSU9OOiB0b28gbWFueSBib2FyZHMgZm91bmQsICIKIAkJCSJtYXhpbXVtIHN1cHBvcnRlZCAlZFxuIiwgU1RMX01BWEJSRFMpOwotCQlyZXR1cm4oMCk7CisJCXJldHVybiAwOwogCX0KIAlicmRwLT5icmR0eXBlID0gYnJkdHlwZTsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVkKTogQkFSW109JWx4LCVseCwlbHgsJWx4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwLCAwKSwKLQkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnAsIDEpLAotCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cCwgMiksCi0JCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwLCAzKSk7Ci0jZW5kaWYKLQogLyoKICAqCVdlIGhhdmUgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBib2FyZCwgc28gbGV0cyBzZXR1cCB0aGUgYWN0dWFsCiAgKglib2FyZCBzdHJ1Y3R1cmUgbm93LgpAQCAtNDU1Nyw3ICs0MDYxLDcgQEAKIAlicmRwLT5tZW1hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldnAsIDIpOwogCXN0bGlfYnJkaW5pdChicmRwKTsKIAotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDU2OSwyMCArNDA3MywxMiBAQAogCiBzdGF0aWMgaW50IHN0bGlfZmluZHBjaWJyZHModm9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2RldgkqZGV2ID0gTlVMTDsKLQlpbnQJCXJjOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bGlfZmluZHBjaWJyZHMoKVxuIik7Ci0jZW5kaWYKLQotCXdoaWxlICgoZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfU1RBTExJT04sCi0JICAgIFBDSV9ERVZJQ0VfSURfRUNSQSwgZGV2KSkpIHsKLQkJaWYgKChyYyA9IHN0bGlfaW5pdHBjaWJyZChCUkRfRUNQUENJLCBkZXYpKSkKLQkJCXJldHVybihyYyk7CisJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NUQUxMSU9OLCBQQ0lfREVWSUNFX0lEX0VDUkEsIGRldikpKSB7CisJCXN0bGlfaW5pdHBjaWJyZChCUkRfRUNQUENJLCBkZXYpOwogCX0KLQotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogI2VuZGlmCkBAIC00NTk1LDE3ICs0MDkxLDE2IEBACiAKIHN0YXRpYyBzdGxpYnJkX3QgKnN0bGlfYWxsb2NicmQodm9pZCkKIHsKLQlzdGxpYnJkX3QJKmJyZHA7CisJc3RsaWJyZF90ICpicmRwOwogCiAJYnJkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0bGlicmRfdCksIEdGUF9LRVJORUwpOwogCWlmICghYnJkcCkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICIKLQkJCQkiKHNpemU9JWQpXG4iLCBzaXplb2Yoc3RsaWJyZF90KSk7CisJCQkJIihzaXplPSVaZClcbiIsIHNpemVvZihzdGxpYnJkX3QpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCiAJYnJkcC0+bWFnaWMgPSBTVExJX0JPQVJETUFHSUM7Ci0JcmV0dXJuKGJyZHApOworCXJldHVybiBicmRwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00NjE3LDEzICs0MTEyLDkgQEAKIAogc3RhdGljIGludCBzdGxpX2luaXRicmRzKHZvaWQpCiB7Ci0Jc3RsaWJyZF90CSpicmRwLCAqbnh0YnJkcDsKLQlzdGxjb25mX3QJKmNvbmZwOwotCWludAkJaSwgajsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfaW5pdGJyZHMoKVxuIik7Ci0jZW5kaWYKKwlzdGxpYnJkX3QgKmJyZHAsICpueHRicmRwOworCXN0bGNvbmZfdCAqY29uZnA7CisJaW50IGksIGo7CiAKIAlpZiAoc3RsaV9ucmJyZHMgPiBTVExfTUFYQlJEUykgewogCQlwcmludGsoS0VSTl9JTkZPICJTVEFMTElPTjogdG9vIG1hbnkgYm9hcmRzIGluIGNvbmZpZ3VyYXRpb24gIgpAQCAtNDYzOCwxMSArNDEyOSw5IEBACiAgKi8KIAlmb3IgKGkgPSAwOyAoaSA8IHN0bGlfbnJicmRzKTsgaSsrKSB7CiAJCWNvbmZwID0gJnN0bGlfYnJkY29uZltpXTsKLSNpZmRlZiBNT0RVTEUKIAkJc3RsaV9wYXJzZWJyZChjb25mcCwgc3RsaV9icmRzcFtpXSk7Ci0jZW5kaWYKLQkJaWYgKChicmRwID0gc3RsaV9hbGxvY2JyZCgpKSA9PSAoc3RsaWJyZF90ICopIE5VTEwpCi0JCQlyZXR1cm4oLUVOT01FTSk7CisJCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOwogCQlicmRwLT5icmRuciA9IGk7CiAJCWJyZHAtPmJyZHR5cGUgPSBjb25mcC0+YnJkdHlwZTsKIAkJYnJkcC0+aW9iYXNlID0gY29uZnAtPmlvYWRkcjE7CkBAIC00NjU0LDkgKzQxNDMsNyBAQAogICoJU3RhdGljIGNvbmZpZ3VyYXRpb24gdGFibGUgZG9uZSwgc28gbm93IHVzZSBkeW5hbWljIG1ldGhvZHMgdG8KICAqCXNlZSBpZiBhbnkgbW9yZSBib2FyZHMgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCiAgKi8KLSNpZmRlZiBNT0RVTEUKIAlzdGxpX2FyZ2JyZHMoKTsKLSNlbmRpZgogCWlmIChTVExJX0VJU0FQUk9CRSkKIAkJc3RsaV9maW5kZWlzYWJyZHMoKTsKICNpZmRlZiBDT05GSUdfUENJCkBAIC00NjcyLDExICs0MTU5LDExIEBACiAJaWYgKHN0bGlfbnJicmRzID4gMSkgewogCQlmb3IgKGkgPSAwOyAoaSA8IHN0bGlfbnJicmRzKTsgaSsrKSB7CiAJCQlicmRwID0gc3RsaV9icmRzW2ldOwotCQkJaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQorCQkJaWYgKGJyZHAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAkJCWZvciAoaiA9IGkgKyAxOyAoaiA8IHN0bGlfbnJicmRzKTsgaisrKSB7CiAJCQkJbnh0YnJkcCA9IHN0bGlfYnJkc1tqXTsKLQkJCQlpZiAobnh0YnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCisJCQkJaWYgKG54dGJyZHAgPT0gTlVMTCkKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKChicmRwLT5tZW1iYXNlID49IG54dGJyZHAtPm1lbWJhc2UpICYmCiAJCQkJICAgIChicmRwLT5tZW1iYXNlIDw9IChueHRicmRwLT5tZW1iYXNlICsKQEAgLTQ2OTEsNyArNDE3OCw3IEBACiAJaWYgKHN0bGlfc2hhcmVkID09IDApIHsKIAkJZm9yIChpID0gMDsgKGkgPCBzdGxpX25yYnJkcyk7IGkrKykgewogCQkJYnJkcCA9IHN0bGlfYnJkc1tpXTsKLQkJCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKKwkJCWlmIChicmRwID09IE5VTEwpCiAJCQkJY29udGludWU7CiAJCQlpZiAoYnJkcC0+c3RhdGUgJiBCU1RfRk9VTkQpIHsKIAkJCQlFQlJERU5BQkxFKGJyZHApOwpAQCAtNDcwMSw3ICs0MTg4LDcgQEAKIAkJfQogCX0KIAotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDcxNCw0OCArNDIwMSw1NSBAQAogCiBzdGF0aWMgc3NpemVfdCBzdGxpX21lbXJlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKIHsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXZvaWQJCSptZW1wdHI7Ci0Jc3RsaWJyZF90CSpicmRwOwotCWludAkJYnJkbnIsIHNpemUsIG47Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX21lbXJlYWQoZnA9JXgsYnVmPSV4LGNvdW50PSV4LG9mZnA9JXgpXG4iLAotCQkJKGludCkgZnAsIChpbnQpIGJ1ZiwgY291bnQsIChpbnQpIG9mZnApOwotI2VuZGlmCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICptZW1wdHI7CisJc3RsaWJyZF90ICpicmRwOworCWludCBicmRuciwgc2l6ZSwgbjsKKwl2b2lkICpwOworCWxvZmZfdCBvZmYgPSAqb2ZmcDsKIAogCWJyZG5yID0gaW1pbm9yKGZwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKGJyZG5yID49IHN0bGlfbnJicmRzKQotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCWJyZHAgPSBzdGxpX2JyZHNbYnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOworCWlmIChicmRwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCWlmIChicmRwLT5zdGF0ZSA9PSAwKQotCQlyZXR1cm4oLUVOT0RFVik7Ci0JaWYgKGZwLT5mX3BvcyA+PSBicmRwLT5tZW1zaXplKQotCQlyZXR1cm4oMCk7CisJCXJldHVybiAtRU5PREVWOworCWlmIChvZmYgPj0gYnJkcC0+bWVtc2l6ZSB8fCBvZmYgKyBjb3VudCA8IG9mZikKKwkJcmV0dXJuIDA7CiAKLQlzaXplID0gTUlOKGNvdW50LCAoYnJkcC0+bWVtc2l6ZSAtIGZwLT5mX3BvcykpOworCXNpemUgPSBNSU4oY291bnQsIChicmRwLT5tZW1zaXplIC0gb2ZmKSk7CiAKLQlzYXZlX2ZsYWdzKGZsYWdzKTsKLQljbGkoKTsKLQlFQlJERU5BQkxFKGJyZHApOworCS8qCisJICoJQ29weSB0aGUgZGF0YSBhIHBhZ2UgYXQgYSB0aW1lCisJICovCisKKwlwID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXdoaWxlIChzaXplID4gMCkgewotCQltZW1wdHIgPSAodm9pZCAqKSBFQlJER0VUTUVNUFRSKGJyZHAsIGZwLT5mX3Bvcyk7Ci0JCW4gPSBNSU4oc2l6ZSwgKGJyZHAtPnBhZ2VzaXplIC0gKCgodW5zaWduZWQgbG9uZykgZnAtPmZfcG9zKSAlIGJyZHAtPnBhZ2VzaXplKSkpOwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgbWVtcHRyLCBuKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwkJRUJSREVOQUJMRShicmRwKTsKKwkJbWVtcHRyID0gKHZvaWQgKikgRUJSREdFVE1FTVBUUihicmRwLCBvZmYpOworCQluID0gTUlOKHNpemUsIChicmRwLT5wYWdlc2l6ZSAtICgoKHVuc2lnbmVkIGxvbmcpIG9mZikgJSBicmRwLT5wYWdlc2l6ZSkpKTsKKwkJbiA9IE1JTihuLCBQQUdFX1NJWkUpOworCQltZW1jcHlfZnJvbWlvKHAsIG1lbXB0ciwgbik7CisJCUVCUkRESVNBQkxFKGJyZHApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmRfbG9jaywgZmxhZ3MpOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcCwgbikpIHsKIAkJCWNvdW50ID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWZwLT5mX3BvcyArPSBuOworCQlvZmYgKz0gbjsKIAkJYnVmICs9IG47CiAJCXNpemUgLT0gbjsKIAl9CiBvdXQ6Ci0JRUJSRERJU0FCTEUoYnJkcCk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7Ci0KLQlyZXR1cm4oY291bnQpOworCSpvZmZwID0gb2ZmOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwKTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ3NjQsNTQgKzQyNTgsNjUgQEAKICAqCUNvZGUgdG8gaGFuZGxlIGFuICJzdGFsaW9tZW0iIHdyaXRlIG9wZXJhdGlvbi4gVGhpcyBkZXZpY2UgaXMgdGhlIAogICoJY29udGVudHMgb2YgdGhlIGJvYXJkIHNoYXJlZCBtZW1vcnkuIEl0IGlzIHVzZWQgZm9yIGRvd24gbG9hZGluZwogICoJdGhlIHNsYXZlIGltYWdlIChhbmQgZGVidWdnaW5nIDotKQorICoKKyAqCUZJWE1FOiBjb3B5IHVuZGVyIGxvY2sKICAqLwogCiBzdGF0aWMgc3NpemVfdCBzdGxpX21lbXdyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQl2b2lkCQkqbWVtcHRyOwotCXN0bGlicmRfdAkqYnJkcDsKLQljaGFyCQlfX3VzZXIgKmNoYnVmOwotCWludAkJYnJkbnIsIHNpemUsIG47Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJzdGxpX21lbXdyaXRlKGZwPSV4LGJ1Zj0leCxjb3VudD0leCxvZmZwPSV4KVxuIiwKLQkJCShpbnQpIGZwLCAoaW50KSBidWYsIGNvdW50LCAoaW50KSBvZmZwKTsKLSNlbmRpZgorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqbWVtcHRyOworCXN0bGlicmRfdCAqYnJkcDsKKwljaGFyIF9fdXNlciAqY2hidWY7CisJaW50IGJyZG5yLCBzaXplLCBuOworCXZvaWQgKnA7CisJbG9mZl90IG9mZiA9ICpvZmZwOwogCiAJYnJkbnIgPSBpbWlub3IoZnAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwogCWlmIChicmRuciA+PSBzdGxpX25yYnJkcykKLQkJcmV0dXJuKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAlicmRwID0gc3RsaV9icmRzW2JyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCi0JCXJldHVybigtRU5PREVWKTsKKwlpZiAoYnJkcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoYnJkcC0+c3RhdGUgPT0gMCkKLQkJcmV0dXJuKC1FTk9ERVYpOwotCWlmIChmcC0+Zl9wb3MgPj0gYnJkcC0+bWVtc2l6ZSkKLQkJcmV0dXJuKDApOworCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAob2ZmID49IGJyZHAtPm1lbXNpemUgfHwgb2ZmICsgY291bnQgPCBvZmYpCisJCXJldHVybiAwOwogCiAJY2hidWYgPSAoY2hhciBfX3VzZXIgKikgYnVmOwotCXNpemUgPSBNSU4oY291bnQsIChicmRwLT5tZW1zaXplIC0gZnAtPmZfcG9zKSk7CisJc2l6ZSA9IE1JTihjb3VudCwgKGJyZHAtPm1lbXNpemUgLSBvZmYpKTsKIAotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOwotCUVCUkRFTkFCTEUoYnJkcCk7CisJLyoKKwkgKglDb3B5IHRoZSBkYXRhIGEgcGFnZSBhdCBhIHRpbWUKKwkgKi8KKworCXAgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZihwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCiAJd2hpbGUgKHNpemUgPiAwKSB7Ci0JCW1lbXB0ciA9ICh2b2lkICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgZnAtPmZfcG9zKTsKLQkJbiA9IE1JTihzaXplLCAoYnJkcC0+cGFnZXNpemUgLSAoKCh1bnNpZ25lZCBsb25nKSBmcC0+Zl9wb3MpICUgYnJkcC0+cGFnZXNpemUpKSk7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihtZW1wdHIsIGNoYnVmLCBuKSkgewotCQkJY291bnQgPSAtRUZBVUxUOworCQluID0gTUlOKHNpemUsIChicmRwLT5wYWdlc2l6ZSAtICgoKHVuc2lnbmVkIGxvbmcpIG9mZikgJSBicmRwLT5wYWdlc2l6ZSkpKTsKKwkJbiA9IE1JTihuLCBQQUdFX1NJWkUpOworCQlpZiAoY29weV9mcm9tX3VzZXIocCwgY2hidWYsIG4pKSB7CisJCQlpZiAoY291bnQgPT0gMCkKKwkJCQljb3VudCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlmcC0+Zl9wb3MgKz0gbjsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CisJCUVCUkRFTkFCTEUoYnJkcCk7CisJCW1lbXB0ciA9ICh2b2lkICopIEVCUkRHRVRNRU1QVFIoYnJkcCwgb2ZmKTsKKwkJbWVtY3B5X3RvaW8obWVtcHRyLCBwLCBuKTsKKwkJRUJSRERJU0FCTEUoYnJkcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CisJCW9mZiArPSBuOwogCQljaGJ1ZiArPSBuOwogCQlzaXplIC09IG47CiAJfQogb3V0OgotCUVCUkRESVNBQkxFKGJyZHApOwotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwotCi0JcmV0dXJuKGNvdW50KTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHApOworCSpvZmZwID0gb2ZmOworCXJldHVybiBjb3VudDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDgyMiwxNiArNDMyNywxNiBAQAogCiBzdGF0aWMgaW50IHN0bGlfZ2V0YnJkc3RhdHMoY29tYnJkX3QgX191c2VyICpicCkKIHsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0JaW50CQlpOworCXN0bGlicmRfdCAqYnJkcDsKKwlpbnQgaTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmc3RsaV9icmRzdGF0cywgYnAsIHNpemVvZihjb21icmRfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoc3RsaV9icmRzdGF0cy5icmQgPj0gU1RMX01BWEJSRFMpCi0JCXJldHVybigtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYnJkcCA9IHN0bGlfYnJkc1tzdGxpX2JyZHN0YXRzLmJyZF07Ci0JaWYgKGJyZHAgPT0gKHN0bGlicmRfdCAqKSBOVUxMKQotCQlyZXR1cm4oLUVOT0RFVik7CisJaWYgKGJyZHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAltZW1zZXQoJnN0bGlfYnJkc3RhdHMsIDAsIHNpemVvZihjb21icmRfdCkpOwogCXN0bGlfYnJkc3RhdHMuYnJkID0gYnJkcC0+YnJkbnI7CkBAIC00ODUwLDcgKzQzNTUsNyBAQAogCiAJaWYgKGNvcHlfdG9fdXNlcihicCwgJnN0bGlfYnJkc3RhdHMsIHNpemVvZihjb21icmRfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ4NjEsMTkgKzQzNjYsMTkgQEAKIAogc3RhdGljIHN0bGlwb3J0X3QgKnN0bGlfZ2V0cG9ydChpbnQgYnJkbnIsIGludCBwYW5lbG5yLCBpbnQgcG9ydG5yKQogewotCXN0bGlicmRfdAkqYnJkcDsKLQlpbnQJCWk7CisJc3RsaWJyZF90ICpicmRwOworCWludCBpOwogCi0JaWYgKChicmRuciA8IDApIHx8IChicmRuciA+PSBTVExfTUFYQlJEUykpCi0JCXJldHVybigoc3RsaXBvcnRfdCAqKSBOVUxMKTsKKwlpZiAoYnJkbnIgPCAwIHx8IGJyZG5yID49IFNUTF9NQVhCUkRTKQorCQlyZXR1cm4gTlVMTDsKIAlicmRwID0gc3RsaV9icmRzW2JyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsaWJyZF90ICopIE5VTEwpCi0JCXJldHVybigoc3RsaXBvcnRfdCAqKSBOVUxMKTsKKwlpZiAoYnJkcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAlmb3IgKGkgPSAwOyAoaSA8IHBhbmVsbnIpOyBpKyspCiAJCXBvcnRuciArPSBicmRwLT5wYW5lbHNbaV07CiAJaWYgKChwb3J0bnIgPCAwKSB8fCAocG9ydG5yID49IGJyZHAtPm5ycG9ydHMpKQotCQlyZXR1cm4oKHN0bGlwb3J0X3QgKikgTlVMTCk7Ci0JcmV0dXJuKGJyZHAtPnBvcnRzW3BvcnRucl0pOworCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gYnJkcC0+cG9ydHNbcG9ydG5yXTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDg5MiwxNiArNDM5NywxNiBAQAogCiAJbWVtc2V0KCZzdGxpX2NvbXN0YXRzLCAwLCBzaXplb2YoY29tc3RhdHNfdCkpOwogCi0JaWYgKHBvcnRwID09IChzdGxpcG9ydF90ICopIE5VTEwpCi0JCXJldHVybigtRU5PREVWKTsKKwlpZiAocG9ydHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwotCWlmIChicmRwID09IChzdGxpYnJkX3QgKikgTlVMTCkKLQkJcmV0dXJuKC1FTk9ERVYpOworCWlmIChicmRwID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGJyZHAtPnN0YXRlICYgQlNUX1NUQVJURUQpIHsKIAkJaWYgKChyYyA9IHN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9HRVRTVEFUUywKIAkJICAgICZzdGxpX2Nka3N0YXRzLCBzaXplb2YoYXN5c3RhdHNfdCksIDEpKSA8IDApCi0JCQlyZXR1cm4ocmMpOworCQkJcmV0dXJuIHJjOwogCX0gZWxzZSB7CiAJCW1lbXNldCgmc3RsaV9jZGtzdGF0cywgMCwgc2l6ZW9mKGFzeXN0YXRzX3QpKTsKIAl9CkBAIC00OTEyLDEzICs0NDE3LDEyIEBACiAJc3RsaV9jb21zdGF0cy5zdGF0ZSA9IHBvcnRwLT5zdGF0ZTsKIAlzdGxpX2NvbXN0YXRzLmZsYWdzID0gcG9ydHAtPmZsYWdzOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7Ci0JY2xpKCk7Ci0JaWYgKHBvcnRwLT50dHkgIT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpIHsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwlpZiAocG9ydHAtPnR0eSAhPSBOVUxMKSB7CiAJCWlmIChwb3J0cC0+dHR5LT5kcml2ZXJfZGF0YSA9PSBwb3J0cCkgewogCQkJc3RsaV9jb21zdGF0cy50dHlzdGF0ZSA9IHBvcnRwLT50dHktPmZsYWdzOwotCQkJc3RsaV9jb21zdGF0cy5yeGJ1ZmZlcmVkID0gLTEgLypwb3J0cC0+dHR5LT5mbGlwLmNvdW50Ki87Ci0JCQlpZiAocG9ydHAtPnR0eS0+dGVybWlvcyAhPSAoc3RydWN0IHRlcm1pb3MgKikgTlVMTCkgeworCQkJc3RsaV9jb21zdGF0cy5yeGJ1ZmZlcmVkID0gLTE7CisJCQlpZiAocG9ydHAtPnR0eS0+dGVybWlvcyAhPSBOVUxMKSB7CiAJCQkJc3RsaV9jb21zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCQkJCXN0bGlfY29tc3RhdHMuaWZsYWdzID0gcG9ydHAtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKIAkJCQlzdGxpX2NvbXN0YXRzLm9mbGFncyA9IHBvcnRwLT50dHktPnRlcm1pb3MtPmNfb2ZsYWc7CkBAIC00OTI2LDcgKzQ0MzAsNyBAQAogCQkJfQogCQl9CiAJfQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CiAKIAlzdGxpX2NvbXN0YXRzLnR4dG90YWwgPSBzdGxpX2Nka3N0YXRzLnR4Y2hhcnM7CiAJc3RsaV9jb21zdGF0cy5yeHRvdGFsID0gc3RsaV9jZGtzdGF0cy5yeGNoYXJzICsgc3RsaV9jZGtzdGF0cy5yaW5nb3ZlcjsKQEAgLTQ5NDgsNyArNDQ1Miw3IEBACiAJc3RsaV9jb21zdGF0cy5od2lkID0gc3RsaV9jZGtzdGF0cy5od2lkOwogCXN0bGlfY29tc3RhdHMuc2lnbmFscyA9IHN0bGlfbWt0aW9jbShzdGxpX2Nka3N0YXRzLnNpZ25hbHMpOwogCi0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00OTYxLDggKzQ0NjUsOCBAQAogCiBzdGF0aWMgaW50IHN0bGlfZ2V0cG9ydHN0YXRzKHN0bGlwb3J0X3QgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApCiB7Ci0Jc3RsaWJyZF90CSpicmRwOwotCWludAkJcmM7CisJc3RsaWJyZF90ICpicmRwOworCWludCByYzsKIAogCWlmICghcG9ydHApIHsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZzdGxpX2NvbXN0YXRzLCBjcCwgc2l6ZW9mKGNvbXN0YXRzX3QpKSkKQEAgLTQ5OTIsOCArNDQ5Niw4IEBACiAKIHN0YXRpYyBpbnQgc3RsaV9jbHJwb3J0c3RhdHMoc3RsaXBvcnRfdCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCkKIHsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0JaW50CQlyYzsKKwlzdGxpYnJkX3QgKmJyZHA7CisJaW50IHJjOwogCiAJaWYgKCFwb3J0cCkgewogCQlpZiAoY29weV9mcm9tX3VzZXIoJnN0bGlfY29tc3RhdHMsIGNwLCBzaXplb2YoY29tc3RhdHNfdCkpKQpAQCAtNTAzMSw3ICs0NTM1LDcgQEAKIAogc3RhdGljIGludCBzdGxpX2dldHBvcnRzdHJ1Y3Qoc3RsaXBvcnRfdCBfX3VzZXIgKmFyZykKIHsKLQlzdGxpcG9ydF90CSpwb3J0cDsKKwlzdGxpcG9ydF90ICpwb3J0cDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmc3RsaV9kdW1teXBvcnQsIGFyZywgc2l6ZW9mKHN0bGlwb3J0X3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01MDUyLDcgKzQ1NTYsNyBAQAogCiBzdGF0aWMgaW50IHN0bGlfZ2V0YnJkc3RydWN0KHN0bGlicmRfdCBfX3VzZXIgKmFyZykKIHsKLQlzdGxpYnJkX3QJKmJyZHA7CisJc3RsaWJyZF90ICpicmRwOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzdGxpX2R1bW15YnJkLCBhcmcsIHNpemVvZihzdGxpYnJkX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01MDc2LDE1ICs0NTgwLDEwIEBACiAKIHN0YXRpYyBpbnQgc3RsaV9tZW1pb2N0bChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0bGlicmRfdAkqYnJkcDsKLQlpbnQJCWJyZG5yLCByYywgZG9uZTsKKwlzdGxpYnJkX3QgKmJyZHA7CisJaW50IGJyZG5yLCByYywgZG9uZTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0bGlfbWVtaW9jdGwoaXA9JXgsZnA9JXgsY21kPSV4LGFyZz0leClcbiIsCi0JCQkoaW50KSBpcCwgKGludCkgZnAsIGNtZCwgKGludCkgYXJnKTsKLSNlbmRpZgotCiAvKgogICoJRmlyc3QgdXAgaGFuZGxlIHRoZSBib2FyZCBpbmRlcGVuZGVudCBpb2N0bHMuCiAgKi8KQEAgLTUxMTUsNyArNDYxNCw3IEBACiAJfQogCiAJaWYgKGRvbmUpCi0JCXJldHVybihyYyk7CisJCXJldHVybiByYzsKIAogLyoKICAqCU5vdyBoYW5kbGUgdGhlIGJvYXJkIHNwZWNpZmljIGlvY3Rscy4gVGhlc2UgYWxsIGRlcGVuZCBvbiB0aGUKQEAgLTUxMjMsMTIgKzQ2MjIsMTIgQEAKICAqLwogCWJyZG5yID0gaW1pbm9yKGlwKTsKIAlpZiAoYnJkbnIgPj0gU1RMX01BWEJSRFMpCi0JCXJldHVybigtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYnJkcCA9IHN0bGlfYnJkc1ticmRucl07CiAJaWYgKCFicmRwKQotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCWlmIChicmRwLT5zdGF0ZSA9PSAwKQotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUTF9CSU5UUjoKQEAgLTUxNTIsOCArNDY1MSw3IEBACiAJCXJjID0gLUVOT0lPQ1RMQ01EOwogCQlicmVhazsKIAl9Ci0KLQlyZXR1cm4ocmMpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzdGxpX29wcyA9IHsKQEAgLTUxODIsMTEgKzQ2ODAsMTQgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1pbnQgX19pbml0IHN0bGlfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3RsaV9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXNcbiIsIHN0bGlfZHJ2dGl0bGUsIHN0bGlfZHJ2dmVyc2lvbik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc3RsaV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYnJkX2xvY2spOworCiAJc3RsaV9pbml0YnJkcygpOwogCiAJc3RsaV9zZXJpYWwgPSBhbGxvY190dHlfZHJpdmVyKFNUTF9NQVhCUkRTICogU1RMX01BWFBPUlRTKTsKQEAgLTUxOTYsMTAgKzQ2OTcsNiBAQAogLyoKICAqCUFsbG9jYXRlIGEgdGVtcG9yYXJ5IHdyaXRlIGJ1ZmZlci4KICAqLwotCXN0bGlfdG1wd3JpdGVidWYgPSBrbWFsbG9jKFNUTElfVFhCVUZTSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0bGlfdG1wd3JpdGVidWYpCi0JCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgIgotCQkJCSIoc2l6ZT0lZClcbiIsIFNUTElfVFhCVUZTSVpFKTsKIAlzdGxpX3R4Y29va2J1ZiA9IGttYWxsb2MoU1RMSV9UWEJVRlNJWkUsIEdGUF9LRVJORUwpOwogCWlmICghc3RsaV90eGNvb2tidWYpCiAJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgIgpAQCAtNTIxMywxNiArNDcxMCwxMSBAQAogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaWFsIG1lbW9yeSAiCiAJCQkJImRldmljZVxuIik7CiAKLQlkZXZmc19ta19kaXIoInN0YWxpb21lbSIpOwogCWlzdGFsbGlvbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInN0YWxpb21lbSIpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJZGV2ZnNfbWtfY2RldihNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAotCQkJICAgICAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCSAgICAgICAic3RhbGlvbWVtLyVkIiwgaSk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJY2xhc3NfZGV2aWNlX2NyZWF0ZShpc3RhbGxpb25fY2xhc3MsIE5VTEwsCiAJCQkJTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKIAkJCQlOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKLQl9CiAKIC8qCiAgKglTZXQgdXAgdGhlIHR0eSBkcml2ZXIgc3RydWN0dXJlIGFuZCByZWdpc3RlciB1cyBhcyBhIGRyaXZlci4KQEAgLTUyNDMsNyArNDczNSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IGZhaWxlZCB0byByZWdpc3RlciBzZXJpYWwgZHJpdmVyXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXRlX2dwaW8uYyBiL2RyaXZlcnMvY2hhci9pdGVfZ3Bpby5jCmluZGV4IGQxZWQ2YWMuLmNkZTU2MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pdGVfZ3Bpby5jCisrKyBiL2RyaXZlcnMvY2hhci9pdGVfZ3Bpby5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl0ZV9ncGlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpdGVfZ3Bpb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gaXRlX2dwaW9faW9jdGwsCiAJLm9wZW4JCT0gaXRlX2dwaW9fb3BlbiwKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpdGVfZ3Bpb193YWl0W2ldKTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEoaXRlX2dwaW9faXJxLCBpdGVfZ3Bpb19pcnFfaGFuZGxlciwgU0FfU0hJUlEsICJncGlvIiwgMCkgPCAwKSB7CisJaWYgKHJlcXVlc3RfaXJxKGl0ZV9ncGlvX2lycSwgaXRlX2dwaW9faXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELCAiZ3BpbyIsIDApIDwgMCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJml0ZV9ncGlvX21pc2NkZXYpOwogCQlyZWxlYXNlX3JlZ2lvbihpdGVfZ3Bpb19iYXNlLCAweDFjKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCmluZGV4IDRiYjNkMjIuLjA1NmViZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKiAyMS0wOC0wMjogQ29udmVydGVkIHRvIGlucHV0IEFQSSwgbWFqb3IgY2xlYW51cC4gKFZvanRlY2ggUGF2bGlrKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xjZC5jIGIvZHJpdmVycy9jaGFyL2xjZC5jCmluZGV4IDI5OTYzZDguLmRhNjAxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9sY2QuYworKysgYi9kcml2ZXJzL2NoYXIvbGNkLmMKQEAgLTE0LDcgKzE0LDYgQEAKIAogI2RlZmluZSBSVENfSU9fRVhURU5UCTB4MTAJLypPbmx5IHJlYWxseSB0d28gcG9ydHMsIGJ1dC4uLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KQEAgLTU5OSw3ICs1OTgsNyBAQAogICoJVGhlIHZhcmlvdXMgZmlsZSBvcGVyYXRpb25zIHdlIHN1cHBvcnQuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsY2RfZm9wcyA9IHsKIAkucmVhZCA9IGxjZF9yZWFkLAogCS5pb2N0bCA9IGxjZF9pb2N0bCwKIAkub3BlbiA9IGxjZF9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xwLmMgYi9kcml2ZXJzL2NoYXIvbHAuYwppbmRleCBlNTcyNjA1Li5mODc1ZmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbHAuYworKysgYi9kcml2ZXJzL2NoYXIvbHAuYwpAQCAtMTE0LDEzICsxMTQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02NjgsNyArNjY2LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLndyaXRlCQk9IGxwX3dyaXRlLAogCS5pb2N0bAkJPSBscF9pb2N0bCwKQEAgLTgwNyw4ICs4MDUsNiBAQAogCiAJY2xhc3NfZGV2aWNlX2NyZWF0ZShscF9jbGFzcywgTlVMTCwgTUtERVYoTFBfTUFKT1IsIG5yKSwgTlVMTCwKIAkJCQkibHAlZCIsIG5yKTsKLQlkZXZmc19ta19jZGV2KE1LREVWKExQX01BSk9SLCBuciksIFNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VHTywKLQkJCSJwcmludGVycy8lZCIsIG5yKTsKIAogCXByaW50ayhLRVJOX0lORk8gImxwJWQ6IHVzaW5nICVzICglcykuXG4iLCBuciwgcG9ydC0+bmFtZSwgCiAJICAgICAgIChwb3J0LT5pcnEgPT0gUEFSUE9SVF9JUlFfTk9ORSk/InBvbGxpbmciOiJpbnRlcnJ1cHQtZHJpdmVuIik7CkBAIC05MDcsNyArOTAzLDYgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JZGV2ZnNfbWtfZGlyKCJwcmludGVycyIpOwogCWxwX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAicHJpbnRlciIpOwogCWlmIChJU19FUlIobHBfY2xhc3MpKSB7CiAJCWVyciA9IFBUUl9FUlIobHBfY2xhc3MpOwpAQCAtOTMzLDcgKzkyOCw2IEBACiBvdXRfY2xhc3M6CiAJY2xhc3NfZGVzdHJveShscF9jbGFzcyk7CiBvdXRfZGV2ZnM6Ci0JZGV2ZnNfcmVtb3ZlKCJwcmludGVycyIpOwogCXVucmVnaXN0ZXJfY2hyZGV2KExQX01BSk9SLCAibHAiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTgxLDEwICs5NzUsOCBAQAogCQlpZiAobHBfdGFibGVbb2Zmc2V0XS5kZXYgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKGxwX3RhYmxlW29mZnNldF0uZGV2KTsKLQkJZGV2ZnNfcmVtb3ZlKCJwcmludGVycy8lZCIsIG9mZnNldCk7CiAJCWNsYXNzX2RldmljZV9kZXN0cm95KGxwX2NsYXNzLCBNS0RFVihMUF9NQUpPUiwgb2Zmc2V0KSk7CiAJfQotCWRldmZzX3JlbW92ZSgicHJpbnRlcnMiKTsKIAljbGFzc19kZXN0cm95KGxwX2NsYXNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21iY3MuYyBiL2RyaXZlcnMvY2hhci9tYmNzLmMKaW5kZXggYzI2OGVlMC4uMDM4NTY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21iY3MuYworKysgYi9kcml2ZXJzL2NoYXIvbWJjcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKglNT0FUQiBDb3JlIFNlcnZpY2VzIGRyaXZlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTU5Myw3ICs1OTIsNyBAQAogCWdldGRtYS0+aW50ckhvc3REZXN0ID0gc25faXJxLT5pcnFfeHRhbGthZGRyOwogCWdldGRtYS0+aW50clZlY3RvciA9IHNuX2lycS0+aXJxX2lycTsKIAlpZiAocmVxdWVzdF9pcnEoc25faXJxLT5pcnFfaXJxLAotCQkJKHZvaWQgKiltYmNzX2NvbXBsZXRpb25faW50cl9oYW5kbGVyLCBTQV9TSElSUSwKKwkJCSh2b2lkICopbWJjc19jb21wbGV0aW9uX2ludHJfaGFuZGxlciwgSVJRRl9TSEFSRUQsCiAJCQkiTUJDUyBnZXQgaW50ciIsICh2b2lkICopc29mdCkpIHsKIAkJdGlvY3hfaXJxX2ZyZWUoc29mdC0+Z2V0X3NuX2lycSk7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtNjA5LDcgKzYwOCw3IEBACiAJcHV0ZG1hLT5pbnRySG9zdERlc3QgPSBzbl9pcnEtPmlycV94dGFsa2FkZHI7CiAJcHV0ZG1hLT5pbnRyVmVjdG9yID0gc25faXJxLT5pcnFfaXJxOwogCWlmIChyZXF1ZXN0X2lycShzbl9pcnEtPmlycV9pcnEsCi0JCQkodm9pZCAqKW1iY3NfY29tcGxldGlvbl9pbnRyX2hhbmRsZXIsIFNBX1NISVJRLAorCQkJKHZvaWQgKiltYmNzX2NvbXBsZXRpb25faW50cl9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKIAkJCSJNQkNTIHB1dCBpbnRyIiwgKHZvaWQgKilzb2Z0KSkgewogCQl0aW9jeF9pcnFfZnJlZShzb2Z0LT5wdXRfc25faXJxKTsKIAkJZnJlZV9pcnEoc29mdC0+Z2V0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CkBAIC02MjksNyArNjI4LDcgQEAKIAlhbGdvLT5pbnRySG9zdERlc3QgPSBzbl9pcnEtPmlycV94dGFsa2FkZHI7CiAJYWxnby0+aW50clZlY3RvciA9IHNuX2lycS0+aXJxX2lycTsKIAlpZiAocmVxdWVzdF9pcnEoc25faXJxLT5pcnFfaXJxLAotCQkJKHZvaWQgKiltYmNzX2NvbXBsZXRpb25faW50cl9oYW5kbGVyLCBTQV9TSElSUSwKKwkJCSh2b2lkICopbWJjc19jb21wbGV0aW9uX2ludHJfaGFuZGxlciwgSVJRRl9TSEFSRUQsCiAJCQkiTUJDUyBhbGdvIGludHIiLCAodm9pZCAqKXNvZnQpKSB7CiAJCXRpb2N4X2lycV9mcmVlKHNvZnQtPmFsZ29fc25faXJxKTsKIAkJZnJlZV9pcnEoc29mdC0+cHV0X3NuX2lycS0+aXJxX2lycSwgc29mdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggMWZhOWZhMTUuLmU5N2MzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTgsNyArOCw2IEBACiAgKiAgU2hhcmVkIC9kZXYvemVybyBtbWFwaW5nIHN1cHBvcnQsIEZlYiAyMDAwLCBLYW5vaiBTYXJjYXIgPGthbm9qQHNnaS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIwLDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC03NzgsNyArNzc2LDcgQEAKICNkZWZpbmUgb3Blbl9rbWVtCW9wZW5fbWVtCiAjZGVmaW5lIG9wZW5fb2xkbWVtCW9wZW5fbWVtCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lbV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWVtX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBtZW1vcnlfbHNlZWssCiAJLnJlYWQJCT0gcmVhZF9tZW0sCiAJLndyaXRlCQk9IHdyaXRlX21lbSwKQEAgLTc4Niw3ICs3ODQsNyBAQAogCS5vcGVuCQk9IG9wZW5fbWVtLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga21lbV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga21lbV9mb3BzID0gewogCS5sbHNlZWsJCT0gbWVtb3J5X2xzZWVrLAogCS5yZWFkCQk9IHJlYWRfa21lbSwKIAkud3JpdGUJCT0gd3JpdGVfa21lbSwKQEAgLTc5NCw3ICs3OTIsNyBAQAogCS5vcGVuCQk9IG9wZW5fa21lbSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG51bGxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG51bGxfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG51bGxfbHNlZWssCiAJLnJlYWQJCT0gcmVhZF9udWxsLAogCS53cml0ZQkJPSB3cml0ZV9udWxsLApAQCAtODAyLDcgKzgwMCw3IEBACiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVNBKSB8fCAhZGVmaW5lZChfX21jNjgwMDBfXykKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG1lbW9yeV9sc2VlaywKIAkucmVhZAkJPSByZWFkX3BvcnQsCiAJLndyaXRlCQk9IHdyaXRlX3BvcnQsCkBAIC04MTAsNyArODA4LDcgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0gewogCS5sbHNlZWsJCT0gemVyb19sc2VlaywKIAkucmVhZAkJPSByZWFkX3plcm8sCiAJLndyaXRlCQk9IHdyaXRlX3plcm8sCkBAIC04MjEsMTQgKzgxOSwxNCBAQAogCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX01BUF9DT1BZLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVsbF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVsbF9mb3BzID0gewogCS5sbHNlZWsJCT0gZnVsbF9sc2VlaywKIAkucmVhZAkJPSByZWFkX2Z1bGwsCiAJLndyaXRlCQk9IHdyaXRlX2Z1bGwsCiB9OwogCiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9sZG1lbV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2xkbWVtX2ZvcHMgPSB7CiAJLnJlYWQJPSByZWFkX29sZG1lbSwKIAkub3Blbgk9IG9wZW5fb2xkbWVtLAogfTsKQEAgLTg1NSw3ICs4NTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGttc2dfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGttc2dfZm9wcyA9IHsKIAkud3JpdGUgPQlrbXNnX3dyaXRlLAogfTsKIApAQCAtOTA1LDcgKzkwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lbW9yeV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWVtb3J5X2ZvcHMgPSB7CiAJLm9wZW4JCT0gbWVtb3J5X29wZW4sCS8qIGp1c3QgYSBzZWxlY3RvciBmb3IgdGhlIHJlYWwgb3BlbiAqLwogfTsKIApAQCAtOTQxLDEzICs5MzksMTAgQEAKIAkJcHJpbnRrKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBtZW1vcnkgZGV2c1xuIiwgTUVNX01BSk9SKTsKIAogCW1lbV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgIm1lbSIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmxpc3QpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZsaXN0KTsgaSsrKQogCQljbGFzc19kZXZpY2VfY3JlYXRlKG1lbV9jbGFzcywgTlVMTCwKIAkJCQkJTUtERVYoTUVNX01BSk9SLCBkZXZsaXN0W2ldLm1pbm9yKSwKIAkJCQkJTlVMTCwgZGV2bGlzdFtpXS5uYW1lKTsKLQkJZGV2ZnNfbWtfY2RldihNS0RFVihNRU1fTUFKT1IsIGRldmxpc3RbaV0ubWlub3IpLAotCQkJCVNfSUZDSFIgfCBkZXZsaXN0W2ldLm1vZGUsIGRldmxpc3RbaV0ubmFtZSk7Ci0JfQogCQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21pc2MuYyBiL2RyaXZlcnMvY2hhci9taXNjLmMKaW5kZXggOTZlYjJhNy4uNjJlYmUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21pc2MuYworKysgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCkBAIC0zNCw3ICszNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNDQsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTE1LDcgKzExMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZtaXNjX3NlcV9vcHMpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXNjX3Byb2NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pc2NfcHJvY19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IG1pc2Nfc2VxX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKQEAgLTE3OCw3ICsxNzYsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsYXNzICptaXNjX2NsYXNzOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXNjX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXNjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IG1pc2Nfb3BlbiwKIH07CkBAIC0yMDQsNyArMjAyLDcgQEAKIHsKIAlzdHJ1Y3QgbWlzY2RldmljZSAqYzsKIAlkZXZfdCBkZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCWRvd24oJm1pc2Nfc2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZtaXNjX2xpc3QsIGxpc3QpIHsKQEAgLTIyOCwxMCArMjI2LDYgQEAKIAogCWlmIChtaXNjLT5taW5vciA8IERZTkFNSUNfTUlOT1JTKQogCQltaXNjX21pbm9yc1ttaXNjLT5taW5vciA+PiAzXSB8PSAxIDw8IChtaXNjLT5taW5vciAmIDcpOwotCWlmIChtaXNjLT5kZXZmc19uYW1lWzBdID09ICdcMCcpIHsKLQkJc25wcmludGYobWlzYy0+ZGV2ZnNfbmFtZSwgc2l6ZW9mKG1pc2MtPmRldmZzX25hbWUpLAotCQkJCSJtaXNjLyVzIiwgbWlzYy0+bmFtZSk7Ci0JfQogCWRldiA9IE1LREVWKE1JU0NfTUFKT1IsIG1pc2MtPm1pbm9yKTsKIAogCW1pc2MtPmNsYXNzID0gY2xhc3NfZGV2aWNlX2NyZWF0ZShtaXNjX2NsYXNzLCBOVUxMLCBkZXYsIG1pc2MtPmRldiwKQEAgLTI0MSwxMyArMjM1LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZGV2ZnNfbWtfY2RldihkZXYsIFNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSfFNfSVJHUlAsIAotCQkJICAgIG1pc2MtPmRldmZzX25hbWUpOwotCWlmIChlcnIpIHsKLQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kobWlzY19jbGFzcywgZGV2KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyoKIAkgKiBBZGQgaXQgdG8gdGhlIGZyb250LCBzbyB0aGF0IGxhdGVyIGRldmljZXMgY2FuICJvdmVycmlkZSIKIAkgKiBlYXJsaWVyIGRlZmF1bHRzCkBAIC0yNzgsNyArMjY1LDYgQEAKIAlkb3duKCZtaXNjX3NlbSk7CiAJbGlzdF9kZWwoJm1pc2MtPmxpc3QpOwogCWNsYXNzX2RldmljZV9kZXN0cm95KG1pc2NfY2xhc3MsIE1LREVWKE1JU0NfTUFKT1IsIG1pc2MtPm1pbm9yKSk7Ci0JZGV2ZnNfcmVtb3ZlKG1pc2MtPmRldmZzX25hbWUpOwogCWlmIChpIDwgRFlOQU1JQ19NSU5PUlMgJiYgaT4wKSB7CiAJCW1pc2NfbWlub3JzW2k+PjNdICY9IH4oMSA8PCAobWlzYy0+bWlub3IgJiA3KSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21tdGltZXIuYyBiL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMKaW5kZXggZDY1YjMxMC4uMWYwZjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21tdGltZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbW10aW1lci5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbXRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgpAQCAtNjQsNyArNjMsNyBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbXRpbWVyX2ZlbXRvcGVyaW9kID0gMDsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW10aW1lcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW10aW1lcl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5tbWFwID0JCW1tdGltZXJfbW1hcCwKIAkuaW9jdGwgPQltbXRpbWVyX2lvY3RsLApAQCAtNjg4LDEzICs2ODcsMTIgQEAKIAltbXRpbWVyX2ZlbXRvcGVyaW9kID0gKCh1bnNpZ25lZCBsb25nKTFFMTUgKyBzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQgLwogCQkJICAgICAgIDIpIC8gc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kOwogCi0JaWYgKHJlcXVlc3RfaXJxKFNHSV9NTVRJTUVSX1ZFQ1RPUiwgbW10aW1lcl9pbnRlcnJ1cHQsIFNBX1BFUkNQVV9JUlEsIE1NVElNRVJfTkFNRSwgTlVMTCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoU0dJX01NVElNRVJfVkVDVE9SLCBtbXRpbWVyX2ludGVycnVwdCwgSVJRRl9QRVJDUFUsIE1NVElNRVJfTkFNRSwgTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBpbnRlcnJ1cHQuIiwKIAkJCU1NVElNRVJfTkFNRSk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlzdHJjcHkobW10aW1lcl9taXNjZGV2LmRldmZzX25hbWUsIE1NVElNRVJfTkFNRSk7CiAJaWYgKG1pc2NfcmVnaXN0ZXIoJm1tdGltZXJfbWlzY2RldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZVxuIiwKIAkJICAgICAgIE1NVElNRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCAwMTI0N2NjLi40ZWE3YmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW94YS5jCisrKyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqICAgICAgdmVyc2lvbiAgICAgICAgIDogNS4xCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTM0Miw3ICszNDEsNiBAQAogCWluaXRfTVVURVgoJm1veGFCdWZmU2VtKTsKIAltb3hhRHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCW1veGFEcml2ZXItPm5hbWUgPSAidHR5TVgiOwotCW1veGFEcml2ZXItPmRldmZzX25hbWUgPSAidHRzL2EiOwogCW1veGFEcml2ZXItPm1ham9yID0gdHR5bWFqb3I7CiAJbW94YURyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwogCW1veGFEcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmMgYi9kcml2ZXJzL2NoYXIvbXdhdmUvMzc4MGkuYwppbmRleCBkMWZlMDVlLi40ZTQ4NjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXdhdmUvMzc4MGkuYworKysgYi9kcml2ZXJzL2NoYXIvbXdhdmUvMzc4MGkuYwpAQCAtNDYsNyArNDYsNiBAQAogKglGaXJzdCByZWxlYXNlIHRvIHRoZSBwdWJsaWMKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL213YXZlL213YXZlZGQuYyBiL2RyaXZlcnMvY2hhci9td2F2ZS9td2F2ZWRkLmMKaW5kZXggZDNiYTJmOC4uMzlhMmU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL213YXZlL213YXZlZGQuYworKysgYi9kcml2ZXJzL2NoYXIvbXdhdmUvbXdhdmVkZC5jCkBAIC00NTQsNyArNDU0LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtd2F2ZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXdhdmVfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gbXdhdmVfcmVhZCwKIAkud3JpdGUJCT0gbXdhdmVfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IDY0NWQ5ZDcuLjU1NmFiZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC0zNiw3ICszNiw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtOTUsNyArOTQsNyBAQAogI2RlZmluZSBSRUxFVkFOVF9JRkxBRyhpZmxhZykJKGlmbGFnICYgKElHTkJSS3xCUktJTlR8SUdOUEFSfFBBUk1SS3xJTlBDS3xcCiAJCQkJCSAgSVhPTnxJWE9GRikpCiAKLSNkZWZpbmUgSVJRX1QoaW5mbykgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NIQVJFX0lSUSkgPyBTQV9TSElSUSA6IFNBX0lOVEVSUlVQVCkKKyNkZWZpbmUgSVJRX1QoaW5mbykgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NIQVJFX0lSUSkgPyBJUlFGX1NIQVJFRCA6IElSUUZfRElTQUJMRUQpCiAKICNkZWZpbmUgQzE2OF9BU0lDX0lEICAgIDEKICNkZWZpbmUgQzEwNF9BU0lDX0lEICAgIDIKQEAgLTk5Niw3ICs5OTUsNiBAQAogCiAJaW5mby0+c2Vzc2lvbiA9IGN1cnJlbnQtPnNpZ25hbC0+c2Vzc2lvbjsKIAlpbmZvLT5wZ3JwID0gcHJvY2Vzc19ncm91cChjdXJyZW50KTsKLQljbGVhcl9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpOwogCiAJLyoKIAlzdGF0dXMgPSBteHNlcl9nZXRfbXNyKGluZm8tPmJhc2UsIDAsIGluZm8tPnBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25faGRsYy5jIGIvZHJpdmVycy9jaGFyL25faGRsYy5jCmluZGV4IDlmNTQ3MzMuLjMzN2E4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX2hkbGMuYworKysgYi9kcml2ZXJzL2NoYXIvbl9oZGxjLmMKQEAgLTgxLDcgKzgxLDYgQEAKICNkZWZpbmUgSERMQ19NQUdJQyAweDIzOWUKICNkZWZpbmUgSERMQ19WRVJTSU9OICIkUmV2aXNpb246IDQuOCAkIgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fdHR5LmMgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwppbmRleCBiOTM3MWQ1Li42MDNiOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAKICAqCWJ1ZmZlciwgYW5kIG9uY2UgdG8gZHJhaW4gdGhlIHNwYWNlIGZyb20gdGhlIChwaHlzaWNhbCkgYmVnaW5uaW5nIG9mCiAgKgl0aGUgYnVmZmVyIHRvIGhlYWQgcG9pbnRlci4KICAqCi0gKglDYWxsZWQgdW5kZXIgdGhlIHR0eS0+YXRvbWljX3JlYWRfbG9jayBzZW0gYW5kIHdpdGggVFRZX0RPTlRfRkxJUCBzZXQKKyAqCUNhbGxlZCB1bmRlciB0aGUgdHR5LT5hdG9taWNfcmVhZF9sb2NrIHNlbQogICoKICAqLwogIApAQCAtMTI3MSw3ICsxMjcxLDYgQEAKIAl9CiAKIAlhZGRfd2FpdF9xdWV1ZSgmdHR5LT5yZWFkX3dhaXQsICZ3YWl0KTsKLQlzZXRfYml0KFRUWV9ET05UX0ZMSVAsICZ0dHktPmZsYWdzKTsKIAl3aGlsZSAobnIpIHsKIAkJLyogRmlyc3QgdGVzdCBmb3Igc3RhdHVzIGNoYW5nZS4gKi8KIAkJaWYgKHR0eS0+cGFja2V0ICYmIHR0eS0+bGluay0+Y3RybF9zdGF0dXMpIHsKQEAgLTEzMTUsOSArMTMxNCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQluX3R0eV9zZXRfcm9vbSh0dHkpOwotCQkJY2xlYXJfYml0KFRUWV9ET05UX0ZMSVAsICZ0dHktPmZsYWdzKTsKIAkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCQkJc2V0X2JpdChUVFlfRE9OVF9GTElQLCAmdHR5LT5mbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CkBAIC0xMzk0LDcgKzEzOTEsNiBAQAogCQlpZiAodGltZSkKIAkJCXRpbWVvdXQgPSB0aW1lOwogCX0KLQljbGVhcl9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpOwogCW11dGV4X3VubG9jaygmdHR5LT5hdG9taWNfcmVhZF9sb2NrKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT5yZWFkX3dhaXQsICZ3YWl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL252cmFtLmMgYi9kcml2ZXJzL2NoYXIvbnZyYW0uYwppbmRleCAzNTU2Y2NkLi5hMzlmMTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbnZyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvbnZyYW0uYwpAQCAtMzcsNyArMzcsNiBAQAogI2RlZmluZSBOVlJBTV9WRVJTSU9OCSIxLjIiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbnZyYW0uaD4KQEAgLTQzOCw3ICs0MzcsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnZyYW1fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG52cmFtX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbnZyYW1fbGxzZWVrLAogCS5yZWFkCQk9IG52cmFtX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbndidXR0b24uYyBiL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jCmluZGV4IDQwODNiNzguLjdjNTdlYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jCkBAIC00LDcgKzQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTE4NCw3ICsxODMsNyBAQAogICogYXR0ZW1wdHMgdG8gcGVyZm9ybSB0aGVzZSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnV0dG9uX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidXR0b25fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gYnV0dG9uX3JlYWQsCiB9OwpAQCAtMjI0LDcgKzIyMyw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxIChJUlFfTkVUV0lOREVSX0JVVFRPTiwgYnV0dG9uX2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwKKwlpZiAocmVxdWVzdF9pcnEgKElSUV9ORVRXSU5ERVJfQlVUVE9OLCBidXR0b25faGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKIAkJCSJud2J1dHRvbiIsIE5VTEwpKSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICJud2J1dHRvbjogSVJRICVkIGlzIG5vdCBmcmVlLlxuIiwKIAkJCQlJUlFfTkVUV0lOREVSX0JVVFRPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbndmbGFzaC5jIGIvZHJpdmVycy9jaGFyL253Zmxhc2guYwppbmRleCA4ODY1Mzg3Li4yMDZjZjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbndmbGFzaC5jCisrKyBiL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMKQEAgLTY0Miw3ICs2NDIsNyBAQAogCXVkZWxheSgyNSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZsYXNoX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmxhc2hfZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gZmxhc2hfbGxzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCmluZGV4IDFjNzA2Y2MuLjQwMDVlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGM4NzM2eF9ncGlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYzg3MzZ4X2dwaW9fZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkub3Blbgk9IHBjODczNnhfZ3Bpb19vcGVuLAogCS53cml0ZQk9IG5zY19ncGlvX3dyaXRlLApAQCAtMzE5LDkgKzMxOSwxMCBAQAogCXJldHVybiAwOwogCiB1bmRvX3BsYXRmb3JtX2Rldl9hZGQ6Ci0JcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOwogdW5kb19wbGF0Zm9ybV9kZXZfYWxsb2M6Ci0Ja2ZyZWUocGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKaW5kZXggZWFiNTM5NC4uNTBkMjBhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC0xNDksMTIgKzE0OSw3IEBACiAjZGVmaW5lCVpFUk9fREVWKGRldikgIAkJCQkJCVwKIAltZW1zZXQoJmRldi0+YXRyX2NzdW0sMCwJCQkJXAogCQlzaXplb2Yoc3RydWN0IGNtNDAwMF9kZXYpIC0gCQkJXAotCQkvKmxpbmsqLyBzaXplb2Yoc3RydWN0IHBjbWNpYV9kZXZpY2UgKikgLSAJXAotCQkvKm5vZGUqLyBzaXplb2YoZGV2X25vZGVfdCkgLSAJCQlcCi0JCS8qYXRyKi8gTUFYX0FUUipzaXplb2YoY2hhcikgLSAJCQlcCi0JCS8qcmJ1ZiovIDUxMipzaXplb2YoY2hhcikgLSAJCQlcCi0JCS8qc2J1ZiovIDUxMipzaXplb2YoY2hhcikgLSAJCQlcCi0JCS8qcXVldWUqLyA0KnNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCkpCisJCW9mZnNldG9mKHN0cnVjdCBjbTQwMDBfZGV2LCBhdHJfY3N1bSkpCiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqZGV2X3RhYmxlW0NNNDAwMF9NQVhfREVWXTsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmNtbV9jbGFzczsKQEAgLTE5NDMsNyArMTkzOCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbTQwMDBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNtNDAwMF9mb3BzID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5yZWFkCT0gY21tX3JlYWQsCiAJLndyaXRlCT0gY21tX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKaW5kZXggNDdhODQ2NWIuLjU1Y2Y0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwpAQCAtNjg4LDcgKzY4OCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRlcl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBjbTQwNDBfcmVhZCwKIAkud3JpdGUJCT0gY200MDQwX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BwZGV2LmMgYi9kcml2ZXJzL2NoYXIvcHBkZXYuYwppbmRleCBiZWU2YzQ3Li41MjBkMmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcHBkZXYuYworKysgYi9kcml2ZXJzL2NoYXIvcHBkZXYuYwpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC03NDAsNyArNzM5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqcHBkZXZfY2xhc3M7CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSBwcF9yZWFkLApAQCAtNzcwLDcgKzc2OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBwZGV2X2luaXQgKHZvaWQpCiB7Ci0JaW50IGksIGVyciA9IDA7CisJaW50IGVyciA9IDA7CiAKIAlpZiAocmVnaXN0ZXJfY2hyZGV2IChQUF9NQUpPUiwgQ0hSREVWLCAmcHBfZm9wcykpIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgQ0hSREVWICI6IHVuYWJsZSB0byBnZXQgbWFqb3IgJWRcbiIsCkBAIC03ODIsMTEgKzc4MSw2IEBACiAJCWVyciA9IFBUUl9FUlIocHBkZXZfY2xhc3MpOwogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQotCWRldmZzX21rX2RpcigicGFycG9ydHMiKTsKLQlmb3IgKGkgPSAwOyBpIDwgUEFSUE9SVF9NQVg7IGkrKykgewotCQlkZXZmc19ta19jZGV2KE1LREVWKFBQX01BSk9SLCBpKSwKLQkJCQlTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sICJwYXJwb3J0cy8lZCIsIGkpOwotCX0KIAlpZiAocGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnBwX2RyaXZlcikpIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgQ0hSREVWICI6IHVuYWJsZSB0byByZWdpc3RlciB3aXRoIHBhcnBvcnRcbiIpOwogCQlnb3RvIG91dF9jbGFzczsKQEAgLTc5Niw5ICs3OTAsNiBAQAogCWdvdG8gb3V0OwogCiBvdXRfY2xhc3M6Ci0JZm9yIChpID0gMDsgaSA8IFBBUlBPUlRfTUFYOyBpKyspCi0JCWRldmZzX3JlbW92ZSgicGFycG9ydHMvJWQiLCBpKTsKLQlkZXZmc19yZW1vdmUoInBhcnBvcnRzIik7CiAJY2xhc3NfZGVzdHJveShwcGRldl9jbGFzcyk7CiBvdXRfY2hyZGV2OgogCXVucmVnaXN0ZXJfY2hyZGV2KFBQX01BSk9SLCBDSFJERVYpOwpAQCAtODA4LDEyICs3OTksOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHBkZXZfY2xlYW51cCAodm9pZCkKIHsKLQlpbnQgaTsKIAkvKiBDbGVhbiB1cCBhbGwgcGFycG9ydCBzdHVmZiAqLwotCWZvciAoaSA9IDA7IGkgPCBQQVJQT1JUX01BWDsgaSsrKQotCQlkZXZmc19yZW1vdmUoInBhcnBvcnRzLyVkIiwgaSk7CiAJcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlcigmcHBfZHJpdmVyKTsKLQlkZXZmc19yZW1vdmUoInBhcnBvcnRzIik7CiAJY2xhc3NfZGVzdHJveShwcGRldl9jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYgKFBQX01BSk9SLCBDSFJERVYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3B0eS5jIGIvZHJpdmVycy9jaGFyL3B0eS5jCmluZGV4IDliNWEyYzAuLjM0ZGQ0YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wdHkuYworKysgYi9kcml2ZXJzL2NoYXIvcHR5LmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBGb3IgRVhQT1JUX1NZTUJPTCAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTI0LDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEwMSw3ICs5OSw3IEBACiAgKgogICogRklYTUU6IE91ciBwdHlfd3JpdGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIG91ciBsZGlzYyBsb2NrIGhlbGQgYnV0CiAgKiBub3Qgb3VyIHBhcnRuZXJzLiBXZSBjYW4ndCBqdXN0IHRha2UgdGhlIG90aGVyIG9uZSBibGluZGx5IHdpdGhvdXQKLSAqIHJpc2tpbmcgZGVhZGxvY2tzLiAgVGhlcmUgaXMgYWxzbyB0aGUgc21hbGwgbWF0dGVyIG9mIFRUWV9ET05UX0ZMSVAKKyAqIHJpc2tpbmcgZGVhZGxvY2tzLgogICovCiBzdGF0aWMgaW50IHB0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CkBAIC0yNjUsNyArMjYzLDYgQEAKIAlwdHlfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXB0eV9kcml2ZXItPmRyaXZlcl9uYW1lID0gInB0eV9tYXN0ZXIiOwogCXB0eV9kcml2ZXItPm5hbWUgPSAicHR5IjsKLQlwdHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInB0eS9tIjsKIAlwdHlfZHJpdmVyLT5tYWpvciA9IFBUWV9NQVNURVJfTUFKT1I7CiAJcHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwogCXB0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfUFRZOwpAQCAtMjgzLDcgKzI4MCw2IEBACiAJcHR5X3NsYXZlX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwdHlfc2xhdmVfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJwdHlfc2xhdmUiOwogCXB0eV9zbGF2ZV9kcml2ZXItPm5hbWUgPSAidHR5cCI7Ci0JcHR5X3NsYXZlX2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJwdHkvcyI7CiAJcHR5X3NsYXZlX2RyaXZlci0+bWFqb3IgPSBQVFlfU0xBVkVfTUFKT1I7CiAJcHR5X3NsYXZlX2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwogCXB0eV9zbGF2ZV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfUFRZOwpAQCAtMzUxLDcgKzM0Nyw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB1bml4OThfcHR5X2luaXQodm9pZCkKIHsKLQlkZXZmc19ta19kaXIoInB0cyIpOwogCXB0bV9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE5SX1VOSVg5OF9QVFlfTUFYKTsKIAlpZiAoIXB0bV9kcml2ZXIpCiAJCXBhbmljKCJDb3VsZG4ndCBhbGxvY2F0ZSBVbml4OTggcHRtIGRyaXZlciIpOwpAQCAtMzcyLDcgKzM2Nyw3IEBACiAJcHRtX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCMzg0MDAgfCBDUzggfCBDUkVBRDsKIAlwdG1fZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19sZmxhZyA9IDA7CiAJcHRtX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX1JFQUxfUkFXIHwKLQkJVFRZX0RSSVZFUl9OT19ERVZGUyB8IFRUWV9EUklWRVJfREVWUFRTX01FTTsKKwkJVFRZX0RSSVZFUl9EWU5BTUlDX0RFViB8IFRUWV9EUklWRVJfREVWUFRTX01FTTsKIAlwdG1fZHJpdmVyLT5vdGhlciA9IHB0c19kcml2ZXI7CiAJdHR5X3NldF9vcGVyYXRpb25zKHB0bV9kcml2ZXIsICZwdHlfb3BzKTsKIAlwdG1fZHJpdmVyLT5pb2N0bCA9IHB0eV91bml4OThfaW9jdGw7CkBAIC0zODcsNyArMzgyLDcgQEAKIAlwdHNfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CiAJcHRzX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCMzg0MDAgfCBDUzggfCBDUkVBRDsKIAlwdHNfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8IFRUWV9EUklWRVJfUkVBTF9SQVcgfAotCQlUVFlfRFJJVkVSX05PX0RFVkZTIHwgVFRZX0RSSVZFUl9ERVZQVFNfTUVNOworCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWIHwgVFRZX0RSSVZFUl9ERVZQVFNfTUVNOwogCXB0c19kcml2ZXItPm90aGVyID0gcHRtX2RyaXZlcjsKIAl0dHlfc2V0X29wZXJhdGlvbnMocHRzX2RyaXZlciwgJnB0eV9vcHMpOwogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3F0cm9uaXguYyBiL2RyaXZlcnMvY2hhci9xdHJvbml4LmMKaW5kZXggNjAxZDA5Yi4uOWQxMzRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3F0cm9uaXguYworKysgYi9kcml2ZXJzL2NoYXIvcXRyb25peC5jCkBAIC0zMyw3ICszMyw2IEBACiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiAKICAqIE5PVEU6ICAKQEAgLTE0NSw3ICsxNDQsNyBAQAogCWNpcl9wb3J0X2luaXQoY2lyKTsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKElUODE3Ml9DSVIwX0lSUSwga2JkX2ludF9oYW5kbGVyLCAKLQkJCSh1bnNpZ25lZCBsb25nICkoU0FfSU5URVJSVVBUfFNBX1NISVJRKSwgCisJCQkodW5zaWduZWQgbG9uZyApKElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQpLAogCQkJKGNvbnN0IGNoYXIgKikiUXRyb25peCBJUiBLZXlib2FyZCIsICh2b2lkICopY2lyKTsKIAogCWlmIChyZXR2YWwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA1OGYzNTEyLi40YzNhNWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0yMjQsNyArMjI0LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CkBAIC00MTcsNyArNDE2LDcgQEAKIAkucG9vbGluZm8gPSAmcG9vbGluZm9fdGFibGVbMF0sCiAJLm5hbWUgPSAiaW5wdXQiLAogCS5saW1pdCA9IDEsCi0JLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmaW5wdXRfcG9vbC5sb2NrKSwKIAkucG9vbCA9IGlucHV0X3Bvb2xfZGF0YQogfTsKIApAQCAtNDI2LDcgKzQyNSw3IEBACiAJLm5hbWUgPSAiYmxvY2tpbmciLAogCS5saW1pdCA9IDEsCiAJLnB1bGwgPSAmaW5wdXRfcG9vbCwKLQkubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZibG9ja2luZ19wb29sLmxvY2spLAogCS5wb29sID0gYmxvY2tpbmdfcG9vbF9kYXRhCiB9OwogCkBAIC00MzQsNyArNDMzLDcgQEAKIAkucG9vbGluZm8gPSAmcG9vbGluZm9fdGFibGVbMV0sCiAJLm5hbWUgPSAibm9uYmxvY2tpbmciLAogCS5wdWxsID0gJmlucHV0X3Bvb2wsCi0JLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbm9uYmxvY2tpbmdfcG9vbC5sb2NrKSwKIAkucG9vbCA9IG5vbmJsb2NraW5nX3Bvb2xfZGF0YQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDE1YTdiNDAuLjU3OTg2OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zMSw3ICszMCw3IEBACiBzdGF0aWMgc3RydWN0IGNsYXNzICpyYXdfY2xhc3M7CiBzdGF0aWMgc3RydWN0IHJhd19kZXZpY2VfZGF0YSByYXdfZGV2aWNlc1tNQVhfUkFXX01JTk9SU107CiBzdGF0aWMgREVGSU5FX01VVEVYKHJhd19tdXRleCk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfY3RsX2ZvcHM7CSAgICAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF3X2N0bF9mb3BzOyAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKIC8qCiAgKiBPcGVuL2Nsb3NlIGNvZGUgZm9yIHJhdyBJTy4KQEAgLTI2Miw3ICsyNjEsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhd19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF3X2ZvcHMgPSB7CiAJLnJlYWQJPQlnZW5lcmljX2ZpbGVfcmVhZCwKIAkuYWlvX3JlYWQgPSAJZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS53cml0ZQk9CXJhd19maWxlX3dyaXRlLApAQCAtMjc1LDcgKzI3NCw3IEBACiAJLm93bmVyCT0JVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfY3RsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfY3RsX2ZvcHMgPSB7CiAJLmlvY3RsCT0JcmF3X2N0bF9pb2N0bCwKIAkub3Blbgk9CXJhd19vcGVuLAogCS5vd25lcgk9CVRISVNfTU9EVUxFLApAQCAtMjg4LDcgKzI4Nyw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJhd19pbml0KHZvaWQpCiB7Ci0JaW50IGk7CiAJZGV2X3QgZGV2ID0gTUtERVYoUkFXX01BSk9SLCAwKTsKIAogCWlmIChyZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgTUFYX1JBV19NSU5PUlMsICJyYXciKSkKQEAgLTMxMCwxMyArMzA4LDYgQEAKIAl9CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZShyYXdfY2xhc3MsIE5VTEwsIE1LREVWKFJBV19NQUpPUiwgMCksIE5VTEwsICJyYXdjdGwiKTsKIAotCWRldmZzX21rX2NkZXYoTUtERVYoUkFXX01BSk9SLCAwKSwKLQkJICAgICAgU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVUdPLAotCQkgICAgICAicmF3L3Jhd2N0bCIpOwotCWZvciAoaSA9IDE7IGkgPCBNQVhfUkFXX01JTk9SUzsgaSsrKQotCQlkZXZmc19ta19jZGV2KE1LREVWKFJBV19NQUpPUiwgaSksCi0JCQkgICAgICBTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sCi0JCQkgICAgICAicmF3L3JhdyVkIiwgaSk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtMzI2LDEyICszMTcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmF3X2V4aXQodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDE7IGkgPCBNQVhfUkFXX01JTk9SUzsgaSsrKQotCQlkZXZmc19yZW1vdmUoInJhdy9yYXclZCIsIGkpOwotCWRldmZzX3JlbW92ZSgicmF3L3Jhd2N0bCIpOwotCWRldmZzX3JlbW92ZSgicmF3Iik7CiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kocmF3X2NsYXNzLCBNS0RFVihSQVdfTUFKT1IsIDApKTsKIAljbGFzc19kZXN0cm95KHJhd19jbGFzcyk7CiAJY2Rldl9kZWwoJnJhd19jZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCmluZGV4IGFhNDM0MzYuLjNmYTgwYWFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCkBAIC0zMyw3ICszMyw2IEBACiAgKiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNDQsNyArMjQzLDcgQEAKICAqCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmlvX2Z3X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByaW9fZndfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaW9jdGwgPSByaW9fZndfaW9jdGwsCiB9OwpAQCAtMTEyMCw3ICsxMTE5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcC0+UklPTnVtSG9zdHM7IGkrKykgewogCQlocCA9ICZwLT5SSU9Ib3N0c1tpXTsKIAkJaWYgKGhwLT5JdmVjKSB7Ci0JCQlpbnQgbW9kZSA9IFNBX1NISVJROworCQkJaW50IG1vZGUgPSBJUlFGX1NIQVJFRDsKIAkJCWlmIChocC0+SXZlYyAmIDB4ODAwMCkgewogCQkJCW1vZGUgPSAwOwogCQkJCWhwLT5JdmVjICY9IDB4N2ZmZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5oCmluZGV4IDU1YjljOTcuLmRjM2YwMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguaApAQCAtMjMsNyArMjMsNiBAQAogICogIFZlcnNpb24gMS4wIC0tIEp1bHksIDE5OTkuIAogICogCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBSSU9fTkJPQVJEUyAgICAgICAgNAogI2RlZmluZSBSSU9fUE9SVFNQRVJCT0FSRCAxMjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW5pdC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMKaW5kZXggMTJlMzRiYy4uOTlmM2RmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMKQEAgLTMzLDcgKzMzLDYgQEAKIHN0YXRpYyBjaGFyICpfcmlvaW5pdF9jX3NjY3NfID0gIkAoIylyaW9pbml0LmMJMS4zIjsKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwppbmRleCA2NTdjMGQ4Li5mMWM5NGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogCWlmIChicC0+ZmxhZ3MgJiBSQ19CT0FSRF9BQ1RJVkUpIAogCQlyZXR1cm4gMDsKIAkKLQllcnJvciA9IHJlcXVlc3RfaXJxKGJwLT5pcnEsIHJjX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycSwgcmNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkJICAgICJSSVNDb20vOCIsIE5VTEwpOwogCWlmIChlcnJvcikgCiAJCXJldHVybiBlcnJvcjsKQEAgLTE2MzQsNyArMTYzNCw2IEBACiAJbWVtc2V0KElSUV90b19ib2FyZCwgMCwgc2l6ZW9mKElSUV90b19ib2FyZCkpOwogCXJpc2NvbV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcmlzY29tX2RyaXZlci0+bmFtZSA9ICJ0dHlMIjsKLQlyaXNjb21fZHJpdmVyLT5kZXZmc19uYW1lID0gInR0cy9MIjsKIAlyaXNjb21fZHJpdmVyLT5tYWpvciA9IFJJU0NPTThfTk9STUFMX01BSk9SOwogCXJpc2NvbV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwogCXJpc2NvbV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0LmMgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKaW5kZXggMDcwOGM1MS4uMGFjMTMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JvY2tldC5jCisrKyBiL2RyaXZlcnMvY2hhci9yb2NrZXQuYwpAQCAtMjQyNiw4ICsyNDI2LDcgQEAKIAkgKi8KIAogCXJvY2tldF9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0Jcm9ja2V0X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX05PX0RFVkZTOwotCXJvY2tldF9kcml2ZXItPmRldmZzX25hbWUgPSAidHRzL1IiOworCXJvY2tldF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAlyb2NrZXRfZHJpdmVyLT5uYW1lID0gInR0eVIiOwogCXJvY2tldF9kcml2ZXItPmRyaXZlcl9uYW1lID0gIkNvbXRyb2wgUm9ja2V0UG9ydCI7CiAJcm9ja2V0X2RyaXZlci0+bWFqb3IgPSBUVFlfUk9DS0VUX01BSk9SOwpAQCAtMjQzOCw3ICsyNDM3LDcgQEAKIAlyb2NrZXRfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9CiAJICAgIEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKICNpZmRlZiBST0NLRVRfU09GVF9GTE9XCi0Jcm9ja2V0X2RyaXZlci0+ZmxhZ3MgfD0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfTk9fREVWRlM7CisJcm9ja2V0X2RyaXZlci0+ZmxhZ3MgfD0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CiAjZW5kaWYKIAl0dHlfc2V0X29wZXJhdGlvbnMocm9ja2V0X2RyaXZlciwgJnJvY2tldF9vcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcnRjLmMgYi9kcml2ZXJzL2NoYXIvcnRjLmMKaW5kZXggMDg5N2IwYy4uY2M3YmQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3J0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9ydGMuYwpAQCAtNjEsNyArNjEsNiBAQAogICoJdGhpcyBkcml2ZXIuKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIyMSw3ICsyMjAsNyBAQAogCiAjaWZkZWYgUlRDX0lSUQogLyoKLSAqCUEgdmVyeSB0aW55IGludGVycnVwdCBoYW5kbGVyLiBJdCBydW5zIHdpdGggU0FfSU5URVJSVVBUIHNldCwKKyAqCUEgdmVyeSB0aW55IGludGVycnVwdCBoYW5kbGVyLiBJdCBydW5zIHdpdGggSVJRRl9ESVNBQkxFRCBzZXQsCiAgKglidXQgdGhlcmUgaXMgcG9zc2liaWxpdHkgb2YgY29uZmxpY3Rpbmcgd2l0aCB0aGUgc2V0X3J0Y19tbXNzKCkKICAqCWNhbGwgKHRoZSBydGMgaXJxIGFuZCB0aGUgdGltZXIgaXJxIGNhbiBlYXNpbHkgcnVuIGF0IHRoZSBzYW1lCiAgKgl0aW1lIGluIHR3byBkaWZmZXJlbnQgQ1BVcykuIFNvIHdlIG5lZWQgdG8gc2VyaWFsaXplCkBAIC04NzgsNyArODc3LDcgQEAKICAqCVRoZSB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucyB3ZSBzdXBwb3J0LgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Y19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IHJ0Y19yZWFkLApAQCAtODk3LDcgKzg5Niw3IEBACiAJLmZvcHMJCT0gJnJ0Y19mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX3Byb2NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0Y19wcm9jX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBydGNfcHJvY19vcGVuLAogCS5yZWFkICA9IHNlcV9yZWFkLApAQCAtOTU5LDcgKzk1OCw3IEBACiAJICogWFhYIEludGVycnVwdCBwaW4gIzcgaW4gRXNwcmVzc28gaXMgc2hhcmVkIGJldHdlZW4gUlRDIGFuZAogCSAqIFBDSSBTbG90IDIgSU5UQSMgKGFuZCBzb21lIElOVHgjIGluIFNsb3QgMSkuCiAJICovCi0JaWYgKHJlcXVlc3RfaXJxKHJ0Y19pcnEsIHJ0Y19pbnRlcnJ1cHQsIFNBX1NISVJRLCAicnRjIiwgKHZvaWQgKikmcnRjX3BvcnQpKSB7CisJaWYgKHJlcXVlc3RfaXJxKHJ0Y19pcnEsIHJ0Y19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAicnRjIiwgKHZvaWQgKikmcnRjX3BvcnQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicnRjOiBjYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLCBydGNfaXJxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtOTc3LDcgKzk3Niw3IEBACiAJCXJ0Y19pbnRfaGFuZGxlcl9wdHIgPSBydGNfaW50ZXJydXB0OwogCX0KIAotCWlmKHJlcXVlc3RfaXJxKFJUQ19JUlEsIHJ0Y19pbnRfaGFuZGxlcl9wdHIsIFNBX0lOVEVSUlVQVCwgInJ0YyIsIE5VTEwpKSB7CisJaWYocmVxdWVzdF9pcnEoUlRDX0lSUSwgcnRjX2ludF9oYW5kbGVyX3B0ciwgSVJRRl9ESVNBQkxFRCwgInJ0YyIsIE5VTEwpKSB7CiAJCS8qIFllYWggcmlnaHQsIHNlZWluZyBhcyBpcnEgOCBkb2Vzbid0IGV2ZW4gaGl0IHRoZSBidXMuICovCiAJCXByaW50ayhLRVJOX0VSUiAicnRjOiBJUlEgJWQgaXMgbm90IGZyZWUuXG4iLCBSVENfSVJRKTsKIAkJcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwppbmRleCBiMDAzOGIxLi41NDU4ZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwpAQCAtMzQxLDEzICszNDEsMTMgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoczNjMjQxMF9ydGNfYWxhcm1ubywgczNjMjQxMF9ydGNfYWxhcm1pcnEsCi0JCQkgIFNBX0lOVEVSUlVQVCwgICJzM2MyNDEwLXJ0YyBhbGFybSIsIE5VTEwpOworCQkJICBJUlFGX0RJU0FCTEVELCAgInMzYzI0MTAtcnRjIGFsYXJtIiwgTlVMTCk7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIklSUSVkIGFscmVhZHkgaW4gdXNlXG4iLCBzM2MyNDEwX3J0Y19hbGFybW5vKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKHMzYzI0MTBfcnRjX3RpY2tubywgczNjMjQxMF9ydGNfdGlja2lycSwKLQkJCSAgU0FfSU5URVJSVVBULCAgInMzYzI0MTAtcnRjIHRpY2siLCBOVUxMKTsKKwkJCSAgSVJRRl9ESVNBQkxFRCwgICJzM2MyNDEwLXJ0YyB0aWNrIiwgTlVMTCk7CiAKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSVJRJWQgYWxyZWFkeSBpbiB1c2VcbiIsIHMzYzI0MTBfcnRjX3RpY2tubyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc2N4MjAwX2dwaW8uYyBiL2RyaXZlcnMvY2hhci9zY3gyMDBfZ3Bpby5jCmluZGV4IDVhMjgwYTMuLjQyNWM1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zY3gyMDBfZ3Bpby5jCisrKyBiL2RyaXZlcnMvY2hhci9zY3gyMDBfZ3Bpby5jCkBAIC02Myw3ICs2Myw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2N4MjAwX2dwaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjeDIwMF9ncGlvX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgICA9IG5zY19ncGlvX3dyaXRlLAogCS5yZWFkICAgID0gbnNjX2dwaW9fcmVhZCwKQEAgLTEyNiw5ICsxMjYsMTAgQEAKIHVuZG9fY2hyZGV2X3JlZ2lvbjoKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBudW1fcGlucyk7CiB1bmRvX3BsYXRmb3JtX2RldmljZV9hZGQ6Ci0JcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOwogdW5kb19tYWxsb2M6Ci0Ja2ZyZWUocGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtMTM2LDcgKzEzNyw2IEBACiB7CiAJa2ZyZWUoc2N4MjAwX2RldmljZXMpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihtYWpvciwgMCksIG51bV9waW5zKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwogCS8qIGtmcmVlKHBkZXYpOyAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCmluZGV4IDAzN2M5NDAuLjIxYTcxMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICAqIC0gcmVwbGFjZSBib3R0b20gaGFsZiBoYW5kbGVyIHdpdGggdGFzayBxdWV1ZSBoYW5kbGVyCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTIyMzUsNyArMjIzNCw2IEBACiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBzdHJ1Y3R1cmUgKi8KICAgICAKICAgICBjeV9zZXJpYWxfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwotICAgIGN5X3NlcmlhbF9kcml2ZXItPmRldmZzX25hbWUgPSAidHRzLyI7CiAgICAgY3lfc2VyaWFsX2RyaXZlci0+bmFtZSA9ICJ0dHlTIjsKICAgICBjeV9zZXJpYWxfZHJpdmVyLT5tYWpvciA9IFRUWV9NQUpPUjsKICAgICBjeV9zZXJpYWxfZHJpdmVyLT5taW5vcl9zdGFydCA9IDY0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nuc2MuYyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKaW5kZXggNTZjODI0My4uYWZjNmVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Nuc2MuYworKysgYi9kcml2ZXJzL2NoYXIvc25zYy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogCS8qIGhvb2sgdGhpcyBzdWJjaGFubmVsIHVwIHRvIHRoZSBzeXN0ZW0gY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KIAlydiA9IHJlcXVlc3RfaXJxKFNHSV9VQVJUX1ZFQ1RPUiwgc2NkcnZfaW50ZXJydXB0LAotCQkJIFNBX1NISVJRIHwgU0FfSU5URVJSVVBULAorCQkJIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKIAkJCSBTWVNDVExfQkFTRU5BTUUsIHNkKTsKIAlpZiAocnYpIHsKIAkJaWE2NF9zbl9pcnRyX2Nsb3NlKHNkLT5zZF9uYXNpZCwgc2QtPnNkX3N1YmNoKTsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2Rydl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NkcnZfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQlzY2Rydl9yZWFkLAogCS53cml0ZSA9CXNjZHJ2X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nuc2NfZXZlbnQuYyBiL2RyaXZlcnMvY2hhci9zbnNjX2V2ZW50LmMKaW5kZXggZTIzNGQ1MC4uOGIyMjEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Nuc2NfZXZlbnQuYworKysgYi9kcml2ZXJzL2NoYXIvc25zY19ldmVudC5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogCS8qIGhvb2sgZXZlbnQgc3ViY2hhbm5lbCB1cCB0byB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgaW50ZXJydXB0ICovCiAJcnYgPSByZXF1ZXN0X2lycShTR0lfVUFSVF9WRUNUT1IsIHNjZHJ2X2V2ZW50X2ludGVycnVwdCwKLQkJCSBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwKKwkJCSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCiAJCQkgInN5c3RlbSBjb250cm9sbGVyIGV2ZW50cyIsIGV2ZW50X3NkKTsKIAlpZiAocnYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGlycSByZXF1ZXN0IGZhaWxlZCAoJWQpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IDQzZGZkODYuLmQ0ZTQzNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTMzLDcgKzMzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0xMTA3LDcgKzExMDYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNvbnlwaV9taXNjX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzb255cGlfbWlzY19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBzb255cGlfbWlzY19yZWFkLAogCS5wb2xsCQk9IHNvbnlwaV9taXNjX3BvbGwsCkBAIC0xMjgzLDcgKzEyODIsNyBAQAogCXdoaWxlIChpcnFfbGlzdC0+aXJxKSB7CiAKIAkJaWYgKCFyZXF1ZXN0X2lycShpcnFfbGlzdC0+aXJxLCBzb255cGlfaXJxLAotCQkJCSBTQV9TSElSUSwgInNvbnlwaSIsIHNvbnlwaV9pcnEpKSB7CisJCQkJIElSUUZfU0hBUkVELCAic29ueXBpIiwgc29ueXBpX2lycSkpIHsKIAkJCWRldi0+aXJxID0gaXJxX2xpc3QtPmlycTsKIAkJCWRldi0+Yml0cyA9IGlycV9saXN0LT5iaXRzOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggZDJkNmIwMS4uY2IyODU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwpAQCAtNzUsNyArNzUsNiBAQAogICogRG9jdW1lbnRhdGlvbi9zcGVjaWFsaXgudHh0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0xMDE2LDkgKzEwMTUsOSBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChicC0+ZmxhZ3MgJiBTWF9CT0FSRF9JU19QQ0kpCi0JCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycSwgc3hfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwgInNwZWNpYWxpeCBJTzgrIiwgYnApOworCQllcnJvciA9IHJlcXVlc3RfaXJxKGJwLT5pcnEsIHN4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAic3BlY2lhbGl4IElPOCsiLCBicCk7CiAJZWxzZQotCQllcnJvciA9IHJlcXVlc3RfaXJxKGJwLT5pcnEsIHN4X2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAic3BlY2lhbGl4IElPOCsiLCBicCk7CisJCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycSwgc3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic3BlY2lhbGl4IElPOCsiLCBicCk7CiAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggYmYzNjFhNS4uM2JlYjIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNDAsNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKQEAgLTcwOSw3ICs3MDcsNyBAQAogICoJRGVmaW5lIHRoZSBkcml2ZXIgaW5mbyBmb3IgYSB1c2VyIGxldmVsIGNvbnRyb2wgZGV2aWNlLiBVc2VkIG1haW5seQogICoJdG8gZ2V0IGF0IHBvcnQgc3RhdHMgLSBvbmx5IG5vdCB1c2luZyB0aGUgcG9ydCBkZXZpY2UgaXRzZWxmLgogICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwlzdGxfZnNpb21lbSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCXN0bF9mc2lvbWVtID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gc3RsX21lbWlvY3RsLAogfTsKQEAgLTc1NywxMSArNzU1LDggQEAKIAkJCSJlcnJubz0lZFxuIiwgLWkpOwogCQlyZXR1cm47CiAJfQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJZGV2ZnNfcmVtb3ZlKCJzdGFsaW9tZW0vJWQiLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQljbGFzc19kZXZpY2VfZGVzdHJveShzdGFsbGlvbl9jbGFzcywgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSk7Ci0JfQotCWRldmZzX3JlbW92ZSgic3RhbGlvbWVtIik7CiAJaWYgKChpID0gdW5yZWdpc3Rlcl9jaHJkZXYoU1RMX1NJT01FTU1BSk9SLCAic3RhbGlvbWVtIikpKQogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gdW4tcmVnaXN0ZXIgc2VyaWFsIG1lbW9yeSBkZXZpY2UsICIKIAkJCSJlcnJubz0lZFxuIiwgLWkpOwpAQCAtMjMwNyw3ICsyMzAyLDcgQEAKIAlicmRwLT5ucnBhbmVscyA9IDE7CiAJYnJkcC0+c3RhdGUgfD0gQlJEX0ZPVU5EOwogCWJyZHAtPmh3aWQgPSBzdGF0dXM7Ci0JaWYgKHJlcXVlc3RfaXJxKGJyZHAtPmlycSwgc3RsX2ludHIsIFNBX1NISVJRLCBuYW1lLCBicmRwKSAhPSAwKSB7CisJaWYgKHJlcXVlc3RfaXJxKGJyZHAtPmlycSwgc3RsX2ludHIsIElSUUZfU0hBUkVELCBuYW1lLCBicmRwKSAhPSAwKSB7CiAJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byByZWdpc3RlciBpbnRlcnJ1cHQgIgogCQkgICAgInJvdXRpbmUgZm9yICVzIGlycT0lZFxuIiwgbmFtZSwgYnJkcC0+aXJxKTsKIAkJcmMgPSAtRU5PREVWOwpAQCAtMjUxNyw3ICsyNTEyLDcgQEAKIAkJb3V0YigoYnJkcC0+aW9jdHJsdmFsIHwgRUNIX0JSRERJU0FCTEUpLCBicmRwLT5pb2N0cmwpOwogCiAJYnJkcC0+c3RhdGUgfD0gQlJEX0ZPVU5EOwotCWlmIChyZXF1ZXN0X2lycShicmRwLT5pcnEsIHN0bF9pbnRyLCBTQV9TSElSUSwgbmFtZSwgYnJkcCkgIT0gMCkgeworCWlmIChyZXF1ZXN0X2lycShicmRwLT5pcnEsIHN0bF9pbnRyLCBJUlFGX1NIQVJFRCwgbmFtZSwgYnJkcCkgIT0gMCkgewogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0ICIKIAkJICAgICJyb3V0aW5lIGZvciAlcyBpcnE9JWRcbiIsIG5hbWUsIGJyZHAtPmlycSk7CiAJCWkgPSAtRU5PREVWOwpAQCAtMzAyOSw2ICszMDI0LDkgQEAKIAlpbnQgaTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgc3RsX2RydnRpdGxlLCBzdGxfZHJ2dmVyc2lvbik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc3RhbGxpb25fbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJyZF9sb2NrKTsKKwogCXN0bF9pbml0YnJkcygpOwogCiAJc3RsX3NlcmlhbCA9IGFsbG9jX3R0eV9kcml2ZXIoU1RMX01BWEJSRFMgKiBTVExfTUFYUE9SVFMpOwpAQCAtMzA0MSwyMiArMzAzOSwxNiBAQAogICovCiAJaWYgKHJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iLCAmc3RsX2ZzaW9tZW0pKQogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaWFsIGJvYXJkIGRldmljZVxuIik7Ci0JZGV2ZnNfbWtfZGlyKCJzdGFsaW9tZW0iKTsKIAogCXN0YWxsaW9uX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAic3RhbGlvbWVtIik7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlkZXZmc19ta19jZGV2KE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksCi0JCQkJU19JRkNIUnxTX0lSVVNSfFNfSVdVU1IsCi0JCQkJInN0YWxpb21lbS8lZCIsIGkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCiAJCWNsYXNzX2RldmljZV9jcmVhdGUoc3RhbGxpb25fY2xhc3MsIE5VTEwsCiAJCQkJICAgIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksIE5VTEwsCiAJCQkJICAgICJzdGFsaW9tZW0lZCIsIGkpOwotCX0KIAogCXN0bF9zZXJpYWwtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3RsX3NlcmlhbC0+ZHJpdmVyX25hbWUgPSBzdGxfZHJ2bmFtZTsKIAlzdGxfc2VyaWFsLT5uYW1lID0gInR0eUUiOwotCXN0bF9zZXJpYWwtPmRldmZzX25hbWUgPSAidHRzL0UiOwogCXN0bF9zZXJpYWwtPm1ham9yID0gU1RMX1NFUklBTE1BSk9SOwogCXN0bF9zZXJpYWwtPm1pbm9yX3N0YXJ0ID0gMDsKIAlzdGxfc2VyaWFsLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeC5jIGIvZHJpdmVycy9jaGFyL3N4LmMKaW5kZXggNzZiOTEwNy4uZTFjZDJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N4LmMKKysrIGIvZHJpdmVycy9jaGFyL3N4LmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogICoKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeF9md19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3hfZndfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IHN4X2Z3X2lvY3RsLAogfTsKQEAgLTE5OTMsNyArMTk5Myw3IEBACiAJCWlmKGJvYXJkLT5pcnEgPiAwKSB7CiAJCQkvKiBmaXhlZCBpcnEsIHByb2JhYmx5IFBDSSAqLwogCQkJaWYoc3hfaXJxbWFzayAmICgxIDw8IGJvYXJkLT5pcnEpKSB7IC8qIG1heSB3ZSB1c2UgdGhpcyBpcnE/ICovCi0JCQkJaWYocmVxdWVzdF9pcnEoYm9hcmQtPmlycSwgc3hfaW50ZXJydXB0LCBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgInN4IiwgYm9hcmQpKSB7CisJCQkJaWYocmVxdWVzdF9pcnEoYm9hcmQtPmlycSwgc3hfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJzeCIsIGJvYXJkKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgInN4OiBDYW5ub3QgYWxsb2NhdGUgaXJxICVkLlxuIiwgYm9hcmQtPmlycSk7CiAJCQkJCWJvYXJkLT5pcnEgPSAwOwogCQkJCX0KQEAgLTIwMDUsNyArMjAwNSw3IEBACiAJCQlpbnQgaXJxbWFzayA9IHN4X2lycW1hc2sgJiAoSVNfU1hfQk9BUkQoYm9hcmQpID8gU1hfSVNBX0lSUV9NQVNLIDogU0kyX0lTQV9JUlFfTUFTSyk7CiAJCQlmb3IoaXJxbnIgPSAxNTsgaXJxbnIgPiAwOyBpcnFuci0tKQogCQkJCWlmKGlycW1hc2sgJiAoMSA8PCBpcnFucikpCi0JCQkJCWlmKCEgcmVxdWVzdF9pcnEoaXJxbnIsIHN4X2ludGVycnVwdCwgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsICJzeCIsIGJvYXJkKSkKKwkJCQkJaWYoISByZXF1ZXN0X2lycShpcnFuciwgc3hfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJzeCIsIGJvYXJkKSkKIAkJCQkJCWJyZWFrOwogCQkJaWYoISBpcnFucikKIAkJCQlwcmludGsoS0VSTl9FUlIgInN4OiBDYW5ub3QgYWxsb2NhdGUgSVJRLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCmluZGV4IGZlZTJhY2EuLmRmNzgyZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCkBAIC04MTUwLDcgKzgxNTAsNyBAQAogCQkJCQogCWluZm8tPmJ1c190eXBlID0gTUdTTF9CVVNfVFlQRV9QQ0k7CiAJaW5mby0+aW9fYWRkcl9zaXplID0gODsKLQlpbmZvLT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAogCWlmIChkZXYtPmRldmljZSA9PSAweDAyMTApIHsKIAkJLyogVmVyc2lvbiAxIFBDSTkwMzAgYmFzZWQgdW5pdmVyc2FsIFBDSSBhZGFwdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IDRlMzVkNDEuLmU4Mjk1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC00Niw3ICs0Niw2IEBACiAvLyNkZWZpbmUgREJHUkJVRihpbmZvKSBkdW1wX3JidWZzKGluZm8pCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzM0NCw3ICszMzQzLDcgQEAKIAkJaW5mby0+cGh5c19yZWdfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LDApOwogCiAJCWluZm8tPmJ1c190eXBlID0gTUdTTF9CVVNfVFlQRV9QQ0k7Ci0JCWluZm8tPmlycV9mbGFncyA9IFNBX1NISVJROworCQlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAogCQlpbmZvLT5pbml0X2Vycm9yID0gLTE7IC8qIGFzc3VtZSBlcnJvciwgc2V0IHRvIDAgb24gc3VjY2Vzc2Z1bCBpbml0ICovCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggMjFiZjE1YS4uMWU0NDNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC0zNCw3ICszNCw2IEBACiAKICNkZWZpbmUgTUFYX0RFVklDRVMgMTIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CkBAIC0zODM2LDcgKzM4MzUsNyBAQAogCQlpbmZvLT5waHlzX3N0YXRjdHJsX2Jhc2UgJj0gfihQQUdFX1NJWkUtMSk7CiAKIAkJaW5mby0+YnVzX3R5cGUgPSBNR1NMX0JVU19UWVBFX1BDSTsKLQkJaW5mby0+aXJxX2ZsYWdzID0gU0FfU0hJUlE7CisJCWluZm8tPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCiAJCWluaXRfdGltZXIoJmluZm8tPnR4X3RpbWVyKTsKIAkJaW5mby0+dHhfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDM1MDgyZGMuLmVlM2NhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgliYXNlZCB1cG9uIGRpc2N1c2lvbnMgaW4gaXJjOi8vaXJjLm9wZW5wcm9qZWN0cy5uZXQvI2tlcm5lbG5ld2JpZXMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMTQ4LDEyICsxNDcsMTMgQEAKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfUkVNT1VOVCwKIH07CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfTVVURVhFUworI2lmZGVmIENPTkZJR19MT0NLREVQCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfc2hvd2xvY2tzKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLAogCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JbXV0ZXhfZGVidWdfc2hvd19hbGxfbG9ja3MoKTsKKwlkZWJ1Z19zaG93X2FsbF9sb2NrcygpOwogfQorCiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9zaG93bG9ja3Nfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd2xvY2tzLAogCS5oZWxwX21zZwk9ICJzaG93LWFsbC1sb2NrcyhEKSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGIwMjE5LmMgYi9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKaW5kZXggYTgwYzgzMi4uYmIxYmFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RiMDIxOS5jCisrKyBiL2RyaXZlcnMvY2hhci90YjAyMTkuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRiMDIxOV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGIwMjE5X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IHRhbmJhY190YjAyMTlfcmVhZCwKIAkud3JpdGUJCT0gdGFuYmFjX3RiMDIxOV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90aXBhci5jIGIvZHJpdmVycy9jaGFyL3RpcGFyLmMKaW5kZXggMDc5ZGI1YS4uZDMwZGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RpcGFyLmMKKysrIGIvZHJpdmVycy9jaGFyL3RpcGFyLmMKQEAgLTQyLDcgKzQyLDYgQEAKICAqLwogI3VuZGVmIERFQlVHCQkJCS8qIGNoYW5nZSB0byAjZGVmaW5lIHRvIGdldCBkZWJ1Z2dpbmcKIAkJCQkJICogb3V0cHV0IC0gZm9yIHByX2RlYnVnKCkgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC01Niw3ICs1NSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CS8qIERldkZzIHN1cHBvcnQgKi8KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CQkvKiBPdXIgY29kZSBkZXBlbmQgb24gcGFycG9ydCAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCkBAIC0zODMsNyArMzgxLDcgQEAKIAogLyogLS0tLS0ga2VybmVsIG1vZHVsZSByZWdpc3RlcmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGlwYXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpcGFyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIAkucmVhZCA9IHRpcGFyX3JlYWQsCkBAIC00NDMsMTIgKzQ0MSw2IEBACiAKIAljbGFzc19kZXZpY2VfY3JlYXRlKHRpcGFyX2NsYXNzLCBOVUxMLCBNS0RFVihUSVBBUl9NQUpPUiwKIAkJCVRJUEFSX01JTk9SICsgbnIpLCBOVUxMLCAicGFyJWQiLCBucik7Ci0JLyogVXNlIGRldmZzLCB0cmVlOiAvZGV2L3RpY2FibGVzL3Bhci9bMC4uMl0gKi8KLQllcnIgPSBkZXZmc19ta19jZGV2KE1LREVWKFRJUEFSX01BSk9SLCBUSVBBUl9NSU5PUiArIG5yKSwKLQkJCVNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VHTywKLQkJCSJ0aWNhYmxlcy9wYXIvJWQiLCBucik7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfY2xhc3M7CiAKIAkvKiBEaXNwbGF5IGluZm9ybWF0aW9ucyAqLwogCXByX2luZm8oInRpcGFyJWQ6IHVzaW5nICVzICglcylcbiIsIG5yLCBwb3J0LT5uYW1lLCAocG9ydC0+aXJxID09CkBAIC00NjAsMTEgKzQ1Miw3IEBACiAJCXByX2luZm8oInRpcGFyJWQ6IGxpbmsgY2FibGUgbm90IGZvdW5kXG4iLCBucik7CiAKIAllcnIgPSAwOwotCWdvdG8gb3V0OwogCi1vdXRfY2xhc3M6Ci0JY2xhc3NfZGV2aWNlX2Rlc3Ryb3kodGlwYXJfY2xhc3MsIE1LREVWKFRJUEFSX01BSk9SLCBUSVBBUl9NSU5PUiArIG5yKSk7Ci0JY2xhc3NfZGVzdHJveSh0aXBhcl9jbGFzcyk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTUwNyw5ICs0OTUsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBVc2UgZGV2ZnMgd2l0aCB0cmVlOiAvZGV2L3RpY2FibGVzL3Bhci9bMC4uMl0gKi8KLQlkZXZmc19ta19kaXIoInRpY2FibGVzL3BhciIpOwotCiAJdGlwYXJfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ0aWNhYmxlcyIpOwogCWlmIChJU19FUlIodGlwYXJfY2xhc3MpKSB7CiAJCWVyciA9IFBUUl9FUlIodGlwYXJfY2xhc3MpOwpAQCAtNTI4LDcgKzUxMyw2IEBACiAJY2xhc3NfZGVzdHJveSh0aXBhcl9jbGFzcyk7CiAKIG91dF9jaHJkZXY6Ci0JZGV2ZnNfcmVtb3ZlKCJ0aWNhYmxlcy9wYXIiKTsKIAl1bnJlZ2lzdGVyX2NocmRldihUSVBBUl9NQUpPUiwgInRpcGFyIik7CiBvdXQ6CiAJcmV0dXJuIGVycjsJCkBAIC01NDksMTAgKzUzMyw4IEBACiAJCQljb250aW51ZTsKIAkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSh0YWJsZVtpXS5kZXYpOwogCQljbGFzc19kZXZpY2VfZGVzdHJveSh0aXBhcl9jbGFzcywgTUtERVYoVElQQVJfTUFKT1IsIGkpKTsKLQkJZGV2ZnNfcmVtb3ZlKCJ0aWNhYmxlcy9wYXIvJWQiLCBpKTsKIAl9CiAJY2xhc3NfZGVzdHJveSh0aXBhcl9jbGFzcyk7Ci0JZGV2ZnNfcmVtb3ZlKCJ0aWNhYmxlcy9wYXIiKTsKIAogCXByX2luZm8oInRpcGFyOiBtb2R1bGUgdW5sb2FkZWRcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RsY2xrLmMgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwppbmRleCBlZjY4ZDE1Li5kMmM1YmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGxjbGsuYworKysgYi9kcml2ZXJzL2NoYXIvdGxjbGsuYwpAQCAtMjcsNyArMjcsNiBAQAogICogTVBDQkwwMDEwIEFUQ0EgY29tcHV0ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjA5LDcgKzIwOCw3IEBACiAJLyogVGhpcyBkZXZpY2UgaXMgd2lyZWQgdGhyb3VnaCB0aGUgRlBHQSBJTyBzcGFjZSBvZiB0aGUgQVRDQSBibGFkZQogCSAqIHdlIGNhbid0IHNoYXJlIHRoaXMgSVJRICovCiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEodGVsY2xrX2ludGVycnVwdCwgJnRsY2xrX2ludGVycnVwdCwKLQkJCSAgICAgU0FfSU5URVJSVVBULCAidGVsY29fY2xvY2siLCB0bGNsa19pbnRlcnJ1cHQpOworCQkJICAgICBJUlFGX0RJU0FCTEVELCAidGVsY29fY2xvY2siLCB0bGNsa19pbnRlcnJ1cHQpOwogCWlmIChyZXN1bHQgPT0gLUVCVVNZKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGxjbGs6IEludGVycnVwdCBjYW4ndCBiZSByZXNlcnZlZC5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjQ4LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRsY2xrX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0bGNsa19mb3BzID0gewogCS5yZWFkID0gdGxjbGtfcmVhZCwKIAkud3JpdGUgPSB0bGNsa193cml0ZSwKIAkub3BlbiA9IHRsY2xrX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdG9zaGliYS5jIGIvZHJpdmVycy9jaGFyL3Rvc2hpYmEuYwppbmRleCBlMmZiMjM0Li5kZDM2ZmQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Rvc2hpYmEuYworKysgYi9kcml2ZXJzL2NoYXIvdG9zaGliYS5jCkBAIC05Miw3ICs5Miw3IEBACiAJdW5zaWduZWQgbG9uZyk7CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdG9zaF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdG9zaF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gdG9zaF9pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwppbmRleCA1OGEyNThjZS4uYWQ4ZmZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlyZXR1cm4gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0bWVsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF0bWVsX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS5vcGVuID0gdHBtX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYwppbmRleCBhZGZmZjIxLi4xMzUzYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKQEAgLTMzOCw3ICszMzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpbmZfYXR0cl9ncnAgPSB7LmF0dHJzID0gaW5mX2F0dHJzIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGluZl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbmZfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLm9wZW4gPSB0cG1fb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX25zYy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMKaW5kZXggNGM4YmMwNi4uMjYyODdhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCXJldHVybiBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBOU0NfU1RBVFVTKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zY19vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIAkub3BlbiA9IHRwbV9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwppbmRleCA4ZWE3MDYyLi4zMjMyYjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpAQCAtMzMwLDcgKzMzMCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aXNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGlzX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS5vcGVuID0gdHBtX29wZW4sCkBAIC01MjIsNyArNTIyLDcgQEAKIAkJCWlvd3JpdGU4KGksIGNoaXAtPnZlbmRvci5pb2Jhc2UgKwogCQkJCSAgICBUUE1fSU5UX1ZFQ1RPUihjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKIAkJCWlmIChyZXF1ZXN0X2lycQotCQkJICAgIChpLCB0aXNfaW50X3Byb2JlLCBTQV9TSElSUSwKKwkJCSAgICAoaSwgdGlzX2ludF9wcm9iZSwgSVJRRl9TSEFSRUQsCiAJCQkgICAgIGNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsIGNoaXApICE9IDApIHsKIAkJCQlkZXZfaW5mbyhjaGlwLT5kZXYsCiAJCQkJCSAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxOiAlZCBmb3IgcHJvYmVcbiIsCkBAIC01NTcsNyArNTU3LDcgQEAKIAkJCSBjaGlwLT52ZW5kb3IuaW9iYXNlICsKIAkJCSBUUE1fSU5UX1ZFQ1RPUihjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKIAkJaWYgKHJlcXVlc3RfaXJxCi0JCSAgICAoY2hpcC0+dmVuZG9yLmlycSwgdGlzX2ludF9oYW5kbGVyLCBTQV9TSElSUSwKKwkJICAgIChjaGlwLT52ZW5kb3IuaXJxLCB0aXNfaW50X2hhbmRsZXIsIElSUUZfU0hBUkVELAogCQkgICAgIGNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsIGNoaXApICE9IDApIHsKIAkJCWRldl9pbmZvKGNoaXAtPmRldiwKIAkJCQkgIlVuYWJsZSB0byByZXF1ZXN0IGlycTogJWQgZm9yIHVzZVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBiZDc0ZTgyLi5iZmRiOTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC02NSw3ICs2NSw2IEBACiAgKiBhbGxvY190dHlfc3RydWN0KCkgYWx3YXlzIHVzZXMga21hbGxvYygpIC0tIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5ldT4gMTdNYXIwMQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTEwMiw3ICsxMDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tiZF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGVjdGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCkBAIC0yNjcsNyArMjY1LDYgQEAKIAlwLT51c2VkID0gMDsKIAlwLT5zaXplID0gc2l6ZTsKIAlwLT5uZXh0ID0gTlVMTDsKLQlwLT5hY3RpdmUgPSAwOwogCXAtPmNvbW1pdCA9IDA7CiAJcC0+cmVhZCA9IDA7CiAJcC0+Y2hhcl9idWZfcHRyID0gKGNoYXIgKikocC0+ZGF0YSk7CkBAIC0zMjcsMTAgKzMyNCw5IEBACiAJLyogT1BUSU1JU0FUSU9OOiBXZSBjb3VsZCBrZWVwIGEgcGVyIHR0eSAiemVybyIgc2l6ZWQgYnVmZmVyIHRvCiAJICAgcmVtb3ZlIHRoaXMgY29uZGl0aW9uYWwgaWYgaXRzIHdvcnRoIGl0LiBUaGlzIHdvdWxkIGJlIGludmlzaWJsZQogCSAgIHRvIHRoZSBjYWxsZXJzICovCi0JaWYgKChiID0gdHR5LT5idWYudGFpbCkgIT0gTlVMTCkgeworCWlmICgoYiA9IHR0eS0+YnVmLnRhaWwpICE9IE5VTEwpCiAJCWxlZnQgPSBiLT5zaXplIC0gYi0+dXNlZDsKLQkJYi0+YWN0aXZlID0gMTsKLQl9IGVsc2UKKwllbHNlCiAJCWxlZnQgPSAwOwogCiAJaWYgKGxlZnQgPCBzaXplKSB7CkBAIC0zMzgsMTIgKzMzNCwxMCBAQAogCQlpZiAoKG4gPSB0dHlfYnVmZmVyX2ZpbmQodHR5LCBzaXplKSkgIT0gTlVMTCkgewogCQkJaWYgKGIgIT0gTlVMTCkgewogCQkJCWItPm5leHQgPSBuOwotCQkJCWItPmFjdGl2ZSA9IDA7CiAJCQkJYi0+Y29tbWl0ID0gYi0+dXNlZDsKIAkJCX0gZWxzZQogCQkJCXR0eS0+YnVmLmhlYWQgPSBuOwogCQkJdHR5LT5idWYudGFpbCA9IG47Ci0JCQluLT5hY3RpdmUgPSAxOwogCQl9IGVsc2UKIAkJCXNpemUgPSBsZWZ0OwogCX0KQEAgLTQwNCwxMCArMzk4LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JaWYgKHR0eS0+YnVmLnRhaWwgIT0gTlVMTCkgewotCQl0dHktPmJ1Zi50YWlsLT5hY3RpdmUgPSAwOworCWlmICh0dHktPmJ1Zi50YWlsICE9IE5VTEwpCiAJCXR0eS0+YnVmLnRhaWwtPmNvbW1pdCA9IHR0eS0+YnVmLnRhaWwtPnVzZWQ7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOwogfQpAQCAtNzg0LDExICs3NzYsOCBAQAogCX0KIAogCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKLQljbGVhcl9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpOwotCWlmIChvX3R0eSkgeworCWlmIChvX3R0eSkKIAkJY2xlYXJfYml0KFRUWV9MRElTQywgJm9fdHR5LT5mbGFncyk7Ci0JCWNsZWFyX2JpdChUVFlfRE9OVF9GTElQLCAmb190dHktPmZsYWdzKTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5X2xkaXNjX2xvY2ssIGZsYWdzKTsKIAogCS8qCkBAIC05MjMsNyArOTEyLDcgQEAKIAlyZXR1cm4gY21kID09IFRJT0NTUEdSUCA/IC1FTk9UVFkgOiAtRUlPOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dHlfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR0eV9mb3BzID0gewogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IHR0eV9yZWFkLAogCS53cml0ZQkJPSB0dHlfd3JpdGUsCkBAIC05MzUsNyArOTI0LDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVMKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB0bXhfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB0bXhfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSB0dHlfcmVhZCwKIAkud3JpdGUJCT0gdHR5X3dyaXRlLApAQCAtOTQ3LDcgKzkzNiw3IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbnNvbGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbnNvbGVfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSB0dHlfcmVhZCwKIAkud3JpdGUJCT0gcmVkaXJlY3RlZF90dHlfd3JpdGUsCkBAIC05NTgsNyArOTQ3LDcgQEAKIAkuZmFzeW5jCQk9IHR0eV9mYXN5bmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodW5nX3VwX3R0eV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVuZ191cF90dHlfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSBodW5nX3VwX3R0eV9yZWFkLAogCS53cml0ZQkJPSBodW5nX3VwX3R0eV93cml0ZSwKQEAgLTE5NTUsNyArMTk0NCw2IEBACiAJICogcmFjZSB3aXRoIHRoZSBzZXRfbGRpc2MgY29kZSBwYXRoLgogCSAqLwogCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKLQljbGVhcl9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOwogCiAJLyoKQEAgLTIzNDgsNyArMjMzNiw3IEBACiAKIHN0YXRpYyBpbnQgdGlvY3NjdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBhcmcpCiB7Ci0JdGFza190ICpwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCWlmIChjdXJyZW50LT5zaWduYWwtPmxlYWRlciAmJgogCSAgICAoY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uID09IHR0eS0+c2Vzc2lvbikpCkBAIC0yNzc1LDggKzI3NjMsNyBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgcHJpdmF0ZV87CiAJdW5zaWduZWQgbG9uZyAJZmxhZ3M7CiAJc3RydWN0IHR0eV9sZGlzYyAqZGlzYzsKLQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGJ1ZjsKLQlpbnQgY291bnQ7CisJc3RydWN0IHR0eV9idWZmZXIgKnRidWYsICpoZWFkOwogCWNoYXIgKmNoYXJfYnVmOwogCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOwogCkBAIC0yNzg0LDMyICsyNzcxLDM3IEBACiAJaWYgKGRpc2MgPT0gTlVMTCkJLyogICFUVFlfTERJU0MgKi8KIAkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KFRUWV9ET05UX0ZMSVAsICZ0dHktPmZsYWdzKSkgewotCQkvKgotCQkgKiBEbyBpdCBhZnRlciB0aGUgbmV4dCB0aW1lciB0aWNrOgotCQkgKi8KLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrLCAxKTsKLQkJZ290byBvdXQ7Ci0JfQogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUoKHRidWYgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7Ci0JCXdoaWxlICgoY291bnQgPSB0YnVmLT5jb21taXQgLSB0YnVmLT5yZWFkKSAhPSAwKSB7Ci0JCQljaGFyX2J1ZiA9IHRidWYtPmNoYXJfYnVmX3B0ciArIHRidWYtPnJlYWQ7Ci0JCQlmbGFnX2J1ZiA9IHRidWYtPmZsYWdfYnVmX3B0ciArIHRidWYtPnJlYWQ7Ci0JCQl0YnVmLT5yZWFkICs9IGNvdW50OworCWhlYWQgPSB0dHktPmJ1Zi5oZWFkOworCWlmIChoZWFkICE9IE5VTEwpIHsKKwkJdHR5LT5idWYuaGVhZCA9IE5VTEw7CisJCWZvciAoOzspIHsKKwkJCWludCBjb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7CisJCQlpZiAoIWNvdW50KSB7CisJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKKwkJCQkJYnJlYWs7CisJCQkJdGJ1ZiA9IGhlYWQ7CisJCQkJaGVhZCA9IGhlYWQtPm5leHQ7CisJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGJ1Zik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXR0eS0+cmVjZWl2ZV9yb29tKSB7CisJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrLCAxKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjb3VudCA+IHR0eS0+cmVjZWl2ZV9yb29tKQorCQkJCWNvdW50ID0gdHR5LT5yZWNlaXZlX3Jvb207CisJCQljaGFyX2J1ZiA9IGhlYWQtPmNoYXJfYnVmX3B0ciArIGhlYWQtPnJlYWQ7CisJCQlmbGFnX2J1ZiA9IGhlYWQtPmZsYWdfYnVmX3B0ciArIGhlYWQtPnJlYWQ7CisJCQloZWFkLT5yZWFkICs9IGNvdW50OwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCQkJZGlzYy0+cmVjZWl2ZV9idWYodHR5LCBjaGFyX2J1ZiwgZmxhZ19idWYsIGNvdW50KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAJCX0KLQkJaWYgKHRidWYtPmFjdGl2ZSkKLQkJCWJyZWFrOwotCQl0dHktPmJ1Zi5oZWFkID0gdGJ1Zi0+bmV4dDsKLQkJaWYgKHR0eS0+YnVmLmhlYWQgPT0gTlVMTCkKLQkJCXR0eS0+YnVmLnRhaWwgPSBOVUxMOwotCQl0dHlfYnVmZmVyX2ZyZWUodHR5LCB0YnVmKTsKKwkJdHR5LT5idWYuaGVhZCA9IGhlYWQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLW91dDoKKwogCXR0eV9sZGlzY19kZXJlZihkaXNjKTsKIH0KIApAQCAtMjkwMiwxMCArMjg5NCw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCWlmICh0dHktPmJ1Zi50YWlsICE9IE5VTEwpIHsKLQkJdHR5LT5idWYudGFpbC0+YWN0aXZlID0gMDsKKwlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKQogCQl0dHktPmJ1Zi50YWlsLT5jb21taXQgPSB0dHktPmJ1Zi50YWlsLT51c2VkOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAKIAlpZiAodHR5LT5sb3dfbGF0ZW5jeSkKQEAgLTI5NjMsOCArMjk1Myw4IEBACiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2xhc3MgZGV2aWNlIChvciBFUlJfUFRSKC1FRk9PKSBvbiBlcnJvcikuCiAgKgogICogVGhpcyBjYWxsIGlzIHJlcXVpcmVkIHRvIGJlIG1hZGUgdG8gcmVnaXN0ZXIgYW4gaW5kaXZpZHVhbCB0dHkgZGV2aWNlIGlmCi0gKiB0aGUgdHR5IGRyaXZlcidzIGZsYWdzIGhhdmUgdGhlIFRUWV9EUklWRVJfTk9fREVWRlMgYml0IHNldC4gIElmIHRoYXQKLSAqIGJpdCBpcyBub3Qgc2V0LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkLgorICogdGhlIHR0eSBkcml2ZXIncyBmbGFncyBoYXZlIHRoZSBUVFlfRFJJVkVSX0RZTkFNSUNfREVWIGJpdCBzZXQuICBJZiB0aGF0CisgKiBiaXQgaXMgbm90IHNldCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBieSBhIHR0eSBkcml2ZXIuCiAgKi8KIHN0cnVjdCBjbGFzc19kZXZpY2UgKnR0eV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwKIAkJCQkJIHVuc2lnbmVkIGluZGV4LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCkBAIC0yOTc4LDkgKzI5NjgsNiBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlkZXZmc19ta19jZGV2KGRldiwgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJIiVzJWQiLCBkcml2ZXItPmRldmZzX25hbWUsIGluZGV4ICsgZHJpdmVyLT5uYW1lX2Jhc2UpOwotCiAJaWYgKGRyaXZlci0+dHlwZSA9PSBUVFlfRFJJVkVSX1RZUEVfUFRZKQogCQlwdHlfbGluZV9uYW1lKGRyaXZlciwgaW5kZXgsIG5hbWUpOwogCWVsc2UKQEAgLTI5OTksNyArMjk4Niw2IEBACiAgKi8KIHZvaWQgdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHVuc2lnbmVkIGluZGV4KQogewotCWRldmZzX3JlbW92ZSgiJXMlZCIsIGRyaXZlci0+ZGV2ZnNfbmFtZSwgaW5kZXggKyBkcml2ZXItPm5hbWVfYmFzZSk7CiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kodHR5X2NsYXNzLCBNS0RFVihkcml2ZXItPm1ham9yLCBkcml2ZXItPm1pbm9yX3N0YXJ0KSArIGluZGV4KTsKIH0KIApAQCAtMzEyMSw3ICszMTA3LDcgQEAKIAkKIAlsaXN0X2FkZCgmZHJpdmVyLT50dHlfZHJpdmVycywgJnR0eV9kcml2ZXJzKTsKIAkKLQlpZiAoICEoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfTk9fREVWRlMpICkgeworCWlmICggIShkcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVikgKSB7CiAJCWZvcihpID0gMDsgaSA8IGRyaXZlci0+bnVtOyBpKyspCiAJCSAgICB0dHlfcmVnaXN0ZXJfZGV2aWNlKGRyaXZlciwgaSwgTlVMTCk7CiAJfQpAQCAtMzE2NCw3ICszMTUwLDcgQEAKIAkJCWRyaXZlci0+dGVybWlvc19sb2NrZWRbaV0gPSBOVUxMOwogCQkJa2ZyZWUodHApOwogCQl9Ci0JCWlmICghKGRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX05PX0RFVkZTKSkKKwkJaWYgKCEoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfRFlOQU1JQ19ERVYpKQogCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRyaXZlciwgaSk7CiAJfQogCXAgPSBkcml2ZXItPnR0eXM7CkBAIC0zMjQwLDE0ICszMjI2LDEyIEBACiAJaWYgKGNkZXZfYWRkKCZ0dHlfY2RldiwgTUtERVYoVFRZQVVYX01BSk9SLCAwKSwgMSkgfHwKIAkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlBVVhfTUFKT1IsIDApLCAxLCAiL2Rldi90dHkiKSA8IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciAvZGV2L3R0eSBkcml2ZXJcbiIpOwotCWRldmZzX21rX2NkZXYoTUtERVYoVFRZQVVYX01BSk9SLCAwKSwgU19JRkNIUnxTX0lSVUdPfFNfSVdVR08sICJ0dHkiKTsKIAljbGFzc19kZXZpY2VfY3JlYXRlKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZQVVYX01BSk9SLCAwKSwgTlVMTCwgInR0eSIpOwogCiAJY2Rldl9pbml0KCZjb25zb2xlX2NkZXYsICZjb25zb2xlX2ZvcHMpOwogCWlmIChjZGV2X2FkZCgmY29uc29sZV9jZGV2LCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCAxKSB8fAogCSAgICByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFRUWUFVWF9NQUpPUiwgMSksIDEsICIvZGV2L2NvbnNvbGUiKSA8IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciAvZGV2L2NvbnNvbGUgZHJpdmVyXG4iKTsKLQlkZXZmc19ta19jZGV2KE1LREVWKFRUWUFVWF9NQUpPUiwgMSksIFNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLCAiY29uc29sZSIpOwogCWNsYXNzX2RldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCBOVUxMLCAiY29uc29sZSIpOwogCiAjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCkBAIC0zMjU1LDcgKzMyMzksNiBAQAogCWlmIChjZGV2X2FkZCgmcHRteF9jZGV2LCBNS0RFVihUVFlBVVhfTUFKT1IsIDIpLCAxKSB8fAogCSAgICByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFRUWUFVWF9NQUpPUiwgMiksIDEsICIvZGV2L3B0bXgiKSA8IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciAvZGV2L3B0bXggZHJpdmVyXG4iKTsKLQlkZXZmc19ta19jZGV2KE1LREVWKFRUWUFVWF9NQUpPUiwgMiksIFNfSUZDSFJ8U19JUlVHT3xTX0lXVUdPLCAicHRteCIpOwogCWNsYXNzX2RldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDIpLCBOVUxMLCAicHRteCIpOwogI2VuZGlmCiAKQEAgLTMyNjQsNyArMzI0Nyw2IEBACiAJaWYgKGNkZXZfYWRkKCZ2YzBfY2RldiwgTUtERVYoVFRZX01BSk9SLCAwKSwgMSkgfHwKIAkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlfTUFKT1IsIDApLCAxLCAiL2Rldi92Yy8wIikgPCAwKQogCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi90dHkwIGRyaXZlclxuIik7Ci0JZGV2ZnNfbWtfY2RldihNS0RFVihUVFlfTUFKT1IsIDApLCBTX0lGQ0hSfFNfSVJVU1J8U19JV1VTUiwgInZjLzAiKTsKIAljbGFzc19kZXZpY2VfY3JlYXRlKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZX01BSk9SLCAwKSwgTlVMTCwgInR0eTAiKTsKIAogCXZ0eV9pbml0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggM2MxZGFmYS4uYTkyNDdiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtMjEsMTIgKzIxLDEwIEBACiAgKgkgLSBtYWtpbmcgaXQgc2hvcnRlciAtIHNjcl9yZWFkdyBhcmUgbWFjcm9zIHdoaWNoIGV4cGFuZCBpbiBQUkVUVFkgbG9uZyBjb2RlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC00NjcsNyArNDY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmNzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2Y3NfZm9wcyA9IHsKIAkubGxzZWVrCQk9IHZjc19sc2VlaywKIAkucmVhZAkJPSB2Y3NfcmVhZCwKIAkud3JpdGUJCT0gdmNzX3dyaXRlLApAQCAtNDc4LDEyICs0NzYsNiBAQAogCiB2b2lkIHZjc19tYWtlX2RldmZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JZGV2ZnNfbWtfY2RldihNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwKLQkJCVNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLAotCQkJInZjYy8ldSIsIHR0eS0+aW5kZXggKyAxKTsKLQlkZXZmc19ta19jZGV2KE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksCi0JCQlTX0lGQ0hSfFNfSVJVU1J8U19JV1VTUiwKLQkJCSJ2Y2MvYSV1IiwgdHR5LT5pbmRleCArIDEpOwogCWNsYXNzX2RldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEpLAogCQkJTlVMTCwgInZjcyV1IiwgdHR5LT5pbmRleCArIDEpOwogCWNsYXNzX2RldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksCkBAIC00OTEsOCArNDgzLDYgQEAKIH0KIHZvaWQgdmNzX3JlbW92ZV9kZXZmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCWRldmZzX3JlbW92ZSgidmNjLyV1IiwgdHR5LT5pbmRleCArIDEpOwotCWRldmZzX3JlbW92ZSgidmNjL2EldSIsIHR0eS0+aW5kZXggKyAxKTsKIAljbGFzc19kZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSkpOwogCWNsYXNzX2RldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpKTsKIH0KQEAgLTUwMyw4ICs0OTMsNiBAQAogCQlwYW5pYygidW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgdmNzIGRldmljZSIsIFZDU19NQUpPUik7CiAJdmNfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ2YyIpOwogCi0JZGV2ZnNfbWtfY2RldihNS0RFVihWQ1NfTUFKT1IsIDApLCBTX0lGQ0hSfFNfSVJVU1J8U19JV1VTUiwgInZjYy8wIik7Ci0JZGV2ZnNfbWtfY2RldihNS0RFVihWQ1NfTUFKT1IsIDEyOCksIFNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLCAidmNjL2EwIik7CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAwKSwgTlVMTCwgInZjcyIpOwogCWNsYXNzX2RldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgMTI4KSwgTlVMTCwgInZjc2EiKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aW9jb25zLmMgYi9kcml2ZXJzL2NoYXIvdmlvY29ucy5jCmluZGV4IDRlNTM2MDMuLjc2NmY3ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aW9jb25zLmMKKysrIGIvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwpAQCAtMjUsNyArMjUsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTExNTIsNyArMTE1MSw2IEBACiAJdmlvdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoVlRUWV9QT1JUUyk7CiAJdmlvdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl2aW90dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJ2aW9jb25zb2xlIjsKLQl2aW90dHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInZjcy8iOwogCXZpb3R0eV9kcml2ZXItPm5hbWUgPSAidHR5IjsKIAl2aW90dHlfZHJpdmVyLT5uYW1lX2Jhc2UgPSAxOwogCXZpb3R0eV9kcml2ZXItPm1ham9yID0gVFRZX01BSk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggMTFjN2U5ZC4uYjcyYjIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC0zMSw3ICszMSw2IEBACiAgKiB0aGUgT1MvNDAwIHBhcnRpdGlvbi4gIFRoZSBmb3JtYXQgb2YgdGhlIG1lc3NhZ2VzIGlzIGRlZmluZWQgaW4KICAqIGlzZXJpZXMvdmlvLmgKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00Myw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC0yNDYsNyArMjQ0LDYgQEAKICAqLwogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgY2hhcgljdXJfcGFydDsKLQlpbnQJCWRldl9oYW5kbGU7CiAJdW5zaWduZWQgY2hhcglwYXJ0X3N0YXRfcndpW01BWF9QQVJUSVRJT05TXTsKIH0gc3RhdGVbVklPVEFQRV9NQVhfVEFQRV07CiAKQEAgLTI5NSw3ICsyOTIsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3Zpb3RhcGVfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdmlvdGFwZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192aW90YXBlX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gcHJvY192aW90YXBlX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCkBAIC05NTksMTIgKzk1Niw3IEBACiAJCQkiaXNlcmllcyF2dCVkIiwgaSk7CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBOVUxMLCBNS0RFVihWSU9UQVBFX01BSk9SLCBpIHwgMHg4MCksCiAJCQlOVUxMLCAiaXNlcmllcyFudnQlZCIsIGkpOwotCWRldmZzX21rX2NkZXYoTUtERVYoVklPVEFQRV9NQUpPUiwgaSksIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCSJpc2VyaWVzL3Z0JWQiLCBpKTsKLQlkZXZmc19ta19jZGV2KE1LREVWKFZJT1RBUEVfTUFKT1IsIGkgfCAweDgwKSwKLQkJCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiwgImlzZXJpZXMvbnZ0JWQiLCBpKTsKIAlzcHJpbnRmKHRhcGVuYW1lLCAiaXNlcmllcy92dCVkIiwgaSk7Ci0Jc3RhdGVbaV0uZGV2X2hhbmRsZSA9IGRldmZzX3JlZ2lzdGVyX3RhcGUodGFwZW5hbWUpOwogCXByaW50ayhWSU9UQVBFX0tFUk5fSU5GTyAidGFwZSAlcyBpcyBpU2VyaWVzICIKIAkJCSJyZXNvdXJjZSAlMTAuMTBzIHR5cGUgJTQuNHMsIG1vZGVsICUzLjNzXG4iLAogCQkJdGFwZW5hbWUsIHZpb3RhcGVfdW5pdGluZm9baV0ucnNyY25hbWUsCkBAIC05NzYsOSArOTY4LDYgQEAKIHsKIAlpbnQgaSA9IHZkZXYtPnVuaXRfYWRkcmVzczsKIAotCWRldmZzX3JlbW92ZSgiaXNlcmllcy9udnQlZCIsIGkpOwotCWRldmZzX3JlbW92ZSgiaXNlcmllcy92dCVkIiwgaSk7Ci0JZGV2ZnNfdW5yZWdpc3Rlcl90YXBlKHN0YXRlW2ldLmRldl9oYW5kbGUpOwogCWNsYXNzX2RldmljZV9kZXN0cm95KHRhcGVfY2xhc3MsIE1LREVWKFZJT1RBUEVfTUFKT1IsIGkgfCAweDgwKSk7CiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kodGFwZV9jbGFzcywgTUtERVYoVklPVEFQRV9NQUpPUiwgaSkpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYyBiL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKaW5kZXggZmQwMDgyMi4uYmZlNWVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYworKysgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTQ3LDcgKzE0Niw2IEBACiAJc2NjX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzY2NfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJzY2MiOwogCXNjY19kcml2ZXItPm5hbWUgPSAidHR5UyI7Ci0Jc2NjX2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ0dHMvIjsKIAlzY2NfZHJpdmVyLT5tYWpvciA9IFRUWV9NQUpPUjsKIAlzY2NfZHJpdmVyLT5taW5vcl9zdGFydCA9IFNDQ19NSU5PUl9CQVNFOwogCXNjY19kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwpAQCAtMjA1LDEzICsyMDMsMTMgQEAKIAlwb3J0LT5kYXRhcCA9IHBvcnQtPmN0cmxwICsgMTsKIAlwb3J0LT5wb3J0X2EgPSAmc2NjX3BvcnRzWzBdOwogCXBvcnQtPnBvcnRfYiA9ICZzY2NfcG9ydHNbMV07Ci0JcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQV9UWCwgc2NjX3R4X2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKE1WTUUxNDdfSVJRX1NDQ0FfVFgsIHNjY190eF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQSBUWCIsIHBvcnQpOwotCXJlcXVlc3RfaXJxKE1WTUUxNDdfSVJRX1NDQ0FfU1RBVCwgc2NjX3N0YXRfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQV9TVEFULCBzY2Nfc3RhdF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQSBzdGF0dXMiLCBwb3J0KTsKLQlyZXF1ZXN0X2lycShNVk1FMTQ3X0lSUV9TQ0NBX1JYLCBzY2NfcnhfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQV9SWCwgc2NjX3J4X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1BIFJYIiwgcG9ydCk7Ci0JcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQV9TUENPTkQsIHNjY19zcGNvbmRfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQV9TUENPTkQsIHNjY19zcGNvbmRfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUEgc3BlY2lhbCBjb25kIiwgcG9ydCk7CiAJewogCQlTQ0NfQUNDRVNTX0lOSVQocG9ydCk7CkBAIC0yMzIsMTMgKzIzMCwxMyBAQAogCXBvcnQtPmRhdGFwID0gcG9ydC0+Y3RybHAgKyAxOwogCXBvcnQtPnBvcnRfYSA9ICZzY2NfcG9ydHNbMF07CiAJcG9ydC0+cG9ydF9iID0gJnNjY19wb3J0c1sxXTsKLQlyZXF1ZXN0X2lycShNVk1FMTQ3X0lSUV9TQ0NCX1RYLCBzY2NfdHhfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQl9UWCwgc2NjX3R4X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1CIFRYIiwgcG9ydCk7Ci0JcmVxdWVzdF9pcnEoTVZNRTE0N19JUlFfU0NDQl9TVEFULCBzY2Nfc3RhdF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShNVk1FMTQ3X0lSUV9TQ0NCX1NUQVQsIHNjY19zdGF0X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1CIHN0YXR1cyIsIHBvcnQpOwotCXJlcXVlc3RfaXJxKE1WTUUxNDdfSVJRX1NDQ0JfUlgsIHNjY19yeF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShNVk1FMTQ3X0lSUV9TQ0NCX1JYLCBzY2NfcnhfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUIgUlgiLCBwb3J0KTsKLQlyZXF1ZXN0X2lycShNVk1FMTQ3X0lSUV9TQ0NCX1NQQ09ORCwgc2NjX3NwY29uZF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShNVk1FMTQ3X0lSUV9TQ0NCX1NQQ09ORCwgc2NjX3NwY29uZF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQiBzcGVjaWFsIGNvbmQiLCBwb3J0KTsKIAl7CiAJCVNDQ19BQ0NFU1NfSU5JVChwb3J0KTsKQEAgLTI3NSwxMyArMjczLDEzIEBACiAJcG9ydC0+ZGF0YXAgPSBwb3J0LT5jdHJscCArIDI7CiAJcG9ydC0+cG9ydF9hID0gJnNjY19wb3J0c1swXTsKIAlwb3J0LT5wb3J0X2IgPSAmc2NjX3BvcnRzWzFdOwotCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0FfVFgsIHNjY190eF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShNVk1FMTYyX0lSUV9TQ0NBX1RYLCBzY2NfdHhfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUEgVFgiLCBwb3J0KTsKLQlyZXF1ZXN0X2lycShNVk1FMTYyX0lSUV9TQ0NBX1NUQVQsIHNjY19zdGF0X2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0FfU1RBVCwgc2NjX3N0YXRfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUEgc3RhdHVzIiwgcG9ydCk7Ci0JcmVxdWVzdF9pcnEoTVZNRTE2Ml9JUlFfU0NDQV9SWCwgc2NjX3J4X2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0FfUlgsIHNjY19yeF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQSBSWCIsIHBvcnQpOwotCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0FfU1BDT05ELCBzY2Nfc3Bjb25kX2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0FfU1BDT05ELCBzY2Nfc3Bjb25kX2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1BIHNwZWNpYWwgY29uZCIsIHBvcnQpOwogCXsKIAkJU0NDX0FDQ0VTU19JTklUKHBvcnQpOwpAQCAtMzAyLDEzICszMDAsMTMgQEAKIAlwb3J0LT5kYXRhcCA9IHBvcnQtPmN0cmxwICsgMjsKIAlwb3J0LT5wb3J0X2EgPSAmc2NjX3BvcnRzWzBdOwogCXBvcnQtPnBvcnRfYiA9ICZzY2NfcG9ydHNbMV07Ci0JcmVxdWVzdF9pcnEoTVZNRTE2Ml9JUlFfU0NDQl9UWCwgc2NjX3R4X2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0JfVFgsIHNjY190eF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQiBUWCIsIHBvcnQpOwotCXJlcXVlc3RfaXJxKE1WTUUxNjJfSVJRX1NDQ0JfU1RBVCwgc2NjX3N0YXRfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE2Ml9JUlFfU0NDQl9TVEFULCBzY2Nfc3RhdF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQiBzdGF0dXMiLCBwb3J0KTsKLQlyZXF1ZXN0X2lycShNVk1FMTYyX0lSUV9TQ0NCX1JYLCBzY2NfcnhfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE2Ml9JUlFfU0NDQl9SWCwgc2NjX3J4X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1CIFJYIiwgcG9ydCk7Ci0JcmVxdWVzdF9pcnEoTVZNRTE2Ml9JUlFfU0NDQl9TUENPTkQsIHNjY19zcGNvbmRfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoTVZNRTE2Ml9JUlFfU0NDQl9TUENPTkQsIHNjY19zcGNvbmRfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUIgc3BlY2lhbCBjb25kIiwgcG9ydCk7CiAKIAl7CkBAIC0zNDMsMTMgKzM0MSwxMyBAQAogCXBvcnQtPmRhdGFwID0gcG9ydC0+Y3RybHAgKyA0OwogCXBvcnQtPnBvcnRfYSA9ICZzY2NfcG9ydHNbMF07CiAJcG9ydC0+cG9ydF9iID0gJnNjY19wb3J0c1sxXTsKLQlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NBX1RYLCBzY2NfdHhfaW50LCBTQV9JTlRFUlJVUFQsCisJcmVxdWVzdF9pcnEoQlZNRV9JUlFfU0NDQV9UWCwgc2NjX3R4X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1BIFRYIiwgcG9ydCk7Ci0JcmVxdWVzdF9pcnEoQlZNRV9JUlFfU0NDQV9TVEFULCBzY2Nfc3RhdF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NBX1NUQVQsIHNjY19zdGF0X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1BIHN0YXR1cyIsIHBvcnQpOwotCXJlcXVlc3RfaXJxKEJWTUVfSVJRX1NDQ0FfUlgsIHNjY19yeF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NBX1JYLCBzY2NfcnhfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUEgUlgiLCBwb3J0KTsKLQlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NBX1NQQ09ORCwgc2NjX3NwY29uZF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NBX1NQQ09ORCwgc2NjX3NwY29uZF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQSBzcGVjaWFsIGNvbmQiLCBwb3J0KTsKIAl7CiAJCVNDQ19BQ0NFU1NfSU5JVChwb3J0KTsKQEAgLTM3MCwxMyArMzY4LDEzIEBACiAJcG9ydC0+ZGF0YXAgPSBwb3J0LT5jdHJscCArIDQ7CiAJcG9ydC0+cG9ydF9hID0gJnNjY19wb3J0c1swXTsKIAlwb3J0LT5wb3J0X2IgPSAmc2NjX3BvcnRzWzFdOwotCXJlcXVlc3RfaXJxKEJWTUVfSVJRX1NDQ0JfVFgsIHNjY190eF9pbnQsIFNBX0lOVEVSUlVQVCwKKwlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NCX1RYLCBzY2NfdHhfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUIgVFgiLCBwb3J0KTsKLQlyZXF1ZXN0X2lycShCVk1FX0lSUV9TQ0NCX1NUQVQsIHNjY19zdGF0X2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKEJWTUVfSVJRX1NDQ0JfU1RBVCwgc2NjX3N0YXRfaW50LCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgICAgICAiU0NDLUIgc3RhdHVzIiwgcG9ydCk7Ci0JcmVxdWVzdF9pcnEoQlZNRV9JUlFfU0NDQl9SWCwgc2NjX3J4X2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKEJWTUVfSVJRX1NDQ0JfUlgsIHNjY19yeF9pbnQsIElSUUZfRElTQUJMRUQsCiAJCSAgICAgICAgICAgICJTQ0MtQiBSWCIsIHBvcnQpOwotCXJlcXVlc3RfaXJxKEJWTUVfSVJRX1NDQ0JfU1BDT05ELCBzY2Nfc3Bjb25kX2ludCwgU0FfSU5URVJSVVBULAorCXJlcXVlc3RfaXJxKEJWTUVfSVJRX1NDQ0JfU1BDT05ELCBzY2Nfc3Bjb25kX2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgIlNDQy1CIHNwZWNpYWwgY29uZCIsIHBvcnQpOwogCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKaW5kZXggMDVlNmU4MS4uMWI5YjFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYworKysgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCkBAIC02MDUsNyArNjA1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBncGlvX3JlYWQsCiAJLndyaXRlCQk9IGdwaW9fd3JpdGUsCkBAIC02ODksOSArNjg5LDkgQEAKIAogCWZvciAoaSA9IEdJVV9JUlFfQkFTRTsgaSA8PSBHSVVfSVJRX0xBU1Q7IGkrKykgewogCQlpZiAoaSA8IEdJVV9JUlEoR0lVSU5UX0hJR0hfT0ZGU0VUKSkKLQkJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZ2l1aW50X2xvd19pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmZ2l1aW50X2xvd19pcnFfdHlwZTsKIAkJZWxzZQotCQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZnaXVpbnRfaGlnaF9pcnFfdHlwZTsKKwkJCWlycV9kZXNjW2ldLmNoaXAgPSAmZ2l1aW50X2hpZ2hfaXJxX3R5cGU7CiAJfQogCiAJcmV0dXJuIGNhc2NhZGVfaXJxKEdJVUlOVF9JUlEsIGdpdV9nZXRfaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggNzE0ZDk1Zi4uZGE3ZTY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGVjdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Rpb2NsLmg+CkBAIC04Nyw3ICs4Niw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CkBAIC04ODgsNiArODg2LDcgQEAKIAlpZiAodmNfY29uc19hbGxvY2F0ZWQoY3VycmNvbnMpKSB7CiAJCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbY3VycmNvbnNdLmQ7CiAJCXZjLT52Y19zdy0+Y29uX2RlaW5pdCh2Yyk7CisJCW1vZHVsZV9wdXQodmMtPnZjX3N3LT5vd25lcik7CiAJCWlmICh2Yy0+dmNfa21hbGxvY2VkKQogCQkJa2ZyZWUodmMtPnZjX3NjcmVlbmJ1Zik7CiAJCWlmIChjdXJyY29ucyA+PSBNSU5fTlJfQ09OU09MRVMpCkBAIC0yNjYzLDcgKzI2NjIsNiBAQAogCWlmICghY29uc29sZV9kcml2ZXIpCiAJCXBhbmljKCJDb3VsZG4ndCBhbGxvY2F0ZSBjb25zb2xlIGRyaXZlclxuIik7CiAJY29uc29sZV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29uc29sZV9kcml2ZXItPmRldmZzX25hbWUgPSAidmMvIjsKIAljb25zb2xlX2RyaXZlci0+bmFtZSA9ICJ0dHkiOwogCWNvbnNvbGVfZHJpdmVyLT5uYW1lX2Jhc2UgPSAxOwogCWNvbnNvbGVfZHJpdmVyLT5tYWpvciA9IFRUWV9NQUpPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggMjQwMTFlNy4uZWNjZmZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqICBDaGVjayBwdXQvZ2V0X3VzZXIsIGNsZWFudXBzIC0gYWNtZUBjb25lY3RpdmEuY29tLmJyIC0gSnVuIDIwMDEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYwppbmRleCA3Mjg5ZjRhLi5jNzdmZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hY3F1aXJld2R0LmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gYWNxX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCmluZGV4IDE5NGEzZmQuLjgwNjliZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZHZ3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkdndkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gYWR2d2R0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCmluZGV4IDgzMzhjYTMuLmM1Yzk0ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hbGltMTUzNV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKQEAgLTM2Miw3ICszNjIsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhbGlfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFsaV9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5sbHNlZWsgPQlub19sbHNlZWssCiAJLndyaXRlID0JYWxpX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCmluZGV4IGMwNWFjMTguLmZmZDc2ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hbGltNzEwMV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfZm9wcyA9IHsKIAkub3duZXI9CQlUSElTX01PRFVMRSwKIAkubGxzZWVrPQlub19sbHNlZWssCiAJLndyaXRlPQkJZm9wX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYwppbmRleCBhYzgzYmM0Li5jYzI2NjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MV93ZHQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xNywxNCArMTYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIAotI2RlZmluZSBXRFRfREVGQVVMVF9USU1FCTUJLyogNSBzZWNvbmRzICovCi0jZGVmaW5lIFdEVF9NQVhfVElNRQkJMjU2CS8qIDI1NiBzZWNvbmRzICovCisjZGVmaW5lIFdEVF9ERUZBVUxUX1RJTUUJNQkvKiBzZWNvbmRzICovCisjZGVmaW5lIFdEVF9NQVhfVElNRQkJMjU2CS8qIHNlY29uZHMgKi8KIAogc3RhdGljIGludCB3ZHRfdGltZSA9IFdEVF9ERUZBVUxUX1RJTUU7CiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CkBAIC0zMiw4ICszMiwxMCBAQAogbW9kdWxlX3BhcmFtKHdkdF90aW1lLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh3ZHRfdGltZSwgIldhdGNoZG9nIHRpbWUgaW4gc2Vjb25kcy4gKGRlZmF1bHQ9Il9fTU9EVUxFX1NUUklORyhXRFRfREVGQVVMVF9USU1FKSAiKSIpOwogCisjaWZkZWYgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworI2VuZGlmCiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXQ5MXdkdF9idXN5OwpAQCAtMTM4LDcgKzE0MCw3IEBACiAJCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKIAkJCWlmIChnZXRfdXNlcihuZXdfdmFsdWUsIHApKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCQorCiAJCQlpZiAoYXQ5MV93ZHRfc2V0dGltZW91dChuZXdfdmFsdWUpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xODEsNyArMTgzLDcgQEAKIAogLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdDkxd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdDkxd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5pb2N0bAkJPSBhdDkxX3dkdF9pb2N0bCwKQEAgLTE5NiwyNyArMTk4LDg0IEBACiAJLmZvcHMJCT0gJmF0OTF3ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGF0OTFfd2R0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF0OTF3ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmVzOwogCi0JLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiByYW5nZTsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCi0JaWYgKGF0OTFfd2R0X3NldHRpbWVvdXQod2R0X3RpbWUpKSB7Ci0JCWF0OTFfd2R0X3NldHRpbWVvdXQoV0RUX0RFRkFVTFRfVElNRSk7Ci0JCXByaW50ayhLRVJOX0lORk8gImF0OTFfd2R0OiB3ZHRfdGltZSB2YWx1ZSBtdXN0IGJlIDEgPD0gd2R0X3RpbWUgPD0gMjU2LCB1c2luZyAlZFxuIiwgd2R0X3RpbWUpOwotCX0KKwlpZiAoYXQ5MXdkdF9taXNjZGV2LmRldikKKwkJcmV0dXJuIC1FQlVTWTsKKwlhdDkxd2R0X21pc2NkZXYuZGV2ID0gJnBkZXYtPmRldjsKIAogCXJlcyA9IG1pc2NfcmVnaXN0ZXIoJmF0OTF3ZHRfbWlzY2Rldik7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXByaW50aygiQVQ5MSBXYXRjaGRvZyBUaW1lciBlbmFibGVkICglZCBzZWNvbmRzLCBub3dheW91dD0lZClcbiIsIHdkdF90aW1lLCBub3dheW91dCk7CisJcHJpbnRrKCJBVDkxIFdhdGNoZG9nIFRpbWVyIGVuYWJsZWQgKCVkIHNlY29uZHMlcylcbiIsIHdkdF90aW1lLCBub3dheW91dCA/ICIsIG5vd2F5b3V0IiA6ICIiKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2V4aXQgYXQ5MXdkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmVzOworCisJcmVzID0gbWlzY19kZXJlZ2lzdGVyKCZhdDkxd2R0X21pc2NkZXYpOworCWlmICghcmVzKQorCQlhdDkxd2R0X21pc2NkZXYuZGV2ID0gTlVMTDsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTF3ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlhdDkxX3dkdF9zdG9wKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhdDkxd2R0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJYXQ5MV93ZHRfc3RvcCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0OTF3ZHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKGF0OTF3ZHRfYnVzeSkKKwkJYXQ5MV93ZHRfc3RhcnQoKTsKKwkJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGF0OTF3ZHRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGF0OTF3ZHRfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gYXQ5MXdkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGF0OTF3ZHRfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBhdDkxd2R0X3NodXRkb3duLAorCS5zdXNwZW5kCT0gYXQ5MXdkdF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXQ5MXdkdF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0OTFfd2R0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfd2R0X2luaXQodm9pZCkKK3sKKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIHJhbmdlOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwlpZiAoYXQ5MV93ZHRfc2V0dGltZW91dCh3ZHRfdGltZSkpIHsKKwkJYXQ5MV93ZHRfc2V0dGltZW91dChXRFRfREVGQVVMVF9USU1FKTsKKwkJcHJfaW5mbygiYXQ5MV93ZHQ6IHdkdF90aW1lIHZhbHVlIG11c3QgYmUgMSA8PSB3ZHRfdGltZSA8PSAyNTYsIHVzaW5nICVkXG4iLCB3ZHRfdGltZSk7CisJfQorCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXQ5MXdkdF9kcml2ZXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXQ5MV93ZHRfZXhpdCh2b2lkKQogewotCW1pc2NfZGVyZWdpc3RlcigmYXQ5MXdkdF9taXNjZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXQ5MXdkdF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhdDkxX3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ib29rZV93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ib29rZV93ZHQuYwppbmRleCBiNjY0MDYwLi5lM2NlZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYm9va2Vfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2Jvb2tlX3dkdC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KQEAgLTE0Niw3ICsxNDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBib29rZV93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJvb2tlX3dkdF9mb3BzID0gewogICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgLmxsc2VlayA9IG5vX2xsc2VlaywKICAgLndyaXRlID0gYm9va2Vfd2R0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2NwdTV3ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9jcHU1d2R0LmMKaW5kZXggM2U4NDEwYi4uMDRjN2U0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2NwdTV3ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvY3B1NXdkdC5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwdTV3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwdTV3ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLmlvY3RsCQk9IGNwdTV3ZHRfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2VwOTN4eF93ZHQuYwppbmRleCA5MDIxZGJiLi43N2M4YTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9lcDkzeHhfd2R0LmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDkzeHhfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDkzeHhfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS53cml0ZQkJPSBlcDkzeHhfd2R0X3dyaXRlLAogCS5pb2N0bAkJPSBlcDkzeHhfd2R0X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwppbmRleCAyNWMyZjI1Li42MmRiY2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpAQCAtNDAsNyArNDAsNiBAQAogICogCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTM1Nyw3ICszNTYsNyBAQAogICovCiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXVyd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldXJ3ZHRfZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCT0gbm9fbGxzZWVrLAogCS53cml0ZQk9IGV1cndkdF93cml0ZSwKQEAgLTQyMSw3ICs0MjAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGV1cndkdF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgImV1cndkdCIsIE5VTEwpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZXVyd2R0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImV1cndkdCIsIE5VTEwpOwogCWlmKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImV1cndkdDogSVJRICVkIGlzIG5vdCBmcmVlLlxuIiwgaXJxKTsKIAkJZ290byBvdXRtaXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k2MzAwZXNiLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTYzMDBlc2IuYwppbmRleCA5Mzc4NWYxLi44NzA1MzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTYzMDBlc2IuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTYzMDBlc2IuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAgKiAgICAgIEtlcm5lbCBJbnRlcmZhY2VzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXNiX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlc2JfZm9wcyA9IHsKICAgICAgICAgLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogICAgICAgICAubGxzZWVrID0gICAgICAgbm9fbGxzZWVrLAogICAgICAgICAud3JpdGUgPSAgICAgICAgZXNiX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYwppbmRleCBmYTJiYTllYi4uODM4NWRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmMKQEAgLTIwNSw2ICsyMDUsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0Y29fdGltZXJfZ2V0X3RpbWVsZWZ0IChpbnQgKnRpbWVfbGVmdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCXNwaW5fbG9jaygmdGNvX2xvY2spOworCisJLyogcmVhZCB0aGUgVENPIFRpbWVyICovCisJdmFsID0gaW5iIChUQ08xX1JMRCk7CisJdmFsICY9IDB4M2Y7CisKKwlzcGluX3VubG9jaygmdGNvX2xvY2spOworCisJKnRpbWVfbGVmdCA9IChpbnQpKCh2YWwgKiA2KSAvIDEwKTsKKworCXJldHVybiAwOworfQorCiAvKgogICoJL2Rldi93YXRjaGRvZyBoYW5kbGluZwogICovCkBAIC0yNzIsNiArMjg5LDcgQEAKIHsKIAlpbnQgbmV3X29wdGlvbnMsIHJldHZhbCA9IC1FSU5WQUw7CiAJaW50IG5ld19oZWFydGJlYXQ7CisJaW50IHRpbWVfbGVmdDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CkBAIC0zMjAsNyArMzM4LDcgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQkJaWYgKHRjb190aW1lcl9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQotCQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQl0Y29fdGltZXJfa2VlcGFsaXZlICgpOwogCQkJLyogRmFsbCAqLwpAQCAtMzI5LDYgKzM0NywxNCBAQAogCQljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCQlyZXR1cm4gcHV0X3VzZXIoaGVhcnRiZWF0LCBwKTsKIAorCQljYXNlIFdESU9DX0dFVFRJTUVMRUZUOgorCQl7CisJCQlpZiAodGNvX3RpbWVyX2dldF90aW1lbGVmdCgmdGltZV9sZWZ0KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJcmV0dXJuIHB1dF91c2VyKHRpbWVfbGVmdCwgcCk7CisJCX0KKwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CkBAIC0zNTIsNyArMzc4LDcgQEAKICAqCUtlcm5lbCBJbnRlcmZhY2VzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTh4eF90Y29fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk4eHhfdGNvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkud3JpdGUgPQlpOHh4X3Rjb193cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pYjcwMHdkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2liNzAwd2R0LmMKaW5kZXggY2Y2MDMyOS4uZmQ5NWY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2liNzAwd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2liNzAwd2R0LmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpAQCAtMjU2LDcgKzI1NSw3IEBACiAgKglLZXJuZWwgSW50ZXJmYWNlcwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlid2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpYndkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gaWJ3ZHRfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMKaW5kZXggMjk0YzQ3NC4uMjZjZWVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2libWFzci5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pYm1hc3IuYwpAQCAtMTAsNyArMTAsNiBAQAogICogb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzIzLDcgKzMyMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXNyX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2Vlawk9CW5vX2xsc2VlaywKIAkud3JpdGUgPQlhc3Jfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaW5keWRvZy5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2luZHlkb2cuYwppbmRleCBiNGI5NGRhLi5kYWNjMWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaW5keWRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pbmR5ZG9nLmMKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTU1LDcgKzE1NCw3IEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbmR5ZG9nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbmR5ZG9nX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBpbmR5ZG9nX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaXhwMjAwMF93ZHQuYwppbmRleCAwY2ZiOWI5Yy4uNjkyOTA4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTY5LDcgKzE2OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXhwMjAwMF93ZHRfZm9wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpeHAyMDAwX3dkdF9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDR4eF93ZHQuYwppbmRleCAzODAwODM1Li45ZGI1Y2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9peHA0eHhfd2R0LmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTYzLDcgKzE2Miw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXhwNHh4X3dkdF9mb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl4cDR4eF93ZHRfZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21hY2h6d2QuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tYWNoendkLmMKaW5kZXggYTlhMjBhYS4uMjM3MzRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21hY2h6d2QuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWFjaHp3ZC5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiAgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTM4OSw3ICszODgsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpmX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogCS53cml0ZSAgICAgICAgICA9IHpmX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21peGNvbXdkLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWl4Y29td2QuYwppbmRleCBkOGRlZGU1Li5hZTk0MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWl4Y29td2QuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWl4Y29td2QuYwpAQCAtMzcsNyArMzcsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTE5MSw3ICsxOTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXhjb213ZF9mb3BzPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWl4Y29td2RfZm9wcz0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjODN4eF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4M3h4X3dkdC5jCmluZGV4IDVkNmY1MDYuLmE0ODA5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4M3h4X3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4M3h4X3dkdC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEzMCw3ICsxMjksNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXBjODN4eF93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wYzgzeHhfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBtcGM4M3h4X3dkdF93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4eHhfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjOHh4X3dkdC5jCmluZGV4IGIyZmM3MWUuLjM1ZGQ5ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4eHhfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wYzh4eF93ZHQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTMzLDcgKzEzMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wYzh4eF93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wYzh4eF93ZHRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS53cml0ZSA9IG1wYzh4eF93ZHRfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCAyYzJjNTE3Li41NGIzYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KQEAgLTI5OCw3ICsyOTcsNyBAQAogLyoKICAqCUtlcm5lbCBJbnRlcmZhY2VzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wY29yZV93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wY29yZV93ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IG1wY29yZV93ZHRfd3JpdGUsCkBAIC0zNTYsNyArMzU1LDcgQEAKIAkJZ290byBlcnJfbWlzYzsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycSh3ZHQtPmlycSwgbXBjb3JlX3dkdF9maXJlLCBTQV9JTlRFUlJVUFQsICJtcGNvcmVfd2R0Iiwgd2R0KTsKKwlyZXQgPSByZXF1ZXN0X2lycSh3ZHQtPmlycSwgbXBjb3JlX3dkdF9maXJlLCBJUlFGX0RJU0FCTEVELCAibXBjb3JlX3dkdCIsIHdkdCk7CiAJaWYgKHJldCkgewogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBfZGV2LCAiY2Fubm90IHJlZ2lzdGVyIElSUSVkIGZvciB3YXRjaGRvZ1xuIiwgd2R0LT5pcnEpOwogCQlnb3RvIGVycl9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IGYxYjljZjguLjVjOGZhYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE2Nyw3ICsxNjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdjY0eDYwX3dkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXY2NHg2MF93ZHRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS53cml0ZSA9IG12NjR4NjBfd2R0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkLmMKaW5kZXggNmQ0NGNhNi4uY2Q3ZDFiNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiAgKglLZXJuZWwgSW50ZXJmYWNlcwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBjd2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBjd2RfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IHBjd2Rfd3JpdGUsCkBAIC03NTUsNyArNzU1LDcgQEAKIAkuZm9wcyA9CQkmcGN3ZF9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGN3ZF90ZW1wX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwY3dkX3RlbXBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLnJlYWQJCT0gcGN3ZF90ZW1wX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF9wY2kuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IDI0NTFlZGIuLmM3Y2ZkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKi8KIAogLyoKLSAqCUEgYmVsbHMgYW5kIHdoaXN0bGVzIGRyaXZlciBpcyBhdmFpbGFibGUgZnJvbTogCisgKglBIGJlbGxzIGFuZCB3aGlzdGxlcyBkcml2ZXIgaXMgYXZhaWxhYmxlIGZyb206CiAgKglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvd2ltL3Bjd2QvcGN3ZF9wY2kvCiAgKgogICoJTW9yZSBpbmZvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmJlcmtwcm9kLmNvbS8gb3IgaHR0cDovL3d3dy5wY3dhdGNoZG9nLmNvbS8KQEAgLTM5MCw2ICszOTAsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwY2lwY3dkX2dldF90aW1lbGVmdChpbnQgKnRpbWVfbGVmdCkKK3sKKwlpbnQgbXNiOworCWludCBsc2I7CisKKwkvKiBSZWFkIHRoZSB0aW1lIHRoYXQncyBsZWZ0IGJlZm9yZSByZWJvb3RpbmcgKi8KKwkvKiBOb3RlOiBpZiB0aGUgYm9hcmQgaXMgbm90IHlldCBhcm1lZCB0aGVuIHdlIHdpbGwgcmVhZCAweEZGRkYgKi8KKwlzZW5kX2NvbW1hbmQoQ01EX1JFQURfV0FUQ0hET0dfVElNRU9VVCwgJm1zYiwgJmxzYik7CisKKwkqdGltZV9sZWZ0ID0gKG1zYiA8PCA4KSArIGxzYjsKKworCWlmIChkZWJ1ZyA+PSBWRVJCT1NFKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlRpbWUgbGVmdCBiZWZvcmUgbmV4dCByZWJvb3Q6ICVkXG4iLAorCQkgICAgICAgKnRpbWVfbGVmdCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqCS9kZXYvd2F0Y2hkb2cgaGFuZGxpbmcKICAqLwpAQCAtNTEyLDYgKzUzMCwxNiBAQAogCQljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCQlyZXR1cm4gcHV0X3VzZXIoaGVhcnRiZWF0LCBwKTsKIAorCQljYXNlIFdESU9DX0dFVFRJTUVMRUZUOgorCQl7CisJCQlpbnQgdGltZV9sZWZ0OworCisJCQlpZiAocGNpcGN3ZF9nZXRfdGltZWxlZnQoJnRpbWVfbGVmdCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCXJldHVybiBwdXRfdXNlcih0aW1lX2xlZnQsIHApOworCQl9CisKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQpAQCAtNTk3LDcgKzYyNSw3IEBACiAgKglLZXJuZWwgSW50ZXJmYWNlcwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBjaXBjd2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBjaXBjd2RfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS53cml0ZSA9CXBjaXBjd2Rfd3JpdGUsCkBAIC02MTIsNyArNjQwLDcgQEAKIAkuZm9wcyA9CQkmcGNpcGN3ZF9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGNpcGN3ZF90ZW1wX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwY2lwY3dkX3RlbXBfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS5yZWFkID0JCXBjaXBjd2RfdGVtcF9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwppbmRleCAzZmRmZGE5My4uYjdhZTczZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqCWh0dHA6Ly93d3cuYmVya3Byb2QuY29tLyBvciBodHRwOi8vd3d3LnBjd2F0Y2hkb2cuY29tLwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTMxNyw2ICszMTYsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGltZWxlZnQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCBpbnQgKnRpbWVfbGVmdCkKK3sKKwl1bnNpZ25lZCBjaGFyIG1zYiwgbHNiOworCisJLyogUmVhZCB0aGUgdGltZSB0aGF0J3MgbGVmdCBiZWZvcmUgcmVib290aW5nICovCisJLyogTm90ZTogaWYgdGhlIGJvYXJkIGlzIG5vdCB5ZXQgYXJtZWQgdGhlbiB3ZSB3aWxsIHJlYWQgMHhGRkZGICovCisJdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfUkVBRF9XQVRDSERPR19USU1FT1VULCAmbXNiLCAmbHNiKTsKKworCSp0aW1lX2xlZnQgPSAobXNiIDw8IDgpICsgbHNiOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKgkvZGV2L3dhdGNoZG9nIGhhbmRsaW5nCiAgKi8KQEAgLTQyMiw2ICs0MzQsMTYgQEAKIAkJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgogCQkJcmV0dXJuIHB1dF91c2VyKGhlYXJ0YmVhdCwgcCk7CiAKKwkJY2FzZSBXRElPQ19HRVRUSU1FTEVGVDoKKwkJeworCQkJaW50IHRpbWVfbGVmdDsKKworCQkJaWYgKHVzYl9wY3dkX2dldF90aW1lbGVmdCh1c2JfcGN3ZF9kZXZpY2UsICZ0aW1lX2xlZnQpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlyZXR1cm4gcHV0X3VzZXIodGltZV9sZWZ0LCBwKTsKKwkJfQorCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KQEAgLTUwMSw3ICs1MjMsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfcGN3ZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3Bjd2RfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS53cml0ZSA9CXVzYl9wY3dkX3dyaXRlLApAQCAtNTE2LDcgKzUzOCw3IEBACiAJLmZvcHMgPQkJJnVzYl9wY3dkX2ZvcHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfcGN3ZF90ZW1wZXJhdHVyZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3Bjd2RfdGVtcGVyYXR1cmVfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS5yZWFkID0JCXVzYl9wY3dkX3RlbXBlcmF0dXJlX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCmluZGV4IDFlYTA0ZTkuLmJlOTc4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCkBAIC0zNyw3ICszNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CkBAIC0zMjAsNyArMzE5LDcgQEAKIAogLyoga2VybmVsIGludGVyZmFjZSAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzM2MyNDEwd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzM2MyNDEwd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBzM2MyNDEwd2R0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYTExMDBfd2R0LmMKaW5kZXggNTIyYTkzNy4uMWZjMTZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NhMTEwMF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKgogICogICAgICAyNy8xMS8yMDAwIEluaXRpYWwgcmVsZWFzZQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTM2LDcgKzEzNSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2ExMTAwZG9nX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2ExMTAwZG9nX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM2MHh4d2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCmluZGV4IGVkMGJkNTUuLjQ2NjNjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM2MHh4d2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiYzYweHh3ZHQuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gZm9wX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiYzgzNjAuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM4MzYwLmMKaW5kZXggYzZjYmY4MC4uMTAzNWJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiYzgzNjAuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjODM2MC5jCkBAIC0zNiw3ICszNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KQEAgLTMwNiw3ICszMDUsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzYmM4MzYwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzYmM4MzYwX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9IG5vX2xsc2VlaywKIAkud3JpdGUgPSBzYmM4MzYwX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiY19lcHhfYzMuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmNfZXB4X2MzLmMKaW5kZXggODM3YjFlYzMuLmJmYzQ3NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmNfZXB4X2MzLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiY19lcHhfYzMuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xNTUsNyArMTU0LDcgQEAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVweF9jM19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXB4X2MzX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBlcHhfYzNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKaW5kZXggMjBiODhmOS4uN2MzY2YyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjMTIwMHdkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzEyMDB3ZHQuYwpAQCAtMjcsNyArMjcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CkBAIC0yOTMsNyArMjkyLDcgQEAKIAkubm90aWZpZXJfY2FsbCA9CXNjMTIwMHdkdF9ub3RpZnlfc3lzLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2MxMjAwd2R0X2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2MxMjAwd2R0X2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzUyMF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzUyMF93ZHQuYwppbmRleCA0ZWU5OTc0Li4yYzdjOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjNTIwX3dkdC5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBmb3Bfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2N4MjAwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjeDIwMF93ZHQuYwppbmRleCBiNGExMDJhLi5jNTYxMjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2N4MjAwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zY3gyMDBfd2R0LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAgIG9mIGFueSBuYXR1cmUgcmVzdWx0aW5nIGR1ZSB0byB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuIFRoaXMKICAgIHNvZnR3YXJlIGlzIHByb3ZpZGVkIEFTLUlTIHdpdGggbm8gd2FycmFudGllcy4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTk1LDcgKzE5NCw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3gyMDBfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3gyMDBfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJID0gbm9fbGxzZWVrLAogCS53cml0ZSAgID0gc2N4MjAwX3dkdF93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zaHdkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Nod2R0LmMKaW5kZXggMWY0Y2FiNS4uMTM1NTAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Nod2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Nod2R0LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqICAgICBBZGRlZCBleHBlY3QgY2xvc2Ugc3VwcG9ydCwgbWFkZSBlbXVsYXRlZCB0aW1lb3V0IHJ1bnRpbWUgY2hhbmdlYWJsZQogICogICAgIGdlbmVyYWwgY2xlYW51cHMsIGFkZCBzb21lIGlvY3RscwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNDUsNyArMzQ0LDcgQEAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNoX3dkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2hfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBzaF93ZHRfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc29mdGRvZy5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NvZnRkb2cuYwppbmRleCBhOTFlZGFmLi5lZjhkYTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc29mdGRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zb2Z0ZG9nLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KQEAgLTI0NCw3ICsyNDMsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzb2Z0ZG9nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzb2Z0ZG9nX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSBzb2Z0ZG9nX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jCmluZGV4IGQxNWNhOWEuLjEzZjE2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2MjdoZl93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gd2R0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4Mzg3N2Zfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzODc3Zl93ZHQuYwppbmRleCA1MmE4YmQwLi5jY2Y2YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzODc3Zl93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzODc3Zl93ZHQuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gZm9wX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwppbmRleCBhN2ZmNjRjLi45OGY0ZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC00NTAsNyArNDQ5LDcgQEAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X2ZvcHM9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dhZmVyNTgyM3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dhZmVyNTgyM3dkdC5jCmluZGV4IDdjZjZjOWIuLjJiYjZhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93YWZlcjU4MjN3ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2FmZXI1ODIzd2R0LmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YWZ3ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdhZndkdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gd2Fmd2R0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkNTAxcC5oIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkNTAxcC5oCmluZGV4IDg0ZTYwZWIuLmE0NTA0ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZDUwMXAuaAorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2Q1MDFwLmgKQEAgLTE5LDcgKzE5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFdEVF9DT1VOVDAJCShpbyswKQogI2RlZmluZSBXRFRfQ09VTlQxCQkoaW8rMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHJ0YXMuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHJ0YXMuYwppbmRleCBkYWNmZTMxLi41YzM4Y2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2RydGFzLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkcnRhcy5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MjEsNyArNTIwLDcgQEAKIAogLyoqKiBpbml0aWFsaXphdGlvbiBzdHVmZiAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHJ0YXNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkcnRhc19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gd2RydGFzX3dyaXRlLApAQCAtNTM2LDcgKzUzNSw3IEBACiAJLmZvcHMgPQkJJndkcnRhc19mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2RydGFzX3RlbXBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkcnRhc190ZW1wX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IHdkcnRhc190ZW1wX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0LmMKaW5kZXggZWM3ZTQwMTIuLjcwYmU4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0LmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqCQlNYXR0IERvbXNjaAk6CUFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTQ5NSw3ICs0OTQsNyBAQAogICovCiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IHdkdF93cml0ZSwKQEAgLTUxMSw3ICs1MTAsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19XRFRfNTAxCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRfdGVtcF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X3RlbXBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLnJlYWQJCT0gd2R0X3RlbXBfcmVhZCwKQEAgLTU4MSw3ICs1ODAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHdkdF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgIndkdDUwMXAiLCBOVUxMKTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHdkdF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJ3ZHQ1MDFwIiwgTlVMTCk7CiAJaWYocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAid2R0OiBJUlEgJWQgaXMgbm90IGZyZWUuXG4iLCBpcnEpOwogCQlnb3RvIG91dHJlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHQyODUuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHQyODUuYwppbmRleCA1MjgyNWExLi42NTU1ZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0Mjg1LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdDI4NS5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2F0Y2hkb2dfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLndyaXRlCQk9IHdhdGNoZG9nX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdDk3Ny5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdDk3Ny5jCmluZGV4IDM4NDM5MDAuLmEwOTM1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHQ5NzcuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0OTc3LmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtNDE5LDcgKzQxOCw3IEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHQ5NzdfZm9wcz0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdDk3N19mb3BzPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jCmluZGV4IDRiMzMxMTkuLjU5MThjYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYwpAQCAtMzUsNyArMzUsNiBAQAogICoJCU1hdHQgRG9tc2NoCToJbm93YXlvdXQgbW9kdWxlIG9wdGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNTQ0LDcgKzU0Myw3IEBACiAgKi8KIAogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRwY2lfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdHBjaV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gd2R0cGNpX3dyaXRlLApAQCAtNTYwLDcgKzU1OSw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1dEVF81MDFfUENJCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3ZHRwY2lfdGVtcF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0cGNpX3RlbXBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLnJlYWQJCT0gd2R0cGNpX3RlbXBfcmVhZCwKQEAgLTYxOCw3ICs2MTcsNyBAQAogCQlnb3RvIG91dF9wY2k7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxIChpcnEsIHdkdHBjaV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycSAoaXJxLCB3ZHRwY2lfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkgIndkdF9wY2kiLCAmd2R0cGNpX21pc2NkZXYpKSB7CiAJCXByaW50ayAoS0VSTl9FUlIgUEZYICJJUlEgJWQgaXMgbm90IGZyZWVcbiIsIGlycSk7CiAJCWdvdG8gb3V0X3JlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDM1ZTBiOWMuLjFiYTQwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTUsNyArMTUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggMTQ1MDYxYi4uMjVlZWU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC05LDcgKzksNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwppbmRleCAwNzFlZTRmLi40NGFlNWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCmluZGV4IDU4MjkxNDMuLjE1Mjc4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC0xNjYsOCArMTY2LDggQEAKIH0KIAogLyoqCi0gKiBkbWFfY2xpZW50X2NoYW5fZnJlZSAtIHJlbGVhc2UgYSBETUEgY2hhbm5lbAotICogQGNoYW46ICZkbWFfY2hhbgorICogZG1hX2NoYW5fY2xlYW51cCAtIHJlbGVhc2UgYSBETUEgY2hhbm5lbCdzIHJlc291cmNlcworICogQGtyZWY6IGtlcm5lbCByZWZlcmVuY2Ugc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIERNQSBjaGFubmVsIGRldmljZQogICovCiB2b2lkIGRtYV9jaGFuX2NsZWFudXAoc3RydWN0IGtyZWYgKmtyZWYpCiB7CkBAIC0xOTksNyArMTk5LDcgQEAKICAqIGRtYV9jaGFuc19yZWJhbGFuY2UgLSByZWFsbG9jYXRlIGNoYW5uZWxzIHRvIGNsaWVudHMKICAqCiAgKiBXaGVuIHRoZSBudW1iZXIgb2YgRE1BIGNoYW5uZWwgaW4gdGhlIHN5c3RlbSBjaGFuZ2VzLAotICogY2hhbm5lbHMgbmVlZCB0byBiZSByZWJhbGFuY2VkIGFtb25nIGNsaWVudHMKKyAqIGNoYW5uZWxzIG5lZWQgdG8gYmUgcmViYWxhbmNlZCBhbW9uZyBjbGllbnRzLgogICovCiBzdGF0aWMgdm9pZCBkbWFfY2hhbnNfcmViYWxhbmNlKHZvaWQpCiB7CkBAIC0yNjQsNyArMjY0LDcgQEAKIAogLyoqCiAgKiBkbWFfYXN5bmNfY2xpZW50X3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgY2xpZW50IGFuZCBmcmVlIHRoZSAmZG1hX2NsaWVudAotICogQGNsaWVudDoKKyAqIEBjbGllbnQ6ICZkbWFfY2xpZW50IHRvIGZyZWUKICAqCiAgKiBGb3JjZSBmcmVlcyBhbnkgYWxsb2NhdGVkIERNQSBjaGFubmVscywgZnJlZXMgdGhlICZkbWFfY2xpZW50IG1lbW9yeQogICovCkBAIC0zMDYsNyArMzA2LDcgQEAKIH0KIAogLyoqCi0gKiBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyIC0KKyAqIGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlcnMgRE1BIGRldmljZXMgZm91bmQKICAqIEBkZXZpY2U6ICZkbWFfZGV2aWNlCiAgKi8KIGludCBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpCkBAIC0zNDgsOCArMzQ4LDggQEAKIH0KIAogLyoqCi0gKiBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIgLQotICogQGRldmljZTogJmRtYV9kZXZpY2UKKyAqIGRtYV9hc3luY19kZXZpY2VfY2xlYW51cCAtIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGFsbCByZWZlcmVuY2VzIGFyZSByZWxlYXNlZAorICogQGtyZWY6IGtlcm5lbCByZWZlcmVuY2Ugb2JqZWN0CiAgKi8KIHN0YXRpYyB2b2lkIGRtYV9hc3luY19kZXZpY2VfY2xlYW51cChzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKQEAgLTM1OSw3ICszNTksMTEgQEAKIAljb21wbGV0ZSgmZGV2aWNlLT5kb25lKTsKIH0KIAotdm9pZCBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRtYV9kZXZpY2UqIGRldmljZSkKKy8qKgorICogZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlcnMgRE1BIGRldmljZXMKKyAqIEBkZXZpY2U6ICZkbWFfZGV2aWNlCisgKi8KK3ZvaWQgZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRtYV9jaGFuICpjaGFuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hLmMgYi9kcml2ZXJzL2RtYS9pb2F0ZG1hLmMKaW5kZXggMjgwMWQxNC4uNzhiZjQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWEuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIC8qKgogICogZG9faW9hdF9kbWFfbWVtY3B5IC0gYWN0dWFsIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIGEgSU9BVCBETUEgdHJhbnNhY3Rpb24KLSAqIEBjaGFuOiBJT0FUIERNQSBjaGFubmVsIGhhbmRsZQorICogQGlvYXRfY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKICAqIEBkZXN0OiBETUEgZGVzdGluYXRpb24gYWRkcmVzcwogICogQHNyYzogRE1BIHNvdXJjZSBhZGRyZXNzCiAgKiBAbGVuOiB0cmFuc2FjdGlvbiBsZW5ndGggaW4gYnl0ZXMKQEAgLTM4Myw3ICszODMsNyBAQAogICogQGRlc3Rfb2ZmOiBvZmZzZXQgaW50byB0aGF0IHBhZ2UKICAqIEBzcmNfcGc6IHBvaW50ZXIgdG8gdGhlIHBhZ2UgdG8gY29weSBmcm9tCiAgKiBAc3JjX29mZjogb2Zmc2V0IGludG8gdGhhdCBwYWdlCi0gKiBAbGVuOiB0cmFuc2FjdGlvbiBsZW5ndGggaW4gYnl0ZXMuIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBub3QgbWFrZSBhIGNvcHkKKyAqIEBsZW46IHRyYW5zYWN0aW9uIGxlbmd0aCBpbiBieXRlcy4gVGhpcyBpcyBndWFyYW50ZWVkIG5vdCB0byBtYWtlIGEgY29weQogICoJIGFjcm9zcyBhIHBhZ2UgYm91bmRhcnkuCiAgKi8KIApAQCAtNDA3LDcgKzQwNyw3IEBACiB9CiAKIC8qKgotICogaW9hdF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcgLSBwdXNoIHBvdGVudGlhbGx5IHVucmVjb2dub2l6ZWQgYXBwZW5kZWQgZGVzY3JpcHRvcnMgdG8gaHcKKyAqIGlvYXRfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nIC0gcHVzaCBwb3RlbnRpYWxseSB1bnJlY29nbml6ZWQgYXBwZW5kZWQgZGVzY3JpcHRvcnMgdG8gaHcKICAqIEBjaGFuOiBETUEgY2hhbm5lbCBoYW5kbGUKICAqLwogCkBAIC01MTAsNiArNTEwLDggQEAKICAqIGlvYXRfZG1hX2lzX2NvbXBsZXRlIC0gcG9sbCB0aGUgc3RhdHVzIG9mIGEgSU9BVCBETUEgdHJhbnNhY3Rpb24KICAqIEBjaGFuOiBJT0FUIERNQSBjaGFubmVsIGhhbmRsZQogICogQGNvb2tpZTogRE1BIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAqIEBkb25lOiBpZiBub3QgJU5VTEwsIHVwZGF0ZWQgd2l0aCBsYXN0IGNvbXBsZXRlZCB0cmFuc2FjdGlvbgorICogQHVzZWQ6IGlmIG5vdCAlTlVMTCwgdXBkYXRlZCB3aXRoIGxhc3QgdXNlZCB0cmFuc2FjdGlvbgogICovCiAKIHN0YXRpYyBlbnVtIGRtYV9zdGF0dXMgaW9hdF9kbWFfaXNfY29tcGxldGUoc3RydWN0IGRtYV9jaGFuICpjaGFuLApAQCAtNzM5LDcgKzc0MSw3IEBACiAJCWRldmljZS0+bXNpID0gMDsKIAl9CiAjZW5kaWYKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZpb2F0X2RvX2ludGVycnVwdCwgU0FfU0hJUlEsICJpb2F0IiwKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZpb2F0X2RvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJpb2F0IiwKIAkJZGV2aWNlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9pcnE7CkBAIC04MjYsNyArODI4LDcgQEAKIAkvKiBpZiBmb3JjZWQsIHdvcnN0IGNhc2UgaXMgdGhhdCBybW1vZCBoYW5ncyAqLwogCV9fdW5zYWZlKFRISVNfTU9EVUxFKTsKIAotCXBjaV9tb2R1bGVfaW5pdCgmaW9hdF9wY2lfZHJ2KTsKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZpb2F0X3BjaV9kcnYpOwogfQogCiBtb2R1bGVfaW5pdChpb2F0X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRkbWFfcmVnaXN0ZXJzLmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oCmluZGV4IDQxYTIxYWIuLmEzMGM3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXRkbWFfcmVnaXN0ZXJzLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaApAQCAtNzYsNyArNzYsNyBAQAogI2RlZmluZSBJT0FUX0NIQU5TVFNfT0ZGU0VUCQkJMHgwNAkvKiA2NC1iaXQgQ2hhbm5lbCBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgSU9BVF9DSEFOU1RTX09GRlNFVF9MT1cJCQkweDA0CiAjZGVmaW5lIElPQVRfQ0hBTlNUU19PRkZTRVRfSElHSAkJMHgwOAotI2RlZmluZSBJT0FUX0NIQU5TVFNfQ09NUExFVEVEX0RFU0NSSVBUT1JfQUREUgkweEZGRkZGRkZGRkZGRkZGQzAKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0NPTVBMRVRFRF9ERVNDUklQVE9SX0FERFIJMHhGRkZGRkZGRkZGRkZGRkMwVUwKICNkZWZpbmUgSU9BVF9DSEFOU1RTX1NPRlRfRVJSCQkJMHgwMDAwMDAwMDAwMDAwMDEwCiAjZGVmaW5lIElPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTCTB4MDAwMDAwMDAwMDAwMDAwNwogI2RlZmluZSBJT0FUX0NIQU5TVFNfRE1BX1RSQU5TRkVSX1NUQVRVU19BQ1RJVkUJMHgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb3Zsb2NrLmMgYi9kcml2ZXJzL2RtYS9pb3Zsb2NrLmMKaW5kZXggNWVkMzI3ZS4uZDYzNzU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW92bG9jay5jCisrKyBiL2RyaXZlcnMvZG1hL2lvdmxvY2suYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLWludCBudW1fcGFnZXNfc3Bhbm5lZChzdHJ1Y3QgaW92ZWMgKmlvdikKK3N0YXRpYyBpbnQgbnVtX3BhZ2VzX3NwYW5uZWQoc3RydWN0IGlvdmVjICppb3YpCiB7CiAJcmV0dXJuCiAJKChQQUdFX0FMSUdOKCh1bnNpZ25lZCBsb25nKWlvdi0+aW92X2Jhc2UgKyBpb3YtPmlvdl9sZW4pIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ3NnhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDc2eF9lZGFjLmMKaW5kZXggNTM0MjNhZC4uZjc5ZjZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDc2eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDc2eF9lZGFjLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTIwLDYgKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAiZWRhY19tYy5oIgogCisjZGVmaW5lIEFNRDc2WF9SRVZJU0lPTgkiIFZlcjogMi4wLjEgIiAgX19EQVRFX18KKyNkZWZpbmUgRURBQ19NT0RfU1RSCSJhbWQ3NnhfZWRhYyIKKwogI2RlZmluZSBhbWQ3NnhfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAogCWVkYWNfcHJpbnRrKGxldmVsLCAiYW1kNzZ4IiwgZm10LCAjI2FyZykKIApAQCAtMTAyLDE1ICsxMDQsMTggQEAKIHN0YXRpYyB2b2lkIGFtZDc2eF9nZXRfZXJyb3JfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCXN0cnVjdCBhbWQ3NnhfZXJyb3JfaW5mbyAqaW5mbykKIHsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWNpLT5wZGV2LCBBTUQ3NlhfRUNDX01PREVfU1RBVFVTLAorCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJcGRldiA9IHRvX3BjaV9kZXYobWNpLT5kZXYpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBBTUQ3NlhfRUNDX01PREVfU1RBVFVTLAogCQkJCSZpbmZvLT5lY2NfbW9kZV9zdGF0dXMpOwogCiAJaWYgKGluZm8tPmVjY19tb2RlX3N0YXR1cyAmIEJJVCg4KSkKLQkJcGNpX3dyaXRlX2JpdHMzMihtY2ktPnBkZXYsIEFNRDc2WF9FQ0NfTU9ERV9TVEFUVVMsCisJCXBjaV93cml0ZV9iaXRzMzIocGRldiwgQU1ENzZYX0VDQ19NT0RFX1NUQVRVUywKIAkJCQkodTMyKSBCSVQoOCksICh1MzIpIEJJVCg4KSk7CiAKIAlpZiAoaW5mby0+ZWNjX21vZGVfc3RhdHVzICYgQklUKDkpKQotCQlwY2lfd3JpdGVfYml0czMyKG1jaS0+cGRldiwgQU1ENzZYX0VDQ19NT0RFX1NUQVRVUywKKwkJcGNpX3dyaXRlX2JpdHMzMihwZGV2LCBBTUQ3NlhfRUNDX01PREVfU1RBVFVTLAogCQkJCSh1MzIpIEJJVCg5KSwgKHUzMikgQklUKDkpKTsKIH0KIApAQCAtMTc2LDYgKzE4MSwzOCBAQAogCWFtZDc2eF9wcm9jZXNzX2Vycm9yX2luZm8obWNpLCAmaW5mbywgMSk7CiB9CiAKK3N0YXRpYyB2b2lkIGFtZDc2eF9pbml0X2Nzcm93cyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQllbnVtIGVkYWNfdHlwZSBlZGFjX21vZGUpCit7CisJc3RydWN0IGNzcm93X2luZm8gKmNzcm93OworCXUzMiBtYmEsIG1iYV9iYXNlLCBtYmFfbWFzaywgZG1zOworCWludCBpbmRleDsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1jaS0+bnJfY3Nyb3dzOyBpbmRleCsrKSB7CisJCWNzcm93ID0gJm1jaS0+Y3Nyb3dzW2luZGV4XTsKKworCQkvKiBmaW5kIHRoZSBEUkFNIENoaXAgU2VsZWN0IEJhc2UgYWRkcmVzcyBhbmQgbWFzayAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKKwkJCQkgICAgICBBTUQ3NlhfTUVNX0JBU0VfQUREUiArIChpbmRleCAqIDQpLAorCQkJCSAgICAgICZtYmEpOworCisJCWlmICghKG1iYSAmIEJJVCgwKSkpCisJCQljb250aW51ZTsKKworCQltYmFfYmFzZSA9IG1iYSAmIDB4ZmY4MDAwMDBVTDsKKwkJbWJhX21hc2sgPSAoKG1iYSAmIDB4ZmY4MCkgPDwgMTYpIHwgMHg3ZmZmZmZVTDsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEFNRDc2WF9EUkFNX01PREVfU1RBVFVTLCAmZG1zKTsKKwkJY3Nyb3ctPmZpcnN0X3BhZ2UgPSBtYmFfYmFzZSA+PiBQQUdFX1NISUZUOworCQljc3Jvdy0+bnJfcGFnZXMgPSAobWJhX21hc2sgKyAxKSA+PiBQQUdFX1NISUZUOworCQljc3Jvdy0+bGFzdF9wYWdlID0gY3Nyb3ctPmZpcnN0X3BhZ2UgKyBjc3Jvdy0+bnJfcGFnZXMgLSAxOworCQljc3Jvdy0+cGFnZV9tYXNrID0gbWJhX21hc2sgPj4gUEFHRV9TSElGVDsKKwkJY3Nyb3ctPmdyYWluID0gY3Nyb3ctPm5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7CisJCWNzcm93LT5tdHlwZSA9IE1FTV9SRERSOworCQljc3Jvdy0+ZHR5cGUgPSAoKGRtcyA+PiBpbmRleCkgJiAweDEpID8gREVWX1g0IDogREVWX1VOS05PV047CisJCWNzcm93LT5lZGFjX21vZGUgPSBlZGFjX21vZGU7CisJfQorfQorCiAvKioKICAqCWFtZDc2eF9wcm9iZTEJLQlQZXJmb3JtIHNldCB1cCBmb3IgZGV0ZWN0ZWQgZGV2aWNlCiAgKglAcGRldjsgUENJIGRldmljZSBkZXRlY3RlZApAQCAtMTg3LDE1ICsyMjQsMTMgQEAKICAqLwogc3RhdGljIGludCBhbWQ3NnhfcHJvYmUxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZGV2X2lkeCkKIHsKLQlpbnQgcmMgPSAtRU5PREVWOwotCWludCBpbmRleDsKLQlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBOVUxMOwotCWVudW0gZWRhY190eXBlIGVtc19tb2Rlc1tdID0geworCXN0YXRpYyBjb25zdCBlbnVtIGVkYWNfdHlwZSBlbXNfbW9kZXNbXSA9IHsKIAkJRURBQ19OT05FLAogCQlFREFDX0VDLAogCQlFREFDX1NFQ0RFRCwKIAkJRURBQ19TRUNERUQKIAl9OworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IE5VTEw7CiAJdTMyIGVtczsKIAl1MzIgZW1zX21vZGU7CiAJc3RydWN0IGFtZDc2eF9lcnJvcl9pbmZvIGRpc2NhcmQ7CkBAIC0yMDYsNTMgKzI0MSwyOCBAQAogCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgQU1ENzZYX05SX0NTUk9XUywgQU1ENzZYX05SX0NIQU5TKTsKIAogCWlmIChtY2kgPT0gTlVMTCkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZGVidWdmMCgiJXMoKTogbWNpID0gJXBcbiIsIF9fZnVuY19fLCBtY2kpOwotCW1jaS0+cGRldiA9IHBkZXY7CisJbWNpLT5kZXYgPSAmcGRldi0+ZGV2OwogCW1jaS0+bXR5cGVfY2FwID0gTUVNX0ZMQUdfUkREUjsKIAltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNfRkxBR19OT05FIHwgRURBQ19GTEFHX0VDIHwgRURBQ19GTEFHX1NFQ0RFRDsKIAltY2ktPmVkYWNfY2FwID0gZW1zX21vZGUgPwogCQkJKEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQpIDogRURBQ19GTEFHX05PTkU7CiAJbWNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKLQltY2ktPm1vZF92ZXIgPSAiJFJldmlzaW9uOiAxLjQuMi41ICQiOworCW1jaS0+bW9kX3ZlciA9IEFNRDc2WF9SRVZJU0lPTjsKIAltY2ktPmN0bF9uYW1lID0gYW1kNzZ4X2RldnNbZGV2X2lkeF0uY3RsX25hbWU7CiAJbWNpLT5lZGFjX2NoZWNrID0gYW1kNzZ4X2NoZWNrOwogCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IE5VTEw7CiAKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtY2ktPm5yX2Nzcm93czsgaW5kZXgrKykgewotCQlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaW5kZXhdOwotCQl1MzIgbWJhOwotCQl1MzIgbWJhX2Jhc2U7Ci0JCXUzMiBtYmFfbWFzazsKLQkJdTMyIGRtczsKLQotCQkvKiBmaW5kIHRoZSBEUkFNIENoaXAgU2VsZWN0IEJhc2UgYWRkcmVzcyBhbmQgbWFzayAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWNpLT5wZGV2LAotCQkJCUFNRDc2WF9NRU1fQkFTRV9BRERSICsgKGluZGV4ICogNCksICZtYmEpOwotCi0JCWlmICghKG1iYSAmIEJJVCgwKSkpCi0JCQljb250aW51ZTsKLQotCQltYmFfYmFzZSA9IG1iYSAmIDB4ZmY4MDAwMDBVTDsKLQkJbWJhX21hc2sgPSAoKG1iYSAmIDB4ZmY4MCkgPDwgMTYpIHwgMHg3ZmZmZmZVTDsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1jaS0+cGRldiwgQU1ENzZYX0RSQU1fTU9ERV9TVEFUVVMsCi0JCQkJJmRtcyk7Ci0JCWNzcm93LT5maXJzdF9wYWdlID0gbWJhX2Jhc2UgPj4gUEFHRV9TSElGVDsKLQkJY3Nyb3ctPm5yX3BhZ2VzID0gKG1iYV9tYXNrICsgMSkgPj4gUEFHRV9TSElGVDsKLQkJY3Nyb3ctPmxhc3RfcGFnZSA9IGNzcm93LT5maXJzdF9wYWdlICsgY3Nyb3ctPm5yX3BhZ2VzIC0gMTsKLQkJY3Nyb3ctPnBhZ2VfbWFzayA9IG1iYV9tYXNrID4+IFBBR0VfU0hJRlQ7Ci0JCWNzcm93LT5ncmFpbiA9IGNzcm93LT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUOwotCQljc3Jvdy0+bXR5cGUgPSBNRU1fUkREUjsKLQkJY3Nyb3ctPmR0eXBlID0gKChkbXMgPj4gaW5kZXgpICYgMHgxKSA/IERFVl9YNCA6IERFVl9VTktOT1dOOwotCQljc3Jvdy0+ZWRhY19tb2RlID0gZW1zX21vZGVzW2Vtc19tb2RlXTsKLQl9Ci0KKwlhbWQ3NnhfaW5pdF9jc3Jvd3MobWNpLCBwZGV2LCBlbXNfbW9kZXNbZW1zX21vZGVdKTsKIAlhbWQ3NnhfZ2V0X2Vycm9yX2luZm8obWNpLCAmZGlzY2FyZCk7ICAvKiBjbGVhciBjb3VudGVycyAqLwogCi0JaWYgKGVkYWNfbWNfYWRkX21jKG1jaSkpIHsKKwkvKiBIZXJlIHdlIGFzc3VtZSB0aGF0IHdlIHdpbGwgbmV2ZXIgc2VlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzCisJICogdHlwZSBvZiBtZW1vcnkgY29udHJvbGxlci4gIFRoZSBJRCBpcyB0aGVyZWZvcmUgaGFyZGNvZGVkIHRvIDAuCisJICovCisJaWYgKGVkYWNfbWNfYWRkX21jKG1jaSwwKSkgewogCQlkZWJ1Z2YzKCIlcygpOiBmYWlsZWQgZWRhY19tY19hZGRfbWMoKVxuIiwgX19mdW5jX18pOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtMjYyLDkgKzI3Miw4IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JaWYgKG1jaSAhPSBOVUxMKQotCQllZGFjX21jX2ZyZWUobWNpKTsKLQlyZXR1cm4gcmM7CisJZWRhY19tY19mcmVlKG1jaSk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIC8qIHJldHVybnMgY291bnQgKD49IDApLCBvciBuZWdhdGl2ZSBvbiBlcnJvciAqLwpAQCAtMjkxLDcgKzMwMCw3IEBACiAKIAlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoKG1jaSA9IGVkYWNfbWNfZGVsX21jKHBkZXYpKSA9PSBOVUxMKQorCWlmICgobWNpID0gZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldikpID09IE5VTEwpCiAJCXJldHVybjsKIAogCWVkYWNfbWNfZnJlZShtY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMKaW5kZXggZmNlMzE5My4uYzgyYmMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yNSw2ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImVkYWNfbWMuaCIKIAorI2RlZmluZSBFNzUyWF9SRVZJU0lPTgkiIFZlcjogMi4wLjEgIiBfX0RBVEVfXworI2RlZmluZSBFREFDX01PRF9TVFIJImU3NTJ4X2VkYWMiCisKIHN0YXRpYyBpbnQgZm9yY2VfZnVuY3Rpb25fdW5oaWRlOwogCiAjZGVmaW5lIGU3NTJ4X3ByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIFwKQEAgLTc2MywxMjIgKzc2NSw1NCBAQAogCWU3NTJ4X3Byb2Nlc3NfZXJyb3JfaW5mbyhtY2ksICZpbmZvLCAxKTsKIH0KIAotc3RhdGljIGludCBlNzUyeF9wcm9iZTEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBkZXZfaWR4KQorLyogUmV0dXJuIDEgaWYgZHVhbCBjaGFubmVsIG1vZGUgaXMgYWN0aXZlLiAgRWxzZSByZXR1cm4gMC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGR1YWxfY2hhbm5lbF9hY3RpdmUodTE2IGRkcmNzcikKIHsKLQlpbnQgcmMgPSAtRU5PREVWOwotCWludCBpbmRleDsKLQl1MTYgcGNpX2RhdGE7Ci0JdTggc3RhdDg7Ci0Jc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gTlVMTDsKLQlzdHJ1Y3QgZTc1MnhfcHZ0ICpwdnQgPSBOVUxMOwotCXUxNiBkZHJjc3I7Ci0JdTMyIGRyYzsKLQlpbnQgZHJjX2NoYW47CS8qIE51bWJlciBvZiBjaGFubmVscyAwPTFjaGFuLDE9MmNoYW4gKi8KLQlpbnQgZHJjX2RyYmc7CS8qIERSQiBncmFudWxhcml0eSAwPTY0bWIsIDE9MTI4bWIgKi8KLQlpbnQgZHJjX2RkaW07CS8qIERSQU0gRGF0YSBJbnRlZ3JpdHkgTW9kZSAwPW5vbmUsMj1lZGFjICovCi0JdTMyIGRyYTsKKwlyZXR1cm4gKCgoZGRyY3NyID4+IDEyKSAmIDMpID09IDMpOworfQorCitzdGF0aWMgdm9pZCBlNzUyeF9pbml0X2Nzcm93cyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQl1MTYgZGRyY3NyKQoreworCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdzsKIAl1bnNpZ25lZCBsb25nIGxhc3RfY3VtdWxfc2l6ZTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgZTc1MnhfZXJyb3JfaW5mbyBkaXNjYXJkOworCWludCBpbmRleCwgbWVtX2RldiwgZHJjX2NoYW47CisJaW50IGRyY19kcmJnOyAgLyogRFJCIGdyYW51bGFyaXR5IDA9NjRtYiwgMT0xMjhtYiAqLworCWludCBkcmNfZGRpbTsgIC8qIERSQU0gRGF0YSBJbnRlZ3JpdHkgTW9kZSAwPW5vbmUsIDI9ZWRhYyAqLworCXU4IHZhbHVlOworCXUzMiBkcmEsIGRyYywgY3VtdWxfc2l6ZTsKIAotCWRlYnVnZjAoIiVzKCk6IG1jaVxuIiwgX19mdW5jX18pOwotCWRlYnVnZjAoIlN0YXJ0aW5nIFByb2JlMVxuIik7Ci0KLQkvKiBjaGVjayB0byBzZWUgaWYgZGV2aWNlIDAgZnVuY3Rpb24gMSBpcyBlbmFibGVkOyBpZiBpdCBpc24ndCwgd2UKLQkgKiBhc3N1bWUgdGhlIEJJT1MgaGFzIHJlc2VydmVkIGl0IGZvciBhIHJlYXNvbiBhbmQgaXMgZXhwZWN0aW5nCi0JICogZXhjbHVzaXZlIGFjY2Vzcywgd2UgdGFrZSBjYXJlIG5vdCB0byB2aW9sYXRlIHRoYXQgYXNzdW1wdGlvbiBhbmQKLQkgKiBmYWlsIHRoZSBwcm9iZS4gKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFNzUyWF9ERVZQUkVTMSwgJnN0YXQ4KTsKLQlpZiAoIWZvcmNlX2Z1bmN0aW9uX3VuaGlkZSAmJiAhKHN0YXQ4ICYgKDEgPDwgNSkpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNvbnRhY3QgeW91ciBCSU9TIHZlbmRvciB0byBzZWUgaWYgdGhlICIKLQkJCSJFNzUyeCBlcnJvciByZWdpc3RlcnMgY2FuIGJlIHNhZmVseSB1bi1oaWRkZW5cbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCXN0YXQ4IHw9ICgxIDw8IDUpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBFNzUyWF9ERVZQUkVTMSwgc3RhdDgpOwotCi0JLyogbmVlZCB0byBmaW5kIG91dCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEU3NTJYX0RSQSwgJmRyYSk7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEU3NTJYX0RSQywgJmRyYyk7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgRTc1MlhfRERSQ1NSLCAmZGRyY3NyKTsKLQkvKiBGSVhNRTogc2hvdWxkIGNoZWNrID4+MTIgb3IgMHhmLCB0cnVlIGZvciBhbGw/ICovCi0JLyogRHVhbCBjaGFubmVsID0gMSwgU2luZ2xlIGNoYW5uZWwgPSAwICovCi0JZHJjX2NoYW4gPSAoKChkZHJjc3IgPj4gMTIpICYgMykgPT0gMyk7Ci0JZHJjX2RyYmcgPSBkcmNfY2hhbiArIDE7CS8qIDEyOCBpbiBkdWFsIG1vZGUsIDY0IGluIHNpbmdsZSAqLworCWRyY19jaGFuID0gZHVhbF9jaGFubmVsX2FjdGl2ZShkZHJjc3IpOworCWRyY19kcmJnID0gZHJjX2NoYW4gKyAxOyAgLyogMTI4IGluIGR1YWwgbW9kZSwgNjQgaW4gc2luZ2xlICovCiAJZHJjX2RkaW0gPSAoZHJjID4+IDIwKSAmIDB4MzsKIAotCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKCpwdnQpLCBFNzUyWF9OUl9DU1JPV1MsIGRyY19jaGFuICsgMSk7Ci0KLQlpZiAobWNpID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JZGVidWdmMygiJXMoKTogaW5pdCBtY2lcbiIsIF9fZnVuY19fKTsKLQltY2ktPm10eXBlX2NhcCA9IE1FTV9GTEFHX1JERFI7Ci0JbWNpLT5lZGFjX2N0bF9jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19TRUNERUQgfAotCSAgICBFREFDX0ZMQUdfUzRFQ0Q0RUQ7Ci0JLyogRklYTUUgLSB3aGF0IGlmIGRpZmZlcmVudCBtZW1vcnkgdHlwZXMgYXJlIGluIGRpZmZlcmVudCBjc3Jvd3M/ICovCi0JbWNpLT5tb2RfbmFtZSA9IEVEQUNfTU9EX1NUUjsKLQltY2ktPm1vZF92ZXIgPSAiJFJldmlzaW9uOiAxLjUuMi4xMSAkIjsKLQltY2ktPnBkZXYgPSBwZGV2OwotCi0JZGVidWdmMygiJXMoKTogaW5pdCBwdnRcbiIsIF9fZnVuY19fKTsKLQlwdnQgPSAoc3RydWN0IGU3NTJ4X3B2dCAqKSBtY2ktPnB2dF9pbmZvOwotCXB2dC0+ZGV2X2luZm8gPSAmZTc1MnhfZGV2c1tkZXZfaWR4XTsKLQlwdnQtPmJyaWRnZV9jayA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCi0JCQkJCXB2dC0+ZGV2X2luZm8tPmVycl9kZXYsCi0JCQkJCXB2dC0+YnJpZGdlX2NrKTsKLQotCWlmIChwdnQtPmJyaWRnZV9jayA9PSBOVUxMKQotCQlwdnQtPmJyaWRnZV9jayA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UocGRldi0+YnVzLAotCQkJCQlQQ0lfREVWRk4oMCwgMSkpOwotCi0JaWYgKHB2dC0+YnJpZGdlX2NrID09IE5VTEwpIHsKLQkJZTc1MnhfcHJpbnRrKEtFUk5fRVJSLCAiZXJyb3IgcmVwb3J0aW5nIGRldmljZSBub3QgZm91bmQ6IgotCQkJInZlbmRvciAleCBkZXZpY2UgMHgleCAoYnJva2VuIEJJT1M/KVxuIiwKLQkJCVBDSV9WRU5ET1JfSURfSU5URUwsIGU3NTJ4X2RldnNbZGV2X2lkeF0uZXJyX2Rldik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlwdnQtPm1jX3N5bW1ldHJpYyA9ICgoZGRyY3NyICYgMHgxMCkgIT0gMCk7Ci0JZGVidWdmMygiJXMoKTogbW9yZSBtY2kgaW5pdFxuIiwgX19mdW5jX18pOwotCW1jaS0+Y3RsX25hbWUgPSBwdnQtPmRldl9pbmZvLT5jdGxfbmFtZTsKLQltY2ktPmVkYWNfY2hlY2sgPSBlNzUyeF9jaGVjazsKLQltY2ktPmN0bF9wYWdlX3RvX3BoeXMgPSBjdGxfcGFnZV90b19waHlzOwotCi0JLyogZmluZCBvdXQgdGhlIGRldmljZSB0eXBlcyAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBFNzUyWF9EUkEsICZkcmEpOwotCi0JLyoKLQkgKiBUaGUgZHJhbSByb3cgYm91bmRhcnkgKERSQikgcmVnIHZhbHVlcyBhcmUgYm91bmRhcnkgYWRkcmVzcyBmb3IKKwkvKiBUaGUgZHJhbSByb3cgYm91bmRhcnkgKERSQikgcmVnIHZhbHVlcyBhcmUgYm91bmRhcnkgYWRkcmVzcyBmb3IKIAkgKiBlYWNoIERSQU0gcm93IHdpdGggYSBncmFudWxhcml0eSBvZiA2NCBvciAxMjhNQiAoc2luZ2xlL2R1YWwKIAkgKiBjaGFubmVsIG9wZXJhdGlvbikuICBEUkIgcmVncyBhcmUgY3VtdWxhdGl2ZTsgdGhlcmVmb3JlIERSQjcgd2lsbAogCSAqIGNvbnRhaW4gdGhlIHRvdGFsIG1lbW9yeSBjb250YWluZWQgaW4gYWxsIGVpZ2h0IHJvd3MuCiAJICovCiAJZm9yIChsYXN0X2N1bXVsX3NpemUgPSBpbmRleCA9IDA7IGluZGV4IDwgbWNpLT5ucl9jc3Jvd3M7IGluZGV4KyspIHsKLQkJdTggdmFsdWU7Ci0JCXUzMiBjdW11bF9zaXplOwotCiAJCS8qIG1lbV9kZXYgMD14OCwgMT14NCAqLwotCQlpbnQgbWVtX2RldiA9IChkcmEgPj4gKGluZGV4ICogNCArIDIpKSAmIDB4MzsKLQkJc3RydWN0IGNzcm93X2luZm8gKmNzcm93ID0gJm1jaS0+Y3Nyb3dzW2luZGV4XTsKKwkJbWVtX2RldiA9IChkcmEgPj4gKGluZGV4ICogNCArIDIpKSAmIDB4MzsKKwkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaW5kZXhdOwogCiAJCW1lbV9kZXYgPSAobWVtX2RldiA9PSAyKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUobWNpLT5wZGV2LCBFNzUyWF9EUkIgKyBpbmRleCwgJnZhbHVlKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRTc1MlhfRFJCICsgaW5kZXgsICZ2YWx1ZSk7CiAJCS8qIGNvbnZlcnQgYSAxMjggb3IgNjQgTWlCIERSQiB0byBhIHBhZ2Ugc2l6ZS4gKi8KIAkJY3VtdWxfc2l6ZSA9IHZhbHVlIDw8ICgyNSArIGRyY19kcmJnIC0gUEFHRV9TSElGVCk7CiAJCWRlYnVnZjMoIiVzKCk6ICglZCkgY3VtdWxfc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywgaW5kZXgsCiAJCQljdW11bF9zaXplKTsKLQogCQlpZiAoY3VtdWxfc2l6ZSA9PSBsYXN0X2N1bXVsX3NpemUpCi0JCQljb250aW51ZTsgLyogbm90IHBvcHVsYXRlZCAqLworCQkJY29udGludWU7CS8qIG5vdCBwb3B1bGF0ZWQgKi8KIAogCQljc3Jvdy0+Zmlyc3RfcGFnZSA9IGxhc3RfY3VtdWxfc2l6ZTsKIAkJY3Nyb3ctPmxhc3RfcGFnZSA9IGN1bXVsX3NpemUgLSAxOwogCQljc3Jvdy0+bnJfcGFnZXMgPSBjdW11bF9zaXplIC0gbGFzdF9jdW11bF9zaXplOwogCQlsYXN0X2N1bXVsX3NpemUgPSBjdW11bF9zaXplOwotCQljc3Jvdy0+Z3JhaW4gPSAxIDw8IDEyOyAgLyogNEtpQiAtIHJlc29sdXRpb24gb2YgQ0VMT0cgKi8KLQkJY3Nyb3ctPm10eXBlID0gTUVNX1JERFI7ICAvKiBvbmx5IG9uZSB0eXBlIHN1cHBvcnRlZCAqLworCQljc3Jvdy0+Z3JhaW4gPSAxIDw8IDEyOwkvKiA0S2lCIC0gcmVzb2x1dGlvbiBvZiBDRUxPRyAqLworCQljc3Jvdy0+bXR5cGUgPSBNRU1fUkREUjsJLyogb25seSBvbmUgdHlwZSBzdXBwb3J0ZWQgKi8KIAkJY3Nyb3ctPmR0eXBlID0gbWVtX2RldiA/IERFVl9YNCA6IERFVl9YODsKIAogCQkvKgpAQCAtODk2LDcyICs4MzAsOTAgQEAKIAkJfSBlbHNlCiAJCQljc3Jvdy0+ZWRhY19tb2RlID0gRURBQ19OT05FOwogCX0KK30KIAotCS8qIEZpbGwgaW4gdGhlIG1lbW9yeSBtYXAgdGFibGUgKi8KLQl7Ci0JCXU4IHZhbHVlOwotCQl1OCBsYXN0ID0gMDsKLQkJdTggcm93ID0gMDsKK3N0YXRpYyB2b2lkIGU3NTJ4X2luaXRfbWVtX21hcF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJc3RydWN0IGU3NTJ4X3B2dCAqcHZ0KQoreworCWludCBpbmRleDsKKwl1OCB2YWx1ZSwgbGFzdCwgcm93LCBzdGF0ODsKIAotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA4OyBpbmRleCArPSAyKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShtY2ktPnBkZXYsIEU3NTJYX0RSQiArIGluZGV4LAotCQkJCQkmdmFsdWUpOworCWxhc3QgPSAwOworCXJvdyA9IDA7CiAKLQkJCS8qIHRlc3QgaWYgdGhlcmUgaXMgYSBkaW1tIGluIHRoaXMgc2xvdCAqLwotCQkJaWYgKHZhbHVlID09IGxhc3QpIHsKLQkJCQkvKiBubyBkaW1tIGluIHRoZSBzbG90LCBzbyBmbGFnIGl0IGFzIGVtcHR5ICovCi0JCQkJcHZ0LT5tYXBbaW5kZXhdID0gMHhmZjsKLQkJCQlwdnQtPm1hcFtpbmRleCArIDFdID0gMHhmZjsKLQkJCX0gZWxzZSB7IC8qIHRoZXJlIGlzIGEgZGltbSBpbiB0aGUgc2xvdCAqLwotCQkJCXB2dC0+bWFwW2luZGV4XSA9IHJvdzsKLQkJCQlyb3crKzsKLQkJCQlsYXN0ID0gdmFsdWU7Ci0JCQkJLyogdGVzdCB0aGUgbmV4dCB2YWx1ZSB0byBzZWUgaWYgdGhlIGRpbW0gaXMKLQkJCQkgICBkb3VibGUgc2lkZWQgKi8KLQkJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShtY2ktPnBkZXYsCi0JCQkJCQlFNzUyWF9EUkIgKyBpbmRleCArIDEsCi0JCQkJCQkmdmFsdWUpOwotCQkJCXB2dC0+bWFwW2luZGV4ICsgMV0gPSAodmFsdWUgPT0gbGFzdCkgPwotCQkJCQkweGZmIDoJLyogdGhlIGRpbW0gaXMgc2luZ2xlIHNpZGVkLAotCQkJCQkJICogc28gZmxhZyBhcyBlbXB0eQotCQkJCQkJICovCi0JCQkJCXJvdzsJLyogdGhpcyBpcyBhIGRvdWJsZSBzaWRlZCBkaW1tCi0JCQkJCQkgKiB0byBzYXZlIHRoZSBuZXh0IHJvdyAjCi0JCQkJCQkgKi8KLQkJCQlyb3crKzsKLQkJCQlsYXN0ID0gdmFsdWU7Ci0JCQl9CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgODsgaW5kZXggKz0gMikgeworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFNzUyWF9EUkIgKyBpbmRleCwgJnZhbHVlKTsKKwkJLyogdGVzdCBpZiB0aGVyZSBpcyBhIGRpbW0gaW4gdGhpcyBzbG90ICovCisJCWlmICh2YWx1ZSA9PSBsYXN0KSB7CisJCQkvKiBubyBkaW1tIGluIHRoZSBzbG90LCBzbyBmbGFnIGl0IGFzIGVtcHR5ICovCisJCQlwdnQtPm1hcFtpbmRleF0gPSAweGZmOworCQkJcHZ0LT5tYXBbaW5kZXggKyAxXSA9IDB4ZmY7CisJCX0gZWxzZSB7ICAgICAgICAvKiB0aGVyZSBpcyBhIGRpbW0gaW4gdGhlIHNsb3QgKi8KKwkJCXB2dC0+bWFwW2luZGV4XSA9IHJvdzsKKwkJCXJvdysrOworCQkJbGFzdCA9IHZhbHVlOworCQkJLyogdGVzdCB0aGUgbmV4dCB2YWx1ZSB0byBzZWUgaWYgdGhlIGRpbW0gaXMgZG91YmxlCisJCQkgKiBzaWRlZAorCQkJICovCisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFNzUyWF9EUkIgKyBpbmRleCArIDEsCisJCQkJCSAgICAgJnZhbHVlKTsKKwkJCXB2dC0+bWFwW2luZGV4ICsgMV0gPSAodmFsdWUgPT0gbGFzdCkgPworCQkJICAgIDB4ZmYgOiAgICAgIC8qIHRoZSBkaW1tIGlzIHNpbmdsZSBzaWRlZCwKKwkJCQkJICAgc28gZmxhZyBhcyBlbXB0eSAqLworCQkJICAgIHJvdzsgICAgICAgIC8qIHRoaXMgaXMgYSBkb3VibGUgc2lkZWQgZGltbQorCQkJCQkgICB0byBzYXZlIHRoZSBuZXh0IHJvdyAjICovCisJCQlyb3crKzsKKwkJCWxhc3QgPSB2YWx1ZTsKIAkJfQogCX0KIAogCS8qIHNldCB0aGUgbWFwIHR5cGUuICAxID0gbm9ybWFsLCAwID0gcmV2ZXJzZWQgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShtY2ktPnBkZXYsIEU3NTJYX0RSTSwgJnN0YXQ4KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBFNzUyWF9EUk0sICZzdGF0OCk7CiAJcHZ0LT5tYXBfdHlwZSA9ICgoc3RhdDggJiAweDBmKSA+ICgoc3RhdDggPj4gNCkgJiAweDBmKSk7Cit9CiAKLQltY2ktPmVkYWNfY2FwIHw9IEVEQUNfRkxBR19OT05FOwotCWRlYnVnZjMoIiVzKCk6IHRvbG0sIHJlbWFwYmFzZSwgcmVtYXBsaW1pdFxuIiwgX19mdW5jX18pOworLyogUmV0dXJuIDAgb24gc3VjY2VzcyBvciAxIG9uIGZhaWx1cmUuICovCitzdGF0aWMgaW50IGU3NTJ4X2dldF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZGV2X2lkeCwKKwkJc3RydWN0IGU3NTJ4X3B2dCAqcHZ0KQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQkvKiBsb2FkIHRoZSB0b3Agb2YgbG93IG1lbW9yeSwgcmVtYXAgYmFzZSwgYW5kIHJlbWFwIGxpbWl0IHZhcnMgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChtY2ktPnBkZXYsIEU3NTJYX1RPTE0sICZwY2lfZGF0YSk7Ci0JcHZ0LT50b2xtID0gKCh1MzIpIHBjaV9kYXRhKSA8PCA0OwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1jaS0+cGRldiwgRTc1MlhfUkVNQVBCQVNFLCAmcGNpX2RhdGEpOwotCXB2dC0+cmVtYXBiYXNlID0gKCh1MzIpIHBjaV9kYXRhKSA8PCAxNDsKLQlwY2lfcmVhZF9jb25maWdfd29yZChtY2ktPnBkZXYsIEU3NTJYX1JFTUFQTElNSVQsICZwY2lfZGF0YSk7Ci0JcHZ0LT5yZW1hcGxpbWl0ID0gKCh1MzIpIHBjaV9kYXRhKSA8PCAxNDsKLQllNzUyeF9wcmludGsoS0VSTl9JTkZPLAotCQkidG9sbSA9ICV4LCByZW1hcGJhc2UgPSAleCwgcmVtYXBsaW1pdCA9ICV4XG4iLCBwdnQtPnRvbG0sCi0JCXB2dC0+cmVtYXBiYXNlLCBwdnQtPnJlbWFwbGltaXQpOworCXB2dC0+YnJpZGdlX2NrID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJCQkJcHZ0LT5kZXZfaW5mby0+ZXJyX2RldiwKKwkJCQkJcHZ0LT5icmlkZ2VfY2spOwogCi0JaWYgKGVkYWNfbWNfYWRkX21jKG1jaSkpIHsKLQkJZGVidWdmMygiJXMoKTogZmFpbGVkIGVkYWNfbWNfYWRkX21jKClcbiIsIF9fZnVuY19fKTsKLQkJZ290byBmYWlsOworCWlmIChwdnQtPmJyaWRnZV9jayA9PSBOVUxMKQorCQlwdnQtPmJyaWRnZV9jayA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UocGRldi0+YnVzLAorCQkJCQkJCVBDSV9ERVZGTigwLCAxKSk7CisKKwlpZiAocHZ0LT5icmlkZ2VfY2sgPT0gTlVMTCkgeworCQllNzUyeF9wcmludGsoS0VSTl9FUlIsICJlcnJvciByZXBvcnRpbmcgZGV2aWNlIG5vdCBmb3VuZDoiCisJCSAgICAgICAidmVuZG9yICV4IGRldmljZSAweCV4IChicm9rZW4gQklPUz8pXG4iLAorCQkgICAgICAgUENJX1ZFTkRPUl9JRF9JTlRFTCwgZTc1MnhfZGV2c1tkZXZfaWR4XS5lcnJfZGV2KTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgZTc1MnhfZGV2c1tkZXZfaWR4XS5jdGxfZGV2LAotCQkJTlVMTCk7CisJCQkgICAgIE5VTEwpOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CisKIAlwdnQtPmRldl9kMGYwID0gZGV2OwotCS8qIGZpbmQgdGhlIGVycm9yIHJlcG9ydGluZyBkZXZpY2UgYW5kIGNsZWFyIGVycm9ycyAqLwotCWRldiA9IHB2dC0+ZGV2X2QwZjEgPSBwY2lfZGV2X2dldChwdnQtPmJyaWRnZV9jayk7CisJcHZ0LT5kZXZfZDBmMSA9IHBjaV9kZXZfZ2V0KHB2dC0+YnJpZGdlX2NrKTsKKworCXJldHVybiAwOworCitmYWlsOgorCXBjaV9kZXZfcHV0KHB2dC0+YnJpZGdlX2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZTc1MnhfaW5pdF9lcnJvcl9yZXBvcnRpbmdfcmVncyhzdHJ1Y3QgZTc1MnhfcHZ0ICpwdnQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWRldiA9IHB2dC0+ZGV2X2QwZjE7CiAJLyogVHVybiBvZmYgZXJyb3IgZGlzYWJsZSAmIFNNSSBpbiBjYXNlIHRoZSBCSU9TIHR1cm5lZCBpdCBvbiAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIEU3NTJYX0hJX0VSUk1BU0ssIDB4MDApOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIEU3NTJYX0hJX1NNSUNNRCwgMHgwMCk7CkBAIC05NzEsNyArOTIzLDk5IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgRTc1MlhfQlVGX1NNSUNNRCwgMHgwMCk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgRTc1MlhfRFJBTV9FUlJNQVNLLCAweDAwKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBFNzUyWF9EUkFNX1NNSUNNRCwgMHgwMCk7Cit9CiAKK3N0YXRpYyBpbnQgZTc1MnhfcHJvYmUxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZGV2X2lkeCkKK3sKKwl1MTYgcGNpX2RhdGE7CisJdTggc3RhdDg7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpOworCXN0cnVjdCBlNzUyeF9wdnQgKnB2dDsKKwl1MTYgZGRyY3NyOworCWludCBkcmNfY2hhbjsJLyogTnVtYmVyIG9mIGNoYW5uZWxzIDA9MWNoYW4sMT0yY2hhbiAqLworCXN0cnVjdCBlNzUyeF9lcnJvcl9pbmZvIGRpc2NhcmQ7CisKKwlkZWJ1Z2YwKCIlcygpOiBtY2lcbiIsIF9fZnVuY19fKTsKKwlkZWJ1Z2YwKCJTdGFydGluZyBQcm9iZTFcbiIpOworCisJLyogY2hlY2sgdG8gc2VlIGlmIGRldmljZSAwIGZ1bmN0aW9uIDEgaXMgZW5hYmxlZDsgaWYgaXQgaXNuJ3QsIHdlCisJICogYXNzdW1lIHRoZSBCSU9TIGhhcyByZXNlcnZlZCBpdCBmb3IgYSByZWFzb24gYW5kIGlzIGV4cGVjdGluZworCSAqIGV4Y2x1c2l2ZSBhY2Nlc3MsIHdlIHRha2UgY2FyZSBub3QgdG8gdmlvbGF0ZSB0aGF0IGFzc3VtcHRpb24gYW5kCisJICogZmFpbCB0aGUgcHJvYmUuICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRTc1MlhfREVWUFJFUzEsICZzdGF0OCk7CisJaWYgKCFmb3JjZV9mdW5jdGlvbl91bmhpZGUgJiYgIShzdGF0OCAmICgxIDw8IDUpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb250YWN0IHlvdXIgQklPUyB2ZW5kb3IgdG8gc2VlIGlmIHRoZSAiCisJCQkiRTc1MnggZXJyb3IgcmVnaXN0ZXJzIGNhbiBiZSBzYWZlbHkgdW4taGlkZGVuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXN0YXQ4IHw9ICgxIDw8IDUpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBFNzUyWF9ERVZQUkVTMSwgc3RhdDgpOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgRTc1MlhfRERSQ1NSLCAmZGRyY3NyKTsKKwkvKiBGSVhNRTogc2hvdWxkIGNoZWNrID4+MTIgb3IgMHhmLCB0cnVlIGZvciBhbGw/ICovCisJLyogRHVhbCBjaGFubmVsID0gMSwgU2luZ2xlIGNoYW5uZWwgPSAwICovCisJZHJjX2NoYW4gPSBkdWFsX2NoYW5uZWxfYWN0aXZlKGRkcmNzcik7CisKKwltY2kgPSBlZGFjX21jX2FsbG9jKHNpemVvZigqcHZ0KSwgRTc1MlhfTlJfQ1NST1dTLCBkcmNfY2hhbiArIDEpOworCisJaWYgKG1jaSA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRlYnVnZjMoIiVzKCk6IGluaXQgbWNpXG4iLCBfX2Z1bmNfXyk7CisJbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19SRERSOworCW1jaS0+ZWRhY19jdGxfY2FwID0gRURBQ19GTEFHX05PTkUgfCBFREFDX0ZMQUdfU0VDREVEIHwKKwkgICAgRURBQ19GTEFHX1M0RUNENEVEOworCS8qIEZJWE1FIC0gd2hhdCBpZiBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFyZSBpbiBkaWZmZXJlbnQgY3Nyb3dzPyAqLworCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CisJbWNpLT5tb2RfdmVyID0gRTc1MlhfUkVWSVNJT047CisJbWNpLT5kZXYgPSAmcGRldi0+ZGV2OworCisJZGVidWdmMygiJXMoKTogaW5pdCBwdnRcbiIsIF9fZnVuY19fKTsKKwlwdnQgPSAoc3RydWN0IGU3NTJ4X3B2dCAqKSBtY2ktPnB2dF9pbmZvOworCXB2dC0+ZGV2X2luZm8gPSAmZTc1MnhfZGV2c1tkZXZfaWR4XTsKKwlwdnQtPm1jX3N5bW1ldHJpYyA9ICgoZGRyY3NyICYgMHgxMCkgIT0gMCk7CisKKwlpZiAoZTc1MnhfZ2V0X2RldnMocGRldiwgZGV2X2lkeCwgcHZ0KSkgeworCQllZGFjX21jX2ZyZWUobWNpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGVidWdmMygiJXMoKTogbW9yZSBtY2kgaW5pdFxuIiwgX19mdW5jX18pOworCW1jaS0+Y3RsX25hbWUgPSBwdnQtPmRldl9pbmZvLT5jdGxfbmFtZTsKKwltY2ktPmVkYWNfY2hlY2sgPSBlNzUyeF9jaGVjazsKKwltY2ktPmN0bF9wYWdlX3RvX3BoeXMgPSBjdGxfcGFnZV90b19waHlzOworCisJZTc1MnhfaW5pdF9jc3Jvd3MobWNpLCBwZGV2LCBkZHJjc3IpOworCWU3NTJ4X2luaXRfbWVtX21hcF90YWJsZShwZGV2LCBwdnQpOworCisJLyogc2V0IHRoZSBtYXAgdHlwZS4gIDEgPSBub3JtYWwsIDAgPSByZXZlcnNlZCAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEU3NTJYX0RSTSwgJnN0YXQ4KTsKKwlwdnQtPm1hcF90eXBlID0gKChzdGF0OCAmIDB4MGYpID4gKChzdGF0OCA+PiA0KSAmIDB4MGYpKTsKKworCW1jaS0+ZWRhY19jYXAgfD0gRURBQ19GTEFHX05PTkU7CisJZGVidWdmMygiJXMoKTogdG9sbSwgcmVtYXBiYXNlLCByZW1hcGxpbWl0XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBsb2FkIHRoZSB0b3Agb2YgbG93IG1lbW9yeSwgcmVtYXAgYmFzZSwgYW5kIHJlbWFwIGxpbWl0IHZhcnMgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFNzUyWF9UT0xNLCAmcGNpX2RhdGEpOworCXB2dC0+dG9sbSA9ICgodTMyKSBwY2lfZGF0YSkgPDwgNDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFNzUyWF9SRU1BUEJBU0UsICZwY2lfZGF0YSk7CisJcHZ0LT5yZW1hcGJhc2UgPSAoKHUzMikgcGNpX2RhdGEpIDw8IDE0OworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIEU3NTJYX1JFTUFQTElNSVQsICZwY2lfZGF0YSk7CisJcHZ0LT5yZW1hcGxpbWl0ID0gKCh1MzIpIHBjaV9kYXRhKSA8PCAxNDsKKwllNzUyeF9wcmludGsoS0VSTl9JTkZPLAorCQkidG9sbSA9ICV4LCByZW1hcGJhc2UgPSAleCwgcmVtYXBsaW1pdCA9ICV4XG4iLCBwdnQtPnRvbG0sCisJCXB2dC0+cmVtYXBiYXNlLCBwdnQtPnJlbWFwbGltaXQpOworCisJLyogSGVyZSB3ZSBhc3N1bWUgdGhhdCB3ZSB3aWxsIG5ldmVyIHNlZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcworCSAqIHR5cGUgb2YgbWVtb3J5IGNvbnRyb2xsZXIuICBUaGUgSUQgaXMgdGhlcmVmb3JlIGhhcmRjb2RlZCB0byAwLgorCSAqLworCWlmIChlZGFjX21jX2FkZF9tYyhtY2ksMCkpIHsKKwkJZGVidWdmMygiJXMoKTogZmFpbGVkIGVkYWNfbWNfYWRkX21jKClcbiIsIF9fZnVuY19fKTsKKwkJZ290byBmYWlsOworCX0KKworCWU3NTJ4X2luaXRfZXJyb3JfcmVwb3J0aW5nX3JlZ3MocHZ0KTsKIAllNzUyeF9nZXRfZXJyb3JfaW5mbyhtY2ksICZkaXNjYXJkKTsgLyogY2xlYXIgb3RoZXIgTUNIIGVycm9ycyAqLwogCiAJLyogZ2V0IHRoaXMgZmFyIGFuZCBpdCdzIHN1Y2Nlc3NmdWwgKi8KQEAgLTk3OSwyMCArMTAyMywxMiBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCWlmIChtY2kpIHsKLQkJaWYgKHB2dC0+ZGV2X2QwZjApCi0JCQlwY2lfZGV2X3B1dChwdnQtPmRldl9kMGYwKTsKKwlwY2lfZGV2X3B1dChwdnQtPmRldl9kMGYwKTsKKwlwY2lfZGV2X3B1dChwdnQtPmRldl9kMGYxKTsKKwlwY2lfZGV2X3B1dChwdnQtPmJyaWRnZV9jayk7CisJZWRhY19tY19mcmVlKG1jaSk7CiAKLQkJaWYgKHB2dC0+ZGV2X2QwZjEpCi0JCQlwY2lfZGV2X3B1dChwdnQtPmRldl9kMGYxKTsKLQotCQlpZiAocHZ0LT5icmlkZ2VfY2spCi0JCQlwY2lfZGV2X3B1dChwdnQtPmJyaWRnZV9jayk7Ci0KLQkJZWRhY19tY19mcmVlKG1jaSk7Ci0JfQotCi0JcmV0dXJuIHJjOworCXJldHVybiAtRU5PREVWOwogfQogCiAvKiByZXR1cm5zIGNvdW50ICg+PSAwKSwgb3IgbmVnYXRpdmUgb24gZXJyb3IgKi8KQEAgLTEwMTUsNyArMTA1MSw3IEBACiAKIAlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoKG1jaSA9IGVkYWNfbWNfZGVsX21jKHBkZXYpKSA9PSBOVUxMKQorCWlmICgobWNpID0gZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldikpID09IE5VTEwpCiAJCXJldHVybjsKIAogCXB2dCA9IChzdHJ1Y3QgZTc1MnhfcHZ0ICopIG1jaS0+cHZ0X2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZTd4eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2U3eHh4X2VkYWMuYwppbmRleCBhOTUxOGQzLi4zMTBkOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZTd4eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lN3h4eF9lZGFjLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTMwLDYgKzI5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAiZWRhY19tYy5oIgogCisjZGVmaW5lCUU3WFhYX1JFVklTSU9OICIgVmVyOiAyLjAuMSAiIF9fREFURV9fCisjZGVmaW5lCUVEQUNfTU9EX1NUUgkiZTd4eHhfZWRhYyIKKwogI2RlZmluZSBlN3h4eF9wcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSBcCiAJZWRhY19wcmludGsobGV2ZWwsICJlN3h4eCIsIGZtdCwgIyNhcmcpCiAKQEAgLTMzMyw5OSArMzM1LDYxIEBACiAJZTd4eHhfcHJvY2Vzc19lcnJvcl9pbmZvKG1jaSwgJmluZm8sIDEpOwogfQogCi1zdGF0aWMgaW50IGU3eHh4X3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGRldl9pZHgpCisvKiBSZXR1cm4gMSBpZiBkdWFsIGNoYW5uZWwgbW9kZSBpcyBhY3RpdmUuICBFbHNlIHJldHVybiAwLiAqLworc3RhdGljIGlubGluZSBpbnQgZHVhbF9jaGFubmVsX2FjdGl2ZSh1MzIgZHJjLCBpbnQgZGV2X2lkeCkKIHsKLQlpbnQgcmMgPSAtRU5PREVWOwotCWludCBpbmRleDsKLQl1MTYgcGNpX2RhdGE7Ci0Jc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gTlVMTDsKLQlzdHJ1Y3QgZTd4eHhfcHZ0ICpwdnQgPSBOVUxMOwotCXUzMiBkcmM7Ci0JaW50IGRyY19jaGFuID0gMTsJLyogTnVtYmVyIG9mIGNoYW5uZWxzIDA9MWNoYW4sMT0yY2hhbiAqLwotCWludCBkcmNfZHJiZyA9IDE7CS8qIERSQiBncmFudWxhcml0eSAwPTMybWIsMT02NG1iICovCi0JaW50IGRyY19kZGltOwkJLyogRFJBTSBEYXRhIEludGVncml0eSBNb2RlIDA9bm9uZSwyPWVkYWMgKi8KLQl1MzIgZHJhOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9jdW11bF9zaXplOwotCXN0cnVjdCBlN3h4eF9lcnJvcl9pbmZvIGRpc2NhcmQ7CisJcmV0dXJuIChkZXZfaWR4ID09IEU3NTAxKSA/ICgoZHJjID4+IDIyKSAmIDB4MSkgOiAxOworfQogCi0JZGVidWdmMCgiJXMoKTogbWNpXG4iLCBfX2Z1bmNfXyk7CiAKLQkvKiBuZWVkIHRvIGZpbmQgb3V0IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgRTdYWFhfRFJDLCAmZHJjKTsKLQorLyogUmV0dXJuIERSQiBncmFudWxhcml0eSAoMD0zMm1iLCAxPTY0bWIpLiAqLworc3RhdGljIGlubGluZSBpbnQgZHJiX2dyYW51bGFyaXR5KHUzMiBkcmMsIGludCBkZXZfaWR4KQorewogCS8qIG9ubHkgZTc1MDEgY2FuIGJlIHNpbmdsZSBjaGFubmVsICovCi0JaWYgKGRldl9pZHggPT0gRTc1MDEpIHsKLQkJZHJjX2NoYW4gPSAoKGRyYyA+PiAyMikgJiAweDEpOwotCQlkcmNfZHJiZyA9IChkcmMgPj4gMTgpICYgMHgzOwotCX0KKwlyZXR1cm4gKGRldl9pZHggPT0gRTc1MDEpID8gKChkcmMgPj4gMTgpICYgMHgzKSA6IDE7Cit9CiAKLQlkcmNfZGRpbSA9IChkcmMgPj4gMjApICYgMHgzOwotCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKCpwdnQpLCBFN1hYWF9OUl9DU1JPV1MsIGRyY19jaGFuICsgMSk7CiAKLQlpZiAobWNpID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQorc3RhdGljIHZvaWQgZTd4eHhfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJaW50IGRldl9pZHgsIHUzMiBkcmMpCit7CisJdW5zaWduZWQgbG9uZyBsYXN0X2N1bXVsX3NpemU7CisJaW50IGluZGV4OworCXU4IHZhbHVlOworCXUzMiBkcmEsIGN1bXVsX3NpemU7CisJaW50IGRyY19jaGFuLCBkcmNfZHJiZywgZHJjX2RkaW0sIG1lbV9kZXY7CisJc3RydWN0IGNzcm93X2luZm8gKmNzcm93OwogCi0JZGVidWdmMygiJXMoKTogaW5pdCBtY2lcbiIsIF9fZnVuY19fKTsKLQltY2ktPm10eXBlX2NhcCA9IE1FTV9GTEFHX1JERFI7Ci0JbWNpLT5lZGFjX2N0bF9jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19TRUNERUQgfAotCQkJRURBQ19GTEFHX1M0RUNENEVEOwotCS8qIEZJWE1FIC0gd2hhdCBpZiBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFyZSBpbiBkaWZmZXJlbnQgY3Nyb3dzPyAqLwotCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7Ci0JbWNpLT5tb2RfdmVyID0gIiRSZXZpc2lvbjogMS41LjIuOSAkIjsKLQltY2ktPnBkZXYgPSBwZGV2OwotCi0JZGVidWdmMygiJXMoKTogaW5pdCBwdnRcbiIsIF9fZnVuY19fKTsKLQlwdnQgPSAoc3RydWN0IGU3eHh4X3B2dCAqKSBtY2ktPnB2dF9pbmZvOwotCXB2dC0+ZGV2X2luZm8gPSAmZTd4eHhfZGV2c1tkZXZfaWR4XTsKLQlwdnQtPmJyaWRnZV9jayA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCi0JCQkJCXB2dC0+ZGV2X2luZm8tPmVycl9kZXYsCi0JCQkJCXB2dC0+YnJpZGdlX2NrKTsKLQotCWlmICghcHZ0LT5icmlkZ2VfY2spIHsKLQkJZTd4eHhfcHJpbnRrKEtFUk5fRVJSLCAiZXJyb3IgcmVwb3J0aW5nIGRldmljZSBub3QgZm91bmQ6IgotCQkJInZlbmRvciAleCBkZXZpY2UgMHgleCAoYnJva2VuIEJJT1M/KVxuIiwKLQkJCVBDSV9WRU5ET1JfSURfSU5URUwsIGU3eHh4X2RldnNbZGV2X2lkeF0uZXJyX2Rldik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlkZWJ1Z2YzKCIlcygpOiBtb3JlIG1jaSBpbml0XG4iLCBfX2Z1bmNfXyk7Ci0JbWNpLT5jdGxfbmFtZSA9IHB2dC0+ZGV2X2luZm8tPmN0bF9uYW1lOwotCW1jaS0+ZWRhY19jaGVjayA9IGU3eHh4X2NoZWNrOwotCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IGN0bF9wYWdlX3RvX3BoeXM7Ci0KLQkvKiBmaW5kIG91dCB0aGUgZGV2aWNlIHR5cGVzICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEU3WFhYX0RSQSwgJmRyYSk7CisJZHJjX2NoYW4gPSBkdWFsX2NoYW5uZWxfYWN0aXZlKGRyYywgZGV2X2lkeCk7CisJZHJjX2RyYmcgPSBkcmJfZ3JhbnVsYXJpdHkoZHJjLCBkZXZfaWR4KTsKKwlkcmNfZGRpbSA9IChkcmMgPj4gMjApICYgMHgzOworCWxhc3RfY3VtdWxfc2l6ZSA9IDA7CiAKLQkvKgotCSAqIFRoZSBkcmFtIHJvdyBib3VuZGFyeSAoRFJCKSByZWcgdmFsdWVzIGFyZSBib3VuZGFyeSBhZGRyZXNzCisJLyogVGhlIGRyYW0gcm93IGJvdW5kYXJ5IChEUkIpIHJlZyB2YWx1ZXMgYXJlIGJvdW5kYXJ5IGFkZHJlc3MKIAkgKiBmb3IgZWFjaCBEUkFNIHJvdyB3aXRoIGEgZ3JhbnVsYXJpdHkgb2YgMzIgb3IgNjRNQiAoc2luZ2xlL2R1YWwKIAkgKiBjaGFubmVsIG9wZXJhdGlvbikuICBEUkIgcmVncyBhcmUgY3VtdWxhdGl2ZTsgdGhlcmVmb3JlIERSQjcgd2lsbAogCSAqIGNvbnRhaW4gdGhlIHRvdGFsIG1lbW9yeSBjb250YWluZWQgaW4gYWxsIGVpZ2h0IHJvd3MuCiAJICovCi0JZm9yIChsYXN0X2N1bXVsX3NpemUgPSBpbmRleCA9IDA7IGluZGV4IDwgbWNpLT5ucl9jc3Jvd3M7IGluZGV4KyspIHsKLQkJdTggdmFsdWU7Ci0JCXUzMiBjdW11bF9zaXplOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1jaS0+bnJfY3Nyb3dzOyBpbmRleCsrKSB7CiAJCS8qIG1lbV9kZXYgMD14OCwgMT14NCAqLwotCQlpbnQgbWVtX2RldiA9IChkcmEgPj4gKGluZGV4ICogNCArIDMpKSAmIDB4MTsKLQkJc3RydWN0IGNzcm93X2luZm8gKmNzcm93ID0gJm1jaS0+Y3Nyb3dzW2luZGV4XTsKKwkJbWVtX2RldiA9IChkcmEgPj4gKGluZGV4ICogNCArIDMpKSAmIDB4MTsKKwkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaW5kZXhdOwogCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG1jaS0+cGRldiwgRTdYWFhfRFJCICsgaW5kZXgsICZ2YWx1ZSk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEU3WFhYX0RSQiArIGluZGV4LCAmdmFsdWUpOwogCQkvKiBjb252ZXJ0IGEgNjQgb3IgMzIgTWlCIERSQiB0byBhIHBhZ2Ugc2l6ZS4gKi8KIAkJY3VtdWxfc2l6ZSA9IHZhbHVlIDw8ICgyNSArIGRyY19kcmJnIC0gUEFHRV9TSElGVCk7CiAJCWRlYnVnZjMoIiVzKCk6ICglZCkgY3VtdWxfc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywgaW5kZXgsCiAJCQljdW11bF9zaXplKTsKLQogCQlpZiAoY3VtdWxfc2l6ZSA9PSBsYXN0X2N1bXVsX3NpemUpCi0JCQljb250aW51ZTsgIC8qIG5vdCBwb3B1bGF0ZWQgKi8KKwkJCWNvbnRpbnVlOwkvKiBub3QgcG9wdWxhdGVkICovCiAKIAkJY3Nyb3ctPmZpcnN0X3BhZ2UgPSBsYXN0X2N1bXVsX3NpemU7CiAJCWNzcm93LT5sYXN0X3BhZ2UgPSBjdW11bF9zaXplIC0gMTsKIAkJY3Nyb3ctPm5yX3BhZ2VzID0gY3VtdWxfc2l6ZSAtIGxhc3RfY3VtdWxfc2l6ZTsKIAkJbGFzdF9jdW11bF9zaXplID0gY3VtdWxfc2l6ZTsKLQkJY3Nyb3ctPmdyYWluID0gMSA8PCAxMjsgIC8qIDRLaUIgLSByZXNvbHV0aW9uIG9mIENFTE9HICovCi0JCWNzcm93LT5tdHlwZSA9IE1FTV9SRERSOyAgLyogb25seSBvbmUgdHlwZSBzdXBwb3J0ZWQgKi8KKwkJY3Nyb3ctPmdyYWluID0gMSA8PCAxMjsJLyogNEtpQiAtIHJlc29sdXRpb24gb2YgQ0VMT0cgKi8KKwkJY3Nyb3ctPm10eXBlID0gTUVNX1JERFI7CS8qIG9ubHkgb25lIHR5cGUgc3VwcG9ydGVkICovCiAJCWNzcm93LT5kdHlwZSA9IG1lbV9kZXYgPyBERVZfWDQgOiBERVZfWDg7CiAKIAkJLyoKQEAgLTQ0MywxNiArNDA3LDYxIEBACiAJCX0gZWxzZQogCQkJY3Nyb3ctPmVkYWNfbW9kZSA9IEVEQUNfTk9ORTsKIAl9Cit9CiAKK3N0YXRpYyBpbnQgZTd4eHhfcHJvYmUxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZGV2X2lkeCkKK3sKKwl1MTYgcGNpX2RhdGE7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gTlVMTDsKKwlzdHJ1Y3QgZTd4eHhfcHZ0ICpwdnQgPSBOVUxMOworCXUzMiBkcmM7CisJaW50IGRyY19jaGFuOworCXN0cnVjdCBlN3h4eF9lcnJvcl9pbmZvIGRpc2NhcmQ7CisKKwlkZWJ1Z2YwKCIlcygpOiBtY2lcbiIsIF9fZnVuY19fKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgRTdYWFhfRFJDLCAmZHJjKTsKKworCWRyY19jaGFuID0gZHVhbF9jaGFubmVsX2FjdGl2ZShkcmMsIGRldl9pZHgpOworCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKCpwdnQpLCBFN1hYWF9OUl9DU1JPV1MsIGRyY19jaGFuICsgMSk7CisKKwlpZiAobWNpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGVidWdmMygiJXMoKTogaW5pdCBtY2lcbiIsIF9fZnVuY19fKTsKKwltY2ktPm10eXBlX2NhcCA9IE1FTV9GTEFHX1JERFI7CisJbWNpLT5lZGFjX2N0bF9jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19TRUNERUQgfAorCQkJRURBQ19GTEFHX1M0RUNENEVEOworCS8qIEZJWE1FIC0gd2hhdCBpZiBkaWZmZXJlbnQgbWVtb3J5IHR5cGVzIGFyZSBpbiBkaWZmZXJlbnQgY3Nyb3dzPyAqLworCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CisJbWNpLT5tb2RfdmVyID0gRTdYWFhfUkVWSVNJT047CisJbWNpLT5kZXYgPSAmcGRldi0+ZGV2OworCWRlYnVnZjMoIiVzKCk6IGluaXQgcHZ0XG4iLCBfX2Z1bmNfXyk7CisJcHZ0ID0gKHN0cnVjdCBlN3h4eF9wdnQgKikgbWNpLT5wdnRfaW5mbzsKKwlwdnQtPmRldl9pbmZvID0gJmU3eHh4X2RldnNbZGV2X2lkeF07CisJcHZ0LT5icmlkZ2VfY2sgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkJCQlwdnQtPmRldl9pbmZvLT5lcnJfZGV2LAorCQkJCQlwdnQtPmJyaWRnZV9jayk7CisKKwlpZiAoIXB2dC0+YnJpZGdlX2NrKSB7CisJCWU3eHh4X3ByaW50ayhLRVJOX0VSUiwgImVycm9yIHJlcG9ydGluZyBkZXZpY2Ugbm90IGZvdW5kOiIKKwkJCSJ2ZW5kb3IgJXggZGV2aWNlIDB4JXggKGJyb2tlbiBCSU9TPylcbiIsCisJCQlQQ0lfVkVORE9SX0lEX0lOVEVMLCBlN3h4eF9kZXZzW2Rldl9pZHhdLmVycl9kZXYpOworCQlnb3RvIGZhaWwwOworCX0KKworCWRlYnVnZjMoIiVzKCk6IG1vcmUgbWNpIGluaXRcbiIsIF9fZnVuY19fKTsKKwltY2ktPmN0bF9uYW1lID0gcHZ0LT5kZXZfaW5mby0+Y3RsX25hbWU7CisJbWNpLT5lZGFjX2NoZWNrID0gZTd4eHhfY2hlY2s7CisJbWNpLT5jdGxfcGFnZV90b19waHlzID0gY3RsX3BhZ2VfdG9fcGh5czsKKwllN3h4eF9pbml0X2Nzcm93cyhtY2ksIHBkZXYsIGRldl9pZHgsIGRyYyk7CiAJbWNpLT5lZGFjX2NhcCB8PSBFREFDX0ZMQUdfTk9ORTsKLQogCWRlYnVnZjMoIiVzKCk6IHRvbG0sIHJlbWFwYmFzZSwgcmVtYXBsaW1pdFxuIiwgX19mdW5jX18pOwogCS8qIGxvYWQgdGhlIHRvcCBvZiBsb3cgbWVtb3J5LCByZW1hcCBiYXNlLCBhbmQgcmVtYXAgbGltaXQgdmFycyAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1jaS0+cGRldiwgRTdYWFhfVE9MTSwgJnBjaV9kYXRhKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFN1hYWF9UT0xNLCAmcGNpX2RhdGEpOwogCXB2dC0+dG9sbSA9ICgodTMyKSBwY2lfZGF0YSkgPDwgNDsKLQlwY2lfcmVhZF9jb25maWdfd29yZChtY2ktPnBkZXYsIEU3WFhYX1JFTUFQQkFTRSwgJnBjaV9kYXRhKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFN1hYWF9SRU1BUEJBU0UsICZwY2lfZGF0YSk7CiAJcHZ0LT5yZW1hcGJhc2UgPSAoKHUzMikgcGNpX2RhdGEpIDw8IDE0OwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1jaS0+cGRldiwgRTdYWFhfUkVNQVBMSU1JVCwgJnBjaV9kYXRhKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFN1hYWF9SRU1BUExJTUlULCAmcGNpX2RhdGEpOwogCXB2dC0+cmVtYXBsaW1pdCA9ICgodTMyKSBwY2lfZGF0YSkgPDwgMTQ7CiAJZTd4eHhfcHJpbnRrKEtFUk5fSU5GTywKIAkJInRvbG0gPSAleCwgcmVtYXBiYXNlID0gJXgsIHJlbWFwbGltaXQgPSAleFxuIiwgcHZ0LT50b2xtLApAQCAtNDYxLDIzICs0NzAsMjUgQEAKIAkvKiBjbGVhciBhbnkgcGVuZGluZyBlcnJvcnMsIG9yIGluaXRpYWwgc3RhdGUgYml0cyAqLwogCWU3eHh4X2dldF9lcnJvcl9pbmZvKG1jaSwgJmRpc2NhcmQpOwogCi0JaWYgKGVkYWNfbWNfYWRkX21jKG1jaSkgIT0gMCkgeworCS8qIEhlcmUgd2UgYXNzdW1lIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMKKwkgKiB0eXBlIG9mIG1lbW9yeSBjb250cm9sbGVyLiAgVGhlIElEIGlzIHRoZXJlZm9yZSBoYXJkY29kZWQgdG8gMC4KKwkgKi8KKwlpZiAoZWRhY19tY19hZGRfbWMobWNpLDApKSB7CiAJCWRlYnVnZjMoIiVzKCk6IGZhaWxlZCBlZGFjX21jX2FkZF9tYygpXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAl9CiAKIAkvKiBnZXQgdGhpcyBmYXIgYW5kIGl0J3Mgc3VjY2Vzc2Z1bCAqLwogCWRlYnVnZjMoIiVzKCk6IHN1Y2Nlc3NcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIAotZmFpbDoKLQlpZiAobWNpICE9IE5VTEwpIHsKLQkJaWYocHZ0ICE9IE5VTEwgJiYgcHZ0LT5icmlkZ2VfY2spCi0JCQlwY2lfZGV2X3B1dChwdnQtPmJyaWRnZV9jayk7Ci0JCWVkYWNfbWNfZnJlZShtY2kpOwotCX0KK2ZhaWwxOgorCXBjaV9kZXZfcHV0KHB2dC0+YnJpZGdlX2NrKTsKIAotCXJldHVybiByYzsKK2ZhaWwwOgorCWVkYWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIC8qIHJldHVybnMgY291bnQgKD49IDApLCBvciBuZWdhdGl2ZSBvbiBlcnJvciAqLwpAQCAtNDk4LDcgKzUwOSw3IEBACiAKIAlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoKG1jaSA9IGVkYWNfbWNfZGVsX21jKHBkZXYpKSA9PSBOVUxMKQorCWlmICgobWNpID0gZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldikpID09IE5VTEwpCiAJCXJldHVybjsKIAogCXB2dCA9IChzdHJ1Y3QgZTd4eHhfcHZ0ICopIG1jaS0+cHZ0X2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwppbmRleCBlYTA2ZTNhLi4zYTdjZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTU0LDE2ICs1MywxNyBAQAogc3RhdGljIGludCBwYW5pY19vbl91ZTsKIHN0YXRpYyBpbnQgcG9sbF9tc2VjID0gMTAwMDsKIAotc3RhdGljIGludCBjaGVja19wY2lfcGFyaXR5ID0gMDsJLyogZGVmYXVsdCBZRVMgY2hlY2sgUENJIHBhcml0eSAqLwotc3RhdGljIGludCBwYW5pY19vbl9wY2lfcGFyaXR5OwkJLyogZGVmYXVsdCBubyBwYW5pYyBvbiBQQ0kgUGFyaXR5ICovCi1zdGF0aWMgYXRvbWljX3QgcGNpX3Bhcml0eV9jb3VudCA9IEFUT01JQ19JTklUKDApOwotCiAvKiBsb2NrIHRvIG1lbW9yeSBjb250cm9sbGVyJ3MgY29udHJvbCBhcnJheSAqLwogc3RhdGljIERFQ0xBUkVfTVVURVgobWVtX2N0bHNfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbWNfZGV2aWNlcyA9IExJU1RfSEVBRF9JTklUKG1jX2RldmljZXMpOwogCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICplZGFjX3RocmVhZDsKIAorI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbnQgY2hlY2tfcGNpX3Bhcml0eSA9IDA7CS8qIGRlZmF1bHQgWUVTIGNoZWNrIFBDSSBwYXJpdHkgKi8KK3N0YXRpYyBpbnQgcGFuaWNfb25fcGNpX3Bhcml0eTsJCS8qIGRlZmF1bHQgbm8gcGFuaWMgb24gUENJIFBhcml0eSAqLworc3RhdGljIGF0b21pY190IHBjaV9wYXJpdHlfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKKwogLyogU3RydWN0dXJlIG9mIHRoZSB3aGl0ZWxpc3QgYW5kIGJsYWNrbGlzdCBhcnJheXMgKi8KIHN0cnVjdCBlZGFjX3BjaV9kZXZpY2VfbGlzdCB7CiAJdW5zaWduZWQgaW50ICB2ZW5kb3I7CQkvKiBWZW5kb3IgSUQgKi8KQEAgLTgwLDYgKzgwLDEyIEBACiBzdGF0aWMgc3RydWN0IGVkYWNfcGNpX2RldmljZV9saXN0IHBjaV93aGl0ZWxpc3RbTUFYX0xJU1RFRF9QQ0lfREVWSUNFU107CiBzdGF0aWMgaW50IHBjaV93aGl0ZWxpc3RfY291bnQgOwogCisjaWZuZGVmIERJU0FCTEVfRURBQ19TWVNGUworc3RhdGljIHN0cnVjdCBrb2JqZWN0IGVkYWNfcGNpX2tvYmo7IC8qIC9zeXMvZGV2aWNlcy9zeXN0ZW0vZWRhYy9wY2kgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiBlZGFjX3BjaV9rb2JqX2NvbXBsZXRlOworI2VuZGlmCS8qIERJU0FCTEVfRURBQ19TWVNGUyAqLworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKwogLyogIFNUQVJUIHN5c2ZzIGRhdGEgYW5kIG1ldGhvZHMgKi8KIAogI2lmbmRlZiBESVNBQkxFX0VEQUNfU1lTRlMKQEAgLTEyNywxOCArMTMzLDE1IEBACiAJc2V0X2tzZXRfbmFtZSgiZWRhYyIpLAogfTsKIAotLyogc3lzZnMgb2JqZWN0czoKKy8qIHN5c2ZzIG9iamVjdDoKICAqCS9zeXMvZGV2aWNlcy9zeXN0ZW0vZWRhYy9tYwotICoJL3N5cy9kZXZpY2VzL3N5c3RlbS9lZGFjL3BjaQogICovCiBzdGF0aWMgc3RydWN0IGtvYmplY3QgZWRhY19tZW1jdHJsX2tvYmo7Ci1zdGF0aWMgc3RydWN0IGtvYmplY3QgZWRhY19wY2lfa29iajsKIAogLyogV2UgdXNlIHRoZXNlIHRvIHdhaXQgZm9yIHRoZSByZWZlcmVuY2UgY291bnRzIG9uIGVkYWNfbWVtY3RybF9rb2JqIGFuZAogICogZWRhY19wY2lfa29iaiB0byByZWFjaCAwLgogICovCiBzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gZWRhY19tZW1jdHJsX2tvYmpfY29tcGxldGU7Ci1zdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gZWRhY19wY2lfa29ial9jb21wbGV0ZTsKIAogLyoKICAqIC9zeXMvZGV2aWNlcy9zeXN0ZW0vZWRhYy9tYzsKQEAgLTMyNCw2ICszMjcsOCBAQAogI2VuZGlmICAvKiBESVNBQkxFX0VEQUNfU1lTRlMgKi8KIH0KIAorI2lmZGVmIENPTkZJR19QQ0kKKwogI2lmbmRlZiBESVNBQkxFX0VEQUNfU1lTRlMKIAogLyoKQEAgLTYyNCw2ICs2MjksMjUyIEBACiAjZW5kaWYKIH0KIAorCitzdGF0aWMgdTE2IGdldF9wY2lfcGFyaXR5X3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgc2Vjb25kYXJ5KQoreworCWludCB3aGVyZTsKKwl1MTYgc3RhdHVzOworCisJd2hlcmUgPSBzZWNvbmRhcnkgPyBQQ0lfU0VDX1NUQVRVUyA6IFBDSV9TVEFUVVM7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCB3aGVyZSwgJnN0YXR1cyk7CisKKwkvKiBJZiB3ZSBnZXQgYmFjayAweEZGRkYgdGhlbiB3ZSBtdXN0IHN1c3BlY3QgdGhhdCB0aGUgY2FyZCBoYXMgYmVlbgorCSAqIHB1bGxlZCBidXQgdGhlIExpbnV4IFBDSSBsYXllciBoYXMgbm90IHlldCBmaW5pc2hlZCBjbGVhbmluZyB1cC4KKwkgKiBXZSBkb24ndCB3YW50IHRvIHJlcG9ydCBvbiBzdWNoIGRldmljZXMKKwkgKi8KKworCWlmIChzdGF0dXMgPT0gMHhGRkZGKSB7CisJCXUzMiBzYW5pdHk7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMCwgJnNhbml0eSk7CisKKwkJaWYgKHNhbml0eSA9PSAweEZGRkZGRkZGKQorCQkJcmV0dXJuIDA7CisJfQorCisJc3RhdHVzICY9IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZIHwgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIHwKKwkJUENJX1NUQVRVU19QQVJJVFk7CisKKwlpZiAoc3RhdHVzKQorCQkvKiByZXNldCBvbmx5IHRoZSBiaXRzIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHdoZXJlLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordHlwZWRlZiB2b2lkICgqcGNpX3Bhcml0eV9jaGVja19mbl90KSAoc3RydWN0IHBjaV9kZXYgKmRldik7CisKKy8qIENsZWFyIGFueSBQQ0kgcGFyaXR5IGVycm9ycyBsb2dnZWQgYnkgdGhpcyBkZXZpY2UuICovCitzdGF0aWMgdm9pZCBlZGFjX3BjaV9kZXZfcGFyaXR5X2NsZWFyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggaGVhZGVyX3R5cGU7CisKKwlnZXRfcGNpX3Bhcml0eV9zdGF0dXMoZGV2LCAwKTsKKworCS8qIHJlYWQgdGhlIGRldmljZSBUWVBFLCBsb29raW5nIGZvciBicmlkZ2VzICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7CisKKwlpZiAoKGhlYWRlcl90eXBlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKKwkJZ2V0X3BjaV9wYXJpdHlfc3RhdHVzKGRldiwgMSk7Cit9CisKKy8qCisgKiAgUENJIFBhcml0eSBwb2xsaW5nCisgKgorICovCitzdGF0aWMgdm9pZCBlZGFjX3BjaV9kZXZfcGFyaXR5X3Rlc3Qoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MTYgc3RhdHVzOworCXU4ICBoZWFkZXJfdHlwZTsKKworCS8qIHJlYWQgdGhlIFNUQVRVUyByZWdpc3RlciBvbiB0aGlzIGRldmljZQorCSAqLworCXN0YXR1cyA9IGdldF9wY2lfcGFyaXR5X3N0YXR1cyhkZXYsIDApOworCisJZGVidWdmMigiUENJIFNUQVRVUz0gMHglMDR4ICVzXG4iLCBzdGF0dXMsIGRldi0+ZGV2LmJ1c19pZCApOworCisJLyogY2hlY2sgdGhlIHN0YXR1cyByZWcgZm9yIGVycm9ycyAqLworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IpKQorCQkJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX1BDSSwKKwkJCQkiU2lnbmFsZWQgU3lzdGVtIEVycm9yIG9uICVzXG4iLAorCQkJCXBjaV9uYW1lKGRldikpOworCisJCWlmIChzdGF0dXMgJiAoUENJX1NUQVRVU19QQVJJVFkpKSB7CisJCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfUENJLAorCQkJCSJNYXN0ZXIgRGF0YSBQYXJpdHkgRXJyb3Igb24gJXNcbiIsCisJCQkJcGNpX25hbWUoZGV2KSk7CisKKwkJCWF0b21pY19pbmMoJnBjaV9wYXJpdHlfY291bnQpOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19QQ0ksCisJCQkJIkRldGVjdGVkIFBhcml0eSBFcnJvciBvbiAlc1xuIiwKKwkJCQlwY2lfbmFtZShkZXYpKTsKKworCQkJYXRvbWljX2luYygmcGNpX3Bhcml0eV9jb3VudCk7CisJCX0KKwl9CisKKwkvKiByZWFkIHRoZSBkZXZpY2UgVFlQRSwgbG9va2luZyBmb3IgYnJpZGdlcyAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOworCisJZGVidWdmMigiUENJIEhFQURFUiBUWVBFPSAweCUwMnggJXNcbiIsIGhlYWRlcl90eXBlLCBkZXYtPmRldi5idXNfaWQgKTsKKworCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisJCS8qIE9uIGJyaWRnZXMsIG5lZWQgdG8gZXhhbWluZSBzZWNvbmRhcnkgc3RhdHVzIHJlZ2lzdGVyICAqLworCQlzdGF0dXMgPSBnZXRfcGNpX3Bhcml0eV9zdGF0dXMoZGV2LCAxKTsKKworCQlkZWJ1Z2YyKCJQQ0kgU0VDX1NUQVRVUz0gMHglMDR4ICVzXG4iLAorCQkJCXN0YXR1cywgZGV2LT5kZXYuYnVzX2lkICk7CisKKwkJLyogY2hlY2sgdGhlIHNlY29uZGFyeSBzdGF0dXMgcmVnIGZvciBlcnJvcnMgKi8KKwkJaWYgKHN0YXR1cykgeworCQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IpKQorCQkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19QQ0ksICJCcmlkZ2UgIgorCQkJCQkiU2lnbmFsZWQgU3lzdGVtIEVycm9yIG9uICVzXG4iLAorCQkJCQlwY2lfbmFtZShkZXYpKTsKKworCQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1BBUklUWSkpIHsKKwkJCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfUENJLCAiQnJpZGdlICIKKwkJCQkJIk1hc3RlciBEYXRhIFBhcml0eSBFcnJvciBvbiAiCisJCQkJCSIlc1xuIiwgcGNpX25hbWUoZGV2KSk7CisKKwkJCQlhdG9taWNfaW5jKCZwY2lfcGFyaXR5X2NvdW50KTsKKwkJCX0KKworCQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpIHsKKwkJCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfUENJLCAiQnJpZGdlICIKKwkJCQkJIkRldGVjdGVkIFBhcml0eSBFcnJvciBvbiAlc1xuIiwKKwkJCQkJcGNpX25hbWUoZGV2KSk7CisKKwkJCQlhdG9taWNfaW5jKCZwY2lfcGFyaXR5X2NvdW50KTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIGNoZWNrX2Rldl9vbl9saXN0OiBTY2FuIGZvciBhIFBDSSBkZXZpY2Ugb24gYSB3aGl0ZS9ibGFjayBsaXN0CisgKiBAbGlzdDoJYW4gRURBQyAgJmVkYWNfcGNpX2RldmljZV9saXN0ICB3aGl0ZS9ibGFjayBsaXN0IHBvaW50ZXIKKyAqIEBmcmVlX2luZGV4OglpbmRleCBvZiBuZXh0IGZyZWUgZW50cnkgb24gdGhlIGxpc3QKKyAqIEBwY2lfZGV2OglQQ0kgRGV2aWNlIHBvaW50ZXIKKyAqCisgKiBzZWUgaWYgbGlzdCBjb250YWlucyB0aGUgZGV2aWNlLgorICoKKyAqIFJldHVybnM6ICAJMCBub3QgZm91bmQKKyAqCQkxIGZvdW5kIG9uIGxpc3QKKyAqLworc3RhdGljIGludCBjaGVja19kZXZfb25fbGlzdChzdHJ1Y3QgZWRhY19wY2lfZGV2aWNlX2xpc3QgKmxpc3QsCisJCWludCBmcmVlX2luZGV4LCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpOworCWludCByYyA9IDA7ICAgICAvKiBBc3N1bWUgbm90IGZvdW5kICovCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yPWRldi0+dmVuZG9yOworCXVuc2lnbmVkIHNob3J0IGRldmljZT1kZXYtPmRldmljZTsKKworCS8qIFNjYW4gdGhlIGxpc3QsIGxvb2tpbmcgZm9yIGEgdmVuZG9yL2RldmljZSBtYXRjaCAqLworCWZvciAoaSA9IDA7IGkgPCBmcmVlX2luZGV4OyBpKyssIGxpc3QrKyApIHsKKwkJaWYgKChsaXN0LT52ZW5kb3IgPT0gdmVuZG9yICkgJiYgKGxpc3QtPmRldmljZSA9PSBkZXZpY2UgKSkgeworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBwY2lfZGV2IHBhcml0eSBsaXN0IGl0ZXJhdG9yCisgKglTY2FuIHRoZSBQQ0kgZGV2aWNlIGxpc3QgZm9yIG9uZSBpdGVyYXRpb24sIGxvb2tpbmcgZm9yIFNFUlJPUnMKKyAqCU1hc3RlciBQYXJpdHkgRVJST1JTIG9yIFBhcml0eSBFUlJPUnMgb24gcHJpbWFyeSBvciBzZWNvbmRhcnkgZGV2aWNlcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgZWRhY19wY2lfZGV2X3Bhcml0eV9pdGVyYXRvcihwY2lfcGFyaXR5X2NoZWNrX2ZuX3QgZm4pCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CisKKwkvKiByZXF1ZXN0IGZvciBrZXJuZWwgYWNjZXNzIHRvIHRoZSBuZXh0IFBDSSBkZXZpY2UsIGlmIGFueSwKKwkgKiBhbmQgd2hpbGUgd2UgYXJlIGxvb2tpbmcgYXQgaXQgaGF2ZSBpdHMgcmVmZXJlbmNlIGNvdW50CisJICogYnVtcGVkIHVudGlsIHdlIGFyZSBkb25lIHdpdGggaXQKKwkgKi8KKwl3aGlsZSgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworCQkvKiBpZiB3aGl0ZWxpc3QgZXhpc3RzIHRoZW4gaXQgaGFzIHByaW9yaXR5LCBzbyBvbmx5IHNjYW4KKwkJICogdGhvc2UgZGV2aWNlcyBvbiB0aGUgd2hpdGVsaXN0CisJCSAqLworCQlpZiAocGNpX3doaXRlbGlzdF9jb3VudCA+IDAgKSB7CisJCQlpZiAoY2hlY2tfZGV2X29uX2xpc3QocGNpX3doaXRlbGlzdCwKKwkJCQkJcGNpX3doaXRlbGlzdF9jb3VudCwgZGV2KSkKKwkJCQlmbihkZXYpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIGlmIG5vIHdoaXRlbGlzdCwgdGhlbiBjaGVjayBpZiB0aGlzIGRldmljZXMgaXMKKwkJCSAqIGJsYWNrbGlzdGVkCisJCQkgKi8KKwkJCWlmICghY2hlY2tfZGV2X29uX2xpc3QocGNpX2JsYWNrbGlzdCwKKwkJCQkJcGNpX2JsYWNrbGlzdF9jb3VudCwgZGV2KSkKKwkJCQlmbihkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkb19wY2lfcGFyaXR5X2NoZWNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYmVmb3JlX2NvdW50OworCisJZGVidWdmMygiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKCFjaGVja19wY2lfcGFyaXR5KQorCQlyZXR1cm47CisKKwliZWZvcmVfY291bnQgPSBhdG9taWNfcmVhZCgmcGNpX3Bhcml0eV9jb3VudCk7CisKKwkvKiBzY2FuIGFsbCBQQ0kgZGV2aWNlcyBsb29raW5nIGZvciBhIFBhcml0eSBFcnJvciBvbiBkZXZpY2VzIGFuZAorCSAqIGJyaWRnZXMKKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZWRhY19wY2lfZGV2X3Bhcml0eV9pdGVyYXRvcihlZGFjX3BjaV9kZXZfcGFyaXR5X3Rlc3QpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIE9ubHkgaWYgb3BlcmF0b3IgaGFzIHNlbGVjdGVkIHBhbmljIG9uIFBDSSBFcnJvciAqLworCWlmIChwYW5pY19vbl9wY2lfcGFyaXR5KSB7CisJCS8qIElmIHRoZSBjb3VudCBpcyBkaWZmZXJlbnQgJ2FmdGVyJyBmcm9tICdiZWZvcmUnICovCisJCWlmIChiZWZvcmVfY291bnQgIT0gYXRvbWljX3JlYWQoJnBjaV9wYXJpdHlfY291bnQpKQorCQkJcGFuaWMoIkVEQUM6IFBDSSBQYXJpdHkgRXJyb3IiKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wY2lfcGFyaXR5X2Vycm9ycyh2b2lkKQoreworCS8qIENsZWFyIGFueSBQQ0kgYnVzIHBhcml0eSBlcnJvcnMgdGhhdCBkZXZpY2VzIGluaXRpYWxseSBoYXZlIGxvZ2dlZAorCSAqIGluIHRoZWlyIHJlZ2lzdGVycy4KKwkgKi8KKwllZGFjX3BjaV9kZXZfcGFyaXR5X2l0ZXJhdG9yKGVkYWNfcGNpX2Rldl9wYXJpdHlfY2xlYXIpOworfQorCisjZWxzZQkvKiBDT05GSUdfUENJICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19wY2lfcGFyaXR5X2NoZWNrKHZvaWQpCit7CisJLyogbm8tb3AgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BjaV9wYXJpdHlfZXJyb3JzKHZvaWQpCit7CisJLyogbm8tb3AgKi8KK30KKworc3RhdGljIHZvaWQgZWRhY19zeXNmc19wY2lfdGVhcmRvd24odm9pZCkKK3sKK30KKworc3RhdGljIGludCBlZGFjX3N5c2ZzX3BjaV9zZXR1cCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKwogI2lmbmRlZiBESVNBQkxFX0VEQUNfU1lTRlMKIAogLyogRURBQyBzeXNmcyBDU1JPVyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1ldGhvZHMgKi8KQEAgLTExMzIsNyArMTM4Myw3IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBjcmVhdGUgYSBzeW1saW5rIGZvciB0aGUgZGV2aWNlICovCi0JZXJyID0gc3lzZnNfY3JlYXRlX2xpbmsoZWRhY19tY2lfa29iaiwgJm1jaS0+cGRldi0+ZGV2LmtvYmosCisJZXJyID0gc3lzZnNfY3JlYXRlX2xpbmsoZWRhY19tY2lfa29iaiwgJm1jaS0+ZGV2LT5rb2JqLAogCQkJCUVEQUNfREVWSUNFX1NZTUxJTkspOwogCiAJaWYgKGVycikKQEAgLTEyMzgsNyArMTQ4OSw3IEBACiAJZGVidWdmNCgiXHRtY2ktPmVkYWNfY2hlY2sgPSAlcFxuIiwgbWNpLT5lZGFjX2NoZWNrKTsKIAlkZWJ1Z2YzKCJcdG1jaS0+bnJfY3Nyb3dzID0gJWQsIGNzcm93cyA9ICVwXG4iLAogCQltY2ktPm5yX2Nzcm93cywgbWNpLT5jc3Jvd3MpOwotCWRlYnVnZjMoIlx0cGRldiA9ICVwXG4iLCBtY2ktPnBkZXYpOworCWRlYnVnZjMoIlx0ZGV2ID0gJXBcbiIsIG1jaS0+ZGV2KTsKIAlkZWJ1Z2YzKCJcdG1vZF9uYW1lOmN0bF9uYW1lID0gJXM6JXNcbiIsCiAJCW1jaS0+bW9kX25hbWUsIG1jaS0+Y3RsX25hbWUpOwogCWRlYnVnZjMoIlx0cHZ0X2luZm8gPSAlcFxuXG4iLCBtY2ktPnB2dF9pbmZvKTsKQEAgLTEzNjMsNyArMTYxNCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlZGFjX21jX2ZyZWUpOwogCi1zdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqZmluZF9tY2lfYnlfcGRldihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBzdHJ1Y3QgbWVtX2N0bF9pbmZvICpmaW5kX21jaV9ieV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOwpAQCAtMTM3Myw1NCArMTYyNCw1MyBAQAogCWxpc3RfZm9yX2VhY2goaXRlbSwgJm1jX2RldmljZXMpIHsKIAkJbWNpID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgbWVtX2N0bF9pbmZvLCBsaW5rKTsKIAotCQlpZiAobWNpLT5wZGV2ID09IHBkZXYpCisJCWlmIChtY2ktPmRldiA9PSBkZXYpCiAJCQlyZXR1cm4gbWNpOwogCX0KIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGFkZF9tY190b19nbG9iYWxfbGlzdChzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCisvKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBjYWxsZXIgbXVzdAorICogYXNzaWduIGEgdW5pcXVlIHZhbHVlIHRvIG1jaS0+bWNfaWR4LgorICovCitzdGF0aWMgaW50IGFkZF9tY190b19nbG9iYWxfbGlzdCAoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sICppbnNlcnRfYmVmb3JlOwogCXN0cnVjdCBtZW1fY3RsX2luZm8gKnA7Ci0JaW50IGk7CiAKLQlpZiAobGlzdF9lbXB0eSgmbWNfZGV2aWNlcykpIHsKLQkJbWNpLT5tY19pZHggPSAwOwotCQlpbnNlcnRfYmVmb3JlID0gJm1jX2RldmljZXM7Ci0JfSBlbHNlIHsKLQkJaWYgKGZpbmRfbWNpX2J5X3BkZXYobWNpLT5wZGV2KSkgewotCQkJZWRhY19wcmludGsoS0VSTl9XQVJOSU5HLCBFREFDX01DLAotCQkJCSIlcyAoJXMpICVzICVzIGFscmVhZHkgYXNzaWduZWQgJWRcbiIsCi0JCQkJbWNpLT5wZGV2LT5kZXYuYnVzX2lkLAotCQkJCXBjaV9uYW1lKG1jaS0+cGRldiksIG1jaS0+bW9kX25hbWUsCi0JCQkJbWNpLT5jdGxfbmFtZSwgbWNpLT5tY19pZHgpOwotCQkJcmV0dXJuIDE7CisJaW5zZXJ0X2JlZm9yZSA9ICZtY19kZXZpY2VzOworCisJaWYgKHVubGlrZWx5KChwID0gZmluZF9tY2lfYnlfZGV2KG1jaS0+ZGV2KSkgIT0gTlVMTCkpCisJCWdvdG8gZmFpbDA7CisKKwlsaXN0X2Zvcl9lYWNoKGl0ZW0sICZtY19kZXZpY2VzKSB7CisJCXAgPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBtZW1fY3RsX2luZm8sIGxpbmspOworCisJCWlmIChwLT5tY19pZHggPj0gbWNpLT5tY19pZHgpIHsKKwkJCWlmICh1bmxpa2VseShwLT5tY19pZHggPT0gbWNpLT5tY19pZHgpKQorCQkJCWdvdG8gZmFpbDE7CisKKwkJCWluc2VydF9iZWZvcmUgPSBpdGVtOworCQkJYnJlYWs7CiAJCX0KLQotCQlpbnNlcnRfYmVmb3JlID0gTlVMTDsKLQkJaSA9IDA7Ci0KLQkJbGlzdF9mb3JfZWFjaChpdGVtLCAmbWNfZGV2aWNlcykgewotCQkJcCA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IG1lbV9jdGxfaW5mbywgbGluayk7Ci0KLQkJCWlmIChwLT5tY19pZHggIT0gaSkgewotCQkJCWluc2VydF9iZWZvcmUgPSBpdGVtOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpKys7Ci0JCX0KLQotCQltY2ktPm1jX2lkeCA9IGk7Ci0KLQkJaWYgKGluc2VydF9iZWZvcmUgPT0gTlVMTCkKLQkJCWluc2VydF9iZWZvcmUgPSAmbWNfZGV2aWNlczsKIAl9CiAKIAlsaXN0X2FkZF90YWlsX3JjdSgmbWNpLT5saW5rLCBpbnNlcnRfYmVmb3JlKTsKIAlyZXR1cm4gMDsKKworZmFpbDA6CisJZWRhY19wcmludGsoS0VSTl9XQVJOSU5HLCBFREFDX01DLAorCQkgICAgIiVzICglcykgJXMgJXMgYWxyZWFkeSBhc3NpZ25lZCAlZFxuIiwgcC0+ZGV2LT5idXNfaWQsCisJCSAgICBkZXZfbmFtZShwLT5kZXYpLCBwLT5tb2RfbmFtZSwgcC0+Y3RsX25hbWUsIHAtPm1jX2lkeCk7CisJcmV0dXJuIDE7CisKK2ZhaWwxOgorCWVkYWNfcHJpbnRrKEtFUk5fV0FSTklORywgRURBQ19NQywKKwkJICAgICJidWcgaW4gbG93LWxldmVsIGRyaXZlcjogYXR0ZW1wdCB0byBhc3NpZ25cbiIKKwkJICAgICIgICAgZHVwbGljYXRlIG1jX2lkeCAlZCBpbiAlcygpXG4iLCBwLT5tY19pZHgsIF9fZnVuY19fKTsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgY29tcGxldGVfbWNfbGlzdF9kZWwoc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtMTQ0NCw2ICsxNjk0LDcgQEAKICAqIGVkYWNfbWNfYWRkX21jOiBJbnNlcnQgdGhlICdtY2knIHN0cnVjdHVyZSBpbnRvIHRoZSBtY2kgZ2xvYmFsIGxpc3QgYW5kCiAgKiAgICAgICAgICAgICAgICAgY3JlYXRlIHN5c2ZzIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIG1jaSBzdHJ1Y3R1cmUKICAqIEBtY2k6IHBvaW50ZXIgdG8gdGhlIG1jaSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3QKKyAqIEBtY19pZHg6IEEgdW5pcXVlIG51bWVyaWMgaWRlbnRpZmllciB0byBiZSBhc3NpZ25lZCB0byB0aGUgJ21jaScgc3RydWN0dXJlLgogICoKICAqIFJldHVybjoKICAqCTAJU3VjY2VzcwpAQCAtMTQ1MSw5ICsxNzAyLDEwIEBACiAgKi8KIAogLyogRklYTUUgLSBzaG91bGQgYSB3YXJuaW5nIGJlIHByaW50ZWQgaWYgbm8gZXJyb3IgZGV0ZWN0aW9uPyBjb3JyZWN0aW9uPyAqLwotaW50IGVkYWNfbWNfYWRkX21jKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK2ludCBlZGFjX21jX2FkZF9tYyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGludCBtY19pZHgpCiB7CiAJZGVidWdmMCgiJXMoKVxuIiwgX19mdW5jX18pOworCW1jaS0+bWNfaWR4ID0gbWNfaWR4OwogI2lmZGVmIENPTkZJR19FREFDX0RFQlVHCiAJaWYgKGVkYWNfZGVidWdfbGV2ZWwgPj0gMykKIAkJZWRhY19tY19kdW1wX21jaShtY2kpOwpAQCAtMTQ4Niw4ICsxNzM4LDggQEAKICAgICAgICAgfQogCiAJLyogUmVwb3J0IGFjdGlvbiB0YWtlbiAqLwotCWVkYWNfbWNfcHJpbnRrKG1jaSwgS0VSTl9JTkZPLCAiR2l2aW5nIG91dCBkZXZpY2UgdG8gJXMgJXM6IFBDSSAlc1xuIiwKLQkJbWNpLT5tb2RfbmFtZSwgbWNpLT5jdGxfbmFtZSwgcGNpX25hbWUobWNpLT5wZGV2KSk7CisJZWRhY19tY19wcmludGsobWNpLCBLRVJOX0lORk8sICJHaXZpbmcgb3V0IGRldmljZSB0byAlcyAlczogREVWICVzXG4iLAorCQltY2ktPm1vZF9uYW1lLCBtY2ktPmN0bF9uYW1lLCBkZXZfbmFtZShtY2ktPmRldikpOwogCiAJdXAoJm1lbV9jdGxzX211dGV4KTsKIAlyZXR1cm4gMDsKQEAgLTE1MDQsMTggKzE3NTYsMTggQEAKIC8qKgogICogZWRhY19tY19kZWxfbWM6IFJlbW92ZSBzeXNmcyBlbnRyaWVzIGZvciBzcGVjaWZpZWQgbWNpIHN0cnVjdHVyZSBhbmQKICAqICAgICAgICAgICAgICAgICByZW1vdmUgbWNpIHN0cnVjdHVyZSBmcm9tIGdsb2JhbCBsaXN0Ci0gKiBAcGRldjogUG9pbnRlciB0byAnc3RydWN0IHBjaV9kZXYnIHJlcHJlc2VudGluZyBtY2kgc3RydWN0dXJlIHRvIHJlbW92ZS4KKyAqIEBwZGV2OiBQb2ludGVyIHRvICdzdHJ1Y3QgZGV2aWNlJyByZXByZXNlbnRpbmcgbWNpIHN0cnVjdHVyZSB0byByZW1vdmUuCiAgKgogICogUmV0dXJuIHBvaW50ZXIgdG8gcmVtb3ZlZCBtY2kgc3RydWN0dXJlLCBvciBOVUxMIGlmIGRldmljZSBub3QgZm91bmQuCiAgKi8KLXN0cnVjdCBtZW1fY3RsX2luZm8gKiBlZGFjX21jX2RlbF9tYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0cnVjdCBtZW1fY3RsX2luZm8gKiBlZGFjX21jX2RlbF9tYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpOwogCiAJZGVidWdmMCgiTUM6ICVzKClcbiIsIF9fZnVuY19fKTsKIAlkb3duKCZtZW1fY3Rsc19tdXRleCk7CiAKLQlpZiAoKG1jaSA9IGZpbmRfbWNpX2J5X3BkZXYocGRldikpID09IE5VTEwpIHsKKwlpZiAoKG1jaSA9IGZpbmRfbWNpX2J5X2RldihkZXYpKSA9PSBOVUxMKSB7CiAJCXVwKCZtZW1fY3Rsc19tdXRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTE1MjQsOCArMTc3Niw4IEBACiAJZGVsX21jX2Zyb21fZ2xvYmFsX2xpc3QobWNpKTsKIAl1cCgmbWVtX2N0bHNfbXV0ZXgpOwogCWVkYWNfcHJpbnRrKEtFUk5fSU5GTywgRURBQ19NQywKLQkJIlJlbW92ZWQgZGV2aWNlICVkIGZvciAlcyAlczogUENJICVzXG4iLCBtY2ktPm1jX2lkeCwKLQkJbWNpLT5tb2RfbmFtZSwgbWNpLT5jdGxfbmFtZSwgcGNpX25hbWUobWNpLT5wZGV2KSk7CisJCSJSZW1vdmVkIGRldmljZSAlZCBmb3IgJXMgJXM6IERFViAlc1xuIiwgbWNpLT5tY19pZHgsCisJCW1jaS0+bW9kX25hbWUsIG1jaS0+Y3RsX25hbWUsIGRldl9uYW1lKG1jaS0+ZGV2KSk7CiAJcmV0dXJuIG1jaTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVkYWNfbWNfZGVsX21jKTsKQEAgLTE3MzksMjQ0ICsxOTkxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVkYWNfbWNfaGFuZGxlX3VlX25vX2luZm8pOwogCi0jaWZkZWYgQ09ORklHX1BDSQotCi1zdGF0aWMgdTE2IGdldF9wY2lfcGFyaXR5X3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgc2Vjb25kYXJ5KQotewotCWludCB3aGVyZTsKLQl1MTYgc3RhdHVzOwotCi0Jd2hlcmUgPSBzZWNvbmRhcnkgPyBQQ0lfU0VDX1NUQVRVUyA6IFBDSV9TVEFUVVM7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCB3aGVyZSwgJnN0YXR1cyk7Ci0KLQkvKiBJZiB3ZSBnZXQgYmFjayAweEZGRkYgdGhlbiB3ZSBtdXN0IHN1c3BlY3QgdGhhdCB0aGUgY2FyZCBoYXMgYmVlbgotCSAqIHB1bGxlZCBidXQgdGhlIExpbnV4IFBDSSBsYXllciBoYXMgbm90IHlldCBmaW5pc2hlZCBjbGVhbmluZyB1cC4KLQkgKiBXZSBkb24ndCB3YW50IHRvIHJlcG9ydCBvbiBzdWNoIGRldmljZXMKLQkgKi8KLQotCWlmIChzdGF0dXMgPT0gMHhGRkZGKSB7Ci0JCXUzMiBzYW5pdHk7Ci0KLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMCwgJnNhbml0eSk7Ci0KLQkJaWYgKHNhbml0eSA9PSAweEZGRkZGRkZGKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RhdHVzICY9IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZIHwgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIHwKLQkJUENJX1NUQVRVU19QQVJJVFk7Ci0KLQlpZiAoc3RhdHVzKQotCQkvKiByZXNldCBvbmx5IHRoZSBiaXRzIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHdoZXJlLCBzdGF0dXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotdHlwZWRlZiB2b2lkICgqcGNpX3Bhcml0eV9jaGVja19mbl90KSAoc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KLS8qIENsZWFyIGFueSBQQ0kgcGFyaXR5IGVycm9ycyBsb2dnZWQgYnkgdGhpcyBkZXZpY2UuICovCi1zdGF0aWMgdm9pZCBlZGFjX3BjaV9kZXZfcGFyaXR5X2NsZWFyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JdTggaGVhZGVyX3R5cGU7Ci0KLQlnZXRfcGNpX3Bhcml0eV9zdGF0dXMoZGV2LCAwKTsKLQotCS8qIHJlYWQgdGhlIGRldmljZSBUWVBFLCBsb29raW5nIGZvciBicmlkZ2VzICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQlpZiAoKGhlYWRlcl90eXBlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKLQkJZ2V0X3BjaV9wYXJpdHlfc3RhdHVzKGRldiwgMSk7Ci19Ci0KLS8qCi0gKiAgUENJIFBhcml0eSBwb2xsaW5nCi0gKgotICovCi1zdGF0aWMgdm9pZCBlZGFjX3BjaV9kZXZfcGFyaXR5X3Rlc3Qoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1MTYgc3RhdHVzOwotCXU4ICBoZWFkZXJfdHlwZTsKLQotCS8qIHJlYWQgdGhlIFNUQVRVUyByZWdpc3RlciBvbiB0aGlzIGRldmljZQotCSAqLwotCXN0YXR1cyA9IGdldF9wY2lfcGFyaXR5X3N0YXR1cyhkZXYsIDApOwotCi0JZGVidWdmMigiUENJIFNUQVRVUz0gMHglMDR4ICVzXG4iLCBzdGF0dXMsIGRldi0+ZGV2LmJ1c19pZCApOwotCi0JLyogY2hlY2sgdGhlIHN0YXR1cyByZWcgZm9yIGVycm9ycyAqLwotCWlmIChzdGF0dXMpIHsKLQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IpKQotCQkJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX1BDSSwKLQkJCQkiU2lnbmFsZWQgU3lzdGVtIEVycm9yIG9uICVzXG4iLAotCQkJCXBjaV9uYW1lKGRldikpOwotCi0JCWlmIChzdGF0dXMgJiAoUENJX1NUQVRVU19QQVJJVFkpKSB7Ci0JCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfUENJLAotCQkJCSJNYXN0ZXIgRGF0YSBQYXJpdHkgRXJyb3Igb24gJXNcbiIsCi0JCQkJcGNpX25hbWUoZGV2KSk7Ci0KLQkJCWF0b21pY19pbmMoJnBjaV9wYXJpdHlfY291bnQpOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpIHsKLQkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19QQ0ksCi0JCQkJIkRldGVjdGVkIFBhcml0eSBFcnJvciBvbiAlc1xuIiwKLQkJCQlwY2lfbmFtZShkZXYpKTsKLQotCQkJYXRvbWljX2luYygmcGNpX3Bhcml0eV9jb3VudCk7Ci0JCX0KLQl9Ci0KLQkvKiByZWFkIHRoZSBkZXZpY2UgVFlQRSwgbG9va2luZyBmb3IgYnJpZGdlcyAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCi0JZGVidWdmMigiUENJIEhFQURFUiBUWVBFPSAweCUwMnggJXNcbiIsIGhlYWRlcl90eXBlLCBkZXYtPmRldi5idXNfaWQgKTsKLQotCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0JCS8qIE9uIGJyaWRnZXMsIG5lZWQgdG8gZXhhbWluZSBzZWNvbmRhcnkgc3RhdHVzIHJlZ2lzdGVyICAqLwotCQlzdGF0dXMgPSBnZXRfcGNpX3Bhcml0eV9zdGF0dXMoZGV2LCAxKTsKLQotCQlkZWJ1Z2YyKCJQQ0kgU0VDX1NUQVRVUz0gMHglMDR4ICVzXG4iLAotCQkJCXN0YXR1cywgZGV2LT5kZXYuYnVzX2lkICk7Ci0KLQkJLyogY2hlY2sgdGhlIHNlY29uZGFyeSBzdGF0dXMgcmVnIGZvciBlcnJvcnMgKi8KLQkJaWYgKHN0YXR1cykgewotCQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IpKQotCQkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19QQ0ksICJCcmlkZ2UgIgotCQkJCQkiU2lnbmFsZWQgU3lzdGVtIEVycm9yIG9uICVzXG4iLAotCQkJCQlwY2lfbmFtZShkZXYpKTsKLQotCQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1BBUklUWSkpIHsKLQkJCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfUENJLCAiQnJpZGdlICIKLQkJCQkJIk1hc3RlciBEYXRhIFBhcml0eSBFcnJvciBvbiAiCi0JCQkJCSIlc1xuIiwgcGNpX25hbWUoZGV2KSk7Ci0KLQkJCQlhdG9taWNfaW5jKCZwY2lfcGFyaXR5X2NvdW50KTsKLQkJCX0KLQotCQkJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpIHsKLQkJCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfUENJLCAiQnJpZGdlICIKLQkJCQkJIkRldGVjdGVkIFBhcml0eSBFcnJvciBvbiAlc1xuIiwKLQkJCQkJcGNpX25hbWUoZGV2KSk7Ci0KLQkJCQlhdG9taWNfaW5jKCZwY2lfcGFyaXR5X2NvdW50KTsKLQkJCX0KLQkJfQotCX0KLX0KLQotLyoKLSAqIGNoZWNrX2Rldl9vbl9saXN0OiBTY2FuIGZvciBhIFBDSSBkZXZpY2Ugb24gYSB3aGl0ZS9ibGFjayBsaXN0Ci0gKiBAbGlzdDoJYW4gRURBQyAgJmVkYWNfcGNpX2RldmljZV9saXN0ICB3aGl0ZS9ibGFjayBsaXN0IHBvaW50ZXIKLSAqIEBmcmVlX2luZGV4OglpbmRleCBvZiBuZXh0IGZyZWUgZW50cnkgb24gdGhlIGxpc3QKLSAqIEBwY2lfZGV2OglQQ0kgRGV2aWNlIHBvaW50ZXIKLSAqCi0gKiBzZWUgaWYgbGlzdCBjb250YWlucyB0aGUgZGV2aWNlLgotICoKLSAqIFJldHVybnM6ICAJMCBub3QgZm91bmQKLSAqCQkxIGZvdW5kIG9uIGxpc3QKLSAqLwotc3RhdGljIGludCBjaGVja19kZXZfb25fbGlzdChzdHJ1Y3QgZWRhY19wY2lfZGV2aWNlX2xpc3QgKmxpc3QsCi0JCWludCBmcmVlX2luZGV4LCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBpOwotCWludCByYyA9IDA7ICAgICAvKiBBc3N1bWUgbm90IGZvdW5kICovCi0JdW5zaWduZWQgc2hvcnQgdmVuZG9yPWRldi0+dmVuZG9yOwotCXVuc2lnbmVkIHNob3J0IGRldmljZT1kZXYtPmRldmljZTsKLQotCS8qIFNjYW4gdGhlIGxpc3QsIGxvb2tpbmcgZm9yIGEgdmVuZG9yL2RldmljZSBtYXRjaCAqLwotCWZvciAoaSA9IDA7IGkgPCBmcmVlX2luZGV4OyBpKyssIGxpc3QrKyApIHsKLQkJaWYgKChsaXN0LT52ZW5kb3IgPT0gdmVuZG9yICkgJiYgKGxpc3QtPmRldmljZSA9PSBkZXZpY2UgKSkgewotCQkJcmMgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBwY2lfZGV2IHBhcml0eSBsaXN0IGl0ZXJhdG9yCi0gKglTY2FuIHRoZSBQQ0kgZGV2aWNlIGxpc3QgZm9yIG9uZSBpdGVyYXRpb24sIGxvb2tpbmcgZm9yIFNFUlJPUnMKLSAqCU1hc3RlciBQYXJpdHkgRVJST1JTIG9yIFBhcml0eSBFUlJPUnMgb24gcHJpbWFyeSBvciBzZWNvbmRhcnkgZGV2aWNlcwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZWRhY19wY2lfZGV2X3Bhcml0eV9pdGVyYXRvcihwY2lfcGFyaXR5X2NoZWNrX2ZuX3QgZm4pCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0KLQkvKiByZXF1ZXN0IGZvciBrZXJuZWwgYWNjZXNzIHRvIHRoZSBuZXh0IFBDSSBkZXZpY2UsIGlmIGFueSwKLQkgKiBhbmQgd2hpbGUgd2UgYXJlIGxvb2tpbmcgYXQgaXQgaGF2ZSBpdHMgcmVmZXJlbmNlIGNvdW50Ci0JICogYnVtcGVkIHVudGlsIHdlIGFyZSBkb25lIHdpdGggaXQKLQkgKi8KLQl3aGlsZSgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewotCQkvKiBpZiB3aGl0ZWxpc3QgZXhpc3RzIHRoZW4gaXQgaGFzIHByaW9yaXR5LCBzbyBvbmx5IHNjYW4KLQkJICogdGhvc2UgZGV2aWNlcyBvbiB0aGUgd2hpdGVsaXN0Ci0JCSAqLwotCQlpZiAocGNpX3doaXRlbGlzdF9jb3VudCA+IDAgKSB7Ci0JCQlpZiAoY2hlY2tfZGV2X29uX2xpc3QocGNpX3doaXRlbGlzdCwKLQkJCQkJcGNpX3doaXRlbGlzdF9jb3VudCwgZGV2KSkKLQkJCQlmbihkZXYpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIGlmIG5vIHdoaXRlbGlzdCwgdGhlbiBjaGVjayBpZiB0aGlzIGRldmljZXMgaXMKLQkJCSAqIGJsYWNrbGlzdGVkCi0JCQkgKi8KLQkJCWlmICghY2hlY2tfZGV2X29uX2xpc3QocGNpX2JsYWNrbGlzdCwKLQkJCQkJcGNpX2JsYWNrbGlzdF9jb3VudCwgZGV2KSkKLQkJCQlmbihkZXYpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19wY2lfcGFyaXR5X2NoZWNrKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYmVmb3JlX2NvdW50OwotCi0JZGVidWdmMygiJXMoKVxuIiwgX19mdW5jX18pOwotCi0JaWYgKCFjaGVja19wY2lfcGFyaXR5KQotCQlyZXR1cm47Ci0KLQliZWZvcmVfY291bnQgPSBhdG9taWNfcmVhZCgmcGNpX3Bhcml0eV9jb3VudCk7Ci0KLQkvKiBzY2FuIGFsbCBQQ0kgZGV2aWNlcyBsb29raW5nIGZvciBhIFBhcml0eSBFcnJvciBvbiBkZXZpY2VzIGFuZAotCSAqIGJyaWRnZXMKLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZWRhY19wY2lfZGV2X3Bhcml0eV9pdGVyYXRvcihlZGFjX3BjaV9kZXZfcGFyaXR5X3Rlc3QpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIE9ubHkgaWYgb3BlcmF0b3IgaGFzIHNlbGVjdGVkIHBhbmljIG9uIFBDSSBFcnJvciAqLwotCWlmIChwYW5pY19vbl9wY2lfcGFyaXR5KSB7Ci0JCS8qIElmIHRoZSBjb3VudCBpcyBkaWZmZXJlbnQgJ2FmdGVyJyBmcm9tICdiZWZvcmUnICovCi0JCWlmIChiZWZvcmVfY291bnQgIT0gYXRvbWljX3JlYWQoJnBjaV9wYXJpdHlfY291bnQpKQotCQkJcGFuaWMoIkVEQUM6IFBDSSBQYXJpdHkgRXJyb3IiKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wY2lfcGFyaXR5X2Vycm9ycyh2b2lkKQotewotCS8qIENsZWFyIGFueSBQQ0kgYnVzIHBhcml0eSBlcnJvcnMgdGhhdCBkZXZpY2VzIGluaXRpYWxseSBoYXZlIGxvZ2dlZAotCSAqIGluIHRoZWlyIHJlZ2lzdGVycy4KLQkgKi8KLQllZGFjX3BjaV9kZXZfcGFyaXR5X2l0ZXJhdG9yKGVkYWNfcGNpX2Rldl9wYXJpdHlfY2xlYXIpOwotfQotCi0jZWxzZSAgLyogQ09ORklHX1BDSSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fcGNpX3Bhcml0eV9jaGVjayh2b2lkKQotewotCS8qIG5vLW9wICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wY2lfcGFyaXR5X2Vycm9ycyh2b2lkKQotewotCS8qIG5vLW9wICovCi19Ci0KLSNlbmRpZiAgLyogQ09ORklHX1BDSSAqLwogCiAvKgogICogSXRlcmF0ZSBvdmVyIGFsbCBNQyBpbnN0YW5jZXMgYW5kIGNoZWNrIGZvciBFQ0MsIGV0IGFsLCBlcnJvcnMKQEAgLTIwOTYsMTAgKzIxMTAsMTIgQEAKIAogbW9kdWxlX3BhcmFtKHBhbmljX29uX3VlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwYW5pY19vbl91ZSwgIlBhbmljIG9uIHVuY29ycmVjdGVkIGVycm9yOiAwPW9mZiAxPW9uIik7CisjaWZkZWYgQ09ORklHX1BDSQogbW9kdWxlX3BhcmFtKGNoZWNrX3BjaV9wYXJpdHksIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNoZWNrX3BjaV9wYXJpdHksICJDaGVjayBmb3IgUENJIGJ1cyBwYXJpdHkgZXJyb3JzOiAwPW9mZiAxPW9uIik7CiBtb2R1bGVfcGFyYW0ocGFuaWNfb25fcGNpX3Bhcml0eSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGFuaWNfb25fcGNpX3Bhcml0eSwgIlBhbmljIG9uIFBDSSBCdXMgUGFyaXR5IGVycm9yOiAwPW9mZiAxPW9uIik7CisjZW5kaWYKIG1vZHVsZV9wYXJhbShsb2dfdWUsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxvZ191ZSwgIkxvZyB1bmNvcnJlY3RhYmxlIGVycm9yIHRvIGNvbnNvbGU6IDA9b2ZmIDE9b24iKTsKIG1vZHVsZV9wYXJhbShsb2dfY2UsIGludCwgMDY0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5oIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuaAppbmRleCA4ZDllODM5Li5iZjZhYjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX0VEQUNfTUNfSF8KICNkZWZpbmUgX0VEQUNfTUNfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC03OSwxNSArNzgsMTcgQEAKIAogI2VuZGlmICAvKiAhQ09ORklHX0VEQUNfREVCVUcgKi8KIAotI2RlZmluZSBlZGFjX3hzdHIocykgZWRhY19zdHIocykKLSNkZWZpbmUgZWRhY19zdHIocykgI3MKLSNkZWZpbmUgRURBQ19NT0RfU1RSIGVkYWNfeHN0cihLQlVJTERfQkFTRU5BTUUpCi0KICNkZWZpbmUgQklUKHgpICgxIDw8ICh4KSkKIAogI2RlZmluZSBQQ0lfVkVORF9ERVYodmVuZCwgZGV2KSBQQ0lfVkVORE9SX0lEXyAjIyB2ZW5kLCBcCiAJUENJX0RFVklDRV9JRF8gIyMgdmVuZCAjIyBfICMjIGRldgogCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lIGRldl9uYW1lKGRldikgcGNpX25hbWUodG9fcGNpX2RldihkZXYpKQorI2Vsc2UKKyNkZWZpbmUgZGV2X25hbWUoZGV2KSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KS0+bmFtZQorI2VuZGlmCisKIC8qIG1lbW9yeSBkZXZpY2VzICovCiBlbnVtIGRldl90eXBlIHsKIAlERVZfVU5LTk9XTiA9IDAsCkBAIC0zMjcsMTAgKzMyOCwxMCBAQAogCXN0cnVjdCBjc3Jvd19pbmZvICpjc3Jvd3M7CiAJLyoKIAkgKiBGSVhNRSAtIHdoYXQgYWJvdXQgY29udHJvbGxlcnMgb24gb3RoZXIgYnVzc2VzPyAtIElEcyBtdXN0IGJlCi0JICogdW5pcXVlLiAgcGRldiBwb2ludGVyIHNob3VsZCBiZSBzdWZmaWNpZW50bHkgdW5pcXVlLCBidXQKKwkgKiB1bmlxdWUuICBkZXYgcG9pbnRlciBzaG91bGQgYmUgc3VmZmljaWVudGx5IHVuaXF1ZSwgYnV0CiAJICogQlVTOlNMT1QuRlVOQyBudW1iZXJzIG1heSBub3QgYmUgdW5pcXVlLgogCSAqLwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAljb25zdCBjaGFyICptb2RfbmFtZTsKIAljb25zdCBjaGFyICptb2RfdmVyOwogCWNvbnN0IGNoYXIgKmN0bF9uYW1lOwpAQCAtMzUzLDYgKzM1NCw4IEBACiAJc3RydWN0IGNvbXBsZXRpb24ga29ial9jb21wbGV0ZTsKIH07CiAKKyNpZmRlZiBDT05GSUdfUENJCisKIC8qIHdyaXRlIGFsbCBvciBzb21lIGJpdHMgaW4gYSBieXRlLXJlZ2lzdGVyKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfd3JpdGVfYml0czgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBvZmZzZXQsIHU4IHZhbHVlLAogCQl1OCBtYXNrKQpAQCAtNDAxLDE0ICs0MDQsMTYgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIG9mZnNldCwgdmFsdWUpOwogfQogCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKIHZvaWQgZWRhY19tY19kdW1wX2NoYW5uZWwoc3RydWN0IGNoYW5uZWxfaW5mbyAqY2hhbik7CiB2b2lkIGVkYWNfbWNfZHVtcF9tY2koc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKTsKIHZvaWQgZWRhY19tY19kdW1wX2Nzcm93KHN0cnVjdCBjc3Jvd19pbmZvICpjc3Jvdyk7CiAjZW5kaWYgIC8qIENPTkZJR19FREFDX0RFQlVHICovCiAKLWV4dGVybiBpbnQgZWRhY19tY19hZGRfbWMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKTsKLWV4dGVybiBzdHJ1Y3QgbWVtX2N0bF9pbmZvICogZWRhY19tY19kZWxfbWMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworZXh0ZXJuIGludCBlZGFjX21jX2FkZF9tYyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksaW50IG1jX2lkeCk7CitleHRlcm4gc3RydWN0IG1lbV9jdGxfaW5mbyAqIGVkYWNfbWNfZGVsX21jKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGVkYWNfbWNfZmluZF9jc3Jvd19ieV9wYWdlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAkJCQkJdW5zaWduZWQgbG9uZyBwYWdlKTsKIGV4dGVybiB2b2lkIGVkYWNfbWNfc2NydWJfYmxvY2sodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pODI4NjBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k4Mjg2MF9lZGFjLmMKaW5kZXggZmQzNDIxNi4uZTRiYjI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4Mjg2MF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k4Mjg2MF9lZGFjLmMKQEAgLTksNyArOSw2IEBACiAgKiBieSBUaGF5bmUgSGFyYmF1Z2ggb2YgTGludXggTmV0d29yeC4gKGh0dHA6Ly9sbnhpLmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTcsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJlZGFjX21jLmgiCiAKKyNkZWZpbmUgIEk4Mjg2MF9SRVZJU0lPTiAiIFZlcjogMi4wLjEgIiBfX0RBVEVfXworI2RlZmluZSBFREFDX01PRF9TVFIJImk4Mjg2MF9lZGFjIgorCiAjZGVmaW5lIGk4Mjg2MF9wcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSBcCiAJZWRhY19wcmludGsobGV2ZWwsICJpODI4NjAiLCBmbXQsICMjYXJnKQogCkBAIC02MywxNyArNjUsMjEgQEAKIHN0YXRpYyB2b2lkIGk4Mjg2MF9nZXRfZXJyb3JfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCXN0cnVjdCBpODI4NjBfZXJyb3JfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCXBkZXYgPSB0b19wY2lfZGV2KG1jaS0+ZGV2KTsKKwogCS8qCiAJICogVGhpcyBpcyBhIG1lc3MgYmVjYXVzZSB0aGVyZSBpcyBubyBhdG9taWMgd2F5IHRvIHJlYWQgYWxsIHRoZQogCSAqIHJlZ2lzdGVycyBhdCBvbmNlIGFuZCB0aGUgcmVnaXN0ZXJzIGNhbiB0cmFuc2l0aW9uIGZyb20gQ0UgYmVpbmcKIAkgKiBvdmVyd3JpdHRlbiBieSBVRS4KIAkgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChtY2ktPnBkZXYsIEk4Mjg2MF9FUlJTVFMsICZpbmZvLT5lcnJzdHMpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtY2ktPnBkZXYsIEk4Mjg2MF9FQVAsICZpbmZvLT5lYXApOwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1jaS0+cGRldiwgSTgyODYwX0RFUlJDVExfU1RTLCAmaW5mby0+ZGVycnN5bik7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQobWNpLT5wZGV2LCBJODI4NjBfRVJSU1RTLCAmaW5mby0+ZXJyc3RzMik7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSTgyODYwX0VSUlNUUywgJmluZm8tPmVycnN0cyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIEk4Mjg2MF9FQVAsICZpbmZvLT5lYXApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIEk4Mjg2MF9ERVJSQ1RMX1NUUywgJmluZm8tPmRlcnJzeW4pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIEk4Mjg2MF9FUlJTVFMsICZpbmZvLT5lcnJzdHMyKTsKIAotCXBjaV93cml0ZV9iaXRzMTYobWNpLT5wZGV2LCBJODI4NjBfRVJSU1RTLCAweDAwMDMsIDB4MDAwMyk7CisJcGNpX3dyaXRlX2JpdHMxNihwZGV2LCBJODI4NjBfRVJSU1RTLCAweDAwMDMsIDB4MDAwMyk7CiAKIAkvKgogCSAqIElmIHRoZSBlcnJvciBpcyB0aGUgc2FtZSBmb3IgYm90aCByZWFkcyB0aGVuIHRoZSBmaXJzdCBzZXQgb2YgcmVhZHMKQEAgLTg0LDggKzkwLDggQEAKIAkJcmV0dXJuOwogCiAJaWYgKChpbmZvLT5lcnJzdHMgXiBpbmZvLT5lcnJzdHMyKSAmIDB4MDAwMykgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWNpLT5wZGV2LCBJODI4NjBfRUFQLCAmaW5mby0+ZWFwKTsKLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQobWNpLT5wZGV2LCBJODI4NjBfREVSUkNUTF9TVFMsCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBJODI4NjBfRUFQLCAmaW5mby0+ZWFwKTsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSTgyODYwX0RFUlJDVExfU1RTLAogCQkJCSZpbmZvLT5kZXJyc3luKTsKIAl9CiB9CkBAIC0xMjcsMTYgKzEzMyw1MSBAQAogCWk4Mjg2MF9wcm9jZXNzX2Vycm9yX2luZm8obWNpLCAmaW5mbywgMSk7CiB9CiAKK3N0YXRpYyB2b2lkIGk4Mjg2MF9pbml0X2Nzcm93cyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbGFzdF9jdW11bF9zaXplOworCXUxNiBtY2hjZmdfZGRpbTsgIC8qIERSQU0gRGF0YSBJbnRlZ3JpdHkgTW9kZSAwPW5vbmUsIDI9ZWRhYyAqLworCXUxNiB2YWx1ZTsKKwl1MzIgY3VtdWxfc2l6ZTsKKwlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3c7CisJaW50IGluZGV4OworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSTgyODYwX01DSENGRywgJm1jaGNmZ19kZGltKTsKKwltY2hjZmdfZGRpbSA9IG1jaGNmZ19kZGltICYgMHgxODA7CisJbGFzdF9jdW11bF9zaXplID0gMDsKKworCS8qIFRoZSBncm91cCByb3cgYm91bmRhcnkgKEdSQSkgcmVnIHZhbHVlcyBhcmUgYm91bmRhcnkgYWRkcmVzcworCSAqIGZvciBlYWNoIERSQU0gcm93IHdpdGggYSBncmFudWxhcml0eSBvZiAxNk1CLiAgR1JBIHJlZ3MgYXJlCisJICogY3VtdWxhdGl2ZTsgdGhlcmVmb3JlIEdSQTE1IHdpbGwgY29udGFpbiB0aGUgdG90YWwgbWVtb3J5IGNvbnRhaW5lZAorCSAqIGluIGFsbCBlaWdodCByb3dzLgorCSAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1jaS0+bnJfY3Nyb3dzOyBpbmRleCsrKSB7CisJCWNzcm93ID0gJm1jaS0+Y3Nyb3dzW2luZGV4XTsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSTgyODYwX0dCQSArIGluZGV4ICogMiwgJnZhbHVlKTsKKwkJY3VtdWxfc2l6ZSA9ICh2YWx1ZSAmIEk4Mjg2MF9HQkFfTUFTSykgPDwKKwkJICAgIChJODI4NjBfR0JBX1NISUZUIC0gUEFHRV9TSElGVCk7CisJCWRlYnVnZjMoIiVzKCk6ICglZCkgY3VtdWxfc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywgaW5kZXgsCisJCQljdW11bF9zaXplKTsKKworCQlpZiAoY3VtdWxfc2l6ZSA9PSBsYXN0X2N1bXVsX3NpemUpCisJCQljb250aW51ZTsJLyogbm90IHBvcHVsYXRlZCAqLworCisJCWNzcm93LT5maXJzdF9wYWdlID0gbGFzdF9jdW11bF9zaXplOworCQljc3Jvdy0+bGFzdF9wYWdlID0gY3VtdWxfc2l6ZSAtIDE7CisJCWNzcm93LT5ucl9wYWdlcyA9IGN1bXVsX3NpemUgLSBsYXN0X2N1bXVsX3NpemU7CisJCWxhc3RfY3VtdWxfc2l6ZSA9IGN1bXVsX3NpemU7CisJCWNzcm93LT5ncmFpbiA9IDEgPDwgMTI7CS8qIEk4Mjg2MF9FQVAgaGFzIDRLaUIgcmVvbHV0aW9uICovCisJCWNzcm93LT5tdHlwZSA9IE1FTV9STUJTOworCQljc3Jvdy0+ZHR5cGUgPSBERVZfVU5LTk9XTjsKKwkJY3Nyb3ctPmVkYWNfbW9kZSA9IG1jaGNmZ19kZGltID8gRURBQ19TRUNERUQgOiBFREFDX05PTkU7CisJfQorfQorCiBzdGF0aWMgaW50IGk4Mjg2MF9wcm9iZTEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBkZXZfaWR4KQogewotCWludCByYyA9IC1FTk9ERVY7Ci0JaW50IGluZGV4OwotCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2N1bXVsX3NpemU7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpOwogCXN0cnVjdCBpODI4NjBfZXJyb3JfaW5mbyBkaXNjYXJkOwogCi0JdTE2IG1jaGNmZ19kZGltOwkvKiBEUkFNIERhdGEgSW50ZWdyaXR5IE1vZGUgMD1ub25lLDI9ZWRhYyAqLwotCiAJLyogUkRSQU0gaGFzIGNoYW5uZWxzIGJ1dCB0aGVzZSBkb24ndCBtYXAgb250byB0aGUgYWJzdHJhY3Rpb25zIHRoYXQKIAkgICBlZGFjIHVzZXMuCiAJICAgVGhlIGRldmljZSBncm91cHMgZnJvbSB0aGUgR1JBIHJlZ2lzdGVycyBzZWVtIHRvIG1hcCByZWFzb25hYmx5CkBAIC0xNTEsNjcgKzE5MiwzNSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRlYnVnZjMoIiVzKCk6IGluaXQgbWNpXG4iLCBfX2Z1bmNfXyk7Ci0JbWNpLT5wZGV2ID0gcGRldjsKKwltY2ktPmRldiA9ICZwZGV2LT5kZXY7CiAJbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19ERFI7Ci0KIAltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNfRkxBR19OT05FIHwgRURBQ19GTEFHX1NFQ0RFRDsKIAkvKiBJIm0gbm90IHN1cmUgYWJvdXQgdGhpcyBidXQgSSB0aGluayB0aGF0IGFsbCBSRFJBTSBpcyBTRUNERUQgKi8KIAltY2ktPmVkYWNfY2FwID0gRURBQ19GTEFHX1NFQ0RFRDsKLQkvKiBhZGp1c3QgRkxBR1MgKi8KLQogCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7Ci0JbWNpLT5tb2RfdmVyID0gIiRSZXZpc2lvbjogMS4xLjIuNiAkIjsKKwltY2ktPm1vZF92ZXIgPSBJODI4NjBfUkVWSVNJT047CiAJbWNpLT5jdGxfbmFtZSA9IGk4Mjg2MF9kZXZzW2Rldl9pZHhdLmN0bF9uYW1lOwogCW1jaS0+ZWRhY19jaGVjayA9IGk4Mjg2MF9jaGVjazsKIAltY2ktPmN0bF9wYWdlX3RvX3BoeXMgPSBOVUxMOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQobWNpLT5wZGV2LCBJODI4NjBfTUNIQ0ZHLCAmbWNoY2ZnX2RkaW0pOwotCW1jaGNmZ19kZGltID0gbWNoY2ZnX2RkaW0gJiAweDE4MDsKLQotCS8qCi0JICogVGhlIGdyb3VwIHJvdyBib3VuZGFyeSAoR1JBKSByZWcgdmFsdWVzIGFyZSBib3VuZGFyeSBhZGRyZXNzCi0JICogZm9yIGVhY2ggRFJBTSByb3cgd2l0aCBhIGdyYW51bGFyaXR5IG9mIDE2TUIuICBHUkEgcmVncyBhcmUKLQkgKiBjdW11bGF0aXZlOyB0aGVyZWZvcmUgR1JBMTUgd2lsbCBjb250YWluIHRoZSB0b3RhbCBtZW1vcnkgY29udGFpbmVkCi0JICogaW4gYWxsIGVpZ2h0IHJvd3MuCi0JICovCi0JZm9yIChsYXN0X2N1bXVsX3NpemUgPSBpbmRleCA9IDA7IGluZGV4IDwgbWNpLT5ucl9jc3Jvd3M7IGluZGV4KyspIHsKLQkJdTE2IHZhbHVlOwotCQl1MzIgY3VtdWxfc2l6ZTsKLQkJc3RydWN0IGNzcm93X2luZm8gKmNzcm93ID0gJm1jaS0+Y3Nyb3dzW2luZGV4XTsKLQotCQlwY2lfcmVhZF9jb25maWdfd29yZChtY2ktPnBkZXYsIEk4Mjg2MF9HQkEgKyBpbmRleCAqIDIsCi0JCQkJJnZhbHVlKTsKLQotCQljdW11bF9zaXplID0gKHZhbHVlICYgSTgyODYwX0dCQV9NQVNLKSA8PAotCQkgICAgKEk4Mjg2MF9HQkFfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQkJZGVidWdmMygiJXMoKTogKCVkKSBjdW11bF9zaXplIDB4JXhcbiIsIF9fZnVuY19fLCBpbmRleCwKLQkJCWN1bXVsX3NpemUpOwotCi0JCWlmIChjdW11bF9zaXplID09IGxhc3RfY3VtdWxfc2l6ZSkKLQkJCWNvbnRpbnVlOwkvKiBub3QgcG9wdWxhdGVkICovCi0KLQkJY3Nyb3ctPmZpcnN0X3BhZ2UgPSBsYXN0X2N1bXVsX3NpemU7Ci0JCWNzcm93LT5sYXN0X3BhZ2UgPSBjdW11bF9zaXplIC0gMTsKLQkJY3Nyb3ctPm5yX3BhZ2VzID0gY3VtdWxfc2l6ZSAtIGxhc3RfY3VtdWxfc2l6ZTsKLQkJbGFzdF9jdW11bF9zaXplID0gY3VtdWxfc2l6ZTsKLQkJY3Nyb3ctPmdyYWluID0gMSA8PCAxMjsgIC8qIEk4Mjg2MF9FQVAgaGFzIDRLaUIgcmVvbHV0aW9uICovCi0JCWNzcm93LT5tdHlwZSA9IE1FTV9STUJTOwotCQljc3Jvdy0+ZHR5cGUgPSBERVZfVU5LTk9XTjsKLQkJY3Nyb3ctPmVkYWNfbW9kZSA9IG1jaGNmZ19kZGltID8gRURBQ19TRUNERUQgOiBFREFDX05PTkU7Ci0JfQotCisJaTgyODYwX2luaXRfY3Nyb3dzKG1jaSwgcGRldik7CiAJaTgyODYwX2dldF9lcnJvcl9pbmZvKG1jaSwgJmRpc2NhcmQpOyAgLyogY2xlYXIgY291bnRlcnMgKi8KIAotCWlmIChlZGFjX21jX2FkZF9tYyhtY2kpKSB7CisJLyogSGVyZSB3ZSBhc3N1bWUgdGhhdCB3ZSB3aWxsIG5ldmVyIHNlZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcworCSAqIHR5cGUgb2YgbWVtb3J5IGNvbnRyb2xsZXIuICBUaGUgSUQgaXMgdGhlcmVmb3JlIGhhcmRjb2RlZCB0byAwLgorCSAqLworCWlmIChlZGFjX21jX2FkZF9tYyhtY2ksMCkpIHsKIAkJZGVidWdmMygiJXMoKTogZmFpbGVkIGVkYWNfbWNfYWRkX21jKClcbiIsIF9fZnVuY19fKTsKLQkJZWRhY19tY19mcmVlKG1jaSk7Ci0JfSBlbHNlIHsKLQkJLyogZ2V0IHRoaXMgZmFyIGFuZCBpdCdzIHN1Y2Nlc3NmdWwgKi8KLQkJZGVidWdmMygiJXMoKTogc3VjY2Vzc1xuIiwgX19mdW5jX18pOwotCQlyYyA9IDA7CisJCWdvdG8gZmFpbDsKIAl9CiAKLQlyZXR1cm4gcmM7CisJLyogZ2V0IHRoaXMgZmFyIGFuZCBpdCdzIHN1Y2Nlc3NmdWwgKi8KKwlkZWJ1Z2YzKCIlcygpOiBzdWNjZXNzXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwllZGFjX21jX2ZyZWUobWNpKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogLyogcmV0dXJucyBjb3VudCAoPj0gMCksIG9yIG5lZ2F0aXZlIG9uIGVycm9yICovCkBAIC0yNDAsNyArMjQ5LDcgQEAKIAogCWRlYnVnZjAoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWlmICgobWNpID0gZWRhY19tY19kZWxfbWMocGRldikpID09IE5VTEwpCisJaWYgKChtY2kgPSBlZGFjX21jX2RlbF9tYygmcGRldi0+ZGV2KSkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJZWRhY19tY19mcmVlKG1jaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTgyODc1cF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTgyODc1cF9lZGFjLmMKaW5kZXggMGFlYzkyNi4uMTYxZmUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4Mjg3NXBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pODI4NzVwX2VkYWMuYwpAQCAtMTMsNyArMTMsNiBAQAogICogTm90ZTogRTcyMTAgYXBwZWFycyBzYW1lIGFzIEQ4Mjg3NVAgLSB6aGVueXUuei53YW5nIGF0IGludGVsLmNvbQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yMSw2ICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImVkYWNfbWMuaCIKIAorI2RlZmluZSBJODI4NzVQX1JFVklTSU9OCSIgVmVyOiAyLjAuMSAiIF9fREFURV9fCisjZGVmaW5lIEVEQUNfTU9EX1NUUgkJImk4Mjg3NXBfZWRhYyIKKwogI2RlZmluZSBpODI4NzVwX3ByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAllZGFjX3ByaW50ayhsZXZlbCwgImk4Mjg3NXAiLCBmbXQsICMjYXJnKQogCkBAIC0xODUsMTggKzE4NywyMiBAQAogc3RhdGljIHZvaWQgaTgyODc1cF9nZXRfZXJyb3JfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCXN0cnVjdCBpODI4NzVwX2Vycm9yX2luZm8gKmluZm8pCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlwZGV2ID0gdG9fcGNpX2RldihtY2ktPmRldik7CisKIAkvKgogCSAqIFRoaXMgaXMgYSBtZXNzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYXRvbWljIHdheSB0byByZWFkIGFsbCB0aGUKIAkgKiByZWdpc3RlcnMgYXQgb25jZSBhbmQgdGhlIHJlZ2lzdGVycyBjYW4gdHJhbnNpdGlvbiBmcm9tIENFIGJlaW5nCiAJICogb3ZlcndyaXR0ZW4gYnkgVUUuCiAJICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQobWNpLT5wZGV2LCBJODI4NzVQX0VSUlNUUywgJmluZm8tPmVycnN0cyk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1jaS0+cGRldiwgSTgyODc1UF9FQVAsICZpbmZvLT5lYXApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG1jaS0+cGRldiwgSTgyODc1UF9ERVMsICZpbmZvLT5kZXMpOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG1jaS0+cGRldiwgSTgyODc1UF9ERVJSU1lOLCAmaW5mby0+ZGVycnN5bik7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQobWNpLT5wZGV2LCBJODI4NzVQX0VSUlNUUywgJmluZm8tPmVycnN0czIpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIEk4Mjg3NVBfRVJSU1RTLCAmaW5mby0+ZXJyc3RzKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgSTgyODc1UF9FQVAsICZpbmZvLT5lYXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEk4Mjg3NVBfREVTLCAmaW5mby0+ZGVzKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBJODI4NzVQX0RFUlJTWU4sICZpbmZvLT5kZXJyc3luKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJODI4NzVQX0VSUlNUUywgJmluZm8tPmVycnN0czIpOwogCi0JcGNpX3dyaXRlX2JpdHMxNihtY2ktPnBkZXYsIEk4Mjg3NVBfRVJSU1RTLCAweDAwODEsIDB4MDA4MSk7CisJcGNpX3dyaXRlX2JpdHMxNihwZGV2LCBJODI4NzVQX0VSUlNUUywgMHgwMDgxLCAweDAwODEpOwogCiAJLyoKIAkgKiBJZiB0aGUgZXJyb3IgaXMgdGhlIHNhbWUgdGhlbiB3ZSBjYW4gZm9yIGJvdGggcmVhZHMgdGhlbgpAQCAtMjA4LDkgKzIxNCw5IEBACiAJCXJldHVybjsKIAogCWlmICgoaW5mby0+ZXJyc3RzIF4gaW5mby0+ZXJyc3RzMikgJiAweDAwODEpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1jaS0+cGRldiwgSTgyODc1UF9FQVAsICZpbmZvLT5lYXApOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShtY2ktPnBkZXYsIEk4Mjg3NVBfREVTLCAmaW5mby0+ZGVzKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUobWNpLT5wZGV2LCBJODI4NzVQX0RFUlJTWU4sCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBJODI4NzVQX0VBUCwgJmluZm8tPmVhcCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEk4Mjg3NVBfREVTLCAmaW5mby0+ZGVzKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgSTgyODc1UF9ERVJSU1lOLAogCQkJCSZpbmZvLT5kZXJyc3luKTsKIAl9CiB9CkBAIC0yNTksMTE2ICsyNjUsMTA5IEBACiBleHRlcm4gaW50IHBjaV9wcm9jX2F0dGFjaF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7CiAjZW5kaWYKIAotc3RhdGljIGludCBpODI4NzVwX3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGRldl9pZHgpCisvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIDEgb24gZmFpbHVyZS4gKi8KK3N0YXRpYyBpbnQgaTgyODc1cF9zZXR1cF9vdmVyZmxfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgcGNpX2RldiAqKm92cmZsX3BkZXYsIHZvaWQgX19pb21lbSAqKm92cmZsX3dpbmRvdykKIHsKLQlpbnQgcmMgPSAtRU5PREVWOwotCWludCBpbmRleDsKLQlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBOVUxMOwotCXN0cnVjdCBpODI4NzVwX3B2dCAqcHZ0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfY3VtdWxfc2l6ZTsKLQlzdHJ1Y3QgcGNpX2RldiAqb3ZyZmxfcGRldjsKLQl2b2lkIF9faW9tZW0gKm92cmZsX3dpbmRvdyA9IE5VTEw7Ci0JdTMyIGRyYzsKLQl1MzIgZHJjX2NoYW47CQkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgMD0xY2hhbiwxPTJjaGFuICovCi0JdTMyIG5yX2NoYW5zOwotCXUzMiBkcmNfZGRpbTsJCS8qIERSQU0gRGF0YSBJbnRlZ3JpdHkgTW9kZSAwPW5vbmUsMj1lZGFjICovCi0Jc3RydWN0IGk4Mjg3NXBfZXJyb3JfaW5mbyBkaXNjYXJkOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJdm9pZCBfX2lvbWVtICp3aW5kb3c7CiAKLQlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0Jb3ZyZmxfcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5EX0RFVihJTlRFTCwgODI4NzVfNiksIE5VTEwpOworCSpvdnJmbF9wZGV2ID0gTlVMTDsKKwkqb3ZyZmxfd2luZG93ID0gTlVMTDsKKwlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORF9ERVYoSU5URUwsIDgyODc1XzYpLCBOVUxMKTsKIAotCWlmICghb3ZyZmxfcGRldikgewotCQkvKgotCQkgKiBJbnRlbCB0ZWxscyBCSU9TIGRldmVsb3BlcnMgdG8gaGlkZSBkZXZpY2UgNiB3aGljaAorCWlmIChkZXYgPT0gTlVMTCkgeworCQkvKiBJbnRlbCB0ZWxscyBCSU9TIGRldmVsb3BlcnMgdG8gaGlkZSBkZXZpY2UgNiB3aGljaAogCQkgKiBjb25maWd1cmVzIHRoZSBvdmVyZmxvdyBkZXZpY2UgYWNjZXNzIGNvbnRhaW5pbmcKIAkJICogdGhlIERSQnMgLSB0aGlzIGlzIHdoZXJlIHdlIGV4cG9zZSBkZXZpY2UgNi4KIAkJICogaHR0cDovL3d3dy54ODYtc2VjcmV0LmNvbS9hcnRpY2xlcy90d2Vhay9wYXQvcGF0c2VjcmV0cy0yLmh0bQogCQkgKi8KIAkJcGNpX3dyaXRlX2JpdHM4KHBkZXYsIDB4ZjQsIDB4MiwgMHgyKTsKLQkJb3ZyZmxfcGRldiA9Ci0JCQlwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKHBkZXYtPmJ1cywgUENJX0RFVkZOKDYsIDApKTsKKwkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShwZGV2LT5idXMsIFBDSV9ERVZGTig2LCAwKSk7CiAKLQkJaWYgKCFvdnJmbF9wZGV2KQotCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChkZXYgPT0gTlVMTCkKKwkJCXJldHVybiAxOwogCX0KIAorCSpvdnJmbF9wZGV2ID0gZGV2OworCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZiAoIW92cmZsX3BkZXYtPnByb2NlbnQgJiYgcGNpX3Byb2NfYXR0YWNoX2RldmljZShvdnJmbF9wZGV2KSkgewotCQlpODI4NzVwX3ByaW50ayhLRVJOX0VSUiwKLQkJCSIlcygpOiBGYWlsZWQgdG8gYXR0YWNoIG92ZXJmbG93IGRldmljZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKGRldi0+cHJvY2VudCA9PSBOVUxMKSAmJiBwY2lfcHJvY19hdHRhY2hfZGV2aWNlKGRldikpIHsKKwkJaTgyODc1cF9wcmludGsoS0VSTl9FUlIsICIlcygpOiBGYWlsZWQgdG8gYXR0YWNoIG92ZXJmbG93ICIKKwkJCSAgICAgICAiZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAxOwogCX0KLSNlbmRpZgotCQkJCS8qIENPTkZJR19QUk9DX0ZTICovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKG92cmZsX3BkZXYpKSB7Ci0JCWk4Mjg3NXBfcHJpbnRrKEtFUk5fRVJSLAotCQkJIiVzKCk6IEZhaWxlZCB0byBlbmFibGUgb3ZlcmZsb3cgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOworI2VuZGlmICAvKiBDT05GSUdfUFJPQ19GUyAqLworCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7CisJCWk4Mjg3NXBfcHJpbnRrKEtFUk5fRVJSLCAiJXMoKTogRmFpbGVkIHRvIGVuYWJsZSBvdmVyZmxvdyAiCisJCQkgICAgICAgImRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhvdnJmbF9wZGV2LCBwY2lfbmFtZShvdnJmbF9wZGV2KSkpIHsKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIHBjaV9uYW1lKGRldikpKSB7CiAjaWZkZWYgQ09SUkVDVF9CSU9TCiAJCWdvdG8gZmFpbDA7CiAjZW5kaWYKIAl9CiAKIAkvKiBjYWNoZSBpcyBpcnJlbGV2YW50IGZvciBQQ0kgYnVzIHJlYWRzL3dyaXRlcyAqLwotCW92cmZsX3dpbmRvdyA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQob3ZyZmxfcGRldiwgMCksCi0JCQkJcGNpX3Jlc291cmNlX2xlbihvdnJmbF9wZGV2LCAwKSk7CisJd2luZG93ID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLAorCQkJCSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogCi0JaWYgKCFvdnJmbF93aW5kb3cpIHsKKwlpZiAod2luZG93ID09IE5VTEwpIHsKIAkJaTgyODc1cF9wcmludGsoS0VSTl9FUlIsICIlcygpOiBGYWlsZWQgdG8gaW9yZW1hcCBiYXI2XG4iLAotCQkJX19mdW5jX18pOworCQkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBmYWlsMTsKIAl9CiAKLQkvKiBuZWVkIHRvIGZpbmQgb3V0IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgKi8KLQlkcmMgPSByZWFkbChvdnJmbF93aW5kb3cgKyBJODI4NzVQX0RSQyk7Ci0JZHJjX2NoYW4gPSAoKGRyYyA+PiAyMSkgJiAweDEpOwotCW5yX2NoYW5zID0gZHJjX2NoYW4gKyAxOworCSpvdnJmbF93aW5kb3cgPSB3aW5kb3c7CisJcmV0dXJuIDA7CisKK2ZhaWwxOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKworI2lmZGVmIENPUlJFQ1RfQklPUworZmFpbDA6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisjZW5kaWYKKwkvKiBOT1RFOiB0aGUgb3ZyZmwgcHJvYyBlbnRyeSBhbmQgcGNpX2RldiBhcmUgaW50ZW50aW9uYWxseSBsZWZ0ICovCisJcmV0dXJuIDE7Cit9CisKKworLyogUmV0dXJuIDEgaWYgZHVhbCBjaGFubmVsIG1vZGUgaXMgYWN0aXZlLiAgRWxzZSByZXR1cm4gMC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGR1YWxfY2hhbm5lbF9hY3RpdmUodTMyIGRyYykKK3sKKwlyZXR1cm4gKGRyYyA+PiAyMSkgJiAweDE7Cit9CisKKworc3RhdGljIHZvaWQgaTgyODc1cF9pbml0X2Nzcm93cyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKm92cmZsX3dpbmRvdywgdTMyIGRyYykKK3sKKwlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3c7CisJdW5zaWduZWQgbG9uZyBsYXN0X2N1bXVsX3NpemU7CisJdTggdmFsdWU7CisJdTMyIGRyY19kZGltOyAgLyogRFJBTSBEYXRhIEludGVncml0eSBNb2RlIDA9bm9uZSwyPWVkYWMgKi8KKwl1MzIgY3VtdWxfc2l6ZTsKKwlpbnQgaW5kZXg7CiAKIAlkcmNfZGRpbSA9IChkcmMgPj4gMTgpICYgMHgxOwotCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKCpwdnQpLCBJODI4NzVQX05SX0NTUk9XUyhucl9jaGFucyksCi0JCQkJbnJfY2hhbnMpOworCWxhc3RfY3VtdWxfc2l6ZSA9IDA7CiAKLQlpZiAoIW1jaSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDI7Ci0JfQotCi0JZGVidWdmMygiJXMoKTogaW5pdCBtY2lcbiIsIF9fZnVuY19fKTsKLQltY2ktPnBkZXYgPSBwZGV2OwotCW1jaS0+bXR5cGVfY2FwID0gTUVNX0ZMQUdfRERSOwotCW1jaS0+ZWRhY19jdGxfY2FwID0gRURBQ19GTEFHX05PTkUgfCBFREFDX0ZMQUdfU0VDREVEOwotCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfVU5LTk9XTjsKLQkvKiBhZGp1c3QgRkxBR1MgKi8KLQotCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7Ci0JbWNpLT5tb2RfdmVyID0gIiRSZXZpc2lvbjogMS41LjIuMTEgJCI7Ci0JbWNpLT5jdGxfbmFtZSA9IGk4Mjg3NXBfZGV2c1tkZXZfaWR4XS5jdGxfbmFtZTsKLQltY2ktPmVkYWNfY2hlY2sgPSBpODI4NzVwX2NoZWNrOwotCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IE5VTEw7Ci0JZGVidWdmMygiJXMoKTogaW5pdCBwdnRcbiIsIF9fZnVuY19fKTsKLQlwdnQgPSAoc3RydWN0IGk4Mjg3NXBfcHZ0ICopIG1jaS0+cHZ0X2luZm87Ci0JcHZ0LT5vdnJmbF9wZGV2ID0gb3ZyZmxfcGRldjsKLQlwdnQtPm92cmZsX3dpbmRvdyA9IG92cmZsX3dpbmRvdzsKLQotCS8qCi0JICogVGhlIGRyYW0gcm93IGJvdW5kYXJ5IChEUkIpIHJlZyB2YWx1ZXMgYXJlIGJvdW5kYXJ5IGFkZHJlc3MKKwkvKiBUaGUgZHJhbSByb3cgYm91bmRhcnkgKERSQikgcmVnIHZhbHVlcyBhcmUgYm91bmRhcnkgYWRkcmVzcwogCSAqIGZvciBlYWNoIERSQU0gcm93IHdpdGggYSBncmFudWxhcml0eSBvZiAzMiBvciA2NE1CIChzaW5nbGUvZHVhbAogCSAqIGNoYW5uZWwgb3BlcmF0aW9uKS4gIERSQiByZWdzIGFyZSBjdW11bGF0aXZlOyB0aGVyZWZvcmUgRFJCNyB3aWxsCiAJICogY29udGFpbiB0aGUgdG90YWwgbWVtb3J5IGNvbnRhaW5lZCBpbiBhbGwgZWlnaHQgcm93cy4KIAkgKi8KLQlmb3IgKGxhc3RfY3VtdWxfc2l6ZSA9IGluZGV4ID0gMDsgaW5kZXggPCBtY2ktPm5yX2Nzcm93czsgaW5kZXgrKykgewotCQl1OCB2YWx1ZTsKLQkJdTMyIGN1bXVsX3NpemU7Ci0JCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdyA9ICZtY2ktPmNzcm93c1tpbmRleF07CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtY2ktPm5yX2Nzcm93czsgaW5kZXgrKykgeworCQljc3JvdyA9ICZtY2ktPmNzcm93c1tpbmRleF07CiAKIAkJdmFsdWUgPSByZWFkYihvdnJmbF93aW5kb3cgKyBJODI4NzVQX0RSQiArIGluZGV4KTsKIAkJY3VtdWxfc2l6ZSA9IHZhbHVlIDw8IChJODI4NzVQX0RSQl9TSElGVCAtIFBBR0VfU0hJRlQpOwogCQlkZWJ1Z2YzKCIlcygpOiAoJWQpIGN1bXVsX3NpemUgMHgleFxuIiwgX19mdW5jX18sIGluZGV4LAogCQkJY3VtdWxfc2l6ZSk7Ci0KIAkJaWYgKGN1bXVsX3NpemUgPT0gbGFzdF9jdW11bF9zaXplKQogCQkJY29udGludWU7CS8qIG5vdCBwb3B1bGF0ZWQgKi8KIApAQCAtMzc2LDM1ICszNzUsNzUgQEAKIAkJY3Nyb3ctPmxhc3RfcGFnZSA9IGN1bXVsX3NpemUgLSAxOwogCQljc3Jvdy0+bnJfcGFnZXMgPSBjdW11bF9zaXplIC0gbGFzdF9jdW11bF9zaXplOwogCQlsYXN0X2N1bXVsX3NpemUgPSBjdW11bF9zaXplOwotCQljc3Jvdy0+Z3JhaW4gPSAxIDw8IDEyOyAgLyogSTgyODc1UF9FQVAgaGFzIDRLaUIgcmVvbHV0aW9uICovCisJCWNzcm93LT5ncmFpbiA9IDEgPDwgMTI7CS8qIEk4Mjg3NVBfRUFQIGhhcyA0S2lCIHJlb2x1dGlvbiAqLwogCQljc3Jvdy0+bXR5cGUgPSBNRU1fRERSOwogCQljc3Jvdy0+ZHR5cGUgPSBERVZfVU5LTk9XTjsKIAkJY3Nyb3ctPmVkYWNfbW9kZSA9IGRyY19kZGltID8gRURBQ19TRUNERUQgOiBFREFDX05PTkU7CiAJfQorfQogCitzdGF0aWMgaW50IGk4Mjg3NXBfcHJvYmUxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZGV2X2lkeCkKK3sKKwlpbnQgcmMgPSAtRU5PREVWOworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKKwlzdHJ1Y3QgaTgyODc1cF9wdnQgKnB2dDsKKwlzdHJ1Y3QgcGNpX2RldiAqb3ZyZmxfcGRldjsKKwl2b2lkIF9faW9tZW0gKm92cmZsX3dpbmRvdzsKKwl1MzIgZHJjOworCXUzMiBucl9jaGFuczsKKwlzdHJ1Y3QgaTgyODc1cF9lcnJvcl9pbmZvIGRpc2NhcmQ7CisKKwlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJb3ZyZmxfcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5EX0RFVihJTlRFTCwgODI4NzVfNiksIE5VTEwpOworCisJaWYgKGk4Mjg3NXBfc2V0dXBfb3ZlcmZsX2RldihwZGV2LCAmb3ZyZmxfcGRldiwgJm92cmZsX3dpbmRvdykpCisJCXJldHVybiAtRU5PREVWOworCWRyYyA9IHJlYWRsKG92cmZsX3dpbmRvdyArIEk4Mjg3NVBfRFJDKTsKKwlucl9jaGFucyA9IGR1YWxfY2hhbm5lbF9hY3RpdmUoZHJjKSArIDE7CisJbWNpID0gZWRhY19tY19hbGxvYyhzaXplb2YoKnB2dCksIEk4Mjg3NVBfTlJfQ1NST1dTKG5yX2NoYW5zKSwKKwkJCQlucl9jaGFucyk7CisKKwlpZiAoIW1jaSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDA7CisJfQorCisJZGVidWdmMygiJXMoKTogaW5pdCBtY2lcbiIsIF9fZnVuY19fKTsKKwltY2ktPmRldiA9ICZwZGV2LT5kZXY7CisJbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19ERFI7CisJbWNpLT5lZGFjX2N0bF9jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19TRUNERUQ7CisJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19VTktOT1dOOworCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CisJbWNpLT5tb2RfdmVyID0gSTgyODc1UF9SRVZJU0lPTjsKKwltY2ktPmN0bF9uYW1lID0gaTgyODc1cF9kZXZzW2Rldl9pZHhdLmN0bF9uYW1lOworCW1jaS0+ZWRhY19jaGVjayA9IGk4Mjg3NXBfY2hlY2s7CisJbWNpLT5jdGxfcGFnZV90b19waHlzID0gTlVMTDsKKwlkZWJ1Z2YzKCIlcygpOiBpbml0IHB2dFxuIiwgX19mdW5jX18pOworCXB2dCA9IChzdHJ1Y3QgaTgyODc1cF9wdnQgKikgbWNpLT5wdnRfaW5mbzsKKwlwdnQtPm92cmZsX3BkZXYgPSBvdnJmbF9wZGV2OworCXB2dC0+b3ZyZmxfd2luZG93ID0gb3ZyZmxfd2luZG93OworCWk4Mjg3NXBfaW5pdF9jc3Jvd3MobWNpLCBwZGV2LCBvdnJmbF93aW5kb3csIGRyYyk7CiAJaTgyODc1cF9nZXRfZXJyb3JfaW5mbyhtY2ksICZkaXNjYXJkKTsgIC8qIGNsZWFyIGNvdW50ZXJzICovCiAKLQlpZiAoZWRhY19tY19hZGRfbWMobWNpKSkgeworCS8qIEhlcmUgd2UgYXNzdW1lIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMKKwkgKiB0eXBlIG9mIG1lbW9yeSBjb250cm9sbGVyLiAgVGhlIElEIGlzIHRoZXJlZm9yZSBoYXJkY29kZWQgdG8gMC4KKwkgKi8KKwlpZiAoZWRhY19tY19hZGRfbWMobWNpLDApKSB7CiAJCWRlYnVnZjMoIiVzKCk6IGZhaWxlZCBlZGFjX21jX2FkZF9tYygpXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZmFpbDM7CisJCWdvdG8gZmFpbDE7CiAJfQogCiAJLyogZ2V0IHRoaXMgZmFyIGFuZCBpdCdzIHN1Y2Nlc3NmdWwgKi8KIAlkZWJ1Z2YzKCIlcygpOiBzdWNjZXNzXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiAKLWZhaWwzOgorZmFpbDE6CiAJZWRhY19tY19mcmVlKG1jaSk7CiAKLWZhaWwyOgorZmFpbDA6CiAJaW91bm1hcChvdnJmbF93aW5kb3cpOwotCi1mYWlsMToKIAlwY2lfcmVsZWFzZV9yZWdpb25zKG92cmZsX3BkZXYpOwogCi0jaWZkZWYgQ09SUkVDVF9CSU9TCi1mYWlsMDoKLSNlbmRpZgogCXBjaV9kaXNhYmxlX2RldmljZShvdnJmbF9wZGV2KTsKIAkvKiBOT1RFOiB0aGUgb3ZyZmwgcHJvYyBlbnRyeSBhbmQgcGNpX2RldiBhcmUgaW50ZW50aW9uYWxseSBsZWZ0ICovCiAJcmV0dXJuIHJjOwpAQCAtNDM3LDcgKzQ3Niw3IEBACiAKIAlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoKG1jaSA9IGVkYWNfbWNfZGVsX21jKHBkZXYpKSA9PSBOVUxMKQorCWlmICgobWNpID0gZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldikpID09IE5VTEwpCiAJCXJldHVybjsKIAogCXB2dCA9IChzdHJ1Y3QgaTgyODc1cF9wdnQgKikgbWNpLT5wdnRfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9yODI2MDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMKaW5kZXggMmMyOWZhZi4uYTQ5Y2YwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIHJlZmVyZW5jZXMgdG8gdGhpcyBkb2N1bWVudCBnaXZlbiBpbiBbXQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yMyw2ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImVkYWNfbWMuaCIKIAorI2RlZmluZSBSODI2MDBfUkVWSVNJT04JIiBWZXI6IDIuMC4xICIgX19EQVRFX18KKyNkZWZpbmUgRURBQ19NT0RfU1RSCSJyODI2MDBfZWRhYyIKKwogI2RlZmluZSByODI2MDBfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAogCWVkYWNfcHJpbnRrKGxldmVsLCAicjgyNjAwIiwgZm10LCAjI2FyZykKIApAQCAtMTM0LDE3ICsxMzYsMjAgQEAKIHN0YXRpYyB2b2lkIHI4MjYwMF9nZXRfZXJyb3JfaW5mbyAoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQlzdHJ1Y3QgcjgyNjAwX2Vycm9yX2luZm8gKmluZm8pCiB7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1jaS0+cGRldiwgUjgyNjAwX0VBUCwgJmluZm8tPmVhcHIpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJcGRldiA9IHRvX3BjaV9kZXYobWNpLT5kZXYpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBSODI2MDBfRUFQLCAmaW5mby0+ZWFwcik7CiAKIAlpZiAoaW5mby0+ZWFwciAmIEJJVCgwKSkKIAkJLyogQ2xlYXIgZXJyb3IgdG8gYWxsb3cgbmV4dCBlcnJvciB0byBiZSByZXBvcnRlZCBbcC42Ml0gKi8KLQkJcGNpX3dyaXRlX2JpdHMzMihtY2ktPnBkZXYsIFI4MjYwMF9FQVAsCisJCXBjaV93cml0ZV9iaXRzMzIocGRldiwgUjgyNjAwX0VBUCwKIAkJCQkoKHUzMikgQklUKDApICYgKHUzMikgQklUKDEpKSwKIAkJCQkoKHUzMikgQklUKDApICYgKHUzMikgQklUKDEpKSk7CiAKIAlpZiAoaW5mby0+ZWFwciAmIEJJVCgxKSkKIAkJLyogQ2xlYXIgZXJyb3IgdG8gYWxsb3cgbmV4dCBlcnJvciB0byBiZSByZXBvcnRlZCBbcC42Ml0gKi8KLQkJcGNpX3dyaXRlX2JpdHMzMihtY2ktPnBkZXYsIFI4MjYwMF9FQVAsCisJCXBjaV93cml0ZV9iaXRzMzIocGRldiwgUjgyNjAwX0VBUCwKIAkJCQkoKHUzMikgQklUKDApICYgKHUzMikgQklUKDEpKSwKIAkJCQkoKHUzMikgQklUKDApICYgKHUzMikgQklUKDEpKSk7CiB9CkBAIC0yMDAsODggKzIwNSw0NCBAQAogCXI4MjYwMF9wcm9jZXNzX2Vycm9yX2luZm8obWNpLCAmaW5mbywgMSk7CiB9CiAKLXN0YXRpYyBpbnQgcjgyNjAwX3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGRldl9pZHgpCitzdGF0aWMgaW5saW5lIGludCBlY2NfZW5hYmxlZCh1OCBkcmFtY3IpCiB7Ci0JaW50IHJjID0gLUVOT0RFVjsKKwlyZXR1cm4gZHJhbWNyICYgQklUKDUpOworfQorCitzdGF0aWMgdm9pZCByODI2MDBfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJdTggZHJhbWNyKQoreworCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdzsKIAlpbnQgaW5kZXg7Ci0Jc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gTlVMTDsKLQl1OCBkcmFtY3I7Ci0JdTMyIGVjY19vbjsKLQl1MzIgcmVnX3NkcmFtOwotCXUzMiBlYXByOwotCXUzMiBzY3J1Yl9kaXNhYmxlZDsKLQl1MzIgc2RyYW1fcmVmcmVzaF9yYXRlOwotCXUzMiByb3dfaGlnaF9saW1pdF9sYXN0ID0gMDsKLQlzdHJ1Y3QgcjgyNjAwX2Vycm9yX2luZm8gZGlzY2FyZDsKKwl1OCBkcmJhcjsgIC8qIFNEUkFNIFJvdyBCb3VuZHJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1MzIgcm93X2hpZ2hfbGltaXQsIHJvd19oaWdoX2xpbWl0X2xhc3Q7CisJdTMyIHJlZ19zZHJhbSwgZWNjX29uLCByb3dfYmFzZTsKIAotCWRlYnVnZjAoIiVzKClcbiIsIF9fZnVuY19fKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSODI2MDBfRFJBTUMsICZkcmFtY3IpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBSODI2MDBfRUFQLCAmZWFwcik7Ci0JZWNjX29uID0gZHJhbWNyICYgQklUKDUpOworCWVjY19vbiA9IGVjY19lbmFibGVkKGRyYW1jcik7CiAJcmVnX3NkcmFtID0gZHJhbWNyICYgQklUKDQpOwotCXNjcnViX2Rpc2FibGVkID0gZWFwciAmIEJJVCgzMSk7Ci0Jc2RyYW1fcmVmcmVzaF9yYXRlID0gZHJhbWNyICYgKEJJVCgwKSB8IEJJVCgxKSk7Ci0JZGVidWdmMigiJXMoKTogc2RyYW0gcmVmcmVzaCByYXRlID0gJSMweFxuIiwgX19mdW5jX18sCi0JCXNkcmFtX3JlZnJlc2hfcmF0ZSk7Ci0JZGVidWdmMigiJXMoKTogRFJBTUMgcmVnaXN0ZXIgPSAlIzB4XG4iLCBfX2Z1bmNfXywgZHJhbWNyKTsKLQltY2kgPSBlZGFjX21jX2FsbG9jKDAsIFI4MjYwMF9OUl9DU1JPV1MsIFI4MjYwMF9OUl9DSEFOUyk7Ci0KLQlpZiAobWNpID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JZGVidWdmMCgiJXMoKTogbWNpID0gJXBcbiIsIF9fZnVuY19fLCBtY2kpOwotCW1jaS0+cGRldiA9IHBkZXY7Ci0JbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19SRERSIHwgTUVNX0ZMQUdfRERSOwotCW1jaS0+ZWRhY19jdGxfY2FwID0gRURBQ19GTEFHX05PTkUgfCBFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEOwotCS8qIEZJWE1FIHRyeSB0byB3b3JrIG91dCBpZiB0aGUgY2hpcCBsZWFkcyBoYXZlIGJlZW4gdXNlZCBmb3IgQ09NMgotCSAqIGluc3RlYWQgb24gdGhpcyBib2FyZD8gW01BNj9dIE1BWUJFOgotCSAqLwotCi0JLyogT24gdGhlIFI4MjYwMCwgdGhlIHBpbnMgZm9yIG1lbW9yeSBiaXRzIDcyOjY1IC0gaS5lLiB0aGUgICAqCi0JICogRUMgYml0cyBhcmUgc2hhcmVkIHdpdGggdGhlIHBpbnMgZm9yIENPTTIgKCEpLCBzbyBpZiBDT00yICAqCi0JICogaXMgZW5hYmxlZCwgd2UgYXNzdW1lIENPTTIgaXMgd2lyZWQgdXAsIGFuZCB0aHVzIG5vIEVEQUMgICAqCi0JICogaXMgcG9zc2libGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7Ci0KLQlpZiAoZWNjX29uKSB7Ci0JCWlmIChzY3J1Yl9kaXNhYmxlZCkKLQkJCWRlYnVnZjMoIiVzKCk6IG1jaSA9ICVwIC0gU2NydWJiaW5nIGRpc2FibGVkISBFQVA6ICIKLQkJCQkiJSMweFxuIiwgX19mdW5jX18sIG1jaSwgZWFwcik7Ci0JfSBlbHNlCi0JCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfTk9ORTsKLQotCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7Ci0JbWNpLT5tb2RfdmVyID0gIiRSZXZpc2lvbjogMS4xLjIuNiAkIjsKLQltY2ktPmN0bF9uYW1lID0gIlI4MjYwMCI7Ci0JbWNpLT5lZGFjX2NoZWNrID0gcjgyNjAwX2NoZWNrOwotCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IE5VTEw7CisJcm93X2hpZ2hfbGltaXRfbGFzdCA9IDA7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtY2ktPm5yX2Nzcm93czsgaW5kZXgrKykgewotCQlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaW5kZXhdOwotCQl1OCBkcmJhcjsJLyogc0RyYW0gUm93IEJvdW5kcnkgQWRkcmVzcyBSZWdpc3RlciAqLwotCQl1MzIgcm93X2hpZ2hfbGltaXQ7Ci0JCXUzMiByb3dfYmFzZTsKKwkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaW5kZXhdOwogCiAJCS8qIGZpbmQgdGhlIERSQU0gQ2hpcCBTZWxlY3QgQmFzZSBhZGRyZXNzIGFuZCBtYXNrICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG1jaS0+cGRldiwgUjgyNjAwX0RSQkEgKyBpbmRleCwgJmRyYmFyKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUjgyNjAwX0RSQkEgKyBpbmRleCwgJmRyYmFyKTsKIAotCQlkZWJ1Z2YxKCJNQyVkOiAlcygpIFJvdz0lZCBEUkJBID0gJSMweFxuIiwgbWNpLT5tY19pZHgsCi0JCQlfX2Z1bmNfXywgaW5kZXgsIGRyYmFyKTsKKwkJZGVidWdmMSgiJXMoKSBSb3c9JWQgRFJCQSA9ICUjMHhcbiIsIF9fZnVuY19fLCBpbmRleCwgZHJiYXIpOwogCiAJCXJvd19oaWdoX2xpbWl0ID0gKCh1MzIpIGRyYmFyIDw8IDI0KTsKIC8qCQlyb3dfaGlnaF9saW1pdCA9ICgodTMyKWRyYmFyIDw8IDI0KSB8IDB4ZmZmZmZmVUw7ICovCiAKLQkJZGVidWdmMSgiTUMlZDogJXMoKSBSb3c9JWQsIEJvdW5kcnkgQWRkcmVzcz0lIzB4LCBMYXN0ID0gIgotCQkJIiUjMHggXG4iLCBtY2ktPm1jX2lkeCwgX19mdW5jX18sIGluZGV4LAotCQkJcm93X2hpZ2hfbGltaXQsIHJvd19oaWdoX2xpbWl0X2xhc3QpOworCQlkZWJ1Z2YxKCIlcygpIFJvdz0lZCwgQm91bmRyeSBBZGRyZXNzPSUjMHgsIExhc3QgPSAlIzB4XG4iLAorCQkJX19mdW5jX18sIGluZGV4LCByb3dfaGlnaF9saW1pdCwgcm93X2hpZ2hfbGltaXRfbGFzdCk7CiAKIAkJLyogRW1wdHkgcm93IFtwLjU3XSAqLwogCQlpZiAocm93X2hpZ2hfbGltaXQgPT0gcm93X2hpZ2hfbGltaXRfbGFzdCkKIAkJCWNvbnRpbnVlOwogCiAJCXJvd19iYXNlID0gcm93X2hpZ2hfbGltaXRfbGFzdDsKKwogCQljc3Jvdy0+Zmlyc3RfcGFnZSA9IHJvd19iYXNlID4+IFBBR0VfU0hJRlQ7CiAJCWNzcm93LT5sYXN0X3BhZ2UgPSAocm93X2hpZ2hfbGltaXQgPj4gUEFHRV9TSElGVCkgLSAxOwogCQljc3Jvdy0+bnJfcGFnZXMgPSBjc3Jvdy0+bGFzdF9wYWdlIC0gY3Nyb3ctPmZpcnN0X3BhZ2UgKyAxOwpAQCAtMjk2LDEwICsyNTcsNjMgQEAKIAkJY3Nyb3ctPmVkYWNfbW9kZSA9IGVjY19vbiA/IEVEQUNfU0VDREVEIDogRURBQ19OT05FOwogCQlyb3dfaGlnaF9saW1pdF9sYXN0ID0gcm93X2hpZ2hfbGltaXQ7CiAJfQorfQogCitzdGF0aWMgaW50IHI4MjYwMF9wcm9iZTEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBkZXZfaWR4KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKKwl1OCBkcmFtY3I7CisJdTMyIGVhcHI7CisJdTMyIHNjcnViX2Rpc2FibGVkOworCXUzMiBzZHJhbV9yZWZyZXNoX3JhdGU7CisJc3RydWN0IHI4MjYwMF9lcnJvcl9pbmZvIGRpc2NhcmQ7CisKKwlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUjgyNjAwX0RSQU1DLCAmZHJhbWNyKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUjgyNjAwX0VBUCwgJmVhcHIpOworCXNjcnViX2Rpc2FibGVkID0gZWFwciAmIEJJVCgzMSk7CisJc2RyYW1fcmVmcmVzaF9yYXRlID0gZHJhbWNyICYgKEJJVCgwKSB8IEJJVCgxKSk7CisJZGVidWdmMigiJXMoKTogc2RyYW0gcmVmcmVzaCByYXRlID0gJSMweFxuIiwgX19mdW5jX18sCisJCXNkcmFtX3JlZnJlc2hfcmF0ZSk7CisJZGVidWdmMigiJXMoKTogRFJBTUMgcmVnaXN0ZXIgPSAlIzB4XG4iLCBfX2Z1bmNfXywgZHJhbWNyKTsKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIFI4MjYwMF9OUl9DU1JPV1MsIFI4MjYwMF9OUl9DSEFOUyk7CisKKwlpZiAobWNpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGVidWdmMCgiJXMoKTogbWNpID0gJXBcbiIsIF9fZnVuY19fLCBtY2kpOworCW1jaS0+ZGV2ID0gJnBkZXYtPmRldjsKKwltY2ktPm10eXBlX2NhcCA9IE1FTV9GTEFHX1JERFIgfCBNRU1fRkxBR19ERFI7CisJbWNpLT5lZGFjX2N0bF9jYXAgPSBFREFDX0ZMQUdfTk9ORSB8IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CisJLyogRklYTUUgdHJ5IHRvIHdvcmsgb3V0IGlmIHRoZSBjaGlwIGxlYWRzIGhhdmUgYmVlbiB1c2VkIGZvciBDT00yCisJICogaW5zdGVhZCBvbiB0aGlzIGJvYXJkPyBbTUE2P10gTUFZQkU6CisJICovCisKKwkvKiBPbiB0aGUgUjgyNjAwLCB0aGUgcGlucyBmb3IgbWVtb3J5IGJpdHMgNzI6NjUgLSBpLmUuIHRoZSAgICoKKwkgKiBFQyBiaXRzIGFyZSBzaGFyZWQgd2l0aCB0aGUgcGlucyBmb3IgQ09NMiAoISksIHNvIGlmIENPTTIgICoKKwkgKiBpcyBlbmFibGVkLCB3ZSBhc3N1bWUgQ09NMiBpcyB3aXJlZCB1cCwgYW5kIHRodXMgbm8gRURBQyAgICoKKwkgKiBpcyBwb3NzaWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19OT05FIHwgRURBQ19GTEFHX0VDIHwgRURBQ19GTEFHX1NFQ0RFRDsKKworCWlmIChlY2NfZW5hYmxlZChkcmFtY3IpKSB7CisJCWlmIChzY3J1Yl9kaXNhYmxlZCkKKwkJCWRlYnVnZjMoIiVzKCk6IG1jaSA9ICVwIC0gU2NydWJiaW5nIGRpc2FibGVkISBFQVA6ICIKKwkJCQkiJSMweFxuIiwgX19mdW5jX18sIG1jaSwgZWFwcik7CisJfSBlbHNlCisJCW1jaS0+ZWRhY19jYXAgPSBFREFDX0ZMQUdfTk9ORTsKKworCW1jaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CisJbWNpLT5tb2RfdmVyID0gUjgyNjAwX1JFVklTSU9OOworCW1jaS0+Y3RsX25hbWUgPSAiUjgyNjAwIjsKKwltY2ktPmVkYWNfY2hlY2sgPSByODI2MDBfY2hlY2s7CisJbWNpLT5jdGxfcGFnZV90b19waHlzID0gTlVMTDsKKwlyODI2MDBfaW5pdF9jc3Jvd3MobWNpLCBwZGV2LCBkcmFtY3IpOwogCXI4MjYwMF9nZXRfZXJyb3JfaW5mbyhtY2ksICZkaXNjYXJkKTsgIC8qIGNsZWFyIGNvdW50ZXJzICovCiAKLQlpZiAoZWRhY19tY19hZGRfbWMobWNpKSkgeworCS8qIEhlcmUgd2UgYXNzdW1lIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMKKwkgKiB0eXBlIG9mIG1lbW9yeSBjb250cm9sbGVyLiAgVGhlIElEIGlzIHRoZXJlZm9yZSBoYXJkY29kZWQgdG8gMC4KKwkgKi8KKwlpZiAoZWRhY19tY19hZGRfbWMobWNpLDApKSB7CiAJCWRlYnVnZjMoIiVzKCk6IGZhaWxlZCBlZGFjX21jX2FkZF9tYygpXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0zMDksMTcgKzMyMywxNSBAQAogCWlmIChkaXNhYmxlX2hhcmR3YXJlX3NjcnViKSB7CiAJCWRlYnVnZjMoIiVzKCk6IERpc2FibGluZyBIYXJkd2FyZSBTY3J1YiAoc2NydWIgb24gZXJyb3IpXG4iLAogCQkJX19mdW5jX18pOwotCQlwY2lfd3JpdGVfYml0czMyKG1jaS0+cGRldiwgUjgyNjAwX0VBUCwgQklUKDMxKSwgQklUKDMxKSk7CisJCXBjaV93cml0ZV9iaXRzMzIocGRldiwgUjgyNjAwX0VBUCwgQklUKDMxKSwgQklUKDMxKSk7CiAJfQogCiAJZGVidWdmMygiJXMoKTogc3VjY2Vzc1xuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogCiBmYWlsOgotCWlmIChtY2kpCi0JCWVkYWNfbWNfZnJlZShtY2kpOwotCi0JcmV0dXJuIHJjOworCWVkYWNfbWNfZnJlZShtY2kpOworCXJldHVybiAtRU5PREVWOwogfQogCiAvKiByZXR1cm5zIGNvdW50ICg+PSAwKSwgb3IgbmVnYXRpdmUgb24gZXJyb3IgKi8KQEAgLTMzOCw3ICszNTAsNyBAQAogCiAJZGVidWdmMCgiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaWYgKChtY2kgPSBlZGFjX21jX2RlbF9tYyhwZGV2KSkgPT0gTlVMTCkKKwlpZiAoKG1jaSA9IGVkYWNfbWNfZGVsX21jKCZwZGV2LT5kZXYpKSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAllZGFjX21jX2ZyZWUobWNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS92aXJ0dWFsX3Jvb3QuYyBiL2RyaXZlcnMvZWlzYS92aXJ0dWFsX3Jvb3QuYwppbmRleCAwZjk3YTBjLi45YjRmY2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvdmlydHVhbF9yb290LmMKKysrIGIvZHJpdmVycy9laXNhL3ZpcnR1YWxfcm9vdC5jCkBAIC03LDcgKzcsNiBAQAogICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9laXNhLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZjNC9mY19zeW1zLmMgYi9kcml2ZXJzL2ZjNC9mY19zeW1zLmMKaW5kZXggZWQ4NWRmYy4uODcwMGE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9mYzQvZmNfc3ltcy5jCisrKyBiL2RyaXZlcnMvZmM0L2ZjX3N5bXMuYwpAQCAtMiw3ICsyLDYgQEAKICAqIFdlIHNob3VsZCBub3QgZXZlbiBiZSB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIGlmIHdlIGFyZSBub3QgZG9pbmcKICAqIGEgbW9kdWxlLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9mYzQvc29jLmMgYi9kcml2ZXJzL2ZjNC9zb2MuYwppbmRleCBjZjg3NjhiLi4zYjA3ZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZjNC9zb2MuYworKysgYi9kcml2ZXJzL2ZjNC9zb2MuYwpAQCAtNjM3LDcgKzYzNyw3IEBACiAJCiAJaXJxID0gc2Rldi0+aXJxc1swXTsKIAotCWlmIChyZXF1ZXN0X2lycSAoaXJxLCBzb2NfaW50ciwgU0FfU0hJUlEsICJTT0MiLCAodm9pZCAqKXMpKSB7CisJaWYgKHJlcXVlc3RfaXJxIChpcnEsIHNvY19pbnRyLCBJUlFGX1NIQVJFRCwgIlNPQyIsICh2b2lkICopcykpIHsKIAkJc29jX3ByaW50ayAoIkNhbm5vdCBvcmRlciBpcnEgJWQgdG8gZ29cbiIsIGlycSk7CiAJCXNvY3MgPSBzLT5uZXh0OwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZjNC9zb2NhbC5jIGIvZHJpdmVycy9mYzQvc29jYWwuYwppbmRleCBmNTJkMWU1Yi4uMmI3NWVkYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmM0L3NvY2FsLmMKKysrIGIvZHJpdmVycy9mYzQvc29jYWwuYwpAQCAtNzYxLDcgKzc2MSw3IEBACiAJCiAJaXJxID0gc2Rldi0+aXJxc1swXTsKIAotCWlmIChyZXF1ZXN0X2lycSAoaXJxLCBzb2NhbF9pbnRyLCBTQV9TSElSUSwgIlNPQ0FMIiwgKHZvaWQgKilzKSkgeworCWlmIChyZXF1ZXN0X2lycSAoaXJxLCBzb2NhbF9pbnRyLCBJUlFGX1NIQVJFRCwgIlNPQ0FMIiwgKHZvaWQgKilzKSkgewogCQlzb2NhbF9wcmludGsgKCJDYW5ub3Qgb3JkZXIgaXJxICVkIHRvIGdvXG4iLCBpcnEpOwogCQlzb2NhbHMgPSBzLT5uZXh0OwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMKaW5kZXggZmRiOGIwNC4uMjNiMDg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kZWxsX3JidS5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYwpAQCAtMzQsNyArMzQsNiBAQAogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jIGIvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKaW5kZXggOWI3ZTRkNS4uOGViY2UxYzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaXZhcnMuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaXZhcnMuYwpAQCAtNjYsNyArNjYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvcGNkcC5jIGIvZHJpdmVycy9maXJtd2FyZS9wY2RwLmMKaW5kZXggYzM3YmFmOS4uYzJhZDcyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9wY2RwLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9wY2RwLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYyBiL2RyaXZlcnMvaHdtb24vaHdtb24tdmlkLmMKaW5kZXggYTY3NjRmZi4uOWQ2NzMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLXZpZC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCmluZGV4IGU0MDdjNzQuLjc1NzZlYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCkBAIC0zNSw3ICszNSw2IEBACiAgICAgdzgzNzkyZAk5CTcJNwkzCTB4N2EJMHg1Y2EzCXllcwlubwogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDhiNDZlZjcuLjdiZTFkMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC00OTQsOCArNDk0LDggQEAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb24oZGV2LCBTTUJCQVIsIGk4MDFfZHJpdmVyLm5hbWUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBTTUJ1cyByZWdpb24gIgotCQkJIjB4JWx4LTB4JWx4XG4iLCBpODAxX3NtYmEsCi0JCQlwY2lfcmVzb3VyY2VfZW5kKGRldiwgU01CQkFSKSk7CisJCQkiMHglbHgtMHglTHhcbiIsIGk4MDFfc21iYSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2VuZChkZXYsIFNNQkJBUikpOwogCQlnb3RvIGV4aXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCmluZGV4IDg3ZmFlOTMuLjA1OTliYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCmluZGV4IGQwMGEwMmYuLmFjYTdlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwpAQCAtMjYsNyArMjYsNiBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IDI3MjFlNGMuLjM3N2FiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtMTMsNyArMTMsNiBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzE5LDcgKzMxOCw3IEBACiAKIAlpZiAoaTJjLT5pcnEgIT0gMCkKIAkJaWYgKChyZXN1bHQgPSByZXF1ZXN0X2lycShpMmMtPmlycSwgbXBjX2kyY19pc3IsCi0JCQkJCSAgU0FfU0hJUlEsICJpMmMtbXBjIiwgaTJjKSkgPCAwKSB7CisJCQkJCSAgSVJRRl9TSEFSRUQsICJpMmMtbXBjIiwgaTJjKSkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiaTJjLW1wYyAtIGZhaWxlZCB0byBhdHRhY2ggaW50ZXJydXB0XG4iKTsKIAkJCWdvdG8gZmFpbF9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKaW5kZXggZGY3ODZlYi4uMmEwYjNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwpAQCAtMjAsNyArMjAsNiBAQAogCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDUxNTUwMTAuLmVlMTE0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtOTY4LDcgKzk2OCw3IEBACiAjZW5kaWYKIAogCXB4YV9zZXRfY2tlbihDS0VOMTRfSTJDLCAxKTsKLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfSTJDLCBpMmNfcHhhX2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfSTJDLCBpMmNfcHhhX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCiAJCQkgICJweGEyeHgtaTJjIiwgaTJjKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMKaW5kZXggZjdkNDBmOC4uNWQyOTUwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKQEAgLTgyOSw3ICs4MjgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBzM2MyNHh4X2kyY19pcnEsIFNBX0lOVEVSUlVQVCwKKwlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBzM2MyNHh4X2kyY19pcnEsIElSUUZfRElTQUJMRUQsCiAJCQkgIHBkZXYtPm5hbWUsIGkyYyk7CiAKIAlpZiAocmV0ICE9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfaTJjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2kyYy5jCmluZGV4IDI3ZmJmZWMuLmNiM2VmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9pMmMuYwpAQCAtMjEsNyArMjEsNiBAQAogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCmluZGV4IGU2ZjFhYjcuLmY5MjUwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjdW5kZWYJREVCVUcKICN1bmRlZglWRVJCT1NFCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC05MDksNyArOTA4LDcgQEAKIAogCWlmIChvdGdfZGV2KQogCQlzdGF0dXMgPSByZXF1ZXN0X2lycShvdGdfZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgb21hcF9vdGdfaXJxLAotCQkJCVNBX0lOVEVSUlVQVCwgRFJJVkVSX05BTUUsIGlzcCk7CisJCQkJSVJRRl9ESVNBQkxFRCwgRFJJVkVSX05BTUUsIGlzcCk7CiAJZWxzZQogCQlzdGF0dXMgPSAtRU5PREVWOwogCkBAIC0xNTc5LDcgKzE1NzgsNyBAQAogCX0KIAogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlzcC0+aXJxLCBpc3AxMzAxX2lycSwKLQkJCVNBX1NBTVBMRV9SQU5ET00sIERSSVZFUl9OQU1FLCBpc3ApOworCQkJSVJRRl9TQU1QTEVfUkFORE9NLCBEUklWRVJfTkFNRSwgaXNwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZGJnKCZpMmMtPmRldiwgImNhbid0IGdldCBJUlEgJWQsIGVyciAlZFxuIiwKIAkJCQlpc3AtPmlycSwgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCmluZGV4IDE3OWIxZTAuLmU3ZTI3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYwpAQCAtMTksNyArMTksNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTUyMiwxNCArNTIxLDE0IEBACiAJfQogCiAjaWZkZWYJQ09ORklHX0FSTQotCWlycWZsYWdzID0gU0FfU0FNUExFX1JBTkRPTSB8IFNBX1RSSUdHRVJfTE9XOworCWlycWZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9UUklHR0VSX0xPVzsKIAlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkpIHsKIAkJdHBzLT5tb2RlbCA9IFRQUzY1MDEwOwogCQlvbWFwX2NmZ19yZWcoVzRfR1BJTzU4KTsKIAkJdHBzLT5pcnEgPSBPTUFQX0dQSU9fSVJRKDU4KTsKIAkJb21hcF9yZXF1ZXN0X2dwaW8oNTgpOwogCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbig1OCwgMSk7Ci0JCWlycWZsYWdzIHw9IFNBX1RSSUdHRVJfRkFMTElORzsKKwkJaXJxZmxhZ3MgfD0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CiAJfQogCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKIAkJdHBzLT5tb2RlbCA9IFRQUzY1MDEwOwpAQCAtNTM3LDcgKzUzNiw3IEBACiAJCXRwcy0+aXJxID0gT01BUF9HUElPX0lSUShPTUFQX01QVUlPKDEpKTsKIAkJb21hcF9yZXF1ZXN0X2dwaW8oT01BUF9NUFVJTygxKSk7CiAJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKE9NQVBfTVBVSU8oMSksIDEpOwotCQlpcnFmbGFncyB8PSBTQV9UUklHR0VSX0ZBTExJTkc7CisJCWlycWZsYWdzIHw9IElSUUZfVFJJR0dFUl9GQUxMSU5HOwogCX0KIAlpZiAobWFjaGluZV9pc19vbWFwX2gzKCkpIHsKIAkJdHBzLT5tb2RlbCA9IFRQUzY1MDEzOwpAQCAtNTQ1LDcgKzU0NCw3IEBACiAJCS8vIEZJWE1FIHNldCB1cCB0aGlzIGJvYXJkJ3MgSVJRIC4uLgogCX0KICNlbHNlCi0JaXJxZmxhZ3MgPSBTQV9TQU1QTEVfUkFORE9NOworCWlycWZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOwogI2VuZGlmCiAKIAlpZiAodHBzLT5pcnEgPiAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCBkNjMzMDgxLi5kMTI2NmZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC03NzQsMTEgKzc3NCwxOCBAQAogCSAgcGVyZm9ybWFuY2UuCiAKIGNvbmZpZyBCTEtfREVWX0lERV9QTUFDX0JMSU5LCi0JYm9vbCAiQmxpbmsgbGFwdG9wIExFRCBvbiBkcml2ZSBhY3Rpdml0eSIKKwlib29sICJCbGluayBsYXB0b3AgTEVEIG9uIGRyaXZlIGFjdGl2aXR5IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIEJMS19ERVZfSURFX1BNQUMgJiYgQURCX1BNVQorCXNlbGVjdCBBREJfUE1VX0xFRAorCXNlbGVjdCBMRURTX1RSSUdHRVJTCisJc2VsZWN0IExFRFNfVFJJR0dFUl9JREVfRElTSwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgc2xlZXAgTEVEIGFzIGEgaGFyZCBkcml2ZQogCSAgYWN0aXZpdHkgTEVELgorCSAgVGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZCwgaXQgb25seSBzZWxlY3RzIEFEQl9QTVVfTEVEIGFuZAorCSAgTEVEU19UUklHR0VSX0lERV9ESVNLIGFuZCBjaGFuZ2VzIHRoZSBjb2RlIGluIHRoZSBuZXcgbGVkIGNsYXNzCisJICBkZXZpY2UgdG8gZGVmYXVsdCB0byB0aGUgaWRlLWRpc2sgdHJpZ2dlciAod2hpY2ggc2hvdWxkIGJlIHNldAorCSAgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzKS4KIAogY29uZmlnIEJMS19ERVZfSURFX1NXQVJNCiAJdHJpc3RhdGUgIklERSBmb3IgU2lieXRlIGV2YWx1YXRpb24gYm9hcmRzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCmluZGV4IDMwODg5N2U1Li44YTFjMjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCkBAIC02LDcgKzYsNiBAQAogICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgMzItYml0IElERSBJTy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMgYi9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMKaW5kZXggY2QxNWU2Mi4uNTc5N2UwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jCisrKyBiL2RyaXZlcnMvaWRlL2NyaXMvaWRlLWNyaXMuYwpAQCAtMTksNyArMTksNiBAQAogCiAjdW5kZWYgUkVBTExZX1NMT1dfSU8gICAgICAgICAgIC8qIG1vc3Qgc3lzdGVtcyBjYW4gc2FmZWx5IHVuZGVmIHRoaXMgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jIGIvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMKaW5kZXggZmI5MWNiOC4uMTU5NTU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMKKysrIGIvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMKQEAgLTUsNyArNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IDk5ZmE0MjQuLjY1NGQ0Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0zMDEsNyArMzAxLDYgQEAKICAKICNkZWZpbmUgSURFQ0RfVkVSU0lPTiAiNC42MSIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNTI3LDggKzM1MjYsNiBAQAogCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGluZm87CiAKIAlnLT5taW5vcnMgPSAxOwotCXNucHJpbnRmKGctPmRldmZzX25hbWUsIHNpemVvZihnLT5kZXZmc19uYW1lKSwKLQkJCSIlcy9jZCIsIGRyaXZlLT5kZXZmc19uYW1lKTsKIAlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKIAlnLT5mbGFncyA9IEdFTkhEX0ZMX0NEIHwgR0VOSERfRkxfUkVNT1ZBQkxFOwogCWlmIChpZGVfY2Ryb21fc2V0dXAoZHJpdmUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCBmMDMzZDczLi5mNzEyZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogLy8jZGVmaW5lIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMTAxOCw3ICsxMDE3LDYgQEAKIAlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGlka3AtPmRpc2s7CiAKIAlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCWRyaXZlLT5kZXZmc19uYW1lWzBdID0gJ1wwJzsKIAlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCXB1dF9kaXNrKGcpOwogCWtmcmVlKGlka3ApOwpAQCAtMTIyMiw3ICsxMjIwLDYgQEAKIAkJZHJpdmUtPmF0dGFjaCA9IDE7CiAKIAlnLT5taW5vcnMgPSAxIDw8IFBBUlROX0JJVFM7Ci0Jc3RyY3B5KGctPmRldmZzX25hbWUsIGRyaXZlLT5kZXZmc19uYW1lKTsKIAlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKIAlnLT5mbGFncyA9IGRyaXZlLT5yZW1vdmFibGUgPyBHRU5IRF9GTF9SRU1PVkFCTEUgOiAwOwogCXNldF9jYXBhY2l0eShnLCBpZGVkaXNrX2NhcGFjaXR5KGRyaXZlKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggNzgzYTI0Ny4uOTg5MThmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtNzQsNyArNzQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCA0NjU2NTg3Li5hZGJlOWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC04Miw3ICs4Miw2IEBACiAKICNkZWZpbmUgSURFRkxPUFBZX1ZFUlNJT04gIjAuOTkubmV3aWRlIgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTgzOSw3ICs4MzgsNyBAQAogCQkJInRyYW5zZmVycmVkXG4iLCBwYy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQpOwogCQljbGVhcl9iaXQoUENfRE1BX0lOX1BST0dSRVNTLCAmcGMtPmZsYWdzKTsKIAotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCiAJCWlmIChzdGF0dXMuYi5jaGVjayB8fCB0ZXN0X2JpdChQQ19ETUFfRVJST1IsICZwYy0+ZmxhZ3MpKSB7CiAJCQkvKiBFcnJvciBkZXRlY3RlZCAqLwpAQCAtMjE3Niw3ICsyMTc1LDYgQEAKIAogCWctPm1pbm9ycyA9IDEgPDwgUEFSVE5fQklUUzsKIAlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKLQlzdHJjcHkoZy0+ZGV2ZnNfbmFtZSwgZHJpdmUtPmRldmZzX25hbWUpOwogCWctPmZsYWdzID0gZHJpdmUtPnJlbW92YWJsZSA/IEdFTkhEX0ZMX1JFTU9WQUJMRSA6IDA7CiAJZy0+Zm9wcyA9ICZpZGVmbG9wcHlfb3BzOwogCWRyaXZlLT5hdHRhY2ggPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCA5MzVjYjI1Li5mYjY3OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAgCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTUwNSw3ICs1MDQsNyBAQAogCQl9CiAJfQogCi0JaWYgKChzdGF0ICYgRFJRX1NUQVQpICYmIHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKQorCWlmICgoc3RhdCAmIERSUV9TVEFUKSAmJiBycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJiBod2lmLT5lcnJfc3RvcHNfZmlmbyA9PSAwKQogCQl0cnlfdG9fZmx1c2hfbGVmdG92ZXJfZGF0YShkcml2ZSk7CiAKIAlpZiAoaHdpZi0+SU5CKElERV9TVEFUVVNfUkVHKSAmIChCVVNZX1NUQVR8RFJRX1NUQVQpKQpAQCAtNjk0LDcgKzY5Myw3IEBACiAJdTggc3RhdCA9IGh3aWYtPklOQihJREVfU1RBVFVTX1JFRyk7CiAJaW50IHJldHJpZXMgPSAxMDsKIAotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAlpZiAoKHN0YXQgJiBEUlFfU1RBVCkgJiYgYXJncyAmJiBhcmdzWzNdKSB7CiAJCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwogCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwpAQCAtMTI4Nyw3ICsxMjg2LDcgQEAKIAkJaWYgKG1hc2tlZF9pcnEgIT0gSURFX05PX0lSUSAmJiBod2lmLT5pcnEgIT0gbWFza2VkX2lycSkKIAkJCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOwogCQlzcGluX3VubG9jaygmaWRlX2xvY2spOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCQkJLyogYWxsb3cgb3RoZXIgSVJRcyB3aGlsZSB3ZSBzdGFydCB0aGlzIHJlcXVlc3QgKi8KIAkJc3RhcnRzdG9wID0gc3RhcnRfcmVxdWVzdChkcml2ZSwgcnEpOwogCQlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CkBAIC0xNjMyLDcgKzE2MzEsNyBAQAogCXNwaW5fdW5sb2NrKCZpZGVfbG9jayk7CiAKIAlpZiAoZHJpdmUtPnVubWFzaykKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkvKiBzZXJ2aWNlIHRoaXMgaW50ZXJydXB0LCBtYXkgc2V0IGhhbmRsZXIgZm9yIG5leHQgaW50ZXJydXB0ICovCiAJc3RhcnRzdG9wID0gaGFuZGxlcihkcml2ZSk7CiAJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOwpAQCAtMTcwNiw3ICsxNzA1LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBIV0dST1VQKGRyaXZlKTsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAJaW50IHdoZXJlID0gRUxFVkFUT1JfSU5TRVJUX0JBQ0ssIGVycjsKIAlpbnQgbXVzdF93YWl0ID0gKGFjdGlvbiA9PSBpZGVfd2FpdCB8fCBhY3Rpb24gPT0gaWRlX2hlYWRfd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IDk3YTQ5ZTcuLjY1NzE2NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC01OTcsNiArNTk2LDEwIEBACiB7CiAJaWYoSFdJRihkcml2ZSktPnVkbWFfZm91ciA9PSAwKQogCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIGZvciBTQVRBIGJ1dCBvbmx5IGlmIHdlIGFyZSBBVEE1IG9yIGhpZ2hlciAqLworCWlmIChkcml2ZS0+aWQtPmh3X2NvbmZpZyA9PSAwICYmIChkcml2ZS0+aWQtPm1ham9yX3Jldl9udW0gJiAweDdGRTApKQorCQlyZXR1cm4gMTsKIAlpZiAoIShkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NjAwMCkpCiAJCXJldHVybiAwOwogI2lmbmRlZiBDT05GSUdfSURFRE1BX0lWQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IDdkZGIxMTguLjFmZWZmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggOWViZjhhZS4uOWNhZGYwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTMzLDcgKzMzLDYgQEAKIAogI3VuZGVmIFJFQUxMWV9TTE9XX0lPCQkvKiBtb3N0IHN5c3RlbXMgY2FuIHNhZmVseSB1bmRlZiB0aGlzICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDcsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTAwNiw3ICsxMDA0LDcgQEAKICAqIGFuZCBpcnEgc2VyaWFsaXphdGlvbiBzaXR1YXRpb25zLiAgVGhpcyBpcyBzb21ld2hhdCBjb21wbGV4IGJlY2F1c2UKICAqIGl0IGhhbmRsZXMgc3RhdGljIGFzIHdlbGwgYXMgZHluYW1pYyAoUENNQ0lBKSBJREUgaW50ZXJmYWNlcy4KICAqCi0gKiBUaGUgU0FfSU5URVJSVVBUIGluIHNhX2ZsYWdzIG1lYW5zIGlkZV9pbnRyKCkgaXMgYWx3YXlzIGVudGVyZWQgd2l0aAorICogVGhlIElSUUZfRElTQUJMRUQgaW4gc2FfZmxhZ3MgbWVhbnMgaWRlX2ludHIoKSBpcyBhbHdheXMgZW50ZXJlZCB3aXRoCiAgKiBpbnRlcnJ1cHRzIGNvbXBsZXRlbHkgZGlzYWJsZWQuICBUaGlzIGNhbiBiZSBiYWQgZm9yIGludGVycnVwdCBsYXRlbmN5LAogICogYnV0IGFueXRoaW5nIGVsc2UgaGFzIGxlZCB0byBwcm9ibGVtcyBvbiBzb21lIG1hY2hpbmVzLiAgV2UgcmUtZW5hYmxlCiAgKiBpbnRlcnJ1cHRzIGFzIG11Y2ggYXMgd2UgY2FuIHNhZmVseSBkbyBpbiBtb3N0IHBsYWNlcy4KQEAgLTEwOTIsMTUgKzEwOTAsMTUgQEAKIAkgKiBBbGxvY2F0ZSB0aGUgaXJxLCBpZiBub3QgYWxyZWFkeSBvYnRhaW5lZCBmb3IgYW5vdGhlciBod2lmCiAJICovCiAJaWYgKCFtYXRjaCB8fCBtYXRjaC0+aXJxICE9IGh3aWYtPmlycSkgewotCQlpbnQgc2EgPSBTQV9JTlRFUlJVUFQ7CisJCWludCBzYSA9IElSUUZfRElTQUJMRUQ7CiAjaWYgZGVmaW5lZChfX21jNjgwMDBfXykgfHwgZGVmaW5lZChDT05GSUdfQVBVUykKLQkJc2EgPSBTQV9TSElSUTsKKwkJc2EgPSBJUlFGX1NIQVJFRDsKICNlbmRpZiAvKiBfX21jNjgwMDBfXyB8fCBDT05GSUdfQVBVUyAqLwogCiAJCWlmIChJREVfQ0hJUFNFVF9JU19QQ0koaHdpZi0+Y2hpcHNldCkpIHsKLQkJCXNhID0gU0FfU0hJUlE7CisJCQlzYSA9IElSUUZfU0hBUkVEOwogI2lmbmRlZiBDT05GSUdfSURFUENJX1NIQVJFX0lSUQotCQkJc2EgfD0gU0FfSU5URVJSVVBUOworCQkJc2EgfD0gSVJRRl9ESVNBQkxFRDsKICNlbmRpZiAvKiBDT05GSUdfSURFUENJX1NIQVJFX0lSUSAqLwogCQl9CiAKQEAgLTEyNzksMTAgKzEyNzcsNiBAQAogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGNvbnRhaW5lcl9vZihkZXYsIGlkZV9kcml2ZV90LCBnZW5kZXYpOwogCiAJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOwotCWlmIChkcml2ZS0+ZGV2ZnNfbmFtZVswXSAhPSAnXDAnKSB7Ci0JCWRldmZzX3JlbW92ZShkcml2ZS0+ZGV2ZnNfbmFtZSk7Ci0JCWRyaXZlLT5kZXZmc19uYW1lWzBdID0gJ1wwJzsKLQl9CiAJaWRlX3JlbW92ZV9kcml2ZV9mcm9tX2h3Z3JvdXAoZHJpdmUpOwogCWtmcmVlKGRyaXZlLT5pZCk7CiAJZHJpdmUtPmlkID0gTlVMTDsKQEAgLTEzMTYsMTIgKzEzMTAsNiBAQAogCQlkcml2ZS0+Z2VuZGV2LmJ1cyA9ICZpZGVfYnVzX3R5cGU7CiAJCWRyaXZlLT5nZW5kZXYuZHJpdmVyX2RhdGEgPSBkcml2ZTsKIAkJZHJpdmUtPmdlbmRldi5yZWxlYXNlID0gZHJpdmVfcmVsZWFzZV9kZXY7Ci0JCWlmIChkcml2ZS0+cHJlc2VudCkgewotCQkJc3ByaW50Zihkcml2ZS0+ZGV2ZnNfbmFtZSwgImlkZS9ob3N0JWQvYnVzJWQvdGFyZ2V0JWQvbHVuJWQiLAotCQkJCShod2lmLT5jaGFubmVsICYmIGh3aWYtPm1hdGUpID8KLQkJCQlod2lmLT5tYXRlLT5pbmRleCA6IGh3aWYtPmluZGV4LAotCQkJCWh3aWYtPmNoYW5uZWwsIHVuaXQsIGRyaXZlLT5sdW4pOwotCQl9CiAJfQogCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoaHdpZi0+bWFqb3IsIDApLCBNQVhfRFJJVkVTIDw8IFBBUlROX0JJVFMsCiAJCQlUSElTX01PRFVMRSwgYXRhX3Byb2JlLCBhdGFfbG9jaywgaHdpZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCA4NDY2NWUyLi5jMTJmMWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDA5ZjNhN2QuLjcwNjdhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtNDI0LDcgKzQyNCw2IEBACiAKICNkZWZpbmUgSURFVEFQRV9WRVJTSU9OICIxLjE5IgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTQzNSw3ICs0MzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC00NzI2LDkgKzQ3MjQsNiBAQAogCQkJTUtERVYoSURFVEFQRV9NQUpPUiwgdGFwZS0+bWlub3IpKTsKIAljbGFzc19kZXZpY2VfZGVzdHJveShpZGV0YXBlX3N5c2ZzX2NsYXNzLAogCQkJTUtERVYoSURFVEFQRV9NQUpPUiwgdGFwZS0+bWlub3IgKyAxMjgpKTsKLQlkZXZmc19yZW1vdmUoIiVzL210IiwgZHJpdmUtPmRldmZzX25hbWUpOwotCWRldmZzX3JlbW92ZSgiJXMvbXRuIiwgZHJpdmUtPmRldmZzX25hbWUpOwotCWRldmZzX3VucmVnaXN0ZXJfdGFwZShnLT5udW1iZXIpOwogCWlkZXRhcGVfZGV2c1t0YXBlLT5taW5vcl0gPSBOVUxMOwogCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJcHV0X2Rpc2soZyk7CkBAIC00OTAyLDE0ICs0ODk3LDYgQEAKIAljbGFzc19kZXZpY2VfY3JlYXRlKGlkZXRhcGVfc3lzZnNfY2xhc3MsIE5VTEwsCiAJCQlNS0RFVihJREVUQVBFX01BSk9SLCBtaW5vciArIDEyOCksICZkcml2ZS0+Z2VuZGV2LCAibiVzIiwgdGFwZS0+bmFtZSk7CiAKLQlkZXZmc19ta19jZGV2KE1LREVWKEhXSUYoZHJpdmUpLT5tYWpvciwgbWlub3IpLAotCQkJU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVUdPLAotCQkJIiVzL210IiwgZHJpdmUtPmRldmZzX25hbWUpOwotCWRldmZzX21rX2NkZXYoTUtERVYoSFdJRihkcml2ZSktPm1ham9yLCBtaW5vciArIDEyOCksCi0JCQlTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sCi0JCQkiJXMvbXRuIiwgZHJpdmUtPmRldmZzX25hbWUpOwotCi0JZy0+bnVtYmVyID0gZGV2ZnNfcmVnaXN0ZXJfdGFwZShkcml2ZS0+ZGV2ZnNfbmFtZSk7CiAJZy0+Zm9wcyA9ICZpZGV0YXBlX2Jsb2NrX29wczsKIAlpZGVfcmVnaXN0ZXJfcmVnaW9uKGcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IGE4MzliMmEuLjk3YTkyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKglyZXF1ZXN0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjIzLDcgKzIyMiw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXU4IHN0YXQ7CiAKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CiAJaWYgKCFPS19TVEFUKHN0YXQgPSBod2lmLT5JTkIoSURFX1NUQVRVU19SRUcpLFJFQURZX1NUQVQsQkFEX1NUQVQpKSB7CiAJCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsICJ0YXNrX25vX2RhdGFfaW50ciIsIHN0YXQpOwogCQkvKiBjYWxscyBpZGVfZW5kX2RyaXZlX2NtZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCA1OWZlMzU4Li4wNWZiZDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtMTMwLDcgKzEzMCw2IEBACiAKICNkZWZpbmUgX0lERV9DCQkJLyogVGVsbCBpZGUuaCBpdCdzIHJlYWxseSB1cyAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTE0Nyw3ICsxNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CkBAIC01OTIsMTMgKzU5MCw4IEBACiAJCWdvdG8gYWJvcnQ7CiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgewogCQlkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07Ci0JCWlmICghZHJpdmUtPnByZXNlbnQpIHsKLQkJCWlmIChkcml2ZS0+ZGV2ZnNfbmFtZVswXSAhPSAnXDAnKSB7Ci0JCQkJZGV2ZnNfcmVtb3ZlKGRyaXZlLT5kZXZmc19uYW1lKTsKLQkJCQlkcml2ZS0+ZGV2ZnNfbmFtZVswXSA9ICdcMCc7Ci0JCQl9CisJCWlmICghZHJpdmUtPnByZXNlbnQpCiAJCQljb250aW51ZTsKLQkJfQogCQlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJmRyaXZlLT5nZW5kZXYpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKQEAgLTE5OTYsNyArMTk4OSw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBpZGVfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIlVuaWZvcm0gTXVsdGktUGxhdGZvcm0gRS1JREUgZHJpdmVyICIgUkVWSVNJT04gIlxuIik7Ci0JZGV2ZnNfbWtfZGlyKCJpZGUiKTsKIAlzeXN0ZW1fYnVzX3NwZWVkID0gaWRlX3N5c3RlbV9idXNfc3BlZWQoKTsKIAogCWJ1c19yZWdpc3RlcigmaWRlX2J1c190eXBlKTsKQEAgLTIwNzQsNyArMjA2Niw2IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlwcm9jX2lkZV9kZXN0cm95KCk7CiAjZW5kaWYKLQlkZXZmc19yZW1vdmUoImlkZSIpOwogCiAJYnVzX3VucmVnaXN0ZXIoJmlkZV9idXNfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYwppbmRleCBmYjg4NzExLi45YzU0NDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMKQEAgLTQwLDcgKzQwLDYgQEAKICN1bmRlZiBSRUFMTFlfU0xPV19JTyAgICAgICAgICAgLyogbW9zdCBzeXN0ZW1zIGNhbiBzYWZlbHkgdW5kZWYgdGhpcyAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9kdGMyMjc4LmMKaW5kZXggMjBlYjViOC4uM2IxZDMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZHRjMjI3OC5jCkBAIC03LDcgKzcsNiBAQAogI3VuZGVmIFJFQUxMWV9TTE9XX0lPICAgICAgICAgICAvKiBtb3N0IHN5c3RlbXMgY2FuIHNhZmVseSB1bmRlZiB0aGlzICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvZ2F5bGUuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9nYXlsZS5jCmluZGV4IDNmYWMzZTkuLjY0ZDQyNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9nYXlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9nYXlsZS5jCkBAIC04LDcgKzgsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2hkLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaGQuYwppbmRleCA2NDM5ZGVjNi4uYWViZWNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2hkLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2hkLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogfTsKIAogLyoKLSAqIFRoaXMgaXMgdGhlIGhhcmQgZGlzayBJUlEgZGVzY3JpcHRpb24uIFRoZSBTQV9JTlRFUlJVUFQgaW4gc2FfZmxhZ3MKKyAqIFRoaXMgaXMgdGhlIGhhcmQgZGlzayBJUlEgZGVzY3JpcHRpb24uIFRoZSBJUlFGX0RJU0FCTEVEIGluIHNhX2ZsYWdzCiAgKiBtZWFucyB3ZSBydW4gdGhlIElSUS1oYW5kbGVyIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZDogIHRoaXMgaXMgYmFkIGZvcgogICogaW50ZXJydXB0IGxhdGVuY3ksIGJ1dCBhbnl0aGluZyBlbHNlIGhhcyBsZWQgdG8gcHJvYmxlbXMgb24gc29tZQogICogbWFjaGluZXMuCkBAIC04MDYsNyArODA2LDcgQEAKIAkJCXAtPmN5bCwgcC0+aGVhZCwgcC0+c2VjdCk7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKEhEX0lSUSwgaGRfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJoZCIsIE5VTEwpKSB7CisJaWYgKHJlcXVlc3RfaXJxKEhEX0lSUSwgaGRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiaGQiLCBOVUxMKSkgewogCQlwcmludGsoImhkOiB1bmFibGUgdG8gZ2V0IElSUSVkIGZvciB0aGUgaGFyZCBkaXNrIGRyaXZlclxuIiwKIAkJCUhEX0lSUSk7CiAJCWdvdG8gb3V0MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCmluZGV4IGE3N2ZiMjQuLmM0OGU4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYwpAQCAtMzksNyArMzksNiBAQAogI3VuZGVmIFJFQUxMWV9TTE9XX0lPCQkvKiBtb3N0IHN5c3RlbXMgY2FuIHNhZmVseSB1bmRlZiB0aGlzICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggNjAyNzk3YS4uYjdlNDU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtMTQ2LDcgKzE0NiwxNiBAQAogICAgIGtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBpZGVfZGV0YWNoICovCiAKLXN0YXRpYyBpbnQgaWRlY3NfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBjdGwsIHVuc2lnbmVkIGxvbmcgaXJxLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlKQorc3RhdGljIHZvaWQgaWRlY3NfbW1pb19maXh1cChpZGVfaHdpZl90ICpod2lmKQoreworCWRlZmF1bHRfaHdpZl9tbWlvcHMoaHdpZik7CisJaHdpZi0+bW1pbyA9IDI7CisKKwlpZGVfdW5kZWNvZGVkX3NsYXZlKGh3aWYpOworfQorCitzdGF0aWMgaW50IGlkZWNzX3JlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgaW8sIHVuc2lnbmVkIGxvbmcgY3RsLAorCXVuc2lnbmVkIGxvbmcgaXJxLCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCBpbnQgaXNfbW1pbykKIHsKICAgICBod19yZWdzX3QgaHc7CiAgICAgbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CkBAIC0xNTQsNyArMTYzLDE5IEBACiAgICAgaHcuaXJxID0gaXJxOwogICAgIGh3LmNoaXBzZXQgPSBpZGVfcGNpOwogICAgIGh3LmRldiA9ICZoYW5kbGUtPmRldjsKLSAgICByZXR1cm4gaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoJmh3LCBOVUxMLCBpZGVfdW5kZWNvZGVkX3NsYXZlKTsKKworICAgIGlmKGlzX21taW8pCisgICAgCXJldHVybiBpZGVfcmVnaXN0ZXJfaHdfd2l0aF9maXh1cCgmaHcsIE5VTEwsIGlkZWNzX21taW9fZml4dXApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKCZodywgTlVMTCwgaWRlX3VuZGVjb2RlZF9zbGF2ZSk7Cit9CisKK3ZvaWQgb3V0Yl9pbyh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpIHsKKwlvdXRiKHZhbHVlLCBwb3J0KTsKK30KKwordm9pZCBvdXRiX21lbSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpIHsKKwl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTgwLDcgKzIwMSw4IEBACiAgICAgfSAqc3RrID0gTlVMTDsKICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmc7CiAgICAgaW50IGksIHBhc3MsIGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDAsIGhkLCBpc19rbWUgPSAwOwotICAgIHVuc2lnbmVkIGxvbmcgaW9fYmFzZSwgY3RsX2Jhc2U7CisgICAgdW5zaWduZWQgbG9uZyBpb19iYXNlLCBjdGxfYmFzZSwgaXNfbW1pbywgdHJ5X3NsYXZlOworICAgIHZvaWQgKCpteV9vdXRiKSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBsb25nKTsKIAogICAgIERFQlVHKDAsICJpZGVfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIApAQCAtMjEwLDcgKzIzMiw3IEBACiAgICAgLyogTm90IHN1cmUgaWYgdGhpcyBpcyByaWdodC4uLiBsb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwogICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmc3RrLT5jb25mKSk7CiAKLSAgICBwYXNzID0gaW9fYmFzZSA9IGN0bF9iYXNlID0gMDsKKyAgICBwYXNzID0gaW9fYmFzZSA9IGN0bF9iYXNlID0gaXNfbW1pbyA9IHRyeV9zbGF2ZSA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKQEAgLTI1OCwxMSArMjgwLDQ1IEBACiAJCQlnb3RvIG5leHRfZW50cnk7CiAJCWlvX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAJCWN0bF9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgwZTsKKworCQlpZiAoaW8tPndpblswXS5sZW4gPj0gMHgyMCkKKwkJCXRyeV9zbGF2ZSA9IDE7CisKIAkgICAgfSBlbHNlIGdvdG8gbmV4dF9lbnRyeTsKIAkgICAgLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCiAJICAgIGJyZWFrOwogCX0KIAorCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChzdGstPmRmbHQubWVtLm53aW4gPiAwKSkgeworCSAgICB3aW5fcmVxX3QgcmVxOworCSAgICBtZW1yZXFfdCBtYXA7CisJICAgIGNpc3RwbF9tZW1fdCAqbWVtID0gKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJnN0ay0+ZGZsdC5tZW07CisKKwkgICAgaWYgKG1lbS0+d2luWzBdLmxlbiA8IDE2KQorCSAgICAJZ290byBuZXh0X2VudHJ5OworCisJICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOworCSAgICByZXEuQXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCSAgICByZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkgICAgcmVxLlNpemUgPSAwOworCisJICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7CisJICAgIGlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pICE9IDApCisJCWdvdG8gbmV4dF9lbnRyeTsKKwkgICAgbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkgICAgaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSAhPSAwKQorCQlnb3RvIG5leHRfZW50cnk7CisKKyAgICAgIAkgICAgaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7CisgICAgCSAgICBjdGxfYmFzZSA9IGlvX2Jhc2UgKyAweDBlOworICAgIAkgICAgaXNfbW1pbyA9IDE7CisKKyAgICAJICAgIGlmIChtZW0tPndpblswXS5sZW4gPj0gMHgyMCkKKyAgICAJICAgIAl0cnlfc2xhdmUgPSAxOworCisJICAgIGJyZWFrOworCX0KKwogICAgIG5leHRfZW50cnk6CiAJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQogCSAgICBtZW1jcHkoJnN0ay0+ZGZsdCwgY2ZnLCBzaXplb2Yoc3RrLT5kZmx0KSk7CkBAIC0yNzgsMjEgKzMzNCwyNiBAQAogICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAorICAgIGlmKGlzX21taW8pCisgICAgCW15X291dGIgPSBvdXRiX21lbTsKKyAgICBlbHNlCisgICAgCW15X291dGIgPSBvdXRiX2lvOworCiAgICAgLyogZGlzYWJsZSBkcml2ZSBpbnRlcnJ1cHRzIGR1cmluZyBJREUgcHJvYmUgKi8KLSAgICBvdXRiKDB4MDIsIGN0bF9iYXNlKTsKKyAgICBteV9vdXRiKDB4MDIsIGN0bF9iYXNlKTsKIAogICAgIC8qIHNwZWNpYWwgc2V0dXAgZm9yIEtYTEMwMDUgY2FyZCAqLwogICAgIGlmIChpc19rbWUpCi0Jb3V0YigweDgxLCBjdGxfYmFzZSsxKTsKKwlteV9vdXRiKDB4ODEsIGN0bF9iYXNlKzEpOwogCiAgICAgLyogcmV0cnkgcmVnaXN0cmF0aW9uIGluIGNhc2UgZGV2aWNlIGlzIHN0aWxsIHNwaW5uaW5nIHVwICovCiAgICAgZm9yIChoZCA9IC0xLCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQloZCA9IGlkZWNzX3JlZ2lzdGVyKGlvX2Jhc2UsIGN0bF9iYXNlLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmspOworCWhkID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSwgY3RsX2Jhc2UsIGxpbmstPmlycS5Bc3NpZ25lZElSUSwgbGluaywgaXNfbW1pbyk7CiAJaWYgKGhkID49IDApIGJyZWFrOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMHgyMCkgewotCSAgICBvdXRiKDB4MDIsIGN0bF9iYXNlICsgMHgxMCk7CisJaWYgKHRyeV9zbGF2ZSkgeworCSAgICBteV9vdXRiKDB4MDIsIGN0bF9iYXNlICsgMHgxMCk7CiAJICAgIGhkID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSArIDB4MTAsIGN0bF9iYXNlICsgMHgxMCwKLQkJCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmspOworCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSwgbGluaywgaXNfbW1pbyk7CiAJICAgIGlmIChoZCA+PSAwKSB7CiAJCWlvX2Jhc2UgKz0gMHgxMDsKIAkJY3RsX2Jhc2UgKz0gMHgxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYwppbmRleCA5MGNhYzYwOS4uZDY1NWRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYwpAQCAtMTEsNyArMTEsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCmluZGV4IDU2M2ZhYjAuLmQzYzNiYzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjdW5kZWYgUkVBTExZX1NMT1dfSU8JCS8qIG1vc3Qgc3lzdGVtcyBjYW4gc2FmZWx5IHVuZGVmIHRoaXMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvdW1jODY3Mi5jCmluZGV4IGNkYmRiMmYuLjZlMmM1OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L3VtYzg2NzIuYwpAQCAtNDAsNyArNDAsNiBAQAogI2RlZmluZSBSRUFMTFlfU0xPV19JTwkJLyogc29tZSBzeXN0ZW1zIGNhbiBzYWZlbHkgdW5kZWYgdGhpcyAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYyBiL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKaW5kZXggYzc0M2U2OC4uYTdjNzI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0yMiw3ICsyMSw3IEBACiAJdTggdWx0cmFfc2V0dGluZ3M7CiB9OwogCi1zdGF0aWMgc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgYWVjNnh4eF8zM19iYXNlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5IGFlYzZ4eHhfMzNfYmFzZSBbXSA9IHsKIAl7CVhGRVJfVURNQV82LAkweDMxLAkweDA3CX0sCiAJewlYRkVSX1VETUFfNSwJMHgzMSwJMHgwNgl9LAogCXsJWEZFUl9VRE1BXzQsCTB4MzEsCTB4MDUJfSwKQEAgLTQyLDcgKzQxLDcgQEAKIAl7CTAsCQkweDAwLAkweDAwCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSBhZWM2eHh4XzM0X2Jhc2UgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgYWVjNnh4eF8zNF9iYXNlIFtdID0gewogCXsJWEZFUl9VRE1BXzYsCTB4NDEsCTB4MDYJfSwKIAl7CVhGRVJfVURNQV81LAkweDQxLAkweDA1CX0sCiAJewlYRkVSX1VETUFfNCwJMHg0MSwJMHgwNAl9LApAQCAtMjU0LDcgKzI1Myw4IEBACiAKIAlpZiAoZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0IHwgUENJX1JPTV9BRERSRVNTX0VOQUJMRSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBST00gZW5hYmxlZCBhdCAweCUwOGx4XG4iLCBuYW1lLCBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJPTSBlbmFibGVkIGF0IDB4JTA4bHhcbiIsIG5hbWUsCisJCQkodW5zaWduZWQgbG9uZylkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KTsKIAl9CiAKIAlpZiAoYnVzX3NwZWVkIDw9IDMzKQpAQCAtNDI1LDEyICs0MjUsMTIgQEAKIAlyZXR1cm4gZC0+aW5pdF9zZXR1cChkZXYsIGQpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVjNjJ4eF9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg1MFVGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MCwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFIsICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NSwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAzIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NVIsICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0IH0sCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVjNjJ4eF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYpLCAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODYwKSwgMSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFIpLCAyIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1KSwgMyB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NVIpLCA0IH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZWM2Mnh4X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwppbmRleCA4YjI0YjRmLi4zNTFkYWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwpAQCAtMjcsNyArMjcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCmluZGV4IDg1MDA3Y2IuLjJiMGVhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwpAQCAtMTYsNyArMTYsNiBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKaW5kZXggOTAwZWZkMS4uYTU3NGRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKaW5kZXggMTFkMDM1Zi4uNjFiNWY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYwpAQCAtMTAzLDcgKzEwMyw2IEBACiAKIC8vI2RlZmluZSBDTUQ2NDBfRFVNUF9SRUdTCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKaW5kZXggM2Q5YzdhZi4uMjBjMzI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYwpAQCAtMTQsNyArMTQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTE5MCwxNCArMTg5LDYgQEAKICNlbmRpZgkvKiBkZWZpbmVkKERJU1BMQVlfQ01ENjRYX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICovCiAKIC8qCi0gKiBSZWdpc3RlcnMgYW5kIG1hc2tzIGZvciBlYXN5IGFjY2VzcyBieSBkcml2ZSBpbmRleDoKLSAqLwotI2lmIDAKLXN0YXRpYyB1OCBwcmVmZXRjaF9yZWdzWzRdICA9IHtDTlRSTCwgQ05UUkwsIEFSVFRJTTIzLCBBUlRUSU0yM307Ci1zdGF0aWMgdTggcHJlZmV0Y2hfbWFza3NbNF0gPSB7Q05UUkxfRElTX1JBMCwgQ05UUkxfRElTX1JBMSwgQVJUVElNMjNfRElTX1JBMiwgQVJUVElNMjNfRElTX1JBM307Ci0jZW5kaWYKLQotLyoKICAqIFRoaXMgcm91dGluZSB3cml0ZXMgdGhlIHByZXBhcmVkIHNldHVwL2FjdGl2ZS9yZWNvdmVyeSBjb3VudHMKICAqIGZvciBhIGRyaXZlIGludG8gdGhlIGNtZDY0NiBjaGlwc2V0IHJlZ2lzdGVycyB0byBhY3RpdmUgdGhlbS4KICAqLwpAQCAtNjA2LDEzICs1OTcsNiBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNsYXNzX3Jldik7CiAJY2xhc3NfcmV2ICY9IDB4ZmY7CiAKLSNpZmRlZiBfX2kzODZfXwotCWlmIChkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KSB7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsIGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQgfCBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJPTSBlbmFibGVkIGF0IDB4JTA4bHhcbiIsIG5hbWUsIGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpOwotCX0KLSNlbmRpZgotCiAJc3dpdGNoKGRldi0+ZGV2aWNlKSB7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9DTURfNjQzOgogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKaW5kZXggZWEzYzUyYy4uMDc5ZjdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwpAQCAtMzIsNyArMzIsNiBAQAogICoKICAqLwogIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKaW5kZXggMDkyNjllNS4uMzgwYmIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYwpAQCAtMTQsNyArMTQsNiBAQAogICoJQ1M1NTMwIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGZyb20gTmF0aW9uYWwgU2VtaWNvbmR1Y3Rvci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYwppbmRleCA2ZWIzMDUxLi41YzVhZWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiAgQ1M1NTM1IGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGZyb20gQU1ECiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwppbmRleCA5ZjQxZWNkLi4xMjA5MjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwpAQCAtNDQsNyArNDQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYwppbmRleCBiZTMzNGRhLi5iNDZjYjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKiBOb24tYm9vdGFibGUgY2FyZCBvciBIUFQzNDMgOjogcGNpY21kID09IDB4MDUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE3Niw3ICsxNzUsNyBAQAogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywKIAkJCQlkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0IHwgUENJX1JPTV9BRERSRVNTX0VOQUJMRSk7CiAJCQlwcmludGsoS0VSTl9JTkZPICJIUFQzNDU6IFJPTSBlbmFibGVkIGF0IDB4JTA4bHhcbiIsCi0JCQkJZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCk7CisJCQkJKHVuc2lnbmVkIGxvbmcpZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCk7CiAJCX0KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4RjApOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKaW5kZXggOTQwYmRkNC4uZTk5M2E1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYwpAQCAtNTUsNyArNTUsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MTcyLmMgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MTcyLmMKaW5kZXggOTM0NjI5Mi4uMGZjODlmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2l0ODE3Mi5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgxNzIuYwpAQCAtMjgsNyArMjgsNiBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCmluZGV4IDM4ZjQxYjMuLjNjYjA0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKQEAgLTYyLDcgKzYyLDYgQEAKICAqCS0JTW92ZSB0byBsaWJhdGEgb25jZSBpdCBncm93cyB1cAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtNjUxLDYgKzY1MCw4IEBACiAJfQogCWlkZV9zZXRfaHdpZmRhdGEoaHdpZiwgaWRldik7CiAKKwlod2lmLT5hdGFwaV9kbWEgPSAxOworCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoaHdpZi0+cGNpX2RldiwgMHg1MCwgJmNvbmYpOwogCWlmKGNvbmYgJiAxKSB7CiAJCWlkZXYtPnNtYXJ0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCmluZGV4IGZjZDUxNDIuLmQ5NTcxNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEluc3BpcmVkIGJ5IGFuIGVhcmxpZXIgZWZmb3J0IGZyb20gRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCmluZGV4IGFjZDYzMTcuLjZjMDk3ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqICBSZWxlYXNlZCB1bmRlciB0ZXJtcyBvZiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMTMsOCArMzEyLDggQEAKIAlpZiAoZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLAogCQkJZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5zdGFydCB8IFBDSV9ST01fQUREUkVTU19FTkFCTEUpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUk9NIGVuYWJsZWQgYXQgMHglMDhseFxuIiwKLQkJCW5hbWUsIGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogUk9NIGVuYWJsZWQgYXQgMHglMDhseFxuIiwgbmFtZSwKKwkJCSh1bnNpZ25lZCBsb25nKWRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpOwogCX0KIAogI2lmZGVmIENPTkZJR19QUENfUE1BQwpAQCAtMzM4LDYgKzMzNyw4IEBACiAJaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7CiAJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7CiAKKwlod2lmLT5lcnJfc3RvcHNfZmlmbyA9IDE7CisKIAlod2lmLT5pZGVfZG1hX2NoZWNrID0gJnBkY25ld19jb25maWdfZHJpdmVfeGZlcl9yYXRlOwogCWh3aWYtPmlkZV9kbWFfbG9zdGlycSA9ICZwZGNuZXdfaWRlX2RtYV9sb3N0aXJxOwogCWh3aWYtPmlkZV9kbWFfdGltZW91dCA9ICZwZGNuZXdfaWRlX2RtYV90aW1lb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCmluZGV4IDIyZDE3NTQuLmI0NjAyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKQEAgLTI4LDcgKzI4LDYgQEAKICAqICBSZWxlYXNlZCB1bmRlciB0ZXJtcyBvZiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDEsMzEgKzEwMCw2IEBACiAjZGVmaW5lCU1DMQkJMHgwMgkvKiBETUEiQyIgdGltaW5nICovCiAjZGVmaW5lCU1DMAkJMHgwMQkvKiBETUEiQyIgdGltaW5nICovCiAKLSNpZiAwCi0JdW5zaWduZWQgbG9uZyBiaWJtYSAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQl1OCBoaSA9IDAsIGxvID0gMDsKLQotCXU4IHNjMWMJPSBpbmJfcCgodTE2KWJpYm1hICsgMHgxYyk7IAotCXU4IHNjMWUJPSBpbmJfcCgodTE2KWJpYm1hICsgMHgxZSk7Ci0JdTggc2MxZgk9IGluYl9wKCh1MTYpYmlibWEgKyAweDFmKTsKLQotCXAgKz0gc3ByaW50ZihwLCAiSG9zdCBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJXNcbiIsCi0JCShzYzFmICYgMHgwOCkgPyAiVHJpLVN0YXRlZCIgOiAiTm9ybWFsIik7Ci0JcCArPSBzcHJpbnRmKHAsICJCdXMgQ2xvY2tpbmcgICAgICAgICAgICAgICAgICAgICAgICAgOiAlc1xuIiwKLQkJKChzYzFmICYgMHhDMCkgPT0gMHhDMCkgPyAiMTAwIEV4dGVybmFsIiA6Ci0JCSgoc2MxZiAmIDB4ODApID09IDB4ODApID8gIjY2IEV4dGVybmFsIiA6Ci0JCSgoc2MxZiAmIDB4NDApID09IDB4NDApID8gIjMzIEV4dGVybmFsIiA6ICIzMyBQQ0kgSW50ZXJuYWwiKTsKLQlwICs9IHNwcmludGYocCwgIklPIHBhZCBzZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICA6ICVzIG1BXG4iLAotCQkoKHNjMWMgJiAweDAzKSA9PSAweDAzKSA/ICIxMCIgOgotCQkoKHNjMWMgJiAweDAyKSA9PSAweDAyKSA/ICI4IiA6Ci0JCSgoc2MxYyAmIDB4MDEpID09IDB4MDEpID8gIjYiIDoKLQkJKChzYzFjICYgMHgwMCkgPT0gMHgwMCkgPyAiNCIgOiAiPz8iKTsKLQloaSA9IHNjMWUgPj4gNDsKLQlsbyA9IHNjMWUgJiAweGY7Ci0JcCArPSBzcHJpbnRmKHAsICJTdGF0dXMgUG9sbGluZyBQZXJpb2QgICAgICAgICAgICAgICAgOiAlZFxuIiwgaGkpOwotCXAgKz0gc3ByaW50ZihwLCAiSW50ZXJydXB0IENoZWNrIFN0YXR1cyBQb2xsaW5nIERlbGF5IDogJWRcbiIsIGxvKTsKLSNlbmRpZgotCiBzdGF0aWMgdTggcGRjMjAyeHhfcmF0ZW1hc2sgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1OCBtb2RlOwpAQCAtNTA1LDczICs0NzksMjAgQEAKIAkKIAlwZGMyMDJ4eF9yZXNldF9ob3N0KGh3aWYpOwogCXBkYzIwMnh4X3Jlc2V0X2hvc3QobWF0ZSk7Ci0jaWYgMAotCS8qCi0JICogRklYTUU6IEhhdmUgdG8ga2ljayBhbGwgdGhlIGRyaXZlcyBhZ2FpbiA6LS8KLQkgKiBXaGF0IGEgcGFpbiBpbiB0aGUgQUNFIQotCSAqLwotCWlmIChod2lmLT5wcmVzZW50KSB7Ci0JCXUxNiBodW5pdCA9IDA7Ci0JCWZvciAoaHVuaXQgPSAwOyBodW5pdCA8IE1BWF9EUklWRVM7ICsraHVuaXQpIHsKLQkJCWlkZV9kcml2ZV90ICpoZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2h1bml0XTsKLQkJCWlmIChoZHJpdmUtPnByZXNlbnQpIHsKLQkJCQlpZiAoaHdpZi0+aWRlX2RtYV9jaGVjaykKLQkJCQkJaHdpZi0+aWRlX2RtYV9jaGVjayhoZHJpdmUpOwotCQkJCWVsc2UKLQkJCQkJaHdpZi0+dHVuZXByb2MoaGRyaXZlLCA1KTsKLQkJCX0KLQkJfQotCX0KLQlpZiAobWF0ZS0+cHJlc2VudCkgewotCQl1MTYgbXVuaXQgPSAwOwotCQlmb3IgKG11bml0ID0gMDsgbXVuaXQgPCBNQVhfRFJJVkVTOyArK211bml0KSB7Ci0JCQlpZGVfZHJpdmVfdCAqbWRyaXZlID0gJm1hdGUtPmRyaXZlc1ttdW5pdF07Ci0JCQlpZiAobWRyaXZlLT5wcmVzZW50KSB7Ci0JCQkJaWYgKG1hdGUtPmlkZV9kbWFfY2hlY2spIAotCQkJCQltYXRlLT5pZGVfZG1hX2NoZWNrKG1kcml2ZSk7Ci0JCQkJZWxzZQotCQkJCQltYXRlLT50dW5lcHJvYyhtZHJpdmUsIDUpOwotCQkJfQotCQl9Ci0JfQotI2Vsc2UKIAlod2lmLT50dW5lcHJvYyhkcml2ZSwgNSk7Ci0jZW5kaWYKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCQljb25zdCBjaGFyICpuYW1lKQogeworCS8qIFRoaXMgZG9lc24ndCBhcHBlYXIgbmVlZGVkICovCiAJaWYgKGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywKIAkJCWRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQgfCBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJPTSBlbmFibGVkIGF0IDB4JTA4bHhcbiIsCi0JCQluYW1lLCBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJPTSBlbmFibGVkIGF0IDB4JTA4bHhcbiIsIG5hbWUsCisJCQkodW5zaWduZWQgbG9uZylkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KTsKIAl9CiAKLQkvKgotCSAqIHNvZnR3YXJlIHJlc2V0IC0gIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgYmlvcwotCSAqIHdpbGwgc2V0IFVETUEgdGltaW5nIG9uIGlmIHRoZSBoZGQgc3VwcG9ydHMgaXQuIFRoZQotCSAqIHVzZXIgbWF5IHdhbnQgdG8gdHVybiB1ZG1hIG9mZi4gQSBidWcgaW4gdGhlIHBkYzIwMjYyCi0JICogaXMgdGhhdCBpdCBjYW5ub3QgaGFuZGxlIGEgZG93bmdyYWRlIGluIHRpbWluZyBmcm9tCi0JICogVURNQSB0byBETUEuIERpc2sgYWNjZXNzZXMgYWZ0ZXIgaXNzdWluZyBhIHNldAotCSAqIGZlYXR1cmUgY29tbWFuZCB3aWxsIHJlc3VsdCBpbiBlcnJvcnMuIEEgc29mdHdhcmUKLQkgKiByZXNldCBsZWF2ZXMgdGhlIHRpbWluZyByZWdpc3RlcnMgaW50YWN0LAotCSAqIGJ1dCByZXNldHMgdGhlIGRyaXZlcy4KLQkgKi8KLSNpZiAwCi0JaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjcpIHx8Ci0JICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjUpIHx8Ci0JICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjMpIHx8Ci0JICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjIpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaGlnaF8xNgk9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwotCQlieXRlIHVkbWFfc3BlZWRfZmxhZwk9IGluYihoaWdoXzE2ICsgMHgwMDFmKTsKLQkJb3V0Yih1ZG1hX3NwZWVkX2ZsYWcgfCAweDEwLCBoaWdoXzE2ICsgMHgwMDFmKTsKLQkJbWRlbGF5KDEwMCk7Ci0JCW91dGIodWRtYV9zcGVlZF9mbGFnICYgfjB4MTAsIGhpZ2hfMTYgKyAweDAwMWYpOwotCQltZGVsYXkoMjAwMCk7CS8qIDIgc2Vjb25kcyA/ISAqLwotCX0KLQotI2VuZGlmCiAJcmV0dXJuIGRldi0+aXJxOwogfQogCkBAIC01OTksNiArNTIwLDggQEAKIAlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKIAlod2lmLT5zd2RtYV9tYXNrID0gMHgwNzsKIAorCWh3aWYtPmVycl9zdG9wc19maWZvID0gMTsKKwogCWh3aWYtPmlkZV9kbWFfY2hlY2sgPSAmcGRjMjAyeHhfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZTsKIAlod2lmLT5pZGVfZG1hX2xvc3RpcnEgPSAmcGRjMjAyeHhfaWRlX2RtYV9sb3N0aXJxOwogCWh3aWYtPmlkZV9kbWFfdGltZW91dCA9ICZwZGMyMDJ4eF9pZGVfZG1hX3RpbWVvdXQ7CkBAIC02ODcsMTkgKzYxMCw2IEBACiAJCQkJIm1pcnJvciBmaXhlZC5cbiIsIGQtPm5hbWUpOwogCQl9CiAJfQotCi0jaWYgMAotICAgICAgICBpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjYyKQotICAgICAgICBpZiAoZS0+cmVnICYmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGUtPnJlZywgJnRtcCkgfHwKLSAgICAgICAgICAgICAodG1wICYgZS0+bWFzaykgIT0gZS0+dmFsKSkKLQotICAgICAgICBpZiAoZC0+ZW5hYmxlYml0c1swXS5yZWcgIT0gZC0+ZW5hYmxlYml0c1sxXS5yZWcpIHsKLSAgICAgICAgICAgICAgICBkLT5lbmFibGViaXRzWzBdLnJlZyAgICA9IGQtPmVuYWJsZWJpdHNbMV0ucmVnOwotICAgICAgICAgICAgICAgIGQtPmVuYWJsZWJpdHNbMF0ubWFzayAgID0gZC0+ZW5hYmxlYml0c1sxXS5tYXNrOwotICAgICAgICAgICAgICAgIGQtPmVuYWJsZWJpdHNbMF0udmFsICAgID0gZC0+ZW5hYmxlYml0c1sxXS52YWw7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CiB9CiAKQEAgLTcxNCwyMiArNjI0LDYgQEAKIAkJCSJhdHRhY2hlZCB0byBJMk8gUkFJRCBjb250cm9sbGVyLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQotI2lmIDAKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHU4IHByaSA9IDAsIHNlYyA9IDA7Ci0KLSAgICAgICAgaWYgKGUtPnJlZyAmJiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBlLT5yZWcsICZ0bXApIHx8Ci0gICAgICAgICAgICAgKHRtcCAmIGUtPm1hc2spICE9IGUtPnZhbCkpCi0KLSAgICAgICAgaWYgKGQtPmVuYWJsZWJpdHNbMF0ucmVnICE9IGQtPmVuYWJsZWJpdHNbMV0ucmVnKSB7Ci0gICAgICAgICAgICAgICAgZC0+ZW5hYmxlYml0c1swXS5yZWcgICAgPSBkLT5lbmFibGViaXRzWzFdLnJlZzsKLSAgICAgICAgICAgICAgICBkLT5lbmFibGViaXRzWzBdLm1hc2sgICA9IGQtPmVuYWJsZWJpdHNbMV0ubWFzazsKLSAgICAgICAgICAgICAgICBkLT5lbmFibGViaXRzWzBdLnZhbCAgICA9IGQtPmVuYWJsZWJpdHNbMV0udmFsOwotICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCiAJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCmluZGV4IDdmYWM2ZjUuLjUwMzMyZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BpaXguYwpAQCAtOTAsNyArOTAsNiBAQAogICoJSUNIMwllcnJhdGEgIzE4CS0gRG9uJ3QgdXNlIG5hdGl2ZSBtb2RlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKaW5kZXggMjRlMjFiMi4uZmMyYjU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYwpAQCAtMTEsNyArMTEsNiBAQAogICoJQXZhaWxhYmxlIGZyb20gTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzk1LDcgKzM5NCw2IEBACiB7CiAJaWRlX2h3aWZfdAkqaHdpZiA9IE5VTEw7CiAKLXByaW50aygiU0MxMjAwOiByZXN1bWVcbiIpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwkvLyBicmluZyBjaGlwIGJhY2sgZnJvbSBzbGVlcCBzdGF0ZQogCWRldi0+Y3VycmVudF9zdGF0ZSA9IFBNX0VWRU5UX09OOwogCXBjaV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC00MDUsNyArNDAzLDYgQEAKIAl3aGlsZSAoKGh3aWYgPSBsb29rdXBfcGNpX2Rldihod2lmLCBkZXYpKSAhPSBOVUxMKSB7CiAJCXVuc2lnbmVkIGludAkJYmFzZXJlZywgciwgZCwgZm9ybWF0OwogCQlzYzEyMDBfc2F2ZWRfc3RhdGVfdAkqc3MgPSAoc2MxMjAwX3NhdmVkX3N0YXRlX3QgKilod2lmLT5jb25maWdfZGF0YTsKLXByaW50aygiJXM6IFNDMTIwMDogcmVzdW1lXG4iLCBod2lmLT5uYW1lKTsKIAogCQkvLwogCQkvLyBSZXN0b3JlIHRpbWluZyByZWdpc3RlcnM6ICB0aGlzIG1heSBiZSB1bm5lY2Vzc2FyeSBpZiBCSU9TIGFsc28gZG9lcyBpdApAQCAtNDkzLDcgKzQ5MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzYzEyMDBfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9OUywgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfSURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OUywgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfSURFKSwgMH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzYzEyMDBfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDBkMzA3M2YuLjAzNjc3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTIzLDExICsxMjIsMTEgQEAKIH0KIHN0YXRpYyBpbnQgc3Z3a3NfdHVuZV9jaGlwc2V0IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHhmZXJzcGVlZCkKIHsKLQl1OCB1ZG1hX21vZGVzW10JCT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1IH07Ci0JdTggZG1hX21vZGVzW10JCT0geyAweDc3LCAweDIxLCAweDIwIH07Ci0JdTggcGlvX21vZGVzW10JCT0geyAweDVkLCAweDQ3LCAweDM0LCAweDIyLCAweDIwIH07Ci0JdTggZHJpdmVfcGNpW10JCT0geyAweDQxLCAweDQwLCAweDQzLCAweDQyIH07Ci0JdTggZHJpdmVfcGNpMltdCQk9IHsgMHg0NSwgMHg0NCwgMHg0NywgMHg0NiB9OworCXN0YXRpYyBjb25zdCB1OCB1ZG1hX21vZGVzW10JCT0geyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1IH07CisJc3RhdGljIGNvbnN0IHU4IGRtYV9tb2Rlc1tdCQk9IHsgMHg3NywgMHgyMSwgMHgyMCB9OworCXN0YXRpYyBjb25zdCB1OCBwaW9fbW9kZXNbXQkJPSB7IDB4NWQsIDB4NDcsIDB4MzQsIDB4MjIsIDB4MjAgfTsKKwlzdGF0aWMgY29uc3QgdTggZHJpdmVfcGNpW10JCT0geyAweDQxLCAweDQwLCAweDQzLCAweDQyIH07CisJc3RhdGljIGNvbnN0IHU4IGRyaXZlX3BjaTJbXQkJPSB7IDB4NDUsIDB4NDQsIDB4NDcsIDB4NDYgfTsKIAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKQEAgLTM5MiwxNiArMzkxLDYgQEAKIAkJCX0KIAkJCW91dGJfcCgweDA2LCAweDBjMDApOwogCQkJZGV2LT5pcnEgPSBpbmJfcCgweDBjMDEpOwotI2lmIDAKLQkJCXByaW50aygiJXM6IGRldmljZSBjbGFzcyAoMHglMDR4KVxuIiwKLQkJCQluYW1lLCBkZXYtPmNsYXNzKTsKLQkJCWlmICgoZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpIHsKLQkJCQlkZXYtPmNsYXNzICY9IH4weDAwMEYwRjAwOwotCQkvLwkJZGV2LT5jbGFzcyB8PSB+MHgwMDAwMDQwMDsKLQkJCQlkZXYtPmNsYXNzIHw9IH4weDAwMDEwMTAwOwotCQkJCS8qKi8KLQkJCX0KLSNlbmRpZgogCQl9IGVsc2UgewogCQkJc3RydWN0IHBjaV9kZXYgKiBmaW5kZXYgPSBOVUxMOwogCQkJdTggcmVnNDEgPSAwOwpAQCAtNDUyLDcgKzQ0MSw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NUEsIGJ0cik7CiAJfQogCi0JcmV0dXJuIChkZXYtPmlycSkgPyBkZXYtPmlycSA6IDA7CisJcmV0dXJuIGRldi0+aXJxOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBhdGE2Nl9zdndrc19zdndrcyAoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTUwMCwxMSArNDg5LDYgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKIAotCS8qIFBlciBTcGVjaWZpZWQgRGVzaWduIGJ5IE9FTSwgYW5kIEFTSUMgQXJjaGl0ZWN0ICovCi0JaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUpIHx8Ci0JICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSkKLQkJcmV0dXJuIDE7Ci0KIAkvKiBTZXJ2ZXIgV29ya3MgKi8KIAlpZiAoZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MpCiAJCXJldHVybiBhdGE2Nl9zdndrc19zdndrcyAoaHdpZik7CkBAIC01MTcsMTAgKzUwMSwxNCBAQAogCWlmIChkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TVU4pCiAJCXJldHVybiBhdGE2Nl9zdndrc19jb2JhbHQgKGh3aWYpOwogCisJLyogUGVyIFNwZWNpZmllZCBEZXNpZ24gYnkgT0VNLCBhbmQgQVNJQyBBcmNoaXRlY3QgKi8KKwlpZiAoKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERSkgfHwKKwkgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIpKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQogCi0jdW5kZWYgQ0FOX1NXX0RNQQogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9zdndrcyAoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAl1OCBkbWFfc3RhdCA9IDA7CkBAIC01MzcsOSArNTI1LDYgQEAKIAkJaHdpZi0+dWx0cmFfbWFzayA9IDB4M2Y7CiAKIAlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKLSNpZmRlZiBDQU5fU1dfRE1BCi0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7Ci0jZW5kaWYgLyogQ0FOX1NXX0RNQSAqLwogCiAJaHdpZi0+YXV0b2RtYSA9IDA7CiAKQEAgLTU2Miw4ICs1NDcsNiBAQAogCWh3aWYtPmRyaXZlc1sxXS5hdXRvZG1hID0gKGRtYV9zdGF0ICYgMHg0MCk7CiAJaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gKCEoZG1hX3N0YXQgJiAweDIwKSk7CiAJaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gKCEoZG1hX3N0YXQgJiAweDQwKSk7Ci0vLwlod2lmLT5kcml2ZXNbMF0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7Ci0vLwlod2lmLT5kcml2ZXNbMV0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7CiB9CiAKIC8qCkBAIC01OTMsMTEgKzU3Niw2IEBACiAJCWlmIChkZXYtPnJlc291cmNlWzBdLnN0YXJ0ID09IDB4MDFmMSkKIAkJCWQtPmJvb3RhYmxlID0gT05fQk9BUkQ7CiAJfQotI2lmIDAKLQlpZiAoKElERV9QQ0lfREVWSURfRVEoZC0+ZGV2aWQsIERFVklEX0NTQjYpICYmCi0gICAgICAgICAgICAgKCEoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkpCi0JCWQtPmF1dG9kbWEgPSBBVVRPRE1BOwotI2VuZGlmCiAKIAlkLT5jaGFubmVscyA9ICgoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFIHx8CiAJCQlkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSAmJgpAQCAtNjcxLDExICs2NDksMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2d2tzX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNElERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JeyBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjVJREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAotCXsgUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyfSwKLQl7IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDN9LAotCXsgUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDEwMDBJREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDR9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUpLCAwfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFKSwgMX0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERSksIDJ9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSwgM30sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwSURFKSwgNH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdndrc19wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCmluZGV4IGYxY2ExNTQuLjI1Y2ViNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwpAQCAtMjcsNyArMjcsNiBAQAogICoJaWYgbmVjY2Vzc2FyeQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMzgsOSArMzcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSN1bmRlZiBTSUlNQUdFX1ZJUlRVQUxfRE1BUElPCi0jdW5kZWYgU0lJTUFHRV9MQVJHRV9ETUEKLQogLyoqCiAgKglwZGV2X2lzX3NhdGEJCS0JY2hlY2sgaWYgZGV2aWNlIGlzIFNBVEEKICAqCUBwZGV2OglQQ0kgZGV2aWNlIHRvIGNoZWNrCkBAIC00NjEsMzYgKzQ1Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKioKLSAqCXNpaW1hZ2VfbW1pb19pZGVfZG1hX2NvdW50CS0JRE1BIGJ5dGVzIGRvbmUKLSAqCUBkcml2ZQotICoKLSAqCUlmIHdlIGFyZSBkb2luZyBWRE1BIHRoZSBDTUQ2ODAgcmVxdWlyZXMgYSBsaXR0bGUgYml0Ci0gKglvZiBtb3JlIGNhcmVmdWwgaGFuZGxpbmcgYW5kIHdlIGhhdmUgdG8gcmVhZCB0aGUgY291bnRzCi0gKglvZmYgb3Vyc2VsdmVzLiBGb3Igbm9uIFZETUEgbGlmZSBpcyBub3JtYWwuCi0gKi8KLSAKLXN0YXRpYyBpbnQgc2lpbWFnZV9tbWlvX2lkZV9kbWFfY291bnQgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLSNpZmRlZiBTSUlNQUdFX1ZJUlRVQUxfRE1BUElPCi0Jc3RydWN0IHJlcXVlc3QgKnJxCT0gSFdHUk9VUChkcml2ZSktPnJxOwotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQl1MzIgY291bnQJCT0gKHJxLT5ucl9zZWN0b3JzICogU0VDVE9SX1NJWkUpOwotCXUzMiByY291bnQJCT0gMDsKLQl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLCAweDFDKTsKLQotCWh3aWYtPk9VVEwoY291bnQsIGFkZHIpOwotCXJjb3VudCA9IGh3aWYtPklOTChhZGRyKTsKLQotCXByaW50aygiXG4lczogY291bnQgPSAlZCwgcmNvdW50ID0gJWQsIG5yX3NlY3RvcnMgPSAlbHVcbiIsCi0JCWRyaXZlLT5uYW1lLCBjb3VudCwgcmNvdW50LCBycS0+bnJfc2VjdG9ycyk7Ci0KLSNlbmRpZiAvKiBTSUlNQUdFX1ZJUlRVQUxfRE1BUElPICovCi0JcmV0dXJuIF9faWRlX2RtYV9jb3VudChkcml2ZSk7Ci19Ci0jZW5kaWYKLQogLyoqCiAgKglzaWltYWdlX21taW9faWRlX2RtYV90ZXN0X2lycQktCWNoZWNrIHdlIGNhdXNlZCBhbiBJUlEKICAqCUBkcml2ZTogZHJpdmUgd2UgYXJlIHRlc3RpbmcKQEAgLTUxMiwxMiArNDc4LDEwIEBACiAJCQl1MzIgc2F0YV9lcnJvciA9IGh3aWYtPklOTChTQVRBX0VSUk9SX1JFRyk7CiAJCQlod2lmLT5PVVRMKHNhdGFfZXJyb3IsIFNBVEFfRVJST1JfUkVHKTsKIAkJCXdhdGNoZG9nID0gKHNhdGFfZXJyb3IgJiAweDAwNjgwMDAwKSA/IDEgOiAwOwotI2lmIDEKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzYXRhX2Vycm9yID0gMHglMDh4LCAiCiAJCQkJIndhdGNoZG9nID0gJWQsICVzXG4iLAogCQkJCWRyaXZlLT5uYW1lLCBzYXRhX2Vycm9yLCB3YXRjaGRvZywKIAkJCQlfX0ZVTkNUSU9OX18pOwotI2VuZGlmCiAKIAkJfSBlbHNlIHsKIAkJCXdhdGNoZG9nID0gKGV4dF9zdGF0ICYgMHg4MDAwKSA/IDEgOiAwOwpAQCAtODYzLDcgKzgyNyw3IEBACiAgKgl0aW1lLgogICoKICAqCVRoZSBoYXJkd2FyZSBzdXBwb3J0cyBidWZmZXJlZCB0YXNrZmlsZXMgYW5kIGFsc28gc29tZSByYXRoZXIgbmljZQotICoJZXh0ZW5kZWQgUFJEIHRhYmxlcy4gVW5mb3J0dW5hdGVseSByaWdodCBub3cgd2UgZG9uJ3QuCisgKglleHRlbmRlZCBQUkQgdGFibGVzLiBGb3IgYmV0dGVyIFNJMzExMiBzdXBwb3J0IHVzZSB0aGUgbGliYXRhIGRyaXZlcgogICovCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X21taW9faW9wc19zaWltYWdlKGlkZV9od2lmX3QgKmh3aWYpCkBAIC05MDAsOSArODY0LDYgQEAKIAkgKglzbyB3ZSBjYW4ndCBjdXJyZW50bHkgdXNlIGl0IHNhbmVseSBzaW5jZSB3ZSB3YW50IHRvCiAJICoJdXNlIExCQTQ4IG1vZGUuCiAJICovCQotLy8JYmFzZSArPSAweDEwOwotLy8JaHdpZi0+bm9fbGJhNDggPSAxOwotCiAJaHcuaW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXQk9IGJhc2U7CiAJaHcuaW9fcG9ydHNbSURFX0VSUk9SX09GRlNFVF0JPSBiYXNlICsgMTsKIAlody5pb19wb3J0c1tJREVfTlNFQ1RPUl9PRkZTRVRdCT0gYmFzZSArIDI7CkBAIC05MzYsMTUgKzg5Nyw4IEBACiAKICAgICAgICAJYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCi0jaWZkZWYgU0lJTUFHRV9MQVJHRV9ETUEKLS8qIFdhdGNoIHRoZSBicmFja2V0cyAtIGV2ZW4gS2VuIGFuZCBEZW5uaXMgZ2V0IHNvbWUgbGFuZ3VhZ2UgZGVzaWduIHdyb25nICovCi0JaHdpZi0+ZG1hX2Jhc2UJCQk9IGJhc2UgKyAoY2ggPyAweDE4IDogMHgxMCk7Ci0JaHdpZi0+ZG1hX2Jhc2UyCQkJPSBiYXNlICsgKGNoID8gMHgwOCA6IDB4MDApOwotCWh3aWYtPmRtYV9wcmR0YWJsZQkJPSBod2lmLT5kbWFfYmFzZTIgKyA0OwotI2Vsc2UgLyogISBTSUlNQUdFX0xBUkdFX0RNQSAqLwogCWh3aWYtPmRtYV9iYXNlCQkJPSBiYXNlICsgKGNoID8gMHgwOCA6IDB4MDApOwogCWh3aWYtPmRtYV9iYXNlMgkJCT0gYmFzZSArIChjaCA/IDB4MTggOiAweDEwKTsKLSNlbmRpZiAvKiBTSUlNQUdFX0xBUkdFX0RNQSAqLwogCWh3aWYtPm1taW8JCQk9IDI7CiB9CiAKQEAgLTEwNTIsOSArMTAwNiwxNiBAQAogCWh3aWYtPnJlc2V0X3BvbGwgPSAmc2lpbWFnZV9yZXNldF9wb2xsOwogCWh3aWYtPnByZV9yZXNldCA9ICZzaWltYWdlX3ByZV9yZXNldDsKIAotCWlmKGlzX3NhdGEoaHdpZikpCisJaWYoaXNfc2F0YShod2lmKSkgeworCQlzdGF0aWMgaW50IGZpcnN0ID0gMTsKKwogCQlod2lmLT5idXNwcm9jICAgPSAmc2lpbWFnZV9idXNwcm9jOwogCisJCWlmIChmaXJzdCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAic2lpbWFnZTogRm9yIGZ1bGwgU0FUQSBzdXBwb3J0IHlvdSBzaG91bGQgdXNlIHRoZSBsaWJhdGEgc2F0YV9zaWwgbW9kdWxlLlxuIik7CisJCQlmaXJzdCA9IDA7CisJCX0KKwl9CiAJaWYgKCFod2lmLT5kbWFfYmFzZSkgewogCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwogCQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwpAQCAtMTEyMSwxMCArMTA4MiwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lpbWFnZV9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0NNRCwgUENJX0RFVklDRV9JRF9TSUlfNjgwLCAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV82ODApLCAwfSwKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfU0FUQQotCXsgUENJX1ZFTkRPUl9JRF9DTUQsIFBDSV9ERVZJQ0VfSURfU0lJXzMxMTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAotCXsgUENJX1ZFTkRPUl9JRF9DTUQsIFBDSV9ERVZJQ0VfSURfU0lJXzEyMTBTQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMn0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV8zMTEyKSwgMX0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV8xMjEwU0EpLCAyfSwKICNlbmRpZgogCXsgMCwgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jIGIvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwppbmRleCA4ZTlkODc3Li44YTZjMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICAqIDk2Mi85NjMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jCmluZGV4IDhhNWM3YjIuLjBiNGI2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAgLS0gQmVuamFtaW4gSGVycmVuc2NobWlkdCAoMDEvMTEvMDMpIGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDQ3LDcgKzQ0Niw2IEBACiAJCXByaW50aygiICAgICVzOiBXaW5ib25kIDU1MyBicmlkZ2UgcmV2aXNpb24gJWQsIEJNLURNQSBkaXNhYmxlZFxuIiwKIAkJICAgICAgIGh3aWYtPm5hbWUsIHJldik7CiAJfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKIAkJZG1hX3N0YXRlIHw9IDB4NjA7CiAKIAkJaHdpZi0+YXRhcGlfZG1hID0gMTsKQEAgLTQ2OCw3ICs0NjYsNiBAQAogCiAJCWlmIChod2lmLT5tYXRlKQogCQkJaHdpZi0+c2VyaWFsaXplZCA9IGh3aWYtPm1hdGUtPnNlcmlhbGl6ZWQgPSAxOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCX0KIAlod2lmLT5PVVRCKGRtYV9zdGF0ZSwgaHdpZi0+ZG1hX2Jhc2UgKyAyKTsKIH0KQEAgLTQ4OSw3ICs0ODYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2w4MmMxMDVfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9XSU5CT05ELCBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODJDMTA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9XSU5CT05ELCBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODJDMTA1KSwgMH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbDgyYzEwNV9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKaW5kZXggNTExMmM3Mi4uNGExODUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKQEAgLTgsNyArOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNzIsNyArNzEsOCBAQAogCXUxNiBtYXN0ZXJfZGF0YTsKIAl1OCBzbGF2ZV9kYXRhOwogCQkJCSAvKiBJU1AgIFJUQyAqLwotCXU4IHRpbWluZ3NbXVsyXQk9IHsgeyAwLCAwIH0sCisJc3RhdGljIGNvbnN0IHU4IHRpbWluZ3NbXVsyXT0geworCQkJCSAgICB7IDAsIDAgfSwKIAkJCQkgICAgeyAwLCAwIH0sCiAJCQkJICAgIHsgMSwgMCB9LAogCQkJCSAgICB7IDIsIDEgfSwKQEAgLTExOSw3ICsxMTksNiBAQAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg0YSwgJnJlZzRhKTsKIAogCXN3aXRjaChzcGVlZCkgewotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCQljYXNlIFhGRVJfVURNQV80Ogl1X3NwZWVkID0gNCA8PCAoZHJpdmUtPmRuICogNCk7IGJyZWFrOwogCQljYXNlIFhGRVJfVURNQV8zOgl1X3NwZWVkID0gMyA8PCAoZHJpdmUtPmRuICogNCk7IGJyZWFrOwogCQljYXNlIFhGRVJfVURNQV8yOgl1X3NwZWVkID0gMiA8PCAoZHJpdmUtPmRuICogNCk7IGJyZWFrOwpAQCAtMTI4LDcgKzEyNyw2IEBACiAJCWNhc2UgWEZFUl9NV19ETUFfMjoKIAkJY2FzZSBYRkVSX01XX0RNQV8xOgogCQljYXNlIFhGRVJfU1dfRE1BXzI6CWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCQljYXNlIFhGRVJfUElPXzQ6CiAJCWNhc2UgWEZFUl9QSU9fMzoKIAkJY2FzZSBYRkVSX1BJT18yOgpAQCAtMTU2LDcgKzE1NCw2IEBACiAJcmV0dXJuIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCkpOwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCiBzdGF0aWMgaW50IHNsYzkwZTY2X2NvbmZpZ19kcml2ZV9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdTggc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBzbGM5MGU2Nl9yYXRlbWFzayhkcml2ZSkpOwpAQCAtMTk0LDcgKzE5MSw2IEBACiAJLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwogCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NsYzkwZTY2IChpZGVfaHdpZl90ICpod2lmKQogewpAQCAtMjIyLDcgKzIxOCw2IEBACiAJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7CiAJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEgCiAJaWYgKCEoaHdpZi0+dWRtYV9mb3VyKSkKIAkJLyogYml0WzAoMSldOiAwOjgwLCAxOjQwICovCiAJCWh3aWYtPnVkbWFfZm91ciA9IChyZWc0NyAmIG1hc2spID8gMCA6IDE7CkBAIC0yMzIsNyArMjI3LDYgQEAKIAkJaHdpZi0+YXV0b2RtYSA9IDE7CiAJaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOwogCWh3aWYtPmRyaXZlc1sxXS5hdXRvZG1hID0gaHdpZi0+YXV0b2RtYTsKLSNlbmRpZiAvKiAhQ09ORklHX0JMS19ERVZfSURFRE1BICovCiB9CiAKIHN0YXRpYyBpZGVfcGNpX2RldmljZV90IHNsYzkwZTY2X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKQEAgLTI1MCw3ICsyNDQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2xjOTBlNjZfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9FRkFSLCBQQ0lfREVWSUNFX0lEX0VGQVJfU0xDOTBFNjZfMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRUZBUiwgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzEpLCAwfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNsYzkwZTY2X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYyBiL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKaW5kZXggZjk2YjU2OC4uNTZkODQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKglOb3QgcHVibGljYWxseSBhdmFpbGFibGUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMgYi9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMKaW5kZXggZmU4MDI5NS4uMmEyODI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYwpAQCAtMTI4LDcgKzEyOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCmluZGV4IDNlNjc3YzQuLmFmZGFlZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL21wYzh4eC5jIGIvZHJpdmVycy9pZGUvcHBjL21wYzh4eC5jCmluZGV4IGI4MGM2MTMuLjBhYzlkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BwYy9tcGM4eHguYworKysgYi9kcml2ZXJzL2lkZS9wcGMvbXBjOHh4LmMKQEAgLTExLDcgKzExLDYgQEAKICAqCWJ5IE1hdGhldyBMb2NrZSA8bWF0dGxAbXZpc3RhLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKaW5kZXggZmZjYThiNi4uZWJmOTYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBiaWcgdGFibGUKICAqIAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDIxLDEwNyArNDIwLDYgQEAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfUE1BQyAqLwogCiAvKgotICogQmVsb3cgaXMgdGhlIGNvZGUgZm9yIGJsaW5raW5nIHRoZSBsYXB0b3AgTEVEIGFsb25nIHdpdGggaGFyZAotICogZGlzayBhY3Rpdml0eS4KLSAqLwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksKLQotLyogU2V0IHRvIDUwbXMgbWluaW11bSBsZWQtb24gdGltZSAoYWxzbyB1c2VkIHRvIGxpbWl0IGZyZXF1ZW5jeQotICogb2YgcmVxdWVzdHMgc2VudCB0byB0aGUgUE1VCi0gKi8KLSNkZWZpbmUgUE1VX0hEX0JMSU5LX1RJTUUJKEhaLzUwKQotCi1zdGF0aWMgc3RydWN0IGFkYl9yZXF1ZXN0IHBtdV9ibGlua19vbiwgcG11X2JsaW5rX29mZjsKLXN0YXRpYyBzcGlubG9ja190IHBtdV9ibGlua19sb2NrOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcG11X2JsaW5rX3N0b3B0aW1lOwotc3RhdGljIGludCBwbXVfYmxpbmtfbGVkc3RhdGU7Ci1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgcG11X2JsaW5rX3RpbWVyOwotc3RhdGljIGludCBwbXVfaWRlX2JsaW5rX2VuYWJsZWQ7Ci0KLQotc3RhdGljIHZvaWQKLXBtdV9oZF9ibGlua190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfYmxpbmtfbG9jaywgZmxhZ3MpOwotCi0JLyogV2UgbWF5IGhhdmUgYmVlbiB0cmlnZ2VyZWQgYWdhaW4gaW4gYSByYWN5IHdheSwgY2hlY2sKLQkgKiB0aGF0IHdlIHJlYWxseSB3YW50IHRvIHN3aXRjaCBpdCBvZmYKLQkgKi8KLQlpZiAodGltZV9hZnRlcihwbXVfYmxpbmtfc3RvcHRpbWUsIGppZmZpZXMpKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiBQcmV2aW91cyByZXEuIG5vdCBjb21wbGV0ZSwgdHJ5IDEwMG1zIG1vcmUgKi8KLQlpZiAocG11X2JsaW5rX29mZi5jb21wbGV0ZSA9PSAwKQotCQltb2RfdGltZXIoJnBtdV9ibGlua190aW1lciwgamlmZmllcyArIFBNVV9IRF9CTElOS19USU1FKTsKLQllbHNlIGlmIChwbXVfYmxpbmtfbGVkc3RhdGUpIHsKLQkJcG11X3JlcXVlc3QoJnBtdV9ibGlua19vZmYsIE5VTEwsIDQsIDB4ZWUsIDQsIDAsIDApOwotCQlwbXVfYmxpbmtfbGVkc3RhdGUgPSAwOwotCX0KLWRvbmU6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2JsaW5rX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXBtdV9oZF9raWNrX2JsaW5rKHZvaWQgKmRhdGEsIGludCBydykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCXBtdV9ibGlua19zdG9wdGltZSA9IGppZmZpZXMgKyBQTVVfSERfQkxJTktfVElNRTsKLQl3bWIoKTsKLQltb2RfdGltZXIoJnBtdV9ibGlua190aW1lciwgcG11X2JsaW5rX3N0b3B0aW1lKTsKLQkvKiBGYXN0IHBhdGggd2hlbiBMRUQgaXMgYWxyZWFkeSBPTiAqLwotCWlmIChwbXVfYmxpbmtfbGVkc3RhdGUgPT0gMSkKLQkJcmV0dXJuOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfYmxpbmtfbG9jaywgZmxhZ3MpOwotCWlmIChwbXVfYmxpbmtfb24uY29tcGxldGUgJiYgIXBtdV9ibGlua19sZWRzdGF0ZSkgewotCQlwbXVfcmVxdWVzdCgmcG11X2JsaW5rX29uLCBOVUxMLCA0LCAweGVlLCA0LCAwLCAxKTsKLQkJcG11X2JsaW5rX2xlZHN0YXRlID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2JsaW5rX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludAotcG11X2hkX2JsaW5rX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmR0OwotCWNvbnN0IGNoYXIgKm1vZGVsOwotCi0JLyogQ3VycmVudGx5LCBJIG9ubHkgZW5hYmxlIHRoaXMgZmVhdHVyZSBvbiBLZXlMYXJnbyBiYXNlZCBsYXB0b3BzLAotCSAqIG9sZGVyIGxhcHRvcHMgbWF5IHN1cHBvcnQgaXQgKGF0IGxlYXN0IGhlYXRocm93L3BhZGRpbmd0b24pIGJ1dAotCSAqIEkgZG9uJ3QgZmVlbCBsaWtlIGxvYWRpbmcgdGhvc2UgdmVuZXJhYmxlIG9sZCBtYWNoaW5lcyB3aXRoIHNvCi0JICogbXVjaCBhZGRpdGlvbmFsIGludGVycnVwdCAmIFBNVSBhY3Rpdml0eS4uLgotCSAqLwotCWlmIChwbXVfZ2V0X21vZGVsKCkgIT0gUE1VX0tFWUxBUkdPX0JBU0VEKQotCQlyZXR1cm4gMDsKLQkKLQlkdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7Ci0JaWYgKGR0ID09IE5VTEwpCi0JCXJldHVybiAwOwotCW1vZGVsID0gKGNvbnN0IGNoYXIgKilnZXRfcHJvcGVydHkoZHQsICJtb2RlbCIsIE5VTEwpOwotCWlmIChtb2RlbCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlpZiAoc3RybmNtcChtb2RlbCwgIlBvd2VyQm9vayIsIHN0cmxlbigiUG93ZXJCb29rIikpICE9IDAgJiYKLQkgICAgc3RybmNtcChtb2RlbCwgImlCb29rIiwgc3RybGVuKCJpQm9vayIpKSAhPSAwKSB7Ci0JCW9mX25vZGVfcHV0KGR0KTsKLQkgICAgCXJldHVybiAwOwotCX0KLQlvZl9ub2RlX3B1dChkdCk7Ci0KLQlwbXVfYmxpbmtfb24uY29tcGxldGUgPSAxOwotCXBtdV9ibGlua19vZmYuY29tcGxldGUgPSAxOwotCXNwaW5fbG9ja19pbml0KCZwbXVfYmxpbmtfbG9jayk7Ci0JaW5pdF90aW1lcigmcG11X2JsaW5rX3RpbWVyKTsKLQlwbXVfYmxpbmtfdGltZXIuZnVuY3Rpb24gPSBwbXVfaGRfYmxpbmtfdGltZW91dDsKLQotCXJldHVybiAxOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksgKi8KLQotLyoKICAqIE4uQi4gdGhpcyBjYW4ndCBiZSBhbiBpbml0ZnVuYywgYmVjYXVzZSB0aGUgbWVkaWEtYmF5IHRhc2sgY2FuCiAgKiBjYWxsIGlkZV9bdW5dcmVnaXN0ZXIgYXQgYW55IHRpbWUuCiAgKi8KQEAgLTExOTIsMjMgKzEwOTAsNiBAQAogCXBtaWYtPnRpbWluZ3NbMF0gPSAwOwogCXBtaWYtPnRpbWluZ3NbMV0gPSAwOwogCQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0JMSU5LCi0JLyogTm90ZTogVGhpcyBjb2RlIHdpbGwgYmUgY2FsbGVkIGZvciBldmVyeSBod2lmLCB0aHVzIHdlJ2xsCi0JICogdHJ5IHNldmVyYWwgdGltZSB0byBzdG9wIHRoZSBMRUQgYmxpbmtlciB0aW1lciwgIGJ1dCB0aGF0Ci0JICogc2hvdWxkIGJlIGhhcm1sZXNzCi0JICovCi0JaWYgKHBtdV9pZGVfYmxpbmtfZW5hYmxlZCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhlIFBNVSBibGluayAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2JsaW5rX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHBtdV9ibGlua19sZWRzdGF0ZSkKLQkJCWRlbF90aW1lcigmcG11X2JsaW5rX3RpbWVyKTsKLQkJcG11X2JsaW5rX2xlZHN0YXRlID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2JsaW5rX2xvY2ssIGZsYWdzKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksgKi8KLQogCWRpc2FibGVfaXJxKHBtaWYtPmlycSk7CiAKIAkvKiBUaGUgbWVkaWEgYmF5IHdpbGwgaGFuZGxlIGl0c2VsZiBqdXN0IGZpbmUgKi8KQEAgLTEzNzYsMTMgKzEyNTcsNiBAQAogCQlod2lmLT5zZWxlY3Rwcm9jID0gcG1hY19pZGVfc2VsZWN0cHJvYzsKIAlod2lmLT5zcGVlZHByb2MgPSBwbWFjX2lkZV90dW5lX2NoaXBzZXQ7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQ19CTElOSwotCXBtdV9pZGVfYmxpbmtfZW5hYmxlZCA9IHBtdV9oZF9ibGlua19pbml0KCk7Ci0KLQlpZiAocG11X2lkZV9ibGlua19lbmFibGVkKQotCQlod2lmLT5sZWRfYWN0ID0gcG11X2hkX2tpY2tfYmxpbms7Ci0jZW5kaWYKLQogCXByaW50ayhLRVJOX0lORk8gImlkZSVkOiBGb3VuZCBBcHBsZSAlcyBjb250cm9sbGVyLCBidXMgSUQgJWQlcywgaXJxICVkXG4iLAogCSAgICAgICBod2lmLT5pbmRleCwgbW9kZWxfbmFtZVtwbWlmLT5raW5kXSwgcG1pZi0+YWFwbF9idXNfaWQsCiAJICAgICAgIHBtaWYtPm1lZGlhYmF5ID8gIiAobWVkaWFiYXkpIiA6ICIiLCBod2lmLT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCBjMTFlM2IyLi5lYjA5NDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtMTgsNyArMTgsNiBAQAogICogIGNvbmZpZ3VyYXRpb24gb2YgYWxsIFBDSSBJREUgaW50ZXJmYWNlcyBwcmVzZW50IGluIGEgc3lzdGVtLiAgCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2NvbmZpZ19yb21zLmMgYi9kcml2ZXJzL2llZWUxMzk0L2NvbmZpZ19yb21zLmMKaW5kZXggMTAxN2ZkNy4uZTJkZTZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9jb25maWdfcm9tcy5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY29uZmlnX3JvbXMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZXMgZm9yIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJjc3IxMjEyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCA4NWMyZDRjLi44NzUzMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTgzLDcgKzgzLDYgQEAKIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jIGIvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYwppbmRleCAyNWIyMjYwLi42OTRkYTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2hvc3RzLmMgYi9kcml2ZXJzL2llZWUxMzk0L2hvc3RzLmMKaW5kZXggYWQ0OWMwNC4uNGZlZWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ob3N0cy5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuYwpAQCAtMTAsNyArMTAsNiBAQAogICogZGlyZWN0b3J5IG9mIHRoZSBrZXJuZWwgc291cmNlcyBmb3IgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0xMDgsNiArMTA3LDE0IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoaG9zdF9udW1fYWxsb2MpOwogCisvKgorICogVGhlIHBlbmRpbmdfcGFja2V0X3F1ZXVlIGlzIHNwZWNpYWwgaW4gdGhhdCBpdCdzIHByb2Nlc3NlZAorICogZnJvbSBoYXJkaXJxIGNvbnRleHQgdG9vIChzdWNoIGFzIGhwc2JfYnVzX3Jlc2V0KCkpLiBIZW5jZQorICogc3BsaXQgdGhlIGxvY2sgY2xhc3MgZnJvbSB0aGUgdXN1YWwgbmV0d29ya2luZyBza2ItaGVhZAorICogbG9jayBjbGFzcyBieSB1c2luZyBhIHNlcGFyYXRlIGtleSBmb3IgaXQ6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcGVuZGluZ19wYWNrZXRfcXVldWVfa2V5OworCiBzdHJ1Y3QgaHBzYl9ob3N0ICpocHNiX2FsbG9jX2hvc3Qoc3RydWN0IGhwc2JfaG9zdF9kcml2ZXIgKmRydiwgc2l6ZV90IGV4dHJhLAogCQkJCSAgc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTI5LDYgKzEzNiw4IEBACiAJaC0+ZHJpdmVyID0gZHJ2OwogCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaC0+cGVuZGluZ19wYWNrZXRfcXVldWUpOworCWxvY2tkZXBfc2V0X2NsYXNzKCZoLT5wZW5kaW5nX3BhY2tldF9xdWV1ZS5sb2NrLAorCQkJICAgJnBlbmRpbmdfcGFja2V0X3F1ZXVlX2tleSk7CiAJSU5JVF9MSVNUX0hFQUQoJmgtPmFkZHJfc3BhY2UpOwogCiAJZm9yIChpID0gMjsgaSA8IDE2OyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCmluZGV4IDQ5MzU0ZGUuLmY0MzczOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IDUwYzcxZTEuLmQ1NDFiNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKaW5kZXggM2QyNzg0MS4uZDRiYWQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYwpAQCAtODIsNyArODIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTU5MCwxMSArNTg5LDExIEBACiAJYnVmID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbik7CiAJc3ByaW50ZiAoaXJxX2J1ZiwgIiVkIiwgb2hjaS0+ZGV2LT5pcnEpOwogCVBSSU5UKEtFUk5fSU5GTywgIk9IQ0ktMTM5NCAlZC4lZCAoUENJKTogSVJRPVslc10gICIKLQkgICAgICAiTU1JTz1bJWx4LSVseF0gIE1heCBQYWNrZXQ9WyVkXSAgSVIvSVQgY29udGV4dHM9WyVkLyVkXSIsCisJICAgICAgIk1NSU89WyVsbHgtJWxseF0gIE1heCBQYWNrZXQ9WyVkXSAgSVIvSVQgY29udGV4dHM9WyVkLyVkXSIsCiAJICAgICAgKCgoKGJ1ZikgPj4gMTYpICYgMHhmKSArICgoKGJ1ZikgPj4gMjApICYgMHhmKSAqIDEwKSwKIAkgICAgICAoKCgoYnVmKSA+PiA0KSAmIDB4ZikgKyAoKGJ1ZikgJiAweGYpICogMTApLCBpcnFfYnVmLAotCSAgICAgIHBjaV9yZXNvdXJjZV9zdGFydChvaGNpLT5kZXYsIDApLAotCSAgICAgIHBjaV9yZXNvdXJjZV9zdGFydChvaGNpLT5kZXYsIDApICsgT0hDSTEzOTRfUkVHSVNURVJfU0laRSAtIDEsCisJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQob2hjaS0+ZGV2LCAwKSwKKwkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChvaGNpLT5kZXYsIDApICsgT0hDSTEzOTRfUkVHSVNURVJfU0laRSAtIDEsCiAJICAgICAgb2hjaS0+bWF4X3BhY2tldF9zaXplLAogCSAgICAgIG9oY2ktPm5iX2lzb19yY3ZfY3R4LCBvaGNpLT5uYl9pc29feG1pdF9jdHgpOwogCkBAIC0zMjE3LDcgKzMyMTYsNyBAQAogewogCXN0cnVjdCBocHNiX2hvc3QgKmhvc3Q7CiAJc3RydWN0IHRpX29oY2kgKm9oY2k7CS8qIHNob3J0Y3V0IHRvIGN1cnJlbnRseSBoYW5kbGVkIGRldmljZSAqLwotCXVuc2lnbmVkIGxvbmcgb2hjaV9iYXNlOworCXJlc291cmNlX3NpemVfdCBvaGNpX2Jhc2U7CiAKICAgICAgICAgaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpCiAJCUZBSUwoLUVOWElPLCAiRmFpbGVkIHRvIGVuYWJsZSBPSENJIGhhcmR3YXJlIik7CkBAIC0zMjcwLDE1ICszMjY5LDE2IEBACiAJICogY2xlYXJseSBzYXlzIGl0J3MgMmtiLCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uICovCiAJb2hjaV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKSA8IE9IQ0kxMzk0X1JFR0lTVEVSX1NJWkUpCi0JCVBSSU5UKEtFUk5fV0FSTklORywgIlBDSSByZXNvdXJjZSBsZW5ndGggb2YgJWx4IHRvbyBzbWFsbCEiLAotCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOworCQlQUklOVChLRVJOX1dBUk5JTkcsICJQQ0kgcmVzb3VyY2UgbGVuZ3RoIG9mIDB4JWxseCB0b28gc21hbGwhIiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogCiAJLyogU2VlbXMgUENNQ0lBIGhhbmRsZXMgdGhpcyBpbnRlcm5hbGx5LiBOb3Qgc3VyZSB3aHkuIFNlZW1zCiAJICogcHJldHR5IGJvZ3VzIHRvIGZvcmNlIGEgZHJpdmVyIHRvIHNwZWNpYWwgY2FzZSB0aGlzLiAgKi8KICNpZm5kZWYgUENNQ0lBCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKG9oY2lfYmFzZSwgT0hDSTEzOTRfUkVHSVNURVJfU0laRSwgT0hDSTEzOTRfRFJJVkVSX05BTUUpKQotCQlGQUlMKC1FTk9NRU0sICJNTUlPIHJlc291cmNlICgweCVseCAtIDB4JWx4KSB1bmF2YWlsYWJsZSIsCi0JCSAgICAgb2hjaV9iYXNlLCBvaGNpX2Jhc2UgKyBPSENJMTM5NF9SRUdJU1RFUl9TSVpFKTsKKwkJRkFJTCgtRU5PTUVNLCAiTU1JTyByZXNvdXJjZSAoMHglbGx4IC0gMHglbGx4KSB1bmF2YWlsYWJsZSIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW9oY2lfYmFzZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2hjaV9iYXNlICsgT0hDSTEzOTRfUkVHSVNURVJfU0laRSk7CiAjZW5kaWYKIAlvaGNpLT5pbml0X3N0YXRlID0gT0hDSV9JTklUX0hBVkVfTUVNX1JFR0lPTjsKIApAQCAtMzM5MiwxMiArMzM5MiwxMiBAQAogCXNwaW5fbG9ja19pbml0KCZvaGNpLT5ldmVudF9sb2NrKTsKIAogCS8qCi0JICogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGFsbCByaWdodCwgYnV0Li4uIGR1ZSB0byBTQV9TSElSUSB3ZQorCSAqIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBhbGwgcmlnaHQsIGJ1dC4uLiBkdWUgdG8gSVJRRl9TSEFSRUQgd2UKIAkgKiBtaWdodCBnZXQgY2FsbGVkIGFueXdheS4gIFdlJ2xsIHNlZSBubyBldmVudCwgb2YgY291cnNlLCBidXQKIAkgKiB3ZSBuZWVkIHRvIGdldCB0byB0aGF0ICJubyBldmVudCIsIHNvIGVub3VnaCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQKIAkgKiBieSB0aGF0IHBvaW50LgogCSAqLwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgb2hjaV9pcnFfaGFuZGxlciwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBvaGNpX2lycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKIAkJCSBPSENJMTM5NF9EUklWRVJfTkFNRSwgb2hjaSkpCiAJCUZBSUwoLUVOT01FTSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBzaGFyZWQgaW50ZXJydXB0ICVkIiwgZGV2LT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L291aTJjLnNoIGIvZHJpdmVycy9pZWVlMTM5NC9vdWkyYy5zaAppbmRleCBkNTBkYzdhLi5iOWQwZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L291aTJjLnNoCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvb3VpMmMuc2gKQEAgLTMsNyArMyw2IEBACiBjYXQgPDxFT0YKIC8qIEdlbmVyYXRlZCBmaWxlIGZvciBPVUkgZGF0YWJhc2UgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0lFRUUxMzk0X09VSV9EQgogc3RydWN0IG91aV9saXN0X3N0cnVjdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3BjaWx5bnguYyBiL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5jCmluZGV4IGUyOWRmZDIuLmU2ZjQxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAgICAgICAgRW5oYW5jZW1lbnRzIGluIGFzeW5jIGFuZCBpc28gc2VuZCBjb2RlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTEyNTQsNyArMTI1Myw3IEBACiAKIAlzcHJpbnRmIChpcnFfYnVmLCAiJWQiLCBkZXYtPmlycSk7CiAKLSAgICAgICAgaWYgKCFyZXF1ZXN0X2lycShkZXYtPmlycSwgbHlueF9pcnFfaGFuZGxlciwgU0FfU0hJUlEsCisgICAgICAgIGlmICghcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGx5bnhfaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELAogICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUxZTlhfRFJJVkVSX05BTUUsIGx5bngpKSB7CiAgICAgICAgICAgICAgICAgUFJJTlQoS0VSTl9JTkZPLCBseW54LT5pZCwgImFsbG9jYXRlZCBpbnRlcnJ1cHQgJXMiLCBpcnFfYnVmKTsKICAgICAgICAgICAgICAgICBseW54LT5zdGF0ZSA9IGhhdmVfaW50cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5oIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmgKaW5kZXggZDYzMWFhOC4uZWMyNzMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fUENJTFlOWF9IX18KICNkZWZpbmUgX19QQ0lMWU5YX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUENJTFlOWF9EUklWRVJfTkFNRSAgICAgICJwY2lseW54IgogI2RlZmluZSBQQ0lMWU5YX01BSk9SICAgICAgICAgICAgMTc3CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCmluZGV4IDFkNWNlYjcuLmFhYTc0ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCkBAIC0zOCw3ICszOCw2IEBACiAgKgkgIGJ1dCB0aGUgY29kZSBuZWVkcyBhZGRpdGlvbmFsIGRlYnVnZ2luZy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKaW5kZXggMjk1ZDBmOC4uYzZlM2YwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiBFTk9UVFkgZm9yIHVuc3VwcG9ydGVkIGlvY3RsIHJlcXVlc3QKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggNDUwYWRmZS4uM2Y2NzA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC0zMTUyLDYgKzMxNTIsNyBAQAogCQl9CiAJCWlmIChjbV9pZF9wcml2LT5hbHRfYXYuYWhfYXR0ci5kbGlkKSB7CiAJCQkqcXBfYXR0cl9tYXNrIHw9IElCX1FQX0FMVF9QQVRIOworCQkJcXBfYXR0ci0+YWx0X3BvcnRfbnVtID0gY21faWRfcHJpdi0+YWx0X2F2LnBvcnQtPnBvcnRfbnVtOwogCQkJcXBfYXR0ci0+YWx0X2FoX2F0dHIgPSBjbV9pZF9wcml2LT5hbHRfYXYuYWhfYXR0cjsKIAkJfQogCQlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCmluZGV4IGE5MDhhN2IuLmJkZjVkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKQEAgLTE5NjMsNyArMTk2Myw3IEBACiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF91b2JqKCZvYmotPnVvYmplY3QsIDAsIGZpbGUtPnVjb250ZXh0KTsKKwlpbml0X3VvYmooJm9iai0+dW9iamVjdCwgY21kLnVzZXJfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CiAJZG93bl93cml0ZSgmb2JqLT51b2JqZWN0Lm11dGV4KTsKIAogCXBkICA9IGlkcl9yZWFkX3BkKGNtZC5wZF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKaW5kZXggOWVhNjdjNC4uMWRiOTQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL0tjb25maWcKQEAgLTEsMTYgKzEsMTYgQEAKIGNvbmZpZyBJUEFUSF9DT1JFCi0JdHJpc3RhdGUgIlBhdGhTY2FsZSBJbmZpbmlQYXRoIERyaXZlciIKKwl0cmlzdGF0ZSAiUUxvZ2ljIEluZmluaVBhdGggRHJpdmVyIgogCWRlcGVuZHMgb24gNjRCSVQgJiYgUENJX01TSSAmJiBORVQKIAktLS1oZWxwLS0tCi0JVGhpcyBpcyBhIGxvdy1sZXZlbCBkcml2ZXIgZm9yIFBhdGhTY2FsZSBJbmZpbmlQYXRoIGhvc3QgY2hhbm5lbAorCVRoaXMgaXMgYSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBRTG9naWMgSW5maW5pUGF0aCBob3N0IGNoYW5uZWwKIAlhZGFwdGVycyAoSENBcykgYmFzZWQgb24gdGhlIEhULTQwMCBhbmQgUEUtODAwIGNoaXBzLgogCiBjb25maWcgSU5GSU5JQkFORF9JUEFUSAotCXRyaXN0YXRlICJQYXRoU2NhbGUgSW5maW5pUGF0aCBWZXJicyBEcml2ZXIiCisJdHJpc3RhdGUgIlFMb2dpYyBJbmZpbmlQYXRoIFZlcmJzIERyaXZlciIKIAlkZXBlbmRzIG9uIElQQVRIX0NPUkUgJiYgSU5GSU5JQkFORAogCS0tLWhlbHAtLS0KIAlUaGlzIGlzIGEgZHJpdmVyIHRoYXQgcHJvdmlkZXMgSW5maW5pQmFuZCB2ZXJicyBzdXBwb3J0IGZvcgotCVBhdGhTY2FsZSBJbmZpbmlQYXRoIGhvc3QgY2hhbm5lbCBhZGFwdGVycyAoSENBcykuICBUaGlzCisJUUxvZ2ljIEluZmluaVBhdGggaG9zdCBjaGFubmVsIGFkYXB0ZXJzIChIQ0FzKS4gIFRoaXMKIAlhbGxvd3MgdGhlc2UgZGV2aWNlcyB0byBiZSB1c2VkIHdpdGggYm90aCBrZXJuZWwgdXBwZXIgbGV2ZWwKIAlwcm90b2NvbHMgc3VjaCBhcyBJUC1vdmVyLUluZmluaUJhbmQgYXMgd2VsbCBhcyB3aXRoIHVzZXJzcGFjZQogCWFwcGxpY2F0aW9ucyAoaW4gY29uanVuY3Rpb24gd2l0aCBJbmZpbmlCYW5kIHVzZXJzcGFjZSBhY2Nlc3MpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlCmluZGV4IGI0ZDA4NGEuLmIwYmY3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1FWFRSQV9DRkxBR1MgKz0gLURJUEFUSF9JRFNUUj0nIlBhdGhTY2FsZSBrZXJuZWwub3JnIGRyaXZlciInIFwKK0VYVFJBX0NGTEFHUyArPSAtRElQQVRIX0lEU1RSPSciUUxvZ2ljIGtlcm5lbC5vcmcgZHJpdmVyIicgXAogCS1ESVBBVEhfS0VSTl9UWVBFPTAKIAogb2JqLSQoQ09ORklHX0lQQVRIX0NPUkUpICs9IGlwYXRoX2NvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oCmluZGV4IDQ4YTU1MjQuLjA2MmJkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY29tbW9uLmgKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0zOCw3ICszOSw4IEBACiAgKiB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBjb2RlLgogICovCiAKLS8qIFRoaXMgaXMgdGhlIElFRUUtYXNzaWduZWQgT1VJIGZvciBQYXRoU2NhbGUsIEluYy4gKi8KKworLyogVGhpcyBpcyB0aGUgSUVFRS1hc3NpZ25lZCBPVUkgZm9yIFFMb2dpYyBJbmMuIEluZmluaVBhdGggKi8KICNkZWZpbmUgSVBBVEhfU1JDX09VSV8xIDB4MDAKICNkZWZpbmUgSVBBVEhfU1JDX09VSV8yIDB4MTEKICNkZWZpbmUgSVBBVEhfU1JDX09VSV8zIDB4NzUKQEAgLTk2LDggKzk4LDggQEAKIAlfX3U2NCBzcHNfaHdlcnJzOwogCS8qIG51bWJlciBvZiB0aW1lcyBJQiBsaW5rIGNoYW5nZWQgc3RhdGUgdW5leHBlY3RlZGx5ICovCiAJX191NjQgc3BzX2libGluazsKLQkvKiBubyBsb25nZXIgdXNlZDsgbGVmdCBmb3IgY29tcGF0aWJpbGl0eSAqLwotCV9fdTY0IHNwc191bnVzZWQzOworCS8qIGtlcm5lbCByZWNlaXZlIGludGVycnVwdHMgdGhhdCBkaWRuJ3QgcmVhZCBpbnRzdGF0ICovCisJX191NjQgc3BzX2Zhc3RyY3ZpbnQ7CiAJLyogbnVtYmVyIG9mIGtlcm5lbCAocG9ydDApIHBhY2tldHMgcmVjZWl2ZWQgKi8KIAlfX3U2NCBzcHNfcG9ydDBwa3RzOwogCS8qIG51bWJlciBvZiAiZXRoZXJuZXQiIHBhY2tldHMgc2VudCBieSBkcml2ZXIgKi8KQEAgLTEyMSw4ICsxMjMsNyBAQAogCV9fdTY0IHNwc19wb3J0czsKIAkvKiBsaXN0IG9mIHBrZXlzIChvdGhlciB0aGFuIGRlZmF1bHQpIGFjY2VwdGVkICgwIG1lYW5zIG5vdCBzZXQpICovCiAJX191MTYgc3BzX3BrZXlzWzRdOwotCS8qIGxpZHMgZm9yIHVwIHRvIDQgaW5maW5pcGF0aHMsIGluZGV4ZWQgYnkgaW5maW5pcGF0aCAjICovCi0JX191MTYgc3BzX2xpZFs0XTsKKwlfX3UxNiBzcHNfdW51c2VkMTZbNF07IC8qIGF2YWlsYWJsZTsgbWFpbnRhaW5pbmcgY29tcGF0aWJsZSBsYXlvdXQgKi8KIAkvKiBudW1iZXIgb2YgdXNlciBwb3J0cyBwZXIgY2hpcCAobm90IElCIHBvcnRzKSAqLwogCV9fdTMyIHNwc19ucG9ydHM7CiAJLyogbm90IG91ciBpbnRlcnJ1cHQsIG9yIGFscmVhZHkgaGFuZGxlZCAqLwpAQCAtMTQwLDEwICsxNDEsOCBAQAogCSAqIHBhY2tldHMgaWYgaXBhdGggbm90IGNvbmZpZ3VyZWQsIHNtYS9tYWQsIGV0Yy4pCiAJICovCiAJX191NjQgc3BzX2tyZHJvcHM7Ci0JLyogbWxpZHMgZm9yIHVwIHRvIDQgaW5maW5pcGF0aHMsIGluZGV4ZWQgYnkgaW5maW5pcGF0aCAjICovCi0JX191MTYgc3BzX21saWRbNF07CiAJLyogcGFkIGZvciBmdXR1cmUgZ3Jvd3RoICovCi0JX191NjQgX19zcHNfcGFkWzQ1XTsKKwlfX3U2NCBfX3Nwc19wYWRbNDZdOwogfTsKIAogLyoKQEAgLTMxMCw2ICszMDksOSBAQAogCV9fdTMyIHNwaV9yY3ZfZWdyY2h1bmtzaXplOwogCS8qIHRvdGFsIHNpemUgb2YgbW1hcCB0byBjb3ZlciBmdWxsIHJjdmVncmJ1ZmZlcnMgKi8KIAlfX3UzMiBzcGlfcmN2X2VncmJ1ZnRvdGxlbjsKKwlfX3UzMiBzcGlfZmlsbGVyX2Zvcl9hbGlnbjsKKwkvKiBhZGRyZXNzIG9mIHJlYWRvbmx5IG1lbW9yeSBjb3B5IG9mIHRoZSByY3ZoZHJxIHRhaWwgcmVnaXN0ZXIuICovCisJX191NjQgc3BpX3Jjdmhkcl90YWlsYWRkcjsKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKTsKIAogCkBAIC0zNDIsOSArMzQ0LDkgQEAKIC8qCiAgKiBTaW1pbGFybHksIHRoaXMgaXMgdGhlIGtlcm5lbCB2ZXJzaW9uIGdvaW5nIGJhY2sgdG8gdGhlIHVzZXIuICBJdCdzCiAgKiBzbGlnaHRseSBkaWZmZXJlbnQsIGluIHRoYXQgd2Ugd2FudCB0byB0ZWxsIGlmIHRoZSBkcml2ZXIgd2FzIGJ1aWx0IGFzCi0gKiBwYXJ0IG9mIGEgUGF0aFNjYWxlIHJlbGVhc2UsIG9yIGZyb20gdGhlIGRyaXZlciBmcm9tIE9wZW5JQiwga2VybmVsLm9yZywKLSAqIG9yIGEgc3RhbmRhcmQgZGlzdHJpYnV0aW9uLCBmb3Igc3VwcG9ydCByZWFzb25zLiAgVGhlIGhpZ2ggYml0IGlzIDAgZm9yCi0gKiBub24tUGF0aFNjYWxlLCBhbmQgMSBmb3IgUGF0aFNjYWxlLWJ1aWx0L3N1cHBsaWVkLgorICogcGFydCBvZiBhIFFMb2dpYyByZWxlYXNlLCBvciBmcm9tIHRoZSBkcml2ZXIgZnJvbSBvcGVuZmFicmljcy5vcmcsCisgKiBrZXJuZWwub3JnLCBvciBhIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiwgZm9yIHN1cHBvcnQgcmVhc29ucy4KKyAqIFRoZSBoaWdoIGJpdCBpcyAwIGZvciBub24tUUxvZ2ljIGFuZCAxIGZvciBRTG9naWMtYnVpbHQvc3VwcGxpZWQuCiAgKgogICogSXQncyByZXR1cm5lZCBieSB0aGUgZHJpdmVyIHRvIHRoZSB1c2VyIGNvZGUgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIHRoZQogICogc3BpX3N3X3ZlcnNpb24gZmllbGQgb2YgaXBhdGhfYmFzZV9pbmZvLCBzbyB0aGUgdXNlciBjb2RlIGNhbiBpbiB0dXJuCkBAIC0zNzksMTMgKzM4MSw3IEBACiAJICovCiAJX191MzIgc3B1X3JjdmhkcnNpemU7CiAKLQkvKgotCSAqIGNhY2hlIGxpbmUgYWxpZ25lZCAoNjQgYnl0ZSkgdXNlciBhZGRyZXNzIHRvCi0JICogd2hpY2ggdGhlIHJjdmhkcnRhaWwgcmVnaXN0ZXIgd2lsbCBiZSB3cml0dGVuIGJ5IGluZmluaXBhdGgKLQkgKiB3aGVuZXZlciBpdCBjaGFuZ2VzLCBzbyB0aGF0IG5vIGNoaXAgcmVnaXN0ZXJzIGFyZSByZWFkIGluCi0JICogdGhlIHBlcmZvcm1hbmNlIHBhdGguCi0JICovCi0JX191NjQgc3B1X3JjdmhkcmFkZHI7CisJX191NjQgc3B1X3VudXNlZDsgLyoga2VwdCBmb3IgY29tcGF0aWJsZSBsYXlvdXQgKi8KIAogCS8qCiAJICogYWRkcmVzcyBvZiBzdHJ1Y3QgYmFzZV9pbmZvIHRvIHdyaXRlIHRvCkBAIC00ODEsNyArNDc3LDcgQEAKICAqIERhdGEgbGF5b3V0IGluIEkyQyBmbGFzaCAoZm9yIEdVSUQsIGV0Yy4pCiAgKiBBbGwgZmllbGRzIGFyZSBsaXR0bGUtZW5kaWFuIGJpbmFyeSB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZAogICovCi0jZGVmaW5lIElQQVRIX0ZMQVNIX1ZFUlNJT04gMQorI2RlZmluZSBJUEFUSF9GTEFTSF9WRVJTSU9OIDIKIHN0cnVjdCBpcGF0aF9mbGFzaCB7CiAJLyogZmxhc2ggbGF5b3V0IHZlcnNpb24gKElQQVRIX0ZMQVNIX1ZFUlNJT04pICovCiAJX191OCBpZl9mdmVyc2lvbjsKQEAgLTQ4OSwxNCArNDg1LDE0IEBACiAJX191OCBpZl9jc3VtOwogCS8qCiAJICogdmFsaWQgbGVuZ3RoIChpbiB1c2UsIHByb3RlY3RlZCBieSBpZl9jc3VtKSwgaW5jbHVkaW5nCi0JICogaWZfZnZlcnNpb24gYW5kIGlmX3N1bSB0aGVtc2VsdmVzKQorCSAqIGlmX2Z2ZXJzaW9uIGFuZCBpZl9jc3VtIHRoZW1zZWx2ZXMpCiAJICovCiAJX191OCBpZl9sZW5ndGg7CiAJLyogdGhlIEdVSUQsIGluIG5ldHdvcmsgb3JkZXIgKi8KIAlfX3U4IGlmX2d1aWRbOF07CiAJLyogbnVtYmVyIG9mIEdVSURzIHRvIHVzZSwgc3RhcnRpbmcgZnJvbSBpZl9ndWlkICovCiAJX191OCBpZl9udW1ndWlkOwotCS8qIHRoZSBib2FyZCBzZXJpYWwgbnVtYmVyLCBpbiBBU0NJSSAqLworCS8qIHRoZSAobGFzdCAxMCBjaGFyYWN0ZXJzIG9mKSBib2FyZCBzZXJpYWwgbnVtYmVyLCBpbiBBU0NJSSAqLwogCWNoYXIgaWZfc2VyaWFsWzEyXTsKIAkvKiBib2FyZCBtZmcgZGF0ZSAoWVlZWU1NREQgQVNDSUkpICovCiAJY2hhciBpZl9tZmdkYXRlWzhdOwpAQCAtNTA4LDggKzUwNCwxMCBAQAogCV9fdTggaWZfcG93ZXJob3VyWzJdOwogCS8qIEFTQ0lJIGZyZWUtZm9ybSBjb21tZW50IGZpZWxkICovCiAJY2hhciBpZl9jb21tZW50WzMyXTsKLQkvKiA3OCBieXRlcyB1c2VkLCBtaW4gZmxhc2ggc2l6ZSBpcyAxMjggYnl0ZXMgKi8KLQlfX3U4IGlmX2Z1dHVyZVs1MF07CisJLyogQmFja3dhcmRzIGNvbXBhdGlibGUgcHJlZml4IGZvciBsb25nZXIgUUxvZ2ljIFNlcmlhbCBOdW1iZXJzICovCisJY2hhciBpZl9zcHJlZml4WzRdOworCS8qIDgyIGJ5dGVzIHVzZWQsIG1pbiBmbGFzaCBzaXplIGlzIDEyOCBieXRlcyAqLworCV9fdTggaWZfZnV0dXJlWzQ2XTsKIH07CiAKIC8qCkBAIC02MDMsMTQgKzYwMSwxMTggQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9LUEZfSU5UUiAweDEKIAogLyogU2VuZFBJTyBwZXItYnVmZmVyIGNvbnRyb2wgKi8KLSNkZWZpbmUgSU5GSU5JUEFUSF9TUF9MRU5HVEhQMV9NQVNLIDB4M0ZGCi0jZGVmaW5lIElORklOSVBBVEhfU1BfTEVOR1RIUDFfU0hJRlQgMAotI2RlZmluZSBJTkZJTklQQVRIX1NQX0lOVFIgICAgMHg4MDAwMDAwMAotI2RlZmluZSBJTkZJTklQQVRIX1NQX1RFU1QgICAgMHg0MDAwMDAwMAotI2RlZmluZSBJTkZJTklQQVRIX1NQX1RFU1RFQlAgMHgyMDAwMDAwMAorI2RlZmluZSBJTkZJTklQQVRIX1NQX1RFU1QgICAgMHg0MAorI2RlZmluZSBJTkZJTklQQVRIX1NQX1RFU1RFQlAgMHgyMAogCiAvKiBTZW5kUElPQXZhaWwgYml0cyAqLwogI2RlZmluZSBJTkZJTklQQVRIX1NFTkRQSU9BVkFJTF9CVVNZX1NISUZUIDEKICNkZWZpbmUgSU5GSU5JUEFUSF9TRU5EUElPQVZBSUxfQ0hFQ0tfU0hJRlQgMAogCisvKiBpbmZpbmlwYXRoIGhlYWRlciBmb3JtYXQgKi8KK3N0cnVjdCBpcGF0aF9oZWFkZXIgeworCS8qCisJICogVmVyc2lvbiAtIDQgYml0cywgUG9ydCAtIDQgYml0cywgVElEIC0gMTAgYml0cyBhbmQgT2Zmc2V0IC0KKwkgKiAxNCBiaXRzIGJlZm9yZSBFQ08gY2hhbmdlIH4yOCBEZWMgMDMuICBBZnRlciB0aGF0LCBWZXJzIDQsCisJICogUG9ydCAzLCBUSUQgMTEsIG9mZnNldCAxNC4KKwkgKi8KKwlfX2xlMzIgdmVyX3BvcnRfdGlkX29mZnNldDsKKwlfX2xlMTYgY2hrc3VtOworCV9fbGUxNiBwa3RfZmxhZ3M7Cit9OworCisvKiBpbmZpbmlwYXRoIHVzZXIgbWVzc2FnZSBoZWFkZXIgZm9ybWF0LgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGZpcnN0IDQgZmllbGRzIGNvbW1vbiB0byBhbGwgcHJvdG9jb2xzCisgKiB0aGF0IGVtcGxveSBpbmZpbmlwYXRoLgorICovCitzdHJ1Y3QgaXBhdGhfbWVzc2FnZV9oZWFkZXIgeworCV9fYmUxNiBscmhbNF07CisJX19iZTMyIGJ0aFszXTsKKwkvKiBmaWVsZHMgYmVsb3cgdGhpcyBwb2ludCBhcmUgaW4gaG9zdCBieXRlIG9yZGVyICovCisJc3RydWN0IGlwYXRoX2hlYWRlciBpcGg7CisJX191OCBzdWJfb3Bjb2RlOworfTsKKworLyogaW5maW5pcGF0aCBldGhlcm5ldCBoZWFkZXIgZm9ybWF0ICovCitzdHJ1Y3QgZXRoZXJfaGVhZGVyIHsKKwlfX2JlMTYgbHJoWzRdOworCV9fYmUzMiBidGhbM107CisJc3RydWN0IGlwYXRoX2hlYWRlciBpcGg7CisJX191OCBzdWJfb3Bjb2RlOworCV9fdTggY21kOworCV9fYmUxNiBsaWQ7CisJX191MTYgbWFjWzNdOworCV9fdTggZnJhZ19udW07CisJX191OCBzZXFfbnVtOworCV9fbGUzMiBsZW47CisJLyogTVVTVCBiZSBvZiB3b3JkIHNpemUgZHVlIHRvIFBJTyB3cml0ZSByZXF1aXJlbWVudHMgKi8KKwlfX2xlMzIgY3N1bTsKKwlfX2xlMTYgY3N1bV9vZmZzZXQ7CisJX19sZTE2IGZsYWdzOworCV9fdTE2IGZpcnN0XzJfYnl0ZXM7CisJX191OCB1bnVzZWRbMl07CQkvKiBjdXJyZW50bHkgdW51c2VkICovCit9OworCisKKy8qIElCIC0gTFJIIGhlYWRlciBjb25zdHMgKi8KKyNkZWZpbmUgSVBBVEhfTFJIX0dSSCAweDAwMDMJLyogMS4gd29yZCBvZiBJQiBMUkggLSBuZXh0IGhlYWRlcjogR1JIICovCisjZGVmaW5lIElQQVRIX0xSSF9CVEggMHgwMDAyCS8qIDEuIHdvcmQgb2YgSUIgTFJIIC0gbmV4dCBoZWFkZXI6IEJUSCAqLworCisvKiBtaXNjLiAqLworI2RlZmluZSBTSVpFX09GX0NSQyAxCisKKyNkZWZpbmUgSVBBVEhfREVGQVVMVF9QX0tFWSAweEZGRkYKKyNkZWZpbmUgSVBBVEhfUEVSTUlTU0lWRV9MSUQgMHhGRkZGCisjZGVmaW5lIElQQVRIX0FFVEhfQ1JFRElUX1NISUZUIDI0CisjZGVmaW5lIElQQVRIX0FFVEhfQ1JFRElUX01BU0sgMHgxRgorI2RlZmluZSBJUEFUSF9BRVRIX0NSRURJVF9JTlZBTCAweDFGCisjZGVmaW5lIElQQVRIX1BTTl9NQVNLIDB4RkZGRkZGCisjZGVmaW5lIElQQVRIX01TTl9NQVNLIDB4RkZGRkZGCisjZGVmaW5lIElQQVRIX1FQTl9NQVNLIDB4RkZGRkZGCisjZGVmaW5lIElQQVRIX01VTFRJQ0FTVF9MSURfQkFTRSAweEMwMDAKKyNkZWZpbmUgSVBBVEhfTVVMVElDQVNUX1FQTiAweEZGRkZGRgorCisvKiBSZWNlaXZlIEhlYWRlciBRdWV1ZTogcmVjZWl2ZSB0eXBlIChmcm9tIGluZmluaXBhdGgpICovCisjZGVmaW5lIFJDVkhRX1JDVl9UWVBFX0VYUEVDVEVEICAwCisjZGVmaW5lIFJDVkhRX1JDVl9UWVBFX0VBR0VSICAgICAxCisjZGVmaW5lIFJDVkhRX1JDVl9UWVBFX05PTl9LRCAgICAyCisjZGVmaW5lIFJDVkhRX1JDVl9UWVBFX0VSUk9SICAgICAzCisKKworLyogc3ViIE9wQ29kZXMgLSBpdGg0eCAgKi8KKyNkZWZpbmUgSVBBVEhfSVRINFhfT1BDT0RFX0VOQ0FQIDB4ODEKKyNkZWZpbmUgSVBBVEhfSVRINFhfT1BDT0RFX0xJRF9BUlAgMHg4MgorCisjZGVmaW5lIElQQVRIX0hFQURFUl9RVUVVRV9XT1JEUyA5CisKKy8qIGZ1bmN0aW9ucyBmb3IgZXh0cmFjdGluZyBmaWVsZHMgZnJvbSByY3ZoZHJxIGVudHJpZXMgZm9yIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgX191MzIgaXBhdGhfaGRyZ2V0X2Vycl9mbGFncyhjb25zdCBfX2xlMzIgKiByYnVmKQoreworCXJldHVybiBfX2xlMzJfdG9fY3B1KHJidWZbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fdTMyIGlwYXRoX2hkcmdldF9yY3ZfdHlwZShjb25zdCBfX2xlMzIgKiByYnVmKQoreworCXJldHVybiAoX19sZTMyX3RvX2NwdShyYnVmWzBdKSA+PiBJTkZJTklQQVRIX1JIRl9SQ1ZUWVBFX1NISUZUKQorCSAgICAmIElORklOSVBBVEhfUkhGX1JDVlRZUEVfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBfX3UzMiBpcGF0aF9oZHJnZXRfbGVuZ3RoX2luX2J5dGVzKGNvbnN0IF9fbGUzMiAqIHJidWYpCit7CisJcmV0dXJuICgoX19sZTMyX3RvX2NwdShyYnVmWzBdKSA+PiBJTkZJTklQQVRIX1JIRl9MRU5HVEhfU0hJRlQpCisJCSYgSU5GSU5JUEFUSF9SSEZfTEVOR1RIX01BU0spIDw8IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBhdGhfaGRyZ2V0X2luZGV4KGNvbnN0IF9fbGUzMiAqIHJidWYpCit7CisJcmV0dXJuIChfX2xlMzJfdG9fY3B1KHJidWZbMF0pID4+IElORklOSVBBVEhfUkhGX0VHUklOREVYX1NISUZUKQorCSAgICAmIElORklOSVBBVEhfUkhGX0VHUklOREVYX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191MzIgaXBhdGhfaGRyZ2V0X2lwYXRoX3ZlcihfX2xlMzIgaGRyd29yZCkKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoaGRyd29yZCkgPj4gSU5GSU5JUEFUSF9JX1ZFUlNfU0hJRlQpCisJICAgICYgSU5GSU5JUEFUSF9JX1ZFUlNfTUFTSzsKK30KKwogI2VuZGlmCQkJCS8qIF9JUEFUSF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYwppbmRleCA3ZWNlMTEzLi4zZWZlZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTE1NywxMCArMTU4LDIxIEBACiAJCQkgICAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCiAJCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogeworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CiAJc3RydWN0IGlwYXRoX2NxICpjcTsKIAlzdHJ1Y3QgaWJfd2MgKndjOwogCXN0cnVjdCBpYl9jcSAqcmV0OwogCisJaWYgKGVudHJpZXMgPiBpYl9pcGF0aF9tYXhfY3FlcykgeworCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGRldi0+bl9jcXNfYWxsb2NhdGVkID09IGliX2lwYXRoX21heF9jcXMpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKwogCS8qCiAJICogTmVlZCB0byB1c2Ugdm1hbGxvYygpIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBsYXJnZSAjcyBvZgogCSAqIGVudHJpZXMuCkBAIC0xOTYsNiArMjA4LDggQEAKIAogCXJldCA9ICZjcS0+aWJjcTsKIAorCWRldi0+bl9jcXNfYWxsb2NhdGVkKys7CisKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxMCw5ICsyMjQsMTEgQEAKICAqLwogaW50IGlwYXRoX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICppYmNxKQogeworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmNxLT5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9jcSAqY3EgPSB0b19pY3EoaWJjcSk7CiAKIAl0YXNrbGV0X2tpbGwoJmNxLT5jb21wdGFzayk7CisJZGV2LT5uX2Nxc19hbGxvY2F0ZWQtLTsKIAl2ZnJlZShjcS0+cXVldWUpOwogCWtmcmVlKGNxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaAppbmRleCA0Njc2MjM4Ny4uZjQxNWJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RlYnVnLmgKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RpYWcuYwppbmRleCAyOGRkY2ViLi4xNDdkZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC00MywxMCArNDQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKLSNpbmNsdWRlICJpcHNfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKyNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogaW50IGlwYXRoX2RpYWdfaW51c2U7CiBzdGF0aWMgaW50IGRpYWdfc2V0X2xpbms7CkBAIC02NiwxOCArNjYsMjAgQEAKIAkucmVsZWFzZSA9IGlwYXRoX2RpYWdfcmVsZWFzZQogfTsKIAotc3RhdGljIHN0cnVjdCBjZGV2ICpkaWFnX2NkZXY7Ci1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZSAqZGlhZ19jbGFzc19kZXY7Ci0KLWludCBpcGF0aF9kaWFnX2luaXQodm9pZCkKK2ludCBpcGF0aF9kaWFnX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JcmV0dXJuIGlwYXRoX2NkZXZfaW5pdChJUEFUSF9ESUFHX01JTk9SLCAiaXBhdGhfZGlhZyIsCi0JCQkgICAgICAgJmRpYWdfZmlsZV9vcHMsICZkaWFnX2NkZXYsICZkaWFnX2NsYXNzX2Rldik7CisJY2hhciBuYW1lWzE2XTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImlwYXRoX2RpYWclZCIsIGRkLT5pcGF0aF91bml0KTsKKworCXJldHVybiBpcGF0aF9jZGV2X2luaXQoSVBBVEhfRElBR19NSU5PUl9CQVNFICsgZGQtPmlwYXRoX3VuaXQsIG5hbWUsCisJCQkgICAgICAgJmRpYWdfZmlsZV9vcHMsICZkZC0+ZGlhZ19jZGV2LAorCQkJICAgICAgICZkZC0+ZGlhZ19jbGFzc19kZXYpOwogfQogCi12b2lkIGlwYXRoX2RpYWdfY2xlYW51cCh2b2lkKQordm9pZCBpcGF0aF9kaWFnX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JaXBhdGhfY2Rldl9jbGVhbnVwKCZkaWFnX2NkZXYsICZkaWFnX2NsYXNzX2Rldik7CisJaXBhdGhfY2Rldl9jbGVhbnVwKCZkZC0+ZGlhZ19jZGV2LCAmZGQtPmRpYWdfY2xhc3NfZGV2KTsKIH0KIAogLyoqCkBAIC0xMDEsOCArMTAzLDcgQEAKIAlpbnQgcmV0OwogCiAJLyogbm90IHZlcnkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MgZm9yIG5vdyAqLwotCWlmIChyZWdfYWRkciA8IGRkLT5pcGF0aF9rcmVnYmFzZSB8fAotCSAgICByZWdfZW5kID4gZGQtPmlwYXRoX2tyZWdlbmQpIHsKKwlpZiAocmVnX2FkZHIgPCBkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgcmVnX2VuZCA+IGRkLT5pcGF0aF9rcmVnZW5kKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CkBAIC0xMTMsNyArMTE0LDcgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCQlyZWdfYWRkcisrOwotCQl1YWRkcisrOworCQl1YWRkciArPSBzaXplb2YodTY0KTsKIAl9CiAJcmV0ID0gMDsKIGJhaWw6CkBAIC0xMzksOCArMTQwLDcgQEAKIAlpbnQgcmV0OwogCiAJLyogbm90IHZlcnkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MgZm9yIG5vdyAqLwotCWlmIChyZWdfYWRkciA8IGRkLT5pcGF0aF9rcmVnYmFzZSB8fAotCSAgICByZWdfZW5kID4gZGQtPmlwYXRoX2tyZWdlbmQpIHsKKwlpZiAocmVnX2FkZHIgPCBkZC0+aXBhdGhfa3JlZ2Jhc2UgfHwgcmVnX2VuZCA+IGRkLT5pcGF0aF9rcmVnZW5kKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJd3JpdGVxKGRhdGEsIHJlZ19hZGRyKTsKIAogCQlyZWdfYWRkcisrOwotCQl1YWRkcisrOworCQl1YWRkciArPSBzaXplb2YodTY0KTsKIAl9CiAJcmV0ID0gMDsKIGJhaWw6CkBAIC0xOTEsNyArMTkxLDggQEAKIAkJfQogCiAJCXJlZ19hZGRyKys7Ci0JCXVhZGRyKys7CisJCXVhZGRyICs9IHNpemVvZih1MzIpOworCiAJfQogCXJldCA9IDA7CiBiYWlsOgpAQCAtMjMwLDcgKzIzMSw3IEBACiAJCXdyaXRlbChkYXRhLCByZWdfYWRkcik7CiAKIAkJcmVnX2FkZHIrKzsKLQkJdWFkZHIrKzsKKwkJdWFkZHIgKz0gc2l6ZW9mKHUzMik7CiAJfQogCXJldCA9IDA7CiBiYWlsOgpAQCAtMjM5LDU5ICsyNDAsNDUgQEAKIAogc3RhdGljIGludCBpcGF0aF9kaWFnX29wZW4oc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKQogeworCWludCB1bml0ID0gaW1pbm9yKGluKSAtIElQQVRIX0RJQUdfTUlOT1JfQkFTRTsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7Ci0JaW50IHVuaXQgPSAwOyAvKiBYWFggdGhpcyBpcyBib2d1cyAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCWRkID0gaXBhdGhfbG9va3VwKHVuaXQpOwotCiAJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKIAogCWlmIChpcGF0aF9kaWFnX2ludXNlKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBiYWlsOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgewotCQkvKgotCQkgKiB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBpbmZpbmlwYXRoIGRldmljZSB0byBiZSBwcmVzZW50Ci0JCSAqIChkb24ndCB1c2UgSU5JVFRFRCwgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gb3BlbgotCQkgKiBldmVuIGlmIGRldmljZSBpcyBpbiBmcmVlemUgbW9kZSwgd2hpY2ggY2xlYXJlZCBJTklUVEVEKS4KLQkJICogVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgcmlzayB0byB0aGlzLCB3aGljaCBpcyB3aHkgd2UKLQkJICogYWxzbyB2ZXJpZnkga3JlZ2Jhc2UgaXMgc2V0LgotCQkgKi8KKwlkZCA9IGlwYXRoX2xvb2t1cCh1bml0KTsKIAotCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSB8fAotCQkgICAgIWRkLT5pcGF0aF9rcmVnYmFzZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlwYXRoX2RpYWdfaW51c2UgPSAxOwotCQlkaWFnX3NldF9saW5rID0gMDsKLQkJcmV0ID0gMDsKKwlpZiAoZGQgPT0gTlVMTCB8fCAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpIHx8CisJICAgICFkZC0+aXBhdGhfa3JlZ2Jhc2UpIHsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBiYWlsOwogCX0KIAotCXJldCA9IC1FTk9ERVY7Ci0KLWJhaWw6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CisJZnAtPnByaXZhdGVfZGF0YSA9IGRkOworCWlwYXRoX2RpYWdfaW51c2UgPSAxOworCWRpYWdfc2V0X2xpbmsgPSAwOworCXJldCA9IDA7CiAKIAkvKiBPbmx5IGV4cG9zZSBhIHdheSB0byByZXNldCB0aGUgZGV2aWNlIGlmIHdlCiAJICAgbWFrZSBpdCBpbnRvIGRpYWcgbW9kZS4gKi8KLQlpZiAocmV0ID09IDApCi0JCWlwYXRoX2V4cG9zZV9yZXNldCgmZGQtPnBjaWRldi0+ZGV2KTsKKwlpcGF0aF9leHBvc2VfcmVzZXQoJmRkLT5wY2lkZXYtPmRldik7CiAKK2JhaWw6CiAJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlwYXRoX2RpYWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQorc3RhdGljIGludCBpcGF0aF9kaWFnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKQogewogCW11dGV4X2xvY2soJmlwYXRoX211dGV4KTsKIAlpcGF0aF9kaWFnX2ludXNlID0gMDsKKwlmcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5OSwxNyArMjg2LDEwIEBACiBzdGF0aWMgc3NpemVfdCBpcGF0aF9kaWFnX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqZGF0YSwKIAkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQogewotCWludCB1bml0ID0gMDsgLyogWFhYIHByb3ZpZGUgZm9yIHJlYWRzIG9uIG90aGVyIHVuaXRzIHNvbWUgZGF5ICovCi0Jc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGZwLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX2lvbWVtICprcmVnX2Jhc2U7CiAJc3NpemVfdCByZXQ7CiAKLQlkZCA9IGlwYXRoX2xvb2t1cCh1bml0KTsKLQlpZiAoIWRkKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KIAlrcmVnX2Jhc2UgPSBkZC0+aXBhdGhfa3JlZ2Jhc2U7CiAKIAlpZiAoY291bnQgPT0gMCkKQEAgLTMyOCwyMyArMzA4LDE2IEBACiAJCXJldCA9IGNvdW50OwogCX0KIAotYmFpbDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdCBpcGF0aF9kaWFnX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKLQlpbnQgdW5pdCA9IDA7IC8qIFhYWCB0aGlzIGlzIGJvZ3VzICovCi0Jc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IGZwLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX2lvbWVtICprcmVnX2Jhc2U7CiAJc3NpemVfdCByZXQ7CiAKLQlkZCA9IGlwYXRoX2xvb2t1cCh1bml0KTsKLQlpZiAoIWRkKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFpbDsKLQl9CiAJa3JlZ19iYXNlID0gZGQtPmlwYXRoX2tyZWdiYXNlOwogCiAJaWYgKGNvdW50ID09IDApCkBAIC0zNjMsNiArMzM2LDUgQEAKIAkJcmV0ID0gY291bnQ7CiAJfQogCi1iYWlsOgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggZGRkY2RhZS4uODIzMTMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTM4LDggKzM5LDggQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKLSNpbmNsdWRlICJpcHNfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKyNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogc3RhdGljIHZvaWQgaXBhdGhfdXBkYXRlX3Bpb19idWZzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogCkBAIC01Miw3ICs1Myw3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2dldF91bml0X25hbWUpOwogCi0jZGVmaW5lIERSSVZFUl9MT0FEX01TRyAiUGF0aFNjYWxlICIgSVBBVEhfRFJWX05BTUUgIiBsb2FkZWQ6ICIKKyNkZWZpbmUgRFJJVkVSX0xPQURfTVNHICJRTG9naWMgIiBJUEFUSF9EUlZfTkFNRSAiIGxvYWRlZDogIgogI2RlZmluZSBQRlggSVBBVEhfRFJWX05BTUUgIjogIgogCiAvKgpAQCAtNzQsOCArNzUsOCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfZGVidWcpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJQYXRoU2NhbGUgPHN1cHBvcnRAcGF0aHNjYWxlLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUGF0aHNjYWxlIEluZmluaVBhdGggZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJRTG9naWMgPHN1cHBvcnRAcGF0aHNjYWxlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUUxvZ2ljIEluZmluaVBhdGggZHJpdmVyIik7CiAKIGNvbnN0IGNoYXIgKmlwYXRoX2liY3N0YXR1c19zdHJbXSA9IHsKIAkiRGlzYWJsZWQiLApAQCAtMTMwLDE0ICsxMzEsNiBAQAogCS5pZF90YWJsZSA9IGlwYXRoX3BjaV90YmwsCiB9OwogCi0vKgotICogVGhpcyBpcyB3aGVyZSBwb3J0IDAncyByY3ZoZHJ0YWlsIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gYmFjazsgd2UgYWxzbwotICogd2FudCBub3RoaW5nIGVsc2Ugc2hhcmluZyB0aGUgY2FjaGUgbGluZSwgc28gbWFrZSBpdCBhIGNhY2hlIGxpbmUKLSAqIGluIHNpemUuICBVc2VkIGZvciBhbGwgdW5pdHMuCi0gKi8KLXZvbGF0aWxlIF9fbGU2NCAqaXBhdGhfcG9ydDBfcmN2aGRydGFpbDsKLWRtYV9hZGRyX3QgaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWE7Ci1zdGF0aWMgaW50IHBvcnQwX3JjdmhkcnRhaWxfcmVmczsKIAogc3RhdGljIGlubGluZSB2b2lkIHJlYWRfYmFycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkgICAgIHUzMiAqYmFyMCwgdTMyICpiYXIxKQpAQCAtMTcwLDE0ICsxNjMsMTMgQEAKIAkJbGlzdF9kZWwoJmRkLT5pcGF0aF9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CiAJfQotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqZGQpLCBkZCwgZGQtPmlwYXRoX2RtYV9hZGRyKTsKKwl2ZnJlZShkZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqaXBhdGhfYWxsb2NfZGV2ZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWludCByZXQ7CiAKIAlpZiAoIWlkcl9wcmVfZ2V0KCZ1bml0X3RhYmxlLCBHRlBfS0VSTkVMKSkgewpAQCAtMTg1LDE1ICsxNzcsMTIgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCWRkID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqZGQpLCAmZG1hX2FkZHIsCi0JCQkJR0ZQX0tFUk5FTCk7Ci0KKwlkZCA9IHZtYWxsb2Moc2l6ZW9mKCpkZCkpOwogCWlmICghZGQpIHsKIAkJZGQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlnb3RvIGJhaWw7CiAJfQotCi0JZGQtPmlwYXRoX2RtYV9hZGRyID0gZG1hX2FkZHI7CisJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAJZGQtPmlwYXRoX3VuaXQgPSAtMTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKQEAgLTI3MSw0NyArMjYwLDYgQEAKIAlyZXR1cm4gbnVuaXRzOwogfQogCi1zdGF0aWMgaW50IGluaXRfcG9ydDBfcmN2aGRydGFpbChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOwotCi0JaWYgKCFpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsKSB7Ci0JCWlwYXRoX3BvcnQwX3JjdmhkcnRhaWwgPQotCQkJZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCi0JCQkJCSAgIElQQVRIX1BPUlQwX1JDVkhEUlRBSUxfU0laRSwKLQkJCQkJICAgJmlwYXRoX3BvcnQwX3JjdmhkcnRhaWxfZG1hLAotCQkJCQkgICBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIWlwYXRoX3BvcnQwX3JjdmhkcnRhaWwpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQl9Ci0JcG9ydDBfcmN2aGRydGFpbF9yZWZzKys7Ci0JcmV0ID0gMDsKLQotYmFpbDoKLQltdXRleF91bmxvY2soJmlwYXRoX211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFudXBfcG9ydDBfcmN2aGRydGFpbChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQltdXRleF9sb2NrKCZpcGF0aF9tdXRleCk7Ci0KLQlpZiAoIS0tcG9ydDBfcmN2aGRydGFpbF9yZWZzKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIElQQVRIX1BPUlQwX1JDVkhEUlRBSUxfU0laRSwKLQkJCQkgICh2b2lkICopIGlwYXRoX3BvcnQwX3JjdmhkcnRhaWwsCi0JCQkJICBpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsX2RtYSk7Ci0JCWlwYXRoX3BvcnQwX3JjdmhkcnRhaWwgPSBOVUxMOwotCX0KLQotCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOwotfQotCiAvKgogICogVGhlc2UgbmV4dCB0d28gcm91dGluZXMgYXJlIHBsYWNlaG9sZGVycyBpbiBjYXNlIHdlIGRvbid0IGhhdmUgcGVyLWFyY2gKICAqIGNvZGUgZm9yIGNvbnRyb2xsaW5nIHdyaXRlIGNvbWJpbmluZy4gIElmIGV4cGxpY2l0IGNvbnRyb2wgb2Ygd3JpdGUKQEAgLTMzNiwyMCArMjg0LDEyIEBACiAJdTMyIGJhcjAgPSAwLCBiYXIxID0gMDsKIAl1OCByZXY7CiAKLQlyZXQgPSBpbml0X3BvcnQwX3JjdmhkcnRhaWwocGRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FCi0JCSAgICAgICAiOiBDb3VsZCBub3QgYWxsb2NhdGUgcG9ydDBfcmN2aGRydGFpbDogZXJyb3IgJWRcbiIsCi0JCSAgICAgICAtcmV0KTsKLQkJZ290byBiYWlsOwotCX0KLQogCWRkID0gaXBhdGhfYWxsb2NfZGV2ZGF0YShwZGV2KTsKIAlpZiAoSVNfRVJSKGRkKSkgewogCQlyZXQgPSBQVFJfRVJSKGRkKTsKIAkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FCiAJCSAgICAgICAiOiBDb3VsZCBub3QgYWxsb2NhdGUgZGV2ZGF0YTogZXJyb3IgJWRcbiIsIC1yZXQpOwotCQlnb3RvIGJhaWxfcmN2aGRydGFpbDsKKwkJZ290byBiYWlsOwogCX0KIAogCWlwYXRoX2NkYmcoVkVSQk9TRSwgImluaXRpYWxpemluZyB1bml0ICMldVxuIiwgZGQtPmlwYXRoX3VuaXQpOwpAQCAtNDI0LDEyICszNjQsMjkgQEAKIAkJICovCiAJCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicGNpX3NldF9kbWFfbWFzayB1bml0ICV1ICIKLQkJCQkgImZhaWxzOiAlZFxuIiwgZGQtPmlwYXRoX3VuaXQsIHJldCk7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkJCSJVbmFibGUgdG8gc2V0IERNQSBtYXNrIGZvciB1bml0ICV1OiAlZFxuIiwKKwkJCQlkZC0+aXBhdGhfdW5pdCwgcmV0KTsKIAkJCWdvdG8gYmFpbF9yZWdpb25zOwogCQl9Ci0JCWVsc2UKKwkJZWxzZSB7CiAJCQlpcGF0aF9kYmcoIk5vIDY0Yml0IERNQSBtYXNrLCB1c2VkIDMyIGJpdCBtYXNrXG4iKTsKKwkJCXJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCQlpZiAocmV0KQorCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkJCSJVbmFibGUgdG8gc2V0IERNQSBjb25zaXN0ZW50IG1hc2sgIgorCQkJCQkiZm9yIHVuaXQgJXU6ICVkXG4iLAorCQkJCQlkZC0+aXBhdGhfdW5pdCwgcmV0KTsKKworCQl9CisJfQorCWVsc2UgeworCQlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOworCQlpZiAocmV0KQorCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkiVW5hYmxlIHRvIHNldCBETUEgY29uc2lzdGVudCBtYXNrICIKKwkJCQkiZm9yIHVuaXQgJXU6ICVkXG4iLAorCQkJCWRkLT5pcGF0aF91bml0LCByZXQpOwogCX0KIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtNDUyLDcgKzQwOSw3IEBACiAJCWlwYXRoX2luaXRfcGU4MDBfZnVuY3MoZGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpcGF0aF9kZXZfZXJyKGRkLCAiRm91bmQgdW5rbm93biBQYXRoU2NhbGUgZGV2aWNlaWQgMHgleCwgIgorCQlpcGF0aF9kZXZfZXJyKGRkLCAiRm91bmQgdW5rbm93biBRTG9naWMgZGV2aWNlaWQgMHgleCwgIgogCQkJICAgICAgImZhaWxpbmdcbiIsIGVudC0+ZGV2aWNlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDYwLDEwICs0MTcsMTAgQEAKIAlmb3IgKGogPSAwOyBqIDwgNjsgaisrKSB7CiAJCWlmICghcGRldi0+cmVzb3VyY2Vbal0uc3RhcnQpCiAJCQljb250aW51ZTsKLQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiQkFSICVkIHN0YXJ0ICVseCwgZW5kICVseCwgbGVuICVseFxuIiwKLQkJCSAgIGosIHBkZXYtPnJlc291cmNlW2pdLnN0YXJ0LAotCQkJICAgcGRldi0+cmVzb3VyY2Vbal0uZW5kLAotCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBqKSk7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkJBUiAlZCBzdGFydCAlbGx4LCBlbmQgJWxseCwgbGVuICVsbHhcbiIsCisJCQkgICBqLCAodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlW2pdLnN0YXJ0LAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVtqXS5lbmQsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaikpOwogCX0KIAogCWlmICghYWRkcikgewpAQCAtNDk1LDIzICs0NTIsMjMgQEAKIAkJKCh2b2lkIF9faW9tZW0gKilkZC0+aXBhdGhfa3JlZ2Jhc2UgKyBsZW4pOwogCWRkLT5pcGF0aF9waHlzYWRkciA9IGFkZHI7CS8qIHVzZWQgZm9yIGlvX3JlbWFwLCBldGMuICovCiAJLyogZm9yIHVzZXIgbW1hcCAqLwotCWRkLT5pcGF0aF9rcmVndmlydCA9ICh1NjQgX19pb21lbSAqKSBwaHlzX3RvX3ZpcnQoYWRkcik7Ci0JaXBhdGhfY2RiZyhWRVJCT1NFLCAibWFwcGVkIGlvIGFkZHIgJWxseCB0byBrcmVnYmFzZSAlcCAiCi0JCSAgICJrcmVndmlydCAlcFxuIiwgYWRkciwgZGQtPmlwYXRoX2tyZWdiYXNlLAotCQkgICBkZC0+aXBhdGhfa3JlZ3ZpcnQpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIm1hcHBlZCBpbyBhZGRyICVsbHggdG8ga3JlZ2Jhc2UgJXBcbiIsCisJCSAgIGFkZHIsIGRkLT5pcGF0aF9rcmVnYmFzZSk7CiAKIAkvKgogCSAqIGNsZWFyIGlwYXRoX2ZsYWdzIGhlcmUgaW5zdGVhZCBvZiBpbiBpcGF0aF9pbml0X2NoaXAgYXMgaXQgaXMgc2V0CiAJICogYnkgaXBhdGhfc2V0dXBfaHRjb25maWcuCiAJICovCiAJZGQtPmlwYXRoX2ZsYWdzID0gMDsKKwlkZC0+aXBhdGhfbGxpX2NvdW50ZXIgPSAwOworCWRkLT5pcGF0aF9sbGlfZXJyb3JzID0gMDsKIAogCWlmIChkZC0+aXBhdGhfZl9idXMoZGQsIHBkZXYpKQogCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmFpbGVkIHRvIHNldHVwIGNvbmZpZyBzcGFjZTsgIgogCQkJICAgICAgImNvbnRpbnVpbmcgYW55d2F5XG4iKTsKIAogCS8qCi0JICogc2V0IHVwIG91ciBpbnRlcnJ1cHQgaGFuZGxlcjsgU0FfU0hJUlEgcHJvYmFibHkgbm90IG5lZWRlZCwKKwkgKiBzZXQgdXAgb3VyIGludGVycnVwdCBoYW5kbGVyOyBJUlFGX1NIQVJFRCBwcm9iYWJseSBub3QgbmVlZGVkLAogCSAqIHNpbmNlIE1TSSBpbnRlcnJ1cHRzIHNob3VsZG4ndCBiZSBzaGFyZWQgYnV0IHdvbid0ICBodXJ0IGZvciBub3cuCiAJICogY2hlY2sgMCBpcnEgYWZ0ZXIgd2UgcmV0dXJuIGZyb20gY2hpcC1zcGVjaWZpYyBidXMgc2V0dXAsIHNpbmNlCiAJICogdGhhdCBjYW4gYWZmZWN0IHRoaXMgZHVlIHRvIHNldHVwCkBAIC01MjAsNyArNDc3LDcgQEAKIAkJaXBhdGhfZGV2X2VycihkZCwgImlycSBpcyAwLCBCSU9TIGVycm9yPyAgSW50ZXJydXB0cyB3b24ndCAiCiAJCQkgICAgICAid29ya1xuIik7CiAJZWxzZSB7Ci0JCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaXBhdGhfaW50ciwgU0FfU0hJUlEsCisJCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaXBhdGhfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkJICBJUEFUSF9EUlZfTkFNRSwgZGQpOwogCQlpZiAocmV0KSB7CiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3Qgc2V0dXAgaXJxIGhhbmRsZXIsICIKQEAgLTU0NSw2ICs1MDIsNyBAQAogCWlwYXRoX2RldmljZV9jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldiwgZGQpOwogCWlwYXRoZnNfYWRkX2RldmljZShkZCk7CiAJaXBhdGhfdXNlcl9hZGQoZGQpOworCWlwYXRoX2RpYWdfYWRkKGRkKTsKIAlpcGF0aF9sYXllcl9hZGQoZGQpOwogCiAJZ290byBiYWlsOwpAQCAtNTYxLDkgKzUxOSw2IEBACiBiYWlsX2RldmRhdGE6CiAJaXBhdGhfZnJlZV9kZXZkYXRhKHBkZXYsIGRkKTsKIAotYmFpbF9yY3ZoZHJ0YWlsOgotCWNsZWFudXBfcG9ydDBfcmN2aGRydGFpbChwZGV2KTsKLQogYmFpbDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTc3LDggKzUzMiw5IEBACiAJCXJldHVybjsKIAogCWRkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWlwYXRoX2xheWVyX2RlbChkZCk7Ci0JaXBhdGhfdXNlcl9kZWwoZGQpOworCWlwYXRoX2xheWVyX3JlbW92ZShkZCk7CisJaXBhdGhfZGlhZ19yZW1vdmUoZGQpOworCWlwYXRoX3VzZXJfcmVtb3ZlKGRkKTsKIAlpcGF0aGZzX3JlbW92ZV9kZXZpY2UoZGQpOwogCWlwYXRoX2RldmljZV9yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldiwgZGQpOwogCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlJlbGVhc2luZyBwY2kgbWVtb3J5IHJlZ2lvbnMsIGRkICVwLCAiCkBAIC01OTQsNyArNTUwLDYgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKIAlpcGF0aF9mcmVlX2RldmRhdGEocGRldiwgZGQpOwotCWNsZWFudXBfcG9ydDBfcmN2aGRydGFpbChwZGV2KTsKIH0KIAogLyogZ2VuZXJhbCBkcml2ZXIgdXNlICovCkBAIC04NjgsNyArODIzLDggQEAKIAl1OCBwYWQsICpidGhieXRlczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbnNrYjsKIAotCWlmIChkZC0+aXBhdGhfcG9ydDBfc2ticyAmJiBoZHItPnN1Yl9vcGNvZGUgPT0gT1BDT0RFX0VOQ0FQKSB7CisJaWYgKGRkLT5pcGF0aF9wb3J0MF9za2JzICYmCisJCQloZHItPnN1Yl9vcGNvZGUgPT0gSVBBVEhfSVRINFhfT1BDT0RFX0VOQ0FQKSB7CiAJCS8qCiAJCSAqIEFsbG9jYXRlIGEgbmV3IHNrX2J1ZmYgdG8gcmVwbGFjZSB0aGUgb25lIHdlIGdpdmUKIAkJICogdG8gdGhlIG5ldHdvcmsgc3RhY2suCkBAIC04OTksNyArODU1LDcgQEAKIAkJLyogYW5vdGhlciBldGhlciBwYWNrZXQgcmVjZWl2ZWQgKi8KIAkJaXBhdGhfc3RhdHMuc3BzX2V0aGVyX3Jwa3RzKys7CiAJfQotCWVsc2UgaWYgKGhkci0+c3ViX29wY29kZSA9PSBPUENPREVfTElEX0FSUCkKKwllbHNlIGlmIChoZHItPnN1Yl9vcGNvZGUgPT0gSVBBVEhfSVRINFhfT1BDT0RFX0xJRF9BUlApCiAJCV9faXBhdGhfbGF5ZXJfcmN2X2xpZChkZCwgaGRyKTsKIH0KIApAQCAtOTE2LDggKzg3Miw4IEBACiAJY29uc3QgdTMyIHJzaXplID0gZGQtPmlwYXRoX3JjdmhkcmVudHNpemU7CS8qIHdvcmRzICovCiAJY29uc3QgdTMyIG1heGNudCA9IGRkLT5pcGF0aF9yY3ZoZHJjbnQgKiByc2l6ZTsJLyogd29yZHMgKi8KIAl1MzIgZXRhaWwgPSAtMSwgbCwgaGRycXRhaWw7Ci0Jc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlciAqaGRyOwotCXUzMiBlZmxhZ3MsIGksIGV0eXBlLCB0bGVuLCBwa3R0b3QgPSAwOworCXN0cnVjdCBpcGF0aF9tZXNzYWdlX2hlYWRlciAqaGRyOworCXUzMiBlZmxhZ3MsIGksIGV0eXBlLCB0bGVuLCBwa3R0b3QgPSAwLCB1cGRlZ3I9MCwgcmVsb29wPTA7CiAJc3RhdGljIHU2NCB0b3RjYWxsczsJLyogc3RhdHMsIG1heSBldmVudHVhbGx5IHJlbW92ZSAqLwogCWNoYXIgZW1zZ1sxMjhdOwogCkBAIC05MzEsMjQgKzg4NywxOCBAQAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZkZC0+aXBhdGhfcmN2X3BlbmRpbmcpKQogCQlnb3RvIGJhaWw7CiAKLQlpZiAoZGQtPmlwYXRoX3BvcnQwaGVhZCA9PQotCSAgICAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKQorCWwgPSBkZC0+aXBhdGhfcG9ydDBoZWFkOworCWhkcnF0YWlsID0gKHUzMikgbGU2NF90b19jcHUoKmRkLT5pcGF0aF9oZHJxdGFpbHB0cik7CisJaWYgKGwgPT0gaGRycXRhaWwpCiAJCWdvdG8gZG9uZTsKIAotZ290bW9yZToKLQkvKgotCSAqIHJlYWQgb25seSBvbmNlIGF0IHN0YXJ0LiAgSWYgaW4gZmxvb2Qgc2l0dWF0aW9uLCB0aGlzIGhlbHBzCi0JICogcGVyZm9ybWFuY2Ugc2xpZ2h0bHkuICBJZiBtb3JlIGFycml2ZSB3aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZywKLQkgKiB3ZSdsbCBjb21lIGJhY2sgaGVyZSBhbmQgZG8gdGhlbQotCSAqLwotCWhkcnF0YWlsID0gKHUzMilsZTY0X3RvX2NwdSgqZGQtPmlwYXRoX2hkcnF0YWlscHRyKTsKLQotCWZvciAoaSA9IDAsIGwgPSBkZC0+aXBhdGhfcG9ydDBoZWFkOyBsICE9IGhkcnF0YWlsOyBpKyspIHsKK3JlbG9vcDoKKwlmb3IgKGkgPSAwOyBsICE9IGhkcnF0YWlsOyBpKyspIHsKIAkJdTMyIHFwOwogCQl1OCAqYnRoYnl0ZXM7CiAKIAkJcmMgPSAodTY0ICopIChkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcmN2aGRycSArIChsIDw8IDIpKTsKLQkJaGRyID0gKHN0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIgKikmcmNbMV07CisJCWhkciA9IChzdHJ1Y3QgaXBhdGhfbWVzc2FnZV9oZWFkZXIgKikmcmNbMV07CiAJCS8qCiAJCSAqIGNvdWxkIG1ha2UgYSBuZXR3b3JrIG9yZGVyIHZlcnNpb24gb2YgSVBBVEhfS0RfUVAsIGFuZAogCQkgKiBkbyB0aGUgb2J2aW91cyBzaGlmdCBiZWZvcmUgbWFza2luZyB0byBzcGVlZCB0aGlzIHVwLgpAQCAtOTU2LDEwICs5MDYsMTAgQEAKIAkJcXAgPSBudG9obChoZHItPmJ0aFsxXSkgJiAweGZmZmZmZjsKIAkJYnRoYnl0ZXMgPSAodTggKikgaGRyLT5idGg7CiAKLQkJZWZsYWdzID0gaXBzX2dldF9oZHJfZXJyX2ZsYWdzKChfX2xlMzIgKikgcmMpOwotCQlldHlwZSA9IGlwc19nZXRfcmN2X3R5cGUoKF9fbGUzMiAqKSByYyk7CisJCWVmbGFncyA9IGlwYXRoX2hkcmdldF9lcnJfZmxhZ3MoKF9fbGUzMiAqKSByYyk7CisJCWV0eXBlID0gaXBhdGhfaGRyZ2V0X3Jjdl90eXBlKChfX2xlMzIgKikgcmMpOwogCQkvKiB0b3RhbCBsZW5ndGggKi8KLQkJdGxlbiA9IGlwc19nZXRfbGVuZ3RoX2luX2J5dGVzKChfX2xlMzIgKikgcmMpOworCQl0bGVuID0gaXBhdGhfaGRyZ2V0X2xlbmd0aF9pbl9ieXRlcygoX19sZTMyICopIHJjKTsKIAkJZWJ1ZiA9IE5VTEw7CiAJCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCkgewogCQkJLyoKQEAgLTk2OSw3ICs5MTksNyBAQAogCQkJICogc2V0IGVidWYgKHNvIHdlIHRyeSB0byBjb3B5IGRhdGEpIHVubGVzcyB0aGUKIAkJCSAqIGxlbmd0aCByZXF1aXJlcyBpdC4KIAkJCSAqLwotCQkJZXRhaWwgPSBpcHNfZ2V0X2luZGV4KChfX2xlMzIgKikgcmMpOworCQkJZXRhaWwgPSBpcGF0aF9oZHJnZXRfaW5kZXgoKF9fbGUzMiAqKSByYyk7CiAJCQlpZiAodGxlbiA+IHNpemVvZigqaGRyKSB8fAogCQkJICAgIGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX05PTl9LRCkKIAkJCQllYnVmID0gaXBhdGhfZ2V0X2VncmJ1ZihkZCwgZXRhaWwsIDApOwpAQCAtOTgxLDcgKzkzMSw3IEBACiAJCSAqLwogCiAJCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QgJiYgZXR5cGUgIT0KLQkJICAgIFJDVkhRX1JDVl9UWVBFX0VSUk9SICYmIGlwc19nZXRfaXBhdGhfdmVyKAorCQkgICAgUkNWSFFfUkNWX1RZUEVfRVJST1IgJiYgaXBhdGhfaGRyZ2V0X2lwYXRoX3ZlcigKIAkJCSAgICBoZHItPmlwaC52ZXJfcG9ydF90aWRfb2Zmc2V0KSAhPQogCQkgICAgSVBTX1BST1RPX1ZFUlNJT04pIHsKIAkJCWlwYXRoX2NkYmcoUEtULCAiQmFkIEluZmluaVBhdGggcHJvdG9jb2wgdmVyc2lvbiAiCkBAIC05OTQsNyArOTQ0LDE5IEBACiAJCQlpcGF0aF9jZGJnKFBLVCwgIlJIRmVycnMgJXggaGRycXRhaWw9JXggdHlwPSV1ICIKIAkJCQkgICAidGxlbj0leCBvcGNvZGU9JXggZWdyaWR4PSV4OiAlc1xuIiwKIAkJCQkgICBlZmxhZ3MsIGwsIGV0eXBlLCB0bGVuLCBidGhieXRlc1swXSwKLQkJCQkgICBpcHNfZ2V0X2luZGV4KChfX2xlMzIgKikgcmMpLCBlbXNnKTsKKwkJCQkgICBpcGF0aF9oZHJnZXRfaW5kZXgoKF9fbGUzMiAqKSByYyksIGVtc2cpOworCQkJLyogQ291bnQgbG9jYWwgbGluayBpbnRlZ3JpdHkgZXJyb3JzLiAqLworCQkJaWYgKGVmbGFncyAmIChJTkZJTklQQVRIX1JIRl9IX0lDUkNFUlIgfAorCQkJCSAgICAgIElORklOSVBBVEhfUkhGX0hfVkNSQ0VSUikpIHsKKwkJCQl1OCBuID0gKGRkLT5pcGF0aF9pYmNjdHJsID4+CisJCQkJCUlORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQpICYKKwkJCQkJSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9NQVNLOworCisJCQkJaWYgKCsrZGQtPmlwYXRoX2xsaV9jb3VudGVyID4gbikgeworCQkJCQlkZC0+aXBhdGhfbGxpX2NvdW50ZXIgPSAwOworCQkJCQlkZC0+aXBhdGhfbGxpX2Vycm9ycysrOworCQkJCX0KKwkJCX0KIAkJfSBlbHNlIGlmIChldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QpIHsKIAkJCQlpbnQgcmV0ID0gX19pcGF0aF92ZXJic19yY3YoZGQsIHJjICsgMSwKIAkJCQkJCQkgICAgZWJ1ZiwgdGxlbik7CkBAIC0xMDAyLDYgKzk2NCw5IEBACiAJCQkJCWlwYXRoX2NkYmcoVkVSQk9TRSwKIAkJCQkJCSAgICJyZWNlaXZlZCBJQiBwYWNrZXQsICIKIAkJCQkJCSAgICJub3QgU01BIChRUD0leClcbiIsIHFwKTsKKwkJCQlpZiAoZGQtPmlwYXRoX2xsaV9jb3VudGVyKQorCQkJCQlkZC0+aXBhdGhfbGxpX2NvdW50ZXItLTsKKwogCQl9IGVsc2UgaWYgKGV0eXBlID09IFJDVkhRX1JDVl9UWVBFX0VBR0VSKSB7CiAJCQlpZiAocXAgPT0gSVBBVEhfS0RfUVAgJiYKIAkJCSAgICBidGhieXRlc1swXSA9PSBpcGF0aF9sYXllcl9yY3Zfb3Bjb2RlICYmCkBAIC0xMDU0LDI1ICsxMDE5LDQ5IEBACiAJCWwgKz0gcnNpemU7CiAJCWlmIChsID49IG1heGNudCkKIAkJCWwgPSAwOwotCQkvKgotCQkgKiB1cGRhdGUgZm9yIGVhY2ggcGFja2V0LCB0byBoZWxwIHByZXZlbnQgb3ZlcmZsb3dzIGlmIHdlCi0JCSAqIGhhdmUgbG90cyBvZiBwYWNrZXRzLgotCQkgKi8KLQkJKHZvaWQpaXBhdGhfd3JpdGVfdXJlZyhkZCwgdXJfcmN2aGRyaGVhZCwKLQkJCQkgICAgICAgZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmIHwgbCwgMCk7CiAJCWlmIChldHlwZSAhPSBSQ1ZIUV9SQ1ZfVFlQRV9FWFBFQ1RFRCkKLQkJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwKLQkJCQkJICAgICAgIGV0YWlsLCAwKTsKKwkJICAgIHVwZGVnciA9IDE7CisJCS8qCisJCSAqIHVwZGF0ZSBoZWFkIHJlZ3Mgb24gbGFzdCBwYWNrZXQsIGFuZCBldmVyeSAxNiBwYWNrZXRzLgorCQkgKiBSZWR1Y2UgYnVzIHRyYWZmaWMsIHdoaWxlIHN0aWxsIHRyeWluZyB0byBwcmV2ZW50CisJCSAqIHJjdmhkcnEgb3ZlcmZsb3dzLCBmb3Igd2hlbiB0aGUgcXVldWUgaXMgbmVhcmx5IGZ1bGwKKwkJICovCisJCWlmIChsID09IGhkcnF0YWlsIHx8IChpICYmICEoaSYweGYpKSkgeworCQkJdTY0IGx2YWw7CisJCQlpZiAobCA9PSBoZHJxdGFpbCkgLyogUEUtODAwIGludGVycnVwdCBvbmx5IG9uIGxhc3QgKi8KKwkJCQlsdmFsID0gZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmIHwgbDsKKwkJCWVsc2UKKwkJCQlsdmFsID0gbDsKKwkJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmhkcmhlYWQsIGx2YWwsIDApOworCQkJaWYgKHVwZGVncikgeworCQkJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwKKwkJCQkJCSAgICAgICBldGFpbCwgMCk7CisJCQkJdXBkZWdyID0gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZGQtPmlwYXRoX3JoZHJoZWFkX2ludHJfb2ZmICYmICFyZWxvb3ApIHsKKwkJLyogSFQtNDAwIHdvcmthcm91bmQ7IHdlIGNhbiBoYXZlIGEgcmFjZSBjbGVhcmluZyBjaGlwCisJCSAqIGludGVycnVwdCB3aXRoIGFub3RoZXIgaW50ZXJydXB0IGFib3V0IHRvIGJlIGRlbGl2ZXJlZCwKKwkJICogYW5kIGNhbiBjbGVhciBpdCBiZWZvcmUgaXQgaXMgZGVsaXZlcmVkIG9uIHRoZSBHUElPCisJCSAqIHdvcmthcm91bmQuICBCeSBkb2luZyB0aGUgZXh0cmEgY2hlY2sgaGVyZSBmb3IgdGhlCisJCSAqIGluLW1lbW9yeSB0YWlsIHJlZ2lzdGVyIHVwZGF0aW5nIHdoaWxlIHdlIHdlcmUgZG9pbmcKKwkJICogZWFybGllciBwYWNrZXRzLCB3ZSAiYWxtb3N0IiBndWFyYW50ZWUgd2UgaGF2ZSBjb3ZlcmVkCisJCSAqIHRoYXQgY2FzZS4KKwkJICovCisJCXUzMiBocXRhaWwgPSAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpOworCQlpZiAoaHF0YWlsICE9IGhkcnF0YWlsKSB7CisJCQloZHJxdGFpbCA9IGhxdGFpbDsKKwkJCXJlbG9vcCA9IDE7IC8qIGxvb3AgMSBleHRyYSB0aW1lIGF0IG1vc3QgKi8KKwkJCWdvdG8gcmVsb29wOworCQl9CiAJfQogCiAJcGt0dG90ICs9IGk7CiAKIAlkZC0+aXBhdGhfcG9ydDBoZWFkID0gbDsKIAotCWlmIChoZHJxdGFpbCAhPSAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpKQotCQkvKiBtb3JlIGFycml2ZWQgd2hpbGUgd2UgaGFuZGxlZCBmaXJzdCBiYXRjaCAqLwotCQlnb3RvIGdvdG1vcmU7Ci0KIAlpZiAocGt0dG90ID4gaXBhdGhfc3RhdHMuc3BzX21heHBrdHNfY2FsbCkKIAkJaXBhdGhfc3RhdHMuc3BzX21heHBrdHNfY2FsbCA9IHBrdHRvdDsKIAlpcGF0aF9zdGF0cy5zcHNfcG9ydDBwa3RzICs9IHBrdHRvdDsKQEAgLTEzNjksMjYgKzEzNTgsMjAgQEAKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCiAgKiBAcGQ6IHRoZSBwb3J0IGRhdGEKICAqCi0gKiB0aGlzICptdXN0KiBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LCBhbmQgZm9yIG5vdywKLSAqIHRoYXQgbGltaXRzIGl0IHRvIHdoYXQga21hbGxvYyBjYW4gZG8uCisgKiB0aGlzIG11c3QgYmUgY29udGlndW91cyBtZW1vcnkgKGZyb20gYW4gaS9vIHBlcnNwZWN0aXZlKSwgYW5kIG11c3QgYmUKKyAqIERNQSdhYmxlICh3aGljaCBtZWFucyBmb3Igc29tZSBzeXN0ZW1zLCBpdCB3aWxsIGdvIHRocm91Z2ggYW4gSU9NTVUsCisgKiBvciBiZSBmb3JjZWQgaW50byBhIGxvdyBhZGRyZXNzIHJhbmdlKS4KICAqLwogaW50IGlwYXRoX2NyZWF0ZV9yY3ZoZHJxKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKIAkJCSBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQogewotCWludCByZXQgPSAwLCBhbXQ7CisJaW50IHJldCA9IDA7CiAKLQlhbXQgPSBBTElHTihkZC0+aXBhdGhfcmN2aGRyY250ICogZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgKgotCQkgICAgc2l6ZW9mKHUzMiksIFBBR0VfU0laRSk7CiAJaWYgKCFwZC0+cG9ydF9yY3ZoZHJxKSB7Ci0JCS8qCi0JCSAqIG5vdCB1c2luZyBSRVBFQVQgaXNuJ3QgdmlhYmxlOyBhdCAxMjhLQiwgd2UgY2FuIGVhc2lseQotCQkgKiBmYWlsIHRoaXMuICBUaGUgcHJvYmxlbSB3aXRoIFJFUEVBVCBpcyB3ZSBjYW4gYmxvY2sgaGVyZQotCQkgKiAiZm9yZXZlciIuICBUaGVyZSBpc24ndCBhbiBpbmJldHdlZW4sIHVuZm9ydHVuYXRlbHkuICBXZQotCQkgKiBjb3VsZCByZWR1Y2UgdGhlIHJpc2sgYnkgbmV2ZXIgZnJlZWluZyB0aGUgcmN2aGRycSBleGNlcHQKLQkJICogYXQgdW5sb2FkLCBidXQgZXZlbiB0aGVuLCB0aGUgZmlyc3QgdGltZSBhIHBvcnQgaXMgdXNlZCwKLQkJICogd2UgY291bGQgZGVsYXkgZm9yIHNvbWUgdGltZS4uLgotCQkgKi8KKwkJZG1hX2FkZHJfdCBwaHlzX2hkcnF0YWlsOwogCQlnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfVVNFUiB8IF9fR0ZQX0NPTVA7CisJCWludCBhbXQgPSBBTElHTihkZC0+aXBhdGhfcmN2aGRyY250ICogZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgKgorCQkJCXNpemVvZih1MzIpLCBQQUdFX1NJWkUpOwogCiAJCXBkLT5wb3J0X3JjdmhkcnEgPSBkbWFfYWxsb2NfY29oZXJlbnQoCiAJCQkmZGQtPnBjaWRldi0+ZGV2LCBhbXQsICZwZC0+cG9ydF9yY3ZoZHJxX3BoeXMsCkBAIC0xNDAxLDYgKzEzODQsMTYgQEAKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGJhaWw7CiAJCX0KKwkJcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoCisJCQkmZGQtPnBjaWRldi0+ZGV2LCBQQUdFX1NJWkUsICZwaHlzX2hkcnF0YWlsLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcikgeworCQkJaXBhdGhfZGV2X2VycihkZCwgImF0dGVtcHQgdG8gYWxsb2NhdGUgMSBwYWdlICIKKwkJCQkgICAgICAiZm9yIHBvcnQgJXUgcmN2aGRycXRhaWxhZGRyIGZhaWxlZFxuIiwKKwkJCQkgICAgICBwZC0+cG9ydF9wb3J0KTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJcGQtPnBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXMgPSBwaHlzX2hkcnF0YWlsOwogCiAJCXBkLT5wb3J0X3JjdmhkcnFfc2l6ZSA9IGFtdDsKIApAQCAtMTQxMCwyMCArMTQwMywyOCBAQAogCQkJICAgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cywKIAkJCSAgICh1bnNpZ25lZCBsb25nKSBwZC0+cG9ydF9yY3ZoZHJxX3NpemUsCiAJCQkgICBwZC0+cG9ydF9wb3J0KTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBjbGVhciBmb3Igc2VjdXJpdHksIHNhbml0eSwgYW5kL29yIGRlYnVnZ2luZywgZWFjaAotCQkgKiB0aW1lIHdlIHJldXNlCi0JCSAqLwotCQltZW1zZXQocGQtPnBvcnRfcmN2aGRycSwgMCwgYW10KTsKKworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJwb3J0ICVkIGhkcnRhaWxhZGRyLCAlbGx4IHBoeXNpY2FsXG4iLAorCQkJICAgcGQtPnBvcnRfcG9ydCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBoeXNfaGRycXRhaWwpOwogCX0KKwllbHNlCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInJldXNlIHBvcnQgJWQgcmN2aGRycSBAJXAgJWxseCBwaHlzOyAiCisJCQkgICAiaGRydGFpbGFkZHJAJXAgJWxseCBwaHlzaWNhbFxuIiwKKwkJCSAgIHBkLT5wb3J0X3BvcnQsIHBkLT5wb3J0X3JjdmhkcnEsCisJCQkgICBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMsIHBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5cyk7CisKKwkvKiBjbGVhciBmb3Igc2VjdXJpdHkgYW5kIHNhbml0eSBvbiBlYWNoIHVzZSAqLworCW1lbXNldChwZC0+cG9ydF9yY3ZoZHJxLCAwLCBwZC0+cG9ydF9yY3ZoZHJxX3NpemUpOworCW1lbXNldCgodm9pZCAqKXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyLCAwLCBQQUdFX1NJWkUpOwogCiAJLyoKIAkgKiB0ZWxsIGNoaXAgZWFjaCB0aW1lIHdlIGluaXQgaXQsIGV2ZW4gaWYgd2UgYXJlIHJlLXVzaW5nIHByZXZpb3VzCi0JICogbWVtb3J5ICh3ZSB6ZXJvIGl0IGF0IHByb2Nlc3MgY2xvc2UpCisJICogbWVtb3J5ICh3ZSB6ZXJvIHRoZSByZWdpc3RlciBhdCBwcm9jZXNzIGNsb3NlKQogCSAqLwotCWlwYXRoX2NkYmcoVkVSQk9TRSwgIndyaXRpbmcgcG9ydCAlZCByY3ZoZHJhZGRyIGFzICVseFxuIiwKLQkJICAgcGQtPnBvcnRfcG9ydCwgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cyk7CisJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyLAorCQkJICAgICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXMpOwogCWlwYXRoX3dyaXRlX2tyZWdfcG9ydChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJhZGRyLAogCQkJICAgICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcmN2aGRycV9waHlzKTsKIApAQCAtMTUxMSwxNSArMTUxMiwyNyBAQAogCQlbSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQVJNRURdID0gIkFSTUVEIiwKIAkJW0lORklOSVBBVEhfSUJDQ19MSU5LQ01EX0FDVElWRV0gPSAiQUNUSVZFIgogCX07CisJaW50IGxpbmtjbWQgPSAod2hpY2ggPj4gSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpICYKKwkJCUlORklOSVBBVEhfSUJDQ19MSU5LQ01EX01BU0s7CisKIAlpcGF0aF9jZGJnKFNNQSwgIlRyeWluZyB0byBtb3ZlIHVuaXQgJXUgdG8gJXMsIGN1cnJlbnQgbHRzdGF0ZSAiCiAJCSAgICJpcyAlc1xuIiwgZGQtPmlwYXRoX3VuaXQsCi0JCSAgIHdoYXRbKHdoaWNoID4+IElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKSAmCi0JCQlJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9NQVNLXSwKKwkJICAgd2hhdFtsaW5rY21kXSwKIAkJICAgaXBhdGhfaWJjc3RhdHVzX3N0clsKIAkJCSAgIChpcGF0aF9yZWFkX2tyZWc2NAogCQkJICAgIChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpID4+CiAJCQkgICAgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSAmCiAJCQkgICBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTS10pOworCS8qIGZsdXNoIGFsbCBxdWV1ZWQgc2VuZHMgd2hlbiBnb2luZyB0byBET1dOIG9yIElOSVQsIHRvIGJlIHN1cmUgdGhhdAorCSAqIHRoZXkgZG9uJ3QgYmxvY2sgU01BIGFuZCBvdGhlciBNQUQgcGFja2V0cyAqLworCWlmICghbGlua2NtZCB8fCBsaW5rY21kID09IElORklOSVBBVEhfSUJDQ19MSU5LQ01EX0lOSVQpIHsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKKwkJCQkgSU5GSU5JUEFUSF9TX0FCT1JUKTsKKwkJaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYsCisJCSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKShkZC0+aXBhdGhfcGlvYmNudDJrICsKKwkJCQkgICAgZGQtPmlwYXRoX3Bpb2JjbnQ0aykgLQorCQkJCSAgICBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmKTsKKwl9CiAKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCiAJCQkgZGQtPmlwYXRoX2liY2N0cmwgfCB3aGljaCk7CkBAIC0xNjM4LDcgKzE2NTEsNyBAQAogCS8qIGRpc2FibGUgSUJDICovCiAJZGQtPmlwYXRoX2NvbnRyb2wgJj0gfklORklOSVBBVEhfQ19MSU5LRU5BQkxFOwogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwKLQkJCSBkZC0+aXBhdGhfY29udHJvbCk7CisJCQkgZGQtPmlwYXRoX2NvbnRyb2wgfCBJTkZJTklQQVRIX0NfRlJFRVpFTU9ERSk7CiAKIAkvKgogCSAqIGNsZWFyIFNlcmRlc0VuYWJsZSBhbmQgdHVybiB0aGUgbGVkcyBvZmY7IGRvIHRoaXMgaGVyZSBiZWNhdXNlCkBAIC0xNjY3LDYwICsxNjgwLDU0IEBACiAvKioKICAqIGlwYXRoX2ZyZWVfcGRkYXRhIC0gZnJlZSBhIHBvcnQncyBhbGxvY2F0ZWQgZGF0YQogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKLSAqIEBwb3J0OiB0aGUgcG9ydAotICogQGZyZWVoZHJxOiBmcmVlIHRoZSBwb3J0IGRhdGEgc3RydWN0dXJlIGlmIHRydWUKKyAqIEBwZDogdGhlIHBvcnRkYXRhIHN0cnVjdHVyZQogICoKLSAqIHdoZW4gY2xvc2luZywgZnJlZSB1cCBhbnkgYWxsb2NhdGVkIGRhdGEgZm9yIGEgcG9ydCwgaWYgdGhlCi0gKiByZWZlcmVuY2UgY291bnQgZ29lcyB0byB6ZXJvCi0gKiBOb3RlOiB0aGlzIGFsc28gb3B0aW9uYWxseSBmcmVlcyB0aGUgcG9ydGRhdGEgaXRzZWxmIQotICogQW55IGNoYW5nZXMgaGVyZSBoYXZlIHRvIGJlIG1hdGNoZWQgdXAgd2l0aCB0aGUgcmVpbml0IGNhc2UKLSAqIG9mIGlwYXRoX2luaXRfY2hpcCgpLCB3aGljaCBjYWxscyB0aGlzIHJvdXRpbmUgb24gcmVpbml0IGFmdGVyIHJlc2V0LgorICogZnJlZSB1cCBhbnkgYWxsb2NhdGVkIGRhdGEgZm9yIGEgcG9ydAorICogVGhpcyBzaG91bGQgbm90IHRvdWNoIGFueXRoaW5nIHRoYXQgd291bGQgYWZmZWN0IGEgc2ltdWx0YW5lb3VzCisgKiByZS1hbGxvY2F0aW9uIG9mIHBvcnQgZGF0YSwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYWZ0ZXIgaXBhdGhfbXV0ZXgKKyAqIGlzIHJlbGVhc2VkIChhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIHJlaW5pdCBhcyB3ZWxsKS4KKyAqIEl0IHNob3VsZCBuZXZlciBjaGFuZ2UgYW55IGNoaXAgc3RhdGUsIG9yIGdsb2JhbCBkcml2ZXIgc3RhdGUuCisgKiAoVGhlIG9ubHkgZXhjZXB0aW9uIHRvIGdsb2JhbCBzdGF0ZSBpcyBmcmVlaW5nIHRoZSBwb3J0MCBwb3J0MF9za2JzLikKICAqLwotdm9pZCBpcGF0aF9mcmVlX3BkZGF0YShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBwb3J0LCBpbnQgZnJlZWhkcnEpCit2b2lkIGlwYXRoX2ZyZWVfcGRkYXRhKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKIHsKLQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW3BvcnRdOwotCiAJaWYgKCFwZCkKIAkJcmV0dXJuOwotCWlmIChmcmVlaGRycSkKLQkJLyoKLQkJICogb25seSBjbGVhciBhbmQgZnJlZSBwb3J0ZGF0YSBpZiB3ZSBhcmUgZ29pbmcgdG8gYWxzbwotCQkgKiByZWxlYXNlIHRoZSBoZHJxLCBvdGhlcndpc2Ugd2UgbGVhayB0aGUgaGRycSBvbiBlYWNoCi0JCSAqIG9wZW4vY2xvc2UgY3ljbGUKLQkJICovCi0JCWRkLT5pcGF0aF9wZFtwb3J0XSA9IE5VTEw7Ci0JaWYgKGZyZWVoZHJxICYmIHBkLT5wb3J0X3JjdmhkcnEpIHsKKworCWlmIChwZC0+cG9ydF9yY3ZoZHJxKSB7CiAJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImZyZWUgY2xvc2VkIHBvcnQgJWQgcmN2aGRycSBAICVwICIKIAkJCSAgICIoc2l6ZT0lbHUpXG4iLCBwZC0+cG9ydF9wb3J0LCBwZC0+cG9ydF9yY3ZoZHJxLAogCQkJICAgKHVuc2lnbmVkIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSk7CiAJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSwKIAkJCQkgIHBkLT5wb3J0X3JjdmhkcnEsIHBkLT5wb3J0X3JjdmhkcnFfcGh5cyk7CiAJCXBkLT5wb3J0X3JjdmhkcnEgPSBOVUxMOwotCX0KLQlpZiAocG9ydCAmJiBwZC0+cG9ydF9yY3ZlZ3JidWYpIHsKLQkJLyogYWx3YXlzIGZyZWUgdGhpcyAqLwotCQlpZiAocGQtPnBvcnRfcmN2ZWdyYnVmKSB7Ci0JCQl1bnNpZ25lZCBlOwotCi0JCQlmb3IgKGUgPSAwOyBlIDwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rczsgZSsrKSB7Ci0JCQkJdm9pZCAqYmFzZSA9IHBkLT5wb3J0X3JjdmVncmJ1ZltlXTsKLQkJCQlzaXplX3Qgc2l6ZSA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9zaXplOwotCi0JCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZWdyYnVmIGZyZWUoJXAsICVsdSksICIKLQkJCQkJICAgImNodW5rICV1LyV1XG4iLCBiYXNlLAotCQkJCQkgICAodW5zaWduZWQgbG9uZykgc2l6ZSwKLQkJCQkJICAgZSwgcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyk7Ci0JCQkJZG1hX2ZyZWVfY29oZXJlbnQoCi0JCQkJCSZkZC0+cGNpZGV2LT5kZXYsIHNpemUsIGJhc2UsCi0JCQkJCXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzW2VdKTsKLQkJCX0KLQkJCXZmcmVlKHBkLT5wb3J0X3JjdmVncmJ1Zik7Ci0JCQlwZC0+cG9ydF9yY3ZlZ3JidWYgPSBOVUxMOwotCQkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpOwotCQkJcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMgPSBOVUxMOworCQlpZiAocGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIpIHsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkJICh2b2lkICopcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIsCisJCQkJCSBwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5cyk7CisJCQlwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IE5VTEw7CiAJCX0KKwl9CisJaWYgKHBkLT5wb3J0X3BvcnQgJiYgcGQtPnBvcnRfcmN2ZWdyYnVmKSB7CisJCXVuc2lnbmVkIGU7CisKKwkJZm9yIChlID0gMDsgZSA8IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3M7IGUrKykgeworCQkJdm9pZCAqYmFzZSA9IHBkLT5wb3J0X3JjdmVncmJ1ZltlXTsKKwkJCXNpemVfdCBzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemU7CisKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImVncmJ1ZiBmcmVlKCVwLCAlbHUpLCAiCisJCQkJICAgImNodW5rICV1LyV1XG4iLCBiYXNlLAorCQkJCSAgICh1bnNpZ25lZCBsb25nKSBzaXplLAorCQkJCSAgIGUsIHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgc2l6ZSwKKwkJCQliYXNlLCBwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1tlXSk7CisJCX0KKwkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmKTsKKwkJcGQtPnBvcnRfcmN2ZWdyYnVmID0gTlVMTDsKKwkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpOworCQlwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyA9IE5VTEw7CiAJCXBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgPSAwOwotCX0gZWxzZSBpZiAocG9ydCA9PSAwICYmIGRkLT5pcGF0aF9wb3J0MF9za2JzKSB7CisJfSBlbHNlIGlmIChwZC0+cG9ydF9wb3J0ID09IDAgJiYgZGQtPmlwYXRoX3BvcnQwX3NrYnMpIHsKIAkJdW5zaWduZWQgZTsKIAkJc3RydWN0IHNrX2J1ZmYgKipza2JzID0gZGQtPmlwYXRoX3BvcnQwX3NrYnM7CiAKQEAgLTE3MzIsMTAgKzE3MzksOCBAQAogCQkJCWRldl9rZnJlZV9za2Ioc2tic1tlXSk7CiAJCXZmcmVlKHNrYnMpOwogCX0KLQlpZiAoZnJlZWhkcnEpIHsKLQkJa2ZyZWUocGQtPnBvcnRfdGlkX3BnX2xpc3QpOwotCQlrZnJlZShwZCk7Ci0JfQorCWtmcmVlKHBkLT5wb3J0X3RpZF9wZ19saXN0KTsKKwlrZnJlZShwZCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluZmluaXBhdGhfaW5pdCh2b2lkKQpAQCAtMTgwNiw3ICsxODExLDYgQEAKIAkJCSAqIHJlLWluaXQKIAkJCSAqLwogCQkJZGQtPmlwYXRoX2tyZWdiYXNlID0gTlVMTDsKLQkJCWRkLT5pcGF0aF9rcmVndmlydCA9IE5VTEw7CiAJCQlkZC0+aXBhdGhfdXJlZ2Jhc2UgPSAwOwogCQkJZGQtPmlwYXRoX3NyZWdiYXNlID0gMDsKIAkJCWRkLT5pcGF0aF9jcmVnYmFzZSA9IDA7CkBAIC0xODIxLDYgKzE4MjUsMTIgQEAKIAkJCQkgIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cyk7CiAJCWRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hID0gTlVMTDsKIAl9CisJaWYgKGRkLT5pcGF0aF9kdW1teV9oZHJxKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsCisJCQlkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcmN2aGRycV9zaXplLAorCQkJZGQtPmlwYXRoX2R1bW15X2hkcnEsIGRkLT5pcGF0aF9kdW1teV9oZHJxX3BoeXMpOworCQlkZC0+aXBhdGhfZHVtbXlfaGRycSA9IE5VTEw7CisJfQogCiAJaWYgKGRkLT5pcGF0aF9wYWdlc2hhZG93KSB7CiAJCXN0cnVjdCBwYWdlICoqdG1wcCA9IGRkLT5pcGF0aF9wYWdlc2hhZG93OwpAQCAtMTg2MSwxMCArMTg3MSwxNCBAQAogCiAJLyoKIAkgKiBmcmVlIGFueSByZXNvdXJjZXMgc3RpbGwgaW4gdXNlICh1c3VhbGx5IGp1c3Qga2VybmVsIHBvcnRzKQotCSAqIGF0IHVubG9hZAorCSAqIGF0IHVubG9hZDsgd2UgZG8gZm9yIHBvcnRjbnQsIG5vdCBjZmdwb3J0cywgYmVjYXVzZSBjZmdwb3J0cworCSAqIGNvdWxkIGhhdmUgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRlZC4KIAkgKi8KLQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBwb3J0KyspCi0JCWlwYXRoX2ZyZWVfcGRkYXRhKGRkLCBwb3J0LCAxKTsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgZGQtPmlwYXRoX3BvcnRjbnQ7IHBvcnQrKykgeworCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW3BvcnRdOworCQlkZC0+aXBhdGhfcGRbcG9ydF0gPSBOVUxMOworCQlpcGF0aF9mcmVlX3BkZGF0YShkZCwgcGQpOworCX0KIAlrZnJlZShkZC0+aXBhdGhfcGQpOwogCS8qCiAJICogZGVidWdnYWJpbGl0eSwgaW4gY2FzZSBzb21lIGNsZWFudXAgcGF0aCB0cmllcyB0byB1c2UgaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwppbmRleCBhMmYxY2VhLi4zMzEzMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtNjAwLDggKzYwMSwzMSBAQAogCQlndWlkID0gKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkOwogCWRkLT5pcGF0aF9ndWlkID0gZ3VpZDsKIAlkZC0+aXBhdGhfbmd1aWQgPSBpZnAtPmlmX251bWd1aWQ7Ci0JbWVtY3B5KGRkLT5pcGF0aF9zZXJpYWwsIGlmcC0+aWZfc2VyaWFsLAotCSAgICAgICBzaXplb2YoaWZwLT5pZl9zZXJpYWwpKTsKKwkvKgorCSAqIFRoaW5ncyBhcmUgc2xpZ2h0bHkgY29tcGxpY2F0ZWQgYnkgdGhlIGRlc2lyZSB0byB0cmFuc3BhcmVudGx5CisJICogc3VwcG9ydCBib3RoIHRoZSBQYXRoc2NhbGUgMTAtZGlnaXQgc2VyaWFsIG51bWJlciBhbmQgdGhlIFFMb2dpYworCSAqIDEzLWNoYXJhY3RlciB2ZXJzaW9uLgorCSAqLworCWlmICgoaWZwLT5pZl9mdmVyc2lvbiA+IDEpICYmIGlmcC0+aWZfc3ByZWZpeFswXQorCQkmJiAoKHU4ICopaWZwLT5pZl9zcHJlZml4KVswXSAhPSAweEZGKSB7CisJCS8qIFRoaXMgYm9hcmQgaGFzIGEgU2VyaWFsLXByZWZpeCwgd2hpY2ggaXMgc3RvcmVkCisJCSAqIGVsc2V3aGVyZSBmb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4KKwkJICovCisJCWNoYXIgKnNucCA9IGRkLT5pcGF0aF9zZXJpYWw7CisJCWludCBsZW47CisJCW1lbWNweShzbnAsIGlmcC0+aWZfc3ByZWZpeCwgc2l6ZW9mIGlmcC0+aWZfc3ByZWZpeCk7CisJCXNucFtzaXplb2YgaWZwLT5pZl9zcHJlZml4XSA9ICdcMCc7CisJCWxlbiA9IHN0cmxlbihzbnApOworCQlzbnAgKz0gbGVuOworCQlsZW4gPSAoc2l6ZW9mIGRkLT5pcGF0aF9zZXJpYWwpIC0gbGVuOworCQlpZiAobGVuID4gc2l6ZW9mIGlmcC0+aWZfc2VyaWFsKSB7CisJCQlsZW4gPSBzaXplb2YgaWZwLT5pZl9zZXJpYWw7CisJCX0KKwkJbWVtY3B5KHNucCwgaWZwLT5pZl9zZXJpYWwsIGxlbik7CisJfSBlbHNlCisJCW1lbWNweShkZC0+aXBhdGhfc2VyaWFsLCBpZnAtPmlmX3NlcmlhbCwKKwkJICAgICAgIHNpemVvZiBpZnAtPmlmX3NlcmlhbCk7CisKIAlpcGF0aF9jZGJnKFZFUkJPU0UsICJJbml0dGVkIEdVSUQgdG8gJWxseCBmcm9tIGVlcHJvbVxuIiwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUoZGQtPmlwYXRoX2d1aWQpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCBhZGEyNjdlNC4uYmJhYTcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0zOCw4ICszOSw4IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgotI2luY2x1ZGUgImlwc19jb21tb24uaCIKICNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiBzdGF0aWMgaW50IGlwYXRoX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGludCBpcGF0aF9jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CkBAIC0xMjIsNiArMTIzLDcgQEAKIAkgKiBvbiB0byB5ZXQgYW5vdGhlciBtZXRob2Qgb2YgZGVhbGluZyB3aXRoIHRoaXMKIAkgKi8KIAlraW5mby0+c3BpX3Jjdmhkcl9iYXNlID0gKHU2NCkgcGQtPnBvcnRfcmN2aGRycV9waHlzOworCWtpbmZvLT5zcGlfcmN2aGRyX3RhaWxhZGRyID0gKHU2NClwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5czsKIAlraW5mby0+c3BpX3Jjdl9lZ3JidWZzID0gKHU2NCkgcGQtPnBvcnRfcmN2ZWdyX3BoeXM7CiAJa2luZm8tPnNwaV9waW9hdmFpbGFkZHIgPSAodTY0KSBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXM7CiAJa2luZm8tPnNwaV9zdGF0dXMgPSAodTY0KSBraW5mby0+c3BpX3Bpb2F2YWlsYWRkciArCkBAIC00NTYsNyArNDU4LDcgQEAKIAl1MTYgbGtleSA9IGtleSAmIDB4N0ZGRjsKIAlpbnQgcmV0OwogCi0JaWYgKGxrZXkgPT0gKElQU19ERUZBVUxUX1BfS0VZICYgMHg3RkZGKSkgeworCWlmIChsa2V5ID09IChJUEFUSF9ERUZBVUxUX1BfS0VZICYgMHg3RkZGKSkgewogCQkvKiBub3RoaW5nIHRvIGRvOyB0aGlzIGtleSBhbHdheXMgdmFsaWQgKi8KIAkJcmV0ID0gMDsKIAkJZ290byBiYWlsOwpAQCAtNzA0LDYgKzcwNiwxNSBAQAogCXVuc2lnbmVkIGUsIGVncmNudCwgYWxsb2NlZCwgZWdycGVyY2h1bmssIGNodW5rLCBlZ3JzaXplLCBlZ3JvZmY7CiAJc2l6ZV90IHNpemU7CiAJaW50IHJldDsKKwlnZnBfdCBnZnBfZmxhZ3M7CisKKwkvKgorCSAqIEdGUF9VU0VSLCBidXQgd2l0aG91dCBHRlBfRlMsIHNvIGJ1ZmZlciBjYWNoZSBjYW4gYmUKKwkgKiBjb2FsZXNjZWQgKHdlIGhvcGUpOyBvdGhlcndpc2UsIGV2ZW4gYXQgb3JkZXIgNCwKKwkgKiBoZWF2eSBmaWxlc3lzdGVtIGFjdGl2aXR5IG1ha2VzIHRoZXNlIGZhaWwsIGFuZCB3ZSBjYW4KKwkgKiB1c2UgY29tcG91bmQgcGFnZXMuCisJICovCisJZ2ZwX2ZsYWdzID0gX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfQ09NUDsKIAogCWVncmNudCA9IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7CiAJLyogVElEIG51bWJlciBvZmZzZXQgZm9yIHRoaXMgcG9ydCAqLwpAQCAtNzIwLDEwICs3MzEsOCBAQAogCSAqIG1lbW9yeSBwcmVzc3VyZSAoY3JlYXRpbmcgbGFyZ2UgZmlsZXMgYW5kIHRoZW4gY29weWluZyB0aGVtIG92ZXIKIAkgKiBORlMgd2hpbGUgZG9pbmcgbG90cyBvZiBNUEkgam9icyksIHdlIGhpdCBzb21lIGFsbG9jYXRpb24KIAkgKiBmYWlsdXJlcywgZXZlbiB0aG91Z2ggd2UgY2FuIHNsZWVwLi4uICAoMi42LjEwKSBTdGlsbCBnZXQKLQkgKiBmYWlsdXJlcyBhdCA2NEsuICAzMksgaXMgdGhlIGxvd2VzdCB3ZSBjYW4gZ28gd2l0aG91dCB3YWl0aW5nCi0JICogbW9yZSBtZW1vcnkgYWdhaW4uICBJdCBzZWVtcyBsaWtlbHkgdGhhdCB0aGUgY29hbGVzY2luZyBpbgotCSAqIGZyZWVfcGFnZXMsIGV0Yy4gc3RpbGwgaGFzIGlzc3VlcyAoYXMgaXQgaGFzIGhhZCBwcmV2aW91c2x5Ci0JICogZHVyaW5nIDIuNi54IGRldmVsb3BtZW50KS4KKwkgKiBmYWlsdXJlcyBhdCA2NEsuICAzMksgaXMgdGhlIGxvd2VzdCB3ZSBjYW4gZ28gd2l0aG91dCB3YXN0aW5nCisJICogYWRkaXRpb25hbCBtZW1vcnkuCiAJICovCiAJc2l6ZSA9IDB4ODAwMDsKIAlhbGxvY2VkID0gQUxJR04oZWdyc2l6ZSAqIGVncmNudCwgc2l6ZSk7CkBAIC03NDQsMTIgKzc1Myw2IEBACiAJCWdvdG8gYmFpbF9yY3ZlZ3JidWY7CiAJfQogCWZvciAoZSA9IDA7IGUgPCBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOyBlKyspIHsKLQkJLyoKLQkJICogR0ZQX1VTRVIsIGJ1dCB3aXRob3V0IEdGUF9GUywgc28gYnVmZmVyIGNhY2hlIGNhbiBiZQotCQkgKiBjb2FsZXNjZWQgKHdlIGhvcGUpOyBvdGhlcndpc2UsIGV2ZW4gYXQgb3JkZXIgNCwKLQkJICogaGVhdnkgZmlsZXN5c3RlbSBhY3Rpdml0eSBtYWtlcyB0aGVzZSBmYWlsCi0JCSAqLwotCQlnZnBfdCBnZnBfZmxhZ3MgPSBfX0dGUF9XQUlUIHwgX19HRlBfSU8gfCBfX0dGUF9DT01QOwogCiAJCXBkLT5wb3J0X3JjdmVncmJ1ZltlXSA9IGRtYV9hbGxvY19jb2hlcmVudCgKIAkJCSZkZC0+cGNpZGV2LT5kZXYsIHNpemUsICZwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1tlXSwKQEAgLTc4MywxMSArNzg2LDEyIEBACiAKIGJhaWxfcmN2ZWdyYnVmX3BoeXM6CiAJZm9yIChlID0gMDsgZSA8IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgJiYKLQkJICAgICBwZC0+cG9ydF9yY3ZlZ3JidWZbZV07IGUrKykKKwkJcGQtPnBvcnRfcmN2ZWdyYnVmW2VdOyBlKyspIHsKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgc2l6ZSwKIAkJCQkgIHBkLT5wb3J0X3JjdmVncmJ1ZltlXSwKIAkJCQkgIHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzW2VdKTsKIAorCX0KIAl2ZnJlZShwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyk7CiAJcGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMgPSBOVUxMOwogYmFpbF9yY3ZlZ3JidWY6CkBAIC04MDIsMTAgKzgwNiw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7Ci0JdTY0IHBoeXNhZGRyLCB1YWRkciwgb2ZmLCBhdG1wOwotCXN0cnVjdCBwYWdlICpwYWdlcDsKIAl1MzIgaGVhZDMyOwotCXU2NCBoZWFkOwogCiAJLyogZm9yIG5vdywgaWYgbWFqb3IgdmVyc2lvbiBpcyBkaWZmZXJlbnQsIGJhaWwgKi8KIAlpZiAoKHVpbmZvLT5zcHVfdXNlcnZlcnNpb24gPj4gMTYpICE9IElQQVRIX1VTRVJfU1dNQUpPUikgewpAQCAtODMwLDU0ICs4MzEsNiBAQAogCiAJLyogZm9yIG5vdyB3ZSBkbyBub3RoaW5nIHdpdGggcmN2aGRyY250OiB1aW5mby0+c3B1X3JjdmhkcmNudCAqLwogCi0JLyogc2V0IHVwIGZvciB0aGUgcmN2aGRyIFEgdGFpbCByZWdpc3RlciB3cml0ZWJhY2sgdG8gdXNlciBtZW1vcnkgKi8KLQlpZiAoIXVpbmZvLT5zcHVfcmN2aGRyYWRkciB8fAotCSAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHU2NCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpCi0JCSAgICAgICB1aW5mby0+c3B1X3JjdmhkcmFkZHIsIHNpemVvZih1NjQpKSkgewotCQlpcGF0aF9kYmcoIlBvcnQgJWQgcmN2aGRydGFpbCBhZGRyICVsbHggbm90IHZhbGlkXG4iLAotCQkJICBwZC0+cG9ydF9wb3J0LAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB1aW5mby0+c3B1X3JjdmhkcmFkZHIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0Jb2ZmID0gb2Zmc2V0X2luX3BhZ2UodWluZm8tPnNwdV9yY3ZoZHJhZGRyKTsKLQl1YWRkciA9IFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKSB1aW5mby0+c3B1X3JjdmhkcmFkZHI7Ci0JcmV0ID0gaXBhdGhfZ2V0X3VzZXJfcGFnZXNfbm9jb3B5KHVhZGRyLCAmcGFnZXApOwotCWlmIChyZXQpIHsKLQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZhaWxlZCB0byBsb29rdXAgYW5kIGxvY2sgIgotCQkJICJhZGRyZXNzICVsbHggZm9yIHJjdmhkcnRhaWw6IGVycm5vICVkXG4iLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHVpbmZvLT5zcHVfcmN2aGRyYWRkciwgLXJldCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcysrOwotCXBkLT5wb3J0X3JjdmhkcnRhaWxfdWFkZHIgPSB1YWRkcjsKLQlwZC0+cG9ydF9yY3ZoZHJ0YWlsX3BhZ2VwID0gcGFnZXA7Ci0JcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIgPQotCQlwYWdlX2FkZHJlc3MocGFnZXApOwotCXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyICs9IG9mZjsKLQlwaHlzYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlcCkgKyBvZmY7Ci0JaXBhdGhfY2RiZyhWRVJCT1NFLCAicG9ydCAlZCB1c2VyIGFkZHIgJWxseCBoZHJ0YWlsYWRkciwgJWxseCAiCi0JCSAgICJwaHlzaWNhbCAob2ZmPSVsbHgpXG4iLAotCQkgICBwZC0+cG9ydF9wb3J0LAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSB1aW5mby0+c3B1X3JjdmhkcmFkZHIsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBoeXNhZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKSBvZmYpOwotCWlwYXRoX3dyaXRlX2tyZWdfcG9ydChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkciwKLQkJCSAgICAgIHBkLT5wb3J0X3BvcnQsIHBoeXNhZGRyKTsKLQlhdG1wID0gaXBhdGhfcmVhZF9rcmVnNjRfcG9ydChkZCwKLQkJCQkgICAgICBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyLAotCQkJCSAgICAgIHBkLT5wb3J0X3BvcnQpOwotCWlmIChwaHlzYWRkciAhPSBhdG1wKSB7Ci0JCWlwYXRoX2Rldl9lcnIoZGQsCi0JCQkgICAgICAiQ2F0YXN0cm9waGljIHNvZnR3YXJlIGVycm9yLCAiCi0JCQkgICAgICAiUmN2SGRyVGFpbEFkZHIldSB3cml0dGVuIGFzICVsbHgsICIKLQkJCSAgICAgICJyZWFkIGJhY2sgYXMgJWxseFxuIiwgcGQtPnBvcnRfcG9ydCwKLQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBoeXNhZGRyLAotCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXRtcCk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KIAkvKiBmb3IgcmlnaHQgbm93LCBrZXJuZWwgcGlvYnVmcyBhcmUgYXQgZW5kLCBzbyBwb3J0IDEgaXMgYXQgMCAqLwogCXBkLT5wb3J0X3Bpb2J1ZnMgPSBkZC0+aXBhdGhfcGlvYnVmYmFzZSArCiAJCWRkLT5pcGF0aF9wYnVmc3BvcnQgKiAocGQtPnBvcnRfcG9ydCAtCkBAIC04OTYsMjYgKzg0OSwxOCBAQAogCQlyZXQgPSBpcGF0aF9jcmVhdGVfdXNlcl9lZ3IocGQpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9uZTsKLQkvKiBlbmFibGUgcmVjZWl2ZXMgbm93ICovCi0JLyogYXRvbWljYWxseSBzZXQgZW5hYmxlIGJpdCBmb3IgdGhpcyBwb3J0ICovCi0Jc2V0X2JpdChJTkZJTklQQVRIX1JfUE9SVEVOQUJMRV9TSElGVCArIHBkLT5wb3J0X3BvcnQsCi0JCSZkZC0+aXBhdGhfcmN2Y3RybCk7CiAKIAkvKgotCSAqIHNldCB0aGUgaGVhZCByZWdpc3RlcnMgZm9yIHRoaXMgcG9ydCB0byB0aGUgY3VycmVudCB2YWx1ZXMKKwkgKiBzZXQgdGhlIGVhZ2VyIGhlYWQgcmVnaXN0ZXIgZm9yIHRoaXMgcG9ydCB0byB0aGUgY3VycmVudCB2YWx1ZXMKIAkgKiBvZiB0aGUgdGFpbCBwb2ludGVycywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGV5IHdlcmUKIAkgKiB1cGRhdGVkIG9uIGxhc3QgdXNlIG9mIHRoZSBwb3J0LgogCSAqLwotCWhlYWQzMiA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJ0YWlsLCBwZC0+cG9ydF9wb3J0KTsKLQloZWFkID0gKHU2NCkgaGVhZDMyOwotCWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmhkcmhlYWQsIGhlYWQsIHBkLT5wb3J0X3BvcnQpOwogCWhlYWQzMiA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIHBkLT5wb3J0X3BvcnQpOwogCWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgaGVhZDMyLCBwZC0+cG9ydF9wb3J0KTsKIAlkZC0+aXBhdGhfbGFzdGVncmhlYWRzW3BkLT5wb3J0X3BvcnRdID0gLTE7CiAJZGQtPmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHNbcGQtPnBvcnRfcG9ydF0gPSAtMTsKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJXcm90ZSBwb3J0JWQgaGVhZCAlbGx4LCBlZ3JoZWFkICV4IGZyb20gIgotCQkgICAidGFpbCByZWdzXG4iLCBwZC0+cG9ydF9wb3J0LAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBoZWFkLCBoZWFkMzIpOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIldyb3RlIHBvcnQlZCBlZ3JoZWFkICV4IGZyb20gdGFpbCByZWdzXG4iLAorCQlwZC0+cG9ydF9wb3J0LCBoZWFkMzIpOwogCXBkLT5wb3J0X3RpZGN1cnNvciA9IDA7CS8qIHN0YXJ0IGF0IGJlZ2lubmluZyBhZnRlciBvcGVuICovCiAJLyoKIAkgKiBub3cgZW5hYmxlIHRoZSBwb3J0OyB0aGUgdGFpbCByZWdpc3RlcnMgd2lsbCBiZSB3cml0dGVuIHRvIG1lbW9yeQpAQCAtOTI0LDI0ICs4NjksNzYgQEAKIAkgKiB0cmFuc2l0aW9uIGZyb20gMCB0byAxLCBzbyBjbGVhciBpdCBmaXJzdCwgdGhlbiBzZXQgaXQgYXMgcGFydCBvZgogCSAqIGVuYWJsaW5nIHRoZSBwb3J0LiAgVGhpcyB3aWxsICh2ZXJ5IGJyaWVmbHkpIGFmZmVjdCBhbnkgb3RoZXIKIAkgKiBvcGVuIHBvcnRzLCBidXQgaXQgc2hvdWxkbid0IGJlIGxvbmcgZW5vdWdoIHRvIGJlIGFuIGlzc3VlLgorCSAqIFdlIGV4cGxpY3RseSBzZXQgdGhlIGluLW1lbW9yeSBjb3B5IHRvIDAgYmVmb3JlaGFuZCwgc28gd2UgZG9uJ3QKKwkgKiBoYXZlIHRvIHdhaXQgdG8gYmUgc3VyZSB0aGUgRE1BIHVwZGF0ZSBoYXMgaGFwcGVuZWQuCiAJICovCisJKnBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyID0gMFVMTDsKKwlzZXRfYml0KElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUICsgcGQtPnBvcnRfcG9ydCwKKwkJJmRkLT5pcGF0aF9yY3ZjdHJsKTsKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCiAJCQkgZGQtPmlwYXRoX3JjdmN0cmwgJiB+SU5GSU5JUEFUSF9SX1RBSUxVUEQpOwogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKIAkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7Ci0KIGRvbmU6CiAJcmV0dXJuIHJldDsKIH0KIAorCisvKiBjb21tb24gY29kZSBmb3IgdGhlIG1hcHBpbmdzIG9uIGRtYV9hbGxvY19jb2hlcmVudCBtZW0gKi8KK3N0YXRpYyBpbnQgaXBhdGhfbW1hcF9tZW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHVuc2lnbmVkIGxlbiwKKwkJCSAgICAgaW50IHdyaXRlX29rLCBkbWFfYWRkcl90IGFkZHIsIGNoYXIgKndoYXQpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CisJdW5zaWduZWQgcGZuID0gKHVuc2lnbmVkIGxvbmcpYWRkciA+PiBQQUdFX1NISUZUOworCWludCByZXQ7CisKKwlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPiBsZW4pIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJICAgICAgICAgIkZBSUwgb24gJXM6IGxlbiAlbHggPiAleFxuIiwgd2hhdCwKKwkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIGxlbik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoIXdyaXRlX29rKSB7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHsKKwkJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkJICIlcyBtdXN0IGJlIG1hcHBlZCByZWFkb25seVxuIiwgd2hhdCk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQkvKiBkb24ndCBhbGxvdyB0aGVtIHRvIGxhdGVyIGNoYW5nZSB3aXRoIG1wcm90ZWN0ICovCisJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOworCX0KKworCXJldCA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHBmbiwKKwkJCSAgICAgIGxlbiwgdm1hLT52bV9wYWdlX3Byb3QpOworCWlmIChyZXQpCisJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCisJCQkgIiVzIHBvcnQldSBtbWFwIG9mICVseCwgJXggYnl0ZXMgciVjIGZhaWxlZDogJWRcbiIsCisJCQkgd2hhdCwgcGQtPnBvcnRfcG9ydCwgKHVuc2lnbmVkIGxvbmcpYWRkciwgbGVuLAorCQkJIHdyaXRlX29rPyd3JzonbycsIHJldCk7CisJZWxzZQorCQlpcGF0aF9jZGJnKFZFUkJPU0UsICIlcyBwb3J0JXUgbW1hcGVkICVseCwgJXggYnl0ZXMgciVjXG4iLAorCQkJd2hhdCwgcGQtPnBvcnRfcG9ydCwgKHVuc2lnbmVkIGxvbmcpYWRkciwgbGVuLAorCQkJIHdyaXRlX29rPyd3JzonbycpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG1tYXBfdXJlZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAogCQkgICAgIHU2NCB1cmVnKQogewogCXVuc2lnbmVkIGxvbmcgcGh5czsKIAlpbnQgcmV0OwogCi0JLyogaXQncyB0aGUgcmVhbCBoYXJkd2FyZSwgc28gaW9fcmVtYXAgd29ya3MgKi8KLQorCS8qCisJICogVGhpcyBpcyByZWFsIGhhcmR3YXJlLCBzbyB1c2UgaW9fcmVtYXAuICBUaGlzIGlzIHRoZSBtZWNoYW5pc20KKwkgKiBmb3IgdGhlIHVzZXIgcHJvY2VzcyB0byB1cGRhdGUgdGhlIGhlYWQgcmVnaXN0ZXJzIGZvciB0aGVpciBwb3J0CisJICogaW4gdGhlIGNoaXAuCisJICovCiAJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gUEFHRV9TSVpFKSB7CiAJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJGQUlMIG1tYXAgdXNlcnJlZzogcmVxbGVuICIKIAkJCSAiJWx4ID4gUEFHRVxuIiwgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKQEAgLTk2NywxMCArOTY0LDExIEBACiAJaW50IHJldDsKIAogCS8qCi0JICogV2hlbiB3ZSBtYXAgdGhlIFBJTyBidWZmZXJzLCB3ZSB3YW50IHRvIG1hcCB0aGVtIGFzIHdyaXRlb25seSwgbm8KLQkgKiByZWFkIHBvc3NpYmxlLgorCSAqIFdoZW4gd2UgbWFwIHRoZSBQSU8gYnVmZmVycyBpbiB0aGUgY2hpcCwgd2Ugd2FudCB0byBtYXAgdGhlbSBhcworCSAqIHdyaXRlb25seSwgbm8gcmVhZCBwb3NzaWJsZS4gICBUaGlzIHByZXZlbnRzIGFjY2VzcyB0byBwcmV2aW91cworCSAqIHByb2Nlc3MgZGF0YSwgYW5kIGNhdGNoZXMgdXNlcnMgd2hvIG1pZ2h0IHRyeSB0byByZWFkIHRoZSBpL28KKwkgKiBzcGFjZSBkdWUgdG8gYSBidWcuCiAJICovCi0KIAlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPgogCSAgICAoZGQtPmlwYXRoX3BidWZzcG9ydCAqIGRkLT5pcGF0aF9wYWxpZ24pKSB7CiAJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsICJGQUlMIG1tYXAgcGlvYnVmczogIgpAQCAtOTgxLDExICs5NzksMTAgQEAKIAl9CiAKIAlwaHlzID0gZGQtPmlwYXRoX3BoeXNhZGRyICsgcGQtPnBvcnRfcGlvYnVmczsKKwogCS8qCi0JICogRG8gKk5PVCogbWFyayB0aGlzIGFzIG5vbi1jYWNoZWQgKFBXVCBiaXQpLCBvciB3ZSBkb24ndCBnZXQgdGhlCisJICogRG9uJ3QgbWFyayB0aGlzIGFzIG5vbi1jYWNoZWQsIG9yIHdlIGRvbid0IGdldCB0aGUKIAkgKiB3cml0ZSBjb21iaW5pbmcgYmVoYXZpb3Igd2Ugd2FudCBvbiB0aGUgUElPIGJ1ZmZlcnMhCi0JICogdm1hLT52bV9wYWdlX3Byb3QgPQotCSAqICAgICAgICBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKIAkgKi8KIAogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkgewpAQCAtOTk3LDggKzk5NCw3IEBACiAJfQogCiAJLyogZG9uJ3QgYWxsb3cgdGhlbSB0byBsYXRlciBjaGFuZ2UgdG8gcmVhZGFibGUgd2l0aCBtcHJvdGVjdCAqLwotCi0Jdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZUkVBRDsKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRDT1BZIHwgVk1fRE9OVEVYUEFORDsKIAogCXJldCA9IGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHBoeXMgPj4gUEFHRV9TSElGVCwKQEAgLTEwMTcsMTEgKzEwMTMsNiBAQAogCWRtYV9hZGRyX3QgKnBoeXM7CiAJaW50IHJldDsKIAotCWlmICghcGQtPnBvcnRfcmN2ZWdyYnVmKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KIAlzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemU7CiAJdG90YWxfc2l6ZSA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgKiBzaXplOwogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IHRvdGFsX3NpemUpIHsKQEAgLTEwMzksMTMgKzEwMzAsMTIgQEAKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIGJhaWw7CiAJfQorCS8qIGRvbid0IGFsbG93IHRoZW0gdG8gbGF0ZXIgY2hhbmdlIHRvIHdyaXRlYWJsZSB3aXRoIG1wcm90ZWN0ICovCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CiAKIAlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJcGh5cyA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzOwogCi0JLyogZG9uJ3QgYWxsb3cgdGhlbSB0byBsYXRlciBjaGFuZ2UgdG8gd3JpdGVhYmxlIHdpdGggbXByb3RlY3QgKi8KLQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlXUklURTsKLQogCWZvciAoaSA9IDA7IGkgPCBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOyBpKyssIHN0YXJ0ICs9IHNpemUpIHsKIAkJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBoeXNbaV0gPj4gUEFHRV9TSElGVCwKIAkJCQkgICAgICBzaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CkBAIC0xMDU4LDc4ICsxMDQ4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1tYXBfcmN2aGRycShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQpCi17Ci0Jc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7Ci0Jc2l6ZV90IHRvdGFsX3NpemU7Ci0JaW50IHJldDsKLQotCS8qCi0JICoga21hbGxvYydlZCBtZW1vcnksIHBoeXNpY2FsbHkgY29udGlndW91czsgdGhpcyBpcyBmcm9tCi0JICogc3BpX3Jjdmhkcl9iYXNlOyB3ZSBhbGxvdyB1c2VyIHRvIG1hcCByZWFkLXdyaXRlIHNvIHRoZXkgY2FuCi0JICogd3JpdGUgaGRycSBlbnRyaWVzIHRvIGFsbG93IHByb3RvY29sIGNvZGUgdG8gZGlyZWN0bHkgcG9sbAotCSAqIHdoZXRoZXIgYSBoZHJxIGVudHJ5IGhhcyBiZWVuIHdyaXR0ZW4uCi0JICovCi0JdG90YWxfc2l6ZSA9IEFMSUdOKGRkLT5pcGF0aF9yY3ZoZHJjbnQgKiBkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZSAqCi0JCQkgICBzaXplb2YodTMyKSwgUEFHRV9TSVpFKTsKLQlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPiB0b3RhbF9zaXplKSB7Ci0JCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCi0JCQkgIkZBSUwgb24gcmN2aGRycTogcmVxbGVuICVseCA+IGFjdHVhbCAlbHhcbiIsCi0JCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJICh1bnNpZ25lZCBsb25nKSB0b3RhbF9zaXplKTsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBiYWlsOwotCX0KLQotCXJldCA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgICBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMgPj4gUEFHRV9TSElGVCwKLQkJCSAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCSAgICAgIHZtYS0+dm1fcGFnZV9wcm90KTsKLWJhaWw6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtbWFwX3Bpb2F2YWlscmVncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKLXsKLQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiB3aGVuIHdlIG1hcCB0aGUgUElPIGJ1ZmZlcmF2YWlsIHJlZ2lzdGVycywgd2Ugd2FudCB0byBtYXAgdGhlbSBhcwotCSAqIHJlYWRvbmx5LCBubyB3cml0ZSBwb3NzaWJsZS4KLQkgKgotCSAqIGttYWxsb2MnZWQgbWVtb3J5LCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIG9uZSBwYWdlIG9ubHksIHJlYWRvbmx5Ci0JICovCi0KLQlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPiBQQUdFX1NJWkUpIHsKLQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZBSUwgb24gcGlvYXZhaWxyZWdzX2RtYTogIgotCQkJICJyZXFsZW4gJWx4ID4gYWN0dWFsICVseFxuIiwKLQkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCi0JCQkgKHVuc2lnbmVkIGxvbmcpIFBBR0VfU0laRSk7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7Ci0JCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCi0JCQkgIkNhbid0IG1hcCBwaW9hdmFpbHJlZ3MgYXMgd3JpdGFibGUgKGZsYWdzPSVseClcbiIsCi0JCQkgdm1hLT52bV9mbGFncyk7Ci0JCXJldCA9IC1FUEVSTTsKLQkJZ290byBiYWlsOwotCX0KLQotCS8qIGRvbid0IGFsbG93IHRoZW0gdG8gbGF0ZXIgY2hhbmdlIHdpdGggbXByb3RlY3QgKi8KLQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlXUklURTsKLQotCXJldCA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgICBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMgPj4gUEFHRV9TSElGVCwKLQkJCSAgICAgIFBBR0VfU0laRSwgdm1hLT52bV9wYWdlX3Byb3QpOwotYmFpbDoKLQlyZXR1cm4gcmV0OwotfQotCiAvKioKICAqIGlwYXRoX21tYXAgLSBtbWFwIHZhcmlvdXMgc3RydWN0dXJlcyBpbnRvIHVzZXIgc3BhY2UKICAqIEBmcDogdGhlIGZpbGUgcG9pbnRlcgpAQCAtMTE0OSw2ICsxMDY3LDcgQEAKIAogCXBkID0gcG9ydF9mcChmcCk7CiAJZGQgPSBwZC0+cG9ydF9kZDsKKwogCS8qCiAJICogVGhpcyBpcyB0aGUgaXBhdGhfZG9fdXNlcl9pbml0KCkgY29kZSwgbWFwcGluZyB0aGUgc2hhcmVkIGJ1ZmZlcnMKIAkgKiBpbnRvIHRoZSB1c2VyIHByb2Nlc3MuIFRoZSBhZGRyZXNzIHJlZmVycmVkIHRvIGJ5IHZtX3Bnb2ZmIGlzIHRoZQpAQCAtMTE1OCwyOCArMTA3Nyw1OSBAQAogCXBnYWRkciA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKIAogCS8qCi0JICogbm90ZSB0aGF0IHVyZWcgZG9lcyAqTk9UKiBoYXZlIHRoZSBrcmVndmlydCBhcyBwYXJ0IG9mIGl0LCB0byBiZQotCSAqIHN1cmUgdGhhdCBmb3IgMzIgYml0IHByb2dyYW1zLCB3ZSBkb24ndCBlbmQgdXAgdHJ5aW5nIHRvIG1hcCBhID4KLQkgKiA0NCBhZGRyZXNzLiAgSGFzIHRvIG1hdGNoIGlwYXRoX2dldF9iYXNlX2luZm8oKSBjb2RlIHRoYXQgc2V0cwotCSAqIF9fc3BpX3VyZWdiYXNlCisJICogTXVzdCBmaXQgaW4gNDAgYml0cyBmb3Igb3VyIGhhcmR3YXJlOyBzb21lIGNoZWNrZWQgZWxzZXdoZXJlLAorCSAqIGJ1dCB3ZSdsbCBiZSBwYXJhbm9pZC4gIENoZWNrIGZvciAwIGlzIG1vc3RseSBpbiBjYXNlIG9uZSBvZiB0aGUKKwkgKiBhbGxvY2F0aW9ucyBmYWlsZWQsIGJ1dCB1c2VyIGNhbGxlZCBtbWFwIGFueXdheS4gICBXZSB3YW50IHRvIGNhdGNoCisJICogdGhhdCBiZWZvcmUgaXQgY2FuIG1hdGNoLgogCSAqLworCWlmICghcGdhZGRyIHx8IHBnYWRkciA+PSAoMVVMTDw8NDApKSAgeworCQlpcGF0aF9kZXZfZXJyKGRkLCAiQmFkIHBoeXMgYWRkciAlbGx4LCBzdGFydCAlbHgsIGVuZCAlbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBnYWRkciwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKKwkvKiBqdXN0IHRoZSBvZmZzZXQgb2YgdGhlIHBvcnQgdXNlciByZWdpc3RlcnMsIG5vdCBwaHlzaWNhbCBhZGRyICovCiAJdXJlZyA9IGRkLT5pcGF0aF91cmVnYmFzZSArIGRkLT5pcGF0aF9wYWxpZ24gKiBwZC0+cG9ydF9wb3J0OwogCiAJaXBhdGhfY2RiZyhNTSwgInVzaGFyZTogcGdhZGRyICVsbHggdm1fc3RhcnQ9JWx4LCB2bWxlbiAlbHhcbiIsCiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBnYWRkciwgdm1hLT52bV9zdGFydCwKIAkJICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKIAotCWlmIChwZ2FkZHIgPT0gdXJlZykKKwlpZiAodm1hLT52bV9zdGFydCAmIChQQUdFX1NJWkUtMSkpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwKKwkJCSJ2bV9zdGFydCBub3QgYWxpZ25lZDogJWx4LCBlbmQ9JWx4IHBoeXMgJWx4XG4iLAorCQkJdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICh1bnNpZ25lZCBsb25nKXBnYWRkcik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWVsc2UgaWYgKHBnYWRkciA9PSB1cmVnKQogCQlyZXQgPSBtbWFwX3VyZWcodm1hLCBkZCwgdXJlZyk7CiAJZWxzZSBpZiAocGdhZGRyID09IHBkLT5wb3J0X3Bpb2J1ZnMpCiAJCXJldCA9IG1tYXBfcGlvYnVmcyh2bWEsIGRkLCBwZCk7CiAJZWxzZSBpZiAocGdhZGRyID09ICh1NjQpIHBkLT5wb3J0X3JjdmVncl9waHlzKQogCQlyZXQgPSBtbWFwX3JjdmVncmJ1ZnModm1hLCBwZCk7Ci0JZWxzZSBpZiAocGdhZGRyID09ICh1NjQpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cykKLQkJcmV0ID0gbW1hcF9yY3ZoZHJxKHZtYSwgcGQpOworCWVsc2UgaWYgKHBnYWRkciA9PSAodTY0KSBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMpIHsKKwkJLyoKKwkJICogVGhlIHJjdmhkcnEgaXRzZWxmOyByZWFkb25seSBleGNlcHQgb24gSFQtNDAwIChzbyBoYXZlCisJCSAqIHRvIGFsbG93IHdyaXRhYmxlIG1hcHBpbmcpLCBtdWx0aXBsZSBwYWdlcywgY29udGlndW91cworCQkgKiBmcm9tIGFuIGkvbyBwZXJzcGVjdGl2ZS4KKwkJICovCisJCXVuc2lnbmVkIHRvdGFsX3NpemUgPQorCQkJQUxJR04oZGQtPmlwYXRoX3JjdmhkcmNudCAqIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplCisJCQkgICAqIHNpemVvZih1MzIpLCBQQUdFX1NJWkUpOworCQlyZXQgPSBpcGF0aF9tbWFwX21lbSh2bWEsIHBkLCB0b3RhbF9zaXplLCAxLAorCQkJCSAgICAgcGQtPnBvcnRfcmN2aGRycV9waHlzLAorCQkJCSAgICAgInJjdmhkcnEiKTsKKwl9CisJZWxzZSBpZiAocGdhZGRyID09ICh1NjQpcGQtPnBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXMpCisJCS8qIGluLW1lbW9yeSBjb3B5IG9mIHJjdmhkcnEgdGFpbCByZWdpc3RlciAqLworCQlyZXQgPSBpcGF0aF9tbWFwX21lbSh2bWEsIHBkLCBQQUdFX1NJWkUsIDAsCisJCQkJICAgICBwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5cywKKwkJCQkgICAgICJyY3ZoZHJxIHRhaWwiKTsKIAllbHNlIGlmIChwZ2FkZHIgPT0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzKQotCQlyZXQgPSBtbWFwX3Bpb2F2YWlscmVncyh2bWEsIHBkKTsKKwkJLyogaW4tbWVtb3J5IGNvcHkgb2YgcGlvYXZhaWwgcmVnaXN0ZXJzICovCisJCXJldCA9IGlwYXRoX21tYXBfbWVtKHZtYSwgcGQsIFBBR0VfU0laRSwgMCwKKwkJCQkgICAgIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cywKKwkJCQkgICAgICJwaW9hdmFpbCByZWdpc3RlcnMiKTsKIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAKQEAgLTE0NDIsMTYgKzEzOTIsMTYgQEAKIAogc3RhdGljIGludCBpcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqaW4sIHN0cnVjdCBmaWxlICpmcCkKIHsKLQlpbnQgcmV0LCBtaW5vcjsKKwlpbnQgcmV0LCB1c2VyX21pbm9yOwogCiAJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOwogCi0JbWlub3IgPSBpbWlub3IoaW4pOworCXVzZXJfbWlub3IgPSBpbWlub3IoaW4pIC0gSVBBVEhfVVNFUl9NSU5PUl9CQVNFOwogCWlwYXRoX2NkYmcoVkVSQk9TRSwgIm9wZW4gb24gZGV2ICVseCAobWlub3IgJWQpXG4iLAotCQkgICAobG9uZylpbi0+aV9yZGV2LCBtaW5vcik7CisJCSAgIChsb25nKWluLT5pX3JkZXYsIHVzZXJfbWlub3IpOwogCi0JaWYgKG1pbm9yKQotCQlyZXQgPSBmaW5kX2ZyZWVfcG9ydChtaW5vciAtIDEsIGZwKTsKKwlpZiAodXNlcl9taW5vcikKKwkJcmV0ID0gZmluZF9mcmVlX3BvcnQodXNlcl9taW5vciAtIDEsIGZwKTsKIAllbHNlCiAJCXJldCA9IGZpbmRfYmVzdF91bml0KGZwKTsKIApAQCAtMTUzNiw1MyArMTQ4Niw1NCBAQAogCX0KIAogCWlmIChkZC0+aXBhdGhfa3JlZ2Jhc2UpIHsKLQkJaWYgKHBkLT5wb3J0X3JjdmhkcnRhaWxfdWFkZHIpIHsKLQkJCXBkLT5wb3J0X3JjdmhkcnRhaWxfdWFkZHIgPSAwOwotCQkJcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIgPSBOVUxMOwotCQkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzX29uX2Nsb3NlKAotCQkJCSZwZC0+cG9ydF9yY3ZoZHJ0YWlsX3BhZ2VwLCAxKTsKLQkJCXBkLT5wb3J0X3JjdmhkcnRhaWxfcGFnZXAgPSBOVUxMOwotCQkJaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKys7Ci0JCX0KLQkJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KAotCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsCi0JCQlwb3J0LCAwVUxMKTsKLQkJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KAotCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRyYWRkciwKLQkJCXBkLT5wb3J0X3BvcnQsIDApOworCQlpbnQgaTsKKwkJLyogYXRvbWljYWxseSBjbGVhciByZWNlaXZlIGVuYWJsZSBwb3J0LiAqLworCQljbGVhcl9iaXQoSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgKyBwb3J0LAorCQkJICAmZGQtPmlwYXRoX3JjdmN0cmwpOworCQlpcGF0aF93cml0ZV9rcmVnKCBkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJZGQtPmlwYXRoX3JjdmN0cmwpOworCQkvKiBhbmQgcmVhZCBiYWNrIGZyb20gY2hpcCB0byBiZSBzdXJlIHRoYXQgbm90aGluZworCQkgKiBlbHNlIGlzIGluIGZsaWdodCB3aGVuIHdlIGRvIHRoZSByZXN0ICovCisJCSh2b2lkKWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOwogCiAJCS8qIGNsZWFuIHVwIHRoZSBwa2V5cyBmb3IgdGhpcyBwb3J0IHVzZXIgKi8KIAkJaXBhdGhfY2xlYW5fcGFydF9rZXkocGQsIGRkKTsKIAotCQlpZiAocG9ydCA8IGRkLT5pcGF0aF9jZmdwb3J0cykgewotCQkJaW50IGkgPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogKHBvcnQgLSAxKTsKLQkJCWlwYXRoX2Rpc2FybV9waW9idWZzKGRkLCBpLCBkZC0+aXBhdGhfcGJ1ZnNwb3J0KTsKIAotCQkJLyogYXRvbWljYWxseSBjbGVhciByZWNlaXZlIGVuYWJsZSBwb3J0LiAqLwotCQkJY2xlYXJfYml0KElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUICsgcG9ydCwKLQkJCQkgICZkZC0+aXBhdGhfcmN2Y3RybCk7Ci0JCQlpcGF0aF93cml0ZV9rcmVnKAotCQkJCWRkLAotCQkJCWRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKLQkJCQlkZC0+aXBhdGhfcmN2Y3RybCk7CisJCS8qCisJCSAqIGJlIHBhcmFub2lkLCBhbmQgbmV2ZXIgd3JpdGUgMCdzIHRvIHRoZXNlLCBqdXN0IHVzZSBhbgorCQkgKiB1bnVzZWQgcGFydCBvZiB0aGUgcG9ydCAwIHRhaWwgcGFnZS4gIE9mIGNvdXJzZSwKKwkJICogcmN2aGRyYWRkciBwb2ludHMgdG8gYSBsYXJnZSBjaHVuayBvZiBtZW1vcnksIHNvIHRoaXMKKwkJICogY291bGQgc3RpbGwgdHJhc2ggdGhpbmdzLCBidXQgYXQgbGVhc3QgaXQgd29uJ3QgdHJhc2gKKwkJICogcGFnZSAwLCBhbmQgYnkgZGlzYWJsaW5nIHRoZSBwb3J0LCBpdCBzaG91bGQgc3RvcCAic29vbiIsCisJCSAqIGV2ZW4gaWYgYSBwYWNrZXQgb3IgdHdvIGlzIGluIGFscmVhZHkgaW4gZmxpZ2h0IGFmdGVyIHdlCisJCSAqIGRpc2FibGVkIHRoZSBwb3J0LgorCQkgKi8KKwkJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLAorCQkgICAgICAgIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsIHBvcnQsCisJCQlkZC0+aXBhdGhfZHVtbXlfaGRycV9waHlzKTsKKwkJaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcmFkZHIsCisJCQlwZC0+cG9ydF9wb3J0LCBkZC0+aXBhdGhfZHVtbXlfaGRycV9waHlzKTsKIAotCQkJaWYgKGRkLT5pcGF0aF9wYWdlc2hhZG93KQotCQkJCXVubG9ja19leHBlY3RlZF90aWRzKHBkKTsKLQkJCWlwYXRoX3N0YXRzLnNwc19wb3J0cy0tOwotCQkJaXBhdGhfY2RiZyhQUk9DLCAiJXNbJXVdIGNsb3NlZCBwb3J0ICV1OiV1XG4iLAotCQkJCSAgIHBkLT5wb3J0X2NvbW0sIHBkLT5wb3J0X3BpZCwKLQkJCQkgICBkZC0+aXBhdGhfdW5pdCwgcG9ydCk7Ci0JCX0KKwkJaSA9IGRkLT5pcGF0aF9wYnVmc3BvcnQgKiAocG9ydCAtIDEpOworCQlpcGF0aF9kaXNhcm1fcGlvYnVmcyhkZCwgaSwgZGQtPmlwYXRoX3BidWZzcG9ydCk7CisKKwkJaWYgKGRkLT5pcGF0aF9wYWdlc2hhZG93KQorCQkJdW5sb2NrX2V4cGVjdGVkX3RpZHMocGQpOworCQlpcGF0aF9zdGF0cy5zcHNfcG9ydHMtLTsKKwkJaXBhdGhfY2RiZyhQUk9DLCAiJXNbJXVdIGNsb3NlZCBwb3J0ICV1OiV1XG4iLAorCQkJICAgcGQtPnBvcnRfY29tbSwgcGQtPnBvcnRfcGlkLAorCQkJICAgZGQtPmlwYXRoX3VuaXQsIHBvcnQpOworCisJCWRkLT5pcGF0aF9mX2NsZWFyX3RpZHMoZGQsIHBkLT5wb3J0X3BvcnQpOwogCX0KIAogCXBkLT5wb3J0X2NudCA9IDA7CiAJcGQtPnBvcnRfcGlkID0gMDsKIAotCWRkLT5pcGF0aF9mX2NsZWFyX3RpZHMoZGQsIHBkLT5wb3J0X3BvcnQpOwotCi0JaXBhdGhfZnJlZV9wZGRhdGEoZGQsIHBkLT5wb3J0X3BvcnQsIDApOwotCisJZGQtPmlwYXRoX3BkW3BkLT5wb3J0X3BvcnRdID0gTlVMTDsgLyogYmVmb3JlIHJlbGVhc2luZyBtdXRleCAqLwogCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCWlwYXRoX2ZyZWVfcGRkYXRhKGRkLCBwZCk7IC8qIGFmdGVyIHJlbGVhc2luZyB0aGUgbXV0ZXggKi8KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODU5LDE5ICsxODEwLDEyIEBACiAJCQkJICAgICAgImVycm9yICVkXG4iLCAtcmV0KTsKIAkJCWdvdG8gYmFpbDsKIAkJfQotCQlyZXQgPSBpcGF0aF9kaWFnX2luaXQoKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWlwYXRoX2Rldl9lcnIoZGQsICJVbmFibGUgdG8gc2V0IHVwIGRpYWcgc3VwcG9ydDogIgotCQkJCSAgICAgICJlcnJvciAlZFxuIiwgLXJldCk7Ci0JCQlnb3RvIGJhaWxfc21hOwotCQl9Ci0KIAkJcmV0ID0gaW5pdF9jZGV2KDAsICJpcGF0aCIsICZpcGF0aF9maWxlX29wcywgJndpbGRjYXJkX2NkZXYsCiAJCQkJJndpbGRjYXJkX2NsYXNzX2Rldik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGQgbm90IGNyZWF0ZSB3aWxkY2FyZCAiCiAJCQkJICAgICAgIm1pbm9yOiBlcnJvciAlZFxuIiwgLXJldCk7Ci0JCQlnb3RvIGJhaWxfZGlhZzsKKwkJCWdvdG8gYmFpbF9zbWE7CiAJCX0KIAogCQlhdG9taWNfc2V0KCZ1c2VyX3NldHVwLCAxKTsKQEAgLTE4ODAsMzEgKzE4MjQsMjggQEAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJpcGF0aCVkIiwgZGQtPmlwYXRoX3VuaXQpOwogCiAJcmV0ID0gaW5pdF9jZGV2KGRkLT5pcGF0aF91bml0ICsgMSwgbmFtZSwgJmlwYXRoX2ZpbGVfb3BzLAotCQkJJmRkLT5jZGV2LCAmZGQtPmNsYXNzX2Rldik7CisJCQkmZGQtPnVzZXJfY2RldiwgJmRkLT51c2VyX2NsYXNzX2Rldik7CiAJaWYgKHJldCA8IDApCiAJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZCBub3QgY3JlYXRlIHVzZXIgbWlub3IgJWQsICVzXG4iLAogCQkJICAgICAgZGQtPmlwYXRoX3VuaXQgKyAxLCBuYW1lKTsKIAogCWdvdG8gYmFpbDsKIAotYmFpbF9kaWFnOgotCWlwYXRoX2RpYWdfY2xlYW51cCgpOwogYmFpbF9zbWE6CiAJdXNlcl9jbGVhbnVwKCk7CiBiYWlsOgogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgaXBhdGhfdXNlcl9kZWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQordm9pZCBpcGF0aF91c2VyX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JY2xlYW51cF9jZGV2KCZkZC0+Y2RldiwgJmRkLT5jbGFzc19kZXYpOworCWNsZWFudXBfY2RldigmZGQtPnVzZXJfY2RldiwgJmRkLT51c2VyX2NsYXNzX2Rldik7CiAKIAlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnVzZXJfY291bnQpID09IDApIHsKIAkJaWYgKGF0b21pY19yZWFkKCZ1c2VyX3NldHVwKSA9PSAwKQogCQkJZ290byBiYWlsOwogCiAJCWNsZWFudXBfY2Rldigmd2lsZGNhcmRfY2RldiwgJndpbGRjYXJkX2NsYXNzX2Rldik7Ci0JCWlwYXRoX2RpYWdfY2xlYW51cCgpOwogCQl1c2VyX2NsZWFudXAoKTsKIAogCQlhdG9taWNfc2V0KCZ1c2VyX3NldHVwLCAwKTsKQEAgLTE5MTIsMyArMTg1Myw0IEBACiBiYWlsOgogCXJldHVybjsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYwppbmRleCA2M2RlMzA0Li4wOTM2ZDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTMxLDcgKzMyLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9odDQwMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMKaW5kZXggZmFjMGEyYi4uM2RiMDE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0xNTcyLDcgKzE1NzMsNiBAQAogCWRkLT5pcGF0aF9mX3Jlc2V0ID0gaXBhdGhfc2V0dXBfaHRfcmVzZXQ7CiAJZGQtPmlwYXRoX2ZfZ2V0X2JvYXJkbmFtZSA9IGlwYXRoX2h0X2JvYXJkbmFtZTsKIAlkZC0+aXBhdGhfZl9pbml0X2h3ZXJyb3JzID0gaXBhdGhfaHRfaW5pdF9od2Vycm9yczsKLQlkZC0+aXBhdGhfZl9pbml0X2h3ZXJyb3JzID0gaXBhdGhfaHRfaW5pdF9od2Vycm9yczsKIAlkZC0+aXBhdGhfZl9lYXJseV9pbml0ID0gaXBhdGhfaHRfZWFybHlfaW5pdDsKIAlkZC0+aXBhdGhfZl9oYW5kbGVfaHdlcnJvcnMgPSBpcGF0aF9odF9oYW5kbGVfaHdlcnJvcnM7CiAJZGQtPmlwYXRoX2ZfcXVpZXRfc2VyZGVzID0gaXBhdGhfaHRfcXVpZXRfc2VyZGVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCmluZGV4IGRjODMyNTAuLjQxNGNkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0zNSw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCi0jaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiAvKgogICogbWluIGJ1ZmZlcnMgd2Ugd2FudCB0byBoYXZlIHBlciBwb3J0LCBhZnRlciBkcml2ZXIKQEAgLTExNCw2ICsxMTUsNyBAQAogCQkJCSAgICAgICJlYWdlciBUSUQgJXVcbiIsIGUpOwogCQkJd2hpbGUgKGUgIT0gMCkKIAkJCQlkZXZfa2ZyZWVfc2tiKHNrYnNbLS1lXSk7CisJCQl2ZnJlZShza2JzKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGJhaWw7CiAJCX0KQEAgLTI3NSw3ICsyNzcsNyBAQAogCXBkLT5wb3J0X3BvcnQgPSAwOwogCXBkLT5wb3J0X2NudCA9IDE7CiAJLyogVGhlIHBvcnQgMCBwa2V5IHRhYmxlIGlzIHVzZWQgYnkgdGhlIGxheWVyIGludGVyZmFjZS4gKi8KLQlwZC0+cG9ydF9wa2V5c1swXSA9IElQU19ERUZBVUxUX1BfS0VZOworCXBkLT5wb3J0X3BrZXlzWzBdID0gSVBBVEhfREVGQVVMVF9QX0tFWTsKIAlkZC0+aXBhdGhfcmN2dGlkY250ID0KIAkJaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2dGlkY250KTsKIAlkZC0+aXBhdGhfcmN2dGlkYmFzZSA9CkBAIC00MDksMTcgKzQxMSw4IEBACiAJLyogYW5kIGl0cyBsZW5ndGggKi8KIAlkZC0+aXBhdGhfZnJlZXplbGVuID0gTDFfQ0FDSEVfQllURVMgLSBzaXplb2YoZGQtPmlwYXRoX3N0YXR1c3BbMF0pOwogCi0JaWYgKGRkLT5pcGF0aF91bml0ICogNjQgPiAoSVBBVEhfUE9SVDBfUkNWSERSVEFJTF9TSVpFIC0gNjQpKSB7Ci0JCWlwYXRoX2Rldl9lcnIoZGQsICJ1bml0ICV1IHRvbyBsYXJnZSBmb3IgcG9ydCAwICIKLQkJCSAgICAgICJyY3ZoZHJ0YWlsIGJ1ZmZlciBzaXplXG4iLCBkZC0+aXBhdGhfdW5pdCk7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JfQotCWVsc2UKLQkJcmV0ID0gMDsKKwlyZXQgPSAwOwogCi0JLyogc28gd2UgY2FuIGdldCBjdXJyZW50IHRhaWwgaW4gaXBhdGhfa3JlY2VpdmUoKSwgcGVyIGNoaXAgKi8KLQlkZC0+aXBhdGhfaGRycXRhaWxwdHIgPSAmaXBhdGhfcG9ydDBfcmN2aGRydGFpbFsKLQkJZGQtPmlwYXRoX3VuaXQgKiAoNjQgLyBzaXplb2YoKmlwYXRoX3BvcnQwX3JjdmhkcnRhaWwpKV07CiBkb25lOgogCXJldHVybiByZXQ7CiB9CkBAIC02NTIsOCArNjQ1LDkgQEAKIHsKIAlpbnQgcmV0ID0gMCwgaTsKIAl1MzIgdmFsMzIsIGtwaW9idWZzOwotCXU2NCB2YWwsIGF0bXA7CisJdTY0IHZhbDsKIAlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gTlVMTDsgLyoga2VlcCBnY2M0IGhhcHB5ICovCisJZ2ZwX3QgZ2ZwX2ZsYWdzID0gR0ZQX1VTRVIgfCBfX0dGUF9DT01QOwogCiAJcmV0ID0gaW5pdF9ob3VzZWtlZXBpbmcoZGQsICZwZCwgcmVpbml0KTsKIAlpZiAocmV0KQpAQCAtNzc1LDI0ICs3NjksNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JdmFsID0gaXBhdGhfcG9ydDBfcmN2aGRydGFpbF9kbWEgKyBkZC0+aXBhdGhfdW5pdCAqIDY0OwotCi0JLyogdmVyaWZ5IHRoYXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCB3YXMgbWV0ICovCi0JaXBhdGhfd3JpdGVfa3JlZ19wb3J0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmhkcnRhaWxhZGRyLAotCQkJICAgICAgMCwgdmFsKTsKLQlhdG1wID0gaXBhdGhfcmVhZF9rcmVnNjRfcG9ydCgKLQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2aGRydGFpbGFkZHIsIDApOwotCWlmICh2YWwgIT0gYXRtcCkgewotCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ2F0YXN0cm9waGljIHNvZnR3YXJlIGVycm9yLCAiCi0JCQkgICAgICAiUmN2SGRyVGFpbEFkZHIwIHdyaXR0ZW4gYXMgJWxseCwgIgotCQkJICAgICAgInJlYWQgYmFjayBhcyAlbGx4IGZyb20gJXhcbiIsCi0JCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwsCi0JCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBhdG1wLAotCQkJICAgICAgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZoZHJ0YWlsYWRkcik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmJ0aHFwLCBJUEFUSF9LRF9RUCk7CiAKIAkvKgpAQCAtODM2LDI1ICs4MTIsNDUgQEAKIAkvKiBjbGVhciBhbnkgaW50ZXJydXBzIHVwIHRvIHRoaXMgcG9pbnQgKGludHMgc3RpbGwgbm90IGVuYWJsZWQpICovCiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgLTFMTCk7CiAKLQlpcGF0aF9zdGF0cy5zcHNfbGlkW2RkLT5pcGF0aF91bml0XSA9IGRkLT5pcGF0aF9saWQ7Ci0KIAkvKgogCSAqIFNldCB1cCB0aGUgcG9ydCAwIChrZXJuZWwpIHJjdmhkciBxIGFuZCBlZ3IgVElEcy4gIElmIGRvaW5nCiAJICogcmUtaW5pdCwgdGhlIHNpbXBsZXN0IHdheSB0byBoYW5kbGUgdGhpcyBpcyB0byBmcmVlCiAJICogZXhpc3RpbmcsIGFuZCByZS1hbGxvY2F0ZS4KIAkgKi8KLQlpZiAocmVpbml0KQotCQlpcGF0aF9mcmVlX3BkZGF0YShkZCwgMCwgMCk7CisJaWYgKHJlaW5pdCkgeworCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkWzBdOworCQlkZC0+aXBhdGhfcGRbMF0gPSBOVUxMOworCQlpcGF0aF9mcmVlX3BkZGF0YShkZCwgcGQpOworCX0KIAlkZC0+aXBhdGhfZl90aWR0ZW1wbGF0ZShkZCk7CiAJcmV0ID0gaXBhdGhfY3JlYXRlX3JjdmhkcnEoZGQsIHBkKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQlkZC0+aXBhdGhfaGRycXRhaWxwdHIgPQorCQkJKHZvbGF0aWxlIF9fbGU2NCAqKXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOwogCQlyZXQgPSBjcmVhdGVfcG9ydDBfZWdyKGRkKTsKKwl9CiAJaWYgKHJldCkKIAkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0IDAgKGtlcm5lbCkgIgogCQkJICAgICAgInJjdmhkcnEgYW5kL29yIGVnciBidWZzXG4iKTsKIAllbHNlCiAJCWVuYWJsZV9jaGlwKGRkLCBwZCwgcmVpbml0KTsKIAorCisJaWYgKCFyZXQgJiYgIXJlaW5pdCkgeworCSAgICAvKiB1c2VkIHdoZW4gd2UgY2xvc2UgYSBwb3J0LCBmb3IgRE1BIGFscmVhZHkgaW4gZmxpZ2h0IGF0IGNsb3NlICovCisJCWRkLT5pcGF0aF9kdW1teV9oZHJxID0gZG1hX2FsbG9jX2NvaGVyZW50KAorCQkJJmRkLT5wY2lkZXYtPmRldiwgcGQtPnBvcnRfcmN2aGRycV9zaXplLAorCQkJJmRkLT5pcGF0aF9kdW1teV9oZHJxX3BoeXMsCisJCQlnZnBfZmxhZ3MpOworCQlpZiAoIWRkLT5pcGF0aF9kdW1teV9oZHJxICkgeworCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCQkiQ291bGRuJ3QgYWxsb2NhdGUgMHglbHggYnl0ZXMgZm9yIGR1bW15IGhkcnFcbiIsCisJCQkJcGQtPnBvcnRfcmN2aGRycV9zaXplKTsKKwkJCS8qIGZhbGxiYWNrIHRvIGp1c3QgMCdpbmcgKi8KKwkJCWRkLT5pcGF0aF9kdW1teV9oZHJxX3BoeXMgPSAwVUw7CisJCX0KKwl9CisKIAkvKgogCSAqIGNhdXNlIHJldHJpZ2dlciBvZiBwZW5kaW5nIGludGVycnVwdHMgaWdub3JlZCBkdXJpbmcgaW5pdCwKIAkgKiBldmVuIGlmIHdlIGhhZCBlcnJvcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCmluZGV4IDNlNzJhMWYuLjI4MGU3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTMzLDkgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKLSNpbmNsdWRlICJpcHNfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKyNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAorLyogVGhlc2UgYXJlIGFsbCByY3YtcmVsYXRlZCBlcnJvcnMgd2hpY2ggd2Ugd2FudCB0byBjb3VudCBmb3Igc3RhdHMgKi8KICNkZWZpbmUgRV9TVU1fUEtURVJSUyBcCiAJKElORklOSVBBVEhfRV9SSERSTEVOIHwgSU5GSU5JUEFUSF9FX1JCQURUSUQgfCBcCiAJIElORklOSVBBVEhfRV9SQkFEVkVSU0lPTiB8IElORklOSVBBVEhfRV9SSERSIHwgXApAQCAtNDQsNiArNDYsNyBAQAogCSBJTkZJTklQQVRIX0VfUkZPUk1BVEVSUiB8IElORklOSVBBVEhfRV9SVU5TVVBWTCB8IFwKIAkgSU5GSU5JUEFUSF9FX1JVTkVYUENIQVIgfCBJTkZJTklQQVRIX0VfUkVCUCkKIAorLyogVGhlc2UgYXJlIGFsbCBzZW5kLXJlbGF0ZWQgZXJyb3JzIHdoaWNoIHdlIHdhbnQgdG8gY291bnQgZm9yIHN0YXRzICovCiAjZGVmaW5lIEVfU1VNX0VSUlMgXAogCShJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCB8IElORklOSVBBVEhfRV9TVU5FWFBFUlJQS1ROVU0gfCBcCiAJIElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgfCBJTkZJTklQQVRIX0VfU0RST1BQRURTTVBQS1QgfCBcCkBAIC01MSw2ICs1NCwxOCBAQAogCSBJTkZJTklQQVRIX0VfU01JTlBLVExFTiB8IElORklOSVBBVEhfRV9TUEtUTEVOIHwgXAogCSBJTkZJTklQQVRIX0VfSU5WQUxJREFERFIpCiAKKy8qCisgKiB0aGVzZSBhcmUgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gdGhlIGxpbmsgY2hhbmdlcyBzdGF0ZSB3aGlsZQorICogYSBwYWNrZXQgaXMgYmVpbmcgc2VudCBvciByZWNlaXZlZC4gIFRoaXMgZG9lc24ndCBjb3ZlciB0aGluZ3MKKyAqIGxpa2UgRUJQIG9yIFZDUkMgdGhhdCBjYW4gYmUgdGhlIHJlc3VsdCBvZiBhIHNlbmRpbmcgaGF2aW5nIHRoZQorICogbGluayBjaGFuZ2Ugc3RhdGUsIHNvIHdlIHJlY2VpdmUgYSAia25vd24gYmFkIiBwYWNrZXQuCisgKi8KKyNkZWZpbmUgRV9TVU1fTElOS19QS1RFUlJTIFwKKwkoSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCB8IElORklOSVBBVEhfRV9TRFJPUFBFRFNNUFBLVCB8IFwKKwkgSU5GSU5JUEFUSF9FX1NNSU5QS1RMRU4gfCBJTkZJTklQQVRIX0VfU1BLVExFTiB8IFwKKwkgSU5GSU5JUEFUSF9FX1JTSE9SVFBLVExFTiB8IElORklOSVBBVEhfRV9STUlOUEtUTEVOIHwgXAorCSBJTkZJTklQQVRIX0VfUlVORVhQQ0hBUikKKwogc3RhdGljIHU2NCBoYW5kbGVfZV9zdW1fZXJycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGlwYXRoX2Vycl90IGVycnMpCiB7CiAJdW5zaWduZWQgbG9uZyBzYnVmWzRdOwpAQCAtMTAwLDkgKzExNSw3IEBACiAJCWlmIChpcGF0aF9kZWJ1ZyAmIF9fSVBBVEhfUEtUREJHKQogCQkJcHJpbnRrKCJcbiIpOwogCX0KLQlpZiAoKGVycnMgJiAoSU5GSU5JUEFUSF9FX1NEUk9QUEVEREFUQVBLVCB8Ci0JCSAgICAgSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUIHwKLQkJICAgICBJTkZJTklQQVRIX0VfU01JTlBLVExFTikpICYmCisJaWYgKChlcnJzICYgRV9TVU1fTElOS19QS1RFUlJTKSAmJgogCSAgICAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpKSB7CiAJCS8qCiAJCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVuIFNNQSBpcyB0cnlpbmcgdG8gYnJpbmcgdGhlIGxpbmsKQEAgLTExMSwxMSArMTI0LDkgQEAKIAkJICogdmFsaWQuICBXZSBkb24ndCB3YW50IHRvIGNvbmZ1c2UgcGVvcGxlLCBzbyB3ZSBqdXN0CiAJCSAqIGRvbid0IHByaW50IHRoZW0sIGV4Y2VwdCBhdCBkZWJ1ZwogCQkgKi8KLQkJaXBhdGhfZGJnKCJJZ25vcmluZyBwa3RzZW5kIGVycm9ycyAlbGx4LCBiZWNhdXNlIG5vdCAiCi0JCQkgICJ5ZXQgYWN0aXZlXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBlcnJzKTsKLQkJaWdub3JlX3RoaXNfdGltZSA9IElORklOSVBBVEhfRV9TRFJPUFBFRERBVEFQS1QgfAotCQkJSU5GSU5JUEFUSF9FX1NEUk9QUEVEU01QUEtUIHwKLQkJCUlORklOSVBBVEhfRV9TTUlOUEtUTEVOOworCQlpcGF0aF9kYmcoIklnbm9yaW5nIHBhY2tldCBlcnJvcnMgJWxseCwgYmVjYXVzZSBsaW5rIG5vdCAiCisJCQkgICJBQ1RJVkVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGVycnMpOworCQlpZ25vcmVfdGhpc190aW1lID0gZXJycyAmIEVfU1VNX0xJTktfUEtURVJSUzsKIAl9CiAKIAlyZXR1cm4gaWdub3JlX3RoaXNfdGltZTsKQEAgLTE1Niw3ICsxNjcsMjkgQEAKIAkgKi8KIAl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNzdGF0dXMpOwogCWxzdGF0ZSA9IHZhbCAmIElQQVRIX0lCU1RBVEVfTUFTSzsKLQlpZiAobHN0YXRlID09IElQQVRIX0lCU1RBVEVfSU5JVCB8fCBsc3RhdGUgPT0gSVBBVEhfSUJTVEFURV9BUk0gfHwKKworCS8qCisJICogdGhpcyBpcyBjb25mdXNpbmcgZW5vdWdoIHdoZW4gaXQgaGFwcGVucyB0aGF0IEkgd2FudCB0byBhbHdheXMgcHV0IGl0CisJICogb24gdGhlIGNvbnNvbGUgYW5kIGluIHRoZSBsb2dzLiAgSWYgaXQgd2FzIGEgcmVxdWVzdGVkIHN0YXRlIGNoYW5nZSwKKwkgKiB3ZSdsbCBoYXZlIGFscmVhZHkgY2xlYXJlZCB0aGUgZmxhZ3MsIHNvIHdlIHdvbid0IHByaW50IHRoaXMgd2FybmluZworCSAqLworCWlmICgobHN0YXRlICE9IElQQVRIX0lCU1RBVEVfQVJNICYmIGxzdGF0ZSAhPSBJUEFUSF9JQlNUQVRFX0FDVElWRSkKKwkJJiYgKGRkLT5pcGF0aF9mbGFncyAmIChJUEFUSF9MSU5LQVJNRUQgfCBJUEFUSF9MSU5LQUNUSVZFKSkpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkxpbmsgc3RhdGUgY2hhbmdlZCBmcm9tICVzIHRvICVzXG4iLAorCQkJCSAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSA/ICJBUk0iIDogIkFDVElWRSIsCisJCQkJIGliX2xpbmtzdGF0ZShsc3RhdGUpKTsKKwkJLyoKKwkJICogRmx1c2ggYWxsIHF1ZXVlZCBzZW5kcyB3aGVuIGxpbmsgd2VudCB0byBET1dOIG9yIElOSVQsCisJCSAqIHRvIGJlIHN1cmUgdGhhdCB0aGV5IGRvbid0IGJsb2NrIFNNQSBhbmQgb3RoZXIgTUFEIHBhY2tldHMKKwkJICovCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCisJCQkJIElORklOSVBBVEhfU19BQk9SVCk7CisJCWlwYXRoX2Rpc2FybV9waW9idWZzKGRkLCBkZC0+aXBhdGhfbGFzdHBvcnRfcGlvYnVmLAorCQkJCQkJCSh1bnNpZ25lZCkoZGQtPmlwYXRoX3Bpb2JjbnQyayArCisJCQkJCWRkLT5pcGF0aF9waW9iY250NGspIC0KKwkJCQkJZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1Zik7CisJfQorCWVsc2UgaWYgKGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0lOSVQgfHwgbHN0YXRlID09IElQQVRIX0lCU1RBVEVfQVJNIHx8CiAJICAgIGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0FDVElWRSkgewogCQkvKgogCQkgKiBvbmx5IHByaW50IGF0IFNNQSBpZiB0aGVyZSBpcyBhIGNoYW5nZSwgZGVidWcgaWYgbm90CkBAIC0yMjksNiArMjYyLDcgQEAKIAkJCQkgICAgIHwgSVBBVEhfTElOS0FDVElWRSB8CiAJCQkJICAgICBJUEFUSF9MSU5LQVJNRUQpOwogCQkqZGQtPmlwYXRoX3N0YXR1c3AgJj0gfklQQVRIX1NUQVRVU19JQl9SRUFEWTsKKwkJZGQtPmlwYXRoX2xsaV9jb3VudGVyID0gMDsKIAkJaWYgKCFub3ByaW50KSB7CiAJCQlpZiAoKChkZC0+aXBhdGhfbGFzdGliY3N0YXQgPj4KIAkJCSAgICAgIElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpICYKQEAgLTM1MCw3ICszODQsNyBAQAogCXJldHVybiBzdXBwX21zZ3M7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9lcnJvcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9lcnJfdCBlcnJzKQorc3RhdGljIGludCBoYW5kbGVfZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaXBhdGhfZXJyX3QgZXJycykKIHsKIAljaGFyIG1zZ1s1MTJdOwogCXU2NCBpZ25vcmVfdGhpc190aW1lID0gMDsKQEAgLTM3OSw2ICs0MTMsMTkgQEAKIAogCWlmIChlcnJzICYgRV9TVU1fRVJSUykKIAkJaWdub3JlX3RoaXNfdGltZSA9IGhhbmRsZV9lX3N1bV9lcnJzKGRkLCBlcnJzKTsKKwllbHNlIGlmICgoZXJycyAmIEVfU1VNX0xJTktfUEtURVJSUykgJiYKKwkgICAgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSkgeworCQkvKgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBTTUEgaXMgdHJ5aW5nIHRvIGJyaW5nIHRoZSBsaW5rCisJCSAqIHVwLCBidXQgdGhlIElCIGxpbmsgY2hhbmdlcyBzdGF0ZSBhdCB0aGUgIndyb25nIiB0aW1lLgorCQkgKiBUaGUgSUIgbG9naWMgdGhlbiBjb21wbGFpbnMgdGhhdCB0aGUgcGFja2V0IGlzbid0CisJCSAqIHZhbGlkLiAgV2UgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHBlb3BsZSwgc28gd2UganVzdAorCQkgKiBkb24ndCBwcmludCB0aGVtLCBleGNlcHQgYXQgZGVidWcKKwkJICovCisJCWlwYXRoX2RiZygiSWdub3JpbmcgcGFja2V0IGVycm9ycyAlbGx4LCBiZWNhdXNlIGxpbmsgbm90ICIKKwkJCSAgIkFDVElWRVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZXJycyk7CisJCWlnbm9yZV90aGlzX3RpbWUgPSBlcnJzICYgRV9TVU1fTElOS19QS1RFUlJTOworCX0KIAogCWlmIChzdXBwX21zZ3MgPT0gMjUwMDAwKSB7CiAJCS8qCkBAIC0zOTcsNyArNDQ0LDcgQEAKIAkJaWYgKChkZC0+aXBhdGhfbWFza2VkZXJycyAmIH5kZC0+aXBhdGhfaWdub3JlZGVycnMpICYKIAkJICAgIH4oSU5GSU5JUEFUSF9FX1JSQ1ZFR1JGVUxMIHwgSU5GSU5JUEFUSF9FX1JSQ1ZIRFJGVUxMKSkKIAkJCWlwYXRoX2Rldl9lcnIoZGQsICJEaXNhYmxpbmcgZXJyb3IocykgJWxseCBiZWNhdXNlICIKLQkJCQkgICAgICAib2NjdXJpbmcgdG9vIGZyZXF1ZW50bHkgKCVzKVxuIiwKKwkJCQkgICAgICAib2NjdXJyaW5nIHRvbyBmcmVxdWVudGx5ICglcylcbiIsCiAJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKIAkJCQkgICAgICAoZGQtPmlwYXRoX21hc2tlZGVycnMgJgogCQkJCSAgICAgICB+ZGQtPmlwYXRoX2lnbm9yZWRlcnJzKSwgbXNnKTsKQEAgLTQzNCw3ICs0ODEsNyBAQAogCQkJICBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKTsKIAl9CiAJaWYgKCFlcnJzKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJaWYgKCFub3ByaW50KQogCQkvKgpAQCAtNDkzLDEwICs1NDAsMTAgQEAKIAkJCQljb250aW51ZTsKIAkJCWlmIChoZCA9PSAodGwgKyAxKSB8fAogCQkJICAgICghaGQgJiYgdGwgPT0gZGQtPmlwYXRoX2hkcnFsYXN0KSkgewotCQkJCWRkLT5pcGF0aF9sYXN0cmN2aGRycXRhaWxzW2ldID0gdGw7Ci0JCQkJcGQtPnBvcnRfaGRycWZ1bGwrKzsKIAkJCQlpZiAoaSA9PSAwKQogCQkJCQljaGtlcnJwa3RzID0gMTsKKwkJCQlkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlsc1tpXSA9IHRsOworCQkJCXBkLT5wb3J0X2hkcnFmdWxsKys7CiAJCQl9CiAJCX0KIAl9CkBAIC01NTgsOSArNjA1LDcgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpcGF0aF9zbWFfc3RhdGVfd2FpdCk7CiAJfQogCi0JaWYgKGNoa2VycnBrdHMpCi0JCS8qIHByb2Nlc3MgcG9zc2libGUgZXJyb3IgcGFja2V0cyBpbiBoZHJxICovCi0JCWlwYXRoX2tyZWNlaXZlKGRkKTsKKwlyZXR1cm4gY2hrZXJycGt0czsKIH0KIAogLyogdGhpcyBpcyBzZXBhcmF0ZSB0byBhbGxvdyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBvZiBpcGF0aF9pbnRyKCkgKi8KQEAgLTY3OCw3ICs3MjMsMTIgQEAKIAkJCSBkZC0+aXBhdGhfc2VuZGN0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGlzdGF0KQorLyoKKyAqIEhhbmRsZSByZWNlaXZlIGludGVycnVwdHMgZm9yIHVzZXIgcG9ydHM7IHRoaXMgbWVhbnMgYSB1c2VyCisgKiBwcm9jZXNzIHdhcyB3YWl0aW5nIGZvciBhIHBhY2tldCB0byBhcnJpdmUsIGFuZCBkaWRuJ3Qgd2FudAorICogdG8gcG9sbAorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfdXJjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBpc3RhdCkKIHsKIAl1NjQgcG9ydHI7CiAJaW50IGk7CkBAIC02ODgsMjIgKzczOCwxNyBAQAogCQkgaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2spCiAJCXwgKChpc3RhdCA+PiBJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUKSAmCiAJCSAgIGluZmluaXBhdGhfaV9yY3Z1cmdfbWFzayk7Ci0JZm9yIChpID0gMDsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8IGRkLT5pcGF0aF9jZmdwb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07Ci0JCWlmIChwb3J0ciAmICgxIDw8IGkpICYmIHBkICYmCi0JCSAgICBwZC0+cG9ydF9jbnQpIHsKLQkJCWlmIChpID09IDApCi0JCQkJaXBhdGhfa3JlY2VpdmUoZGQpOwotCQkJZWxzZSBpZiAodGVzdF9iaXQoSVBBVEhfUE9SVF9XQUlUSU5HX1JDViwKLQkJCQkJICAmcGQtPnBvcnRfZmxhZykpIHsKLQkJCQlpbnQgcmNiaXQ7Ci0JCQkJY2xlYXJfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsCi0JCQkJCSAgJnBkLT5wb3J0X2ZsYWcpOwotCQkJCXJjYml0ID0gaSArIElORklOSVBBVEhfUl9JTlRSQVZBSUxfU0hJRlQ7Ci0JCQkJY2xlYXJfYml0KDFVTCA8PCByY2JpdCwgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkLT5wb3J0X3dhaXQpOwotCQkJCXJjdmRpbnQgPSAxOwotCQkJfQorCQlpZiAocG9ydHIgJiAoMSA8PCBpKSAmJiBwZCAmJiBwZC0+cG9ydF9jbnQgJiYKKwkJCXRlc3RfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsICZwZC0+cG9ydF9mbGFnKSkgeworCQkJaW50IHJjYml0OworCQkJY2xlYXJfYml0KElQQVRIX1BPUlRfV0FJVElOR19SQ1YsCisJCQkJICAmcGQtPnBvcnRfZmxhZyk7CisJCQlyY2JpdCA9IGkgKyBJTkZJTklQQVRIX1JfSU5UUkFWQUlMX1NISUZUOworCQkJY2xlYXJfYml0KDFVTCA8PCByY2JpdCwgJmRkLT5pcGF0aF9yY3ZjdHJsKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGQtPnBvcnRfd2FpdCk7CisJCQlyY3ZkaW50ID0gMTsKIAkJfQogCX0KIAlpZiAocmN2ZGludCkgewpAQCAtNzE5LDE2ICs3NjQsMTkgQEAKIGlycXJldHVybl90IGlwYXRoX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGF0YTsKLQl1MzIgaXN0YXQ7CisJdTMyIGlzdGF0LCBjaGswcmN2ID0gMDsKIAlpcGF0aF9lcnJfdCBlc3RhdCA9IDA7Ci0Jc3RhdGljIHVuc2lnbmVkIHVuZXhwZWN0ZWQgPSAwOwogCWlycXJldHVybl90IHJldDsKKwl1MzIgb2xkaGVhZCwgY3VydGFpbDsKKwlzdGF0aWMgdW5zaWduZWQgdW5leHBlY3RlZCA9IDA7CisJc3RhdGljIGNvbnN0IHUzMiBwb3J0MHJiaXRzID0gKDFVPDxJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpIHwKKwkJICgxVTw8SU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCk7CiAKLQlpZighKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpKSB7Ci0JCS8qIHRoaXMgaXMgbW9zdGx5IHNvIHdlIGRvbid0IHRyeSB0byB0b3VjaCB0aGUgY2hpcCB3aGlsZQotCQkgKiBpdCBpcyBiZWluZyByZXNldCAqLworCWlwYXRoX3N0YXRzLnNwc19pbnRzKys7CisKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QUkVTRU5UKSkgewogCQkvKgotCQkgKiBUaGlzIHJldHVybiB2YWx1ZSBpcyBwZXJoYXBzIG9kZCwgYnV0IHdlIGRvIG5vdCB3YW50IHRoZQorCQkgKiBUaGlzIHJldHVybiB2YWx1ZSBpcyBub3QgZ3JlYXQsIGJ1dCB3ZSBkbyBub3Qgd2FudCB0aGUKIAkJICogaW50ZXJydXB0IGNvcmUgY29kZSB0byByZW1vdmUgb3VyIGludGVycnVwdCBoYW5kbGVyCiAJCSAqIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZWFyIHRvIGJlIGhhbmRsaW5nIGFuIGludGVycnVwdAogCQkgKiBkdXJpbmcgYSBjaGlwIHJlc2V0LgpAQCAtNzM2LDIxICs3ODQsNiBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JaXN0YXQgPSBpcGF0aF9yZWFkX2tyZWczMihkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRzdGF0dXMpOwotCWlmICh1bmxpa2VseSghaXN0YXQpKSB7Ci0JCWlwYXRoX3N0YXRzLnNwc19udWxsaW50cisrOwotCQlyZXQgPSBJUlFfTk9ORTsgLyogbm90IG91ciBpbnRlcnJ1cHQsIG9yIGFscmVhZHkgaGFuZGxlZCAqLwotCQlnb3RvIGJhaWw7Ci0JfQotCWlmICh1bmxpa2VseShpc3RhdCA9PSAtMSkpIHsKLQkJaXBhdGhfYmFkX3JlZ3JlYWQoZGQpOwotCQkvKiBkb24ndCBrbm93IGlmIGl0IHdhcyBvdXIgaW50ZXJydXB0IG9yIG5vdCAqLwotCQlyZXQgPSBJUlFfTk9ORTsKLQkJZ290byBiYWlsOwotCX0KLQotCWlwYXRoX3N0YXRzLnNwc19pbnRzKys7Ci0KIAkvKgogCSAqIHRoaXMgbmVlZHMgdG8gYmUgZmxhZ3MmaW5pdHRlZCwgbm90IHN0YXR1c3AsIHNvIHdlIGtlZXAKIAkgKiB0YWtpbmcgaW50ZXJydXB0cyBldmVuIGFmdGVyIGxpbmsgZ29lcyBkb3duLCBldGMuCkBAIC03NjMsMTcgKzc5Niw2MiBAQAogCQlyZXQgPSBJUlFfTk9ORTsKIAkJZ290byBiYWlsOwogCX0KKworCS8qCisJICogV2UgdHJ5IHRvIGF2b2lkIHJlYWRpbmcgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsIHNpbmNlCisJICogdGhhdCdzIGEgUElPIHJlYWQsIGFuZCBzdGFsbHMgdGhlIHByb2Nlc3NvciBmb3IgdXAgdG8gYWJvdXQKKwkgKiB+MC4yNSB1c2VjLiBUaGUgaWRlYSBpcyB0aGF0IGlmIHdlIHByb2Nlc3NlZCBhIHBvcnQwIHBhY2tldCwKKwkgKiB3ZSBibGluZGx5IGNsZWFyIHRoZSAgcG9ydCAwIHJlY2VpdmUgaW50ZXJydXB0IGJpdHMsIGFuZCBub3RoaW5nCisJICogZWxzZSwgdGhlbiByZXR1cm4uICBJZiBvdGhlciBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLCB0aGUgY2hpcAorCSAqIHdpbGwgcmUtaW50ZXJydXB0IHVzIGFzIHNvb24gYXMgd2Ugd3JpdGUgdGhlIGludGNsZWFyIHJlZ2lzdGVyLgorCSAqIFdlIHRoZW4gd29uJ3QgcHJvY2VzcyBhbnkgbW9yZSBrZXJuZWwgcGFja2V0cyAoaWYgbm90IHRoZSAybmQKKwkgKiB0aW1lLCB0aGVuIHRoZSAzcmQgb3IgNHRoKSBhbmQgd2UnbGwgdGhlbiBoYW5kbGUgdGhlIG90aGVyCisJICogaW50ZXJydXB0cy4gICBXZSBjbGVhciB0aGUgaW50ZXJydXB0cyBmaXJzdCBzbyB0aGF0IHdlIGRvbid0CisJICogbG9zZSBpbnRyIGZvciBsYXRlciBwYWNrZXRzIHRoYXQgYXJyaXZlIHdoaWxlIHdlIGFyZSBwcm9jZXNzaW5nLgorCSAqLworCW9sZGhlYWQgPSBkZC0+aXBhdGhfcG9ydDBoZWFkOworCWN1cnRhaWwgPSAodTMyKWxlNjRfdG9fY3B1KCpkZC0+aXBhdGhfaGRycXRhaWxwdHIpOworCWlmIChvbGRoZWFkICE9IGN1cnRhaWwpIHsKKwkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgeworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX2NsZWFyLAorCQkJCQkgKHU2NCkgKDEgPDwgMikpOworCQkJaXN0YXQgPSBwb3J0MHJiaXRzIHwgSU5GSU5JUEFUSF9JX0dQSU87CisJCX0KKwkJZWxzZQorCQkJaXN0YXQgPSBwb3J0MHJiaXRzOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2ludGNsZWFyLCBpc3RhdCk7CisJCWlwYXRoX2tyZWNlaXZlKGRkKTsKKwkJaWYgKG9sZGhlYWQgIT0gZGQtPmlwYXRoX3BvcnQwaGVhZCkgeworCQkJaXBhdGhfc3RhdHMuc3BzX2Zhc3RyY3ZpbnQrKzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlzdGF0ID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaW50c3RhdHVzKTsKKworCWlmICh1bmxpa2VseSghaXN0YXQpKSB7CisJCWlwYXRoX3N0YXRzLnNwc19udWxsaW50cisrOworCQlyZXQgPSBJUlFfTk9ORTsgLyogbm90IG91ciBpbnRlcnJ1cHQsIG9yIGFscmVhZHkgaGFuZGxlZCAqLworCQlnb3RvIGJhaWw7CisJfQorCWlmICh1bmxpa2VseShpc3RhdCA9PSAtMSkpIHsKKwkJaXBhdGhfYmFkX3JlZ3JlYWQoZGQpOworCQkvKiBkb24ndCBrbm93IGlmIGl0IHdhcyBvdXIgaW50ZXJydXB0IG9yIG5vdCAqLworCQlyZXQgPSBJUlFfTk9ORTsKKwkJZ290byBiYWlsOworCX0KKwogCWlmICh1bmV4cGVjdGVkKQogCQl1bmV4cGVjdGVkID0gMDsKIAotCWlwYXRoX2NkYmcoVkVSQk9TRSwgImludHIgc3RhdD0weCV4XG4iLCBpc3RhdCk7Ci0KLQlpZiAoaXN0YXQgJiB+aW5maW5pcGF0aF9pX2JpdHNleHRhbnQpCisJaWYgKHVubGlrZWx5KGlzdGF0ICYgfmluZmluaXBhdGhfaV9iaXRzZXh0YW50KSkKIAkJaXBhdGhfZGV2X2VycihkZCwKIAkJCSAgICAgICJpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGludGVycnVwdHMgJXggc2V0XG4iLAogCQkJICAgICAgaXN0YXQgJiAodTMyKSB+IGluZmluaXBhdGhfaV9iaXRzZXh0YW50KTsKKwllbHNlCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImludHIgc3RhdD0weCV4XG4iLCBpc3RhdCk7CiAKLQlpZiAoaXN0YXQgJiBJTkZJTklQQVRIX0lfRVJST1IpIHsKKwlpZiAodW5saWtlbHkoaXN0YXQgJiBJTkZJTklQQVRIX0lfRVJST1IpKSB7CiAJCWlwYXRoX3N0YXRzLnNwc19lcnJpbnRzKys7CiAJCWVzdGF0ID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsCiAJCQkJCSAgZGQtPmlwYXRoX2tyZWdzLT5rcl9lcnJvcnN0YXR1cyk7CkBAIC03ODgsMTAgKzg2NiwxOCBAQAogCQkJaXBhdGhfZGV2X2VycihkZCwgIlJlYWQgb2YgZXJyb3Igc3RhdHVzIGZhaWxlZCAiCiAJCQkJICAgICAgIihhbGwgYml0cyBzZXQpOyBpZ25vcmluZ1xuIik7CiAJCWVsc2UKLQkJCWhhbmRsZV9lcnJvcnMoZGQsIGVzdGF0KTsKKwkJCWlmIChoYW5kbGVfZXJyb3JzKGRkLCBlc3RhdCkpCisJCQkJLyogZm9yY2UgY2FsbGluZyBpcGF0aF9rcmVjZWl2ZSgpICovCisJCQkJY2hrMHJjdiA9IDE7CiAJfQogCiAJaWYgKGlzdGF0ICYgSU5GSU5JUEFUSF9JX0dQSU8pIHsKKwkJLyoKKwkJICogUGFja2V0cyBhcmUgYXZhaWxhYmxlIGluIHRoZSBwb3J0IDAgcmN2IHF1ZXVlLgorCQkgKiBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhbGl6ZWQgdG8gY2hlY2sKKwkJICogSVBBVEhfR1BJT19JTlRSLCBhbmQgdGhlIHNwZWNpZmljIEdQSU8gYml0LCBpZgorCQkgKiBHUElPIGludGVycnVwdHMgYXJlIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuCisJCSAqLwogCQlpZiAodW5saWtlbHkoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9HUElPX0lOVFIpKSkgewogCQkJdTMyIGdwaW9zdGF0dXM7CiAJCQlncGlvc3RhdHVzID0gaXBhdGhfcmVhZF9rcmVnMzIoCkBAIC04MDQsMjcgKzg5MCwzOSBAQAogCQllbHNlIHsKIAkJCS8qIENsZWFyIEdQSU8gc3RhdHVzIGJpdCAyICovCiAJCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fY2xlYXIsCi0JCQkJCSAodTY0KSAoMSA8PCAyKSk7Ci0KLQkJCS8qCi0JCQkgKiBQYWNrZXRzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHBvcnQgMCByY3YgcXVldWUuCi0JCQkgKiBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhbGl6ZWQgdG8gY2hlY2sKLQkJCSAqIElQQVRIX0dQSU9fSU5UUiwgYW5kIHRoZSBzcGVjaWZpYyBHUElPIGJpdCwgaWYKLQkJCSAqIEdQSU8gaW50ZXJydXB0cyBhcmUgdXNlZCBmb3IgYW55dGhpbmcgZWxzZS4KLQkJCSAqLwotCQkJaXBhdGhfa3JlY2VpdmUoZGQpOworCQkJCQkodTY0KSAoMSA8PCAyKSk7CisJCQljaGswcmN2ID0gMTsKIAkJfQogCX0KKwljaGswcmN2IHw9IGlzdGF0ICYgcG9ydDByYml0czsKIAogCS8qCi0JICogY2xlYXIgdGhlIG9uZXMgd2Ugd2lsbCBkZWFsIHdpdGggb24gdGhpcyByb3VuZAotCSAqIFdlIGNsZWFyIGl0IGVhcmx5LCBtb3N0bHkgZm9yIHJlY2VpdmUgaW50ZXJydXB0cywgc28gd2UKLQkgKiBrbm93IHRoZSBjaGlwIHdpbGwgaGF2ZSBzZWVuIHRoaXMgYnkgdGhlIHRpbWUgd2UgcHJvY2VzcwotCSAqIHRoZSBxdWV1ZSwgYW5kIHdpbGwgcmUtaW50ZXJydXB0IGlmIG5lY2Vzc2FyeS4gIFRoZSBwcm9jZXNzb3IKLQkgKiBpdHNlbGYgd29uJ3QgdGFrZSB0aGUgaW50ZXJydXB0IGFnYWluIHVudGlsIHdlIHJldHVybi4KKwkgKiBDbGVhciB0aGUgaW50ZXJydXB0IGJpdHMgd2UgZm91bmQgc2V0LCB1bmxlc3MgdGhleSBhcmUgcmVjZWl2ZQorCSAqIHJlbGF0ZWQsIGluIHdoaWNoIGNhc2Ugd2UgYWxyZWFkeSBjbGVhcmVkIHRoZW0gYWJvdmUsIGFuZCBkb24ndAorCSAqIHdhbnQgdG8gY2xlYXIgdGhlbSBhZ2FpbiwgYmVjYXVzZSB3ZSBtaWdodCBsb3NlIGFuIGludGVycnVwdC4KKwkgKiBDbGVhciBpdCBlYXJseSwgc28gd2UgImtub3ciIGtub3cgdGhlIGNoaXAgd2lsbCBoYXZlIHNlZW4gdGhpcyBieQorCSAqIHRoZSB0aW1lIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLCBhbmQgd2lsbCByZS1pbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5LgorCSAqIFRoZSBwcm9jZXNzb3IgaXRzZWxmIHdvbid0IHRha2UgdGhlIGludGVycnVwdCBhZ2FpbiB1bnRpbCB3ZSByZXR1cm4uCiAJICovCiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pbnRjbGVhciwgaXN0YXQpOwogCisJLyoKKwkgKiBoYW5kbGUgcG9ydDAgcmVjZWl2ZSAgYmVmb3JlIGNoZWNraW5nIGZvciBwaW8gYnVmZmVycyBhdmFpbGFibGUsCisJICogc2luY2UgcmVjZWl2ZXMgY2FuIG92ZXJmbG93OyBwaW9idWYgd2FpdGVycyBjYW4gYWZmb3JkIGEgZmV3CisJICogZXh0cmEgY3ljbGVzLCBzaW5jZSB0aGV5IHdlcmUgd2FpdGluZyBhbnl3YXksIGFuZCB1c2VyJ3Mgd2FpdGluZworCSAqIGZvciByZWNlaXZlIGFyZSBhdCB0aGUgYm90dG9tLgorCSAqLworCWlmIChjaGswcmN2KSB7CisJCWlwYXRoX2tyZWNlaXZlKGRkKTsKKwkJaXN0YXQgJj0gfnBvcnQwcmJpdHM7CisJfQorCisJaWYgKGlzdGF0ICYgKChpbmZpbmlwYXRoX2lfcmN2YXZhaWxfbWFzayA8PAorCQkgICAgICBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpCisJCSAgICAgfCAoaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrIDw8CisJCQlJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUKSkpCisJCWhhbmRsZV91cmN2KGRkLCBpc3RhdCk7CisKIAlpZiAoaXN0YXQgJiBJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMKSB7CiAJCWNsZWFyX2JpdChJUEFUSF9TX1BJT0lOVEJVRkFWQUlMLCAmZGQtPmlwYXRoX3NlbmRjdHJsKTsKIAkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kY3RybCwKQEAgLTgzNiwxNyArOTM0LDcgQEAKIAkJaGFuZGxlX2xheWVyX3Bpb2F2YWlsKGRkKTsKIAl9CiAKLQkvKgotCSAqIHdlIGNoZWNrIGZvciBib3RoIHRyYW5zaXRpb24gZnJvbSBlbXB0eSB0byBub24tZW1wdHksIGFuZCB1cmdlbnQKLQkgKiBwYWNrZXRzICh0aG9zZSB3aXRoIHRoZSBpbnRlcnJ1cHQgYml0IHNldCBpbiB0aGUgaGVhZGVyKQotCSAqLwotCi0JaWYgKGlzdGF0ICYgKChpbmZpbmlwYXRoX2lfcmN2YXZhaWxfbWFzayA8PAotCQkgICAgICBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpCi0JCSAgICAgfCAoaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrIDw8Ci0JCQlJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUKSkpCi0JCWhhbmRsZV9yY3YoZGQsIGlzdGF0KTsKLQorZG9uZToKIAlyZXQgPSBJUlFfSEFORExFRDsKIAogYmFpbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAppbmRleCA1ZDkyZDU3Li5lOWYzNzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfSVBBVEhfS0VSTkVMX0gKICNkZWZpbmUgX0lQQVRIX0tFUk5FTF9ICiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC02MSw5ICs2Miw3IEBACiAJLyogcmN2aGRycSBiYXNlLCBuZWVkcyBtbWFwIGJlZm9yZSB1c2VmdWwgKi8KIAl2b2lkICpwb3J0X3JjdmhkcnE7CiAJLyoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyB3aGVyZSBoZHJxdGFpbCBpcyB1cGRhdGVkICovCi0JdTY0ICpwb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOwotCS8qIHBhZ2UgKiB1c2VkIGZvciB1YWRkciAqLwotCXN0cnVjdCBwYWdlICpwb3J0X3JjdmhkcnRhaWxfcGFnZXA7CisJdm9sYXRpbGUgX19sZTY0ICpwb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOwogCS8qCiAJICogdGVtcCBidWZmZXIgZm9yIGV4cGVjdGVkIHNlbmQgc2V0dXAsIGFsbG9jYXRlZCBhdCBvcGVuLCBpbnN0ZWFkCiAJICogb2YgZWFjaCBzZXR1cCBjYWxsCkBAIC03OCwxMSArNzcsNyBAQAogCWRtYV9hZGRyX3QgcG9ydF9yY3ZlZ3JfcGh5czsKIAkvKiBtbWFwIG9mIGhkcnEsIG11c3QgZml0IGluIDQ0IGJpdHMgKi8KIAlkbWFfYWRkcl90IHBvcnRfcmN2aGRycV9waHlzOwotCS8qCi0JICogdGhlIGFjdHVhbCB1c2VyIGFkZHJlc3MgdGhhdCB3ZSBpcGF0aF9tbG9jaydlZCwgc28gd2UgY2FuCi0JICogaXBhdGhfbXVubG9jayBpdCBhdCBjbG9zZQotCSAqLwotCXVuc2lnbmVkIGxvbmcgcG9ydF9yY3ZoZHJ0YWlsX3VhZGRyOworCWRtYV9hZGRyX3QgcG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5czsKIAkvKgogCSAqIG51bWJlciBvZiBvcGVucyBvbiB0aGlzIGluc3RhbmNlICgwIG9yIDE7IGlnbm9yaW5nIGZvcmtzLCBkdXAsCiAJICogZXRjLiBmb3Igbm93KQpAQCAtMTU4LDE2ICsxNTMsMTAgQEAKIAkvKiBiYXNlIG9mIG1lbW9yeSBhbGxvY2VkIGZvciBpcGF0aF9rcmVnYmFzZSwgZm9yIGZyZWUgKi8KIAl1NjQgKmlwYXRoX2tyZWdhbGxvYzsKIAkvKgotCSAqIHZlcnNpb24gb2Yga3JlZ2Jhc2UgdGhhdCBkb2Vzbid0IGhhdmUgaGlnaCBiaXRzIHNldCAoZm9yIDMyIGJpdAotCSAqIHByb2dyYW1zLCBzbyBtbWFwNjQgNDQgYml0IHdvcmtzKQotCSAqLwotCXU2NCBfX2lvbWVtICppcGF0aF9rcmVndmlydDsKLQkvKgogCSAqIHZpcnR1YWwgYWRkcmVzcyB3aGVyZSBwb3J0MCByY3ZoZHJxdGFpbCB1cGRhdGVkIGZvciB0aGlzIHVuaXQuCiAJICogb25seSB3cml0dGVuIHRvIGJ5IHRoZSBjaGlwLCBub3QgdGhlIGRyaXZlci4KIAkgKi8KIAl2b2xhdGlsZSBfX2xlNjQgKmlwYXRoX2hkcnF0YWlscHRyOwotCWRtYV9hZGRyX3QgaXBhdGhfZG1hX2FkZHI7CiAJLyogaXBhdGhfY2ZncG9ydHMgcG9pbnRlcnMgKi8KIAlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKippcGF0aF9wZDsKIAkvKiBza19idWZmcyB1c2VkIGJ5IHBvcnQgMCBlYWdlciByZWNlaXZlIHF1ZXVlICovCkBAIC0zNTQsMTMgKzM0MywxNyBAQAogCWNoYXIgKmlwYXRoX2ZyZWV6ZW1zZzsKIAkvKiBwY2kgYWNjZXNzIGRhdGEgc3RydWN0dXJlICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKLQlzdHJ1Y3QgY2RldiAqY2RldjsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IGNkZXYgKnVzZXJfY2RldjsKKwlzdHJ1Y3QgY2RldiAqZGlhZ19jZGV2OworCXN0cnVjdCBjbGFzc19kZXZpY2UgKnVzZXJfY2xhc3NfZGV2OworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmRpYWdfY2xhc3NfZGV2OwogCS8qIHRpbWVyIHVzZWQgdG8gcHJldmVudCBzdGF0cyBvdmVyZmxvdywgZXJyb3IgdGhyb3R0bGluZywgZXRjLiAqLwogCXN0cnVjdCB0aW1lcl9saXN0IGlwYXRoX3N0YXRzX3RpbWVyOwogCS8qIGNoZWNrIGZvciBzdGFsZSBtZXNzYWdlcyBpbiByY3YgcXVldWUgKi8KIAkvKiBvbmx5IGFsbG93IG9uZSBpbnRyIGF0IGEgdGltZS4gKi8KIAl1bnNpZ25lZCBsb25nIGlwYXRoX3Jjdl9wZW5kaW5nOworCXZvaWQgKmlwYXRoX2R1bW15X2hkcnE7CS8qIHVzZWQgYWZ0ZXIgcG9ydCBjbG9zZSAqLworCWRtYV9hZGRyX3QgaXBhdGhfZHVtbXlfaGRycV9waHlzOwogCiAJLyoKIAkgKiBTaGFkb3cgY29waWVzIG9mIHJlZ2lzdGVyczsgc2l6ZSBpbmRpY2F0ZXMgcmVhZCBhY2Nlc3Mgc2l6ZS4KQEAgLTUwMCw4ICs0OTMsMTEgQEAKIAl1MTYgaXBhdGhfbGlkOwogCS8qIGxpc3Qgb2YgcGtleXMgcHJvZ3JhbW1lZDsgMCBpZiBub3Qgc2V0ICovCiAJdTE2IGlwYXRoX3BrZXlzWzRdOwotCS8qIEFTQ0lJIHNlcmlhbCBudW1iZXIsIGZyb20gZmxhc2ggKi8KLQl1OCBpcGF0aF9zZXJpYWxbMTJdOworCS8qCisJICogQVNDSUkgc2VyaWFsIG51bWJlciwgZnJvbSBmbGFzaCwgbGFyZ2UgZW5vdWdoIGZvciBvcmlnaW5hbAorCSAqIGFsbCBkaWdpdCBzdHJpbmdzLCBhbmQgbG9uZ2VyIFFMb2dpYyBzZXJpYWwgbnVtYmVyIGZvcm1hdAorCSAqLworCXU4IGlwYXRoX3NlcmlhbFsxNl07CiAJLyogaHVtYW4gcmVhZGFibGUgYm9hcmQgdmVyc2lvbiAqLwogCXU4IGlwYXRoX2JvYXJkdmVyc2lvbls4MF07CiAJLyogY2hpcCBtYWpvciByZXYsIGZyb20gaXBhdGhfcmV2aXNpb24gKi8KQEAgLTUxNiwxMyArNTEyLDEzIEBACiAJdTggaXBhdGhfcGNpX2NhY2hlbGluZTsKIAkvKiBMSUQgbWFzayBjb250cm9sICovCiAJdTggaXBhdGhfbG1jOworCisJLyogbG9jYWwgbGluayBpbnRlZ3JpdHkgY291bnRlciAqLworCXUzMiBpcGF0aF9sbGlfY291bnRlcjsKKwkvKiBsb2NhbCBsaW5rIGludGVncml0eSBlcnJvcnMgKi8KKwl1MzIgaXBhdGhfbGxpX2Vycm9yczsKIH07CiAKLWV4dGVybiB2b2xhdGlsZSBfX2xlNjQgKmlwYXRoX3BvcnQwX3JjdmhkcnRhaWw7Ci1leHRlcm4gZG1hX2FkZHJfdCBpcGF0aF9wb3J0MF9yY3ZoZHJ0YWlsX2RtYTsKLQotI2RlZmluZSBJUEFUSF9QT1JUMF9SQ1ZIRFJUQUlMX1NJWkUgUEFHRV9TSVpFCi0KIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGlwYXRoX2Rldl9saXN0OwogZXh0ZXJuIHNwaW5sb2NrX3QgaXBhdGhfZGV2c19sb2NrOwogZXh0ZXJuIHN0cnVjdCBpcGF0aF9kZXZkYXRhICppcGF0aF9sb29rdXAoaW50IHVuaXQpOwpAQCAtNTM3LDcgKzUzMyw3IEBACiBleHRlcm4gaW50IF9faXBhdGhfdmVyYnNfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHZvaWQgKiwgdm9pZCAqLCB1MzIpOwogCiB2b2lkIGlwYXRoX2xheWVyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKLXZvaWQgaXBhdGhfbGF5ZXJfZGVsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCBpcGF0aF9sYXllcl9yZW1vdmUoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiAKIGludCBpcGF0aF9pbml0X2NoaXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaW50KTsKIGludCBpcGF0aF9lbmFibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKQEAgLTU1MSwxNCArNTQ3LDE0IEBACiB2b2lkIGlwYXRoX2NkZXZfY2xlYW51cChzdHJ1Y3QgY2RldiAqKmNkZXZwLAogCQkJc3RydWN0IGNsYXNzX2RldmljZSAqKmNsYXNzX2RldnApOwogCi1pbnQgaXBhdGhfZGlhZ19pbml0KHZvaWQpOwotdm9pZCBpcGF0aF9kaWFnX2NsZWFudXAodm9pZCk7CitpbnQgaXBhdGhfZGlhZ19hZGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Cit2b2lkIGlwYXRoX2RpYWdfcmVtb3ZlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdm9pZCBpcGF0aF9kaWFnX2JyaW5ndXBfbGluayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIAogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGlwYXRoX3NtYV9zdGF0ZV93YWl0OwogCiBpbnQgaXBhdGhfdXNlcl9hZGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLXZvaWQgaXBhdGhfdXNlcl9kZWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKK3ZvaWQgaXBhdGhfdXNlcl9yZW1vdmUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKIAogc3RydWN0IHNrX2J1ZmYgKmlwYXRoX2FsbG9jX3NrYihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGdmcF90KTsKIApAQCAtNTgyLDcgKzU3OCw3IEBACiAJCQkgIHVuc2lnbmVkIGNudCk7CiAKIGludCBpcGF0aF9jcmVhdGVfcmN2aGRycShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKik7Ci12b2lkIGlwYXRoX2ZyZWVfcGRkYXRhKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgaW50KTsKK3ZvaWQgaXBhdGhfZnJlZV9wZGRhdGEoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgc3RydWN0IGlwYXRoX3BvcnRkYXRhICopOwogCiBpbnQgaXBhdGhfcGFyc2VfdXNob3J0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgc2hvcnQgKnZhbHApOwogCkBAIC03MjAsMTMgKzcxNiw4IEBACiAgKiBAcG9ydDogcG9ydCBudW1iZXIKICAqCiAgKiBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGEgcmVnaXN0ZXIgdGhhdCBpcyB2aXJ0dWFsaXplZCB0byBiZSBwZXIgcG9ydC4KLSAqIFByaW50cyBhIGRlYnVnIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEgb24gZXJyb3JzIChub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20KLSAqIHZhbGlkIGNvbnRlbnRzIGF0IHJ1bnRpbWU7IHdlIG1heSBhZGQgYSBzZXBhcmF0ZSBlcnJvciB2YXJpYWJsZSBhdCBzb21lCi0gKiBwb2ludCkuCi0gKgotICogVGhpcyBpcyBub3JtYWxseSBub3QgdXNlZCBieSB0aGUga2VybmVsLCBidXQgbWF5IGJlIGZvciBkZWJ1Z2dpbmcsIGFuZAotICogaGFzIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIHRoYW4gdXNlciBtb2RlLCB3aGljaCBpcyB3aHkgaXQncyBub3QgaW4KLSAqIF9jb21tb24uaC4KKyAqIFJldHVybnMgLTEgb24gZXJyb3JzIChub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gdmFsaWQgY29udGVudHMgYXQKKyAqIHJ1bnRpbWU7IHdlIG1heSBhZGQgYSBzZXBhcmF0ZSBlcnJvciB2YXJpYWJsZSBhdCBzb21lIHBvaW50KS4KICAqLwogc3RhdGljIGlubGluZSB1MzIgaXBhdGhfcmVhZF91cmVnMzIoY29uc3Qgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAogCQkJCSAgICBpcGF0aF91cmVnIHJlZ25vLCBpbnQgcG9ydCkKQEAgLTg0Miw5ICs4MzMsMTAgQEAKIAogI2RlZmluZSBJUEFUSF9EUlZfTkFNRQkJImlwYXRoX2NvcmUiCiAjZGVmaW5lIElQQVRIX01BSk9SCQkyMzMKKyNkZWZpbmUgSVBBVEhfVVNFUl9NSU5PUl9CQVNFCTAKICNkZWZpbmUgSVBBVEhfU01BX01JTk9SCQkxMjgKLSNkZWZpbmUgSVBBVEhfRElBR19NSU5PUgkxMjkKLSNkZWZpbmUgSVBBVEhfTk1JTk9SUwkJMTMwCisjZGVmaW5lIElQQVRIX0RJQUdfTUlOT1JfQkFTRQkxMjkKKyNkZWZpbmUgSVBBVEhfTk1JTk9SUwkJMjU1CiAKICNkZWZpbmUgaXBhdGhfZGV2X2VycihkZCxmbXQsLi4uKSBcCiAJZG8geyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYwppbmRleCA1YWU4NzYxLi40Njc3M2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0xMjAsNiArMTIxLDcgQEAKIAkJICBzdHJ1Y3QgaWJfc2dlICpzZ2UsIGludCBhY2MpCiB7CiAJc3RydWN0IGlwYXRoX21yZWdpb24gKm1yOworCXVuc2lnbmVkIG4sIG07CiAJc2l6ZV90IG9mZjsKIAlpbnQgcmV0OwogCkBAIC0xNTEsMjAgKzE1MywyMiBAQAogCX0KIAogCW9mZiArPSBtci0+b2Zmc2V0OwotCWlzZ2UtPm1yID0gbXI7Ci0JaXNnZS0+bSA9IDA7Ci0JaXNnZS0+biA9IDA7Ci0Jd2hpbGUgKG9mZiA+PSBtci0+bWFwW2lzZ2UtPm1dLT5zZWdzW2lzZ2UtPm5dLmxlbmd0aCkgewotCQlvZmYgLT0gbXItPm1hcFtpc2dlLT5tXS0+c2Vnc1tpc2dlLT5uXS5sZW5ndGg7Ci0JCWlzZ2UtPm4rKzsKLQkJaWYgKGlzZ2UtPm4gPj0gSVBBVEhfU0VHU1opIHsKLQkJCWlzZ2UtPm0rKzsKLQkJCWlzZ2UtPm4gPSAwOworCW0gPSAwOworCW4gPSAwOworCXdoaWxlIChvZmYgPj0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGgpIHsKKwkJb2ZmIC09IG1yLT5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoOworCQluKys7CisJCWlmIChuID49IElQQVRIX1NFR1NaKSB7CisJCQltKys7CisJCQluID0gMDsKIAkJfQogCX0KLQlpc2dlLT52YWRkciA9IG1yLT5tYXBbaXNnZS0+bV0tPnNlZ3NbaXNnZS0+bl0udmFkZHIgKyBvZmY7Ci0JaXNnZS0+bGVuZ3RoID0gbXItPm1hcFtpc2dlLT5tXS0+c2Vnc1tpc2dlLT5uXS5sZW5ndGggLSBvZmY7CisJaXNnZS0+bXIgPSBtcjsKKwlpc2dlLT52YWRkciA9IG1yLT5tYXBbbV0tPnNlZ3Nbbl0udmFkZHIgKyBvZmY7CisJaXNnZS0+bGVuZ3RoID0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGggLSBvZmY7CiAJaXNnZS0+c2dlX2xlbmd0aCA9IHNnZS0+bGVuZ3RoOworCWlzZ2UtPm0gPSBtOworCWlzZ2UtPm4gPSBuOwogCiAJcmV0ID0gMTsKIApAQCAtMTg5LDYgKzE5Myw3IEBACiAJc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCA9ICZkZXYtPmxrX3RhYmxlOwogCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOwogCXN0cnVjdCBpcGF0aF9tcmVnaW9uICptcjsKKwl1bnNpZ25lZCBuLCBtOwogCXNpemVfdCBvZmY7CiAJaW50IHJldDsKIApAQCAtMjA2LDIwICsyMTEsMjIgQEAKIAl9CiAKIAlvZmYgKz0gbXItPm9mZnNldDsKLQlzZ2UtPm1yID0gbXI7Ci0Jc2dlLT5tID0gMDsKLQlzZ2UtPm4gPSAwOwotCXdoaWxlIChvZmYgPj0gbXItPm1hcFtzZ2UtPm1dLT5zZWdzW3NnZS0+bl0ubGVuZ3RoKSB7Ci0JCW9mZiAtPSBtci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS5sZW5ndGg7Ci0JCXNnZS0+bisrOwotCQlpZiAoc2dlLT5uID49IElQQVRIX1NFR1NaKSB7Ci0JCQlzZ2UtPm0rKzsKLQkJCXNnZS0+biA9IDA7CisJbSA9IDA7CisJbiA9IDA7CisJd2hpbGUgKG9mZiA+PSBtci0+bWFwW21dLT5zZWdzW25dLmxlbmd0aCkgeworCQlvZmYgLT0gbXItPm1hcFttXS0+c2Vnc1tuXS5sZW5ndGg7CisJCW4rKzsKKwkJaWYgKG4gPj0gSVBBVEhfU0VHU1opIHsKKwkJCW0rKzsKKwkJCW4gPSAwOwogCQl9CiAJfQotCXNnZS0+dmFkZHIgPSBtci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS52YWRkciArIG9mZjsKLQlzZ2UtPmxlbmd0aCA9IG1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLmxlbmd0aCAtIG9mZjsKKwlzZ2UtPm1yID0gbXI7CisJc2dlLT52YWRkciA9IG1yLT5tYXBbbV0tPnNlZ3Nbbl0udmFkZHIgKyBvZmY7CisJc2dlLT5sZW5ndGggPSBtci0+bWFwW21dLT5zZWdzW25dLmxlbmd0aCAtIG9mZjsKIAlzZ2UtPnNnZV9sZW5ndGggPSBsZW47CisJc2dlLT5tID0gbTsKKwlzZ2UtPm4gPSBuOwogCXNzLT5zZ19saXN0ID0gTlVMTDsKIAlzcy0+bnVtX3NnZSA9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKaW5kZXggOWVjNGFjNy4uYjI4YzZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC00MCw4ICs0MSw4IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCi0jaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgogI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKIC8qIEFjcXVpcmUgYmVmb3JlIGlwYXRoX2RldnNfbG9jay4gKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoaXBhdGhfbGF5ZXJfbXV0ZXgpOwpAQCAtMjk5LDkgKzMwMCw4IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9tdHUpOwogCi1pbnQgaXBhdGhfc2V0X3Nwc19saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgYXJnLCB1OCBsbWMpCitpbnQgaXBhdGhfc2V0X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBhcmcsIHU4IGxtYykKIHsKLQlpcGF0aF9zdGF0cy5zcHNfbGlkW2RkLT5pcGF0aF91bml0XSA9IGFyZzsKIAlkZC0+aXBhdGhfbGlkID0gYXJnOwogCWRkLT5pcGF0aF9sbWMgPSBsbWM7CiAKQEAgLTMxNSw3ICszMTUsNyBAQAogCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9zZXRfc3BzX2xpZCk7CitFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9zZXRfbGlkKTsKIAogaW50IGlwYXRoX2xheWVyX3NldF9ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgX19iZTY0IGd1aWQpCiB7CkBAIC0zNDAsMTggKzM0MCwyNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbmd1aWQpOwogCi1pbnQgaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyICogdmVuZG9yLAotCQkJICAgICB1MzIgKiBib2FyZHJldiwgdTMyICogbWFqcmV2LCB1MzIgKiBtaW5yZXYpCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X21hanJldihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JKnZlbmRvciA9IGRkLT5pcGF0aF92ZW5kb3JpZDsKLQkqYm9hcmRyZXYgPSBkZC0+aXBhdGhfYm9hcmRyZXY7Ci0JKm1hanJldiA9IGRkLT5pcGF0aF9tYWpyZXY7Ci0JKm1pbnJldiA9IGRkLT5pcGF0aF9taW5yZXY7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGQtPmlwYXRoX21hanJldjsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfcXVlcnlfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9tYWpyZXYpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X21pbnJldihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkLT5pcGF0aF9taW5yZXY7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9taW5yZXYpOworCit1MzIgaXBhdGhfbGF5ZXJfZ2V0X3BjaXJldihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkLT5pcGF0aF9wY2lyZXY7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9wY2lyZXYpOwogCiB1MzIgaXBhdGhfbGF5ZXJfZ2V0X2ZsYWdzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKQEAgLTM3NCw2ICszODIsMTMgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2RldmljZWlkKTsKIAordTMyIGlwYXRoX2xheWVyX2dldF92ZW5kb3JpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIGRkLT5pcGF0aF92ZW5kb3JpZDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X3ZlbmRvcmlkKTsKKwogdTY0IGlwYXRoX2xheWVyX2dldF9sYXN0aWJjc3RhdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CiAJcmV0dXJuIGRkLT5pcGF0aF9sYXN0aWJjc3RhdDsKQEAgLTQwMyw3ICs0MTgsNyBAQAogCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOwogfQogCi12b2lkIGlwYXRoX2xheWVyX2RlbChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit2b2lkIGlwYXRoX2xheWVyX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CiAJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOwogCkBAIC02MDcsNyArNjIyLDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXJldCA9IGlwYXRoX3NldHJjdmhkcnNpemUoZGQsIE5VTV9PRl9FWFRSQV9XT1JEU19JTl9IRUFERVJfUVVFVUUpOworCXJldCA9IGlwYXRoX3NldHJjdmhkcnNpemUoZGQsIElQQVRIX0hFQURFUl9RVUVVRV9XT1JEUyk7CiAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBiYWlsOwpAQCAtNjE2LDkgKzYzMSw5IEBACiAKIAlpZiAoKmRkLT5pcGF0aF9zdGF0dXNwICYgSVBBVEhfU1RBVFVTX0lCX1JFQURZKQogCQlpbnR2YWwgfD0gSVBBVEhfTEFZRVJfSU5UX0lGX1VQOwotCWlmIChpcGF0aF9zdGF0cy5zcHNfbGlkW2RkLT5pcGF0aF91bml0XSkKKwlpZiAoZGQtPmlwYXRoX2xpZCkKIAkJaW50dmFsIHw9IElQQVRIX0xBWUVSX0lOVF9MSUQ7Ci0JaWYgKGlwYXRoX3N0YXRzLnNwc19tbGlkW2RkLT5pcGF0aF91bml0XSkKKwlpZiAoZGQtPmlwYXRoX21saWQpCiAJCWludHZhbCB8PSBJUEFUSF9MQVlFUl9JTlRfQkNBU1Q7CiAJLyoKIAkgKiBkbyB0aGlzIG9uIG9wZW4sIGluIGNhc2UgbG93IGxldmVsIGlzIGFscmVhZHkgdXAgYW5kCkBAIC04ODQsNyArODk5LDcgQEAKIC8qKgogICogaXBhdGhfdmVyYnNfc2VuZCAtIHNlbmQgYSBwYWNrZXQgZnJvbSB0aGUgdmVyYnMgbGF5ZXIKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAaGRyd29yZHM6IHRoZSBudW1iZXIgb2Ygd29ya3MgaW4gdGhlIGhlYWRlcgorICogQGhkcndvcmRzOiB0aGUgbnVtYmVyIG9mIHdvcmRzIGluIHRoZSBoZWFkZXIKICAqIEBoZHI6IHRoZSBwYWNrZXQgaGVhZGVyCiAgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaW4gYnl0ZXMKICAqIEBzczogdGhlIFNHRSB0byBzZW5kCkBAIC0xMDE2LDE5ICsxMDMxLDIyIEBACiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYnN5bWJvbGVycmNudCk7CiAJY250cnMtPmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9CiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYmxpbmtlcnJyZWNvdmNudCk7CisJLyoKKwkgKiBUaGUgbGluayBkb3duZWQgY291bnRlciBjb3VudHMgd2hlbiB0aGUgb3RoZXIgc2lkZSBkb3ducyB0aGUKKwkgKiBjb25uZWN0aW9uLiAgV2UgYWRkIGluIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgZG93bmVkIHRoZSBsaW5rCisJICogZHVlIHRvIGxvY2FsIGxpbmsgaW50ZWdyaXR5IGVycm9ycyB0byBjb21wZW5zYXRlLgorCSAqLwogCWNudHJzLT5saW5rX2Rvd25lZF9jb3VudGVyID0KIAkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2libGlua2Rvd25jbnQpOwogCWNudHJzLT5wb3J0X3Jjdl9lcnJvcnMgPQogCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfcnhkcm9wcGt0Y250KSArCiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9yY3ZvdmZsY250KSArCiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wb3J0b3ZmbGNudCkgKwotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJycmN2Zmxvd2N0cmxjbnQpICsKIAkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2Vycl9ybGVuY250KSArCiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pbnZhbGlkcmxlbmNudCkgKwogCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJyaWNyY2NudCkgKwogCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJydmNyY2NudCkgKwogCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJybHBjcmNjbnQpICsKLQkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2VycmxpbmtjbnQpICsKIAkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2JhZGZvcm1hdGNudCk7CiAJY250cnMtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KIAkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3JjdmVicGNudCk7CkBAIC0xMDQyLDYgKzEwNjAsOCBAQAogCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0c2VuZGNudCk7CiAJY250cnMtPnBvcnRfcmN2X3BhY2tldHMgPQogCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KTsKKwljbnRycy0+bG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzID0gZGQtPmlwYXRoX2xsaV9lcnJvcnM7CisJY250cnMtPmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnMgPSAwOyAvKiBYWFggKi8KIAogCXJldCA9IDA7CiAKQEAgLTEwODYsMTAgKzExMDYsMTAgQEAKIAkJfQogCiAJdmxzbGxuaCA9ICooKF9fYmUxNiAqKSBoZHIpOwotCWlmICh2bHNsbG5oICE9IGh0b25zKElQU19MUkhfQlRIKSkgeworCWlmICh2bHNsbG5oICE9IGh0b25zKElQQVRIX0xSSF9CVEgpKSB7CiAJCWlwYXRoX2RiZygiV2FybmluZzogbHJoWzBdIHdyb25nICgleCwgbm90ICV4KTsgIgogCQkJICAibm90IHNlbmRpbmdcbiIsIGJlMTZfdG9fY3B1KHZsc2xsbmgpLAotCQkJICBJUFNfTFJIX0JUSCk7CisJCQkgIElQQVRIX0xSSF9CVEgpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaAppbmRleCA2ZmVmZDE1Li43MTQ4NTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaApAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTU0LDYgKzU1LDggQEAKIAl1NjQgcG9ydF9yY3ZfZGF0YTsKIAl1NjQgcG9ydF94bWl0X3BhY2tldHM7CiAJdTY0IHBvcnRfcmN2X3BhY2tldHM7CisJdTMyIGxvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9yczsKKwl1MzIgZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9yczsKIH07CiAKIC8qCkBAIC0xMjYsNyArMTI5LDcgQEAKIHUzMiBpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwogaW50IGlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBzdGF0ZSk7CiBpbnQgaXBhdGhfbGF5ZXJfc2V0X210dShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MTYpOwotaW50IGlwYXRoX3NldF9zcHNfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgdTgpOworaW50IGlwYXRoX3NldF9saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyLCB1OCk7CiBpbnQgaXBhdGhfbGF5ZXJfc2VuZF9oZHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAogCQkJIHN0cnVjdCBldGhlcl9oZWFkZXIgKmhkcik7CiBpbnQgaXBhdGhfdmVyYnNfc2VuZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBoZHJ3b3JkcywKQEAgLTE0MywxMSArMTQ2LDEzIEBACiBpbnQgaXBhdGhfbGF5ZXJfc2V0X2d1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgX19iZTY0IGd1aWQpOwogX19iZTY0IGlwYXRoX2xheWVyX2dldF9ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdTMyIGlwYXRoX2xheWVyX2dldF9uZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKLWludCBpcGF0aF9sYXllcl9xdWVyeV9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyICogdmVuZG9yLAotCQkJICAgICB1MzIgKiBib2FyZHJldiwgdTMyICogbWFqcmV2LCB1MzIgKiBtaW5yZXYpOwordTMyIGlwYXRoX2xheWVyX2dldF9tYWpyZXYoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Cit1MzIgaXBhdGhfbGF5ZXJfZ2V0X21pbnJldihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3UzMiBpcGF0aF9sYXllcl9nZXRfcGNpcmV2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogdTMyIGlwYXRoX2xheWVyX2dldF9mbGFncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwogc3RydWN0IGRldmljZSAqaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwogdTE2IGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwordTMyIGlwYXRoX2xheWVyX2dldF92ZW5kb3JpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIHU2NCBpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKIHUzMiBpcGF0aF9sYXllcl9nZXRfaWJtdHUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKIGludCBpcGF0aF9sYXllcl9lbmFibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwppbmRleCAxYTlkMGEyLi5kMzQwMjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMzQsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKLSNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKICNkZWZpbmUgSUJfU01QX1VOU1VQX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDQpCiAjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIT0QJX19jb25zdGFudF9odG9ucygweDAwMDgpCkBAIC04NCw3ICs4NSw3IEBACiB7CiAJc3RydWN0IG5vZGVpbmZvICpuaXAgPSAoc3RydWN0IG5vZGVpbmZvICopJnNtcC0+ZGF0YTsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSB0b19pZGV2KGliZGV2KS0+ZGQ7Ci0JdTMyIHZlbmRvciwgYm9hcmRpZCwgbWFqcmV2LCBtaW5yZXY7CisJdTMyIHZlbmRvciwgbWFqcmV2LCBtaW5yZXY7CiAKIAlpZiAoc21wLT5hdHRyX21vZCkKIAkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CkBAIC0xMDQsOSArMTA1LDExIEBACiAJbmlwLT5wb3J0X2d1aWQgPSBuaXAtPnN5c19ndWlkOwogCW5pcC0+cGFydGl0aW9uX2NhcCA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGQpKTsKIAluaXAtPmRldmljZV9pZCA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZChkZCkpOwotCWlwYXRoX2xheWVyX3F1ZXJ5X2RldmljZShkZCwgJnZlbmRvciwgJmJvYXJkaWQsICZtYWpyZXYsICZtaW5yZXYpOworCW1hanJldiA9IGlwYXRoX2xheWVyX2dldF9tYWpyZXYoZGQpOworCW1pbnJldiA9IGlwYXRoX2xheWVyX2dldF9taW5yZXYoZGQpOwogCW5pcC0+cmV2aXNpb24gPSBjcHVfdG9fYmUzMigobWFqcmV2IDw8IDE2KSB8IG1pbnJldik7CiAJbmlwLT5sb2NhbF9wb3J0X251bSA9IHBvcnQ7CisJdmVuZG9yID0gaXBhdGhfbGF5ZXJfZ2V0X3ZlbmRvcmlkKGRkKTsKIAluaXAtPnZlbmRvcl9pZFswXSA9IDA7CiAJbmlwLT52ZW5kb3JfaWRbMV0gPSB2ZW5kb3IgPj4gODsKIAluaXAtPnZlbmRvcl9pZFsyXSA9IHZlbmRvcjsKQEAgLTIxNSw3ICsyMTgsNyBAQAogCS8qIFBfS2V5VmlvbGF0aW9ucyBhcmUgY291bnRlZCBieSBoYXJkd2FyZS4gKi8KIAlwaXAtPnBrZXlfdmlvbGF0aW9ucyA9CiAJCWNwdV90b19iZTE2KChpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShkZXYtPmRkKSAtCi0JCQkgICAgIGRldi0+bl9wa2V5X3Zpb2xhdGlvbnMpICYgMHhGRkZGKTsKKwkJCSAgICAgZGV2LT56X3BrZXlfdmlvbGF0aW9ucykgJiAweEZGRkYpOwogCXBpcC0+cWtleV92aW9sYXRpb25zID0gY3B1X3RvX2JlMTYoZGV2LT5xa2V5X3Zpb2xhdGlvbnMpOwogCS8qIE9ubHkgdGhlIGhhcmR3YXJlIEdVSUQgaXMgc3VwcG9ydGVkIGZvciBub3cgKi8KIAlwaXAtPmd1aWRfY2FwID0gMTsKQEAgLTMwMyw5ICszMDYsOSBAQAogCWxpZCA9IGJlMTZfdG9fY3B1KHBpcC0+bGlkKTsKIAlpZiAobGlkICE9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpIHsKIAkJLyogTXVzdCBiZSBhIHZhbGlkIHVuaWNhc3QgTElEIGFkZHJlc3MuICovCi0JCWlmIChsaWQgPT0gMCB8fCBsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSkKKwkJaWYgKGxpZCA9PSAwIHx8IGxpZCA+PSBJUEFUSF9NVUxUSUNBU1RfTElEX0JBU0UpCiAJCQlnb3RvIGVycjsKLQkJaXBhdGhfc2V0X3Nwc19saWQoZGV2LT5kZCwgbGlkLCBwaXAtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNyk7CisJCWlwYXRoX3NldF9saWQoZGV2LT5kZCwgbGlkLCBwaXAtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNyk7CiAJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKIAkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKIAl9CkBAIC0zMTMsNyArMzE2LDcgQEAKIAlzbWxpZCA9IGJlMTZfdG9fY3B1KHBpcC0+c21fbGlkKTsKIAlpZiAoc21saWQgIT0gZGV2LT5zbV9saWQpIHsKIAkJLyogTXVzdCBiZSBhIHZhbGlkIHVuaWNhc3QgTElEIGFkZHJlc3MuICovCi0JCWlmIChzbWxpZCA9PSAwIHx8IHNtbGlkID49IElQU19NVUxUSUNBU1RfTElEX0JBU0UpCisJCWlmIChzbWxpZCA9PSAwIHx8IHNtbGlkID49IElQQVRIX01VTFRJQ0FTVF9MSURfQkFTRSkKIAkJCWdvdG8gZXJyOwogCQlkZXYtPnNtX2xpZCA9IHNtbGlkOwogCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1NNX0NIQU5HRTsKQEAgLTM4OSw3ICszOTIsNyBAQAogCSAqIGxhdGVyLgogCSAqLwogCWlmIChwaXAtPnBrZXlfdmlvbGF0aW9ucyA9PSAwKQotCQlkZXYtPm5fcGtleV92aW9sYXRpb25zID0KKwkJZGV2LT56X3BrZXlfdmlvbGF0aW9ucyA9CiAJCQlpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShkZXYtPmRkKTsKIAogCWlmIChwaXAtPnFrZXlfdmlvbGF0aW9ucyA9PSAwKQpAQCAtNjEwLDYgKzYxMyw5IEBACiAjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfRVJST1JTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKICNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKICNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMX0xPQ0FMX0xJTktfSU5URUdSSVRZX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDIwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9FWENFU1NJVkVfQlVGRkVSX09WRVJSVU5TCV9fY29uc3RhbnRfaHRvbnMoMHgwNDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfVkwxNV9EUk9QUEVECQlfX2NvbnN0YW50X2h0b25zKDB4MDgwMCkKICNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDEwMDApCiAjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJX19jb25zdGFudF9odG9ucygweDIwMDApCiAjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQpAQCAtODQ0LDE4ICs4NTAsMjIgQEAKIAlpcGF0aF9sYXllcl9nZXRfY291bnRlcnMoZGV2LT5kZCwgJmNudHJzKTsKIAogCS8qIEFkanVzdCBjb3VudGVycyBmb3IgYW55IHJlc2V0cyBkb25lLiAqLwotCWNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyIC09IGRldi0+bl9zeW1ib2xfZXJyb3JfY291bnRlcjsKKwljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlciAtPSBkZXYtPnpfc3ltYm9sX2Vycm9yX2NvdW50ZXI7CiAJY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyIC09Ci0JCWRldi0+bl9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7Ci0JY250cnMubGlua19kb3duZWRfY291bnRlciAtPSBkZXYtPm5fbGlua19kb3duZWRfY291bnRlcjsKKwkJZGV2LT56X2xpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlcjsKKwljbnRycy5saW5rX2Rvd25lZF9jb3VudGVyIC09IGRldi0+el9saW5rX2Rvd25lZF9jb3VudGVyOwogCWNudHJzLnBvcnRfcmN2X2Vycm9ycyArPSBkZXYtPnJjdl9lcnJvcnM7Ci0JY250cnMucG9ydF9yY3ZfZXJyb3JzIC09IGRldi0+bl9wb3J0X3Jjdl9lcnJvcnM7Ci0JY250cnMucG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgLT0gZGV2LT5uX3BvcnRfcmN2X3JlbXBoeXNfZXJyb3JzOwotCWNudHJzLnBvcnRfeG1pdF9kaXNjYXJkcyAtPSBkZXYtPm5fcG9ydF94bWl0X2Rpc2NhcmRzOwotCWNudHJzLnBvcnRfeG1pdF9kYXRhIC09IGRldi0+bl9wb3J0X3htaXRfZGF0YTsKLQljbnRycy5wb3J0X3Jjdl9kYXRhIC09IGRldi0+bl9wb3J0X3Jjdl9kYXRhOwotCWNudHJzLnBvcnRfeG1pdF9wYWNrZXRzIC09IGRldi0+bl9wb3J0X3htaXRfcGFja2V0czsKLQljbnRycy5wb3J0X3Jjdl9wYWNrZXRzIC09IGRldi0+bl9wb3J0X3Jjdl9wYWNrZXRzOworCWNudHJzLnBvcnRfcmN2X2Vycm9ycyAtPSBkZXYtPnpfcG9ydF9yY3ZfZXJyb3JzOworCWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzIC09IGRldi0+el9wb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsKKwljbnRycy5wb3J0X3htaXRfZGlzY2FyZHMgLT0gZGV2LT56X3BvcnRfeG1pdF9kaXNjYXJkczsKKwljbnRycy5wb3J0X3htaXRfZGF0YSAtPSBkZXYtPnpfcG9ydF94bWl0X2RhdGE7CisJY250cnMucG9ydF9yY3ZfZGF0YSAtPSBkZXYtPnpfcG9ydF9yY3ZfZGF0YTsKKwljbnRycy5wb3J0X3htaXRfcGFja2V0cyAtPSBkZXYtPnpfcG9ydF94bWl0X3BhY2tldHM7CisJY250cnMucG9ydF9yY3ZfcGFja2V0cyAtPSBkZXYtPnpfcG9ydF9yY3ZfcGFja2V0czsKKwljbnRycy5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgLT0KKwkJZGV2LT56X2xvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9yczsKKwljbnRycy5leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzIC09CisJCWRldi0+el9leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzOwogCiAJbWVtc2V0KHBtcC0+ZGF0YSwgMCwgc2l6ZW9mKHBtcC0+ZGF0YSkpOwogCkBAIC04OTMsNiArOTAzLDE2IEBACiAJZWxzZQogCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPQogCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5wb3J0X3htaXRfZGlzY2FyZHMpOworCWlmIChjbnRycy5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgPiAweEZVTCkKKwkJY250cnMubG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzID0gMHhGVUw7CisJaWYgKGNudHJzLmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnMgPiAweEZVTCkKKwkJY250cnMuZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9ycyA9IDB4RlVMOworCXAtPmxsaV9lYm9yX2Vycm9ycyA9IChjbnRycy5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgPDwgNCkgfAorCQljbnRycy5leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzOworCWlmIChkZXYtPm5fdmwxNV9kcm9wcGVkID4gMHhGRkZGVUwpCisJCXAtPnZsMTVfZHJvcHBlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwllbHNlCisJCXAtPnZsMTVfZHJvcHBlZCA9IGNwdV90b19iZTE2KCh1MTYpZGV2LT5uX3ZsMTVfZHJvcHBlZCk7CiAJaWYgKGNudHJzLnBvcnRfeG1pdF9kYXRhID4gMHhGRkZGRkZGRlVMKQogCQlwLT5wb3J0X3htaXRfZGF0YSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQpAQCAtOTI4LDEwICs5NDgsMTAgQEAKIAkJCQkgICAgICAmcnBrdHMsICZ4d2FpdCk7CiAKIAkvKiBBZGp1c3QgY291bnRlcnMgZm9yIGFueSByZXNldHMgZG9uZS4gKi8KLQlzd29yZHMgLT0gZGV2LT5uX3BvcnRfeG1pdF9kYXRhOwotCXJ3b3JkcyAtPSBkZXYtPm5fcG9ydF9yY3ZfZGF0YTsKLQlzcGt0cyAtPSBkZXYtPm5fcG9ydF94bWl0X3BhY2tldHM7Ci0JcnBrdHMgLT0gZGV2LT5uX3BvcnRfcmN2X3BhY2tldHM7CisJc3dvcmRzIC09IGRldi0+el9wb3J0X3htaXRfZGF0YTsKKwlyd29yZHMgLT0gZGV2LT56X3BvcnRfcmN2X2RhdGE7CisJc3BrdHMgLT0gZGV2LT56X3BvcnRfeG1pdF9wYWNrZXRzOworCXJwa3RzIC09IGRldi0+el9wb3J0X3Jjdl9wYWNrZXRzOwogCiAJbWVtc2V0KHBtcC0+ZGF0YSwgMCwgc2l6ZW9mKHBtcC0+ZGF0YSkpOwogCkBAIC05NjcsMzcgKzk4Nyw0OCBAQAogCWlwYXRoX2xheWVyX2dldF9jb3VudGVycyhkZXYtPmRkLCAmY250cnMpOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9TWU1CT0xfRVJST1IpCi0JCWRldi0+bl9zeW1ib2xfZXJyb3JfY291bnRlciA9IGNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyOworCQlkZXYtPnpfc3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcjsKIAogCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfTElOS19FUlJPUl9SRUNPVkVSWSkKLQkJZGV2LT5uX2xpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9CisJCWRldi0+el9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXIgPQogCQkJY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9MSU5LX0RPV05FRCkKLQkJZGV2LT5uX2xpbmtfZG93bmVkX2NvdW50ZXIgPSBjbnRycy5saW5rX2Rvd25lZF9jb3VudGVyOworCQlkZXYtPnpfbGlua19kb3duZWRfY291bnRlciA9IGNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXI7CiAKIAlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfUkNWX0VSUk9SUykKLQkJZGV2LT5uX3BvcnRfcmN2X2Vycm9ycyA9CisJCWRldi0+el9wb3J0X3Jjdl9lcnJvcnMgPQogCQkJY250cnMucG9ydF9yY3ZfZXJyb3JzICsgZGV2LT5yY3ZfZXJyb3JzOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUykKLQkJZGV2LT5uX3BvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KKwkJZGV2LT56X3BvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KIAkJCWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMpCi0JCWRldi0+bl9wb3J0X3htaXRfZGlzY2FyZHMgPSBjbnRycy5wb3J0X3htaXRfZGlzY2FyZHM7CisJCWRldi0+el9wb3J0X3htaXRfZGlzY2FyZHMgPSBjbnRycy5wb3J0X3htaXRfZGlzY2FyZHM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX0xPQ0FMX0xJTktfSU5URUdSSVRZX0VSUk9SUykKKwkJZGV2LT56X2xvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9ycyA9CisJCQljbnRycy5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX0VYQ0VTU0lWRV9CVUZGRVJfT1ZFUlJVTlMpCisJCWRldi0+el9leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzID0KKwkJCWNudHJzLmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7CisKKwlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfVkwxNV9EUk9QUEVEKQorCQlkZXYtPm5fdmwxNV9kcm9wcGVkID0gMDsKIAogCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RBVEEpCi0JCWRldi0+bl9wb3J0X3htaXRfZGF0YSA9IGNudHJzLnBvcnRfeG1pdF9kYXRhOworCQlkZXYtPnpfcG9ydF94bWl0X2RhdGEgPSBjbnRycy5wb3J0X3htaXRfZGF0YTsKIAogCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQSkKLQkJZGV2LT5uX3BvcnRfcmN2X2RhdGEgPSBjbnRycy5wb3J0X3Jjdl9kYXRhOworCQlkZXYtPnpfcG9ydF9yY3ZfZGF0YSA9IGNudHJzLnBvcnRfcmN2X2RhdGE7CiAKIAlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfWE1JVF9QQUNLRVRTKQotCQlkZXYtPm5fcG9ydF94bWl0X3BhY2tldHMgPSBjbnRycy5wb3J0X3htaXRfcGFja2V0czsKKwkJZGV2LT56X3BvcnRfeG1pdF9wYWNrZXRzID0gY250cnMucG9ydF94bWl0X3BhY2tldHM7CiAKIAlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMpCi0JCWRldi0+bl9wb3J0X3Jjdl9wYWNrZXRzID0gY250cnMucG9ydF9yY3ZfcGFja2V0czsKKwkJZGV2LT56X3BvcnRfcmN2X3BhY2tldHMgPSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzOwogCiAJcmV0dXJuIHJlY3ZfcG1hX2dldF9wb3J0Y291bnRlcnMocG1wLCBpYmRldiwgcG9ydCk7CiB9CkBAIC0xMDE0LDE2ICsxMDQ1LDE2IEBACiAJCQkJICAgICAgJnJwa3RzLCAmeHdhaXQpOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEpCi0JCWRldi0+bl9wb3J0X3htaXRfZGF0YSA9IHN3b3JkczsKKwkJZGV2LT56X3BvcnRfeG1pdF9kYXRhID0gc3dvcmRzOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQSkKLQkJZGV2LT5uX3BvcnRfcmN2X2RhdGEgPSByd29yZHM7CisJCWRldi0+el9wb3J0X3Jjdl9kYXRhID0gcndvcmRzOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMpCi0JCWRldi0+bl9wb3J0X3htaXRfcGFja2V0cyA9IHNwa3RzOworCQlkZXYtPnpfcG9ydF94bWl0X3BhY2tldHMgPSBzcGt0czsKIAogCWlmIChwLT5jb3VudGVyX3NlbGVjdCAmIElCX1BNQV9TRUxYX1BPUlRfUkNWX1BBQ0tFVFMpCi0JCWRldi0+bl9wb3J0X3Jjdl9wYWNrZXRzID0gcnBrdHM7CisJCWRldi0+el9wb3J0X3Jjdl9wYWNrZXRzID0gcnBrdHM7CiAKIAlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMWF9QT1JUX1VOSV9YTUlUX1BBQ0tFVFMpCiAJCWRldi0+bl91bmljYXN0X3htaXQgPSAwOwpAQCAtMTI3MiwzMiArMTMwMyw4IEBACiAJCSAgICAgIHN0cnVjdCBpYl93YyAqaW5fd2MsIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKIAkJICAgICAgc3RydWN0IGliX21hZCAqaW5fbWFkLCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQogewotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CiAJaW50IHJldDsKIAotCS8qCi0JICogU25hcHNob3QgY3VycmVudCBIVyBjb3VudGVycyB0byAiY2xlYXIiIHRoZW0uCi0JICogVGhpcyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGV4Y2VwdCB0aGF0IGZvcgotCSAqIHNvbWUgcmVhc29uIHdlIGdldCBhIHppbGxpb24gZXJyb3JzIHdoZW4gYnJpbmluZyB1cCB0aGUgbGluay4KLQkgKi8KLQlpZiAoZGV2LT5yY3ZfZXJyb3JzID09IDApIHsKLQkJc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOwotCi0JCWlwYXRoX2xheWVyX2dldF9jb3VudGVycyh0b19pZGV2KGliZGV2KS0+ZGQsICZjbnRycyk7Ci0JCWRldi0+cmN2X2Vycm9ycysrOwotCQlkZXYtPm5fc3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBjbnRycy5zeW1ib2xfZXJyb3JfY291bnRlcjsKLQkJZGV2LT5uX2xpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9Ci0JCQljbnRycy5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7Ci0JCWRldi0+bl9saW5rX2Rvd25lZF9jb3VudGVyID0gY250cnMubGlua19kb3duZWRfY291bnRlcjsKLQkJZGV2LT5uX3BvcnRfcmN2X2Vycm9ycyA9IGNudHJzLnBvcnRfcmN2X2Vycm9ycyArIDE7Ci0JCWRldi0+bl9wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9Ci0JCQljbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9yczsKLQkJZGV2LT5uX3BvcnRfeG1pdF9kaXNjYXJkcyA9IGNudHJzLnBvcnRfeG1pdF9kaXNjYXJkczsKLQkJZGV2LT5uX3BvcnRfeG1pdF9kYXRhID0gY250cnMucG9ydF94bWl0X2RhdGE7Ci0JCWRldi0+bl9wb3J0X3Jjdl9kYXRhID0gY250cnMucG9ydF9yY3ZfZGF0YTsKLQkJZGV2LT5uX3BvcnRfeG1pdF9wYWNrZXRzID0gY250cnMucG9ydF94bWl0X3BhY2tldHM7Ci0JCWRldi0+bl9wb3J0X3Jjdl9wYWNrZXRzID0gY250cnMucG9ydF9yY3ZfcGFja2V0czsKLQl9CiAJc3dpdGNoIChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcykgewogCWNhc2UgSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFOgogCWNhc2UgSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCmluZGV4IDY5ZmZlYzYuLjRhYzMxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMTY5LDYgKzE3MCwxMSBAQAogCWludCBuLCBtLCBpOwogCXN0cnVjdCBpYl9tciAqcmV0OwogCisJaWYgKHJlZ2lvbi0+bGVuZ3RoID09IDApIHsKKwkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBiYWlsOworCX0KKwogCW4gPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZyZWdpb24tPmNodW5rX2xpc3QsIGxpc3QpCiAJCW4gKz0gY2h1bmstPm5lbnRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3BlODAwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYwppbmRleCAwMmU4Yzc1Li5iODNmNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcGU4MDAuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTQ0LDcgKzQ1LDcgQEAKIAogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGNoaXAtc3BlY2lmaWMgcmVnaXN0ZXIgaW5mb3JtYXRpb24gYW5kCi0gKiBhY2Nlc3MgZnVuY3Rpb25zIGZvciB0aGUgUGF0aFNjYWxlIFBFODAwLCB0aGUgUENJLUV4cHJlc3MgY2hpcC4KKyAqIGFjY2VzcyBmdW5jdGlvbnMgZm9yIHRoZSBRTG9naWMgSW5maW5pUGF0aCBQRTgwMCwgdGhlIFBDSS1FeHByZXNzIGNoaXAuCiAgKgogICogVGhpcyBsaXN0cyB0aGUgSW5maW5pUGF0aCBQRTgwMCByZWdpc3RlcnMsIGluIHRoZSBhY3R1YWwgY2hpcCBsYXlvdXQuCiAgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgbmV2ZXIgYmUgZGlyZWN0bHkgYWNjZXNzZWQuCkBAIC01MzIsNyArNTMzLDcgQEAKIAlpZiAobikKIAkJc25wcmludGYobmFtZSwgbmFtZWxlbiwgIiVzIiwgbik7CiAKLQlpZiAoZGQtPmlwYXRoX21hanJldiAhPSA0IHx8IGRkLT5pcGF0aF9taW5yZXYgIT0gMSkgeworCWlmIChkZC0+aXBhdGhfbWFqcmV2ICE9IDQgfHwgIWRkLT5pcGF0aF9taW5yZXYgfHwgZGQtPmlwYXRoX21pbnJldj4yKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJVbnN1cHBvcnRlZCBQRS04MDAgcmV2aXNpb24gJXUuJXUhXG4iLAogCQkJICAgICAgZGQtPmlwYXRoX21hanJldiwgZGQtPmlwYXRoX21pbnJldik7CiAJCXJldCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCmluZGV4IDlmODg1NWQ5Li44M2U1NTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTM0LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgotI2luY2x1ZGUgImlwc19jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogI2RlZmluZSBCSVRTX1BFUl9QQUdFCQkoUEFHRV9TSVpFKkJJVFNfUEVSX0JZVEUpCiAjZGVmaW5lIEJJVFNfUEVSX1BBR0VfTUFTSwkoQklUU19QRVJfUEFHRS0xKQpAQCAtMzMyLDEwICszMzMsMTEgQEAKIAlxcC0+cmVtb3RlX3FwbiA9IDA7CiAJcXAtPnFrZXkgPSAwOwogCXFwLT5xcF9hY2Nlc3NfZmxhZ3MgPSAwOworCWNsZWFyX2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncyk7CiAJcXAtPnNfaGRyd29yZHMgPSAwOwogCXFwLT5zX3BzbiA9IDA7CiAJcXAtPnJfcHNuID0gMDsKLQlhdG9taWNfc2V0KCZxcC0+bXNuLCAwKTsKKwlxcC0+cl9tc24gPSAwOwogCWlmIChxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9SQykgewogCQlxcC0+c19zdGF0ZSA9IElCX09QQ09ERV9SQ19TRU5EX0xBU1Q7CiAJCXFwLT5yX3N0YXRlID0gSUJfT1BDT0RFX1JDX1NFTkRfTEFTVDsKQEAgLTM0NCw3ICszNDYsOCBAQAogCQlxcC0+cl9zdGF0ZSA9IElCX09QQ09ERV9VQ19TRU5EX0xBU1Q7CiAJfQogCXFwLT5zX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKLQlxcC0+c19uYWtfc3RhdGUgPSAwOworCXFwLT5yX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKKwlxcC0+cl9uYWtfc3RhdGUgPSAwOwogCXFwLT5zX3Jucl90aW1lb3V0ID0gMDsKIAlxcC0+c19oZWFkID0gMDsKIAlxcC0+c190YWlsID0gMDsKQEAgLTM2MiwxMCArMzY1LDEwIEBACiAgKiBAcXA6IHRoZSBRUCB0byBwdXQgaW50byBhbiBlcnJvciBzdGF0ZQogICoKICAqIEZsdXNoZXMgYm90aCBzZW5kIGFuZCByZWNlaXZlIHdvcmsgcXVldWVzLgotICogUVAgcl9ycS5sb2NrIGFuZCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQuCisgKiBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgaXBhdGhfZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCkKK3ZvaWQgaXBhdGhfZXJyb3JfcXAoc3RydWN0IGlwYXRoX3FwICpxcCkKIHsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CkBAIC00MDgsMTIgKzQxMSwxNCBAQAogCXFwLT5zX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKIAogCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJc3Bpbl9sb2NrKCZxcC0+cl9ycS5sb2NrKTsKIAl3aGlsZSAocXAtPnJfcnEudGFpbCAhPSBxcC0+cl9ycS5oZWFkKSB7CiAJCXdjLndyX2lkID0gZ2V0X3J3cWVfcHRyKCZxcC0+cl9ycSwgcXAtPnJfcnEudGFpbCktPndyX2lkOwogCQlpZiAoKytxcC0+cl9ycS50YWlsID49IHFwLT5yX3JxLnNpemUpCiAJCQlxcC0+cl9ycS50YWlsID0gMDsKIAkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsIDEpOwogCX0KKwlzcGluX3VubG9jaygmcXAtPnJfcnEubG9jayk7CiB9CiAKIC8qKgpAQCAtNDMzLDggKzQzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CiAKIAljdXJfc3RhdGUgPSBhdHRyX21hc2sgJiBJQl9RUF9DVVJfU1RBVEUgPwogCQlhdHRyLT5jdXJfcXBfc3RhdGUgOiBxcC0+c3RhdGU7CkBAIC00NDYsNyArNDUwLDcgQEAKIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikKIAkJaWYgKGF0dHItPmFoX2F0dHIuZGxpZCA9PSAwIHx8Ci0JCSAgICBhdHRyLT5haF9hdHRyLmRsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSkKKwkJICAgIGF0dHItPmFoX2F0dHIuZGxpZCA+PSBJUEFUSF9NVUxUSUNBU1RfTElEX0JBU0UpCiAJCQlnb3RvIGludmFsOwogCiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpCkBAIC01MDUsMzQgKzUwOSwxOSBAQAogCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NSU5fUk5SX1RJTUVSKQotCQlxcC0+c19taW5fcm5yX3RpbWVyID0gYXR0ci0+bWluX3Jucl90aW1lcjsKKwkJcXAtPnJfbWluX3Jucl90aW1lciA9IGF0dHItPm1pbl9ybnJfdGltZXI7CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUUtFWSkKIAkJcXAtPnFrZXkgPSBhdHRyLT5xa2V5OwogCi0JaWYgKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpCi0JCXFwLT5zX3BrZXlfaW5kZXggPSBhdHRyLT5wa2V5X2luZGV4OwotCiAJcXAtPnN0YXRlID0gbmV3X3N0YXRlOwotCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwogCi0JLyoKLQkgKiBJZiBRUDEgY2hhbmdlZCB0byB0aGUgUlRTIHN0YXRlLCB0cnkgdG8gbW92ZSB0byB0aGUgbGluayB0byBJTklUCi0JICogZXZlbiBpZiBpdCB3YXMgQUNUSVZFIHNvIHRoZSBTTSB3aWxsIHJlaW5pdGlhbGl6ZSB0aGUgU01BJ3MKLQkgKiBzdGF0ZS4KLQkgKi8KLQlpZiAocXAtPmlicXAucXBfbnVtID09IDEgJiYgbmV3X3N0YXRlID09IElCX1FQU19SVFMpIHsKLQkJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGlicXAtPmRldmljZSk7Ci0KLQkJaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShkZXYtPmRkLCBJUEFUSF9JQl9MSU5LRE9XTik7Ci0JfQogCXJldCA9IDA7CiAJZ290byBiYWlsOwogCiBpbnZhbDoKLQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKIAlyZXQgPSAtRUlOVkFMOwogCiBiYWlsOgpAQCAtNTY2LDcgKzU1NSw3IEBACiAJYXR0ci0+c3FfZHJhaW5pbmcgPSAwOwogCWF0dHItPm1heF9yZF9hdG9taWMgPSAxOwogCWF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA9IDE7Ci0JYXR0ci0+bWluX3Jucl90aW1lciA9IHFwLT5zX21pbl9ybnJfdGltZXI7CisJYXR0ci0+bWluX3Jucl90aW1lciA9IHFwLT5yX21pbl9ybnJfdGltZXI7CiAJYXR0ci0+cG9ydF9udW0gPSAxOwogCWF0dHItPnRpbWVvdXQgPSAwOwogCWF0dHItPnJldHJ5X2NudCA9IHFwLT5zX3JldHJ5X2NudDsKQEAgLTU5MywyMSArNTgyLDE3IEBACiAgKiBAcXA6IHRoZSBxdWV1ZSBwYWlyIHRvIGNvbXB1dGUgdGhlIEFFVEggZm9yCiAgKgogICogUmV0dXJucyB0aGUgQUVUSC4KLSAqCi0gKiBUaGUgUVAgc19sb2NrIHNob3VsZCBiZSBoZWxkLgogICovCiBfX2JlMzIgaXBhdGhfY29tcHV0ZV9hZXRoKHN0cnVjdCBpcGF0aF9xcCAqcXApCiB7Ci0JdTMyIGFldGggPSBhdG9taWNfcmVhZCgmcXAtPm1zbikgJiBJUFNfTVNOX01BU0s7CisJdTMyIGFldGggPSBxcC0+cl9tc24gJiBJUEFUSF9NU05fTUFTSzsKIAotCWlmIChxcC0+c19uYWtfc3RhdGUpIHsKLQkJYWV0aCB8PSBxcC0+c19uYWtfc3RhdGUgPDwgSVBTX0FFVEhfQ1JFRElUX1NISUZUOwotCX0gZWxzZSBpZiAocXAtPmlicXAuc3JxKSB7CisJaWYgKHFwLT5pYnFwLnNycSkgewogCQkvKgogCQkgKiBTaGFyZWQgcmVjZWl2ZSBxdWV1ZXMgZG9uJ3QgZ2VuZXJhdGUgY3JlZGl0cy4KIAkJICogU2V0IHRoZSBjcmVkaXQgZmllbGQgdG8gdGhlIGludmFsaWQgdmFsdWUuCiAJCSAqLwotCQlhZXRoIHw9IElQU19BRVRIX0NSRURJVF9JTlZBTCA8PCBJUFNfQUVUSF9DUkVESVRfU0hJRlQ7CisJCWFldGggfD0gSVBBVEhfQUVUSF9DUkVESVRfSU5WQUwgPDwgSVBBVEhfQUVUSF9DUkVESVRfU0hJRlQ7CiAJfSBlbHNlIHsKIAkJdTMyIG1pbiwgbWF4LCB4OwogCQl1MzIgY3JlZGl0czsKQEAgLTYzNyw3ICs2MjIsNyBAQAogCQkJZWxzZQogCQkJCW1pbiA9IHg7CiAJCX0KLQkJYWV0aCB8PSB4IDw8IElQU19BRVRIX0NSRURJVF9TSElGVDsKKwkJYWV0aCB8PSB4IDw8IElQQVRIX0FFVEhfQ1JFRElUX1NISUZUOwogCX0KIAlyZXR1cm4gY3B1X3RvX2JlMzIoYWV0aCk7CiB9CkBAIC02NjMsMTIgKzY0OCwyMiBAQAogCXNpemVfdCBzejsKIAlzdHJ1Y3QgaWJfcXAgKnJldDsKIAotCWlmIChpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgPiAyNTUgfHwKLQkgICAgaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlID4gMjU1KSB7CisJaWYgKGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSA+IGliX2lwYXRoX21heF9zZ2VzIHx8CisJICAgIGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSA+IGliX2lwYXRoX21heF9zZ2VzIHx8CisJICAgIGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyID4gaWJfaXBhdGhfbWF4X3FwX3dycyB8fAorCSAgICBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciA+IGliX2lwYXRoX21heF9xcF93cnMpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJZ290byBiYWlsOwogCX0KIAorCWlmIChpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgKworCSAgICBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2UgKworCSAgICBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciArCisJICAgIGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyID09IDApIHsKKwkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBiYWlsOworCX0KKwogCXN3aXRjaCAoaW5pdF9hdHRyLT5xcF90eXBlKSB7CiAJY2FzZSBJQl9RUFRfVUM6CiAJY2FzZSBJQl9RUFRfUkM6CkBAIC02ODYsMTggKzY4MSwyNiBAQAogCWNhc2UgSUJfUVBUX0dTSToKIAkJcXAgPSBrbWFsbG9jKHNpemVvZigqcXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFxcCkgeworCQkJdmZyZWUoc3dxKTsKIAkJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CiAJCQlnb3RvIGJhaWw7CiAJCX0KLQkJcXAtPnJfcnEuc2l6ZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyICsgMTsKLQkJc3ogPSBzaXplb2Yoc3RydWN0IGlwYXRoX3NnZSkgKgotCQkJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICsKLQkJCXNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSk7Ci0JCXFwLT5yX3JxLndxID0gdm1hbGxvYyhxcC0+cl9ycS5zaXplICogc3opOwotCQlpZiAoIXFwLT5yX3JxLndxKSB7Ci0JCQlrZnJlZShxcCk7Ci0JCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQkJZ290byBiYWlsOworCQlpZiAoaW5pdF9hdHRyLT5zcnEpIHsKKwkJCXFwLT5yX3JxLnNpemUgPSAwOworCQkJcXAtPnJfcnEubWF4X3NnZSA9IDA7CisJCQlxcC0+cl9ycS53cSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlxcC0+cl9ycS5zaXplID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgKyAxOworCQkJcXAtPnJfcnEubWF4X3NnZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZTsKKwkJCXN6ID0gKHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKSAqIHFwLT5yX3JxLm1heF9zZ2UpICsKKwkJCQlzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpOworCQkJcXAtPnJfcnEud3EgPSB2bWFsbG9jKHFwLT5yX3JxLnNpemUgKiBzeik7CisJCQlpZiAoIXFwLT5yX3JxLndxKSB7CisJCQkJa2ZyZWUocXApOworCQkJCXZmcmVlKHN3cSk7CisJCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtNzA4LDkgKzcxMSw3IEBACiAJCXNwaW5fbG9ja19pbml0KCZxcC0+cl9ycS5sb2NrKTsKIAkJYXRvbWljX3NldCgmcXAtPnJlZmNvdW50LCAwKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcXAtPndhaXQpOwotCQl0YXNrbGV0X2luaXQoJnFwLT5zX3Rhc2ssCi0JCQkgICAgIGluaXRfYXR0ci0+cXBfdHlwZSA9PSBJQl9RUFRfUkMgPwotCQkJICAgICBpcGF0aF9kb19yY19zZW5kIDogaXBhdGhfZG9fdWNfc2VuZCwKKwkJdGFza2xldF9pbml0KCZxcC0+c190YXNrLCBpcGF0aF9kb19ydWNfc2VuZCwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpcXApOwogCQlJTklUX0xJU1RfSEVBRCgmcXAtPnBpb3dhaXQpOwogCQlJTklUX0xJU1RfSEVBRCgmcXAtPnRpbWVyd2FpdCk7CkBAIC03MTgsNyArNzE5LDYgQEAKIAkJcXAtPnNfd3EgPSBzd3E7CiAJCXFwLT5zX3NpemUgPSBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciArIDE7CiAJCXFwLT5zX21heF9zZ2UgPSBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2U7Ci0JCXFwLT5yX3JxLm1heF9zZ2UgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2U7CiAJCXFwLT5zX2ZsYWdzID0gaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSA9PSBJQl9TSUdOQUxfUkVRX1dSID8KIAkJCTEgPDwgSVBBVEhfU19TSUdOQUxfUkVRX1dSIDogMDsKIAkJZGV2ID0gdG9faWRldihpYnBkLT5kZXZpY2UpOwpAQCAtODg4LDE4ICs4ODgsMTggQEAKICAqLwogdm9pZCBpcGF0aF9nZXRfY3JlZGl0KHN0cnVjdCBpcGF0aF9xcCAqcXAsIHUzMiBhZXRoKQogewotCXUzMiBjcmVkaXQgPSAoYWV0aCA+PiBJUFNfQUVUSF9DUkVESVRfU0hJRlQpICYgSVBTX0FFVEhfQ1JFRElUX01BU0s7CisJdTMyIGNyZWRpdCA9IChhZXRoID4+IElQQVRIX0FFVEhfQ1JFRElUX1NISUZUKSAmIElQQVRIX0FFVEhfQ1JFRElUX01BU0s7CiAKIAkvKgogCSAqIElmIHRoZSBjcmVkaXQgaXMgaW52YWxpZCwgd2UgY2FuIHNlbmQKIAkgKiBhcyBtYW55IHBhY2tldHMgYXMgd2UgbGlrZS4gIE90aGVyd2lzZSwgd2UgaGF2ZSB0bwogCSAqIGhvbm9yIHRoZSBjcmVkaXQgZmllbGQuCiAJICovCi0JaWYgKGNyZWRpdCA9PSBJUFNfQUVUSF9DUkVESVRfSU5WQUwpIHsKKwlpZiAoY3JlZGl0ID09IElQQVRIX0FFVEhfQ1JFRElUX0lOVkFMKQogCQlxcC0+c19sc24gPSAodTMyKSAtMTsKLQl9IGVsc2UgaWYgKHFwLT5zX2xzbiAhPSAodTMyKSAtMSkgeworCWVsc2UgaWYgKHFwLT5zX2xzbiAhPSAodTMyKSAtMSkgewogCQkvKiBDb21wdXRlIG5ldyBMU04gKGkuZS4sIE1TTiArIGNyZWRpdCkgKi8KLQkJY3JlZGl0ID0gKGFldGggKyBjcmVkaXRfdGFibGVbY3JlZGl0XSkgJiBJUFNfTVNOX01BU0s7CisJCWNyZWRpdCA9IChhZXRoICsgY3JlZGl0X3RhYmxlW2NyZWRpdF0pICYgSVBBVEhfTVNOX01BU0s7CiAJCWlmIChpcGF0aF9jbXAyNChjcmVkaXQsIHFwLT5zX2xzbikgPiAwKQogCQkJcXAtPnNfbHNuID0gY3JlZGl0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKaW5kZXggNDkzYjE4Mi4uNzc0ZDE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0zMSw3ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCi0jaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiAvKiBjdXQgZG93biByaWRpY3Vsb3VzbHkgbG9uZyBJQiBtYWNybyBuYW1lcyAqLwogI2RlZmluZSBPUCh4KSBJQl9PUENPREVfUkNfIyN4CkBAIC00MSwxNCArNDIsMTQgQEAKICAqIEBxcDogdGhlIFFQIHdobydzIFNHRSB3ZSdyZSByZXN0YXJ0aW5nCiAgKiBAd3FlOiB0aGUgd29yayBxdWV1ZSB0byBpbml0aWFsaXplIHRoZSBRUCdzIFNHRSBmcm9tCiAgKgotICogVGhlIFFQIHNfbG9jayBzaG91bGQgYmUgaGVsZC4KKyAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGlwYXRoX2luaXRfcmVzdGFydChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlKQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OwogCXUzMiBsZW47CiAKLQlsZW4gPSAoKHFwLT5zX3BzbiAtIHdxZS0+cHNuKSAmIElQU19QU05fTUFTSykgKgorCWxlbiA9ICgocXAtPnNfcHNuIC0gd3FlLT5wc24pICYgSVBBVEhfUFNOX01BU0spICoKIAkJaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CiAJcXAtPnNfc2dlLnNnZSA9IHdxZS0+c2dfbGlzdFswXTsKIAlxcC0+c19zZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7CkBAIC03MiwxMSArNzMsMTAgQEAKICAqIFJldHVybiBidGgwIGlmIGNvbnN0cnVjdGVkOyBvdGhlcndpc2UsIHJldHVybiAwLgogICogTm90ZSB0aGUgUVAgc19sb2NrIG11c3QgYmUgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB1MzIgaXBhdGhfbWFrZV9yY19hY2soc3RydWN0IGlwYXRoX3FwICpxcCwKLQkJCQkgICAgc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHIsCi0JCQkJICAgIHUzMiBwbXR1KQordTMyIGlwYXRoX21ha2VfcmNfYWNrKHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCSAgICAgIHN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyLAorCQkgICAgICB1MzIgcG10dSkKIHsKLQlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzczsKIAl1MzIgaHdvcmRzOwogCXUzMiBsZW47CiAJdTMyIGJ0aDA7CkBAIC05MCwxMyArOTAsMTIgQEAKIAkgKi8KIAlzd2l0Y2ggKHFwLT5zX2Fja19zdGF0ZSkgewogCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgotCQlzcyA9ICZxcC0+c19yZG1hX3NnZTsKKwkJcXAtPnNfY3VyX3NnZSA9ICZxcC0+c19yZG1hX3NnZTsKIAkJbGVuID0gcXAtPnNfcmRtYV9sZW47CiAJCWlmIChsZW4gPiBwbXR1KSB7CiAJCQlsZW4gPSBwbXR1OwogCQkJcXAtPnNfYWNrX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJcXAtPnNfYWNrX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX09OTFkpOwogCQlxcC0+c19yZG1hX2xlbiAtPSBsZW47CiAJCWJ0aDAgPSBxcC0+c19hY2tfc3RhdGUgPDwgMjQ7CkBAIC0xMDgsNyArMTA3LDcgQEAKIAkJcXAtPnNfYWNrX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk7CiAJCS8qIEZBTExUSFJPVUdIICovCiAJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTUlERExFKToKLQkJc3MgPSAmcXAtPnNfcmRtYV9zZ2U7CisJCXFwLT5zX2N1cl9zZ2UgPSAmcXAtPnNfcmRtYV9zZ2U7CiAJCWxlbiA9IHFwLT5zX3JkbWFfbGVuOwogCQlpZiAobGVuID4gcG10dSkKIAkJCWxlbiA9IHBtdHU7CkBAIC0xMjcsNDEgKzEyNiw1MCBAQAogCQkgKiBXZSBoYXZlIHRvIHByZXZlbnQgbmV3IHJlcXVlc3RzIGZyb20gY2hhbmdpbmcKIAkJICogdGhlIHJfc2dlIHN0YXRlIHdoaWxlIGEgaXBhdGhfdmVyYnNfc2VuZCgpCiAJCSAqIGlzIGluIHByb2dyZXNzLgotCQkgKiBDaGFuZ2luZyByX3N0YXRlIGFsbG93cyB0aGUgcmVjZWl2ZXIKLQkJICogdG8gY29udGludWUgcHJvY2Vzc2luZyBuZXcgcGFja2V0cy4KLQkJICogV2UgZG8gaXQgaGVyZSBub3cgaW5zdGVhZCBvZiBhYm92ZSBzbwotCQkgKiB0aGF0IHdlIGFyZSBzdXJlIHRoZSBwYWNrZXQgd2FzIHNlbnQgYmVmb3JlCi0JCSAqIGNoYW5naW5nIHRoZSBzdGF0ZS4KIAkJICovCi0JCXFwLT5yX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOwogCQlxcC0+c19hY2tfc3RhdGUgPSBPUChBQ0tOT1dMRURHRSk7Ci0JCXJldHVybiAwOworCQlidGgwID0gMDsKKwkJZ290byBiYWlsOwogCiAJY2FzZSBPUChDT01QQVJFX1NXQVApOgogCWNhc2UgT1AoRkVUQ0hfQUREKToKLQkJc3MgPSBOVUxMOworCQlxcC0+c19jdXJfc2dlID0gTlVMTDsKIAkJbGVuID0gMDsKLQkJcXAtPnJfc3RhdGUgPSBPUChTRU5EX0xBU1QpOwotCQlxcC0+c19hY2tfc3RhdGUgPSBPUChBQ0tOT1dMRURHRSk7Ci0JCWJ0aDAgPSBJQl9PUENPREVfQVRPTUlDX0FDS05PV0xFREdFIDw8IDI0OworCQkvKgorCQkgKiBTZXQgdGhlIHNfYWNrX3N0YXRlIHNvIHRoZSByZWNlaXZlIGludGVycnVwdCBoYW5kbGVyCisJCSAqIHdvbid0IHRyeSB0byBzZW5kIGFuIEFDSyAob3V0IG9mIG9yZGVyKSB1bnRpbCB0aGlzIG9uZQorCQkgKiBpcyBhY3R1YWxseSBzZW50LgorCQkgKi8KKwkJcXAtPnNfYWNrX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOworCQlidGgwID0gT1AoQVRPTUlDX0FDS05PV0xFREdFKSA8PCAyNDsKIAkJb2hkci0+dS5hdC5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKLQkJb2hkci0+dS5hdC5hdG9taWNfYWNrX2V0aCA9IGNwdV90b19iZTY0KHFwLT5zX2Fja19hdG9taWMpOworCQlvaGRyLT51LmF0LmF0b21pY19hY2tfZXRoID0gY3B1X3RvX2JlNjQocXAtPnJfYXRvbWljX2RhdGEpOwogCQlod29yZHMgKz0gc2l6ZW9mKG9oZHItPnUuYXQpIC8gNDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQkvKiBTZW5kIGEgcmVndWxhciBBQ0suICovCi0JCXNzID0gTlVMTDsKKwkJcXAtPnNfY3VyX3NnZSA9IE5VTEw7CiAJCWxlbiA9IDA7Ci0JCXFwLT5zX2Fja19zdGF0ZSA9IE9QKEFDS05PV0xFREdFKTsKLQkJYnRoMCA9IHFwLT5zX2Fja19zdGF0ZSA8PCAyNDsKLQkJb2hkci0+dS5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKKwkJLyoKKwkJICogU2V0IHRoZSBzX2Fja19zdGF0ZSBzbyB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaGFuZGxlcgorCQkgKiB3b24ndCB0cnkgdG8gc2VuZCBhbiBBQ0sgKG91dCBvZiBvcmRlcikgdW50aWwgdGhpcyBvbmUKKwkJICogaXMgYWN0dWFsbHkgc2VudC4KKwkJICovCisJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKTsKKwkJYnRoMCA9IE9QKEFDS05PV0xFREdFKSA8PCAyNDsKKwkJaWYgKHFwLT5zX25ha19zdGF0ZSkKKwkJCW9oZHItPnUuYWV0aCA9IGNwdV90b19iZTMyKChxcC0+cl9tc24gJiBJUEFUSF9NU05fTUFTSykgfAorCQkJCQkJICAgIChxcC0+c19uYWtfc3RhdGUgPDwKKwkJCQkJCSAgICAgSVBBVEhfQUVUSF9DUkVESVRfU0hJRlQpKTsKKwkJZWxzZQorCQkJb2hkci0+dS5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKIAkJaHdvcmRzKys7CiAJfQogCXFwLT5zX2hkcndvcmRzID0gaHdvcmRzOwotCXFwLT5zX2N1cl9zZ2UgPSBzczsKIAlxcC0+c19jdXJfc2l6ZSA9IGxlbjsKIAorYmFpbDoKIAlyZXR1cm4gYnRoMDsKIH0KIApAQCAtMTc0LDExICsxODIsMTEgQEAKICAqIEBidGgycDogcG9pbnRlciB0byB0aGUgQlRIIFBTTiB3b3JkCiAgKgogICogUmV0dXJuIDEgaWYgY29uc3RydWN0ZWQ7IG90aGVyd2lzZSwgcmV0dXJuIDAuCi0gKiBOb3RlIHRoZSBRUCBzX2xvY2sgbXVzdCBiZSBoZWxkLgorICogTm90ZSB0aGUgUVAgc19sb2NrIG11c3QgYmUgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaXBhdGhfbWFrZV9yY19yZXEoc3RydWN0IGlwYXRoX3FwICpxcCwKLQkJCQkgICAgc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHIsCi0JCQkJICAgIHUzMiBwbXR1LCB1MzIgKmJ0aDBwLCB1MzIgKmJ0aDJwKQoraW50IGlwYXRoX21ha2VfcmNfcmVxKHN0cnVjdCBpcGF0aF9xcCAqcXAsCisJCSAgICAgIHN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyLAorCQkgICAgICB1MzIgcG10dSwgdTMyICpidGgwcCwgdTMyICpidGgycCkKIHsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKIAlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzczsKQEAgLTI1Nyw3ICsyNjUsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgotCQkJaWYgKG5ld3JlcSkKKwkJCWlmIChuZXdyZXEgJiYgcXAtPnNfbHNuICE9ICh1MzIpIC0xKQogCQkJCXFwLT5zX2xzbisrOwogCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgpAQCAtMjgzLDggKzI5MSw3IEBACiAJCQllbHNlIHsKIAkJCQlxcC0+c19zdGF0ZSA9CiAJCQkJCU9QKFJETUFfV1JJVEVfT05MWV9XSVRIX0lNTUVESUFURSk7Ci0JCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMKLQkJCQkgKiBhZnRlciBSRVRIICovCisJCQkJLyogSW1tZWRpYXRlIGRhdGEgY29tZXMgYWZ0ZXIgUkVUSCAqLwogCQkJCW9oZHItPnUucmMuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOwogCQkJCWh3b3JkcyArPSAxOwogCQkJCWlmICh3cWUtPndyLnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKQEAgLTMwNCw3ICszMTEsOCBAQAogCQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVRVUVTVCk7CiAJCQlod29yZHMgKz0gc2l6ZW9mKG9oZHItPnUucmMucmV0aCkgLyA0OwogCQkJaWYgKG5ld3JlcSkgewotCQkJCXFwLT5zX2xzbisrOworCQkJCWlmIChxcC0+c19sc24gIT0gKHUzMikgLTEpCisJCQkJCXFwLT5zX2xzbisrOwogCQkJCS8qCiAJCQkJICogQWRqdXN0IHNfbmV4dF9wc24gdG8gY291bnQgdGhlCiAJCQkJICogZXhwZWN0ZWQgbnVtYmVyIG9mIHJlc3BvbnNlcy4KQEAgLTMzNSw3ICszNDMsOCBAQAogCQkJCXdxZS0+d3Iud3IuYXRvbWljLmNvbXBhcmVfYWRkKTsKIAkJCWh3b3JkcyArPSBzaXplb2Yoc3RydWN0IGliX2F0b21pY19ldGgpIC8gNDsKIAkJCWlmIChuZXdyZXEpIHsKLQkJCQlxcC0+c19sc24rKzsKKwkJCQlpZiAocXAtPnNfbHNuICE9ICh1MzIpIC0xKQorCQkJCQlxcC0+c19sc24rKzsKIAkJCQl3cWUtPmxwc24gPSB3cWUtPnBzbjsKIAkJCX0KIAkJCWlmICgrK3FwLT5zX2N1ciA9PSBxcC0+c19zaXplKQpAQCAtMzUyLDkgKzM2MSwxNCBAQAogCQkJaWYgKHFwLT5zX3RhaWwgPj0gcXAtPnNfc2l6ZSkKIAkJCQlxcC0+c190YWlsID0gMDsKIAkJfQotCQlidGgyIHw9IHFwLT5zX3BzbisrICYgSVBTX1BTTl9NQVNLOworCQlidGgyIHw9IHFwLT5zX3BzbisrICYgSVBBVEhfUFNOX01BU0s7CiAJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQogCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CisJCS8qCisJCSAqIFB1dCB0aGUgUVAgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyBsb3N0IEFDS3Mgd2lsbCBjYXVzZQorCQkgKiBhIHJldHJ5LiAgTW9yZSB0aGFuIG9uZSByZXF1ZXN0IGNhbiBiZSBwZW5kaW5nIHNvIHRoZQorCQkgKiBRUCBtYXkgYWxyZWFkeSBiZSBvbiB0aGUgZGV2LT5wZW5kaW5nIGxpc3QuCisJCSAqLwogCQlzcGluX2xvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKIAkJaWYgKGxpc3RfZW1wdHkoJnFwLT50aW1lcndhaXQpKQogCQkJbGlzdF9hZGRfdGFpbCgmcXAtPnRpbWVyd2FpdCwKQEAgLTM2NCw4ICszNzgsOCBAQAogCiAJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfRklSU1QpOgogCQkvKgotCQkgKiBUaGlzIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2VuZCBpcyByZXN0YXJ0ZWQuICBTZWUKLQkJICogaXBhdGhfcmVzdGFydF9yYygpLgorCQkgKiBUaGlzIGNhc2UgY2FuIG9ubHkgaGFwcGVuIGlmIGEgc2VuZCBpcyByZXN0YXJ0ZWQuCisJCSAqIFNlZSBpcGF0aF9yZXN0YXJ0X3JjKCkuCiAJCSAqLwogCQlpcGF0aF9pbml0X3Jlc3RhcnQocXAsIHdxZSk7CiAJCS8qIEZBTExUSFJPVUdIICovCkBAIC0zNzMsNyArMzg3LDcgQEAKIAkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX01JRERMRSk7CiAJCS8qIEZBTExUSFJPVUdIICovCiAJY2FzZSBPUChTRU5EX01JRERMRSk6Ci0JCWJ0aDIgPSBxcC0+c19wc24rKyAmIElQU19QU05fTUFTSzsKKwkJYnRoMiA9IHFwLT5zX3BzbisrICYgSVBBVEhfUFNOX01BU0s7CiAJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQogCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CiAJCXNzID0gJnFwLT5zX3NnZTsKQEAgLTQxNSw3ICs0MjksNyBAQAogCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfTUlERExFKTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKLQkJYnRoMiA9IHFwLT5zX3BzbisrICYgSVBTX1BTTl9NQVNLOworCQlidGgyID0gcXAtPnNfcHNuKysgJiBJUEFUSF9QU05fTUFTSzsKIAkJaWYgKChpbnQpKHFwLT5zX3BzbiAtIHFwLT5zX25leHRfcHNuKSA+IDApCiAJCQlxcC0+c19uZXh0X3BzbiA9IHFwLT5zX3BzbjsKIAkJc3MgPSAmcXAtPnNfc2dlOwpAQCAtNDUyLDcgKzQ2Niw3IEBACiAJCSAqIFNlZSBpcGF0aF9yZXN0YXJ0X3JjKCkuCiAJCSAqLwogCQlpcGF0aF9pbml0X3Jlc3RhcnQocXAsIHdxZSk7Ci0JCWxlbiA9ICgocXAtPnNfcHNuIC0gd3FlLT5wc24pICYgSVBTX1BTTl9NQVNLKSAqIHBtdHU7CisJCWxlbiA9ICgocXAtPnNfcHNuIC0gd3FlLT5wc24pICYgSVBBVEhfUFNOX01BU0spICogcG10dTsKIAkJb2hkci0+dS5yYy5yZXRoLnZhZGRyID0KIAkJCWNwdV90b19iZTY0KHdxZS0+d3Iud3IucmRtYS5yZW1vdGVfYWRkciArIGxlbik7CiAJCW9oZHItPnUucmMucmV0aC5ya2V5ID0KQEAgLTQ2MCw3ICs0NzQsNyBAQAogCQlvaGRyLT51LnJjLnJldGgubGVuZ3RoID0gY3B1X3RvX2JlMzIocXAtPnNfbGVuKTsKIAkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVRVUVTVCk7CiAJCWh3b3JkcyArPSBzaXplb2Yob2hkci0+dS5yYy5yZXRoKSAvIDQ7Ci0JCWJ0aDIgPSBxcC0+c19wc24rKyAmIElQU19QU05fTUFTSzsKKwkJYnRoMiA9IHFwLT5zX3BzbisrICYgSVBBVEhfUFNOX01BU0s7CiAJCWlmICgoaW50KShxcC0+c19wc24gLSBxcC0+c19uZXh0X3BzbikgPiAwKQogCQkJcXAtPnNfbmV4dF9wc24gPSBxcC0+c19wc247CiAJCXNzID0gTlVMTDsKQEAgLTQ5NiwyMDQgKzUxMCwxODMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlwYXRoX21ha2VfcmNfZ3JoKHN0cnVjdCBpcGF0aF9xcCAqcXAsCi0JCQkJICAgICBzdHJ1Y3QgaWJfZ2xvYmFsX3JvdXRlICpncmgsCi0JCQkJICAgICB1MzIgbndvcmRzKQotewotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwotCi0JLyogR1JIIGhlYWRlciBzaXplIGluIDMyLWJpdCB3b3Jkcy4gKi8KLQlxcC0+c19oZHJ3b3JkcyArPSAxMDsKLQlxcC0+c19oZHIudS5sLmdyaC52ZXJzaW9uX3RjbGFzc19mbG93ID0KLQkJY3B1X3RvX2JlMzIoKDYgPDwgMjgpIHwKLQkJCSAgICAoZ3JoLT50cmFmZmljX2NsYXNzIDw8IDIwKSB8Ci0JCQkgICAgZ3JoLT5mbG93X2xhYmVsKTsKLQlxcC0+c19oZHIudS5sLmdyaC5wYXlsZW4gPQotCQljcHVfdG9fYmUxNigoKHFwLT5zX2hkcndvcmRzIC0gMTIpICsgbndvcmRzICsKLQkJCSAgICAgU0laRV9PRl9DUkMpIDw8IDIpOwotCS8qIG5leHRfaGRyIGlzIGRlZmluZWQgYnkgQzgtNyBpbiBjaC4gOC40LjEgKi8KLQlxcC0+c19oZHIudS5sLmdyaC5uZXh0X2hkciA9IDB4MUI7Ci0JcXAtPnNfaGRyLnUubC5ncmguaG9wX2xpbWl0ID0gZ3JoLT5ob3BfbGltaXQ7Ci0JLyogVGhlIFNHSUQgaXMgMzItYml0IGFsaWduZWQuICovCi0JcXAtPnNfaGRyLnUubC5ncmguc2dpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCA9IGRldi0+Z2lkX3ByZWZpeDsKLQlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQgPQotCQlpcGF0aF9sYXllcl9nZXRfZ3VpZChkZXYtPmRkKTsKLQlxcC0+c19oZHIudS5sLmdyaC5kZ2lkID0gZ3JoLT5kZ2lkOwotfQotCiAvKioKLSAqIGlwYXRoX2RvX3JjX3NlbmQgLSBwZXJmb3JtIGEgc2VuZCBvbiBhbiBSQyBRUAotICogQGRhdGE6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgUVAKKyAqIHNlbmRfcmNfYWNrIC0gQ29uc3RydWN0IGFuIEFDSyBwYWNrZXQgYW5kIHNlbmQgaXQKKyAqIEBxcDogYSBwb2ludGVyIHRvIHRoZSBRUAogICoKLSAqIFByb2Nlc3MgZW50cmllcyBpbiB0aGUgc2VuZCB3b3JrIHF1ZXVlIHVudGlsIGNyZWRpdCBvciBxdWV1ZSBpcwotICogZXhoYXVzdGVkLiAgT25seSBhbGxvdyBvbmUgQ1BVIHRvIHNlbmQgYSBwYWNrZXQgcGVyIFFQICh0YXNrbGV0KS4KLSAqIE90aGVyd2lzZSwgYWZ0ZXIgd2UgZHJvcCB0aGUgUVAgc19sb2NrLCB0d28gdGhyZWFkcyBjb3VsZCBzZW5kCi0gKiBwYWNrZXRzIG91dCBvZiBvcmRlci4KKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2KCkgYW5kIG9ubHkgdXNlcyB0aGUgcmVjZWl2ZQorICogc2lkZSBRUCBzdGF0ZS4KKyAqIE5vdGUgdGhhdCBSRE1BIHJlYWRzIGFyZSBoYW5kbGVkIGluIHRoZSBzZW5kIHNpZGUgUVAgc3RhdGUgYW5kIHRhc2tsZXQuCiAgKi8KLXZvaWQgaXBhdGhfZG9fcmNfc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGlwYXRoX3FwICpxcCA9IChzdHJ1Y3QgaXBhdGhfcXAgKilkYXRhOwotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTE2IGxyaDA7Ci0JdTMyIG53b3JkczsKLQl1MzIgZXh0cmFfYnl0ZXM7Ci0JdTMyIGJ0aDA7Ci0JdTMyIGJ0aDI7Ci0JdTMyIHBtdHUgPSBpYl9tdHVfZW51bV90b19pbnQocXAtPnBhdGhfbXR1KTsKLQlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKSkKLQkJZ290byBiYWlsOwotCi0JaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkID09Ci0JCSAgICAgaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSkpIHsKLQkJc3RydWN0IGliX3djIHdjOwotCi0JCS8qCi0JCSAqIFBhc3MgaW4gYW4gdW5pbml0aWFsaXplZCBpYl93YyB0byBiZSBjb25zaXN0ZW50IHdpdGgKLQkJICogb3RoZXIgcGxhY2VzIHdoZXJlIGlwYXRoX3J1Y19sb29wYmFjaygpIGlzIGNhbGxlZC4KLQkJICovCi0JCWlwYXRoX3J1Y19sb29wYmFjayhxcCwgJndjKTsKLQkJZ290byBjbGVhcjsKLQl9Ci0KLQlvaGRyID0gJnFwLT5zX2hkci51Lm90aDsKLQlpZiAocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKQotCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOwotCi1hZ2FpbjoKLQkvKiBDaGVjayBmb3IgYSBjb25zdHJ1Y3RlZCBwYWNrZXQgdG8gYmUgc2VudC4gKi8KLQlpZiAocXAtPnNfaGRyd29yZHMgIT0gMCkgewotCQkvKgotCQkgKiBJZiBubyBQSU8gYnVmcyBhcmUgYXZhaWxhYmxlLCByZXR1cm4uICBBbiBpbnRlcnJ1cHQgd2lsbAotCQkgKiBjYWxsIGlwYXRoX2liX3Bpb2J1ZmF2YWlsKCkgd2hlbiBvbmUgaXMgYXZhaWxhYmxlLgotCQkgKi8KLQkJX1ZFUkJTX0lORk8oImggJXUgJXBcbiIsIHFwLT5zX2hkcndvcmRzLCAmcXAtPnNfaGRyKTsKLQkJX1ZFUkJTX0lORk8oImQgJXUgJXAgJXUgJXAgJXUgJXUgJXUgJXVcbiIsIHFwLT5zX2N1cl9zaXplLAotCQkJICAgIHFwLT5zX2N1cl9zZ2UtPnNnX2xpc3QsCi0JCQkgICAgcXAtPnNfY3VyX3NnZS0+bnVtX3NnZSwKLQkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ2UudmFkZHIsCi0JCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLnNnZV9sZW5ndGgsCi0JCQkgICAgcXAtPnNfY3VyX3NnZS0+c2dlLmxlbmd0aCwKLQkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ2UubSwKLQkJCSAgICBxcC0+c19jdXJfc2dlLT5zZ2Uubik7Ci0JCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIHFwLT5zX2hkcndvcmRzLAotCQkJCSAgICAgKHUzMiAqKSAmcXAtPnNfaGRyLCBxcC0+c19jdXJfc2l6ZSwKLQkJCQkgICAgIHFwLT5zX2N1cl9zZ2UpKSB7Ci0JCQlpcGF0aF9ub19idWZzX2F2YWlsYWJsZShxcCwgZGV2KTsKLQkJCWdvdG8gYmFpbDsKLQkJfQotCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7Ci0JCS8qIFJlY29yZCB0aGF0IHdlIHNlbnQgdGhlIHBhY2tldCBhbmQgc19oZHIgaXMgZW1wdHkuICovCi0JCXFwLT5zX2hkcndvcmRzID0gMDsKLQl9Ci0KLQkvKgotCSAqIFRoZSBsb2NrIGlzIG5lZWRlZCB0byBzeW5jaHJvbml6ZSBiZXR3ZWVuIHNldHRpbmcKLQkgKiBxcC0+c19hY2tfc3RhdGUsIHJlc2VuZCB0aW1lciwgYW5kIHBvc3Rfc2VuZCgpLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7Ci0KLQkvKiBTZW5kaW5nIHJlc3BvbnNlcyBoYXMgaGlnaGVyIHByaW9yaXR5IG92ZXIgc2VuZGluZyByZXF1ZXN0cy4gKi8KLQlpZiAocXAtPnNfYWNrX3N0YXRlICE9IE9QKEFDS05PV0xFREdFKSAmJgotCSAgICAoYnRoMCA9IGlwYXRoX21ha2VfcmNfYWNrKHFwLCBvaGRyLCBwbXR1KSkgIT0gMCkKLQkJYnRoMiA9IHFwLT5zX2Fja19wc24rKyAmIElQU19QU05fTUFTSzsKLQllbHNlIGlmICghaXBhdGhfbWFrZV9yY19yZXEocXAsIG9oZHIsIHBtdHUsICZidGgwLCAmYnRoMikpCi0JCWdvdG8gZG9uZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKLQotCS8qIENvbnN0cnVjdCB0aGUgaGVhZGVyLiAqLwotCWV4dHJhX2J5dGVzID0gKDQgLSBxcC0+c19jdXJfc2l6ZSkgJiAzOwotCW53b3JkcyA9IChxcC0+c19jdXJfc2l6ZSArIGV4dHJhX2J5dGVzKSA+PiAyOwotCWxyaDAgPSBJUFNfTFJIX0JUSDsKLQlpZiAodW5saWtlbHkocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSkgewotCQlpcGF0aF9tYWtlX3JjX2dyaChxcCwgJnFwLT5yZW1vdGVfYWhfYXR0ci5ncmgsIG53b3Jkcyk7Ci0JCWxyaDAgPSBJUFNfTFJIX0dSSDsKLQl9Ci0JbHJoMCB8PSBxcC0+cmVtb3RlX2FoX2F0dHIuc2wgPDwgNDsKLQlxcC0+c19oZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7Ci0JcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKLQlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYocXAtPnNfaGRyd29yZHMgKyBud29yZHMgKwotCQkJCSAgICAgICBTSVpFX09GX0NSQyk7Ci0JcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOwotCWJ0aDAgfD0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7Ci0JYnRoMCB8PSBleHRyYV9ieXRlcyA8PCAyMDsKLQlvaGRyLT5idGhbMF0gPSBjcHVfdG9fYmUzMihidGgwKTsKLQlvaGRyLT5idGhbMV0gPSBjcHVfdG9fYmUzMihxcC0+cmVtb3RlX3Fwbik7Ci0Jb2hkci0+YnRoWzJdID0gY3B1X3RvX2JlMzIoYnRoMik7Ci0KLQkvKiBDaGVjayBmb3IgbW9yZSB3b3JrIHRvIGRvLiAqLwotCWdvdG8gYWdhaW47Ci0KLWRvbmU6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwotY2xlYXI6Ci0JY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKLWJhaWw6Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgdm9pZCBzZW5kX3JjX2FjayhzdHJ1Y3QgaXBhdGhfcXAgKnFwKQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwogCXUxNiBscmgwOwogCXUzMiBidGgwOworCXUzMiBod29yZHM7CisJc3RydWN0IGlwYXRoX2liX2hlYWRlciBoZHI7CiAJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHI7CiAKIAkvKiBDb25zdHJ1Y3QgdGhlIGhlYWRlci4gKi8KLQlvaGRyID0gJnFwLT5zX2hkci51Lm90aDsKLQlscmgwID0gSVBTX0xSSF9CVEg7CisJb2hkciA9ICZoZHIudS5vdGg7CisJbHJoMCA9IElQQVRIX0xSSF9CVEg7CiAJLyogaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzIExSSCtCVEgrQUVUSCA9ICg4KzEyKzQpLzQuICovCi0JcXAtPnNfaGRyd29yZHMgPSA2OworCWh3b3JkcyA9IDY7CiAJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKLQkJaXBhdGhfbWFrZV9yY19ncmgocXAsICZxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLCAwKTsKLQkJb2hkciA9ICZxcC0+c19oZHIudS5sLm90aDsKLQkJbHJoMCA9IElQU19MUkhfR1JIOworCQlod29yZHMgKz0gaXBhdGhfbWFrZV9ncmgoZGV2LCAmaGRyLnUubC5ncmgsCisJCQkJCSAmcXAtPnJlbW90ZV9haF9hdHRyLmdyaCwKKwkJCQkJIGh3b3JkcywgMCk7CisJCW9oZHIgPSAmaGRyLnUubC5vdGg7CisJCWxyaDAgPSBJUEFUSF9MUkhfR1JIOwogCX0KKwkvKiByZWFkIHBrZXlfaW5kZXggdy9vIGxvY2sgKGl0cyBhdG9taWMpICovCiAJYnRoMCA9IGlwYXRoX2xheWVyX2dldF9wa2V5KGRldi0+ZGQsIHFwLT5zX3BrZXlfaW5kZXgpOwotCW9oZHItPnUuYWV0aCA9IGlwYXRoX2NvbXB1dGVfYWV0aChxcCk7Ci0JaWYgKHFwLT5zX2Fja19zdGF0ZSA+PSBPUChDT01QQVJFX1NXQVApKSB7Ci0JCWJ0aDAgfD0gSUJfT1BDT0RFX0FUT01JQ19BQ0tOT1dMRURHRSA8PCAyNDsKLQkJb2hkci0+dS5hdC5hdG9taWNfYWNrX2V0aCA9IGNwdV90b19iZTY0KHFwLT5zX2Fja19hdG9taWMpOwotCQlxcC0+c19oZHJ3b3JkcyArPSBzaXplb2Yob2hkci0+dS5hdC5hdG9taWNfYWNrX2V0aCkgLyA0OwotCX0KKwlpZiAocXAtPnJfbmFrX3N0YXRlKQorCQlvaGRyLT51LmFldGggPSBjcHVfdG9fYmUzMigocXAtPnJfbXNuICYgSVBBVEhfTVNOX01BU0spIHwKKwkJCQkJICAgIChxcC0+cl9uYWtfc3RhdGUgPDwKKwkJCQkJICAgICBJUEFUSF9BRVRIX0NSRURJVF9TSElGVCkpOwogCWVsc2UKKwkJb2hkci0+dS5hZXRoID0gaXBhdGhfY29tcHV0ZV9hZXRoKHFwKTsKKwlpZiAocXAtPnJfYWNrX3N0YXRlID49IE9QKENPTVBBUkVfU1dBUCkpIHsKKwkJYnRoMCB8PSBPUChBVE9NSUNfQUNLTk9XTEVER0UpIDw8IDI0OworCQlvaGRyLT51LmF0LmF0b21pY19hY2tfZXRoID0gY3B1X3RvX2JlNjQocXAtPnJfYXRvbWljX2RhdGEpOworCQlod29yZHMgKz0gc2l6ZW9mKG9oZHItPnUuYXQuYXRvbWljX2Fja19ldGgpIC8gNDsKKwl9IGVsc2UKIAkJYnRoMCB8PSBPUChBQ0tOT1dMRURHRSkgPDwgMjQ7CiAJbHJoMCB8PSBxcC0+cmVtb3RlX2FoX2F0dHIuc2wgPDwgNDsKLQlxcC0+c19oZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7Ci0JcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKLQlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYocXAtPnNfaGRyd29yZHMgKyBTSVpFX09GX0NSQyk7Ci0JcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOworCWhkci5scmhbMF0gPSBjcHVfdG9fYmUxNihscmgwKTsKKwloZHIubHJoWzFdID0gY3B1X3RvX2JlMTYocXAtPnJlbW90ZV9haF9hdHRyLmRsaWQpOworCWhkci5scmhbMl0gPSBjcHVfdG9fYmUxNihod29yZHMgKyBTSVpFX09GX0NSQyk7CisJaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOwogCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOwogCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKLQlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+c19hY2tfcHNuICYgSVBTX1BTTl9NQVNLKTsKKwlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+cl9hY2tfcHNuICYgSVBBVEhfUFNOX01BU0spOwogCiAJLyoKIAkgKiBJZiB3ZSBjYW4gc2VuZCB0aGUgQUNLLCBjbGVhciB0aGUgQUNLIHN0YXRlLgogCSAqLwotCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIHFwLT5zX2hkcndvcmRzLCAodTMyICopICZxcC0+c19oZHIsCi0JCQkgICAgIDAsIE5VTEwpID09IDApIHsKLQkJcXAtPnNfYWNrX3N0YXRlID0gT1AoQUNLTk9XTEVER0UpOwotCQlkZXYtPm5fcmNfcWFja3MrKzsKKwlpZiAoaXBhdGhfdmVyYnNfc2VuZChkZXYtPmRkLCBod29yZHMsICh1MzIgKikgJmhkciwgMCwgTlVMTCkgPT0gMCkgeworCQlxcC0+cl9hY2tfc3RhdGUgPSBPUChBQ0tOT1dMRURHRSk7CiAJCWRldi0+bl91bmljYXN0X3htaXQrKzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBhcmUgb3V0IG9mIFBJTyBidWZmZXJzIGF0IHRoZSBtb21lbnQuCisJCSAqIFBhc3MgcmVzcG9uc2liaWxpdHkgZm9yIHNlbmRpbmcgdGhlIEFDSyB0byB0aGUKKwkJICogc2VuZCB0YXNrbGV0IHNvIHRoYXQgd2hlbiBhIFBJTyBidWZmZXIgYmVjb21lcworCQkgKiBhdmFpbGFibGUsIHRoZSBBQ0sgaXMgc2VudCBhaGVhZCBvZiBvdGhlciBvdXRnb2luZworCQkgKiBwYWNrZXRzLgorCQkgKi8KKwkJZGV2LT5uX3JjX3FhY2tzKys7CisJCXNwaW5fbG9ja19pcnEoJnFwLT5zX2xvY2spOworCQkvKiBEb24ndCBjb2FsZXNjZSBpZiBhIFJETUEgcmVhZCBvciBhdG9taWMgaXMgcGVuZGluZy4gKi8KKwkJaWYgKHFwLT5zX2Fja19zdGF0ZSA9PSBPUChBQ0tOT1dMRURHRSkgfHwKKwkJICAgIHFwLT5zX2Fja19zdGF0ZSA8IE9QKFJETUFfUkVBRF9SRVFVRVNUKSkgeworCQkJcXAtPnNfYWNrX3N0YXRlID0gcXAtPnJfYWNrX3N0YXRlOworCQkJcXAtPnNfbmFrX3N0YXRlID0gcXAtPnJfbmFrX3N0YXRlOworCQkJcXAtPnNfYWNrX3BzbiA9IHFwLT5yX2Fja19wc247CisJCQlxcC0+cl9hY2tfc3RhdGUgPSBPUChBQ0tOT1dMRURHRSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZxcC0+c19sb2NrKTsKKworCQkvKiBDYWxsIGlwYXRoX2RvX3JjX3NlbmQoKSBpbiBhbm90aGVyIHRocmVhZC4gKi8KKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmcXAtPnNfdGFzayk7CiAJfQogfQogCiAvKioKKyAqIHJlc2V0X3BzbiAtIHJlc2V0IHRoZSBRUCBzdGF0ZSB0byBzZW5kIHN0YXJ0aW5nIGZyb20gUFNOCisgKiBAcXA6IHRoZSBRUAorICogQHBzbjogdGhlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgdG8gcmVzdGFydCBhdAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBBQ0sKKyAqIGZvciB0aGUgZ2l2ZW4gUVAuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsIHdpdGggdGhlIFFQIHNfbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZCByZXNldF9wc24oc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIHBzbikKK3sKKwl1MzIgbiA9IHFwLT5zX2xhc3Q7CisJc3RydWN0IGlwYXRoX3N3cWUgKndxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJdTMyIG9wY29kZTsKKworCXFwLT5zX2N1ciA9IG47CisKKwkvKgorCSAqIElmIHdlIGFyZSBzdGFydGluZyB0aGUgcmVxdWVzdCBmcm9tIHRoZSBiZWdpbm5pbmcsCisJICogbGV0IHRoZSBub3JtYWwgc2VuZCBjb2RlIGhhbmRsZSBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPD0gMCkgeworCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBGaW5kIHRoZSB3b3JrIHJlcXVlc3Qgb3Bjb2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFBTTi4gKi8KKwlvcGNvZGUgPSB3cWUtPndyLm9wY29kZTsKKwlmb3IgKDs7KSB7CisJCWludCBkaWZmOworCisJCWlmICgrK24gPT0gcXAtPnNfc2l6ZSkKKwkJCW4gPSAwOworCQlpZiAobiA9PSBxcC0+c190YWlsKQorCQkJYnJlYWs7CisJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7CisJCWRpZmYgPSBpcGF0aF9jbXAyNChwc24sIHdxZS0+cHNuKTsKKwkJaWYgKGRpZmYgPCAwKQorCQkJYnJlYWs7CisJCXFwLT5zX2N1ciA9IG47CisJCS8qCisJCSAqIElmIHdlIGFyZSBzdGFydGluZyB0aGUgcmVxdWVzdCBmcm9tIHRoZSBiZWdpbm5pbmcsCisJCSAqIGxldCB0aGUgbm9ybWFsIHNlbmQgY29kZSBoYW5kbGUgaW5pdGlhbGl6YXRpb24uCisJCSAqLworCQlpZiAoZGlmZiA9PSAwKSB7CisJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJb3Bjb2RlID0gd3FlLT53ci5vcGNvZGU7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIHN0YXRlIHRvIHJlc3RhcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHJlcXVlc3QuCisJICogRG9uJ3QgY2hhbmdlIHRoZSBzX3NnZSwgc19jdXJfc2dlLCBvciBzX2N1cl9zaXplLgorCSAqIFNlZSBpcGF0aF9kb19yY19zZW5kKCkuCisJICovCisJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIElCX1dSX1NFTkQ6CisJY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgorCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk7CisJCWJyZWFrOworCisJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKKwkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk7CisJCWJyZWFrOworCisJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoKKwkJICogVGhpcyBjYXNlIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgaXRzIG9ubHkKKwkJICogb25lIFBTTiBwZXIgcmVxLgorCQkgKi8KKwkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOworCX0KK2RvbmU6CisJcXAtPnNfcHNuID0gcHNuOworfQorCisvKioKICAqIGlwYXRoX3Jlc3RhcnRfcmMgLSBiYWNrIHVwIHJlcXVlc3RlciB0byByZXNlbmQgdGhlIGxhc3QgdW4tQUNLZWQgcmVxdWVzdAogICogQHFwOiB0aGUgUVAgdG8gcmVzdGFydAogICogQHBzbjogcGFja2V0IHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIHJlcXVlc3QKICAqIEB3YzogdGhlIHdvcmsgY29tcGxldGlvbiByZXF1ZXN0CiAgKgotICogVGhlIFFQIHNfbG9jayBzaG91bGQgYmUgaGVsZC4KKyAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHZvaWQgaXBhdGhfcmVzdGFydF9yYyhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgcHNuLCBzdHJ1Y3QgaWJfd2MgKndjKQogewogCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OwotCXUzMiBuOwogCiAJLyoKIAkgKiBJZiB0aGVyZSBhcmUgbm8gcmVxdWVzdHMgcGVuZGluZywgd2UgYXJlIGRvbmUuCkBAIC03MzUsNjIgKzcyOCw3IEBACiAJZWxzZQogCQlkZXYtPm5fcmNfcmVzZW5kcyArPSAoaW50KXFwLT5zX3BzbiAtIChpbnQpcHNuOwogCi0JLyoKLQkgKiBJZiB3ZSBhcmUgc3RhcnRpbmcgdGhlIHJlcXVlc3QgZnJvbSB0aGUgYmVnaW5uaW5nLCBsZXQgdGhlIG5vcm1hbAotCSAqIHNlbmQgY29kZSBoYW5kbGUgaW5pdGlhbGl6YXRpb24uCi0JICovCi0JcXAtPnNfY3VyID0gcXAtPnNfbGFzdDsKLQlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPD0gMCkgewotCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7Ci0JCXFwLT5zX3BzbiA9IHdxZS0+cHNuOwotCX0gZWxzZSB7Ci0JCW4gPSBxcC0+c19jdXI7Ci0JCWZvciAoOzspIHsKLQkJCWlmICgrK24gPT0gcXAtPnNfc2l6ZSkKLQkJCQluID0gMDsKLQkJCWlmIChuID09IHFwLT5zX3RhaWwpIHsKLQkJCQlpZiAoaXBhdGhfY21wMjQocHNuLCBxcC0+c19uZXh0X3BzbikgPj0gMCkgewotCQkJCQlxcC0+c19jdXIgPSBuOwotCQkJCQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIG4pOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgbik7Ci0JCQlpZiAoaXBhdGhfY21wMjQocHNuLCB3cWUtPnBzbikgPCAwKQotCQkJCWJyZWFrOwotCQkJcXAtPnNfY3VyID0gbjsKLQkJfQotCQlxcC0+c19wc24gPSBwc247Ci0KLQkJLyoKLQkJICogUmVzZXQgdGhlIHN0YXRlIHRvIHJlc3RhcnQgaW4gdGhlIG1pZGRsZSBvZiBhIHJlcXVlc3QuCi0JCSAqIERvbid0IGNoYW5nZSB0aGUgc19zZ2UsIHNfY3VyX3NnZSwgb3Igc19jdXJfc2l6ZS4KLQkJICogU2VlIGlwYXRoX2RvX3JjX3NlbmQoKS4KLQkJICovCi0JCXN3aXRjaCAod3FlLT53ci5vcGNvZGUpIHsKLQkJY2FzZSBJQl9XUl9TRU5EOgotCQljYXNlIElCX1dSX1NFTkRfV0lUSF9JTU06Ci0JCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk7Ci0JCQlicmVhazsKLQotCQljYXNlIElCX1dSX1JETUFfV1JJVEU6Ci0JCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKLQkJCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0xBU1QpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6Ci0JCQlxcC0+c19zdGF0ZSA9Ci0JCQkJT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJLyoKLQkJCSAqIFRoaXMgY2FzZSBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIGl0cyBvbmx5Ci0JCQkgKiBvbmUgUFNOIHBlciByZXEuCi0JCQkgKi8KLQkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKLQkJfQotCX0KKwlyZXNldF9wc24ocXAsIHBzbik7CiAKIGRvbmU6CiAJdGFza2xldF9oaV9zY2hlZHVsZSgmcXAtPnNfdGFzayk7CkBAIC04MDAsNzYgKzczOCwxNCBAQAogfQogCiAvKioKLSAqIHJlc2V0X3BzbiAtIHJlc2V0IHRoZSBRUCBzdGF0ZSB0byBzZW5kIHN0YXJ0aW5nIGZyb20gUFNOCi0gKiBAcXA6IHRoZSBRUAotICogQHBzbjogdGhlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgdG8gcmVzdGFydCBhdAotICoKLSAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBBQ0sKLSAqIGZvciB0aGUgZ2l2ZW4gUVAuCi0gKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsIHdpdGggdGhlIFFQIHNfbG9jayBoZWxkLgotICovCi1zdGF0aWMgdm9pZCByZXNldF9wc24oc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIHBzbikKLXsKLQlzdHJ1Y3QgaXBhdGhfc3dxZSAqd3FlOwotCXUzMiBuOwotCi0JbiA9IHFwLT5zX2N1cjsKLQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIG4pOwotCWZvciAoOzspIHsKLQkJaWYgKCsrbiA9PSBxcC0+c19zaXplKQotCQkJbiA9IDA7Ci0JCWlmIChuID09IHFwLT5zX3RhaWwpIHsKLQkJCWlmIChpcGF0aF9jbXAyNChwc24sIHFwLT5zX25leHRfcHNuKSA+PSAwKSB7Ci0JCQkJcXAtPnNfY3VyID0gbjsKLQkJCQl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIG4pOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJd3FlID0gZ2V0X3N3cWVfcHRyKHFwLCBuKTsKLQkJaWYgKGlwYXRoX2NtcDI0KHBzbiwgd3FlLT5wc24pIDwgMCkKLQkJCWJyZWFrOwotCQlxcC0+c19jdXIgPSBuOwotCX0KLQlxcC0+c19wc24gPSBwc247Ci0KLQkvKgotCSAqIFNldCB0aGUgc3RhdGUgdG8gcmVzdGFydCBpbiB0aGUgbWlkZGxlIG9mIGEKLQkgKiByZXF1ZXN0LiAgRG9uJ3QgY2hhbmdlIHRoZSBzX3NnZSwgc19jdXJfc2dlLCBvcgotCSAqIHNfY3VyX3NpemUuICBTZWUgaXBhdGhfZG9fcmNfc2VuZCgpLgotCSAqLwotCXN3aXRjaCAod3FlLT53ci5vcGNvZGUpIHsKLQljYXNlIElCX1dSX1NFTkQ6Ci0JY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgotCQlxcC0+c19zdGF0ZSA9IE9QKFJETUFfUkVBRF9SRVNQT05TRV9GSVJTVCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgotCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKLQkJcXAtPnNfc3RhdGUgPSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJQl9XUl9SRE1BX1JFQUQ6Ci0JCXFwLT5zX3N0YXRlID0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX01JRERMRSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJLyoKLQkJICogVGhpcyBjYXNlIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgaXRzIG9ubHkKLQkJICogb25lIFBTTiBwZXIgcmVxLgotCQkgKi8KLQkJcXAtPnNfc3RhdGUgPSBPUChTRU5EX0xBU1QpOwotCX0KLX0KLQotLyoqCiAgKiBkb19yY19hY2sgLSBwcm9jZXNzIGFuIGluY29taW5nIFJDIEFDSwogICogQHFwOiB0aGUgUVAgdGhlIEFDSyBjYW1lIGluIG9uCiAgKiBAcHNuOiB0aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciBvZiB0aGUgQUNLCiAgKiBAb3Bjb2RlOiB0aGUgb3Bjb2RlIG9mIHRoZSByZXF1ZXN0IHRoYXQgcmVzdWx0ZWQgaW4gdGhlIEFDSwogICoKLSAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2KCkgdG8gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBBQ0sKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfcmNfcmN2X3Jlc3AoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIFJDIEFDSwogICogZm9yIHRoZSBnaXZlbiBRUC4KLSAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwgd2l0aCB0aGUgUVAgc19sb2NrIGhlbGQuCisgKiBDYWxsZWQgYXQgaW50ZXJydXB0IGxldmVsIHdpdGggdGhlIFFQIHNfbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICogUmV0dXJucyAxIGlmIE9LLCAwIGlmIGN1cnJlbnQgb3BlcmF0aW9uIHNob3VsZCBiZSBhYm9ydGVkIChOQUspLgogICovCiBzdGF0aWMgaW50IGRvX3JjX2FjayhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgYWV0aCwgdTMyIHBzbiwgaW50IG9wY29kZSkKQEAgLTEwMDYsMjYgKzg4MiwxNiBAQAogCQlpZiAocXAtPnNfbGFzdCA9PSBxcC0+c190YWlsKQogCQkJZ290byBiYWlsOwogCi0JCS8qIFRoZSBsYXN0IHZhbGlkIFBTTiBzZWVuIGlzIHRoZSBwcmV2aW91cyByZXF1ZXN0J3MuICovCi0JCXFwLT5zX2xhc3RfcHNuID0gd3FlLT5wc24gLSAxOworCQkvKiBUaGUgbGFzdCB2YWxpZCBQU04gaXMgdGhlIHByZXZpb3VzIFBTTi4gKi8KKwkJcXAtPnNfbGFzdF9wc24gPSBwc24gLSAxOwogCiAJCWRldi0+bl9yY19yZXNlbmRzICs9IChpbnQpcXAtPnNfcHNuIC0gKGludClwc247CiAKLQkJLyoKLQkJICogSWYgd2UgYXJlIHN0YXJ0aW5nIHRoZSByZXF1ZXN0IGZyb20gdGhlIGJlZ2lubmluZywgbGV0Ci0JCSAqIHRoZSBub3JtYWwgc2VuZCBjb2RlIGhhbmRsZSBpbml0aWFsaXphdGlvbi4KLQkJICovCi0JCXFwLT5zX2N1ciA9IHFwLT5zX2xhc3Q7Ci0JCXdxZSA9IGdldF9zd3FlX3B0cihxcCwgcXAtPnNfY3VyKTsKLQkJaWYgKGlwYXRoX2NtcDI0KHBzbiwgd3FlLT5wc24pIDw9IDApIHsKLQkJCXFwLT5zX3N0YXRlID0gT1AoU0VORF9MQVNUKTsKLQkJCXFwLT5zX3BzbiA9IHdxZS0+cHNuOwotCQl9IGVsc2UKLQkJCXJlc2V0X3BzbihxcCwgcHNuKTsKKwkJcmVzZXRfcHNuKHFwLCBwc24pOwogCiAJCXFwLT5zX3Jucl90aW1lb3V0ID0KLQkJCWliX2lwYXRoX3Jucl90YWJsZVsoYWV0aCA+PiBJUFNfQUVUSF9DUkVESVRfU0hJRlQpICYKLQkJCQkJICAgSVBTX0FFVEhfQ1JFRElUX01BU0tdOworCQkJaWJfaXBhdGhfcm5yX3RhYmxlWyhhZXRoID4+IElQQVRIX0FFVEhfQ1JFRElUX1NISUZUKSAmCisJCQkJCSAgIElQQVRIX0FFVEhfQ1JFRElUX01BU0tdOwogCQlpcGF0aF9pbnNlcnRfcm5yX3F1ZXVlKHFwKTsKIAkJZ290byBiYWlsOwogCkBAIC0xMDMzLDggKzg5OSw4IEBACiAJCS8qIFRoZSBsYXN0IHZhbGlkIFBTTiBzZWVuIGlzIHRoZSBwcmV2aW91cyByZXF1ZXN0J3MuICovCiAJCWlmIChxcC0+c19sYXN0ICE9IHFwLT5zX3RhaWwpCiAJCQlxcC0+c19sYXN0X3BzbiA9IHdxZS0+cHNuIC0gMTsKLQkJc3dpdGNoICgoYWV0aCA+PiBJUFNfQUVUSF9DUkVESVRfU0hJRlQpICYKLQkJCUlQU19BRVRIX0NSRURJVF9NQVNLKSB7CisJCXN3aXRjaCAoKGFldGggPj4gSVBBVEhfQUVUSF9DUkVESVRfU0hJRlQpICYKKwkJCUlQQVRIX0FFVEhfQ1JFRElUX01BU0spIHsKIAkJY2FzZSAwOgkvKiBQU04gc2VxdWVuY2UgZXJyb3IgKi8KIAkJCWRldi0+bl9zZXFfbmFrcysrOwogCQkJLyoKQEAgLTExODIsMzIgKzEwNDgsMzMgQEAKIAkJCWdvdG8gYWNrX2RvbmU7CiAJCX0KIAlyZG1hX3JlYWQ6Ci0JaWYgKHVubGlrZWx5KHFwLT5zX3N0YXRlICE9IE9QKFJETUFfUkVBRF9SRVFVRVNUKSkpCi0JCWdvdG8gYWNrX2RvbmU7Ci0JaWYgKHVubGlrZWx5KHRsZW4gIT0gKGhkcnNpemUgKyBwbXR1ICsgNCkpKQotCQlnb3RvIGFja19kb25lOwotCWlmICh1bmxpa2VseShwbXR1ID49IHFwLT5zX2xlbikpCi0JCWdvdG8gYWNrX2RvbmU7Ci0JLyogV2UgZ290IGEgcmVzcG9uc2Ugc28gdXBkYXRlIHRoZSB0aW1lb3V0LiAqLwotCWlmICh1bmxpa2VseShxcC0+c19sYXN0ID09IHFwLT5zX3RhaWwgfHwKLQkJICAgICBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpLT53ci5vcGNvZGUgIT0KLQkJICAgICBJQl9XUl9SRE1BX1JFQUQpKQotCQlnb3RvIGFja19kb25lOwotCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOwotCWlmIChxcC0+c19ybnJfdGltZW91dCA9PSAwICYmICFsaXN0X2VtcHR5KCZxcC0+dGltZXJ3YWl0KSkKLQkJbGlzdF9tb3ZlX3RhaWwoJnFwLT50aW1lcndhaXQsCi0JCQkgICAgICAgJmRldi0+cGVuZGluZ1tkZXYtPnBlbmRpbmdfaW5kZXhdKTsKLQlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOwotCS8qCi0JICogVXBkYXRlIHRoZSBSRE1BIHJlY2VpdmUgc3RhdGUgYnV0IGRvIHRoZSBjb3B5IHcvbyBob2xkaW5nIHRoZQotCSAqIGxvY2tzIGFuZCBibG9ja2luZyBpbnRlcnJ1cHRzLiAgWFhYIFlldCBhbm90aGVyIHBsYWNlIHRoYXQKLQkgKiBhZmZlY3RzIHJlbGF4ZWQgUkRNQSBvcmRlciBzaW5jZSB3ZSBkb24ndCB3YW50IHNfc2dlIG1vZGlmaWVkLgotCSAqLwotCXFwLT5zX2xlbiAtPSBwbXR1OwotCXFwLT5zX2xhc3RfcHNuID0gcHNuOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKLQlpcGF0aF9jb3B5X3NnZSgmcXAtPnNfc2dlLCBkYXRhLCBwbXR1KTsKLQlnb3RvIGJhaWw7CisJCWlmICh1bmxpa2VseShxcC0+c19zdGF0ZSAhPSBPUChSRE1BX1JFQURfUkVRVUVTVCkpKQorCQkJZ290byBhY2tfZG9uZTsKKwkJaWYgKHVubGlrZWx5KHRsZW4gIT0gKGhkcnNpemUgKyBwbXR1ICsgNCkpKQorCQkJZ290byBhY2tfZG9uZTsKKwkJaWYgKHVubGlrZWx5KHBtdHUgPj0gcXAtPnNfbGVuKSkKKwkJCWdvdG8gYWNrX2RvbmU7CisJCS8qIFdlIGdvdCBhIHJlc3BvbnNlIHNvIHVwZGF0ZSB0aGUgdGltZW91dC4gKi8KKwkJaWYgKHVubGlrZWx5KHFwLT5zX2xhc3QgPT0gcXAtPnNfdGFpbCB8fAorCQkJICAgICBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpLT53ci5vcGNvZGUgIT0KKwkJCSAgICAgSUJfV1JfUkRNQV9SRUFEKSkKKwkJCWdvdG8gYWNrX2RvbmU7CisJCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQlpZiAocXAtPnNfcm5yX3RpbWVvdXQgPT0gMCAmJiAhbGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCQlsaXN0X21vdmVfdGFpbCgmcXAtPnRpbWVyd2FpdCwKKwkJCQkgICAgICAgJmRldi0+cGVuZGluZ1tkZXYtPnBlbmRpbmdfaW5kZXhdKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+cGVuZGluZ19sb2NrKTsKKwkJLyoKKwkJICogVXBkYXRlIHRoZSBSRE1BIHJlY2VpdmUgc3RhdGUgYnV0IGRvIHRoZSBjb3B5IHcvbworCQkgKiBob2xkaW5nIHRoZSBsb2NrcyBhbmQgYmxvY2tpbmcgaW50ZXJydXB0cy4KKwkJICogWFhYIFlldCBhbm90aGVyIHBsYWNlIHRoYXQgYWZmZWN0cyByZWxheGVkIFJETUEgb3JkZXIKKwkJICogc2luY2Ugd2UgZG9uJ3Qgd2FudCBzX3NnZSBtb2RpZmllZC4KKwkJICovCisJCXFwLT5zX2xlbiAtPSBwbXR1OworCQlxcC0+c19sYXN0X3BzbiA9IHBzbjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnNfc2dlLCBkYXRhLCBwbXR1KTsKKwkJZ290byBiYWlsOwogCiAJY2FzZSBPUChSRE1BX1JFQURfUkVTUE9OU0VfTEFTVCk6CiAJCS8qIEFDS3MgUkVBRCByZXEuICovCkBAIC0xMjMwLDE4ICsxMDk3LDEyIEBACiAJCSAqIElDUkMgKDQpLgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHRsZW4gPD0gKGhkcnNpemUgKyBwYWQgKyA4KSkpIHsKLQkJCS8qCi0JCQkgKiBYWFggTmVlZCB0byBnZW5lcmF0ZSBhbiBlcnJvciBDUQotCQkJICogZW50cnkuCi0JCQkgKi8KKwkJCS8qIFhYWCBOZWVkIHRvIGdlbmVyYXRlIGFuIGVycm9yIENRIGVudHJ5LiAqLwogCQkJZ290byBhY2tfZG9uZTsKIAkJfQogCQl0bGVuIC09IGhkcnNpemUgKyBwYWQgKyA4OwogCQlpZiAodW5saWtlbHkodGxlbiAhPSBxcC0+c19sZW4pKSB7Ci0JCQkvKgotCQkJICogWFhYIE5lZWQgdG8gZ2VuZXJhdGUgYW4gZXJyb3IgQ1EKLQkJCSAqIGVudHJ5LgotCQkJICovCisJCQkvKiBYWFggTmVlZCB0byBnZW5lcmF0ZSBhbiBlcnJvciBDUSBlbnRyeS4gKi8KIAkJCWdvdG8gYWNrX2RvbmU7CiAJCX0KIAkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKQEAgLTEyNTQsOSArMTExNSwxMiBAQAogCQlpZiAoZG9fcmNfYWNrKHFwLCBhZXRoLCBwc24sIE9QKFJETUFfUkVBRF9SRVNQT05TRV9MQVNUKSkpIHsKIAkJCS8qCiAJCQkgKiBDaGFuZ2UgdGhlIHN0YXRlIHNvIHdlIGNvbnRpbXVlCi0JCQkgKiBwcm9jZXNzaW5nIG5ldyByZXF1ZXN0cy4KKwkJCSAqIHByb2Nlc3NpbmcgbmV3IHJlcXVlc3RzIGFuZCB3YWtlIHVwIHRoZQorCQkJICogdGFza2xldCBpZiB0aGVyZSBhcmUgcG9zdGVkIHNlbmRzLgogCQkJICovCiAJCQlxcC0+c19zdGF0ZSA9IE9QKFNFTkRfTEFTVCk7CisJCQlpZiAocXAtPnNfdGFpbCAhPSBxcC0+c19oZWFkKQorCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOwogCQl9CiAJCWdvdG8gYWNrX2RvbmU7CiAJfQpAQCAtMTMwMiwxOCArMTE2NiwxNiBAQAogCQkgKiBEb24ndCBxdWV1ZSB0aGUgTkFLIGlmIGEgUkRNQSByZWFkLCBhdG9taWMsIG9yCiAJCSAqIE5BSyBpcyBwZW5kaW5nIHRob3VnaC4KIAkJICovCi0JCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7Ci0JCWlmICgocXAtPnNfYWNrX3N0YXRlID49IE9QKFJETUFfUkVBRF9SRVFVRVNUKSAmJgotCQkgICAgIHFwLT5zX2Fja19zdGF0ZSAhPSBJQl9PUENPREVfQUNLTk9XTEVER0UpIHx8Ci0JCSAgICBxcC0+c19uYWtfc3RhdGUgIT0gMCkgewotCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQlpZiAocXAtPnNfYWNrX3N0YXRlICE9IE9QKEFDS05PV0xFREdFKSB8fAorCQkgICAgcXAtPnJfbmFrX3N0YXRlICE9IDApCiAJCQlnb3RvIGRvbmU7CisJCWlmIChxcC0+cl9hY2tfc3RhdGUgPCBPUChDT01QQVJFX1NXQVApKSB7CisJCQlxcC0+cl9hY2tfc3RhdGUgPSBPUChTRU5EX09OTFkpOworCQkJcXAtPnJfbmFrX3N0YXRlID0gSUJfTkFLX1BTTl9FUlJPUjsKKwkJCS8qIFVzZSB0aGUgZXhwZWN0ZWQgUFNOLiAqLworCQkJcXAtPnJfYWNrX3BzbiA9IHFwLT5yX3BzbjsKIAkJfQotCQlxcC0+c19hY2tfc3RhdGUgPSBPUChTRU5EX09OTFkpOwotCQlxcC0+c19uYWtfc3RhdGUgPSBJQl9OQUtfUFNOX0VSUk9SOwotCQkvKiBVc2UgdGhlIGV4cGVjdGVkIFBTTi4gKi8KLQkJcXAtPnNfYWNrX3BzbiA9IHFwLT5yX3BzbjsKLQkJZ290byByZXNjaGVkOworCQlnb3RvIHNlbmRfYWNrOwogCX0KIAogCS8qCkBAIC0xMzI3LDI3ICsxMTg5LDcgQEAKIAkgKiBzZW5kIHRoZSBlYXJsaWVzdCBzbyB0aGF0IFJETUEgcmVhZHMgY2FuIGJlIHJlc3RhcnRlZCBhdAogCSAqIHRoZSByZXF1ZXN0ZXIncyBleHBlY3RlZCBQU04uCiAJICovCi0Jc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKLQlpZiAocXAtPnNfYWNrX3N0YXRlICE9IElCX09QQ09ERV9BQ0tOT1dMRURHRSAmJgotCSAgICBpcGF0aF9jbXAyNChwc24sIHFwLT5zX2Fja19wc24pID49IDApIHsKLQkJaWYgKHFwLT5zX2Fja19zdGF0ZSA8IElCX09QQ09ERV9SRE1BX1JFQURfUkVRVUVTVCkKLQkJCXFwLT5zX2Fja19wc24gPSBwc247Ci0JCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKLQkJZ290byBkb25lOwotCX0KLQlzd2l0Y2ggKG9wY29kZSkgewotCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgotCQkvKgotCQkgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8gbm90IGNoYW5nZSBzX3JkbWFfc2dlCi0JCSAqIHdoaWxlIGlwYXRoX2RvX3JjX3NlbmQoKSBpcyB1c2luZyBpdCBhbmQgbm90Ci0JCSAqIGhvbGRpbmcgdGhlIHNfbG9jay4KLQkJICovCi0JCWlmIChxcC0+c19hY2tfc3RhdGUgIT0gT1AoQUNLTk9XTEVER0UpICYmCi0JCSAgICBxcC0+c19hY2tfc3RhdGUgPj0gSUJfT1BDT0RFX1JETUFfUkVBRF9SRVFVRVNUKSB7Ci0JCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7Ci0JCQlkZXYtPm5fcmRtYV9kdXBfYnVzeSsrOwotCQkJZ290byBkb25lOwotCQl9CisJaWYgKG9wY29kZSA9PSBPUChSRE1BX1JFQURfUkVRVUVTVCkpIHsKIAkJLyogUkVUSCBjb21lcyBhZnRlciBCVEggKi8KIAkJaWYgKCFoZWFkZXJfaW5fZGF0YSkKIAkJCXJldGggPSAmb2hkci0+dS5yYy5yZXRoOwpAQCAtMTM1NSw2ICsxMTk3LDIyIEBACiAJCQlyZXRoID0gKHN0cnVjdCBpYl9yZXRoICopZGF0YTsKIAkJCWRhdGEgKz0gc2l6ZW9mKCpyZXRoKTsKIAkJfQorCQkvKgorCQkgKiBJZiB3ZSByZWNlaXZlIGEgZHVwbGljYXRlIFJETUEgcmVxdWVzdCwgaXQgbWVhbnMgdGhlCisJCSAqIHJlcXVlc3RlciBzYXcgYSBzZXF1ZW5jZSBlcnJvciBhbmQgbmVlZHMgdG8gcmVzdGFydAorCQkgKiBmcm9tIGFuIGVhcmxpZXIgcG9pbnQuICBXZSBjYW4gYWJvcnQgdGhlIGN1cnJlbnQKKwkJICogUkRNQSByZWFkIHNlbmQgaW4gdGhhdCBjYXNlLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycSgmcXAtPnNfbG9jayk7CisJCWlmIChxcC0+c19hY2tfc3RhdGUgIT0gT1AoQUNLTk9XTEVER0UpICYmCisJCSAgICAocXAtPnNfaGRyd29yZHMgfHwgaXBhdGhfY21wMjQocHNuLCBxcC0+c19hY2tfcHNuKSA+PSAwKSkgeworCQkJLyoKKwkJCSAqIFdlIGFyZSBhbHJlYWR5IHNlbmRpbmcgZWFybGllciByZXF1ZXN0ZWQgZGF0YS4KKwkJCSAqIERvbid0IGFib3J0IGl0IHRvIHNlbmQgbGF0ZXIgb3V0IG9mIHNlcXVlbmNlIGRhdGEuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycSgmcXAtPnNfbG9jayk7CisJCQlnb3RvIGRvbmU7CisJCX0KIAkJcXAtPnNfcmRtYV9sZW4gPSBiZTMyX3RvX2NwdShyZXRoLT5sZW5ndGgpOwogCQlpZiAocXAtPnNfcmRtYV9sZW4gIT0gMCkgewogCQkJdTMyIHJrZXkgPSBiZTMyX3RvX2NwdShyZXRoLT5ya2V5KTsKQEAgLTEzNjgsOCArMTIyNiwxMCBAQAogCQkJb2sgPSBpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5zX3JkbWFfc2dlLAogCQkJCQkgICBxcC0+c19yZG1hX2xlbiwgdmFkZHIsIHJrZXksCiAJCQkJCSAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7Ci0JCQlpZiAodW5saWtlbHkoIW9rKSkKKwkJCWlmICh1bmxpa2VseSghb2spKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZxcC0+c19sb2NrKTsKIAkJCQlnb3RvIGRvbmU7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlxcC0+c19yZG1hX3NnZS5zZ19saXN0ID0gTlVMTDsKIAkJCXFwLT5zX3JkbWFfc2dlLm51bV9zZ2UgPSAwOwpAQCAtMTM3OCwyNSArMTIzOCw0NCBAQAogCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLmxlbmd0aCA9IDA7CiAJCQlxcC0+c19yZG1hX3NnZS5zZ2Uuc2dlX2xlbmd0aCA9IDA7CiAJCX0KLQkJYnJlYWs7CisJCXFwLT5zX2Fja19zdGF0ZSA9IG9wY29kZTsKKwkJcXAtPnNfYWNrX3BzbiA9IHBzbjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZxcC0+c19sb2NrKTsKKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmcXAtPnNfdGFzayk7CisJCWdvdG8gc2VuZF9hY2s7CisJfQogCisJLyoKKwkgKiBBIHBlbmRpbmcgUkRNQSByZWFkIHdpbGwgQUNLIGFueXRoaW5nIGJlZm9yZSBpdCBzbworCSAqIGlnbm9yZSBlYXJsaWVyIGR1cGxpY2F0ZSByZXF1ZXN0cy4KKwkgKi8KKwlpZiAocXAtPnNfYWNrX3N0YXRlICE9IE9QKEFDS05PV0xFREdFKSkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBJZiBhbiBBQ0sgaXMgcGVuZGluZywgZG9uJ3QgcmVwbGFjZSB0aGUgcGVuZGluZyBBQ0sKKwkgKiB3aXRoIGFuIGVhcmxpZXIgb25lIHNpbmNlIHRoZSBsYXRlciBvbmUgd2lsbCBBQ0sgdGhlIGVhcmxpZXIuCisJICogQWxzbywgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcGVuZGluZyBhdG9taWMsIHNlbmQgaXQuCisJICovCisJaWYgKHFwLT5yX2Fja19zdGF0ZSAhPSBPUChBQ0tOT1dMRURHRSkgJiYKKwkgICAgKGlwYXRoX2NtcDI0KHBzbiwgcXAtPnJfYWNrX3BzbikgPD0gMCB8fAorCSAgICAgcXAtPnJfYWNrX3N0YXRlID49IE9QKENPTVBBUkVfU1dBUCkpKQorCQlnb3RvIHNlbmRfYWNrOworCXN3aXRjaCAob3Bjb2RlKSB7CiAJY2FzZSBPUChDT01QQVJFX1NXQVApOgogCWNhc2UgT1AoRkVUQ0hfQUREKToKIAkJLyoKLQkJICogQ2hlY2sgZm9yIHRoZSBQU04gb2YgdGhlIGxhc3QgYXRvbWljIG9wZXJhdGlvbnMKKwkJICogQ2hlY2sgZm9yIHRoZSBQU04gb2YgdGhlIGxhc3QgYXRvbWljIG9wZXJhdGlvbgogCQkgKiBwZXJmb3JtZWQgYW5kIHJlc2VuZCB0aGUgcmVzdWx0IGlmIGZvdW5kLgogCQkgKi8KLQkJaWYgKChwc24gJiBJUFNfUFNOX01BU0spICE9IHFwLT5yX2F0b21pY19wc24pIHsKLQkJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwkJaWYgKChwc24gJiBJUEFUSF9QU05fTUFTSykgIT0gcXAtPnJfYXRvbWljX3BzbikKIAkJCWdvdG8gZG9uZTsKLQkJfQotCQlxcC0+c19hY2tfYXRvbWljID0gcXAtPnJfYXRvbWljX2RhdGE7CiAJCWJyZWFrOwogCX0KLQlxcC0+c19hY2tfc3RhdGUgPSBvcGNvZGU7Ci0JcXAtPnNfbmFrX3N0YXRlID0gMDsKLQlxcC0+c19hY2tfcHNuID0gcHNuOwotcmVzY2hlZDoKKwlxcC0+cl9hY2tfc3RhdGUgPSBvcGNvZGU7CisJcXAtPnJfbmFrX3N0YXRlID0gMDsKKwlxcC0+cl9hY2tfcHNuID0gcHNuOworc2VuZF9hY2s6CiAJcmV0dXJuIDA7CiAKIGRvbmU6CkBAIC0xNDI0LDcgKzEzMDMsNiBAQAogCXUzMiBoZHJzaXplOwogCXUzMiBwc247CiAJdTMyIHBhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpYl93YyB3YzsKIAl1MzIgcG10dSA9IGliX210dV9lbnVtX3RvX2ludChxcC0+cGF0aF9tdHUpOwogCWludCBkaWZmOwpAQCAtMTQ1MywxMSArMTMzMSw2IEBACiAJCX0gZWxzZQogCQkJcHNuID0gYmUzMl90b19jcHUob2hkci0+YnRoWzJdKTsKIAl9Ci0JLyoKLQkgKiBUaGUgb3Bjb2RlIGlzIGluIHRoZSBsb3cgYnl0ZSB3aGVuIGl0cyBpbiBuZXR3b3JrIG9yZGVyCi0JICogKHRvcCBieXRlIHdoZW4gaW4gaG9zdCBvcmRlcikuCi0JICovCi0Jb3Bjb2RlID0gYmUzMl90b19jcHUob2hkci0+YnRoWzBdKSA+PiAyNDsKIAogCS8qCiAJICogUHJvY2VzcyByZXNwb25zZXMgKEFDS3MpIGJlZm9yZSBhbnl0aGluZyBlbHNlLiAgTm90ZSB0aGF0IHRoZQpAQCAtMTQ2NSwyMiArMTMzOCwyMSBAQAogCSAqIHF1ZXVlIHJhdGhlciB0aGFuIHRoZSBleHBlY3RlZCByZWNlaXZlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIuCiAJICogSW4gb3RoZXIgd29yZHMsIHRoaXMgUVAgaXMgdGhlIHJlcXVlc3Rlci4KIAkgKi8KKwlvcGNvZGUgPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMF0pID4+IDI0OwogCWlmIChvcGNvZGUgPj0gT1AoUkRNQV9SRUFEX1JFU1BPTlNFX0ZJUlNUKSAmJgogCSAgICBvcGNvZGUgPD0gT1AoQVRPTUlDX0FDS05PV0xFREdFKSkgewogCQlpcGF0aF9yY19yY3ZfcmVzcChkZXYsIG9oZHIsIGRhdGEsIHRsZW4sIHFwLCBvcGNvZGUsIHBzbiwKIAkJCQkgIGhkcnNpemUsIHBtdHUsIGhlYWRlcl9pbl9kYXRhKTsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKLQogCS8qIENvbXB1dGUgMjQgYml0cyB3b3J0aCBvZiBkaWZmZXJlbmNlLiAqLwogCWRpZmYgPSBpcGF0aF9jbXAyNChwc24sIHFwLT5yX3Bzbik7CiAJaWYgKHVubGlrZWx5KGRpZmYpKSB7CiAJCWlmIChpcGF0aF9yY19yY3ZfZXJyb3IoZGV2LCBvaGRyLCBkYXRhLCBxcCwgb3Bjb2RlLAogCQkJCSAgICAgICBwc24sIGRpZmYsIGhlYWRlcl9pbl9kYXRhKSkKIAkJCWdvdG8gZG9uZTsKLQkJZ290byByZXNjaGVkOworCQlnb3RvIHNlbmRfYWNrOwogCX0KIAogCS8qIENoZWNrIGZvciBvcGNvZGUgc2VxdWVuY2UgZXJyb3JzLiAqLwpAQCAtMTQ5MiwyMiArMTM2NCwxOSBAQAogCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfTEFTVF9XSVRIX0lNTUVESUFURSkpCiAJCQlicmVhazsKIAluYWNrX2ludjoKLQkvKgotCSAqIEEgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEgd3JpdGVzLiAgRG9uJ3QgcXVldWUgdGhlCi0JICogTkFLIGlmIGEgUkRNQSByZWFkLCBhdG9taWMsIG9yIE5BSyBpcyBwZW5kaW5nIHRob3VnaC4KLQkgKi8KLQlzcGluX2xvY2soJnFwLT5zX2xvY2spOwotCWlmIChxcC0+c19hY2tfc3RhdGUgPj0gT1AoUkRNQV9SRUFEX1JFUVVFU1QpICYmCi0JICAgIHFwLT5zX2Fja19zdGF0ZSAhPSBJQl9PUENPREVfQUNLTk9XTEVER0UpIHsKLQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOwotCQlnb3RvIGRvbmU7Ci0JfQotCS8qIFhYWCBGbHVzaCBXUUVzICovCi0JcXAtPnN0YXRlID0gSUJfUVBTX0VSUjsKLQlxcC0+c19hY2tfc3RhdGUgPSBPUChTRU5EX09OTFkpOwotCXFwLT5zX25ha19zdGF0ZSA9IElCX05BS19JTlZBTElEX1JFUVVFU1Q7Ci0JcXAtPnNfYWNrX3BzbiA9IHFwLT5yX3BzbjsKLQlnb3RvIHJlc2NoZWQ7CisJCS8qCisJCSAqIEEgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEgd3JpdGVzLgorCQkgKiBEb24ndCBxdWV1ZSB0aGUgTkFLIGlmIGEgUkRNQSByZWFkLCBhdG9taWMsIG9yIE5BSworCQkgKiBpcyBwZW5kaW5nIHRob3VnaC4KKwkJICovCisJCWlmIChxcC0+cl9hY2tfc3RhdGUgPj0gT1AoQ09NUEFSRV9TV0FQKSkKKwkJCWdvdG8gc2VuZF9hY2s7CisJCS8qIFhYWCBGbHVzaCBXUUVzICovCisJCXFwLT5zdGF0ZSA9IElCX1FQU19FUlI7CisJCXFwLT5yX2Fja19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJCXFwLT5yX25ha19zdGF0ZSA9IElCX05BS19JTlZBTElEX1JFUVVFU1Q7CisJCXFwLT5yX2Fja19wc24gPSBxcC0+cl9wc247CisJCWdvdG8gc2VuZF9hY2s7CiAKIAljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgogCWNhc2UgT1AoUkRNQV9XUklURV9NSURETEUpOgpAQCAtMTUxNywyMCArMTM4Niw2IEBACiAJCQlicmVhazsKIAkJZ290byBuYWNrX2ludjsKIAotCWNhc2UgT1AoUkRNQV9SRUFEX1JFUVVFU1QpOgotCWNhc2UgT1AoQ09NUEFSRV9TV0FQKToKLQljYXNlIE9QKEZFVENIX0FERCk6Ci0JCS8qCi0JCSAqIERyb3AgYWxsIG5ldyByZXF1ZXN0cyB1bnRpbCBhIHJlc3BvbnNlIGhhcyBiZWVuIHNlbnQuICBBCi0JCSAqIG5ldyByZXF1ZXN0IHRoZW4gQUNLcyB0aGUgUkRNQSByZXNwb25zZSB3ZSBzZW50LiAgUmVsYXhlZAotCQkgKiBvcmRlcmluZyB3b3VsZCBhbGxvdyBuZXcgcmVxdWVzdHMgdG8gYmUgcHJvY2Vzc2VkIGJ1dCB3ZQotCQkgKiB3b3VsZCBuZWVkIHRvIGtlZXAgYSBxdWV1ZSBvZiByd3FlJ3MgZm9yIGFsbCB0aGF0IGFyZSBpbgotCQkgKiBwcm9ncmVzcy4gIE5vdGUgdGhhdCB3ZSBjYW4ndCBSTlIgTkFLIHRoaXMgcmVxdWVzdCBzaW5jZQotCQkgKiB0aGUgUkRNQSBSRUFEIG9yIGF0b21pYyByZXNwb25zZSBpcyBhbHJlYWR5IHF1ZXVlZCB0byBiZQotCQkgKiBzZW50ICh1bmxlc3Mgd2UgaW1wbGVtZW50IGEgcmVzcG9uc2Ugc2VuZCBxdWV1ZSkuCi0JCSAqLwotCQlnb3RvIGRvbmU7Ci0KIAlkZWZhdWx0OgogCQlpZiAob3Bjb2RlID09IE9QKFNFTkRfTUlERExFKSB8fAogCQkgICAgb3Bjb2RlID09IE9QKFNFTkRfTEFTVCkgfHwKQEAgLTE1MzksNiArMTM5NCwxMSBAQAogCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfTEFTVCkgfHwKIAkJICAgIG9wY29kZSA9PSBPUChSRE1BX1dSSVRFX0xBU1RfV0lUSF9JTU1FRElBVEUpKQogCQkJZ290byBuYWNrX2ludjsKKwkJLyoKKwkJICogTm90ZSB0aGF0IGl0IGlzIHVwIHRvIHRoZSByZXF1ZXN0ZXIgdG8gbm90IHNlbmQgYSBuZXcKKwkJICogUkRNQSByZWFkIG9yIGF0b21pYyBvcGVyYXRpb24gYmVmb3JlIHJlY2VpdmluZyBhbiBBQ0sKKwkJICogZm9yIHRoZSBwcmV2aW91cyBvcGVyYXRpb24uCisJCSAqLwogCQlicmVhazsKIAl9CiAKQEAgLTE1NTUsMTcgKzE0MTUsMTIgQEAKIAkJCSAqIERvbid0IHF1ZXVlIHRoZSBOQUsgaWYgYSBSRE1BIHJlYWQgb3IgYXRvbWljCiAJCQkgKiBpcyBwZW5kaW5nIHRob3VnaC4KIAkJCSAqLwotCQkJc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKLQkJCWlmIChxcC0+c19hY2tfc3RhdGUgPj0KLQkJCSAgICBPUChSRE1BX1JFQURfUkVRVUVTVCkgJiYKLQkJCSAgICBxcC0+c19hY2tfc3RhdGUgIT0gSUJfT1BDT0RFX0FDS05PV0xFREdFKSB7Ci0JCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCXFwLT5zX2Fja19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7Ci0JCQlxcC0+c19uYWtfc3RhdGUgPSBJQl9STlJfTkFLIHwgcXAtPnNfbWluX3Jucl90aW1lcjsKLQkJCXFwLT5zX2Fja19wc24gPSBxcC0+cl9wc247Ci0JCQlnb3RvIHJlc2NoZWQ7CisJCQlpZiAocXAtPnJfYWNrX3N0YXRlID49IE9QKENPTVBBUkVfU1dBUCkpCisJCQkJZ290byBzZW5kX2FjazsKKwkJCXFwLT5yX2Fja19zdGF0ZSA9IE9QKFNFTkRfT05MWSk7CisJCQlxcC0+cl9uYWtfc3RhdGUgPSBJQl9STlJfTkFLIHwgcXAtPnJfbWluX3Jucl90aW1lcjsKKwkJCXFwLT5yX2Fja19wc24gPSBxcC0+cl9wc247CisJCQlnb3RvIHNlbmRfYWNrOwogCQl9CiAJCXFwLT5yX3Jjdl9sZW4gPSAwOwogCQkvKiBGQUxMVEhST1VHSCAqLwpAQCAtMTYyMiw3ICsxNDc3LDcgQEAKIAkJaWYgKHVubGlrZWx5KHdjLmJ5dGVfbGVuID4gcXAtPnJfbGVuKSkKIAkJCWdvdG8gbmFja19pbnY7CiAJCWlwYXRoX2NvcHlfc2dlKCZxcC0+cl9zZ2UsIGRhdGEsIHRsZW4pOwotCQlhdG9taWNfaW5jKCZxcC0+bXNuKTsKKwkJcXAtPnJfbXNuKys7CiAJCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9MQVNUKSB8fAogCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfT05MWSkpCiAJCQlicmVhazsKQEAgLTE2NjYsMjkgKzE1MjEsOCBAQAogCQkJb2sgPSBpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5yX3NnZSwKIAkJCQkJICAgcXAtPnJfbGVuLCB2YWRkciwgcmtleSwKIAkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSk7Ci0JCQlpZiAodW5saWtlbHkoIW9rKSkgewotCQkJbmFja19hY2M6Ci0JCQkJLyoKLQkJCQkgKiBBIE5BSyB3aWxsIEFDSyBlYXJsaWVyIHNlbmRzIGFuZCBSRE1BCi0JCQkJICogd3JpdGVzLiAgRG9uJ3QgcXVldWUgdGhlIE5BSyBpZiBhIFJETUEKLQkJCQkgKiByZWFkLCBhdG9taWMsIG9yIE5BSyBpcyBwZW5kaW5nIHRob3VnaC4KLQkJCQkgKi8KLQkJCQlzcGluX2xvY2soJnFwLT5zX2xvY2spOwotCQkJCWlmIChxcC0+c19hY2tfc3RhdGUgPj0KLQkJCQkgICAgT1AoUkRNQV9SRUFEX1JFUVVFU1QpICYmCi0JCQkJICAgIHFwLT5zX2Fja19zdGF0ZSAhPQotCQkJCSAgICBJQl9PUENPREVfQUNLTk9XTEVER0UpIHsKLQkJCQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCS8qIFhYWCBGbHVzaCBXUUVzICovCi0JCQkJcXAtPnN0YXRlID0gSUJfUVBTX0VSUjsKLQkJCQlxcC0+c19hY2tfc3RhdGUgPSBPUChSRE1BX1dSSVRFX09OTFkpOwotCQkJCXFwLT5zX25ha19zdGF0ZSA9Ci0JCQkJCUlCX05BS19SRU1PVEVfQUNDRVNTX0VSUk9SOwotCQkJCXFwLT5zX2Fja19wc24gPSBxcC0+cl9wc247Ci0JCQkJZ290byByZXNjaGVkOwotCQkJfQorCQkJaWYgKHVubGlrZWx5KCFvaykpCisJCQkJZ290byBuYWNrX2FjYzsKIAkJfSBlbHNlIHsKIAkJCXFwLT5yX3NnZS5zZ19saXN0ID0gTlVMTDsKIAkJCXFwLT5yX3NnZS5zZ2UubXIgPSBOVUxMOwpAQCAtMTcxNSwxMiArMTU0OSwxMCBAQAogCQkJcmV0aCA9IChzdHJ1Y3QgaWJfcmV0aCAqKWRhdGE7CiAJCQlkYXRhICs9IHNpemVvZigqcmV0aCk7CiAJCX0KLQkJc3Bpbl9sb2NrKCZxcC0+c19sb2NrKTsKLQkJaWYgKHFwLT5zX2Fja19zdGF0ZSAhPSBPUChBQ0tOT1dMRURHRSkgJiYKLQkJICAgIHFwLT5zX2Fja19zdGF0ZSA+PSBJQl9PUENPREVfUkRNQV9SRUFEX1JFUVVFU1QpIHsKLQkJCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQorCQlpZiAodW5saWtlbHkoIShxcC0+cXBfYWNjZXNzX2ZsYWdzICYKKwkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpKSkKKwkJCWdvdG8gbmFja19hY2M7CisJCXNwaW5fbG9ja19pcnEoJnFwLT5zX2xvY2spOwogCQlxcC0+c19yZG1hX2xlbiA9IGJlMzJfdG9fY3B1KHJldGgtPmxlbmd0aCk7CiAJCWlmIChxcC0+c19yZG1hX2xlbiAhPSAwKSB7CiAJCQl1MzIgcmtleSA9IGJlMzJfdG9fY3B1KHJldGgtPnJrZXkpOwpAQCAtMTczMiw3ICsxNTY0LDcgQEAKIAkJCQkJICAgcXAtPnNfcmRtYV9sZW4sIHZhZGRyLCBya2V5LAogCQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOwogCQkJaWYgKHVubGlrZWx5KCFvaykpIHsKLQkJCQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZxcC0+c19sb2NrKTsKIAkJCQlnb3RvIG5hY2tfYWNjOwogCQkJfQogCQkJLyoKQEAgLTE3NDksMjEgKzE1ODEsMjUgQEAKIAkJCXFwLT5zX3JkbWFfc2dlLnNnZS5sZW5ndGggPSAwOwogCQkJcXAtPnNfcmRtYV9zZ2Uuc2dlLnNnZV9sZW5ndGggPSAwOwogCQl9Ci0JCWlmICh1bmxpa2VseSghKHFwLT5xcF9hY2Nlc3NfZmxhZ3MgJgotCQkJICAgICAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCkpKQotCQkJZ290byBuYWNrX2FjYzsKIAkJLyoKIAkJICogV2UgbmVlZCB0byBpbmNyZW1lbnQgdGhlIE1TTiBoZXJlIGluc3RlYWQgb2Ygd2hlbiB3ZQogCQkgKiBmaW5pc2ggc2VuZGluZyB0aGUgcmVzdWx0IHNpbmNlIGEgZHVwbGljYXRlIHJlcXVlc3Qgd291bGQKIAkJICogaW5jcmVtZW50IGl0IG1vcmUgdGhhbiBvbmNlLgogCQkgKi8KLQkJYXRvbWljX2luYygmcXAtPm1zbik7CisJCXFwLT5yX21zbisrOworCiAJCXFwLT5zX2Fja19zdGF0ZSA9IG9wY29kZTsKLQkJcXAtPnNfbmFrX3N0YXRlID0gMDsKIAkJcXAtPnNfYWNrX3BzbiA9IHBzbjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZxcC0+c19sb2NrKTsKKwogCQlxcC0+cl9wc24rKzsKIAkJcXAtPnJfc3RhdGUgPSBvcGNvZGU7Ci0JCWdvdG8gcmRtYWRvbmU7CisJCXFwLT5yX25ha19zdGF0ZSA9IDA7CisKKwkJLyogQ2FsbCBpcGF0aF9kb19yY19zZW5kKCkgaW4gYW5vdGhlciB0aHJlYWQuICovCisJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOworCisJCWdvdG8gZG9uZTsKIAogCWNhc2UgT1AoQ09NUEFSRV9TV0FQKToKIAljYXNlIE9QKEZFVENIX0FERCk6IHsKQEAgLTE3OTIsNyArMTYyOCw3IEBACiAJCQlnb3RvIG5hY2tfYWNjOwogCQkvKiBQZXJmb3JtIGF0b21pYyBPUCBhbmQgc2F2ZSByZXN1bHQuICovCiAJCXNkYXRhID0gYmU2NF90b19jcHUoYXRldGgtPnN3YXBfZGF0YSk7Ci0JCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7CiAJCXFwLT5yX2F0b21pY19kYXRhID0gKih1NjQgKikgcXAtPnJfc2dlLnNnZS52YWRkcjsKIAkJaWYgKG9wY29kZSA9PSBPUChGRVRDSF9BREQpKQogCQkJKih1NjQgKikgcXAtPnJfc2dlLnNnZS52YWRkciA9CkBAIC0xODAwLDkgKzE2MzYsOSBAQAogCQllbHNlIGlmIChxcC0+cl9hdG9taWNfZGF0YSA9PQogCQkJIGJlNjRfdG9fY3B1KGF0ZXRoLT5jb21wYXJlX2RhdGEpKQogCQkJKih1NjQgKikgcXAtPnJfc2dlLnNnZS52YWRkciA9IHNkYXRhOwotCQlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOwotCQlhdG9taWNfaW5jKCZxcC0+bXNuKTsKLQkJcXAtPnJfYXRvbWljX3BzbiA9IHBzbiAmIElQU19QU05fTUFTSzsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCXFwLT5yX21zbisrOworCQlxcC0+cl9hdG9taWNfcHNuID0gcHNuICYgSVBBVEhfUFNOX01BU0s7CiAJCXBzbiB8PSAxIDw8IDMxOwogCQlicmVhazsKIAl9CkBAIC0xODEzLDQ0ICsxNjQ5LDM5IEBACiAJfQogCXFwLT5yX3BzbisrOwogCXFwLT5yX3N0YXRlID0gb3Bjb2RlOworCXFwLT5yX25ha19zdGF0ZSA9IDA7CiAJLyogU2VuZCBhbiBBQ0sgaWYgcmVxdWVzdGVkIG9yIHJlcXVpcmVkLiAqLwogCWlmIChwc24gJiAoMSA8PCAzMSkpIHsKIAkJLyoKIAkJICogQ29hbGVzY2UgQUNLcyB1bmxlc3MgdGhlcmUgaXMgYSBSRE1BIFJFQUQgb3IKIAkJICogQVRPTUlDIHBlbmRpbmcuCiAJCSAqLwotCQlzcGluX2xvY2soJnFwLT5zX2xvY2spOwotCQlpZiAocXAtPnNfYWNrX3N0YXRlID09IE9QKEFDS05PV0xFREdFKSB8fAotCQkgICAgcXAtPnNfYWNrX3N0YXRlIDwgSUJfT1BDT0RFX1JETUFfUkVBRF9SRVFVRVNUKSB7Ci0JCQlxcC0+c19hY2tfc3RhdGUgPSBvcGNvZGU7Ci0JCQlxcC0+c19uYWtfc3RhdGUgPSAwOwotCQkJcXAtPnNfYWNrX3BzbiA9IHBzbjsKLQkJCXFwLT5zX2Fja19hdG9taWMgPSBxcC0+cl9hdG9taWNfZGF0YTsKLQkJCWdvdG8gcmVzY2hlZDsKKwkJaWYgKHFwLT5yX2Fja19zdGF0ZSA8IE9QKENPTVBBUkVfU1dBUCkpIHsKKwkJCXFwLT5yX2Fja19zdGF0ZSA9IG9wY29kZTsKKwkJCXFwLT5yX2Fja19wc24gPSBwc247CiAJCX0KLQkJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCQlnb3RvIHNlbmRfYWNrOwogCX0KLWRvbmU6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOwotCWdvdG8gYmFpbDsKKwlnb3RvIGRvbmU7CiAKLXJlc2NoZWQ6CituYWNrX2FjYzoKIAkvKgotCSAqIFRyeSB0byBzZW5kIEFDSyByaWdodCBhd2F5IGJ1dCBub3QgaWYgaXBhdGhfZG9fcmNfc2VuZCgpIGlzCi0JICogYWN0aXZlLgorCSAqIEEgTkFLIHdpbGwgQUNLIGVhcmxpZXIgc2VuZHMgYW5kIFJETUEgd3JpdGVzLgorCSAqIERvbid0IHF1ZXVlIHRoZSBOQUsgaWYgYSBSRE1BIHJlYWQsIGF0b21pYywgb3IgTkFLCisJICogaXMgcGVuZGluZyB0aG91Z2guCiAJICovCi0JaWYgKHFwLT5zX2hkcndvcmRzID09IDAgJiYKLQkgICAgKHFwLT5zX2Fja19zdGF0ZSA8IElCX09QQ09ERV9SRE1BX1JFQURfUkVRVUVTVCB8fAotCSAgICAgcXAtPnNfYWNrX3N0YXRlID49IElCX09QQ09ERV9DT01QQVJFX1NXQVApKQorCWlmIChxcC0+cl9hY2tfc3RhdGUgPCBPUChDT01QQVJFX1NXQVApKSB7CisJCS8qIFhYWCBGbHVzaCBXUUVzICovCisJCXFwLT5zdGF0ZSA9IElCX1FQU19FUlI7CisJCXFwLT5yX2Fja19zdGF0ZSA9IE9QKFJETUFfV1JJVEVfT05MWSk7CisJCXFwLT5yX25ha19zdGF0ZSA9IElCX05BS19SRU1PVEVfQUNDRVNTX0VSUk9SOworCQlxcC0+cl9hY2tfcHNuID0gcXAtPnJfcHNuOworCX0KK3NlbmRfYWNrOgorCS8qIFNlbmQgQUNLIHJpZ2h0IGF3YXkgdW5sZXNzIHRoZSBzZW5kIHRhc2tsZXQgaGFzIGEgcGVuZGluZyBBQ0suICovCisJaWYgKHFwLT5zX2Fja19zdGF0ZSA9PSBPUChBQ0tOT1dMRURHRSkpCiAJCXNlbmRfcmNfYWNrKHFwKTsKIAotcmRtYWRvbmU6Ci0Jc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKLQotCS8qIENhbGwgaXBhdGhfZG9fcmNfc2VuZCgpIGluIGFub3RoZXIgdGhyZWFkLiAqLwotCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOwotCi1iYWlsOgorZG9uZToKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmgKaW5kZXggNDAyMTI2ZS4uODlkZjhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JlZ2lzdGVycy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaApAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwppbmRleCBkMzhmNGYzLi43NzJiYzU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTMxLDYgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKyNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogLyoKICAqIENvbnZlcnQgdGhlIEFFVEggUk5SIHRpbWVvdXQgY29kZSBpbnRvIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgpAQCAtMTExLDIwICsxMTMsMjMgQEAKICAqCiAgKiBSZXR1cm4gMCBpZiBubyBSV1FFIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHJldHVybiAxLgogICoKLSAqIENhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwgd2l0aCB0aGUgUVAgcl9ycS5sb2NrIGhlbGQuCisgKiBDYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGxldmVsLgogICovCiBpbnQgaXBhdGhfZ2V0X3J3cWUoc3RydWN0IGlwYXRoX3FwICpxcCwgaW50IHdyX2lkX29ubHkpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaXBhdGhfcnEgKnJxOwogCXN0cnVjdCBpcGF0aF9zcnEgKnNycTsKIAlzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlOwotCWludCByZXQ7CisJaW50IHJldCA9IDE7CiAKIAlpZiAoIXFwLT5pYnFwLnNycSkgewogCQlycSA9ICZxcC0+cl9ycTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisKIAkJaWYgKHVubGlrZWx5KHJxLT50YWlsID09IHJxLT5oZWFkKSkgewogCQkJcmV0ID0gMDsKLQkJCWdvdG8gYmFpbDsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCQl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKIAkJcXAtPnJfd3JfaWQgPSB3cWUtPndyX2lkOwpAQCAtMTM2LDE3ICsxNDEsMTYgQEAKIAkJfQogCQlpZiAoKytycS0+dGFpbCA+PSBycS0+c2l6ZSkKIAkJCXJxLT50YWlsID0gMDsKLQkJcmV0ID0gMTsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCiAJc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOwogCXJxID0gJnNycS0+cnE7Ci0Jc3Bpbl9sb2NrKCZycS0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisKIAlpZiAodW5saWtlbHkocnEtPnRhaWwgPT0gcnEtPmhlYWQpKSB7Ci0JCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJCXJldCA9IDA7Ci0JCWdvdG8gYmFpbDsKKwkJZ290byBkb25lOwogCX0KIAl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKIAlxcC0+cl93cl9pZCA9IHdxZS0+d3JfaWQ7CkBAIC0xNjgsMTggKzE3MiwxOCBAQAogCQkJbiA9IHJxLT5oZWFkIC0gcnEtPnRhaWw7CiAJCWlmIChuIDwgc3JxLT5saW1pdCkgewogCQkJc3JxLT5saW1pdCA9IDA7Ci0JCQlzcGluX3VubG9jaygmcnEtPmxvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAkJCWV2LmRldmljZSA9IHFwLT5pYnFwLmRldmljZTsKIAkJCWV2LmVsZW1lbnQuc3JxID0gcXAtPmlicXAuc3JxOwogCQkJZXYuZXZlbnQgPSBJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRDsKIAkJCXNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcigmZXYsCiAJCQkJCQkgc3JxLT5pYnNycS5zcnFfY29udGV4dCk7Ci0JCX0gZWxzZQotCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKLQl9IGVsc2UKLQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKLQlyZXQgPSAxOworCQkJZ290byBiYWlsOworCQl9CisJfQogCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiBiYWlsOgogCXJldHVybiByZXQ7CiB9CkBAIC0xODcsNyArMTkxLDYgQEAKIC8qKgogICogaXBhdGhfcnVjX2xvb3BiYWNrIC0gaGFuZGxlIFVDIGFuZCBSQyBsb29rYmFjayByZXF1ZXN0cwogICogQHNxcDogdGhlIGxvb3BiYWNrIFFQCi0gKiBAd2M6IHRoZSB3b3JrIGNvbXBsZXRpb24gZW50cnkKICAqCiAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX2RvX3VjX3NlbmQoKSBvciBpcGF0aF9kb19yY19zZW5kKCkgdG8KICAqIGZvcndhcmQgYSBXUUUgYWRkcmVzc2VkIHRvIHRoZSBzYW1lIEhDQS4KQEAgLTE5NiwxMyArMTk5LDE0IEBACiAgKiByZWNlaXZlIGludGVycnVwdHMgc2luY2UgdGhpcyBpcyBhIGNvbm5lY3RlZCBwcm90b2NvbCBhbmQgYWxsIHBhY2tldHMKICAqIHdpbGwgcGFzcyB0aHJvdWdoIGhlcmUuCiAgKi8KLXZvaWQgaXBhdGhfcnVjX2xvb3BiYWNrKHN0cnVjdCBpcGF0aF9xcCAqc3FwLCBzdHJ1Y3QgaWJfd2MgKndjKQorc3RhdGljIHZvaWQgaXBhdGhfcnVjX2xvb3BiYWNrKHN0cnVjdCBpcGF0aF9xcCAqc3FwKQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihzcXAtPmlicXAuZGV2aWNlKTsKIAlzdHJ1Y3QgaXBhdGhfcXAgKnFwOwogCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7CiAJc3RydWN0IGlwYXRoX3NnZSAqc2dlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGliX3djIHdjOwogCXU2NCBzZGF0YTsKIAogCXFwID0gaXBhdGhfbG9va3VwX3FwbigmZGV2LT5xcF90YWJsZSwgc3FwLT5yZW1vdGVfcXBuKTsKQEAgLTIzMyw4ICsyMzcsOCBAQAogCXdxZSA9IGdldF9zd3FlX3B0cihzcXAsIHNxcC0+c19sYXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcXAtPnNfbG9jaywgZmxhZ3MpOwogCi0Jd2MtPndjX2ZsYWdzID0gMDsKLQl3Yy0+aW1tX2RhdGEgPSAwOworCXdjLndjX2ZsYWdzID0gMDsKKwl3Yy5pbW1fZGF0YSA9IDA7CiAKIAlzcXAtPnNfc2dlLnNnZSA9IHdxZS0+c2dfbGlzdFswXTsKIAlzcXAtPnNfc2dlLnNnX2xpc3QgPSB3cWUtPnNnX2xpc3QgKyAxOwpAQCAtMjQyLDM5ICsyNDYsMzQgQEAKIAlzcXAtPnNfbGVuID0gd3FlLT5sZW5ndGg7CiAJc3dpdGNoICh3cWUtPndyLm9wY29kZSkgewogCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lNTToKLQkJd2MtPndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07Ci0JCXdjLT5pbW1fZGF0YSA9IHdxZS0+d3IuaW1tX2RhdGE7CisJCXdjLndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07CisJCXdjLmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIElCX1dSX1NFTkQ6Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CiAJCWlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDApKSB7CiAJCXJucl9uYWs6Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CiAJCQkvKiBIYW5kbGUgUk5SIE5BSyAqLwogCQkJaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1VDKQogCQkJCWdvdG8gc2VuZF9jb21wOwogCQkJaWYgKHNxcC0+c19ybnJfcmV0cnkgPT0gMCkgewotCQkJCXdjLT5zdGF0dXMgPSBJQl9XQ19STlJfUkVUUllfRVhDX0VSUjsKKwkJCQl3Yy5zdGF0dXMgPSBJQl9XQ19STlJfUkVUUllfRVhDX0VSUjsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCWlmIChzcXAtPnNfcm5yX3JldHJ5X2NudCA8IDcpCiAJCQkJc3FwLT5zX3Jucl9yZXRyeS0tOwogCQkJZGV2LT5uX3Jucl9uYWtzKys7CiAJCQlzcXAtPnNfcm5yX3RpbWVvdXQgPQotCQkJCWliX2lwYXRoX3Jucl90YWJsZVtzcXAtPnNfbWluX3Jucl90aW1lcl07CisJCQkJaWJfaXBhdGhfcm5yX3RhYmxlW3NxcC0+cl9taW5fcm5yX3RpbWVyXTsKIAkJCWlwYXRoX2luc2VydF9ybnJfcXVldWUoc3FwKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgotCQl3Yy0+d2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKLQkJd2MtPmltbV9kYXRhID0gd3FlLT53ci5pbW1fZGF0YTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKKwkJd2Mud2NfZmxhZ3MgPSBJQl9XQ19XSVRIX0lNTTsKKwkJd2MuaW1tX2RhdGEgPSB3cWUtPndyLmltbV9kYXRhOwogCQlpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAxKSkKIAkJCWdvdG8gcm5yX25hazsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOwogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgSUJfV1JfUkRNQV9XUklURToKIAkJaWYgKHdxZS0+bGVuZ3RoID09IDApCkBAIC0yODQsMjAgKzI4MywyMCBAQAogCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJrZXksCiAJCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSkpIHsKIAkJYWNjX2VycjoKLQkJCXdjLT5zdGF0dXMgPSBJQl9XQ19SRU1fQUNDRVNTX0VSUjsKKwkJCXdjLnN0YXR1cyA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOwogCQllcnI6Ci0JCQl3Yy0+d3JfaWQgPSB3cWUtPndyLndyX2lkOwotCQkJd2MtPm9wY29kZSA9IGliX2lwYXRoX3djX29wY29kZVt3cWUtPndyLm9wY29kZV07Ci0JCQl3Yy0+dmVuZG9yX2VyciA9IDA7Ci0JCQl3Yy0+Ynl0ZV9sZW4gPSAwOwotCQkJd2MtPnFwX251bSA9IHNxcC0+aWJxcC5xcF9udW07Ci0JCQl3Yy0+c3JjX3FwID0gc3FwLT5yZW1vdGVfcXBuOwotCQkJd2MtPnBrZXlfaW5kZXggPSAwOwotCQkJd2MtPnNsaWQgPSBzcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7Ci0JCQl3Yy0+c2wgPSBzcXAtPnJlbW90ZV9haF9hdHRyLnNsOwotCQkJd2MtPmRsaWRfcGF0aF9iaXRzID0gMDsKLQkJCXdjLT5wb3J0X251bSA9IDA7Ci0JCQlpcGF0aF9zcWVycm9yX3FwKHNxcCwgd2MpOworCQkJd2Mud3JfaWQgPSB3cWUtPndyLndyX2lkOworCQkJd2Mub3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJCXdjLnZlbmRvcl9lcnIgPSAwOworCQkJd2MuYnl0ZV9sZW4gPSAwOworCQkJd2MucXBfbnVtID0gc3FwLT5pYnFwLnFwX251bTsKKwkJCXdjLnNyY19xcCA9IHNxcC0+cmVtb3RlX3FwbjsKKwkJCXdjLnBrZXlfaW5kZXggPSAwOworCQkJd2Muc2xpZCA9IHNxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZDsKKwkJCXdjLnNsID0gc3FwLT5yZW1vdGVfYWhfYXR0ci5zbDsKKwkJCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKKwkJCXdjLnBvcnRfbnVtID0gMDsKKwkJCWlwYXRoX3NxZXJyb3JfcXAoc3FwLCAmd2MpOwogCQkJZ290byBkb25lOwogCQl9CiAJCWJyZWFrOwpAQCAtMzczLDIyICszNzIsMjIgQEAKIAkJZ290byBzZW5kX2NvbXA7CiAKIAlpZiAod3FlLT53ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkKLQkJd2MtPm9wY29kZSA9IElCX1dDX1JFQ1ZfUkRNQV9XSVRIX0lNTTsKKwkJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVl9SRE1BX1dJVEhfSU1NOwogCWVsc2UKLQkJd2MtPm9wY29kZSA9IElCX1dDX1JFQ1Y7Ci0Jd2MtPndyX2lkID0gcXAtPnJfd3JfaWQ7Ci0Jd2MtPnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7Ci0Jd2MtPnZlbmRvcl9lcnIgPSAwOwotCXdjLT5ieXRlX2xlbiA9IHdxZS0+bGVuZ3RoOwotCXdjLT5xcF9udW0gPSBxcC0+aWJxcC5xcF9udW07Ci0Jd2MtPnNyY19xcCA9IHFwLT5yZW1vdGVfcXBuOworCQl3Yy5vcGNvZGUgPSBJQl9XQ19SRUNWOworCXdjLndyX2lkID0gcXAtPnJfd3JfaWQ7CisJd2Muc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKwl3Yy52ZW5kb3JfZXJyID0gMDsKKwl3Yy5ieXRlX2xlbiA9IHdxZS0+bGVuZ3RoOworCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwl3Yy5zcmNfcXAgPSBxcC0+cmVtb3RlX3FwbjsKIAkvKiBYWFggZG8gd2Uga25vdyB3aGljaCBwa2V5IG1hdGNoZWQ/IE9ubHkgbmVlZGVkIGZvciBHU0kuICovCi0Jd2MtPnBrZXlfaW5kZXggPSAwOwotCXdjLT5zbGlkID0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQ7Ci0Jd2MtPnNsID0gcXAtPnJlbW90ZV9haF9hdHRyLnNsOwotCXdjLT5kbGlkX3BhdGhfYml0cyA9IDA7CisJd2MucGtleV9pbmRleCA9IDA7CisJd2Muc2xpZCA9IHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkOworCXdjLnNsID0gcXAtPnJlbW90ZV9haF9hdHRyLnNsOworCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKIAkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCi0JaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCB3YywKKwlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJICAgICAgIHdxZS0+d3Iuc2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKTsKIAogc2VuZF9jb21wOgpAQCAtMzk2LDE5ICszOTUsMTkgQEAKIAogCWlmICghdGVzdF9iaXQoSVBBVEhfU19TSUdOQUxfUkVRX1dSLCAmc3FwLT5zX2ZsYWdzKSB8fAogCSAgICAod3FlLT53ci5zZW5kX2ZsYWdzICYgSUJfU0VORF9TSUdOQUxFRCkpIHsKLQkJd2MtPndyX2lkID0gd3FlLT53ci53cl9pZDsKLQkJd2MtPnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7Ci0JCXdjLT5vcGNvZGUgPSBpYl9pcGF0aF93Y19vcGNvZGVbd3FlLT53ci5vcGNvZGVdOwotCQl3Yy0+dmVuZG9yX2VyciA9IDA7Ci0JCXdjLT5ieXRlX2xlbiA9IHdxZS0+bGVuZ3RoOwotCQl3Yy0+cXBfbnVtID0gc3FwLT5pYnFwLnFwX251bTsKLQkJd2MtPnNyY19xcCA9IDA7Ci0JCXdjLT5wa2V5X2luZGV4ID0gMDsKLQkJd2MtPnNsaWQgPSAwOwotCQl3Yy0+c2wgPSAwOwotCQl3Yy0+ZGxpZF9wYXRoX2JpdHMgPSAwOwotCQl3Yy0+cG9ydF9udW0gPSAwOwotCQlpcGF0aF9jcV9lbnRlcih0b19pY3Eoc3FwLT5pYnFwLnNlbmRfY3EpLCB3YywgMCk7CisJCXdjLndyX2lkID0gd3FlLT53ci53cl9pZDsKKwkJd2Muc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKwkJd2Mub3Bjb2RlID0gaWJfaXBhdGhfd2Nfb3Bjb2RlW3dxZS0+d3Iub3Bjb2RlXTsKKwkJd2MudmVuZG9yX2VyciA9IDA7CisJCXdjLmJ5dGVfbGVuID0gd3FlLT5sZW5ndGg7CisJCXdjLnFwX251bSA9IHNxcC0+aWJxcC5xcF9udW07CisJCXdjLnNyY19xcCA9IDA7CisJCXdjLnBrZXlfaW5kZXggPSAwOworCQl3Yy5zbGlkID0gMDsKKwkJd2Muc2wgPSAwOworCQl3Yy5kbGlkX3BhdGhfYml0cyA9IDA7CisJCXdjLnBvcnRfbnVtID0gMDsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHNxcC0+aWJxcC5zZW5kX2NxKSwgJndjLCAwKTsKIAl9CiAKIAkvKiBVcGRhdGUgc19sYXN0IG5vdyB0aGF0IHdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBTV1FFICovCkBAIC00NTQsMTEgKzQ1MywxMSBAQAogfQogCiAvKioKLSAqIGlwYXRoX3Bvc3RfcmNfc2VuZCAtIHBvc3QgUkMgYW5kIFVDIHNlbmRzCisgKiBpcGF0aF9wb3N0X3J1Y19zZW5kIC0gcG9zdCBSQyBhbmQgVUMgc2VuZHMKICAqIEBxcDogdGhlIFFQIHRvIHBvc3Qgb24KICAqIEB3cjogdGhlIHdvcmsgcmVxdWVzdCB0byBzZW5kCiAgKi8KLWludCBpcGF0aF9wb3N0X3JjX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyKQoraW50IGlwYXRoX3Bvc3RfcnVjX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyKQogewogCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUzMywxMyArNTMyLDE0OSBAQAogCXFwLT5zX2hlYWQgPSBuZXh0OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKIAotCWlmIChxcC0+aWJxcC5xcF90eXBlID09IElCX1FQVF9VQykKLQkJaXBhdGhfZG9fdWNfc2VuZCgodW5zaWduZWQgbG9uZykgcXApOwotCWVsc2UKLQkJaXBhdGhfZG9fcmNfc2VuZCgodW5zaWduZWQgbG9uZykgcXApOworCWlwYXRoX2RvX3J1Y19zZW5kKCh1bnNpZ25lZCBsb25nKSBxcCk7CiAKIAlyZXQgPSAwOwogCiBiYWlsOgogCXJldHVybiByZXQ7CiB9CisKKy8qKgorICogaXBhdGhfbWFrZV9ncmggLSBjb25zdHJ1Y3QgYSBHUkggaGVhZGVyCisgKiBAZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGlwYXRoIGRldmljZQorICogQGhkcjogYSBwb2ludGVyIHRvIHRoZSBHUkggaGVhZGVyIGJlaW5nIGNvbnN0cnVjdGVkCisgKiBAZ3JoOiB0aGUgZ2xvYmFsIHJvdXRlIGFkZHJlc3MgdG8gc2VuZCB0bworICogQGh3b3JkczogdGhlIG51bWJlciBvZiAzMiBiaXQgd29yZHMgb2YgaGVhZGVyIGJlaW5nIHNlbnQKKyAqIEBud29yZHM6IHRoZSBudW1iZXIgb2YgMzIgYml0IHdvcmRzIG9mIGRhdGEgYmVpbmcgc2VudAorICoKKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGluIDMyIGJpdCB3b3Jkcy4KKyAqLwordTMyIGlwYXRoX21ha2VfZ3JoKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaWJfZ3JoICpoZHIsCisJCSAgIHN0cnVjdCBpYl9nbG9iYWxfcm91dGUgKmdyaCwgdTMyIGh3b3JkcywgdTMyIG53b3JkcykKK3sKKwloZHItPnZlcnNpb25fdGNsYXNzX2Zsb3cgPQorCQljcHVfdG9fYmUzMigoNiA8PCAyOCkgfAorCQkJICAgIChncmgtPnRyYWZmaWNfY2xhc3MgPDwgMjApIHwKKwkJCSAgICBncmgtPmZsb3dfbGFiZWwpOworCWhkci0+cGF5bGVuID0gY3B1X3RvX2JlMTYoKGh3b3JkcyAtIDIgKyBud29yZHMgKyBTSVpFX09GX0NSQykgPDwgMik7CisJLyogbmV4dF9oZHIgaXMgZGVmaW5lZCBieSBDOC03IGluIGNoLiA4LjQuMSAqLworCWhkci0+bmV4dF9oZHIgPSAweDFCOworCWhkci0+aG9wX2xpbWl0ID0gZ3JoLT5ob3BfbGltaXQ7CisJLyogVGhlIFNHSUQgaXMgMzItYml0IGFsaWduZWQuICovCisJaGRyLT5zZ2lkLmdsb2JhbC5zdWJuZXRfcHJlZml4ID0gZGV2LT5naWRfcHJlZml4OworCWhkci0+c2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGV2LT5kZCk7CisJaGRyLT5kZ2lkID0gZ3JoLT5kZ2lkOworCisJLyogR1JIIGhlYWRlciBzaXplIGluIDMyLWJpdCB3b3Jkcy4gKi8KKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpYl9ncmgpIC8gc2l6ZW9mKHUzMik7Cit9CisKKy8qKgorICogaXBhdGhfZG9fcnVjX3NlbmQgLSBwZXJmb3JtIGEgc2VuZCBvbiBhbiBSQyBvciBVQyBRUAorICogQGRhdGE6IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgUVAKKyAqCisgKiBQcm9jZXNzIGVudHJpZXMgaW4gdGhlIHNlbmQgd29yayBxdWV1ZSB1bnRpbCBjcmVkaXQgb3IgcXVldWUgaXMKKyAqIGV4aGF1c3RlZC4gIE9ubHkgYWxsb3cgb25lIENQVSB0byBzZW5kIGEgcGFja2V0IHBlciBRUCAodGFza2xldCkuCisgKiBPdGhlcndpc2UsIGFmdGVyIHdlIGRyb3AgdGhlIFFQIHNfbG9jaywgdHdvIHRocmVhZHMgY291bGQgc2VuZAorICogcGFja2V0cyBvdXQgb2Ygb3JkZXIuCisgKi8KK3ZvaWQgaXBhdGhfZG9fcnVjX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSAoc3RydWN0IGlwYXRoX3FwICopZGF0YTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBscmgwOworCXUzMiBud29yZHM7CisJdTMyIGV4dHJhX2J5dGVzOworCXUzMiBidGgwOworCXUzMiBidGgyOworCXUzMiBwbXR1ID0gaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CisJc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHI7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncykpCisJCWdvdG8gYmFpbDsKKworCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCA9PQorCQkgICAgIGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7CisJCWlwYXRoX3J1Y19sb29wYmFjayhxcCk7CisJCWdvdG8gY2xlYXI7CisJfQorCisJb2hkciA9ICZxcC0+c19oZHIudS5vdGg7CisJaWYgKHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkKKwkJb2hkciA9ICZxcC0+c19oZHIudS5sLm90aDsKKworYWdhaW46CisJLyogQ2hlY2sgZm9yIGEgY29uc3RydWN0ZWQgcGFja2V0IHRvIGJlIHNlbnQuICovCisJaWYgKHFwLT5zX2hkcndvcmRzICE9IDApIHsKKwkJLyoKKwkJICogSWYgbm8gUElPIGJ1ZnMgYXJlIGF2YWlsYWJsZSwgcmV0dXJuLiAgQW4gaW50ZXJydXB0IHdpbGwKKwkJICogY2FsbCBpcGF0aF9pYl9waW9idWZhdmFpbCgpIHdoZW4gb25lIGlzIGF2YWlsYWJsZS4KKwkJICovCisJCWlmIChpcGF0aF92ZXJic19zZW5kKGRldi0+ZGQsIHFwLT5zX2hkcndvcmRzLAorCQkJCSAgICAgKHUzMiAqKSAmcXAtPnNfaGRyLCBxcC0+c19jdXJfc2l6ZSwKKwkJCQkgICAgIHFwLT5zX2N1cl9zZ2UpKSB7CisJCQlpcGF0aF9ub19idWZzX2F2YWlsYWJsZShxcCwgZGV2KTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7CisJCS8qIFJlY29yZCB0aGF0IHdlIHNlbnQgdGhlIHBhY2tldCBhbmQgc19oZHIgaXMgZW1wdHkuICovCisJCXFwLT5zX2hkcndvcmRzID0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSBsb2NrIGlzIG5lZWRlZCB0byBzeW5jaHJvbml6ZSBiZXR3ZWVuIHNldHRpbmcKKwkgKiBxcC0+c19hY2tfc3RhdGUsIHJlc2VuZCB0aW1lciwgYW5kIHBvc3Rfc2VuZCgpLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisKKwkvKiBTZW5kaW5nIHJlc3BvbnNlcyBoYXMgaGlnaGVyIHByaW9yaXR5IG92ZXIgc2VuZGluZyByZXF1ZXN0cy4gKi8KKwlpZiAocXAtPnNfYWNrX3N0YXRlICE9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRSAmJgorCSAgICAoYnRoMCA9IGlwYXRoX21ha2VfcmNfYWNrKHFwLCBvaGRyLCBwbXR1KSkgIT0gMCkKKwkJYnRoMiA9IHFwLT5zX2Fja19wc24rKyAmIElQQVRIX1BTTl9NQVNLOworCWVsc2UgaWYgKCEoKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1JDKSA/CisJCSAgIGlwYXRoX21ha2VfcmNfcmVxKHFwLCBvaGRyLCBwbXR1LCAmYnRoMCwgJmJ0aDIpIDoKKwkJICAgaXBhdGhfbWFrZV91Y19yZXEocXAsIG9oZHIsIHBtdHUsICZidGgwLCAmYnRoMikpKSB7CisJCS8qCisJCSAqIENsZWFyIHRoZSBidXN5IGJpdCBiZWZvcmUgdW5sb2NraW5nIHRvIGF2b2lkIHJhY2VzIHdpdGgKKwkJICogYWRkaW5nIG5ldyB3b3JrIHF1ZXVlIGl0ZW1zIGFuZCB0aGVuIGZhaWxpbmcgdG8gcHJvY2VzcworCQkgKiB0aGVtLgorCQkgKi8KKwkJY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCQlnb3RvIGJhaWw7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCisJLyogQ29uc3RydWN0IHRoZSBoZWFkZXIuICovCisJZXh0cmFfYnl0ZXMgPSAoNCAtIHFwLT5zX2N1cl9zaXplKSAmIDM7CisJbndvcmRzID0gKHFwLT5zX2N1cl9zaXplICsgZXh0cmFfYnl0ZXMpID4+IDI7CisJbHJoMCA9IElQQVRIX0xSSF9CVEg7CisJaWYgKHVubGlrZWx5KHFwLT5yZW1vdGVfYWhfYXR0ci5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKKwkJcXAtPnNfaGRyd29yZHMgKz0gaXBhdGhfbWFrZV9ncmgoZGV2LCAmcXAtPnNfaGRyLnUubC5ncmgsCisJCQkJCQkgJnFwLT5yZW1vdGVfYWhfYXR0ci5ncmgsCisJCQkJCQkgcXAtPnNfaGRyd29yZHMsIG53b3Jkcyk7CisJCWxyaDAgPSBJUEFUSF9MUkhfR1JIOworCX0KKwlscmgwIHw9IHFwLT5yZW1vdGVfYWhfYXR0ci5zbCA8PCA0OworCXFwLT5zX2hkci5scmhbMF0gPSBjcHVfdG9fYmUxNihscmgwKTsKKwlxcC0+c19oZHIubHJoWzFdID0gY3B1X3RvX2JlMTYocXAtPnJlbW90ZV9haF9hdHRyLmRsaWQpOworCXFwLT5zX2hkci5scmhbMl0gPSBjcHVfdG9fYmUxNihxcC0+c19oZHJ3b3JkcyArIG53b3JkcyArCisJCQkJICAgICAgIFNJWkVfT0ZfQ1JDKTsKKwlxcC0+c19oZHIubHJoWzNdID0gY3B1X3RvX2JlMTYoaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSk7CisJYnRoMCB8PSBpcGF0aF9sYXllcl9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKKwlidGgwIHw9IGV4dHJhX2J5dGVzIDw8IDIwOworCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOworCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKKwlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihidGgyKTsKKworCS8qIENoZWNrIGZvciBtb3JlIHdvcmsgdG8gZG8uICovCisJZ290byBhZ2FpbjsKKworY2xlYXI6CisJY2xlYXJfYml0KElQQVRIX1NfQlVTWSwgJnFwLT5zX2ZsYWdzKTsKK2JhaWw6CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jCmluZGV4IDAxYzRjNmMuLmY3NjA0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3JxLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0xMjUsMTEgKzEyNiwyMyBAQAogCQkJCXN0cnVjdCBpYl9zcnFfaW5pdF9hdHRyICpzcnFfaW5pdF9hdHRyLAogCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCiB7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGlicGQtPmRldmljZSk7CiAJc3RydWN0IGlwYXRoX3NycSAqc3JxOwogCXUzMiBzejsKIAlzdHJ1Y3QgaWJfc3JxICpyZXQ7CiAKLQlpZiAoc3JxX2luaXRfYXR0ci0+YXR0ci5tYXhfc2dlIDwgMSkgeworCWlmIChkZXYtPm5fc3Jxc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X3NycXMpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF93ciA9PSAwKSB7CisJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoKHNycV9pbml0X2F0dHItPmF0dHIubWF4X3NnZSA+IGliX2lwYXRoX21heF9zcnFfc2dlcykgfHwKKwkgICAgKHNycV9pbml0X2F0dHItPmF0dHIubWF4X3dyID4gaWJfaXBhdGhfbWF4X3NycV93cnMpKSB7CiAJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJCWdvdG8gYmFpbDsKIAl9CkBAIC0xNjQsNiArMTc3LDggQEAKIAogCXJldCA9ICZzcnEtPmlic3JxOwogCisJZGV2LT5uX3NycXNfYWxsb2NhdGVkKys7CisKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MSwyNCArMTk2LDI2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JaWYgKGF0dHJfbWFzayAmIElCX1NSUV9MSU1JVCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7Ci0JCXNycS0+bGltaXQgPSBhdHRyLT5zcnFfbGltaXQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOwotCX0KLQlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX01BWF9XUikgewotCQl1MzIgc2l6ZSA9IGF0dHItPm1heF93ciArIDE7Ci0JCXN0cnVjdCBpcGF0aF9yd3FlICp3cSwgKnA7Ci0JCXUzMiBuOwotCQl1MzIgc3o7Ci0KLQkJaWYgKGF0dHItPm1heF9zZ2UgPCBzcnEtPnJxLm1heF9zZ2UpIHsKKwlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX01BWF9XUikKKwkJaWYgKChhdHRyLT5tYXhfd3IgPiBpYl9pcGF0aF9tYXhfc3JxX3dycykgfHwKKwkJICAgIChhdHRyLT5tYXhfc2dlID4gc3JxLT5ycS5tYXhfc2dlKSkgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCisJaWYgKGF0dHJfbWFzayAmIElCX1NSUV9MSU1JVCkKKwkJaWYgKGF0dHItPnNycV9saW1pdCA+PSBzcnEtPnJxLnNpemUpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9TUlFfTUFYX1dSKSB7CisJCXN0cnVjdCBpcGF0aF9yd3FlICp3cSwgKnA7CisJCXUzMiBzeiwgc2l6ZSwgbjsKKwogCQlzeiA9IHNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSkgKwogCQkJYXR0ci0+bWF4X3NnZSAqIHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKTsKKwkJc2l6ZSA9IGF0dHItPm1heF93ciArIDE7CiAJCXdxID0gdm1hbGxvYyhzaXplICogc3opOwogCQlpZiAoIXdxKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtMjQyLDYgKzI1OSwxMSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKIAl9CiAKKwlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX0xJTUlUKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwkJc3JxLT5saW1pdCA9IGF0dHItPnNycV9saW1pdDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7CisJfQogCXJldCA9IDA7CiAKIGJhaWw6CkBAIC0yNjUsNyArMjg3LDkgQEAKIGludCBpcGF0aF9kZXN0cm95X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSkKIHsKIAlzdHJ1Y3QgaXBhdGhfc3JxICpzcnEgPSB0b19pc3JxKGlic3JxKTsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJzcnEtPmRldmljZSk7CiAKKwlkZXYtPm5fc3Jxc19hbGxvY2F0ZWQtLTsKIAl2ZnJlZShzcnEtPnJxLndxKTsKIAlrZnJlZShzcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3RhdHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zdGF0cy5jCmluZGV4IGZlMjA5MTMuLjcwMzUxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zdGF0cy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zdGF0cy5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMTg1LDcgKzE4Niw2IEBACiAJCQkJICAgZGQtPmlwYXRoX3BvcnQwaGVhZCwKIAkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCSAgIGlwYXRoX3N0YXRzLnNwc19wb3J0MHBrdHMpOwotCQkJaXBhdGhfa3JlY2VpdmUoZGQpOwogCQl9CiAJCWRkLT5pcGF0aF9sYXN0cG9ydDByY3ZfY250ID0gaXBhdGhfc3RhdHMuc3BzX3BvcnQwcGt0czsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCmluZGV4IGYzMjM3OTEuLmI5ODgyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMzQsOCArMzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCi0jaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgogI2luY2x1ZGUgImlwYXRoX2xheWVyLmgiCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKIC8qKgogICogaXBhdGhfcGFyc2VfdXNob3J0IC0gcGFyc2UgYW4gdW5zaWduZWQgc2hvcnQgdmFsdWUgaW4gYW4gYXJiaXRyYXJ5IGJhc2UKQEAgLTg0LDk5ICs4NSw2IEBACiAJCQkgaXBhdGhfY291bnRfdW5pdHMoTlVMTCwgTlVMTCwgTlVMTCkpOwogfQogCi0jZGVmaW5lIERSSVZFUl9TVEFUKG5hbWUsIGF0dHIpIFwKLQlzdGF0aWMgc3NpemVfdCBzaG93X3N0YXRfIyNuYW1lKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIFwKLQkJCQkJY2hhciAqYnVmKSBcCi0JeyBcCi0JCXJldHVybiBzY25wcmludGYoIFwKLQkJCWJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwgXAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaXBhdGhfc3RhdHMuc3BzXyAjI2F0dHIpOyBcCi0JfSBcCi0Jc3RhdGljIERSSVZFUl9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfc3RhdF8jI25hbWUsIE5VTEwpCi0KLURSSVZFUl9TVEFUKGludHJzLCBpbnRzKTsKLURSSVZFUl9TVEFUKGVycl9pbnRycywgZXJyaW50cyk7Ci1EUklWRVJfU1RBVChlcnJzLCBlcnJzKTsKLURSSVZFUl9TVEFUKHBrdF9lcnJzLCBwa3RlcnJzKTsKLURSSVZFUl9TVEFUKGNyY19lcnJzLCBjcmNlcnJzKTsKLURSSVZFUl9TVEFUKGh3X2VycnMsIGh3ZXJycyk7Ci1EUklWRVJfU1RBVChpYl9saW5rLCBpYmxpbmspOwotRFJJVkVSX1NUQVQocG9ydDBfcGt0cywgcG9ydDBwa3RzKTsKLURSSVZFUl9TVEFUKGV0aGVyX3Nwa3RzLCBldGhlcl9zcGt0cyk7Ci1EUklWRVJfU1RBVChldGhlcl9ycGt0cywgZXRoZXJfcnBrdHMpOwotRFJJVkVSX1NUQVQoc21hX3Nwa3RzLCBzbWFfc3BrdHMpOwotRFJJVkVSX1NUQVQoc21hX3Jwa3RzLCBzbWFfcnBrdHMpOwotRFJJVkVSX1NUQVQoaGRycV9mdWxsLCBoZHJxZnVsbCk7Ci1EUklWRVJfU1RBVChldGlkX2Z1bGwsIGV0aWRmdWxsKTsKLURSSVZFUl9TVEFUKG5vX3Bpb2J1ZnMsIG5vcGlvYnVmcyk7Ci1EUklWRVJfU1RBVChwb3J0cywgcG9ydHMpOwotRFJJVkVSX1NUQVQocGtleTAsIHBrZXlzWzBdKTsKLURSSVZFUl9TVEFUKHBrZXkxLCBwa2V5c1sxXSk7Ci1EUklWRVJfU1RBVChwa2V5MiwgcGtleXNbMl0pOwotRFJJVkVSX1NUQVQocGtleTMsIHBrZXlzWzNdKTsKLS8qIFhYWCBmaXggdGhlIGZvbGxvd2luZyB3aGVuIGR5bmFtaWMgdGFibGUgb2YgZGV2aWNlcyB1c2VkICovCi1EUklWRVJfU1RBVChsaWQwLCBsaWRbMF0pOwotRFJJVkVSX1NUQVQobGlkMSwgbGlkWzFdKTsKLURSSVZFUl9TVEFUKGxpZDIsIGxpZFsyXSk7Ci1EUklWRVJfU1RBVChsaWQzLCBsaWRbM10pOwotCi1EUklWRVJfU1RBVChucG9ydHMsIG5wb3J0cyk7Ci1EUklWRVJfU1RBVChudWxsX2ludHIsIG51bGxpbnRyKTsKLURSSVZFUl9TVEFUKG1heF9wa3RzX2NhbGwsIG1heHBrdHNfY2FsbCk7Ci1EUklWRVJfU1RBVChhdmdfcGt0c19jYWxsLCBhdmdwa3RzX2NhbGwpOwotRFJJVkVSX1NUQVQocGFnZV9sb2NrcywgcGFnZWxvY2tzKTsKLURSSVZFUl9TVEFUKHBhZ2VfdW5sb2NrcywgcGFnZXVubG9ja3MpOwotRFJJVkVSX1NUQVQoa3Jkcm9wcywga3Jkcm9wcyk7Ci0vKiBYWFggZml4IHRoZSBmb2xsb3dpbmcgd2hlbiBkeW5hbWljIHRhYmxlIG9mIGRldmljZXMgdXNlZCAqLwotRFJJVkVSX1NUQVQobWxpZDAsIG1saWRbMF0pOwotRFJJVkVSX1NUQVQobWxpZDEsIG1saWRbMV0pOwotRFJJVkVSX1NUQVQobWxpZDIsIG1saWRbMl0pOwotRFJJVkVSX1NUQVQobWxpZDMsIG1saWRbM10pOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHJpdmVyX3N0YXRfYXR0cmlidXRlc1tdID0gewotCSZkcml2ZXJfYXR0cl9pbnRycy5hdHRyLAotCSZkcml2ZXJfYXR0cl9lcnJfaW50cnMuYXR0ciwKLQkmZHJpdmVyX2F0dHJfZXJycy5hdHRyLAotCSZkcml2ZXJfYXR0cl9wa3RfZXJycy5hdHRyLAotCSZkcml2ZXJfYXR0cl9jcmNfZXJycy5hdHRyLAotCSZkcml2ZXJfYXR0cl9od19lcnJzLmF0dHIsCi0JJmRyaXZlcl9hdHRyX2liX2xpbmsuYXR0ciwKLQkmZHJpdmVyX2F0dHJfcG9ydDBfcGt0cy5hdHRyLAotCSZkcml2ZXJfYXR0cl9ldGhlcl9zcGt0cy5hdHRyLAotCSZkcml2ZXJfYXR0cl9ldGhlcl9ycGt0cy5hdHRyLAotCSZkcml2ZXJfYXR0cl9zbWFfc3BrdHMuYXR0ciwKLQkmZHJpdmVyX2F0dHJfc21hX3Jwa3RzLmF0dHIsCi0JJmRyaXZlcl9hdHRyX2hkcnFfZnVsbC5hdHRyLAotCSZkcml2ZXJfYXR0cl9ldGlkX2Z1bGwuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbm9fcGlvYnVmcy5hdHRyLAotCSZkcml2ZXJfYXR0cl9wb3J0cy5hdHRyLAotCSZkcml2ZXJfYXR0cl9wa2V5MC5hdHRyLAotCSZkcml2ZXJfYXR0cl9wa2V5MS5hdHRyLAotCSZkcml2ZXJfYXR0cl9wa2V5Mi5hdHRyLAotCSZkcml2ZXJfYXR0cl9wa2V5My5hdHRyLAotCSZkcml2ZXJfYXR0cl9saWQwLmF0dHIsCi0JJmRyaXZlcl9hdHRyX2xpZDEuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbGlkMi5hdHRyLAotCSZkcml2ZXJfYXR0cl9saWQzLmF0dHIsCi0JJmRyaXZlcl9hdHRyX25wb3J0cy5hdHRyLAotCSZkcml2ZXJfYXR0cl9udWxsX2ludHIuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbWF4X3BrdHNfY2FsbC5hdHRyLAotCSZkcml2ZXJfYXR0cl9hdmdfcGt0c19jYWxsLmF0dHIsCi0JJmRyaXZlcl9hdHRyX3BhZ2VfbG9ja3MuYXR0ciwKLQkmZHJpdmVyX2F0dHJfcGFnZV91bmxvY2tzLmF0dHIsCi0JJmRyaXZlcl9hdHRyX2tyZHJvcHMuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbWxpZDAuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbWxpZDEuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbWxpZDIuYXR0ciwKLQkmZHJpdmVyX2F0dHJfbWxpZDMuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkcml2ZXJfc3RhdF9hdHRyX2dyb3VwID0gewotCS5uYW1lID0gInN0YXRzIiwKLQkuYXR0cnMgPSBkcml2ZXJfc3RhdF9hdHRyaWJ1dGVzCi19OwotCiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNoYXIgKmJ1ZikKQEAgLTI3MiwyMyArMTgwLDIzIEBACiAJCQkgIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1MTYgbGlkOworCXUxNiBsaWQgPSAwOwogCWludCByZXQ7CiAKIAlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoYnVmLCAmbGlkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBpbnZhbGlkOwogCi0JaWYgKGxpZCA9PSAwIHx8IGxpZCA+PSAweGMwMDApIHsKKwlpZiAobGlkID09IDAgfHwgbGlkID49IElQQVRIX01VTFRJQ0FTVF9MSURfQkFTRSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGludmFsaWQ7CiAJfQogCi0JaXBhdGhfc2V0X3Nwc19saWQoZGQsIGxpZCwgMCk7CisJaXBhdGhfc2V0X2xpZChkZCwgbGlkLCAwKTsKIAogCWdvdG8gYmFpbDsKIGludmFsaWQ6Ci0JaXBhdGhfZGV2X2VycihkZCwgImF0dGVtcHQgdG8gc2V0IGludmFsaWQgTElEXG4iKTsKKwlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBMSUQgMHgleFxuIiwgbGlkKTsKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTMxMywxMyArMjIxLDEyIEBACiAJaW50IHJldDsKIAogCXJldCA9IGlwYXRoX3BhcnNlX3VzaG9ydChidWYsICZtbGlkKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCB8fCBtbGlkIDwgSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFKQogCQlnb3RvIGludmFsaWQ7CiAKIAl1bml0ID0gZGQtPmlwYXRoX3VuaXQ7CiAKIAlkZC0+aXBhdGhfbWxpZCA9IG1saWQ7Ci0JaXBhdGhfc3RhdHMuc3BzX21saWRbdW5pdF0gPSBtbGlkOwogCWlwYXRoX2xheWVyX2ludHIoZGQsIElQQVRIX0xBWUVSX0lOVF9CQ0FTVCk7CiAKIAlnb3RvIGJhaWw7CkBAIC03MzQsMjAgKzY0MSwxMiBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRydi0+a29iaiwgJmRyaXZlcl9hdHRyX2dyb3VwKTsKLQlpZiAocmV0KQotCQlnb3RvIGJhaWw7CiAKLQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRydi0+a29iaiwgJmRyaXZlcl9zdGF0X2F0dHJfZ3JvdXApOwotCWlmIChyZXQpCi0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmZHJ2LT5rb2JqLCAmZHJpdmVyX2F0dHJfZ3JvdXApOwotCi1iYWlsOgogCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgaXBhdGhfZHJpdmVyX3JlbW92ZV9ncm91cChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZHJ2LT5rb2JqLCAmZHJpdmVyX3N0YXRfYXR0cl9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkcnYtPmtvYmosICZkcml2ZXJfYXR0cl9ncm91cCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKaW5kZXggMGQ2ZGJjMC4uYzMzYWJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC0zMSw3ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCi0jaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiAvKiBjdXQgZG93biByaWRpY3Vsb3VzbHkgbG9uZyBJQiBtYWNybyBuYW1lcyAqLwogI2RlZmluZSBPUCh4KSBJQl9PUENPREVfVUNfIyN4CkBAIC02MSw5MCArNjIsNDAgQEAKIH0KIAogLyoqCi0gKiBpcGF0aF9kb191Y19zZW5kIC0gZG8gYSBzZW5kIG9uIGEgVUMgcXVldWUKLSAqIEBkYXRhOiBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIFFQIHRvIHNlbmQgb24KKyAqIGlwYXRoX21ha2VfdWNfcmVxIC0gY29uc3RydWN0IGEgcmVxdWVzdCBwYWNrZXQgKFNFTkQsIFJETUEgd3JpdGUpCisgKiBAcXA6IGEgcG9pbnRlciB0byB0aGUgUVAKKyAqIEBvaGRyOiBhIHBvaW50ZXIgdG8gdGhlIElCIGhlYWRlciBiZWluZyBjb25zdHJ1Y3RlZAorICogQHBtdHU6IHRoZSBwYXRoIE1UVQorICogQGJ0aDBwOiBwb2ludGVyIHRvIHRoZSBCVEggb3Bjb2RlIHdvcmQKKyAqIEBidGgycDogcG9pbnRlciB0byB0aGUgQlRIIFBTTiB3b3JkCiAgKgotICogUHJvY2VzcyBlbnRyaWVzIGluIHRoZSBzZW5kIHdvcmsgcXVldWUgdW50aWwgdGhlIHF1ZXVlIGlzIGV4aGF1c3RlZC4KLSAqIE9ubHkgYWxsb3cgb25lIENQVSB0byBzZW5kIGEgcGFja2V0IHBlciBRUCAodGFza2xldCkuCi0gKiBPdGhlcndpc2UsIGFmdGVyIHdlIGRyb3AgdGhlIFFQIGxvY2ssIHR3byB0aHJlYWRzIGNvdWxkIHNlbmQKLSAqIHBhY2tldHMgb3V0IG9mIG9yZGVyLgotICogVGhpcyBpcyBzaW1pbGFyIHRvIGlwYXRoX2RvX3JjX3NlbmQoKSBiZWxvdyBleGNlcHQgd2UgZG9uJ3QgaGF2ZQotICogdGltZW91dHMgb3IgcmVzZW5kcy4KKyAqIFJldHVybiAxIGlmIGNvbnN0cnVjdGVkOyBvdGhlcndpc2UsIHJldHVybiAwLgorICogTm90ZSB0aGUgUVAgc19sb2NrIG11c3QgYmUgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwotdm9pZCBpcGF0aF9kb191Y19zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKK2ludCBpcGF0aF9tYWtlX3VjX3JlcShzdHJ1Y3QgaXBhdGhfcXAgKnFwLAorCQkgICAgICBzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkciwKKwkJICAgICAgdTMyIHBtdHUsIHUzMiAqYnRoMHAsIHUzMiAqYnRoMnApCiB7Ci0Jc3RydWN0IGlwYXRoX3FwICpxcCA9IChzdHJ1Y3QgaXBhdGhfcXAgKilkYXRhOwotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9zd3FlICp3cWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MTYgbHJoMDsKIAl1MzIgaHdvcmRzOwotCXUzMiBud29yZHM7Ci0JdTMyIGV4dHJhX2J5dGVzOwogCXUzMiBidGgwOwotCXUzMiBidGgyOwotCXUzMiBwbXR1ID0gaWJfbXR1X2VudW1fdG9faW50KHFwLT5wYXRoX210dSk7CiAJdTMyIGxlbjsKLQlzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkcjsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncykpCi0JCWdvdG8gYmFpbDsKLQotCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCA9PQotCQkgICAgIGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7Ci0JCS8qIFBhc3MgaW4gYW4gdW5pbml0aWFsaXplZCBpYl93YyB0byBzYXZlIHN0YWNrIHNwYWNlLiAqLwotCQlpcGF0aF9ydWNfbG9vcGJhY2socXAsICZ3Yyk7Ci0JCWNsZWFyX2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQlvaGRyID0gJnFwLT5zX2hkci51Lm90aDsKLQlpZiAocXAtPnJlbW90ZV9haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKQotCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOwotCi1hZ2FpbjoKLQkvKiBDaGVjayBmb3IgYSBjb25zdHJ1Y3RlZCBwYWNrZXQgdG8gYmUgc2VudC4gKi8KLQlpZiAocXAtPnNfaGRyd29yZHMgIT0gMCkgewotCQkJLyoKLQkJCSAqIElmIG5vIFBJTyBidWZzIGFyZSBhdmFpbGFibGUsIHJldHVybi4KLQkJCSAqIEFuIGludGVycnVwdCB3aWxsIGNhbGwgaXBhdGhfaWJfcGlvYnVmYXZhaWwoKQotCQkJICogd2hlbiBvbmUgaXMgYXZhaWxhYmxlLgotCQkJICovCi0JCQlpZiAoaXBhdGhfdmVyYnNfc2VuZChkZXYtPmRkLCBxcC0+c19oZHJ3b3JkcywKLQkJCQkJICAgICAodTMyICopICZxcC0+c19oZHIsCi0JCQkJCSAgICAgcXAtPnNfY3VyX3NpemUsCi0JCQkJCSAgICAgcXAtPnNfY3VyX3NnZSkpIHsKLQkJCQlpcGF0aF9ub19idWZzX2F2YWlsYWJsZShxcCwgZGV2KTsKLQkJCQlnb3RvIGJhaWw7Ci0JCQl9Ci0JCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7Ci0JCS8qIFJlY29yZCB0aGF0IHdlIHNlbnQgdGhlIHBhY2tldCBhbmQgc19oZHIgaXMgZW1wdHkuICovCi0JCXFwLT5zX2hkcndvcmRzID0gMDsKLQl9Ci0KLQlscmgwID0gSVBTX0xSSF9CVEg7Ci0JLyogaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzIExSSCtCVEggPSAoOCsxMikvNC4gKi8KLQlod29yZHMgPSA1OwotCi0JLyoKLQkgKiBUaGUgbG9jayBpcyBuZWVkZWQgdG8gc3luY2hyb25pemUgYmV0d2VlbgotCSAqIHNldHRpbmcgcXAtPnNfYWNrX3N0YXRlIGFuZCBwb3N0X3NlbmQoKS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwotCiAJaWYgKCEoaWJfaXBhdGhfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBJUEFUSF9QUk9DRVNTX1NFTkRfT0spKQogCQlnb3RvIGRvbmU7CiAKLQlidGgwID0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7CisJLyogaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzIExSSCtCVEggPSAoOCsxMikvNC4gKi8KKwlod29yZHMgPSA1OworCWJ0aDAgPSAwOwogCi0JLyogU2VuZCBhIHJlcXVlc3QuICovCisJLyogR2V0IHRoZSBuZXh0IHNlbmQgcmVxdWVzdC4gKi8KIAl3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOwogCXN3aXRjaCAocXAtPnNfc3RhdGUpIHsKIAlkZWZhdWx0OgogCQkvKgotCQkgKiBTaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGxhc3Qgc2VuZCAoaWYgdGhlcmUgaXMKLQkJICogb25lKS4KKwkJICogU2lnbmFsIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBsYXN0IHNlbmQKKwkJICogKGlmIHRoZXJlIGlzIG9uZSkuCiAJCSAqLwogCQlpZiAocXAtPnNfbGFzdCAhPSBxcC0+c190YWlsKQogCQkJY29tcGxldGVfbGFzdF9zZW5kKHFwLCB3cWUsICZ3Yyk7CkBAIC0yNTcsNjEgKzIwOCwxNiBAQAogCQl9CiAJCWJyZWFrOwogCX0KLQlidGgyID0gcXAtPnNfbmV4dF9wc24rKyAmIElQU19QU05fTUFTSzsKIAlxcC0+c19sZW4gLT0gbGVuOwotCWJ0aDAgfD0gcXAtPnNfc3RhdGUgPDwgMjQ7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7Ci0KLQkvKiBDb25zdHJ1Y3QgdGhlIGhlYWRlci4gKi8KLQlleHRyYV9ieXRlcyA9ICg0IC0gbGVuKSAmIDM7Ci0JbndvcmRzID0gKGxlbiArIGV4dHJhX2J5dGVzKSA+PiAyOwotCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpKSB7Ci0JCS8qIEhlYWRlciBzaXplIGluIDMyLWJpdCB3b3Jkcy4gKi8KLQkJaHdvcmRzICs9IDEwOwotCQlscmgwID0gSVBTX0xSSF9HUkg7Ci0JCXFwLT5zX2hkci51LmwuZ3JoLnZlcnNpb25fdGNsYXNzX2Zsb3cgPQotCQkJY3B1X3RvX2JlMzIoKDYgPDwgMjgpIHwKLQkJCQkgICAgKHFwLT5yZW1vdGVfYWhfYXR0ci5ncmgudHJhZmZpY19jbGFzcwotCQkJCSAgICAgPDwgMjApIHwKLQkJCQkgICAgcXAtPnJlbW90ZV9haF9hdHRyLmdyaC5mbG93X2xhYmVsKTsKLQkJcXAtPnNfaGRyLnUubC5ncmgucGF5bGVuID0KLQkJCWNwdV90b19iZTE2KCgoaHdvcmRzIC0gMTIpICsgbndvcmRzICsKLQkJCQkgICAgIFNJWkVfT0ZfQ1JDKSA8PCAyKTsKLQkJLyogbmV4dF9oZHIgaXMgZGVmaW5lZCBieSBDOC03IGluIGNoLiA4LjQuMSAqLwotCQlxcC0+c19oZHIudS5sLmdyaC5uZXh0X2hkciA9IDB4MUI7Ci0JCXFwLT5zX2hkci51LmwuZ3JoLmhvcF9saW1pdCA9Ci0JCQlxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLmhvcF9saW1pdDsKLQkJLyogVGhlIFNHSUQgaXMgMzItYml0IGFsaWduZWQuICovCi0JCXFwLT5zX2hkci51LmwuZ3JoLnNnaWQuZ2xvYmFsLnN1Ym5ldF9wcmVmaXggPQotCQkJZGV2LT5naWRfcHJlZml4OwotCQlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQgPQotCQkJaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGV2LT5kZCk7Ci0JCXFwLT5zX2hkci51LmwuZ3JoLmRnaWQgPSBxcC0+cmVtb3RlX2FoX2F0dHIuZ3JoLmRnaWQ7Ci0JfQogCXFwLT5zX2hkcndvcmRzID0gaHdvcmRzOwogCXFwLT5zX2N1cl9zZ2UgPSAmcXAtPnNfc2dlOwogCXFwLT5zX2N1cl9zaXplID0gbGVuOwotCWxyaDAgfD0gcXAtPnJlbW90ZV9haF9hdHRyLnNsIDw8IDQ7Ci0JcXAtPnNfaGRyLmxyaFswXSA9IGNwdV90b19iZTE2KGxyaDApOwotCS8qIERFU1QgTElEICovCi0JcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKLQlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYoaHdvcmRzICsgbndvcmRzICsgU0laRV9PRl9DUkMpOwotCXFwLT5zX2hkci5scmhbM10gPSBjcHVfdG9fYmUxNihpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKTsKLQlidGgwIHw9IGV4dHJhX2J5dGVzIDw8IDIwOwotCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOwotCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKLQlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihidGgyKTsKLQotCS8qIENoZWNrIGZvciBtb3JlIHdvcmsgdG8gZG8uICovCi0JZ290byBhZ2FpbjsKKwkqYnRoMHAgPSBidGgwIHwgKHFwLT5zX3N0YXRlIDw8IDI0KTsKKwkqYnRoMnAgPSBxcC0+c19uZXh0X3BzbisrICYgSVBBVEhfUFNOX01BU0s7CisJcmV0dXJuIDE7CiAKIGRvbmU6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwotCWNsZWFyX2JpdChJUEFUSF9TX0JVU1ksICZxcC0+c19mbGFncyk7Ci0KLWJhaWw6Ci0JcmV0dXJuOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTMzNSw3ICsyNDEsNiBAQAogCXUzMiBoZHJzaXplOwogCXUzMiBwc247CiAJdTMyIHBhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpYl93YyB3YzsKIAl1MzIgcG10dSA9IGliX210dV9lbnVtX3RvX2ludChxcC0+cGF0aF9tdHUpOwogCXN0cnVjdCBpYl9yZXRoICpyZXRoOwpAQCAtMzczLDggKzI3OCw2IEBACiAJd2MuaW1tX2RhdGEgPSAwOwogCXdjLndjX2ZsYWdzID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7Ci0KIAkvKiBDb21wYXJlIHRoZSBQU04gdmVyc2VzIHRoZSBleHBlY3RlZCBQU04uICovCiAJaWYgKHVubGlrZWx5KGlwYXRoX2NtcDI0KHBzbiwgcXAtPnJfcHNuKSAhPSAwKSkgewogCQkvKgpAQCAtNTM1LDEyICs0MzgsMTMgQEAKIAkJaWYgKHFwLT5yX2xlbiAhPSAwKSB7CiAJCQl1MzIgcmtleSA9IGJlMzJfdG9fY3B1KHJldGgtPnJrZXkpOwogCQkJdTY0IHZhZGRyID0gYmU2NF90b19jcHUocmV0aC0+dmFkZHIpOworCQkJaW50IG9rOwogCiAJCQkvKiBDaGVjayBya2V5ICovCi0JCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soCi0JCQkJCSAgICAgZGV2LCAmcXAtPnJfc2dlLCBxcC0+cl9sZW4sCi0JCQkJCSAgICAgdmFkZHIsIHJrZXksCi0JCQkJCSAgICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSkpKSB7CisJCQlvayA9IGlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnJfc2dlLCBxcC0+cl9sZW4sCisJCQkJCSAgIHZhZGRyLCBya2V5LAorCQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKTsKKwkJCWlmICh1bmxpa2VseSghb2spKSB7CiAJCQkJZGV2LT5uX3BrdF9kcm9wcysrOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTU1OCw4ICs0NjIsNyBAQAogCQl9CiAJCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9PTkxZKSkKIAkJCWdvdG8gcmRtYV9sYXN0OwotCQllbHNlIGlmIChvcGNvZGUgPT0KLQkJCSBPUChSRE1BX1dSSVRFX09OTFlfV0lUSF9JTU1FRElBVEUpKQorCQllbHNlIGlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9PTkxZX1dJVEhfSU1NRURJQVRFKSkKIAkJCWdvdG8gcmRtYV9sYXN0X2ltbTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIE9QKFJETUFfV1JJVEVfTUlERExFKToKQEAgLTU5Miw5ICs0OTUsOSBAQAogCQkJZGV2LT5uX3BrdF9kcm9wcysrOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWlmIChxcC0+cl9yZXVzZV9zZ2UpIHsKKwkJaWYgKHFwLT5yX3JldXNlX3NnZSkKIAkJCXFwLT5yX3JldXNlX3NnZSA9IDA7Ci0JCX0gZWxzZSBpZiAoIWlwYXRoX2dldF9yd3FlKHFwLCAxKSkgeworCQllbHNlIGlmICghaXBhdGhfZ2V0X3J3cWUocXAsIDEpKSB7CiAJCQlkZXYtPm5fcGt0X2Ryb3BzKys7CiAJCQlnb3RvIGRvbmU7CiAJCX0KQEAgLTYzMSwxNSArNTM0LDExIEBACiAKIAlkZWZhdWx0OgogCQkvKiBEcm9wIHBhY2tldCBmb3IgdW5rbm93biBvcGNvZGVzLiAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CiAJCWRldi0+bl9wa3RfZHJvcHMrKzsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCXFwLT5yX3BzbisrOwogCXFwLT5yX3N0YXRlID0gb3Bjb2RlOwogZG9uZToKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7Ci0KLWJhaWw6CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCBlNjA2ZGFmLi4zNDY2MTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTMzLDcgKzM0LDcgQEAKICNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKLSNpbmNsdWRlICJpcHNfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKIC8qKgogICogaXBhdGhfdWRfbG9vcGJhY2sgLSBoYW5kbGUgc2VuZCBvbiBsb29wYmFjayBRUHMKQEAgLTI3NCw2ICsyNzUsMTEgQEAKIAkJbGVuICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKIAkJc3MubnVtX3NnZSsrOwogCX0KKwkvKiBDaGVjayBmb3IgaW52YWxpZCBwYWNrZXQgc2l6ZS4gKi8KKwlpZiAobGVuID4gaXBhdGhfbGF5ZXJfZ2V0X2libXR1KGRldi0+ZGQpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CiAJZXh0cmFfYnl0ZXMgPSAoNCAtIGxlbikgJiAzOwogCW53b3JkcyA9IChsZW4gKyBleHRyYV9ieXRlcykgPj4gMjsKIApAQCAtMjgzLDggKzI4OSw4IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9Ci0JaWYgKGFoX2F0dHItPmRsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSkgewotCQlpZiAoYWhfYXR0ci0+ZGxpZCAhPSBJUFNfUEVSTUlTU0lWRV9MSUQpCisJaWYgKGFoX2F0dHItPmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFKSB7CisJCWlmIChhaF9hdHRyLT5kbGlkICE9IElQQVRIX1BFUk1JU1NJVkVfTElEKQogCQkJZGV2LT5uX211bHRpY2FzdF94bWl0Kys7CiAJCWVsc2UKIAkJCWRldi0+bl91bmljYXN0X3htaXQrKzsKQEAgLTMwNCw3ICszMTAsNyBAQAogCWlmIChhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkgewogCQkvKiBIZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMuICovCiAJCWh3b3JkcyA9IDE3OwotCQlscmgwID0gSVBTX0xSSF9HUkg7CisJCWxyaDAgPSBJUEFUSF9MUkhfR1JIOwogCQlvaGRyID0gJnFwLT5zX2hkci51Lmwub3RoOwogCQlxcC0+c19oZHIudS5sLmdyaC52ZXJzaW9uX3RjbGFzc19mbG93ID0KIAkJCWNwdV90b19iZTMyKCg2IDw8IDI4KSB8CkBAIC0zMzAsNyArMzM2LDcgQEAKIAl9IGVsc2UgewogCQkvKiBIZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMuICovCiAJCWh3b3JkcyA9IDc7Ci0JCWxyaDAgPSBJUFNfTFJIX0JUSDsKKwkJbHJoMCA9IElQQVRIX0xSSF9CVEg7CiAJCW9oZHIgPSAmcXAtPnNfaGRyLnUub3RoOwogCX0KIAlpZiAod3ItPm9wY29kZSA9PSBJQl9XUl9TRU5EX1dJVEhfSU1NKSB7CkBAIC0zNjEsMTggKzM2NywxOCBAQAogCWlmICh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQogCQlidGgwIHw9IDEgPDwgMjM7CiAJYnRoMCB8PSBleHRyYV9ieXRlcyA8PCAyMDsKLQlidGgwIHw9IHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1NNSSA/IElQU19ERUZBVUxUX1BfS0VZIDoKKwlidGgwIHw9IHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1NNSSA/IElQQVRIX0RFRkFVTFRfUF9LRVkgOgogCQlpcGF0aF9sYXllcl9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKIAlvaGRyLT5idGhbMF0gPSBjcHVfdG9fYmUzMihidGgwKTsKIAkvKgogCSAqIFVzZSB0aGUgbXVsdGljYXN0IFFQIGlmIHRoZSBkZXN0aW5hdGlvbiBMSUQgaXMgYSBtdWx0aWNhc3QgTElELgogCSAqLwotCW9oZHItPmJ0aFsxXSA9IGFoX2F0dHItPmRsaWQgPj0gSVBTX01VTFRJQ0FTVF9MSURfQkFTRSAmJgotCQlhaF9hdHRyLT5kbGlkICE9IElQU19QRVJNSVNTSVZFX0xJRCA/Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoSVBTX01VTFRJQ0FTVF9RUE4pIDoKKwlvaGRyLT5idGhbMV0gPSBhaF9hdHRyLT5kbGlkID49IElQQVRIX01VTFRJQ0FTVF9MSURfQkFTRSAmJgorCQlhaF9hdHRyLT5kbGlkICE9IElQQVRIX1BFUk1JU1NJVkVfTElEID8KKwkJX19jb25zdGFudF9jcHVfdG9fYmUzMihJUEFUSF9NVUxUSUNBU1RfUVBOKSA6CiAJCWNwdV90b19iZTMyKHdyLT53ci51ZC5yZW1vdGVfcXBuKTsKIAkvKiBYWFggQ291bGQgbG9zZSBhIFBTTiBjb3VudCBidXQgbm90IHdvcnRoIGxvY2tpbmcgKi8KLQlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+c19uZXh0X3BzbisrICYgSVBTX1BTTl9NQVNLKTsKKwlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+c19uZXh0X3BzbisrICYgSVBBVEhfUFNOX01BU0spOwogCS8qCiAJICogUWtleXMgd2l0aCB0aGUgaGlnaCBvcmRlciBiaXQgc2V0IG1lYW4gdXNlIHRoZQogCSAqIHFrZXkgZnJvbSB0aGUgUVAgY29udGV4dCBpbnN0ZWFkIG9mIHRoZSBXUiAoc2VlIDEwLjIuNSkuCkBAIC00NjMsNyArNDY5LDcgQEAKIAkJCXNyY19xcCA9IGJlMzJfdG9fY3B1KG9oZHItPnUudWQuZGV0aFsxXSk7CiAJCX0KIAl9Ci0Jc3JjX3FwICY9IElQU19RUE5fTUFTSzsKKwlzcmNfcXAgJj0gSVBBVEhfUVBOX01BU0s7CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgdGhlIHBlcm1pc3NpdmUgTElEIGlzIG9ubHkgdXNlZCBvbiBRUDAKQEAgLTU1NCw3ICs1NjAsMTYgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocnEtPnRhaWwgPT0gcnEtPmhlYWQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQkJZGV2LT5uX3BrdF9kcm9wcysrOworCQkvKgorCQkgKiBDb3VudCBWTDE1IHBhY2tldHMgZHJvcHBlZCBkdWUgdG8gbm8gcmVjZWl2ZSBidWZmZXIuCisJCSAqIE90aGVyd2lzZSwgY291bnQgdGhlbSBhcyBidWZmZXIgb3ZlcnJ1bnMgc2luY2UgdXN1YWxseSwKKwkJICogdGhlIEhXIHdpbGwgYmUgYWJsZSB0byByZWNlaXZlIHBhY2tldHMgZXZlbiBpZiB0aGVyZSBhcmUKKwkJICogbm8gUVBzIHdpdGggcG9zdGVkIHJlY2VpdmUgYnVmZmVycy4KKwkJICovCisJCWlmIChxcC0+aWJxcC5xcF9udW0gPT0gMCkKKwkJCWRldi0+bl92bDE1X2Ryb3BwZWQrKzsKKwkJZWxzZQorCQkJZGV2LT5yY3ZfZXJyb3JzKys7CiAJCWdvdG8gYmFpbDsKIAl9CiAJLyogU2lsZW50bHkgZHJvcCBwYWNrZXRzIHdoaWNoIGFyZSB0b28gYmlnLiAqLwpAQCAtNjEyLDcgKzYyNyw3IEBACiAJLyoKIAkgKiBTYXZlIHRoZSBMTUMgbG93ZXIgYml0cyBpZiB0aGUgZGVzdGluYXRpb24gTElEIGlzIGEgdW5pY2FzdCBMSUQuCiAJICovCi0Jd2MuZGxpZF9wYXRoX2JpdHMgPSBkbGlkID49IElQU19NVUxUSUNBU1RfTElEX0JBU0UgPyAwIDoKKwl3Yy5kbGlkX3BhdGhfYml0cyA9IGRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFID8gMCA6CiAJCWRsaWQgJiAoKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKIAkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCAyYmIwOGFmLi5lMzJmY2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCkBAIC01NywxNyArNTgsNiBAQAogCXNpemVfdCBnb3Q7CiAJaW50IHJldDsKIAotI2lmIDAKLQkvKgotCSAqIFhYWCAtIGNhdXNlcyBNUEkgcHJvZ3JhbXMgdG8gZmFpbCwgaGF2ZW4ndCBoYWQgdGltZSB0byBjaGVjawotCSAqIHlldAotCSAqLwotCWlmICghY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7Ci0JCXJldCA9IC1FUEVSTTsKLQkJZ290byBiYWlsOwotCX0KLSNlbmRpZgotCiAJbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgPj4KIAkJUEFHRV9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwppbmRleCAyOGZkYmRhLi41NmFjMzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTM2LDcgKzM3LDcgQEAKIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCi0jaW5jbHVkZSAiaXBzX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiAvKiBOb3Qgc3RhdGljLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGNvbXBpbGVyIHJlbW92aW5nIGl0ICovCiBjb25zdCBjaGFyIGlwYXRoX3ZlcmJzX3ZlcnNpb25bXSA9ICJpcGF0aF92ZXJicyAiIElQQVRIX0lEU1RSOwpAQCAtNTUsOSArNTYsNjIgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaWJfaXBhdGhfZGVidWcsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJWZXJicyBkZWJ1ZyBtYXNrIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X3BkcyA9IDB4RkZGRjsKK21vZHVsZV9wYXJhbV9uYW1lZChtYXhfcGRzLCBpYl9pcGF0aF9tYXhfcGRzLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9wZHMsCisJCSAiTWF4aW11bSBudW1iZXIgb2YgcHJvdGVjdGlvbiBkb21haW5zIHRvIHN1cHBvcnQiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfYWhzID0gMHhGRkZGOworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9haHMsIGliX2lwYXRoX21heF9haHMsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X2FocywgIk1heGltdW0gbnVtYmVyIG9mIGFkZHJlc3MgaGFuZGxlcyB0byBzdXBwb3J0Iik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfY3FlcyA9IDB4MkZGRkY7Cittb2R1bGVfcGFyYW1fbmFtZWQobWF4X2NxZXMsIGliX2lwYXRoX21heF9jcWVzLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9jcWVzLAorCQkgIk1heGltdW0gbnVtYmVyIG9mIGNvbXBsZXRpb24gcXVldWUgZW50cmllcyB0byBzdXBwb3J0Iik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfY3FzID0gMHgxRkZGRjsKK21vZHVsZV9wYXJhbV9uYW1lZChtYXhfY3FzLCBpYl9pcGF0aF9tYXhfY3FzLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9jcXMsICJNYXhpbXVtIG51bWJlciBvZiBjb21wbGV0aW9uIHF1ZXVlcyB0byBzdXBwb3J0Iik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfcXBfd3JzID0gMHgzRkZGOworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9xcF93cnMsIGliX2lwYXRoX21heF9xcF93cnMsIHVpbnQsCisJCSAgIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X3FwX3dycywgIk1heGltdW0gbnVtYmVyIG9mIFFQIFdScyB0byBzdXBwb3J0Iik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfc2dlcyA9IDB4NjA7Cittb2R1bGVfcGFyYW1fbmFtZWQobWF4X3NnZXMsIGliX2lwYXRoX21heF9zZ2VzLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9zZ2VzLCAiTWF4aW11bSBudW1iZXIgb2YgU0dFcyB0byBzdXBwb3J0Iik7CisKK3Vuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfbWNhc3RfZ3JwcyA9IDE2Mzg0OworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9tY2FzdF9ncnBzLCBpYl9pcGF0aF9tYXhfbWNhc3RfZ3JwcywgdWludCwKKwkJICAgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhtYXhfbWNhc3RfZ3JwcywKKwkJICJNYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHRvIHN1cHBvcnQiKTsKKwordW5zaWduZWQgaW50IGliX2lwYXRoX21heF9tY2FzdF9xcF9hdHRhY2hlZCA9IDE2OworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9tY2FzdF9xcF9hdHRhY2hlZCwgaWJfaXBhdGhfbWF4X21jYXN0X3FwX2F0dGFjaGVkLAorCQkgICB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9tY2FzdF9xcF9hdHRhY2hlZCwKKwkJICJNYXhpbXVtIG51bWJlciBvZiBhdHRhY2hlZCBRUHMgdG8gc3VwcG9ydCIpOworCit1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X3NycXMgPSAxMDI0OworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9zcnFzLCBpYl9pcGF0aF9tYXhfc3JxcywgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc3JxcywgIk1heGltdW0gbnVtYmVyIG9mIFNSUXMgdG8gc3VwcG9ydCIpOworCit1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X3NycV9zZ2VzID0gMTI4OworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9zcnFfc2dlcywgaWJfaXBhdGhfbWF4X3NycV9zZ2VzLAorCQkgICB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9zcnFfc2dlcywgIk1heGltdW0gbnVtYmVyIG9mIFNSUSBTR0VzIHRvIHN1cHBvcnQiKTsKKwordW5zaWduZWQgaW50IGliX2lwYXRoX21heF9zcnFfd3JzID0gMHgxRkZGRjsKK21vZHVsZV9wYXJhbV9uYW1lZChtYXhfc3JxX3dycywgaWJfaXBhdGhfbWF4X3NycV93cnMsCisJCSAgIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X3NycV93cnMsICJNYXhpbXVtIG51bWJlciBvZiBTUlEgV1JzIHN1cHBvcnQiKTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUGF0aFNjYWxlIDxzdXBwb3J0QHBhdGhzY2FsZS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBhdGhzY2FsZSBJbmZpbmlQYXRoIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiUUxvZ2ljIDxzdXBwb3J0QHBhdGhzY2FsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYyBJbmZpbmlQYXRoIGRyaXZlciIpOwogCiBjb25zdCBpbnQgaWJfaXBhdGhfc3RhdGVfb3BzW0lCX1FQU19FUlIgKyAxXSA9IHsKIAlbSUJfUVBTX1JFU0VUXSA9IDAsCkBAIC0xOTMsNyArMjQ3LDcgQEAKIAkJc3dpdGNoIChxcC0+aWJxcC5xcF90eXBlKSB7CiAJCWNhc2UgSUJfUVBUX1VDOgogCQljYXNlIElCX1FQVF9SQzoKLQkJCWVyciA9IGlwYXRoX3Bvc3RfcmNfc2VuZChxcCwgd3IpOworCQkJZXJyID0gaXBhdGhfcG9zdF9ydWNfc2VuZChxcCwgd3IpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBJQl9RUFRfU01JOgpAQCAtMzc1LDcgKzQyOSw3IEBACiAKIAkvKiBDaGVjayBmb3IgYSB2YWxpZCBkZXN0aW5hdGlvbiBMSUQgKHNlZSBjaC4gNy4xMS4xKS4gKi8KIAlsaWQgPSBiZTE2X3RvX2NwdShoZHItPmxyaFsxXSk7Ci0JaWYgKGxpZCA8IElQU19NVUxUSUNBU1RfTElEX0JBU0UpIHsKKwlpZiAobGlkIDwgSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFKSB7CiAJCWxpZCAmPSB+KCgxIDw8IChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNykpIC0gMSk7CiAJCWlmICh1bmxpa2VseShsaWQgIT0gaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKSkpIHsKIAkJCWRldi0+cmN2X2Vycm9ycysrOwpAQCAtMzg1LDkgKzQzOSw5IEBACiAKIAkvKiBDaGVjayBmb3IgR1JIICovCiAJbG5oID0gYmUxNl90b19jcHUoaGRyLT5scmhbMF0pICYgMzsKLQlpZiAobG5oID09IElQU19MUkhfQlRIKQorCWlmIChsbmggPT0gSVBBVEhfTFJIX0JUSCkKIAkJb2hkciA9ICZoZHItPnUub3RoOwotCWVsc2UgaWYgKGxuaCA9PSBJUFNfTFJIX0dSSCkKKwllbHNlIGlmIChsbmggPT0gSVBBVEhfTFJIX0dSSCkKIAkJb2hkciA9ICZoZHItPnUubC5vdGg7CiAJZWxzZSB7CiAJCWRldi0+cmN2X2Vycm9ycysrOwpAQCAtMzk5LDggKzQ1Myw4IEBACiAJZGV2LT5vcHN0YXRzW29wY29kZV0ubl9wYWNrZXRzKys7CiAKIAkvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIFFQIG51bWJlci4gKi8KLQlxcF9udW0gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMV0pICYgSVBTX1FQTl9NQVNLOwotCWlmIChxcF9udW0gPT0gSVBTX01VTFRJQ0FTVF9RUE4pIHsKKwlxcF9udW0gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMV0pICYgSVBBVEhfUVBOX01BU0s7CisJaWYgKHFwX251bSA9PSBJUEFUSF9NVUxUSUNBU1RfUVBOKSB7CiAJCXN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3Q7CiAJCXN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqcDsKIApAQCAtNDExLDcgKzQ2NSw3IEBACiAJCX0KIAkJZGV2LT5uX211bHRpY2FzdF9yY3YrKzsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJm1jYXN0LT5xcF9saXN0LCBsaXN0KQotCQkJaXBhdGhfcXBfcmN2KGRldiwgaGRyLCBsbmggPT0gSVBTX0xSSF9HUkgsIGRhdGEsCisJCQlpcGF0aF9xcF9yY3YoZGV2LCBoZHIsIGxuaCA9PSBJUEFUSF9MUkhfR1JILCBkYXRhLAogCQkJCSAgICAgdGxlbiwgcC0+cXApOwogCQkvKgogCQkgKiBOb3RpZnkgaXBhdGhfbXVsdGljYXN0X2RldGFjaCgpIGlmIGl0IGlzIHdhaXRpbmcgZm9yIHVzCkBAIC00MjMsNyArNDc3LDcgQEAKIAkJcXAgPSBpcGF0aF9sb29rdXBfcXBuKCZkZXYtPnFwX3RhYmxlLCBxcF9udW0pOwogCQlpZiAocXApIHsKIAkJCWRldi0+bl91bmljYXN0X3JjdisrOwotCQkJaXBhdGhfcXBfcmN2KGRldiwgaGRyLCBsbmggPT0gSVBTX0xSSF9HUkgsIGRhdGEsCisJCQlpcGF0aF9xcF9yY3YoZGV2LCBoZHIsIGxuaCA9PSBJUEFUSF9MUkhfR1JILCBkYXRhLAogCQkJCSAgICAgdGxlbiwgcXApOwogCQkJLyoKIAkJCSAqIE5vdGlmeSBpcGF0aF9kZXN0cm95X3FwKCkgaWYgaXQgaXMgd2FpdGluZwpAQCAtNTY3LDQwICs2MjEsMzggQEAKIAkJCSAgICAgIHN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqcHJvcHMpCiB7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliZGV2KTsKLQl1MzIgdmVuZG9yLCBib2FyZHJldiwgbWFqcmV2LCBtaW5yZXY7CiAKIAltZW1zZXQocHJvcHMsIDAsIHNpemVvZigqcHJvcHMpKTsKIAogCXByb3BzLT5kZXZpY2VfY2FwX2ZsYWdzID0gSUJfREVWSUNFX0JBRF9QS0VZX0NOVFIgfAogCQlJQl9ERVZJQ0VfQkFEX1FLRVlfQ05UUiB8IElCX0RFVklDRV9TSFVURE9XTl9QT1JUIHwKIAkJSUJfREVWSUNFX1NZU19JTUFHRV9HVUlEOwotCWlwYXRoX2xheWVyX3F1ZXJ5X2RldmljZShkZXYtPmRkLCAmdmVuZG9yLCAmYm9hcmRyZXYsCi0JCQkJICZtYWpyZXYsICZtaW5yZXYpOwotCXByb3BzLT52ZW5kb3JfaWQgPSB2ZW5kb3I7Ci0JcHJvcHMtPnZlbmRvcl9wYXJ0X2lkID0gYm9hcmRyZXY7Ci0JcHJvcHMtPmh3X3ZlciA9IGJvYXJkcmV2IDw8IDE2IHwgbWFqcmV2IDw8IDggfCBtaW5yZXY7CisJcHJvcHMtPnZlbmRvcl9pZCA9IGlwYXRoX2xheWVyX2dldF92ZW5kb3JpZChkZXYtPmRkKTsKKwlwcm9wcy0+dmVuZG9yX3BhcnRfaWQgPSBpcGF0aF9sYXllcl9nZXRfZGV2aWNlaWQoZGV2LT5kZCk7CisJcHJvcHMtPmh3X3ZlciA9IGlwYXRoX2xheWVyX2dldF9wY2lyZXYoZGV2LT5kZCk7CiAKIAlwcm9wcy0+c3lzX2ltYWdlX2d1aWQgPSBkZXYtPnN5c19pbWFnZV9ndWlkOwogCiAJcHJvcHMtPm1heF9tcl9zaXplID0gfjB1bGw7Ci0JcHJvcHMtPm1heF9xcCA9IDB4ZmZmZjsKLQlwcm9wcy0+bWF4X3FwX3dyID0gMHhmZmZmOwotCXByb3BzLT5tYXhfc2dlID0gMjU1OwotCXByb3BzLT5tYXhfY3EgPSAweGZmZmY7Ci0JcHJvcHMtPm1heF9jcWUgPSAweGZmZmY7Ci0JcHJvcHMtPm1heF9tciA9IDB4ZmZmZjsKLQlwcm9wcy0+bWF4X3BkID0gMHhmZmZmOworCXByb3BzLT5tYXhfcXAgPSBkZXYtPnFwX3RhYmxlLm1heDsKKwlwcm9wcy0+bWF4X3FwX3dyID0gaWJfaXBhdGhfbWF4X3FwX3dyczsKKwlwcm9wcy0+bWF4X3NnZSA9IGliX2lwYXRoX21heF9zZ2VzOworCXByb3BzLT5tYXhfY3EgPSBpYl9pcGF0aF9tYXhfY3FzOworCXByb3BzLT5tYXhfYWggPSBpYl9pcGF0aF9tYXhfYWhzOworCXByb3BzLT5tYXhfY3FlID0gaWJfaXBhdGhfbWF4X2NxZXM7CisJcHJvcHMtPm1heF9tciA9IGRldi0+bGtfdGFibGUubWF4OworCXByb3BzLT5tYXhfcGQgPSBpYl9pcGF0aF9tYXhfcGRzOwogCXByb3BzLT5tYXhfcXBfcmRfYXRvbSA9IDE7CiAJcHJvcHMtPm1heF9xcF9pbml0X3JkX2F0b20gPSAxOwogCS8qIHByb3BzLT5tYXhfcmVzX3JkX2F0b20gKi8KLQlwcm9wcy0+bWF4X3NycSA9IDB4ZmZmZjsKLQlwcm9wcy0+bWF4X3NycV93ciA9IDB4ZmZmZjsKLQlwcm9wcy0+bWF4X3NycV9zZ2UgPSAyNTU7CisJcHJvcHMtPm1heF9zcnEgPSBpYl9pcGF0aF9tYXhfc3JxczsKKwlwcm9wcy0+bWF4X3NycV93ciA9IGliX2lwYXRoX21heF9zcnFfd3JzOworCXByb3BzLT5tYXhfc3JxX3NnZSA9IGliX2lwYXRoX21heF9zcnFfc2dlczsKIAkvKiBwcm9wcy0+bG9jYWxfY2FfYWNrX2RlbGF5ICovCiAJcHJvcHMtPmF0b21pY19jYXAgPSBJQl9BVE9NSUNfSENBOwogCXByb3BzLT5tYXhfcGtleXMgPSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpOwotCXByb3BzLT5tYXhfbWNhc3RfZ3JwID0gMHhmZmZmOwotCXByb3BzLT5tYXhfbWNhc3RfcXBfYXR0YWNoID0gMHhmZmZmOworCXByb3BzLT5tYXhfbWNhc3RfZ3JwID0gaWJfaXBhdGhfbWF4X21jYXN0X2dycHM7CisJcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggPSBpYl9pcGF0aF9tYXhfbWNhc3RfcXBfYXR0YWNoZWQ7CiAJcHJvcHMtPm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2ggPSBwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaCAqCiAJCXByb3BzLT5tYXhfbWNhc3RfZ3JwOwogCkBAIC02NDMsMTAgKzY5NSwxMCBAQAogCQlpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoZGV2LT5kZCkgJiAweGZdOwogCXByb3BzLT5wb3J0X2NhcF9mbGFncyA9IGRldi0+cG9ydF9jYXBfZmxhZ3M7CiAJcHJvcHMtPmdpZF90YmxfbGVuID0gMTsKLQlwcm9wcy0+bWF4X21zZ19zeiA9IDQwOTY7CisJcHJvcHMtPm1heF9tc2dfc3ogPSAweDgwMDAwMDAwOwogCXByb3BzLT5wa2V5X3RibF9sZW4gPSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpOwogCXByb3BzLT5iYWRfcGtleV9jbnRyID0gaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoZGV2LT5kZCkgLQotCQlkZXYtPm5fcGtleV92aW9sYXRpb25zOworCQlkZXYtPnpfcGtleV92aW9sYXRpb25zOwogCXByb3BzLT5xa2V5X3Zpb2xfY250ciA9IGRldi0+cWtleV92aW9sYXRpb25zOwogCXByb3BzLT5hY3RpdmVfd2lkdGggPSBJQl9XSURUSF80WDsKIAkvKiBTZWUgcmF0ZV9zaG93KCkgKi8KQEAgLTc0MywxNSArNzk1LDMwIEBACiAJCQkJICAgIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKIAkJCQkgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKIHsKKwlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOwogCXN0cnVjdCBpcGF0aF9wZCAqcGQ7CiAJc3RydWN0IGliX3BkICpyZXQ7CiAKKwkvKgorCSAqIFRoaXMgaXMgYWN0dWFsbHkgdG90YWxseSBhcmJpdHJhcnkuCVNvbWUgY29ycmVjdG5lc3MgdGVzdHMKKwkgKiBhc3N1bWUgdGhlcmUncyBhIG1heGltdW0gbnVtYmVyIG9mIFBEcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQuCisJICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0aGlzIGxpbWl0LCBidXQgd2UgZmFpbCB0aGUgdGVzdCBpZgorCSAqIHdlIGFsbG93IGFsbG9jYXRpb25zIG9mIG1vcmUgdGhhbiB3ZSByZXBvcnQgZm9yIHRoaXMgdmFsdWUuCisJICovCisKKwlpZiAoZGV2LT5uX3Bkc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X3BkcykgeworCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGJhaWw7CisJfQorCiAJcGQgPSBrbWFsbG9jKHNpemVvZiAqcGQsIEdGUF9LRVJORUwpOwogCWlmICghcGQpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJZ290byBiYWlsOwogCX0KIAorCWRldi0+bl9wZHNfYWxsb2NhdGVkKys7CisKIAkvKiBpYl9hbGxvY19wZCgpIHdpbGwgaW5pdGlhbGl6ZSBwZC0+aWJwZC4gKi8KIAlwZC0+dXNlciA9IHVkYXRhICE9IE5VTEw7CiAKQEAgLTc2NCw2ICs4MzEsOSBAQAogc3RhdGljIGludCBpcGF0aF9kZWFsbG9jX3BkKHN0cnVjdCBpYl9wZCAqaWJwZCkKIHsKIAlzdHJ1Y3QgaXBhdGhfcGQgKnBkID0gdG9faXBkKGlicGQpOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnBkLT5kZXZpY2UpOworCisJZGV2LT5uX3Bkc19hbGxvY2F0ZWQtLTsKIAogCWtmcmVlKHBkKTsKIApAQCAtNzgyLDIxICs4NTIsNDAgQEAKIHsKIAlzdHJ1Y3QgaXBhdGhfYWggKmFoOwogCXN0cnVjdCBpYl9haCAqcmV0OworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihwZC0+ZGV2aWNlKTsKKworCWlmIChkZXYtPm5fYWhzX2FsbG9jYXRlZCA9PSBpYl9pcGF0aF9tYXhfYWhzKSB7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CiAKIAkvKiBBIG11bHRpY2FzdCBhZGRyZXNzIHJlcXVpcmVzIGEgR1JIIChzZWUgY2guIDguNC4xKS4gKi8KLQlpZiAoYWhfYXR0ci0+ZGxpZCA+PSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFICYmCi0JICAgIGFoX2F0dHItPmRsaWQgIT0gSVBTX1BFUk1JU1NJVkVfTElEICYmCisJaWYgKGFoX2F0dHItPmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFICYmCisJICAgIGFoX2F0dHItPmRsaWQgIT0gSVBBVEhfUEVSTUlTU0lWRV9MSUQgJiYKIAkgICAgIShhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkpIHsKIAkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJZ290byBiYWlsOwogCX0KIAorCWlmIChhaF9hdHRyLT5kbGlkID09IDApIHsKKwkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChhaF9hdHRyLT5wb3J0X251bSA8IDEgfHwKKwkgICAgYWhfYXR0ci0+cG9ydF9udW0gPiBwZC0+ZGV2aWNlLT5waHlzX3BvcnRfY250KSB7CisJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gYmFpbDsKKwl9CisKIAlhaCA9IGttYWxsb2Moc2l6ZW9mICphaCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFhaCkgewogCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlnb3RvIGJhaWw7CiAJfQogCisJZGV2LT5uX2Foc19hbGxvY2F0ZWQrKzsKKwogCS8qIGliX2NyZWF0ZV9haCgpIHdpbGwgaW5pdGlhbGl6ZSBhaC0+aWJhaC4gKi8KIAlhaC0+YXR0ciA9ICphaF9hdHRyOwogCkBAIC04MTQsOCArOTAzLDExIEBACiAgKi8KIHN0YXRpYyBpbnQgaXBhdGhfZGVzdHJveV9haChzdHJ1Y3QgaWJfYWggKmliYWgpCiB7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGliYWgtPmRldmljZSk7CiAJc3RydWN0IGlwYXRoX2FoICphaCA9IHRvX2lhaChpYmFoKTsKIAorCWRldi0+bl9haHNfYWxsb2NhdGVkLS07CisKIAlrZnJlZShhaCk7CiAKIAlyZXR1cm4gMDsKQEAgLTg4OSw2ICs5ODEsNyBAQAogICovCiBzdGF0aWMgdm9pZCAqaXBhdGhfcmVnaXN0ZXJfaWJfZGV2aWNlKGludCB1bml0LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CisJc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOwogCXN0cnVjdCBpcGF0aF9pYmRldiAqaWRldjsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CiAJaW50IHJldDsKQEAgLTkzOSw2ICsxMDMyLDI1IEBACiAJaWRldi0+cG1hX2NvdW50ZXJfc2VsZWN0WzVdID0gSUJfUE1BX1BPUlRfWE1JVF9XQUlUOwogCWlkZXYtPmxpbmtfd2lkdGhfZW5hYmxlZCA9IDM7CS8qIDF4IG9yIDR4ICovCiAKKwkvKiBTbmFwc2hvdCBjdXJyZW50IEhXIGNvdW50ZXJzIHRvICJjbGVhciIgdGhlbS4gKi8KKwlpcGF0aF9sYXllcl9nZXRfY291bnRlcnMoZGQsICZjbnRycyk7CisJaWRldi0+el9zeW1ib2xfZXJyb3JfY291bnRlciA9IGNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyOworCWlkZXYtPnpfbGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyID0KKwkJY250cnMubGlua19lcnJvcl9yZWNvdmVyeV9jb3VudGVyOworCWlkZXYtPnpfbGlua19kb3duZWRfY291bnRlciA9IGNudHJzLmxpbmtfZG93bmVkX2NvdW50ZXI7CisJaWRldi0+el9wb3J0X3Jjdl9lcnJvcnMgPSBjbnRycy5wb3J0X3Jjdl9lcnJvcnM7CisJaWRldi0+el9wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9CisJCWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzOworCWlkZXYtPnpfcG9ydF94bWl0X2Rpc2NhcmRzID0gY250cnMucG9ydF94bWl0X2Rpc2NhcmRzOworCWlkZXYtPnpfcG9ydF94bWl0X2RhdGEgPSBjbnRycy5wb3J0X3htaXRfZGF0YTsKKwlpZGV2LT56X3BvcnRfcmN2X2RhdGEgPSBjbnRycy5wb3J0X3Jjdl9kYXRhOworCWlkZXYtPnpfcG9ydF94bWl0X3BhY2tldHMgPSBjbnRycy5wb3J0X3htaXRfcGFja2V0czsKKwlpZGV2LT56X3BvcnRfcmN2X3BhY2tldHMgPSBjbnRycy5wb3J0X3Jjdl9wYWNrZXRzOworCWlkZXYtPnpfbG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzID0KKwkJY250cnMubG9jYWxfbGlua19pbnRlZ3JpdHlfZXJyb3JzOworCWlkZXYtPnpfZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9ycyA9CisJCWNudHJzLmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7CisKIAkvKgogCSAqIFRoZSBzeXN0ZW0gaW1hZ2UgR1VJRCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsCiAJICogSUIgSENBcyBpbiBhIHNpbmdsZSBzeXN0ZW0gYnV0IHNpbmNlIHRoZXJlIGNhbiBiZSBvdGhlcgpAQCAtMTEwOSwxMSArMTIyMSw4IEBACiB7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQogCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOwotCWludCB2ZW5kb3IsIGJvYXJkcmV2LCBtYWpyZXYsIG1pbnJldjsKIAotCWlwYXRoX2xheWVyX3F1ZXJ5X2RldmljZShkZXYtPmRkLCAmdmVuZG9yLCAmYm9hcmRyZXYsCi0JCQkJICZtYWpyZXYsICZtaW5yZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBtYWpyZXYsIG1pbnJldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGlwYXRoX2xheWVyX2dldF9wY2lyZXYoZGV2LT5kZCkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDRmOGQ1OTMuLjJkZjY4NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMTQ4LDYgKzE0OSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBxcF9saXN0OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJYXRvbWljX3QgcmVmY291bnQ7CisJaW50IG5fYXR0YWNoZWQ7CiB9OwogCiAvKiBNZW1vcnkgcmVnaW9uICovCkBAIC0zMDUsMzIgKzMwNywzNCBAQAogCXUzMiBzX25leHRfcHNuOwkJLyogUFNOIGZvciBuZXh0IHJlcXVlc3QgKi8KIAl1MzIgc19sYXN0X3BzbjsJCS8qIGxhc3QgcmVzcG9uc2UgUFNOIHByb2Nlc3NlZCAqLwogCXUzMiBzX3BzbjsJCS8qIGN1cnJlbnQgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworCXUzMiBzX2Fja19wc247CQkvKiBQU04gZm9yIFJETUFfUkVBRCAqLwogCXUzMiBzX3Jucl90aW1lb3V0OwkvKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZvciBSTlIgdGltZW91dCAqLwotCXUzMiBzX2Fja19wc247CQkvKiBQU04gZm9yIG5leHQgQUNLIG9yIFJETUFfUkVBRCAqLwotCXU2NCBzX2Fja19hdG9taWM7CS8qIGRhdGEgZm9yIGF0b21pYyBBQ0sgKi8KKwl1MzIgcl9hY2tfcHNuOwkJLyogUFNOIGZvciBuZXh0IEFDSyBvciBhdG9taWMgQUNLICovCiAJdTY0IHJfd3JfaWQ7CQkvKiBJRCBmb3IgY3VycmVudCByZWNlaXZlIFdRRSAqLwogCXU2NCByX2F0b21pY19kYXRhOwkvKiBkYXRhIGZvciBsYXN0IGF0b21pYyBvcCAqLwogCXUzMiByX2F0b21pY19wc247CS8qIFBTTiBvZiBsYXN0IGF0b21pYyBvcCAqLwogCXUzMiByX2xlbjsJCS8qIHRvdGFsIGxlbmd0aCBvZiByX3NnZSAqLwogCXUzMiByX3Jjdl9sZW47CQkvKiByZWNlaXZlIGRhdGEgbGVuIHByb2Nlc3NlZCAqLwogCXUzMiByX3BzbjsJCS8qIGV4cGVjdGVkIHJjdiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisJdTMyIHJfbXNuOwkJLyogbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgKi8KIAl1OCBzdGF0ZTsJCS8qIFFQIHN0YXRlICovCiAJdTggc19zdGF0ZTsJCS8qIG9wY29kZSBvZiBsYXN0IHBhY2tldCBzZW50ICovCiAJdTggc19hY2tfc3RhdGU7CQkvKiBvcGNvZGUgb2YgcGFja2V0IHRvIEFDSyAqLwogCXU4IHNfbmFrX3N0YXRlOwkJLyogbm9uLXplcm8gaWYgTkFLIGlzIHBlbmRpbmcgKi8KIAl1OCByX3N0YXRlOwkJLyogb3Bjb2RlIG9mIGxhc3QgcGFja2V0IHJlY2VpdmVkICovCisJdTggcl9hY2tfc3RhdGU7CQkvKiBvcGNvZGUgb2YgcGFja2V0IHRvIEFDSyAqLworCXU4IHJfbmFrX3N0YXRlOwkJLyogbm9uLXplcm8gaWYgTkFLIGlzIHBlbmRpbmcgKi8KKwl1OCByX21pbl9ybnJfdGltZXI7CS8qIHJldHJ5IHRpbWVvdXQgdmFsdWUgZm9yIFJOUiBOQUtzICovCiAJdTggcl9yZXVzZV9zZ2U7CQkvKiBmb3IgVUMgcmVjZWl2ZSBlcnJvcnMgKi8KIAl1OCByX3NnZV9pbng7CQkvKiBjdXJyZW50IGluZGV4IGludG8gc2dfbGlzdCAqLwotCXU4IHNfbWF4X3NnZTsJCS8qIHNpemUgb2Ygc193cS0+c2dfbGlzdCAqLwogCXU4IHFwX2FjY2Vzc19mbGFnczsKKwl1OCBzX21heF9zZ2U7CQkvKiBzaXplIG9mIHNfd3EtPnNnX2xpc3QgKi8KIAl1OCBzX3JldHJ5X2NudDsJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSAqLwogCXU4IHNfcm5yX3JldHJ5X2NudDsKLQl1OCBzX21pbl9ybnJfdGltZXI7CiAJdTggc19yZXRyeTsJCS8qIHJlcXVlc3RlciByZXRyeSBjb3VudGVyICovCiAJdTggc19ybnJfcmV0cnk7CQkvKiByZXF1ZXN0ZXIgUk5SIHJldHJ5IGNvdW50ZXIgKi8KIAl1OCBzX3BrZXlfaW5kZXg7CS8qIFBLRVkgaW5kZXggdG8gdXNlICovCiAJZW51bSBpYl9tdHUgcGF0aF9tdHU7Ci0JYXRvbWljX3QgbXNuOwkJLyogbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgKi8KIAl1MzIgcmVtb3RlX3FwbjsKIAl1MzIgcWtleTsJCS8qIFFLRVkgZm9yIHRoaXMgUVAgKGZvciBVRCBvciBSRCkgKi8KIAl1MzIgc19zaXplOwkJLyogc2VuZCB3b3JrIHF1ZXVlIHNpemUgKi8KQEAgLTQzMSw2ICs0MzUsMTEgQEAKIAlfX2JlNjQgc3lzX2ltYWdlX2d1aWQ7CS8qIGluIG5ldHdvcmsgb3JkZXIgKi8KIAlfX2JlNjQgZ2lkX3ByZWZpeDsJLyogaW4gbmV0d29yayBvcmRlciAqLwogCV9fYmU2NCBta2V5OworCXUzMiBuX3Bkc19hbGxvY2F0ZWQ7CS8qIG51bWJlciBvZiBQRHMgYWxsb2NhdGVkIGZvciBkZXZpY2UgKi8KKwl1MzIgbl9haHNfYWxsb2NhdGVkOwkvKiBudW1iZXIgb2YgQUhzIGFsbG9jYXRlZCBmb3IgZGV2aWNlICovCisJdTMyIG5fY3FzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIENRcyBhbGxvY2F0ZWQgZm9yIGRldmljZSAqLworCXUzMiBuX3NycXNfYWxsb2NhdGVkOwkvKiBudW1iZXIgb2YgU1JRcyBhbGxvY2F0ZWQgZm9yIGRldmljZSAqLworCXUzMiBuX21jYXN0X2dycHNfYWxsb2NhdGVkOyAvKiBudW1iZXIgb2YgbWNhc3QgZ3JvdXBzIGFsbG9jYXRlZCAqLwogCXU2NCBpcGF0aF9zd29yZDsJLyogdG90YWwgZHdvcmRzIHNlbnQgKHNhbXBsZSByZXN1bHQpICovCiAJdTY0IGlwYXRoX3J3b3JkOwkvKiB0b3RhbCBkd29yZHMgcmVjZWl2ZWQgKHNhbXBsZSByZXN1bHQpICovCiAJdTY0IGlwYXRoX3Nwa3RzOwkvKiB0b3RhbCBwYWNrZXRzIHNlbnQgKHNhbXBsZSByZXN1bHQpICovCkBAIC00NDIsMTcgKzQ1MSwxOSBAQAogCXU2NCBuX3VuaWNhc3RfcmN2OwkvKiB0b3RhbCB1bmljYXN0IHBhY2tldHMgcmVjZWl2ZWQgKi8KIAl1NjQgbl9tdWx0aWNhc3RfeG1pdDsJLyogdG90YWwgbXVsdGljYXN0IHBhY2tldHMgc2VudCAqLwogCXU2NCBuX211bHRpY2FzdF9yY3Y7CS8qIHRvdGFsIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkICovCi0JdTY0IG5fc3ltYm9sX2Vycm9yX2NvdW50ZXI7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KLQl1NjQgbl9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KLQl1NjQgbl9saW5rX2Rvd25lZF9jb3VudGVyOwkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCi0JdTY0IG5fcG9ydF9yY3ZfZXJyb3JzOwkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCi0JdTY0IG5fcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KLQl1NjQgbl9wb3J0X3htaXRfZGlzY2FyZHM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KLQl1NjQgbl9wb3J0X3htaXRfZGF0YTsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLwotCXU2NCBuX3BvcnRfcmN2X2RhdGE7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KLQl1NjQgbl9wb3J0X3htaXRfcGFja2V0czsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLwotCXU2NCBuX3BvcnRfcmN2X3BhY2tldHM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KLQl1MzIgbl9wa2V5X3Zpb2xhdGlvbnM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgel9zeW1ib2xfZXJyb3JfY291bnRlcjsJCS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgel9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgel9saW5rX2Rvd25lZF9jb3VudGVyOwkJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCB6X3BvcnRfcmN2X2Vycm9yczsJCQkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCisJdTY0IHpfcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CQkvKiBzdGFydGluZyBjb3VudCBmb3IgUE1BICovCisJdTY0IHpfcG9ydF94bWl0X2Rpc2NhcmRzOwkJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXU2NCB6X3BvcnRfeG1pdF9kYXRhOwkJCS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgel9wb3J0X3Jjdl9kYXRhOwkJCS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgel9wb3J0X3htaXRfcGFja2V0czsJCS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1NjQgel9wb3J0X3Jjdl9wYWNrZXRzOwkJCS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KKwl1MzIgel9wa2V5X3Zpb2xhdGlvbnM7CQkJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXUzMiB6X2xvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9yczsJLyogc3RhcnRpbmcgY291bnQgZm9yIFBNQSAqLworCXUzMiB6X2V4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7CS8qIHN0YXJ0aW5nIGNvdW50IGZvciBQTUEgKi8KIAl1MzIgbl9yY19yZXNlbmRzOwogCXUzMiBuX3JjX2Fja3M7CiAJdTMyIG5fcmNfcWFja3M7CkBAIC00NjIsNiArNDczLDcgQEAKIAl1MzIgbl9vdGhlcl9uYWtzOwogCXUzMiBuX3RpbWVvdXRzOwogCXUzMiBuX3BrdF9kcm9wczsKKwl1MzIgbl92bDE1X2Ryb3BwZWQ7CiAJdTMyIG5fd3FlX2VycnM7CiAJdTMyIG5fcmRtYV9kdXBfYnVzeTsKIAl1MzIgbl9waW93YWl0OwpAQCAtNTgwLDEwICs1OTIsNiBAQAogCiB2b2lkIGlwYXRoX2dldF9jcmVkaXQoc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIGFldGgpOwogCi12b2lkIGlwYXRoX2RvX3JjX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKTsKLQotdm9pZCBpcGF0aF9kb191Y19zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KIHZvaWQgaXBhdGhfY3FfZW50ZXIoc3RydWN0IGlwYXRoX2NxICpjcSwgc3RydWN0IGliX3djICplbnRyeSwgaW50IHNpZyk7CiAKIGludCBpcGF0aF9ya2V5X29rKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKQEAgLTU5Niw3ICs2MDQsNyBAQAogCiB2b2lkIGlwYXRoX3NraXBfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuZ3RoKTsKIAotaW50IGlwYXRoX3Bvc3RfcmNfc2VuZChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IpOworaW50IGlwYXRoX3Bvc3RfcnVjX3NlbmQoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyKTsKIAogdm9pZCBpcGF0aF91Y19yY3Yoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpcGF0aF9pYl9oZWFkZXIgKmhkciwKIAkJICBpbnQgaGFzX2dyaCwgdm9pZCAqZGF0YSwgdTMyIHRsZW4sIHN0cnVjdCBpcGF0aF9xcCAqcXApOwpAQCAtNjc4LDcgKzY4NiwxOSBAQAogCiBpbnQgaXBhdGhfZ2V0X3J3cWUoc3RydWN0IGlwYXRoX3FwICpxcCwgaW50IHdyX2lkX29ubHkpOwogCi12b2lkIGlwYXRoX3J1Y19sb29wYmFjayhzdHJ1Y3QgaXBhdGhfcXAgKnNxcCwgc3RydWN0IGliX3djICp3Yyk7Cit1MzIgaXBhdGhfbWFrZV9ncmgoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHN0cnVjdCBpYl9ncmggKmhkciwKKwkJICAgc3RydWN0IGliX2dsb2JhbF9yb3V0ZSAqZ3JoLCB1MzIgaHdvcmRzLCB1MzIgbndvcmRzKTsKKwordm9pZCBpcGF0aF9kb19ydWNfc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpOworCit1MzIgaXBhdGhfbWFrZV9yY19hY2soc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGlwYXRoX290aGVyX2hlYWRlcnMgKm9oZHIsCisJCSAgICAgIHUzMiBwbXR1KTsKKworaW50IGlwYXRoX21ha2VfcmNfcmVxKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyLAorCQkgICAgICB1MzIgcG10dSwgdTMyICpidGgwcCwgdTMyICpidGgycCk7CisKK2ludCBpcGF0aF9tYWtlX3VjX3JlcShzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfb3RoZXJfaGVhZGVycyAqb2hkciwKKwkJICAgICAgdTMyIHBtdHUsIHUzMiAqYnRoMHAsIHUzMiAqYnRoMnApOwogCiBleHRlcm4gY29uc3QgZW51bSBpYl93Y19vcGNvZGUgaWJfaXBhdGhfd2Nfb3Bjb2RlW107CiAKQEAgLTY4OCw2ICs3MDgsMjQgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBpYl9pcGF0aF9sa2V5X3RhYmxlX3NpemU7CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X2NxZXM7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X2NxczsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfcXBfd3JzOworCitleHRlcm4gdW5zaWduZWQgaW50IGliX2lwYXRoX21heF9zZ2VzOworCitleHRlcm4gdW5zaWduZWQgaW50IGliX2lwYXRoX21heF9tY2FzdF9ncnBzOworCitleHRlcm4gdW5zaWduZWQgaW50IGliX2lwYXRoX21heF9tY2FzdF9xcF9hdHRhY2hlZDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfc3JxczsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfc3JxX3NnZXM7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X3NycV93cnM7CisKIGV4dGVybiBjb25zdCB1MzIgaWJfaXBhdGhfcm5yX3RhYmxlW107CiAKICNlbmRpZgkJCQkvKiBJUEFUSF9WRVJCU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCmluZGV4IDEwYjMxZDIuLmVlMGUxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtOTIsNiArOTMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtY2FzdC0+cXBfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWNhc3QtPndhaXQpOwogCWF0b21pY19zZXQoJm1jYXN0LT5yZWZjb3VudCwgMCk7CisJbWNhc3QtPm5fYXR0YWNoZWQgPSAwOwogCiBiYWlsOgogCXJldHVybiBtY2FzdDsKQEAgLTE1Nyw3ICsxNTksOCBAQAogICogdGhlIHRhYmxlIGJ1dCB0aGUgUVAgd2FzIGFkZGVkLiAgUmV0dXJuIEVTUkNIIGlmIHRoZSBRUCB3YXMgYWxyZWFkeQogICogYXR0YWNoZWQgYW5kIG5laXRoZXIgc3RydWN0dXJlIHdhcyBhZGRlZC4KICAqLwotc3RhdGljIGludCBpcGF0aF9tY2FzdF9hZGQoc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdCwKK3N0YXRpYyBpbnQgaXBhdGhfbWNhc3RfYWRkKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2LAorCQkJICAgc3RydWN0IGlwYXRoX21jYXN0ICptY2FzdCwKIAkJCSAgIHN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqbXFwKQogewogCXN0cnVjdCByYl9ub2RlICoqbiA9ICZtY2FzdF90cmVlLnJiX25vZGU7CkBAIC0xODgsMzQgKzE5MSw0NyBAQAogCQkvKiBTZWFyY2ggdGhlIFFQIGxpc3QgdG8gc2VlIGlmIHRoaXMgaXMgYWxyZWFkeSB0aGVyZS4gKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJnRtY2FzdC0+cXBfbGlzdCwgbGlzdCkgewogCQkJaWYgKHAtPnFwID09IG1xcC0+cXApIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CiAJCQkJcmV0ID0gRVNSQ0g7CiAJCQkJZ290byBiYWlsOwogCQkJfQogCQl9CisJCWlmICh0bWNhc3QtPm5fYXR0YWNoZWQgPT0gaWJfaXBhdGhfbWF4X21jYXN0X3FwX2F0dGFjaGVkKSB7CisJCQlyZXQgPSBFTk9NRU07CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQl0bWNhc3QtPm5fYXR0YWNoZWQrKzsKKwogCQlsaXN0X2FkZF90YWlsX3JjdSgmbXFwLT5saXN0LCAmdG1jYXN0LT5xcF9saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhc3RfbG9jaywgZmxhZ3MpOwogCQlyZXQgPSBFRVhJU1Q7CiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlpZiAoZGV2LT5uX21jYXN0X2dycHNfYWxsb2NhdGVkID09IGliX2lwYXRoX21heF9tY2FzdF9ncnBzKSB7CisJCXJldCA9IEVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKworCWRldi0+bl9tY2FzdF9ncnBzX2FsbG9jYXRlZCsrOworCiAJbGlzdF9hZGRfdGFpbF9yY3UoJm1xcC0+bGlzdCwgJm1jYXN0LT5xcF9saXN0KTsKIAogCWF0b21pY19pbmMoJm1jYXN0LT5yZWZjb3VudCk7CiAJcmJfbGlua19ub2RlKCZtY2FzdC0+cmJfbm9kZSwgcG4sIG4pOwogCXJiX2luc2VydF9jb2xvcigmbWNhc3QtPnJiX25vZGUsICZtY2FzdF90cmVlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKLQogCXJldCA9IDA7CiAKIGJhaWw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIHJldDsKIH0KIAogaW50IGlwYXRoX211bHRpY2FzdF9hdHRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCkKIHsKIAlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnFwLT5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3Q7CiAJc3RydWN0IGlwYXRoX21jYXN0X3FwICptcXA7CiAJaW50IHJldDsKQEAgLTIzNSw3ICsyNTEsNyBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGJhaWw7CiAJfQotCXN3aXRjaCAoaXBhdGhfbWNhc3RfYWRkKG1jYXN0LCBtcXApKSB7CisJc3dpdGNoIChpcGF0aF9tY2FzdF9hZGQoZGV2LCBtY2FzdCwgbXFwKSkgewogCWNhc2UgRVNSQ0g6CiAJCS8qIE5laXRoZXIgd2FzIHVzZWQ6IGNhbid0IGF0dGFjaCB0aGUgc2FtZSBRUCB0d2ljZS4gKi8KIAkJaXBhdGhfbWNhc3RfcXBfZnJlZShtcXApOwpAQCAtMjQ1LDYgKzI2MSwxMiBAQAogCWNhc2UgRUVYSVNUOgkJLyogVGhlIG1jYXN0IHdhc24ndCB1c2VkICovCiAJCWlwYXRoX21jYXN0X2ZyZWUobWNhc3QpOwogCQlicmVhazsKKwljYXNlIEVOT01FTToKKwkJLyogRXhjZWVkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1jYXN0IGdyb3Vwcy4gKi8KKwkJaXBhdGhfbWNhc3RfcXBfZnJlZShtcXApOworCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTI1OCw2ICsyODAsNyBAQAogaW50IGlwYXRoX211bHRpY2FzdF9kZXRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCkKIHsKIAlzdHJ1Y3QgaXBhdGhfcXAgKnFwID0gdG9faXFwKGlicXApOworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnFwLT5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3QgPSBOVUxMOwogCXN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqcCwgKnRtcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKQEAgLTI3Miw3ICsyOTUsNyBAQAogCXdoaWxlICgxKSB7CiAJCWlmIChuID09IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKLQkJCXJldCA9IDA7CisJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBiYWlsOwogCQl9CiAKQEAgLTI5Niw2ICszMTksNyBAQAogCQkgKiBsaW5rIHVudGlsIHdlIGFyZSBzdXJlIHRoZXJlIGFyZSBubyBsaXN0IHdhbGtlcnMuCiAJCSAqLwogCQlsaXN0X2RlbF9yY3UoJnAtPmxpc3QpOworCQltY2FzdC0+bl9hdHRhY2hlZC0tOwogCiAJCS8qIElmIHRoaXMgd2FzIHRoZSBsYXN0IGF0dGFjaGVkIFFQLCByZW1vdmUgdGhlIEdJRCB0b28uICovCiAJCWlmIChsaXN0X2VtcHR5KCZtY2FzdC0+cXBfbGlzdCkpIHsKQEAgLTMxOSw2ICszNDMsNyBAQAogCQlhdG9taWNfZGVjKCZtY2FzdC0+cmVmY291bnQpOwogCQl3YWl0X2V2ZW50KG1jYXN0LT53YWl0LCAhYXRvbWljX3JlYWQoJm1jYXN0LT5yZWZjb3VudCkpOwogCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKKwkJZGV2LT5uX21jYXN0X2dycHNfYWxsb2NhdGVkLS07CiAJfQogCiAJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y194ODZfNjQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y194ODZfNjQuYwppbmRleCBhZGM1MzIyZi4uZjhmOWUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3g4Nl82NC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y194ODZfNjQuYwpAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcHNfY29tbW9uLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBzX2NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjdjYmJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcHNfY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotI2lmbmRlZiBJUFNfQ09NTU9OX0gKLSNkZWZpbmUgSVBTX0NPTU1PTl9ICi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCi0gKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKLSAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQotICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKLSAqCi0gKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgotICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZwotICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgZGlzY2xhaW1lci4KLSAqCi0gKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgotCi1zdHJ1Y3QgaXBhdGhfaGVhZGVyIHsKLQkvKgotCSAqIFZlcnNpb24gLSA0IGJpdHMsIFBvcnQgLSA0IGJpdHMsIFRJRCAtIDEwIGJpdHMgYW5kIE9mZnNldCAtCi0JICogMTQgYml0cyBiZWZvcmUgRUNPIGNoYW5nZSB+MjggRGVjIDAzLiAgQWZ0ZXIgdGhhdCwgVmVycyA0LAotCSAqIFBvcnQgMywgVElEIDExLCBvZmZzZXQgMTQuCi0JICovCi0JX19sZTMyIHZlcl9wb3J0X3RpZF9vZmZzZXQ7Ci0JX19sZTE2IGNoa3N1bTsKLQlfX2xlMTYgcGt0X2ZsYWdzOwotfTsKLQotc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlciB7Ci0JX19iZTE2IGxyaFs0XTsKLQlfX2JlMzIgYnRoWzNdOwotCS8qIGZpZWxkcyBiZWxvdyB0aGlzIHBvaW50IGFyZSBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KLQlzdHJ1Y3QgaXBhdGhfaGVhZGVyIGlwaDsKLQlfX3U4IHN1Yl9vcGNvZGU7Ci0JX191OCBmbGFnczsKLQlfX3UxNiBzcmNfcmFuazsKLQkvKiAyNCBiaXRzLiBUaGUgdXBwZXIgOCBiaXQgaXMgYXZhaWxhYmxlIGZvciBvdGhlciB1c2UgKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1bnNpZ25lZCBhY2tfc2VxX251bToyNDsKLQkJCXVuc2lnbmVkIHBvcnQ6NDsKLQkJCXVuc2lnbmVkIHVudXNlZDo0OwotCQl9OwotCQlfX3UzMiBhY2tfc2VxX251bV9vcmc7Ci0JfTsKLQlfX3U4IGV4cGVjdGVkX3RpZF9zZXNzaW9uX2lkOwotCV9fdTggdGlueWxlbjsJCS8qIHRvIGFpZCBNUEkgKi8KLQl1bmlvbiB7Ci0JICAgIF9fdTE2IHRhZzsJCS8qIHRvIGFpZCBNUEkgKi8KLQkgICAgX191MTYgbXFoZHI7CS8qIGZvciBQU00gTVEgKi8KLQl9OwotCXVuaW9uIHsKLQkJX191MzIgbXBpWzRdOwkvKiB0byBhaWQgTVBJICovCi0JCV9fdTMyIGRhdGFbNF07Ci0JCV9fdTY0IG1xWzJdOwkvKiBmb3IgUFNNIE1RICovCi0JCXN0cnVjdCB7Ci0JCQlfX3UxNiBtdHU7Ci0JCQlfX3U4IG1ham9yX3ZlcjsKLQkJCV9fdTggbWlub3JfdmVyOwotCQkJX191MzIgbm90X3VzZWQ7CS8vZnJlZQotCQkJX191MzIgcnVuX2lkOwotCQkJX191MzIgY2xpZW50X3ZlcjsKLQkJfTsKLQl9OwotfTsKLQotc3RydWN0IGV0aGVyX2hlYWRlciB7Ci0JX19iZTE2IGxyaFs0XTsKLQlfX2JlMzIgYnRoWzNdOwotCXN0cnVjdCBpcGF0aF9oZWFkZXIgaXBoOwotCV9fdTggc3ViX29wY29kZTsKLQlfX3U4IGNtZDsKLQlfX2JlMTYgbGlkOwotCV9fdTE2IG1hY1szXTsKLQlfX3U4IGZyYWdfbnVtOwotCV9fdTggc2VxX251bTsKLQlfX2xlMzIgbGVuOwotCS8qIE1VU1QgYmUgb2Ygd29yZCBzaXplIGR1ZSB0byBQSU8gd3JpdGUgcmVxdWlyZW1lbnRzICovCi0JX19sZTMyIGNzdW07Ci0JX19sZTE2IGNzdW1fb2Zmc2V0OwotCV9fbGUxNiBmbGFnczsKLQlfX3UxNiBmaXJzdF8yX2J5dGVzOwotCV9fdTggdW51c2VkWzJdOwkJLyogY3VycmVudGx5IHVudXNlZCAqLwotfTsKLQotLyoKLSAqIFRoZSBQSU8gYnVmZmVyIHVzZWQgZm9yIHNlbmRpbmcgaW5maW5pcGF0aCBtZXNzYWdlcyBtdXN0IG9ubHkgYmUgd3JpdHRlbgotICogaW4gMzItYml0IHdvcmRzLCBhbGwgdGhlIGRhdGEgbXVzdCBiZSB3cml0dGVuLCBhbmQgbm8gd3JpdGVzIGNhbiBvY2N1cgotICogYWZ0ZXIgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuICh3aGljaCB0cmFuc2ZlcnMgIm93bmVyc2hpcCIgb2YgdGhlIGJ1ZmZlcgotICogdG8gdGhlIGNoaXAgYW5kIHRyaWdnZXJzIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQpLgotICogU2luY2UgdGhlIExpbnV4IHNrX2J1ZmYgc3RydWN0dXJlIGNhbiBiZSByZWN1cnNpdmUsIG5vbi1hbGlnbmVkLCBhbmQKLSAqIGFueSBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBzZWdtZW50LCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUKLSAqIHRvIGtlZXAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG92ZXJhbGwgc3RhdGUgb2YgdGhlIGNvcHkgb3BlcmF0aW9uLgotICogVGhpcyBpcyB1c2VkIHRvIHNhdmUgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBzdG9yZSB0aGUgY2hlY2tzdW0KLSAqIGluIHRoZSByaWdodCBwbGFjZSBiZWZvcmUgc2VuZGluZyB0aGUgbGFzdCB3b3JkIHRvIHRoZSBoYXJkd2FyZSBhbmQKLSAqIHRvIGJ1ZmZlciB0aGUgbGFzdCAwLTMgYnl0ZXMgb2Ygbm9uLXdvcmQgc2l6ZWQgc2VnbWVudHMuCi0gKi8KLXN0cnVjdCBjb3B5X2RhdGFfcyB7Ci0Jc3RydWN0IGV0aGVyX2hlYWRlciAqaGRyOwotCS8qIGFkZHIgb2YgUElPIGJ1ZiB0byB3cml0ZSBjc3VtIHRvICovCi0JX191MzIgX19pb21lbSAqY3N1bV9waW87Ci0JX191MzIgX19pb21lbSAqdG87CS8qIGFkZHIgb2YgUElPIGJ1ZiB0byB3cml0ZSBkYXRhIHRvICovCi0JX191MzIgZGV2aWNlOwkJLyogd2hpY2ggZGV2aWNlIHRvIGFsbG9jYXRlIFBJTyBidWZzIGZyb20gKi8KLQlfX3MzMiBlcnJvcjsJCS8qIHNldCBpZiB0aGVyZSBpcyBhbiBlcnJvci4gKi8KLQlfX3MzMiBleHRyYTsJCS8qIGFtb3VudCBvZiBkYXRhIHNhdmVkIGluIHUuYnVmIGJlbG93ICovCi0JX191MzIgbGVuOwkJLyogdG90YWwgbGVuZ3RoIHRvIHNlbmQgaW4gYnl0ZXMgKi8KLQlfX3UzMiBmbGVuOwkJLyogZnJhbWVudCBsZW5ndGggaW4gd29yZHMgKi8KLQlfX3UzMiBjc3VtOwkJLyogcGFydGlhbCBJUCBjaGVja3N1bSAqLwotCV9fdTMyIHBvczsJCS8qIHBvc2l0aW9uIGZvciBwYXJ0aWFsIGNoZWNrc3VtICovCi0JX191MzIgb2Zmc2V0OwkJLyogb2Zmc2V0IHRvIHdoZXJlIGRhdGEgY3VycmVudGx5IHN0YXJ0cyAqLwotCV9fczMyIGNoZWNrc3VtX2NhbGM7CS8qIHNldCB0byAxIHdoZW4gY3N1bSBoYXMgYmVlbiBjYWxjdWxhdGVkICovCi0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bmlvbiB7Ci0JCV9fdTMyIHc7Ci0JCV9fdTggYnVmWzRdOwotCX0gdTsKLX07Ci0KLS8qIElCIC0gTFJIIGhlYWRlciBjb25zdHMgKi8KLSNkZWZpbmUgSVBTX0xSSF9HUkggMHgwMDAzCS8qIDEuIHdvcmQgb2YgSUIgTFJIIC0gbmV4dCBoZWFkZXI6IEdSSCAqLwotI2RlZmluZSBJUFNfTFJIX0JUSCAweDAwMDIJLyogMS4gd29yZCBvZiBJQiBMUkggLSBuZXh0IGhlYWRlcjogQlRIICovCi0KLSNkZWZpbmUgSVBTX09GRlNFVCAgMAotCi0vKgotICogZGVmaW5lcyB0aGUgY3V0LW9mZiBwb2ludCBiZXR3ZWVuIHRoZSBoZWFkZXIgcXVldWUgYW5kIGVhZ2VyL2V4cGVjdGVkCi0gKiBUSUQgcXVldWUKLSAqLwotI2RlZmluZSBOVU1fT0ZfRVhUUkFfV09SRFNfSU5fSEVBREVSX1FVRVVFIFwKLQkoKHNpemVvZihzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyKSAtIFwKLQkgIG9mZnNldG9mKHN0cnVjdCBpcHNfbWVzc2FnZV9oZWFkZXIsIGlwaCkpID4+IDIpCi0KLS8qIE9wQ29kZXMgICovCi0jZGVmaW5lIE9QQ09ERV9JUFMgMHhDMAotI2RlZmluZSBPUENPREVfSVRINFggMHhDMQotCi0vKiBPcENvZGUgMzAgaXMgdXNlIGJ5IHN0YW5kLWFsb25lIHRlc3QgcHJvZ3JhbXMgICovCi0jZGVmaW5lIE9QQ09ERV9SQVdfREFUQSAweERFCi0vKiBsYXN0IE9wQ29kZSAoMzEpIGlzIHJlc2VydmVkIGZvciB0ZXN0ICAqLwotI2RlZmluZSBPUENPREVfVEVTVCAweERGCi0KLS8qIHN1YiBPcENvZGVzIC0gaXBzICAqLwotI2RlZmluZSBPUENPREVfU0VRX0RBVEEgMHgwMQotI2RlZmluZSBPUENPREVfU0VRX0NUUkwgMHgwMgotCi0jZGVmaW5lIE9QQ09ERV9TRVFfTVFfREFUQSAweDAzCi0jZGVmaW5lIE9QQ09ERV9TRVFfTVFfQ1RSTCAweDA0Ci0KLSNkZWZpbmUgT1BDT0RFX0FDSyAweDEwCi0jZGVmaW5lIE9QQ09ERV9OQUsgMHgxMQotCi0jZGVmaW5lIE9QQ09ERV9FUlJfQ0hLIDB4MjAKLSNkZWZpbmUgT1BDT0RFX0VSUl9DSEtfUExTIDB4MjEKLQotI2RlZmluZSBPUENPREVfU1RBUlRVUCAweDMwCi0jZGVmaW5lIE9QQ09ERV9TVEFSVFVQX0FDSyAweDMxCi0jZGVmaW5lIE9QQ09ERV9TVEFSVFVQX05BSyAweDMyCi0KLSNkZWZpbmUgT1BDT0RFX1NUQVJUVVBfRVhUIDB4MzQKLSNkZWZpbmUgT1BDT0RFX1NUQVJUVVBfQUNLX0VYVCAweDM1Ci0jZGVmaW5lIE9QQ09ERV9TVEFSVFVQX05BS19FWFQgMHgzNgotCi0jZGVmaW5lIE9QQ09ERV9USURTX1JFTEVBU0UgMHg0MAotI2RlZmluZSBPUENPREVfVElEU19SRUxFQVNFX0NPTkZJUk0gMHg0MQotCi0jZGVmaW5lIE9QQ09ERV9DTE9TRSAweDUwCi0jZGVmaW5lIE9QQ09ERV9DTE9TRV9BQ0sgMHg1MQotLyoKLSAqIGxpa2UgT1BDT0RFX0NMT1NFLCBidXQgbm8gY29tcGxhaW50IGlmIG90aGVyIHNpZGUgaGFzIGFscmVhZHkgY2xvc2VkLgotICogVXNlZCB3aGVuIGRvaW5nIGFib3J0KCksIE1QSV9BYm9ydCgpLCBldGMuCi0gKi8KLSNkZWZpbmUgT1BDT0RFX0FCT1JUIDB4NTIKLQotLyogc3ViIE9wQ29kZXMgLSBpdGg0eCAgKi8KLSNkZWZpbmUgT1BDT0RFX0VOQ0FQIDB4ODEKLSNkZWZpbmUgT1BDT0RFX0xJRF9BUlAgMHg4MgotCi0vKiBSZWNlaXZlIEhlYWRlciBRdWV1ZTogcmVjZWl2ZSB0eXBlIChmcm9tIGluZmluaXBhdGgpICovCi0jZGVmaW5lIFJDVkhRX1JDVl9UWVBFX0VYUEVDVEVEICAwCi0jZGVmaW5lIFJDVkhRX1JDVl9UWVBFX0VBR0VSICAgICAxCi0jZGVmaW5lIFJDVkhRX1JDVl9UWVBFX05PTl9LRCAgICAyCi0jZGVmaW5lIFJDVkhRX1JDVl9UWVBFX0VSUk9SICAgICAzCi0KLS8qIG1pc2MuICovCi0jZGVmaW5lIFNJWkVfT0ZfQ1JDIDEKLQotI2RlZmluZSBFQUdFUl9USURfSUQgSU5GSU5JUEFUSF9JX1RJRF9NQVNLCi0KLSNkZWZpbmUgSVBTX0RFRkFVTFRfUF9LRVkgMHhGRkZGCi0KLSNkZWZpbmUgSVBTX1BFUk1JU1NJVkVfTElEIDB4RkZGRgotI2RlZmluZSBJUFNfTVVMVElDQVNUX0xJRF9CQVNFIDB4QzAwMAotCi0jZGVmaW5lIElQU19BRVRIX0NSRURJVF9TSElGVCAyNAotI2RlZmluZSBJUFNfQUVUSF9DUkVESVRfTUFTSyAweDFGCi0jZGVmaW5lIElQU19BRVRIX0NSRURJVF9JTlZBTCAweDFGCi0KLSNkZWZpbmUgSVBTX1BTTl9NQVNLIDB4RkZGRkZGCi0jZGVmaW5lIElQU19NU05fTUFTSyAweEZGRkZGRgotI2RlZmluZSBJUFNfUVBOX01BU0sgMHhGRkZGRkYKLSNkZWZpbmUgSVBTX01VTFRJQ0FTVF9RUE4gMHhGRkZGRkYKLQotLyogZnVuY3Rpb25zIGZvciBleHRyYWN0aW5nIGZpZWxkcyBmcm9tIHJjdmhkcnEgZW50cmllcyAqLwotc3RhdGljIGlubGluZSBfX3UzMiBpcHNfZ2V0X2hkcl9lcnJfZmxhZ3MoY29uc3QgX19sZTMyICogcmJ1ZikKLXsKLQlyZXR1cm4gX19sZTMyX3RvX2NwdShyYnVmWzFdKTsKLX0KLQotc3RhdGljIGlubGluZSBfX3UzMiBpcHNfZ2V0X2luZGV4KGNvbnN0IF9fbGUzMiAqIHJidWYpCi17Ci0JcmV0dXJuIChfX2xlMzJfdG9fY3B1KHJidWZbMF0pID4+IElORklOSVBBVEhfUkhGX0VHUklOREVYX1NISUZUKQotCSAgICAmIElORklOSVBBVEhfUkhGX0VHUklOREVYX01BU0s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX191MzIgaXBzX2dldF9yY3ZfdHlwZShjb25zdCBfX2xlMzIgKiByYnVmKQotewotCXJldHVybiAoX19sZTMyX3RvX2NwdShyYnVmWzBdKSA+PiBJTkZJTklQQVRIX1JIRl9SQ1ZUWVBFX1NISUZUKQotCSAgICAmIElORklOSVBBVEhfUkhGX1JDVlRZUEVfTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSBfX3UzMiBpcHNfZ2V0X2xlbmd0aF9pbl9ieXRlcyhjb25zdCBfX2xlMzIgKiByYnVmKQotewotCXJldHVybiAoKF9fbGUzMl90b19jcHUocmJ1ZlswXSkgPj4gSU5GSU5JUEFUSF9SSEZfTEVOR1RIX1NISUZUKQotCQkmIElORklOSVBBVEhfUkhGX0xFTkdUSF9NQVNLKSA8PCAyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmlwc19nZXRfZmlyc3RfcHJvdG9jb2xfaGVhZGVyKGNvbnN0IF9fdTMyICogcmJ1ZikKLXsKLQlyZXR1cm4gKHZvaWQgKikmcmJ1ZlsyXTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBzX21lc3NhZ2VfaGVhZGVyICppcHNfZ2V0X2lwc19oZWFkZXIoY29uc3QgX191MzIgKgotCQkJCQkJCSAgICByYnVmKQotewotCXJldHVybiAoc3RydWN0IGlwc19tZXNzYWdlX2hlYWRlciAqKSZyYnVmWzJdOwotfQotCi1zdGF0aWMgaW5saW5lIF9fdTMyIGlwc19nZXRfaXBhdGhfdmVyKF9fbGUzMiBoZHJ3b3JkKQotewotCXJldHVybiAoX19sZTMyX3RvX2NwdShoZHJ3b3JkKSA+PiBJTkZJTklQQVRIX0lfVkVSU19TSElGVCkKLQkgICAgJiBJTkZJTklQQVRIX0lfVkVSU19NQVNLOwotfQotCi0jZW5kaWYJCQkJLyogSVBTX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvdmVyYnNfZGVidWcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC92ZXJic19kZWJ1Zy5oCmluZGV4IDQwZDY5M2MuLjYxODY2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC92ZXJic19kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC92ZXJic19kZWJ1Zy5oCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBRTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQYXRoU2NhbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwppbmRleCBkNTM2MjE3Li5hMjliMWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwpAQCAtOTAwLDcgKzkwMCw3IEBACiAJCQkJICBtdGhjYV9pc19tZW1mcmVlKGRldikgPwogCQkJCSAgbXRoY2FfYXJiZWxfaW50ZXJydXB0IDoKIAkJCQkgIG10aGNhX3Rhdm9yX2ludGVycnVwdCwKLQkJCQkgIFNBX1NISVJRLCBEUlZfTkFNRSwgZGV2KTsKKwkJCQkgIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dF9jbWQ7CiAJCWRldi0+ZXFfdGFibGUuaGF2ZV9pcnEgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKaW5kZXggOWI5ZmY3Yi4uNTU3Y2RlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiAkSWQ6IG10aGNhX21haW4uYyAxMzk2IDIwMDQtMTItMjggMDQ6MTA6MjdaIHJvbGFuZCAkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTcyLDggKzE3MSw5IEBACiAKIAlpZiAoZGV2X2xpbS0+dWFyX3NpemUgPiBwY2lfcmVzb3VyY2VfbGVuKG1kZXYtPnBkZXYsIDIpKSB7CiAJCW10aGNhX2VycihtZGV2LCAiSENBIHJlcG9ydGVkIFVBUiBzaXplIG9mIDB4JXggYmlnZ2VyIHRoYW4gIgotCQkJICAiUENJIHJlc291cmNlIDIgc2l6ZSBvZiAweCVseCwgYWJvcnRpbmcuXG4iLAotCQkJICBkZXZfbGltLT51YXJfc2l6ZSwgcGNpX3Jlc291cmNlX2xlbihtZGV2LT5wZGV2LCAyKSk7CisJCQkgICJQQ0kgcmVzb3VyY2UgMiBzaXplIG9mIDB4JWxseCwgYWJvcnRpbmcuXG4iLAorCQkJICBkZXZfbGltLT51YXJfc2l6ZSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKG1kZXYtPnBkZXYsIDIpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCmluZGV4IGY0ZmRkZDUuLjkxOTM0ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiAkSWQ6IG10aGNhX3Jlc2V0LmMgMTM0OSAyMDA0LTEyLTE2IDIxOjA5OjQzWiByb2xhbmQgJAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAppbmRleCA0OTFkMmFmLi4zZjg5ZjVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9pbmZpbmliYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCmluZGV4IDRjM2YyZGUuLjM0YjBkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpAQCAtNDM4LDE1OSArNDM3LDUwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWlzY3NpX2lzZXJfY29ubl9zZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKLQkJCSAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgdWludDMyX3QgdmFsdWUpCitpc2NzaV9pc2VyX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKLQlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOwotCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKLQotCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Ci0JaWYgKGNvbm4tPmNfc3RhZ2UgIT0gSVNDU0lfQ09OTl9JTklUSUFMX1NUQUdFICYmCi0JICAgIGNvbm4tPnN0b3Bfc3RhZ2UgIT0gU1RPUF9DT05OX1JFQ09WRVIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaV9pc2VyOiBjYW4gbm90IGNoYW5nZSBwYXJhbWV0ZXIgWyVkXVxuIiwKLQkJICAgICAgIHBhcmFtKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCWludCB2YWx1ZTsKIAogCXN3aXRjaCAocGFyYW0pIHsKIAljYXNlIElTQ1NJX1BBUkFNX01BWF9SRUNWX0RMRU5HVEg6CiAJCS8qIFRCRCAqLwogCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX01BWF9YTUlUX0RMRU5HVEg6Ci0JCWNvbm4tPm1heF94bWl0X2RsZW5ndGggPSAgdmFsdWU7Ci0JCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fSERSREdTVF9FTjoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnZhbHVlKTsKIAkJaWYgKHZhbHVlKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkRhdGFEaWdlc3Qgd2Fzbid0IG5lZ290aWF0ZWQgdG8gTm9uZSIpOwogCQkJcmV0dXJuIC1FUFJPVE87CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9EQVRBREdTVF9FTjoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnZhbHVlKTsKIAkJaWYgKHZhbHVlKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkRhdGFEaWdlc3Qgd2Fzbid0IG5lZ290aWF0ZWQgdG8gTm9uZSIpOwogCQkJcmV0dXJuIC1FUFJPVE87CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9JTklUSUFMX1IyVF9FTjoKLQkJc2Vzc2lvbi0+aW5pdGlhbF9yMnRfZW4gPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9JTU1fREFUQV9FTjoKLQkJc2Vzc2lvbi0+aW1tX2RhdGFfZW4gPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9GSVJTVF9CVVJTVDoKLQkJc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9NQVhfQlVSU1Q6Ci0JCXNlc3Npb24tPm1heF9idXJzdCA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX1BEVV9JTk9SREVSX0VOOgotCQlzZXNzaW9uLT5wZHVfaW5vcmRlcl9lbiA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0RBVEFTRVFfSU5PUkRFUl9FTjoKLQkJc2Vzc2lvbi0+ZGF0YXNlcV9pbm9yZGVyX2VuID0gdmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fRVJMOgotCQlzZXNzaW9uLT5lcmwgPSB2YWx1ZTsKLQkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9JRk1BUktFUl9FTjoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnZhbHVlKTsKIAkJaWYgKHZhbHVlKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIklGTWFya2VyIHdhc24ndCBuZWdvdGlhdGVkIHRvIE5vIik7CiAJCQlyZXR1cm4gLUVQUk9UTzsKIAkJfQogCQlicmVhazsKIAljYXNlIElTQ1NJX1BBUkFNX09GTUFSS0VSX0VOOgorCQlzc2NhbmYoYnVmLCAiJWQiLCAmdmFsdWUpOwogCQlpZiAodmFsdWUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiT0ZNYXJrZXIgd2Fzbid0IG5lZ290aWF0ZWQgdG8gTm8iKTsKIAkJCXJldHVybiAtRVBST1RPOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJyZWFrOworCQlyZXR1cm4gaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1pc2NzaV9pc2VyX3Nlc3Npb25fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCi0JCQkgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIHVpbnQzMl90ICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOwotCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gaXNjc2lfaG9zdGRhdGEoc2hvc3QtPmhvc3RkYXRhKTsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIElTQ1NJX1BBUkFNX0lOSVRJQUxfUjJUX0VOOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5pbml0aWFsX3IydF9lbjsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9NQVhfUjJUOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5tYXhfcjJ0OwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lNTV9EQVRBX0VOOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5pbW1fZGF0YV9lbjsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9GSVJTVF9CVVJTVDoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+Zmlyc3RfYnVyc3Q7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5tYXhfYnVyc3Q7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fUERVX0lOT1JERVJfRU46Ci0JCSp2YWx1ZSA9IHNlc3Npb24tPnBkdV9pbm9yZGVyX2VuOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0RBVEFTRVFfSU5PUkRFUl9FTjoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+ZGF0YXNlcV9pbm9yZGVyX2VuOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0VSTDoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+ZXJsOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lGTUFSS0VSX0VOOgotCQkqdmFsdWUgPSAwOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX09GTUFSS0VSX0VOOgotCQkqdmFsdWUgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gSVNDU0lfRVJSX1BBUkFNX05PVF9GT1VORDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotaXNjc2lfaXNlcl9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAotCQkJICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCB1aW50MzJfdCAqdmFsdWUpCi17Ci0Jc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKLQotCXN3aXRjaChwYXJhbSkgewotCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1JFQ1ZfRExFTkdUSDoKLQkJKnZhbHVlID0gY29ubi0+bWF4X3JlY3ZfZGxlbmd0aDsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9NQVhfWE1JVF9ETEVOR1RIOgotCQkqdmFsdWUgPSBjb25uLT5tYXhfeG1pdF9kbGVuZ3RoOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0hEUkRHU1RfRU46Ci0JCSp2YWx1ZSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fREFUQURHU1RfRU46Ci0JCSp2YWx1ZSA9IDA7Ci0JCWJyZWFrOwotCS8qY2FzZSBJU0NTSV9QQVJBTV9UQVJHRVRfUkVDVl9ETEVOR1RIOgotCQkqdmFsdWUgPSBjb25uLT50YXJnZXRfcmVjdl9kbGVuZ3RoOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lOSVRJQVRPUl9SRUNWX0RMRU5HVEg6Ci0JCSp2YWx1ZSA9IGNvbm4tPmluaXRpYXRvcl9yZWN2X2RsZW5ndGg7Ci0JCWJyZWFrOyovCi0JZGVmYXVsdDoKLQkJcmV0dXJuIElTQ1NJX0VSUl9QQVJBTV9OT1RfRk9VTkQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHZvaWQKIGlzY3NpX2lzZXJfY29ubl9nZXRfc3RhdHMoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgc3RydWN0IGlzY3NpX3N0YXRzICpzdGF0cykKIHsKQEAgLTcwMiw3ICs1OTIsMTIgQEAKIAkJCQkgIElTQ1NJX0ZJUlNUX0JVUlNUIHwKIAkJCQkgIElTQ1NJX01BWF9CVVJTVCB8CiAJCQkJICBJU0NTSV9QRFVfSU5PUkRFUl9FTiB8Ci0JCQkJICBJU0NTSV9EQVRBU0VRX0lOT1JERVJfRU4sCisJCQkJICBJU0NTSV9EQVRBU0VRX0lOT1JERVJfRU4gfAorCQkJCSAgSVNDU0lfRVhQX1NUQVRTTiB8CisJCQkJICBJU0NTSV9QRVJTSVNURU5UX1BPUlQgfAorCQkJCSAgSVNDU0lfUEVSU0lTVEVOVF9BRERSRVNTIHwKKwkJCQkgIElTQ1NJX1RBUkdFVF9OQU1FIHwKKwkJCQkgIElTQ1NJX1RQR1QsCiAJLmhvc3RfdGVtcGxhdGUgICAgICAgICAgPSAmaXNjc2lfaXNlcl9zaHQsCiAJLmNvbm5kYXRhX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBpc2NzaV9jb25uKSwKIAkubWF4X2x1biAgICAgICAgICAgICAgICA9IElTQ1NJX0lTRVJfTUFYX0xVTiwKQEAgLTcxNCw5ICs2MDksOSBAQAogCS5jcmVhdGVfY29ubiAgICAgICAgICAgID0gaXNjc2lfaXNlcl9jb25uX2NyZWF0ZSwKIAkuYmluZF9jb25uICAgICAgICAgICAgICA9IGlzY3NpX2lzZXJfY29ubl9iaW5kLAogCS5kZXN0cm95X2Nvbm4gICAgICAgICAgID0gaXNjc2lfaXNlcl9jb25uX2Rlc3Ryb3ksCi0JLnNldF9wYXJhbSAgICAgICAgICAgICAgPSBpc2NzaV9pc2VyX2Nvbm5fc2V0X3BhcmFtLAotCS5nZXRfY29ubl9wYXJhbQkJPSBpc2NzaV9pc2VyX2Nvbm5fZ2V0X3BhcmFtLAotCS5nZXRfc2Vzc2lvbl9wYXJhbQk9IGlzY3NpX2lzZXJfc2Vzc2lvbl9nZXRfcGFyYW0sCisJLnNldF9wYXJhbSAgICAgICAgICAgICAgPSBpc2NzaV9pc2VyX3NldF9wYXJhbSwKKwkuZ2V0X2Nvbm5fcGFyYW0JCT0gaXNjc2lfY29ubl9nZXRfcGFyYW0sCisJLmdldF9zZXNzaW9uX3BhcmFtCT0gaXNjc2lfc2Vzc2lvbl9nZXRfcGFyYW0sCiAJLnN0YXJ0X2Nvbm4gICAgICAgICAgICAgPSBpc2NzaV9pc2VyX2Nvbm5fc3RhcnQsCiAJLnN0b3BfY29ubiAgICAgICAgICAgICAgPSBpc2NzaV9jb25uX3N0b3AsCiAJLyogdGhlc2UgYXJlIGNhbGxlZCBhcyBwYXJ0IG9mIGNvbm4gcmVjb3ZlcnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZW11MTBrMS1ncC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9lbXUxMGsxLWdwLmMKaW5kZXggNDYyZjhkMy4uOTc5M2FjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9lbXUxMGsxLWdwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9lbXUxMGsxLWdwLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbnM1NTguYwppbmRleCAzZTJkMjhmLi5mNjhkYmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L25zNTU4LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9uczU1OC5jCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKaW5kZXggMDFkYzBiMS4uZTlhMDJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCmluZGV4IDZmMzFmMDUuLjUwODBlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYwpAQCAtNTg0LDcgKzU4NCw3IEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoZGI5X21vZGVbbW9kZV0uYmlkaXJlY3Rpb25hbCAmJiAhKHBwLT5tb2RlcyAmIFBBUlBPUlRfTU9ERV9UUklTVEFURSkpIHsKKwlpZiAoZGI5X21vZGUtPmJpZGlyZWN0aW9uYWwgJiYgIShwcC0+bW9kZXMgJiBQQVJQT1JUX01PREVfVFJJU1RBVEUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGI5LmM6IHNwZWNpZmllZCBwYXJwb3J0IGlzIG5vdCBiaWRpcmVjdGlvbmFsXG4iKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcHV0X3BwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmggYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAppbmRleCA2NjhmMjQ1Li5lOTkyNGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBmZmRlOGY4Li5jZTFmMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC00NTksNyArNDU5LDcgQEAKIAkJCX0KIAogCQkJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIHZhbHVlKTsKKwkJCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBrZXljb2RlLCB2YWx1ZSk7CiAJCQlpbnB1dF9zeW5jKGRldik7CiAKIAkJCWlmICh2YWx1ZSAmJiBhZGRfcmVsZWFzZV9ldmVudCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCmluZGV4IDFmMGU3MjAuLjFlMDMxNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBDT1JHSV9LRVlfU0VOU0VfTlVNOyBpKyspIHsKIAkJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0tFWV9TRU5TRShpKSB8IEdQSU9fSU4pOwogCQlpZiAocmVxdWVzdF9pcnEoQ09SR0lfSVJRX0dQSU9fS0VZX1NFTlNFKGkpLCBjb3JnaWtiZF9pbnRlcnJ1cHQsCi0JCQkJU0FfSU5URVJSVVBUIHwgU0FfVFJJR0dFUl9SSVNJTkcsCisJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCiAJCQkJImNvcmdpa2JkIiwgY29yZ2lrYmQpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY29yZ2lrYmQ6IENhbid0IGdldCBJUlE6ICVkIVxuIiwgaSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKaW5kZXggMzNlZGQwMy4uZDIyYzdjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xvY29tb2tiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sb2NvbW9rYmQuYwppbmRleCAyYzUxMDg4Li44MzkwNmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xvY29tb2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG9jb21va2JkLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKaW5kZXggYzVkMDNmYi4uZTM4NTcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IFNQSVRaX0tFWV9TRU5TRV9OVU07IGkrKykgewogCQlweGFfZ3Bpb19tb2RlKHNwaXR6X3NlbnNlc1tpXSB8IEdQSU9fSU4pOwogCQlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc3BpdHpfc2Vuc2VzW2ldKSwgc3BpdHprYmRfaW50ZXJydXB0LAotCQkJCVNBX0lOVEVSUlVQVHxTQV9UUklHR0VSX1JJU0lORywKKwkJCQlJUlFGX0RJU0FCTEVEfElSUUZfVFJJR0dFUl9SSVNJTkcsCiAJCQkJIlNwaXR6a2JkIFNlbnNlIiwgc3BpdHprYmQpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3BpdHprYmQ6IENhbid0IGdldCBTZW5zZSBJUlE6ICVkIVxuIiwgaSk7CiAJfQpAQCAtNDI1LDE5ICs0MjUsMTkgQEAKIAlweGFfZ3Bpb19tb2RlKFNQSVRaX0dQSU9fU1dCIHwgR1BJT19JTik7CiAKIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19TWU5DLCBzcGl0emtiZF9pbnRlcnJ1cHQsCi0JCSAgICBTQV9JTlRFUlJVUFQgfCBTQV9UUklHR0VSX1JJU0lORyB8IFNBX1RSSUdHRVJfRkFMTElORywKKwkJICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCSAgICAiU3BpdHprYmQgU3luYyIsIHNwaXR6a2JkKTsKIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19PTl9LRVksIHNwaXR6a2JkX2ludGVycnVwdCwKLQkJICAgIFNBX0lOVEVSUlVQVCB8IFNBX1RSSUdHRVJfUklTSU5HIHwgU0FfVFJJR0dFUl9GQUxMSU5HLAorCQkgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJICAgICJTcGl0emtiZCBQd3JPbiIsIHNwaXR6a2JkKTsKIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19TV0EsIHNwaXR6a2JkX2hpbmdlX2lzciwKLQkJICAgIFNBX0lOVEVSUlVQVCB8IFNBX1RSSUdHRVJfUklTSU5HIHwgU0FfVFJJR0dFUl9GQUxMSU5HLAorCQkgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJICAgICJTcGl0emtiZCBTV0EiLCBzcGl0emtiZCk7CiAJcmVxdWVzdF9pcnEoU1BJVFpfSVJRX0dQSU9fU1dCLCBzcGl0emtiZF9oaW5nZV9pc3IsCi0JCSAgICBTQV9JTlRFUlJVUFQgfCBTQV9UUklHR0VSX1JJU0lORyB8IFNBX1RSSUdHRVJfRkFMTElORywKKwkJICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCSAgICAiU3BpdHprYmQgU1dCIiwgc3BpdHprYmQpOwogIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19BS19JTlQsIHNwaXR6a2JkX2hpbmdlX2lzciwKLQkJICAgIFNBX0lOVEVSUlVQVCB8IFNBX1RSSUdHRVJfUklTSU5HIHwgU0FfVFJJR0dFUl9GQUxMSU5HLAorCQkgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJICAgICJTcGl0emtiZCBIUCIsIHNwaXR6a2JkKTsKIAogCXByaW50ayhLRVJOX0lORk8gImlucHV0OiBTcGl0eiBLZXlib2FyZCBSZWdpc3RlcmVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCmluZGV4IDNhNmFlODVjLi44MDViNjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCWlucHV0X2Rldi0+ZXZlbnQgPSBpeHA0eHhfc3Brcl9ldmVudDsKIAogCWVyciA9IHJlcXVlc3RfaXJxKElSUV9JWFA0WFhfVElNRVIyLCAmaXhwNHh4X3Nwa3JfaW50ZXJydXB0LAotCQkJICBTQV9JTlRFUlJVUFQgfCBTQV9USU1FUiwgIml4cDR4eC1iZWVwZXIiLCAodm9pZCAqKSBkZXYtPmlkKTsKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsICJpeHA0eHgtYmVlcGVyIiwgKHZvaWQgKikgZGV2LT5pZCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXZpY2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwppbmRleCA0MmMxMWZiLi4xMDZjOTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCkBAIC00LDcgKzQsNiBAQAogICogIENvcHlyaWdodCAoYykgMjAwMiBWb2p0ZWNoIFBhdmxpawogICogIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKaW5kZXggZTRlNWJlMS4uY2NmMGZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwpAQCAtMjg1LDYgKzI4NSwxNSBAQAogCXsgS0VfRU5ELCAwIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IGtleW1hcF93aXN0cm9uX21zMjExMVtdID0geworCXsgS0VfS0VZLCAgMHgxMSwgS0VZX1BST0cxIH0sCisJeyBLRV9LRVksICAweDEyLCBLRVlfUFJPRzIgfSwKKwl7IEtFX0tFWSwgIDB4MTMsIEtFWV9QUk9HMyB9LAorCXsgS0VfS0VZLCAgMHgzMSwgS0VZX01BSUwgfSwKKwl7IEtFX0tFWSwgIDB4MzYsIEtFWV9XV1cgfSwKKwl7IEtFX0VORCwgIDAgfQorfTsKKwogc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX3dpc3Ryb25fbXMyMTQxW10gPSB7CiAJeyBLRV9LRVksICAweDExLCBLRVlfUFJPRzEgfSwKIAl7IEtFX0tFWSwgIDB4MTIsIEtFWV9QUk9HMiB9LApAQCAtMzI2LDYgKzMzNSw3IEBACiAJeyBLRV9XSUZJLCAweDMwLCAwIH0sCiAJeyBLRV9LRVksICAweDMxLCBLRVlfTUFJTCB9LAogCXsgS0VfS0VZLCAgMHgzNiwgS0VZX1dXVyB9LAorCXsgS0VfRU5ELCAgMCB9LAogfTsKIAogLyoKQEAgLTM4OCw2ICszOTgsMTUgQEAKIAkJfSwKIAkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2FvcGVuXzE1NTlhcwogCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKKwkJLmlkZW50ID0gIk1lZGlvbiBNRCA5NzgzIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNRURJT05OQiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNRCA5NzgzIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9IGtleW1hcF93aXN0cm9uX21zMjExMQorCX0sCiAJeyBOVUxMLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9pbnBvcnQuYwppbmRleCBhZmM2NmY1Li41MGYxZmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMKQEAgLTM2LDcgKzM2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jCmluZGV4IDA5YjZmZmQuLjg3MmIzMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3JwY21vdXNlLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAlycGNtb3VzZV9sYXN0eCA9IChzaG9ydCkgaW9tZF9yZWFkbChJT01EX01PVVNFWCk7CiAJcnBjbW91c2VfbGFzdHkgPSAoc2hvcnQpIGlvbWRfcmVhZGwoSU9NRF9NT1VTRVkpOwogCi0JaWYgKHJlcXVlc3RfaXJxKElSUV9WU1lOQ1BVTFNFLCBycGNtb3VzZV9pcnEsIFNBX1NISVJRLCAicnBjbW91c2UiLCBycGNtb3VzZV9kZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKElSUV9WU1lOQ1BVTFNFLCBycGNtb3VzZV9pcnEsIElSUUZfU0hBUkVELCAicnBjbW91c2UiLCBycGNtb3VzZV9kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicnBjbW91c2U6IHVuYWJsZSB0byBhbGxvY2F0ZSBWU1lOQyBpbnRlcnJ1cHRcbiIpOwogCQlpbnB1dF9mcmVlX2RldmljZShycGNtb3VzZV9kZXYpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zZXJtb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zZXJtb3VzZS5jCmluZGV4IGE4OTc0MjQuLjAwMjM1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3Nlcm1vdXNlLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYwppbmRleCA3Yjg1YmMyLi40N2VkY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYwpAQCAtODEsNyArODEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggZWI3MjFiMS4uMWY4NTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9wb3dlci5jIGIvZHJpdmVycy9pbnB1dC9wb3dlci5jCmluZGV4IDUyNmU2MDcuLjUxYTUxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvcG93ZXIuYworKysgYi9kcml2ZXJzL2lucHV0L3Bvd2VyLmMKQEAgLTI4LDcgKzI4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCmluZGV4IDA5NmI2YTAuLmJjNmU4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgpAQCAtMTg5LDcgKzE4OCw3IEBACiAJc3RybGNweShjdDgyYzcxMF9wb3J0LT5uYW1lLCAiQyZUIDgyYzcxMCBtb3VzZSBwb3J0IiwKIAkJc2l6ZW9mKGN0ODJjNzEwX3BvcnQtPm5hbWUpKTsKIAlzbnByaW50ZihjdDgyYzcxMF9wb3J0LT5waHlzLCBzaXplb2YoY3Q4MmM3MTBfcG9ydC0+cGh5cyksCi0JCSAiaXNhJTA0bHgvc2VyaW8wIiwgQ1Q4MkM3MTBfREFUQSk7CisJCSAiaXNhJTE2bGx4L3NlcmlvMCIsICh1bnNpZ25lZCBsb25nIGxvbmcpQ1Q4MkM3MTBfREFUQSk7CiAKIAlzZXJpb19yZWdpc3Rlcl9wb3J0KGN0ODJjNzEwX3BvcnQpOwogCkBAIC0yNDEsOCArMjQwLDggQEAKIAogCXNlcmlvX3JlZ2lzdGVyX3BvcnQoY3Q4MmM3MTBfcG9ydCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJzZXJpbzogQyZUIDgyYzcxMCBtb3VzZSBwb3J0IGF0ICUjbHggaXJxICVkXG4iLAotCQlDVDgyQzcxMF9EQVRBLCBDVDgyQzcxMF9JUlEpOworCXByaW50ayhLRVJOX0lORk8gInNlcmlvOiBDJlQgODJjNzEwIG1vdXNlIHBvcnQgYXQgJSNsbHggaXJxICVkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKUNUODJDNzEwX0RBVEEsIENUODJDNzEwX0lSUSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9nc2NwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vZ3NjcHMyLmMKaW5kZXggYzBiMWU0Yi4uY2RlMDM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9nc2NwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2dzY3BzMi5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiAgICAgICAgICAgICAgICAgd2FzIHVzYWJsZS9lbmFibGVkID8pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgpAQCAtMzcxLDcgKzM3MCw3IEBACiAJc2VyaW8tPmRldi5wYXJlbnQJPSAmZGV2LT5kZXY7CiAKIAlyZXQgPSAtRUJVU1k7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBnc2NwczJfaW50ZXJydXB0LCBTQV9TSElSUSwgcHMycG9ydC0+cG9ydC0+bmFtZSwgcHMycG9ydCkpCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBnc2NwczJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgcHMycG9ydC0+cG9ydC0+bmFtZSwgcHMycG9ydCkpCiAJCWdvdG8gZmFpbF9taXNlcmFibHk7CiAKIAlpZiAocHMycG9ydC0+aWQgIT0gR1NDX0lEX0tFWUJPQVJEICYmIHBzMnBvcnQtPmlkICE9IEdTQ19JRF9NT1VTRSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zcGFyY2lvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNwYXJjaW8uaAppbmRleCA2ZDY2MzUxLi41NGFkYmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNwYXJjaW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNwYXJjaW8uaApAQCAtMSwxMyArMSwxMCBAQAogI2lmbmRlZiBfSTgwNDJfU1BBUkNJT19ICiAjZGVmaW5lIF9JODA0Ml9TUEFSQ0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9lYnVzLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KIAogc3RhdGljIGludCBpODA0Ml9rYmRfaXJxID0gLTE7CiBzdGF0aWMgaW50IGk4MDQyX2F1eF9pcnEgPSAtMTsKQEAgLTQ4LDU0ICs0NSw4MyBAQAogI2RlZmluZSBPQlBfUFMyTVNfTkFNRTEJCSJrZG1vdXNlIgogI2RlZmluZSBPQlBfUFMyTVNfTkFNRTIJCSJtb3VzZSIKIAorc3RhdGljIGludCBfX2RldmluaXQgc3BhcmNfaTgwNDJfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+bm9kZTsKKworCWRwID0gZHAtPmNoaWxkOworCXdoaWxlIChkcCkgeworCQlpZiAoIXN0cmNtcChkcC0+bmFtZSwgT0JQX1BTMktCRF9OQU1FMSkgfHwKKwkJICAgICFzdHJjbXAoZHAtPm5hbWUsIE9CUF9QUzJLQkRfTkFNRTIpKSB7CisJCQlzdHJ1Y3Qgb2ZfZGV2aWNlICprYmQgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRwKTsKKwkJCXVuc2lnbmVkIGludCBpcnEgPSBrYmQtPmlycXNbMF07CisJCQlpZiAoaXJxID09IDB4ZmZmZmZmZmYpCisJCQkJaXJxID0gb3AtPmlycXNbMF07CisJCQlpODA0Ml9rYmRfaXJxID0gaXJxOworCQkJa2JkX2lvYmFzZSA9IG9mX2lvcmVtYXAoJmtiZC0+cmVzb3VyY2VbMF0sCisJCQkJCQkwLCA4LCAia2JkIik7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChkcC0+bmFtZSwgT0JQX1BTMk1TX05BTUUxKSB8fAorCQkJICAgIXN0cmNtcChkcC0+bmFtZSwgT0JQX1BTMk1TX05BTUUyKSkgeworCQkJc3RydWN0IG9mX2RldmljZSAqbXMgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRwKTsKKwkJCXVuc2lnbmVkIGludCBpcnEgPSBtcy0+aXJxc1swXTsKKwkJCWlmIChpcnEgPT0gMHhmZmZmZmZmZikKKwkJCQlpcnEgPSBvcC0+aXJxc1swXTsKKwkJCWk4MDQyX2F1eF9pcnEgPSBpcnE7CisJCX0KKworCQlkcCA9IGRwLT5zaWJsaW5nOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzcGFyY19pODA0Ml9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJb2ZfaW91bm1hcChrYmRfaW9iYXNlLCA4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzcGFyY19pODA0Ml9tYXRjaFtdID0geworCXsKKwkJLm5hbWUgPSAiODA0MiIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzcGFyY19pODA0Ml9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHNwYXJjX2k4MDQyX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiaTgwNDIiLAorCS5tYXRjaF90YWJsZQk9IHNwYXJjX2k4MDQyX21hdGNoLAorCS5wcm9iZQkJPSBzcGFyY19pODA0Ml9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNwYXJjX2k4MDQyX3JlbW92ZSksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9wbGF0Zm9ybV9pbml0KHZvaWQpCiB7CiAjaWZuZGVmIENPTkZJR19QQ0kKIAlyZXR1cm4gLUVOT0RFVjsKICNlbHNlCi0JY2hhciBwcm9wWzEyOF07Ci0JaW50IGxlbjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCi0JbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShwcm9tX3Jvb3Rfbm9kZSwgIm5hbWUiLCBwcm9wLCBzaXplb2YocHJvcCkpOwotCWlmIChsZW4gPCAwKSB7Ci0JCXByaW50aygiaTgwNDI6IENhbm5vdCBnZXQgbmFtZSBwcm9wZXJ0eSBvZiByb290IE9CUCBub2RlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpZiAoc3RybmNtcChwcm9wLCAiU1VOVyxKYXZhU3RhdGlvbi0xIiwgbGVuKSA9PSAwKSB7CisJaWYgKCFzdHJjbXAocm9vdC0+bmFtZSwgIlNVTlcsSmF2YVN0YXRpb24tMSIpKSB7CiAJCS8qIEhhcmRjb2RlZCB2YWx1ZXMgZm9yIE1yQ29mZmVlLiAgKi8KIAkJaTgwNDJfa2JkX2lycSA9IGk4MDQyX2F1eF9pcnEgPSAxMyB8IDB4MjA7CiAJCWtiZF9pb2Jhc2UgPSBpb3JlbWFwKDB4NzEzMDAwNjAsIDgpOwogCQlpZiAoIWtiZF9pb2Jhc2UpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgbGludXhfZWJ1cyAqZWJ1czsKLQkJc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICplZGV2OwotCQlzdHJ1Y3QgbGludXhfZWJ1c19jaGlsZCAqY2hpbGQ7CisJCWludCBlcnIgPSBvZl9yZWdpc3Rlcl9kcml2ZXIoJnNwYXJjX2k4MDQyX2RyaXZlciwKKwkJCQkJICAgICAmb2ZfYnVzX3R5cGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAotCQlmb3JfZWFjaF9lYnVzKGVidXMpIHsKLQkJCWZvcl9lYWNoX2VidXNkZXYoZWRldiwgZWJ1cykgewotCQkJCWlmICghc3RyY21wKGVkZXYtPnByb21fbm9kZS0+bmFtZSwgIjgwNDIiKSkKLQkJCQkJZ290byBlZGV2X2ZvdW5kOwotCQkJfQotCQl9Ci0JCXJldHVybiAtRU5PREVWOwotCi0JZWRldl9mb3VuZDoKLQkJZm9yX2VhY2hfZWRldmNoaWxkKGVkZXYsIGNoaWxkKSB7Ci0JCQlpZiAoIXN0cmNtcChjaGlsZC0+cHJvbV9ub2RlLT5uYW1lLCBPQlBfUFMyS0JEX05BTUUxKSB8fAotCQkJICAgICFzdHJjbXAoY2hpbGQtPnByb21fbm9kZS0+bmFtZSwgT0JQX1BTMktCRF9OQU1FMikpIHsKLQkJCQlpODA0Ml9rYmRfaXJxID0gY2hpbGQtPmlycXNbMF07Ci0JCQkJa2JkX2lvYmFzZSA9Ci0JCQkJCWlvcmVtYXAoY2hpbGQtPnJlc291cmNlWzBdLnN0YXJ0LCA4KTsKLQkJCX0KLQkJCWlmICghc3RyY21wKGNoaWxkLT5wcm9tX25vZGUtPm5hbWUsIE9CUF9QUzJNU19OQU1FMSkgfHwKLQkJCSAgICAhc3RyY21wKGNoaWxkLT5wcm9tX25vZGUtPm5hbWUsIE9CUF9QUzJNU19OQU1FMikpCi0JCQkJaTgwNDJfYXV4X2lycSA9IGNoaWxkLT5pcnFzWzBdOwotCQl9CiAJCWlmIChpODA0Ml9rYmRfaXJxID09IC0xIHx8CiAJCSAgICBpODA0Ml9hdXhfaXJxID09IC0xKSB7Ci0JCQlwcmludGsoImk4MDQyOiBFcnJvciwgODA0MiBkZXZpY2UgbGFja3MgYm90aCBrYmQgYW5kICIKLQkJCSAgICAgICAibW91c2Ugbm9kZXMuXG4iKTsKKwkJCWlmIChrYmRfaW9iYXNlKSB7CisJCQkJb2ZfaW91bm1hcChrYmRfaW9iYXNlLCA4KTsKKwkJCQlrYmRfaW9iYXNlID0gKHZvaWQgX19pb21lbSAqKSBOVUxMOworCQkJfQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC0xMDksNyArMTM1LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaTgwNDJfcGxhdGZvcm1fZXhpdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19QQ0kKLQlpb3VubWFwKGtiZF9pb2Jhc2UpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisKKwlpZiAoc3RyY21wKHJvb3QtPm5hbWUsICJTVU5XLEphdmFTdGF0aW9uLTEiKSkKKwkJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwYXJjX2k4MDQyX2RyaXZlcik7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IGE3ZDkxZDUuLjA2YTNmMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMzI5LDcgKzMyOCw3IEBACiAJCQlyZXR1cm4gMDsKIAogCWlmIChyZXF1ZXN0X2lycShwb3J0LT5pcnEsIGk4MDQyX2ludGVycnVwdCwKLQkJCVNBX1NISVJRLCAiaTgwNDIiLCBpODA0Ml9yZXF1ZXN0X2lycV9jb29raWUpKSB7CisJCQlJUlFGX1NIQVJFRCwgImk4MDQyIiwgaTgwNDJfcmVxdWVzdF9pcnFfY29va2llKSkgewogCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IENhbid0IGdldCBpcnEgJWQgZm9yICVzLCB1bnJlZ2lzdGVyaW5nIHRoZSBwb3J0LlxuIiwgcG9ydC0+aXJxLCBwb3J0LT5uYW1lKTsKIAkJZ290byBpcnFfZmFpbDsKIAl9CkBAIC02MTEsNyArNjEwLDcgQEAKICAqLwogCiAJaWYgKHJlcXVlc3RfaXJxKGk4MDQyX3BvcnRzW0k4MDQyX0FVWF9QT1JUX05PXS5pcnEsIGk4MDQyX2ludGVycnVwdCwKLQkJCVNBX1NISVJRLCAiaTgwNDIiLCAmaTgwNDJfY2hlY2tfYXV4X2Nvb2tpZSkpCisJCQlJUlFGX1NIQVJFRCwgImk4MDQyIiwgJmk4MDQyX2NoZWNrX2F1eF9jb29raWUpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKIAlmcmVlX2lycShpODA0Ml9wb3J0c1tJODA0Ml9BVVhfUE9SVF9OT10uaXJxLCAmaTgwNDJfY2hlY2tfYXV4X2Nvb2tpZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuaAppbmRleCBjYmJmMzg0Li5hZjUyNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSTgwNDJfSAogI2RlZmluZSBfSTgwNDJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgVm9qdGVjaCBQYXZsaWsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCmluZGV4IDc5Yzk3ZjkuLjYxYTZmOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQltdXRleF9sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJnBzMmRldi0+Y21kX211dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlzZXJpb19wYXVzZV9yeChwczJkZXYtPnNlcmlvKTsKIAlwczJkZXYtPmZsYWdzID0gY29tbWFuZCA9PSBQUzJfQ01EX0dFVElEID8gUFMyX0ZMQUdfV0FJVElEIDogMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGNpcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3BjaXBzMi5jCmluZGV4IDFlMTM5YzUuLmZiNzI3YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGNpcHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9wY2lwczIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJb3V0YihQUzJfQ1RSTF9FTkFCTEUsIHBzMmlmLT5iYXNlKTsKIAlwY2lwczJfZmx1c2hfaW5wdXQocHMyaWYpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocHMyaWYtPmRldi0+aXJxLCBwY2lwczJfaW50ZXJydXB0LCBTQV9TSElSUSwKKwlyZXQgPSByZXF1ZXN0X2lycShwczJpZi0+ZGV2LT5pcnEsIHBjaXBzMl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJICAicGNpcHMyIiwgcHMyaWYpOwogCWlmIChyZXQgPT0gMCkKIAkJdmFsID0gUFMyX0NUUkxfRU5BQkxFIHwgUFMyX0NUUkxfUlhJUlE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwppbmRleCA1YTI3MDNiLi43MWE4ZWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDM4NjAyM2MuLjY2ZTQxMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC03NzMsNyArNzczLDcgQEAKIAogCXRzLT5sYXN0X21zZyA9IG07CiAKLQlpZiAocmVxdWVzdF9pcnEoc3BpLT5pcnEsIGFkczc4NDZfaXJxLCBTQV9UUklHR0VSX0ZBTExJTkcsCisJaWYgKHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBhZHM3ODQ2X2lycSwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQlzcGktPmRldi5kcml2ZXItPm5hbWUsIHRzKSkgewogCQlkZXZfZGJnKCZzcGktPmRldiwgImlycSAlZCBidXN5P1xuIiwgc3BpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKaW5kZXggNTAxMzcwMy4uOWI2NjI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLS8vI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgpAQCAtMzE4LDcgKzMxOCw3IEBACiAJY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KCg1dSA8PCBBRFNDVFJMX0FEUl9TSCkgfCBBRFNDVFJMX1NUUyk7CiAJbWRlbGF5KDUpOwogCi0JaWYgKHJlcXVlc3RfaXJxKGNvcmdpX3RzLT5pcnFfZ3BpbywgdHNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJ0cyIsIGNvcmdpX3RzKSkgeworCWlmIChyZXF1ZXN0X2lycShjb3JnaV90cy0+aXJxX2dwaW8sIHRzX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInRzIiwgY29yZ2lfdHMpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBmYWlsOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYwppbmRleCAyZGUyMTM5Li5lMmI5MTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCkBAIC0zOTksMTQgKzM5OSwxNCBAQAogCXNldF9HUElPX0lSUV9lZGdlKEdQSU9fQklUU1lfTlBPV0VSX0JVVFRPTiwgR1BJT19SSVNJTkdfRURHRSk7CiAKIAlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU9fQklUU1lfQUNUSU9OX0JVVFRPTiwgYWN0aW9uX2J1dHRvbl9oYW5kbGVyLAotCQkJU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsICJoMzYwMF9hY3Rpb24iLCAmdHMtPmRldikpIHsKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgImgzNjAwX2FjdGlvbiIsICZ0cy0+ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImgzNjAwdHMuYzogQ291bGQgbm90IGFsbG9jYXRlIEFjdGlvbiBCdXR0b24gSVJRIVxuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBmYWlsMjsKIAl9CiAKIAlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU9fQklUU1lfTlBPV0VSX0JVVFRPTiwgbnBvd2VyX2J1dHRvbl9oYW5kbGVyLAotCQkJU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsICJoMzYwMF9zdXNwZW5kIiwgJnRzLT5kZXYpKSB7CisJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJoMzYwMF9zdXNwZW5kIiwgJnRzLT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaDM2MDB0cy5jOiBDb3VsZCBub3QgYWxsb2NhdGUgUG93ZXIgQnV0dG9uIElSUSFcbiIpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKaW5kZXggOTU3ZGQ1YS4uZmE5N2UwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhwNjgwX3RzX2Rldik7CiAKIAlpZiAocmVxdWVzdF9pcnEoSFA2ODBfVFNfSVJRLCBocDY4MF90c19pbnRlcnJ1cHQsCi0JCQlTQV9JTlRFUlJVUFQsIE1PRE5BTUUsIDApIDwgMCkgeworCQkJSVJRRl9ESVNBQkxFRCwgTU9ETkFNRSwgMCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaHA2ODBfdG91Y2hzY3JlZW4uYzogQ2FuJ3QgYWxsb2NhdGUgaXJxICVkXG4iLAogCQkgICAgICAgSFA2ODBfVFNfSVJRKTsKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaHA2ODBfdHNfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdHNkZXYuYyBiL2RyaXZlcnMvaW5wdXQvdHNkZXYuYwppbmRleCA1ZjllY2FkLi4wMGUzOTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RzZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90c2Rldi5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCAyZTU0MWZhLi42NjlmNzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM5LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuL2NhcGl1dGlsLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpY21kLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGUykgfHwgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGU19NT0RVTEUpCkBAIC0xMzM3LDcgKzEzMzUsNiBAQAogCiAJZHJ2LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWRydi0+ZHJpdmVyX25hbWUgPSAiY2FwaV9uYyI7Ci0JZHJ2LT5kZXZmc19uYW1lID0gImNhcGkvIjsKIAlkcnYtPm5hbWUgPSAiY2FwaSI7CiAJZHJ2LT5tYWpvciA9IGNhcGlfdHR5bWFqb3I7CiAJZHJ2LT5taW5vcl9zdGFydCA9IDA7CkBAIC0xNTE2LDggKzE1MTMsNiBAQAogCX0KIAogCWNsYXNzX2RldmljZV9jcmVhdGUoY2FwaV9jbGFzcywgTlVMTCwgTUtERVYoY2FwaV9tYWpvciwgMCksIE5VTEwsICJjYXBpIik7Ci0JZGV2ZnNfbWtfY2RldihNS0RFVihjYXBpX21ham9yLCAwKSwgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJImlzZG4vY2FwaTIwIik7CiAKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKIAlpZiAoY2FwaW5jX3R0eV9pbml0KCkgPCAwKSB7CkBAIC0xNTUyLDcgKzE1NDcsNiBAQAogCWNsYXNzX2RldmljZV9kZXN0cm95KGNhcGlfY2xhc3MsIE1LREVWKGNhcGlfbWFqb3IsIDApKTsKIAljbGFzc19kZXN0cm95KGNhcGlfY2xhc3MpOwogCXVucmVnaXN0ZXJfY2hyZGV2KGNhcGlfbWFqb3IsICJjYXBpMjAiKTsKLQlkZXZmc19yZW1vdmUoImlzZG4vY2FwaTIwIik7CiAKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKIAljYXBpbmNfdHR5X2V4aXQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpdXRpbC5jCmluZGV4IGU3Y2Y2YmMuLmMxYjIxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaXV0aWwuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaXV0aWwuaD4KIAogLyogZnJvbSBDQVBJMi4wIERESyBBVk0gQmVybGluIEdtYkggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKaW5kZXggMWIzN2Q4Ni4uMzk5YjMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKKysrIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDhhNDU3MTUuLjM4NDVkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtNDEsNyArNDEsNiBAQAogI2RlZmluZSBHSUdBU0VUX01JTk9SUyAgICAgMQogI2RlZmluZSBHSUdBU0VUX01JTk9SICAgICAgMTYKICNkZWZpbmUgR0lHQVNFVF9NT0RVTEVOQU1FICJiYXNfZ2lnYXNldCIKLSNkZWZpbmUgR0lHQVNFVF9ERVZGU05BTUUgICJnaWcvYmFzLyIKICNkZWZpbmUgR0lHQVNFVF9ERVZOQU1FICAgICJ0dHlHQiIKIAogLyogbGVuZ3RoIGxpbWl0IGFjY29yZGluZyB0byBTaWVtZW5zIDMwNzB1c2ItcHJvdG9rb2xsLmRvYyBjaC4gMi4xICovCkBAIC0yMzQ5LDggKzIzNDgsNyBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRyaXZlciBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAJaWYgKChkcml2ZXIgPSBnaWdhc2V0X2luaXRkcml2ZXIoR0lHQVNFVF9NSU5PUiwgR0lHQVNFVF9NSU5PUlMsCiAJCQkJICAgICAgIEdJR0FTRVRfTU9EVUxFTkFNRSwgR0lHQVNFVF9ERVZOQU1FLAotCQkJCSAgICAgICBHSUdBU0VUX0RFVkZTTkFNRSwgJmdpZ29wcywKLQkJCQkgICAgICAgVEhJU19NT0RVTEUpKSA9PSBOVUxMKQorCQkJCSAgICAgICAmZ2lnb3BzLCBUSElTX01PRFVMRSkpID09IE5VTEwpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwppbmRleCAyYTU2YmYzLi5hY2ExNjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwpAQCAtMTA5MiwxNCArMTA5MiwxMiBAQAogICoJbWlub3JzCQlOdW1iZXIgb2YgbWlub3JzIHRoaXMgZHJpdmVyIGNhbiBoYW5kbGUKICAqCXByb2NuYW1lCU5hbWUgb2YgdGhlIGRyaXZlcgogICoJZGV2bmFtZQkJTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCi0gKglkZXZmc25hbWUJRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKICAqIHJldHVybiB2YWx1ZToKICAqCVBvaW50ZXIgdG8gdGhlIGdpZ2FzZXRfZHJpdmVyIHN0cnVjdHVyZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZ2lnYXNldF9pbml0ZHJpdmVyKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBtaW5vcnMsCiAJCQkJCSAgY29uc3QgY2hhciAqcHJvY25hbWUsCiAJCQkJCSAgY29uc3QgY2hhciAqZGV2bmFtZSwKLQkJCQkJICBjb25zdCBjaGFyICpkZXZmc25hbWUsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCiAJCQkJCSAgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7CkBAIC0xMTM5LDcgKzExMzcsNyBAQAogCQlkcnYtPmNzW2ldLm1pbm9yX2luZGV4ID0gaTsKIAl9CiAKLQlnaWdhc2V0X2lmX2luaXRkcml2ZXIoZHJ2LCBwcm9jbmFtZSwgZGV2bmFtZSwgZGV2ZnNuYW1lKTsKKwlnaWdhc2V0X2lmX2luaXRkcml2ZXIoZHJ2LCBwcm9jbmFtZSwgZGV2bmFtZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmZHJ2LT5saXN0LCAmZHJpdmVycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmggYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKaW5kZXggOGQ2M2Q4Mi4uODg0YmQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBHSUdBU0VUX0gKICNkZWZpbmUgR0lHQVNFVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC03NjksNyArNzY4LDYgQEAKIHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZ2lnYXNldF9pbml0ZHJpdmVyKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBtaW5vcnMsCiAJCQkJCSAgY29uc3QgY2hhciAqcHJvY25hbWUsCiAJCQkJCSAgY29uc3QgY2hhciAqZGV2bmFtZSwKLQkJCQkJICBjb25zdCBjaGFyICpkZXZmc25hbWUsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGdpZ2FzZXRfb3BzICpvcHMsCiAJCQkJCSAgc3RydWN0IG1vZHVsZSAqb3duZXIpOwogCkBAIC04OTIsNyArODkwLDcgQEAKIAogLyogaW5pdGlhbGl6ZSBpbnRlcmZhY2UgKi8KIHZvaWQgZ2lnYXNldF9pZl9pbml0ZHJpdmVyKHN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKLQkJCSAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNvbnN0IGNoYXIgKmRldmZzbmFtZSk7CisJCQkgICBjb25zdCBjaGFyICpkZXZuYW1lKTsKIC8qIHJlbGVhc2UgaW50ZXJmYWNlICovCiB2b2lkIGdpZ2FzZXRfaWZfZnJlZWRyaXZlcihzdHJ1Y3QgZ2lnYXNldF9kcml2ZXIgKmRydik7CiAvKiBhZGQgbWlub3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKaW5kZXggNzRmZDIzNC4uYmQyZTQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKQEAgLTY3MywxMCArNjczLDkgQEAKICAqCWRydgkJRHJpdmVyCiAgKglwcm9jbmFtZQlOYW1lIG9mIHRoZSBkcml2ZXIgKGUuZy4gZm9yIC9wcm9jL3R0eS9kcml2ZXJzKQogICoJZGV2bmFtZQkJTmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIChwcmVmaXggd2l0aG91dCBtaW5vciBudW1iZXIpCi0gKglkZXZmc25hbWUJRGV2ZnMgbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGVzIHdpdGhvdXQgJWQKICAqLwogdm9pZCBnaWdhc2V0X2lmX2luaXRkcml2ZXIoc3RydWN0IGdpZ2FzZXRfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKnByb2NuYW1lLAotCQkJICAgY29uc3QgY2hhciAqZGV2bmFtZSwgY29uc3QgY2hhciAqZGV2ZnNuYW1lKQorCQkJICAgY29uc3QgY2hhciAqZGV2bmFtZSkKIHsKIAl1bnNpZ25lZCBtaW5vcnMgPSBkcnYtPm1pbm9yczsKIAlpbnQgcmV0OwpAQCAtNjkyLDcgKzY5MSw3IEBACiAJdHR5LT5tYWpvciA9CQlHSUdfTUFKT1IsCiAJdHR5LT50eXBlID0JCVRUWV9EUklWRVJfVFlQRV9TRVJJQUwsCiAJdHR5LT5zdWJ0eXBlID0JCVNFUklBTF9UWVBFX05PUk1BTCwKLQl0dHktPmZsYWdzID0JCVRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTLAorCXR0eS0+ZmxhZ3MgPQkJVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CiAKIAl0dHktPmRyaXZlcl9uYW1lID0JcHJvY25hbWU7CiAJdHR5LT5uYW1lID0JCWRldm5hbWU7CkBAIC03MDAsNyArNjk5LDYgQEAKIAl0dHktPm51bSA9CQlkcnYtPm1pbm9yczsKIAogCXR0eS0+b3duZXIgPQkJVEhJU19NT0RVTEU7Ci0JdHR5LT5kZXZmc19uYW1lID0JZGV2ZnNuYW1lOwogCiAJdHR5LT5pbml0X3Rlcm1pb3MgICAgICAgICAgPSB0dHlfc3RkX3Rlcm1pb3M7IC8vRklYTUUKIAl0dHktPmluaXRfdGVybWlvcy5jX2NmbGFnICA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsgLy9GSVhNRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKaW5kZXggZDg2YWI2OC4uNmUwNWQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCkBAIC00MSw3ICs0MSw2IEBACiAjZGVmaW5lIEdJR0FTRVRfTUlOT1JTICAgICAxCiAjZGVmaW5lIEdJR0FTRVRfTUlOT1IgICAgICA4CiAjZGVmaW5lIEdJR0FTRVRfTU9EVUxFTkFNRSAidXNiX2dpZ2FzZXQiCi0jZGVmaW5lIEdJR0FTRVRfREVWRlNOQU1FICAiZ2lnL3VzYi8iCiAjZGVmaW5lIEdJR0FTRVRfREVWTkFNRSAgICAidHR5R1UiCiAKICNkZWZpbmUgSUZfV1JJVEVCVUYgMjAwMCAvL0ZJWE1FICAvLyBXQUtFVVBfQ0hBUlM6IDI1NgpAQCAtODk2LDggKzg5NSw3IEBACiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZHJpdmVyIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KIAlpZiAoKGRyaXZlciA9IGdpZ2FzZXRfaW5pdGRyaXZlcihHSUdBU0VUX01JTk9SLCBHSUdBU0VUX01JTk9SUywKIAkJCQkgICAgICAgR0lHQVNFVF9NT0RVTEVOQU1FLCBHSUdBU0VUX0RFVk5BTUUsCi0JCQkJICAgICAgIEdJR0FTRVRfREVWRlNOQU1FLCAmb3BzLAotCQkJCSAgICAgICBUSElTX01PRFVMRSkpID09IE5VTEwpCisJCQkJICAgICAgICZvcHMsIFRISVNfTU9EVUxFKSkgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMKaW5kZXggNGQ2NGU1Y2IuLmE0YmVlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY2kuYwppbmRleCA1NDM1YTZjLi45MGUyZTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjaS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC05OCw3ICs5Nyw3IEBACiAJYjFfcmVzZXQoY2FyZC0+cG9ydCk7CiAJYjFfZ2V0cmV2aXNpb24oY2FyZCk7CiAJCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBiMV9pbnRlcnJ1cHQsIFNBX1NISVJRLCBjYXJkLT5uYW1lLCBjYXJkKTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShjYXJkLT5pcnEsIGIxX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGNhcmQtPm5hbWUsIGNhcmQpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJiMXBjaTogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLCBjYXJkLT5pcnEpOwogCQlyZXR2YWwgPSAtRUJVU1k7CkBAIC0yMzUsNyArMjM0LDcgQEAKIAliMWRtYV9yZXNldChjYXJkKTsKIAliMV9nZXRyZXZpc2lvbihjYXJkKTsKIAotCXJldHZhbCA9IHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgYjFkbWFfaW50ZXJydXB0LCBTQV9TSElSUSwgY2FyZC0+bmFtZSwgY2FyZCk7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBiMWRtYV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBjYXJkLT5uYW1lLCBjYXJkKTsKIAlpZiAocmV0dmFsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYjFwY2k6IHVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwKIAkJICAgICAgIGNhcmQtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNtY2lhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNtY2lhLmMKaW5kZXggOTc0NmNjNS4uZTQ3OWMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjbWNpYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY21jaWEuYwpAQCAtODIsNyArODIsNyBAQAogCWNhcmQtPmlycSA9IGlycTsKIAljYXJkLT5jYXJkdHlwZSA9IGNhcmR0eXBlOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBiMV9pbnRlcnJ1cHQsIDAsIGNhcmQtPm5hbWUsIGNhcmQpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgYjFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgY2FyZC0+bmFtZSwgY2FyZCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgImIxcGNtY2lhOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsCiAJCSAgICAgICBjYXJkLT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jCmluZGV4IGY3MjUzYjIuLjZjM2Q1ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYzQuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2M0LmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTExNzMsNyArMTE3Miw3IEBACiAJfQogCWM0X3Jlc2V0KGNhcmQpOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBjNF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBjYXJkLT5uYW1lLCBjYXJkKTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShjYXJkLT5pcnEsIGM0X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGNhcmQtPm5hbWUsIGNhcmQpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjNDogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLGNhcmQtPmlycSk7CiAJCXJldHZhbCA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFwY2kuYwppbmRleCAyY2VlYzhlLi5kMWUyNTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MXBjaS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0xMDQsNyArMTAzLDcgQEAKIAl9CiAJYjFkbWFfcmVzZXQoY2FyZCk7CiAKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShjYXJkLT5pcnEsIGIxZG1hX2ludGVycnVwdCwgU0FfU0hJUlEsIGNhcmQtPm5hbWUsIGNhcmQpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgYjFkbWFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgY2FyZC0+bmFtZSwgY2FyZCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgInQxcGNpOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGNhcmQtPmlycSk7CiAJCXJldHZhbCA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9jYXBpbWFpbi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMKaW5kZXggOGZlNGYzZi4uN2E3NGVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jCmluZGV4IDI3MjA0ZjQuLjE0Mjk4YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhX2RpZGQuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhbW50LmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YW1udC5jCmluZGV4IDYxNDZmNzYuLjc3MTU1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhbW50LmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFtbnQuYwpAQCAtMTAsMTQgKzEwLDEyIEBACiAgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAicGxhdGZvcm0uaCIKQEAgLTE3OCw3ICsxNzYsNiBAQAogCiBzdGF0aWMgdm9pZCBkaXZhc19tYWludF91bnJlZ2lzdGVyX2NocmRldih2b2lkKQogewotCWRldmZzX3JlbW92ZShERVZOQU1FKTsKIAl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgREVWTkFNRSk7CiB9CiAKQEAgLTE5MCw3ICsxODcsNiBAQAogCQkgICAgICAgRFJJVkVSTE5BTUUpOwogCQlyZXR1cm4gKDApOwogCX0KLQlkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCAwKSwgU19JRkNIUnxTX0lSVVNSfFNfSVdVU1IsIERFVk5BTUUpOwogCiAJcmV0dXJuICgxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYwppbmRleCBkZjcxNWI0Li5mZmYwZDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xOSw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAicGxhdGZvcm0uaCIKQEAgLTE0NSw3ICsxNDMsNiBAQAogCiBzdGF0aWMgdm9pZCBkaXZhc19pZGlfdW5yZWdpc3Rlcl9jaHJkZXYodm9pZCkKIHsKLQlkZXZmc19yZW1vdmUoREVWTkFNRSk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIERFVk5BTUUpOwogfQogCkBAIC0xNTcsNyArMTU0LDYgQEAKIAkJICAgICAgIERSSVZFUkxOQU1FKTsKIAkJcmV0dXJuICgwKTsKIAl9Ci0JZGV2ZnNfbWtfY2RldihNS0RFVihtYWpvciwgMCksIFNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLCBERVZOQU1FKTsKIAogCXJldHVybiAoMSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNtYWluLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNtYWluLmMKaW5kZXggYzliMjZlOC4uYjdkYWRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzbWFpbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc21haW4uYwpAQCAtOSwxMiArOSwxMCBAQAogICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQ4OCw3ICs0ODYsNyBAQAogaW50IGRpdmFfb3NfcmVnaXN0ZXJfaXJxKHZvaWQgKmNvbnRleHQsIGJ5dGUgaXJxLCBjb25zdCBjaGFyICpuYW1lKQogewogCWludCByZXN1bHQgPSByZXF1ZXN0X2lycShpcnEsIGRpdmFfb3NfaXJxX3dyYXBwZXIsCi0JCQkJIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLCBuYW1lLCBjb250ZXh0KTsKKwkJCQkgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBuYW1lLCBjb250ZXh0KTsKIAlyZXR1cm4gKHJlc3VsdCk7CiB9CiAKQEAgLTY3OCw3ICs2NzYsNiBAQAogCiBzdGF0aWMgdm9pZCBkaXZhc191bnJlZ2lzdGVyX2NocmRldih2b2lkKQogewotCWRldmZzX3JlbW92ZShERVZOQU1FKTsKIAl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgREVWTkFNRSk7CiB9CiAKQEAgLTY5MCw3ICs2ODcsNiBAQAogCQkgICAgICAgRFJJVkVSTE5BTUUpOwogCQlyZXR1cm4gKDApOwogCX0KLQlkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCAwKSwgU19JRkNIUnxTX0lSVVNSfFNfSVdVU1IsIERFVk5BTUUpOwogCiAJcmV0dXJuICgxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3Byb2MuYwppbmRleCBjMTJlZmE2Li42YTQzNzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNwcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzcHJvYy5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGxhdGZvcm0uaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9wbGF0Zm9ybS5oCmluZGV4IDEyYjhmZjIuLmE2NjgzNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9wbGF0Zm9ybS5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9wbGF0Zm9ybS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIERJVkFfQlVJTEQgImxvY2FsIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX2ExcC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9hMXAuYwppbmRleCBkNjQzYmIzLi41NzRlMjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX2ExcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fYTFwLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCWNzLT5CQ19Xcml0ZV9SZWcgPSAmV3JpdGVIU0NYOwogCWNzLT5CQ19TZW5kX0RhdGEgPSAmaHNjeF9maWxsX2ZpZm87CiAJY3MtPmNhcmRtc2cgPSAmQVZNX2NhcmRfbXNnOwotCWNzLT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwljcy0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJY3MtPmlycV9mdW5jID0gJmF2bV9hMXBfaW50ZXJydXB0OwogCiAJSVNBQ1ZlcnNpb24oY3MsICJBVk0gQTEgUENNQ0lBOiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKaW5kZXggNGFiZTVmZi4uMDRmNTkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2FjLmgiCkBAIC04MDksNyArODA4LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRnJpdHpQQ0k6IE5vIFBDSSBjYXJkIGZvdW5kXG4iKTsKIAkJcmV0dXJuKDApOwogCX0KLQljcy0+aXJxX2ZsYWdzIHw9IFNBX1NISVJROworCWNzLT5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAjZWxzZQogCXByaW50ayhLRVJOX1dBUk5JTkcgIkZyaXR6UENJOiBOT19QQ0lfQklPU1xuIik7CiAJcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCmluZGV4IGRjYjMwOGEuLjNjZjFmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzYWMuaCIKQEAgLTMzNiw3ICszMzUsNyBAQAogCWNzLT5CQ19TZW5kX0RhdGEgPSAmamFkZV9maWxsX2ZpZm87CiAJY3MtPmNhcmRtc2cgPSAmQktNX2NhcmRfbXNnOwogCWNzLT5pcnFfZnVuYyA9ICZia21faW50ZXJydXB0OwotCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAlJU0FDVmVyc2lvbihjcywgIlRlbGVrb20gQTRUOiIpOwogCS8qIEphZGUgdmVyc2lvbiAqLwogCUphZGVWZXJzaW9uKGNzLCAiVGVsZWtvbSBBNFQ6Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKaW5kZXggNWYyMWI4Mi4uMTU2ODFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzYWMuaCIKQEAgLTM3NSw3ICszNzQsNyBAQAogCXBjaV9pb2FkZHI1ICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKIAkvKiBUYWtlIG92ZXIgKi8KIAljcy0+aXJxID0gcGNpX2lycTsKLQljcy0+aXJxX2ZsYWdzIHw9IFNBX1NISVJROworCWNzLT5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJLyogcGNpX2lvYWRkcjEgaXMgdW5pcXVlIHRvIGFsbCBzdWJkZXZpY2VzICovCiAJLyogcGNpX2lvYWRkcjIgaXMgZm9yIHRoZSBmb3VydGggc3ViZGV2aWNlIG9ubHkgKi8KIAkvKiBwY2lfaW9hZGRyMyBpcyBmb3IgdGhlIHRoaXJkIHN1YmRldmljZSBvbmx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKaW5kZXggMjczMzI1MC4uNTMzM2JlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCmluZGV4IGIwZmYxY2MuLjMyM2EwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwpAQCAtMTYsNyArMTYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2FjLmgiCiAjaW5jbHVkZSAiaHNjeC5oIgpAQCAtMTA3Nyw3ICsxMDc2LDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRpdmE6IE5vIElPLUFkciBmb3IgUENJIGNhcmQgZm91bmRcbiIpOwogCQkJcmV0dXJuKDApOwogCQl9Ci0JCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJCWNzLT5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAjZWxzZQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaXZhOiBjZmdyZWcgMCBhbmQgTk9fUENJX0JJT1NcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJEaXZhOiB1bmFibGUgdG8gY29uZmlnIERJVkEgUENJXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCmluZGV4IGY4Y2E0YjMuLjNiM2UzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYwpAQCAtMTksNyArMTksNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJhcmNvZmkuaCIKICNpbmNsdWRlICJpc2FjLmgiCkBAIC04Niw4ICs4NSw4IEBACiAgKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiovCiAKIC8qIENvbmZpZy1SZWdpc3RlciAoUmVhZCkgKi8KLSNkZWZpbmUgRUxTQV9USU1FUl9SVU4gICAgICAgMHgwMgkvKiBCaXQgMSBkZXMgQ29uZmlnLVJlZyAgICAgKi8KLSNkZWZpbmUgRUxTQV9USU1FUl9SVU5fUENDOCAgMHgwMQkvKiBCaXQgMCBkZXMgQ29uZmlnLVJlZyAgYmVpIFBDQyAqLworI2RlZmluZSBFTElSUUZfVElNRVJfUlVOICAgICAgIDB4MDIJLyogQml0IDEgZGVzIENvbmZpZy1SZWcgICAgICovCisjZGVmaW5lIEVMSVJRRl9USU1FUl9SVU5fUENDOCAgMHgwMQkvKiBCaXQgMCBkZXMgQ29uZmlnLVJlZyAgYmVpIFBDQyAqLwogI2RlZmluZSBFTFNBX0lSUV9JRFggICAgICAgMHgzOAkvKiBCaXQgMyw0LDUgZGVzIENvbmZpZy1SZWcgKi8KICNkZWZpbmUgRUxTQV9JUlFfSURYX1BDQzggIDB4MzAJLyogQml0IDQsNSBkZXMgQ29uZmlnLVJlZyAqLwogI2RlZmluZSBFTFNBX0lSUV9JRFhfUEMgICAgMHgwYwkvKiBCaXQgMiwzIGRlcyBDb25maWctUmVnICovCkBAIC0xMDMsNyArMTAyLDcgQEAKICNkZWZpbmUgRUxTQV9TMF9QT1dFUl9CQUQgICAgMHgwOAkvKiBCaXQgMyBTMC1CdXMgU3Bhbm51bmcgZmVobHQgKi8KIAogLyogU3RhdHVzIEZsYWdzICovCi0jZGVmaW5lIEVMU0FfVElNRVJfQUtUSVYgMQorI2RlZmluZSBFTElSUUZfVElNRVJfQUtUSVYgMQogI2RlZmluZSBFTFNBX0JBRF9QV1IgICAgIDIKICNkZWZpbmUgRUxTQV9BU1NJR04gICAgICA0CiAKQEAgLTI2MCwxMCArMjU5LDEwIEBACiAKIAl2ID0gYnl0ZWluKGNzLT5ody5lbHNhLmNmZyk7CiAJaWYgKChjcy0+c3VidHlwID09IEVMU0FfUVMxMDAwKSB8fCAoY3MtPnN1YnR5cCA9PSBFTFNBX1FTMzAwMCkpCi0JCXJldHVybiAoMCA9PSAodiAmIEVMU0FfVElNRVJfUlVOKSk7CisJCXJldHVybiAoMCA9PSAodiAmIEVMSVJRRl9USU1FUl9SVU4pKTsKIAllbHNlIGlmIChjcy0+c3VidHlwID09IEVMU0FfUENDOCkKLQkJcmV0dXJuICh2ICYgRUxTQV9USU1FUl9SVU5fUENDOCk7Ci0JcmV0dXJuICh2ICYgRUxTQV9USU1FUl9SVU4pOworCQlyZXR1cm4gKHYgJiBFTElSUUZfVElNRVJfUlVOX1BDQzgpOworCXJldHVybiAodiAmIEVMSVJRRl9USU1FUl9SVU4pOwogfQogLyoKICAqIGZhc3QgaW50ZXJydXB0IEhTQ1ggc3R1ZmYgZ29lcyBoZXJlCkBAIC0zMzUsNyArMzM0LDcgQEAKIAl3cml0ZXJlZyhjcy0+aHcuZWxzYS5hbGUsIGNzLT5ody5lbHNhLmhzY3gsIEhTQ1hfTUFTSywgMHhGRik7CiAJd3JpdGVyZWcoY3MtPmh3LmVsc2EuYWxlLCBjcy0+aHcuZWxzYS5oc2N4LCBIU0NYX01BU0sgKyAweDQwLCAweEZGKTsKIAl3cml0ZXJlZyhjcy0+aHcuZWxzYS5hbGUsIGNzLT5ody5lbHNhLmlzYWMsIElTQUNfTUFTSywgMHhGRik7Ci0JaWYgKGNzLT5ody5lbHNhLnN0YXR1cyAmIEVMU0FfVElNRVJfQUtUSVYpIHsKKwlpZiAoY3MtPmh3LmVsc2Euc3RhdHVzICYgRUxJUlFGX1RJTUVSX0FLVElWKSB7CiAJCWlmICghVGltZXJSdW4oY3MpKSB7CiAJCQkvKiBUaW1lciBSZXN0YXJ0ICovCiAJCQlieXRlb3V0KGNzLT5ody5lbHNhLnRpbWVyLCAwKTsKQEAgLTY4Niw3ICs2ODUsNyBAQAogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJCWNzLT5ody5lbHNhLmNvdW50ZXIgPSAwOwogCQkJCWNzLT5ody5lbHNhLmN0cmxfcmVnIHw9IEVMU0FfRU5BX1RJTUVSX0lOVDsKLQkJCQljcy0+aHcuZWxzYS5zdGF0dXMgfD0gRUxTQV9USU1FUl9BS1RJVjsKKwkJCQljcy0+aHcuZWxzYS5zdGF0dXMgfD0gRUxJUlFGX1RJTUVSX0FLVElWOwogCQkJCWJ5dGVvdXQoY3MtPmh3LmVsc2EuY3RybCwgY3MtPmh3LmVsc2EuY3RybF9yZWcpOwogCQkJCWJ5dGVvdXQoY3MtPmh3LmVsc2EudGltZXIsIDApOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CkBAIC02OTQsNyArNjkzLDcgQEAKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJCQljcy0+aHcuZWxzYS5jdHJsX3JlZyAmPSB+RUxTQV9FTkFfVElNRVJfSU5UOwogCQkJCWJ5dGVvdXQoY3MtPmh3LmVsc2EuY3RybCwgY3MtPmh3LmVsc2EuY3RybF9yZWcpOwotCQkJCWNzLT5ody5lbHNhLnN0YXR1cyAmPSB+RUxTQV9USU1FUl9BS1RJVjsKKwkJCQljcy0+aHcuZWxzYS5zdGF0dXMgJj0gfkVMSVJRRl9USU1FUl9BS1RJVjsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJCXByaW50ayhLRVJOX0lORk8gIkVsc2E6ICVkIHRpbWVyIHRpY3MgaW4gMTEwIG1zZWtcbiIsCiAJCQkJICAgICAgIGNzLT5ody5lbHNhLmNvdW50ZXIpOwpAQCAtMTAxMyw3ICsxMDEyLDcgQEAKIAkJY3MtPmh3LmVsc2EudGltZXIgPSAwOwogCQljcy0+aHcuZWxzYS50cmlnID0gMDsKIAkJY3MtPmh3LmVsc2EuY3RybCA9IDA7Ci0JCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJCWNzLT5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICJFbHNhOiAlcyBkZWZpbmVkIGF0ICUjbHggSVJRICVkXG4iLAogCQkgICAgICAgRWxzYV9UeXBlc1tjcy0+c3VidHlwXSwKQEAgLTEwNjIsNyArMTA2MSw3IEBACiAJCXRlc3RfYW5kX3NldF9iaXQoSFdfSVBBQywgJmNzLT5IV19GbGFncyk7CiAJCWNzLT5ody5lbHNhLnRpbWVyID0gMDsKIAkJY3MtPmh3LmVsc2EudHJpZyAgPSAwOwotCQljcy0+aXJxX2ZsYWdzIHw9IFNBX1NISVJROworCQljcy0+aXJxX2ZsYWdzIHw9IElSUUZfU0hBUkVEOwogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiRWxzYTogJXMgZGVmaW5lZCBhdCAlI2x4LzB4JXggSVJRICVkXG4iLAogCQkgICAgICAgRWxzYV9UeXBlc1tjcy0+c3VidHlwXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKaW5kZXggODk4ZWMwOS4uMDI3OWZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYwppbmRleCAzMzQxY2YxLi44ZmNiZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCkBAIC02MCw3ICs2MCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2FjLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCkBAIC00MDYsNyArNDA1LDcgQEAKIAljcy0+QkNfU2VuZF9EYXRhID0gJm5ldGpldF9maWxsX2RtYTsKIAljcy0+Y2FyZG1zZyA9ICZlbnBjaV9jYXJkX21zZzsKIAljcy0+aXJxX2Z1bmMgPSAmZW5wY2lfaW50ZXJydXB0OwotCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAogICAgICAgICByZXR1cm4gKDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwppbmRleCA2MGIwNGM2Li4zZTdkOTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaXNhYy5oIgpAQCAtNTkzLDcgKzU5Miw3IEBACiAJY3MtPmh3LmdhemVsLmhzY3hmaWZvWzBdID0gY3MtPmh3LmdhemVsLmhzY3hbMF07CiAJY3MtPmh3LmdhemVsLmhzY3hmaWZvWzFdID0gY3MtPmh3LmdhemVsLmhzY3hbMV07CiAJY3MtPmlycSA9IHBjaV9pcnE7Ci0JY3MtPmlycV9mbGFncyB8PSBTQV9TSElSUTsKKwljcy0+aXJxX2ZsYWdzIHw9IElSUUZfU0hBUkVEOwogCiAJc3dpdGNoIChzZWVrY2FyZCkgewogCQljYXNlIFBDSV9ERVZJQ0VfSURfUExYX1I2ODU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmYzRzOHNfbDEuYwppbmRleCBlMzg2NmIwLi4wZjk2N2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmM0czhzX2wxLmMKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMTU1Myw3ICsxNTUyLDcgQEAKIAlJTklUX1dPUksoJmh3LT50cXVldWUsICh2b2lkICopICh2b2lkICopIGhmYzRzOHNfYmgsIGh3KTsKIAogCWlmIChyZXF1ZXN0X2lycQotCSAgICAoaHctPmlycSwgaGZjNHM4c19pbnRlcnJ1cHQsIFNBX1NISVJRLCBody0+Y2FyZF9uYW1lLCBodykpIHsKKwkgICAgKGh3LT5pcnEsIGhmYzRzOHNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgaHctPmNhcmRfbmFtZSwgaHcpKSB7CiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICJIRkMtNFMvOFM6IHVuYWJsZSB0byBhbGxvYyBpcnEgJWQsIGNhcmQgaWdub3JlZFxuIiwKIAkJICAgICAgIGh3LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggOTFkMjVhYy4uNzI0MWU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImhmY19wY2kuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKQEAgLTE2ODgsNyArMTY4Nyw3IEBACiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSEZDLVBDSTogTm8gSVJRIGZvciBQQ0kgY2FyZCBmb3VuZFxuIik7CiAJCQkJcmV0dXJuICgwKTsKIAkJCX0KLQkJCWNzLT5ody5oZmNwY2kucGNpX2lvID0gKGNoYXIgKikgZGV2X2hmY3BjaS0+cmVzb3VyY2VbIDFdLnN0YXJ0OworCQkJY3MtPmh3LmhmY3BjaS5wY2lfaW8gPSAoY2hhciAqKSh1bnNpZ25lZCBsb25nKWRldl9oZmNwY2ktPnJlc291cmNlWzFdLnN0YXJ0OwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6IEhGQy1QQ0kgY2FyZCBtYW51ZmFjdHVyZXI6ICVzIGNhcmQgbmFtZTogJXNcbiIsIGlkX2xpc3RbaV0udmVuZG9yX25hbWUsIGlkX2xpc3RbaV0uY2FyZF9uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhGQy1QQ0k6IE5vIFBDSSBjYXJkIGZvdW5kXG4iKTsKQEAgLTE3MzMsNyArMTczMiw3IEBACiAJCWNzLT5CQ19SZWFkX1JlZyA9IE5VTEw7CiAJCWNzLT5CQ19Xcml0ZV9SZWcgPSBOVUxMOwogCQljcy0+aXJxX2Z1bmMgPSAmaGZjcGNpX2ludGVycnVwdDsKLQkJY3MtPmlycV9mbGFncyB8PSBTQV9TSElSUTsKKwkJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAkJY3MtPmh3LmhmY3BjaS50aW1lci5mdW5jdGlvbiA9ICh2b2lkICopIGhmY3BjaV9UaW1lcjsKIAkJY3MtPmh3LmhmY3BjaS50aW1lci5kYXRhID0gKGxvbmcpIGNzOwogCQlpbml0X3RpbWVyKCZjcy0+aHcuaGZjcGNpLnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IDI2MmM0NDEuLmI1ZTU3MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKaW5kZXggMTFmZTUzNy4uNzU5MjBhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC02LDcgKzYsNiBAQAogICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9kZWJ1Zy5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2RlYnVnLmgKaW5kZXggYmE1MThhNy4uY2VhZmVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2RlYnVnLmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2RlYnVnLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgX19ISVNBWF9ERUJVR19IX18KICNkZWZpbmUgX19ISVNBWF9ERUJVR19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0hJU0FYX0RFQlVHCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKaW5kZXggZGJjY2EyOC4uMWQ3Y2YzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jCkBAIC03MjUsMTEgKzcyNSwxMSBAQAogCiAJc3dpdGNoIChhZGFwdGVyLT50eXBlKSB7CiAJY2FzZSBBVk1fRlJJVFpfUENJVjI6Ci0JCXJldHZhbCA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPmlycSwgZmNwY2kyX2lycSwgU0FfU0hJUlEsIAorCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGZjcGNpMl9pcnEsIElSUUZfU0hBUkVELAogCQkJCSAgICAgImZjcGNpcG5wIiwgYWRhcHRlcik7CiAJCWJyZWFrOwogCWNhc2UgQVZNX0ZSSVRaX1BDSToKLQkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBmY3BjaV9pcnEsIFNBX1NISVJRLAorCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pcnEsIGZjcGNpX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkJICAgICAiZmNwY2lwbnAiLCBhZGFwdGVyKTsKIAkJYnJlYWs7CiAJY2FzZSBBVk1fRlJJVFpfUE5QOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYwppbmRleCAyZTlhZmFlLi5kZjVmYzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheF9pZi5oIgogI2luY2x1ZGUgImhpc2F4LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKaW5kZXggYzk5MTdjZC4uMjgxZmEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzZG5sMy5oIgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBjb25zdCBjaGFyICpsM19yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMjIuMi4zICQiOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKaW5kZXggZTk2ODQ1Yy4uOTlmZWFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImlzZG5sMy5oIgogI2luY2x1ZGUgImwzZHNzMS5oIgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIGV4dGVybiBjaGFyICpIaVNheF9nZXRyZXYoY29uc3QgY2hhciAqcmV2aXNpb24pOwogc3RhdGljIGNvbnN0IGNoYXIgKmRzczFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjMyLjIuMyAkIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKaW5kZXggNjhhMjE1OS4uNzlhOTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2FjLmgiCkBAIC0zMzcsNyArMzM2LDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5pY2N5OiBObyBQQ0kgY2FyZCBmb3VuZFxuIik7CiAJCQlyZXR1cm4oMCk7CiAJCX0KLQkJY3MtPmlycV9mbGFncyB8PSBTQV9TSElSUTsKKwkJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAkJY3MtPmh3Lm5pY2N5LmlzYWMgPSBwY2lfaW9hZGRyICsgSVNBQ19QQ0lfREFUQTsKIAkJY3MtPmh3Lm5pY2N5LmlzYWNfYWxlID0gcGNpX2lvYWRkciArIElTQUNfUENJX0FERFI7CiAJCWNzLT5ody5uaWNjeS5oc2N4ID0gcGNpX2lvYWRkciArIEhTQ1hfUENJX0RBVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwppbmRleCBhN2QzY2QzLi5lNWI5MDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKQEAgLTUsNyArNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2FjLmgiCkBAIC0yNzIsNyArMjcxLDcgQEAKIAlzZXR1cF9pc2FjKGNzKTsKIAljcy0+Y2FyZG1zZyA9ICZORVRqZXRfU19jYXJkX21zZzsKIAljcy0+aXJxX2Z1bmMgPSAmbmV0amV0X3NfaW50ZXJydXB0OwotCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAlJU0FDVmVyc2lvbihjcywgIk5FVGpldC1TOiIpOwogCXJldHVybiAoMSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwppbmRleCAxYWU3Y2FjLi43MDAyYjA5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaWNjLmgiCkBAIC0yMzgsNyArMjM3LDcgQEAKIAljcy0+QkNfU2VuZF9EYXRhID0gJm5ldGpldF9maWxsX2RtYTsKIAljcy0+Y2FyZG1zZyA9ICZORVRqZXRfVV9jYXJkX21zZzsKIAljcy0+aXJxX2Z1bmMgPSAmbmV0amV0X3VfaW50ZXJydXB0OwotCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAlJQ0NWZXJzaW9uKGNzLCAiTkVUc3BpZGVyLVU6Iik7CiAJcmV0dXJuICgxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCA4YzA0NGE2Li44ZDhlOGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC0zOSw3ICszOSw2IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaXNhYy5oIgogI2luY2x1ZGUgImlwYWMuaCIKQEAgLTYzMyw3ICs2MzIsNyBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2VkbGJhdWVyOiBObyBQQ0kgY2FyZCBmb3VuZFxuIik7CiAJCQlyZXR1cm4oMCk7CiAJCX0KLQkJY3MtPmlycV9mbGFncyB8PSBTQV9TSElSUTsKKwkJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAkJY3MtPmh3LnNlZGwuYnVzID0gU0VETF9CVVNfUENJOwogCQlzdWJfdmVuZG9yX2lkID0gZGV2X3NlZGwtPnN1YnN5c3RlbV92ZW5kb3I7CiAJCXN1Yl9pZCA9IGRldl9zZWRsLT5zdWJzeXN0ZW1fZGV2aWNlOwpAQCAtODEwLDcgKzgwOSw3IEBACiAJCQkJY3MtPmh3LnNlZGwuaHNjeCA9IGNzLT5ody5zZWRsLmNmZ19yZWcgKyBTRURMX0hTQ1hfUENNQ0lBX0hTQ1g7CiAJCQkJY3MtPmh3LnNlZGwucmVzZXRfb24gPSBjcy0+aHcuc2VkbC5jZmdfcmVnICsgU0VETF9IU0NYX1BDTUNJQV9SRVNFVDsKIAkJCQljcy0+aHcuc2VkbC5yZXNldF9vZmYgPSBjcy0+aHcuc2VkbC5jZmdfcmVnICsgU0VETF9IU0NYX1BDTUNJQV9SRVNFVDsKLQkJCQljcy0+aXJxX2ZsYWdzIHw9IFNBX1NISVJROworCQkJCWNzLT5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCQl9IGVsc2UgewogCQkJCWNzLT5ody5zZWRsLmFkciA9IGNzLT5ody5zZWRsLmNmZ19yZWcgKyBTRURMX0hTQ1hfSVNBX0FEUjsKIAkJCQljcy0+aHcuc2VkbC5pc2FjID0gY3MtPmh3LnNlZGwuY2ZnX3JlZyArIFNFRExfSFNDWF9JU0FfSVNBQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwppbmRleCA5YmIxOGYzLi5mOWMxNGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICBsaW5rLT5wcml2ID0gbG9jYWw7CiAKICAgICAvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKyAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwogICAgIGxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKICAgICBsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaAppbmRleCA5ZmZhYWU3Li4wNDQxNmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9TVDU0ODFfSF8KICNkZWZpbmUgX1NUNTQ4MV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8vIFVTQiBJRHMsIHRoZSBQcm9kdWN0IElkIGlzIGluIHRoZSByYW5nZSAweDQ4MTAtMHg0ODFGCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKaW5kZXggOTljYjBmMy4uMjcxNmFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqIGNsZWFuIHVwIGRlYnVnCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwppbmRleCBhM2VhZjRkLi41Y2I3MTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCkBAIC0zNjksNiArMzY5LDcgQEAKIAkJCSAgICAgICBjcy0+aHcudGVsZXMzLmhzY3hbMV0gKyA5Nik7CiAJCQlyZXR1cm4gKDApOwogCQl9CisJCWNzLT5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7IC8qIGNhcmRidXMgY2FuIHNoYXJlICovCiAJfSBlbHNlIHsKIAkJaWYgKGNzLT5ody50ZWxlczMuY2ZnX3JlZykgewogCQkJaWYgKGNzLT50eXAgPT0gSVNETl9DVFlQRV9DT01QQVFfSVNBKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCmluZGV4IGUyYmI0ZmQuLjkzODJjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzYWMuaCIKICNpbmNsdWRlICJoc2N4LmgiCkBAIC0zMTEsOCArMzEwLDkgQEAKIAkJfQogCQljcy0+aHcudGVsZXMwLm1lbWJhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXZfdGVsLCAwKSwKIAkJCVBBR0VfU0laRSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIkZvdW5kOiBab3JhbiwgYmFzZS1hZGRyZXNzOiAweCVseCwgaXJxOiAweCV4XG4iLAotCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldl90ZWwsIDApLCBkZXZfdGVsLT5pcnEpOworCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZDogWm9yYW4sIGJhc2UtYWRkcmVzczogMHglbGx4LCBpcnE6IDB4JXhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXZfdGVsLCAwKSwKKwkJCWRldl90ZWwtPmlycSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGVsZXNQQ0k6IE5vIFBDSSBjYXJkIGZvdW5kXG4iKTsKIAkJcmV0dXJuKDApOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJY3MtPkJDX1NlbmRfRGF0YSA9ICZoc2N4X2ZpbGxfZmlmbzsKIAljcy0+Y2FyZG1zZyA9ICZUZWxlc1BDSV9jYXJkX21zZzsKIAljcy0+aXJxX2Z1bmMgPSAmdGVsZXNwY2lfaW50ZXJydXB0OwotCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAlJU0FDVmVyc2lvbihjcywgIlRlbGVzUENJOiIpOwogCWlmIChIc2N4VmVyc2lvbihjcywgIlRlbGVzUENJOiIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3c2NjkyLmMKaW5kZXggMDM1MmVlNS4uNmM2ODQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3c2NjkyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3c2NjkyLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgInc2NjkyLmgiCkBAIC0xMDgxLDcgKzEwODAsNyBAQAogCWNzLT5CQ19TZW5kX0RhdGEgPSAmVzY2OTJCX2ZpbGxfZmlmbzsKIAljcy0+Y2FyZG1zZyA9ICZ3NjY5Ml9jYXJkX21zZzsKIAljcy0+aXJxX2Z1bmMgPSAmVzY2OTJfaW50ZXJydXB0OwotCWNzLT5pcnFfZmxhZ3MgfD0gU0FfU0hJUlE7CisJY3MtPmlycV9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAlXNjY5MlZlcnNpb24oY3MsICJXNjY5MjoiKTsKIAlwcmludGsoS0VSTl9JTkZPICJXNjY5MiBJU1RBPTB4JVhcbiIsIFJlYWRXNjY5MihjcywgV19JU1RBKSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVzY2OTIgSU1BU0s9MHglWFxuIiwgUmVhZFc2NjkyKGNzLCBXX0lNQVNLKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vYm9hcmRlcmdvLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vYm9hcmRlcmdvLmMKaW5kZXggNDhkMTM0Yi4uNzNhZmViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2JvYXJkZXJnby5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9ib2FyZGVyZ28uYwpAQCAtMTQsNyArMTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQzNiw3ICs0MzUsNyBAQAogCX0KIAogCWVyZ29fc3RvcGNhcmQoY2FyZCk7CS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCWlmIChyZXF1ZXN0X2lycShjYXJkLT5pcnEsIGVyZ29faW50ZXJydXB0LCBTQV9TSElSUSwgIkhZU0ROIiwgY2FyZCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBlcmdvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJIWVNETiIsIGNhcmQpKSB7CiAJCWVyZ29fcmVsZWFzZWhhcmR3YXJlKGNhcmQpOyAvKiByZXR1cm4gdGhlIGFjcXVpcmVkIGhhcmR3YXJlICovCiAJCXJldHVybiAoLTEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmggYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCmluZGV4IDNhOWIyOWIuLjQ2MWU4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBIWVNETl9ERUZTX0gKICNkZWZpbmUgSFlTRE5fREVGU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9oeXNkbl9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKaW5kZXggYjc1YWM1YS4uYjcwMmVkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMKaW5kZXggMTMzMDMyOS4uMWMwZDU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKaW5kZXggYjI2ZTUwOS4uOWY2YzYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KQEAgLTM0MCw2ICszMzksMTYgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXNkbl9jb21tYW5kIGNvbW1hbmQoJXgpIGRyaXZlciAtMVxuIiwgY21kLT5jb21tYW5kKTsKIAkJcmV0dXJuKDEpOwogCX0KKwlpZiAoIWRldi0+ZHJ2W2NtZC0+ZHJpdmVyXSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpc2RuX2NvbW1hbmQgY29tbWFuZCgleCkgZGV2LT5kcnZbJWRdIE5VTExcbiIsCisJCQljbWQtPmNvbW1hbmQsIGNtZC0+ZHJpdmVyKTsKKwkJcmV0dXJuKDEpOworCX0KKwlpZiAoIWRldi0+ZHJ2W2NtZC0+ZHJpdmVyXS0+aW50ZXJmYWNlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlzZG5fY29tbWFuZCBjb21tYW5kKCV4KSBkZXYtPmRydlslZF0tPmludGVyZmFjZSBOVUxMXG4iLAorCQkJY21kLT5jb21tYW5kLCBjbWQtPmRyaXZlcik7CisJCXJldHVybigxKTsKKwl9CiAJaWYgKGNtZC0+Y29tbWFuZCA9PSBJU0ROX0NNRF9TRVRMMikgewogCQlpbnQgaWR4ID0gaXNkbl9kYzJtaW5vcihjbWQtPmRyaXZlciwgY21kLT5hcmcgJiAyNTUpOwogCQl1bnNpZ25lZCBsb25nIGwycHJvdCA9IChjbWQtPmFyZyA+PiA4KSAmIDI1NTsKQEAgLTE5MDMsNiArMTkxMiwxMSBAQAogewogCWludCBpOwogCisJaWYgKChkaSA8IDApIHx8IChjaCA8IDApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYWxsZWQgd2l0aCBpbnZhbGlkIGRydiglZCkgb3IgY2hhbm5lbCglZClcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGRpLCBjaCk7CisJCXJldHVybjsKKwl9CiAJZm9yIChpID0gMDsgaSA8IElTRE5fTUFYX0NIQU5ORUxTOyBpKyspCiAJCWlmICgoKCF1c2FnZSkgfHwgKChkZXYtPnVzYWdlW2ldICYgSVNETl9VU0FHRV9NQVNLKSA9PSB1c2FnZSkpICYmCiAJCSAgICAoZGV2LT5kcnZtYXBbaV0gPT0gZGkpICYmCkBAIC0xOTE4LDcgKzE5MzIsOCBAQAogCQkJZGV2LT52MTEwW2ldID0gTlVMTDsKIC8vIDIwLjEwLjk5IEpJTSwgdHJ5IHRvIHJlaW5pdGlhbGl6ZSB2MTEwICEKIAkJCWlzZG5faW5mb191cGRhdGUoKTsKLQkJCXNrYl9xdWV1ZV9wdXJnZSgmZGV2LT5kcnZbZGldLT5ycHF1ZXVlW2NoXSk7CisJCQlpZiAoZGV2LT5kcnZbZGldKQorCQkJCXNrYl9xdWV1ZV9wdXJnZSgmZGV2LT5kcnZbZGldLT5ycHF1ZXVlW2NoXSk7CiAJCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCmluZGV4IDk2YzExNWUuLjQzZGE4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqICAgICAgICAgICBodHRwOi8vaTRsLnphYmJhZG96Lm5ldC9pNGwvY2lzY28taGRsYy50eHQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggOTE4NzQyMi4uMjllNzY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHBwLWNvbXAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwppbmRleCA0MzMzODlkLi45YWI2NmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KICN1bmRlZiBJU0ROX1RUWV9TVEFUX0RFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlICJpc2RuX2NvbW1vbi5oIgpAQCAtMTg5MCwxNCArMTg4OSwxMyBAQAogCWlmICghbS0+dHR5X21vZGVtKQogCQlyZXR1cm4gLUVOT01FTTsKIAltLT50dHlfbW9kZW0tPm5hbWUgPSAidHR5SSI7Ci0JbS0+dHR5X21vZGVtLT5kZXZmc19uYW1lID0gImlzZG4vdHR5SSI7CiAJbS0+dHR5X21vZGVtLT5tYWpvciA9IElTRE5fVFRZX01BSk9SOwogCW0tPnR0eV9tb2RlbS0+bWlub3Jfc3RhcnQgPSAwOwogCW0tPnR0eV9tb2RlbS0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CiAJbS0+dHR5X21vZGVtLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwogCW0tPnR0eV9tb2RlbS0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCW0tPnR0eV9tb2RlbS0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0JbS0+dHR5X21vZGVtLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCW0tPnR0eV9tb2RlbS0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAltLT50dHlfbW9kZW0tPmRyaXZlcl9uYW1lID0gImlzZG5fdHR5IjsKIAl0dHlfc2V0X29wZXJhdGlvbnMobS0+dHR5X21vZGVtLCAmbW9kZW1fb3BzKTsKIAlyZXR2YWwgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKG0tPnR0eV9tb2RlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmggYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmgKaW5kZXggOWYwZmE5NS4uNjkyYzc0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5oCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuaApAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgRExFIDB4MTAKICNkZWZpbmUgRVRYIDB4MDMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl94MjVpZmFjZS5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3gyNWlmYWNlLmMKaW5kZXggNzQzYWM0MC4uOGIzZWZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3gyNWlmYWNlLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3gyNWlmYWNlLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogICovCiBzdGF0aWMgaW50IGlzZG5feDI1aWZhY2VfY29ubmVjdF9pbmQoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKiBza2IgPSBkZXZfYWxsb2Nfc2tiKDEpOworCXN0cnVjdCBza19idWZmICogc2tiOwogCWVudW0gd2FuX3N0YXRlcyAqc3RhdGVfcCAKIAkgID0gJiggKCAoaXgyNV9wZGF0YV90KikgKGNwcm90LT5wcm90b19kYXRhKSApIC0+IHN0YXRlKTsKIAlJWDI1REVCVUcoICJpc2RuX3gyNWlmYWNlX2Nvbm5lY3RfaW5kICVzIFxuIgpAQCAtMjIwLDYgKzIyMCw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAJKnN0YXRlX3AgPSBXQU5fQ09OTkVDVEVEOworCisJc2tiID0gZGV2X2FsbG9jX3NrYigxKTsKIAlpZiggc2tiICl7CiAJCSooIHNrYl9wdXQoc2tiLCAxKSApID0gMHgwMTsKIAkJc2tiLT5wcm90b2NvbCA9IHgyNV90eXBlX3RyYW5zKHNrYiwgY3Byb3QtPm5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYwppbmRleCBhNjdkMzFhLi5mYWJiZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYworKysgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCmluZGV4IDYyYjdhY2YuLmE2MjdlNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL3NjL2luaXQuYwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJCSAqLwogCQlzY19hZGFwdGVyW2NpbnN0XS0+aW50ZXJydXB0ID0gaXJxW2JdOwogCQlpZiAocmVxdWVzdF9pcnEoc2NfYWRhcHRlcltjaW5zdF0tPmludGVycnVwdCwgaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkJU0FfSU5URVJSVVBULCBpbnRlcmZhY2UtPmlkLCBOVUxMKSkKKwkJCQlJUlFGX0RJU0FCTEVELCBpbnRlcmZhY2UtPmlkLCBOVUxMKSkKIAkJewogCQkJa2ZyZWUoc2NfYWRhcHRlcltjaW5zdF0tPmNoYW5uZWwpOwogCQkJaW5kaWNhdGVfc3RhdHVzKGNpbnN0LCBJU0ROX1NUQVRfVU5MT0FELCAwLCBOVUxMKTsJLyogRml4IG1lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKaW5kZXggYzc1ZDBlZi4uZDQyNGI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwpAQCAtOSw3ICs5LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKaW5kZXggMWIxY2U2NS4uNDdmMGZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29yZ2kuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvcmdpLmMKaW5kZXggYmI3ZDg0ZC4uY2YxZGNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29yZ2kuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb3JnaS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1peHA0eHgtZ3Bpby5jIGIvZHJpdmVycy9sZWRzL2xlZHMtaXhwNHh4LWdwaW8uYwppbmRleCAzMGNlZDE1Li43ZGNmMGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1peHA0eHgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWl4cDR4eC1ncGlvLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWxvY29tby5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbG9jb21vLmMKaW5kZXggODQxOWUyOS4uM2I4Nzk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtbG9jb21vLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtbG9jb21vLmMKQEAgLTgsNyArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCmluZGV4IDY1MGNmNzIuLmZiMWVkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKQEAgLTExLDcgKzExLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXNwaXR6LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1zcGl0ei5jCmluZGV4IDY1YmJlZjQuLjEyNmQwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXNwaXR6LmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtc3BpdHouYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdG9zYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdG9zYS5jCmluZGV4IGM5ZThjYzEuLmZiMjQxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXRvc2EuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy10b3NhLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy10aW1lci5jCmluZGV4IGZiZjE0MWUuLjE3OWMyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZyBiL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcKaW5kZXggMzdjZDZlZS4uNTRmM2Y2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZworKysgYi9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCkBAIC03OCw2ICs3OCwxOCBAQAogCSAgdGhpcyBkZXZpY2U7IHlvdSBzaG91bGQgZG8gc28gaWYgeW91ciBtYWNoaW5lIGlzIG9uZSBvZiB0aG9zZQogCSAgbWVudGlvbmVkIGFib3ZlLgogCitjb25maWcgQURCX1BNVV9MRUQKKwlib29sICJTdXBwb3J0IGZvciB0aGUgUG93ZXIvaUJvb2sgZnJvbnQgTEVEIgorCWRlcGVuZHMgb24gQURCX1BNVQorCXNlbGVjdCBORVdfTEVEUworCXNlbGVjdCBMRURTX0NMQVNTCisJaGVscAorCSAgU3VwcG9ydCB0aGUgZnJvbnQgTEVEIG9uIFBvd2VyL2lCb29rcyBhcyBhIGdlbmVyaWMgTEVEIHRoYXQgY2FuCisJICBiZSB0cmlnZ2VyZWQgYnkgYW55IG9mIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMuIFRvIGdldCB0aGUKKwkgIGJlaGF2aW91ciBvZiB0aGUgb2xkIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0JMSU5LLCBzZWxlY3QgdGhpcworCSAgYW5kIHRoZSBpZGUtZGlzayBMRUQgdHJpZ2dlciBhbmQgY29uZmlndXJlIGFwcHJvcHJpYXRlbHkgdGhyb3VnaAorCSAgc3lzZnMuCisKIGNvbmZpZyBQTUFDX1NNVQogCWJvb2wgIlN1cHBvcnQgZm9yIFNNVSAgYmFzZWQgUG93ZXJNYWNzIgogCWRlcGVuZHMgb24gUFBDX1BNQUM2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvTWFrZWZpbGUgYi9kcml2ZXJzL21hY2ludG9zaC9NYWtlZmlsZQppbmRleCA0NWEyNjhmLi5iNTNkNDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21hY2ludG9zaC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQAogb2JqLSQoQ09ORklHX0FOU0xDRCkJCSs9IGFucy1sY2QubwogCiBvYmotJChDT05GSUdfQURCX1BNVSkJCSs9IHZpYS1wbXUubyB2aWEtcG11LWV2ZW50Lm8KK29iai0kKENPTkZJR19BREJfUE1VX0xFRCkJKz0gdmlhLXBtdS1sZWQubwogb2JqLSQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKQkrPSB2aWEtcG11LWJhY2tsaWdodC5vCiBvYmotJChDT05GSUdfQURCX0NVREEpCQkrPSB2aWEtY3VkYS5vCiBvYmotJChDT05GSUdfUE1BQ19BUE1fRU1VKQkrPSBhcG1fZW11Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKaW5kZXggMjU5ZmQ4OS4uMzYwZjkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIC0gbW92ZSBidXMgcHJvYmUgdG8gYSBrZXJuZWwgdGhyZWFkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM2LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpAQCAtOTA0LDggKzkwMiw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlkZXZmc19ta19jZGV2KE1LREVWKEFEQl9NQUpPUiwgMCksIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiwgImFkYiIpOwotCiAJYWRiX2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImFkYiIpOwogCWlmIChJU19FUlIoYWRiX2Rldl9jbGFzcykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKaW5kZXggY2JmYmJlMi4uNTQ1YmUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKQEAgLTM0LDcgKzM0LDYgQEAKICAqIE1vdmUgdG8gc3lmcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYXBtX2VtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYXBtX2VtdS5jCmluZGV4IGU1YTJiYmYuLjEyOTM4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FwbV9lbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hcG1fZW11LmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCmluZGV4IGE2NjYzNjEuLjZiMTI5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKQEAgLTgsNyArOCw2IEBACiAgKiBUaGlzIGZpbGUgd2lsbCBzb29uIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgYW4gdWlucHV0IHVzZXJzcGFjZSB0b29sLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW8tYWRiLmMgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpby1hZGIuYwppbmRleCAzMTRmYzA4Li40YjA4ODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpby1hZGIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpby1hZGIuYwpAQCAtOTAsMjIgKzkwLDEyIEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICphZGJzOwogCXN0cnVjdCByZXNvdXJjZSByOworCXVuc2lnbmVkIGludCBpcnE7CiAKIAlhZGJzID0gZmluZF9jb21wYXRpYmxlX2RldmljZXMoImFkYiIsICJjaHJwLGFkYjAiKTsKIAlpZiAoYWRicyA9PSAwKQogCQlyZXR1cm4gLUVOWElPOwogCi0jaWYgMAotCXsgaW50IGkgPSAwOwotCi0JcHJpbnRrKCJtYWNpb19hZGJfaW5pdDogbm9kZSA9ICVwLCBhZGRycyA9IiwgYWRicy0+bm9kZSk7Ci0Jd2hpbGUoIW9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoYWRicywgaSwgJnIpKQotCQlwcmludGsoIiAleCgleCkiLCByLnN0YXJ0LCByLmVuZCAtIHIuc3RhcnQpOwotCXByaW50aygiLCBpbnRycyA9Iik7Ci0JZm9yIChpID0gMDsgaSA8IGFkYnMtPm5faW50cnM7ICsraSkKLQkJcHJpbnRrKCIgJXgiLCBhZGJzLT5pbnRyc1tpXS5saW5lKTsKLQlwcmludGsoIlxuIik7IH0KLSNlbmRpZgogCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGFkYnMsIDAsICZyKSkKIAkJcmV0dXJuIC1FTlhJTzsKIAlhZGIgPSBpb3JlbWFwKHIuc3RhcnQsIHNpemVvZihzdHJ1Y3QgYWRiX3JlZ3MpKTsKQEAgLTExNywxMCArMTA3LDkgQEAKIAlvdXRfOCgmYWRiLT5hY3RpdmVfbG8uciwgMHhmZik7CiAJb3V0XzgoJmFkYi0+YXV0b3BvbGwuciwgQVBFKTsKIAotCWlmIChyZXF1ZXN0X2lycShhZGJzLT5pbnRyc1swXS5saW5lLCBtYWNpb19hZGJfaW50ZXJydXB0LAotCQkJMCwgIkFEQiIsICh2b2lkICopMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJBREI6IGNhbid0IGdldCBpcnEgJWRcbiIsCi0JCSAgICAgICBhZGJzLT5pbnRyc1swXS5saW5lKTsKKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChhZGJzLCAwKTsKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBtYWNpb19hZGJfaW50ZXJydXB0LCAwLCAiQURCIiwgKHZvaWQgKikwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkFEQjogY2FuJ3QgZ2V0IGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCW91dF84KCZhZGItPmludHJfZW5iLnIsIERGQiB8IFRBRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKaW5kZXggNDMxYmQzNy4uODBjMGM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYwpAQCAtMTcsNyArMTcsNiBAQAogICogICAgc3ViLWRldmljZXMuCiAgKi8KICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTI4MSw3NSArMjgwLDEyOCBAQAogc3RhdGljIGludCBtYWNpb19yZXNvdXJjZV9xdWlya3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJIGludCBpbmRleCkKIHsKLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCS8qIEdyYW5kIENlbnRyYWwgaGFzIHRvbyBsYXJnZSByZXNvdXJjZSAwIG9uIHNvbWUgbWFjaGluZXMgKi8KLQkJaWYgKGluZGV4ID09IDAgJiYgIXN0cmNtcChucC0+bmFtZSwgImdjIikpCi0JCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyAweDFmZmZmOworCS8qIE9ubHkgcXVpcmtzIGZvciBtZW1vcnkgcmVzb3VyY2VzIGZvciBub3cgKi8KKwlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgPT0gMCkKKwkJcmV0dXJuIDA7CiAKLQkJLyogQWlycG9ydCBoYXMgYm9ndXMgcmVzb3VyY2UgMiAqLwotCQlpZiAoaW5kZXggPj0gMiAmJiAhc3RyY21wKG5wLT5uYW1lLCAicmFkaW8iKSkKLQkJCXJldHVybiAxOworCS8qIEdyYW5kIENlbnRyYWwgaGFzIHRvbyBsYXJnZSByZXNvdXJjZSAwIG9uIHNvbWUgbWFjaGluZXMgKi8KKwlpZiAoaW5kZXggPT0gMCAmJiAhc3RyY21wKG5wLT5uYW1lLCAiZ2MiKSkKKwkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgMHgxZmZmZjsKKworCS8qIEFpcnBvcnQgaGFzIGJvZ3VzIHJlc291cmNlIDIgKi8KKwlpZiAoaW5kZXggPj0gMiAmJiAhc3RyY21wKG5wLT5uYW1lLCAicmFkaW8iKSkKKwkJcmV0dXJuIDE7CiAKICNpZm5kZWYgQ09ORklHX1BQQzY0Ci0JCS8qIERCRE1BcyBtYXkgaGF2ZSBib2d1cyBzaXplcyAqLwotCQlpZiAoKHJlcy0+c3RhcnQgJiAweDAwMDFmMDAwKSA9PSAweDAwMDA4MDAwKQotCQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgMHhmZjsKKwkvKiBEQkRNQXMgbWF5IGhhdmUgYm9ndXMgc2l6ZXMgKi8KKwlpZiAoKHJlcy0+c3RhcnQgJiAweDAwMDFmMDAwKSA9PSAweDAwMDA4MDAwKQorCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyAweGZmOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCi0JCS8qIEVTQ0MgcGFyZW50IGVhdHMgY2hpbGQgcmVzb3VyY2VzLiBXZSBjb3VsZCBoYXZlIGFkZGVkIGEKLQkJICogbGV2ZWwgb2YgaGllcmFyY2h5LCBidXQgSSBkb24ndCByZWFsbHkgZmVlbCB0aGUgbmVlZAotCQkgKiBmb3IgaXQKLQkJICovCi0JCWlmICghc3RyY21wKG5wLT5uYW1lLCAiZXNjYyIpKQotCQkJcmV0dXJuIDE7CisJLyogRVNDQyBwYXJlbnQgZWF0cyBjaGlsZCByZXNvdXJjZXMuIFdlIGNvdWxkIGhhdmUgYWRkZWQgYQorCSAqIGxldmVsIG9mIGhpZXJhcmNoeSwgYnV0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgdGhlIG5lZWQKKwkgKiBmb3IgaXQKKwkgKi8KKwlpZiAoIXN0cmNtcChucC0+bmFtZSwgImVzY2MiKSkKKwkJcmV0dXJuIDE7CiAKLQkJLyogRVNDQyBoYXMgYm9ndXMgcmVzb3VyY2VzID49IDMgKi8KLQkJaWYgKGluZGV4ID49IDMgJiYgIShzdHJjbXAobnAtPm5hbWUsICJjaC1hIikgJiYKLQkJCQkgICAgc3RyY21wKG5wLT5uYW1lLCAiY2gtYiIpKSkKLQkJCXJldHVybiAxOworCS8qIEVTQ0MgaGFzIGJvZ3VzIHJlc291cmNlcyA+PSAzICovCisJaWYgKGluZGV4ID49IDMgJiYgIShzdHJjbXAobnAtPm5hbWUsICJjaC1hIikgJiYKKwkJCSAgICBzdHJjbXAobnAtPm5hbWUsICJjaC1iIikpKQorCQlyZXR1cm4gMTsKIAotCQkvKiBNZWRpYSBiYXkgaGFzIHRvbyBtYW55IHJlc291cmNlcywga2VlcCBvbmx5IGZpcnN0IG9uZSAqLwotCQlpZiAoaW5kZXggPiAwICYmICFzdHJjbXAobnAtPm5hbWUsICJtZWRpYS1iYXkiKSkKLQkJCXJldHVybiAxOworCS8qIE1lZGlhIGJheSBoYXMgdG9vIG1hbnkgcmVzb3VyY2VzLCBrZWVwIG9ubHkgZmlyc3Qgb25lICovCisJaWYgKGluZGV4ID4gMCAmJiAhc3RyY21wKG5wLT5uYW1lLCAibWVkaWEtYmF5IikpCisJCXJldHVybiAxOwogCi0JCS8qIFNvbWUgb2xkZXIgSURFIHJlc291cmNlcyBoYXZlIGJvZ3VzIHNpemVzICovCi0JCWlmICghKHN0cmNtcChucC0+bmFtZSwgIklERSIpICYmIHN0cmNtcChucC0+bmFtZSwgIkFUQSIpICYmCi0JCSAgICAgIHN0cmNtcChucC0+dHlwZSwgImlkZSIpICYmIHN0cmNtcChucC0+dHlwZSwgImF0YSIpKSkgewotCQkJaWYgKGluZGV4ID09IDAgJiYgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgPiAweGZmZikKLQkJCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyAweGZmZjsKLQkJCWlmIChpbmRleCA9PSAxICYmIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpID4gMHhmZikKLQkJCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyAweGZmOwotCQl9CisJLyogU29tZSBvbGRlciBJREUgcmVzb3VyY2VzIGhhdmUgYm9ndXMgc2l6ZXMgKi8KKwlpZiAoIShzdHJjbXAobnAtPm5hbWUsICJJREUiKSAmJiBzdHJjbXAobnAtPm5hbWUsICJBVEEiKSAmJgorCSAgICAgIHN0cmNtcChucC0+dHlwZSwgImlkZSIpICYmIHN0cmNtcChucC0+dHlwZSwgImF0YSIpKSkgeworCQlpZiAoaW5kZXggPT0gMCAmJiAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSA+IDB4ZmZmKQorCQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgMHhmZmY7CisJCWlmIChpbmRleCA9PSAxICYmIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpID4gMHhmZikKKwkJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIDB4ZmY7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtYWNpb19jcmVhdGVfZml4dXBfaXJxKHN0cnVjdCBtYWNpb19kZXYgKmRldiwgaW50IGluZGV4LAorCQkJCSAgIHVuc2lnbmVkIGludCBsaW5lKQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgbGluZSwgMCk7CisJaWYgKGlycSAhPSBOT19JUlEpIHsKKwkJZGV2LT5pbnRlcnJ1cHRbaW5kZXhdLnN0YXJ0ID0gaXJxOworCQlkZXYtPmludGVycnVwdFtpbmRleF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKKwkJZGV2LT5pbnRlcnJ1cHRbaW5kZXhdLm5hbWUgPSBkZXYtPm9mZGV2LmRldi5idXNfaWQ7CisJfQorCWlmIChkZXYtPm5faW50ZXJydXB0cyA8PSBpbmRleCkKKwkJZGV2LT5uX2ludGVycnVwdHMgPSBpbmRleCArIDE7Cit9CisKK3N0YXRpYyB2b2lkIG1hY2lvX2FkZF9taXNzaW5nX3Jlc291cmNlcyhzdHJ1Y3QgbWFjaW9fZGV2ICpkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2ZkZXYubm9kZTsKKwl1bnNpZ25lZCBpbnQgaXJxX2Jhc2U7CisKKwkvKiBHYXR3aWNrIGhhcyBzb21lIG1pc3NpbmcgaW50ZXJydXB0cyBvbiBjaGlsZCBub2RlcyAqLworCWlmIChkZXYtPmJ1cy0+Y2hpcC0+dHlwZSAhPSBtYWNpb19nYXR3aWNrKQorCQlyZXR1cm47CisKKwkvKiBpcnFfYmFzZSBpcyBhbHdheXMgNjQgb24gZ2F0d2ljay4gSSBoYXZlIG5vIGNsZWFuZXIgd2F5IHRvIGdldAorCSAqIHRoYXQgdmFsdWUgZnJvbSBoZXJlIGF0IHRoaXMgcG9pbnQKKwkgKi8KKwlpcnFfYmFzZSA9IDY0OworCisJLyogRml4IFNDQyAqLworCWlmIChzdHJjbXAobnAtPm5hbWUsICJjaC1hIikgPT0gMCkgeworCQltYWNpb19jcmVhdGVfZml4dXBfaXJxKGRldiwgMCwgMTUgKyBpcnFfYmFzZSk7CisJCW1hY2lvX2NyZWF0ZV9maXh1cF9pcnEoZGV2LCAxLCAgNCArIGlycV9iYXNlKTsKKwkJbWFjaW9fY3JlYXRlX2ZpeHVwX2lycShkZXYsIDIsICA1ICsgaXJxX2Jhc2UpOworCQlwcmludGsoS0VSTl9JTkZPICJtYWNpbzogZml4ZWQgU0NDIGlycXMgb24gZ2F0d2lja1xuIik7CisJfQorCisJLyogRml4IG1lZGlhLWJheSAqLworCWlmIChzdHJjbXAobnAtPm5hbWUsICJtZWRpYS1iYXkiKSA9PSAwKSB7CisJCW1hY2lvX2NyZWF0ZV9maXh1cF9pcnEoZGV2LCAwLCAyOSArIGlycV9iYXNlKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWFjaW86IGZpeGVkIG1lZGlhLWJheSBpcnEgb24gZ2F0d2lja1xuIik7CisJfQorCisJLyogRml4IGxlZnQgbWVkaWEgYmF5IGNoaWxkcyAqLworCWlmIChkZXYtPm1lZGlhX2JheSAhPSBOVUxMICYmIHN0cmNtcChucC0+bmFtZSwgImZsb3BweSIpID09IDApIHsKKwkJbWFjaW9fY3JlYXRlX2ZpeHVwX2lycShkZXYsIDAsIDE5ICsgaXJxX2Jhc2UpOworCQltYWNpb19jcmVhdGVfZml4dXBfaXJxKGRldiwgMSwgIDEgKyBpcnFfYmFzZSk7CisJCXByaW50ayhLRVJOX0lORk8gIm1hY2lvOiBmaXhlZCBsZWZ0IGZsb3BweSBpcnFzXG4iKTsKKwl9CisJaWYgKGRldi0+bWVkaWFfYmF5ICE9IE5VTEwgJiYgc3RyY2FzZWNtcChucC0+bmFtZSwgImF0YTQiKSA9PSAwKSB7CisJCW1hY2lvX2NyZWF0ZV9maXh1cF9pcnEoZGV2LCAwLCAxNCArIGlycV9iYXNlKTsKKwkJbWFjaW9fY3JlYXRlX2ZpeHVwX2lycShkZXYsIDAsICAzICsgaXJxX2Jhc2UpOworCQlwcmludGsoS0VSTl9JTkZPICJtYWNpbzogZml4ZWQgbGVmdCBpZGUgaXJxc1xuIik7CisJfQorfQogCiBzdGF0aWMgdm9pZCBtYWNpb19zZXR1cF9pbnRlcnJ1cHRzKHN0cnVjdCBtYWNpb19kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZmRldi5ub2RlOwotCWludCBpLGo7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgaSA9IDAsIGogPSAwOwogCi0JLyogRm9yIG5vdywgd2UgdXNlIHByZS1wYXJzZWQgZW50cmllcyBpbiB0aGUgZGV2aWNlLXRyZWUgZm9yCi0JICogaW50ZXJydXB0IHJvdXRpbmcgYW5kIGFkZHJlc3NlcywgYnV0IHdlIHNob3VsZCBjaGFuZ2UgdGhhdAotCSAqIHRvIGR5bmFtaWNhbGx5IHBhcnNlZCBlbnRyaWVzIGFuZCBzbyBnZXQgcmlkIG9mIG1vc3Qgb2YgdGhlCi0JICogY2x1dHRlciBpbiBzdHJ1Y3QgZGV2aWNlX25vZGUKLQkgKi8KLQlmb3IgKGkgPSBqID0gMDsgaSA8IG5wLT5uX2ludHJzOyBpKyspIHsKKwlmb3IgKDs7KSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+aW50ZXJydXB0W2pdOwogCiAJCWlmIChqID49IE1BQ0lPX0RFVl9DT1VOVF9JUlFTKQogCQkJYnJlYWs7Ci0JCXJlcy0+c3RhcnQgPSBucC0+aW50cnNbaV0ubGluZTsKLQkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JCWlmIChucC0+aW50cnNbal0uc2Vuc2UpCi0JCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMOwotCQllbHNlCi0JCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFOworCQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgaSsrKTsKKwkJaWYgKGlycSA9PSBOT19JUlEpCisJCQlicmVhazsKKwkJcmVzLT5zdGFydCA9IGlycTsKKwkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwogCQlyZXMtPm5hbWUgPSBkZXYtPm9mZGV2LmRldi5idXNfaWQ7Ci0JCWlmIChtYWNpb19yZXNvdXJjZV9xdWlya3MobnAsIHJlcywgaSkpCisJCWlmIChtYWNpb19yZXNvdXJjZV9xdWlya3MobnAsIHJlcywgaSAtIDEpKSB7CiAJCQltZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7Ci0JCWVsc2UKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UKIAkJCWorKzsKIAl9CiAJZGV2LT5uX2ludGVycnVwdHMgPSBqOwpAQCAtNDI4LDEwICs0ODAsMTAgQEAKIAogCS8qIE1hY0lPIGl0c2VsZiBoYXMgYSBkaWZmZXJlbnQgcmVnLCB3ZSB1c2UgaXQncyBQQ0kgYmFzZSAqLwogCWlmIChucCA9PSBjaGlwLT5vZl9ub2RlKSB7Ci0JCXNwcmludGYoZGV2LT5vZmRldi5kZXYuYnVzX2lkLCAiJTFkLiUwOGx4OiUuKnMiLAorCQlzcHJpbnRmKGRldi0+b2ZkZXYuZGV2LmJ1c19pZCwgIiUxZC4lMDh4OiUuKnMiLAogCQkJY2hpcC0+bGJ1cy5pbmRleCwKICNpZmRlZiBDT05GSUdfUENJCi0JCQlwY2lfcmVzb3VyY2Vfc3RhcnQoY2hpcC0+bGJ1cy5wZGV2LCAwKSwKKwkJCSh1bnNpZ25lZCBpbnQpcGNpX3Jlc291cmNlX3N0YXJ0KGNoaXAtPmxidXMucGRldiwgMCksCiAjZWxzZQogCQkJMCwgLyogTnVCdXMgbWF5IHdhbnQgdG8gZG8gc29tZXRoaW5nIGJldHRlciBoZXJlICovCiAjZW5kaWYKQEAgLTQ0Niw2ICs0OTgsNyBAQAogCS8qIFNldHVwIGludGVycnVwdHMgJiByZXNvdXJjZXMgKi8KIAltYWNpb19zZXR1cF9pbnRlcnJ1cHRzKGRldik7CiAJbWFjaW9fc2V0dXBfcmVzb3VyY2VzKGRldiwgcGFyZW50X3Jlcyk7CisJbWFjaW9fYWRkX21pc3NpbmdfcmVzb3VyY2VzKGRldik7CiAKIAkvKiBSZWdpc3RlciB3aXRoIGNvcmUgKi8KIAlpZiAob2ZfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPm9mZGV2KSAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYwppbmRleCA3ZjdkNGVhLi5jYWUyNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX3N5c2ZzLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMKaW5kZXggNTNjMWM3OS4uMGFjZjJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3NtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKaW5kZXggZjQ1MTZjYS4uZjEzOWE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqICAgIHRoZSB1c2VybGFuZCBpbnRlcmZhY2UKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTQ5OCw4ICs0OTcsNyBAQAogCXNtdS0+ZG9vcmJlbGwgPSAqZGF0YTsKIAlpZiAoc211LT5kb29yYmVsbCA8IDB4NTApCiAJCXNtdS0+ZG9vcmJlbGwgKz0gMHg1MDsKLQlpZiAobnAtPm5faW50cnMgPiAwKQotCQlzbXUtPmRiX2lycSA9IG5wLT5pbnRyc1swXS5saW5lOworCXNtdS0+ZGJfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCiAJb2Zfbm9kZV9wdXQobnApOwogCkBAIC01MTYsOCArNTE0LDcgQEAKIAkJc211LT5tc2cgPSAqZGF0YTsKIAkJaWYgKHNtdS0+bXNnIDwgMHg1MCkKIAkJCXNtdS0+bXNnICs9IDB4NTA7Ci0JCWlmIChucC0+bl9pbnRycyA+IDApCi0JCQlzbXUtPm1zZ19pcnEgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJc211LT5tc2dfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCQlvZl9ub2RlX3B1dChucCk7CiAJfSB3aGlsZSgwKTsKIApAQCAtNTU2LDcgKzU1Myw3IEBACiAKIAlpZiAoc211LT5kYl9pcnEgIT0gTk9fSVJRKSB7CiAJCWlmIChyZXF1ZXN0X2lycShzbXUtPmRiX2lycSwgc211X2RiX2ludHIsCi0JCQkJU0FfU0hJUlEsICJTTVUgZG9vcmJlbGwiLCBzbXUpIDwgMCkgeworCQkJCUlSUUZfU0hBUkVELCAiU01VIGRvb3JiZWxsIiwgc211KSA8IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNVTogY2FuJ3QgIgogCQkJICAgICAgICJyZXF1ZXN0IGludGVycnVwdCAlZFxuIiwKIAkJCSAgICAgICBzbXUtPmRiX2lycSk7CkBAIC01NjYsNyArNTYzLDcgQEAKIAogCWlmIChzbXUtPm1zZ19pcnEgIT0gTk9fSVJRKSB7CiAJCWlmIChyZXF1ZXN0X2lycShzbXUtPm1zZ19pcnEsIHNtdV9tc2dfaW50ciwKLQkJCQlTQV9TSElSUSwgIlNNVSBtZXNzYWdlIiwgc211KSA8IDApIHsKKwkJCQlJUlFGX1NIQVJFRCwgIlNNVSBtZXNzYWdlIiwgc211KSA8IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNVTogY2FuJ3QgIgogCQkJICAgICAgICJyZXF1ZXN0IGludGVycnVwdCAlZFxuIiwKIAkJCSAgICAgICBzbXUtPm1zZ19pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IDUyODJmZWMuLjdmODY0NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggMjMxMTQ2Zi4uYzFmZTBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtOTcsNyArOTcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5oIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5oCmluZGV4IGMxN2U2MWYuLmZjN2U5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuaAorKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmgKQEAgLTkzLDcgKzkzLDcgQEAKICAqIDAuIFRoaXMgYXBwZWFyIHRvIGJlIHNhZmUgZW5vdWdoIGZvciB0aGlzIGZpcnN0IHZlcnNpb24KICAqIG9mIHRoZSBkcml2ZXIsIHRob3VnaCBJIHdvdWxkIGFjY2VwdCBhbnkgY2xlYW4gcGF0Y2gKICAqIGRvaW5nIGEgYmV0dGVyIHVzZSBvZiB0aGUgZGV2aWNlLXRyZWUgd2l0aG91dCB0dXJuaW5nIHRoZQotICogd2hpbGUgaTJjIHJlZ2lzdHJhdGlvbiBtZWNhbmlzbSBpbnRvIGEgcmFjeSBtZXNzCisgKiB3aGlsZSBpMmMgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbSBpbnRvIGEgcmFjeSBtZXNzCiAgKgogICogTm90ZTogWHNlcnZlIGNoYW5nZWQgdGhpcy4gV2UgaGF2ZSBzb21lIGJpdHMgb24gdGhlIEsyIGJ1cywKICAqIHdoaWNoIEkgYXJiaXRyYXJpbHkgc2V0IHRvIDB4MjAwLiBVbHRpbWF0ZWx5LCB3ZSByZWFsbHkgd2FudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IDNkOWRkMmUuLmM3ZDFjMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqICAgCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCmluZGV4IDJkOWQ3OTEuLjY5ZDU0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYwpAQCAtOSw3ICs5LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KICAqLwogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM1LDEzICszNCw2IEBACiBzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICp2aWE7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGN1ZGFfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfTUFDCi0jZGVmaW5lIENVREFfSVJRIElSUV9NQUNfQURCCi0jZGVmaW5lIGVpZWlvKCkKLSNlbHNlCi0jZGVmaW5lIENVREFfSVJRIHZpYXMtPmludHJzWzBdLmxpbmUKLSNlbmRpZgotCiAvKiBWSUEgcmVnaXN0ZXJzIC0gc3BhY2VkIDB4MjAwIGJ5dGVzIGFwYXJ0ICovCiAjZGVmaW5lIFJTCQkweDIwMAkJLyogc2tpcCBiZXR3ZWVuIHJlZ2lzdGVycyAqLwogI2RlZmluZSBCCQkwCQkvKiBCLXNpZGUgZGF0YSAqLwpAQCAtMTkwLDExICsxODIsMjQgQEAKIAogc3RhdGljIGludCBfX2luaXQgdmlhX2N1ZGFfc3RhcnQodm9pZCkKIHsKKyAgICB1bnNpZ25lZCBpbnQgaXJxOworCiAgICAgaWYgKHZpYSA9PSBOVUxMKQogCXJldHVybiAtRU5PREVWOwogCi0gICAgaWYgKHJlcXVlc3RfaXJxKENVREFfSVJRLCBjdWRhX2ludGVycnVwdCwgMCwgIkFEQiIsIGN1ZGFfaW50ZXJydXB0KSkgewotCXByaW50ayhLRVJOX0VSUiAiY3VkYV9pbml0OiBjYW4ndCBnZXQgaXJxICVkXG4iLCBDVURBX0lSUSk7CisjaWZkZWYgQ09ORklHX01BQworICAgIGlycSA9IElSUV9NQUNfQURCOworI2Vsc2UgLyogQ09ORklHX01BQyAqLworICAgIGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHZpYXMsIDApOworICAgIGlmIChpcnEgPT0gTk9fSVJRKSB7CisJcHJpbnRrKEtFUk5fRVJSICJ2aWEtY3VkYTogY2FuJ3QgbWFwIGludGVycnVwdHMgZm9yICVzXG4iLAorCSAgICAgICB2aWFzLT5mdWxsX25hbWUpOworCXJldHVybiAtRU5PREVWOworICAgIH0KKyNlbmRpZiAvKiBDT05GSUdfTUFQICovCisKKyAgICBpZiAocmVxdWVzdF9pcnEoaXJxLCBjdWRhX2ludGVycnVwdCwgMCwgIkFEQiIsIGN1ZGFfaW50ZXJydXB0KSkgeworCXByaW50ayhLRVJOX0VSUiAidmlhLWN1ZGE6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwogCXJldHVybiAtRUFHQUlOOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4Mzc1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogdmlhLXBtdSBMRUQgY2xhc3MgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvYWRiLmg+CisjaW5jbHVkZSA8bGludXgvcG11Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworc3RhdGljIHNwaW5sb2NrX3QgcG11X2JsaW5rX2xvY2s7CitzdGF0aWMgc3RydWN0IGFkYl9yZXF1ZXN0IHBtdV9ibGlua19yZXE7CisvKiAtMTogbm8gY2hhbmdlLCAwOiByZXF1ZXN0IG9mZiwgMTogcmVxdWVzdCBvbiAqLworc3RhdGljIGludCByZXF1ZXN0ZWRfY2hhbmdlOworc3RhdGljIGludCBzbGVlcGluZzsKKworc3RhdGljIHZvaWQgcG11X3JlcV9kb25lKHN0cnVjdCBhZGJfcmVxdWVzdCAqIHJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9ibGlua19sb2NrLCBmbGFncyk7CisJLyogaWYgc29tZW9uZSByZXF1ZXN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG1lYW50aW1lCisJICogKHdlIG9ubHkgc2VlIHRoZSBsYXN0IG9uZSB3aGljaCBpcyBmaW5lKQorCSAqIHRoZW4gYXBwbHkgaXQgbm93ICovCisJaWYgKHJlcXVlc3RlZF9jaGFuZ2UgIT0gLTEgJiYgIXNsZWVwaW5nKQorCQlwbXVfcmVxdWVzdCgmcG11X2JsaW5rX3JlcSwgTlVMTCwgNCwgMHhlZSwgNCwgMCwgcmVxdWVzdGVkX2NoYW5nZSk7CisJLyogcmVzZXQgcmVxdWVzdGVkIGNoYW5nZSAqLworCXJlcXVlc3RlZF9jaGFuZ2UgPSAtMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfYmxpbmtfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwbXVfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9ibGlua19sb2NrLCBmbGFncyk7CisJc3dpdGNoIChicmlnaHRuZXNzKSB7CisJY2FzZSBMRURfT0ZGOgorCQlyZXF1ZXN0ZWRfY2hhbmdlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBMRURfRlVMTDoKKwkJcmVxdWVzdGVkX2NoYW5nZSA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJLyogaWYgcmVxdWVzdCBpc24ndCBkb25lLCB0aGVuIGRvbid0IGRvIGFueXRoaW5nICovCisJaWYgKHBtdV9ibGlua19yZXEuY29tcGxldGUgJiYgIXNsZWVwaW5nKQorCQlwbXVfcmVxdWVzdCgmcG11X2JsaW5rX3JlcSwgTlVMTCwgNCwgMHhlZSwgNCwgMCwgcmVxdWVzdGVkX2NoYW5nZSk7Cisgb3V0OgorIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfYmxpbmtfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBwbXVfbGVkID0geworCS5uYW1lID0gInBtdS1mcm9udC1sZWQiLAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0JMSU5LCisJLmRlZmF1bHRfdHJpZ2dlciA9ICJpZGUtZGlzayIsCisjZW5kaWYKKwkuYnJpZ2h0bmVzc19zZXQgPSBwbXVfbGVkX3NldCwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG11X2xlZF9zbGVlcF9jYWxsKHN0cnVjdCBwbXVfc2xlZXBfbm90aWZpZXIgKnNlbGYsIGludCB3aGVuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2JsaW5rX2xvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAod2hlbikgeworCWNhc2UgUEJPT0tfU0xFRVBfUkVRVUVTVDoKKwkJc2xlZXBpbmcgPSAxOworCQlicmVhazsKKwljYXNlIFBCT09LX1dBS0U6CisJCXNsZWVwaW5nID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90aGluZyAqLworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2JsaW5rX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBQQk9PS19TTEVFUF9PSzsKK30KKworc3RhdGljIHN0cnVjdCBwbXVfc2xlZXBfbm90aWZpZXIgdmlhX3BtdV9sZWRfc2xlZXBfbm90aWYgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwbXVfbGVkX3NsZWVwX2NhbGwsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHZpYV9wbXVfbGVkX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmR0OworCWNvbnN0IGNoYXIgKm1vZGVsOworCisJLyogb25seSBkbyB0aGlzIG9uIGtleWxhcmdvIGJhc2VkIG1vZGVscyAqLworCWlmIChwbXVfZ2V0X21vZGVsKCkgIT0gUE1VX0tFWUxBUkdPX0JBU0VEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWR0ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlpZiAoZHQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJbW9kZWwgPSAoY29uc3QgY2hhciAqKWdldF9wcm9wZXJ0eShkdCwgIm1vZGVsIiwgTlVMTCk7CisJaWYgKG1vZGVsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChzdHJuY21wKG1vZGVsLCAiUG93ZXJCb29rIiwgc3RybGVuKCJQb3dlckJvb2siKSkgIT0gMCAmJgorCSAgICBzdHJuY21wKG1vZGVsLCAiaUJvb2siLCBzdHJsZW4oImlCb29rIikpICE9IDApIHsKKwkJb2Zfbm9kZV9wdXQoZHQpOworCQkvKiBpZ25vcmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW9mX25vZGVfcHV0KGR0KTsKKworCXNwaW5fbG9ja19pbml0KCZwbXVfYmxpbmtfbG9jayk7CisJLyogbm8gb3V0c3RhbmRpbmcgcmVxICovCisJcG11X2JsaW5rX3JlcS5jb21wbGV0ZSA9IDE7CisJcG11X2JsaW5rX3JlcS5kb25lID0gcG11X3JlcV9kb25lOworI2lmZGVmIENPTkZJR19QTQorCXBtdV9yZWdpc3Rlcl9zbGVlcF9ub3RpZmllcigmdmlhX3BtdV9sZWRfc2xlZXBfbm90aWYpOworI2VuZGlmCisJcmV0dXJuIGxlZF9jbGFzc2Rldl9yZWdpc3RlcihOVUxMLCAmcG11X2xlZCk7Cit9CisKK2xhdGVfaW5pdGNhbGwodmlhX3BtdV9sZWRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggMWFiNGYxNmMuLjA2Y2E4MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC02NSwxMCArNjQsNiBAQAogI2luY2x1ZGUgPGFzbS9iYWNrbGlnaHQuaD4KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BQQzMyCi0jaW5jbHVkZSA8YXNtL29wZW5fcGljLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInZpYS1wbXUtZXZlbnQuaCIKIAogLyogU29tZSBjb21waWxlIG9wdGlvbnMgKi8KQEAgLTE1Miw3ICsxNDcsNyBAQAogc3RhdGljIGludCBwbXVfaGFzX2FkYjsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmdwaW9fbm9kZTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmdwaW9fcmVnID0gTlVMTDsKLXN0YXRpYyBpbnQgZ3Bpb19pcnEgPSAtMTsKK3N0YXRpYyBpbnQgZ3Bpb19pcnEgPSBOT19JUlE7CiBzdGF0aWMgaW50IGdwaW9faXJxX2VuYWJsZWQgPSAtMTsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgcG11X3N1c3BlbmRlZCA9IDA7CiBzdGF0aWMgc3BpbmxvY2tfdCBwbXVfbG9jazsKQEAgLTQwNCwyMiArMzk5LDIxIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHZpYV9wbXVfc3RhcnQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxOworCiAJaWYgKHZpYXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAliYXR0X3JlcS5jb21wbGV0ZSA9IDE7CiAKLSNpZm5kZWYgQ09ORklHX1BQQ19NRVJHRQotCWlmIChwbXVfa2luZCA9PSBQTVVfS0VZTEFSR09fQkFTRUQpCi0JCW9wZW5waWNfc2V0X2lycV9wcmlvcml0eSh2aWFzLT5pbnRyc1swXS5saW5lLAotCQkJCQkgT1BFTlBJQ19QUklPUklUWV9ERUZBVUxUICsgMSk7Ci0jZW5kaWYKLQotCWlmIChyZXF1ZXN0X2lycSh2aWFzLT5pbnRyc1swXS5saW5lLCB2aWFfcG11X2ludGVycnVwdCwgMCwgIlZJQS1QTVUiLAotCQkJKHZvaWQgKikwKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlZJQS1QTVU6IGNhbid0IGdldCBpcnEgJWRcbiIsCi0JCSAgICAgICB2aWFzLT5pbnRyc1swXS5saW5lKTsKLQkJcmV0dXJuIC1FQUdBSU47CisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAodmlhcywgMCk7CisJaWYgKGlycSA9PSBOT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCBtYXAgaW50ZXJydXB0biIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIDAsICJWSUEtUE1VIiwgKHZvaWQgKikwKSkgeworCQlwcmludGsoS0VSTl9FUlIgInZpYS1wbXU6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAocG11X2tpbmQgPT0gUE1VX0tFWUxBUkdPX0JBU0VEKSB7CkBAIC00MjcsMTAgKzQyMSwxMCBAQAogCQlpZiAoZ3Bpb19ub2RlID09IE5VTEwpCiAJCQlncGlvX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLAogCQkJCQkJCSAicG11LWludGVycnVwdCIpOwotCQlpZiAoZ3Bpb19ub2RlICYmIGdwaW9fbm9kZS0+bl9pbnRycyA+IDApCi0JCQlncGlvX2lycSA9IGdwaW9fbm9kZS0+aW50cnNbMF0ubGluZTsKKwkJaWYgKGdwaW9fbm9kZSkKKwkJCWdwaW9faXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZ3Bpb19ub2RlLCAwKTsKIAotCQlpZiAoZ3Bpb19pcnEgIT0gLTEpIHsKKwkJaWYgKGdwaW9faXJxICE9IE5PX0lSUSkgewogCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIDAsCiAJCQkJCSJHUElPMSBBREIiLCAodm9pZCAqKTApKQogCQkJCXByaW50ayhLRVJOX0VSUiAicG11OiBjYW4ndCBnZXQgaXJxICVkIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCmluZGV4IDgxMzM3Y2QuLjkwMGFhZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggZWJiZDJkOC4uZWNjNTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKaW5kZXggM2VkYjM0Ny4uZDEzYmIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KIApAQCAtNjgsMTQgKzY3LDEyIEBACiB7CiAJaW5pdF9idWNrZXRzKF9uYW1lX2J1Y2tldHMpOwogCWluaXRfYnVja2V0cyhfdXVpZF9idWNrZXRzKTsKLQlkZXZmc19ta19kaXIoRE1fRElSKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZG1faGFzaF9leGl0KHZvaWQpCiB7CiAJZG1faGFzaF9yZW1vdmVfYWxsKDApOwotCWRldmZzX3JlbW92ZShETV9ESVIpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzIsMjUgKzE2OSw2IEBACiB9CiAKIC8qCi0gKiBkZXZmcyBzdHVmZi4KLSAqLwotc3RhdGljIGludCByZWdpc3Rlcl93aXRoX2RldmZzKHN0cnVjdCBoYXNoX2NlbGwgKmhjKQotewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZG1fZGlzayhoYy0+bWQpOwotCi0JZGV2ZnNfbWtfYmRldihNS0RFVihkaXNrLT5tYWpvciwgZGlzay0+Zmlyc3RfbWlub3IpLAotCQkgICAgICBTX0lGQkxLIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLAotCQkgICAgICBETV9ESVIgIi8lcyIsIGhjLT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB1bnJlZ2lzdGVyX3dpdGhfZGV2ZnMoc3RydWN0IGhhc2hfY2VsbCAqaGMpCi17Ci0JZGV2ZnNfcmVtb3ZlKERNX0RJUiIvJXMiLCBoYy0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBUaGUga2Rldl90IGFuZCB1dWlkIG9mIGEgZGV2aWNlIGNhbiBuZXZlciBjaGFuZ2Ugb25jZSBpdCBpcwogICogaW5pdGlhbGx5IGluc2VydGVkLgogICovCkBAIC0yMjYsNyArMjA0LDYgQEAKIAkJfQogCQlsaXN0X2FkZCgmY2VsbC0+dXVpZF9saXN0LCBfdXVpZF9idWNrZXRzICsgaGFzaF9zdHIodXVpZCkpOwogCX0KLQlyZWdpc3Rlcl93aXRoX2RldmZzKGNlbGwpOwogCWRtX2dldChtZCk7CiAJZG1fc2V0X21kcHRyKG1kLCBjZWxsKTsKIAl1cF93cml0ZSgmX2hhc2hfbG9jayk7CkBAIC0yNDYsNyArMjIzLDYgQEAKIAkvKiByZW1vdmUgZnJvbSB0aGUgZGV2IGhhc2ggKi8KIAlsaXN0X2RlbCgmaGMtPnV1aWRfbGlzdCk7CiAJbGlzdF9kZWwoJmhjLT5uYW1lX2xpc3QpOwotCXVucmVnaXN0ZXJfd2l0aF9kZXZmcyhoYyk7CiAJZG1fc2V0X21kcHRyKGhjLT5tZCwgTlVMTCk7CiAKIAl0YWJsZSA9IGRtX2dldF90YWJsZShoYy0+bWQpOwpAQCAtMzQyLDE2ICszMTgsMTEgQEAKIAkvKgogCSAqIHJlbmFtZSBhbmQgbW92ZSB0aGUgbmFtZSBjZWxsLgogCSAqLwotCXVucmVnaXN0ZXJfd2l0aF9kZXZmcyhoYyk7Ci0KIAlsaXN0X2RlbCgmaGMtPm5hbWVfbGlzdCk7CiAJb2xkX25hbWUgPSBoYy0+bmFtZTsKIAloYy0+bmFtZSA9IG5ld19uYW1lOwogCWxpc3RfYWRkKCZoYy0+bmFtZV9saXN0LCBfbmFtZV9idWNrZXRzICsgaGFzaF9zdHIobmV3X25hbWUpKTsKIAotCS8qIHJlbmFtZSB0aGUgZGV2aWNlIG5vZGUgaW4gZGV2ZnMgKi8KLQlyZWdpc3Rlcl93aXRoX2RldmZzKGhjKTsKLQogCS8qCiAJICogV2FrZSB1cCBhbnkgZG0gZXZlbnQgd2FpdGVycy4KIAkgKi8KQEAgLTE1MDEsNyArMTQ3Miw2IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgX2RtX21pc2MgPSB7CiAJLm1pbm9yIAkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCiAJLm5hbWUgIAkJPSBETV9OQU1FLAotCS5kZXZmc19uYW1lIAk9ICJtYXBwZXIvY29udHJvbCIsCiAJLmZvcHMgIAkJPSAmX2N0bF9mb3BzCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCmluZGV4IDhlZWEwZGRiLi4xZDBmYWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtNyw3ICs3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UtbWFwcGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCAzZWQyZTUzLi5jOTliZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAliaW9zZXRfZnJlZShkbV9zZXQpOwogCiAJaWYgKHVucmVnaXN0ZXJfYmxrZGV2KF9tYWpvciwgX25hbWUpIDwgMCkKLQkJRE1FUlIoImRldmZzX3VucmVnaXN0ZXJfYmxrZGV2IGZhaWxlZCIpOworCQlETUVSUigidW5yZWdpc3Rlcl9ibGtkZXYgZmFpbGVkIik7CiAKIAlfbWFqb3IgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2tjb3B5ZC5jIGIvZHJpdmVycy9tZC9rY29weWQuYwppbmRleCA3M2FiODc1Li5mMWRiNmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2tjb3B5ZC5jCisrKyBiL2RyaXZlcnMvbWQva2NvcHlkLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggMzA2MjY4ZS4uZTRlMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMzMsMTMgKzMzLDExIEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPiAvKiBmb3IgaW52YWxpZGF0ZV9iZGV2ICovCiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KQEAgLTE0MDYsNyArMTQwNCw3IEBACiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQliZGV2ID0gb3Blbl9ieV9kZXZudW0oZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKKwliZGV2ID0gb3Blbl9wYXJ0aXRpb25fYnlfZGV2bnVtKGRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiAJaWYgKElTX0VSUihiZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1kOiBjb3VsZCBub3Qgb3BlbiAlcy5cbiIsCiAJCQlfX2JkZXZuYW1lKGRldiwgYikpOwpAQCAtMTQxNiw3ICsxNDE0LDcgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWQ6IGNvdWxkIG5vdCBiZF9jbGFpbSAlcy5cbiIsCiAJCQliZGV2bmFtZShiZGV2LCBiKSk7Ci0JCWJsa2Rldl9wdXQoYmRldik7CisJCWJsa2Rldl9wdXRfcGFydGl0aW9uKGJkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZGV2LT5iZGV2ID0gYmRldjsKQEAgLTE0MzAsNyArMTQyOCw3IEBACiAJaWYgKCFiZGV2KQogCQlNRF9CVUcoKTsKIAliZF9yZWxlYXNlKGJkZXYpOwotCWJsa2Rldl9wdXQoYmRldik7CisJYmxrZGV2X3B1dF9wYXJ0aXRpb24oYmRldik7CiB9CiAKIHZvaWQgbWRfYXV0b2RldGVjdF9kZXYoZGV2X3QgZGV2KTsKQEAgLTI5MTEsMTMgKzI5MDksMTAgQEAKIAl9CiAJZGlzay0+bWFqb3IgPSBNQUpPUihkZXYpOwogCWRpc2stPmZpcnN0X21pbm9yID0gdW5pdCA8PCBzaGlmdDsKLQlpZiAocGFydGl0aW9uZWQpIHsKKwlpZiAocGFydGl0aW9uZWQpCiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAibWRfZCVkIiwgdW5pdCk7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgIm1kL2QlZCIsIHVuaXQpOwotCX0gZWxzZSB7CisJZWxzZQogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgIm1kJWQiLCB1bml0KTsKLQkJc3ByaW50ZihkaXNrLT5kZXZmc19uYW1lLCAibWQvJWQiLCB1bml0KTsKLQl9CiAJZGlzay0+Zm9wcyA9ICZtZF9mb3BzOwogCWRpc2stPnByaXZhdGVfZGF0YSA9IG1kZGV2OwogCWRpc2stPnF1ZXVlID0gbWRkZXYtPnF1ZXVlOwpAQCAtNTUzOCw4ICs1NTMzLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWRfaW5pdCh2b2lkKQogewotCWludCBtaW5vcjsKLQogCXByaW50ayhLRVJOX0lORk8gIm1kOiBtZCBkcml2ZXIgJWQuJWQuJWQgTUFYX01EX0RFVlM9JWQsIgogCQkJIiBNRF9TQl9ESVNLUz0lZFxuIiwKIAkJCU1EX01BSk9SX1ZFUlNJT04sIE1EX01JTk9SX1ZFUlNJT04sCkBAIC01NTUzLDIzICs1NTQ2LDExIEBACiAJCXVucmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAibWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlkZXZmc19ta19kaXIoIm1kIik7CiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihNQUpPUl9OUiwgMCksIE1BWF9NRF9ERVZTLCBUSElTX01PRFVMRSwKIAkJCQltZF9wcm9iZSwgTlVMTCwgTlVMTCk7CiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihtZHBfbWFqb3IsIDApLCBNQVhfTURfREVWUzw8TWRwTWlub3JTaGlmdCwgVEhJU19NT0RVTEUsCiAJCQkgICAgbWRfcHJvYmUsIE5VTEwsIE5VTEwpOwogCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IE1BWF9NRF9ERVZTOyArK21pbm9yKQotCQlkZXZmc19ta19iZGV2KE1LREVWKE1BSk9SX05SLCBtaW5vciksCi0JCQkJU19JRkJMS3xTX0lSVVNSfFNfSVdVU1IsCi0JCQkJIm1kLyVkIiwgbWlub3IpOwotCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IE1BWF9NRF9ERVZTOyArK21pbm9yKQotCQlkZXZmc19ta19iZGV2KE1LREVWKG1kcF9tYWpvciwgbWlub3I8PE1kcE1pbm9yU2hpZnQpLAotCQkJICAgICAgU19JRkJMS3xTX0lSVVNSfFNfSVdVU1IsCi0JCQkgICAgICAibWQvbWRwJWQiLCBtaW5vcik7Ci0KLQogCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmbWRfbm90aWZpZXIpOwogCXJhaWRfdGFibGVfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHJhaWRfcm9vdF90YWJsZSwgMSk7CiAKQEAgLTU2MjUsMTUgKzU2MDYsOSBAQAogewogCW1kZGV2X3QgKm1kZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlpbnQgaTsKKwogCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihNQUpPUl9OUiwwKSwgTUFYX01EX0RFVlMpOwogCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihtZHBfbWFqb3IsMCksIE1BWF9NRF9ERVZTIDw8IE1kcE1pbm9yU2hpZnQpOwotCWZvciAoaT0wOyBpIDwgTUFYX01EX0RFVlM7IGkrKykKLQkJZGV2ZnNfcmVtb3ZlKCJtZC8lZCIsIGkpOwotCWZvciAoaT0wOyBpIDwgTUFYX01EX0RFVlM7IGkrKykKLQkJZGV2ZnNfcmVtb3ZlKCJtZC9kJWQiLCBpKTsKLQotCWRldmZzX3JlbW92ZSgibWQiKTsKIAogCXVucmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCJtZCIpOwogCXVucmVnaXN0ZXJfYmxrZGV2KG1kcF9tYWpvciwgIm1kcCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGY5MjBlNTAuLjc0MzM4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgpAQCAtMjgyNyw3ICsyODI2LDYgQEAKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwogCWludCBwZF9pZHg7CiAJaW50IHJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlzZWN0b3JfdCBtYXhfc2VjdG9yID0gbWRkZXYtPnNpemUgPDwgMTsKIAlpbnQgc3luY19ibG9ja3M7CiAJaW50IHN0aWxsX2RlZ3JhZGVkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKaW5kZXggOGNkZDRkMi4uYjg4NDUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIDB4ZjgwMDAwMDApOwogCiAJLyogcmVxdWVzdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBzYWE3MTQ2ICovCi0JZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIGludGVycnVwdF9odywgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsCisJZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIGludGVycnVwdF9odywgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAogCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJRVJSKCgicmVxdWVzdF9pcnEoKSBmYWlsZWQuXG4iKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2hscC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9obHAuYwppbmRleCAyMDkyZTZjLi5kMjkwNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2hscC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaGxwLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCX0KIAogCS8qIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgaW5jcmVtZW50IGNvbnRyb2xzIHRoZSBVViBmaWx0ZXIKLQkgICB0byByZWR1Y2UgdGhlIGJhbmR3aXRoIHRvIGltcHJvdmUgdGhlIGRpc3BsYXkgcXVhbGl0eSwKKwkgICB0byByZWR1Y2UgdGhlIGJhbmR3aWR0aCB0byBpbXByb3ZlIHRoZSBkaXNwbGF5IHF1YWxpdHksCiAJICAgc28gc2V0IGl0IC4uLiAqLwogCWlmICggeHNjaSA9PSAweDQwMCkKIAkJcGZ1diA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKaW5kZXggYjNkZDA2MC4uNWE2YzRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19GTEVYQ09QX0NPTU1PTl9IX18KICNkZWZpbmUgX19GTEVYQ09QX0NPTU1PTl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwppbmRleCBmMDQwNDE3MC4uZWIyZTY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJcGNpX3NldF9kcnZkYXRhKGZjX3BjaS0+cGRldiwgZmNfcGNpKTsKIAogCWlmICgocmV0ID0gcmVxdWVzdF9pcnEoZmNfcGNpLT5wZGV2LT5pcnEsIGZsZXhjb3BfcGNpX2lzciwKLQkJCQkJU0FfU0hJUlEsIERSSVZFUl9OQU1FLCBmY19wY2kpKSAhPSAwKQorCQkJCQlJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGZjX3BjaSkpICE9IDApCiAJCWdvdG8gZXJyX3BjaV9pb3VubWFwOwogCiAJc3Bpbl9sb2NrX2luaXQoJmZjX3BjaS0+aXJxX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggNzYxZmE2ZS4uNzU1ODIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKIAogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKGJ0LT5pcnEsIGJ0ODc4X2lycSwKLQkJCSAgICAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsICJidDg3OCIsCisJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgImJ0ODc4IiwKIAkJCSAgICAgKHZvaWQgKikgYnQpOwogCWlmIChyZXN1bHQgPT0gLUVJTlZBTCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ0ODc4KCVkKTogQmFkIGlycSBudW1iZXIgb3IgaGFuZGxlclxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwppbmRleCAxYjg5NTM2Li4wMDFjNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA1ZThiYjQxYS4uNTlhYzM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTU3MCw3ICs1NzAsOCBAQAogCQkJCQlkdmJfZnJvbnRlbmRfYWRkX2V2ZW50KGZlLCBzKTsKIAkJCQkJZmVwcml2LT5zdGF0dXMgPSBzOwogCQkJCX0KLQkJCX0KKwkJCX0gZWxzZQorCQkJCWR2Yl9mcm9udGVuZF9zd3ppZ3phZyhmZSk7CiAJCX0gZWxzZQogCQkJZHZiX2Zyb250ZW5kX3N3emlnemFnKGZlKTsKIAl9CkBAIC05NzUsNiArOTc2LDcgQEAKIAogCWNhc2UgRkVfU0VUX0ZST05URU5EX1RVTkVfTU9ERToKIAkJZmVwcml2LT50dW5lX21vZGVfZmxhZ3MgPSAodW5zaWduZWQgbG9uZykgcGFyZzsKKwkJZXJyID0gMDsKIAkJYnJlYWs7CiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCAxMzRjMmJiLi40MDc3NGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMjMxLDEwICsyMzEsNiBAQAogCiAJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAKLQlkZXZmc19ta19jZGV2KE1LREVWKERWQl9NQUpPUiwgbnVtczJtaW5vcihhZGFwLT5udW0sIHR5cGUsIGlkKSksCi0JCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQkiZHZiL2FkYXB0ZXIlZC8lcyVkIiwgYWRhcC0+bnVtLCBkbmFtZXNbdHlwZV0sIGlkKTsKLQogCWNsYXNzX2RldmljZV9jcmVhdGUoZHZiX2NsYXNzLCBOVUxMLCBNS0RFVihEVkJfTUFKT1IsIG51bXMybWlub3IoYWRhcC0+bnVtLCB0eXBlLCBpZCkpLAogCQkJICAgIGFkYXAtPmRldmljZSwgImR2YiVkLiVzJWQiLCBhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQpOwogCkBAIC0yNTIsOSArMjQ4LDYgQEAKIAlpZiAoIWR2YmRldikKIAkJcmV0dXJuOwogCi0JZGV2ZnNfcmVtb3ZlKCJkdmIvYWRhcHRlciVkLyVzJWQiLCBkdmJkZXYtPmFkYXB0ZXItPm51bSwKLQkJCWRuYW1lc1tkdmJkZXYtPnR5cGVdLCBkdmJkZXYtPmlkKTsKLQogCWNsYXNzX2RldmljZV9kZXN0cm95KGR2Yl9jbGFzcywgTUtERVYoRFZCX01BSk9SLCBudW1zMm1pbm9yKGR2YmRldi0+YWRhcHRlci0+bnVtLAogCQkJCQlkdmJkZXYtPnR5cGUsIGR2YmRldi0+aWQpKSk7CiAKQEAgLTMwMiw3ICsyOTUsNiBAQAogCiAJcHJpbnRrICgiRFZCOiByZWdpc3RlcmluZyBuZXcgYWRhcHRlciAoJXMpLlxuIiwgbmFtZSk7CiAKLQlkZXZmc19ta19kaXIoImR2Yi9hZGFwdGVyJWQiLCBudW0pOwogCWFkYXAtPm51bSA9IG51bTsKIAlhZGFwLT5uYW1lID0gbmFtZTsKIAlhZGFwLT5tb2R1bGUgPSBtb2R1bGU7CkBAIC0zMTksOCArMzExLDYgQEAKIAogaW50IGR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwKQogewotCWRldmZzX3JlbW92ZSgiZHZiL2FkYXB0ZXIlZCIsIGFkYXAtPm51bSk7Ci0KIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkdmJkZXZfcmVnaXN0ZXJfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJbGlzdF9kZWwgKCZhZGFwLT5saXN0X2hlYWQpOwpAQCAtNDEwLDggKzQwMCw2IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZGV2ZnNfbWtfZGlyKCJkdmIiKTsKLQogCWR2Yl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImR2YiIpOwogCWlmIChJU19FUlIoZHZiX2NsYXNzKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKGR2Yl9jbGFzcyk7CkBAIC00MjgsNyArNDE2LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZHZiZGV2KHZvaWQpCiB7Ci0JZGV2ZnNfcmVtb3ZlKCJkdmIiKTsKIAljbGFzc19kZXN0cm95KGR2Yl9jbGFzcyk7CiAJY2Rldl9kZWwoJmR2Yl9kZXZpY2VfY2Rldik7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKERWQl9NQUpPUiwgMCksIE1BWF9EVkJfTUlOT1JTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggZDdhOTc2ZC4uN2E3Zjc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2RlZmluZSBEVkJfTUFKT1IgMjEyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IDRjZjlmODkuLjk3ZjhlYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX0RWQl9VU0JfSF9fCiAjZGVmaW5lIF9fRFZCX1VTQl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5jCmluZGV4IDNjN2MwOWEuLjEzYWQxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuYwpAQCAtMTM0LDYgKzEzNCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHAtPmNvZGVfcmF0ZV9MUCA8IEZFQ18xXzIgfHwgcC0+Y29kZV9yYXRlX0xQID4gRkVDXzdfOCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocC0+Y29kZV9yYXRlX0hQID09IEZFQ180XzUgfHwgcC0+Y29kZV9yYXRlX0xQID09IEZFQ180XzUpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKaW5kZXggZjJmNzk1Y2IuLjI3NGE4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtNjcwLDEwICs2NzAsMTAgQEAKIAlzd2l0Y2ggKHZvbHRhZ2UpIHsKIAljYXNlIFNFQ19WT0xUQUdFXzEzOgogCQlkcHJpbnRrKCIlczogc2V0dGluZyB2b2x0YWdlIDEzVlxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHZhbCB8IDB4ODApOworCQlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgdmFsICYgMHg3Zik7CiAJY2FzZSBTRUNfVk9MVEFHRV8xODoKIAkJZHByaW50aygiJXM6IHNldHRpbmcgdm9sdGFnZSAxOFZcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCB2YWwgJiAweDdmKTsKKwkJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHZhbCB8IDB4ODApOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMKaW5kZXggN2M2ZGM3ZS4uNTMwMmUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWIuYwpAQCAtMjEsNyArMjEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwppbmRleCA2YzNiZTI1Li45ODY3MzQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwpAQCAtMjAsNyArMjAsNiBAQAogICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kaWJ1c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYwppbmRleCA2ZThhZDE3Li45YTM1NDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCUFHQ19ERUxBWTAsIDB4MDcsCiAJCUFHQ19ERUxBWTIsIDB4ZmUsCiAJCS8qIENoYW5nZSB0aGUgdmFsdWUgb2YgSUFHQ0JXWzE1OjhdCi0JCSAgIG9mIGlubmVyIEFHQyBsb29wIGZpbHRlciBiYW5kd2l0aCAqLworCQkgICBvZiBpbm5lciBBR0MgbG9vcCBmaWx0ZXIgYmFuZHdpZHRoICovCiAJCUFHQ19MT09QX0JBTkRXSURUSDAsIDB4MDgsCiAJCUFHQ19MT09QX0JBTkRXSURUSDEsIDB4OWEKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYwppbmRleCBlODNmZjIxLi45Y2JkMTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYwpAQCAtMjEsNyArMjEsNiBAQAogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMTgyMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczE4MjAuYwppbmRleCA2YmZmZTg1Li45YjU3NTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMTgyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxODIwLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCmluZGV4IGFjYWJlYTAuLjIzMTBiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTYxNiw3ICs2MTYsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBsdXRvKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcGx1dG9faXJxLCBTQV9TSElSUSwgRFJJVkVSX05BTUUsIHBsdXRvKTsKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHBsdXRvX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBwbHV0byk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9pb3VubWFwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IDdhNWM5OWMuLjUwMGYxNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC0zMCw3ICszMCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCmluZGV4IDNlMmUxMjEuLjljNzk2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oCkBAIC02LDEwICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAotI2lmZGVmIENPTkZJR19ERVZGU19GUwotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9kdmIvdmlkZW8uaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvYXVkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvZG14Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCmluZGV4IDYxNjNjYjAuLjVmMTExZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCkBAIC0xMTQxLDYgKzExNDEsMTUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNVQklEX0RWQkNfS05DMToKKwkJYnVkZ2V0X2F2LT5yZWluaXRpYWxpc2VfZGVtb2QgPSAxOworCQlmZSA9IHRkYTEwMDIxX2F0dGFjaCgmcGhpbGlwc19jdTEyMTZfY29uZmlnLAorCQkJCSAgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwLAorCQkJCSAgICAgcmVhZF9wd20oYnVkZ2V0X2F2KSk7CisJCWlmIChmZSkgeworCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfY3UxMjE2X3R1bmVyX3NldF9wYXJhbXM7CisJCX0KKwkJYnJlYWs7CisKIAljYXNlIFNVQklEX0RWQkNfS05DMV9QTFVTOgogCWNhc2UgU1VCSURfRFZCQ19DSU5FUkdZMTIwMDoKIAkJYnVkZ2V0X2F2LT5yZWluaXRpYWxpc2VfZGVtb2QgPSAxOwpAQCAtMTI5MywxMSArMTMwMiw3IEBACiAKIAlidWRnZXRfYXYtPmJ1ZGdldC5kdmJfYWRhcHRlci5wcml2ID0gYnVkZ2V0X2F2OwogCWZyb250ZW5kX2luaXQoYnVkZ2V0X2F2KTsKLQotCWlmICghYnVkZ2V0X2F2LT5oYXNfc2FhNzExMykgewotCQljaWludGZfaW5pdChidWRnZXRfYXYpOwotCX0KLQorCWNpaW50Zl9pbml0KGJ1ZGdldF9hdik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCmluZGV4IDE0NTU5ZWYuLjA0Y2VmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwpAQCAtNDMsNyArNDMsNyBAQAogICAgIGlzIGEgYml0IGJyYWluZGVhZCAobm8gbWF0Y2hpbmcgY2hhbm5lbCBtYXNrcyBvciBubyBtYXRjaGluZyBmaWx0ZXIgbWFzayksCiAgICAgd2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIC0geWV0LiBpdCBkb2Vzbid0IGV2ZW50IHN1cHBvcnQgbmVnYXRpdmUgZmlsdGVycywKICAgICBzbyB0aGUgYmVzdCB3YXkgaXMgbWF5YmUgdG8ga2VlcCBUVFVTQl9IV1NFQ1RJT05TIHVuZGVmJ2QgYW5kIGp1c3QKLSAgICBwYXJzZSBUUyBkYXRhLiBVU0IgYmFuZHdpdGggd2lsbCBiZSBhIHByb2JsZW0gd2hlbiBoYXZpbmcgbGFyZ2UKKyAgICBwYXJzZSBUUyBkYXRhLiBVU0IgYmFuZHdpZHRoIHdpbGwgYmUgYSBwcm9ibGVtIHdoZW4gaGF2aW5nIGxhcmdlCiAgICAgZGF0YXN0cmVhbXMsIGVzcGVjaWFsbHkgZm9yIGR2Yi1uZXQsIGJ1dCBoZXksIHRoYXQncyBub3QgbXkgcHJvYmxlbS4KIAogICBUVFVTQl9ESVNFUUMsIFRUVVNCX1RPTkU6CkBAIC0xMjYsMTAgKzEyNiw2IEBACiAKIAlpbnQgcmV2aXNpb247CiAKLSNpZiAwCi0JZGV2ZnNfaGFuZGxlX3Qgc3RjX2RldmZzX2hhbmRsZTsKLSNlbmRpZgotCiAJc3RydWN0IGR2Yl9mcm9udGVuZCogZmU7CiB9OwogCkBAIC0xNzQ2LDEzICsxNzQyLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0jaWYgMAotCXR0dXNiLT5zdGNfZGV2ZnNfaGFuZGxlID0KLQkgICAgZGV2ZnNfcmVnaXN0ZXIodHR1c2ItPmFkYXB0ZXItPmRldmZzX2hhbmRsZSwgVFRVU0JfQlVER0VUX05BTUUsCi0JCQkgICBERVZGU19GTF9ERUZBVUxULCAwLCAxOTIsCi0JCQkgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUAotCQkJICAgfCBTX0lST1RIIHwgU19JV09USCwgJnN0Y19mb3BzLCB0dHVzYik7Ci0jZW5kaWYKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsICh2b2lkICopIHR0dXNiKTsKIAogCWZyb250ZW5kX2luaXQodHR1c2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9taXJvcGNtMjAtcmRzLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yZHMuYwppbmRleCA4N2IzN2I3Li5jMWIxZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yZHMuYwpAQCAtMTE1LDcgKzExNSw2IEBACiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcmRzX21pc2NkZXYgPSB7CiAJLm1pbm9yCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKIAkubmFtZQkJPSAicmFkaW90ZXh0IiwKLQkuZGV2ZnNfbmFtZQk9ICJ2NGwvcmRzL3JhZGlvdGV4dCIsCiAJLmZvcHMJCT0gJnJkc19mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwppbmRleCA5ZjI0OWU3Li40YzgyOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwpAQCAtMzcsNyArMzcsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCmluZGV4IDZlMDhlMzIuLjVjNWU2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwpAQCAtMTgsOSArMTgsNyBAQAogICogMjAwMy0wOS0wMToJU3VwcG9ydCB3M2NhbSBieSBUYWtlbyBUYWthaGFzaGkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKaW5kZXggZTY4YTZkMi4uZGUxNDgxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKQEAgLTI1LDcgKzI1LDYgQEAKIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTM1NDgsMTEgKzM1NDcsNiBAQAogCS8qIEh5YnJpZCBEVkIgY2FyZCwgRE9FUyBoYXZlIGEgdGRhOTg4NyAqLwogCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFKQogCQl0ZGE5ODg3ID0gMTsKLQlpZigoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszKSB8fAotCSAgIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszKSB8fAotCSAgIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfUEhJTElQU19GTTEyNTZfSUgzKSB8fAotCSAgICB0ZGE5ODg3KQotCQlyZXF1ZXN0X21vZHVsZSgidGRhOTg4NyIpOwogCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpCiAJCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDQyM2U5NTQuLjU3NjRhODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTQwMTksOCArNDAxOSw5IEBACiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKGRldiwwKSwKIAkJCQlidHYtPmMubmFtZSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBjYW4ndCByZXF1ZXN0IGlvbWVtICgweCVseCkuXG4iLAotCQkgICAgICAgYnR2LT5jLm5yLCBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBjYW4ndCByZXF1ZXN0IGlvbWVtICgweCVsbHgpLlxuIiwKKwkJICAgICAgIGJ0di0+Yy5uciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldik7CkBAIC00MDMxLDggKzQwMzIsOSBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZsYXQpOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogQnQlZCAocmV2ICVkKSBhdCAlcywgIiwKIAkgICAgICAgYnR0dl9udW0sYnR2LT5pZCwgYnR2LT5yZXZpc2lvbiwgcGNpX25hbWUoZGV2KSk7Ci0JcHJpbnRrKCJpcnE6ICVkLCBsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsCi0JICAgICAgIGJ0di0+Yy5wY2ktPmlycSwgbGF0LCBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApKTsKKwlwcmludGsoImlycTogJWQsIGxhdGVuY3k6ICVkLCBtbWlvOiAweCVsbHhcbiIsCisJICAgICAgIGJ0di0+Yy5wY2ktPmlycSwgbGF0LAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsMCkpOwogCXNjaGVkdWxlKCk7CiAKIAlidHYtPmJ0ODQ4X21taW89aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApLCAweDEwMDApOwpAQCAtNDA0OCw3ICs0MDUwLDcgQEAKIAkvKiBkaXNhYmxlIGlycXMsIHJlZ2lzdGVyIGlycSBoYW5kbGVyICovCiAJYnR3cml0ZSgwLCBCVDg0OF9JTlRfTUFTSyk7CiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEoYnR2LT5jLnBjaS0+aXJxLCBidHR2X2lycSwKLQkJCSAgICAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsYnR2LT5jLm5hbWUsKHZvaWQgKilidHYpOworCQkJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsYnR2LT5jLm5hbWUsKHZvaWQgKilidHYpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnR0diVkOiBjYW4ndCBnZXQgSVJRICVkXG4iLAogCQkgICAgICAgYnR0dl9udW0sYnR2LT5jLnBjaS0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAppbmRleCBkMjk1NjAxLi4zMTFjNGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlpbnQgbWJveF9jc2VsOwogCiAJLyogcmlzYyBtZW1vcnkgbWFuYWdlbWVudCBkYXRhCi0JICAgLSBtdXN0IGFxdWlyZSBzX2xvY2sgYmVmb3JlIGNoYW5naW5nIHRoZXNlCisJICAgLSBtdXN0IGFjcXVpcmUgc19sb2NrIGJlZm9yZSBjaGFuZ2luZyB0aGVzZQogCSAgIC0gb25seSB0aGUgaXJxIGhhbmRsZXIgaXMgc3VwcG9ydGVkIHRvIHRvdWNoIHRvcCArIGJvdHRvbSArIHZjdXJyICovCiAJc3RydWN0IGJ0Y3hfcmlzY21lbSAgICAgbWFpbjsKIAlzdHJ1Y3QgYnR0dl9idWZmZXIgICAgICAqc2NyZWVuOyAgICAvKiBvdmVybGF5ICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NvbXBhdF9pb2N0bDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NvbXBhdF9pb2N0bDMyLmMKaW5kZXggODQwZmUwMS4uMzUzZDAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYwpAQCAtMTIsNyArMTIsNiBAQAogICogaW9jdGxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA5NWM1YWNlZS4uM2IzMWEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTI2LDcgKzI2LDYgQEAKIC8qIGRlZmluZSBfQ1BJQV9ERUJVR18gZm9yIHZlcmJvc2UgZGVidWcgb3V0cHV0IChzZWUgY3BpYS5oKSAqLwogLyogI2RlZmluZSBfQ1BJQV9ERUJVR18gIDEgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCmluZGV4IGQxMjlkYjUuLmQwOWY0OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwpAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV9wcC5jCmluZGV4IDRjODliZDMuLjQxZjRiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV9wcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV9wcC5jCkBAIC0yNSw3ICsyNSw2IEBACiAvKiBkZWZpbmUgX0NQSUFfREVCVUdfIGZvciB2ZXJib3NlIGRlYnVnIG91dHB1dCAoc2VlIGNwaWEuaCkgKi8KIC8qICNkZWZpbmUgX0NQSUFfREVCVUdfICAxICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCAyMTk0Y2JlLi5mMDM0MDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC03MDAsNyArNzAwLDcgQEAKIAogCS8qIGdldCBpcnEgKi8KIAllcnIgPSByZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgY3g4ODAxX2lycSwKLQkJCSAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsIGNoaXAtPmNvcmUtPm5hbWUsIGNoaXApOworCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGNoaXAtPmNvcmUtPm5hbWUsIGNoaXApOwogCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoMCwgIiVzOiBjYW4ndCBnZXQgSVJRICVkXG4iLAogCQkgICAgICAgY2hpcC0+Y29yZS0+bmFtZSwgY2hpcC0+cGNpLT5pcnEpOwpAQCAtNzEyLDkgKzcxMiw5IEBACiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpLCBQQ0lfTEFURU5DWV9USU1FUiwgICZjaGlwLT5wY2lfbGF0KTsKIAogCWRwcmludGsoMSwiQUxTQSAlcy8laTogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsICIKLQkgICAgICAgImxhdGVuY3k6ICVkLCBtbWlvOiAweCVseFxuIiwgY29yZS0+bmFtZSwgZGV2bm8sCisJICAgICAgICJsYXRlbmN5OiAlZCwgbW1pbzogMHglbGx4XG4iLCBjb3JlLT5uYW1lLCBkZXZubywKIAkgICAgICAgcGNpX25hbWUocGNpKSwgY2hpcC0+cGNpX3JldiwgcGNpLT5pcnEsCi0JICAgICAgIGNoaXAtPnBjaV9sYXQscGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwwKSk7CisJICAgICAgIGNoaXAtPnBjaV9sYXQsKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLDApKTsKIAogCWNoaXAtPmlycSA9IHBjaS0+aXJxOwogCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwpAQCAtNzY2LDggKzc2Niw4IEBACiAKIAlzdHJjcHkgKGNhcmQtPmRyaXZlciwgIkNYODh4Iik7CiAJc3ByaW50ZihjYXJkLT5zaG9ydG5hbWUsICJDb25leGFudCBDWCV4IiwgcGNpLT5kZXZpY2UpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4IiwKLQkJY2FyZC0+c2hvcnRuYW1lLCBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKSk7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0ICUjbGx4IiwKKwkJY2FyZC0+c2hvcnRuYW1lLCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCkpOwogCXN0cmNweSAoY2FyZC0+bWl4ZXJuYW1lLCAiQ1g4OCIpOwogCiAJZHByaW50ayAoMCwgIiVzLyVpOiBBTFNBIHN1cHBvcnQgZm9yIGN4MjM4OHggYm9hcmRzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwppbmRleCA0ZmY4MTU4Li4zNDk2MzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwpAQCAtNjg2LDYgKzY4NiwzOSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHUzMiAqY3RybF9jbGFzc2VzW10gPSB7CisJY3g4OF91c2VyX2N0cmxzLAorCWN4MjM0MXhfbXBlZ19jdHJscywKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGJsYWNrYmlyZF9xdWVyeWN0cmwoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKwlxY3RybC0+aWQgPSB2NGwyX2N0cmxfbmV4dChjdHJsX2NsYXNzZXMsIHFjdHJsLT5pZCk7CisJaWYgKHFjdHJsLT5pZCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFN0YW5kYXJkIFY0TDIgY29udHJvbHMgKi8KKwlpZiAoY3g4ODAwX2N0cmxfcXVlcnkocWN0cmwpID09IDApCisJCXJldHVybiAwOworCisJLyogTVBFRyBWNEwyIGNvbnRyb2xzICovCisJaWYgKGN4MjM0MXhfY3RybF9xdWVyeSgmZGV2LT5wYXJhbXMsIHFjdHJsKSkKKwkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsYWNrYmlyZF9xdWVyeW1lbnUoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKK3sKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7CisKKwlxY3RybC5pZCA9IHFtZW51LT5pZDsKKwlibGFja2JpcmRfcXVlcnljdHJsKGRldiwgJnFjdHJsKTsKKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwgY3gyMzQxeF9jdHJsX2dldF9tZW51KHFtZW51LT5pZCkpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIGludCBtcGVnX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKQEAgLTg2Niw2ICs4OTksMTYgQEAKIAkJICAgICAgIGNvcmUtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9CisJY2FzZSBWSURJT0NfUVVFUllNRU5VOgorCQlyZXR1cm4gYmxhY2tiaXJkX3F1ZXJ5bWVudShkZXYsIGFyZyk7CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjID0gYXJnOworCisJCWlmIChibGFja2JpcmRfcXVlcnljdHJsKGRldiwgYykgPT0gMCkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gY3g4OF9kb19pb2N0bChpbm9kZSwgZmlsZSwgMCwgZGV2LT5jb3JlLCBjbWQsIGFyZywgbXBlZ19kb19pb2N0bCk7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIGN4ODhfZG9faW9jdGwoaW5vZGUsIGZpbGUsIDAsIGRldi0+Y29yZSwgY21kLCBhcmcsIG1wZWdfZG9faW9jdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZjlkNjhmMi4uMTRiZDQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0xMTk0LDYgKzExOTQsMjEgQEAKIAkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKKwlbQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfRFZCU10gPSB7CisJCS5uYW1lICAgICAgICAgID0gIkdlbmlhdGVjaCBEVkItUyIsCisJCS50dW5lcl90eXBlICAgID0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZSAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgID0gQUREUl9VTlNFVCwKKwkJLmlucHV0ICA9IHt7CisJCQkudHlwZSAgPSBDWDg4X1ZNVVhfRFZCLAorCQkJLnZtdXggID0gMCwKKwkJfSx7CisJCQkudHlwZSAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICA9IDEsCisJCX19LAorCQkuZHZiICAgICAgPSAxLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfYmNvdW50ID0gQVJSQVlfU0laRShjeDg4X2JvYXJkcyk7CiAKQEAgLTE0MzksNiArMTQ1NCwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkODAwLCAvKiBGdXNpb25IRFRWIDMgR29sZCAob3JpZ2luYWwgcmV2aXNpb24pICovCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1EsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDE0ZjEsCisJCS5zdWJkZXZpY2UgPSAweDAwODQsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0dFTklBVEVDSF9EVkJTLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9zdWJpZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IDI2ZjRjMGYuLjk3M2QzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTEwMzEsOCArMTAzMSw4IEBACiAJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2ksMCksCiAJCQkgICAgICAgY29yZS0+bmFtZSkpCiAJCXJldHVybiAwOwotCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWx4XG4iLAotCSAgICAgICBjb3JlLT5uYW1lLHBjaV9yZXNvdXJjZV9zdGFydChwY2ksMCkpOworCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWxseFxuIiwKKwkgICAgICAgY29yZS0+bmFtZSwodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwY2ksMCkpOwogCXJldHVybiAtRUJVU1k7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggZGNlMWZlZC4uYWZkZTM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTQ5Niw2ICs0OTYsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCWlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFX09GRikgeworCQlkcHJpbnRrKDEsIkxOQiBWb2x0YWdlIE9GRlxuIik7CisJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwZWZmZik7CisJfQorCisJaWYgKGNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UpCisJCXJldHVybiBjb3JlLT5wcmV2X3NldF92b2x0YWdlKGZlLCB2b2x0YWdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjeDI0MTIzX2NvbmZpZyBnZW5pYXRlY2hfZHZic19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgID0gMHg1NSwKKwkuc2V0X3RzX3BhcmFtcyAgPSBjeDI0MTIzX3NldF90c19wYXJhbSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY3gyNDEyM19jb25maWcgaGF1cHBhdWdlX25vdmFzX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcwkJPSAweDU1LAogCS5zZXRfdHNfcGFyYW1zCQk9IGN4MjQxMjNfc2V0X3RzX3BhcmFtLApAQCAtNzYwLDYgKzc4MCwxNCBAQAogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGt3b3JsZF9kdmJzXzEwMF9zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfR0VOSUFURUNIX0RWQlM6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gY3gyNDEyM19hdHRhY2goJmdlbmlhdGVjaF9kdmJzX2NvbmZpZywKKwkJCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCQlkZXYtPmNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGdlbmlhdGVjaF9kdmJzX3NldF92b2x0YWdlOworCQl9CisJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCmluZGV4IGE5ZDc3OTUuLjEzOGE0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKQEAgLTQyMCw5ICs0MjAsOSBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGNpLCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZkZXYtPnBjaV9yZXYpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGNpLCBQQ0lfTEFURU5DWV9USU1FUiwgICZkZXYtPnBjaV9sYXQpOwogCXByaW50ayhLRVJOX0lORk8gIiVzLzI6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCi0JICAgICAgICJsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsIGRldi0+Y29yZS0+bmFtZSwKKwkgICAgICAgImxhdGVuY3k6ICVkLCBtbWlvOiAweCVsbHhcbiIsIGRldi0+Y29yZS0+bmFtZSwKIAkgICAgICAgcGNpX25hbWUoZGV2LT5wY2kpLCBkZXYtPnBjaV9yZXYsIGRldi0+cGNpLT5pcnEsCi0JICAgICAgIGRldi0+cGNpX2xhdCxwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCkpOworCSAgICAgICBkZXYtPnBjaV9sYXQsKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCkpOwogCiAJLyogaW5pdGlhbGl6ZSBkcml2ZXIgc3RydWN0ICovCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwpAQCAtNDM4LDcgKzQzOCw3IEBACiAKIAkvKiBnZXQgaXJxICovCiAJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5wY2ktPmlycSwgY3g4ODAyX2lycSwKLQkJCSAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsIGRldi0+Y29yZS0+bmFtZSwgZGV2KTsKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBkZXYtPmNvcmUtPm5hbWUsIGRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IElSUSAlZFxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSwgZGV2LT5wY2ktPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBkY2RhNTI5Li4yMjI1ZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTMyNyw2ICszMjcsNTEgQEAKIH07CiBzdGF0aWMgY29uc3QgaW50IENYODgwMF9DVExTID0gQVJSQVlfU0laRShjeDg4MDBfY3Rscyk7CiAKK2NvbnN0IHUzMiBjeDg4X3VzZXJfY3RybHNbXSA9IHsKKwlWNEwyX0NJRF9VU0VSX0NMQVNTLAorCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJVjRMMl9DSURfQ09OVFJBU1QsCisJVjRMMl9DSURfU0FUVVJBVElPTiwKKwlWNEwyX0NJRF9IVUUsCisJVjRMMl9DSURfQVVESU9fVk9MVU1FLAorCVY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCisJVjRMMl9DSURfQVVESU9fTVVURSwKKwkwCit9OworRVhQT1JUX1NZTUJPTChjeDg4X3VzZXJfY3RybHMpOworCitzdGF0aWMgY29uc3QgdTMyICpjdHJsX2NsYXNzZXNbXSA9IHsKKwljeDg4X3VzZXJfY3RybHMsCisJTlVMTAorfTsKKworaW50IGN4ODgwMF9jdHJsX3F1ZXJ5KHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisJaW50IGk7CisKKwlpZiAocWN0cmwtPmlkIDwgVjRMMl9DSURfQkFTRSB8fAorCSAgICBxY3RybC0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBpIDwgQ1g4ODAwX0NUTFM7IGkrKykKKwkJaWYgKGN4ODgwMF9jdGxzW2ldLnYuaWQgPT0gcWN0cmwtPmlkKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gQ1g4ODAwX0NUTFMpIHsKKwkJKnFjdHJsID0gbm9fY3RsOworCQlyZXR1cm4gMDsKKwl9CisJKnFjdHJsID0gY3g4ODAwX2N0bHNbaV0udjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY3g4ODAwX2N0cmxfcXVlcnkpOworCitzdGF0aWMgaW50IGN4ODhfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisJcWN0cmwtPmlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBxY3RybC0+aWQpOworCWlmIChxY3RybC0+aWQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGN4ODgwMF9jdHJsX3F1ZXJ5KHFjdHJsKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogcmVzb3VyY2UgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0xMzYyLDIwICsxNDA3LDggQEAKIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJewogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMgPSBhcmc7Ci0JCWludCBpOwogCi0JCWlmIChjLT5pZCA8ICBWNEwyX0NJRF9CQVNFIHx8Ci0JCSAgICBjLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZm9yIChpID0gMDsgaSA8IENYODgwMF9DVExTOyBpKyspCi0JCQlpZiAoY3g4ODAwX2N0bHNbaV0udi5pZCA9PSBjLT5pZCkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gQ1g4ODAwX0NUTFMpIHsKLQkJCSpjID0gbm9fY3RsOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJKmMgPSBjeDg4MDBfY3Rsc1tpXS52OwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGN4ODhfcXVlcnljdHJsKGMpOwogCX0KIAljYXNlIFZJRElPQ19HX0NUUkw6CiAJCXJldHVybiBnZXRfY29udHJvbChjb3JlLGFyZyk7CkBAIC0xODQ3LDkgKzE4ODAsOSBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmRldi0+cGNpX3Jldik7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICAmZGV2LT5wY2lfbGF0KTsKIAlwcmludGsoS0VSTl9JTkZPICIlcy8wOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgotCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWx4XG4iLCBjb3JlLT5uYW1lLAorCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWxseFxuIiwgY29yZS0+bmFtZSwKIAkgICAgICAgcGNpX25hbWUocGNpX2RldiksIGRldi0+cGNpX3JldiwgcGNpX2Rldi0+aXJxLAotCSAgICAgICBkZXYtPnBjaV9sYXQscGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOworCSAgICAgICBkZXYtPnBjaV9sYXQsKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSk7CiAKIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKIAlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKHBjaV9kZXYsMHhmZmZmZmZmZikpIHsKQEAgLTE4ODIsNyArMTkxNSw3IEBACiAKIAkvKiBnZXQgaXJxICovCiAJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBjeDg4MDBfaXJxLAotCQkJICBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgY29yZS0+bmFtZSwgZGV2KTsKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBjb3JlLT5uYW1lLCBkZXYpOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBJUlEgJWRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lLHBjaV9kZXYtPmlycSk7CkBAIC0xODkzLDggKzE5MjYsNiBAQAogCS8qIGxvYWQgYW5kIGNvbmZpZ3VyZSBoZWxwZXIgbW9kdWxlcyAqLwogCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+dHVuZXJfdHlwZSkKIAkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Ci0JaWYgKGNvcmUtPnRkYTk4ODdfY29uZikKLQkJcmVxdWVzdF9tb2R1bGUoInRkYTk4ODciKTsKIAogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCiAJZGV2LT52aWRlb19kZXYgPSBjeDg4X3ZkZXZfaW5pdChjb3JlLGRldi0+cGNpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggOWE5YTBmYy4uZTc4MTA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0xOTYsNiArMTk2LDcgQEAKICNkZWZpbmUgQ1g4OF9CT0FSRF9QSVhFTFZJRVdfUExBWVRWX1A3MDAwICA0OQogI2RlZmluZSBDWDg4X0JPQVJEX05QR1RFQ0hfUkVBTFRWX1RPUDEwRk0gIDUwCiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSCAgICAgICAgNTEKKyNkZWZpbmUgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfRFZCUyAgICAgICAgICA1MgogCiBlbnVtIGN4ODhfaXR5cGUgewogCUNYODhfVk1VWF9DT01QT1NJVEUxID0gMSwKQEAgLTU5MCw2ICs1OTEsOCBAQAogZXh0ZXJuIGludCBjeDg4X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgcmFkaW8sCiAJCQkJc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCk7CitleHRlcm4gY29uc3QgdTMyIGN4ODhfdXNlcl9jdHJsc1tdOworZXh0ZXJuIGludCBjeDg4MDBfY3RybF9xdWVyeShzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggOTI4NjA5MC4uMmE0NjFkZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTU3NCw4ICsxNTc0LDYgQEAKIAkJcmVxdWVzdF9tb2R1bGUoInR2cDUxNTAiKTsKIAlpZiAoZGV2LT5oYXNfdHVuZXIpCiAJCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOwotCWlmIChkZXYtPnRkYTk4ODdfY29uZikKLQkJcmVxdWVzdF9tb2R1bGUoInRkYTk4ODciKTsKICNlbmRpZgogCWVyckNvZGUgPSBlbTI4eHhfY29uZmlnKGRldik7CiAJaWYgKGVyckNvZGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKaW5kZXggZjY4Y2E3ZC4uZTI3ODc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0xODgyLDcgKzE4ODEsNyBAQAogCiAJbWV5ZS5tY2hpcF9pcnEgPSBwY2lkZXYtPmlycTsKIAlpZiAocmVxdWVzdF9pcnEobWV5ZS5tY2hpcF9pcnEsIG1leWVfaXJxLAotCQkJU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsICJtZXllIiwgbWV5ZV9pcnEpKSB7CisJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsICJtZXllIiwgbWV5ZV9pcnEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogcmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKIAkJZ290byBvdXRyZXFpcnE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAppbmRleCAwZDA5YTBlLi5lYTEwN2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaApAQCAtMzYsNyArMzYsNiBAQAogI2RlZmluZSBNRVlFX0RSSVZFUl9WRVJTSU9OIF9fc3RyaW5naWZ5KE1FWUVfRFJJVkVSX01BSk9SVkVSU0lPTikgIi4iIFwKIAkJCSAgICBfX3N0cmluZ2lmeShNRVlFX0RSSVZFUl9NSU5PUlZFUlNJT04pCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKaW5kZXggNGU0NTEwNC4uNTQ1ZTRhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKQEAgLTkwLDggKzkwLDggQEAKIAkvKiB0aHJlYWQgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAqa3RocmVhZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3cTsKLQlpbnQgICAgICAgICAgICAgICAgICByZXN0YXJ0OjE7Ci0JaW50ICAgICAgICAgICAgICAgICAgd2F0Y2hfc3RlcmVvOjE7CisJdW5zaWduZWQgaW50ICAgICAgICAgcmVzdGFydDoxOworCXVuc2lnbmVkIGludCAgICAgICAgIHdhdGNoX3N0ZXJlbzoxOwogfTsKIAogLyogbXNwMzQwMC1kcml2ZXIuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IGE5ODhkZjIuLjFiMDdhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTM1LDcgKzM1LDYgQEAKICAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlCmluZGV4IGZlZDYwM2EuLjAyZTQxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiBwdnJ1c2IyLW9ianMJOj0gcHZydXNiMi1pMmMtY29yZS5vIHB2cnVzYjItaTJjLWNtZC12NGwyLm8gXAogCQkgICBwdnJ1c2IyLWF1ZGlvLm8gcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5vIFwKIAkJICAgcHZydXNiMi1lbmNvZGVyLm8gcHZydXNiMi12aWRlby12NGwubyBcCi0JCSAgIHB2cnVzYjItZWVwcm9tLm8gcHZydXNiMi10dW5lci5vIHB2cnVzYjItZGVtb2QubyBcCisJCSAgIHB2cnVzYjItZWVwcm9tLm8gcHZydXNiMi10dW5lci5vIFwKIAkJICAgcHZydXNiMi1tYWluLm8gcHZydXNiMi1oZHcubyBwdnJ1c2IyLXY0bDIubyBcCiAJCSAgIHB2cnVzYjItY3RybC5vIHB2cnVzYjItc3RkLm8gXAogCQkgICBwdnJ1c2IyLWNvbnRleHQubyBwdnJ1c2IyLWlvLm8gcHZydXNiMi1pb3JlYWQubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYwppbmRleCAzMTNkMmRjLi45ODQ2YzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKQEAgLTE0NSw4ICsxNDUsOCBAQAogCiBzdGF0aWMgdm9pZCBwdnIyX21zcDM0MDBfZGV0YWNoKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKIHsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSAwOwotCWN0eHQtPmhkdy0+YXVkaW9fc3RhdCA9IDA7CisJY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKKwljdHh0LT5oZHctPmF1ZGlvX3N0YXQgPSBOVUxMOwogCWtmcmVlKGN0eHQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmMKaW5kZXggNDBkYzU5OC4uZjEyOWYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYwpAQCAtNzcsNyArNzcsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCwKIAl2b2lkICgqc2V0dXBfZnVuYykoc3RydWN0IHB2cjJfY29udGV4dCAqKSkKIHsKLQlzdHJ1Y3QgcHZyMl9jb250ZXh0ICptcCA9IDA7CisJc3RydWN0IHB2cjJfY29udGV4dCAqbXAgPSBOVUxMOwogCW1wID0ga21hbGxvYyhzaXplb2YoKm1wKSxHRlBfS0VSTkVMKTsKIAlpZiAoIW1wKSBnb3RvIGRvbmU7CiAJbWVtc2V0KG1wLDAsc2l6ZW9mKCptcCkpOwpAQCAtODcsNyArODcsNyBAQAogCW1wLT5oZHcgPSBwdnIyX2hkd19jcmVhdGUoaW50ZixkZXZpZCk7CiAJaWYgKCFtcC0+aGR3KSB7CiAJCXB2cjJfY29udGV4dF9kZXN0cm95KG1wKTsKLQkJbXAgPSAwOworCQltcCA9IE5VTEw7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogewogCWNwLT5oZHcgPSBtcC0+aGR3OwogCWNwLT5tY19oZWFkID0gbXA7Ci0JY3AtPm1jX25leHQgPSAwOworCWNwLT5tY19uZXh0ID0gTlVMTDsKIAljcC0+bWNfcHJldiA9IG1wLT5tY19sYXN0OwogCWlmIChtcC0+bWNfbGFzdCkgewogCQltcC0+bWNfbGFzdC0+bWNfbmV4dCA9IGNwOwpAQCAtMTYwLDggKzE2MCw4IEBACiB7CiAJaWYgKCFjcC0+c3RyZWFtKSByZXR1cm47CiAJcHZyMl9zdHJlYW1fa2lsbChjcC0+c3RyZWFtLT5zdHJlYW0pOwotCWNwLT5zdHJlYW0tPnVzZXIgPSAwOwotCWNwLT5zdHJlYW0gPSAwOworCWNwLT5zdHJlYW0tPnVzZXIgPSBOVUxMOworCWNwLT5zdHJlYW0gPSBOVUxMOwogfQogCiAKQEAgLTE3OSw3ICsxNzksNyBAQAogCX0gZWxzZSB7CiAJCW1wLT5tY19maXJzdCA9IGNwLT5tY19uZXh0OwogCX0KLQljcC0+aGR3ID0gMDsKKwljcC0+aGR3ID0gTlVMTDsKIH0KIAogCkBAIC0yMTIsNyArMjEyLDcgQEAKIHsKIAlzdHJ1Y3QgcHZyMl9pb3JlYWQgKmNwOwogCWNwID0gcHZyMl9pb3JlYWRfY3JlYXRlKCk7Ci0JaWYgKCFjcCkgcmV0dXJuIDA7CisJaWYgKCFjcCkgcmV0dXJuIE5VTEw7CiAJcHZyMl9pb3JlYWRfc2V0dXAoY3Asc3AtPnN0cmVhbSk7CiAJcHZyMl9pb3JlYWRfc2V0X3N5bmNfa2V5KGNwLHN0cmVhbV9zeW5jX2tleSxzaXplb2Yoc3RyZWFtX3N5bmNfa2V5KSk7CiAJcmV0dXJuIGNwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCmluZGV4IGQ1ZGY5ZmIuLmZiNjE5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogLyogUmV0cmlldmUgdGhlIGNvbnRyb2wncyBuYW1lICovCiBjb25zdCBjaGFyICpwdnIyX2N0cmxfZ2V0X25hbWUoc3RydWN0IHB2cjJfY3RybCAqY3B0cikKIHsKLQlpZiAoIWNwdHIpIHJldHVybiAwOworCWlmICghY3B0cikgcmV0dXJuIE5VTEw7CiAJcmV0dXJuIGNwdHItPmluZm8tPm5hbWU7CiB9CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogLyogUmV0cmlldmUgdGhlIGNvbnRyb2wncyBkZXNjICovCiBjb25zdCBjaGFyICpwdnIyX2N0cmxfZ2V0X2Rlc2Moc3RydWN0IHB2cjJfY3RybCAqY3B0cikKIHsKLQlpZiAoIWNwdHIpIHJldHVybiAwOworCWlmICghY3B0cikgcmV0dXJuIE5VTEw7CiAJcmV0dXJuIGNwdHItPmluZm8tPmRlc2M7CiB9CiAKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiAJTE9DS19UQUtFKGNwdHItPmhkdy0+YmlnX2xvY2spOyBkbyB7CiAJCWlmIChjcHRyLT5pbmZvLT50eXBlID09IHB2cjJfY3RsX2ludCkgewotCQkJcmV0ID0gcGFyc2VfdG9rZW4ocHRyLGxlbix2YWxwdHIsMCwwKTsKKwkJCXJldCA9IHBhcnNlX3Rva2VuKHB0cixsZW4sdmFscHRyLE5VTEwsMCk7CiAJCQlpZiAoKHJldCA+PSAwKSAmJgogCQkJICAgICgoKnZhbHB0ciA8IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5taW5fdmFsdWUpIHx8CiAJCQkgICAgICgqdmFscHRyID4gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1heF92YWx1ZSkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYwppbmRleCAyN2VhZGFmLi5jODBjMjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKQEAgLTEzOSw4ICsxMzksOCBAQAogCiBzdGF0aWMgdm9pZCBkZWNvZGVyX2RldGFjaChzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKIHsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSAwOwotCWN0eHQtPmhkdy0+ZGVjb2Rlcl9jdHJsID0gMDsKKwljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOworCWN0eHQtPmhkdy0+ZGVjb2Rlcl9jdHJsID0gTlVMTDsKIAlrZnJlZShjdHh0KTsKIH0KIApAQCAtMjIxLDcgKzIyMSw3IEBACiBzdGF0aWMgdm9pZCBkZWNvZGVyX3Jlc2V0KHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQogewogCWludCByZXQ7Ci0JcmV0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9SRVNFVCwwKTsKKwlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1JFU0VULE5VTEwpOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NDAgZGVjb2Rlcl9yZXNldCAocmV0PSVkKSIscmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKaW5kZXggNTg2OTAwZS4uZjk4NWYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCkBAIC04Miw3ICs4Miw3IEBACiAJdW5zaWduZWQgaW50IHdsZW47CiAJdW5zaWduZWQgaW50IHNjbnQ7CiAKLQl3cHRyID0gMDsKKwl3cHRyID0gTlVMTDsKIAl3bGVuID0gMDsKIAlzY250ID0gZGVidWdpZmNfY291bnRfd2hpdGVzcGFjZShidWYsY291bnQpOwogCWNvbnN1bWVfY250ICs9IHNjbnQ7IGNvdW50IC09IHNjbnQ7IGJ1ZiArPSBzY250OwpAQCAtMzM3LDggKzMzNyw4IEBACiB9CiAKIAotaW50IHB2cjJfZGVidWdpZmNfZG8xY21kKHN0cnVjdCBwdnIyX2hkdyAqaGR3LGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgaW50IHB2cjJfZGVidWdpZmNfZG8xY21kKHN0cnVjdCBwdnIyX2hkdyAqaGR3LGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJY29uc3QgY2hhciAqd3B0cjsKIAl1bnNpZ25lZCBpbnQgd2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlbW9kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZW1vZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njg2NTY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlbW9kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqCi0gKiAgJElkJAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAicHZydXNiMi5oIgotI2luY2x1ZGUgInB2cnVzYjItdXRpbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVtb2QuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLQotc3RydWN0IHB2cjJfZGVtb2RfaGFuZGxlciB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGkyY19oYW5kbGVyOwotCWludCB0eXBlX3VwZGF0ZV9mbDsKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2NvbmZpZyhzdHJ1Y3QgcHZyMl9kZW1vZF9oYW5kbGVyICpjdHh0KQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCWludCBjZmcgPSAwOwotCi0Jc3dpdGNoIChoZHctPnR1bmVyX3R5cGUpIHsKLQljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOgotCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMzZfTUszOgotCQljZmcgPSBUREE5ODg3X1BPUlQxX0FDVElWRXxUREE5ODg3X1BPUlQyX0FDVElWRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGRlbW9kIHNldF9jb25maWcoMHgleCkiLGNmZyk7Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVERBOTg4N19TRVRfQ09ORklHLCZjZmcpOwotCWN0eHQtPnR5cGVfdXBkYXRlX2ZsID0gMDsKLX0KLQotCi1zdGF0aWMgaW50IGRlbW9kX2NoZWNrKHN0cnVjdCBwdnIyX2RlbW9kX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JaWYgKGhkdy0+dHVuZXJfdXBkYXRlZCkgY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAhMDsKLQlyZXR1cm4gY3R4dC0+dHlwZV91cGRhdGVfZmwgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkZW1vZF91cGRhdGUoc3RydWN0IHB2cjJfZGVtb2RfaGFuZGxlciAqY3R4dCkKLXsKLQlpZiAoY3R4dC0+dHlwZV91cGRhdGVfZmwpIHNldF9jb25maWcoY3R4dCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgZGVtb2RfZGV0YWNoKHN0cnVjdCBwdnIyX2RlbW9kX2hhbmRsZXIgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gMDsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbW9kX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2RlbW9kX2hhbmRsZXIgKmN0eHQsY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLWRlbW9kIik7Ci19Ci0KLQotY29uc3Qgc3RhdGljIHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyB0dW5lcl9mdW5jcyA9IHsKLQkuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpZGVtb2RfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpZGVtb2RfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKWRlbW9kX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpZGVtb2RfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY19kZW1vZF9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl9kZW1vZF9oYW5kbGVyICpjdHh0OwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga21hbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0JbWVtc2V0KGN0eHQsMCxzaXplb2YoKmN0eHQpKTsKLQotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aTJjX2hhbmRsZXIuZnVuY190YWJsZSA9ICZ0dW5lcl9mdW5jczsKLQljdHh0LT50eXBlX3VwZGF0ZV9mbCA9ICEwOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5pMmNfaGFuZGxlcjsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IHRkYTk4ODcgVjRMMiBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVtb2QuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlbW9kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNGU0MGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVtb2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKgotICogICRJZCQKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLSNpZm5kZWYgX19QVlJVU0IyX0RFTU9EX0gKLSNkZWZpbmUgX19QVlJVU0IyX0RFTU9EX0gKLQotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLQotaW50IHB2cjJfaTJjX2RlbW9kX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci0KLSNlbmRpZiAvKiBfX1BWUlVTQjJfREVNT0RfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5jCmluZGV4IDk0ZDM4M2YuLjZjZmY4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5jCkBAIC01OCw3ICs1OCw3IEBACiAJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAogCQkJICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCiAJCQkgICAiIHJlcXVpcmVkIHRvIHJlYWQgZWVwcm9tIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAl0cmFjZV9lZXByb20oIlZhbHVlIGZvciBlZXByb20gYWRkciBmcm9tIGNvbnRyb2xsZXIgd2FzIDB4JXgiLApAQCAtMTA4LDcgKzEwOCw3IEBACiAJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKIAkJCQkgICAiZWVwcm9tIGZldGNoIHNldCBvZmZzIGVycj0lZCIscmV0KTsKIAkJCWtmcmVlKGVlcHJvbSk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJfQogCXJldHVybiBlZXByb207CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKaW5kZXggMmNjMzE2OS4uMThhNzA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwpAQCAtNjUsNyArNjUsNyBAQAogCQl9CiAJCXJldCA9IHB2cjJfc2VuZF9yZXF1ZXN0KGhkdywKIAkJCQkJaGR3LT5jbWRfYnVmZmVyLDErKGNodW5rQ250KjcpLAotCQkJCQkwLDApOworCQkJCQlOVUxMLDApOwogCQlpZiAocmV0KSByZXR1cm4gcmV0OwogCQlkYXRhICs9IGNodW5rQ250OwogCQlkbGVuIC09IGNodW5rQ250OwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJfQogCiAJcmV0ID0gY3gyMzQxeF91cGRhdGUoaGR3LHB2cjJfZW5jb2Rlcl9jbWQsCi0JCQkgICAgIChoZHctPmVuY19jdXJfdmFsaWQgPyAmaGR3LT5lbmNfY3VyX3N0YXRlIDogMCksCisJCQkgICAgIChoZHctPmVuY19jdXJfdmFsaWQgPyAmaGR3LT5lbmNfY3VyX3N0YXRlIDogTlVMTCksCiAJCQkgICAgICZoZHctPmVuY19jdGxfc3RhdGUpOwogCWlmIChyZXQpIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCmluZGV4IGJhMmFmYmYuLjBkNmRjMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCkBAIC0zNTQsMjMgKzM1NCw2IEBACiAJdW5zaWduZWQgaW50IGNvbnRyb2xfY250OwogfTsKIAotaW50IHB2cjJfaGR3X2NvbW1pdF9jdGxfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpOwotCi11bnNpZ25lZCBpbnQgcHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXNfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICopOwotCi12b2lkIHB2cjJfaGR3X3N1YnN5c19iaXRfY2hnX25vX2xvY2soc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG1zayx1bnNpZ25lZCBsb25nIHZhbCk7Ci12b2lkIHB2cjJfaGR3X3N1YnN5c19zdHJlYW1fYml0X2NoZ19ub19sb2NrKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBtc2ssCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCk7Ci0KLXZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfZmluZF9zdGRlbnVtKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKLXZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfc2V0X3N0ZF9hdmFpbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7Ci0KLWludCBwdnIyX2kyY19iYXNpY19vcChzdHJ1Y3QgcHZyMl9oZHcgKix1OCBpMmNfYWRkciwKLQkJICAgICAgdTggKndkYXRhLHUxNiB3bGVuLAotCQkgICAgICB1OCAqcmRhdGEsdTE2IHJsZW4pOwotCiAjZW5kaWYgLyogX19QVlJVU0IyX0hEV19JTlRFUk5BTF9IICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IDY0M2M0NzEuLjliNDhhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC02Myw3ICs2Myw2IEBACiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfMjR4eHhbXSA9IHsKIAkiY3gyNTg0MCIsCiAJInR1bmVyIiwKLQkidGRhOTg4NyIsCiAJIndtODc3NSIsCiB9OwogI2VuZGlmCkBAIC03Myw3ICs3Miw2IEBACiAJIm1zcDM0MDAiLAogCSJzYWE3MTE1IiwKIAkidHVuZXIiLAotCSJ0ZGE5ODg3IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHZyMl9zdHJpbmdfdGFibGUgcHZyMl9jbGllbnRfbGlzdHNbXSA9IHsKQEAgLTg5LDggKzg3LDggQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwdnIyX2hkdyAqdW5pdF9wb2ludGVyc1tQVlJfTlVNXSA9IHtbIDAgLi4uIFBWUl9OVU0tMSBdID0gMH07Ci1ERUNMQVJFX01VVEVYKHB2cjJfdW5pdF9zZW0pOworc3RhdGljIHN0cnVjdCBwdnIyX2hkdyAqdW5pdF9wb2ludGVyc1tQVlJfTlVNXSA9IHtbIDAgLi4uIFBWUl9OVU0tMSBdID0gTlVMTH07CitzdGF0aWMgREVDTEFSRV9NVVRFWChwdnIyX3VuaXRfc2VtKTsKIAogc3RhdGljIGludCBjdGxjaGcgPSAwOwogc3RhdGljIGludCBpbml0dXNicmVzZXQgPSAxOwpAQCAtMjYzLDYgKzI2MSwyNSBAQAogCVtQVlIyX1NVQlNZU19CX0VOQ19SVU5dID0gImVuY19ydW4iLAogfTsKIAorc3RhdGljIGludCBwdnIyX2hkd19jbWRfdXNic3RyZWFtKHN0cnVjdCBwdnIyX2hkdyAqaGR3LGludCBydW5GbCk7CitzdGF0aWMgaW50IHB2cjJfaGR3X2NvbW1pdF9jdGxfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpOworc3RhdGljIGludCBwdnIyX2hkd19nZXRfZWVwcm9tX2FkZHIoc3RydWN0IHB2cjJfaGR3ICpoZHcpOworc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX2hkd19nZXRfc2lnbmFsX3N0YXR1c19pbnRlcm5hbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CitzdGF0aWMgdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9maW5kX3N0ZGVudW0oc3RydWN0IHB2cjJfaGR3ICpoZHcpOworc3RhdGljIHZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfc2V0X3N0ZF9hdmFpbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CitzdGF0aWMgdm9pZCBwdnIyX2hkd19yZW5kZXJfdXNlbGVzc191bmxvY2tlZChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CitzdGF0aWMgdm9pZCBwdnIyX2hkd19zdWJzeXNfYml0X2NoZ19ub19sb2NrKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBtc2ssCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCk7CitzdGF0aWMgdm9pZCBwdnIyX2hkd19zdWJzeXNfc3RyZWFtX2JpdF9jaGdfbm9fbG9jayhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbXNrLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB2YWwpOworc3RhdGljIGludCBwdnIyX3NlbmRfcmVxdWVzdF9leChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQl1bnNpZ25lZCBpbnQgdGltZW91dCxpbnQgcHJvYmVfZmwsCisJCQkJdm9pZCAqd3JpdGVfZGF0YSx1bnNpZ25lZCBpbnQgd3JpdGVfbGVuLAorCQkJCXZvaWQgKnJlYWRfZGF0YSx1bnNpZ25lZCBpbnQgcmVhZF9sZW4pOworc3RhdGljIGludCBwdnIyX3dyaXRlX3UxNihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTE2IGRhdGEsIGludCByZXMpOworc3RhdGljIGludCBwdnIyX3dyaXRlX3U4KHN0cnVjdCBwdnIyX2hkdyAqaGR3LCB1OCBkYXRhLCBpbnQgcmVzKTsKIAogc3RhdGljIGludCBjdHJsX2NoYW5uZWxmcmVxX2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCiB7CkBAIC00MDUsNyArNDIyLDcgQEAKIAlpbmZvID0gKHN0cnVjdCBwdnIyX2N0bF9pbmZvICopKGNwdHItPmluZm8pOwogCWlmIChxY3RybC5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSkgewogCQlpZiAoaW5mby0+c2V0X3ZhbHVlKSB7Ci0JCQlpbmZvLT5zZXRfdmFsdWUgPSAwOworCQkJaW5mby0+c2V0X3ZhbHVlID0gTlVMTDsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghKGluZm8tPnNldF92YWx1ZSkpIHsKQEAgLTgzNiwxNCArODUzLDYgQEAKIH0KIAogCi1zdHJ1Y3QgcHZyMl9oZHcgKnB2cjJfaGR3X2ZpbmQoaW50IHVuaXRfbnVtYmVyKQotewotCWlmICh1bml0X251bWJlciA8IDApIHJldHVybiAwOwotCWlmICh1bml0X251bWJlciA+PSBQVlJfTlVNKSByZXR1cm4gMDsKLQlyZXR1cm4gdW5pdF9wb2ludGVyc1t1bml0X251bWJlcl07Ci19Ci0KLQogaW50IHB2cjJfaGR3X2dldF91bml0X251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlyZXR1cm4gaGR3LT51bml0X251bWJlcjsKQEAgLTkxNyw5ICs5MjYsOSBAQAogICogaXMgbm90IHN1aXRhYmxlIGZvciBhbiB1c2IgdHJhbnNhY3Rpb24uCiAgKgogICovCi1pbnQgcHZyMl91cGxvYWRfZmlybXdhcmUxKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQorc3RhdGljIGludCBwdnIyX3VwbG9hZF9maXJtd2FyZTEoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CiAJdm9pZCAgKmZ3X3B0cjsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKIAlpbnQgcmV0OwpAQCAtMTAxNSw3ICsxMDI0LDcgQEAKIAogaW50IHB2cjJfdXBsb2FkX2Zpcm13YXJlMihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gMDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKIAl2b2lkICAqZndfcHRyOwogCXVuc2lnbmVkIGludCBwaXBlLCBmd19sZW4sIGZ3X2RvbmU7CiAJaW50IGFjdHVhbF9sZW5ndGg7CkBAIC0xMTY2LDggKzExNzUsOSBAQAogICByZWNvbmZpZ3VyZSBhbmQgc3RhcnQgb3Zlci4KIAogKi8KLXZvaWQgcHZyMl9oZHdfc3Vic3lzX2JpdF9jaGdfbm9fbG9jayhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbXNrLHVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIHZvaWQgcHZyMl9oZHdfc3Vic3lzX2JpdF9jaGdfbm9fbG9jayhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbXNrLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJdW5zaWduZWQgbG9uZyBubXNrOwogCXVuc2lnbmVkIGxvbmcgdm1zazsKQEAgLTEzMTgsMTggKzEzMjgsNiBAQAogfQogCiAKLXZvaWQgcHZyMl9oZHdfc3Vic3lzX2JpdF9zZXQoc3RydWN0IHB2cjJfaGR3ICpoZHcsdW5zaWduZWQgbG9uZyBtc2spCi17Ci0JcHZyMl9oZHdfc3Vic3lzX2JpdF9jaGcoaGR3LG1zayxtc2spOwotfQotCi0KLXZvaWQgcHZyMl9oZHdfc3Vic3lzX2JpdF9jbHIoc3RydWN0IHB2cjJfaGR3ICpoZHcsdW5zaWduZWQgbG9uZyBtc2spCi17Ci0JcHZyMl9oZHdfc3Vic3lzX2JpdF9jaGcoaGR3LG1zaywwKTsKLX0KLQotCiB1bnNpZ25lZCBsb25nIHB2cjJfaGR3X3N1YnN5c19nZXQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJcmV0dXJuIGhkdy0+c3Vic3lzX2VuYWJsZWRfbWFzazsKQEAgLTEzNDIsOSArMTM0MCw5IEBACiB9CiAKIAotdm9pZCBwdnIyX2hkd19zdWJzeXNfc3RyZWFtX2JpdF9jaGdfbm9fbG9jayhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbXNrLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgdm9pZCBwdnIyX2hkd19zdWJzeXNfc3RyZWFtX2JpdF9jaGdfbm9fbG9jayhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbXNrLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWwyOwogCW1zayAmPSBQVlIyX1NVQlNZU19BTEw7CkBAIC0xMzY2LDcgKzEzNjQsNyBAQAogfQogCiAKLWludCBwdnIyX2hkd19zZXRfc3RyZWFtaW5nX25vX2xvY2soc3RydWN0IHB2cjJfaGR3ICpoZHcsaW50IGVuYWJsZUZsKQorc3RhdGljIGludCBwdnIyX2hkd19zZXRfc3RyZWFtaW5nX25vX2xvY2soc3RydWN0IHB2cjJfaGR3ICpoZHcsaW50IGVuYWJsZUZsKQogewogCWlmICgoIWVuYWJsZUZsKSA9PSAhKGhkdy0+ZmxhZ19zdHJlYW1pbmdfZW5hYmxlZCkpIHJldHVybiAwOwogCWlmIChlbmFibGVGbCkgewpAQCAtMTQwMCw4ICsxMzk4LDggQEAKIH0KIAogCi1pbnQgcHZyMl9oZHdfc2V0X3N0cmVhbV90eXBlX25vX2xvY2soc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkJICAgICBlbnVtIHB2cjJfY29uZmlnIGNvbmZpZykKK3N0YXRpYyBpbnQgcHZyMl9oZHdfc2V0X3N0cmVhbV90eXBlX25vX2xvY2soc3RydWN0IHB2cjJfaGR3ICpoZHcsCisJCQkJCSAgICBlbnVtIHB2cjJfY29uZmlnIGNvbmZpZykKIHsKIAl1bnNpZ25lZCBsb25nIHNtID0gaGR3LT5zdWJzeXNfZW5hYmxlZF9tYXNrOwogCWlmICghaGR3LT5mbGFnX29rKSByZXR1cm4gLUVJTzsKQEAgLTE3NDEsNyArMTczOSw3IEBACiAJICAgIHNpemVvZihwdnIyX2RldmljZV9uYW1lcykvc2l6ZW9mKHB2cjJfZGV2aWNlX25hbWVzWzBdKSkgewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKIAkJCSAgICJCb2d1cyBkZXZpY2UgdHlwZSBvZiAldSByZXBvcnRlZCIsaGR3X3R5cGUpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJaGR3ID0ga21hbGxvYyhzaXplb2YoKmhkdyksR0ZQX0tFUk5FTCk7CkBAIC0xOTIyLDM4ICsxOTIwLDM4IEBACiAJCWlmIChoZHctPm1wZWdfY3RybF9pbmZvKSBrZnJlZShoZHctPm1wZWdfY3RybF9pbmZvKTsKIAkJa2ZyZWUoaGR3KTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIAogLyogUmVtb3ZlIF9hbGxfIGFzc29jaWF0aW9ucyBiZXR3ZWVuIHRoaXMgZHJpdmVyIGFuZCB0aGUgdW5kZXJseWluZyBVU0IKICAgIGxheWVyLiAqLwotdm9pZCBwdnIyX2hkd19yZW1vdmVfdXNiX3N0dWZmKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQorc3RhdGljIHZvaWQgcHZyMl9oZHdfcmVtb3ZlX3VzYl9zdHVmZihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlpZiAoaGR3LT5mbGFnX2Rpc2Nvbm5lY3RlZCkgcmV0dXJuOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJwdnIyX2hkd19yZW1vdmVfdXNiX3N0dWZmOiBoZHc9JXAiLGhkdyk7CiAJaWYgKGhkdy0+Y3RsX3JlYWRfdXJiKSB7CiAJCXVzYl9raWxsX3VyYihoZHctPmN0bF9yZWFkX3VyYik7CiAJCXVzYl9mcmVlX3VyYihoZHctPmN0bF9yZWFkX3VyYik7Ci0JCWhkdy0+Y3RsX3JlYWRfdXJiID0gMDsKKwkJaGR3LT5jdGxfcmVhZF91cmIgPSBOVUxMOwogCX0KIAlpZiAoaGR3LT5jdGxfd3JpdGVfdXJiKSB7CiAJCXVzYl9raWxsX3VyYihoZHctPmN0bF93cml0ZV91cmIpOwogCQl1c2JfZnJlZV91cmIoaGR3LT5jdGxfd3JpdGVfdXJiKTsKLQkJaGR3LT5jdGxfd3JpdGVfdXJiID0gMDsKKwkJaGR3LT5jdGxfd3JpdGVfdXJiID0gTlVMTDsKIAl9CiAJaWYgKGhkdy0+Y3RsX3JlYWRfYnVmZmVyKSB7CiAJCWtmcmVlKGhkdy0+Y3RsX3JlYWRfYnVmZmVyKTsKLQkJaGR3LT5jdGxfcmVhZF9idWZmZXIgPSAwOworCQloZHctPmN0bF9yZWFkX2J1ZmZlciA9IE5VTEw7CiAJfQogCWlmIChoZHctPmN0bF93cml0ZV9idWZmZXIpIHsKIAkJa2ZyZWUoaGR3LT5jdGxfd3JpdGVfYnVmZmVyKTsKLQkJaGR3LT5jdGxfd3JpdGVfYnVmZmVyID0gMDsKKwkJaGR3LT5jdGxfd3JpdGVfYnVmZmVyID0gTlVMTDsKIAl9CiAJcHZyMl9oZHdfcmVuZGVyX3VzZWxlc3NfdW5sb2NrZWQoaGR3KTsKIAloZHctPmZsYWdfZGlzY29ubmVjdGVkID0gITA7Ci0JaGR3LT51c2JfZGV2ID0gMDsKLQloZHctPnVzYl9pbnRmID0gMDsKKwloZHctPnVzYl9kZXYgPSBOVUxMOworCWhkdy0+dXNiX2ludGYgPSBOVUxMOwogfQogCiAKQEAgLTE5NjMsMTEgKzE5NjEsMTEgQEAKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwicHZyMl9oZHdfZGVzdHJveTogaGR3PSVwIixoZHcpOwogCWlmIChoZHctPmZ3X2J1ZmZlcikgewogCQlrZnJlZShoZHctPmZ3X2J1ZmZlcik7Ci0JCWhkdy0+ZndfYnVmZmVyID0gMDsKKwkJaGR3LT5md19idWZmZXIgPSBOVUxMOwogCX0KIAlpZiAoaGR3LT52aWRfc3RyZWFtKSB7CiAJCXB2cjJfc3RyZWFtX2Rlc3Ryb3koaGR3LT52aWRfc3RyZWFtKTsKLQkJaGR3LT52aWRfc3RyZWFtID0gMDsKKwkJaGR3LT52aWRfc3RyZWFtID0gTlVMTDsKIAl9CiAJaWYgKGhkdy0+YXVkaW9fc3RhdCkgewogCQloZHctPmF1ZGlvX3N0YXQtPmRldGFjaChoZHctPmF1ZGlvX3N0YXQtPmN0eHQpOwpAQCAtMTk4MSw3ICsxOTc5LDcgQEAKIAkJaWYgKChoZHctPnVuaXRfbnVtYmVyID49IDApICYmCiAJCSAgICAoaGR3LT51bml0X251bWJlciA8IFBWUl9OVU0pICYmCiAJCSAgICAodW5pdF9wb2ludGVyc1toZHctPnVuaXRfbnVtYmVyXSA9PSBoZHcpKSB7Ci0JCQl1bml0X3BvaW50ZXJzW2hkdy0+dW5pdF9udW1iZXJdID0gMDsKKwkJCXVuaXRfcG9pbnRlcnNbaGR3LT51bml0X251bWJlcl0gPSBOVUxMOwogCQl9CiAJfSB3aGlsZSAoMCk7IHVwKCZwdnIyX3VuaXRfc2VtKTsKIAlpZiAoaGR3LT5jb250cm9scykga2ZyZWUoaGR3LT5jb250cm9scyk7CkBAIC0yMDE4LDcgKzIwMTYsNyBAQAogCiAvLyBBdHRlbXB0IHRvIGF1dG9zZWxlY3QgYW4gYXBwcm9wcmlhdGUgdmFsdWUgZm9yIHN0ZF9lbnVtX2N1ciBnaXZlbgogLy8gd2hhdGV2ZXIgaXMgY3VycmVudGx5IGluIHN0ZF9tYXNrX2N1cgotdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9maW5kX3N0ZGVudW0oc3RydWN0IHB2cjJfaGR3ICpoZHcpCitzdGF0aWMgdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9maW5kX3N0ZGVudW0oc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJdW5zaWduZWQgaW50IGlkeDsKIAlmb3IgKGlkeCA9IDE7IGlkeCA8IGhkdy0+c3RkX2VudW1fY250OyBpZHgrKykgewpAQCAtMjAzMyw3ICsyMDMxLDcgQEAKIAogLy8gQ2FsY3VsYXRlIGNvcnJlY3Qgc2V0IG9mIGVudW1lcmF0ZWQgc3RhbmRhcmRzIGJhc2VkIG9uIGN1cnJlbnRseSBrbm93bgogLy8gc2V0IG9mIGF2YWlsYWJsZSBzdGFuZGFyZHMgYml0cy4KLXZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfc2V0X3N0ZF9hdmFpbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2ludGVybmFsX3NldF9zdGRfYXZhaWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJc3RydWN0IHY0bDJfc3RhbmRhcmQgKm5ld3N0ZDsKIAl1bnNpZ25lZCBpbnQgc3RkX2NudDsKQEAgLTIwNDMsMTIgKzIwNDEsMTIgQEAKIAogCWlmIChoZHctPnN0ZF9kZWZzKSB7CiAJCWtmcmVlKGhkdy0+c3RkX2RlZnMpOwotCQloZHctPnN0ZF9kZWZzID0gMDsKKwkJaGR3LT5zdGRfZGVmcyA9IE5VTEw7CiAJfQogCWhkdy0+c3RkX2VudW1fY250ID0gMDsKIAlpZiAoaGR3LT5zdGRfZW51bV9uYW1lcykgewogCQlrZnJlZShoZHctPnN0ZF9lbnVtX25hbWVzKTsKLQkJaGR3LT5zdGRfZW51bV9uYW1lcyA9IDA7CisJCWhkdy0+c3RkX2VudW1fbmFtZXMgPSBOVUxMOwogCX0KIAogCWlmICghc3RkX2NudCkgewpAQCAtMjA5OSw3ICsyMDk3LDcgQEAKIHN0cnVjdCBwdnIyX2N0cmwgKnB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHN0cnVjdCBwdnIyX2hkdyAqaGR3LAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBpZHgpCiB7Ci0JaWYgKGlkeCA+PSBoZHctPmNvbnRyb2xfY250KSByZXR1cm4gMDsKKwlpZiAoaWR4ID49IGhkdy0+Y29udHJvbF9jbnQpIHJldHVybiBOVUxMOwogCXJldHVybiBoZHctPmNvbnRyb2xzICsgaWR4OwogfQogCkBAIC0yMTE4LDcgKzIxMTYsNyBAQAogCQlpID0gY3B0ci0+aW5mby0+aW50ZXJuYWxfaWQ7CiAJCWlmIChpICYmIChpID09IGN0bF9pZCkpIHJldHVybiBjcHRyOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0yMTM1LDcgKzIxMzMsNyBAQAogCQlpID0gY3B0ci0+aW5mby0+djRsX2lkOwogCQlpZiAoaSAmJiAoaSA9PSBjdGxfaWQpKSByZXR1cm4gY3B0cjsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMjE0OSw3ICsyMTQ3LDcgQEAKIAlpbnQgaTsKIAogCS8qIFRoaXMgY291bGQgYmUgbWFkZSBhIGxvdCBtb3JlIGVmZmljaWVudCwgYnV0IGZvciBub3cuLi4gKi8KLQljcDIgPSAwOworCWNwMiA9IE5VTEw7CiAJZm9yIChpZHggPSAwOyBpZHggPCBoZHctPmNvbnRyb2xfY250OyBpZHgrKykgewogCQljcHRyID0gaGR3LT5jb250cm9scyArIGlkeDsKIAkJaSA9IGNwdHItPmluZm8tPnY0bF9pZDsKQEAgLTIxNTksNyArMjE1Nyw3IEBACiAJCWNwMiA9IGNwdHI7CiAJfQogCXJldHVybiBjcDI7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMjE4Miw3ICsyMTgwLDcgQEAKICAgIHN0YXRlKHMpIGJhY2sgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWUgYmVmb3JlIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4KICAgIFRodXMgd2UgY2FuIGF1dG9tYXRpY2FsbHkgcmVjb25maWd1cmUgYWZmZWN0ZWQgcGllY2VzIG9mIHRoZSBkcml2ZXIgYXMKICAgIGNvbnRyb2xzIGFyZSBjaGFuZ2VkLiAqLwotaW50IHB2cjJfaGR3X2NvbW1pdF9jdGxfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCitzdGF0aWMgaW50IHB2cjJfaGR3X2NvbW1pdF9jdGxfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJdW5zaWduZWQgbG9uZyBzYXZlZF9zdWJzeXNfbWFzayA9IGhkdy0+c3Vic3lzX2VuYWJsZWRfbWFzazsKIAl1bnNpZ25lZCBsb25nIHN0YWxlX3N1YnN5c19tYXNrID0gMDsKQEAgLTIzMjEsMTQgKzIzMTksNiBAQAogfQogCiAKLXZvaWQgcHZyMl9oZHdfcG9sbF90cmlnZ2VyKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewotCQlwdnIyX2hkd19wb2xsX3RyaWdnZXJfdW5sb2NrZWQoaGR3KTsKLQl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwotfQotCi0KIC8qIFJldHVybiBuYW1lIGZvciB0aGlzIGRyaXZlciBpbnN0YW5jZSAqLwogY29uc3QgY2hhciAqcHZyMl9oZHdfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewpAQCAtMjMzNyw3ICsyMzI3LDcgQEAKIAogCiAvKiBSZXR1cm4gYml0IG1hc2sgaW5kaWNhdGluZyBzaWduYWwgc3RhdHVzICovCi11bnNpZ25lZCBpbnQgcHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXNfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCitzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaGR3X2dldF9zaWduYWxfc3RhdHVzX2ludGVybmFsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCXVuc2lnbmVkIGludCBtc2sgPSAwOwogCXN3aXRjaCAoaGR3LT5pbnB1dF92YWwpIHsKQEAgLTI0MjQsNyArMjQxNCw3IEBACiAJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRklSTVdBUkUsCiAJCQkJICAgIkNsZWFuaW5nIHVwIGFmdGVyIENQVSBmaXJtd2FyZSBmZXRjaCIpOwogCQkJa2ZyZWUoaGR3LT5md19idWZmZXIpOwotCQkJaGR3LT5md19idWZmZXIgPSAwOworCQkJaGR3LT5md19idWZmZXIgPSBOVUxMOwogCQkJaGR3LT5md19zaXplID0gMDsKIAkJCS8qIE5vdyByZWxlYXNlIHRoZSBDUFUuICBJdCB3aWxsIGRpc2Nvbm5lY3QgYW5kCiAJCQkgICByZWNvbm5lY3QgbGF0ZXIuICovCkBAIC0yNTE5LDIyICsyNTA5LDYgQEAKIH0KIAogCi12b2lkIHB2cjJfcmVzZXRfY3RsX2VuZHBvaW50cyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlpZiAoIWhkdy0+dXNiX2RldikgcmV0dXJuOwotCXVzYl9zZXR0b2dnbGUoaGR3LT51c2JfZGV2LCBQVlIyX0NUTF9XUklURV9FTkRQT0lOVCAmIDB4ZiwKLQkJICAgICAgIShQVlIyX0NUTF9XUklURV9FTkRQT0lOVCAmIFVTQl9ESVJfSU4pLCAwKTsKLQl1c2Jfc2V0dG9nZ2xlKGhkdy0+dXNiX2RldiwgUFZSMl9DVExfUkVBRF9FTkRQT0lOVCAmIDB4ZiwKLQkJICAgICAgIShQVlIyX0NUTF9SRUFEX0VORFBPSU5UICYgVVNCX0RJUl9JTiksIDApOwotCXVzYl9jbGVhcl9oYWx0KGhkdy0+dXNiX2RldiwKLQkJICAgICAgIHVzYl9yY3ZidWxrcGlwZShoZHctPnVzYl9kZXYsCi0JCQkJICAgICAgIFBWUjJfQ1RMX1JFQURfRU5EUE9JTlQgJiAweDdmKSk7Ci0JdXNiX2NsZWFyX2hhbHQoaGR3LT51c2JfZGV2LAotCQkgICAgICAgdXNiX3NuZGJ1bGtwaXBlKGhkdy0+dXNiX2RldiwKLQkJCQkgICAgICAgUFZSMl9DVExfV1JJVEVfRU5EUE9JTlQgJiAweDdmKSk7Ci19Ci0KLQogc3RhdGljIHZvaWQgcHZyMl9jdGxfd3JpdGVfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IHVyYi0+Y29udGV4dDsKQEAgLTI1NjgsMTAgKzI1NDIsMTAgQEAKIH0KIAogCi1pbnQgcHZyMl9zZW5kX3JlcXVlc3RfZXgoc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkgdW5zaWduZWQgaW50IHRpbWVvdXQsaW50IHByb2JlX2ZsLAotCQkJIHZvaWQgKndyaXRlX2RhdGEsdW5zaWduZWQgaW50IHdyaXRlX2xlbiwKLQkJCSB2b2lkICpyZWFkX2RhdGEsdW5zaWduZWQgaW50IHJlYWRfbGVuKQorc3RhdGljIGludCBwdnIyX3NlbmRfcmVxdWVzdF9leChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQl1bnNpZ25lZCBpbnQgdGltZW91dCxpbnQgcHJvYmVfZmwsCisJCQkJdm9pZCAqd3JpdGVfZGF0YSx1bnNpZ25lZCBpbnQgd3JpdGVfbGVuLAorCQkJCXZvaWQgKnJlYWRfZGF0YSx1bnNpZ25lZCBpbnQgcmVhZF9sZW4pCiB7CiAJdW5zaWduZWQgaW50IGlkeDsKIAlpbnQgc3RhdHVzID0gMDsKQEAgLTI4MjYsNyArMjgwMCw3IEBACiB9CiAKIAotaW50IHB2cjJfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTE2IHJlZywgdTMyICpkYXRhKQorc3RhdGljIGludCBwdnIyX3JlYWRfcmVnaXN0ZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHUxNiByZWcsIHUzMiAqZGF0YSkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjg1MCw3ICsyODI0LDcgQEAKIH0KIAogCi1pbnQgcHZyMl93cml0ZV91MTYoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHUxNiBkYXRhLCBpbnQgcmVzKQorc3RhdGljIGludCBwdnIyX3dyaXRlX3UxNihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTE2IGRhdGEsIGludCByZXMpCiB7CiAJaW50IHJldDsKIApAQCAtMjg2Nyw3ICsyODQxLDcgQEAKIH0KIAogCi1pbnQgcHZyMl93cml0ZV91OChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTggZGF0YSwgaW50IHJlcykKK3N0YXRpYyBpbnQgcHZyMl93cml0ZV91OChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTggZGF0YSwgaW50IHJlcykKIHsKIAlpbnQgcmV0OwogCkBAIC0yODgzLDEzICsyODU3LDEzIEBACiB9CiAKIAotdm9pZCBwdnIyX2hkd19yZW5kZXJfdXNlbGVzc191bmxvY2tlZChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3N0YXRpYyB2b2lkIHB2cjJfaGR3X3JlbmRlcl91c2VsZXNzX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCWlmICghaGR3LT5mbGFnX29rKSByZXR1cm47CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsInJlbmRlcl91c2VsZXNzIik7CiAJaGR3LT5mbGFnX29rID0gMDsKIAlpZiAoaGR3LT52aWRfc3RyZWFtKSB7Ci0JCXB2cjJfc3RyZWFtX3NldHVwKGhkdy0+dmlkX3N0cmVhbSwwLDAsMCk7CisJCXB2cjJfc3RyZWFtX3NldHVwKGhkdy0+dmlkX3N0cmVhbSxOVUxMLDAsMCk7CiAJfQogCWhkdy0+ZmxhZ19zdHJlYW1pbmdfZW5hYmxlZCA9IDA7CiAJaGR3LT5zdWJzeXNfZW5hYmxlZF9tYXNrID0gMDsKQEAgLTI5MDgsNyArMjg4Miw3IEBACiB7CiAJaW50IHJldDsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwiUGVyZm9ybWluZyBhIGRldmljZSByZXNldC4uLiIpOwotCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoaGR3LT51c2JfZGV2LDApOworCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoaGR3LT51c2JfZGV2LE5VTEwpOwogCWlmIChyZXQgPT0gMSkgewogCQlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKGhkdy0+dXNiX2Rldik7CiAJCXVzYl91bmxvY2tfZGV2aWNlKGhkdy0+dXNiX2Rldik7CkBAIC0yOTU3LDcgKzI5MzEsNyBAQAogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwiUmVxdWVzdGluZyB1cHJvYyBoYXJkIHJlc2V0Iik7CiAJCWhkdy0+ZmxhZ19vayA9ICEwOwogCQloZHctPmNtZF9idWZmZXJbMF0gPSAweGRkOwotCQlzdGF0dXMgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsaGR3LT5jbWRfYnVmZmVyLDEsMCwwKTsKKwkJc3RhdHVzID0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwxLE5VTEwsMCk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmN0bF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjk2OSw3ICsyOTQzLDcgQEAKIAlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7IGRvIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsIlJlcXVlc3RpbmcgcG93ZXJ1cCIpOwogCQloZHctPmNtZF9idWZmZXJbMF0gPSAweGRlOwotCQlzdGF0dXMgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsaGR3LT5jbWRfYnVmZmVyLDEsMCwwKTsKKwkJc3RhdHVzID0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwxLE5VTEwsMCk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmN0bF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjk5NiwxMiArMjk3MCwxMiBAQAogfQogCiAKLWludCBwdnIyX2hkd19jbWRfdXNic3RyZWFtKHN0cnVjdCBwdnIyX2hkdyAqaGR3LGludCBydW5GbCkKK3N0YXRpYyBpbnQgcHZyMl9oZHdfY21kX3VzYnN0cmVhbShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxpbnQgcnVuRmwpCiB7CiAJaW50IHN0YXR1czsKIAlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7IGRvIHsKIAkJaGR3LT5jbWRfYnVmZmVyWzBdID0gKHJ1bkZsID8gMHgzNiA6IDB4MzcpOwotCQlzdGF0dXMgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsaGR3LT5jbWRfYnVmZmVyLDEsMCwwKTsKKwkJc3RhdHVzID0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwxLE5VTEwsMCk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmN0bF9sb2NrKTsKIAlpZiAoIXN0YXR1cykgewogCQloZHctPnN1YnN5c19lbmFibGVkX21hc2sgPQpAQCAtMzA5NCw3ICszMDY4LDcgQEAKIH0KIAogCi1pbnQgcHZyMl9oZHdfZ2V0X2VlcHJvbV9hZGRyKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQorc3RhdGljIGludCBwdnIyX2hkd19nZXRfZWVwcm9tX2FkZHIoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJaW50IHJlc3VsdDsKIAlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7IGRvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggNjNmNTI5MS4uZmQ5MzFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTkxLDcgKzkxLDYgQEAKIHZvaWQgcHZyMl9oZHdfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKIC8qIFRyaWdnZXIgYSBwb2xsIHRvIHRha2UgcGxhY2UgbGF0ZXIgYXQgYSBjb252ZW5pZW50IHRpbWUgKi8KLXZvaWQgcHZyMl9oZHdfcG9sbF90cmlnZ2VyKHN0cnVjdCBwdnIyX2hkdyAqKTsKIHZvaWQgcHZyMl9oZHdfcG9sbF90cmlnZ2VyX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAogLyogUmVnaXN0ZXIgYSBjYWxsYmFjayB1c2VkIHRvIHRyaWdnZXIgYSBmdXR1cmUgcG9sbCAqLwpAQCAtOTksOSArOTgsNiBAQAogCQkJCSB2b2lkICgqZnVuYykodm9pZCAqKSwKIAkJCQkgdm9pZCAqZGF0YSk7CiAKLS8qIEdldCBwb2ludGVyIHRvIHN0cnVjdHVyZSBnaXZlbiB1bml0IG51bWJlciAqLwotc3RydWN0IHB2cjJfaGR3ICpwdnIyX2hkd19maW5kKGludCB1bml0X251bWJlcik7Ci0KIC8qIERlc3Ryb3kgaGFyZHdhcmUgaW50ZXJhY3Rpb24gc3RydWN0dXJlICovCiB2b2lkIHB2cjJfaGR3X2Rlc3Ryb3koc3RydWN0IHB2cjJfaGR3ICopOwogCkBAIC0xODAsMTIgKzE3Niw2IEBACiB2b2lkIHB2cjJfaGR3X3N1YnN5c19iaXRfY2hnKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAogCQkJICAgICB1bnNpZ25lZCBsb25nIG1zayx1bnNpZ25lZCBsb25nIHZhbCk7CiAKLS8qIFNob3J0Y3V0IGZvciBwdnIyX2hkd19zdWJzeXNfYml0X2NoZyhoZHcsbXNrLG1zaykgKi8KLXZvaWQgcHZyMl9oZHdfc3Vic3lzX2JpdF9zZXQoc3RydWN0IHB2cjJfaGR3ICpoZHcsdW5zaWduZWQgbG9uZyBtc2spOwotCi0vKiBTaG9ydGN1dCBmb3IgcHZyMl9oZHdfc3Vic3lzX2JpdF9jaGcoaGR3LG1zaywwKSAqLwotdm9pZCBwdnIyX2hkd19zdWJzeXNfYml0X2NscihzdHJ1Y3QgcHZyMl9oZHcgKmhkdyx1bnNpZ25lZCBsb25nIG1zayk7Ci0KIC8qIFJldHJpZXZlIG1hc2sgaW5kaWNhdGluZyB3aGljaCBwaWVjZXMgb2YgaGFyZHdhcmUgYXJlIGN1cnJlbnRseSBlbmFibGVkCiAgICAvIGNvbmZpZ3VyZWQuICovCiB1bnNpZ25lZCBsb25nIHB2cjJfaGR3X3N1YnN5c19nZXQoc3RydWN0IHB2cjJfaGR3ICopOwpAQCAtMjI1LDM0ICsyMTUsMTggQEAKIC8qIFRoZSBmb2xsb3dpbmcgZW50cnkgcG9pbnRzIGFyZSBhbGwgbG93ZXIgbGV2ZWwgdGhpbmdzIHlvdSBub3JtYWxseSBkb24ndAogICAgd2FudCB0byB3b3JyeSBhYm91dC4gKi8KIAotLyogQXR0ZW1wdCB0byByZWNvdmVyIGZyb20gYSBVU0IgZm91bC11cCAoaW4gcHJhY3RpY2UgSSBmaW5kIHRoYXQgaWYgeW91Ci0gICBoYXZlIHRvIGRvIHRoaXMsIHRoZW4gaXQncyBhbHJlYWR5IHRvbyBsYXRlKS4gKi8KLXZvaWQgcHZyMl9yZXNldF9jdGxfZW5kcG9pbnRzKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKLQogLyogSXNzdWUgYSBjb21tYW5kIGFuZCBnZXQgYSByZXNwb25zZSBmcm9tIHRoZSBkZXZpY2UuICBMT1RTIG9mIGhpZ2hlcgogICAgbGV2ZWwgc3R1ZmYgaXMgYnVpbHQgb24gdGhpcy4gKi8KIGludCBwdnIyX3NlbmRfcmVxdWVzdChzdHJ1Y3QgcHZyMl9oZHcgKiwKIAkJICAgICAgdm9pZCAqd3JpdGVfcHRyLHVuc2lnbmVkIGludCB3cml0ZV9sZW4sCiAJCSAgICAgIHZvaWQgKnJlYWRfcHRyLHVuc2lnbmVkIGludCByZWFkX2xlbik7CiAKLS8qIElzc3VlIGEgY29tbWFuZCBhbmQgZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgZGV2aWNlLiAgVGhpcyBleHRlbmRlZAotICAgdmVyc2lvbiBpbmNsdWRlcyBhIHByb2JlIGZsYWcgKHdoaWNoIGlmIHNldCBtZWFucyB0aGF0IGRldmljZSBlcnJvcnMKLSAgIHNob3VsZCBub3QgYmUgbG9nZ2VkIG9yIHRyZWF0ZWQgYXMgZmF0YWwpIGFuZCBhIHRpbWVvdXQgaW4gamlmZmllcy4KLSAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gbm9uLWxldGhhbGx5IHByb2JlIHRoZSBoZWFsdGggb2YgZW5kcG9pbnQgMS4gKi8KLWludCBwdnIyX3NlbmRfcmVxdWVzdF9leChzdHJ1Y3QgcHZyMl9oZHcgKix1bnNpZ25lZCBpbnQgdGltZW91dCxpbnQgcHJvYmVfZmwsCi0JCQkgdm9pZCAqd3JpdGVfcHRyLHVuc2lnbmVkIGludCB3cml0ZV9sZW4sCi0JCQkgdm9pZCAqcmVhZF9wdHIsdW5zaWduZWQgaW50IHJlYWRfbGVuKTsKLQogLyogU2xpZ2h0bHkgaGlnaGVyIGxldmVsIGRldmljZSBjb21tdW5pY2F0aW9uIGZ1bmN0aW9ucy4gKi8KIGludCBwdnIyX3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBwdnIyX2hkdyAqLCB1MTYsIHUzMik7Ci1pbnQgcHZyMl9yZWFkX3JlZ2lzdGVyKHN0cnVjdCBwdnIyX2hkdyAqLCB1MTYsIHUzMiAqKTsKLWludCBwdnIyX3dyaXRlX3UxNihzdHJ1Y3QgcHZyMl9oZHcgKiwgdTE2LCBpbnQpOwotaW50IHB2cjJfd3JpdGVfdTgoc3RydWN0IHB2cjJfaGR3ICosIHU4LCBpbnQpOwogCiAvKiBDYWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIGNhbid0IHRhbGsgdG8gdGhlIGhhcmR3YXJlIGFueW1vcmUgLSB0aGlzIHdpbGwKICAgIGNhdXNlIHRoZSBkcml2ZXIgdG8gc3RvcCBmbGFpbGluZyBvbiB0aGUgZGV2aWNlLiAqLwogdm9pZCBwdnIyX2hkd19yZW5kZXJfdXNlbGVzcyhzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaGR3X3JlbmRlcl91c2VsZXNzX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAogLyogU2V0IC8gY2xlYXIgODA1MSdzIHJlc2V0IGJpdCAqLwogdm9pZCBwdnIyX2hkd19jcHVyZXNldF9hc3NlcnQoc3RydWN0IHB2cjJfaGR3ICosaW50KTsKQEAgLTI3MSwxMiArMjQ1LDYgQEAKIC8qIE9yZGVyIGRlY29kZXIgdG8gcmVzZXQgKi8KIGludCBwdnIyX2hkd19jbWRfZGVjb2Rlcl9yZXNldChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKLS8qIFN0b3AgLyBzdGFydCB2aWRlbyBzdHJlYW0gdHJhbnNwb3J0ICovCi1pbnQgcHZyMl9oZHdfY21kX3VzYnN0cmVhbShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxpbnQgcnVuRmwpOwotCi0vKiBGaW5kIEkyQyBhZGRyZXNzIG9mIGVlcHJvbSAqLwotaW50IHB2cjJfaGR3X2dldF9lZXByb21fYWRkcihzdHJ1Y3QgcHZyMl9oZHcgKik7Ci0KIC8qIERpcmVjdCBtYW5pcHVsYXRpb24gb2YgR1BJTyBiaXRzICovCiBpbnQgcHZyMl9oZHdfZ3Bpb19nZXRfZGlyKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHUzMiAqKTsKIGludCBwdnIyX2hkd19ncGlvX2dldF9vdXQoc3RydWN0IHB2cjJfaGR3ICpoZHcsdTMyICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKaW5kZXggMWRkNGY2Mi4uZmJlNjAzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWF1ZGlvLmgiCiAjaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVtb2QuaCIKICNpbmNsdWRlICJwdnJ1c2IyLXZpZGVvLXY0bC5oIgogI2lmZGVmIENPTkZJR19WSURFT19QVlJVU0IyXzI0WFhYCiAjaW5jbHVkZSAicHZydXNiMi1jeDI1ODR4LXY0bC5oIgpAQCAtODksMTEgKzg4LDYgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX1REQTk4ODcpIHsKLQkJaWYgKHB2cjJfaTJjX2RlbW9kX3NldHVwKGhkdyxjcCkpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCmluZGV4IDlmODFhZmYuLjhhOTkzM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIHN0YXRpYyB2b2lkIGRvX2xvZyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIGRvX2xvZygpIik7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19MT0dfU1RBVFVTLDApOworCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfTE9HX1NUQVRVUyxOVUxMKTsKIAogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAKIHZvaWQgcHZyMl92NGwyX2NtZF9zdHJlYW0oc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsaW50IGZsKQogewogCXB2cjJfaTJjX2NsaWVudF9jbWQoY3AsCi0JCQkgICAgKGZsID8gVklESU9DX1NUUkVBTU9OIDogVklESU9DX1NUUkVBTU9GRiksMCk7CisJCQkgICAgKGZsID8gVklESU9DX1NUUkVBTU9OIDogVklESU9DX1NUUkVBTU9GRiksTlVMTCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggYzhkMGJkZS4uN2ZjYTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC0zNyw2ICszNywxMCBAQAogbW9kdWxlX3BhcmFtKGkyY19zY2FuLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGkyY19zY2FuLCJzY2FuIGkyYyBidXMgYXQgaW5zbW9kIHRpbWUiKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGRldGFpbCwKKwkJCQkJICAgICBjaGFyICpidWYsdW5zaWduZWQgaW50IG1heGxlbik7CisKIHN0YXRpYyBpbnQgcHZyMl9pMmNfd3JpdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIC8qIENvbnRleHQgKi8KIAkJCSAgdTggaTJjX2FkZHIsICAgICAgLyogSTJDIGFkZHJlc3Mgd2UncmUgdGFsa2luZyB0byAqLwogCQkJICB1OCAqZGF0YSwgICAgICAgICAvKiBEYXRhIHRvIHdyaXRlICovCkBAIC0xNjUsMTIgKzE2OSwxMiBAQAogCiAvKiBUaGlzIGlzIHRoZSBjb21tb24gbG93IGxldmVsIGVudHJ5IHBvaW50IGZvciBkb2luZyBJMkMgb3BlcmF0aW9ucyB0byB0aGUKICAgIGhhcmR3YXJlLiAqLwotaW50IHB2cjJfaTJjX2Jhc2ljX29wKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAotCQkgICAgICB1OCBpMmNfYWRkciwKLQkJICAgICAgdTggKndkYXRhLAotCQkgICAgICB1MTYgd2xlbiwKLQkJICAgICAgdTggKnJkYXRhLAotCQkgICAgICB1MTYgcmxlbikKK3N0YXRpYyBpbnQgcHZyMl9pMmNfYmFzaWNfb3Aoc3RydWN0IHB2cjJfaGR3ICpoZHcsCisJCQkgICAgIHU4IGkyY19hZGRyLAorCQkJICAgICB1OCAqd2RhdGEsCisJCQkgICAgIHUxNiB3bGVuLAorCQkJICAgICB1OCAqcmRhdGEsCisJCQkgICAgIHUxNiBybGVuKQogewogCWlmICghcmRhdGEpIHJsZW4gPSAwOwogCWlmICghd2RhdGEpIHdsZW4gPSAwOwpAQCAtMjY3LDcgKzI3MSw3IEBACiAJCQkgICAiV0FSTklORzogRGlzYWJsaW5nIGZ1cnRoZXIgYWNjZXNzIHRvIHRoZSBkZXZpY2UiCiAJCQkgICAiIHRvIHByZXZlbnQgb3RoZXIgZm91bC11cHMuIik7CiAJCS8vIFRoaXMgYmxvY2tzIGFsbCBmdXJ0aGVyIGNvbW11bmljYXRpb24gd2l0aCB0aGUgcGFydC4KLQkJaGR3LT5pMmNfZnVuY1sweDQ0XSA9IDA7CisJCWhkdy0+aTJjX2Z1bmNbMHg0NF0gPSBOVUxMOwogCQlwdnIyX2hkd19yZW5kZXJfdXNlbGVzcyhoZHcpOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtMjk0LDcgKzI5OCw3IEBACiAJCQkgaW50IG51bSkKIHsKIAlpbnQgcmV0ID0gLUVOT1RTVVBQOwotCXB2cjJfaTJjX2Z1bmMgZnVuY3AgPSAwOworCXB2cjJfaTJjX2Z1bmMgZnVuY3AgPSBOVUxMOwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKShpMmNfYWRhcC0+YWxnb19kYXRhKTsKIAogCWlmICghbnVtKSB7CkBAIC0zMTksNyArMzIzLDcgQEAKIAkJCXUxNiB0Y250LGJjbnQsb2ZmczsKIAkJCWlmICghbXNnc1swXS5sZW4pIHsKIAkJCQkvKiBMZW5ndGggPT0gMCByZWFkLiAgVGhpcyBpcyBhIHByb2JlLiAqLwotCQkJCWlmIChmdW5jcChoZHcsbXNnc1swXS5hZGRyLDAsMCwwLDApKSB7CisJCQkJaWYgKGZ1bmNwKGhkdyxtc2dzWzBdLmFkZHIsTlVMTCwwLE5VTEwsMCkpIHsKIAkJCQkJcmV0ID0gLUVJTzsKIAkJCQkJZ290byBkb25lOwogCQkJCX0KQEAgLTMzNiw3ICszNDAsNyBAQAogCQkJCWlmIChiY250ID4gc2l6ZW9mKGhkdy0+Y21kX2J1ZmZlciktMSkgewogCQkJCQliY250ID0gc2l6ZW9mKGhkdy0+Y21kX2J1ZmZlciktMTsKIAkJCQl9Ci0JCQkJaWYgKGZ1bmNwKGhkdyxtc2dzWzBdLmFkZHIsMCwwLAorCQkJCWlmIChmdW5jcChoZHcsbXNnc1swXS5hZGRyLE5VTEwsMCwKIAkJCQkJICBtc2dzWzBdLmJ1ZitvZmZzLGJjbnQpKSB7CiAJCQkJCXJldCA9IC1FSU87CiAJCQkJCWdvdG8gZG9uZTsKQEAgLTM1MCw3ICszNTQsNyBAQAogCQkJLyogU2ltcGxlIHdyaXRlICovCiAJCQlyZXQgPSAxOwogCQkJaWYgKGZ1bmNwKGhkdyxtc2dzWzBdLmFkZHIsCi0JCQkJICBtc2dzWzBdLmJ1Zixtc2dzWzBdLmxlbiwwLDApKSB7CisJCQkJICBtc2dzWzBdLmJ1Zixtc2dzWzBdLmxlbixOVUxMLDApKSB7CiAJCQkJcmV0ID0gLUVJTzsKIAkJCX0KIAkJCWdvdG8gZG9uZTsKQEAgLTcwNSw5ICs3MDksOSBAQAogCXJldHVybiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfQUxMKSAhPSAwOwogfQogCi11bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBkZXRhaWwsCi0JCQkJICAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pCitzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV0YWlsLAorCQkJCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKQogewogCXVuc2lnbmVkIGludCBjY250LGJjbnQ7CiAJaW50IHNwY2ZsID0gMDsKQEAgLTg3MSw3ICs4NzUsNyBAQAogCW1zZ1swXS5hZGRyID0gMDsKIAltc2dbMF0uZmxhZ3MgPSBJMkNfTV9SRDsKIAltc2dbMF0ubGVuID0gMDsKLQltc2dbMF0uYnVmID0gMDsKKwltc2dbMF0uYnVmID0gTlVMTDsKIAlwcmludGsoIiVzOiBpMmMgc2NhbiBiZWdpbm5pbmdcbiIsaGR3LT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKIAkJbXNnWzBdLmFkZHIgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKaW5kZXggZThhZjViMGUuLjZkN2UyNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaApAQCAtNzUsOSArNzUsNiBAQAogCVBWUjJfSTJDX0RFVEFJTF9ERUJVRyB8XAogCVBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSIHxcCiAJUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spCi11bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKiwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZGV0YWlsX21hc2ssCi0JCQkJICAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pOwogCiB2b2lkIHB2cjJfaTJjX3Byb2JlKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7CiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKnB2cjJfaTJjX2dldF9vcCh1bnNpZ25lZCBpbnQgaWR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5jCmluZGV4IGE5ODRjOTEuLjY4MWY3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uYwpAQCAtOTMsNyArOTMsNyBAQAogCXN0cnVjdCB1cmIgKnB1cmI7CiB9OwogCi1jb25zdCBjaGFyICpwdnIyX2J1ZmZlcl9zdGF0ZV9kZWNvZGUoZW51bSBwdnIyX2J1ZmZlcl9zdGF0ZSBzdCkKK3N0YXRpYyBjb25zdCBjaGFyICpwdnIyX2J1ZmZlcl9zdGF0ZV9kZWNvZGUoZW51bSBwdnIyX2J1ZmZlcl9zdGF0ZSBzdCkKIHsKIAlzd2l0Y2ggKHN0KSB7CiAJY2FzZSBwdnIyX2J1ZmZlcl9zdGF0ZV9ub25lOiByZXR1cm4gIm5vbmUiOwpAQCAtMTA0LDcgKzEwNCw4IEBACiAJcmV0dXJuICJ1bmtub3duIjsKIH0KIAotdm9pZCBwdnIyX2J1ZmZlcl9kZXNjcmliZShzdHJ1Y3QgcHZyMl9idWZmZXIgKmJwLGNvbnN0IGNoYXIgKm1zZykKKyNpZmRlZiBTQU5JVFlfQ0hFQ0tfQlVGRkVSUworc3RhdGljIHZvaWQgcHZyMl9idWZmZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfYnVmZmVyICpicCxjb25zdCBjaGFyICptc2cpCiB7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lORk8sCiAJCSAgICJidWZmZXIlcyVzICVwIHN0YXRlPSVzIGlkPSVkIHN0YXR1cz0lZCIKQEAgLTExNSwxMCArMTE2LDExIEBACiAJCSAgIChicCA/IHB2cjJfYnVmZmVyX3N0YXRlX2RlY29kZShicC0+c3RhdGUpIDogIihpbnZhbGlkKSIpLAogCQkgICAoYnAgPyBicC0+aWQgOiAwKSwKIAkJICAgKGJwID8gYnAtPnN0YXR1cyA6IDApLAotCQkgICAoYnAgPyBicC0+c3RyZWFtIDogMCksCi0JCSAgIChicCA/IGJwLT5wdXJiIDogMCksCisJCSAgIChicCA/IGJwLT5zdHJlYW0gOiBOVUxMKSwKKwkJICAgKGJwID8gYnAtPnB1cmIgOiBOVUxMKSwKIAkJICAgKGJwID8gYnAtPnNpZ25hdHVyZSA6IDApKTsKIH0KKyNlbmRpZiAgLyogIFNBTklUWV9DSEVDS19CVUZGRVJTICAqLwogCiBzdGF0aWMgdm9pZCBwdnIyX2J1ZmZlcl9yZW1vdmUoc3RydWN0IHB2cjJfYnVmZmVyICpicCkKIHsKQEAgLTI4NCw3ICsyODYsNyBAQAogCXB2cjJfYnVmZmVyX3dpcGUoYnApOwogCXB2cjJfYnVmZmVyX3NldF9ub25lKGJwKTsKIAlicC0+c2lnbmF0dXJlID0gMDsKLQlicC0+c3RyZWFtID0gMDsKKwlicC0+c3RyZWFtID0gTlVMTDsKIAlpZiAoYnAtPnB1cmIpIHVzYl9mcmVlX3VyYihicC0+cHVyYik7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0JVRl9QT09MLCIvKi0tLVRSQUNFX0ZMT1ctLS0qLyIKIAkJICAgIiBidWZmZXJEb25lICAgICAlcCIsYnApOwpAQCAtMzM5LDEzICszNDEsMTMgQEAKIAkJCXN0cnVjdCBwdnIyX2J1ZmZlciAqYnA7CiAJCQlicCA9IHNwLT5idWZmZXJzW3NwLT5idWZmZXJfdG90YWxfY291bnQgLSAxXTsKIAkJCS8qIFBhcmFub2lhICovCi0JCQlzcC0+YnVmZmVyc1tzcC0+YnVmZmVyX3RvdGFsX2NvdW50IC0gMV0gPSAwOworCQkJc3AtPmJ1ZmZlcnNbc3AtPmJ1ZmZlcl90b3RhbF9jb3VudCAtIDFdID0gTlVMTDsKIAkJCShzcC0+YnVmZmVyX3RvdGFsX2NvdW50KS0tOwogCQkJcHZyMl9idWZmZXJfZG9uZShicCk7CiAJCQlrZnJlZShicCk7CiAJCX0KIAkJaWYgKHNjbnQgPCBzcC0+YnVmZmVyX3Nsb3RfY291bnQpIHsKLQkJCXN0cnVjdCBwdnIyX2J1ZmZlciAqKm5iID0gMDsKKwkJCXN0cnVjdCBwdnIyX2J1ZmZlciAqKm5iID0gTlVMTDsKIAkJCWlmIChzY250KSB7CiAJCQkJbmIgPSBrbWFsbG9jKHNjbnQgKiBzaXplb2YoKm5iKSxHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIW5iKSByZXR1cm4gLUVOT01FTTsKQEAgLTUxMywxMCArNTE1LDYgQEAKIH0KIAogLyogUXVlcnkgLyBzZXQgdGhlIG5vbWluYWwgYnVmZmVyIGNvdW50ICovCi1pbnQgcHZyMl9zdHJlYW1fZ2V0X2J1ZmZlcl9jb3VudChzdHJ1Y3QgcHZyMl9zdHJlYW0gKnNwKQotewotCXJldHVybiBzcC0+YnVmZmVyX3RhcmdldF9jb3VudDsKLX0KIAogaW50IHB2cjJfc3RyZWFtX3NldF9idWZmZXJfY291bnQoc3RydWN0IHB2cjJfc3RyZWFtICpzcCx1bnNpZ25lZCBpbnQgY250KQogewpAQCAtNTMyLDIxICs1MzAsMjEgQEAKIHN0cnVjdCBwdnIyX2J1ZmZlciAqcHZyMl9zdHJlYW1fZ2V0X2lkbGVfYnVmZmVyKHN0cnVjdCBwdnIyX3N0cmVhbSAqc3ApCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHAgPSBzcC0+aWRsZV9saXN0Lm5leHQ7Ci0JaWYgKGxwID09ICZzcC0+aWRsZV9saXN0KSByZXR1cm4gMDsKKwlpZiAobHAgPT0gJnNwLT5pZGxlX2xpc3QpIHJldHVybiBOVUxMOwogCXJldHVybiBsaXN0X2VudHJ5KGxwLHN0cnVjdCBwdnIyX2J1ZmZlcixsaXN0X292ZXJoZWFkKTsKIH0KIAogc3RydWN0IHB2cjJfYnVmZmVyICpwdnIyX3N0cmVhbV9nZXRfcmVhZHlfYnVmZmVyKHN0cnVjdCBwdnIyX3N0cmVhbSAqc3ApCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHAgPSBzcC0+cmVhZHlfbGlzdC5uZXh0OwotCWlmIChscCA9PSAmc3AtPnJlYWR5X2xpc3QpIHJldHVybiAwOworCWlmIChscCA9PSAmc3AtPnJlYWR5X2xpc3QpIHJldHVybiBOVUxMOwogCXJldHVybiBsaXN0X2VudHJ5KGxwLHN0cnVjdCBwdnIyX2J1ZmZlcixsaXN0X292ZXJoZWFkKTsKIH0KIAogc3RydWN0IHB2cjJfYnVmZmVyICpwdnIyX3N0cmVhbV9nZXRfYnVmZmVyKHN0cnVjdCBwdnIyX3N0cmVhbSAqc3AsaW50IGlkKQogewotCWlmIChpZCA8IDApIHJldHVybiAwOwotCWlmIChpZCA+PSBzcC0+YnVmZmVyX3RvdGFsX2NvdW50KSByZXR1cm4gMDsKKwlpZiAoaWQgPCAwKSByZXR1cm4gTlVMTDsKKwlpZiAoaWQgPj0gc3AtPmJ1ZmZlcl90b3RhbF9jb3VudCkgcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHNwLT5idWZmZXJzW2lkXTsKIH0KIApAQCAtNTU1LDE3ICs1NTMsNiBAQAogCXJldHVybiBzcC0+cl9jb3VudDsKIH0KIAotaW50IHB2cjJfc3RyZWFtX2dldF9pZGxlX2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqc3ApCi17Ci0JcmV0dXJuIHNwLT5pX2NvdW50OwotfQotCi12b2lkIHB2cjJfc3RyZWFtX2ZsdXNoKHN0cnVjdCBwdnIyX3N0cmVhbSAqc3ApCi17Ci0JbXV0ZXhfbG9jaygmc3AtPm11dGV4KTsgZG8gewotCQlwdnIyX3N0cmVhbV9pbnRlcm5hbF9mbHVzaChzcCk7Ci0JfSB3aGlsZSgwKTsgbXV0ZXhfdW5sb2NrKCZzcC0+bXV0ZXgpOwotfQogCiB2b2lkIHB2cjJfc3RyZWFtX2tpbGwoc3RydWN0IHB2cjJfc3RyZWFtICpzcCkKIHsKQEAgLTYyMCwyMCArNjA3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcHZyMl9idWZmZXJfaWRsZShzdHJ1Y3QgcHZyMl9idWZmZXIgKmJwKQotewotCXN0cnVjdCBwdnIyX3N0cmVhbSAqc3A7Ci0JaWYgKCFicCkgcmV0dXJuIC1FSU5WQUw7Ci0Jc3AgPSBicC0+c3RyZWFtOwotCW11dGV4X2xvY2soJnNwLT5tdXRleCk7IGRvIHsKLQkJcHZyMl9idWZmZXJfd2lwZShicCk7Ci0JCXB2cjJfYnVmZmVyX3NldF9pZGxlKGJwKTsKLQkJaWYgKHNwLT5idWZmZXJfdG90YWxfY291bnQgIT0gc3AtPmJ1ZmZlcl90YXJnZXRfY291bnQpIHsKLQkJCXB2cjJfc3RyZWFtX2FjaGlldmVfYnVmZmVyX2NvdW50KHNwKTsKLQkJfQotCX0gd2hpbGUoMCk7IG11dGV4X3VubG9jaygmc3AtPm11dGV4KTsKLQlyZXR1cm4gMDsKLX0KIAogaW50IHB2cjJfYnVmZmVyX3NldF9idWZmZXIoc3RydWN0IHB2cjJfYnVmZmVyICpicCx2b2lkICpwdHIsdW5zaWduZWQgaW50IGNudCkKIHsKQEAgLTY3MywxMCArNjQ2LDYgQEAKIAlyZXR1cm4gYnAtPnN0YXR1czsKIH0KIAotZW51bSBwdnIyX2J1ZmZlcl9zdGF0ZSBwdnIyX2J1ZmZlcl9nZXRfc3RhdGUoc3RydWN0IHB2cjJfYnVmZmVyICpicCkKLXsKLQlyZXR1cm4gYnAtPnN0YXRlOwotfQogCiBpbnQgcHZyMl9idWZmZXJfZ2V0X2lkKHN0cnVjdCBwdnIyX2J1ZmZlciAqYnApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uaAppbmRleCA2NWUxMTM4Li45NjI4NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmgKQEAgLTM2LDggKzM2LDYgQEAKIHN0cnVjdCBwdnIyX3N0cmVhbTsKIHN0cnVjdCBwdnIyX2J1ZmZlcjsKIAotY29uc3QgY2hhciAqcHZyMl9idWZmZXJfc3RhdGVfZGVjb2RlKGVudW0gcHZyMl9idWZmZXJfc3RhdGUpOwotCiAvKiBJbml0aWFsaXplIC8gdGVhciBkb3duIHN0cmVhbSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBwdnIyX3N0cmVhbSAqcHZyMl9zdHJlYW1fY3JlYXRlKHZvaWQpOwogdm9pZCBwdnIyX3N0cmVhbV9kZXN0cm95KHN0cnVjdCBwdnIyX3N0cmVhbSAqKTsKQEAgLTQ5LDcgKzQ3LDYgQEAKIAkJCSAgICAgIHZvaWQgKmRhdGEpOwogCiAvKiBRdWVyeSAvIHNldCB0aGUgbm9taW5hbCBidWZmZXIgY291bnQgKi8KLWludCBwdnIyX3N0cmVhbV9nZXRfYnVmZmVyX2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqKTsKIGludCBwdnIyX3N0cmVhbV9zZXRfYnVmZmVyX2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqLHVuc2lnbmVkIGludCk7CiAKIC8qIEdldCBhIHBvaW50ZXIgdG8gYSBidWZmZXIgdGhhdCBpcyBlaXRoZXIgaWRsZSwgcmVhZHksIG9yIGlzIHNwZWNpZmllZApAQCAtNTksMTIgKzU2LDggQEAKIHN0cnVjdCBwdnIyX2J1ZmZlciAqcHZyMl9zdHJlYW1fZ2V0X2J1ZmZlcihzdHJ1Y3QgcHZyMl9zdHJlYW0gKnNwLGludCBpZCk7CiAKIC8qIEZpbmQgb3V0IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIGlkbGUgb3IgcmVhZHkgKi8KLWludCBwdnIyX3N0cmVhbV9nZXRfaWRsZV9jb3VudChzdHJ1Y3QgcHZyMl9zdHJlYW0gKik7CiBpbnQgcHZyMl9zdHJlYW1fZ2V0X3JlYWR5X2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqKTsKIAotLyogS2lsbCBhbGwgcGVuZGluZyBvcGVyYXRpb25zICovCi12b2lkIHB2cjJfc3RyZWFtX2ZsdXNoKHN0cnVjdCBwdnIyX3N0cmVhbSAqKTsKLQogLyogS2lsbCBhbGwgcGVuZGluZyBidWZmZXJzIGFuZCB0aHJvdyBhd2F5IGFueSByZWFkeSBidWZmZXJzIGFzIHdlbGwgKi8KIHZvaWQgcHZyMl9zdHJlYW1fa2lsbChzdHJ1Y3QgcHZyMl9zdHJlYW0gKik7CiAKQEAgLTc3LDE4ICs3MCwxMiBAQAogLyogUmV0cmlldmUgY29tcGxldGlvbiBjb2RlIGZvciBnaXZlbiByZWFkeSBidWZmZXIgKi8KIGludCBwdnIyX2J1ZmZlcl9nZXRfc3RhdHVzKHN0cnVjdCBwdnIyX2J1ZmZlciAqKTsKIAotLyogUmV0cmlldmUgc3RhdGUgb2YgZ2l2ZW4gYnVmZmVyICovCi1lbnVtIHB2cjJfYnVmZmVyX3N0YXRlIHB2cjJfYnVmZmVyX2dldF9zdGF0ZShzdHJ1Y3QgcHZyMl9idWZmZXIgKik7Ci0KIC8qIFJldHJpZXZlIElEIG9mIGdpdmVuIGJ1ZmZlciAqLwogaW50IHB2cjJfYnVmZmVyX2dldF9pZChzdHJ1Y3QgcHZyMl9idWZmZXIgKik7CiAKIC8qIFN0YXJ0IHJlYWRpbmcgaW50byBnaXZlbiBidWZmZXIgKGtpbGwgaXQgaWYgbmVlZGVkKSAqLwogaW50IHB2cjJfYnVmZmVyX3F1ZXVlKHN0cnVjdCBwdnIyX2J1ZmZlciAqKTsKIAotLyogTW92ZSBidWZmZXIgYmFjayB0byBpZGxlIHBvb2wgKGtpbGwgaXQgaWYgbmVlZGVkKSAqLwotaW50IHB2cjJfYnVmZmVyX2lkbGUoc3RydWN0IHB2cjJfYnVmZmVyICopOwotCiAjZW5kaWYgLyogX19QVlJVU0IyX0lPX0ggKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKaW5kZXggNDlkYTA2Mi4uZjdhMmUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKQEAgLTU0LDcgKzU0LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JY3AtPnN0cmVhbSA9IDA7CisJY3AtPnN0cmVhbSA9IE5VTEw7CiAJbXV0ZXhfaW5pdCgmY3AtPm11dGV4KTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgQlVGRkVSX0NPVU5UOyBpZHgrKykgewpAQCAtNzcsNyArNzcsNyBAQAogewogCXVuc2lnbmVkIGludCBpZHg7CiAKLQlwdnIyX2lvcmVhZF9zZXR1cChjcCwwKTsKKwlwdnIyX2lvcmVhZF9zZXR1cChjcCxOVUxMKTsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEJVRkZFUl9DT1VOVDsgaWR4KyspIHsKIAkJaWYgKCEoY3AtPmJ1ZmZlcl9zdG9yYWdlW2lkeF0pKSBjb250aW51ZTsKIAkJa2ZyZWUoY3AtPmJ1ZmZlcl9zdG9yYWdlW2lkeF0pOwpAQCAtODgsMTIgKzg4LDEyIEBACiB7CiAJc3RydWN0IHB2cjJfaW9yZWFkICpjcDsKIAljcCA9IGttYWxsb2Moc2l6ZW9mKCpjcCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcCkgcmV0dXJuIDA7CisJaWYgKCFjcCkgcmV0dXJuIE5VTEw7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX1NUUlVDVCwicHZyMl9pb3JlYWRfY3JlYXRlIGlkPSVwIixjcCk7CiAJbWVtc2V0KGNwLDAsc2l6ZW9mKCpjcCkpOwogCWlmIChwdnIyX2lvcmVhZF9pbml0KGNwKSA8IDApIHsKIAkJa2ZyZWUoY3ApOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCXJldHVybiBjcDsKIH0KQEAgLTEwNSw3ICsxMDUsNyBAQAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9TVFJVQ1QsInB2cjJfaW9yZWFkX2Rlc3Ryb3kgaWQ9JXAiLGNwKTsKIAlpZiAoY3AtPnN5bmNfa2V5X3B0cikgewogCQlrZnJlZShjcC0+c3luY19rZXlfcHRyKTsKLQkJY3AtPnN5bmNfa2V5X3B0ciA9IDA7CisJCWNwLT5zeW5jX2tleV9wdHIgPSBOVUxMOwogCX0KIAlrZnJlZShjcCk7CiB9CkBAIC0xMjQsNyArMTI0LDcgQEAKIAlpZiAoc3luY19rZXlfbGVuICE9IGNwLT5zeW5jX2tleV9sZW4pIHsKIAkJaWYgKGNwLT5zeW5jX2tleV9wdHIpIHsKIAkJCWtmcmVlKGNwLT5zeW5jX2tleV9wdHIpOwotCQkJY3AtPnN5bmNfa2V5X3B0ciA9IDA7CisJCQljcC0+c3luY19rZXlfcHRyID0gTlVMTDsKIAkJfQogCQljcC0+c3luY19rZXlfbGVuID0gMDsKIAkJaWYgKHN5bmNfa2V5X2xlbikgewpAQCAtMTQ0LDggKzE0NCw4IEBACiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX1NUQVJUX1NUT1AsCiAJCSAgICIvKi0tLVRSQUNFX1JFQUQtLS0qLyBwdnIyX2lvcmVhZF9zdG9wIGlkPSVwIixjcCk7CiAJcHZyMl9zdHJlYW1fa2lsbChjcC0+c3RyZWFtKTsKLQljcC0+Y19idWYgPSAwOwotCWNwLT5jX2RhdGFfcHRyID0gMDsKKwljcC0+Y19idWYgPSBOVUxMOworCWNwLT5jX2RhdGFfcHRyID0gTlVMTDsKIAljcC0+Y19kYXRhX2xlbiA9IDA7CiAJY3AtPmNfZGF0YV9vZmZzID0gMDsKIAljcC0+ZW5hYmxlZCA9IDA7CkBAIC0xNzksOCArMTc5LDggQEAKIAkJfQogCX0KIAljcC0+ZW5hYmxlZCA9ICEwOwotCWNwLT5jX2J1ZiA9IDA7Ci0JY3AtPmNfZGF0YV9wdHIgPSAwOworCWNwLT5jX2J1ZiA9IE5VTEw7CisJY3AtPmNfZGF0YV9wdHIgPSBOVUxMOwogCWNwLT5jX2RhdGFfbGVuID0gMDsKIAljcC0+Y19kYXRhX29mZnMgPSAwOwogCWNwLT5zdHJlYW1fcnVubmluZyA9IDA7CkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCXB2cjJfaW9yZWFkX3N0b3AoY3ApOwogCQkJcHZyMl9zdHJlYW1fa2lsbChjcC0+c3RyZWFtKTsKIAkJCXB2cjJfc3RyZWFtX3NldF9idWZmZXJfY291bnQoY3AtPnN0cmVhbSwwKTsKLQkJCWNwLT5zdHJlYW0gPSAwOworCQkJY3AtPnN0cmVhbSA9IE5VTEw7CiAJCX0KIAkJaWYgKHNwKSB7CiAJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfU1RBUlRfU1RPUCwKQEAgLTI1MSwxMiArMjUxLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcHZyMl9pb3JlYWRfZ2V0X2VuYWJsZWQoc3RydWN0IHB2cjJfaW9yZWFkICpjcCkKLXsKLQlyZXR1cm4gY3AtPmVuYWJsZWQgIT0gMDsKLX0KIAotaW50IHB2cjJfaW9yZWFkX2dldF9idWZmZXIoc3RydWN0IHB2cjJfaW9yZWFkICpjcCkKK3N0YXRpYyBpbnQgcHZyMl9pb3JlYWRfZ2V0X2J1ZmZlcihzdHJ1Y3QgcHZyMl9pb3JlYWQgKmNwKQogewogCWludCBzdGF0OwogCkBAIC0yNzQsOCArMjcwLDggQEAKIAkJCQlwdnIyX2lvcmVhZF9zdG9wKGNwKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCWNwLT5jX2J1ZiA9IDA7Ci0JCQljcC0+Y19kYXRhX3B0ciA9IDA7CisJCQljcC0+Y19idWYgPSBOVUxMOworCQkJY3AtPmNfZGF0YV9wdHIgPSBOVUxMOwogCQkJY3AtPmNfZGF0YV9sZW4gPSAwOwogCQkJY3AtPmNfZGF0YV9vZmZzID0gMDsKIAkJfQpAQCAtMzA3LDcgKzMwMyw3IEBACiAJcmV0dXJuICEwOwogfQogCi12b2lkIHB2cjJfaW9yZWFkX2ZpbHRlcihzdHJ1Y3QgcHZyMl9pb3JlYWQgKmNwKQorc3RhdGljIHZvaWQgcHZyMl9pb3JlYWRfZmlsdGVyKHN0cnVjdCBwdnIyX2lvcmVhZCAqY3ApCiB7CiAJdW5zaWduZWQgaW50IGlkeDsKIAlpZiAoIWNwLT5lbmFibGVkKSByZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5oCmluZGV4IDZiMDAyNTkuLjFkMzYyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5oCkBAIC0zMyw3ICszMyw2IEBACiAJCQkgICAgICBjb25zdCBjaGFyICpzeW5jX2tleV9wdHIsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgc3luY19rZXlfbGVuKTsKIGludCBwdnIyX2lvcmVhZF9zZXRfZW5hYmxlZChzdHJ1Y3QgcHZyMl9pb3JlYWQgKixpbnQgZmwpOwotaW50IHB2cjJfaW9yZWFkX2dldF9lbmFibGVkKHN0cnVjdCBwdnIyX2lvcmVhZCAqKTsKIGludCBwdnIyX2lvcmVhZF9yZWFkKHN0cnVjdCBwdnIyX2lvcmVhZCAqLHZvaWQgX191c2VyICpidWYsdW5zaWduZWQgaW50IGNudCk7CiBpbnQgcHZyMl9pb3JlYWRfYXZhaWwoc3RydWN0IHB2cjJfaW9yZWFkICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKaW5kZXggYjk1MjQ4Mi4uOGYxYTVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYwpAQCAtNTQsNyArNTQsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIHRyYWNlIG1hc2siKTsKIAogI2lmZGVmIENPTkZJR19WSURFT19QVlJVU0IyX1NZU0ZTCi1zdGF0aWMgc3RydWN0IHB2cjJfc3lzZnNfY2xhc3MgKmNsYXNzX3B0ciA9IDA7CitzdGF0aWMgc3RydWN0IHB2cjJfc3lzZnNfY2xhc3MgKmNsYXNzX3B0ciA9IE5VTEw7CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1BWUlVTQjJfU1lTRlMgKi8KIAogc3RhdGljIHZvaWQgcHZyX3NldHVwX2F0dGFjaChzdHJ1Y3QgcHZyMl9jb250ZXh0ICpwdnIpCkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcHZyX2RyaXZlciA9IHsKLQluYW1lOiAgICAgICAgICAgInB2cnVzYjIiLAotCWlkX3RhYmxlOiAgICAgICBwdnIyX2RldmljZV90YWJsZSwKLQlwcm9iZTogICAgICAgICAgcHZyX3Byb2JlLAotCWRpc2Nvbm5lY3Q6ICAgICBwdnJfZGlzY29ubmVjdAorCS5uYW1lID0gICAgICAgICAicHZydXNiMiIsCisJLmlkX3RhYmxlID0gICAgIHB2cjJfZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9ICAgICAgICBwdnJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSAgIHB2cl9kaXNjb25uZWN0CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zdGQuYwppbmRleCAxMzQwNjM2Li5mOTVjNTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zdGQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zdGQuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCWlmIChzdHJsZW4ocC0+bmFtZSkgIT0gYnVmU2l6ZSkgY29udGludWU7CiAJCWlmICghbWVtY21wKGJ1ZlB0cixwLT5uYW1lLGJ1ZlNpemUpKSByZXR1cm4gcDsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJCQlyZXR1cm4gZ2VuZXJpY19zdGFuZGFyZHMgKyBpZHg7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgcHZyMl9zdGRfZmlsbChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkLHY0bDJfc3RkX2lkIGlkKQpAQCAtMzY0LDcgKzM2NCw3IEBACiAKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwiU2V0dGluZyB1cCAldSB1bmlxdWUgc3RhbmRhcmQocykiLAogCQkgICBzdGRfY250KTsKLQlpZiAoIXN0ZF9jbnQpIHJldHVybiAwOyAvLyBwYXJhbm9pYQorCWlmICghc3RkX2NudCkgcmV0dXJuIE5VTEw7IC8vIHBhcmFub2lhCiAKIAlzdGRkZWZzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpICogc3RkX2NudCwKIAkJCSAgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwppbmRleCBjNmU2NTIzLi42YWY1NWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCWNpcC0+Y3B0ciA9IGNwdHI7CiAKIAljaXAtPmNocHRyID0gc2ZwOwotCWNpcC0+aXRlbV9uZXh0ID0gMDsKKwljaXAtPml0ZW1fbmV4dCA9IE5VTEw7CiAJaWYgKHNmcC0+aXRlbV9sYXN0KSB7CiAJCXNmcC0+aXRlbV9sYXN0LT5pdGVtX25leHQgPSBjaXA7CiAJfSBlbHNlIHsKQEAgLTYyNSw3ICs2MjUsNyBAQAogCQkJCSAmc2ZwLT5kZWJ1Z2lmYy0+YXR0cl9kZWJ1Z2luZm8pOwogCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShzZnAtPmNsYXNzX2Rldiwmc2ZwLT5kZWJ1Z2lmYy0+YXR0cl9kZWJ1Z2NtZCk7CiAJa2ZyZWUoc2ZwLT5kZWJ1Z2lmYyk7Ci0Jc2ZwLT5kZWJ1Z2lmYyA9IDA7CisJc2ZwLT5kZWJ1Z2lmYyA9IE5VTEw7CiB9CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMgKi8KIApAQCAtNjc4LDkgKzY3OCw5IEBACiAJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LCZzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlcik7CiAJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LCZzZnAtPmF0dHJfdW5pdF9udW1iZXIpOwogCXB2cjJfc3lzZnNfdHJhY2UoIkRlc3Ryb3lpbmcgY2xhc3NfZGV2IGlkPSVwIixzZnAtPmNsYXNzX2Rldik7Ci0Jc2ZwLT5jbGFzc19kZXYtPmNsYXNzX2RhdGEgPSAwOworCXNmcC0+Y2xhc3NfZGV2LT5jbGFzc19kYXRhID0gTlVMTDsKIAljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihzZnAtPmNsYXNzX2Rldik7Ci0Jc2ZwLT5jbGFzc19kZXYgPSAwOworCXNmcC0+Y2xhc3NfZGV2ID0gTlVMTDsKIH0KIAogCkBAIC03MzksMTMgKzczOSwxMyBAQAogCXNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyLmF0dHIubmFtZSA9ICJ2NGxfbWlub3JfbnVtYmVyIjsKIAlzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlci5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCXNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyLnNob3cgPSB2NGxfbWlub3JfbnVtYmVyX3Nob3c7Ci0Jc2ZwLT5hdHRyX3Y0bF9taW5vcl9udW1iZXIuc3RvcmUgPSAwOworCXNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyLnN0b3JlID0gTlVMTDsKIAljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsJnNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyKTsKIAlzZnAtPmF0dHJfdW5pdF9udW1iZXIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCXNmcC0+YXR0cl91bml0X251bWJlci5hdHRyLm5hbWUgPSAidW5pdF9udW1iZXIiOwogCXNmcC0+YXR0cl91bml0X251bWJlci5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCXNmcC0+YXR0cl91bml0X251bWJlci5zaG93ID0gdW5pdF9udW1iZXJfc2hvdzsKLQlzZnAtPmF0dHJfdW5pdF9udW1iZXIuc3RvcmUgPSAwOworCXNmcC0+YXR0cl91bml0X251bWJlci5zdG9yZSA9IE5VTEw7CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LCZzZnAtPmF0dHJfdW5pdF9udW1iZXIpOwogCiAJcHZyMl9zeXNmc19hZGRfY29udHJvbHMoc2ZwKTsKQEAgLTgwNiw3ICs4MDYsNyBAQAogCQlwdnIyX3N5c2ZzX3RyYWNlKAogCQkJIlJlZ2lzdHJhdGlvbiBmYWlsZWQgZm9yIHB2cjJfc3lzZnNfY2xhc3MgaWQ9JXAiLGNscCk7CiAJCWtmcmVlKGNscCk7Ci0JCWNscCA9IDA7CisJCWNscCA9IE5VTEw7CiAJfQogCXJldHVybiBjbHA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuYwppbmRleCBmNGFiYTgxLi5hZjlmMjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogc3RhdGljIHZvaWQgcHZyMl90dW5lcl9kZXRhY2goc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKIHsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSAwOworCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7CiAJa2ZyZWUoY3R4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCA5NjE5NTEwLi4wY2FmNzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC04MSw3ICs4MSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAiT2Zmc2V0IGZvciBkZXZpY2UncyBtaW5vciIpOwogCi1zdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IHB2cl9jYXBhYmlsaXR5ID17CitzdGF0aWMgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSBwdnJfY2FwYWJpbGl0eSA9ewogCS5kcml2ZXIgICAgICAgICA9ICJwdnJ1c2IyIiwKIAkuY2FyZCAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIHB2ci11c2IyIiwKIAkuYnVzX2luZm8gICAgICAgPSAidXNiIiwKQEAgLTExMSw3ICsxMTEsNyBAQAogCX0KIH07CiAKLXN0cnVjdCB2NGwyX2ZtdGRlc2MgcHZyX2ZtdGRlc2MgW10gPSB7CitzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyBwdnJfZm10ZGVzYyBbXSA9IHsKIAl7CiAJCS5pbmRleCAgICAgICAgICA9IDAsCiAJCS50eXBlICAgICAgICAgICA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKQEAgLTEyNyw3ICsxMjcsNyBAQAogI2RlZmluZSBQVlJfRk9STUFUX1BJWCAgMAogI2RlZmluZSBQVlJfRk9STUFUX1ZCSSAgMQogCi1zdHJ1Y3QgdjRsMl9mb3JtYXQgcHZyX2Zvcm1hdCBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9mb3JtYXQgcHZyX2Zvcm1hdCBbXSA9IHsKIAlbUFZSX0ZPUk1BVF9QSVhdID0gewogCQkudHlwZSAgID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkuZm10ICAgID0gewpAQCAtNzAxLDkgKzcwMSw4IEBACiAKIHN0YXRpYyB2b2lkIHB2cjJfdjRsMl9kZXZfZGVzdHJveShzdHJ1Y3QgcHZyMl92NGwyX2RldiAqZGlwKQogewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAotCQkgICAidW5yZWdpc3RlcmluZyBkZXZpY2UgdmlkZW8lZCBbJXNdIiwKLQkJICAgZGlwLT52ZGV2LT5taW5vcixwdnIyX2NvbmZpZ19nZXRfbmFtZShkaXAtPmNvbmZpZykpOworCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6IHVucmVnaXN0ZXJpbmcgZGV2aWNlIHZpZGVvJWQgWyVzXVxuIiwKKwkgICAgICAgZGlwLT52ZGV2LT5taW5vcixwdnIyX2NvbmZpZ19nZXRfbmFtZShkaXAtPmNvbmZpZykpOwogCWlmIChkaXAtPmN0eHRfaWR4ID49IDApIHsKIAkJbXV0ZXhfbG9jaygmZGV2aWNlX2xvY2spOwogCQlkZXZpY2VzW2RpcC0+Y3R4dF9pZHhdID0gTlVMTDsKQEAgLTcyNSw3ICs3MjQsNyBAQAogfQogCiAKLXZvaWQgcHZyMl92NGwyX2ludGVybmFsX2NoZWNrKHN0cnVjdCBwdnIyX2NoYW5uZWwgKmNocCkKK3N0YXRpYyB2b2lkIHB2cjJfdjRsMl9pbnRlcm5hbF9jaGVjayhzdHJ1Y3QgcHZyMl9jaGFubmVsICpjaHApCiB7CiAJc3RydWN0IHB2cjJfdjRsMiAqdnA7CiAJdnAgPSBjb250YWluZXJfb2YoY2hwLHN0cnVjdCBwdnIyX3Y0bDIsY2hhbm5lbCk7CkBAIC03MzUsOCArNzM0LDggQEAKIH0KIAogCi1pbnQgcHZyMl92NGwyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHB2cjJfdjRsMl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCiAvKiBUZW1wb3JhcnkgaGFjayA6IHVzZSBpdnR2IGFwaSB1bnRpbCBhIHY0bDIgb25lIGlzIGF2YWlsYWJsZS4gKi8KQEAgLTc0Nyw3ICs3NDYsNyBAQAogfQogCiAKLWludCBwdnIyX3Y0bDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcHZyMl92NGwyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHB2cjJfdjRsMl9maCAqZmhwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwdnIyX3Y0bDIgKnZwID0gZmhwLT52aGVhZDsKQEAgLTc2MSw5ICs3NjAsOSBAQAogCQloZHcgPSBmaHAtPmNoYW5uZWwubWNfaGVhZC0+aGR3OwogCQlwdnIyX2hkd19zZXRfc3RyZWFtaW5nKGhkdywwKTsKIAkJc3AgPSBwdnIyX2lvcmVhZF9nZXRfc3RyZWFtKGZocC0+cmhwKTsKLQkJaWYgKHNwKSBwdnIyX3N0cmVhbV9zZXRfY2FsbGJhY2soc3AsMCwwKTsKKwkJaWYgKHNwKSBwdnIyX3N0cmVhbV9zZXRfY2FsbGJhY2soc3AsTlVMTCxOVUxMKTsKIAkJcHZyMl9pb3JlYWRfZGVzdHJveShmaHAtPnJocCk7Ci0JCWZocC0+cmhwID0gMDsKKwkJZmhwLT5yaHAgPSBOVUxMOwogCX0KIAl2NGwyX3ByaW9fY2xvc2UoJnZwLT5wcmlvLCAmZmhwLT5wcmlvKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwpAQCAtNzc5LDkgKzc3OCw5IEBACiAJCX0gZWxzZSB7CiAJCQl2cC0+dmZpcnN0ID0gZmhwLT52bmV4dDsKIAkJfQotCQlmaHAtPnZuZXh0ID0gMDsKLQkJZmhwLT52cHJldiA9IDA7Ci0JCWZocC0+dmhlYWQgPSAwOworCQlmaHAtPnZuZXh0ID0gTlVMTDsKKwkJZmhwLT52cHJldiA9IE5VTEw7CisJCWZocC0+dmhlYWQgPSBOVUxMOwogCQlwdnIyX2NoYW5uZWxfZG9uZSgmZmhwLT5jaGFubmVsKTsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX1NUUlVDVCwKIAkJCSAgICJEZXN0cm95aW5nIHB2cl92NGwyX2ZoIGlkPSVwIixmaHApOwpAQCAtNzk0LDkgKzc5Myw5IEBACiB9CiAKIAotaW50IHB2cjJfdjRsMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwdnIyX3Y0bDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcHZyMl92NGwyX2RldiAqZGlwID0gMDsgLyogT3VyIG93biBjb250ZXh0IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgcHZyMl92NGwyX2RldiAqZGlwID0gTlVMTDsgLyogT3VyIG93biBjb250ZXh0IHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcHZyMl92NGwyX2ZoICpmaHA7CiAJc3RydWN0IHB2cjJfdjRsMiAqdnA7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHc7CkBAIC04NTQsNyArODUzLDcgQEAKIAlwdnIyX2NvbnRleHRfZW50ZXIodnAtPmNoYW5uZWwubWNfaGVhZCk7IGRvIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX1NUUlVDVCwiQ3JlYXRpbmcgcHZyX3Y0bDJfZmggaWQ9JXAiLGZocCk7CiAJCXB2cjJfY2hhbm5lbF9pbml0KCZmaHAtPmNoYW5uZWwsdnAtPmNoYW5uZWwubWNfaGVhZCk7Ci0JCWZocC0+dm5leHQgPSAwOworCQlmaHAtPnZuZXh0ID0gTlVMTDsKIAkJZmhwLT52cHJldiA9IHZwLT52bGFzdDsKIAkJaWYgKHZwLT52bGFzdCkgewogCQkJdnAtPnZsYXN0LT52bmV4dCA9IGZocDsKQEAgLTg5Nyw3ICs4OTYsNyBAQAogCiAJZmgtPnJocCA9IHB2cjJfY2hhbm5lbF9jcmVhdGVfbXBlZ19zdHJlYW0oZmgtPmRldl9pbmZvLT5zdHJlYW0pOwogCWlmICghZmgtPnJocCkgewotCQlwdnIyX2NoYW5uZWxfY2xhaW1fc3RyZWFtKCZmaC0+Y2hhbm5lbCwwKTsKKwkJcHZyMl9jaGFubmVsX2NsYWltX3N0cmVhbSgmZmgtPmNoYW5uZWwsTlVMTCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTA3OCw5ICsxMDc3LDggQEAKIAkgICAgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShkaXAtPnZkZXYsIHY0bF90eXBlLCAtMSkgPCAwKSkgewogCQllcnIoIkZhaWxlZCB0byByZWdpc3RlciBwdnJ1c2IyIHY0bCB2aWRlbyBkZXZpY2UiKTsKIAl9IGVsc2UgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKLQkJCSAgICJyZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFslc10iLAotCQkJICAgZGlwLT52ZGV2LT5taW5vcixwdnIyX2NvbmZpZ19nZXRfbmFtZShkaXAtPmNvbmZpZykpOworCQlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFslc11cbiIsCisJCSAgICAgICBkaXAtPnZkZXYtPm1pbm9yLHB2cjJfY29uZmlnX2dldF9uYW1lKGRpcC0+Y29uZmlnKSk7CiAJfQogCiAJaWYgKChkaXAtPnZkZXYtPm1pbm9yIDwgc2l6ZW9mKGRldmljZXMpL3NpemVvZihkZXZpY2VzWzBdKSkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKaW5kZXggZTRlYzdmMi4uMDVmMmNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogCiBzdGF0aWMgdm9pZCBkZWNvZGVyX2RldGFjaChzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKIHsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSAwOwotCWN0eHQtPmhkdy0+ZGVjb2Rlcl9jdHJsID0gMDsKKwljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOworCWN0eHQtPmhkdy0+ZGVjb2Rlcl9jdHJsID0gTlVMTDsKIAlrZnJlZShjdHh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYwppbmRleCBmY2FkMzQ2Li4yNDEzZTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYwpAQCAtODksNyArODksNyBAQAogCiBzdGF0aWMgdm9pZCB3bTg3NzVfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCiB7Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gMDsKKwljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwogCWtmcmVlKGN0eHQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuaAppbmRleCAwNDEyMjdmLi40MzAyOGU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWZuZGVmIFBXQ19VTkNPTVBSRVNTX0gKICNkZWZpbmUgUFdDX1VOQ09NUFJFU1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9wd2MtaW9jdGwuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaAppbmRleCA2MjlmNzllLi43ZTljNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBQV0NfSAogI2RlZmluZSBQV0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBkNzdlNmE4Li5mMWZkNjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC05MjksNyArOTI5LDcgQEAKIAogCiAJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5wY2ktPmlycSwgc2FhNzEzNF9hbHNhX2lycSwKLQkJCQlTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgZGV2LT5uYW1lLAorCQkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLAogCQkJCSh2b2lkKikgJmRldi0+ZG1hc291bmQpOwogCiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCBmMGMyMTExLi42ZTk3Y2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04NzEsOSArODcwLDkgQEAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZkZXYtPnBjaV9yZXYpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAgJmRldi0+cGNpX2xhdCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCi0JICAgICAgICJsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgImxhdGVuY3k6ICVkLCBtbWlvOiAweCVsbHhcbiIsIGRldi0+bmFtZSwKIAkgICAgICAgcGNpX25hbWUocGNpX2RldiksIGRldi0+cGNpX3JldiwgcGNpX2Rldi0+aXJxLAotCSAgICAgICBkZXYtPnBjaV9sYXQscGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOworCSAgICAgICBkZXYtPnBjaV9sYXQsKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSk7CiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CiAJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwY2lfZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKIAkJcHJpbnRrKCIlczogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsZGV2LT5uYW1lKTsKQEAgLTkwNSw4ICs5MDQsOCBAQAogCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwwKSwKIAkJCQlkZXYtPm5hbWUpKSB7CiAJCWVyciA9IC1FQlVTWTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IE1NSU8gbWVtb3J5IEAgMHglbHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUscGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgTU1JTyBtZW1vcnkgQCAweCVsbHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSk7CiAJCWdvdG8gZmFpbDE7CiAJfQogCWRldi0+bG1taW8gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApLCAweDEwMDApOwpAQCAtOTI0LDcgKzkyMyw3IEBACiAKIAkvKiBnZXQgaXJxICovCiAJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBzYWE3MTM0X2lycSwKLQkJCSAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IElSUSAlZFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSxwY2lfZGV2LT5pcnEpOwpAQCAtOTQyLDggKzk0MSw2IEBACiAJLyogbG9hZCBpMmMgaGVscGVycyAqLwogCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQogCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKLQlpZiAoZGV2LT50ZGE5ODg3X2NvbmYpCi0JCXJlcXVlc3RfbW9kdWxlKCJ0ZGE5ODg3Iik7CiAJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJzYWE2NzUyaHMiKTsKIAkJcmVxdWVzdF9tb2R1bGVfZGVwZW5kKCJzYWE3MTM0LWVtcHJlc3MiLCZuZWVkX2VtcHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtb3NzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYwppbmRleCA3YWEwMmIzLi4zODk1ZDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYwpAQCAtODQ1LDcgKzg0NSw3IEBACiB7CiAKIAlpZiAoKHJlcXVlc3RfaXJxKGRldi0+cGNpLT5pcnEsIHNhYTcxMzRfb3NzX2lycSwKLQkJCSBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgZGV2LT5uYW1lLAorCQkJIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLAogCQkJKHZvaWQqKSAmZGV2LT5kbWFzb3VuZCkpIDwgMCkKIAkJcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKaW5kZXggYTg0NmViYy4uNjc5ODdiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYwpAQCAtMjcsNyArMjcsNiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMC4yNCI7CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYwppbmRleCBjMThiMzFkLi5iMzZiYTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYwpAQCAtMTk4Myw3ICsxOTgzLDcgQEAKIAltZW1jcHkoJnNhYS0+dmlkZW9fZGV2LCAmc2FhX3RlbXBsYXRlLCBzaXplb2Yoc2FhX3RlbXBsYXRlKSk7CiAJc2Fhd3JpdGUoMCwgU0FBNzE0Nl9JRVIpOwkvKiB0dXJuIG9mZiBhbGwgaW50ZXJydXB0cyAqLwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoc2FhLT5pcnEsIHNhYTcxNDZfaXJxLCBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShzYWEtPmlycSwgc2FhNzE0Nl9pcnEsIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKIAkJInN0cmFkaXMiLCBzYWEpOwogCWlmIChyZXR2YWwgPT0gLUVJTlZBTCkKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJWQ6IEJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIsIG51bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwppbmRleCAzNTFiMTgyLi4yYmEyOTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKQEAgLTU4LDcgKzU4LDYgQEAKICAqCQkJICAgRml4ZWQgcHJvYyBlbnRyeSByZW1vdmFsIGJ1Zy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKaW5kZXggMmZhZGFiZi4uOGRhYjQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKQEAgLTU5MCw4ICs1OTAsOCBAQAogCXQtPnNldF90dl9mcmVxID0gdGRhOTg4N19zZXRfZnJlcTsKIAl0LT5zZXRfcmFkaW9fZnJlcSA9IHRkYTk4ODdfc2V0X2ZyZXE7CiAJdC0+c3RhbmRieSA9IHRkYTk4ODdfc3RhbmRieTsKLQl0LT50dW5lcl9zdGF0dXM9dGRhOTg4N190dW5lcl9zdGF0dXM7Ci0JdC0+Z2V0X2FmYz10ZGE5ODg3X2dldF9hZmM7CisJdC0+dHVuZXJfc3RhdHVzID0gdGRhOTg4N190dW5lcl9zdGF0dXM7CisJdC0+Z2V0X2FmYyA9IHRkYTk4ODdfZ2V0X2FmYzsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCAwMTE0MTNjLi5mN2ViNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogc3RhdGljIHZhciBVc2VkIG9ubHkgaW4gdHVuZXJfYXR0YWNoIGFuZCB0dW5lcl9wcm9iZSAqLworLyogc3RhdGljIHZhcnM6IHVzZWQgb25seSBpbiB0dW5lcl9hdHRhY2ggYW5kIHR1bmVyX3Byb2JlICovCiBzdGF0aWMgdW5zaWduZWQgZGVmYXVsdF9tb2RlX21hc2s7CiAKIC8qIER1cmluZyBjbGllbnQgYXR0YWNoLCBzZXRfdHlwZSBpcyBjYWxsZWQgYnkgYWRhcHRlcidzIGF0dGFjaF9pbmZvcm0gY2FsbGJhY2suCkBAIC02MDgsMTMgKzYwOCwxMyBAQAogCQl0dW5lcl9kYmcoIlZJRElPQ1NBVURJTyBub3QgaW1wbGVtZW50ZWQuXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBUREE5ODg3X1NFVF9DT05GSUc6Ci0JewotCQlpbnQgKmkgPSBhcmc7CisJCWlmICh0LT50eXBlID09IFRVTkVSX1REQTk4ODcpIHsKKwkJCWludCAqaSA9IGFyZzsKIAotCQl0LT50ZGE5ODg3X2NvbmZpZyA9ICppOwotCQlzZXRfZnJlcShjbGllbnQsIHQtPnR2X2ZyZXEpOworCQkJdC0+dGRhOTg4N19jb25maWcgPSAqaTsKKwkJCXNldF9mcmVxKGNsaWVudCwgdC0+dHZfZnJlcSk7CisJCX0KIAkJYnJlYWs7Ci0JfQogCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwogCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQogCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCmluZGV4IDZkYTZmODIuLmQwNzFjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogc3RhdGljIGludCBvZmZzZXQgPSAwOwogbW9kdWxlX3BhcmFtKG9mZnNldCwgaW50LCAwNjY2KTsKQEAgLTEyOCw2ICsxMjksNyBAQAogCXU4IGJ1ZmZlcls0XTsKIAlpbnQgcmMsIElGUENvZmYsIGksIGo7CiAJZW51bSBwYXJhbV90eXBlIGRlc2lyZWRfdHlwZTsKKwlzdHJ1Y3QgdHVuZXJfcGFyYW1zICpwYXJhbXM7CiAKIAl0dW4gPSAmdHVuZXJzW3QtPnR5cGVdOwogCkBAIC0xNjksMTkgKzE3MSwyMCBAQAogCQkJICBJRlBDb2ZmLHQtPnR5cGUpOwogCQlqID0gMDsKIAl9CisJcGFyYW1zID0gJnR1bi0+cGFyYW1zW2pdOwogCi0JZm9yIChpID0gMDsgaSA8IHR1bi0+cGFyYW1zW2pdLmNvdW50OyBpKyspIHsKLQkJaWYgKGZyZXEgPiB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbaV0ubGltaXQpCisJZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+Y291bnQ7IGkrKykgeworCQlpZiAoZnJlcSA+IHBhcmFtcy0+cmFuZ2VzW2ldLmxpbWl0KQogCQkJY29udGludWU7CiAJCWJyZWFrOwogCX0KLQlpZiAoaSA9PSB0dW4tPnBhcmFtc1tqXS5jb3VudCkgeworCWlmIChpID09IHBhcmFtcy0+Y291bnQpIHsKIAkJdHVuZXJfZGJnKCJUViBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlICglZCA+ICVkKSIsCi0JCQkJZnJlcSwgdHVuLT5wYXJhbXNbal0ucmFuZ2VzW2kgLSAxXS5saW1pdCk7Ci0JCWZyZXEgPSB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbLS1pXS5saW1pdDsKKwkJCQlmcmVxLCBwYXJhbXMtPnJhbmdlc1tpIC0gMV0ubGltaXQpOworCQlmcmVxID0gcGFyYW1zLT5yYW5nZXNbLS1pXS5saW1pdDsKIAl9Ci0JY29uZmlnID0gdHVuLT5wYXJhbXNbal0ucmFuZ2VzW2ldLmNvbmZpZzsKLQljYiAgICAgPSB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbaV0uY2I7CisJY29uZmlnID0gcGFyYW1zLT5yYW5nZXNbaV0uY29uZmlnOworCWNiICAgICA9IHBhcmFtcy0+cmFuZ2VzW2ldLmNiOwogCS8qICBpID09IDAgLT4gVkhGX0xPCiAJICogIGkgPT0gMSAtPiBWSEZfSEkKIAkgKiAgaSA9PSAyIC0+IFVIRiAgICAgKi8KQEAgLTI4MSw3ICsyODQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAodHVuZXJzW3QtPnR5cGVdLnBhcmFtcy0+Y2JfZmlyc3RfaWZfbG93ZXJfZnJlcSAmJiBkaXYgPCB0LT5sYXN0X2RpdikgeworCWlmIChwYXJhbXMtPmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgJiYgZGl2IDwgdC0+bGFzdF9kaXYpIHsKIAkJYnVmZmVyWzBdID0gY29uZmlnOwogCQlidWZmZXJbMV0gPSBjYjsKIAkJYnVmZmVyWzJdID0gKGRpdj4+OCkgJiAweDdmOwpAQCAtMjkzLDYgKzI5Niw0MyBAQAogCQlidWZmZXJbM10gPSBjYjsKIAl9CiAJdC0+bGFzdF9kaXYgPSBkaXY7CisJaWYgKHBhcmFtcy0+aGFzX3RkYTk4ODcpIHsKKwkJaW50IGNvbmZpZyA9IDA7CisJCWludCBpc19zZWNhbV9sID0gKHQtPnN0ZCAmIChWNEwyX1NURF9TRUNBTV9MIHwgVjRMMl9TVERfU0VDQU1fTEMpKSAmJgorCQkJISh0LT5zdGQgJiB+KFY0TDJfU1REX1NFQ0FNX0wgfCBWNEwyX1NURF9TRUNBTV9MQykpOworCisJCWlmICh0LT5zdGQgPT0gVjRMMl9TVERfU0VDQU1fTEMpIHsKKwkJCWlmIChwYXJhbXMtPnBvcnQxX2FjdGl2ZSBeIHBhcmFtcy0+cG9ydDFfaW52ZXJ0X2Zvcl9zZWNhbV9sYykKKwkJCQljb25maWcgfD0gVERBOTg4N19QT1JUMV9BQ1RJVkU7CisJCQlpZiAocGFyYW1zLT5wb3J0Ml9hY3RpdmUgXiBwYXJhbXMtPnBvcnQyX2ludmVydF9mb3Jfc2VjYW1fbGMpCisJCQkJY29uZmlnIHw9IFREQTk4ODdfUE9SVDJfQUNUSVZFOworCQl9CisJCWVsc2UgeworCQkJaWYgKHBhcmFtcy0+cG9ydDFfYWN0aXZlKQorCQkJCWNvbmZpZyB8PSBUREE5ODg3X1BPUlQxX0FDVElWRTsKKwkJCWlmIChwYXJhbXMtPnBvcnQyX2FjdGl2ZSkKKwkJCQljb25maWcgfD0gVERBOTg4N19QT1JUMl9BQ1RJVkU7CisJCX0KKwkJaWYgKHBhcmFtcy0+aW50ZXJjYXJyaWVyX21vZGUpCisJCQljb25maWcgfD0gVERBOTg4N19JTlRFUkNBUlJJRVI7CisJCWlmIChpc19zZWNhbV9sKSB7CisJCQlpZiAoaSA9PSAwICYmIHBhcmFtcy0+ZGVmYXVsdF90b3Bfc2VjYW1fbG93KQorCQkJCWNvbmZpZyB8PSBUREE5ODg3X1RPUChwYXJhbXMtPmRlZmF1bHRfdG9wX3NlY2FtX2xvdyk7CisJCQllbHNlIGlmIChpID09IDEgJiYgcGFyYW1zLT5kZWZhdWx0X3RvcF9zZWNhbV9taWQpCisJCQkJY29uZmlnIHw9IFREQTk4ODdfVE9QKHBhcmFtcy0+ZGVmYXVsdF90b3Bfc2VjYW1fbWlkKTsKKwkJCWVsc2UgaWYgKHBhcmFtcy0+ZGVmYXVsdF90b3Bfc2VjYW1faGlnaCkKKwkJCQljb25maWcgfD0gVERBOTg4N19UT1AocGFyYW1zLT5kZWZhdWx0X3RvcF9zZWNhbV9oaWdoKTsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChpID09IDAgJiYgcGFyYW1zLT5kZWZhdWx0X3RvcF9sb3cpCisJCQkJY29uZmlnIHw9IFREQTk4ODdfVE9QKHBhcmFtcy0+ZGVmYXVsdF90b3BfbG93KTsKKwkJCWVsc2UgaWYgKGkgPT0gMSAmJiBwYXJhbXMtPmRlZmF1bHRfdG9wX21pZCkKKwkJCQljb25maWcgfD0gVERBOTg4N19UT1AocGFyYW1zLT5kZWZhdWx0X3RvcF9taWQpOworCQkJZWxzZSBpZiAocGFyYW1zLT5kZWZhdWx0X3RvcF9oaWdoKQorCQkJCWNvbmZpZyB8PSBUREE5ODg3X1RPUChwYXJhbXMtPmRlZmF1bHRfdG9wX2hpZ2gpOworCQl9CisJCWkyY19jbGllbnRzX2NvbW1hbmQoYy0+YWRhcHRlciwgVERBOTg4N19TRVRfQ09ORklHLCAmY29uZmlnKTsKKwl9CiAJdHVuZXJfZGJnKCJ0diAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCiAJCSAgYnVmZmVyWzBdLGJ1ZmZlclsxXSxidWZmZXJbMl0sYnVmZmVyWzNdKTsKIApAQCAtMzM5LDYgKzM3OSw3IEBACiAJdTE2IGRpdjsKIAlpbnQgcmMsIGo7CiAJZW51bSBwYXJhbV90eXBlIGRlc2lyZWRfdHlwZSA9IFRVTkVSX1BBUkFNX1RZUEVfUkFESU87CisJc3RydWN0IHR1bmVyX3BhcmFtcyAqcGFyYW1zOwogCiAJdHVuID0gJnR1bmVyc1t0LT50eXBlXTsKIApAQCAtMzUyLDcgKzM5Myw4IEBACiAJCWogPSAwOwogCiAJZGl2ID0gKDIwICogZnJlcSAvIDE2MDAwKSArIChpbnQpKDIwKjEwLjcpOyAvKiBJRiAxMC43IE1IeiAqLwotCWJ1ZmZlclsyXSA9ICh0dW4tPnBhcmFtc1tqXS5yYW5nZXNbMF0uY29uZmlnICYgflRVTkVSX1JBVElPX01BU0spIHwgVFVORVJfUkFUSU9fU0VMRUNUXzUwOyAvKiA1MCBrSHogc3RlcCAqLworCXBhcmFtcyA9ICZ0dW4tPnBhcmFtc1tqXTsKKwlidWZmZXJbMl0gPSAocGFyYW1zLT5yYW5nZXNbMF0uY29uZmlnICYgflRVTkVSX1JBVElPX01BU0spIHwgVFVORVJfUkFUSU9fU0VMRUNUXzUwOyAvKiA1MCBrSHogc3RlcCAqLwogCiAJc3dpdGNoICh0LT50eXBlKSB7CiAJY2FzZSBUVU5FUl9URU5BXzk1MzNfREk6CkBAIC0zODQsNyArNDI2LDcgQEAKIAl9CiAJYnVmZmVyWzBdID0gKGRpdj4+OCkgJiAweDdmOwogCWJ1ZmZlclsxXSA9IGRpdiAgICAgICYgMHhmZjsKLQlpZiAodHVuZXJzW3QtPnR5cGVdLnBhcmFtcy0+Y2JfZmlyc3RfaWZfbG93ZXJfZnJlcSAmJiBkaXYgPCB0LT5sYXN0X2RpdikgeworCWlmIChwYXJhbXMtPmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgJiYgZGl2IDwgdC0+bGFzdF9kaXYpIHsKIAkJYnVmZmVyWzBdID0gYnVmZmVyWzJdOwogCQlidWZmZXJbMV0gPSBidWZmZXJbM107CiAJCWJ1ZmZlclsyXSA9IChkaXY+PjgpICYgMHg3ZjsKQEAgLTM5OCw2ICs0NDAsMTggQEAKIAkgICAgICAgYnVmZmVyWzBdLGJ1ZmZlclsxXSxidWZmZXJbMl0sYnVmZmVyWzNdKTsKIAl0LT5sYXN0X2RpdiA9IGRpdjsKIAorCWlmIChwYXJhbXMtPmhhc190ZGE5ODg3KSB7CisJCWludCBjb25maWcgPSAwOworCQlpZiAocGFyYW1zLT5wb3J0MV9hY3RpdmUgJiYgIXBhcmFtcy0+cG9ydDFfZm1faGlnaF9zZW5zaXRpdml0eSkKKwkJCWNvbmZpZyB8PSBUREE5ODg3X1BPUlQxX0FDVElWRTsKKwkJaWYgKHBhcmFtcy0+cG9ydDJfYWN0aXZlICYmICFwYXJhbXMtPnBvcnQyX2ZtX2hpZ2hfc2Vuc2l0aXZpdHkpCisJCQljb25maWcgfD0gVERBOTg4N19QT1JUMl9BQ1RJVkU7CisJCWlmIChwYXJhbXMtPmludGVyY2Fycmllcl9tb2RlKQorCQkJY29uZmlnIHw9IFREQTk4ODdfSU5URVJDQVJSSUVSOworLyoJCWlmIChwYXJhbXMtPnBvcnQxX3NldF9mb3JfZm1fbW9ubykKKwkJCWNvbmZpZyAmPSB+VERBOTg4N19QT1JUMV9BQ1RJVkU7Ki8KKwkJaTJjX2NsaWVudHNfY29tbWFuZChjLT5hZGFwdGVyLCBUREE5ODg3X1NFVF9DT05GSUcsICZjb25maWcpOworCX0KIAlpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCkpKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYwppbmRleCA5ZDkyMjZjLi5hMTY3ZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCkBAIC0zODAsNiArMzgwLDEwIEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9yYW5nZXMpLAorCQkuaGFzX3RkYTk4ODcgPSAxLAorCQkucG9ydDFfYWN0aXZlID0gMSwKKwkJLnBvcnQyX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKIAl9LAogfTsKIApAQCAtNTQyLDYgKzU0NiwxNCBAQAogCQkucmFuZ2VzID0gdHVuZXJfZm0xMjE2bWVfbWszX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZtMTIxNm1lX21rM19wYWxfcmFuZ2VzKSwKIAkJLmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgPSAxLAorCQkuaGFzX3RkYTk4ODcgPSAxLAorCQkucG9ydDFfYWN0aXZlID0gMSwKKwkJLnBvcnQyX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKKwkJLnBvcnQxX2ZtX2hpZ2hfc2Vuc2l0aXZpdHkgPSAxLAorCQkuZGVmYXVsdF90b3BfbWlkID0gLTIsCisJCS5kZWZhdWx0X3RvcF9zZWNhbV9taWQgPSAtMiwKKwkJLmRlZmF1bHRfdG9wX3NlY2FtX2hpZ2ggPSAtMiwKIAl9LAogfTsKIApAQCAtNjEyLDYgKzYyNCwxMCBAQAogCQkucmFuZ2VzID0gdHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcyksCiAJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKKwkJLmhhc190ZGE5ODg3ID0gMSwKKwkJLnBvcnQxX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9hY3RpdmUgPSAxLAorCQkucG9ydDFfZm1faGlnaF9zZW5zaXRpdml0eSA9IDEsCiAJfSwKIH07CiAKQEAgLTYzMiw2ICs2NDgsOCBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDlmXzVfcGFsX3JhbmdlcyksCisJCS5oYXNfdGRhOTg4NyA9IDEsCisJCS5wb3J0MV9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKIAl9LAogfTsKIApAQCAtNjQ4LDYgKzY2Niw4IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9wYW5hc29uaWNfdnAyN19udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGFuYXNvbmljX3ZwMjdfbnRzY19yYW5nZXMpLAorCQkuaGFzX3RkYTk4ODcgPSAxLAorCQkuaW50ZXJjYXJyaWVyX21vZGUgPSAxLAogCX0sCiB9OwogCkBAIC03ODIsNiArODAyLDEzIEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfZnExMl82YV9fX21rNF9wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZxMTJfNmFfX19tazRfcGFsX3JhbmdlcyksCisJCS5oYXNfdGRhOTg4NyA9IDEsCisJCS5wb3J0MV9hY3RpdmUgPSAxLAorCQkucG9ydDJfaW52ZXJ0X2Zvcl9zZWNhbV9sYyA9IDEsCisJCS5kZWZhdWx0X3RvcF9taWQgPSAtMiwKKwkJLmRlZmF1bHRfdG9wX3NlY2FtX2xvdyA9IC0yLAorCQkuZGVmYXVsdF90b3Bfc2VjYW1fbWlkID0gLTIsCisJCS5kZWZhdWx0X3RvcF9zZWNhbV9oaWdoID0gLTIsCiAJfSwKIH07CiAKQEAgLTg3MCw2ICs4OTcsMTIgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzKSwKKwkJLmhhc190ZGE5ODg3ID0gMSwKKwkJLnBvcnQxX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9hY3RpdmUgPSAxLAorCQkucG9ydDJfZm1faGlnaF9zZW5zaXRpdml0eSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKKwkJLnBvcnQxX3NldF9mb3JfZm1fbW9ubyA9IDEsCiAJfSwKIH07CiAKQEAgLTEwMDUsNiArMTAzOCw3IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9zYW1zdW5nX3RjcG5fMjEyMXAzMGFfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NhbXN1bmdfdGNwbl8yMTIxcDMwYV9udHNjX3JhbmdlcyksCisJCS5oYXNfdGRhOTg4NyA9IDEsCiAJfSwKIH07CiAKQEAgLTEwMzcsNiArMTA3MSwxMCBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl9zYW1zdW5nX3RjcGdfNjEyMXAzMGFfcGFsX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc2Ftc3VuZ190Y3BnXzYxMjFwMzBhX3BhbF9yYW5nZXMpLAorCQkuaGFzX3RkYTk4ODcgPSAxLAorCQkucG9ydDFfYWN0aXZlID0gMSwKKwkJLnBvcnQyX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCBjMmI3NTYxLi45MzZlM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMTQsNyArMTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCAzMGY4ZDgwLi5kOTU1MjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC03MywxNCArNzMsMTQgQEAKIH0KIGhhdXBwYXVnZV90dW5lcl9mbXRbXSA9CiB7Ci0JeyBWNEwyX1NURF9VTktOT1dOLCIgVU5LTk9XTiIgfSwKLQl7IFY0TDJfU1REX1VOS05PV04sIiBGTSIgfSwKLQl7IFY0TDJfU1REX1BBTF9CRywgIiBQQUwoQi9HKSIgfSwKLQl7IFY0TDJfU1REX05UU0NfTSwgIiBOVFNDKE0pIiB9LAotCXsgVjRMMl9TVERfUEFMX0ksICAiIFBBTChJKSIgfSwKLQl7IFY0TDJfU1REX1NFQ0FNX0wsIiBTRUNBTShML0wnKSIgfSwKLQl7IFY0TDJfU1REX1BBTF9ESywgIiBQQUwoRC9EMS9LKSIgfSwKLQl7IFY0TDJfU1REX0FUU0MsICAgIiBBVFNDL0RWQiBEaWdpdGFsIiB9LAorCXsgVjRMMl9TVERfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgIiBVTktOT1dOIiB9LAorCXsgVjRMMl9TVERfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgIiBGTSIgfSwKKwl7IFY0TDJfU1REX0J8VjRMMl9TVERfR0gsICAgICAgICAgICAgICIgUEFMKEIvRykiIH0sCisJeyBWNEwyX1NURF9NTiwgICAgICAgICAgICAgICAgICAgICAgICAiIE5UU0MoTSkiIH0sCisJeyBWNEwyX1NURF9QQUxfSSwgICAgICAgICAgICAgICAgICAgICAiIFBBTChJKSIgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0x8VjRMMl9TVERfU0VDQU1fTEMsICIgU0VDQU0oTC9MJykiIH0sCisJeyBWNEwyX1NURF9ESywgICAgICAgICAgICAgICAgICAgICAgICAiIFBBTChEL0QxL0spIiB9LAorCXsgVjRMMl9TVERfQVRTQywgICAgICAgICAgICAgICAgICAgICAgIiBBVFNDL0RWQiBEaWdpdGFsIiB9LAogfTsKIAogLyogVGhpcyBpcyB0aGUgZnVsbCBsaXN0IG9mIHBvc3NpYmxlIHR1bmVycy4gTWFueSB0aGFua3MgdG8gSGF1cHBhdWdlIGZvcgpAQCAtMjE5LDcgKzIxOSw3IEBACiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVGhvbXBzb24gRFRUNzUxMDUifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJDb25leGFudF9DWDI0MTA5In0sCiAJeyBUVU5FUl9UQ0xfMjAwMk4sICAgICAiVENMIE0yNTIzXzVOX0UifSwKLQl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgTTI1MjNfM0RCX0UifSwKKwl7IFRVTkVSX1RDTF8yMDAyTUIsICAgICJUQ0wgTTI1MjNfM0RCX0UifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJQaGlsaXBzIDgyNzVBIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiTWljcm90dW5lIE1UMjA2MCJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgRk0xMjM2IE1LNSJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5oCmluZGV4IDQ5ZGJlZTUuLjA1MTc3NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpZm5kZWYgdXNidmlkZW9faAogI2RlZmluZQl1c2J2aWRlb19oCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKaW5kZXggMTlkM2MyMC4uZDgzYTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwpAQCAtMTYsNyArMTYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggOTdmOTQ2ZGIuLmYwNmRjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICAqIEFkZGVkIEdlcmQgS25vcnJzIHY0bDEgZW5oYW5jZW1lbnRzIChKdXN0aW4gU2Nob2VtYW4pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5jCmluZGV4IDhmMjcxZGUuLjJhZTNmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAvLyBrZXJuZWwgY29uZmlnIGlzIGhlcmUgKHByb2NmcyBmbGFnKQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5oCmluZGV4IDhjMjMzNzIuLjk3YTNiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5oCkBAIC0yMjIsMTQgKzIyMiwxNCBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiBzdHJ1Y3QgdmZlX3BvbGFyaXR5IHsKLQlpbnQgdnN5bmNfcG9sOjE7Ci0JaW50IGhzeW5jX3BvbDoxOwotCWludCBmaWVsZF9wb2w6MTsKLQlpbnQgYmxhbmtfcG9sOjE7Ci0JaW50IHN1YmltZ19wb2w6MTsKLQlpbnQgcG9lX3BvbDoxOwotCWludCBwdmFsaWRfcG9sOjE7Ci0JaW50IHZjbGtfcG9sOjE7CisJdW5zaWduZWQgaW50IHZzeW5jX3BvbDoxOworCXVuc2lnbmVkIGludCBoc3luY19wb2w6MTsKKwl1bnNpZ25lZCBpbnQgZmllbGRfcG9sOjE7CisJdW5zaWduZWQgaW50IGJsYW5rX3BvbDoxOworCXVuc2lnbmVkIGludCBzdWJpbWdfcG9sOjE7CisJdW5zaWduZWQgaW50IHBvZV9wb2w6MTsKKwl1bnNpZ25lZCBpbnQgcHZhbGlkX3BvbDoxOworCXVuc2lnbmVkIGludCB2Y2xrX3BvbDoxOwogfTsKIAogc3RydWN0IHZmZV9zZXR0aW5ncyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKaW5kZXggMmRmYTdmMi4uYjI2ZWJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCkBAIC0xNTYzLDEwICsxNTYyLDYgQEAKIAl2aWRlb19kZXZpY2VbaV09dmZkOwogCXZmZC0+bWlub3I9aTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwotCi0Jc3ByaW50Zih2ZmQtPmRldmZzX25hbWUsICJ2NGwvJXMlZCIsIG5hbWVfYmFzZSwgaSAtIGJhc2UpOwotCWRldmZzX21rX2NkZXYoTUtERVYoVklERU9fTUFKT1IsIHZmZC0+bWlub3IpLAotCQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLCB2ZmQtPmRldmZzX25hbWUpOwogCW11dGV4X2luaXQoJnZmZC0+bG9jayk7CiAKIAkvKiBzeXNmcyBjbGFzcyAqLwpAQCAtMTU3NSw3ICsxNTcwLDcgQEAKIAkJdmZkLT5jbGFzc19kZXYuZGV2ID0gdmZkLT5kZXY7CiAJdmZkLT5jbGFzc19kZXYuY2xhc3MgICAgICAgPSAmdmlkZW9fY2xhc3M7CiAJdmZkLT5jbGFzc19kZXYuZGV2dCAgICAgICAgPSBNS0RFVihWSURFT19NQUpPUiwgdmZkLT5taW5vcik7Ci0Jc3RybGNweSh2ZmQtPmNsYXNzX2Rldi5jbGFzc19pZCwgdmZkLT5kZXZmc19uYW1lICsgNCwgQlVTX0lEX1NJWkUpOworCXNwcmludGYodmZkLT5jbGFzc19kZXYuY2xhc3NfaWQsICIlcyVkIiwgbmFtZV9iYXNlLCBpIC0gYmFzZSk7CiAJY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZ2ZmQtPmNsYXNzX2Rldik7CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZmQtPmNsYXNzX2RldiwKIAkJCQkmY2xhc3NfZGV2aWNlX2F0dHJfbmFtZSk7CkBAIC0xNjA0LDcgKzE1OTksNiBAQAogCWlmKHZpZGVvX2RldmljZVt2ZmQtPm1pbm9yXSE9dmZkKQogCQlwYW5pYygidmlkZW9kZXY6IGJhZCB1bnJlZ2lzdGVyIik7CiAKLQlkZXZmc19yZW1vdmUodmZkLT5kZXZmc19uYW1lKTsKIAl2aWRlb19kZXZpY2VbdmZkLT5taW5vcl09TlVMTDsKIAljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmdmZkLT5jbGFzc19kZXYpOwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCmluZGV4IDI4MzZiNDUuLmVjNzY5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYwppbmRleCA5NThjMWU2Li5mMjI0OWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMzgxLDcgKzEzODAsNyBAQAogCiAJCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHpyLT5wY2lfZGV2LT5pcnEsCiAJCQkJICAgICB6b3Jhbl9pcnEsCi0JCQkJICAgICBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwKKwkJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKIAkJCQkgICAgIFpSX0RFVk5BTUUoenIpLAogCQkJCSAgICAgKHZvaWQgKikgenIpOwogCQlpZiAocmVzdWx0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmMKaW5kZXggMDIxNjhkOS4uM2NiYWMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCmluZGV4IDk3MTFmNjIuLmQ5YTU4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwpAQCAtNDQsNyArNDQsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuYwppbmRleCBmNGZmZTc5Li5jN2Y2ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYwppbmRleCA2YWMzYjY3Li41MDQzNzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYwpAQCAtMTg1OCw3ICsxODU4LDcgQEAKIAkJREVCVUcocHJpbnRrKEtFUk5fREVCVUcgInpvcmFuOiBtYXBwZWQtbWVtb3J5IGF0IDB4JXBcbiIsenR2LT56b3Jhbl9tZW0pKTsKIAogCQlyZXN1bHQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgem9yYW5faXJxLAotCQkJU0FfU0hJUlF8U0FfSU5URVJSVVBULCJ6b3JhbiIsIHp0dik7CisJCQlJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVELCJ6b3JhbiIsIHp0dik7CiAJCWlmIChyZXN1bHQ9PS1FSU5WQUwpCiAJCXsKIAkJCWlvdW5tYXAoenR2LT56b3Jhbl9tZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX21lbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX21lbS5jCmluZGV4IGM4NzExM2QuLjQxNmVhYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMF9tZW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjBfbWVtLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL01ha2VmaWxlCmluZGV4IDUxNzQwYjMuLmIxMTQyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9NYWtlZmlsZQpAQCAtMzMsNiArMzMsMTEgQEAKICMgIEZvciBtcHRmYzoKICNDRkxBR1NfbXB0ZmMubyArPSAtRE1QVF9ERUJVR19GQwogCisjICBGb3IgbXB0c2FzOgorI0NGTEFHU19tcHRzYXMubyArPSAtRE1QVF9ERUJVR19TQVMKKyNDRkxBR1NfbXB0c2FzLm8gKz0gLURNUFRfREVCVUdfU0FTX1dJREUKKworCiAjPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS19IExTSV9MT0dJQwogCiBvYmotJChDT05GSUdfRlVTSU9OX1NQSSkJKz0gbXB0YmFzZS5vIG1wdHNjc2loLm8gbXB0c3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL2ZjX2xvZy5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvZmNfbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOThkNDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvZmNfbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIExTSSBMb2dpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgTkFNRTogICAgICAgICAgIGZjX2xvZy5oCi0gKiAgU1VNTUFSWTogICAgICAgIE1QSSBJb2NMb2dJbmZvIGRlZmluaXRpb25zIGZvciB0aGUgU1lNRkM5eHggY2hpcHMKLSAqICBERVNDUklQVElPTjogICAgQ29udGFpbnMgdGhlIGVudW1lcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtYXkgYmUgcmV0dXJuZWQKLSAqICAgICAgICAgICAgICAgICAgaW4gdGhlIElPQ0xvZ0luZm8gZmllbGQgb2YgYSBNUEkgRGVmYXVsdCBSZXBseSBNZXNzYWdlLgotICoKLSAqICBDUkVBVElPTiBEQVRFOiAgNi8wMi8yMDAwCi0gKiAgSUQ6ICAgICAgICAgICAgICRJZDogZmNfbG9nLmgsdiA0LjYgMjAwMS8wNy8yNiAxNDo0MTozMyBzc2NocmVtbSBFeHAgJAotICovCi0KLQotLyoKLSAqIE1waUlvY0xvZ0luZm9fdCBlbnVtCi0gKgotICogVGhlc2UgMzIgYml0IHZhbHVlcyBhcmUgdXNlZCBpbiB0aGUgSU9DTG9nSW5mbyBmaWVsZCBvZiB0aGUgTVBJIHJlcGx5Ci0gKiBtZXNzYWdlcy4KLSAqIFRoZSB2YWx1ZSBpcyAweGFiY2NjY2NjIHdoZXJlCi0gKiAgICAgICAgICBhID0gVGhlIHR5cGUgb2YgbG9nIGluZm8gYXMgcGVyIHRoZSBNUEkgc3BlYy4gU2luY2UgdGhlc2UgY29kZXMgYXJlCi0gKiAgICAgICAgICAgICAgYWxsIGZvciBGaWJyZSBDaGFubmVsIHRoaXMgdmFsdWUgd2lsbCBhbHdheXMgYmUgMi4KLSAqICAgICAgICAgIGIgPSBTcGVjaWZpZXMgYSBzdWJjbGFzcyBvZiB0aGUgZmlybXdhcmUgd2hlcmUKLSAqICAgICAgICAgICAgICAgICAgMCA9IEZDUCBJbml0aWF0b3IKLSAqICAgICAgICAgICAgICAgICAgMSA9IEZDUCBUYXJnZXQKLSAqICAgICAgICAgICAgICAgICAgMiA9IExBTgotICogICAgICAgICAgICAgICAgICAzID0gTVBJIE1lc3NhZ2UgTGF5ZXIKLSAqICAgICAgICAgICAgICAgICAgNCA9IEZDIExpbmsKLSAqICAgICAgICAgICAgICAgICAgNSA9IENvbnRleHQgTWFuYWdlcgotICogICAgICAgICAgICAgICAgICA2ID0gSW52YWxpZCBGaWVsZCBPZmZzZXQKLSAqICAgICAgICAgICAgICAgICAgNyA9IFN0YXRlIENoYW5nZSBJbmZvCi0gKiAgICAgICAgICAgICAgICAgIGFsbCBvdGhlcnMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gKiAgICAgICAgICBjID0gQSBzcGVjaWZpYyB2YWx1ZSB3aXRoaW4gdGhlIHN1YmNsYXNzLgotICoKLSAqIE5PVEU6IEFueSBuZXcgdmFsdWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIGVhY2ggc3ViY2xhc3Mgc28gdGhhdCB0aGUKLSAqICAgICAgIGNvZGVzIHJlbWFpbiBjb25zaXN0ZW50IGFjcm9zcyBmaXJtd2FyZSByZWxlYXNlcy4KLSAqLwotdHlwZWRlZiBlbnVtIF9NcGlJb2NMb2dJbmZvRmMKLXsKLSAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0JBU0UgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMDAwMDAsCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9PVVRfT0ZfT1JERVJfRlJBTUUgPSAweDIwMDAwMDAxLCAvKiByZWNlaXZlZCBhbiBvdXQgb2Ygb3JkZXIgZnJhbWUgLSB1bnN1cHBvcnRlZCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfQkFEX1NUQVJUX09GX0ZSQU1FID0gMHgyMDAwMDAwMiwgLyogQmFkIFJ4IEZyYW1lLCBiYWQgc3RhcnQgb2YgZnJhbWUgcHJpbWF0aXZlICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9CQURfRU5EX09GX0ZSQU1FICAgPSAweDIwMDAwMDAzLCAvKiBCYWQgUnggRnJhbWUsIGJhZCBlbmQgb2YgZnJhbWUgcHJpbWF0aXZlICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9PVkVSX1JVTiAgICAgICAgICAgPSAweDIwMDAwMDA0LCAvKiBCYWQgUnggRnJhbWUsIG92ZXJydW4gKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX1JYX09USEVSICAgICAgICAgICA9IDB4MjAwMDAwMDUsIC8qIE90aGVyIGVycm9ycyBjYXVnaHQgYnkgSU9DIHdoaWNoIHJlcXVpcmUgcmV0cmllcyAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfU1VCUFJPQ19ERUFEICAgICAgID0gMHgyMDAwMDAwNiwgLyogTWFpbiBwcm9jZXNzb3IgY291bGQgbm90IGluaXRpYWxpemUgc3ViLXByb2Nlc3NvciAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfUlhfT1ZFUlJVTiAgICAgICAgID0gMHgyMDAwMDAwNywgLyogU2NhdHRlciBHYXRoZXIgb3ZlcnJ1biAgKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX1JYX0JBRF9TVEFUVVMgICAgICA9IDB4MjAwMDAwMDgsIC8qIFJlY2VpdmVyIGRldGVjdGVkIGNvbnRleHQgbWlzbWF0Y2ggdmlhIGludmFsaWQgaGVhZGVyICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9SWF9VTkVYUEVDVEVEX0ZSQU1FPSAweDIwMDAwMDA5LCAvKiBDdHhNZ3IgZGV0ZWN0ZWQgdW5zdXBwb3J0ZWQgZnJhbWUgdHlwZSAgKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX0xJTktfRkFJTFVSRSAgICAgICA9IDB4MjAwMDAwMEEsIC8qIExpbmsgZmFpbHVyZSBvY2N1cnJlZCAgKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX1RYX1RJTUVPVVQgICAgICAgICA9IDB4MjAwMDAwMEIsIC8qIFRyYW5zbWl0dGVyIHRpbWVvdXQgZXJyb3IgKi8KLQotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9CQVNFICAgICAgICAgICAgICAgICAgID0gMHgyMTAwMDAwMCwKLSAgICBNUElfSU9DTE9HSU5GT19GQ19UQVJHRVRfTk9fUERJU0MgICAgICAgICAgICAgICA9IDB4MjEwMDAwMDEsIC8qIG5vdCBzZW50IGJlY2F1c2Ugd2UgYXJlIHdhaXRpbmcgZm9yIGEgUERJU0MgZnJvbSB0aGUgaW5pdGlhdG9yICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfVEFSR0VUX05PX0xPR0lOICAgICAgICAgICAgICAgPSAweDIxMDAwMDAyLCAvKiBub3Qgc2VudCBiZWNhdXNlIHdlIGFyZSBub3QgbG9nZ2VkIGluIHRvIHRoZSByZW1vdGUgbm9kZSAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9ET0FSX0tJTExFRF9CWV9MSVAgICAgID0gMHgyMTAwMDAwMywgLyogRGF0YSBPdXQsIEF1dG8gUmVzcG9uc2UsIG5vdCBzZW50IGR1ZSB0byBhIExJUCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9ESUFSX0tJTExFRF9CWV9MSVAgICAgID0gMHgyMTAwMDAwNCwgLyogRGF0YSBJbiwgQXV0byBSZXNwb25zZSwgbm90IHNlbnQgZHVlIHRvIGEgTElQICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfVEFSR0VUX0RJQVJfTUlTU0lOR19EQVRBICAgICAgPSAweDIxMDAwMDA1LCAvKiBEYXRhIEluLCBBdXRvIFJlc3BvbnNlLCBtaXNzaW5nIGRhdGEgZnJhbWVzICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfVEFSR0VUX0RPTlJfS0lMTEVEX0JZX0xJUCAgICAgPSAweDIxMDAwMDA2LCAvKiBEYXRhIE91dCwgTm8gUmVzcG9uc2UsIG5vdCBzZW50IGR1ZSB0byBhIExJUCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9XUlNQX0tJTExFRF9CWV9MSVAgICAgID0gMHgyMTAwMDAwNywgLyogQXV0by1yZXNwb25zZSBhZnRlciBhIHdyaXRlIG5vdCBzZW50IGR1ZSB0byBhIExJUCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9ESU5SX0tJTExFRF9CWV9MSVAgICAgID0gMHgyMTAwMDAwOCwgLyogRGF0YSBJbiwgTm8gUmVzcG9uc2UsIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGEgTElQICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfVEFSR0VUX0RJTlJfTUlTU0lOR19EQVRBICAgICAgPSAweDIxMDAwMDA5LCAvKiBEYXRhIEluLCBObyBSZXNwb25zZSwgbWlzc2luZyBkYXRhIGZyYW1lcyAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9NUlNQX0tJTExFRF9CWV9MSVAgICAgID0gMHgyMTAwMDAwYSwgLyogTWFudWFsIFJlc3BvbnNlIG5vdCBzZW50IGR1ZSB0byBhIExJUCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9OT19DTEFTU18zICAgICAgICAgICAgID0gMHgyMTAwMDAwYiwgLyogbm90IHNlbnQgYmVjYXVzZSByZW1vdGUgbm9kZSBkb2VzIG5vdCBzdXBwb3J0IENsYXNzIDMgKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19UQVJHRVRfTE9HSU5fTk9UX1ZBTElEICAgICAgICA9IDB4MjEwMDAwMGMsIC8qIG5vdCBzZW50IGJlY2F1c2UgbG9naW4gdG8gcmVtb3RlIG5vZGUgbm90IHZhbGlkYXRlZCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9GUk9NX09VVEJPVU5EICAgICAgICAgID0gMHgyMTAwMDAwZSwgLyogY2xlYXJlZCBmcm9tIHRoZSBvdXRib3VuZCBxdWV1ZSBhZnRlciBhIGxvZ291dCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX1RBUkdFVF9XQUlUSU5HX0ZPUl9EQVRBX0lOICAgID0gMHgyMTAwMDAwZiwgLyogY2xlYXJlZCB3YWl0aW5nIGZvciBkYXRhIGFmdGVyIGEgbG9nb3V0ICovCi0KLSAgICBNUElfSU9DTE9HSU5GT19GQ19MQU5fQkFTRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MjIwMDAwMDAsCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfTEFOX1RSQU5TX1NHTF9NSVNTSU5HICAgICAgICAgPSAweDIyMDAwMDAxLCAvKiBUcmFuc2FjdGlvbiBDb250ZXh0IFNnbCBNaXNzaW5nICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfTEFOX1RSQU5TX1dST05HX1BMQUNFICAgICAgICAgPSAweDIyMDAwMDAyLCAvKiBUcmFuc2FjdGlvbiBDb250ZXh0IGZvdW5kIGJlZm9yZSBhbiBFT0IgKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19MQU5fVFJBTlNfUkVTX0JJVFNfU0VUICAgICAgICA9IDB4MjIwMDAwMDMsIC8qIFRyYW5zYWN0aW9uIENvbnRleHQgdmFsdWUgaGFzIHJlc2VydmVkIGJpdHMgc2V0ICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfTEFOX1dST05HX1NHTF9GTEFHICAgICAgICAgICAgPSAweDIyMDAwMDA0LCAvKiBJbnZhbGlkIFNHTCBGbGFncyAqLwotCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfTVNHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgPSAweDIzMDAwMDAwLAotCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfTElOS19CQVNFICAgICAgICAgICAgICAgICAgICAgPSAweDI0MDAwMDAwLAotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0xJTktfTE9PUF9JTklUX1RJTUVPVVQgICAgICAgID0gMHgyNDAwMDAwMSwgLyogTG9vcCBpbml0aWFsaXphdGlvbiB0aW1lZCBvdXQgKi8KLSAgICBNUElfSU9DTE9HSU5GT19GQ19MSU5LX0FMUkVBRFlfSU5JVElBTElaRUQgICAgICA9IDB4MjQwMDAwMDIsIC8qIEFub3RoZXIgc3lzdGVtIGNvbnRyb2xsZXIgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgbG9vcCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0xJTktfTElOS19OT1RfRVNUQUJMSVNIRUQgICAgID0gMHgyNDAwMDAwMywgLyogTm90IHN5bmNocm9uaXplZCB0byBzaWduYWwgb3Igc3RpbGwgbmVnb3RpYXRpbmcgKHBvc3NpYmxlIGNhYmxlIHByb2JsZW0pICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfTElOS19DUkNfRVJST1IgICAgICAgICAgICAgICAgPSAweDI0MDAwMDA0LCAvKiBDUkMgY2hlY2sgZGV0ZWN0ZWQgZXJyb3Igb24gcmVjZWl2ZWQgZnJhbWUgKi8KLQotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0NUWF9CQVNFICAgICAgICAgICAgICAgICAgICAgID0gMHgyNTAwMDAwMCwKLQotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOVkFMSURfRklFTERfQllURV9PRkZTRVQgICAgID0gMHgyNjAwMDAwMCwgLyogVGhlIGxvd2VyIDI0IGJpdHMgZ2l2ZSB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGZpZWxkIGluIHRoZSByZXF1ZXN0IG1lc3NhZ2UgdGhhdCBpcyBpbnZhbGlkICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5WQUxJRF9GSUVMRF9NQVhfT0ZGU0VUICAgICAgPSAweDI2ZmZmZmZmLAotCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfU1RBVEVfQ0hBTkdFICAgICAgICAgICAgICAgICAgPSAweDI3MDAwMDAwICAvKiBUaGUgbG93ZXIgMjQgYml0cyBnaXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gY29uY2VybmluZyBzdGF0ZSBjaGFuZ2UgKi8KLQotfSBNcGlJb2NMb2dJbmZvRmNfdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpLmgKaW5kZXggMDJjZGM4NC4uODFhZDc3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBNZXNzYWdlIGluZGVwZW5kZW50IHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bHkgMjcsIDIwMDAKICAqCi0gKiAgICBtcGkuaCBWZXJzaW9uOiAgMDEuMDUuMTAKKyAqICAgIG1waS5oIFZlcnNpb246ICAwMS4wNS4xMQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTc2LDYgKzc2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEVFRFAgSU9DU3RhdHVzIGNvZGVzLgogICogIDA4LTAzLTA1ICAwMS4wNS4wOSAgQnVtcGVkIE1QSV9IRUFERVJfVkVSU0lPTl9VTklULgogICogIDA4LTMwLTA1ICAwMS4wNS4xMCAgQWRkZWQgMiBuZXcgSU9DU3RhdHVzIGNvZGVzIGZvciBUYXJnZXQuCisgKiAgMDMtMjctMDYgIDAxLjA1LjExICBCdW1wZWQgTVBJX0hFQURFUl9WRVJTSU9OX1VOSVQuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0xMDYsNyArMTA3LDcgQEAKIC8qIE5vdGU6IFRoZSBtYWpvciB2ZXJzaW9ucyBvZiAweGUwIHRocm91Z2ggMHhmZiBhcmUgcmVzZXJ2ZWQgKi8KIAogLyogdmVyc2lvbmluZyBmb3IgdGhpcyBNUEkgaGVhZGVyIHNldCAqLwotI2RlZmluZSBNUElfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICAoMHgwQykKKyNkZWZpbmUgTVBJX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAgKDB4MEQpCiAjZGVmaW5lIE1QSV9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUElfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICAoMHhGRjAwKQogI2RlZmluZSBNUElfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICAoOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9jbmZnLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfY25mZy5oCmluZGV4IGIxYmVjZWMuLjQ3ZTEzZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9jbmZnLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZyBtZXNzYWdlLCBzdHJ1Y3R1cmVzLCBhbmQgUGFnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgSnVseSAyNywgMjAwMAogICoKLSAqICAgIG1waV9jbmZnLmggVmVyc2lvbjogIDAxLjA1LjExCisgKiAgICBtcGlfY25mZy5oIFZlcnNpb246ICAwMS4wNS4xMgogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTI2Niw2ICsyNjYsMTYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHBvc3Rwb25lIFNBVEEgSW5pdCBiaXQgdG8gU0FTIElPIFVuaXQgUGFnZSAxCiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sRmxhZ3MuCiAgKiAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkIExvZ0VudHJ5IGZvcm1hdCBmb3IgTG9nIFBhZ2UgMC4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMTIgIEFkZGVkIHR3byBuZXcgRmxhZ3MgZGVmaW5lcyBmb3IgTWFudWZhY3R1cmluZyBQYWdlIDQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYW51ZmFjdHVyaW5nIFBhZ2UgNy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSV9JT0NQQUdFMl9DQVBfRkxBR1NfUkFJRF82NF9CSVRfQUREUkVTU0lORy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIElPQyBQYWdlIDYuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQcmV2Qm9vdERldmljZUZvcm0gZmllbGQgdG8gQ09ORklHX1BBR0VfQklPU18yLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4TEJBSGlnaCBmaWVsZCB0byBSQUlEIFZvbHVtZSBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBOdmRhdGEgdmVyc2lvbiBmaWVsZHMgdG8gU0FTIElPIFVuaXQgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgQWRkaXRpb25hbENvbnRyb2xGbGFncywgTWF4VGFyZ2V0UG9ydENvbm5lY3RUaW1lLAorICogICAgICAgICAgICAgICAgICAgICAgUmVwb3J0RGV2aWNlTWlzc2luZ0RlbGF5LCBhbmQgSU9EZXZpY2VNaXNzaW5nRGVsYXkKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyB0byBTQVMgSU8gVW5pdCBQYWdlIDEuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC02MzEsOSArNjQxLDExIEBACiB9IENPTkZJR19QQUdFX01BTlVGQUNUVVJJTkdfNCwgTVBJX1BPSU5URVIgUFRSX0NPTkZJR19QQUdFX01BTlVGQUNUVVJJTkdfNCwKICAgTWFudWZhY3R1cmluZ1BhZ2U0X3QsIE1QSV9QT0lOVEVSIHBNYW51ZmFjdHVyaW5nUGFnZTRfdDsKIAotI2RlZmluZSBNUElfTUFOVUZBQ1RVUklORzRfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJX01BTlVGQUNUVVJJTkc0X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgKDB4MDQpCiAKIC8qIGRlZmluZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUElfTUFOUEFHRTRfRk9SQ0VfQkFEX0JMT0NLX1RBQkxFICAgICAgICAgICAgICAoMHg4MCkKKyNkZWZpbmUgTVBJX01BTlBBR0U0X0ZPUkNFX09GRkxJTkVfRkFJTE9WRVIgICAgICAgICAgICAgKDB4NDApCiAjZGVmaW5lIE1QSV9NQU5QQUdFNF9JTUVfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICgweDIwKQogI2RlZmluZSBNUElfTUFOUEFHRTRfSU1fRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCkKICNkZWZpbmUgTVBJX01BTlBBR0U0X0lTX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDgpCkBAIC02NjgsNiArNjgwLDY2IEBACiAjZGVmaW5lIE1QSV9NQU5VRkFDVFVSSU5HNl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICgweDAwKQogCiAKK3R5cGVkZWYgc3RydWN0IF9NUElfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk8KK3sKKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUGlub3V0OyAgICAgICAgICAgICAgICAgLyogMDBoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3RvclsxNl07ICAgICAgICAgIC8qIDA0aCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbjsgICAgICAgICAgICAgICAvKiAxNGggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgLyogMTVoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Q7ICAgICAgICAgICAgICAgICAgIC8qIDE2aCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAvKiAxOGggKi8KK30gTVBJX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPLCBNUElfUE9JTlRFUiBQVFJfTVBJX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPLAorICBNcGlNYW5QYWdlN0Nvbm5lY3RvckluZm9fdCwgTVBJX1BPSU5URVIgcE1waU1hblBhZ2U3Q29ubmVjdG9ySW5mb190OworCisvKiBkZWZpbmVzIGZvciB0aGUgUGlub3V0IGZpZWxkICovCisjZGVmaW5lIE1QSV9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0ODRfTDQgICAgICAgICAgICAgICAgICgweDAwMDgwMDAwKQorI2RlZmluZSBNUElfTUFOUEFHRTdfUElOT1VUX1NGRl84NDg0X0wzICAgICAgICAgICAgICAgICAoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTVBJX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ4NF9MMiAgICAgICAgICAgICAgICAgKDB4MDAwMjAwMDApCisjZGVmaW5lIE1QSV9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0ODRfTDEgICAgICAgICAgICAgICAgICgweDAwMDEwMDAwKQorI2RlZmluZSBNUElfTUFOUEFHRTdfUElOT1VUX1NGRl84NDcwX0w0ICAgICAgICAgICAgICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgTVBJX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ3MF9MMyAgICAgICAgICAgICAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIE1QSV9NQU5QQUdFN19QSU5PVVRfU0ZGXzg0NzBfTDIgICAgICAgICAgICAgICAgICgweDAwMDAwMjAwKQorI2RlZmluZSBNUElfTUFOUEFHRTdfUElOT1VUX1NGRl84NDcwX0wxICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJX01BTlBBR0U3X1BJTk9VVF9TRkZfODQ4MiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1QSV9NQU5QQUdFN19QSU5PVVRfQ09OTkVDVElPTl9VTktOT1dOICAgICAgICAgICgweDAwMDAwMDAxKQorCisvKiBkZWZpbmVzIGZvciB0aGUgTG9jYXRpb24gZmllbGQgKi8KKyNkZWZpbmUgTVBJX01BTlBBR0U3X0xPQ0FUSU9OX1VOS05PV04gICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSV9NQU5QQUdFN19MT0NBVElPTl9JTlRFUk5BTCAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUElfTUFOUEFHRTdfTE9DQVRJT05fRVhURVJOQUwgICAgICAgICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJX01BTlBBR0U3X0xPQ0FUSU9OX1NXSVRDSEFCTEUgICAgICAgICAgICAgICAgKDB4MDgpCisjZGVmaW5lIE1QSV9NQU5QQUdFN19MT0NBVElPTl9BVVRPICAgICAgICAgICAgICAgICAgICAgICgweDEwKQorI2RlZmluZSBNUElfTUFOUEFHRTdfTE9DQVRJT05fTk9UX1BSRVNFTlQgICAgICAgICAgICAgICAoMHgyMCkKKyNkZWZpbmUgTVBJX01BTlBBR0U3X0xPQ0FUSU9OX05PVF9DT05ORUNURUQgICAgICAgICAgICAgKDB4ODApCisKKy8qCisgKiBIb3N0IGNvZGUgKGRyaXZlcnMsIEJJT1MsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBOdW1QaHlzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPX01BWAorI2RlZmluZSBNUElfTUFOUEFHRTdfQ09OTkVDVE9SX0lORk9fTUFYICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX0NPTkZJR19QQUdFX01BTlVGQUNUVVJJTkdfNworeworICAgIENPTkZJR19QQUdFX0hFQURFUiAgICAgICAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAvKiAwMGggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgLyogMDRoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgIC8qIDA4aCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAvKiAwQ2ggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlTmFtZVsxNl07ICAgICAgLyogMTBoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE51bVBoeXM7ICAgICAgICAgICAgICAgIC8qIDIwaCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAvKiAyMWggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgLyogMjJoICovCisgICAgTVBJX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPIENvbm5lY3RvckluZm9bTVBJX01BTlBBR0U3X0NPTk5FQ1RPUl9JTkZPX01BWF07IC8qIDI0aCAqLworfSBDT05GSUdfUEFHRV9NQU5VRkFDVFVSSU5HXzcsIE1QSV9QT0lOVEVSIFBUUl9DT05GSUdfUEFHRV9NQU5VRkFDVFVSSU5HXzcsCisgIE1hbnVmYWN0dXJpbmdQYWdlN190LCBNUElfUE9JTlRFUiBwTWFudWZhY3R1cmluZ1BhZ2U3X3Q7CisKKyNkZWZpbmUgTVBJX01BTlVGQUNUVVJJTkc3X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgKDB4MDApCisKKy8qIGRlZmluZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUElfTUFOUEFHRTdfRkxBR19VU0VfU0xPVF9JTkZPICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIElPIFVuaXQgQ29uZmlnIFBhZ2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODY3LDcgKzkzOSw3IEBACiB9IENPTkZJR19QQUdFX0lPQ18yLCBNUElfUE9JTlRFUiBQVFJfQ09ORklHX1BBR0VfSU9DXzIsCiAgIElPQ1BhZ2UyX3QsIE1QSV9QT0lOVEVSIHBJT0NQYWdlMl90OwogCi0jZGVmaW5lIE1QSV9JT0NQQUdFMl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUElfSU9DUEFHRTJfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAoMHgwNCkKIAogLyogSU9DIFBhZ2UgMiBDYXBhYmlsaXRpZXMgZmxhZ3MgKi8KIApAQCAtODc4LDYgKzk1MCw3IEBACiAjZGVmaW5lIE1QSV9JT0NQQUdFMl9DQVBfRkxBR1NfUkFJRF82X1NVUFBPUlQgICAgICAgICAgICgweDAwMDAwMDEwKQogI2RlZmluZSBNUElfSU9DUEFHRTJfQ0FQX0ZMQUdTX1JBSURfMTBfU1VQUE9SVCAgICAgICAgICAoMHgwMDAwMDAyMCkKICNkZWZpbmUgTVBJX0lPQ1BBR0UyX0NBUF9GTEFHU19SQUlEXzUwX1NVUFBPUlQgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSV9JT0NQQUdFMl9DQVBfRkxBR1NfUkFJRF82NF9CSVRfQUREUkVTU0lORyAgICgweDEwMDAwMDAwKQogI2RlZmluZSBNUElfSU9DUEFHRTJfQ0FQX0ZMQUdTX1NFU19TVVBQT1JUICAgICAgICAgICAgICAoMHgyMDAwMDAwMCkKICNkZWZpbmUgTVBJX0lPQ1BBR0UyX0NBUF9GTEFHU19TQUZURV9TVVBQT1JUICAgICAgICAgICAgKDB4NDAwMDAwMDApCiAjZGVmaW5lIE1QSV9JT0NQQUdFMl9DQVBfRkxBR1NfQ1JPU1NfQ0hBTk5FTF9TVVBQT1JUICAgICgweDgwMDAwMDAwKQpAQCAtOTc1LDYgKzEwNDgsNDQgQEAKIAogI2RlZmluZSBNUElfSU9DUEFHRTVfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAoMHgwMCkKIAordHlwZWRlZiBzdHJ1Y3QgX0NPTkZJR19QQUdFX0lPQ182Cit7CisgICAgQ09ORklHX1BBR0VfSEVBREVSICAgICAgICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDBoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIENhcGFiaWxpdGllc0ZsYWdzOyAgICAgICAgICAgICAgLyogMDRoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1heERyaXZlc0lTOyAgICAgICAgICAgICAgICAgICAgLyogMDhoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1heERyaXZlc0lNOyAgICAgICAgICAgICAgICAgICAgLyogMDloICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1heERyaXZlc0lNRTsgICAgICAgICAgICAgICAgICAgLyogMEFoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMEJoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1pbkRyaXZlc0lTOyAgICAgICAgICAgICAgICAgICAgLyogMENoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1pbkRyaXZlc0lNOyAgICAgICAgICAgICAgICAgICAgLyogMERoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1pbkRyaXZlc0lNRTsgICAgICAgICAgICAgICAgICAgLyogMEVoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMEZoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1heEdsb2JhbEhvdFNwYXJlczsgICAgICAgICAgICAgLyogMTBoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMTFoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMTJoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAgICAgLyogMTRoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZFN0cmlwZVNpemVNYXBJUzsgICAgICAgLyogMThoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZFN0cmlwZVNpemVNYXBJTUU7ICAgICAgLyogMUNoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAgICAgLyogMjBoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhU2l6ZTsgICAgICAgICAgICAgICAgICAgLyogMjRoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAgICAgLyogMjVoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkODsgICAgICAgICAgICAgICAgICAgICAgLyogMjZoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIE1heEJhZEJsb2NrVGFibGVFbnRyaWVzOyAgICAgICAgLyogMjhoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkOTsgICAgICAgICAgICAgICAgICAgICAgLyogMkFoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIElSTnZzcmFtVXNhZ2U7ICAgICAgICAgICAgICAgICAgLyogMkNoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTA7ICAgICAgICAgICAgICAgICAgICAgLyogMkVoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIElSTnZzcmFtVmVyc2lvbjsgICAgICAgICAgICAgICAgLyogMzBoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTE7ICAgICAgICAgICAgICAgICAgICAgLyogMzRoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTI7ICAgICAgICAgICAgICAgICAgICAgLyogMzhoICovCit9IENPTkZJR19QQUdFX0lPQ182LCBNUElfUE9JTlRFUiBQVFJfQ09ORklHX1BBR0VfSU9DXzYsCisgIElPQ1BhZ2U2X3QsIE1QSV9QT0lOVEVSIHBJT0NQYWdlNl90OworCisjZGVmaW5lIE1QSV9JT0NQQUdFNl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICgweDAwKQorCisvKiBJT0MgUGFnZSA2IENhcGFiaWxpdGllcyBGbGFncyAqLworCisjZGVmaW5lIE1QSV9JT0NQQUdFNl9DQVBfRkxBR1NfR0xPQkFMX0hPVF9TUEFSRSAgICAgICAgICgweDAwMDAwMDAxKQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgQklPUyBDb25maWcgUGFnZXMKQEAgLTEyMTgsMTMgKzEzMjksMTMgQEAKICAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgLyogMTRoICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgIC8qIDE4aCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBCb290RGV2aWNlRm9ybTsgICAgICAgICAvKiAxQ2ggKi8KLSAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgLyogMURoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZCb290RGV2aWNlRm9ybTsgICAgIC8qIDFDaCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgICAgICAvKiAxRWggKi8KICAgICBNUElfQklPU1BBR0UyX0JPT1RfREVWSUNFICAgQm9vdERldmljZTsgICAgICAgICAgICAgLyogMjBoICovCiB9IENPTkZJR19QQUdFX0JJT1NfMiwgTVBJX1BPSU5URVIgUFRSX0NPTkZJR19QQUdFX0JJT1NfMiwKICAgQklPU1BhZ2UyX3QsIE1QSV9QT0lOVEVSIHBCSU9TUGFnZTJfdDsKIAotI2RlZmluZSBNUElfQklPU1BBR0UyX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJX0JJT1NQQUdFMl9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDIpCiAKICNkZWZpbmUgTVBJX0JJT1NQQUdFMl9GT1JNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEYpCiAjZGVmaW5lIE1QSV9CSU9TUEFHRTJfRk9STV9BREFQVEVSX09SREVSICAgICAgICAgICAgICAgICgweDAwKQpAQCAtMjA4MCw3ICsyMTkxLDcgQEAKICAgICBSQUlEX1ZPTDBfU1RBVFVTICAgICAgICBWb2x1bWVTdGF0dXM7ICAgLyogMDhoICovCiAgICAgUkFJRF9WT0wwX1NFVFRJTkdTICAgICAgVm9sdW1lU2V0dGluZ3M7IC8qIDBDaCAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIE1heExCQTsgICAgICAgICAvKiAxMGggKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgLyogMTRoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgTWF4TEJBSGlnaDsgICAgIC8qIDE0aCAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFN0cmlwZVNpemU7ICAgICAvKiAxOGggKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgLyogMUNoICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgIC8qIDIwaCAqLwpAQCAtMjA5Miw3ICsyMjAzLDcgQEAKIH0gQ09ORklHX1BBR0VfUkFJRF9WT0xfMCwgTVBJX1BPSU5URVIgUFRSX0NPTkZJR19QQUdFX1JBSURfVk9MXzAsCiAgIFJhaWRWb2x1bWVQYWdlMF90LCBNUElfUE9JTlRFUiBwUmFpZFZvbHVtZVBhZ2UwX3Q7CiAKLSNkZWZpbmUgTVBJX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSV9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDA2KQogCiAvKiB2YWx1ZXMgZm9yIFJBSUQgVm9sdW1lIFBhZ2UgMCBJbmFjdGl2ZVN0YXR1cyBmaWVsZCAqLwogI2RlZmluZSBNUElfUkFJRFZPTFBBR0UwX1VOS05PV05fSU5BQ1RJVkUgICAgICAgICAgICAgICAoMHgwMCkKQEAgLTIzMjQsNyArMjQzNSw4IEBACiB0eXBlZGVmIHN0cnVjdCBfQ09ORklHX1BBR0VfU0FTX0lPX1VOSVRfMAogewogICAgIENPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDBoICovCi0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwOGggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE52ZGF0YVZlcnNpb25EZWZhdWx0OyAgICAgICAgICAgICAgIC8qIDA4aCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnZkYXRhVmVyc2lvblBlcnNpc3RlbnQ7ICAgICAgICAgICAgLyogMEFoICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwQ2ggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDBEaCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMEVoICovCkBAIC0yMzMyLDcgKzI0NDQsNyBAQAogfSBDT05GSUdfUEFHRV9TQVNfSU9fVU5JVF8wLCBNUElfUE9JTlRFUiBQVFJfQ09ORklHX1BBR0VfU0FTX0lPX1VOSVRfMCwKICAgU2FzSU9Vbml0UGFnZTBfdCwgTVBJX1BPSU5URVIgcFNhc0lPVW5pdFBhZ2UwX3Q7CiAKLSNkZWZpbmUgTVBJX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSV9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTiAgICAgICgweDA0KQogCiAvKiB2YWx1ZXMgZm9yIFNBUyBJTyBVbml0IFBhZ2UgMCBQb3J0RmxhZ3MgKi8KICNkZWZpbmUgTVBJX1NBU19JT1VOSVQwX1BPUlRfRkxBR1NfRElTQ09WRVJZX0lOX1BST0dSRVNTICAgICgweDA4KQpAQCAtMjM3MywxMiArMjQ4NSwxMyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfTVBJX1NBU19JT19VTklUMV9QSFlfREFUQQogewotICAgIFU4ICAgICAgICAgIFBvcnQ7ICAgICAgICAgICAgICAgICAgIC8qIDAwaCAqLwotICAgIFU4ICAgICAgICAgIFBvcnRGbGFnczsgICAgICAgICAgICAgIC8qIDAxaCAqLwotICAgIFU4ICAgICAgICAgIFBoeUZsYWdzOyAgICAgICAgICAgICAgIC8qIDAyaCAqLwotICAgIFU4ICAgICAgICAgIE1heE1pbkxpbmtSYXRlOyAgICAgICAgIC8qIDAzaCAqLwotICAgIFUzMiAgICAgICAgIENvbnRyb2xsZXJQaHlEZXZpY2VJbmZvOy8qIDA0aCAqLwotICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIDA4aCAqLworICAgIFU4ICAgICAgICAgIFBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAwMGggKi8KKyAgICBVOCAgICAgICAgICBQb3J0RmxhZ3M7ICAgICAgICAgICAgICAgICAgLyogMDFoICovCisgICAgVTggICAgICAgICAgUGh5RmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDAyaCAqLworICAgIFU4ICAgICAgICAgIE1heE1pbkxpbmtSYXRlOyAgICAgICAgICAgICAvKiAwM2ggKi8KKyAgICBVMzIgICAgICAgICBDb250cm9sbGVyUGh5RGV2aWNlSW5mbzsgICAgLyogMDRoICovCisgICAgVTE2ICAgICAgICAgTWF4VGFyZ2V0UG9ydENvbm5lY3RUaW1lOyAgIC8qIDA4aCAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAwQWggKi8KIH0gTVBJX1NBU19JT19VTklUMV9QSFlfREFUQSwgTVBJX1BPSU5URVIgUFRSX01QSV9TQVNfSU9fVU5JVDFfUEhZX0RBVEEsCiAgIFNhc0lPVW5pdDFQaHlEYXRhLCBNUElfUE9JTlRFUiBwU2FzSU9Vbml0MVBoeURhdGE7CiAKQEAgLTIzOTUsMTUgKzI1MDgsMTcgQEAKICAgICBDT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDBoICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xGbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIDA4aCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBNYXhOdW1TQVRBVGFyZ2V0czsgICAgICAgICAgICAgICAgICAvKiAwQWggKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMENoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxDb250cm9sRmxhZ3M7ICAgICAgICAgICAgIC8qIDBDaCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwRWggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTBoICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFNBVEFNYXhRRGVwdGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDExaCAqLwotICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMmggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0RGV2aWNlTWlzc2luZ0RlbGF5OyAgICAgICAgICAgLyogMTJoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIElPRGV2aWNlTWlzc2luZ0RlbGF5OyAgICAgICAgICAgICAgIC8qIDEzaCAqLwogICAgIE1QSV9TQVNfSU9fVU5JVDFfUEhZX0RBVEEgICBQaHlEYXRhW01QSV9TQVNfSU9VTklUMV9QSFlfTUFYXTsgICAvKiAxNGggKi8KIH0gQ09ORklHX1BBR0VfU0FTX0lPX1VOSVRfMSwgTVBJX1BPSU5URVIgUFRSX0NPTkZJR19QQUdFX1NBU19JT19VTklUXzEsCiAgIFNhc0lPVW5pdFBhZ2UxX3QsIE1QSV9QT0lOVEVSIHBTYXNJT1VuaXRQYWdlMV90OwogCi0jZGVmaW5lIE1QSV9TQVNJT1VOSVRQQUdFMV9QQUdFVkVSU0lPTiAgICAgICgweDA1KQorI2RlZmluZSBNUElfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT04gICAgICAoMHgwNikKIAogLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDEgQ29udHJvbEZsYWdzICovCiAjZGVmaW5lIE1QSV9TQVNfSU9VTklUMV9DT05UUk9MX0RFVklDRV9TRUxGX1RFU1QgICAgICAgICAgICAoMHg4MDAwKQpAQCAtMjQyOCw2ICsyNTQzLDEzIEBACiAjZGVmaW5lIE1QSV9TQVNfSU9VTklUMV9DT05UUk9MX0ZJUlNUX0xWTF9ESVNDX09OTFkgICAgICAgICAoMHgwMDAyKQogI2RlZmluZSBNUElfU0FTX0lPVU5JVDFfQ09OVFJPTF9DTEVBUl9BRkZJTElBVElPTiAgICAgICAgICAgKDB4MDAwMSkKIAorLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDEgQWRkaXRpb25hbENvbnRyb2xGbGFncyAqLworI2RlZmluZSBNUElfU0FTX0lPVU5JVDFfQUNPTlRST0xfQUxMT1dfVEFCTEVfVE9fVEFCTEUgICAgICAgKDB4MDAwMSkKKworLyogZGVmaW5lcyBmb3IgU0FTIElPIFVuaXQgUGFnZSAxIFJlcG9ydERldmljZU1pc3NpbmdEZWxheSAqLworI2RlZmluZSBNUElfU0FTX0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVElNRU9VVF9NQVNLICAgICAgICAgKDB4N0YpCisjZGVmaW5lIE1QSV9TQVNfSU9VTklUMV9SRVBPUlRfTUlTU0lOR19VTklUXzE2ICAgICAgICAgICAgICAoMHg4MCkKKwogLyogdmFsdWVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDEgUG9ydEZsYWdzICovCiAjZGVmaW5lIE1QSV9TQVNfSU9VTklUMV9QT1JUX0ZMQUdTXzBfVEFSR0VUX0lPQ19OVU0gICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJX1NBU19JT1VOSVQxX1BPUlRfRkxBR1NfMV9UQVJHRVRfSU9DX05VTSAgICAgICAgICgweDA0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2hpc3RvcnkudHh0IGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2hpc3RvcnkudHh0CmluZGV4IDRhNWY4ZGQuLjU4MmNmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9oaXN0b3J5LnR4dAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfaGlzdG9yeS50eHQKQEAgLTYsMjUgKzYsMjUgQEAKICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBMU0kgTG9naWMgQ29ycG9yYXRpb24uCiAKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBIZWFkZXIgU2V0IFJlbGVhc2UgVmVyc2lvbjogICAgMDEuMDUuMTIKLSBIZWFkZXIgU2V0IFJlbGVhc2UgRGF0ZTogICAgICAgMDgtMzAtMDUKKyBIZWFkZXIgU2V0IFJlbGVhc2UgVmVyc2lvbjogICAgMDEuMDUuMTMKKyBIZWFkZXIgU2V0IFJlbGVhc2UgRGF0ZTogICAgICAgMDMtMjctMDYKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIEZpbGVuYW1lICAgICAgICAgICAgICAgQ3VycmVudCB2ZXJzaW9uICAgICBQcmlvciB2ZXJzaW9uCiAgLS0tLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0KLSBtcGkuaCAgICAgICAgICAgICAgICAgIDAxLjA1LjEwICAgICAgICAgICAgMDEuMDUuMDkKLSBtcGlfaW9jLmggICAgICAgICAgICAgIDAxLjA1LjEwICAgICAgICAgICAgMDEuMDUuMDkKLSBtcGlfY25mZy5oICAgICAgICAgICAgIDAxLjA1LjExICAgICAgICAgICAgMDEuMDUuMTAKLSBtcGlfaW5pdC5oICAgICAgICAgICAgIDAxLjA1LjA2ICAgICAgICAgICAgMDEuMDUuMDYKLSBtcGlfdGFyZy5oICAgICAgICAgICAgIDAxLjA1LjA1ICAgICAgICAgICAgMDEuMDUuMDUKKyBtcGkuaCAgICAgICAgICAgICAgICAgIDAxLjA1LjExICAgICAgICAgICAgMDEuMDUuMTAKKyBtcGlfaW9jLmggICAgICAgICAgICAgIDAxLjA1LjExICAgICAgICAgICAgMDEuMDUuMTAKKyBtcGlfY25mZy5oICAgICAgICAgICAgIDAxLjA1LjEyICAgICAgICAgICAgMDEuMDUuMTEKKyBtcGlfaW5pdC5oICAgICAgICAgICAgIDAxLjA1LjA3ICAgICAgICAgICAgMDEuMDUuMDYKKyBtcGlfdGFyZy5oICAgICAgICAgICAgIDAxLjA1LjA2ICAgICAgICAgICAgMDEuMDUuMDUKICBtcGlfZmMuaCAgICAgICAgICAgICAgIDAxLjA1LjAxICAgICAgICAgICAgMDEuMDUuMDEKICBtcGlfbGFuLmggICAgICAgICAgICAgIDAxLjA1LjAxICAgICAgICAgICAgMDEuMDUuMDEKICBtcGlfcmFpZC5oICAgICAgICAgICAgIDAxLjA1LjAyICAgICAgICAgICAgMDEuMDUuMDIKICBtcGlfdG9vbC5oICAgICAgICAgICAgIDAxLjA1LjAzICAgICAgICAgICAgMDEuMDUuMDMKICBtcGlfaW5iLmggICAgICAgICAgICAgIDAxLjA1LjAxICAgICAgICAgICAgMDEuMDUuMDEKLSBtcGlfc2FzLmggICAgICAgICAgICAgIDAxLjA1LjAyICAgICAgICAgICAgMDEuMDUuMDEKLSBtcGlfdHlwZS5oICAgICAgICAgICAgIDAxLjA1LjAyICAgICAgICAgICAgMDEuMDUuMDEKLSBtcGlfaGlzdG9yeS50eHQgICAgICAgIDAxLjA1LjEyICAgICAgICAgICAgMDEuMDUuMTEKKyBtcGlfc2FzLmggICAgICAgICAgICAgIDAxLjA1LjAzICAgICAgICAgICAgMDEuMDUuMDIKKyBtcGlfdHlwZS5oICAgICAgICAgICAgIDAxLjA1LjAyICAgICAgICAgICAgMDEuMDUuMDIKKyBtcGlfaGlzdG9yeS50eHQgICAgICAgIDAxLjA1LjEzICAgICAgICAgICAgMDEuMDUuMTIKIAogCiAgKiAgRGF0ZSAgICAgIFZlcnNpb24gICBEZXNjcmlwdGlvbgpAQCAtOTMsNiArOTMsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgRUVEUCBJT0NTdGF0dXMgY29kZXMuCiAgKiAgMDgtMDMtMDUgIDAxLjA1LjA5ICBCdW1wZWQgTVBJX0hFQURFUl9WRVJTSU9OX1VOSVQuCiAgKiAgMDgtMzAtMDUgIDAxLjA1LjEwICBBZGRlZCAyIG5ldyBJT0NTdGF0dXMgY29kZXMgZm9yIFRhcmdldC4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMTEgIEJ1bXBlZCBNUElfSEVBREVSX1ZFUlNJT05fVU5JVC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGlfaW9jLmgKQEAgLTE3MCw2ICsxNzEsMTcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBSZWFzb25Db2RlIHZhbHVlIGZvciBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UKICAqICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGZhbWlseSBjb2RlIGZvciBGQzk0OUUuCisgKiAgMDMtMjctMDYgIDAxLjA1LjExICBBZGRlZCBNUElfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBhZGRpdGlvbmFsIFJlYXNvbiBDb2RlcyBhbmQgbW9yZSBldmVudCBkYXRhIGZpZWxkcworICogICAgICAgICAgICAgICAgICAgICAgdG8gRVZFTlRfREFUQV9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0UuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBFVkVOVF9EQVRBX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFIHN0cnVjdHVyZSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIG5ldyBldmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSV9FVkVOVF9TQVNfU01QX0VSUk9SIGFuZCBldmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSV9FVkVOVF9TQVNfSU5JVF9ERVZJQ0VfU1RBVFVTX0NIQU5HRSBhbmQgZXZlbnQKKyAqICAgICAgICAgICAgICAgICAgICAgIGRhdGEgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJX0VWRU5UX1NBU19JTklUX1RBQkxFX09WRVJGTE9XIGFuZCBldmVudAorICogICAgICAgICAgICAgICAgICAgICAgZGF0YSBzdHJ1Y3R1cmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUElfRVhUX0lNQUdFX1RZUEVfSU5JVElBTElaQVRJT04uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpX2NuZmcuaApAQCAtNDI1LDYgKzQzNywxNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgcG9zdHBvbmUgU0FUQSBJbml0IGJpdCB0byBTQVMgSU8gVW5pdCBQYWdlIDEKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xGbGFncy4KICAqICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWQgTG9nRW50cnkgZm9ybWF0IGZvciBMb2cgUGFnZSAwLgorICogIDAzLTI3LTA2ICAwMS4wNS4xMiAgQWRkZWQgdHdvIG5ldyBGbGFncyBkZWZpbmVzIGZvciBNYW51ZmFjdHVyaW5nIFBhZ2UgNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1hbnVmYWN0dXJpbmcgUGFnZSA3LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJX0lPQ1BBR0UyX0NBUF9GTEFHU19SQUlEXzY0X0JJVF9BRERSRVNTSU5HLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgSU9DIFBhZ2UgNi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFByZXZCb290RGV2aWNlRm9ybSBmaWVsZCB0byBDT05GSUdfUEFHRV9CSU9TXzIuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhMQkFIaWdoIGZpZWxkIHRvIFJBSUQgVm9sdW1lIFBhZ2UgMC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE52ZGF0YSB2ZXJzaW9uIGZpZWxkcyB0byBTQVMgSU8gVW5pdCBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBBZGRpdGlvbmFsQ29udHJvbEZsYWdzLCBNYXhUYXJnZXRQb3J0Q29ubmVjdFRpbWUsCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXBvcnREZXZpY2VNaXNzaW5nRGVsYXksIGFuZCBJT0RldmljZU1pc3NpbmdEZWxheQorICogICAgICAgICAgICAgICAgICAgICAgZmllbGRzIHRvIFNBUyBJTyBVbml0IFBhZ2UgMS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGlfaW5pdC5oCkBAIC00NjcsNiArNDg5LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZvdXIgbmV3IGRlZmluZXMgZm9yIFNFUCBTbG90U3RhdHVzLgogICogIDA4LTAzLTA1ICAwMS4wNS4wNiAgRml4ZWQgc29tZSBNUElfU0NTSUlPMzJfTVNHRkxHU18gZGVmaW5lcyB0byBtYWtlIHRoZW0KICAqICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZSBpbiB0aGUgZmlyc3QgMzIgY2hhcmFjdGVycy4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMDcgIEFkZGVkIFRhc2sgTWFuYWdlbWVudCB0eXBlIG9mIENsZWFyIEFDQS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGlfdGFyZy5oCkBAIC01MTEsNiArNTM0LDcgQEAKICAqICAwMi0yMi0wNSAgMDEuMDUuMDMgIENoYW5nZWQgYSBjb21tZW50LgogICogIDAzLTExLTA1ICAwMS4wNS4wNCAgUmVtb3ZlZCBUYXJnZXRBc3Npc3RFeHRlbmRlZCBSZXF1ZXN0LgogICogIDA2LTI0LTA1ICAwMS4wNS4wNSAgQWRkZWQgVGFyZ2V0QXNzaXN0RXh0ZW5kZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMDYgIEFkZGVkIGEgY29tbWVudC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGlfZmMuaApAQCAtNjEwLDYgKzYzNCwxMCBAQAogICogIDA4LTMwLTA1ICAwMS4wNS4wMiAgQWRkZWQgRGV2aWNlSW5mbyBiaXQgZm9yIFNFUC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFByaW1GbGFncyBhbmQgUHJpbWl0aXZlIGZpZWxkIHRvIFNBUyBJTyBVbml0CiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIHJlcXVlc3QsIGFuZCBhZGRlZCBhIG5ldyBvcGVyYXRpb24gY29kZS4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMDMgIEFkZGVkIEZvcmNlIEZ1bGwgRGlzY292ZXJ5LCBUcmFuc21pdCBQb3J0IFNlbGVjdCBTaWduYWwsCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgUmVtb3ZlIERldmljZSBvcGVyYXRpb25zIHRvIFNBUyBJTyBVbml0IENvbnRyb2wuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBEZXZIYW5kbGUgZmllbGQgdG8gU0FTIElPIFVuaXQgQ29udHJvbCByZXF1ZXN0IGFuZAorICogICAgICAgICAgICAgICAgICAgICAgcmVwbHkuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpX3R5cGUuaApAQCAtNjI1LDIwICs2NTMsMjAgQEAKIAogbXBpX2hpc3RvcnkudHh0ICAgICAgICAgUGFydHMgbGlzdCBoaXN0b3J5CiAKLUZpbGVuYW1lICAgIDAxLjA1LjEyICAwMS4wNS4xMSAgMDEuMDUuMTAgIDAxLjA1LjA5Ci0tLS0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQotbXBpLmggICAgICAgMDEuMDUuMTAgIDAxLjA1LjA5ICAwMS4wNS4wOCAgMDEuMDUuMDcKLW1waV9pb2MuaCAgIDAxLjA1LjEwICAwMS4wNS4wOSAgMDEuMDUuMDkgIDAxLjA1LjA4Ci1tcGlfY25mZy5oICAwMS4wNS4xMSAgMDEuMDUuMTAgIDAxLjA1LjA5ICAwMS4wNS4wOAotbXBpX2luaXQuaCAgMDEuMDUuMDYgIDAxLjA1LjA2ICAwMS4wNS4wNSAgMDEuMDUuMDQKLW1waV90YXJnLmggIDAxLjA1LjA1ICAwMS4wNS4wNSAgMDEuMDUuMDUgIDAxLjA1LjA0Ci1tcGlfZmMuaCAgICAwMS4wNS4wMSAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMQotbXBpX2xhbi5oICAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMSAgMDEuMDUuMDEKLW1waV9yYWlkLmggIDAxLjA1LjAyICAwMS4wNS4wMiAgMDEuMDUuMDIgIDAxLjA1LjAyCi1tcGlfdG9vbC5oICAwMS4wNS4wMyAgMDEuMDUuMDMgIDAxLjA1LjAzICAwMS4wNS4wMwotbXBpX2luYi5oICAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMSAgMDEuMDUuMDEKLW1waV9zYXMuaCAgIDAxLjA1LjAyICAwMS4wNS4wMSAgMDEuMDUuMDEgIDAxLjA1LjAxCi1tcGlfdHlwZS5oICAwMS4wNS4wMiAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMQorRmlsZW5hbWUgICAgMDEuMDUuMTMgIDAxLjA1LjEyICAwMS4wNS4xMSAgMDEuMDUuMTAgIDAxLjA1LjA5CistLS0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KK21waS5oICAgICAgIDAxLjA1LjExICAwMS4wNS4xMCAgMDEuMDUuMDkgIDAxLjA1LjA4ICAwMS4wNS4wNworbXBpX2lvYy5oICAgMDEuMDUuMTEgIDAxLjA1LjEwICAwMS4wNS4wOSAgMDEuMDUuMDkgIDAxLjA1LjA4CittcGlfY25mZy5oICAwMS4wNS4xMiAgMDEuMDUuMTEgIDAxLjA1LjEwICAwMS4wNS4wOSAgMDEuMDUuMDgKK21waV9pbml0LmggIDAxLjA1LjA3ICAwMS4wNS4wNiAgMDEuMDUuMDYgIDAxLjA1LjA1ICAwMS4wNS4wNAorbXBpX3RhcmcuaCAgMDEuMDUuMDYgIDAxLjA1LjA1ICAwMS4wNS4wNSAgMDEuMDUuMDUgIDAxLjA1LjA0CittcGlfZmMuaCAgICAwMS4wNS4wMSAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMSAgMDEuMDUuMDEKK21waV9sYW4uaCAgIDAxLjA1LjAxICAwMS4wNS4wMSAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMQorbXBpX3JhaWQuaCAgMDEuMDUuMDIgIDAxLjA1LjAyICAwMS4wNS4wMiAgMDEuMDUuMDIgIDAxLjA1LjAyCittcGlfdG9vbC5oICAwMS4wNS4wMyAgMDEuMDUuMDMgIDAxLjA1LjAzICAwMS4wNS4wMyAgMDEuMDUuMDMKK21waV9pbmIuaCAgIDAxLjA1LjAxICAwMS4wNS4wMSAgMDEuMDUuMDEgIDAxLjA1LjAxICAwMS4wNS4wMQorbXBpX3Nhcy5oICAgMDEuMDUuMDMgIDAxLjA1LjAyICAwMS4wNS4wMSAgMDEuMDUuMDEgIDAxLjA1LjAxCittcGlfdHlwZS5oICAwMS4wNS4wMiAgMDEuMDUuMDIgIDAxLjA1LjAxICAwMS4wNS4wMSAgMDEuMDUuMDEKIAogRmlsZW5hbWUgICAgMDEuMDUuMDggICAwMS4wNS4wNyAgIDAxLjA1LjA2ICAgMDEuMDUuMDUgICAwMS4wNS4wNCAgIDAxLjA1LjAzCiAtLS0tLS0tLS0tICAtLS0tLS0tLSAgIC0tLS0tLS0tICAgLS0tLS0tLS0gICAtLS0tLS0tLSAgIC0tLS0tLS0tICAgLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9pbml0LmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfaW5pdC5oCmluZGV4IDY4OTQxZjQuLmMxYzY3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9pbml0LmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2luaXQuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgOCwgMjAwMAogICoKLSAqICAgIG1waV9pbml0LmggVmVyc2lvbjogIDAxLjA1LjA2CisgKiAgICBtcGlfaW5pdC5oIFZlcnNpb246ICAwMS4wNS4wNwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTUyLDYgKzUyLDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZvdXIgbmV3IGRlZmluZXMgZm9yIFNFUCBTbG90U3RhdHVzLgogICogIDA4LTAzLTA1ICAwMS4wNS4wNiAgRml4ZWQgc29tZSBNUElfU0NTSUlPMzJfTVNHRkxHU18gZGVmaW5lcyB0byBtYWtlIHRoZW0KICAqICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZSBpbiB0aGUgZmlyc3QgMzIgY2hhcmFjdGVycy4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMDcgIEFkZGVkIFRhc2sgTWFuYWdlbWVudCB0eXBlIG9mIENsZWFyIEFDQS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTQyNyw2ICs0MjgsNyBAQAogI2RlZmluZSBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0xPR0lDQUxfVU5JVF9SRVNFVCAgICAoMHgwNSkKICNkZWZpbmUgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9DTEVBUl9UQVNLX1NFVCAgICAgICAgKDB4MDYpCiAjZGVmaW5lIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSyAgICAgICAgICAgICgweDA3KQorI2RlZmluZSBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0NMRUFSX0FDQSAgICAgICAgICAgICAoMHgwOCkKIAogLyogTXNnRmxhZ3MgYml0cyAqLwogI2RlZmluZSBNUElfU0NTSVRBU0tNR01UX01TR0ZMQUdTX1RBUkdFVF9SRVNFVF9PUFRJT04gICAoMHgwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9pb2MuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9pb2MuaAppbmRleCAyYzVmNDNmLi4xOGJhNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfaW9jLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2lvYy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgSU9DLCBQb3J0LCBFdmVudCwgRlcgRG93bmxvYWQsIGFuZCBGVyBVcGxvYWQgbWVzc2FnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgQXVndXN0IDExLCAyMDAwCiAgKgotICogICAgbXBpX2lvYy5oIFZlcnNpb246ICAwMS4wNS4xMAorICogICAgbXBpX2lvYy5oIFZlcnNpb246ICAwMS4wNS4xMQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTg3LDYgKzg3LDE3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgUmVhc29uQ29kZSB2YWx1ZSBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICBldmVudC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBmYW1pbHkgY29kZSBmb3IgRkM5NDlFLgorICogIDAzLTI3LTA2ICAwMS4wNS4xMSAgQWRkZWQgTVBJX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfVExSLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgYWRkaXRpb25hbCBSZWFzb24gQ29kZXMgYW5kIG1vcmUgZXZlbnQgZGF0YSBmaWVsZHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIEVWRU5UX0RBVEFfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgRVZFTlRfREFUQV9TQVNfQlJPQURDQVNUX1BSSU1JVElWRSBzdHJ1Y3R1cmUgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICBuZXcgZXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUElfRVZFTlRfU0FTX1NNUF9FUlJPUiBhbmQgZXZlbnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUElfRVZFTlRfU0FTX0lOSVRfREVWSUNFX1NUQVRVU19DSEFOR0UgYW5kIGV2ZW50CisgKiAgICAgICAgICAgICAgICAgICAgICBkYXRhIHN0cnVjdHVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSV9FVkVOVF9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVyBhbmQgZXZlbnQKKyAqICAgICAgICAgICAgICAgICAgICAgIGRhdGEgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJX0VYVF9JTUFHRV9UWVBFX0lOSVRJQUxJWkFUSU9OLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjcyLDYgKzI4Myw3IEBACiAjZGVmaW5lIE1QSV9JT0NGQUNUU19DQVBBQklMSVRZX01VTFRJQ0FTVCAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQogI2RlZmluZSBNUElfSU9DRkFDVFNfQ0FQQUJJTElUWV9TQ1NJSU8zMiAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKICNkZWZpbmUgTVBJX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTk9fU0NTSUlPMTYgICAgICAgICAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIE1QSV9JT0NGQUNUU19DQVBBQklMSVRZX1RMUiAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwODAwKQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDQ4LDMwICs0NjAsMzQgQEAKIAogLyogRXZlbnQgKi8KIAotI2RlZmluZSBNUElfRVZFTlRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgTVBJX0VWRU5UX0xPR19EQVRBICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIE1QSV9FVkVOVF9TVEFURV9DSEFOR0UgICAgICAgICAgICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBNUElfRVZFTlRfVU5JVF9BVFRFTlRJT04gICAgICAgICAgICAoMHgwMDAwMDAwMykKLSNkZWZpbmUgTVBJX0VWRU5UX0lPQ19CVVNfUkVTRVQgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCi0jZGVmaW5lIE1QSV9FVkVOVF9FWFRfQlVTX1JFU0VUICAgICAgICAgICAgICgweDAwMDAwMDA1KQotI2RlZmluZSBNUElfRVZFTlRfUkVTQ0FOICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNikKLSNkZWZpbmUgTVBJX0VWRU5UX0xJTktfU1RBVFVTX0NIQU5HRSAgICAgICAgKDB4MDAwMDAwMDcpCi0jZGVmaW5lIE1QSV9FVkVOVF9MT09QX1NUQVRFX0NIQU5HRSAgICAgICAgICgweDAwMDAwMDA4KQotI2RlZmluZSBNUElfRVZFTlRfTE9HT1VUICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOSkKLSNkZWZpbmUgTVBJX0VWRU5UX0VWRU5UX0NIQU5HRSAgICAgICAgICAgICAgKDB4MDAwMDAwMEEpCi0jZGVmaW5lIE1QSV9FVkVOVF9JTlRFR1JBVEVEX1JBSUQgICAgICAgICAgICgweDAwMDAwMDBCKQotI2RlZmluZSBNUElfRVZFTlRfU0NTSV9ERVZJQ0VfU1RBVFVTX0NIQU5HRSAoMHgwMDAwMDAwQykKLSNkZWZpbmUgTVBJX0VWRU5UX09OX0JVU19USU1FUl9FWFBJUkVEICAgICAgKDB4MDAwMDAwMEQpCi0jZGVmaW5lIE1QSV9FVkVOVF9RVUVVRV9GVUxMICAgICAgICAgICAgICAgICgweDAwMDAwMDBFKQotI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFICAoMHgwMDAwMDAwRikKLSNkZWZpbmUgTVBJX0VWRU5UX1NBU19TRVMgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTApCi0jZGVmaW5lIE1QSV9FVkVOVF9QRVJTSVNURU5UX1RBQkxFX0ZVTEwgICAgICgweDAwMDAwMDExKQotI2RlZmluZSBNUElfRVZFTlRfU0FTX1BIWV9MSU5LX1NUQVRVUyAgICAgICAoMHgwMDAwMDAxMikKLSNkZWZpbmUgTVBJX0VWRU5UX1NBU19ESVNDT1ZFUllfRVJST1IgICAgICAgKDB4MDAwMDAwMTMpCi0jZGVmaW5lIE1QSV9FVkVOVF9JUl9SRVNZTkNfVVBEQVRFICAgICAgICAgICgweDAwMDAwMDE0KQotI2RlZmluZSBNUElfRVZFTlRfSVIyICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxNSkKLSNkZWZpbmUgTVBJX0VWRU5UX1NBU19ESVNDT1ZFUlkgICAgICAgICAgICAgKDB4MDAwMDAwMTYpCi0jZGVmaW5lIE1QSV9FVkVOVF9MT0dfRU5UUllfQURERUQgICAgICAgICAgICgweDAwMDAwMDIxKQorI2RlZmluZSBNUElfRVZFTlRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCisjZGVmaW5lIE1QSV9FVkVOVF9MT0dfREFUQSAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVBJX0VWRU5UX1NUQVRFX0NIQU5HRSAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNUElfRVZFTlRfVU5JVF9BVFRFTlRJT04gICAgICAgICAgICAgICAgKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1QSV9FVkVOVF9JT0NfQlVTX1JFU0VUICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVBJX0VWRU5UX0VYVF9CVVNfUkVTRVQgICAgICAgICAgICAgICAgICgweDAwMDAwMDA1KQorI2RlZmluZSBNUElfRVZFTlRfUkVTQ0FOICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDYpCisjZGVmaW5lIE1QSV9FVkVOVF9MSU5LX1NUQVRVU19DSEFOR0UgICAgICAgICAgICAoMHgwMDAwMDAwNykKKyNkZWZpbmUgTVBJX0VWRU5UX0xPT1BfU1RBVEVfQ0hBTkdFICAgICAgICAgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNUElfRVZFTlRfTE9HT1VUICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDkpCisjZGVmaW5lIE1QSV9FVkVOVF9FVkVOVF9DSEFOR0UgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwQSkKKyNkZWZpbmUgTVBJX0VWRU5UX0lOVEVHUkFURURfUkFJRCAgICAgICAgICAgICAgICgweDAwMDAwMDBCKQorI2RlZmluZSBNUElfRVZFTlRfU0NTSV9ERVZJQ0VfU1RBVFVTX0NIQU5HRSAgICAgKDB4MDAwMDAwMEMpCisjZGVmaW5lIE1QSV9FVkVOVF9PTl9CVVNfVElNRVJfRVhQSVJFRCAgICAgICAgICAoMHgwMDAwMDAwRCkKKyNkZWZpbmUgTVBJX0VWRU5UX1FVRVVFX0ZVTEwgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDBFKQorI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFICAgICAgKDB4MDAwMDAwMEYpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfU0VTICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTVBJX0VWRU5UX1BFUlNJU1RFTlRfVEFCTEVfRlVMTCAgICAgICAgICgweDAwMDAwMDExKQorI2RlZmluZSBNUElfRVZFTlRfU0FTX1BIWV9MSU5LX1NUQVRVUyAgICAgICAgICAgKDB4MDAwMDAwMTIpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfRElTQ09WRVJZX0VSUk9SICAgICAgICAgICAoMHgwMDAwMDAxMykKKyNkZWZpbmUgTVBJX0VWRU5UX0lSX1JFU1lOQ19VUERBVEUgICAgICAgICAgICAgICgweDAwMDAwMDE0KQorI2RlZmluZSBNUElfRVZFTlRfSVIyICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTUpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfRElTQ09WRVJZICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxNikKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFICAgICAgICgweDAwMDAwMDE3KQorI2RlZmluZSBNUElfRVZFTlRfU0FTX0lOSVRfREVWSUNFX1NUQVRVU19DSEFOR0UgKDB4MDAwMDAwMTgpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVyAgICAgICAoMHgwMDAwMDAxOSkKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19TTVBfRVJST1IgICAgICAgICAgICAgICAgICgweDAwMDAwMDFBKQorI2RlZmluZSBNUElfRVZFTlRfTE9HX0VOVFJZX0FEREVEICAgICAgICAgICAgICAgKDB4MDAwMDAwMjEpCiAKIC8qIEFja1JlcXVpcmVkIGZpZWxkIHZhbHVlcyAqLwogCkBAIC01NTgsMTggKzU3NCwyNSBAQAogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBoeU51bTsgICAgICAgICAgICAgICAgICAgICAvKiAwRWggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMEZoICovCiAgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgU0FTQWRkcmVzczsgICAgICAgICAgICAgICAgIC8qIDEwaCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIExVTls4XTsgICAgICAgICAgICAgICAgICAgICAvKiAxOGggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBUYXNrVGFnOyAgICAgICAgICAgICAgICAgICAgLyogMjBoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDIyaCAqLwogfSBFVkVOVF9EQVRBX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRSwKICAgTVBJX1BPSU5URVIgUFRSX0VWRU5UX0RBVEFfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFLAogICBNcGlFdmVudERhdGFTYXNEZXZpY2VTdGF0dXNDaGFuZ2VfdCwKICAgTVBJX1BPSU5URVIgcE1waUV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90OwogCiAvKiBNUEkgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlIEV2ZW50IGRhdGEgUmVhc29uQ29kZSB2YWx1ZXMgKi8KLSNkZWZpbmUgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BRERFRCAgICAgICAgICAgICAgICAgKDB4MDMpCi0jZGVmaW5lIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfTk9UX1JFU1BPTkRJTkcgICAgICAgICgweDA0KQotI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEEgICAgICAgICAgICAoMHgwNSkKLSNkZWZpbmUgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT19QRVJTSVNUX0FEREVEICAgICAgKDB4MDYpCi0jZGVmaW5lIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVU5TVVBQT1JURUQgICAgICAgICAgICgweDA3KQotI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0lOVEVSTkFMX0RFVklDRV9SRVNFVCAoMHgwOCkKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BRERFRCAgICAgICAgICAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PVF9SRVNQT05ESU5HICAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU01BUlRfREFUQSAgICAgICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT19QRVJTSVNUX0FEREVEICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgKDB4MDcpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgICgweDA5KQorI2RlZmluZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FCT1JUX1RBU0tfU0VUX0lOVEVSTkFMICAgKDB4MEEpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ0xFQVJfVEFTS19TRVRfSU5URVJOQUwgICAoMHgwQikKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19RVUVSWV9UQVNLX0lOVEVSTkFMICAgICAgICgweDBDKQogCiAKIC8qIFNDU0kgRXZlbnQgZGF0YSBmb3IgUXVldWUgRnVsbCBldmVudCAqLwpAQCAtNzQyLDYgKzc2NSwyNyBAQAogfSBFVkVOVF9EQVRBX1NBU19TRVMsIE1QSV9QT0lOVEVSIFBUUl9FVkVOVF9EQVRBX1NBU19TRVMsCiAgIE1waUV2ZW50RGF0YVNhc1Nlc190LCBNUElfUE9JTlRFUiBwTXBpRXZlbnREYXRhU2FzU2VzX3Q7CiAKKy8qIFNBUyBCcm9hZGNhc3QgUHJpbWl0aXZlIEV2ZW50IGRhdGEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0VWRU5UX0RBVEFfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkUKK3sKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgICAgICAgICAgLyogMDBoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUG9ydDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDAxaCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnRXaWR0aDsgICAgICAgICAgICAgICAgICAvKiAwMmggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQcmltaXRpdmU7ICAgICAgICAgICAgICAgICAgLyogMDRoICovCit9IEVWRU5UX0RBVEFfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkUsCisgIE1QSV9QT0lOVEVSIFBUUl9FVkVOVF9EQVRBX1NBU19CUk9BRENBU1RfUFJJTUlUSVZFLAorICBNcGlFdmVudERhdGFTYXNCcm9hZGNhc3RQcmltaXRpdmVfdCwKKyAgTVBJX1BPSU5URVIgcE1waUV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90OworCisjZGVmaW5lIE1QSV9FVkVOVF9QUklNSVRJVkVfQ0hBTkdFICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJX0VWRU5UX1BSSU1JVElWRV9FWFBBTkRFUiAgICAgICAgICAgICgweDAzKQorI2RlZmluZSBNUElfRVZFTlRfUFJJTUlUSVZFX1JFU0VSVkVEMiAgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIE1QSV9FVkVOVF9QUklNSVRJVkVfUkVTRVJWRUQzICAgICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJX0VWRU5UX1BSSU1JVElWRV9SRVNFUlZFRDQgICAgICAgICAgICgweDA2KQorI2RlZmluZSBNUElfRVZFTlRfUFJJTUlUSVZFX0NIQU5HRTBfUkVTRVJWRUQgICAgKDB4MDcpCisjZGVmaW5lIE1QSV9FVkVOVF9QUklNSVRJVkVfQ0hBTkdFMV9SRVNFUlZFRCAgICAoMHgwOCkKKwogLyogU0FTIFBoeSBMaW5rIFN0YXR1cyBFdmVudCBkYXRhICovCiAKIHR5cGVkZWYgc3RydWN0IF9FVkVOVF9EQVRBX1NBU19QSFlfTElOS19TVEFUVVMKQEAgLTgwNCw2ICs4NDgsNTMgQEAKICNkZWZpbmUgTVBJX0VWRU5UX0RTQ1ZSWV9FUlJfRFNfTVVMVFBMX1BBVEhTICAgICAgICAgICAgICAgICgweDAwMDAwODAwKQogI2RlZmluZSBNUElfRVZFTlRfRFNDVlJZX0VSUl9EU19NQVhfU0FUQV9UQVJHRVRTICAgICAgICAgICAgKDB4MDAwMDEwMDApCiAKKy8qIFNBUyBTTVAgRXJyb3IgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfRVZFTlRfREFUQV9TQVNfU01QX0VSUk9SCit7CisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDAwaCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFBvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAwMWggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTTVBGdW5jdGlvblJlc3VsdDsgICAgICAgICAgLyogMDJoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDAzaCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFNBU0FkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAwNGggKi8KK30gRVZFTlRfREFUQV9TQVNfU01QX0VSUk9SLCBNUElfUE9JTlRFUiBQVFJfRVZFTlRfREFUQV9TQVNfU01QX0VSUk9SLAorICBNcGlFdmVudERhdGFTYXNTbXBFcnJvcl90LCBNUElfUE9JTlRFUiBwTXBpRXZlbnREYXRhU2FzU21wRXJyb3JfdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFN0YXR1cyBmaWVsZCBvZiB0aGUgU0FTIFNNUCBFcnJvciBldmVudCAqLworI2RlZmluZSBNUElfRVZFTlRfU0FTX1NNUF9GVU5DVElPTl9SRVNVTFRfVkFMSUQgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19TTVBfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSV9FVkVOVF9TQVNfU01QX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUElfRVZFTlRfU0FTX1NNUF9OT19ERVNUSU5BVElPTiAgICAgICAgICAgICAgICAoMHgwMykKKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19TTVBfQkFEX0RFU1RJTkFUSU9OICAgICAgICAgICAgICAgKDB4MDQpCisKKy8qIFNBUyBJbml0aWF0b3IgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfRVZFTlRfREFUQV9TQVNfSU5JVF9ERVZfU1RBVFVTX0NIQU5HRQoreworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGU7ICAgICAgICAgICAgICAgICAvKiAwMGggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBQb3J0OyAgICAgICAgICAgICAgICAgICAgICAgLyogMDFoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgIC8qIDAyaCAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFNBU0FkZHJlc3M7ICAgICAgICAgICAgICAgICAvKiAwNGggKi8KK30gRVZFTlRfREFUQV9TQVNfSU5JVF9ERVZfU1RBVFVTX0NIQU5HRSwKKyAgTVBJX1BPSU5URVIgUFRSX0VWRU5UX0RBVEFfU0FTX0lOSVRfREVWX1NUQVRVU19DSEFOR0UsCisgIE1waUV2ZW50RGF0YVNhc0luaXREZXZTdGF0dXNDaGFuZ2VfdCwKKyAgTVBJX1BPSU5URVIgcE1waUV2ZW50RGF0YVNhc0luaXREZXZTdGF0dXNDaGFuZ2VfdDsKKworLyogZGVmaW5lcyBmb3IgdGhlIFJlYXNvbkNvZGUgZmllbGQgb2YgdGhlIFNBUyBJbml0aWF0b3IgRGV2aWNlIFN0YXR1cyBDaGFuZ2UgZXZlbnQgKi8KKyNkZWZpbmUgTVBJX0VWRU5UX1NBU19JTklUX1JDX0FEREVEICAgICAgICAgICAgICAgICAoMHgwMSkKKworLyogU0FTIEluaXRpYXRvciBEZXZpY2UgVGFibGUgT3ZlcmZsb3cgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfRVZFTlRfREFUQV9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVworeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heEluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiAwMGggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50SW5pdDsgICAgICAgICAgICAgICAgLyogMDFoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDAyaCAqLworfSBFVkVOVF9EQVRBX1NBU19JTklUX1RBQkxFX09WRVJGTE9XLAorICBNUElfUE9JTlRFUiBQVFJfRVZFTlRfREFUQV9TQVNfSU5JVF9UQUJMRV9PVkVSRkxPVywKKyAgTXBpRXZlbnREYXRhU2FzSW5pdFRhYmxlT3ZlcmZsb3dfdCwKKyAgTVBJX1BPSU5URVIgcE1waUV2ZW50RGF0YVNhc0luaXRUYWJsZU92ZXJmbG93X3Q7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCkBAIC0xMDEzLDUgKzExMDQsNiBAQAogI2RlZmluZSBNUElfRVhUX0lNQUdFX1RZUEVfRlcgICAgICAgICAgICAgICAgICAgKDB4MDEpCiAjZGVmaW5lIE1QSV9FWFRfSU1BR0VfVFlQRV9OVkRBVEEgICAgICAgICAgICAgICAoMHgwMykKICNkZWZpbmUgTVBJX0VYVF9JTUFHRV9UWVBFX0JPT1RMT0FERVIgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUElfRVhUX0lNQUdFX1RZUEVfSU5JVElBTElaQVRJT04gICAgICAgKDB4MDUpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfc2FzLmgKaW5kZXggYTljMTRhZC4uODcxZWJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIElPUElfSU9DTE9HSU5GT19IX0lOQ0xVREVECiAjZGVmaW5lIElPUElfSU9DTE9HSU5GT19IX0lOQ0xVREVECiAKKyNkZWZpbmUgU0FTX0xPR0lORk9fTkVYVVNfTE9TUwkJMHgzMTE3MDAwMAorI2RlZmluZSBTQVNfTE9HSU5GT19NQVNLCQkJMHhGRkZGMDAwMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBJT0MgTE9HSU5GTyBkZWZpbmVzLCAweDAwMDAwMDAwIC0gMHgwRkZGRkZGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTEsNiArNTMsOSBAQAogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0NPTkZJR19JTlZBTElEX1BBR0VfRE5NICAgICAgICAoMHgwMDAzMDUwMCkgLyogRGV2aWNlIE5vdCBNYXBwZWQgKi8KICNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9DT05GSUdfSU5WQUxJRF9QQUdFX1BFUlNJU1QgICAgKDB4MDAwMzA2MDApIC8qIFBlcnNpc3RlbnQgUGFnZSBub3QgZm91bmQgKi8KICNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9DT05GSUdfSU5WQUxJRF9QQUdFX0RFRkFVTFQgICAgKDB4MDAwMzA3MDApIC8qIERlZmF1bHQgUGFnZSBub3QgZm91bmQgKi8KKworI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0RJQUdfTVNHX0VSUk9SICAgICAgICAgICAgICAgICAoMHgwMDA0MDAwMCkgLyogRXJyb3IgaGFuZGxpbmcgZGlhZyBtc2cgLSBvcidkIHdpdGggZGlhZyBzdGF0dXMgKi8KKwogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX1RBU0tfVEVSTUlOQVRFRCAgICAgICAgICAgICAgICAoMHgwMDA1MDAwMCkKIAogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9SRUFEX0FDVElPTl9FUlIwUiAgICAoMHgwMDA2MDAwMSkgLyogUmVhZCBBY3Rpb24gbm90IHN1cHBvcnRlZCBmb3IgU0VQIG1zZyAqLwpAQCAtMTAzLDYgKzEwOCw3IEBACiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9JT19FWEVDVVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDE0MDAwMCkKICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX1BFUlNfUkVTVl9PVVRfTk9UX0FGRklMX09XTkVSICAgICAgICgweDAwMTUwMDAwKQogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfT1BFTl9UWERNQV9BQk9SVCAgICAgICAgICAgICAgICAgICAgKDB4MDAxNjAwMDApCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9JT19ERVZJQ0VfTUlTU0lOR19ERUxBWV9SRVRSWSAgICAgICAoMHgwMDE3MDAwMCkKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9PUEVOX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQogI2RlZmluZSBQTF9MT0dJTkZPX1NVQl9DT0RFX09QRU5fRkFJTFVSRV9OT19ERVNUX1RJTUVPVVQgICAgKDB4MDAwMDAxMDEpCiAjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfT1BFTl9GQUlMVVJFX09SUl9USU1FT1VUICAgICAgICAoMHgwMDAwMDExQSkgLyogT3BlbiBSZWplY3QgKFJldHJ5KSBUaW1lb3V0ICovCkBAIC0xNjUsMTEgKzE3MSw4MSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJUiBMT0dJTkZPX0NPREUgZGVmaW5lcywgdmFsaWQgaWYgSU9DX0xPR0lORk9fT1JJR0lOQVRPUiA9IElSICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBJUl9MT0dJTkZPX0NPREVfVU5VU0VEMSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAwMCkKLSNkZWZpbmUgSVJfTE9HSU5GT19DT0RFX1VOVVNFRDIgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMjAwMDApCisjZGVmaW5lIElSX0xPR0lORk9fUkFJRF9BQ1RJT05fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAwMCkKKyNkZWZpbmUgSVJfTE9HSU5GT19DT0RFX1VOVVNFRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDIwMDAwKQorCisvKiBBbW91bnQgb2YgaW5mb3JtYXRpb24gcGFzc2VkIGRvd24gZm9yIENyZWF0ZSBWb2x1bWUgaXMgdG9vIGxhcmdlICovCisjZGVmaW5lIElSX0xPR0lORk9fVk9MVU1FX0NSRUFURV9JTlZBTElEX0xFTkdUSCAgICAgICAgICAgICAgICAoMHgwMDAxMDAwMSkKKy8qIENyZWF0aW9uIG9mIGR1cGxpY2F0ZSB2b2x1bWUgYXR0ZW1wdGVkIChCdXMvVGFyZ2V0IElEIGNoZWNrZWQpICovCisjZGVmaW5lIElSX0xPR0lORk9fVk9MVU1FX0NSRUFURV9EVVBMSUNBVEUgICAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAwMikKKy8qIENyZWF0aW9uIGZhaWxlZCBkdWUgdG8gbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHZvbHVtZXMgZXhjZWVkZWQgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19WT0xVTUVfQ1JFQVRFX05PX1NMT1RTICAgICAgICAgICAgICAgICAgICAgICgweDAwMDEwMDAzKQorLyogQ3JlYXRpb24gZmFpbGVkIGR1ZSB0byBETUEgZXJyb3IgaW4gdHJ5aW5nIHRvIHJlYWQgZnJvbSBob3N0ICovCisjZGVmaW5lIElSX0xPR0lORk9fVk9MVU1FX0NSRUFURV9ETUFfRVJST1IgICAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAwNCkKKy8qIENyZWF0aW9uIGZhaWxlZCBkdWUgdG8gaW52YWxpZCB2b2x1bWUgdHlwZSBwYXNzZWQgZG93biAqLworI2RlZmluZSBJUl9MT0dJTkZPX1ZPTFVNRV9DUkVBVEVfSU5WQUxJRF9WT0xVTUVfVFlQRSAgICAgICAgICAgKDB4MDAwMTAwMDUpCisvKiBDcmVhdGlvbiBmYWlsZWQgZHVlIHRvIGVycm9yIHJlYWRpbmcgTUZHIFBhZ2UgNCAqLworI2RlZmluZSBJUl9MT0dJTkZPX1ZPTFVNRV9NRkdfUEFHRTRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMTAwMDYpCisvKiBDcmVhdGlvbiBmYWlsZWQgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGludGVybmFsIHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19WT0xVTUVfSU5URVJOQUxfQ09ORklHX1NUUlVDVFVSRV9FUlJPUiAgICAgICgweDAwMDEwMDA3KQorCisvKiBBY3RpdmF0aW9uIGZhaWxlZCBkdWUgdG8gdHJ5aW5nIHRvIGFjdGl2YXRlIGFuIGFscmVhZHkgYWN0aXZlIHZvbHVtZSAqLworI2RlZmluZSBJUl9MT0dJTkZPX1ZPTFVNRV9BQ1RJVkFUSU5HX0FOX0FDVElWRV9WT0xVTUUgICAgICAgICAgKDB4MDAwMTAwMTApCisvKiBBY3RpdmF0aW9uIGZhaWxlZCBkdWUgdG8gdHJ5aW5nIHRvIGFjdGl2ZSB1bnN1cHBvcnRlZCB2b2x1bWUgdHlwZSAgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19WT0xVTUVfQUNUSVZBVElOR19JTlZBTElEX1ZPTFVNRV9UWVBFICAgICAgICgweDAwMDEwMDExKQorLyogQWN0aXZhdGlvbiBmYWlsZWQgZHVlIHRvIHRyeWluZyB0byBhY3RpdmUgdG9vIG1hbnkgdm9sdW1lcyAgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19WT0xVTUVfQUNUSVZBVElOR19UT09fTUFOWV9WT0xVTUVTICAgICAgICAgICgweDAwMDEwMDEyKQorLyogQWN0aXZhdGlvbiBmYWlsZWQgZHVlIHRvIFZvbHVtZSBJRCBpbiB1c2UgYWxyZWFkeSAqLworI2RlZmluZSBJUl9MT0dJTkZPX1ZPTFVNRV9BQ1RJVkFUSU5HX1ZPTFVNRV9JRF9JTl9VU0UgICAgICAgICAgKDB4MDAwMTAwMTMpCisvKiBBY3RpdmF0aW9uIGZhaWxlZCBjYWxsIHRvIGFjdGl2YXRlVm9sdW1lIHJldHVybmVkIGZhaWx1cmUgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19WT0xVTUVfQUNUSVZBVEVfVk9MVU1FX0ZBSUxFRCAgICAgICAgICAgICAgICgweDAwMDEwMDE0KQorLyogQWN0aXZhdGlvbiBmYWlsZWQgdHJ5aW5nIHRvIGltcG9ydCB0aGUgdm9sdW1lICovCisjZGVmaW5lIElSX0xPR0lORk9fVk9MVU1FX0FDVElWQVRJTkdfSU1QT1JUX1ZPTFVNRV9GQUlMRUQgICAgICAoMHgwMDAxMDAxNSkKKworLyogUGh5cyBEaXNrIGZhaWxlZCwgdG9vIG1hbnkgcGh5cyBkaXNrcyAqLworI2RlZmluZSBJUl9MT0dJTkZPX1BIWVNESVNLX0NSRUFURV9UT09fTUFOWV9ESVNLUyAgICAgICAgICAgICAgKDB4MDAwMTAwMjApCisvKiBBbW91bnQgb2YgaW5mb3JtYXRpb24gcGFzc2VkIGRvd24gZm9yIENyZWF0ZSBQbnlzZGlzayBpcyB0b28gbGFyZ2UgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19QSFlTRElTS19DUkVBVEVfSU5WQUxJRF9MRU5HVEggICAgICAgICAgICAgICgweDAwMDEwMDIxKQorLyogQ3JlYXRpb24gZmFpbGVkIGR1ZSB0byBETUEgZXJyb3IgaW4gdHJ5aW5nIHRvIHJlYWQgZnJvbSBob3N0ICovCisjZGVmaW5lIElSX0xPR0lORk9fUEhZU0RJU0tfQ1JFQVRFX0RNQV9FUlJPUiAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAyMikKKy8qIENyZWF0aW9uIGZhaWxlZCBkdWUgdG8gaW52YWxpZCBCdXMgVGFyZ2V0SUQgcGFzc2VkIGRvd24gKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19QSFlTRElTS19DUkVBVEVfQlVTX1RJRF9JTlZBTElEICAgICAgICAgICAgICgweDAwMDEwMDIzKQorLyogQ3JlYXRpb24gZmFpbGVkIGR1ZSB0byBlcnJvciBpbiBjcmVhdGluZyBSQUlEIFBoeXMgRGlzayBDb25maWcgUGFnZSAqLworI2RlZmluZSBJUl9MT0dJTkZPX1BIWVNESVNLX0NSRUFURV9DT05GSUdfUEFHRV9FUlJPUiAgICAgICAgICAgKDB4MDAwMTAwMjQpCisKKworLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IElSIERpc2FibGVkICovCisjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX1JBSURfRElTQUJMRUQgICAgICAgICAgICAgICAgICAoMHgwMDAxMDAzMCkKKy8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBJbnF1aXJ5IENvbWFuZCBmYWlsZWQgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfSU5RVUlSWV9GQUlMRUQgICAgICAgICAgICAgICAgICgweDAwMDEwMDMxKQorLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IERldmljZSBub3QgZGlyZWN0IGFjY2VzcyBkZXZpY2UgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfTk9UX0RJUkVDVF9BQ0NFU1MgICAgICAgICAgICAgICgweDAwMDEwMDMyKQorLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IFJlbW92YWJsZSBkZXZpY2UgZm91bmQgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfUkVNT1ZBQkxFX0ZPVU5EICAgICAgICAgICAgICAgICgweDAwMDEwMDMzKQorLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IERldmljZSBTQ1NJIFZlcnNpb24gbm90IDIgb3IgaGlnaGVyICovCisjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX05FRURfU0NTSV8yX09SX0hJR0hFUiAgICAgICAgICAoMHgwMDAxMDAzNCkKKy8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBTQVRBIGRldmljZSwgNDggQklUIExCQSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX1NBVEFfNDhCSVRfTEJBX05PVF9TVVBQT1JURUQgICAoMHgwMDAxMDAzNSkKKy8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBEZXZpY2UgZG9lcyBub3QgaGF2ZSA1MTIgYnl0ZSBibG9jayBzaXplcyAqLworI2RlZmluZSBJUl9MT0dJTkZPX0NPTVBBVF9FUlJPUl9ERVZJQ0VfTk9UXzUxMl9CWVRFX0JMT0NLICAgICAgKDB4MDAwMTAwMzYpCisvKiBDb21wYXRpYmlsaXR5IEVycm9yIDogVm9sdW1lIFR5cGUgY2hlY2sgZmFpbGVkICovCisjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX1ZPTFVNRV9UWVBFX0NIRUNLX0ZBSUxFRCAgICAgICAoMHgwMDAxMDAzNykKKy8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBWb2x1bWUgVHlwZSBpcyB1bnN1cHBvcnRlZCBieSBGVyAqLworI2RlZmluZSBJUl9MT0dJTkZPX0NPTVBBVF9FUlJPUl9VTlNVUFBPUlRFRF9WT0xVTUVfVFlQRSAgICAgICAgKDB4MDAwMTAwMzgpCisvKiBDb21wYXRpYmlsaXR5IEVycm9yIDogRGlzayBkcml2ZSB0b28gc21hbGwgZm9yIHVzZSBpbiB2b2x1bWUgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfRElTS19UT09fU01BTEwgICAgICAgICAgICAgICAgICgweDAwMDEwMDM5KQorLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IFBoeXMgZGlzayBmb3IgQ3JlYXRlIFZvbHVtZSBub3QgZm91bmQgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfUEhZU19ESVNLX05PVF9GT1VORCAgICAgICAgICAgICgweDAwMDEwMDNBKQorLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IG1lbWJlcnNoaXAgY291bnQgZXJyb3IsIHRvbyBtYW55IG9yIHRvbyBmZXcgZGlza3MgZm9yIHZvbHVtZSB0eXBlICovCisjZGVmaW5lIElSX0xPR0lORk9fQ09NUEFUX0VSUk9SX01FTUJFUlNISVBfQ09VTlQgICAgICAgICAgICAgICAoMHgwMDAxMDAzQikKKy8qIENvbXBhdGliaWxpdHkgRXJyb3IgOiBEaXNrIHN0cmlwZSBzaXplcyBtdXN0IGJlIDY0S0IgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfTk9OXzY0S19TVFJJUEVfU0laRSAgICAgICAgICAgICgweDAwMDEwMDNDKQorLyogQ29tcGF0aWJpbGl0eSBFcnJvciA6IElNRSBzaXplIGxpbWl0ZWQgdG8gPCAyVEIgKi8KKyNkZWZpbmUgSVJfTE9HSU5GT19DT01QQVRfRVJST1JfSU1FX1ZPTF9OT1RfQ1VSUkVOVExZX1NVUFBPUlRFRCAoMHgwMDAxMDAzRCkKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlZmluZXMgZm9yIGNvbnZpZW5lbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRGVmaW5lcyBmb3IgY29udmVuaWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgSU9DX0xPR0lORk9fUFJFRklYX0lPUCAgICAgICAgICAgICAgICAgICAgICAgICAgKChNUElfSU9DTE9HSU5GT19UWVBFX1NBUyA8PCBNUElfSU9DTE9HSU5GT19UWVBFX1NISUZUKSB8IElPQ19MT0dJTkZPX09SSUdJTkFUT1JfSU9QKQogI2RlZmluZSBJT0NfTE9HSU5GT19QUkVGSVhfUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1QSV9JT0NMT0dJTkZPX1RZUEVfU0FTIDw8IE1QSV9JT0NMT0dJTkZPX1RZUEVfU0hJRlQpIHwgSU9DX0xPR0lORk9fT1JJR0lOQVRPUl9QTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9zYXMuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9zYXMuaAppbmRleCA3MDUxNDg2Li41MGI4ZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfc2FzLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX3Nhcy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgU2VyaWFsIEF0dGFjaGVkIFNDU0kgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKICAqICBDcmVhdGlvbiBEYXRlOiAgQXVndXN0IDE5LCAyMDA0CiAgKgotICogICAgbXBpX3Nhcy5oIFZlcnNpb246ICAwMS4wNS4wMgorICogICAgbXBpX3Nhcy5oIFZlcnNpb246ICAwMS4wNS4wMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTE3LDYgKzE3LDEwIEBACiAgKiAgMDgtMzAtMDUgIDAxLjA1LjAyICBBZGRlZCBEZXZpY2VJbmZvIGJpdCBmb3IgU0VQLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUHJpbUZsYWdzIGFuZCBQcmltaXRpdmUgZmllbGQgdG8gU0FTIElPIFVuaXQKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgcmVxdWVzdCwgYW5kIGFkZGVkIGEgbmV3IG9wZXJhdGlvbiBjb2RlLgorICogIDAzLTI3LTA2ICAwMS4wNS4wMyAgQWRkZWQgRm9yY2UgRnVsbCBEaXNjb3ZlcnksIFRyYW5zbWl0IFBvcnQgU2VsZWN0IFNpZ25hbCwKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBSZW1vdmUgRGV2aWNlIG9wZXJhdGlvbnMgdG8gU0FTIElPIFVuaXQgQ29udHJvbC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIERldkhhbmRsZSBmaWVsZCB0byBTQVMgSU8gVW5pdCBDb250cm9sIHJlcXVlc3QgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICByZXBseS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTIwOSw3ICsyMTMsNyBAQAogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMDFoICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAvKiAwMmggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgIC8qIDAzaCAqLwotICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMDRoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgRGV2SGFuZGxlOyAgICAgICAgICAvKiAwNGggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDA2aCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgLyogMDdoICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgTXNnQ29udGV4dDsgICAgICAgICAvKiAwOGggKi8KQEAgLTIzMSw2ICsyMzUsOSBAQAogI2RlZmluZSBNUElfU0FTX09QX1BIWV9DTEVBUl9FUlJPUl9MT0cgICAgICAgICAgKDB4MDgpCiAjZGVmaW5lIE1QSV9TQVNfT1BfTUFQX0NVUlJFTlQgICAgICAgICAgICAgICAgICAoMHgwOSkKICNkZWZpbmUgTVBJX1NBU19PUF9TRU5EX1BSSU1JVElWRSAgICAgICAgICAgICAgICgweDBBKQorI2RlZmluZSBNUElfU0FTX09QX0ZPUkNFX0ZVTExfRElTQ09WRVJZICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSV9TQVNfT1BfVFJBTlNNSVRfUE9SVF9TRUxFQ1RfU0lHTkFMICAoMHgwQykKKyNkZWZpbmUgTVBJX1NBU19PUF9UUkFOU01JVF9SRU1PVkVfREVWSUNFICAgICAgICgweDBEKQogCiAvKiB2YWx1ZXMgZm9yIHRoZSBQcmltRmxhZ3MgZmllbGQgKi8KICNkZWZpbmUgTVBJX1NBU19QUklNRkxBR1NfU0lOR0xFICAgICAgICAgICAgICAgICgweDA4KQpAQCAtMjQ1LDcgKzI1Miw3IEBACiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAwMWggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgIC8qIDAyaCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgLyogMDNoICovCi0gICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAwNGggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgIC8qIDA0aCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgLyogMDZoICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAvKiAwN2ggKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBNc2dDb250ZXh0OyAgICAgICAgIC8qIDA4aCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX3RhcmcuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV90YXJnLmgKaW5kZXggM2Y0NjI4NS4uMjBiNjY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX3RhcmcuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfdGFyZy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgVGFyZ2V0IG1vZGUgbWVzc2FnZXMgYW5kIHN0cnVjdHVyZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMiwgMjAwMAogICoKLSAqICAgIG1waV90YXJnLmggVmVyc2lvbjogIDAxLjA1LjA1CisgKiAgICBtcGlfdGFyZy5oIFZlcnNpb246ICAwMS4wNS4wNgogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTU0LDYgKzU0LDcgQEAKICAqICAwMi0yMi0wNSAgMDEuMDUuMDMgIENoYW5nZWQgYSBjb21tZW50LgogICogIDAzLTExLTA1ICAwMS4wNS4wNCAgUmVtb3ZlZCBUYXJnZXRBc3Npc3RFeHRlbmRlZCBSZXF1ZXN0LgogICogIDA2LTI0LTA1ICAwMS4wNS4wNSAgQWRkZWQgVGFyZ2V0QXNzaXN0RXh0ZW5kZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KKyAqICAwMy0yNy0wNiAgMDEuMDUuMDYgIEFkZGVkIGEgY29tbWVudC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTM1MSw3ICszNTIsNyBAQAogI2RlZmluZSBUQVJHRVRfQVNTSVNUX0ZMQUdTX0NPTkZJUk1FRCAgICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBUQVJHRVRfQVNTSVNUX0ZMQUdTX1JFUE9TVF9DTURfQlVGRkVSICAgICAgICgweDgwKQogCi0KKy8qIFN0YW5kYXJkIFRhcmdldCBNb2RlIFJlcGx5IG1lc3NhZ2UgKi8KIHR5cGVkZWYgc3RydWN0IF9NU0dfVEFSR0VUX0VSUk9SX1JFUExZCiB7CiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIDAwaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCAxMmRkOGQ0Li40MzMwOGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtNDYsNyArNDYsNiBAQAogKi8KIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zNjksMjAgKzM2OCwyMSBAQAogbXB0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpidXNfaWQsIHN0cnVjdCBwdF9yZWdzICpyKQogewogCU1QVF9BREFQVEVSICppb2MgPSBidXNfaWQ7Ci0JdTMyIHBhOworCXUzMiBwYSA9IENISVBSRUdfUkVBRDMyX2RtYXN5bmMoJmlvYy0+Y2hpcC0+UmVwbHlGaWZvKTsKKworCWlmIChwYSA9PSAweEZGRkZGRkZGKQorCQlyZXR1cm4gSVJRX05PTkU7CiAKIAkvKgogCSAqICBEcmFpbiB0aGUgcmVwbHkgRklGTyEKIAkgKi8KLQl3aGlsZSAoMSkgewotCQlwYSA9IENISVBSRUdfUkVBRDMyX2RtYXN5bmMoJmlvYy0+Y2hpcC0+UmVwbHlGaWZvKTsKLQkJaWYgKHBhID09IDB4RkZGRkZGRkYpCi0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCWVsc2UgaWYgKHBhICYgTVBJX0FERFJFU1NfUkVQTFlfQV9CSVQpCisJZG8geworCQlpZiAocGEgJiBNUElfQUREUkVTU19SRVBMWV9BX0JJVCkKIAkJCW1wdF9yZXBseShpb2MsIHBhKTsKIAkJZWxzZQogCQkJbXB0X3R1cmJvX3JlcGx5KGlvYywgcGEpOwotCX0KKwkJcGEgPSBDSElQUkVHX1JFQUQzMl9kbWFzeW5jKCZpb2MtPmNoaXAtPlJlcGx5Rmlmbyk7CisJfSB3aGlsZSAocGEgIT0gMHhGRkZGRkZGRik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMjIwLDMxICsxMjIwLDI1IEBACiAJcG9ydCA9IHBzaXplID0gMDsKIAlmb3IgKGlpPTA7IGlpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpaSsrKSB7CiAJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaWkpICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgeworCQkJaWYgKHBzaXplKQorCQkJCWNvbnRpbnVlOwogCQkJLyogR2V0IEkvTyBzcGFjZSEgKi8KIAkJCXBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaWkpOwogCQkJcHNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsaWkpOwogCQl9IGVsc2UgeworCQkJaWYgKG1zaXplKQorCQkJCWNvbnRpbnVlOwogCQkJLyogR2V0IG1lbW1hcCAqLwogCQkJbWVtX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaWkpOwogCQkJbXNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsaWkpOwotCQkJYnJlYWs7CiAJCX0KIAl9CiAJaW9jLT5tZW1fc2l6ZSA9IG1zaXplOwogCi0JaWYgKGlpID09IERFVklDRV9DT1VOVF9SRVNPVVJDRSkgewotCQlwcmludGsoS0VSTl9FUlIgTVlOQU0gIjogRVJST1IgLSBNUFQgYWRhcHRlciBoYXMgbm8gbWVtb3J5IHJlZ2lvbnMgZGVmaW5lZCFcbiIpOwotCQlrZnJlZShpb2MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaW5pdHByaW50aygoS0VSTl9JTkZPIE1ZTkFNICI6IE1QVCBhZGFwdGVyIEAgJWx4LCBtc2l6ZT0lZGQgYnl0ZXNcbiIsIG1lbV9waHlzLCBtc2l6ZSkpOwotCWRpbml0cHJpbnRrKChLRVJOX0lORk8gTVlOQU0gIjogKHBvcnQgaS9vIEAgJWx4LCBwc2l6ZT0lZGQgYnl0ZXMpXG4iLCBwb3J0LCBwc2l6ZSkpOwotCiAJbWVtID0gTlVMTDsKIAkvKiBHZXQgbG9naWNhbCBwdHIgZm9yIFBjaU1lbTAgc3BhY2UgKi8KIAkvKm1lbSA9IGlvcmVtYXAobWVtX3BoeXMsIG1zaXplKTsqLwotCW1lbSA9IGlvcmVtYXAobWVtX3BoeXMsIDB4MTAwKTsKKwltZW0gPSBpb3JlbWFwKG1lbV9waHlzLCBtc2l6ZSk7CiAJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNWU5BTSAiOiBFUlJPUiAtIFVuYWJsZSB0byBtYXAgYWRhcHRlciBtZW1vcnkhXG4iKTsKIAkJa2ZyZWUoaW9jKTsKQEAgLTEzNDQsMTEgKzEzMzgsNiBAQAogCQlpb2MtPmJ1c190eXBlID0gU0FTOwogCQlpb2MtPmVycmF0YV9mbGFnXzEwNjQgPSAxOwogCX0KLQllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY2KSB7Ci0JCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjYiOwotCQlpb2MtPmJ1c190eXBlID0gU0FTOwotCQlpb2MtPmVycmF0YV9mbGFnXzEwNjQgPSAxOwotCX0KIAllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY4KSB7CiAJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjgiOwogCQlpb2MtPmJ1c190eXBlID0gU0FTOwpAQCAtMTM1OCwxNCArMTM0NywxNCBAQAogCQlpb2MtPnByb2RfbmFtZSA9ICJMU0lTQVMxMDY0RSI7CiAJCWlvYy0+YnVzX3R5cGUgPSBTQVM7CiAJfQotCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjZFKSB7Ci0JCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNjZFIjsKLQkJaW9jLT5idXNfdHlwZSA9IFNBUzsKLQl9CiAJZWxzZSBpZiAocGRldi0+ZGV2aWNlID09IE1QSV9NQU5VRkFDVFBBR0VfREVWSURfU0FTMTA2OEUpIHsKIAkJaW9jLT5wcm9kX25hbWUgPSAiTFNJU0FTMTA2OEUiOwogCQlpb2MtPmJ1c190eXBlID0gU0FTOwogCX0KKwllbHNlIGlmIChwZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDc4KSB7CisJCWlvYy0+cHJvZF9uYW1lID0gIkxTSVNBUzEwNzgiOworCQlpb2MtPmJ1c190eXBlID0gU0FTOworCX0KIAogCWlmIChpb2MtPmVycmF0YV9mbGFnXzEwNjQpCiAJCXBjaV9kaXNhYmxlX2lvX2FjY2VzcyhwZGV2KTsKQEAgLTE3MDYsNyArMTY5NSw3IEBACiAJCQkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIlBDSS1NU0kgZW5hYmxlZFxuIiwKIAkJCQkJaW9jLT5uYW1lKTsKIAkJCXJjID0gcmVxdWVzdF9pcnEoaW9jLT5wY2lkZXYtPmlycSwgbXB0X2ludGVycnVwdCwKLQkJCQkJU0FfU0hJUlEsIGlvYy0+bmFtZSwgaW9jKTsKKwkJCQkJSVJRRl9TSEFSRUQsIGlvYy0+bmFtZSwgaW9jKTsKIAkJCWlmIChyYyA8IDApIHsKIAkJCQlwcmludGsoTVlJT0Nfc19FUlJfRk1UICJVbmFibGUgdG8gYWxsb2NhdGUgIgogCQkJCQkiaW50ZXJydXB0ICVkIVxuIiwgaW9jLT5uYW1lLApAQCAtMzE4NSw2ICszMTc0LDM3IEBACiAJdTMyIGRpYWcxdmFsID0gMDsKICNlbmRpZgogCisJaWYgKGlvYy0+cGNpZGV2LT5kZXZpY2UgPT0gTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDc4KSB7CisJCWRyc3ByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAiJXM6IERvb3JiZWxsPSVwOyAxMDc4IHJlc2V0ICIKKwkJCSJhZGRyZXNzPSVwXG4iLCAgaW9jLT5uYW1lLCBfX0ZVTkNUSU9OX18sCisJCQkmaW9jLT5jaGlwLT5Eb29yYmVsbCwgJmlvYy0+Y2hpcC0+UmVzZXRfMTA3OCkpOworCQlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+UmVzZXRfMTA3OCwgMHgwNyk7CisJCWlmIChzbGVlcEZsYWcgPT0gQ0FOX1NMRUVQKQorCQkJbXNsZWVwKDEpOworCQllbHNlCisJCQltZGVsYXkoMSk7CisKKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNjA7IGNvdW50ICsrKSB7CisJCQlkb29yYmVsbCA9IENISVBSRUdfUkVBRDMyKCZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKKwkJCWRvb3JiZWxsICY9IE1QSV9JT0NfU1RBVEVfTUFTSzsKKworCQkJZHJzcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCisJCQkJImxvb2tpbmcgZm9yIFJFQURZIFNUQVRFOiBkb29yYmVsbD0leCIKKwkJCSAgICAgICAgIiBjb3VudD0lZFxuIiwKKwkJCQlpb2MtPm5hbWUsIGRvb3JiZWxsLCBjb3VudCkpOworCQkJaWYgKGRvb3JiZWxsID09IE1QSV9JT0NfU1RBVEVfUkVBRFkpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJLyogd2FpdCAxIHNlYyAqLworCQkJaWYgKHNsZWVwRmxhZyA9PSBDQU5fU0xFRVApCisJCQkJbXNsZWVwKDEwMDApOworCQkJZWxzZQorCQkJCW1kZWxheSgxMDAwKTsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCiAJLyogQ2xlYXIgYW55IGV4aXN0aW5nIGludGVycnVwdHMgKi8KIAlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+SW50U3RhdHVzLCAwKTsKIApAQCAtNTU5Miw3ICs1NjEyLDcgQEAKIAogCS8qIFRoZSBTQ1NJIGRyaXZlciBuZWVkcyB0byBhZGp1c3QgdGltZW91dHMgb24gYWxsIGN1cnJlbnQKIAkgKiBjb21tYW5kcyBwcmlvciB0byB0aGUgZGlhZ25vc3RpYyByZXNldCBiZWluZyBpc3N1ZWQuCi0JICogUHJldmVudHMgdGltZW91dHMgb2NjdXJpbmcgZHVyaW5nIGEgZGlhZ25vc3RpYyByZXNldC4uLnZlcnkgYmFkLgorCSAqIFByZXZlbnRzIHRpbWVvdXRzIG9jY3VycmluZyBkdXJpbmcgYSBkaWFnbm9zdGljIHJlc2V0Li4udmVyeSBiYWQuCiAJICogRm9yIGFsbCBvdGhlciBwcm90b2NvbCBkcml2ZXJzLCB0aGlzIGlzIGEgbm8tb3AuCiAJICovCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCA0NzIwZjlhLi5hNWNlMTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNDksNyArNDksNiBAQAogI2RlZmluZSBNUFRCQVNFX0hfSU5DTFVERUQKIC8qey09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCkBAIC03Niw4ICs3NSw4IEBACiAjZGVmaW5lIENPUFlSSUdIVAkiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgIiBNT0RVTEVBVVRIT1IKICNlbmRpZgogCi0jZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wMy4xMCIKLSNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjAzLjEwIgorI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMDAiCisjZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4wMCIKICNkZWZpbmUgV0hBVF9NQUdJQ19TVFJJTkcJCSJAIiAiKCIgIiMiICIpIgogCiAjZGVmaW5lIHNob3dfbXB0bW9kX3ZlcihzLHZlcikgIFwKQEAgLTMwOCw3ICszMDcsOCBAQAogCXUzMglIb3N0SW5kZXg7CS8qIDUwICAgICBIb3N0IEluZGV4IHJlZ2lzdGVyICAgICAgICAqLwogCXUzMglSZXNlcnZlZDRbMTVdOwkvKiA1NC04RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAl1MzIJRnViYXI7CQkvKiA5MCAgICAgRm9yIEZ1YmFyIHVzYWdlICAgICAgICAgICAgKi8KLQl1MzIJUmVzZXJ2ZWQ1WzI3XTsJLyogOTQtRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTMyICAgICBSZXNlcnZlZDVbMTA1MF07LyogOTQtMTBGOCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdTMyICAgICBSZXNldF8xMDc4OyAgICAgLyogMTBGQyAgIFJlc2V0IDEwNzggICAgICAgICAgICAgICAgICovCiB9IFNZU0lGX1JFR1M7CiAKIC8qCkBAIC0zNDIsNiArMzQyLDcgQEAKIAl1OAkJCSBuZWdvRmxhZ3M7CS8qIGJpdCBmaWVsZCwgc2VlIGFib3ZlICovCiAJdTgJCQkgcmFpZFZvbHVtZTsJLyogc2V0LCBpZiBSQUlEIFZvbHVtZSAqLwogCXU4CQkJIHR5cGU7CQkvKiBieXRlIDAgb2YgSW5xdWlyeSBkYXRhICovCisJdTgJCQkgZGVsZXRlZDsJLyogdGFyZ2V0IGluIHByb2Nlc3Mgb2YgYmVpbmcgcmVtb3ZlZCAqLwogCXUzMgkJCSBudW1fbHVuczsKIAl1MzIJCQkgbHVuc1s4XTsJCS8qIE1heCBMVU5zIGlzIDI1NiAqLwogfSBWaXJ0VGFyZ2V0OwpAQCAtNjMwLDEwICs2MzEsMTEgQEAKIAlzdHJ1Y3QgbXV0ZXgJCSBzYXNfZGlzY292ZXJ5X211dGV4OwogCXU4CQkJIHNhc19kaXNjb3ZlcnlfcnVudGltZTsKIAl1OAkJCSBzYXNfZGlzY292ZXJ5X2lnbm9yZV9ldmVudHM7CisJdTE2CQkJIGhhbmRsZTsKIAlpbnQJCQkgc2FzX2luZGV4OyAvKiBpbmRleCByZWZyZW5jaW5nICovCiAJTVBUX1NBU19NR01UCQkgc2FzX21nbXQ7CiAJaW50CQkJIG51bV9wb3J0czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJIG1wdHNjc2loX3BlcnNpc3RUYXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdAkgc2FzX3BlcnNpc3RfdGFzazsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAkgZmNfc2V0dXBfcmVzZXRfd29yazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSBmY19ycG9ydHM7CkBAIC02NDIsNiArNjQ0LDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJIGZjX3Jlc2Nhbl93b3JrOwogCWNoYXIJCQkgZmNfcmVzY2FuX3dvcmtfcV9uYW1lW0tPQkpfTkFNRV9MRU5dOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmY19yZXNjYW5fd29ya19xOworCXU4CQlwb3J0X3NlcmlhbF9udW1iZXI7CiB9IE1QVF9BREFQVEVSOwogCiAvKgpAQCAtODkzLDYgKzg5NiwxMyBAQAogI2RlZmluZSBEQkdfRFVNUF9SRVFVRVNUX0ZSQU1FX0hEUihtZnApCiAjZW5kaWYKIAorLy8gZGVidWcgc2FzIHdpZGUgcG9ydHMKKyNpZmRlZiBNUFRfREVCVUdfU0FTX1dJREUKKyNkZWZpbmUgZHNhc3dpZGVwcmludGsoeCkgcHJpbnRrIHgKKyNlbHNlCisjZGVmaW5lIGRzYXN3aWRlcHJpbnRrKHgpCisjZW5kaWYKKwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwppbmRleCAzZmY4Mzc4Li5hOGYyZmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCkBAIC0xMzIsMjEgKzEzMiwyMSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtcHRmY19wY2lfdGFibGVbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9GQzkwOSwKKwl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBNUElfTUFOVUZBQ1RQQUdFX0RFVklDRUlEX0ZDOTA5LAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfRkM5MTksCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJQ0VJRF9GQzkxOSwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTI5LAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIE1QSV9NQU5VRkFDVFBBR0VfREVWSUNFSURfRkM5MjksCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9GQzkxOVgsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJQ0VJRF9GQzkxOVgsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9GQzkyOVgsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJQ0VJRF9GQzkyOVgsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9GQzkzOVgsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJQ0VJRF9GQzkzOVgsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9GQzk0OVgsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJQ0VJRF9GQzk0OVgsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9GQzk0OUVTLAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIE1QSV9NQU5VRkFDVFBBR0VfREVWSUNFSURfRkM5NDlFLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJezB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKaW5kZXggODU2ODlhYi4uZjdiZDhiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC01MCwxMSArNTAsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIG1kZWxheSAqLwogCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KIAogI2luY2x1ZGUgIm1wdGJhc2UuaCIKICNpbmNsdWRlICJtcHRzY3NpaC5oIgpAQCAtMTM3LDIzICsxNDAsMzcgQEAKIAl1MzIJZGV2aWNlX2luZm87CS8qIGJpdGZpZWxkIGRldGFpbGVkIGluZm8gYWJvdXQgdGhpcyBkZXZpY2UgKi8KIH07CiAKKy8qCisgKiBTcGVjaWZpYyBkZXRhaWxzIG9uIHBvcnRzLCB3aWRlL25hcnJvdworICovCitzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvX2RldGFpbHN7CisJdTgJcG9ydF9pZDsgCS8qIHBvcnQgbnVtYmVyIHByb3ZpZGVkIHRvIHRyYW5zcG9ydCAqLworCXUxNgludW1fcGh5czsJLyogbnVtYmVyIG9mIHBoeXMgYmVsb25nIHRvIHRoaXMgcG9ydCAqLworCXU2NAlwaHlfYml0bWFzazsgCS8qIFRPRE8sIGV4dGVuZCBzdXBwb3J0IGZvciAyNTUgcGh5cyAqLworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsJLyogdHJhbnNwb3J0IGxheWVyIHJwaHkgb2JqZWN0ICovCisJc3RydWN0IHNhc19wb3J0ICpwb3J0OwkvKiB0cmFuc3BvcnQgbGF5ZXIgcG9ydCBvYmplY3QgKi8KKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvOworfTsKKwogc3RydWN0IG1wdHNhc19waHlpbmZvIHsKIAl1OAlwaHlfaWQ7IAkJLyogcGh5IGluZGV4ICovCi0JdTgJcG9ydF9pZDsgCQkvKiBwb3J0IG51bWJlciB0aGlzIHBoeSBpcyBwYXJ0IG9mICovCisJdTgJcG9ydF9pZDsgCQkvKiBmaXJtd2FyZSBwb3J0IGlkZW50aWZpZXIgKi8KIAl1OAluZWdvdGlhdGVkX2xpbmtfcmF0ZTsJLyogbmVnbydkIGxpbmsgcmF0ZSBmb3IgdGhpcyBwaHkgKi8KIAl1OAlod19saW5rX3JhdGU7IAkJLyogaGFyZHdhcmUgbWF4L21pbiBwaHlzIGxpbmsgcmF0ZSAqLwogCXU4CXByb2dyYW1tZWRfbGlua19yYXRlOwkvKiBwcm9ncmFtbWVkIG1heC9taW4gcGh5IGxpbmsgcmF0ZSAqLworCXU4CXNhc19wb3J0X2FkZF9waHk7CS8qIGZsYWcgdG8gcmVxdWVzdCBzYXNfcG9ydF9hZGRfcGh5Ki8KIAlzdHJ1Y3QgbXB0c2FzX2RldmluZm8gaWRlbnRpZnk7CS8qIHBvaW50IHRvIHBoeSBkZXZpY2UgaW5mbyAqLwogCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyBhdHRhY2hlZDsJLyogcG9pbnQgdG8gYXR0YWNoZWQgZGV2aWNlIGluZm8gKi8KLQlzdHJ1Y3Qgc2FzX3BoeSAqcGh5OwotCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CisJc3RydWN0IHNhc19waHkgKnBoeTsJCS8qIHRyYW5zcG9ydCBsYXllciBwaHkgb2JqZWN0ICovCisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydGluZm87CisJc3RydWN0IG1wdHNhc19wb3J0aW5mb19kZXRhaWxzICogcG9ydF9kZXRhaWxzOwogfTsKIAogc3RydWN0IG1wdHNhc19wb3J0aW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXUxNgkJaGFuZGxlOwkJLyogdW5pcXVlIGlkIHRvIGFkZHJlc3MgdGhpcyAqLwotCXU4CQludW1fcGh5czsJLyogbnVtYmVyIG9mIHBoeXMgKi8KKwl1MTYJCW51bV9waHlzOwkvKiBudW1iZXIgb2YgcGh5cyAqLwogCXN0cnVjdCBtcHRzYXNfcGh5aW5mbyAqcGh5X2luZm87CiB9OwogCkBAIC0xNjksNyArMTg2LDcgQEAKIAl1OAlzZXBfY2hhbm5lbDsJCS8qIFNFUCBjaGFubmVsIGxvZ2ljYWwgY2hhbm5lbCBpZCAqLwogfTsKIAotI2lmZGVmIFNBU0RFQlVHCisjaWZkZWYgTVBUX0RFQlVHX1NBUwogc3RhdGljIHZvaWQgbXB0c2FzX3ByaW50X3BoeV9kYXRhKE1QSV9TQVNfSU9fVU5JVDBfUEhZX0RBVEEgKnBoeV9kYXRhKQogewogCXByaW50aygiLS0tLSBJTyBVTklUIFBBR0UgMCAtLS0tLS0tLS0tLS1cbiIpOwpAQCAtMzA1LDcgKzMyMiw3IEBACiBzdGF0aWMgaW5saW5lIGludAogbXB0c2FzX2lzX2VuZF9kZXZpY2Uoc3RydWN0IG1wdHNhc19kZXZpbmZvICogYXR0YWNoZWQpCiB7Ci0JaWYgKChhdHRhY2hlZC0+aGFuZGxlKSAmJgorCWlmICgoYXR0YWNoZWQtPnNhc19hZGRyZXNzKSAmJgogCSAgICAoYXR0YWNoZWQtPmRldmljZV9pbmZvICYKIAkgICAgTVBJX1NBU19ERVZJQ0VfSU5GT19FTkRfREVWSUNFKSAmJgogCSAgICAoKGF0dGFjaGVkLT5kZXZpY2VfaW5mbyAmCkBAIC0zMTksNiArMzM2LDI1MyBAQAogCQlyZXR1cm4gMDsKIH0KIAorLyogbm8gbXV0ZXggKi8KK3N0YXRpYyB2b2lkCittcHRzYXNfcG9ydF9kZWxldGUoc3RydWN0IG1wdHNhc19wb3J0aW5mb19kZXRhaWxzICogcG9ydF9kZXRhaWxzKQoreworCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbzsKKwlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvOworCXU4CWk7CisKKwlpZiAoIXBvcnRfZGV0YWlscykKKwkJcmV0dXJuOworCisJcG9ydF9pbmZvID0gcG9ydF9kZXRhaWxzLT5wb3J0X2luZm87CisJcGh5X2luZm8gPSBwb3J0X2luZm8tPnBoeV9pbmZvOworCisJZHNhc3dpZGVwcmludGsoKEtFUk5fREVCVUcgIiVzOiBbJXBdOiBwb3J0PSUwMmQgbnVtX3BoeXM9JTAyZCAiCisJICAgIAkiYml0bWFzaz0weCUwMTZsbFhcbiIsCisJCV9fRlVOQ1RJT05fXywgcG9ydF9kZXRhaWxzLCBwb3J0X2RldGFpbHMtPnBvcnRfaWQsCisJCXBvcnRfZGV0YWlscy0+bnVtX3BoeXMsIHBvcnRfZGV0YWlscy0+cGh5X2JpdG1hc2spKTsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyssIHBoeV9pbmZvKyspIHsKKwkJaWYocGh5X2luZm8tPnBvcnRfZGV0YWlscyAhPSBwb3J0X2RldGFpbHMpCisJCQljb250aW51ZTsKKwkJbWVtc2V0KCZwaHlfaW5mby0+YXR0YWNoZWQsIDAsIHNpemVvZihzdHJ1Y3QgbXB0c2FzX2RldmluZm8pKTsKKwkJcGh5X2luZm8tPnBvcnRfZGV0YWlscyA9IE5VTEw7CisJfQorCWtmcmVlKHBvcnRfZGV0YWlscyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhc19ycGh5ICoKK21wdHNhc19nZXRfcnBoeShzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvKQoreworCWlmIChwaHlfaW5mby0+cG9ydF9kZXRhaWxzKQorCQlyZXR1cm4gcGh5X2luZm8tPnBvcnRfZGV0YWlscy0+cnBoeTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21wdHNhc19zZXRfcnBoeShzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvLCBzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkpCit7CisJaWYgKHBoeV9pbmZvLT5wb3J0X2RldGFpbHMpIHsKKwkJcGh5X2luZm8tPnBvcnRfZGV0YWlscy0+cnBoeSA9IHJwaHk7CisJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHICJzYXNfcnBoeV9hZGQ6IHJwaHk9JXBcbiIsIHJwaHkpKTsKKwl9CisKKyNpZmRlZiBNUFRfREVCVUdfU0FTX1dJREUKKwlpZiAocnBoeSkgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZycGh5LT5kZXYsICJhZGQ6Iik7CisJCXByaW50aygicnBoeT0lcCByZWxlYXNlPSVwXG4iLAorCQkJcnBoeSwgcnBoeS0+ZGV2LnJlbGVhc2UpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYXNfcG9ydCAqCittcHRzYXNfZ2V0X3BvcnQoc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbykKK3sKKwlpZiAocGh5X2luZm8tPnBvcnRfZGV0YWlscykKKwkJcmV0dXJuIHBoeV9pbmZvLT5wb3J0X2RldGFpbHMtPnBvcnQ7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittcHRzYXNfc2V0X3BvcnQoc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywgc3RydWN0IHNhc19wb3J0ICpwb3J0KQoreworCWlmIChwaHlfaW5mby0+cG9ydF9kZXRhaWxzKQorCQlwaHlfaW5mby0+cG9ydF9kZXRhaWxzLT5wb3J0ID0gcG9ydDsKKworI2lmZGVmIE1QVF9ERUJVR19TQVNfV0lERQorCWlmIChwb3J0KSB7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBvcnQtPmRldiwgImFkZDogIik7CisJCXByaW50aygicG9ydD0lcCByZWxlYXNlPSVwXG4iLAorCQkJcG9ydCwgcG9ydC0+ZGV2LnJlbGVhc2UpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX3RhcmdldCAqCittcHRzYXNfZ2V0X3N0YXJnZXQoc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbykKK3sKKwlpZiAocGh5X2luZm8tPnBvcnRfZGV0YWlscykKKwkJcmV0dXJuIHBoeV9pbmZvLT5wb3J0X2RldGFpbHMtPnN0YXJnZXQ7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittcHRzYXNfc2V0X3N0YXJnZXQoc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywgc3RydWN0IHNjc2lfdGFyZ2V0ICoKK3N0YXJnZXQpCit7CisJaWYgKHBoeV9pbmZvLT5wb3J0X2RldGFpbHMpCisJCXBoeV9pbmZvLT5wb3J0X2RldGFpbHMtPnN0YXJnZXQgPSBzdGFyZ2V0OworfQorCisKKy8qCisgKiBtcHRzYXNfc2V0dXBfd2lkZV9wb3J0cworICoKKyAqIFVwZGF0ZXMgZm9yIG5ldyBhbmQgZXhpc3RpbmcgbmFycm93L3dpZGUgcG9ydCBjb25maWd1cmF0aW9uCisgKiBpbiB0aGUgc2FzX3RvcG9sb2d5CisgKi8KK3N0YXRpYyB2b2lkCittcHRzYXNfc2V0dXBfd2lkZV9wb3J0cyhNUFRfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwb3J0X2luZm8pCit7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mb19kZXRhaWxzICogcG9ydF9kZXRhaWxzOworCXN0cnVjdCBtcHRzYXNfcGh5aW5mbyAqcGh5X2luZm8sICpwaHlfaW5mb19jbXA7CisJdTY0CXNhc19hZGRyZXNzOworCWludAlpLCBqOworCisJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCisJcGh5X2luZm8gPSBwb3J0X2luZm8tPnBoeV9pbmZvOworCWZvciAoaSA9IDAgOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5cyA7IGkrKywgcGh5X2luZm8rKykgeworCQlpZiAocGh5X2luZm8tPmF0dGFjaGVkLmhhbmRsZSkKKwkJCWNvbnRpbnVlOworCQlwb3J0X2RldGFpbHMgPSBwaHlfaW5mby0+cG9ydF9kZXRhaWxzOworCQlpZiAoIXBvcnRfZGV0YWlscykKKwkJCWNvbnRpbnVlOworCQlpZiAocG9ydF9kZXRhaWxzLT5udW1fcGh5cyA8IDIpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogUmVtb3ZpbmcgYSBwaHkgZnJvbSBhIHBvcnQsIGxldHRpbmcgdGhlIGxhc3QKKwkJICogcGh5IGJlIHJlbW92ZWQgYnkgZmlybXdhcmUgZXZlbnRzLgorCQkgKi8KKwkJZHNhc3dpZGVwcmludGsoKEtFUk5fREVCVUcKKwkJCSIlczogWyVwXTogcG9ydD0lZCBkZWxldGluZyBwaHkgPSAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcG9ydF9kZXRhaWxzLAorCQkJcG9ydF9kZXRhaWxzLT5wb3J0X2lkLCBpKSk7CisJCXBvcnRfZGV0YWlscy0+bnVtX3BoeXMtLTsKKwkJcG9ydF9kZXRhaWxzLT5waHlfYml0bWFzayAmPSB+ICgxIDw8IHBoeV9pbmZvLT5waHlfaWQpOworCQltZW1zZXQoJnBoeV9pbmZvLT5hdHRhY2hlZCwgMCwgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOworCQlzYXNfcG9ydF9kZWxldGVfcGh5KHBvcnRfZGV0YWlscy0+cG9ydCwgcGh5X2luZm8tPnBoeSk7CisJCXBoeV9pbmZvLT5wb3J0X2RldGFpbHMgPSBOVUxMOworCX0KKworCS8qCisJICogUG9wdWxhdGUgYW5kIHJlZnJlc2ggdGhlIHRyZWUKKwkgKi8KKwlwaHlfaW5mbyA9IHBvcnRfaW5mby0+cGh5X2luZm87CisJZm9yIChpID0gMCA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzIDsgaSsrLCBwaHlfaW5mbysrKSB7CisJCXNhc19hZGRyZXNzID0gcGh5X2luZm8tPmF0dGFjaGVkLnNhc19hZGRyZXNzOworCQlkc2Fzd2lkZXByaW50aygoS0VSTl9ERUJVRyAicGh5X2lkPSVkIHNhc19hZGRyZXNzPTB4JTAxOGxsWFxuIiwKKwkJCWksIHNhc19hZGRyZXNzKSk7CisJCWlmICghc2FzX2FkZHJlc3MpCisJCQljb250aW51ZTsKKwkJcG9ydF9kZXRhaWxzID0gcGh5X2luZm8tPnBvcnRfZGV0YWlsczsKKwkJLyoKKwkJICogRm9ybWluZyBhIHBvcnQKKwkJICovCisJCWlmICghcG9ydF9kZXRhaWxzKSB7CisJCQlwb3J0X2RldGFpbHMgPSBremFsbG9jKHNpemVvZigqcG9ydF9kZXRhaWxzKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghcG9ydF9kZXRhaWxzKQorCQkJCWdvdG8gb3V0OworCQkJcG9ydF9kZXRhaWxzLT5udW1fcGh5cyA9IDE7CisJCQlwb3J0X2RldGFpbHMtPnBvcnRfaW5mbyA9IHBvcnRfaW5mbzsKKwkJCXBvcnRfZGV0YWlscy0+cG9ydF9pZCA9IGlvYy0+cG9ydF9zZXJpYWxfbnVtYmVyKys7CisJCQlpZiAocGh5X2luZm8tPnBoeV9pZCA8IDY0ICkKKwkJCQlwb3J0X2RldGFpbHMtPnBoeV9iaXRtYXNrIHw9CisJCQkJICAgICgxIDw8IHBoeV9pbmZvLT5waHlfaWQpOworCQkJcGh5X2luZm8tPnNhc19wb3J0X2FkZF9waHk9MTsKKwkJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHICJcdFx0Rm9ybWluZyBwb3J0XG5cdFx0IgorCQkJCSJwaHlfaWQ9JWQgc2FzX2FkZHJlc3M9MHglMDE4bGxYXG4iLAorCQkJCWksIHNhc19hZGRyZXNzKSk7CisJCQlwaHlfaW5mby0+cG9ydF9kZXRhaWxzID0gcG9ydF9kZXRhaWxzOworCQl9CisKKwkJaWYgKGkgPT0gcG9ydF9pbmZvLT5udW1fcGh5cyAtIDEpCisJCQljb250aW51ZTsKKwkJcGh5X2luZm9fY21wID0gJnBvcnRfaW5mby0+cGh5X2luZm9baSArIDFdOworCQlmb3IgKGogPSBpICsgMSA7IGogPCBwb3J0X2luZm8tPm51bV9waHlzIDsgaisrLAorCQkgICAgcGh5X2luZm9fY21wKyspIHsKKwkJCWlmICghcGh5X2luZm9fY21wLT5hdHRhY2hlZC5zYXNfYWRkcmVzcykKKwkJCQljb250aW51ZTsKKwkJCWlmIChzYXNfYWRkcmVzcyAhPSBwaHlfaW5mb19jbXAtPmF0dGFjaGVkLnNhc19hZGRyZXNzKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHBoeV9pbmZvX2NtcC0+cG9ydF9kZXRhaWxzID09IHBvcnRfZGV0YWlscyApCisJCQkJY29udGludWU7CisJCQlkc2Fzd2lkZXByaW50aygoS0VSTl9ERUJVRworCQkJCSJcdFx0cGh5X2lkPSVkIHNhc19hZGRyZXNzPTB4JTAxOGxsWFxuIiwKKwkJCQlqLCBwaHlfaW5mb19jbXAtPmF0dGFjaGVkLnNhc19hZGRyZXNzKSk7CisJCQlpZiAocGh5X2luZm9fY21wLT5wb3J0X2RldGFpbHMpIHsKKwkJCQlwb3J0X2RldGFpbHMtPnJwaHkgPQorCQkJCSAgICBtcHRzYXNfZ2V0X3JwaHkocGh5X2luZm9fY21wKTsKKwkJCQlwb3J0X2RldGFpbHMtPnBvcnQgPQorCQkJCSAgICBtcHRzYXNfZ2V0X3BvcnQocGh5X2luZm9fY21wKTsKKwkJCQlwb3J0X2RldGFpbHMtPnN0YXJnZXQgPQorCQkJCSAgICBtcHRzYXNfZ2V0X3N0YXJnZXQocGh5X2luZm9fY21wKTsKKwkJCQlwb3J0X2RldGFpbHMtPnBvcnRfaWQgPQorCQkJCQlwaHlfaW5mb19jbXAtPnBvcnRfZGV0YWlscy0+cG9ydF9pZDsKKwkJCQlwb3J0X2RldGFpbHMtPm51bV9waHlzID0KKwkJCQkJcGh5X2luZm9fY21wLT5wb3J0X2RldGFpbHMtPm51bV9waHlzOworLy8JCQkJcG9ydF9pbmZvLT5wb3J0X3NlcmlhbF9udW1iZXItLTsKKwkJCQlpb2MtPnBvcnRfc2VyaWFsX251bWJlci0tOworCQkJCWlmICghcGh5X2luZm9fY21wLT5wb3J0X2RldGFpbHMtPm51bV9waHlzKQorCQkJCQlrZnJlZShwaHlfaW5mb19jbXAtPnBvcnRfZGV0YWlscyk7CisJCQl9IGVsc2UKKwkJCQlwaHlfaW5mb19jbXAtPnNhc19wb3J0X2FkZF9waHk9MTsKKwkJCS8qCisJCQkgKiBBZGRpbmcgYSBwaHkgdG8gYSBwb3J0CisJCQkgKi8KKwkJCXBoeV9pbmZvX2NtcC0+cG9ydF9kZXRhaWxzID0gcG9ydF9kZXRhaWxzOworCQkJaWYgKHBoeV9pbmZvX2NtcC0+cGh5X2lkIDwgNjQgKQorCQkJCXBvcnRfZGV0YWlscy0+cGh5X2JpdG1hc2sgfD0KKwkJCQkoMSA8PCBwaHlfaW5mb19jbXAtPnBoeV9pZCk7CisJCQlwb3J0X2RldGFpbHMtPm51bV9waHlzKys7CisJCX0KKwl9CisKKyBvdXQ6CisKKyNpZmRlZiBNUFRfREVCVUdfU0FTX1dJREUKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKSB7CisJCXBvcnRfZGV0YWlscyA9IHBvcnRfaW5mby0+cGh5X2luZm9baV0ucG9ydF9kZXRhaWxzOworCQlpZiAoIXBvcnRfZGV0YWlscykKKwkJCWNvbnRpbnVlOworCQlkc2Fzd2lkZXByaW50aygoS0VSTl9ERUJVRworCQkJIiVzOiBbJXBdOiBwaHlfaWQ9JTAyZCBwb3J0X2lkPSUwMmQgbnVtX3BoeXM9JTAyZCAiCisJCSAgICAJImJpdG1hc2s9MHglMDE2bGxYXG4iLAorCQkJX19GVU5DVElPTl9fLAorCQkJcG9ydF9kZXRhaWxzLCBpLCBwb3J0X2RldGFpbHMtPnBvcnRfaWQsCisJCQlwb3J0X2RldGFpbHMtPm51bV9waHlzLCBwb3J0X2RldGFpbHMtPnBoeV9iaXRtYXNrKSk7CisJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHIlx0XHRwb3J0ID0gJXAgcnBoeT0lcFxuIiwKKwkJCXBvcnRfZGV0YWlscy0+cG9ydCwgcG9ydF9kZXRhaWxzLT5ycGh5KSk7CisJfQorCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHIlxuIikpOworI2VuZGlmCisJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkCittcHRzYXNfdGFyZ2V0X3Jlc2V0KE1QVF9BREFQVEVSICppb2MsIFZpcnRUYXJnZXQgKiB2dGFyZ2V0KQoreworCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopaW9jLT5zaC0+aG9zdGRhdGE7CisKKwlpZiAobXB0c2NzaWhfVE1IYW5kbGVyKGhkLAorCSAgICAgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9UQVJHRVRfUkVTRVQsCisJICAgICB2dGFyZ2V0LT5idXNfaWQsIHZ0YXJnZXQtPnRhcmdldF9pZCwgMCwgMCwgNSkgPCAwKSB7CisJCWhkLT50bVBlbmRpbmcgPSAwOworCQloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7CisJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UCisJICAgICAgICJFcnJvciBwcm9jZXNzaW5nIFRhc2tNZ210IGlkPSVkIFRBUkdFVF9SRVNFVFxuIiwKKwkJCWlvYy0+bmFtZSwgdnRhcmdldC0+dGFyZ2V0X2lkKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQKIG1wdHNhc19zYXNfZW5jbG9zdXJlX3BnMChNUFRfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgbXB0c2FzX2VuY2xvc3VyZSAqZW5jbG9zdXJlLAogCQl1MzIgZm9ybSwgdTMyIGZvcm1fc3BlY2lmaWMpCkBAIC00MDAsMTEgKzY2NCwxMDUgQEAKIAlyZXR1cm4gbXB0c2NzaWhfc2xhdmVfY29uZmlndXJlKHNkZXYpOwogfQogCi0vKgotICogVGhpcyBpcyBwcmV0dHkgdWdseS4gIFdlIHdpbGwgYmUgYWJsZSB0byBzZXJpb3VzbHkgY2xlYW4gaXQgdXAKLSAqIG9uY2UgdGhlIERWIGNvZGUgaW4gbXB0c2NzaWggZ29lcyBhd2F5IGFuZCB3ZSBjYW4gcHJvcGVybHkKLSAqIGltcGxlbWVudCAtPnRhcmdldF9hbGxvYy4KLSAqLworc3RhdGljIGludAorbXB0c2FzX3RhcmdldF9hbGxvYyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2KTsKKwlNUFRfU0NTSV9IT1NUCQkqaGQgPSAoTVBUX1NDU0lfSE9TVCAqKWhvc3QtPmhvc3RkYXRhOworCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OworCXUzMgkJCXRhcmdldF9pZDsKKwl1MzIJCQljaGFubmVsOworCXN0cnVjdCBzYXNfcnBoeQkJKnJwaHk7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbwkqcDsKKwlpbnQgCQkJIGk7CisKKwl2dGFyZ2V0ID0ga3phbGxvYyhzaXplb2YoVmlydFRhcmdldCksIEdGUF9LRVJORUwpOworCWlmICghdnRhcmdldCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2dGFyZ2V0LT5zdGFyZ2V0ID0gc3RhcmdldDsKKwl2dGFyZ2V0LT5pb2NfaWQgPSBoZC0+aW9jLT5pZDsKKwl2dGFyZ2V0LT50ZmxhZ3MgPSBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTfE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWTsKKworCXRhcmdldF9pZCA9IHN0YXJnZXQtPmlkOworCWNoYW5uZWwgPSAwOworCisJaGQtPlRhcmdldHNbdGFyZ2V0X2lkXSA9IHZ0YXJnZXQ7CisKKwkvKgorCSAqIFJBSUQgdm9sdW1lcyBwbGFjZWQgYmV5b25kIHRoZSBsYXN0IGV4cGVjdGVkIHBvcnQuCisJICovCisJaWYgKHN0YXJnZXQtPmNoYW5uZWwgPT0gaGQtPmlvYy0+bnVtX3BvcnRzKQorCQlnb3RvIG91dDsKKworCXJwaHkgPSBkZXZfdG9fcnBoeShzdGFyZ2V0LT5kZXYucGFyZW50KTsKKwltdXRleF9sb2NrKCZoZC0+aW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmhkLT5pb2MtPnNhc190b3BvbG9neSwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX3BoeXM7IGkrKykgeworCQkJaWYgKHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzICE9CisJCQkJCXJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKQorCQkJCWNvbnRpbnVlOworCQkJdGFyZ2V0X2lkID0gcC0+cGh5X2luZm9baV0uYXR0YWNoZWQuaWQ7CisJCQljaGFubmVsID0gcC0+cGh5X2luZm9baV0uYXR0YWNoZWQuY2hhbm5lbDsKKwkJCW1wdHNhc19zZXRfc3RhcmdldCgmcC0+cGh5X2luZm9baV0sIHN0YXJnZXQpOworCisJCQkvKgorCQkJICogRXhwb3NpbmcgaGlkZGVuIHJhaWQgY29tcG9uZW50cworCQkJICovCisJCQlpZiAobXB0c2NzaWhfaXNfcGh5c19kaXNrKGhkLT5pb2MsIHRhcmdldF9pZCkpIHsKKwkJCQl0YXJnZXRfaWQgPSBtcHRzY3NpaF9yYWlkX2lkX3RvX251bShoZCwKKwkJCQkJCXRhcmdldF9pZCk7CisJCQkJdnRhcmdldC0+dGZsYWdzIHw9CisJCQkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisJCQl9CisJCQltdXRleF91bmxvY2soJmhkLT5pb2MtPnNhc190b3BvbG9neV9tdXRleCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmhkLT5pb2MtPnNhc190b3BvbG9neV9tdXRleCk7CisKKwlrZnJlZSh2dGFyZ2V0KTsKKwlyZXR1cm4gLUVOWElPOworCisgb3V0OgorCXZ0YXJnZXQtPnRhcmdldF9pZCA9IHRhcmdldF9pZDsKKwl2dGFyZ2V0LT5idXNfaWQgPSBjaGFubmVsOworCXN0YXJnZXQtPmhvc3RkYXRhID0gdnRhcmdldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK21wdHNhc190YXJnZXRfZGVzdHJveShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2KTsKKwlNUFRfU0NTSV9IT1NUCQkqaGQgPSAoTVBUX1NDU0lfSE9TVCAqKWhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBzYXNfcnBoeQkJKnJwaHk7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbwkqcDsKKwlpbnQgCQkJIGk7CisKKwlpZiAoIXN0YXJnZXQtPmhvc3RkYXRhKQorCQlyZXR1cm47CisKKwlpZiAoc3RhcmdldC0+Y2hhbm5lbCA9PSBoZC0+aW9jLT5udW1fcG9ydHMpCisJCWdvdG8gb3V0OworCisJcnBoeSA9IGRldl90b19ycGh5KHN0YXJnZXQtPmRldi5wYXJlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmhkLT5pb2MtPnNhc190b3BvbG9neSwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX3BoeXM7IGkrKykgeworCQkJaWYgKHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzICE9CisJCQkJCXJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKQorCQkJCWNvbnRpbnVlOworCQkJbXB0c2FzX3NldF9zdGFyZ2V0KCZwLT5waHlfaW5mb1tpXSwgTlVMTCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworIG91dDoKKwlrZnJlZShzdGFyZ2V0LT5ob3N0ZGF0YSk7CisJc3RhcmdldC0+aG9zdGRhdGEgPSBOVUxMOworfQorCisKIHN0YXRpYyBpbnQKIG1wdHNhc19zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CkBAIC00MTIsNjEgKzc3MCw0MSBAQAogCU1QVF9TQ1NJX0hPU1QJCSpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IHNhc19ycGh5CQkqcnBoeTsKIAlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvCSpwOwotCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OwogCVZpcnREZXZpY2UJCSp2ZGV2OwogCXN0cnVjdCBzY3NpX3RhcmdldCAJKnN0YXJnZXQ7Ci0JdTMyCQkJdGFyZ2V0X2lkOwotCWludCBpOworCWludCAJCQlpOwogCiAJdmRldiA9IGt6YWxsb2Moc2l6ZW9mKFZpcnREZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZkZXYpIHsKLQkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVCAic2xhdmVfYWxsb2Mga21hbGxvYyglemQpIEZBSUxFRCFcbiIsCisJCXByaW50ayhNWUlPQ19zX0VSUl9GTVQgInNsYXZlX2FsbG9jIGt6YWxsb2MoJXpkKSBGQUlMRUQhXG4iLAogCQkJCWhkLT5pb2MtPm5hbWUsIHNpemVvZihWaXJ0RGV2aWNlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlzZGV2LT5ob3N0ZGF0YSA9IHZkZXY7CiAJc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwotCXZ0YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKLQl2dGFyZ2V0LT5pb2NfaWQgPSBoZC0+aW9jLT5pZDsKLQl2ZGV2LT52dGFyZ2V0ID0gdnRhcmdldDsKLQlpZiAodnRhcmdldC0+bnVtX2x1bnMgPT0gMCkgewotCQl2dGFyZ2V0LT50ZmxhZ3MgPSBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTfE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWTsKLQkJaGQtPlRhcmdldHNbc2Rldi0+aWRdID0gdnRhcmdldDsKLQl9CisJdmRldi0+dnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOwogCiAJLyoKLQkgIFJBSUQgdm9sdW1lcyBwbGFjZWQgYmV5b25kIHRoZSBsYXN0IGV4cGVjdGVkIHBvcnQuCi0JKi8KLQlpZiAoc2Rldi0+Y2hhbm5lbCA9PSBoZC0+aW9jLT5udW1fcG9ydHMpIHsKLQkJdGFyZ2V0X2lkID0gc2Rldi0+aWQ7Ci0JCXZ0YXJnZXQtPmJ1c19pZCA9IDA7Ci0JCXZkZXYtPmx1biA9IDA7CisJICogUkFJRCB2b2x1bWVzIHBsYWNlZCBiZXlvbmQgdGhlIGxhc3QgZXhwZWN0ZWQgcG9ydC4KKwkgKi8KKwlpZiAoc2Rldi0+Y2hhbm5lbCA9PSBoZC0+aW9jLT5udW1fcG9ydHMpCiAJCWdvdG8gb3V0OwotCX0KIAogCXJwaHkgPSBkZXZfdG9fcnBoeShzZGV2LT5zZGV2X3RhcmdldC0+ZGV2LnBhcmVudCk7CiAJbXV0ZXhfbG9jaygmaGQtPmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZoZC0+aW9jLT5zYXNfdG9wb2xvZ3ksIGxpc3QpIHsKIAkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9waHlzOyBpKyspIHsKLQkJCWlmIChwLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5zYXNfYWRkcmVzcyA9PQotCQkJCQlycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgewotCQkJCXRhcmdldF9pZCA9IHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmlkOwotCQkJCXZ0YXJnZXQtPmJ1c19pZCA9IHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmNoYW5uZWw7Ci0JCQkJdmRldi0+bHVuID0gc2Rldi0+bHVuOwotCQkJCXAtPnBoeV9pbmZvW2ldLnN0YXJnZXQgPSBzZGV2LT5zZGV2X3RhcmdldDsKLQkJCQkvKgotCQkJCSAqIEV4cG9zaW5nIGhpZGRlbiBkaXNrIChSQUlEKQotCQkJCSAqLwotCQkJCWlmIChtcHRzY3NpaF9pc19waHlzX2Rpc2soaGQtPmlvYywgdGFyZ2V0X2lkKSkgewotCQkJCQl0YXJnZXRfaWQgPSBtcHRzY3NpaF9yYWlkX2lkX3RvX251bShoZCwKLQkJCQkJCQl0YXJnZXRfaWQpOwotCQkJCQl2ZGV2LT52dGFyZ2V0LT50ZmxhZ3MgfD0KLQkJCQkJICAgIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7Ci0JCQkJCXNkZXYtPm5vX3VsZF9hdHRhY2ggPSAxOwotCQkJCX0KLQkJCQltdXRleF91bmxvY2soJmhkLT5pb2MtPnNhc190b3BvbG9neV9tdXRleCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9CisJCQlpZiAocC0+cGh5X2luZm9baV0uYXR0YWNoZWQuc2FzX2FkZHJlc3MgIT0KKwkJCQkJcnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpCisJCQkJY29udGludWU7CisJCQl2ZGV2LT5sdW4gPSBzZGV2LT5sdW47CisJCQkvKgorCQkJICogRXhwb3NpbmcgaGlkZGVuIHJhaWQgY29tcG9uZW50cworCQkJICovCisJCQlpZiAobXB0c2NzaWhfaXNfcGh5c19kaXNrKGhkLT5pb2MsCisJCQkJCXAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmlkKSkKKwkJCQlzZGV2LT5ub191bGRfYXR0YWNoID0gMTsKKwkJCW11dGV4X3VubG9jaygmaGQtPmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmaGQtPmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKQEAgLTQ3NSw1NyArODEzLDM5IEBACiAJcmV0dXJuIC1FTlhJTzsKIAogIG91dDoKLQl2dGFyZ2V0LT50YXJnZXRfaWQgPSB0YXJnZXRfaWQ7Ci0JdnRhcmdldC0+bnVtX2x1bnMrKzsKKwl2ZGV2LT52dGFyZ2V0LT5udW1fbHVucysrOworCXNkZXYtPmhvc3RkYXRhID0gdmRldjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLW1wdHNhc19zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3N0YXRpYyBpbnQKK21wdHNhc19xY21kKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gc2Rldi0+aG9zdDsKLQlNUFRfU0NTSV9IT1NUICpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7Ci0JVmlydERldmljZSAqdmRldjsKKwlWaXJ0RGV2aWNlCSp2ZGV2ID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAKLQkvKgotCSAqIElzc3VlIHRhcmdldCByZXNldCB0byBmbHVzaCBmaXJtd2FyZSBvdXRzdGFuZGluZyBjb21tYW5kcy4KLQkgKi8KLQl2ZGV2ID0gc2Rldi0+aG9zdGRhdGE7Ci0JaWYgKHZkZXYtPmNvbmZpZ3VyZWRfbHVuKXsKLQkJaWYgKG1wdHNjc2loX1RNSGFuZGxlcihoZCwKLQkJICAgICBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVCwKLQkJICAgICB2ZGV2LT52dGFyZ2V0LT5idXNfaWQsCi0JCSAgICAgdmRldi0+dnRhcmdldC0+dGFyZ2V0X2lkLAotCQkgICAgIDAsIDAsIDUgLyogNSBzZWNvbmQgdGltZW91dCAqLykKLQkJICAgICA8IDApewotCi0JCQkvKiBUaGUgVE0gcmVxdWVzdCBmYWlsZWQhCi0JCQkgKiBGYXRhbCBlcnJvciBjYXNlLgotCQkJICovCi0JCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVAotCQkgICAgICAgIkVycm9yIHByb2Nlc3NpbmcgVGFza01nbXQgaWQ9JWQgVEFSR0VUX1JFU0VUXG4iLAotCQkJCWhkLT5pb2MtPm5hbWUsCi0JCQkJdmRldi0+dnRhcmdldC0+dGFyZ2V0X2lkKTsKLQotCQkJaGQtPnRtUGVuZGluZyA9IDA7Ci0JCQloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7Ci0JCX0KKy8vCXNjc2lfcHJpbnRfY29tbWFuZChTQ3BudCk7CisJaWYgKHZkZXYtPnZ0YXJnZXQtPmRlbGV0ZWQpIHsKKwkJU0NwbnQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlkb25lKFNDcG50KTsKKwkJcmV0dXJuIDA7CiAJfQotCW1wdHNjc2loX3NsYXZlX2Rlc3Ryb3koc2Rldik7CisKKwlyZXR1cm4gbXB0c2NzaWhfcWNtZChTQ3BudCxkb25lKTsKIH0KIAorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtcHRzYXNfZHJpdmVyX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQkJPSBUSElTX01PRFVMRSwKIAkucHJvY19uYW1lCQkJPSAibXB0c2FzIiwKIAkucHJvY19pbmZvCQkJPSBtcHRzY3NpaF9wcm9jX2luZm8sCiAJLm5hbWUJCQkJPSAiTVBUIFNQSSBIb3N0IiwKIAkuaW5mbwkJCQk9IG1wdHNjc2loX2luZm8sCi0JLnF1ZXVlY29tbWFuZAkJCT0gbXB0c2NzaWhfcWNtZCwKLQkudGFyZ2V0X2FsbG9jCQkJPSBtcHRzY3NpaF90YXJnZXRfYWxsb2MsCisJLnF1ZXVlY29tbWFuZAkJCT0gbXB0c2FzX3FjbWQsCisJLnRhcmdldF9hbGxvYwkJCT0gbXB0c2FzX3RhcmdldF9hbGxvYywKIAkuc2xhdmVfYWxsb2MJCQk9IG1wdHNhc19zbGF2ZV9hbGxvYywKIAkuc2xhdmVfY29uZmlndXJlCQk9IG1wdHNhc19zbGF2ZV9jb25maWd1cmUsCi0JLnRhcmdldF9kZXN0cm95CQkJPSBtcHRzY3NpaF90YXJnZXRfZGVzdHJveSwKLQkuc2xhdmVfZGVzdHJveQkJCT0gbXB0c2FzX3NsYXZlX2Rlc3Ryb3ksCisJLnRhcmdldF9kZXN0cm95CQkJPSBtcHRzYXNfdGFyZ2V0X2Rlc3Ryb3ksCisJLnNsYXZlX2Rlc3Ryb3kJCQk9IG1wdHNjc2loX3NsYXZlX2Rlc3Ryb3ksCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IG1wdHNjc2loX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcgk9IG1wdHNjc2loX2Rldl9yZXNldCwKQEAgLTc5NSw3ICsxMTE1LDcgQEAKIAogCXBvcnRfaW5mby0+bnVtX3BoeXMgPSBidWZmZXItPk51bVBoeXM7CiAJcG9ydF9pbmZvLT5waHlfaW5mbyA9IGtjYWxsb2MocG9ydF9pbmZvLT5udW1fcGh5cywKLQkJc2l6ZW9mKHN0cnVjdCBtcHRzYXNfcGh5aW5mbyksR0ZQX0tFUk5FTCk7CisJCXNpemVvZigqcG9ydF9pbmZvLT5waHlfaW5mbyksR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3J0X2luZm8tPnBoeV9pbmZvKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwpAQCAtODExLDYgKzExMzEsNyBAQAogCQkgICAgYnVmZmVyLT5QaHlEYXRhW2ldLlBvcnQ7CiAJCXBvcnRfaW5mby0+cGh5X2luZm9baV0ubmVnb3RpYXRlZF9saW5rX3JhdGUgPQogCQkgICAgYnVmZmVyLT5QaHlEYXRhW2ldLk5lZ290aWF0ZWRMaW5rUmF0ZTsKKwkJcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5wb3J0aW5mbyA9IHBvcnRfaW5mbzsKIAl9CiAKICBvdXRfZnJlZV9jb25zaXN0ZW50OgpAQCAtOTY4LDcgKzEyODksNyBAQAogCUNPTkZJR1BBUk1TIGNmZzsKIAlTYXNFeHBhbmRlclBhZ2UwX3QgKmJ1ZmZlcjsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Ci0JaW50IGVycm9yOworCWludCBpLCBlcnJvcjsKIAogCWhkci5QYWdlVmVyc2lvbiA9IE1QSV9TQVNFWFBBTkRFUjBfUEFHRVZFUlNJT047CiAJaGRyLkV4dFBhZ2VMZW5ndGggPSAwOwpAQCAtMTAxMywxMiArMTMzNCwxNSBAQAogCXBvcnRfaW5mby0+bnVtX3BoeXMgPSBidWZmZXItPk51bVBoeXM7CiAJcG9ydF9pbmZvLT5oYW5kbGUgPSBsZTE2X3RvX2NwdShidWZmZXItPkRldkhhbmRsZSk7CiAJcG9ydF9pbmZvLT5waHlfaW5mbyA9IGtjYWxsb2MocG9ydF9pbmZvLT5udW1fcGh5cywKLQkJc2l6ZW9mKHN0cnVjdCBtcHRzYXNfcGh5aW5mbyksR0ZQX0tFUk5FTCk7CisJCXNpemVvZigqcG9ydF9pbmZvLT5waHlfaW5mbyksR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3J0X2luZm8tPnBoeV9pbmZvKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyspCisJCXBvcnRfaW5mby0+cGh5X2luZm9baV0ucG9ydGluZm8gPSBwb3J0X2luZm87CisKICBvdXRfZnJlZV9jb25zaXN0ZW50OgogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhkci5FeHRQYWdlTGVuZ3RoICogNCwKIAkJCSAgICBidWZmZXIsIGRtYV9oYW5kbGUpOwpAQCAtMTE2MSwxOSArMTQ4NSwyMyBAQAogewogCU1QVF9BREFQVEVSICppb2M7CiAJc3RydWN0IHNhc19waHkgKnBoeTsKLQlpbnQgZXJyb3I7CisJc3RydWN0IHNhc19wb3J0ICpwb3J0OworCWludCBlcnJvciA9IDA7CiAKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkZXYpIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAoIXBoeV9pbmZvLT5waHkpIHsKIAkJcGh5ID0gc2FzX3BoeV9hbGxvYyhkZXYsIGluZGV4KTsKLQkJaWYgKCFwaHkpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKCFwaHkpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfSBlbHNlCiAJCXBoeSA9IHBoeV9pbmZvLT5waHk7CiAKLQlwaHktPnBvcnRfaWRlbnRpZmllciA9IHBoeV9pbmZvLT5wb3J0X2lkOwogCW1wdHNhc19wYXJzZV9kZXZpY2VfaW5mbygmcGh5LT5pZGVudGlmeSwgJnBoeV9pbmZvLT5pZGVudGlmeSk7CiAKIAkvKgpAQCAtMTI2NSwxOSArMTU5Myw1MiBAQAogCQllcnJvciA9IHNhc19waHlfYWRkKHBoeSk7CiAJCWlmIChlcnJvcikgewogCQkJc2FzX3BoeV9mcmVlKHBoeSk7Ci0JCQlyZXR1cm4gZXJyb3I7CisJCQlnb3RvIG91dDsKIAkJfQogCQlwaHlfaW5mby0+cGh5ID0gcGh5OwogCX0KIAotCWlmICgocGh5X2luZm8tPmF0dGFjaGVkLmhhbmRsZSkgJiYKLQkgICAgKCFwaHlfaW5mby0+cnBoeSkpIHsKKwlpZiAoIXBoeV9pbmZvLT5hdHRhY2hlZC5oYW5kbGUgfHwKKwkJCSFwaHlfaW5mby0+cG9ydF9kZXRhaWxzKQorCQlnb3RvIG91dDsKKworCXBvcnQgPSBtcHRzYXNfZ2V0X3BvcnQocGh5X2luZm8pOworCWlvYyA9IHBoeV90b19pb2MocGh5X2luZm8tPnBoeSk7CisKKwlpZiAocGh5X2luZm8tPnNhc19wb3J0X2FkZF9waHkpIHsKKworCQlpZiAoIXBvcnQpIHsKKwkJCXBvcnQgPSBzYXNfcG9ydF9hbGxvYyhkZXYsCisJCQkgICAgcGh5X2luZm8tPnBvcnRfZGV0YWlscy0+cG9ydF9pZCk7CisJCQlkc2Fzd2lkZXByaW50aygoS0VSTl9ERUJVRworCQkJICAgICJzYXNfcG9ydF9hbGxvYzogcG9ydD0lcCBkZXY9JXAgcG9ydF9pZD0lZFxuIiwKKwkJCSAgICBwb3J0LCBkZXYsIHBoeV9pbmZvLT5wb3J0X2RldGFpbHMtPnBvcnRfaWQpKTsKKwkJCWlmICghcG9ydCkgeworCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWVycm9yID0gc2FzX3BvcnRfYWRkKHBvcnQpOworCQkJaWYgKGVycm9yKSB7CisJCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCQkiJXM6IGV4aXQgYXQgbGluZT0lZFxuIiwgaW9jLT5uYW1lLAorCQkJCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fKSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQltcHRzYXNfc2V0X3BvcnQocGh5X2luZm8sIHBvcnQpOworCQl9CisJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHICJzYXNfcG9ydF9hZGRfcGh5OiBwaHlfaWQ9JWRcbiIsCisJCSAgICBwaHlfaW5mby0+cGh5X2lkKSk7CisJCXNhc19wb3J0X2FkZF9waHkocG9ydCwgcGh5X2luZm8tPnBoeSk7CisJCXBoeV9pbmZvLT5zYXNfcG9ydF9hZGRfcGh5ID0gMDsKKwl9CisKKwlpZiAoIW1wdHNhc19nZXRfcnBoeShwaHlfaW5mbykgJiYgcG9ydCAmJiAhcG9ydC0+cnBoeSkgewogCiAJCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKwkJc3RydWN0IGRldmljZSAqcGFyZW50OwogCQlzdHJ1Y3Qgc2FzX2lkZW50aWZ5IGlkZW50aWZ5OwogCi0JCWlvYyA9IHBoeV90b19pb2MocGh5X2luZm8tPnBoeSk7Ci0KKwkJcGFyZW50ID0gZGV2LT5wYXJlbnQtPnBhcmVudDsKIAkJLyoKIAkJICogTGV0IHRoZSBob3RwbHVnX3dvcmsgdGhyZWFkIGhhbmRsZSBwcm9jZXNzaW5nCiAJCSAqIHRoZSBhZGRpbmcvcmVtb3Zpbmcgb2YgZGV2aWNlcyB0aGF0IG9jY3VyCkBAIC0xMjg1LDM2ICsxNjQ2LDYzIEBACiAJCSAqLwogCQlpZiAoaW9jLT5zYXNfZGlzY292ZXJ5X3J1bnRpbWUgJiYKIAkJCW1wdHNhc19pc19lbmRfZGV2aWNlKCZwaHlfaW5mby0+YXR0YWNoZWQpKQotCQkJcmV0dXJuIDA7CisJCQkJZ290byBvdXQ7CiAKIAkJbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKCZpZGVudGlmeSwgJnBoeV9pbmZvLT5hdHRhY2hlZCk7CisJCWlmIChzY3NpX2lzX2hvc3RfZGV2aWNlKHBhcmVudCkpIHsKKwkJCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbzsKKwkJCWludCBpOworCisJCQltdXRleF9sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7CisJCQlwb3J0X2luZm8gPSBtcHRzYXNfZmluZF9wb3J0aW5mb19ieV9oYW5kbGUoaW9jLAorCQkJCQkJCQkgICBpb2MtPmhhbmRsZSk7CisJCQltdXRleF91bmxvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKKworCQkJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykKKwkJCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5zYXNfYWRkcmVzcyA9PQorCQkJCSAgICBpZGVudGlmeS5zYXNfYWRkcmVzcykKKwkJCQkJZ290byBvdXQ7CisKKwkJfSBlbHNlIGlmIChzY3NpX2lzX3Nhc19ycGh5KHBhcmVudCkpIHsKKwkJCXN0cnVjdCBzYXNfcnBoeSAqcGFyZW50X3JwaHkgPSBkZXZfdG9fcnBoeShwYXJlbnQpOworCQkJaWYgKGlkZW50aWZ5LnNhc19hZGRyZXNzID09CisJCQkgICAgcGFyZW50X3JwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKQorCQkJCWdvdG8gb3V0OworCQl9CisKIAkJc3dpdGNoIChpZGVudGlmeS5kZXZpY2VfdHlwZSkgewogCQljYXNlIFNBU19FTkRfREVWSUNFOgotCQkJcnBoeSA9IHNhc19lbmRfZGV2aWNlX2FsbG9jKHBoeSk7CisJCQlycGh5ID0gc2FzX2VuZF9kZXZpY2VfYWxsb2MocG9ydCk7CiAJCQlicmVhazsKIAkJY2FzZSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U6CiAJCWNhc2UgU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0U6Ci0JCQlycGh5ID0gc2FzX2V4cGFuZGVyX2FsbG9jKHBoeSwgaWRlbnRpZnkuZGV2aWNlX3R5cGUpOworCQkJcnBoeSA9IHNhc19leHBhbmRlcl9hbGxvYyhwb3J0LCBpZGVudGlmeS5kZXZpY2VfdHlwZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJwaHkgPSBOVUxMOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCFycGh5KQotCQkJcmV0dXJuIDA7IC8qIG5vbi1mYXRhbDogYW4gcnBoeSBjYW4gYmUgYWRkZWQgbGF0ZXIgKi8KLQotCQlycGh5LT5pZGVudGlmeSA9IGlkZW50aWZ5OwotCi0JCWVycm9yID0gc2FzX3JwaHlfYWRkKHJwaHkpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXNhc19ycGh5X2ZyZWUocnBoeSk7Ci0JCQlyZXR1cm4gZXJyb3I7CisJCWlmICghcnBoeSkgeworCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCSIlczogZXhpdCBhdCBsaW5lPSVkXG4iLCBpb2MtPm5hbWUsCisJCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOworCQkJZ290byBvdXQ7CiAJCX0KIAotCQlwaHlfaW5mby0+cnBoeSA9IHJwaHk7CisJCXJwaHktPmlkZW50aWZ5ID0gaWRlbnRpZnk7CisJCWVycm9yID0gc2FzX3JwaHlfYWRkKHJwaHkpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRmYWlscHJpbnRrKChNWUlPQ19zX0VSUl9GTVQKKwkJCQkiJXM6IGV4aXQgYXQgbGluZT0lZFxuIiwgaW9jLT5uYW1lLAorCQkJCV9fRlVOQ1RJT05fXywgX19MSU5FX18pKTsKKwkJCXNhc19ycGh5X2ZyZWUocnBoeSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQltcHRzYXNfc2V0X3JwaHkocGh5X2luZm8sIHJwaHkpOwogCX0KIAotCXJldHVybiAwOworIG91dDoKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzMzMsNiArMTcyMSw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfcG9ydF9pbmZvOwogCiAJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCWlvYy0+aGFuZGxlID0gaGJhLT5oYW5kbGU7CiAJcG9ydF9pbmZvID0gbXB0c2FzX2ZpbmRfcG9ydGluZm9fYnlfaGFuZGxlKGlvYywgaGJhLT5oYW5kbGUpOwogCWlmICghcG9ydF9pbmZvKSB7CiAJCXBvcnRfaW5mbyA9IGhiYTsKQEAgLTEzNDIsOCArMTczMSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBoYmEtPm51bV9waHlzOyBpKyspCiAJCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLm5lZ290aWF0ZWRfbGlua19yYXRlID0KIAkJCQloYmEtPnBoeV9pbmZvW2ldLm5lZ290aWF0ZWRfbGlua19yYXRlOwotCQlpZiAoaGJhLT5waHlfaW5mbykKLQkJCWtmcmVlKGhiYS0+cGh5X2luZm8pOworCQlrZnJlZShoYmEtPnBoeV9pbmZvKTsKIAkJa2ZyZWUoaGJhKTsKIAkJaGJhID0gTlVMTDsKIAl9CkBAIC0xMzYyLDE4ICsxNzUwLDE5IEBACiAJCSAgICBwb3J0X2luZm8tPnBoeV9pbmZvW2ldLnBoeV9pZDsKIAkJaGFuZGxlID0gcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5oYW5kbGU7CiAKLQkJaWYgKHBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQuaGFuZGxlKSB7CisJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmhhbmRsZSkKIAkJCW1wdHNhc19zYXNfZGV2aWNlX3BnMChpb2MsCiAJCQkJJnBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQsCiAJCQkJKE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUgPDwKIAkJCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwKIAkJCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmhhbmRsZSk7Ci0JCX0KKwl9CiAKKwltcHRzYXNfc2V0dXBfd2lkZV9wb3J0cyhpb2MsIHBvcnRfaW5mbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrLCBpb2MtPnNhc19pbmRleCsrKQogCQltcHRzYXNfcHJvYmVfb25lX3BoeSgmaW9jLT5zaC0+c2hvc3RfZ2VuZGV2LAogCQkgICAgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sIGlvYy0+c2FzX2luZGV4LCAxKTsKLQkJaW9jLT5zYXNfaW5kZXgrKzsKLQl9CiAKIAlyZXR1cm4gMDsKIApAQCAtMTM4Nyw2ICsxNzc2LDggQEAKIG1wdHNhc19wcm9iZV9leHBhbmRlcl9waHlzKE1QVF9BREFQVEVSICppb2MsIHUzMiAqaGFuZGxlKQogewogCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbywgKnAsICpleDsKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CisJc3RydWN0IHNhc19ycGh5ICpycGh5OwogCWludCBlcnJvciA9IC1FTk9NRU0sIGksIGo7CiAKIAlleCA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0X2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTE0MDgsMTYgKzE3OTksMTMgQEAKIAkJbGlzdF9hZGRfdGFpbCgmcG9ydF9pbmZvLT5saXN0LCAmaW9jLT5zYXNfdG9wb2xvZ3kpOwogCX0gZWxzZSB7CiAJCXBvcnRfaW5mby0+aGFuZGxlID0gZXgtPmhhbmRsZTsKLQkJaWYgKGV4LT5waHlfaW5mbykKLQkJCWtmcmVlKGV4LT5waHlfaW5mbyk7CisJCWtmcmVlKGV4LT5waHlfaW5mbyk7CiAJCWtmcmVlKGV4KTsKIAkJZXggPSBOVUxMOwogCX0KIAltdXRleF91bmxvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyspIHsKLQkJc3RydWN0IGRldmljZSAqcGFyZW50OwotCiAJCW1wdHNhc19zYXNfZXhwYW5kZXJfcGcxKGlvYywgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sCiAJCQkoTVBJX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hBTkRMRV9QSFlfTlVNIDw8CiAJCQkgTVBJX1NBU19FWFBBTkRfUEdBRF9GT1JNX1NISUZUKSwgKGkgPDwgMTYpICsgKmhhbmRsZSk7CkBAIC0xNDQxLDM0ICsxODI5LDM0IEBACiAJCQlwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnBoeV9pZCA9CiAJCQkgICAgcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5waHlfaWQ7CiAJCX0KKwl9CiAKLQkJLyoKLQkJICogSWYgd2UgZmluZCBhIHBhcmVudCBwb3J0IGhhbmRsZSB0aGlzIGV4cGFuZGVyIGlzCi0JCSAqIGF0dGFjaGVkIHRvIGFub3RoZXIgZXhwYW5kZXIsIGVsc2UgaXQgaGFuZ3Mgb2YgdGhlCi0JCSAqIEhCQSBwaHlzLgotCQkgKi8KLQkJcGFyZW50ID0gJmlvYy0+c2gtPnNob3N0X2dlbmRldjsKKwlwYXJlbnQgPSAmaW9jLT5zaC0+c2hvc3RfZ2VuZGV2OworCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyspIHsKIAkJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZpb2MtPnNhc190b3BvbG9neSwgbGlzdCkgewogCQkJZm9yIChqID0gMDsgaiA8IHAtPm51bV9waHlzOyBqKyspIHsKLQkJCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5oYW5kbGUgPT0KKwkJCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5oYW5kbGUgIT0KIAkJCQkJCXAtPnBoeV9pbmZvW2pdLmF0dGFjaGVkLmhhbmRsZSkKLQkJCQkJcGFyZW50ID0gJnAtPnBoeV9pbmZvW2pdLnJwaHktPmRldjsKKwkJCQkJY29udGludWU7CisJCQkJcnBoeSA9IG1wdHNhc19nZXRfcnBoeSgmcC0+cGh5X2luZm9bal0pOworCQkJCXBhcmVudCA9ICZycGh5LT5kZXY7CiAJCQl9CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7CisJfQogCisJbXB0c2FzX3NldHVwX3dpZGVfcG9ydHMoaW9jLCBwb3J0X2luZm8pOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKywgaW9jLT5zYXNfaW5kZXgrKykKIAkJbXB0c2FzX3Byb2JlX29uZV9waHkocGFyZW50LCAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXSwKIAkJICAgIGlvYy0+c2FzX2luZGV4LCAwKTsKLQkJaW9jLT5zYXNfaW5kZXgrKzsKLQl9CiAKIAlyZXR1cm4gMDsKIAogIG91dF9mcmVlX3BvcnRfaW5mbzoKIAlpZiAoZXgpIHsKLQkJaWYgKGV4LT5waHlfaW5mbykKLQkJCWtmcmVlKGV4LT5waHlfaW5mbyk7CisJCWtmcmVlKGV4LT5waHlfaW5mbyk7CiAJCWtmcmVlKGV4KTsKIAl9CiAgb3V0OgpAQCAtMTQ4Nyw3ICsxODc1LDEyIEBACiB7CiAJc3RydWN0IG1wdHNhc19wb3J0aW5mbyBidWZmZXI7CiAJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvLCAqbiwgKnBhcmVudDsKKwlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvOworCXN0cnVjdCBzY3NpX3RhcmdldCAqIHN0YXJnZXQ7CisJVmlydFRhcmdldCAqIHZ0YXJnZXQ7CisJc3RydWN0IHNhc19wb3J0ICogcG9ydDsKIAlpbnQgaTsKKwl1NjQJZXhwYW5kZXJfc2FzX2FkZHJlc3M7CiAKIAltdXRleF9sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnRfaW5mbywgbiwgJmlvYy0+c2FzX3RvcG9sb2d5LCBsaXN0KSB7CkBAIC0xNTAyLDYgKzE4OTUsMjUgQEAKIAkJICAgICBNUElfU0FTX0VYUEFORF9QR0FEX0ZPUk1fU0hJRlQpLCBwb3J0X2luZm8tPmhhbmRsZSkpIHsKIAogCQkJLyoKKwkJCSAqIElzc3VlIHRhcmdldCByZXNldCB0byBhbGwgY2hpbGQgZW5kIGRldmljZXMKKwkJCSAqIHRoZW4gbWFyayB0aGVtIGRlbGV0ZWQgdG8gcHJldmVudCBmdXJ0aGVyCisJCQkgKiBJTyBnb2luZyB0byB0aGVtLgorCQkJICovCisJCQlwaHlfaW5mbyA9IHBvcnRfaW5mby0+cGh5X2luZm87CisJCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrLCBwaHlfaW5mbysrKSB7CisJCQkJc3RhcmdldCA9IG1wdHNhc19nZXRfc3RhcmdldChwaHlfaW5mbyk7CisJCQkJaWYgKCFzdGFyZ2V0KQorCQkJCQljb250aW51ZTsKKwkJCQl2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CisJCQkJaWYodnRhcmdldC0+ZGVsZXRlZCkKKwkJCQkJY29udGludWU7CisJCQkJdnRhcmdldC0+ZGVsZXRlZCA9IDE7CisJCQkJbXB0c2FzX3RhcmdldF9yZXNldChpb2MsIHZ0YXJnZXQpOworCQkJCXNhc19wb3J0X2RlbGV0ZShtcHRzYXNfZ2V0X3BvcnQocGh5X2luZm8pKTsKKwkJCQltcHRzYXNfcG9ydF9kZWxldGUocGh5X2luZm8tPnBvcnRfZGV0YWlscyk7CisJCQl9CisKKwkJCS8qCiAJCQkgKiBPYnRhaW4gdGhlIHBvcnRfaW5mbyBpbnN0YW5jZSB0byB0aGUgcGFyZW50IHBvcnQKIAkJCSAqLwogCQkJcGFyZW50ID0gbXB0c2FzX2ZpbmRfcG9ydGluZm9fYnlfaGFuZGxlKGlvYywKQEAgLTE1MTAsMzQgKzE5MjIsNDMgQEAKIAkJCWlmICghcGFyZW50KQogCQkJCWdvdG8gbmV4dF9wb3J0OwogCisJCQlleHBhbmRlcl9zYXNfYWRkcmVzcyA9CisJCQkJcG9ydF9pbmZvLT5waHlfaW5mb1swXS5pZGVudGlmeS5zYXNfYWRkcmVzczsKKwogCQkJLyoKIAkJCSAqIERlbGV0ZSBycGh5cyBpbiB0aGUgcGFyZW50IHRoYXQgcG9pbnQKIAkJCSAqIHRvIHRoaXMgZXhwYW5kZXIuICBUaGUgdHJhbnNwb3J0IGxheWVyIHdpbGwKIAkJCSAqIGNsZWFudXAgYWxsIHRoZSBjaGlsZHJlbi4KIAkJCSAqLwotCQkJZm9yIChpID0gMDsgaSA8IHBhcmVudC0+bnVtX3BoeXM7IGkrKykgewotCQkJCWlmICgoIXBhcmVudC0+cGh5X2luZm9baV0ucnBoeSkgfHwKLQkJCQkgICAgKHBhcmVudC0+cGh5X2luZm9baV0uYXR0YWNoZWQuc2FzX2FkZHJlc3MgIT0KLQkJCQkgICBwb3J0X2luZm8tPnBoeV9pbmZvW2ldLmlkZW50aWZ5LnNhc19hZGRyZXNzKSkKKwkJCXBoeV9pbmZvID0gcGFyZW50LT5waHlfaW5mbzsKKwkJCWZvciAoaSA9IDA7IGkgPCBwYXJlbnQtPm51bV9waHlzOyBpKyssIHBoeV9pbmZvKyspIHsKKwkJCQlwb3J0ID0gbXB0c2FzX2dldF9wb3J0KHBoeV9pbmZvKTsKKwkJCQlpZiAoIXBvcnQpCiAJCQkJCWNvbnRpbnVlOwotCQkJCXNhc19ycGh5X2RlbGV0ZShwYXJlbnQtPnBoeV9pbmZvW2ldLnJwaHkpOwotCQkJCW1lbXNldCgmcGFyZW50LT5waHlfaW5mb1tpXS5hdHRhY2hlZCwgMCwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwotCQkJCXBhcmVudC0+cGh5X2luZm9baV0ucnBoeSA9IE5VTEw7Ci0JCQkJcGFyZW50LT5waHlfaW5mb1tpXS5zdGFyZ2V0ID0gTlVMTDsKKwkJCQlpZiAocGh5X2luZm8tPmF0dGFjaGVkLnNhc19hZGRyZXNzICE9CisJCQkJCWV4cGFuZGVyX3Nhc19hZGRyZXNzKQorCQkJCQljb250aW51ZTsKKyNpZmRlZiBNUFRfREVCVUdfU0FTX1dJREUKKwkJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwb3J0LT5kZXYsICJkZWxldGVcbiIpOworI2VuZGlmCisJCQkJc2FzX3BvcnRfZGVsZXRlKHBvcnQpOworCQkJCW1wdHNhc19wb3J0X2RlbGV0ZShwaHlfaW5mby0+cG9ydF9kZXRhaWxzKTsKIAkJCX0KICBuZXh0X3BvcnQ6CisKKwkJCXBoeV9pbmZvID0gcG9ydF9pbmZvLT5waHlfaW5mbzsKKwkJCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyssIHBoeV9pbmZvKyspCisJCQkJbXB0c2FzX3BvcnRfZGVsZXRlKHBoeV9pbmZvLT5wb3J0X2RldGFpbHMpOworCiAJCQlsaXN0X2RlbCgmcG9ydF9pbmZvLT5saXN0KTsKLQkJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvKQotCQkJCWtmcmVlKHBvcnRfaW5mby0+cGh5X2luZm8pOworCQkJa2ZyZWUocG9ydF9pbmZvLT5waHlfaW5mbyk7CiAJCQlrZnJlZShwb3J0X2luZm8pOwogCQl9CiAJCS8qCiAJCSogRnJlZSB0aGlzIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSBpbnNpZGUKIAkJKiBtcHRzYXNfc2FzX2V4cGFuZGVyX3BnMAogCQkqLwotCQlpZiAoYnVmZmVyLnBoeV9pbmZvKQotCQkJa2ZyZWUoYnVmZmVyLnBoeV9pbmZvKTsKKwkJa2ZyZWUoYnVmZmVyLnBoeV9pbmZvKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7CiB9CkBAIC0xNTczLDYwICsxOTk0LDU5IEBACiAvKgogICogV29yayBxdWV1ZSB0aHJlYWQgdG8gaGFuZGxlIFJ1bnRpbWUgZGlzY292ZXJ5CiAgKiBNZXJlIHB1cnBvc2UgaXMgdGhlIGhvdCBhZGQvZGVsZXRlIG9mIGV4cGFuZGVycworICooTXV0ZXggVU5MT0NLRUQpCiAgKi8KIHN0YXRpYyB2b2lkCi1tcHRzY3NpaF9kaXNjb3Zlcnlfd29yayh2b2lkICogYXJnKQorX19tcHRzYXNfZGlzY292ZXJ5X3dvcmsoTVBUX0FEQVBURVIgKmlvYykKIHsKLQlzdHJ1Y3QgbXB0c2FzX2Rpc2NvdmVyeV9ldmVudCAqZXYgPSBhcmc7Ci0JTVBUX0FEQVBURVIgKmlvYyA9IGV2LT5pb2M7CiAJdTMyIGhhbmRsZSA9IDB4RkZGRjsKIAotCW11dGV4X2xvY2soJmlvYy0+c2FzX2Rpc2NvdmVyeV9tdXRleCk7CiAJaW9jLT5zYXNfZGlzY292ZXJ5X3J1bnRpbWU9MTsKIAltcHRzYXNfZGVsZXRlX2V4cGFuZGVyX3BoeXMoaW9jKTsKIAltcHRzYXNfcHJvYmVfaGJhX3BoeXMoaW9jKTsKIAl3aGlsZSAoIW1wdHNhc19wcm9iZV9leHBhbmRlcl9waHlzKGlvYywgJmhhbmRsZSkpCiAJCTsKLQlrZnJlZShldik7CiAJaW9jLT5zYXNfZGlzY292ZXJ5X3J1bnRpbWU9MDsKK30KKworLyoKKyAqIFdvcmsgcXVldWUgdGhyZWFkIHRvIGhhbmRsZSBSdW50aW1lIGRpc2NvdmVyeQorICogTWVyZSBwdXJwb3NlIGlzIHRoZSBob3QgYWRkL2RlbGV0ZSBvZiBleHBhbmRlcnMKKyAqKE11dGV4IExPQ0tFRCkKKyAqLworc3RhdGljIHZvaWQKK21wdHNhc19kaXNjb3Zlcnlfd29yayh2b2lkICogYXJnKQoreworCXN0cnVjdCBtcHRzYXNfZGlzY292ZXJ5X2V2ZW50ICpldiA9IGFyZzsKKwlNUFRfQURBUFRFUiAqaW9jID0gZXYtPmlvYzsKKworCW11dGV4X2xvY2soJmlvYy0+c2FzX2Rpc2NvdmVyeV9tdXRleCk7CisJX19tcHRzYXNfZGlzY292ZXJ5X3dvcmsoaW9jKTsKIAltdXRleF91bmxvY2soJmlvYy0+c2FzX2Rpc2NvdmVyeV9tdXRleCk7CisJa2ZyZWUoZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IG1wdHNhc19waHlpbmZvICoKLW1wdHNhc19maW5kX3BoeWluZm9fYnlfcGFyZW50KE1QVF9BREFQVEVSICppb2MsIHUxNiBwYXJlbnRfaGFuZGxlLCB1OCBwaHlfaWQpCittcHRzYXNfZmluZF9waHlpbmZvX2J5X3Nhc19hZGRyZXNzKE1QVF9BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcykKIHsKIAlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwb3J0X2luZm87Ci0Jc3RydWN0IG1wdHNhc19kZXZpbmZvIGRldmljZV9pbmZvOwogCXN0cnVjdCBtcHRzYXNfcGh5aW5mbyAqcGh5X2luZm8gPSBOVUxMOwotCWludCBpLCBlcnJvcjsKKwlpbnQgaTsKIAotCS8qCi0JICogUmV0cmlldmUgdGhlIHBhcmVudCBzYXNfYWRkcmVzcwotCSAqLwotCWVycm9yID0gbXB0c2FzX3Nhc19kZXZpY2VfcGcwKGlvYywgJmRldmljZV9pbmZvLAotCQkoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSA8PAotCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwKLQkJcGFyZW50X2hhbmRsZSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qCi0JICogVGhlIHBoeV9pbmZvIHN0cnVjdHVyZXMgYXJlIG5ldmVyIGRlYWxsb2NhdGVkIGR1cmluZyBsaWZldGltZSBvZgotCSAqIGEgaG9zdCwgc28gdGhlIGNvZGUgYmVsb3cgaXMgc2FmZSB3aXRob3V0IGFkZGl0aW9uYWwgcmVmY291bnRpbmcuCi0JICovCiAJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydF9pbmZvLCAmaW9jLT5zYXNfdG9wb2xvZ3ksIGxpc3QpIHsKIAkJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykgewotCQkJaWYgKHBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnkuc2FzX2FkZHJlc3MgPT0KLQkJCSAgICBkZXZpY2VfaW5mby5zYXNfYWRkcmVzcyAmJgotCQkJICAgIHBvcnRfaW5mby0+cGh5X2luZm9baV0ucGh5X2lkID09IHBoeV9pZCkgewotCQkJCXBoeV9pbmZvID0gJnBvcnRfaW5mby0+cGh5X2luZm9baV07Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5zYXNfYWRkcmVzcworCQkJICAgICE9IHNhc19hZGRyZXNzKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFtcHRzYXNfaXNfZW5kX2RldmljZSgKKwkJCQkmcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZCkpCisJCQkJY29udGludWU7CisJCQlwaHlfaW5mbyA9ICZwb3J0X2luZm8tPnBoeV9pbmZvW2ldOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7Ci0KIAlyZXR1cm4gcGh5X2luZm87CiB9CiAKQEAgLTE2MzcsMjEgKzIwNTcsMTkgQEAKIAlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvID0gTlVMTDsKIAlpbnQgaTsKIAotCS8qCi0JICogVGhlIHBoeV9pbmZvIHN0cnVjdHVyZXMgYXJlIG5ldmVyIGRlYWxsb2NhdGVkIGR1cmluZyBsaWZldGltZSBvZgotCSAqIGEgaG9zdCwgc28gdGhlIGNvZGUgYmVsb3cgaXMgc2FmZSB3aXRob3V0IGFkZGl0aW9uYWwgcmVmY291bnRpbmcuCi0JICovCiAJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydF9pbmZvLCAmaW9jLT5zYXNfdG9wb2xvZ3ksIGxpc3QpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykKLQkJCWlmIChtcHRzYXNfaXNfZW5kX2RldmljZSgmcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZCkpCi0JCQkJaWYgKHBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQuaWQgPT0gaWQpIHsKLQkJCQkJcGh5X2luZm8gPSAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKSB7CisJCQlpZiAocG9ydF9pbmZvLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5pZCAhPSBpZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghbXB0c2FzX2lzX2VuZF9kZXZpY2UoCisJCQkJJnBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQpKQorCQkJCWNvbnRpbnVlOworCQkJcGh5X2luZm8gPSAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXTsKKwkJCWJyZWFrOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwotCiAJcmV0dXJuIHBoeV9pbmZvOwogfQogCkBAIC0xNjU5LDcgKzIwNzcsNyBAQAogICogV29yayBxdWV1ZSB0aHJlYWQgdG8gY2xlYXIgdGhlIHBlcnNpdGVuY3kgdGFibGUKICAqLwogc3RhdGljIHZvaWQKLW1wdHNjc2loX3Nhc19wZXJzaXN0X2NsZWFyX3RhYmxlKHZvaWQgKiBhcmcpCittcHRzYXNfcGVyc2lzdF9jbGVhcl90YWJsZSh2b2lkICogYXJnKQogewogCU1QVF9BREFQVEVSICppb2MgPSAoTVBUX0FEQVBURVIgKilhcmc7CiAKQEAgLTE2ODAsNyArMjA5OCw2IEBACiAJCQltcHRzYXNfcmVwcm9iZV9sdW4pOwogfQogCi0KIC8qCiAgKiBXb3JrIHF1ZXVlIHRocmVhZCB0byBoYW5kbGUgU0FTIGhvdHBsdWcgZXZlbnRzCiAgKi8KQEAgLTE2OTEsMTQgKzIxMDgsMTcgQEAKIAlNUFRfQURBUFRFUiAqaW9jID0gZXYtPmlvYzsKIAlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvOwogCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKwlzdHJ1Y3Qgc2FzX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXN0cnVjdCBzY3NpX3RhcmdldCAqIHN0YXJnZXQ7CiAJc3RydWN0IHNhc19pZGVudGlmeSBpZGVudGlmeTsKIAljaGFyICpkcyA9IE5VTEw7CiAJc3RydWN0IG1wdHNhc19kZXZpbmZvIHNhc19kZXZpY2U7CiAJVmlydFRhcmdldCAqdnRhcmdldDsKKwlWaXJ0RGV2aWNlICp2ZGV2aWNlOworCiAKIAltdXRleF9sb2NrKCZpb2MtPnNhc19kaXNjb3ZlcnlfbXV0ZXgpOwotCiAJc3dpdGNoIChldi0+ZXZlbnRfdHlwZSkgewogCWNhc2UgTVBUU0FTX0RFTF9ERVZJQ0U6CiAKQEAgLTE3MDcsMjQgKzIxMjcsNTAgQEAKIAkJLyoKIAkJICogU2FuaXR5IGNoZWNrcywgZm9yIG5vbi1leGlzdGluZyBwaHlzIGFuZCByZW1vdGUgcnBoeXMuCiAJCSAqLwotCQlpZiAoIXBoeV9pbmZvKQorCQlpZiAoIXBoeV9pbmZvIHx8ICFwaHlfaW5mby0+cG9ydF9kZXRhaWxzKSB7CisJCQlkZmFpbHByaW50aygoTVlJT0Nfc19FUlJfRk1UCisJCQkJIiVzOiBleGl0IGF0IGxpbmU9JWRcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAgICAJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOwogCQkJYnJlYWs7Ci0JCWlmICghcGh5X2luZm8tPnJwaHkpCisJCX0KKwkJcnBoeSA9IG1wdHNhc19nZXRfcnBoeShwaHlfaW5mbyk7CisJCWlmICghcnBoeSkgeworCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCSIlczogZXhpdCBhdCBsaW5lPSVkXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgICAgCV9fRlVOQ1RJT05fXywgX19MSU5FX18pKTsKIAkJCWJyZWFrOwotCQlpZiAocGh5X2luZm8tPnN0YXJnZXQpIHsKLQkJCXZ0YXJnZXQgPSBwaHlfaW5mby0+c3RhcmdldC0+aG9zdGRhdGE7CisJCX0KKwkJcG9ydCA9IG1wdHNhc19nZXRfcG9ydChwaHlfaW5mbyk7CisJCWlmICghcG9ydCkgeworCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCSIlczogZXhpdCBhdCBsaW5lPSVkXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgICAgCV9fRlVOQ1RJT05fXywgX19MSU5FX18pKTsKKwkJCWJyZWFrOworCQl9CiAKLQkJCWlmICghdnRhcmdldCkKKwkJc3RhcmdldCA9IG1wdHNhc19nZXRfc3RhcmdldChwaHlfaW5mbyk7CisJCWlmIChzdGFyZ2V0KSB7CisJCQl2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CisKKwkJCWlmICghdnRhcmdldCkgeworCQkJCWRmYWlscHJpbnRrKChNWUlPQ19zX0VSUl9GTVQKKwkJCQkJIiVzOiBleGl0IGF0IGxpbmU9JWRcbiIsIGlvYy0+bmFtZSwKKwkJCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOwogCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKgogCQkJICogSGFuZGxpbmcgIFJBSUQgY29tcG9uZW50cwogCQkJICovCiAJCQlpZiAoZXYtPnBoeXNfZGlza19udW1fdmFsaWQpIHsKIAkJCQl2dGFyZ2V0LT50YXJnZXRfaWQgPSBldi0+cGh5c19kaXNrX251bTsKIAkJCQl2dGFyZ2V0LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVDsKLQkJCQltcHRzYXNfcmVwcm9iZV90YXJnZXQodnRhcmdldC0+c3RhcmdldCwgMSk7CisJCQkJbXB0c2FzX3JlcHJvYmVfdGFyZ2V0KHN0YXJnZXQsIDEpOwogCQkJCWJyZWFrOwogCQkJfQorCisJCQl2dGFyZ2V0LT5kZWxldGVkID0gMTsKKwkJCW1wdHNhc190YXJnZXRfcmVzZXQoaW9jLCB2dGFyZ2V0KTsKIAkJfQogCiAJCWlmIChwaHlfaW5mby0+YXR0YWNoZWQuZGV2aWNlX2luZm8gJiBNUElfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpCkBAIC0xNzM4LDEwICsyMTg0LDExIEBACiAJCSAgICAgICAicmVtb3ZpbmcgJXMgZGV2aWNlLCBjaGFubmVsICVkLCBpZCAlZCwgcGh5ICVkXG4iLAogCQkgICAgICAgaW9jLT5uYW1lLCBkcywgZXYtPmNoYW5uZWwsIGV2LT5pZCwgcGh5X2luZm8tPnBoeV9pZCk7CiAKLQkJc2FzX3JwaHlfZGVsZXRlKHBoeV9pbmZvLT5ycGh5KTsKLQkJbWVtc2V0KCZwaHlfaW5mby0+YXR0YWNoZWQsIDAsIHNpemVvZihzdHJ1Y3QgbXB0c2FzX2RldmluZm8pKTsKLQkJcGh5X2luZm8tPnJwaHkgPSBOVUxMOwotCQlwaHlfaW5mby0+c3RhcmdldCA9IE5VTEw7CisjaWZkZWYgTVBUX0RFQlVHX1NBU19XSURFCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBvcnQtPmRldiwgImRlbGV0ZVxuIik7CisjZW5kaWYKKwkJc2FzX3BvcnRfZGVsZXRlKHBvcnQpOworCQltcHRzYXNfcG9ydF9kZWxldGUocGh5X2luZm8tPnBvcnRfZGV0YWlscyk7CiAJCWJyZWFrOwogCWNhc2UgTVBUU0FTX0FERF9ERVZJQ0U6CiAKQEAgLTE3NTMsNTkgKzIyMDAsNjAgQEAKIAkJICovCiAJCWlmIChtcHRzYXNfc2FzX2RldmljZV9wZzAoaW9jLCAmc2FzX2RldmljZSwKIAkJICAgIChNUElfU0FTX0RFVklDRV9QR0FEX0ZPUk1fQlVTX1RBUkdFVF9JRCA8PAotCQkgICAgIE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9TSElGVCksIGV2LT5pZCkpCisJCSAgICAgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwgZXYtPmlkKSkgeworCQkJCWRmYWlscHJpbnRrKChNWUlPQ19zX0VSUl9GTVQKKwkJCQkJIiVzOiBleGl0IGF0IGxpbmU9JWRcbiIsIGlvYy0+bmFtZSwKKwkJCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOwogCQkJYnJlYWs7Ci0KLQkJcGh5X2luZm8gPSBtcHRzYXNfZmluZF9waHlpbmZvX2J5X3BhcmVudChpb2MsCi0JCQkJc2FzX2RldmljZS5oYW5kbGVfcGFyZW50LCBzYXNfZGV2aWNlLnBoeV9pZCk7Ci0KLQkJaWYgKCFwaHlfaW5mbykgewotCQkJdTMyIGhhbmRsZSA9IDB4RkZGRjsKLQotCQkJLyoKLQkJCSogSXRzIHBvc3NpYmxlIHdoZW4gYW4gZXhwYW5kZXIgaGFzIGJlZW4gaG90IGFkZGVkCi0JCQkqIGNvbnRhaW5pbmcgYXR0YWNoZWQgZGV2aWNlcywgdGhlIHNhcyBmaXJtd2FyZQotCQkJKiBtYXkgc2VuZCBhIFJDX0FEREVEIGV2ZW50IHByaW9yIHRvIHRoZQotCQkJKiBESVNDT1ZFUlkgU1RPUCBldmVudC4gSWYgdGhhdCBvY2N1cnMsIG91cgotCQkJKiB2aWV3IG9mIHRoZSB0b3BvbG9neSBpbiB0aGUgZHJpdmVyIGluIHJlc3BlY3QgdG8gdGhpcwotCQkJKiBleHBhbmRlciBtaWdodCBvZiBub3QgYmVlbiBzZXR1cCwgYW5kIHdlIGhpdCB0aGlzCi0JCQkqIGNvbmRpdGlvbi4KLQkJCSogVGhlcmVmb3JlLCB0aGlzIGNvZGUga2lja3Mgb2ZmIGRpc2NvdmVyeSB0bwotCQkJKiByZWZyZXNoIHRoZSBkYXRhLgotCQkJKiBUaGVuIGFnYWluLCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBwYXJlbnQgcGh5IGhhcwotCQkJKiBiZWVuIGNyZWF0ZWQuCi0JCQkqLwotCQkJaW9jLT5zYXNfZGlzY292ZXJ5X3J1bnRpbWU9MTsKLQkJCW1wdHNhc19kZWxldGVfZXhwYW5kZXJfcGh5cyhpb2MpOwotCQkJbXB0c2FzX3Byb2JlX2hiYV9waHlzKGlvYyk7Ci0JCQl3aGlsZSAoIW1wdHNhc19wcm9iZV9leHBhbmRlcl9waHlzKGlvYywgJmhhbmRsZSkpCi0JCQkJOwotCQkJaW9jLT5zYXNfZGlzY292ZXJ5X3J1bnRpbWU9MDsKLQotCQkJcGh5X2luZm8gPSBtcHRzYXNfZmluZF9waHlpbmZvX2J5X3BhcmVudChpb2MsCi0JCQkJc2FzX2RldmljZS5oYW5kbGVfcGFyZW50LCBzYXNfZGV2aWNlLnBoeV9pZCk7Ci0JCQlpZiAoIXBoeV9pbmZvKQotCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHBoeV9pbmZvLT5zdGFyZ2V0KSB7Ci0JCQl2dGFyZ2V0ID0gcGh5X2luZm8tPnN0YXJnZXQtPmhvc3RkYXRhOworCQlzc2xlZXAoMik7CisJCV9fbXB0c2FzX2Rpc2NvdmVyeV93b3JrKGlvYyk7CiAKLQkJCWlmICghdnRhcmdldCkKKwkJcGh5X2luZm8gPSBtcHRzYXNfZmluZF9waHlpbmZvX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkJCQlzYXNfZGV2aWNlLnNhc19hZGRyZXNzKTsKKworCQlpZiAoIXBoeV9pbmZvIHx8ICFwaHlfaW5mby0+cG9ydF9kZXRhaWxzKSB7CisJCQlkZmFpbHByaW50aygoTVlJT0Nfc19FUlJfRk1UCisJCQkJIiVzOiBleGl0IGF0IGxpbmU9JWRcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAgICAJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOworCQkJYnJlYWs7CisJCX0KKworCQlzdGFyZ2V0ID0gbXB0c2FzX2dldF9zdGFyZ2V0KHBoeV9pbmZvKTsKKwkJaWYgKHN0YXJnZXQpIHsKKwkJCXZ0YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKworCQkJaWYgKCF2dGFyZ2V0KSB7CisJCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCQkiJXM6IGV4aXQgYXQgbGluZT0lZFxuIiwgaW9jLT5uYW1lLAorCQkJCSAgICAgICAJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOwogCQkJCWJyZWFrOworCQkJfQogCQkJLyoKIAkJCSAqIEhhbmRsaW5nICBSQUlEIGNvbXBvbmVudHMKIAkJCSAqLwogCQkJaWYgKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQpIHsKIAkJCQl2dGFyZ2V0LT50ZmxhZ3MgJj0gfk1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CiAJCQkJdnRhcmdldC0+dGFyZ2V0X2lkID0gZXYtPmlkOwotCQkJCW1wdHNhc19yZXByb2JlX3RhcmdldChwaHlfaW5mby0+c3RhcmdldCwgMCk7CisJCQkJbXB0c2FzX3JlcHJvYmVfdGFyZ2V0KHN0YXJnZXQsIDApOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAocGh5X2luZm8tPnJwaHkpCisJCWlmIChtcHRzYXNfZ2V0X3JwaHkocGh5X2luZm8pKSB7CisJCQlkZmFpbHByaW50aygoTVlJT0Nfc19FUlJfRk1UCisJCQkJIiVzOiBleGl0IGF0IGxpbmU9JWRcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAgICAJX19GVU5DVElPTl9fLCBfX0xJTkVfXykpOwogCQkJYnJlYWs7CisJCX0KKwkJcG9ydCA9IG1wdHNhc19nZXRfcG9ydChwaHlfaW5mbyk7CisJCWlmICghcG9ydCkgeworCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCSIlczogZXhpdCBhdCBsaW5lPSVkXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgICAgCV9fRlVOQ1RJT05fXywgX19MSU5FX18pKTsKKwkJCWJyZWFrOworCQl9CiAKIAkJbWVtY3B5KCZwaHlfaW5mby0+YXR0YWNoZWQsICZzYXNfZGV2aWNlLAogCQkgICAgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwpAQCAtMTgyMiwyOCArMjI3MCwyMyBAQAogCQkgICAgICAgaW9jLT5uYW1lLCBkcywgZXYtPmNoYW5uZWwsIGV2LT5pZCwgZXYtPnBoeV9pZCk7CiAKIAkJbXB0c2FzX3BhcnNlX2RldmljZV9pbmZvKCZpZGVudGlmeSwgJnBoeV9pbmZvLT5hdHRhY2hlZCk7Ci0JCXN3aXRjaCAoaWRlbnRpZnkuZGV2aWNlX3R5cGUpIHsKLQkJY2FzZSBTQVNfRU5EX0RFVklDRToKLQkJCXJwaHkgPSBzYXNfZW5kX2RldmljZV9hbGxvYyhwaHlfaW5mby0+cGh5KTsKLQkJCWJyZWFrOwotCQljYXNlIFNBU19FREdFX0VYUEFOREVSX0RFVklDRToKLQkJY2FzZSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRToKLQkJCXJwaHkgPSBzYXNfZXhwYW5kZXJfYWxsb2MocGh5X2luZm8tPnBoeSwgaWRlbnRpZnkuZGV2aWNlX3R5cGUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlycGh5ID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghcnBoeSkKKwkJcnBoeSA9IHNhc19lbmRfZGV2aWNlX2FsbG9jKHBvcnQpOworCQlpZiAoIXJwaHkpIHsKKwkJCWRmYWlscHJpbnRrKChNWUlPQ19zX0VSUl9GTVQKKwkJCQkiJXM6IGV4aXQgYXQgbGluZT0lZFxuIiwgaW9jLT5uYW1lLAorCQkJICAgICAgIAlfX0ZVTkNUSU9OX18sIF9fTElORV9fKSk7CiAJCQlicmVhazsgLyogbm9uLWZhdGFsOiBhbiBycGh5IGNhbiBiZSBhZGRlZCBsYXRlciAqLworCQl9CiAKIAkJcnBoeS0+aWRlbnRpZnkgPSBpZGVudGlmeTsKIAkJaWYgKHNhc19ycGh5X2FkZChycGh5KSkgeworCQkJZGZhaWxwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVAorCQkJCSIlczogZXhpdCBhdCBsaW5lPSVkXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgICAgCV9fRlVOQ1RJT05fXywgX19MSU5FX18pKTsKIAkJCXNhc19ycGh5X2ZyZWUocnBoeSk7CiAJCQlicmVhazsKIAkJfQotCi0JCXBoeV9pbmZvLT5ycGh5ID0gcnBoeTsKKwkJbXB0c2FzX3NldF9ycGh5KHBoeV9pbmZvLCBycGh5KTsKIAkJYnJlYWs7CiAJY2FzZSBNUFRTQVNfQUREX1JBSUQ6CiAJCXNkZXYgPSBzY3NpX2RldmljZV9sb29rdXAoCkBAIC0xODc1LDYgKzIzMTgsOSBAQAogCQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVAogCQkgICAgICAgInJlbW92aW5nIHJhaWQgdm9sdW1lLCBjaGFubmVsICVkLCBpZCAlZFxuIiwKIAkJICAgICAgIGlvYy0+bmFtZSwgaW9jLT5udW1fcG9ydHMsIGV2LT5pZCk7CisJCXZkZXZpY2UgPSBzZGV2LT5ob3N0ZGF0YTsKKwkJdmRldmljZS0+dnRhcmdldC0+ZGVsZXRlZCA9IDE7CisJCW1wdHNhc190YXJnZXRfcmVzZXQoaW9jLCB2ZGV2aWNlLT52dGFyZ2V0KTsKIAkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCQlzY3NpX2RldmljZV9wdXQoc2Rldik7CiAJCW1wdF9maW5kSW1Wb2x1bWVzKGlvYyk7CkBAIC0xODg0LDEyICsyMzMwLDEzIEBACiAJCWJyZWFrOwogCX0KIAotCWtmcmVlKGV2KTsKIAltdXRleF91bmxvY2soJmlvYy0+c2FzX2Rpc2NvdmVyeV9tdXRleCk7CisJa2ZyZWUoZXYpOworCiB9CiAKIHN0YXRpYyB2b2lkCi1tcHRzY3NpaF9zZW5kX3Nhc19ldmVudChNUFRfQURBUFRFUiAqaW9jLAorbXB0c2FzX3NlbmRfc2FzX2V2ZW50KE1QVF9BREFQVEVSICppb2MsCiAJCUVWRU5UX0RBVEFfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFICpzYXNfZXZlbnRfZGF0YSkKIHsKIAlzdHJ1Y3QgbXB0c2FzX2hvdHBsdWdfZXZlbnQgKmV2OwpAQCAtMTkwNSw3ICsyMzUyLDcgQEAKIAlzd2l0Y2ggKHNhc19ldmVudF9kYXRhLT5SZWFzb25Db2RlKSB7CiAJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FEREVEOgogCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT1RfUkVTUE9ORElORzoKLQkJZXYgPSBrbWFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKKwkJZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFldikgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXB0c2FzOiBsb3N0IGhvdHBsdWcgZXZlbnRcbiIpOwogCQkJYnJlYWs7CkBAIC0xOTM1LDEwICsyMzgyLDkgQEAKIAkvKgogCSAqIFBlcnNpc3RlbnQgdGFibGUgaXMgZnVsbC4KIAkgKi8KLQkJSU5JVF9XT1JLKCZpb2MtPm1wdHNjc2loX3BlcnNpc3RUYXNrLAotCQkgICAgbXB0c2NzaWhfc2FzX3BlcnNpc3RfY2xlYXJfdGFibGUsCi0JCSAgICAodm9pZCAqKWlvYyk7Ci0JCXNjaGVkdWxlX3dvcmsoJmlvYy0+bXB0c2NzaWhfcGVyc2lzdFRhc2spOworCQlJTklUX1dPUksoJmlvYy0+c2FzX3BlcnNpc3RfdGFzaywKKwkJICAgIG1wdHNhc19wZXJzaXN0X2NsZWFyX3RhYmxlLCAodm9pZCAqKWlvYyk7CisJCXNjaGVkdWxlX3dvcmsoJmlvYy0+c2FzX3BlcnNpc3RfdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBOgogCS8qIFRPRE8gKi8KQEAgLTE5NTAsNyArMjM5Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1tcHRzY3NpaF9zZW5kX3JhaWRfZXZlbnQoTVBUX0FEQVBURVIgKmlvYywKK21wdHNhc19zZW5kX3JhaWRfZXZlbnQoTVBUX0FEQVBURVIgKmlvYywKIAkJRVZFTlRfREFUQV9SQUlEICpyYWlkX2V2ZW50X2RhdGEpCiB7CiAJc3RydWN0IG1wdHNhc19ob3RwbHVnX2V2ZW50ICpldjsKQEAgLTE5NjAsMTMgKzI0MDYsMTIgQEAKIAlpZiAoaW9jLT5idXNfdHlwZSAhPSBTQVMpCiAJCXJldHVybjsKIAotCWV2ID0ga21hbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7CisJZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWV2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1wdHNhczogbG9zdCBob3RwbHVnIGV2ZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCW1lbXNldChldiwwLHNpemVvZihzdHJ1Y3QgbXB0c2FzX2hvdHBsdWdfZXZlbnQpKTsKIAlJTklUX1dPUksoJmV2LT53b3JrLCBtcHRzYXNfaG90cGx1Z193b3JrLCBldik7CiAJZXYtPmlvYyA9IGlvYzsKIAlldi0+aWQgPSByYWlkX2V2ZW50X2RhdGEtPlZvbHVtZUlEOwpAQCAtMjAyOCw3ICsyNDczLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1wdHNjc2loX3NlbmRfZGlzY292ZXJ5KE1QVF9BREFQVEVSICppb2MsCittcHRzYXNfc2VuZF9kaXNjb3ZlcnlfZXZlbnQoTVBUX0FEQVBURVIgKmlvYywKIAlFVkVOVF9EQVRBX1NBU19ESVNDT1ZFUlkgKmRpc2NvdmVyeV9kYXRhKQogewogCXN0cnVjdCBtcHRzYXNfZGlzY292ZXJ5X2V2ZW50ICpldjsKQEAgLTIwNDMsMTEgKzI0ODgsMTAgQEAKIAlpZiAoZGlzY292ZXJ5X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykKIAkJcmV0dXJuOwogCi0JZXYgPSBrbWFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKKwlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldiksIEdGUF9BVE9NSUMpOwogCWlmICghZXYpCiAJCXJldHVybjsKLQltZW1zZXQoZXYsMCxzaXplb2Yoc3RydWN0IG1wdHNhc19kaXNjb3ZlcnlfZXZlbnQpKTsKLQlJTklUX1dPUksoJmV2LT53b3JrLCBtcHRzY3NpaF9kaXNjb3Zlcnlfd29yaywgZXYpOworCUlOSVRfV09SSygmZXYtPndvcmssIG1wdHNhc19kaXNjb3Zlcnlfd29yaywgZXYpOwogCWV2LT5pb2MgPSBpb2M7CiAJc2NoZWR1bGVfd29yaygmZXYtPndvcmspOwogfTsKQEAgLTIwNzUsMjEgKzI1MTksMjEgQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE1QSV9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0U6Ci0JCW1wdHNjc2loX3NlbmRfc2FzX2V2ZW50KGlvYywKKwkJbXB0c2FzX3NlbmRfc2FzX2V2ZW50KGlvYywKIAkJCShFVkVOVF9EQVRBX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRSAqKXJlcGx5LT5EYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBNUElfRVZFTlRfSU5URUdSQVRFRF9SQUlEOgotCQltcHRzY3NpaF9zZW5kX3JhaWRfZXZlbnQoaW9jLAorCQltcHRzYXNfc2VuZF9yYWlkX2V2ZW50KGlvYywKIAkJCShFVkVOVF9EQVRBX1JBSUQgKilyZXBseS0+RGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1BFUlNJU1RFTlRfVEFCTEVfRlVMTDoKLQkJSU5JVF9XT1JLKCZpb2MtPm1wdHNjc2loX3BlcnNpc3RUYXNrLAotCQkgICAgbXB0c2NzaWhfc2FzX3BlcnNpc3RfY2xlYXJfdGFibGUsCisJCUlOSVRfV09SSygmaW9jLT5zYXNfcGVyc2lzdF90YXNrLAorCQkgICAgbXB0c2FzX3BlcnNpc3RfY2xlYXJfdGFibGUsCiAJCSAgICAodm9pZCAqKWlvYyk7Ci0JCXNjaGVkdWxlX3dvcmsoJmlvYy0+bXB0c2NzaWhfcGVyc2lzdFRhc2spOworCQlzY2hlZHVsZV93b3JrKCZpb2MtPnNhc19wZXJzaXN0X3Rhc2spOwogCQlicmVhazsKIAkgY2FzZSBNUElfRVZFTlRfU0FTX0RJU0NPVkVSWToKLQkJbXB0c2NzaWhfc2VuZF9kaXNjb3ZlcnkoaW9jLAorCQltcHRzYXNfc2VuZF9kaXNjb3ZlcnlfZXZlbnQoaW9jLAogCQkJKEVWRU5UX0RBVEFfU0FTX0RJU0NPVkVSWSAqKXJlcGx5LT5EYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIzMDgsNyArMjc1Miw3IEBACiAKIAlyZXR1cm4gMDsKIAotb3V0X21wdHNhc19wcm9iZToKKyBvdXRfbXB0c2FzX3Byb2JlOgogCiAJbXB0c2NzaWhfcmVtb3ZlKHBkZXYpOwogCXJldHVybiBlcnJvcjsKQEAgLTIzMTgsNiArMjc2Miw3IEBACiB7CiAJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwLCAqbjsKKwlpbnQgaTsKIAogCWlvYy0+c2FzX2Rpc2NvdmVyeV9pZ25vcmVfZXZlbnRzPTE7CiAJc2FzX3JlbW92ZV9ob3N0KGlvYy0+c2gpOwpAQCAtMjMyNSw4ICsyNzcwLDkgQEAKIAltdXRleF9sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZpb2MtPnNhc190b3BvbG9neSwgbGlzdCkgewogCQlsaXN0X2RlbCgmcC0+bGlzdCk7Ci0JCWlmIChwLT5waHlfaW5mbykKLQkJCWtmcmVlKHAtPnBoeV9pbmZvKTsKKwkJZm9yIChpID0gMCA7IGkgPCBwLT5udW1fcGh5cyA7IGkrKykKKwkJCW1wdHNhc19wb3J0X2RlbGV0ZShwLT5waHlfaW5mb1tpXS5wb3J0X2RldGFpbHMpOworCQlrZnJlZShwLT5waHlfaW5mbyk7CiAJCWtmcmVlKHApOwogCX0KIAltdXRleF91bmxvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKQEAgLTIzMzUsMTcgKzI3ODEsMTUgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1wdHNhc19wY2lfdGFibGVbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0LAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIE1QSV9NQU5VRkFDVFBBR0VfREVWSURfU0FTMTA2NCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjYsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY4LAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2OCwKKwl7IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBNUElfTUFOVUZBQ1RQQUdFX0RFVklEX1NBUzEwNjRFLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NEUsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDY4RSwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjZFLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2OEUsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJRF9TQVMxMDc4LAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJezB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggMzIwMWRlMC4uMGExZmY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC03NzUsOSArNzc1LDkgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXB0c3BpX3BjaV90YWJsZVtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMzAsCisJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgTVBJX01BTlVGQUNUUEFHRV9ERVZJRF81M0MxMDMwLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfMTAzMF81M0MxMDM1LAorCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIE1QSV9NQU5VRkFDVFBBR0VfREVWSURfNTNDMTAzNSwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXswfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGVidWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGVidWcuYwppbmRleCA1YTZjY2E4Li44YWJlNDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2RlYnVnLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZWJ1Zy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggN2Q0YzU0OS4uMWRkYzJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC0xMDg5LDcgKzEwODksNiBAQAogCWdkID0gaTJvX2Jsa19kZXYtPmdkOwogCWdkLT5maXJzdF9taW5vciA9IHVuaXQgPDwgNDsKIAlzcHJpbnRmKGdkLT5kaXNrX25hbWUsICJpMm8vaGQlYyIsICdhJyArIHVuaXQpOwotCXNwcmludGYoZ2QtPmRldmZzX25hbWUsICJpMm8vaGQlYyIsICdhJyArIHVuaXQpOwogCWdkLT5kcml2ZXJmc19kZXYgPSAmaTJvX2Rldi0+ZGV2aWNlOwogCiAJLyogc2V0dXAgcmVxdWVzdCBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKaW5kZXggYzc0ZTU0Ni4uMzMwNWMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCkBAIC02ODMsOSArNjgzLDEwIEBACiAJCQljLT5tZW1fYWxsb2MgPSAxOwogCQkJc2ItPmN1cnJlbnRfbWVtX3NpemUgPSAxICsgcmVzLT5lbmQgLSByZXMtPnN0YXJ0OwogCQkJc2ItPmN1cnJlbnRfbWVtX2Jhc2UgPSByZXMtPnN0YXJ0OwotCQkJb3NtX2luZm8oIiVzOiBhbGxvY2F0ZWQgJWxkIGJ5dGVzIG9mIFBDSSBtZW1vcnkgYXQgIgotCQkJCSAiMHglMDhsWC5cbiIsIGMtPm5hbWUsCi0JCQkJIDEgKyByZXMtPmVuZCAtIHJlcy0+c3RhcnQsIHJlcy0+c3RhcnQpOworCQkJb3NtX2luZm8oIiVzOiBhbGxvY2F0ZWQgJWxsdSBieXRlcyBvZiBQQ0kgbWVtb3J5IGF0ICIKKwkJCQkiMHglMDE2bGxYLlxuIiwgYy0+bmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSgxICsgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQpOwogCQl9CiAJfQogCkBAIC03MDQsOSArNzA1LDEwIEBACiAJCQljLT5pb19hbGxvYyA9IDE7CiAJCQlzYi0+Y3VycmVudF9pb19zaXplID0gMSArIHJlcy0+ZW5kIC0gcmVzLT5zdGFydDsKIAkJCXNiLT5jdXJyZW50X21lbV9iYXNlID0gcmVzLT5zdGFydDsKLQkJCW9zbV9pbmZvKCIlczogYWxsb2NhdGVkICVsZCBieXRlcyBvZiBQQ0kgSS9PIGF0IDB4JTA4bFgiCi0JCQkJICIuXG4iLCBjLT5uYW1lLCAxICsgcmVzLT5lbmQgLSByZXMtPnN0YXJ0LAotCQkJCSByZXMtPnN0YXJ0KTsKKwkJCW9zbV9pbmZvKCIlczogYWxsb2NhdGVkICVsbHUgYnl0ZXMgb2YgUENJIEkvTyBhdCAiCisJCQkJIjB4JTAxNmxsWC5cbiIsIGMtPm5hbWUsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoMSArIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vcGNpLmMKaW5kZXggNGYxNTE1Yy4uMWI1ODQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAl3cml0ZWwoMHhmZmZmZmZmZiwgYy0+aXJxX21hc2spOwogCiAJaWYgKHBkZXYtPmlycSkgewotCQlyYyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaTJvX3BjaV9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCQlyYyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaTJvX3BjaV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSBjLT5uYW1lLCBjKTsKIAkJaWYgKHJjIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCAlZC4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IGM4NDI2YTkuLjYzMmJjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgTm90ZSB0aGF0IGFsbCBsb2NrcyBhcmUgcHJpdmF0ZSB0byB0aGlzIGZpbGUuICBOb3RoaW5nIGVsc2UgbWF5CiAgKiAgdG91Y2ggdGhlbS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTUwOSw3ICs1MDgsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHVjYi0+aXJxLCB1Y2IxeDAwX2lycSwgU0FfVFJJR0dFUl9SSVNJTkcsCisJcmV0ID0gcmVxdWVzdF9pcnEodWNiLT5pcnEsIHVjYjF4MDBfaXJxLCBJUlFGX1RSSUdHRVJfUklTSU5HLAogCQkJICAiVUNCMXgwMCIsIHVjYik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgInVjYjF4MDA6IHVuYWJsZSB0byBncmFiIGlycSVkOiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwppbmRleCA3OWZkMDYyLi4wMjc3NjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBwaW4gc2hvdWxkIHByb3ZpZGUgcHVsc2VzIGV2ZW4gd2hlbiB0aGUgTENEIGlzIGJsYW5rZWQsIG90aGVyd2lzZQogICogYSBwZW4gdG91Y2ggbmVlZGVkIHRvIHVuYmxhbmsgdGhlIExDRCB3aWxsIG5ldmVyIGJlIHJlYWQuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbS5oCmluZGV4IDZhYmE0MTkuLjYzNGQ1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL21vZHVsZS5jCmluZGV4IDk3MDZjYzEuLjJmM2JkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9tb2R1bGUuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJCWdvdG8gZXJyb3JfaW9yZW1hcDsKIAl9CiAKLQlyZXN1bHQgPSByZXF1ZXN0X2lycShzcC0+aXJxLCBpYm1hc21faW50ZXJydXB0X2hhbmRsZXIsIFNBX1NISVJRLCBzcC0+ZGV2bmFtZSwgKHZvaWQqKXNwKTsKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShzcC0+aXJxLCBpYm1hc21faW50ZXJydXB0X2hhbmRsZXIsIElSUUZfU0hBUkVELCBzcC0+ZGV2bmFtZSwgKHZvaWQqKXNwKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoc3AtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7CiAJCWdvdG8gZXJyb3JfcmVxdWVzdF9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9hdDkxX21jaS5jIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwppbmRleCAzMjI4NTE2Li42Yjc2MzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9hdDkxX21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKQEAgLTUzLDcgKzUzLDYgQEAKICAgICAgR2V0cyB0aGUgc3RhdHVzIG9mIHRoZSB3cml0ZSBwcm90ZWN0IHBpbiwgaWYgYXZhaWxhYmxlLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtODUxLDcgKzg1MCw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgTUNJIGludGVycnVwdAogCSAqLwotCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfTUNJLCBhdDkxX21jaV9pcnEsIFNBX1NISVJRLCBEUklWRVJfTkFNRSwgaG9zdCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MV9JRF9NQ0ksIGF0OTFfbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBob3N0KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgTUNJIGludGVycnVwdFxuIik7CiAJCWNsa19kaXNhYmxlKG1jaV9jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvYXUxeG1tYy5jIGIvZHJpdmVycy9tbWMvYXUxeG1tYy5jCmluZGV4IDVkYzRiZWUuLmZiNjA2MTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9hdTF4bW1jLmMKKysrIGIvZHJpdmVycy9tbWMvYXUxeG1tYy5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiBTbyB3ZSB1c2UgdGhlIHRpbWVyIHRvIGNoZWNrIHRoZSBzdGF0dXMgbWFudWFsbHkuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTg4Nyw3ICs4ODYsNyBAQAogCWludCBpLCByZXQgPSAwOwogCiAJLyogVEhlIGludGVycnVwdCBpcyBzaGFyZWQgYW1vbmcgYWxsIGNvbnRyb2xsZXJzICovCi0JcmV0ID0gcmVxdWVzdF9pcnEoQVUxMTAwX1NEX0lSUSwgYXUxeG1tY19pcnEsIFNBX0lOVEVSUlVQVCwgIk1NQyIsIDApOworCXJldCA9IHJlcXVlc3RfaXJxKEFVMTEwMF9TRF9JUlEsIGF1MXhtbWNfaXJxLCBJUlFGX0RJU0FCTEVELCAiTU1DIiwgMCk7CiAKIAlpZiAocmV0KSB7CiAJCXByaW50ayhEUklWRVJfTkFNRSAiRVJST1I6IENvdWxkbid0IGdldCBpbnQgJWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaW14bW1jLmMgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwppbmRleCA1YzYyZjRlLi43Y2E5ZTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9pbXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwpAQCAtMjUsNyArMjUsNiBAQAogICogICAgICAgICAgICAgZGVmaWNpZW5jaWVzCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCiAjZGVmaW5lIERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWMuYyBiL2RyaXZlcnMvbW1jL21tYy5jCmluZGV4IDYyMDFmMzAuLjMzNTI1YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL21tYy5jCkBAIC05LDcgKzksNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMTI5LDcgKzEyOCw3IEBACiAKIGludCBtbWNfd2FpdF9mb3JfcmVxKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRlKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0ZSk7CiAKIAltcnEtPmRvbmVfZGF0YSA9ICZjb21wbGV0ZTsKIAltcnEtPmRvbmUgPSBtbWNfd2FpdF9kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9tbWNfYmxvY2suYwppbmRleCA1ODc0NThiLi4xMTVjYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNfYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9tbWNfYmxvY2suYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CkBAIC00MDksNyArNDA4LDYgQEAKIAkgKi8KIAogCXNwcmludGYobWQtPmRpc2stPmRpc2tfbmFtZSwgIm1tY2JsayVkIiwgZGV2aWR4KTsKLQlzcHJpbnRmKG1kLT5kaXNrLT5kZXZmc19uYW1lLCAibW1jL2JsayVkIiwgZGV2aWR4KTsKIAogCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKG1kLT5xdWV1ZS5xdWV1ZSwgMSA8PCBtZC0+YmxvY2tfYml0cyk7CiAKQEAgLTU1NSw3ICs1NTMsNiBAQAogCWlmIChtYWpvciA9PSAwKQogCQltYWpvciA9IHJlczsKIAotCWRldmZzX21rX2RpcigibW1jIik7CiAJcmV0dXJuIG1tY19yZWdpc3Rlcl9kcml2ZXIoJm1tY19kcml2ZXIpOwogCiAgb3V0OgpAQCAtNTY1LDcgKzU2Miw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbW1jX2Jsa19leGl0KHZvaWQpCiB7CiAJbW1jX3VucmVnaXN0ZXJfZHJpdmVyKCZtbWNfZHJpdmVyKTsKLQlkZXZmc19yZW1vdmUoIm1tYyIpOwogCXVucmVnaXN0ZXJfYmxrZGV2KG1ham9yLCAibW1jIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY2kuYyBiL2RyaXZlcnMvbW1jL21tY2kuYwppbmRleCBkYThlNGQ3Li4xODg2NTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jaS5jCkBAIC03LDcgKzcsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC01MzIsMTEgKzUzMSwxMSBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0sxKTsKIAl3cml0ZWwoMHhmZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMF0sIG1tY2lfaXJxLCBTQV9TSElSUSwgRFJJVkVSX05BTUUgIiAoY21kKSIsIGhvc3QpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBtbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FICIgKGNtZCkiLCBob3N0KTsKIAlpZiAocmV0KQogCQlnb3RvIHVubWFwOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMV0sIG1tY2lfcGlvX2lycSwgU0FfU0hJUlEsIERSSVZFUl9OQU1FICIgKHBpbykiLCBob3N0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycVsxXSwgbW1jaV9waW9faXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUgIiAocGlvKSIsIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gaXJxMF9mcmVlOwogCkBAIC01NDYsOSArNTQ1LDkgQEAKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1NQ0kgcmV2ICV4IGNmZyAlMDJ4IGF0IDB4JTA4bHggaXJxICVkLCVkXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBNTUNJIHJldiAleCBjZmcgJTAyeCBhdCAweCUwMTZsbHggaXJxICVkLCVkXG4iLAogCQltbWNfaG9zdG5hbWUobW1jKSwgYW1iYV9yZXYoZGV2KSwgYW1iYV9jb25maWcoZGV2KSwKLQkJZGV2LT5yZXMuc3RhcnQsIGRldi0+aXJxWzBdLCBkZXYtPmlycVsxXSk7CisJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXMuc3RhcnQsIGRldi0+aXJxWzBdLCBkZXYtPmlycVsxXSk7CiAKIAlpbml0X3RpbWVyKCZob3N0LT50aW1lcik7CiAJaG9zdC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9vbWFwLmMgYi9kcml2ZXJzL21tYy9vbWFwLmMKaW5kZXggYzI1MjQ0Yi4uZGRmMDZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL29tYXAuYwpAQCAtMTEsNyArMTEsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjEsNiArNjAsNyBAQAogCXVuc2lnbmVkIGNoYXIJCWlkOyAvKiAxNnh4IGNoaXBzIGhhdmUgMiBNTUMgYmxvY2tzICovCiAJc3RydWN0IGNsayAqCQlpY2xrOwogCXN0cnVjdCBjbGsgKgkJZmNsazsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKIAlpbnQJCQlpcnE7CiAJdW5zaWduZWQgY2hhcgkJYnVzX21vZGU7CkBAIC0zNDAsOCArMzQwLDYgQEAKIG1tY19vbWFwX3hmZXJfZGF0YShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgaW50IHdyaXRlKQogewogCWludCBuOwotCXZvaWQgX19pb21lbSAqcmVnOwotCXUxNiAqcDsKIAogCWlmIChob3N0LT5idWZmZXJfYnl0ZXNfbGVmdCA9PSAwKSB7CiAJCWhvc3QtPnNnX2lkeCsrOwpAQCAtNjU4LDEyICs2NTYsMTIgQEAKIAlzdHJ1Y3QgbW1jX2RhdGEgKm1tY2RhdCA9IGhvc3QtPmRhdGE7CiAKIAlpZiAodW5saWtlbHkoaG9zdC0+ZG1hX2NoIDwgMCkpIHsKLQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJETUEgY2FsbGJhY2sgd2hpbGUgRE1BIG5vdAotCQkJCWVuYWJsZWRcbiIpOworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCSJETUEgY2FsbGJhY2sgd2hpbGUgRE1BIG5vdCBlbmFibGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBGSVhNRTogV2UgcmVhbGx5IHNob3VsZCBkbyBzb21ldGhpbmcgdG8gX2hhbmRsZV8gdGhlIGVycm9ycyAqLwotCWlmIChjaF9zdGF0dXMgJiBPTUFQX0RNQV9UT1VUX0lSUSkgeworCWlmIChjaF9zdGF0dXMgJiBPTUFQMV9ETUFfVE9VVF9JUlEpIHsKIAkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksIkRNQSB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTk3MywyMCArOTcxLDIwIEBACiAJc3RydWN0IG9tYXBfbW1jX2NvbmYgKm1pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgaXJxOwogCQotCWlmIChwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApIHx8Ci0JCQlwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtbWNfb21hcF9wcm9iZTogaW52YWxpZCByZXNvdXJjZSB0eXBlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFyIHx8IGlycSA8IDApCisJCXJldHVybiAtRU5YSU87CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKLQkJCQlwZGV2LT5uYW1lKSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJCSAgICAgICBwZGV2LT5uYW1lKTsKKwlpZiAoIXIpCiAJCXJldHVybiAtRUJVU1k7Ci0JfQogCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBtbWNfb21hcF9ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpIHsKQEAgLTEwMDMsNiArMTAwMSw4IEBACiAJaG9zdC0+ZG1hX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaG9zdDsKIAogCWhvc3QtPmlkID0gcGRldi0+aWQ7CisJaG9zdC0+cmVzID0gcjsKKwlob3N0LT5pcnEgPSBpcnE7CiAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJaG9zdC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY19pY2siKTsKQEAgLTEwMzIsMTMgKzEwMzIsOSBAQAogCWhvc3QtPmRtYV9jaCA9IC0xOwogCiAJaG9zdC0+aXJxID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7Ci0JaG9zdC0+YmFzZSA9IGlvcmVtYXAocGRldi0+cmVzLnN0YXJ0LCBTWl80Syk7Ci0JaWYgKCFob3N0LT5iYXNlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KKwlob3N0LT5iYXNlID0gKHZvaWQgX19pb21lbSopSU9fQUREUkVTUyhyLT5zdGFydCk7CiAKLQkgaWYgKG1pbmZvLT53aXJlNCkKKwlpZiAobWluZm8tPndpcmU0KQogCQkgbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAogCW1tYy0+b3BzID0gJm1tY19vbWFwX29wczsKQEAgLTEwNTcsOCArMTA1Myw4IEBACiAKIAlpZiAoaG9zdC0+cG93ZXJfcGluID49IDApIHsKIAkJaWYgKChyZXQgPSBvbWFwX3JlcXVlc3RfZ3Bpbyhob3N0LT5wb3dlcl9waW4pKSAhPSAwKSB7Ci0JCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVuYWJsZSB0byBnZXQgR1BJTwotCQkJCQlwaW4gZm9yIE1NQyBwb3dlclxuIik7CisJCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJCQkiVW5hYmxlIHRvIGdldCBHUElPIHBpbiBmb3IgTU1DIHBvd2VyXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGhvc3QtPnBvd2VyX3BpbiwgMCk7CkBAIC0xMDg2LDcgKzEwODIsNyBAQAogCiAJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGhvc3QtPnN3aXRjaF9waW4sIDEpOwogCQlyZXQgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGhvc3QtPnN3aXRjaF9waW4pLAotCQkJCSAgbW1jX29tYXBfc3dpdGNoX2lycSwgU0FfVFJJR0dFUl9SSVNJTkcsIERSSVZFUl9OQU1FLCBob3N0KTsKKwkJCQkgIG1tY19vbWFwX3N3aXRjaF9pcnEsIElSUUZfVFJJR0dFUl9SSVNJTkcsIERSSVZFUl9OQU1FLCBob3N0KTsKIAkJaWYgKHJldCkgewogCQkJZGV2X3dhcm4obW1jX2Rldihob3N0LT5tbWMpLCAiVW5hYmxlIHRvIGdldCBJUlEgZm9yIE1NQyBjb3ZlciBzd2l0Y2hcbiIpOwogCQkJb21hcF9mcmVlX2dwaW8oaG9zdC0+c3dpdGNoX3Bpbik7CkBAIC0xMTAwLDcgKzEwOTYsNyBAQAogCQkJCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY292ZXJfc3dpdGNoKTsKIAkJfQogCQlpZiAocmV0KSB7Ci0JCQlkZXZfd2FuKG1tY19kZXYoaG9zdC0+bW1jKSwgIlVuYWJsZSB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlc1xuIik7CisJCQlkZXZfd2FybihtbWNfZGV2KGhvc3QtPm1tYyksICJVbmFibGUgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXNcbiIpOwogCQkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShob3N0LT5zd2l0Y2hfcGluKSwgaG9zdCk7CiAJCQlvbWFwX2ZyZWVfZ3Bpbyhob3N0LT5zd2l0Y2hfcGluKTsKIAkJCWhvc3QtPnN3aXRjaF9waW4gPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKaW5kZXggYjQ5MzY4Zi4uZWYzNTA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqCTEgYW5kIDMgYnl0ZSBkYXRhIHRyYW5zZmVycyBub3Qgc3VwcG9ydGVkCiAgKgltYXggYmxvY2sgbGVuZ3RoIHVwIHRvIDEwMjMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3NkaGNpLmMgYi9kcml2ZXJzL21tYy9zZGhjaS5jCmluZGV4IDhlOTEwMGIuLjg5MzMxOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvc2RoY2kuYwpAQCAtOCwxMiArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0gLyoKLSAgKiBOb3RlIHRoYXQgUElPIHRyYW5zZmVyIGlzIHJhdGhlciBjcmFwcHkgYXRtLiBUaGUgYnVmZmVyIGZ1bGwvZW1wdHkKLSAgKiBpbnRlcnJ1cHRzIGFyZW4ndCByZWxpYWJsZSBzbyB3ZSBjdXJyZW50bHkgdHJhbnNmZXIgdGhlIGVudGlyZSBidWZmZXIKLSAgKiBkaXJlY3RseS4gUGF0Y2hlcyB0byBzb2x2ZSB0aGUgcHJvYmxlbSBhcmUgd2VsY29tZS4KLSAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMjcsMTYgKzIxLDUwIEBACiAjaW5jbHVkZSAic2RoY2kuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAic2RoY2kiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjExIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xMiIKIAogI2RlZmluZSBCVUdNQUlMICI8c2RoY2ktZGV2ZWxAbGlzdC5kcnpldXMuY3g+IgogCiAjZGVmaW5lIERCRyhmLCB4Li4uKSBcCiAJcHJfZGVidWcoRFJJVkVSX05BTUUgIiBbJXMoKV06ICIgZiwgX19mdW5jX18sIyMgeCkKIAorc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z19ub2RtYSA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnX2ZvcmNlZG1hID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdfcXVpcmtzID0gMDsKKworI2RlZmluZSBTREhDSV9RVUlSS19DTE9DS19CRUZPUkVfUkVTRVQJCQkoMTw8MCkKKyNkZWZpbmUgU0RIQ0lfUVVJUktfRk9SQ0VfRE1BCQkJCSgxPDwxKQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogaGFuZGxlIGFueSBTRCBob3N0IGNvbnRyb2xsZXIgKi8KLQl7UENJX0RFVklDRV9DTEFTUygoUENJX0NMQVNTX1NZU1RFTV9TREhDSSA8PCA4KSwgMHhGRkZGMDApfSwKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9SSUNPSCwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1JJQ09IX1I1QzgyMiwKKwkJLnN1YnZlbmRvcgk9IFBDSV9WRU5ET1JfSURfSUJNLAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gU0RIQ0lfUVVJUktfQ0xPQ0tfQkVGT1JFX1JFU0VUIHwKKwkJCQkgIFNESENJX1FVSVJLX0ZPUkNFX0RNQSwKKwl9LAorCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUklDT0gsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MjIsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gU0RIQ0lfUVVJUktfRk9SQ0VfRE1BLAorCX0sCisKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9USSwKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSBTREhDSV9RVUlSS19GT1JDRV9ETUEsCisJfSwKKworCXsJLyogR2VuZXJpYyBTRCBob3N0IGNvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRV9DTEFTUygoUENJX0NMQVNTX1NZU1RFTV9TREhDSSA8PCA4KSwgMHhGRkZGMDApCisJfSwKKwogCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0sCiB9OwogCkBAIC05NCwxMiArMTIyLDI3IEBACiAKIHN0YXRpYyB2b2lkIHNkaGNpX3Jlc2V0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCBtYXNrKQogeworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwogCXdyaXRlYihtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TT0ZUV0FSRV9SRVNFVCk7CiAKLQlpZiAobWFzayAmIFNESENJX1JFU0VUX0FMTCkgeworCWlmIChtYXNrICYgU0RIQ0lfUkVTRVRfQUxMKQogCQlob3N0LT5jbG9jayA9IDA7CiAKLQkJbWRlbGF5KDUwKTsKKwkvKiBXYWl0IG1heCAxMDAgbXMgKi8KKwl0aW1lb3V0ID0gMTAwOworCisJLyogaHcgY2xlYXJzIHRoZSBiaXQgd2hlbiBpdCdzIGRvbmUgKi8KKwl3aGlsZSAocmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfU09GVFdBUkVfUkVTRVQpICYgbWFzaykgeworCQlpZiAodGltZW91dCA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZXNldCAweCV4IG5ldmVyIGNvbXBsZXRlZC4gIgorCQkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCAoaW50KW1hc2spOworCQkJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CisJCQlyZXR1cm47CisJCX0KKwkJdGltZW91dC0tOworCQltZGVsYXkoMSk7CiAJfQogfQogCkBAIC0xMDksMTMgKzE1MiwxNSBAQAogCiAJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKIAotCWludG1hc2sgPSB+KFNESENJX0lOVF9DQVJEX0lOVCB8IFNESENJX0lOVF9CVUZfRU1QVFkgfCBTREhDSV9JTlRfQlVGX0ZVTEwpOworCWludG1hc2sgPSBTREhDSV9JTlRfQlVTX1BPV0VSIHwgU0RIQ0lfSU5UX0RBVEFfRU5EX0JJVCB8CisJCVNESENJX0lOVF9EQVRBX0NSQyB8IFNESENJX0lOVF9EQVRBX1RJTUVPVVQgfCBTREhDSV9JTlRfSU5ERVggfAorCQlTREhDSV9JTlRfRU5EX0JJVCB8IFNESENJX0lOVF9DUkMgfCBTREhDSV9JTlRfVElNRU9VVCB8CisJCVNESENJX0lOVF9DQVJEX1JFTU9WRSB8IFNESENJX0lOVF9DQVJEX0lOU0VSVCB8CisJCVNESENJX0lOVF9EQVRBX0FWQUlMIHwgU0RIQ0lfSU5UX1NQQUNFX0FWQUlMIHwKKwkJU0RIQ0lfSU5UX0RNQV9FTkQgfCBTREhDSV9JTlRfREFUQV9FTkQgfCBTREhDSV9JTlRfUkVTUE9OU0U7CiAKIAl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7CiAJd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOwotCi0JLyogVGhpcyBpcyB1bmtub3duIG1hZ2ljLiAqLwotCXdyaXRlYigweEUsIGhvc3QtPmlvYWRkciArIFNESENJX1RJTUVPVVRfQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2FjdGl2YXRlX2xlZChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKQEAgLTE3Miw3OSArMjE3LDQ2IEBACiAJcmV0dXJuIGhvc3QtPm51bV9zZzsKIH0KIAotc3RhdGljIHZvaWQgc2RoY2lfdHJhbnNmZXJfcGlvKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2RoY2lfcmVhZF9ibG9ja19waW8oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CisJaW50IGJsa3NpemUsIGNodW5rX3JlbWFpbjsKKwl1MzIgZGF0YTsKIAljaGFyICpidWZmZXI7Ci0JdTMyIG1hc2s7Ci0JaW50IGJ5dGVzLCBzaXplOwotCXVuc2lnbmVkIGxvbmcgbWF4X2ppZmZpZXM7CisJaW50IHNpemU7CiAKLQlCVUdfT04oIWhvc3QtPmRhdGEpOworCURCRygiUElPIHJlYWRpbmdcbiIpOwogCi0JaWYgKGhvc3QtPm51bV9zZyA9PSAwKQotCQlyZXR1cm47Ci0KLQlieXRlcyA9IDA7Ci0JaWYgKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKLQkJbWFzayA9IFNESENJX0RBVEFfQVZBSUxBQkxFOwotCWVsc2UKLQkJbWFzayA9IFNESENJX1NQQUNFX0FWQUlMQUJMRTsKKwlibGtzaXplID0gaG9zdC0+ZGF0YS0+Ymxrc3o7CisJY2h1bmtfcmVtYWluID0gMDsKKwlkYXRhID0gMDsKIAogCWJ1ZmZlciA9IHNkaGNpX2ttYXBfc2coaG9zdCkgKyBob3N0LT5vZmZzZXQ7CiAKLQkvKiBUcmFuc2ZlciBzaG91bGRuJ3QgdGFrZSBtb3JlIHRoYW4gNSBzICovCi0JbWF4X2ppZmZpZXMgPSBqaWZmaWVzICsgSFogKiA1OwotCi0Jd2hpbGUgKGhvc3QtPnNpemUgPiAwKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1heF9qaWZmaWVzKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUElPIHRyYW5zZmVyIHN0YWxsZWQuICIKLQkJCQkiUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIKLQkJCQlCVUdNQUlMICIuXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7Ci0JCQlzZGhjaV9kdW1wcmVncyhob3N0KTsKLQotCQkJc2RoY2lfa3VubWFwX3NnKGhvc3QpOwotCi0JCQlob3N0LT5kYXRhLT5lcnJvciA9IE1NQ19FUlJfRkFJTEVEOwotCQkJc2RoY2lfZmluaXNoX2RhdGEoaG9zdCk7Ci0JCQlyZXR1cm47CisJd2hpbGUgKGJsa3NpemUpIHsKKwkJaWYgKGNodW5rX3JlbWFpbiA9PSAwKSB7CisJCQlkYXRhID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQlVGRkVSKTsKKwkJCWNodW5rX3JlbWFpbiA9IG1pbihibGtzaXplLCA0KTsKIAkJfQogCi0JCWlmICghKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgbWFzaykpCi0JCQljb250aW51ZTsKLQogCQlzaXplID0gbWluKGhvc3QtPnNpemUsIGhvc3QtPnJlbWFpbik7CisJCXNpemUgPSBtaW4oc2l6ZSwgY2h1bmtfcmVtYWluKTsKIAotCQlpZiAoc2l6ZSA+PSA0KSB7Ci0JCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQotCQkJCSoodTMyKilidWZmZXIgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOwotCQkJZWxzZQotCQkJCXdyaXRlbCgqKHUzMiopYnVmZmVyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOwotCQkJc2l6ZSA9IDQ7Ci0JCX0gZWxzZSBpZiAoc2l6ZSA+PSAyKSB7Ci0JCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQotCQkJCSoodTE2KilidWZmZXIgPSByZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOwotCQkJZWxzZQotCQkJCXdyaXRldygqKHUxNiopYnVmZmVyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOwotCQkJc2l6ZSA9IDI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQotCQkJCSoodTgqKWJ1ZmZlciA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7Ci0JCQllbHNlCi0JCQkJd3JpdGViKCoodTgqKWJ1ZmZlciwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQlVGRkVSKTsKLQkJCXNpemUgPSAxOwotCQl9Ci0KLQkJYnVmZmVyICs9IHNpemU7CisJCWNodW5rX3JlbWFpbiAtPSBzaXplOworCQlibGtzaXplIC09IHNpemU7CiAJCWhvc3QtPm9mZnNldCArPSBzaXplOwogCQlob3N0LT5yZW1haW4gLT0gc2l6ZTsKLQotCQlieXRlcyArPSBzaXplOwogCQlob3N0LT5zaXplIC09IHNpemU7CisJCXdoaWxlIChzaXplKSB7CisJCQkqYnVmZmVyID0gZGF0YSAmIDB4RkY7CisJCQlidWZmZXIrKzsKKwkJCWRhdGEgPj49IDg7CisJCQlzaXplLS07CisJCX0KIAogCQlpZiAoaG9zdC0+cmVtYWluID09IDApIHsKIAkJCXNkaGNpX2t1bm1hcF9zZyhob3N0KTsKIAkJCWlmIChzZGhjaV9uZXh0X3NnKGhvc3QpID09IDApIHsKLQkJCQlEQkcoIlBJTyB0cmFuc2ZlcjogJWQgYnl0ZXNcbiIsIGJ5dGVzKTsKKwkJCQlCVUdfT04oYmxrc2l6ZSAhPSAwKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlidWZmZXIgPSBzZGhjaV9rbWFwX3NnKGhvc3QpOwpAQCAtMjUyLDM4ICsyNjQsMTM3IEBACiAJfQogCiAJc2RoY2lfa3VubWFwX3NnKGhvc3QpOworfQogCi0JREJHKCJQSU8gdHJhbnNmZXI6ICVkIGJ5dGVzXG4iLCBieXRlcyk7CitzdGF0aWMgdm9pZCBzZGhjaV93cml0ZV9ibG9ja19waW8oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJaW50IGJsa3NpemUsIGNodW5rX3JlbWFpbjsKKwl1MzIgZGF0YTsKKwljaGFyICpidWZmZXI7CisJaW50IGJ5dGVzLCBzaXplOworCisJREJHKCJQSU8gd3JpdGluZ1xuIik7CisKKwlibGtzaXplID0gaG9zdC0+ZGF0YS0+Ymxrc3o7CisJY2h1bmtfcmVtYWluID0gNDsKKwlkYXRhID0gMDsKKworCWJ5dGVzID0gMDsKKwlidWZmZXIgPSBzZGhjaV9rbWFwX3NnKGhvc3QpICsgaG9zdC0+b2Zmc2V0OworCisJd2hpbGUgKGJsa3NpemUpIHsKKwkJc2l6ZSA9IG1pbihob3N0LT5zaXplLCBob3N0LT5yZW1haW4pOworCQlzaXplID0gbWluKHNpemUsIGNodW5rX3JlbWFpbik7CisKKwkJY2h1bmtfcmVtYWluIC09IHNpemU7CisJCWJsa3NpemUgLT0gc2l6ZTsKKwkJaG9zdC0+b2Zmc2V0ICs9IHNpemU7CisJCWhvc3QtPnJlbWFpbiAtPSBzaXplOworCQlob3N0LT5zaXplIC09IHNpemU7CisJCXdoaWxlIChzaXplKSB7CisJCQlkYXRhID4+PSA4OworCQkJZGF0YSB8PSAodTMyKSpidWZmZXIgPDwgMjQ7CisJCQlidWZmZXIrKzsKKwkJCXNpemUtLTsKKwkJfQorCisJCWlmIChjaHVua19yZW1haW4gPT0gMCkgeworCQkJd3JpdGVsKGRhdGEsIGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7CisJCQljaHVua19yZW1haW4gPSBtaW4oYmxrc2l6ZSwgNCk7CisJCX0KKworCQlpZiAoaG9zdC0+cmVtYWluID09IDApIHsKKwkJCXNkaGNpX2t1bm1hcF9zZyhob3N0KTsKKwkJCWlmIChzZGhjaV9uZXh0X3NnKGhvc3QpID09IDApIHsKKwkJCQlCVUdfT04oYmxrc2l6ZSAhPSAwKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlidWZmZXIgPSBzZGhjaV9rbWFwX3NnKGhvc3QpOworCQl9CisJfQorCisJc2RoY2lfa3VubWFwX3NnKGhvc3QpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV90cmFuc2Zlcl9waW8oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJdTMyIG1hc2s7CisKKwlCVUdfT04oIWhvc3QtPmRhdGEpOworCisJaWYgKGhvc3QtPnNpemUgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJbWFzayA9IFNESENJX0RBVEFfQVZBSUxBQkxFOworCWVsc2UKKwkJbWFzayA9IFNESENJX1NQQUNFX0FWQUlMQUJMRTsKKworCXdoaWxlIChyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIG1hc2spIHsKKwkJaWYgKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJCXNkaGNpX3JlYWRfYmxvY2tfcGlvKGhvc3QpOworCQllbHNlCisJCQlzZGhjaV93cml0ZV9ibG9ja19waW8oaG9zdCk7CisKKwkJaWYgKGhvc3QtPnNpemUgPT0gMCkKKwkJCWJyZWFrOworCisJCUJVR19PTihob3N0LT5udW1fc2cgPT0gMCk7CisJfQorCisJREJHKCJQSU8gdHJhbnNmZXIgY29tcGxldGUuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfcHJlcGFyZV9kYXRhKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7Ci0JdTE2IG1vZGU7CisJdTggY291bnQ7CisJdW5zaWduZWQgdGFyZ2V0X3RpbWVvdXQsIGN1cnJlbnRfdGltZW91dDsKIAogCVdBUk5fT04oaG9zdC0+ZGF0YSk7CiAKLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCXdyaXRldygwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQogCiAJREJHKCJibGtzeiAlMDR4IGJsa3MgJTA0eCBmbGFncyAlMDh4XG4iLAogCQlkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5mbGFncyk7CiAJREJHKCJ0c2FjICVkIG1zIG5zYWMgJWQgY2xrXG4iLAogCQlkYXRhLT50aW1lb3V0X25zIC8gMTAwMDAwMCwgZGF0YS0+dGltZW91dF9jbGtzKTsKIAotCW1vZGUgPSBTREhDSV9UUk5TX0JMS19DTlRfRU47Ci0JaWYgKGRhdGEtPmJsb2NrcyA+IDEpCi0JCW1vZGUgfD0gU0RIQ0lfVFJOU19NVUxUSTsKLQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQotCQltb2RlIHw9IFNESENJX1RSTlNfUkVBRDsKLQlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKQotCQltb2RlIHw9IFNESENJX1RSTlNfRE1BOworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlCVUdfT04oZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3MgPiA1MjQyODgpOworCUJVR19PTihkYXRhLT5ibGtzeiA+IGhvc3QtPm1heF9ibG9jayk7CisJQlVHX09OKGRhdGEtPmJsb2NrcyA+IDY1NTM1KTsKIAotCXdyaXRldyhtb2RlLCBob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkvKiB0aW1lb3V0IGluIHVzICovCisJdGFyZ2V0X3RpbWVvdXQgPSBkYXRhLT50aW1lb3V0X25zIC8gMTAwMCArCisJCWRhdGEtPnRpbWVvdXRfY2xrcyAvIGhvc3QtPmNsb2NrOwogCi0Jd3JpdGV3KGRhdGEtPmJsa3N6LCBob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19TSVpFKTsKLQl3cml0ZXcoZGF0YS0+YmxvY2tzLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19DT1VOVCk7CisJLyoKKwkgKiBGaWd1cmUgb3V0IG5lZWRlZCBjeWNsZXMuCisJICogV2UgZG8gdGhpcyBpbiBzdGVwcyBpbiBvcmRlciB0byBmaXQgaW5zaWRlIGEgMzIgYml0IGludC4KKwkgKiBUaGUgZmlyc3Qgc3RlcCBpcyB0aGUgbWluaW11bSB0aW1lb3V0LCB3aGljaCB3aWxsIGhhdmUgYQorCSAqIG1pbmltdW0gcmVzb2x1dGlvbiBvZiA2IGJpdHM6CisJICogKDEpIDJeMTMqMTAwMCA+IDJeMjIsCisJICogKDIpIGhvc3QtPnRpbWVvdXRfY2xrIDwgMl4xNgorCSAqICAgICA9PgorCSAqICAgICAoMSkgLyAoMikgPiAyXjYKKwkgKi8KKwljb3VudCA9IDA7CisJY3VycmVudF90aW1lb3V0ID0gKDEgPDwgMTMpICogMTAwMCAvIGhvc3QtPnRpbWVvdXRfY2xrOworCXdoaWxlIChjdXJyZW50X3RpbWVvdXQgPCB0YXJnZXRfdGltZW91dCkgeworCQljb3VudCsrOworCQljdXJyZW50X3RpbWVvdXQgPDw9IDE7CisJCWlmIChjb3VudCA+PSAweEYpCisJCQlicmVhazsKKwl9CisKKwlpZiAoY291bnQgPj0gMHhGKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUb28gbGFyZ2UgdGltZW91dCByZXF1ZXN0ZWQhXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQljb3VudCA9IDB4RTsKKwl9CisKKwl3cml0ZWIoY291bnQsIGhvc3QtPmlvYWRkciArIFNESENJX1RJTUVPVVRfQ09OVFJPTCk7CiAKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKSB7CiAJCWludCBjb3VudDsKQEAgLTMwMiwxMiArNDEzLDM3IEBACiAJCWhvc3QtPm9mZnNldCA9IDA7CiAJCWhvc3QtPnJlbWFpbiA9IGhvc3QtPmN1cl9zZy0+bGVuZ3RoOwogCX0KKworCS8qIFdlIGRvIG5vdCBoYW5kbGUgRE1BIGJvdW5kYXJpZXMsIHNvIHNldCBpdCB0byBtYXggKDUxMiBLaUIpICovCisJd3JpdGV3KFNESENJX01BS0VfQkxLU1ooNywgZGF0YS0+Ymxrc3opLAorCQlob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19TSVpFKTsKKwl3cml0ZXcoZGF0YS0+YmxvY2tzLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19DT1VOVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3NldF90cmFuc2Zlcl9tb2RlKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LAorCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwl1MTYgbW9kZTsKKworCVdBUk5fT04oaG9zdC0+ZGF0YSk7CisKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltb2RlID0gU0RIQ0lfVFJOU19CTEtfQ05UX0VOOworCWlmIChkYXRhLT5ibG9ja3MgPiAxKQorCQltb2RlIHw9IFNESENJX1RSTlNfTVVMVEk7CisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJbW9kZSB8PSBTREhDSV9UUk5TX1JFQUQ7CisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkKKwkJbW9kZSB8PSBTREhDSV9UUk5TX0RNQTsKKworCXdyaXRldyhtb2RlLCBob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfZmluaXNoX2RhdGEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhOwotCXUzMiBpbnRtYXNrOwogCXUxNiBibG9ja3M7CiAKIAlCVUdfT04oIWhvc3QtPmRhdGEpOwpAQCAtMzE4LDE0ICs0NTQsNiBAQAogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpIHsKIAkJcGNpX3VubWFwX3NnKGhvc3QtPmNoaXAtPnBkZXYsIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sCiAJCQkoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKT9QQ0lfRE1BX0ZST01ERVZJQ0U6UENJX0RNQV9UT0RFVklDRSk7Ci0JfSBlbHNlIHsKLQkJaW50bWFzayA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOwotCQlpbnRtYXNrICY9IH4oU0RIQ0lfSU5UX0JVRl9FTVBUWSB8IFNESENJX0lOVF9CVUZfRlVMTCk7Ci0JCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKTsKLQotCQlpbnRtYXNrID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7Ci0JCWludG1hc2sgJj0gfihTREhDSV9JTlRfQlVGX0VNUFRZIHwgU0RIQ0lfSU5UX0JVRl9GVUxMKTsKLQkJd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9FTkFCTEUpOwogCX0KIAogCS8qCkBAIC0zNDIsOSArNDcwLDcgQEAKIAkJCSJ0aG91Z2ggdGhlcmUgd2VyZSBibG9ja3MgbGVmdC4gUGxlYXNlIHJlcG9ydCB0aGlzICIKIAkJCSJ0byAiIEJVR01BSUwgIi5cbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKIAkJZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKLQl9Ci0KLQlpZiAoaG9zdC0+c2l6ZSAhPSAwKSB7CisJfSBlbHNlIGlmIChob3N0LT5zaXplICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogJWQgYnl0ZXMgd2VyZSBsZWZ0IHVudHJhbnNmZXJyZWQuICIKIAkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGhvc3QtPnNpemUpOwpAQCAtMzcxLDI3ICs0OTcsMzggQEAKIHN0YXRpYyB2b2lkIHNkaGNpX3NlbmRfY29tbWFuZChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJaW50IGZsYWdzOwotCXUzMiBwcmVzZW50OwotCXVuc2lnbmVkIGxvbmcgbWF4X2ppZmZpZXM7CisJdTMyIG1hc2s7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJV0FSTl9PTihob3N0LT5jbWQpOwogCiAJREJHKCJTZW5kaW5nIGNtZCAoJXgpXG4iLCBjbWQtPm9wY29kZSk7CiAKIAkvKiBXYWl0IG1heCAxMCBtcyAqLwotCW1heF9qaWZmaWVzID0gamlmZmllcyArIChIWiArIDk5KS8xMDA7Ci0JZG8gewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXhfamlmZmllcykpIHsKKwl0aW1lb3V0ID0gMTA7CisKKwltYXNrID0gU0RIQ0lfQ01EX0lOSElCSVQ7CisJaWYgKChjbWQtPmRhdGEgIT0gTlVMTCkgfHwgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpKQorCQltYXNrIHw9IFNESENJX0RBVEFfSU5ISUJJVDsKKworCS8qIFdlIHNob3VsZG4ndCB3YWl0IGZvciBkYXRhIGluaWhpYml0IGZvciBzdG9wIGNvbW1hbmRzLCBldmVuCisJICAgdGhvdWdoIHRoZXkgbWlnaHQgdXNlIGJ1c3kgc2lnbmFsaW5nICovCisJaWYgKGhvc3QtPm1ycS0+ZGF0YSAmJiAoY21kID09IGhvc3QtPm1ycS0+ZGF0YS0+c3RvcCkpCisJCW1hc2sgJj0gflNESENJX0RBVEFfSU5ISUJJVDsKKworCXdoaWxlIChyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIG1hc2spIHsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29udHJvbGxlciBuZXZlciByZWxlYXNlZCAiCi0JCQkJImluaGliaXQgYml0cy4gUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIKKwkJCQkiaW5oaWJpdCBiaXQocykuIFBsZWFzZSByZXBvcnQgdGhpcyB0byAiCiAJCQkJQlVHTUFJTCAiLlxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwogCQkJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CiAJCQljbWQtPmVycm9yID0gTU1DX0VSUl9GQUlMRUQ7CiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT5maW5pc2hfdGFza2xldCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJcHJlc2VudCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpOwotCX0gd2hpbGUgKHByZXNlbnQgJiAoU0RIQ0lfQ01EX0lOSElCSVQgfCBTREhDSV9EQVRBX0lOSElCSVQpKTsKKwkJdGltZW91dC0tOworCQltZGVsYXkoMSk7CisJfQogCiAJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIDEwICogSFopOwogCkBAIC00MDEsNiArNTM4LDggQEAKIAogCXdyaXRlbChjbWQtPmFyZywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQVJHVU1FTlQpOwogCisJc2RoY2lfc2V0X3RyYW5zZmVyX21vZGUoaG9zdCwgY21kLT5kYXRhKTsKKwogCWlmICgoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSAmJiAoY21kLT5mbGFncyAmIE1NQ19SU1BfQlVTWSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5zdXBwb3J0ZWQgcmVzcG9uc2UgdHlwZSEgIgogCQkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byAiIEJVR01BSUwgIi5cbiIsCkBAIC00NTYsMzEgKzU5NSw5IEBACiAKIAlEQkcoIkVuZGluZyBjbWQgKCV4KVxuIiwgaG9zdC0+Y21kLT5vcGNvZGUpOwogCi0JaWYgKGhvc3QtPmNtZC0+ZGF0YSkgewotCQl1MzIgaW50bWFzazsKLQorCWlmIChob3N0LT5jbWQtPmRhdGEpCiAJCWhvc3QtPmRhdGEgPSBob3N0LT5jbWQtPmRhdGE7Ci0KLQkJaWYgKCEoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKSkgewotCQkJLyoKLQkJCSAqIERvbid0IGVuYWJsZSB0aGUgaW50ZXJydXB0cyB1bnRpbCBub3cgdG8gbWFrZSBzdXJlIHdlCi0JCQkgKiBnZXQgc3RhYmxlIGhhbmRsaW5nIG9mIHRoZSBGSUZPLgotCQkJICovCi0JCQlpbnRtYXNrID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7Ci0JCQlpbnRtYXNrIHw9IFNESENJX0lOVF9CVUZfRU1QVFkgfCBTREhDSV9JTlRfQlVGX0ZVTEw7Ci0JCQl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7Ci0KLQkJCWludG1hc2sgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKTsKLQkJCWludG1hc2sgfD0gU0RIQ0lfSU5UX0JVRl9FTVBUWSB8IFNESENJX0lOVF9CVUZfRlVMTDsKLQkJCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKTsKLQotCQkJLyoKLQkJCSAqIFRoZSBidWZmZXIgaW50ZXJydXB0cyBhcmUgdG8gdW5yZWxpYWJsZSBzbyB3ZQotCQkJICogc3RhcnQgdGhlIHRyYW5zZmVyIGltbWVkaWF0bHkuCi0JCQkgKi8KLQkJCXNkaGNpX3RyYW5zZmVyX3Bpbyhob3N0KTsKLQkJfQotCX0gZWxzZQorCWVsc2UKIAkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOwogCiAJaG9zdC0+Y21kID0gTlVMTDsKQEAgLTQ5MCw3ICs2MDcsNyBAQAogewogCWludCBkaXY7CiAJdTE2IGNsazsKLQl1bnNpZ25lZCBsb25nIG1heF9qaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCWlmIChjbG9jayA9PSBob3N0LT5jbG9jaykKIAkJcmV0dXJuOwpAQCAtNTExLDE3ICs2MjgsMTkgQEAKIAl3cml0ZXcoY2xrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKTsKIAogCS8qIFdhaXQgbWF4IDEwIG1zICovCi0JbWF4X2ppZmZpZXMgPSBqaWZmaWVzICsgKEhaICsgOTkpLzEwMDsKLQlkbyB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1heF9qaWZmaWVzKSkgeworCXRpbWVvdXQgPSAxMDsKKwl3aGlsZSAoISgoY2xrID0gcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpCisJCSYgU0RIQ0lfQ0xPQ0tfSU5UX1NUQUJMRSkpIHsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW50ZXJuYWwgY2xvY2sgbmV2ZXIgc3RhYmlsaXNlZC4gIgogCQkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAogCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKIAkJCXNkaGNpX2R1bXByZWdzKGhvc3QpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWNsayA9IHJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpOwotCX0gd2hpbGUgKCEoY2xrICYgU0RIQ0lfQ0xPQ0tfSU5UX1NUQUJMRSkpOworCQl0aW1lb3V0LS07CisJCW1kZWxheSgxKTsKKwl9CiAKIAljbGsgfD0gU0RIQ0lfQ0xPQ0tfQ0FSRF9FTjsKIAl3cml0ZXcoY2xrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKTsKQEAgLTUzMCw2ICs2NDksNDYgQEAKIAlob3N0LT5jbG9jayA9IGNsb2NrOwogfQogCitzdGF0aWMgdm9pZCBzZGhjaV9zZXRfcG93ZXIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIHNob3J0IHBvd2VyKQoreworCXU4IHB3cjsKKworCWlmIChob3N0LT5wb3dlciA9PSBwb3dlcikKKwkJcmV0dXJuOworCisJd3JpdGViKDAsIGhvc3QtPmlvYWRkciArIFNESENJX1BPV0VSX0NPTlRST0wpOworCisJaWYgKHBvd2VyID09ICh1bnNpZ25lZCBzaG9ydCktMSkKKwkJZ290byBvdXQ7CisKKwlwd3IgPSBTREhDSV9QT1dFUl9PTjsKKworCXN3aXRjaCAocG93ZXIpIHsKKwljYXNlIE1NQ19WRERfMTcwOgorCWNhc2UgTU1DX1ZERF8xODA6CisJY2FzZSBNTUNfVkREXzE5MDoKKwkJcHdyIHw9IFNESENJX1BPV0VSXzE4MDsKKwkJYnJlYWs7CisJY2FzZSBNTUNfVkREXzI5MDoKKwljYXNlIE1NQ19WRERfMzAwOgorCWNhc2UgTU1DX1ZERF8zMTA6CisJCXB3ciB8PSBTREhDSV9QT1dFUl8zMDA7CisJCWJyZWFrOworCWNhc2UgTU1DX1ZERF8zMjA6CisJY2FzZSBNTUNfVkREXzMzMDoKKwljYXNlIE1NQ19WRERfMzQwOgorCQlwd3IgfD0gU0RIQ0lfUE9XRVJfMzMwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwl3cml0ZWIocHdyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKworb3V0OgorCWhvc3QtPnBvd2VyID0gcG93ZXI7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogTU1DIGNhbGxiYWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC01NzYsMTcgKzczNSwxNSBAQAogCSAqLwogCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikgewogCQl3cml0ZWwoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAkJc2RoY2lfaW5pdChob3N0KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlzZGhjaV9zZXRfY2xvY2soaG9zdCwgaW9zLT5jbG9jayk7CiAKIAlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCi0JCXdyaXRlYigwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwkJc2RoY2lfc2V0X3Bvd2VyKGhvc3QsIC0xKTsKIAllbHNlCi0JCXdyaXRlYigweEZGLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwkJc2RoY2lfc2V0X3Bvd2VyKGhvc3QsIGlvcy0+dmRkKTsKIAogCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOwogCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCkBAIC02NzksNiArODM2LDE5IEBACiAJaWYgKChtcnEtPmNtZC0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKSB8fAogCQkobXJxLT5kYXRhICYmICgobXJxLT5kYXRhLT5lcnJvciAhPSBNTUNfRVJSX05PTkUpIHx8CiAJCShtcnEtPmRhdGEtPnN0b3AgJiYgKG1ycS0+ZGF0YS0+c3RvcC0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKSkpKSkgeworCisJCS8qIFNvbWUgY29udHJvbGxlcnMgbmVlZCB0aGlzIGtpY2sgb3IgcmVzZXQgd29uJ3Qgd29yayBoZXJlICovCisJCWlmIChob3N0LT5jaGlwLT5xdWlya3MgJiBTREhDSV9RVUlSS19DTE9DS19CRUZPUkVfUkVTRVQpIHsKKwkJCXVuc2lnbmVkIGludCBjbG9jazsKKworCQkJLyogVGhpcyBpcyB0byBmb3JjZSBhbiB1cGRhdGUgKi8KKwkJCWNsb2NrID0gaG9zdC0+Y2xvY2s7CisJCQlob3N0LT5jbG9jayA9IDA7CisJCQlzZGhjaV9zZXRfY2xvY2soaG9zdCwgY2xvY2spOworCQl9CisKKwkJLyogU3BlYyBzYXlzIHdlIHNob3VsZCBkbyBib3RoIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dCBSaWNvaAorCQkgICBjb250cm9sbGVycyBkbyBub3QgbGlrZSB0aGF0LiAqLwogCQlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9DTUQpOwogCQlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9EQVRBKTsKIAl9CkBAIC03OTMsNyArOTYzLDcgQEAKIAlpZiAoaG9zdC0+ZGF0YS0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKQogCQlzZGhjaV9maW5pc2hfZGF0YShob3N0KTsKIAllbHNlIHsKLQkJaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0JVRl9GVUxMIHwgU0RIQ0lfSU5UX0JVRl9FTVBUWSkpCisJCWlmIChpbnRtYXNrICYgKFNESENJX0lOVF9EQVRBX0FWQUlMIHwgU0RIQ0lfSU5UX1NQQUNFX0FWQUlMKSkKIAkJCXNkaGNpX3RyYW5zZmVyX3Bpbyhob3N0KTsKIAogCQlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX0VORCkKQEAgLTgxOCw1MCArOTg4LDQ0IEBACiAKIAlEQkcoIioqKiAlcyBnb3QgaW50ZXJydXB0OiAweCUwOHhcbiIsIGhvc3QtPnNsb3RfZGVzY3IsIGludG1hc2spOwogCi0JaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKSkKKwlpZiAoaW50bWFzayAmIChTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfCBTREhDSV9JTlRfQ0FSRF9SRU1PVkUpKSB7CisJCXdyaXRlbChpbnRtYXNrICYgKFNESENJX0lOVF9DQVJEX0lOU0VSVCB8IFNESENJX0lOVF9DQVJEX1JFTU9WRSksCisJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKIAkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKKwl9CisKKwlpbnRtYXNrICY9IH4oU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKTsKIAogCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLKSB7Ci0JCXNkaGNpX2NtZF9pcnEoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9DTURfTUFTSyk7Ci0KIAkJd3JpdGVsKGludG1hc2sgJiBTREhDSV9JTlRfQ01EX01BU0ssCiAJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwkJc2RoY2lfY21kX2lycShob3N0LCBpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLKTsKIAl9CiAKIAlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0spIHsKLQkJc2RoY2lfZGF0YV9pcnEoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0spOwotCiAJCXdyaXRlbChpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSywKIAkJCWhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCQlzZGhjaV9kYXRhX2lycShob3N0LCBpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSyk7CiAJfQogCiAJaW50bWFzayAmPSB+KFNESENJX0lOVF9DTURfTUFTSyB8IFNESENJX0lOVF9EQVRBX01BU0spOwogCi0JaWYgKGludG1hc2sgJiBTREhDSV9JTlRfQ0FSRF9JTlQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBjYXJkIGludGVycnVwdC4gUGxlYXNlICIKLQkJCSJyZXBvcnQgdGhpcyB0byAiIEJVR01BSUwgIi5cbiIsCi0JCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7Ci0JCXNkaGNpX2R1bXByZWdzKGhvc3QpOwotCX0KLQogCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0JVU19QT1dFUikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIGJ1cyBwb3dlciBpbnRlcnJ1cHQuIFBsZWFzZSAiCi0JCQkicmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYXJkIGlzIGNvbnN1bWluZyB0b28gbXVjaCBwb3dlciFcbiIsCiAJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7Ci0JCXNkaGNpX2R1bXByZWdzKGhvc3QpOworCQl3cml0ZWwoU0RIQ0lfSU5UX0JVU19QT1dFUiwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CiAJfQogCi0JaWYgKGludG1hc2sgJiBTREhDSV9JTlRfQUNNRDEyRVJSKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgYXV0byBDTUQxMiBlcnJvci4gUGxlYXNlICIKKwlpbnRtYXNrICY9IFNESENJX0lOVF9CVVNfUE9XRVI7CisKKwlpZiAoaW50bWFzaykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIGludGVycnVwdCAweCUwOHguIFBsZWFzZSAiCiAJCQkicmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAotCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGludG1hc2spOwogCQlzZGhjaV9kdW1wcmVncyhob3N0KTsKIAotCQl3cml0ZXcofjAsIGhvc3QtPmlvYWRkciArIFNESENJX0FDTUQxMl9FUlIpOwotCX0KLQotCWlmIChpbnRtYXNrKQogCQl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJfQogCiAJcmVzdWx0ID0gSVJRX0hBTkRMRUQ7CiAKQEAgLTk1NCw2ICsxMTE4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX3Byb2JlX3Nsb3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBzbG90KQogewogCWludCByZXQ7CisJdW5zaWduZWQgaW50IHZlcnNpb247CiAJc3RydWN0IHNkaGNpX2NoaXAgKmNoaXA7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CkBAIC05ODUsNiArMTE1MCwxNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAoKHBkZXYtPmNsYXNzICYgMHgwMDAwRkYpID09IFBDSV9TREhDSV9JRlZFTkRPUikgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogVmVuZG9yIHNwZWNpZmljIGludGVyZmFjZS4gQWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKChwZGV2LT5jbGFzcyAmIDB4MDAwMEZGKSA+IFBDSV9TREhDSV9JRlZFTkRPUikgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogVW5rbm93biBpbnRlcmZhY2UuIEFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3Qgc2RoY2lfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEwMTIsOSArMTE4NywzMiBAQAogCQlnb3RvIHJlbGVhc2U7CiAJfQogCisJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKKworCXZlcnNpb24gPSByZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX1ZFUlNJT04pOworCXZlcnNpb24gPSAodmVyc2lvbiAmIFNESENJX1NQRUNfVkVSX01BU0spID4+IFNESENJX1NQRUNfVkVSX1NISUZUOworCWlmICh2ZXJzaW9uICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5rbm93biBjb250cm9sbGVyIHZlcnNpb24gKCVkKS4gIgorCQkJIkNvd2FyZGx5IHJlZnVzaW5nIHRvIGNvbnRpbnVlLlxuIiwgaG9zdC0+c2xvdF9kZXNjciwKKwkJCXZlcnNpb24pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVubWFwOworCX0KKwogCWNhcHMgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9DQVBBQklMSVRJRVMpOwogCi0JaWYgKChjYXBzICYgU0RIQ0lfQ0FOX0RPX0RNQSkgJiYgKChwZGV2LT5jbGFzcyAmIDB4MDAwMEZGKSA9PSAweDAxKSkKKwlpZiAoZGVidWdfbm9kbWEpCisJCURCRygiRE1BIGZvcmNlZCBvZmZcbiIpOworCWVsc2UgaWYgKGRlYnVnX2ZvcmNlZG1hKSB7CisJCURCRygiRE1BIGZvcmNlZCBvblxuIik7CisJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9ETUE7CisJfSBlbHNlIGlmIChjaGlwLT5xdWlya3MgJiBTREhDSV9RVUlSS19GT1JDRV9ETUEpCisJCWhvc3QtPmZsYWdzIHw9IFNESENJX1VTRV9ETUE7CisJZWxzZSBpZiAoKHBkZXYtPmNsYXNzICYgMHgwMDAwRkYpICE9IFBDSV9TREhDSV9JRkRNQSkKKwkJREJHKCJDb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBETUEgaW50ZXJmYWNlXG4iKTsKKwllbHNlIGlmICghKGNhcHMgJiBTREhDSV9DQU5fRE9fRE1BKSkKKwkJREJHKCJDb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBETUEgY2FwYWJpbGl0eVxuIik7CisJZWxzZQogCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfRE1BOwogCiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgewpAQCAtMTAzMCwxOCArMTIyOCw1OSBAQAogCWVsc2UgLyogWFhYOiBIYWNrIHRvIGdldCBNTUMgbGF5ZXIgdG8gYXZvaWQgaGlnaG1lbSAqLwogCQlwZGV2LT5kbWFfbWFzayA9IDA7CiAKLQlob3N0LT5tYXhfY2xrID0gKGNhcHMgJiBTREhDSV9DTE9DS19CQVNFX01BU0spID4+IFNESENJX0NMT0NLX0JBU0VfU0hJRlQ7CisJaG9zdC0+bWF4X2NsayA9CisJCShjYXBzICYgU0RIQ0lfQ0xPQ0tfQkFTRV9NQVNLKSA+PiBTREhDSV9DTE9DS19CQVNFX1NISUZUOworCWlmIChob3N0LT5tYXhfY2xrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IGJhc2UgY2xvY2sgIgorCQkJImZyZXF1ZW5jeS5cbiIsIGhvc3QtPnNsb3RfZGVzY3IpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVubWFwOworCX0KIAlob3N0LT5tYXhfY2xrICo9IDEwMDAwMDA7CiAKKwlob3N0LT50aW1lb3V0X2NsayA9CisJCShjYXBzICYgU0RIQ0lfVElNRU9VVF9DTEtfTUFTSykgPj4gU0RIQ0lfVElNRU9VVF9DTEtfU0hJRlQ7CisJaWYgKGhvc3QtPnRpbWVvdXRfY2xrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgorCQkJImZyZXF1ZW5jeS5cbiIsIGhvc3QtPnNsb3RfZGVzY3IpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVubWFwOworCX0KKwlpZiAoY2FwcyAmIFNESENJX1RJTUVPVVRfQ0xLX1VOSVQpCisJCWhvc3QtPnRpbWVvdXRfY2xrICo9IDEwMDA7CisKKwlob3N0LT5tYXhfYmxvY2sgPSAoY2FwcyAmIFNESENJX01BWF9CTE9DS19NQVNLKSA+PiBTREhDSV9NQVhfQkxPQ0tfU0hJRlQ7CisJaWYgKGhvc3QtPm1heF9ibG9jayA+PSAzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgbWF4aW11bSBibG9jayBzaXplLlxuIiwKKwkJCWhvc3QtPnNsb3RfZGVzY3IpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVubWFwOworCX0KKwlob3N0LT5tYXhfYmxvY2sgPSA1MTIgPDwgaG9zdC0+bWF4X2Jsb2NrOworCiAJLyoKIAkgKiBTZXQgaG9zdCBwYXJhbWV0ZXJzLgogCSAqLwogCW1tYy0+b3BzID0gJnNkaGNpX29wczsKIAltbWMtPmZfbWluID0gaG9zdC0+bWF4X2NsayAvIDI1NjsKIAltbWMtPmZfbWF4ID0gaG9zdC0+bWF4X2NsazsKLQltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNDsKIAltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKKwltbWMtPm9jcl9hdmFpbCA9IDA7CisJaWYgKGNhcHMgJiBTREhDSV9DQU5fVkREXzMzMCkKKwkJbW1jLT5vY3JfYXZhaWwgfD0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OworCWVsc2UgaWYgKGNhcHMgJiBTREhDSV9DQU5fVkREXzMwMCkKKwkJbW1jLT5vY3JfYXZhaWwgfD0gTU1DX1ZERF8yOV8zMHxNTUNfVkREXzMwXzMxOworCWVsc2UgaWYgKGNhcHMgJiBTREhDSV9DQU5fVkREXzE4MCkKKwkJbW1jLT5vY3JfYXZhaWwgfD0gTU1DX1ZERF8xN18xOHxNTUNfVkREXzE4XzE5OworCisJaWYgKG1tYy0+b2NyX2F2YWlsID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCByZXBvcnQgYW55ICIKKwkJCSJzdXBwb3J0IHZvbHRhZ2VzLlxuIiwgaG9zdC0+c2xvdF9kZXNjcik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gdW5tYXA7CisJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOwogCiAJLyoKQEAgLTEwNTQsMTAgKzEyOTMsMTAgQEAKIAltbWMtPm1heF9waHlzX3NlZ3MgPSAxNjsKIAogCS8qCi0JICogTWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyBpbiBvbmUgdHJhbnNmZXIuIExpbWl0ZWQgYnkgc2VjdG9yCi0JICogY291bnQgcmVnaXN0ZXIuCisJICogTWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyBpbiBvbmUgdHJhbnNmZXIuIExpbWl0ZWQgYnkgRE1BIGJvdW5kYXJ5CisJICogc2l6ZSAoNTEyS2lCKSwgd2hpY2ggbWVhbnMgKDUxMiBLaUIvNTEyPSkgMTAyNCBlbnRyaWVzLgogCSAqLwotCW1tYy0+bWF4X3NlY3RvcnMgPSAweDNGRkY7CisJbW1jLT5tYXhfc2VjdG9ycyA9IDEwMjQ7CiAKIAkvKgogCSAqIE1heGltdW0gc2VnbWVudCBzaXplLiBDb3VsZCBiZSBvbmUgc2VnbWVudCB3aXRoIHRoZSBtYXhpbXVtIG51bWJlcgpAQCAtMTA3NSwxMCArMTMxNCwxMCBAQAogCiAJc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVyLCBzZGhjaV90aW1lb3V0X3RpbWVyLCAobG9uZylob3N0KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgc2RoY2lfaXJxLCBTQV9TSElSUSwKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHNkaGNpX2lycSwgSVJRRl9TSEFSRUQsCiAJCWhvc3QtPnNsb3RfZGVzY3IsIGhvc3QpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5tYXA7CisJCWdvdG8gdW50YXNrbGV0OwogCiAJc2RoY2lfaW5pdChob3N0KTsKIApAQCAtMTA5NywxMCArMTMzNiwxMCBAQAogCiAJcmV0dXJuIDA7CiAKLXVubWFwOgordW50YXNrbGV0OgogCXRhc2tsZXRfa2lsbCgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKIAl0YXNrbGV0X2tpbGwoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKLQordW5tYXA6CiAJaW91bm1hcChob3N0LT5pb2FkZHIpOwogcmVsZWFzZToKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgaG9zdC0+YmFyKTsKQEAgLTExNDQsMTMgKzEzODMsMTggQEAKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCByZXQsIGk7Ci0JdTggc2xvdHM7CisJdTggc2xvdHMsIHJldjsKIAlzdHJ1Y3Qgc2RoY2lfY2hpcCAqY2hpcDsKIAogCUJVR19PTihwZGV2ID09IE5VTEwpOwogCUJVR19PTihlbnQgPT0gTlVMTCk7CiAKLQlEQkcoImZvdW5kIGF0ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2KTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUKKwkJIjogU0RIQ0kgY29udHJvbGxlciBmb3VuZCBhdCAlcyBbJTA0eDolMDR4XSAocmV2ICV4KVxuIiwKKwkJcGNpX25hbWUocGRldiksIChpbnQpcGRldi0+dmVuZG9yLCAoaW50KXBkZXYtPmRldmljZSwKKwkJKGludClyZXYpOwogCiAJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1NMT1RfSU5GTywgJnNsb3RzKTsKIAlpZiAocmV0KQpAQCAtMTE3Myw2ICsxNDE3LDEwIEBACiAJfQogCiAJY2hpcC0+cGRldiA9IHBkZXY7CisJY2hpcC0+cXVpcmtzID0gZW50LT5kcml2ZXJfZGF0YTsKKworCWlmIChkZWJ1Z19xdWlya3MpCisJCWNoaXAtPnF1aXJrcyA9IGRlYnVnX3F1aXJrczsKIAogCWNoaXAtPm51bV9zbG90cyA9IHNsb3RzOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKQEAgLTEyNTEsNyArMTQ5OSwxNSBAQAogbW9kdWxlX2luaXQoc2RoY2lfZHJ2X2luaXQpOwogbW9kdWxlX2V4aXQoc2RoY2lfZHJ2X2V4aXQpOwogCittb2R1bGVfcGFyYW0oZGVidWdfbm9kbWEsIHVpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGRlYnVnX2ZvcmNlZG1hLCB1aW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShkZWJ1Z19xdWlya3MsIHVpbnQsIDA0NDQpOworCiBNT0RVTEVfQVVUSE9SKCJQaWVycmUgT3NzbWFuIDxkcnpldXNAZHJ6ZXVzLmN4PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX25vZG1hLCAiRm9yY2VmdWxseSBkaXNhYmxlIERNQSB0cmFuc2ZlcnMuIChkZWZhdWx0IDApIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2ZvcmNlZG1hLCAiRm9yY2VmdWxseSBlbmFibGUgRE1BIHRyYW5zZmVycy4gKGRlZmF1bHQgMCkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfcXVpcmtzLCAiRm9yY2UgY2VydGFpbiBxdWlya3MuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9zZGhjaS5oIGIvZHJpdmVycy9tbWMvc2RoY2kuaAppbmRleCAzYjI3MGVmLi5mMjQ1MzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL3NkaGNpLmgKQEAgLTEyLDYgKzEyLDEwIEBACiAgKiBQQ0kgcmVnaXN0ZXJzCiAgKi8KIAorI2RlZmluZSBQQ0lfU0RIQ0lfSUZQSU8JCQkweDAwCisjZGVmaW5lIFBDSV9TREhDSV9JRkRNQQkJCTB4MDEKKyNkZWZpbmUgUENJX1NESENJX0lGVkVORE9SCQkweDAyCisKICNkZWZpbmUgUENJX1NMT1RfSU5GTwkJCTB4NDAJLyogOCBiaXRzICovCiAjZGVmaW5lICBQQ0lfU0xPVF9JTkZPX1NMT1RTKHgpCQkoKHggPj4gNCkgJiA3KQogI2RlZmluZSAgUENJX1NMT1RfSU5GT19GSVJTVF9CQVJfTUFTSwkweDA3CkBAIC0yMyw2ICsyNyw3IEBACiAjZGVmaW5lIFNESENJX0RNQV9BRERSRVNTCTB4MDAKIAogI2RlZmluZSBTREhDSV9CTE9DS19TSVpFCTB4MDQKKyNkZWZpbmUgIFNESENJX01BS0VfQkxLU1ooZG1hLCBibGtzeikgKCgoZG1hICYgMHg3KSA8PCAxMikgfCAoYmxrc3ogJiAweEZGRikpCiAKICNkZWZpbmUgU0RIQ0lfQkxPQ0tfQ09VTlQJMHgwNgogCkBAIC02Nyw2ICs3MiwxMCBAQAogI2RlZmluZSAgU0RIQ0lfQ1RSTF80QklUQlVTCTB4MDIKIAogI2RlZmluZSBTREhDSV9QT1dFUl9DT05UUk9MCTB4MjkKKyNkZWZpbmUgIFNESENJX1BPV0VSX09OCQkweDAxCisjZGVmaW5lICBTREhDSV9QT1dFUl8xODAJMHgwQQorI2RlZmluZSAgU0RIQ0lfUE9XRVJfMzAwCTB4MEMKKyNkZWZpbmUgIFNESENJX1BPV0VSXzMzMAkweDBFCiAKICNkZWZpbmUgU0RIQ0lfQkxPQ0tfR0FQX0NPTlRST0wJMHgyQQogCkBAIC05MSw4ICsxMDAsOCBAQAogI2RlZmluZSAgU0RIQ0lfSU5UX1JFU1BPTlNFCTB4MDAwMDAwMDEKICNkZWZpbmUgIFNESENJX0lOVF9EQVRBX0VORAkweDAwMDAwMDAyCiAjZGVmaW5lICBTREhDSV9JTlRfRE1BX0VORAkweDAwMDAwMDA4Ci0jZGVmaW5lICBTREhDSV9JTlRfQlVGX0VNUFRZCTB4MDAwMDAwMTAKLSNkZWZpbmUgIFNESENJX0lOVF9CVUZfRlVMTAkweDAwMDAwMDIwCisjZGVmaW5lICBTREhDSV9JTlRfU1BBQ0VfQVZBSUwJMHgwMDAwMDAxMAorI2RlZmluZSAgU0RIQ0lfSU5UX0RBVEFfQVZBSUwJMHgwMDAwMDAyMAogI2RlZmluZSAgU0RIQ0lfSU5UX0NBUkRfSU5TRVJUCTB4MDAwMDAwNDAKICNkZWZpbmUgIFNESENJX0lOVF9DQVJEX1JFTU9WRQkweDAwMDAwMDgwCiAjZGVmaW5lICBTREhDSV9JTlRfQ0FSRF9JTlQJMHgwMDAwMDEwMApAQCAtMTEyLDcgKzEyMSw3IEBACiAjZGVmaW5lICBTREhDSV9JTlRfQ01EX01BU0sJKFNESENJX0lOVF9SRVNQT05TRSB8IFNESENJX0lOVF9USU1FT1VUIHwgXAogCQlTREhDSV9JTlRfQ1JDIHwgU0RIQ0lfSU5UX0VORF9CSVQgfCBTREhDSV9JTlRfSU5ERVgpCiAjZGVmaW5lICBTREhDSV9JTlRfREFUQV9NQVNLCShTREhDSV9JTlRfREFUQV9FTkQgfCBTREhDSV9JTlRfRE1BX0VORCB8IFwKLQkJU0RIQ0lfSU5UX0JVRl9FTVBUWSB8IFNESENJX0lOVF9CVUZfRlVMTCB8IFwKKwkJU0RIQ0lfSU5UX0RBVEFfQVZBSUwgfCBTREhDSV9JTlRfU1BBQ0VfQVZBSUwgfCBcCiAJCVNESENJX0lOVF9EQVRBX1RJTUVPVVQgfCBTREhDSV9JTlRfREFUQV9DUkMgfCBcCiAJCVNESENJX0lOVF9EQVRBX0VORF9CSVQpCiAKQEAgLTEyMSw5ICsxMzAsMTcgQEAKIC8qIDNFLTNGIHJlc2VydmVkICovCiAKICNkZWZpbmUgU0RIQ0lfQ0FQQUJJTElUSUVTCTB4NDAKLSNkZWZpbmUgIFNESENJX0NBTl9ET19ETUEJMHgwMDQwMDAwMAorI2RlZmluZSAgU0RIQ0lfVElNRU9VVF9DTEtfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lICBTREhDSV9USU1FT1VUX0NMS19TSElGVCAwCisjZGVmaW5lICBTREhDSV9USU1FT1VUX0NMS19VTklUCTB4MDAwMDAwODAKICNkZWZpbmUgIFNESENJX0NMT0NLX0JBU0VfTUFTSwkweDAwMDAzRjAwCiAjZGVmaW5lICBTREhDSV9DTE9DS19CQVNFX1NISUZUCTgKKyNkZWZpbmUgIFNESENJX01BWF9CTE9DS19NQVNLCTB4MDAwMzAwMDAKKyNkZWZpbmUgIFNESENJX01BWF9CTE9DS19TSElGVCAgMTYKKyNkZWZpbmUgIFNESENJX0NBTl9ET19ETUEJMHgwMDQwMDAwMAorI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8zMzAJMHgwMTAwMDAwMAorI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8zMDAJMHgwMjAwMDAwMAorI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8xODAJMHgwNDAwMDAwMAogCiAvKiA0NC00NyByZXNlcnZlZCBmb3IgbW9yZSBjYXBzICovCiAKQEAgLTEzNiw2ICsxNTMsMTAgQEAKICNkZWZpbmUgU0RIQ0lfU0xPVF9JTlRfU1RBVFVTCTB4RkMKIAogI2RlZmluZSBTREhDSV9IT1NUX1ZFUlNJT04JMHhGRQorI2RlZmluZSAgU0RIQ0lfVkVORE9SX1ZFUl9NQVNLCTB4RkYwMAorI2RlZmluZSAgU0RIQ0lfVkVORE9SX1ZFUl9TSElGVAk4CisjZGVmaW5lICBTREhDSV9TUEVDX1ZFUl9NQVNLCTB4MDBGRgorI2RlZmluZSAgU0RIQ0lfU1BFQ19WRVJfU0hJRlQJMAogCiBzdHJ1Y3Qgc2RoY2lfY2hpcDsKIApAQCAtMTQ5LDggKzE3MCwxMSBAQAogI2RlZmluZSBTREhDSV9VU0VfRE1BCQkoMTw8MCkKIAogCXVuc2lnbmVkIGludAkJbWF4X2NsazsJLyogTWF4IHBvc3NpYmxlIGZyZXEgKE1IeikgKi8KKwl1bnNpZ25lZCBpbnQJCXRpbWVvdXRfY2xrOwkvKiBUaW1lb3V0IGZyZXEgKEtIeikgKi8KKwl1bnNpZ25lZCBpbnQJCW1heF9ibG9jazsJLyogTWF4IGJsb2NrIHNpemUgKGJ5dGVzKSAqLwogCiAJdW5zaWduZWQgaW50CQljbG9jazsJCS8qIEN1cnJlbnQgY2xvY2sgKE1IeikgKi8KKwl1bnNpZ25lZCBzaG9ydAkJcG93ZXI7CQkvKiBDdXJyZW50IHZvbHRhZ2UgKi8KIAogCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOwkJLyogQ3VycmVudCByZXF1ZXN0ICovCiAJc3RydWN0IG1tY19jb21tYW5kCSpjbWQ7CQkvKiBDdXJyZW50IGNvbW1hbmQgKi8KQEAgLTE4MCw2ICsyMDQsOCBAQAogc3RydWN0IHNkaGNpX2NoaXAgewogCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKIAorCXVuc2lnbmVkIGxvbmcJCXF1aXJrczsKKwogCWludAkJCW51bV9zbG90czsJLyogU2xvdHMgb24gY29udHJvbGxlciAqLwogCXN0cnVjdCBzZGhjaV9ob3N0CSpob3N0c1swXTsJLyogUG9pbnRlcnMgdG8gaG9zdHMgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggODE2NzMzMi4uOGEzMGVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtMjEsNyArMjEsNiBAQAogICogLSBPbiBBUElDIHN5c3RlbXMgdGhlIEZJRk8gZW1wdHkgaW50ZXJydXB0IGlzIHNvbWV0aW1lcyBsb3N0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE1NTQsNyArMTU1Myw3IEBACiAJICogQWxsb2NhdGUgaW50ZXJydXB0LgogCSAqLwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3YnNkX2lycSwgU0FfU0hJUlEsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHdic2RfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGhvc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKaW5kZXggMWUwMWFkMy4uOTg4NTcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCmluZGV4IDRiZjlmOGMuLjYwZTExYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCkBAIC00LDcgKzQsNiBAQAogICAgJElkOiBjZmlfcHJvYmUuYyx2IDEuODYgMjAwNS8xMS8yOSAxNDo0ODozMSBnbGVpeG5lciBFeHAgJAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jaGlwcmVnLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jaGlwcmVnLmMKaW5kZXggYzIxMjc4NC4uMjE3NGM5NzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jaGlwcmVnLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2hpcHJlZy5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCmluZGV4IDUxN2VhMzMuLjhmMzlkMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYwpAQCAtOCw3ICs4LDYgQEAKICAgIE9jY2FzaW9uYWxseSBtYWludGFpbmVkIGJ5IFRoYXluZSBIYXJiYXVnaCB0aGFyYmF1Z2ggYXQgbG54aSBkb3QgY29tCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCBiZTNmMWMxLi5lZGUzNTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTgsNyArOCw2IEBACiAgKgogICogTGljZW5jZTogR1BMCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jCmluZGV4IDU5M2JiMDMuLjc4ODcyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMKQEAgLTQwLDcgKzQwLDYgQEAKICovCiAjZGVmaW5lIERPQ19TSU5HTEVfRFJJVkVSCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKaW5kZXggMDQyNzFkMC4uNWRiNzE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKQEAgLTksNyArOSw2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYwppbmRleCBiNDQzOGVhLi5lNDI3YzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkcmFtLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCmluZGV4IGY2MjBkNzQuLjZmOWJiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwpAQCAtODIsNyArODIsNiBAQAogICogICAgICAgKiBDb21iIHRoZSBpbml0IHJvdXRpbmUuICBJdCdzIHN0aWxsIGEgYml0IGNsdWRneSBvbiBhIGZldyB0aGluZ3MuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC01NTEsMTEgKzU1MCwxMSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTb21lIHNjcmVlbiBmdW4KICAgICAgICAgICovCi0gICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6ICVkJWMgKDB4JXgpIG9mICVzcHJlZmV0Y2hhYmxlIG1lbW9yeSBhdCAweCVseFxuIiwKKyAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogJWQlYyAoMHgleCkgb2YgJXNwcmVmZXRjaGFibGUgbWVtb3J5IGF0IDB4JWxseFxuIiwKIAkgICAgICAgKHNpemU8MTAyNCk/c2l6ZTooc2l6ZTwxMDQ4NTc2KT9zaXplPj4xMDpzaXplPj4yMCwKICAgICAgICAgICAgICAgIChzaXplPDEwMjQpPydCJzooc2l6ZTwxMDQ4NTc2KT8nSyc6J00nLAogCSAgICAgICBzaXplLCAoKGRjbWQmKDB4MTw8MykpID09IDApPyJub24tIjoiIiwKLSAgICAgICAgICAgICAgIChkZXYtPnJlc291cmNlWzBdLnN0YXJ0KSZQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLICk7CisgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSgoZGV2LT5yZXNvdXJjZVswXS5zdGFydCkmUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSykpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIENoZWNrIHRvIHNlZSB0aGUgc3RhdGUgb2YgdGhlIG1lbW9yeQpAQCAtNjg1LDggKzY4NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogRm91bmQgUENJIFYzNzBQREMgYXQgMHglbFhcbiIsCi0JCQkJICAgIFBDSV9EZXZpY2UtPnJlc291cmNlWzBdLnN0YXJ0KTsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogRm91bmQgUENJIFYzNzBQREMgYXQgMHglbGx4XG4iLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKVBDSV9EZXZpY2UtPnJlc291cmNlWzBdLnN0YXJ0KTsKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogVGhlIFBNQzU1MSBkZXZpY2UgYWN0cyBWRVJZIHdlaXJkIGlmIHlvdSBkb24ndCBpbml0IGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCmluZGV4IDFlMjFhMmMuLjQxMTY1MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jCmluZGV4IGI5MzNhMmEuLjdmYzgwOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9hbWQ3Nnhyb20uYwppbmRleCBjMzUwODc4Li40NDc5NTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMTIzLDkgKzEyMiwxMCBAQAogCQl3aW5kb3ctPnJzcmMucGFyZW50ID0gTlVMTDsKIAkJcHJpbnRrKEtFUk5fRVJSIE1PRF9OQU1FCiAJCQkiICVzKCk6IFVuYWJsZSB0byByZWdpc3RlciByZXNvdXJjZSIKLQkJCSIgMHglLjA4bHgtMHglLjA4bHggLSBrZXJuZWwgYnVnP1xuIiwKKwkJCSIgMHglLjE2bGx4LTB4JS4xNmxseCAtIGtlcm5lbCBidWc/XG4iLAogCQkJX19mdW5jX18sCi0JCQl3aW5kb3ctPnJzcmMuc3RhcnQsIHdpbmRvdy0+cnNyYy5lbmQpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl3aW5kb3ctPnJzcmMuc3RhcnQsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXdpbmRvdy0+cnNyYy5lbmQpOwogCX0KIAogI2lmIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYyBiL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYwppbmRleCA1YTk1YWIzLi4wNDAyYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jZWl2YS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAkSWQ6IGNlaXZhLmMsdiAxLjExIDIwMDQvMDkvMTYgMjM6Mjc6MTIgZ2xlaXhuZXIgRXhwICQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY3N0bV9taXBzX2l4eC5jIGIvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKaW5kZXggYTM3MDk1My4uYWE1NmRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfSVRFODE3MikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19JVlIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMKaW5kZXggODVjMmE5ZS4uOTJhOWM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAvKiBwYXJ0aXRpb25faW5mbyBnaXZlcyBkZXRhaWxzIG9uIHRoZSBsb2dpY2FsIHBhcnRpdGlvbnMgdGhhdCB0aGUgc3BsaXQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2RjMjEyODUuYyBiL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCmluZGV4IDhiMzc4NGUuLmIzMmJiOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqICRJZDogZGMyMTI4NS5jLHYgMS4yNCAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9kaWxuZXRwYy5jIGIvZHJpdmVycy9tdGQvbWFwcy9kaWxuZXRwYy5jCmluZGV4IGMyOTlkMTAuLmIxMTA0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZGlsbmV0cGMuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2RpbG5ldHBjLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqIGFuZCBodHRwOi8vd3d3LnNzdi1lbWJlZGRlZC5kZS9zc3YvcGMxMDQvcDE3MC5odG0KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZG12MTgyLmMgYi9kcml2ZXJzL210ZC9tYXBzL2RtdjE4Mi5jCmluZGV4IDJiYjNjMGYuLmE0M2M0OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZG12MTgyLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9kbXYxODIuYwpAQCAtMTYsNyArMTYsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMgYi9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKaW5kZXggNjBhNmU1MS4uNjQxZTFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9lYm9ueS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9lZGI3MzEyLmMgYi9kcml2ZXJzL210ZC9tYXBzL2VkYjczMTIuYwppbmRleCBiNDhhMzQ3Li4xYzViOTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2VkYjczMTIuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2VkYjczMTIuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9oNzIweC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9oNzIweC1mbGFzaC5jCmluZGV4IDA2NjcxMDEuLjZkZGUzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaDcyMHgtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2g3MjB4LWZsYXNoLmMKQEAgLTgsNyArOCw2IEBACiAgKiAgICAgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaWNoeHJvbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKaW5kZXggZWE1MDczNy4uZGI0YjU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMTc3LDkgKzE3NiwxMCBAQAogCQl3aW5kb3ctPnJzcmMucGFyZW50ID0gTlVMTDsKIAkJcHJpbnRrKEtFUk5fREVCVUcgTU9EX05BTUUKIAkJCSI6ICVzKCk6IFVuYWJsZSB0byByZWdpc3RlciByZXNvdXJjZSIKLQkJCSIgMHglLjA4bHgtMHglLjA4bHggLSBrZXJuZWwgYnVnP1xuIiwKKwkJCSIgMHglLjE2bGx4LTB4JS4xNmxseCAtIGtlcm5lbCBidWc/XG4iLAogCQkJX19mdW5jX18sCi0JCQl3aW5kb3ctPnJzcmMuc3RhcnQsIHdpbmRvdy0+cnNyYy5lbmQpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl3aW5kb3ctPnJzcmMuc3RhcnQsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXdpbmRvdy0+cnNyYy5lbmQpOwogCX0KIAogCS8qIE1hcCB0aGUgZmlybXdhcmUgaHViIGludG8gbXkgYWRkcmVzcyBzcGFjZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaW1wYTcuYyBiL2RyaXZlcnMvbXRkL21hcHMvaW1wYTcuYwppbmRleCBiYTdmNDAzLi5hMGI0ZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ltcGE3LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pbXBhNy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCmluZGV4IGEzYmE1MmYuLmM4ZGIwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCkBAIC0yNiw3ICsyNiw2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXBhcS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKaW5kZXggYjhjY2IwYS4uZjI3YzEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKQEAgLTgsNyArOCw2IEBACiAgKiAkSWQ6IGlwYXEtZmxhc2guYyx2IDEuNSAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2w0NDBneC5jIGIvZHJpdmVycy9tdGQvbWFwcy9sNDQwZ3guYwppbmRleCA4NTFiZjk1Li42Yjc4NGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2w0NDBneC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbDQ0MGd4LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFBJSVhFX0lPQkFTRV9SRVNPVVJDRQkxMQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2xhc2F0LmMgYi9kcml2ZXJzL210ZC9tYXBzL2xhc2F0LmMKaW5kZXggYzY1OGQ0MC4uMWMxM2QyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9sYXNhdC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbGFzYXQuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbGFzYXQvbGFzYXQuaD4KIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbGFzYXRfbXRkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9tcGMxMjExLmMgYi9kcml2ZXJzL210ZC9tYXBzL21wYzEyMTEuYwppbmRleCA0Njg1ZThlLi40NWEwMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL21wYzEyMTEuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL21wYzEyMTEuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMKaW5kZXggNWMyNWQ0ZS4uZDg4NGYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbXR4LTFfZmxhc2guYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYyBiL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKaW5kZXggYTIxZmNkMS4uMmYwNzYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L29jb3RlYS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMKaW5kZXggZGMzNzY1Mi4uZTZlMzkxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL29tYXAtdG90by1mbGFzaC5jCkBAIC04LDcgKzgsNiBAQAogICogJElkOiBvbWFwLXRvdG8tZmxhc2guYyx2IDEuNSAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCmluZGV4IGQ2MzAxZjAuLjc3OTlhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3JlZHdvb2QuYyBiL2RyaXZlcnMvbXRkL21hcHMvcmVkd29vZC5jCmluZGV4IDUwYjE0MDMuLmVjOGZkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcmVkd29vZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcmVkd29vZC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggNWNlZmIwMS4uOTUwYmYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqICRJZDogc2ExMTAwLWZsYXNoLmMsdiAxLjUxIDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NiYzgyNDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jCmluZGV4IDM1MDI4NmQuLjdkMGZjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKiBCb3RoIHBhcnRzIGFyZSBKRURFQyBjb21wYXRpYmxlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jCmluZGV4IGU4YzEzMGUuLjliNTBjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqIEZvciBkZXRhaWxzIHNlZSBodHRwOi8vd3d3LmFtZC5jb20vcHJvZHVjdHMvZXBkL2Rlc2lnaW5nL2V2YWxib2FyZHMvMTguZWxhbnNjNTIwLzUyMF9jZHBfYnJpZWYvaW5kZXguaHRtbAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zY2IyX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NjYjJfZmxhc2guYwppbmRleCA5N2E4ZGZkLi5kY2ZiODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NjYjJfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NjYjJfZmxhc2guYwpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zY3gyMDBfZG9jZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMKaW5kZXggMjhiOGE1Ny4uNzM5MWZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zY3gyMDBfZG9jZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NjeDIwMF9kb2NmbGFzaC5jCkBAIC04LDcgKzgsNiBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTY0LDggKzE2Myw5IEBACiAJCW91dGwocG1yLCBzY3gyMDBfY2JfYmFzZSArIFNDeDIwMF9QTVIpOwogCX0KIAotICAgICAgIAlwcmludGsoS0VSTl9JTkZPIE5BTUUgIjogRE9DQ1MgbWFwcGVkIGF0IDB4JWx4LTB4JWx4LCB3aWR0aCAlZFxuIiwKLQkgICAgICAgZG9jbWVtLnN0YXJ0LCBkb2NtZW0uZW5kLCB3aWR0aCk7CisgICAgICAgCXByaW50ayhLRVJOX0lORk8gTkFNRSAiOiBET0NDUyBtYXBwZWQgYXQgMHglbGx4LTB4JWxseCwgd2lkdGggJWRcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWRvY21lbS5zdGFydCwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZG9jbWVtLmVuZCwgd2lkdGgpOwogCiAJc2N4MjAwX2RvY2ZsYXNoX21hcC5zaXplID0gc2l6ZTsKIAlpZiAod2lkdGggPT0gOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc29sdXRpb25lbmdpbmUuYyBiL2RyaXZlcnMvbXRkL21hcHMvc29sdXRpb25lbmdpbmUuYwppbmRleCBjNTNjMmMzLi5kNzZjZWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NvbHV0aW9uZW5naW5lLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zb2x1dGlvbmVuZ2luZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zdW5fdWZsYXNoLmMKaW5kZXggMjRhMDMxNS4uNGRiMjA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zdW5fdWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zdW5fdWZsYXNoLmMKQEAgLTYyLDkgKzYyLDEwIEBACiAJCS8qIE5vbi1DRkkgdXNlcmZsYXNoIGRldmljZS0tIG9uY2UgSSBmaW5kIG9uZSB3ZQogCQkgKiBjYW4gd29yayBvbiBzdXBwb3J0aW5nIGl0LgogCQkgKi8KLQkJcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGV2aWNlIGF0IDB4JWx4ICglZCByZWdzKTogIiBcCisJCXByaW50aygiJXM6IHVuc3VwcG9ydGVkIGRldmljZSBhdCAweCVsbHggKCVkIHJlZ3MpOiAiIFwKIAkJCSJlbWFpbCBlYnJvd2VyQHVzYS5uZXRcbiIsCi0JCSAgICAgICBkcC0+ZnVsbF9uYW1lLCByZXMtPnN0YXJ0LCBlZGV2LT5udW1fYWRkcnMpOworCQkgICAgICAgZHAtPmZ1bGxfbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkgICAgICAgZWRldi0+bnVtX2FkZHJzKTsKIAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3RxbTgzNHguYyBiL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jCmluZGV4IGM3YWU5YTUuLjU4ZTU5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdHFtOHh4bC5jIGIvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKaW5kZXggYTQzNTE3MC4uMTk1NzhiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIFRodXMsIHdlIGNob29zZSBDT05GSUdfTVREX0NGSV9JMiAmIENPTkZJR19NVERfQ0ZJX0I0IGF0CiAgKiBrZXJuZWwgY29uZmlndXJhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3RzNTUwMF9mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy90czU1MDBfZmxhc2guYwppbmRleCBhNzQyMmMyLi5iNDcyNzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3RzNTUwMF9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdHM1NTAwX2ZsYXNoLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqICRJZDogdHM1NTAwX2ZsYXNoLmMsdiAxLjUgMjAwNS8xMS8wNyAxMToxNDoyOCBnbGVpeG5lciBFeHAgJAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3VjbGludXguYyBiL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jCmluZGV4IGY3MjY0ZGMuLjM4OWZlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdWNsaW51eC5jCkBAIC0xMCw3ICsxMCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jIGIvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYwppbmRleCBmNDZiZWM2Li5lYzgwZWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2libTR4eC5oPgogI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvd2FsbnV0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3dyX3NiYzgyeHhfZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvd3Jfc2JjODJ4eF9mbGFzaC5jCmluZGV4IDYwYzE5N2UuLmFjNWI4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvd3Jfc2JjODJ4eF9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvd3Jfc2JjODJ4eF9mbGFzaC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiAjaW5jbHVkZSA8YXNtL2ltbWFwX2NwbTIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCmluZGV4IGU1Yzc4NDYuLjA0ZWQzNDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9jay5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKQEAgLTcsNyArNyw2IEBACiAgKiAoQykgMTk5OS0yMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKaW5kZXggOWE0YjU5ZC4uZmI4YjRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY2hhci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29yZS5jIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCmluZGV4IDE2YTk1MmRkLi4xNjhkM2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCA3N2E3MTIzLi4wNmE5MzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCmluZGV4IGViZDY0YWIuLjU0NWZmMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAkSWQ6IG5hbmRzaW0uYyx2IDEuOCAyMDA1LzAzLzE5IDE1OjMzOjU2IGRlZGVraW5kIEV4cCAkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL25mdGxjb3JlLmMKaW5kZXggZGM3NTczNS4uZGQ1Y2VhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9uZnRsY29yZS5jCkBAIC0xMSw3ICsxMSw2IEBACiAKICNkZWZpbmUgUFJFUkVMRUFTRQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwOS5jIGIvZHJpdmVycy9uZXQvM2M1MDkuYwppbmRleCBkYzg0NWYzLi5jYmRhZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwOS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKQEAgLTY4LDcgKzY4LDYgQEAKIC8qIE1heGltdW0gZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCiBzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDEwOwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaWZkZWYgQ09ORklHX01DQQogI2luY2x1ZGUgPGxpbnV4L21jYS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggOTFkMWM0Yy4uNDUzMmIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC01Nyw3ICs1Nyw2IEBACiAjZGVmaW5lIFJYX1JJTkdfU0laRQkxNgogI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CS8qIFNpemUgb2YgZWFjaCB0ZW1wb3JhcnkgUnggYnVmZmVyLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03NjEsNyArNzYwLDcgQEAKIAkJCQkgICB2cC0+cHJvZHVjdF9uYW1lLCBkZXYpKSByZXR1cm4gLUVBR0FJTjsKIAkJZW5hYmxlX2RtYShkZXYtPmRtYSk7CiAJCXNldF9kbWFfbW9kZShkZXYtPmRtYSwgRE1BX01PREVfQ0FTQ0FERSk7Ci0JfSBlbHNlIGlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmNvcmtzY3Jld19pbnRlcnJ1cHQsIFNBX1NISVJRLAorCX0gZWxzZSBpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZjb3Jrc2NyZXdfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgICAgICB2cC0+cHJvZHVjdF9uYW1lLCBkZXYpKSB7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTIzLmMgYi9kcml2ZXJzL25ldC8zYzUyMy5jCmluZGV4IDRiZjg1MTAuLjVkZmQ5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTIzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjMuYwpAQCAtMjg5LDcgKzI4OSw3IEBACiAKIAllbG1jX2lkX2F0dG41ODYoKTsJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmVsbWNfaW50ZXJydXB0LCBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sCisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZlbG1jX2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGdldCBpcnEgJWRcbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjcuYyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKaW5kZXggMTU3ZWRhNS4uMDNjMGY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuYworKysgYi9kcml2ZXJzL25ldC8zYzUyNy5jCkBAIC00MzUsNyArNDM1LDcgQEAKIAkgKglHcmFiIHRoZSBJUlEKIAkgKi8KIAotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmbWMzMl9pbnRlcnJ1cHQsIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgRFJWX05BTUUsIGRldik7CisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZtYzMyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sIERSVl9OQU1FLCBkZXYpOwogCWlmIChlcnIpIHsKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1DMzJfSU9fRVhURU5UKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLCBEUlZfTkFNRSwgZGV2LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggYjQ2N2MzOC4uMjgxOWRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0yMzYsNyArMjM2LDYgQEAKIHN0YXRpYyBpbnQgdm9ydGV4X2RlYnVnID0gMTsKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC05OTcsNyArOTk2LDcgQEAKIAkJcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIHZwLT5mdWxsX2J1c19tYXN0ZXJfcnggPwotCQkJCSZib29tZXJhbmdfaW50ZXJydXB0IDogJnZvcnRleF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikpIHsKKwkJCQkmYm9vbWVyYW5nX2ludGVycnVwdCA6ICZ2b3J0ZXhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlc2VydmUgSVJRICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAkJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC0xNDA3LDggKzE0MDYsMTAgQEAKIAkJfQogCiAJCWlmIChwcmludF9pbmZvKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2FyZEJ1cyBmdW5jdGlvbnMgbWFwcGVkICU4LjhseC0+JXBcbiIsCi0JCQkJcHJpbnRfbmFtZSwgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhcmRCdXMgZnVuY3Rpb25zIG1hcHBlZCAiCisJCQkJIiUxNi4xNmxseC0+JXBcbiIsCisJCQkJcHJpbnRfbmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKIAkJCQl2cC0+Y2JfZm5fYmFzZSk7CiAJCX0KIAkJRUwzV0lORE9XKDIpOwpAQCAtMTgzMiw3ICsxODMzLDcgQEAKIAogCS8qIFVzZSB0aGUgbm93LXN0YW5kYXJkIHNoYXJlZCBJUlEgaW1wbGVtZW50YXRpb24uICovCiAJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgdnAtPmZ1bGxfYnVzX21hc3Rlcl9yeCA/Ci0JCQkJJmJvb21lcmFuZ19pbnRlcnJ1cHQgOiAmdm9ydGV4X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkpIHsKKwkJCQkmYm9vbWVyYW5nX2ludGVycnVwdCA6ICZ2b3J0ZXhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgcmVzZXJ2ZSBJUlEgJWRcbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODk2LDcgKzE4OTcsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiZGV2LT53YXRjaGRvZ190aW1lbz0lZFxuIiwgZGV2LT53YXRjaGRvZ190aW1lbyk7CiAJfQogCi0JZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCWRpc2FibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOwogCW9sZF93aW5kb3cgPSBpb3JlYWQxNihpb2FkZHIgKyBFTDNfQ01EKSA+PiAxMzsKIAlFTDNXSU5ET1coNCk7CiAJbWVkaWFfc3RhdHVzID0gaW9yZWFkMTYoaW9hZGRyICsgV240X01lZGlhKTsKQEAgLTE5NzcsNyArMTk3OCw3IEBACiAJCQkgZGV2LT5uYW1lLCBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5uYW1lKTsKIAogCUVMM1dJTkRPVyhvbGRfd2luZG93KTsKLQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwllbmFibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOwogCW1vZF90aW1lcigmdnAtPnRpbWVyLCBSVU5fQVQobmV4dF90aWNrKSk7CiAJaWYgKHZwLT5kZWZlcnJlZCkKIAkJaW93cml0ZTE2KEZha2VJbnRyLCBpb2FkZHIgKyBFTDNfQ01EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggMGNkYzgzMC4uMTk1OTY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTUyLDcgKzUyLDYgQEAKICNkZWZpbmUgRFJWX1JFTERBVEUJCSJNYXIgMjIsIDIwMDQiCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMjA0LDcgKzEyMDMsNyBAQAogCiAJY3BfaW5pdF9odyhjcCk7CiAKLQlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBjcF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJcmMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgY3BfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0X2h3OwogCkBAIC0xODIzLDcgKzE4MjIsNyBAQAogCXN0cnVjdCBjcF9wcml2YXRlICpjcDsKIAlpbnQgcmM7CiAJdm9pZCBfX2lvbWVtICpyZWdzOwotCWxvbmcgcGNpYWRkcjsKKwlyZXNvdXJjZV9zaXplX3QgcGNpYWRkcjsKIAl1bnNpZ25lZCBpbnQgYWRkcl9sZW4sIGksIHBjaV91c2luZ19kYWM7CiAJdTggcGNpX3JldjsKIApAQCAtMTg4Myw4ICsxODgyLDggQEAKIAl9CiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkgPCBDUF9SRUdTX1NJWkUpIHsKIAkJcmMgPSAtRUlPOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNTUlPIHJlc291cmNlICglbHgpIHRvbyBzbWFsbCBvbiBwY2kgZGV2ICVzXG4iLAotCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwgcGNpX25hbWUocGRldikpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJNTUlPIHJlc291cmNlICglbGx4KSB0b28gc21hbGwgb24gcGNpIGRldiAlc1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KIApAQCAtMTkxNiw4ICsxOTE1LDkgQEAKIAlyZWdzID0gaW9yZW1hcChwY2lhZGRyLCBDUF9SRUdTX1NJWkUpOwogCWlmICghcmVncykgewogCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVseEAlbHgpIG9uIHBjaSBkZXYgJXNcbiIsCi0JCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLCBwY2lhZGRyLCBwY2lfbmFtZShwZGV2KSk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVsbHhAJWxseCkgb24gcGNpIGRldiAlc1xuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpYWRkciwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSByZWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IGFiZDYyNjEuLjcxNzUwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTkzLDcgKzkzLDYgQEAKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOS4yNyIKIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTEzMTEsNyArMTMxMCw3IEBACiAJaW50IHJldHZhbDsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSAoZGV2LT5pcnEsIHJ0bDgxMzlfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxIChkZXYtPmlycSwgcnRsODEzOV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtMTM0MSw5ICsxMzQwLDkgQEAKIAluZXRpZl9zdGFydF9xdWV1ZSAoZGV2KTsKIAogCWlmIChuZXRpZl9tc2dfaWZ1cCh0cCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcnRsODEzOV9vcGVuKCkgaW9hZGRyICUjbHggSVJRICVkIgotCQkJIiBHUCBQaW5zICUyLjJ4ICVzLWR1cGxleC5cbiIsCi0JCQlkZXYtPm5hbWUsIHBjaV9yZXNvdXJjZV9zdGFydCAodHAtPnBjaV9kZXYsIDEpLAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ0bDgxMzlfb3BlbigpIGlvYWRkciAlI2xseCBJUlEgJWQiCisJCQkiIEdQIFBpbnMgJTIuMnggJXMtZHVwbGV4LlxuIiwgZGV2LT5uYW1lLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQgKHRwLT5wY2lfZGV2LCAxKSwKIAkJCWRldi0+aXJxLCBSVExfUjggKE1lZGlhU3RhdHVzKSwKIAkJCXRwLT5taWkuZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MjU5Ni5jIGIvZHJpdmVycy9uZXQvODI1OTYuYwppbmRleCA4YTlmN2Q2Li43ZTJjYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKQEAgLTQwLDcgKzQwLDYgQEAKIAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuYyBiL2RyaXZlcnMvbmV0LzgzOTAuYwppbmRleCA4NmJlOTZhLi5kMjkzNWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvODM5MC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAogCS8qIFVnbHkgYnV0IGEgcmVzZXQgY2FuIGJlIHNsb3csIHlldCBtdXN0IGJlIHByb3RlY3RlZCAqLwogCQkKLQlkaXNhYmxlX2lycV9ub3N5bmMoZGV2LT5pcnEpOworCWRpc2FibGVfaXJxX25vc3luY19sb2NrZGVwKGRldi0+aXJxKTsKIAlzcGluX2xvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwogCQkKIAkvKiBUcnkgdG8gcmVzdGFydCB0aGUgY2FyZC4gIFBlcmhhcHMgdGhlIHVzZXIgaGFzIGZpeGVkIHNvbWV0aGluZy4gKi8KQEAgLTI1Nyw3ICsyNTcsNyBAQAogCU5TODM5MF9pbml0KGRldiwgMSk7CiAJCQogCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwllbmFibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KICAgICAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuaCBiL2RyaXZlcnMvbmV0LzgzOTAuaAppbmRleCA1MWUzOWRjLi5hOWE1OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmgKKysrIGIvZHJpdmVycy9uZXQvODM5MC5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfODM5MF9oCiAjZGVmaW5lIF84MzkwX2gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9TcGFjZS5jIGIvZHJpdmVycy9uZXQvU3BhY2UuYwppbmRleCA2MDMwNGY3ZS4uYThjMjQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvU3BhY2UuYworKysgYi9kcml2ZXJzL25ldC9TcGFjZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHJkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmMgYi9kcml2ZXJzL25ldC9hMjA2NS5jCmluZGV4IDcxMTY1YWMuLmY0ZWE2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmMKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgpAQCAtNDk2LDcgKzQ5NSw3IEBACiAJbGwtPnJkcCA9IExFX0MwX1NUT1A7CiAKIAkvKiBJbnN0YWxsIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciAqLwotCXJldCA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgbGFuY2VfaW50ZXJydXB0LCBTQV9TSElSUSwKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGxhbmNlX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0KSByZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IDIzZmYyMmIuLjFjMDFlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC01MCw3ICs1MCw2IEBACiAgKiAgIEdyYW50IEdydW5kbGVyIDxncnVuZGxlckBjdXAuaHAuY29tPjogUENJIHdyaXRlIHBvc3RpbmcgZml4ZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpAQCAtMTE5NSw3ICsxMTk0LDcgQEAKIAkJZ290byBpbml0X2Vycm9yOwogCX0KIAotCWVjb2RlID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhY2VfaW50ZXJydXB0LCBTQV9TSElSUSwKKwllY29kZSA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYWNlX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgICAgRFJWX05BTUUsIGRldik7CiAJaWYgKGVjb2RlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXF1ZXN0ZWQgSVJRICVkIGlzIGJ1c3lcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuaCBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCmluZGV4IGE5NzEwNzAuLjYyZWM4Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUNFTklDX0hfCiAjZGVmaW5lIF9BQ0VOSUNfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogR2VuZXJhdGUgVFggaW5kZXggdXBkYXRlIGVhY2ggdGltZSwgd2hlbiBUWCByaW5nIGlzIGNsb3NlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pY19maXJtd2FyZS5oIGIvZHJpdmVycy9uZXQvYWNlbmljX2Zpcm13YXJlLmgKaW5kZXggZDc4ODJkZC4uZWMxNDZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljX2Zpcm13YXJlLmgKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljX2Zpcm13YXJlLmgKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAvKgogICogRGVjbGFyZSB0aGVzZSBoZXJlIGV2ZW4gaWYgVGlnb24gSSBzdXBwb3J0IGlzIGRpc2FibGVkIHRvIGF2b2lkCiAgKiB0aGUgY29tcGlsZXIgY29tcGxhaW5pbmcgYWJvdXQgdW5kZWZpbmVkIHN5bWJvbHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwppbmRleCBkOWJhOGJlLi5lZDMyMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKQEAgLTY5LDcgKzY5LDYgQEAKICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xMzc3LDcgKzEzNzYsNyBAQAogewogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZihkZXYtPmlycSA9PTAgfHwgcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGFtZDgxMTFlX2ludGVycnVwdCwgU0FfU0hJUlEsCisJaWYoZGV2LT5pcnEgPT0wIHx8IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBhbWQ4MTExZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCQkgZGV2LT5uYW1lLCBkZXYpKSAKIAkJcmV0dXJuIC1FQUdBSU47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwbmUuYyBiL2RyaXZlcnMvbmV0L2FwbmUuYwppbmRleCBiOTgyMGI4Li45Y2MxM2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcG5lLmMKKysrIGIvZHJpdmVycy9uZXQvYXBuZS5jCkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICBkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKIAogICAgIC8qIEluc3RhbGwgdGhlIEludGVycnVwdCBoYW5kbGVyICovCi0gICAgaSA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgYXBuZV9pbnRlcnJ1cHQsIFNBX1NISVJRLCBEUlZfTkFNRSwgZGV2KTsKKyAgICBpID0gcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBhcG5lX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBkZXYpOwogICAgIGlmIChpKSByZXR1cm4gaTsKIAogICAgIGZvcihpID0gMDsgaSA8IEVUSEVSX0FERFJfTEVOOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCmluZGV4IDllZGFhMTguLjFkMDFhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYwpAQCAtNDgsNyArNDgsNiBAQAogICoJICB0aGUgZHJpdmVyIGZpZ3VyZSBpdCBvdXQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19mZmRydi5oIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHNfZmZkcnYuaAppbmRleCAzMWNmOGM5Li5iMDIwMDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19mZmRydi5oCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzX2ZmZHJ2LmgKQEAgLTI0LDcgKzI0LDYgQEAKICAqICAgICAgLSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19DT1BTX0RBWU5BCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzX2x0ZHJ2LmggYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19sdGRydi5oCmluZGV4IDRhZmI4ZTEuLmM2OTliMWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wc19sdGRydi5oCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzX2x0ZHJ2LmgKQEAgLTIzLDcgKzIzLDYgQEAKICAqICAgICAgLSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgogICovCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQ09QU19UQU5HRU5UCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMKaW5kZXggMWE0NGE3OS4uN2Y3ZGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqICAgICAgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCmluZGV4IGZhYmMwNjAuLjVhOTUwMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNkZWZpbmUgVkVSU0lPTiAiYXJjbmV0OiB2My45MyBCRVRBIDIwMDAvMDQvMjkgLSBieSBBdmVyeSBQZW5uYXJ1biBldCBhbC5cbiIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwppbmRleCA5NjYzNmNhLi45NzlhMzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJZ290byBvdXRfcG9ydDsKIAl9CiAKLQlpZiAoKGVyciA9IGNvbTIwMDIwX2ZvdW5kKGRldiwgU0FfU0hJUlEpKSAhPSAwKQorCWlmICgoZXJyID0gY29tMjAwMjBfZm91bmQoZGV2LCBJUlFGX1NIQVJFRCkpICE9IDApCiAJICAgICAgICBnb3RvIG91dF9wb3J0OwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMgYi9kcml2ZXJzL25ldC9hcmlhZG5lLmMKaW5kZXggYTliYjdhNC4uY2M3MjFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJpYWRuZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiAKICAgICBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCi0gICAgaSA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgYXJpYWRuZV9pbnRlcnJ1cHQsIFNBX1NISVJRLAorICAgIGkgPSByZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGFyaWFkbmVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBkZXYpOwogICAgIGlmIChpKSByZXR1cm4gaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKaW5kZXggNjEzMDA1YS4uODU0OTNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKaW5kZXggZTYxM2NjMi4uNWQ3OTI5YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0MTcwMC5jCkBAIC0zNSw3ICszNSw2IEBACiAJcmVzcG9uc2UgdG8gaW5iKClzIGZyb20gb3RoZXIgZGV2aWNlIHByb2JlcyEKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggMDM4ZDVmYy4uNTVmNmUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtMzUsNyArMzUsNiBAQAogICogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IGE3ZTRiYTUuLmNkOThkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0xNDIxLDcgKzE0MjEsNyBAQAogCiAJYjQ0X2NoZWNrX3BoeShicCk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYjQ0X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYjQ0X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKIAkJYjQ0X2NoaXBfcmVzZXQoYnApOwogCQliNDRfZnJlZV9yaW5ncyhicCk7CkBAIC0yMzIyLDcgKzIzMjIsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgYjQ0X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGI0NF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpCiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAKIAlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibWFjLmMgYi9kcml2ZXJzL25ldC9ibWFjLmMKaW5kZXggYmJjYThhZS4uNmZhZDgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JtYWMuYwpAQCAtNyw3ICs3LDYgQEAKICAqIE1heSAxOTk5LCBBbCBWaXJvOiBwcm9wZXIgcmVsZWFzZSBvZiAvcHJvYy9uZXQvYm1hYyBlbnRyeSwgc3dpdGNoZWQgdG8KICAqIGR5bmFtaWMgcHJvY2ZzIGlub2RlLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNzYzNTczNi4uNGY0ZGI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFdyaXR0ZW4gYnk6IE1pY2hhZWwgQ2hhbiAgKG1jaGFuQGJyb2FkY29tLmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNTcsOCArNTYsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC40MiIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdW5lIDEyLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC40MyIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdW5lIDI4LCAyMDA2IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtMTY3Niw3ICsxNjc1LDcgQEAKIAogCQl0eF9mcmVlX2JkICs9IGxhc3QgKyAxOwogCi0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCQlod19jb25zID0gYnAtPmh3X3R4X2NvbnMgPQogCQkJc2Jsay0+c3RhdHVzX3R4X3F1aWNrX2NvbnN1bWVyX2luZGV4MDsKQEAgLTE4MjQsNyArMTgyMyw3IEBACiAJCWlmICgobGVuID4gKGJwLT5kZXYtPm10dSArIEVUSF9ITEVOKSkgJiYKIAkJCShudG9ocyhza2ItPnByb3RvY29sKSAhPSAweDgxMDApKSB7CiAKLQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlnb3RvIG5leHRfcng7CiAKIAkJfQpAQCAtMzY0Myw3ICszNjQyLDcgQEAKIAkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdLnNpemUsCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCX0KLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlpICs9IGogKyAxOwogCX0KIApAQCAtMzY2OSw3ICszNjY4LDcgQEAKIAogCQlyeF9idWYtPnNrYiA9IE5VTEw7CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIH0KIApAQCAtMzk5OSw3ICszOTk4LDcgQEAKIAl1ZGVsYXkoNSk7CiAKIAlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXAsIHBrdF9zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCWlmIChicC0+c3RhdHVzX2Jsay0+c3RhdHVzX3R4X3F1aWNrX2NvbnN1bWVyX2luZGV4MCAhPSBicC0+dHhfcHJvZCkgewogCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZG9uZTsKQEAgLTQyNjEsMTEgKzQyNjAsMTEgQEAKIAkJfQogCQllbHNlIHsKIAkJCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54Ml9pbnRlcnJ1cHQsCi0JCQkJCVNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJCQkJCUlSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJCX0KIAl9CiAJZWxzZSB7Ci0JCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54Ml9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQlkZXYtPm5hbWUsIGRldik7CiAJfQogCWlmIChyYykgewpAQCAtNDMxMiw3ICs0MzExLDcgQEAKIAogCQkJaWYgKCFyYykgewogCQkJCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54Ml9pbnRlcnJ1cHQsCi0JCQkJCVNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJCQkJCUlSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJCQl9CiAJCQlpZiAocmMpIHsKIAkJCQlibngyX2ZyZWVfc2ticyhicCk7CkBAIC00NTQxLDcgKzQ1NDAsNyBAQAogCWJueDJfbmV0aWZfc3RvcChicCk7CiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CiAJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQotCQlyZXNldF9jb2RlID0gQk5YMl9EUlZfTVNHX0NPREVfVU5MT0FEOworCQlyZXNldF9jb2RlID0gQk5YMl9EUlZfTVNHX0NPREVfVU5MT0FEX0xOS19ETjsKIAllbHNlIGlmIChicC0+d29sKQogCQlyZXNldF9jb2RlID0gQk5YMl9EUlZfTVNHX0NPREVfU1VTUEVORF9XT0w7CiAJZWxzZQpAQCAtNTEyOCw2ICs1MTI3LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2JueDJfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlpZiAoZGF0YSkKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTjsKKwllbHNlCisJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgQk5YMl9OVU1fU1RBVFMgNDYKIAogc3RhdGljIHN0cnVjdCB7CkBAIC01NDQ1LDcgKzU0NTQsNyBAQAogCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogI2lmZGVmIEJDTV9UU08KIAkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28JCT0gZXRodG9vbF9vcF9zZXRfdHNvLAorCS5zZXRfdHNvCQk9IGJueDJfc2V0X3RzbywKICNlbmRpZgogCS5zZWxmX3Rlc3RfY291bnQJPSBibngyX3NlbGZfdGVzdF9jb3VudCwKIAkuc2VsZl90ZXN0CQk9IGJueDJfc2VsZl90ZXN0LApAQCAtNTkyNiw3ICs1OTM1LDcgQEAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKICNlbmRpZgogI2lmZGVmIEJDTV9UU08KLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ047CiAjZW5kaWYKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOwpAQCAtNTk2OCw3ICs1OTc3LDcgQEAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CiAJaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQotCQlyZXNldF9jb2RlID0gQk5YMl9EUlZfTVNHX0NPREVfVU5MT0FEOworCQlyZXNldF9jb2RlID0gQk5YMl9EUlZfTVNHX0NPREVfVU5MT0FEX0xOS19ETjsKIAllbHNlIGlmIChicC0+d29sKQogCQlyZXNldF9jb2RlID0gQk5YMl9EUlZfTVNHX0NPREVfU1VTUEVORF9XT0w7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5oIGIvZHJpdmVycy9uZXQvYm54Mi5oCmluZGV4IDU4NDVlMzMuLjY1OGM1ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTQxNzQsNiArNDE3NCw3IEBACiAjZGVmaW5lIEJOWDJfRFJWX01TR19DT0RFX1BVTFNFCQkJIDB4MDYwMDAwMDAKICNkZWZpbmUgQk5YMl9EUlZfTVNHX0NPREVfRElBRwkJCSAweDA3MDAwMDAwCiAjZGVmaW5lIEJOWDJfRFJWX01TR19DT0RFX1NVU1BFTkRfTk9fV09MCSAweDA5MDAwMDAwCisjZGVmaW5lIEJOWDJfRFJWX01TR19DT0RFX1VOTE9BRF9MTktfRE4JCSAweDBiMDAwMDAwCiAKICNkZWZpbmUgQk5YMl9EUlZfTVNHX0RBVEEJCQkgMHgwMGZmMDAwMAogI2RlZmluZSBCTlgyX0RSVl9NU0dfREFUQV9XQUlUMAkJCSAweDAwMDEwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA4MTcxY2FlLi44Yjk1MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTMzLDcgKzMzLDYgQEAKIAogLy8jZGVmaW5lIEJPTkRJTkdfREVCVUcgMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKaW5kZXggNWE5YmQ5NS4uY2ZlNGRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCA1NjVhNTRmLi5kMzMxMzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC02Niw3ICs2Niw2IEBACiAgKiBieSBkZWZhdWx0LCB0aGUgc2VsZWN0aXZlIGNsZWFyIG1hc2sgaXMgc2V0IHVwIHRvIHByb2Nlc3MgcnggcGFja2V0cy4gIAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDM1MCw3ICs0MzQ5LDcgQEAKIAkgKiBtYXBwaW5nIHRvIGV4cG9zZSB0aGVtCiAJICovCiAJaWYgKHJlcXVlc3RfaXJxKGNwLT5wZGV2LT5pcnEsIGNhc19pbnRlcnJ1cHQsCi0JCQlTQV9TSElSUSwgZGV2LT5uYW1lLCAodm9pZCAqKSBkZXYpKSB7CisJCQlJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCAodm9pZCAqKSBkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAhXG4iLCAKIAkJICAgICAgIGNwLT5kZXYtPm5hbWUpOwogCQllcnIgPSAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKaW5kZXggYmYzZTdiNi4uNWQ5ZGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCkBAIC0zOSw3ICszOSw2IEBACiAjaWZuZGVmIF9DWEdCX0NPTU1PTl9IXwogI2RlZmluZSBfQ1hHQl9DT01NT05fSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKaW5kZXggN2ZlMjYzOC4uZTY3ODcyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwpAQCAtMzcsNyArMzcsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yMTksNyArMjE4LDcgQEAKIAogCXQxX2ludGVycnVwdHNfY2xlYXIoYWRhcHRlcik7CiAJaWYgKChlcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsCi0JCQkgICAgICAgdDFfc2VsZWN0X2ludHJfaGFuZGxlcihhZGFwdGVyKSwgU0FfU0hJUlEsCisJCQkgICAgICAgdDFfc2VsZWN0X2ludHJfaGFuZGxlcihhZGFwdGVyKSwgSVJRRl9TSEFSRUQsCiAJCQkgICAgICAgYWRhcHRlci0+bmFtZSwgYWRhcHRlcikpKSB7CiAJCWdvdG8gb3V0X2VycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCA1M2VmZmY2ZGEuLjg3Zjk0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwpAQCAtMzksNyArMzksNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDY0MTA1ZTQuLjBlYjFmODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC0yMTgsNyArMjE4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKQEAgLTY3Miw3ICs2NzEsNyBAQAogCS8qIGFsbG9jYXRlIHRoZSBpcnEgY29ycmVzcG9uZGluZyB0byB0aGUgcmVjZWl2aW5nIERNQSAqLwogCiAJaWYgKHJlcXVlc3RfaXJxKE5FVFdPUktfRE1BX1JYX0lSUV9OQlIsIGUxMDByeHR4X2ludGVycnVwdCwKLQkJCVNBX1NBTVBMRV9SQU5ET00sIGNhcmRuYW1lLCAodm9pZCAqKWRldikpIHsKKwkJCUlSUUZfU0FNUExFX1JBTkRPTSwgY2FyZG5hbWUsICh2b2lkICopZGV2KSkgewogCQlnb3RvIGdyYWNlX2V4aXQwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmMgYi9kcml2ZXJzL25ldC9jczg5eDAuYwppbmRleCBlZjU0ZWJlLi40N2VlY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuYworKysgYi9kcml2ZXJzL25ldC9jczg5eDAuYwpAQCAtMTAwLDcgKzEwMCw2IEBACiAKIC8qIEFsd2F5cyBpbmNsdWRlICdjb25maWcuaCcgZmlyc3QgaW4gY2FzZSB0aGUgdXNlciB3YW50cyB0byB0dXJuIG9uCiAgICBvciBvdmVycmlkZSBzb21ldGhpbmcuICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuaCBiL2RyaXZlcnMvbmV0L2NzODl4MC5oCmluZGV4IGJkOTU0YWEuLjk2OGZlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5oCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5oCkBAIC0xNCw3ICsxNCw2IEBACiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAgICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBQUF9DaGlwSUQgMHgwMDAwCS8qIG9mZnNldCAgIDBoIC0+IENvcnAgLUlEICAgICAgICAgICAgICAqLwogCQkJCS8qIG9mZnNldCAgIDJoIC0+IE1vZGVsL1Byb2R1Y3QgTnVtYmVyICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggZDNkOTU4ZS4uMjAzOGNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC00Miw3ICs0Miw2IEBACiAgKiAgICAgICAgICAgICAgYml0cy4gbWFjcm8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA1YWNkMzVjLi45MWNjOGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZWZ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKQEAgLTEyMjgsNyArMTIyOCw3IEBACiAJCiAJLyogUmVnaXN0ZXIgSVJRIC0gc3VwcG9ydCBzaGFyZWQgaW50ZXJydXB0cyBieSBwYXNzaW5nIGRldmljZSBwdHIgKi8KIAotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZnhfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZnhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogUmVxdWVzdGVkIElSUSAlZCBpcyBidXN5XG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IGU5NDZjNDNkLi5iMWNiZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTIzNSw3ICsyMzUsNiBAQAogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RncnMuYyBiL2RyaXZlcnMvbmV0L2RncnMuYwppbmRleCBlMTc1ZDQ4Li5mYTRmMDk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGdycy5jCisrKyBiL2RyaXZlcnMvbmV0L2RncnMuYwpAQCAtMTE5MSw3ICsxMTkxLDcgQEAKIAlpZiAocHJpdi0+cGx4cmVnKQogCQlPVVRMKGRldi0+YmFzZV9hZGRyICsgUExYX0xDTDJQQ0lfRE9PUkJFTEwsIDEpOwogCQotCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZkZ3JzX2ludHIsIFNBX1NISVJRLCAiUmlnaHRTd2l0Y2giLCBkZXYpOworCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZkZ3JzX2ludHIsIElSUUZfU0hBUkVELCAiUmlnaHRTd2l0Y2giLCBkZXYpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggMDM4NDQ3ZmIuLjRiNmRkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCWRldi0+ZGV2X2FkZHJbaV0gPSBwc3JvbS0+bWFjX2FkZHJbaV07CiAKLQkvKiBQYXJzZSBTb2Z0d2FyZSBJbmZvbWF0aW9uIEJsb2NrICovCisJLyogUGFyc2UgU29mdHdhcmUgSW5mb3JtYXRpb24gQmxvY2sgKi8KIAlpID0gMHgzMDsKIAlwc2liID0gKHU4ICopIHNyb21kYXRhOwogCWRvIHsKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCWludCBpOwogCXUxNiBtYWNjdHJsOwogCQotCWkgPSByZXF1ZXN0X2lycSAoZGV2LT5pcnEsICZyaW9faW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCWkgPSByZXF1ZXN0X2lycSAoZGV2LT5pcnEsICZyaW9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChpKQogCQlyZXR1cm4gaTsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggNzk2NWE5Yi4uMWI3NThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCiAJUFJJTlRLMigiZW50ZXJpbmcgZG05MDAwX29wZW5cbiIpOwogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmZG05MDAwX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZkbTkwMDBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCS8qIEluaXRpYWxpemUgRE05MDAwIGJvYXJkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kdW1teS5jIGIvZHJpdmVycy9uZXQvZHVtbXkuYwppbmRleCBkZDhjMTVhLi4zNmQ1MTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kdW1teS5jCisrKyBiL2RyaXZlcnMvbmV0L2R1bW15LmMKQEAgLTI4LDcgKzI4LDYgQEAKIAkJCUFsYW4gQ294LCAzMHRoIE1heSAxOTk0CiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZjM3MTcwYy4uOTFlZjVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTM4LDcgKzEzOCw2IEBACiAgKgktIFN0cmF0dXM4NzI0NzogcHJvdGVjdCBNREkgY29udHJvbCByZWdpc3RlciBtYW5pcHVsYXRpb25zCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMDY0LDcgKzIwNjMsNyBAQAogCWUxMDBfc2V0X211bHRpY2FzdF9saXN0KG5pYy0+bmV0ZGV2KTsKIAllMTAwX3N0YXJ0X3JlY2VpdmVyKG5pYywgTlVMTCk7CiAJbW9kX3RpbWVyKCZuaWMtPndhdGNoZG9nLCBqaWZmaWVzKTsKLQlpZigoZXJyID0gcmVxdWVzdF9pcnEobmljLT5wZGV2LT5pcnEsIGUxMDBfaW50ciwgU0FfU0hJUlEsCisJaWYoKGVyciA9IHJlcXVlc3RfaXJxKG5pYy0+cGRldi0+aXJxLCBlMTAwX2ludHIsIElSUUZfU0hBUkVELAogCQluaWMtPm5ldGRldi0+bmFtZSwgbmljLT5uZXRkZXYpKSkKIAkJZ290byBlcnJfbm9faXJxOwogCW5ldGlmX3dha2VfcXVldWUobmljLT5uZXRkZXYpOwpAQCAtMjY3OCw5ICsyNjc3LDkgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQogCi0JRFBSSU5USyhQUk9CRSwgSU5GTywgImFkZHIgMHglbHgsIGlycSAlZCwgIgorCURQUklOVEsoUFJPQkUsIElORk8sICJhZGRyIDB4JWxseCwgaXJxICVkLCAiCiAJCSJNQUMgYWRkciAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkJcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsCiAJCW5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sCiAJCW5ldGRldi0+ZGV2X2FkZHJbM10sIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCAyYmMzNGZiLi4zMDQyZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNkZWZpbmUgX0UxMDAwX0hfCiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCA2ZWQ3ZjU5Li5kMTk2NjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC04NzEsMTAgKzg3MSwxMCBAQAogCSpkYXRhID0gMDsKIAogCS8qIEhvb2sgdXAgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciBqdXN0IGZvciB0aGlzIHRlc3QgKi8KLQlpZiAoIXJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgU0FfUFJPQkVJUlEsIG5ldGRldi0+bmFtZSwKLQkgICAgICAgICAgICAgICAgIG5ldGRldikpIHsKKwlpZiAoIXJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgSVJRRl9QUk9CRV9TSEFSRUQsCisJCQkgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CiAgCQlzaGFyZWRfaW50ID0gRkFMU0U7Ci0gCX0gZWxzZSBpZiAocmVxdWVzdF9pcnEoaXJxLCAmZTEwMDBfdGVzdF9pbnRyLCBTQV9TSElSUSwKKyAJfSBlbHNlIGlmIChyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIElSUUZfU0hBUkVELAogCQkJICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKXsKIAkJKmRhdGEgPSAxOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggMzJiN2Q0NC4uZjc3NjI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJfQogI2VuZGlmCiAJaWYgKChlcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsICZlMTAwMF9pbnRyLAotCQkgICAgICAgICAgICAgIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJICAgICAgICAgICAgICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwKIAkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvLmMgYi9kcml2ZXJzL25ldC9lZXByby5jCmluZGV4IGU3MGYxNzIuLjIwZDMxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvZWVwcm8uYwpAQCAtOTIwLDcgKzkyMCw3IEBACiAKIAkJZWVwcm9fc3cyYmFuazAoaW9hZGRyKTsgLyogU3dpdGNoIGJhY2sgdG8gQmFuayAwICovCiAKLQkJaWYgKHJlcXVlc3RfaXJxICgqaXJxcCwgTlVMTCwgU0FfU0hJUlEsICJib2d1cyIsIGRldikgIT0gRUJVU1kpIHsKKwkJaWYgKHJlcXVlc3RfaXJxICgqaXJxcCwgTlVMTCwgSVJRRl9TSEFSRUQsICJib2d1cyIsIGRldikgIT0gRUJVU1kpIHsKIAkJCXVuc2lnbmVkIGxvbmcgaXJxX21hc2s7CiAJCQkvKiBUd2lua2xlIHRoZSBpbnRlcnJ1cHQsIGFuZCBjaGVjayBpZiBpdCdzIHNlZW4gKi8KIAkJCWlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXBybzEwMC5jIGIvZHJpdmVycy9uZXQvZWVwcm8xMDAuYwppbmRleCBlY2Y1YWQ4Li4yYWQzMjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXBybzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VlcHJvMTAwLmMKQEAgLTg3LDcgKzg3LDYgQEAKIC8qIFNpemUgb2YgYW4gcHJlLWFsbG9jYXRlZCBSeCBidWZmZXI6IDxFdGhlcm5ldCBNVFU+ICsgc2xhY2suKi8KICNkZWZpbmUgUEtUX0JVRl9TWgkJMTUzNgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTk3OCw3ICs5NzcsNyBAQAogCXNwLT5pbl9pbnRlcnJ1cHQgPSAwOwogCiAJLyogLi4gd2UgY2FuIHNhZmVseSB0YWtlIGhhbmRsZXIgY2FsbHMgZHVyaW5nIGluaXQuICovCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZzcGVlZG9faW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc3BlZWRvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCXJldHVybiByZXR2YWw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKaW5kZXggYTc0YjIwNy4uMzMyOTFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYworKysgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCkBAIC05Nyw3ICs5Nyw2IEBACiAjZGVmaW5lIExPQ0tVUDE2IDAKICNlbmRpZgogICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCmluZGV4IGVlMzRhMTYuLjlmM2UwOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogI2RlZmluZSBUWF9GSUZPX1RIUkVTSCAyNTYKICNkZWZpbmUgUlhfRklGT19USFJFU0ggMQkJLyogMC0zLCAwPT0zMiwgNjQsOTYsIG9yIDM9PTEyOCBieXRlcyAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNzE0LDcgKzcxMyw3IEBACiAJLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KIAlvdXRsKDB4NDAwMSwgaW9hZGRyICsgR0VOQ1RMKTsKIAotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZlcGljX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkpCisJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmVwaWNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkKIAkJcmV0dXJuIHJldHZhbDsKIAogCWVwaWNfaW5pdF9yaW5nKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IDEzZWNhN2UuLmM3MDE5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCkBAIC04MzQsNyArODM0LDcgQEAKIAogCWlvd3JpdGUzMigweDAwMDAwMDAxLCBpb2FkZHIgKyBCQ1IpOwkvKiBSZXNldCAqLwogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmaW50cl9oYW5kbGVyLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKQorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmludHJfaGFuZGxlciwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCBkYjY5NGM4Li45YjQwMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtMjUsNyArMjUsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgTWFjcSBFbGVjdHJvbmlxdWUgU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfOHh4LW5ldHRhLmMgYi9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY184eHgtbmV0dGEuYwppbmRleCAyOWMyNzVlLi43OTBkOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY184eHgtbmV0dGEuYworKysgYi9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY184eHgtbmV0dGEuYwpAQCAtMiw3ICsyLDYgQEAKICAqIEZFQyBpbnN0YW50YXRpYXRpb24gZmlsZSBmb3IgTkVUVEEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jCmluZGV4IDdlNDMzODAuLjI4MmIxNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21paS5jIGIvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWlpLmMKaW5kZXggM2I0NGFjMS4uZDNjMTZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWlpLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggMjFiZTRmYS4uMDM3ZDg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTI2MjIsMjEgKzI2MjIsMjEgQEAKIAkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKIAkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUICYmICFpbnRyX3Rlc3QpIHsKIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgcnggaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCAmbnZfbmljX2lycV9yeCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCQkJCQlnb3RvIG91dF9lcnI7CiAJCQkJfQogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLCAmbnZfbmljX2lycV90eCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciB0eCAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CiAJCQkJCWdvdG8gb3V0X2ZyZWVfcng7CiAJCQkJfQogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBsaW5rIGFuZCB0aW1lciBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IsICZudl9uaWNfaXJxX290aGVyLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLCAmbnZfbmljX2lycV9vdGhlciwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciBsaW5rICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKQEAgLTI2NTEsOSArMjY1MSw5IEBACiAJCQl9IGVsc2UgewogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwgaW50ZXJydXB0cyAqLwogCQkJCWlmICgoIWludHJfdGVzdCAmJgotCQkJCSAgICAgcmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CiAJCQkJICAgIChpbnRyX3Rlc3QgJiYKLQkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkpIHsKKwkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxX3Rlc3QsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwpAQCAtMjY2OSw4ICsyNjY5LDggQEAKIAlpZiAocmV0ICE9IDAgJiYgbnAtPm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFKSB7CiAJCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2kobnAtPnBjaV9kZXYpKSA9PSAwKSB7CiAJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9FTkFCTEVEOwotCQkJaWYgKCghaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8Ci0JCQkgICAgKGludHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApKSB7CisJCQlpZiAoKCFpbnRyX3Rlc3QgJiYgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCSAgICAoaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOwogCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOwpAQCAtMjY4NSw4ICsyNjg1LDggQEAKIAkJfQogCX0KIAlpZiAocmV0ICE9IDApIHsKLQkJaWYgKCghaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8Ci0JCSAgICAoaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkpCisJCWlmICgoIWludHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAorCQkgICAgKGludHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApKQogCQkJZ290byBvdXRfZXJyOwogCiAJfQpAQCAtMjczNSwyMSArMjczNSwyMSBAQAogCiAJaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikpIHsKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CisJCQlkaXNhYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IpOwogCQllbHNlCi0JCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJCQlkaXNhYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKIAkJbWFzayA9IG5wLT5pcnFtYXNrOwogCX0gZWxzZSB7CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JYX0FMTCkgewotCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKKwkJCWRpc2FibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKIAkJCW1hc2sgfD0gTlZSRUdfSVJRX1JYX0FMTDsKIAkJfQogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9UWF9BTEwpIHsKLQkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCQlkaXNhYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CiAJCQltYXNrIHw9IE5WUkVHX0lSUV9UWF9BTEw7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfT1RIRVIpIHsKLQkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJCQlkaXNhYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CiAJCQltYXNrIHw9IE5WUkVHX0lSUV9PVEhFUjsKIAkJfQogCX0KQEAgLTI3NjEsMjMgKzI3NjEsMjMgQEAKIAlwY2lfcHVzaChiYXNlKTsKIAogCWlmICghdXNpbmdfbXVsdGlfaXJxcyhkZXYpKSB7Ci0JCW52X25pY19pcnEoKGludCkgMCwgKHZvaWQgKikgZGF0YSwgKHN0cnVjdCBwdF9yZWdzICopIE5VTEwpOworCQludl9uaWNfaXJxKDAsIGRldiwgTlVMTCk7CiAJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKLQkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CisJCQllbmFibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CiAJCWVsc2UKLQkJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCQkJZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKIAl9IGVsc2UgewogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCW52X25pY19pcnFfcngoKGludCkgMCwgKHZvaWQgKikgZGF0YSwgKHN0cnVjdCBwdF9yZWdzICopIE5VTEwpOwotCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOworCQkJbnZfbmljX2lycV9yeCgwLCBkZXYsIE5VTEwpOworCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfVFhfQUxMKSB7Ci0JCQludl9uaWNfaXJxX3R4KChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKLQkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yKTsKKwkJCW52X25pY19pcnFfdHgoMCwgZGV2LCBOVUxMKTsKKwkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwogCQl9CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX09USEVSKSB7Ci0JCQludl9uaWNfaXJxX290aGVyKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKLQkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yKTsKKwkJCW52X25pY19pcnFfb3RoZXIoMCwgZGV2LCBOVUxMKTsKKwkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggMTk2Mjk4Zi4uZjZhYmZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTY3Miw3ICs2NzEsNyBAQAogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkoKmZlcC0+b3BzLT5wcmVfcmVxdWVzdF9pcnEpKGRldiwgaXJxKTsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoaXJxLCBpcnFmLCBTQV9TSElSUSwgbmFtZSwgZGV2KTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEoaXJxLCBpcnFmLCBJUlFGX1NIQVJFRCwgbmFtZSwgZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgZnNfZnJlZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1taWkuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1taWkuYwppbmRleCAwY2QwNzE1Li5iN2U2ZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1paS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKaW5kZXggOTVlMmJiOC4uNjRlMjA5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCAzZGFkNjlkLi5lMDk1NDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtMTIsNyArMTIsNiBAQAogICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCmluZGV4IGE3NzJiMjguLmVhYTI0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYwppbmRleCAyNGE1ZTJlLi40OGY5Y2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZpeGVkLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1maXhlZC5jCmluZGV4IGIzZTE5MmQuLmFlNGE5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZpeGVkLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZml4ZWQuYwpAQCAtMTMsNyArMTMsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMjE4ZDMxNzYuLmViYmJkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTY0LDcgKzY0LDYgQEAKICAqICBUaGUgZHJpdmVyIHRoZW4gY2xlYW5zIHVwIHRoZSBidWZmZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggMTI3Yzk4Yy4uZjg3YmJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfX0dJQU5GQVJfSAogI2RlZmluZSBfX0dJQU5GQVJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggZDY5Njk4Yy4uZTBmNTA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqICBieSByZWZlcmVuY2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwppbmRleCBjNmI3MjU1Li5jOTJlNjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggYTZkNWM0My4uZThhMThmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIFN5c2ZzIGZpbGUgY3JlYXRpb24gYW5kIG1hbmFnZW1lbnQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYyBiL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYwppbmRleCAyZDI0MzU0Li40OWRhY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCkBAIC0xMDMwLDcgKzEwMzAsNyBAQAogCX0KIAogCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZndDk2MTAwX2ludGVycnVwdCwKLQkJCQkgIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikpKSB7CisJCQkJICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkgewogCQllcnIoInVuYWJsZSB0byBnZXQgSVJRICVkXG4iLCBkZXYtPmlycSk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oCmluZGV4IDM5NTg2OWMuLjJhODMzMTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIF9HVDk2MTAwRVRIX0gKICNkZWZpbmUgX0dUOTYxMDBFVEhfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2dhbGlsZW8tYm9hcmRzL2d0OTYxMDAuaD4KIAogI2RlZmluZSBkYmcobHZsLCBmb3JtYXQsIGFyZy4uLikgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IDBlYTRjYjQuLjdiY2Q5MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCXUzMiByeF9pbnRfdmFyLCB0eF9pbnRfdmFyOwogCXUxNiBmaWZvX2luZm87CiAKLQlpID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZoYW1hY2hpX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZoYW1hY2hpX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoaSkKIAkJcmV0dXJuIGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IGQxMjYwNWYuLjg2YjNiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtMTIsNyArMTIsNiBAQAogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1d2FsdC5ubC5tdWduZXQub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCmluZGV4IDIzMjc5M2QuLjU1OTA2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYwpAQCAtNDM0LDcgKzQzNCw3IEBACiAJb3V0YigwLCBGQ1IoZGV2LT5iYXNlX2FkZHIpKTsgIC8qIGRpc2FibGUgRklGT3MgKi8KIAlvdXRiKDB4MGQsIE1DUihkZXYtPmJhc2VfYWRkcikpOwogCW91dGIoMCwgSUVSKGRldi0+YmFzZV9hZGRyKSk7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzZXIxMl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgc2VyMTJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkiYmF5Y29tX3Nlcl9mZHgiLCBkZXYpKSB7CiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTRVIxMl9FWFRFTlQpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMKaW5kZXggYmU1OTZhMy4uZGU5NWRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAlvdXRiKDAsIEZDUihkZXYtPmJhc2VfYWRkcikpOyAgLyogZGlzYWJsZSBGSUZPcyAqLwogCW91dGIoMHgwZCwgTUNSKGRldi0+YmFzZV9hZGRyKSk7CiAJb3V0YigwLCBJRVIoZGV2LT5iYXNlX2FkZHIpKTsKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNlcjEyX2ludGVycnVwdCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzZXIxMl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSJiYXljb21fc2VyMTIiLCBkZXYpKSB7CiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTRVIxMl9FWFRFTlQpOyAgICAgICAKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCmluZGV4IGNiNDNhOWQuLjA2NDFmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwpAQCAtNTQsNyArNTQsNiBAQAogICoJQlBRICAgMDA0CUpvZXJnKERMMUJLRSkJCUZpeGVkIHRvIG5vdCBsb2NrIHVwIG9uIGlmY29uZmlnLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwppbmRleCAzZWJiYmU1Li5kODcxNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMDUgUmFsZiBCYWVjaGxlIERMNVJCIDxyYWxmQGxpbnV4LW1pcHMub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAwNSBUaG9tYXMgT3N0ZXJyaWVkIERMOVNBVSA8dGhvbWFzQHgtYmVyZy5pbi1iZXJsaW4uZGU+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IDU5Mjc3ODQuLmRmNGI2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCkBAIC0xNDgsNyArMTQ4LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CkBAIC0xNzM3LDcgKzE3MzYsNyBAQAogCQkJCQogCQkJaWYgKCFJdmVjW2h3Y2ZnLmlycV0udXNlZCAmJiBod2NmZy5pcnEpCiAJCQl7Ci0JCQkJaWYgKHJlcXVlc3RfaXJxKGh3Y2ZnLmlycSwgc2NjX2lzciwgU0FfSU5URVJSVVBULCAiQVguMjUgU0NDIiwgTlVMTCkpCisJCQkJaWYgKHJlcXVlc3RfaXJxKGh3Y2ZnLmlycSwgc2NjX2lzciwgSVJRRl9ESVNBQkxFRCwgIkFYLjI1IFNDQyIsIE5VTEwpKQogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6ODUzMGRydjogd2FybmluZywgY2Fubm90IGdldCBJUlEgJWRcbiIsIGh3Y2ZnLmlycSk7CiAJCQkJZWxzZQogCQkJCQlJdmVjW2h3Y2ZnLmlycV0udXNlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCmluZGV4IGI0OTg4NDAuLmY5OGY1NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCkBAIC00Miw3ICs0Miw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CkBAIC04NzQsNyArODczLDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9iYXNlOwogCX0KIAlvdXRiKDAsIElFUihkZXYtPmJhc2VfYWRkcikpOwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgeWFtX2ludGVycnVwdCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkgeworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgeWFtX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogaXJxICVkIGJ1c3lcbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3JlbGVhc2VfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IGRkMWRjMzIuLmU3ZDliZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAkvKiBOZXc6IGlmIGJ1cyBpcyBQQ0kgb3IgRUlTQSwgaW50ZXJydXB0cyBtaWdodCBiZSBzaGFyZWQgaW50ZXJydXB0cyAqLwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgaHAxMDBfaW50ZXJydXB0LAogCQkJbHAtPmJ1cyA9PSBIUDEwMF9CVVNfUENJIHx8IGxwLT5idXMgPT0KLQkJCUhQMTAwX0JVU19FSVNBID8gU0FfU0hJUlEgOiBTQV9JTlRFUlJVUFQsCisJCQlIUDEwMF9CVVNfRUlTQSA/IElSUUZfU0hBUkVEIDogSVJRRl9ESVNBQkxFRCwKIAkJCSJocDEwMCIsIGRldikpIHsKIAkJcHJpbnRrKCJocDEwMDogJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAkJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeWRyYS5jIGIvZHJpdmVycy9uZXQvaHlkcmEuYwppbmRleCBkOWZiOGU3Li45MTMyNmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeWRyYS5jCisrKyBiL2RyaXZlcnMvbmV0L2h5ZHJhLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgIGRldi0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwogCiAgICAgLyogSW5zdGFsbCB0aGUgSW50ZXJydXB0IGhhbmRsZXIgKi8KLSAgICBpZiAocmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBlaV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAiSHlkcmEgRXRoZXJuZXQiLAorICAgIGlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVpX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJIeWRyYSBFdGhlcm5ldCIsCiAJCSAgICBkZXYpKSB7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hYy5oCmluZGV4IGMyZGFlNjAuLjk3ZWQyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWMuaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBfX0lCTV9FTUFDX0hfCiAjZGVmaW5lIF9fSUJNX0VNQUNfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIFRoaXMgaXMgYSBzaW1wbGUgY2hlY2sgdG8gcHJldmVudCB1c2Ugb2YgdGhpcyBkcml2ZXIgb24gbm9uLXRlc3RlZCBTb0NzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMKaW5kZXggN2U0OTUyMi4uODI0NjhlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuYwpAQCAtMTksNyArMTksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuaAppbmRleCBmNjEyNzNiLi5kYWJiOTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9fSUJNX0VNQUNfQ09SRV9IXwogI2RlZmluZSBfX0lCTV9FTUFDX0NPUkVfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL29jcC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2RlYnVnLmMKaW5kZXggYzdlMWVjZi4uYzM2NDU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19kZWJ1Zy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2RlYnVnLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19kZWJ1Zy5oCmluZGV4IGU4NWZiZTAuLjU3NjEzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfX0lCTV9FTUFDX0RFQlVHX0hfCiAjZGVmaW5lIF9fSUJNX0VNQUNfREVCVUdfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJpYm1fZW1hY19jb3JlLmgiCiAjaW5jbHVkZSAiaWJtX2VtYWNfbWFsLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuYyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5jCmluZGV4IGRhODhkNDMuLmFmNTBlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCmluZGV4IDJhMmQzYjIuLmY3M2YxMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCkBAIC0xOSw3ICsxOSw2IEBACiAjaWZuZGVmIF9fSUJNX0VNQUNfTUFMX0hfCiAjZGVmaW5lIF9fSUJNX0VNQUNfTUFMX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYwppbmRleCA2NzkzNWRkLi40YTk3MDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYwpAQCAtMTIsNyArMTIsNiBAQAogICogKGMpIDIwMDQtMjAwNSwgRXVnZW5lIFN1cm92ZWdpbiA8ZWJzQGVic2hvbWUubmV0PgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuYwppbmRleCBmMGIxZmZiLi41M2QyODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmgKaW5kZXggN2YwM2Q1My4uOTRhYmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZuZGVmIF9JQk1fRU1BQ19SR01JSV9IXwogI2RlZmluZSBfSUJNX0VNQUNfUkdNSUlfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBSR01JSSBicmlkZ2UgKi8KIHN0cnVjdCByZ21paV9yZWdzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3RhaC5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfdGFoLmMKaW5kZXggYWYwOGFmYy4uZTI4N2I0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfdGFoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfdGFoLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiaWJtX2VtYWNfY29yZS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfdGFoLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaAppbmRleCA5Mjk5YjVkLi4zODE1Mzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaAorKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfSUJNX0VNQUNfVEFIX0gKICNkZWZpbmUgX0lCTV9FTUFDX1RBSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL29jcC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmMKaW5kZXggZTEyOWUwYS4uMzdkYzhmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuYwpAQCAtMTYsNyArMTYsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmgKaW5kZXggOTJjODU0NC4uOTcyZTNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5oCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuaApAQCAtMTksNyArMTksNiBAQAogI2lmbmRlZiBfSUJNX0VNQUNfWk1JSV9IXwogI2RlZmluZSBfSUJNX0VNQUNfWk1JSV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9vY3AuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDUxZmQ1MTYuLjJhOTVkNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCiAJLyogcmVnaXN0ZXIgcmVzb3VyY2VzIC0gb25seSBuZWNlc3NhcnkgZm9yIElSUSAqLwogCi0JcmVzdWx0ID0gcmVxdWVzdF9pcnEocHJpdi0+cmVhbGlycSwgaXJxX2hhbmRsZXIsIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOworCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHByaXYtPnJlYWxpcnEsIGlycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAkJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCA0YzJlNzI3Li4wNDY0ZTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0zMyw3ICszMyw2IEBACiAgIC0gcG9zc2libHkgcmVtb3ZlIHByb2NmcyBzdXBwb3J0CiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCAyZTIyMmVmLi4zYTQyYWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZmIuYworKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtMjcsNyArMjcsNiBAQAogKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwppbmRleCBlNzZlNmU3Li42OGQ4YWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNkZWZpbmUgSU9DM19OQU1FCSJpb2MzLWV0aCIKICNkZWZpbmUgSU9DM19WRVJTSU9OCSIyLjYuMy0zIgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDY0LDcgKzEwNjMsNyBAQAogewogCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgaW9jM19pbnRlcnJ1cHQsIFNBX1NISVJRLCBpb2MzX3N0ciwgZGV2KSkgeworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgaW9jM19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBpb2MzX3N0ciwgZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBnZXQgaXJxICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAogCQlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZwppbmRleCBkMmNlNDg5Li5lOWU2ZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogY29uZmlnIEFVMTAwMF9GSVIKIAl0cmlzdGF0ZSAiQWxjaGVteSBBdTEwMDAgU0lSL0ZJUiIKLQlkZXBlbmRzIG9uIE1JUFNfQVUxMDAwICYmIElSREEKKwlkZXBlbmRzIG9uIFNPQ19BVTEwMDAgJiYgSVJEQQogCiBjb25maWcgU01DX0lSQ0NfRklSCiAJdHJpc3RhdGUgIlNNU0MgSXJDQyAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKaW5kZXggZTZiMTk4NS4uN2IyYjQxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IDkxMGMwY2EuLjMzYzA3ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTEzNzIsNyArMTM3Miw3IEBACiAgICAgcmV0dXJuIDA7CiAKICAgaWYgKHJlcXVlc3RfaXJxIChzZWxmLT5pby5pcnEsIHRvc2hvYm9lX2ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAgICBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgZGV2LT5uYW1lLCAodm9pZCAqKSBzZWxmKSkKKyAgICAgICAgICAgICAgICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgKHZvaWQgKikgc2VsZikpCiAgICAgewogICAgICAgcmV0dXJuIC1FQUdBSU47CiAgICAgfQpAQCAtMTU3Myw3ICsxNTczLDcgQEAKICAgc2VsZi0+aW8uZmlyX2Jhc2UgPSBzZWxmLT5iYXNlOwogICBzZWxmLT5pby5maXJfZXh0ID0gT0JPRV9JT19FWFRFTlQ7CiAgIHNlbGYtPmlvLmlycSA9IHBjaV9kZXYtPmlycTsKLSAgc2VsZi0+aW8uaXJxZmxhZ3MgPSBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVDsKKyAgc2VsZi0+aW8uaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQ7CiAKICAgc2VsZi0+c3BlZWQgPSBzZWxmLT5pby5zcGVlZCA9IDk2MDA7CiAgIHNlbGYtPmFzeW5jID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKaW5kZXggNzU0Mjk3Zi4uNDdmNmY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogbW9kdWxlX3BhcmFtKHRyYW5zY2VpdmVyX3R5cGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRyYW5zY2VpdmVyX3R5cGUsICJJUiB0cmFuc2NlaXZlciB0eXBlLCBzZWUgbWNzNzc4MC5oLiIpOwogCi1zdHJ1Y3QgdXNiX2RyaXZlciBtY3NfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1jc19kcml2ZXIgPSB7CiAJLm5hbWUgPSAibWNzNzc4MCIsCiAJLnByb2JlID0gbWNzX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gbWNzX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCmluZGV4IGUxYWE5OTEuLmFmYjE5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBJbmZyYS1yZWQgZHJpdmVyIChTSVIvRklSKSBmb3IgdGhlIFBYQTJ4eCBlbWJlZGRlZCBtaWNyb3Byb2Nlc3NvcgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggZjUzMDY4Ni4uOGQ1YTI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKglwb3dlcl9sZXZlOmxldmVsCS0gc2V0IHRoZSB0cmFuc21pdHRlciBwb3dlciBsZXZlbAogICoJdHhfbHBtOjB8MQkJLSBzZXQgdHJhbnNtaXQgbG93IHBvd2VyIG1vZGUKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKaW5kZXggZDcwYjllOC4uOTJkNjQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICAKICNkZWZpbmUgRFJJVkVSX05BTUUgCQkidmxzaV9pciIKQEAgLTE1MTgsNyArMTUxNyw3IEBACiAKIAlvdXRiKElSSU5UUl9JTlRfTUFTSywgbmRldi0+YmFzZV9hZGRyK1ZMU0lfUElPX0lSSU5UUik7CiAKLQlpZiAocmVxdWVzdF9pcnEobmRldi0+aXJxLCB2bHNpX2ludGVycnVwdCwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgdmxzaV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJZHJpdmVybmFtZSwgbmRldikpIHsKIAkJSVJEQV9XQVJOSU5HKCIlczogY291bGRuJ3QgZ2V0IElSUTogJWRcbiIsCiAJCQkgICAgIF9fRlVOQ1RJT05fXywgbmRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jIGIvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKaW5kZXggOTMzOTRkNy4uY2RjMTQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKQEAgLTU2LDcgKzU2LDYgQEAKICAqIG51bWJlciBvZiBwYWNrZXRzIG91dHN0YW5kaW5nIHRvIGEgcmVtb3RlIHBhcnRpdGlvbiBhdCBhIHRpbWUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKaW5kZXggYTgzZWYyOC4uODJiNjdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNkZWZpbmUgX0lYR0JfSF8KIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggOGJiMzJmOS4uYjkxZTA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIAogI2VuZGlmCiAJaWYoKGVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgJml4Z2JfaW50ciwKLQkJCQkgIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJCQkgIElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAogCQkJICAgICAgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSkpIHsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnRlcnJ1cHQgRXJyb3I6ICVkXG4iLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9jYWxlYi5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9jYWxlYi5jCmluZGV4IDM1OTVlMTAuLjdkZWE1YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvY2FsZWIuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2NhbGViLmMKQEAgLTksNyArOSw2IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYwppbmRleCBiNjdmNTg2Li5kM2Y0MjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYwpAQCAtOSw3ICs5LDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwLW1zZi5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHAyNDAwLW1zZi5jCmluZGV4IDQ4YTNhODkuLjllYzM4ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwMjQwMC1tc2YuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cDI0MDAtbXNmLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IGZiYzJkMjEuLjZlZWI5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtOSw3ICs5LDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMjM2LDcgKzIzNSw3IEBACiAKIAlpZiAoIW5kc19vcGVuKyspIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEoSVJRX0lYUDIwMDBfVEhEQTAsIGl4cGRldl9pbnRlcnJ1cHQsCi0JCQkJCVNBX1NISVJRLCAiaXhwMjAwMF9ldGgiLCBuZHMpOworCQkJCQlJUlFGX1NIQVJFRCwgIml4cDIwMDBfZXRoIiwgbmRzKTsKIAkJaWYgKGVycikgewogCQkJbmRzX29wZW4tLTsKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9wbTMzODYuYwppbmRleCA1MjI0NjUxLi5lMDhkM2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL3BtMzM4Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvcG0zMzg2LmMKQEAgLTksNyArOSw2IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwppbmRleCAyNzJkMzMxZC4uNjYxZDc1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogbW9kdWxlX3BhcmFtKHNvbmljX2RlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzb25pY19kZWJ1ZywgImphenpzb25pYyBkZWJ1ZyBsZXZlbCAoMS00KSIpOwogCi0jZGVmaW5lIFNPTklDX0lSUV9GTEFHIFNBX0lOVEVSUlVQVAorI2RlZmluZSBTT05JQ19JUlFfRkxBRyBJUlFGX0RJU0FCTEVECiAKICNpbmNsdWRlICJzb25pYy5jIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9scDQ4NmUuYyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCmluZGV4IGJmM2YzNDMuLmI3ODNhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCkBAIC04NTEsNyArODUxLDcgQEAKIHsKIAlpbnQgaTsKIAotCWkgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmk1OTZfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCWkgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmk1OTZfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSAlZCBub3QgZnJlZVxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSk7CiAJCXJldHVybiBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjZS5jCmluZGV4IDc3NzkyYjIuLjI5ZTRiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2UuYworKysgYi9kcml2ZXJzL25ldC9tYWNlLmMKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMjQzLDEyICsyNDIsMTIgQEAKIAl9CiAJcmMgPSByZXF1ZXN0X2lycShtcC0+dHhfZG1hX2ludHIsIG1hY2VfdHhkbWFfaW50ciwgMCwgIk1BQ0UtdHhkbWEiLCBkZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIk1BQ0U6IGNhbid0IGdldCBpcnEgJWRcbiIsIG1hY2UtPmludHJzWzFdLmxpbmUpOworCQlwcmludGsoS0VSTl9FUlIgIk1BQ0U6IGNhbid0IGdldCBpcnEgJWRcbiIsIG1wLT50eF9kbWFfaW50cik7CiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAlyYyA9IHJlcXVlc3RfaXJxKG1wLT5yeF9kbWFfaW50ciwgbWFjZV9yeGRtYV9pbnRyLCAwLCAiTUFDRS1yeGRtYSIsIGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTUFDRTogY2FuJ3QgZ2V0IGlycSAlZFxuIiwgbWFjZS0+aW50cnNbMl0ubGluZSk7CisJCXByaW50ayhLRVJOX0VSUiAiTUFDRTogY2FuJ3QgZ2V0IGlycSAlZFxuIiwgbXAtPnJ4X2RtYV9pbnRyKTsKIAkJZ290byBlcnJfZnJlZV90eF9pcnE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9taXBzbmV0LmMgYi9kcml2ZXJzL25ldC9taXBzbmV0LmMKaW5kZXggYmJmZmI1OC4uMDdlNThmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWlwc25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L21pcHNuZXQuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJcHJfZGVidWcoIiVzOiBtaXBzbmV0X29wZW5cbiIsIGRldi0+bmFtZSk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJm1pcHNuZXRfaW50ZXJydXB0LAotCQkJICBTQV9TSElSUSwgZGV2LT5uYW1lLCAodm9pZCAqKSBkZXYpOworCQkJICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCAodm9pZCAqKSBkZXYpOwogCiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygiJXM6ICVzKCk6IGNhbid0IGdldCBpcnEgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCA2MjVmZjYxLi43NjBjNjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTc3OCw3ICs3NzgsNyBAQAogCWludCBlcnI7CiAKIAllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgbXY2NDN4eF9ldGhfaW50X2hhbmRsZXIsCi0JCQlTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkNhbiBub3QgYXNzaWduIElSUSBudW1iZXIgdG8gTVY2NDNYWF9ldGglZFxuIiwKIAkJCQkJCQkJcG9ydF9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguaCBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmgKaW5kZXggNDI2MmMxZC4uMzNjNWZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5oCkBAIC0yNTgsNyArMjU4LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmV0dXJuX2luZm87CS8qIFVzZXIgcmVzb3VyY2UgcmV0dXJuIGluZm9ybWF0aW9uICovCiB9OwogCi0vKiBFdGhlcm5ldCBwb3J0IHNwZWNpZmljIGluZm9tYXRpb24gKi8KKy8qIEV0aGVybmV0IHBvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAogc3RydWN0IG12NjQzeHhfbWliX2NvdW50ZXJzIHsKIAl1NjQgZ29vZF9vY3RldHNfcmVjZWl2ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwppbmRleCBkYmRmMTg5Li43MmFhZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKQEAgLTI0MTMsNyArMjQxMyw3IEBACiAJcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIFNBX1NISVJRLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgbXlyaTEwZ2VfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkgICAgIG5ldGRldi0+bmFtZSwgbWdwKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIElSUVxuIik7CkBAIC0yNjk0LDcgKzI2OTQsNyBAQAogCQkJbWdwLT5tc2lfZW5hYmxlZCA9IDE7CiAJfQogCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBteXJpMTBnZV9pbnRyLCBTQV9TSElSUSwKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIElSUUZfU0hBUkVELAogCQkJICAgICBuZXRkZXYtPm5hbWUsIG1ncCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCBkOWY2MTZmLi4xYjk2NWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtNyw3ICs3LDYgQEAKICAgICAgICAgIm15cmlfc2J1cy5jOnYyLjAgSnVuZSAyMywgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpXG4iOwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTA3MCw3ICsxMDY5LDcgQEAKIAkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlciBub3cuICovCiAJREVUKCgiUmVxdWVzdGluZyBNWVJJY29tIElSUSBsaW5lLlxuIikpOwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJm15cmlfaW50ZXJydXB0LAotCQkJU0FfU0hJUlEsICJNeXJpQ09NIEV0aGVybmV0IiwgKHZvaWQgKikgZGV2KSkgeworCQkJSVJRRl9TSEFSRUQsICJNeXJpQ09NIEV0aGVybmV0IiwgKHZvaWQgKikgZGV2KSkgewogCQlwcmludGsoIk15cmlDT006IENhbm5vdCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlci5cbiIpOwogCQlnb3RvIGVycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggNTY1NzA0OS4uOWRmMjYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMTM4LDcgKzEzOCw2IEBACiAJKiBiaWcgZW5kaWFuIHN1cHBvcnQgd2l0aCBDRkc6QkVNIGluc3RlYWQgb2YgY3B1X3RvX2xlMzIKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTE1NzUsNyArMTU3NCw3IEBACiAJLyogUmVzZXQgdGhlIGNoaXAsIGp1c3QgaW4gY2FzZS4gKi8KIAluYXRzZW1pX3Jlc2V0KGRldik7CiAKLQlpID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZpbnRyX2hhbmRsZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJaSA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmaW50cl9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChpKSByZXR1cm4gaTsKIAogCWlmIChuZXRpZl9tc2dfaWZ1cChucCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBjZWQ5ZmRiLi5mYTUwZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCiBzdGF0aWMgaW50IG5lMmtfcGNpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpbnQgcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4LWV0aC5jIGIvZHJpdmVycy9uZXQvbmV0eC1ldGguYwppbmRleCBiOTI0MzBjLi5iMTMxMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4LWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHgtZXRoLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXN0cnVjdCBuZXR4X2V0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAlpZiAocmVxdWVzdF9pcnEKLQkgICAgKG5kZXYtPmlycSwgJm5ldHhfZXRoX2ludGVycnVwdCwgU0FfU0hJUlEsIG5kZXYtPm5hbWUsIG5kZXYpKQorCSAgICAobmRldi0+aXJxLCAmbmV0eF9ldGhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgbmRldi0+bmFtZSwgbmRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJd3JpdGVsKG5kZXYtPmRldl9hZGRyWzBdIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCA3MDZhZWQ3Li43MDQyOTEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtOTYsNyArOTYsNiBAQAogLy8jZGVmaW5lIGRwcmludGsJCXByaW50awogI2RlZmluZSBkcHJpbnRrKHguLi4pCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xODgyLDcgKzE4ODEsNyBAQAogCiAJZGV2LT5JTVJfY2FjaGUgPSAwOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBuczgzODIwX2lycSwgU0FfU0hJUlEsCisJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLCBuczgzODIwX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkgIERSVl9OQU1FLCBuZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIm5zODM4MjA6IHVuYWJsZSB0byByZWdpc3RlciBpcnEgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCmluZGV4IGE3YmI1NGQuLjMzODhlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCkBAIC04NSw3ICs4NSw2IEBACiAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEwNzYsNyArMTA3NSw3IEBACiAKIAlEUFJJTlRLICgiRU5URVJcbiIpOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEgKGRldi0+aXJxLCBuZXRkcnZfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxIChkZXYtPmlycSwgbmV0ZHJ2X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIHJldHZhbCk7CiAJCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDJlYTY2YWMuLjI5N2U5ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAogICAgIGxpbmstPm9wZW4rKzsKIAotICAgIHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlaV9pcnFfd3JhcHBlciwgU0FfU0hJUlEsICJheG5ldF9jcyIsIGRldik7CisgICAgcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2lycV93cmFwcGVyLCBJUlFGX1NIQVJFRCwgImF4bmV0X2NzIiwgZGV2KTsKIAogICAgIGluZm8tPmxpbmtfc3RhdHVzID0gMHgwMDsKICAgICBpbml0X3RpbWVyKCZpbmZvLT53YXRjaGRvZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jCmluZGV4IDQ0MWRlODIuLjQ4NDM0ZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwpAQCAtMzg3LDcgKzM4NywxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgY29tMjAwMjBfaWRzW10gPSB7Ci0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNvbnRlbXBvcmFyeSBDb250cm9sIFN5c3RlbXMsIEluYy4iLCAiUENNMjAgQXJjbmV0IEFkYXB0ZXIiLCAweDU5OTkxNjY2LCAweDk1ZGZmZmFmKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ29udGVtcG9yYXJ5IENvbnRyb2wgU3lzdGVtcywgSW5jLiIsCisJCQkiUENNMjAgQXJjbmV0IEFkYXB0ZXIiLCAweDU5OTkxNjY2LCAweDk1ZGZmZmFmKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU29IYXJkIEFHIiwKKwkJCSJTSCBBUkMgUENNQ0lBIiwgMHhmODk5MTcyOSwgMHg2OWRmZjBjNyksCiAJUENNQ0lBX0RFVklDRV9OVUxMCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGNvbTIwMDIwX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IDY2MWJmZTUuLjBlY2ViZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC05OTgsNyArOTk4LDcgQEAKICAgICBsaW5rLT5vcGVuKys7CiAKICAgICBzZXRfbWlzY19yZWcoZGV2KTsKLSAgICByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlfaXJxX3dyYXBwZXIsIFNBX1NISVJRLCBkZXZfaW5mbywgZGV2KTsKKyAgICByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlfaXJxX3dyYXBwZXIsIElSUUZfU0hBUkVELCBkZXZfaW5mbywgZGV2KTsKIAogICAgIGluZm8tPnBoeV9pZCA9IGluZm8tPmV0aF9waHk7CiAgICAgaW5mby0+bGlua19zdGF0dXMgPSAweDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDBlMDFjNzUuLmQ3NjhmM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTE1NDEsNyArMTU0MSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJnBjbmV0MzJfaW50ZXJydXB0LAotCQkJbHAtPnNoYXJlZF9pcnEgPyBTQV9TSElSUSA6IDAsIGRldi0+bmFtZSwKKwkJCWxwLT5zaGFyZWRfaXJxID8gSVJRRl9TSEFSRUQgOiAwLCBkZXYtPm5hbWUsCiAJCQkodm9pZCAqKWRldikpIHsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jIGIvZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jCmluZGV4IDdkOGQ1MzQuLjNlZmI3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9jaWNhZGEuYworKysgYi9kcml2ZXJzL25ldC9waHkvY2ljYWRhLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMgYi9kcml2ZXJzL25ldC9waHkvZGF2aWNvbS5jCmluZGV4IDVlOTAwMmUuLmFhNzk4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYwpAQCAtMTMsNyArMTMsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2x4dC5jIGIvZHJpdmVycy9uZXQvcGh5L2x4dC5jCmluZGV4IDNmNzAyYzUuLjY5ZDIzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9seHQuYworKysgYi9kcml2ZXJzL25ldC9waHkvbHh0LmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCmluZGV4IGEyZDYzODYuLjBhZDI1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYwpAQCAtMTMsNyArMTMsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCAxYjIzNmJkLi4xZGRlMzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMTMsNyArMTMsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IDMzY2VjMmQuLjdkNWMyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTU1Nyw3ICs1NTYsNyBAQAogCUlOSVRfV09SSygmcGh5ZGV2LT5waHlfcXVldWUsIHBoeV9jaGFuZ2UsIHBoeWRldik7CiAKIAlpZiAocmVxdWVzdF9pcnEocGh5ZGV2LT5pcnEsIHBoeV9pbnRlcnJ1cHQsCi0JCQkJU0FfU0hJUlEsCisJCQkJSVJRRl9TSEFSRUQsCiAJCQkJInBoeV9pbnRlcnJ1cHQiLAogCQkJCXBoeWRldikgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCBnZXQgSVJRICVkIChQSFkpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggN2RhMGUzZC4uMWJjMWUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcXNlbWkuYyBiL2RyaXZlcnMvbmV0L3BoeS9xc2VtaS5jCmluZGV4IDY1ZDk5NWIuLjJiNTBlMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9xc2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9xc2VtaS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCBkNjQzYTA5Li4wZWM2ZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTIyLDEzICsyMiwxMSBAQAogICogPT1GSUxFVkVSU0lPTiAyMDA0MTEwOD09CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcHBfZGVmcy5oPgpAQCAtODYzLDEwICs4NjEsNiBAQAogCQkJZ290byBvdXRfY2hyZGV2OwogCQl9CiAJCWNsYXNzX2RldmljZV9jcmVhdGUocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLCBOVUxMLCAicHBwIik7Ci0JCWVyciA9IGRldmZzX21rX2NkZXYoTUtERVYoUFBQX01BSk9SLCAwKSwKLQkJCQlTX0lGQ0hSfFNfSVJVU1J8U19JV1VTUiwgInBwcCIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfY2xhc3M7CiAJfQogCiBvdXQ6CkBAIC04NzQsOSArODY4LDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgUFBQIGRldmljZSAoJWQpXG4iLCBlcnIpOwogCXJldHVybiBlcnI7CiAKLW91dF9jbGFzczoKLQljbGFzc19kZXZpY2VfZGVzdHJveShwcHBfY2xhc3MsIE1LREVWKFBQUF9NQUpPUiwwKSk7Ci0JY2xhc3NfZGVzdHJveShwcHBfY2xhc3MpOwogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiKTsKIAlnb3RvIG91dDsKQEAgLTI2ODEsNyArMjY3Miw2IEBACiAJY2FyZG1hcF9kZXN0cm95KCZhbGxfcHBwX3VuaXRzKTsKIAlpZiAodW5yZWdpc3Rlcl9jaHJkZXYoUFBQX01BSk9SLCAicHBwIikgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJQUFA6IGZhaWxlZCB0byB1bnJlZ2lzdGVyIFBQUCBkZXZpY2VcbiIpOwotCWRldmZzX3JlbW92ZSgicHBwIik7CiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3kocHBwX2NsYXNzLCBNS0RFVihQUFBfTUFKT1IsIDApKTsKIAljbGFzc19kZXN0cm95KHBwcF9jbGFzcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfbXBwZS5jIGIvZHJpdmVycy9uZXQvcHBwX21wcGUuYwppbmRleCAxOTg1ZDFiLi41MWZmOWE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX21wcGUuYworKysgYi9kcml2ZXJzL25ldC9wcHBfbXBwZS5jCkBAIC00Myw3ICs0Myw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBpbiAyLjYKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggMTJkMWNiMi4uMTZhMGVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xNzI2LDcgKzE3MjYsNyBAQAogCXJ0bDgxNjlfc2V0X3J4YnVmc2l6ZSh0cCwgZGV2KTsKIAogCXJldHZhbCA9Ci0JICAgIHJlcXVlc3RfaXJxKGRldi0+aXJxLCBydGw4MTY5X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwkgICAgcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHJ0bDgxNjlfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcnJ1bm5lci5jIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5jCmluZGV4IDE5YzJkZjkuLmMzZWQ3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3JydW5uZXIuYworKysgYi9kcml2ZXJzL25ldC9ycnVubmVyLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNkZWZpbmUgUlhfRE1BX1NLQlVGRiAxCiAjZGVmaW5lIFBLVF9DT1BZX1RIUkVTSE9MRCA1MTIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTEyNTMsNyArMTI1Miw3IEBACiAJcmVhZGwoJnJlZ3MtPkhvc3RDdHJsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgcnJfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBycl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlcXVlc3RlZCBJUlEgJWQgaXMgYnVzeVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEpOwogCQllY29kZSA9IC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ycnVubmVyLmggYi9kcml2ZXJzL25ldC9ycnVubmVyLmgKaW5kZXggMTBiYWFlNS4uMmMzYzkxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcnJ1bm5lci5oCisrKyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1JSVU5ORVJfSF8KICNkZWZpbmUgX1JSVU5ORVJfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaWYgKChCSVRTX1BFUl9MT05HICE9IDMyKSAmJiAoQklUU19QRVJfTE9ORyAhPSA2NCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggM2RlZmU1ZC4uYzZiNzdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtNDQsNyArNDQsNiBAQAogICogICAgIGFnZ3JlZ2F0ZWQgYXMgYSBzaW5nbGUgbGFyZ2UgcGFja2V0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzc2Miw3ICszNzYxLDcgQEAKIAkvKiBBZnRlciBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgSC9XLCByZWdpc3RlciBJU1IgKi8KIAlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0kpIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEoKGludCkgc3AtPnBkZXYtPmlycSwgczJpb19tc2lfaGFuZGxlLCAKLQkJCVNBX1NISVJRLCBzcC0+bmFtZSwgZGV2KTsKKwkJCUlSUUZfU0hBUkVELCBzcC0+bmFtZSwgZGV2KTsKIAkJaWYgKGVycikgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTVNJIHJlZ2lzdHJhdGlvbiBcCiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CkBAIC0zODAwLDcgKzM3OTksNyBAQAogCQl9CiAJfQogCWlmIChzcC0+aW50cl90eXBlID09IElOVEEpIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEoKGludCkgc3AtPnBkZXYtPmlycSwgczJpb19pc3IsIFNBX1NISVJRLAorCQllcnIgPSByZXF1ZXN0X2lycSgoaW50KSBzcC0+cGRldi0+aXJxLCBzMmlvX2lzciwgSVJRRl9TSEFSRUQsCiAJCQkJc3AtPm5hbWUsIGRldik7CiAJCWlmIChlcnIpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IElTUiByZWdpc3RyYXRpb24gZmFpbGVkXG4iLApAQCAtMzk2MCw3ICszOTU5LDcgQEAKIAl0eGRwLT5Db250cm9sXzIgPSAwOwogI2lmZGVmIE5FVElGX0ZfVFNPCiAJbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1RDUFY0KSB7CisJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiAoU0tCX0dTT19UQ1BWNCB8IFNLQl9HU09fVENQVjYpKSB7CiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVENQX0xTT19FTjsKIAkJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9UQ1BfTFNPX01TUyhtc3MpOwogCX0KQEAgLTM5ODAsNyArMzk3OSw3IEBACiAJfQogCiAJZnJnX2xlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUFY0KSB7CisJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPT0gU0tCX0dTT19VRFApIHsKIAkJaW50IHVmb19zaXplOwogCiAJCXVmb19zaXplID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKQEAgLTQwMDksNyArNDAwOCw3IEBACiAJdHhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpIHNrYjsKIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0JVRkZFUjBfU0laRShmcmdfbGVuKTsKIAotCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID09IFNLQl9HU09fVURQVjQpCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPT0gU0tCX0dTT19VRFApCiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwogCiAJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CkBAIC00MDI0LDEyICs0MDIzLDEyIEBACiAJCSAgICAoc3AtPnBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAogCQkgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl0eGRwLT5Db250cm9sXzEgPSBUWERfQlVGRkVSMF9TSVpFKGZyYWctPnNpemUpOwotCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUFY0KQorCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUCkKIAkJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwogCX0KIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0dBVEhFUl9DT0RFX0xBU1Q7CiAKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUFY0KQorCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID09IFNLQl9HU09fVURQKQogCQlmcmdfY250Kys7IC8qIGFzIFR4ZDAgd2FzIHVzZWQgZm9yIGluYmFuZCBoZWFkZXIgKi8KIAogCXR4X2ZpZm8gPSBtYWNfY29udHJvbC0+dHhfRklGT19zdGFydFtxdWV1ZV07CkBAIC00MDQzLDcgKzQwNDIsNyBAQAogCWlmIChtc3MpCiAJCXZhbDY0IHw9IFRYX0ZJRk9fU1BFQ0lBTF9GVU5DOwogI2VuZGlmCi0JaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPT0gU0tCX0dTT19VRFBWNCkKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUCkKIAkJdmFsNjQgfD0gVFhfRklGT19TUEVDSUFMX0ZVTkM7CiAJd3JpdGVxKHZhbDY0LCAmdHhfZmlmby0+TGlzdF9Db250cm9sKTsKIApAQCAtNzAyMSw2ICs3MDIwLDkgQEAKICNpZmRlZiBORVRJRl9GX1RTTwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAjZW5kaWYKKyNpZmRlZiBORVRJRl9GX1RTTzYKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKyNlbmRpZgogCWlmIChzcC0+ZGV2aWNlX3R5cGUgJiBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IDMyMDM3MzIuLmM0M2Y1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTY1Miw3ICs2NTIsNyBAQAogCW5pY190ICpuaWM7CiB9Zmlmb19pbmZvX3Q7CiAKLS8qIEluZm9tYXRpb24gcmVsYXRlZCB0byB0aGUgVHggYW5kIFJ4IEZJRk9zIGFuZCBSaW5ncyBvZiBYZW5hCisvKiBJbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBUeCBhbmQgUnggRklGT3MgYW5kIFJpbmdzIG9mIFhlbmEKICAqIGlzIG1haW50YWluZWQgaW4gdGhpcyBzdHJ1Y3R1cmUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IG1hY19pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCBmMmJlOWY4Li45YWIxNjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkJLyogUHJvY2Vzc29yIHR5cGUgZm9yIGNhY2hlIGFsaWdubWVudC4gKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTI0NTEsNyArMjQ1MCw3IEBACiAJICovCiAKIAlfX3Jhd19yZWFkcShzYy0+c2JtX2lzcik7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc2JtYWNfaW50ciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZzYm1hY19pbnRyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoYXBlci5jIGIvZHJpdmVycy9uZXQvc2hhcGVyLmMKaW5kZXggODhlMjEyMC4uYzc4MzJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hhcGVyLmMKKysrIGIvZHJpdmVycy9uZXQvc2hhcGVyLmMKQEAgLTY5LDcgKzY5LDYgQEAKICAqCQkJCSAyMDAwLzAzIEFuZGkgS2xlZW4KICAqLwogIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IGRmMzlmMzQuLmRmMGNiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogCiAJc2lzMTkwX3JlcXVlc3RfdGltZXIoZGV2KTsKIAotCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNpczE5MF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJcmMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc2lzMTkwX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGVycl9yZWxlYXNlX3RpbWVyXzI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggZDA1ODc0MS4uMjllZTdmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTEwMTMsNyArMTAxMyw3IEBACiAJLyogRXF1YWxpemVyIHdvcmthcm91bmQgUnVsZSAqLwogCXNpczYzMF9zZXRfZXEobmV0X2Rldiwgc2lzX3ByaXYtPmNoaXBzZXRfcmV2KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKG5ldF9kZXYtPmlycSwgJnNpczkwMF9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCXJldCA9IHJlcXVlc3RfaXJxKG5ldF9kZXYtPmlycSwgJnNpczkwMF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCQkJbmV0X2Rldi0+bmFtZSwgbmV0X2Rldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKaW5kZXggZjNlZmJkMS4uZWU2Mjg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKQEAgLTU3MCw5ICs1NzAsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7CiAKIAlpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID09IDIpIHsKLQkJIFJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBTa0dlSXNyLCBTQV9TSElSUSwgInNrOThsaW4iLCBkZXYpOworCQkgUmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIFNrR2VJc3IsIElSUUZfU0hBUkVELCAic2s5OGxpbiIsIGRldik7CiAJfSBlbHNlIGlmIChwQUMtPkdJbmkuR0lNYWNzRm91bmQgPT0gMSkgewotCQlSZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzck9uZVBvcnQsIFNBX1NISVJRLAorCQlSZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzck9uZVBvcnQsIElSUUZfU0hBUkVELAogCQkJInNrOThsaW4iLCBkZXYpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInNrOThsaW46IElsbGVnYWwgbnVtYmVyIG9mIHBvcnRzOiAlZFxuIiwKQEAgLTUwNzMsOSArNTA3Myw5IEBACiAJcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA9PSAyKQotCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzciwgU0FfU0hJUlEsICJzazk4bGluIiwgZGV2KTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIFNrR2VJc3IsIElSUUZfU0hBUkVELCAic2s5OGxpbiIsIGRldik7CiAJZWxzZQotCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgU2tHZUlzck9uZVBvcnQsIFNBX1NISVJRLCAic2s5OGxpbiIsIGRldik7CisJCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBTa0dlSXNyT25lUG9ydCwgSVJRRl9TSEFSRUQsICJzazk4bGluIiwgZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInNrOThsaW46IHVuYWJsZSB0byBhY3F1aXJlIElSUSAlZFxuIiwgZGV2LT5pcnEpOwogCQlwQUMtPkFsbG9jRmxhZyAmPSB+U0tfQUxMT0NfSVJROwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jCmluZGV4IDE3Nzg2MDU2Li4xZTY2MmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrdnBkLmMKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotCVBsZWFzZSByZWZlciBza3ZwZC50eHQgZm9yIGluZm9tYXRpb24gaG93IHRvIGluY2x1ZGUgdGhpcyBtb2R1bGUKKwlQbGVhc2UgcmVmZXIgc2t2cGQudHh0IGZvciBpbmZvcm1hdGlvbiBob3cgdG8gaW5jbHVkZSB0aGlzIG1vZHVsZQogICovCiBzdGF0aWMgY29uc3QgY2hhciBTeXNLb25uZWN0RmlsZUlkW10gPQogCSJAKCMpJElkOiBza3ZwZC5jLHYgMS4zNyAyMDAzLzAxLzEzIDEwOjQyOjQ1IHJzY2htaWR0IEV4cCAkIChDKSBTSyI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za19tY2EuYyBiL2RyaXZlcnMvbmV0L3NrX21jYS5jCmluZGV4IGU1ZDZkOTUuLjc5OWUwOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrX21jYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrX21jYS5jCkBAIC04MjQsNyArODI0LDcgQEAKIAkvKiByZWdpc3RlciByZXNvdXJjZXMgLSBvbmx5IG5lY2Vzc2FyeSBmb3IgSVJRICovCiAJcmVzdWx0ID0KIAkgICAgcmVxdWVzdF9pcnEocHJpdi0+cmVhbGlycSwgaXJxX2hhbmRsZXIsCi0JCQlTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sICJza19tY2EiLCBkZXYpOworCQkJSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sICJza19tY2EiLCBkZXYpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLCBkZXYtPm5hbWUsCiAJCSAgICAgICBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc2JhLmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc2JhLmgKaW5kZXggZGY3MTZjZC4uNjM4Y2YwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NiYS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zYmEuaApAQCAtMTMsNyArMTMsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFN5bmNocm9ub3VzIEJhbmR3aXRoIEFsbG9jYXRpb24gKFNCQSkgc3RydWN0cworICogU3luY2hyb25vdXMgQmFuZHdpZHRoIEFsbG9jYXRpb24gKFNCQSkgc3RydWN0cwogICovCiAgCiAjaWZuZGVmIF9TQkFfCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwppbmRleCBjN2ZiNjEzLi5iNTcxNGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC00OTcsNyArNDk3LDcgQEAKIAogCVBSSU5USyhLRVJOX0lORk8gImVudGVyaW5nIHNrZnBfb3BlblxuIik7CiAJLyogUmVnaXN0ZXIgSVJRIC0gc3VwcG9ydCBzaGFyZWQgaW50ZXJydXB0cyBieSBwYXNzaW5nIGRldmljZSBwdHIgKi8KLQllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgKHZvaWQgKikgc2tmcF9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKSBza2ZwX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDE5YTRhMTYuLjgyMjAwYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzM0Miw3ICszMzQxLDcgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfaHc7CiAJfQogCi0JZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBza2dlX2ludHIsIFNBX1NISVJRLCBEUlZfTkFNRSwgaHcpOworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2tnZV9pbnRyLCBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGh3KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgYXNzaWduIGlycSAlZFxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwpAQCAtMzM1NCw4ICszMzUzLDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCBEUlZfVkVSU0lPTiAiIGFkZHIgMHglbHggaXJxICVkIGNoaXAgJXMgcmV2ICVkXG4iLAotCSAgICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBkZXYtPmlycSwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCBEUlZfVkVSU0lPTiAiIGFkZHIgMHglbGx4IGlycSAlZCBjaGlwICVzIHJldiAlZFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBkZXYtPmlycSwKIAkgICAgICAgc2tnZV9ib2FyZF9uYW1lKGh3KSwgaHctPmNoaXBfcmV2KTsKIAogCWlmICgoZGV2ID0gc2tnZV9kZXZpbml0KGh3LCAwLCB1c2luZ19kYWMpKSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IGQzNTc3ODcuLjQxOGYxNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTMxODksNyArMzE4OCw3IEBACiAKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0lSUV9TVyk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNreTJfdGVzdF9pbnRyLCBTQV9TSElSUSwgRFJWX05BTUUsIGh3KTsKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNreTJfdGVzdF9pbnRyLCBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGh3KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgYXNzaWduIGlycSAlZFxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwpAQCAtMzMxMSw5ICszMzEwLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJ2JXMgYWRkciAweCVseCBpcnEgJWQgWXVrb24tJXMgKDB4JXgpIHJldiAlZFxuIiwKLQkgICAgICAgRFJWX1ZFUlNJT04sIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgcGRldi0+aXJxLAotCSAgICAgICB5dWtvbjJfbmFtZVtody0+Y2hpcF9pZCAtIENISVBfSURfWVVLT05fWExdLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJ2JXMgYWRkciAweCVsbHggaXJxICVkIFl1a29uLSVzICgweCV4KSByZXYgJWRcbiIsCisJICAgICAgIERSVl9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwkgICAgICAgcGRldi0+aXJxLCB5dWtvbjJfbmFtZVtody0+Y2hpcF9pZCAtIENISVBfSURfWVVLT05fWExdLAogCSAgICAgICBody0+Y2hpcF9pZCwgaHctPmNoaXBfcmV2KTsKIAogCWRldiA9IHNreTJfaW5pdF9uZXRkZXYoaHcsIDAsIHVzaW5nX2RhYyk7CkBAIC0zMzQ5LDcgKzMzNDgsNyBAQAogCQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7CiAgCX0KIAotCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgIHNreTJfaW50ciwgU0FfU0hJUlEsIERSVl9OQU1FLCBodyk7CisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCAgc2t5Ml9pbnRyLCBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGh3KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgYXNzaWduIGlycSAlZFxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xoYy5jIGIvZHJpdmVycy9uZXQvc2xoYy5jCmluZGV4IGM2ZmJiMWUuLjNhMWI3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaGMuYworKysgYi9kcml2ZXJzL25ldC9zbGhjLmMKQEAgLTUwLDcgKzUwLDYgQEAKICAqCWRyaXZlciBjb2RlIGJlbG9uZ2luZyBjbG9zZSB0byBQUFAgYW5kIFNMSVAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCBiMmUxOGQyLi4xNTg4Y2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC01NSw3ICs1NSw2IEBACiAgKi8KIAogI2RlZmluZSBTTF9DSEVDS19UUkFOU01JVAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuaCBiL2RyaXZlcnMvbmV0L3NsaXAuaAppbmRleCBhYjNlZmU2Li4yOWQ4N2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmgKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIF9MSU5VWF9TTElQX0gKICNkZWZpbmUgX0xJTlVYX1NMSVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19JTkVUKSAmJiBkZWZpbmVkKENPTkZJR19TTElQX0NPTVBSRVNTRUQpCiAjIGRlZmluZSBTTF9JTkNMVURFX0NTTElQCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCmluZGV4IDViNGU4NTIuLjQ1NDQ5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCkBAIC01Nyw3ICs1Nyw2IEBACiBzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPQogCSJzbWMtdWx0cmEuYzp2Mi4wMiAyLzMvOTggRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KVxuIjsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYwppbmRleCBmZjliZDk3Li44NWJlMjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogc3RhdGljIGludCB1bHRyYTMyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHIgLSBVTFRSQTMyX05JQ19PRkZTRVQ7IC8qIEFTSUMgYWRkciAqLwotCWludCBpcnFfZmxhZ3MgPSAoaW5iKGlvYWRkciArIFVMVFJBMzJfQ0ZHNSkgJiAweDA4KSA/IDAgOiBTQV9TSElSUTsKKwlpbnQgaXJxX2ZsYWdzID0gKGluYihpb2FkZHIgKyBVTFRSQTMyX0NGRzUpICYgMHgwOCkgPyAwIDogSVJRRl9TSEFSRUQ7CiAJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlaV9pbnRlcnJ1cHQsIGlycV9mbGFncywgZGV2LT5uYW1lLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IGJkZDg3MDIuLmQzN2JkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTIwODEsNyArMjA4MSw3IEBACiAJbHAtPmN0bF9yc3BlZWQgPSAxMDA7CiAKIAkvKiBHcmFiIHRoZSBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnNtYzkxMXhfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc21jOTExeF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IDBlOTgzM2EuLjNkOGRjYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC02Niw3ICs2Niw2IEBACiAjZW5kaWYKIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBiZjc3NjEyNWMuLmI0MDI4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJICAgbWFjaGluZV9pc19vbWFwX2gyKCkgXAogCQl8fCBtYWNoaW5lX2lzX29tYXBfaDMoKSBcCiAJCXx8IChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgJiYgIWNwdV9pc19vbWFwMTUxMCgpKSBcCi0JKSA/IFNBX1RSSUdHRVJfRkFMTElORyA6IFNBX1RSSUdHRVJfUklTSU5HKQorCSkgPyBJUlFGX1RSSUdHRVJfRkFMTElORyA6IElSUUZfVFJJR0dFUl9SSVNJTkcpCiAKIAogI2VsaWYJZGVmaW5lZChDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWKQpAQCAtNTQwLDcgKzU0MCw3IEBACiAjZW5kaWYKIAogI2lmbmRlZglTTUNfSVJRX0ZMQUdTCi0jZGVmaW5lCVNNQ19JUlFfRkxBR1MJCVNBX1RSSUdHRVJfUklTSU5HCisjZGVmaW5lCVNNQ19JUlFfRkxBR1MJCUlSUUZfVFJJR0dFUl9SSVNJTkcKICNlbmRpZgogCiAjaWZuZGVmIFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NvbmljLmggYi9kcml2ZXJzL25ldC9zb25pYy5oCmluZGV4IGNlZGU5NjlhLi43ZjVjNGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zb25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NvbmljLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgU09OSUNfSAogI2RlZmluZSBTT05JQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFNPTklDIHJlZ2lzdGVyIG9mZnNldHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCAzOTQzMzlkLi5mYjFkNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xNzQ1LDcgKzE3NDQsNyBAQAogCiAJcmVzdWx0ID0gLUVCVVNZOwogCWlmIChyZXF1ZXN0X2lycShuZXRkZXYtPmlycSwgc3BpZGVyX25ldF9pbnRlcnJ1cHQsCi0JCQkgICAgIFNBX1NISVJRLCBuZXRkZXYtPm5hbWUsIG5ldGRldikpCisJCQkgICAgIElSUUZfU0hBUkVELCBuZXRkZXYtPm5hbWUsIG5ldGRldikpCiAJCWdvdG8gcmVnaXN0ZXJfaW50X2ZhaWxlZDsKIAogCXNwaWRlcl9uZXRfZW5hYmxlX2NhcmQoY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCBjMTU4ZWVkLi5lZDFmNTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTE0Niw3ICsxNDYsNiBAQAogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wMytMSzEuNC4yLjEiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSJPY3RvYmVyIDMsIDIwMDUiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEwNzEsNyArMTA3MCw3IEBACiAKIAkvKiBEbyB3ZSBldmVyIG5lZWQgdG8gcmVzZXQgdGhlIGNoaXA/Pz8gKi8KIAotCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmaW50cl9oYW5kbGVyLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmaW50cl9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bmljLmMgYi9kcml2ZXJzL25ldC9zdG5pYy5jCmluZGV4IGI2ZGZkZjguLjc0MjI4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bmljLmMKKysrIGIvZHJpdmVycy9uZXQvc3RuaWMuYwpAQCAtNyw3ICs3LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBrYXogS29qaW1hCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCmluZGV4IGEyZmFkNTAuLjJkY2FkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAogCVJFR0EoQ1NSMCkgPSBDU1IwX1NUT1A7IAogCi0JcmVxdWVzdF9pcnEoTEFOQ0VfSVJRLCBsYW5jZV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgIlNVTjMgTGFuY2UiLCBkZXYpOworCXJlcXVlc3RfaXJxKExBTkNFX0lSUSwgbGFuY2VfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiU1VOMyBMYW5jZSIsIGRldik7CiAJZGV2LT5pcnEgPSAodW5zaWduZWQgc2hvcnQpTEFOQ0VfSVJROwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCA3MTI3ZjBmLi5kNDY4OTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC05MTgsNyArOTE4LDcgQEAKIAlzdHJ1Y3QgYmlnbWFjICpicCA9IChzdHJ1Y3QgYmlnbWFjICopIGRldi0+cHJpdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZiaWdtYWNfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBicCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZiaWdtYWNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBicCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIkJJR01BQzogQ2FuJ3Qgb3JkZXIgaXJxICVkIHRvIGdvLlxuIiwgZGV2LT5pcnEpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKaW5kZXggZjEzYjJhMS4uNjQzZmNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCkBAIC04NzAsNyArODcwLDcgQEAKIAogCS8qIERvIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoaXA/Pz8gKi8KIAotCWkgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmludHJfaGFuZGxlciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZpbnRyX2hhbmRsZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGkpCiAJCXJldHVybiBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IDUyNDg2NzAuLmI3MGJiZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC0yMjIwLDcgKzIyMjAsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAocmVxdWVzdF9pcnEoZ3AtPnBkZXYtPmlycSwgZ2VtX2ludGVycnVwdCwKLQkJCQkgICBTQV9TSElSUSwgZGV2LT5uYW1lLCAodm9pZCAqKWRldikpIHsKKwkJCQkgICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCAodm9pZCAqKWRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICFcbiIsIGdwLT5kZXYtPm5hbWUpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IDkyODJiNGIuLjI3OGM3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqICAgIG9mIGRhcndpbiwgc3RpbGwgbmVlZCB0byByZXZlcnNlIGVuZ2luZWVyIHRoYXQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCBjMzNlYWQzLi44NjczZmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5obWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5obWUuYwpAQCAtMTMsNyArMTMsNiBAQAogICogICAgIGFyZ3VtZW50IDogbWFjYWRkcj0weDAwLDB4MTAsMHgyMCwweDMwLDB4NDAsMHg1MAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMjE5NSw3ICsyMTk0LDcgQEAKIAkgKi8KIAlpZiAoKGhwLT5oYXBweV9mbGFncyAmIChIRkxBR19RVUFUVFJPfEhGTEFHX1BDSSkpICE9IEhGTEFHX1FVQVRUUk8pIHsKIAkJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmaGFwcHlfbWVhbF9pbnRlcnJ1cHQsCi0JCQkJU0FfU0hJUlEsIGRldi0+bmFtZSwgKHZvaWQgKilkZXYpKSB7CisJCQkJSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgKHZvaWQgKilkZXYpKSB7CiAJCQlITUQoKCJFQUdBSU5cbiIpKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiaGFwcHlfbWVhbChTQlVTKTogQ2FuJ3Qgb3JkZXIgaXJxICVkIHRvIGdvLlxuIiwKIAkJCSAgICAgICBkZXYtPmlycSk7CkBAIC0yNTIzLDcgKzI1MjIsNyBAQAogc3RhdGljIGludCBobWVfdmVyc2lvbl9wcmludGVkOwogCiAjaWZkZWYgQ09ORklHX1NCVVMKLXZvaWQgX19pbml0IHF1YXR0cm9fZ2V0X3JhbmdlcyhzdHJ1Y3QgcXVhdHRybyAqcXApCit2b2lkIF9fZGV2aW5pdCBxdWF0dHJvX2dldF9yYW5nZXMoc3RydWN0IHF1YXR0cm8gKnFwKQogewogCXN0cnVjdCBzYnVzX2RldiAqc2RldiA9IHFwLT5xdWF0dHJvX2RldjsKIAlpbnQgZXJyOwpAQCAtMjUzOSw3ICsyNTM4LDcgQEAKIAlxcC0+bnJhbmdlcyA9IChlcnIgLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBxdWF0dHJvX2FwcGx5X3JhbmdlcyhzdHJ1Y3QgcXVhdHRybyAqcXAsIHN0cnVjdCBoYXBweV9tZWFsICpocCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWF0dHJvX2FwcGx5X3JhbmdlcyhzdHJ1Y3QgcXVhdHRybyAqcXAsIHN0cnVjdCBoYXBweV9tZWFsICpocCkKIHsKIAlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYgPSBocC0+aGFwcHlfZGV2OwogCWludCBybmc7CkBAIC0yNTY2LDcgKzI1NjUsNyBAQAogICoKICAqIFJldHVybiBOVUxMIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcXVhdHRybyAqIF9faW5pdCBxdWF0dHJvX3NidXNfZmluZChzdHJ1Y3Qgc2J1c19kZXYgKmdvYWxfc2RldikKK3N0YXRpYyBzdHJ1Y3QgcXVhdHRybyAqIF9fZGV2aW5pdCBxdWF0dHJvX3NidXNfZmluZChzdHJ1Y3Qgc2J1c19kZXYgKmdvYWxfc2RldikKIHsKIAlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXY7CiAJc3RydWN0IHF1YXR0cm8gKnFwOwpAQCAtMjYwOSw3ICsyNjA4LDcgQEAKIAogCQllcnIgPSByZXF1ZXN0X2lycShzZGV2LT5pcnFzWzBdLAogCQkJCSAgcXVhdHRyb19zYnVzX2ludGVycnVwdCwKLQkJCQkgIFNBX1NISVJRLCAiUXVhdHRybyIsCisJCQkJICBJUlFGX1NIQVJFRCwgIlF1YXR0cm8iLAogCQkJCSAgcXApOwogCQlpZiAoZXJyICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiUXVhdHRybzogRmF0YWwgSVJRIHJlZ2lzdGVyeSBlcnJvciAlZC5cbiIsIGVycik7CkBAIC0yNjE4LDcgKzI2MTcsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHF1YXR0cm9fc2J1c19mcmVlX2lycXModm9pZCkKK3N0YXRpYyB2b2lkIHF1YXR0cm9fc2J1c19mcmVlX2lycXModm9pZCkKIHsKIAlzdHJ1Y3QgcXVhdHRybyAqcXA7CiAKQEAgLTI2NjIsNyArMjY2MSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaWZkZWYgQ09ORklHX1NCVVMKLXN0YXRpYyBpbnQgX19pbml0IGhhcHB5X21lYWxfc2J1c19wcm9iZV9vbmUoc3RydWN0IHNidXNfZGV2ICpzZGV2LCBpbnQgaXNfcWZlKQorc3RhdGljIGludCBfX2RldmluaXQgaGFwcHlfbWVhbF9zYnVzX3Byb2JlX29uZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYsIGludCBpc19xZmUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IHNkZXYtPm9mZGV2Lm5vZGU7CiAJc3RydWN0IHF1YXR0cm8gKnFwID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5oIGIvZHJpdmVycy9uZXQvc3VuaG1lLmgKaW5kZXggOWI3Y2NhZS4uOTBmNDQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmgKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9TVU5ITUVfSAogI2RlZmluZSBfU1VOSE1FX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAvKiBIYXBweSBNZWFsIGdsb2JhbCByZWdpc3RlcnMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAyYzIzOWFiLi4xZWY5ZmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTcxLDcgKzcxLDYgQEAKIAogc3RhdGljIGNoYXIgbGFuY2VzdHJbXSA9ICJMQU5DRSI7CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtOTMxLDcgKzkzMCw3IEBACiAKIAlTVE9QX0xBTkNFKGxwKTsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmxhbmNlX2ludGVycnVwdCwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmbGFuY2VfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCWxhbmNlc3RyLCAodm9pZCAqKSBkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTGFuY2U6IENhbid0IGdldCBpcnEgJWRcbiIsIGRldi0+aXJxKTsKIAkJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5xZS5jIGIvZHJpdmVycy9uZXQvc3VucWUuYwppbmRleCA5ZGE2ZDViLi44MTdhNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5xZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCQkJcWVjX2luaXRfb25jZShxZWNwLCBxZWNfc2Rldik7CiAKIAkJCWlmIChyZXF1ZXN0X2lycShxZWNfc2Rldi0+aXJxc1swXSwgJnFlY19pbnRlcnJ1cHQsCi0JCQkJCVNBX1NISVJRLCAicWVjIiwgKHZvaWQgKikgcWVjcCkpIHsKKwkJCQkJSVJRRl9TSEFSRUQsICJxZWMiLCAodm9pZCAqKSBxZWNwKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAicWVjOiBDYW4ndCByZWdpc3RlciBpcnEuXG4iKTsKIAkJCQlnb3RvIGZhaWw7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggYzJlYzlmZC4uOGI1M2RlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJICovCiAKIAlpZiAoZGV2LT5pcnEgPT0gMCAgfHwKLQkgICAgcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0YzM1ODE1X2ludGVycnVwdCwgU0FfU0hJUlEsIGNhcmRuYW1lLCBkZXYpKSB7CisJICAgIHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdGMzNTgxNV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBjYXJkbmFtZSwgZGV2KSkgewogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggMzVmOTMxNi4uZjY0NTkyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqCW5vdGljZSBpcyBhY2NvbXBhbnlpbmcgaXQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTY5LDggKzY4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNjAiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVuZSAxNywgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjYyIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bmUgMzAsIDIwMDYiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtMzE5NSw3ICszMTk0LDcgQEAKICAqLwogc3RhdGljIGludCB0ZzNfcngoc3RydWN0IHRnMyAqdHAsIGludCBidWRnZXQpCiB7Ci0JdTMyIHdvcmtfbWFzazsKKwl1MzIgd29ya19tYXNrLCByeF9zdGRfcG9zdGVkID0gMDsKIAl1MzIgc3dfaWR4ID0gdHAtPnJ4X3JjYl9wdHI7CiAJdTE2IGh3X2lkeDsKIAlpbnQgcmVjZWl2ZWQ7CkBAIC0zMjIyLDYgKzMyMjEsNyBAQAogCQkJCQkJICBtYXBwaW5nKTsKIAkJCXNrYiA9IHRwLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0uc2tiOwogCQkJcG9zdF9wdHIgPSAmdHAtPnJ4X3N0ZF9wdHI7CisJCQlyeF9zdGRfcG9zdGVkKys7CiAJCX0gZWxzZSBpZiAob3BhcXVlX2tleSA9PSBSWERfT1BBUVVFX1JJTkdfSlVNQk8pIHsKIAkJCWRtYV9hZGRyID0gcGNpX3VubWFwX2FkZHIoJnRwLT5yeF9qdW1ib19idWZmZXJzW2Rlc2NfaWR4XSwKIAkJCQkJCSAgbWFwcGluZyk7CkBAIC0zMzA5LDYgKzMzMDksMTUgQEAKIAogbmV4dF9wa3Q6CiAJCSgqcG9zdF9wdHIpKys7CisKKwkJaWYgKHVubGlrZWx5KHJ4X3N0ZF9wb3N0ZWQgPj0gdHAtPnJ4X3N0ZF9tYXhfcG9zdCkpIHsKKwkJCXUzMiBpZHggPSAqcG9zdF9wdHIgJSBURzNfUlhfUklOR19TSVpFOworCisJCQl0dzMyX3J4X21ib3goTUFJTEJPWF9SQ1ZfU1REX1BST0RfSURYICsKKwkJCQkgICAgIFRHM182NEJJVF9SRUdfTE9XLCBpZHgpOworCQkJd29ya19tYXNrICY9IH5SWERfT1BBUVVFX1JJTkdfU1REOworCQkJcnhfc3RkX3Bvc3RlZCA9IDA7CisJCX0KIG5leHRfcGt0X25vcG9zdDoKIAkJc3dfaWR4Kys7CiAJCXN3X2lkeCAlPSBURzNfUlhfUkNCX1JJTkdfU0laRSh0cCk7CkBAIC0zNzg5LDE4ICszNzk4LDI0IEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAotCQl0Y3Bfb3B0X2xlbiA9ICgoc2tiLT5oLnRoLT5kb2ZmIC0gNSkgKiA0KTsKLQkJaXBfdGNwX2xlbiA9IChza2ItPm5oLmlwaC0+aWhsICogNCkgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisJCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNikKKwkJCW1zcyB8PSAoc2tiX2hlYWRsZW4oc2tiKSAtIEVUSF9ITEVOKSA8PCA5OworCQllbHNlIHsKKwkJCXRjcF9vcHRfbGVuID0gKChza2ItPmgudGgtPmRvZmYgLSA1KSAqIDQpOworCQkJaXBfdGNwX2xlbiA9IChza2ItPm5oLmlwaC0+aWhsICogNCkgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisJCQlza2ItPm5oLmlwaC0+Y2hlY2sgPSAwOworCQkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSBodG9ucyhtc3MgKyBpcF90Y3BfbGVuICsKKwkJCQkJCSAgICAgdGNwX29wdF9sZW4pOworCQkJbXNzIHw9IChpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pIDw8IDk7CisJCX0KIAogCQliYXNlX2ZsYWdzIHw9IChUWERfRkxBR19DUFVfUFJFX0RNQSB8CiAJCQkgICAgICAgVFhEX0ZMQUdfQ1BVX1BPU1RfRE1BKTsKIAotCQlza2ItPm5oLmlwaC0+Y2hlY2sgPSAwOwotCQlza2ItPm5oLmlwaC0+dG90X2xlbiA9IGh0b25zKG1zcyArIGlwX3RjcF9sZW4gKyB0Y3Bfb3B0X2xlbik7Ci0KIAkJc2tiLT5oLnRoLT5jaGVjayA9IDA7CiAKLQkJbXNzIHw9IChpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pIDw8IDk7CiAJfQogCWVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKQogCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX1RDUFVEUF9DU1VNOwpAQCAtMzg3MCw2ICszODg1LDQwIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorI2lmIFRHM19UU09fU1VQUE9SVCAhPSAwCitzdGF0aWMgaW50IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CisKKy8qIFVzZSBHU08gdG8gd29ya2Fyb3VuZCBhIHJhcmUgVFNPIGJ1ZyB0aGF0IG1heSBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUKKyAqIFRTTyBoZWFkZXIgaXMgZ3JlYXRlciB0aGFuIDgwIGJ5dGVzLgorICovCitzdGF0aWMgaW50IHRnM190c29fYnVnKHN0cnVjdCB0ZzMgKnRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjsKKworCS8qIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGluIHRoZSB3b3JzdCBjYXNlICovCisJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyAqIDMpKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKHRwLT5kZXYpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJc2VncyA9IHNrYl9nc29fc2VnbWVudChza2IsIHRwLT5kZXYtPmZlYXR1cmVzICYgfk5FVElGX0ZfVFNPKTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKKwkJZ290byB0ZzNfdHNvX2J1Z19lbmQ7CisKKwlkbyB7CisJCW5za2IgPSBzZWdzOworCQlzZWdzID0gc2Vncy0+bmV4dDsKKwkJbnNrYi0+bmV4dCA9IE5VTEw7CisJCXRnM19zdGFydF94bWl0X2RtYV9idWcobnNrYiwgdHAtPmRldik7CisJfSB3aGlsZSAoc2Vncyk7CisKK3RnM190c29fYnVnX2VuZDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorI2VuZGlmCisKIC8qIGhhcmRfc3RhcnRfeG1pdCBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgdGhlIDRHIGJ1ZyBhbmQvb3IgNDAtYml0IGJ1ZyBhbmQKICAqIHN1cHBvcnQgVEczX0ZMRzJfSFdfVFNPXzEgb3IgZmlybXdhcmUgVFNPIG9ubHkuCiAgKi8KQEAgLTM5MDYsNyArMzk1NSw3IEBACiAJbXNzID0gMDsKIAlpZiAoc2tiLT5sZW4gPiAodHAtPmRldi0+bXR1ICsgRVRIX0hMRU4pICYmCiAJICAgIChtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKSAhPSAwKSB7Ci0JCWludCB0Y3Bfb3B0X2xlbiwgaXBfdGNwX2xlbjsKKwkJaW50IHRjcF9vcHRfbGVuLCBpcF90Y3BfbGVuLCBoZHJfbGVuOwogCiAJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpICYmCiAJCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHsKQEAgLTM5MTcsMTEgKzM5NjYsMTYgQEAKIAkJdGNwX29wdF9sZW4gPSAoKHNrYi0+aC50aC0+ZG9mZiAtIDUpICogNCk7CiAJCWlwX3RjcF9sZW4gPSAoc2tiLT5uaC5pcGgtPmlobCAqIDQpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCisJCWhkcl9sZW4gPSBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW47CisJCWlmICh1bmxpa2VseSgoRVRIX0hMRU4gKyBoZHJfbGVuKSA+IDgwKSAmJgorCQkJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMV9CVUcpKQorCQkJcmV0dXJuICh0ZzNfdHNvX2J1Zyh0cCwgc2tiKSk7CisKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfQ1BVX1BSRV9ETUEgfAogCQkJICAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7CiAKIAkJc2tiLT5uaC5pcGgtPmNoZWNrID0gMDsKLQkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSBodG9ucyhtc3MgKyBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pOworCQlza2ItPm5oLmlwaC0+dG90X2xlbiA9IGh0b25zKG1zcyArIGhkcl9sZW4pOwogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pIHsKIAkJCXNrYi0+aC50aC0+Y2hlY2sgPSAwOwogCQkJYmFzZV9mbGFncyAmPSB+VFhEX0ZMQUdfVENQVURQX0NTVU07CkBAIC01OTgxLDcgKzYwMzUsMTMgQEAKIAl9CiAKIAkvKiBTZXR1cCByZXBsZW5pc2ggdGhyZXNob2xkLiAqLwotCXR3MzIoUkNWQkRJX1NURF9USFJFU0gsIHRwLT5yeF9wZW5kaW5nIC8gOCk7CisJdmFsID0gdHAtPnJ4X3BlbmRpbmcgLyA4OworCWlmICh2YWwgPT0gMCkKKwkJdmFsID0gMTsKKwllbHNlIGlmICh2YWwgPiB0cC0+cnhfc3RkX21heF9wb3N0KQorCQl2YWwgPSB0cC0+cnhfc3RkX21heF9wb3N0OworCisJdHczMihSQ1ZCRElfU1REX1RIUkVTSCwgdmFsKTsKIAogCS8qIEluaXRpYWxpemUgVEczX0JESU5GTydzIGF0OgogCSAqICBSQ1ZEQkRJX1NURF9CRDoJc3RhbmRhcmQgZXRoIHNpemUgcnggcmluZwpAQCAtNjE0MSw4ICs2MjAxLDEyIEBACiAjZW5kaWYKIAogCS8qIFJlY2VpdmUvc2VuZCBzdGF0aXN0aWNzLiAqLwotCWlmICgocmRtYWNfbW9kZSAmIFJETUFDX01PREVfRklGT19TSVpFXzEyOCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpKSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSB7CisJCXZhbCA9IHRyMzIoUkNWTFBDX1NUQVRTX0VOQUJMRSk7CisJCXZhbCAmPSB+UkNWTFBDX1NUQVRTRU5BQl9EQUNLX0ZJWDsKKwkJdHczMihSQ1ZMUENfU1RBVFNfRU5BQkxFLCB2YWwpOworCX0gZWxzZSBpZiAoKHJkbWFjX21vZGUgJiBSRE1BQ19NT0RFX0ZJRk9fU0laRV8xMjgpICYmCisJCSAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSkgewogCQl2YWwgPSB0cjMyKFJDVkxQQ19TVEFUU19FTkFCTEUpOwogCQl2YWwgJj0gflJDVkxQQ19TVEFUU0VOQUJfTE5HQlJTVF9SRklYOwogCQl0dzMyKFJDVkxQQ19TVEFUU19FTkFCTEUsIHZhbCk7CkBAIC02NjQ0LDEyICs2NzA4LDEyIEBACiAJCWZuID0gdGczX21zaTsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKQogCQkJZm4gPSB0ZzNfbXNpXzFzaG90OwotCQlmbGFncyA9IFNBX1NBTVBMRV9SQU5ET007CisJCWZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOwogCX0gZWxzZSB7CiAJCWZuID0gdGczX2ludGVycnVwdDsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKQogCQkJZm4gPSB0ZzNfaW50ZXJydXB0X3RhZ2dlZDsKLQkJZmxhZ3MgPSBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET007CisJCWZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET007CiAJfQogCXJldHVybiAocmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgZm4sIGZsYWdzLCBkZXYtPm5hbWUsIGRldikpOwogfQpAQCAtNjY2OCw3ICs2NzMyLDcgQEAKIAlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgdGczX3Rlc3RfaXNyLAotCQkJICBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC03ODI5LDYgKzc4OTMsMTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzIpIHsKKwkJaWYgKHZhbHVlKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJCWVsc2UKKwkJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKKwl9CiAJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIHZhbHVlKTsKIH0KICNlbmRpZgpAQCAtODczOCw2ICs4ODA4LDkgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CisKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogCXRwLT52bGdycCA9IGdycDsKQEAgLTg3NDYsMTYgKzg4MTksMjUgQEAKIAlfX3RnM19zZXRfcnhfbW9kZShkZXYpOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXRnM19uZXRpZl9zdGFydCh0cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM192bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CisKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAlpZiAodHAtPnZsZ3JwKQogCQl0cC0+dmxncnAtPnZsYW5fZGV2aWNlc1t2aWRdID0gTlVMTDsKIAl0ZzNfZnVsbF91bmxvY2sodHApOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJdGczX25ldGlmX3N0YXJ0KHRwKTsKIH0KICNlbmRpZgogCkBAIC0xMDE2MCw4ICsxMDI0MiwxNCBAQAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpIHsKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0hXX1RTT18yOwogCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfMVNIT1RfTVNJOwotCQl9IGVsc2UKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0hXX1RTT18xOworCQl9IGVsc2UgeworCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSFdfVFNPXzEgfAorCQkJCQkgIFRHM19GTEcyX0hXX1RTT18xX0JVRzsKKwkJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0KKwkJCQlBU0lDX1JFVl81NzUwICYmCisJICAgICAJCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID49IENISVBSRVZfSURfNTc1MF9DMikKKwkJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfSFdfVFNPXzFfQlVHOworCQl9CiAJfQogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzA1ICYmCkBAIC0xMDUzMyw2ICsxMDYyMSwxNiBAQAogCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgIT0gMCkKIAkJdHAtPnJ4X29mZnNldCA9IDA7CiAKKwl0cC0+cnhfc3RkX21heF9wb3N0ID0gVEczX1JYX1JJTkdfU0laRTsKKworCS8qIEluY3JlbWVudCB0aGUgcnggcHJvZCBpbmRleCBvbiB0aGUgcnggc3RkIHJpbmcgYnkgYXQgbW9zdAorCSAqIDggZm9yIHRoZXNlIGNoaXBzIHRvIHdvcmthcm91bmQgaHcgZXJyYXRhLgorCSAqLworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MiB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkKKwkJdHAtPnJ4X3N0ZF9tYXhfcG9zdCA9IDg7CisKIAkvKiBCeSBkZWZhdWx0LCBkaXNhYmxlIHdha2Utb24tbGFuLiAgVXNlciBjYW4gY2hhbmdlIHRoaXMKIAkgKiB1c2luZyBFVEhUT09MX1NXT0wuCiAJICovCkBAIC0xMTQyMSw4ICsxMTUxOSwxMSBAQAogCSAqIEZpcm13YXJlIFRTTyBvbiBvbGRlciBjaGlwcyBnaXZlcyBsb3dlciBwZXJmb3JtYW5jZSwgc28gaXQKIAkgKiBpcyBvZmYgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBlbmFibGVkIHVzaW5nIGV0aHRvb2wuCiAJICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKQorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykgewogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMikKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCX0KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggODIwOWRhNS4uYmEyYzk4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0xMjUsNiArMTI1LDcgQEAKICNkZWZpbmUgIENISVBSRVZfSURfNTc1MF9BMAkJIDB4NDAwMAogI2RlZmluZSAgQ0hJUFJFVl9JRF81NzUwX0ExCQkgMHg0MDAxCiAjZGVmaW5lICBDSElQUkVWX0lEXzU3NTBfQTMJCSAweDQwMDMKKyNkZWZpbmUgIENISVBSRVZfSURfNTc1MF9DMgkJIDB4NDIwMgogI2RlZmluZSAgQ0hJUFJFVl9JRF81NzUyX0EwX0hXCQkgMHg1MDAwCiAjZGVmaW5lICBDSElQUkVWX0lEXzU3NTJfQTAJCSAweDYwMDAKICNkZWZpbmUgIENISVBSRVZfSURfNTc1Ml9BMQkJIDB4NjAwMQpAQCAtNzYwLDYgKzc2MSw3IEBACiAjZGVmaW5lICBSQ1ZMUENfU1RBVFNDVFJMX0VOQUJMRQkgMHgwMDAwMDAwMQogI2RlZmluZSAgUkNWTFBDX1NUQVRTQ1RSTF9GQVNUVVBECSAweDAwMDAwMDAyCiAjZGVmaW5lIFJDVkxQQ19TVEFUU19FTkFCTEUJCTB4MDAwMDIwMTgKKyNkZWZpbmUgIFJDVkxQQ19TVEFUU0VOQUJfREFDS19GSVgJIDB4MDAwNDAwMDAKICNkZWZpbmUgIFJDVkxQQ19TVEFUU0VOQUJfTE5HQlJTVF9SRklYCSAweDAwNDAwMDAwCiAjZGVmaW5lIFJDVkxQQ19TVEFUU19JTkNNQVNLCQkweDAwMDAyMDFjCiAvKiAweDIwMjAgLS0+IDB4MjEwMCB1bnVzZWQgKi8KQEAgLTIxMzcsNiArMjEzOSw3IEBACiAJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYwkqcnhfc3RkOwogCXN0cnVjdCByaW5nX2luZm8JCSpyeF9zdGRfYnVmZmVyczsKIAlkbWFfYWRkcl90CQkJcnhfc3RkX21hcHBpbmc7CisJdTMyCQkJCXJ4X3N0ZF9tYXhfcG9zdDsKIAogCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MJKnJ4X2p1bWJvOwogCXN0cnVjdCByaW5nX2luZm8JCSpyeF9qdW1ib19idWZmZXJzOwpAQCAtMjE5MSw3ICsyMTk0LDcgQEAKICNkZWZpbmUgVEczX0ZMQUdfSU5JVF9DT01QTEVURQkJMHg4MDAwMDAwMAogCXUzMgkJCQl0ZzNfZmxhZ3MyOwogI2RlZmluZSBURzNfRkxHMl9SRVNUQVJUX1RJTUVSCQkweDAwMDAwMDAxCi0vKgkJCQkJMHgwMDAwMDAwMiBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVEczX0ZMRzJfSFdfVFNPXzFfQlVHCQkweDAwMDAwMDAyCiAjZGVmaW5lIFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVECTB4MDAwMDAwMDQKICNkZWZpbmUgVEczX0ZMRzJfSVNfNTc4OAkJMHgwMDAwMDAwOAogI2RlZmluZSBURzNfRkxHMl9NQVhfUlhQRU5EXzY0CQkweDAwMDAwMDEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90bGFuLmMgYi9kcml2ZXJzL25ldC90bGFuLmMKaW5kZXggMTIwNzZmOC4uMjNjMDAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3RsYW4uYwpAQCAtOTQzLDcgKzk0Myw3IEBACiAJaW50CQllcnI7CiAJCiAJcHJpdi0+dGxhblJldiA9IFRMYW5fRGlvUmVhZDgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0RFRl9SRVZJU0lPTiApOwotCWVyciA9IHJlcXVlc3RfaXJxKCBkZXYtPmlycSwgVExhbl9IYW5kbGVJbnRlcnJ1cHQsIFNBX1NISVJRLCBUTGFuU2lnbmF0dXJlLCBkZXYgKTsKKwllcnIgPSByZXF1ZXN0X2lycSggZGV2LT5pcnEsIFRMYW5fSGFuZGxlSW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgVExhblNpZ25hdHVyZSwgZGV2ICk7CiAJCiAJaWYgKCBlcnIgKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVExBTjogIENhbm5vdCBvcGVuICVzIGJlY2F1c2UgSVJRICVkIGlzIGFscmVhZHkgaW4gdXNlLlxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA0MWUwY2Q4Li40NjU5MjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtNDIsNyArNDIsNiBAQAogCiAjZGVmaW5lIFhMX0RFQlVHIDAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC01NzcsNyArNTc2LDcgQEAKIAogCXUxNiBzd2l0Y2hzZXR0aW5ncywgc3dpdGNoc2V0dGluZ3NfZWVwcm9tICA7CiAgCi0JaWYocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ4bF9pbnRlcnJ1cHQsIFNBX1NISVJRICwgIjNjMzU5IiwgZGV2KSkgeworCWlmKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmeGxfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCAsICIzYzM1OSIsIGRldikpIHsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jCmluZGV4IDY0OWQ4ZWEuLjFiZGQzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJZ290byBlcnJfb3V0X3RyZGV2OwogCX0KIAkJCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCB0bXMzODB0cl9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdG1zMzgwdHJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF9yZWdpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCmluZGV4IGM1OGE0YzMuLjI4ZDk2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCkBAIC0xMDAsNyArMTAwLDYgQEAKIAogI2RlZmluZSBTVFJFQU1FUl9JT0NUTCAwCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNjAyLDcgKzYwMSw3IEBACiAJICAgICAgICByYz1zdHJlYW1lcl9yZXNldChkZXYpOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJnN0cmVhbWVyX2ludGVycnVwdCwgU0FfU0hJUlEsICJsYW5zdHJlYW1lciIsIGRldikpIHsKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZzdHJlYW1lcl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAibGFuc3RyZWFtZXIiLCBkZXYpKSB7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KICNpZiBTVFJFQU1FUl9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKaW5kZXggMTllNmY0ZC4uNjY2YmJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAkgKi8gCiAJb3V0YigwLCBkZXYtPmJhc2VfYWRkciArIE1DX0NPTlRST0xfUkVHMCk7IC8qIHNhbml0eSAqLwogCW1hZGdlbWNfc2V0c2lmc2VsKGRldiwgMSk7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBtYWRnZW1jX2ludGVycnVwdCwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBtYWRnZW1jX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCSAgICAgICAibWFkZ2VtYyIsIGRldikpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGdldG91dDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCBjM2NiOGQyLi44NTgzMTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTgwLDcgKzgwLDYgQEAKICNkZWZpbmUgT0xZTVBJQ19ERUJVRyAwCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00NDYsNyArNDQ1LDcgQEAKIAogCW9seW1waWNfaW5pdChkZXYpOwogCi0JaWYocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZvbHltcGljX2ludGVycnVwdCwgU0FfU0hJUlEgLCAib2x5bXBpYyIsIGRldikpIHsKKwlpZihyZXF1ZXN0X2lycShkZXYtPmlycSwgJm9seW1waWNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCAsICJvbHltcGljIiwgZGV2KSkgewogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggNjdkMmI1OS4uY2QyZTAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpAQCAtNTMyLDcgKzUzMSw3IEBACiAJCQlkZXYtPmlycSA9IDE1OwogICAgICAgICAgICAgICAgCQlicmVhazsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbWN0cl9pbnRlcnJ1cHQsIFNBX1NISVJRLCBzbWN0cl9uYW1lLCBkZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbWN0cl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBzbWN0cl9uYW1lLCBkZXYpKSB7CiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTTUNUUl9JT19FWFRFTlQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMDYyLDcgKzEwNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQyOwogICAgICAgICAgfQogCi0gICAgICAgIGlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgc21jdHJfaW50ZXJydXB0LCBTQV9TSElSUSwgc21jdHJfbmFtZSwgZGV2KSkKKyAgICAgICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbWN0cl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBzbWN0cl9uYW1lLCBkZXYpKQogICAgICAgICAgICAgICAgIGdvdG8gb3V0MjsKIAogICAgICAgICAvKiBHZXQgNTh4IFJvbSBCYXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHJfZmlybXdhcmUuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0cl9maXJtd2FyZS5oCmluZGV4IDQ4OTk0YjAuLjI5MmU1MGRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyX2Zpcm13YXJlLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyX2Zpcm13YXJlLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqICAtIEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01DVFIpIHx8IGRlZmluZWQoQ09ORklHX1NNQ1RSX01PRFVMRSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCmluZGV4IGFiNDdjMDUuLjdkM2UyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQlnb3RvIGVycl9vdXRfdHJkZXY7CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCB0bXMzODB0cl9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdG1zMzgwdHJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF9yZWdpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggNWY3NDNiOS4uZDA1YzVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtMzEsNyArMzEsNiBAQAogI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuNyIKICNkZWZpbmUgRFJWX1JFTERBVEUJCSJNYXIgMTcsIDIwMDQiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTEzNzIsNyArMTM3MSw3IEBACiAKIAlkdzMyKEludHJNYXNrLCAwKTsKIAotCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRlX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSAlZCByZXF1ZXN0IGZhaWx1cmUsIGVycj0lZFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIHJjKTsKQEAgLTIwMDcsOCArMjAwNiw4IEBACiAJfQogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpIDwgREVfUkVHU19TSVpFKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTU1JTyByZXNvdXJjZSAoJWx4KSB0b28gc21hbGwgb24gcGNpIGRldiAlc1xuIiwKLQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSksIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTU1JTyByZXNvdXJjZSAoJWxseCkgdG9vIHNtYWxsIG9uIHBjaSBkZXYgJXNcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSksIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAKQEAgLTIwMTYsOCArMjAxNSw5IEBACiAJcmVncyA9IGlvcmVtYXBfbm9jYWNoZShwY2lhZGRyLCBERV9SRUdTX1NJWkUpOwogCWlmICghcmVncykgewogCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVseEAlbHgpIG9uIHBjaSBkZXYgJXNcbiIsCi0JCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLCBwY2lhZGRyLCBwY2lfbmFtZShwZGV2KSk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVsbHhAJWx4KSBvbiBwY2kgZGV2ICVzXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLAorCQkJcGNpYWRkciwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSByZWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKaW5kZXggZGE4YmQwZC4uNzVmZjE0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgIDAuNDEgICAgMjEtTWFyLTk2ICAgRG9uJ3QgY2hlY2sgZm9yIGdldF9od19hZGRyIGNoZWNrc3VtIHVubGVzcyBERUMgY2FyZAogICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IDxuaWxlc0BheHA3NDVnc2ZjLm5hc2EuZ292PgogCQkJICBGaXggZm9yIG11bHRpcGxlIFBDSSBjYXJkcyByZXBvcnRlZCBieSA8am9zQHhvcy5ubD4KLQkJCSAgRHVoLCBwdXQgdGhlIFNBX1NISVJRIGZsYWcgaW50byByZXF1ZXN0X2ludGVycnVwdCgpLgorCQkJICBEdWgsIHB1dCB0aGUgSVJRRl9TSEFSRUQgZmxhZyBpbnRvIHJlcXVlc3RfaW50ZXJydXB0KCkuCiAJCQkgIEZpeCBTTUMgZXRoZXJuZXQgYWRkcmVzcyBpbiBlbmV0X2RldFtdLgogCQkJICBQcmludCBjaGlwIG5hbWUgaW5zdGVhZCBvZiAiVU5LTk9XTiIgZHVyaW5nIGJvb3QuCiAgICAgICAwLjQyICAgIDI2LUFwci05NiAgIEZpeCBNSUkgd3JpdGUgVEEgYml0IGVycm9yLgpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCQkgICBpbmZvYmxvY2tzLgogCQkJICBBZGRlZCBEQzIxMTQyIGFuZCBEQzIxMTQzIGZ1bmN0aW9ucy4KIAkJCSAgQWRkZWQgYnl0ZSBjb3VudGVycyBmcm9tIDxwaGlsQHRhemVuZGEuZGVtb24uY28udWs+Ci0JCQkgIEFkZGVkIFNBX0lOVEVSUlVQVCB0ZW1wb3JhcnkgZml4IGZyb20KKwkJCSAgQWRkZWQgSVJRRl9ESVNBQkxFRCB0ZW1wb3JhcnkgZml4IGZyb20KIAkJCSAgIDxtamFjb2JAZmVyYWwuY29tPi4KICAgICAgIDAuNTMgICAxMi1Ob3YtOTcgICAgRml4IHRoZSAqX3Byb2JlKCkgdG8gaW5jbHVkZSAnZXRoPz8nIG5hbWUgZHVyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgbG9hZDogYnVnIHJlcG9ydGVkIGJ5CkBAIC00NDMsNyArNDQzLDYgQEAKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xMzIwLDEwICsxMzE5LDEwIEBACiAgICAgbHAtPnN0YXRlID0gT1BFTjsKICAgICBkZTR4NV9kYmdfb3BlbihkZXYpOwogCi0gICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKWRlNHg1X2ludGVycnVwdCwgU0FfU0hJUlEsCisgICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKWRlNHg1X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscC0+YWRhcHRlcl9uYW1lLCBkZXYpKSB7CiAJcHJpbnRrKCJkZTR4NV9vcGVuKCk6IFJlcXVlc3RlZCBJUlElZCBpcyBidXN5IC0gYXR0ZW1waW5nIEZBU1QvU0hBUkUuLi4iLCBkZXYtPmlycSk7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZTR4NV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZGU0eDVfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLT5hZGFwdGVyX25hbWUsIGRldikpIHsKIAkgICAgcHJpbnRrKCJcbiAgICAgICAgICAgICAgQ2Fubm90IGdldCBJUlEtIHJlY29uZmlndXJlIHlvdXIgaGFyZHdhcmUuXG4iKTsKIAkgICAgZGlzYWJsZV9hc3QoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCBiYTViMTEyLi40ZTViMGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC01MDYsNyArNTA2LDcgQEAKIAogCURNRkVfREJVRygwLCAiZG1mZV9vcGVuIiwgMCk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmRtZmVfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmZG1mZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCBkYTRmNzU5Li45OWNjZjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMTYsNyArMTYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAidHVsaXAuaCIKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiBpbnQgdHVsaXBfcnhfY29weWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggZDI1MDIwZC4uM2JjZmJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIF9fTkVUX1RVTElQX0hfXwogI2RlZmluZSBfX05FVF9UVUxJUF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCBlMGRlNjY3Li43MzUxODMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkidHVsaXAiCiAjaWZkZWYgQ09ORklHX1RVTElQX05BUEkKQEAgLTQ5MCw3ICs0ODksNyBAQAogewogCWludCByZXR2YWw7CiAKLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdHVsaXBfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKSkKKwlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdHVsaXBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkKIAkJcmV0dXJuIHJldHZhbDsKIAogCXR1bGlwX2luaXRfcmluZyAoZGV2KTsKQEAgLTEzNTAsMTAgKzEzNDksMTAgQEAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAlpZiAocGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCkgPCB0dWxpcF90YmxbY2hpcF9pZHhdLmlvX3NpemUpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVzOiBJL08gcmVnaW9uICgweCVseEAweCVseCkgdG9vIHNtYWxsLCAiCisJCXByaW50ayAoS0VSTl9FUlIgUEZYICIlczogSS9PIHJlZ2lvbiAoMHglbGx4QDB4JWxseCkgdG9vIHNtYWxsLCAiCiAJCQkiYWJvcnRpbmdcbiIsIHBjaV9uYW1lKHBkZXYpLAotCQkJcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCksCi0JCQlwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMCkpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCkBAIC0xNzcxLDcgKzE3NzAsNyBAQAogCiAJcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAKLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdHVsaXBfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKSkgeworCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpKSB7CiAJCXByaW50ayAoS0VSTl9FUlIgInR1bGlwOiByZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggOGIzYTI4Zi4uZmQ2NGIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtNDM2LDcgKzQzNiw3IEBACiAKIAlVTEk1MjZYX0RCVUcoMCwgInVsaTUyNnhfb3BlbiIsIDApOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ1bGk1MjZ4X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnVsaTUyNnhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDYwMmE2ZTUuLmI0YzBkMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtNjU4LDcgKzY1OCw3IEBACiAJaW93cml0ZTMyKDB4MDAwMDAwMDEsIGlvYWRkciArIFBDSUJ1c0NmZyk7CQkvKiBSZXNldCAqLwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCWkgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJmludHJfaGFuZGxlciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZpbnRyX2hhbmRsZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGkpCiAJCWdvdG8gb3V0X2VycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCA2M2MyMTc1Li5mODc0ZTRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCWludCByZXR2YWw7CiAJZW50ZXIoInhpcmNvbV9vcGVuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAieGlyY29tIGNhcmRidXMgYWRhcHRvciBmb3VuZCwgcmVnaXN0ZXJpbmcgYXMgJXMsIHVzaW5nIGlycSAlaSBcbiIsZGV2LT5uYW1lLGRldi0+aXJxKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnhpcmNvbV9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ4aXJjb21faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJbGVhdmUoInhpcmNvbV9vcGVuIC0gTm8gSVJRIik7CiAJCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fdHVsaXBfY2IuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV90dWxpcF9jYi5jCmluZGV4IDg4N2Q3MjQuLjA5MWViYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV90dWxpcF9jYi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV90dWxpcF9jYi5jCkBAIC05OCw3ICs5OCw2IEBACiAvKiBQQ0kgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSV9QT1dFUk1HTVQgCTB4NDAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC04MDgsNyArODA3LDcgQEAKIHsKIAlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJnhpcmNvbV9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikpCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmeGlyY29tX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAl4aXJjb21fdXAoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggNmM2MmQ1Yy4uMzI5ZDlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCSIoQykgMTk5OS0yMDA0IE1heCBLcmFzbnlhbnNreSA8bWF4a0BxdWFsY29tbS5jb20+IgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTc4MCw3ICs3NzksNiBAQAogCS5taW5vciA9IFRVTl9NSU5PUiwKIAkubmFtZSA9ICJ0dW4iLAogCS5mb3BzID0gJnR1bl9mb3BzLAotCS5kZXZmc19uYW1lID0gIm5ldC90dW4iLAogfTsKIAogLyogZXRodG9vbCBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBlNDllOGI1Li4wNjM4MTZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMjEzMSw3ICsyMTMxLDcgQEAKIAkJZ290byBvdXRfc2xlZXA7CiAJfQogCi0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0eXBob29uX2ludGVycnVwdCwgU0FfU0hJUlEsCisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ0eXBob29uX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJZGV2LT5uYW1lLCBkZXYpOwogCWlmKGVyciA8IDApCiAJCWdvdG8gb3V0X3NsZWVwOwpAQCAtMjU2OCw5ICsyNTY4LDEwIEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCAlcyAweCVseCwgIiwKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXQgJXMgMHglbGx4LCAiLAogCSAgICAgICBkZXYtPm5hbWUsIHR5cGhvb25fY2FyZF9pbmZvW2NhcmRfaWRdLm5hbWUsCi0JICAgICAgIHVzZV9tbWlvID8gIk1NSU8iIDogIklPIiwgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHVzZV9tbWlvKSk7CisJICAgICAgIHVzZV9tbWlvID8gIk1NSU8iIDogIklPIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgdXNlX21taW8pKTsKIAlmb3IoaSA9IDA7IGkgPCA1OyBpKyspCiAJCXByaW50aygiJTIuMng6IiwgZGV2LT5kZXZfYWRkcltpXSk7CiAJcHJpbnRrKCIlMi4yeFxuIiwgZGV2LT5kZXZfYWRkcltpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCmluZGV4IGM4MGE0ZjEuLjk4YjZmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CiAJaW50IHJjOwogCi0JcmMgPSByZXF1ZXN0X2lycShycC0+cGRldi0+aXJxLCAmcmhpbmVfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLAorCXJjID0gcmVxdWVzdF9pcnEocnAtPnBkZXYtPmlycSwgJnJoaW5lX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwKIAkJCWRldik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0xOTk5LDcgKzE5OTksNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKIAotICAgICAgICBpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIHJoaW5lX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSkKKyAgICAgICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCByaGluZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpCiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXJoaW5lICVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAKIAlyZXQgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IDA5ZTA1ZmUuLmJhMjk3MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC00Nyw3ICs0Nyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02NSw3ICs2NCw2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgpAQCAtMTc1Miw3ICsxNzUwLDcgQEAKIAkKIAl2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycyh2cHRyLCBWRUxPQ0lUWV9JTklUX0NPTEQpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEodnB0ci0+cGRldi0+aXJxLCAmdmVsb2NpdHlfaW50ciwgU0FfU0hJUlEsCisJcmV0ID0gcmVxdWVzdF9pcnEodnB0ci0+cGRldi0+aXJxLCAmdmVsb2NpdHlfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCBlMzkyZWU4Li4xZjk1YjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTc5LDEzICs3OSwxMSBAQAogDAogLyogLS0tLS0tLS0tLSBIZWFkZXJzLCBtYWNyb3MsIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzkzLDcgKzM5MSw2IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQlkZXZmc19ta19kaXIoImNvc2EiKTsKIAljb3NhX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiY29zYSIpOwogCWlmIChJU19FUlIoY29zYV9jbGFzcykpIHsKIAkJZXJyID0gUFRSX0VSUihjb3NhX2NsYXNzKTsKQEAgLTQwMiwxMyArMzk5LDYgQEAKIAlmb3IgKGk9MDsgaTxucl9jYXJkczsgaSsrKSB7CiAJCWNsYXNzX2RldmljZV9jcmVhdGUoY29zYV9jbGFzcywgTlVMTCwgTUtERVYoY29zYV9tYWpvciwgaSksCiAJCQkJTlVMTCwgImNvc2ElZCIsIGkpOwotCQllcnIgPSBkZXZmc19ta19jZGV2KE1LREVWKGNvc2FfbWFqb3IsIGkpLAotCQkJCVNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLAotCQkJCSJjb3NhLyVkIiwgaSk7Ci0JCWlmIChlcnIpIHsKLQkJCWNsYXNzX2RldmljZV9kZXN0cm95KGNvc2FfY2xhc3MsIE1LREVWKGNvc2FfbWFqb3IsIGkpKTsKLQkJCWdvdG8gb3V0X2NocmRldjsJCQotCQl9CiAJfQogCWVyciA9IDA7CiAJZ290byBvdXQ7CkBAIC00MjYsMTIgKzQxNiw5IEBACiAJaW50IGk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVW5sb2FkaW5nIHRoZSBjb3NhIG1vZHVsZVxuIik7CiAKLQlmb3IgKGk9MDsgaTxucl9jYXJkczsgaSsrKSB7CisJZm9yIChpPTA7IGk8bnJfY2FyZHM7IGkrKykKIAkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koY29zYV9jbGFzcywgTUtERVYoY29zYV9tYWpvciwgaSkpOwotCQlkZXZmc19yZW1vdmUoImNvc2EvJWQiLCBpKTsKLQl9CiAJY2xhc3NfZGVzdHJveShjb3NhX2NsYXNzKTsKLQlkZXZmc19yZW1vdmUoImNvc2EiKTsKIAlmb3IgKGNvc2E9Y29zYV9jYXJkczsgbnJfY2FyZHMtLTsgY29zYSsrKSB7CiAJCS8qIENsZWFuIHVwIHRoZSBwZXItY2hhbm5lbCBkYXRhICovCiAJCWZvciAoaT0wOyBpPGNvc2EtPm5jaGFubmVsczsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCmluZGV4IDQ1MDU1NDAuLjY4NGFmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC03MzIsMTUgKzczMiwxNSBAQAogCWlvYWRkciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAogCQkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIAlpZiAoIWlvYWRkcikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAotCQkJRFJWX05BTUUsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCksCi0JCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWxseCBAICVsbHhcbiIsCisJCQlEUlZfTkFNRSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZXJyX2ZyZWVfbW1pb19yZWdpb25zXzI7CiAJfQotCXByaW50ayhLRVJOX0RFQlVHICJTaWVtZW5zIERTQ0M0LCBNTUlPIGF0ICUjbHggKHJlZ3MpLCAlI2x4IChsYmkpLCBJUlEgJWRcbiIsCi0JICAgICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCi0JICAgICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSksIHBkZXYtPmlycSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlNpZW1lbnMgRFNDQzQsIE1NSU8gYXQgJSNsbHggKHJlZ3MpLCAlI2xseCAobGJpKSwgSVJRICVkXG4iLAorCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSwgcGRldi0+aXJxKTsKIAogCS8qIENmIGVycmF0YSBEUzUgcC4yICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGY4KTsKQEAgLTc1Miw3ICs3NTIsNyBAQAogCiAJcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkc2NjNF9pcnEsIFNBX1NISVJRLCBEUlZfTkFNRSwgcHJpdi0+cm9vdCk7CisJcmMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRzY2M0X2lycSwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBwcml2LT5yb290KTsKIAlpZiAocmMgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJUlEgJWQgYnVzeVxuIiwgRFJWX05BTUUsIHBkZXYtPmlycSk7CiAJCWdvdG8gZXJyX3JlbGVhc2VfNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDc5ODFhMmMuLjM3MDVkYjA0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC0yNTE5LDcgKzI1MTksNyBAQAogCWRiZyhEQkdfUENJLCAia2VybmVsIG1lbSAlcCwgY3RsbWVtICVwXG4iLCBjYXJkLT5tZW0sIGNhcmQtPmN0bG1lbSk7CiAKIAkvKiBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBmc3RfaW50ciwgU0FfU0hJUlEsIEZTVF9ERVZfTkFNRSwgY2FyZCkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBmc3RfaW50ciwgSVJRRl9TSEFSRUQsIEZTVF9ERVZfTkFNRSwgY2FyZCkpIHsKIAkJcHJpbnRrX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGludGVycnVwdCAlZFxuIiwgY2FyZC0+aXJxKTsKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZ2VuZXJpYy5jCmluZGV4IDU3Zjk1MzguLmI3ZGE1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19nZW5lcmljLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIC0gcHJvdG8uc3RhcnQoKSBhbmQgc3RvcCgpIGFyZSBjYWxsZWQgd2l0aCBzcGluX2xvY2tfaXJxIGhlbGQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwppbmRleCBjZjVjODA1Li5hNGY3MzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkvKiBXZSB3YW50IGEgZmFzdCBJUlEgZm9yIHRoaXMgZGV2aWNlLiBBY3R1YWxseSB3ZSdkIGxpa2UgYW4gZXZlbiBmYXN0ZXIKIAkgICBJUlEgOykgLSBUaGlzIGlzIG9uZSBkcml2ZXIgUnRMaW51eCBpcyBtYWRlIGZvciAqLwogCSAgIAotCWlmKHJlcXVlc3RfaXJxKGlycSwgJno4NTMwX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiSG9zdGVzcyBTVjExIiwgZGV2KTwwKQorCWlmKHJlcXVlc3RfaXJxKGlycSwgJno4NTMwX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIkhvc3Rlc3MgU1YxMSIsIGRldik8MCkKIAl7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3Rlc3M6IElSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsIGlycSk7CiAJCWdvdG8gZmFpbDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKaW5kZXggNDA5MjZkNy4uMzlmNDQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKICAgICBsbWNfc29mdHJlc2V0IChzYyk7CiAKICAgICAvKiBTaW5jZSB3ZSBoYXZlIHRvIHVzZSBQQ0kgYnVzLCB0aGlzIHNob3VsZCB3b3JrIG9uIHg4NixhbHBoYSxwcGMgKi8KLSAgICBpZiAocmVxdWVzdF9pcnEgKGRldi0+aXJxLCAmbG1jX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSl7CisgICAgaWYgKHJlcXVlc3RfaXJxIChkZXYtPmlycSwgJmxtY19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpewogICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogY291bGQgbm90IGdldCBpcnE6ICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKICAgICAgICAgbG1jX3RyYWNlKGRldiwgImxtY19vcGVuIGlycSBmYWlsZWQgb3V0Iik7CiAgICAgICAgIHJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21lZGlhLmMKaW5kZXggYWY4YjU1Zi4uYWUwMTU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tZWRpYS5jCkBAIC0xLDYgKzEsNSBAQAogLyogJElkOiBsbWNfbWVkaWEuYyx2IDEuMTMgMjAwMC8wNC8xMSAwNToyNToyNiBhc2ogRXhwICQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKaW5kZXggYTNlNjVkMS4uNTY3ZWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwpAQCAtMzQ0NSw5ICszNDQ1LDkgQEAKIAogCWNhcmQgPSAocGMzMDBfdCAqKSBrbWFsbG9jKHNpemVvZihwYzMwMF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhcmQgPT0gTlVMTCkgewotCQlwcmludGsoIlBDMzAwIGZvdW5kIGF0IFJBTSAweCUwOGx4LCAiCisJCXByaW50aygiUEMzMDAgZm91bmQgYXQgUkFNIDB4JTAxNmxseCwgIgogCQkgICAgICAgImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUuXG4iLAotCQkgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpKTsKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZGlzYWJsZV9kZXY7CiAJfQpAQCAtMzYwMCw3ICszNjAwLDcgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBJUlEgKi8KLQlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aHcuaXJxLCBjcGNfaW50ciwgU0FfU0hJUlEsICJDeWNsYWRlcy1QQzMwMCIsIGNhcmQpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmh3LmlycSwgY3BjX2ludHIsIElSUUZfU0hBUkVELCAiQ3ljbGFkZXMtUEMzMDAiLCBjYXJkKSkgewogCQlwcmludGsgKCJQQzMwMCBmb3VuZCBhdCBSQU0gMHglMDh4LCBidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSVkLlxuIiwKIAkJCSBjYXJkLT5ody5yYW1waHlzLCBjYXJkLT5ody5pcnEpOwogCQlnb3RvIGVycl9pb191bm1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwppbmRleCAyNGMzYzU3Li40ZGY2MWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAl3cml0ZXcocmVhZHcocCkgfCAweDAwNDAsIHApOwogCiAJLyogQWxsb2NhdGUgSVJRICovCi0JaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2NhX2ludHIsIFNBX1NISVJRLCBkZXZuYW1lLCBjYXJkKSkgeworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNjYV9pbnRyLCBJUlFGX1NIQVJFRCwgZGV2bmFtZSwgY2FyZCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpMjAwc3luOiBjb3VsZCBub3QgYWxsb2NhdGUgSVJRJWQuXG4iLAogCQkgICAgICAgcGRldi0+aXJxKTsKIAkJcGNpMjAwX3BjaV9yZW1vdmVfb25lKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKaW5kZXggMTc1YmExMy4uZmM3NWJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCkBAIC0zNyw3ICszNyw2IEBACiAgKglLbm93biBwcm9ibGVtOiB0aGlzIGRyaXZlciB3YXNuJ3QgdGVzdGVkIG9uIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpAQCAtMTE5Myw3ICsxMTkyLDcgQEAKIAkJCX0KIAl9CiAKLQlpZiggcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNibmlfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICkgeworCWlmKCByZXF1ZXN0X2lycShkZXYtPmlycSwgc2JuaV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgKSB7CiAJCXByaW50ayggS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsCiAJCQlkZXYtPm5hbWUsIGRldi0+aXJxICk7CiAJCXJldHVybiAgLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jIGIvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMKaW5kZXggMDUwZTg1NC4uNzBmYjFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCS8qIFdlIHdhbnQgYSBmYXN0IElSUSBmb3IgdGhpcyBkZXZpY2UuIEFjdHVhbGx5IHdlJ2QgbGlrZSBhbiBldmVuIGZhc3RlcgogCSAgIElSUSA7KSAtIFRoaXMgaXMgb25lIGRyaXZlciBSdExpbnV4IGlzIG1hZGUgZm9yICovCiAgICAKLQlpZihyZXF1ZXN0X2lycShpcnEsICZ6ODUzMF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgIlNlYUxldmVsIiwgZGV2KTwwKQorCWlmKHJlcXVlc3RfaXJxKGlycSwgJno4NTMwX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIlNlYUxldmVsIiwgZGV2KTwwKQogCXsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2VhbGV2ZWw6IElSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsIGlycSk7CiAJCWdvdG8gZmFpbDFfMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vc3luY3BwcC5jCmluZGV4IDJkMWJiYTAuLmMxM2I0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3N5bmNwcHAuYwpAQCAtMzcsNyArMzcsNiBAQAogICovCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCmluZGV4IDQzN2UwZTkuLmQ1NjQyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCkBAIC03NTUsNyArNzU1LDcgQEAKIAkgICAgICAgcGNpX25hbWUocGRldiksIHBseF9waHksIHJhbXNpemUgLyAxMDI0LCBtZW1fcGh5LCBwZGV2LT5pcnEpOwogCiAJLyogQWxsb2NhdGUgSVJRICovCi0JaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgd2FueGxfaW50ciwgU0FfU0hJUlEsICJ3YW5YTCIsIGNhcmQpKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgd2FueGxfaW50ciwgSVJRRl9TSEFSRUQsICJ3YW5YTCIsIGNhcmQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIndhblhMICVzOiBjb3VsZCBub3QgYWxsb2NhdGUgSVJRJWkuXG4iLAogCQkgICAgICAgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CiAJCXdhbnhsX3BjaV9yZW1vdmVfb25lKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDQwNjliNzkuLmE0ZGQxMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC0xOSw3ICsxOSw2IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yODQ5LDcgKzI4NDgsNyBAQAogCXJlc2V0X2NhcmQgKGRldiwgMSk7CiAJbXNsZWVwKDQwMCk7CiAKLQlyYyA9IHJlcXVlc3RfaXJxKCBkZXYtPmlycSwgYWlyb19pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldiApOworCXJjID0gcmVxdWVzdF9pcnEoIGRldi0+aXJxLCBhaXJvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2ICk7CiAJaWYgKHJjKSB7CiAJCWFpcm9fcHJpbnRfZXJyKGRldi0+bmFtZSwgInJlZ2lzdGVyIGludGVycnVwdCAlZCBmYWlsZWQsIHJjICVkIiwKIAkJCQlpcnEsIHJjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwppbmRleCBhZjBjYmI2Li5hYzk0MzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCkBAIC0yMCw3ICsyMCw2IEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIF9fSU5fUENNQ0lBX1BBQ0tBR0VfXwogI2luY2x1ZGUgPHBjbWNpYS9rX2NvbXBhdC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJwb3J0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJwb3J0LmMKaW5kZXggN2IzMjFmNy4uMzhmYWMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlycG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpcnBvcnQuYwpAQCAtMTQsNyArMTQsNiBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAiYWlycG9ydCIKICNkZWZpbmUgUEZYIERSSVZFUl9OQU1FICI6ICIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwppbmRleCBiZWQ2ODIzLi5iYjZiZWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCkBAIC01LDcgKzUsNiBAQAogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEFybGFuIDY1NSBjYXJkIG1hZGUgYnkgQWlyb25ldAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJhcmxhbi5oIgogCiAjaWYgQklUU19QRVJfTE9ORyAhPSAzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tcHJvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tcHJvYy5jCmluZGV4IGEyY2NhNTIuLjVmYTk4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLXByb2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1wcm9jLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiYXJsYW4uaCIKIAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLmgKaW5kZXggNzBhNmQ3Yi4uM2VkMWRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi5oCkBAIC01LDcgKzUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggODYwNmM4OC4uOTk1YzdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC0zOSw3ICszOSw2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTU3OCw3ICsxNTc3LDcgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgc3lzX2Rldik7CiAKLQlpZiAoKHJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNlcnZpY2VfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKSkgeworCWlmICgocmMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc2VydmljZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZ2lzdGVyIGludGVycnVwdCAlZCBmYWlsZWQsIHJjICVkXG4iLCBkZXYtPm5hbWUsIGlycSwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCAyNmJmMTEyLi43ODU2NjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTI5LDcgKzI5LDYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZkZWYgX19JTl9QQ01DSUFfUEFDS0FHRV9fCiAjaW5jbHVkZSA8cGNtY2lhL2tfY29tcGF0Lmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKaW5kZXggYTYxYjNiYy4uZDQyNWMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZXRodG9vbC5jCmluZGV4IGIzZmZjZjUuLmUzODZkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2V0aHRvb2wuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CiAKIAogc3RhdGljIHZvaWQgYmNtNDN4eF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKaW5kZXggMjdiY2Y0Ny4uZDhmNTYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCkBAIC0yMTc1LDcgKzIxNzUsNyBAQAogCX0KICNlbmRpZgogCXJlcyA9IHJlcXVlc3RfaXJxKGJjbS0+aXJxLCBiY200M3h4X2ludGVycnVwdF9oYW5kbGVyLAotCQkJICBTQV9TSElSUSwgS0JVSUxEX01PRE5BTUUsIGJjbSk7CisJCQkgIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgYmNtKTsKIAlpZiAocmVzKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBJUlElZFxuIiwgYmNtLT5pcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmMKaW5kZXggMmFhMmYzOC4uMjlkMzkxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmMKQEAgLTM4LDcgKzM4LDYgQEAKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCBkYjAzZGMyLi41MmU2ZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC0xLDYgKzEsNSBAQAogI2RlZmluZSBQUklTTTJfUENDQVJECiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KQEAgLTg0NCw3ICs4NDMsNyBAQAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDJkMiwgMHgwMDAxKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDUwYzIsIDB4MDAwMSksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHg1MGMyLCAweDczMDApLAotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4YzAwZiwgMHgwMDAwKSwKKy8qCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4YzAwZiwgMHgwMDAwKSwgICAgY29uZmxpY3Qgd2l0aCBwY25ldF9jcyAqLwogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4ZDYwMSwgMHgwMDAyKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwNSksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMTApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCmluZGV4IDMyOGU5YTEuLmRhZmFhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKQEAgLTMwLDcgKzMwLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zMDk2LDYgKzMwOTUsMTQgQEAKIH0KIAogCisvKgorICogSG9zdEFQIHVzZXMgdHdvIGxheWVycyBvZiBuZXQgZGV2aWNlcywgd2hlcmUgdGhlIGlubmVyCisgKiBsYXllciBnZXRzIGNhbGxlZCBhbGwgdGhlIHRpbWUgZnJvbSB0aGUgb3V0ZXIgbGF5ZXIuCisgKiBUaGlzIGlzIGEgbmF0dXJhbCBuZXN0aW5nLCB3aGljaCBuZWVkcyBhIHNwbGl0IGxvY2sgdHlwZS4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBob3N0YXBfbmV0ZGV2X3htaXRfbG9ja19rZXk7CisKKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoKIHByaXNtMl9pbml0X2xvY2FsX2RhdGEoc3RydWN0IHByaXNtMl9oZWxwZXJfZnVuY3Rpb25zICpmdW5jcywgaW50IGNhcmRfaWR4LAogCQkgICAgICAgc3RydWN0IGRldmljZSAqc2RldikKQEAgLTMyNjAsNiArMzI2Nyw4IEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCBzZGV2KTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCisJbG9ja2RlcF9zZXRfY2xhc3MoJmRldi0+X3htaXRfbG9jaywgJmhvc3RhcF9uZXRkZXZfeG1pdF9sb2NrX2tleSk7CiAJcnRubF91bmxvY2soKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVnaXN0ZXIgbmV0ZGV2aWNlIGZhaWxlZCFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDkzNzg2ZjQuLjUzMzc0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwppbmRleCAxOTRmMDcwLi5jMmZhMDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKQEAgLTQsNyArNCw2IEBACiAgKiBkcml2ZXIgcGF0Y2hlcyBmcm9tIFJleWsgRmxvZXRlciA8cmV5a0B2YW50cm9uaXgubmV0PiBhbmQKICAqIEFuZHkgV2FybmVyIDxhbmR5d0Bwb2JveC5jb20+ICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KQEAgLTMzOCw3ICszMzcsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIHByaXNtMl9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBwcmlzbTJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLAogCQkJZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmVxdWVzdF9pcnEgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwppbmRleCBlZGFhYTk0Li40OTg2MGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKQEAgLTcsNyArNyw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CkBAIC01NTEsNyArNTUwLDcgQEAKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBwcmlzbTJfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLAorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgcHJpc20yX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwKIAkJCWRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCmluZGV4IDk0YWViMjMuLmU5NTVkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTUzNTgsNyArNTM1Nyw3IEBACiAJCSAgICAgaWR4LCBrZXlsZW4sIGxlbik7CiAKIAkvKiBOT1RFOiBXZSBkb24ndCBjaGVjayBjYWNoZWQgdmFsdWVzIGluIGNhc2UgdGhlIGZpcm13YXJlIHdhcyByZXNldAotCSAqIG9yIHNvbWUgb3RoZXIgcHJvYmxlbSBpcyBvY2N1cmluZy4gIElmIHRoZSB1c2VyIGlzIHNldHRpbmcgdGhlIGtleSwKKwkgKiBvciBzb21lIG90aGVyIHByb2JsZW0gaXMgb2NjdXJyaW5nLiAgSWYgdGhlIHVzZXIgaXMgc2V0dGluZyB0aGUga2V5LAogCSAqIHRoZW4gd2UgcHVzaCB0aGUgY2hhbmdlICovCiAKIAl3ZXBfa2V5LT5pZHggPSBpZHg7CkBAIC02MjMwLDcgKzYyMjksNyBAQAogCWlwdzIxMDBfcXVldWVzX2luaXRpYWxpemUocHJpdik7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwY2lfZGV2LT5pcnEsCi0JCQkgIGlwdzIxMDBfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBwcml2KTsKKwkJCSAgaXB3MjEwMF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQogCQkgICAgICAgIkVycm9yIGNhbGxpbmcgcmVxdWVzdF9pcnE6ICVkLlxuIiwgcGNpX2Rldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwppbmRleCBhOGE4Zjk3Li5iMzMwMGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCkBAIC0xMTU0NSw3ICsxMTU0NSw3IEBACiAKIAlpcHdfc3dfcmVzZXQocHJpdiwgMSk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGlwd19pc3IsIFNBX1NISVJRLCBEUlZfTkFNRSwgcHJpdik7CisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcHdfaXNyLCBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVBXX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKIAkJZ290byBvdXRfZGVzdHJveV93b3JrcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKaW5kZXggZWExMmFkNi4uOGIxY2Q3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCmluZGV4IDkzNDNkOTcuLjM2YjVlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTM3LDcgKzM3LDYgQEAKIC8qIFRvIGhhdmUgc3RhdGlzdGljcyAoanVzdCBwYWNrZXRzIHNlbnQpIGRlZmluZSB0aGlzICovCiAjdW5kZWYgTkVUV0FWRV9TVEFUUwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCmluZGV4IDhhMzFiNTkuLmQ2ZWQ1NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKQEAgLTc2LDcgKzc2LDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jbyIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwppbmRleCBiMmFlYzRkLi5iYzE0Njg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC0xMyw3ICsxMyw2IEBACiAjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvX2NzIgogI2RlZmluZSBQRlggRFJJVkVSX05BTUUgIjogIgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19ub3J0ZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMKaW5kZXggNzRiOWQ1Yi4uYmYwNWI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19ub3J0ZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX25vcnRlbC5jCkBAIC00MCw3ICs0MCw2IEBACiAjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvX25vcnRlbCIKICNkZWZpbmUgUEZYIERSSVZFUl9OQU1FICI6ICIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE5OSw3ICsxOTgsNyBAQAogCiAJaGVybWVzX3N0cnVjdF9pbml0KCZwcml2LT5odywgaGVybWVzX2lvLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCBTQV9TSElSUSwKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5jCmluZGV4IDFjMTA1ZjQuLjE3NTljNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuYwpAQCAtNDQsNyArNDQsNiBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jb19wY2kiCiAjZGVmaW5lIFBGWCBEUklWRVJfTkFNRSAiOiAiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xNTQsNyArMTUzLDcgQEAKIAogCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzMyQklUX1JFR1NQQUNJTkcpOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgU0FfU0hJUlEsCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBJUlEgJWRcbiIsIHBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuaAppbmRleCA3ZWIxZTA4Li5iZTFhYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmUtYWxsb2NhdGUgSVJRIG9uIHJlc3VtZVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BseC5jCmluZGV4IDg0ZjY5NmMuLjdmMDA2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYwpAQCAtODYsNyArODYsNiBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jb19wbHgiCiAjZGVmaW5lIFBGWCBEUklWRVJfTkFNRSAiOiAiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMzgsNyArMjM3LDcgQEAKIAogCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgU0FfU0hJUlEsCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBJUlEgJWRcbiIsIHBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3RtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb190bWQuYwppbmRleCBkMmI0ZGVjLi4wODMxNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3RtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fdG1kLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY29fdG1kIgogI2RlZmluZSBQRlggRFJJVkVSX05BTUUgIjogIgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTQwLDcgKzEzOSw3IEBACiAKIAloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgSVJRICVkXG4iLCBwZGV2LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCmluZGV4IGJmYTBjYzMuLjA5ZmMxN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCiAJLyogcmVxdWVzdCBmb3IgdGhlIGludGVycnVwdCBiZWZvcmUgdXBsb2FkaW5nIHRoZSBmaXJtd2FyZSAqLwogCXJ2YWx1ZSA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgJmlzbHBjaV9pbnRlcnJ1cHQsCi0JCQkgICAgIFNBX1NISVJRLCBuZGV2LT5uYW1lLCBwcml2KTsKKwkJCSAgICAgSVJRRl9TSEFSRUQsIG5kZXYtPm5hbWUsIHByaXYpOwogCiAJaWYgKHJ2YWx1ZSkgewogCQkvKiBlcnJvciwgY291bGQgbm90IGhvb2sgdGhlIGhhbmRsZXIgdG8gdGhlIGlycSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYwppbmRleCA2YTYwYzU5Li4yZTA2MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYwpAQCAtMTgsNyArMTgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L3ByaXNtY29tcGF0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L3ByaXNtY29tcGF0LmgKaW5kZXggNTU1NDFjMC4uZDcxZWNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9wcmlzbWNvbXBhdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvcHJpc21jb21wYXQuaApAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IGE5MTVmZTYuLjYxYjgzYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IDdmOWFhMTMuLjE1NDY1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAic3BlY3RydW1fY3MiCiAjZGVmaW5lIFBGWCBEUklWRVJfTkFNRSAiOiAiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCAxOGE0NDU4Li5mZDMxODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTgxLDcgKzgxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBIZWFkZXIgZmlsZXMJCQkJCQkJCSovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCmluZGV4IGM2NWZlN2EuLmYzNGEzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCkBAIC00MTEsNyArNDExLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJTkNMVURFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogTGludXggaGVhZGVycyB0aGF0IHdlIG5lZWQgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IGU1MmE2NTAuLmMwM2U0MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KICN1bmRlZiBSRUFMTFlfU0xPV19JTwkvKiBtb3N0IHN5c3RlbXMgY2FuIHNhZmVseSB1bmRlZiB0aGlzICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCA1NjkzMDVmLi5iYmJmN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJLyogUmVzZXQgdGhlIGNoaXAuICovCiAJaW93cml0ZTMyKDB4ODAwMDAwMDAsIGlvYWRkciArIERNQUN0cmwpOwogCi0JaSA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmeWVsbG93ZmluX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ5ZWxsb3dmaW5faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChpKSByZXR1cm4gaTsKIAogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvem5ldC5jIGIvZHJpdmVycy9uZXQvem5ldC5jCmluZGV4IGE3YzA4OWQuLjlmMDI5MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3puZXQuYworKysgYi9kcml2ZXJzL25ldC96bmV0LmMKQEAgLTg1LDcgKzg1LDYgQEAKICAgIC0gVW5kZXJzdGFuZCB3aHkgc29tZSB0cmFmZmljIHBhdHRlcm5zIGFkZCBhIDFzIGxhdGVuY3kuLi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96b3JybzgzOTAuYyBiL2RyaXZlcnMvbmV0L3pvcnJvODM5MC5jCmluZGV4IDgwMzdlNTguLmRmMDRlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3pvcnJvODM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3pvcnJvODM5MC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICBkZXYtPmlycSA9IElSUV9BTUlHQV9QT1JUUzsKIAogICAgIC8qIEluc3RhbGwgdGhlIEludGVycnVwdCBoYW5kbGVyICovCi0gICAgaSA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZWlfaW50ZXJydXB0LCBTQV9TSElSUSwgRFJWX05BTUUsIGRldik7CisgICAgaSA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZWlfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGRldik7CiAgICAgaWYgKGkpIHJldHVybiBpOwogCiAgICAgZm9yKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jIGIvZHJpdmVycy9udWJ1cy9udWJ1cy5jCmluZGV4IDE0Y2JlMzQuLjNhMGEzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnVidXMvbnVidXMuYworKysgYi9kcml2ZXJzL251YnVzL251YnVzLmMKQEAgLTcsNyArNyw2IEBACiAgKiAgICAgIGFuZCBvdGhlcnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL251YnVzL251YnVzX3N5bXMuYyBiL2RyaXZlcnMvbnVidXMvbnVidXNfc3ltcy5jCmluZGV4IDIyYzFkYzkuLjkyMDRmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnVidXMvbnVidXNfc3ltcy5jCisrKyBiL2RyaXZlcnMvbnVidXMvbnVidXNfc3ltcy5jCkBAIC0yLDcgKzIsNiBAQAogCiAgICAoYykgMTk5OSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+ICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L251YnVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9LY29uZmlnIGIvZHJpdmVycy9wYXJpc2MvS2NvbmZpZwppbmRleCAzZjVkZTg2Li4xZDNiODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGFyaXNjL0tjb25maWcKQEAgLTE0MCwxOCArMTQwLDM3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgUERDX0NIQVNTSVMKLQlib29sICJQREMgY2hhc3NpcyBTdGF0ZSBQYW5lbCBzdXBwb3J0IgorCWJvb2wgIlBEQyBjaGFzc2lzIHN0YXRlIGNvZGVzIHN1cHBvcnQiCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIExFRCBTdGF0ZSBmcm9udAotCSAgcGFuZWwgYXMgZm91bmQgb24gRSBjbGFzcywgYW5kIHN1cHBvcnQgZm9yIHRoZSBHU1AgVmlydHVhbCBGcm9udAotCSAgUGFuZWwgKExFRCBTdGF0ZSBhbmQgbWVzc2FnZSBsb2dnaW5nKSAgYXMgZm91bmQgb24gaGlnaCBlbmQKLQkgIHNlcnZlcnMgc3VjaCBhcyBBLCBMIGFuZCBOLWNsYXNzLgotCSAgCi0JICBUaGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggQ2hhc3NpcyBMQ0QgYW5kIExFRCBzdXBwb3J0LgorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgQ2hhc3NpcyBjb2Rlcy4KKwkgIFRoYXQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgTEVEIFN0YXRlIGZyb250IHBhbmVsIGFzIGZvdW5kIG9uIEUKKwkgIGNsYXNzLCBhbmQgc3VwcG9ydCBmb3IgdGhlIEdTUCBWaXJ0dWFsIEZyb250IFBhbmVsIChMRUQgU3RhdGUgYW5kCisJICBtZXNzYWdlIGxvZ2dpbmcpICBhcyBmb3VuZCBvbiBoaWdoIGVuZCBzZXJ2ZXJzIHN1Y2ggYXMgQSwgTCBhbmQKKwkgIE4tY2xhc3MuCisJICBUaGlzIGRyaXZlciB3aWxsIGFsc28gZGlzcGxheSBwcm9ncmVzcyBtZXNzYWdlcyBvbiBMQ0QgZGlzcGxheSwKKwkgIHN1Y2ggYXMgIklOSSIsICJSVU4iIGFuZCAiRkxUIiwgYW5kIG1pZ2h0IHRodXMgY2xvYmJlciBtZXNzYWdlcworCSAgc2hvd24gYnkgdGhlIExFRC9MQ0QgZHJpdmVyLgorCSAgVGhpcyBkcml2ZXIgdXBkYXRlcyB0aGUgc3RhdGUgcGFuZWwgKExFRCBhbmQvb3IgTENEKSB1cG9uIHN5c3RlbQorCSAgc3RhdGUgY2hhbmdlIChlZzogYm9vdCwgc2h1dGRvd24gb3IgcGFuaWMpLgogCSAgCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCisKK2NvbmZpZyBQRENfQ0hBU1NJU19XQVJOCisJYm9vbCAiUERDIGNoYXNzaXMgd2FybmluZ3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBST0NfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBDaGFzc2lzIHdhcm5pbmdzLgorCSAgVGhpcyB3aWxsIGFkZCBhIHByb2MgZW50cnkgJy9wcm9jL2NoYXNzaXMnIGdpdmluZyBzb21lIGluZm9ybWF0aW9uCisJICBhYm91dCB0aGUgb3ZlcmFsbCBoZWFsdGggc3RhdGUgb2YgdGhlIHN5c3RlbS4KKwkgIFRoaXMgaW5jbHVkZXMgTlZSQU0gYmF0dGVyeSBsZXZlbCwgb3ZlcnRlbXAgb3IgZmFpbHVyZXMgc3VjaCBhcworCSAgZmFucyBvciBwb3dlciB1bml0cy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworCiBjb25maWcgUERDX1NUQUJMRQogCXRyaXN0YXRlICJQREMgU3RhYmxlIFN0b3JhZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNZU0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jIGIvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYwppbmRleCBhNWQ4MjYyMy4uNjhjYjNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYworKysgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCkBAIC0zMSw3ICszMSw2IEBACiAqKiAgICAgICAgdGhlIGNvaGVyZW5jeSBkZXNpZ24gb3JpZ2luYWxseSB3b3JrZWQgb3V0LiBPbmx5IFBDWC1XIGRvZXMuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwppbmRleCA2ZThlZDBjLi4wZDk2YzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCkBAIC00Myw3ICs0Myw2IEBACiAqKiAgICAgICBmb3IgUENJIGRyaXZlcnMgZGV2aWNlcyB3aGljaCBpbXBsZW1lbnQvdXNlIE1NSU8gcmVnaXN0ZXJzLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5OSw3ICsyOTgsNyBAQAogCiBzdGF0aWMgdm9pZCBkaW5vX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGlycV9kZXNjW2lycV0uaGFuZGxlcl9kYXRhOworCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKIAlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgZGlub19kZXYtPmdsb2JhbF9pcnEsIERJTk9fTE9DQUxfSVJRUyk7CiAKIAlEQkcoS0VSTl9XQVJOSU5HICIlcygweCVwLCAlZClcbiIsIF9fRlVOQ1RJT05fXywgZGlub19kZXYsIGlycSk7CkBAIC0zMTEsNyArMzEwLDcgQEAKIAogc3RhdGljIHZvaWQgZGlub19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGlycV9kZXNjW2lycV0uaGFuZGxlcl9kYXRhOworCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKIAlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgZGlub19kZXYtPmdsb2JhbF9pcnEsIERJTk9fTE9DQUxfSVJRUyk7CiAJdTMyIHRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZWlzYS5jIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCmluZGV4IDlkM2JkMTUuLjg4NDk2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYworKysgYi9kcml2ZXJzL3BhcmlzYy9laXNhLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCX0KIAlwY2liaW9zX3JlZ2lzdGVyX2hiYSgmZWlzYV9kZXYuaGJhKTsKIAotCXJlc3VsdCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlaXNhX2lycSwgU0FfU0hJUlEsICJFSVNBIiwgJmVpc2FfZGV2KTsKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlzYV9pcnEsIElSUUZfU0hBUkVELCAiRUlTQSIsICZlaXNhX2Rldik7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkVJU0E6IHJlcXVlc3RfaXJxIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gcmVzdWx0OwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJaXJxX2Rlc2NbMl0uYWN0aW9uID0gJmlycTJfYWN0aW9uOwogCQogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZWlzYV9pbnRlcnJ1cHRfdHlwZTsKKwkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlaXNhX2ludGVycnVwdF90eXBlOwogCX0KIAkKIAlFSVNBX2J1cyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9nc2MuYyBiL2RyaXZlcnMvcGFyaXNjL2dzYy5jCmluZGV4IDE2ZDQwZjkuLmI0NWFhNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2dzYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2dzYy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMTA5LDcgKzEwOCw3IEBACiAKIHN0YXRpYyB2b2lkIGdzY19hc2ljX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gaXJxX2Rlc2NbaXJxXS5oYW5kbGVyX2RhdGE7CisJc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CiAJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShpcnEsIGlycV9kZXYtPmdsb2JhbF9pcnEsIDMyKTsKIAl1MzIgaW1yOwogCkBAIC0xMjQsNyArMTIzLDcgQEAKIAogc3RhdGljIHZvaWQgZ3NjX2FzaWNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kZXNjW2lycV0uaGFuZGxlcl9kYXRhOworCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CiAJdTMyIGltcjsKIApAQCAtMTY0LDggKzE2Myw4IEBACiAJaWYgKGlycSA+IEdTQ19JUlFfTUFYKQogCQlyZXR1cm4gTk9fSVJROwogCi0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gdHlwZTsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXJfZGF0YSA9IGRhdGE7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YSA9IGRhdGE7CiAJcmV0dXJuIGlycSsrOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKaW5kZXggN2E0NThkNS4uMWZiZGE3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwpAQCAtNjE5LDcgKzYxOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmVjdG9yX2luZm8gKmlvc2FwaWNfZ2V0X3ZlY3Rvcih1bnNpZ25lZCBpbnQgaXJxKQogewotCXJldHVybiBpcnFfZGVzY1tpcnFdLmhhbmRsZXJfZGF0YTsKKwlyZXR1cm4gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CiB9CiAKIHN0YXRpYyB2b2lkIGlvc2FwaWNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKaW5kZXggMjk4ZjJkZC4uYmYwMGZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvbGVkLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCSAgCQkJICBEYXZpZCBQeWUgPGRtcEBkYXZpZG1weWUuZHluZG5zLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIGZvciBvZmZzZXRvZigpICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNDExLDE2ICs0MTAsMTcgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCBsZWRfZ2V0X2Rpc2tpb19hY3Rpdml0eSh2b2lkKQogewkKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3BncGdpbiwgbGFzdF9wZ3Bnb3V0OwotCXN0cnVjdCBwYWdlX3N0YXRlIHBnc3RhdDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50c1tOUl9WTV9FVkVOVF9JVEVNU107CiAJaW50IGNoYW5nZWQ7CiAKLQlnZXRfZnVsbF9wYWdlX3N0YXRlKCZwZ3N0YXQpOyAvKiBnZXQgbm8gb2Ygc2VjdG9ycyBpbiAmIG91dCAqLworCWFsbF92bV9ldmVudHMoZXZlbnRzKTsKIAogCS8qIEp1c3QgdXNlIGEgdmVyeSBzaW1wbGUgY2FsY3VsYXRpb24gaGVyZS4gRG8gbm90IGNhcmUgYWJvdXQgb3ZlcmZsb3csCiAJICAgc2luY2Ugd2Ugb25seSB3YW50IHRvIGtub3cgaWYgdGhlcmUgd2FzIGFjdGl2aXR5IG9yIG5vdC4gKi8KLQljaGFuZ2VkID0gKHBnc3RhdC5wZ3BnaW4gIT0gbGFzdF9wZ3BnaW4pIHx8IChwZ3N0YXQucGdwZ291dCAhPSBsYXN0X3BncGdvdXQpOwotCWxhc3RfcGdwZ2luICA9IHBnc3RhdC5wZ3BnaW47Ci0JbGFzdF9wZ3Bnb3V0ID0gcGdzdGF0LnBncGdvdXQ7CisJY2hhbmdlZCA9IChldmVudHNbUEdQR0lOXSAhPSBsYXN0X3BncGdpbikgfHwKKwkJICAoZXZlbnRzW1BHUEdPVVRdICE9IGxhc3RfcGdwZ291dCk7CisJbGFzdF9wZ3BnaW4gID0gZXZlbnRzW1BHUEdJTl07CisJbGFzdF9wZ3Bnb3V0ID0gZXZlbnRzW1BHUEdPVVRdOwogCiAJcmV0dXJuIChjaGFuZ2VkID8gTEVEX0RJU0tfSU8gOiAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCBiYmVhYmUzLi5lYTFiN2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC0yOCw4ICsyOCwxNSBAQAogICogICAgZm9sbG93aW5nIGNvZGUgY2FuIGRlYWwgd2l0aCBqdXN0IDk2IGJ5dGVzIG9mIFN0YWJsZSBTdG9yYWdlLCBhbmQgYWxsCiAgKiAgICBzaXplcyBiZXR3ZWVuIDk2IGFuZCAxOTIgYnl0ZXMgKHByb3ZpZGVkIHRoZXkgYXJlIG11bHRpcGxlIG9mIHN0cnVjdAogICogICAgZGV2aWNlX3BhdGggc2l6ZSwgZWc6IDEyOCwgMTYwIGFuZCAxOTIpIHRvIHByb3ZpZGUgZnVsbCBpbmZvcm1hdGlvbi4KLSAqICAgIFRoZSBjb2RlIG1ha2VzIG5vIHVzZSBvZiBkYXRhIGFib3ZlIDE5MiBieXRlcy4gT25lIGxhc3Qgd29yZDogdGhlcmUncyBvbmUKLSAqICAgIHBhdGggd2UgY2FuIGFsd2F5cyBjb3VudCBvbjogdGhlIHByaW1hcnkgcGF0aC4KKyAqICAgIE9uZSBsYXN0IHdvcmQ6IHRoZXJlJ3Mgb25lIHBhdGggd2UgY2FuIGFsd2F5cyBjb3VudCBvbjogdGhlIHByaW1hcnkgcGF0aC4KKyAqICAgIEFueXRoaW5nIGFib3ZlIDIyNCBieXRlcyBpcyB1c2VkIGZvciAnb3NkZXAyJyBPUy1kZXBlbmRlbnQgc3RvcmFnZSBhcmVhLgorICoKKyAqICAgIFRoZSBmaXJzdCBPUy1kZXBlbmRlbnQgYXJlYSBzaG91bGQgYWx3YXlzIGJlIGF2YWlsYWJsZS4gT2J2aW91c2x5LCB0aGlzIGlzCisgKiAgICBub3QgdHJ1ZSBmb3IgdGhlIG90aGVyIG9uZS4gQWxzbyBiZWFyIGluIG1pbmQgdGhhdCByZWFkaW5nL3dyaXRpbmcgZnJvbS90bworICogICAgb3NkZXAyIGlzIG11Y2ggbW9yZSBleHBlbnNpdmUgdGhhbiBmcm9tL3RvIG9zZGVwMS4KKyAqICAgIE5PVEU6IFdlIGRvIG5vdCBoYW5kbGUgdGhlIDIgYnl0ZXMgT1MtZGVwIGFyZWEgYXQgMHg1RCwgbm9yIHRoZSBmaXJzdAorICogICAgMiBieXRlcyBvZiBzdG9yYWdlIGF2YWlsYWJsZSByaWdodCBhZnRlciBPU0lELiBUaGF0J3MgYSB0b3RhbCBvZiA0IGJ5dGVzCisgKiAgICBzYWNyaWZpY2VkOiAtRVRPT0xBWlkgOlAKICAqCiAgKiAgICBUaGUgY3VycmVudCBwb2xpY3kgd3J0IGZpbGUgcGVybWlzc2lvbnMgaXM6CiAgKgktIHdyaXRlOiByb290IG9ubHkKQEAgLTY0LDE1ICs3MSwxOCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgUERDU19WRVJTSU9OCSIwLjIyIgorI2RlZmluZSBQRENTX1ZFUlNJT04JIjAuMzAiCiAjZGVmaW5lIFBEQ1NfUFJFRklYCSJQREMgU3RhYmxlIFN0b3JhZ2UiCiAKICNkZWZpbmUgUERDU19BRERSX1BQUkkJMHgwMAogI2RlZmluZSBQRENTX0FERFJfT1NJRAkweDQwCisjZGVmaW5lIFBEQ1NfQUREUl9PU0QxCTB4NDgKKyNkZWZpbmUgUERDU19BRERSX0RJQUcJMHg1OAogI2RlZmluZSBQRENTX0FERFJfRlNJWgkweDVDCiAjZGVmaW5lIFBEQ1NfQUREUl9QQ09OCTB4NjAKICNkZWZpbmUgUERDU19BRERSX1BBTFQJMHg4MAogI2RlZmluZSBQRENTX0FERFJfUEtCRAkweEEwCisjZGVmaW5lIFBEQ1NfQUREUl9PU0QyCTB4RTAKIAogTU9EVUxFX0FVVEhPUigiVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigic3lzZnMgaW50ZXJmYWNlIHRvIEhQIFBEQyBTdGFibGUgU3RvcmFnZSBkYXRhIik7CkBAIC04Miw2ICs5Miw5IEBACiAvKiBob2xkcyBTdGFibGUgU3RvcmFnZSBzaXplLiBJbml0aWFsaXplZCBvbmNlIGFuZCBmb3IgYWxsLCBubyBsb2NrIG5lZWRlZCAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGRjc19zaXplIF9fcmVhZF9tb3N0bHk7CiAKKy8qIGhvbGRzIE9TIElELiBJbml0aWFsaXplZCBvbmNlIGFuZCBmb3IgYWxsLCBob3BlZnVsbHkgdG8gMHgwMDA2ICovCitzdGF0aWMgdTE2IHBkY3Nfb3NpZCBfX3JlYWRfbW9zdGx5OworCiAvKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHdoYXQgd2UgbmVlZCB0byBkZWFsIHdpdGggYSBwYXJpc2MgcGRjIHBhdGggZW50cnkgKi8KIHN0cnVjdCBwZGNzcGF0aF9lbnRyeSB7CiAJcndsb2NrX3QgcndfbG9jazsJCS8qIHRvIHByb3RlY3QgcGF0aCBlbnRyeSBhY2Nlc3MgKi8KQEAgLTYwOSwyNyArNjIyLDY0IEBACiBwZGNzX29zaWRfcmVhZChzdHJ1Y3Qgc3Vic3lzdGVtICplbnRyeSwgY2hhciAqYnVmKQogewogCWNoYXIgKm91dCA9IGJ1ZjsKLQlfX3UzMiByZXN1bHQ7Ci0JY2hhciAqdG1wc3RyID0gTlVMTDsKIAogCWlmICghZW50cnkgfHwgIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBnZXQgT1NJRCAqLwotCWlmIChwZGNfc3RhYmxlX3JlYWQoUERDU19BRERSX09TSUQsICZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSAhPSBQRENfT0spCisJb3V0ICs9IHNwcmludGYob3V0LCAiJXMgZGVwZW5kZW50IGRhdGEgKDB4JS40eClcbiIsCisJCW9zX2lkX3RvX3N0cmluZyhwZGNzX29zaWQpLCBwZGNzX29zaWQpOworCisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworLyoqCisgKiBwZGNzX29zZGVwMV9yZWFkIC0gU3RhYmxlIFN0b3JhZ2UgT1MtRGVwZW5kZW50IGRhdGEgYXJlYSAxIG91dHB1dC4KKyAqIEBlbnRyeTogQW4gYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQgc3Vic3l0ZW0gc3RydWN0LiBXZSBkb24ndCB1c2UgaXQgdGhvLgorICogQGJ1ZjogVGhlIG91dHB1dCBidWZmZXIgdG8gd3JpdGUgdG8uCisgKgorICogVGhpcyBjYW4gaG9sZCAxNiBieXRlcyBvZiBPUy1EZXBlbmRlbnQgZGF0YS4KKyAqLworc3RhdGljIHNzaXplX3QKK3BkY3Nfb3NkZXAxX3JlYWQoc3RydWN0IHN1YnN5c3RlbSAqZW50cnksIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpvdXQgPSBidWY7CisJdTMyIHJlc3VsdFs0XTsKKworCWlmICghZW50cnkgfHwgIWJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGRjX3N0YWJsZV9yZWFkKFBEQ1NfQUREUl9PU0QxLCAmcmVzdWx0LCBzaXplb2YocmVzdWx0KSkgIT0gUERDX09LKQogCQlyZXR1cm4gLUVJTzsKIAotCS8qIHRoZSBhY3R1YWwgcmVzdWx0IGlzIDE2IGJpdHMgYXdheSAqLwotCXN3aXRjaCAocmVzdWx0ID4+IDE2KSB7Ci0JCWNhc2UgMHgwMDAwOgl0bXBzdHIgPSAiTm8gT1MtZGVwZW5kZW50IGRhdGEiOyBicmVhazsKLQkJY2FzZSAweDAwMDE6CXRtcHN0ciA9ICJIUC1VWCBkZXBlbmRlbnQgZGF0YSI7IGJyZWFrOwotCQljYXNlIDB4MDAwMjoJdG1wc3RyID0gIk1QRS1pWCBkZXBlbmRlbnQgZGF0YSI7IGJyZWFrOwotCQljYXNlIDB4MDAwMzoJdG1wc3RyID0gIk9TRiBkZXBlbmRlbnQgZGF0YSI7IGJyZWFrOwotCQljYXNlIDB4MDAwNDoJdG1wc3RyID0gIkhQLVJUIGRlcGVuZGVudCBkYXRhIjsgYnJlYWs7Ci0JCWNhc2UgMHgwMDA1Ogl0bXBzdHIgPSAiTm92ZWxsIE5ldHdhcmUgZGVwZW5kZW50IGRhdGEiOyBicmVhazsKLQkJZGVmYXVsdDoJdG1wc3RyID0gIlVua25vd24iOyBicmVhazsKLQl9Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiJXMgKDB4JS40eClcbiIsIHRtcHN0ciwgKHJlc3VsdCA+PiAxNikpOworCW91dCArPSBzcHJpbnRmKG91dCwgIjB4JS44eFxuIiwgcmVzdWx0WzBdKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIweCUuOHhcbiIsIHJlc3VsdFsxXSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiMHglLjh4XG4iLCByZXN1bHRbMl0pOworCW91dCArPSBzcHJpbnRmKG91dCwgIjB4JS44eFxuIiwgcmVzdWx0WzNdKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKKy8qKgorICogcGRjc19kaWFnbm9zdGljX3JlYWQgLSBTdGFibGUgU3RvcmFnZSBEaWFnbm9zdGljIHJlZ2lzdGVyIG91dHB1dC4KKyAqIEBlbnRyeTogQW4gYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQgc3Vic3l0ZW0gc3RydWN0LiBXZSBkb24ndCB1c2UgaXQgdGhvLgorICogQGJ1ZjogVGhlIG91dHB1dCBidWZmZXIgdG8gd3JpdGUgdG8uCisgKgorICogSSBoYXZlIE5GQyBob3cgdG8gaW50ZXJwcmV0IHRoZSBjb250ZW50IG9mIHRoYXQgcmVnaXN0ZXIgOy0pLgorICovCitzdGF0aWMgc3NpemVfdAorcGRjc19kaWFnbm9zdGljX3JlYWQoc3RydWN0IHN1YnN5c3RlbSAqZW50cnksIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpvdXQgPSBidWY7CisJdTMyIHJlc3VsdDsKKworCWlmICghZW50cnkgfHwgIWJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBnZXQgZGlhZ25vc3RpYyAqLworCWlmIChwZGNfc3RhYmxlX3JlYWQoUERDU19BRERSX0RJQUcsICZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSAhPSBQRENfT0spCisJCXJldHVybiAtRUlPOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiMHglLjR4XG4iLCAocmVzdWx0ID4+IDE2KSk7CiAKIAlyZXR1cm4gb3V0IC0gYnVmOwogfQpAQCAtNjQ1LDcgKzY5NSw3IEBACiBwZGNzX2Zhc3RzaXplX3JlYWQoc3RydWN0IHN1YnN5c3RlbSAqZW50cnksIGNoYXIgKmJ1ZikKIHsKIAljaGFyICpvdXQgPSBidWY7Ci0JX191MzIgcmVzdWx0OworCXUzMiByZXN1bHQ7CiAKIAlpZiAoIWVudHJ5IHx8ICFidWYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjY0LDYgKzcxNCwzOSBAQAogfQogCiAvKioKKyAqIHBkY3Nfb3NkZXAyX3JlYWQgLSBTdGFibGUgU3RvcmFnZSBPUy1EZXBlbmRlbnQgZGF0YSBhcmVhIDIgb3V0cHV0LgorICogQGVudHJ5OiBBbiBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCBzdWJzeXRlbSBzdHJ1Y3QuIFdlIGRvbid0IHVzZSBpdCB0aG8uCisgKiBAYnVmOiBUaGUgb3V0cHV0IGJ1ZmZlciB0byB3cml0ZSB0by4KKyAqCisgKiBUaGlzIGNhbiBob2xkIHBkY3Nfc2l6ZSAtIDIyNCBieXRlcyBvZiBPUy1EZXBlbmRlbnQgZGF0YSwgd2hlbiBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90CitwZGNzX29zZGVwMl9yZWFkKHN0cnVjdCBzdWJzeXN0ZW0gKmVudHJ5LCBjaGFyICpidWYpCit7CisJY2hhciAqb3V0ID0gYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydCBpOworCXUzMiByZXN1bHQ7CisKKwlpZiAodW5saWtlbHkocGRjc19zaXplIDw9IDIyNCkpCisJCXJldHVybiAtRU5PREFUQTsKKworCXNpemUgPSBwZGNzX3NpemUgLSAyMjQ7CisKKwlpZiAoIWVudHJ5IHx8ICFidWYpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpPTA7IGk8c2l6ZTsgaSs9NCkgeworCQlpZiAodW5saWtlbHkocGRjX3N0YWJsZV9yZWFkKFBEQ1NfQUREUl9PU0QyICsgaSwgJnJlc3VsdCwKKwkJCQkJc2l6ZW9mKHJlc3VsdCkpICE9IFBEQ19PSykpCisJCQlyZXR1cm4gLUVJTzsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiMHglLjh4XG4iLCByZXN1bHQpOworCX0KKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKKy8qKgogICogcGRjc19hdXRvX3dyaXRlIC0gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGF1dG9ib290L3NlYXJjaCBmbGFnIG1vZGlmeWluZy4KICAqIEBlbnRyeTogQW4gYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQgc3Vic3l0ZW0gc3RydWN0LiBXZSBkb24ndCB1c2UgaXQgdGhvLgogICogQGJ1ZjogVGhlIGlucHV0IGJ1ZmZlciB0byByZWFkIGZyb20uCkBAIC03NzAsMTMgKzg1MywxMDAgQEAKIAlyZXR1cm4gcGRjc19hdXRvX3dyaXRlKGVudHJ5LCBidWYsIGNvdW50LCBQRl9BVVRPU0VBUkNIKTsKIH0KIAorLyoqCisgKiBwZGNzX29zZGVwMV93cml0ZSAtIFN0YWJsZSBTdG9yYWdlIE9TLURlcGVuZGVudCBkYXRhIGFyZWEgMSBpbnB1dC4KKyAqIEBlbnRyeTogQW4gYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQgc3Vic3l0ZW0gc3RydWN0LiBXZSBkb24ndCB1c2UgaXQgdGhvLgorICogQGJ1ZjogVGhlIGlucHV0IGJ1ZmZlciB0byByZWFkIGZyb20uCisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZC4KKyAqCisgKiBUaGlzIGNhbiBzdG9yZSAxNiBieXRlcyBvZiBPUy1EZXBlbmRlbnQgZGF0YS4gV2UgdXNlIGEgYnl0ZS1ieS1ieXRlCisgKiB3cml0ZSBhcHByb2FjaC4gSXQncyB1cCB0byB1c2Vyc3BhY2UgdG8gZGVhbCB3aXRoIGl0IHdoZW4gY29uc3RydWN0aW5nCisgKiBpdHMgaW5wdXQgYnVmZmVyLgorICovCitzdGF0aWMgc3NpemVfdAorcGRjc19vc2RlcDFfd3JpdGUoc3RydWN0IHN1YnN5c3RlbSAqZW50cnksIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXU4IGluWzE2XTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlpZiAoIWVudHJ5IHx8ICFidWYgfHwgIWNvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShwZGNzX29zaWQgIT0gT1NfSURfTElOVVgpKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGNvdW50ID4gMTYpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwkvKiBXZSdsbCB1c2UgYSBsb2NhbCBjb3B5IG9mIGJ1ZiAqLworCW1lbXNldChpbiwgMCwgMTYpOworCW1lbWNweShpbiwgYnVmLCBjb3VudCk7CisKKwlpZiAocGRjX3N0YWJsZV93cml0ZShQRENTX0FERFJfT1NEMSwgJmluLCBzaXplb2YoaW4pKSAhPSBQRENfT0spCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqIHBkY3Nfb3NkZXAyX3dyaXRlIC0gU3RhYmxlIFN0b3JhZ2UgT1MtRGVwZW5kZW50IGRhdGEgYXJlYSAyIGlucHV0LgorICogQGVudHJ5OiBBbiBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCBzdWJzeXRlbSBzdHJ1Y3QuIFdlIGRvbid0IHVzZSBpdCB0aG8uCisgKiBAYnVmOiBUaGUgaW5wdXQgYnVmZmVyIHRvIHJlYWQgZnJvbS4KKyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBieXRlcyB0byBiZSByZWFkLgorICoKKyAqIFRoaXMgY2FuIHN0b3JlIHBkY3Nfc2l6ZSAtIDIyNCBieXRlcyBvZiBPUy1EZXBlbmRlbnQgZGF0YS4gV2UgdXNlIGEKKyAqIGJ5dGUtYnktYnl0ZSB3cml0ZSBhcHByb2FjaC4gSXQncyB1cCB0byB1c2Vyc3BhY2UgdG8gZGVhbCB3aXRoIGl0IHdoZW4KKyAqIGNvbnN0cnVjdGluZyBpdHMgaW5wdXQgYnVmZmVyLgorICovCitzdGF0aWMgc3NpemVfdAorcGRjc19vc2RlcDJfd3JpdGUoc3RydWN0IHN1YnN5c3RlbSAqZW50cnksIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBzaG9ydCBpOworCXU4IGluWzRdOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWlmICghZW50cnkgfHwgIWJ1ZiB8fCAhY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KHBkY3Nfc2l6ZSA8PSAyMjQpKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmICh1bmxpa2VseShwZGNzX29zaWQgIT0gT1NfSURfTElOVVgpKQorCQlyZXR1cm4gLUVQRVJNOworCisJc2l6ZSA9IHBkY3Nfc2l6ZSAtIDIyNDsKKworCWlmIChjb3VudCA+IHNpemUpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwkvKiBXZSdsbCB1c2UgYSBsb2NhbCBjb3B5IG9mIGJ1ZiAqLworCisJZm9yIChpPTA7IGk8Y291bnQ7IGkrPTQpIHsKKwkJbWVtc2V0KGluLCAwLCA0KTsKKwkJbWVtY3B5KGluLCBidWYraSwgKGNvdW50LWkgPCA0KSA/IGNvdW50LWkgOiA0KTsKKwkJaWYgKHVubGlrZWx5KHBkY19zdGFibGVfd3JpdGUoUERDU19BRERSX09TRDIgKyBpLCAmaW4sCisJCQkJCXNpemVvZihpbikpICE9IFBEQ19PSykpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIC8qIFRoZSByZW1haW5pbmcgYXR0cmlidXRlcy4gKi8KIHN0YXRpYyBQRENTX0FUVFIoc2l6ZSwgMDQ0NCwgcGRjc19zaXplX3JlYWQsIE5VTEwpOwogc3RhdGljIFBEQ1NfQVRUUihhdXRvYm9vdCwgMDY0NCwgcGRjc19hdXRvYm9vdF9yZWFkLCBwZGNzX2F1dG9ib290X3dyaXRlKTsKIHN0YXRpYyBQRENTX0FUVFIoYXV0b3NlYXJjaCwgMDY0NCwgcGRjc19hdXRvc2VhcmNoX3JlYWQsIHBkY3NfYXV0b3NlYXJjaF93cml0ZSk7CiBzdGF0aWMgUERDU19BVFRSKHRpbWVyLCAwNDQ0LCBwZGNzX3RpbWVyX3JlYWQsIE5VTEwpOwotc3RhdGljIFBEQ1NfQVRUUihvc2lkLCAwNDAwLCBwZGNzX29zaWRfcmVhZCwgTlVMTCk7CitzdGF0aWMgUERDU19BVFRSKG9zaWQsIDA0NDQsIHBkY3Nfb3NpZF9yZWFkLCBOVUxMKTsKK3N0YXRpYyBQRENTX0FUVFIob3NkZXAxLCAwNjAwLCBwZGNzX29zZGVwMV9yZWFkLCBwZGNzX29zZGVwMV93cml0ZSk7CitzdGF0aWMgUERDU19BVFRSKGRpYWdub3N0aWMsIDA0MDAsIHBkY3NfZGlhZ25vc3RpY19yZWFkLCBOVUxMKTsKIHN0YXRpYyBQRENTX0FUVFIoZmFzdHNpemUsIDA0MDAsIHBkY3NfZmFzdHNpemVfcmVhZCwgTlVMTCk7CitzdGF0aWMgUERDU19BVFRSKG9zZGVwMiwgMDYwMCwgcGRjc19vc2RlcDJfcmVhZCwgcGRjc19vc2RlcDJfd3JpdGUpOwogCiBzdGF0aWMgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgKnBkY3Nfc3Vic3lzX2F0dHJzW10gPSB7CiAJJnBkY3NfYXR0cl9zaXplLApAQCAtNzg0LDcgKzk1NCwxMCBAQAogCSZwZGNzX2F0dHJfYXV0b3NlYXJjaCwKIAkmcGRjc19hdHRyX3RpbWVyLAogCSZwZGNzX2F0dHJfb3NpZCwKKwkmcGRjc19hdHRyX29zZGVwMSwKKwkmcGRjc19hdHRyX2RpYWdub3N0aWMsCiAJJnBkY3NfYXR0cl9mYXN0c2l6ZSwKKwkmcGRjc19hdHRyX29zZGVwMiwKIAlOVUxMLAogfTsKIApAQCAtODY1LDYgKzEwMzgsNyBAQAogewogCXN0cnVjdCBzdWJzeXNfYXR0cmlidXRlICphdHRyOwogCWludCBpLCByYyA9IDAsIGVycm9yID0gMDsKKwl1MzIgcmVzdWx0OwogCiAJLyogZmluZCB0aGUgc2l6ZSBvZiB0aGUgc3RhYmxlIHN0b3JhZ2UgKi8KIAlpZiAocGRjX3N0YWJsZV9nZXRfc2l6ZSgmcGRjc19zaXplKSAhPSBQRENfT0spIApAQCAtODc2LDYgKzEwNTAsMTMgQEAKIAogCXByaW50ayhLRVJOX0lORk8gUERDU19QUkVGSVggIiBmYWNpbGl0eSB2JXNcbiIsIFBEQ1NfVkVSU0lPTik7CiAKKwkvKiBnZXQgT1NJRCAqLworCWlmIChwZGNfc3RhYmxlX3JlYWQoUERDU19BRERSX09TSUQsICZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSAhPSBQRENfT0spCisJCXJldHVybiAtRUlPOworCisJLyogdGhlIGFjdHVhbCByZXN1bHQgaXMgMTYgYml0cyBhd2F5ICovCisJcGRjc19vc2lkID0gKHUxNikocmVzdWx0ID4+IDE2KTsKKwogCS8qIEZvciBub3cgd2UnbGwgcmVnaXN0ZXIgdGhlIHN0YWJsZSBzdWJzeXMgd2l0aGluIHRoaXMgZHJpdmVyICovCiAJaWYgKChyYyA9IGZpcm13YXJlX3JlZ2lzdGVyKCZzdGFibGVfc3Vic3lzKSkpCiAJCWdvdG8gZmFpbF9maXJtcmVnOwpAQCAtODg3LDcgKzEwNjgsNyBAQAogCQogCS8qIHJlZ2lzdGVyIHRoZSBwYXRocyBzdWJzeXMgYXMgYSBzdWJzeXN0ZW0gb2Ygc3RhYmxlIHN1YnN5cyAqLwogCWtzZXRfc2V0X2tzZXRfcygmcGF0aHNfc3Vic3lzLCBzdGFibGVfc3Vic3lzKTsKLQlpZiAoKHJjPSBzdWJzeXN0ZW1fcmVnaXN0ZXIoJnBhdGhzX3N1YnN5cykpKQorCWlmICgocmMgPSBzdWJzeXN0ZW1fcmVnaXN0ZXIoJnBhdGhzX3N1YnN5cykpKQogCQlnb3RvIGZhaWxfc3Vic3lzcmVnOwogCiAJLyogbm93IHdlIGNyZWF0ZSBhbGwgImZpbGVzIiBmb3IgdGhlIHBhdGhzIHN1YnN5cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvcG93ZXIuYyBiL2RyaXZlcnMvcGFyaXNjL3Bvd2VyLmMKaW5kZXggMGJjYWI4My4uZmFkNWEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvcG93ZXIuYworKysgYi9kcml2ZXJzL3BhcmlzYy9wb3dlci5jCkBAIC0zNSw3ICszNSw2IEBACiAgKiAgcnVudGltZSB0aHJvdWdoIHRoZSAiL3Byb2Mvc3lzL2tlcm5lbC9wb3dlciIgcHJvY2ZzIGVudHJ5LgogICovIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwppbmRleCAyNzhmMzI1Li44YjQ3MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9zYmFfaW9tbXUuYwpAQCAtMTksNyArMTksNiBAQAogKiogRklYTUU6IGFkZCBETUEgaGludCBzdXBwb3J0IHByb2dyYW1taW5nIGluIGJvdGggc2JhIGFuZCBsYmEgbW9kdWxlcy4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0zMTYsMTAgKzMxNSwxMCBAQAogKioKICoqIFN1cGVyZG9tZSAoaW4gcGFydGljdWxhciwgUkVPKSBhbGxvd3Mgb25seSA2NC1iaXQgQ1NSIGFjY2Vzc2VzLgogKi8KLSNkZWZpbmUgUkVBRF9SRUczMihhZGRyKQkgbGUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpCi0jZGVmaW5lIFJFQURfUkVHNjQoYWRkcikJIGxlNjRfdG9fY3B1KF9fcmF3X3JlYWRxKGFkZHIpKQotI2RlZmluZSBXUklURV9SRUczMih2YWwsIGFkZHIpIF9fcmF3X3dyaXRlbChjcHVfdG9fbGUzMih2YWwpLCBhZGRyKQotI2RlZmluZSBXUklURV9SRUc2NCh2YWwsIGFkZHIpIF9fcmF3X3dyaXRlcShjcHVfdG9fbGU2NCh2YWwpLCBhZGRyKQorI2RlZmluZSBSRUFEX1JFRzMyKGFkZHIpCXJlYWRsKGFkZHIpCisjZGVmaW5lIFJFQURfUkVHNjQoYWRkcikJcmVhZHEoYWRkcikKKyNkZWZpbmUgV1JJVEVfUkVHMzIodmFsLCBhZGRyKQl3cml0ZWwoKHZhbCksIChhZGRyKSkKKyNkZWZpbmUgV1JJVEVfUkVHNjQodmFsLCBhZGRyKQl3cml0ZXEoKHZhbCksIChhZGRyKSkKIAogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBSRUFEX1JFRyhhZGRyKQkJUkVBRF9SRUc2NChhZGRyKQpAQCAtMTQyNyw3ICsxNDI2LDcgQEAKIAlpb3Zfb3JkZXIgPSBnZXRfb3JkZXIoaW92YV9zcGFjZV9zaXplID4+IChJT1ZQX1NISUZUIC0gUEFHRV9TSElGVCkpOwogCWlvYy0+cGRpcl9zaXplID0gKGlvdmFfc3BhY2Vfc2l6ZSAvIElPVlBfU0laRSkgKiBzaXplb2YodTY0KTsKIAotCURCR19JTklUKCIlcygpIGhwYSAweCVseCBJT1YgJWRNQiAoJWQgYml0cylcbiIsCisJREJHX0lOSVQoIiVzKCkgaHBhIDB4JXAgSU9WICVkTUIgKCVkIGJpdHMpXG4iLAogCQlfX0ZVTkNUSU9OX18sIGlvYy0+aW9jX2hwYSwgaW92YV9zcGFjZV9zaXplID4+IDIwLAogCQlpb3Zfb3JkZXIgKyBQQUdFX1NISUZUKTsKIApAQCAtMTc2NCw3ICsxNzYzLDcgQEAKIAogCXNiYV9kZXYtPm51bV9pb2MgPSBudW1faW9jOwogCWZvciAoaSA9IDA7IGkgPCBudW1faW9jOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBpb2NfaHBhID0gc2JhX2Rldi0+aW9jW2ldLmlvY19ocGE7CisJCXZvaWQgX19pb21lbSAqaW9jX2hwYSA9IHNiYV9kZXYtPmlvY1tpXS5pb2NfaHBhOwogCQl1bnNpZ25lZCBpbnQgajsKIAogCQlmb3IgKGo9MDsgaiA8IHNpemVvZih1NjQpICogUk9QRVNfUEVSX0lPQzsgais9c2l6ZW9mKHU2NCkpIHsKQEAgLTE3NzYsNyArMTc3NSw4IEBACiAJCQkgKiBJbXByb3ZlcyBuZXRwZXJmIFVEUF9TVFJFQU0gYnkgfjEwJSBmb3IgYmNtNTcwMS4KIAkJCSAqLwogCQkJaWYgKElTX1BMVVRPKHNiYV9kZXYtPmlvZGMpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyByb3BlX2NmZywgY2ZnX3ZhbDsKKwkJCQl2b2lkIF9faW9tZW0gKnJvcGVfY2ZnOworCQkJCXVuc2lnbmVkIGxvbmcgY2ZnX3ZhbDsKIAogCQkJCXJvcGVfY2ZnID0gaW9jX2hwYSArIElPQ19ST1BFMF9DRkcgKyBqOwogCQkJCWNmZ192YWwgPSBSRUFEX1JFRyhyb3BlX2NmZyk7CkBAIC0xOTAyLDcgKzE5MDIsNyBAQAogCSAqIChiaXQgIzYxLCBiaWcgZW5kaWFuKSwgd2UgaGF2ZSB0byBmbHVzaCBhbmQgc3luYyBldmVyeSB0aW1lCiAJICogSU8tUERJUiBpcyBjaGFuZ2VkIGluIElrZS9Bc3Ryby4KIAkgKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS5wZGMuY2FwYWJpbGl0aWVzICYgUERDX01PREVMX0lPUERJUl9GREMpIHsKKwlpZiAoaW9jX25lZWRzX2ZkYykgewogCQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICIgRkRDL1NZTkMgcmVxdWlyZWQuXG4iKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICIgSU9DIGhhcyBjYWNoZSBjb2hlcmVudCBQRElSLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggODI4ZWI0NS4uNGVlMjZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAJZWxzZQogCQlwcmludGsoS0VSTl9FUlIgUEZYICJVU0IgcmVndWxhdG9yIG5vdCBpbml0aWFsaXplZCFcbiIpOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc3VwZXJpb19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBzdXBlcmlvX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCVNVUEVSSU8sICh2b2lkICopc2lvKSkgewogCiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNvdWxkIG5vdCBnZXQgaXJxXG4iKTsKQEAgLTM2MCw3ICszNjAsNyBAQAogI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJnN1cGVyaW9faW50ZXJydXB0X3R5cGU7CisJCWlycV9kZXNjW2ldLmNoaXAgPSAmc3VwZXJpb19pbnRlcnJ1cHRfdHlwZTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMgYi9kcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYwppbmRleCA2OTBiMjM5Li43ZmYwOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYwpAQCAtMTYsNyArMTYsNiBAQAogICogVmFyaW91cyBoYWNrcywgRnJlZCBCYXJuZXMgPGZybWIyQHVrYy5hYy51az4sIDA0LzIwMDAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NF9vcHMuYyBiL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NF9vcHMuYwppbmRleCBkNmM3NzY1Li41MjUzMTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvaWVlZTEyODRfb3BzLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0X29wcy5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9heDg4Nzk2LmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9heDg4Nzk2LmMKaW5kZXggNGJhYTcxOS4uMTg1MDYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfYXg4ODc5Ni5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2F4ODg3OTYuYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJaWYgKGlycSA+PSAwKSB7CiAJCS8qIHJlcXVlc3QgaXJxICovCiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgcGFycG9ydF9heDg4Nzk2X2ludGVycnVwdCwKLQkJCQkgIFNBX1RSSUdHRVJfRkFMTElORywgcGRldi0+bmFtZSwgcHApOworCQkJCSAgSVJRRl9UUklHR0VSX0ZBTExJTkcsIHBkZXYtPm5hbWUsIHBwKTsKIAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXhpdF9wb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfbWZjMy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfbWZjMy5jCmluZGV4IGM4NTM2NDcuLmIyYjgwOTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9tZmMzLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfbWZjMy5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAogCQlpZiAocC0+aXJxICE9IFBBUlBPUlRfSVJRX05PTkUpIHsKIAkJCWlmICh1c2VfY250KysgPT0gMCkKLQkJCQlpZiAocmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBtZmMzX2ludGVycnVwdCwgU0FfU0hJUlEsIHAtPm5hbWUsICZwcF9tZmMzX29wcykpCisJCQkJaWYgKHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgbWZjM19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBwLT5uYW1lLCAmcHBfbWZjM19vcHMpKQogCQkJCQlnb3RvIG91dF9pcnE7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggNzMxOGU0YS4uZmU4MDBkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC00Miw3ICs0Miw2IEBACiAgKiBidXQgcmF0aGVyIHdpbGwgc3RhcnQgYXQgcG9ydC0+YmFzZV9oaS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zdW5icHAuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3N1bmJwcC5jCmluZGV4IDdjNDNjNTMuLmZhYzMzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3N1bmJwcC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3N1bmJwcC5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlwLT5zaXplID0gc2l6ZTsKIAogCWlmICgoZXJyID0gcmVxdWVzdF9pcnEocC0+aXJxLCBwYXJwb3J0X3N1bmJwcF9pbnRlcnJ1cHQsCi0JCQkgICAgICAgU0FfU0hJUlEsIHAtPm5hbWUsIHApKSAhPSAwKSB7CisJCQkgICAgICAgSVJRRl9TSEFSRUQsIHAtPm5hbWUsIHApKSAhPSAwKSB7CiAJCWdvdG8gb3V0X3B1dF9wb3J0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jIGIvZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jCmluZGV4IDg2MTBhZTguLjJlNzQ0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wcm9jZnMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCmluZGV4IDJjYjIyYzguLjk0ZGM1MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAKICN1bmRlZiBQQVJQT1JUX0RFQlVHX1NIQVJJTkcJCS8qIHVuZGVmIGZvciBwcm9kdWN0aW9uICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9idXMuYyBiL2RyaXZlcnMvcGNpL2J1cy5jCmluZGV4IDcyMzA5MjYuLjVmN2RiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL2J1cy5jCkBAIC0zNCwxMSArMzQsMTEgQEAKICAqLwogaW50CiBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBtaW4sCi0JdW5zaWduZWQgaW50IHR5cGVfbWFzaywKLQl2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyksCi0Jdm9pZCAqYWxpZ25mX2RhdGEpCisJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCisJCXJlc291cmNlX3NpemVfdCBtaW4sIHVuc2lnbmVkIGludCB0eXBlX21hc2ssCisJCXZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosIHJlc291cmNlX3NpemVfdCwKKwkJCQlyZXNvdXJjZV9zaXplX3QpLAorCQl2b2lkICphbGlnbmZfZGF0YSkKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvTWFrZWZpbGUKaW5kZXggNDIxY2ZmZi4uMzRhMTg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL01ha2VmaWxlCkBAIC00MCw4ICs0MCw3IEBACiAJCQkJaWJtcGhwX2hwYy5vCiAKIGFjcGlwaHAtb2JqcwkJOj0JYWNwaXBocF9jb3JlLm8JXAotCQkJCWFjcGlwaHBfZ2x1ZS5vICBcCi0JCQkJYWNwaXBocF9kb2NrLm8KKwkJCQlhY3BpcGhwX2dsdWUubwogCiBycGFwaHAtb2JqcwkJOj0JcnBhcGhwX2NvcmUubwlcCiAJCQkJcnBhcGhwX3BjaS5vCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKaW5kZXggMTdhOTNmOC4uYmUxMDRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5iOwogCWFjcGlfaGFuZGxlCWhhbmRsZTsKIAogCXU4CQlmdW5jdGlvbjsJLyogcGNpIGZ1bmN0aW9uIyAqLwpAQCAtMTUxLDI0ICsxNTEsNiBAQAogfTsKIAogCi1zdHJ1Y3QgZGVwZW5kZW50X2RldmljZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHBjaV9saXN0OwotCWFjcGlfaGFuZGxlIGhhbmRsZTsKLQlzdHJ1Y3QgYWNwaXBocF9mdW5jICpmdW5jOwotfTsKLQotCi1zdHJ1Y3QgYWNwaXBocF9kb2NrX3N0YXRpb24gewotCWFjcGlfaGFuZGxlIGhhbmRsZTsKLQl1MzIgbGFzdF9kb2NrX3RpbWU7Ci0JdTMyIGZsYWdzOwotCXN0cnVjdCBhY3BpcGhwX2Z1bmMgKmRvY2tfYnJpZGdlOwotCXN0cnVjdCBsaXN0X2hlYWQgZGVwZW5kZW50X2RldmljZXM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBwY2lfZGVwZW5kZW50X2RldmljZXM7Ci19OwotCi0KIC8qIFBDSSBidXMgYnJpZGdlIEhJRCAqLwogI2RlZmluZSBBQ1BJX1BDSV9IT1NUX0hJRAkJIlBOUDBBMDMiCiAKQEAgLTIwNywxMSArMTg5LDYgQEAKICNkZWZpbmUgRlVOQ19IQVNfUFMyCQkoMHgwMDAwMDA0MCkKICNkZWZpbmUgRlVOQ19IQVNfUFMzCQkoMHgwMDAwMDA4MCkKICNkZWZpbmUgRlVOQ19IQVNfRENLICAgICAgICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIEZVTkNfSVNfREQgICAgICAgICAgICAgICgweDAwMDAwMjAwKQotCi0vKiBkb2NrIHN0YXRpb24gZmxhZ3MgKi8KLSNkZWZpbmUgRE9DS19ET0NLSU5HICAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIERPQ0tfSEFTX0JSSURHRSAgICAgICAgICgweDAwMDAwMDAyKQogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCiAKQEAgLTIyNiw3ICsyMDMsNiBAQAogZXh0ZXJuIHZvaWQgYWNwaXBocF9nbHVlX2V4aXQgKHZvaWQpOwogZXh0ZXJuIGludCBhY3BpcGhwX2dldF9udW1fc2xvdHMgKHZvaWQpOwogdHlwZWRlZiBpbnQgKCphY3BpcGhwX2NhbGxiYWNrKShzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90LCB2b2lkICpkYXRhKTsKLXZvaWQgaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyhhY3BpX2hhbmRsZSwgdTMyLCB2b2lkKik7CiAKIGV4dGVybiBpbnQgYWNwaXBocF9lbmFibGVfc2xvdCAoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50IGFjcGlwaHBfZGlzYWJsZV9zbG90IChzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90KTsKQEAgLTIzNiwxNiArMjEyLDYgQEAKIGV4dGVybiB1OCBhY3BpcGhwX2dldF9hZGFwdGVyX3N0YXR1cyAoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCk7CiBleHRlcm4gdTMyIGFjcGlwaHBfZ2V0X2FkZHJlc3MgKHN0cnVjdCBhY3BpcGhwX3Nsb3QgKnNsb3QpOwogCi0vKiBhY3BpcGhwX2RvY2suYyAqLwotZXh0ZXJuIGludCBmaW5kX2RvY2tfc3RhdGlvbih2b2lkKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9kb2NrX3N0YXRpb24odm9pZCk7Ci1leHRlcm4gdm9pZCBhZGRfZGVwZW5kZW50X2RldmljZShzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqbmV3X2RkKTsKLWV4dGVybiB2b2lkIGFkZF9wY2lfZGVwZW5kZW50X2RldmljZShzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqbmV3X2RkKTsKLWV4dGVybiBzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqZ2V0X2RlcGVuZGVudF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKTsKLWV4dGVybiBpbnQgaXNfZGVwZW5kZW50X2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpOwotZXh0ZXJuIGludCBkZXRlY3RfZGVwZW5kZW50X2RldmljZXMoYWNwaV9oYW5kbGUgKmJyaWRnZV9oYW5kbGUpOwotZXh0ZXJuIHN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICphbGxvY19kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSk7Ci0KIC8qIHZhcmlhYmxlcyAqLwogZXh0ZXJuIGludCBhY3BpcGhwX2RlYnVnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwppbmRleCA0ZjFiMGRhLi4zNGRlNTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKQEAgLTQxNiwyNyArNDE2LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlwaHBfaW5pdCh2b2lkKQogewotCWludCByZXR2YWw7Ci0JaW50IGRvY2tpbmdfc3RhdGlvbjsKLQogCWluZm8oRFJJVkVSX0RFU0MgIiB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOwogCiAJYWNwaXBocF9kZWJ1ZyA9IGRlYnVnOwogCi0JZG9ja2luZ19zdGF0aW9uID0gZmluZF9kb2NrX3N0YXRpb24oKTsKLQogCS8qIHJlYWQgYWxsIHRoZSBBQ1BJIGluZm8gZnJvbSB0aGUgc3lzdGVtICovCi0JcmV0dmFsID0gaW5pdF9hY3BpKCk7Ci0KLQkvKiBpZiB3ZSBoYXZlIGZvdW5kIGEgZG9ja2luZyBzdGF0aW9uLCB3ZSBzaG91bGQKLQkgKiBnbyBhaGVhZCBhbmQgbG9hZCBldmVuIGlmIGluaXRfYWNwaSBoYXMgZm91bmQKLQkgKiBubyBzbG90cy4gIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIHRoZSBfRENLCi0JICogbWV0aG9kIG5vdCBkZWZpbmVkIHVuZGVyIHRoZSBhY3R1YWwgZG9jayBicmlkZ2UKLQkgKi8KLQlpZiAoZG9ja2luZ19zdGF0aW9uKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGluaXRfYWNwaSgpOwogfQogCiAKQEAgLTQ0NCw4ICs0MjksNiBAQAogewogCS8qIGRlYWxsb2NhdGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4gKi8KIAlhY3BpcGhwX2dsdWVfZXhpdCgpOwotCi0JcmVtb3ZlX2RvY2tfc3RhdGlvbigpOwogfQogCiBtb2R1bGVfaW5pdChhY3BpcGhwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2RvY2suYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9kb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMWFhZjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2RvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDQzOCArMCwwIEBACi0vKgotICogQUNQSSBQQ0kgSG90UGx1ZyBkb2NrIGZ1bmN0aW9ucyB0byBBQ1BJIENBIHN1YnN5c3RlbQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBLcmlzdGVuIENhcmxzb24gQWNjYXJkaSAoa3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+Ci0gKgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSAiLi4vcGNpLmgiCi0jaW5jbHVkZSAicGNpX2hvdHBsdWcuaCIKLSNpbmNsdWRlICJhY3BpcGhwLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgYWNwaXBocF9kb2NrX3N0YXRpb24gKmRzOwotI2RlZmluZSBNWV9OQU1FICJhY3BpcGhwX2RvY2siCi0KLQotaW50IGlzX2RlcGVuZGVudF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCXJldHVybiAoZ2V0X2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKSA/IDEgOiAwKTsKLX0KLQotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWZpbmRfZGVwZW5kZW50X2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKLXsKLQlpbnQgKmNvdW50ID0gKGludCAqKWNvbnRleHQ7Ci0KLQlpZiAoaXNfZGVwZW5kZW50X2RldmljZShoYW5kbGUpKSB7Ci0JCSgqY291bnQpKys7Ci0JCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKLQl9IGVsc2UgewotCQlyZXR1cm4gQUVfT0s7Ci0JfQotfQotCi0KLQotCi12b2lkIGFkZF9kZXBlbmRlbnRfZGV2aWNlKHN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpuZXdfZGQpCi17Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2RkLT5kZXZpY2VfbGlzdCwgJmRzLT5kZXBlbmRlbnRfZGV2aWNlcyk7Ci19Ci0KLQotdm9pZCBhZGRfcGNpX2RlcGVuZGVudF9kZXZpY2Uoc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgKm5ld19kZCkKLXsKLQlsaXN0X2FkZF90YWlsKCZuZXdfZGQtPnBjaV9saXN0LCAmZHMtPnBjaV9kZXBlbmRlbnRfZGV2aWNlcyk7Ci19Ci0KLQotCi1zdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqIGdldF9kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqZGQ7Ci0KLQlpZiAoIWRzKQotCQlyZXR1cm4gTlVMTDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZkcy0+ZGVwZW5kZW50X2RldmljZXMsIGRldmljZV9saXN0KSB7Ci0JCWlmIChoYW5kbGUgPT0gZGQtPmhhbmRsZSkKLQkJCXJldHVybiBkZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi1zdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqYWxsb2NfZGVwZW5kZW50X2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgKmRkOwotCi0JZGQgPSBremFsbG9jKHNpemVvZigqZGQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGQpIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmRkLT5wY2lfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZC0+ZGV2aWNlX2xpc3QpOwotCQlkZC0+aGFuZGxlID0gaGFuZGxlOwotCX0KLQlyZXR1cm4gZGQ7Ci19Ci0KLQotCi1zdGF0aWMgaW50IGlzX2RvY2soYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2hhbmRsZSB0bXA7Ci0KLQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX0RDSyIsICZ0bXApOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLQotCi1zdGF0aWMgaW50IGRvY2tfcHJlc2VudCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc3RhOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCWlmIChkcykgewotCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZHMtPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKLQkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIHN0YSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyB2b2lkIGVqZWN0X2RvY2sodm9pZCkKLXsKLQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKLQl1bmlvbiBhY3BpX29iamVjdCBhcmc7Ci0KLQlhcmdfbGlzdC5jb3VudCA9IDE7Ci0JYXJnX2xpc3QucG9pbnRlciA9ICZhcmc7Ci0JYXJnLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKLQlhcmcuaW50ZWdlci52YWx1ZSA9IDE7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGRzLT5oYW5kbGUsICJfRUowIiwKLQkJCQkJJmFyZ19saXN0LCBOVUxMKSkgfHwgZG9ja19wcmVzZW50KCkpCi0JCXdhcm4oIiVzOiBmYWlsZWQgdG8gZWplY3QgZG9jayFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlyZXR1cm47Ci19Ci0KLQotCi0KLXN0YXRpYyBhY3BpX3N0YXR1cyBoYW5kbGVfZG9jayhpbnQgZG9jaykKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3Q7Ci0JdW5pb24gYWNwaV9vYmplY3QgYXJnOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwotCi0JZGJnKCIlczogJXNcbiIsIF9fRlVOQ1RJT05fXywgZG9jayA/ICJkb2NraW5nIiA6ICJ1bmRvY2tpbmciKTsKLQotCS8qIF9EQ0sgbWV0aG9kIGhhcyBvbmUgYXJndW1lbnQgKi8KLQlhcmdfbGlzdC5jb3VudCA9IDE7Ci0JYXJnX2xpc3QucG9pbnRlciA9ICZhcmc7Ci0JYXJnLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKLQlhcmcuaW50ZWdlci52YWx1ZSA9IGRvY2s7Ci0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZHMtPmhhbmRsZSwgIl9EQ0siLAotCQkJCQkmYXJnX2xpc3QsICZidWZmZXIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZXJyKCIlczogZmFpbGVkIHRvIGV4ZWN1dGUgX0RDS1xuIiwgX19GVU5DVElPTl9fKTsKLQlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb2NrKHZvaWQpCi17Ci0JaGFuZGxlX2RvY2soMSk7Ci19Ci0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5kb2NrKHZvaWQpCi17Ci0JaGFuZGxlX2RvY2soMCk7Ci19Ci0KLQotCi0vKgotICogdGhlIF9EQ0sgbWV0aG9kIGNhbiBkbyBmdW5ueSB0aGluZ3MuLi4gYW5kIHNvbWV0aW1lcyBub3QKLSAqIGhhaC1oYWggZnVubnkuCi0gKgotICogVEJEIC0gZmlndXJlIG91dCBhIHdheSB0byBvbmx5IGNhbGwgZml4dXBzIGZvcgotICogc3lzdGVtcyB0aGF0IHJlcXVpcmUgdGhlbS4KLSAqLwotc3RhdGljIHZvaWQgcG9zdF9kb2NrX2ZpeHVwcyh2b2lkKQotewotCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0JdTMyIGJ1c2VzOwotCXN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpkZDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZkcy0+cGNpX2RlcGVuZGVudF9kZXZpY2VzLCBwY2lfbGlzdCkgewotCQlidXMgPSBkZC0+ZnVuYy0+c2xvdC0+YnJpZGdlLT5wY2lfYnVzOwotCi0JCS8qIGZpeHVwIGJhZCBfRENLIGZ1bmN0aW9uIHRoYXQgcmV3cml0ZXMKLQkgCSAqIHNlY29uZGFyeSBicmlkZ2Ugb24gc2xvdAotCSAJICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChidXMtPnNlbGYsCi0JCQkJUENJX1BSSU1BUllfQlVTLAotCQkJCSZidXNlcyk7Ci0KLQkJaWYgKCgoYnVzZXMgPj4gOCkgJiAweGZmKSAhPSBidXMtPnNlY29uZGFyeSkgewotCQkJYnVzZXMgPSAoYnVzZXMgJiAweGZmMDAwMDAwKQotCSAgICAgCQkJfCAoKHVuc2lnbmVkIGludCkoYnVzLT5wcmltYXJ5KSAgICAgPDwgIDApCi0JICAgICAJCQl8ICgodW5zaWduZWQgaW50KShidXMtPnNlY29uZGFyeSkgICA8PCAgOCkKLQkgICAgIAkJCXwgKCh1bnNpZ25lZCBpbnQpKGJ1cy0+c3Vib3JkaW5hdGUpIDw8IDE2KTsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnVzLT5zZWxmLAotCQkJCQlQQ0lfUFJJTUFSWV9CVVMsCi0JCQkJCWJ1c2VzKTsKLQkJfQotCX0KLX0KLQotCi0KLXN0YXRpYyB2b2lkIGhvdHBsdWdfcGNpKHUzMiB0eXBlKQotewotCXN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpkZDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGQsICZkcy0+cGNpX2RlcGVuZGVudF9kZXZpY2VzLCBwY2lfbGlzdCkKLQkJaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyhkZC0+aGFuZGxlLCB0eXBlLCBkZC0+ZnVuYyk7Ci19Ci0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVnaW5fZG9jayh2b2lkKQotewotCWRzLT5mbGFncyB8PSBET0NLX0RPQ0tJTkc7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbXBsZXRlX2RvY2sodm9pZCkKLXsKLQlkcy0+ZmxhZ3MgJj0gfihET0NLX0RPQ0tJTkcpOwotCWRzLT5sYXN0X2RvY2tfdGltZSA9IGppZmZpZXM7Ci19Ci0KLQotc3RhdGljIGludCBkb2NrX2luX3Byb2dyZXNzKHZvaWQpCi17Ci0JaWYgKGRzLT5mbGFncyAmIERPQ0tfRE9DS0lORyB8fAotCQlkcy0+bGFzdF9kb2NrX3RpbWUgPT0gamlmZmllcykgewotCQlkYmcoImRvY2sgaW4gcHJvZ3Jlc3NcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2hvdHBsdWdfZXZlbnRfZG9jayhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiB0eXBlLCB2b2lkICpjb250ZXh0KQotewotCWRiZygiJXM6IGVudGVyXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgQUNQSV9OT1RJRllfQlVTX0NIRUNLOgotCQkJZGJnKCJCVVMgQ2hlY2tcbiIpOwotCQkJaWYgKCFkb2NrX2luX3Byb2dyZXNzKCkgJiYgZG9ja19wcmVzZW50KCkpIHsKLQkJCQliZWdpbl9kb2NrKCk7Ci0JCQkJZG9jaygpOwotCQkJCWlmICghZG9ja19wcmVzZW50KCkpIHsKLQkJCQkJZXJyKCJVbmFibGUgdG8gZG9jayFcbiIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJcG9zdF9kb2NrX2ZpeHVwcygpOwotCQkJCWhvdHBsdWdfcGNpKHR5cGUpOwotCQkJCWNvbXBsZXRlX2RvY2soKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1Q6Ci0JCQlkYmcoIkVKRUNUIHJlcXVlc3RcbiIpOwotCQkJaWYgKCFkb2NrX2luX3Byb2dyZXNzKCkgJiYgZG9ja19wcmVzZW50KCkpIHsKLQkJCQlob3RwbHVnX3BjaSh0eXBlKTsKLQkJCQl1bmRvY2soKTsKLQkJCQllamVjdF9kb2NrKCk7Ci0JCQkJaWYgKGRvY2tfcHJlc2VudCgpKQotCQkJCQllcnIoIlVuYWJsZSB0byB1bmRvY2shXG4iKTsKLQkJCX0KLQkJCWJyZWFrOwotCX0KLX0KLQotCi0KLQotc3RhdGljIGFjcGlfc3RhdHVzCi1maW5kX2RvY2tfZWpkKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2hhbmRsZSB0bXA7Ci0JYWNwaV9oYW5kbGUgZGNrX2hhbmRsZSA9IChhY3BpX2hhbmRsZSkgY29udGV4dDsKLQljaGFyIG9iam5hbWVbNjRdOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IC5sZW5ndGggPSBzaXplb2Yob2JqbmFtZSksCi0JCQkJICAgICAgLnBvaW50ZXIgPSBvYmpuYW1lIH07Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGVqZF9idWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICplamRfb2JqOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9FSkQiLCAmdG1wKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybiBBRV9PSzsKLQotCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgZGVwZW5kZW50IG9uIHRoZSBkb2NrIGRldmljZSwKLQkgKiBieSBleGVjdXRpbmcgdGhlIF9FSkQgbWV0aG9kLCB0aGVuIGdldHRpbmcgYSBoYW5kbGUKLQkgKiB0byB0aGUgZGV2aWNlIHJlZmVyZW5jZWQgYnkgdGhhdCBuYW1lLiAgSWYgdGhhdAotCSAqIGRldmljZSBoYW5kbGUgaXMgdGhlIHNhbWUgaGFuZGxlIGFzIHRoZSBkb2NrIHN0YXRpb24KLQkgKiBoYW5kbGUsIHRoZW4gd2UgYXJlIGEgZGV2aWNlIGRlcGVuZGVudCBvbiB0aGUgZG9jayBzdGF0aW9uCi0JICovCi0JYWNwaV9nZXRfbmFtZShkY2tfaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZidWZmZXIpOwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9FSkQiLCBOVUxMLCAmZWpkX2J1ZmZlcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiVW5hYmxlIHRvIGV4ZWN1dGUgX0VKRCFcbiIpOwotCQlnb3RvIGZpbmRfZWpkX291dDsKLQl9Ci0JZWpkX29iaiA9IGVqZF9idWZmZXIucG9pbnRlcjsKLQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZWpkX29iai0+c3RyaW5nLnBvaW50ZXIsICZ0bXApOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBmaW5kX2VqZF9vdXQ7Ci0KLQlpZiAodG1wID09IGRja19oYW5kbGUpIHsKLQkJc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgKmRkOwotCQlkYmcoIiVzOiBmb3VuZCBkZXZpY2UgZGVwZW5kZW50IG9uIGRvY2tcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWRkID0gYWxsb2NfZGVwZW5kZW50X2RldmljZShoYW5kbGUpOwotCQlpZiAoIWRkKSB7Ci0JCQllcnIoIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGVwZW5kZW50IGRldmljZSFcbiIpOwotCQkJZ290byBmaW5kX2VqZF9vdXQ7Ci0JCX0KLQkJYWRkX2RlcGVuZGVudF9kZXZpY2UoZGQpOwotCX0KLQotZmluZF9lamRfb3V0OgotCWFjcGlfb3NfZnJlZShlamRfYnVmZmVyLnBvaW50ZXIpOwotCXJldHVybiBBRV9PSzsKLX0KLQotCi0KLWludCBkZXRlY3RfZGVwZW5kZW50X2RldmljZXMoYWNwaV9oYW5kbGUgKmJyaWRnZV9oYW5kbGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWludCBjb3VudDsKLQotCWNvdW50ID0gMDsKLQotCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgYnJpZGdlX2hhbmRsZSwKLQkJCQkJKHUzMikxLCBmaW5kX2RlcGVuZGVudF9kZXZpY2UsCi0JCQkJCSh2b2lkICopJmNvdW50LCBOVUxMKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotCi0KLQotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWZpbmRfZG9jayhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKLXsKLQlpbnQgKmNvdW50ID0gKGludCAqKWNvbnRleHQ7Ci0KLQlpZiAoaXNfZG9jayhoYW5kbGUpKSB7Ci0JCWRiZygiJXM6IGZvdW5kIGRvY2tcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWRzID0ga3phbGxvYyhzaXplb2YoKmRzKSwgR0ZQX0tFUk5FTCk7Ci0JCWRzLT5oYW5kbGUgPSBoYW5kbGU7Ci0JCUlOSVRfTElTVF9IRUFEKCZkcy0+ZGVwZW5kZW50X2RldmljZXMpOwotCQlJTklUX0xJU1RfSEVBRCgmZHMtPnBjaV9kZXBlbmRlbnRfZGV2aWNlcyk7Ci0KLQkJLyogbG9vayBmb3IgZGV2aWNlcyBkZXBlbmRlbnQgb24gZG9jayBzdGF0aW9uICovCi0JCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKLQkJCUFDUElfVUlOVDMyX01BWCwgZmluZF9kb2NrX2VqZCwgaGFuZGxlLCBOVUxMKTsKLQotCQlhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoaGFuZGxlLCBBQ1BJX1NZU1RFTV9OT1RJRlksCi0JCQloYW5kbGVfaG90cGx1Z19ldmVudF9kb2NrLCBkcyk7Ci0JCSgqY291bnQpKys7Ci0JfQotCi0JcmV0dXJuIEFFX09LOwotfQotCi0KLQotCi1pbnQgZmluZF9kb2NrX3N0YXRpb24odm9pZCkKLXsKLQlpbnQgbnVtID0gMDsKLQotCWRzID0gTlVMTDsKLQotCS8qIHN0YXJ0IGZyb20gdGhlIHJvb3Qgb2JqZWN0LCBiZWNhdXNlIHNvbWUgbGFwdG9wcyBkZWZpbmUKLQkgKiBfRENLIG1ldGhvZHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgUENJIChJQk0geC1zZXJpZXMgbGFwdG9wKQotCSAqLwotCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKLQkJCUFDUElfVUlOVDMyX01BWCwgZmluZF9kb2NrLCAmbnVtLCBOVUxMKTsKLQotCXJldHVybiBudW07Ci19Ci0KLQotCi12b2lkIHJlbW92ZV9kb2NrX3N0YXRpb24odm9pZCkKLXsKLQlzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqZGQsICp0bXA7Ci0JaWYgKGRzKSB7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZHMtPmhhbmRsZSwKLQkJCUFDUElfU1lTVEVNX05PVElGWSwgaGFuZGxlX2hvdHBsdWdfZXZlbnRfZG9jaykpKQotCQkJZXJyKCJmYWlsZWQgdG8gcmVtb3ZlIGRvY2sgbm90aWZ5IGhhbmRsZXJcbiIpOwotCi0JCS8qIGZyZWUgYWxsIGRlcGVuZGVudCBkZXZpY2VzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmZHMtPmRlcGVuZGVudF9kZXZpY2VzLAotCQkJCWRldmljZV9saXN0KQotCQkJa2ZyZWUoZGQpOwotCi0JCS8qIG5vIG5lZWQgdG8gdG91Y2ggdGhlIHBjaV9kZXBlbmRlbnRfZGV2aWNlIGxpc3QsCi0JCSAqIGNhdXNlIGFsbCBtZW1vcnkgd2FzIGZyZWVkIGFib3ZlCi0JCSAqLwotCQlrZnJlZShkcyk7Ci0JfQotfQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IGQzNzBmOTkuLmVmOTVkMTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKQEAgLTU5LDYgKzU5LDcgQEAKIHN0YXRpYyB2b2lkIGhhbmRsZV9ob3RwbHVnX2V2ZW50X2JyaWRnZSAoYWNwaV9oYW5kbGUsIHUzMiwgdm9pZCAqKTsKIHN0YXRpYyB2b2lkIGFjcGlwaHBfc2FuaXRpemVfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogc3RhdGljIHZvaWQgYWNwaXBocF9zZXRfaHBwX3ZhbHVlcyhhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBwY2lfYnVzICpidXMpOworc3RhdGljIHZvaWQgaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiB0eXBlLCB2b2lkICpjb250ZXh0KTsKIAogCiAvKgpAQCAtMTE2LDYgKzExNyw1OSBAQAogCX0KIH0KIAorLyogY2FsbGJhY2sgcm91dGluZSB0byBjaGVjayBmb3IgdGhlIGV4aXN0YW5jZSBvZiBhIHBjaSBkb2NrIGRldmljZSAqLworc3RhdGljIGFjcGlfc3RhdHVzCitpc19wY2lfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCit7CisJaW50ICpjb3VudCA9IChpbnQgKiljb250ZXh0OworCisJaWYgKGlzX2RvY2tfZGV2aWNlKGhhbmRsZSkpIHsKKwkJKCpjb3VudCkrKzsKKwkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworCX0gZWxzZSB7CisJCXJldHVybiBBRV9PSzsKKwl9Cit9CisKKworCisKKy8qCisgKiB0aGUgX0RDSyBtZXRob2QgY2FuIGRvIGZ1bm55IHRoaW5ncy4uLiBhbmQgc29tZXRpbWVzIG5vdAorICogaGFoLWhhaCBmdW5ueS4KKyAqCisgKiBUQkQgLSBmaWd1cmUgb3V0IGEgd2F5IHRvIG9ubHkgY2FsbCBmaXh1cHMgZm9yCisgKiBzeXN0ZW1zIHRoYXQgcmVxdWlyZSB0aGVtLgorICovCitzdGF0aWMgaW50IHBvc3RfZG9ja19maXh1cHMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJdm9pZCAqdikKK3sKKwlzdHJ1Y3QgYWNwaXBocF9mdW5jICpmdW5jID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgYWNwaXBocF9mdW5jLCBuYik7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGZ1bmMtPnNsb3QtPmJyaWRnZS0+cGNpX2J1czsKKwl1MzIgYnVzZXM7CisKKwlpZiAoIWJ1cy0+c2VsZikKKwkJcmV0dXJuICBOT1RJRllfT0s7CisKKwkvKiBmaXh1cCBiYWQgX0RDSyBmdW5jdGlvbiB0aGF0IHJld3JpdGVzCisJICogc2Vjb25kYXJ5IGJyaWRnZSBvbiBzbG90CisJICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJ1cy0+c2VsZiwKKwkJCVBDSV9QUklNQVJZX0JVUywKKwkJCSZidXNlcyk7CisKKwlpZiAoKChidXNlcyA+PiA4KSAmIDB4ZmYpICE9IGJ1cy0+c2Vjb25kYXJ5KSB7CisJCWJ1c2VzID0gKGJ1c2VzICYgMHhmZjAwMDAwMCkKKwkgICAgIAkJfCAoKHVuc2lnbmVkIGludCkoYnVzLT5wcmltYXJ5KSAgICAgPDwgIDApCisJICAgICAJCXwgKCh1bnNpZ25lZCBpbnQpKGJ1cy0+c2Vjb25kYXJ5KSAgIDw8ICA4KQorCSAgICAgCQl8ICgodW5zaWduZWQgaW50KShidXMtPnN1Ym9yZGluYXRlKSA8PCAxNik7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnVzLT5zZWxmLCBQQ0lfUFJJTUFSWV9CVVMsIGJ1c2VzKTsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworCisKIAogLyogY2FsbGJhY2sgcm91dGluZSB0byByZWdpc3RlciBlYWNoIEFDUEkgUENJIHNsb3Qgb2JqZWN0ICovCiBzdGF0aWMgYWNwaV9zdGF0dXMKQEAgLTEyNCw3ICsxNzgsNiBAQAogCXN0cnVjdCBhY3BpcGhwX2JyaWRnZSAqYnJpZGdlID0gKHN0cnVjdCBhY3BpcGhwX2JyaWRnZSAqKWNvbnRleHQ7CiAJc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdDsKIAlzdHJ1Y3QgYWNwaXBocF9mdW5jICpuZXdmdW5jOwotCXN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpkZDsKIAlhY3BpX2hhbmRsZSB0bXA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5zaWduZWQgbG9uZyBhZHIsIHN1bjsKQEAgLTEzNyw3ICsxOTAsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9FSjAiLCAmdG1wKTsKIAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSAmJiAhKGlzX2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKSkpCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpICYmICEoaXNfZG9ja19kZXZpY2UoaGFuZGxlKSkpCiAJCXJldHVybiBBRV9PSzsKIAogCWRldmljZSA9IChhZHIgPj4gMTYpICYgMHhmZmZmOwpAQCAtMTYyLDIyICsyMTUsMTcgQEAKIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfUFMzIiwgJnRtcCkpKQogCQluZXdmdW5jLT5mbGFncyB8PSBGVU5DX0hBU19QUzM7CiAKLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRENLIiwgJnRtcCkpKSB7CisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX0RDSyIsICZ0bXApKSkKIAkJbmV3ZnVuYy0+ZmxhZ3MgfD0gRlVOQ19IQVNfRENLOwotCQkvKiBhZGQgdG8gZGV2aWNlcyBkZXBlbmRlbnQgb24gZG9jayBzdGF0aW9uLAotCQkgKiBiZWNhdXNlIHRoaXMgbWF5IGFjdHVhbGx5IGJlIHRoZSBkb2NrIGJyaWRnZQotCQkgKi8KLQkJZGQgPSBhbGxvY19kZXBlbmRlbnRfZGV2aWNlKGhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCQkJIm5ldyBkZXBlbmRlbnQgZGV2aWNlIVxuIik7Ci0JCWVsc2UKLQkJCWFkZF9kZXBlbmRlbnRfZGV2aWNlKGRkKTsKLQl9CiAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NVTiIsIE5VTEwsICZzdW4pOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJc3VuID0gLTE7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCS8qCisJCSAqIHVzZSB0aGUgY291bnQgb2YgdGhlIG51bWJlciBvZiBzbG90cyB3ZSd2ZSBmb3VuZAorCQkgKiBmb3IgdGhlIG51bWJlciBvZiB0aGUgc2xvdAorCQkgKi8KKwkJc3VuID0gYnJpZGdlLT5ucl9zbG90cysxOworCX0KIAogCS8qIHNlYXJjaCBmb3Igb2JqZWN0cyB0aGF0IHNoYXJlIHRoZSBzYW1lIHNsb3QgKi8KIAlmb3IgKHNsb3QgPSBicmlkZ2UtPnNsb3RzOyBzbG90OyBzbG90ID0gc2xvdC0+bmV4dCkKQEAgLTIyNSwyMCArMjczLDIzIEBACiAJCXNsb3QtPmZsYWdzIHw9IChTTE9UX0VOQUJMRUQgfCBTTE9UX1BPV0VSRURPTik7CiAJfQogCi0JLyogaWYgdGhpcyBpcyBhIGRldmljZSBkZXBlbmRlbnQgb24gYSBkb2NrIHN0YXRpb24sCi0JICogYXNzb2NpYXRlIHRoZSBhY3BpcGhwX2Z1bmMgdG8gdGhlIGRlcGVuZGVudF9kZXZpY2UKLSAJICogc3RydWN0LgotCSAqLwotCWlmICgoZGQgPSBnZXRfZGVwZW5kZW50X2RldmljZShoYW5kbGUpKSkgewotCQluZXdmdW5jLT5mbGFncyB8PSBGVU5DX0lTX0REOwotCQkvKgotCQkgKiB3ZSBkb24ndCB3YW50IGFueSBkZXZpY2VzIHdoaWNoIGlzIGRlcGVuZGVudAotCQkgKiBvbiB0aGUgZG9jayB0byBoYXZlIGl0J3MgX0VKMCBtZXRob2QgZXhlY3V0ZWQuCi0JCSAqIGJlY2F1c2Ugd2UgbmVlZCB0byBydW4gX0RDSyBmaXJzdC4KKwlpZiAoaXNfZG9ja19kZXZpY2UoaGFuZGxlKSkgeworCQkvKiB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcyBkZXZpY2UncyBfRUowCisJCSAqIGJlY2F1c2Ugd2Ugd2FudCB0aGUgZG9jayBub3RpZnkgaGFuZGxlcgorCQkgKiB0byBjYWxsIGl0IGFmdGVyIGl0IGNhbGxzIF9EQ0sKIAkJICovCiAJCW5ld2Z1bmMtPmZsYWdzICY9IH5GVU5DX0hBU19FSjA7Ci0JCWRkLT5mdW5jID0gbmV3ZnVuYzsKLQkJYWRkX3BjaV9kZXBlbmRlbnRfZGV2aWNlKGRkKTsKKwkJaWYgKHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoaGFuZGxlLAorCQkJaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYywgbmV3ZnVuYykpCisJCQlkYmcoImZhaWxlZCB0byByZWdpc3RlciBkb2NrIGRldmljZVxuIik7CisKKwkJLyogd2UgbmVlZCB0byBiZSBub3RpZmllZCB3aGVuIGRvY2sgZXZlbnRzIGhhcHBlbgorCQkgKiBvdXRzaWRlIG9mIHRoZSBob3RwbHVnIG9wZXJhdGlvbiwgc2luY2Ugd2UgbWF5CisJCSAqIG5lZWQgdG8gZG8gZml4dXBzIGJlZm9yZSB3ZSBjYW4gaG90cGx1Zy4KKwkJICovCisJCW5ld2Z1bmMtPm5iLm5vdGlmaWVyX2NhbGwgPSBwb3N0X2RvY2tfZml4dXBzOworCQlpZiAocmVnaXN0ZXJfZG9ja19ub3RpZmllcigmbmV3ZnVuYy0+bmIpKQorCQkJZGJnKCJmYWlsZWQgdG8gcmVnaXN0ZXIgYSBkb2NrIG5vdGlmaWVyIik7CiAJfQogCiAJLyogaW5zdGFsbCBub3RpZnkgaGFuZGxlciAqLwpAQCAtMjc3LDYgKzMyOCwxNSBAQAogCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgYnJpZGdlX2hhbmRsZSwgKHUzMikxLAogCQkJCSAgICAgaXNfZWplY3RhYmxlX3Nsb3QsICh2b2lkICopJmNvdW50LCBOVUxMKTsKIAorCS8qCisJICogd2UgYWxzbyBuZWVkIHRvIGFkZCB0aGlzIGJyaWRnZSBpZiB0aGVyZSBpcyBhIGRvY2sgYnJpZGdlIG9yCisJICogb3RoZXIgcGNpIGRldmljZSBvbiBhIGRvY2sgc3RhdGlvbiAocmVtb3ZhYmxlKQorCSAqLworCWlmICghY291bnQpCisJCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgYnJpZGdlX2hhbmRsZSwKKwkJCQkodTMyKTEsIGlzX3BjaV9kb2NrX2RldmljZSwgKHZvaWQgKikmY291bnQsCisJCQkJTlVMTCk7CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTQ4Nyw4ICs1NDcsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGNoZWNrIGlmIHRoaXMgYnJpZGdlIGhhcyBlamVjdGFibGUgc2xvdHMgKi8KLQlpZiAoKGRldGVjdF9lamVjdGFibGVfc2xvdHMoaGFuZGxlKSA+IDApIHx8Ci0JCShkZXRlY3RfZGVwZW5kZW50X2RldmljZXMoaGFuZGxlKSA+IDApKSB7CisJaWYgKChkZXRlY3RfZWplY3RhYmxlX3Nsb3RzKGhhbmRsZSkgPiAwKSkgewogCQlkYmcoImZvdW5kIFBDSS10by1QQ0kgYnJpZGdlIGF0IFBDSSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAJCWFkZF9wMnBfYnJpZGdlKGhhbmRsZSwgZGV2KTsKIAl9CkBAIC02MDUsNiArNjY0LDEwIEBACiAJCWxpc3RfZm9yX2VhY2hfc2FmZSAobGlzdCwgdG1wLCAmc2xvdC0+ZnVuY3MpIHsKIAkJCXN0cnVjdCBhY3BpcGhwX2Z1bmMgKmZ1bmM7CiAJCQlmdW5jID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgYWNwaXBocF9mdW5jLCBzaWJsaW5nKTsKKwkJCWlmIChpc19kb2NrX2RldmljZShmdW5jLT5oYW5kbGUpKSB7CisJCQkJdW5yZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGZ1bmMtPmhhbmRsZSk7CisJCQkJdW5yZWdpc3Rlcl9kb2NrX25vdGlmaWVyKCZmdW5jLT5uYik7CisJCQl9CiAJCQlpZiAoIShmdW5jLT5mbGFncyAmIEZVTkNfSEFTX0RDSykpIHsKIAkJCQlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihmdW5jLT5oYW5kbGUsCiAJCQkJCQlBQ1BJX1NZU1RFTV9OT1RJRlksCkBAIC0xNDQwLDcgKzE1MDMsNyBAQAogICogaGFuZGxlcyBBQ1BJIGV2ZW50IG5vdGlmaWNhdGlvbiBvbiBzbG90cwogICoKICAqLwotdm9pZCBoYW5kbGVfaG90cGx1Z19ldmVudF9mdW5jKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIHR5cGUsIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgdm9pZCBoYW5kbGVfaG90cGx1Z19ldmVudF9mdW5jKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIHR5cGUsIHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlwaHBfZnVuYyAqZnVuYzsKIAljaGFyIG9iam5hbWVbNjRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDAzN2NlNGMuLmQ1ZGY1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19jb3JlLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqIFNlbmQgZmVlZGJhY2sgdG8gPHNjb3R0bUBzb21hbmV0d29ya3MuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0zNDgsNyArMzQ3LDcgQEAKIAlkYmcoImVudGVyZWQgY3BjaV9ocF9pbnRyIik7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgaXQgd2FzIG91ciBpbnRlcnJ1cHQgKi8KLQlpZiAoKGNvbnRyb2xsZXItPmlycV9mbGFncyAmIFNBX1NISVJRKSAmJgorCWlmICgoY29udHJvbGxlci0+aXJxX2ZsYWdzICYgSVJRRl9TSEFSRUQpICYmCiAJICAgICFjb250cm9sbGVyLT5vcHMtPmNoZWNrX2lycShjb250cm9sbGVyLT5kZXZfaWQpKSB7CiAJCWRiZygiZXhpdGVkIGNwY2lfaHBfaW50ciwgbm90IG91ciBpbnRlcnJ1cHQiKTsKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYwppbmRleCAyMjViNWU1Li4wMmJlNzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYwpAQCAtMjMsNyArMjMsNiBAQAogICogU2VuZCBmZWVkYmFjayB0byA8c2NvdHRtQHNvbWFuZXR3b3Jrcy5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCmluZGV4IDJkNDYzOWQ2Li5lODQ3ZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiBTZW5kIGZlZWRiYWNrIHRvIDxzY290dG1Ac29tYW5ldHdvcmtzLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF96dDU1NTAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX3p0NTU1MC5jCmluZGV4IGY3Y2IwMGQuLjFjMTJlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX3p0NTU1MC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX3p0NTU1MC5jCkBAIC0zMCwxMyArMzAsMTMgQEAKICAqIFNlbmQgZmVlZGJhY2sgdG8gPHNjb3R0bUBzb21hbmV0d29ya3MuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgkvKiBTQV9TSElSUSAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgkvKiBJUlFGX1NIQVJFRCAqLwogI2luY2x1ZGUgImNwY2lfaG90cGx1Zy5oIgogI2luY2x1ZGUgImNwY2locF96dDU1NTAuaCIKIApAQCAtOTUsOCArOTUsOCBAQAogCiAJaGNfZGV2ID0gcGRldjsKIAlkYmcoImhjX2RldiA9ICVwIiwgaGNfZGV2KTsKLQlkYmcoInBjaSByZXNvdXJjZSBzdGFydCAlbHgiLCBwY2lfcmVzb3VyY2Vfc3RhcnQoaGNfZGV2LCAxKSk7Ci0JZGJnKCJwY2kgcmVzb3VyY2UgbGVuICVseCIsIHBjaV9yZXNvdXJjZV9sZW4oaGNfZGV2LCAxKSk7CisJZGJnKCJwY2kgcmVzb3VyY2Ugc3RhcnQgJWxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGhjX2RldiwgMSkpOworCWRiZygicGNpIHJlc291cmNlIGxlbiAlbGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKGhjX2RldiwgMSkpOwogCiAJaWYoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoaGNfZGV2LCAxKSwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKGhjX2RldiwgMSksIE1ZX05BTUUpKSB7CkBAIC0xMDgsOCArMTA4LDkgQEAKIAloY19yZWdpc3RlcnMgPQogCSAgICBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChoY19kZXYsIDEpLCBwY2lfcmVzb3VyY2VfbGVuKGhjX2RldiwgMSkpOwogCWlmKCFoY19yZWdpc3RlcnMpIHsKLQkJZXJyKCJjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4IiwKLQkJICAgIHBjaV9yZXNvdXJjZV9sZW4oaGNfZGV2LCAxKSwgcGNpX3Jlc291cmNlX3N0YXJ0KGhjX2RldiwgMSkpOworCQllcnIoImNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbGx4IEAgJWxseCIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4oaGNfZGV2LCAxKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGhjX2RldiwgMSkpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CiAJfQpAQCAtMjE5LDcgKzIyMCw3IEBACiAJenQ1NTUwX2hwYy5vcHMgPSAmenQ1NTUwX2hwY19vcHM7CiAJaWYoIXBvbGwpIHsKIAkJenQ1NTUwX2hwYy5pcnEgPSBoY19kZXYtPmlycTsKLQkJenQ1NTUwX2hwYy5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwkJenQ1NTUwX2hwYy5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAkJenQ1NTUwX2hwYy5kZXZfaWQgPSBoY19kZXY7CiAKIAkJenQ1NTUwX2hwY19vcHMuZW5hYmxlX2lycSA9IHp0NTU1MF9oY19lbmFibGVfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCmluZGV4IDliYzFkZWIuLjFmYzI1OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDg5LDggKzEwODgsOCBAQAogCX0KIAkKIAlkYmcoInBkZXYgPSAlcFxuIiwgcGRldik7Ci0JZGJnKCJwY2kgcmVzb3VyY2Ugc3RhcnQgJWx4XG4iLCBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpOwotCWRiZygicGNpIHJlc291cmNlIGxlbiAlbHhcbiIsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCWRiZygicGNpIHJlc291cmNlIHN0YXJ0ICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKTsKKwlkYmcoInBjaSByZXNvdXJjZSBsZW4gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApLCBNWV9OQU1FKSkgewpAQCAtMTEwMiw5ICsxMTAxLDkgQEAKIAljdHJsLT5ocGNfcmVnID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCiAJCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogCWlmICghY3RybC0+aHBjX3JlZykgewotCQllcnIoImNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCi0JCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSwKLQkJCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpOworCQllcnIoImNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbGx4IEAgJWxseFxuIiwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9mcmVlX21lbV9yZWdpb247CiAJfQpAQCAtMTE4OSw3ICsxMTg4LDcgQEAKIAkvKiBzZXQgdXAgdGhlIGludGVycnVwdCAqLwogCWRiZygiSFBDIGludGVycnVwdCA9ICVkIFxuIiwgY3RybC0+aW50ZXJydXB0KTsKIAlpZiAocmVxdWVzdF9pcnEoY3RybC0+aW50ZXJydXB0LCBjcHFocF9jdHJsX2ludHIsCi0JCQlTQV9TSElSUSwgTVlfTkFNRSwgY3RybCkpIHsKKwkJCUlSUUZfU0hBUkVELCBNWV9OQU1FLCBjdHJsKSkgewogCQllcnIoIkNhbid0IGdldCBpcnEgJWQgZm9yIHRoZSBob3RwbHVnIHBjaSBjb250cm9sbGVyXG4iLAogCQkJY3RybC0+aW50ZXJydXB0KTsKIAkJcmMgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCmluZGV4IDU1ZDJkYzcuLmFlMmRkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9udnJhbS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfbnZyYW0uYwppbmRleCBhYzk4YTExLi5jZjA4Nzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9udnJhbS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX252cmFtLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3BjaS5jCmluZGV4IDAwYjgxYTcuLjBkOTY4ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3BjaS5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKaW5kZXggYmJmZWVkNy4uOGIzZGEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYwppbmRleCA3MWI4MGMyLi5kZDJiNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYwpAQCAtMzIsNyArMzIsNiBAQAogICogRW5hYmxpbmcgUENJIGRldmljZXMgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwppbmRleCBjNDI4MjkwLi5iN2IzNzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYwpAQCAtMjcsNyArMjcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggZDc3MTM4ZS4uMGQ4ZmI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTEzOTgsOCArMTM5OCw5IEBACiAKIAlmb3IgKCByYyA9IDA7IHJjIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyByYysrKQogCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCByYykgPiAwKQotCQkJZGJnKCJwY2kgcmVzb3VyY2VbJWRdIHN0YXJ0PTB4JWx4KGxlbj0weCVseClcbiIsIHJjLAotCQkJCXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCByYyksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcmMpKTsKKwkJCWRiZygicGNpIHJlc291cmNlWyVkXSBzdGFydD0weCVsbHgobGVuPTB4JWxseClcbiIsIHJjLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIHJjKSwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcmMpKTsKIAogCWluZm8oIkhQQyB2ZW5kb3JfaWQgJXggZGV2aWNlX2lkICV4IHNzX3ZpZCAleCBzc19kaWQgJXhcbiIsIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCAKIAkJcGRldi0+c3Vic3lzdGVtX3ZlbmRvciwgcGRldi0+c3Vic3lzdGVtX2RldmljZSk7CkBAIC0xNDU3LDcgKzE0NTgsNyBAQAogCQlzdGFydF9pbnRfcG9sbF90aW1lciggcGhwX2N0bHIsIDEwICk7ICAgLyogc3RhcnQgd2l0aCAxMCBzZWNvbmQgZGVsYXkgKi8KIAl9IGVsc2UgewogCQkvKiBJbnN0YWxscyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQkJcmMgPSByZXF1ZXN0X2lycShwaHBfY3Rsci0+aXJxLCBwY2llX2lzciwgU0FfU0hJUlEsIE1ZX05BTUUsICh2b2lkICopIGN0cmwpOworCQlyYyA9IHJlcXVlc3RfaXJxKHBocF9jdGxyLT5pcnEsIHBjaWVfaXNyLCBJUlFGX1NIQVJFRCwgTVlfTkFNRSwgKHZvaWQgKikgY3RybCk7CiAJCWRiZygiJXM6IHJlcXVlc3RfaXJxICVkIGZvciBocGMlZCAocmV0dXJucyAlZClcbiIsIF9fRlVOQ1RJT05fXywgcGhwX2N0bHItPmlycSwgY3Rscl9zZXFfbnVtLCByYyk7CiAJCWlmIChyYykgewogCQkJZXJyKCJDYW4ndCBnZXQgaXJxICVkIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iLCBwaHBfY3Rsci0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYwppbmRleCAwYTQ2ZjU0Li44YWQ0NDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWhwX3NrZWxldG9uLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IDYzODAwNDUuLjA3NmJkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIFNlbmQgZmVlZGJhY2sgdG8gPGx4aWVAdXMuaWJtLmNvbT4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCA0NWZhY2FhLi4wZjk3OThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIAkJfSBlbHNlCiAJCQlwaHBfY3Rsci0+aXJxID0gcGRldi0+aXJxOwogCQkKLQkJcmMgPSByZXF1ZXN0X2lycShwaHBfY3Rsci0+aXJxLCBzaHBjX2lzciwgU0FfU0hJUlEsIE1ZX05BTUUsICh2b2lkICopIGN0cmwpOworCQlyYyA9IHJlcXVlc3RfaXJxKHBocF9jdGxyLT5pcnEsIHNocGNfaXNyLCBJUlFGX1NIQVJFRCwgTVlfTkFNRSwgKHZvaWQgKikgY3RybCk7CiAJCWRiZygiJXM6IHJlcXVlc3RfaXJxICVkIGZvciBocGMlZCAocmV0dXJucyAlZClcbiIsIF9fRlVOQ1RJT05fXywgcGhwX2N0bHItPmlycSwgY3Rscl9zZXFfbnVtLCByYyk7CiAJCWlmIChyYykgewogCQkJZXJyKCJDYW4ndCBnZXQgaXJxICVkIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iLCBwaHBfY3Rsci0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCmluZGV4IGY1Y2ZiZjIuLjYyMGUxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYwpAQCAtNTEsOCArNTEsMTAgQEAKIAkJcmVzID0gYnVzLT5yZXNvdXJjZVtpbmRleF07CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJCQkhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSkgewotCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bHgsIGxlbmd0aCA9ICU4LjhseFxuIiwKLQkJCQkJcmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkpOworCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCisJCQkJCSJsZW5ndGggPSAlOC44bGx4XG4iLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkpOwogCQl9CiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgIkZyZWUgcmVzb3VyY2VzOiBwcmVmZXRjaGFibGUgbWVtb3J5XG4iKTsKQEAgLTYwLDE2ICs2MiwyMCBAQAogCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgogCQkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkpIHsKLQkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGx4LCBsZW5ndGggPSAlOC44bHhcbiIsCi0JCQkJCXJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKTsKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGxseCwgIgorCQkJCQkibGVuZ3RoID0gJTguOGxseFxuIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKTsKIAkJfQogCX0KIAlvdXQgKz0gc3ByaW50ZihvdXQsICJGcmVlIHJlc291cmNlczogSU9cbiIpOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaW5kZXgrKykgewogCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pKSB7Ci0JCQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdGFydCA9ICU4LjhseCwgbGVuZ3RoID0gJTguOGx4XG4iLAotCQkJCQlyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSk7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdGFydCA9ICU4LjhsbHgsICIKKwkJCQkJImxlbmd0aCA9ICU4LjhsbHhcbiIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSk7CiAJCX0KIAl9CiAJb3V0ICs9IHNwcmludGYob3V0LCAiRnJlZSByZXNvdXJjZXM6IGJ1cyBudW1iZXJzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL21zaS5jIGIvZHJpdmVycy9wY2kvbXNpLmMKaW5kZXggN2Y4NDI5Mi4uMzZiYzdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvbXNpLmMKKysrIGIvZHJpdmVycy9wY2kvbXNpLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTQyOSwxMiArNDI4LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbcG9zXS5sb2NrLCBmbGFncyk7CiAJaWYgKGNhcF9pZCA9PSBQQ0lfQ0FQX0lEX01TSVgpCi0JCWlycV9kZXNjW3Bvc10uaGFuZGxlciA9ICZtc2l4X2lycV90eXBlOworCQlpcnFfZGVzY1twb3NdLmNoaXAgPSAmbXNpeF9pcnFfdHlwZTsKIAllbHNlIHsKIAkJaWYgKCFtYXNrKQotCQkJaXJxX2Rlc2NbcG9zXS5oYW5kbGVyID0gJm1zaV9pcnFfd29fbWFza2JpdF90eXBlOworCQkJaXJxX2Rlc2NbcG9zXS5jaGlwID0gJm1zaV9pcnFfd29fbWFza2JpdF90eXBlOwogCQllbHNlCi0JCQlpcnFfZGVzY1twb3NdLmhhbmRsZXIgPSAmbXNpX2lycV93X21hc2tiaXRfdHlwZTsKKwkJCWlycV9kZXNjW3Bvc10uY2hpcCA9ICZtc2lfaXJxX3dfbWFza2JpdF90eXBlOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1twb3NdLmxvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggYmM0MDVjMC4uZmRlZmE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CkBAIC04Nyw3ICs4Niw3IEBACiAJY2hhciAqIHN0ciA9IGJ1ZjsKIAlpbnQgaTsKIAlpbnQgbWF4ID0gNzsKLQl1NjQgc3RhcnQsIGVuZDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKIAogCWlmIChwY2lfZGV2LT5zdWJvcmRpbmF0ZSkKIAkJbWF4ID0gREVWSUNFX0NPVU5UX1JFU09VUkNFOwpAQCAtMzY1LDcgKzM2NCw3IEBACiAJCQkJCQkgICAgICAgc3RydWN0IGRldmljZSwga29iaikpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gKHN0cnVjdCByZXNvdXJjZSAqKWF0dHItPnByaXZhdGU7CiAJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3R5cGU7Ci0JdTY0IHN0YXJ0LCBlbmQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCAyM2QzYjE3Li5jZjU3ZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNjkxLDEwICs2OTEsMTIgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKLQlwcmludGsgKEtFUk5fV0FSTklORyAiUENJOiBVbmFibGUgdG8gcmVzZXJ2ZSAlcyByZWdpb24gIyVkOiVseEAlbHggZm9yIGRldmljZSAlc1xuIiwKKwlwcmludGsgKEtFUk5fV0FSTklORyAiUENJOiBVbmFibGUgdG8gcmVzZXJ2ZSAlcyByZWdpb24gIyVkOiVsbHhAJWxseCAiCisJCSJmb3IgZGV2aWNlICVzXG4iLAogCQlwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAogCQliYXIgKyAxLCAvKiBQQ0kgQkFSICMgKi8KLQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpLCBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhciksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhciksCiAJCXBjaV9uYW1lKHBkZXYpKTsKIAlyZXR1cm4gLUVCVVNZOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCAyOWJkZWNhLi45Y2M4NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtNiwxMCArNiwxMCBAQAogZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogZXh0ZXJuIHZvaWQgcGNpX2NsZWFudXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAotCQkJCSAgdW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGludCB0eXBlX21hc2ssCisJCQkJICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAorCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IG1pbiwgdW5zaWduZWQgaW50IHR5cGVfbWFzaywKIAkJCQkgIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCSAgCSB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSwKKwkJCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAogCQkJCSAgdm9pZCAqYWxpZ25mX2RhdGEpOwogLyogRmlybXdhcmUgY2FsbGJhY2tzICovCiBleHRlcm4gaW50ICgqcGxhdGZvcm1fcGNpX2Nob29zZV9zdGF0ZSkoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2MuYyBiL2RyaXZlcnMvcGNpL3Byb2MuYwppbmRleCA1NGIyZWJjLi45OWNmMzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9jLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYy5jCkBAIC0zMDIsMTIgKzMwMiw2IEBACiAjZW5kaWYgLyogSEFWRV9QQ0lfTU1BUCAqLwogfTsKIAotI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKLSNkZWZpbmUgTE9OR19GT1JNQVQgIlx0JTA4bHgiCi0jZWxzZQotI2RlZmluZSBMT05HX0ZPUk1BVCAiXHQlMTZseCIKLSNlbmRpZgotCiAvKiBpdGVyYXRvciAqLwogc3RhdGljIHZvaWQgKnBjaV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTM1NiwxOCArMzUwLDE4IEBACiAJCQlkZXYtPmlycSk7CiAJLyogSGVyZSBzaG91bGQgYmUgNyBhbmQgbm90IFBDSV9OVU1fUkVTT1VSQ0VTIGFzIHdlIG5lZWQgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSAqLwogCWZvciAoaT0wOyBpPDc7IGkrKykgewotCQl1NjQgc3RhcnQsIGVuZDsKKwkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7CiAJCXBjaV9yZXNvdXJjZV90b191c2VyKGRldiwgaSwgJmRldi0+cmVzb3VyY2VbaV0sICZzdGFydCwgJmVuZCk7Ci0JCXNlcV9wcmludGYobSwgTE9OR19GT1JNQVQsCi0JCQkoKHVuc2lnbmVkIGxvbmcpc3RhcnQpIHwKLQkJCShkZXYtPnJlc291cmNlW2ldLmZsYWdzICYgUENJX1JFR0lPTl9GTEFHX01BU0spKTsKKwkJc2VxX3ByaW50ZihtLCAiXHQlMTZsbHgiLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoc3RhcnQgfAorCQkJKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBQQ0lfUkVHSU9OX0ZMQUdfTUFTSykpKTsKIAl9CiAJZm9yIChpPTA7IGk8NzsgaSsrKSB7Ci0JCXU2NCBzdGFydCwgZW5kOworCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKIAkJcGNpX3Jlc291cmNlX3RvX3VzZXIoZGV2LCBpLCAmZGV2LT5yZXNvdXJjZVtpXSwgJnN0YXJ0LCAmZW5kKTsKLQkJc2VxX3ByaW50ZihtLCBMT05HX0ZPUk1BVCwKKwkJc2VxX3ByaW50ZihtLCAiXHQlMTZsbHgiLAogCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA8IGRldi0+cmVzb3VyY2VbaV0uZW5kID8KLQkJCSh1bnNpZ25lZCBsb25nKShlbmQgLSBzdGFydCkgKyAxIDogMCk7CisJCQkodW5zaWduZWQgbG9uZyBsb25nKShlbmQgLSBzdGFydCkgKyAxIDogMCk7CiAJfQogCXNlcV9wdXRjKG0sICdcdCcpOwogCWlmIChkcnYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDQzNjRkNzkuLmQxZDczMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgdXNlIHRoZSBQb3dlclR3ZWFrIHV0aWxpdHkgKHNlZSBodHRwOi8vcG93ZXJ0d2Vhay5zb3VyY2Vmb3JnZS5uZXQpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcm9tLmMgYi9kcml2ZXJzL3BjaS9yb20uYwppbmRleCA1OThhMTE1Li5mNWVlN2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yb20uYworKysgYi9kcml2ZXJzL3BjaS9yb20uYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBQQ0kgUk9NIGFjY2VzcyByb3V0aW5lcwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtODAsOCArNzksOCBAQAogCX0gZWxzZSB7CiAJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9ST01fQ09QWSkgewogCQkJKnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpOwotCQkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKLQkJCQkJCQkgICAgIFBDSV9ST01fUkVTT1VSQ0UpOworCQkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikodW5zaWduZWQgbG9uZykKKwkJCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgUENJX1JPTV9SRVNPVVJDRSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBhc3NpZ24gdGhlIFJPTSBhbiBhZGRyZXNzIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgKi8KIAkJCWlmIChyZXMtPnBhcmVudCA9PSBOVUxMICYmCkBAIC0xNzAsMTEgKzE2OSwxMSBAQAogCQlyZXR1cm4gcm9tOwogCiAJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgKnNpemU7Ci0JbWVtY3B5X2Zyb21pbygodm9pZCopcmVzLT5zdGFydCwgcm9tLCAqc2l6ZSk7CisJbWVtY3B5X2Zyb21pbygodm9pZCopKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwgcm9tLCAqc2l6ZSk7CiAJcGNpX3VubWFwX3JvbShwZGV2LCByb20pOwogCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9ST01fQ09QWTsKIAotCXJldHVybiAodm9pZCBfX2lvbWVtICopcmVzLT5zdGFydDsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQ7CiB9CiAKIC8qKgpAQCAtMjI3LDcgKzIyNiw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSAmcGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV07CiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9DT1BZKSB7Ci0JCWtmcmVlKCh2b2lkKilyZXMtPnN0YXJ0KTsKKwkJa2ZyZWUoKHZvaWQqKSh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQpOwogCQlyZXMtPmZsYWdzICY9IH5JT1JFU09VUkNFX1JPTV9DT1BZOwogCQlyZXMtPnN0YXJ0ID0gMDsKIAkJcmVzLT5lbmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCAzNTA4NmU4Li40N2MxMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMzU3LDggKzM1NywxMCBAQAogCQkJb3JkZXIgPSBfX2ZmcyhhbGlnbikgLSAyMDsKIAkJCWlmIChvcmRlciA+IDExKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiByZWdpb24gJXMvJWQgIgotCQkJCSAgICAgICAidG9vIGxhcmdlOiAlbHgtJWx4XG4iLAotCQkJCSAgICAgICBwY2lfbmFtZShkZXYpLCBpLCByLT5zdGFydCwgci0+ZW5kKTsKKwkJCQkgICAgICAgInRvbyBsYXJnZTogJWxseC0lbGx4XG4iLAorCQkJCQlwY2lfbmFtZShkZXYpLCBpLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPnN0YXJ0LAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCk7CiAJCQkJci0+ZmxhZ3MgPSAwOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCA1NzdmNGI1Li5hYjc4ZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtNDAsOCArNDAsOSBAQAogCiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoZGV2LCAmcmVnaW9uLCByZXMpOwogCi0JcHJfZGVidWcoIiAgZ290IHJlcyBbJWx4OiVseF0gYnVzIFslbHg6JWx4XSBmbGFncyAlbHggZm9yICIKLQkJICJCQVIgJWQgb2YgJXNcbiIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLAorCXByX2RlYnVnKCIgIGdvdCByZXMgWyVsbHg6JWxseF0gYnVzIFslbHg6JWx4XSBmbGFncyAlbHggZm9yICIKKwkJICJCQVIgJWQgb2YgJXNcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsCiAJCSByZWdpb24uc3RhcnQsIHJlZ2lvbi5lbmQsIHJlcy0+ZmxhZ3MsIHJlc25vLCBwY2lfbmFtZShkZXYpKTsKIAogCW5ldyA9IHJlZ2lvbi5zdGFydCB8IChyZXMtPmZsYWdzICYgUENJX1JFR0lPTl9GTEFHX01BU0spOwpAQCAtMTA0LDEwICsxMDUsMTIgQEAKIAkJZXJyID0gaW5zZXJ0X3Jlc291cmNlKHJvb3QsIHJlcyk7CiAKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUENJOiAlcyByZWdpb24gJWQgb2YgJXMgJXMgWyVseDolbHhdXG4iLAotCQkgICAgICAgcm9vdCA/ICJBZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiIgOgotCQkJICAgICAgIk5vIHBhcmVudCBmb3VuZCBmb3IiLAotCQkgICAgICAgcmVzb3VyY2UsIGR0eXBlLCBwY2lfbmFtZShkZXYpLCByZXMtPnN0YXJ0LCByZXMtPmVuZCk7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiAlcyByZWdpb24gJWQgb2YgJXMgJXMgWyVsbHg6JWxseF1cbiIsCisJCQlyb290ID8gIkFkZHJlc3Mgc3BhY2UgY29sbGlzaW9uIG9uIiA6CisJCQkJIk5vIHBhcmVudCBmb3VuZCBmb3IiLAorCQkJcmVzb3VyY2UsIGR0eXBlLCBwY2lfbmFtZShkZXYpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTExOCw3ICsxMjEsNyBAQAogewogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPmJ1czsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2UgKyByZXNubzsKLQl1bnNpZ25lZCBsb25nIHNpemUsIG1pbiwgYWxpZ247CisJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIG1pbiwgYWxpZ247CiAJaW50IHJldDsKIAogCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTQ1LDkgKzE0OCwxMSBAQAogCX0KIAogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEZhaWxlZCB0byBhbGxvY2F0ZSAlcyByZXNvdXJjZSAjJWQ6JWx4QCVseCBmb3IgJXNcbiIsCi0JCSAgICAgICByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCSAgICAgICByZXNubywgc2l6ZSwgcmVzLT5zdGFydCwgcGNpX25hbWUoZGV2KSk7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBGYWlsZWQgdG8gYWxsb2NhdGUgJXMgcmVzb3VyY2UgIgorCQkJIiMlZDolbGx4QCVsbHggZm9yICVzXG4iLAorCQkJcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAorCQkJcmVzbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwgcGNpX25hbWUoZGV2KSk7CiAJfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CiAJCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXMsIHJlc25vKTsKIAl9CkBAIC0yMDQsNyArMjA5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJCXN0cnVjdCByZXNvdXJjZV9saXN0ICpsaXN0LCAqdG1wOwotCQl1bnNpZ25lZCBsb25nIHJfYWxpZ247CisJCXJlc291cmNlX3NpemVfdCByX2FsaWduOwogCiAJCXIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAkJcl9hbGlnbiA9IHItPmVuZCAtIHItPnN0YXJ0OwpAQCAtMjEzLDEzICsyMTgsMTQgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXJfYWxpZ24pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogSWdub3JlIGJvZ3VzIHJlc291cmNlICVkICIKLQkJCQkJICAgICJbJWx4OiVseF0gb2YgJXNcbiIsCi0JCQkJCSAgICBpLCByLT5zdGFydCwgci0+ZW5kLCBwY2lfbmFtZShkZXYpKTsKKwkJCQkiWyVsbHg6JWxseF0gb2YgJXNcbiIsCisJCQkJaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5zdGFydCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCwgcGNpX25hbWUoZGV2KSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlyX2FsaWduID0gKGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgPyByX2FsaWduICsgMSA6IHItPnN0YXJ0OwogCQlmb3IgKGxpc3QgPSBoZWFkOyA7IGxpc3QgPSBsaXN0LT5uZXh0KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGFsaWduID0gMDsKKwkJCXJlc291cmNlX3NpemVfdCBhbGlnbiA9IDA7CiAJCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqbG4gPSBsaXN0LT5uZXh0OwogCQkJaW50IGlkeDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IGE0ZDUwOTQuLjQwNTY5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTIxNCwxMSArMjE0LDEwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IF9faW5pdCBhdDkxX2NmX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfY2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmOwotCXN0cnVjdCBhdDkxX2NmX2RhdGEJKmJvYXJkID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYXQ5MV9jZl9kYXRhCSpib2FyZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZQkJKmlvOwogCXVuc2lnbmVkIGludAkJY3NhOwogCWludAkJCXN0YXR1czsKQEAgLTIzNiw3ICsyMzUsNyBAQAogCiAJY2YtPmJvYXJkID0gYm9hcmQ7CiAJY2YtPnBkZXYgPSBwZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNmKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZik7CiAKIAkvKiBDRiB0YWtlcyBvdmVyIENTNCwgQ1M1LCBDUzYgKi8KIAljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfRUJJX0NTQSk7CkBAIC0yNjgsOSArMjY3LDEwIEBACiAKIAkvKiBtdXN0IGJlIGEgR1BJTzsgZXJnbyBtdXN0IHRyaWdnZXIgb24gYm90aCBlZGdlcyAqLwogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGJvYXJkLT5kZXRfcGluLCBhdDkxX2NmX2lycSwKLQkJCVNBX1NBTVBMRV9SQU5ET00sIGRyaXZlcl9uYW1lLCBjZik7CisJCQlJUlFGX1NBTVBMRV9SQU5ET00sIGRyaXZlcl9uYW1lLCBjZik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDA7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCiAJLyoKIAkgKiBUaGUgY2FyZCBkcml2ZXIgd2lsbCByZXF1ZXN0IHRoaXMgaXJxIGxhdGVyIGFzIG5lZWRlZC4KQEAgLTI4MCw3ICsyODAsNyBAQAogCSAqLwogCWlmIChib2FyZC0+aXJxX3BpbikgewogCQlzdGF0dXMgPSByZXF1ZXN0X2lycShib2FyZC0+aXJxX3BpbiwgYXQ5MV9jZl9pcnEsCi0JCQkJU0FfU0hJUlEsIGRyaXZlcl9uYW1lLCBjZik7CisJCQkJSVJRRl9TSEFSRUQsIGRyaXZlcl9uYW1lLCBjZik7CiAJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBmYWlsMGE7CiAJCWNmLT5zb2NrZXQucGNpX2lycSA9IGJvYXJkLT5pcnFfcGluOwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCWJvYXJkLT5kZXRfcGluLCBib2FyZC0+aXJxX3Bpbik7CiAKIAljZi0+c29ja2V0Lm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY2YtPnNvY2tldC5kZXYuZGV2ID0gZGV2OworCWNmLT5zb2NrZXQuZGV2LmRldiA9ICZwZGV2LT5kZXY7CiAJY2YtPnNvY2tldC5vcHMgPSAmYXQ5MV9jZl9vcHM7CiAJY2YtPnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CiAJY2YtPnNvY2tldC5mZWF0dXJlcyA9IFNTX0NBUF9QQ0NBUkQgfCBTU19DQVBfU1RBVElDX01BUApAQCAtMzIzLDIxICszMjMsMjUgQEAKIAkJZnJlZV9pcnEoYm9hcmQtPmlycV9waW4sIGNmKTsKIGZhaWwwYToKIAlmcmVlX2lycShib2FyZC0+ZGV0X3BpbiwgY2YpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIGZhaWwwOgogCWF0OTFfc3lzX3dyaXRlKEFUOTFfRUJJX0NTQSwgY3NhKTsKIAlrZnJlZShjZik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgYXQ5MV9jZl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgYXQ5MV9jZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF0OTFfY2Zfc29ja2V0CSpjZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdDkxX2NmX2RhdGEJKmJvYXJkID0gY2YtPmJvYXJkOwogCXN0cnVjdCByZXNvdXJjZQkJKmlvID0gY2YtPnNvY2tldC5pb1swXS5yZXM7CiAJdW5zaWduZWQgaW50CQljc2E7CiAKIAlwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoJmNmLT5zb2NrZXQpOwotCWZyZWVfaXJxKGNmLT5ib2FyZC0+aXJxX3BpbiwgY2YpOwotCWZyZWVfaXJxKGNmLT5ib2FyZC0+ZGV0X3BpbiwgY2YpOworCWlmIChib2FyZC0+aXJxX3BpbikKKwkJZnJlZV9pcnEoYm9hcmQtPmlycV9waW4sIGNmKTsKKwlmcmVlX2lycShib2FyZC0+ZGV0X3BpbiwgY2YpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIAlpb3VubWFwKCh2b2lkIF9faW9tZW0gKikgY2YtPnNvY2tldC5pb19vZmZzZXQpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihpby0+c3RhcnQsIGlvLT5lbmQgKyAxIC0gaW8tPnN0YXJ0KTsKIApAQCAtMzQ4LDI2ICszNTIsNjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF0OTFfY2ZfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgaW50IGF0OTFfY2Zfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0OTFfY2ZfZGF0YQkqYm9hcmQgPSBjZi0+Ym9hcmQ7CisKKwlwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIG1lc2cpOworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGJvYXJkLT5kZXRfcGluKTsKKwllbHNlIHsKKwkJZGlzYWJsZV9pcnFfd2FrZShib2FyZC0+ZGV0X3Bpbik7CisJCWRpc2FibGVfaXJxKGJvYXJkLT5kZXRfcGluKTsKKwl9CisJaWYgKGJvYXJkLT5pcnFfcGluKQorCQlkaXNhYmxlX2lycShib2FyZC0+aXJxX3Bpbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9jZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0OTFfY2ZfZGF0YQkqYm9hcmQgPSBjZi0+Ym9hcmQ7CisKKwlpZiAoYm9hcmQtPmlycV9waW4pCisJCWVuYWJsZV9pcnEoYm9hcmQtPmlycV9waW4pOworCWlmICghZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCWVuYWJsZV9pcnEoYm9hcmQtPmRldF9waW4pOworCXBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUJYXQ5MV9jZl9zdXNwZW5kCQlOVUxMCisjZGVmaW5lCWF0OTFfY2ZfcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9jZl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBhdDkxX2NmX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3AoYXQ5MV9jZl9yZW1vdmUpLAotCS5zdXNwZW5kCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkuc3VzcGVuZAk9IGF0OTFfY2Zfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0OTFfY2ZfcmVzdW1lLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IGF0OTFfY2ZfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmF0OTFfY2ZfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdDkxX2NmX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChhdDkxX2NmX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXQ5MV9jZl9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF0OTFfY2ZfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXQ5MV9jZl9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoYXQ5MV9jZl9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCmluZGV4IGFiYzEzZjIuLjc0ZTA1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKQEAgLTMwLDcgKzMwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0yOTYsNyArMjk1LDcgQEAKIAkuc29ja2V0X3N1c3BlbmQJCT0gZGIxeDAwX3NvY2tldF9zdXNwZW5kCiB9OwogCi1pbnQgX19pbml0IGF1MXhfYm9hcmRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxeF9ib2FyZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAliY3NyLT5wY21jaWEgPSAwOyAvKiB0dXJuIG9mZiBwb3dlciwgaWYgaXQncyBub3QgYWxyZWFkeSBvZmYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IDk3MWEzNTIuLmQ1ZGQwY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmggYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCmluZGV4IGYyYzk3MGIuLjFlNDY3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaApAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBfX0FTTV9BVTEwMDBfUENNQ0lBX0gKIAogLyogaW5jbHVkZSB0aGUgd29ybGQgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCmluZGV4IGZkNTUyMmUuLjg2YzA4MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggMzE2Mjk5OC4uZjljZDgzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTc2LDYgKzE3Nyw3IEBACiAgKi8KIGludCBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJaW50IHJldDsKIAogCWlmICghc29ja2V0IHx8ICFzb2NrZXQtPm9wcyB8fCAhc29ja2V0LT5kZXYuZGV2IHx8ICFzb2NrZXQtPnJlc291cmNlX29wcykKQEAgLTIzOSwxNSArMjQxLDE4IEBACiAJbXV0ZXhfaW5pdCgmc29ja2V0LT5za3RfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzb2NrZXQtPnRocmVhZF9sb2NrKTsKIAotCXJldCA9IGtlcm5lbF90aHJlYWQocGNjYXJkZCwgc29ja2V0LCBDTE9ORV9LRVJORUwpOwotCWlmIChyZXQgPCAwKQorCXRzayA9IGt0aHJlYWRfcnVuKHBjY2FyZGQsIHNvY2tldCwgInBjY2FyZGQiKTsKKwlpZiAoSVNfRVJSKHRzaykpIHsKKwkJcmV0ID0gUFRSX0VSUih0c2spOwogCQlnb3RvIGVycjsKKwl9CiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzb2NrZXQtPnRocmVhZF9kb25lKTsKLQlpZighc29ja2V0LT50aHJlYWQpIHsKKwlpZiAoIXNvY2tldC0+dGhyZWFkKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDTUNJQTogd2FybmluZzogc29ja2V0IHRocmVhZCBmb3Igc29ja2V0ICVwIGRpZCBub3Qgc3RhcnRcbiIsIHNvY2tldCk7CiAJCXJldHVybiAtRUlPOwogCX0KKwogCXBjbWNpYV9wYXJzZV9ldmVudHMoc29ja2V0LCBTU19ERVRFQ1QpOwogCiAJcmV0dXJuIDA7CkBAIC0yNzIsMTAgKzI3Nyw4IEBACiAJY3NfZGJnKHNvY2tldCwgMCwgInBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgweCVwKVxuIiwgc29ja2V0LT5vcHMpOwogCiAJaWYgKHNvY2tldC0+dGhyZWFkKSB7Ci0JCWluaXRfY29tcGxldGlvbigmc29ja2V0LT50aHJlYWRfZG9uZSk7Ci0JCXNvY2tldC0+dGhyZWFkID0gTlVMTDsKIAkJd2FrZV91cCgmc29ja2V0LT50aHJlYWRfd2FpdCk7Ci0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNvY2tldC0+dGhyZWFkX2RvbmUpOworCQlrdGhyZWFkX3N0b3Aoc29ja2V0LT50aHJlYWQpOwogCX0KIAlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKIApAQCAtNjMwLDggKzYzMyw2IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJaW50IHJldDsKIAotCWRhZW1vbml6ZSgicGNjYXJkZCIpOwotCiAJc2t0LT50aHJlYWQgPSBjdXJyZW50OwogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKQEAgLTY0Myw3ICs2NDQsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ01DSUE6IHVuYWJsZSB0byByZWdpc3RlciBzb2NrZXQgMHglcFxuIiwKIAkJCXNrdCk7CiAJCXNrdC0+dGhyZWFkID0gTlVMTDsKLQkJY29tcGxldGVfYW5kX2V4aXQoJnNrdC0+dGhyZWFkX2RvbmUsIDApOworCQljb21wbGV0ZSgmc2t0LT50aHJlYWRfZG9uZSk7CisJCXJldHVybiAwOwogCX0KIAogCWFkZF93YWl0X3F1ZXVlKCZza3QtPnRocmVhZF93YWl0LCAmd2FpdCk7CkBAIC02NzQsNyArNjc2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFza3QtPnRocmVhZCkKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCiAJCXNjaGVkdWxlKCk7CkBAIC02ODgsNyArNjkwLDcgQEAKIAkvKiByZW1vdmUgZnJvbSB0aGUgZGV2aWNlIGNvcmUgKi8KIAljbGFzc19kZXZpY2VfdW5yZWdpc3Rlcigmc2t0LT5kZXYpOwogCi0JY29tcGxldGVfYW5kX2V4aXQoJnNrdC0+dGhyZWFkX2RvbmUsIDApOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNjk3LDExICs2OTksMTIgQEAKICAqLwogdm9pZCBwY21jaWFfcGFyc2VfZXZlbnRzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2ludCBldmVudHMpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljc19kYmcocywgNCwgInBhcnNlX2V2ZW50czogZXZlbnRzICUwOHhcbiIsIGV2ZW50cyk7CiAJaWYgKHMtPnRocmVhZCkgewotCQlzcGluX2xvY2soJnMtPnRocmVhZF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnRocmVhZF9sb2NrLCBmbGFncyk7CiAJCXMtPnRocmVhZF9ldmVudHMgfD0gZXZlbnRzOwotCQlzcGluX3VubG9jaygmcy0+dGhyZWFkX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT50aHJlYWRfbG9jaywgZmxhZ3MpOwogCiAJCXdha2VfdXAoJnMtPnRocmVhZF93YWl0KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMgYi9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMKaW5kZXggYjM5NDM1Yi4uYWQwMjYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYwpAQCAtMjQ0LDggKzI0NCw4IEBACiAKICAgICAJaHNfbWFwcGVkX2lycVtpcnFdLnNvY2sgPSBzcDsKIAkvKiBpbnNlcnQgb3Vyc2VsdmVzIGFzIHRoZSBpcnEgY29udHJvbGxlciAqLwotCWhzX21hcHBlZF9pcnFbaXJxXS5vbGRfaGFuZGxlciA9IGlycV9kZXNjW2lycV0uaGFuZGxlcjsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmaGQ2NDQ2NV9zc19pcnFfdHlwZTsKKwloc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXIgPSBpcnFfZGVzY1tpcnFdLmNoaXA7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJmhkNjQ0NjVfc3NfaXJxX3R5cGU7CiB9CiAKIApAQCAtMjYwLDcgKzI2MCw3IEBACiAJICAgIHJldHVybjsKIAkJCiAJLyogcmVzdG9yZSB0aGUgb3JpZ2luYWwgaXJxIGNvbnRyb2xsZXIgKi8KLQlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSBoc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXI7CisJaXJxX2Rlc2NbaXJxXS5jaGlwID0gaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC03NjEsNyArNzYxLDcgQEAKIAkKIAloZDY0NDY1X3JlZ2lzdGVyX2lycV9kZW11eChzcC0+aXJxLCBoc19pcnFfZGVtdXgsIHNwKTsKIAkKLSAgICAJaWYgKChlcnIgPSByZXF1ZXN0X2lycShzcC0+aXJxLCBoc19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgTU9ETkFNRSwgc3ApKSA8IDApCisgICAgCWlmICgoZXJyID0gcmVxdWVzdF9pcnEoc3AtPmlycSwgaHNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBNT0ROQU1FLCBzcCkpIDwgMCkKIAkgICAgcmV0dXJuIGVycjsKICAgICAJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihzcC0+bWVtX2Jhc2UsIHNwLT5tZW1fbGVuZ3RoLCBNT0ROQU1FKSA9PSAwKSB7CiAgICAgCSAgICBzcC0+bWVtX2Jhc2UgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMgYi9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYwppbmRleCBkNWYwM2EzLi4yMTYzYWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIAkvKiBSZWdpc3RlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlkcHJpbnRrKEtFUk5fREVCVUcgIlJlcXVlc3RpbmcgaW50ZXJydXB0ICVpIFxuIixkZXYtPmlycSk7Ci0JaWYgKChyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgaTgyMDkyYWFfaW50ZXJydXB0LCBTQV9TSElSUSwgImk4MjA5MmFhIiwgaTgyMDkyYWFfaW50ZXJydXB0KSkpIHsKKwlpZiAoKHJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBpODIwOTJhYV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiaTgyMDkyYWEiLCBpODIwOTJhYV9pbnRlcnJ1cHQpKSkgewogCQlwcmludGsoS0VSTl9FUlIgImk4MjA5MmFhOiBGYWlsZWQgdG8gcmVnaXN0ZXIgSVJRICVkLCBhYm9ydGluZ1xuIiwgZGV2LT5pcnEpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCBhMmYwNWY0Li4xY2MyNjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtNTA5LDcgKzUwOSw3IEBACiBzdGF0aWMgdV9pbnQgX19pbml0IHRlc3RfaXJxKHVfc2hvcnQgc29jaywgaW50IGlycSkKIHsKICAgICBkZWJ1ZygyLCAiICB0ZXN0aW5nIElTQSBpcnEgJWRcbiIsIGlycSk7Ci0gICAgaWYgKHJlcXVlc3RfaXJxKGlycSwgaTM2NV9jb3VudF9pcnEsIFNBX1BST0JFSVJRLCAic2NhbiIsCisgICAgaWYgKHJlcXVlc3RfaXJxKGlycSwgaTM2NV9jb3VudF9pcnEsIElSUUZfUFJPQkVfU0hBUkVELCAic2NhbiIsCiAJCQlpMzY1X2NvdW50X2lycSkgIT0gMCkKIAlyZXR1cm4gMTsKICAgICBpcnFfaGl0cyA9IDA7IGlycV9zb2NrID0gc29jazsKQEAgLTU2Miw3ICs1NjIsNyBAQAogICAgIH0gZWxzZSB7CiAJLyogRmFsbGJhY2s6IGp1c3QgZmluZCBpbnRlcnJ1cHRzIHRoYXQgYXJlbid0IGluIHVzZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCSAgICBpZiAoKG1hc2swICYgKDEgPDwgaSkpICYmIChfY2hlY2tfaXJxKGksIFNBX1BST0JFSVJRKSA9PSAwKSkKKwkgICAgaWYgKChtYXNrMCAmICgxIDw8IGkpKSAmJiAoX2NoZWNrX2lycShpLCBJUlFGX1BST0JFX1NIQVJFRCkgPT0gMCkpCiAJCW1hc2sxIHw9ICgxIDw8IGkpOwogCXByaW50aygiZGVmYXVsdCIpOwogCS8qIElmIHNjYW4gZmFpbGVkLCBkZWZhdWx0IHRvIHBvbGxlZCBzdGF0dXMgKi8KQEAgLTcyNiw3ICs3MjYsNyBAQAogCXVfaW50IGNzX21hc2sgPSBtYXNrICYgKChjc19pcnEpID8gKDE8PGNzX2lycSkgOiB+KDE8PDEyKSk7CiAJZm9yIChjc19pcnEgPSAxNTsgY3NfaXJxID4gMDsgY3NfaXJxLS0pCiAJICAgIGlmICgoY3NfbWFzayAmICgxIDw8IGNzX2lycSkpICYmCi0JCShfY2hlY2tfaXJxKGNzX2lycSwgU0FfUFJPQkVJUlEpID09IDApKQorCQkoX2NoZWNrX2lycShjc19pcnEsIElSUUZfUFJPQkVfU0hBUkVEKSA9PSAwKSkKIAkJYnJlYWs7CiAJaWYgKGNzX2lycSkgewogCSAgICBncmFiX2lycSA9IDE7CkBAIC0xMDg0LDkgKzEwODQsMTAgQEAKICAgICB1X3Nob3J0IGJhc2UsIGk7CiAgICAgdV9jaGFyIG1hcDsKICAgICAKLSAgICBkZWJ1ZygxLCAiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgJSNseC0lI2x4LCAiCisgICAgZGVidWcoMSwgIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICUjbGx4LSUjbGx4LCAiCiAJICAiJSN4KVxuIiwgc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsIG1lbS0+c3BlZWQsCi0JICBtZW0tPnJlcy0+c3RhcnQsIG1lbS0+cmVzLT5lbmQsIG1lbS0+Y2FyZF9zdGFydCk7CisJICAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+cmVzLT5zdGFydCwKKwkgICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5yZXMtPmVuZCwgbWVtLT5jYXJkX3N0YXJ0KTsKIAogICAgIG1hcCA9IG1lbS0+bWFwOwogICAgIGlmICgobWFwID4gNCkgfHwgKG1lbS0+Y2FyZF9zdGFydCA+IDB4M2ZmZmZmZikgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCmluZGV4IDA3MWNmNDguLjllNzY4ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDcwZDVmMDcuLjYxZDUwYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwppbmRleCAyYzIzZDc1Li40MjBlMTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBjZik7CiAKIAkvKiB0aGlzIHByaW1hcmlseSBqdXN0IHNodXRzIHVwIGlycSBoYW5kbGluZyBub2lzZSAqLwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgb21hcF9jZl9pcnEsIFNBX1NISVJRLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgb21hcF9jZl9pcnEsIElSUUZfU0hBUkVELAogCQkJZHJpdmVyX25hbWUsIGNmKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggMzEzMWJiMC4uN2JmMjViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTc4OCw2ICs3ODgsNyBAQAogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAljb25maWdfdCAqYzsKIAlpbnQgcmV0ID0gQ1NfSU5fVVNFLCBpcnEgPSAwOworCWludCB0eXBlOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiBDU19OT19DQVJEOwpAQCAtNzk3LDYgKzc5OCwxMyBAQAogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JUlFfUkVRKQogCQlyZXR1cm4gQ1NfSU5fVVNFOwogCisJLyogRGVjaWRlIHdoYXQgdHlwZSBvZiBpbnRlcnJ1cHQgd2UgYXJlIHJlZ2lzdGVyaW5nICovCisJdHlwZSA9IDA7CisJaWYgKHMtPmZ1bmN0aW9ucyA+IDEpCQkvKiBBbGwgb2YgdGhpcyBvdWdodCB0byBiZSBoYW5kbGVkIGhpZ2hlciB1cCAqLworCQl0eXBlID0gSVJRRl9TSEFSRUQ7CisJaWYgKHJlcS0+QXR0cmlidXRlcyAmIElSUV9UWVBFX0RZTkFNSUNfU0hBUklORykKKwkJdHlwZSA9IElSUUZfU0hBUkVEOworCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQogCWlmIChzLT5pcnEuQXNzaWduZWRJUlEgIT0gMCkgewogCQkvKiBJZiB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkgYXNzaWduZWQsIGl0IG11c3QgYmUgdGhlIHNhbWUgKi8KQEAgLTgyMiw5ICs4MzAsNyBAQAogCQkJICogbWFya2VkIGFzIHVzZWQgYnkgdGhlIGtlcm5lbCByZXNvdXJjZSBtYW5hZ2VtZW50IGNvcmUgKi8KIAkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwKIAkJCQkJICAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSA/IHJlcS0+SGFuZGxlciA6IHRlc3RfYWN0aW9uLAotCQkJCQkgICgocmVxLT5BdHRyaWJ1dGVzICYgSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HKSB8fAotCQkJCQkgICAocy0+ZnVuY3Rpb25zID4gMSkgfHwKLQkJCQkJICAgKGlycSA9PSBzLT5wY2lfaXJxKSkgPyBTQV9TSElSUSA6IDAsCisJCQkJCSAgdHlwZSwKIAkJCQkJICBwX2Rldi0+ZGV2bmFtZSwKIAkJCQkJICAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSA/IHJlcS0+SW5zdGFuY2UgOiBkYXRhKTsKIAkJCWlmICghcmV0KSB7CkBAIC04MzksMTggKzg0NSwyMSBAQAogCWlmIChyZXQgJiYgIXMtPmlycS5Bc3NpZ25lZElSUSkgewogCQlpZiAoIXMtPnBjaV9pcnEpCiAJCQlyZXR1cm4gcmV0OworCQl0eXBlID0gSVJRRl9TSEFSRUQ7CiAJCWlycSA9IHMtPnBjaV9pcnE7CiAJfQogCi0JaWYgKHJldCAmJiByZXEtPkF0dHJpYnV0ZXMgJiBJUlFfSEFORExFX1BSRVNFTlQpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGlycSwgcmVxLT5IYW5kbGVyLAotCQkJCSgocmVxLT5BdHRyaWJ1dGVzICYgSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HKSB8fAotCQkJCSAocy0+ZnVuY3Rpb25zID4gMSkgfHwKLQkJCQkgKGlycSA9PSBzLT5wY2lfaXJxKSkgPyBTQV9TSElSUSA6IDAsCi0JCQkJcF9kZXYtPmRldm5hbWUsIHJlcS0+SW5zdGFuY2UpKQorCWlmIChyZXQgJiYgKHJlcS0+QXR0cmlidXRlcyAmIElSUV9IQU5ETEVfUFJFU0VOVCkpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKGlycSwgcmVxLT5IYW5kbGVyLCB0eXBlLCAgcF9kZXYtPmRldm5hbWUsIHJlcS0+SW5zdGFuY2UpKQogCQkJcmV0dXJuIENTX0lOX1VTRTsKIAl9CiAKKwkvKiBNYWtlIHN1cmUgdGhlIGZhY3QgdGhlIHJlcXVlc3QgdHlwZSB3YXMgb3ZlcnJpZGRlbiBpcyBwYXNzZWQgYmFjayAqLworCWlmICh0eXBlID09IElSUUZfU0hBUkVEICYmICEocmVxLT5BdHRyaWJ1dGVzICYgSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HKSkgeworCQlyZXEtPkF0dHJpYnV0ZXMgfD0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY21jaWE6IHJlcXVlc3QgZm9yIGV4Y2x1c2l2ZSBJUlEgY291bGQgbm90IGJlIGZ1bGZpbGxlZC5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY21jaWE6IHRoZSBkcml2ZXIgbmVlZHMgdXBkYXRpbmcgdG8gc3VwcG9ydGVkIHNoYXJlZCBJUlEgbGluZXMuXG4iKTsKKwl9CiAJYy0+aXJxLkF0dHJpYnV0ZXMgPSByZXEtPkF0dHJpYnV0ZXM7CiAJcy0+aXJxLkFzc2lnbmVkSVJRID0gcmVxLT5Bc3NpZ25lZElSUSA9IGlycTsKIAlzLT5pcnEuQ29uZmlnKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCmluZGV4IDI0N2FiODMuLjIyYzVlNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCkBAIC02NDIsNyArNjQyLDggQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAicGQ2NzI5OiBDaXJydXMgUEQ2NzI5IFBDSSB0byBQQ01DSUEgQnJpZGdlICIKLQkJImF0IDB4JWx4IG9uIGlycSAlZFxuIiwJcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksIGRldi0+aXJxKTsKKwkJImF0IDB4JWxseCBvbiBpcnEgJWRcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksIGRldi0+aXJxKTsKICAJLyoKIAkgKiBTaW5jZSB3ZSBoYXZlIG5vIG1lbW9yeSBCQVJzIHNvbWUgZmlybXdhcmUgbWF5IG5vdAogCSAqIGhhdmUgaGFkIFBDSV9DT01NQU5EX01FTU9SWSBlbmFibGVkLCB5ZXQgdGhlIGRldmljZSBuZWVkcyBpdC4KQEAgLTY4OCw3ICs2ODksNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIHNvY2tldCk7CiAJaWYgKGlycV9tb2RlID09IDEpIHsKIAkJLyogUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyICovCi0JCWlmICgocmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHBkNjcyOV9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCQlpZiAoKHJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBwZDY3MjlfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkJCQkicGQ2NzI5Iiwgc29ja2V0KSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAicGQ2NzI5OiBGYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkLCAiCiAJCQkJCQkJImFib3J0aW5nXG4iLCBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCA3ZmExOGZiLi5iMzUxODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCAwZjhiMTU3Li5jMzE3NmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTcyLDcgKzcyLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlICoKLW1ha2VfcmVzb3VyY2UodW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIG4sIGludCBmbGFncywgY2hhciAqbmFtZSkKK21ha2VfcmVzb3VyY2UocmVzb3VyY2Vfc2l6ZV90IGIsIHJlc291cmNlX3NpemVfdCBuLCBpbnQgZmxhZ3MsIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBremFsbG9jKHNpemVvZigqcmVzKSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTg2LDggKzg2LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqCi1jbGFpbV9yZWdpb24oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAotCSAgICAgaW50IHR5cGUsIGNoYXIgKm5hbWUpCitjbGFpbV9yZWdpb24oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHJlc291cmNlX3NpemVfdCBiYXNlLAorCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgaW50IHR5cGUsIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMsICpwYXJlbnQ7CiAKQEAgLTUxOSwxMCArNTE5LDEwIEBACiAKIHN0YXRpYyB2b2lkCiBwY21jaWFfY29tbW9uX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduKQorCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OwogCS8qCiAJICogRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCBzdGFydCBhZGRyZXNzCiAJICovCkBAIC01MzMsOCArNTMzLDggQEAKIH0KIAogc3RhdGljIHZvaWQKLXBjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3BjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisJCXJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2FsaWduX2RhdGEgKmRhdGEgPSBhbGlnbl9kYXRhOwogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm07CkBAIC04MDgsOCArODA4LDEwIEBACiAJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQkJaWYgKHJlcyA9PSAmaW9wb3J0X3Jlc291cmNlKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBwYXJlbnQgUENJIGJyaWRnZSBJL08gd2luZG93OiAweCVseCAtIDB4JWx4XG4iLAotCQkJICAgICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogcGFyZW50IFBDSSBicmlkZ2UgSS9PICIKKwkJCQkid2luZG93OiAweCVsbHggLSAweCVsbHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCQkJaWYgKCFhZGp1c3RfaW8ocywgQUREX01BTkFHRURfUkVTT1VSQ0UsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKSkKIAkJCQlkb25lIHw9IElPUkVTT1VSQ0VfSU87CiAKQEAgLTgxOCw4ICs4MjAsMTAgQEAKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgewogCQkJaWYgKHJlcyA9PSAmaW9tZW1fcmVzb3VyY2UpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IHBhcmVudCBQQ0kgYnJpZGdlIE1lbW9yeSB3aW5kb3c6IDB4JWx4IC0gMHglbHhcbiIsCi0JCQkgICAgICAgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBwYXJlbnQgUENJIGJyaWRnZSBNZW1vcnkgIgorCQkJCSJ3aW5kb3c6IDB4JWxseCAtIDB4JWxseFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CiAJCQlpZiAoIWFkanVzdF9tZW1vcnkocywgQUREX01BTkFHRURfUkVTT1VSQ0UsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKSkKIAkJCQlkb25lIHw9IElPUkVTT1VSQ0VfTUVNOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCA2ZDQ0MWVjLi5jNWIyYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKaW5kZXggODFkZWQ1Mi4uNjU4Y2RkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCkBAIC01LDcgKzUsNiBAQAogICogYmFzaWNhbGx5IG1lYW5zIHdlIGhhbmRsZSBldmVyeXRoaW5nIGV4Y2VwdCBjb250cm9sbGluZyB0aGUKICAqIHBvd2VyLiAgUG93ZXIgaXMgbWFjaGluZSBzcGVjaWZpYy4uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYwppbmRleCA1OWM1ZDk2Li4zMWE3YWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKaW5kZXggZWE3ZDljYS4uZWNhYTEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwpAQCAtMzEsNyArMzEsNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzksMTIgKzM4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKQEAgLTUyNCw3ICs1MjMsNyBAQAogCQlpZiAoaXJxc1tpXS5zb2NrICE9IHNrdC0+bnIpCiAJCQljb250aW51ZTsKIAkJcmVzID0gcmVxdWVzdF9pcnEoaXJxc1tpXS5pcnEsIHNvY19jb21tb25fcGNtY2lhX2ludGVycnVwdCwKLQkJCQkgIFNBX0lOVEVSUlVQVCwgaXJxc1tpXS5zdHIsIHNrdCk7CisJCQkJICBJUlFGX0RJU0FCTEVELCBpcnFzW2ldLnN0ciwgc2t0KTsKIAkJaWYgKHJlcykKIAkJCWJyZWFrOwogCQlzZXRfaXJxX3R5cGUoaXJxc1tpXS5pcnEsIElSUVRfTk9FREdFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCA3M2JhZDFkLi42NWE2MDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC03NTYsOCArNzU2LDkgQEAKICAgICB1X2xvbmcgYmFzZSwgbGVuLCBtbWFwOwogCiAgICAgZGVidWcoMSwgIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI2x4LSUjbHgsICUjeClcbiIsIHBzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKLQkgIG1lbS0+c3BlZWQsIG1lbS0+cmVzLT5zdGFydCwgbWVtLT5yZXMtPmVuZCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkgICIlI2xseC0lI2xseCwgJSN4KVxuIiwgcHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAorCSAgbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnJlcy0+c3RhcnQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+cmVzLT5lbmQsIG1lbS0+Y2FyZF9zdGFydCk7CiAgICAgaWYgKChtZW0tPm1hcCA+IDMpIHx8IChtZW0tPmNhcmRfc3RhcnQgPiAweDNmZmZmZmYpIHx8CiAJKG1lbS0+cmVzLT5zdGFydCA+IDB4ZmZmZmZmKSB8fCAobWVtLT5yZXMtPmVuZCA+IDB4ZmZmZmZmKSB8fAogCShtZW0tPnJlcy0+c3RhcnQgPiBtZW0tPnJlcy0+ZW5kKSB8fCAobWVtLT5zcGVlZCA+IDEwMDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGkxMTN4LmggYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaAppbmRleCA3YTNkMWI4Li42MmU5ZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaAorKysgYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaApAQCAtNjQ3LDYgKzY0Nyw3IEBACiAJCSAqLwogCQlicmVhazsKIAorCWNhc2UgUENJX0RFVklDRV9JRF9USV9YWDEyOgogCWNhc2UgUENJX0RFVklDRV9JRF9USV9YNTE1OgogCWNhc2UgUENJX0RFVklDRV9JRF9USV9YNDIwOgogCWNhc2UgUENJX0RFVklDRV9JRF9USV9YNjIwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYwppbmRleCA0NTllNmUxLi5lMDc2YTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYworKysgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYwpAQCAtNzMwLDcgKzczMCw3IEBACiAKIAlyZXR2YWwgPSB2cmM0MTcxX2FkZF9zb2NrZXRzKCk7CiAJaWYgKHJldHZhbCA9PSAwKQotCQlyZXR2YWwgPSByZXF1ZXN0X2lycSh2cmM0MTcxX2lycSwgcGNjYXJkX2ludGVycnVwdCwgU0FfU0hJUlEsCisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKHZyYzQxNzFfaXJxLCBwY2NhcmRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJICAgICAgICAgICAgICAgICAgICAgdnJjNDE3MV9jYXJkX25hbWUsIHZyYzQxNzFfc29ja2V0cyk7CiAKIAlpZiAocmV0dmFsIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdnJjNDE3M19jYXJkdS5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3M19jYXJkdS5jCmluZGV4IDYwMDQxOTYuLmQxOWE5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzNfY2FyZHUuYworKysgYi9kcml2ZXJzL3BjbWNpYS92cmM0MTczX2NhcmR1LmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGNhcmR1X2ludGVycnVwdCwgU0FfU0hJUlEsIHNvY2tldC0+bmFtZSwgc29ja2V0KSA8IDApIHsKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGNhcmR1X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIHNvY2tldC0+bmFtZSwgc29ja2V0KSA8IDApIHsKIAkJcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KHNvY2tldC0+cGNtY2lhX3NvY2tldCk7CiAJCXNvY2tldC0+cGNtY2lhX3NvY2tldCA9IE5VTEw7CiAJCWlvdW5tYXAoc29ja2V0LT5iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggNDE0NWViOC4uMTM0NDc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTI4Nyw3ICsyODcsMTAgQEAKIAlzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQgPSBjb250YWluZXJfb2Yoc29jaywgc3RydWN0IHllbnRhX3NvY2tldCwgc29ja2V0KTsKIAl1MTYgYnJpZGdlOwogCi0JeWVudGFfc2V0X3Bvd2VyKHNvY2tldCwgc3RhdGUpOworCS8qIGlmIHBvd2VyaW5nIGRvd246IGRvIGl0IGltbWVkaWF0ZWx5ICovCisJaWYgKHN0YXRlLT5WY2MgPT0gMCkKKwkJeWVudGFfc2V0X3Bvd2VyKHNvY2tldCwgc3RhdGUpOworCiAJc29ja2V0LT5pb19pcnEgPSBzdGF0ZS0+aW9faXJxOwogCWJyaWRnZSA9IGNvbmZpZ19yZWFkdyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MKSAmIH4oQ0JfQlJJREdFX0NSU1QgfCBDQl9CUklER0VfSU5UUik7CiAJaWYgKGNiX3JlYWRsKHNvY2tldCwgQ0JfU09DS0VUX1NUQVRFKSAmIENCX0NCQ0FSRCkgewpAQCAtMzM5LDYgKzM0MiwxMCBAQAogCS8qIFNvY2tldCBldmVudCBtYXNrOiBnZXQgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cy4uICovCiAJY2Jfd3JpdGVsKHNvY2tldCwgQ0JfU09DS0VUX0VWRU5ULCAtMSk7CiAJY2Jfd3JpdGVsKHNvY2tldCwgQ0JfU09DS0VUX01BU0ssIENCX0NETUFTSyk7CisKKwkvKiBpZiBwb3dlcmluZyB1cDogZG8gaXQgYXMgdGhlIGxhc3Qgc3RlcCB3aGVuIHRoZSBzb2NrZXQgaXMgY29uZmlndXJlZCAqLworCWlmIChzdGF0ZS0+VmNjICE9IDApCisJCXllbnRhX3NldF9wb3dlcihzb2NrZXQsIHN0YXRlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE2LDcgKzkyMyw3IEBACiAKIAlzb2NrZXQtPnByb2JlX3N0YXR1cyA9IDA7CiAKLQlpZiAocmVxdWVzdF9pcnEoc29ja2V0LT5jYl9pcnEsIHllbnRhX3Byb2JlX2hhbmRsZXIsIFNBX1NISVJRLCAieWVudGEiLCBzb2NrZXQpKSB7CisJaWYgKHJlcXVlc3RfaXJxKHNvY2tldC0+Y2JfaXJxLCB5ZW50YV9wcm9iZV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgInllbnRhIiwgc29ja2V0KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJZZW50YTogcmVxdWVzdF9pcnEoKSBpbiB5ZW50YV9wcm9iZV9jYl9pcnEoKSBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTk5OCw2ICsxMDA1LDc3IEBACiAJY29uZmlnX3dyaXRldyhzb2NrZXQsIENCX0JSSURHRV9DT05UUk9MLCBicmlkZ2UpOwogfQogCisvKioKKyAqIHllbnRhX2ZpeHVwX3BhcmVudF9icmlkZ2UgLSBGaXggc3Vib3JkaW5hdGUgYnVzIyBvZiB0aGUgcGFyZW50IGJyaWRnZQorICogQGNhcmRidXNfYnJpZGdlOiBUaGUgUENJIGJ1cyB3aGljaCB0aGUgQ2FyZEJ1cyBicmlkZ2UgYnJpZGdlcyB0bworICoKKyAqIENoZWNrcyBpZiBkZXZpY2VzIG9uIHRoZSBidXMgd2hpY2ggdGhlIENhcmRCdXMgYnJpZGdlIGJyaWRnZXMgdG8gd291bGQgYmUKKyAqIGludmlzaWJsZSBkdXJpbmcgUENJIHNjYW5zIGJlY2F1c2Ugb2YgYSBtaXNjb25maWd1cmVkIHN1Ym9yZGluYXRlIG51bWJlcgorICogb2YgdGhlIHBhcmVudCBicmlnZSAtIHNvbWUgQklPU2VzIHNlZW0gdG8gYmUgdG9vIGxhenkgdG8gc2V0IGl0IHJpZ2h0LgorICogRG9lcyB0aGUgZml4dXAgY2FyZWZ1bGx5IGJ5IGNoZWNraW5nIGhvdyBmYXIgaXQgY2FuIGdvIHdpdGhvdXQgY29uZmxpY3RzLgorICogU2VlIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTQ0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9pZCB5ZW50YV9maXh1cF9wYXJlbnRfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpjYXJkYnVzX2JyaWRnZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJdW5zaWduZWQgY2hhciB1cHBlcl9saW1pdDsKKyAJLyoKKwkgKiBXZSBvbmx5IGNoZWNrIGFuZCBmaXggdGhlIHBhcmVudCBicmlkZ2U6IEFsbCBzeXN0ZW1zIHdoaWNoIG5lZWQKKwkgKiB0aGlzIGZpeHVwIHRoYXQgaGF2ZSBiZWVuIHJldmlld2VkIGFyZSBsYXB0b3BzIGFuZCB0aGUgb25seSBicmlkZ2UKKwkgKiB3aGljaCBuZWVkZWQgZml4aW5nIHdhcyB0aGUgcGFyZW50IGJyaWRnZSBvZiB0aGUgQ2FyZEJ1cyBicmlkZ2U6CisJICovCisJc3RydWN0IHBjaV9idXMgKmJyaWRnZV90b19maXggPSBjYXJkYnVzX2JyaWRnZS0+cGFyZW50OworCisJLyogQ2hlY2sgYnVzIG51bWJlcnMgYXJlIGFscmVhZHkgc2V0IHVwIGNvcnJlY3RseTogKi8KKwlpZiAoYnJpZGdlX3RvX2ZpeC0+c3Vib3JkaW5hdGUgPj0gY2FyZGJ1c19icmlkZ2UtPnN1Ym9yZGluYXRlKQorCQlyZXR1cm47IC8qIFRoZSBzdWJvcmRpbmF0ZSBudW1iZXIgaXMgb2ssIG5vdGhpbmcgdG8gZG8gKi8KKworCWlmICghYnJpZGdlX3RvX2ZpeC0+cGFyZW50KQorCQlyZXR1cm47IC8qIFJvb3QgYnJpZGdlcyBhcmUgb2sgKi8KKworCS8qIHN0YXkgd2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlIGJ1cyByYW5nZSBvZiB0aGUgcGFyZW50OiAqLworCXVwcGVyX2xpbWl0ID0gYnJpZGdlX3RvX2ZpeC0+cGFyZW50LT5zdWJvcmRpbmF0ZTsKKworCS8qIGNoZWNrIHRoZSBidXMgcmFuZ2VzIG9mIGFsbCBzaWxibGluZyBicmlkZ2VzIHRvIHByZXZlbnQgb3ZlcmxhcCAqLworCWxpc3RfZm9yX2VhY2godG1wLCAmYnJpZGdlX3RvX2ZpeC0+cGFyZW50LT5jaGlsZHJlbikgeworCQlzdHJ1Y3QgcGNpX2J1cyAqIHNpbGJsaW5nID0gcGNpX2J1c19iKHRtcCk7CisJCS8qCisJCSAqIElmIHRoZSBzaWxibGluZyBoYXMgYSBoaWdoZXIgc2Vjb25kYXJ5IGJ1cyBudW1iZXIKKwkJICogYW5kIGl0J3Mgc2Vjb25kYXJ5IGlzIGVxdWFsIG9yIHNtYWxsZXIgdGhhbiBvdXIKKwkJICogY3VycmVudCB1cHBlciBsaW1pdCwgc2V0IHRoZSBuZXcgdXBwZXIgbGltaXQgdG8KKwkJICogdGhlIGJ1cyBudW1iZXIgYmVsb3cgdGhlIHNpbGJsaW5nJ3MgcmFuZ2U6CisJCSAqLworCQlpZiAoc2lsYmxpbmctPnNlY29uZGFyeSA+IGJyaWRnZV90b19maXgtPnN1Ym9yZGluYXRlCisJCSAgICAmJiBzaWxibGluZy0+c2Vjb25kYXJ5IDw9IHVwcGVyX2xpbWl0KQorCQkJdXBwZXJfbGltaXQgPSBzaWxibGluZy0+c2Vjb25kYXJ5IC0gMTsKKwl9CisKKwkvKiBTaG93IHRoYXQgdGhlIHdhbnRlZCBzdWJvcmRpbmF0ZSBudW1iZXIgaXMgbm90IHBvc3NpYmxlOiAqLworCWlmIChjYXJkYnVzX2JyaWRnZS0+c3Vib3JkaW5hdGUgPiB1cHBlcl9saW1pdCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiWWVudGE6IFVwcGVyIGxpbWl0IGZvciBmaXhpbmcgdGhpcyAiCisJCQkiYnJpZGdlJ3MgcGFyZW50IGJyaWRnZTogIyUwMnhcbiIsIHVwcGVyX2xpbWl0KTsKKworCS8qIElmIHdlIGhhdmUgcm9vbSB0byBpbmNyZWFzZSB0aGUgYnJpZGdlJ3Mgc3Vib3JkaW5hdGUgbnVtYmVyLCAqLworCWlmIChicmlkZ2VfdG9fZml4LT5zdWJvcmRpbmF0ZSA8IHVwcGVyX2xpbWl0KSB7CisKKwkJLyogdXNlIHRoZSBoaWdoZXN0IG51bWJlciBvZiB0aGUgaGlkZGVuIGJ1cywgd2l0aGluIGxpbWl0cyAqLworCQl1bnNpZ25lZCBjaGFyIHN1Ym9yZGluYXRlX3RvX2Fzc2lnbiA9CisJCQltaW4oY2FyZGJ1c19icmlkZ2UtPnN1Ym9yZGluYXRlLCB1cHBlcl9saW1pdCk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGE6IFJhaXNpbmcgc3Vib3JkaW5hdGUgYnVzIyBvZiBwYXJlbnQgIgorCQkJImJ1cyAoIyUwMngpIGZyb20gIyUwMnggdG8gIyUwMnhcbiIsCisJCQlicmlkZ2VfdG9fZml4LT5udW1iZXIsCisJCQlicmlkZ2VfdG9fZml4LT5zdWJvcmRpbmF0ZSwgc3Vib3JkaW5hdGVfdG9fYXNzaWduKTsKKworCQkvKiBTYXZlIHRoZSBuZXcgc3Vib3JkaW5hdGUgaW4gdGhlIGJ1cyBzdHJ1Y3Qgb2YgdGhlIGJyaWRnZSAqLworCQlicmlkZ2VfdG9fZml4LT5zdWJvcmRpbmF0ZSA9IHN1Ym9yZGluYXRlX3RvX2Fzc2lnbjsKKworCQkvKiBhbmQgdXBkYXRlIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHdpdGggdGhlIG5ldyBzdWJvcmRpbmF0ZSAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnJpZGdlX3RvX2ZpeC0+c2VsZiwKKwkJCVBDSV9TVUJPUkRJTkFURV9CVVMsIGJyaWRnZV90b19maXgtPnN1Ym9yZGluYXRlKTsKKwl9Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIGEgY2FyZGJ1cyBjb250cm9sbGVyLiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHVzYWJsZQogICogaW50ZXJydXB0LCBhbmQgdGhhdCB3ZSBjYW4gbWFwIHRoZSBjYXJkYnVzIGFyZWEuIEZpbGwgaW4gdGhlCkBAIC0xMDk0LDcgKzExNzIsNyBAQAogCiAJLyogV2UgbXVzdCBmaW5pc2ggaW5pdGlhbGl6YXRpb24gaGVyZSAqLwogCi0JaWYgKCFzb2NrZXQtPmNiX2lycSB8fCByZXF1ZXN0X2lycShzb2NrZXQtPmNiX2lycSwgeWVudGFfaW50ZXJydXB0LCBTQV9TSElSUSwgInllbnRhIiwgc29ja2V0KSkgeworCWlmICghc29ja2V0LT5jYl9pcnEgfHwgcmVxdWVzdF9pcnEoc29ja2V0LT5jYl9pcnEsIHllbnRhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJ5ZW50YSIsIHNvY2tldCkpIHsKIAkJLyogTm8gSVJRIG9yIHJlcXVlc3RfaXJxIGZhaWxlZC4gUG9sbCAqLwogCQlzb2NrZXQtPmNiX2lycSA9IDA7IC8qIEJ1dCB6ZXJvIGlzIGEgdmFsaWQgSVJRIG51bWJlci4gKi8KIAkJaW5pdF90aW1lcigmc29ja2V0LT5wb2xsX3RpbWVyKTsKQEAgLTExMTMsNiArMTE5MSw4IEBACiAJeWVudGFfZ2V0X3NvY2tldF9jYXBhYmlsaXRpZXMoc29ja2V0LCBpc2FfaW50ZXJydXB0cyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU29ja2V0IHN0YXR1czogJTA4eFxuIiwgY2JfcmVhZGwoc29ja2V0LCBDQl9TT0NLRVRfU1RBVEUpKTsKIAorCXllbnRhX2ZpeHVwX3BhcmVudF9icmlkZ2UoZGV2LT5zdWJvcmRpbmF0ZSk7CisKIAkvKiBSZWdpc3RlciBpdCB3aXRoIHRoZSBwY21jaWEgbGF5ZXIuLiAqLwogCXJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJnNvY2tldC0+c29ja2V0KTsKIAlpZiAocmV0ID09IDApIHsKQEAgLTEyMzIsNiArMTMxMiw3IEBACiAKIAlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMSwgVEkxMlhYKSwKIAlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1g1MTUsIFRJMTJYWCksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV9YWDEyLCBUSTEyWFgpLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfWDQyMCwgVEkxMlhYKSwKIAlDQl9JRChQQ0lfVkVORE9SX0lEX1RJLCBQQ0lfREVWSUNFX0lEX1RJX1g2MjAsIFRJMTJYWCksCiAJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV83NDEwLCBUSTEyWFgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvY2FyZC5jIGIvZHJpdmVycy9wbnAvY2FyZC5jCmluZGV4IDBiNGFkY2IuLjIyNzYwMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2NhcmQuYworKysgYi9kcml2ZXJzL3BucC9jYXJkLmMKQEAgLTUsNyArNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9kcml2ZXIuYyBiL2RyaXZlcnMvcG5wL2RyaXZlci5jCmluZGV4IGU1NGMxNTMuLmUxNjE0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvcG5wL2RyaXZlci5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYwppbmRleCBhMmQ4Y2U3Li4zMTYzZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQlpZiAocG5wX3BvcnRfZmxhZ3MoZGV2LCBpKSAmIElPUkVTT1VSQ0VfRElTQUJMRUQpCiAJCQkJcG5wX3ByaW50ZihidWZmZXIsIiBkaXNhYmxlZFxuIik7CiAJCQllbHNlCi0JCQkJcG5wX3ByaW50ZihidWZmZXIsIiAweCVseC0weCVseFxuIiwKKwkJCQlwbnBfcHJpbnRmKGJ1ZmZlciwiIDB4JWxseC0weCVsbHhcbiIsCiAJCQkJCQlwbnBfcG9ydF9zdGFydChkZXYsIGkpLAogCQkJCQkJcG5wX3BvcnRfZW5kKGRldiwgaSkpOwogCQl9CkBAIC0yNzUsNyArMjc1LDcgQEAKIAkJCWlmIChwbnBfbWVtX2ZsYWdzKGRldiwgaSkgJiBJT1JFU09VUkNFX0RJU0FCTEVEKQogCQkJCXBucF9wcmludGYoYnVmZmVyLCIgZGlzYWJsZWRcbiIpOwogCQkJZWxzZQotCQkJCXBucF9wcmludGYoYnVmZmVyLCIgMHglbHgtMHglbHhcbiIsCisJCQkJcG5wX3ByaW50ZihidWZmZXIsIiAweCVsbHgtMHglbGx4XG4iLAogCQkJCQkJcG5wX21lbV9zdGFydChkZXYsIGkpLAogCQkJCQkJcG5wX21lbV9lbmQoZGV2LCBpKSk7CiAJCX0KQEAgLTI4Niw3ICsyODYsNyBAQAogCQkJaWYgKHBucF9pcnFfZmxhZ3MoZGV2LCBpKSAmIElPUkVTT1VSQ0VfRElTQUJMRUQpCiAJCQkJcG5wX3ByaW50ZihidWZmZXIsIiBkaXNhYmxlZFxuIik7CiAJCQllbHNlCi0JCQkJcG5wX3ByaW50ZihidWZmZXIsIiAlbGRcbiIsCisJCQkJcG5wX3ByaW50ZihidWZmZXIsIiAlbGxkXG4iLAogCQkJCQkJcG5wX2lycShkZXYsIGkpKTsKIAkJfQogCX0KQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkJaWYgKHBucF9kbWFfZmxhZ3MoZGV2LCBpKSAmIElPUkVTT1VSQ0VfRElTQUJMRUQpCiAJCQkJcG5wX3ByaW50ZihidWZmZXIsIiBkaXNhYmxlZFxuIik7CiAJCQllbHNlCi0JCQkJcG5wX3ByaW50ZihidWZmZXIsIiAlbGRcbiIsCisJCQkJcG5wX3ByaW50ZihidWZmZXIsIiAlbGxkXG4iLAogCQkJCQkJcG5wX2RtYShkZXYsIGkpKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb21wYXQuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb21wYXQuYwppbmRleCAzZmY3ZTc2Li4wNjk3YWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9pc2FwbnAvY29tcGF0LmMKKysrIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvbXBhdC5jCkBAIC04LDcgKzgsNiBAQAogIAogLyogVE9ETzogc2VlIGlmIG1vcmUgaXNhcG5wIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIGhlcmUgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKaW5kZXggYWM3YzJiYi4uZjJlMDE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiAgMjAwMy0wOC0xMQlSZXNvdXJjZSBNYW5hZ2VtZW50IFVwZGF0ZXMgLSBBZGFtIEJlbGF5IDxhbWJ4MUBuZW8ucnIuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL3Byb2MuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9wcm9jLmMKaW5kZXggY2Y1NGIwYS4uOTU4YzExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvaXNhcG5wL3Byb2MuYworKysgYi9kcml2ZXJzL3BucC9pc2FwbnAvcHJvYy5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9tYW5hZ2VyLmMgYi9kcml2ZXJzL3BucC9tYW5hZ2VyLmMKaW5kZXggNmZmZjEwOS4uNTAyNmIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvcG5wL21hbmFnZXIuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjAsNyArMTksOCBAQAogCiBzdGF0aWMgaW50IHBucF9hc3NpZ25fcG9ydChzdHJ1Y3QgcG5wX2RldiAqZGV2LCBzdHJ1Y3QgcG5wX3BvcnQgKnJ1bGUsIGludCBpZHgpCiB7Ci0JdW5zaWduZWQgbG9uZyAqc3RhcnQsICplbmQsICpmbGFnczsKKwlyZXNvdXJjZV9zaXplX3QgKnN0YXJ0LCAqZW5kOworCXVuc2lnbmVkIGxvbmcgKmZsYWdzOwogCiAJaWYgKCFkZXYgfHwgIXJ1bGUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjMsNyArNjMsOCBAQAogCiBzdGF0aWMgaW50IHBucF9hc3NpZ25fbWVtKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHN0cnVjdCBwbnBfbWVtICpydWxlLCBpbnQgaWR4KQogewotCXVuc2lnbmVkIGxvbmcgKnN0YXJ0LCAqZW5kLCAqZmxhZ3M7CisJcmVzb3VyY2Vfc2l6ZV90ICpzdGFydCwgKmVuZDsKKwl1bnNpZ25lZCBsb25nICpmbGFnczsKIAogCWlmICghZGV2IHx8ICFydWxlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNiw3ICsxMTcsOCBAQAogCiBzdGF0aWMgaW50IHBucF9hc3NpZ25faXJxKHN0cnVjdCBwbnBfZGV2ICogZGV2LCBzdHJ1Y3QgcG5wX2lycSAqcnVsZSwgaW50IGlkeCkKIHsKLQl1bnNpZ25lZCBsb25nICpzdGFydCwgKmVuZCwgKmZsYWdzOworCXJlc291cmNlX3NpemVfdCAqc3RhcnQsICplbmQ7CisJdW5zaWduZWQgbG9uZyAqZmxhZ3M7CiAJaW50IGk7CiAKIAkvKiBJUlEgcHJpb3JpdHk6IHRoaXMgdGFibGUgaXMgZ29vZCBmb3IgaTM4NiAqLwpAQCAtMTY4LDcgKzE3MCw4IEBACiAKIHN0YXRpYyBpbnQgcG5wX2Fzc2lnbl9kbWEoc3RydWN0IHBucF9kZXYgKmRldiwgc3RydWN0IHBucF9kbWEgKnJ1bGUsIGludCBpZHgpCiB7Ci0JdW5zaWduZWQgbG9uZyAqc3RhcnQsICplbmQsICpmbGFnczsKKwlyZXNvdXJjZV9zaXplX3QgKnN0YXJ0LCAqZW5kOworCXVuc2lnbmVkIGxvbmcgKmZsYWdzOwogCWludCBpOwogCiAJLyogRE1BIHByaW9yaXR5OiB0aGlzIHRhYmxlIGlzIGdvb2QgZm9yIGkzODYgKi8KQEAgLTU4Miw3ICs1ODUsOCBAQAogICogQHNpemU6IHNpemUgb2YgcmVnaW9uCiAgKgogICovCi12b2lkIHBucF9yZXNvdXJjZV9jaGFuZ2Uoc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQordm9pZCBwbnBfcmVzb3VyY2VfY2hhbmdlKHN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2UsIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSkKIHsKIAlpZiAocmVzb3VyY2UgPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwppbmRleCBmMTA0NTc3Li42Y2YzNGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwpAQCAtMTksNyArMTksNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwppbmRleCAzYTRhNjQ0Li4yMTIyNjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyB2b2lkCiBwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9pcnFyZXNvdXJjZShzdHJ1Y3QgcG5wX3Jlc291cmNlX3RhYmxlICpyZXMsIHUzMiBnc2ksCi0JaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKKwlpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5LCBpbnQgc2hhcmVhYmxlKQogewogCWludCBpID0gMDsKIAlpbnQgaXJxOwpAQCAtOTUsNiArOTUsOSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKHNoYXJlYWJsZSkKKwkJcmVzLT5pcnFfcmVzb3VyY2VbaV0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFOworCiAJcmVzLT5pcnFfcmVzb3VyY2VbaV0uc3RhcnQgPSBpcnE7CiAJcmVzLT5pcnFfcmVzb3VyY2VbaV0uZW5kID0gaXJxOwogCXBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpcnEsIDEpOwpAQCAtMTk0LDcgKzE5Nyw4IEBACiAJCQlwbnBhY3BpX3BhcnNlX2FsbG9jYXRlZF9pcnFyZXNvdXJjZShyZXNfdGFibGUsCiAJCQkJcmVzLT5kYXRhLmlycS5pbnRlcnJ1cHRzW2ldLAogCQkJCXJlcy0+ZGF0YS5pcnEudHJpZ2dlcmluZywKLQkJCQlyZXMtPmRhdGEuaXJxLnBvbGFyaXR5KTsKKwkJCQlyZXMtPmRhdGEuaXJxLnBvbGFyaXR5LAorCQkJCXJlcy0+ZGF0YS5pcnEuc2hhcmFibGUpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yNTUsNyArMjU5LDggQEAKIAkJCXBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX2lycXJlc291cmNlKHJlc190YWJsZSwKIAkJCQlyZXMtPmRhdGEuZXh0ZW5kZWRfaXJxLmludGVycnVwdHNbaV0sCiAJCQkJcmVzLT5kYXRhLmV4dGVuZGVkX2lycS50cmlnZ2VyaW5nLAotCQkJCXJlcy0+ZGF0YS5leHRlbmRlZF9pcnEucG9sYXJpdHkpOworCQkJCXJlcy0+ZGF0YS5leHRlbmRlZF9pcnEucG9sYXJpdHksCisJCQkJcmVzLT5kYXRhLmV4dGVuZGVkX2lycS5zaGFyYWJsZSk7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYwppbmRleCBjODljOThhLi5lZjUwOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jCkBAIC0zLDcgKzMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KICNpbmNsdWRlIDxsaW51eC9wbnBiaW9zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9xdWlya3MuYyBiL2RyaXZlcnMvcG5wL3F1aXJrcy5jCmluZGV4IDg5MzZiMGMuLmU5N2VjZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcG5wL3F1aXJrcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcmVzb3VyY2UuYyBiL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMKaW5kZXggNmRlZDUyNy4uNWM4ZWMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BucC9yZXNvdXJjZS5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTI0MSw3ICsyNDAsNyBAQAogewogCWludCB0bXA7CiAJc3RydWN0IHBucF9kZXYgKnRkZXY7Ci0JdW5zaWduZWQgbG9uZyAqcG9ydCwgKmVuZCwgKnRwb3J0LCAqdGVuZDsKKwlyZXNvdXJjZV9zaXplX3QgKnBvcnQsICplbmQsICp0cG9ydCwgKnRlbmQ7CiAJcG9ydCA9ICZkZXYtPnJlcy5wb3J0X3Jlc291cmNlW2lkeF0uc3RhcnQ7CiAJZW5kID0gJmRldi0+cmVzLnBvcnRfcmVzb3VyY2VbaWR4XS5lbmQ7CiAKQEAgLTI5Nyw3ICsyOTYsNyBAQAogewogCWludCB0bXA7CiAJc3RydWN0IHBucF9kZXYgKnRkZXY7Ci0JdW5zaWduZWQgbG9uZyAqYWRkciwgKmVuZCwgKnRhZGRyLCAqdGVuZDsKKwlyZXNvdXJjZV9zaXplX3QgKmFkZHIsICplbmQsICp0YWRkciwgKnRlbmQ7CiAJYWRkciA9ICZkZXYtPnJlcy5tZW1fcmVzb3VyY2VbaWR4XS5zdGFydDsKIAllbmQgPSAmZGV2LT5yZXMubWVtX3Jlc291cmNlW2lkeF0uZW5kOwogCkBAIC0zNTgsNyArMzU3LDcgQEAKIHsKIAlpbnQgdG1wOwogCXN0cnVjdCBwbnBfZGV2ICp0ZGV2OwotCXVuc2lnbmVkIGxvbmcgKiBpcnEgPSAmZGV2LT5yZXMuaXJxX3Jlc291cmNlW2lkeF0uc3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90ICogaXJxID0gJmRldi0+cmVzLmlycV9yZXNvdXJjZVtpZHhdLnN0YXJ0OwogCiAJLyogaWYgdGhlIHJlc291cmNlIGRvZXNuJ3QgZXhpc3QsIGRvbid0IGNvbXBsYWluIGFib3V0IGl0ICovCiAJaWYgKGNhbm5vdF9jb21wYXJlKGRldi0+cmVzLmlycV9yZXNvdXJjZVtpZHhdLmZsYWdzKSkKQEAgLTM5Niw3ICszOTUsOCBAQAogCS8qIGNoZWNrIGlmIHRoZSByZXNvdXJjZSBpcyBhbHJlYWR5IGluIHVzZSwgc2tpcCBpZiB0aGUKIAkgKiBkZXZpY2UgaXMgYWN0aXZlIGJlY2F1c2UgaXQgaXRzZWxmIG1heSBiZSBpbiB1c2UgKi8KIAlpZighZGV2LT5hY3RpdmUpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKCppcnEsIHBucF90ZXN0X2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwgInBucCIsIE5VTEwpKQorCQlpZiAocmVxdWVzdF9pcnEoKmlycSwgcG5wX3Rlc3RfaGFuZGxlciwKKwkJCQlJUlFGX0RJU0FCTEVEfElSUUZfUFJPQkVfU0hBUkVELCAicG5wIiwgTlVMTCkpCiAJCQlyZXR1cm4gMDsKIAkJZnJlZV9pcnEoKmlycSwgTlVMTCk7CiAJfQpAQCAtNDIzLDcgKzQyMyw3IEBACiAjaWZuZGVmIENPTkZJR19JQTY0CiAJaW50IHRtcDsKIAlzdHJ1Y3QgcG5wX2RldiAqdGRldjsKLQl1bnNpZ25lZCBsb25nICogZG1hID0gJmRldi0+cmVzLmRtYV9yZXNvdXJjZVtpZHhdLnN0YXJ0OworCXJlc291cmNlX3NpemVfdCAqIGRtYSA9ICZkZXYtPnJlcy5kbWFfcmVzb3VyY2VbaWR4XS5zdGFydDsKIAogCS8qIGlmIHRoZSByZXNvdXJjZSBkb2Vzbid0IGV4aXN0LCBkb24ndCBjb21wbGFpbiBhYm91dCBpdCAqLwogCWlmIChjYW5ub3RfY29tcGFyZShkZXYtPnJlcy5kbWFfcmVzb3VyY2VbaWR4XS5mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9zdXBwb3J0LmMgYi9kcml2ZXJzL3BucC9zdXBwb3J0LmMKaW5kZXggNjFmZTk5OC4uOTQ2YTBkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvc3VwcG9ydC5jCisrKyBiL2RyaXZlcnMvcG5wL3N1cHBvcnQuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCmluZGV4IDk0ZTMwZmUuLjdiZjdiMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKaW5kZXggYmVmOTMxNi4uNTY4N2I4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYwpAQCAtMTAsNyArMTAsNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvcmlvX2Rydi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby5jCmluZGV4IDVlMzgyNDcuLmY2NDQ4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IGJjY2ZmNDAuLmY1YjlmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMTUsNyArMTUsNyBAQAogCWhlbHAKIAkgIEdlbmVyaWMgUlRDIGNsYXNzIHN1cHBvcnQuIElmIHlvdSBzYXkgeWVzIGhlcmUsIHlvdSB3aWxsCiAgCSAgYmUgYWxsb3dlZCB0byBwbHVnIG9uZSBvciBtb3JlIFJUQ3MgdG8geW91ciBzeXN0ZW0uIFlvdSB3aWxsCi0JICBwcm9iYWJseSB3YW50IHRvIGVuYWJsZSBvbmUgb2YgbW9yZSBvZiB0aGUgaW50ZXJmYWNlcyBiZWxvdy4KKwkgIHByb2JhYmx5IHdhbnQgdG8gZW5hYmxlIG9uZSBvciBtb3JlIG9mIHRoZSBpbnRlcmZhY2VzIGJlbG93LgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1jbGFzcy4KQEAgLTE2Miw2ICsxNjIsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKK2NvbmZpZyBSVENfRFJWX1JTNUMzNDgKKwl0cmlzdGF0ZSAiUmljb2ggUlM1QzM0OEEvQiIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBTUEkKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBSaWNvaCBSUzVDMzQ4QSBhbmQgUlM1QzM0OEIgUlRDIGNoaXBzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1yczVjMzQ4LgorCiBjb25maWcgUlRDX0RSVl9SUzVDMzcyCiAJdHJpc3RhdGUgIlJpY29oIFJTNUMzNzJBL0IiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgSTJDCkBAIC0xNzIsNiArMTgyLDIyIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1yczVjMzcyLgogCitjb25maWcgUlRDX0RSVl9TM0MKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0Mgc2VyaWVzIFNvQyBSVEMiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgQVJDSF9TM0MyNDEwCisJaGVscAorCSAgUlRDIChSZWFsdGltZSBDbG9jaykgZHJpdmVyIGZvciB0aGUgY2xvY2sgaW5idWlsdCBpbnRvIHRoZQorCSAgU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBvZiBTb0NzLiBUaGlzIGNhbiBwcm92aWRlIHBlcmlvZGljCisJICBpbnRlcnJ1cHQgcmF0ZXMgZnJvbSAxSHogdG8gNjRIeiBmb3IgdXNlciBwcm9ncmFtcywgYW5kCisJICB3YWtldXAgZnJvbSBBbGFybS4KKworCSAgVGhlIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGNvbW1vbiBmZWF0dXJlcyBvbiBhbGwgdGhlCisJICBTM0MyNFhYIHJhbmdlLCBzdWNoIGFzIHRoZSBTM0MyNDEwLCBTM0MyNDEyLCBTM0MyNDEzLCBTM0MyNDQwCisJICBhbmQgUzNDMjQ0Mi4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbGQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtczNjLgorCiBjb25maWcgUlRDX0RSVl9NNDhUODYKIAl0cmlzdGF0ZSAiU1QgTTQ4VDg2L0RhbGxhcyBEUzEyODg3IgogCWRlcGVuZHMgb24gUlRDX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDkwMGQyMTAuLjU0MjIwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw4IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzKQkrPSBydGMtcGNmODU2My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzKQkrPSBydGMtcGNmODU4My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9SUzVDMzcyKQkrPSBydGMtcnM1YzM3Mi5vCitvYmotJChDT05GSUdfUlRDX0RSVl9TM0MpCSs9IHJ0Yy1zM2Mubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzM0OCkJKz0gcnRjLXJzNWMzNDgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDg2KQkrPSBydGMtbTQ4dDg2Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTU1MykJKz0gcnRjLWRzMTU1My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9FUDkzWFgpCSs9IHJ0Yy1lcDkzeHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxLmMKaW5kZXggYjY3NmY0NC4uZGZkMGNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MS5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJCQkJQVQ5MV9SVENfQ0FMRVYpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MV9JRF9TWVMsIGF0OTFfcnRjX2ludGVycnVwdCwKLQkJCQlTQV9TSElSUSwgImF0OTFfcnRjIiwgcGRldik7CisJCQkJSVJRRl9TSEFSRUQsICJhdDkxX3J0YyIsIHBkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX3J0YzogSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKIAkJCQlBVDkxX0lEX1NZUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKaW5kZXggNzYyNTIxYS4uMjA5MDAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAKIAlpZiAocGRhdGEtPmlycSA+PSAwKSB7CiAJCXdyaXRlYigwLCBpb2FkZHIgKyBSVENfSU5URVJSVVBUUyk7Ci0JCWlmIChyZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBkczE1NTNfcnRjX2ludGVycnVwdCwgU0FfU0hJUlEsCisJCWlmIChyZXF1ZXN0X2lycShwZGF0YS0+aXJxLCBkczE1NTNfcnRjX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJcGRldi0+bmFtZSwgcGRldikgPCAwKSB7CiAJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiaW50ZXJydXB0IG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJCXBkYXRhLT5pcnEgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKaW5kZXggZWU1Mzg2My4uZDZkMWM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQlnb3RvIG91dF9ub19yZW1hcDsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEoYWRldi0+aXJxWzBdLCBwbDAzMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwlpZiAocmVxdWVzdF9pcnEoYWRldi0+aXJxWzBdLCBwbDAzMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQkicnRjLXBsMDMxIiwgbGRhdGEtPnJ0YykpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXRfbm9faXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2NGQxZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBBIFNQSSBkcml2ZXIgZm9yIHRoZSBSaWNvaCBSUzVDMzQ4IFJUQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBdHN1c2hpIE5lbW90byA8YW5lbW9AbWJhLm9jbi5uZS5qcD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBib2FyZCBzcGVjaWZpYyBpbml0IGNvZGUgc2hvdWxkIHByb3ZpZGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMKKyAqIGRldmljZToKKyAqICAgICBNb2RlIDEgKEhpZ2gtQWN0aXZlLCBTaGlmdC1UaGVuLVNhbXBsZSksIEhpZ2ggQXZ0aXZlIENTCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisKKyNkZWZpbmUgUlM1QzM0OF9SRUdfU0VDUwkwCisjZGVmaW5lIFJTNUMzNDhfUkVHX01JTlMJMQorI2RlZmluZSBSUzVDMzQ4X1JFR19IT1VSUwkyCisjZGVmaW5lIFJTNUMzNDhfUkVHX1dEQVkJMworI2RlZmluZSBSUzVDMzQ4X1JFR19EQVkJNAorI2RlZmluZSBSUzVDMzQ4X1JFR19NT05USAk1CisjZGVmaW5lIFJTNUMzNDhfUkVHX1lFQVIJNgorI2RlZmluZSBSUzVDMzQ4X1JFR19DVEwxCTE0CisjZGVmaW5lIFJTNUMzNDhfUkVHX0NUTDIJMTUKKworI2RlZmluZSBSUzVDMzQ4X1NFQ1NfTUFTSwkweDdmCisjZGVmaW5lIFJTNUMzNDhfTUlOU19NQVNLCTB4N2YKKyNkZWZpbmUgUlM1QzM0OF9IT1VSU19NQVNLCTB4M2YKKyNkZWZpbmUgUlM1QzM0OF9XREFZX01BU0sJMHgwMworI2RlZmluZSBSUzVDMzQ4X0RBWV9NQVNLCTB4M2YKKyNkZWZpbmUgUlM1QzM0OF9NT05USF9NQVNLCTB4MWYKKworI2RlZmluZSBSUzVDMzQ4X0JJVF9QTQkweDIwCS8qIFJFR19IT1VSUyAqLworI2RlZmluZSBSUzVDMzQ4X0JJVF9ZMksJMHg4MAkvKiBSRUdfTU9OVEggKi8KKyNkZWZpbmUgUlM1QzM0OF9CSVRfMjRICTB4MjAJLyogUkVHX0NUTDEgKi8KKyNkZWZpbmUgUlM1QzM0OF9CSVRfWFNUUAkweDEwCS8qIFJFR19DVEwyICovCisjZGVmaW5lIFJTNUMzNDhfQklUX1ZERVQJMHg0MAkvKiBSRUdfQ1RMMiAqLworCisjZGVmaW5lIFJTNUMzNDhfQ01EX1coYWRkcikJKCgoYWRkcikgPDwgNCkgfCAweDA4KQkvKiBzaW5nbGUgd3JpdGUgKi8KKyNkZWZpbmUgUlM1QzM0OF9DTURfUihhZGRyKQkoKChhZGRyKSA8PCA0KSB8IDB4MGMpCS8qIHNpbmdsZSByZWFkICovCisjZGVmaW5lIFJTNUMzNDhfQ01EX01XKGFkZHIpCSgoKGFkZHIpIDw8IDQpIHwgMHgwMCkJLyogYnVyc3Qgd3JpdGUgKi8KKyNkZWZpbmUgUlM1QzM0OF9DTURfTVIoYWRkcikJKCgoYWRkcikgPDwgNCkgfCAweDA0KQkvKiBidXJzdCByZWFkICovCisKK3N0cnVjdCByczVjMzQ4X3BsYXRfZGF0YSB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlpbnQgcnRjXzI0aDsKK307CisKK3N0YXRpYyBpbnQKK3JzNWMzNDhfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCByczVjMzQ4X3BsYXRfZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXU4IHR4YnVmWzUrN10sICp0eHA7CisJaW50IHJldDsKKworCS8qIFRyYW5zZmVyIDUgYnl0ZXMgYmVmb3JlIHdyaXRpbmcgU0VDLiAgVGhpcyBnaXZlcyAzMXVzIGZvciBjYXJyeS4gKi8KKwl0eHAgPSB0eGJ1ZjsKKwl0eGJ1ZlswXSA9IFJTNUMzNDhfQ01EX1IoUlM1QzM0OF9SRUdfQ1RMMik7IC8qIGNtZCwgY3RsMiAqLworCXR4YnVmWzFdID0gMDsJLyogZHVtbXkgKi8KKwl0eGJ1ZlsyXSA9IFJTNUMzNDhfQ01EX1IoUlM1QzM0OF9SRUdfQ1RMMik7IC8qIGNtZCwgY3RsMiAqLworCXR4YnVmWzNdID0gMDsJLyogZHVtbXkgKi8KKwl0eGJ1Zls0XSA9IFJTNUMzNDhfQ01EX01XKFJTNUMzNDhfUkVHX1NFQ1MpOyAvKiBjbWQsIHNlYywgLi4uICovCisJdHhwID0gJnR4YnVmWzVdOworCXR4cFtSUzVDMzQ4X1JFR19TRUNTXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7CisJdHhwW1JTNUMzNDhfUkVHX01JTlNdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlpZiAocGRhdGEtPnJ0Y18yNGgpIHsKKwkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCX0gZWxzZSB7CisJCS8qIGhvdXIgMCBpcyBBTTEyLCBub29uIGlzIFBNMTIgKi8KKwkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IEJJTjJCQ0QoKHRtLT50bV9ob3VyICsgMTEpICUgMTIgKyAxKSB8CisJCQkodG0tPnRtX2hvdXIgPj0gMTIgPyBSUzVDMzQ4X0JJVF9QTSA6IDApOworCX0KKwl0eHBbUlM1QzM0OF9SRUdfV0RBWV0gPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKKwl0eHBbUlM1QzM0OF9SRUdfREFZXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOworCXR4cFtSUzVDMzQ4X1JFR19NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKSB8CisJCSh0bS0+dG1feWVhciA+PSAxMDAgPyBSUzVDMzQ4X0JJVF9ZMksgOiAwKTsKKwl0eHBbUlM1QzM0OF9SRUdfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwkvKiB3cml0ZSBpbiBvbmUgdHJhbnNmZXIgdG8gYXZvaWQgZGF0YSBpbmNvbnNpc3RlbmN5ICovCisJcmV0ID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksIHR4YnVmLCBzaXplb2YodHhidWYpLCBOVUxMLCAwKTsKKwl1ZGVsYXkoNjIpOwkvKiBUY3NyIDYydXMgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CityczVjMzQ4X3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IHJzNWMzNDhfcGxhdF9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdTggdHhidWZbNV0sIHJ4YnVmWzddOworCWludCByZXQ7CisKKwkvKiBUcmFuc2ZlciA1IGJ5dGUgYmVmb3JlcyByZWFkaW5nIFNFQy4gIFRoaXMgZ2l2ZXMgMzF1cyBmb3IgY2FycnkuICovCisJdHhidWZbMF0gPSBSUzVDMzQ4X0NNRF9SKFJTNUMzNDhfUkVHX0NUTDIpOyAvKiBjbWQsIGN0bDIgKi8KKwl0eGJ1ZlsxXSA9IDA7CS8qIGR1bW15ICovCisJdHhidWZbMl0gPSBSUzVDMzQ4X0NNRF9SKFJTNUMzNDhfUkVHX0NUTDIpOyAvKiBjbWQsIGN0bDIgKi8KKwl0eGJ1ZlszXSA9IDA7CS8qIGR1bW15ICovCisJdHhidWZbNF0gPSBSUzVDMzQ4X0NNRF9NUihSUzVDMzQ4X1JFR19TRUNTKTsgLyogY21kLCBzZWMsIC4uLiAqLworCisJLyogcmVhZCBpbiBvbmUgdHJhbnNmZXIgdG8gYXZvaWQgZGF0YSBpbmNvbnNpc3RlbmN5ICovCisJcmV0ID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksIHR4YnVmLCBzaXplb2YodHhidWYpLAorCQkJCSAgcnhidWYsIHNpemVvZihyeGJ1ZikpOworCXVkZWxheSg2Mik7CS8qIFRjc3IgNjJ1cyAqLworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdG0tPnRtX3NlYyA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfU0VDU10gJiBSUzVDMzQ4X1NFQ1NfTUFTSyk7CisJdG0tPnRtX21pbiA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfTUlOU10gJiBSUzVDMzQ4X01JTlNfTUFTSyk7CisJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX0hPVVJTXSAmIFJTNUMzNDhfSE9VUlNfTUFTSyk7CisJaWYgKCFwZGF0YS0+cnRjXzI0aCkgeworCQl0bS0+dG1faG91ciAlPSAxMjsKKwkJaWYgKHJ4YnVmW1JTNUMzNDhfUkVHX0hPVVJTXSAmIFJTNUMzNDhfQklUX1BNKQorCQkJdG0tPnRtX2hvdXIgKz0gMTI7CisJfQorCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19XREFZXSAmIFJTNUMzNDhfV0RBWV9NQVNLKTsKKwl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfREFZXSAmIFJTNUMzNDhfREFZX01BU0spOworCXRtLT50bV9tb24gPQorCQlCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX01PTlRIXSAmIFJTNUMzNDhfTU9OVEhfTUFTSykgLSAxOworCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCisJdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX1lFQVJdKSArCisJCSgocnhidWZbUlM1QzM0OF9SRUdfTU9OVEhdICYgUlM1QzM0OF9CSVRfWTJLKSA/IDEwMCA6IDApOworCisJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKKwkJcnRjX3RpbWVfdG9fdG0oMCwgdG0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgcnM1YzM0OF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSByczVjMzQ4X3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lCT0gcnM1YzM0OF9ydGNfc2V0X3RpbWUsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgcnM1YzM0OF9kcml2ZXI7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJzNWMzNDhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IHJzNWMzNDhfcGxhdF9kYXRhICpwZGF0YTsKKworCXBkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJzNWMzNDhfcGxhdF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3BpLT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCisJLyogQ2hlY2sgRDcgb2YgU0VDT05EIHJlZ2lzdGVyICovCisJcmV0ID0gc3BpX3c4cjgoc3BpLCBSUzVDMzQ4X0NNRF9SKFJTNUMzNDhfUkVHX1NFQ1MpKTsKKwlpZiAocmV0IDwgMCB8fCAocmV0ICYgMHg4MCkpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJub3QgZm91bmQuXG4iKTsKKwkJZ290byBrZnJlZV9leGl0OworCX0KKworCWRldl9pbmZvKCZzcGktPmRldiwgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAic3BpY2xrICV1IEtIei5cbiIsCisJCSAoc3BpLT5tYXhfc3BlZWRfaHogKyA1MDApIC8gMTAwMCk7CisKKwkvKiB0dXJuIFJUQyBvbiBpZiBpdCB3YXMgbm90IG9uICovCisJcmV0ID0gc3BpX3c4cjgoc3BpLCBSUzVDMzQ4X0NNRF9SKFJTNUMzNDhfUkVHX0NUTDIpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBrZnJlZV9leGl0OworCWlmIChyZXQgJiAoUlM1QzM0OF9CSVRfWFNUUCB8IFJTNUMzNDhfQklUX1ZERVQpKSB7CisJCXU4IGJ1ZlsyXTsKKwkJaWYgKHJldCAmIFJTNUMzNDhfQklUX1ZERVQpCisJCQlkZXZfd2Fybigmc3BpLT5kZXYsICJ2b2x0YWdlLWxvdyBkZXRlY3RlZC5cbiIpOworCQlidWZbMF0gPSBSUzVDMzQ4X0NNRF9XKFJTNUMzNDhfUkVHX0NUTDIpOworCQlidWZbMV0gPSAwOworCQlyZXQgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBrZnJlZV9leGl0OworCX0KKworCXJldCA9IHNwaV93OHI4KHNwaSwgUlM1QzM0OF9DTURfUihSUzVDMzQ4X1JFR19DVEwxKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8ga2ZyZWVfZXhpdDsKKwlpZiAocmV0ICYgUlM1QzM0OF9CSVRfMjRIKQorCQlwZGF0YS0+cnRjXzI0aCA9IDE7CisKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHJzNWMzNDhfZHJpdmVyLmRyaXZlci5uYW1lLCAmc3BpLT5kZXYsCisJCQkJICAmcnM1YzM0OF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMpOworCQlnb3RvIGtmcmVlX2V4aXQ7CisJfQorCisJcGRhdGEtPnJ0YyA9IHJ0YzsKKworCXJldHVybiAwOworIGtmcmVlX2V4aXQ6CisJa2ZyZWUocGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJzNWMzNDhfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHJzNWMzNDhfcGxhdF9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBkYXRhLT5ydGM7CisKKwlpZiAocnRjKQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKwlrZnJlZShwZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciByczVjMzQ4X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJyczVjMzQ4IiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gcnM1YzM0OF9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocnM1YzM0OF9yZW1vdmUpLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgcnM1YzM0OF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnJzNWMzNDhfZHJpdmVyKTsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIHJzNWMzNDhfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmcnM1YzM0OF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChyczVjMzQ4X2luaXQpOworbW9kdWxlX2V4aXQocnM1YzM0OF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQXRzdXNoaSBOZW1vdG8gPGFuZW1vQG1iYS5vY24ubmUuanA+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJpY29oIFJTNUMzNDggUlRDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZDFiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKQEAgLTAsMCArMSw2MDcgQEAKKy8qIGRyaXZlcnMvcnRjL3J0Yy1zM2MuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwL1MzQzI0NDAvUzNDMjRYWCBJbnRlcm5hbCBSVEMgRHJpdmVyCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXJ0Yy5oPgorCisvKiBJIGhhdmUgeWV0IHRvIGZpbmQgYW4gUzNDIGltcGxlbWVudGF0aW9uIHdpdGggbW9yZSB0aGFuIG9uZQorICogb2YgdGhlc2UgcnRjIGJsb2NrcyBpbiAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpzM2NfcnRjX21lbTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqczNjX3J0Y19iYXNlOworc3RhdGljIGludCBzM2NfcnRjX2FsYXJtbm8gPSBOT19JUlE7CitzdGF0aWMgaW50IHMzY19ydGNfdGlja25vICA9IE5PX0lSUTsKK3N0YXRpYyBpbnQgczNjX3J0Y19mcmVxICAgID0gMTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhzM2NfcnRjX3BpZV9sb2NrKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGlja19jb3VudDsKKworLyogSVJRIEhhbmRsZXJzICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzM2NfcnRjX2FsYXJtaXJxKGludCBpcnEsIHZvaWQgKmlkLCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcmRldiA9IGlkOworCisJcnRjX3VwZGF0ZV9pcnEoJnJkZXYtPmNsYXNzX2RldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHMzY19ydGNfdGlja2lycShpbnQgaXJxLCB2b2lkICppZCwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJkZXYgPSBpZDsKKworCXJ0Y191cGRhdGVfaXJxKCZyZGV2LT5jbGFzc19kZXYsIHRpY2tfY291bnQrKywgUlRDX1BGIHwgUlRDX0lSUUYpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVXBkYXRlIGNvbnRyb2wgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCBzM2NfcnRjX3NldGFpZShpbnQgdG8pCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXByX2RlYnVnKCIlczogYWllPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHRvKTsKKworCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQUxNKSAmIH5TM0MyNDEwX1JUQ0FMTV9BTE1FTjsKKworCWlmICh0bykKKwkJdG1wIHw9IFMzQzI0MTBfUlRDQUxNX0FMTUVOOworCisJd3JpdGViKHRtcCwgUzNDMjQxMF9SVENBTE0pOworfQorCitzdGF0aWMgdm9pZCBzM2NfcnRjX3NldHBpZShpbnQgdG8pCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXByX2RlYnVnKCIlczogcGllPSVkXG4iLCBfX0ZVTkNUSU9OX18sIHRvKTsKKworCXNwaW5fbG9ja19pcnEoJnMzY19ydGNfcGllX2xvY2spOworCXRtcCA9IHJlYWRiKFMzQzI0MTBfVElDTlQpICYgflMzQzI0MTBfVElDTlRfRU5BQkxFOworCisJaWYgKHRvKQorCQl0bXAgfD0gUzNDMjQxMF9USUNOVF9FTkFCTEU7CisKKwl3cml0ZWIodG1wLCBTM0MyNDEwX1RJQ05UKTsKKwlzcGluX3VubG9ja19pcnEoJnMzY19ydGNfcGllX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBzM2NfcnRjX3NldGZyZXEoaW50IGZyZXEpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXNwaW5fbG9ja19pcnEoJnMzY19ydGNfcGllX2xvY2spOworCXRtcCA9IHJlYWRiKFMzQzI0MTBfVElDTlQpICYgUzNDMjQxMF9USUNOVF9FTkFCTEU7CisKKwlzM2NfcnRjX2ZyZXEgPSBmcmVxOworCisJdG1wIHw9ICgxMjggLyBmcmVxKS0xOworCisJd3JpdGViKHRtcCwgUzNDMjQxMF9USUNOVCk7CisJc3Bpbl91bmxvY2tfaXJxKCZzM2NfcnRjX3BpZV9sb2NrKTsKK30KKworLyogVGltZSByZWFkL3dyaXRlICovCisKK3N0YXRpYyBpbnQgczNjX3J0Y19nZXR0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCit7CisJdW5zaWduZWQgaW50IGhhdmVfcmV0cmllZCA9IDA7CisKKyByZXRyeV9nZXRfdGltZToKKwlydGNfdG0tPnRtX21pbiAgPSByZWFkYihTM0MyNDEwX1JUQ01JTik7CisJcnRjX3RtLT50bV9ob3VyID0gcmVhZGIoUzNDMjQxMF9SVENIT1VSKTsKKwlydGNfdG0tPnRtX21kYXkgPSByZWFkYihTM0MyNDEwX1JUQ0RBVEUpOworCXJ0Y190bS0+dG1fbW9uICA9IHJlYWRiKFMzQzI0MTBfUlRDTU9OKTsKKwlydGNfdG0tPnRtX3llYXIgPSByZWFkYihTM0MyNDEwX1JUQ1lFQVIpOworCXJ0Y190bS0+dG1fc2VjICA9IHJlYWRiKFMzQzI0MTBfUlRDU0VDKTsKKworCS8qIHRoZSBvbmx5IHdheSB0byB3b3JrIG91dCB3ZXRoZXIgdGhlIHN5c3RlbSB3YXMgbWlkLXVwZGF0ZQorCSAqIHdoZW4gd2UgcmVhZCBpdCBpcyB0byBjaGVjayB0aGUgc2Vjb25kIGNvdW50ZXIsIGFuZCBpZiBpdAorCSAqIGlzIHplcm8sIHRoZW4gd2UgcmUtdHJ5IHRoZSBlbnRpcmUgcmVhZAorCSAqLworCisJaWYgKHJ0Y190bS0+dG1fc2VjID09IDAgJiYgIWhhdmVfcmV0cmllZCkgeworCQloYXZlX3JldHJpZWQgPSAxOworCQlnb3RvIHJldHJ5X2dldF90aW1lOworCX0KKworCXByX2RlYnVnKCJyZWFkIHRpbWUgJTAyeC4lMDJ4LiUwMnggJTAyeC8lMDJ4LyUwMnhcbiIsCisJCSBydGNfdG0tPnRtX3llYXIsIHJ0Y190bS0+dG1fbW9uLCBydGNfdG0tPnRtX21kYXksCisJCSBydGNfdG0tPnRtX2hvdXIsIHJ0Y190bS0+dG1fbWluLCBydGNfdG0tPnRtX3NlYyk7CisKKwlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKKwlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKKwlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7CisJQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOworCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOworCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKworCXJ0Y190bS0+dG1feWVhciArPSAxMDA7CisJcnRjX3RtLT50bV9tb24gLT0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19ydGNfc2V0dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJLyogdGhlIHJ0YyBnZXRzIHJvdW5kIHRoZSB5MmsgcHJvYmxlbSBieSBqdXN0IG5vdCBzdXBwb3J0aW5nIGl0ICovCisKKwlpZiAodG0tPnRtX3llYXIgPCAxMDApCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksICBTM0MyNDEwX1JUQ1NFQyk7CisJd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksICBTM0MyNDEwX1JUQ01JTik7CisJd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBTM0MyNDEwX1JUQ0hPVVIpOworCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgUzNDMjQxMF9SVENEQVRFKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIFMzQzI0MTBfUlRDTU9OKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAtIDEwMCksIFMzQzI0MTBfUlRDWUVBUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfcnRjX2dldGFsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IHJ0Y190aW1lICphbG1fdG0gPSAmYWxybS0+dGltZTsKKwl1bnNpZ25lZCBpbnQgYWxtX2VuOworCisJYWxtX3RtLT50bV9zZWMgID0gcmVhZGIoUzNDMjQxMF9BTE1TRUMpOworCWFsbV90bS0+dG1fbWluICA9IHJlYWRiKFMzQzI0MTBfQUxNTUlOKTsKKwlhbG1fdG0tPnRtX2hvdXIgPSByZWFkYihTM0MyNDEwX0FMTUhPVVIpOworCWFsbV90bS0+dG1fbW9uICA9IHJlYWRiKFMzQzI0MTBfQUxNTU9OKTsKKwlhbG1fdG0tPnRtX21kYXkgPSByZWFkYihTM0MyNDEwX0FMTURBVEUpOworCWFsbV90bS0+dG1feWVhciA9IHJlYWRiKFMzQzI0MTBfQUxNWUVBUik7CisKKwlhbG1fZW4gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7CisKKwlwcl9kZWJ1ZygicmVhZCBhbGFybSAlMDJ4ICUwMnguJTAyeC4lMDJ4ICUwMngvJTAyeC8lMDJ4XG4iLAorCQkgYWxtX2VuLAorCQkgYWxtX3RtLT50bV95ZWFyLCBhbG1fdG0tPnRtX21vbiwgYWxtX3RtLT50bV9tZGF5LAorCQkgYWxtX3RtLT50bV9ob3VyLCBhbG1fdG0tPnRtX21pbiwgYWxtX3RtLT50bV9zZWMpOworCisKKwkvKiBkZWNvZGUgdGhlIGFsYXJtIGVuYWJsZSBmaWVsZCAqLworCisJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX1NFQ0VOKQorCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fc2VjKTsKKwllbHNlCisJCWFsbV90bS0+dG1fc2VjID0gMHhmZjsKKworCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9NSU5FTikKKwkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21pbik7CisJZWxzZQorCQlhbG1fdG0tPnRtX21pbiA9IDB4ZmY7CisKKwlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fSE9VUkVOKQorCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1faG91cik7CisJZWxzZQorCQlhbG1fdG0tPnRtX2hvdXIgPSAweGZmOworCisJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX0RBWUVOKQorCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWRheSk7CisJZWxzZQorCQlhbG1fdG0tPnRtX21kYXkgPSAweGZmOworCisJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX01PTkVOKSB7CisJCUJDRF9UT19CSU4oYWxtX3RtLT50bV9tb24pOworCQlhbG1fdG0tPnRtX21vbiAtPSAxOworCX0gZWxzZSB7CisJCWFsbV90bS0+dG1fbW9uID0gMHhmZjsKKwl9CisKKwlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fWUVBUkVOKQorCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1feWVhcik7CisJZWxzZQorCQlhbG1fdG0tPnRtX3llYXIgPSAweGZmZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfcnRjX3NldGFsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IHJ0Y190aW1lICp0bSA9ICZhbHJtLT50aW1lOworCXVuc2lnbmVkIGludCBhbHJtX2VuOworCisJcHJfZGVidWcoInMzY19ydGNfc2V0YWxhcm06ICVkLCAlMDJ4LyUwMngvJTAyeCAlMDJ4LiUwMnguJTAyeFxuIiwKKwkJIGFscm0tPmVuYWJsZWQsCisJCSB0bS0+dG1fbWRheSAmIDB4ZmYsIHRtLT50bV9tb24gJiAweGZmLCB0bS0+dG1feWVhciAmIDB4ZmYsCisJCSB0bS0+dG1faG91ciAmIDB4ZmYsIHRtLT50bV9taW4gJiAweGZmLCB0bS0+dG1fc2VjKTsKKworCisJYWxybV9lbiA9IHJlYWRiKFMzQzI0MTBfUlRDQUxNKSAmIFMzQzI0MTBfUlRDQUxNX0FMTUVOOworCXdyaXRlYigweDAwLCBTM0MyNDEwX1JUQ0FMTSk7CisKKwlpZiAodG0tPnRtX3NlYyA8IDYwICYmIHRtLT50bV9zZWMgPj0gMCkgeworCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX1NFQ0VOOworCQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgUzNDMjQxMF9BTE1TRUMpOworCX0KKworCWlmICh0bS0+dG1fbWluIDwgNjAgJiYgdG0tPnRtX21pbiA+PSAwKSB7CisJCWFscm1fZW4gfD0gUzNDMjQxMF9SVENBTE1fTUlORU47CisJCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBTM0MyNDEwX0FMTU1JTik7CisJfQorCisJaWYgKHRtLT50bV9ob3VyIDwgMjQgJiYgdG0tPnRtX2hvdXIgPj0gMCkgeworCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX0hPVVJFTjsKKwkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBTM0MyNDEwX0FMTUhPVVIpOworCX0KKworCXByX2RlYnVnKCJzZXR0aW5nIFMzQzI0MTBfUlRDQUxNIHRvICUwOHhcbiIsIGFscm1fZW4pOworCisJd3JpdGViKGFscm1fZW4sIFMzQzI0MTBfUlRDQUxNKTsKKworCWlmICgwKSB7CisJCWFscm1fZW4gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7CisJCWFscm1fZW4gJj0gflMzQzI0MTBfUlRDQUxNX0FMTUVOOworCQl3cml0ZWIoYWxybV9lbiwgUzNDMjQxMF9SVENBTE0pOworCQlkaXNhYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJfQorCisJaWYgKGFscm0tPmVuYWJsZWQpCisJCWVuYWJsZV9pcnFfd2FrZShzM2NfcnRjX2FsYXJtbm8pOworCWVsc2UKKwkJZGlzYWJsZV9pcnFfd2FrZShzM2NfcnRjX2FsYXJtbm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgaW50IHJldCA9IC1FTk9JT0NUTENNRDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09GRjoKKwljYXNlIFJUQ19BSUVfT046CisJCXMzY19ydGNfc2V0YWllKChjbWQgPT0gUlRDX0FJRV9PTikgPyAxIDogMCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBSVENfUElFX09GRjoKKwljYXNlIFJUQ19QSUVfT046CisJCXRpY2tfY291bnQgPSAwOworCQlzM2NfcnRjX3NldHBpZSgoY21kID09IFJUQ19QSUVfT04pID8gMSA6IDApOworCQlyZXQgPSAwOworCQlicmVhazsKKworCWNhc2UgUlRDX0lSUVBfUkVBRDoKKwkJcmV0ID0gcHV0X3VzZXIoczNjX3J0Y19mcmVxLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgUlRDX0lSUVBfU0VUOgorCQkvKiBjaGVjayBmb3IgcG93ZXIgb2YgMiAqLworCisJCWlmICgoYXJnICYgKGFyZy0xKSkgIT0gMCB8fCBhcmcgPCAxKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisKKwkJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBzZXR0aW5nIGZyZXF1ZW5jeSAlbGRcbiIsIGFyZyk7CisKKwkJczNjX3J0Y19zZXRmcmVxKGFyZyk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBSVENfVUlFX09OOgorCWNhc2UgUlRDX1VJRV9PRkY6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisgZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHMzY19ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXVuc2lnbmVkIGludCBydGNhbG0gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7CisJdW5zaWduZWQgaW50IHRpY250ID0gcmVhZGIgKFMzQzI0MTBfVElDTlQpOworCisJc2VxX3ByaW50ZihzZXEsICJhbGFybV9JUlFcdDogJXNcbiIsCisJCSAgIChydGNhbG0gJiBTM0MyNDEwX1JUQ0FMTV9BTE1FTikgPyAieWVzIiA6ICJubyIgKTsKKworCXNlcV9wcmludGYoc2VxLCAicGVyaW9kaWNfSVJRXHQ6ICVzXG4iLAorCQkgICAgICh0aWNudCAmIFMzQzI0MTBfVElDTlRfRU5BQkxFKSA/ICJ5ZXMiIDogIm5vIiApOworCisJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19mcmVxXHQ6ICVkXG4iLCBzM2NfcnRjX2ZyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX3J0Y19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Y19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEoczNjX3J0Y19hbGFybW5vLCBzM2NfcnRjX2FsYXJtaXJxLAorCQkJICBTQV9JTlRFUlJVUFQsICAiczNjMjQxMC1ydGMgYWxhcm0iLCBydGNfZGV2KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJJUlElZCBlcnJvciAlZFxuIiwgczNjX3J0Y19hbGFybW5vLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHMzY19ydGNfdGlja25vLCBzM2NfcnRjX3RpY2tpcnEsCisJCQkgIFNBX0lOVEVSUlVQVCwgICJzM2MyNDEwLXJ0YyB0aWNrIiwgcnRjX2Rldik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiSVJRJWQgZXJyb3IgJWRcbiIsIHMzY19ydGNfdGlja25vLCByZXQpOworCQlnb3RvIHRpY2tfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKKyB0aWNrX2VycjoKKwlmcmVlX2lycShzM2NfcnRjX2FsYXJtbm8sIHJ0Y19kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBkbyBub3QgY2xlYXIgQUlFIGhlcmUsIGl0IG1heSBiZSBuZWVkZWQgZm9yIHdha2UgKi8KKworCXMzY19ydGNfc2V0cGllKDApOworCWZyZWVfaXJxKHMzY19ydGNfYWxhcm1ubywgcnRjX2Rldik7CisJZnJlZV9pcnEoczNjX3J0Y190aWNrbm8sIHJ0Y19kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgczNjX3J0Y29wcyA9IHsKKwkub3BlbgkJPSBzM2NfcnRjX29wZW4sCisJLnJlbGVhc2UJPSBzM2NfcnRjX3JlbGVhc2UsCisJLmlvY3RsCQk9IHMzY19ydGNfaW9jdGwsCisJLnJlYWRfdGltZQk9IHMzY19ydGNfZ2V0dGltZSwKKwkuc2V0X3RpbWUJPSBzM2NfcnRjX3NldHRpbWUsCisJLnJlYWRfYWxhcm0JPSBzM2NfcnRjX2dldGFsYXJtLAorCS5zZXRfYWxhcm0JPSBzM2NfcnRjX3NldGFsYXJtLAorCS5wcm9jCSAgICAgICAgPSBzM2NfcnRjX3Byb2MsCit9OworCitzdGF0aWMgdm9pZCBzM2NfcnRjX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZW4pCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCWlmIChzM2NfcnRjX2Jhc2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFlbikgeworCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CisJCXdyaXRlYih0bXAgJiB+UzNDMjQxMF9SVENDT05fUlRDRU4sIFMzQzI0MTBfUlRDQ09OKTsKKworCQl0bXAgPSByZWFkYihTM0MyNDEwX1RJQ05UKTsKKwkJd3JpdGViKHRtcCAmIH5TM0MyNDEwX1RJQ05UX0VOQUJMRSwgUzNDMjQxMF9USUNOVCk7CisJfSBlbHNlIHsKKwkJLyogcmUtZW5hYmxlIHRoZSBkZXZpY2UsIGFuZCBjaGVjayBpdCBpcyBvayAqLworCisJCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fUlRDRU4pID09IDApeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOworCisJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CisJCQl3cml0ZWIodG1wIHwgUzNDMjQxMF9SVENDT05fUlRDRU4gLCBTM0MyNDEwX1JUQ0NPTik7CisJCX0KKworCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NOVFNFTCkpeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92aW5nIFJUQ0NPTl9DTlRTRUxcbiIpOworCisJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CisJCQl3cml0ZWIodG1wJiB+UzNDMjQxMF9SVENDT05fQ05UU0VMICwgUzNDMjQxMF9SVENDT04pOworCQl9CisKKwkJaWYgKChyZWFkYihTM0MyNDEwX1JUQ0NPTikgJiBTM0MyNDEwX1JUQ0NPTl9DTEtSU1QpKXsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZW1vdmluZyBSVENDT05fQ0xLUlNUXG4iKTsKKworCQkJdG1wID0gcmVhZGIoUzNDMjQxMF9SVENDT04pOworCQkJd3JpdGViKHRtcCAmIH5TM0MyNDEwX1JUQ0NPTl9DTEtSU1QsIFMzQzI0MTBfUlRDQ09OKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzM2NfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCisJczNjX3J0Y19zZXRwaWUoMCk7CisJczNjX3J0Y19zZXRhaWUoMCk7CisKKwlpb3VubWFwKHMzY19ydGNfYmFzZSk7CisJcmVsZWFzZV9yZXNvdXJjZShzM2NfcnRjX21lbSk7CisJa2ZyZWUoczNjX3J0Y19tZW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCXByX2RlYnVnKCIlczogcHJvYmU9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CisKKwkvKiBmaW5kIHRoZSBJUlFzICovCisKKwlzM2NfcnRjX3RpY2tubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKHMzY19ydGNfdGlja25vIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIHJ0YyB0aWNrXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJczNjX3J0Y19hbGFybW5vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoczNjX3J0Y19hbGFybW5vIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIGFsYXJtXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcHJfZGVidWcoInMzYzI0MTBfcnRjOiB0aWNrIGlycSAlZCwgYWxhcm0gaXJxICVkXG4iLAorCQkgczNjX3J0Y190aWNrbm8sIHMzY19ydGNfYWxhcm1ubyk7CisKKwkvKiBnZXQgdGhlIG1lbW9yeSByZWdpb24gKi8KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXMzY19ydGNfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsCisJCQkJCSAgICAgcmVzLT5lbmQtcmVzLT5zdGFydCsxLAorCQkJCQkgICAgIHBkZXYtPm5hbWUpOworCisJaWYgKHMzY19ydGNfbWVtID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX25vcmVzOworCX0KKworCXMzY19ydGNfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKHMzY19ydGNfYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCBpb3JlbWFwKClcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9ub21hcDsKKwl9CisKKwkvKiBjaGVjayB0byBzZWUgaWYgZXZlcnl0aGluZyBpcyBzZXR1cCBjb3JyZWN0bHkgKi8KKworCXMzY19ydGNfZW5hYmxlKHBkZXYsIDEpOworCisgCXByX2RlYnVnKCJzM2MyNDEwX3J0YzogUlRDQ09OPSUwMnhcbiIsIHJlYWRiKFMzQzI0MTBfUlRDQ09OKSk7CisKKwlzM2NfcnRjX3NldGZyZXEoczNjX3J0Y19mcmVxKTsKKworCS8qIHJlZ2lzdGVyIFJUQyBhbmQgZXhpdCAqLworCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiczNjIiwgJnBkZXYtPmRldiwgJnMzY19ydGNvcHMsCisJCQkJICBUSElTX01PRFVMRSk7CisKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGF0dGFjaCBydGNcbiIpOworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWdvdG8gZXJyX25vcnRjOworCX0KKworCXJ0Yy0+bWF4X3VzZXJfZnJlcSA9IDEyODsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CisJcmV0dXJuIDA7CisKKyBlcnJfbm9ydGM6CisJczNjX3J0Y19lbmFibGUocGRldiwgMCk7CisJaW91bm1hcChzM2NfcnRjX2Jhc2UpOworCisgZXJyX25vbWFwOgorCXJlbGVhc2VfcmVzb3VyY2UoczNjX3J0Y19tZW0pOworCisgZXJyX25vcmVzOgorCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworLyogUlRDIFBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCAqLworCitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHMzY19ydGNfZGVsdGE7CisKK3N0YXRpYyBpbnQgdGljbnRfc2F2ZTsKKworc3RhdGljIGludCBzM2NfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBydGNfdGltZSB0bTsKKwlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKKworCXRpbWUudHZfbnNlYyA9IDA7CisKKwkvKiBzYXZlIFRJQ05UIGZvciBhbnlvbmUgdXNpbmcgcGVyaW9kaWMgaW50ZXJydXB0cyAqLworCisJdGljbnRfc2F2ZSA9IHJlYWRiKFMzQzI0MTBfVElDTlQpOworCisJLyogY2FsY3VsYXRlIHRpbWUgZGVsdGEgZm9yIHN1c3BlbmQgKi8KKworCXMzY19ydGNfZ2V0dGltZSgmcGRldi0+ZGV2LCAmdG0pOworCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKKwlzYXZlX3RpbWVfZGVsdGEoJnMzY19ydGNfZGVsdGEsICZ0aW1lKTsKKwlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCXN0cnVjdCB0aW1lc3BlYyB0aW1lOworCisJdGltZS50dl9uc2VjID0gMDsKKworCXMzY19ydGNfZW5hYmxlKHBkZXYsIDEpOworCXMzY19ydGNfZ2V0dGltZSgmcGRldi0+ZGV2LCAmdG0pOworCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKKwlyZXN0b3JlX3RpbWVfZGVsdGEoJnMzY19ydGNfZGVsdGEsICZ0aW1lKTsKKworCXdyaXRlYih0aWNudF9zYXZlLCBTM0MyNDEwX1RJQ05UKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzY19ydGNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzY19ydGNfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9ydGNkcnYgPSB7CisJLnByb2JlCQk9IHMzY19ydGNfcHJvYmUsCisJLnJlbW92ZQkJPSBzM2NfcnRjX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzY19ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzY19ydGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgY2hhciBfX2luaXRkYXRhIGJhbm5lcltdID0gIlMzQzI0WFggUlRDLCAoYykgMjAwNCwyMDA2IFNpbXRlYyBFbGVjdHJvbmljc1xuIjsKKworc3RhdGljIGludCBfX2luaXQgczNjX3J0Y19pbml0KHZvaWQpCit7CisJcHJpbnRrKGJhbm5lcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjX3J0Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKK30KKworbW9kdWxlX2luaXQoczNjX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHMzY19ydGNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0MgUlRDIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IDljZDFjYjMuLmVlNGI2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTE1NywxOSArMTU3LDE5IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVEMxSHosIHNhMTEwMF9ydGNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1JUQzFIeiwgc2ExMTAwX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQkJInJ0YyAxSHoiLCBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDMUh6KTsKIAkJZ290byBmYWlsX3VpOwogCX0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfUlRDQWxybSwgc2ExMTAwX3J0Y19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfUlRDQWxybSwgc2ExMTAwX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQkJInJ0YyBBbHJtIiwgZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiSVJRICVkIGFscmVhZHkgaW4gdXNlLlxuIiwgSVJRX1JUQ0Fscm0pOwogCQlnb3RvIGZhaWxfYWk7CiAJfQotCXJldCA9IHJlcXVlc3RfaXJxKElSUV9PU1QxLCB0aW1lcjFfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX09TVDEsIHRpbWVyMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQkJInJ0YyB0aW1lciIsIGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgIklSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9PU1QxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCA0YjkyOTFkLi5iYjZkNWZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMzQ1LDExICszNDUsMTEgQEAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCWlycSA9IEVMQVBTRURUSU1FX0lSUTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGVsYXBzZWR0aW1lX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgZWxhcHNlZHRpbWVfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCSAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkX3RpbWUiLCBwZGV2KTsKIAlpZiAocmV0dmFsID09IDApIHsKIAkJaXJxID0gUlRDTE9ORzFfSVJROwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJICAgICAgICAgICAgICAgICAgICAgInJ0Y2xvbmcxIiwgcGRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBjZmIxZmZmLi40YmYwM2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtOTUsNyArOTQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZkZXZpY2UtPm1lbV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogCWF0b21pY19zZXQgKCZkZXZpY2UtPnRhc2tsZXRfc2NoZWR1bGVkLCAwKTsKLQl0YXNrbGV0X2luaXQoJmRldmljZS0+dGFza2xldCwgCisJdGFza2xldF9pbml0KCZkZXZpY2UtPnRhc2tsZXQsCiAJCSAgICAgKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSBkYXNkX3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGRldmljZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+Y2N3X3F1ZXVlKTsKQEAgLTEyOCw3ICsxMjcsNyBAQAogCWludCByYzsKIAogCS8qCi0JICogQXMgbG9uZyBhcyB0aGUgZGV2aWNlIGlzIG5vdCBpbiBzdGF0ZSBEQVNEX1NUQVRFX05FVyB3ZSB3YW50IHRvIAorCSAqIEFzIGxvbmcgYXMgdGhlIGRldmljZSBpcyBub3QgaW4gc3RhdGUgREFTRF9TVEFURV9ORVcgd2Ugd2FudCB0bwogCSAqIGtlZXAgdGhlIHJlZmVyZW5jZSBjb3VudCA+IDAuCiAJICovCiAJZGFzZF9nZXRfZGV2aWNlKGRldmljZSk7CkBAIC0zMzYsNyArMzM1LDcgQEAKIAlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX09OTElORSAmJgogCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX1JFQURZKQogCQlkYXNkX3N0YXRlX29ubGluZV90b19yZWFkeShkZXZpY2UpOwotCQorCiAJaWYgKGRldmljZS0+c3RhdGUgPT0gREFTRF9TVEFURV9SRUFEWSAmJgogCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX0JBU0lDKQogCQlkYXNkX3N0YXRlX3JlYWR5X3RvX2Jhc2ljKGRldmljZSk7CkBAIC0zNDgsNyArMzQ3LDcgQEAKIAlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX0JBU0lDICYmCiAJICAgIGRldmljZS0+dGFyZ2V0IDw9IERBU0RfU1RBVEVfS05PV04pCiAJCWRhc2Rfc3RhdGVfYmFzaWNfdG9fa25vd24oZGV2aWNlKTsKLQkKKwogCWlmIChkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfS05PV04gJiYKIAkgICAgZGV2aWNlLT50YXJnZXQgPD0gREFTRF9TVEFURV9ORVcpCiAJCWRhc2Rfc3RhdGVfa25vd25fdG9fbmV3KGRldmljZSk7CkBAIC05OTQsNyArOTkzLDcgQEAKIAkJICAgICAgKChpcmItPnNjc3cuY3N0YXQgPDwgOCkgfCBpcmItPnNjc3cuZHN0YXQpLCBjcXIpOwogCiAgCS8qIEZpbmQgb3V0IHRoZSBhcHByb3ByaWF0ZSBlcmFfYWN0aW9uLiAqLwotCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9IQUxUX0ZVTkMpIAorCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9IQUxUX0ZVTkMpCiAJCWVyYSA9IGRhc2RfZXJhX2ZhdGFsOwogCWVsc2UgaWYgKGlyYi0+c2Nzdy5kc3RhdCA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCiAJCSBpcmItPnNjc3cuY3N0YXQgPT0gMCAmJgpAQCAtMTAwNCw3ICsxMDAzLDcgQEAKICAJICAgICAgICBlcmEgPSBkYXNkX2VyYV9mYXRhbDsgLyogZG9uJ3QgcmVjb3ZlciB0aGlzIHJlcXVlc3QgKi8KIAllbHNlIGlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKQogCQllcmEgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPmV4YW1pbmVfZXJyb3IoY3FyLCBpcmIpOwotCWVsc2UgCisJZWxzZQogCQllcmEgPSBkYXNkX2VyYV9yZWNvdmVyOwogCiAJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImVyYV9jb2RlICVkIiwgZXJhKTsKQEAgLTEyODcsNyArMTI4Niw3IEBACiB9CiAKIC8qCi0gKiBSZW1vdmUgcmVxdWVzdHMgZnJvbSB0aGUgY2N3IHF1ZXVlLiAKKyAqIFJlbW92ZSByZXF1ZXN0cyBmcm9tIHRoZSBjY3cgcXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBkYXNkX2ZsdXNoX2Njd19xdWV1ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UsIGludCBhbGwpCkBAIC0xNDUwLDIzICsxNDQ5LDIzIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKLQkKKwogCWRldmljZSA9IGNxci0+ZGV2aWNlOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwotCQorCiAJaW5pdF93YWl0cXVldWVfaGVhZCAoJndhaXRfcSk7CiAJY3FyLT5jYWxsYmFjayA9IGRhc2Rfd2FrZXVwX2NiOwogCWNxci0+Y2FsbGJhY2tfZGF0YSA9ICh2b2lkICopICZ3YWl0X3E7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJbGlzdF9hZGRfdGFpbCgmY3FyLT5saXN0LCAmZGV2aWNlLT5jY3dfcXVldWUpOwotCQorCiAJLyogbGV0IHRoZSBiaCBzdGFydCB0aGUgcmVxdWVzdCB0byBrZWVwIHRoZW0gaW4gb3JkZXIgKi8KIAlkYXNkX3NjaGVkdWxlX2JoKGRldmljZSk7Ci0JCisKIAlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCiAJd2FpdF9ldmVudCh3YWl0X3EsIF93YWl0X2Zvcl93YWtldXAoY3FyKSk7Ci0JCisKIAkvKiBSZXF1ZXN0IHN0YXR1cyBpcyBlaXRoZXIgZG9uZSBvciBmYWlsZWQuICovCiAJcmMgPSAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfRkFJTEVEKSA/IC1FSU8gOiAwOwogCXJldHVybiByYzsKQEAgLTE1NjgsNyArMTU2Nyw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKLQkKKwogCWRldmljZSA9IGNxci0+ZGV2aWNlOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCXJjID0gX2Rhc2RfdGVybV9ydW5uaW5nX2NxcihkZXZpY2UpOwpAQCAtMTU3NiwyMCArMTU3NSwyMCBAQAogCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCQlyZXR1cm4gcmM7CiAJfQotCQorCiAJaW5pdF93YWl0cXVldWVfaGVhZCAoJndhaXRfcSk7CiAJY3FyLT5jYWxsYmFjayA9IGRhc2Rfd2FrZXVwX2NiOwogCWNxci0+Y2FsbGJhY2tfZGF0YSA9ICh2b2lkICopICZ3YWl0X3E7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJbGlzdF9hZGQoJmNxci0+bGlzdCwgJmRldmljZS0+Y2N3X3F1ZXVlKTsKLQkKKwogCS8qIGxldCB0aGUgYmggc3RhcnQgdGhlIHJlcXVlc3QgdG8ga2VlcCB0aGVtIGluIG9yZGVyICovCiAJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOwotCQorCiAJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAogCXdhaXRfZXZlbnQod2FpdF9xLCBfd2FpdF9mb3Jfd2FrZXVwKGNxcikpOwotCQorCiAJLyogUmVxdWVzdCBzdGF0dXMgaXMgZWl0aGVyIGRvbmUgb3IgZmFpbGVkLiAqLwogCXJjID0gKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkgPyAtRUlPIDogMDsKIAlyZXR1cm4gcmM7CkBAIC0xNzI1LDcgKzE3MjQsNyBAQAogCiAJaWYgKCFkZXZpY2UtPnJlcXVlc3RfcXVldWUpCiAJCXJldHVybjsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmRldmljZS0+cmVxdWVzdF9xdWV1ZV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldmljZS0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfaGVhZCkpIHsKIAkJcmVxID0gZWx2X25leHRfcmVxdWVzdChkZXZpY2UtPnJlcXVlc3RfcXVldWUpOwpAQCAtMTgzNCw3ICsxODMzLDYgQEAKIAl9CiAJZGFzZF9nZW5kaXNrX2V4aXQoKTsKIAlkYXNkX2Rldm1hcF9leGl0KCk7Ci0JZGV2ZnNfcmVtb3ZlKCJkYXNkIik7CiAJaWYgKGRhc2RfZGVidWdfYXJlYSAhPSBOVUxMKSB7CiAJCWRlYnVnX3VucmVnaXN0ZXIoZGFzZF9kZWJ1Z19hcmVhKTsKIAkJZGFzZF9kZWJ1Z19hcmVhID0gTlVMTDsKQEAgLTE4NTUsMTUgKzE4NTMsMzQgQEAKIHsKIAlpbnQgcmV0OwogCisJcmV0ID0gY2N3X2RldmljZV9zZXRfb3B0aW9ucyhjZGV2LCBDQ1dERVZfRE9fUEFUSEdST1VQKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBzZXQgY2N3LWRldmljZSBvcHRpb25zICIKKwkJICAgICAgICJmb3IgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOworCQlyZXR1cm4gcmV0OworCX0KIAlyZXQgPSBkYXNkX2FkZF9zeXNmc19maWxlcyhjZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBhZGQgc3lzZnMgZW50cmllcyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBjZGV2LT5kZXYuYnVzX2lkKTsKLQl9IGVsc2UgewotCQljZGV2LT5oYW5kbGVyID0gJmRhc2RfaW50X2hhbmRsZXI7CisJCXJldHVybiByZXQ7CiAJfQorCWNkZXYtPmhhbmRsZXIgPSAmZGFzZF9pbnRfaGFuZGxlcjsKIAorCS8qCisJICogQXV0b21hdGljYWxseSBvbmxpbmUgZWl0aGVyIGFsbCBkYXNkIGRldmljZXMgKGRhc2RfYXV0b2RldGVjdCkKKwkgKiBvciBhbGwgZGV2aWNlcyBzcGVjaWZpZWQgd2l0aCBkYXNkPSBwYXJhbWV0ZXJzIGR1cmluZworCSAqIGluaXRpYWwgcHJvYmUuCisJICovCisJaWYgKChkYXNkX2dldF9mZWF0dXJlKGNkZXYsIERBU0RfRkVBVFVSRV9JTklUSUFMX09OTElORSkgPiAwICkgfHwKKwkgICAgKGRhc2RfYXV0b2RldGVjdCAmJiBkYXNkX2J1c2lkX2tub3duKGNkZXYtPmRldi5idXNfaWQpICE9IDApKQorCQlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2Rldik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IGluaXRpYWxseSBvbmxpbmUgIgorCQkgICAgICAgImNjdy1kZXZpY2UgJXNcbiIsIGNkZXYtPmRldi5idXNfaWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5MTEsNiArMTkyOCw4IEBACiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJjOwogCisJLyogZmlyc3Qgb25saW5lIGNsZWFycyBpbml0aWFsIG9ubGluZSBmZWF0dXJlIGZsYWcgKi8KKwlkYXNkX3NldF9mZWF0dXJlKGNkZXYsIERBU0RfRkVBVFVSRV9JTklUSUFMX09OTElORSwgMCk7CiAJZGV2aWNlID0gZGFzZF9jcmVhdGVfZGV2aWNlKGNkZXYpOwogCWlmIChJU19FUlIoZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGV2aWNlKTsKQEAgLTIwNjUsMzEgKzIwODQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBBdXRvbWF0aWNhbGx5IG9ubGluZSBlaXRoZXIgYWxsIGRhc2QgZGV2aWNlcyAoZGFzZF9hdXRvZGV0ZWN0KSBvcgotICogYWxsIGRldmljZXMgc3BlY2lmaWVkIHdpdGggZGFzZD0gcGFyYW1ldGVycy4KLSAqLwotc3RhdGljIGludAotX19kYXNkX2F1dG9fb25saW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKLQotCWNkZXYgPSB0b19jY3dkZXYoZGV2KTsKLQlpZiAoZGFzZF9hdXRvZGV0ZWN0IHx8IGRhc2RfYnVzaWRfa25vd24oY2Rldi0+ZGV2LmJ1c19pZCkgPT0gMCkKLQkJY2N3X2RldmljZV9zZXRfb25saW5lKGNkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkCi1kYXNkX2dlbmVyaWNfYXV0b19vbmxpbmUgKHN0cnVjdCBjY3dfZHJpdmVyICpkYXNkX2Rpc2NpcGxpbmVfZHJpdmVyKQotewotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7Ci0KLQlkcnYgPSBnZXRfZHJpdmVyKCZkYXNkX2Rpc2NpcGxpbmVfZHJpdmVyLT5kcml2ZXIpOwotCWRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoZHJ2LCBOVUxMLCBOVUxMLCBfX2Rhc2RfYXV0b19vbmxpbmUpOwotCXB1dF9kcml2ZXIoZHJ2KTsKLX0KLQogCiBzdGF0aWMgaW50IF9faW5pdAogZGFzZF9pbml0KHZvaWQpCkBAIC0yMTExLDkgKzIxMDUsNiBAQAogCiAJZGFzZF9kaWFnX2Rpc2NpcGxpbmVfcG9pbnRlciA9IE5VTEw7CiAKLQlyYyA9IGRldmZzX21rX2RpcigiZGFzZCIpOwotCWlmIChyYykKLQkJZ290byBmYWlsZWQ7CiAJcmMgPSBkYXNkX2Rldm1hcF9pbml0KCk7CiAJaWYgKHJjKQogCQlnb3RvIGZhaWxlZDsKQEAgLTIxNzAsMjMgKzIxNjEsNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX25vdGlmeSk7CiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfc2V0X29ubGluZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUpOwotRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX2F1dG9fb25saW5lKTsKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1pbmRlbnQtbGV2ZWw6IDQKLSAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAotICogYy1icmFjZS1vZmZzZXQ6IC00Ci0gKiBjLWFyZ2RlY2wtaW5kZW50OiA0Ci0gKiBjLWxhYmVsLW9mZnNldDogLTQKLSAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKLSAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAotICogaW5kZW50LXRhYnMtbW9kZTogMQotICogdGFiLXdpZHRoOiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzMzNzBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zMzcwX2VycC5jCmluZGV4IDFkMTFjMmEuLjFkZGFiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzMzNzBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzM3MF9lcnAuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzM3MF9lcnAuYwogICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+CiAgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgpAQCAtMTIsMTAgKzEyLDEwIEBACiAKIAogLyoKLSAqIERBU0RfMzM3MF9FUlBfRVhBTUlORSAKKyAqIERBU0RfMzM3MF9FUlBfRVhBTUlORQogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyIGVycm9yLiAKKyAqICAgQ2hlY2tzIG9ubHkgZm9yIGZhdGFsL25vL3JlY292ZXIgZXJyb3IuCiAgKiAgIEEgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgdGhlIHNlbnNlIGRhdGEgaXMgZG9uZSBsYXRlciBvdXRzaWRlCiAgKiAgIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqCkBAIC0yMyw3ICsyMyw3IEBACiAgKiAgICdDaGFwdGVyIDcuIDMzNzAgU2Vuc2UgRGF0YScuCiAgKgogICogUkVUVVJOIFZBTFVFUwotICogICBkYXNkX2VyYV9ub25lCW5vIGVycm9yIAorICogICBkYXNkX2VyYV9ub25lCW5vIGVycm9yCiAgKiAgIGRhc2RfZXJhX2ZhdGFsCWZvciBhbGwgZmF0YWwgKHVucmVjb3ZlcmFibGUgZXJyb3JzKQogICogICBkYXNkX2VyYV9yZWNvdmVyCWZvciBhbGwgb3RoZXJzLgogICovCkBAIC04MiwyMiArODIsMyBAQAogCXJldHVybiBkYXNkX2VyYV9yZWNvdmVyOwogCiB9CQkJCS8qIEVORCBkYXNkXzMzNzBfZXJwX2V4YW1pbmUgKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1pbmRlbnQtbGV2ZWw6IDQgCi0gKiBjLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKLSAqIGMtYnJhY2Utb2Zmc2V0OiAtNAotICogYy1hcmdkZWNsLWluZGVudDogNAotICogYy1sYWJlbC1vZmZzZXQ6IC00Ci0gKiBjLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiA0Ci0gKiBjLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKLSAqIGluZGVudC10YWJzLW1vZGU6IDEKLSAqIHRhYi13aWR0aDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCAyZWQ1MTU2Li42Njk4MDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTEsNiArMSw2IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKLSAqIEF1dGhvcihzKS4uLi4uLjogSG9yc3QgIEh1bW1lbCAgICA8SG9yc3QuSHVtbWVsQGRlLmlibS5jb20+IAorICogQXV0aG9yKHMpLi4uLi4uOiBIb3JzdCAgSHVtbWVsICAgIDxIb3JzdC5IdW1tZWxAZGUuaWJtLmNvbT4KICAqCQkgICAgSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAyMDAwLCAyMDAxCkBAIC0yNSwyMyArMjUsMjMgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRUNUSU9OIEVSUCBFWEFNSU5BVElPTgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8yNCAKKyAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8yNAogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbCAodW5yZWNvdmVyYWJsZSkgZXJyb3IuIAorICogICBDaGVja3Mgb25seSBmb3IgZmF0YWwgKHVucmVjb3ZlcmFibGUpIGVycm9yLgogICogICBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGRvbmUgbGF0ZXIgb3V0c2lkZQogICogICB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCiAgKgogICogICBFYWNoIGJpdCBjb25maWd1cmF0aW9uIGxlYWRpbmcgdG8gYW4gYWN0aW9uIGNvZGUgMiAoRXhpdCB3aXRoCiAgKiAgIHByb2dyYW1taW5nIGVycm9yIG9yIHVudXN1YWwgY29uZGl0aW9uIGluZGljYXRpb24pCiAgKiAgIGFyZSBoYW5kbGVkIGFzIGZhdGFsIGVycm9ytHMuCi0gKiAKKyAqCiAgKiAgIEFsbCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgaGFuZGxlZCBhcyByZWNvdmVyYWJsZSBlcnJvcnMuCiAgKgogICogUkVUVVJOIFZBTFVFUwpAQCAtOTMsMTUgKzkzLDE1IEBACiB9CQkJCS8qIEVORCBkYXNkXzM5OTBfZXJwX2V4YW1pbmVfMjQgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8zMiAKKyAqIERBU0RfMzk5MF9FUlBfRVhBTUlORV8zMgogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyYWJsZSBlcnJvci4gCisgKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyYWJsZSBlcnJvci4KICAqICAgQSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiB0aGUgc2Vuc2UgZGF0YSBpcyBkb25lIGxhdGVyIG91dHNpZGUKICAqICAgdGhlIGludGVycnVwdCBoYW5kbGVyLgogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvciAKKyAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvcgogICogICBkYXNkX2VyYV9mYXRhbAlmb3IgYWxsIGZhdGFsICh1bnJlY292ZXJhYmxlIGVycm9ycykKICAqICAgZGFzZF9lcmFfcmVjb3Zlcglmb3IgcmVjb3ZlcmFibGUgb3RoZXJzLgogICovCkBAIC0xMjgsMTAgKzEyOCwxMCBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9leGFtaW5lXzMyICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0VYQU1JTkUgCisgKiBEQVNEXzM5OTBfRVJQX0VYQU1JTkUKICAqCiAgKiBERVNDUklQVElPTgotICogICBDaGVja3Mgb25seSBmb3IgZmF0YWwvbm8vcmVjb3ZlciBlcnJvci4gCisgKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyIGVycm9yLgogICogICBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGRvbmUgbGF0ZXIgb3V0c2lkZQogICogICB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCiAgKgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiAgICdDaGFwdGVyIDcuIEVycm9yIFJlY292ZXJ5IFByb2NlZHVyZXMnLgogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvciAKKyAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvcgogICogICBkYXNkX2VyYV9mYXRhbAlmb3IgYWxsIGZhdGFsICh1bnJlY292ZXJhYmxlIGVycm9ycykKICAqICAgZGFzZF9lcmFfcmVjb3Zlcglmb3IgYWxsIG90aGVycy4KICAqLwpAQCAtMTc4LDE4ICsxNzgsMTggQEAKIH0JCQkJLyogRU5EIGRhc2RfMzk5MF9lcnBfZXhhbWluZSAqLwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRUNUSU9OIEVSUCBIQU5ETElORwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIC8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIDI0IGFuZCAzMiBieXRlIHNlbnNlIEVSUCBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0NMRUFOVVAgCisgKiBEQVNEXzM5OTBfRVJQX0NMRUFOVVAKICAqCiAgKiBERVNDUklQVElPTgogICogICBSZW1vdmVzIHRoZSBhbHJlYWR5IGJ1aWxkIGJ1dCBub3QgbmVjZXNzYXJ5IEVSUCByZXF1ZXN0IGFuZCBzZXRzCkBAIC0xOTcsMTAgKzE5NywxMCBAQAogICoKICAqICBQQVJBTUVURVIKICAqICAgZXJwCQlyZXF1ZXN0IHRvIGJlIGJsb2NrZWQKLSAqICAgZmluYWxfc3RhdHVzCWVpdGhlciBEQVNEX0NRUl9ET05FIG9yIERBU0RfQ1FSX0ZBSUxFRCAKKyAqICAgZmluYWxfc3RhdHVzCWVpdGhlciBEQVNEX0NRUl9ET05FIG9yIERBU0RfQ1FSX0ZBSUxFRAogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgY3FyCQlvcmlnaW5hbCBjcXIJCSAgIAorICogICBjcXIJCW9yaWdpbmFsIGNxcgogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCiBkYXNkXzM5OTBfZXJwX2NsZWFudXAoc3RydWN0IGRhc2RfY2N3X3JlcSAqIGVycCwgY2hhciBmaW5hbF9zdGF0dXMpCkBAIC0yMTQsNyArMjE0LDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfY2xlYW51cCAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9CTE9DS19RVUVVRSAKKyAqIERBU0RfMzk5MF9FUlBfQkxPQ0tfUVVFVUUKICAqCiAgKiBERVNDUklQVElPTgogICogICBCbG9jayB0aGUgZ2l2ZW4gZGV2aWNlIHJlcXVlc3QgcXVldWUgdG8gcHJldmVudCBmcm9tIGZ1cnRoZXIKQEAgLTIzNyw3ICsyMzcsNyBAQAogfQogCiAvKgotICogREFTRF8zOTkwX0VSUF9JTlRfUkVRIAorICogREFTRF8zOTkwX0VSUF9JTlRfUkVRCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyAnSW50ZXJ2ZW50aW9uIFJlcXVpcmVkJyBlcnJvci4KQEAgLTI3Nyw3ICsyNzcsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9pbnRfcmVxICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0FMVEVSTkFURV9QQVRIIAorICogREFTRF8zOTkwX0VSUF9BTFRFUk5BVEVfUEFUSAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIFJlcGVhdCB0aGUgb3BlcmF0aW9uIG9uIGEgZGlmZmVyZW50IGNoYW5uZWwgcGF0aC4KQEAgLTMzMCwxNSArMzMwLDE1IEBACiAgKiBEQVNEXzM5OTBfRVJQX0RDVEwKICAqCiAgKiBERVNDUklQVElPTgotICogICBTZXR1cCBjcXIgdG8gZG8gdGhlIERpYWdub3N0aWMgQ29udHJvbCAoRENUTCkgY29tbWFuZCB3aXRoIGFuIAorICogICBTZXR1cCBjcXIgdG8gZG8gdGhlIERpYWdub3N0aWMgQ29udHJvbCAoRENUTCkgY29tbWFuZCB3aXRoIGFuCiAgKiAgIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCAoMHgyMCkgYW5kIHRoZSBnaXZlbiBtb2RpZmllci4KICAqCiAgKiAgUEFSQU1FVEVSCiAgKiAgIGVycAkJcG9pbnRlciB0byB0aGUgY3VycmVudCAoZmFpbGVkKSBFUlAKICAqICAgbW9kaWZpZXIJCXN1YmNvbW1hbmQgbW9kaWZpZXIKLSAqICAgCisgKgogICogUkVUVVJOIFZBTFVFUwotICogICBkY3RsX2NxcgkJcG9pbnRlciB0byBORVcgZGN0bF9jcXIgCisgKiAgIGRjdGxfY3FyCQlwb2ludGVyIHRvIE5FVyBkY3RsX2NxcgogICoKICAqLwogc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKgpAQCAtMzg2LDcgKzM4Niw3IEBACiB9CQkJCS8qIGVuZCBkYXNkXzM5OTBfZXJwX0RDVEwgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQUNUSU9OXzEgCisgKiBEQVNEXzM5OTBfRVJQX0FDVElPTl8xCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgU2V0dXAgRVJQIHRvIGRvIHRoZSBFUlAgYWN0aW9uIDEgKHNlZSBSZWZlcmVuY2UgbWFudWFsKS4KQEAgLTQxNSw3ICs0MTUsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb25fMSAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9BQ1RJT05fNCAKKyAqIERBU0RfMzk5MF9FUlBfQUNUSU9OXzQKICAqCiAgKiBERVNDUklQVElPTgogICogICBTZXR1cCBFUlAgdG8gZG8gdGhlIEVSUCBhY3Rpb24gNCAoc2VlIFJlZmVyZW5jZSBtYW51YWwpLgpAQCAtNDUzLDExICs0NTMsMTEgQEAKIAogCQlpZiAoc2Vuc2VbMjVdID09IDB4MUQpIHsJLyogc3RhdGUgY2hhbmdlIHBlbmRpbmcgKi8KIAotCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsIAorCQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICJ3YWl0aW5nIGZvciBzdGF0ZSBjaGFuZ2UgcGVuZGluZyAiCiAJCQkJICAgICJpbnRlcnJ1cHQsICVkIHJldHJpZXMgbGVmdCIsCiAJCQkJICAgIGVycC0+cmV0cmllcyk7Ci0JCQkKKwogCQkJZGFzZF8zOTkwX2VycF9ibG9ja19xdWV1ZShlcnAsIDMwKkhaKTsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vuc2VbMjVdID09IDB4MUUpIHsJLyogYnVzeSAqLwpAQCAtNDY5LDkgKzQ2OSw5IEBACiAJCX0gZWxzZSB7CiAKIAkJCS8qIG5vIHN0YXRlIGNoYW5nZSBwZW5kaW5nIC0gcmV0cnkgKi8KLQkJCURFVl9NRVNTQUdFIChLRVJOX0lORk8sIGRldmljZSwgCisJCQlERVZfTUVTU0FHRSAoS0VSTl9JTkZPLCBkZXZpY2UsCiAJCQkJICAgICAicmVkcml2aW5nIHJlcXVlc3QgaW1tZWRpYXRlbHksICIKLQkJCQkgICAgICIlZCByZXRyaWVzIGxlZnQiLCAKKwkJCQkgICAgICIlZCByZXRyaWVzIGxlZnQiLAogCQkJCSAgICAgZXJwLT5yZXRyaWVzKTsKIAkJCWVycC0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwogCQl9CkBAIC00ODIsMTMgKzQ4MiwxMyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb25fNCAqLwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAyNCBieXRlIHNlbnNlIEVSUCBmdW5jdGlvbnMgKG9ubHkpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9BQ1RJT05fNSAKKyAqIERBU0RfMzk5MF9FUlBfQUNUSU9OXzUKICAqCiAgKiBERVNDUklQVElPTgogICogICBTZXR1cCBFUlAgdG8gZG8gdGhlIEVSUCBhY3Rpb24gNSAoc2VlIFJlZmVyZW5jZSBtYW51YWwpLgpAQCAtNTIzLDcgKzUyMyw3IEBACiAgKgogICogUEFSQU1FVEVSCiAgKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEKLSAqICAgCisgKgogICogUkVUVVJOIFZBTFVFUwogICogICB2b2lkCiAgKi8KQEAgLTExNTAsOSArMTE1MCw5IEBACiAgKiBQQVJBTUVURVIKICAqICAgZXJwCQljdXJyZW50IGVycF9oZWFkCiAgKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEKLSAqIAorICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZXJwCQknbmV3JyBlcnBfaGVhZCAtIHBvaW50ZXIgdG8gbmV3IEVSUCAKKyAqICAgZXJwCQknbmV3JyBlcnBfaGVhZCAtIHBvaW50ZXIgdG8gbmV3IEVSUAogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCiBkYXNkXzM5OTBfZXJwX2NvbV9yZWooc3RydWN0IGRhc2RfY2N3X3JlcSAqIGVycCwgY2hhciAqc2Vuc2UpCkBAIC0xMTg1LDcgKzExODUsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21fcmVqICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0JVU19PVVQgCisgKiBEQVNEXzM5OTBfRVJQX0JVU19PVVQKICAqCiAgKiBERVNDUklQVElPTgogICogICBIYW5kbGVzIDI0IGJ5dGUgJ0J1cyBPdXQgUGFyaXR5IENoZWNrJyBlcnJvci4KQEAgLTE0ODMsNyArMTQ4Myw3IEBACiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGVycAkJYWxyZWFkeSBhZGRlZCBkZWZhdWx0IEVSUAotICoJCQorICoKICAqIFJFVFVSTiBWQUxVRVMKICAqICAgZXJwCQluZXcgZXJwX2hlYWQgLSBwb2ludGVyIHRvIG5ldyBFUlAKICAqLwpAQCAtMTUyNywxMSArMTUyNywxMSBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9maWxlX3Byb3QgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfSU5TUEVDVF8yNCAKKyAqIERBU0RfMzk5MF9FUlBfSU5TUEVDVF8yNAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIERvZXMgYSBkZXRhaWxlZCBpbnNwZWN0aW9uIG9mIHRoZSAyNCBieXRlIHNlbnNlIGRhdGEKLSAqICAgYW5kIHNldHMgdXAgYSByZWxhdGVkIGVycm9yIHJlY292ZXJ5IGFjdGlvbi4gIAorICogICBhbmQgc2V0cyB1cCBhIHJlbGF0ZWQgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uLgogICoKICAqIFBBUkFNRVRFUgogICogICBzZW5zZQkJc2Vuc2UgZGF0YSBvZiB0aGUgYWN0dWFsIGVycm9yCkBAIC0xNjAyLDEzICsxNjAyLDEzIEBACiB9CQkJCS8qIEVORCBkYXNkXzM5OTBfZXJwX2luc3BlY3RfMjQgKi8KIAogLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogMzIgYnl0ZSBzZW5zZSBFUlAgZnVuY3Rpb25zIChvbmx5KQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBBQ1RJT05fMTBfMzIgCisgKiBEQVNEXzM5OTBfRVJQQUNUSU9OXzEwXzMyCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyAzMiBieXRlICdBY3Rpb24gMTAnIG9mIFNpbmdsZSBQcm9ncmFtIEFjdGlvbiBDb2Rlcy4KQEAgLTE2MTYsNyArMTYxNiw3IEBACiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGVycAkJY3VycmVudCBlcnBfaGVhZAotICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhIAorICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhCiAgKiBSRVRVUk4gVkFMVUVTCiAgKiAgIGVycAkJbW9kaWZpZWQgZXJwX2hlYWQKICAqLwpAQCAtMTY0MCwxOCArMTY0MCwxOCBAQAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIEhhbmRsZXMgMzIgYnl0ZSAnQWN0aW9uIDFCJyBvZiBTaW5nbGUgUHJvZ3JhbSBBY3Rpb24gQ29kZXMuCi0gKiAgIEEgd3JpdGUgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBmaW5pc2hlZCBiZWNhdXNlIG9mIGFuIHVuZXhwZWN0ZWQgCisgKiAgIEEgd3JpdGUgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBmaW5pc2hlZCBiZWNhdXNlIG9mIGFuIHVuZXhwZWN0ZWQKICAqICAgY29uZGl0aW9uLgotICogICBUaGUgYWxyZWFkeSBjcmVhdGVkICdkZWZhdWx0IGVycCcgaXMgdXNlZCB0byBnZXQgdGhlIGxpbmsgdG8gCi0gKiAgIHRoZSBlcnAgY2hhaW4sIGJ1dCBpdCBjYW4gbm90IGJlIHVzZWQgZm9yIHRoaXMgcmVjb3ZlcnkgCisgKiAgIFRoZSBhbHJlYWR5IGNyZWF0ZWQgJ2RlZmF1bHQgZXJwJyBpcyB1c2VkIHRvIGdldCB0aGUgbGluayB0bworICogICB0aGUgZXJwIGNoYWluLCBidXQgaXQgY2FuIG5vdCBiZSB1c2VkIGZvciB0aGlzIHJlY292ZXJ5CiAgKiAgIGFjdGlvbiBiZWNhdXNlIGl0IGNvbnRhaW5zIG5vIERFL0xPIGRhdGEgc3BhY2UuCiAgKgogICogUEFSQU1FVEVSCiAgKiAgIGRlZmF1bHRfZXJwCWFscmVhZHkgYWRkZWQgZGVmYXVsdCBlcnAuCi0gKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEgCisgKiAgIHNlbnNlCQljdXJyZW50IHNlbnNlIGRhdGEKICAqCiAgKiBSRVRVUk4gVkFMVUVTCi0gKiAgIGVycAkJbmV3IGVycCBvciAKKyAqICAgZXJwCQluZXcgZXJwIG9yCiAgKgkJCWRlZmF1bHRfZXJwIGluIGNhc2Ugb2YgaW1wcmVjaXNlIGVuZGluZyBvciBlcnJvcgogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCkBAIC0xNzg5LDE2ICsxNzg5LDE2IEBACiAgKiBEQVNEXzM5OTBfVVBEQVRFXzFCCiAgKgogICogREVTQ1JJUFRJT04KLSAqICAgSGFuZGxlcyB0aGUgdXBkYXRlIHRvIHRoZSAzMiBieXRlICdBY3Rpb24gMUInIG9mIFNpbmdsZSBQcm9ncmFtIAorICogICBIYW5kbGVzIHRoZSB1cGRhdGUgdG8gdGhlIDMyIGJ5dGUgJ0FjdGlvbiAxQicgb2YgU2luZ2xlIFByb2dyYW0KICAqICAgQWN0aW9uIENvZGVzIGluIGNhc2UgdGhlIGZpcnN0IGFjdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwuCiAgKiAgIFRoZSBhbHJlYWR5IGNyZWF0ZWQgJ3ByZXZpb3VzX2VycCcgaXMgdGhlIGN1cnJlbnRseSBub3Qgc3VjY2Vzc2Z1bAotICogICBFUlAuIAorICogICBFUlAuCiAgKgogICogUEFSQU1FVEVSCiAgKiAgIHByZXZpb3VzX2VycAlhbHJlYWR5IGNyZWF0ZWQgcHJldmlvdXMgZXJwLgotICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhIAorICogICBzZW5zZQkJY3VycmVudCBzZW5zZSBkYXRhCiAgKiBSRVRVUk4gVkFMVUVTCi0gKiAgIGVycAkJbW9kaWZpZWQgZXJwIAorICogICBlcnAJCW1vZGlmaWVkIGVycAogICovCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqCiBkYXNkXzM5OTBfdXBkYXRlXzFCKHN0cnVjdCBkYXNkX2Njd19yZXEgKiBwcmV2aW91c19lcnAsIGNoYXIgKnNlbnNlKQpAQCAtMTg5Nyw3ICsxODk3LDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF91cGRhdGVfMUIgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfUkVUUlkgCisgKiBEQVNEXzM5OTBfRVJQX0NPTVBPVU5EX1JFVFJZCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyB0aGUgY29tcG91bmQgRVJQIGFjdGlvbiByZXRyeSBjb2RlLgpAQCAtMTk0Myw3ICsxOTQzLDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcmV0cnkgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfUEFUSCAKKyAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfUEFUSAogICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIEhhbmRsZXMgdGhlIGNvbXBvdW5kIEVSUCBhY3Rpb24gZm9yIHJldHJ5IG9uIGFsdGVybmF0ZQpAQCAtMTk2NSw3ICsxOTY1LDcgQEAKIAkJZGFzZF8zOTkwX2VycF9hbHRlcm5hdGVfcGF0aChlcnApOwogCiAJCWlmIChlcnAtPnN0YXR1cyA9PSBEQVNEX0NRUl9GQUlMRUQpIHsKLQkJCS8qIHJlc2V0IHRoZSBscG0gYW5kIHRoZSBzdGF0dXMgdG8gYmUgYWJsZSB0byAKKwkJCS8qIHJlc2V0IHRoZSBscG0gYW5kIHRoZSBzdGF0dXMgdG8gYmUgYWJsZSB0bwogCQkJICogdHJ5IGZ1cnRoZXIgYWN0aW9ucy4gKi8KIAogCQkJZXJwLT5scG0gPSAwOwpAQCAtMTk4MCw3ICsxOTgwLDcgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfY29tcG91bmRfcGF0aCAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9DT01QT1VORF9DT0RFIAorICogREFTRF8zOTkwX0VSUF9DT01QT1VORF9DT0RFCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyB0aGUgY29tcG91bmQgRVJQIGFjdGlvbiBmb3IgcmV0cnkgY29kZS4KQEAgLTIwMDEsMTggKzIwMDEsMTggQEAKIAogCQlzd2l0Y2ggKHNlbnNlWzI4XSkgewogCQljYXNlIDB4MTc6Ci0JCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4gCisJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KIAkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCBhbmQgY29udHJvbGVyIG1vZGlmaWVyICovCiAJCQllcnAgPSBkYXNkXzM5OTBfZXJwX0RDVEwoZXJwLCAweDIwKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDI1OgogCQkJLyogd2FpdCBmb3IgNSBzZWNvbmRzIGFuZCByZXRyeSBhZ2FpbiAqLwogCQkJZXJwLT5yZXRyaWVzID0gMTsKLQkJCQorCiAJCQlkYXNkXzM5OTBfZXJwX2Jsb2NrX3F1ZXVlIChlcnAsIDUqSFopOwogCQkJYnJlYWs7Ci0JCQkKKwogCQlkZWZhdWx0OgogCQkJLyogc2hvdWxkIG5vdCBoYXBwZW4gLSBjb250aW51ZSAqLwogCQkJYnJlYWs7CkBAIC0yMDI2LDcgKzIwMjYsNyBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb2RlICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0NPTVBPVU5EX0NPTkZJRyAKKyAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkRfQ09ORklHCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgSGFuZGxlcyB0aGUgY29tcG91bmQgRVJQIGFjdGlvbiBmb3IgY29uZmlncnVhdGlvbgpAQCAtMjA2MywxMCArMjA2MywxMCBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9jb21wb3VuZF9jb25maWcgKi8KIAogLyoKLSAqIERBU0RfMzk5MF9FUlBfQ09NUE9VTkQgCisgKiBEQVNEXzM5OTBfRVJQX0NPTVBPVU5ECiAgKgogICogREVTQ1JJUFRJT04KLSAqICAgRG9lcyB0aGUgZnVydGhlciBjb21wb3VuZCBwcm9ncmFtIGFjdGlvbiBpZiAKKyAqICAgRG9lcyB0aGUgZnVydGhlciBjb21wb3VuZCBwcm9ncmFtIGFjdGlvbiBpZgogICogICBjb21wb3VuZCByZXRyeSB3YXMgbm90IHN1Y2Nlc3NmdWwuCiAgKgogICogUEFSQU1FVEVSCkBAIC0yMTEwLDExICsyMTEwLDExIEBACiB9CQkJCS8qIGVuZCBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kICovCiAKIC8qCi0gKiBEQVNEXzM5OTBfRVJQX0lOU1BFQ1RfMzIgCisgKiBEQVNEXzM5OTBfRVJQX0lOU1BFQ1RfMzIKICAqCiAgKiBERVNDUklQVElPTgogICogICBEb2VzIGEgZGV0YWlsZWQgaW5zcGVjdGlvbiBvZiB0aGUgMzIgYnl0ZSBzZW5zZSBkYXRhCi0gKiAgIGFuZCBzZXRzIHVwIGEgcmVsYXRlZCBlcnJvciByZWNvdmVyeSBhY3Rpb24uICAKKyAqICAgYW5kIHNldHMgdXAgYSByZWxhdGVkIGVycm9yIHJlY292ZXJ5IGFjdGlvbi4KICAqCiAgKiBQQVJBTUVURVIKICAqICAgc2Vuc2UJCXNlbnNlIGRhdGEgb2YgdGhlIGFjdHVhbCBlcnJvcgpAQCAtMjIyOCw5ICsyMjI4LDkgQEAKIH0JCQkJLyogZW5kIGRhc2RfMzk5MF9lcnBfaW5zcGVjdF8zMiAqLwogCiAvKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBtYWluIEVSUCBjb250cm9sIGZ1Y3Rpb25zICgyNCBhbmQgMzIgYnl0ZSBzZW5zZSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKIC8qCkBAIC0yMjQzLDcgKzIyNDMsNyBAQAogICogUEFSQU1FVEVSCiAgKiAgIGVycAkJcG9pbnRlciB0byB0aGUgY3VycmVudGx5IGNyZWF0ZWQgZGVmYXVsdCBFUlAKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZXJwX25ldwkJY29udGVucyB3YXMgcG9zc2libHkgbW9kaWZpZWQgCisgKiAgIGVycF9uZXcJCWNvbnRlbnMgd2FzIHBvc3NpYmx5IG1vZGlmaWVkCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKIGRhc2RfMzk5MF9lcnBfaW5zcGVjdChzdHJ1Y3QgZGFzZF9jY3dfcmVxICogZXJwKQpAQCAtMjI3MiwxNCArMjI3MiwxNCBAQAogCiAvKgogICogREFTRF8zOTkwX0VSUF9BRERfRVJQCi0gKiAKKyAqCiAgKiBERVNDUklQVElPTgogICogICBUaGlzIGZ1bnRpb24gYWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKEVSUCkgdG8gdGhlIGhlYWQgb2YKICAqICAgdGhlIGdpdmVuIGNxciAob3IgZXJwKS4KICAqICAgVGhpcyBlcnAgaXMgaW5pdGlhbGl6ZWQgYXMgYW4gZGVmYXVsdCBlcnAgKHJldHJ5IFRJQykKICAqCiAgKiBQQVJBTUVURVIKLSAqICAgY3FyCQloZWFkIG9mIHRoZSBjdXJyZW50IEVSUC1jaGFpbiAob3Igc2luZ2xlIGNxciBpZiAKKyAqICAgY3FyCQloZWFkIG9mIHRoZSBjdXJyZW50IEVSUC1jaGFpbiAob3Igc2luZ2xlIGNxciBpZgogICoJCQlmaXJzdCBlcnJvcikKICAqIFJFVFVSTiBWQUxVRVMKICAqICAgZXJwCQlwb2ludGVyIHRvIG5ldyBFUlAtY2hhaW4gaGVhZApAQCAtMjMzMiwxNSArMjMzMiwxNSBAQAogfQogCiAvKgotICogREFTRF8zOTkwX0VSUF9BRERJVElPTkFMX0VSUCAKLSAqIAorICogREFTRF8zOTkwX0VSUF9BRERJVElPTkFMX0VSUAorICoKICAqIERFU0NSSVBUSU9OCiAgKiAgIEFuIGFkZGl0aW9uYWwgRVJQIGlzIG5lZWRlZCB0byBoYW5kbGUgdGhlIGN1cnJlbnQgZXJyb3IuCiAgKiAgIEFkZCBFUlAgdG8gdGhlIGhlYWQgb2YgdGhlIEVSUC1jaGFpbiBjb250YWluaW5nIHRoZSBFUlAgcHJvY2Vzc2luZwogICogICBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBzZW5zZSBkYXRhLgogICoKICAqIFBBUkFNRVRFUgotICogICBjcXIJCWhlYWQgb2YgdGhlIGN1cnJlbnQgRVJQLWNoYWluIChvciBzaW5nbGUgY3FyIGlmIAorICogICBjcXIJCWhlYWQgb2YgdGhlIGN1cnJlbnQgRVJQLWNoYWluIChvciBzaW5nbGUgY3FyIGlmCiAgKgkJCWZpcnN0IGVycm9yKQogICoKICAqIFJFVFVSTiBWQUxVRVMKQEAgLTIzNzYsNyArMjM3Niw3IEBACiAgKiAgIDI0IGJ5dGUgc2Vuc2UgYnl0ZSAyNSBhbmQgMjcgaXMgc2V0IGFzIHdlbGwuCiAgKgogICogUEFSQU1FVEVSCi0gKiAgIGNxcjEJCWZpcnN0IGNxciwgd2hpY2ggd2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSAKKyAqICAgY3FyMQkJZmlyc3QgY3FyLCB3aGljaCB3aWxsIGJlIGNvbXBhcmVkIHdpdGggdGhlCiAgKiAgIGNxcjIJCXNlY29uZCBjcXIuCiAgKgogICogUkVUVVJOIFZBTFVFUwpAQCAtMjQxNSw3ICsyNDE1LDcgQEAKICAqICAgY3FyCQlmYWlsZWQgY3FyIChlaXRoZXIgb3JpZ2luYWwgY3FyIG9yIGFscmVhZHkgYW4gZXJwKQogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZXJwCQllcnAtcG9pbnRlciB0byB0aGUgYWxyZWFkeSBkZWZpbmVkIGVycm9yIAorICogICBlcnAJCWVycC1wb2ludGVyIHRvIHRoZSBhbHJlYWR5IGRlZmluZWQgZXJyb3IKICAqCQkJcmVjb3ZlcnkgcHJvY2VkdXJlIE9SCiAgKgkJCU5VTEwgaWYgYSAnbmV3JyBlcnJvciBvY2N1cnJlZC4KICAqLwpAQCAtMjQ1MSwxMCArMjQ1MSwxMCBAQAogICogREFTRF8zOTkwX0VSUF9GVVJUSEVSX0VSUCAoMjQgJiAzMiBieXRlIHNlbnNlKQogICoKICAqIERFU0NSSVBUSU9OCi0gKiAgIE5vIHJldHJ5IGlzIGxlZnQgZm9yIHRoZSBjdXJyZW50IEVSUC4gQ2hlY2sgd2hhdCBoYXMgdG8gYmUgZG9uZSAKKyAqICAgTm8gcmV0cnkgaXMgbGVmdCBmb3IgdGhlIGN1cnJlbnQgRVJQLiBDaGVjayB3aGF0IGhhcyB0byBiZSBkb25lCiAgKiAgIHdpdGggdGhlIEVSUC4KICAqICAgICAtIGRvIGZ1cnRoZXIgZGVmaW5lZCBFUlAgYWN0aW9uIG9yCi0gKiAgICAgLSB3YWl0IGZvciBpbnRlcnJ1cHQgb3IJCisgKiAgICAgLSB3YWl0IGZvciBpbnRlcnJ1cHQgb3IKICAqICAgICAtIGV4aXQgd2l0aCBwZXJtYW5lbnQgZXJyb3IKICAqCiAgKiBQQVJBTUVURVIKQEAgLTI0ODUsNyArMjQ4NSw3IEBACiAKIAkJaWYgKCEoc2Vuc2VbMl0gJiBEQVNEX1NFTlNFX0JJVF8wKSkgewogCi0JCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4gCisJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KIAkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCAqLwogCiAJCQlzd2l0Y2ggKHNlbnNlWzI1XSkgewpAQCAtMjUzNSwxNCArMjUzNSwxNCBAQAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9mdXJ0aGVyX2VycCAqLwogCiAvKgotICogREFTRF8zOTkwX0VSUF9IQU5ETEVfTUFUQ0hfRVJQIAorICogREFTRF8zOTkwX0VSUF9IQU5ETEVfTUFUQ0hfRVJQCiAgKgogICogREVTQ1JJUFRJT04KICAqICAgQW4gZXJyb3Igb2NjdXJyZWQgYWdhaW4gYW5kIGFuIEVSUCBoYXMgYmVlbiBkZXRlY3RlZCB3aGljaCBpcyBhbHJlYWR5Ci0gKiAgIHVzZWQgdG8gaGFuZGxlIHRoaXMgZXJyb3IgKGUuZy4gcmV0cmllcykuIAorICogICB1c2VkIHRvIGhhbmRsZSB0aGlzIGVycm9yIChlLmcuIHJldHJpZXMpLgogICogICBBbGwgcHJpb3IgRVJQJ3MgYXJlIGFzdW1lZCB0byBiZSBzdWNjZXNzZnVsIGFuZCB0aGVyZWZvcmUgcmVtb3ZlZAogICogICBmcm9tIHF1ZXVlLgotICogICBJZiByZXRyeSBjb3VudGVyIG9mIG1hdGNoaW5nIGVycCBpcyBhbHJlYWR5IDAsIGl0IGlzIGNoZWNrZWQgaWYgZnVydGhlciAKKyAqICAgSWYgcmV0cnkgY291bnRlciBvZiBtYXRjaGluZyBlcnAgaXMgYWxyZWFkeSAwLCBpdCBpcyBjaGVja2VkIGlmIGZ1cnRoZXIKICAqICAgYWN0aW9uIGlzIG5lZWRlZCAoYmVzaWRlcyByZXRyeSkgb3IgaWYgdGhlIEVSUCBoYXMgZmFpbGVkLgogICoKICAqIFBBUkFNRVRFUgpAQCAtMjYzMSw3ICsyNjMxLDcgQEAKICAqICAgZXJwCQllcnAtcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgRVJQIGFjdGlvbiBjaGFpbi4KICAqCQkJVGhpcyBtZWFuczoKICAqCQkJIC0gZWl0aGVyIGEgcHRyIHRvIGFuIGFkZGl0aW9uYWwgRVJQIGNxciBvcgotICoJCQkgLSB0aGUgb3JpZ2luYWwgZ2l2ZW4gY3FyICh3aGljaCdzIHN0YXR1cyBtaWdodCAKKyAqCQkJIC0gdGhlIG9yaWdpbmFsIGdpdmVuIGNxciAod2hpY2gncyBzdGF0dXMgbWlnaHQKICAqCQkJICAgYmUgbW9kaWZpZWQpCiAgKi8KIHN0cnVjdCBkYXNkX2Njd19yZXEgKgpAQCAtMjcyMywyMiArMjcyMywzIEBACiAJcmV0dXJuIGVycDsKIAogfQkJCQkvKiBlbmQgZGFzZF8zOTkwX2VycF9hY3Rpb24gKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1pbmRlbnQtbGV2ZWw6IDQgCi0gKiBjLWJyYWNlLWltYWdpbmFyeS1vZmZzZXQ6IDAKLSAqIGMtYnJhY2Utb2Zmc2V0OiAtNAotICogYy1hcmdkZWNsLWluZGVudDogNAotICogYy1sYWJlbC1vZmZzZXQ6IC00Ci0gKiBjLWNvbnRpbnVlZC1zdGF0ZW1lbnQtb2Zmc2V0OiA0Ci0gKiBjLWNvbnRpbnVlZC1icmFjZS1vZmZzZXQ6IDAKLSAqIGluZGVudC10YWJzLW1vZGU6IDEKLSAqIHRhYi13aWR0aDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzM2X2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfOTMzNl9lcnAuYwppbmRleCBkYzg2MTQ0Li42ZTA4MjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzM2X2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzkzMzZfZXJwLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzkzMzZfZXJwLmMKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KQEAgLTEyLDEwICsxMiwxMCBAQAogCiAKIC8qCi0gKiBEQVNEXzkzMzZfRVJQX0VYQU1JTkUgCisgKiBEQVNEXzkzMzZfRVJQX0VYQU1JTkUKICAqCiAgKiBERVNDUklQVElPTgotICogICBDaGVja3Mgb25seSBmb3IgZmF0YWwvbm8vcmVjb3ZlciBlcnJvci4gCisgKiAgIENoZWNrcyBvbmx5IGZvciBmYXRhbC9uby9yZWNvdmVyIGVycm9yLgogICogICBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoZSBzZW5zZSBkYXRhIGlzIGRvbmUgbGF0ZXIgb3V0c2lkZQogICogICB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCiAgKgpAQCAtMjMsNyArMjMsNyBAQAogICogICAnQ2hhcHRlciA3LiA5MzM2IFNlbnNlIERhdGEnLgogICoKICAqIFJFVFVSTiBWQUxVRVMKLSAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvciAKKyAqICAgZGFzZF9lcmFfbm9uZQlubyBlcnJvcgogICogICBkYXNkX2VyYV9mYXRhbAlmb3IgYWxsIGZhdGFsICh1bnJlY292ZXJhYmxlIGVycm9ycykKICAqICAgZGFzZF9lcmFfcmVjb3Zlcglmb3IgYWxsIG90aGVycy4KICAqLwpAQCAtMzksMjIgKzM5LDMgQEAKIAlyZXR1cm4gZGFzZF9lcmFfcmVjb3ZlcjsKIAogfQkJCQkvKiBFTkQgZGFzZF85MzM2X2VycF9leGFtaW5lICovCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtaW5kZW50LWxldmVsOiA0IAotICogYy1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCi0gKiBjLWJyYWNlLW9mZnNldDogLTQKLSAqIGMtYXJnZGVjbC1pbmRlbnQ6IDQKLSAqIGMtbGFiZWwtb2Zmc2V0OiAtNAotICogYy1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogNAotICogYy1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCi0gKiBpbmRlbnQtdGFicy1tb2RlOiAxCi0gKiB0YWItd2lkdGg6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfOTM0M19lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzkzNDNfZXJwLmMKaW5kZXggNGE1Yjc5NS4uZGRlY2I5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfOTM0M19lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzQzX2VycC5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF85MzQ1X2VycC5jCiAgKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4KICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDIxNmJjNGYuLmQ3Mjk1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI3LDcgKzI2LDcgQEAKICNpbmNsdWRlICJkYXNkX2ludC5oIgogCiBrbWVtX2NhY2hlX3QgKmRhc2RfcGFnZV9jYWNoZTsKLUVYUE9SVF9TWU1CT0woZGFzZF9wYWdlX2NhY2hlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfcGFnZV9jYWNoZSk7CiAKIC8qCiAgKiBkYXNkX2Rldm1hcF90IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGZlYXR1cmVzIGFuZCB0aGUgcmVsYXRpb24KQEAgLTQ5LDYgKzQ4LDIwIEBACiB9OwogCiAvKgorICogZGFzZF9zZXJ2ZXJtYXAgaXMgdXNlZCB0byBzdG9yZSB0aGUgc2VydmVyX2lkIG9mIGFsbCBzdG9yYWdlIHNlcnZlcnMKKyAqIGFjY2Vzc2VkIGJ5IERBU0QgZGV2aWNlIGRyaXZlci4KKyAqLworc3RydWN0IGRhc2Rfc2VydmVybWFwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNlcnZlcl9pZCB7CisJCWNoYXIgdmVuZG9yWzRdOworCQljaGFyIHNlcmlhbFsxNV07CisJfSBzaWQ7Cit9OworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBkYXNkX3NlcnZlcmxpc3Q7CisKKy8qCiAgKiBQYXJhbWV0ZXIgcGFyc2luZyBmdW5jdGlvbnMgZm9yIGRhc2Q9IHBhcmFtZXRlci4gVGhlIHN5bnRheCBpczoKICAqICAgPGRldm5vPgkJOiAoMHgpP1swLTlhLWZBLUZdKwogICogICA8YnVzaWQ+CQk6IFswLTBhLWZdXC5bMC05YS1mXVwuKDB4KT9bMC05YS1mQS1GXSsKQEAgLTY0LDYgKzc3LDggQEAKIAogaW50IGRhc2RfcHJvYmVvbmx5ID0gIDA7CS8qIGlzIHRydWUsIHdoZW4gcHJvYmVvbmx5IG1vZGUgaXMgYWN0aXZlICovCiBpbnQgZGFzZF9hdXRvZGV0ZWN0ID0gMDsJLyogaXMgdHJ1ZSwgd2hlbiBhdXRvZGV0ZWN0aW9uIGlzIGFjdGl2ZSAqLworaW50IGRhc2Rfbm9wYXYgPSAwOwkJLyogaXMgdHJ1ZSwgd2hlbiBQQVYgaXMgZGlzYWJsZWQgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2Rfbm9wYXYpOwogCiAvKgogICogY2hhciAqZGFzZFtdIGlzIGludGVuZGVkIHRvIGhvbGQgdGhlIHJhbmdlcyBzdXBwbGllZCBieSB0aGUgZGFzZD0gc3RhdGVtZW50CkBAIC0xMjMsNyArMTM4LDcgQEAKIGRhc2RfYnVzaWQoY2hhciAqKnN0ciwgaW50ICppZDAsIGludCAqaWQxLCBpbnQgKmRldm5vKQogewogCWludCB2YWwsIG9sZF9zdHlsZTsKLSAKKwogCS8qIGNoZWNrIGZvciBsZWFkaW5nICcweCcgKi8KIAlvbGRfc3R5bGUgPSAwOwogCWlmICgoKnN0cilbMF0gPT0gJzAnICYmICgqc3RyKVsxXSA9PSAneCcpIHsKQEAgLTE3OSw3ICsxOTQsNyBAQAogCWZlYXR1cmVzID0gMDsKIAogCXdoaWxlICgxKSB7Ci0JCWZvciAobGVuID0gMDsgCisJCWZvciAobGVuID0gMDsKIAkJICAgICBzdHJbbGVuXSAmJiBzdHJbbGVuXSAhPSAnOicgJiYgc3RyW2xlbl0gIT0gJyknOyBsZW4rKyk7CiAJCWlmIChsZW4gPT0gMiAmJiAhc3RybmNtcChzdHIsICJybyIsIDIpKQogCQkJZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX1JFQURPTkxZOwpAQCAtMjI4LDE5ICsyNDMsMjQgQEAKIAkJbGVuZ3RoID0gc3RybGVuKHBhcnNlc3RyaW5nKTsKIAkJcmVzaWR1YWxfc3RyID0gcGFyc2VzdHJpbmcgKyBsZW5ndGg7CiAgICAgICAgIH0KLQlpZiAoc3RybmNtcCAoImF1dG9kZXRlY3QiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CisJaWYgKHN0cm5jbXAoImF1dG9kZXRlY3QiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWRhc2RfYXV0b2RldGVjdCA9IDE7CiAJCU1FU1NBR0UgKEtFUk5fSU5GTywgIiVzIiwKIAkJCSAidHVybmluZyB0byBhdXRvZGV0ZWN0aW9uIG1vZGUiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzaWR1YWxfc3RyOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJuY21wICgicHJvYmVvbmx5IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgeworCWlmIChzdHJuY21wKCJwcm9iZW9ubHkiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWRhc2RfcHJvYmVvbmx5ID0gMTsKIAkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsCiAJCQkidHVybmluZyB0byBwcm9iZW9ubHkgbW9kZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXNpZHVhbF9zdHI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cm5jbXAgKCJmaXhlZGJ1ZmZlcnMiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CisJaWYgKHN0cm5jbXAoIm5vcGF2IiwgcGFyc2VzdHJpbmcsIGxlbmd0aCkgPT0gMCkgeworCQlkYXNkX25vcGF2ID0gMTsKKwkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJkaXNhYmxlIFBBViBtb2RlIik7CisJCXJldHVybiByZXNpZHVhbF9zdHI7CisJfQorCWlmIChzdHJuY21wKCJmaXhlZGJ1ZmZlcnMiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7CiAJCWlmIChkYXNkX3BhZ2VfY2FjaGUpCiAJCQlyZXR1cm4gcmVzaWR1YWxfc3RyOwogCQlkYXNkX3BhZ2VfY2FjaGUgPQpAQCAtMjk0LDYgKzMxNCw4IEBACiAJZmVhdHVyZXMgPSBkYXNkX2ZlYXR1cmVfbGlzdChzdHIsICZzdHIpOwogCWlmIChmZWF0dXJlcyA8IDApCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCS8qIGVhY2ggZGV2aWNlIGluIGRhc2Q9IHBhcmFtZXRlciBzaG91bGQgYmUgc2V0IGluaXRpYWxseSBvbmxpbmUgKi8KKwlmZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfSU5JVElBTF9PTkxJTkU7CiAJd2hpbGUgKGZyb20gPD0gdG8pIHsKIAkJc3ByaW50ZihidXNfaWQsICIlMDF4LiUwMXguJTA0eCIsCiAJCQlmcm9tX2lkMCwgZnJvbV9pZDEsIGZyb20rKyk7CkBAIC0zNTksNyArMzgxLDcgQEAKICAqIEFkZCBhIGRldm1hcCBmb3IgdGhlIGRldmljZSBzcGVjaWZpZWQgYnkgYnVzaWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQKICAqIHRoZSBkZXZtYXAgYWxyZWFkeSBleGlzdHMgKGRhc2Q9IHBhcmFtZXRlcikuIFRoZSBvcmRlciBvZiB0aGUgZGV2aWNlcwogICogYWRkZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHdpbGwgZGVmaW5lIHRoZSBrZGV2cyBmb3IgdGhlIGluZGl2aWR1YWwKLSAqIGRldmljZXMuIAorICogZGV2aWNlcy4KICAqLwogc3RhdGljIHN0cnVjdCBkYXNkX2Rldm1hcCAqCiBkYXNkX2FkZF9idXNpZChjaGFyICpidXNfaWQsIGludCBmZWF0dXJlcykKQEAgLTM2OCw3ICszOTAsNyBAQAogCWludCBoYXNoOwogCiAJbmV3ID0gKHN0cnVjdCBkYXNkX2Rldm1hcCAqKQotCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9kZXZtYXApLCBHRlBfS0VSTkVMKTsKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZGV2bWFwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CkBAIC02MzAsNyArNjUyLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWRhc2Rfcm9fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitkYXNkX3JvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CiAJaW50IHJvX2ZsYWc7CkBAIC02NTgsNyArNjgxLDcgQEAKICAqIHVzZV9kaWFnIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGRyaXZlciBzaG91bGQgdXNlIGRpYWcgcmF0aGVyIHRoYW4gc3NjaAogICogdG8gdGFsayB0byB0aGUgZGV2aWNlCiAgKi8KLXN0YXRpYyBzc2l6ZV90IAorc3RhdGljIHNzaXplX3QKIGRhc2RfdXNlX2RpYWdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CkBAIC02NzMsNyArNjk2LDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWRhc2RfdXNlX2RpYWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitkYXNkX3VzZV9kaWFnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKIAlzc2l6ZV90IHJjOwpAQCAtNjk3LDExICs3MjEsMTEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYwotREVWSUNFX0FUVFIodXNlX2RpYWcsIDA2NDQsIGRhc2RfdXNlX2RpYWdfc2hvdywgZGFzZF91c2VfZGlhZ19zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodXNlX2RpYWcsIDA2NDQsIGRhc2RfdXNlX2RpYWdfc2hvdywgZGFzZF91c2VfZGlhZ19zdG9yZSk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1kYXNkX2Rpc2NpcGxpbmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitkYXNkX2Rpc2NpcGxpbmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKIAljaGFyICpkbmFtZTsKQEAgLTgzNCw2ICs4NTgsMzggQEAKIAkuYXR0cnMgPSBkYXNkX2F0dHJzLAogfTsKIAorLyoKKyAqIENoZWNrIGlmIHRoZSByZWxhdGVkIHN0b3JhZ2Ugc2VydmVyIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZQorICogZGFzZF9zZXJ2ZXJsaXN0LiBJZiBzZXJ2ZXIgaXMgbm90IGNvbnRhaW5lZCwgY3JlYXRlIG5ldyBlbnRyeS4KKyAqIFJldHVybiAwIGlmIHNlcnZlciB3YXMgYWxyZWFkeSBpbiBzZXJ2ZXJsaXN0LAorICoJICAxIGlmIHRoZSBzZXJ2ZXIgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseQorICoJIDwwIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK2Rhc2RfYWRkX3NlcnZlcihzdHJ1Y3QgZGFzZF91aWQgKnVpZCkKK3sKKwlzdHJ1Y3QgZGFzZF9zZXJ2ZXJtYXAgKm5ldywgKnRtcDsKKworCS8qIGNoZWNrIGlmIHNlcnZlciBpcyBhbHJlYWR5IGNvbnRhaW5lZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmZGFzZF9zZXJ2ZXJsaXN0LCBsaXN0KQorCSAgLy8gbm9ybWFsZSBjbXA/CisJCWlmIChzdHJuY21wKHRtcC0+c2lkLnZlbmRvciwgdWlkLT52ZW5kb3IsCisJCQkgICAgc2l6ZW9mKHRtcC0+c2lkLnZlbmRvcikpID09IDAKKwkJICAgICYmIHN0cm5jbXAodG1wLT5zaWQuc2VyaWFsLCB1aWQtPnNlcmlhbCwKKwkJCSAgICAgICBzaXplb2YodG1wLT5zaWQuc2VyaWFsKSkgPT0gMCkKKwkJCXJldHVybiAwOworCisJbmV3ID0gKHN0cnVjdCBkYXNkX3NlcnZlcm1hcCAqKQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9zZXJ2ZXJtYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdHJuY3B5KG5ldy0+c2lkLnZlbmRvciwgdWlkLT52ZW5kb3IsIHNpemVvZihuZXctPnNpZC52ZW5kb3IpKTsKKwlzdHJuY3B5KG5ldy0+c2lkLnNlcmlhbCwgdWlkLT5zZXJpYWwsIHNpemVvZihuZXctPnNpZC5zZXJpYWwpKTsKKwlsaXN0X2FkZCgmbmV3LT5saXN0LCAmZGFzZF9zZXJ2ZXJsaXN0KTsKKwlyZXR1cm4gMTsKK30KKwogCiAvKgogICogUmV0dXJuIGNvcHkgb2YgdGhlIGRldmljZSB1bmlxdWUgaWRlbnRpZmllci4KQEAgLTg1NCwyMSArOTEwLDI2IEBACiAKIC8qCiAgKiBSZWdpc3RlciB0aGUgZ2l2ZW4gZGV2aWNlIHVuaXF1ZSBpZGVudGlmaWVyIGludG8gZGV2bWFwIHN0cnVjdC4KKyAqIFJldHVybiAwIGlmIHNlcnZlciB3YXMgYWxyZWFkeSBpbiBzZXJ2ZXJsaXN0LAorICoJICAxIGlmIHRoZSBzZXJ2ZXIgd2FzIGFkZGVkIHN1Y2Nlc3NmdWwKKyAqCSA8MCBpbiBjYXNlIG9mIGVycm9yLgogICovCiBpbnQKIGRhc2Rfc2V0X3VpZChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IGRhc2RfdWlkICp1aWQpCiB7CiAJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJaW50IHJjOwogCiAJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGNkZXYtPmRldi5idXNfaWQpOwogCWlmIChJU19FUlIoZGV2bWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGV2bWFwKTsKIAlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOwogCWRldm1hcC0+dWlkID0gKnVpZDsKKwlyYyA9IGRhc2RfYWRkX3NlcnZlcih1aWQpOwogCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MKGRhc2Rfc2V0X3VpZCk7CitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX3NldF91aWQpOwogCiAvKgogICogUmV0dXJuIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmVhdHVyZS4KQEAgLTg4MCw3ICs5NDEsNyBAQAogCiAJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGNkZXYtPmRldi5idXNfaWQpOwogCWlmIChJU19FUlIoZGV2bWFwKSkKLQkJcmV0dXJuIChpbnQpIFBUUl9FUlIoZGV2bWFwKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGV2bWFwKTsKIAogCXJldHVybiAoKGRldm1hcC0+ZmVhdHVyZXMgJiBmZWF0dXJlKSAhPSAwKTsKIH0KQEAgLTg5Niw3ICs5NTcsNyBAQAogCiAJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGNkZXYtPmRldi5idXNfaWQpOwogCWlmIChJU19FUlIoZGV2bWFwKSkKLQkJcmV0dXJuIChpbnQpIFBUUl9FUlIoZGV2bWFwKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGV2bWFwKTsKIAogCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CiAJaWYgKGZsYWcpCkBAIC05MzIsOCArOTkzLDEwIEBACiAJZGFzZF9tYXhfZGV2aW5kZXggPSAwOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmRhc2RfaGFzaGxpc3RzW2ldKTsKLQlyZXR1cm4gMDsKIAorCS8qIEluaXRpYWxpemUgc2VydmVybWFwIHN0cnVjdHVyZS4gKi8KKwlJTklUX0xJU1RfSEVBRCgmZGFzZF9zZXJ2ZXJsaXN0KTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IDNmOWQ3MDQuLjIzZmEwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwogICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIDxIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20+CiAgKiBCYXNlZCBvbi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9tZGlzay5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzM2LDcgKzMzNSw3IEBACiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2RpYWdfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQlwcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZGlhZ19wcml2YXRlKSxHRlBfS0VSTkVMKTsKKwkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2RpYWdfcHJpdmF0ZSksR0ZQX0tFUk5FTCk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKIAkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHByaXZhdGUgZGF0YSIpOwpAQCAtNTI3LDcgKzUyNiw3IEBACiAJCQkJICAgZGF0YXNpemUsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKQogCQlyZXR1cm4gY3FyOwotCQorCiAJZHJlcSA9IChzdHJ1Y3QgZGFzZF9kaWFnX3JlcSAqKSBjcXItPmRhdGE7CiAJZHJlcS0+YmxvY2tfY291bnQgPSBjb3VudDsKIAlkYmlvID0gZHJlcS0+YmlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oCmluZGV4IDM4YTRlNTVmLi5iOGM3ODI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmgKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQmFzZWQgb24uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svbWRpc2suaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDdkNWE2Y2VlLi4yZTY1NWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0xLDcgKzEsNyBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgotICoJCSAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPiAKKyAqCQkgICAgSG9yc3QgSHVtbWVsIDxIb3JzdC5IdW1tZWxAZGUuaWJtLmNvbT4KICAqCQkgICAgQ2Fyc3RlbiBPdHRlIDxDb3R0ZUBkZS5pYm0uY29tPgogICoJCSAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKiBCdWdyZXBvcnRzLnRvLi46IDxMaW51eDM5MEBkZS5pYm0uY29tPgpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTI0LDYgKzIzLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdG9kY2xrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vY2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogCiAjaW5jbHVkZSAiZGFzZF9pbnQuaCIKQEAgLTg5LDE3ICs4OSwyMiBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBkYXNkX2dlbmVyaWNfcHJvYmUgKGNkZXYsICZkYXNkX2Vja2RfZGlzY2lwbGluZSk7Ci0JaWYgKHJldCkKKwkvKiBzZXQgRUNLRCBzcGVjaWZpYyBjY3ctZGV2aWNlIG9wdGlvbnMgKi8KKwlyZXQgPSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKGNkZXYsIENDV0RFVl9BTExPV19GT1JDRSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiZGFzZF9lY2tkX3Byb2JlOiBjb3VsZCBub3Qgc2V0IGNjdy1kZXZpY2Ugb3B0aW9ucyAiCisJCSAgICAgICAiZm9yICVzXG4iLCBjZGV2LT5kZXYuYnVzX2lkKTsKIAkJcmV0dXJuIHJldDsKLQljY3dfZGV2aWNlX3NldF9vcHRpb25zKGNkZXYsIENDV0RFVl9ET19QQVRIR1JPVVAgfCBDQ1dERVZfQUxMT1dfRk9SQ0UpOwotCXJldHVybiAwOworCX0KKwlyZXQgPSBkYXNkX2dlbmVyaWNfcHJvYmUoY2RldiwgJmRhc2RfZWNrZF9kaXNjaXBsaW5lKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBkYXNkX2Vja2Rfc2V0X29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlyZXR1cm4gZGFzZF9nZW5lcmljX3NldF9vbmxpbmUgKGNkZXYsICZkYXNkX2Vja2RfZGlzY2lwbGluZSk7CisJcmV0dXJuIGRhc2RfZ2VuZXJpY19zZXRfb25saW5lKGNkZXYsICZkYXNkX2Vja2RfZGlzY2lwbGluZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RyaXZlciBkYXNkX2Vja2RfZHJpdmVyID0gewpAQCAtMjEwLDE0ICsyMTUsMTQgQEAKIAogICAgICAgICAvKiBzd2l0Y2ggb24gU3lzdGVtIFRpbWUgU3RhbXAgLSBuZWVkZWQgZm9yIFhSQyBTdXBwb3J0ICovCiAgICAgICAgIGlmIChwcml2YXRlLT5yZGNfZGF0YS5mYWNpbGl0aWVzLlhSQ19zdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4MDg7IC8qIHN3aXRjaCBvbiAnVGltZSBTdGFtcCBWYWxpZCcgICAqLwogICAgICAgICAgICAgICAgIGRhdGEtPmdhX2V4dGVuZGVkIHw9IDB4MDI7IC8qIHN3aXRjaCBvbiAnRXh0ZW5kZWQgUGFyYW1ldGVyJyAqLwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGF0YS0+ZXBfc3lzX3RpbWUgPSBnZXRfY2xvY2sgKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZV9jY3ctPmNvdW50ID0gc2l6ZW9mIChzdHJ1Y3QgREVfZWNrZF9kYXRhKTsKLSAgICAgICAgICAgICAgICBkZV9jY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsgIAorCQlkZV9jY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybjsKQEAgLTI5Niw4ICszMDEsOCBAQAogCS8qIGNoZWNrIGZvciBzZXF1ZW50aWFsIHByZXN0YWdlIC0gZW5oYW5jZSBjeWxpbmRlciByYW5nZSAqLwogCWlmIChkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9QUkVTVEFHRSB8fAogCSAgICBkYXRhLT5hdHRyaWJ1dGVzLm9wZXJhdGlvbiA9PSBEQVNEX1NFUV9BQ0NFU1MpIHsKLQkJCi0JCWlmIChlbmQuY3lsICsgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCA8IGdlby5jeWwpIAorCisJCWlmIChlbmQuY3lsICsgcHJpdmF0ZS0+YXR0cmliLm5yX2N5bCA8IGdlby5jeWwpCiAJCQllbmQuY3lsICs9IHByaXZhdGUtPmF0dHJpYi5ucl9jeWw7CiAJCWVsc2UKIAkJCWVuZC5jeWwgPSAoZ2VvLmN5bCAtIDEpOwpAQCAtMzE3LDcgKzMyMiw3IEBACiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwogCWludCBzZWN0b3I7CiAJaW50IGRuLCBkOwotCQkJCQorCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgZGV2aWNlLApAQCAtNTQxLDYgKzU0Niw4NiBAQAogfQogCiAvKgorICogQnVpbGQgQ1AgZm9yIFBlcmZvcm0gU3Vic3lzdGVtIEZ1bmN0aW9uIC0gU1NDLgorICovCitzdHJ1Y3QgZGFzZF9jY3dfcmVxICoKK2Rhc2RfZWNrZF9idWlsZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQoreworICAgICAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKyAgICAgICBzdHJ1Y3QgZGFzZF9wc2Zfc3NjX2RhdGEgKnBzZl9zc2NfZGF0YTsKKyAgICAgICBzdHJ1Y3QgY2N3MSAqY2N3OworCisgICAgICAgY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoIkVDS0QiLCAxIC8qIFBTRiAqLyAsCisJCQkJICBzaXplb2Yoc3RydWN0IGRhc2RfcHNmX3NzY19kYXRhKSwKKwkJCQkgIGRldmljZSk7CisKKyAgICAgICBpZiAoSVNfRVJSKGNxcikpIHsKKwkgICAgICAgREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkgICAiQ291bGQgbm90IGFsbG9jYXRlIFBTRi1TU0MgcmVxdWVzdCIpOworCSAgICAgICByZXR1cm4gY3FyOworICAgICAgIH0KKyAgICAgICBwc2Zfc3NjX2RhdGEgPSAoc3RydWN0IGRhc2RfcHNmX3NzY19kYXRhICopY3FyLT5kYXRhOworICAgICAgIHBzZl9zc2NfZGF0YS0+b3JkZXIgPSBQU0ZfT1JERVJfU1NDOworICAgICAgIHBzZl9zc2NfZGF0YS0+c3Vib3JkZXIgPSAweDA4OworCisgICAgICAgY2N3ID0gY3FyLT5jcGFkZHI7CisgICAgICAgY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUFNGOworICAgICAgIGNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpcHNmX3NzY19kYXRhOworICAgICAgIGNjdy0+Y291bnQgPSA2NjsKKworICAgICAgIGNxci0+ZGV2aWNlID0gZGV2aWNlOworICAgICAgIGNxci0+ZXhwaXJlcyA9IDEwKkhaOworICAgICAgIGNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKKyAgICAgICBjcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKKyAgICAgICByZXR1cm4gY3FyOworfQorCisvKgorICogUGVyZm9ybSBTdWJzeXN0ZW0gRnVuY3Rpb24uCisgKiBJdCBpcyBuZWNlc3NhcnkgdG8gdHJpZ2dlciBDSU8gZm9yIGNoYW5uZWwgcmV2YWxpZGF0aW9uIHNpbmNlIHRoaXMKKyAqIGNhbGwgbWlnaHQgY2hhbmdlIGJlaGF2aW91ciBvZiBEQVNEIGRldmljZXMuCisgKi8KK3N0YXRpYyBpbnQKK2Rhc2RfZWNrZF9wc2Zfc3NjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQoreworICAgICAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKKyAgICAgICBpbnQgcmM7CisKKyAgICAgICBjcXIgPSBkYXNkX2Vja2RfYnVpbGRfcHNmX3NzYyhkZXZpY2UpOworICAgICAgIGlmIChJU19FUlIoY3FyKSkKKwkgICAgICAgcmV0dXJuIFBUUl9FUlIoY3FyKTsKKworICAgICAgIHJjID0gZGFzZF9zbGVlcF9vbihjcXIpOworICAgICAgIGlmICghcmMpCisJICAgICAgIC8qIHRyaWdnZXIgQ0lPIHRvIHJlcHJvYmUgZGV2aWNlcyAqLworCSAgICAgICBjc3Nfc2NoZWR1bGVfcmVwcm9iZSgpOworICAgICAgIGRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIGNxci0+ZGV2aWNlKTsKKyAgICAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBWYWxpZGUgc3RvcmFnZSBzZXJ2ZXIgb2YgY3VycmVudCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2Rhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJjOworCisJLyogQ3VycmVudGx5IFBBViBpcyB0aGUgb25seSByZWFzb24gdG8gJ3ZhbGlkYXRlJyBzZXJ2ZXIgb24gTFBBUiAqLworCWlmIChkYXNkX25vcGF2IHx8IE1BQ0hJTkVfSVNfVk0pCisJCXJldHVybiAwOworCisJcmMgPSBkYXNkX2Vja2RfcHNmX3NzYyhkZXZpY2UpOworCWlmIChyYykKKwkJLyogbWF5IGJlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgb24gc2VydmVyLAorCQkgKiB0aGVyZWZvcmUganVzdCByZXBvcnQgZXJyb3IgYW5kIGdvIGFoZWFkICovCisJCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLAorCQkJICAgICJQZXJmb3JtIFN1YnN5c3RlbSBGdW5jdGlvbiByZXR1cm5lZCByYz0lZCIsIHJjKTsKKwkvKiBSRS1SZWFkIENvbmZpZ3VyYXRpb24gRGF0YSAqLworCXJldHVybiBkYXNkX2Vja2RfcmVhZF9jb25mKGRldmljZSk7Cit9CisKKy8qCiAgKiBDaGVjayBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzLgogICogSWYgdGhlIGRldmljZSBpcyBhY2Nlc3NpYmxlIHVzaW5nIEVDS0QgZGlzY2lwbGluZSwgdGhlIGRldmljZSBpcyBlbmFibGVkLgogICovCkBAIC01NTQsNyArNjM5LDcgQEAKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZSA9PSBOVUxMKSB7Ci0JCXByaXZhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUpLAorCQlwcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlKSwKIAkJCQkgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKHByaXZhdGUgPT0gTlVMTCkgewogCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCkBAIC01NjIsNyArNjQ3LDYgQEAKIAkJCQkgICAgImRhdGEiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldChwcml2YXRlLCAwLCBzaXplb2Yoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlKSk7CiAJCWRldmljZS0+cHJpdmF0ZSA9ICh2b2lkICopIHByaXZhdGU7CiAJfQogCS8qIEludmFsaWRhdGUgc3RhdHVzIG9mIGluaXRpYWwgYW5hbHlzaXMuICovCkBAIC01NzEsMTYgKzY1NSwyOSBAQAogCXByaXZhdGUtPmF0dHJpYi5vcGVyYXRpb24gPSBEQVNEX05PUk1BTF9DQUNIRTsKIAlwcml2YXRlLT5hdHRyaWIubnJfY3lsID0gMDsKIAorCS8qIFJlYWQgQ29uZmlndXJhdGlvbiBEYXRhICovCisJcmMgPSBkYXNkX2Vja2RfcmVhZF9jb25mKGRldmljZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBHZW5lcmF0ZSBkZXZpY2UgdW5pcXVlIGlkIGFuZCByZWdpc3RlciBpbiBkZXZtYXAgKi8KKwlyYyA9IGRhc2RfZWNrZF9nZW5lcmF0ZV91aWQoZGV2aWNlLCAmdWlkKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IGRhc2Rfc2V0X3VpZChkZXZpY2UtPmNkZXYsICZ1aWQpOworCWlmIChyYyA9PSAxKQkvKiBuZXcgc2VydmVyIGZvdW5kICovCisJCXJjID0gZGFzZF9lY2tkX3ZhbGlkYXRlX3NlcnZlcihkZXZpY2UpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCiAJcmRjX2RhdGEgPSAodm9pZCAqKSAmKHByaXZhdGUtPnJkY19kYXRhKTsKIAltZW1zZXQocmRjX2RhdGEsIDAsIHNpemVvZihyZGNfZGF0YSkpOwogCXJjID0gcmVhZF9kZXZfY2hhcnMoZGV2aWNlLT5jZGV2LCAmcmRjX2RhdGEsIDY0KTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLAotCQkJICAgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgcmV0dXJuZWQgZXJyb3IgJWQiLAotCQkJICAgIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KKwkJCSAgICAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkICIKKwkJCSAgICAicmM9JWQiLCByYyk7CiAKIAlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKIAkJICAgICIlMDRYLyUwMlgoQ1U6JTA0WC8lMDJYKSBDeWw6JWQgSGVhZDolZCBTZWM6JWQiLApAQCAtNTkxLDE5ICs2ODgsNiBAQAogCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEubm9fY3lsLAogCQkgICAgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCiAJCSAgICBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3Ryayk7Ci0KLQkvKiBSZWFkIENvbmZpZ3VyYXRpb24gRGF0YSAqLwotCXJjID0gZGFzZF9lY2tkX3JlYWRfY29uZiAoZGV2aWNlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIEdlbmVyYXRlIGRldmljZSB1bmlxdWUgaWQgYW5kIHJlZ2lzdGVyIGluIGRldm1hcCAqLwotCXJjID0gZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChkZXZpY2UsICZ1aWQpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSBkYXNkX3NldF91aWQoZGV2aWNlLT5jZGV2LCAmdWlkKTsKLQogCXJldHVybiByYzsKIH0KIApAQCAtNzczLDcgKzg1Nyw3IEBACiAJCSAgICAoKHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bCAqCiAJCSAgICAgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKIAkJICAgICAgYmxrX3Blcl90cmsgKiAoZGV2aWNlLT5icF9ibG9jayA+PiA5KSkgPj4gMSksCi0JCSAgICAoKGJsa19wZXJfdHJrICogZGV2aWNlLT5icF9ibG9jaykgPj4gMTApLCAKKwkJICAgICgoYmxrX3Blcl90cmsgKiBkZXZpY2UtPmJwX2Jsb2NrKSA+PiAxMCksCiAJCSAgICBwcml2YXRlLT51c2VzX2NkbCA/CiAJCSAgICAiY29tcGF0aWJsZSBkaXNrIGxheW91dCIgOiAibGludXggZGlzayBsYXlvdXQiKTsKIApAQCAtOTcwLDcgKzEwNTQsNyBAQAogCQkJCWlmIChpIDwgMykgewogCQkJCQllY3QtPmtsID0gNDsKIAkJCQkJZWN0LT5kbCA9IHNpemVzX3RyazBbaV0gLSA0OwotCQkJCX0gCisJCQkJfQogCQkJfQogCQkJaWYgKChmZGF0YS0+aW50ZW5zaXR5ICYgMHgwOCkgJiYKIAkJCSAgICBmZGF0YS0+c3RhcnRfdW5pdCA9PSAxKSB7CkBAIC0xMjcwLDcgKzEzNTQsNyBAQAogCiAvKgogICogUmVsZWFzZSBkZXZpY2UgaW9jdGwuCi0gKiBCdWlscyBhIGNoYW5uZWwgcHJvZ3JhbW0gdG8gcmVsZWFzZXMgYSBwcmlvciByZXNlcnZlZCAKKyAqIEJ1aWxzIGEgY2hhbm5lbCBwcm9ncmFtbSB0byByZWxlYXNlcyBhIHByaW9yIHJlc2VydmVkCiAgKiAoc2VlIGRhc2RfZWNrZF9yZXNlcnZlKSBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTEzMTAsOCArMTM5NCw4IEBACiAvKgogICogUmVzZXJ2ZSBkZXZpY2UgaW9jdGwuCiAgKiBPcHRpb25zIGFyZSBzZXQgdG8gJ3N5bmNocm9ub3VzIHdhaXQgZm9yIGludGVycnVwdCcgYW5kCi0gKiAndGltZW91dCB0aGUgcmVxdWVzdCcuIFRoaXMgbGVhZHMgdG8gYSB0ZXJtaW5hdGUgSU8gaWYgCi0gKiB0aGUgaW50ZXJydXB0IGlzIG91dHN0YW5kaW5nIGZvciBhIGNlcnRhaW4gdGltZS4gCisgKiAndGltZW91dCB0aGUgcmVxdWVzdCcuIFRoaXMgbGVhZHMgdG8gYSB0ZXJtaW5hdGUgSU8gaWYKKyAqIHRoZSBpbnRlcnJ1cHQgaXMgb3V0c3RhbmRpbmcgZm9yIGEgY2VydGFpbiB0aW1lLgogICovCiBzdGF0aWMgaW50CiBkYXNkX2Vja2RfcmVzZXJ2ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKQEAgLTEzNDksNyArMTQzMyw3IEBACiAKIC8qCiAgKiBTdGVhbCBsb2NrIGlvY3RsIC0gdW5jb25kaXRpb25hbCByZXNlcnZlIGRldmljZS4KLSAqIEJ1aWxzIGEgY2hhbm5lbCBwcm9ncmFtbSB0byBicmVhayBhIGRldmljZSdzIHJlc2VydmF0aW9uLiAKKyAqIEJ1aWxzIGEgY2hhbm5lbCBwcm9ncmFtbSB0byBicmVhayBhIGRldmljZSdzIHJlc2VydmF0aW9uLgogICogKHVuY29uZGl0aW9uYWwgcmVzZXJ2ZSkKICAqLwogc3RhdGljIGludApAQCAtMTUyMiw2ICsxNjA2LDQwIEBACiB9CiAKIC8qCisgKiBEdW1wIHRoZSByYW5nZSBvZiBDQ1dzIGludG8gJ3BhZ2UnIGJ1ZmZlcgorICogYW5kIHJldHVybiBudW1iZXIgb2YgcHJpbnRlZCBjaGFycy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2Rhc2RfZWNrZF9kdW1wX2Njd19yYW5nZShzdHJ1Y3QgY2N3MSAqZnJvbSwgc3RydWN0IGNjdzEgKnRvLCBjaGFyICpwYWdlKQoreworCWludCBsZW4sIGNvdW50OworCWNoYXIgKmRhdGFwOworCisJbGVuID0gMDsKKwl3aGlsZSAoZnJvbSA8PSB0bykgeworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkgICAgICAgIiBDQ1cgJXA6ICUwOFggJTA4WCBEQVQ6IiwKKwkJCSAgICAgICBmcm9tLCAoKGludCAqKSBmcm9tKVswXSwgKChpbnQgKikgZnJvbSlbMV0pOworCisJCS8qIGdldCBwb2ludGVyIHRvIGRhdGEgKGNvbnNpZGVyIElEQUxzKSAqLworCQlpZiAoZnJvbS0+ZmxhZ3MgJiBDQ1dfRkxBR19JREEpCisJCQlkYXRhcCA9IChjaGFyICopICooKGFkZHJfdCAqKSAoYWRkcl90KSBmcm9tLT5jZGEpOworCQllbHNlCisJCQlkYXRhcCA9IChjaGFyICopICgoYWRkcl90KSBmcm9tLT5jZGEpOworCisJCS8qIGR1bXAgZGF0YSAobWF4IDMyIGJ5dGVzKSAqLworCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBmcm9tLT5jb3VudCAmJiBjb3VudCA8IDMyOyBjb3VudCsrKSB7CisJCQlpZiAoY291bnQgJSA4ID09IDApIGxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgIik7CisJCQlpZiAoY291bnQgJSA0ID09IDApIGxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgIik7CisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiJTAyeCIsIGRhdGFwW2NvdW50XSk7CisJCX0KKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJCWZyb20rKzsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoKICAqIFByaW50IHNlbnNlIGRhdGEgYW5kIHJlbGF0ZWQgY2hhbm5lbCBwcm9ncmFtLgogICogUGFydHMgYXJlIHByaW50ZWQgYmVjYXVzZSBwcmludGsgYnVmZmVyIGlzIG9ubHkgMTAyNCBieXRlcy4KICAqLwpAQCAtMTUzMCw4ICsxNjQ4LDggQEAKIAkJICAgICBzdHJ1Y3QgaXJiICppcmIpCiB7CiAJY2hhciAqcGFnZTsKLQlzdHJ1Y3QgY2N3MSAqYWN0LCAqZW5kLCAqbGFzdDsKLQlpbnQgbGVuLCBzbCwgc2N0LCBjb3VudDsKKwlzdHJ1Y3QgY2N3MSAqZmlyc3QsICpsYXN0LCAqZmFpbCwgKmZyb20sICp0bzsKKwlpbnQgbGVuLCBzbCwgc2N0OwogCiAJcGFnZSA9IChjaGFyICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAocGFnZSA9PSBOVUxMKSB7CkBAIC0xNTM5LDcgKzE2NTcsOCBAQAogCQkJICAgICJObyBtZW1vcnkgdG8gZHVtcCBzZW5zZSBkYXRhIik7CiAJCXJldHVybjsKIAl9Ci0JbGVuID0gc3ByaW50ZihwYWdlLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJLyogZHVtcCB0aGUgc2Vuc2UgZGF0YSAqLworCWxlbiA9IHNwcmludGYocGFnZSwgIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJICAgICAgIiBJL08gc3RhdHVzIHJlcG9ydCBmb3IgZGV2aWNlICVzOlxuIiwKIAkJICAgICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKIAlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCkBAIC0xNTY0LDg3ICsxNjgzLDU1IEBACiAKIAkJaWYgKGlyYi0+ZWN3WzI3XSAmIERBU0RfU0VOU0VfQklUXzApIHsKIAkJCS8qIDI0IEJ5dGUgU2Vuc2UgRGF0YSAqLwotCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgotCQkJCSAgICAgICAiIDI0IEJ5dGU6ICV4IE1TRyAleCwgIgotCQkJCSAgICAgICAiJXMgTVNHYiB0byBTWVNPUFxuIiwKLQkJCQkgICAgICAgaXJiLT5lY3dbN10gPj4gNCwgaXJiLT5lY3dbN10gJiAweDBmLAotCQkJCSAgICAgICBpcmItPmVjd1sxXSAmIDB4MTAgPyAiIiA6ICJubyIpOworCQkJc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCisJCQkJIiAyNCBCeXRlOiAleCBNU0cgJXgsICIKKwkJCQkiJXMgTVNHYiB0byBTWVNPUFxuIiwKKwkJCQlpcmItPmVjd1s3XSA+PiA0LCBpcmItPmVjd1s3XSAmIDB4MGYsCisJCQkJaXJiLT5lY3dbMV0gJiAweDEwID8gIiIgOiAibm8iKTsKIAkJfSBlbHNlIHsKIAkJCS8qIDMyIEJ5dGUgU2Vuc2UgRGF0YSAqLwotCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgotCQkJCSAgICAgICAiIDMyIEJ5dGU6IEZvcm1hdDogJXggIgotCQkJCSAgICAgICAiRXhjZXB0aW9uIGNsYXNzICV4XG4iLAotCQkJCSAgICAgICBpcmItPmVjd1s2XSAmIDB4MGYsIGlyYi0+ZWN3WzIyXSA+PiA0KTsKKwkJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJCSIgMzIgQnl0ZTogRm9ybWF0OiAleCAiCisJCQkJIkV4Y2VwdGlvbiBjbGFzcyAleFxuIiwKKwkJCQlpcmItPmVjd1s2XSAmIDB4MGYsIGlyYi0+ZWN3WzIyXSA+PiA0KTsKIAkJfQogCX0gZWxzZSB7Ci0JICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCi0JCQkgICAgICAgIiBTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CisJCXNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgorCQkJIiBTT1JSWSAtIE5PIFZBTElEIFNFTlNFIEFWQUlMQUJMRVxuIik7CiAJfQotCU1FU1NBR0VfTE9HKEtFUk5fRVJSLCAiJXMiLAotCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJcHJpbnRrKCIlcyIsIHBhZ2UpOwogCi0JLyogZHVtcCB0aGUgQ2hhbm5lbCBQcm9ncmFtICovCi0JLyogcHJpbnQgZmlyc3QgQ0NXcyAobWF4aW11bSA4KSAqLwotCWFjdCA9IHJlcS0+Y3BhZGRyOwotICAgICAgICBmb3IgKGxhc3QgPSBhY3Q7IGxhc3QtPmZsYWdzICYgKENDV19GTEFHX0NDIHwgQ0NXX0ZMQUdfREMpOyBsYXN0KyspOwotCWVuZCA9IG1pbihhY3QgKyA4LCBsYXN0KTsKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkvKiBkdW1wIHRoZSBDaGFubmVsIFByb2dyYW0gKG1heCAxNDAgQnl0ZXMgcGVyIGxpbmUpICovCisJLyogQ291bnQgQ0NXIGFuZCBwcmludCBmaXJzdCBDQ1dzIChtYXhpbXVtIDEwMjQgJSAxNDAgPSA3KSAqLworCWZpcnN0ID0gcmVxLT5jcGFkZHI7CisJZm9yIChsYXN0ID0gZmlyc3Q7IGxhc3QtPmZsYWdzICYgKENDV19GTEFHX0NDIHwgQ0NXX0ZMQUdfREMpOyBsYXN0KyspOworCXRvID0gbWluKGZpcnN0ICsgNiwgbGFzdCk7CisJbGVuID0gc3ByaW50ZihwYWdlLCAgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgogCQkgICAgICAiIFJlbGF0ZWQgQ1AgaW4gcmVxOiAlcFxuIiwgcmVxKTsKLQl3aGlsZSAoYWN0IDw9IGVuZCkgewotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCi0JCQkgICAgICAgIiBDQ1cgJXA6ICUwOFggJTA4WCBEQVQ6IiwKLQkJCSAgICAgICBhY3QsICgoaW50ICopIGFjdClbMF0sICgoaW50ICopIGFjdClbMV0pOwotCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAzMiAmJiBjb3VudCA8IGFjdC0+Y291bnQ7Ci0JCSAgICAgY291bnQgKz0gc2l6ZW9mKGludCkpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiICUwOFgiLAotCQkJCSAgICAgICAoKGludCAqKSAoYWRkcl90KSBhY3QtPmNkYSkKLQkJCQkgICAgICAgWyhjb3VudD4+MildKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JCWFjdCsrOwotCX0KLQlNRVNTQUdFX0xPRyhLRVJOX0VSUiwgIiVzIiwKLQkJICAgIHBhZ2UgKyBzaXplb2YoS0VSTl9FUlIgUFJJTlRLX0hFQURFUikpOworCWRhc2RfZWNrZF9kdW1wX2Njd19yYW5nZShmaXJzdCwgdG8sIHBhZ2UgKyBsZW4pOworCXByaW50aygiJXMiLCBwYWdlKTsKIAotCS8qIHByaW50IGZhaWxpbmcgQ0NXIGFyZWEgKi8KKwkvKiBwcmludCBmYWlsaW5nIENDVyBhcmVhIChtYXhpbXVtIDQpICovCisJLyogc2Nzdy0+Y2RhIGlzIGVpdGhlciB2YWxpZCBvciB6ZXJvICAqLwogCWxlbiA9IDA7Ci0JaWYgKGFjdCA8ICAoKHN0cnVjdCBjY3cxICopKGFkZHJfdCkgaXJiLT5zY3N3LmNwYSkgLSAyKSB7Ci0JCWFjdCA9ICgoc3RydWN0IGNjdzEgKikoYWRkcl90KSBpcmItPnNjc3cuY3BhKSAtIDI7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIgIi4uLi4uLlxuIik7CisJZnJvbSA9ICsrdG87CisJZmFpbCA9IChzdHJ1Y3QgY2N3MSAqKShhZGRyX3QpIGlyYi0+c2Nzdy5jcGE7IC8qIGZhaWxpbmcgQ0NXICovCisJaWYgKGZyb20gPCAgZmFpbCAtIDIpIHsKKwkJZnJvbSA9IGZhaWwgLSAyOyAgICAgLyogdGhlcmUgaXMgYSBnYXAgLSBwcmludCBoZWFkZXIgKi8KKwkJbGVuICs9IHNwcmludGYocGFnZSwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUiAiLi4uLi4uXG4iKTsKIAl9Ci0JZW5kID0gbWluKChzdHJ1Y3QgY2N3MSAqKShhZGRyX3QpIGlyYi0+c2Nzdy5jcGEgKyAyLCBsYXN0KTsKLQl3aGlsZSAoYWN0IDw9IGVuZCkgewotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSCi0JCQkgICAgICAgIiBDQ1cgJXA6ICUwOFggJTA4WCBEQVQ6IiwKLQkJCSAgICAgICBhY3QsICgoaW50ICopIGFjdClbMF0sICgoaW50ICopIGFjdClbMV0pOwotCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAzMiAmJiBjb3VudCA8IGFjdC0+Y291bnQ7Ci0JCSAgICAgY291bnQgKz0gc2l6ZW9mKGludCkpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiICUwOFgiLAotCQkJCSAgICAgICAoKGludCAqKSAoYWRkcl90KSBhY3QtPmNkYSkKLQkJCQkgICAgICAgWyhjb3VudD4+MildKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JCWFjdCsrOwotCX0KKwl0byA9IG1pbihmYWlsICsgMSwgbGFzdCk7CisJbGVuICs9IGRhc2RfZWNrZF9kdW1wX2Njd19yYW5nZShmcm9tLCB0bywgcGFnZSArIGxlbik7CiAKLQkvKiBwcmludCBsYXN0IENDV3MgKi8KLQlpZiAoYWN0IDwgIGxhc3QgLSAyKSB7Ci0JCWFjdCA9IGxhc3QgLSAyOworCS8qIHByaW50IGxhc3QgQ0NXcyAobWF4aW11bSAyKSAqLworCWZyb20gPSBtYXgoZnJvbSwgKyt0byk7CisJaWYgKGZyb20gPCBsYXN0IC0gMSkgeworCQlmcm9tID0gbGFzdCAtIDE7ICAgICAvKiB0aGVyZSBpcyBhIGdhcCAtIHByaW50IGhlYWRlciAqLwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCBLRVJOX0VSUiBQUklOVEtfSEVBREVSICIuLi4uLi5cbiIpOwogCX0KLQl3aGlsZSAoYWN0IDw9IGxhc3QpIHsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgotCQkJICAgICAgICIgQ0NXICVwOiAlMDhYICUwOFggREFUOiIsCi0JCQkgICAgICAgYWN0LCAoKGludCAqKSBhY3QpWzBdLCAoKGludCAqKSBhY3QpWzFdKTsKLQkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMzIgJiYgY291bnQgPCBhY3QtPmNvdW50OwotCQkgICAgIGNvdW50ICs9IHNpemVvZihpbnQpKQotCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiAlMDhYIiwKLQkJCQkgICAgICAgKChpbnQgKikgKGFkZHJfdCkgYWN0LT5jZGEpCi0JCQkJICAgICAgIFsoY291bnQ+PjIpXSk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCQlhY3QrKzsKLQl9CisJbGVuICs9IGRhc2RfZWNrZF9kdW1wX2Njd19yYW5nZShmcm9tLCBsYXN0LCBwYWdlICsgbGVuKTsKIAlpZiAobGVuID4gMCkKLQkJTUVTU0FHRV9MT0coS0VSTl9FUlIsICIlcyIsCi0JCQkgICAgcGFnZSArIHNpemVvZihLRVJOX0VSUiBQUklOVEtfSEVBREVSKSk7CisJCXByaW50aygiJXMiLCBwYWdlKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwogfQogCkBAIC0xNjg1LDE0ICsxNzcyLDggQEAKIHN0YXRpYyBpbnQgX19pbml0CiBkYXNkX2Vja2RfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KIAlBU0NFQkMoZGFzZF9lY2tkX2Rpc2NpcGxpbmUuZWJjbmFtZSwgNCk7Ci0KLQlyZXQgPSBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZkYXNkX2Vja2RfZHJpdmVyKTsKLQlpZiAoIXJldCkKLQkJZGFzZF9nZW5lcmljX2F1dG9fb25saW5lKCZkYXNkX2Vja2RfZHJpdmVyKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZkYXNkX2Vja2RfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CkBAIC0xNzAzLDIyICsxNzg0LDMgQEAKIAogbW9kdWxlX2luaXQoZGFzZF9lY2tkX2luaXQpOwogbW9kdWxlX2V4aXQoZGFzZF9lY2tkX2NsZWFudXApOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWluZGVudC1sZXZlbDogNCAKLSAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAotICogYy1icmFjZS1vZmZzZXQ6IC00Ci0gKiBjLWFyZ2RlY2wtaW5kZW50OiA0Ci0gKiBjLWxhYmVsLW9mZnNldDogLTQKLSAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKLSAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAotICogaW5kZW50LXRhYnMtbW9kZTogMQotICogdGFiLXdpZHRoOiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAppbmRleCBkNTczNGU5Li43MTJmZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCkBAIC0xLDcgKzEsNyBAQAotLyogCisvKgogICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgotICogICAgICAgICAgICAgICAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPiAKKyAqCQkgICAgSG9yc3QgSHVtbWVsIDxIb3JzdC5IdW1tZWxAZGUuaWJtLmNvbT4KICAqIEJ1Z3JlcG9ydHMudG8uLjogPExpbnV4MzkwQGRlLmlibS5jb20+CiAgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OSwyMDAwCiAgKgpAQCAtNDEsOSArNDEsMTAgQEAKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRVNFUlZFCQkgMHhCNAogCiAvKgotICpQZXJmb3JtIFN1YnN5c3RlbSBGdW5jdGlvbiAvIFN1Yi1PcmRlcnMKKyAqIFBlcmZvcm0gU3Vic3lzdGVtIEZ1bmN0aW9uIC8gU3ViLU9yZGVycwogICovCi0jZGVmaW5lIFBTRl9PUkRFUl9QUlNTRAkJCSAweDE4CisjZGVmaW5lIFBTRl9PUkRFUl9QUlNTRCAweDE4CisjZGVmaW5lIFBTRl9PUkRFUl9TU0MJMHgxRAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNFQ1RJT046IFR5cGUgRGVmaW5pdGlvbnMKQEAgLTE1NSw3ICsxNTYsNyBAQAogCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMjo0OwogCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMzo4OwogCQl1bnNpZ25lZCBjaGFyIGRlZmVjdF93cjoxOwotCQl1bnNpZ25lZCBjaGFyIFhSQ19zdXBwb3J0ZWQ6MTsgCisJCXVuc2lnbmVkIGNoYXIgWFJDX3N1cHBvcnRlZDoxOwogCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkNDoxOwogCQl1bnNpZ25lZCBjaGFyIHN0cmlwaW5nOjE7CiAJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ1OjQ7CkBAIC0zNDMsNyArMzQ0LDcgQEAKIH07CiAKIC8qCi0gKiBQZXJmb3JtIFN1YnN5c3RlbSBGdW5jdGlvbiAtIFByZXBhcmUgZm9yIFJlYWQgU3Vic3lzdGVtIERhdGEJIAorICogUGVyZm9ybSBTdWJzeXN0ZW0gRnVuY3Rpb24gLSBQcmVwYXJlIGZvciBSZWFkIFN1YnN5c3RlbSBEYXRhCiAgKi8KIHN0cnVjdCBkYXNkX3BzZl9wcnNzZF9kYXRhIHsKIAl1bnNpZ25lZCBjaGFyIG9yZGVyOwpAQCAtMzUzLDQgKzM1NCwxNSBAQAogCXVuc2lnbmVkIGNoYXIgdmFyaWVzWzldOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qCisgKiBQZXJmb3JtIFN1YnN5c3RlbSBGdW5jdGlvbiAtIFNldCBTdWJzeXN0ZW0gQ2hhcmFjdGVyaXN0aWNzCisgKi8KK3N0cnVjdCBkYXNkX3BzZl9zc2NfZGF0YSB7CisJdW5zaWduZWQgY2hhciBvcmRlcjsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgY3VfdHlwZVs0XTsKKwl1bnNpZ25lZCBjaGFyIHN1Ym9yZGVyOworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNTldOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogI2VuZGlmCQkJCS8qIERBU0RfRUNLRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCmluZGV4IDJkOGFmNzAuLmRhNjVmMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlfX3U2NCB0dl9zZWM7CiAJX191NjQgdHZfdXNlYzsKIAljaGFyIGJ1c2lkW0RBU0RfRUVSX0JVU0lEX1NJWkVdOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKgogICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgdGhvc2UgdHJpZ2dlcnMgdGhhdCBoYXZlCkBAIC01MjEsNiArNTIxLDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZWVyYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZXJidWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVlcmIpCisJCXJldHVybiAtRU5PTUVNOwogCWVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50ID0gZWVyX3BhZ2VzOwogCWlmIChlZXJiLT5idWZmZXJfcGFnZV9jb3VudCA8IDEgfHwKIAkgICAgZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPiBJTlRfTUFYIC8gUEFHRV9TSVpFKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCmluZGV4IGI4NDIzNzcuLjU4YTY1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKQEAgLTkwLDcgKzg5LDcgQEAKIAogICAgICAgICAvKiBqdXN0IHJldHJ5IC0gdGhlcmUgaXMgbm90aGluZyB0byBzYXZlIC4uLiBJIGdvdCBubyBzZW5zZSBkYXRhLi4uLiAqLwogICAgICAgICBpZiAoY3FyLT5yZXRyaWVzID4gMCkgewotICAgICAgICAgICAgICAgIERFVl9NRVNTQUdFIChLRVJOX0RFQlVHLCBkZXZpY2UsIAorCQlERVZfTUVTU0FHRSAoS0VSTl9ERUJVRywgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCBFUlAgY2FsbGVkICglaSByZXRyaWVzIGxlZnQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FyLT5yZXRyaWVzKTsKIAkJY3FyLT5scG0gICAgPSBMUE1fQU5ZUEFUSDsKQEAgLTE1NSw3ICsxNTQsNyBAQAogCiAvKgogICogUHJpbnQgdGhlIGhleCBkdW1wIG9mIHRoZSBtZW1vcnkgdXNlZCBieSBhIHJlcXVlc3QuIFRoaXMgaW5jbHVkZXMKLSAqIGFsbCBlcnJvciByZWNvdmVyeSBjY3dzIHRoYXQgaGF2ZSBiZWVuIGNoYWluZWQgaW4gZnJvbSBvZiB0aGUgCisgKiBhbGwgZXJyb3IgcmVjb3ZlcnkgY2N3cyB0aGF0IGhhdmUgYmVlbiBjaGFpbmVkIGluIGZyb20gb2YgdGhlCiAgKiByZWFsIHJlcXVlc3QuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjI3LDEyICsyMjYsMTIgQEAKIAkJLyoKIAkJICogTG9nIGJ5dGVzIGFycm91bmQgZmFpbGVkIENDVyBidXQgb25seSBpZiB3ZSBkaWQKIAkJICogbm90IGxvZyB0aGUgd2hvbGUgQ1Agb2YgdGhlIENDVyBpcyBvdXRzaWRlIHRoZQotCQkgKiBsb2dnZWQgQ1AuIAorCQkgKiBsb2dnZWQgQ1AuCiAJCSAqLwogCQlpZiAoY3BsZW5ndGggPiA0MCB8fAogCQkgICAgKChhZGRyX3QpIGNwYSA8IChhZGRyX3QpIGxjcXItPmNwYWRkciAmJgogCQkgICAgIChhZGRyX3QpIGNwYSA+IChhZGRyX3QpIChsY3FyLT5jcGFkZHIgKyBjcGxlbmd0aCArIDQpKSkgewotCQkJCisKIAkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCiAJCQkJICAgICJGYWlsZWQgQ0NXICglcCkgKGFyZWEpOiIsCiAJCQkJICAgICh2b2lkICopIChsb25nKSBjcGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCA5MTE0NTY5Li44MDg0MzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KQEAgLTYsNyArNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KQEAgLTU2LDE5ICs1NSwxMyBAQAogc3RhdGljIGludAogZGFzZF9mYmFfcHJvYmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IGRhc2RfZ2VuZXJpY19wcm9iZSAoY2RldiwgJmRhc2RfZmJhX2Rpc2NpcGxpbmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JY2N3X2RldmljZV9zZXRfb3B0aW9ucyhjZGV2LCBDQ1dERVZfRE9fUEFUSEdST1VQKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGFzZF9nZW5lcmljX3Byb2JlKGNkZXYsICZkYXNkX2ZiYV9kaXNjaXBsaW5lKTsKIH0KIAogc3RhdGljIGludAogZGFzZF9mYmFfc2V0X29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlyZXR1cm4gZGFzZF9nZW5lcmljX3NldF9vbmxpbmUgKGNkZXYsICZkYXNkX2ZiYV9kaXNjaXBsaW5lKTsKKwlyZXR1cm4gZGFzZF9nZW5lcmljX3NldF9vbmxpbmUoY2RldiwgJmRhc2RfZmJhX2Rpc2NpcGxpbmUpOwogfQogCiBzdGF0aWMgc3RydWN0IGNjd19kcml2ZXIgZGFzZF9mYmFfZHJpdmVyID0gewpAQCAtMTI1LDEzICsxMTgsMTMgQEAKIGRhc2RfZmJhX2NoZWNrX2NoYXJhY3RlcmlzdGljcyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSAqcHJpdmF0ZTsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IGRldmljZS0+Y2RldjsJCisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBkZXZpY2UtPmNkZXY7CiAJdm9pZCAqcmRjX2RhdGE7CiAJaW50IHJjOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAJaWYgKHByaXZhdGUgPT0gTlVMTCkgewotCQlwcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2ZiYV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChwcml2YXRlID09IE5VTEwpIHsKIAkJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJCSAgICAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlICIKQEAgLTIwNCw3ICsxOTcsNyBAQAogCWlmIChpcmItPnNjc3cuY3N0YXQgPT0gMHgwMCAmJgogCSAgICBpcmItPnNjc3cuZHN0YXQgPT0gKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkKIAkJcmV0dXJuIGRhc2RfZXJhX25vbmU7Ci0JCisKIAljZGV2ID0gZGV2aWNlLT5jZGV2OwogCXN3aXRjaCAoY2Rldi0+aWQuZGV2X3R5cGUpIHsKIAljYXNlIDB4MzM3MDoKQEAgLTUzOSw3ICs1MzIsNyBAQAogICogODE5MiBieXRlcyAoPTIgcGFnZXMpLiBGb3IgNjQgYml0IG9uZSBkYXNkX21jaHVua3RfdCBzdHJ1Y3R1cmUgaGFzCiAgKiAyNCBieXRlcywgdGhlIHN0cnVjdCBkYXNkX2Njd19yZXEgaGFzIDEzNiBieXRlcyBhbmQgZWFjaCBibG9jayBjYW4gdXNlCiAgKiB1cCB0byAxNiBieXRlcyAoOCBmb3IgdGhlIGNjdyBhbmQgOCBmb3IgdGhlIGlkYWwgcG9pbnRlcikuIEluCi0gKiBhZGRpdGlvbiB3ZSBoYXZlIG9uZSBkZWZpbmUgZXh0ZW50IGNjdyArIDE2IGJ5dGVzIG9mIGRhdGEgYW5kIGEgCisgKiBhZGRpdGlvbiB3ZSBoYXZlIG9uZSBkZWZpbmUgZXh0ZW50IGNjdyArIDE2IGJ5dGVzIG9mIGRhdGEgYW5kIGEKICAqIGxvY2F0ZSByZWNvcmQgY2N3IGZvciBlYWNoIGJsb2NrIChzdHVwaWQgZGV2aWNlcyEpICsgMTYgYnl0ZXMgb2YgZGF0YS4KICAqIFRoYXQgbWFrZXM6CiAgKiAoODE5MiAtIDI0IC0gMTM2IC0gOCAtIDE2KSAvIDQwID0gMjAwLjIgYmxvY2tzIGF0IG1heGltdW0uCkBAIC01NjksMTYgKzU2Miw4IEBACiBzdGF0aWMgaW50IF9faW5pdAogZGFzZF9mYmFfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KIAlBU0NFQkMoZGFzZF9mYmFfZGlzY2lwbGluZS5lYmNuYW1lLCA0KTsKLQotCXJldCA9IGNjd19kcml2ZXJfcmVnaXN0ZXIoJmRhc2RfZmJhX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWRhc2RfZ2VuZXJpY19hdXRvX29ubGluZSgmZGFzZF9mYmFfZHJpdmVyKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2N3X2RyaXZlcl9yZWdpc3RlcigmZGFzZF9mYmFfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CkBAIC01ODksMjIgKzU3NCwzIEBACiAKIG1vZHVsZV9pbml0KGRhc2RfZmJhX2luaXQpOwogbW9kdWxlX2V4aXQoZGFzZF9mYmFfY2xlYW51cCk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtaW5kZW50LWxldmVsOiA0IAotICogYy1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCi0gKiBjLWJyYWNlLW9mZnNldDogLTQKLSAqIGMtYXJnZGVjbC1pbmRlbnQ6IDQKLSAqIGMtbGFiZWwtb2Zmc2V0OiAtNAotICogYy1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogNAotICogYy1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCi0gKiBpbmRlbnQtdGFicy1tb2RlOiAxCi0gKiB0YWItd2lkdGg6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuaAppbmRleCBkYTFmYTkxLi4xNGM5MTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuaApAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmgKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IGZjZTI4MzUuLjEyYzdkMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgpAQCAtNjgsOCArNjcsNiBAQAogCX0KIAlsZW4gKz0gc3ByaW50ZihnZHAtPmRpc2tfbmFtZSArIGxlbiwgIiVjIiwgJ2EnKyhkZXZpY2UtPmRldmluZGV4JTI2KSk7CiAKLSAJc3ByaW50ZihnZHAtPmRldmZzX25hbWUsICJkYXNkLyVzIiwgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKLQogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZKQogCQlzZXRfZGlza19ybyhnZHAsIDEpOwogCWdkcC0+cHJpdmF0ZV9kYXRhID0gZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCBkNGIxM2UzLi4zY2NmMDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMSw3ICsxLDcgQEAKLS8qIAorLyoKICAqIEZpbGUuLi4uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgotICogICAgICAgICAgICAgICAgICBIb3JzdCBIdW1tZWwgPEhvcnN0Lkh1bW1lbEBkZS5pYm0uY29tPiAKKyAqCQkgICAgSG9yc3QgSHVtbWVsIDxIb3JzdC5IdW1tZWxAZGUuaWJtLmNvbT4KICAqCQkgICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAxOTk5LDIwMDAKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMTg2LDcgKzE4NSw3IEBACiAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2RhdGE7CiB9OwogCi0vKiAKKy8qCiAgKiBkYXNkX2Njd19yZXEgLT4gc3RhdHVzIGNhbiBiZToKICAqLwogI2RlZmluZSBEQVNEX0NRUl9GSUxMRUQgICAweDAwCS8qIHJlcXVlc3QgaXMgcmVhZHkgdG8gYmUgcHJvY2Vzc2VkICovCkBAIC0yNDgsNyArMjQ3LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogRXJyb3IgcmVjb3ZlcnkgZnVuY3Rpb25zLiBleGFtaW5lX2Vycm9yKCkgcmV0dXJucyBhIHZhbHVlIHRoYXQKICAgICAgICAgICogaW5kaWNhdGVzIHdoYXQgdG8gZG8gZm9yIGFuIGVycm9yIGNvbmRpdGlvbi4gSWYgZXhhbWluZV9lcnJvcigpCi0gICAgICAgICAqIHJldHVybnMgJ2Rhc2RfZXJhX3JlY292ZXInIGVycF9hY3Rpb24oKSBpcyBjYWxsZWQgdG8gY3JlYXRlIGEgCisJICogcmV0dXJucyAnZGFzZF9lcmFfcmVjb3ZlcicgZXJwX2FjdGlvbigpIGlzIGNhbGxlZCB0byBjcmVhdGUgYQogICAgICAgICAgKiBzcGVjaWFsIGVycm9yIHJlY292ZXJ5IGNjdy4gZXJwX3Bvc3RhY3Rpb24oKSBpcyBjYWxsZWQgYWZ0ZXIKICAgICAgICAgICogYW4gZXJyb3IgcmVjb3ZlcnkgY2N3IGhhcyBmaW5pc2hlZCBpdHMgZXhlY3V0aW9uLiBkdW1wX3NlbnNlCiAgICAgICAgICAqIGlzIGNhbGxlZCBmb3IgZXZlcnkgZXJyb3IgY29uZGl0aW9uIHRvIHByaW50IHRoZSBzZW5zZSBkYXRhCkBAIC0zMDIsMTEgKzMwMSwxMSBAQAogCXNwaW5sb2NrX3QgcmVxdWVzdF9xdWV1ZV9sb2NrOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAgICAgICAgIHVuc2lnbmVkIGludCBkZXZpbmRleDsKLQl1bnNpZ25lZCBsb25nIGJsb2NrczsJCS8qIHNpemUgb2Ygdm9sdW1lIGluIGJsb2NrcyAqLwotCXVuc2lnbmVkIGludCBicF9ibG9jazsJCS8qIGJ5dGVzIHBlciBibG9jayAqLwotCXVuc2lnbmVkIGludCBzMmJfc2hpZnQ7CQkvKiBsb2cyIChicF9ibG9jay81MTIpICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHBlciBkZXZpY2UgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBmZWF0dXJlczsgICAgICAgIC8qIGNvcHkgb2YgZGV2bWFwLWZlYXR1cmVzIChyZWFkLW9ubHkhKSAqLworCXVuc2lnbmVkIGxvbmcgYmxvY2tzOwkgICAvKiBzaXplIG9mIHZvbHVtZSBpbiBibG9ja3MgKi8KKwl1bnNpZ25lZCBpbnQgYnBfYmxvY2s7CSAgIC8qIGJ5dGVzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGludCBzMmJfc2hpZnQ7CSAgIC8qIGxvZzIgKGJwX2Jsb2NrLzUxMikgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkgICAvKiBwZXIgZGV2aWNlIGZsYWdzICovCisJdW5zaWduZWQgc2hvcnQgZmVhdHVyZXM7ICAgLyogY29weSBvZiBkZXZtYXAtZmVhdHVyZXMgKHJlYWQtb25seSEpICovCiAKIAkvKiBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgc3R1ZmYgKGVlcikgKi8KIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplZXJfY3FyOwpAQCAtNTEzLDEyICs1MTIsMTIgQEAKIGludCBkYXNkX2dlbmVyaWNfc2V0X29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3QgZGFzZF9kaXNjaXBsaW5lICopOwogaW50IGRhc2RfZ2VuZXJpY19zZXRfb2ZmbGluZSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogaW50IGRhc2RfZ2VuZXJpY19ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKiwgaW50KTsKLXZvaWQgZGFzZF9nZW5lcmljX2F1dG9fb25saW5lIChzdHJ1Y3QgY2N3X2RyaXZlciAqKTsKIAogLyogZXh0ZXJuYWxzIGluIGRhc2RfZGV2bWFwLmMgKi8KIGV4dGVybiBpbnQgZGFzZF9tYXhfZGV2aW5kZXg7CiBleHRlcm4gaW50IGRhc2RfcHJvYmVvbmx5OwogZXh0ZXJuIGludCBkYXNkX2F1dG9kZXRlY3Q7CitleHRlcm4gaW50IGRhc2Rfbm9wYXY7CiAKIGludCBkYXNkX2Rldm1hcF9pbml0KHZvaWQpOwogdm9pZCBkYXNkX2Rldm1hcF9leGl0KHZvaWQpOwpAQCAtNjA2LDIyICs2MDUsMyBAQAogI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCQkJCS8qIERBU0RfSCAqLwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWluZGVudC1sZXZlbDogNCAKLSAqIGMtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAotICogYy1icmFjZS1vZmZzZXQ6IC00Ci0gKiBjLWFyZ2RlY2wtaW5kZW50OiA0Ci0gKiBjLWxhYmVsLW9mZnNldDogLTQKLSAqIGMtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDQKLSAqIGMtY29udGludWVkLWJyYWNlLW9mZnNldDogMAotICogaW5kZW50LXRhYnMtbW9kZTogMQotICogdGFiLXdpZHRoOiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGI4YzgwZDIuLmU5N2Y1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtOSw3ICs5LDYgQEAKICAqCiAgKiBpL28gY29udHJvbHMgZm9yIHRoZSBkYXNkIGRyaXZlci4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTkwLDEwICs4OSwxMCBAQAogZGFzZF9pb2N0bF9xdWllc2NlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKLQkKKwogCURFVl9NRVNTQUdFIChLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCSAgICAgIlF1aWVzY2UgSU8gb24gZGV2aWNlIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKQEAgLTExMCwxMyArMTA5LDEzIEBACiBkYXNkX2lvY3RsX3Jlc3VtZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpIAorCisJaWYgKCFjYXBhYmxlIChDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAlERVZfTUVTU0FHRSAoS0VSTl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkgICAgICJyZXN1bWUgSU8gb24gZGV2aWNlIik7Ci0JCisKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwogCWRldmljZS0+c3RvcHBlZCAmPSB+REFTRF9TVE9QUEVEX1FVSUVTQ0U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwpAQCAtMjg3LDcgKzI4Niw3IEBACiAJZGFzZF9pbmZvLT5vcGVuX2NvdW50ID0gYXRvbWljX3JlYWQoJmRldmljZS0+b3Blbl9jb3VudCk7CiAJaWYgKCFkZXZpY2UtPmJkZXYpCiAJCWRhc2RfaW5mby0+b3Blbl9jb3VudCsrOwotCQorCiAJLyoKIAkgKiBjaGVjayBpZiBkZXZpY2UgaXMgcmVhbGx5IGZvcm1hdHRlZAogCSAqIExETCAvIENETCB3YXMgcmV0dXJuZWQgYnkgJ2ZpbGxfaW5mbycKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwppbmRleCBhZDIzYWVkLi5iZmEwMTBmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCmluZGV4IDU0ZWNkNTQuLjRjMWU1NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4gIC8qIEhESU9fR0VUR0VPICovCiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBYUFJBTV9OQU1FCSJ4cHJhbSIKQEAgLTQzOSw4ICs0MzgsNiBAQAogCWlmIChyYyA8IDApCiAJCWdvdG8gb3V0OwogCi0JZGV2ZnNfbWtfZGlyKCJzbHJhbSIpOwotCiAJLyoKIAkgKiBBc3NpZ24gdGhlIG90aGVyIG5lZWRlZCB2YWx1ZXM6IG1ha2UgcmVxdWVzdCBmdW5jdGlvbiwgc2l6ZXMgYW5kCiAJICogaGFyZHNlY3Qgc2l6ZS4gQWxsIHRoZSBtaW5vciBkZXZpY2VzIGZlYXR1cmUgdGhlIHNhbWUgdmFsdWUuCkBAIC00NjksMTQgKzQ2NiwxMiBAQAogCQlkaXNrLT5wcml2YXRlX2RhdGEgPSAmeHByYW1fZGV2aWNlc1tpXTsKIAkJZGlzay0+cXVldWUgPSB4cHJhbV9xdWV1ZTsKIAkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJzbHJhbSVkIiwgaSk7Ci0JCXNwcmludGYoZGlzay0+ZGV2ZnNfbmFtZSwgInNscmFtLyVkIiwgaSk7CiAJCXNldF9jYXBhY2l0eShkaXNrLCB4cHJhbV9zaXplc1tpXSA8PCAxKTsKIAkJYWRkX2Rpc2soZGlzayk7CiAJfQogCiAJcmV0dXJuIDA7CiBvdXRfdW5yZWc6Ci0JZGV2ZnNfcmVtb3ZlKCJzbHJhbSIpOwogCXVucmVnaXN0ZXJfYmxrZGV2KFhQUkFNX01BSk9SLCBYUFJBTV9OQU1FKTsKIG91dDoKIAl3aGlsZSAoaS0tKQpAQCAtNDk1LDcgKzQ5MCw2IEBACiAJCXB1dF9kaXNrKHhwcmFtX2Rpc2tzW2ldKTsKIAl9CiAJdW5yZWdpc3Rlcl9ibGtkZXYoWFBSQU1fTUFKT1IsIFhQUkFNX05BTUUpOwotCWRldmZzX3JlbW92ZSgic2xyYW0iKTsKIAlibGtfY2xlYW51cF9xdWV1ZSh4cHJhbV9xdWV1ZSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJnhwcmFtX3N5c19kZXZpY2UpOwogCXN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKCZ4cHJhbV9zeXNjbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMgYi9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKaW5kZXggNjA2ZjZhZC4uZjI1YzZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYwpAQCAtMTEsNyArMTEsNiBAQAogICoJICAgICAgIERhbiBNb3JyaXNvbiwgSUJNIENvcnBvcmF0aW9uIChkbW9ycmlzb0Bjc2UuYnVmZmFsby5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMKaW5kZXggZWY2MDdhMS4uNzU2NmJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYwpAQCAtOCw3ICs4LDYgQEAKICAqCS0tIENvcHlyaWdodCAoQykgMjAwMyBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvY3RybGNoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2N0cmxjaGFyLmMKaW5kZXggYmU0NjMyNC4uMGVhNmYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvY3RybGNoYXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9jdHJsY2hhci5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKaW5kZXggYTY0MTUzNy4uNjA5OWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKQEAgLTgsNyArOCw2IEBACiAgKgktLSBDb3B5cmlnaHQgKEMpIDIwMDMgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCmluZGV4IGQ0ZDJmZjAuLjU0N2VmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYwpAQCAtNyw3ICs3LDYgQEAKICAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYwppbmRleCBmYjdiYzllLi5hMTM4YjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYwpAQCAtNTg2LDcgKzU4Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtb25fZGV2ID0gewogCS5uYW1lICAgICAgID0gIm1vbnJlYWRlciIsCi0JLmRldmZzX25hbWUgPSAibW9ucmVhZGVyIiwKIAkuZm9wcyAgICAgICA9ICZtb25fZm9wcywKIAkubWlub3IgICAgICA9IE1JU0NfRFlOQU1JQ19NSU5PUiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggZWVjYjJhZi4uZTk1YjU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtOCw3ICs4LDYgQEAKICAqCS0tIENvcHlyaWdodCAoQykgMjAwMyBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTUwLDYgKzQ5LDkgQEAKIAl1bnNpZ25lZCBjaGFyICphc2NlYmM7CQkvKiBhc2NpaSAtPiBlYmNkaWMgdGFibGUgKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbHR0eWRldjsJLyogMzI3MC1jbGFzcyB0dHkgZGV2aWNlIHB0ciAqLwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsdHViZGV2OwkvKiAzMjcwLWNsYXNzIHR1YiBkZXZpY2UgcHRyICovCisKKwlzdHJ1Y3QgcmF3MzI3MF9yZXF1ZXN0IGluaXRfcmVxdWVzdDsKKwl1bnNpZ25lZCBjaGFyIGluaXRfZGF0YVsyNTZdOwogfTsKIAogLyogcmF3MzI3MC0+ZmxhZ3MgKi8KQEAgLTQ4NCw4ICs0ODYsNiBAQAogCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF1YTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciByYXczMjcwX2luaXRfZGF0YVsyNTZdOwotc3RhdGljIHN0cnVjdCByYXczMjcwX3JlcXVlc3QgcmF3MzI3MF9pbml0X3JlcXVlc3Q7CiBzdGF0aWMgc3RydWN0IGRpYWcyMTAgcmF3MzI3MF9pbml0X2RpYWcyMTA7CiBzdGF0aWMgREVDTEFSRV9NVVRFWChyYXczMjcwX2luaXRfc2VtKTsKIApAQCAtNjQ0LDE3ICs2NDQsMTcgQEAKIAkgKiByZXF1aXJlZCAoMzI3MCBkZXZpY2Ugc3dpdGNoZWQgdG8gJ3N0YW5kLWJ5JykgYW5kIGNvbW1hbmQKIAkgKiByZWplY3RzIChvbGQgZGV2aWNlcyB0aGF0IGNhbid0IGRvICdyZWFkIHBhcnRpdGlvbicpLgogCSAqLwotCW1lbXNldCgmcmF3MzI3MF9pbml0X3JlcXVlc3QsIDAsIHNpemVvZihyYXczMjcwX2luaXRfcmVxdWVzdCkpOwotCW1lbXNldChyYXczMjcwX2luaXRfZGF0YSwgMCwgc2l6ZW9mKHJhdzMyNzBfaW5pdF9kYXRhKSk7Ci0JLyogU3RvcmUgJ3JlYWQgcGFydGl0aW9uJyBkYXRhIHN0cmVhbSB0byByYXczMjcwX2luaXRfZGF0YSAqLwotCW1lbWNweShyYXczMjcwX2luaXRfZGF0YSwgd2J1Ziwgc2l6ZW9mKHdidWYpKTsKLQlJTklUX0xJU1RfSEVBRCgmcmF3MzI3MF9pbml0X3JlcXVlc3QubGlzdCk7Ci0JcmF3MzI3MF9pbml0X3JlcXVlc3QuY2N3LmNtZF9jb2RlID0gVENfV1JJVEVTRjsKLQlyYXczMjcwX2luaXRfcmVxdWVzdC5jY3cuZmxhZ3MgPSBDQ1dfRkxBR19TTEk7Ci0JcmF3MzI3MF9pbml0X3JlcXVlc3QuY2N3LmNvdW50ID0gc2l6ZW9mKHdidWYpOwotCXJhdzMyNzBfaW5pdF9yZXF1ZXN0LmNjdy5jZGEgPSAoX191MzIpIF9fcGEocmF3MzI3MF9pbml0X2RhdGEpOworCW1lbXNldCgmcnAtPmluaXRfcmVxdWVzdCwgMCwgc2l6ZW9mKHJwLT5pbml0X3JlcXVlc3QpKTsKKwltZW1zZXQoJnJwLT5pbml0X2RhdGEsIDAsIDI1Nik7CisJLyogU3RvcmUgJ3JlYWQgcGFydGl0aW9uJyBkYXRhIHN0cmVhbSB0byBpbml0X2RhdGEgKi8KKwltZW1jcHkoJnJwLT5pbml0X2RhdGEsIHdidWYsIHNpemVvZih3YnVmKSk7CisJSU5JVF9MSVNUX0hFQUQoJnJwLT5pbml0X3JlcXVlc3QubGlzdCk7CisJcnAtPmluaXRfcmVxdWVzdC5jY3cuY21kX2NvZGUgPSBUQ19XUklURVNGOworCXJwLT5pbml0X3JlcXVlc3QuY2N3LmZsYWdzID0gQ0NXX0ZMQUdfU0xJOworCXJwLT5pbml0X3JlcXVlc3QuY2N3LmNvdW50ID0gc2l6ZW9mKHdidWYpOworCXJwLT5pbml0X3JlcXVlc3QuY2N3LmNkYSA9IChfX3UzMikgX19wYSgmcnAtPmluaXRfZGF0YSk7CiAKLQlyYyA9IHJhdzMyNzBfc3RhcnRfaW5pdChycCwgJnJhdzMyNzBfaW5pdF92aWV3LCAmcmF3MzI3MF9pbml0X3JlcXVlc3QpOworCXJjID0gcmF3MzI3MF9zdGFydF9pbml0KHJwLCAmcmF3MzI3MF9pbml0X3ZpZXcsICZycC0+aW5pdF9yZXF1ZXN0KTsKIAlpZiAocmMpCiAJCS8qIENoZWNrIGVycm9yIGNhc2VzOiAtRVJFU1RBUlRTWVMsIC1FSU8gYW5kIC1FT1BOT1RTVVBQICovCiAJCXJldHVybiByYzsKQEAgLTY3OSwxOCArNjc5LDE4IEBACiAJICogVGhlIGRldmljZSBhY2NlcHRlZCB0aGUgJ3JlYWQgcGFydGl0aW9uJyBjb21tYW5kLiBOb3cKIAkgKiBzZXQgdXAgYSByZWFkIGNjdyBhbmQgaXNzdWUgaXQuCiAJICovCi0JcmF3MzI3MF9pbml0X3JlcXVlc3QuY2N3LmNtZF9jb2RlID0gVENfUkVBRE1PRDsKLQlyYXczMjcwX2luaXRfcmVxdWVzdC5jY3cuZmxhZ3MgPSBDQ1dfRkxBR19TTEk7Ci0JcmF3MzI3MF9pbml0X3JlcXVlc3QuY2N3LmNvdW50ID0gc2l6ZW9mKHJhdzMyNzBfaW5pdF9kYXRhKTsKLQlyYXczMjcwX2luaXRfcmVxdWVzdC5jY3cuY2RhID0gKF9fdTMyKSBfX3BhKHJhdzMyNzBfaW5pdF9kYXRhKTsKLQlyYyA9IHJhdzMyNzBfc3RhcnRfaW5pdChycCwgJnJhdzMyNzBfaW5pdF92aWV3LCAmcmF3MzI3MF9pbml0X3JlcXVlc3QpOworCXJwLT5pbml0X3JlcXVlc3QuY2N3LmNtZF9jb2RlID0gVENfUkVBRE1PRDsKKwlycC0+aW5pdF9yZXF1ZXN0LmNjdy5mbGFncyA9IENDV19GTEFHX1NMSTsKKwlycC0+aW5pdF9yZXF1ZXN0LmNjdy5jb3VudCA9IHNpemVvZihycC0+aW5pdF9kYXRhKTsKKwlycC0+aW5pdF9yZXF1ZXN0LmNjdy5jZGEgPSAoX191MzIpIF9fcGEocnAtPmluaXRfZGF0YSk7CisJcmMgPSByYXczMjcwX3N0YXJ0X2luaXQocnAsICZyYXczMjcwX2luaXRfdmlldywgJnJwLT5pbml0X3JlcXVlc3QpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCS8qIEdvdCBhIFF1ZXJ5IFJlcGx5ICovCi0JY291bnQgPSBzaXplb2YocmF3MzI3MF9pbml0X2RhdGEpIC0gcmF3MzI3MF9pbml0X3JlcXVlc3QucmVzY250OwotCXVhcCA9IChzdHJ1Y3QgcmF3MzI3MF91YSAqKSAocmF3MzI3MF9pbml0X2RhdGEgKyAxKTsKKwljb3VudCA9IHNpemVvZihycC0+aW5pdF9kYXRhKSAtIHJwLT5pbml0X3JlcXVlc3QucmVzY250OworCXVhcCA9IChzdHJ1Y3QgcmF3MzI3MF91YSAqKSAocnAtPmluaXRfZGF0YSArIDEpOwogCS8qIFBhcmFub2lhIGNoZWNrLiAqLwotCWlmIChyYXczMjcwX2luaXRfZGF0YVswXSAhPSAweDg4IHx8IHVhcC0+dWFiLnFjb2RlICE9IDB4ODEpCisJaWYgKHJwLT5pbml0X2RhdGFbMF0gIT0gMHg4OCB8fCB1YXAtPnVhYi5xY29kZSAhPSAweDgxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJLyogQ29weSByb3dzL2NvbHVtbnMgb2YgZGVmYXVsdCBVc2FibGUgQXJlYSAqLwogCXJwLT5yb3dzID0gdWFwLT51YWIuaDsKQEAgLTc0OSwxOCArNzQ5LDE4IEBACiAJaW50IHJjOwogCiAJZG93bigmcmF3MzI3MF9pbml0X3NlbSk7Ci0JbWVtc2V0KCZyYXczMjcwX2luaXRfcmVxdWVzdCwgMCwgc2l6ZW9mKHJhdzMyNzBfaW5pdF9yZXF1ZXN0KSk7Ci0JbWVtc2V0KHJhdzMyNzBfaW5pdF9kYXRhLCAwLCBzaXplb2YocmF3MzI3MF9pbml0X2RhdGEpKTsKLQkvKiBTdG9yZSByZXNldCBkYXRhIHN0cmVhbSB0byByYXczMjcwX2luaXRfZGF0YS9yYXczMjcwX2luaXRfcmVxdWVzdCAqLwotCXJhdzMyNzBfaW5pdF9kYXRhWzBdID0gVFdfS1I7Ci0JSU5JVF9MSVNUX0hFQUQoJnJhdzMyNzBfaW5pdF9yZXF1ZXN0Lmxpc3QpOwotCXJhdzMyNzBfaW5pdF9yZXF1ZXN0LmNjdy5jbWRfY29kZSA9IFRDX0VXUklURUE7Ci0JcmF3MzI3MF9pbml0X3JlcXVlc3QuY2N3LmZsYWdzID0gQ0NXX0ZMQUdfU0xJOwotCXJhdzMyNzBfaW5pdF9yZXF1ZXN0LmNjdy5jb3VudCA9IDE7Ci0JcmF3MzI3MF9pbml0X3JlcXVlc3QuY2N3LmNkYSA9IChfX3UzMikgX19wYShyYXczMjcwX2luaXRfZGF0YSk7CisJbWVtc2V0KCZycC0+aW5pdF9yZXF1ZXN0LCAwLCBzaXplb2YocnAtPmluaXRfcmVxdWVzdCkpOworCW1lbXNldCgmcnAtPmluaXRfZGF0YSwgMCwgc2l6ZW9mKHJwLT5pbml0X2RhdGEpKTsKKwkvKiBTdG9yZSByZXNldCBkYXRhIHN0cmVhbSB0byBpbml0X2RhdGEvaW5pdF9yZXF1ZXN0ICovCisJcnAtPmluaXRfZGF0YVswXSA9IFRXX0tSOworCUlOSVRfTElTVF9IRUFEKCZycC0+aW5pdF9yZXF1ZXN0Lmxpc3QpOworCXJwLT5pbml0X3JlcXVlc3QuY2N3LmNtZF9jb2RlID0gVENfRVdSSVRFQTsKKwlycC0+aW5pdF9yZXF1ZXN0LmNjdy5mbGFncyA9IENDV19GTEFHX1NMSTsKKwlycC0+aW5pdF9yZXF1ZXN0LmNjdy5jb3VudCA9IDE7CisJcnAtPmluaXRfcmVxdWVzdC5jY3cuY2RhID0gKF9fdTMyKSBfX3BhKHJwLT5pbml0X2RhdGEpOwogCXJwLT52aWV3ID0gJnJhdzMyNzBfaW5pdF92aWV3OwogCXJhdzMyNzBfaW5pdF92aWV3LmRldiA9IHJwOwotCXJjID0gcmF3MzI3MF9zdGFydF9pbml0KHJwLCAmcmF3MzI3MF9pbml0X3ZpZXcsICZyYXczMjcwX2luaXRfcmVxdWVzdCk7CisJcmMgPSByYXczMjcwX3N0YXJ0X2luaXQocnAsICZyYXczMjcwX2luaXRfdmlldywgJnJwLT5pbml0X3JlcXVlc3QpOwogCXJhdzMyNzBfaW5pdF92aWV3LmRldiA9IDA7CiAJcnAtPnZpZXcgPSAwOwogCXVwKCZyYXczMjcwX2luaXRfc2VtKTsKQEAgLTg1NCw3ICs4NTQsNyBAQAogCWNoYXIgKmFzY2ViYzsKIAlpbnQgcmM7CiAKLQlycCA9IChzdHJ1Y3QgcmF3MzI3MCAqKSBhbGxvY19ib290bWVtKHNpemVvZihzdHJ1Y3QgcmF3MzI3MCkpOworCXJwID0gKHN0cnVjdCByYXczMjcwICopIGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihzdHJ1Y3QgcmF3MzI3MCkpOwogCWFzY2ViYyA9IChjaGFyICopIGFsbG9jX2Jvb3RtZW0oMjU2KTsKIAlyYyA9IHJhdzMyNzBfc2V0dXBfZGV2aWNlKGNkZXYsIHJwLCBhc2NlYmMpOwogCWlmIChyYykKQEAgLTg5NSw3ICs4OTUsNyBAQAogCWNoYXIgKmFzY2ViYzsKIAlpbnQgcmM7CiAKLQlycCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByYXczMjcwKSwgR0ZQX0tFUk5FTCk7CisJcnAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmF3MzI3MCksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIXJwKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlhc2NlYmMgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMKaW5kZXggNDEzODU2NC4uOTg1ZDE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwpAQCAtMzgzLDYgKzM4Myw3IEBACiBzY2xwX3N5bmNfd2FpdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcHN3X21hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGNyMCwgY3IwX3N5bmM7CiAJdTY0IHRpbWVvdXQ7CiAKQEAgLTM5NSw5ICszOTYsMTEgQEAKIAkJCSAgc2NscF90b2RfZnJvbV9qaWZmaWVzKHNjbHBfcmVxdWVzdF90aW1lci5leHBpcmVzIC0KIAkJCQkJCWppZmZpZXMpOwogCX0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJLyogUHJldmVudCBib3R0b20gaGFsZiBmcm9tIGV4ZWN1dGluZyBvbmNlIHdlIGZvcmNlIGludGVycnVwdHMgb3BlbiAqLwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkvKiBFbmFibGUgc2VydmljZS1zaWduYWwgaW50ZXJydXB0aW9uLCBkaXNhYmxlIHRpbWVyIGludGVycnVwdHMgKi8KKwl0cmFjZV9oYXJkaXJxc19vbigpOwogCV9fY3RsX3N0b3JlKGNyMCwgMCwgMCk7CiAJY3IwX3N5bmMgPSBjcjA7CiAJY3IwX3N5bmMgfD0gMHgwMDAwMDIwMDsKQEAgLTQxNSwxMSArNDE4LDEwIEBACiAJCWJhcnJpZXIoKTsKIAkJY3B1X3JlbGF4KCk7CiAJfQotCS8qIFJlc3RvcmUgaW50ZXJydXB0IHNldHRpbmdzICovCi0JYXNtIHZvbGF0aWxlICgiU1NNIDAoJTApIgotCQkgICAgICA6IDogImEiICgmcHN3X21hc2spIDogIm1lbW9yeSIpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJX19jdGxfbG9hZChjcjAsIDAsIDApOwotCV9fbG9jYWxfYmhfZW5hYmxlKCk7CisJX2xvY2FsX2JoX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogRVhQT1JUX1NZTUJPTChzY2xwX3N5bmNfd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Nvbi5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jb24uYwppbmRleCAxMGVmMjJmLi44Njg2NGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Nvbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29uLmMKQEAgLTgsNyArOCw2IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jcGkuYwppbmRleCA4MGY3ZjMxLi43MzJkZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY3BpLmMKQEAgLTUsNyArNSw2IEBACiAgKiBTQ0xQIENvbnRyb2wtUHJvZ3JhbSBJZGVudGlmaWNhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcXVpZXNjZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKaW5kZXggYTRjNTNjMS4uMzIwMDRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMKQEAgLTcsNyArNyw2IEBACiAgKiAgICAgICAgICAgICBQZXRlciBPYmVycGFybGVpdGVyIDxwZXRlci5vYmVycGFybGVpdGVyQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jCmluZGV4IDkxZTkzYzcuLjBjOTJkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcncuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMKQEAgLTgsNyArOCw2IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYwppbmRleCA2Y2JmMDY3Zi4uZjZjZjkwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jCkBAIC04LDcgKzgsNiBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwppbmRleCA5ZTAyNjI1Li41NGZiYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCkBAIC03LDcgKzcsNiBAQAogICogICAgQXV0aG9yKHMpOiBQZXRlciBPYmVycGFybGVpdGVyIDxQZXRlci5PYmVycGFybGVpdGVyQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCmluZGV4IGNkNTFhY2UuLjFmNGM4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IGQ0ZjJkYTcuLjQ4YjRkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC04LDcgKzgsNiBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggZDcxZWYxYS4uOTI4Y2JlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTgsNyArOCw2IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IGI3MGQ5MjYuLjMyMjVmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKaW5kZXggNWNlN2NhMy4uOTdmNzUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggZTZlNDA4Ni4uMTIyYjRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JICAgICAvLyBmb3Iga2VybmVsIHBhcmFtZXRlcnMKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CSAgICAgLy8gZm9yIHJlcXVlc3RpbmcgbW9kdWxlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYwppbmRleCA1ZmVjMGExLi42NTVkMzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYwpAQCAtMTEsNyArMTEsNiBAQAogICogUFJPQ0ZTIEZ1bmN0aW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCmluZGV4IDk5Y2Y4ODEuLjdhNzZlYzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCmluZGV4IDlhMTQxNzcuLmY0OTZmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMKQEAgLTgsNyArOCw2IEBACiAgKgktLSBDb3B5cmlnaHQgKEMpIDIwMDMgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgpAQCAtMTc4NSw3ICsxNzg0LDYgQEAKIAkgKiBwcm9jX2VudHJ5LCBzZXRfdGVybWlvcywgZmx1c2hfYnVmZmVyLCBzZXRfbGRpc2MsIHdyaXRlX3Byb2MKIAkgKi8KIAlkcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZHJpdmVyLT5kZXZmc19uYW1lID0gInR0eVRVQi8iOwogCWRyaXZlci0+ZHJpdmVyX25hbWUgPSAidHR5VFVCIjsKIAlkcml2ZXItPm5hbWUgPSAidHR5VFVCIjsKIAlkcml2ZXItPm1ham9yID0gSUJNX1RUWTMyNzBfTUFKT1I7CkBAIC0xNzkzLDcgKzE3OTEsNyBAQAogCWRyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TWVNURU07CiAJZHJpdmVyLT5zdWJ0eXBlID0gU1lTVEVNX1RZUEVfVFRZOwogCWRyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCWRyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCWRyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhkcml2ZXIsICZ0dHkzMjcwX29wcyk7CiAJcmV0ID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCmluZGV4IDA5NjBiZWYuLjEyYzJkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYwpAQCAtOSw3ICs5LDYgQEAKICAqCQkgQXJuZCBCZXJnbWFubiAoYXJuZGJAZGUuaWJtLmNvbSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yMjQsMzkgKzIyMyw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludAotX19zMzkwX3JlZG9fdmFsaWRhdGlvbihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0KLQlzY2ggPSBnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzY2hpZCk7Ci0JaWYgKHNjaCkgewotCQkvKiBBbHJlYWR5IGtub3duLiAqLwotCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7Ci0JCXJldHVybiAwOwotCX0KLQlyZXQgPSBjc3NfcHJvYmVfZGV2aWNlKHNjaGlkKTsKLQlpZiAocmV0ID09IC1FTlhJTykKLQkJcmV0dXJuIHJldDsgLyogV2UncmUgdGhyb3VnaC4gKi8KLQlpZiAocmV0ID09IC1FTk9NRU0pCi0JCS8qIFN0b3AgdmFsaWRhdGlvbiBmb3Igbm93LiBCYWQsIGJ1dCBubyBuZWVkIGZvciBhIHBhbmljLiAqLwotCQlyZXR1cm4gcmV0OwotCXJldHVybiAwOwotfQotCi0vKgotICogRnVuY3Rpb246IHMzOTBfcmVkb192YWxpZGF0aW9uCi0gKiBMb29rIGZvciBubyBsb25nZXIgYmxhY2tsaXN0ZWQgZGV2aWNlcwotICogRklYTUU6IHRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotczM5MF9yZWRvX3ZhbGlkYXRpb24gKHZvaWQpCi17Ci0JQ0lPX1RSQUNFX0VWRU5UICgwLCAicmVkb3ZhbCIpOwotCi0JZm9yX2VhY2hfc3ViY2hhbm5lbChfX3MzOTBfcmVkb192YWxpZGF0aW9uLCBOVUxMKTsKLX0KLQogLyoKICAqIEZ1bmN0aW9uOiBibGFja2xpc3RfcGFyc2VfcHJvY19wYXJhbWV0ZXJzCiAgKiBwYXJzZSB0aGUgc3R1ZmYgd2hpY2ggaXMgcGlwZWQgdG8gL3Byb2MvY2lvX2lnbm9yZQpAQCAtMjgxLDcgKzI0Nyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlzMzkwX3JlZG9fdmFsaWRhdGlvbiAoKTsKKwljc3Nfc2NoZWR1bGVfcmVwcm9iZSgpOwogfQogCiAvKiBJdGVyYXRvciBzdHJ1Y3QgZm9yIGFsbCBkZXZpY2VzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCmluZGV4IGJkZmVlN2YuLmM3MzE5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKQEAgLTQwNCwyMSArNDA0LDI0IEBACiB9CiAKIHN0YXRpYyBpbnQKLV9fY2N3Z3JvdXBfZHJpdmVyX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK19fY2N3Z3JvdXBfbWF0Y2hfYWxsKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlfX2Njd2dyb3VwX3JlbW92ZV9zeW1saW5rcyh0b19jY3dncm91cGRldihkZXYpKTsKLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwotCXB1dF9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogdm9pZAogY2N3Z3JvdXBfZHJpdmVyX3VucmVnaXN0ZXIgKHN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmNkcml2ZXIpCiB7CisJc3RydWN0IGRldmljZSAqZGV2OworCiAJLyogV2UgZG9uJ3Qgd2FudCBjY3dncm91cCBkZXZpY2VzIHRvIGxpdmUgbG9uZ2VyIHRoYW4gdGhlaXIgZHJpdmVyLiAqLwogCWdldF9kcml2ZXIoJmNkcml2ZXItPmRyaXZlcik7Ci0JZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmY2RyaXZlci0+ZHJpdmVyLCBOVUxMLCBOVUxMLAotCQkJICAgICAgIF9fY2N3Z3JvdXBfZHJpdmVyX3VucmVnaXN0ZXJfZGV2aWNlKTsKKwl3aGlsZSAoKGRldiA9IGRyaXZlcl9maW5kX2RldmljZSgmY2RyaXZlci0+ZHJpdmVyLCBOVUxMLCBOVUxMLAorCQkJCQkgX19jY3dncm91cF9tYXRjaF9hbGwpKSkgeworCQlfX2Njd2dyb3VwX3JlbW92ZV9zeW1saW5rcyh0b19jY3dncm91cGRldihkZXYpKTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKKwkJcHV0X2RldmljZShkZXYpOworCX0KIAlwdXRfZHJpdmVyKCZjZHJpdmVyLT5kcml2ZXIpOwogCWRyaXZlcl91bnJlZ2lzdGVyKCZjZHJpdmVyLT5kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCA3MjE4N2U1Li5hMDFmM2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjQ0LDggKzI0Myw3IEBACiAKIAlpZiAoKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX0RFVkFDVCkgJiYKIAkgICAgKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX1NDSEFDVCkgJiYKLQkgICAgKHNjaC0+c2NoaWIucG1jdy5scHVtID09IG1hc2spICYmCi0JICAgIChzY2gtPnZwbSA9PSAwKSkgeworCSAgICAoc2NoLT5zY2hpYi5wbWN3LmxwdW0gPT0gbWFzaykpIHsKIAkJaW50IGNjOwogCiAJCWNjID0gY2lvX2NsZWFyKHNjaCk7CkBAIC05MTgsMTIgKzkxNiwxMyBAQAogCWNocCA9IHRvX2NoYW5uZWxwYXRoKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CiAJY3NzID0gdG9fY3NzKGNocC0+ZGV2LnBhcmVudCk7CiAKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjbWdfY2hhcnMpOworCXNpemUgPSBzaXplb2Yoc3RydWN0IGNtZ19lbnRyeSk7CiAKIAkvKiBPbmx5IGFsbG93IHNpbmdsZSByZWFkcy4gKi8KIAlpZiAob2ZmIHx8IGNvdW50IDwgc2l6ZSkKIAkJcmV0dXJuIDA7CiAJY2hwX21lYXN1cmVtZW50X2NvcHlfYmxvY2soKHN0cnVjdCBjbWdfZW50cnkgKilidWYsIGNzcywgY2hwLT5pZCk7CisJY291bnQgPSBzaXplOwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggNWIyMGQ4Yy4uNmZlYzkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xNDgsNyArMTQ3LDcgQEAKIAkJc2NoLT5kcml2ZXItPmlycSgmc2NoLT5kZXYpOwogCXNwaW5fdW5sb2NrKCZzY2gtPmxvY2spOwogCWlycV9leGl0ICgpOwotCV9fbG9jYWxfYmhfZW5hYmxlKCk7CisJX2xvY2FsX2JoX2VuYWJsZSgpOwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jIGIvZHJpdmVycy9zMzkwL2Npby9jbWYuYwppbmRleCAwN2VmM2Y2Li4xYzNlOGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY21mLmMKQEAgLTMsOSArMywxMCBAQAogICoKICAqIExpbnV4IG9uIHpTZXJpZXMgQ2hhbm5lbCBNZWFzdXJlbWVudCBGYWNpbGl0eSBzdXBwb3J0CiAgKgotICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDAwLDIwMDYgSUJNIENvcnBvcmF0aW9uCiAgKgotICogQXV0aG9yOiBBcm5kIEJlcmdtYW5uIDxhcm5kYkBkZS5pYm0uY29tPgorICogQXV0aG9yczogQXJuZCBCZXJnbWFubiA8YXJuZGJAZGUuaWJtLmNvbT4KKyAqCSAgICBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CiAgKgogICogb3JpZ2luYWwgaWRlYSBmcm9tIE5hdGFyYWphbiBLcmlzaG5hc3dhbWkgPG5rcmlzaG5hQHVzLmlibS5jb20+CiAgKgpAQCAtOTYsOSArOTcsOSBAQAogLyoqCiAgKiBzdHJ1Y3QgY21iX29wZXJhdGlvbnMgLSBmdW5jdGlvbnMgdG8gdXNlIGRlcGVuZGluZyBvbiBjbWJfZm9ybWF0CiAgKgotICogYWxsIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgc3RydWN0IGNtZl9kZXZpY2UuIFRoZXJlIGlzIG9ubHkKLSAqIG9uZSBpbnN0YW5jZSBvZiBzdHJ1Y3QgY21iX29wZXJhdGlvbnMgYmVjYXVzZSBhbGwgY21mX2RldmljZQotICogb2JqZWN0cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBvZiB0aGUgc2FtZSB0eXBlLgorICogTW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIHN0cnVjdCBjY3dfZGV2aWNlLiBUaGVyZSBpcyBvbmx5CisgKiBvbmUgaW5zdGFuY2Ugb2Ygc3RydWN0IGNtYl9vcGVyYXRpb25zIGJlY2F1c2UgdGhlIGZvcm1hdCBvZiB0aGUgbWVhc3VyZW1lbnQKKyAqIGRhdGEgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBmb3IgZXZlcnkgY2N3X2RldmljZS4KICAqCiAgKiBAYWxsb2M6CWFsbG9jYXRlIG1lbW9yeSBmb3IgYSBjaGFubmVsIG1lYXN1cmVtZW50IGJsb2NrLAogICoJCWVpdGhlciB3aXRoIHRoZSBoZWxwIG9mIGEgc3BlY2lhbCBwb29sIG9yIHdpdGgga21hbGxvYwpAQCAtMTA3LDYgKzEwOCw3IEBACiAgKiBAcmVhZGFsbDoJcmVhZCBhIG1lYXN1cmVtZW50IGJsb2NrIGluIGEgY29tbW9uIGZvcm1hdAogICogQHJlc2V0OgljbGVhciB0aGUgZGF0YSBpbiB0aGUgYXNzb2NpYXRlZCBtZWFzdXJlbWVudCBibG9jayBhbmQKICAqCQlyZXNldCBpdHMgdGltZSBzdGFtcAorICogQGFsaWduOglhbGlnbiBhbiBhbGxvY2F0ZWQgYmxvY2sgc28gdGhhdCB0aGUgaGFyZHdhcmUgY2FuIHVzZSBpdAogICovCiBzdHJ1Y3QgY21iX29wZXJhdGlvbnMgewogCWludCAoKmFsbG9jKSAgKHN0cnVjdCBjY3dfZGV2aWNlKik7CkBAIC0xMTUsMTEgKzExNywxOSBAQAogCXU2NCAoKnJlYWQpICAgKHN0cnVjdCBjY3dfZGV2aWNlKiwgaW50KTsKIAlpbnQgKCpyZWFkYWxsKShzdHJ1Y3QgY2N3X2RldmljZSosIHN0cnVjdCBjbWJkYXRhICopOwogCXZvaWQgKCpyZXNldCkgKHN0cnVjdCBjY3dfZGV2aWNlKik7CisJdm9pZCAqICgqYWxpZ24pICh2b2lkICopOwogCiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqYXR0cl9ncm91cDsKIH07CiBzdGF0aWMgc3RydWN0IGNtYl9vcGVyYXRpb25zICpjbWJvcHM7CiAKK3N0cnVjdCBjbWJfZGF0YSB7CisJdm9pZCAqaHdfYmxvY2s7ICAgLyogUG9pbnRlciB0byBibG9jayB1cGRhdGVkIGJ5IGhhcmR3YXJlICovCisJdm9pZCAqbGFzdF9ibG9jazsgLyogTGFzdCBjaGFuZ2VkIGJsb2NrIGNvcGllZCBmcm9tIGhhcmR3YXJlIGJsb2NrICovCisJaW50IHNpemU7CSAgLyogU2l6ZSBvZiBod19ibG9jayBhbmQgbGFzdF9ibG9jayAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X3VwZGF0ZTsgIC8qIHdoZW4gbGFzdF9ibG9jayB3YXMgdXBkYXRlZCAqLworfTsKKwogLyogb3VyIHVzZXIgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIGluIHRlcm1zIG9mIG5hbm9zZWNvbmRzLAogICogd2hpbGUgdGhlIGhhcmR3YXJlIG1lYXN1cmVzIHRvdGFsIHRpbWVzIGluIGl0cyBvd24KICAqIHVuaXQuKi8KQEAgLTIyNiw2MyArMjM2LDIyOSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCWludCByZXQ7CisJc3RydWN0IGtyZWYga3JlZjsKIH07CiAKK3N0YXRpYyB2b2lkIGNtZl9zZXRfc2NoaWJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3Qgc2V0X3NjaGliX3N0cnVjdCAqc2V0X2RhdGE7CisKKwlzZXRfZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2V0X3NjaGliX3N0cnVjdCwga3JlZik7CisJa2ZyZWUoc2V0X2RhdGEpOworfQorCisjZGVmaW5lIENNRl9QRU5ESU5HIDEKKwogc3RhdGljIGludCBzZXRfc2NoaWJfd2FpdChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdTMyIG1tZSwKIAkJCQlpbnQgbWJmYywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBzZXRfc2NoaWJfc3RydWN0IHMgPSB7Ci0JCS5tbWUgPSBtbWUsCi0JCS5tYmZjID0gbWJmYywKLQkJLmFkZHJlc3MgPSBhZGRyZXNzLAotCQkud2FpdCA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKHMud2FpdCksCi0JfTsKKwlzdHJ1Y3Qgc2V0X3NjaGliX3N0cnVjdCAqc2V0X2RhdGE7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7Ci0Jcy5yZXQgPSBzZXRfc2NoaWIoY2RldiwgbW1lLCBtYmZjLCBhZGRyZXNzKTsKLQlpZiAocy5yZXQgIT0gLUVCVVNZKSB7Ci0JCWdvdG8gb3V0X25vd2FpdDsKKwlpZiAoIWNkZXYtPnByaXZhdGUtPmNtYikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9CisJc2V0X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2V0X3NjaGliX3N0cnVjdCksIEdGUF9BVE9NSUMpOworCWlmICghc2V0X2RhdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNldF9kYXRhLT53YWl0KTsKKwlrcmVmX2luaXQoJnNldF9kYXRhLT5rcmVmKTsKKwlzZXRfZGF0YS0+bW1lID0gbW1lOworCXNldF9kYXRhLT5tYmZjID0gbWJmYzsKKwlzZXRfZGF0YS0+YWRkcmVzcyA9IGFkZHJlc3M7CisKKwlyZXQgPSBzZXRfc2NoaWIoY2RldiwgbW1lLCBtYmZjLCBhZGRyZXNzKTsKKwlpZiAocmV0ICE9IC1FQlVTWSkKKwkJZ290byBvdXRfcHV0OwogCiAJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUpIHsKLQkJcy5yZXQgPSAtRUJVU1k7CiAJCS8qIGlmIHRoZSBkZXZpY2UgaXMgbm90IG9ubGluZSwgZG9uJ3QgZXZlbiB0cnkgYWdhaW4gKi8KLQkJZ290byBvdXRfbm93YWl0OworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X3B1dDsKIAl9CisKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9DTUZDSEFOR0U7Ci0JY2Rldi0+cHJpdmF0ZS0+Y21iX3dhaXQgPSAmczsKLQlzLnJldCA9IDE7CisJc2V0X2RhdGEtPnJldCA9IENNRl9QRU5ESU5HOworCWNkZXYtPnByaXZhdGUtPmNtYl93YWl0ID0gc2V0X2RhdGE7CiAKIAlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7Ci0JaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzLndhaXQsIHMucmV0ICE9IDEpKSB7CisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZXRfZGF0YS0+d2FpdCwKKwkJCQkgICAgIHNldF9kYXRhLT5yZXQgIT0gQ01GX1BFTkRJTkcpKSB7CiAJCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7Ci0JCWlmIChzLnJldCA9PSAxKSB7Ci0JCQlzLnJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCWNkZXYtPnByaXZhdGUtPmNtYl93YWl0ID0gMDsKKwkJaWYgKHNldF9kYXRhLT5yZXQgPT0gQ01GX1BFTkRJTkcpIHsKKwkJCXNldF9kYXRhLT5yZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0NNRkNIQU5HRSkKIAkJCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9PTkxJTkU7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwogCX0KLQlyZXR1cm4gcy5yZXQ7Ci0KLW91dF9ub3dhaXQ6CisJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwljZGV2LT5wcml2YXRlLT5jbWJfd2FpdCA9IE5VTEw7CisJcmV0ID0gc2V0X2RhdGEtPnJldDsKK291dF9wdXQ6CisJa3JlZl9wdXQoJnNldF9kYXRhLT5rcmVmLCBjbWZfc2V0X3NjaGliX3JlbGVhc2UpOworb3V0OgogCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKLQlyZXR1cm4gcy5yZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCByZXRyeV9zZXRfc2NoaWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0Jc3RydWN0IHNldF9zY2hpYl9zdHJ1Y3QgKnM7CisJc3RydWN0IHNldF9zY2hpYl9zdHJ1Y3QgKnNldF9kYXRhOwogCi0JcyA9IGNkZXYtPnByaXZhdGUtPmNtYl93YWl0OwotCWNkZXYtPnByaXZhdGUtPmNtYl93YWl0ID0gMDsKLQlpZiAoIXMpIHsKKwlzZXRfZGF0YSA9IGNkZXYtPnByaXZhdGUtPmNtYl93YWl0OworCWlmICghc2V0X2RhdGEpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KLQlzLT5yZXQgPSBzZXRfc2NoaWIoY2Rldiwgcy0+bW1lLCBzLT5tYmZjLCBzLT5hZGRyZXNzKTsKLQl3YWtlX3VwKCZzLT53YWl0KTsKKwlrcmVmX2dldCgmc2V0X2RhdGEtPmtyZWYpOworCXNldF9kYXRhLT5yZXQgPSBzZXRfc2NoaWIoY2Rldiwgc2V0X2RhdGEtPm1tZSwgc2V0X2RhdGEtPm1iZmMsCisJCQkJICBzZXRfZGF0YS0+YWRkcmVzcyk7CisJd2FrZV91cCgmc2V0X2RhdGEtPndhaXQpOworCWtyZWZfcHV0KCZzZXRfZGF0YS0+a3JlZiwgY21mX3NldF9zY2hpYl9yZWxlYXNlKTsKK30KKworc3RhdGljIGludCBjbWZfY29weV9ibG9jayhzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCXZvaWQgKnJlZmVyZW5jZV9idWY7CisJdm9pZCAqaHdfYmxvY2s7CisJc3RydWN0IGNtYl9kYXRhICpjbWJfZGF0YTsKKworCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisKKwlpZiAoc3RzY2goc2NoLT5zY2hpZCwgJnNjaC0+c2NoaWIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzY2gtPnNjaGliLnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSB7CisJCS8qIERvbid0IGNvcHkgaWYgYSBzdGFydCBmdW5jdGlvbiBpcyBpbiBwcm9ncmVzcy4gKi8KKwkJaWYgKCghc2NoLT5zY2hpYi5zY3N3LmFjdGwgJiBTQ1NXX0FDVExfU1VTUEVOREVEKSAmJgorCQkgICAgKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYKKwkJICAgICAoU0NTV19BQ1RMX0RFVkFDVCB8IFNDU1dfQUNUTF9TQ0hBQ1QpKSAmJgorCQkgICAgKCFzY2gtPnNjaGliLnNjc3cuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY21iX2RhdGEgPSBjZGV2LT5wcml2YXRlLT5jbWI7CisJaHdfYmxvY2sgPSBjbWJvcHMtPmFsaWduKGNtYl9kYXRhLT5od19ibG9jayk7CisJaWYgKCFtZW1jbXAoY21iX2RhdGEtPmxhc3RfYmxvY2ssIGh3X2Jsb2NrLCBjbWJfZGF0YS0+c2l6ZSkpCisJCS8qIE5vIG5lZWQgdG8gY29weS4gKi8KKwkJcmV0dXJuIDA7CisJcmVmZXJlbmNlX2J1ZiA9IGt6YWxsb2MoY21iX2RhdGEtPnNpemUsIEdGUF9BVE9NSUMpOworCWlmICghcmVmZXJlbmNlX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyogRW5zdXJlIGNvbnNpc3RlbmN5IG9mIGJsb2NrIGNvcGllZCBmcm9tIGhhcmR3YXJlLiAqLworCWRvIHsKKwkJbWVtY3B5KGNtYl9kYXRhLT5sYXN0X2Jsb2NrLCBod19ibG9jaywgY21iX2RhdGEtPnNpemUpOworCQltZW1jcHkocmVmZXJlbmNlX2J1ZiwgaHdfYmxvY2ssIGNtYl9kYXRhLT5zaXplKTsKKwl9IHdoaWxlIChtZW1jbXAoY21iX2RhdGEtPmxhc3RfYmxvY2ssIHJlZmVyZW5jZV9idWYsIGNtYl9kYXRhLT5zaXplKSk7CisJY21iX2RhdGEtPmxhc3RfdXBkYXRlID0gZ2V0X2Nsb2NrKCk7CisJa2ZyZWUocmVmZXJlbmNlX2J1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb3B5X2Jsb2NrX3N0cnVjdCB7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlpbnQgcmV0OworCXN0cnVjdCBrcmVmIGtyZWY7Cit9OworCitzdGF0aWMgdm9pZCBjbWZfY29weV9ibG9ja19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBjb3B5X2Jsb2NrX3N0cnVjdCAqY29weV9ibG9jazsKKworCWNvcHlfYmxvY2sgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGNvcHlfYmxvY2tfc3RydWN0LCBrcmVmKTsKKwlrZnJlZShjb3B5X2Jsb2NrKTsKK30KKworc3RhdGljIGludCBjbWZfY21iX2NvcHlfd2FpdChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwlzdHJ1Y3QgY29weV9ibG9ja19zdHJ1Y3QgKmNvcHlfYmxvY2s7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOworCWlmICghY2Rldi0+cHJpdmF0ZS0+Y21iKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwljb3B5X2Jsb2NrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvcHlfYmxvY2tfc3RydWN0KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjb3B5X2Jsb2NrKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb3B5X2Jsb2NrLT53YWl0KTsKKwlrcmVmX2luaXQoJmNvcHlfYmxvY2stPmtyZWYpOworCisJcmV0ID0gY21mX2NvcHlfYmxvY2soY2Rldik7CisJaWYgKHJldCAhPSAtRUJVU1kpCisJCWdvdG8gb3V0X3B1dDsKKworCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfcHV0OworCX0KKworCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0NNRlVQREFURTsKKwljb3B5X2Jsb2NrLT5yZXQgPSBDTUZfUEVORElORzsKKwljZGV2LT5wcml2YXRlLT5jbWJfd2FpdCA9IGNvcHlfYmxvY2s7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKKwlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNvcHlfYmxvY2stPndhaXQsCisJCQkJICAgICBjb3B5X2Jsb2NrLT5yZXQgIT0gQ01GX1BFTkRJTkcpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKKwkJaWYgKGNvcHlfYmxvY2stPnJldCA9PSBDTUZfUEVORElORykgeworCQkJY29weV9ibG9jay0+cmV0ID0gLUVSRVNUQVJUU1lTOworCQkJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9DTUZVUERBVEUpCisJCQkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfT05MSU5FOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJY2Rldi0+cHJpdmF0ZS0+Y21iX3dhaXQgPSBOVUxMOworCXJldCA9IGNvcHlfYmxvY2stPnJldDsKK291dF9wdXQ6CisJa3JlZl9wdXQoJmNvcHlfYmxvY2stPmtyZWYsIGNtZl9jb3B5X2Jsb2NrX3JlbGVhc2UpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgY21mX3JldHJ5X2NvcHlfYmxvY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCit7CisJc3RydWN0IGNvcHlfYmxvY2tfc3RydWN0ICpjb3B5X2Jsb2NrOworCisJY29weV9ibG9jayA9IGNkZXYtPnByaXZhdGUtPmNtYl93YWl0OworCWlmICghY29weV9ibG9jaykgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCWtyZWZfZ2V0KCZjb3B5X2Jsb2NrLT5rcmVmKTsKKwljb3B5X2Jsb2NrLT5yZXQgPSBjbWZfY29weV9ibG9jayhjZGV2KTsKKwl3YWtlX3VwKCZjb3B5X2Jsb2NrLT53YWl0KTsKKwlrcmVmX3B1dCgmY29weV9ibG9jay0+a3JlZiwgY21mX2NvcHlfYmxvY2tfcmVsZWFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNtZl9nZW5lcmljX3Jlc2V0KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCXN0cnVjdCBjbWJfZGF0YSAqY21iX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxKGNkZXYtPmNjd2xvY2spOworCWNtYl9kYXRhID0gY2Rldi0+cHJpdmF0ZS0+Y21iOworCWlmIChjbWJfZGF0YSkgeworCQltZW1zZXQoY21iX2RhdGEtPmxhc3RfYmxvY2ssIDAsIGNtYl9kYXRhLT5zaXplKTsKKwkJLyoKKwkJICogTmVlZCB0byByZXNldCBodyBibG9jayBhcyB3ZWxsIHRvIG1ha2UgdGhlIGhhcmR3YXJlIHN0YXJ0CisJCSAqIGZyb20gMCBhZ2Fpbi4KKwkJICovCisJCW1lbXNldChjbWJvcHMtPmFsaWduKGNtYl9kYXRhLT5od19ibG9jayksIDAsIGNtYl9kYXRhLT5zaXplKTsKKwkJY21iX2RhdGEtPmxhc3RfdXBkYXRlID0gMDsKKwl9CisJY2Rldi0+cHJpdmF0ZS0+Y21iX3N0YXJ0X3RpbWUgPSBnZXRfY2xvY2soKTsKKwlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CiB9CiAKIC8qKgpAQCAtMzQzLDggKzUxOSw4IEBACiAvKiBpbnNlcnQgYSBzaW5nbGUgZGV2aWNlIGludG8gdGhlIGNtYl9hcmVhIGxpc3QKICAqIGNhbGxlZCB3aXRoIGNtYl9hcmVhLmxvY2sgaGVsZCBmcm9tIGFsbG9jX2NtYgogICovCi1zdGF0aWMgaW5saW5lIGludAotYWxsb2NfY21iX3NpbmdsZSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCitzdGF0aWMgaW5saW5lIGludCBhbGxvY19jbWJfc2luZ2xlIChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKKwkJCQkgICAgc3RydWN0IGNtYl9kYXRhICpjbWJfZGF0YSkKIHsKIAlzdHJ1Y3QgY21iICpjbWI7CiAJc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqbm9kZTsKQEAgLTM1OCwxMCArNTM0LDEyIEBACiAKIAkvKiBmaW5kIGZpcnN0IHVudXNlZCBjbWIgaW4gY21iX2FyZWEubWVtLgogCSAqIHRoaXMgaXMgYSBsaXR0bGUgdHJpY2t5OiBjbWJfYXJlYS5saXN0Ci0JICogcmVtYWlucyBzb3J0ZWQgYnkgLT5jbWIgcG9pbnRlcnMgKi8KKwkgKiByZW1haW5zIHNvcnRlZCBieSAtPmNtYi0+aHdfZGF0YSBwb2ludGVycyAqLwogCWNtYiA9IGNtYl9hcmVhLm1lbTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZjbWJfYXJlYS5saXN0LCBjbWJfbGlzdCkgewotCQlpZiAoKHN0cnVjdCBjbWIqKW5vZGUtPmNtYiA+IGNtYikKKwkJc3RydWN0IGNtYl9kYXRhICpkYXRhOworCQlkYXRhID0gbm9kZS0+Y21iOworCQlpZiAoKHN0cnVjdCBjbWIqKWRhdGEtPmh3X2Jsb2NrID4gY21iKQogCQkJYnJlYWs7CiAJCWNtYisrOwogCX0KQEAgLTM3Miw3ICs1NTAsOCBAQAogCiAJLyogaW5zZXJ0IG5ldyBjbWIgKi8KIAlsaXN0X2FkZF90YWlsKCZjZGV2LT5wcml2YXRlLT5jbWJfbGlzdCwgJm5vZGUtPmNtYl9saXN0KTsKLQljZGV2LT5wcml2YXRlLT5jbWIgPSBjbWI7CisJY21iX2RhdGEtPmh3X2Jsb2NrID0gY21iOworCWNkZXYtPnByaXZhdGUtPmNtYiA9IGNtYl9kYXRhOwogCXJldCA9IDA7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwpAQCAtMzg1LDcgKzU2NCwxOSBAQAogCWludCByZXQ7CiAJc3RydWN0IGNtYiAqbWVtOwogCXNzaXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgY21iX2RhdGEgKmNtYl9kYXRhOwogCisJLyogQWxsb2NhdGUgcHJpdmF0ZSBjbWJfZGF0YS4gKi8KKwljbWJfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWJfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghY21iX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJY21iX2RhdGEtPmxhc3RfYmxvY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWJfZGF0YS0+bGFzdF9ibG9jaykgeworCQlrZnJlZShjbWJfZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljbWJfZGF0YS0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21iKTsKIAlzcGluX2xvY2soJmNtYl9hcmVhLmxvY2spOwogCiAJaWYgKCFjbWJfYXJlYS5tZW0pIHsKQEAgLTQxNCwyOSArNjA1LDM2IEBACiAJfQogCiAJLyogZG8gdGhlIGFjdHVhbCBhbGxvY2F0aW9uICovCi0JcmV0ID0gYWxsb2NfY21iX3NpbmdsZShjZGV2KTsKKwlyZXQgPSBhbGxvY19jbWJfc2luZ2xlKGNkZXYsIGNtYl9kYXRhKTsKIG91dDoKIAlzcGluX3VubG9jaygmY21iX2FyZWEubG9jayk7Ci0KKwlpZiAocmV0KSB7CisJCWtmcmVlKGNtYl9kYXRhLT5sYXN0X2Jsb2NrKTsKKwkJa2ZyZWUoY21iX2RhdGEpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZAotZnJlZV9jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCitzdGF0aWMgdm9pZCBmcmVlX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwotCi0JcHJpdiA9IGNkZXYtPnByaXZhdGU7CisJc3RydWN0IGNtYl9kYXRhICpjbWJfZGF0YTsKIAogCXNwaW5fbG9jaygmY21iX2FyZWEubG9jayk7CiAJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKIAorCXByaXYgPSBjZGV2LT5wcml2YXRlOworCiAJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmNtYl9saXN0KSkgewogCQkvKiBhbHJlYWR5IGZyZWVkICovCiAJCWdvdG8gb3V0OwogCX0KIAorCWNtYl9kYXRhID0gcHJpdi0+Y21iOwogCXByaXYtPmNtYiA9IE5VTEw7CisJaWYgKGNtYl9kYXRhKQorCQlrZnJlZShjbWJfZGF0YS0+bGFzdF9ibG9jayk7CisJa2ZyZWUoY21iX2RhdGEpOwogCWxpc3RfZGVsX2luaXQoJnByaXYtPmNtYl9saXN0KTsKIAogCWlmIChsaXN0X2VtcHR5KCZjbWJfYXJlYS5saXN0KSkgewpAQCAtNDUxLDgzICs2NDksOTcgQEAKIAlzcGluX3VubG9jaygmY21iX2FyZWEubG9jayk7CiB9CiAKLXN0YXRpYyBpbnQKLXNldF9jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHUzMiBtbWUpCitzdGF0aWMgaW50IHNldF9jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHUzMiBtbWUpCiB7CiAJdTE2IG9mZnNldDsKKwlzdHJ1Y3QgY21iX2RhdGEgKmNtYl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNkZXYtPnByaXZhdGUtPmNtYikKKwlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJaWYgKCFjZGV2LT5wcml2YXRlLT5jbWIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwotCi0Jb2Zmc2V0ID0gbW1lID8gKHN0cnVjdCBjbWIgKiljZGV2LT5wcml2YXRlLT5jbWIgLSBjbWJfYXJlYS5tZW0gOiAwOworCX0KKwljbWJfZGF0YSA9IGNkZXYtPnByaXZhdGUtPmNtYjsKKwlvZmZzZXQgPSBtbWUgPyAoc3RydWN0IGNtYiAqKWNtYl9kYXRhLT5od19ibG9jayAtIGNtYl9hcmVhLm1lbSA6IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gc2V0X3NjaGliX3dhaXQoY2RldiwgbW1lLCAwLCBvZmZzZXQpOwogfQogCi1zdGF0aWMgdTY0Ci1yZWFkX2NtYiAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBpbmRleCkKK3N0YXRpYyB1NjQgcmVhZF9jbWIgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgaW5kZXgpCiB7Ci0JLyogeWVzLCB3ZSBoYXZlIHRvIHB1dCBpdCBvbiB0aGUgc3RhY2sKLQkgKiBiZWNhdXNlIHRoZSBjbWIgbXVzdCBvbmx5IGJlIGFjY2Vzc2VkCi0JICogYXRvbWljYWxseSwgZS5nLiB3aXRoIG12YyAqLwotCXN0cnVjdCBjbWIgY21iOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNtYiAqY21iOwogCXUzMiB2YWw7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmV0ID0gY21mX2NtYl9jb3B5X3dhaXQoY2Rldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwogCWlmICghY2Rldi0+cHJpdmF0ZS0+Y21iKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CiAJfQotCi0JY21iID0gKihzdHJ1Y3QgY21iKiljZGV2LT5wcml2YXRlLT5jbWI7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJY21iID0gKChzdHJ1Y3QgY21iX2RhdGEgKiljZGV2LT5wcml2YXRlLT5jbWIpLT5sYXN0X2Jsb2NrOwogCiAJc3dpdGNoIChpbmRleCkgewogCWNhc2UgY21iX3NzY2hfcnNjaF9jb3VudDoKLQkJcmV0dXJuIGNtYi5zc2NoX3JzY2hfY291bnQ7CisJCXJldCA9IGNtYi0+c3NjaF9yc2NoX2NvdW50OworCQlnb3RvIG91dDsKIAljYXNlIGNtYl9zYW1wbGVfY291bnQ6Ci0JCXJldHVybiBjbWIuc2FtcGxlX2NvdW50OworCQlyZXQgPSBjbWItPnNhbXBsZV9jb3VudDsKKwkJZ290byBvdXQ7CiAJY2FzZSBjbWJfZGV2aWNlX2Nvbm5lY3RfdGltZToKLQkJdmFsID0gY21iLmRldmljZV9jb25uZWN0X3RpbWU7CisJCXZhbCA9IGNtYi0+ZGV2aWNlX2Nvbm5lY3RfdGltZTsKIAkJYnJlYWs7CiAJY2FzZSBjbWJfZnVuY3Rpb25fcGVuZGluZ190aW1lOgotCQl2YWwgPSBjbWIuZnVuY3Rpb25fcGVuZGluZ190aW1lOworCQl2YWwgPSBjbWItPmZ1bmN0aW9uX3BlbmRpbmdfdGltZTsKIAkJYnJlYWs7CiAJY2FzZSBjbWJfZGV2aWNlX2Rpc2Nvbm5lY3RfdGltZToKLQkJdmFsID0gY21iLmRldmljZV9kaXNjb25uZWN0X3RpbWU7CisJCXZhbCA9IGNtYi0+ZGV2aWNlX2Rpc2Nvbm5lY3RfdGltZTsKIAkJYnJlYWs7CiAJY2FzZSBjbWJfY29udHJvbF91bml0X3F1ZXVpbmdfdGltZToKLQkJdmFsID0gY21iLmNvbnRyb2xfdW5pdF9xdWV1aW5nX3RpbWU7CisJCXZhbCA9IGNtYi0+Y29udHJvbF91bml0X3F1ZXVpbmdfdGltZTsKIAkJYnJlYWs7CiAJY2FzZSBjbWJfZGV2aWNlX2FjdGl2ZV9vbmx5X3RpbWU6Ci0JCXZhbCA9IGNtYi5kZXZpY2VfYWN0aXZlX29ubHlfdGltZTsKKwkJdmFsID0gY21iLT5kZXZpY2VfYWN0aXZlX29ubHlfdGltZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OwogCX0KLQlyZXR1cm4gdGltZV90b19hdmdfbnNlYyh2YWwsIGNtYi5zYW1wbGVfY291bnQpOworCXJldCA9IHRpbWVfdG9fYXZnX25zZWModmFsLCBjbWItPnNhbXBsZV9jb3VudCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotcmVhZGFsbF9jbWIgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgY21iZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgcmVhZGFsbF9jbWIgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgY21iZGF0YSAqZGF0YSkKIHsKLQkvKiB5ZXMsIHdlIGhhdmUgdG8gcHV0IGl0IG9uIHRoZSBzdGFjawotCSAqIGJlY2F1c2UgdGhlIGNtYiBtdXN0IG9ubHkgYmUgYWNjZXNzZWQKLQkgKiBhdG9taWNhbGx5LCBlLmcuIHdpdGggbXZjICovCi0Jc3RydWN0IGNtYiBjbWI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY21iICpjbWI7CisJc3RydWN0IGNtYl9kYXRhICpjbWJfZGF0YTsKIAl1NjQgdGltZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKKwlyZXQgPSBjbWZfY21iX2NvcHlfd2FpdChjZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7Ci0JaWYgKCFjZGV2LT5wcml2YXRlLT5jbWIpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRU5PREVWOworCWNtYl9kYXRhID0gY2Rldi0+cHJpdmF0ZS0+Y21iOworCWlmICghY21iX2RhdGEpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQotCi0JY21iID0gKihzdHJ1Y3QgY21iKiljZGV2LT5wcml2YXRlLT5jbWI7Ci0JdGltZSA9IGdldF9jbG9jaygpIC0gY2Rldi0+cHJpdmF0ZS0+Y21iX3N0YXJ0X3RpbWU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJaWYgKGNtYl9kYXRhLT5sYXN0X3VwZGF0ZSA9PSAwKSB7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwljbWIgPSBjbWJfZGF0YS0+bGFzdF9ibG9jazsKKwl0aW1lID0gY21iX2RhdGEtPmxhc3RfdXBkYXRlIC0gY2Rldi0+cHJpdmF0ZS0+Y21iX3N0YXJ0X3RpbWU7CiAKIAltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBjbWJkYXRhKSk7CiAKQEAgLTUzOCwzMSArNzUwLDMyIEBACiAJZGF0YS0+ZWxhcHNlZF90aW1lID0gKHRpbWUgKiAxMDAwKSA+PiAxMjsKIAogCS8qIGNvcHkgZGF0YSB0byBuZXcgc3RydWN0dXJlICovCi0JZGF0YS0+c3NjaF9yc2NoX2NvdW50ID0gY21iLnNzY2hfcnNjaF9jb3VudDsKLQlkYXRhLT5zYW1wbGVfY291bnQgPSBjbWIuc2FtcGxlX2NvdW50OworCWRhdGEtPnNzY2hfcnNjaF9jb3VudCA9IGNtYi0+c3NjaF9yc2NoX2NvdW50OworCWRhdGEtPnNhbXBsZV9jb3VudCA9IGNtYi0+c2FtcGxlX2NvdW50OwogCiAJLyogdGltZSBmaWVsZHMgYXJlIGNvbnZlcnRlZCB0byBuYW5vc2Vjb25kcyB3aGlsZSBjb3B5aW5nICovCi0JZGF0YS0+ZGV2aWNlX2Nvbm5lY3RfdGltZSA9IHRpbWVfdG9fbnNlYyhjbWIuZGV2aWNlX2Nvbm5lY3RfdGltZSk7Ci0JZGF0YS0+ZnVuY3Rpb25fcGVuZGluZ190aW1lID0gdGltZV90b19uc2VjKGNtYi5mdW5jdGlvbl9wZW5kaW5nX3RpbWUpOwotCWRhdGEtPmRldmljZV9kaXNjb25uZWN0X3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLmRldmljZV9kaXNjb25uZWN0X3RpbWUpOworCWRhdGEtPmRldmljZV9jb25uZWN0X3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLT5kZXZpY2VfY29ubmVjdF90aW1lKTsKKwlkYXRhLT5mdW5jdGlvbl9wZW5kaW5nX3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLT5mdW5jdGlvbl9wZW5kaW5nX3RpbWUpOworCWRhdGEtPmRldmljZV9kaXNjb25uZWN0X3RpbWUgPQorCQl0aW1lX3RvX25zZWMoY21iLT5kZXZpY2VfZGlzY29ubmVjdF90aW1lKTsKIAlkYXRhLT5jb250cm9sX3VuaXRfcXVldWluZ190aW1lCi0JCT0gdGltZV90b19uc2VjKGNtYi5jb250cm9sX3VuaXRfcXVldWluZ190aW1lKTsKKwkJPSB0aW1lX3RvX25zZWMoY21iLT5jb250cm9sX3VuaXRfcXVldWluZ190aW1lKTsKIAlkYXRhLT5kZXZpY2VfYWN0aXZlX29ubHlfdGltZQotCQk9IHRpbWVfdG9fbnNlYyhjbWIuZGV2aWNlX2FjdGl2ZV9vbmx5X3RpbWUpOwotCi0JcmV0dXJuIDA7CisJCT0gdGltZV90b19uc2VjKGNtYi0+ZGV2aWNlX2FjdGl2ZV9vbmx5X3RpbWUpOworCXJldCA9IDA7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQKLXJlc2V0X2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyB2b2lkIHJlc2V0X2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlzdHJ1Y3QgY21iICpjbWI7Ci0Jc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKLQljbWIgPSBjZGV2LT5wcml2YXRlLT5jbWI7Ci0JaWYgKGNtYikKLQkJbWVtc2V0IChjbWIsIDAsIHNpemVvZiAoKmNtYikpOwotCWNkZXYtPnByaXZhdGUtPmNtYl9zdGFydF90aW1lID0gZ2V0X2Nsb2NrKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOworCWNtZl9nZW5lcmljX3Jlc2V0KGNkZXYpOworfQorCitzdGF0aWMgdm9pZCAqIGFsaWduX2NtYih2b2lkICphcmVhKQoreworCXJldHVybiBhcmVhOwogfQogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjbWZfYXR0cl9ncm91cDsKQEAgLTU3NCw2ICs3ODcsNyBAQAogCS5yZWFkCT0gcmVhZF9jbWIsCiAJLnJlYWRhbGwgICAgPSByZWFkYWxsX2NtYiwKIAkucmVzZXQJICAgID0gcmVzZXRfY21iLAorCS5hbGlnbgkgICAgPSBhbGlnbl9jbWIsCiAJLmF0dHJfZ3JvdXAgPSAmY21mX2F0dHJfZ3JvdXAsCiB9OwogDApAQCAtNjEwLDIyICs4MjQsMzQgQEAKIAlyZXR1cm4gKHN0cnVjdCBjbWJlKilhZGRyOwogfQogCi1zdGF0aWMgaW50Ci1hbGxvY19jbWJlIChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyBpbnQgYWxsb2NfY21iZSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IGNtYmUgKmNtYmU7Ci0JY21iZSA9IGttYWxsb2MgKHNpemVvZiAoKmNtYmUpICogMiwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGNtYl9kYXRhICpjbWJfZGF0YTsKKwlpbnQgcmV0OworCisJY21iZSA9IGt6YWxsb2MgKHNpemVvZiAoKmNtYmUpICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbWJlKQogCQlyZXR1cm4gLUVOT01FTTsKLQorCWNtYl9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWJfZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKwljbWJfZGF0YS0+bGFzdF9ibG9jayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWJlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWJfZGF0YS0+bGFzdF9ibG9jaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKwljbWJfZGF0YS0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21iZSk7CiAJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+Y21iKSB7Ci0JCWtmcmVlKGNtYmUpOwogCQlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfZnJlZTsKIAl9Ci0KLQljZGV2LT5wcml2YXRlLT5jbWIgPSBjbWJlOworCWNtYl9kYXRhLT5od19ibG9jayA9IGNtYmU7CisJY2Rldi0+cHJpdmF0ZS0+Y21iID0gY21iX2RhdGE7CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwogCiAJLyogYWN0aXZhdGUgZ2xvYmFsIG1lYXN1cmVtZW50IGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoYW5uZWwgKi8KQEAgLTYzNiwxNCArODYyLDI0IEBACiAJc3Bpbl91bmxvY2soJmNtYl9hcmVhLmxvY2spOwogCiAJcmV0dXJuIDA7CitvdXRfZnJlZToKKwlpZiAoY21iX2RhdGEpCisJCWtmcmVlKGNtYl9kYXRhLT5sYXN0X2Jsb2NrKTsKKwlrZnJlZShjbWJfZGF0YSk7CisJa2ZyZWUoY21iZSk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQKLWZyZWVfY21iZSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCitzdGF0aWMgdm9pZCBmcmVlX2NtYmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogeworCXN0cnVjdCBjbWJfZGF0YSAqY21iX2RhdGE7CisKIAlzcGluX2xvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwotCWtmcmVlKGNkZXYtPnByaXZhdGUtPmNtYik7CisJY21iX2RhdGEgPSBjZGV2LT5wcml2YXRlLT5jbWI7CiAJY2Rldi0+cHJpdmF0ZS0+Y21iID0gTlVMTDsKKwlpZiAoY21iX2RhdGEpCisJCWtmcmVlKGNtYl9kYXRhLT5sYXN0X2Jsb2NrKTsKKwlrZnJlZShjbWJfZGF0YSk7CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwogCiAJLyogZGVhY3RpdmF0ZSBnbG9iYWwgbWVhc3VyZW1lbnQgaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGFubmVsICovCkBAIC02NTQsODkgKzg5MCwxMDUgQEAKIAlzcGluX3VubG9jaygmY21iX2FyZWEubG9jayk7CiB9CiAKLXN0YXRpYyBpbnQKLXNldF9jbWJlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1MzIgbW1lKQorc3RhdGljIGludCBzZXRfY21iZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdTMyIG1tZSkKIHsKIAl1bnNpZ25lZCBsb25nIG1iYTsKKwlzdHJ1Y3QgY21iX2RhdGEgKmNtYl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNkZXYtPnByaXZhdGUtPmNtYikKKwlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJaWYgKCFjZGV2LT5wcml2YXRlLT5jbWIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwotCW1iYSA9IG1tZSA/ICh1bnNpZ25lZCBsb25nKSBjbWJlX2FsaWduKGNkZXYtPnByaXZhdGUtPmNtYikgOiAwOworCX0KKwljbWJfZGF0YSA9IGNkZXYtPnByaXZhdGUtPmNtYjsKKwltYmEgPSBtbWUgPyAodW5zaWduZWQgbG9uZykgY21iZV9hbGlnbihjbWJfZGF0YS0+aHdfYmxvY2spIDogMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBzZXRfc2NoaWJfd2FpdChjZGV2LCBtbWUsIDEsIG1iYSk7CiB9CiAKIAotdTY0Ci1yZWFkX2NtYmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgaW5kZXgpCitzdGF0aWMgdTY0IHJlYWRfY21iZSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBpbmRleCkKIHsKLQkvKiB5ZXMsIHdlIGhhdmUgdG8gcHV0IGl0IG9uIHRoZSBzdGFjawotCSAqIGJlY2F1c2UgdGhlIGNtYiBtdXN0IG9ubHkgYmUgYWNjZXNzZWQKLQkgKiBhdG9taWNhbGx5LCBlLmcuIHdpdGggbXZjICovCi0Jc3RydWN0IGNtYmUgY21iOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNtYmUgKmNtYjsKKwlzdHJ1Y3QgY21iX2RhdGEgKmNtYl9kYXRhOwogCXUzMiB2YWw7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmV0ID0gY21mX2NtYl9jb3B5X3dhaXQoY2Rldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwotCWlmICghY2Rldi0+cHJpdmF0ZS0+Y21iKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKKwljbWJfZGF0YSA9IGNkZXYtPnByaXZhdGUtPmNtYjsKKwlpZiAoIWNtYl9kYXRhKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OwogCX0KLQotCWNtYiA9ICpjbWJlX2FsaWduKGNkZXYtPnByaXZhdGUtPmNtYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJY21iID0gY21iX2RhdGEtPmxhc3RfYmxvY2s7CiAKIAlzd2l0Y2ggKGluZGV4KSB7CiAJY2FzZSBjbWJfc3NjaF9yc2NoX2NvdW50OgotCQlyZXR1cm4gY21iLnNzY2hfcnNjaF9jb3VudDsKKwkJcmV0ID0gY21iLT5zc2NoX3JzY2hfY291bnQ7CisJCWdvdG8gb3V0OwogCWNhc2UgY21iX3NhbXBsZV9jb3VudDoKLQkJcmV0dXJuIGNtYi5zYW1wbGVfY291bnQ7CisJCXJldCA9IGNtYi0+c2FtcGxlX2NvdW50OworCQlnb3RvIG91dDsKIAljYXNlIGNtYl9kZXZpY2VfY29ubmVjdF90aW1lOgotCQl2YWwgPSBjbWIuZGV2aWNlX2Nvbm5lY3RfdGltZTsKKwkJdmFsID0gY21iLT5kZXZpY2VfY29ubmVjdF90aW1lOwogCQlicmVhazsKIAljYXNlIGNtYl9mdW5jdGlvbl9wZW5kaW5nX3RpbWU6Ci0JCXZhbCA9IGNtYi5mdW5jdGlvbl9wZW5kaW5nX3RpbWU7CisJCXZhbCA9IGNtYi0+ZnVuY3Rpb25fcGVuZGluZ190aW1lOwogCQlicmVhazsKIAljYXNlIGNtYl9kZXZpY2VfZGlzY29ubmVjdF90aW1lOgotCQl2YWwgPSBjbWIuZGV2aWNlX2Rpc2Nvbm5lY3RfdGltZTsKKwkJdmFsID0gY21iLT5kZXZpY2VfZGlzY29ubmVjdF90aW1lOwogCQlicmVhazsKIAljYXNlIGNtYl9jb250cm9sX3VuaXRfcXVldWluZ190aW1lOgotCQl2YWwgPSBjbWIuY29udHJvbF91bml0X3F1ZXVpbmdfdGltZTsKKwkJdmFsID0gY21iLT5jb250cm9sX3VuaXRfcXVldWluZ190aW1lOwogCQlicmVhazsKIAljYXNlIGNtYl9kZXZpY2VfYWN0aXZlX29ubHlfdGltZToKLQkJdmFsID0gY21iLmRldmljZV9hY3RpdmVfb25seV90aW1lOworCQl2YWwgPSBjbWItPmRldmljZV9hY3RpdmVfb25seV90aW1lOwogCQlicmVhazsKIAljYXNlIGNtYl9kZXZpY2VfYnVzeV90aW1lOgotCQl2YWwgPSBjbWIuZGV2aWNlX2J1c3lfdGltZTsKKwkJdmFsID0gY21iLT5kZXZpY2VfYnVzeV90aW1lOwogCQlicmVhazsKIAljYXNlIGNtYl9pbml0aWFsX2NvbW1hbmRfcmVzcG9uc2VfdGltZToKLQkJdmFsID0gY21iLmluaXRpYWxfY29tbWFuZF9yZXNwb25zZV90aW1lOworCQl2YWwgPSBjbWItPmluaXRpYWxfY29tbWFuZF9yZXNwb25zZV90aW1lOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMDsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CiAJfQotCXJldHVybiB0aW1lX3RvX2F2Z19uc2VjKHZhbCwgY21iLnNhbXBsZV9jb3VudCk7CisJcmV0ID0gdGltZV90b19hdmdfbnNlYyh2YWwsIGNtYi0+c2FtcGxlX2NvdW50KTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1yZWFkYWxsX2NtYmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3QgY21iZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgcmVhZGFsbF9jbWJlIChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IGNtYmRhdGEgKmRhdGEpCiB7Ci0JLyogeWVzLCB3ZSBoYXZlIHRvIHB1dCBpdCBvbiB0aGUgc3RhY2sKLQkgKiBiZWNhdXNlIHRoZSBjbWIgbXVzdCBvbmx5IGJlIGFjY2Vzc2VkCi0JICogYXRvbWljYWxseSwgZS5nLiB3aXRoIG12YyAqLwotCXN0cnVjdCBjbWJlIGNtYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjbWJlICpjbWI7CisJc3RydWN0IGNtYl9kYXRhICpjbWJfZGF0YTsKIAl1NjQgdGltZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKKwlyZXQgPSBjbWZfY21iX2NvcHlfd2FpdChjZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7Ci0JaWYgKCFjZGV2LT5wcml2YXRlLT5jbWIpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRU5PREVWOworCWNtYl9kYXRhID0gY2Rldi0+cHJpdmF0ZS0+Y21iOworCWlmICghY21iX2RhdGEpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQotCi0JY21iID0gKmNtYmVfYWxpZ24oY2Rldi0+cHJpdmF0ZS0+Y21iKTsKLQl0aW1lID0gZ2V0X2Nsb2NrKCkgLSBjZGV2LT5wcml2YXRlLT5jbWJfc3RhcnRfdGltZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKKwlpZiAoY21iX2RhdGEtPmxhc3RfdXBkYXRlID09IDApIHsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCXRpbWUgPSBjbWJfZGF0YS0+bGFzdF91cGRhdGUgLSBjZGV2LT5wcml2YXRlLT5jbWJfc3RhcnRfdGltZTsKIAogCW1lbXNldCAoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBjbWJkYXRhKSk7CiAKQEAgLTc0NiwzNSArOTk4LDM4IEBACiAJLyogY29udmVyIHRvIG5hbm9zZWNvbmRzICovCiAJZGF0YS0+ZWxhcHNlZF90aW1lID0gKHRpbWUgKiAxMDAwKSA+PiAxMjsKIAorCWNtYiA9IGNtYl9kYXRhLT5sYXN0X2Jsb2NrOwogCS8qIGNvcHkgZGF0YSB0byBuZXcgc3RydWN0dXJlICovCi0JZGF0YS0+c3NjaF9yc2NoX2NvdW50ID0gY21iLnNzY2hfcnNjaF9jb3VudDsKLQlkYXRhLT5zYW1wbGVfY291bnQgPSBjbWIuc2FtcGxlX2NvdW50OworCWRhdGEtPnNzY2hfcnNjaF9jb3VudCA9IGNtYi0+c3NjaF9yc2NoX2NvdW50OworCWRhdGEtPnNhbXBsZV9jb3VudCA9IGNtYi0+c2FtcGxlX2NvdW50OwogCiAJLyogdGltZSBmaWVsZHMgYXJlIGNvbnZlcnRlZCB0byBuYW5vc2Vjb25kcyB3aGlsZSBjb3B5aW5nICovCi0JZGF0YS0+ZGV2aWNlX2Nvbm5lY3RfdGltZSA9IHRpbWVfdG9fbnNlYyhjbWIuZGV2aWNlX2Nvbm5lY3RfdGltZSk7Ci0JZGF0YS0+ZnVuY3Rpb25fcGVuZGluZ190aW1lID0gdGltZV90b19uc2VjKGNtYi5mdW5jdGlvbl9wZW5kaW5nX3RpbWUpOwotCWRhdGEtPmRldmljZV9kaXNjb25uZWN0X3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLmRldmljZV9kaXNjb25uZWN0X3RpbWUpOworCWRhdGEtPmRldmljZV9jb25uZWN0X3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLT5kZXZpY2VfY29ubmVjdF90aW1lKTsKKwlkYXRhLT5mdW5jdGlvbl9wZW5kaW5nX3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLT5mdW5jdGlvbl9wZW5kaW5nX3RpbWUpOworCWRhdGEtPmRldmljZV9kaXNjb25uZWN0X3RpbWUgPQorCQl0aW1lX3RvX25zZWMoY21iLT5kZXZpY2VfZGlzY29ubmVjdF90aW1lKTsKIAlkYXRhLT5jb250cm9sX3VuaXRfcXVldWluZ190aW1lCi0JCT0gdGltZV90b19uc2VjKGNtYi5jb250cm9sX3VuaXRfcXVldWluZ190aW1lKTsKKwkJPSB0aW1lX3RvX25zZWMoY21iLT5jb250cm9sX3VuaXRfcXVldWluZ190aW1lKTsKIAlkYXRhLT5kZXZpY2VfYWN0aXZlX29ubHlfdGltZQotCQk9IHRpbWVfdG9fbnNlYyhjbWIuZGV2aWNlX2FjdGl2ZV9vbmx5X3RpbWUpOwotCWRhdGEtPmRldmljZV9idXN5X3RpbWUgPSB0aW1lX3RvX25zZWMoY21iLmRldmljZV9idXN5X3RpbWUpOworCQk9IHRpbWVfdG9fbnNlYyhjbWItPmRldmljZV9hY3RpdmVfb25seV90aW1lKTsKKwlkYXRhLT5kZXZpY2VfYnVzeV90aW1lID0gdGltZV90b19uc2VjKGNtYi0+ZGV2aWNlX2J1c3lfdGltZSk7CiAJZGF0YS0+aW5pdGlhbF9jb21tYW5kX3Jlc3BvbnNlX3RpbWUKLQkJPSB0aW1lX3RvX25zZWMoY21iLmluaXRpYWxfY29tbWFuZF9yZXNwb25zZV90aW1lKTsKKwkJPSB0aW1lX3RvX25zZWMoY21iLT5pbml0aWFsX2NvbW1hbmRfcmVzcG9uc2VfdGltZSk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkCi1yZXNldF9jbWJlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQorc3RhdGljIHZvaWQgcmVzZXRfY21iZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKLQlzdHJ1Y3QgY21iZSAqY21iOwotCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7Ci0JY21iID0gY21iZV9hbGlnbihjZGV2LT5wcml2YXRlLT5jbWIpOwotCWlmIChjbWIpCi0JCW1lbXNldCAoY21iLCAwLCBzaXplb2YgKCpjbWIpKTsKLQljZGV2LT5wcml2YXRlLT5jbWJfc3RhcnRfdGltZSA9IGdldF9jbG9jaygpOwotCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwljbWZfZ2VuZXJpY19yZXNldChjZGV2KTsKK30KKworc3RhdGljIHZvaWQgKiBhbGlnbl9jbWJlKHZvaWQgKmFyZWEpCit7CisJcmV0dXJuIGNtYmVfYWxpZ24oYXJlYSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNtZl9hdHRyX2dyb3VwX2V4dDsKQEAgLTc4Niw2ICsxMDQxLDcgQEAKIAkucmVhZAkgICAgPSByZWFkX2NtYmUsCiAJLnJlYWRhbGwgICAgPSByZWFkYWxsX2NtYmUsCiAJLnJlc2V0CSAgICA9IHJlc2V0X2NtYmUsCisJLmFsaWduCSAgICA9IGFsaWduX2NtYmUsCiAJLmF0dHJfZ3JvdXAgPSAmY21mX2F0dHJfZ3JvdXBfZXh0LAogfTsKIAwKQEAgLTgwMywxNCArMTA1OSwxOSBAQAogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCWxvbmcgaW50ZXJ2YWw7CiAJdW5zaWduZWQgbG9uZyBjb3VudDsKKwlzdHJ1Y3QgY21iX2RhdGEgKmNtYl9kYXRhOwogCiAJY2RldiA9IHRvX2Njd2RldihkZXYpOwotCWludGVydmFsICA9IGdldF9jbG9jaygpIC0gY2Rldi0+cHJpdmF0ZS0+Y21iX3N0YXJ0X3RpbWU7CiAJY291bnQgPSBjbWZfcmVhZChjZGV2LCBjbWJfc2FtcGxlX2NvdW50KTsKLQlpZiAoY291bnQpCisJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwljbWJfZGF0YSA9IGNkZXYtPnByaXZhdGUtPmNtYjsKKwlpZiAoY291bnQpIHsKKwkJaW50ZXJ2YWwgPSBjbWJfZGF0YS0+bGFzdF91cGRhdGUgLQorCQkJY2Rldi0+cHJpdmF0ZS0+Y21iX3N0YXJ0X3RpbWU7CiAJCWludGVydmFsIC89IGNvdW50OwotCWVsc2UKKwl9IGVsc2UKIAkJaW50ZXJ2YWwgPSAtMTsKKwlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBpbnRlcnZhbCk7CiB9CiAKQEAgLTgyMyw3ICsxMDg0LDEwIEBACiAJaW50IHJldDsKIAogCXJldCA9IGNtZl9yZWFkYWxsKHRvX2Njd2RldihkZXYpLCAmZGF0YSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ID09IC1FQUdBSU4gfHwgcmV0ID09IC1FTk9ERVYpCisJCS8qIE5vIGRhdGEgKHlldC9jdXJyZW50bHkpIGF2YWlsYWJsZSB0byB1c2UgZm9yIGNhbGN1bGF0aW9uLiAqLworCQlyZXR1cm4gc3ByaW50ZihidWYsICJuL2FcbiIpOworCWVsc2UgaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXV0aWxpemF0aW9uID0gZGF0YS5kZXZpY2VfY29ubmVjdF90aW1lICsKQEAgLTk4Miw2ICsxMjQ2LDEzIEBACiAJcmV0dXJuIGNtYm9wcy0+cmVhZGFsbChjZGV2LCBkYXRhKTsKIH0KIAorLyogUmVlbmFibGUgY21mIHdoZW4gYSBkaXNjb25uZWN0ZWQgZGV2aWNlIGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLiAqLworaW50IGNtZl9yZWVuYWJsZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwljbWJvcHMtPnJlc2V0KGNkZXYpOworCXJldHVybiBjbWJvcHMtPnNldChjZGV2LCAyKTsKK30KKwogc3RhdGljIGludCBfX2luaXQKIGluaXRfY21mKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCA3NGVhOGFhLi4xZDNiZTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTE5LDkgKzE5LDExIEBACiAjaW5jbHVkZSAiY2lvX2RlYnVnLmgiCiAjaW5jbHVkZSAiaW9hc20uaCIKICNpbmNsdWRlICJjaHNjLmgiCisjaW5jbHVkZSAiZGV2aWNlLmgiCiAKIGludCBuZWVkX3Jlc2NhbiA9IDA7CiBpbnQgY3NzX2luaXRfZG9uZSA9IDA7CitzdGF0aWMgaW50IG5lZWRfcmVwcm9iZSA9IDA7CiBzdGF0aWMgaW50IG1heF9zc2lkID0gMDsKIAogc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3NbX19NQVhfQ1NTSUQgKyAxXTsKQEAgLTMzOSw2ICszNDEsNjcgQEAKIERFQ0xBUkVfV09SSyhzbG93X3BhdGhfd29yaywgKHdvcmtmdW5jKWNzc190cmlnZ2VyX3Nsb3dfcGF0aCwgTlVMTCk7CiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2xvd19wYXRoX3dxOwogCisvKiBSZXByb2JlIHN1YmNoYW5uZWwgaWYgdW5yZWdpc3RlcmVkLiAqLworc3RhdGljIGludCByZXByb2JlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKwlpbnQgcmV0OworCisJQ0lPX0RFQlVHKEtFUk5fSU5GTywgNiwgImNpbzogcmVwcm9iZSAwLiV4LiUwNHhcbiIsCisJCSAgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKKwlpZiAobmVlZF9yZXByb2JlKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXNjaCA9IGdldF9zdWJjaGFubmVsX2J5X3NjaGlkKHNjaGlkKTsKKwlpZiAoc2NoKSB7CisJCS8qIEFscmVhZHkga25vd24uICovCisJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gY3NzX3Byb2JlX2RldmljZShzY2hpZCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVOWElPOgorCWNhc2UgLUVOT01FTToKKwkJLyogVGhlc2Ugc2hvdWxkIGFib3J0IGxvb3BpbmcgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBXb3JrIGZ1bmN0aW9uIHVzZWQgdG8gcmVwcm9iZSBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLworc3RhdGljIHZvaWQgcmVwcm9iZV9hbGwodm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJQ0lPX01TR19FVkVOVCgyLCAicmVwcm9iZSBzdGFydFxuIik7CisKKwluZWVkX3JlcHJvYmUgPSAwOworCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLworCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAorCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlyZXQgPSBmb3JfZWFjaF9zdWJjaGFubmVsKHJlcHJvYmVfc3ViY2hhbm5lbCwgTlVMTCk7CisKKwlDSU9fTVNHX0VWRU5UKDIsICJyZXByb2JlIGRvbmUgKHJjPSVkLCBuZWVkX3JlcHJvYmU9JWQpXG4iLCByZXQsCisJCSAgICAgIG5lZWRfcmVwcm9iZSk7Cit9CisKK0RFQ0xBUkVfV09SSyhjc3NfcmVwcm9iZV93b3JrLCByZXByb2JlX2FsbCwgTlVMTCk7CisKKy8qIFNjaGVkdWxlIHJlcHJvYmluZyBvZiBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwordm9pZCBjc3Nfc2NoZWR1bGVfcmVwcm9iZSh2b2lkKQoreworCW5lZWRfcmVwcm9iZSA9IDE7CisJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjc3NfcmVwcm9iZV93b3JrKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY3NzX3NjaGVkdWxlX3JlcHJvYmUpOworCiAvKgogICogUmVzY2FuIGZvciBuZXcgZGV2aWNlcy4gRklYTUU6IFRoaXMgaXMgc2xvdy4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gd2UgaGF2ZSBsb3N0IENSV3MgZHVlIHRvIG92ZXJmbG93cyBhbmQgd2UgaGF2ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggOGUzMDUzYy4uNjdmMGRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC04LDcgKzgsNiBAQAogICoJCSBDb3JuZWxpYSBIdWNrIChjb3JuZWxpYS5odWNrQGRlLmlibS5jb20pCiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMTMzLDggKzEzMiw4IEBACiAKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV9ub3RpZnlfd29yazsKLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBjY3dfZGV2aWNlX2luaXRfd3E7Ci1zdGF0aWMgYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50Oword2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOworYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwogCiBzdGF0aWMgaW50IF9faW5pdAogaW5pdF9jY3dfYnVzX3R5cGUgKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCAxMTU4N2ViLi4wMGJlOWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTEsNiArMSwxMCBAQAogI2lmbmRlZiBTMzkwX0RFVklDRV9ICiAjZGVmaW5lIFMzOTBfREVWSUNFX0gKIAorI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCiAvKgogICogc3RhdGVzIG9mIHRoZSBkZXZpY2Ugc3RhdGVtYWNoaW5lCiAgKi8KQEAgLTIzLDYgKzI3LDcgQEAKIAlERVZfU1RBVEVfRElTQ09OTkVDVEVELAogCURFVl9TVEFURV9ESVNDT05ORUNURURfU0VOU0VfSUQsCiAJREVWX1NUQVRFX0NNRkNIQU5HRSwKKwlERVZfU1RBVEVfQ01GVVBEQVRFLAogCS8qIGxhc3QgZWxlbWVudCEgKi8KIAlOUl9ERVZfU1RBVEVTCiB9OwpAQCAtNjcsNiArNzIsOCBAQAogCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNjd19kZXZpY2Vfd29yazsKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV9ub3RpZnlfd29yazsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBjY3dfZGV2aWNlX2luaXRfd3E7CitleHRlcm4gYXRvbWljX3QgY2N3X2RldmljZV9pbml0X2NvdW50OwogCiB2b2lkIGlvX3N1YmNoYW5uZWxfcmVjb2dfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiAKQEAgLTExMiw1ICsxMTksOCBAQAogdm9pZCBjY3dfZGV2aWNlX3NldF90aW1lb3V0KHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CiBleHRlcm4gc3RydWN0IHN1YmNoYW5uZWxfaWQgY2N3X2RldmljZV9nZXRfc3ViY2hhbm5lbF9pZChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIAorLyogQ2hhbm5lbCBtZWFzdXJlbWVudCBmYWNpbGl0eSByZWxhdGVkICovCiB2b2lkIHJldHJ5X3NldF9zY2hpYihzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7Cit2b2lkIGNtZl9yZXRyeV9jb3B5X2Jsb2NrKHN0cnVjdCBjY3dfZGV2aWNlICopOworaW50IGNtZl9yZWVuYWJsZShzdHJ1Y3QgY2N3X2RldmljZSAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCA0OWVjNTYyLi5jYjFhZjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtOSw3ICs5LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTMzNiw4ICszMzUsMTEgQEAKIAlpZiAoIXJldCkKIAkJLyogRHJpdmVyIGRvZXNuJ3Qgd2FudCBkZXZpY2UgYmFjay4gKi8KIAkJY2N3X2RldmljZV9kb191bnJlZ19yZXJlZygodm9pZCAqKWNkZXYpOwotCWVsc2UKKwllbHNlIHsKKwkJLyogUmVlbmFibGUgY2hhbm5lbCBtZWFzdXJlbWVudHMsIGlmIG5lZWRlZC4gKi8KKwkJY21mX3JlZW5hYmxlKGNkZXYpOwogCQl3YWtlX3VwKCZjZGV2LT5wcml2YXRlLT53YWl0X3EpOworCX0KIH0KIAogLyoKQEAgLTg2MSw2ICs4NjMsOCBAQAogCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOwogCS8qIEFjY3VtdWxhdGUgc3RhdHVzLiBXZSBkb24ndCBkbyBiYXNpYyBzZW5zZS4gKi8KIAljY3dfZGV2aWNlX2FjY3VtdWxhdGVfaXJiKGNkZXYsIGlyYik7CisJLyogUmVtZW1iZXIgdG8gY2xlYXIgaXJiIHRvIGF2b2lkIHJlc2lkdWFscy4gKi8KKwltZW1zZXQoJmNkZXYtPnByaXZhdGUtPmlyYiwgMCwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKIAkvKiBUcnkgdG8gc3RhcnQgZGVsYXllZCBkZXZpY2UgdmVyaWZpY2F0aW9uLiAqLwogCWNjd19kZXZpY2Vfb25saW5lX3ZlcmlmeShjZGV2LCAwKTsKIAkvKiBOb3RlOiBEb24ndCBjYWxsIGhhbmRsZXIgZm9yIGNpbyBpbml0aWF0ZWQgY2xlYXIhICovCkBAIC0xMDkzLDYgKzEwOTcsMTMgQEAKIAlkZXZfZnNtX2V2ZW50KGNkZXYsIGRldl9ldmVudCk7CiB9CiAKK3N0YXRpYyB2b2lkIGNjd19kZXZpY2VfdXBkYXRlX2NtZmJsb2NrKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkJCSAgICAgICBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCit7CisJY21mX3JldHJ5X2NvcHlfYmxvY2soY2Rldik7CisJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfT05MSU5FOworCWRldl9mc21fZXZlbnQoY2RldiwgZGV2X2V2ZW50KTsKK30KIAogc3RhdGljIHZvaWQKIGNjd19kZXZpY2VfcXVpZXNjZV9kb25lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCkBAIC0xMjQ3LDYgKzEyNTgsMTIgQEAKIAkJW0RFVl9FVkVOVF9USU1FT1VUXQk9IGNjd19kZXZpY2VfY2hhbmdlX2NtZnN0YXRlLAogCQlbREVWX0VWRU5UX1ZFUklGWV0JPSBjY3dfZGV2aWNlX2NoYW5nZV9jbWZzdGF0ZSwKIAl9LAorCVtERVZfU1RBVEVfQ01GVVBEQVRFXSA9IHsKKwkJW0RFVl9FVkVOVF9OT1RPUEVSXQk9IGNjd19kZXZpY2VfdXBkYXRlX2NtZmJsb2NrLAorCQlbREVWX0VWRU5UX0lOVEVSUlVQVF0JPSBjY3dfZGV2aWNlX3VwZGF0ZV9jbWZibG9jaywKKwkJW0RFVl9FVkVOVF9USU1FT1VUXQk9IGNjd19kZXZpY2VfdXBkYXRlX2NtZmJsb2NrLAorCQlbREVWX0VWRU5UX1ZFUklGWV0JPSBjY3dfZGV2aWNlX3VwZGF0ZV9jbWZibG9jaywKKwl9LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jCmluZGV4IGU2MGIyZDguLjQzOGRiNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCmluZGV4IDc5NWFiYjUuLmE2MDEyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCkBAIC02LDcgKzYsNiBAQAogICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCiAgKiAgICAgICAgICAgICAgIENvcm5lbGlhIEh1Y2sgKGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNzgsNyArNzcsOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX05PVF9PUEVSKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX1ZFUklGWSkgeworCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfVkVSSUZZIHx8CisJICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9DTEVBUl9WRVJJRlkpIHsKIAkJLyogUmVtZW1iZXIgdG8gZmFrZSBpcmIgd2hlbiBmaW5pc2hlZC4gKi8KIAkJaWYgKCFjZGV2LT5wcml2YXRlLT5mbGFncy5mYWtlX2lyYikgewogCQkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZmFrZV9pcmIgPSAxOwpAQCAtMjcwLDcgKzI3MCw4IEBACiAJCSAqIFdlIGRpZG4ndCBnZXQgY2hhbm5lbCBlbmQgLyBkZXZpY2UgZW5kLiBDaGVjayBpZiBwYXRoCiAJCSAqIHZlcmlmaWNhdGlvbiBoYXMgYmVlbiBzdGFydGVkOyB3ZSBjYW4gcmV0cnkgYWZ0ZXIgaXQgaGFzCiAJCSAqIGZpbmlzaGVkLiBXZSBhbHNvIHJldHJ5IHVuaXQgY2hlY2tzIGV4Y2VwdCBmb3IgY29tbWFuZCByZWplY3QKLQkJICogb3IgaW50ZXJ2ZW50aW9uIHJlcXVpcmVkLgorCQkgKiBvciBpbnRlcnZlbnRpb24gcmVxdWlyZWQuIEFsc28gY2hlY2sgZm9yIGxvbmcgYnVzeQorCQkgKiBjb25kaXRpb25zLgogCQkgKi8KIAkJIGlmIChjZGV2LT5wcml2YXRlLT5mbGFncy5kb3ZlcmlmeSB8fAogCQkJIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9WRVJJRlkpCkBAIC0yNzksNiArMjgwLDEwIEBACiAJCSAgICAgIShpcmItPmVjd1swXSAmCiAJCSAgICAgICAoU05TMF9DTURfUkVKRUNUIHwgU05TMF9JTlRFUlZFTlRJT05fUkVRKSkpCiAJCQkgY2Rldi0+cHJpdmF0ZS0+aW50cGFybSA9IC1FQUdBSU47CisJCWVsc2UgaWYgKChpcmItPnNjc3cuZHN0YXQgJiBERVZfU1RBVF9BVFRFTlRJT04pICYmCisJCQkgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0RFVl9FTkQpICYmCisJCQkgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX1VOSVRfRVhDRVApKQorCQkJY2Rldi0+cHJpdmF0ZS0+aW50cGFybSA9IC1FQUdBSU47CiAJCSBlbHNlCiAJCQkgY2Rldi0+cHJpdmF0ZS0+aW50cGFybSA9IC1FSU87CiAJCQkgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKaW5kZXggODViMTAyMC4uNTRjYjY0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIFBhdGggR3JvdXAgSUQgZnVuY3Rpb25zLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3N0YXR1cy5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMKaW5kZXggNmM3NjJiNC4uMTRiZWYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMKQEAgLTksNyArOSw2IEBACiAgKiBTdGF0dXMgYWNjdW11bGF0aW9uIGFuZCBiYXNpYyBzZW5zZSBmdW5jdGlvbnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYwppbmRleCA5NmY1MTkyLi5iNzAwMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYwpAQCAtMzAsNyArMzAsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwppbmRleCA5ODJhY2M3Li5iMmYyMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwpAQCAtNDExLDcgKzQxMSw2IEBACiAJLm1pbm9yCSAgICA9IFo5MENSWVBUX01JTk9SLAogCS5uYW1lCSAgICA9IERFVl9OQU1FLAogCS5mb3BzCSAgICA9ICZ6OTBjcnlwdF9mb3BzLAotCS5kZXZmc19uYW1lID0gREVWX05BTUUKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9mc20uYyBiL2RyaXZlcnMvczM5MC9uZXQvZnNtLmMKaW5kZXggNzE0NWUyMS4uMmMxZGI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2ZzbS5jCkBAIC00LDcgKzQsNiBAQAogICovCiAKICNpbmNsdWRlICJmc20uaCIKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jCmluZGV4IGUwYzdkZWIuLjE4OWE0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCmluZGV4IDM4YWFkODMyLi44NDkxNTk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCkBAIC04LDcgKzgsNiBAQAogICogICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+CiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCmluZGV4IDU2MDA5ZDcuLjhlODk2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwpAQCAtMjcsNyArMjcsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC04NSw2ICs4NCw4IEBACiAKIERFRklORV9QRVJfQ1BVKGNoYXJbMjU2XSwgcWV0aF9kYmZfdHh0X2J1Zik7CiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcWRpb19vdXRfc2tiX3F1ZXVlX2tleTsKKwogLyoqCiAgKiBzb21lIG1vcmUgZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucwogICovCkBAIC0zMjMwLDYgKzMyMzEsOSBAQAogCQkJCSZjYXJkLT5xZGlvLm91dF9xc1tpXS0+cWRpb19idWZzW2pdOwogCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0uCiAJCQkJCSAgICBza2JfbGlzdCk7CisJCQlsb2NrZGVwX3NldF9jbGFzcygKKwkJCQkmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0uc2tiX2xpc3QubG9jaywKKwkJCQkmcWRpb19vdXRfc2tiX3F1ZXVlX2tleSk7CiAJCQlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0uY3R4X2xpc3QpOwogCQl9CiAJfQpAQCAtNTI3Myw2ICs1Mjc3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRtcF9saXN0OwogCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdG1wX2xpc3QpOworCWxvY2tkZXBfc2V0X2NsYXNzKCZ0bXBfbGlzdC5sb2NrLCAmcWRpb19vdXRfc2tiX3F1ZXVlX2tleSk7CiAJZm9yKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpOyArK2kpewogCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KSkpewogCQkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwppbmRleCBmOTllNTUzLi5mZmIzNjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYworKysgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwpAQCAtOCwxMiArOCwxMiBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAKQEAgLTU2LDggKzU2LDYgQEAKIAl1bnNpZ25lZCBpbnQgY2hhaW47CiAKIAlzZW0gPSAoc3RydWN0IHNlbWFwaG9yZSAqKXBhcmFtOwotCS8qIFNldCBhIG5pY2UgbmFtZS4gKi8KLQlkYWVtb25pemUoImttY2hlY2siKTsKIHJlcGVhdDoKIAlkb3duX2ludGVycnVwdGlibGUoc2VtKTsKIAlzbG93ID0gMDsKQEAgLTM4MCw2ICszNzgsOCBAQAogCXN0cnVjdCBtY2NrX3N0cnVjdCAqbWNjazsKIAlpbnQgdW1vZGU7CiAKKwlsb2NrZGVwX29mZigpOworCiAJbWNpID0gKHN0cnVjdCBtY2kgKikgJlMzOTBfbG93Y29yZS5tY2NrX2ludGVycnVwdGlvbl9jb2RlOwogCW1jY2sgPSAmX19nZXRfY3B1X3ZhcihjcHVfbWNjayk7CiAJdW1vZGUgPSB1c2VyX21vZGUocmVncyk7CkBAIC00ODQsNiArNDg0LDcgQEAKIAkJbWNjay0+d2FybmluZyA9IDE7CiAJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKIAl9CisJbG9ja2RlcF9vbigpOwogfQogCiAvKgpAQCAtNTE2LDcgKzUxNyw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogbWFjaGluZV9jaGVja19jcndfaW5pdCAodm9pZCkKIHsKLQlrZXJuZWxfdGhyZWFkKHMzOTBfY29sbGVjdF9jcndfaW5mbywgJm1fc2VtLCBDTE9ORV9GU3xDTE9ORV9GSUxFUyk7CisJa3RocmVhZF9ydW4oczM5MF9jb2xsZWN0X2Nyd19pbmZvLCAmbV9zZW0sICJrbWNoZWNrIik7CiAJY3RsX3NldF9iaXQoMTQsIDI4KTsJLyogZW5hYmxlIGNoYW5uZWwgcmVwb3J0IE1DSCAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggOTA5NzMxYi4uOGVjOGRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC0yMTY4LDkgKzIxNjgsOSBAQAogCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0hPU1RfQ09OX0lOSVQsCiAJCQkJICAmYWRhcHRlci0+c3RhdHVzKTsKIAkJWkZDUF9MT0dfREVCVUcoIkRvaW5nIGV4Y2hhbmdlIGNvbmZpZyBkYXRhXG4iKTsKLQkJd3JpdGVfbG9jaygmYWRhcHRlci0+ZXJwX2xvY2spOworCQl3cml0ZV9sb2NrX2lycSgmYWRhcHRlci0+ZXJwX2xvY2spOwogCQl6ZmNwX2VycF9hY3Rpb25fdG9fcnVubmluZyhlcnBfYWN0aW9uKTsKLQkJd3JpdGVfdW5sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7CisJCXdyaXRlX3VubG9ja19pcnEoJmFkYXB0ZXItPmVycF9sb2NrKTsKIAkJemZjcF9lcnBfdGltZW91dF9pbml0KGVycF9hY3Rpb24pOwogCQlpZiAoemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGEoZXJwX2FjdGlvbikpIHsKIAkJCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKQEAgLTIyMzYsOSArMjIzNiw5IEBACiAJYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSywgJmFkYXB0ZXItPnN0YXR1cyk7CiAKLQl3cml0ZV9sb2NrKCZhZGFwdGVyLT5lcnBfbG9jayk7CisJd3JpdGVfbG9ja19pcnEoJmFkYXB0ZXItPmVycF9sb2NrKTsKIAl6ZmNwX2VycF9hY3Rpb25fdG9fcnVubmluZyhlcnBfYWN0aW9uKTsKLQl3cml0ZV91bmxvY2soJmFkYXB0ZXItPmVycF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxKCZhZGFwdGVyLT5lcnBfbG9jayk7CiAKIAl6ZmNwX2VycF90aW1lb3V0X2luaXQoZXJwX2FjdGlvbik7CiAJcmV0ID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhKGVycF9hY3Rpb24sIGFkYXB0ZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAzNDVhMTkxLi40OWVhNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtNDI3LDYgKzQyNyw3IEBACiB6ZmNwX3FkaW9fcmVxaWRfY2hlY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdm9pZCAqc2JhbGVfYWRkcikKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBpbnZhbGlkIChwZXIgY29udmVudGlvbiB1c2VkIGluIHRoaXMgZHJpdmVyKSAqLwogCWlmICh1bmxpa2VseSghc2JhbGVfYWRkcikpIHsKQEAgLTQzOCwxNSArNDM5LDE1IEBACiAJZnNmX3JlcSA9IChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopIHNiYWxlX2FkZHI7CiAKIAkvKiBzZXJpYWxpemUgd2l0aCB6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwgKi8KLQlzcGluX2xvY2soJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAlpZiAobGlzdF9lbXB0eSgmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2hlYWQpKSB7Ci0JCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KIAlsaXN0X2RlbCgmZnNmX3JlcS0+bGlzdCk7CiAJYXRvbWljX2RlYygmYWRhcHRlci0+ZnNmX3JlcXNfYWN0aXZlKTsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2xvY2spOwotCQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisKIAlpZiAodW5saWtlbHkoYWRhcHRlciAhPSBmc2ZfcmVxLT5hZGFwdGVyKSkgewogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogaW52YWxpZCByZXFpZCAoZnNmX3JlcT0lcCwgIgogCQkJCSJmc2ZfcmVxLT5hZGFwdGVyPSVwLCBhZGFwdGVyPSVwKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMgYi9kcml2ZXJzL3MzOTAvc3lzaW5mby5jCmluZGV4IDY2ZGE4NDAuLmQxYzFlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMKKysrIGIvZHJpdmVycy9zMzkwL3N5c2luZm8uYwpAQCAtNSw3ICs1LDYgQEAKICAqICAgIEF1dGhvcihzKTogVWxyaWNoIFdlaWdhbmQgKFVscmljaC5XZWlnYW5kQGRlLmlibS5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvYXVyb3JhLmMgYi9kcml2ZXJzL3NidXMvY2hhci9hdXJvcmEuYwppbmRleCAwMTVkYjQwLi40ZmRiMmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9hdXJvcmEuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9hdXJvcmEuYwpAQCAtMzM3LDE5ICszMzcsMTkgQEAKIAkJCQlwcmludGsoImludHIgcHJpICVkXG4iLCBncnJyKTsKICNlbmRpZgogCQkJCWlmICgoYnAtPmlycT1pcnFzW2JuXSkgJiYgdmFsaWRfaXJxKGJwLT5pcnEpICYmCi0JCQkJICAgICFyZXF1ZXN0X2lycShicC0+aXJxfDB4MzAsIGF1cm9yYV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAic2lvMTYiLCBicCkpIHsKKwkJCQkgICAgIXJlcXVlc3RfaXJxKGJwLT5pcnF8MHgzMCwgYXVyb3JhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJzaW8xNiIsIGJwKSkgewogCQkJCQlmcmVlX2lycShicC0+aXJxfDB4MzAsIGJwKTsKIAkJCQl9IGVsc2UKIAkJCQlpZiAoKGJwLT5pcnE9cHJvbV9nZXRpbnQoc2Rldi0+cHJvbV9ub2RlLCAiYmludHIiKSkgJiYgdmFsaWRfaXJxKGJwLT5pcnEpICYmCi0JCQkJICAgICFyZXF1ZXN0X2lycShicC0+aXJxfDB4MzAsIGF1cm9yYV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAic2lvMTYiLCBicCkpIHsKKwkJCQkgICAgIXJlcXVlc3RfaXJxKGJwLT5pcnF8MHgzMCwgYXVyb3JhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJzaW8xNiIsIGJwKSkgewogCQkJCQlmcmVlX2lycShicC0+aXJxfDB4MzAsIGJwKTsKIAkJCQl9IGVsc2UKIAkJCQlpZiAoKGJwLT5pcnE9cHJvbV9nZXRpbnQoc2Rldi0+cHJvbV9ub2RlLCAiaW50ciIpKSAmJiB2YWxpZF9pcnEoYnAtPmlycSkgJiYKLQkJCQkgICAgIXJlcXVlc3RfaXJxKGJwLT5pcnF8MHgzMCwgYXVyb3JhX2ludGVycnVwdCwgU0FfU0hJUlEsICJzaW8xNiIsIGJwKSkgeworCQkJCSAgICAhcmVxdWVzdF9pcnEoYnAtPmlycXwweDMwLCBhdXJvcmFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgInNpbzE2IiwgYnApKSB7CiAJCQkJCWZyZWVfaXJxKGJwLT5pcnF8MHgzMCwgYnApOwogCQkJCX0gZWxzZQogCQkJCWZvcihncnJyPTA7Z3JycjxUWVBFXzFfSVJRUztncnJyKyspIHsKLQkJCQkJaWYgKChicC0+aXJxPXR5cGVfMV9pcnFbZ3Jycl0pJiYhcmVxdWVzdF9pcnEoYnAtPmlycXwweDMwLCBhdXJvcmFfaW50ZXJydXB0LCBTQV9TSElSUSwgInNpbzE2IiwgYnApKSB7CisJCQkJCWlmICgoYnAtPmlycT10eXBlXzFfaXJxW2dycnJdKSYmIXJlcXVlc3RfaXJxKGJwLT5pcnF8MHgzMCwgYXVyb3JhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJzaW8xNiIsIGJwKSkgewogCQkJCQkJZnJlZV9pcnEoYnAtPmlycXwweDMwLCBicCk7CiAJCQkJCQlicmVhazsKIAkJCQkJfSBlbHNlIHsKQEAgLTkwOSwxNCArOTA5LDE0IEBACiAjaWZkZWYgQVVST1JBX0FMTElSUQogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBBVVJPUkFfQUxMSVJROyBpKyspIHsKLQkJZXJyb3IgPSByZXF1ZXN0X2lycShhbGxpcnFbaV18MHgzMCwgYXVyb3JhX2ludGVycnVwdCwgU0FfU0hJUlEsCisJCWVycm9yID0gcmVxdWVzdF9pcnEoYWxsaXJxW2ldfDB4MzAsIGF1cm9yYV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSAgICAic2lvMTYiLCBicCk7CiAJCWlmIChlcnJvcikKIAkJCXByaW50ayhLRVJOX0VSUiAiSVJRJWQgcmVxdWVzdCBlcnJvciAlZFxuIiwKIAkJCSAgICAgICBhbGxpcnFbaV0sIGVycm9yKTsKIAl9CiAjZWxzZQotCWVycm9yID0gcmVxdWVzdF9pcnEoYnAtPmlycXwweDMwLCBhdXJvcmFfaW50ZXJydXB0LCBTQV9TSElSUSwKKwllcnJvciA9IHJlcXVlc3RfaXJxKGJwLT5pcnF8MHgzMCwgYXVyb3JhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgICAgInNpbzE2IiwgYnApOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIklSUSByZXF1ZXN0IGVycm9yICVkXG4iLCBlcnJvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMgYi9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMKaW5kZXggNzM2MzQzNy4uNzE4NjIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJYnAtPndhaXRpbmcgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJwLT53cSk7CiAJaWYgKHJlcXVlc3RfaXJxKGVkZXYtPmlycXNbMF0sIGJiY19pMmNfaW50ZXJydXB0LAotCQkJU0FfU0hJUlEsICJiYmNfaTJjIiwgYnApKQorCQkJSVJRRl9TSEFSRUQsICJiYmNfaTJjIiwgYnApKQogCQlnb3RvIGZhaWw7CiAKIAlicC0+aW5kZXggPSBpbmRleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JwcC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKaW5kZXggY2NiMjBhNi4uMzg1ZjRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMTAzMSwxMSArMTAzMCw2IEBACiAJCWluc3RhbmNlc1tpZHhdLm9wZW5lZCA9IDA7CiAJCXByb2JlTHB0UG9ydChpZHgpOwogCX0KLQlkZXZmc19ta19kaXIoImJwcCIpOwotCWZvciAoaWR4ID0gMDsgaWR4IDwgQlBQX05POyBpZHgrKykgewotCQlkZXZmc19ta19jZGV2KE1LREVWKEJQUF9NQUpPUiwgaWR4KSwKLQkJCQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IsICJicHAvJWQiLCBpZHgpOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTA0NCw5ICsxMDM4LDYgQEAKIHsKIAl1bnNpZ25lZCBpZHg7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEJQUF9OTzsgaWR4KyspCi0JCWRldmZzX3JlbW92ZSgiYnBwLyVkIiwgaWR4KTsKLQlkZXZmc19yZW1vdmUoImJwcCIpOwogCXVucmVnaXN0ZXJfY2hyZGV2KEJQUF9NQUpPUiwgZGV2X25hbWUpOwogCiAJZm9yIChpZHggPSAwOyAgaWR4IDwgQlBQX05POyBpZHgrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvY3B3YXRjaGRvZy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvY3B3YXRjaGRvZy5jCmluZGV4IDIxNzM3YjcuLjgzNmE1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2Nwd2F0Y2hkb2cuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9jcHdhdGNoZG9nLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogCXsJCiAJCWlmIChyZXF1ZXN0X2lycSh3ZF9kZXYuaXJxLCAKIAkJCQkJCSZ3ZF9pbnRlcnJ1cHQsIAotCQkJCQkJU0FfU0hJUlEsCisJCQkJCQlJUlFGX1NIQVJFRCwKIAkJCQkJCVdEX09CUE5BTUUsCiAJCQkJCQkodm9pZCAqKXdkX2Rldi5yZWdzKSkgewogCQkJcHJpbnRrKCIlczogQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9lbnZjdHJsLmMgYi9kcml2ZXJzL3NidXMvY2hhci9lbnZjdHJsLmMKaW5kZXggY2Y5N2U5ZS4uMDYzZTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvZW52Y3RybC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2VudmN0cmwuYwpAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCiBzdGF0aWMgaW50IGVycm5vOwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9mbGFzaC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvZmxhc2guYwppbmRleCAzMWI4YTVmLi5mYTI0MThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9mbGFzaC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2ZsYXNoLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgIEVkZGllIEMuIERvc3QgIChlY2RAc2t5bmV0LmJlKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCBkN2U0YmI0Li4yOTNiYjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL3ZmYy5oIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjLmgKaW5kZXggODA0NWNkNS4uNjM5NDFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjLmgKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9WRkNfSF8KICNkZWZpbmUgX0xJTlVYX1ZGQ19IXwogCi0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+Ci0KIC8qCiAgKiBUaGUgY29udHJvbCByZWdpc3RlciBmb3IgdGhlIHZmYyBpcyBhdCBvZmZzZXQgMHg0MDAwCiAgKiBUaGUgZmlyc3QgZmllbGQgcmFtIGJhbmsgaXMgbG9jYXRlZCBhdCBvZmZzZXQgMHg1MDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMKaW5kZXggZGRjZDMzMC4uNTViMmIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19kZXYuYwpAQCAtMTY0LDEwICsxNjQsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoaW5pdF92ZmNfaHcoZGV2KSkKIAkJcmV0dXJuIC1FSU87Ci0KLQlkZXZmc19ta19jZGV2KE1LREVWKFZGQ19NQUpPUiwgaW5zdGFuY2UpLAotCQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJInZmYy8lZCIsIGluc3RhbmNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjc3LDcgKzY3Myw2IEBACiAJCWtmcmVlKHZmY19kZXZfbHN0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWRldmZzX21rX2RpcigidmZjIik7CiAJaW5zdGFuY2UgPSAwOwogCWZvcl9hbGxfc2J1c2RldihzZGV2LCBzYnVzKSB7CiAJCWlmIChzdHJjbXAoc2Rldi0+cHJvbV9uYW1lLCAidmZjIikgPT0gMCkgewpAQCAtNzE3LDcgKzcxMiw2IEBACiB7CiAJaWYoZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQlkZXZmc19yZW1vdmUoInZmYy8lZCIsIGRldi0+aW5zdGFuY2UpOwogCXNidXNfaW91bm1hcChkZXYtPnJlZ3MsIHNpemVvZihzdHJ1Y3QgdmZjX3JlZ3MpKTsKIAlrZnJlZShkZXYpOwogfQpAQCAtNzMxLDcgKzcyNSw2IEBACiAJZm9yIChkZXZwID0gdmZjX2Rldl9sc3Q7ICpkZXZwOyBkZXZwKyspCiAJCWRlaW5pdF92ZmNfZGV2aWNlKCpkZXZwKTsKIAotCWRldmZzX3JlbW92ZSgidmZjIik7CiAJa2ZyZWUodmZjX2Rldl9sc3QpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9kdm1hLmMgYi9kcml2ZXJzL3NidXMvZHZtYS5jCmluZGV4IDM3OGExZDYuLjU3ZTE1MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9kdm1hLmMKKysrIGIvZHJpdmVycy9zYnVzL2R2bWEuYwpAQCAtMyw3ICszLDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9zYnVzLmMgYi9kcml2ZXJzL3NidXMvc2J1cy5jCmluZGV4IDM4N2E2YWEuLjE2YjU5NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvc2J1cy5jCisrKyBiL2RyaXZlcnMvc2J1cy9zYnVzLmMKQEAgLTUsNyArNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwppbmRleCBiMDAzYmFmLi41YTk0NzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKQEAgLTIxMjIsNyArMjEyMiw3IEBACiAJCQkJICAgICBUV19QQVJBTV9QT1JUQ09VTlQsIFRXX1BBUkFNX1BPUlRDT1VOVF9MRU5HVEgpKSk7CiAKIAkvKiBOb3cgc2V0dXAgdGhlIGludGVycnVwdCBoYW5kbGVyICovCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCB0d2FfaW50ZXJydXB0LCBTQV9TSElSUSwgIjN3LTl4eHgiLCB0d19kZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdHdhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICIzdy05eHh4IiwgdHdfZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHgzMCwgIkVycm9yIHJlcXVlc3RpbmcgSVJRIik7CiAJCWdvdG8gb3V0X3JlbW92ZV9ob3N0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKaW5kZXggMTdkYmQ0YS4uZjNhNWY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCkBAIC0yMzk3LDcgKzIzOTcsNyBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IHNjc2klZDogRm91bmQgYSAzd2FyZSBTdG9yYWdlIENvbnRyb2xsZXIgYXQgMHgleCwgSVJROiAlZC5cbiIsIGhvc3QtPmhvc3Rfbm8sIHR3X2Rldi0+YmFzZV9hZGRyLCBwZGV2LT5pcnEpOwogCiAJLyogTm93IHNldHVwIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdHdfaW50ZXJydXB0LCBTQV9TSElSUSwgIjN3LXh4eHgiLCB0d19kZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdHdfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIjN3LXh4eHgiLCB0d19kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogRXJyb3IgcmVxdWVzdGluZyBJUlEuIik7CiAJCWdvdG8gb3V0X3JlbW92ZV9ob3N0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzcwMC5jIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5jCmluZGV4IDNjNjgzZGMuLjY1N2EzYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3MDAuYworKysgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogICogKi8KICNkZWZpbmUgTkNSXzcwMF9WRVJTSU9OICIyLjgiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMTc0LDYgKzE3Myw3IEBACiBTVEFUSUMgaW50IE5DUl83MDBfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQpOwogU1RBVElDIHZvaWQgTkNSXzcwMF9jaGlwX3NldHVwKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogU1RBVElDIHZvaWQgTkNSXzcwMF9jaGlwX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOworU1RBVElDIGludCBOQ1JfNzAwX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQpOwogU1RBVElDIGludCBOQ1JfNzAwX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50KTsKIFNUQVRJQyB2b2lkIE5DUl83MDBfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcG50KTsKIHN0YXRpYyBpbnQgTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHBudCwgaW50IGRlcHRoKTsKQEAgLTE4MywxMCArMTgzLDYgQEAKIAogU1RBVElDIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqTkNSXzcwMF90cmFuc3BvcnRfdGVtcGxhdGUgPSBOVUxMOwogCi1zdHJ1Y3QgTkNSXzcwMF9zZW5zZSB7Ci0JdW5zaWduZWQgY2hhciBjbW5kW01BWF9DT01NQU5EX1NJWkVdOwotfTsKLQogc3RhdGljIGNoYXIgKk5DUl83MDBfcGhhc2VbXSA9IHsKIAkiIiwKIAkiYWZ0ZXIgc2VsZWN0aW9uIiwKQEAgLTMzNCw2ICszMzAsNyBAQAogCXRwbnQtPnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkc7CiAJdHBudC0+c2xhdmVfY29uZmlndXJlID0gTkNSXzcwMF9zbGF2ZV9jb25maWd1cmU7CiAJdHBudC0+c2xhdmVfZGVzdHJveSA9IE5DUl83MDBfc2xhdmVfZGVzdHJveTsKKwl0cG50LT5zbGF2ZV9hbGxvYyA9IE5DUl83MDBfc2xhdmVfYWxsb2M7CiAJdHBudC0+Y2hhbmdlX3F1ZXVlX2RlcHRoID0gTkNSXzcwMF9jaGFuZ2VfcXVldWVfZGVwdGg7CiAJdHBudC0+Y2hhbmdlX3F1ZXVlX3R5cGUgPSBOQ1JfNzAwX2NoYW5nZV9xdWV1ZV90eXBlOwogCkBAIC02MTIsOSArNjA5LDEwIEBACiAJCXN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqc2xvdCA9IAogCQkJKHN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqKVNDcC0+aG9zdF9zY3JpYmJsZTsKIAkJCi0JCU5DUl83MDBfdW5tYXAoaG9zdGRhdGEsIFNDcCwgc2xvdCk7CisJCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgc2xvdC0+cENtZCwKKwkJCQkgc2l6ZW9mKFNDcC0+Y21uZCksIERNQV9UT19ERVZJQ0UpOwogCQlpZiAoc2xvdC0+ZmxhZ3MgPT0gTkNSXzcwMF9GTEFHX0FVVE9TRU5TRSkgewotCQkJc3RydWN0IE5DUl83MDBfc2Vuc2UgKnNlbnNlID0gU0NwLT5kZXZpY2UtPmhvc3RkYXRhOworCQkJY2hhciAqY21uZCA9IE5DUl83MDBfZ2V0X3NlbnNlX2NtbmQoU0NwLT5kZXZpY2UpOwogI2lmZGVmIE5DUl83MDBfREVCVUcKIAkJCXByaW50aygiIE9SSUdJTkFMIENNRCAlcCBSRVRVUk5FRCAlZCwgbmV3IHJldHVybiBpcyAlZCBzZW5zZSBpc1xuIiwKIAkJCSAgICAgICBTQ3AsIFNDcC0+Y21uZFs3XSwgcmVzdWx0KTsKQEAgLTYyNSwxMCArNjIzLDkgQEAKIAkJCS8qIHJlc3RvcmUgdGhlIG9sZCByZXN1bHQgaWYgdGhlIHJlcXVlc3Qgc2Vuc2Ugd2FzCiAJCQkgKiBzdWNjZXNzZnVsICovCiAJCQlpZihyZXN1bHQgPT0gMCkKLQkJCQlyZXN1bHQgPSBzZW5zZS0+Y21uZFs3XTsKKwkJCQlyZXN1bHQgPSBjbW5kWzddOwogCQl9IGVsc2UKLQkJCWRtYV91bm1hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgc2xvdC0+cENtZCwKLQkJCQkJIHNpemVvZihTQ3AtPmNtbmQpLCBETUFfVE9fREVWSUNFKTsKKwkJCU5DUl83MDBfdW5tYXAoaG9zdGRhdGEsIFNDcCwgc2xvdCk7CiAKIAkJZnJlZV9zbG90KHNsb3QsIGhvc3RkYXRhKTsKICNpZmRlZiBOQ1JfNzAwX0RFQlVHCkBAIC05NzAsMTQgKzk2NywxNSBAQAogCQkgICBzdGF0dXNfYnl0ZShob3N0ZGF0YS0+c3RhdHVzWzBdKSA9PSBDT01NQU5EX1RFUk1JTkFURUQpIHsKIAkJCXN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqc2xvdCA9CiAJCQkJKHN0cnVjdCBOQ1JfNzAwX2NvbW1hbmRfc2xvdCAqKVNDcC0+aG9zdF9zY3JpYmJsZTsKLQkJCWlmKFNDcC0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJCQlpZihzbG90LT5mbGFncyA9PSBOQ1JfNzAwX0ZMQUdfQVVUT1NFTlNFKSB7CiAJCQkJLyogT09QUzogYmFkIGRldmljZSwgcmV0dXJuaW5nIGFub3RoZXIKIAkJCQkgKiBjb250aW5nZW50IGFsbGVnaWFuY2UgY29uZGl0aW9uICovCiAJCQkJc2NtZF9wcmludGsoS0VSTl9FUlIsIFNDcCwKIAkJCQkJImJyb2tlbiBkZXZpY2UgaXMgbG9vcGluZyBpbiBjb250aW5nZW50IGFsbGVnaWFuY2U6IGlnbm9yaW5nXG4iKTsKIAkJCQlOQ1JfNzAwX3Njc2lfZG9uZShob3N0ZGF0YSwgU0NwLCBob3N0ZGF0YS0+c3RhdHVzWzBdKTsKIAkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IE5DUl83MDBfc2Vuc2UgKnNlbnNlID0gU0NwLT5kZXZpY2UtPmhvc3RkYXRhOworCQkJCWNoYXIgKmNtbmQgPQorCQkJCQlOQ1JfNzAwX2dldF9zZW5zZV9jbW5kKFNDcC0+ZGV2aWNlKTsKICNpZmRlZiBOQ1JfREVCVUcKIAkJCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwKTsKIAkJCQlwcmludGsoIiAgY21kICVwIGhhcyBzdGF0dXMgJWQsIHJlcXVlc3Rpbmcgc2Vuc2VcbiIsCkBAIC05OTUsMjEgKzk5MywyMSBAQAogCQkJCQkJIHNpemVvZihTQ3AtPmNtbmQpLAogCQkJCQkJIERNQV9UT19ERVZJQ0UpOwogCi0JCQkJc2Vuc2UtPmNtbmRbMF0gPSBSRVFVRVNUX1NFTlNFOwotCQkJCXNlbnNlLT5jbW5kWzFdID0gKFNDcC0+ZGV2aWNlLT5sdW4gJiAweDcpIDw8IDU7Ci0JCQkJc2Vuc2UtPmNtbmRbMl0gPSAwOwotCQkJCXNlbnNlLT5jbW5kWzNdID0gMDsKLQkJCQlzZW5zZS0+Y21uZFs0XSA9IHNpemVvZihTQ3AtPnNlbnNlX2J1ZmZlcik7Ci0JCQkJc2Vuc2UtPmNtbmRbNV0gPSAwOworCQkJCWNtbmRbMF0gPSBSRVFVRVNUX1NFTlNFOworCQkJCWNtbmRbMV0gPSAoU0NwLT5kZXZpY2UtPmx1biAmIDB4NykgPDwgNTsKKwkJCQljbW5kWzJdID0gMDsKKwkJCQljbW5kWzNdID0gMDsKKwkJCQljbW5kWzRdID0gc2l6ZW9mKFNDcC0+c2Vuc2VfYnVmZmVyKTsKKwkJCQljbW5kWzVdID0gMDsKIAkJCQkvKiBIZXJlJ3MgYSBxdWlldCBoYWNrOiB0aGUKIAkJCQkgKiBSRVFVRVNUX1NFTlNFIGNvbW1hbmQgaXMgc2l4IGJ5dGVzLAogCQkJCSAqIHNvIHN0b3JlIGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQKIAkJCQkgKiB0aGlzIHdhcyBhbiBpbnRlcm5hbCBzZW5zZSByZXF1ZXN0CiAJCQkJICogYW5kIHRoZSBvcmlnaW5hbCBzdGF0dXMgYXQgdGhlIGVuZAogCQkJCSAqIG9mIHRoZSBjb21tYW5kICovCi0JCQkJc2Vuc2UtPmNtbmRbNl0gPSBOQ1JfNzAwX0lOVEVSTkFMX1NFTlNFX01BR0lDOwotCQkJCXNlbnNlLT5jbW5kWzddID0gaG9zdGRhdGEtPnN0YXR1c1swXTsKLQkJCQlzbG90LT5wQ21kID0gZG1hX21hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgc2Vuc2UtPmNtbmQsIHNpemVvZihzZW5zZS0+Y21uZCksIERNQV9UT19ERVZJQ0UpOworCQkJCWNtbmRbNl0gPSBOQ1JfNzAwX0lOVEVSTkFMX1NFTlNFX01BR0lDOworCQkJCWNtbmRbN10gPSBob3N0ZGF0YS0+c3RhdHVzWzBdOworCQkJCXNsb3QtPnBDbWQgPSBkbWFfbWFwX3NpbmdsZShob3N0ZGF0YS0+ZGV2LCBjbW5kLCBNQVhfQ09NTUFORF9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAkJCQlzbG90LT5kbWFfaGFuZGxlID0gZG1hX21hcF9zaW5nbGUoaG9zdGRhdGEtPmRldiwgU0NwLT5zZW5zZV9idWZmZXIsIHNpemVvZihTQ3AtPnNlbnNlX2J1ZmZlciksIERNQV9GUk9NX0RFVklDRSk7CiAJCQkJc2xvdC0+U0dbMF0uaW5zID0gYlNfdG9faG9zdChTQ1JJUFRfTU9WRV9EQVRBX0lOIHwgc2l6ZW9mKFNDcC0+c2Vuc2VfYnVmZmVyKSk7CiAJCQkJc2xvdC0+U0dbMF0ucEFkZHIgPSBiU190b19ob3N0KHNsb3QtPmRtYV9oYW5kbGUpOwpAQCAtMTUzMSw3ICsxNTI5LDcgQEAKIAogCQkJLyogY2xlYXIgYWxsIHRoZSBuZWdvdGlhdGVkIHBhcmFtZXRlcnMgKi8KIAkJCV9fc2hvc3RfZm9yX2VhY2hfZGV2aWNlKFNEcCwgaG9zdCkKLQkJCQlTRHAtPmhvc3RkYXRhID0gTlVMTDsKKwkJCQlOQ1JfNzAwX2NsZWFyX2ZsYWcoU0RwLCB+MCk7CiAJCQkKIAkJCS8qIGNsZWFyIGFsbCB0aGUgc2xvdHMgYW5kIHRoZWlyIHBlbmRpbmcgY29tbWFuZHMgKi8KIAkJCWZvcihpID0gMDsgaSA8IE5DUl83MDBfQ09NTUFORF9TTE9UU19QRVJfSE9TVDsgaSsrKSB7CkBAIC0yMDM2LDcgKzIwMzQsMTcgQEAKIAlzcGlfZmxhZ3MoU1RwKSB8PSBOQ1JfNzAwX0RFVl9QUklOVF9TWU5DX05FR09USUFUSU9OOwogfQogCitTVEFUSUMgaW50CitOQ1JfNzAwX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwKQoreworCVNEcC0+aG9zdGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgTkNSXzcwMF9EZXZpY2VfUGFyYW1ldGVycyksCisJCQkJR0ZQX0tFUk5FTCk7CiAKKwlpZiAoIVNEcC0+aG9zdGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CiAKIFNUQVRJQyBpbnQKIE5DUl83MDBfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwKQpAQCAtMjA0NCwxMSArMjA1Miw2IEBACiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IAogCQkoc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICopU0RwLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAotCVNEcC0+aG9zdGRhdGEgPSBrbWFsbG9jKEdGUF9LRVJORUwsIHNpemVvZihzdHJ1Y3QgTkNSXzcwMF9zZW5zZSkpOwotCi0JaWYgKCFTRHAtPmhvc3RkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCS8qIHRvIGRvIGhlcmU6IGFsbG9jYXRlIG1lbW9yeTsgYnVpbGQgYSBxdWV1ZV9mdWxsIGxpc3QgKi8KIAlpZihTRHAtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKIAkJc2NzaV9zZXRfdGFnX3R5cGUoU0RwLCBNU0dfT1JERVJFRF9UQUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzcwMC5oIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5oCmluZGV4IDdmMjJhMDYuLjk3ZWJlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3MDAuaAorKysgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLQorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKIC8qIFR1cm4gb24gZm9yIGdlbmVyYWwgZGVidWdnaW5nLS0tdG9vIHZlcmJvc2UgZm9yIG5vcm1hbCB1c2UgKi8KICN1bmRlZglOQ1JfNzAwX0RFQlVHCkBAIC03NiwxMSArNzYsMTYgQEAKIAkjZGVmaW5lCVNDUklQVF9SRVRVUk4JCQkweDkwMDgwMDAwCiB9OwogCi0vKiBXZSB1c2UgZGV2aWNlLT5ob3N0ZGF0YSB0byBzdG9yZSBuZWdvdGlhdGVkIHBhcmFtZXRlcnMuICBUaGlzIGlzCi0gKiBzdXBwb3NlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBhcmVhLCBidXQgd2UgY2Fubm90Ci0gKiByZWFsbHkgdXNlIGl0IGFzIHN1Y2ggc2luY2UgaXQgd2lsbCBuZXZlciBiZSBmcmVlZCwgc28ganVzdCB1c2UgdGhlCi0gKiAzMiBiaXRzIHRvIGNyYW0gdGhlIGluZm9ybWF0aW9uLiAgVGhlIFNZTkMgbmVnb3RpYXRpb24gc2VxdWVuY2UgbG9va3MKLSAqIGxpa2U6CitzdHJ1Y3QgTkNSXzcwMF9EZXZpY2VfUGFyYW1ldGVycyB7CisJLyogc3BhY2UgZm9yIGNyZWF0aW5nIGEgcmVxdWVzdCBzZW5zZSBjb21tYW5kLiBSZWFsbHksIGV4Y2VwdAorCSAqIGZvciB0aGUgYW5ub3lpbmcgU0NTSS0yIHJlcXVpcmVtZW50IGZvciBMVU4gaW5mb3JtYXRpb24gaW4KKwkgKiBjbW5kWzFdLCB0aGlzIGNvdWxkIGJlIGluIHN0YXRpYyBzdG9yYWdlICovCisJdW5zaWduZWQgY2hhciBjbW5kW01BWF9DT01NQU5EX1NJWkVdOworCV9fdTgJZGVwdGg7Cit9OworCisKKy8qIFRoZSBTWU5DIG5lZ290aWF0aW9uIHNlcXVlbmNlIGxvb2tzIGxpa2U6CiAgKiAKICAqIElmIERFVl9ORUdPVElBVEVEX1NZTkMgbm90IHNldCwgdGFjayBhbmQgU0RUUiBtZXNzYWdlIG9uIHRvIHRoZQogICogaW5pdGlhbCBpZGVudGlmeSBmb3IgdGhlIGRldmljZSBhbmQgc2V0IERFVl9CRUdJTl9TWU5DX05FR09UQVRJT04KQEAgLTk4LDE5ICsxMDMsMjYgQEAKICNkZWZpbmUgTkNSXzcwMF9ERVZfQkVHSU5fU1lOQ19ORUdPVElBVElPTgkoMTw8MTcpCiAjZGVmaW5lIE5DUl83MDBfREVWX1BSSU5UX1NZTkNfTkVHT1RJQVRJT04gKDE8PDE5KQogCitzdGF0aWMgaW5saW5lIGNoYXIgKk5DUl83MDBfZ2V0X3NlbnNlX2NtbmQoc3RydWN0IHNjc2lfZGV2aWNlICpTRHApCit7CisJc3RydWN0IE5DUl83MDBfRGV2aWNlX1BhcmFtZXRlcnMgKmhvc3RkYXRhID0gU0RwLT5ob3N0ZGF0YTsKKworCXJldHVybiBob3N0ZGF0YS0+Y21uZDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBOQ1JfNzAwX3NldF9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcCwgX191OCBkZXB0aCkKIHsKLQlsb25nIGwgPSAobG9uZylTRHAtPmhvc3RkYXRhOworCXN0cnVjdCBOQ1JfNzAwX0RldmljZV9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IFNEcC0+aG9zdGRhdGE7CiAKLQlsICY9IDB4ZmZmZjAwZmY7Ci0JbCB8PSAweGZmMDAgJiAoZGVwdGggPDwgOCk7Ci0JU0RwLT5ob3N0ZGF0YSA9ICh2b2lkICopbDsKKwlob3N0ZGF0YS0+ZGVwdGggPSBkZXB0aDsKIH0KIHN0YXRpYyBpbmxpbmUgX191OAogTkNSXzcwMF9nZXRfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpTRHApCiB7Ci0JcmV0dXJuICgoKCh1bnNpZ25lZCBsb25nKVNEcC0+aG9zdGRhdGEpICYgMHhmZjAwKT4+OCk7CisJc3RydWN0IE5DUl83MDBfRGV2aWNlX1BhcmFtZXRlcnMgKmhvc3RkYXRhID0gU0RwLT5ob3N0ZGF0YTsKKworCXJldHVybiBob3N0ZGF0YS0+ZGVwdGg7CiB9CiBzdGF0aWMgaW5saW5lIGludAogTkNSXzcwMF9pc19mbGFnX3NldChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcCwgX191MzIgZmxhZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS81M2M3eHguYyBiL2RyaXZlcnMvc2NzaS81M2M3eHguYwppbmRleCA3NjU3NjlhLi5jNjkwYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvNTNjN3h4LmMKKysrIGIvZHJpdmVycy9zY3NpLzUzYzd4eC5jCkBAIC0yMzIsNyArMjMyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMTA3MSw3ICsxMDcwLDcgQEAKIAogICAgIE5DUjUzYzd4MF9kcml2ZXJfaW5pdCAoaG9zdCk7CiAKLSAgICBpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBOQ1I1M2M3eDBfaW50ciwgU0FfU0hJUlEsICI1M2M3eHgiLCBob3N0KSkKKyAgICBpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBOQ1I1M2M3eDBfaW50ciwgSVJRRl9TSEFSRUQsICI1M2M3eHgiLCBob3N0KSkKICAgICB7CiAJcHJpbnRrKCJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgZGV0YWNoaW5nXG4iLAogCQlob3N0LT5ob3N0X25vLCBob3N0LT5pcnEpOwpAQCAtNDIzMyw3ICs0MjMyLDcgQEAKICAqIFB1cnBvc2UgOiBoYW5kbGUgTkNSNTNjN3gwIGludGVycnVwdHMgZm9yIGFsbCBOQ1IgZGV2aWNlcyBzaGFyaW5nCiAgKgl0aGUgc2FtZSBJUlEgbGluZS4gIAogICogCi0gKiBJbnB1dHMgOiBTaW5jZSB3ZSdyZSB1c2luZyB0aGUgU0FfSU5URVJSVVBUIGludGVycnVwdCBoYW5kbGVyCisgKiBJbnB1dHMgOiBTaW5jZSB3ZSdyZSB1c2luZyB0aGUgSVJRRl9ESVNBQkxFRCBpbnRlcnJ1cHQgaGFuZGxlcgogICoJc2VtYW50aWNzLCBpcnEgaW5kaWNhdGVzIHRoZSBpbnRlcnJ1cHQgd2hpY2ggaW52b2tlZCAKICAqCXRoaXMgaGFuZGxlci4gIAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9CdXNMb2dpYy5jIGIvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMKaW5kZXggYmRlM2Q1OC4uMTZhMTJhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMKKysrIGIvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNkZWZpbmUgQnVzTG9naWNfRHJpdmVyVmVyc2lvbgkJIjIuMS4xNiIKICNkZWZpbmUgQnVzTG9naWNfRHJpdmVyRGF0ZQkJIjE4IEp1bHkgMjAwMiIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTE4NDUsNyArMTg0NCw3IEBACiAJLyoKIAkgICBBY3F1aXJlIHNoYXJlZCBhY2Nlc3MgdG8gdGhlIElSUSBDaGFubmVsLgogCSAqLwotCWlmIChyZXF1ZXN0X2lycShIb3N0QWRhcHRlci0+SVJRX0NoYW5uZWwsIEJ1c0xvZ2ljX0ludGVycnVwdEhhbmRsZXIsIFNBX1NISVJRLCBIb3N0QWRhcHRlci0+RnVsbE1vZGVsTmFtZSwgSG9zdEFkYXB0ZXIpIDwgMCkgeworCWlmIChyZXF1ZXN0X2lycShIb3N0QWRhcHRlci0+SVJRX0NoYW5uZWwsIEJ1c0xvZ2ljX0ludGVycnVwdEhhbmRsZXIsIElSUUZfU0hBUkVELCBIb3N0QWRhcHRlci0+RnVsbE1vZGVsTmFtZSwgSG9zdEFkYXB0ZXIpIDwgMCkgewogCQlCdXNMb2dpY19FcnJvcigiVU5BQkxFIFRPIEFDUVVJUkUgSVJRIENIQU5ORUwgJWQgLSBERVRBQ0hJTkdcbiIsIEhvc3RBZGFwdGVyLCBIb3N0QWRhcHRlci0+SVJRX0NoYW5uZWwpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmggYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaAppbmRleCAxYWFhNjU2Li45NzkyZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaAorKysgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmbmRlZiBfQlVTTE9HSUNfSAogI2RlZmluZSBfQlVTTE9HSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgUEFDS0VECiAjZGVmaW5lIFBBQ0tFRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKaW5kZXggOGUzZDk0OS4uN2MwMDY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYworKysgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCkBAIC0xNSw3ICsxNSw2IEBACiAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKaW5kZXggNzVmMmY3YS4uNjE2ODEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCkBAIC01ODUsNyArNTg1LDcgQEAKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAogCWZvciAodHJ5aW5nX2lycXMgPSBpID0gMCwgbWFzayA9IDE7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQotCQlpZiAoKG1hc2sgJiBwb3NzaWJsZSkgJiYgKHJlcXVlc3RfaXJxKGksICZwcm9iZV9pbnRyLCBTQV9JTlRFUlJVUFQsICJOQ1ItcHJvYmUiLCBOVUxMKSA9PSAwKSkKKwkJaWYgKChtYXNrICYgcG9zc2libGUpICYmIChyZXF1ZXN0X2lycShpLCAmcHJvYmVfaW50ciwgSVJRRl9ESVNBQkxFRCwgIk5DUi1wcm9iZSIsIE5VTEwpID09IDApKQogCQkJdHJ5aW5nX2lycXMgfD0gbWFzazsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgKDI1MCAqIEhaIC8gMTAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTNDOXguYyBiL2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5jCmluZGV4IGM3ZGQwMTUuLjhhNDY1OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5jCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5oIGIvZHJpdmVycy9zY3NpL05DUjUzQzl4LmgKaW5kZXggNjVhOWIzNy4uNDgxNjUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUjUzQzl4LmgKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzQzl4LmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgTkNSNTNDOVhfSAogI2RlZmluZSBOQ1I1M0M5WF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyogZGp3ZWlzIGZvciBtYWMgZHJpdmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSX0Q3MDAuYyBiL2RyaXZlcnMvc2NzaS9OQ1JfRDcwMC5jCmluZGV4IDU3N2U2MzQuLmEwNmY1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1JfRDcwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1JfRDcwMC5jCkBAIC0zMjAsNyArMzIwLDcgQEAKIAltZW1zZXQocCwgJ1wwJywgc2l6ZW9mKCpwKSk7CiAJcC0+ZGV2ID0gZGV2OwogCXNucHJpbnRmKHAtPm5hbWUsIHNpemVvZihwLT5uYW1lKSwgIkQ3MDAoJXMpIiwgZGV2LT5idXNfaWQpOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIE5DUl9ENzAwX2ludHIsIFNBX1NISVJRLCBwLT5uYW1lLCBwKSkgeworCWlmIChyZXF1ZXN0X2lycShpcnEsIE5DUl9ENzAwX2ludHIsIElSUUZfU0hBUkVELCBwLT5uYW1lLCBwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkQ3MDA6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCWtmcmVlKHApOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL05DUl9RNzIwLmMgYi9kcml2ZXJzL3Njc2kvTkNSX1E3MjAuYwppbmRleCA5ZDE4ZWM5Li5jMzlmZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSX1E3MjAuYworKysgYi9kcml2ZXJzL3Njc2kvTkNSX1E3MjAuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJcC0+aXJxID0gaXJxOwogCXAtPnNpb3BzID0gc2lvcHM7CiAKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBOQ1JfUTcyMF9pbnRyLCBTQV9TSElSUSwgIk5DUl9RNzIwIiwgcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBOQ1JfUTcyMF9pbnRyLCBJUlFGX1NIQVJFRCwgIk5DUl9RNzIwIiwgcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJOQ1JfUTcyMDogcmVxdWVzdCBpcnEgJWQgZmFpbGVkXG4iLCBpcnEpOwogCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMgYi9kcml2ZXJzL3Njc2kvYTEwMHUydy5jCmluZGV4IDNkY2UyMWMuLmQ3ZTlmYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMKKysrIGIvZHJpdmVycy9zY3NpL2ExMDB1MncuYwpAQCAtMTEyMCw3ICsxMTIwLDcgQEAKIAlzaG9zdC0+c2dfdGFibGVzaXplID0gVE9UQUxfU0dfRU5UUlk7CiAKIAkvKiBJbml0aWFsIG9yYyBjaGlwICAgICAgICAgICAqLwotCWVycm9yID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpbmlhMTAwX2ludHIsIFNBX1NISVJRLAorCWVycm9yID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpbmlhMTAwX2ludHIsIElSUUZfU0hBUkVELAogCQkJImluaWExMDAiLCBzaG9zdCk7CiAJaWYgKGVycm9yIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpbmlhMTAwOiB1bmFibGUgdG8gZ2V0IGlycSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hMjA5MS5jIGIvZHJpdmVycy9zY3NpL2EyMDkxLmMKaW5kZXggNTQ5OTZlYS4uZmRkZmEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2EyMDkxLmMKKysrIGIvZHJpdmVycy9zY3NpL2EyMDkxLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCXJlZ3MuU0FTUiA9ICYoRE1BKGluc3RhbmNlKS0+U0FTUik7CiAJcmVncy5TQ01EID0gJihETUEoaW5zdGFuY2UpLT5TQ01EKTsKIAl3ZDMzYzkzX2luaXQoaW5zdGFuY2UsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsIFdEMzNDOTNfRlNfOF8xMCk7Ci0JcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBhMjA5MV9pbnRyLCBTQV9TSElSUSwgIkEyMDkxIFNDU0kiLAorCXJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgYTIwOTFfaW50ciwgSVJRRl9TSEFSRUQsICJBMjA5MSBTQ1NJIiwKIAkJICAgIGluc3RhbmNlKTsKIAlETUEoaW5zdGFuY2UpLT5DTlRSID0gQ05UUl9QRE1EIHwgQ05UUl9JTlRFTjsKIAludW1fYTIwOTErKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hMzAwMC5jIGIvZHJpdmVycy9zY3NpL2EzMDAwLmMKaW5kZXggZjQyNWQ0Mi4uYWU5YWI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2EzMDAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2EzMDAwLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgIHJlZ3MuU0FTUiA9ICYoRE1BKGEzMDAwX2hvc3QpLT5TQVNSKTsKICAgICByZWdzLlNDTUQgPSAmKERNQShhMzAwMF9ob3N0KS0+U0NNRCk7CiAgICAgd2QzM2M5M19pbml0KGEzMDAwX2hvc3QsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsIFdEMzNDOTNfRlNfMTJfMTUpOwotICAgIGlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGEzMDAwX2ludHIsIFNBX1NISVJRLCAiQTMwMDAgU0NTSSIsCisgICAgaWYgKHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgYTMwMDBfaW50ciwgSVJRRl9TSEFSRUQsICJBMzAwMCBTQ1NJIiwKIAkJICAgIGEzMDAwX2ludHIpKQogICAgICAgICBnb3RvIGZhaWxfaXJxOwogICAgIERNQShhMzAwMF9ob3N0KS0+Q05UUiA9IENOVFJfUERNRCB8IENOVFJfSU5URU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYwppbmRleCA3Y2VhNTE0Li4xY2QzNTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1pbml0LmMKQEAgLTkyLDMxICs5Miw3IEBACiAJaW5pdC0+QWRhcHRlckZpYnNQaHlzaWNhbEFkZHJlc3MgPSBjcHVfdG9fbGUzMigodTMyKXBoeXMpOwogCWluaXQtPkFkYXB0ZXJGaWJzU2l6ZSA9IGNwdV90b19sZTMyKGZpYnNpemUpOwogCWluaXQtPkFkYXB0ZXJGaWJBbGlnbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgaHdfZmliKSk7Ci0JLyogCi0JICogbnVtYmVyIG9mIDRrIHBhZ2VzIG9mIGhvc3QgcGh5c2ljYWwgbWVtb3J5LiBUaGUgYWFjcmFpZCBmdyBuZWVkcwotCSAqIHRoaXMgbnVtYmVyIHRvIGJlIGxlc3MgdGhhbiA0Z2Igd29ydGggb2YgcGFnZXMuIG51bV9waHlzcGFnZXMgaXMgaW4KLQkgKiBzeXN0ZW0gcGFnZSB1bml0cy4gTmV3IGZpcm13YXJlIGRvZXNuJ3QgaGF2ZSBhbnkgaXNzdWVzIHdpdGggdGhlCi0JICogbWFwcGluZyBzeXN0ZW0sIGJ1dCBvbGRlciBGaXJtd2FyZSBkaWQsIGFuZCBoYWQgKnRyb3VibGVzKiBkZWFsaW5nCi0JICogd2l0aCB0aGUgbWF0aCBvdmVybG9hZGluZyBwYXN0IDMyIGJpdHMsIHRodXMgd2UgbXVzdCBsaW1pdCB0aGlzCi0JICogZmllbGQuCi0JICoKLQkgKiBUaGlzIGFzc3VtZXMgdGhlIG1lbW9yeSBpcyBtYXBwZWQgemVyby0+biwgd2hpY2ggaXNudAotCSAqIGFsd2F5cyB0cnVlIG9uIHJlYWwgY29tcHV0ZXJzLiBJdCBhbHNvIGhhcyBzb21lIHNsaWdodCBwcm9ibGVtcwotCSAqIHdpdGggdGhlIEdBUlQgb24geDg2LTY0LiBJJ3ZlIGJ0dyBuZXZlciB0cmllZCBETUEgZnJvbSBQQ0kgc3BhY2UKLQkgKiBvbiB0aGlzIHBsYXRmb3JtIGJ1dCBkb24ndCBiZSBzdXJwcmlzZWQgaWYgaXRzIHByb2JsZW1hdGljLgotCSAqIFtBSzogc29tZXRoaW5nIGlzIHZlcnkgdmVyeSB3cm9uZyB3aGVuIGEgZHJpdmVyIHRlc3RzIHRoaXMgc3ltYm9sLgotIAkgKiAgU29tZW9uZSBzaG91bGQgZmlndXJlIG91dCB3aGF0IHRoZSBjb21tZW50IHdyaXRlciByZWFsbHkgbWVhbnQgaGVyZSBhbmQgZml4Ci0JICogIHRoZSBjb2RlLiBPciBqdXN0IHJlbW92ZSB0aGF0IGJhZCBjb2RlLiBdCi0JICovCi0jaWZuZGVmIENPTkZJR19JT01NVQotCWlmICgobnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEyKSkgPD0gQUFDX01BWF9IT1NUUEhZU01FTVBBR0VTKSB7Ci0JCWluaXQtPkhvc3RQaHlzTWVtUGFnZXMgPSAKLQkJCWNwdV90b19sZTMyKG51bV9waHlzcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTIpKTsKLQl9IGVsc2UgCi0jZW5kaWYJCi0JewotCQlpbml0LT5Ib3N0UGh5c01lbVBhZ2VzID0gY3B1X3RvX2xlMzIoQUFDX01BWF9IT1NUUEhZU01FTVBBR0VTKTsKLQl9CisJaW5pdC0+SG9zdFBoeXNNZW1QYWdlcyA9IGNwdV90b19sZTMyKEFBQ19NQVhfSE9TVFBIWVNNRU1QQUdFUyk7CiAKIAlpbml0LT5Jbml0RmxhZ3MgPSAwOwogCWlmIChkZXYtPm5ld19jb21tX2ludGVyZmFjZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcmt0LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9ya3QuYwppbmRleCA1YjUyOTY2Li40NThlYTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9ya3QuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9ya3QuYwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJCX0KIAkJbXNsZWVwKDEpOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5zY3NpX2hvc3RfcHRyLT5pcnEsIGFhY19ya3RfaW50ciwgU0FfU0hJUlF8U0FfSU5URVJSVVBULCAiYWFjcmFpZCIsICh2b2lkICopZGV2KTwwKSAKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5zY3NpX2hvc3RfcHRyLT5pcnEsIGFhY19ya3RfaW50ciwgSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCwgImFhY3JhaWQiLCAodm9pZCAqKWRldik8MCkKIAl7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMlZDogSW50ZXJydXB0IHVuYXZhaWxhYmxlLlxuIiwgbmFtZSwgaW5zdGFuY2UpOwogCQlnb3RvIGVycm9yX2lvdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYwppbmRleCA5ZGFkZmIyLi4wMzUwMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCQl9CiAJCW1zbGVlcCgxKTsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+c2NzaV9ob3N0X3B0ci0+aXJxLCBhYWNfcnhfaW50ciwgU0FfU0hJUlF8U0FfSU5URVJSVVBULCAiYWFjcmFpZCIsICh2b2lkICopZGV2KTwwKSAKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5zY3NpX2hvc3RfcHRyLT5pcnEsIGFhY19yeF9pbnRyLCBJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVELCAiYWFjcmFpZCIsICh2b2lkICopZGV2KTwwKQogCXsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyVkOiBJbnRlcnJ1cHQgdW5hdmFpbGFibGUuXG4iLCBuYW1lLCBpbnN0YW5jZSk7CiAJCWdvdG8gZXJyb3JfaW91bm1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9zYS5jCmluZGV4IDg4ZDQwMGYuLmNkNTg2Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJCW1zbGVlcCgxKTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5zY3NpX2hvc3RfcHRyLT5pcnEsIGFhY19zYV9pbnRyLCBTQV9TSElSUXxTQV9JTlRFUlJVUFQsICJhYWNyYWlkIiwgKHZvaWQgKilkZXYgKSA8IDApIHsKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5zY3NpX2hvc3RfcHRyLT5pcnEsIGFhY19zYV9pbnRyLCBJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVELCAiYWFjcmFpZCIsICh2b2lkICopZGV2ICkgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzJWQ6IEludGVycnVwdCB1bmF2YWlsYWJsZS5cbiIsIG5hbWUsIGluc3RhbmNlKTsKIAkJZ290byBlcnJvcl9pb3VubWFwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggZGQ5ZmIzZC4uZTMyYjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTM3MSw3ICszNzEsNyBAQAogCiAgICAgIDEuNSAoOC84Lzk2KToKICAgICAgICAgIDEuIEFkZCBzdXBwb3J0IGZvciBBQlAtOTQwVSAoUENJIFVsdHJhKSBhZGFwdGVyLgotICAgICAgICAgMi4gQWRkIHN1cHBvcnQgZm9yIElSUSBzaGFyaW5nIGJ5IHNldHRpbmcgdGhlIFNBX1NISVJRIGZsYWcgZm9yCisgICAgICAgICAyLiBBZGQgc3VwcG9ydCBmb3IgSVJRIHNoYXJpbmcgYnkgc2V0dGluZyB0aGUgSVJRRl9TSEFSRUQgZmxhZyBmb3IKICAgICAgICAgICAgIHJlcXVlc3RfaXJxIGFuZCBzdXBwbHlpbmcgYSBkZXZfaWQgcG9pbnRlciB0byBib3RoIHJlcXVlc3RfaXJxKCkKICAgICAgICAgICAgIGFuZCBmcmVlX2lycSgpLgogICAgICAgICAgMy4gSW4gQXNjU2VhcmNoSU9Qb3J0QWRkcjExKCkgcmVzdG9yZSBhIGNhbGwgdG8gY2hlY2tfcmVnaW9uKCkgd2hpY2gKQEAgLTUwNCw5ICs1MDQsOSBAQAogICAgICAgICAgMy4gRm9yIHYyLjEuOTMgYW5kIG5ld2VyIGtlcm5lbHMgdXNlIENPTkZJR19QQ0kgYW5kIG5ldyBQQ0kgQklPUwogICAgICAgICAgICAgYWNjZXNzIGZ1bmN0aW9ucy4KICAgICAgICAgIDQuIFVwZGF0ZSBib2FyZCBzZXJpYWwgbnVtYmVyIHByaW50aW5nLgotICAgICAgICAgNS4gVHJ5IGFsbG9jYXRpbmcgYW4gSVJRIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgU0FfSU5URVJSVVBUCisgICAgICAgICA1LiBUcnkgYWxsb2NhdGluZyBhbiBJUlEgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSBJUlFGX0RJU0FCTEVECiAgICAgICAgICAgICBmbGFnIHNldCB0byBhbGxvdyBJUlEgc2hhcmluZyB3aXRoIGRyaXZlcnMgdGhhdCBkbyBub3Qgc2V0Ci0gICAgICAgICAgICB0aGUgU0FfSU5URVJSVVBUIGZsYWcuIEFsc28gZGlzcGxheSBhIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IKKyAgICAgICAgICAgIHRoZSBJUlFGX0RJU0FCTEVEIGZsYWcuIEFsc28gZGlzcGxheSBhIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IKICAgICAgICAgICAgIG1lc3NhZ2UgaWYgcmVxdWVzdF9pcnEoKSBmYWlscy4KICAgICAgICAgIDYuIFVwZGF0ZSB0byBsYXRlc3QgQXNjIGFuZCBBZHYgTGlicmFyaWVzLgogCkBAIC03NTQsNyArNzU0LDYgQEAKICAqIC0tLSBMaW51eCBJbmNsdWRlIEZpbGVzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2KSAmJiAhZGVmaW5lZChDT05GSUdfSVNBKQpAQCAtNTIwMywxOSArNTIwMiwxOSBAQAogICAgICAgICAgICAgLyogUmVnaXN0ZXIgSVJRIE51bWJlci4gKi8KICAgICAgICAgICAgIEFTQ19EQkcxKDIsICJhZHZhbnN5c19kZXRlY3Q6IHJlcXVlc3RfaXJxKCkgJWRcbiIsIHNocC0+aXJxKTsKICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICogSWYgcmVxdWVzdF9pcnEoKSBmYWlscyB3aXRoIHRoZSBTQV9JTlRFUlJVUFQgZmxhZyBzZXQsCi0gICAgICAgICAgICAqIHRoZW4gdHJ5IGFnYWluIHdpdGhvdXQgdGhlIFNBX0lOVEVSUlVQVCBmbGFnIHNldC4gVGhpcworICAgICAgICAgICAgKiBJZiByZXF1ZXN0X2lycSgpIGZhaWxzIHdpdGggdGhlIElSUUZfRElTQUJMRUQgZmxhZyBzZXQsCisgICAgICAgICAgICAqIHRoZW4gdHJ5IGFnYWluIHdpdGhvdXQgdGhlIElSUUZfRElTQUJMRUQgZmxhZyBzZXQuIFRoaXMKICAgICAgICAgICAgICogYWxsb3dzIElSUSBzaGFyaW5nIHRvIHdvcmsgZXZlbiB3aXRoIG90aGVyIGRyaXZlcnMgdGhhdAotICAgICAgICAgICAgKiBkbyBub3Qgc2V0IHRoZSBTQV9JTlRFUlJVUFQgZmxhZy4KKyAgICAgICAgICAgICogZG8gbm90IHNldCB0aGUgSVJRRl9ESVNBQkxFRCBmbGFnLgogICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBJZiBTQV9JTlRFUlJVUFQgaXMgbm90IHNldCwgdGhlbiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkCisgICAgICAgICAgICAqIElmIElSUUZfRElTQUJMRUQgaXMgbm90IHNldCwgdGhlbiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkCiAgICAgICAgICAgICAqIGJlZm9yZSB0aGUgZHJpdmVyIGludGVycnVwdCBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCgocmV0ID0gcmVxdWVzdF9pcnEoc2hwLT5pcnEsIGFkdmFuc3lzX2ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFQgfCAoc2hhcmVfaXJxID09IFRSVUUgPyBTQV9TSElSUSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUQgfCAoc2hhcmVfaXJxID09IFRSVUUgPyBJUlFGX1NIQVJFRCA6IDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZHZhbnN5cyIsIGJvYXJkcCkpICE9IDApICYmCiAgICAgICAgICAgICAgICAgKChyZXQgPSByZXF1ZXN0X2lycShzaHAtPmlycSwgYWR2YW5zeXNfaW50ZXJydXB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGFyZV9pcnEgPT0gVFJVRSA/IFNBX1NISVJRIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNoYXJlX2lycSA9PSBUUlVFID8gSVJRRl9TSEFSRUQgOiAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR2YW5zeXMiLCBib2FyZHApKSAhPSAwKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE1MnguYyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKaW5kZXggZGU4MGNkZi4uMzZlNjNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE1MnguYworKysgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCkBAIC04NTUsNyArODU1LDcgQEAKIAlTRVRQT1JUKFNJTU9ERTAsIDApOwogCVNFVFBPUlQoU0lNT0RFMSwgMCk7CiAKLQlpZiggcmVxdWVzdF9pcnEoc2hwbnQtPmlycSwgc3dpbnRyLCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsICJhaGExNTJ4Iiwgc2hwbnQpICkgeworCWlmKCByZXF1ZXN0X2lycShzaHBudC0+aXJxLCBzd2ludHIsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJhaGExNTJ4Iiwgc2hwbnQpICkgewogCQlwcmludGsoS0VSTl9FUlIgImFoYTE1MnglZDogaXJxICVkIGJ1c3kuXG4iLCBzaHBudC0+aG9zdF9ubywgc2hwbnQtPmlycSk7CiAJCWdvdG8gb3V0X2hvc3RfcHV0OwogCX0KQEAgLTg4OSw3ICs4ODksNyBAQAogCVNFVFBPUlQoU1NUQVQwLCAweDdmKTsKIAlTRVRQT1JUKFNTVEFUMSwgMHhlZik7CiAKLQlpZiAoIHJlcXVlc3RfaXJxKHNocG50LT5pcnEsIGludHIsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgImFoYTE1MngiLCBzaHBudCkgKSB7CisJaWYgKCByZXF1ZXN0X2lycShzaHBudC0+aXJxLCBpbnRyLCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiYWhhMTUyeCIsIHNocG50KSApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhaGExNTJ4JWQ6IGZhaWxlZCB0byByZWFzc2lnbiBpcnEgJWQuXG4iLCBzaHBudC0+aG9zdF9ubywgc2hwbnQtPmlycSk7CiAJCWdvdG8gb3V0X2hvc3RfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTQyLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jCmluZGV4IDg2YzZiZDIuLjI0ZjBmNTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTQyLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqICAgICAgICBBZGRlZCBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBBSEEtMTY0MCAoTUNBIHZlcnNpb24gb2YgQUhBLTE1NDApCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE3NDAuYyBiL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKaW5kZXggNGI4YzZhNS4uMGU0YTdlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE3NDAuYworKysgYi9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCkBAIC02MzQsNyArNjM0LDcgQEAKIAl9CiAJCiAJREVCKHByaW50aygiYWhhMTc0MF9wcm9iZTogZW5hYmxlIGludGVycnVwdCBjaGFubmVsICVkXG4iLGlycV9sZXZlbCkpOwotCWlmIChyZXF1ZXN0X2lycShpcnFfbGV2ZWwsYWhhMTc0MF9pbnRyX2hhbmRsZSxpcnFfdHlwZSA/IDAgOiBTQV9TSElSUSwKKwlpZiAocmVxdWVzdF9pcnEoaXJxX2xldmVsLGFoYTE3NDBfaW50cl9oYW5kbGUsaXJxX3R5cGUgPyAwIDogSVJRRl9TSEFSRUQsCiAJCQkiYWhhMTc0MCIsc2hwbnQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWhhMTc0MF9wcm9iZTogVW5hYmxlIHRvIGFsbG9jYXRlIElSUSAlZC5cbiIsCiAJCSAgICAgICBpcnFfbGV2ZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoY2kuYyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKaW5kZXggZjA1OTQ2Ny4uMTVmNmNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWhjaS5jCkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogCXByb2JlX2VudC0+cG9ydF9vcHMJPSBhaGNpX3BvcnRfaW5mb1tib2FyZF9pZHhdLnBvcnRfb3BzOwogCiAgICAgICAgCXByb2JlX2VudC0+aXJxID0gcGRldi0+aXJxOwotICAgICAgIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworICAgICAgIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCXByb2JlX2VudC0+bW1pb19iYXNlID0gbW1pb19iYXNlOwogCXByb2JlX2VudC0+cHJpdmF0ZV9kYXRhID0gaHByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzBfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwX29zbS5jCmluZGV4IGQ3NTRiMzIuLjg2N2NiZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzBfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzc3MF9vc20uYwpAQCAtNjUsNyArNjUsNyBAQAogCiAJc2hhcmVkID0gMDsKIAlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfRURHRV9JTlRFUlJVUFQpID09IDApCi0JCXNoYXJlZCA9IFNBX1NISVJROworCQlzaGFyZWQgPSBJUlFGX1NIQVJFRDsKIAogCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBhaGNfbGludXhfaXNyLCBzaGFyZWQsICJhaWM3eHh4IiwgYWhjKTsKIAlpZiAoZXJyb3IgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaAppbmRleCBlYjc3NDU2Li5kZjMzNDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCkBAIC0xNDg3LDYgKzE0ODcsNyBAQAogfSBhaGRfcXVldWVfYWxnOwogCiB2b2lkCQkJYWhkX3NldF90YWdzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKKwkJCQkgICAgIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJCQkgICAgIHN0cnVjdCBhaGRfZGV2aW5mbyAqZGV2aW5mbywKIAkJCQkgICAgIGFoZF9xdWV1ZV9hbGcgYWxnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwppbmRleCA4MDFmYzgxLi5hMWU4Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIAogCQkJLyogTm90aWZ5IFhQVCAqLwogCQkJYWhkX3NlbmRfYXN5bmMoYWhkLCBkZXZpbmZvLmNoYW5uZWwsIGRldmluZm8udGFyZ2V0LAotCQkJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19TRU5UX0JEUiwgTlVMTCk7CisJCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1NFTlRfQkRSKTsKIAogCQkJLyoKIAkJCSAqIEFsbG93IHRoZSBzZXF1ZW5jZXIgdG8gY29udGludWUgd2l0aApAQCAtMzA2Miw3ICszMDYyLDcgQEAKIAkJdGluZm8tPmN1cnIucHByX29wdGlvbnMgPSBwcHJfb3B0aW9uczsKIAogCQlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwKLQkJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19UUkFOU0ZFUl9ORUcsIE5VTEwpOworCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1RSQU5TRkVSX05FRyk7CiAJCWlmIChib290dmVyYm9zZSkgewogCQkJaWYgKG9mZnNldCAhPSAwKSB7CiAJCQkJaW50IG9wdGlvbnM7CkBAIC0zMTg0LDcgKzMxODQsNyBAQAogCiAJCXRpbmZvLT5jdXJyLndpZHRoID0gd2lkdGg7CiAJCWFoZF9zZW5kX2FzeW5jKGFoZCwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAotCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1RSQU5TRkVSX05FRywgTlVMTCk7CisJCQkgICAgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgQUNfVFJBTlNGRVJfTkVHKTsKIAkJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCQlwcmludGYoIiVzOiB0YXJnZXQgJWQgdXNpbmcgJWRiaXQgdHJhbnNmZXJzXG4iLAogCQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGRldmluZm8tPnRhcmdldCwKQEAgLTMyMTEsMTIgKzMyMTEsMTQgQEAKICAqIFVwZGF0ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0YWdnZWQgcXVldWluZyBmb3IgYSBnaXZlbiB0YXJnZXQuCiAgKi8KIHZvaWQKLWFoZF9zZXRfdGFncyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBhaGRfZGV2aW5mbyAqZGV2aW5mbywKLQkgICAgIGFoZF9xdWV1ZV9hbGcgYWxnKQorYWhkX3NldF90YWdzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjc2lfY21uZCAqY21kLAorCSAgICAgc3RydWN0IGFoZF9kZXZpbmZvICpkZXZpbmZvLCBhaGRfcXVldWVfYWxnIGFsZykKIHsKLQlhaGRfcGxhdGZvcm1fc2V0X3RhZ3MoYWhkLCBkZXZpbmZvLCBhbGcpOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCisJYWhkX3BsYXRmb3JtX3NldF90YWdzKGFoZCwgc2RldiwgZGV2aW5mbywgYWxnKTsKIAlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwKLQkJICAgICAgIGRldmluZm8tPmx1biwgQUNfVFJBTlNGRVJfTkVHLCAmYWxnKTsKKwkJICAgICAgIGRldmluZm8tPmx1biwgQUNfVFJBTlNGRVJfTkVHKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ3NDYsNyArNDc0OCw3IEBACiAJCQlwcmludGYoIiglczolYzolZDolZCk6IHJlZnVzZXMgdGFnZ2VkIGNvbW1hbmRzLiAgIgogCQkJICAgICAgICJQZXJmb3JtaW5nIG5vbi10YWdnZWQgSS9PXG4iLCBhaGRfbmFtZShhaGQpLAogCQkJICAgICAgIGRldmluZm8tPmNoYW5uZWwsIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKLQkJCWFoZF9zZXRfdGFncyhhaGQsIGRldmluZm8sIEFIRF9RVUVVRV9OT05FKTsKKwkJCWFoZF9zZXRfdGFncyhhaGQsIHNjYi0+aW9fY3R4LCBkZXZpbmZvLCBBSERfUVVFVUVfTk9ORSk7CiAJCQltYXNrID0gfjB4MjM7CiAJCX0gZWxzZSB7CiAJCQlwcmludGYoIiglczolYzolZDolZCk6IHJlZnVzZXMgJXMgdGFnZ2VkIGNvbW1hbmRzLiAgIgpAQCAtNDc1NCw3ICs0NzU2LDcgQEAKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXZpbmZvLT5jaGFubmVsLCBkZXZpbmZvLT50YXJnZXQsCiAJCQkgICAgICAgZGV2aW5mby0+bHVuLCB0YWdfdHlwZSA9PSBNU0dfT1JERVJFRF9UQVNLCiAJCQkgICAgICAgPyAib3JkZXJlZCIgOiAiaGVhZCBvZiBxdWV1ZSIpOwotCQkJYWhkX3NldF90YWdzKGFoZCwgZGV2aW5mbywgQUhEX1FVRVVFX0JBU0lDKTsKKwkJCWFoZF9zZXRfdGFncyhhaGQsIHNjYi0+aW9fY3R4LCBkZXZpbmZvLCBBSERfUVVFVUVfQkFTSUMpOwogCQkJbWFzayA9IH4weDAzOwogCQl9CiAKQEAgLTUwOTgsNyArNTEwMCw3IEBACiAJCiAJaWYgKHN0YXR1cyAhPSBDQU1fU0VMX1RJTUVPVVQpCiAJCWFoZF9zZW5kX2FzeW5jKGFoZCwgZGV2aW5mby0+Y2hhbm5lbCwgZGV2aW5mby0+dGFyZ2V0LAotCQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX1NFTlRfQkRSLCBOVUxMKTsKKwkJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19TRU5UX0JEUik7CiAKIAlpZiAobWVzc2FnZSAhPSBOVUxMICYmIGJvb3R2ZXJib3NlKQogCQlwcmludGYoIiVzOiAlcyBvbiAlYzolZC4gJWQgU0NCcyBhYm9ydGVkXG4iLCBhaGRfbmFtZShhaGQpLApAQCAtNzk1Miw3ICs3OTU0LDcgQEAKICNlbmRpZgogCS8qIE5vdGlmeSB0aGUgWFBUIHRoYXQgYSBidXMgcmVzZXQgb2NjdXJyZWQgKi8KIAlhaGRfc2VuZF9hc3luYyhhaGQsIGRldmluZm8uY2hhbm5lbCwgQ0FNX1RBUkdFVF9XSUxEQ0FSRCwKLQkJICAgICAgIENBTV9MVU5fV0lMRENBUkQsIEFDX0JVU19SRVNFVCwgTlVMTCk7CisJCSAgICAgICBDQU1fTFVOX1dJTERDQVJELCBBQ19CVVNfUkVTRVQpOwogCiAJLyoKIAkgKiBSZXZlcnQgdG8gYXN5bmMvbmFycm93IHRyYW5zZmVycyB1bnRpbCB3ZSByZW5lZ290aWF0ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCmluZGV4IGUwY2NkZjMuLmIyNDRjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwpAQCAtNDg0LDcgKzQ4NCw2IEBACiAJc3RydWN0IHNlZXByb21fY29uZmlnICpzYyA9IGFoZC0+c2VlcF9jb25maWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKiphaGRfdGFyZ3AgPSBhaGRfbGludXhfdGFyZ2V0X2luX3NvZnRjKHN0YXJnZXQpOwotCXN0cnVjdCBhaGRfbGludXhfdGFyZ2V0ICp0YXJnID0gc2NzaV90cmFuc3BvcnRfdGFyZ2V0X2RhdGEoc3RhcmdldCk7CiAJc3RydWN0IGFoZF9kZXZpbmZvIGRldmluZm87CiAJc3RydWN0IGFoZF9pbml0aWF0b3JfdGluZm8gKnRpbmZvOwogCXN0cnVjdCBhaGRfdG1vZGVfdHN0YXRlICp0c3RhdGU7CkBAIC00OTUsNyArNDk0LDYgQEAKIAlCVUdfT04oKmFoZF90YXJncCAhPSBOVUxMKTsKIAogCSphaGRfdGFyZ3AgPSBzdGFyZ2V0OwotCW1lbXNldCh0YXJnLCAwLCBzaXplb2YoKnRhcmcpKTsKIAogCWlmIChzYykgewogCQlpbnQgZmxhZ3MgPSBzYy0+ZGV2aWNlX2ZsYWdzW3N0YXJnZXQtPmlkXTsKQEAgLTU1MSwxNSArNTQ5LDExIEBACiB7CiAJc3RydWN0CWFoZF9zb2Z0YyAqYWhkID0KIAkJKigoc3RydWN0IGFoZF9zb2Z0YyAqKilzZGV2LT5ob3N0LT5ob3N0ZGF0YSk7Ci0Jc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2Rldi0+c2Rldl90YXJnZXQ7Ci0Jc3RydWN0IGFoZF9saW51eF90YXJnZXQgKnRhcmcgPSBzY3NpX3RyYW5zcG9ydF90YXJnZXRfZGF0YShzdGFyZ2V0KTsKIAlzdHJ1Y3QgYWhkX2xpbnV4X2RldmljZSAqZGV2OwogCiAJaWYgKGJvb3R2ZXJib3NlKQogCQlwcmludGYoIiVzOiBTbGF2ZSBBbGxvYyAlZFxuIiwgYWhkX25hbWUoYWhkKSwgc2Rldi0+aWQpOwogCi0JQlVHX09OKHRhcmctPnNkZXZbc2Rldi0+bHVuXSAhPSBOVUxMKTsKLQogCWRldiA9IHNjc2lfdHJhbnNwb3J0X2RldmljZV9kYXRhKHNkZXYpOwogCW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7CiAKQEAgLTU3Niw4ICs1NzAsNiBAQAogCSAqLwogCWRldi0+bWF4dGFncyA9IDA7CiAJCi0JdGFyZy0+c2RldltzZGV2LT5sdW5dID0gc2RldjsKLQogCXJldHVybiAoMCk7CiB9CiAKQEAgLTU5OSwyMyArNTkxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWFoZF9saW51eF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3QJYWhkX3NvZnRjICphaGQ7Ci0Jc3RydWN0CWFoZF9saW51eF9kZXZpY2UgKmRldiA9IHNjc2lfdHJhbnNwb3J0X2RldmljZV9kYXRhKHNkZXYpOwotCXN0cnVjdCAgYWhkX2xpbnV4X3RhcmdldCAqdGFyZyA9IHNjc2lfdHJhbnNwb3J0X3RhcmdldF9kYXRhKHNkZXYtPnNkZXZfdGFyZ2V0KTsKLQotCWFoZCA9ICooKHN0cnVjdCBhaGRfc29mdGMgKiopc2Rldi0+aG9zdC0+aG9zdGRhdGEpOwotCWlmIChib290dmVyYm9zZSkKLQkJcHJpbnRmKCIlczogU2xhdmUgRGVzdHJveSAlZFxuIiwgYWhkX25hbWUoYWhkKSwgc2Rldi0+aWQpOwotCi0JQlVHX09OKGRldi0+YWN0aXZlKTsKLQotCXRhcmctPnNkZXZbc2Rldi0+bHVuXSA9IE5VTEw7Ci0KLX0KLQogI2lmIGRlZmluZWQoX19pMzg2X18pCiAvKgogICogUmV0dXJuIHRoZSBkaXNrIGdlb21ldHJ5IGZvciB0aGUgZ2l2ZW4gU0NTSSBkZXZpY2UuCkBAIC04MjIsNyArNzk3LDYgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNsYXZlX2FsbG9jCQk9IGFoZF9saW51eF9zbGF2ZV9hbGxvYywKIAkuc2xhdmVfY29uZmlndXJlCT0gYWhkX2xpbnV4X3NsYXZlX2NvbmZpZ3VyZSwKLQkuc2xhdmVfZGVzdHJveQkJPSBhaGRfbGludXhfc2xhdmVfZGVzdHJveSwKIAkudGFyZ2V0X2FsbG9jCQk9IGFoZF9saW51eF90YXJnZXRfYWxsb2MsCiAJLnRhcmdldF9kZXN0cm95CQk9IGFoZF9saW51eF90YXJnZXRfZGVzdHJveSwKIH07CkBAIC0xMjQ5LDIwICsxMjIzLDEzIEBACiBhaGRfcGxhdGZvcm1fZnJlZShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OwotCWludCBpLCBqOworCWludCBpOwogCiAJaWYgKGFoZC0+cGxhdGZvcm1fZGF0YSAhPSBOVUxMKSB7CiAJCS8qIGRlc3Ryb3kgYWxsIG9mIHRoZSBkZXZpY2UgYW5kIHRhcmdldCBvYmplY3RzICovCiAJCWZvciAoaSA9IDA7IGkgPCBBSERfTlVNX1RBUkdFVFM7IGkrKykgewogCQkJc3RhcmdldCA9IGFoZC0+cGxhdGZvcm1fZGF0YS0+c3RhcmdldFtpXTsKIAkJCWlmIChzdGFyZ2V0ICE9IE5VTEwpIHsKLQkJCQlmb3IgKGogPSAwOyBqIDwgQUhEX05VTV9MVU5TOyBqKyspIHsKLQkJCQkJc3RydWN0IGFoZF9saW51eF90YXJnZXQgKnRhcmcgPQotCQkJCQkJc2NzaV90cmFuc3BvcnRfdGFyZ2V0X2RhdGEoc3RhcmdldCk7Ci0JCQkJCWlmICh0YXJnLT5zZGV2W2pdID09IE5VTEwpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJdGFyZy0+c2RldltqXSA9IE5VTEw7Ci0JCQkJfQogCQkJCWFoZC0+cGxhdGZvcm1fZGF0YS0+c3RhcmdldFtpXSA9IE5VTEw7CiAJCQl9CiAJCX0KQEAgLTEzMTgsMjAgKzEyODUsMTMgQEAKIH0KIAogdm9pZAotYWhkX3BsYXRmb3JtX3NldF90YWdzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IGFoZF9kZXZpbmZvICpkZXZpbmZvLAotCQkgICAgICBhaGRfcXVldWVfYWxnIGFsZykKK2FoZF9wbGF0Zm9ybV9zZXRfdGFncyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJICAgICAgc3RydWN0IGFoZF9kZXZpbmZvICpkZXZpbmZvLCBhaGRfcXVldWVfYWxnIGFsZykKIHsKLQlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7Ci0Jc3RydWN0IGFoZF9saW51eF90YXJnZXQgKnRhcmc7CiAJc3RydWN0IGFoZF9saW51eF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJaW50IHdhc19xdWV1aW5nOwogCWludCBub3dfcXVldWluZzsKIAotCXN0YXJnZXQgPSBhaGQtPnBsYXRmb3JtX2RhdGEtPnN0YXJnZXRbZGV2aW5mby0+dGFyZ2V0XTsKLQl0YXJnID0gc2NzaV90cmFuc3BvcnRfdGFyZ2V0X2RhdGEoc3RhcmdldCk7Ci0JQlVHX09OKHRhcmcgPT0gTlVMTCk7Ci0Jc2RldiA9IHRhcmctPnNkZXZbZGV2aW5mby0+bHVuXTsKIAlpZiAoc2RldiA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTE0NjcsMTEgKzE0MjcsMTUgQEAKIAl0YWdzID0gYWhkX2xpbnV4X3VzZXJfdGFnZGVwdGgoYWhkLCAmZGV2aW5mbyk7CiAJaWYgKHRhZ3MgIT0gMCAmJiBzZGV2LT50YWdnZWRfc3VwcG9ydGVkICE9IDApIHsKIAotCQlhaGRfc2V0X3RhZ3MoYWhkLCAmZGV2aW5mbywgQUhEX1FVRVVFX1RBR0dFRCk7CisJCWFoZF9wbGF0Zm9ybV9zZXRfdGFncyhhaGQsIHNkZXYsICZkZXZpbmZvLCBBSERfUVVFVUVfVEFHR0VEKTsKKwkJYWhkX3NlbmRfYXN5bmMoYWhkLCBkZXZpbmZvLmNoYW5uZWwsIGRldmluZm8udGFyZ2V0LAorCQkJICAgICAgIGRldmluZm8ubHVuLCBBQ19UUkFOU0ZFUl9ORUcpOwogCQlhaGRfcHJpbnRfZGV2aW5mbyhhaGQsICZkZXZpbmZvKTsKIAkJcHJpbnRmKCJUYWdnZWQgUXVldWluZyBlbmFibGVkLiAgRGVwdGggJWRcbiIsIHRhZ3MpOwogCX0gZWxzZSB7Ci0JCWFoZF9zZXRfdGFncyhhaGQsICZkZXZpbmZvLCBBSERfUVVFVUVfTk9ORSk7CisJCWFoZF9wbGF0Zm9ybV9zZXRfdGFncyhhaGQsIHNkZXYsICZkZXZpbmZvLCBBSERfUVVFVUVfTk9ORSk7CisJCWFoZF9zZW5kX2FzeW5jKGFoZCwgZGV2aW5mby5jaGFubmVsLCBkZXZpbmZvLnRhcmdldCwKKwkJCSAgICAgICBkZXZpbmZvLmx1biwgQUNfVFJBTlNGRVJfTkVHKTsKIAl9CiB9CiAKQEAgLTE2MjksNyArMTU5Myw3IEBACiAKIHZvaWQKIGFoZF9zZW5kX2FzeW5jKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgY2hhciBjaGFubmVsLAotCSAgICAgICB1X2ludCB0YXJnZXQsIHVfaW50IGx1biwgYWNfY29kZSBjb2RlLCB2b2lkICphcmcpCisJICAgICAgIHVfaW50IHRhcmdldCwgdV9pbnQgbHVuLCBhY19jb2RlIGNvZGUpCiB7CiAJc3dpdGNoIChjb2RlKSB7CiAJY2FzZSBBQ19UUkFOU0ZFUl9ORUc6CkBAIC0xOTU2LDcgKzE5MjAsNyBAQAogCQkJfQogCQkJYWhkX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fUkVRVUVVRV9SRVEpOwogCQkJYWhkX3NldF9zY3NpX3N0YXR1cyhzY2IsIFNDU0lfU1RBVFVTX09LKTsKLQkJCWFoZF9wbGF0Zm9ybV9zZXRfdGFncyhhaGQsICZkZXZpbmZvLAorCQkJYWhkX3BsYXRmb3JtX3NldF90YWdzKGFoZCwgc2RldiwgJmRldmluZm8sCiAJCQkJICAgICAoZGV2LT5mbGFncyAmIEFIRF9ERVZfUV9CQVNJQykKIAkJCQkgICA/IEFIRF9RVUVVRV9CQVNJQyA6IEFIRF9RVUVVRV9UQUdHRUQpOwogCQkJYnJlYWs7CkBAIC0xOTY2LDcgKzE5MzAsNyBAQAogCQkgKiBhcyBpZiB0aGUgdGFyZ2V0IHJldHVybmVkIEJVU1kgU0NTSSBzdGF0dXMuCiAJCSAqLwogCQlkZXYtPm9wZW5pbmdzID0gMTsKLQkJYWhkX3BsYXRmb3JtX3NldF90YWdzKGFoZCwgJmRldmluZm8sCisJCWFoZF9wbGF0Zm9ybV9zZXRfdGFncyhhaGQsIHNkZXYsICZkZXZpbmZvLAogCQkJICAgICAoZGV2LT5mbGFncyAmIEFIRF9ERVZfUV9CQVNJQykKIAkJCSAgID8gQUhEX1FVRVVFX0JBU0lDIDogQUhEX1FVRVVFX1RBR0dFRCk7CiAJCWFoZF9zZXRfc2NzaV9zdGF0dXMoc2NiLCBTQ1NJX1NUQVRVU19CVVNZKTsKQEAgLTI3NzgsOCArMjc0Miw2IEBACiAJaWYgKCFhaGRfbGludXhfdHJhbnNwb3J0X3RlbXBsYXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNjc2lfdHJhbnNwb3J0X3Jlc2VydmVfdGFyZ2V0KGFoZF9saW51eF90cmFuc3BvcnRfdGVtcGxhdGUsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhaGRfbGludXhfdGFyZ2V0KSk7CiAJc2NzaV90cmFuc3BvcnRfcmVzZXJ2ZV9kZXZpY2UoYWhkX2xpbnV4X3RyYW5zcG9ydF90ZW1wbGF0ZSwKIAkJCQkgICAgICBzaXplb2Yoc3RydWN0IGFoZF9saW51eF9kZXZpY2UpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKaW5kZXggMmI4MzMxNi4uOWU4NzFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCkBAIC00Miw3ICs0Miw2IEBACiAjaWZuZGVmIF9BSUM3OVhYX0xJTlVYX0hfCiAjZGVmaW5lIF9BSUM3OVhYX0xJTlVYX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0yNjMsNyArMjYyLDYgQEAKIAlBSERfREVWX1BFUklPRElDX09UQUcJID0gMHg0MCwgLyogU2VuZCBPVEFHIHRvIHByZXZlbnQgc3RhcnZhdGlvbiAqLwogfSBhaGRfbGludXhfZGV2X2ZsYWdzOwogCi1zdHJ1Y3QgYWhkX2xpbnV4X3RhcmdldDsKIHN0cnVjdCBhaGRfbGludXhfZGV2aWNlIHsKIAlUQUlMUV9FTlRSWShhaGRfbGludXhfZGV2aWNlKSBsaW5rczsKIApAQCAtMzQzLDEyICszNDEsNiBAQAogI2RlZmluZSBBSERfT1RBR19USFJFU0gJNTAwCiB9OwogCi1zdHJ1Y3QgYWhkX2xpbnV4X3RhcmdldCB7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlCSAqc2RldltBSERfTlVNX0xVTlNdOwotCXN0cnVjdCBhaGRfdHJhbnNpbmZvCSAgbGFzdF90aW5mbzsKLQlzdHJ1Y3QgYWhkX3NvZnRjCSAqYWhkOwotfTsKLQogLyoqKioqKioqKioqKioqKioqKioqKiBEZWZpbml0aW9ucyBSZXF1aXJlZCBieSB0aGUgQ29yZSAqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBOdW1iZXIgb2YgU0cgc2VnbWVudHMgd2UgcmVxdWlyZS4gIFNvIGxvbmcgYXMgdGhlIFMvRyBzZWdtZW50cyBmb3IKQEAgLTg2NSw3ICs4NTcsNyBAQAogICAgICAgICB9CiB9CiAKLXZvaWQJYWhkX3BsYXRmb3JtX3NldF90YWdzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKK3ZvaWQJYWhkX3BsYXRmb3JtX3NldF90YWdzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAogCQkJICAgICAgc3RydWN0IGFoZF9kZXZpbmZvICpkZXZpbmZvLCBhaGRfcXVldWVfYWxnKTsKIGludAlhaGRfcGxhdGZvcm1fYWJvcnRfc2NicyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCB0YXJnZXQsCiAJCQkJY2hhciBjaGFubmVsLCBpbnQgbHVuLCB1X2ludCB0YWcsCkBAIC04NzQsNyArODY2LDcgQEAKIAlhaGRfbGludXhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIHZvaWQJYWhkX2RvbmUoc3RydWN0IGFoZF9zb2Z0YyosIHN0cnVjdCBzY2IqKTsKIHZvaWQJYWhkX3NlbmRfYXN5bmMoc3RydWN0IGFoZF9zb2Z0YyAqLCBjaGFyIGNoYW5uZWwsCi0JCSAgICAgICB1X2ludCB0YXJnZXQsIHVfaW50IGx1biwgYWNfY29kZSwgdm9pZCAqKTsKKwkJICAgICAgIHVfaW50IHRhcmdldCwgdV9pbnQgbHVuLCBhY19jb2RlKTsKIHZvaWQJYWhkX3ByaW50X3BhdGgoc3RydWN0IGFoZF9zb2Z0YyAqLCBzdHJ1Y3Qgc2NiICopOwogCiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwppbmRleCBlYmJmN2U0Li41MGE0MWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJaW50IGVycm9yOwogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShhaGQtPmRldl9zb2Z0Yy0+aXJxLCBhaGRfbGludXhfaXNyLAotCQkJICAgIFNBX1NISVJRLCAiYWljNzl4eCIsIGFoZCk7CisJCQkgICAgSVJRRl9TSEFSRUQsICJhaWM3OXh4IiwgYWhkKTsKIAlpZiAoIWVycm9yKQogCQlhaGQtPnBsYXRmb3JtX2RhdGEtPmlycSA9IGFoZC0+ZGV2X3NvZnRjLT5pcnE7CiAJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jCmluZGV4IDI0ZmQ1OWEuLmM1ZjBlZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jCkBAIC00Nyw3ICs0Nyw3IEBACiBzdGF0aWMgdm9pZAlhaGRfZHVtcF90YXJnZXRfc3RhdGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCSAgICAgIHN0cnVjdCBpbmZvX3N0ciAqaW5mbywKIAkJCQkgICAgICB1X2ludCBvdXJfaWQsIGNoYXIgY2hhbm5lbCwKLQkJCQkgICAgICB1X2ludCB0YXJnZXRfaWQsIHVfaW50IHRhcmdldF9vZmZzZXQpOworCQkJCSAgICAgIHVfaW50IHRhcmdldF9pZCk7CiBzdGF0aWMgdm9pZAlhaGRfZHVtcF9kZXZpY2Vfc3RhdGUoc3RydWN0IGluZm9fc3RyICppbmZvLAogCQkJCSAgICAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBzdGF0aWMgaW50CWFoZF9wcm9jX3dyaXRlX3NlZXByb20oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLApAQCAtMjA0LDEwICsyMDQsOCBAQAogCiBzdGF0aWMgdm9pZAogYWhkX2R1bXBfdGFyZ2V0X3N0YXRlKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IGluZm9fc3RyICppbmZvLAotCQkgICAgICB1X2ludCBvdXJfaWQsIGNoYXIgY2hhbm5lbCwgdV9pbnQgdGFyZ2V0X2lkLAotCQkgICAgICB1X2ludCB0YXJnZXRfb2Zmc2V0KQorCQkgICAgICB1X2ludCBvdXJfaWQsIGNoYXIgY2hhbm5lbCwgdV9pbnQgdGFyZ2V0X2lkKQogewotCXN0cnVjdAlhaGRfbGludXhfdGFyZ2V0ICp0YXJnOwogCXN0cnVjdCAgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0CWFoZF9pbml0aWF0b3JfdGluZm8gKnRpbmZvOwogCXN0cnVjdAlhaGRfdG1vZGVfdHN0YXRlICp0c3RhdGU7CkBAIC0yMTgsMTAgKzIxNiw5IEBACiAJY29weV9pbmZvKGluZm8sICJUYXJnZXQgJWQgTmVnb3RpYXRpb24gU2V0dGluZ3NcbiIsIHRhcmdldF9pZCk7CiAJY29weV9pbmZvKGluZm8sICJcdFVzZXI6ICIpOwogCWFoZF9mb3JtYXRfdHJhbnNpbmZvKGluZm8sICZ0aW5mby0+dXNlcik7Ci0Jc3RhcmdldCA9IGFoZC0+cGxhdGZvcm1fZGF0YS0+c3RhcmdldFt0YXJnZXRfb2Zmc2V0XTsKKwlzdGFyZ2V0ID0gYWhkLT5wbGF0Zm9ybV9kYXRhLT5zdGFyZ2V0W3RhcmdldF9pZF07CiAJaWYgKHN0YXJnZXQgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXRhcmcgPSBzY3NpX3RyYW5zcG9ydF90YXJnZXRfZGF0YShzdGFyZ2V0KTsKIAogCWNvcHlfaW5mbyhpbmZvLCAiXHRHb2FsOiAiKTsKIAlhaGRfZm9ybWF0X3RyYW5zaW5mbyhpbmZvLCAmdGluZm8tPmdvYWwpOwpAQCAtMjMxLDcgKzIyOCw3IEBACiAJZm9yIChsdW4gPSAwOyBsdW4gPCBBSERfTlVNX0xVTlM7IGx1bisrKSB7CiAJCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2OwogCi0JCWRldiA9IHRhcmctPnNkZXZbbHVuXTsKKwkJZGV2ID0gc2NzaV9kZXZpY2VfbG9va3VwX2J5X3RhcmdldChzdGFyZ2V0LCBsdW4pOwogCiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwpAQCAtMzU1LDcgKzM1Miw3IEBACiAJY29weV9pbmZvKCZpbmZvLCAiQWxsb2NhdGVkIFNDQnM6ICVkLCBTRyBMaXN0IExlbmd0aDogJWRcblxuIiwKIAkJICBhaGQtPnNjYl9kYXRhLm51bXNjYnMsIEFIRF9OU0VHKTsKIAotCW1heF90YXJnID0gMTU7CisJbWF4X3RhcmcgPSAxNjsKIAogCWlmIChhaGQtPnNlZXBfY29uZmlnID09IE5VTEwpCiAJCWNvcHlfaW5mbygmaW5mbywgIk5vIFNlcmlhbCBFRVBST01cbiIpOwpAQCAtMzczLDEyICszNzAsMTIgQEAKIAljb3B5X2luZm8oJmluZm8sICJcbiIpOwogCiAJaWYgKChhaGQtPmZlYXR1cmVzICYgQUhEX1dJREUpID09IDApCi0JCW1heF90YXJnID0gNzsKKwkJbWF4X3RhcmcgPSA4OwogCi0JZm9yIChpID0gMDsgaSA8PSBtYXhfdGFyZzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG1heF90YXJnOyBpKyspIHsKIAogCQlhaGRfZHVtcF90YXJnZXRfc3RhdGUoYWhkLCAmaW5mbywgYWhkLT5vdXJfaWQsICdBJywKLQkJCQkgICAgICAvKnRhcmdldF9pZCovaSwgLyp0YXJnZXRfb2Zmc2V0Ki9pKTsKKwkJCQkgICAgICAvKnRhcmdldF9pZCovaSk7CiAJfQogCXJldHZhbCA9IGluZm8ucG9zID4gaW5mby5vZmZzZXQgPyBpbmZvLnBvcyAtIGluZm8ub2Zmc2V0IDogMDsKIGRvbmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaAppbmRleCBhMjBiMDhjLi5kNDJhNzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKQEAgLTU5LDcgKzU5LDYgQEAKICNpZm5kZWYgX0FJQzdYWFhfTElOVVhfSF8KICNkZWZpbmUgX0FJQzdYWFhfTElOVVhfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKaW5kZXggMGM5YzJmNC4uN2U0MmYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCWludCBlcnJvcjsKIAogCWVycm9yID0gcmVxdWVzdF9pcnEoYWhjLT5kZXZfc29mdGMtPmlycSwgYWhjX2xpbnV4X2lzciwKLQkJCSAgICBTQV9TSElSUSwgImFpYzd4eHgiLCBhaGMpOworCQkJICAgIElSUUZfU0hBUkVELCAiYWljN3h4eCIsIGFoYyk7CiAJaWYgKGVycm9yID09IDApCiAJCWFoYy0+cGxhdGZvcm1fZGF0YS0+aXJxID0gYWhjLT5kZXZfc29mdGMtPmlycTsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKaW5kZXggNWRiYTFjNi4uM2Y4NWI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKQEAgLTgzMjIsMTEgKzgzMjIsMTEgQEAKICAgfQogICBlbHNlCiAgIHsKLSAgICByZXN1bHQgPSAocmVxdWVzdF9pcnEocC0+aXJxLCBkb19haWM3eHh4X2lzciwgU0FfU0hJUlEsCisgICAgcmVzdWx0ID0gKHJlcXVlc3RfaXJxKHAtPmlycSwgZG9fYWljN3h4eF9pc3IsIElSUUZfU0hBUkVELAogICAgICAgICAgICAgICAiYWljN3h4eCIsIHApKTsKICAgICBpZiAocmVzdWx0IDwgMCkKICAgICB7Ci0gICAgICByZXN1bHQgPSAocmVxdWVzdF9pcnEocC0+aXJxLCBkb19haWM3eHh4X2lzciwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCisgICAgICByZXN1bHQgPSAocmVxdWVzdF9pcnEocC0+aXJxLCBkb19haWM3eHh4X2lzciwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogICAgICAgICAgICAgICAiYWljN3h4eCIsIHApKTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4X3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4X3Byb2MuYwppbmRleCAzYmYzMzQ5Li5iMDdlNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQvYWljN3h4eF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkL2FpYzd4eHhfcHJvYy5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiAgJElkOiBhaWM3eHh4X3Byb2MuYyx2IDQuMSAxOTk3LzA2Lzk3IDA4OjIzOjQyIGRlYW5nIEV4cCAkCiAgKi1NKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lCUJMUwkoJmFpYzd4eHhfYnVmZmVyW3NpemVdKQogI2RlZmluZSBIRFJCIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hbWlnYTd4eC5jIGIvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmMKaW5kZXggYzA4NDRmYS4uOTA5OWQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCmluZGV4IGRkYTVhNWYuLjc2MjFlM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwpAQCAtMTI5LDcgKzEyOSw2IEBACiAjZGVmaW5lIFNUUngoeCkgU1RSSU5HSUZZKHgpCiAjZGVmaW5lIE5PX1dSSVRFX1NUUiBTVFJ4KE5PX1dSSVRFKQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTMwMzEsNyArMzAzMCw3IEBACiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihob3N0LT5pb19wb3J0LCAyMDQ4LCAiYWNvcm5zY3NpKHJhbSkiKSkKIAkJZ290byBlcnJfNTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgYWNvcm5zY3NpX2ludHIsIFNBX0lOVEVSUlVQVCwgImFjb3Juc2NzaSIsIGFzaG9zdCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBhY29ybnNjc2lfaW50ciwgSVJRRl9ESVNBQkxFRCwgImFjb3Juc2NzaSIsIGFzaG9zdCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9DUklUICJzY3NpJWQ6IElSUSVkIG5vdCBmcmVlOiAlZFxuIiwKIAkJCWhvc3QtPmhvc3Rfbm8sIGFzaG9zdC0+c2NzaS5pcnEsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKaW5kZXggZTZjOTQ5MS4uM2JkZmMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzEuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAgICAgICAgICgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilob3N0LT5ob3N0ZGF0YSktPmN0cmwgPSAwOwogICAgICAgICBvdXRiKDB4MDAsIGhvc3QtPmlvX3BvcnQgLSA1NzcpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBjdW1hbmFzY3NpX2ludHIsIFNBX0lOVEVSUlVQVCwKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIGN1bWFuYXNjc2lfaW50ciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgIkN1bWFuYVNDU0ktMSIsIGhvc3QpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKCJzY3NpJWQ6IElSUSVkIG5vdCBmcmVlOiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCBmYWQyMTA5Li43MTlhZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGVjLT5pcnEsIGN1bWFuYXNjc2lfMl9pbnRyLAotCQkJICBTQV9JTlRFUlJVUFQsICJjdW1hbmFzY3NpMiIsIGluZm8pOworCQkJICBJUlFGX0RJU0FCTEVELCAiY3VtYW5hc2NzaTIiLCBpbmZvKTsKIAlpZiAocmV0KSB7CiAJCXByaW50aygic2NzaSVkOiBJUlElZCBub3QgZnJlZTogJWRcbiIsCiAJCSAgICAgICBob3N0LT5ob3N0X25vLCBlYy0+aXJxLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCmluZGV4IDNkNjlmNmMuLmIyYzM0NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKQEAgLTM3Myw3ICszNzMsNyBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoZWMtPmlycSwgcG93ZXJ0ZWNzY3NpX2ludHIsCi0JCQkgIFNBX0lOVEVSUlVQVCwgInBvd2VydGVjIiwgaW5mbyk7CisJCQkgIElSUUZfRElTQUJMRUQsICJwb3dlcnRlYyIsIGluZm8pOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKCJzY3NpJWQ6IElSUSVkIG5vdCBmcmVlOiAlZFxuIiwKIAkJICAgICAgIGhvc3QtPmhvc3Rfbm8sIGVjLT5pcnEsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwppbmRleCA1NzI5NWJjZS4uMDA3YTE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCkBAIC01MjQsNyArNTI0LDYgQEAKICAgICB9CiB9CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaWYgTkRFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCBmNjc3YzVhLi5lMWJlNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTY1LDcgKzY1LDYgQEAKIAogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2RlZmluZSBOREVCVUcgKDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jIGIvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwppbmRleCAzZWU0ZDRkLi4wZWM0MWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMKQEAgLTI2MjUsMjkgKzI2MjUsMzIgQEAKIAl1bnNpZ25lZCBpbnQgYmFzZV9pbywgdG1wb3J0LCBlcnJvcixuOwogCXVuc2lnbmVkIGNoYXIgaG9zdF9pZDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IE5VTEw7Ci0Jc3RydWN0IGF0cF91bml0IGF0cF9kZXYsICpwOworCXN0cnVjdCBhdHBfdW5pdCAqYXRwZGV2LCAqcDsKIAl1bnNpZ25lZCBjaGFyIHNldHVwZGF0YVsyXVsxNl07CiAJaW50IGNvdW50ID0gMDsKLQkKKworCWF0cGRldiA9IGt6YWxsb2Moc2l6ZW9mKCphdHBkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF0cGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCXJldHVybiAtRUlPOworCQlnb3RvIGVycl9laW87CiAKICAgICAgICAgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImF0cDg3MHU6IHVzZSAzMmJpdCBETUEgbWFzay5cbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYXRwODcwdTogRE1BIG1hc2sgcmVxdWlyZWQgYnV0IG5vdCBhdmFpbGFibGUuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKwkJZ290byBlcnJfZWlvOwogICAgICAgICB9CiAKLQltZW1zZXQoJmF0cF9kZXYsIDAsIHNpemVvZiBhdHBfZGV2KTsKIAkvKgogCSAqIEl0J3MgcHJvYmFibHkgZWFzaWVyIHRvIHdlZWQgb3V0IHNvbWUgcmV2aXNpb25zIGxpa2UKIAkgKiB0aGlzIHRoYW4gdmlhIHRoZSBQQ0kgZGV2aWNlIHRhYmxlCiAJICovCiAJaWYgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMCkgewotCQllcnJvciA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmF0cF9kZXYuY2hpcF92ZXIpOwotCQlpZiAoYXRwX2Rldi5jaGlwX3ZlciA8IDIpCi0JCQlyZXR1cm4gLUVJTzsKKwkJZXJyb3IgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZhdHBkZXYtPmNoaXBfdmVyKTsKKwkJaWYgKGF0cGRldi0+Y2hpcF92ZXIgPCAyKQorCQkJZ290byBlcnJfZWlvOwogCX0KIAogCXN3aXRjaCAoZW50LT5kZXZpY2UpIHsKQEAgLTI2NTYsMTUgKzI2NTksMTUgQEAKIAljYXNlIEFUUDg4MF9ERVZJRDE6CQogCWNhc2UgQVRQODgwX0RFVklEMjoJCiAJY2FzZSBBVFA4ODVfREVWSUQ6CQotCQlhdHBfZGV2LmNoaXBfdmVyID0gMHgwNDsKKwkJYXRwZGV2LT5jaGlwX3ZlciA9IDB4MDQ7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCWJhc2VfaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJYmFzZV9pbyAmPSAweGZmZmZmZmY4OwotCQorCiAJaWYgKChlbnQtPmRldmljZSA9PSBBVFA4ODBfREVWSUQxKXx8KGVudC0+ZGV2aWNlID09IEFUUDg4MF9ERVZJRDIpKSB7Ci0JCWVycm9yID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmYXRwX2Rldi5jaGlwX3Zlcik7CisJCWVycm9yID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmYXRwZGV2LT5jaGlwX3Zlcik7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg4MCk7Ly9KQ0MwODI4MDMKIAogCQlob3N0X2lkID0gaW5iKGJhc2VfaW8gKyAweDM5KTsKQEAgLTI2NzIsMTcgKzI2NzUsMTcgQEAKIAogCQlwcmludGsoS0VSTl9JTkZPICIgICBBQ0FSRCBBRUMtNjcxNjAgUENJIFVsdHJhMyBMVkQgSG9zdCBBZGFwdGVyOiAlZCIKIAkJCSIgICAgSU86JXgsIElSUTolZC5cbiIsIGNvdW50LCBiYXNlX2lvLCBwZGV2LT5pcnEpOwotCQlhdHBfZGV2LmlvcG9ydFswXSA9IGJhc2VfaW8gKyAweDQwOwotCQlhdHBfZGV2LnBjaXBvcnRbMF0gPSBiYXNlX2lvICsgMHgyODsKLQkJYXRwX2Rldi5kZXZfaWQgPSBlbnQtPmRldmljZTsKLQkJYXRwX2Rldi5ob3N0X2lkWzBdID0gaG9zdF9pZDsKKwkJYXRwZGV2LT5pb3BvcnRbMF0gPSBiYXNlX2lvICsgMHg0MDsKKwkJYXRwZGV2LT5wY2lwb3J0WzBdID0gYmFzZV9pbyArIDB4Mjg7CisJCWF0cGRldi0+ZGV2X2lkID0gZW50LT5kZXZpY2U7CisJCWF0cGRldi0+aG9zdF9pZFswXSA9IGhvc3RfaWQ7CiAKIAkJdG1wb3J0ID0gYmFzZV9pbyArIDB4MjI7Ci0JCWF0cF9kZXYuc2NhbV9vbiA9IGluYih0bXBvcnQpOworCQlhdHBkZXYtPnNjYW1fb24gPSBpbmIodG1wb3J0KTsKIAkJdG1wb3J0ICs9IDB4MTM7Ci0JCWF0cF9kZXYuZ2xvYmFsX21hcFswXSA9IGluYih0bXBvcnQpOworCQlhdHBkZXYtPmdsb2JhbF9tYXBbMF0gPSBpbmIodG1wb3J0KTsKIAkJdG1wb3J0ICs9IDB4MDc7Ci0JCWF0cF9kZXYudWx0cmFfbWFwWzBdID0gaW53KHRtcG9ydCk7CisJCWF0cGRldi0+dWx0cmFfbWFwWzBdID0gaW53KHRtcG9ydCk7CiAKIAkJbiA9IDB4M2YwOTsKIG5leHRfZmJsa184ODA6CkBAIC0yNjk1LDYzICsyNjk4LDYzIEBACiAJCWlmIChpbmIoYmFzZV9pbyArIDB4MzApID09IDB4ZmYpCiAJCQlnb3RvIGZsYXNoX29rXzg4MDsKIAotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzApOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzEpOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzIpOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzMpOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzApOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzEpOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzIpOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzMpOwogCQlvdXR3KG4sIGJhc2VfaW8gKyAweDM0KTsKIAkJbiArPSAweDAwMDI7Ci0JCWF0cF9kZXYuc3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMCk7Ci0JCWF0cF9kZXYuc3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMSk7Ci0JCWF0cF9kZXYuc3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMik7Ci0JCWF0cF9kZXYuc3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMyk7CisJCWF0cGRldi0+c3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMCk7CisJCWF0cGRldi0+c3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMSk7CisJCWF0cGRldi0+c3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMik7CisJCWF0cGRldi0+c3BbMF1bbSsrXSA9IGluYihiYXNlX2lvICsgMHgzMyk7CiAJCW91dHcobiwgYmFzZV9pbyArIDB4MzQpOwogCQluICs9IDB4MDAwMjsKLQkJYXRwX2Rldi5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMwKTsKLQkJYXRwX2Rldi5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMxKTsKLQkJYXRwX2Rldi5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMyKTsKLQkJYXRwX2Rldi5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMzKTsKKwkJYXRwZGV2LT5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMwKTsKKwkJYXRwZGV2LT5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMxKTsKKwkJYXRwZGV2LT5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMyKTsKKwkJYXRwZGV2LT5zcFswXVttKytdID0gaW5iKGJhc2VfaW8gKyAweDMzKTsKIAkJb3V0dyhuLCBiYXNlX2lvICsgMHgzNCk7CiAJCW4gKz0gMHgwMDAyOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzApOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzEpOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzIpOwotCQlhdHBfZGV2LnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzMpOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzApOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzEpOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzIpOworCQlhdHBkZXYtPnNwWzBdW20rK10gPSBpbmIoYmFzZV9pbyArIDB4MzMpOwogCQluICs9IDB4MDAxODsKIAkJZ290byBuZXh0X2ZibGtfODgwOwogZmxhc2hfb2tfODgwOgogCQlvdXR3KDAsIGJhc2VfaW8gKyAweDM0KTsKLQkJYXRwX2Rldi51bHRyYV9tYXBbMF0gPSAwOwotCQlhdHBfZGV2LmFzeW5jWzBdID0gMDsKKwkJYXRwZGV2LT51bHRyYV9tYXBbMF0gPSAwOworCQlhdHBkZXYtPmFzeW5jWzBdID0gMDsKIAkJZm9yIChrID0gMDsgayA8IDE2OyBrKyspIHsKIAkJCW4gPSAxOwogCQkJbiA9IG4gPDwgazsKLQkJCWlmIChhdHBfZGV2LnNwWzBdW2tdID4gMSkgewotCQkJCWF0cF9kZXYudWx0cmFfbWFwWzBdIHw9IG47CisJCQlpZiAoYXRwZGV2LT5zcFswXVtrXSA+IDEpIHsKKwkJCQlhdHBkZXYtPnVsdHJhX21hcFswXSB8PSBuOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAoYXRwX2Rldi5zcFswXVtrXSA9PSAwKQotCQkJCQlhdHBfZGV2LmFzeW5jWzBdIHw9IG47CisJCQkJaWYgKGF0cGRldi0+c3BbMF1ba10gPT0gMCkKKwkJCQkJYXRwZGV2LT5hc3luY1swXSB8PSBuOwogIAkJCX0KIAkgCX0KLQkJYXRwX2Rldi5hc3luY1swXSA9IH4oYXRwX2Rldi5hc3luY1swXSk7Ci0JCW91dGIoYXRwX2Rldi5nbG9iYWxfbWFwWzBdLCBiYXNlX2lvICsgMHgzNSk7CisJCWF0cGRldi0+YXN5bmNbMF0gPSB+KGF0cGRldi0+YXN5bmNbMF0pOworCQlvdXRiKGF0cGRldi0+Z2xvYmFsX21hcFswXSwgYmFzZV9pbyArIDB4MzUpOwogIAogCQlzaHBudCA9IHNjc2lfaG9zdF9hbGxvYygmYXRwODcwdV90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBhdHBfdW5pdCkpOwogCQlpZiAoIXNocG50KQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIGVycl9ub21lbTsKIAogCQlwID0gKHN0cnVjdCBhdHBfdW5pdCAqKSZzaHBudC0+aG9zdGRhdGE7CiAKLQkJYXRwX2Rldi5ob3N0ID0gc2hwbnQ7Ci0JCWF0cF9kZXYucGRldiA9IHBkZXY7CisJCWF0cGRldi0+aG9zdCA9IHNocG50OworCQlhdHBkZXYtPnBkZXYgPSBwZGV2OwogCQlwY2lfc2V0X2RydmRhdGEocGRldiwgcCk7Ci0JCW1lbWNweShwLCAmYXRwX2Rldiwgc2l6ZW9mIGF0cF9kZXYpOworCQltZW1jcHkocCwgYXRwZGV2LCBzaXplb2YoKmF0cGRldikpOwogCQlpZiAoYXRwODcwdV9pbml0X3RhYmxlcyhzaHBudCkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSB0YWJsZXMgZm9yIEFjYXJkIGNvbnRyb2xsZXJcbiIpOwogCQkJZ290byB1bnJlZ2lzdGVyOwogCQl9CiAKLQkJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXRwODcwdV9pbnRyX2hhbmRsZSwgU0FfU0hJUlEsICJhdHA4ODBpIiwgc2hwbnQpKSB7CisJCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0cDg3MHVfaW50cl9oYW5kbGUsIElSUUZfU0hBUkVELCAiYXRwODgwaSIsIHNocG50KSkgewogIAkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIElSUSVkIGZvciBBY2FyZCBjb250cm9sbGVyLlxuIiwgcGRldi0+aXJxKTsKIAkJCWdvdG8gZnJlZV90YWJsZXM7CiAJCX0KQEAgLTI3OTgsMzEgKzI4MDEsMzEgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIiAgIEFDQVJEIEFFQy02NzE2MiBQQ0kgVWx0cmEzIExWRCBIb3N0IEFkYXB0ZXI6ICBJTzoleCwgSVJROiVkLlxuIgogCQkJICAgICAgICwgYmFzZV9pbywgcGRldi0+aXJxKTsKICAgICAgICAgCQotCQlhdHBfZGV2LnBkZXYgPSBwZGV2OwkKLQkJYXRwX2Rldi5kZXZfaWQgID0gZW50LT5kZXZpY2U7Ci0JCWF0cF9kZXYuYmFzZXBvcnQgPSBiYXNlX2lvOwotCQlhdHBfZGV2LmlvcG9ydFswXSA9IGJhc2VfaW8gKyAweDgwOwotCQlhdHBfZGV2LmlvcG9ydFsxXSA9IGJhc2VfaW8gKyAweGMwOwotCQlhdHBfZGV2LnBjaXBvcnRbMF0gPSBiYXNlX2lvICsgMHg0MDsKLQkJYXRwX2Rldi5wY2lwb3J0WzFdID0gYmFzZV9pbyArIDB4NTA7CisJCWF0cGRldi0+cGRldiA9IHBkZXY7CisJCWF0cGRldi0+ZGV2X2lkICA9IGVudC0+ZGV2aWNlOworCQlhdHBkZXYtPmJhc2Vwb3J0ID0gYmFzZV9pbzsKKwkJYXRwZGV2LT5pb3BvcnRbMF0gPSBiYXNlX2lvICsgMHg4MDsKKwkJYXRwZGV2LT5pb3BvcnRbMV0gPSBiYXNlX2lvICsgMHhjMDsKKwkJYXRwZGV2LT5wY2lwb3J0WzBdID0gYmFzZV9pbyArIDB4NDA7CisJCWF0cGRldi0+cGNpcG9ydFsxXSA9IGJhc2VfaW8gKyAweDUwOwogCQkJCQogCQlzaHBudCA9IHNjc2lfaG9zdF9hbGxvYygmYXRwODcwdV90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBhdHBfdW5pdCkpOwogCQlpZiAoIXNocG50KQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIGVycl9ub21lbTsKICAgICAgICAgCQogCQlwID0gKHN0cnVjdCBhdHBfdW5pdCAqKSZzaHBudC0+aG9zdGRhdGE7CiAgICAgICAgIAkKLQkJYXRwX2Rldi5ob3N0ID0gc2hwbnQ7Ci0JCWF0cF9kZXYucGRldiA9IHBkZXY7CisJCWF0cGRldi0+aG9zdCA9IHNocG50OworCQlhdHBkZXYtPnBkZXYgPSBwZGV2OwogCQlwY2lfc2V0X2RydmRhdGEocGRldiwgcCk7Ci0JCW1lbWNweShwLCAmYXRwX2Rldiwgc2l6ZW9mKHN0cnVjdCBhdHBfdW5pdCkpOworCQltZW1jcHkocCwgYXRwZGV2LCBzaXplb2Yoc3RydWN0IGF0cF91bml0KSk7CiAJCWlmIChhdHA4NzB1X2luaXRfdGFibGVzKHNocG50KSA8IDApCiAJCQlnb3RvIHVucmVnaXN0ZXI7CiAJCQkKICNpZmRlZiBFRF9EQkdQCQkKIAlwcmludGsoInJlcXVlc3RfaXJxKCkgc2hwbnQgJXAgaG9zdGRhdGEgJXBcbiIsIHNocG50LCBwKTsKICNlbmRpZgkgICAgICAgIAotCQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdHA4NzB1X2ludHJfaGFuZGxlLCBTQV9TSElSUSwgImF0cDg3MHUiLCBzaHBudCkpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXRwODcwdV9pbnRyX2hhbmRsZSwgSVJRRl9TSEFSRUQsICJhdHA4NzB1Iiwgc2hwbnQpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgSVJRIGZvciBBY2FyZCBjb250cm9sbGVyLlxuIik7CiAJCQlnb3RvIGZyZWVfdGFibGVzOwogCQl9CkBAIC0yOTc0LDQzICsyOTc3LDQzIEBACiAJCXByaW50ayhLRVJOX0lORk8gIiAgIEFDQVJEIEFFQy02NzFYIFBDSSBVbHRyYS9XIFNDU0ktMi8zIEhvc3QgQWRhcHRlcjogJWQgIgogCQkJIklPOiV4LCBJUlE6JWQuXG4iLCBjb3VudCwgYmFzZV9pbywgcGRldi0+aXJxKTsKIAotCQlhdHBfZGV2LmlvcG9ydFswXSA9IGJhc2VfaW87Ci0JCWF0cF9kZXYucGNpcG9ydFswXSA9IGJhc2VfaW8gKyAweDIwOwotCQlhdHBfZGV2LmRldl9pZCA9IGVudC0+ZGV2aWNlOworCQlhdHBkZXYtPmlvcG9ydFswXSA9IGJhc2VfaW87CisJCWF0cGRldi0+cGNpcG9ydFswXSA9IGJhc2VfaW8gKyAweDIwOworCQlhdHBkZXYtPmRldl9pZCA9IGVudC0+ZGV2aWNlOwogCQlob3N0X2lkICY9IDB4MDc7Ci0JCWF0cF9kZXYuaG9zdF9pZFswXSA9IGhvc3RfaWQ7CisJCWF0cGRldi0+aG9zdF9pZFswXSA9IGhvc3RfaWQ7CiAJCXRtcG9ydCA9IGJhc2VfaW8gKyAweDIyOwotCQlhdHBfZGV2LnNjYW1fb24gPSBpbmIodG1wb3J0KTsKKwkJYXRwZGV2LT5zY2FtX29uID0gaW5iKHRtcG9ydCk7CiAJCXRtcG9ydCArPSAweDBiOwotCQlhdHBfZGV2Lmdsb2JhbF9tYXBbMF0gPSBpbmIodG1wb3J0KyspOwotCQlhdHBfZGV2LnVsdHJhX21hcFswXSA9IGludyh0bXBvcnQpOworCQlhdHBkZXYtPmdsb2JhbF9tYXBbMF0gPSBpbmIodG1wb3J0KyspOworCQlhdHBkZXYtPnVsdHJhX21hcFswXSA9IGludyh0bXBvcnQpOwogCi0JCWlmIChhdHBfZGV2LnVsdHJhX21hcFswXSA9PSAwKSB7Ci0JCQlhdHBfZGV2LnNjYW1fb24gPSAweDAwOwotCQkJYXRwX2Rldi5nbG9iYWxfbWFwWzBdID0gMHgyMDsKLQkJCWF0cF9kZXYudWx0cmFfbWFwWzBdID0gMHhmZmZmOworCQlpZiAoYXRwZGV2LT51bHRyYV9tYXBbMF0gPT0gMCkgeworCQkJYXRwZGV2LT5zY2FtX29uID0gMHgwMDsKKwkJCWF0cGRldi0+Z2xvYmFsX21hcFswXSA9IDB4MjA7CisJCQlhdHBkZXYtPnVsdHJhX21hcFswXSA9IDB4ZmZmZjsKIAkJfQogCiAJCXNocG50ID0gc2NzaV9ob3N0X2FsbG9jKCZhdHA4NzB1X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGF0cF91bml0KSk7CiAJCWlmICghc2hwbnQpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gZXJyX25vbWVtOwogCiAJCXAgPSAoc3RydWN0IGF0cF91bml0ICopJnNocG50LT5ob3N0ZGF0YTsKIAkJCi0JCWF0cF9kZXYuaG9zdCA9IHNocG50OwotCQlhdHBfZGV2LnBkZXYgPSBwZGV2OworCQlhdHBkZXYtPmhvc3QgPSBzaHBudDsKKwkJYXRwZGV2LT5wZGV2ID0gcGRldjsKIAkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHApOwotCQltZW1jcHkocCwgJmF0cF9kZXYsIHNpemVvZiBhdHBfZGV2KTsKKwkJbWVtY3B5KHAsIGF0cGRldiwgc2l6ZW9mKCphdHBkZXYpKTsKIAkJaWYgKGF0cDg3MHVfaW5pdF90YWJsZXMoc2hwbnQpIDwgMCkKIAkJCWdvdG8gdW5yZWdpc3RlcjsKIAotCQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdHA4NzB1X2ludHJfaGFuZGxlLCBTQV9TSElSUSwgImF0cDg3MGkiLCBzaHBudCkpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXRwODcwdV9pbnRyX2hhbmRsZSwgSVJRRl9TSEFSRUQsICJhdHA4NzBpIiwgc2hwbnQpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBJUlElZCBmb3IgQWNhcmQgY29udHJvbGxlci5cbiIsIHBkZXYtPmlycSk7CiAJCQlnb3RvIGZyZWVfdGFibGVzOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2hwbnQtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlpZiAoYXRwX2Rldi5jaGlwX3ZlciA+IDB4MDcpIHsJLyogY2hlY2sgaWYgYXRwODc2IGNoaXAgdGhlbiBlbmFibGUgdGVybWluYXRvciAqLworCQlpZiAoYXRwZGV2LT5jaGlwX3ZlciA+IDB4MDcpIHsJLyogY2hlY2sgaWYgYXRwODc2IGNoaXAgdGhlbiBlbmFibGUgdGVybWluYXRvciAqLwogCQkJdG1wb3J0ID0gYmFzZV9pbyArIDB4M2U7CiAJCQlvdXRiKDB4MDAsIHRtcG9ydCk7CiAJCX0KQEAgLTMwNDQsNyArMzA0Nyw3IEBACiAJCW91dGIoKGluYih0bXBvcnQpICYgMHhlZiksIHRtcG9ydCk7CiAJCXRtcG9ydCsrOwogCQlvdXRiKChpbmIodG1wb3J0KSB8IDB4MjApLCB0bXBvcnQpOwotCQlpZiAoYXRwX2Rldi5jaGlwX3ZlciA9PSA0KQorCQlpZiAoYXRwZGV2LT5jaGlwX3ZlciA9PSA0KQogCQkJc2hwbnQtPm1heF9pZCA9IDE2OwogCQllbHNlCQkKIAkJCXNocG50LT5tYXhfaWQgPSA4OwpAQCAtMzA5Myw2ICszMDk2LDEyIEBACiAJcHJpbnRrKCJhdHA4NzB1X3Byb2I6dW5yZWdpc3RlclxuIik7CiAJc2NzaV9ob3N0X3B1dChzaHBudCk7CiAJcmV0dXJuIC0xOwkJCitlcnJfZWlvOgorCWtmcmVlKGF0cGRldik7CisJcmV0dXJuIC1FSU87CitlcnJfbm9tZW06CisJa2ZyZWUoYXRwZGV2KTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogVGhlIGFib3J0IGNvbW1hbmQgZG9lcyBub3QgbGVhdmUgdGhlIGRldmljZSBpbiBhIGNsZWFuIHN0YXRlIHdoZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmx6MTIzMC5jIGIvZHJpdmVycy9zY3NpL2JsejEyMzAuYwppbmRleCAzODY3YWMyLi4zMjlhOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmx6MTIzMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibHoxMjMwLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAJCWVzcC0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwogCQllc3AtPnNsb3QgPSBib2FyZCtSRUFMX0JMWjEyMzBfRVNQX0FERFI7Ci0JCWlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBTQV9TSElSUSwKKwkJaWYgKHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZXNwX2ludHIsIElSUUZfU0hBUkVELAogCQkJCSAiQmxpenphcmQgMTIzMCBTQ1NJIElWIiwgZXNwLT5laG9zdCkpCiAJCQlnb3RvIGVycl9vdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibHoyMDYwLmMgYi9kcml2ZXJzL3Njc2kvYmx6MjA2MC5jCmluZGV4IDRlYmU2OWUuLmI2YzEzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibHoyMDYwLmMKKysrIGIvZHJpdmVycy9zY3NpL2JsejIwNjAuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWVzcC0+ZXNwX2NvbW1hbmRfZHZtYSA9IHZpcnRfdG9fYnVzKCh2b2lkICopY21kX2J1ZmZlcik7CiAKIAkJZXNwLT5pcnEgPSBJUlFfQU1JR0FfUE9SVFM7Ci0JCXJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZXNwX2ludHIsIFNBX1NISVJRLAorCQlyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBJUlFGX1NIQVJFRCwKIAkJCSAgICAiQmxpenphcmQgMjA2MCBTQ1NJIiwgZXNwLT5laG9zdCk7CiAKIAkJLyogRmlndXJlIG91dCBvdXIgc2NzaSBJRCBvbiB0aGUgYnVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IGQ5YWJkMTYuLmY2Y2FhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC03LDcgKzcsNiBAQAogCiAjZGVmaW5lIFZFUlNJT04gIjAuMjUiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwppbmRleCBkOTJkNTA0Li5kZGRkMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCkBAIC03LDcgKzcsNiBAQAogICogQWRkaXRpb25zIGZvciBTUEMtMyBUMTAvMTQxNi1EIFJldiAyMSAyMiBTZXB0IDIwMDQsIEQuIEdpbGJlcnQgMjAwNDEwMjUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybS5jIGIvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm0uYwppbmRleCBhNGE0ZmFjLi43YzdjZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeWJlcnN0b3JtLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQllc3AtPmVzcF9jb21tYW5kX2R2bWEgPSB2aXJ0X3RvX2J1cygodm9pZCAqKWNtZF9idWZmZXIpOwogCiAJCWVzcC0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwotCQlyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBTQV9TSElSUSwKKwkJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBlc3BfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkgICAgIkN5YmVyU3Rvcm0gU0NTSSIsIGVzcC0+ZWhvc3QpOwogCQkvKiBGaWd1cmUgb3V0IG91ciBzY3NpIElEIG9uIHRoZSBidXMgKi8KIAkJLyogVGhlIERNQSBjb25kIGZsYWcgY29udGFpbnMgYSBoYXJkY29kZWQganVtcGVyIGJpdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm1JSS5jIGIvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm1JSS5jCmluZGV4IDNhODAzZDcuLmQ4OGNiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeWJlcnN0b3JtSUkuYworKysgYi9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybUlJLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQllc3AtPmVzcF9jb21tYW5kX2R2bWEgPSB2aXJ0X3RvX2J1cygodm9pZCAqKWNtZF9idWZmZXIpOwogCiAJCWVzcC0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwotCQlyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBTQV9TSElSUSwKKwkJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBlc3BfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkgICAgIkN5YmVyU3Rvcm0gU0NTSSBNayBJSSIsIGVzcC0+ZWhvc3QpOwogCiAJCS8qIEZpZ3VyZSBvdXQgb3VyIHNjc2kgSUQgb24gdGhlIGJ1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCmluZGV4IDU4YjA3NDguLmZmMmIxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYworKysgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKQEAgLTQ1NjIsNyArNDU2Miw3IEBACiAJYWNiLT5pb19wb3J0X2Jhc2UgPSBpb19wb3J0OwogCWFjYi0+aW9fcG9ydF9sZW4gPSBpb19wb3J0X2xlbjsKIAkKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBkYzM5NXhfaW50ZXJydXB0LCBTQV9TSElSUSwgREMzOTVYX05BTUUsIGFjYikpIHsKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBkYzM5NXhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgREMzOTVYX05BTUUsIGFjYikpIHsKIAkgICAgCS8qIHJlbGVhc2UgdGhlIHJlZ2lvbiB3ZSBqdXN0IGNsYWltZWQgKi8KIAkJZHByaW50a2woS0VSTl9JTkZPLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIElSUVxuIik7CiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RlY19lc3AuYyBiL2RyaXZlcnMvc2NzaS9kZWNfZXNwLmMKaW5kZXggYTM1ZWU0My4uZWIzMjA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RlY19lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvZGVjX2VzcC5jCkBAIC0yMDIsMTkgKzIwMiwxOSBAQAogCiAJCWVzcF9pbml0aWFsaXplKGVzcCk7CiAKLQkJaWYgKHJlcXVlc3RfaXJxKGVzcC0+aXJxLCBlc3BfaW50ciwgU0FfSU5URVJSVVBULAorCQlpZiAocmVxdWVzdF9pcnEoZXNwLT5pcnEsIGVzcF9pbnRyLCBJUlFGX0RJU0FCTEVELAogCQkJCSJuY3I1M2M5NCIsIGVzcC0+ZWhvc3QpKQogCQkJZ290byBlcnJfZGVhbGxvYzsKIAkJaWYgKHJlcXVlc3RfaXJxKGRlY19pbnRlcnJ1cHRbREVDX0lSUV9BU0NfTUVSUl0sCi0JCQkJc2NzaV9kbWFfbWVycl9pbnQsIFNBX0lOVEVSUlVQVCwKKwkJCQlzY3NpX2RtYV9tZXJyX2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJCQkibmNyNTNjOTQgZXJyb3IiLCBlc3AtPmVob3N0KSkKIAkJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCQlpZiAocmVxdWVzdF9pcnEoZGVjX2ludGVycnVwdFtERUNfSVJRX0FTQ19FUlJdLAotCQkJCXNjc2lfZG1hX2Vycl9pbnQsIFNBX0lOVEVSUlVQVCwKKwkJCQlzY3NpX2RtYV9lcnJfaW50LCBJUlFGX0RJU0FCTEVELAogCQkJCSJuY3I1M2M5NCBvdmVycnVuIiwgZXNwLT5laG9zdCkpCiAJCQlnb3RvIGVycl9mcmVlX2lycV9tZXJyOwogCQlpZiAocmVxdWVzdF9pcnEoZGVjX2ludGVycnVwdFtERUNfSVJRX0FTQ19ETUFdLAotCQkJCXNjc2lfZG1hX2ludCwgU0FfSU5URVJSVVBULAorCQkJCXNjc2lfZG1hX2ludCwgSVJRRl9ESVNBQkxFRCwKIAkJCQkibmNyNTNjOTQgZG1hIiwgZXNwLT5laG9zdCkpCiAJCQlnb3RvIGVycl9mcmVlX2lycV9lcnI7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQAogCQkJZXNwLT5kbWFfbW11X3JlbGVhc2Vfc2NzaV9zZ2wgPSAwOwogCQkJZXNwLT5kbWFfYWR2YW5jZV9zZyA9IDA7CiAKLSAJCQlpZiAocmVxdWVzdF9pcnEoZXNwLT5pcnEsIGVzcF9pbnRyLCBTQV9JTlRFUlJVUFQsCisgCQkJaWYgKHJlcXVlc3RfaXJxKGVzcC0+aXJxLCBlc3BfaW50ciwgSVJRRl9ESVNBQkxFRCwKICAJCQkJCSAiUE1BWl9BQSIsIGVzcC0+ZWhvc3QpKSB7CiAgCQkJCWVzcF9kZWFsbG9jYXRlKGVzcCk7CiAgCQkJCXJlbGVhc2VfdGNfY2FyZChzbG90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kbXgzMTkxZC5jIGIvZHJpdmVycy9zY3NpL2RteDMxOTFkLmMKaW5kZXggMzhlNDAxMC4uODc5YTI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RteDMxOTFkLmMKKysrIGIvZHJpdmVycy9zY3NpL2RteDMxOTFkLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogCU5DUjUzODBfaW5pdChzaG9zdCwgRkxBR19OT19QU0VVRE9fRE1BIHwgRkxBR19EVEMzMTgxRSk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBOQ1I1MzgwX2ludHIsIFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIE5DUjUzODBfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkJRE1YMzE5MURfRFJJVkVSX05BTUUsIHNob3N0KSkgewogCQkvKgogCQkgKiBTdGVhbSBwb3dlcmVkIHNjc2kgY29udHJvbGxlcnMgcnVuIHdpdGhvdXQgYW4gSVJRIGFueXdheQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdC9kcHRpX2kyby5oIGIvZHJpdmVycy9zY3NpL2RwdC9kcHRpX2kyby5oCmluZGV4IGE5NTg1ZjUuLmQ4NGEyODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHQvZHB0aV9pMm8uaAorKysgYi9kcml2ZXJzL3Njc2kvZHB0L2RwdGlfaTJvLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4gLyogTmVlZGVkIGZvciBNVVRFWCBpbml0IG1hY3JvcyAqLwogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKaW5kZXggYjFiNzA0YS4uZTEzMzczMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYworKysgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCkBAIC0xMDA5LDcgKzEwMDksNyBAQAogCQlwcmludGsoS0VSTl9JTkZPIiAgICAgQkFSMSAlcCAtIHNpemU9ICV4XG4iLG1zZ19hZGRyX3ZpcnQsaGJhX21hcDFfYXJlYV9zaXplKTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEgKHBEZXYtPmlycSwgYWRwdF9pc3IsIFNBX1NISVJRLCBwSGJhLT5uYW1lLCBwSGJhKSkgeworCWlmIChyZXF1ZXN0X2lycSAocERldi0+aXJxLCBhZHB0X2lzciwgSVJRRl9TSEFSRUQsIHBIYmEtPm5hbWUsIHBIYmEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiIlczogQ291bGRuJ3QgcmVnaXN0ZXIgSVJRICVkXG4iLCBwSGJhLT5uYW1lLCBwRGV2LT5pcnEpOwogCQlhZHB0X2kyb19kZWxldGVfaGJhKHBIYmEpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kdGMuYyBiL2RyaXZlcnMvc2NzaS9kdGMuYwppbmRleCBjNTEwOGM4Li4wZDU3MTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHRjLmMKKysrIGIvZHJpdmVycy9zY3NpL2R0Yy5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAkJLyogV2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQsIGl0IHdpbGwgc29tZXRpbWVzIGhhbmcgd2hlbiBkb2luZyBoZWF2eQogCQkgKiByZWFkcy4gU28gYmV0dGVyIG5vdCBlbmFibGUgdGhlbSB1bnRpbCBJIGZpbmdlciBpdCBvdXQuICovCiAJCWlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpCi0JCQlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgZHRjX2ludHIsIFNBX0lOVEVSUlVQVCwgImR0YyIsIGluc3RhbmNlKSkgeworCQkJaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGR0Y19pbnRyLCBJUlFGX0RJU0FCTEVELCAiZHRjIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwogCQkJCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGEuYyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKaW5kZXggMDU5ZWVlZS4uYTVmZjQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VhdGEuYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCkBAIC00NzcsNyArNDc3LDYgQEAKICAqICB0aGUgZHJpdmVyIHNldHMgaG9zdC0+d2lzaF9ibG9jayA9IDEgZm9yIGFsbCBJU0EgYm9hcmRzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTEyMjIsNyArMTIyMSw3IEBACiAKIAkvKiBCb2FyZCBkZXRlY3RlZCwgYWxsb2NhdGUgaXRzIElSUSAqLwogCWlmIChyZXF1ZXN0X2lycShpcnEsIGRvX2ludGVycnVwdF9oYW5kbGVyLAotCQkJU0FfSU5URVJSVVBUIHwgKChzdWJ2ZXJzaW9uID09IEVTQSkgPyBTQV9TSElSUSA6IDApLAorCQkJSVJRRl9ESVNBQkxFRCB8ICgoc3VidmVyc2lvbiA9PSBFU0EpID8gSVJRRl9TSEFSRUQgOiAwKSwKIAkJCWRyaXZlcl9uYW1lLCAodm9pZCAqKSZzaGFbal0pKSB7CiAJCXByaW50aygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIGRldGFjaGluZy5cbiIsIG5hbWUsCiAJCSAgICAgICBpcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGFfcGlvLmMgYi9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwppbmRleCAyM2JlYjQ4Li43NzFiMDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwpAQCAtNDYsNyArNDYsNiBAQAogICogIGxhc3QgY2hhbmdlOiAyMDAyLzExLzAyICAgICAgICAgICAgICAgT1M6IExpbnV4IDIuNS40NSAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC03MzIsNyArNzMxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXJlZ19JUlFbZ2MtPklSUV0pIHsJLyogSW50ZXJydXB0IGFscmVhZHkgcmVnaXN0ZXJlZCA/ICovCi0JCWlmICghcmVxdWVzdF9pcnEoZ2MtPklSUSwgZG9fZWF0YV9waW9faW50X2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwgIkVBVEEtUElPIiwgc2gpKSB7CisJCWlmICghcmVxdWVzdF9pcnEoZ2MtPklSUSwgZG9fZWF0YV9waW9faW50X2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJFQVRBLVBJTyIsIHNoKSkgewogCQkJcmVnX0lSUVtnYy0+SVJRXSsrOwogCQkJaWYgKCFnYy0+SVJRX1RSKQogCQkJCXJlZ19JUlFMW2djLT5JUlFdID0gMTsJLyogSVJRIGlzIGVkZ2UgdHJpZ2dlcmVkICovCkBAIC05NjYsNyArOTY1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPD0gTUFYSVJROyBpKyspCiAJCWlmIChyZWdfSVJRW2ldKQotCQkJcmVxdWVzdF9pcnEoaSwgZG9fZWF0YV9waW9faW50X2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwgIkVBVEEtUElPIiwgTlVMTCk7CisJCQlyZXF1ZXN0X2lycShpLCBkb19lYXRhX3Bpb19pbnRfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgIkVBVEEtUElPIiwgTlVMTCk7CiAKIAlIQkFfcHRyID0gZmlyc3RfSEJBOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwLmMgYi9kcml2ZXJzL3Njc2kvZXNwLmMKaW5kZXggZGRiNTEyNC4uMTA1NzNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3AuYwpAQCAtMTIsNyArMTIsNiBAQAogICogMykgQWRkIHRhZ2dlZCBxdWV1ZWluZy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNzc5LDcgKzc3OCw3IEBACiAJICogc2FuZWx5IG1haW50YWluLgogCSAqLwogCWlmIChyZXF1ZXN0X2lycShlc3AtPmVob3N0LT5pcnEsIGVzcF9pbnRyLAotCQkJU0FfU0hJUlEsICJFU1AgU0NTSSIsIGVzcCkpIHsKKwkJCUlSUUZfU0hBUkVELCAiRVNQIFNDU0kiLCBlc3ApKSB7CiAJCXByaW50aygiZXNwJWQ6IENhbm5vdCBhY3F1aXJlIGlycSBsaW5lXG4iLAogCQkgICAgICAgZXNwLT5lc3BfaWQpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmFzdGxhbmUuYyBiL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCmluZGV4IDhhZTljNDAuLjJhMWM1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAogCQllc3AtPmlycSA9IElSUV9BTUlHQV9QT1JUUzsKIAkJZXNwLT5zbG90ID0gYm9hcmQrRkFTVExBTkVfRVNQX0FERFI7Ci0JCWlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBTQV9TSElSUSwKKwkJaWYgKHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZXNwX2ludHIsIElSUUZfU0hBUkVELAogCQkJCSJGYXN0bGFuZSBTQ1NJIiwgZXNwLT5laG9zdCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhc3RsYW5lOiBDb3VsZCBub3QgZ2V0IElSUSVkLCBhYm9ydGluZy5cbiIsIElSUV9BTUlHQV9QT1JUUyk7CiAJCQlnb3RvIGVycl91bm1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY2FsLmMgYi9kcml2ZXJzL3Njc2kvZmNhbC5jCmluZGV4IDAzNDE2NTQuLjdmODkxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY2FsLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZjYWwuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIENPTkZJR19LTU9ECiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmRfbWNzLmMgYi9kcml2ZXJzL3Njc2kvZmRfbWNzLmMKaW5kZXggNzBhMTYwNi4uZGRlM2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZkX21jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9mZF9tY3MuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJCQkJbWNhX3NldF9hZGFwdGVyX25hbWUoc2xvdCAtIDEsIGZkX21jc19hZGFwdGVyc1tsb29wXS5uYW1lKTsKIAogCQkJCS8qIGNoZWNrIGlycS9yZWdpb24gKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBmZF9tY3NfaW50ciwgU0FfU0hJUlEsICJmZF9tY3MiLCBob3N0cykpIHsKKwkJCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBmZF9tY3NfaW50ciwgSVJRRl9TSEFSRUQsICJmZF9tY3MiLCBob3N0cykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICJmZF9tY3M6IGludGVycnVwdCBpcyBub3QgYXZhaWxhYmxlLCBza2lwcGluZy4uLlxuIik7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mZG9tYWluLmMgYi9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jCmluZGV4IGUxNjAxM2YuLmIwNjk0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mZG9tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zkb21haW4uYwpAQCAtMjY2LDcgKzI2Niw2IEBACiAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTk1MCw3ICs5NDksNyBAQAogICAgICAgLyogUmVnaXN0ZXIgdGhlIElSUSB3aXRoIHRoZSBrZXJuZWwgKi8KIAogICAgICAgcmV0Y29kZSA9IHJlcXVlc3RfaXJxKCBpbnRlcnJ1cHRfbGV2ZWwsCi0JCQkgICAgIGRvX2Zkb21haW5fMTZ4MF9pbnRyLCBwZGV2P1NBX1NISVJROjAsICJmZG9tYWluIiwgc2hwbnQpOworCQkJICAgICBkb19mZG9tYWluXzE2eDBfaW50ciwgcGRldj9JUlFGX1NIQVJFRDowLCAiZmRvbWFpbiIsIHNocG50KTsKIAogICAgICAgaWYgKHJldGNvZGUgPCAwKSB7CiAJIGlmIChyZXRjb2RlID09IC1FSU5WQUwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYwppbmRleCA1ZjMxM2M5Li42N2YxMTAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYwpAQCAtOTEsNyArOTEsNiBAQAogI2RlZmluZSBBVVRPUFJPQkVfSVJRCiAjZGVmaW5lIEFVVE9TRU5TRQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzQzQwMAogI2RlZmluZSBOQ1I1M0M0MDBfUFNFVURPX0RNQSAxCkBAIC00NjIsNyArNDYxLDcgQEAKIAkJCWluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgMHhmZmZmKTsKIAogCQlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKQotCQkJaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGdlbmVyaWNfTkNSNTM4MF9pbnRyLCBTQV9JTlRFUlJVUFQsICJOQ1I1MzgwIiwgaW5zdGFuY2UpKSB7CisJCQlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgZ2VuZXJpY19OQ1I1MzgwX2ludHIsIElSUUZfRElTQUJMRUQsICJOQ1I1MzgwIiwgaW5zdGFuY2UpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKIAkJCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaCBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaAppbmRleCBkNjBhODljLi5kZjBiM2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKKysrIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCkBAIC0zMiw3ICszMiw2IEBACiAjaWZuZGVmIEdFTkVSSUNfTkNSNTM4MF9ICiAjZGVmaW5lIEdFTkVSSUNfTkNSNTM4MF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBHRU5FUklDX05DUjUzODBfUFVCTElDX1JFTEVBU0UgMQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCA3NjA3MWExLi40M2FmZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTQzNTAsNyArNDM1MCw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnRrKCJDb25maWd1cmluZyBHRFQtSVNBIEhBIGF0IEJJT1MgMHglMDVYIElSUSAldSBEUlEgJXVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzYV9iaW9zLGhhLT5pcnEsaGEtPmRycSk7CiAKLSAgICAgICAgICAgICAgICBpZiAocmVxdWVzdF9pcnEoaGEtPmlycSxnZHRoX2ludGVycnVwdCxTQV9JTlRFUlJVUFQsImdkdGgiLGhhKSkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0X2lycShoYS0+aXJxLGdkdGhfaW50ZXJydXB0LElSUUZfRElTQUJMRUQsImdkdGgiLGhhKSkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1JU0E6IFVuYWJsZSB0byBhbGxvY2F0ZSBJUlFcbiIpOwogICAgICAgICAgICAgICAgICAgICBzY3NpX3VucmVnaXN0ZXIoc2hwKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC00NDc2LDcgKzQ0NzYsNyBAQAogICAgICAgICAgICAgICAgIHByaW50aygiQ29uZmlndXJpbmcgR0RULUVJU0EgSEEgYXQgU2xvdCAlZCBJUlEgJXVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGVpc2Ffc2xvdD4+MTIsaGEtPmlycSk7CiAKLSAgICAgICAgICAgICAgICBpZiAocmVxdWVzdF9pcnEoaGEtPmlycSxnZHRoX2ludGVycnVwdCxTQV9JTlRFUlJVUFQsImdkdGgiLGhhKSkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0X2lycShoYS0+aXJxLGdkdGhfaW50ZXJydXB0LElSUUZfRElTQUJMRUQsImdkdGgiLGhhKSkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1FSVNBOiBVbmFibGUgdG8gYWxsb2NhdGUgSVJRXG4iKTsKICAgICAgICAgICAgICAgICAgICAgc2NzaV91bnJlZ2lzdGVyKHNocCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDYwMyw3ICs0NjAzLDcgQEAKICAgICAgICAgICAgICAgIHBjaXN0cltjdHJdLmJ1cyxQQ0lfU0xPVChwY2lzdHJbY3RyXS5kZXZpY2VfZm4pLGhhLT5pcnEpOwogCiAgICAgICAgIGlmIChyZXF1ZXN0X2lycShoYS0+aXJxLCBnZHRoX2ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgImdkdGgiLCBoYSkpCisgICAgICAgICAgICAgICAgICAgICAgICBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiZ2R0aCIsIGhhKSkKICAgICAgICAgewogICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBVbmFibGUgdG8gYWxsb2NhdGUgSVJRXG4iKTsKICAgICAgICAgICAgIHNjc2lfdW5yZWdpc3RlcihzaHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2d2cDExLmMgYi9kcml2ZXJzL3Njc2kvZ3ZwMTEuYwppbmRleCA1YjE1NDQ5Li5hMGQ4MzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ3ZwMTEuYworKysgYi9kcml2ZXJzL3Njc2kvZ3ZwMTEuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCSAgICAgKGVwYyAmIEdWUF9TQ1NJQ0xLTUFTSykgPyBXRDMzQzkzX0ZTXzhfMTAKIAkJCQkJICAgICA6IFdEMzNDOTNfRlNfMTJfMTUpOwogCi0JcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBndnAxMV9pbnRyLCBTQV9TSElSUSwgIkdWUDExIFNDU0kiLAorCXJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZ3ZwMTFfaW50ciwgSVJRRl9TSEFSRUQsICJHVlAxMSBTQ1NJIiwKIAkJICAgIGluc3RhbmNlKTsKIAlETUEoaW5zdGFuY2UpLT5DTlRSID0gR1ZQMTFfRE1BQ19JTlRfRU5BQkxFOwogCW51bV9ndnAxMSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IGY3NzgwODMuLmFiMmY4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTEzMDQsNyArMTMwNCw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBob3N0KTsKIAotCWlmIChyZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgaHB0aW9wX2ludHIsIFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgaHB0aW9wX2ludHIsIElSUUZfU0hBUkVELAogCQkJCQlkcml2ZXJfbmFtZSwgaGJhKSkgewogCQlwcmludGsoS0VSTl9FUlIgInNjc2klZDogcmVxdWVzdCBpcnEgJWQgZmFpbGVkXG4iLAogCQkJCQloYmEtPmhvc3QtPmhvc3Rfbm8sIHBjaWRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuYwppbmRleCA0OTdmNjY0Li4yYmUxZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xNTExLDcgKzE1MTAsNyBAQAogI2VuZGlmCiAKIAkvKiBnZXQgaW50ZXJydXB0IHJlcXVlc3QgbGV2ZWwgKi8KLQlpZiAocmVxdWVzdF9pcnEoSU1fSVJRLCBpbnRlcnJ1cHRfaGFuZGxlciwgU0FfU0hJUlEsICJpYm1tY2FzY3NpIiwgaG9zdHMpKSB7CisJaWYgKHJlcXVlc3RfaXJxKElNX0lSUSwgaW50ZXJydXB0X2hhbmRsZXIsIElSUUZfU0hBUkVELCAiaWJtbWNhc2NzaSIsIGhvc3RzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIklCTSBNQ0EgU0NTSTogVW5hYmxlIHRvIGdldCBzaGFyZWQgSVJRICVkLlxuIiwgSU1fSVJRKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCkBAIC0xNjM2LDcgKzE2MzUsNyBAQAogCQkJCS8qIElSUTExIGlzIHVzZWQgYnkgU0NTSS0yIEYvVyBBZGFwdGVyL0EgKi8KIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiSUJNIE1DQSBTQ1NJOiBTQ1NJLTIgRi9XIGFkYXB0ZXIgbmVlZHMgSVJRIDExLlxuIik7CiAJCQkJLyogZ2V0IGludGVycnVwdCByZXF1ZXN0IGxldmVsICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKElNX0lSUV9GVywgaW50ZXJydXB0X2hhbmRsZXIsIFNBX1NISVJRLCAiaWJtbWNhc2NzaSIsIGhvc3RzKSkgeworCQkJCWlmIChyZXF1ZXN0X2lycShJTV9JUlFfRlcsIGludGVycnVwdF9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgImlibW1jYXNjc2kiLCBob3N0cykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICJJQk0gTUNBIFNDU0k6IFVuYWJsZSB0byBnZXQgc2hhcmVkIElSUSAlZC5cbiIsIElNX0lSUV9GVyk7CiAJCQkJfSBlbHNlCiAJCQkJCUlSUTExX3JlZ2lzdGVyZWQrKzsKQEAgLTE2OTcsNyArMTY5Niw3IEBACiAJCQkJLyogSVJRMTEgaXMgdXNlZCBieSBTQ1NJLTIgRi9XIEFkYXB0ZXIvQSAqLwogCQkJCXByaW50ayhLRVJOX0RFQlVHICAiSUJNIE1DQSBTQ1NJOiBTQ1NJLTIgRi9XIGFkYXB0ZXIgbmVlZHMgSVJRIDExLlxuIik7CiAJCQkJLyogZ2V0IGludGVycnVwdCByZXF1ZXN0IGxldmVsICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKElNX0lSUV9GVywgaW50ZXJydXB0X2hhbmRsZXIsIFNBX1NISVJRLCAiaWJtbWNhc2NzaSIsIGhvc3RzKSkKKwkJCQlpZiAocmVxdWVzdF9pcnEoSU1fSVJRX0ZXLCBpbnRlcnJ1cHRfaGFuZGxlciwgSVJRRl9TSEFSRUQsICJpYm1tY2FzY3NpIiwgaG9zdHMpKQogCQkJCQlwcmludGsoS0VSTl9FUlIgIklCTSBNQ0EgU0NTSTogVW5hYmxlIHRvIGdldCBzaGFyZWQgSVJRICVkLlxuIiwgSU1fSVJRX0ZXKTsKIAkJCQllbHNlCiAJCQkJCUlSUTExX3JlZ2lzdGVyZWQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggOTQ0ZmMxMi4uNjY5ZWE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTUzNSw2ICs1MzUsNyBAQAogCQkJCSAgIHN0cnVjdCBpYm12c2NzaV9ob3N0X2RhdGEgKmhvc3RkYXRhKQogewogCXU2NCAqY3JxX2FzX3U2NCA9ICh1NjQgKikgJmV2dF9zdHJ1Y3QtPmNycTsKKwlpbnQgcmVxdWVzdF9zdGF0dXM7CiAJaW50IHJjOwogCiAJLyogSWYgd2UgaGF2ZSBleGhhdXN0ZWQgb3VyIHJlcXVlc3QgbGltaXQsIGp1c3QgZmFpbCB0aGlzIHJlcXVlc3QuCkBAIC01NDIsOSArNTQzLDE4IEBACiAJICogKHN1Y2ggYXMgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3RzKSB0aGF0IHRoZSBtaWQgbGF5ZXIgbWF5IHRoaW5rIHdlCiAJICogY2FuIGhhbmRsZSBtb3JlIHJlcXVlc3RzIChjYW5fcXVldWUpIHdoZW4gd2UgYWN0dWFsbHkgY2FuJ3QKIAkgKi8KLQlpZiAoKGV2dF9zdHJ1Y3QtPmNycS5mb3JtYXQgPT0gVklPU1JQX1NSUF9GT1JNQVQpICYmCi0JICAgIChhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCkgPCAwKSkKLQkJZ290byBzZW5kX2Vycm9yOworCWlmIChldnRfc3RydWN0LT5jcnEuZm9ybWF0ID09IFZJT1NSUF9TUlBfRk9STUFUKSB7CisJCXJlcXVlc3Rfc3RhdHVzID0KKwkJCWF0b21pY19kZWNfaWZfcG9zaXRpdmUoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0KTsKKwkJLyogSWYgcmVxdWVzdCBsaW1pdCB3YXMgLTEgd2hlbiB3ZSBzdGFydGVkLCBpdCBpcyBub3cgZXZlbgorCQkgKiBsZXNzIHRoYW4gdGhhdAorCQkgKi8KKwkJaWYgKHJlcXVlc3Rfc3RhdHVzIDwgLTEpCisJCQlnb3RvIHNlbmRfZXJyb3I7CisJCS8qIE90aGVyd2lzZSwgaWYgd2UgaGF2ZSBydW4gb3V0IG9mIHJlcXVlc3RzICovCisJCWVsc2UgaWYgKHJlcXVlc3Rfc3RhdHVzIDwgMCkKKwkJCWdvdG8gc2VuZF9idXN5OworCX0KIAogCS8qIENvcHkgdGhlIElVIGludG8gdGhlIHRyYW5zZmVyIGFyZWEgKi8KIAkqZXZ0X3N0cnVjdC0+eGZlcl9pdSA9IGV2dF9zdHJ1Y3QtPml1OwpAQCAtNTY3LDExICs1NzcsMjMgQEAKIAogCXJldHVybiAwOwogCi0gc2VuZF9lcnJvcjoKKyBzZW5kX2J1c3k6CiAJdW5tYXBfY21kX2RhdGEoJmV2dF9zdHJ1Y3QtPml1LnNycC5jbWQsIGV2dF9zdHJ1Y3QsIGhvc3RkYXRhLT5kZXYpOwogCiAJZnJlZV9ldmVudF9zdHJ1Y3QoJmhvc3RkYXRhLT5wb29sLCBldnRfc3RydWN0KTsKICAJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKyBzZW5kX2Vycm9yOgorCXVubWFwX2NtZF9kYXRhKCZldnRfc3RydWN0LT5pdS5zcnAuY21kLCBldnRfc3RydWN0LCBob3N0ZGF0YS0+ZGV2KTsKKworCWlmIChldnRfc3RydWN0LT5jbW5kICE9IE5VTEwpIHsKKwkJZXZ0X3N0cnVjdC0+Y21uZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQlldnRfc3RydWN0LT5jbW5kX2RvbmUoZXZ0X3N0cnVjdC0+Y21uZCk7CisJfSBlbHNlIGlmIChldnRfc3RydWN0LT5kb25lKQorCQlldnRfc3RydWN0LT5kb25lKGV2dF9zdHJ1Y3QpOworCisJZnJlZV9ldmVudF9zdHJ1Y3QoJmhvc3RkYXRhLT5wb29sLCBldnRfc3RydWN0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMTg0LDI3ICsxMjA2LDM3IEBACiAJCXJldHVybjsKIAljYXNlIDB4RkY6CS8qIEh5cGVydmlzb3IgdGVsbGluZyB1cyB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KIAkJc2NzaV9ibG9ja19yZXF1ZXN0cyhob3N0ZGF0YS0+aG9zdCk7CisJCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAwKTsKIAkJaWYgKGNycS0+Zm9ybWF0ID09IDB4MDYpIHsKIAkJCS8qIFdlIG5lZWQgdG8gcmUtc2V0dXAgdGhlIGludGVycGFydGl0aW9uIGNvbm5lY3Rpb24gKi8KIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaWJtdnNjc2k6IFJlLWVuYWJsaW5nIGFkYXB0ZXIhXG4iKTsKLQkJCWF0b21pY19zZXQoJmhvc3RkYXRhLT5yZXF1ZXN0X2xpbWl0LCAtMSk7CiAJCQlwdXJnZV9yZXF1ZXN0cyhob3N0ZGF0YSwgRElEX1JFUVVFVUUpOwotCQkJaWYgKGlibXZzY3NpX3JlZW5hYmxlX2NycV9xdWV1ZSgmaG9zdGRhdGEtPnF1ZXVlLAotCQkJCQkJCWhvc3RkYXRhKSA9PSAwKQotCQkJCWlmIChpYm12c2NzaV9zZW5kX2NycShob3N0ZGF0YSwKLQkJCQkJCSAgICAgIDB4QzAwMTAwMDAwMDAwMDAwMExMLCAwKSkKKwkJCWlmICgoaWJtdnNjc2lfcmVlbmFibGVfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsCisJCQkJCQkJaG9zdGRhdGEpID09IDApIHx8CisJCQkgICAgKGlibXZzY3NpX3NlbmRfY3JxKGhvc3RkYXRhLAorCQkJCQkgICAgICAgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApKSkgeworCQkJCQlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwKKwkJCQkJCSAgIC0xKTsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSAgICAgICAiaWJtdnNjc2k6IHRyYW5zbWl0IGVycm9yIGFmdGVyIgorCQkJCQkgICAgICAgImlibXZzY3NpOiBlcnJvciBhZnRlciIKIAkJCQkJICAgICAgICIgZW5hYmxlXG4iKTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaWJtdnNjc2k6IFZpcnR1YWwgYWRhcHRlciBmYWlsZWQgcmMgJWQhXG4iLAogCQkJICAgICAgIGNycS0+Zm9ybWF0KTsKIAotCQkJYXRvbWljX3NldCgmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQsIC0xKTsKIAkJCXB1cmdlX3JlcXVlc3RzKGhvc3RkYXRhLCBESURfRVJST1IpOwotCQkJaWJtdnNjc2lfcmVzZXRfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsIGhvc3RkYXRhKTsKKwkJCWlmICgoaWJtdnNjc2lfcmVzZXRfY3JxX3F1ZXVlKCZob3N0ZGF0YS0+cXVldWUsCisJCQkJCQkJaG9zdGRhdGEpKSB8fAorCQkJICAgIChpYm12c2NzaV9zZW5kX2NycShob3N0ZGF0YSwKKwkJCQkJICAgICAgIDB4QzAwMTAwMDAwMDAwMDAwMExMLCAwKSkpIHsKKwkJCQkJYXRvbWljX3NldCgmaG9zdGRhdGEtPnJlcXVlc3RfbGltaXQsCisJCQkJCQkgICAtMSk7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgImlibXZzY3NpOiBlcnJvciBhZnRlciByZXNldFxuIik7CisJCQl9CiAJCX0KIAkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKGhvc3RkYXRhLT5ob3N0KTsKIAkJcmV0dXJuOwpAQCAtMTQ2Nyw2ICsxNDk5LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ2ZGV2LT5kZXY7CiAJdW5zaWduZWQgbG9uZyB3YWl0X3N3aXRjaCA9IDA7CisJaW50IHJjOwogCiAJdmRldi0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKIApAQCAtMTQ4NCw4ICsxNTE3LDggQEAKIAlhdG9taWNfc2V0KCZob3N0ZGF0YS0+cmVxdWVzdF9saW1pdCwgLTEpOwogCWhvc3RkYXRhLT5ob3N0LT5tYXhfc2VjdG9ycyA9IDMyICogODsgLyogZGVmYXVsdCBtYXggSS9PIDMyIHBhZ2VzICovCiAKLQlpZiAoaWJtdnNjc2lfaW5pdF9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwgaG9zdGRhdGEsCi0JCQkJICAgIG1heF9yZXF1ZXN0cykgIT0gMCkgeworCXJjID0gaWJtdnNjc2lfaW5pdF9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwgaG9zdGRhdGEsIG1heF9yZXF1ZXN0cyk7CisJaWYgKHJjICE9IDAgJiYgcmMgIT0gSF9SRVNPVVJDRSkgewogCQlwcmludGsoS0VSTl9FUlIgImlibXZzY3NpOiBjb3VsZG4ndCBpbml0aWFsaXplIGNycVxuIik7CiAJCWdvdG8gaW5pdF9jcnFfZmFpbGVkOwogCX0KQEAgLTE1MDUsNyArMTUzOCw4IEBACiAJICogdG8gZmFpbCBpZiB0aGUgb3RoZXIgZW5kIGlzIG5vdCBhY2l2ZS4gIEluIHRoYXQgY2FzZSB3ZSBkb24ndAogCSAqIHdhbnQgdG8gc2NhbgogCSAqLwotCWlmIChpYm12c2NzaV9zZW5kX2NycShob3N0ZGF0YSwgMHhDMDAxMDAwMDAwMDAwMDAwTEwsIDApID09IDApIHsKKwlpZiAoaWJtdnNjc2lfc2VuZF9jcnEoaG9zdGRhdGEsIDB4QzAwMTAwMDAwMDAwMDAwMExMLCAwKSA9PSAwCisJICAgIHx8IHJjID09IEhfUkVTT1VSQ0UpIHsKIAkJLyoKIAkJICogV2FpdCBhcm91bmQgbWF4IGluaXRfdGltZW91dCBzZWNzIGZvciB0aGUgYWRhcHRlciB0byBmaW5pc2gKIAkJICogaW5pdGlhbGl6aW5nLiBXaGVuIHdlIGFyZSBkb25lIGluaXRpYWxpemluZywgd2Ugd2lsbCBoYXZlIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYwppbmRleCAxYTk5OTJiLi4yNDJiODg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCkBAIC0yMDgsNiArMjA4LDcgQEAKIAkJCSAgICBpbnQgbWF4X3JlcXVlc3RzKQogewogCWludCByYzsKKwlpbnQgcmV0cmM7CiAJc3RydWN0IHZpb19kZXYgKnZkZXYgPSB0b192aW9fZGV2KGhvc3RkYXRhLT5kZXYpOwogCiAJcXVldWUtPm1zZ3MgPSAoc3RydWN0IHZpb3NycF9jcnEgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CkBAIC0yMjYsNyArMjI3LDcgQEAKIAlnYXRoZXJfcGFydGl0aW9uX2luZm8oKTsKIAlzZXRfYWRhcHRlcl9pbmZvKGhvc3RkYXRhKTsKIAotCXJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVHX0NSUSwKKwlyZXRyYyA9IHJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVHX0NSUSwKIAkJCQl2ZGV2LT51bml0X2FkZHJlc3MsCiAJCQkJcXVldWUtPm1zZ190b2tlbiwgUEFHRV9TSVpFKTsKIAlpZiAocmMgPT0gSF9SRVNPVVJDRSkKQEAgLTI2Myw3ICsyNjQsNyBAQAogCXRhc2tsZXRfaW5pdCgmaG9zdGRhdGEtPnNycF90YXNrLCAodm9pZCAqKWlibXZzY3NpX3Rhc2ssCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpaG9zdGRhdGEpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHJjOwogCiAgICAgICByZXFfaXJxX2ZhaWxlZDoKIAlkbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCmluZGV4IDk4OGU2ZjdhLi5mN2I1ZDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtMzQsNyArMzQsNiBAQAogI2RlZmluZSBJREVTQ1NJX1ZFUlNJT04gIjAuOTIiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ltbS5jIGIvZHJpdmVycy9zY3NpL2ltbS5jCmluZGV4IDY4MWJkMTguLjJkOTVhYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pbW0uYworKysgYi9kcml2ZXJzL3Njc2kvaW1tLmMKQEAgLTgsNyArOCw2IEBACiAgKiAgICAgICAgICAgICAgZnV0dXJlIGV4cGFuc2lvbiB0byBmaXZlIGxldHRlcnMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbjIwMDAuYyBiL2RyaXZlcnMvc2NzaS9pbjIwMDAuYwppbmRleCA4ODNiYzkyLi41OWE0MDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW4yMDAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2luMjAwMC5jCkBAIC0yMDE1LDcgKzIwMTUsNyBAQAogCQl3cml0ZTFfaW8oMCwgSU9fRklGT19SRUFEKTsJLyogc3RhcnQgZmlmbyBvdXQgaW4gcmVhZCBtb2RlICovCiAJCXdyaXRlMV9pbygwLCBJT19JTlRSX01BU0spOwkvKiBhbGxvdyBhbGwgaW50cyAqLwogCQl4ID0gaW50X3RhYlsoc3dpdGNoZXMgJiAoU1dfSU5UMCB8IFNXX0lOVDEpKSA+PiBTV19JTlRfU0hJRlRdOwotCQlpZiAocmVxdWVzdF9pcnEoeCwgaW4yMDAwX2ludHIsIFNBX0lOVEVSUlVQVCwgImluMjAwMCIsIGluc3RhbmNlKSkgeworCQlpZiAocmVxdWVzdF9pcnEoeCwgaW4yMDAwX2ludHIsIElSUUZfRElTQUJMRUQsICJpbjIwMDAiLCBpbnN0YW5jZSkpIHsKIAkJCXByaW50aygiaW4yMDAwX2RldGVjdDogVW5hYmxlIHRvIGFsbG9jYXRlIElSUS5cbiIpOwogCQkJZGV0ZWN0X2NvdW50LS07CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYyBiL2RyaXZlcnMvc2NzaS9pbml0aW8uYwppbmRleCA5MTNiYTk1Li45ZTEwZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCkBAIC0xMTgsNyArMTE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0yODY4LDcgKzI4NjcsNyBAQAogCQlocmVnLT5zZ190YWJsZXNpemUgPSBUT1RBTF9TR19FTlRSWTsJLyogTWF4aW11biBzdXBwb3J0IGlzIDMyICovCiAKIAkJLyogSW5pdGlhbCB0dWxpcCBjaGlwICAgICAgICAgICAqLwotCQlvayA9IHJlcXVlc3RfaXJxKHBIQ0ItPkhDU19JbnRyLCBpOTF1X2ludHIsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLCAiaTkxdSIsIGhyZWcpOworCQlvayA9IHJlcXVlc3RfaXJxKHBIQ0ItPkhDU19JbnRyLCBpOTF1X2ludHIsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgImk5MXUiLCBocmVnKTsKIAkJaWYgKG9rIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTkxdTogdW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkXG5cbiIsIHBIQ0ItPkhDU19JbnRyKTsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2luaXRpby5oIGIvZHJpdmVycy9zY3NpL2luaXRpby5oCmluZGV4IDNlZmIxMTguLmFjYjY3YTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmgKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5oCkBAIC01NCw3ICs1NCw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgVUxPTkcgICB1bnNpZ25lZCBsb25nCkBAIC0xOTMsMTMgKzE5MiwxMyBAQAogI2RlZmluZSBUU0NfU0VMX0FUTl9ESVJFQ1RfT1VUICAweDE1CS8qIFNlbGVjdCBXaXRoIEFUTiBTZXF1ZW5jZSAgICAgKi8KICNkZWZpbmUgVFNDX1NFTF9BVE4zX0RJUkVDVF9JTiAgMHhCNQkvKiBTZWxlY3QgV2l0aCBBVE4zIFNlcXVlbmNlICAgICovCiAjZGVmaW5lIFRTQ19TRUxfQVROM19ESVJFQ1RfT1VUIDB4MzUJLyogU2VsZWN0IFdpdGggQVROMyBTZXF1ZW5jZSAgICAqLwotI2RlZmluZSBUU0NfWEZfRE1BX09VVF9ESVJFQ1QgICAweDA2CS8qIERNQSBYZmVyIEluZm9tYXRpb24gb3V0ICAgICAgKi8KLSNkZWZpbmUgVFNDX1hGX0RNQV9JTl9ESVJFQ1QgICAgMHg4NgkvKiBETUEgWGZlciBJbmZvbWF0aW9uIGluICAgICAgICovCisjZGVmaW5lIFRTQ19YRl9ETUFfT1VUX0RJUkVDVCAgIDB4MDYJLyogRE1BIFhmZXIgSW5mb3JtYXRpb24gb3V0ICAgICAgKi8KKyNkZWZpbmUgVFNDX1hGX0RNQV9JTl9ESVJFQ1QgICAgMHg4NgkvKiBETUEgWGZlciBJbmZvcm1hdGlvbiBpbiAgICAgICAqLwogCi0jZGVmaW5lIFRTQ19YRl9ETUFfT1VUICAweDQzCS8qIERNQSBYZmVyIEluZm9tYXRpb24gb3V0ICAgICAgICAgICAgICAqLwotI2RlZmluZSBUU0NfWEZfRE1BX0lOICAgMHhDMwkvKiBETUEgWGZlciBJbmZvbWF0aW9uIGluICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVFNDX1hGX0ZJRk9fT1VUIDB4MDMJLyogRklGTyBYZmVyIEluZm9tYXRpb24gb3V0ICAgICAgICAgICAgICovCi0jZGVmaW5lIFRTQ19YRl9GSUZPX0lOICAweDgzCS8qIEZJRk8gWGZlciBJbmZvbWF0aW9uIGluICAgICAgICAgICAgICAqLworI2RlZmluZSBUU0NfWEZfRE1BX09VVCAgMHg0MwkvKiBETUEgWGZlciBJbmZvcm1hdGlvbiBvdXQgICAgICAgICAgICAgICovCisjZGVmaW5lIFRTQ19YRl9ETUFfSU4gICAweEMzCS8qIERNQSBYZmVyIEluZm9ybWF0aW9uIGluICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFNDX1hGX0ZJRk9fT1VUIDB4MDMJLyogRklGTyBYZmVyIEluZm9ybWF0aW9uIG91dCAgICAgICAgICAgICAqLworI2RlZmluZSBUU0NfWEZfRklGT19JTiAgMHg4MwkvKiBGSUZPIFhmZXIgSW5mb3JtYXRpb24gaW4gICAgICAgICAgICAgICovCiAKICNkZWZpbmUgVFNDX01TR19BQ0NFUFQgIDB4MEYJLyogTWVzc2FnZSBBY2NlcHQgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCA5NmI2NWIzLi4wMTA4MGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC01NCw3ICs1NCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNjQyOSw3ICs2NDI4LDcgQEAKIAkJaW9hX2NmZy0+bmVlZHNfaGFyZF9yZXNldCA9IDE7CiAKIAlpcHJfbWFza19hbmRfY2xlYXJfaW50ZXJydXB0cyhpb2FfY2ZnLCB+SVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIpOwotCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcHJfaXNyLCBTQV9TSElSUSwgSVBSX05BTUUsIGlvYV9jZmcpOworCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcHJfaXNyLCBJUlFGX1NIQVJFRCwgSVBSX05BTUUsIGlvYV9jZmcpOwogCiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIElSUSAlZCEgcmM9JWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXBzLmMgYi9kcml2ZXJzL3Njc2kvaXBzLmMKaW5kZXggNzhmMmZmNy4uM2M2MzkyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHMuYwpAQCAtMTk2LDcgKzE5Niw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTcwMDgsNyArNzAwNyw3IEBACiAJbWVtY3B5KGhhLCBvbGRoYSwgc2l6ZW9mIChpcHNfaGFfdCkpOwogCWZyZWVfaXJxKG9sZGhhLT5pcnEsIG9sZGhhKTsKIAkvKiBJbnN0YWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIHRoZSBuZXcgaGEgKi8KLQlpZiAocmVxdWVzdF9pcnEoaGEtPmlycSwgZG9faXBzaW50ciwgU0FfU0hJUlEsIGlwc19uYW1lLCBoYSkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaGEtPmlycSwgZG9faXBzaW50ciwgSVJRRl9TSEFSRUQsIGlwc19uYW1lLCBoYSkpIHsKIAkJSVBTX1BSSU5USyhLRVJOX1dBUk5JTkcsIGhhLT5wY2lkZXYsCiAJCQkgICAiVW5hYmxlIHRvIGluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCQlzY3NpX2hvc3RfcHV0KHNoKTsKQEAgLTc0MjAsNyArNzQxOSw3IEBACiAJfQogCiAJLyogSW5zdGFsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlpZiAocmVxdWVzdF9pcnEoaGEtPmlycSwgZG9faXBzaW50ciwgU0FfU0hJUlEsIGlwc19uYW1lLCBoYSkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaGEtPmlycSwgZG9faXBzaW50ciwgSVJRRl9TSEFSRUQsIGlwc19uYW1lLCBoYSkpIHsKIAkJSVBTX1BSSU5USyhLRVJOX1dBUk5JTkcsIGhhLT5wY2lkZXYsCiAJCQkgICAiVW5hYmxlIHRvIGluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCQlyZXR1cm4gaXBzX2Fib3J0X2luaXQoaGEsIGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCBiNDc0M2E5Li44NDhmYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC0yMTMwLDE5ICsyMTMwLDIxIEBACiAKIHN0YXRpYyBpbnQKIGlzY3NpX2Nvbm5fc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sCi0JCSAgICAgdWludDMyX3QgdmFsdWUpCisJCSAgICAgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogewogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCWludCB2YWx1ZTsKIAogCXN3aXRjaChwYXJhbSkgewogCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1JFQ1ZfRExFTkdUSDogewogCQljaGFyICpzYXZlcHRyID0gdGNwX2Nvbm4tPmRhdGE7CiAJCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTDsKIAorCQlzc2NhbmYoYnVmLCAiJWQiLCAmdmFsdWUpOwogCQlpZiAodGNwX2Nvbm4tPmRhdGFfc2l6ZSA+PSB2YWx1ZSkgewotCQkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA9IHZhbHVlOworCQkJaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjE2NSwxNSArMjE2NywxMiBAQAogCQllbHNlCiAJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXNhdmVwdHIsCiAJCQkJICAgZ2V0X29yZGVyKHRjcF9jb25uLT5kYXRhX3NpemUpKTsKLQkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA9IHZhbHVlOworCQlpc2NzaV9zZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYsIGJ1Zmxlbik7CiAJCXRjcF9jb25uLT5kYXRhX3NpemUgPSB2YWx1ZTsKKwkJYnJlYWs7CiAJCX0KLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9NQVhfWE1JVF9ETEVOR1RIOgotCQljb25uLT5tYXhfeG1pdF9kbGVuZ3RoID0gIHZhbHVlOwotCQlicmVhazsKIAljYXNlIElTQ1NJX1BBUkFNX0hEUkRHU1RfRU46Ci0JCWNvbm4tPmhkcmRnc3RfZW4gPSB2YWx1ZTsKKwkJaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCQl0Y3BfY29ubi0+aGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcik7CiAJCWlmIChjb25uLT5oZHJkZ3N0X2VuKSB7CiAJCQl0Y3BfY29ubi0+aGRyX3NpemUgKz0gc2l6ZW9mKF9fdTMyKTsKQEAgLTIxOTcsNyArMjE5Niw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9EQVRBREdTVF9FTjoKLQkJY29ubi0+ZGF0YWRnc3RfZW4gPSB2YWx1ZTsKKwkJaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4pIHsKIAkJCWlmICghdGNwX2Nvbm4tPmRhdGFfdHhfdGZtKQogCQkJCXRjcF9jb25uLT5kYXRhX3R4X3RmbSA9CkBAIC0yMjIwLDEyMSArMjIxOSwzNiBAQAogCQl0Y3BfY29ubi0+c2VuZHBhZ2UgPSBjb25uLT5kYXRhZGdzdF9lbiA/CiAJCQlzb2NrX25vX3NlbmRwYWdlIDogdGNwX2Nvbm4tPnNvY2stPm9wcy0+c2VuZHBhZ2U7CiAJCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fSU5JVElBTF9SMlRfRU46Ci0JCXNlc3Npb24tPmluaXRpYWxfcjJ0X2VuID0gdmFsdWU7Ci0JCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1IyVDoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnZhbHVlKTsKIAkJaWYgKHNlc3Npb24tPm1heF9yMnQgPT0gcm91bmR1cF9wb3dfb2ZfdHdvKHZhbHVlKSkKIAkJCWJyZWFrOwogCQlpc2NzaV9yMnRwb29sX2ZyZWUoc2Vzc2lvbik7Ci0JCXNlc3Npb24tPm1heF9yMnQgPSB2YWx1ZTsKKwkJaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCQlpZiAoc2Vzc2lvbi0+bWF4X3IydCAmIChzZXNzaW9uLT5tYXhfcjJ0IC0gMSkpCiAJCQlzZXNzaW9uLT5tYXhfcjJ0ID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNlc3Npb24tPm1heF9yMnQpOwogCQlpZiAoaXNjc2lfcjJ0cG9vbF9hbGxvYyhzZXNzaW9uKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lNTV9EQVRBX0VOOgotCQlzZXNzaW9uLT5pbW1fZGF0YV9lbiA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0ZJUlNUX0JVUlNUOgotCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX01BWF9CVVJTVDoKLQkJc2Vzc2lvbi0+bWF4X2J1cnN0ID0gdmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fUERVX0lOT1JERVJfRU46Ci0JCXNlc3Npb24tPnBkdV9pbm9yZGVyX2VuID0gdmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fREFUQVNFUV9JTk9SREVSX0VOOgotCQlzZXNzaW9uLT5kYXRhc2VxX2lub3JkZXJfZW4gPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9FUkw6Ci0JCXNlc3Npb24tPmVybCA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lGTUFSS0VSX0VOOgotCQlCVUdfT04odmFsdWUpOwotCQlzZXNzaW9uLT5pZm1hcmtlcl9lbiA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX09GTUFSS0VSX0VOOgotCQlCVUdfT04odmFsdWUpOwotCQlzZXNzaW9uLT5vZm1hcmtlcl9lbiA9IHZhbHVlOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0VYUF9TVEFUU046Ci0JCWNvbm4tPmV4cF9zdGF0c24gPSB2YWx1ZTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYnJlYWs7CisJCXJldHVybiBpc2NzaV9zZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYsIGJ1Zmxlbik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWlzY3NpX3Nlc3Npb25fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCi0JCQllbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCB1aW50MzJfdCAqdmFsdWUpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKLQlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlzY3NpX2hvc3RkYXRhKHNob3N0LT5ob3N0ZGF0YSk7Ci0KLQlzd2l0Y2gocGFyYW0pIHsKLQljYXNlIElTQ1NJX1BBUkFNX0lOSVRJQUxfUjJUX0VOOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5pbml0aWFsX3IydF9lbjsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9NQVhfUjJUOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5tYXhfcjJ0OwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lNTV9EQVRBX0VOOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5pbW1fZGF0YV9lbjsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9GSVJTVF9CVVJTVDoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+Zmlyc3RfYnVyc3Q7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5tYXhfYnVyc3Q7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fUERVX0lOT1JERVJfRU46Ci0JCSp2YWx1ZSA9IHNlc3Npb24tPnBkdV9pbm9yZGVyX2VuOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0RBVEFTRVFfSU5PUkRFUl9FTjoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+ZGF0YXNlcV9pbm9yZGVyX2VuOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0VSTDoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+ZXJsOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX0lGTUFSS0VSX0VOOgotCQkqdmFsdWUgPSBzZXNzaW9uLT5pZm1hcmtlcl9lbjsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9PRk1BUktFUl9FTjoKLQkJKnZhbHVlID0gc2Vzc2lvbi0+b2ZtYXJrZXJfZW47Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1pc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAotCQkgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIHVpbnQzMl90ICp2YWx1ZSkKK2lzY3NpX3RjcF9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wOworCXN0cnVjdCBzb2NrICpzazsKKwlpbnQgbGVuOwogCiAJc3dpdGNoKHBhcmFtKSB7Ci0JY2FzZSBJU0NTSV9QQVJBTV9NQVhfUkVDVl9ETEVOR1RIOgotCQkqdmFsdWUgPSBjb25uLT5tYXhfcmVjdl9kbGVuZ3RoOwotCQlicmVhazsKLQljYXNlIElTQ1NJX1BBUkFNX01BWF9YTUlUX0RMRU5HVEg6Ci0JCSp2YWx1ZSA9IGNvbm4tPm1heF94bWl0X2RsZW5ndGg7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fSERSREdTVF9FTjoKLQkJKnZhbHVlID0gY29ubi0+aGRyZGdzdF9lbjsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9EQVRBREdTVF9FTjoKLQkJKnZhbHVlID0gY29ubi0+ZGF0YWRnc3RfZW47Ci0JCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9QT1JUOgogCQltdXRleF9sb2NrKCZjb25uLT54bWl0bXV0ZXgpOwogCQlpZiAoIXRjcF9jb25uLT5zb2NrKSB7CkBAIC0yMzQzLDMwICsyMjU3LDkgQEAKIAkJfQogCiAJCWluZXQgPSBpbmV0X3NrKHRjcF9jb25uLT5zb2NrLT5zayk7Ci0JCSp2YWx1ZSA9IGJlMTZfdG9fY3B1KGluZXQtPmRwb3J0KTsKKwkJbGVuID0gc3ByaW50ZihidWYsICIlaHVcbiIsIGJlMTZfdG9fY3B1KGluZXQtPmRwb3J0KSk7CiAJCW11dGV4X3VubG9jaygmY29ubi0+eG1pdG11dGV4KTsKLQljYXNlIElTQ1NJX1BBUkFNX0VYUF9TVEFUU046Ci0JCSp2YWx1ZSA9IGNvbm4tPmV4cF9zdGF0c247CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1pc2NzaV9jb25uX2dldF9zdHJfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKLQkJCSBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldDsKLQlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7Ci0JaW50IGxlbiA9IDA7Ci0KLQlzd2l0Y2ggKHBhcmFtKSB7CiAJY2FzZSBJU0NTSV9QQVJBTV9DT05OX0FERFJFU1M6CiAJCW11dGV4X2xvY2soJmNvbm4tPnhtaXRtdXRleCk7CiAJCWlmICghdGNwX2Nvbm4tPnNvY2spIHsKQEAgLTIzODgsNyArMjI4MSw3IEBACiAJCW11dGV4X3VubG9jaygmY29ubi0+eG1pdG11dGV4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBpc2NzaV9jb25uX2dldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1Zik7CiAJfQogCiAJcmV0dXJuIGxlbjsKQEAgLTI1MDEsNyArMjM5NCwxMSBAQAogCQkJCSAgSVNDU0lfRVJMIHwKIAkJCQkgIElTQ1NJX0NPTk5fUE9SVCB8CiAJCQkJICBJU0NTSV9DT05OX0FERFJFU1MgfAotCQkJCSAgSVNDU0lfRVhQX1NUQVRTTiwKKwkJCQkgIElTQ1NJX0VYUF9TVEFUU04gfAorCQkJCSAgSVNDU0lfUEVSU0lTVEVOVF9QT1JUIHwKKwkJCQkgIElTQ1NJX1BFUlNJU1RFTlRfQUREUkVTUyB8CisJCQkJICBJU0NTSV9UQVJHRVRfTkFNRSB8CisJCQkJICBJU0NTSV9UUEdULAogCS5ob3N0X3RlbXBsYXRlCQk9ICZpc2NzaV9zaHQsCiAJLmNvbm5kYXRhX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBpc2NzaV9jb25uKSwKIAkubWF4X2Nvbm4JCT0gMSwKQEAgLTI1MTQsOCArMjQxMSw3IEBACiAJLmJpbmRfY29ubgkJPSBpc2NzaV90Y3BfY29ubl9iaW5kLAogCS5kZXN0cm95X2Nvbm4JCT0gaXNjc2lfdGNwX2Nvbm5fZGVzdHJveSwKIAkuc2V0X3BhcmFtCQk9IGlzY3NpX2Nvbm5fc2V0X3BhcmFtLAotCS5nZXRfY29ubl9wYXJhbQkJPSBpc2NzaV9jb25uX2dldF9wYXJhbSwKLQkuZ2V0X2Nvbm5fc3RyX3BhcmFtCT0gaXNjc2lfY29ubl9nZXRfc3RyX3BhcmFtLAorCS5nZXRfY29ubl9wYXJhbQkJPSBpc2NzaV90Y3BfY29ubl9nZXRfcGFyYW0sCiAJLmdldF9zZXNzaW9uX3BhcmFtCT0gaXNjc2lfc2Vzc2lvbl9nZXRfcGFyYW0sCiAJLnN0YXJ0X2Nvbm4JCT0gaXNjc2lfY29ubl9zdGFydCwKIAkuc3RvcF9jb25uCQk9IGlzY3NpX2Nvbm5fc3RvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jIGIvZHJpdmVycy9zY3NpL2phenpfZXNwLmMKaW5kZXggZmMwMzFjNy4uM2ZkOGE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2phenpfZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2phenpfZXNwLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCWVzcC0+ZXNwX2NvbW1hbmRfZHZtYSA9IHZkbWFfYWxsb2MoQ1BIWVNBRERSKGNtZF9idWZmZXIpLCBzaXplb2YgKGNtZF9idWZmZXIpKTsKIAkKIAllc3AtPmlycSA9IEpBWlpfU0NTSV9JUlE7Ci0JcmVxdWVzdF9pcnEoSkFaWl9TQ1NJX0lSUSwgZXNwX2ludHIsIFNBX0lOVEVSUlVQVCwgIkpBWlogU0NTSSIsCisJcmVxdWVzdF9pcnEoSkFaWl9TQ1NJX0lSUSwgZXNwX2ludHIsIElSUUZfRElTQUJMRUQsICJKQVpaIFNDU0kiLAogCSAgICAgICAgICAgIGVzcC0+ZWhvc3QpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9sYXNpNzAwLmMgYi9kcml2ZXJzL3Njc2kvbGFzaTcwMC5jCmluZGV4IGViN2JkMzEuLmYwODcxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9sYXNpNzAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xhc2k3MDAuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJaG9zdC0+dGhpc19pZCA9IDc7CiAJaG9zdC0+YmFzZSA9IGJhc2U7CiAJaG9zdC0+aXJxID0gZGV2LT5pcnE7Ci0JaWYocmVxdWVzdF9pcnEoZGV2LT5pcnEsIE5DUl83MDBfaW50ciwgU0FfU0hJUlEsICJsYXNpNzAwIiwgaG9zdCkpIHsKKwlpZihyZXF1ZXN0X2lycShkZXYtPmlycSwgTkNSXzcwMF9pbnRyLCBJUlFGX1NIQVJFRCwgImxhc2k3MDAiLCBob3N0KSkgewogCQlwcmludGsoS0VSTl9FUlIgImxhc2k3MDA6IHJlcXVlc3RfaXJxIGZhaWxlZCFcbiIpOwogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWJtZG1hLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWJtZG1hLmMKaW5kZXggMDA0ZTFhMC4uOWNlMjIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1ibWRtYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtYm1kbWEuYwpAQCAtMzIsNyArMzIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CkBAIC04NTQsNyArODUzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlwcm9iZV9lbnQtPmlycSA9IHBkZXYtPmlycTsKLQlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBwb3J0WzBdLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAocG9ydHMgJiBBVEFfUE9SVF9QUklNQVJZKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IGQxYzFjMzAuLjFjOTYwYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC0zMiw3ICszMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEwMDIsNyArMTAwMSw3IEBACiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIAl1bnNpZ25lZCBpbnQgdGFnLCBwcmVlbXB0ZWRfdGFnOwogCXUzMiBwcmVlbXB0ZWRfc2FjdGl2ZSwgcHJlZW1wdGVkX3FjX2FjdGl2ZTsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgZXJyX21hc2s7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCAyNjczYTExLi43ZTZlMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMTI4NywxMyArMTI4NywxOCBAQAogCWlmIChzY3NpX2FkZF9ob3N0KHNob3N0LCBOVUxMKSkKIAkJZ290byBhZGRfaG9zdF9mYWlsOwogCisJaWYgKCF0cnlfbW9kdWxlX2dldChpc2NzaXQtPm93bmVyKSkKKwkJZ290byBjbHNfc2Vzc2lvbl9mYWlsOworCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9jcmVhdGVfc2Vzc2lvbihzaG9zdCwgaXNjc2l0LCAwKTsKIAlpZiAoIWNsc19zZXNzaW9uKQotCQlnb3RvIGNsc19zZXNzaW9uX2ZhaWw7CisJCWdvdG8gbW9kdWxlX3B1dDsKIAkqKHVuc2lnbmVkIGxvbmcqKXNob3N0LT5ob3N0ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNsc19zZXNzaW9uOwogCiAJcmV0dXJuIGNsc19zZXNzaW9uOwogCittb2R1bGVfcHV0OgorCW1vZHVsZV9wdXQoaXNjc2l0LT5vd25lcik7CiBjbHNfc2Vzc2lvbl9mYWlsOgogCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOwogYWRkX2hvc3RfZmFpbDoKQEAgLTEzMjUsNiArMTMzMCw3IEBACiAKIAlpc2NzaV9kZXN0cm95X3Nlc3Npb24oY2xzX3Nlc3Npb24pOwogCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworCW1vZHVsZV9wdXQoY2xzX3Nlc3Npb24tPnRyYW5zcG9ydC0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2Vzc2lvbl90ZWFyZG93bik7CiAKQEAgLTE2OTcsNiArMTcwMywxODUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fYmluZCk7CiAKKworaW50IGlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCXVpbnQzMl90IHZhbHVlOworCisJc3dpdGNoKHBhcmFtKSB7CisJY2FzZSBJU0NTSV9QQVJBTV9NQVhfUkVDVl9ETEVOR1RIOgorCQlzc2NhbmYoYnVmLCAiJWQiLCAmY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1hNSVRfRExFTkdUSDoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJmNvbm4tPm1heF94bWl0X2RsZW5ndGgpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX0hEUkRHU1RfRU46CisJCXNzY2FuZihidWYsICIlZCIsICZjb25uLT5oZHJkZ3N0X2VuKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9EQVRBREdTVF9FTjoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJmNvbm4tPmRhdGFkZ3N0X2VuKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9JTklUSUFMX1IyVF9FTjoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnNlc3Npb24tPmluaXRpYWxfcjJ0X2VuKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9NQVhfUjJUOgorCQlzc2NhbmYoYnVmLCAiJWQiLCAmc2Vzc2lvbi0+bWF4X3IydCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fSU1NX0RBVEFfRU46CisJCXNzY2FuZihidWYsICIlZCIsICZzZXNzaW9uLT5pbW1fZGF0YV9lbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fRklSU1RfQlVSU1Q6CisJCXNzY2FuZihidWYsICIlZCIsICZzZXNzaW9uLT5maXJzdF9idXJzdCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgorCQlzc2NhbmYoYnVmLCAiJWQiLCAmc2Vzc2lvbi0+bWF4X2J1cnN0KTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9QRFVfSU5PUkRFUl9FTjoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnNlc3Npb24tPnBkdV9pbm9yZGVyX2VuKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9EQVRBU0VRX0lOT1JERVJfRU46CisJCXNzY2FuZihidWYsICIlZCIsICZzZXNzaW9uLT5kYXRhc2VxX2lub3JkZXJfZW4pOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX0VSTDoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnNlc3Npb24tPmVybCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fSUZNQVJLRVJfRU46CisJCXNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSk7CisJCUJVR19PTih2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fT0ZNQVJLRVJfRU46CisJCXNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSk7CisJCUJVR19PTih2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fRVhQX1NUQVRTTjoKKwkJc3NjYW5mKGJ1ZiwgIiV1IiwgJmNvbm4tPmV4cF9zdGF0c24pOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX1RBUkdFVF9OQU1FOgorCQkvKiB0aGlzIHNob3VsZCBub3QgY2hhbmdlIGJldHdlZW4gbG9naW5zICovCisJCWlmIChzZXNzaW9uLT50YXJnZXRuYW1lKQorCQkJYnJlYWs7CisKKwkJc2Vzc2lvbi0+dGFyZ2V0bmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZXNzaW9uLT50YXJnZXRuYW1lKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fVFBHVDoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnNlc3Npb24tPnRwZ3QpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX1BFUlNJU1RFTlRfUE9SVDoKKwkJc3NjYW5mKGJ1ZiwgIiVkIiwgJmNvbm4tPnBlcnNpc3RlbnRfcG9ydCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fUEVSU0lTVEVOVF9BRERSRVNTOgorCQkvKgorCQkgKiB0aGlzIGlzIHRoZSBhZGRyZXNzIHJldHVybmVkIGluIGRpc2NvdmVyeSBzbyBpdCBzaG91bGQKKwkJICogbm90IGNoYW5nZSBiZXR3ZWVuIGxvZ2lucy4KKwkJICovCisJCWlmIChjb25uLT5wZXJzaXN0ZW50X2FkZHJlc3MpCisJCQlicmVhazsKKworCQljb25uLT5wZXJzaXN0ZW50X2FkZHJlc3MgPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7CisJCWlmICghY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2V0X3BhcmFtKTsKKworaW50IGlzY3NpX3Nlc3Npb25fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCQkgICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChjbHNfc2Vzc2lvbik7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBpc2NzaV9ob3N0ZGF0YShzaG9zdC0+aG9zdGRhdGEpOworCWludCBsZW47CisKKwlzd2l0Y2gocGFyYW0pIHsKKwljYXNlIElTQ1NJX1BBUkFNX0lOSVRJQUxfUjJUX0VOOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzZXNzaW9uLT5pbml0aWFsX3IydF9lbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1IyVDoKKwkJbGVuID0gc3ByaW50ZihidWYsICIlaHVcbiIsIHNlc3Npb24tPm1heF9yMnQpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX0lNTV9EQVRBX0VOOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzZXNzaW9uLT5pbW1fZGF0YV9lbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fRklSU1RfQlVSU1Q6CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJXVcbiIsIHNlc3Npb24tPmZpcnN0X2J1cnN0KTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9NQVhfQlVSU1Q6CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJXVcbiIsIHNlc3Npb24tPm1heF9idXJzdCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fUERVX0lOT1JERVJfRU46CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHNlc3Npb24tPnBkdV9pbm9yZGVyX2VuKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9EQVRBU0VRX0lOT1JERVJfRU46CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHNlc3Npb24tPmRhdGFzZXFfaW5vcmRlcl9lbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fRVJMOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzZXNzaW9uLT5lcmwpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX1RBUkdFVF9OQU1FOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzZXNzaW9uLT50YXJnZXRuYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9UUEdUOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzZXNzaW9uLT50cGd0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fZ2V0X3BhcmFtKTsKKworaW50IGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJaW50IGxlbjsKKworCXN3aXRjaChwYXJhbSkgeworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1JFQ1ZfRExFTkdUSDoKKwkJbGVuID0gc3ByaW50ZihidWYsICIldVxuIiwgY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX1hNSVRfRExFTkdUSDoKKwkJbGVuID0gc3ByaW50ZihidWYsICIldVxuIiwgY29ubi0+bWF4X3htaXRfZGxlbmd0aCk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fSERSREdTVF9FTjoKKwkJbGVuID0gc3ByaW50ZihidWYsICIlZFxuIiwgY29ubi0+aGRyZGdzdF9lbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fREFUQURHU1RfRU46CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGNvbm4tPmRhdGFkZ3N0X2VuKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9QQVJBTV9JRk1BUktFUl9FTjoKKwkJbGVuID0gc3ByaW50ZihidWYsICIlZFxuIiwgY29ubi0+aWZtYXJrZXJfZW4pOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX09GTUFSS0VSX0VOOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjb25uLT5vZm1hcmtlcl9lbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fRVhQX1NUQVRTTjoKKwkJbGVuID0gc3ByaW50ZihidWYsICIldVxuIiwgY29ubi0+ZXhwX3N0YXRzbik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fUEVSU0lTVEVOVF9QT1JUOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjb25uLT5wZXJzaXN0ZW50X3BvcnQpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX1BFUlNJU1RFTlRfQUREUkVTUzoKKwkJbGVuID0gc3ByaW50ZihidWYsICIlc1xuIiwgY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKTsKKwogTU9EVUxFX0FVVEhPUigiTWlrZSBDaHJpc3RpZSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJpU0NTSSBsaWJyYXJ5IGZ1bmN0aW9ucyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCmluZGV4IDA4N2M0NDUuLmY4MTY5MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKQEAgLTE3NCw3ICsxNzQsNiBAQAogCWRtYV9hZGRyX3Qgc2xpbTJwX21hcHBpbmc7CiAJdWludDE2X3QgcGNpX2NmZ192YWx1ZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgaGJhX2Nhbl9ibG9jazsKIAlpbnQzMl90IGhiYV9zdGF0ZTsKIAogI2RlZmluZSBMUEZDX1NUQVRFX1VOS05PV04gICAgICAgIDAgICAgLyogSEJBIHN0YXRlIGlzIHVua25vd24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCmluZGV4IDI4M2I3ZDguLjQxMjZmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwpAQCAtODIxLDcgKzgyMSw3IEBACiAJcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0VMU19SSU5HXTsJLyogRUxTIHJpbmcgKi8KIAogCWNtZHNpemUgPSAoc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKHN0cnVjdCBzZXJ2X3Bhcm0pKTsKLQllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDEsIGNtZHNpemUsIHJldHJ5LCAwLCBkaWQsCisJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwgTlVMTCwgZGlkLAogCQkJCQkJCQlFTFNfQ01EX1BMT0dJKTsKIAlpZiAoIWVsc2lvY2IpCiAJCXJldHVybiAxOwpAQCAtMjc5MSw4ICsyNzkxLDggQEAKIAogCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgcG1iLT5jb250ZXh0MjsKIAl4cmkgPSAodWludDE2X3QpICgodW5zaWduZWQgbG9uZykocG1iLT5jb250ZXh0MSkpOwotCXBtYi0+Y29udGV4dDEgPSAwOwotCXBtYi0+Y29udGV4dDIgPSAwOworCXBtYi0+Y29udGV4dDEgPSBOVUxMOworCXBtYi0+Y29udGV4dDIgPSBOVUxMOwogCiAJaWYgKG1iLT5tYnhTdGF0dXMpIHsKIAkJbWVtcG9vbF9mcmVlKCBwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCA5MDhkMGYyLi44MTc1NWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtOTM5LDEyICs5MzksMTIgQEAKIAkJCQkJIjEwLXBvcnQgIiwgIlBDSWUifTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbSA9ICh0eXBlb2YobSkpeyAwIH07CisJCQltID0gKHR5cGVvZihtKSl7IE5VTEwgfTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCW0gPSAodHlwZW9mKG0pKXsgMCB9OworCQltID0gKHR5cGVvZihtKSl7IE5VTEwgfTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNDUxLDcgKzE0NTEsNiBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAogCWhvc3QtPnVuaXF1ZV9pZCA9IHBoYmEtPmJyZF9ubzsKLQlpbml0X01VVEVYKCZwaGJhLT5oYmFfY2FuX2Jsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+Y3Ryc3BidWZsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+cm5pZHJzcGJ1Zmxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mcmVlYnVmTGlzdCk7CkBAIC0xNjIwLDcgKzE2MTksNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcmVtb3ZlX2hvc3Q7CiAKLQllcnJvciA9CXJlcXVlc3RfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBscGZjX2ludHJfaGFuZGxlciwgU0FfU0hJUlEsCisJZXJyb3IgPQlyZXF1ZXN0X2lycShwaGJhLT5wY2lkZXYtPmlycSwgbHBmY19pbnRyX2hhbmRsZXIsIElSUUZfU0hBUkVELAogCQkJCQkJCUxQRkNfRFJJVkVSX05BTUUsIHBoYmEpOwogCWlmIChlcnJvcikgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCA3ZGM0YzJlLi5hZWExZWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtNDEsMjAgKzQxLDYgQEAKICNkZWZpbmUgTFBGQ19BQk9SVF9XQUlUICAyCiAKIAotc3RhdGljIGlubGluZSB2b2lkCi1scGZjX2Jsb2NrX3JlcXVlc3RzKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCi17Ci0JZG93bigmcGhiYS0+aGJhX2Nhbl9ibG9jayk7Ci0Jc2NzaV9ibG9ja19yZXF1ZXN0cyhwaGJhLT5ob3N0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1scGZjX3VuYmxvY2tfcmVxdWVzdHMoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKLXsKLQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMocGhiYS0+aG9zdCk7Ci0JdXAoJnBoYmEtPmhiYV9jYW5fYmxvY2spOwotfQotCiAvKgogICogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBhIHNjc2kgYnVmZmVyLCB3aGljaCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeQogICogaW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYXRlIGEgU0NTSSBJL08uICBUaGUgbm9uLURNQWFibGUgYnVmZmVyIHJlZ2lvbgpAQCAtODU5LDcgKzg0NSw2IEBACiAJdW5zaWduZWQgaW50IGxvb3BfY291bnQgPSAwOwogCWludCByZXQgPSBTVUNDRVNTOwogCi0JbHBmY19ibG9ja19yZXF1ZXN0cyhwaGJhKTsKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJbHBmY19jbWQgPSAoc3RydWN0IGxwZmNfc2NzaV9idWYgKiljbW5kLT5ob3N0X3NjcmliYmxlOwpAQCAtOTQ1LDcgKzkzMCw2IEBACiAJCQljbW5kLT5kZXZpY2UtPmx1biwgY21uZC0+c2VyaWFsX251bWJlcik7CiAKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JbHBmY191bmJsb2NrX3JlcXVlc3RzKHBoYmEpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2Myw3ICs5NDcsNiBAQAogCWludCByZXQgPSBGQUlMRUQ7CiAJaW50IGNudCwgbG9vcGNudDsKIAotCWxwZmNfYmxvY2tfcmVxdWVzdHMocGhiYSk7CiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkvKgogCSAqIElmIHRhcmdldCBpcyBub3QgaW4gYSBNQVBQRUQgc3RhdGUsIGRlbGF5IHRoZSByZXNldCB1bnRpbApAQCAtMTA2NSw3ICsxMDQ4LDYgQEAKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQlscGZjX3VuYmxvY2tfcmVxdWVzdHMocGhiYSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA4MCw3ICsxMDYyLDYgQEAKIAlpbnQgY250LCBsb29wY250OwogCXN0cnVjdCBscGZjX3Njc2lfYnVmICogbHBmY19jbWQ7CiAKLQlscGZjX2Jsb2NrX3JlcXVlc3RzKHBoYmEpOwogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlscGZjX2NtZCA9IGxwZmNfZ2V0X3Njc2lfYnVmKHBoYmEpOwpAQCAtMTE2Myw3ICsxMTQ0LDYgQEAKIAkJCXBoYmEtPmJyZF9ubywgcmV0KTsKIG91dDoKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JbHBmY191bmJsb2NrX3JlcXVlc3RzKHBoYmEpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggNWQyY2VmYi4uNzZlZGJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTQ3MTQsNyArNDcxNCw3IEBACiAKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCAoYWRhcHRlci0+ZmxhZyAmIEJPQVJEX01FTU1BUCkgPwogCQkJCW1lZ2FyYWlkX2lzcl9tZW1tYXBwZWQgOiBtZWdhcmFpZF9pc3JfaW9tYXBwZWQsCi0JCQkJCVNBX1NISVJRLCAibWVnYXJhaWQiLCBhZGFwdGVyKSkgeworCQkJCQlJUlFGX1NIQVJFRCwgIm1lZ2FyYWlkIiwgYWRhcHRlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIm1lZ2FyYWlkOiBDb3VsZG4ndCByZWdpc3RlciBJUlEgJWQhXG4iLCBpcnEpOwogCQlnb3RvIG91dF9mcmVlX3NjYl9saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKaW5kZXggYjdjYWY2MC4uOTI3MTUxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCkBAIC03NjcsNyArNzY3LDcgQEAKIAkvLwogCiAJLy8gcmVxdWVzdCBJUlEgYW5kIHJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0JaWYgKHJlcXVlc3RfaXJxKGFkYXB0ZXItPmlycSwgbWVnYXJhaWRfaXNyLCBTQV9TSElSUSwgIm1lZ2FyYWlkIiwKKwlpZiAocmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBtZWdhcmFpZF9pc3IsIElSUUZfU0hBUkVELCAibWVnYXJhaWQiLAogCQlhZGFwdGVyKSkgewogCiAJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKaW5kZXggMGM5NTE2Zi4uYThjOTYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwpAQCAtMTAsNyArMTAsNyBAQAogICoJICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiBGSUxFCQk6IG1lZ2FyYWlkX3Nhcy5jCi0gKiBWZXJzaW9uCTogdjAwLjAwLjAyLjA0CisgKiBWZXJzaW9uCTogdjAwLjAwLjAzLjAxCiAgKgogICogQXV0aG9yczoKICAqIAlTcmVlbml2YXMgQmFnYWxrb3RlCTxTcmVlbml2YXMuQmFnYWxrb3RlQGxzaWwuY29tPgpAQCAtNTUsMTkgKzU1LDI1IEBACiAKIAl7CiAJIFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLAotCSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UiwgLy8geHNjYWxlIElPUAorCSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UiwgLyogeHNjYWxlIElPUCAqLwogCSBQQ0lfQU5ZX0lELAogCSBQQ0lfQU5ZX0lELAogCSB9LAogCXsKIAkgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsCi0JIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhSLCAvLyBwcGMgSU9QCisJIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhSLCAvKiBwcGMgSU9QICovCiAJIFBDSV9BTllfSUQsCiAJIFBDSV9BTllfSUQsCiAJfSwKIAl7CisJIFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLAorCSBQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IsCS8qIHhzY2FsZSBJT1AsIHZlZ2EgKi8KKwkgUENJX0FOWV9JRCwKKwkgUENJX0FOWV9JRCwKKwkgfSwKKwl7CiAJIFBDSV9WRU5ET1JfSURfREVMTCwKLQkgUENJX0RFVklDRV9JRF9ERUxMX1BFUkM1LCAvLyB4c2NhbGUgSU9QCisJIFBDSV9ERVZJQ0VfSURfREVMTF9QRVJDNSwgLyogeHNjYWxlIElPUCAqLwogCSBQQ0lfQU5ZX0lELAogCSBQQ0lfQU5ZX0lELAogCSB9LApAQCAtMjg5LDkgKzI5NSwxNCBAQAogICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLW1lZ2FzYXNfZGlzYWJsZV9pbnRyKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICogcmVncykKK21lZ2FzYXNfZGlzYWJsZV9pbnRyKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKIHsKIAl1MzIgbWFzayA9IDB4MWY7IAorCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzID0gaW5zdGFuY2UtPnJlZ19zZXQ7CisKKwlpZihpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhSKQorCQltYXNrID0gMHhmZmZmZmZmZjsKKwogCXdyaXRlbChtYXNrLCAmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKIAogCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLwpAQCAtMTI2MCw3ICsxMjcxLDcgQEAKIAkJCS8qCiAJCQkgKiBCcmluZyBpdCB0byBSRUFEWSBzdGF0ZTsgYXNzdW1pbmcgbWF4IHdhaXQgMiBzZWNzCiAJCQkgKi8KLQkJCW1lZ2FzYXNfZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJCW1lZ2FzYXNfZGlzYWJsZV9pbnRyKGluc3RhbmNlKTsKIAkJCXdyaXRlbChNRklfSU5JVF9SRUFEWSwgJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKIAogCQkJbWF4X3dhaXQgPSAxMDsKQEAgLTE3NTcsNiArMTc2OCwxMSBAQAogCWluaXRfZnJhbWUtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfaW5pdF9xdWV1ZV9pbmZvKTsKIAogCS8qCisJICogZGlzYWJsZSB0aGUgaW50ciBiZWZvcmUgZmlyaW5nIHRoZSBpbml0IGZyYW1lIHRvIEZXCisJICovCisJbWVnYXNhc19kaXNhYmxlX2ludHIoaW5zdGFuY2UpOworCisJLyoKIAkgKiBJc3N1ZSB0aGUgaW5pdCBmcmFtZSBpbiBwb2xsZWQgbW9kZQogCSAqLwogCWlmIChtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgewpAQCAtMjE5MSw3ICsyMjA3LDcgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIElSUQogCSAqLwotCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIG1lZ2FzYXNfaXNyLCBTQV9TSElSUSwgIm1lZ2FzYXMiLCBpbnN0YW5jZSkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBtZWdhc2FzX2lzciwgSVJRRl9TSEFSRUQsICJtZWdhc2FzIiwgaW5zdGFuY2UpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgSVJRXG4iKTsKIAkJZ290byBmYWlsX2lycTsKIAl9CkBAIC0yMjM0LDcgKzIyNTAsNyBAQAogCW1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleC0tOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCW1lZ2FzYXNfZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKwltZWdhc2FzX2Rpc2FibGVfaW50cihpbnN0YW5jZSk7CiAJZnJlZV9pcnEoaW5zdGFuY2UtPnBkZXYtPmlycSwgaW5zdGFuY2UpOwogCiAJbWVnYXNhc19yZWxlYXNlX21maShpbnN0YW5jZSk7CkBAIC0yMzY0LDcgKzIzODAsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKGluc3RhbmNlLT5wZGV2LCBOVUxMKTsKIAotCW1lZ2FzYXNfZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKwltZWdhc2FzX2Rpc2FibGVfaW50cihpbnN0YW5jZSk7CiAKIAlmcmVlX2lycShpbnN0YW5jZS0+cGRldi0+aXJxLCBpbnN0YW5jZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAppbmRleCA5MjdkNmZmLi4zNTMxYTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCkBAIC0xOCw5ICsxOCwxNiBAQAogLyoqCiAgKiBNZWdhUkFJRCBTQVMgRHJpdmVyIG1ldGEgZGF0YQogICovCi0jZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDIuMDQiCi0jZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiRmViIDAzLCAyMDA2IgotI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIkZyaSBGZWIgMDMgMTQ6MzE6NDQgUFNUIDIwMDYiCisjZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDMuMDEiCisjZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiTWF5IDE0LCAyMDA2IgorI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIlN1biBNYXkgMTQgMjI6NDk6NTIgUERUIDIwMDYiCisKKy8qCisgKiBEZXZpY2UgSURzCisgKi8KKyNkZWZpbmUJUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFIJCTB4MDA2MAorI2RlZmluZQlQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IJCTB4MDQxMworCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogTWVnYVJBSUQgU0FTIE1GSSBmaXJtd2FyZSBkZWZpbml0aW9ucwpAQCAtNTU0LDcgKzU2MSwxMSBAQAogI2RlZmluZSBNRklfUE9MTF9USU1FT1VUX1NFQ1MJCQkxMAogCiAjZGVmaW5lIE1GSV9SRVBMWV8xMDc4X01FU1NBR0VfSU5URVJSVVBUCTB4ODAwMDAwMDAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFIJCTB4MDAwMDAwNjAKKworLyoKKyogcmVnaXN0ZXIgc2V0IGZvciBib3RoIDEwNjggYW5kIDEwNzggY29udHJvbGxlcnMKKyogc3RydWN0dXJlIGV4dGVuZGVkIGZvciAxMDc4IHJlZ2lzdGVycworKi8KICAKIHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCB7CiAJdTMyIAlyZXNlcnZlZF8wWzRdOwkJCS8qMDAwMGgqLwpAQCAtMTE1MCwxMCArMTE2MSwxMCBAQAogCXN0cnVjdCBjb21wYXRfaW92ZWMgc2dsW01BWF9JT0NUTF9TR0VdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgTUVHQVNBU19JT0NfRklSTVdBUkUzMglfSU9XUignTScsIDEsIHN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQpCiAjZW5kaWYKIAogI2RlZmluZSBNRUdBU0FTX0lPQ19GSVJNV0FSRQlfSU9XUignTScsIDEsIHN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCkKLSNkZWZpbmUgTUVHQVNBU19JT0NfRklSTVdBUkUzMglfSU9XUignTScsIDEsIHN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQpCiAjZGVmaW5lIE1FR0FTQVNfSU9DX0dFVF9BRU4JX0lPVygnTScsIDMsIHN0cnVjdCBtZWdhc2FzX2FlbikKIAogc3RydWN0IG1lZ2FzYXNfbWdtdF9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZXNoLmMgYi9kcml2ZXJzL3Njc2kvbWVzaC5jCmluZGV4IGY4NTI0MjEuLmM4ODcxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZXNoLmMKKysrIGIvZHJpdmVycy9zY3NpL21lc2guYwpAQCAtMTgsNyArMTgsNiBAQAogICogLSByZXRyeSBhcmJpdHJhdGlvbiBpZiBsb3N0ICh1bmxlc3MgaGlnaGVyIGxldmVscyBkbyB0aGlzIGZvciB1cykKICAqIC0gcG93ZXIgZG93biB0aGUgY2hpcCB3aGVuIG5vIGRldmljZSBpcyBkZXRlY3RlZAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguaCBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguaAppbmRleCAwZTRlNDZhLi43ODgxOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5oCkBAIC01MywxMCArNTMsOCBAQAogI2lmbmRlZiBOQ1I1M0M4WFhfSAogI2RlZmluZSBOQ1I1M0M4WFhfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogKioJSWYgeW91IHdhbnQgYSBkcml2ZXIgYXMgc21hbGwgYXMgcG9zc2libGUsIGRvbm5vdCBkZWZpbmUgdGhlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzIuYwppbmRleCA1YzU1ZTE1Li5iZmI0ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzIuYworKysgYi9kcml2ZXJzL3Njc2kvbnNwMzIuYwpAQCAtMjg2Niw4ICsyODY2LDcgQEAKIAkgKi8KIAluc3AzMl9kb19idXNfcmVzZXQoZGF0YSk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIGRvX25zcDMyX2lzciwKLQkJCSAgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLCAibnNwMzIiLCBkYXRhKTsKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIGRvX25zcDMyX2lzciwgSVJRRl9TSEFSRUQsICJuc3AzMiIsIGRhdGEpOwogCWlmIChyZXQgPCAwKSB7CiAJCW5zcDMyX21zZyhLRVJOX0VSUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgZm9yIE5pbmphU0NTSTMyICIKIAkJCSAgIlNDU0kgUENJIGNvbnRyb2xsZXIuIEludGVycnVwdDogJWQiLCBob3N0LT5pcnEpOwpAQCAtMjg4NiwxMiArMjg4NSwxOSBAQAogICAgICAgICB9CiAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDczKSkKLQlzY3NpX2FkZF9ob3N0IChob3N0LCAmUENJREVWLT5kZXYpOworCXJldCA9IHNjc2lfYWRkX2hvc3QoaG9zdCwgJlBDSURFVi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCW5zcDMyX21zZyhLRVJOX0VSUiwgImZhaWxlZCB0byBhZGQgc2NzaSBob3N0Iik7CisJCWdvdG8gZnJlZV9yZWdpb247CisJfQogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogI2VuZGlmCiAJcGNpX3NldF9kcnZkYXRhKFBDSURFViwgaG9zdCk7CiAJcmV0dXJuIERFVEVDVF9PSzsKIAorIGZyZWVfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKGhvc3QtPmlvX3BvcnQsIGhvc3QtPm5faW9fcG9ydCk7CisKICBmcmVlX2lycToKIAlmcmVlX2lycShob3N0LT5pcnEsIGRhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb2t0YWdvbl9lc3AuYyBiL2RyaXZlcnMvc2NzaS9va3RhZ29uX2VzcC5jCmluZGV4IGRlZTQyNmYuLmRkNjdhNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9va3RhZ29uX2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9va3RhZ29uX2VzcC5jCkBAIC02LDcgKzYsNiBAQAogICogQmFzZWQgb24gY3liZXJfZXNwLmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfQVBVUykKICNkZWZpbmUgVVNFX0JPVFRPTV9IQUxGCkBAIC0xOTgsNyArMTk3LDcgQEAKIAkJZXNwLT5lc3BfY29tbWFuZF9kdm1hID0gKF9fdTMyKSBjbWRfYnVmZmVyOwogCiAJCWVzcC0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwotCQlyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBTQV9TSElSUSwKKwkJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBlc3BfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkgICAgIkJTQyBPa3RhZ29uIFNDU0kiLCBlc3AtPmVob3N0KTsKIAogCQkvKiBGaWd1cmUgb3V0IG91ciBzY3NpIElEIG9uIHRoZSBidXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9va3RhZ29uX2lvLlMgYi9kcml2ZXJzL3Njc2kvb2t0YWdvbl9pby5TCmluZGV4IDA4Y2U4ZDguLjhhNzM0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9va3RhZ29uX2lvLlMKKysrIGIvZHJpdmVycy9zY3NpL29rdGFnb25faW8uUwpAQCAtMjMsNyArMjMsNiBAQAogICogaXMgbW92ZWQgdG8vZnJvbSB0aGUgSU8gcmVnaXN0ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0FQVVMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuaCBiL2RyaXZlcnMvc2NzaS9vc3N0LmgKaW5kZXggMDExZDRkNi4uMWU0MjZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zc3QuaAorKysgYi9kcml2ZXJzL3Njc2kvb3NzdC5oCkBAIC0zLDcgKzMsNiBAQAogICovCiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAvKglGSVhNRSAtIHJlbmFtZSBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgdHdvIHR5cGVzIG9yIGRlbGV0ZSB0aGVtIQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BhczE2LmMgYi9kcml2ZXJzL3Njc2kvcGFzMTYuYwppbmRleCAxYmY5NmVkLi4xNDM0MjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGFzMTYuYworKysgYi9kcml2ZXJzL3Njc2kvcGFzMTYuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgUEFTMTZfSVJRUyk7CiAKIAlpZiAoaW5zdGFuY2UtPmlycSAhPSBTQ1NJX0lSUV9OT05FKSAKLQkgICAgaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIHBhczE2X2ludHIsIFNBX0lOVEVSUlVQVCwgInBhczE2IiwgaW5zdGFuY2UpKSB7CisJICAgIGlmIChyZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBwYXMxNl9pbnRyLCBJUlFGX0RJU0FCTEVELCAicGFzMTYiLCBpbnN0YW5jZSkpIHsKIAkJcHJpbnRrKCJzY3NpJWQgOiBJUlElZCBub3QgZnJlZSwgaW50ZXJydXB0cyBkaXNhYmxlZFxuIiwgCiAJCSAgICBpbnN0YW5jZS0+aG9zdF9ubywgaW5zdGFuY2UtPmlycSk7CiAJCWluc3RhbmNlLT5pcnEgPSBTQ1NJX0lSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggMjMxZjljMy4uMGQ0YzA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC0xNjIzLDcgKzE2MjMsNyBAQAogCS8qIEludGVycnVwdCBoYW5kbGVyICovCiAJbGluay0+aXJxLkhhbmRsZXIJID0gJm5zcGludHI7CiAJbGluay0+aXJxLkluc3RhbmNlICAgICAgID0gaW5mbzsKLQlsaW5rLT5pcnEuQXR0cmlidXRlcyAgICAgfD0gKFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSk7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgICAgIHw9IElSUUZfU0hBUkVEOwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogCWxpbmstPmNvbmYuQXR0cmlidXRlcwkgPSBDT05GX0VOQUJMRV9JUlE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwppbmRleCA5ZjU5ODI3Li4wYjY1MDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKQEAgLTc5OSw3ICs3OTksNyBAQAogCWRhdGEgPSAoc3RydWN0IHN5bTUzYzUwMF9kYXRhICopaG9zdC0+aG9zdGRhdGE7CiAKIAlpZiAoaXJxX2xldmVsID4gMCkgewotCQlpZiAocmVxdWVzdF9pcnEoaXJxX2xldmVsLCBTWU01M0M1MDBfaW50ciwgU0FfU0hJUlEsICJTWU01M0M1MDAiLCBob3N0KSkgeworCQlpZiAocmVxdWVzdF9pcnEoaXJxX2xldmVsLCBTWU01M0M1MDBfaW50ciwgSVJRRl9TSEFSRUQsICJTWU01M0M1MDAiLCBob3N0KSkgewogCQkJcHJpbnRrKCJTWU01M0M1MDA6IHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJWRcbiIsIGlycV9sZXZlbCk7CiAJCQlnb3RvIGVycl9mcmVlX3Njc2k7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggN2ViZThlMC4uZDFmMzhjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTY5MCw3ICs2OTAsNyBAQAogCXByb2JlX2VudC0+cG9ydF9vcHMJPSBhZG1hX3BvcnRfaW5mb1tib2FyZF9pZHhdLnBvcnRfb3BzOwogCiAJcHJvYmVfZW50LT5pcnEJCT0gcGRldi0+aXJxOwotCXByb2JlX2VudC0+aXJxX2ZsYWdzCT0gU0FfU0hJUlE7CisJcHJvYmVfZW50LT5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRDsKIAlwcm9iZV9lbnQtPm1taW9fYmFzZQk9IG1taW9fYmFzZTsKIAlwcm9iZV9lbnQtPm5fcG9ydHMJPSBBRE1BX1BPUlRTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGx1dG8uYyBiL2RyaXZlcnMvc2NzaS9wbHV0by5jCmluZGV4IDgzYTY3MTcuLjdhYmY2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbHV0by5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbHV0by5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wcGEuYyBiL2RyaXZlcnMvc2NzaS9wcGEuYwppbmRleCBkNThhYzVhLi5iMGViYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcHBhLmMKKysrIGIvZHJpdmVycy9zY3NpL3BwYS5jCkBAIC04LDcgKzgsNiBAQAogICogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCmluZGV4IDY4MGY2MDYuLjg5NTM5OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgICAgIC0gRG9uJ3Qgd2FsayB0aGUgZW50aXJlIGxpc3QgaW4gcWxhMTI4MF9wdXRxX3QoKSBqdXN0IHRvIGRpcmVjdGx5CiAJICBncmFiIHRoZSBwb2ludGVyIHRvIHRoZSBsYXN0IGVsZW1lbnQgYWZ0ZXJ3YXJkcwogICAgIFJldiAgMy4yMy41IEJldGEgQXVndXN0IDksIDIwMDEsIEplcyBTb3JlbnNlbgotCS0gRG9uJ3QgdXNlIFNBX0lOVEVSUlVQVCwgaXQncyB1c2UgaXMgZGVwcmVjYXRlZCBmb3IgdGhpcyBraW5kYSBkcml2ZXIKKwktIERvbid0IHVzZSBJUlFGX0RJU0FCTEVELCBpdCdzIHVzZSBpcyBkZXByZWNhdGVkIGZvciB0aGlzIGtpbmRhIGRyaXZlcgogICAgIFJldiAgMy4yMy40IEJldGEgQXVndXN0IDgsIDIwMDEsIEplcyBTb3JlbnNlbgogCS0gU2V0IGRldi0+bWF4X3NlY3RvcnMgdG8gMTAyNAogICAgIFJldiAgMy4yMy4zIEJldGEgQXVndXN0IDYsIDIwMDEsIEplcyBTb3JlbnNlbgpAQCAtMzMxLDcgKzMzMSw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC00MjEwLDcgKzQyMDksNyBAQAogfQogCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBpbnQgX19pbml0CiBxbGExMjgwX2dldF90b2tlbihjaGFyICpzdHIpCiB7CiAJY2hhciAqc2VwOwpAQCAtNDM3MCw3ICs0MzY5LDcgQEAKIAkvKiBEaXNhYmxlIElTUCBpbnRlcnJ1cHRzLiAqLwogCXFsYTEyODBfZGlzYWJsZV9pbnRycyhoYSk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBxbGExMjgwX2ludHJfaGFuZGxlciwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcWxhMTI4MF9pbnRyX2hhbmRsZXIsIElSUUZfU0hBUkVELAogCQkJCSJxbGExMjgwIiwgaGEpKSB7CiAJCXByaW50aygicWxhMTI4MCA6IEZhaWxlZCB0byByZXNlcnZlIGludGVycnVwdCAlZCBhbHJlYWR5ICIKIAkJICAgICAgICJpbiB1c2VcbiIsIHBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCBlOTZkNThkLi44N2Y5MGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTE2LDE1ICsxNiwxNiBAQAogewogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSA9IHRvX3FsYV9ob3N0KGRldl90b19zaG9zdChjb250YWluZXJfb2Yoa29iaiwKIAkgICAgc3RydWN0IGRldmljZSwga29iaikpKTsKKwljaGFyICpyYnVmID0gKGNoYXIgKiloYS0+ZndfZHVtcDsKIAogCWlmIChoYS0+ZndfZHVtcF9yZWFkaW5nID09IDApCiAJCXJldHVybiAwOwotCWlmIChvZmYgPiBoYS0+ZndfZHVtcF9idWZmZXJfbGVuKQotCQlyZXR1cm4gMDsKLQlpZiAob2ZmICsgY291bnQgPiBoYS0+ZndfZHVtcF9idWZmZXJfbGVuKQotCQljb3VudCA9IGhhLT5md19kdW1wX2J1ZmZlcl9sZW4gLSBvZmY7CisJaWYgKG9mZiA+IGhhLT5md19kdW1wX2xlbikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwlpZiAob2ZmICsgY291bnQgPiBoYS0+ZndfZHVtcF9sZW4pCisJCWNvdW50ID0gaGEtPmZ3X2R1bXBfbGVuIC0gb2ZmOwogCi0JbWVtY3B5KGJ1ZiwgJmhhLT5md19kdW1wX2J1ZmZlcltvZmZdLCBjb3VudCk7CisJbWVtY3B5KGJ1ZiwgJnJidWZbb2ZmXSwgY291bnQpOwogCiAJcmV0dXJuIChjb3VudCk7CiB9CkBAIC0zNiw3ICszNyw2IEBACiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhID0gdG9fcWxhX2hvc3QoZGV2X3RvX3Nob3N0KGNvbnRhaW5lcl9vZihrb2JqLAogCSAgICBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSkpOwogCWludCByZWFkaW5nOwotCXVpbnQzMl90IGR1bXBfc2l6ZTsKIAogCWlmIChvZmYgIT0gMCkKIAkJcmV0dXJuICgwKTsKQEAgLTQ0LDQ2ICs0NCwyNyBAQAogCXJlYWRpbmcgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCXN3aXRjaCAocmVhZGluZykgewogCWNhc2UgMDoKLQkJaWYgKGhhLT5md19kdW1wX3JlYWRpbmcgPT0gMSkgewotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICJGaXJtd2FyZSBkdW1wIGNsZWFyZWQgb24gKCVsZCkuXG4iLCBoYS0+aG9zdF9ubyk7CisJCWlmICghaGEtPmZ3X2R1bXBfcmVhZGluZykKKwkJCWJyZWFrOwogCi0JCQl2ZnJlZShoYS0+ZndfZHVtcF9idWZmZXIpOwotCQkJaGEtPmZ3X2R1bXBfYnVmZmVyID0gTlVMTDsKLQkJCWhhLT5md19kdW1wX3JlYWRpbmcgPSAwOwotCQkJaGEtPmZ3X2R1bXBlZCA9IDA7Ci0JCX0KKwkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgIkZpcm13YXJlIGR1bXAgY2xlYXJlZCBvbiAoJWxkKS5cbiIsIGhhLT5ob3N0X25vKTsKKworCQloYS0+ZndfZHVtcF9yZWFkaW5nID0gMDsKKwkJaGEtPmZ3X2R1bXBlZCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKGhhLT5md19kdW1wZWQgJiYgIWhhLT5md19kdW1wX3JlYWRpbmcpIHsKIAkJCWhhLT5md19kdW1wX3JlYWRpbmcgPSAxOwogCi0JCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCi0JCQkJZHVtcF9zaXplID0gRldfRFVNUF9TSVpFXzI0WFg7Ci0JCQllbHNlIHsKLQkJCQlkdW1wX3NpemUgPSBGV19EVU1QX1NJWkVfMU07Ci0JCQkJaWYgKGhhLT5md19tZW1vcnlfc2l6ZSA8IDB4MjAwMDApCi0JCQkJCWR1bXBfc2l6ZSA9IEZXX0RVTVBfU0laRV8xMjhLOwotCQkJCWVsc2UgaWYgKGhhLT5md19tZW1vcnlfc2l6ZSA8IDB4ODAwMDApCi0JCQkJCWR1bXBfc2l6ZSA9IEZXX0RVTVBfU0laRV81MTJLOwotCQkJfQotCQkJaGEtPmZ3X2R1bXBfYnVmZmVyID0gKGNoYXIgKil2bWFsbG9jKGR1bXBfc2l6ZSk7Ci0JCQlpZiAoaGEtPmZ3X2R1bXBfYnVmZmVyID09IE5VTEwpIHsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmaXJtd2FyZSAiCi0JCQkJICAgICJkdW1wIGJ1ZmZlciAoJWQpLlxuIiwgZHVtcF9zaXplKTsKLQotCQkJCWhhLT5md19kdW1wX3JlYWRpbmcgPSAwOwotCQkJCXJldHVybiAoY291bnQpOwotCQkJfQogCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICJGaXJtd2FyZSBkdW1wIHJlYWR5IGZvciByZWFkIG9uICglbGQpLlxuIiwKKwkJCSAgICAiUmF3IGZpcm13YXJlIGR1bXAgcmVhZHkgZm9yIHJlYWQgb24gKCVsZCkuXG4iLAogCQkJICAgIGhhLT5ob3N0X25vKTsKLQkJCW1lbXNldChoYS0+ZndfZHVtcF9idWZmZXIsIDAsIGR1bXBfc2l6ZSk7Ci0JCQloYS0+aXNwX29wcy5hc2NpaV9md19kdW1wKGhhKTsKLQkJCWhhLT5md19kdW1wX2J1ZmZlcl9sZW4gPSBzdHJsZW4oaGEtPmZ3X2R1bXBfYnVmZmVyKTsKIAkJfQogCQlicmVhazsKKwljYXNlIDI6CisJCXFsYTJ4MDBfYWxsb2NfZndfZHVtcChoYSk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gKGNvdW50KTsKIH0KQEAgLTMxMyw5ICsyOTQsNiBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBvZmYgIT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIUlTX1FMQTI0WFgoaGEpICYmICFJU19RTEE1NFhYKGhhKSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCS8qIFJlYWQgTlZSQU0uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJaGEtPmlzcF9vcHMucmVhZF9udnJhbShoYSwgKHVpbnQ4X3QgKilidWYsIGhhLT52cGRfYmFzZSwgaGEtPnZwZF9zaXplKTsKQEAgLTMzNSw5ICszMTMsNiBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBvZmYgIT0gMCB8fCBjb3VudCAhPSBoYS0+dnBkX3NpemUpCiAJCXJldHVybiAwOwogCi0JaWYgKCFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBNTRYWChoYSkpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAkvKiBXcml0ZSBOVlJBTS4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAloYS0+aXNwX29wcy53cml0ZV9udnJhbShoYSwgKHVpbnQ4X3QgKilidWYsIGhhLT52cGRfYmFzZSwgY291bnQpOwpAQCAtMzU3LDYgKzMzMiw1MyBAQAogCS53cml0ZSA9IHFsYTJ4MDBfc3lzZnNfd3JpdGVfdnBkLAogfTsKIAorc3RhdGljIHNzaXplX3QKK3FsYTJ4MDBfc3lzZnNfcmVhZF9zZnAoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKKyAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhID0gdG9fcWxhX2hvc3QoZGV2X3RvX3Nob3N0KGNvbnRhaW5lcl9vZihrb2JqLAorCSAgICBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSkpOworCXVpbnQxNl90IGl0ZXIsIGFkZHIsIG9mZnNldDsKKwlpbnQgcnZhbDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBvZmYgIT0gMCB8fCBjb3VudCAhPSBTRlBfREVWX1NJWkUgKiAyKQorCQlyZXR1cm4gMDsKKworCWFkZHIgPSAweGEwOworCWZvciAoaXRlciA9IDAsIG9mZnNldCA9IDA7IGl0ZXIgPCAoU0ZQX0RFVl9TSVpFICogMikgLyBTRlBfQkxPQ0tfU0laRTsKKwkgICAgaXRlcisrLCBvZmZzZXQgKz0gU0ZQX0JMT0NLX1NJWkUpIHsKKwkJaWYgKGl0ZXIgPT0gNCkgeworCQkJLyogU2tpcCB0byBuZXh0IGRldmljZSBhZGRyZXNzLiAqLworCQkJYWRkciA9IDB4YTI7CisJCQlvZmZzZXQgPSAwOworCQl9CisKKwkJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAoaGEsIGhhLT5zZnBfZGF0YV9kbWEsIGFkZHIsIG9mZnNldCwKKwkJICAgIFNGUF9CTE9DS19TSVpFKTsKKwkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiVW5hYmxlIHRvIHJlYWQgU0ZQIGRhdGEgKCV4LyV4LyV4KS5cbiIsIHJ2YWwsCisJCQkgICAgYWRkciwgb2Zmc2V0KTsKKwkJCWNvdW50ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCW1lbWNweShidWYsIGhhLT5zZnBfZGF0YSwgU0ZQX0JMT0NLX1NJWkUpOworCQlidWYgKz0gU0ZQX0JMT0NLX1NJWkU7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgc3lzZnNfc2ZwX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gInNmcCIsCisJCS5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1IsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSBTRlBfREVWX1NJWkUgKiAyLAorCS5yZWFkID0gcWxhMngwMF9zeXNmc19yZWFkX3NmcCwKK307CisKIHZvaWQKIHFsYTJ4MDBfYWxsb2Nfc3lzZnNfYXR0cihzY3NpX3FsYV9ob3N0X3QgKmhhKQogewpAQCAtMzY3LDcgKzM4OSwxMiBAQAogCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc19vcHRyb21fYXR0cik7CiAJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwKIAkgICAgJnN5c2ZzX29wdHJvbV9jdGxfYXR0cik7Ci0Jc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwgJnN5c2ZzX3ZwZF9hdHRyKTsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKKwkJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwKKwkJICAgICZzeXNmc192cGRfYXR0cik7CisJCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCisJCSAgICAmc3lzZnNfc2ZwX2F0dHIpOworCX0KIH0KIAogdm9pZApAQCAtMzgwLDcgKzQwNywxMiBAQAogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc19vcHRyb21fYXR0cik7CiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwKIAkgICAgJnN5c2ZzX29wdHJvbV9jdGxfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwgJnN5c2ZzX3ZwZF9hdHRyKTsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKKwkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwKKwkJICAgICZzeXNmc192cGRfYXR0cik7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCisJCSAgICAmc3lzZnNfc2ZwX2F0dHIpOworCX0KIAogCWlmIChoYS0+YmVhY29uX2JsaW5rX2xlZCA9PSAxKQogCQloYS0+aXNwX29wcy5iZWFjb25fb2ZmKGhhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYwppbmRleCA3NGU1NDcxLi5mNmVkNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCkBAIC04LDcgKzgsMzQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLXN0YXRpYyBpbnQgcWxhX3VwcmludGYoY2hhciAqKiwgY2hhciAqLCAuLi4pOworc3RhdGljIGlubGluZSB2b2lkCitxbGEyeHh4X3ByZXBfZHVtcChzY3NpX3FsYV9ob3N0X3QgKmhhLCBzdHJ1Y3QgcWxhMnh4eF9md19kdW1wICpmd19kdW1wKQoreworCWZ3X2R1bXAtPmZ3X21ham9yX3ZlcnNpb24gPSBodG9ubChoYS0+ZndfbWFqb3JfdmVyc2lvbik7CisJZndfZHVtcC0+ZndfbWlub3JfdmVyc2lvbiA9IGh0b25sKGhhLT5md19taW5vcl92ZXJzaW9uKTsKKwlmd19kdW1wLT5md19zdWJtaW5vcl92ZXJzaW9uID0gaHRvbmwoaGEtPmZ3X3N1Ym1pbm9yX3ZlcnNpb24pOworCWZ3X2R1bXAtPmZ3X2F0dHJpYnV0ZXMgPSBodG9ubChoYS0+ZndfYXR0cmlidXRlcyk7CisKKwlmd19kdW1wLT52ZW5kb3IgPSBodG9ubChoYS0+cGRldi0+dmVuZG9yKTsKKwlmd19kdW1wLT5kZXZpY2UgPSBodG9ubChoYS0+cGRldi0+ZGV2aWNlKTsKKwlmd19kdW1wLT5zdWJzeXN0ZW1fdmVuZG9yID0gaHRvbmwoaGEtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpOworCWZ3X2R1bXAtPnN1YnN5c3RlbV9kZXZpY2UgPSBodG9ubChoYS0+cGRldi0+c3Vic3lzdGVtX2RldmljZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitxbGEyeHh4X2NvcHlfcXVldWVzKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHZvaWQgKnB0cikKK3sKKwkvKiBSZXF1ZXN0IHF1ZXVlLiAqLworCW1lbWNweShwdHIsIGhhLT5yZXF1ZXN0X3JpbmcsIGhhLT5yZXF1ZXN0X3FfbGVuZ3RoICoKKwkgICAgc2l6ZW9mKHJlcXVlc3RfdCkpOworCisJLyogUmVzcG9uc2UgcXVldWUuICovCisJcHRyICs9IGhhLT5yZXF1ZXN0X3FfbGVuZ3RoICogc2l6ZW9mKHJlcXVlc3RfdCk7CisJbWVtY3B5KHB0ciwgaGEtPnJlc3BvbnNlX3JpbmcsIGhhLT5yZXNwb25zZV9xX2xlbmd0aCAgKgorCSAgICBzaXplb2YocmVzcG9uc2VfdCkpOworCisJcmV0dXJuIHB0ciArIChoYS0+cmVzcG9uc2VfcV9sZW5ndGggKiBzaXplb2YocmVzcG9uc2VfdCkpOworfQogCiAvKioKICAqIHFsYTIzMDBfZndfZHVtcCgpIC0gRHVtcHMgYmluYXJ5IGRhdGEgZnJvbSB0aGUgMjMwMCBmaXJtd2FyZS4KQEAgLTQ5LDEwICs3NiwxMSBAQAogCQkgICAgInJlcXVlc3QuLi5cbiIsIGhhLT5md19kdW1wKTsKIAkJZ290byBxbGEyMzAwX2Z3X2R1bXBfZmFpbGVkOwogCX0KLQlmdyA9IGhhLT5md19kdW1wOworCWZ3ID0gJmhhLT5md19kdW1wLT5pc3AuaXNwMjM7CisJcWxhMnh4eF9wcmVwX2R1bXAoaGEsIGhhLT5md19kdW1wKTsKIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKLQlmdy0+aGNjciA9IFJEX1JFR19XT1JEKCZyZWctPmhjY3IpOworCWZ3LT5oY2NyID0gaHRvbnMoUkRfUkVHX1dPUkQoJnJlZy0+aGNjcikpOwogCiAJLyogUGF1c2UgUklTQy4gKi8KIAlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwgSENDUl9QQVVTRV9SSVNDKTsKQEAgLTczLDg1ICsxMDEsODYgQEAKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikocmVnICsgMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5wYml1X3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5wYml1X3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5wYml1X3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDEwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfaG9zdF9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ob3N0X3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2hvc3RfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4NDApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+bWFpbGJveF9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+bWFpbGJveF9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+bWFpbGJveF9yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5jdHJsX3N0YXR1cywgMHg0MCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yZXNwX2RtYV9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmVzcF9kbWFfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJlc3BfZG1hX3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPmN0cmxfc3RhdHVzLCAweDUwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmRtYV9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+ZG1hX3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5kbWFfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+Y3RybF9zdGF0dXMsIDB4MDApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QTApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19oZHdfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnJpc2NfaGR3X3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2hkd19yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5wY3IsIDB4MjAwMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yaXNjX2dwMF9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ncDBfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJpc2NfZ3AwX3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPnBjciwgMHgyMjAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfZ3AxX3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5yaXNjX2dwMV9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cmlzY19ncDFfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+cGNyLCAweDI0MDApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19ncDJfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnJpc2NfZ3AyX3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2dwMl9yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5wY3IsIDB4MjYwMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yaXNjX2dwM19yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ncDNfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJpc2NfZ3AzX3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPnBjciwgMHgyODAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfZ3A0X3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5yaXNjX2dwNF9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cmlzY19ncDRfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+cGNyLCAweDJBMDApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19ncDVfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnJpc2NfZ3A1X3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2dwNV9yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5wY3IsIDB4MkMwMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yaXNjX2dwNl9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ncDZfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJpc2NfZ3A2X3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPnBjciwgMHgyRTAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfZ3A3X3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5yaXNjX2dwN19yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cmlzY19ncDdfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+Y3RybF9zdGF0dXMsIDB4MTApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+ZnJhbWVfYnVmX2hkd19yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+ZnJhbWVfYnVmX2hkd19yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+ZnJhbWVfYnVmX2hkd19yZWdbY250XSA9CisJCQkgICAgaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPmN0cmxfc3RhdHVzLCAweDIwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmZwbV9iMF9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+ZnBtX2IwX3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5mcG1fYjBfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+Y3RybF9zdGF0dXMsIDB4MzApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+ZnBtX2IxX3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5mcG1fYjFfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPmZwbV9iMV9yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIFJlc2V0IFJJU0MuICovCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5jdHJsX3N0YXR1cywgQ1NSX0lTUF9TT0ZUX1JFU0VUKTsKQEAgLTIyNiw3ICsyNTUsNyBAQAogCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSkgewogCQkJcnZhbCA9IG1iMCAmIE1CU19NQVNLOwotCQkJZnctPnJpc2NfcmFtW2NudF0gPSBtYjI7CisJCQlmdy0+cmlzY19yYW1bY250XSA9IGh0b25zKG1iMik7CiAJCX0gZWxzZSB7CiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfQpAQCAtMjg1LDcgKzMxNCw3IEBACiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpKSB7CiAJCQlydmFsID0gbWIwICYgTUJTX01BU0s7Ci0JCQlmdy0+c3RhY2tfcmFtW2NudF0gPSBtYjI7CisJCQlmdy0+c3RhY2tfcmFtW2NudF0gPSBodG9ucyhtYjIpOwogCQl9IGVsc2UgewogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCX0KQEAgLTM0NSwxMiArMzc0LDE1IEBACiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpKSB7CiAJCQlydmFsID0gbWIwICYgTUJTX01BU0s7Ci0JCQlmdy0+ZGF0YV9yYW1bY250XSA9IG1iMjsKKwkJCWZ3LT5kYXRhX3JhbVtjbnRdID0gaHRvbnMobWIyKTsKIAkJfSBlbHNlIHsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9CiAJfQogCisJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpCisJCXFsYTJ4eHhfY29weV9xdWV1ZXMoaGEsICZmdy0+ZGF0YV9yYW1bY250XSk7CisKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSAgICAiRmFpbGVkIHRvIGR1bXAgZmlybXdhcmUgKCV4KSEhIVxuIiwgcnZhbCk7CkBAIC0zNjksMTkzICs0MDEsNiBAQAogfQogCiAvKioKLSAqIHFsYTIzMDBfYXNjaWlfZndfZHVtcCgpIC0gQ29udmVydHMgYSBiaW5hcnkgZmlybXdhcmUgZHVtcCB0byBBU0NJSS4KLSAqIEBoYTogSEEgY29udGV4dAotICovCi12b2lkCi1xbGEyMzAwX2FzY2lpX2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICpoYSkKLXsKLQl1aW50MzJfdCBjbnQ7Ci0JY2hhciAqdWl0ZXI7Ci0JY2hhciBmd19pbmZvWzMwXTsKLQlzdHJ1Y3QgcWxhMjMwMF9md19kdW1wICpmdzsKLQl1aW50MzJfdCBkYXRhX3JhbV9jbnQ7Ci0KLQl1aXRlciA9IGhhLT5md19kdW1wX2J1ZmZlcjsKLQlmdyA9IGhhLT5md19kdW1wOwotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiJXMgRmlybXdhcmUgVmVyc2lvbiAlc1xuIiwgaGEtPm1vZGVsX251bWJlciwKLQkgICAgaGEtPmlzcF9vcHMuZndfdmVyc2lvbl9zdHIoaGEsIGZ3X2luZm8pKTsKLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuWz09PkJFR11cbiIpOwotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiSENDUiBSZWdpc3RlcjpcbiUwNHhcblxuIiwgZnctPmhjY3IpOwotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiUEJJVSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5wYml1X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnBiaXVfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SZXFRLVJzcFEtUmlzYzJIb3N0IFN0YXR1cyByZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2hvc3RfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ob3N0X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuTWFpbGJveCBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5tYWlsYm94X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPm1haWxib3hfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5BdXRvIFJlcXVlc3QgUmVzcG9uc2UgRE1BIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJlc3BfZG1hX3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJlc3BfZG1hX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuRE1BIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPmRtYV9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5kbWFfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SSVNDIEhhcmR3YXJlIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfaGR3X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJpc2NfaGR3X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBHUDAgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+cmlzY19ncDBfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ncDBfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SSVNDIEdQMSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2dwMV9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX2dwMV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgR1AyIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfZ3AyX3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJpc2NfZ3AyX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBHUDMgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+cmlzY19ncDNfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ncDNfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SSVNDIEdQNCBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2dwNF9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX2dwNF9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgR1A1IFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfZ3A1X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJpc2NfZ3A1X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBHUDYgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+cmlzY19ncDZfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ncDZfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SSVNDIEdQNyBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2dwN19yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX2dwN19yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cbkZyYW1lIEJ1ZmZlciBIYXJkd2FyZSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5mcmFtZV9idWZfaGR3X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPmZyYW1lX2J1Zl9oZHdfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5GUE0gQjAgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+ZnBtX2IwX3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPmZwbV9iMF9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cbkZQTSBCMSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5mcG1fYjFfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+ZnBtX2IxX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuQ29kZSBSQU0gRHVtcDoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfcmFtKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuJTA0eDogIiwgY250ICsgMHgwODAwKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX3JhbVtjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuU3RhY2sgUkFNIER1bXA6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5zdGFja19yYW0pIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4lMDV4OiAiLCBjbnQgKyAweDEwMDAwKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5zdGFja19yYW1bY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cbkRhdGEgUkFNIER1bXA6Iik7Ci0JZGF0YV9yYW1fY250ID0gaGEtPmZ3X21lbW9yeV9zaXplIC0gMHgxMTAwMCArIDE7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBkYXRhX3JhbV9jbnQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuJTA1eDogIiwgY250ICsgMHgxMTAwMCk7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+ZGF0YV9yYW1bY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cbls8PT1FTkRdIElTUCBEZWJ1ZyBEdW1wLiIpOwotfQotCi0vKioKICAqIHFsYTIxMDBfZndfZHVtcCgpIC0gRHVtcHMgYmluYXJ5IGRhdGEgZnJvbSB0aGUgMjEwMC8yMjAwIGZpcm13YXJlLgogICogQGhhOiBIQSBjb250ZXh0CiAgKiBAaGFyZHdhcmVfbG9ja2VkOiBDYWxsZWQgd2l0aCB0aGUgaGFyZHdhcmVfbG9jawpAQCAtNTkxLDEwICs0MzYsMTEgQEAKIAkJICAgICJyZXF1ZXN0Li4uXG4iLCBoYS0+ZndfZHVtcCk7CiAJCWdvdG8gcWxhMjEwMF9md19kdW1wX2ZhaWxlZDsKIAl9Ci0JZncgPSBoYS0+ZndfZHVtcDsKKwlmdyA9ICZoYS0+ZndfZHVtcC0+aXNwLmlzcDIxOworCXFsYTJ4eHhfcHJlcF9kdW1wKGhhLCBoYS0+ZndfZHVtcCk7CiAKIAlydmFsID0gUUxBX1NVQ0NFU1M7Ci0JZnctPmhjY3IgPSBSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKKwlmdy0+aGNjciA9IGh0b25zKFJEX1JFR19XT1JEKCZyZWctPmhjY3IpKTsKIAogCS8qIFBhdXNlIFJJU0MuICovCiAJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfUEFVU0VfUklTQyk7CkBAIC02MDgsNzkgKzQ1NCw4MSBAQAogCWlmIChydmFsID09IFFMQV9TVUNDRVNTKSB7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKShyZWcgKyAwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnBiaXVfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnBiaXVfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnBiaXVfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4MTApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IGhhLT5tYnhfY291bnQ7IGNudCsrKSB7CiAJCQlpZiAoY250ID09IDgpIHsKLQkJCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ZTApOworCQkJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKQorCQkJCQkoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ZTApOwogCQkJfQotCQkJZnctPm1haWxib3hfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPm1haWxib3hfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAkJfQogCiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHgyMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5kbWFfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPmRtYV9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+ZG1hX3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPmN0cmxfc3RhdHVzLCAweDAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEEwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfaGR3X3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5yaXNjX2hkd19yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cmlzY19oZHdfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+cGNyLCAweDIwMDApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19ncDBfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnJpc2NfZ3AwX3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2dwMF9yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5wY3IsIDB4MjEwMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yaXNjX2dwMV9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ncDFfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJpc2NfZ3AxX3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPnBjciwgMHgyMjAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfZ3AyX3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5yaXNjX2dwMl9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cmlzY19ncDJfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+cGNyLCAweDIzMDApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19ncDNfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnJpc2NfZ3AzX3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2dwM19yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5wY3IsIDB4MjQwMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yaXNjX2dwNF9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ncDRfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJpc2NfZ3A0X3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPnBjciwgMHgyNTAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfZ3A1X3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5yaXNjX2dwNV9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cmlzY19ncDVfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX1dPUkQoJnJlZy0+cGNyLCAweDI2MDApOwogCQlkbXBfcmVnID0gKHVpbnQxNl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4ODApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19ncDZfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPnJpc2NfZ3A2X3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yaXNjX2dwNl9yZWdbY250XSA9IGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5wY3IsIDB4MjcwMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yaXNjX2dwN19yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+cmlzY19ncDdfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPnJpc2NfZ3A3X3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPmN0cmxfc3RhdHVzLCAweDEwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmZyYW1lX2J1Zl9oZHdfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPmZyYW1lX2J1Zl9oZHdfcmVnW2NudF0gPSBSRF9SRUdfV09SRChkbXBfcmVnKyspOworCQkJZnctPmZyYW1lX2J1Zl9oZHdfcmVnW2NudF0gPQorCQkJICAgIGh0b25zKFJEX1JFR19XT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5jdHJsX3N0YXR1cywgMHgyMCk7CiAJCWRtcF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5mcG1fYjBfcmVnKSAvIDI7IGNudCsrKQotCQkJZnctPmZwbV9iMF9yZWdbY250XSA9IFJEX1JFR19XT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+ZnBtX2IwX3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19XT1JEKCZyZWctPmN0cmxfc3RhdHVzLCAweDMwKTsKIAkJZG1wX3JlZyA9ICh1aW50MTZfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweDgwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmZwbV9iMV9yZWcpIC8gMjsgY250KyspCi0JCQlmdy0+ZnBtX2IxX3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5mcG1fYjFfcmVnW2NudF0gPSBodG9ucyhSRF9SRUdfV09SRChkbXBfcmVnKyspKTsKIAogCQkvKiBSZXNldCB0aGUgSVNQLiAqLwogCQlXUlRfUkVHX1dPUkQoJnJlZy0+Y3RybF9zdGF0dXMsIENTUl9JU1BfU09GVF9SRVNFVCk7CkBAIC03NTUsMTIgKzYwMywxNSBAQAogCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSkgewogCQkJcnZhbCA9IG1iMCAmIE1CU19NQVNLOwotCQkJZnctPnJpc2NfcmFtW2NudF0gPSBtYjI7CisJCQlmdy0+cmlzY19yYW1bY250XSA9IGh0b25zKG1iMik7CiAJCX0gZWxzZSB7CiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfQogCX0KIAorCWlmIChydmFsID09IFFMQV9TVUNDRVNTKQorCQlxbGEyeHh4X2NvcHlfcXVldWVzKGhhLCAmZnctPnJpc2NfcmFtW2NudF0pOworCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkgICAgIkZhaWxlZCB0byBkdW1wIGZpcm13YXJlICgleCkhISFcbiIsIHJ2YWwpOwpAQCAtNzc4LDE3OSArNjI5LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIH0KIAotLyoqCi0gKiBxbGEyMTAwX2FzY2lpX2Z3X2R1bXAoKSAtIENvbnZlcnRzIGEgYmluYXJ5IGZpcm13YXJlIGR1bXAgdG8gQVNDSUkuCi0gKiBAaGE6IEhBIGNvbnRleHQKLSAqLwotdm9pZAotcWxhMjEwMF9hc2NpaV9md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqaGEpCi17Ci0JdWludDMyX3QgY250OwotCWNoYXIgKnVpdGVyOwotCWNoYXIgZndfaW5mb1szMF07Ci0Jc3RydWN0IHFsYTIxMDBfZndfZHVtcCAqZnc7Ci0KLQl1aXRlciA9IGhhLT5md19kdW1wX2J1ZmZlcjsKLQlmdyA9IGhhLT5md19kdW1wOwotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiJXMgRmlybXdhcmUgVmVyc2lvbiAlc1xuIiwgaGEtPm1vZGVsX251bWJlciwKLQkgICAgaGEtPmlzcF9vcHMuZndfdmVyc2lvbl9zdHIoaGEsIGZ3X2luZm8pKTsKLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuWz09PkJFR11cbiIpOwotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiSENDUiBSZWdpc3RlcjpcbiUwNHhcblxuIiwgZnctPmhjY3IpOwotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiUEJJVSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5wYml1X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnBiaXVfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5NYWlsYm94IFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPm1haWxib3hfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+bWFpbGJveF9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cbkRNQSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5kbWFfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+ZG1hX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBIYXJkd2FyZSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2hkd19yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX2hkd19yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgR1AwIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfZ3AwX3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJpc2NfZ3AwX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBHUDEgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+cmlzY19ncDFfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ncDFfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SSVNDIEdQMiBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2dwMl9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX2dwMl9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgR1AzIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfZ3AzX3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJpc2NfZ3AzX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBHUDQgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+cmlzY19ncDRfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ncDRfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SSVNDIEdQNSBSZWdpc3RlcnM6Iik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YgKGZ3LT5yaXNjX2dwNV9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX2dwNV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgR1A2IFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfZ3A2X3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPnJpc2NfZ3A2X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUklTQyBHUDcgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+cmlzY19ncDdfcmVnKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA0eCAiLCBmdy0+cmlzY19ncDdfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5GcmFtZSBCdWZmZXIgSGFyZHdhcmUgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+ZnJhbWVfYnVmX2hkd19yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5mcmFtZV9idWZfaGR3X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuRlBNIEIwIFJlZ2lzdGVyczoiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPmZwbV9iMF9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkgewotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5mcG1fYjBfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5GUE0gQjEgUmVnaXN0ZXJzOiIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mIChmdy0+ZnBtX2IxX3JlZykgLyAyOyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKSB7Ci0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwNHggIiwgZnctPmZwbV9iMV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgU1JBTToiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPnJpc2NfcmFtKSAvIDI7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuJTA0eDogIiwgY250ICsgMHgxMDAwKTsKLQkJfQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDR4ICIsIGZ3LT5yaXNjX3JhbVtjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuWzw9PUVORF0gSVNQIERlYnVnIER1bXAuIik7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQKLXFsYV91cHJpbnRmKGNoYXIgKip1aXRlciwgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50CWl0ZXIsIGxlbjsKLQljaGFyCWJ1ZlsxMjhdOwotCXZhX2xpc3QJYXJnczsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JbGVuID0gdnNwcmludGYoYnVmLCBmbXQsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQotCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBsZW47IGl0ZXIrKywgKnVpdGVyICs9IDEpCi0JCSp1aXRlclswXSA9IGJ1ZltpdGVyXTsKLQotCXJldHVybiAobGVuKTsKLX0KLQotCiB2b2lkCiBxbGEyNHh4X2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICpoYSwgaW50IGhhcmR3YXJlX2xvY2tlZCkKIHsKQEAgLTk2Nyw2ICs2NDUsNyBAQAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJc3RydWN0IHFsYTI0eHhfZndfZHVtcCAqZnc7CiAJdWludDMyX3QJZXh0X21lbV9jbnQ7CisJdm9pZAkJKmVmdDsKIAogCXJpc2NfYWRkcmVzcyA9IGV4dF9tZW1fY250ID0gMDsKIAltZW1zZXQobWIsIDAsIHNpemVvZihtYikpOwpAQCAtOTg3LDEwICs2NjYsMTEgQEAKIAkJICAgICJyZXF1ZXN0Li4uXG4iLCBoYS0+ZndfZHVtcCk7CiAJCWdvdG8gcWxhMjR4eF9md19kdW1wX2ZhaWxlZDsKIAl9Ci0JZncgPSBoYS0+ZndfZHVtcDsKKwlmdyA9ICZoYS0+ZndfZHVtcC0+aXNwLmlzcDI0OworCXFsYTJ4eHhfcHJlcF9kdW1wKGhhLCBoYS0+ZndfZHVtcCk7CiAKIAlydmFsID0gUUxBX1NVQ0NFU1M7Ci0JZnctPmhvc3Rfc3RhdHVzID0gUkRfUkVHX0RXT1JEKCZyZWctPmhvc3Rfc3RhdHVzKTsKKwlmdy0+aG9zdF9zdGF0dXMgPSBodG9ubChSRF9SRUdfRFdPUkQoJnJlZy0+aG9zdF9zdGF0dXMpKTsKIAogCS8qIFBhdXNlIFJJU0MuICovCiAJaWYgKChSRF9SRUdfRFdPUkQoJnJlZy0+aGNjcikgJiBIQ0NSWF9SSVNDX1BBVVNFKSA9PSAwKSB7CkBAIC0xMDEyLDcgKzY5Miw3IEBACiAJCS8qIEhvc3QgaW50ZXJmYWNlIHJlZ2lzdGVycy4gKi8KIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKHJlZyArIDApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+aG9zdF9yZWcpIC8gNDsgY250KyspCi0JCQlmdy0+aG9zdF9yZWdbY250XSA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJZnctPmhvc3RfcmVnW2NudF0gPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiAqLwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmljdHJsLCAwKTsKQEAgLTEwMjQsNDcwICs3MDQsNDcxIEBACiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhGMCk7CiAJCVdSVF9SRUdfRFdPUkQoZG1wX3JlZywgMHhCMDAwMDAwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhGQyk7Ci0JCWZ3LT5zaGFkb3dfcmVnWzBdID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcpOworCQlmdy0+c2hhZG93X3JlZ1swXSA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKSk7CiAKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEYwKTsKIAkJV1JUX1JFR19EV09SRChkbXBfcmVnLCAweEIwMTAwMDAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEZDKTsKLQkJZnctPnNoYWRvd19yZWdbMV0gPSBSRF9SRUdfRFdPUkQoZG1wX3JlZyk7CisJCWZ3LT5zaGFkb3dfcmVnWzFdID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcpKTsKIAogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4RjApOwogCQlXUlRfUkVHX0RXT1JEKGRtcF9yZWcsIDB4QjAyMDAwMDApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4RkMpOwotCQlmdy0+c2hhZG93X3JlZ1syXSA9IFJEX1JFR19EV09SRChkbXBfcmVnKTsKKwkJZnctPnNoYWRvd19yZWdbMl0gPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZykpOwogCiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhGMCk7CiAJCVdSVF9SRUdfRFdPUkQoZG1wX3JlZywgMHhCMDMwMDAwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhGQyk7Ci0JCWZ3LT5zaGFkb3dfcmVnWzNdID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcpOworCQlmdy0+c2hhZG93X3JlZ1szXSA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKSk7CiAKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEYwKTsKIAkJV1JUX1JFR19EV09SRChkbXBfcmVnLCAweEIwNDAwMDAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEZDKTsKLQkJZnctPnNoYWRvd19yZWdbNF0gPSBSRF9SRUdfRFdPUkQoZG1wX3JlZyk7CisJCWZ3LT5zaGFkb3dfcmVnWzRdID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcpKTsKIAogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4RjApOwogCQlXUlRfUkVHX0RXT1JEKGRtcF9yZWcsIDB4QjA1MDAwMDApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4RkMpOwotCQlmdy0+c2hhZG93X3JlZ1s1XSA9IFJEX1JFR19EV09SRChkbXBfcmVnKTsKKwkJZnctPnNoYWRvd19yZWdbNV0gPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZykpOwogCiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhGMCk7CiAJCVdSVF9SRUdfRFdPUkQoZG1wX3JlZywgMHhCMDYwMDAwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhGQyk7Ci0JCWZ3LT5zaGFkb3dfcmVnWzZdID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcpOworCQlmdy0+c2hhZG93X3JlZ1s2XSA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKSk7CiAKIAkJLyogTWFpbGJveCByZWdpc3RlcnMuICovCiAJCW1ieF9yZWcgPSAodWludDE2X3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHg4MCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5tYWlsYm94X3JlZykgLyAyOyBjbnQrKykKLQkJCWZ3LT5tYWlsYm94X3JlZ1tjbnRdID0gUkRfUkVHX1dPUkQobWJ4X3JlZysrKTsKKwkJCWZ3LT5tYWlsYm94X3JlZ1tjbnRdID0gaHRvbnMoUkRfUkVHX1dPUkQobWJ4X3JlZysrKSk7CiAKIAkJLyogVHJhbnNmZXIgc2VxdWVuY2UgcmVnaXN0ZXJzLiAqLwogCQlpdGVyX3JlZyA9IGZ3LT54c2VxX2dwX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjEwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjIwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjMwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjQwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjUwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjYwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRjcwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhCRkUwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhzZXFfMF9yZWcpIC8gNDsgY250KyspCi0JCQlmdy0+eHNlcV8wX3JlZ1tjbnRdID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+eHNlcV8wX3JlZ1tjbnRdID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4QkZGMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT54c2VxXzFfcmVnKSAvIDQ7IGNudCsrKQotCQkJZnctPnhzZXFfMV9yZWdbY250XSA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJZnctPnhzZXFfMV9yZWdbY250XSA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQkvKiBSZWNlaXZlIHNlcXVlbmNlIHJlZ2lzdGVycy4gKi8KIAkJaXRlcl9yZWcgPSBmdy0+cnNlcV9ncF9yZWc7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkYwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkYxMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkYyMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkYzMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkY0MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkY1MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkY2MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkY3MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4RkZEMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yc2VxXzBfcmVnKSAvIDQ7IGNudCsrKQotCQkJZnctPnJzZXFfMF9yZWdbY250XSA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJZnctPnJzZXFfMF9yZWdbY250XSA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweEZGRTApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cnNlcV8xX3JlZykgLyA0OyBjbnQrKykKLQkJCWZ3LT5yc2VxXzFfcmVnW2NudF0gPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5yc2VxXzFfcmVnW2NudF0gPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHhGRkYwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJzZXFfMl9yZWcpIC8gNDsgY250KyspCi0JCQlmdy0+cnNlcV8yX3JlZ1tjbnRdID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQlmdy0+cnNlcV8yX3JlZ1tjbnRdID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIENvbW1hbmQgRE1BIHJlZ2lzdGVycy4gKi8KIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3MTAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmNtZF9kbWFfcmVnKSAvIDQ7IGNudCsrKQotCQkJZnctPmNtZF9kbWFfcmVnW2NudF0gPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT5jbWRfZG1hX3JlZ1tjbnRdID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIFF1ZXVlcy4gKi8KIAkJaXRlcl9yZWcgPSBmdy0+cmVxMF9kbWFfcmVnOwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDcyMDApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDg7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhFNCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgNzsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJaXRlcl9yZWcgPSBmdy0+cmVzcDBfZG1hX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3MzAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCA4OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4RTQpOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDc7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCWl0ZXJfcmVnID0gZnctPnJlcTFfZG1hX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NDAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCA4OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4RTQpOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDc7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIFRyYW5zbWl0IERNQSByZWdpc3RlcnMuICovCiAJCWl0ZXJfcmVnID0gZnctPnhtdDBfZG1hX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NjAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NjEwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJaXRlcl9yZWcgPSBmdy0+eG10MV9kbWFfcmVnOwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc2MjApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc2MzApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlpdGVyX3JlZyA9IGZ3LT54bXQyX2RtYV9yZWc7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NzY0MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NzY1MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCWl0ZXJfcmVnID0gZnctPnhtdDNfZG1hX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NjYwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NjcwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJaXRlcl9yZWcgPSBmdy0+eG10NF9kbWFfcmVnOwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc2ODApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc2OTApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc2QTApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+eG10X2RhdGFfZG1hX3JlZykgLyA0OyBjbnQrKykKLQkJCWZ3LT54bXRfZGF0YV9kbWFfcmVnW2NudF0gPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCWZ3LT54bXRfZGF0YV9kbWFfcmVnW2NudF0gPQorCQkJICAgIGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQkvKiBSZWNlaXZlIERNQSByZWdpc3RlcnMuICovCiAJCWl0ZXJfcmVnID0gZnctPnJjdnQwX2RhdGFfZG1hX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NzAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHg3NzEwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJaXRlcl9yZWcgPSBmdy0+cmN2dDFfZGF0YV9kbWFfcmVnOwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc3MjApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlvYmFzZV9hZGRyLCAweDc3MzApOwogCQlkbXBfcmVnID0gKHVpbnQzMl90IF9faW9tZW0gKikoKHVpbnQ4X3QgX19pb21lbSAqKXJlZyArIDB4QzApOwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKLQkJCSppdGVyX3JlZysrID0gUkRfUkVHX0RXT1JEKGRtcF9yZWcrKyk7CisJCQkqaXRlcl9yZWcrKyA9IGh0b25sKFJEX1JFR19EV09SRChkbXBfcmVnKyspKTsKIAogCQkvKiBSSVNDIHJlZ2lzdGVycy4gKi8KIAkJaXRlcl9yZWcgPSBmdy0+cmlzY19ncF9yZWc7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEYwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEYxMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEYyMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEYzMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEY0MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEY1MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEY2MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4MEY3MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIExvY2FsIG1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVycy4gKi8KIAkJaXRlcl9yZWcgPSBmdy0+bG1jX3JlZzsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDAwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDEwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDIwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDMwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDQwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDUwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pb2Jhc2VfYWRkciwgMHgzMDYwKTsKIAkJZG1wX3JlZyA9ICh1aW50MzJfdCBfX2lvbWVtICopKCh1aW50OF90IF9faW9tZW0gKilyZWcgKyAweEMwKTsKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCi0JCQkqaXRlcl9yZWcrKyA9IFJEX1JFR19EV09SRChkbXBfcmVnKyspOworCQkJKml0ZXJfcmVnKysgPSBodG9ubChSRF9SRUdfRFdPUkQoZG1wX3JlZysrKSk7CiAKIAkJLyogRmlicmUgUHJvdG9jb2wgTW9kdWxlIHJlZ2lzdGVycy4gKi8KIAkJaXRlcl9yZWcgPSBmdy0+ZnBtX2hkd19yZWc7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDAwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDAxMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDAyMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDAzMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDA0MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDA1MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDA2MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDA3MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDA4MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDA5MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDBBMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NDBCMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIEZyYW1lIEJ1ZmZlciByZWdpc3RlcnMuICovCiAJCWl0ZXJfcmVnID0gZnctPmZiX2hkd19yZWc7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjAwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjAxMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjAyMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjAzMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjA0MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjEwMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjEzMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjE1MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjE3MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjE5MCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2FkZHIsIDB4NjFCMCk7CiAJCWRtcF9yZWcgPSAodWludDMyX3QgX19pb21lbSAqKSgodWludDhfdCBfX2lvbWVtICopcmVnICsgMHhDMCk7CiAJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQotCQkJKml0ZXJfcmVnKysgPSBSRF9SRUdfRFdPUkQoZG1wX3JlZysrKTsKKwkJCSppdGVyX3JlZysrID0gaHRvbmwoUkRfUkVHX0RXT1JEKGRtcF9yZWcrKykpOwogCiAJCS8qIFJlc2V0IFJJU0MuICovCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+Y3RybF9zdGF0dXMsCkBAIC0xNTc3LDcgKzEyNTgsNyBAQAogCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSkgewogCQkJcnZhbCA9IG1iWzBdICYgTUJTX01BU0s7Ci0JCQlmdy0+Y29kZV9yYW1bY250XSA9IChtYlszXSA8PCAxNikgfCBtYlsyXTsKKwkJCWZ3LT5jb2RlX3JhbVtjbnRdID0gaHRvbmwoKG1iWzNdIDw8IDE2KSB8IG1iWzJdKTsKIAkJfSBlbHNlIHsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9CkBAIC0xNjI3LDEyICsxMzA4LDE4IEBACiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpKSB7CiAJCQlydmFsID0gbWJbMF0gJiBNQlNfTUFTSzsKLQkJCWZ3LT5leHRfbWVtW2NudF0gPSAobWJbM10gPDwgMTYpIHwgbWJbMl07CisJCQlmdy0+ZXh0X21lbVtjbnRdID0gaHRvbmwoKG1iWzNdIDw8IDE2KSB8IG1iWzJdKTsKIAkJfSBlbHNlIHsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9CiAJfQogCisJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKKwkJZWZ0ID0gcWxhMnh4eF9jb3B5X3F1ZXVlcyhoYSwgJmZ3LT5leHRfbWVtW2NudF0pOworCQlpZiAoaGEtPmVmdCkKKwkJCW1lbWNweShlZnQsIGhhLT5lZnQsIG50b2hsKGhhLT5md19kdW1wLT5lZnRfc2l6ZSkpOworCX0KKwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJICAgICJGYWlsZWQgdG8gZHVtcCBmaXJtd2FyZSAoJXgpISEhXG4iLCBydmFsKTsKQEAgLTE2NTAsMjUyICsxMzM3LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZAotcWxhMjR4eF9hc2NpaV9md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqaGEpCi17Ci0JdWludDMyX3QgY250OwotCWNoYXIgKnVpdGVyOwotCXN0cnVjdCBxbGEyNHh4X2Z3X2R1bXAgKmZ3OwotCXVpbnQzMl90IGV4dF9tZW1fY250OwotCi0JdWl0ZXIgPSBoYS0+ZndfZHVtcF9idWZmZXI7Ci0JZncgPSBoYS0+ZndfZHVtcDsKLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIklTUCBGVyBWZXJzaW9uICVkLiUwMmQuJTAyZCBBdHRyaWJ1dGVzICUwNHhcbiIsCi0JICAgIGhhLT5md19tYWpvcl92ZXJzaW9uLCBoYS0+ZndfbWlub3JfdmVyc2lvbiwKLQkgICAgaGEtPmZ3X3N1Ym1pbm9yX3ZlcnNpb24sIGhhLT5md19hdHRyaWJ1dGVzKTsKLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuUjJIIFN0YXR1cyBSZWdpc3RlclxuJTA0eFxuIiwgZnctPmhvc3Rfc3RhdHVzKTsKLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuSG9zdCBJbnRlcmZhY2UgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmhvc3RfcmVnKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApCi0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCi0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPmhvc3RfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5TaGFkb3cgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnNoYWRvd19yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+c2hhZG93X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuTWFpbGJveCBSZWdpc3RlcnMiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+bWFpbGJveF9yZWcpIC8gMjsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+bWFpbGJveF9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhTRVEgR1AgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhzZXFfZ3BfcmVnKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApCi0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCi0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPnhzZXFfZ3BfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5YU0VRLTAgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhzZXFfMF9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+eHNlcV8wX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuWFNFUS0xIFJlZ2lzdGVycyIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT54c2VxXzFfcmVnKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApCi0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCi0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPnhzZXFfMV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJTRVEgR1AgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJzZXFfZ3BfcmVnKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApCi0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCi0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPnJzZXFfZ3BfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SU0VRLTAgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJzZXFfMF9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+cnNlcV8wX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUlNFUS0xIFJlZ2lzdGVycyIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yc2VxXzFfcmVnKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApCi0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCi0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPnJzZXFfMV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJTRVEtMiBSZWdpc3RlcnMiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cnNlcV8yX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT5yc2VxXzJfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5Db21tYW5kIERNQSBSZWdpc3RlcnMiKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+Y21kX2RtYV9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+Y21kX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJlcXVlc3QwIFF1ZXVlIERNQSBDaGFubmVsIFJlZ2lzdGVycyIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yZXEwX2RtYV9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+cmVxMF9kbWFfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SZXNwb25zZTAgUXVldWUgRE1BIENoYW5uZWwgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJlc3AwX2RtYV9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+cmVzcDBfZG1hX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUmVxdWVzdDEgUXVldWUgRE1BIENoYW5uZWwgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJlcTFfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT5yZXExX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhNVDAgRGF0YSBETUEgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhtdDBfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT54bXQwX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhNVDEgRGF0YSBETUEgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhtdDFfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT54bXQxX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhNVDIgRGF0YSBETUEgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhtdDJfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT54bXQyX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhNVDMgRGF0YSBETUEgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhtdDNfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT54bXQzX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhNVDQgRGF0YSBETUEgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhtdDRfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT54bXQ0X2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblhNVCBEYXRhIERNQSBDb21tb24gUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnhtdF9kYXRhX2RtYV9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+eG10X2RhdGFfZG1hX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuUkNWIFRocmVhZCAwIERhdGEgRE1BIFJlZ2lzdGVycyIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5yY3Z0MF9kYXRhX2RtYV9yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+cmN2dDBfZGF0YV9kbWFfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5SQ1YgVGhyZWFkIDEgRGF0YSBETUEgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJjdnQxX2RhdGFfZG1hX3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT5yY3Z0MV9kYXRhX2RtYV9yZWdbY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cblJJU0MgR1AgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnJpc2NfZ3BfcmVnKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApCi0JCQlxbGFfdXByaW50ZigmdWl0ZXIsICJcbiIpOwotCi0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPnJpc2NfZ3BfcmVnW2NudF0pOwotCX0KLQotCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuXG5MTUMgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmxtY19yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+bG1jX3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuRlBNIEhhcmR3YXJlIFJlZ2lzdGVycyIpOwotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZW9mKGZ3LT5mcG1faGR3X3JlZykgLyA0OyBjbnQrKykgewotCQlpZiAoY250ICUgOCA9PSAwKQotCQkJcWxhX3VwcmludGYoJnVpdGVyLCAiXG4iKTsKLQotCQlxbGFfdXByaW50ZigmdWl0ZXIsICIlMDh4ICIsIGZ3LT5mcG1faGR3X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuRkIgSGFyZHdhcmUgUmVnaXN0ZXJzIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPmZiX2hkd19yZWcpIC8gNDsgY250KyspIHsKLQkJaWYgKGNudCAlIDggPT0gMCkKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuIik7Ci0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+ZmJfaGR3X3JlZ1tjbnRdKTsKLQl9Ci0KLQlxbGFfdXByaW50ZigmdWl0ZXIsICJcblxuQ29kZSBSQU0iKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZnctPmNvZGVfcmFtKSAvIDQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuJTA4eDogIiwgY250ICsgMHgyMDAwMCk7Ci0JCX0KLQkJcWxhX3VwcmludGYoJnVpdGVyLCAiJTA4eCAiLCBmdy0+Y29kZV9yYW1bY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5cbkV4dGVybmFsIE1lbW9yeSIpOwotCWV4dF9tZW1fY250ID0gaGEtPmZ3X21lbW9yeV9zaXplIC0gMHgxMDAwMDAgKyAxOwotCWZvciAoY250ID0gMDsgY250IDwgZXh0X21lbV9jbnQ7IGNudCsrKSB7Ci0JCWlmIChjbnQgJSA4ID09IDApIHsKLQkJCXFsYV91cHJpbnRmKCZ1aXRlciwgIlxuJTA4eDogIiwgY250ICsgMHgxMDAwMDApOwotCQl9Ci0JCXFsYV91cHJpbnRmKCZ1aXRlciwgIiUwOHggIiwgZnctPmV4dF9tZW1bY250XSk7Ci0JfQotCi0JcWxhX3VwcmludGYoJnVpdGVyLCAiXG5bPD09RU5EXSBJU1AgRGVidWcgRHVtcCIpOwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIERlYnVnIEZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAppbmRleCBhYjZhZmVhLi41MzM0MjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCkBAIC0zNywxMzQgKzM3LDg2IEBACiAvKgogKiBNYWNyb3MgdXNlIGZvciBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4KICovCi0jdW5kZWYgRU5URVJfVFJBQ0UKLSNpZiBkZWZpbmVkKEVOVEVSX1RSQUNFKQotI2RlZmluZSBFTlRFUih4KQlkbyB7IHByaW50aygicWxhMjEwMCA6IEVudGVyaW5nICVzKClcbiIsIHgpOyB9IHdoaWxlICgwKQotI2RlZmluZSBMRUFWRSh4KQlkbyB7IHByaW50aygicWxhMjEwMCA6IExlYXZpbmcgJXMoKVxuIiwgeCk7ICB9IHdoaWxlICgwKQotI2RlZmluZSBFTlRFUl9JTlRSKHgpCWRvIHsgcHJpbnRrKCJxbGEyMTAwIDogRW50ZXJpbmcgJXMoKVxuIiwgeCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIExFQVZFX0lOVFIoeCkJZG8geyBwcmludGsoInFsYTIxMDAgOiBMZWF2aW5nICVzKClcbiIsIHgpOyAgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIEVOVEVSKHgpCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBMRUFWRSh4KQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgRU5URVJfSU5UUih4KSAJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIExFQVZFX0lOVFIoeCkgICBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgogCi0jaWYgIERFQlVHX1FMQTIxMDAKLSNkZWZpbmUgREVCVUcoeCkJZG8ge3g7fSB3aGlsZSAoMCk7Ci0jZWxzZQotI2RlZmluZSBERUJVRyh4KQlkbyB7fSB3aGlsZSAoMCk7Ci0jZW5kaWYKKyNkZWZpbmUgREVCVUcoeCkJZG8geyBpZiAoZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCiAKICNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzEpCi0jZGVmaW5lIERFQlVHMSh4KQlkbyB7eDt9IHdoaWxlICgwKTsKKyNkZWZpbmUgREVCVUcxKHgpCWRvIHt4O30gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBERUJVRzEoeCkJZG8ge30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzEoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMikKLSNkZWZpbmUgREVCVUcyKHgpICAgICAgIGRvIHt4O30gd2hpbGUgKDApOwotI2RlZmluZSBERUJVRzJfMyh4KSAgICAgZG8ge3g7fSB3aGlsZSAoMCk7Ci0jZGVmaW5lIERFQlVHMl8zXzExKHgpICBkbyB7eDt9IHdoaWxlICgwKTsKLSNkZWZpbmUgREVCVUcyXzlfMTAoeCkgICAgZG8ge3g7fSB3aGlsZSAoMCk7Ci0jZGVmaW5lIERFQlVHMl8xMSh4KSAgICBkbyB7eDt9IHdoaWxlICgwKTsKLSNkZWZpbmUgREVCVUcyXzEzKHgpICAgIGRvIHt4O30gd2hpbGUgKDApOwotI2Vsc2UKLSNkZWZpbmUgREVCVUcyKHgpCWRvIHt9IHdoaWxlICgwKTsKLSNlbmRpZgorI2RlZmluZSBERUJVRzIoeCkJZG8geyBpZiAoZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHMl8zKHgpCWRvIHsgaWYgKGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBERUJVRzJfM18xMSh4KQlkbyB7IGlmIChleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUcyXzlfMTAoeCkJZG8geyBpZiAoZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHMl8xMSh4KQlkbyB7IGlmIChleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUcyXzEzKHgpCWRvIHsgaWYgKGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQogCiAjaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8zKQotI2RlZmluZSBERUJVRzMoeCkJZG8ge3g7fSB3aGlsZSAoMCk7Ci0jZGVmaW5lIERFQlVHMl8zKHgpCWRvIHt4O30gd2hpbGUgKDApOwotI2RlZmluZSBERUJVRzJfM18xMSh4KQlkbyB7eDt9IHdoaWxlICgwKTsKLSNkZWZpbmUgREVCVUczXzExKHgpCWRvIHt4O30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzMoeCkJZG8ge3g7fSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUczXzExKHgpCWRvIHt4O30gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBERUJVRzMoeCkJZG8ge30gd2hpbGUgKDApOwotICAjaWYgIWRlZmluZWQoUUxfREVCVUdfTEVWRUxfMikKLSAgI2RlZmluZSBERUJVRzJfMyh4KQlkbyB7fSB3aGlsZSAoMCk7Ci0gICNlbmRpZgorI2RlZmluZSBERUJVRzMoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfNCkKLSNkZWZpbmUgREVCVUc0KHgpCWRvIHt4O30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzQoeCkJZG8ge3g7fSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIERFQlVHNCh4KQlkbyB7fSB3aGlsZSAoMCk7CisjZGVmaW5lIERFQlVHNCh4KQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF81KQotI2RlZmluZSBERUJVRzUoeCkgICAgICAgICAgZG8ge3g7fSB3aGlsZSAoMCk7CisjZGVmaW5lIERFQlVHNSh4KSAgICAgICAgICBkbyB7eDt9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgREVCVUc1KHgpCWRvIHt9IHdoaWxlICgwKTsKKyNkZWZpbmUgREVCVUc1KHgpCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzcpCi0jZGVmaW5lIERFQlVHNyh4KSAgICAgICAgICBkbyB7eDt9IHdoaWxlICgwKTsKKyNkZWZpbmUgREVCVUc3KHgpICAgICAgICAgIGRvIHt4O30gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBERUJVRzcoeCkJICAgZG8ge30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzcoeCkJICAgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfOSkKLSNkZWZpbmUgREVCVUc5KHgpICAgICAgIGRvIHt4O30gd2hpbGUgKDApOwotI2RlZmluZSBERUJVRzlfMTAoeCkgICAgZG8ge3g7fSB3aGlsZSAoMCk7Ci0jZGVmaW5lIERFQlVHMl85XzEwKHgpCWRvIHt4O30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzkoeCkgICAgICAgZG8ge3g7fSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUc5XzEwKHgpICAgIGRvIHt4O30gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBERUJVRzkoeCkJZG8ge30gd2hpbGUgKDApOworI2RlZmluZSBERUJVRzkoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTApCi0jZGVmaW5lIERFQlVHMTAoeCkgICAgICBkbyB7eDt9IHdoaWxlICgwKTsKLSNkZWZpbmUgREVCVUcyXzlfMTAoeCkJZG8ge3g7fSB3aGlsZSAoMCk7Ci0jZGVmaW5lIERFQlVHOV8xMCh4KQlkbyB7eDt9IHdoaWxlICgwKTsKKyNkZWZpbmUgREVCVUcxMCh4KSAgICAgIGRvIHt4O30gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHOV8xMCh4KQlkbyB7eDt9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgREVCVUcxMCh4KQlkbyB7fSB3aGlsZSAoMCk7Ci0gICNpZiAhZGVmaW5lZChERUJVRzJfOV8xMCkKLSAgI2RlZmluZSBERUJVRzJfOV8xMCh4KQlkbyB7fSB3aGlsZSAoMCk7Ci0gICNlbmRpZgorI2RlZmluZSBERUJVRzEwKHgpCWRvIHt9IHdoaWxlICgwKQogICAjaWYgIWRlZmluZWQoREVCVUc5XzEwKQotICAjZGVmaW5lIERFQlVHOV8xMCh4KQlkbyB7fSB3aGlsZSAoMCk7CisgICNkZWZpbmUgREVCVUc5XzEwKHgpCWRvIHt9IHdoaWxlICgwKQogICAjZW5kaWYKICNlbmRpZgogCiAjaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xMSkKLSNkZWZpbmUgREVCVUcxMSh4KSAgICAgIGRve3g7fSB3aGlsZSgwKTsKLSNpZiAhZGVmaW5lZChERUJVRzJfMTEpCi0jZGVmaW5lIERFQlVHMl8xMSh4KSAgICBkb3t4O30gd2hpbGUoMCk7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChERUJVRzJfM18xMSkKLSNkZWZpbmUgREVCVUcyXzNfMTEoeCkgIGRve3g7fSB3aGlsZSgwKTsKLSNlbmRpZgorI2RlZmluZSBERUJVRzExKHgpICAgICAgZG97eDt9IHdoaWxlKDApCiAjaWYgIWRlZmluZWQoREVCVUczXzExKQotI2RlZmluZSBERUJVRzNfMTEoeCkgICAgZG97eDt9IHdoaWxlKDApOworI2RlZmluZSBERUJVRzNfMTEoeCkgICAgZG97eDt9IHdoaWxlKDApCiAjZW5kaWYKICNlbHNlCi0jZGVmaW5lIERFQlVHMTEoeCkJZG97fSB3aGlsZSgwKTsKLSAgI2lmICFkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzIpCi0gICNkZWZpbmUgREVCVUcyXzExKHgpCWRve30gd2hpbGUoMCk7Ci0gICAgI2lmICFkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzMpCi0gICAgI2RlZmluZSBERUJVRzJfM18xMSh4KSBkb3t9IHdoaWxlKDApOwotICAgICNlbmRpZgotICAjZW5kaWYKKyNkZWZpbmUgREVCVUcxMSh4KQlkb3t9IHdoaWxlKDApCiAgICNpZiAhZGVmaW5lZChRTF9ERUJVR19MRVZFTF8zKQotICAjZGVmaW5lIERFQlVHM18xMSh4KQlkb3t9IHdoaWxlKDApOworICAjZGVmaW5lIERFQlVHM18xMSh4KQlkb3t9IHdoaWxlKDApCiAgICNlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzEyKQotI2RlZmluZSBERUJVRzEyKHgpICAgICAgZG8ge3g7fSB3aGlsZSAoMCk7CisjZGVmaW5lIERFQlVHMTIoeCkgICAgICBkbyB7eDt9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgREVCVUcxMih4KQlkbyB7fSB3aGlsZSAoMCk7CisjZGVmaW5lIERFQlVHMTIoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTMpCiAjZGVmaW5lIERFQlVHMTMoeCkgICAgICBkbyB7eDt9IHdoaWxlICgwKQotI2lmICFkZWZpbmVkKERFQlVHMl8xMykKLSNkZWZpbmUgREVCVUcyXzEzKHgpICAgIGRvIHt4O30gd2hpbGUoMCkKLSNlbmRpZgogI2Vsc2UKICNkZWZpbmUgREVCVUcxMyh4KQlkbyB7fSB3aGlsZSAoMCkKLSNpZiAhZGVmaW5lZChRTF9ERUJVR19MRVZFTF8yKQotI2RlZmluZSBERUJVRzJfMTMoeCkJZG8ge30gd2hpbGUoMCkKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzE0KQpAQCAtMTc2LDkgKzEyOCw2IEBACiAvKgogICogRmlybXdhcmUgRHVtcCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICovCi0jZGVmaW5lIEZXX0RVTVBfU0laRV8xMjhLCTB4QkMwMDAKLSNkZWZpbmUgRldfRFVNUF9TSVpFXzUxMksJMHgyRkMwMDAKLSNkZWZpbmUgRldfRFVNUF9TSVpFXzFNCQkweDVGQzAwMAogCiBzdHJ1Y3QgcWxhMjMwMF9md19kdW1wIHsKIAl1aW50MTZfdCBoY2NyOwpAQCAtMjI0LDggKzE3Myw2IEBACiAJdWludDE2X3QgcmlzY19yYW1bMHhmMDAwXTsKIH07CiAKLSNkZWZpbmUgRldfRFVNUF9TSVpFXzI0WFgJMHgyQjAwMDAKLQogc3RydWN0IHFsYTI0eHhfZndfZHVtcCB7CiAJdWludDMyX3QgaG9zdF9zdGF0dXM7CiAJdWludDMyX3QgaG9zdF9yZWdbMzJdOwpAQCAtMjU3LDMgKzIwNCwzOSBAQAogCXVpbnQzMl90IGNvZGVfcmFtWzB4MjAwMF07CiAJdWludDMyX3QgZXh0X21lbVsxXTsKIH07CisKKyNkZWZpbmUgRUZUX05VTV9CVUZGRVJTCQk0CisjZGVmaW5lIEVGVF9CWVRFU19QRVJfQlVGRkVSCTB4NDAwMAorI2RlZmluZSBFRlRfU0laRQkJKChFRlRfQllURVNfUEVSX0JVRkZFUikgKiAoRUZUX05VTV9CVUZGRVJTKSkKKworc3RydWN0IHFsYTJ4eHhfZndfZHVtcCB7CisJdWludDhfdCBzaWduYXR1cmVbNF07CisJdWludDMyX3QgdmVyc2lvbjsKKworCXVpbnQzMl90IGZ3X21ham9yX3ZlcnNpb247CisJdWludDMyX3QgZndfbWlub3JfdmVyc2lvbjsKKwl1aW50MzJfdCBmd19zdWJtaW5vcl92ZXJzaW9uOworCXVpbnQzMl90IGZ3X2F0dHJpYnV0ZXM7CisKKwl1aW50MzJfdCB2ZW5kb3I7CisJdWludDMyX3QgZGV2aWNlOworCXVpbnQzMl90IHN1YnN5c3RlbV92ZW5kb3I7CisJdWludDMyX3Qgc3Vic3lzdGVtX2RldmljZTsKKworCXVpbnQzMl90IGZpeGVkX3NpemU7CisJdWludDMyX3QgbWVtX3NpemU7CisJdWludDMyX3QgcmVxX3Ffc2l6ZTsKKwl1aW50MzJfdCByc3BfcV9zaXplOworCisJdWludDMyX3QgZWZ0X3NpemU7CisJdWludDMyX3QgZWZ0X2FkZHJfbDsKKwl1aW50MzJfdCBlZnRfYWRkcl9oOworCisJdWludDMyX3QgaGVhZGVyX3NpemU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBxbGEyMTAwX2Z3X2R1bXAgaXNwMjE7CisJCXN0cnVjdCBxbGEyMzAwX2Z3X2R1bXAgaXNwMjM7CisJCXN0cnVjdCBxbGEyNHh4X2Z3X2R1bXAgaXNwMjQ7CisJfSBpc3A7Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IGQ2ZjY1NzkuLjEzOWVhMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTYwOCw3ICs2MDgsOSBAQAogI2RlZmluZSBNQkNfU0VSREVTX1BBUkFNUwkJMHgxMAkvKiBTZXJkZXMgVHggUGFyYW1ldGVycy4gKi8KICNkZWZpbmUgTUJDX0dFVF9JT0NCX1NUQVRVUwkJMHgxMgkvKiBHZXQgSU9DQiBzdGF0dXMgY29tbWFuZC4gKi8KICNkZWZpbmUgTUJDX0dFVF9USU1FT1VUX1BBUkFNUwkJMHgyMgkvKiBHZXQgRlcgdGltZW91dHMuICovCisjZGVmaW5lIE1CQ19UUkFDRV9DT05UUk9MCQkweDI3CS8qIFRyYWNlIGNvbnRyb2wgY29tbWFuZC4gKi8KICNkZWZpbmUgTUJDX0dFTl9TWVNURU1fRVJST1IJCTB4MmEJLyogR2VuZXJhdGUgU3lzdGVtIEVycm9yLiAqLworI2RlZmluZSBNQkNfUkVBRF9TRlAJCQkweDMxCS8qIFJlYWQgU0ZQIERhdGEuICovCiAjZGVmaW5lIE1CQ19TRVRfVElNRU9VVF9QQVJBTVMJCTB4MzIJLyogU2V0IEZXIHRpbWVvdXRzLiAqLwogI2RlZmluZSBNQkNfTUlEX0lOSVRJQUxJWkVfRklSTVdBUkUJMHg0OAkvKiBNSUQgSW5pdGlhbGl6ZSBmaXJtd2FyZS4gKi8KICNkZWZpbmUgTUJDX01JRF9HRVRfVlBfREFUQUJBU0UJCTB4NDkJLyogTUlEIEdldCBWUCBEYXRhYmFzZS4gKi8KQEAgLTYxOCw2ICs2MjAsOSBAQAogI2RlZmluZSBNQkNfR0VUX0xJTktfUFJJVl9TVEFUUwkJMHg2ZAkvKiBHZXQgbGluayAmIHByaXZhdGUgZGF0YS4gKi8KICNkZWZpbmUgTUJDX1NFVF9WRU5ET1JfSUQJCTB4NzYJLyogU2V0IFZlbmRvciBJRC4gKi8KIAorI2RlZmluZSBUQ19FTkFCTEUJCQk0CisjZGVmaW5lIFRDX0RJU0FCTEUJCQk1CisKIC8qIEZpcm13YXJlIHJldHVybiBkYXRhIHNpemVzICovCiAjZGVmaW5lIEZDQUxfTUFQX1NJWkUJMTI4CiAKQEAgLTE5OTcsNyArMjAwMiw2IEBACiAJCXVpbnQzMl90KTsKIAogCXZvaWQgKCpmd19kdW1wKSAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgaW50KTsKLQl2b2lkICgqYXNjaWlfZndfZHVtcCkgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwogCiAJaW50ICgqYmVhY29uX29uKSAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiAJaW50ICgqYmVhY29uX29mZikgKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwpAQCAtMjA0MSw2ICsyMDQ1LDcgQEAKIAkJdWludDMyX3QJZW5hYmxlX2xlZF9zY2hlbWUJOjE7CiAJCXVpbnQzMl90CW1zaV9lbmFibGVkCQk6MTsKIAkJdWludDMyX3QJbXNpeF9lbmFibGVkCQk6MTsKKwkJdWludDMyX3QJZGlzYWJsZV9zZXJkZXMJCToxOwogCX0gZmxhZ3M7CiAKIAlhdG9taWNfdAlsb29wX3N0YXRlOwpAQCAtMjEzNCw3ICsyMTM5LDcgQEAKIAltZW1wb29sX3QJKnNyYl9tZW1wb29sOwogCiAJLyogVGhpcyBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgImlvIHRyYW5zYWN0aW9ucyIsIHlvdSBtdXN0Ci0JICogYXF1aXJlIGl0IGJlZm9yZSBkb2luZyBhbnkgSU8gdG8gdGhlIGNhcmQsIGVnIHdpdGggUkRfUkVHKigpIGFuZAorCSAqIGFjcXVpcmUgaXQgYmVmb3JlIGRvaW5nIGFueSBJTyB0byB0aGUgY2FyZCwgZWcgd2l0aCBSRF9SRUcqKCkgYW5kCiAJICogV1JUX1JFRyooKSBmb3IgdGhlIGR1cmF0aW9uIG9mIHlvdXIgZW50aXJlIGNvbW1hbmR0cmFuc2FjdGlvbi4KIAkgKgogCSAqIFRoaXMgc3BpbmxvY2sgaXMgb2YgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgaW8gcmVxdWVzdCBsb2NrLgpAQCAtMjIzOCw2ICsyMjQzLDExIEBACiAJc3RydWN0IHNuc19jbWRfcGt0CSpzbnNfY21kOwogCWRtYV9hZGRyX3QJCXNuc19jbWRfZG1hOwogCisjZGVmaW5lIFNGUF9ERVZfU0laRQkyNTYKKyNkZWZpbmUgU0ZQX0JMT0NLX1NJWkUJNjQKKwl2b2lkCQkJKnNmcF9kYXRhOworCWRtYV9hZGRyX3QJCXNmcF9kYXRhX2RtYTsKKwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqZHBjX3RocmVhZDsKIAl1aW50OF90IGRwY19hY3RpdmU7ICAgICAgICAgICAgICAgICAgLyogRFBDIHJvdXRpbmUgaXMgYWN0aXZlICovCiAKQEAgLTIzMDMsMTEgKzIzMTMsMTIgQEAKIAl1aW50MTZfdAlmd19zZXJpYWxsaW5rX29wdGlvbnMyNFs0XTsKIAogCS8qIEZpcm13YXJlIGR1bXAgaW5mb3JtYXRpb24uICovCi0Jdm9pZAkJKmZ3X2R1bXA7CisJc3RydWN0IHFsYTJ4eHhfZndfZHVtcCAqZndfZHVtcDsKKwl1aW50MzJfdAlmd19kdW1wX2xlbjsKIAlpbnQJCWZ3X2R1bXBlZDsKIAlpbnQJCWZ3X2R1bXBfcmVhZGluZzsKLQljaGFyCQkqZndfZHVtcF9idWZmZXI7Ci0JaW50CQlmd19kdW1wX2J1ZmZlcl9sZW47CisJZG1hX2FkZHJfdAllZnRfZG1hOworCXZvaWQJCSplZnQ7CiAKIAl1aW50OF90CQlob3N0X3N0clsxNl07CiAJdWludDMyX3QJcGNpX2F0dHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGV2dGJsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGV2dGJsLmgKaW5kZXggYThmYzBmZi4uZGQ0MzU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RldnRibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZXZ0YmwuaApAQCAtMSw0ICsxLDQgQEAKLSNkZWZpbmUgUUxBX01PREVMX05BTUVTICAgICAgICAgMHg0QQorI2RlZmluZSBRTEFfTU9ERUxfTkFNRVMJCTB4NTcKIAogLyoKICAqIEFkYXB0ZXIgbW9kZWwgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucy4KQEAgLTc2LDYgKzc2LDE5IEBACiAJIlFMRTI0NDAiLAkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTQ1ICovCiAJIlFMRTI0NjQiLAkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBRdWFkIENoYW5uZWwiLAkJLyogMHgxNDYgKi8KIAkiUUxBMjQ0MCIsCSJQQ0ktWCAyLjAgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCQkvKiAweDE0NyAqLwotCSIgIiwJCSIgIiwJCQkJCQkvKiAweDE0OCAqLworCSJIUCBBRTM2OUEiLAkiUENJLVggMi4wIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTQ4ICovCiAJIlFMQTIzNDAiLAkiU3VuIDEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxNDkgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxNGEgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxNGIgKi8KKwkiUU1DMjQzMk0iLAkiSUJNIGVTZXJ2ZXIgQkMgNEdiIEZDIEV4cGFuc2lvbiBDYXJkIENGRkUiLAkvKiAweDE0YyAqLworCSJRTUMyNDIyTSIsCSJJQk0gZVNlcnZlciBCQyA0R2IgRkMgRXhwYW5zaW9uIENhcmQgQ0ZGWCIsCS8qIDB4MTRkICovCisJIlFMRTIyMCIsCSJTdW4gUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTRlICovCisJIiAiLAkJIiAiLAkJCQkJCS8qIDB4MTRmICovCisJIiAiLAkJIiAiLAkJCQkJCS8qIDB4MTUwICovCisJIiAiLAkJIiAiLAkJCQkJCS8qIDB4MTUxICovCisJIlFNRTI0NjIiLAkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBEdWFsIENoYW5uZWwgTWV6eiBIQkEiLAkvKiAweDE1MiAqLworCSJRTUgyNDYyIiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIE1lenogSEJBIiwJLyogMHgxNTMgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxNTQgKi8KKwkiUUxFMjIwIiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDE1NSAqLworCSJRTEUyMjAiLAkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTU2ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCAzYWY0Nzg2Ni4uYTBhNzIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTE0MSw3ICsxNDEsNyBAQAogCSAqIEJJVCAyICA9IEVuYWJsZSBNZW1vcnkgTWFwIEJJT1MKIAkgKiBCSVQgMyAgPSBFbmFibGUgU2VsZWN0YWJsZSBCb290CiAJICogQklUIDQgID0gRGlzYWJsZSBSSVNDIGNvZGUgbG9hZAotCSAqIEJJVCA1ICA9CisJICogQklUIDUgID0gRGlzYWJsZSBTZXJkZXMKIAkgKiBCSVQgNiAgPQogCSAqIEJJVCA3ICA9CiAJICoKQEAgLTI3OCw3ICsyNzgsNyBAQAogCXVpbnQxNl90IHJlc3BvbnNlX3FfbGVuZ3RoOwogCXVpbnQxNl90IHJlcXVlc3RfcV9sZW5ndGg7CiAKLQl1aW50MTZfdCBsaW5rX2Rvd25fdGltZW91dDsJCS8qIE1pbGxpc2Vjb25kcy4gKi8KKwl1aW50MTZfdCBsaW5rX2Rvd25fb25fbm9zOwkJLyogTWlsbGlzZWNvbmRzLiAqLwogCiAJdWludDE2X3QgcHJpb19yZXF1ZXN0X3FfbGVuZ3RoOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggMTY0ZDUzYy4uODMxMWFjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtMzEsMTMgKzMxLDkgQEAKIGV4dGVybiB2b2lkIHFsYTI0eHhfdXBkYXRlX2Z3X29wdGlvbnMoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIGludCBxbGEyeDAwX2xvYWRfcmlzYyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCB1aW50MzJfdCAqKTsKIGV4dGVybiBpbnQgcWxhMjR4eF9sb2FkX3Jpc2Moc2NzaV9xbGFfaG9zdF90ICosIHVpbnQzMl90ICopOwotZXh0ZXJuIGludCBxbGEyNHh4X2xvYWRfcmlzY19mbGFzaChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDMyX3QgKik7Ci0KLWV4dGVybiBmY19wb3J0X3QgKnFsYTJ4MDBfYWxsb2NfZmNwb3J0KHNjc2lfcWxhX2hvc3RfdCAqLCBnZnBfdCk7CiAKIGV4dGVybiBpbnQgcWxhMngwMF9sb29wX3Jlc3luYyhzY3NpX3FsYV9ob3N0X3QgKik7CiAKLWV4dGVybiBpbnQgcWxhMngwMF9maW5kX25ld19sb29wX2lkKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfZmFicmljX2xvZ2luKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKiwgdWludDE2X3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfbG9jYWxfZGV2aWNlX2xvZ2luKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKik7CiAKQEAgLTUxLDYgKzQ3LDggQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfdXBkYXRlX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9yZWdfcmVtb3RlX3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGZjX3BvcnRfdCAqKTsKIAorZXh0ZXJuIHZvaWQgcWxhMngwMF9hbGxvY19md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqKTsKKwogLyoKICAqIEdsb2JhbCBEYXRhIGluIHFsYV9vcy5jIHNvdXJjZSBmaWxlLgogICovCkBAIC02MSw2ICs1OSw4IEBACiBleHRlcm4gaW50IHFsMnhwbG9naWFic2VudGRldmljZTsKIGV4dGVybiBpbnQgcWwyeGxvZ2lucmV0cnljb3VudDsKIGV4dGVybiBpbnQgcWwyeGZkbWllbmFibGU7CitleHRlcm4gaW50IHFsMnhhbGxvY2Z3ZHVtcDsKK2V4dGVybiBpbnQgZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZzsKIAogZXh0ZXJuIHZvaWQgcWxhMngwMF9zcF9jb21wbChzY3NpX3FsYV9ob3N0X3QgKiwgc3JiX3QgKik7CiAKQEAgLTgwLDggKzgwLDYgQEAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfaW9jYi5jIHNvdXJjZSBmaWxlLgogICovCi1leHRlcm4gdm9pZCBxbGEyeDAwX2lzcF9jbWQoc2NzaV9xbGFfaG9zdF90ICopOwotCiBleHRlcm4gdWludDE2X3QgcWxhMngwMF9jYWxjX2lvY2JzXzMyKHVpbnQxNl90KTsKIGV4dGVybiB1aW50MTZfdCBxbGEyeDAwX2NhbGNfaW9jYnNfNjQodWludDE2X3QpOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9idWlsZF9zY3NpX2lvY2JzXzMyKHNyYl90ICosIGNtZF9lbnRyeV90ICosIHVpbnQxNl90KTsKQEAgLTIwNCw2ICsyMDIsMTIgQEAKIGV4dGVybiBpbnQKIHFsYTJ4MDBfc3RvcF9maXJtd2FyZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKK2V4dGVybiBpbnQKK3FsYTJ4MDBfdHJhY2VfY29udHJvbChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIGRtYV9hZGRyX3QsIHVpbnQxNl90KTsKKworZXh0ZXJuIGludAorcWxhMngwMF9yZWFkX3NmcChzY3NpX3FsYV9ob3N0X3QgKiwgZG1hX2FkZHJfdCwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCk7CisKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfaXNyLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTI1NCw5ICsyNTgsNiBAQAogZXh0ZXJuIHZvaWQgcWxhMjEwMF9md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgcWxhMjMwMF9md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgcWxhMjR4eF9md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgcWxhMjEwMF9hc2NpaV9md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqKTsKLWV4dGVybiB2b2lkIHFsYTIzMDBfYXNjaWlfZndfZHVtcChzY3NpX3FsYV9ob3N0X3QgKik7Ci1leHRlcm4gdm9pZCBxbGEyNHh4X2FzY2lpX2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9kdW1wX3JlZ3Moc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9kdW1wX2J1ZmZlcih1aW50OF90ICosIHVpbnQzMl90KTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfcHJpbnRfc2NzaV9jbWQoc3RydWN0IHNjc2lfY21uZCAqKTsKQEAgLTI4MCwxMyArMjgxLDYgQEAKIGV4dGVybiBpbnQgcWxhMngwMF9mZG1pX3JlZ2lzdGVyKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogLyoKLSAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV94aW9jdGwuYyBzb3VyY2UgZmlsZS4KLSAqLwotI2RlZmluZSBxbGEyeDAwX2VucXVldWVfYWVuKGhhLCBjbWQsIG1vZGUpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcWxhMngwMF9hbGxvY19pb2N0bF9tZW0oaGEpCQkoMCkKLSNkZWZpbmUgcWxhMngwMF9mcmVlX2lvY3RsX21lbShoYSkJCWRvIHsgfSB3aGlsZSAoMCkKLQotLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9hdHRyLmMgc291cmNlIGZpbGUuCiAgKi8KIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggM2Q0NDg3ZS4uOTc1OGRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0zOSw2ICszOSw4IEBACiAKIHN0YXRpYyBpbnQgcWxhMngwMF9yZXN0YXJ0X2lzcChzY3NpX3FsYV9ob3N0X3QgKik7CiAKK3N0YXRpYyBpbnQgcWxhMngwMF9maW5kX25ld19sb29wX2lkKHNjc2lfcWxhX2hvc3RfdCAqaGEsIGZjX3BvcnRfdCAqZGV2KTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICBRTG9naWMgSVNQMngwMCBIYXJkd2FyZSBTdXBwb3J0IEZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODksNiArOTEsMTcgQEAKIAogCWhhLT5pc3Bfb3BzLm52cmFtX2NvbmZpZyhoYSk7CiAKKwlpZiAoaGEtPmZsYWdzLmRpc2FibGVfc2VyZGVzKSB7CisJCS8qIE1hc2sgSEJBIHZpYSBOVlJBTSBzZXR0aW5ncz8gKi8KKwkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiTWFza2luZyBIQkEgV1dQTiAiCisJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggKHZpYSBOVlJBTSkuXG4iLAorCQkgICAgaGEtPnBvcnRfbmFtZVswXSwgaGEtPnBvcnRfbmFtZVsxXSwKKwkJICAgIGhhLT5wb3J0X25hbWVbMl0sIGhhLT5wb3J0X25hbWVbM10sCisJCSAgICBoYS0+cG9ydF9uYW1lWzRdLCBoYS0+cG9ydF9uYW1lWzVdLAorCQkgICAgaGEtPnBvcnRfbmFtZVs2XSwgaGEtPnBvcnRfbmFtZVs3XSk7CisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCX0KKwogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlZlcmlmeWluZyBsb2FkZWQgUklTQyBjb2RlLi4uXG4iKTsKIAogCXJldHJ5ID0gMTA7CkBAIC03NzAsMjkgKzc4MywxMDQgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIHFsYTJ4MDBfYWxsb2NfZndfZHVtcChzY3NpX3FsYV9ob3N0X3QgKmhhKQogewotCXVpbnQzMl90IGR1bXBfc2l6ZSA9IDA7CisJaW50IHJ2YWw7CisJdWludDMyX3QgZHVtcF9zaXplLCBmaXhlZF9zaXplLCBtZW1fc2l6ZSwgcmVxX3Ffc2l6ZSwgcnNwX3Ffc2l6ZSwKKwkgICAgZWZ0X3NpemU7CisJZG1hX2FkZHJfdCBlZnRfZG1hOworCXZvaWQgKmVmdDsKIAotCWhhLT5md19kdW1wZWQgPSAwOwotCWlmIChJU19RTEEyMTAwKGhhKSB8fCBJU19RTEEyMjAwKGhhKSkgewotCQlkdW1wX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsYTIxMDBfZndfZHVtcCk7Ci0JfSBlbHNlIGlmIChJU19RTEEyM1hYKGhhKSkgewotCQlkdW1wX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsYTIzMDBfZndfZHVtcCk7Ci0JCWR1bXBfc2l6ZSArPSAoaGEtPmZ3X21lbW9yeV9zaXplIC0gMHgxMTAwMCkgKiBzaXplb2YodWludDE2X3QpOwotICAgICAgICB9IGVsc2UgaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7Ci0JCWR1bXBfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWxhMjR4eF9md19kdW1wKTsKLQkJZHVtcF9zaXplICs9IChoYS0+ZndfbWVtb3J5X3NpemUgLSAweDEwMDAwMCkgKiBzaXplb2YodWludDMyX3QpOworCWlmIChoYS0+ZndfZHVtcCkgeworCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiRmlybXdhcmUgZHVtcCBwcmV2aW91c2x5IGFsbG9jYXRlZC5cbiIpOworCQlyZXR1cm47CiAJfQogCisJaGEtPmZ3X2R1bXBlZCA9IDA7CisJZml4ZWRfc2l6ZSA9IG1lbV9zaXplID0gZWZ0X3NpemUgPSAwOworCWlmIChJU19RTEEyMTAwKGhhKSB8fCBJU19RTEEyMjAwKGhhKSkgeworCQlmaXhlZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBxbGEyMTAwX2Z3X2R1bXApOworCX0gZWxzZSBpZiAoSVNfUUxBMjNYWChoYSkpIHsKKwkJZml4ZWRfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBxbGEyMzAwX2Z3X2R1bXAsIGRhdGFfcmFtKTsKKwkJbWVtX3NpemUgPSAoaGEtPmZ3X21lbW9yeV9zaXplIC0gMHgxMTAwMCArIDEpICoKKwkJICAgIHNpemVvZih1aW50MTZfdCk7CisJfSBlbHNlIGlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgeworCQlmaXhlZF9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHFsYTI0eHhfZndfZHVtcCwgZXh0X21lbSk7CisJCW1lbV9zaXplID0gKGhhLT5md19tZW1vcnlfc2l6ZSAtIDB4MTAwMDAwICsgMSkgKgorCQkgICAgc2l6ZW9mKHVpbnQzMl90KTsKKworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEV4dGVuZGVkIFRyYWNlIEJ1ZmZlci4gKi8KKwkJZWZ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBFRlRfU0laRSwgJmVmdF9kbWEsCisJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlZnQpIHsKKwkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIlVuYWJsZSB0byBhbGxvY2F0ZSAiCisJCQkgICAgIiglZCBLQikgZm9yIEVGVC5cbiIsIEVGVF9TSVpFIC8gMTAyNCk7CisJCQlnb3RvIGNvbnRfYWxsb2M7CisJCX0KKworCQlydmFsID0gcWxhMngwMF90cmFjZV9jb250cm9sKGhhLCBUQ19FTkFCTEUsIGVmdF9kbWEsCisJCSAgICBFRlRfTlVNX0JVRkZFUlMpOworCQlpZiAocnZhbCkgeworCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgIgorCQkJICAgICJFRlQgKCVkKS5cbiIsIHJ2YWwpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIEVGVF9TSVpFLCBlZnQsCisJCQkgICAgZWZ0X2RtYSk7CisJCQlnb3RvIGNvbnRfYWxsb2M7CisJCX0KKworCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJBbGxvY2F0ZWQgKCVkIEtCKSBmb3IgRUZULi4uXG4iLAorCQkgICAgRUZUX1NJWkUgLyAxMDI0KTsKKworCQllZnRfc2l6ZSA9IEVGVF9TSVpFOworCQltZW1zZXQoZWZ0LCAwLCBlZnRfc2l6ZSk7CisJCWhhLT5lZnRfZG1hID0gZWZ0X2RtYTsKKwkJaGEtPmVmdCA9IGVmdDsKKwl9Citjb250X2FsbG9jOgorCXJlcV9xX3NpemUgPSBoYS0+cmVxdWVzdF9xX2xlbmd0aCAqIHNpemVvZihyZXF1ZXN0X3QpOworCXJzcF9xX3NpemUgPSBoYS0+cmVzcG9uc2VfcV9sZW5ndGggKiBzaXplb2YocmVzcG9uc2VfdCk7CisKKwlkdW1wX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgcWxhMnh4eF9md19kdW1wLCBpc3ApOworCWR1bXBfc2l6ZSArPSBmaXhlZF9zaXplICsgbWVtX3NpemUgKyByZXFfcV9zaXplICsgcnNwX3Ffc2l6ZSArCisJICAgIGVmdF9zaXplOworCiAJaGEtPmZ3X2R1bXAgPSB2bWFsbG9jKGR1bXBfc2l6ZSk7Ci0JaWYgKGhhLT5md19kdW1wKQotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJBbGxvY2F0ZWQgKCVkIEtCKSBmb3IgZmlybXdhcmUgIgotCQkgICAgImR1bXAuLi5cbiIsIGR1bXBfc2l6ZSAvIDEwMjQpOwotCWVsc2UKKwlpZiAoIWhhLT5md19kdW1wKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIlVuYWJsZSB0byBhbGxvY2F0ZSAoJWQgS0IpIGZvciAiCiAJCSAgICAiZmlybXdhcmUgZHVtcCEhIVxuIiwgZHVtcF9zaXplIC8gMTAyNCk7CisKKwkJaWYgKGhhLT5lZnQpIHsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBlZnRfc2l6ZSwgaGEtPmVmdCwKKwkJCSAgICBoYS0+ZWZ0X2RtYSk7CisJCQloYS0+ZWZ0ID0gTlVMTDsKKwkJCWhhLT5lZnRfZG1hID0gMDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQWxsb2NhdGVkICglZCBLQikgZm9yIGZpcm13YXJlIGR1bXAuLi5cbiIsCisJICAgIGR1bXBfc2l6ZSAvIDEwMjQpOworCisJaGEtPmZ3X2R1bXBfbGVuID0gZHVtcF9zaXplOworCWhhLT5md19kdW1wLT5zaWduYXR1cmVbMF0gPSAnUSc7CisJaGEtPmZ3X2R1bXAtPnNpZ25hdHVyZVsxXSA9ICdMJzsKKwloYS0+ZndfZHVtcC0+c2lnbmF0dXJlWzJdID0gJ0cnOworCWhhLT5md19kdW1wLT5zaWduYXR1cmVbM10gPSAnQyc7CisJaGEtPmZ3X2R1bXAtPnZlcnNpb24gPSBfX2NvbnN0YW50X2h0b25sKDEpOworCisJaGEtPmZ3X2R1bXAtPmZpeGVkX3NpemUgPSBodG9ubChmaXhlZF9zaXplKTsKKwloYS0+ZndfZHVtcC0+bWVtX3NpemUgPSBodG9ubChtZW1fc2l6ZSk7CisJaGEtPmZ3X2R1bXAtPnJlcV9xX3NpemUgPSBodG9ubChyZXFfcV9zaXplKTsKKwloYS0+ZndfZHVtcC0+cnNwX3Ffc2l6ZSA9IGh0b25sKHJzcF9xX3NpemUpOworCisJaGEtPmZ3X2R1bXAtPmVmdF9zaXplID0gaHRvbmwoZWZ0X3NpemUpOworCWhhLT5md19kdW1wLT5lZnRfYWRkcl9sID0gaHRvbmwoTFNEKGhhLT5lZnRfZG1hKSk7CisJaGEtPmZ3X2R1bXAtPmVmdF9hZGRyX2ggPSBodG9ubChNU0QoaGEtPmVmdF9kbWEpKTsKKworCWhhLT5md19kdW1wLT5oZWFkZXJfc2l6ZSA9CisJICAgIGh0b25sKG9mZnNldG9mKHN0cnVjdCBxbGEyeHh4X2Z3X2R1bXAsIGlzcCkpOwogfQogCiAvKioKQEAgLTgxMCw4ICs4OTgsNiBAQAogCWRtYV9hZGRyX3QgcmVxdWVzdF9kbWE7CiAJcmVxdWVzdF90ICpyZXF1ZXN0X3Jpbmc7CiAKLQlxbGEyeDAwX2FsbG9jX2Z3X2R1bXAoaGEpOwotCiAJLyogVmFsaWQgb25seSBvbiByZWNlbnQgSVNQcy4gKi8KIAlpZiAoSVNfUUxBMjEwMChoYSkgfHwgSVNfUUxBMjIwMChoYSkpCiAJCXJldHVybjsKQEAgLTg4Myw2ICs5NjksOSBAQAogCQkJCSAgICAmaGEtPmZ3X3N1Ym1pbm9yX3ZlcnNpb24sCiAJCQkJICAgICZoYS0+ZndfYXR0cmlidXRlcywgJmhhLT5md19tZW1vcnlfc2l6ZSk7CiAJCQkJcWxhMngwMF9yZXNpemVfcmVxdWVzdF9xKGhhKTsKKworCQkJCWlmIChxbDJ4YWxsb2Nmd2R1bXApCisJCQkJCXFsYTJ4MDBfYWxsb2NfZndfZHVtcChoYSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwpAQCAtMTE4Niw4ICsxMjc1LDcgQEAKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCiAJCQlpZiAoYXRvbWljX3JlYWQoJmhhLT5sb29wX2Rvd25fdGltZXIpICYmCi0JCQkgICAgKGZ3X3N0YXRlID49IEZTVEFURV9MT1NTX09GX1NZTkMgfHwKLQkJCQlmd19zdGF0ZSA9PSBGU1RBVEVfV0FJVF9BTF9QQSkpIHsKKwkJCSAgICBmd19zdGF0ZSAhPSBGU1RBVEVfUkVBRFkpIHsKIAkJCQkvKiBMb29wIGRvd24uIFRpbWVvdXQgb24gbWluX3dhaXQgZm9yIHN0YXRlcwogCQkJCSAqIG90aGVyIHRoYW4gV2FpdCBmb3IgTG9naW4uCiAJCQkJICovCkBAIC0xNTU1LDYgKzE2NDMsOCBAQAogCS8qCiAJICogU2V0IGhvc3QgYWRhcHRlciBwYXJhbWV0ZXJzLgogCSAqLworCWlmIChudi0+aG9zdF9wWzBdICYgQklUXzcpCisJCWV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgPSAxOwogCWhhLT5mbGFncy5kaXNhYmxlX3Jpc2NfY29kZV9sb2FkID0gKChudi0+aG9zdF9wWzBdICYgQklUXzQpID8gMSA6IDApOwogCS8qIEFsd2F5cyBsb2FkIFJJU0MgY29kZSBvbiBub24gSVNQMlsxMl0wMCBjaGlwcy4gKi8KIAlpZiAoIUlTX1FMQTIxMDAoaGEpICYmICFJU19RTEEyMjAwKGhhKSkKQEAgLTE1NjMsNiArMTY1Myw3IEBACiAJaGEtPmZsYWdzLmVuYWJsZV9saXBfZnVsbF9sb2dpbiA9ICgobnYtPmhvc3RfcFsxXSAmIEJJVF8yKSA/IDEgOiAwKTsKIAloYS0+ZmxhZ3MuZW5hYmxlX3RhcmdldF9yZXNldCA9ICgobnYtPmhvc3RfcFsxXSAmIEJJVF8zKSA/IDEgOiAwKTsKIAloYS0+ZmxhZ3MuZW5hYmxlX2xlZF9zY2hlbWUgPSAobnYtPnNwZWNpYWxfb3B0aW9uc1sxXSAmIEJJVF80KSA/IDEgOiAwOworCWhhLT5mbGFncy5kaXNhYmxlX3NlcmRlcyA9IDA7CiAKIAloYS0+b3BlcmF0aW5nX21vZGUgPQogCSAgICAoaWNiLT5hZGRfZmlybXdhcmVfb3B0aW9uc1swXSAmIChCSVRfNiB8IEJJVF81IHwgQklUXzQpKSA+PiA0OwpAQCAtMTcwMSw3ICsxNzkyLDcgQEAKICAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZjcG9ydCwgb3IgTlVMTCwgaWYgbm9uZSBhdmFpbGFibGUuCiAgKi8KLWZjX3BvcnRfdCAqCitzdGF0aWMgZmNfcG9ydF90ICoKIHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHNjc2lfcWxhX2hvc3RfdCAqaGEsIGdmcF90IGZsYWdzKQogewogCWZjX3BvcnRfdCAqZmNwb3J0OwpAQCAtMjQ5Nyw3ICsyNTg4LDcgQEAKICAqIENvbnRleHQ6CiAgKglLZXJuZWwgY29udGV4dC4KICAqLwotaW50CitzdGF0aWMgaW50CiBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQoc2NzaV9xbGFfaG9zdF90ICpoYSwgZmNfcG9ydF90ICpkZXYpCiB7CiAJaW50CXJ2YWw7CkBAIC0zMDQ4LDE0ICszMTM5LDE0IEBACiAJCQkJCWhhLT5pc3BfYWJvcnRfY250LS07CiAJCQkJCURFQlVHKHByaW50aygicWxhJWxkOiBJU1AgYWJvcnQgLSAiCiAJCQkJCSAgICAicmV0cnkgcmVtYWluaW5nICVkXG4iLAotCQkJCQkgICAgaGEtPmhvc3Rfbm8sIGhhLT5pc3BfYWJvcnRfY250KTspCisJCQkJCSAgICBoYS0+aG9zdF9ubywgaGEtPmlzcF9hYm9ydF9jbnQpKTsKIAkJCQkJc3RhdHVzID0gMTsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWhhLT5pc3BfYWJvcnRfY250ID0gTUFYX1JFVFJJRVNfT0ZfSVNQX0FCT1JUOwogCQkJCURFQlVHKHByaW50aygicWxhMngwMCglbGQpOiBJU1AgZXJyb3IgcmVjb3ZlcnkgIgogCQkJCSAgICAiLSByZXRyeWluZyAoJWQpIG1vcmUgdGltZXNcbiIsCi0JCQkJICAgIGhhLT5ob3N0X25vLCBoYS0+aXNwX2Fib3J0X2NudCk7KQorCQkJCSAgICBoYS0+aG9zdF9ubywgaGEtPmlzcF9hYm9ydF9jbnQpKTsKIAkJCQlzZXRfYml0KElTUF9BQk9SVF9SRVRSWSwgJmhhLT5kcGNfZmxhZ3MpOwogCQkJCXN0YXR1cyA9IDE7CiAJCQl9CkBAIC0zMDY5LDcgKzMxNjAsNyBAQAogCX0gZWxzZSB7CiAJCURFQlVHKHByaW50ayhLRVJOX0lORk8KIAkJCQkicWxhMngwMF9hYm9ydF9pc3AoJWxkKTogZXhpdGluZy5cbiIsCi0JCQkJaGEtPmhvc3Rfbm8pOykKKwkJCQloYS0+aG9zdF9ubykpOwogCX0KIAogCXJldHVybihzdGF0dXMpOwpAQCAtMzE0NSw3ICszMjM2LDcgQEAKIAkJY2xlYXJfYml0KFJFU0VUX01BUktFUl9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJaWYgKCEoc3RhdHVzID0gcWxhMngwMF9md19yZWFkeShoYSkpKSB7CiAJCQlERUJVRyhwcmludGsoIiVzKCk6IFN0YXJ0IGNvbmZpZ3VyZSBsb29wLCAiCi0JCQkgICAgInN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTspCisJCQkgICAgInN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKSk7CiAKIAkJCS8qIElzc3VlIGEgbWFya2VyIGFmdGVyIEZXIGJlY29tZXMgcmVhZHkuICovCiAJCQlxbGEyeDAwX21hcmtlcihoYSwgMCwgMCwgTUtfU1lOQ19BTEwpOwpAQCAtMzE2OSw3ICszMjYwLDcgQEAKIAogCQlERUJVRyhwcmludGsoIiVzKCk6IENvbmZpZ3VyZSBsb29wIGRvbmUsIHN0YXR1cyA9IDB4JXhcbiIsCiAJCQkJX19mdW5jX18sCi0JCQkJc3RhdHVzKTspCisJCQkJc3RhdHVzKSk7CiAJfQogCXJldHVybiAoc3RhdHVzKTsKIH0KQEAgLTMyODksNyArMzM4MCw2IEBACiAJCW52LT5ub2RlX25hbWVbNl0gPSAweDU1OwogCQludi0+bm9kZV9uYW1lWzddID0gMHg4NjsKIAkJbnYtPmxvZ2luX3JldHJ5X2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig4KTsKLQkJbnYtPmxpbmtfZG93bl90aW1lb3V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigyMDApOwogCQludi0+aW50ZXJydXB0X2RlbGF5X3RpbWVyID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKIAkJbnYtPmxvZ2luX3RpbWVvdXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApOwogCQludi0+ZmlybXdhcmVfb3B0aW9uc18xID0KQEAgLTMzMTgsNyArMzQwOCw3IEBACiAJCSpkcHRyMSsrID0gKmRwdHIyKys7CiAKIAlpY2ItPmxvZ2luX3JldHJ5X2NvdW50ID0gbnYtPmxvZ2luX3JldHJ5X2NvdW50OwotCWljYi0+bGlua19kb3duX3RpbWVvdXQgPSBudi0+bGlua19kb3duX3RpbWVvdXQ7CisJaWNiLT5saW5rX2Rvd25fb25fbm9zID0gbnYtPmxpbmtfZG93bl9vbl9ub3M7CiAKIAkvKiBDb3B5IDJuZCBzZWdtZW50LiAqLwogCWRwdHIxID0gKHVpbnQ4X3QgKikmaWNiLT5pbnRlcnJ1cHRfZGVsYXlfdGltZXI7CkBAIC0zMzczLDYgKzM0NjMsNyBAQAogCWhhLT5mbGFncy5lbmFibGVfbGlwX2Z1bGxfbG9naW4gPSAxOwogCWhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0ID0gMTsKIAloYS0+ZmxhZ3MuZW5hYmxlX2xlZF9zY2hlbWUgPSAwOworCWhhLT5mbGFncy5kaXNhYmxlX3NlcmRlcyA9IGxlMzJfdG9fY3B1KG52LT5ob3N0X3ApICYgQklUXzUgPyAxOiAwOwogCiAJaGEtPm9wZXJhdGluZ19tb2RlID0gKGxlMzJfdG9fY3B1KGljYi0+ZmlybXdhcmVfb3B0aW9uc18yKSAmCiAJICAgIChCSVRfNiB8IEJJVF81IHwgQklUXzQpKSA+PiA0OwpAQCAtMzQ3Miw3ICszNTYzLDcgQEAKIAlyZXR1cm4gKHJ2YWwpOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHFsYTI0eHhfbG9hZF9yaXNjX2ZsYXNoKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQzMl90ICpzcmlzY19hZGRyKQogewogCWludAlydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKaW5kZXggOGM3NjljZi4uMmI2MGEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCkBAIC0xNSw2ICsxNSw3IEBACiBzdGF0aWMgaW5saW5lIGNvbnRfZW50cnlfdCAqcWxhMngwMF9wcmVwX2NvbnRfdHlwZTBfaW9jYihzY3NpX3FsYV9ob3N0X3QgKik7CiBzdGF0aWMgaW5saW5lIGNvbnRfYTY0X2VudHJ5X3QgKnFsYTJ4MDBfcHJlcF9jb250X3R5cGUxX2lvY2Ioc2NzaV9xbGFfaG9zdF90ICopOwogc3RhdGljIHJlcXVlc3RfdCAqcWxhMngwMF9yZXFfcGt0KHNjc2lfcWxhX2hvc3RfdCAqaGEpOworc3RhdGljIHZvaWQgcWxhMngwMF9pc3BfY21kKHNjc2lfcWxhX2hvc3RfdCAqaGEpOwogCiAvKioKICAqIHFsYTJ4MDBfZ2V0X2NtZF9kaXJlY3Rpb24oKSAtIERldGVybWluZSBjb250cm9sX2ZsYWcgZGF0YSBkaXJlY3Rpb24uCkBAIC01NzQsNyArNTc1LDcgQEAKICAqCiAgKiBOb3RlOiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgaGFyZHdhcmUgbG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBxbGEyeDAwX2lzcF9jbWQoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKIAlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnID0gaGEtPmlvYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCBiMjhhYzBhLi43OTViZjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC0zOTUsMTAgKzM5NSw2IEBACiAJCXNldF9iaXQoUkVHSVNURVJfRkM0X05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCiAJCWhhLT5mbGFncy5tYW5hZ2VtZW50X3NlcnZlcl9sb2dnZWRfaW4gPSAwOwotCi0JCS8qIFVwZGF0ZSBBRU4gcXVldWUuICovCi0JCXFsYTJ4MDBfZW5xdWV1ZV9hZW4oaGEsIE1CQV9MSVBfT0NDVVJSRUQsIE5VTEwpOwotCiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfTE9PUF9VUDoJCS8qIExvb3AgVXAgRXZlbnQgKi8KQEAgLTQxOCw5ICs0MTQsNiBAQAogCQkgICAgbGlua19zcGVlZCk7CiAKIAkJaGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7Ci0KLQkJLyogVXBkYXRlIEFFTiBxdWV1ZS4gKi8KLQkJcWxhMngwMF9lbnF1ZXVlX2FlbihoYSwgTUJBX0xPT1BfVVAsIE5VTEwpOwogCQlicmVhazsKIAogCWNhc2UgTUJBX0xPT1BfRE9XTjoJCS8qIExvb3AgRG93biBFdmVudCAqLwpAQCAtNDM5LDkgKzQzMiw2IEBACiAJCWhhLT5saW5rX2RhdGFfcmF0ZSA9IExEUl9VTktOT1dOOwogCQlpZiAocWwyeGZkbWllbmFibGUpCiAJCQlzZXRfYml0KFJFR0lTVEVSX0ZETUlfTkVFREVELCAmaGEtPmRwY19mbGFncyk7Ci0KLQkJLyogVXBkYXRlIEFFTiBxdWV1ZS4gKi8KLQkJcWxhMngwMF9lbnF1ZXVlX2FlbihoYSwgTUJBX0xPT1BfRE9XTiwgTlVMTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfTElQX1JFU0VUOgkJLyogTElQIHJlc2V0IG9jY3VycmVkICovCkBAIC00NjAsMTAgKzQ1MCw2IEBACiAKIAkJaGEtPm9wZXJhdGluZ19tb2RlID0gTE9PUDsKIAkJaGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7Ci0KLQkJLyogVXBkYXRlIEFFTiBxdWV1ZS4gKi8KLQkJcWxhMngwMF9lbnF1ZXVlX2FlbihoYSwgTUJBX0xJUF9SRVNFVCwgTlVMTCk7Ci0KIAkJYnJlYWs7CiAKIAljYXNlIE1CQV9QT0lOVF9UT19QT0lOVDoJLyogUG9pbnQtdG8tUG9pbnQgKi8KQEAgLTU0NSw5ICs1MzEsNiBAQAogCiAJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmaGEtPmRwY19mbGFncyk7CiAJCXNldF9iaXQoTE9DQUxfTE9PUF9VUERBVEUsICZoYS0+ZHBjX2ZsYWdzKTsKLQotCQkvKiBVcGRhdGUgQUVOIHF1ZXVlLiAqLwotCQlxbGEyeDAwX2VucXVldWVfYWVuKGhhLCBNQkFfUE9SVF9VUERBVEUsIE5VTEwpOwogCQlicmVhazsKIAogCWNhc2UgTUJBX1JTQ05fVVBEQVRFOgkJLyogU3RhdGUgQ2hhbmdlIFJlZ2lzdHJhdGlvbiAqLwpAQCAtNTg0LDkgKzU2Nyw2IEBACiAKIAkJc2V0X2JpdChMT09QX1JFU1lOQ19ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJc2V0X2JpdChSU0NOX1VQREFURSwgJmhhLT5kcGNfZmxhZ3MpOwotCi0JCS8qIFVwZGF0ZSBBRU4gcXVldWUuICovCi0JCXFsYTJ4MDBfZW5xdWV1ZV9hZW4oaGEsIE1CQV9SU0NOX1VQREFURSwgJm1iWzBdKTsKIAkJYnJlYWs7CiAKIAkvKiBjYXNlIE1CQV9SSU9fUkVTUE9OU0U6ICovCkBAIC0xNDUyLDggKzE0MzIsOCBAQAogCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IHBrdD0lcCBwa3RoYW5kbGU9JWQuXG4iLAogCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHBrdCwgcGt0LT5oYW5kbGUpKTsKIAotCURFQlVHOShwcmludGsoIiVzOiBjdCBwa3QgZHVtcDpcbiIsIF9fZnVuY19fKTspCi0JREVCVUc5KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHZvaWQgKilwa3QsIHNpemVvZihzdHJ1Y3QgY3RfZW50cnlfMjR4eCkpOykKKwlERUJVRzkocHJpbnRrKCIlczogY3QgcGt0IGR1bXA6XG4iLCBfX2Z1bmNfXykpOworCURFQlVHOShxbGEyeDAwX2R1bXBfYnVmZmVyKCh2b2lkICopcGt0LCBzaXplb2Yoc3RydWN0IGN0X2VudHJ5XzI0eHgpKSk7CiAKIAkvKiBWYWxpZGF0ZSBoYW5kbGUuICovCiAgCWlmIChwa3QtPmhhbmRsZSA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwppbmRleCBkNmNiM2JkLi44NzlmMjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCkBAIC0xMywxMyArMTMsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2VtYXBob3JlCSpzZW1fcHRyID0gKHN0cnVjdCBzZW1hcGhvcmUgKilkYXRhOwogCi0JREVCVUcxMShwcmludGsoInFsYTJ4MDBfc2VtX3RpbWVvdXQ6IGVudGVyZWQuXG4iKTspCisJREVCVUcxMShwcmludGsoInFsYTJ4MDBfc2VtX3RpbWVvdXQ6IGVudGVyZWQuXG4iKSk7CiAKIAlpZiAoc2VtX3B0ciAhPSBOVUxMKSB7CiAJCXVwKHNlbV9wdHIpOwogCX0KIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX21ieF9zZW1fdGltZW91dDogZXhpdGluZy5cbiIpOykKKwlERUJVRzExKHByaW50aygicWxhMngwMF9tYnhfc2VtX3RpbWVvdXQ6IGV4aXRpbmcuXG4iKSk7CiB9CiAKIC8qCkBAIC02MSw3ICs2MSw3IEBACiAJcnZhbCA9IFFMQV9TVUNDRVNTOwogCWFib3J0X2FjdGl2ZSA9IHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZoYS0+ZHBjX2ZsYWdzKTsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAogCS8qCiAJICogV2FpdCBmb3IgYWN0aXZlIG1haWxib3ggY29tbWFuZHMgdG8gZmluaXNoIGJ5IHdhaXRpbmcgYXQgbW9zdCB0b3YKQEAgLTcyLDcgKzcyLDcgQEAKIAkJaWYgKHFsYTJ4MDBfZG93bl90aW1lb3V0KCZoYS0+bWJ4X2NtZF9zZW0sIG1jcC0+dG92ICogSFopKSB7CiAJCQkvKiBUaW1lb3V0IG9jY3VycmVkLiBSZXR1cm4gZXJyb3IuICovCiAJCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGNtZCBhY2Nlc3MgdGltZW91dC4gIgotCQkJICAgICJFeGl0aW5nLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCQkgICAgIkV4aXRpbmcuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAkJCXJldHVybiBRTEFfRlVOQ1RJT05fVElNRU9VVDsKIAkJfQogCX0KQEAgLTg2LDcgKzg2LDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5tYnhfcmVnX2xvY2ssIG1ieF9mbGFncyk7CiAKIAlERUJVRzExKHByaW50aygic2NzaSglbGQpOiBwcmVwYXJlIHRvIGlzc3VlIG1ib3ggY21kPTB4JXguXG4iLAotCSAgICBoYS0+aG9zdF9ubywgbWNwLT5tYlswXSk7KQorCSAgICBoYS0+aG9zdF9ubywgbWNwLT5tYlswXSkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKQEAgLTEzMSwxNCArMTMxLDE0IEBACiAKIAkvKiBVbmxvY2sgbWJ4IHJlZ2lzdGVycyBhbmQgd2FpdCBmb3IgaW50ZXJydXB0ICovCiAJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGdvaW5nIHRvIHVubG9jayBpcnEgJiB3YWl0aW5nIGZvciBpbnRlcnJ1cHQuICIKLQkgICAgImppZmZpZXM9JWx4LlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBqaWZmaWVzKTspCisJICAgICJqaWZmaWVzPSVseC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgamlmZmllcykpOwogCiAJLyogV2FpdCBmb3IgbWJ4IGNtZCBjb21wbGV0aW9uIHVudGlsIHRpbWVvdXQgKi8KIAogCWlmICghYWJvcnRfYWN0aXZlICYmIGlvX2xvY2tfb24pIHsKIAkJLyogc2xlZXAgb24gY29tcGxldGlvbiBzZW1hcGhvcmUgKi8KIAkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IElOVEVSUlVQVCBNT0RFLiBJbml0aWFsaXppbmcgdGltZXIuXG4iLAotCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAogCQlpbml0X3RpbWVyKCZ0bXBfaW50cl90aW1lcik7CiAJCXRtcF9pbnRyX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykmaGEtPm1ieF9pbnRyX3NlbTsKQEAgLTE0NywxMSArMTQ3LDExIEBACiAJCSAgICAodm9pZCAoKikodW5zaWduZWQgbG9uZykpcWxhMngwMF9tYnhfc2VtX3RpbWVvdXQ7CiAKIAkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IEFkZGluZyB0aW1lci5cbiIsIF9fZnVuY19fLAotCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJICAgIGhhLT5ob3N0X25vKSk7CiAJCWFkZF90aW1lcigmdG1wX2ludHJfdGltZXIpOwogCiAJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBnb2luZyB0byB1bmxvY2sgJiBzbGVlcC4gIgotCQkgICAgInRpbWU9MHglbHguXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIGppZmZpZXMpOykKKwkJICAgICJ0aW1lPTB4JWx4LlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBqaWZmaWVzKSk7CiAKIAkJc2V0X2JpdChNQlhfSU5UUl9XQUlULCAmaGEtPm1ieF9jbWRfZmxhZ3MpOwogCkBAIC0xNzAsMTQgKzE3MCwxNCBAQAogCQlkb3duKCZoYS0+bWJ4X2ludHJfc2VtKTsKIAogCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogd2FraW5nIHVwLiB0aW1lPTB4JWx4XG4iLCBfX2Z1bmNfXywKLQkJICAgIGhhLT5ob3N0X25vLCBqaWZmaWVzKTspCisJCSAgICBoYS0+aG9zdF9ubywgamlmZmllcykpOwogCQljbGVhcl9iaXQoTUJYX0lOVFJfV0FJVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKIAogCQkvKiBkZWxldGUgdGhlIHRpbWVyICovCiAJCWRlbF90aW1lcigmdG1wX2ludHJfdGltZXIpOwogCX0gZWxzZSB7CiAJCURFQlVHM18xMShwcmludGsoIiVzKCVsZCk6IGNtZD0leCBQT0xMSU5HIE1PREUuXG4iLCBfX2Z1bmNfXywKLQkJICAgIGhhLT5ob3N0X25vLCBjb21tYW5kKTspCisJCSAgICBoYS0+aG9zdF9ubywgY29tbWFuZCkpOwogCiAJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQuaGNjciwgSENDUlhfU0VUX0hPU1RfSU5UKTsKQEAgLTIwOSw3ICsyMDksNyBAQAogCQl1aW50MTZfdCAqaXB0cjI7CiAKIAkJREVCVUczXzExKHByaW50aygiJXMoJWxkKTogY21kICV4IGNvbXBsZXRlZC5cbiIsIF9fZnVuY19fLAotCQkgICAgaGEtPmhvc3Rfbm8sIGNvbW1hbmQpOykKKwkJICAgIGhhLT5ob3N0X25vLCBjb21tYW5kKSk7CiAKIAkJLyogR290IGludGVycnVwdC4gQ2xlYXIgdGhlIGZsYWcuICovCiAJCWhhLT5mbGFncy5tYm94X2ludCA9IDA7CkBAIC0yNjYsNyArMjY2LDcgQEAKIAogCWlmICghYWJvcnRfYWN0aXZlKSB7CiAJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBjaGVja2luZyBmb3IgYWRkaXRpb25hbCByZXNwICIKLQkJICAgICJpbnRlcnJ1cHQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwkJICAgICJpbnRlcnJ1cHQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAogCQkvKiBwb2xsaW5nIG1vZGUgZm9yIG5vbiBpc3BfYWJvcnQgY29tbWFuZHMuICovCiAJCXFsYTJ4MDBfcG9sbChoYSk7CkBAIC0yNzcsOSArMjc3LDkgQEAKIAkJaWYgKCFpb19sb2NrX29uIHx8IChtY3AtPmZsYWdzICYgSU9DVExfQ01EKSkgewogCQkJLyogbm90IGluIGRwYy4gc2NoZWR1bGUgaXQgZm9yIGRwYyB0byB0YWtlIG92ZXIuICovCiAJCQlERUJVRyhwcmludGsoIiVzKCVsZCk6IHRpbWVvdXQgc2NoZWR1bGUgIgotCQkJICAgICJpc3BfYWJvcnRfbmVlZGVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCQkgICAgImlzcF9hYm9ydF9uZWVkZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAkJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogdGltZW91dCBzY2hlZHVsZSAiCi0JCQkgICAgImlzcF9hYm9ydF9uZWVkZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwkJCSAgICAiaXNwX2Fib3J0X25lZWRlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cmVkLiBTY2hlZHVsaW5nIElTUCAiCiAJCQkgICAgImFib3J0LlxuIik7CkBAIC0yODgsOSArMjg4LDkgQEAKIAkJfSBlbHNlIGlmICghYWJvcnRfYWN0aXZlKSB7CiAJCQkvKiBjYWxsIGFib3J0IGRpcmVjdGx5IHNpbmNlIHdlIGFyZSBpbiB0aGUgRFBDIHRocmVhZCAqLwogCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgYWJvcnRfaXNwXG4iLAotCQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubyk7KQorCQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgIgotCQkJICAgICJhYm9ydF9pc3BcbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubyk7KQorCQkJICAgICJhYm9ydF9pc3BcbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cmVkLiBJc3N1aW5nIElTUCAiCiAJCQkgICAgImFib3J0LlxuIik7CkBAIC0zMDMsOSArMzAzLDkgQEAKIAkJCX0KIAkJCWNsZWFyX2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmaGEtPmRwY19mbGFncyk7CiAJCQlERUJVRyhwcmludGsoIiVzKCVsZCk6IGZpbmlzaGVkIGFib3J0X2lzcFxuIiwgX19mdW5jX18sCi0JCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJCSAgICBoYS0+aG9zdF9ubykpOwogCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmaW5pc2hlZCBhYm9ydF9pc3BcbiIsCi0JCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAJCX0KIAl9CiAKQEAgLTMxNiw5ICszMTYsOSBAQAogCWlmIChydmFsKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogKioqKiBGQUlMRUQuIG1ieDA9JXgsIG1ieDE9JXgsICIKIAkJICAgICJtYngyPSV4LCBjbWQ9JXggKioqKlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLAotCQkgICAgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSwgY29tbWFuZCk7KQorCQkgICAgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSwgY29tbWFuZCkpOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0zOTQsNyArMzk0LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubyk7KQorCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0VYRUNVVEVfRklSTVdBUkU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKQEAgLTQyNCwxMCArNDI0LDEwIEBACiAJfSBlbHNlIHsKIAkJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZSBleGNoYW5nZXM9JXguXG4iLAotCQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgbWNwLT5tYlsxXSk7KQorCQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgbWNwLT5tYlsxXSkpOwogCQl9IGVsc2UgewogCQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywKLQkJCSAgICBoYS0+aG9zdF9ubyk7KQorCQkJICAgIGhhLT5ob3N0X25vKSk7CiAJCX0KIAl9CiAKQEAgLTYxMSw3ICs2MTEsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX21ieF9yZWdfdGVzdCglbGQpOiBlbnRlcmVkLlxuIiwgaGEtPmhvc3Rfbm8pOykKKwlERUJVRzExKHByaW50aygicWxhMngwMF9tYnhfcmVnX3Rlc3QoJWxkKTogZW50ZXJlZC5cbiIsIGhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX01BSUxCT1hfUkVHSVNURVJfVEVTVDsKIAltY3AtPm1iWzFdID0gMHhBQUFBOwpAQCAtNjM5LDExICs2MzksMTEgQEAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KIAkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX21ieF9yZWdfdGVzdCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpOykKKwkJICAgIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX21ieF9yZWdfdGVzdCglbGQpOiBkb25lLlxuIiwKLQkJICAgIGhhLT5ob3N0X25vKTspCisJCSAgICBoYS0+aG9zdF9ubykpOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtNjcxLDcgKzY3MSw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19WRVJJRllfQ0hFQ0tTVU07CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKQEAgLTY5NCw5ICs2OTQsOSBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IGNoayBzdW09JXguXG4iLCBfX2Z1bmNfXywKIAkJICAgIGhhLT5ob3N0X25vLCBydmFsLCAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkgPwotCQkgICAgKG1jcC0+bWJbMl0gPDwgMTYpIHwgbWNwLT5tYlsxXTogbWNwLT5tYlsxXSkpOykKKwkJICAgIChtY3AtPm1iWzJdIDw8IDE2KSB8IG1jcC0+bWJbMV06IG1jcC0+bWJbMV0pKSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTc0Myw5ICs3NDMsOSBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRyhwcmludGsoInFsYTJ4MDBfaXNzdWVfaW9jYiglbGQpOiBmYWlsZWQgcnZhbCAweCV4XG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpOykKKwkJICAgIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJCURFQlVHMihwcmludGsoInFsYTJ4MDBfaXNzdWVfaW9jYiglbGQpOiBmYWlsZWQgcnZhbCAweCV4XG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpOykKKwkJICAgIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJfSBlbHNlIHsKIAkJc3RzX2VudHJ5X3QgKnN0c19lbnRyeSA9IChzdHNfZW50cnlfdCAqKSBidWZmZXI7CiAKQEAgLTc4MSw3ICs3ODEsNyBAQAogCW1ieF9jbWRfdAltYzsKIAltYnhfY21kX3QJKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2Fib3J0X2NvbW1hbmQoJWxkKTogZW50ZXJlZC5cbiIsIGhhLT5ob3N0X25vKTspCisJREVCVUcxMShwcmludGsoInFsYTJ4MDBfYWJvcnRfY29tbWFuZCglbGQpOiBlbnRlcmVkLlxuIiwgaGEtPmhvc3Rfbm8pKTsKIAogCWZjcG9ydCA9IHNwLT5mY3BvcnQ7CiAKQEAgLTgxMywxMSArODEzLDExIEBACiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfYWJvcnRfY29tbWFuZCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpOykKKwkJICAgIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJfSBlbHNlIHsKIAkJc3AtPmZsYWdzIHw9IFNSQl9BQk9SVF9QRU5ESU5HOwogCQlERUJVRzExKHByaW50aygicWxhMngwMF9hYm9ydF9jb21tYW5kKCVsZCk6IGRvbmUuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJICAgIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC04NDgsNyArODQ4LDcgQEAKIAlpZiAoZmNwb3J0ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgZmNwb3J0LT5oYS0+aG9zdF9ubyk7KQorCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGZjcG9ydC0+aGEtPmhvc3Rfbm8pKTsKIAogCWhhID0gZmNwb3J0LT5oYTsKIAltY3AtPm1iWzBdID0gTUJDX0FCT1JUX1RBUkdFVDsKQEAgLTg3MiwxMSArODcyLDExIEBACiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfYWJvcnRfdGFyZ2V0KCVsZCk6IGZhaWxlZD0leC5cbiIsCi0JCSAgICBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAl9IGVsc2UgewogCQkvKkVNUFRZKi8KIAkJREVCVUcxMShwcmludGsoInFsYTJ4MDBfYWJvcnRfdGFyZ2V0KCVsZCk6IGRvbmUuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJICAgIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC05MTIsNyArOTEyLDcgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAogCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9hZGFwdGVyX2lkKCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICBoYS0+aG9zdF9ubyk7KQorCSAgICBoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfQURBUFRFUl9MT09QX0lEOwogCW1jcC0+b3V0X21iID0gTUJYXzA7CkBAIC05MzMsMTEgKzkzMywxMSBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfZ2V0X2FkYXB0ZXJfaWQoJWxkKTogZmFpbGVkPSV4LlxuIiwKLQkJICAgIGhhLT5ob3N0X25vLCBydmFsKTspCisJCSAgICBoYS0+aG9zdF9ubywgcnZhbCkpOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRzExKHByaW50aygicWxhMngwMF9nZXRfYWRhcHRlcl9pZCglbGQpOiBkb25lLlxuIiwKLQkJICAgIGhhLT5ob3N0X25vKTspCisJCSAgICBoYS0+aG9zdF9ubykpOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtOTY4LDcgKzk2OCw3IEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKIAlERUJVRzExKHByaW50aygicWxhMngwMF9nZXRfcmV0cnlfY250KCVsZCk6IGVudGVyZWQuXG4iLAotCQkJaGEtPmhvc3Rfbm8pOykKKwkJCWhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0dFVF9SRVRSWV9DT1VOVDsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwpAQCAtOTgwLDcgKzk4MCw3IEBACiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9nZXRfcmV0cnlfY250KCVsZCk6IGZhaWxlZCA9ICV4LlxuIiwKLQkJICAgIGhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKTspCisJCSAgICBoYS0+aG9zdF9ubywgbWNwLT5tYlswXSkpOwogCX0gZWxzZSB7CiAJCS8qIENvbnZlcnQgcmV0dXJuZWQgZGF0YSBhbmQgY2hlY2sgb3VyIHZhbHVlcy4gKi8KIAkJKnJfYV90b3YgPSBtY3AtPm1iWzNdIC8gMjsKQEAgLTk5Miw3ICs5OTIsNyBAQAogCQl9CiAKIAkJREVCVUcxMShwcmludGsoInFsYTJ4MDBfZ2V0X3JldHJ5X2NudCglbGQpOiBkb25lLiBtYjM9JWQgIgotCQkgICAgInJhdG92PSVkLlxuIiwgaGEtPmhvc3Rfbm8sIG1jcC0+bWJbM10sIHJhdG92KTspCisJCSAgICAicmF0b3Y9JWQuXG4iLCBoYS0+aG9zdF9ubywgbWNwLT5tYlszXSwgcmF0b3YpKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTEwMjMsNyArMTAyMyw3IEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKIAlERUJVRzExKHByaW50aygicWxhMngwMF9pbml0X2Zpcm13YXJlKCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICBoYS0+aG9zdF9ubyk7KQorCSAgICBoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19JTklUSUFMSVpFX0ZJUk1XQVJFOwogCW1jcC0+bWJbMl0gPSBNU1coaGEtPmluaXRfY2JfZG1hKTsKQEAgLTEwNDMsMTEgKzEwNDMsMTEgQEAKIAkJLypFTVBUWSovCiAJCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9pbml0X2Zpcm13YXJlKCVsZCk6IGZhaWxlZD0leCAiCiAJCSAgICAibWIwPSV4LlxuIiwKLQkJICAgIGhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKTspCisJCSAgICBoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRzExKHByaW50aygicWxhMngwMF9pbml0X2Zpcm13YXJlKCVsZCk6IGRvbmUuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJICAgIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCXN0cnVjdCBwb3J0X2RhdGFiYXNlXzI0eHggKnBkMjQ7CiAJZG1hX2FkZHJfdCBwZF9kbWE7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubyk7KQorCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAKIAlwZDI0ID0gTlVMTDsKIAlwZCA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmcGRfZG1hKTsKQEAgLTEyMjAsNyArMTIyMCw3IEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKIAlERUJVRzExKHByaW50aygicWxhMngwMF9nZXRfZmlybXdhcmVfc3RhdGUoJWxkKTogZW50ZXJlZC5cbiIsCi0JICAgIGhhLT5ob3N0X25vKTspCisJICAgIGhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0dFVF9GSVJNV0FSRV9TVEFURTsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwpAQCAtMTIzNSwxMSArMTIzNSwxMSBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKCVsZCk6ICIKLQkJICAgICJmYWlsZWQ9JXguXG4iLCBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgImZhaWxlZD0leC5cbiIsIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9maXJtd2FyZV9zdGF0ZSglbGQpOiBkb25lLlxuIiwKLQkJICAgIGhhLT5ob3N0X25vKTspCisJCSAgICBoYS0+aG9zdF9ubykpOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMTI3Miw3ICsxMjcyLDcgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAogCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9wb3J0X25hbWUoJWxkKTogZW50ZXJlZC5cbiIsCi0JICAgIGhhLT5ob3N0X25vKTspCisJICAgIGhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0dFVF9QT1JUX05BTUU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMXxNQlhfMDsKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9nZXRfcG9ydF9uYW1lKCVsZCk6IGZhaWxlZD0leC5cbiIsCi0JCSAgICBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAl9IGVsc2UgewogCQlpZiAobmFtZSAhPSBOVUxMKSB7CiAJCQkvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbmFtZSBpbiBiaWcgZW5kaWFuLiAqLwpAQCAtMTMwNyw3ICsxMzA3LDcgQEAKIAkJfQogCiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9wb3J0X25hbWUoJWxkKTogZG9uZS5cbiIsCi0JCSAgICBoYS0+aG9zdF9ubyk7KQorCQkgICAgaGEtPmhvc3Rfbm8pKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTEzMzUsNyArMTMzNSw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCiAJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCW1jcC0+bWJbMF0gPSBNQkNfTElQX0ZVTExfTE9HSU47CkBAIC0xMzY0LDEwICsxMzY0LDEwIEBACiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwKLQkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNDAwLDEwICsxNDAwLDEwIEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKIAlERUJVRzExKHByaW50aygicWxhMngwMF9zZW5kX3NucyglbGQpOiBlbnRlcmVkLlxuIiwKLQkgICAgaGEtPmhvc3Rfbm8pOykKKwkgICAgaGEtPmhvc3Rfbm8pKTsKIAogCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX3NlbmRfc25zOiByZXRyeSBjbnQ9JWQgcmF0b3Y9JWQgdG90YWwgIgotCSAgICAidG92PSVkLlxuIiwgaGEtPnJldHJ5X2NvdW50LCBoYS0+bG9naW5fdGltZW91dCwgbWNwLT50b3YpOykKKwkgICAgInRvdj0lZC5cbiIsIGhhLT5yZXRyeV9jb3VudCwgaGEtPmxvZ2luX3RpbWVvdXQsIG1jcC0+dG92KSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX1NFTkRfU05TX0NPTU1BTkQ7CiAJbWNwLT5tYlsxXSA9IGNtZF9zaXplOwpAQCAtMTQyMSwxMiArMTQyMSwxMiBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRyhwcmludGsoInFsYTJ4MDBfc2VuZF9zbnMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4ICIKLQkJICAgICJtYlsxXT0leC5cbiIsIGhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTspCisJCSAgICAibWJbMV09JXguXG4iLCBoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOwogCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfc2VuZF9zbnMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4ICIKLQkJICAgICJtYlsxXT0leC5cbiIsIGhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTspCisJCSAgICAibWJbMV09JXguXG4iLCBoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygicWxhMngwMF9zZW5kX3NucyglbGQpOiBkb25lLlxuIiwgaGEtPmhvc3Rfbm8pOykKKwkJREVCVUcxMShwcmludGsoInFsYTJ4MDBfc2VuZF9zbnMoJWxkKTogZG9uZS5cbiIsIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNDQyLDcgKzE0NDIsNyBAQAogCWRtYV9hZGRyX3QJbGdfZG1hOwogCXVpbnQzMl90CWlvcFsyXTsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAogCWxnID0gZG1hX3Bvb2xfYWxsb2MoaGEtPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsICZsZ19kbWEpOwogCWlmIChsZyA9PSBOVUxMKSB7CkBAIC0xNDU4LDEzICsxNDU4LDE1IEBACiAJbGctPmNvbnRyb2xfZmxhZ3MgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KExDRl9DT01NQU5EX1BMT0dJKTsKIAlpZiAob3B0ICYgQklUXzApCiAJCWxnLT5jb250cm9sX2ZsYWdzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoTENGX0NPTkRfUExPR0kpOworCWlmIChvcHQgJiBCSVRfMSkKKwkJbGctPmNvbnRyb2xfZmxhZ3MgfD0gX19jb25zdGFudF9jcHVfdG9fbGUxNihMQ0ZfU0tJUF9QUkxJKTsKIAlsZy0+cG9ydF9pZFswXSA9IGFsX3BhOwogCWxnLT5wb3J0X2lkWzFdID0gYXJlYTsKIAlsZy0+cG9ydF9pZFsyXSA9IGRvbWFpbjsKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCBsZywgbGdfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBMb2dpbiBJT0NCICIKLQkJICAgICIoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBydmFsKTspCisJCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCkpOwogCX0gZWxzZSBpZiAobGctPmVudHJ5X3N0YXR1cyAhPSAwKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgIgogCQkgICAgIi0tIGVycm9yIHN0YXR1cyAoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLApAQCAtMTUwNSw3ICsxNTA3LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAogCQlpb3BbMF0gPSBsZTMyX3RvX2NwdShsZy0+aW9fcGFyYW1ldGVyWzBdKTsKIApAQCAtMTU1OSw3ICsxNTYxLDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygicWxhMngwMF9sb2dpbl9mYWJyaWMoJWxkKTogZW50ZXJlZC5cbiIsIGhhLT5ob3N0X25vKTspCisJREVCVUcxMShwcmludGsoInFsYTJ4MDBfbG9naW5fZmFicmljKCVsZCk6IGVudGVyZWQuXG4iLCBoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19MT0dJTl9GQUJSSUNfUE9SVDsKIAltY3AtPm91dF9tYiA9IE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwpAQCAtMTYwNCwxMSArMTYwNiwxMSBAQAogCQkvKkVNUFRZKi8KIAkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX2xvZ2luX2ZhYnJpYyglbGQpOiBmYWlsZWQ9JXggIgogCQkgICAgIm1iWzBdPSV4IG1iWzFdPSV4IG1iWzJdPSV4LlxuIiwgaGEtPmhvc3Rfbm8sIHJ2YWwsCi0JCSAgICBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdKTspCisJCSAgICBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2xvZ2luX2ZhYnJpYyglbGQpOiBkb25lLlxuIiwKLQkJICAgIGhhLT5ob3N0X25vKTspCisJCSAgICBoYS0+aG9zdF9ubykpOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMTY0Myw3ICsxNjQ1LDcgQEAKIAkJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKIAkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBtYl9yZXQsIG9wdCk7CiAKLQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJREVCVUczKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19MT0dJTl9MT09QX1BPUlQ7CiAJaWYgKEhBU19FWFRFTkRFRF9JRFMoaGEpKQpAQCAtMTY3NywxMyArMTY3OSwxMyBAQAogCiAJCURFQlVHKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4ICIKIAkJICAgICJtYls2XT0leCBtYls3XT0leC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCwKLQkJICAgIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbNl0sIG1jcC0+bWJbN10pOykKKwkJICAgIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbNl0sIG1jcC0+bWJbN10pKTsKIAkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXggIgogCQkgICAgIm1iWzZdPSV4IG1iWzddPSV4LlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBydmFsLAotCQkgICAgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYls2XSwgbWNwLT5tYls3XSk7KQorCQkgICAgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYls2XSwgbWNwLT5tYls3XSkpOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAl9CiAKIAlyZXR1cm4gKHJ2YWwpOwpAQCAtMTY5Nyw3ICsxNjk5LDcgQEAKIAlzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqbGc7CiAJZG1hX2FkZHJfdAlsZ19kbWE7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubyk7KQorCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAKIAlsZyA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmbGdfZG1hKTsKIAlpZiAobGcgPT0gTlVMTCkgewpAQCAtMTcxOCw3ICsxNzIwLDcgQEAKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCBsZywgbGdfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBMb2dvdXQgSU9DQiAiCi0JCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAl9IGVsc2UgaWYgKGxnLT5lbnRyeV9zdGF0dXMgIT0gMCkgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKIAkJICAgICItLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKQEAgLTE3MjksMTAgKzE3MzEsMTAgQEAKIAkJICAgICItLSBjb21wbGV0aW9uIHN0YXR1cyAoJXgpICBpb3BhcmFtPSV4LyV4LlxuIiwgX19mdW5jX18sCiAJCSAgICBoYS0+aG9zdF9ubywgbGUxNl90b19jcHUobGctPmNvbXBfc3RhdHVzKSwKIAkJICAgIGxlMzJfdG9fY3B1KGxnLT5pb19wYXJhbWV0ZXJbMF0pLAotCQkgICAgbGUzMl90b19jcHUobGctPmlvX3BhcmFtZXRlclsxXSkpOykKKwkJICAgIGxlMzJfdG9fY3B1KGxnLT5pb19wYXJhbWV0ZXJbMV0pKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJZG1hX3Bvb2xfZnJlZShoYS0+c19kbWFfcG9vbCwgbGcsIGxnX2RtYSk7CkBAIC0xNzY1LDcgKzE3NjcsNyBAQAogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCiAJREVCVUcxMShwcmludGsoInFsYTJ4MDBfZmFicmljX2xvZ291dCglbGQpOiBlbnRlcmVkLlxuIiwKLQkgICAgaGEtPmhvc3Rfbm8pOykKKwkgICAgaGEtPmhvc3Rfbm8pKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfTE9HT1VUX0ZBQlJJQ19QT1JUOwogCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CkBAIC0xNzg1LDExICsxNzg3LDExIEBACiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9mYWJyaWNfbG9nb3V0KCVsZCk6IGZhaWxlZD0leCAiCi0JCSAgICAibWJ4MT0leC5cbiIsIGhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzFdKTspCisJCSAgICAibWJ4MT0leC5cbiIsIGhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzFdKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2ZhYnJpY19sb2dvdXQoJWxkKTogZG9uZS5cbiIsCi0JCSAgICBoYS0+aG9zdF9ubyk7KQorCQkgICAgaGEtPmhvc3Rfbm8pKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTE4MTgsNyArMTgyMCw3IEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKIAlERUJVRzExKHByaW50aygicWxhMngwMF9mdWxsX2xvZ2luX2xpcCglbGQpOiBlbnRlcmVkLlxuIiwKLQkgICAgaGEtPmhvc3Rfbm8pOykKKwkgICAgaGEtPmhvc3Rfbm8pKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfTElQX0ZVTExfTE9HSU47CiAJbWNwLT5tYlsxXSA9IDA7CkBAIC0xODMzLDExICsxODM1LDExIEBACiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9mdWxsX2xvZ2luX2xpcCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpOykKKwkJICAgIGhhLT5ob3N0X25vLCBydmFsKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKCVsZCk6IGRvbmUuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJICAgIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xODY0LDcgKzE4NjYsNyBAQAogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCiAJREVCVUcxMShwcmludGsoInFsYTJ4MDBfZ2V0X2lkX2xpc3QoJWxkKTogZW50ZXJlZC5cbiIsCi0JICAgIGhhLT5ob3N0X25vKTspCisJICAgIGhhLT5ob3N0X25vKSk7CiAKIAlpZiAoaWRfbGlzdCA9PSBOVUxMKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKQEAgLTE4OTMsMTEgKzE4OTUsMTEgQEAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KIAkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX2dldF9pZF9saXN0KCVsZCk6IGZhaWxlZD0leC5cbiIsCi0JCSAgICBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAl9IGVsc2UgewogCQkqZW50cmllcyA9IG1jcC0+bWJbMV07CiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9pZF9saXN0KCVsZCk6IGRvbmUuXG4iLAotCQkgICAgaGEtPmhvc3Rfbm8pOykKKwkJICAgIGhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xOTM2LDcgKzE5MzgsNyBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCA9ICV4LlxuIiwgX19mdW5jX18sCi0JCSAgICBoYS0+aG9zdF9ubywgbWNwLT5tYlswXSk7KQorCQkgICAgaGEtPmhvc3Rfbm8sIG1jcC0+bWJbMF0pKTsKIAl9IGVsc2UgewogCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS4gbWIxPSV4IG1iMj0leCBtYjM9JXggbWI2PSV4ICIKIAkJICAgICJtYjc9JXggbWIxMD0leC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKQEAgLTIwNDUsNyArMjA0Nyw3IEBACiAJbGlua19zdGF0X3QgKnN0YXRfYnVmOwogCWRtYV9hZGRyX3Qgc3RhdF9idWZfZG1hOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCiAJc3RhdF9idWYgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0FUT01JQywgJnN0YXRfYnVmX2RtYSk7CiAJaWYgKHN0YXRfYnVmID09IE5VTEwpIHsKQEAgLTIwODMsNyArMjA4NSw3IEBACiAJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKIAkJaWYgKG1jcC0+bWJbMF0gIT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKIAkJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogY21kIGZhaWxlZC4gbWJ4MD0leC5cbiIsCi0JCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKTspCisJCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKSk7CiAJCQlzdGF0dXNbMF0gPSBtY3AtPm1iWzBdOwogCQkJcnZhbCA9IEJJVF8xOwogCQl9IGVsc2UgewpAQCAtMjEwOCwxMiArMjExMCwxMiBAQAogCQkJICAgIHN0YXRfYnVmLT5sb3NzX3N5bmNfY250LCBzdGF0X2J1Zi0+bG9zc19zaWdfY250LAogCQkJICAgIHN0YXRfYnVmLT5wcmltX3NlcV9lcnJfY250LAogCQkJICAgIHN0YXRfYnVmLT5pbnZhbF94bWl0X3dvcmRfY250LAotCQkJICAgIHN0YXRfYnVmLT5pbnZhbF9jcmNfY250KTspCisJCQkgICAgc3RhdF9idWYtPmludmFsX2NyY19jbnQpKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIEZhaWxlZC4gKi8KIAkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIGhhLT5ob3N0X25vLCBydmFsKTspCisJCSAgICBoYS0+aG9zdF9ubywgcnZhbCkpOwogCQlydmFsID0gQklUXzE7CiAJfQogCkBAIC0yMTMyLDcgKzIxMzQsNyBAQAogCXVpbnQzMl90ICpzYnVmLCAqc2l0ZXI7CiAJZG1hX2FkZHJfdCBzYnVmX2RtYTsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKIAogCWlmIChkd29yZHMgPiAoRE1BX1BPT0xfU0laRSAvIDQpKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogVW5hYmxlZCB0byByZXRyaWV2ZSAlZCBEV09SRHMgIgpAQCAtMjE5Niw3ICsyMTk4LDcgQEAKIAlkbWFfYWRkcl90CWFidF9kbWE7CiAJdWludDMyX3QJaGFuZGxlOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCiAJZmNwb3J0ID0gc3AtPmZjcG9ydDsKIApAQCAtMjIyOSw3ICsyMjMxLDcgQEAKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCBhYnQsIGFidF9kbWEsIDApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGlzc3VlIElPQ0IgKCV4KS5cbiIsCi0JCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHJ2YWwpOykKKwkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCkpOwogCX0gZWxzZSBpZiAoYWJ0LT5lbnRyeV9zdGF0dXMgIT0gMCkgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKIAkJICAgICItLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKQEAgLTIyMzgsMTAgKzIyNDAsMTAgQEAKIAl9IGVsc2UgaWYgKGFidC0+bnBvcnRfaGFuZGxlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpIHsKIAkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCiAJCSAgICAiLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKLQkJICAgIGxlMTZfdG9fY3B1KGFidC0+bnBvcnRfaGFuZGxlKSk7KQorCQkgICAgbGUxNl90b19jcHUoYWJ0LT5ucG9ydF9oYW5kbGUpKSk7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAJCXNwLT5mbGFncyB8PSBTUkJfQUJPUlRfUEVORElORzsKIAl9CiAKQEAgLTIyNjgsNyArMjI3MCw3IEBACiAJaWYgKGZjcG9ydCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGZjcG9ydC0+aGEtPmhvc3Rfbm8pOykKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBmY3BvcnQtPmhhLT5ob3N0X25vKSk7CiAKIAloYSA9IGZjcG9ydC0+aGE7CiAJdHNrID0gZG1hX3Bvb2xfYWxsb2MoaGEtPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsICZ0c2tfZG1hKTsKQEAgLTIyOTAsNyArMjI5Miw3IEBACiAJcnZhbCA9IHFsYTJ4MDBfaXNzdWVfaW9jYihoYSwgdHNrLCB0c2tfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBUYXJnZXQgUmVzZXQgSU9DQiAiCi0JCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCk7KQorCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAkJZ290byBhdGFyZ2V0X2RvbmU7CiAJfSBlbHNlIGlmICh0c2stPnAuc3RzLmVudHJ5X3N0YXR1cyAhPSAwKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgIgpAQCAtMjMwMiw3ICsyMzA0LDcgQEAKIAkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihDU19DT01QTEVURSkpIHsKIAkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCiAJCSAgICAiLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLAotCQkgICAgaGEtPmhvc3Rfbm8sIGxlMTZfdG9fY3B1KHRzay0+cC5zdHMuY29tcF9zdGF0dXMpKTspCisJCSAgICBoYS0+aG9zdF9ubywgbGUxNl90b19jcHUodHNrLT5wLnN0cy5jb21wX3N0YXR1cykpKTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCWdvdG8gYXRhcmdldF9kb25lOwogCX0KQEAgLTIzMTEsOSArMjMxMyw5IEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFya2VyKGhhLCBmY3BvcnQtPmxvb3BfaWQsIDAsIE1LX1NZTkNfSUQpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGlzc3VlIE1hcmtlciBJT0NCICIKLQkJICAgICIoJXgpLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLCBydmFsKTspCisJCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcnZhbCkpOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCisJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CiAJfQogCiBhdGFyZ2V0X2RvbmU6CkBAIC0yNDYwLDMgKzI0NjIsODEgQEAKIAogCXJldHVybiBydmFsOwogfQorCitpbnQKK3FsYTJ4MDBfdHJhY2VfY29udHJvbChzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCBjdHJsLCBkbWFfYWRkcl90IGVmdF9kbWEsCisgICAgdWludDE2X3QgYnVmZmVycykKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisKKwlpZiAoIUlTX1FMQTI0WFgoaGEpICYmICFJU19RTEE1NFhYKGhhKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisKKwlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJbWNwLT5tYlswXSA9IE1CQ19UUkFDRV9DT05UUk9MOworCW1jcC0+bWJbMV0gPSBjdHJsOworCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOworCWlmIChjdHJsID09IFRDX0VOQUJMRSkgeworCQltY3AtPm1iWzJdID0gTFNXKGVmdF9kbWEpOworCQltY3AtPm1iWzNdID0gTVNXKGVmdF9kbWEpOworCQltY3AtPm1iWzRdID0gTFNXKE1TRChlZnRfZG1hKSk7CisJCW1jcC0+bWJbNV0gPSBNU1coTVNEKGVmdF9kbWEpKTsKKwkJbWNwLT5tYls2XSA9IGJ1ZmZlcnM7CisJCW1jcC0+bWJbN10gPSBidWZmZXJzOworCQltY3AtPm91dF9tYiB8PSBNQlhfN3xNQlhfNnxNQlhfNXxNQlhfNHxNQlhfM3xNQlhfMjsKKwl9CisJbWNwLT50b3YgPSAzMDsKKwltY3AtPmZsYWdzID0gMDsKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CisKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leC5cbiIsCisJCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwl9IGVsc2UgeworCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCX0KKworCXJldHVybiBydmFsOworfQorCitpbnQKK3FsYTJ4MDBfcmVhZF9zZnAoc2NzaV9xbGFfaG9zdF90ICpoYSwgZG1hX2FkZHJfdCBzZnBfZG1hLCB1aW50MTZfdCBhZGRyLAorICAgIHVpbnQxNl90IG9mZiwgdWludDE2X3QgY291bnQpCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCisJaWYgKCFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBNTRYWChoYSkpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCisJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKworCW1jcC0+bWJbMF0gPSBNQkNfUkVBRF9TRlA7CisJbWNwLT5tYlsxXSA9IGFkZHI7CisJbWNwLT5tYlsyXSA9IE1TVyhzZnBfZG1hKTsKKwltY3AtPm1iWzNdID0gTFNXKHNmcF9kbWEpOworCW1jcC0+bWJbNl0gPSBNU1coTVNEKHNmcF9kbWEpKTsKKwltY3AtPm1iWzddID0gTFNXKE1TRChzZnBfZG1hKSk7CisJbWNwLT5tYls4XSA9IGNvdW50OworCW1jcC0+bWJbOV0gPSBvZmY7CisJbWNwLT5tYlsxMF0gPSAwOworCW1jcC0+b3V0X21iID0gTUJYXzEwfE1CWF85fE1CWF84fE1CWF83fE1CWF82fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOworCW1jcC0+aW5fbWIgPSBNQlhfMDsKKwltY3AtPnRvdiA9IDMwOworCW1jcC0+ZmxhZ3MgPSAwOworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKKworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4ICgleCkuXG4iLCBfX2Z1bmNfXywKKwkJICAgIGhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJfSBlbHNlIHsKKwkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwl9CisKKwlyZXR1cm4gcnZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggY2NhYWQwYi4uZWM3ZWJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTM5LDE0ICszOSwxNCBAQAogaW50IHFscG9ydF9kb3duX3JldHJ5ID0gMzA7CiBtb2R1bGVfcGFyYW0ocWxwb3J0X2Rvd25fcmV0cnksIGludCwgU19JUlVHT3xTX0lSVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWxwb3J0X2Rvd25fcmV0cnksCi0JCSJNYXhpbXVtIG51bWJlciBvZiBjb21tYW5kIHJldHJpZXMgdG8gYSBwb3J0IHRoYXQgcmV0dXJucyIKKwkJIk1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmQgcmV0cmllcyB0byBhIHBvcnQgdGhhdCByZXR1cm5zICIKIAkJImEgUE9SVC1ET1dOIHN0YXR1cy4iKTsKIAogaW50IHFsMnhwbG9naWFic2VudGRldmljZTsKIG1vZHVsZV9wYXJhbShxbDJ4cGxvZ2lhYnNlbnRkZXZpY2UsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeHBsb2dpYWJzZW50ZGV2aWNlLAogCQkiT3B0aW9uIHRvIGVuYWJsZSBQTE9HSSB0byBkZXZpY2VzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGFmdGVyICIKLQkJImEgRmFicmljIHNjYW4uICBUaGlzIGlzIG5lZWRlZCBmb3Igc2V2ZXJhbCBicm9rZW4gc3dpdGNoZXMuIgorCQkiYSBGYWJyaWMgc2Nhbi4gIFRoaXMgaXMgbmVlZGVkIGZvciBzZXZlcmFsIGJyb2tlbiBzd2l0Y2hlcy4gIgogCQkiRGVmYXVsdCBpcyAwIC0gbm8gUExPR0kuIDEgLSBwZXJmb20gUExPR0kuIik7CiAKIGludCBxbDJ4bG9naW5yZXRyeWNvdW50ID0gMDsKQEAgLTU0LDYgKzU0LDE5IEBACiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhsb2dpbnJldHJ5Y291bnQsCiAJCSJTcGVjaWZ5IGFuIGFsdGVybmF0ZSB2YWx1ZSBmb3IgdGhlIE5WUkFNIGxvZ2luIHJldHJ5IGNvdW50LiIpOwogCitpbnQgcWwyeGFsbG9jZndkdW1wID0gMTsKK21vZHVsZV9wYXJhbShxbDJ4YWxsb2Nmd2R1bXAsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocWwyeGFsbG9jZndkdW1wLAorCQkiT3B0aW9uIHRvIGVuYWJsZSBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmb3IgYSBmaXJtd2FyZSBkdW1wICIKKwkJImR1cmluZyBIQkEgaW5pdGlhbGl6YXRpb24uICBNZW1vcnkgYWxsb2NhdGlvbiByZXF1aXJlbWVudHMgIgorCQkidmFyeSBieSBJU1AgdHlwZS4gIERlZmF1bHQgaXMgMSAtIGFsbG9jYXRlIG1lbW9yeS4iKTsKKworaW50IGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7Cittb2R1bGVfcGFyYW0oZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZywgaW50LCBTX0lSVUdPfFNfSVJVU1IpOworTU9EVUxFX1BBUk1fREVTQyhleHRlbmRlZF9lcnJvcl9sb2dnaW5nLAorCQkiT3B0aW9uIHRvIGVuYWJsZSBleHRlbmRlZCBlcnJvciBsb2dnaW5nLCAiCisJCSJEZWZhdWx0IGlzIDAgLSBubyBsb2dnaW5nLiAxIC0gbG9nIGVycm9ycy4iKTsKKwogc3RhdGljIHZvaWQgcWxhMngwMF9mcmVlX2RldmljZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKHNjc2lfcWxhX2hvc3RfdCAqaGEpOwpAQCAtNjI0LDcgKzYzNyw3IEBACiAKIAkJREVCVUcyKHByaW50aygiJXMoJWxkKTogYWJvcnRpbmcgc3AgJXAgZnJvbSBSSVNDLiBwaWQ9JWxkLlxuIiwKIAkJICAgIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgc3AsIHNlcmlhbCkpOwotCQlERUJVRzMocWxhMngwMF9wcmludF9zY3NpX2NtZChjbWQpOykKKwkJREVCVUczKHFsYTJ4MDBfcHJpbnRfc2NzaV9jbWQoY21kKSk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGhhLT5pc3Bfb3BzLmFib3J0X2NvbW1hbmQoaGEsIHNwKSkgewpAQCAtNzY2LDcgKzc3OSw3IEBACiAjZW5kaWYKIAl9IGVsc2UgewogCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkgICAgIiVzIGZhaWxlZDogbG9vcCBub3QgcmVhZHlcbiIsX19mdW5jX18pOykKKwkJICAgICIlcyBmYWlsZWQ6IGxvb3Agbm90IHJlYWR5XG4iLF9fZnVuY19fKSk7CiAJfQogCiAJaWYgKHJldCA9PSBGQUlMRUQpIHsKQEAgLTEwMjEsMTIgKzEwMzQsMTIgQEAKIAkJLyogRW1wdHkgKi8KIAkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiAqKioqIEZBSUxFRCAqKioqXG4iLAogCQkJCV9fZnVuY19fLAotCQkJCWhhLT5ob3N0X25vKTspCisJCQkJaGEtPmhvc3Rfbm8pKTsKIAl9IGVsc2UgewogCQkvKiBFbXB0eSAqLwogCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBleGl0aW5nIG5vcm1hbGx5LlxuIiwKIAkJCQlfX2Z1bmNfXywKLQkJCQloYS0+aG9zdF9ubyk7KQorCQkJCWhhLT5ob3N0X25vKSk7CiAJfQogCiAJcmV0dXJuKHN0YXR1cyk7CkBAIC0xMzI0LDcgKzEzMzcsOCBAQAogLyoKICAqIFBDSSBkcml2ZXIgaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyBpbnQgcWxhMngwMF9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcWxhMngwMF9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQJcmV0ID0gLUVOT0RFVjsKIAlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnOwpAQCAtMTQwNSw3ICsxNDE5LDYgQEAKIAloYS0+aXNwX29wcy5yZWFkX252cmFtCQk9IHFsYTJ4MDBfcmVhZF9udnJhbV9kYXRhOwogCWhhLT5pc3Bfb3BzLndyaXRlX252cmFtCQk9IHFsYTJ4MDBfd3JpdGVfbnZyYW1fZGF0YTsKIAloYS0+aXNwX29wcy5md19kdW1wCQk9IHFsYTIxMDBfZndfZHVtcDsKLQloYS0+aXNwX29wcy5hc2NpaV9md19kdW1wCT0gcWxhMjEwMF9hc2NpaV9md19kdW1wOwogCWhhLT5pc3Bfb3BzLnJlYWRfb3B0cm9tCQk9IHFsYTJ4MDBfcmVhZF9vcHRyb21fZGF0YTsKIAloYS0+aXNwX29wcy53cml0ZV9vcHRyb20JPSBxbGEyeDAwX3dyaXRlX29wdHJvbV9kYXRhOwogCWlmIChJU19RTEEyMTAwKGhhKSkgewpAQCAtMTQzMiw3ICsxNDQ1LDYgQEAKIAkJaGEtPmlzcF9vcHMucGNpX2NvbmZpZyA9IHFsYTIzMDBfcGNpX2NvbmZpZzsKIAkJaGEtPmlzcF9vcHMuaW50cl9oYW5kbGVyID0gcWxhMjMwMF9pbnRyX2hhbmRsZXI7CiAJCWhhLT5pc3Bfb3BzLmZ3X2R1bXAgPSBxbGEyMzAwX2Z3X2R1bXA7Ci0JCWhhLT5pc3Bfb3BzLmFzY2lpX2Z3X2R1bXAgPSBxbGEyMzAwX2FzY2lpX2Z3X2R1bXA7CiAJCWhhLT5pc3Bfb3BzLmJlYWNvbl9vbiA9IHFsYTJ4MDBfYmVhY29uX29uOwogCQloYS0+aXNwX29wcy5iZWFjb25fb2ZmID0gcWxhMngwMF9iZWFjb25fb2ZmOwogCQloYS0+aXNwX29wcy5iZWFjb25fYmxpbmsgPSBxbGEyeDAwX2JlYWNvbl9ibGluazsKQEAgLTE0NjksNyArMTQ4MSw2IEBACiAJCWhhLT5pc3Bfb3BzLnJlYWRfbnZyYW0gPSBxbGEyNHh4X3JlYWRfbnZyYW1fZGF0YTsKIAkJaGEtPmlzcF9vcHMud3JpdGVfbnZyYW0gPSBxbGEyNHh4X3dyaXRlX252cmFtX2RhdGE7CiAJCWhhLT5pc3Bfb3BzLmZ3X2R1bXAgPSBxbGEyNHh4X2Z3X2R1bXA7Ci0JCWhhLT5pc3Bfb3BzLmFzY2lpX2Z3X2R1bXAgPSBxbGEyNHh4X2FzY2lpX2Z3X2R1bXA7CiAJCWhhLT5pc3Bfb3BzLnJlYWRfb3B0cm9tCT0gcWxhMjR4eF9yZWFkX29wdHJvbV9kYXRhOwogCQloYS0+aXNwX29wcy53cml0ZV9vcHRyb20gPSBxbGEyNHh4X3dyaXRlX29wdHJvbV9kYXRhOwogCQloYS0+aXNwX29wcy5iZWFjb25fb24gPSBxbGEyNHh4X2JlYWNvbl9vbjsKQEAgLTE1NDEsNyArMTU1Miw3IEBACiAJaG9zdC0+dHJhbnNwb3J0dCA9IHFsYTJ4eHhfdHJhbnNwb3J0X3RlbXBsYXRlOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBoYS0+aXNwX29wcy5pbnRyX2hhbmRsZXIsCi0JICAgIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgUUxBMlhYWF9EUklWRVJfTkFNRSwgaGEpOworCSAgICBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBRTEEyWFhYX0RSSVZFUl9OQU1FLCBoYSk7CiAJaWYgKHJldCkgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSAgICAiRmFpbGVkIHRvIHJlc2VydmUgaW50ZXJydXB0ICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKQEAgLTE2NDAsNyArMTY1MSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgcWxhMngwMF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0CitxbGEyeDAwX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc2NzaV9xbGFfaG9zdF90ICpoYTsKIApAQCAtMTY3OCw2ICsxNjkwLDkgQEAKIAkJa3RocmVhZF9zdG9wKHQpOwogCX0KIAorCWlmIChoYS0+ZWZ0KQorCQlxbGEyeDAwX3RyYWNlX2NvbnRyb2woaGEsIFRDX0RJU0FCTEUsIDAsIDApOworCiAJLyogU3RvcCBjdXJyZW50bHkgZXhlY3V0aW5nIGZpcm13YXJlLiAqLwogCXFsYTJ4MDBfc3RvcF9maXJtd2FyZShoYSk7CiAKQEAgLTE4OTksMTcgKzE5MTQsNiBAQAogCQl9CiAJCW1lbXNldChoYS0+aW5pdF9jYiwgMCwgaGEtPmluaXRfY2Jfc2l6ZSk7CiAKLQkJLyogQWxsb2NhdGUgaW9jdGwgcmVsYXRlZCBtZW1vcnkuICovCi0JCWlmIChxbGEyeDAwX2FsbG9jX2lvY3RsX21lbShoYSkpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIC0gaW9jdGxfbWVtXG4iKTsKLQotCQkJcWxhMngwMF9tZW1fZnJlZShoYSk7Ci0JCQltc2xlZXAoMTAwKTsKLQotCQkJY29udGludWU7Ci0JCX0KLQogCQlpZiAocWxhMngwMF9hbGxvY2F0ZV9zcF9wb29sKGhhKSkgewogCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkJICAgICJNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgLSAiCkBAIC0xOTcyLDYgKzE5NzYsMjYgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCW1lbXNldChoYS0+Y3Rfc25zLCAwLCBzaXplb2Yoc3RydWN0IGN0X3Nuc19wa3QpKTsKKworCQkJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CisJCQkJLyoKKwkJCQkgKiBHZXQgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGVkIGZvciBTRlAKKwkJCQkgKiBibG9jay4KKwkJCQkgKi8KKwkJCQloYS0+c2ZwX2RhdGEgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwKKwkJCQkgICAgR0ZQX0tFUk5FTCwgJmhhLT5zZnBfZGF0YV9kbWEpOworCQkJCWlmIChoYS0+c2ZwX2RhdGEgPT0gTlVMTCkgeworCQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJCSAgICAiTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIC0gIgorCQkJCQkgICAgInNmcF9kYXRhXG4iKTsKKworCQkJCQlxbGEyeDAwX21lbV9mcmVlKGhhKTsKKwkJCQkJbXNsZWVwKDEwMCk7CisKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCW1lbXNldChoYS0+c2ZwX2RhdGEsIDAsIFNGUF9CTE9DS19TSVpFKTsKKwkJCX0KIAkJfQogCiAJCS8qIERvbmUgYWxsIGFsbG9jYXRpb25zIHdpdGhvdXQgYW55IGVycm9yLiAqLwpAQCAtMjAwNiwxMiArMjAzMCwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogZnJlZSBpb2N0bCBtZW1vcnkgKi8KLQlxbGEyeDAwX2ZyZWVfaW9jdGxfbWVtKGhhKTsKLQogCS8qIGZyZWUgc3AgcG9vbCAqLwogCXFsYTJ4MDBfZnJlZV9zcF9wb29sKGhhKTsKIAorCWlmIChoYS0+ZndfZHVtcCkgeworCQlpZiAoaGEtPmVmdCkKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LAorCQkJICAgIG50b2hsKGhhLT5md19kdW1wLT5lZnRfc2l6ZSksIGhhLT5lZnQsIGhhLT5lZnRfZG1hKTsKKwkJdmZyZWUoaGEtPmZ3X2R1bXApOworCX0KKwogCWlmIChoYS0+c25zX2NtZCkKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3Qgc25zX2NtZF9wa3QpLAogCQkgICAgaGEtPnNuc19jbWQsIGhhLT5zbnNfY21kX2RtYSk7CkBAIC0yMDIwLDYgKzIwNDgsOSBAQAogCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBjdF9zbnNfcGt0KSwKIAkJICAgIGhhLT5jdF9zbnMsIGhhLT5jdF9zbnNfZG1hKTsKIAorCWlmIChoYS0+c2ZwX2RhdGEpCisJCWRtYV9wb29sX2ZyZWUoaGEtPnNfZG1hX3Bvb2wsIGhhLT5zZnBfZGF0YSwgaGEtPnNmcF9kYXRhX2RtYSk7CisKIAlpZiAoaGEtPm1zX2lvY2IpCiAJCWRtYV9wb29sX2ZyZWUoaGEtPnNfZG1hX3Bvb2wsIGhhLT5tc19pb2NiLCBoYS0+bXNfaW9jYl9kbWEpOwogCkBAIC0yMDQzLDYgKzIwNzQsOCBAQAogCQkgICAgKGhhLT5yZXF1ZXN0X3FfbGVuZ3RoICsgMSkgKiBzaXplb2YocmVxdWVzdF90KSwKIAkJICAgIGhhLT5yZXF1ZXN0X3JpbmcsIGhhLT5yZXF1ZXN0X2RtYSk7CiAKKwloYS0+ZWZ0ID0gTlVMTDsKKwloYS0+ZWZ0X2RtYSA9IDA7CiAJaGEtPnNuc19jbWQgPSBOVUxMOwogCWhhLT5zbnNfY21kX2RtYSA9IDA7CiAJaGEtPmN0X3NucyA9IE5VTEw7CkBAIC0yMDcxLDEzICsyMTA0LDkgQEAKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJmhhLT5mY3BvcnRzKTsKIAotCXZmcmVlKGhhLT5md19kdW1wKTsKLQl2ZnJlZShoYS0+ZndfZHVtcF9idWZmZXIpOwotCiAJaGEtPmZ3X2R1bXAgPSBOVUxMOwogCWhhLT5md19kdW1wZWQgPSAwOwogCWhhLT5md19kdW1wX3JlYWRpbmcgPSAwOwotCWhhLT5md19kdW1wX2J1ZmZlciA9IE5VTEw7CiAKIAl2ZnJlZShoYS0+b3B0cm9tX2J1ZmZlcik7CiB9CkBAIC0yNjE3LDQwICsyNjQ2LDE2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTJ4eHhfcGNpX3RibCk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1xbGEyeHh4X3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXJldHVybiBxbGEyeDAwX3Byb2JlX29uZShwZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0Ci1xbGEyeHh4X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JcWxhMngwMF9yZW1vdmVfb25lKHBkZXYpOwotfQotCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcWxhMnh4eF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9IFFMQTJYWFhfRFJJVkVSX05BTUUsCiAJLmRyaXZlcgkJPSB7CiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LAogCS5pZF90YWJsZQk9IHFsYTJ4eHhfcGNpX3RibCwKLQkucHJvYmUJCT0gcWxhMnh4eF9wcm9iZV9vbmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChxbGEyeHh4X3JlbW92ZV9vbmUpLAorCS5wcm9iZQkJPSBxbGEyeDAwX3Byb2JlX29uZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHFsYTJ4MDBfcmVtb3ZlX29uZSksCiB9OwogCi1zdGF0aWMgaW5saW5lIGludAotcWxhMngwMF9wY2lfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZxbGEyeHh4X3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXFsYTJ4MDBfcGNpX21vZHVsZV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZxbGEyeHh4X3BjaV9kcml2ZXIpOwotfQotCiAvKioKICAqIHFsYTJ4MDBfbW9kdWxlX2luaXQgLSBNb2R1bGUgaW5pdGlhbGl6YXRpb24uCiAgKiovCkBAIC0yNjcwLDE2ICsyNjc1LDE2IEBACiAKIAkvKiBEZXJpdmUgdmVyc2lvbiBzdHJpbmcuICovCiAJc3RyY3B5KHFsYTJ4MDBfdmVyc2lvbl9zdHIsIFFMQTJYWFhfVkVSU0lPTik7Ci0jaWYgREVCVUdfUUxBMjEwMAotCXN0cmNhdChxbGEyeDAwX3ZlcnNpb25fc3RyLCAiLWRlYnVnIik7Ci0jZW5kaWYKKwlpZiAoZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykKKwkJc3RyY2F0KHFsYTJ4MDBfdmVyc2lvbl9zdHIsICItZGVidWciKTsKKwogCXFsYTJ4eHhfdHJhbnNwb3J0X3RlbXBsYXRlID0KIAkgICAgZmNfYXR0YWNoX3RyYW5zcG9ydCgmcWxhMnh4eF90cmFuc3BvcnRfZnVuY3Rpb25zKTsKIAlpZiAoIXFsYTJ4eHhfdHJhbnNwb3J0X3RlbXBsYXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhLRVJOX0lORk8gIlFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXJcbiIpOwotCXJldCA9IHFsYTJ4MDBfcGNpX21vZHVsZV9pbml0KCk7CisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcWxhMnh4eF9wY2lfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCWttZW1fY2FjaGVfZGVzdHJveShzcmJfY2FjaGVwKTsKIAkJZmNfcmVsZWFzZV90cmFuc3BvcnQocWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGUpOwpAQCAtMjY5Myw3ICsyNjk4LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogcWxhMngwMF9tb2R1bGVfZXhpdCh2b2lkKQogewotCXFsYTJ4MDBfcGNpX21vZHVsZV9leGl0KCk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZxbGEyeHh4X3BjaV9kcml2ZXIpOwogCXFsYTJ4MDBfcmVsZWFzZV9maXJtd2FyZSgpOwogCWttZW1fY2FjaGVfZGVzdHJveShzcmJfY2FjaGVwKTsKIAlmY19yZWxlYXNlX3RyYW5zcG9ydChxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCA2YjMxNTUyLi5kMmQ2ODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMS4wNS1rMiIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDEuMDUtazMiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMKaW5kZXggMzI5ZWFkMi4uNjllMDU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJICogc2FuZWx5IG1haW50YWluLgogCSAqLwogCWlmIChyZXF1ZXN0X2lycShxcHRpLT5pcnEsIHFwdGlfaW50ciwKLQkJCVNBX1NISVJRLCAiUWxvZ2ljL1BUSSIsIHFwdGkpKQorCQkJSVJRRl9TSEFSRUQsICJRbG9naWMvUFRJIiwgcXB0aSkpCiAJCWdvdG8gZmFpbDsKIAogCXByaW50aygicXB0aSVkOiBJUlEgJWQgIiwgcXB0aS0+cXB0aV9pZCwgcXB0aS0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCmluZGV4IDRhNzE1NzguLjEwNTNjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwpAQCAtMjM5NSw3ICsyMzk1LDcgQEAKIAlwcm9iZV9lbnQtPnBvcnRfb3BzID0gbXZfcG9ydF9pbmZvW2JvYXJkX2lkeF0ucG9ydF9vcHM7CiAKIAlwcm9iZV9lbnQtPmlycSA9IHBkZXYtPmlycTsKLQlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJcHJvYmVfZW50LT5tbWlvX2Jhc2UgPSBtbWlvX2Jhc2U7CiAJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKaW5kZXggNWNjNDJjNi4uNTZkYTI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCkBAIC0zMSw3ICszMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwppbmRleCBiMmI2ZWQ1Li42NDYzMWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCkBAIC03NDMsNyArNzQzLDcgQEAKIAlwcm9iZV9lbnQtPnBvcnRfb3BzCT0gcGRjX3BvcnRfaW5mb1tib2FyZF9pZHhdLnBvcnRfb3BzOwogCiAgICAgICAgCXByb2JlX2VudC0+aXJxID0gcGRldi0+aXJxOwotICAgICAgIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworICAgICAgIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCXByb2JlX2VudC0+bW1pb19iYXNlID0gbW1pb19iYXNlOwogCiAJcGRjX2F0YV9zZXR1cF9wb3J0KCZwcm9iZV9lbnQtPnBvcnRbMF0sIGJhc2UgKyAweDIwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwppbmRleCA5OGRkYzI1Li5kMzc0YzFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCkBAIC02ODAsNyArNjgwLDcgQEAKIAlwcm9iZV9lbnQtPnBvcnRfb3BzCT0gcXNfcG9ydF9pbmZvW2JvYXJkX2lkeF0ucG9ydF9vcHM7CiAKIAlwcm9iZV9lbnQtPmlycQkJPSBwZGV2LT5pcnE7Ci0JcHJvYmVfZW50LT5pcnFfZmxhZ3MJPSBTQV9TSElSUTsKKwlwcm9iZV9lbnQtPmlycV9mbGFncwk9IElSUUZfU0hBUkVEOwogCXByb2JlX2VudC0+bW1pb19iYXNlCT0gbW1pb19iYXNlOwogCXByb2JlX2VudC0+bl9wb3J0cwk9IFFTX1BPUlRTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCmluZGV4IDUxZDg2ZDcuLjdhYWJiNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCkBAIC02MDgsNyArNjA4LDcgQEAKIAlwcm9iZV9lbnQtPm13ZG1hX21hc2sgPSBzaWxfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm13ZG1hX21hc2s7CiAJcHJvYmVfZW50LT51ZG1hX21hc2sgPSBzaWxfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLnVkbWFfbWFzazsKICAgICAgICAJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7Ci0gICAgICAgCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gU0FfU0hJUlE7CisgICAgICAgCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJcHJvYmVfZW50LT5ob3N0X2ZsYWdzID0gc2lsX3BvcnRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5ob3N0X2ZsYWdzOwogCiAJbW1pb19iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDUsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKaW5kZXggYjVmOGZhOS4uMDdhMWM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCXByb2JlX2VudC0+bl9wb3J0cwk9IFNJTDI0X0ZMQUcyTlBPUlRTKHBpbmZvLT5ob3N0X2ZsYWdzKTsKIAogCXByb2JlX2VudC0+aXJxID0gcGRldi0+aXJxOwotCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gU0FfU0hJUlE7CisJcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAlwcm9iZV9lbnQtPm1taW9fYmFzZSA9IHBvcnRfYmFzZTsKIAlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IGhwcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCmluZGV4IDgwOWQzMzcuLmVlNmI1ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jCkBAIC0zMCw3ICszMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKaW5kZXggNzU2NmMyY2EuLjdkMDg1ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCkBAIC0zNiw3ICszNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTQyOSw3ICs0MjgsNyBAQAogCXByb2JlX2VudC0+cG9ydF9vcHMgPSAmazJfc2F0YV9vcHM7CiAJcHJvYmVfZW50LT5uX3BvcnRzID0gNDsKIAlwcm9iZV9lbnQtPmlycSA9IHBkZXYtPmlycTsKLQlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJcHJvYmVfZW50LT5tbWlvX2Jhc2UgPSBtbWlvX2Jhc2U7CiAKIAkvKiBXZSBkb24ndCBjYXJlIG11Y2ggYWJvdXQgdGhlIFBJTy9VRE1BIG1hc2tzLCBidXQgdGhlIGNvcmUgd29uJ3QgbGlrZSB1cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwppbmRleCA3Zjg2NDQxLi5jY2M4Y2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwpAQCAtMTQzNiw3ICsxNDM2LDcgQEAKIAlwcm9iZV9lbnQtPnBvcnRfb3BzCT0gcGRjX3BvcnRfaW5mb1tib2FyZF9pZHhdLnBvcnRfb3BzOwogCiAgICAgICAgCXByb2JlX2VudC0+aXJxID0gcGRldi0+aXJxOwotICAgICAgIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworICAgICAgIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCXByb2JlX2VudC0+bW1pb19iYXNlID0gbW1pb19iYXNlOwogCiAJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKaW5kZXggNjRmM2MxYS4uMzNjZGI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYwppbmRleCA2N2MzZDI5Li4wM2JhZWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJcHJvYmVfZW50LT5wb3J0X29wcwk9ICZzdmlhX3NhdGFfb3BzOwogCXByb2JlX2VudC0+bl9wb3J0cwk9IE5fUE9SVFM7CiAJcHJvYmVfZW50LT5pcnEJCT0gcGRldi0+aXJxOwotCXByb2JlX2VudC0+aXJxX2ZsYWdzCT0gU0FfU0hJUlE7CisJcHJvYmVfZW50LT5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRDsKIAlwcm9iZV9lbnQtPnBpb19tYXNrCT0gMHgxZjsKIAlwcm9iZV9lbnQtPm13ZG1hX21hc2sJPSAweDA3OwogCXByb2JlX2VudC0+dWRtYV9tYXNrCT0gMHg3ZjsKQEAgLTMzNSwxMCArMzM1LDEwIEBACiAJCWlmICgocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpID09IDApIHx8CiAJCSAgICAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSA8IGJhcl9zaXplc1tpXSkpIHsKIAkJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCi0JCQkJICAgImludmFsaWQgUENJIEJBUiAldSAoc3ogMHglbHgsIHZhbCAweCVseClcbiIsCi0JCQkJICAgaSwKLQkJCSAgICAgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpLAotCQkJICAgICAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpKTsKKwkJCQkiaW52YWxpZCBQQ0kgQkFSICV1IChzeiAweCVsbHgsIHZhbCAweCVsbHgpXG4iLAorCQkJCWksCisJCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpLAorCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkpOwogCQkJcmMgPSAtRU5PREVWOwogCQkJZ290byBlcnJfb3V0X3JlZ2lvbnM7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKaW5kZXggNjE2ZmQ5Ni4uOTE2ZmU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXByb2JlX2VudC0+cG9ydF9vcHMgPSAmdnNjX3NhdGFfb3BzOwogCXByb2JlX2VudC0+bl9wb3J0cyA9IDQ7CiAJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7Ci0JcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwlwcm9iZV9lbnQtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCXByb2JlX2VudC0+bW1pb19iYXNlID0gbW1pb19iYXNlOwogCiAJLyogV2UgZG9uJ3QgY2FyZSBtdWNoIGFib3V0IHRoZSBQSU8vVURNQSBtYXNrcywgYnV0IHRoZSBjb3JlIHdvbid0IGxpa2UgdXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IDVhNWQyYWYuLjljNjNiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtMjQsNyArMjQsNiBAQAogICogICAgICAgIG1vZHVsZSBvcHRpb25zIHRvICJtb2Rwcm9iZSBzY3NpX2RlYnVnIG51bV90Z3RzPTIiIFsyMDAyMTIyMV0KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUxLDE4ICs1MCwyMiBAQAogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgogI2luY2x1ZGUgInNjc2lfZGVidWcuaCIKIAotI2RlZmluZSBTQ1NJX0RFQlVHX1ZFUlNJT04gIjEuNzUiCi1zdGF0aWMgY29uc3QgY2hhciAqIHNjc2lfZGVidWdfdmVyc2lvbl9kYXRlID0gIjIwMDUwMTEzIjsKKyNkZWZpbmUgU0NTSV9ERUJVR19WRVJTSU9OICIxLjc5Igorc3RhdGljIGNvbnN0IGNoYXIgKiBzY3NpX2RlYnVnX3ZlcnNpb25fZGF0ZSA9ICIyMDA2MDYwNCI7CiAKIC8qIEFkZGl0aW9uYWwgU2Vuc2UgQ29kZSAoQVNDKSB1c2VkICovCi0jZGVmaW5lIE5PX0FEREVEX1NFTlNFIDB4MAorI2RlZmluZSBOT19BRERJVElPTkFMX1NFTlNFIDB4MAorI2RlZmluZSBMT0dJQ0FMX1VOSVRfTk9UX1JFQURZIDB4NAogI2RlZmluZSBVTlJFQ09WRVJFRF9SRUFEX0VSUiAweDExCisjZGVmaW5lIFBBUkFNRVRFUl9MSVNUX0xFTkdUSF9FUlIgMHgxYQogI2RlZmluZSBJTlZBTElEX09QQ09ERSAweDIwCiAjZGVmaW5lIEFERFJfT1VUX09GX1JBTkdFIDB4MjEKICNkZWZpbmUgSU5WQUxJRF9GSUVMRF9JTl9DREIgMHgyNAorI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QgMHgyNgogI2RlZmluZSBQT1dFUk9OX1JFU0VUIDB4MjkKICNkZWZpbmUgU0FWSU5HX1BBUkFNU19VTlNVUCAweDM5Ci0jZGVmaW5lIFRIUkVTSEhPTERfRVhDRUVERUQgMHg1ZAorI2RlZmluZSBUSFJFU0hPTERfRVhDRUVERUQgMHg1ZAorI2RlZmluZSBMT1dfUE9XRVJfQ09ORF9PTiAweDVlCiAKICNkZWZpbmUgU0RFQlVHX1RBR0dFRF9RVUVVSU5HIDAgLyogMCB8IE1TR19TSU1QTEVfVEFHIHwgTVNHX09SREVSRURfVEFHICovCiAKQEAgLTgxLDYgKzg0LDggQEAKICNkZWZpbmUgREVGX1NDU0lfTEVWRUwgICA1ICAgIC8qIElOUVVJUlksIGJ5dGUyIFs1LT5TUEMtM10gKi8KICNkZWZpbmUgREVGX1BUWVBFICAgMAogI2RlZmluZSBERUZfRF9TRU5TRSAgIDAKKyNkZWZpbmUgREVGX05PX0xVTl8wICAgMAorI2RlZmluZSBERUZfVklSVFVBTF9HQiAgIDAKIAogLyogYml0IG1hc2sgdmFsdWVzIGZvciBzY3NpX2RlYnVnX29wdHMgKi8KICNkZWZpbmUgU0NTSV9ERUJVR19PUFRfTk9JU0UgICAxCkBAIC0xMDcsNiArMTEyLDcgQEAKIC8qIElmIFJFUE9SVCBMVU5TIGhhcyBsdW5zID49IDI1NiBpdCBjYW4gY2hvb3NlICJmbGF0IHNwYWNlIiAodmFsdWUgMSkKICAqIG9yICJwZXJpcGhlcmFsIGRldmljZSIgYWRkcmVzc2luZyAodmFsdWUgMCkgKi8KICNkZWZpbmUgU0FNMl9MVU5fQUREUkVTU19NRVRIT0QgMAorI2RlZmluZSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMgMHhjMTAxCiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19hZGRfaG9zdCA9IERFRl9OVU1fSE9TVDsKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19kZWxheSA9IERFRl9ERUxBWTsKQEAgLTExOSwxMyArMTI1LDE2IEBACiBzdGF0aWMgaW50IHNjc2lfZGVidWdfc2NzaV9sZXZlbCA9IERFRl9TQ1NJX0xFVkVMOwogc3RhdGljIGludCBzY3NpX2RlYnVnX3B0eXBlID0gREVGX1BUWVBFOyAvKiBTQ1NJIHBlcmlwaGVyYWwgdHlwZSAoMD09ZGlzaykgKi8KIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19kc2Vuc2UgPSBERUZfRF9TRU5TRTsKK3N0YXRpYyBpbnQgc2NzaV9kZWJ1Z19ub19sdW5fMCA9IERFRl9OT19MVU5fMDsKK3N0YXRpYyBpbnQgc2NzaV9kZWJ1Z192aXJ0dWFsX2diID0gREVGX1ZJUlRVQUxfR0I7CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19jbW5kX2NvdW50ID0gMDsKIAogI2RlZmluZSBERVZfUkVBRE9OTFkoVEdUKSAgICAgICgwKQogI2RlZmluZSBERVZfUkVNT1ZFQUJMRShUR1QpICAgICgwKQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZGVidWdfc3RvcmVfc2l6ZTsJLyogaW4gYnl0ZXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2RlYnVnX3N0b3JlX3NpemU7CS8qIGluIGJ5dGVzICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOwogc3RhdGljIHNlY3Rvcl90IHNkZWJ1Z19jYXBhY2l0eTsJLyogaW4gc2VjdG9ycyAqLwogCiAvKiBvbGQgQklPUyBzdHVmZiwga2VybmVsIG1heSBnZXQgcmlkIG9mIHRoZW0gYnV0IHNvbWUgbW9kZSBzZW5zZSBwYWdlcwpAQCAtMTUwLDcgKzE1OSw5IEBACiAJdW5zaWduZWQgaW50IHRhcmdldDsKIAl1bnNpZ25lZCBpbnQgbHVuOwogCXN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGJnX2hvc3Q7CisJdW5zaWduZWQgaW50IHdsdW47CiAJY2hhciByZXNldDsKKwljaGFyIHN0b3BwZWQ7CiAJY2hhciB1c2VkOwogfTsKIApAQCAtMTk0LDExICsyMDUsMTEgQEAKIAkuYmlvc19wYXJhbSA9CQlzY3NpX2RlYnVnX2Jpb3NwYXJhbSwKIAkuY2FuX3F1ZXVlID0JCVNDU0lfREVCVUdfQ0FOUVVFVUUsCiAJLnRoaXNfaWQgPQkJNywKLQkuc2dfdGFibGVzaXplID0JCTY0LAotCS5jbWRfcGVyX2x1biA9CQkzLAotCS5tYXhfc2VjdG9ycyA9CQk0MDk2LAorCS5zZ190YWJsZXNpemUgPQkJMjU2LAorCS5jbWRfcGVyX2x1biA9CQkxNiwKKwkubWF4X3NlY3RvcnMgPQkJMHhmZmZmLAogCS51bmNoZWNrZWRfaXNhX2RtYSA9IAkwLAotCS51c2VfY2x1c3RlcmluZyA9IAlESVNBQkxFX0NMVVNURVJJTkcsCisJLnVzZV9jbHVzdGVyaW5nID0gCUVOQUJMRV9DTFVTVEVSSU5HLAogCS5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCiB9OwogCkBAIC0yMjYsMTkgKzIzNywzMiBAQAogc3RhdGljIGNvbnN0IGludCBjaGVja19jb25kaXRpb25fcmVzdWx0ID0KIAkJKERSSVZFUl9TRU5TRSA8PCAyNCkgfCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN0cmxfbV9wZ1tdID0gezB4YSwgMTAsIDIsIDAsIDAsIDAsIDAsIDAsCisJCQkJICAgIDAsIDAsIDB4MiwgMHg0Yn07CitzdGF0aWMgdW5zaWduZWQgY2hhciBpZWNfbV9wZ1tdID0gezB4MWMsIDB4YSwgMHgwOCwgMCwgMCwgMCwgMCwgMCwKKwkJCSAgICAgICAgICAgMCwgMCwgMHgwLCAweDB9OworCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgcmVzcF9pbnF1aXJ5KHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgaW50IHRhcmdldCwKIAkJCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7CiBzdGF0aWMgaW50IHJlc3BfcmVxdWVzdHMoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LAogCQkJIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7CitzdGF0aWMgaW50IHJlc3Bfc3RhcnRfc3RvcChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAorCQkJICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKIHN0YXRpYyBpbnQgcmVzcF9yZWFkY2FwKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwKIAkJCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCk7Ci1zdGF0aWMgaW50IHJlc3BfbW9kZV9zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQsIGludCB0YXJnZXQsCitzdGF0aWMgaW50IHJlc3BfcmVhZGNhcDE2KHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwKKwkJCSAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbnNlKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCB0YXJnZXQsCiAJCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwotc3RhdGljIGludCByZXNwX3JlYWQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCBpbnQgdXBwZXJfYmxrLCBpbnQgYmxvY2ssCi0JCSAgICAgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKLXN0YXRpYyBpbnQgcmVzcF93cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQsIGludCB1cHBlcl9ibGssIGludCBibG9jaywKLQkJICAgICAgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKK3N0YXRpYyBpbnQgcmVzcF9tb2RlX3NlbGVjdChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLCBpbnQgbXNlbGVjdDYsCisJCQkgICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKK3N0YXRpYyBpbnQgcmVzcF9sb2dfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwKKwkJCSAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKK3N0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKKwkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOworc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKKwkJICAgICAgdW5zaWduZWQgaW50IG51bSwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKIHN0YXRpYyBpbnQgcmVzcF9yZXBvcnRfbHVucyhzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQsCiAJCQkgICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKIHN0YXRpYyBpbnQgZmlsbF9mcm9tX2Rldl9idWZmZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgdW5zaWduZWQgY2hhciAqIGFyciwKQEAgLTI0OSw4ICsyNzMsOCBAQAogc3RhdGljIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZJbmZvUmVnKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYpOwogc3RhdGljIHZvaWQgbWtfc2Vuc2VfYnVmZmVyKHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCwgaW50IGtleSwKIAkJCSAgICBpbnQgYXNjLCBpbnQgYXNxKTsKLXN0YXRpYyBpbnQgY2hlY2tfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LAotCQkgICAgICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKTsKK3N0YXRpYyBpbnQgY2hlY2tfcmVhZGluZXNzKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgaW50IHJlc2V0X29ubHksCisJCQkgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApOwogc3RhdGljIGludCBzY2hlZHVsZV9yZXNwKHN0cnVjdCBzY3NpX2NtbmQgKiBjbW5kLAogCQkJIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCwKIAkJCSBkb25lX2Z1bmN0X3QgZG9uZSwgaW50IHNjc2lfcmVzdWx0LCBpbnQgZGVsdGFfamlmZik7CkBAIC0yNTgsOCArMjgyLDEwIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9hbGxfcXVldWVkKHZvaWQpOwogc3RhdGljIHZvaWQgc3RvcF9hbGxfcXVldWVkKHZvaWQpOwogc3RhdGljIGludCBzdG9wX3F1ZXVlZF9jbW5kKHN0cnVjdCBzY3NpX2NtbmQgKiBjbW5kKTsKLXN0YXRpYyBpbnQgaW5xdWlyeV9ldnBkXzgzKHVuc2lnbmVkIGNoYXIgKiBhcnIsIGludCBkZXZfaWRfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGRldl9pZF9zdHIsIGludCBkZXZfaWRfc3RyX2xlbik7CitzdGF0aWMgaW50IGlucXVpcnlfZXZwZF84Myh1bnNpZ25lZCBjaGFyICogYXJyLCBpbnQgdGFyZ2V0X2Rldl9pZCwKKwkJCSAgIGludCBkZXZfaWRfbnVtLCBjb25zdCBjaGFyICogZGV2X2lkX3N0ciwKKwkJCSAgIGludCBkZXZfaWRfc3RyX2xlbik7CitzdGF0aWMgaW50IGlucXVpcnlfZXZwZF84OCh1bnNpZ25lZCBjaGFyICogYXJyLCBpbnQgdGFyZ2V0X2Rldl9pZCk7CiBzdGF0aWMgdm9pZCBkb19jcmVhdGVfZHJpdmVyZnNfZmlsZXModm9pZCk7CiBzdGF0aWMgdm9pZCBkb19yZW1vdmVfZHJpdmVyZnNfZmlsZXModm9pZCk7CiAKQEAgLTI3NSwxOCArMzAxLDIyIEBACiBpbnQgc2NzaV9kZWJ1Z19xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCBkb25lX2Z1bmN0X3QgZG9uZSkKIHsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSAodW5zaWduZWQgY2hhciAqKSBTQ3BudC0+Y21uZDsKLQlpbnQgYmxvY2ssIHVwcGVyX2JsaywgbnVtLCBrOworCWludCBsZW4sIGssIGo7CisJdW5zaWduZWQgaW50IG51bTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGJhOwogCWludCBlcnJzdHMgPSAwOwotCWludCB0YXJnZXQgPSBzY21kX2lkKFNDcG50KTsKKwlpbnQgdGFyZ2V0ID0gU0NwbnQtPmRldmljZS0+aWQ7CiAJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwID0gTlVMTDsKIAlpbnQgaW5qX3JlY292ZXJlZCA9IDA7CisJaW50IGRlbGF5X292ZXJyaWRlID0gMDsKIAogCWlmIChkb25lID09IE5VTEwpCiAJCXJldHVybiAwOwkvKiBhc3N1bWUgbWlkIGxldmVsIHJlcHJvY2Vzc2luZyBjb21tYW5kICovCiAKKwlTQ3BudC0+cmVzaWQgPSAwOwogCWlmICgoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpICYmIGNtZCkgewogCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBjbWQgIik7Ci0JCWZvciAoayA9IDAsIG51bSA9IFNDcG50LT5jbWRfbGVuOyBrIDwgbnVtOyArK2spCisJCWZvciAoayA9IDAsIGxlbiA9IFNDcG50LT5jbWRfbGVuOyBrIDwgbGVuOyArK2spCiAJCQlwcmludGsoIiUwMnggIiwgKGludCljbWRba10pOwogCQlwcmludGsoIlxuIik7CiAJfQpAQCAtMjk3LDcgKzMyNyw4IEBACiAJCQkJICAgICBESURfTk9fQ09OTkVDVCA8PCAxNiwgMCk7CiAgICAgICAgIH0KIAotCWlmIChTQ3BudC0+ZGV2aWNlLT5sdW4gPj0gc2NzaV9kZWJ1Z19tYXhfbHVucykKKwlpZiAoKFNDcG50LT5kZXZpY2UtPmx1biA+PSBzY3NpX2RlYnVnX21heF9sdW5zKSAmJgorCSAgICAoU0NwbnQtPmRldmljZS0+bHVuICE9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUykpCiAJCXJldHVybiBzY2hlZHVsZV9yZXNwKFNDcG50LCBOVUxMLCBkb25lLAogCQkJCSAgICAgRElEX05PX0NPTk5FQ1QgPDwgMTYsIDApOwogCWRldmlwID0gZGV2SW5mb1JlZyhTQ3BudC0+ZGV2aWNlKTsKQEAgLTMxNiwxMTggKzM0NywxNTAgQEAKIAkJCWlual9yZWNvdmVyZWQgPSAxOyAvKiB0byByZWFkcyBhbmQgd3JpdGVzIGJlbG93ICovCiAgICAgICAgIH0KIAorCWlmIChkZXZpcC0+d2x1bikgeworCQlzd2l0Y2ggKCpjbWQpIHsKKwkJY2FzZSBJTlFVSVJZOgorCQljYXNlIFJFUVVFU1RfU0VOU0U6CisJCWNhc2UgVEVTVF9VTklUX1JFQURZOgorCQljYXNlIFJFUE9SVF9MVU5TOgorCQkJYnJlYWs7ICAvKiBvbmx5IGFsbG93YWJsZSB3bHVuIGNvbW1hbmRzICovCisJCWRlZmF1bHQ6CisJCQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogT3Bjb2RlOiAweCV4ICIKKwkJCQkgICAgICAgIm5vdCBzdXBwb3J0ZWQgZm9yIHdsdW5cbiIsICpjbWQpOworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJCUlOVkFMSURfT1BDT0RFLCAwKTsKKwkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgZGV2aXAsIGRvbmUsIGVycnN0cywKKwkJCQkJICAgICAwKTsKKwkJfQorCX0KKwogCXN3aXRjaCAoKmNtZCkgewogCWNhc2UgSU5RVUlSWTogICAgIC8qIG1hbmRhdG9yeSwgaWdub3JlIHVuaXQgYXR0ZW50aW9uICovCisJCWRlbGF5X292ZXJyaWRlID0gMTsKIAkJZXJyc3RzID0gcmVzcF9pbnF1aXJ5KFNDcG50LCB0YXJnZXQsIGRldmlwKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVFVRVNUX1NFTlNFOgkvKiBtYW5kYXRvcnksIGlnbm9yZSB1bml0IGF0dGVudGlvbiAqLworCQlkZWxheV9vdmVycmlkZSA9IDE7CiAJCWVycnN0cyA9IHJlc3BfcmVxdWVzdHMoU0NwbnQsIGRldmlwKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVpFUk9fVU5JVDoJLyogYWN0dWFsbHkgdGhpcyBpcyBSRVdJTkQgZm9yIFNTQyAqLwogCWNhc2UgU1RBUlRfU1RPUDoKLQkJZXJyc3RzID0gY2hlY2tfcmVzZXQoU0NwbnQsIGRldmlwKTsKKwkJZXJyc3RzID0gcmVzcF9zdGFydF9zdG9wKFNDcG50LCBkZXZpcCk7CiAJCWJyZWFrOwogCWNhc2UgQUxMT1dfTUVESVVNX1JFTU9WQUw6Ci0JCWlmICgoZXJyc3RzID0gY2hlY2tfcmVzZXQoU0NwbnQsIGRldmlwKSkpCisJCWlmICgoZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAxLCBkZXZpcCkpKQogCQkJYnJlYWs7CiAJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKIAkJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IE1lZGl1bSByZW1vdmFsICVzXG4iLAogCQkJICAgICAgICBjbWRbNF0gPyAiaW5oaWJpdGVkIiA6ICJlbmFibGVkIik7CiAJCWJyZWFrOwogCWNhc2UgU0VORF9ESUFHTk9TVElDOiAgICAgLyogbWFuZGF0b3J5ICovCi0JCWVycnN0cyA9IGNoZWNrX3Jlc2V0KFNDcG50LCBkZXZpcCk7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMSwgZGV2aXApOwogCQlicmVhazsKIAljYXNlIFRFU1RfVU5JVF9SRUFEWTogICAgIC8qIG1hbmRhdG9yeSAqLwotCQllcnJzdHMgPSBjaGVja19yZXNldChTQ3BudCwgZGV2aXApOworCQlkZWxheV9vdmVycmlkZSA9IDE7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOwogCQlicmVhazsKICAgICAgICAgY2FzZSBSRVNFUlZFOgotCQllcnJzdHMgPSBjaGVja19yZXNldChTQ3BudCwgZGV2aXApOworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSRVNFUlZFXzEwOgotCQllcnJzdHMgPSBjaGVja19yZXNldChTQ3BudCwgZGV2aXApOworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSRUxFQVNFOgotCQllcnJzdHMgPSBjaGVja19yZXNldChTQ3BudCwgZGV2aXApOworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSRUxFQVNFXzEwOgotCQllcnJzdHMgPSBjaGVja19yZXNldChTQ3BudCwgZGV2aXApOworCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDEsIGRldmlwKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAljYXNlIFJFQURfQ0FQQUNJVFk6CiAJCWVycnN0cyA9IHJlc3BfcmVhZGNhcChTQ3BudCwgZGV2aXApOwogCQlicmVhazsKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0lOOgorCQlpZiAoU0FJX1JFQURfQ0FQQUNJVFlfMTYgIT0gY21kWzFdKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9PUENPREUsIDApOworCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkJCWJyZWFrOworCQl9CisJCWVycnN0cyA9IHJlc3BfcmVhZGNhcDE2KFNDcG50LCBkZXZpcCk7CisJCWJyZWFrOwogCWNhc2UgUkVBRF8xNjoKIAljYXNlIFJFQURfMTI6CiAJY2FzZSBSRUFEXzEwOgogCWNhc2UgUkVBRF82OgotCQlpZiAoKGVycnN0cyA9IGNoZWNrX3Jlc2V0KFNDcG50LCBkZXZpcCkpKQorCQlpZiAoKGVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApKSkKIAkJCWJyZWFrOwotCQl1cHBlcl9ibGsgPSAwOwogCQlpZiAoKCpjbWQpID09IFJFQURfMTYpIHsKLQkJCXVwcGVyX2JsayA9IGNtZFs1XSArIChjbWRbNF0gPDwgOCkgKwotCQkJCSAgICAoY21kWzNdIDw8IDE2KSArIChjbWRbMl0gPDwgMjQpOwotCQkJYmxvY2sgPSBjbWRbOV0gKyAoY21kWzhdIDw8IDgpICsKLQkJCQkoY21kWzddIDw8IDE2KSArIChjbWRbNl0gPDwgMjQpOworCQkJZm9yIChsYmEgPSAwLCBqID0gMDsgaiA8IDg7ICsraikgeworCQkJCWlmIChqID4gMCkKKwkJCQkJbGJhIDw8PSA4OworCQkJCWxiYSArPSBjbWRbMiArIGpdOworCQkJfQogCQkJbnVtID0gY21kWzEzXSArIChjbWRbMTJdIDw8IDgpICsKIAkJCQkoY21kWzExXSA8PCAxNikgKyAoY21kWzEwXSA8PCAyNCk7CiAJCX0gZWxzZSBpZiAoKCpjbWQpID09IFJFQURfMTIpIHsKLQkJCWJsb2NrID0gY21kWzVdICsgKGNtZFs0XSA8PCA4KSArCisJCQlsYmEgPSBjbWRbNV0gKyAoY21kWzRdIDw8IDgpICsKIAkJCQkoY21kWzNdIDw8IDE2KSArIChjbWRbMl0gPDwgMjQpOwogCQkJbnVtID0gY21kWzldICsgKGNtZFs4XSA8PCA4KSArCiAJCQkJKGNtZFs3XSA8PCAxNikgKyAoY21kWzZdIDw8IDI0KTsKIAkJfSBlbHNlIGlmICgoKmNtZCkgPT0gUkVBRF8xMCkgewotCQkJYmxvY2sgPSBjbWRbNV0gKyAoY21kWzRdIDw8IDgpICsKKwkJCWxiYSA9IGNtZFs1XSArIChjbWRbNF0gPDwgOCkgKwogCQkJCShjbWRbM10gPDwgMTYpICsgKGNtZFsyXSA8PCAyNCk7CiAJCQludW0gPSBjbWRbOF0gKyAoY21kWzddIDw8IDgpOwotCQl9IGVsc2UgewotCQkJYmxvY2sgPSBjbWRbM10gKyAoY21kWzJdIDw8IDgpICsKKwkJfSBlbHNlIHsJLyogUkVBRCAoNikgKi8KKwkJCWxiYSA9IGNtZFszXSArIChjbWRbMl0gPDwgOCkgKwogCQkJCSgoY21kWzFdICYgMHgxZikgPDwgMTYpOwotCQkJbnVtID0gY21kWzRdOworCQkJbnVtID0gKDAgPT0gY21kWzRdKSA/IDI1NiA6IGNtZFs0XTsKIAkJfQotCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIHVwcGVyX2JsaywgYmxvY2ssIG51bSwgZGV2aXApOworCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCk7CiAJCWlmIChpbmpfcmVjb3ZlcmVkICYmICgwID09IGVycnN0cykpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgUkVDT1ZFUkVEX0VSUk9SLAotCQkJCQlUSFJFU0hIT0xEX0VYQ0VFREVELCAwKTsKKwkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKIAkJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSRVBPUlRfTFVOUzoJLyogbWFuZGF0b3J5LCBpZ25vcmUgdW5pdCBhdHRlbnRpb24gKi8KKwkJZGVsYXlfb3ZlcnJpZGUgPSAxOwogCQllcnJzdHMgPSByZXNwX3JlcG9ydF9sdW5zKFNDcG50LCBkZXZpcCk7CiAJCWJyZWFrOwogCWNhc2UgVkVSSUZZOgkJLyogMTAgYnl0ZSBTQkMtMiBjb21tYW5kICovCi0JCWVycnN0cyA9IGNoZWNrX3Jlc2V0KFNDcG50LCBkZXZpcCk7CisJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOwogCQlicmVhazsKIAljYXNlIFdSSVRFXzE2OgogCWNhc2UgV1JJVEVfMTI6CiAJY2FzZSBXUklURV8xMDoKIAljYXNlIFdSSVRFXzY6Ci0JCWlmICgoZXJyc3RzID0gY2hlY2tfcmVzZXQoU0NwbnQsIGRldmlwKSkpCisJCWlmICgoZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCkpKQogCQkJYnJlYWs7Ci0JCXVwcGVyX2JsayA9IDA7CiAJCWlmICgoKmNtZCkgPT0gV1JJVEVfMTYpIHsKLQkJCXVwcGVyX2JsayA9IGNtZFs1XSArIChjbWRbNF0gPDwgOCkgKwotCQkJCSAgICAoY21kWzNdIDw8IDE2KSArIChjbWRbMl0gPDwgMjQpOwotCQkJYmxvY2sgPSBjbWRbOV0gKyAoY21kWzhdIDw8IDgpICsKLQkJCQkoY21kWzddIDw8IDE2KSArIChjbWRbNl0gPDwgMjQpOworCQkJZm9yIChsYmEgPSAwLCBqID0gMDsgaiA8IDg7ICsraikgeworCQkJCWlmIChqID4gMCkKKwkJCQkJbGJhIDw8PSA4OworCQkJCWxiYSArPSBjbWRbMiArIGpdOworCQkJfQogCQkJbnVtID0gY21kWzEzXSArIChjbWRbMTJdIDw8IDgpICsKIAkJCQkoY21kWzExXSA8PCAxNikgKyAoY21kWzEwXSA8PCAyNCk7CiAJCX0gZWxzZSBpZiAoKCpjbWQpID09IFdSSVRFXzEyKSB7Ci0JCQlibG9jayA9IGNtZFs1XSArIChjbWRbNF0gPDwgOCkgKworCQkJbGJhID0gY21kWzVdICsgKGNtZFs0XSA8PCA4KSArCiAJCQkJKGNtZFszXSA8PCAxNikgKyAoY21kWzJdIDw8IDI0KTsKIAkJCW51bSA9IGNtZFs5XSArIChjbWRbOF0gPDwgOCkgKwogCQkJCShjbWRbN10gPDwgMTYpICsgKGNtZFs2XSA8PCAyNCk7CiAJCX0gZWxzZSBpZiAoKCpjbWQpID09IFdSSVRFXzEwKSB7Ci0JCQlibG9jayA9IGNtZFs1XSArIChjbWRbNF0gPDwgOCkgKworCQkJbGJhID0gY21kWzVdICsgKGNtZFs0XSA8PCA4KSArCiAJCQkJKGNtZFszXSA8PCAxNikgKyAoY21kWzJdIDw8IDI0KTsKIAkJCW51bSA9IGNtZFs4XSArIChjbWRbN10gPDwgOCk7Ci0JCX0gZWxzZSB7Ci0JCQlibG9jayA9IGNtZFszXSArIChjbWRbMl0gPDwgOCkgKworCQl9IGVsc2UgewkvKiBXUklURSAoNikgKi8KKwkJCWxiYSA9IGNtZFszXSArIChjbWRbMl0gPDwgOCkgKwogCQkJCSgoY21kWzFdICYgMHgxZikgPDwgMTYpOwotCQkJbnVtID0gY21kWzRdOworCQkJbnVtID0gKDAgPT0gY21kWzRdKSA/IDI1NiA6IGNtZFs0XTsKIAkJfQotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCB1cHBlcl9ibGssIGJsb2NrLCBudW0sIGRldmlwKTsKKwkJZXJyc3RzID0gcmVzcF93cml0ZShTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKIAkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCi0JCQkJCVRIUkVTSEhPTERfRVhDRUVERUQsIDApOworCQkJCQlUSFJFU0hPTERfRVhDRUVERUQsIDApOwogCQkJZXJyc3RzID0gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQogCQlicmVhazsKQEAgLTQzNSwyMCArNDk4LDMxIEBACiAJY2FzZSBNT0RFX1NFTlNFXzEwOgogCQllcnJzdHMgPSByZXNwX21vZGVfc2Vuc2UoU0NwbnQsIHRhcmdldCwgZGV2aXApOwogCQlicmVhazsKKwljYXNlIE1PREVfU0VMRUNUOgorCQllcnJzdHMgPSByZXNwX21vZGVfc2VsZWN0KFNDcG50LCAxLCBkZXZpcCk7CisJCWJyZWFrOworCWNhc2UgTU9ERV9TRUxFQ1RfMTA6CisJCWVycnN0cyA9IHJlc3BfbW9kZV9zZWxlY3QoU0NwbnQsIDAsIGRldmlwKTsKKwkJYnJlYWs7CisJY2FzZSBMT0dfU0VOU0U6CisJCWVycnN0cyA9IHJlc3BfbG9nX3NlbnNlKFNDcG50LCBkZXZpcCk7CisJCWJyZWFrOwogCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6Ci0JCWVycnN0cyA9IGNoZWNrX3Jlc2V0KFNDcG50LCBkZXZpcCk7CisJCWRlbGF5X292ZXJyaWRlID0gMTsKKwkJZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKFNDcG50LCAwLCBkZXZpcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKIAkJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IE9wY29kZTogMHgleCBub3QgIgogCQkJICAgICAgICJzdXBwb3J0ZWRcbiIsICpjbWQpOwotCQlpZiAoKGVycnN0cyA9IGNoZWNrX3Jlc2V0KFNDcG50LCBkZXZpcCkpKQorCQlpZiAoKGVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMSwgZGV2aXApKSkKIAkJCWJyZWFrOwkvKiBVbml0IGF0dGVudGlvbiB0YWtlcyBwcmVjZWRlbmNlICovCiAJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX09QQ09ERSwgMCk7CiAJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gc2NoZWR1bGVfcmVzcChTQ3BudCwgZGV2aXAsIGRvbmUsIGVycnN0cywgc2NzaV9kZWJ1Z19kZWxheSk7CisJcmV0dXJuIHNjaGVkdWxlX3Jlc3AoU0NwbnQsIGRldmlwLCBkb25lLCBlcnJzdHMsCisJCQkgICAgIChkZWxheV9vdmVycmlkZSA/IDAgOiBzY3NpX2RlYnVnX2RlbGF5KSk7CiB9CiAKIHN0YXRpYyBpbnQgc2NzaV9kZWJ1Z19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTQ2MCw3ICs1MzQsOCBAQAogCS8qIHJldHVybiAtRU5PVFRZOyAvLyBjb3JyZWN0IHJldHVybiBidXQgdXBzZXRzIGZkaXNrICovCiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50IGNoZWNrX3JlYWRpbmVzcyhzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQsIGludCByZXNldF9vbmx5LAorCQkJICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQogewogCWlmIChkZXZpcC0+cmVzZXQpIHsKIAkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQpAQCAtNDcwLDYgKzU0NSwxNCBAQAogCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFVOSVRfQVRURU5USU9OLCBQT1dFUk9OX1JFU0VULCAwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQorCWlmICgoMCA9PSByZXNldF9vbmx5KSAmJiBkZXZpcC0+c3RvcHBlZCkgeworCQlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCisJCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBSZXBvcnRpbmcgTm90ICIKKwkJCSAgICAgICAicmVhZHk6IGluaXRpYWxpemluZyBjb21tYW5kIHJlcXVpcmVkXG4iKTsKKwkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBOT1RfUkVBRFksIExPR0lDQUxfVU5JVF9OT1RfUkVBRFksCisJCQkJMHgyKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00OTMsNyArNTc2LDEwIEBACiAJCXJlcV9sZW4gPSBzY3AtPnJlcXVlc3RfYnVmZmxlbjsKIAkJYWN0X2xlbiA9IChyZXFfbGVuIDwgYXJyX2xlbikgPyByZXFfbGVuIDogYXJyX2xlbjsKIAkJbWVtY3B5KHNjcC0+cmVxdWVzdF9idWZmZXIsIGFyciwgYWN0X2xlbik7Ci0JCXNjcC0+cmVzaWQgPSByZXFfbGVuIC0gYWN0X2xlbjsKKwkJaWYgKHNjcC0+cmVzaWQpCisJCQlzY3AtPnJlc2lkIC09IGFjdF9sZW47CisJCWVsc2UKKwkJCXNjcC0+cmVzaWQgPSByZXFfbGVuIC0gYWN0X2xlbjsKIAkJcmV0dXJuIDA7CiAJfQogCXNncG50ID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjcC0+cmVxdWVzdF9idWZmZXI7CkBAIC01MTYsNyArNjAyLDEwIEBACiAJCX0KIAkJcmVxX2xlbiArPSBzZ3BudC0+bGVuZ3RoOwogCX0KLQlzY3AtPnJlc2lkID0gcmVxX2xlbiAtIGFjdF9sZW47CisJaWYgKHNjcC0+cmVzaWQpCisJCXNjcC0+cmVzaWQgLT0gYWN0X2xlbjsKKwllbHNlCisJCXNjcC0+cmVzaWQgPSByZXFfbGVuIC0gYWN0X2xlbjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTY3LDEyICs2NTYsMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyICogaW5xX3Byb2R1Y3RfaWQgPSAic2NzaV9kZWJ1ZyAgICAgICI7CiBzdGF0aWMgY29uc3QgY2hhciAqIGlucV9wcm9kdWN0X3JldiA9ICIwMDA0IjsKIAotc3RhdGljIGludCBpbnF1aXJ5X2V2cGRfODModW5zaWduZWQgY2hhciAqIGFyciwgaW50IGRldl9pZF9udW0sCi0JCQkgICBjb25zdCBjaGFyICogZGV2X2lkX3N0ciwgaW50IGRldl9pZF9zdHJfbGVuKQorc3RhdGljIGludCBpbnF1aXJ5X2V2cGRfODModW5zaWduZWQgY2hhciAqIGFyciwgaW50IHRhcmdldF9kZXZfaWQsCisJCQkgICBpbnQgZGV2X2lkX251bSwgY29uc3QgY2hhciAqIGRldl9pZF9zdHIsCisJCQkgICBpbnQgZGV2X2lkX3N0cl9sZW4pCiB7Ci0JaW50IG51bTsKKwlpbnQgbnVtLCBwb3J0X2E7CisJY2hhciBiWzMyXTsKIAotCS8qIFR3byBpZGVudGlmaWNhdGlvbiBkZXNjcmlwdG9yczogKi8KKwlwb3J0X2EgPSB0YXJnZXRfZGV2X2lkICsgMTsKIAkvKiBUMTAgdmVuZG9yIGlkZW50aWZpZXIgZmllbGQgZm9ybWF0IChmYWtlZCkgKi8KIAlhcnJbMF0gPSAweDI7CS8qIEFTQ0lJICovCiAJYXJyWzFdID0gMHgxOwpAQCAtNTgzLDI1ICs2NzQsMjQ2IEBACiAJbnVtID0gOCArIDE2ICsgZGV2X2lkX3N0cl9sZW47CiAJYXJyWzNdID0gbnVtOwogCW51bSArPSA0OwotCS8qIE5BQSBJRUVFIHJlZ2lzdGVyZWQgaWRlbnRpZmllciAoZmFrZWQpICovCi0JYXJyW251bV0gPSAweDE7CS8qIGJpbmFyeSAqLwotCWFycltudW0gKyAxXSA9IDB4MzsKLQlhcnJbbnVtICsgMl0gPSAweDA7Ci0JYXJyW251bSArIDNdID0gMHg4OwotCWFycltudW0gKyA0XSA9IDB4NTE7CS8qIGllZWUgY29tcGFueSBpZD0weDEyMzQ1NiAoZmFrZWQpICovCi0JYXJyW251bSArIDVdID0gMHgyMzsKLQlhcnJbbnVtICsgNl0gPSAweDQ1OwotCWFycltudW0gKyA3XSA9IDB4NjA7Ci0JYXJyW251bSArIDhdID0gKGRldl9pZF9udW0gPj4gMjQpOwotCWFycltudW0gKyA5XSA9IChkZXZfaWRfbnVtID4+IDE2KSAmIDB4ZmY7Ci0JYXJyW251bSArIDEwXSA9IChkZXZfaWRfbnVtID4+IDgpICYgMHhmZjsKLQlhcnJbbnVtICsgMTFdID0gZGV2X2lkX251bSAmIDB4ZmY7Ci0JcmV0dXJuIG51bSArIDEyOworCWlmIChkZXZfaWRfbnVtID49IDApIHsKKwkJLyogTkFBLTUsIExvZ2ljYWwgdW5pdCBpZGVudGlmaWVyIChiaW5hcnkpICovCisJCWFycltudW0rK10gPSAweDE7CS8qIGJpbmFyeSAobm90IG5lY2Vzc2FyaWx5IHNhcykgKi8KKwkJYXJyW251bSsrXSA9IDB4MzsJLyogUElWPTAsIGx1LCBuYWEgKi8KKwkJYXJyW251bSsrXSA9IDB4MDsKKwkJYXJyW251bSsrXSA9IDB4ODsKKwkJYXJyW251bSsrXSA9IDB4NTM7ICAvKiBuYWEtNSBpZWVlIGNvbXBhbnkgaWQ9MHgzMzMzMzMgKGZha2UpICovCisJCWFycltudW0rK10gPSAweDMzOworCQlhcnJbbnVtKytdID0gMHgzMzsKKwkJYXJyW251bSsrXSA9IDB4MzA7CisJCWFycltudW0rK10gPSAoZGV2X2lkX251bSA+PiAyNCk7CisJCWFycltudW0rK10gPSAoZGV2X2lkX251bSA+PiAxNikgJiAweGZmOworCQlhcnJbbnVtKytdID0gKGRldl9pZF9udW0gPj4gOCkgJiAweGZmOworCQlhcnJbbnVtKytdID0gZGV2X2lkX251bSAmIDB4ZmY7CisJCS8qIFRhcmdldCByZWxhdGl2ZSBwb3J0IG51bWJlciAqLworCQlhcnJbbnVtKytdID0gMHg2MTsJLyogcHJvdG89c2FzLCBiaW5hcnkgKi8KKwkJYXJyW251bSsrXSA9IDB4OTQ7CS8qIFBJVj0xLCB0YXJnZXQgcG9ydCwgcmVsIHBvcnQgKi8KKwkJYXJyW251bSsrXSA9IDB4MDsJLyogcmVzZXJ2ZWQgKi8KKwkJYXJyW251bSsrXSA9IDB4NDsJLyogbGVuZ3RoICovCisJCWFycltudW0rK10gPSAweDA7CS8qIHJlc2VydmVkICovCisJCWFycltudW0rK10gPSAweDA7CS8qIHJlc2VydmVkICovCisJCWFycltudW0rK10gPSAweDA7CisJCWFycltudW0rK10gPSAweDE7CS8qIHJlbGF0aXZlIHBvcnQgQSAqLworCX0KKwkvKiBOQUEtNSwgVGFyZ2V0IHBvcnQgaWRlbnRpZmllciAqLworCWFycltudW0rK10gPSAweDYxOwkvKiBwcm90bz1zYXMsIGJpbmFyeSAqLworCWFycltudW0rK10gPSAweDkzOwkvKiBwaXY9MSwgdGFyZ2V0IHBvcnQsIG5hYSAqLworCWFycltudW0rK10gPSAweDA7CisJYXJyW251bSsrXSA9IDB4ODsKKwlhcnJbbnVtKytdID0gMHg1MjsJLyogbmFhLTUsIGNvbXBhbnkgaWQ9MHgyMjIyMjIgKGZha2UpICovCisJYXJyW251bSsrXSA9IDB4MjI7CisJYXJyW251bSsrXSA9IDB4MjI7CisJYXJyW251bSsrXSA9IDB4MjA7CisJYXJyW251bSsrXSA9IChwb3J0X2EgPj4gMjQpOworCWFycltudW0rK10gPSAocG9ydF9hID4+IDE2KSAmIDB4ZmY7CisJYXJyW251bSsrXSA9IChwb3J0X2EgPj4gOCkgJiAweGZmOworCWFycltudW0rK10gPSBwb3J0X2EgJiAweGZmOworCS8qIE5BQS01LCBUYXJnZXQgZGV2aWNlIGlkZW50aWZpZXIgKi8KKwlhcnJbbnVtKytdID0gMHg2MTsJLyogcHJvdG89c2FzLCBiaW5hcnkgKi8KKwlhcnJbbnVtKytdID0gMHhhMzsJLyogcGl2PTEsIHRhcmdldCBkZXZpY2UsIG5hYSAqLworCWFycltudW0rK10gPSAweDA7CisJYXJyW251bSsrXSA9IDB4ODsKKwlhcnJbbnVtKytdID0gMHg1MjsJLyogbmFhLTUsIGNvbXBhbnkgaWQ9MHgyMjIyMjIgKGZha2UpICovCisJYXJyW251bSsrXSA9IDB4MjI7CisJYXJyW251bSsrXSA9IDB4MjI7CisJYXJyW251bSsrXSA9IDB4MjA7CisJYXJyW251bSsrXSA9ICh0YXJnZXRfZGV2X2lkID4+IDI0KTsKKwlhcnJbbnVtKytdID0gKHRhcmdldF9kZXZfaWQgPj4gMTYpICYgMHhmZjsKKwlhcnJbbnVtKytdID0gKHRhcmdldF9kZXZfaWQgPj4gOCkgJiAweGZmOworCWFycltudW0rK10gPSB0YXJnZXRfZGV2X2lkICYgMHhmZjsKKwkvKiBTQ1NJIG5hbWUgc3RyaW5nOiBUYXJnZXQgZGV2aWNlIGlkZW50aWZpZXIgKi8KKwlhcnJbbnVtKytdID0gMHg2MzsJLyogcHJvdG89c2FzLCBVVEYtOCAqLworCWFycltudW0rK10gPSAweGE4OwkvKiBwaXY9MSwgdGFyZ2V0IGRldmljZSwgU0NTSSBuYW1lIHN0cmluZyAqLworCWFycltudW0rK10gPSAweDA7CisJYXJyW251bSsrXSA9IDI0OworCW1lbWNweShhcnIgKyBudW0sICJuYWEuNTIyMjIyMjAiLCAxMik7CisJbnVtICs9IDEyOworCXNucHJpbnRmKGIsIHNpemVvZihiKSwgIiUwOFgiLCB0YXJnZXRfZGV2X2lkKTsKKwltZW1jcHkoYXJyICsgbnVtLCBiLCA4KTsKKwludW0gKz0gODsKKwltZW1zZXQoYXJyICsgbnVtLCAwLCA0KTsKKwludW0gKz0gNDsKKwlyZXR1cm4gbnVtOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHZwZDg0X2RhdGFbXSA9IHsKKy8qIGZyb20gNHRoIGJ5dGUgKi8gMHgyMiwweDIyLDB4MjIsMHgwLDB4YmIsMHgwLAorICAgIDB4MjIsMHgyMiwweDIyLDB4MCwweGJiLDB4MSwKKyAgICAweDIyLDB4MjIsMHgyMiwweDAsMHhiYiwweDIsCit9OworCitzdGF0aWMgaW50IGlucXVpcnlfZXZwZF84NCh1bnNpZ25lZCBjaGFyICogYXJyKQoreworCW1lbWNweShhcnIsIHZwZDg0X2RhdGEsIHNpemVvZih2cGQ4NF9kYXRhKSk7CisJcmV0dXJuIHNpemVvZih2cGQ4NF9kYXRhKTsKK30KKworc3RhdGljIGludCBpbnF1aXJ5X2V2cGRfODUodW5zaWduZWQgY2hhciAqIGFycikKK3sKKwlpbnQgbnVtID0gMDsKKwljb25zdCBjaGFyICogbmExID0gImh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvY29uZmlnIjsKKwljb25zdCBjaGFyICogbmEyID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9sb2ciOworCWludCBwbGVuLCBvbGVuOworCisJYXJyW251bSsrXSA9IDB4MTsJLyogbHUsIHN0b3JhZ2UgY29uZmlnICovCisJYXJyW251bSsrXSA9IDB4MDsJLyogcmVzZXJ2ZWQgKi8KKwlhcnJbbnVtKytdID0gMHgwOworCW9sZW4gPSBzdHJsZW4obmExKTsKKwlwbGVuID0gb2xlbiArIDE7CisJaWYgKHBsZW4gJSA0KQorCQlwbGVuID0gKChwbGVuIC8gNCkgKyAxKSAqIDQ7CisJYXJyW251bSsrXSA9IHBsZW47CS8qIGxlbmd0aCwgbnVsbCB0ZXJtaWFudGVkLCBwYWRkZWQgKi8KKwltZW1jcHkoYXJyICsgbnVtLCBuYTEsIG9sZW4pOworCW1lbXNldChhcnIgKyBudW0gKyBvbGVuLCAwLCBwbGVuIC0gb2xlbik7CisJbnVtICs9IHBsZW47CisKKwlhcnJbbnVtKytdID0gMHg0OwkvKiBsdSwgbG9nZ2luZyAqLworCWFycltudW0rK10gPSAweDA7CS8qIHJlc2VydmVkICovCisJYXJyW251bSsrXSA9IDB4MDsKKwlvbGVuID0gc3RybGVuKG5hMik7CisJcGxlbiA9IG9sZW4gKyAxOworCWlmIChwbGVuICUgNCkKKwkJcGxlbiA9ICgocGxlbiAvIDQpICsgMSkgKiA0OworCWFycltudW0rK10gPSBwbGVuOwkvKiBsZW5ndGgsIG51bGwgdGVybWluYXRlZCwgcGFkZGVkICovCisJbWVtY3B5KGFyciArIG51bSwgbmEyLCBvbGVuKTsKKwltZW1zZXQoYXJyICsgbnVtICsgb2xlbiwgMCwgcGxlbiAtIG9sZW4pOworCW51bSArPSBwbGVuOworCisJcmV0dXJuIG51bTsKK30KKworLyogU0NTSSBwb3J0cyBWUEQgcGFnZSAqLworc3RhdGljIGludCBpbnF1aXJ5X2V2cGRfODgodW5zaWduZWQgY2hhciAqIGFyciwgaW50IHRhcmdldF9kZXZfaWQpCit7CisJaW50IG51bSA9IDA7CisJaW50IHBvcnRfYSwgcG9ydF9iOworCisJcG9ydF9hID0gdGFyZ2V0X2Rldl9pZCArIDE7CisJcG9ydF9iID0gcG9ydF9hICsgMTsKKwlhcnJbbnVtKytdID0gMHgwOwkvKiByZXNlcnZlZCAqLworCWFycltudW0rK10gPSAweDA7CS8qIHJlc2VydmVkICovCisJYXJyW251bSsrXSA9IDB4MDsKKwlhcnJbbnVtKytdID0gMHgxOwkvKiByZWxhdGl2ZSBwb3J0IDEgKHByaW1hcnkpICovCisJbWVtc2V0KGFyciArIG51bSwgMCwgNik7CisJbnVtICs9IDY7CisJYXJyW251bSsrXSA9IDB4MDsKKwlhcnJbbnVtKytdID0gMTI7CS8qIGxlbmd0aCB0cCBkZXNjcmlwdG9yICovCisJLyogbmFhLTUgdGFyZ2V0IHBvcnQgaWRlbnRpZmllciAoQSkgKi8KKwlhcnJbbnVtKytdID0gMHg2MTsJLyogcHJvdG89c2FzLCBiaW5hcnkgKi8KKwlhcnJbbnVtKytdID0gMHg5MzsJLyogUElWPTEsIHRhcmdldCBwb3J0LCBOQUEgKi8KKwlhcnJbbnVtKytdID0gMHgwOwkvKiByZXNlcnZlZCAqLworCWFycltudW0rK10gPSAweDg7CS8qIGxlbmd0aCAqLworCWFycltudW0rK10gPSAweDUyOwkvKiBOQUEtNSwgY29tcGFueV9pZD0weDIyMjIyMiAoZmFrZSkgKi8KKwlhcnJbbnVtKytdID0gMHgyMjsKKwlhcnJbbnVtKytdID0gMHgyMjsKKwlhcnJbbnVtKytdID0gMHgyMDsKKwlhcnJbbnVtKytdID0gKHBvcnRfYSA+PiAyNCk7CisJYXJyW251bSsrXSA9IChwb3J0X2EgPj4gMTYpICYgMHhmZjsKKwlhcnJbbnVtKytdID0gKHBvcnRfYSA+PiA4KSAmIDB4ZmY7CisJYXJyW251bSsrXSA9IHBvcnRfYSAmIDB4ZmY7CisKKwlhcnJbbnVtKytdID0gMHgwOwkvKiByZXNlcnZlZCAqLworCWFycltudW0rK10gPSAweDA7CS8qIHJlc2VydmVkICovCisJYXJyW251bSsrXSA9IDB4MDsKKwlhcnJbbnVtKytdID0gMHgyOwkvKiByZWxhdGl2ZSBwb3J0IDIgKHNlY29uZGFyeSkgKi8KKwltZW1zZXQoYXJyICsgbnVtLCAwLCA2KTsKKwludW0gKz0gNjsKKwlhcnJbbnVtKytdID0gMHgwOworCWFycltudW0rK10gPSAxMjsJLyogbGVuZ3RoIHRwIGRlc2NyaXB0b3IgKi8KKwkvKiBuYWEtNSB0YXJnZXQgcG9ydCBpZGVudGlmaWVyIChCKSAqLworCWFycltudW0rK10gPSAweDYxOwkvKiBwcm90bz1zYXMsIGJpbmFyeSAqLworCWFycltudW0rK10gPSAweDkzOwkvKiBQSVY9MSwgdGFyZ2V0IHBvcnQsIE5BQSAqLworCWFycltudW0rK10gPSAweDA7CS8qIHJlc2VydmVkICovCisJYXJyW251bSsrXSA9IDB4ODsJLyogbGVuZ3RoICovCisJYXJyW251bSsrXSA9IDB4NTI7CS8qIE5BQS01LCBjb21wYW55X2lkPTB4MjIyMjIyIChmYWtlKSAqLworCWFycltudW0rK10gPSAweDIyOworCWFycltudW0rK10gPSAweDIyOworCWFycltudW0rK10gPSAweDIwOworCWFycltudW0rK10gPSAocG9ydF9iID4+IDI0KTsKKwlhcnJbbnVtKytdID0gKHBvcnRfYiA+PiAxNikgJiAweGZmOworCWFycltudW0rK10gPSAocG9ydF9iID4+IDgpICYgMHhmZjsKKwlhcnJbbnVtKytdID0gcG9ydF9iICYgMHhmZjsKKworCXJldHVybiBudW07Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdnBkODlfZGF0YVtdID0geworLyogZnJvbSA0dGggYnl0ZSAqLyAwLDAsMCwwLAorJ2wnLCdpJywnbicsJ3UnLCd4JywnICcsJyAnLCcgJywKKydTJywnQScsJ1QnLCcgJywncycsJ2MnLCdzJywnaScsJ18nLCdkJywnZScsJ2InLCd1JywnZycsJyAnLCcgJywKKycxJywnMicsJzMnLCc0JywKKzB4MzQsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwKKzB4ZWMsMCwwLDAsCisweDVhLDB4YywweGZmLDB4M2YsMHgzNywweGM4LDB4MTAsMCwwLDAsMCwwLDB4M2YsMCwwLDAsCiswLDAsMCwwLDB4NTgsMHg1OCwweDU4LDB4NTgsMHg1OCwweDU4LDB4NTgsMHg1OCwweDIwLDB4MjAsMHgyMCwweDIwLAorMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDAsMCwwLDB4NDAsMHg0LDAsMHgyZSwweDMzLAorMHgzOCwweDMxLDB4MjAsMHgyMCwweDIwLDB4MjAsMHg1NCwweDUzLDB4MzgsMHgzMywweDMwLDB4MzAsMHgzMywweDMxLAorMHg1MywweDQxLAorMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLAorMHgyMCwweDIwLAorMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLAorMHgxMCwweDgwLAorMCwwLDAsMHgyZiwwLDAsMCwweDIsMCwweDIsMHg3LDAsMHhmZiwweGZmLDB4MSwwLAorMHgzZiwwLDB4YzEsMHhmZiwweDNlLDAsMHgxMCwweDEsMHhiMCwweGY4LDB4NTAsMHg5LDAsMCwweDcsMCwKKzB4MywwLDB4NzgsMCwweDc4LDAsMHhmMCwwLDB4NzgsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwweDIsMCwwLDAsMCwwLDAsMCwKKzB4N2UsMCwweDFiLDAsMHg2YiwweDM0LDB4MSwweDdkLDB4MywweDQwLDB4NjksMHgzNCwweDEsMHgzYywweDMsMHg0MCwKKzB4N2YsMHg0MCwwLDAsMCwwLDB4ZmUsMHhmZSwwLDAsMCwwLDAsMHhmZSwwLDAsCiswLDAsMCwwLDAsMCwwLDAsMHhiMCwweGY4LDB4NTAsMHg5LDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisweDEsMCwweGIwLDB4ZjgsMHg1MCwweDksMHhiMCwweGY4LDB4NTAsMHg5LDB4MjAsMHgyMCwweDIsMCwweGI2LDB4NDIsCiswLDB4ODAsMHg4YSwwLDB4NiwweDNjLDB4YSwweDNjLDB4ZmYsMHhmZiwweGM2LDB4NywwLDB4MSwwLDB4OCwKKzB4ZjAsMHhmLDAsMHgxMCwweDIsMCwweDMwLDAsMCwwLDAsMCwwLDAsMHg2LDB4ZmUsCiswLDAsMHgyLDAsMHg1MCwwLDB4OGEsMCwweDRmLDB4OTUsMCwwLDB4MjEsMCwweGIsMCwKKzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB4YTUsMHg1MSwKK307CisKK3N0YXRpYyBpbnQgaW5xdWlyeV9ldnBkXzg5KHVuc2lnbmVkIGNoYXIgKiBhcnIpCit7CisJbWVtY3B5KGFyciwgdnBkODlfZGF0YSwgc2l6ZW9mKHZwZDg5X2RhdGEpKTsKKwlyZXR1cm4gc2l6ZW9mKHZwZDg5X2RhdGEpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHZwZGIwX2RhdGFbXSA9IHsKKwkvKiBmcm9tIDR0aCBieXRlICovIDAsMCwwLDQsCisJMCwwLDB4NCwwLAorCTAsMCwwLDY0LAorfTsKKworc3RhdGljIGludCBpbnF1aXJ5X2V2cGRfYjAodW5zaWduZWQgY2hhciAqIGFycikKK3sKKwltZW1jcHkoYXJyLCB2cGRiMF9kYXRhLCBzaXplb2YodnBkYjBfZGF0YSkpOworCWlmIChzZGVidWdfc3RvcmVfc2VjdG9ycyA+IDB4NDAwKSB7CisJCWFycls0XSA9IChzZGVidWdfc3RvcmVfc2VjdG9ycyA+PiAyNCkgJiAweGZmOworCQlhcnJbNV0gPSAoc2RlYnVnX3N0b3JlX3NlY3RvcnMgPj4gMTYpICYgMHhmZjsKKwkJYXJyWzZdID0gKHNkZWJ1Z19zdG9yZV9zZWN0b3JzID4+IDgpICYgMHhmZjsKKwkJYXJyWzddID0gc2RlYnVnX3N0b3JlX3NlY3RvcnMgJiAweGZmOworCX0KKwlyZXR1cm4gc2l6ZW9mKHZwZGIwX2RhdGEpOwogfQogCiAKICNkZWZpbmUgU0RFQlVHX0xPTkdfSU5RX1NaIDk2Ci0jZGVmaW5lIFNERUJVR19NQVhfSU5RX0FSUl9TWiAxMjgKKyNkZWZpbmUgU0RFQlVHX01BWF9JTlFfQVJSX1NaIDU4NAogCiBzdGF0aWMgaW50IHJlc3BfaW5xdWlyeShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLCBpbnQgdGFyZ2V0LAogCQkJc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQpAQCAtNjA5LDY0ICs5MjEsMTEzIEBACiAJdW5zaWduZWQgY2hhciBwcV9wZHQ7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX01BWF9JTlFfQVJSX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSAodW5zaWduZWQgY2hhciAqKXNjcC0+Y21uZDsKLQlpbnQgYWxsb2NfbGVuOworCWludCBhbGxvY19sZW4sIG47CiAKIAlhbGxvY19sZW4gPSAoY21kWzNdIDw8IDgpICsgY21kWzRdOwogCW1lbXNldChhcnIsIDAsIFNERUJVR19NQVhfSU5RX0FSUl9TWik7Ci0JcHFfcGR0ID0gKHNjc2lfZGVidWdfcHR5cGUgJiAweDFmKTsKKwlpZiAoZGV2aXAtPndsdW4pCisJCXBxX3BkdCA9IDB4MWU7CS8qIHByZXNlbnQsIHdsdW4gKi8KKwllbHNlIGlmIChzY3NpX2RlYnVnX25vX2x1bl8wICYmICgwID09IGRldmlwLT5sdW4pKQorCQlwcV9wZHQgPSAweDdmOwkvKiBub3QgcHJlc2VudCwgbm8gZGV2aWNlIHR5cGUgKi8KKwllbHNlCisJCXBxX3BkdCA9IChzY3NpX2RlYnVnX3B0eXBlICYgMHgxZik7CiAJYXJyWzBdID0gcHFfcGR0OwogCWlmICgweDIgJiBjbWRbMV0pIHsgIC8qIENNRERUIGJpdCBzZXQgKi8KIAkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsIElOVkFMSURfRklFTERfSU5fQ0RCLAogCQkJICAgICAgIAkwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfSBlbHNlIGlmICgweDEgJiBjbWRbMV0pIHsgIC8qIEVWUEQgYml0IHNldCAqLwotCQlpbnQgZGV2X2lkX251bSwgbGVuOwotCQljaGFyIGRldl9pZF9zdHJbNl07CisJCWludCBsdV9pZF9udW0sIHRhcmdldF9kZXZfaWQsIGxlbjsKKwkJY2hhciBsdV9pZF9zdHJbNl07CisJCWludCBob3N0X25vID0gZGV2aXAtPnNkYmdfaG9zdC0+c2hvc3QtPmhvc3Rfbm87CiAJCQotCQlkZXZfaWRfbnVtID0gKChkZXZpcC0+c2RiZ19ob3N0LT5zaG9zdC0+aG9zdF9ubyArIDEpICogMjAwMCkgKwotCQkJICAgICAoZGV2aXAtPnRhcmdldCAqIDEwMDApICsgZGV2aXAtPmx1bjsKLQkJbGVuID0gc2NucHJpbnRmKGRldl9pZF9zdHIsIDYsICIlZCIsIGRldl9pZF9udW0pOworCQlsdV9pZF9udW0gPSBkZXZpcC0+d2x1biA/IC0xIDogKCgoaG9zdF9ubyArIDEpICogMjAwMCkgKworCQkJICAgIChkZXZpcC0+dGFyZ2V0ICogMTAwMCkgKyBkZXZpcC0+bHVuKTsKKwkJdGFyZ2V0X2Rldl9pZCA9ICgoaG9zdF9ubyArIDEpICogMjAwMCkgKworCQkJCSAoZGV2aXAtPnRhcmdldCAqIDEwMDApIC0gMzsKKwkJbGVuID0gc2NucHJpbnRmKGx1X2lkX3N0ciwgNiwgIiVkIiwgbHVfaWRfbnVtKTsKIAkJaWYgKDAgPT0gY21kWzJdKSB7IC8qIHN1cHBvcnRlZCB2aXRhbCBwcm9kdWN0IGRhdGEgcGFnZXMgKi8KLQkJCWFyclszXSA9IDM7Ci0JCQlhcnJbNF0gPSAweDA7IC8qIHRoaXMgcGFnZSAqLwotCQkJYXJyWzVdID0gMHg4MDsgLyogdW5pdCBzZXJpYWwgbnVtYmVyICovCi0JCQlhcnJbNl0gPSAweDgzOyAvKiBkZXZpY2UgaWRlbnRpZmljYXRpb24gKi8KKwkJCWFyclsxXSA9IGNtZFsyXTsJLypzYW5pdHkgKi8KKwkJCW4gPSA0OworCQkJYXJyW24rK10gPSAweDA7ICAgLyogdGhpcyBwYWdlICovCisJCQlhcnJbbisrXSA9IDB4ODA7ICAvKiB1bml0IHNlcmlhbCBudW1iZXIgKi8KKwkJCWFycltuKytdID0gMHg4MzsgIC8qIGRldmljZSBpZGVudGlmaWNhdGlvbiAqLworCQkJYXJyW24rK10gPSAweDg0OyAgLyogc29mdHdhcmUgaW50ZXJmYWNlIGlkZW50LiAqLworCQkJYXJyW24rK10gPSAweDg1OyAgLyogbWFuYWdlbWVudCBuZXR3b3JrIGFkZHJlc3NlcyAqLworCQkJYXJyW24rK10gPSAweDg2OyAgLyogZXh0ZW5kZWQgaW5xdWlyeSAqLworCQkJYXJyW24rK10gPSAweDg3OyAgLyogbW9kZSBwYWdlIHBvbGljeSAqLworCQkJYXJyW24rK10gPSAweDg4OyAgLyogU0NTSSBwb3J0cyAqLworCQkJYXJyW24rK10gPSAweDg5OyAgLyogQVRBIGluZm9ybWF0aW9uICovCisJCQlhcnJbbisrXSA9IDB4YjA7ICAvKiBCbG9jayBsaW1pdHMgKFNCQykgKi8KKwkJCWFyclszXSA9IG4gLSA0OwkgIC8qIG51bWJlciBvZiBzdXBwb3J0ZWQgVlBEIHBhZ2VzICovCiAJCX0gZWxzZSBpZiAoMHg4MCA9PSBjbWRbMl0pIHsgLyogdW5pdCBzZXJpYWwgbnVtYmVyICovCi0JCQlhcnJbMV0gPSAweDgwOworCQkJYXJyWzFdID0gY21kWzJdOwkvKnNhbml0eSAqLwogCQkJYXJyWzNdID0gbGVuOwotCQkJbWVtY3B5KCZhcnJbNF0sIGRldl9pZF9zdHIsIGxlbik7CisJCQltZW1jcHkoJmFycls0XSwgbHVfaWRfc3RyLCBsZW4pOwogCQl9IGVsc2UgaWYgKDB4ODMgPT0gY21kWzJdKSB7IC8qIGRldmljZSBpZGVudGlmaWNhdGlvbiAqLwotCQkJYXJyWzFdID0gMHg4MzsKLQkJCWFyclszXSA9IGlucXVpcnlfZXZwZF84MygmYXJyWzRdLCBkZXZfaWRfbnVtLAotCQkJCQkJIGRldl9pZF9zdHIsIGxlbik7CisJCQlhcnJbMV0gPSBjbWRbMl07CS8qc2FuaXR5ICovCisJCQlhcnJbM10gPSBpbnF1aXJ5X2V2cGRfODMoJmFycls0XSwgdGFyZ2V0X2Rldl9pZCwKKwkJCQkJCSBsdV9pZF9udW0sIGx1X2lkX3N0ciwgbGVuKTsKKwkJfSBlbHNlIGlmICgweDg0ID09IGNtZFsyXSkgeyAvKiBTb2Z0d2FyZSBpbnRlcmZhY2UgaWRlbnQuICovCisJCQlhcnJbMV0gPSBjbWRbMl07CS8qc2FuaXR5ICovCisJCQlhcnJbM10gPSBpbnF1aXJ5X2V2cGRfODQoJmFycls0XSk7CisJCX0gZWxzZSBpZiAoMHg4NSA9PSBjbWRbMl0pIHsgLyogTWFuYWdlbWVudCBuZXR3b3JrIGFkZHJlc3NlcyAqLworCQkJYXJyWzFdID0gY21kWzJdOwkvKnNhbml0eSAqLworCQkJYXJyWzNdID0gaW5xdWlyeV9ldnBkXzg1KCZhcnJbNF0pOworCQl9IGVsc2UgaWYgKDB4ODYgPT0gY21kWzJdKSB7IC8qIGV4dGVuZGVkIGlucXVpcnkgKi8KKwkJCWFyclsxXSA9IGNtZFsyXTsJLypzYW5pdHkgKi8KKwkJCWFyclszXSA9IDB4M2M7CS8qIG51bWJlciBvZiBmb2xsb3dpbmcgZW50cmllcyAqLworCQkJYXJyWzRdID0gMHgwOyAgIC8qIG5vIHByb3RlY3Rpb24gc3R1ZmYgKi8KKwkJCWFycls1XSA9IDB4NzsgICAvKiBoZWFkIG9mIHEsIG9yZGVyZWQgKyBzaW1wbGUgcSdzICovCisJCX0gZWxzZSBpZiAoMHg4NyA9PSBjbWRbMl0pIHsgLyogbW9kZSBwYWdlIHBvbGljeSAqLworCQkJYXJyWzFdID0gY21kWzJdOwkvKnNhbml0eSAqLworCQkJYXJyWzNdID0gMHg4OwkvKiBudW1iZXIgb2YgZm9sbG93aW5nIGVudHJpZXMgKi8KKwkJCWFycls0XSA9IDB4MjsJLyogZGlzY29ubmVjdC1yZWNvbm5lY3QgbXAgKi8KKwkJCWFycls2XSA9IDB4ODA7CS8qIG1sdXMsIHNoYXJlZCAqLworCQkJYXJyWzhdID0gMHgxODsJIC8qIHByb3RvY29sIHNwZWNpZmljIGx1ICovCisJCQlhcnJbMTBdID0gMHg4MjsJIC8qIG1sdXMsIHBlciBpbml0aWF0b3IgcG9ydCAqLworCQl9IGVsc2UgaWYgKDB4ODggPT0gY21kWzJdKSB7IC8qIFNDU0kgUG9ydHMgKi8KKwkJCWFyclsxXSA9IGNtZFsyXTsJLypzYW5pdHkgKi8KKwkJCWFyclszXSA9IGlucXVpcnlfZXZwZF84OCgmYXJyWzRdLCB0YXJnZXRfZGV2X2lkKTsKKwkJfSBlbHNlIGlmICgweDg5ID09IGNtZFsyXSkgeyAvKiBBVEEgaW5mb3JtYXRpb24gKi8KKwkJCWFyclsxXSA9IGNtZFsyXTsgICAgICAgIC8qc2FuaXR5ICovCisJCQluID0gaW5xdWlyeV9ldnBkXzg5KCZhcnJbNF0pOworCQkJYXJyWzJdID0gKG4gPj4gOCk7CisJCQlhcnJbM10gPSAobiAmIDB4ZmYpOworCQl9IGVsc2UgaWYgKDB4YjAgPT0gY21kWzJdKSB7IC8qIEJsb2NrIGxpbWl0cyAoU0JDKSAqLworCQkJYXJyWzFdID0gY21kWzJdOyAgICAgICAgLypzYW5pdHkgKi8KKwkJCWFyclszXSA9IGlucXVpcnlfZXZwZF9iMCgmYXJyWzRdKTsKIAkJfSBlbHNlIHsKIAkJCS8qIElsbGVnYWwgcmVxdWVzdCwgaW52YWxpZCBmaWVsZCBpbiBjZGIgKi8KIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAogCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CiAJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKIAkJfQorCQlsZW4gPSBtaW4oKChhcnJbMl0gPDwgOCkgKyBhcnJbM10pICsgNCwgYWxsb2NfbGVuKTsKIAkJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLAotCQkJICAgIG1pbihhbGxvY19sZW4sIFNERUJVR19NQVhfSU5RX0FSUl9TWikpOworCQkJICAgIG1pbihsZW4sIFNERUJVR19NQVhfSU5RX0FSUl9TWikpOwogCX0KIAkvKiBkcm9wcyB0aHJvdWdoIGhlcmUgZm9yIGEgc3RhbmRhcmQgaW5xdWlyeSAqLwogCWFyclsxXSA9IERFVl9SRU1PVkVBQkxFKHRhcmdldCkgPyAweDgwIDogMDsJLyogUmVtb3ZhYmxlIGRpc2sgKi8KIAlhcnJbMl0gPSBzY3NpX2RlYnVnX3Njc2lfbGV2ZWw7CiAJYXJyWzNdID0gMjsgICAgLyogcmVzcG9uc2VfZGF0YV9mb3JtYXQ9PTIgKi8KIAlhcnJbNF0gPSBTREVCVUdfTE9OR19JTlFfU1ogLSA1OwotCWFycls2XSA9IDB4MTsgLyogY2xhaW06IEFERFIxNiAqLworCWFycls2XSA9IDB4MTA7IC8qIGNsYWltOiBNdWx0aVAgKi8KIAkvKiBhcnJbNl0gfD0gMHg0MDsgLi4uIGNsYWltOiBFbmNTZXJ2IChlbmNsb3N1cmUgc2VydmljZXMpICovCi0JYXJyWzddID0gMHgzYTsgLyogY2xhaW06IFdCVVMxNiwgU1lOQywgTElOS0VEICsgQ01EUVVFICovCisJYXJyWzddID0gMHhhOyAvKiBjbGFpbTogTElOS0VEICsgQ01EUVVFICovCiAJbWVtY3B5KCZhcnJbOF0sIGlucV92ZW5kb3JfaWQsIDgpOwogCW1lbWNweSgmYXJyWzE2XSwgaW5xX3Byb2R1Y3RfaWQsIDE2KTsKIAltZW1jcHkoJmFyclszMl0sIGlucV9wcm9kdWN0X3JldiwgNCk7CiAJLyogdmVyc2lvbiBkZXNjcmlwdG9ycyAoMiBieXRlcyBlYWNoKSBmb2xsb3cgKi8KLQlhcnJbNThdID0gMHgwOyBhcnJbNTldID0gMHg0MDsgLyogU0FNLTIgKi8KLQlhcnJbNjBdID0gMHgzOyBhcnJbNjFdID0gMHgwOyAgLyogU1BDLTMgKi8KKwlhcnJbNThdID0gMHgwOyBhcnJbNTldID0gMHg3NzsgLyogU0FNLTMgQU5TSSAqLworCWFycls2MF0gPSAweDM7IGFycls2MV0gPSAweDE0OyAgLyogU1BDLTMgQU5TSSAqLworCW4gPSA2MjsKIAlpZiAoc2NzaV9kZWJ1Z19wdHlwZSA9PSAwKSB7Ci0JCWFycls2Ml0gPSAweDE7IGFycls2M10gPSAweDgwOyAvKiBTQkMgKi8KKwkJYXJyW24rK10gPSAweDM7IGFycltuKytdID0gMHgzZDsgLyogU0JDLTIgQU5TSSAqLwogCX0gZWxzZSBpZiAoc2NzaV9kZWJ1Z19wdHlwZSA9PSAxKSB7Ci0JCWFycls2Ml0gPSAweDI7IGFycls2M10gPSAweDAwOyAvKiBTU0MgKi8KKwkJYXJyW24rK10gPSAweDM7IGFycltuKytdID0gMHg2MDsgLyogU1NDLTIgbm8gdmVyc2lvbiAqLwogCX0KKwlhcnJbbisrXSA9IDB4YzsgYXJyW24rK10gPSAweGY7ICAvKiBTQVMtMS4xIHJldiAxMCAqLwogCXJldHVybiBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwKIAkJCSAgICBtaW4oYWxsb2NfbGVuLCBTREVCVUdfTE9OR19JTlFfU1opKTsKIH0KQEAgLTY3Nyw0NiArMTAzOCwxNDEgQEAKIAl1bnNpZ25lZCBjaGFyICogc2J1ZmY7CiAJdW5zaWduZWQgY2hhciAqY21kID0gKHVuc2lnbmVkIGNoYXIgKilzY3AtPmNtbmQ7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX1NFTlNFX0xFTl07CisJaW50IHdhbnRfZHNlbnNlOwogCWludCBsZW4gPSAxODsKIAotCW1lbXNldChhcnIsIDAsIFNERUJVR19TRU5TRV9MRU4pOworCW1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKIAlpZiAoZGV2aXAtPnJlc2V0ID09IDEpCi0JCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgMCwgTk9fQURERURfU0VOU0UsIDApOworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIDAsIE5PX0FERElUSU9OQUxfU0VOU0UsIDApOworCXdhbnRfZHNlbnNlID0gISEoY21kWzFdICYgMSkgfHwgc2NzaV9kZWJ1Z19kc2Vuc2U7CiAJc2J1ZmYgPSBkZXZpcC0+c2Vuc2VfYnVmZjsKLQlpZiAoKGNtZFsxXSAmIDEpICYmICghIHNjc2lfZGVidWdfZHNlbnNlKSkgewotCQkvKiBERVNDIGJpdCBzZXQgYW5kIHNlbnNlX2J1ZmYgaW4gZml4ZWQgZm9ybWF0ICovCi0JCWFyclswXSA9IDB4NzI7Ci0JCWFyclsxXSA9IHNidWZmWzJdOyAgICAgLyogc2Vuc2Uga2V5ICovCi0JCWFyclsyXSA9IHNidWZmWzEyXTsgICAgLyogYXNjICovCi0JCWFyclszXSA9IHNidWZmWzEzXTsgICAgLyogYXNjcSAqLwotCQlsZW4gPSA4OwotCX0gZWxzZQorCWlmICgoaWVjX21fcGdbMl0gJiAweDQpICYmICg2ID09IChpZWNfbV9wZ1szXSAmIDB4ZikpKSB7CisJCWlmICh3YW50X2RzZW5zZSkgeworCQkJYXJyWzBdID0gMHg3MjsKKwkJCWFyclsxXSA9IDB4MDsJCS8qIE5PX1NFTlNFIGluIHNlbnNlX2tleSAqLworCQkJYXJyWzJdID0gVEhSRVNIT0xEX0VYQ0VFREVEOworCQkJYXJyWzNdID0gMHhmZjsJCS8qIFRFU1Qgc2V0IGFuZCBNUklFPT02ICovCisJCX0gZWxzZSB7CisJCQlhcnJbMF0gPSAweDcwOworCQkJYXJyWzJdID0gMHgwOwkJLyogTk9fU0VOU0UgaW4gc2Vuc2Vfa2V5ICovCisJCQlhcnJbN10gPSAweGE7ICAgCS8qIDE4IGJ5dGUgc2Vuc2UgYnVmZmVyICovCisJCQlhcnJbMTJdID0gVEhSRVNIT0xEX0VYQ0VFREVEOworCQkJYXJyWzEzXSA9IDB4ZmY7CQkvKiBURVNUIHNldCBhbmQgTVJJRT09NiAqLworCQl9CisJfSBlbHNlIGlmIChkZXZpcC0+c3RvcHBlZCkgeworCQlpZiAod2FudF9kc2Vuc2UpIHsKKwkJCWFyclswXSA9IDB4NzI7CisJCQlhcnJbMV0gPSAweDA7CQkvKiBOT19TRU5TRSBpbiBzZW5zZV9rZXkgKi8KKwkJCWFyclsyXSA9IExPV19QT1dFUl9DT05EX09OOworCQkJYXJyWzNdID0gMHgwOwkJLyogVEVTVCBzZXQgYW5kIE1SSUU9PTYgKi8KKwkJfSBlbHNlIHsKKwkJCWFyclswXSA9IDB4NzA7CisJCQlhcnJbMl0gPSAweDA7CQkvKiBOT19TRU5TRSBpbiBzZW5zZV9rZXkgKi8KKwkJCWFycls3XSA9IDB4YTsgICAJLyogMTggYnl0ZSBzZW5zZSBidWZmZXIgKi8KKwkJCWFyclsxMl0gPSBMT1dfUE9XRVJfQ09ORF9PTjsKKwkJCWFyclsxM10gPSAweDA7CQkvKiBURVNUIHNldCBhbmQgTVJJRT09NiAqLworCQl9CisJfSBlbHNlIHsKIAkJbWVtY3B5KGFyciwgc2J1ZmYsIFNERUJVR19TRU5TRV9MRU4pOwotCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgMCwgTk9fQURERURfU0VOU0UsIDApOworCQlpZiAoKGNtZFsxXSAmIDEpICYmICghIHNjc2lfZGVidWdfZHNlbnNlKSkgeworCQkJLyogREVTQyBiaXQgc2V0IGFuZCBzZW5zZV9idWZmIGluIGZpeGVkIGZvcm1hdCAqLworCQkJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOworCQkJYXJyWzBdID0gMHg3MjsKKwkJCWFyclsxXSA9IHNidWZmWzJdOyAgICAgLyogc2Vuc2Uga2V5ICovCisJCQlhcnJbMl0gPSBzYnVmZlsxMl07ICAgIC8qIGFzYyAqLworCQkJYXJyWzNdID0gc2J1ZmZbMTNdOyAgICAvKiBhc2NxICovCisJCQlsZW4gPSA4OworCQl9CisJfQorCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgMCwgTk9fQURESVRJT05BTF9TRU5TRSwgMCk7CiAJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLCBsZW4pOwogfQogCitzdGF0aWMgaW50IHJlc3Bfc3RhcnRfc3RvcChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAorCQkJICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQoreworCXVuc2lnbmVkIGNoYXIgKmNtZCA9ICh1bnNpZ25lZCBjaGFyICopc2NwLT5jbW5kOworCWludCBwb3dlcl9jb25kLCBlcnJzdHMsIHN0YXJ0OworCisJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCAxLCBkZXZpcCkpKQorCQlyZXR1cm4gZXJyc3RzOworCXBvd2VyX2NvbmQgPSAoY21kWzRdICYgMHhmMCkgPj4gNDsKKwlpZiAocG93ZXJfY29uZCkgeworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCisJCQkgICAgICAgCTApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJc3RhcnQgPSBjbWRbNF0gJiAxOworCWlmIChzdGFydCA9PSBkZXZpcC0+c3RvcHBlZCkKKwkJZGV2aXAtPnN0b3BwZWQgPSAhc3RhcnQ7CisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgU0RFQlVHX1JFQURDQVBfQVJSX1NaIDgKIHN0YXRpYyBpbnQgcmVzcF9yZWFkY2FwKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsCiAJCQlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX1JFQURDQVBfQVJSX1NaXTsKLQl1bnNpZ25lZCBsb25nIGNhcGFjOworCXVuc2lnbmVkIGludCBjYXBhYzsKIAlpbnQgZXJyc3RzOwogCi0JaWYgKChlcnJzdHMgPSBjaGVja19yZXNldChzY3AsIGRldmlwKSkpCisJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCAxLCBkZXZpcCkpKQogCQlyZXR1cm4gZXJyc3RzOworCS8qIGZvbGxvd2luZyBqdXN0IGluIGNhc2UgdmlydHVhbF9nYiBjaGFuZ2VkICovCisJaWYgKHNjc2lfZGVidWdfdmlydHVhbF9nYiA+IDApIHsKKwkJc2RlYnVnX2NhcGFjaXR5ID0gMjA0OCAqIDEwMjQ7CisJCXNkZWJ1Z19jYXBhY2l0eSAqPSBzY3NpX2RlYnVnX3ZpcnR1YWxfZ2I7CisJfSBlbHNlCisJCXNkZWJ1Z19jYXBhY2l0eSA9IHNkZWJ1Z19zdG9yZV9zZWN0b3JzOwogCW1lbXNldChhcnIsIDAsIFNERUJVR19SRUFEQ0FQX0FSUl9TWik7Ci0JY2FwYWMgPSAodW5zaWduZWQgbG9uZylzZGVidWdfY2FwYWNpdHkgLSAxOwotCWFyclswXSA9IChjYXBhYyA+PiAyNCk7Ci0JYXJyWzFdID0gKGNhcGFjID4+IDE2KSAmIDB4ZmY7Ci0JYXJyWzJdID0gKGNhcGFjID4+IDgpICYgMHhmZjsKLQlhcnJbM10gPSBjYXBhYyAmIDB4ZmY7CisJaWYgKHNkZWJ1Z19jYXBhY2l0eSA8IDB4ZmZmZmZmZmYpIHsKKwkJY2FwYWMgPSAodW5zaWduZWQgaW50KXNkZWJ1Z19jYXBhY2l0eSAtIDE7CisJCWFyclswXSA9IChjYXBhYyA+PiAyNCk7CisJCWFyclsxXSA9IChjYXBhYyA+PiAxNikgJiAweGZmOworCQlhcnJbMl0gPSAoY2FwYWMgPj4gOCkgJiAweGZmOworCQlhcnJbM10gPSBjYXBhYyAmIDB4ZmY7CisJfSBlbHNlIHsKKwkJYXJyWzBdID0gMHhmZjsKKwkJYXJyWzFdID0gMHhmZjsKKwkJYXJyWzJdID0gMHhmZjsKKwkJYXJyWzNdID0gMHhmZjsKKwl9CiAJYXJyWzZdID0gKFNFQ1RfU0laRV9QRVIodGFyZ2V0KSA+PiA4KSAmIDB4ZmY7CiAJYXJyWzddID0gU0VDVF9TSVpFX1BFUih0YXJnZXQpICYgMHhmZjsKIAlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIFNERUJVR19SRUFEQ0FQX0FSUl9TWik7CiB9CiAKKyNkZWZpbmUgU0RFQlVHX1JFQURDQVAxNl9BUlJfU1ogMzIKK3N0YXRpYyBpbnQgcmVzcF9yZWFkY2FwMTYoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwKKwkJCSAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqIGRldmlwKQoreworCXVuc2lnbmVkIGNoYXIgKmNtZCA9ICh1bnNpZ25lZCBjaGFyICopc2NwLT5jbW5kOworCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19SRUFEQ0FQMTZfQVJSX1NaXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FwYWM7CisJaW50IGVycnN0cywgaywgYWxsb2NfbGVuOworCisJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCAxLCBkZXZpcCkpKQorCQlyZXR1cm4gZXJyc3RzOworCWFsbG9jX2xlbiA9ICgoY21kWzEwXSA8PCAyNCkgKyAoY21kWzExXSA8PCAxNikgKyAoY21kWzEyXSA8PCA4KQorCQkgICAgICsgY21kWzEzXSk7CisJLyogZm9sbG93aW5nIGp1c3QgaW4gY2FzZSB2aXJ0dWFsX2diIGNoYW5nZWQgKi8KKwlpZiAoc2NzaV9kZWJ1Z192aXJ0dWFsX2diID4gMCkgeworCQlzZGVidWdfY2FwYWNpdHkgPSAyMDQ4ICogMTAyNDsKKwkJc2RlYnVnX2NhcGFjaXR5ICo9IHNjc2lfZGVidWdfdmlydHVhbF9nYjsKKwl9IGVsc2UKKwkJc2RlYnVnX2NhcGFjaXR5ID0gc2RlYnVnX3N0b3JlX3NlY3RvcnM7CisJbWVtc2V0KGFyciwgMCwgU0RFQlVHX1JFQURDQVAxNl9BUlJfU1opOworCWNhcGFjID0gc2RlYnVnX2NhcGFjaXR5IC0gMTsKKwlmb3IgKGsgPSAwOyBrIDwgODsgKytrLCBjYXBhYyA+Pj0gOCkKKwkJYXJyWzcgLSBrXSA9IGNhcGFjICYgMHhmZjsKKwlhcnJbOF0gPSAoU0VDVF9TSVpFX1BFUih0YXJnZXQpID4+IDI0KSAmIDB4ZmY7CisJYXJyWzldID0gKFNFQ1RfU0laRV9QRVIodGFyZ2V0KSA+PiAxNikgJiAweGZmOworCWFyclsxMF0gPSAoU0VDVF9TSVpFX1BFUih0YXJnZXQpID4+IDgpICYgMHhmZjsKKwlhcnJbMTFdID0gU0VDVF9TSVpFX1BFUih0YXJnZXQpICYgMHhmZjsKKwlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsCisJCQkJICAgIG1pbihhbGxvY19sZW4sIFNERUJVR19SRUFEQ0FQMTZfQVJSX1NaKSk7Cit9CisKIC8qIDw8Rm9sbG93aW5nIG1vZGUgcGFnZSBpbmZvIGNvcGllZCBmcm9tIFNUMzE4NDUxTFc+PiAqLwogCiBzdGF0aWMgaW50IHJlc3BfZXJyX3JlY292X3BnKHVuc2lnbmVkIGNoYXIgKiBwLCBpbnQgcGNvbnRyb2wsIGludCB0YXJnZXQpCkBAIC03NzIsMjcgKzEyMjgsOTggQEAKIAogc3RhdGljIGludCByZXNwX2N0cmxfbV9wZyh1bnNpZ25lZCBjaGFyICogcCwgaW50IHBjb250cm9sLCBpbnQgdGFyZ2V0KQogeyAJLyogQ29udHJvbCBtb2RlIHBhZ2UgZm9yIG1vZGVfc2Vuc2UgKi8KLQl1bnNpZ25lZCBjaGFyIGN0cmxfbV9wZ1tdID0gezB4YSwgMTAsIDIsIDAsIDAsIDAsIDAsIDAsCisJdW5zaWduZWQgY2hhciBjaF9jdHJsX21fcGdbXSA9IHsvKiAweGEsIDEwLCAqLyAweDYsIDAsIDAsIDAsIDAsIDAsCisJCQkJICAgICAgICAwLCAwLCAwLCAwfTsKKwl1bnNpZ25lZCBjaGFyIGRfY3RybF9tX3BnW10gPSB7MHhhLCAxMCwgMiwgMCwgMCwgMCwgMCwgMCwKIAkJCQkgICAgIDAsIDAsIDB4MiwgMHg0Yn07CiAKIAlpZiAoc2NzaV9kZWJ1Z19kc2Vuc2UpCiAJCWN0cmxfbV9wZ1syXSB8PSAweDQ7CisJZWxzZQorCQljdHJsX21fcGdbMl0gJj0gfjB4NDsKIAltZW1jcHkocCwgY3RybF9tX3BnLCBzaXplb2YoY3RybF9tX3BnKSk7CiAJaWYgKDEgPT0gcGNvbnRyb2wpCi0JCW1lbXNldChwICsgMiwgMCwgc2l6ZW9mKGN0cmxfbV9wZykgLSAyKTsKKwkJbWVtY3B5KHAgKyAyLCBjaF9jdHJsX21fcGcsIHNpemVvZihjaF9jdHJsX21fcGcpKTsKKwllbHNlIGlmICgyID09IHBjb250cm9sKQorCQltZW1jcHkocCwgZF9jdHJsX21fcGcsIHNpemVvZihkX2N0cmxfbV9wZykpOwogCXJldHVybiBzaXplb2YoY3RybF9tX3BnKTsKIH0KIAorCiBzdGF0aWMgaW50IHJlc3BfaWVjX21fcGcodW5zaWduZWQgY2hhciAqIHAsIGludCBwY29udHJvbCwgaW50IHRhcmdldCkKIHsJLyogSW5mb3JtYXRpb25hbCBFeGNlcHRpb25zIGNvbnRyb2wgbW9kZSBwYWdlIGZvciBtb2RlX3NlbnNlICovCi0JdW5zaWduZWQgY2hhciBpZWNfbV9wZ1tdID0gezB4MWMsIDB4YSwgMHgwOCwgMCwgMCwgMCwgMCwgMCwKLQkJCQkgICAgMCwgMCwgMHgwLCAweDB9OworCXVuc2lnbmVkIGNoYXIgY2hfaWVjX21fcGdbXSA9IHsvKiAweDFjLCAweGEsICovIDB4NCwgMHhmLCAwLCAwLCAwLCAwLAorCQkJCSAgICAgICAwLCAwLCAweDAsIDB4MH07CisJdW5zaWduZWQgY2hhciBkX2llY19tX3BnW10gPSB7MHgxYywgMHhhLCAweDA4LCAwLCAwLCAwLCAwLCAwLAorCQkJCSAgICAgIDAsIDAsIDB4MCwgMHgwfTsKKwogCW1lbWNweShwLCBpZWNfbV9wZywgc2l6ZW9mKGllY19tX3BnKSk7CiAJaWYgKDEgPT0gcGNvbnRyb2wpCi0JCW1lbXNldChwICsgMiwgMCwgc2l6ZW9mKGllY19tX3BnKSAtIDIpOworCQltZW1jcHkocCArIDIsIGNoX2llY19tX3BnLCBzaXplb2YoY2hfaWVjX21fcGcpKTsKKwllbHNlIGlmICgyID09IHBjb250cm9sKQorCQltZW1jcHkocCwgZF9pZWNfbV9wZywgc2l6ZW9mKGRfaWVjX21fcGcpKTsKIAlyZXR1cm4gc2l6ZW9mKGllY19tX3BnKTsKIH0KIAorc3RhdGljIGludCByZXNwX3Nhc19zZl9tX3BnKHVuc2lnbmVkIGNoYXIgKiBwLCBpbnQgcGNvbnRyb2wsIGludCB0YXJnZXQpCit7CS8qIFNBUyBTU1AgbW9kZSBwYWdlIC0gc2hvcnQgZm9ybWF0IGZvciBtb2RlX3NlbnNlICovCisJdW5zaWduZWQgY2hhciBzYXNfc2ZfbV9wZ1tdID0gezB4MTksIDB4NiwKKwkJMHg2LCAweDAsIDB4NywgMHhkMCwgMHgwLCAweDB9OworCisJbWVtY3B5KHAsIHNhc19zZl9tX3BnLCBzaXplb2Yoc2FzX3NmX21fcGcpKTsKKwlpZiAoMSA9PSBwY29udHJvbCkKKwkJbWVtc2V0KHAgKyAyLCAwLCBzaXplb2Yoc2FzX3NmX21fcGcpIC0gMik7CisJcmV0dXJuIHNpemVvZihzYXNfc2ZfbV9wZyk7Cit9CisKKworc3RhdGljIGludCByZXNwX3Nhc19wY2RfbV9zcGcodW5zaWduZWQgY2hhciAqIHAsIGludCBwY29udHJvbCwgaW50IHRhcmdldCwKKwkJCSAgICAgIGludCB0YXJnZXRfZGV2X2lkKQorewkvKiBTQVMgcGh5IGNvbnRyb2wgYW5kIGRpc2NvdmVyIG1vZGUgcGFnZSBmb3IgbW9kZV9zZW5zZSAqLworCXVuc2lnbmVkIGNoYXIgc2FzX3BjZF9tX3BnW10gPSB7MHg1OSwgMHgxLCAwLCAweDY0LCAwLCAweDYsIDAsIDIsCisJCSAgICAwLCAwLCAwLCAwLCAweDEwLCAweDksIDB4OCwgMHgwLAorCQkgICAgMHg1MiwgMHgyMiwgMHgyMiwgMHgyMCwgMHgwLCAweDAsIDB4MCwgMHgwLAorCQkgICAgMHg1MSwgMHgxMSwgMHgxMSwgMHgxMCwgMHgwLCAweDAsIDB4MCwgMHgxLAorCQkgICAgMHgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkgICAgMHg4OCwgMHg5OSwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCSAgICAwLCAxLCAwLCAwLCAweDEwLCAweDksIDB4OCwgMHgwLAorCQkgICAgMHg1MiwgMHgyMiwgMHgyMiwgMHgyMCwgMHgwLCAweDAsIDB4MCwgMHgwLAorCQkgICAgMHg1MSwgMHgxMSwgMHgxMSwgMHgxMCwgMHgwLCAweDAsIDB4MCwgMHgxLAorCQkgICAgMHgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkgICAgMHg4OCwgMHg5OSwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCX07CisJaW50IHBvcnRfYSwgcG9ydF9iOworCisJcG9ydF9hID0gdGFyZ2V0X2Rldl9pZCArIDE7CisJcG9ydF9iID0gcG9ydF9hICsgMTsKKwltZW1jcHkocCwgc2FzX3BjZF9tX3BnLCBzaXplb2Yoc2FzX3BjZF9tX3BnKSk7CisJcFsyMF0gPSAocG9ydF9hID4+IDI0KTsKKwlwWzIxXSA9IChwb3J0X2EgPj4gMTYpICYgMHhmZjsKKwlwWzIyXSA9IChwb3J0X2EgPj4gOCkgJiAweGZmOworCXBbMjNdID0gcG9ydF9hICYgMHhmZjsKKwlwWzQ4ICsgMjBdID0gKHBvcnRfYiA+PiAyNCk7CisJcFs0OCArIDIxXSA9IChwb3J0X2IgPj4gMTYpICYgMHhmZjsKKwlwWzQ4ICsgMjJdID0gKHBvcnRfYiA+PiA4KSAmIDB4ZmY7CisJcFs0OCArIDIzXSA9IHBvcnRfYiAmIDB4ZmY7CisJaWYgKDEgPT0gcGNvbnRyb2wpCisJCW1lbXNldChwICsgNCwgMCwgc2l6ZW9mKHNhc19wY2RfbV9wZykgLSA0KTsKKwlyZXR1cm4gc2l6ZW9mKHNhc19wY2RfbV9wZyk7Cit9CisKK3N0YXRpYyBpbnQgcmVzcF9zYXNfc2hhX21fc3BnKHVuc2lnbmVkIGNoYXIgKiBwLCBpbnQgcGNvbnRyb2wpCit7CS8qIFNBUyBTU1Agc2hhcmVkIHByb3RvY29sIHNwZWNpZmljIHBvcnQgbW9kZSBzdWJwYWdlICovCisJdW5zaWduZWQgY2hhciBzYXNfc2hhX21fcGdbXSA9IHsweDU5LCAweDIsIDAsIDB4YywgMCwgMHg2LCAweDEwLCAwLAorCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfTsKKworCW1lbWNweShwLCBzYXNfc2hhX21fcGcsIHNpemVvZihzYXNfc2hhX21fcGcpKTsKKwlpZiAoMSA9PSBwY29udHJvbCkKKwkJbWVtc2V0KHAgKyA0LCAwLCBzaXplb2Yoc2FzX3NoYV9tX3BnKSAtIDQpOworCXJldHVybiBzaXplb2Yoc2FzX3NoYV9tX3BnKTsKK30KKwogI2RlZmluZSBTREVCVUdfTUFYX01TRU5TRV9TWiAyNTYKIAogc3RhdGljIGludCByZXNwX21vZGVfc2Vuc2Uoc3RydWN0IHNjc2lfY21uZCAqIHNjcCwgaW50IHRhcmdldCwKQEAgLTgwMSwxMiArMTMyOCwxMiBAQAogCXVuc2lnbmVkIGNoYXIgZGJkOwogCWludCBwY29udHJvbCwgcGNvZGUsIHN1YnBjb2RlOwogCXVuc2lnbmVkIGNoYXIgZGV2X3NwZWM7Ci0JaW50IGFsbG9jX2xlbiwgbXNlbnNlXzYsIG9mZnNldCwgbGVuLCBlcnJzdHM7CisJaW50IGFsbG9jX2xlbiwgbXNlbnNlXzYsIG9mZnNldCwgbGVuLCBlcnJzdHMsIHRhcmdldF9kZXZfaWQ7CiAJdW5zaWduZWQgY2hhciAqIGFwOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19NQVhfTVNFTlNFX1NaXTsKIAl1bnNpZ25lZCBjaGFyICpjbWQgPSAodW5zaWduZWQgY2hhciAqKXNjcC0+Y21uZDsKIAotCWlmICgoZXJyc3RzID0gY2hlY2tfcmVzZXQoc2NwLCBkZXZpcCkpKQorCWlmICgoZXJyc3RzID0gY2hlY2tfcmVhZGluZXNzKHNjcCwgMSwgZGV2aXApKSkKIAkJcmV0dXJuIGVycnN0czsKIAlkYmQgPSBjbWRbMV0gJiAweDg7CiAJcGNvbnRyb2wgPSAoY21kWzJdICYgMHhjMCkgPj4gNjsKQEAgLTgyMCw2ICsxMzQ3LDggQEAKIAkJCSAgICAgICAJMCk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KKwl0YXJnZXRfZGV2X2lkID0gKChkZXZpcC0+c2RiZ19ob3N0LT5zaG9zdC0+aG9zdF9ubyArIDEpICogMjAwMCkgKworCQkJKGRldmlwLT50YXJnZXQgKiAxMDAwKSAtIDM7CiAJZGV2X3NwZWMgPSBERVZfUkVBRE9OTFkodGFyZ2V0KSA/IDB4ODAgOiAweDA7CiAJaWYgKG1zZW5zZV82KSB7CiAJCWFyclsyXSA9IGRldl9zcGVjOwpAQCAtODMwLDcgKzEzNTksOCBAQAogCX0KIAlhcCA9IGFyciArIG9mZnNldDsKIAotCWlmICgwICE9IHN1YnBjb2RlKSB7IC8qIFRPRE86IENvbnRyb2wgRXh0ZW5zaW9uIHBhZ2UgKi8KKwlpZiAoKHN1YnBjb2RlID4gMHgwKSAmJiAoc3VicGNvZGUgPCAweGZmKSAmJiAoMHgxOSAhPSBwY29kZSkpIHsKKwkJLyogVE9ETzogQ29udHJvbCBFeHRlbnNpb24gcGFnZSAqLwogCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCiAJCQkgICAgICAgCTApOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKQEAgLTg1NiwxNyArMTM4Niw0NSBAQAogCQlsZW4gPSByZXNwX2N0cmxfbV9wZyhhcCwgcGNvbnRyb2wsIHRhcmdldCk7CiAJCW9mZnNldCArPSBsZW47CiAJCWJyZWFrOworCWNhc2UgMHgxOToJLyogaWYgc3BjPT0xIHRoZW4gc2FzIHBoeSwgY29udHJvbCtkaXNjb3ZlciAqLworCQlpZiAoKHN1YnBjb2RlID4gMHgyKSAmJiAoc3VicGNvZGUgPCAweGZmKSkgeworCQkgICAgICAgIG1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAorCQkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwkgICAgICAgIH0KKwkJbGVuID0gMDsKKwkJaWYgKCgweDAgPT0gc3VicGNvZGUpIHx8ICgweGZmID09IHN1YnBjb2RlKSkKKwkJCWxlbiArPSByZXNwX3Nhc19zZl9tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKKwkJaWYgKCgweDEgPT0gc3VicGNvZGUpIHx8ICgweGZmID09IHN1YnBjb2RlKSkKKwkJCWxlbiArPSByZXNwX3Nhc19wY2RfbV9zcGcoYXAgKyBsZW4sIHBjb250cm9sLCB0YXJnZXQsCisJCQkJCQkgIHRhcmdldF9kZXZfaWQpOworCQlpZiAoKDB4MiA9PSBzdWJwY29kZSkgfHwgKDB4ZmYgPT0gc3VicGNvZGUpKQorCQkJbGVuICs9IHJlc3Bfc2FzX3NoYV9tX3NwZyhhcCArIGxlbiwgcGNvbnRyb2wpOworCQlvZmZzZXQgKz0gbGVuOworCQlicmVhazsKIAljYXNlIDB4MWM6CS8qIEluZm9ybWF0aW9uYWwgRXhjZXB0aW9ucyBNb2RlIHBhZ2UsIGFsbCBkZXZpY2VzICovCiAJCWxlbiA9IHJlc3BfaWVjX21fcGcoYXAsIHBjb250cm9sLCB0YXJnZXQpOwogCQlvZmZzZXQgKz0gbGVuOwogCQlicmVhazsKIAljYXNlIDB4M2Y6CS8qIFJlYWQgYWxsIE1vZGUgcGFnZXMgKi8KLQkJbGVuID0gcmVzcF9lcnJfcmVjb3ZfcGcoYXAsIHBjb250cm9sLCB0YXJnZXQpOwotCQlsZW4gKz0gcmVzcF9kaXNjb25uZWN0X3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKLQkJbGVuICs9IHJlc3BfZm9ybWF0X3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKLQkJbGVuICs9IHJlc3BfY2FjaGluZ19wZyhhcCArIGxlbiwgcGNvbnRyb2wsIHRhcmdldCk7Ci0JCWxlbiArPSByZXNwX2N0cmxfbV9wZyhhcCArIGxlbiwgcGNvbnRyb2wsIHRhcmdldCk7Ci0JCWxlbiArPSByZXNwX2llY19tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKKwkJaWYgKCgwID09IHN1YnBjb2RlKSB8fCAoMHhmZiA9PSBzdWJwY29kZSkpIHsKKwkJCWxlbiA9IHJlc3BfZXJyX3JlY292X3BnKGFwLCBwY29udHJvbCwgdGFyZ2V0KTsKKwkJCWxlbiArPSByZXNwX2Rpc2Nvbm5lY3RfcGcoYXAgKyBsZW4sIHBjb250cm9sLCB0YXJnZXQpOworCQkJbGVuICs9IHJlc3BfZm9ybWF0X3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKKwkJCWxlbiArPSByZXNwX2NhY2hpbmdfcGcoYXAgKyBsZW4sIHBjb250cm9sLCB0YXJnZXQpOworCQkJbGVuICs9IHJlc3BfY3RybF9tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKKwkJCWxlbiArPSByZXNwX3Nhc19zZl9tX3BnKGFwICsgbGVuLCBwY29udHJvbCwgdGFyZ2V0KTsKKwkJCWlmICgweGZmID09IHN1YnBjb2RlKSB7CisJCQkJbGVuICs9IHJlc3Bfc2FzX3BjZF9tX3NwZyhhcCArIGxlbiwgcGNvbnRyb2wsCisJCQkJCQkgIHRhcmdldCwgdGFyZ2V0X2Rldl9pZCk7CisJCQkJbGVuICs9IHJlc3Bfc2FzX3NoYV9tX3NwZyhhcCArIGxlbiwgcGNvbnRyb2wpOworCQkJfQorCQkJbGVuICs9IHJlc3BfaWVjX21fcGcoYXAgKyBsZW4sIHBjb250cm9sLCB0YXJnZXQpOworCQl9IGVsc2UgeworCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworICAgICAgICAgICAgICAgIH0KIAkJb2Zmc2V0ICs9IGxlbjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTg4Myw3MSArMTQ0MSwyNzQgQEAKIAlyZXR1cm4gZmlsbF9mcm9tX2Rldl9idWZmZXIoc2NwLCBhcnIsIG1pbihhbGxvY19sZW4sIG9mZnNldCkpOwogfQogCi1zdGF0aWMgaW50IHJlc3BfcmVhZChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwbnQsIGludCB1cHBlcl9ibGssIGludCBibG9jaywKLQkJICAgICBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCisjZGVmaW5lIFNERUJVR19NQVhfTVNFTEVDVF9TWiA1MTIKKworc3RhdGljIGludCByZXNwX21vZGVfc2VsZWN0KHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIGludCBtc2VsZWN0NiwKKwkJCSAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCit7CisJaW50IHBmLCBzcCwgcHMsIG1kX2xlbiwgYmRfbGVuLCBvZmYsIHNwZiwgcGdfbGVuOworCWludCBwYXJhbV9sZW4sIHJlcywgZXJyc3RzLCBtcGFnZTsKKwl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfTUFYX01TRUxFQ1RfU1pdOworCXVuc2lnbmVkIGNoYXIgKmNtZCA9ICh1bnNpZ25lZCBjaGFyICopc2NwLT5jbW5kOworCisJaWYgKChlcnJzdHMgPSBjaGVja19yZWFkaW5lc3Moc2NwLCAxLCBkZXZpcCkpKQorCQlyZXR1cm4gZXJyc3RzOworCW1lbXNldChhcnIsIDAsIHNpemVvZihhcnIpKTsKKwlwZiA9IGNtZFsxXSAmIDB4MTA7CisJc3AgPSBjbWRbMV0gJiAweDE7CisJcGFyYW1fbGVuID0gbXNlbGVjdDYgPyBjbWRbNF0gOiAoKGNtZFs3XSA8PCA4KSArIGNtZFs4XSk7CisJaWYgKCgwID09IHBmKSB8fCBzcCB8fCAocGFyYW1fbGVuID4gU0RFQlVHX01BWF9NU0VMRUNUX1NaKSkgeworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KKyAgICAgICAgcmVzID0gZmV0Y2hfdG9fZGV2X2J1ZmZlcihzY3AsIGFyciwgcGFyYW1fbGVuKTsKKyAgICAgICAgaWYgKC0xID09IHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gKERJRF9FUlJPUiA8PCAxNik7CisgICAgICAgIGVsc2UgaWYgKChyZXMgPCBwYXJhbV9sZW4pICYmCisgICAgICAgICAgICAgICAgIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykpCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogbW9kZV9zZWxlY3Q6IGNkYiBpbmRpY2F0ZWQ9JWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiBJTyBzZW50PSVkIGJ5dGVzXG4iLCBwYXJhbV9sZW4sIHJlcyk7CisJbWRfbGVuID0gbXNlbGVjdDYgPyAoYXJyWzBdICsgMSkgOiAoKGFyclswXSA8PCA4KSArIGFyclsxXSArIDIpOworCWJkX2xlbiA9IG1zZWxlY3Q2ID8gYXJyWzNdIDogKChhcnJbNl0gPDwgOCkgKyBhcnJbN10pOworCWlmICgobWRfbGVuID4gMikgfHwgKDAgIT0gYmRfbGVuKSkgeworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJb2ZmID0gYmRfbGVuICsgKG1zZWxlY3Q2ID8gNCA6IDgpOworCW1wYWdlID0gYXJyW29mZl0gJiAweDNmOworCXBzID0gISEoYXJyW29mZl0gJiAweDgwKTsKKwlpZiAocHMpIHsKKwkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNULCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCXNwZiA9ICEhKGFycltvZmZdICYgMHg0MCk7CisJcGdfbGVuID0gc3BmID8gKChhcnJbb2ZmICsgMl0gPDwgOCkgKyBhcnJbb2ZmICsgM10gKyA0KSA6CisJCSAgICAgICAoYXJyW29mZiArIDFdICsgMik7CisJaWYgKChwZ19sZW4gKyBvZmYpID4gcGFyYW1fbGVuKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAorCQkJCVBBUkFNRVRFUl9MSVNUX0xFTkdUSF9FUlIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJc3dpdGNoIChtcGFnZSkgeworCWNhc2UgMHhhOiAgICAgIC8qIENvbnRyb2wgTW9kZSBwYWdlICovCisJCWlmIChjdHJsX21fcGdbMV0gPT0gYXJyW29mZiArIDFdKSB7CisJCQltZW1jcHkoY3RybF9tX3BnICsgMiwgYXJyICsgb2ZmICsgMiwKKwkJCSAgICAgICBzaXplb2YoY3RybF9tX3BnKSAtIDIpOworCQkJc2NzaV9kZWJ1Z19kc2Vuc2UgPSAhIShjdHJsX21fcGdbMl0gJiAweDQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweDFjOiAgICAgIC8qIEluZm9ybWF0aW9uYWwgRXhjZXB0aW9ucyBNb2RlIHBhZ2UgKi8KKwkJaWYgKGllY19tX3BnWzFdID09IGFycltvZmYgKyAxXSkgeworCQkJbWVtY3B5KGllY19tX3BnICsgMiwgYXJyICsgb2ZmICsgMiwKKwkJCSAgICAgICBzaXplb2YoaWVjX21fcGcpIC0gMik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQlJTlZBTElEX0ZJRUxEX0lOX1BBUkFNX0xJU1QsIDApOworCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworfQorCitzdGF0aWMgaW50IHJlc3BfdGVtcF9sX3BnKHVuc2lnbmVkIGNoYXIgKiBhcnIpCit7CisJdW5zaWduZWQgY2hhciB0ZW1wX2xfcGdbXSA9IHsweDAsIDB4MCwgMHgzLCAweDIsIDB4MCwgMzgsCisJCQkJICAgICAweDAsIDB4MSwgMHgzLCAweDIsIDB4MCwgNjUsCisJCX07CisKKyAgICAgICAgbWVtY3B5KGFyciwgdGVtcF9sX3BnLCBzaXplb2YodGVtcF9sX3BnKSk7CisgICAgICAgIHJldHVybiBzaXplb2YodGVtcF9sX3BnKTsKK30KKworc3RhdGljIGludCByZXNwX2llX2xfcGcodW5zaWduZWQgY2hhciAqIGFycikKK3sKKwl1bnNpZ25lZCBjaGFyIGllX2xfcGdbXSA9IHsweDAsIDB4MCwgMHgzLCAweDMsIDB4MCwgMHgwLCAzOCwKKwkJfTsKKworICAgICAgICBtZW1jcHkoYXJyLCBpZV9sX3BnLCBzaXplb2YoaWVfbF9wZykpOworCWlmIChpZWNfbV9wZ1syXSAmIDB4NCkgewkvKiBURVNUIGJpdCBzZXQgKi8KKwkJYXJyWzRdID0gVEhSRVNIT0xEX0VYQ0VFREVEOworCQlhcnJbNV0gPSAweGZmOworCX0KKyAgICAgICAgcmV0dXJuIHNpemVvZihpZV9sX3BnKTsKK30KKworI2RlZmluZSBTREVCVUdfTUFYX0xTRU5TRV9TWiA1MTIKKworc3RhdGljIGludCByZXNwX2xvZ19zZW5zZShzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCit7CisJaW50IHBwYywgc3AsIHBjb250cm9sLCBwY29kZSwgYWxsb2NfbGVuLCBlcnJzdHMsIGxlbiwgbjsKKwl1bnNpZ25lZCBjaGFyIGFycltTREVCVUdfTUFYX0xTRU5TRV9TWl07CisJdW5zaWduZWQgY2hhciAqY21kID0gKHVuc2lnbmVkIGNoYXIgKilzY3AtPmNtbmQ7CisKKwlpZiAoKGVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhzY3AsIDEsIGRldmlwKSkpCisJCXJldHVybiBlcnJzdHM7CisJbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOworCXBwYyA9IGNtZFsxXSAmIDB4MjsKKwlzcCA9IGNtZFsxXSAmIDB4MTsKKwlpZiAocHBjIHx8IHNwKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULAorCQkJCUlOVkFMSURfRklFTERfSU5fQ0RCLCAwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQorCXBjb250cm9sID0gKGNtZFsyXSAmIDB4YzApID4+IDY7CisJcGNvZGUgPSBjbWRbMl0gJiAweDNmOworCWFsbG9jX2xlbiA9IChjbWRbN10gPDwgOCkgKyBjbWRbOF07CisJYXJyWzBdID0gcGNvZGU7CisJc3dpdGNoIChwY29kZSkgeworCWNhc2UgMHgwOgkvKiBTdXBwb3J0ZWQgbG9nIHBhZ2VzIGxvZyBwYWdlICovCisJCW4gPSA0OworCQlhcnJbbisrXSA9IDB4MDsJCS8qIHRoaXMgcGFnZSAqLworCQlhcnJbbisrXSA9IDB4ZDsJCS8qIFRlbXBlcmF0dXJlICovCisJCWFycltuKytdID0gMHgyZjsJLyogSW5mb3JtYXRpb25hbCBleGNlcHRpb25zICovCisJCWFyclszXSA9IG4gLSA0OworCQlicmVhazsKKwljYXNlIDB4ZDoJLyogVGVtcGVyYXR1cmUgbG9nIHBhZ2UgKi8KKwkJYXJyWzNdID0gcmVzcF90ZW1wX2xfcGcoYXJyICsgNCk7CisJCWJyZWFrOworCWNhc2UgMHgyZjoJLyogSW5mb3JtYXRpb25hbCBleGNlcHRpb25zIGxvZyBwYWdlICovCisJCWFyclszXSA9IHJlc3BfaWVfbF9wZyhhcnIgKyA0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsCisJCQkJSU5WQUxJRF9GSUVMRF9JTl9DREIsIDApOworCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKKwl9CisJbGVuID0gbWluKCgoYXJyWzJdIDw8IDgpICsgYXJyWzNdKSArIDQsIGFsbG9jX2xlbik7CisJcmV0dXJuIGZpbGxfZnJvbV9kZXZfYnVmZmVyKHNjcCwgYXJyLAorCQkgICAgbWluKGxlbiwgU0RFQlVHX01BWF9JTlFfQVJSX1NaKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwKKwkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJdW5zaWduZWQgaW50IGJsb2NrLCBmcm9tX2JvdHRvbTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdTsKIAlpbnQgcmV0OwogCi0JaWYgKHVwcGVyX2JsayB8fCAoYmxvY2sgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpKSB7CisJaWYgKGxiYSArIG51bSA+IHNkZWJ1Z19jYXBhY2l0eSkgewogCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgQUREUl9PVVRfT0ZfUkFOR0UsCiAJCQkJMCk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KKwkvKiB0cmFuc2ZlciBsZW5ndGggZXhjZXNzaXZlICh0aWUgaW4gdG8gYmxvY2sgbGltaXRzIFZQRCBwYWdlKSAqLworCWlmIChudW0gPiBzZGVidWdfc3RvcmVfc2VjdG9ycykgeworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCisJCQkJMCk7CisJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OworCX0KIAlpZiAoKFNDU0lfREVCVUdfT1BUX01FRElVTV9FUlIgJiBzY3NpX2RlYnVnX29wdHMpICYmCi0JICAgIChibG9jayA8PSBPUFRfTUVESVVNX0VSUl9BRERSKSAmJgotCSAgICAoKGJsb2NrICsgbnVtKSA+IE9QVF9NRURJVU1fRVJSX0FERFIpKSB7CisJICAgIChsYmEgPD0gT1BUX01FRElVTV9FUlJfQUREUikgJiYKKwkgICAgKChsYmEgKyBudW0pID4gT1BUX01FRElVTV9FUlJfQUREUikpIHsKKwkJLyogY2xhaW0gdW5yZWNvdmVyYWJsZSByZWFkIGVycm9yICovCiAJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgTUVESVVNX0VSUk9SLCBVTlJFQ09WRVJFRF9SRUFEX0VSUiwKIAkJCQkwKTsKLQkJLyogY2xhaW0gdW5yZWNvdmVyYWJsZSByZWFkIGVycm9yICovCisJCS8qIHNldCBpbmZvIGZpZWxkIGFuZCB2YWxpZCBiaXQgZm9yIGZpeGVkIGRlc2NyaXB0b3IgKi8KKwkJaWYgKDB4NzAgPT0gKGRldmlwLT5zZW5zZV9idWZmWzBdICYgMHg3ZikpIHsKKwkJCWRldmlwLT5zZW5zZV9idWZmWzBdIHw9IDB4ODA7CS8qIFZhbGlkIGJpdCAqLworCQkJcmV0ID0gT1BUX01FRElVTV9FUlJfQUREUjsKKwkJCWRldmlwLT5zZW5zZV9idWZmWzNdID0gKHJldCA+PiAyNCkgJiAweGZmOworCQkJZGV2aXAtPnNlbnNlX2J1ZmZbNF0gPSAocmV0ID4+IDE2KSAmIDB4ZmY7CisJCQlkZXZpcC0+c2Vuc2VfYnVmZls1XSA9IChyZXQgPj4gOCkgJiAweGZmOworCQkJZGV2aXAtPnNlbnNlX2J1ZmZbNl0gPSByZXQgJiAweGZmOworCQl9CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwotCXJldCA9IGZpbGxfZnJvbV9kZXZfYnVmZmVyKFNDcG50LCBmYWtlX3N0b3JlcCArIChibG9jayAqIFNFQ1RfU0laRSksCi0JCQkgICAJICAgbnVtICogU0VDVF9TSVpFKTsKKwlpZiAoKGxiYSArIG51bSkgPD0gc2RlYnVnX3N0b3JlX3NlY3RvcnMpCisJCXJldCA9IGZpbGxfZnJvbV9kZXZfYnVmZmVyKFNDcG50LAorCQkJCQkgICBmYWtlX3N0b3JlcCArIChsYmEgKiBTRUNUX1NJWkUpLAorCQkJICAgCQkgICBudW0gKiBTRUNUX1NJWkUpOworCWVsc2UgeworCQkvKiBtb2R1bG8gd2hlbiBvbmUgYXJnIGlzIDY0IGJpdHMgbmVlZHMgZG9fZGl2KCkgKi8KKwkJdSA9IGxiYTsKKwkJYmxvY2sgPSBkb19kaXYodSwgc2RlYnVnX3N0b3JlX3NlY3RvcnMpOworCQlmcm9tX2JvdHRvbSA9IDA7CisJCWlmICgoYmxvY2sgKyBudW0pID4gc2RlYnVnX3N0b3JlX3NlY3RvcnMpCisJCQlmcm9tX2JvdHRvbSA9IChibG9jayArIG51bSkgLSBzZGVidWdfc3RvcmVfc2VjdG9yczsKKwkJcmV0ID0gZmlsbF9mcm9tX2Rldl9idWZmZXIoU0NwbnQsCisJCQkJCSAgIGZha2Vfc3RvcmVwICsgKGJsb2NrICogU0VDVF9TSVpFKSwKKwkJCSAgIAkJICAgKG51bSAtIGZyb21fYm90dG9tKSAqIFNFQ1RfU0laRSk7CisJCWlmICgoMCA9PSByZXQpICYmIChmcm9tX2JvdHRvbSA+IDApKQorCQkJcmV0ID0gZmlsbF9mcm9tX2Rldl9idWZmZXIoU0NwbnQsIGZha2Vfc3RvcmVwLAorCQkJCQkJICAgZnJvbV9ib3R0b20gKiBTRUNUX1NJWkUpOworCX0KIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfcncsIGlmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZXNwX3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCwgaW50IHVwcGVyX2JsaywgaW50IGJsb2NrLAotCQkgICAgICBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCitzdGF0aWMgaW50IHJlc3Bfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAorCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICogZGV2aXApCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJdW5zaWduZWQgaW50IGJsb2NrLCB0b19ib3R0b207CisJdW5zaWduZWQgbG9uZyBsb25nIHU7CiAJaW50IHJlczsKIAotCWlmICh1cHBlcl9ibGsgfHwgKGJsb2NrICsgbnVtID4gc2RlYnVnX2NhcGFjaXR5KSkgeworCWlmIChsYmEgKyBudW0gPiBzZGVidWdfY2FwYWNpdHkpIHsKIAkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBJTExFR0FMX1JFUVVFU1QsIEFERFJfT1VUX09GX1JBTkdFLAogCQkJICAgICAgIAkwKTsKIAkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CiAJfQorCS8qIHRyYW5zZmVyIGxlbmd0aCBleGNlc3NpdmUgKHRpZSBpbiB0byBibG9jayBsaW1pdHMgVlBEIHBhZ2UpICovCisJaWYgKG51bSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKSB7CisJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgSUxMRUdBTF9SRVFVRVNULCBJTlZBTElEX0ZJRUxEX0lOX0NEQiwKKwkJCQkwKTsKKwkJcmV0dXJuIGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJfQogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhdG9taWNfcncsIGlmbGFncyk7Ci0JcmVzID0gZmV0Y2hfdG9fZGV2X2J1ZmZlcihTQ3BudCwgZmFrZV9zdG9yZXAgKyAoYmxvY2sgKiBTRUNUX1NJWkUpLAotCQkJICAgCSAgbnVtICogU0VDVF9TSVpFKTsKKwlpZiAoKGxiYSArIG51bSkgPD0gc2RlYnVnX3N0b3JlX3NlY3RvcnMpCisJCXJlcyA9IGZldGNoX3RvX2Rldl9idWZmZXIoU0NwbnQsCisJCQkJCSAgZmFrZV9zdG9yZXAgKyAobGJhICogU0VDVF9TSVpFKSwKKwkJCSAgIAkJICBudW0gKiBTRUNUX1NJWkUpOworCWVsc2UgeworCQkvKiBtb2R1bG8gd2hlbiBvbmUgYXJnIGlzIDY0IGJpdHMgbmVlZHMgZG9fZGl2KCkgKi8KKwkJdSA9IGxiYTsKKwkJYmxvY2sgPSBkb19kaXYodSwgc2RlYnVnX3N0b3JlX3NlY3RvcnMpOworCQl0b19ib3R0b20gPSAwOworCQlpZiAoKGJsb2NrICsgbnVtKSA+IHNkZWJ1Z19zdG9yZV9zZWN0b3JzKQorCQkJdG9fYm90dG9tID0gKGJsb2NrICsgbnVtKSAtIHNkZWJ1Z19zdG9yZV9zZWN0b3JzOworCQlyZXMgPSBmZXRjaF90b19kZXZfYnVmZmVyKFNDcG50LAorCQkJCQkgIGZha2Vfc3RvcmVwICsgKGJsb2NrICogU0VDVF9TSVpFKSwKKwkJCSAgIAkJICAobnVtIC0gdG9fYm90dG9tKSAqIFNFQ1RfU0laRSk7CisJCWlmICgoMCA9PSByZXMpICYmICh0b19ib3R0b20gPiAwKSkKKwkJCXJlcyA9IGZldGNoX3RvX2Rldl9idWZmZXIoU0NwbnQsIGZha2Vfc3RvcmVwLAorCQkJCQkJICB0b19ib3R0b20gKiBTRUNUX1NJWkUpOworCX0KIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXRvbWljX3J3LCBpZmxhZ3MpOwogCWlmICgtMSA9PSByZXMpCiAJCXJldHVybiAoRElEX0VSUk9SIDw8IDE2KTsKIAllbHNlIGlmICgocmVzIDwgKG51bSAqIFNFQ1RfU0laRSkpICYmCiAJCSAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpKQotCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiB3cml0ZTogY2RiIGluZGljYXRlZD0lZCwgIgorCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiB3cml0ZTogY2RiIGluZGljYXRlZD0ldSwgIgogCQkgICAgICAgIiBJTyBzZW50PSVkIGJ5dGVzXG4iLCBudW0gKiBTRUNUX1NJWkUsIHJlcyk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgU0RFQlVHX1JMVU5fQVJSX1NaIDEyOAorI2RlZmluZSBTREVCVUdfUkxVTl9BUlJfU1ogMjU2CiAKIHN0YXRpYyBpbnQgcmVzcF9yZXBvcnRfbHVucyhzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLAogCQkJICAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKIHsKIAl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuOwotCWludCBsdW5fY250LCBpLCB1cHBlcjsKKwlpbnQgbHVuX2NudCwgaSwgdXBwZXIsIG51bSwgbiwgd2x1biwgbHVuOwogCXVuc2lnbmVkIGNoYXIgKmNtZCA9ICh1bnNpZ25lZCBjaGFyICopc2NwLT5jbW5kOwogCWludCBzZWxlY3RfcmVwb3J0ID0gKGludCljbWRbMl07CiAJc3RydWN0IHNjc2lfbHVuICpvbmVfbHVuOwogCXVuc2lnbmVkIGNoYXIgYXJyW1NERUJVR19STFVOX0FSUl9TWl07CisJdW5zaWduZWQgY2hhciAqIG1heF9hZGRyOwogCiAJYWxsb2NfbGVuID0gY21kWzldICsgKGNtZFs4XSA8PCA4KSArIChjbWRbN10gPDwgMTYpICsgKGNtZFs2XSA8PCAyNCk7Ci0JaWYgKChhbGxvY19sZW4gPCAxNikgfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgeworCWlmICgoYWxsb2NfbGVuIDwgNCkgfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgewogCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgSU5WQUxJRF9GSUVMRF9JTl9DREIsCiAJCQkgICAgICAgCTApOwogCQlyZXR1cm4gY2hlY2tfY29uZGl0aW9uX3Jlc3VsdDsKQEAgLTk1NSwxOCArMTcxNiwzNyBAQAogCS8qIGNhbiBwcm9kdWNlIHJlc3BvbnNlIHdpdGggdXAgdG8gMTZrIGx1bnMgKGx1biAwIHRvIGx1biAxNjM4MykgKi8KIAltZW1zZXQoYXJyLCAwLCBTREVCVUdfUkxVTl9BUlJfU1opOwogCWx1bl9jbnQgPSBzY3NpX2RlYnVnX21heF9sdW5zOwotCWFyclsyXSA9ICgoc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bikgKiBsdW5fY250KSA+PiA4KSAmIDB4ZmY7Ci0JYXJyWzNdID0gKHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pICogbHVuX2NudCkgJiAweGZmOwotCWx1bl9jbnQgPSBtaW4oKGludCkoKFNERUJVR19STFVOX0FSUl9TWiAtIDgpIC8KLQkJCSAgICBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSksIGx1bl9jbnQpOworCWlmICgxID09IHNlbGVjdF9yZXBvcnQpCisJCWx1bl9jbnQgPSAwOworCWVsc2UgaWYgKHNjc2lfZGVidWdfbm9fbHVuXzAgJiYgKGx1bl9jbnQgPiAwKSkKKwkJLS1sdW5fY250OworCXdsdW4gPSAoc2VsZWN0X3JlcG9ydCA+IDApID8gMSA6IDA7CisJbnVtID0gbHVuX2NudCArIHdsdW47CisJYXJyWzJdID0gKChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgPj4gOCkgJiAweGZmOworCWFyclszXSA9IChzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAqIG51bSkgJiAweGZmOworCW4gPSBtaW4oKGludCkoKFNERUJVR19STFVOX0FSUl9TWiAtIDgpIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSksIG51bSk7CisJaWYgKG4gPCBudW0pIHsKKwkJd2x1biA9IDA7CisJCWx1bl9jbnQgPSBuOworCX0KIAlvbmVfbHVuID0gKHN0cnVjdCBzY3NpX2x1biAqKSAmYXJyWzhdOwotCWZvciAoaSA9IDA7IGkgPCBsdW5fY250OyBpKyspIHsKLQkJdXBwZXIgPSAoaSA+PiA4KSAmIDB4M2Y7CisJbWF4X2FkZHIgPSBhcnIgKyBTREVCVUdfUkxVTl9BUlJfU1o7CisJZm9yIChpID0gMCwgbHVuID0gKHNjc2lfZGVidWdfbm9fbHVuXzAgPyAxIDogMCk7CisgICAgICAgICAgICAgKChpIDwgbHVuX2NudCkgJiYgKCh1bnNpZ25lZCBjaGFyICopKG9uZV9sdW4gKyBpKSA8IG1heF9hZGRyKSk7CisJICAgICBpKyssIGx1bisrKSB7CisJCXVwcGVyID0gKGx1biA+PiA4KSAmIDB4M2Y7CiAJCWlmICh1cHBlcikKIAkJCW9uZV9sdW5baV0uc2NzaV9sdW5bMF0gPQogCQkJICAgICh1cHBlciB8IChTQU0yX0xVTl9BRERSRVNTX01FVEhPRCA8PCA2KSk7Ci0JCW9uZV9sdW5baV0uc2NzaV9sdW5bMV0gPSBpICYgMHhmZjsKKwkJb25lX2x1bltpXS5zY3NpX2x1blsxXSA9IGx1biAmIDB4ZmY7CiAJfQorCWlmICh3bHVuKSB7CisJCW9uZV9sdW5baV0uc2NzaV9sdW5bMF0gPSAoU0FNMl9XTFVOX1JFUE9SVF9MVU5TID4+IDgpICYgMHhmZjsKKwkJb25lX2x1bltpXS5zY3NpX2x1blsxXSA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUyAmIDB4ZmY7CisJCWkrKzsKKwl9CisJYWxsb2NfbGVuID0gKHVuc2lnbmVkIGNoYXIgKikob25lX2x1biArIGkpIC0gYXJyOwogCXJldHVybiBmaWxsX2Zyb21fZGV2X2J1ZmZlcihzY3AsIGFyciwKIAkJCQkgICAgbWluKChpbnQpYWxsb2NfbGVuLCBTREVCVUdfUkxVTl9BUlJfU1opKTsKIH0KQEAgLTEwMDIsNyArMTc4Miw4IEBACiBzdGF0aWMgaW50IHNjc2lfZGVidWdfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICogc2RwKQogewogCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICJzY3NpX2RlYnVnOiBzbGF2ZV9hbGxvY1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHNsYXZlX2FsbG9jIDwldSAldSAldSAldT5cbiIsCisJCSAgICAgICBzZHAtPmhvc3QtPmhvc3Rfbm8sIHNkcC0+Y2hhbm5lbCwgc2RwLT5pZCwgc2RwLT5sdW4pOwogCXJldHVybiAwOwogfQogCkBAIC0xMDExLDcgKzE3OTIsOCBAQAogCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcDsKIAogCWlmIChTQ1NJX0RFQlVHX09QVF9OT0lTRSAmIHNjc2lfZGVidWdfb3B0cykKLQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZHAsICJzY3NpX2RlYnVnOiBzbGF2ZV9jb25maWd1cmVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBzbGF2ZV9jb25maWd1cmUgPCV1ICV1ICV1ICV1PlxuIiwKKwkJICAgICAgIHNkcC0+aG9zdC0+aG9zdF9ubywgc2RwLT5jaGFubmVsLCBzZHAtPmlkLCBzZHAtPmx1bik7CiAJaWYgKHNkcC0+aG9zdC0+bWF4X2NtZF9sZW4gIT0gU0NTSV9ERUJVR19NQVhfQ01EX0xFTikKIAkJc2RwLT5ob3N0LT5tYXhfY21kX2xlbiA9IFNDU0lfREVCVUdfTUFYX0NNRF9MRU47CiAJZGV2aXAgPSBkZXZJbmZvUmVnKHNkcCk7CkBAIC0xMDE5LDYgKzE4MDEsNyBAQAogCWlmIChzZHAtPmhvc3QtPmNtZF9wZXJfbHVuKQogCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZHAsIFNERUJVR19UQUdHRURfUVVFVUlORywKIAkJCQkJc2RwLT5ob3N0LT5jbWRfcGVyX2x1bik7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2RwLT5yZXF1ZXN0X3F1ZXVlLCAyNTYgKiAxMDI0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAyOCw3ICsxODExLDggQEAKIAkJCQkoc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKXNkcC0+aG9zdGRhdGE7CiAKIAlpZiAoU0NTSV9ERUJVR19PUFRfTk9JU0UgJiBzY3NpX2RlYnVnX29wdHMpCi0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RwLCAic2NzaV9kZWJ1Zzogc2xhdmVfZGVzdHJveVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gInNjc2lfZGVidWc6IHNsYXZlX2Rlc3Ryb3kgPCV1ICV1ICV1ICV1PlxuIiwKKwkJICAgICAgIHNkcC0+aG9zdC0+aG9zdF9ubywgc2RwLT5jaGFubmVsLCBzZHAtPmlkLCBzZHAtPmx1bik7CiAJaWYgKGRldmlwKSB7CiAJCS8qIG1ha2UgdGhpcyBzbG90IGF2YWxpYWJsZSBmb3IgcmUtdXNlICovCiAJCWRldmlwLT51c2VkID0gMDsKQEAgLTEwODUsNiArMTg2OSw4IEBACiAJCQlvcGVuX2RldmlwLT5zZW5zZV9idWZmWzBdID0gMHg3MDsKIAkJCW9wZW5fZGV2aXAtPnNlbnNlX2J1ZmZbN10gPSAweGE7CiAJCX0KKwkJaWYgKHNkZXYtPmx1biA9PSBTQU0yX1dMVU5fUkVQT1JUX0xVTlMpCisJCQlvcGVuX2RldmlwLT53bHVuID0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TICYgMHhmZjsKIAkJcmV0dXJuIG9wZW5fZGV2aXA7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMjczLDcgKzIwNTksNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2RlYnVnOmJ1aWxkX3BhcnRzOiByZWR1Y2luZyAiCiAJCQkJICAgICJwYXJ0aXRpb25zIHRvICVkXG4iLCBTREVCVUdfTUFYX1BBUlRTKTsKIAl9Ci0JbnVtX3NlY3RvcnMgPSAoaW50KShzZGVidWdfc3RvcmVfc2l6ZSAvIFNFQ1RfU0laRSk7CisJbnVtX3NlY3RvcnMgPSAoaW50KXNkZWJ1Z19zdG9yZV9zZWN0b3JzOwogCXNlY3RvcnNfcGVyX3BhcnQgPSAobnVtX3NlY3RvcnMgLSBzZGVidWdfc2VjdG9yc19wZXIpCiAJCQkgICAvIHNjc2lfZGVidWdfbnVtX3BhcnRzOwogCWhlYWRzX2J5X3NlY3RzID0gc2RlYnVnX2hlYWRzICogc2RlYnVnX3NlY3RvcnNfcGVyOwpAQCAtMTMxNiw5ICsyMTAyLDkgQEAKIAkJaWYgKHNjc2lfcmVzdWx0KSB7CiAJCQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZHAgPSBjbW5kLT5kZXZpY2U7CiAKLQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RwLAotCQkJCSJub24temVybyByZXN1bHQ9MHgleFxuIiwKLQkJCSAgICAgICAJc2NzaV9yZXN1bHQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogICAgPCV1ICV1ICV1ICV1PiAiCisJCQkgICAgICAgIm5vbi16ZXJvIHJlc3VsdD0weCV4XG4iLCBzZHAtPmhvc3QtPmhvc3Rfbm8sCisJCQkgICAgICAgc2RwLT5jaGFubmVsLCBzZHAtPmlkLCBzZHAtPmx1biwgc2NzaV9yZXN1bHQpOwogCQl9CiAJfQogCWlmIChjbW5kICYmIGRldmlwKSB7CkBAIC0xMzY1LDIxICsyMTUxLDE5IEBACiAJfQogfQogCi0vKiBTZXQgJ3Blcm0nICg0dGggYXJndW1lbnQpIHRvIDAgdG8gZGlzYWJsZSBtb2R1bGVfcGFyYW0ncyBkZWZpbml0aW9uCi0gKiBvZiBzeXNmcyBwYXJhbWV0ZXJzICh3aGljaCBtb2R1bGVfcGFyYW0gZG9lc24ndCB5ZXQgc3VwcG9ydCkuCi0gKiBTeXNmcyBwYXJhbWV0ZXJzIGRlZmluZWQgZXhwbGljaXRseSBiZWxvdy4KLSAqLwotbW9kdWxlX3BhcmFtX25hbWVkKGFkZF9ob3N0LCBzY3NpX2RlYnVnX2FkZF9ob3N0LCBpbnQsIDApOyAvKiBwZXJtPTA2NDQgKi8KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWxheSwgc2NzaV9kZWJ1Z19kZWxheSwgaW50LCAwKTsgLyogcGVybT0wNjQ0ICovCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGV2X3NpemVfbWIsIHNjc2lfZGVidWdfZGV2X3NpemVfbWIsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZHNlbnNlLCBzY3NpX2RlYnVnX2RzZW5zZSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChldmVyeV9udGgsIHNjc2lfZGVidWdfZXZlcnlfbnRoLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtX25hbWVkKG1heF9sdW5zLCBzY3NpX2RlYnVnX21heF9sdW5zLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtX25hbWVkKG51bV9wYXJ0cywgc2NzaV9kZWJ1Z19udW1fcGFydHMsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobnVtX3RndHMsIHNjc2lfZGVidWdfbnVtX3RndHMsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQob3B0cywgc2NzaV9kZWJ1Z19vcHRzLCBpbnQsIDApOyAvKiBwZXJtPTA2NDQgKi8KLW1vZHVsZV9wYXJhbV9uYW1lZChwdHlwZSwgc2NzaV9kZWJ1Z19wdHlwZSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChzY3NpX2xldmVsLCBzY3NpX2RlYnVnX3Njc2lfbGV2ZWwsIGludCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYWRkX2hvc3QsIHNjc2lfZGVidWdfYWRkX2hvc3QsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlbGF5LCBzY3NpX2RlYnVnX2RlbGF5LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZXZfc2l6ZV9tYiwgc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9uYW1lZChkc2Vuc2UsIHNjc2lfZGVidWdfZHNlbnNlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbV9uYW1lZChldmVyeV9udGgsIHNjc2lfZGVidWdfZXZlcnlfbnRoLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbV9uYW1lZChtYXhfbHVucywgc2NzaV9kZWJ1Z19tYXhfbHVucywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9fbHVuXzAsIHNjc2lfZGVidWdfbm9fbHVuXzAsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKG51bV9wYXJ0cywgc2NzaV9kZWJ1Z19udW1fcGFydHMsIGludCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fbmFtZWQobnVtX3RndHMsIHNjc2lfZGVidWdfbnVtX3RndHMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKG9wdHMsIHNjc2lfZGVidWdfb3B0cywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW1fbmFtZWQocHR5cGUsIHNjc2lfZGVidWdfcHR5cGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX25hbWVkKHNjc2lfbGV2ZWwsIHNjc2lfZGVidWdfc2NzaV9sZXZlbCwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9uYW1lZCh2aXJ0dWFsX2diLCBzY3NpX2RlYnVnX3ZpcnR1YWxfZ2IsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogCiBNT0RVTEVfQVVUSE9SKCJFcmljIFlvdW5nZGFsZSArIERvdWdsYXMgR2lsYmVydCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIGRlYnVnIGFkYXB0ZXIgZHJpdmVyIik7CkBAIC0xMzg4LDE1ICsyMTcyLDE3IEBACiAKIE1PRFVMRV9QQVJNX0RFU0MoYWRkX2hvc3QsICIwLi4xMjcgaG9zdHMgYWxsb3dlZChkZWY9MSkiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVsYXksICIjIG9mIGppZmZpZXMgdG8gZGVsYXkgcmVzcG9uc2UoZGVmPTEpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNQiBvZiByYW0gc2hhcmVkIGJ5IGRldnMiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHNlbnNlLCAidXNlIGRlc2NyaXB0b3Igc2Vuc2UgZm9ybWF0KGRlZjogZml4ZWQpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9zaXplX21iLCAic2l6ZSBpbiBNQiBvZiByYW0gc2hhcmVkIGJ5IGRldnMoZGVmPTgpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRzZW5zZSwgInVzZSBkZXNjcmlwdG9yIHNlbnNlIGZvcm1hdChkZWY9MCAtPiBmaXhlZCkiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZXZlcnlfbnRoLCAidGltZW91dCBldmVyeSBudGggY29tbWFuZChkZWY9MTAwKSIpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfbHVucywgIm51bWJlciBvZiBTQ1NJIExVTnMgcGVyIHRhcmdldCB0byBzaW11bGF0ZSIpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfbHVucywgIm51bWJlciBvZiBMVU5zIHBlciB0YXJnZXQgdG8gc2ltdWxhdGUoZGVmPTEpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vX2x1bl8wLCAibm8gTFUgbnVtYmVyIDAgKGRlZj0wIC0+IGhhdmUgbHVuIDApIik7CiBNT0RVTEVfUEFSTV9ERVNDKG51bV9wYXJ0cywgIm51bWJlciBvZiBwYXJ0aXRpb25zKGRlZj0wKSIpOwotTU9EVUxFX1BBUk1fREVTQyhudW1fdGd0cywgIm51bWJlciBvZiBTQ1NJIHRhcmdldHMgcGVyIGhvc3QgdG8gc2ltdWxhdGUiKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0cywgIjEtPm5vaXNlLCAyLT5tZWRpdW1fZXJyb3IsIDQtPi4uLiIpOworTU9EVUxFX1BBUk1fREVTQyhudW1fdGd0cywgIm51bWJlciBvZiB0YXJnZXRzIHBlciBob3N0IHRvIHNpbXVsYXRlKGRlZj0xKSIpOworTU9EVUxFX1BBUk1fREVTQyhvcHRzLCAiMS0+bm9pc2UsIDItPm1lZGl1bV9lcnJvciwgNC0+Li4uIChkZWY9MCkiKTsKIE1PRFVMRV9QQVJNX0RFU0MocHR5cGUsICJTQ1NJIHBlcmlwaGVyYWwgdHlwZShkZWY9MFtkaXNrXSkiKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NzaV9sZXZlbCwgIlNDU0kgbGV2ZWwgdG8gc2ltdWxhdGUoZGVmPTVbU1BDLTNdKSIpOworTU9EVUxFX1BBUk1fREVTQyh2aXJ0dWFsX2diLCAidmlydHVhbCBnaWdhYnl0ZSBzaXplIChkZWY9MCAtPiB1c2UgZGV2X3NpemVfbWIpIik7CiAKIAogc3RhdGljIGNoYXIgc2RlYnVnX2luZm9bMjU2XTsKQEAgLTE1NDgsNiArMjMzNCwyNCBAQAogRFJJVkVSX0FUVFIoZHNlbnNlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2RlYnVnX2RzZW5zZV9zaG93LAogCSAgICBzZGVidWdfZHNlbnNlX3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3Qgc2RlYnVnX25vX2x1bl8wX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKiBkZHAsIGNoYXIgKiBidWYpCit7CisgICAgICAgIHJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgc2NzaV9kZWJ1Z19ub19sdW5fMCk7Cit9CitzdGF0aWMgc3NpemVfdCBzZGVidWdfbm9fbHVuXzBfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKiBkZHAsCisJCQkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCit7CisgICAgICAgIGludCBuOworCisJaWYgKChjb3VudCA+IDApICYmICgxID09IHNzY2FuZihidWYsICIlZCIsICZuKSkgJiYgKG4gPj0gMCkpIHsKKwkJc2NzaV9kZWJ1Z19ub19sdW5fMCA9IG47CisJCXJldHVybiBjb3VudDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CitEUklWRVJfQVRUUihub19sdW5fMCwgU19JUlVHTyB8IFNfSVdVU1IsIHNkZWJ1Z19ub19sdW5fMF9zaG93LAorCSAgICBzZGVidWdfbm9fbHVuXzBfc3RvcmUpOworCiBzdGF0aWMgc3NpemVfdCBzZGVidWdfbnVtX3RndHNfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRkcCwgY2hhciAqIGJ1ZikKIHsKICAgICAgICAgcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBzY3NpX2RlYnVnX251bV90Z3RzKTsKQEAgLTE2MjMsNiArMjQyNywyOSBAQAogfQogRFJJVkVSX0FUVFIoc2NzaV9sZXZlbCwgU19JUlVHTywgc2RlYnVnX3Njc2lfbGV2ZWxfc2hvdywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNkZWJ1Z192aXJ0dWFsX2diX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKiBkZHAsIGNoYXIgKiBidWYpCit7CisgICAgICAgIHJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgc2NzaV9kZWJ1Z192aXJ0dWFsX2diKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNkZWJ1Z192aXJ0dWFsX2diX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZGRwLAorCQkJCSAgICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCit7CisgICAgICAgIGludCBuOworCisJaWYgKChjb3VudCA+IDApICYmICgxID09IHNzY2FuZihidWYsICIlZCIsICZuKSkgJiYgKG4gPj0gMCkpIHsKKwkJc2NzaV9kZWJ1Z192aXJ0dWFsX2diID0gbjsKKwkJaWYgKHNjc2lfZGVidWdfdmlydHVhbF9nYiA+IDApIHsKKwkJCXNkZWJ1Z19jYXBhY2l0eSA9IDIwNDggKiAxMDI0OworCQkJc2RlYnVnX2NhcGFjaXR5ICo9IHNjc2lfZGVidWdfdmlydHVhbF9nYjsKKwkJfSBlbHNlCisJCQlzZGVidWdfY2FwYWNpdHkgPSBzZGVidWdfc3RvcmVfc2VjdG9yczsKKwkJcmV0dXJuIGNvdW50OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KK0RSSVZFUl9BVFRSKHZpcnR1YWxfZ2IsIFNfSVJVR08gfCBTX0lXVVNSLCBzZGVidWdfdmlydHVhbF9nYl9zaG93LAorCSAgICBzZGVidWdfdmlydHVhbF9nYl9zdG9yZSk7CisKIHN0YXRpYyBzc2l6ZV90IHNkZWJ1Z19hZGRfaG9zdF9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZGRwLCBjaGFyICogYnVmKQogewogICAgICAgICByZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHNjc2lfZGVidWdfYWRkX2hvc3QpOwpAQCAtMTY5MiwxNCArMjUxOSwxOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzY3NpX2RlYnVnX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN6OworCXVuc2lnbmVkIGludCBzejsKIAlpbnQgaG9zdF90b19hZGQ7CiAJaW50IGs7CiAKIAlpZiAoc2NzaV9kZWJ1Z19kZXZfc2l6ZV9tYiA8IDEpCiAJCXNjc2lfZGVidWdfZGV2X3NpemVfbWIgPSAxOyAgLyogZm9yY2UgbWluaW11bSAxIE1CIHJhbWRpc2sgKi8KLQlzZGVidWdfc3RvcmVfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXNjc2lfZGVidWdfZGV2X3NpemVfbWIgKiAxMDQ4NTc2OwotCXNkZWJ1Z19jYXBhY2l0eSA9IHNkZWJ1Z19zdG9yZV9zaXplIC8gU0VDVF9TSVpFOworCXNkZWJ1Z19zdG9yZV9zaXplID0gKHVuc2lnbmVkIGludClzY3NpX2RlYnVnX2Rldl9zaXplX21iICogMTA0ODU3NjsKKwlzZGVidWdfc3RvcmVfc2VjdG9ycyA9IHNkZWJ1Z19zdG9yZV9zaXplIC8gU0VDVF9TSVpFOworCWlmIChzY3NpX2RlYnVnX3ZpcnR1YWxfZ2IgPiAwKSB7CisJCXNkZWJ1Z19jYXBhY2l0eSA9IDIwNDggKiAxMDI0OworCQlzZGVidWdfY2FwYWNpdHkgKj0gc2NzaV9kZWJ1Z192aXJ0dWFsX2diOworCX0gZWxzZQorCQlzZGVidWdfY2FwYWNpdHkgPSBzZGVidWdfc3RvcmVfc2VjdG9yczsKIAogCS8qIHBsYXkgYXJvdW5kIHdpdGggZ2VvbWV0cnksIGRvbid0IHdhc3RlIHRvbyBtdWNoIG9uIHRyYWNrIDAgKi8KIAlzZGVidWdfaGVhZHMgPSA4OwpAQCAtMTgxMyw3ICsyNjQ1LDcgQEAKICAgICAgICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqc2RiZ19kZXZpbmZvOwogICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaCwgKmxoX3NmOwogCi0gICAgICAgIHNkYmdfaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpzZGJnX2hvc3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgc2RiZ19ob3N0ID0ga3phbGxvYyhzaXplb2YoKnNkYmdfaG9zdCksR0ZQX0tFUk5FTCk7CiAKICAgICAgICAgaWYgKE5VTEwgPT0gc2RiZ19ob3N0KSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIG1lbW9yeSBhdCBsaW5lICVkXG4iLApAQCAtMTgyNSw3ICsyNjU3LDcgQEAKIAogCWRldnNfcGVyX2hvc3QgPSBzY3NpX2RlYnVnX251bV90Z3RzICogc2NzaV9kZWJ1Z19tYXhfbHVuczsKICAgICAgICAgZm9yIChrID0gMDsgayA8IGRldnNfcGVyX2hvc3Q7IGsrKykgewotICAgICAgICAgICAgICAgIHNkYmdfZGV2aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCpzZGJnX2RldmluZm8pLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBzZGJnX2RldmluZm8gPSBremFsbG9jKHNpemVvZigqc2RiZ19kZXZpbmZvKSxHRlBfS0VSTkVMKTsKICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZGJnX2RldmluZm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBtZW1vcnkgYXQgbGluZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKQEAgLTE5MDYsNyArMjczOCw3IEBACiAJCWhwbnQtPm1heF9pZCA9IHNjc2lfZGVidWdfbnVtX3RndHMgKyAxOwogCWVsc2UKIAkJaHBudC0+bWF4X2lkID0gc2NzaV9kZWJ1Z19udW1fdGd0czsKLQlocG50LT5tYXhfbHVuID0gc2NzaV9kZWJ1Z19tYXhfbHVuczsKKwlocG50LT5tYXhfbHVuID0gU0FNMl9XTFVOX1JFUE9SVF9MVU5TOwkvKiA9IHNjc2lfZGVidWdfbWF4X2x1bnM7ICovCiAKICAgICAgICAgZXJyb3IgPSBzY3NpX2FkZF9ob3N0KGhwbnQsICZzZGJnX2hvc3QtPmRldik7CiAgICAgICAgIGlmIChlcnJvcikgewpAQCAtMTk2MCw3ICsyNzkyLDcgQEAKIAkJCWhwbnQtPm1heF9pZCA9IHNjc2lfZGVidWdfbnVtX3RndHMgKyAxOwogCQllbHNlCiAJCQlocG50LT5tYXhfaWQgPSBzY3NpX2RlYnVnX251bV90Z3RzOwotCQlocG50LT5tYXhfbHVuID0gc2NzaV9kZWJ1Z19tYXhfbHVuczsKKwkJaHBudC0+bWF4X2x1biA9IFNBTTJfV0xVTl9SRVBPUlRfTFVOUzsgLyogc2NzaV9kZWJ1Z19tYXhfbHVuczsgKi8KIAl9CiAJc3Bpbl91bmxvY2soJnNkZWJ1Z19ob3N0X2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKaW5kZXggZmI1Y2I0Yy4uM2QwNDI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJeyJISVRBQ0hJIiwgIkRJU0stU1VCU1lTVEVNIiwgIioiLCBCTElTVF9BVFRBQ0hfUFEzIHwgQkxJU1RfU1BBUlNFTFVOIHwgQkxJU1RfTEFSR0VMVU59LAogCXsiSElUQUNISSIsICJPUEVOLUUiLCAiKiIsIEJMSVNUX0FUVEFDSF9QUTMgfCBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9MQVJHRUxVTn0sCiAJeyJIUCIsICJBNjE4OUEiLCBOVUxMLCBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9MQVJHRUxVTn0sCS8qIEhQIFZBNzQwMCAqLwotCXsiSFAiLCAiT1BFTi0iLCAiKiIsIEJMSVNUX1NQQVJTRUxVTiB8IEJMSVNUX0xBUkdFTFVOfSwgLyogSFAgWFAgQXJyYXlzICovCisJeyJIUCIsICJPUEVOLSIsICIqIiwgQkxJU1RfUkVQT1JUTFVOMn0sIC8qIEhQIFhQIEFycmF5cyAqLwogCXsiSFAiLCAiTmV0UkFJRC00TSIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOfSwKIAl7IkhQIiwgIkhTVjEwMCIsIE5VTEwsIEJMSVNUX1JFUE9SVExVTjIgfCBCTElTVF9OT1NUQVJUT05BRER9LAogCXsiSFAiLCAiQzE1NTdBIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggNmE3YTYwZi4uNjY4M2Q1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xNjcyLDcgKzE2NzIsOSBAQAogc2NzaV9yZXNldF9wcm92aWRlcihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGZsYWcpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHNjc2lfZ2V0X2NvbW1hbmQoZGV2LCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldi0+aG9zdDsKIAlzdHJ1Y3QgcmVxdWVzdCByZXE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcnRuOwogCiAJc2NtZC0+cmVxdWVzdCA9ICZyZXE7CkBAIC0xNjk5LDYgKzE3MDEsMTAgQEAKIAkgKi8KIAlzY21kLT5waWQJCQk9IDA7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJc2hvc3QtPnRtZl9pbl9wcm9ncmVzcyA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKIAlzd2l0Y2ggKGZsYWcpIHsKIAljYXNlIFNDU0lfVFJZX1JFU0VUX0RFVklDRToKIAkJcnRuID0gc2NzaV90cnlfYnVzX2RldmljZV9yZXNldChzY21kKTsKQEAgLTE3MTcsNiArMTcyMywyMiBAQAogCQlydG4gPSBGQUlMRUQ7CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCXNob3N0LT50bWZfaW5fcHJvZ3Jlc3MgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBiZSBzdXJlIHRvIHdha2UgdXAgYW55b25lIHdobyB3YXMgc2xlZXBpbmcgb3IgaGFkIHRoZWlyIHF1ZXVlCisJICogc3VzcGVuZGVkIHdoaWxlIHdlIHBlcmZvcm1lZCB0aGUgVE1GLgorCSAqLworCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCisJCXByaW50aygiJXM6IHdha2luZyB1cCBob3N0IHRvIHJlc3RhcnQgYWZ0ZXIgVE1GXG4iLAorCQlfX0ZVTkNUSU9OX18pKTsKKworCXdha2VfdXAoJnNob3N0LT5ob3N0X3dhaXQpOworCisJc2NzaV9ydW5faG9zdF9xdWV1ZXMoc2hvc3QpOworCiAJc2NzaV9uZXh0X2NvbW1hbmQoc2NtZCk7CiAJcmV0dXJuIHJ0bjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggM2QwNGE5Zi4uMDhhZjlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTg1NSw4ICs4NTUsNyBAQAogICoJCWIpIFdlIGNhbiBqdXN0IHVzZSBzY3NpX3JlcXVldWVfY29tbWFuZCgpIGhlcmUuICBUaGlzIHdvdWxkCiAgKgkJICAgYmUgdXNlZCBpZiB3ZSBqdXN0IHdhbnRlZCB0byByZXRyeSwgZm9yIGV4YW1wbGUuCiAgKi8KLXZvaWQgc2NzaV9pb19jb21wbGV0aW9uKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGdvb2RfYnl0ZXMsCi0JCQl1bnNpZ25lZCBpbnQgYmxvY2tfYnl0ZXMpCit2b2lkIHNjc2lfaW9fY29tcGxldGlvbihzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBnb29kX2J5dGVzKQogewogCWludCByZXN1bHQgPSBjbWQtPnJlc3VsdDsKIAlpbnQgdGhpc19jb3VudCA9IGNtZC0+YnVmZmxlbjsKQEAgLTkyMSw4NyArOTIwLDcwIEBACiAJICogTmV4dCBkZWFsIHdpdGggYW55IHNlY3RvcnMgd2hpY2ggd2Ugd2VyZSBhYmxlIHRvIGNvcnJlY3RseQogCSAqIGhhbmRsZS4KIAkgKi8KLQlpZiAoZ29vZF9ieXRlcyA+PSAwKSB7Ci0JCVNDU0lfTE9HX0hMQ09NUExFVEUoMSwgcHJpbnRrKCIlbGQgc2VjdG9ycyB0b3RhbCwgJWQgYnl0ZXMgZG9uZS5cbiIsCi0JCQkJCSAgICAgIHJlcS0+bnJfc2VjdG9ycywgZ29vZF9ieXRlcykpOwotCQlTQ1NJX0xPR19ITENPTVBMRVRFKDEsIHByaW50aygidXNlX3NnIGlzICVkXG4iLCBjbWQtPnVzZV9zZykpOworCVNDU0lfTE9HX0hMQ09NUExFVEUoMSwgcHJpbnRrKCIlbGQgc2VjdG9ycyB0b3RhbCwgIgorCQkJCSAgICAgICIlZCBieXRlcyBkb25lLlxuIiwKKwkJCQkgICAgICByZXEtPm5yX3NlY3RvcnMsIGdvb2RfYnl0ZXMpKTsKKwlTQ1NJX0xPR19ITENPTVBMRVRFKDEsIHByaW50aygidXNlX3NnIGlzICVkXG4iLCBjbWQtPnVzZV9zZykpOwogCi0JCWlmIChjbGVhcl9lcnJvcnMpCi0JCQlyZXEtPmVycm9ycyA9IDA7Ci0JCS8qCi0JCSAqIElmIG11bHRpcGxlIHNlY3RvcnMgYXJlIHJlcXVlc3RlZCBpbiBvbmUgYnVmZmVyLCB0aGVuCi0JCSAqIHRoZXkgd2lsbCBoYXZlIGJlZW4gZmluaXNoZWQgb2ZmIGJ5IHRoZSBmaXJzdCBjb21tYW5kLgotCQkgKiBJZiBub3QsIHRoZW4gd2UgaGF2ZSBhIG11bHRpLWJ1ZmZlciBjb21tYW5kLgotCQkgKgotCQkgKiBJZiBibG9ja19ieXRlcyAhPSAwLCBpdCBtZWFucyB3ZSBoYWQgYSBtZWRpdW0gZXJyb3IKLQkJICogb2Ygc29tZSBzb3J0LCBhbmQgdGhhdCB3ZSB3YW50IHRvIG1hcmsgc29tZSBudW1iZXIgb2YKLQkJICogc2VjdG9ycyBhcyBub3QgdXB0b2RhdGUuICBUaHVzIHdlIHdhbnQgdG8gaW5oaWJpdAotCQkgKiByZXF1ZXVlaW5nIHJpZ2h0IGhlcmUgLSB3ZSB3aWxsIHJlcXVldWUgZG93biBiZWxvdwotCQkgKiB3aGVuIHdlIGhhbmRsZSB0aGUgYmFkIHNlY3RvcnMuCi0JCSAqLworCWlmIChjbGVhcl9lcnJvcnMpCisJCXJlcS0+ZXJyb3JzID0gMDsKIAotCQkvKgotCQkgKiBJZiB0aGUgY29tbWFuZCBjb21wbGV0ZWQgd2l0aG91dCBlcnJvciwgdGhlbiBlaXRoZXIKLQkJICogZmluaXNoIG9mZiB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCwgb3Igc3RhcnQgYSBuZXcgb25lLgotCQkgKi8KLQkJaWYgKHNjc2lfZW5kX3JlcXVlc3QoY21kLCAxLCBnb29kX2J5dGVzLCByZXN1bHQgPT0gMCkgPT0gTlVMTCkKLQkJCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBOb3csIGlmIHdlIHdlcmUgZ29vZCBsaXR0bGUgYm95cyBhbmQgZ2lybHMsIFNhbnRhIGxlZnQgdXMgYSByZXF1ZXN0Ci0JICogc2Vuc2UgYnVmZmVyLiAgV2UgY2FuIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGlzLCBzbyB3ZQotCSAqIGNhbiBjaG9vc2UgYSBibG9jayB0byByZW1hcCwgZXRjLgorCS8qIEEgbnVtYmVyIG9mIGJ5dGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHJlYWQuICBJZiB0aGVyZQorCSAqIGFyZSBsZWZ0b3ZlcnMgYW5kIHRoZXJlIGlzIHNvbWUga2luZCBvZiBlcnJvcgorCSAqIChyZXN1bHQgIT0gMCksIHJldHJ5IHRoZSByZXN0LgorCSAqLworCWlmIChzY3NpX2VuZF9yZXF1ZXN0KGNtZCwgMSwgZ29vZF9ieXRlcywgcmVzdWx0ID09IDApID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGdvb2RfYnl0ZXMgPSAwLCBvciAoaW5jbHVzaXZlKSB0aGVyZSB3ZXJlIGxlZnRvdmVycyBhbmQKKwkgKiByZXN1bHQgPSAwLCBzbyBzY3NpX2VuZF9yZXF1ZXN0IGNvdWxkbid0IHJldHJ5LgogCSAqLwogCWlmIChzZW5zZV92YWxpZCAmJiAhc2Vuc2VfZGVmZXJyZWQpIHsKIAkJc3dpdGNoIChzc2hkci5zZW5zZV9rZXkpIHsKIAkJY2FzZSBVTklUX0FUVEVOVElPTjoKIAkJCWlmIChjbWQtPmRldmljZS0+cmVtb3ZhYmxlKSB7Ci0JCQkJLyogZGV0ZWN0ZWQgZGlzYyBjaGFuZ2UuICBzZXQgYSBiaXQgCisJCQkJLyogRGV0ZWN0ZWQgZGlzYyBjaGFuZ2UuICBTZXQgYSBiaXQKIAkJCQkgKiBhbmQgcXVpZXRseSByZWZ1c2UgZnVydGhlciBhY2Nlc3MuCiAJCQkJICovCiAJCQkJY21kLT5kZXZpY2UtPmNoYW5nZWQgPSAxOwotCQkJCXNjc2lfZW5kX3JlcXVlc3QoY21kLCAwLAotCQkJCQkJdGhpc19jb3VudCwgMSk7CisJCQkJc2NzaV9lbmRfcmVxdWVzdChjbWQsIDAsIHRoaXNfY291bnQsIDEpOwogCQkJCXJldHVybjsKIAkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkqIE11c3QgaGF2ZSBiZWVuIGEgcG93ZXIgZ2xpdGNoLCBvciBhCi0JCQkJKiBidXMgcmVzZXQuICBDb3VsZCBub3QgaGF2ZSBiZWVuIGEKLQkJCQkqIG1lZGlhIGNoYW5nZSwgc28gd2UganVzdCByZXRyeSB0aGUKLQkJCQkqIHJlcXVlc3QgYW5kIHNlZSB3aGF0IGhhcHBlbnMuICAKLQkJCQkqLworCQkJCS8qIE11c3QgaGF2ZSBiZWVuIGEgcG93ZXIgZ2xpdGNoLCBvciBhCisJCQkJICogYnVzIHJlc2V0LiAgQ291bGQgbm90IGhhdmUgYmVlbiBhCisJCQkJICogbWVkaWEgY2hhbmdlLCBzbyB3ZSBqdXN0IHJldHJ5IHRoZQorCQkJCSAqIHJlcXVlc3QgYW5kIHNlZSB3aGF0IGhhcHBlbnMuCisJCQkJICovCiAJCQkJc2NzaV9yZXF1ZXVlX2NvbW1hbmQocSwgY21kKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBJTExFR0FMX1JFUVVFU1Q6Ci0JCQkvKgotCQkgCSogSWYgd2UgaGFkIGFuIElMTEVHQUwgUkVRVUVTVCByZXR1cm5lZCwgdGhlbiB3ZSBtYXkKLQkJIAkqIGhhdmUgcGVyZm9ybWVkIGFuIHVuc3VwcG9ydGVkIGNvbW1hbmQuICBUaGUgb25seQotCQkgCSogdGhpbmcgdGhpcyBzaG91bGQgYmUgd291bGQgYmUgYSB0ZW4gYnl0ZSByZWFkIHdoZXJlCi0JCQkqIG9ubHkgYSBzaXggYnl0ZSByZWFkIHdhcyBzdXBwb3J0ZWQuICBBbHNvLCBvbiBhCi0JCQkqIHN5c3RlbSB3aGVyZSBSRUFEIENBUEFDSVRZIGZhaWxlZCwgd2UgbWF5IGhhdmUgcmVhZAotCQkJKiBwYXN0IHRoZSBlbmQgb2YgdGhlIGRpc2suCi0JCSAJKi8KKwkJCS8qIElmIHdlIGhhZCBhbiBJTExFR0FMIFJFUVVFU1QgcmV0dXJuZWQsIHRoZW4KKwkJCSAqIHdlIG1heSBoYXZlIHBlcmZvcm1lZCBhbiB1bnN1cHBvcnRlZAorCQkJICogY29tbWFuZC4gIFRoZSBvbmx5IHRoaW5nIHRoaXMgc2hvdWxkIGJlCisJCQkgKiB3b3VsZCBiZSBhIHRlbiBieXRlIHJlYWQgd2hlcmUgb25seSBhIHNpeAorCQkJICogYnl0ZSByZWFkIHdhcyBzdXBwb3J0ZWQuICBBbHNvLCBvbiBhIHN5c3RlbQorCQkJICogd2hlcmUgUkVBRCBDQVBBQ0lUWSBmYWlsZWQsIHdlIG1heSBoYXZlCisJCQkgKiByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGlzay4KKwkJCSAqLwogCQkJaWYgKChjbWQtPmRldmljZS0+dXNlXzEwX2Zvcl9ydyAmJgogCQkJICAgIHNzaGRyLmFzYyA9PSAweDIwICYmIHNzaGRyLmFzY3EgPT0gMHgwMCkgJiYKIAkJCSAgICAoY21kLT5jbW5kWzBdID09IFJFQURfMTAgfHwKIAkJCSAgICAgY21kLT5jbW5kWzBdID09IFdSSVRFXzEwKSkgewogCQkJCWNtZC0+ZGV2aWNlLT51c2VfMTBfZm9yX3J3ID0gMDsKLQkJCQkvKgotCQkJCSAqIFRoaXMgd2lsbCBjYXVzZSBhIHJldHJ5IHdpdGggYSA2LWJ5dGUKLQkJCQkgKiBjb21tYW5kLgorCQkJCS8qIFRoaXMgd2lsbCBjYXVzZSBhIHJldHJ5IHdpdGggYQorCQkJCSAqIDYtYnl0ZSBjb21tYW5kLgogCQkJCSAqLwogCQkJCXNjc2lfcmVxdWV1ZV9jb21tYW5kKHEsIGNtZCk7Ci0JCQkJcmVzdWx0ID0gMDsKKwkJCQlyZXR1cm47CiAJCQl9IGVsc2UgewogCQkJCXNjc2lfZW5kX3JlcXVlc3QoY21kLCAwLCB0aGlzX2NvdW50LCAxKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBOT1RfUkVBRFk6Ci0JCQkvKgotCQkJICogSWYgdGhlIGRldmljZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZworCQkJLyogSWYgdGhlIGRldmljZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZwogCQkJICogcmVhZHksIG9yIGhhcyBhIHRlbXBvcmFyeSBibG9ja2FnZSwgcmV0cnkuCiAJCQkgKi8KIAkJCWlmIChzc2hkci5hc2MgPT0gMHgwNCkgewpAQCAtMTAyMSw3ICsxMDAzLDcgQEAKIAkJCX0KIAkJCWlmICghKHJlcS0+ZmxhZ3MgJiBSRVFfUVVJRVQpKSB7CiAJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCi0JCQkJCSAgICJEZXZpY2Ugbm90IHJlYWR5OiAiKTsKKwkJCQkJICAgICJEZXZpY2Ugbm90IHJlYWR5OiAiKTsKIAkJCQlzY3NpX3ByaW50X3NlbnNlX2hkcigiIiwgJnNzaGRyKTsKIAkJCX0KIAkJCXNjc2lfZW5kX3JlcXVlc3QoY21kLCAwLCB0aGlzX2NvdW50LCAxKTsKQEAgLTEwMjksMjEgKzEwMTEsMjEgQEAKIAkJY2FzZSBWT0xVTUVfT1ZFUkZMT1c6CiAJCQlpZiAoIShyZXEtPmZsYWdzICYgUkVRX1FVSUVUKSkgewogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAotCQkJCQkgICAiVm9sdW1lIG92ZXJmbG93LCBDREI6ICIpOworCQkJCQkgICAgIlZvbHVtZSBvdmVyZmxvdywgQ0RCOiAiKTsKIAkJCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjbWQtPmRhdGFfY21uZCk7CiAJCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKIAkJCX0KLQkJCXNjc2lfZW5kX3JlcXVlc3QoY21kLCAwLCBibG9ja19ieXRlcywgMSk7CisJCQkvKiBTZWUgU1NDM3JYWCBvciBjdXJyZW50LiAqLworCQkJc2NzaV9lbmRfcmVxdWVzdChjbWQsIDAsIHRoaXNfY291bnQsIDEpOwogCQkJcmV0dXJuOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KLQl9CQkJLyogZHJpdmVyIGJ5dGUgIT0gMCAqLworCX0KIAlpZiAoaG9zdF9ieXRlKHJlc3VsdCkgPT0gRElEX1JFU0VUKSB7Ci0JCS8qCi0JCSAqIFRoaXJkIHBhcnR5IGJ1cyByZXNldCBvciByZXNldCBmb3IgZXJyb3IKLQkJICogcmVjb3ZlcnkgcmVhc29ucy4gIEp1c3QgcmV0cnkgdGhlIHJlcXVlc3QKLQkJICogYW5kIHNlZSB3aGF0IGhhcHBlbnMuICAKKwkJLyogVGhpcmQgcGFydHkgYnVzIHJlc2V0IG9yIHJlc2V0IGZvciBlcnJvciByZWNvdmVyeQorCQkgKiByZWFzb25zLiAgSnVzdCByZXRyeSB0aGUgcmVxdWVzdCBhbmQgc2VlIHdoYXQKKwkJICogaGFwcGVucy4KIAkJICovCiAJCXNjc2lfcmVxdWV1ZV9jb21tYW5kKHEsIGNtZCk7CiAJCXJldHVybjsKQEAgLTEwNTEsMjEgKzEwMzMsMTMgQEAKIAlpZiAocmVzdWx0KSB7CiAJCWlmICghKHJlcS0+ZmxhZ3MgJiBSRVFfUVVJRVQpKSB7CiAJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwKLQkJCQkgICAiU0NTSSBlcnJvcjogcmV0dXJuIGNvZGUgPSAweCV4XG4iLCByZXN1bHQpOwotCisJCQkJICAgICJTQ1NJIGVycm9yOiByZXR1cm4gY29kZSA9IDB4JTA4eFxuIiwKKwkJCQkgICAgcmVzdWx0KTsKIAkJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQogCQkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7CiAJCX0KLQkJLyoKLQkJICogTWFyayBhIHNpbmdsZSBidWZmZXIgYXMgbm90IHVwdG9kYXRlLiAgUXVldWUgdGhlIHJlbWFpbmRlci4KLQkJICogV2Ugc29tZXRpbWVzIGdldCB0aGlzIGNydWZ0IGluIHRoZSBldmVudCB0aGF0IGEgbWVkaXVtIGVycm9yCi0JCSAqIGlzbid0IHByb3Blcmx5IHJlcG9ydGVkLgotCQkgKi8KLQkJYmxvY2tfYnl0ZXMgPSByZXEtPmhhcmRfY3VyX3NlY3RvcnMgPDwgOTsKLQkJaWYgKCFibG9ja19ieXRlcykKLQkJCWJsb2NrX2J5dGVzID0gcmVxLT5kYXRhX2xlbjsKLQkJc2NzaV9lbmRfcmVxdWVzdChjbWQsIDAsIGJsb2NrX2J5dGVzLCAxKTsKIAl9CisJc2NzaV9lbmRfcmVxdWVzdChjbWQsIDAsIHRoaXNfY291bnQsICFyZXN1bHQpOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2lvX2NvbXBsZXRpb24pOwogCkBAIC0xMTY5LDcgKzExNDMsNyBAQAogCSAqIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBpcyBhIFJFUV9CTE9DS19QQyBjb21tYW5kIHRoZQogCSAqIGNhbGxlciBzaG91bGQgY2hlY2sgdGhlIHJlcXVlc3QncyBlcnJvcnMgdmFsdWUKIAkgKi8KLQlzY3NpX2lvX2NvbXBsZXRpb24oY21kLCBjbWQtPmJ1ZmZsZW4sIDApOworCXNjc2lfaW9fY29tcGxldGlvbihjbWQsIGNtZC0+YnVmZmxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQpAQCAtMjA1MCw2ICsyMDI0LDcgQEAKIAkJc3dpdGNoIChvbGRzdGF0ZSkgewogCQljYXNlIFNERVZfQ1JFQVRFRDoKIAkJY2FzZSBTREVWX1JVTk5JTkc6CisJCWNhc2UgU0RFVl9RVUlFU0NFOgogCQljYXNlIFNERVZfT0ZGTElORToKIAkJY2FzZSBTREVWX0JMT0NLOgogCQkJYnJlYWs7CkBAIC0yMDYwLDYgKzIwMzUsOSBAQAogCiAJY2FzZSBTREVWX0RFTDoKIAkJc3dpdGNoIChvbGRzdGF0ZSkgeworCQljYXNlIFNERVZfQ1JFQVRFRDoKKwkJY2FzZSBTREVWX1JVTk5JTkc6CisJCWNhc2UgU0RFVl9PRkZMSU5FOgogCQljYXNlIFNERVZfQ0FOQ0VMOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmgKaW5kZXggYTNlMmFmNi4uMWY2NTEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbG9nZ2luZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xvZ2dpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NDU0lfTE9HR0lOR19ICiAjZGVmaW5lIF9TQ1NJX0xPR0dJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGRlZmluZXMgdGhlIHNjc2kgbG9nZ2luZyBmZWF0dXJlLiAgSXQgaXMgYSBtZWFucyBieSB3aGljaCB0aGUgdXNlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCmluZGV4IGExNzI3YTAuLmUyZmJlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9TQ1NJX1BSSVZfSAogI2RlZmluZSBfU0NTSV9QUklWX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKQEAgLTExNyw3ICsxMTYsNyBAQAogICogY2xhc3Nlcy4KICAqLwogCi0jZGVmaW5lIFNDU0lfREVWSUNFX0JMT0NLX01BWF9USU1FT1VUCShIWio2MCkKKyNkZWZpbmUgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQJNjAwCS8qIHVuaXRzIGluIHNlY29uZHMgKi8KIGV4dGVybiBpbnQgc2NzaV9pbnRlcm5hbF9kZXZpY2VfYmxvY2soc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIGV4dGVybiBpbnQgc2NzaV9pbnRlcm5hbF9kZXZpY2VfdW5ibG9jayhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCmluZGV4IGQ3NmU2ZTMuLmUxZWRhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCkBAIC0yLDcgKzIsOCBAQAogI2RlZmluZSBfU0NTSV9TQVNfSU5URVJOQUxfSAogCiAjZGVmaW5lIFNBU19IT1NUX0FUVFJTCQkwCi0jZGVmaW5lIFNBU19QT1JUX0FUVFJTCQkxNworI2RlZmluZSBTQVNfUEhZX0FUVFJTCQkxNworI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMQogI2RlZmluZSBTQVNfUlBPUlRfQVRUUlMJCTcKICNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJMwogI2RlZmluZSBTQVNfRVhQQU5ERVJfQVRUUlMJNwpAQCAtMTMsMTIgKzE0LDE0IEBACiAJc3RydWN0IHNhc19kb21haW5fZnVuY3Rpb25fdGVtcGxhdGUgKmRmdDsKIAogCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSU107Ci0Jc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9waHlfYXR0cnNbU0FTX1BPUlRfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcGh5X2F0dHJzW1NBU19QSFlfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcG9ydF9hdHRyc1tTQVNfUE9SVF9BVFRSU107CiAJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9ycGh5X2F0dHJzW1NBU19SUE9SVF9BVFRSU107CiAJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgcHJpdmF0ZV9lbmRfZGV2X2F0dHJzW1NBU19FTkRfREVWX0FUVFJTXTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2V4cGFuZGVyX2F0dHJzW1NBU19FWFBBTkRFUl9BVFRSU107CiAKIAlzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciBwaHlfYXR0cl9jb250OworCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHBvcnRfYXR0cl9jb250OwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHJwaHlfYXR0cl9jb250OwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGVuZF9kZXZfYXR0cl9jb250OwogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIGV4cGFuZGVyX2F0dHJfY29udDsKQEAgLTI4LDcgKzMxLDggQEAKIAkgKiBuZWVkZWQgYnkgc2NzaV9zeXNmcy5jCiAJICovCiAJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmhvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlMgKyAxXTsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnBoeV9hdHRyc1tTQVNfUEhZX0FUVFJTICsgMV07CisJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnBvcnRfYXR0cnNbU0FTX1BPUlRfQVRUUlMgKyAxXTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlMgKyAxXTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSUyArIDFdOwogCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpleHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlMgKyAxXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCAwZjdlNmY5Li4xYmQ5MmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAJCW9yIGEgTFVOIGlzIHNlZW4gdGhhdCBjYW5ub3QgaGF2ZSBhIGRldmljZSBhdHRhY2hlZCB0byBpdC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC04MTAsNiArODA5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNjc2lfZGVzdHJveV9zZGV2KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKKwlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9ERUwpOwogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKIAkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCA1ZWM3YTRmLi5lN2ZlNTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTYsNyArNiw2IEBACiAgKiBDcmVhdGVkIHRvIHB1bGwgU0NTSSBtaWQgbGF5ZXIgc3lzZnMgcm91dGluZXMgaW50byBvbmUgZmlsZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBmMmRiN2E0Li5iMDNhYTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAgKiAgIHNob3VsZCBpbnN1bGF0ZSB0aGUgbG9zcyBvZiBhIHJlbW90ZSBwb3J0LgogICogICBUaGUgbWF4aW11bSB3aWxsIGJlIGNhcHBlZCBieSB0aGUgdmFsdWUgb2YgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmNfZGV2X2xvc3NfdG1vID0gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGZjX2Rldl9sb3NzX3RtbyA9IDYwOwkJLyogc2Vjb25kcyAqLwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGV2X2xvc3NfdG1vLCBmY19kZXZfbG9zc190bW8sIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGV2X2xvc3NfdG1vLApAQCAtMTI4NCw3ICsxMjg0LDkgQEAKICAqIEB3b3JrOglXb3JrIHRvIHF1ZXVlIGZvciBleGVjdXRpb24uCiAgKgogICogUmV0dXJuIHZhbHVlOgotICogCTAgb24gc3VjY2VzcyAvICE9IDAgZm9yIGVycm9yCisgKiAJMSAtIHdvcmsgcXVldWVkIGZvciBleGVjdXRpb24KKyAqCTAgLSB3b3JrIGlzIGFscmVhZHkgcXVldWVkCisgKgktRUlOVkFMIC0gd29yayBxdWV1ZSBkb2Vzbid0IGV4aXN0CiAgKiovCiBzdGF0aWMgaW50CiBmY19xdWV1ZV93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xNDM0LDggKzE0MzYsNiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMTQ3Niw3ICsxNDc2LDggQEAKIAl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOwogCWRldmljZV9kZWwoZGV2KTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKLQlwdXRfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsJLyogZm9yIGZjX2hvc3QtPnJwb3J0IGxpc3QgKi8KKwlwdXRfZGV2aWNlKGRldik7CQkJLyogZm9yIHNlbGYtcmVmZXJlbmNlICovCiB9CiAKIApAQCAtMTUzNywxMyArMTUzOCwxMyBAQAogCWVsc2UKIAkJcnBvcnQtPnNjc2lfdGFyZ2V0X2lkID0gLTE7CiAJbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnBlZXJzLCAmZmNfaG9zdC0+cnBvcnRzKTsKLQlnZXRfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKKwlnZXRfZGV2aWNlKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsJLyogZm9yIGZjX2hvc3QtPnJwb3J0IGxpc3QgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJZGV2ID0gJnJwb3J0LT5kZXY7Ci0JZGV2aWNlX2luaXRpYWxpemUoZGV2KTsKLQlkZXYtPnBhcmVudCA9IGdldF9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOworCWRldmljZV9pbml0aWFsaXplKGRldik7CQkJLyogdGFrZXMgc2VsZiByZWZlcmVuY2UgKi8KKwlkZXYtPnBhcmVudCA9IGdldF9kZXZpY2UoJnNob3N0LT5zaG9zdF9nZW5kZXYpOyAvKiBwYXJlbnQgcmVmZXJlbmNlICovCiAJZGV2LT5yZWxlYXNlID0gZmNfcnBvcnRfZGV2X3JlbGVhc2U7CiAJc3ByaW50ZihkZXYtPmJ1c19pZCwgInJwb3J0LSVkOiVkLSVkIiwKIAkJc2hvc3QtPmhvc3Rfbm8sIGNoYW5uZWwsIHJwb3J0LT5udW1iZXIpOwpAQCAtMTU2NywxMCArMTU2OCw5IEBACiAKIGRlbGV0ZV9ycG9ydDoKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKLQlwdXRfZGV2aWNlKGRldi0+cGFyZW50KTsKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJnJwb3J0LT5wZWVycyk7Ci0JcHV0X2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7CisJcHV0X2RldmljZSgmc2hvc3QtPnNob3N0X2dlbmRldik7CS8qIGZvciBmY19ob3N0LT5ycG9ydCBsaXN0ICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcHV0X2RldmljZShkZXYtPnBhcmVudCk7CiAJa2ZyZWUocnBvcnQpOwpAQCAtMTcwNyw2ICsxNzA3LDggQEAKIAogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCisJCQkJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CisKIAkJCQlyZXR1cm4gcnBvcnQ7CiAJCQl9CiAJCX0KQEAgLTE3NjIsOSArMTc2NCwxMCBAQAogCQkJCS8qIGluaXRpYXRlIGEgc2NhbiBvZiB0aGUgdGFyZ2V0ICovCiAJCQkJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX1NDQU5fUEVORElORzsKIAkJCQlzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c2Nhbl93b3JrKTsKLQkJCX0KLQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQkJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CisJCQl9IGVsc2UKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCQkJcmV0dXJuIHJwb3J0OwogCQl9CkBAIC0xOTM4LDYgKzE5NDEsNyBAQAogCQlycG9ydC0+ZmxhZ3MgfD0gRkNfUlBPUlRfU0NBTl9QRU5ESU5HOwogCQlzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c2Nhbl93b3JrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyk7CkBAIC0xOTcwLDggKzE5NzQsOSBAQAogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcnBvcnQtPmRldiwKIAkJCSJibG9ja2VkIEZDIHJlbW90ZSBwb3J0IHRpbWUgb3V0OiBubyBsb25nZXIiCiAJCQkiIGEgRkNQIHRhcmdldCwgcmVtb3Zpbmcgc3RhcmdldFxuIik7Ci0JCWZjX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c3RndF9kZWxldGVfd29yayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKKwkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjAzNSwxNyArMjA0MCwxNSBAQAogCSAqIHdlbnQgYXdheSBhbmQgZGlkbid0IGNvbWUgYmFjayAtIHdlJ2xsIHJlbW92ZQogCSAqIGFsbCBhdHRhY2hlZCBzY3NpIGRldmljZXMuCiAJICovCi0JZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrKTsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCisJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CisJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrKTsKIH0KIAogLyoqCiAgKiBmY19zY3NpX3NjYW5fcnBvcnQgLSBjYWxsZWQgdG8gcGVyZm9ybSBhIHNjc2kgc2NhbiBvbiBhIHJlbW90ZSBwb3J0LgogICoKLSAqIFdpbGwgdW5ibG9jayB0aGUgdGFyZ2V0IChpbiBjYXNlIGl0IHdlbnQgYXdheSBhbmQgaGFzIG5vdyBjb21lIGJhY2spLAotICogdGhlbiBpbnZva2UgYSBzY2FuLgotICoKICAqIEBkYXRhOglyZW1vdGUgcG9ydCB0byBiZSBzY2FubmVkLgogICoqLwogc3RhdGljIHZvaWQKQEAgLTIwNTcsNyArMjA2MCw2IEBACiAKIAlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9PTkxJTkUpICYmCiAJICAgIChycG9ydC0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKSB7Ci0JCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOwogCQlzY3NpX3NjYW5fdGFyZ2V0KCZycG9ydC0+ZGV2LCBycG9ydC0+Y2hhbm5lbCwKIAkJCXJwb3J0LT5zY3NpX3RhcmdldF9pZCwgU0NBTl9XSUxEX0NBUkQsIDEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggNTU2OWZkYy4uN2I5ZThmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTIyOCwxNCArMjI4LDExIEBACiBzdGF0aWMgdm9pZCBpc2NzaV9zZXNzaW9uX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlzY3NpX2Rldl90b19zZXNzaW9uKGRldik7Ci0Jc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gc2Vzc2lvbi0+dHJhbnNwb3J0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCiAJc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24pOwogCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwotCWtmcmVlKHNlc3Npb24tPnRhcmdldG5hbWUpOwogCWtmcmVlKHNlc3Npb24pOwotCW1vZHVsZV9wdXQodHJhbnNwb3J0LT5vd25lcik7CiB9CiAKIHN0YXRpYyBpbnQgaXNjc2lfaXNfc2Vzc2lvbl9kZXYoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMjUxLDEwICsyNDgsOSBAQAogCiAJbXV0ZXhfbG9jaygmaWhvc3QtPm11dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlc3Npb24sICZpaG9zdC0+c2Vzc2lvbnMsIGhvc3RfbGlzdCkgewotCQlpZiAoKGNoYW5uZWwgPT0gU0NBTl9XSUxEX0NBUkQgfHwKLQkJICAgICBjaGFubmVsID09IHNlc3Npb24tPmNoYW5uZWwpICYmCisJCWlmICgoY2hhbm5lbCA9PSBTQ0FOX1dJTERfQ0FSRCB8fCBjaGFubmVsID09IDApICYmCiAJCSAgICAoaWQgPT0gU0NBTl9XSUxEX0NBUkQgfHwgaWQgPT0gc2Vzc2lvbi0+dGFyZ2V0X2lkKSkKLQkJCXNjc2lfc2Nhbl90YXJnZXQoJnNlc3Npb24tPmRldiwgc2Vzc2lvbi0+Y2hhbm5lbCwKKwkJCXNjc2lfc2Nhbl90YXJnZXQoJnNlc3Npb24tPmRldiwgMCwKIAkJCQkJIHNlc3Npb24tPnRhcmdldF9pZCwgbHVuLCAxKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpaG9zdC0+bXV0ZXgpOwpAQCAtMjkxLDYgKzI4Nyw2NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfYmxvY2tfc2Vzc2lvbik7CiAKK3N0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCitpc2NzaV9hbGxvY19zZXNzaW9uKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkgICAgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbjsKKworCXNlc3Npb24gPSBremFsbG9jKHNpemVvZigqc2Vzc2lvbikgKyB0cmFuc3BvcnQtPnNlc3Npb25kYXRhX3NpemUsCisJCQkgIEdGUF9LRVJORUwpOworCWlmICghc2Vzc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXNzaW9uLT50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7CisJc2Vzc2lvbi0+cmVjb3ZlcnlfdG1vID0gMTIwOworCUlOSVRfV09SSygmc2Vzc2lvbi0+cmVjb3Zlcnlfd29yaywgc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCwgc2Vzc2lvbik7CisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPmhvc3RfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPnNlc3NfbGlzdCk7CisKKwkvKiB0aGlzIGlzIHJlbGVhc2VkIGluIHRoZSBkZXYncyByZWxlYXNlIGZ1bmN0aW9uICovCisJc2NzaV9ob3N0X2dldChzaG9zdCk7CisJc2Vzc2lvbi0+ZGV2LnBhcmVudCA9ICZzaG9zdC0+c2hvc3RfZ2VuZGV2OworCXNlc3Npb24tPmRldi5yZWxlYXNlID0gaXNjc2lfc2Vzc2lvbl9yZWxlYXNlOworCWRldmljZV9pbml0aWFsaXplKCZzZXNzaW9uLT5kZXYpOworCWlmICh0cmFuc3BvcnQtPnNlc3Npb25kYXRhX3NpemUpCisJCXNlc3Npb24tPmRkX2RhdGEgPSAmc2Vzc2lvblsxXTsKKwlyZXR1cm4gc2Vzc2lvbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2FsbG9jX3Nlc3Npb24pOworCitpbnQgaXNjc2lfYWRkX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uLCB1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKKwlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3Q7CisJaW50IGVycjsKKworCWlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7CisJc2Vzc2lvbi0+c2lkID0gaXNjc2lfc2Vzc2lvbl9ucisrOworCXNlc3Npb24tPnRhcmdldF9pZCA9IHRhcmdldF9pZDsKKworCXNucHJpbnRmKHNlc3Npb24tPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAic2Vzc2lvbiV1IiwKKwkJIHNlc3Npb24tPnNpZCk7CisJZXJyID0gZGV2aWNlX2FkZCgmc2Vzc2lvbi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZzZXNzaW9uLT5kZXYsICJpc2NzaTogY291bGQgbm90ICIKKwkJCSAgICJyZWdpc3RlciBzZXNzaW9uJ3MgZGV2XG4iKTsKKwkJZ290byByZWxlYXNlX2hvc3Q7CisJfQorCXRyYW5zcG9ydF9yZWdpc3Rlcl9kZXZpY2UoJnNlc3Npb24tPmRldik7CisKKwltdXRleF9sb2NrKCZpaG9zdC0+bXV0ZXgpOworCWxpc3RfYWRkKCZzZXNzaW9uLT5ob3N0X2xpc3QsICZpaG9zdC0+c2Vzc2lvbnMpOworCW11dGV4X3VubG9jaygmaWhvc3QtPm11dGV4KTsKKwlyZXR1cm4gMDsKKworcmVsZWFzZV9ob3N0OgorCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9hZGRfc2Vzc2lvbik7CisKIC8qKgogICogaXNjc2lfY3JlYXRlX3Nlc3Npb24gLSBjcmVhdGUgaXNjc2kgY2xhc3Mgc2Vzc2lvbgogICogQHNob3N0OiBzY3NpIGhvc3QKQEAgLTMwMCw3MSArMzU1LDI0IEBACiAgKiovCiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgogaXNjc2lfY3JlYXRlX3Nlc3Npb24oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCSAgICAgc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgY2hhbm5lbCkKKwkJICAgICBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCSAgICAgdW5zaWduZWQgaW50IHRhcmdldF9pZCkKIHsKLQlzdHJ1Y3QgaXNjc2lfaG9zdCAqaWhvc3Q7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uOwotCWludCBlcnI7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHRyYW5zcG9ydC0+b3duZXIpKQorCXNlc3Npb24gPSBpc2NzaV9hbGxvY19zZXNzaW9uKHNob3N0LCB0cmFuc3BvcnQpOworCWlmICghc2Vzc2lvbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlzZXNzaW9uID0ga3phbGxvYyhzaXplb2YoKnNlc3Npb24pICsgdHJhbnNwb3J0LT5zZXNzaW9uZGF0YV9zaXplLAotCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXNlc3Npb24pCi0JCWdvdG8gbW9kdWxlX3B1dDsKLQlzZXNzaW9uLT50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7Ci0Jc2Vzc2lvbi0+cmVjb3ZlcnlfdG1vID0gMTIwOwotCUlOSVRfV09SSygmc2Vzc2lvbi0+cmVjb3Zlcnlfd29yaywgc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCwgc2Vzc2lvbik7Ci0JSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPmhvc3RfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPnNlc3NfbGlzdCk7Ci0KLQlpZiAodHJhbnNwb3J0LT5zZXNzaW9uZGF0YV9zaXplKQotCQlzZXNzaW9uLT5kZF9kYXRhID0gJnNlc3Npb25bMV07Ci0KLQkvKiB0aGlzIGlzIHJlbGVhc2VkIGluIHRoZSBkZXYncyByZWxlYXNlIGZ1bmN0aW9uICovCi0Jc2NzaV9ob3N0X2dldChzaG9zdCk7Ci0JaWhvc3QgPSBzaG9zdC0+c2hvc3RfZGF0YTsKLQotCXNlc3Npb24tPnNpZCA9IGlzY3NpX3Nlc3Npb25fbnIrKzsKLQlzZXNzaW9uLT5jaGFubmVsID0gY2hhbm5lbDsKLQlzZXNzaW9uLT50YXJnZXRfaWQgPSBpaG9zdC0+bmV4dF90YXJnZXRfaWQrKzsKLQotCXNucHJpbnRmKHNlc3Npb24tPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAic2Vzc2lvbiV1IiwKLQkJIHNlc3Npb24tPnNpZCk7Ci0Jc2Vzc2lvbi0+ZGV2LnBhcmVudCA9ICZzaG9zdC0+c2hvc3RfZ2VuZGV2OwotCXNlc3Npb24tPmRldi5yZWxlYXNlID0gaXNjc2lfc2Vzc2lvbl9yZWxlYXNlOwotCWVyciA9IGRldmljZV9yZWdpc3Rlcigmc2Vzc2lvbi0+ZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZzZXNzaW9uLT5kZXYsICJpc2NzaTogY291bGQgbm90ICIKLQkJCSAgICJyZWdpc3RlciBzZXNzaW9uJ3MgZGV2XG4iKTsKLQkJZ290byBmcmVlX3Nlc3Npb247CisJaWYgKGlzY3NpX2FkZF9zZXNzaW9uKHNlc3Npb24sIHRhcmdldF9pZCkpIHsKKwkJaXNjc2lfZnJlZV9zZXNzaW9uKHNlc3Npb24pOworCQlyZXR1cm4gTlVMTDsKIAl9Ci0JdHJhbnNwb3J0X3JlZ2lzdGVyX2RldmljZSgmc2Vzc2lvbi0+ZGV2KTsKLQotCW11dGV4X2xvY2soJmlob3N0LT5tdXRleCk7Ci0JbGlzdF9hZGQoJnNlc3Npb24tPmhvc3RfbGlzdCwgJmlob3N0LT5zZXNzaW9ucyk7Ci0JbXV0ZXhfdW5sb2NrKCZpaG9zdC0+bXV0ZXgpOwotCiAJcmV0dXJuIHNlc3Npb247Ci0KLWZyZWVfc2Vzc2lvbjoKLQlrZnJlZShzZXNzaW9uKTsKLW1vZHVsZV9wdXQ6Ci0JbW9kdWxlX3B1dCh0cmFuc3BvcnQtPm93bmVyKTsKLQlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY3JlYXRlX3Nlc3Npb24pOwogCi0vKioKLSAqIGlzY3NpX2Rlc3Ryb3lfc2Vzc2lvbiAtIGRlc3Ryb3kgaXNjc2kgc2Vzc2lvbgotICogQHNlc3Npb246IGlzY3NpX3Nlc3Npb24KLSAqCi0gKiBDYW4gYmUgY2FsbGVkIGJ5IGEgTExEIG9yIGlzY3NpX3RyYW5zcG9ydC4gVGhlcmUgbXVzdCBub3QgYmUKLSAqIGFueSBydW5uaW5nIGNvbm5lY3Rpb25zLgotICoqLwotaW50IGlzY3NpX2Rlc3Ryb3lfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pCit2b2lkIGlzY3NpX3JlbW92ZV9zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7CiAJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7CkBAIC0zNzYsMTkgKzM4NCw4OCBAQAogCWxpc3RfZGVsKCZzZXNzaW9uLT5ob3N0X2xpc3QpOwogCW11dGV4X3VubG9jaygmaWhvc3QtPm11dGV4KTsKIAorCXNjc2lfcmVtb3ZlX3RhcmdldCgmc2Vzc2lvbi0+ZGV2KTsKKwogCXRyYW5zcG9ydF91bnJlZ2lzdGVyX2RldmljZSgmc2Vzc2lvbi0+ZGV2KTsKLQlkZXZpY2VfdW5yZWdpc3Rlcigmc2Vzc2lvbi0+ZGV2KTsKLQlyZXR1cm4gMDsKKwlkZXZpY2VfZGVsKCZzZXNzaW9uLT5kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcmVtb3ZlX3Nlc3Npb24pOworCit2b2lkIGlzY3NpX2ZyZWVfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pCit7CisJcHV0X2RldmljZSgmc2Vzc2lvbi0+ZGV2KTsKIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfZnJlZV9zZXNzaW9uKTsKKworLyoqCisgKiBpc2NzaV9kZXN0cm95X3Nlc3Npb24gLSBkZXN0cm95IGlzY3NpIHNlc3Npb24KKyAqIEBzZXNzaW9uOiBpc2NzaV9zZXNzaW9uCisgKgorICogQ2FuIGJlIGNhbGxlZCBieSBhIExMRCBvciBpc2NzaV90cmFuc3BvcnQuIFRoZXJlIG11c3Qgbm90IGJlCisgKiBhbnkgcnVubmluZyBjb25uZWN0aW9ucy4KKyAqKi8KK2ludCBpc2NzaV9kZXN0cm95X3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQoreworCWlzY3NpX3JlbW92ZV9zZXNzaW9uKHNlc3Npb24pOworCWlzY3NpX2ZyZWVfc2Vzc2lvbihzZXNzaW9uKTsKKwlyZXR1cm4gMDsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Rlc3Ryb3lfc2Vzc2lvbik7CiAKK3N0YXRpYyB2b2lkIG1lbXBvb2xfem9uZV9kZXN0cm95KHN0cnVjdCBtZW1wb29sX3pvbmUgKnpwKQoreworCW1lbXBvb2xfZGVzdHJveSh6cC0+cG9vbCk7CisJa2ZyZWUoenApOworfQorCitzdGF0aWMgdm9pZCoKK21lbXBvb2xfem9uZV9hbGxvY19za2IoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSkKK3sKKwlzdHJ1Y3QgbWVtcG9vbF96b25lICp6b25lID0gcG9vbF9kYXRhOworCisJcmV0dXJuIGFsbG9jX3NrYih6b25lLT5zaXplLCBnZnBfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkCittZW1wb29sX3pvbmVfZnJlZV9za2Iodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKQoreworCWtmcmVlX3NrYihlbGVtZW50KTsKK30KKworc3RhdGljIHN0cnVjdCBtZW1wb29sX3pvbmUgKgorbWVtcG9vbF96b25lX2luaXQodW5zaWduZWQgbWF4LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBoaXdhdCkKK3sKKwlzdHJ1Y3QgbWVtcG9vbF96b25lICp6cDsKKworCXpwID0ga3phbGxvYyhzaXplb2YoKnpwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6cCkKKwkJcmV0dXJuIE5VTEw7CisKKwl6cC0+c2l6ZSA9IHNpemU7CisJenAtPmhpd2F0ID0gaGl3YXQ7CisJSU5JVF9MSVNUX0hFQUQoJnpwLT5mcmVlcXVldWUpOworCXNwaW5fbG9ja19pbml0KCZ6cC0+ZnJlZWxvY2spOworCWF0b21pY19zZXQoJnpwLT5hbGxvY2F0ZWQsIDApOworCisJenAtPnBvb2wgPSBtZW1wb29sX2NyZWF0ZShtYXgsIG1lbXBvb2xfem9uZV9hbGxvY19za2IsCisJCQkJICBtZW1wb29sX3pvbmVfZnJlZV9za2IsIHpwKTsKKwlpZiAoIXpwLT5wb29sKSB7CisJCWtmcmVlKHpwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHpwOworfQorCiBzdGF0aWMgdm9pZCBpc2NzaV9jb25uX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiA9IGlzY3NpX2Rldl90b19jb25uKGRldik7CiAJc3RydWN0IGRldmljZSAqcGFyZW50ID0gY29ubi0+ZGV2LnBhcmVudDsKIAotCWtmcmVlKGNvbm4tPnBlcnNpc3RlbnRfYWRkcmVzcyk7CisJbWVtcG9vbF96b25lX2Rlc3Ryb3koY29ubi0+el9wZHUpOworCW1lbXBvb2xfem9uZV9kZXN0cm95KGNvbm4tPnpfZXJyb3IpOworCiAJa2ZyZWUoY29ubik7CiAJcHV0X2RldmljZShwYXJlbnQpOwogfQpAQCAtMzk4LDYgKzQ3NSwzMSBAQAogCXJldHVybiBkZXYtPnJlbGVhc2UgPT0gaXNjc2lfY29ubl9yZWxlYXNlOwogfQogCitzdGF0aWMgaW50IGlzY3NpX2NyZWF0ZV9ldmVudF9wb29scyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4pCit7CisJY29ubi0+el9wZHUgPSBtZW1wb29sX3pvbmVfaW5pdChaX01BWF9QRFUsCisJCQlOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlzY3NpX3VldmVudCkgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcikgKworCQkJCSAgICBERUZBVUxUX01BWF9SRUNWX0RBVEFfU0VHTUVOVF9MRU5HVEgpLAorCQkJWl9ISVdBVF9QRFUpOworCWlmICghY29ubi0+el9wZHUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgImlzY3NpOiBjYW4gbm90IGFsbG9jYXRlICIKKwkJCSAgICJwZHUgem9uZSBmb3IgbmV3IGNvbm5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb25uLT56X2Vycm9yID0gbWVtcG9vbF96b25lX2luaXQoWl9NQVhfRVJST1IsCisJCQlOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlzY3NpX3VldmVudCkpLAorCQkJWl9ISVdBVF9FUlJPUik7CisJaWYgKCFjb25uLT56X2Vycm9yKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZjb25uLT5kZXYsICJpc2NzaTogY2FuIG5vdCBhbGxvY2F0ZSAiCisJCQkgICAiZXJyb3Igem9uZSBmb3IgbmV3IGNvbm5cbiIpOworCQltZW1wb29sX3pvbmVfZGVzdHJveShjb25uLT56X3BkdSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpc2NzaV9jcmVhdGVfY29ubiAtIGNyZWF0ZSBpc2NzaSBjbGFzcyBjb25uZWN0aW9uCiAgKiBAc2Vzc2lvbjogaXNjc2kgY2xzIHNlc3Npb24KQEAgLTQzMCw5ICs1MzIsMTIgQEAKIAljb25uLT50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7CiAJY29ubi0+Y2lkID0gY2lkOwogCisJaWYgKGlzY3NpX2NyZWF0ZV9ldmVudF9wb29scyhjb25uKSkKKwkJZ290byBmcmVlX2Nvbm47CisKIAkvKiB0aGlzIGlzIHJlbGVhc2VkIGluIHRoZSBkZXYncyByZWxlYXNlIGZ1bmN0aW9uICovCiAJaWYgKCFnZXRfZGV2aWNlKCZzZXNzaW9uLT5kZXYpKQotCQlnb3RvIGZyZWVfY29ubjsKKwkJZ290byBmcmVlX2Nvbm5fcG9vbHM7CiAKIAlzbnByaW50Zihjb25uLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImNvbm5lY3Rpb24lZDoldSIsCiAJCSBzZXNzaW9uLT5zaWQsIGNpZCk7CkBAIC00NDksNiArNTU0LDggQEAKIAogcmVsZWFzZV9wYXJlbnRfcmVmOgogCXB1dF9kZXZpY2UoJnNlc3Npb24tPmRldik7CitmcmVlX2Nvbm5fcG9vbHM6CisKIGZyZWVfY29ubjoKIAlrZnJlZShjb25uKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTQ5NiwyMCArNjAzLDYgQEAKIAlyZXR1cm4gKHN0cnVjdCBsaXN0X2hlYWQgKikmc2tiLT5jYjsKIH0KIAotc3RhdGljIHZvaWQqCi1tZW1wb29sX3pvbmVfYWxsb2Nfc2tiKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCi17Ci0Jc3RydWN0IG1lbXBvb2xfem9uZSAqem9uZSA9IHBvb2xfZGF0YTsKLQotCXJldHVybiBhbGxvY19za2Ioem9uZS0+c2l6ZSwgZ2ZwX21hc2spOwotfQotCi1zdGF0aWMgdm9pZAotbWVtcG9vbF96b25lX2ZyZWVfc2tiKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSkKLXsKLQlrZnJlZV9za2IoZWxlbWVudCk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBtZW1wb29sX3pvbmVfY29tcGxldGUoc3RydWN0IG1lbXBvb2xfem9uZSAqem9uZSkKIHsKQEAgLTUyOSwzNyArNjIyLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5mcmVlbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IG1lbXBvb2xfem9uZSAqCi1tZW1wb29sX3pvbmVfaW5pdCh1bnNpZ25lZCBtYXgsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGhpd2F0KQotewotCXN0cnVjdCBtZW1wb29sX3pvbmUgKnpwOwotCi0JenAgPSBremFsbG9jKHNpemVvZigqenApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXpwKQotCQlyZXR1cm4gTlVMTDsKLQotCXpwLT5zaXplID0gc2l6ZTsKLQl6cC0+aGl3YXQgPSBoaXdhdDsKLQlJTklUX0xJU1RfSEVBRCgmenAtPmZyZWVxdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnpwLT5mcmVlbG9jayk7Ci0JYXRvbWljX3NldCgmenAtPmFsbG9jYXRlZCwgMCk7Ci0KLQl6cC0+cG9vbCA9IG1lbXBvb2xfY3JlYXRlKG1heCwgbWVtcG9vbF96b25lX2FsbG9jX3NrYiwKLQkJCQkgIG1lbXBvb2xfem9uZV9mcmVlX3NrYiwgenApOwotCWlmICghenAtPnBvb2wpIHsKLQkJa2ZyZWUoenApOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4genA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbXBvb2xfem9uZV9kZXN0cm95KHN0cnVjdCBtZW1wb29sX3pvbmUgKnpwKQotewotCW1lbXBvb2xfZGVzdHJveSh6cC0+cG9vbCk7Ci0Ja2ZyZWUoenApOwotfQotCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqCiBtZW1wb29sX3pvbmVfZ2V0X3NrYihzdHJ1Y3QgbWVtcG9vbF96b25lICp6b25lKQogewpAQCAtNTcyLDYgKzYzNCwyNyBAQAogfQogCiBzdGF0aWMgaW50Citpc2NzaV9icm9hZGNhc3Rfc2tiKHN0cnVjdCBtZW1wb29sX3pvbmUgKnpvbmUsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmM7CisKKwlza2JfZ2V0KHNrYik7CisJcmMgPSBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJjIDwgMCkgeworCQltZW1wb29sX2ZyZWUoc2tiLCB6b25lLT5wb29sKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaTogY2FuIG5vdCBicm9hZGNhc3Qgc2tiICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5mcmVlbG9jaywgZmxhZ3MpOworCUlOSVRfTElTVF9IRUFEKHNrYl90b19saChza2IpKTsKKwlsaXN0X2FkZChza2JfdG9fbGgoc2tiKSwgJnpvbmUtPmZyZWVxdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+ZnJlZWxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaXNjc2lfdW5pY2FzdF9za2Ioc3RydWN0IG1lbXBvb2xfem9uZSAqem9uZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBpZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjY2LDcgKzc0OSw3IEBACiAJZXYtPnIuY29ubmVycm9yLmNpZCA9IGNvbm4tPmNpZDsKIAlldi0+ci5jb25uZXJyb3Iuc2lkID0gaXNjc2lfY29ubl9nZXRfc2lkKGNvbm4pOwogCi0JaXNjc2lfdW5pY2FzdF9za2IoY29ubi0+el9lcnJvciwgc2tiLCBwcml2LT5kYWVtb25fcGlkKTsKKwlpc2NzaV9icm9hZGNhc3Rfc2tiKGNvbm4tPnpfZXJyb3IsIHNrYik7CiAKIAlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmNvbm4tPmRldiwgImlzY3NpOiBkZXRlY3RlZCBjb25uIGVycm9yICglZClcbiIsCiAJCSAgIGVycm9yKTsKQEAgLTc2Nyw2ICs4NTAsMTMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoqCisgKiBpc2NzaV9pZl9kZXN0cm95X3Nlc3Npb25fZG9uZSAtIHNlbmQgc2Vzc2lvbiBkZXN0ci4gY29tcGxldGlvbiBldmVudAorICogQGNvbm46IGxhc3QgY29ubmVjdGlvbiBmb3Igc2Vzc2lvbgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IEhXIGlzY3NpIExMRHMgdG8gbm90aWZ5IHVzZXJwc2FjZSB0aGF0IGl0cyBIVyBoYXMKKyAqIHJlbW92ZWQgYSBzZXNzaW9uLgorICoqLworaW50IGlzY3NpX2lmX2Rlc3Ryb3lfc2Vzc2lvbl9kb25lKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubikKK3sKKwlzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwgKnByaXY7CisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBpc2NzaV91ZXZlbnQgKmV2OworCXN0cnVjdCBza19idWZmICAqc2tiOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjLCBsZW4gPSBOTE1TR19TUEFDRShzaXplb2YoKmV2KSk7CisKKwlwcml2ID0gaXNjc2lfaWZfdHJhbnNwb3J0X2xvb2t1cChjb25uLT50cmFuc3BvcnQpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZXNzaW9uID0gaXNjc2lfZGV2X3RvX3Nlc3Npb24oY29ubi0+ZGV2LnBhcmVudCk7CisJc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24pOworCisJbWVtcG9vbF96b25lX2NvbXBsZXRlKGNvbm4tPnpfcGR1KTsKKworCXNrYiA9IG1lbXBvb2xfem9uZV9nZXRfc2tiKGNvbm4tPnpfcGR1KTsKKwlpZiAoIXNrYikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2YgIgorCQkJICAic2Vzc2lvbiBjcmVhdGlvbiBldmVudFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW5saCA9IF9fbmxtc2dfcHV0KHNrYiwgcHJpdi0+ZGFlbW9uX3BpZCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApOworCWV2ID0gTkxNU0dfREFUQShubGgpOworCWV2LT50cmFuc3BvcnRfaGFuZGxlID0gaXNjc2lfaGFuZGxlKGNvbm4tPnRyYW5zcG9ydCk7CisJZXYtPnR5cGUgPSBJU0NTSV9LRVZFTlRfREVTVFJPWV9TRVNTSU9OOworCWV2LT5yLmRfc2Vzc2lvbi5ob3N0X25vID0gc2hvc3QtPmhvc3Rfbm87CisJZXYtPnIuZF9zZXNzaW9uLnNpZCA9IHNlc3Npb24tPnNpZDsKKworCS8qCisJICogdGhpcyB3aWxsIG9jY3VyIGlmIHRoZSBkYWVtb24gaXMgbm90IHVwLCBzbyB3ZSBqdXN0IHdhcm4KKwkgKiB0aGUgdXNlciBhbmQgd2hlbiB0aGUgZGFlbW9uIGlzIHJlc3RhcnRlZCBpdCB3aWxsIGhhbmRsZSBpdAorCSAqLworCXJjID0gaXNjc2lfYnJvYWRjYXN0X3NrYihjb25uLT56X3BkdSwgc2tiKTsKKwlpZiAocmMgPCAwKQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2YgIgorCQkJICAic2Vzc2lvbiBkZXN0cnVjdGlvbiBldmVudC4gQ2hlY2sgaXNjc2kgZGFlbW9uXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXNzbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZzZXNzaW9uLT5zZXNzX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Nsb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubmxvY2ssIGZsYWdzKTsKKwljb25uLT5hY3RpdmUgPSAwOworCWxpc3RfZGVsKCZjb25uLT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9pZl9kZXN0cm95X3Nlc3Npb25fZG9uZSk7CisKKy8qKgorICogaXNjc2lfaWZfY3JlYXRlX3Nlc3Npb25fZG9uZSAtIHNlbmQgc2Vzc2lvbiBjcmVhdGlvbiBjb21wbGV0aW9uIGV2ZW50CisgKiBAY29ubjogbGVhZGluZyBjb25uZWN0aW9uIGZvciBzZXNzaW9uCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgSFcgaXNjc2kgTExEcyB0byBub3RpZnkgdXNlcnBzYWNlIHRoYXQgaXRzIEhXIGhhcworICogY3JlYXRlZCBhIHNlc3Npb24gb3IgYSBleGlzdGluZyBzZXNzaW9uIGlzIGJhY2sgaW4gdGhlIGxvZ2dlZCBpbiBzdGF0ZS4KKyAqKi8KK2ludCBpc2NzaV9pZl9jcmVhdGVfc2Vzc2lvbl9kb25lKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubikKK3sKKwlzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwgKnByaXY7CisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBpc2NzaV91ZXZlbnQgKmV2OworCXN0cnVjdCBza19idWZmICAqc2tiOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjLCBsZW4gPSBOTE1TR19TUEFDRShzaXplb2YoKmV2KSk7CisKKwlwcml2ID0gaXNjc2lfaWZfdHJhbnNwb3J0X2xvb2t1cChjb25uLT50cmFuc3BvcnQpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZXNzaW9uID0gaXNjc2lfZGV2X3RvX3Nlc3Npb24oY29ubi0+ZGV2LnBhcmVudCk7CisJc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24pOworCisJbWVtcG9vbF96b25lX2NvbXBsZXRlKGNvbm4tPnpfcGR1KTsKKworCXNrYiA9IG1lbXBvb2xfem9uZV9nZXRfc2tiKGNvbm4tPnpfcGR1KTsKKwlpZiAoIXNrYikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2YgIgorCQkJICAic2Vzc2lvbiBjcmVhdGlvbiBldmVudFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW5saCA9IF9fbmxtc2dfcHV0KHNrYiwgcHJpdi0+ZGFlbW9uX3BpZCwgMCwgMCwgKGxlbiAtIHNpemVvZigqbmxoKSksIDApOworCWV2ID0gTkxNU0dfREFUQShubGgpOworCWV2LT50cmFuc3BvcnRfaGFuZGxlID0gaXNjc2lfaGFuZGxlKGNvbm4tPnRyYW5zcG9ydCk7CisJZXYtPnR5cGUgPSBJU0NTSV9VRVZFTlRfQ1JFQVRFX1NFU1NJT047CisJZXYtPnIuY19zZXNzaW9uX3JldC5ob3N0X25vID0gc2hvc3QtPmhvc3Rfbm87CisJZXYtPnIuY19zZXNzaW9uX3JldC5zaWQgPSBzZXNzaW9uLT5zaWQ7CisKKwkvKgorCSAqIHRoaXMgd2lsbCBvY2N1ciBpZiB0aGUgZGFlbW9uIGlzIG5vdCB1cCwgc28gd2UganVzdCB3YXJuCisJICogdGhlIHVzZXIgYW5kIHdoZW4gdGhlIGRhZW1vbiBpcyByZXN0YXJ0ZWQgaXQgd2lsbCBoYW5kbGUgaXQKKwkgKi8KKwlyYyA9IGlzY3NpX2Jyb2FkY2FzdF9za2IoY29ubi0+el9wZHUsIHNrYik7CisJaWYgKHJjIDwgMCkKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mICIKKwkJCSAgInNlc3Npb24gY3JlYXRpb24gZXZlbnQuIENoZWNrIGlzY3NpIGRhZW1vblxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmc2Vzc2lvbi0+c2Vzc19saXN0LCAmc2Vzc2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Nsb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmY29ubi0+Y29ubl9saXN0LCAmY29ubmxpc3QpOworCWNvbm4tPmFjdGl2ZSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9pZl9jcmVhdGVfc2Vzc2lvbl9kb25lKTsKKwogc3RhdGljIGludAogaXNjc2lfaWZfY3JlYXRlX3Nlc3Npb24oc3RydWN0IGlzY3NpX2ludGVybmFsICpwcml2LCBzdHJ1Y3QgaXNjc2lfdWV2ZW50ICpldikKIHsKQEAgLTgxMiwyNiArMTAyMCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWNvbm4tPnpfcGR1ID0gbWVtcG9vbF96b25lX2luaXQoWl9NQVhfUERVLAotCQkJTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpc2NzaV91ZXZlbnQpICsKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpICsKLQkJCQkgICAgREVGQVVMVF9NQVhfUkVDVl9EQVRBX1NFR01FTlRfTEVOR1RIKSwKLQkJCVpfSElXQVRfUERVKTsKLQlpZiAoIWNvbm4tPnpfcGR1KSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZjb25uLT5kZXYsICJpc2NzaTogY2FuIG5vdCBhbGxvY2F0ZSAiCi0JCQkgICAicGR1IHpvbmUgZm9yIG5ldyBjb25uXG4iKTsKLQkJZ290byBkZXN0cm95X2Nvbm47Ci0JfQotCi0JY29ubi0+el9lcnJvciA9IG1lbXBvb2xfem9uZV9pbml0KFpfTUFYX0VSUk9SLAotCQkJTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpc2NzaV91ZXZlbnQpKSwKLQkJCVpfSElXQVRfRVJST1IpOwotCWlmICghY29ubi0+el9lcnJvcikgewotCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiaXNjc2k6IGNhbiBub3QgYWxsb2NhdGUgIgotCQkJICAgImVycm9yIHpvbmUgZm9yIG5ldyBjb25uXG4iKTsKLQkJZ290byBmcmVlX3BkdV9wb29sOwotCX0KLQogCWV2LT5yLmNfY29ubl9yZXQuc2lkID0gc2Vzc2lvbi0+c2lkOwogCWV2LT5yLmNfY29ubl9yZXQuY2lkID0gY29ubi0+Y2lkOwogCkBAIC04NDEsMTMgKzEwMjksNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKLQotZnJlZV9wZHVfcG9vbDoKLQltZW1wb29sX3pvbmVfZGVzdHJveShjb25uLT56X3BkdSk7Ci1kZXN0cm95X2Nvbm46Ci0JaWYgKHRyYW5zcG9ydC0+ZGVzdHJveV9jb25uKQotCQl0cmFuc3BvcnQtPmRlc3Ryb3lfY29ubihjb25uLT5kZF9kYXRhKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludApAQCAtODU1LDcgKzEwMzYsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uOwotCXN0cnVjdCBtZW1wb29sX3pvbmUgKnpfZXJyb3IsICp6X3BkdTsKIAogCWNvbm4gPSBpc2NzaV9jb25uX2xvb2t1cChldi0+dS5kX2Nvbm4uc2lkLCBldi0+dS5kX2Nvbm4uY2lkKTsKIAlpZiAoIWNvbm4pCkBAIC04NjUsMzUgKzEwNDUsMTggQEAKIAlsaXN0X2RlbCgmY29ubi0+Y29ubl9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25ubG9jaywgZmxhZ3MpOwogCi0Jel9wZHUgPSBjb25uLT56X3BkdTsKLQl6X2Vycm9yID0gY29ubi0+el9lcnJvcjsKLQogCWlmICh0cmFuc3BvcnQtPmRlc3Ryb3lfY29ubikKIAkJdHJhbnNwb3J0LT5kZXN0cm95X2Nvbm4oY29ubik7Ci0KLQltZW1wb29sX3pvbmVfZGVzdHJveSh6X3BkdSk7Ci0JbWVtcG9vbF96b25lX2Rlc3Ryb3koel9lcnJvcik7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWlzY3NpX2NvcHlfcGFyYW0oc3RydWN0IGlzY3NpX3VldmVudCAqZXYsIHVpbnQzMl90ICp2YWx1ZSwgY2hhciAqZGF0YSkKLXsKLQlpZiAoZXYtPnUuc2V0X3BhcmFtLmxlbiAhPSBzaXplb2YodWludDMyX3QpKQotCQlCVUcoKTsKLQltZW1jcHkodmFsdWUsIGRhdGEsIG1pbl90KHVpbnQzMl90LCBzaXplb2YodWludDMyX3QpLAotCQlldi0+dS5zZXRfcGFyYW0ubGVuKSk7Ci19Ci0KIHN0YXRpYyBpbnQKIGlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBpc2NzaV91ZXZlbnQgKmV2KQogewogCWNoYXIgKmRhdGEgPSAoY2hhciopZXYgKyBzaXplb2YoKmV2KTsKIAlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm47CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uOwotCWludCBlcnIgPSAwOwotCXVpbnQzMl90IHZhbHVlID0gMDsKKwlpbnQgZXJyID0gMCwgdmFsdWUgPSAwOwogCiAJc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fbG9va3VwKGV2LT51LnNldF9wYXJhbS5zaWQpOwogCWNvbm4gPSBpc2NzaV9jb25uX2xvb2t1cChldi0+dS5zZXRfcGFyYW0uc2lkLCBldi0+dS5zZXRfcGFyYW0uY2lkKTsKQEAgLTkwMiw0MiArMTA2NSwxMyBAQAogCiAJc3dpdGNoIChldi0+dS5zZXRfcGFyYW0ucGFyYW0pIHsKIAljYXNlIElTQ1NJX1BBUkFNX1NFU1NfUkVDT1ZFUllfVE1POgotCQlpc2NzaV9jb3B5X3BhcmFtKGV2LCAmdmFsdWUsIGRhdGEpOworCQlzc2NhbmYoZGF0YSwgIiVkIiwgJnZhbHVlKTsKIAkJaWYgKHZhbHVlICE9IDApCiAJCQlzZXNzaW9uLT5yZWNvdmVyeV90bW8gPSB2YWx1ZTsKIAkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9UQVJHRVRfTkFNRToKLQkJLyogdGhpcyBzaG91bGQgbm90IGNoYW5nZSBiZXR3ZWVuIGxvZ2lucyAqLwotCQlpZiAoc2Vzc2lvbi0+dGFyZ2V0bmFtZSkKLQkJCXJldHVybiAwOwotCi0JCXNlc3Npb24tPnRhcmdldG5hbWUgPSBrc3RyZHVwKGRhdGEsIEdGUF9LRVJORUwpOwotCQlpZiAoIXNlc3Npb24tPnRhcmdldG5hbWUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9UUEdUOgotCQlpc2NzaV9jb3B5X3BhcmFtKGV2LCAmdmFsdWUsIGRhdGEpOwotCQlzZXNzaW9uLT50cGd0ID0gdmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgSVNDU0lfUEFSQU1fUEVSU0lTVEVOVF9QT1JUOgotCQlpc2NzaV9jb3B5X3BhcmFtKGV2LCAmdmFsdWUsIGRhdGEpOwotCQljb25uLT5wZXJzaXN0ZW50X3BvcnQgPSB2YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0NTSV9QQVJBTV9QRVJTSVNURU5UX0FERFJFU1M6Ci0JCS8qCi0JCSAqIHRoaXMgaXMgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaW4gZGlzY292ZXJ5IHNvIGl0IHNob3VsZAotCQkgKiBub3QgY2hhbmdlIGJldHdlZW4gbG9naW5zLgotCQkgKi8KLQkJaWYgKGNvbm4tPnBlcnNpc3RlbnRfYWRkcmVzcykKLQkJCXJldHVybiAwOwotCi0JCWNvbm4tPnBlcnNpc3RlbnRfYWRkcmVzcyA9IGtzdHJkdXAoZGF0YSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlzY3NpX2NvcHlfcGFyYW0oZXYsICZ2YWx1ZSwgZGF0YSk7Ci0JCWVyciA9IHRyYW5zcG9ydC0+c2V0X3BhcmFtKGNvbm4sIGV2LT51LnNldF9wYXJhbS5wYXJhbSwgdmFsdWUpOworCQllcnIgPSB0cmFuc3BvcnQtPnNldF9wYXJhbShjb25uLCBldi0+dS5zZXRfcGFyYW0ucGFyYW0sCisJCQkJCSAgIGRhdGEsIGV2LT51LnNldF9wYXJhbS5sZW4pOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC05NzgsNiArMTExMiwyMSBAQAogfQogCiBzdGF0aWMgaW50Citpc2NzaV90Z3RfZHNjdnIoc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQlzdHJ1Y3QgaXNjc2lfdWV2ZW50ICpldikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyOworCisJaWYgKCF0cmFuc3BvcnQtPnRndF9kc2N2cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNoYXIqKWV2ICsgc2l6ZW9mKCpldikpOworCXJldHVybiB0cmFuc3BvcnQtPnRndF9kc2N2cihldi0+dS50Z3RfZHNjdnIudHlwZSwKKwkJCQkgICAgZXYtPnUudGd0X2RzY3ZyLmhvc3Rfbm8sCisJCQkJICAgIGV2LT51LnRndF9kc2N2ci5lbmFibGUsIGRzdF9hZGRyKTsKK30KKworc3RhdGljIGludAogaXNjc2lfaWZfcmVjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpCiB7CiAJaW50IGVyciA9IDA7CkBAIC0xMDY1LDYgKzEyMTQsOSBAQAogCWNhc2UgSVNDU0lfVUVWRU5UX1RSQU5TUE9SVF9FUF9ESVNDT05ORUNUOgogCQllcnIgPSBpc2NzaV9pZl90cmFuc3BvcnRfZXAodHJhbnNwb3J0LCBldiwgbmxoLT5ubG1zZ190eXBlKTsKIAkJYnJlYWs7CisJY2FzZSBJU0NTSV9VRVZFTlRfVEdUX0RTQ1ZSOgorCQllcnIgPSBpc2NzaV90Z3RfZHNjdnIodHJhbnNwb3J0LCBldik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMTE0Nyw0OSArMTI5OSwzMSBAQAogLyoKICAqIGlTQ1NJIGNvbm5lY3Rpb24gYXR0cnMKICAqLwotI2RlZmluZSBpc2NzaV9jb25uX2ludF9hdHRyX3Nob3cocGFyYW0sIGZvcm1hdCkJCQkJXAorI2RlZmluZSBpc2NzaV9jb25uX2F0dHJfc2hvdyhwYXJhbSkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X2Nvbm5faW50X3BhcmFtXyMjcGFyYW0oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQlcCi17CQkJCQkJCQkJXAotCXVpbnQzMl90IHZhbHVlID0gMDsJCQkJCQlcCi0Jc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uID0gaXNjc2lfY2Rldl90b19jb25uKGNkZXYpOwkJXAotCXN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnQgPSBjb25uLT50cmFuc3BvcnQ7CQkJXAotCQkJCQkJCQkJXAotCXQtPmdldF9jb25uX3BhcmFtKGNvbm4sIHBhcmFtLCAmdmFsdWUpOwkJCQlcCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsIGZvcm1hdCJcbiIsIHZhbHVlKTsJCQlcCi19Ci0KLSNkZWZpbmUgaXNjc2lfY29ubl9pbnRfYXR0cihmaWVsZCwgcGFyYW0sIGZvcm1hdCkJCQlcCi0JaXNjc2lfY29ubl9pbnRfYXR0cl9zaG93KHBhcmFtLCBmb3JtYXQpCQkJCVwKLXN0YXRpYyBJU0NTSV9DTEFTU19BVFRSKGNvbm4sIGZpZWxkLCBTX0lSVUdPLCBzaG93X2Nvbm5faW50X3BhcmFtXyMjcGFyYW0sIFwKLQkJCU5VTEwpOwotCi1pc2NzaV9jb25uX2ludF9hdHRyKG1heF9yZWN2X2RsZW5ndGgsIElTQ1NJX1BBUkFNX01BWF9SRUNWX0RMRU5HVEgsICIldSIpOwotaXNjc2lfY29ubl9pbnRfYXR0cihtYXhfeG1pdF9kbGVuZ3RoLCBJU0NTSV9QQVJBTV9NQVhfWE1JVF9ETEVOR1RILCAiJXUiKTsKLWlzY3NpX2Nvbm5faW50X2F0dHIoaGVhZGVyX2RpZ2VzdCwgSVNDU0lfUEFSQU1fSERSREdTVF9FTiwgIiVkIik7Ci1pc2NzaV9jb25uX2ludF9hdHRyKGRhdGFfZGlnZXN0LCBJU0NTSV9QQVJBTV9EQVRBREdTVF9FTiwgIiVkIik7Ci1pc2NzaV9jb25uX2ludF9hdHRyKGlmbWFya2VyLCBJU0NTSV9QQVJBTV9JRk1BUktFUl9FTiwgIiVkIik7Ci1pc2NzaV9jb25uX2ludF9hdHRyKG9mbWFya2VyLCBJU0NTSV9QQVJBTV9PRk1BUktFUl9FTiwgIiVkIik7Ci1pc2NzaV9jb25uX2ludF9hdHRyKHBlcnNpc3RlbnRfcG9ydCwgSVNDU0lfUEFSQU1fUEVSU0lTVEVOVF9QT1JULCAiJWQiKTsKLWlzY3NpX2Nvbm5faW50X2F0dHIocG9ydCwgSVNDU0lfUEFSQU1fQ09OTl9QT1JULCAiJWQiKTsKLWlzY3NpX2Nvbm5faW50X2F0dHIoZXhwX3N0YXRzbiwgSVNDU0lfUEFSQU1fRVhQX1NUQVRTTiwgIiV1Iik7Ci0KLSNkZWZpbmUgaXNjc2lfY29ubl9zdHJfYXR0cl9zaG93KHBhcmFtKQkJCQkJXAotc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfY29ubl9zdHJfcGFyYW1fIyNwYXJhbShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCVwKK3Nob3dfY29ubl9wYXJhbV8jI3BhcmFtKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uID0gaXNjc2lfY2Rldl90b19jb25uKGNkZXYpOwkJXAogCXN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnQgPSBjb25uLT50cmFuc3BvcnQ7CQkJXAotCXJldHVybiB0LT5nZXRfY29ubl9zdHJfcGFyYW0oY29ubiwgcGFyYW0sIGJ1Zik7CQkJXAorCXJldHVybiB0LT5nZXRfY29ubl9wYXJhbShjb25uLCBwYXJhbSwgYnVmKTsJCQlcCiB9CiAKLSNkZWZpbmUgaXNjc2lfY29ubl9zdHJfYXR0cihmaWVsZCwgcGFyYW0pCQkJCVwKLQlpc2NzaV9jb25uX3N0cl9hdHRyX3Nob3cocGFyYW0pCQkJCQlcCi1zdGF0aWMgSVNDU0lfQ0xBU1NfQVRUUihjb25uLCBmaWVsZCwgU19JUlVHTywgc2hvd19jb25uX3N0cl9wYXJhbV8jI3BhcmFtLCBcCisjZGVmaW5lIGlzY3NpX2Nvbm5fYXR0cihmaWVsZCwgcGFyYW0pCQkJCQlcCisJaXNjc2lfY29ubl9hdHRyX3Nob3cocGFyYW0pCQkJCQlcCitzdGF0aWMgSVNDU0lfQ0xBU1NfQVRUUihjb25uLCBmaWVsZCwgU19JUlVHTywgc2hvd19jb25uX3BhcmFtXyMjcGFyYW0sCVwKIAkJCU5VTEwpOwogCi1pc2NzaV9jb25uX3N0cl9hdHRyKHBlcnNpc3RlbnRfYWRkcmVzcywgSVNDU0lfUEFSQU1fUEVSU0lTVEVOVF9BRERSRVNTKTsKLWlzY3NpX2Nvbm5fc3RyX2F0dHIoYWRkcmVzcywgSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTKTsKK2lzY3NpX2Nvbm5fYXR0cihtYXhfcmVjdl9kbGVuZ3RoLCBJU0NTSV9QQVJBTV9NQVhfUkVDVl9ETEVOR1RIKTsKK2lzY3NpX2Nvbm5fYXR0cihtYXhfeG1pdF9kbGVuZ3RoLCBJU0NTSV9QQVJBTV9NQVhfWE1JVF9ETEVOR1RIKTsKK2lzY3NpX2Nvbm5fYXR0cihoZWFkZXJfZGlnZXN0LCBJU0NTSV9QQVJBTV9IRFJER1NUX0VOKTsKK2lzY3NpX2Nvbm5fYXR0cihkYXRhX2RpZ2VzdCwgSVNDU0lfUEFSQU1fREFUQURHU1RfRU4pOworaXNjc2lfY29ubl9hdHRyKGlmbWFya2VyLCBJU0NTSV9QQVJBTV9JRk1BUktFUl9FTik7Citpc2NzaV9jb25uX2F0dHIob2ZtYXJrZXIsIElTQ1NJX1BBUkFNX09GTUFSS0VSX0VOKTsKK2lzY3NpX2Nvbm5fYXR0cihwZXJzaXN0ZW50X3BvcnQsIElTQ1NJX1BBUkFNX1BFUlNJU1RFTlRfUE9SVCk7Citpc2NzaV9jb25uX2F0dHIocG9ydCwgSVNDU0lfUEFSQU1fQ09OTl9QT1JUKTsKK2lzY3NpX2Nvbm5fYXR0cihleHBfc3RhdHNuLCBJU0NTSV9QQVJBTV9FWFBfU1RBVFNOKTsKK2lzY3NpX2Nvbm5fYXR0cihwZXJzaXN0ZW50X2FkZHJlc3MsIElTQ1NJX1BBUkFNX1BFUlNJU1RFTlRfQUREUkVTUyk7Citpc2NzaV9jb25uX2F0dHIoYWRkcmVzcywgSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTKTsKIAogI2RlZmluZSBpc2NzaV9jZGV2X3RvX3Nlc3Npb24oX2NkZXYpIFwKIAlpc2NzaV9kZXZfdG9fc2Vzc2lvbihfY2Rldi0+ZGV2KQpAQCAtMTE5Nyw2MSArMTMzMSwzNiBAQAogLyoKICAqIGlTQ1NJIHNlc3Npb24gYXR0cnMKICAqLwotI2RlZmluZSBpc2NzaV9zZXNzaW9uX2ludF9hdHRyX3Nob3cocGFyYW0sIGZvcm1hdCkJCQlcCisjZGVmaW5lIGlzY3NpX3Nlc3Npb25fYXR0cl9zaG93KHBhcmFtKQkJCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfc2Vzc2lvbl9pbnRfcGFyYW1fIyNwYXJhbShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0JdWludDMyX3QgdmFsdWUgPSAwOwkJCQkJCVwKLQlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24gPSBpc2NzaV9jZGV2X3RvX3Nlc3Npb24oY2Rldik7CVwKLQlzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICp0ID0gc2Vzc2lvbi0+dHJhbnNwb3J0OwkJCVwKLQkJCQkJCQkJCVwKLQl0LT5nZXRfc2Vzc2lvbl9wYXJhbShzZXNzaW9uLCBwYXJhbSwgJnZhbHVlKTsJCQlcCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsIGZvcm1hdCJcbiIsIHZhbHVlKTsJCQlcCi19Ci0KLSNkZWZpbmUgaXNjc2lfc2Vzc2lvbl9pbnRfYXR0cihmaWVsZCwgcGFyYW0sIGZvcm1hdCkJCQlcCi0JaXNjc2lfc2Vzc2lvbl9pbnRfYXR0cl9zaG93KHBhcmFtLCBmb3JtYXQpCQkJXAotc3RhdGljIElTQ1NJX0NMQVNTX0FUVFIoc2VzcywgZmllbGQsIFNfSVJVR08sIHNob3dfc2Vzc2lvbl9pbnRfcGFyYW1fIyNwYXJhbSwgXAotCQkJTlVMTCk7Ci0KLWlzY3NpX3Nlc3Npb25faW50X2F0dHIoaW5pdGlhbF9yMnQsIElTQ1NJX1BBUkFNX0lOSVRJQUxfUjJUX0VOLCAiJWQiKTsKLWlzY3NpX3Nlc3Npb25faW50X2F0dHIobWF4X291dHN0YW5kaW5nX3IydCwgSVNDU0lfUEFSQU1fTUFYX1IyVCwgIiVodSIpOwotaXNjc2lfc2Vzc2lvbl9pbnRfYXR0cihpbW1lZGlhdGVfZGF0YSwgSVNDU0lfUEFSQU1fSU1NX0RBVEFfRU4sICIlZCIpOwotaXNjc2lfc2Vzc2lvbl9pbnRfYXR0cihmaXJzdF9idXJzdF9sZW4sIElTQ1NJX1BBUkFNX0ZJUlNUX0JVUlNULCAiJXUiKTsKLWlzY3NpX3Nlc3Npb25faW50X2F0dHIobWF4X2J1cnN0X2xlbiwgSVNDU0lfUEFSQU1fTUFYX0JVUlNULCAiJXUiKTsKLWlzY3NpX3Nlc3Npb25faW50X2F0dHIoZGF0YV9wZHVfaW5fb3JkZXIsIElTQ1NJX1BBUkFNX1BEVV9JTk9SREVSX0VOLCAiJWQiKTsKLWlzY3NpX3Nlc3Npb25faW50X2F0dHIoZGF0YV9zZXFfaW5fb3JkZXIsIElTQ1NJX1BBUkFNX0RBVEFTRVFfSU5PUkRFUl9FTiwgIiVkIik7Ci1pc2NzaV9zZXNzaW9uX2ludF9hdHRyKGVybCwgSVNDU0lfUEFSQU1fRVJMLCAiJWQiKTsKLWlzY3NpX3Nlc3Npb25faW50X2F0dHIodHBndCwgSVNDU0lfUEFSQU1fVFBHVCwgIiVkIik7Ci0KLSNkZWZpbmUgaXNjc2lfc2Vzc2lvbl9zdHJfYXR0cl9zaG93KHBhcmFtKQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19zZXNzaW9uX3N0cl9wYXJhbV8jI3BhcmFtKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJXAorc2hvd19zZXNzaW9uX3BhcmFtXyMjcGFyYW0oc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlzY3NpX2NkZXZfdG9fc2Vzc2lvbihjZGV2KTsgXAogCXN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnQgPSBzZXNzaW9uLT50cmFuc3BvcnQ7CQkJXAotCXJldHVybiB0LT5nZXRfc2Vzc2lvbl9zdHJfcGFyYW0oc2Vzc2lvbiwgcGFyYW0sIGJ1Zik7CQlcCisJcmV0dXJuIHQtPmdldF9zZXNzaW9uX3BhcmFtKHNlc3Npb24sIHBhcmFtLCBidWYpOwkJXAogfQogCi0jZGVmaW5lIGlzY3NpX3Nlc3Npb25fc3RyX2F0dHIoZmllbGQsIHBhcmFtKQkJCQlcCi0JaXNjc2lfc2Vzc2lvbl9zdHJfYXR0cl9zaG93KHBhcmFtKQkJCQlcCi1zdGF0aWMgSVNDU0lfQ0xBU1NfQVRUUihzZXNzLCBmaWVsZCwgU19JUlVHTywgc2hvd19zZXNzaW9uX3N0cl9wYXJhbV8jI3BhcmFtLCBcCisjZGVmaW5lIGlzY3NpX3Nlc3Npb25fYXR0cihmaWVsZCwgcGFyYW0pCQkJCVwKKwlpc2NzaV9zZXNzaW9uX2F0dHJfc2hvdyhwYXJhbSkJCQkJCVwKK3N0YXRpYyBJU0NTSV9DTEFTU19BVFRSKHNlc3MsIGZpZWxkLCBTX0lSVUdPLCBzaG93X3Nlc3Npb25fcGFyYW1fIyNwYXJhbSwgXAogCQkJTlVMTCk7CiAKLWlzY3NpX3Nlc3Npb25fc3RyX2F0dHIodGFyZ2V0bmFtZSwgSVNDU0lfUEFSQU1fVEFSR0VUX05BTUUpOworaXNjc2lfc2Vzc2lvbl9hdHRyKHRhcmdldG5hbWUsIElTQ1NJX1BBUkFNX1RBUkdFVF9OQU1FKTsKK2lzY3NpX3Nlc3Npb25fYXR0cihpbml0aWFsX3IydCwgSVNDU0lfUEFSQU1fSU5JVElBTF9SMlRfRU4pOworaXNjc2lfc2Vzc2lvbl9hdHRyKG1heF9vdXRzdGFuZGluZ19yMnQsIElTQ1NJX1BBUkFNX01BWF9SMlQpOworaXNjc2lfc2Vzc2lvbl9hdHRyKGltbWVkaWF0ZV9kYXRhLCBJU0NTSV9QQVJBTV9JTU1fREFUQV9FTik7Citpc2NzaV9zZXNzaW9uX2F0dHIoZmlyc3RfYnVyc3RfbGVuLCBJU0NTSV9QQVJBTV9GSVJTVF9CVVJTVCk7Citpc2NzaV9zZXNzaW9uX2F0dHIobWF4X2J1cnN0X2xlbiwgSVNDU0lfUEFSQU1fTUFYX0JVUlNUKTsKK2lzY3NpX3Nlc3Npb25fYXR0cihkYXRhX3BkdV9pbl9vcmRlciwgSVNDU0lfUEFSQU1fUERVX0lOT1JERVJfRU4pOworaXNjc2lfc2Vzc2lvbl9hdHRyKGRhdGFfc2VxX2luX29yZGVyLCBJU0NTSV9QQVJBTV9EQVRBU0VRX0lOT1JERVJfRU4pOworaXNjc2lfc2Vzc2lvbl9hdHRyKGVybCwgSVNDU0lfUEFSQU1fRVJMKTsKK2lzY3NpX3Nlc3Npb25fYXR0cih0cGd0LCBJU0NTSV9QQVJBTV9UUEdUKTsKIAotLyoKLSAqIFByaXZhdGUgc2Vzc2lvbiBhbmQgY29ubiBhdHRycy4gdXNlcnNwYWNlIHVzZXMgc2V2ZXJhbCBpc2NzaSB2YWx1ZXMKLSAqIHRvIGlkZW50aWZ5IGVhY2ggc2Vzc2lvbiBiZXR3ZWVuIHJlYm9vdHMuIFNvbWUgb2YgdGhlc2UgdmFsdWVzIG1heSBub3QKLSAqIGJlIHByZXNlbnQgaW4gdGhlIGlzY3NpX3RyYW5zcG9ydC9MTEQgZHJpdmVyIGJlY3Vhc2UgdXNlcnNwYWNlIGhhbmRsZXMKLSAqIGxvZ2luIChhbmQgZmFpbGJhY2sgZm9yIGxvZ2luIHJlZGlyZWN0KSBzbyBmb3IgdGhlc2UgdHlwZSBvZiBkcml2ZXJzCi0gKiB0aGUgY2xhc3MgbWFuYWdlcyB0aGUgYXR0cnMgYW5kIHZhbHVlcyBmb3IgdGhlIGlzY3NpX3RyYW5zcG9ydC9MTEQKLSAqLwogI2RlZmluZSBpc2NzaV9wcml2X3Nlc3Npb25fYXR0cl9zaG93KGZpZWxkLCBmb3JtYXQpCQkJXAogc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKLXNob3dfcHJpdl9zZXNzaW9uXyMjZmllbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQlcCitzaG93X3ByaXZfc2Vzc2lvbl8jI2ZpZWxkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gaXNjc2lfY2Rldl90b19zZXNzaW9uKGNkZXYpOyBcCisJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uID0gaXNjc2lfY2Rldl90b19zZXNzaW9uKGNkZXYpO1wKIAlyZXR1cm4gc3ByaW50ZihidWYsIGZvcm1hdCJcbiIsIHNlc3Npb24tPmZpZWxkKTsJCVwKIH0KIApAQCAtMTI1OSwzMSArMTM2OCwxNSBAQAogCWlzY3NpX3ByaXZfc2Vzc2lvbl9hdHRyX3Nob3coZmllbGQsIGZvcm1hdCkJCQlcCiBzdGF0aWMgSVNDU0lfQ0xBU1NfQVRUUihwcml2X3Nlc3MsIGZpZWxkLCBTX0lSVUdPLCBzaG93X3ByaXZfc2Vzc2lvbl8jI2ZpZWxkLCBcCiAJCQlOVUxMKQotaXNjc2lfcHJpdl9zZXNzaW9uX2F0dHIodGFyZ2V0bmFtZSwgIiVzIik7Ci1pc2NzaV9wcml2X3Nlc3Npb25fYXR0cih0cGd0LCAiJWQiKTsKIGlzY3NpX3ByaXZfc2Vzc2lvbl9hdHRyKHJlY292ZXJ5X3RtbywgIiVkIik7CiAKLSNkZWZpbmUgaXNjc2lfcHJpdl9jb25uX2F0dHJfc2hvdyhmaWVsZCwgZm9ybWF0KQkJCVwKLXN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCi1zaG93X3ByaXZfY29ubl8jI2ZpZWxkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uID0gaXNjc2lfY2Rldl90b19jb25uKGNkZXYpOwkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgZm9ybWF0IlxuIiwgY29ubi0+ZmllbGQpOwkJCVwKLX0KLQotI2RlZmluZSBpc2NzaV9wcml2X2Nvbm5fYXR0cihmaWVsZCwgZm9ybWF0KQkJCQlcCi0JaXNjc2lfcHJpdl9jb25uX2F0dHJfc2hvdyhmaWVsZCwgZm9ybWF0KQkJCVwKLXN0YXRpYyBJU0NTSV9DTEFTU19BVFRSKHByaXZfY29ubiwgZmllbGQsIFNfSVJVR08sIHNob3dfcHJpdl9jb25uXyMjZmllbGQsIFwKLQkJCU5VTEwpCi1pc2NzaV9wcml2X2Nvbm5fYXR0cihwZXJzaXN0ZW50X2FkZHJlc3MsICIlcyIpOwotaXNjc2lfcHJpdl9jb25uX2F0dHIocGVyc2lzdGVudF9wb3J0LCAiJWQiKTsKLQogI2RlZmluZSBTRVRVUF9QUklWX1NFU1NJT05fUkRfQVRUUihmaWVsZCkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlwcml2LT5zZXNzaW9uX2F0dHJzW2NvdW50XSA9ICZjbGFzc19kZXZpY2VfYXR0cl9wcml2X3Nlc3NfIyNmaWVsZDsgXAogCWNvdW50Kys7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKKwogI2RlZmluZSBTRVRVUF9TRVNTSU9OX1JEX0FUVFIoZmllbGQsIHBhcmFtX2ZsYWcpCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAodHQtPnBhcmFtX21hc2sgJiBwYXJhbV9mbGFnKSB7CQkJCVwKQEAgLTEyOTIsMTIgKzEzODUsNiBAQAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU0VUVVBfUFJJVl9DT05OX1JEX0FUVFIoZmllbGQpCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCXByaXYtPmNvbm5fYXR0cnNbY291bnRdID0gJmNsYXNzX2RldmljZV9hdHRyX3ByaXZfY29ubl8jI2ZpZWxkOyBcCi0JY291bnQrKzsJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQogI2RlZmluZSBTRVRVUF9DT05OX1JEX0FUVFIoZmllbGQsIHBhcmFtX2ZsYWcpCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHR0LT5wYXJhbV9tYXNrICYgcGFyYW1fZmxhZykgewkJCQlcCkBAIC0xMzg4LDYgKzE0NzUsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmxpc3QpOworCXByaXYtPmRhZW1vbl9waWQgPSAtMTsKIAlwcml2LT5pc2NzaV90cmFuc3BvcnQgPSB0dDsKIAlwcml2LT50LnVzZXJfc2NhbiA9IGlzY3NpX3VzZXJfc2NhbjsKIApAQCAtMTQyNCwxNiArMTUxMiw4IEBACiAJU0VUVVBfQ09OTl9SRF9BVFRSKGFkZHJlc3MsIElTQ1NJX0NPTk5fQUREUkVTUyk7CiAJU0VUVVBfQ09OTl9SRF9BVFRSKHBvcnQsIElTQ1NJX0NPTk5fUE9SVCk7CiAJU0VUVVBfQ09OTl9SRF9BVFRSKGV4cF9zdGF0c24sIElTQ1NJX0VYUF9TVEFUU04pOwotCi0JaWYgKHR0LT5wYXJhbV9tYXNrICYgSVNDU0lfUEVSU0lTVEVOVF9BRERSRVNTKQotCQlTRVRVUF9DT05OX1JEX0FUVFIocGVyc2lzdGVudF9hZGRyZXNzLCBJU0NTSV9QRVJTSVNURU5UX0FERFJFU1MpOwotCWVsc2UKLQkJU0VUVVBfUFJJVl9DT05OX1JEX0FUVFIocGVyc2lzdGVudF9hZGRyZXNzKTsKLQotCWlmICh0dC0+cGFyYW1fbWFzayAmIElTQ1NJX1BFUlNJU1RFTlRfUE9SVCkKLQkJU0VUVVBfQ09OTl9SRF9BVFRSKHBlcnNpc3RlbnRfcG9ydCwgSVNDU0lfUEVSU0lTVEVOVF9QT1JUKTsKLQllbHNlCi0JCVNFVFVQX1BSSVZfQ09OTl9SRF9BVFRSKHBlcnNpc3RlbnRfcG9ydCk7CisJU0VUVVBfQ09OTl9SRF9BVFRSKHBlcnNpc3RlbnRfYWRkcmVzcywgSVNDU0lfUEVSU0lTVEVOVF9BRERSRVNTKTsKKwlTRVRVUF9DT05OX1JEX0FUVFIocGVyc2lzdGVudF9wb3J0LCBJU0NTSV9QRVJTSVNURU5UX1BPUlQpOwogCiAJQlVHX09OKGNvdW50ID4gSVNDU0lfQ09OTl9BVFRSUyk7CiAJcHJpdi0+Y29ubl9hdHRyc1tjb3VudF0gPSBOVUxMOwpAQCAtMTQ1MywxOCArMTUzMywxMCBAQAogCVNFVFVQX1NFU1NJT05fUkRfQVRUUihkYXRhX3BkdV9pbl9vcmRlciwgSVNDU0lfUERVX0lOT1JERVJfRU4pOwogCVNFVFVQX1NFU1NJT05fUkRfQVRUUihkYXRhX3NlcV9pbl9vcmRlciwgSVNDU0lfREFUQVNFUV9JTk9SREVSX0VOKTsKIAlTRVRVUF9TRVNTSU9OX1JEX0FUVFIoZXJsLCBJU0NTSV9FUkwpOworCVNFVFVQX1NFU1NJT05fUkRfQVRUUih0YXJnZXRuYW1lLCBJU0NTSV9UQVJHRVRfTkFNRSk7CisJU0VUVVBfU0VTU0lPTl9SRF9BVFRSKHRwZ3QsIElTQ1NJX1RQR1QpOwogCVNFVFVQX1BSSVZfU0VTU0lPTl9SRF9BVFRSKHJlY292ZXJ5X3Rtbyk7CiAKLQlpZiAodHQtPnBhcmFtX21hc2sgJiBJU0NTSV9UQVJHRVRfTkFNRSkKLQkJU0VUVVBfU0VTU0lPTl9SRF9BVFRSKHRhcmdldG5hbWUsIElTQ1NJX1RBUkdFVF9OQU1FKTsKLQllbHNlCi0JCVNFVFVQX1BSSVZfU0VTU0lPTl9SRF9BVFRSKHRhcmdldG5hbWUpOwotCi0JaWYgKHR0LT5wYXJhbV9tYXNrICYgSVNDU0lfVFBHVCkKLQkJU0VUVVBfU0VTU0lPTl9SRF9BVFRSKHRwZ3QsIElTQ1NJX1RQR1QpOwotCWVsc2UKLQkJU0VUVVBfUFJJVl9TRVNTSU9OX1JEX0FUVFIodHBndCk7Ci0KIAlCVUdfT04oY291bnQgPiBJU0NTSV9TRVNTSU9OX0FUVFJTKTsKIAlwcml2LT5zZXNzaW9uX2F0dHJzW2NvdW50XSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCAxZmU2YjJkLi5kZDA3NTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xNzQsMTIgKzE3NCwyOSBAQAogCiBzdGF0aWMgaW50IGRvX3Nhc19waHlfZGVsZXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlpZiAoc2NzaV9pc19zYXNfcGh5KGRldikpCisJaW50IHBhc3MgPSAoaW50KSh1bnNpZ25lZCBsb25nKWRhdGE7CisKKwlpZiAocGFzcyA9PSAwICYmIHNjc2lfaXNfc2FzX3BvcnQoZGV2KSkKKwkJc2FzX3BvcnRfZGVsZXRlKGRldl90b19zYXNfcG9ydChkZXYpKTsKKwllbHNlIGlmIChwYXNzID09IDEgJiYgc2NzaV9pc19zYXNfcGh5KGRldikpCiAJCXNhc19waHlfZGVsZXRlKGRldl90b19waHkoZGV2KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgorICogc2FzX3JlbW92ZV9jaGlsZHJlbiAgLS0gIHRlYXIgZG93biBhIGRldmljZXMgU0FTIGRhdGEgc3RydWN0dXJlcworICogQGRldjoJZGV2aWNlIGJlbG9uZ2luZyB0byB0aGUgc2FzIG9iamVjdAorICoKKyAqIFJlbW92ZXMgYWxsIFNBUyBQSFlzIGFuZCByZW1vdGUgUEhZcyBmb3IgYSBnaXZlbiBvYmplY3QKKyAqLwordm9pZCBzYXNfcmVtb3ZlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCAodm9pZCAqKTAsIGRvX3Nhc19waHlfZGVsZXRlKTsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCAodm9pZCAqKTEsIGRvX3Nhc19waHlfZGVsZXRlKTsKK30KK0VYUE9SVF9TWU1CT0woc2FzX3JlbW92ZV9jaGlsZHJlbik7CisKKy8qKgogICogc2FzX3JlbW92ZV9ob3N0ICAtLSAgdGVhciBkb3duIGEgU2NzaV9Ib3N0J3MgU0FTIGRhdGEgc3RydWN0dXJlcwogICogQHNob3N0OglTY3NpIEhvc3QgdGhhdCBpcyB0b3JuIGRvd24KICAqCkBAIC0xODgsMTMgKzIwNSwxMyBAQAogICovCiB2b2lkIHNhc19yZW1vdmVfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKLQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJnNob3N0LT5zaG9zdF9nZW5kZXYsIE5VTEwsIGRvX3Nhc19waHlfZGVsZXRlKTsKKwlzYXNfcmVtb3ZlX2NoaWxkcmVuKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JlbW92ZV9ob3N0KTsKIAogCiAvKgotICogU0FTIFBvcnQgYXR0cmlidXRlcworICogU0FTIFBoeSBhdHRyaWJ1dGVzCiAgKi8KIAogI2RlZmluZSBzYXNfcGh5X3Nob3dfc2ltcGxlKGZpZWxkLCBuYW1lLCBmb3JtYXRfc3RyaW5nLCBjYXN0KQkJXApAQCAtMzEwLDcgKzMyNyw3IEBACiBzYXNfcGh5X3NpbXBsZV9hdHRyKGlkZW50aWZ5LnNhc19hZGRyZXNzLCBzYXNfYWRkcmVzcywgIjB4JTAxNmxseFxuIiwKIAkJdW5zaWduZWQgbG9uZyBsb25nKTsKIHNhc19waHlfc2ltcGxlX2F0dHIoaWRlbnRpZnkucGh5X2lkZW50aWZpZXIsIHBoeV9pZGVudGlmaWVyLCAiJWRcbiIsIHU4KTsKLXNhc19waHlfc2ltcGxlX2F0dHIocG9ydF9pZGVudGlmaWVyLCBwb3J0X2lkZW50aWZpZXIsICIlZFxuIiwgdTgpOworLy9zYXNfcGh5X3NpbXBsZV9hdHRyKHBvcnRfaWRlbnRpZmllciwgcG9ydF9pZGVudGlmaWVyLCAiJWRcbiIsIHU4KTsKIHNhc19waHlfbGlua3NwZWVkX2F0dHIobmVnb3RpYXRlZF9saW5rcmF0ZSk7CiBzYXNfcGh5X2xpbmtzcGVlZF9hdHRyKG1pbmltdW1fbGlua3JhdGVfaHcpOwogc2FzX3BoeV9saW5rc3BlZWRfYXR0cihtaW5pbXVtX2xpbmtyYXRlKTsKQEAgLTM3OCw5ICszOTUsMTAgQEAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmcGh5LT5kZXYpOwogCXBoeS0+ZGV2LnBhcmVudCA9IGdldF9kZXZpY2UocGFyZW50KTsKIAlwaHktPmRldi5yZWxlYXNlID0gc2FzX3BoeV9yZWxlYXNlOworCUlOSVRfTElTVF9IRUFEKCZwaHktPnBvcnRfc2libGluZ3MpOwogCWlmIChzY3NpX2lzX3Nhc19leHBhbmRlcl9kZXZpY2UocGFyZW50KSkgewogCQlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSBkZXZfdG9fcnBoeShwYXJlbnQpOwotCQlzcHJpbnRmKHBoeS0+ZGV2LmJ1c19pZCwgInBoeS0lZC0lZDolZCIsIHNob3N0LT5ob3N0X25vLAorCQlzcHJpbnRmKHBoeS0+ZGV2LmJ1c19pZCwgInBoeS0lZDolZDolZCIsIHNob3N0LT5ob3N0X25vLAogCQkJcnBoeS0+c2NzaV90YXJnZXRfaWQsIG51bWJlcik7CiAJfSBlbHNlCiAJCXNwcmludGYocGh5LT5kZXYuYnVzX2lkLCAicGh5LSVkOiVkIiwgc2hvc3QtPmhvc3Rfbm8sIG51bWJlcik7CkBAIC00NDAsOCArNDU4LDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGh5LT5kZXY7CiAKLQlpZiAocGh5LT5ycGh5KQotCQlzYXNfcnBoeV9kZWxldGUocGh5LT5ycGh5KTsKKwkvKiB0aGlzIGhhcHBlbnMgaWYgdGhlIHBoeSBpcyBzdGlsbCBwYXJ0IG9mIGEgcG9ydCB3aGVuIGRlbGV0ZWQgKi8KKwlCVUdfT04oIWxpc3RfZW1wdHkoJnBoeS0+cG9ydF9zaWJsaW5ncykpOwogCiAJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZGVsKGRldik7CkBAIC00NjQsNiArNDgyLDI1OCBAQAogRVhQT1JUX1NZTUJPTChzY3NpX2lzX3Nhc19waHkpOwogCiAvKgorICogU0FTIFBvcnQgYXR0cmlidXRlcworICovCisjZGVmaW5lIHNhc19wb3J0X3Nob3dfc2ltcGxlKGZpZWxkLCBuYW1lLCBmb3JtYXRfc3RyaW5nLCBjYXN0KQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfc2FzX3BvcnRfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHNhc19wb3J0ICpwb3J0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nhc19wb3J0KGNkZXYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsIGZvcm1hdF9zdHJpbmcsIGNhc3QgcG9ydC0+ZmllbGQpOwlcCit9CisKKyNkZWZpbmUgc2FzX3BvcnRfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCQlcCisJc2FzX3BvcnRfc2hvd19zaW1wbGUoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsICh0eXBlKSkJXAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfc2FzX3BvcnRfIyNuYW1lLCBOVUxMKQorCitzYXNfcG9ydF9zaW1wbGVfYXR0cihudW1fcGh5cywgbnVtX3BoeXMsICIlZFxuIiwgaW50KTsKKworc3RhdGljIERFQ0xBUkVfVFJBTlNQT1JUX0NMQVNTKHNhc19wb3J0X2NsYXNzLAorCQkJICAgICAgICJzYXNfcG9ydCIsIE5VTEwsIE5VTEwsIE5VTEwpOworCitzdGF0aWMgaW50IHNhc19wb3J0X21hdGNoKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IHNhc19pbnRlcm5hbCAqaTsKKworCWlmICghc2NzaV9pc19zYXNfcG9ydChkZXYpKQorCQlyZXR1cm4gMDsKKwlzaG9zdCA9IGRldl90b19zaG9zdChkZXYtPnBhcmVudCk7CisKKwlpZiAoIXNob3N0LT50cmFuc3BvcnR0KQorCQlyZXR1cm4gMDsKKwlpZiAoc2hvc3QtPnRyYW5zcG9ydHQtPmhvc3RfYXR0cnMuYWMuY2xhc3MgIT0KKwkJCSZzYXNfaG9zdF9jbGFzcy5jbGFzcykKKwkJcmV0dXJuIDA7CisKKwlpID0gdG9fc2FzX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKKwlyZXR1cm4gJmktPnBvcnRfYXR0cl9jb250LmFjID09IGNvbnQ7Cit9CisKKworc3RhdGljIHZvaWQgc2FzX3BvcnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNhc19wb3J0ICpwb3J0ID0gZGV2X3RvX3Nhc19wb3J0KGRldik7CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnBvcnQtPnBoeV9saXN0KSk7CisKKwlwdXRfZGV2aWNlKGRldi0+cGFyZW50KTsKKwlrZnJlZShwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc2FzX3BvcnRfY3JlYXRlX2xpbmsoc3RydWN0IHNhc19wb3J0ICpwb3J0LAorCQkJCSBzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCXN5c2ZzX2NyZWF0ZV9saW5rKCZwb3J0LT5kZXYua29iaiwgJnBoeS0+ZGV2LmtvYmosIHBoeS0+ZGV2LmJ1c19pZCk7CisJc3lzZnNfY3JlYXRlX2xpbmsoJnBoeS0+ZGV2LmtvYmosICZwb3J0LT5kZXYua29iaiwgInBvcnQiKTsKK30KKworc3RhdGljIHZvaWQgc2FzX3BvcnRfZGVsZXRlX2xpbmsoc3RydWN0IHNhc19wb3J0ICpwb3J0LAorCQkJCSBzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCXN5c2ZzX3JlbW92ZV9saW5rKCZwb3J0LT5kZXYua29iaiwgcGh5LT5kZXYuYnVzX2lkKTsKKwlzeXNmc19yZW1vdmVfbGluaygmcGh5LT5kZXYua29iaiwgInBvcnQiKTsKK30KKworLyoqIHNhc19wb3J0X2FsbG9jIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBTQVMgcG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiBAcGFyZW50OglwYXJlbnQgZGV2aWNlCisgKiBAcG9ydF9pZDoJcG9ydCBudW1iZXIKKyAqCisgKiBBbGxvY2F0ZXMgYSBTQVMgcG9ydCBzdHJ1Y3R1cmUuICBJdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBkZXZpY2UgdHJlZQorICogYmVsb3cgdGhlIGRldmljZSBzcGVjaWZpZWQgYnkgQHBhcmVudCB3aGljaCBtdXN0IGJlIGVpdGhlciBhIFNjc2lfSG9zdAorICogb3IgYSBzYXNfZXhwYW5kZXJfZGV2aWNlLgorICoKKyAqIFJldHVybnMgJU5VTEwgb24gZXJyb3IKKyAqLworc3RydWN0IHNhc19wb3J0ICpzYXNfcG9ydF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBwb3J0X2lkKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBhcmVudCk7CisJc3RydWN0IHNhc19wb3J0ICpwb3J0OworCisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCXBvcnQtPnBvcnRfaWRlbnRpZmllciA9IHBvcnRfaWQ7CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmcG9ydC0+ZGV2KTsKKworCXBvcnQtPmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKHBhcmVudCk7CisJcG9ydC0+ZGV2LnJlbGVhc2UgPSBzYXNfcG9ydF9yZWxlYXNlOworCisJbXV0ZXhfaW5pdCgmcG9ydC0+cGh5X2xpc3RfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZwb3J0LT5waHlfbGlzdCk7CisKKwlpZiAoc2NzaV9pc19zYXNfZXhwYW5kZXJfZGV2aWNlKHBhcmVudCkpIHsKKwkJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gZGV2X3RvX3JwaHkocGFyZW50KTsKKwkJc3ByaW50Zihwb3J0LT5kZXYuYnVzX2lkLCAicG9ydC0lZDolZDolZCIsIHNob3N0LT5ob3N0X25vLAorCQkJcnBoeS0+c2NzaV90YXJnZXRfaWQsIHBvcnQtPnBvcnRfaWRlbnRpZmllcik7CisJfSBlbHNlCisJCXNwcmludGYocG9ydC0+ZGV2LmJ1c19pZCwgInBvcnQtJWQ6JWQiLCBzaG9zdC0+aG9zdF9ubywKKwkJCXBvcnQtPnBvcnRfaWRlbnRpZmllcik7CisKKwl0cmFuc3BvcnRfc2V0dXBfZGV2aWNlKCZwb3J0LT5kZXYpOworCisJcmV0dXJuIHBvcnQ7Cit9CitFWFBPUlRfU1lNQk9MKHNhc19wb3J0X2FsbG9jKTsKKworLyoqCisgKiBzYXNfcG9ydF9hZGQgLSBhZGQgYSBTQVMgcG9ydCB0byB0aGUgZGV2aWNlIGhpZXJhcmNoeQorICoKKyAqIEBwb3J0Oglwb3J0IHRvIGJlIGFkZGVkCisgKgorICogcHVibGlzaGVzIGEgcG9ydCB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCisgKi8KK2ludCBzYXNfcG9ydF9hZGQoc3RydWN0IHNhc19wb3J0ICpwb3J0KQoreworCWludCBlcnJvcjsKKworCS8qIE5vIHBoeXMgc2hvdWxkIGJlIGFkZGVkIHVudGlsIHRoaXMgaXMgbWFkZSB2aXNpYmxlICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZwb3J0LT5waHlfbGlzdCkpOworCisJZXJyb3IgPSBkZXZpY2VfYWRkKCZwb3J0LT5kZXYpOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwl0cmFuc3BvcnRfYWRkX2RldmljZSgmcG9ydC0+ZGV2KTsKKwl0cmFuc3BvcnRfY29uZmlndXJlX2RldmljZSgmcG9ydC0+ZGV2KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzYXNfcG9ydF9hZGQpOworCisvKioKKyAqIHNhc19wb3J0X2ZyZWUgIC0tICBmcmVlIGEgU0FTIFBPUlQKKyAqIEBwb3J0OglTQVMgUE9SVCB0byBmcmVlCisgKgorICogRnJlZXMgdGhlIHNwZWNpZmllZCBTQVMgUE9SVC4KKyAqCisgKiBOb3RlOgorICogICBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgb24gYSBQT1JUIHRoYXQgaGFzIG5vdAorICogICBzdWNlc3NmdWxseSBiZWVuIGFkZGVkIHVzaW5nIHNhc19wb3J0X2FkZCgpLgorICovCit2b2lkIHNhc19wb3J0X2ZyZWUoc3RydWN0IHNhc19wb3J0ICpwb3J0KQoreworCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmcG9ydC0+ZGV2KTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTChzYXNfcG9ydF9mcmVlKTsKKworLyoqCisgKiBzYXNfcG9ydF9kZWxldGUgIC0tICByZW1vdmUgU0FTIFBPUlQKKyAqIEBwb3J0OglTQVMgUE9SVCB0byByZW1vdmUKKyAqCisgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgU0FTIFBPUlQuICBJZiB0aGUgU0FTIFBPUlQgaGFzIGFuCisgKiBhc3NvY2lhdGVkIHBoeXMsIHVubGluayB0aGVtIGZyb20gdGhlIHBvcnQgYXMgd2VsbC4KKyAqLwordm9pZCBzYXNfcG9ydF9kZWxldGUoc3RydWN0IHNhc19wb3J0ICpwb3J0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisJc3RydWN0IHNhc19waHkgKnBoeSwgKnRtcF9waHk7CisKKwlpZiAocG9ydC0+cnBoeSkgeworCQlzYXNfcnBoeV9kZWxldGUocG9ydC0+cnBoeSk7CisJCXBvcnQtPnJwaHkgPSBOVUxMOworCX0KKworCW11dGV4X2xvY2soJnBvcnQtPnBoeV9saXN0X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGh5LCB0bXBfcGh5LCAmcG9ydC0+cGh5X2xpc3QsCisJCQkJIHBvcnRfc2libGluZ3MpIHsKKwkJc2FzX3BvcnRfZGVsZXRlX2xpbmsocG9ydCwgcGh5KTsKKwkJbGlzdF9kZWxfaW5pdCgmcGh5LT5wb3J0X3NpYmxpbmdzKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5waHlfbGlzdF9tdXRleCk7CisKKwl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZShkZXYpOworCWRldmljZV9kZWwoZGV2KTsKKwl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKKwlwdXRfZGV2aWNlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MKHNhc19wb3J0X2RlbGV0ZSk7CisKKy8qKgorICogc2NzaV9pc19zYXNfcG9ydCAtLSAgY2hlY2sgaWYgYSBzdHJ1Y3QgZGV2aWNlIHJlcHJlc2VudHMgYSBTQVMgcG9ydAorICogQGRldjoJZGV2aWNlIHRvIGNoZWNrCisgKgorICogUmV0dXJuczoKKyAqCSUxIGlmIHRoZSBkZXZpY2UgcmVwcmVzZW50cyBhIFNBUyBQb3J0LCAlMCBlbHNlCisgKi8KK2ludCBzY3NpX2lzX3Nhc19wb3J0KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5yZWxlYXNlID09IHNhc19wb3J0X3JlbGVhc2U7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfaXNfc2FzX3BvcnQpOworCisvKioKKyAqIHNhc19wb3J0X2FkZF9waHkgLSBhZGQgYW5vdGhlciBwaHkgdG8gYSBwb3J0IHRvIGZvcm0gYSB3aWRlIHBvcnQKKyAqIEBwb3J0Oglwb3J0IHRvIGFkZCB0aGUgcGh5IHRvCisgKiBAcGh5OglwaHkgdG8gYWRkCisgKgorICogV2hlbiBhIHBvcnQgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIGl0IGlzIGVtcHR5IChoYXMgbm8gcGh5cykuICBBbGwKKyAqIHBvcnRzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgcGh5IHRvIG9wZXJhdGVkLCBhbmQgYWxsIHdpZGUgcG9ydHMKKyAqIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28uICBUaGUgY3VycmVudCBjb2RlIG1ha2VzIG5vIGRpZmZlcmVuY2UKKyAqIGJldHdlZW4gcG9ydHMgYW5kIHdpZGUgcG9ydHMsIGJ1dCB0aGUgb25seSBvYmplY3QgdGhhdCBjYW4gYmUKKyAqIGNvbm5lY3RlZCB0byBhIHJlbW90ZSBkZXZpY2UgaXMgYSBwb3J0LCBzbyBwb3J0cyBtdXN0IGJlIGZvcm1lZCBvbgorICogYWxsIGRldmljZXMgd2l0aCBwaHlzIGlmIHRoZXkncmUgY29ubmVjdGVkIHRvIGFueXRoaW5nLgorICovCit2b2lkIHNhc19wb3J0X2FkZF9waHkoc3RydWN0IHNhc19wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCW11dGV4X2xvY2soJnBvcnQtPnBoeV9saXN0X211dGV4KTsKKwlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJnBoeS0+cG9ydF9zaWJsaW5ncykpKSB7CisJCS8qIG1ha2Ugc3VyZSB3ZSdyZSBhbHJlYWR5IG9uIHRoaXMgcG9ydCAqLworCQlzdHJ1Y3Qgc2FzX3BoeSAqdG1wOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmcG9ydC0+cGh5X2xpc3QsIHBvcnRfc2libGluZ3MpCisJCQlpZiAodG1wID09IHBoeSkKKwkJCQlicmVhazsKKwkJLyogSWYgdGhpcyB0cmlwcywgeW91IGFkZGVkIGEgcGh5IHRoYXQgd2FzIGFscmVhZHkKKwkJICogcGFydCBvZiBhIGRpZmZlcmVudCBwb3J0ICovCisJCWlmICh1bmxpa2VseSh0bXAgIT0gcGh5KSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBvcnQtPmRldiwgInRyeWluZyB0byBhZGQgcGh5ICVzIGZhaWxzOiBpdCdzIGFscmVhZHkgcGFydCBvZiBhbm90aGVyIHBvcnRcbiIsIHBoeS0+ZGV2LmJ1c19pZCk7CisJCQlCVUcoKTsKKwkJfQorCX0gZWxzZSB7CisJCXNhc19wb3J0X2NyZWF0ZV9saW5rKHBvcnQsIHBoeSk7CisJCWxpc3RfYWRkX3RhaWwoJnBoeS0+cG9ydF9zaWJsaW5ncywgJnBvcnQtPnBoeV9saXN0KTsKKwkJcG9ydC0+bnVtX3BoeXMrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5waHlfbGlzdF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKHNhc19wb3J0X2FkZF9waHkpOworCisvKioKKyAqIHNhc19wb3J0X2RlbGV0ZV9waHkgLSByZW1vdmUgYSBwaHkgZnJvbSBhIHBvcnQgb3Igd2lkZSBwb3J0CisgKiBAcG9ydDoJcG9ydCB0byByZW1vdmUgdGhlIHBoeSBmcm9tCisgKiBAcGh5OglwaHkgdG8gcmVtb3ZlCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgdXNlZCBmb3IgdGVhcmluZyBkb3duIHBvcnRzIGFnYWluLiAgSXQgbXVzdCBiZQorICogZG9uZSB0byBldmVyeSBwb3J0IG9yIHdpZGUgcG9ydCBiZWZvcmUgY2FsbGluZyBzYXNfcG9ydF9kZWxldGUuCisgKi8KK3ZvaWQgc2FzX3BvcnRfZGVsZXRlX3BoeShzdHJ1Y3Qgc2FzX3BvcnQgKnBvcnQsIHN0cnVjdCBzYXNfcGh5ICpwaHkpCit7CisJbXV0ZXhfbG9jaygmcG9ydC0+cGh5X2xpc3RfbXV0ZXgpOworCXNhc19wb3J0X2RlbGV0ZV9saW5rKHBvcnQsIHBoeSk7CisJbGlzdF9kZWxfaW5pdCgmcGh5LT5wb3J0X3NpYmxpbmdzKTsKKwlwb3J0LT5udW1fcGh5cy0tOworCW11dGV4X3VubG9jaygmcG9ydC0+cGh5X2xpc3RfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChzYXNfcG9ydF9kZWxldGVfcGh5KTsKKworLyoKICAqIFNBUyByZW1vdGUgUEhZIGF0dHJpYnV0ZXMuCiAgKi8KIApAQCAtNzY3LDcgKzEwMzcsNyBAQAogICogUmV0dXJuczoKICAqCVNBUyBQSFkgYWxsb2NhdGVkIG9yICVOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KICAqLwotc3RydWN0IHNhc19ycGh5ICpzYXNfZW5kX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2FzX3BoeSAqcGFyZW50KQorc3RydWN0IHNhc19ycGh5ICpzYXNfZW5kX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKnBhcmVudCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdCgmcGFyZW50LT5kZXYpOwogCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKQEAgLTc4MCw4ICsxMDUwLDEzIEBACiAJZGV2aWNlX2luaXRpYWxpemUoJnJkZXYtPnJwaHkuZGV2KTsKIAlyZGV2LT5ycGh5LmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CiAJcmRldi0+cnBoeS5kZXYucmVsZWFzZSA9IHNhc19lbmRfZGV2aWNlX3JlbGVhc2U7Ci0Jc3ByaW50ZihyZGV2LT5ycGh5LmRldi5idXNfaWQsICJlbmRfZGV2aWNlLSVkOiVkLSVkIiwKLQkJc2hvc3QtPmhvc3Rfbm8sIHBhcmVudC0+cG9ydF9pZGVudGlmaWVyLCBwYXJlbnQtPm51bWJlcik7CisJaWYgKHNjc2lfaXNfc2FzX2V4cGFuZGVyX2RldmljZShwYXJlbnQtPmRldi5wYXJlbnQpKSB7CisJCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IGRldl90b19ycGh5KHBhcmVudC0+ZGV2LnBhcmVudCk7CisJCXNwcmludGYocmRldi0+cnBoeS5kZXYuYnVzX2lkLCAiZW5kX2RldmljZS0lZDolZDolZCIsCisJCQlzaG9zdC0+aG9zdF9ubywgcnBoeS0+c2NzaV90YXJnZXRfaWQsIHBhcmVudC0+cG9ydF9pZGVudGlmaWVyKTsKKwl9IGVsc2UKKwkJc3ByaW50ZihyZGV2LT5ycGh5LmRldi5idXNfaWQsICJlbmRfZGV2aWNlLSVkOiVkIiwKKwkJCXNob3N0LT5ob3N0X25vLCBwYXJlbnQtPnBvcnRfaWRlbnRpZmllcik7CiAJcmRldi0+cnBoeS5pZGVudGlmeS5kZXZpY2VfdHlwZSA9IFNBU19FTkRfREVWSUNFOwogCXNhc19ycGh5X2luaXRpYWxpemUoJnJkZXYtPnJwaHkpOwogCXRyYW5zcG9ydF9zZXR1cF9kZXZpY2UoJnJkZXYtPnJwaHkuZGV2KTsKQEAgLTc5OCw3ICsxMDczLDcgQEAKICAqIFJldHVybnM6CiAgKglTQVMgUEhZIGFsbG9jYXRlZCBvciAlTlVMTCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuCiAgKi8KLXN0cnVjdCBzYXNfcnBoeSAqc2FzX2V4cGFuZGVyX2FsbG9jKHN0cnVjdCBzYXNfcGh5ICpwYXJlbnQsCitzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19leHBhbmRlcl9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKnBhcmVudCwKIAkJCQkgICAgZW51bSBzYXNfZGV2aWNlX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdCgmcGFyZW50LT5kZXYpOwpAQCAtODM3LDcgKzExMTIsNyBAQAogICovCiBpbnQgc2FzX3JwaHlfYWRkKHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKLQlzdHJ1Y3Qgc2FzX3BoeSAqcGFyZW50ID0gZGV2X3RvX3BoeShycGh5LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc2FzX3BvcnQgKnBhcmVudCA9IGRldl90b19zYXNfcG9ydChycGh5LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwYXJlbnQtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzYXNfaG9zdF9hdHRycyAqc2FzX2hvc3QgPSB0b19zYXNfaG9zdF9hdHRycyhzaG9zdCk7CiAJc3RydWN0IHNhc19pZGVudGlmeSAqaWRlbnRpZnkgPSAmcnBoeS0+aWRlbnRpZnk7CkBAIC05MTAsNyArMTE4NSw3IEBACiBzYXNfcnBoeV9kZWxldGUoc3RydWN0IHNhc19ycGh5ICpycGh5KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZycGh5LT5kZXY7Ci0Jc3RydWN0IHNhc19waHkgKnBhcmVudCA9IGRldl90b19waHkoZGV2LT5wYXJlbnQpOworCXN0cnVjdCBzYXNfcG9ydCAqcGFyZW50ID0gZGV2X3RvX3Nhc19wb3J0KGRldi0+cGFyZW50KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwYXJlbnQtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzYXNfaG9zdF9hdHRycyAqc2FzX2hvc3QgPSB0b19zYXNfaG9zdF9hdHRycyhzaG9zdCk7CiAKQEAgLTkyMCw3ICsxMTk1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U6CiAJY2FzZSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRToKLQkJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgZG9fc2FzX3BoeV9kZWxldGUpOworCQlzYXNfcmVtb3ZlX2NoaWxkcmVuKGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtOTY3LDcgKzEyNDIsNyBAQAogCiAJbXV0ZXhfbG9jaygmc2FzX2hvc3QtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocnBoeSwgJnNhc19ob3N0LT5ycGh5X2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IHNhc19waHkgKnBhcmVudCA9IGRldl90b19waHkocnBoeS0+ZGV2LnBhcmVudCk7CisJCXN0cnVjdCBzYXNfcG9ydCAqcGFyZW50ID0gZGV2X3RvX3Nhc19wb3J0KHJwaHktPmRldi5wYXJlbnQpOwogCiAJCWlmIChycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSB8fAogCQkgICAgcnBoeS0+c2NzaV90YXJnZXRfaWQgPT0gLTEpCkBAIC0xMDAzLDE2ICsxMjc4LDE5IEBACiAjZGVmaW5lIFNFVFVQX09QVElPTkFMX1JQT1JUX0FUVFJJQlVURShmaWVsZCwgZnVuYykJCQlcCiAJU0VUVVBfVEVNUExBVEUocnBoeV9hdHRycywgZmllbGQsIFNfSVJVR08sIGktPmYtPmZ1bmMpCiAKLSNkZWZpbmUgU0VUVVBfUE9SVF9BVFRSSUJVVEUoZmllbGQpCQkJCQlcCisjZGVmaW5lIFNFVFVQX1BIWV9BVFRSSUJVVEUoZmllbGQpCQkJCQlcCiAJU0VUVVBfVEVNUExBVEUocGh5X2F0dHJzLCBmaWVsZCwgU19JUlVHTywgMSkKIAotI2RlZmluZSBTRVRVUF9PUFRJT05BTF9QT1JUX0FUVFJJQlVURShmaWVsZCwgZnVuYykJCQlcCisjZGVmaW5lIFNFVFVQX1BPUlRfQVRUUklCVVRFKGZpZWxkKQkJCQkJXAorCVNFVFVQX1RFTVBMQVRFKHBvcnRfYXR0cnMsIGZpZWxkLCBTX0lSVUdPLCAxKQorCisjZGVmaW5lIFNFVFVQX09QVElPTkFMX1BIWV9BVFRSSUJVVEUoZmllbGQsIGZ1bmMpCQkJXAogCVNFVFVQX1RFTVBMQVRFKHBoeV9hdHRycywgZmllbGQsIFNfSVJVR08sIGktPmYtPmZ1bmMpCiAKLSNkZWZpbmUgU0VUVVBfUE9SVF9BVFRSSUJVVEVfV1JPTkxZKGZpZWxkKQkJCQlcCisjZGVmaW5lIFNFVFVQX1BIWV9BVFRSSUJVVEVfV1JPTkxZKGZpZWxkKQkJCQlcCiAJU0VUVVBfVEVNUExBVEUocGh5X2F0dHJzLCBmaWVsZCwgU19JV1VHTywgMSkKIAotI2RlZmluZSBTRVRVUF9PUFRJT05BTF9QT1JUX0FUVFJJQlVURV9XUk9OTFkoZmllbGQsIGZ1bmMpCQlcCisjZGVmaW5lIFNFVFVQX09QVElPTkFMX1BIWV9BVFRSSUJVVEVfV1JPTkxZKGZpZWxkLCBmdW5jKQkJXAogCVNFVFVQX1RFTVBMQVRFKHBoeV9hdHRycywgZmllbGQsIFNfSVdVR08sIGktPmYtPmZ1bmMpCiAKICNkZWZpbmUgU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZmllbGQpCQkJCQlcCkBAIC0xMDQ4LDYgKzEzMjYsMTEgQEAKIAlpLT5waHlfYXR0cl9jb250LmFjLm1hdGNoID0gc2FzX3BoeV9tYXRjaDsKIAl0cmFuc3BvcnRfY29udGFpbmVyX3JlZ2lzdGVyKCZpLT5waHlfYXR0cl9jb250KTsKIAorCWktPnBvcnRfYXR0cl9jb250LmFjLmNsYXNzID0gJnNhc19wb3J0X2NsYXNzLmNsYXNzOworCWktPnBvcnRfYXR0cl9jb250LmFjLmF0dHJzID0gJmktPnBvcnRfYXR0cnNbMF07CisJaS0+cG9ydF9hdHRyX2NvbnQuYWMubWF0Y2ggPSBzYXNfcG9ydF9tYXRjaDsKKwl0cmFuc3BvcnRfY29udGFpbmVyX3JlZ2lzdGVyKCZpLT5wb3J0X2F0dHJfY29udCk7CisKIAlpLT5ycGh5X2F0dHJfY29udC5hYy5jbGFzcyA9ICZzYXNfcnBoeV9jbGFzcy5jbGFzczsKIAlpLT5ycGh5X2F0dHJfY29udC5hYy5hdHRycyA9ICZpLT5ycGh5X2F0dHJzWzBdOwogCWktPnJwaHlfYXR0cl9jb250LmFjLm1hdGNoID0gc2FzX3JwaHlfbWF0Y2g7CkBAIC0xMDY2LDMwICsxMzQ5LDM1IEBACiAJaS0+ZiA9IGZ0OwogCiAJY291bnQgPSAwOworCVNFVFVQX1BPUlRfQVRUUklCVVRFKG51bV9waHlzKTsKIAlpLT5ob3N0X2F0dHJzW2NvdW50XSA9IE5VTEw7CiAKIAljb3VudCA9IDA7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUoaW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzKTsKLQlTRVRVUF9QT1JUX0FUVFJJQlVURSh0YXJnZXRfcG9ydF9wcm90b2NvbHMpOwotCVNFVFVQX1BPUlRfQVRUUklCVVRFKGRldmljZV90eXBlKTsKLQlTRVRVUF9QT1JUX0FUVFJJQlVURShzYXNfYWRkcmVzcyk7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUocGh5X2lkZW50aWZpZXIpOwotCVNFVFVQX1BPUlRfQVRUUklCVVRFKHBvcnRfaWRlbnRpZmllcik7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobmVnb3RpYXRlZF9saW5rcmF0ZSk7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobWluaW11bV9saW5rcmF0ZV9odyk7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobWluaW11bV9saW5rcmF0ZSk7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobWF4aW11bV9saW5rcmF0ZV9odyk7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobWF4aW11bV9saW5rcmF0ZSk7CisJU0VUVVBfUEhZX0FUVFJJQlVURShpbml0aWF0b3JfcG9ydF9wcm90b2NvbHMpOworCVNFVFVQX1BIWV9BVFRSSUJVVEUodGFyZ2V0X3BvcnRfcHJvdG9jb2xzKTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKGRldmljZV90eXBlKTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKHNhc19hZGRyZXNzKTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKHBoeV9pZGVudGlmaWVyKTsKKwkvL1NFVFVQX1BIWV9BVFRSSUJVVEUocG9ydF9pZGVudGlmaWVyKTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKG5lZ290aWF0ZWRfbGlua3JhdGUpOworCVNFVFVQX1BIWV9BVFRSSUJVVEUobWluaW11bV9saW5rcmF0ZV9odyk7CisJU0VUVVBfUEhZX0FUVFJJQlVURShtaW5pbXVtX2xpbmtyYXRlKTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKG1heGltdW1fbGlua3JhdGVfaHcpOworCVNFVFVQX1BIWV9BVFRSSUJVVEUobWF4aW11bV9saW5rcmF0ZSk7CiAKLQlTRVRVUF9QT1JUX0FUVFJJQlVURShpbnZhbGlkX2R3b3JkX2NvdW50KTsKLQlTRVRVUF9QT1JUX0FUVFJJQlVURShydW5uaW5nX2Rpc3Bhcml0eV9lcnJvcl9jb3VudCk7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobG9zc19vZl9kd29yZF9zeW5jX2NvdW50KTsKLQlTRVRVUF9QT1JUX0FUVFJJQlVURShwaHlfcmVzZXRfcHJvYmxlbV9jb3VudCk7Ci0JU0VUVVBfT1BUSU9OQUxfUE9SVF9BVFRSSUJVVEVfV1JPTkxZKGxpbmtfcmVzZXQsIHBoeV9yZXNldCk7Ci0JU0VUVVBfT1BUSU9OQUxfUE9SVF9BVFRSSUJVVEVfV1JPTkxZKGhhcmRfcmVzZXQsIHBoeV9yZXNldCk7CisJU0VUVVBfUEhZX0FUVFJJQlVURShpbnZhbGlkX2R3b3JkX2NvdW50KTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKHJ1bm5pbmdfZGlzcGFyaXR5X2Vycm9yX2NvdW50KTsKKwlTRVRVUF9QSFlfQVRUUklCVVRFKGxvc3Nfb2ZfZHdvcmRfc3luY19jb3VudCk7CisJU0VUVVBfUEhZX0FUVFJJQlVURShwaHlfcmVzZXRfcHJvYmxlbV9jb3VudCk7CisJU0VUVVBfT1BUSU9OQUxfUEhZX0FUVFJJQlVURV9XUk9OTFkobGlua19yZXNldCwgcGh5X3Jlc2V0KTsKKwlTRVRVUF9PUFRJT05BTF9QSFlfQVRUUklCVVRFX1dST05MWShoYXJkX3Jlc2V0LCBwaHlfcmVzZXQpOwogCWktPnBoeV9hdHRyc1tjb3VudF0gPSBOVUxMOwogCiAJY291bnQgPSAwOworCVNFVFVQX1BPUlRfQVRUUklCVVRFKG51bV9waHlzKTsKKwlpLT5wb3J0X2F0dHJzW2NvdW50XSA9IE5VTEw7CisKKwljb3VudCA9IDA7CiAJU0VUVVBfUlBPUlRfQVRUUklCVVRFKHJwaHlfaW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzKTsKIAlTRVRVUF9SUE9SVF9BVFRSSUJVVEUocnBoeV90YXJnZXRfcG9ydF9wcm90b2NvbHMpOwogCVNFVFVQX1JQT1JUX0FUVFJJQlVURShycGh5X2RldmljZV90eXBlKTsKQEAgLTExMzEsNiArMTQxOSw3IEBACiAKIAl0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoJmktPnQuaG9zdF9hdHRycyk7CiAJdHJhbnNwb3J0X2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZpLT5waHlfYXR0cl9jb250KTsKKwl0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoJmktPnBvcnRfYXR0cl9jb250KTsKIAl0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoJmktPnJwaHlfYXR0cl9jb250KTsKIAl0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoJmktPmVuZF9kZXZfYXR0cl9jb250KTsKIAl0cmFuc3BvcnRfY29udGFpbmVyX3VucmVnaXN0ZXIoJmktPmV4cGFuZGVyX2F0dHJfY29udCk7CkBAIC0xMTQ5LDkgKzE0MzgsMTIgQEAKIAllcnJvciA9IHRyYW5zcG9ydF9jbGFzc19yZWdpc3Rlcigmc2FzX3BoeV9jbGFzcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3RyYW5zcG9ydDsKLQllcnJvciA9IHRyYW5zcG9ydF9jbGFzc19yZWdpc3Rlcigmc2FzX3JwaHlfY2xhc3MpOworCWVycm9yID0gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZzYXNfcG9ydF9jbGFzcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BoeTsKKwllcnJvciA9IHRyYW5zcG9ydF9jbGFzc19yZWdpc3Rlcigmc2FzX3JwaHlfY2xhc3MpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9wb3J0OwogCWVycm9yID0gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZzYXNfZW5kX2Rldl9jbGFzcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3JwaHk7CkBAIC0xMTY1LDYgKzE0NTcsOCBAQAogCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZzYXNfZW5kX2Rldl9jbGFzcyk7CiAgb3V0X3VucmVnaXN0ZXJfcnBoeToKIAl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcigmc2FzX3JwaHlfY2xhc3MpOworIG91dF91bnJlZ2lzdGVyX3BvcnQ6CisJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19wb3J0X2NsYXNzKTsKICBvdXRfdW5yZWdpc3Rlcl9waHk6CiAJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19waHlfY2xhc3MpOwogIG91dF91bnJlZ2lzdGVyX3RyYW5zcG9ydDoKQEAgLTExNzgsNiArMTQ3Miw3IEBACiB7CiAJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19ob3N0X2NsYXNzKTsKIAl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcigmc2FzX3BoeV9jbGFzcyk7CisJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19wb3J0X2NsYXNzKTsKIAl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcigmc2FzX3JwaHlfY2xhc3MpOwogCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZzYXNfZW5kX2Rldl9jbGFzcyk7CiAJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19leHBhbmRlcl9jbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKaW5kZXggYWNlNDlkNS4uMjlhOWE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwpAQCAtMTgsNyArMTgsNiBAQAogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaWNhbS5jIGIvZHJpdmVycy9zY3NpL3Njc2ljYW0uYwppbmRleCBiNzgzNTRmLi5jZDY4YTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaWNhbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpY2FtLmMKQEAgLTU3LDYgKzU3LDcgQEAKIGludCBzY3NpY2FtX2Jpb3NfcGFyYW0oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgY2FwYWNpdHksIGludCAqaXApCiB7CiAJdW5zaWduZWQgY2hhciAqcDsKKwl1NjQgY2FwYWNpdHk2NCA9IGNhcGFjaXR5OwkvKiBTdXBwcmVzcyBnY2Mgd2FybmluZyAqLwogCWludCByZXQ7CiAKIAlwID0gc2NzaV9iaW9zX3B0YWJsZShiZGV2KTsKQEAgLTY4LDcgKzY5LDcgQEAKIAkJCSAgICAgICAodW5zaWduZWQgaW50ICopaXAgKyAwLCAodW5zaWduZWQgaW50ICopaXAgKyAxKTsKIAlrZnJlZShwKTsKIAotCWlmIChyZXQgPT0gLTEpIHsKKwlpZiAocmV0ID09IC0xICYmIGNhcGFjaXR5NjQgPCAoMVVMTCA8PCAzMikpIHsKIAkJLyogcGljayBzb21lIHN0YW5kYXJkIG1hcHBpbmcgd2l0aCBhdCBtb3N0IDEwMjQgY3lsaW5kZXJzLAogCQkgICBhbmQgYXQgbW9zdCA2MiBzZWN0b3JzIHBlciB0cmFjayAtIHRoaXMgd29ya3MgdXAgdG8KIAkJICAgNzkwNSBNQiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCAzNTQxOTkwLi4zMjI1ZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMzIsNyArMzIsNiBAQAogICoJdGhhbiB0aGUgbGV2ZWwgaW5kaWNhdGVkIGFib3ZlIHRvIHRyaWdnZXIgb3V0cHV0LgkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIwOCw2ICsyMDcsMjMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNkX3N0b3JlX2FsbG93X3Jlc3RhcnQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGNkZXYpOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWlmIChzZHAtPnR5cGUgIT0gVFlQRV9ESVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNkcC0+YWxsb3dfcmVzdGFydCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3NpemVfdCBzZF9zaG93X2NhY2hlX3R5cGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soY2Rldik7CkBAIC0yMjMsMTAgKzIzOSwxOSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXVcbiIsIHNka3AtPkRQT0ZVQSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNkX3Nob3dfYWxsb3dfcmVzdGFydChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhjZGV2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIDQwLCAiJWRcbiIsIHNka3AtPmRldmljZS0+YWxsb3dfcmVzdGFydCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBzZF9kaXNrX2F0dHJzW10gPSB7CiAJX19BVFRSKGNhY2hlX3R5cGUsIFNfSVJVR098U19JV1VTUiwgc2Rfc2hvd19jYWNoZV90eXBlLAogCSAgICAgICBzZF9zdG9yZV9jYWNoZV90eXBlKSwKIAlfX0FUVFIoRlVBLCBTX0lSVUdPLCBzZF9zaG93X2Z1YSwgTlVMTCksCisJX19BVFRSKGFsbG93X3Jlc3RhcnQsIFNfSVJVR098U19JV1VTUiwgc2Rfc2hvd19hbGxvd19yZXN0YXJ0LAorCSAgICAgICBzZF9zdG9yZV9hbGxvd19yZXN0YXJ0KSwKIAlfX0FUVFJfTlVMTCwKIH07CiAKQEAgLTg5MSwxMSArOTE2LDEwIEBACiBzdGF0aWMgdm9pZCBzZF9yd19pbnRyKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCkKIHsKIAlpbnQgcmVzdWx0ID0gU0NwbnQtPnJlc3VsdDsKLQlpbnQgdGhpc19jb3VudCA9IFNDcG50LT5yZXF1ZXN0X2J1ZmZsZW47Ci0JaW50IGdvb2RfYnl0ZXMgPSAocmVzdWx0ID09IDAgPyB0aGlzX2NvdW50IDogMCk7Ci0Jc2VjdG9yX3QgYmxvY2tfc2VjdG9ycyA9IDE7Ci0JdTY0IGZpcnN0X2Vycl9ibG9jazsKLQlzZWN0b3JfdCBlcnJvcl9zZWN0b3I7CisgCXVuc2lnbmVkIGludCB4ZmVyX3NpemUgPSBTQ3BudC0+cmVxdWVzdF9idWZmbGVuOworIAl1bnNpZ25lZCBpbnQgZ29vZF9ieXRlcyA9IHJlc3VsdCA/IDAgOiB4ZmVyX3NpemU7CisgCXU2NCBzdGFydF9sYmEgPSBTQ3BudC0+cmVxdWVzdC0+c2VjdG9yOworIAl1NjQgYmFkX2xiYTsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CiAJaW50IHNlbnNlX3ZhbGlkID0gMDsKIAlpbnQgc2Vuc2VfZGVmZXJyZWQgPSAwOwpAQCAtOTA2LDcgKzkzMCw2IEBACiAJCWlmIChzZW5zZV92YWxpZCkKIAkJCXNlbnNlX2RlZmVycmVkID0gc2NzaV9zZW5zZV9pc19kZWZlcnJlZCgmc3NoZHIpOwogCX0KLQogI2lmZGVmIENPTkZJR19TQ1NJX0xPR0dJTkcKIAlTQ1NJX0xPR19ITENPTVBMRVRFKDEsIHByaW50aygic2RfcndfaW50cjogJXM6IHJlcz0weCV4XG4iLCAKIAkJCQlTQ3BudC0+cmVxdWVzdC0+cnFfZGlzay0+ZGlza19uYW1lLCByZXN1bHQpKTsKQEAgLTkxNiw4OSArOTM5LDcyIEBACiAJCQkJc3NoZHIuc2Vuc2Vfa2V5LCBzc2hkci5hc2MsIHNzaGRyLmFzY3EpKTsKIAl9CiAjZW5kaWYKLQkvKgotCSAgIEhhbmRsZSBNRURJVU0gRVJST1JzIHRoYXQgaW5kaWNhdGUgcGFydGlhbCBzdWNjZXNzLiAgU2luY2UgdGhpcyBpcyBhCi0JICAgcmVsYXRpdmVseSByYXJlIGVycm9yIGNvbmRpdGlvbiwgbm8gY2FyZSBpcyB0YWtlbiB0byBhdm9pZAotCSAgIHVubmVjZXNzYXJ5IGFkZGl0aW9uYWwgd29yayBzdWNoIGFzIG1lbWNweSdzIHRoYXQgY291bGQgYmUgYXZvaWRlZC4KLQkgKi8KLQlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAhPSAwICYmCi0JCSBzZW5zZV92YWxpZCAmJiAhc2Vuc2VfZGVmZXJyZWQpIHsKLQkJc3dpdGNoIChzc2hkci5zZW5zZV9rZXkpIHsKLQkJY2FzZSBNRURJVU1fRVJST1I6Ci0JCQlpZiAoIWJsa19mc19yZXF1ZXN0KFNDcG50LT5yZXF1ZXN0KSkKLQkJCQlicmVhazsKLQkJCWluZm9fdmFsaWQgPSBzY3NpX2dldF9zZW5zZV9pbmZvX2ZsZCgKLQkJCQlTQ3BudC0+c2Vuc2VfYnVmZmVyLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCi0JCQkJJmZpcnN0X2Vycl9ibG9jayk7Ci0JCQkvKgotCQkJICogTWF5IHdhbnQgdG8gd2FybiBhbmQgc2tpcCBpZiBmb2xsb3dpbmcgY2FzdCByZXN1bHRzCi0JCQkgKiBpbiBhY3R1YWwgdHJ1bmNhdGlvbiAoaWYgc2VjdG9yX3QgPCA2NCBiaXRzKQotCQkJICovCi0JCQllcnJvcl9zZWN0b3IgPSAoc2VjdG9yX3QpZmlyc3RfZXJyX2Jsb2NrOwotCQkJaWYgKFNDcG50LT5yZXF1ZXN0LT5iaW8gIT0gTlVMTCkKLQkJCQlibG9ja19zZWN0b3JzID0gYmlvX3NlY3RvcnMoU0NwbnQtPnJlcXVlc3QtPmJpbyk7Ci0JCQlzd2l0Y2ggKFNDcG50LT5kZXZpY2UtPnNlY3Rvcl9zaXplKSB7Ci0JCQljYXNlIDEwMjQ6Ci0JCQkJZXJyb3Jfc2VjdG9yIDw8PSAxOwotCQkJCWlmIChibG9ja19zZWN0b3JzIDwgMikKLQkJCQkJYmxvY2tfc2VjdG9ycyA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDIwNDg6Ci0JCQkJZXJyb3Jfc2VjdG9yIDw8PSAyOwotCQkJCWlmIChibG9ja19zZWN0b3JzIDwgNCkKLQkJCQkJYmxvY2tfc2VjdG9ycyA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQwOTY6Ci0JCQkJZXJyb3Jfc2VjdG9yIDw8PTM7Ci0JCQkJaWYgKGJsb2NrX3NlY3RvcnMgPCA4KQotCQkJCQlibG9ja19zZWN0b3JzID0gODsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjU2OgotCQkJCWVycm9yX3NlY3RvciA+Pj0gMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9CisJaWYgKGRyaXZlcl9ieXRlKHJlc3VsdCkgIT0gRFJJVkVSX1NFTlNFICYmCisJICAgICghc2Vuc2VfdmFsaWQgfHwgc2Vuc2VfZGVmZXJyZWQpKQorCQlnb3RvIG91dDsKIAotCQkJZXJyb3Jfc2VjdG9yICY9IH4oYmxvY2tfc2VjdG9ycyAtIDEpOwotCQkJZ29vZF9ieXRlcyA9IChlcnJvcl9zZWN0b3IgLSBTQ3BudC0+cmVxdWVzdC0+c2VjdG9yKSA8PCA5OwotCQkJaWYgKGdvb2RfYnl0ZXMgPCAwIHx8IGdvb2RfYnl0ZXMgPj0gdGhpc19jb3VudCkKLQkJCQlnb29kX2J5dGVzID0gMDsKKwlzd2l0Y2ggKHNzaGRyLnNlbnNlX2tleSkgeworCWNhc2UgSEFSRFdBUkVfRVJST1I6CisJY2FzZSBNRURJVU1fRVJST1I6CisJCWlmICghYmxrX2ZzX3JlcXVlc3QoU0NwbnQtPnJlcXVlc3QpKQorCQkJZ290byBvdXQ7CisJCWluZm9fdmFsaWQgPSBzY3NpX2dldF9zZW5zZV9pbmZvX2ZsZChTQ3BudC0+c2Vuc2VfYnVmZmVyLAorCQkJCQkJICAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCisJCQkJCQkgICAgICZiYWRfbGJhKTsKKwkJaWYgKCFpbmZvX3ZhbGlkKQorCQkJZ290byBvdXQ7CisJCWlmICh4ZmVyX3NpemUgPD0gU0NwbnQtPmRldmljZS0+c2VjdG9yX3NpemUpCisJCQlnb3RvIG91dDsKKwkJc3dpdGNoIChTQ3BudC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZSkgeworCQljYXNlIDI1NjoKKwkJCXN0YXJ0X2xiYSA8PD0gMTsKIAkJCWJyZWFrOwotCi0JCWNhc2UgUkVDT1ZFUkVEX0VSUk9SOiAvKiBhbiBlcnJvciBvY2N1cnJlZCwgYnV0IGl0IHJlY292ZXJlZCAqLwotCQljYXNlIE5PX1NFTlNFOiAvKiBMTEREIGdvdCBzZW5zZSBkYXRhICovCi0JCQkvKgotCQkJICogSW5mb3JtIHRoZSB1c2VyLCBidXQgbWFrZSBzdXJlIHRoYXQgaXQncyBub3QgdHJlYXRlZAotCQkJICogYXMgYSBoYXJkIGVycm9yLgotCQkJICovCi0JCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKLQkJCVNDcG50LT5yZXN1bHQgPSAwOwotCQkJbWVtc2V0KFNDcG50LT5zZW5zZV9idWZmZXIsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JCQlnb29kX2J5dGVzID0gdGhpc19jb3VudDsKKwkJY2FzZSA1MTI6CiAJCQlicmVhazsKLQotCQljYXNlIElMTEVHQUxfUkVRVUVTVDoKLQkJCWlmIChTQ3BudC0+ZGV2aWNlLT51c2VfMTBfZm9yX3J3ICYmCi0JCQkgICAgKFNDcG50LT5jbW5kWzBdID09IFJFQURfMTAgfHwKLQkJCSAgICAgU0NwbnQtPmNtbmRbMF0gPT0gV1JJVEVfMTApKQotCQkJCVNDcG50LT5kZXZpY2UtPnVzZV8xMF9mb3JfcncgPSAwOwotCQkJaWYgKFNDcG50LT5kZXZpY2UtPnVzZV8xMF9mb3JfbXMgJiYKLQkJCSAgICAoU0NwbnQtPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCB8fAotCQkJICAgICBTQ3BudC0+Y21uZFswXSA9PSBNT0RFX1NFTEVDVF8xMCkpCi0JCQkJU0NwbnQtPmRldmljZS0+dXNlXzEwX2Zvcl9tcyA9IDA7CisJCWNhc2UgMTAyNDoKKwkJCXN0YXJ0X2xiYSA+Pj0gMTsKIAkJCWJyZWFrOwotCisJCWNhc2UgMjA0ODoKKwkJCXN0YXJ0X2xiYSA+Pj0gMjsKKwkJCWJyZWFrOworCQljYXNlIDQwOTY6CisJCQlzdGFydF9sYmEgPj49IDM7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKKwkJCS8qIFByaW50IHNvbWV0aGluZyBoZXJlIHdpdGggbGltaXRpbmcgZnJlcXVlbmN5LiAqLworCQkJZ290byBvdXQ7CiAJCQlicmVhazsKIAkJfQorCQkvKiBUaGlzIGNvbXB1dGF0aW9uIHNob3VsZCBhbHdheXMgYmUgZG9uZSBpbiB0ZXJtcyBvZgorCQkgKiB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZGV2aWNlJ3MgbWVkaXVtLgorCQkgKi8KKwkJZ29vZF9ieXRlcyA9IChiYWRfbGJhIC0gc3RhcnRfbGJhKSpTQ3BudC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKKwkJYnJlYWs7CisJY2FzZSBSRUNPVkVSRURfRVJST1I6CisJY2FzZSBOT19TRU5TRToKKwkJLyogSW5mb3JtIHRoZSB1c2VyLCBidXQgbWFrZSBzdXJlIHRoYXQgaXQncyBub3QgdHJlYXRlZAorCQkgKiBhcyBhIGhhcmQgZXJyb3IuCisJCSAqLworCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKKwkJU0NwbnQtPnJlc3VsdCA9IDA7CisJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQlnb29kX2J5dGVzID0geGZlcl9zaXplOworCQlicmVhazsKKwljYXNlIElMTEVHQUxfUkVRVUVTVDoKKwkJaWYgKFNDcG50LT5kZXZpY2UtPnVzZV8xMF9mb3JfcncgJiYKKwkJICAgIChTQ3BudC0+Y21uZFswXSA9PSBSRUFEXzEwIHx8CisJCSAgICAgU0NwbnQtPmNtbmRbMF0gPT0gV1JJVEVfMTApKQorCQkJU0NwbnQtPmRldmljZS0+dXNlXzEwX2Zvcl9ydyA9IDA7CisJCWlmIChTQ3BudC0+ZGV2aWNlLT51c2VfMTBfZm9yX21zICYmCisJCSAgICAoU0NwbnQtPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCB8fAorCQkgICAgIFNDcG50LT5jbW5kWzBdID09IE1PREVfU0VMRUNUXzEwKSkKKwkJCVNDcG50LT5kZXZpY2UtPnVzZV8xMF9mb3JfbXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9Ci0JLyoKLQkgKiBUaGlzIGNhbGxzIHRoZSBnZW5lcmljIGNvbXBsZXRpb24gZnVuY3Rpb24sIG5vdyB0aGF0IHdlIGtub3cKLQkgKiBob3cgbWFueSBhY3R1YWwgc2VjdG9ycyBmaW5pc2hlZCwgYW5kIGhvdyBtYW55IHNlY3RvcnMgd2UgbmVlZAotCSAqIHRvIHNheSBoYXZlIGZhaWxlZC4KLQkgKi8KLQlzY3NpX2lvX2NvbXBsZXRpb24oU0NwbnQsIGdvb2RfYnl0ZXMsIGJsb2NrX3NlY3RvcnMgPDwgOSk7Cisgb3V0OgorCXNjc2lfaW9fY29tcGxldGlvbihTQ3BudCwgZ29vZF9ieXRlcyk7CiB9CiAKIHN0YXRpYyBpbnQgbWVkaWFfbm90X3ByZXNlbnQoc3RydWN0IHNjc2lfZGlzayAqc2RrcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZWFnYXRlLmMgYi9kcml2ZXJzL3Njc2kvc2VhZ2F0ZS5jCmluZGV4IDdmYTRkYTQuLjNmMzEyYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZWFnYXRlLmMKKysrIGIvZHJpdmVycy9zY3NpL3NlYWdhdGUuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJCXJldHVybiAwOwogCiAJaG9zdG5vID0gaW5zdGFuY2UtPmhvc3Rfbm87Ci0JaWYgKHJlcXVlc3RfaXJxIChpcnEsIGRvX3NlYWdhdGVfcmVjb25uZWN0X2ludHIsIFNBX0lOVEVSUlVQVCwgKGNvbnRyb2xsZXJfdHlwZSA9PSBTRUFHQVRFKSA/ICJzZWFnYXRlIiA6ICJ0bWMtOHh4IiwgaW5zdGFuY2UpKSB7CisJaWYgKHJlcXVlc3RfaXJxIChpcnEsIGRvX3NlYWdhdGVfcmVjb25uZWN0X2ludHIsIElSUUZfRElTQUJMRUQsIChjb250cm9sbGVyX3R5cGUgPT0gU0VBR0FURSkgPyAic2VhZ2F0ZSIgOiAidG1jLTh4eCIsIGluc3RhbmNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgInNjc2klZCA6IHVuYWJsZSB0byBhbGxvY2F0ZSBJUlElZFxuIiwgaG9zdG5vLCBpcnEpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDk4YjkzMTJiLi42NWVlZjMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTI4LDcgKzI4LDYgQEAKICAqICAgICAgICAob3RoZXJ3aXNlIHRoZSBtYWNyb3MgY29tcGlsZSB0byBlbXB0eSBzdGF0ZW1lbnRzKS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xNDAyLDYgKzE0MDEsNyBAQAogCVNnX2RldmljZSAqc2RwID0gTlVMTDsKIAlzdHJ1Y3QgY2RldiAqIGNkZXYgPSBOVUxMOwogCWludCBlcnJvciwgazsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAogCWRpc2sgPSBhbGxvY19kaXNrKDEpOwogCWlmICghZGlzaykgewpAQCAtMTQyOSw3ICsxNDI5LDcgQEAKIAogCWVycm9yID0gY2Rldl9hZGQoY2RldiwgTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCBrKSwgMSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dDsKKwkJZ290byBjZGV2X2FkZF9lcnI7CiAKIAlzZHAtPmNkZXYgPSBjZGV2OwogCWlmIChzZ19zeXNmc192YWxpZCkgewpAQCAtMTQ1Niw2ICsxNDU2LDEzIEBACiAKIAlyZXR1cm4gMDsKIAorY2Rldl9hZGRfZXJyOgorCXdyaXRlX2xvY2tfaXJxc2F2ZSgmc2dfZGV2X2Fycl9sb2NrLCBpZmxhZ3MpOworCWtmcmVlKHNnX2Rldl9hcnJba10pOworCXNnX2Rldl9hcnJba10gPSBOVUxMOworCXNnX25yX2Rldi0tOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZzZ19kZXZfYXJyX2xvY2ssIGlmbGFncyk7CisKIG91dDoKIAlwdXRfZGlzayhkaXNrKTsKIAlpZiAoY2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zaW03MTAuYyBiL2RyaXZlcnMvc2NzaS9zaW03MTAuYwppbmRleCAyNTU4ODZhLi5iMjdlODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2ltNzEwLmMKKysrIGIvZHJpdmVycy9zY3NpL3NpbTcxMC5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMTM0LDcgKzEzMyw3IEBACiAJaG9zdC0+dGhpc19pZCA9IHNjc2lfaWQ7CiAJaG9zdC0+YmFzZSA9IGJhc2VfYWRkcjsKIAlob3N0LT5pcnEgPSBpcnE7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgTkNSXzcwMF9pbnRyLCBTQV9TSElSUSwgInNpbTcxMCIsIGhvc3QpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgTkNSXzcwMF9pbnRyLCBJUlFGX1NIQVJFRCwgInNpbTcxMCIsIGhvc3QpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2ltNzEwOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3IuYyBiL2RyaXZlcnMvc2NzaS9zci5jCmluZGV4IGViZjY1NzkuLmZkOTQ0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zci5jCkBAIC0yOTIsNyArMjkyLDcgQEAKIAkgKiBob3cgbWFueSBhY3R1YWwgc2VjdG9ycyBmaW5pc2hlZCwgYW5kIGhvdyBtYW55IHNlY3RvcnMgd2UgbmVlZAogCSAqIHRvIHNheSBoYXZlIGZhaWxlZC4KIAkgKi8KLQlzY3NpX2lvX2NvbXBsZXRpb24oU0NwbnQsIGdvb2RfYnl0ZXMsIGJsb2NrX3NlY3RvcnMgPDwgOSk7CisJc2NzaV9pb19jb21wbGV0aW9uKFNDcG50LCBnb29kX2J5dGVzKTsKIH0KIAogc3RhdGljIGludCBzcl9pbml0X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqIFNDcG50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jIGIvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCmluZGV4IDlkZGU4ZGYuLmEzZTlkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKQEAgLTM0LDcgKzM0LDYgQEAKICAqICAgICAgICAgICAgICBIUCA2MDIwIHdyaXRlcnMgbm93IHN1cHBvcnRlZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmMgYi9kcml2ZXJzL3Njc2kvc3QuYwppbmRleCBiNTIxOGZjLi43NTZjZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvc3QuYwpAQCAtMzU5OSw3ICszNTk5LDYgQEAKIAl0Yi0+dXNlX3NnID0gbWF4X3NnOwogCXRiLT5mcnAgPSAoc3RydWN0IHN0X2J1Zl9mcmFnbWVudCAqKSgmKHRiLT5zZ1swXSkgKyBtYXhfc2cpOwogCi0JdGItPmluX3VzZSA9IDE7CiAJdGItPmRtYSA9IG5lZWRfZG1hOwogCXRiLT5idWZmZXJfc2l6ZSA9IGdvdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmggYi9kcml2ZXJzL3Njc2kvc3QuaAppbmRleCA0MTEyMDkwLi4wNWE1Y2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuaAorKysgYi9kcml2ZXJzL3Njc2kvc3QuaApAQCAtMzEsNyArMzEsNiBAQAogCiAvKiBUaGUgdGFwZSBidWZmZXIgZGVzY3JpcHRvci4gKi8KIHN0cnVjdCBzdF9idWZmZXIgewotCXVuc2lnbmVkIGNoYXIgaW5fdXNlOwogCXVuc2lnbmVkIGNoYXIgZG1hOwkvKiBETUEtYWJsZSBidWZmZXIgKi8KIAl1bnNpZ25lZCBjaGFyIGRvX2RpbzsgICAvKiBkaXJlY3QgaS9vIHNldCB1cD8gKi8KIAlpbnQgYnVmZmVyX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKaW5kZXggMjVjY2VkOS4uMmViZTBkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYwpAQCAtNTM1LDcgKzUzNSw2IEBACiAgICAgCiB9CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaWYgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jIGIvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jCmluZGV4IDJlMmMxZWIuLjFmMzI4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zeF9lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM3hfZXNwLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAllc3AtPmVzcF9jb21tYW5kX2R2bWEgPSBkdm1hX3Z0b2IoKHVuc2lnbmVkIGxvbmcpZXNwLT5lc3BfY29tbWFuZCk7CiAKIAllc3AtPmlycSA9IDI7Ci0JaWYgKHJlcXVlc3RfaXJxKGVzcC0+aXJxLCBlc3BfaW50ciwgU0FfSU5URVJSVVBULCAKKwlpZiAocmVxdWVzdF9pcnEoZXNwLT5pcnEsIGVzcF9pbnRyLCBJUlFGX0RJU0FCTEVELAogCQkJIlNVTjNYIFNDU0kiLCBlc3AtPmVob3N0KSkgewogCQllc3BfZGVhbGxvY2F0ZShlc3ApOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW01M2M4eHguaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW01M2M4eHguaAppbmRleCA0ODExMDM3Li43NTE5NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltNTNjOHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bTUzYzh4eC5oCkBAIC00MCw3ICs0MCw2IEBACiAjaWZuZGVmIFNZTTUzQzhYWF9ICiAjZGVmaW5lIFNZTTUzQzhYWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqICBETUEgYWRkcmVzc2luZyBtb2RlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9nbHVlLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwppbmRleCBlYTgyZDNkLi44YzUwNTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYwpAQCAtMTU0Nyw3ICsxNTQ3LDcgQEAKIAkgKiAgSWYgd2Ugc3luY2hvbml6ZSB0aGUgQyBjb2RlIHdpdGggU0NSSVBUUyBvbiBpbnRlcnJ1cHQsIAogCSAqICB3ZSBkbyBub3Qgd2FudCB0byBzaGFyZSB0aGUgSU5UUiBsaW5lIGF0IGFsbC4KIAkgKi8KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBzeW01M2M4eHhfaW50ciwgU0FfU0hJUlEsIE5BTUU1M0M4WFgsIG5wKSkgeworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIHN5bTUzYzh4eF9pbnRyLCBJUlFGX1NIQVJFRCwgTkFNRTUzQzhYWCwgbnApKSB7CiAJCXByaW50Zl9lcnIoIiVzOiByZXF1ZXN0IGlycSAlZCBmYWlsdXJlXG4iLAogCQkJc3ltX25hbWUobnApLCBwZGV2LT5pcnEpOwogCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oCmluZGV4IGE0NDZjZGEuLmUwMjJkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5oCkBAIC00MCw3ICs0MCw2IEBACiAjaWZuZGVmIFNZTV9HTFVFX0gKICNkZWZpbmUgU1lNX0dMVUVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90MTI4LmMgYi9kcml2ZXJzL3Njc2kvdDEyOC5jCmluZGV4IGEyNGY2NjEuLjJkZjY3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90MTI4LmMKKysrIGIvZHJpdmVycy9zY3NpL3QxMjguYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0YW5jZSwgVDEyOF9JUlFTKTsKIAogCWlmIChpbnN0YW5jZS0+aXJxICE9IFNDU0lfSVJRX05PTkUpIAotCSAgICBpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPmlycSwgdDEyOF9pbnRyLCBTQV9JTlRFUlJVUFQsICJ0MTI4IiwgaW5zdGFuY2UpKSB7CisJICAgIGlmIChyZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCB0MTI4X2ludHIsIElSUUZfRElTQUJMRUQsICJ0MTI4IiwgaW5zdGFuY2UpKSB7CiAJCXByaW50aygic2NzaSVkIDogSVJRJWQgbm90IGZyZWUsIGludGVycnVwdHMgZGlzYWJsZWRcbiIsIAogCQkgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGluc3RhbmNlLT5pcnEpOwogCQlpbnN0YW5jZS0+aXJxID0gU0NTSV9JUlFfTk9ORTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMgYi9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCmluZGV4IDkxMzIyYWYuLjk0MDRmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKKysrIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYwpAQCAtMjE4LDcgKzIxOCw2IEBACiAjZW5kaWYKICNkZWZpbmUgRENCREVCVUcxKHgpIENfTk9QCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpAQCAtMjU4NSw3ICsyNTg0LDcgQEAKIAkvKiBSZXNldCBQZW5kaW5nIElOVCAqLwogCURDMzkwX3JlYWQ4XyhJTlRfU3RhdHVzLCBpb19wb3J0KTsKIAotCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRvX0RDMzkwX0ludGVycnVwdCwgU0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG9fREMzOTBfSW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkidG1zY3NpbSIsIHBBQ0IpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiREMzOTA6IHJlZ2lzdGVyIElSUSBlcnJvciFcbiIpOwogCQlnb3RvIG91dF9yZWxlYXNlX3JlZ2lvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmggYi9kcml2ZXJzL3Njc2kvdG1zY3NpbS5oCmluZGV4IGQ0NDk1MjcuLjliNjZmYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmgKKysrIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaApAQCAtOSw3ICs5LDYgQEAKICNkZWZpbmUgX1RNU0NTSU1fSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBTQ1NJX0lSUV9OT05FIDI1NQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCAzM2NkOTBmLi41NzQ0OTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCisrKyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKQEAgLTQwNSw3ICs0MDUsNiBAQAogICogIHRoZSBkcml2ZXIgc2V0cyBob3N0LT53aXNoX2Jsb2NrID0gVFJVRSBmb3IgYWxsIElTQSBib2FyZHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtODczLDcgKzg3Miw3IEBACiAKICAgIC8qIEJvYXJkIGRldGVjdGVkLCBhbGxvY2F0ZSBpdHMgSVJRICovCiAgICBpZiAocmVxdWVzdF9pcnEoaXJxLCBkb19pbnRlcnJ1cHRfaGFuZGxlciwKLSAgICAgICAgICAgICBTQV9JTlRFUlJVUFQgfCAoKHN1YnZlcnNpb24gPT0gRVNBKSA/IFNBX1NISVJRIDogMCksCisgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRCB8ICgoc3VidmVyc2lvbiA9PSBFU0EpID8gSVJRRl9TSEFSRUQgOiAwKSwKICAgICAgICAgICAgICBkcml2ZXJfbmFtZSwgKHZvaWQgKikgJnNoYVtqXSkpIHsKICAgICAgIHByaW50aygiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIGRldGFjaGluZy5cbiIsIG5hbWUsIGlycSk7CiAgICAgICBnb3RvIGZyZWVsb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggMjczMDdmZS4uNjgwZjM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC03MSw3ICs3MSw2IEBACiAgKglSaWNoYXJkIEhpcnN0IDxyaWNoYXJkQHNsZWVwaWUuZGVtb24uY28udWs+ICBBdWd1c3QgMjAwMAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvd2QzM2M5My5oIGIvZHJpdmVycy9zY3NpL3dkMzNjOTMuaAppbmRleCAxOTNlYzUxLi5lZGNiMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvd2QzM2M5My5oCisrKyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgV0QzM0M5M19ICiAjZGVmaW5lIFdEMzNDOTNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUFJPQ19JTlRFUkZBQ0UgICAgIC8qIGFkZCBjb2RlIGZvciAvcHJvYy9zY3NpL3dkMzNjOTMveHh4IGludGVyZmFjZSAqLwogI2lmZGVmICBQUk9DX0lOVEVSRkFDRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkNzAwMC5jIGIvZHJpdmVycy9zY3NpL3dkNzAwMC5jCmluZGV4IDU3NDk1NWIuLmEwYjYxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS93ZDcwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKQEAgLTEyNTAsNyArMTI1MCw3IEBACiAJCXJldHVybiAwOwogCiAKLQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCB3ZDcwMDBfaW50ciwgU0FfSU5URVJSVVBULCAid2Q3MDAwIiwgaG9zdCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCB3ZDcwMDBfaW50ciwgSVJRRl9ESVNBQkxFRCwgIndkNzAwMCIsIGhvc3QpKSB7CiAJCXByaW50aygid2Q3MDAwX2luaXQ6IGNhbid0IGdldCBJUlEgJWQuXG4iLCBob3N0LT5pcnEpOwogCQlyZXR1cm4gKDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS96YWxvbi5jIGIvZHJpdmVycy9zY3NpL3phbG9uLmMKaW5kZXggYTZjZmJiMy4uNGI1ZjkwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3phbG9uLmMKKysrIGIvZHJpdmVycy9zY3NpL3phbG9uLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCWlmICghaG9zdCkKIAkJZ290byBmYWlsOwogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBuY3I1M2M4eHhfaW50ciwgU0FfU0hJUlEsICJ6YWxvbiIsIGhvc3QpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBuY3I1M2M4eHhfaW50ciwgSVJRRl9TSEFSRUQsICJ6YWxvbiIsIGhvc3QpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycSBwcm9ibGVtIHdpdGggJWQsIGRldGFjaGluZ1xuICIsCiAJCQlkZXYtPmRldi5idXNfaWQsIGRldi0+aXJxKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggNzU3MjY2NS4uNTc0MzgzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC03LDcgKzcsNiBAQAogICoKICAqICAkSWQ6IDIxMjg1LmMsdiAxLjM3IDIwMDIvMDcvMjggMTA6MDM6Mjcgcm1rIEV4cCAkCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQ3OSw3ICs0NzgsNiBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJ0dHlGQiIsCiAJLmRldl9uYW1lCQk9ICJ0dHlGQiIsCi0JLmRldmZzX25hbWUgICAgICAgICAgICAgPSAidHR5RkIiLAogCS5tYWpvcgkJCT0gU0VSSUFMXzIxMjg1X01BSk9SLAogCS5taW5vcgkJCT0gU0VSSUFMXzIxMjg1X01JTk9SLAogCS5ucgkJCT0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCmluZGV4IGI4OGE3YzEuLjk5M2E3MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpAQCAtMTMxLDE3ICsxMzAsNiBAQAogc3RhdGljIGludCBtNjgzMjhfY29uc29sZV9jYmF1ZCAgID0gREVGQVVMVF9DQkFVRDsKIAogCi0vKgotICogdG1wX2J1ZiBpcyB1c2VkIGFzIGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBzZXJpYWxfd3JpdGUuICBXZSBuZWVkIHRvCi0gKiBsb2NrIGl0IGluIGNhc2UgdGhlIG1lbWNweV9mcm9tZnMgYmxvY2tzIHdoaWxlIHN3YXBwaW5nIGluIGEgcGFnZSwKLSAqIGFuZCBzb21lIG90aGVyIHByb2dyYW0gdHJpZXMgdG8gZG8gYSBzZXJpYWwgd3JpdGUgYXQgdGhlIHNhbWUgdGltZS4KLSAqIFNpbmNlIHRoZSBsb2NrIHdpbGwgb25seSBjb21lIHVuZGVyIGNvbnRlbnRpb24gd2hlbiB0aGUgc3lzdGVtIGlzCi0gKiBzd2FwcGluZyBhbmQgYXZhaWxhYmxlIG1lbW9yeSBpcyBsb3csIGl0IG1ha2VzIHNlbnNlIHRvIHNoYXJlIG9uZQotICogYnVmZmVyIGFjcm9zcyBhbGwgdGhlIHNlcmlhbCBwb3J0cywgc2luY2UgaXQgc2lnbmlmaWNhbnRseSBzYXZlcwotICogbWVtb3J5IGlmIGxhcmdlIG51bWJlcnMgb2Ygc2VyaWFsIHBvcnRzIGFyZSBvcGVuLgotICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciB0bXBfYnVmW1NFUklBTF9YTUlUX1NJWkVdOyAvKiBUaGlzIGlzIGNoZWF0aW5nICovCi0KIHN0YXRpYyBpbmxpbmUgaW50IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgbTY4a19zZXJpYWwgKmluZm8sCiAJCQkJCWNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCiB7CkBAIC0yMTEsMTYgKzE5OSwxNiBAQAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAicnNfc3RvcCIpKQogCQlyZXR1cm47CiAJCi0Jc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl1YXJ0LT51c3RjbnQgJj0gflVTVENOVF9UWEVOOwotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcnNfcHV0X2NoYXIoY2hhciBjaCkKIHsKICAgICAgICAgaW50IGZsYWdzLCBsb29wcyA9IDA7CiAKLSAgICAgICAgc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAl3aGlsZSAoIShVVFggJiBVVFhfVFhfQVZBSUwpICYmIChsb29wcyA8IDEwMDApKSB7CiAgICAgICAgIAlsb29wcysrOwpAQCAtMjI5LDcgKzIxNyw3IEBACiAKIAlVVFhfVFhEQVRBID0gY2g7CiAgICAgICAgIHVkZWxheSg1KTsKLSAgICAgICAgcmVzdG9yZV9mbGFncyhmbGFncyk7CisgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcnNfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTI0MSw3ICsyMjksNyBAQAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAicnNfc3RhcnQiKSkKIAkJcmV0dXJuOwogCQotCXNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKGluZm8tPnhtaXRfY250ICYmIGluZm8tPnhtaXRfYnVmICYmICEodWFydC0+dXN0Y250ICYgVVNUQ05UX1RYRU4pKSB7CiAjaWZkZWYgVVNFX0lOVFMKIAkJdWFydC0+dXN0Y250IHw9IFVTVENOVF9UWEVOIHwgVVNUQ05UX1RYX0lOVFJfTUFTSzsKQEAgLTI0OSw3ICsyMzcsNyBAQAogCQl1YXJ0LT51c3RjbnQgfD0gVVNUQ05UX1RYRU47CiAjZW5kaWYKIAl9Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKiBEcm9wIGludG8gZWl0aGVyIHRoZSBib290IG1vbml0b3Igb3Iga2FkYiB1cG9uIHJlY2VpdmluZyBhIGJyZWFrCkBAIC0zMjcsMTQgKzMxNSw2IEBACiAJCWlmKCF0dHkpCiAJCQlnb3RvIGNsZWFyX2FuZF9leGl0OwogCQkKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IG92ZXJmbG93IHRoZSBidWZmZXIKLQkJICovCi0JCWlmICh0dHlfcmVxdWVzdF9idWZmZXJfcm9vbSh0dHksIDEpID09IDApIHsKLQkJCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQogCQlmbGFnID0gVFRZX05PUk1BTDsKIAogCQlpZihyeCAmIFVSWF9QQVJJVFlfRVJST1IpIHsKQEAgLTQ3Myw3ICs0NTMsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCS8qCiAJICogQ2xlYXIgdGhlIEZJRk8gYnVmZmVycyBhbmQgZGlzYWJsZSB0aGVtCkBAIC01MDYsNyArNDg2LDcgQEAKIAljaGFuZ2Vfc3BlZWQoaW5mbyk7CiAKIAlpbmZvLT5mbGFncyB8PSBTX0lOSVRJQUxJWkVEOwotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTIzLDcgKzUwMyw3IEBACiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBTX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOyAvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCiAJaWYgKGluZm8tPnhtaXRfYnVmKSB7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mby0+eG1pdF9idWYpOwpAQCAtNTM0LDcgKzUxNCw3IEBACiAJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CiAJCiAJaW5mby0+ZmxhZ3MgJj0gflNfSU5JVElBTElaRUQ7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBzdHJ1Y3QgewpAQCAtNjU1LDI0ICs2MzUsMjQgQEAKIAlpZiAoaW5mbyA9PSAwKSByZXR1cm47CiAJaWYgKGluZm8tPnhtaXRfYnVmID09IDApIHJldHVybjsKIAotCXNhdmVfZmxhZ3MoZmxhZ3MpOyAgY2xpKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxlZnQgPSBpbmZvLT54bWl0X2NudDsKIAl3aGlsZSAobGVmdCAhPSAwKSB7CiAJCWMgPSBpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X3RhaWxdOwogCQlpbmZvLT54bWl0X3RhaWwgPSAoaW5mby0+eG1pdF90YWlsKzEpICYgKFNFUklBTF9YTUlUX1NJWkUtMSk7CiAJCWluZm8tPnhtaXRfY250LS07Ci0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkJcnNfcHV0X2NoYXIoYyk7CiAKLQkJc2F2ZV9mbGFncyhmbGFncyk7ICBjbGkoKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlsZWZ0ID0gbWluKGluZm8tPnhtaXRfY250LCBsZWZ0LTEpOwogCX0KIAogCS8qIExhc3QgY2hhcmFjdGVyIGlzIGJlaW5nIHRyYW5zbWl0dGVkIG5vdyAoaG9wZWZ1bGx5KS4gKi8KIAl1ZGVsYXkoNSk7CiAKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuOwogfQogCkBAIC03MjAsMTEgKzcwMCwxMSBAQAogI2VuZGlmCiAKIAkvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi8KLQlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJaWYgKGluZm8tPnhtaXRfY250IDw9IDAgfHwgdHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCB8fAogCQkJIWluZm8tPnhtaXRfYnVmKSB7Ci0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTc0OSw3ICs3MjksNyBAQAogCXdoaWxlICghKHVhcnQtPnV0eC53ICYgVVRYX1RYX0FWQUlMKSkgdWRlbGF5KDUpOwogCX0KICNlbmRpZgotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogZXh0ZXJuIHZvaWQgY29uc29sZV9wcmludG4oY29uc3QgY2hhciAqIGIsIGludCBjb3VudCk7CkBAIC03NjgsMTggKzc0OCwyMiBAQAogCWlmICghdHR5IHx8ICFpbmZvLT54bWl0X2J1ZikKIAkJcmV0dXJuIDA7CiAKLQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAl3aGlsZSAoMSkgewotCQljbGkoKTsJCQorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJCiAJCWMgPSBtaW5fdChpbnQsIGNvdW50LCBtaW4oU0VSSUFMX1hNSVRfU0laRSAtIGluZm8tPnhtaXRfY250IC0gMSwKIAkJCQkgICBTRVJJQUxfWE1JVF9TSVpFIC0gaW5mby0+eG1pdF9oZWFkKSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCQlpZiAoYyA8PSAwKQogCQkJYnJlYWs7CiAKIAkJbWVtY3B5KGluZm8tPnhtaXRfYnVmICsgaW5mby0+eG1pdF9oZWFkLCBidWYsIGMpOworCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWluZm8tPnhtaXRfaGVhZCA9IChpbmZvLT54bWl0X2hlYWQgKyBjKSAmIChTRVJJQUxfWE1JVF9TSVpFLTEpOwogCQlpbmZvLT54bWl0X2NudCArPSBjOwotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlidWYgKz0gYzsKIAkJY291bnQgLT0gYzsKIAkJdG90YWwgKz0gYzsKQEAgLTc4Nyw3ICs3NzEsNyBAQAogCiAJaWYgKGluZm8tPnhtaXRfY250ICYmICF0dHktPnN0b3BwZWQgJiYgIXR0eS0+aHdfc3RvcHBlZCkgewogCQkvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi8KLQkJY2xpKCk7CQkKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsJCQogI2lmbmRlZiBVU0VfSU5UUwogCQl3aGlsZShpbmZvLT54bWl0X2NudCkgewogI2VuZGlmCkBAIC04MDcsOSArNzkxLDkgQEAKICNpZm5kZWYgVVNFX0lOVFMKIAkJfQogI2VuZGlmCi0JCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCiAJcmV0dXJuIHRvdGFsOwogfQogCkBAIC04MzgsMTIgKzgyMiwxMyBAQAogc3RhdGljIHZvaWQgcnNfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IG02OGtfc2VyaWFsICppbmZvID0gKHN0cnVjdCBtNjhrX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJCQkKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgInJzX2ZsdXNoX2J1ZmZlciIpKQogCQlyZXR1cm47Ci0JY2xpKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKLQlzdGkoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJdHR5X3dha2V1cCh0dHkpOwogfQogCkBAIC05NzMsMTQgKzk1OCwxNSBAQAogCW02ODMyOF91YXJ0ICp1YXJ0ID0gJnVhcnRfYWRkcltpbmZvLT5saW5lXTsKICNlbmRpZgogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljbGkoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAjaWZkZWYgQ09ORklHX1NFUklBTF82ODMyOF9SVFNfQ1RTCiAJc3RhdHVzID0gKHVhcnQtPnV0eC53ICYgVVRYX0NUU19TVEFUKSA/IDEgOiAwOwogI2Vsc2UKIAlzdGF0dXMgPSAwOwogI2VuZGlmCi0Jc3RpKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXB1dF91c2VyKHN0YXR1cyx2YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC05OTQsMTQgKzk4MCwxMyBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICBpZiAoIWluZm8tPnBvcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzYXZlX2ZsYWdzKGZsYWdzKTsKLSAgICAgICAgY2xpKCk7CisgICAgICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKICNpZmRlZiBVU0VfSU5UUwkKIAl1YXJ0LT51dHgudyB8PSBVVFhfU0VORF9CUkVBSzsKIAltc2xlZXBfaW50ZXJydXB0aWJsZShkdXJhdGlvbik7CiAJdWFydC0+dXR4LncgJj0gflVUWF9TRU5EX0JSRUFLOwogI2VuZGlmCQkKLSAgICAgICAgcmVzdG9yZV9mbGFncyhmbGFncyk7CisgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIGludCByc19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCkBAIC0xMDYwLDcgKzEwNDUsNyBAQAogCQkJCQkgICAgICAgKHN0cnVjdCBzZXJpYWxfc3RydWN0ICopIGFyZyk7CiAJCWNhc2UgVElPQ1NFUkdFVExTUjogLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCiAJCQlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHZvaWQgKikgYXJnLAotCQkJCQkJc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCQkJCQkJc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogCQkJCXJldHVybiBnZXRfbHNyX2luZm8oaW5mbywgKHVuc2lnbmVkIGludCAqKSBhcmcpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWNhc2UgVElPQ1NFUkdTVFJVQ1Q6CkBAIC0xMTEzLDEwICsxMDk4LDEwIEBACiAJaWYgKCFpbmZvIHx8IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJyc19jbG9zZSIpKQogCQlyZXR1cm47CiAJCi0Jc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkKIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCQpAQCAtMTEzOCw3ICsxMTIzLDcgQEAKIAkJaW5mby0+Y291bnQgPSAwOwogCX0KIAlpZiAoaW5mby0+Y291bnQpIHsKLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlpbmZvLT5mbGFncyB8PSBTX0NMT1NJTkc7CkBAIC0xMTg2LDcgKzExNzEsNyBAQAogCX0KIAlpbmZvLT5mbGFncyAmPSB+KFNfTk9STUFMX0FDVElWRXxTX0NMT1NJTkcpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKgpAQCAtMTI2Miw5ICsxMjQ3LDkgQEAKIAlpbmZvLT5jb3VudC0tOwogCWluZm8tPmJsb2NrZWRfb3BlbisrOwogCXdoaWxlICgxKSB7Ci0JCWNsaSgpOworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQltNjhrX3J0c2R0cihpbmZvLCAxKTsKLQkJc3RpKCk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CiAJCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8CiAJCSAgICAhKGluZm8tPmZsYWdzICYgU19JTklUSUFMSVpFRCkpIHsKQEAgLTE0NDQsNyArMTQyOSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlmb3IoaT0wO2k8TlJfUE9SVFM7aSsrKSB7CiAKQEAgLTE0ODksNyArMTQ3NCw3IEBACiAJCSAgICBzZXJpYWxfcG1baV0tPmRhdGEgPSBpbmZvOwogI2VuZGlmCiAJfQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuaCBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmgKaW5kZXggOTc4ZjhhNi4uNThhYTIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuaAorKysgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9NQzY4M1hYX1NFUklBTF9ICiAjZGVmaW5lIF9NQzY4M1hYX1NFUklBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IHNlcmlhbF9zdHJ1Y3QgewogCWludAl0eXBlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMKaW5kZXggOTg0M2FlMy4uZTgwZTcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKglpbnQgcnNfMzYwX2luaXQodm9pZCk7CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggYmJmNzhhYS4uMDk5NTQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTksNyArMTksNiBAQAogICogIG1hcGJhc2UgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIElPIHBvcnQuCiAgKiAgbWVtYmFzZSBpcyBhbiAnaW9yZW1hcHBlZCcgY29va2llLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtNDksNyArNDgsNyBAQAogCiAvKgogICogQ29uZmlndXJhdGlvbjoKLSAqICAgc2hhcmVfaXJxcyAtIHdoZXRoZXIgd2UgcGFzcyBTQV9TSElSUSB0byByZXF1ZXN0X2lycSgpLiAgVGhpcyBvcHRpb24KKyAqICAgc2hhcmVfaXJxcyAtIHdoZXRoZXIgd2UgcGFzcyBJUlFGX1NIQVJFRCB0byByZXF1ZXN0X2lycSgpLiAgVGhpcyBvcHRpb24KICAqICAgICAgICAgICAgICAgIGlzIHVuc2FmZSB3aGVuIHVzZWQgb24gZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cy4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzaGFyZV9pcnFzID0gU0VSSUFMODI1MF9TSEFSRV9JUlFTOwpAQCAtMTQwMSw3ICsxNDAwLDcgQEAKIHN0YXRpYyBpbnQgc2VyaWFsX2xpbmtfaXJxX2NoYWluKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7CiAJc3RydWN0IGlycV9pbmZvICppID0gaXJxX2xpc3RzICsgdXAtPnBvcnQuaXJxOwotCWludCByZXQsIGlycV9mbGFncyA9IHVwLT5wb3J0LmZsYWdzICYgVVBGX1NIQVJFX0lSUSA/IFNBX1NISVJRIDogMDsKKwlpbnQgcmV0LCBpcnFfZmxhZ3MgPSB1cC0+cG9ydC5mbGFncyAmIFVQRl9TSEFSRV9JUlEgPyBJUlFGX1NIQVJFRCA6IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZpLT5sb2NrKTsKIApAQCAtMjM1NCw3ICsyMzUzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsODI1MF9yZWcgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZHJpdmVyX25hbWUJCT0gInNlcmlhbCIsCi0JLmRldmZzX25hbWUJCT0gInR0cy8iLAogCS5kZXZfbmFtZQkJPSAidHR5UyIsCiAJLm1ham9yCQkJPSBUVFlfTUFKT1IsCiAJLm1pbm9yCQkJPSA2NCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuaCBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuaAppbmRleCA0OTA2MDZiLi45MWJkMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5oCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgJElkOiA4MjUwLmgsdiAxLjggMjAwMi8wNy8yMSAyMTozMjozMCBybWsgRXhwICQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAogc3RydWN0IG9sZF9zZXJpYWxfcG9ydCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX21jYS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9tY2EuYwppbmRleCBhYzIwNTI1Li5kMTBiZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX21jYS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfbWNhLmMKQEAgLTgsNyArOCw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWNhLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCA5NDg4NmMwLi44NjRlZjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTU5NCw4ICs1OTQsOCBAQAogCWVsc2UKIAkJb2Zmc2V0ICs9IGlkeCAqIGJvYXJkLT51YXJ0X29mZnNldDsKIAotCW1heG5yID0gKHBjaV9yZXNvdXJjZV9sZW4ocHJpdi0+ZGV2LCBiYXIpIC0gYm9hcmQtPmZpcnN0X29mZnNldCkgLwotCQkoOCA8PCBib2FyZC0+cmVnX3NoaWZ0KTsKKwltYXhuciA9IChwY2lfcmVzb3VyY2VfbGVuKHByaXYtPmRldiwgYmFyKSAtIGJvYXJkLT5maXJzdF9vZmZzZXQpID4+CisJCShib2FyZC0+cmVnX3NoaWZ0ICsgMyk7CiAKIAlpZiAoYm9hcmQtPmZsYWdzICYgRkxfUkVHSU9OX1NaX0NBUCAmJiBpZHggPj0gbWF4bnIpCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wbnAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMKaW5kZXggNzM5YmM4NGYuLjYzMmY2MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wbnAuYwpAQCAtNDMxLDYgKzQzMSw4IEBACiAjZW5kaWYKIAogCXBvcnQuZmxhZ3MgfD0gVVBGX1NLSVBfVEVTVCB8IFVQRl9CT09UX0FVVE9DT05GOworCWlmIChwbnBfaXJxX2ZsYWdzKGRldiwgMCkgJiBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUpCisJCXBvcnQuZmxhZ3MgfD0gVVBGX1NIQVJFX0lSUTsKIAlwb3J0LnVhcnRjbGsgPSAxODQzMjAwOwogCXBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggZTkyMGQxOS4uNzMxMWQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtMzEsNyArMzEsNiBAQAogICogcmVxdWlyZWQsIHRoZXNlIGhhdmUgdG8gYmUgc3VwcGxpZWQgdmlhIHNvbWUgb3RoZXIgbWVhbnMgKGVnLCBHUElPKQogICogYW5kIGhvb2tlZCBpbnRvIHRoaXMgZHJpdmVyLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMF9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDNkOTY2Y2ZjLi5hOGQ3MTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC0zMSw3ICszMSw2IEBACiAgKiByZXF1aXJlZCwgdGhlc2UgaGF2ZSB0byBiZSBzdXBwbGllZCB2aWEgc29tZSBvdGhlciBtZWFucyAoZWcsIEdQSU8pCiAgKiBhbmQgaG9va2VkIGludG8gdGhpcyBkcml2ZXIuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQogI2RlZmluZSBTVVBQT1JUX1NZU1JRCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdDkxX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXQ5MV9zZXJpYWwuYwppbmRleCBkYjViMjVmLi5hN2Q2NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdDkxX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0OTFfc2VyaWFsLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTM4OCw3ICszODcsNyBAQAogCS8qCiAJICogQWxsb2NhdGUgdGhlIElSUQogCSAqLwotCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgYXQ5MV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAiYXQ5MV9zZXJpYWwiLCBwb3J0KTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIGF0OTFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgImF0OTFfc2VyaWFsIiwgcG9ydCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoImF0OTFfc2VyaWFsOiBhdDkxX3N0YXJ0dXAgLSBDYW4ndCBnZXQgaXJxXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTg2Myw3ICs4NjIsNiBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJhdDkxX3NlcmlhbCIsCiAJLmRldl9uYW1lCQk9IEFUOTFfREVWSUNFTkFNRSwKLQkuZGV2ZnNfbmFtZQkJPSBBVDkxX0RFVklDRU5BTUUsCiAJLm1ham9yCQkJPSBTRVJJQUxfQVQ5MV9NQUpPUiwKIAkubWlub3IJCQk9IE1JTk9SX1NUQVJULAogCS5ucgkJCT0gQVQ5MV9OUl9VQVJULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKaW5kZXggMjY5MTExMi4uZjI3ZDg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAgJElkOiBjbHBzNzExeC5jLHYgMS40MiAyMDAyLzA3LzI4IDEwOjAzOjI4IHJtayBFeHAgJAogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0NMUFM3MTFYX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQogI2RlZmluZSBTVVBQT1JUX1NZU1JRCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggNWNiYTU5YS4uOTBmZjk2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtMzEsNyArMzEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKaW5kZXggMTc0MDZhMC4uOTVhZmMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwpAQCAtMjcsNyArMjcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKaW5kZXggY2RiYTEyOC4uZWYzYmI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwpAQCAtMjcsNyArMjcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKaW5kZXggODk3MDAxNC4uY2FiZDA0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAgKiBGaXhlZCBERUZfVFggdmFsdWUgdGhhdCBjYXVzZWQgdGhlIHNlcmlhbCB0cmFuc21pdHRlciBwaW4gKHR4ZCkgdG8gZ28gdG8gMCB3aGVuCiAgKiBjbG9zaW5nIHRoZSBsYXN0IGZpbGVoYW5kbGUsIE5BU1RZIS4KICAqIEFkZGVkIGJyZWFrIGdlbmVyYXRpb24sIG5vdCB0ZXN0ZWQgdGhvdWdoIQotICogVXNlIFNBX1NISVJRIHdoZW4gcmVxdWVzdF9pcnEoKSBmb3Igc2VyMiBhbmQgc2VyMyAoc2hhcmVkIHdpdGgpIHBhcjAgYW5kIHBhcjEuCisgKiBVc2UgSVJRRl9TSEFSRUQgd2hlbiByZXF1ZXN0X2lycSgpIGZvciBzZXIyIGFuZCBzZXIzIChzaGFyZWQgd2l0aCkgcGFyMCBhbmQgcGFyMS4KICAqIFlvdSBjYW4ndCB1c2UgdGhlbSBhdCB0aGUgc2FtZSB0aW1lICh5ZXQuLiksIGJ1dCB5b3UgY2FuIGhvcGVmdWxseSBzd2l0Y2gKICAqIGJldHdlZW4gc2VyMi9wYXIwLCBzZXIzL3BhcjEgd2l0aCB0aGUgc2FtZSBrZXJuZWwgY29uZmlnLgogICogUmVwbGFjZWQgc29tZSBtYWdpYyBjb25zdGFudHMgd2l0aCBkZWZpbmVzCkBAIC00MjUsNyArNDI1LDYgQEAKIAogc3RhdGljIGNoYXIgKnNlcmlhbF92ZXJzaW9uID0gIiRSZXZpc2lvbjogMS4yNSAkIjsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTI1NzMsMTIgKzI1NzIsNiBAQAogCiAJREZMSVAoCiAJICBpZiAoMSkgewotCi0JCSAgaWYgKHRlc3RfYml0KFRUWV9ET05UX0ZMSVAsICZ0dHktPmZsYWdzKSkgewotCQkJICBERUJVR19MT0coaW5mby0+bGluZSwgIioqKiBUVFlfRE9OVF9GTElQIHNldCBmbGlwLmNvdW50ICVpICoqKlxuIiwgdHR5LT5mbGlwLmNvdW50KTsKLQkJCSAgREVCVUdfTE9HKGluZm8tPmxpbmUsICIqKiogcmVjdl9jbnQgJWlcbiIsIGluZm8tPnJlY3ZfY250KTsKLQkJICB9IGVsc2UgewotCQkgIH0KIAkJICBERUJVR19MT0coaW5mby0+bGluZSwgIioqKiByeHRvdCAlaVxuIiwgaW5mby0+aWNvdW50LnJ4KTsKIAkJICBERUJVR19MT0coaW5mby0+bGluZSwgImxkaXNjICVsdVxuIiwgdHR5LT5sZGlzYy5jaGFyc19pbl9idWZmZXIodHR5KSk7CiAJCSAgREVCVUdfTE9HKGluZm8tPmxpbmUsICJyb29tICAlbHVcbiIsIHR0eS0+bGRpc2MucmVjZWl2ZV9yb29tKHR0eSkpOwpAQCAtNDg4NCw3ICs0ODc3LDcgQEAKIAlkcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAlkcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkJQjExNTIwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7IC8qIGlzIG5vcm1hbGx5IEI5NjAwIGRlZmF1bHQuLi4gKi8KLQlkcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfTk9fREVWRlM7CisJZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCWRyaXZlci0+dGVybWlvcyA9IHNlcmlhbF90ZXJtaW9zOwogCWRyaXZlci0+dGVybWlvc19sb2NrZWQgPSBzZXJpYWxfdGVybWlvc19sb2NrZWQ7CiAKQEAgLTQ5NDksNTUgKzQ5NDIsNTUgQEAKIAkvKiBOb3QgbmVlZGVkIGluIHNpbXVsYXRvci4gIE1heSBvbmx5IGNvbXBsaWNhdGUgc3R1ZmYuICovCiAJLyogaG9vayB0aGUgaXJxJ3MgZm9yIERNQSBjaGFubmVsIDYgYW5kIDcsIHNlcmlhbCBvdXRwdXQgYW5kIGlucHV0LCBhbmQgc29tZSBtb3JlLi4uICovCiAKLQlpZiAocmVxdWVzdF9pcnEoU0VSSUFMX0lSUV9OQlIsIHNlcl9pbnRlcnJ1cHQsIFNBX1NISVJRIHwgU0FfSU5URVJSVVBULCAic2VyaWFsICIsIE5VTEwpKQorCWlmIChyZXF1ZXN0X2lycShTRVJJQUxfSVJRX05CUiwgc2VyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAic2VyaWFsICIsIE5VTEwpKQogCQlwYW5pYygiaXJxOCIpOwogCiAjaWZkZWYgQ09ORklHX0VUUkFYX1NFUklBTF9QT1JUMAogI2lmZGVmIENPTkZJR19FVFJBWF9TRVJJQUxfUE9SVDBfRE1BNl9PVVQKLQlpZiAocmVxdWVzdF9pcnEoU0VSMF9ETUFfVFhfSVJRX05CUiwgdHJfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJzZXJpYWwgMCBkbWEgdHIiLCBOVUxMKSkKKwlpZiAocmVxdWVzdF9pcnEoU0VSMF9ETUFfVFhfSVJRX05CUiwgdHJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic2VyaWFsIDAgZG1hIHRyIiwgTlVMTCkpCiAJCXBhbmljKCJpcnEyMiIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VUUkFYX1NFUklBTF9QT1JUMF9ETUE3X0lOCi0JaWYgKHJlcXVlc3RfaXJxKFNFUjBfRE1BX1JYX0lSUV9OQlIsIHJlY19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgInNlcmlhbCAwIGRtYSByZWMiLCBOVUxMKSkKKwlpZiAocmVxdWVzdF9pcnEoU0VSMF9ETUFfUlhfSVJRX05CUiwgcmVjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInNlcmlhbCAwIGRtYSByZWMiLCBOVUxMKSkKIAkJcGFuaWMoImlycTIzIik7CiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VUUkFYX1NFUklBTF9QT1JUMQogI2lmZGVmIENPTkZJR19FVFJBWF9TRVJJQUxfUE9SVDFfRE1BOF9PVVQKLQlpZiAocmVxdWVzdF9pcnEoU0VSMV9ETUFfVFhfSVJRX05CUiwgdHJfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJzZXJpYWwgMSBkbWEgdHIiLCBOVUxMKSkKKwlpZiAocmVxdWVzdF9pcnEoU0VSMV9ETUFfVFhfSVJRX05CUiwgdHJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic2VyaWFsIDEgZG1hIHRyIiwgTlVMTCkpCiAJCXBhbmljKCJpcnEyNCIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VUUkFYX1NFUklBTF9QT1JUMV9ETUE5X0lOCi0JaWYgKHJlcXVlc3RfaXJxKFNFUjFfRE1BX1JYX0lSUV9OQlIsIHJlY19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgInNlcmlhbCAxIGRtYSByZWMiLCBOVUxMKSkKKwlpZiAocmVxdWVzdF9pcnEoU0VSMV9ETUFfUlhfSVJRX05CUiwgcmVjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInNlcmlhbCAxIGRtYSByZWMiLCBOVUxMKSkKIAkJcGFuaWMoImlycTI1Iik7CiAjZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVFJBWF9TRVJJQUxfUE9SVDIKIAkvKiBETUEgU2hhcmVkIHdpdGggcGFyMCAoYW5kIFNDU0kwIGFuZCBBVEEpICovCiAjaWZkZWYgQ09ORklHX0VUUkFYX1NFUklBTF9QT1JUMl9ETUEyX09VVAotCWlmIChyZXF1ZXN0X2lycShTRVIyX0RNQV9UWF9JUlFfTkJSLCB0cl9pbnRlcnJ1cHQsIFNBX1NISVJRIHwgU0FfSU5URVJSVVBULCAic2VyaWFsIDIgZG1hIHRyIiwgTlVMTCkpCisJaWYgKHJlcXVlc3RfaXJxKFNFUjJfRE1BX1RYX0lSUV9OQlIsIHRyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAic2VyaWFsIDIgZG1hIHRyIiwgTlVMTCkpCiAJCXBhbmljKCJpcnExOCIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VUUkFYX1NFUklBTF9QT1JUMl9ETUEzX0lOCi0JaWYgKHJlcXVlc3RfaXJxKFNFUjJfRE1BX1JYX0lSUV9OQlIsIHJlY19pbnRlcnJ1cHQsIFNBX1NISVJRIHwgU0FfSU5URVJSVVBULCAic2VyaWFsIDIgZG1hIHJlYyIsIE5VTEwpKQorCWlmIChyZXF1ZXN0X2lycShTRVIyX0RNQV9SWF9JUlFfTkJSLCByZWNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJzZXJpYWwgMiBkbWEgcmVjIiwgTlVMTCkpCiAJCXBhbmljKCJpcnExOSIpOwogI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRVRSQVhfU0VSSUFMX1BPUlQzCiAJLyogRE1BIFNoYXJlZCB3aXRoIHBhcjEgKGFuZCBTQ1NJMSBhbmQgRXh0ZXJuIERNQSAwKSAqLwogI2lmZGVmIENPTkZJR19FVFJBWF9TRVJJQUxfUE9SVDNfRE1BNF9PVVQKLQlpZiAocmVxdWVzdF9pcnEoU0VSM19ETUFfVFhfSVJRX05CUiwgdHJfaW50ZXJydXB0LCBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgInNlcmlhbCAzIGRtYSB0ciIsIE5VTEwpKQorCWlmIChyZXF1ZXN0X2lycShTRVIzX0RNQV9UWF9JUlFfTkJSLCB0cl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgInNlcmlhbCAzIGRtYSB0ciIsIE5VTEwpKQogCQlwYW5pYygiaXJxMjAiKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVFJBWF9TRVJJQUxfUE9SVDNfRE1BNV9JTgotCWlmIChyZXF1ZXN0X2lycShTRVIzX0RNQV9SWF9JUlFfTkJSLCByZWNfaW50ZXJydXB0LCBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCwgInNlcmlhbCAzIGRtYSByZWMiLCBOVUxMKSkKKwlpZiAocmVxdWVzdF9pcnEoU0VSM19ETUFfUlhfSVJRX05CUiwgcmVjX2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAic2VyaWFsIDMgZG1hIHJlYyIsIE5VTEwpKQogCQlwYW5pYygiaXJxMjEiKTsKICNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRVRSQVhfU0VSSUFMX0ZMVVNIX0RNQV9GQVNUCi0JaWYgKHJlcXVlc3RfaXJxKFRJTUVSMV9JUlFfTkJSLCB0aW1lb3V0X2ludGVycnVwdCwgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsCisJaWYgKHJlcXVlc3RfaXJxKFRJTUVSMV9JUlFfTkJSLCB0aW1lb3V0X2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAogCQkgICAgICAgImZhc3Qgc2VyaWFsIGRtYSB0aW1lb3V0IiwgTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiZXJyOiB0aW1lcjEgaXJxXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmggYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmgKaW5kZXggMTgwMGMwZTcuLmYzMGI5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9FVFJBWF9TRVJJQUxfSAogI2RlZmluZSBfRVRSQVhfU0VSSUFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CiAjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvZHouYyBiL2RyaXZlcnMvc2VyaWFsL2R6LmMKaW5kZXggYmY3MWJhZC4uZDExOWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvZHouYworKysgYi9kcml2ZXJzL3NlcmlhbC9kei5jCkBAIC0yNiw3ICsyNiw2IEBACiAKICN1bmRlZiBERUJVR19EWgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzY4LDExICs3NjcsNyBAQAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBkel9yZWcgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZHJpdmVyX25hbWUJCT0gInNlcmlhbCIsCi0jaWZkZWYgQ09ORklHX0RFVkZTCi0JLmRldl9uYW1lCQk9ICJ0dHMvJWQiLAotI2Vsc2UKIAkuZGV2X25hbWUJCT0gInR0eVMlZCIsCi0jZW5kaWYKIAkubWFqb3IJCQk9IFRUWV9NQUpPUiwKIAkubWlub3IJCQk9IDY0LAogCS5ucgkJCT0gRFpfTkJfUE9SVCwKQEAgLTgwMiw3ICs3OTcsNyBAQAogCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogCiAJaWYgKHJlcXVlc3RfaXJxKGR6X3BvcnRzWzBdLnBvcnQuaXJxLCBkel9pbnRlcnJ1cHQsCi0JCQlTQV9JTlRFUlJVUFQsICJEWiIsICZkel9wb3J0c1swXSkpCisJCQlJUlFGX0RJU0FCTEVELCAiRFoiLCAmZHpfcG9ydHNbMF0pKQogCQlwYW5pYygiVW5hYmxlIHRvIHJlZ2lzdGVyIERaIGludGVycnVwdCIpOwogCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJmR6X3JlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKaW5kZXggMTQ0YTdhMy4uYTNjMDBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwpAQCAtMjQsNyArMjQsNiBAQAogICAqLwogI2RlZmluZSBTRVJJQUxfRE9fUkVTVEFSVAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CkBAIC0xNTY0LDcgKzE1NjMsNyBAQAogCiAJIC8qIHNhdmUgb2ZmIGlycSBhbmQgcmVxdWVzdCBpcnEgbGluZSAqLwogCSBpZiAoIChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgaWNvbV9pbnRlcnJ1cHQsCi0JCQkJICAgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsIElDT01fRFJJVkVSX05BTUUsCisJCQkJICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBJQ09NX0RSSVZFUl9OQU1FLAogCQkJCSAgICh2b2lkICopIGljb21fYWRhcHRlcikpKSB7CiAJCSAgZ290byBwcm9iZV9leGl0MjsKIAkgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCBkMjAyZWI0Li40YTE0MmQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqIFsyOS1NYXItMjAwNV0gTWlrZSBMZWUKICAqIEFkZGVkIGhhcmR3YXJlIGhhbmRzaGFrZQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQogI2RlZmluZSBTVVBQT1JUX1NZU1JRCkBAIC00MDUsNyArNDA0LDcgQEAKIAlpZiAocmV0dmFsKSBnb3RvIGVycm9yX291dDI7CiAKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShzcG9ydC0+cnRzaXJxLCBpbXhfcnRzaW50LAotCQkJICAgICBTQV9UUklHR0VSX0ZBTExJTkcgfCBTQV9UUklHR0VSX1JJU0lORywKKwkJCSAgICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAogCQkJICAgICBEUklWRVJfTkFNRSwgc3BvcnQpOwogCWlmIChyZXR2YWwpIGdvdG8gZXJyb3Jfb3V0MzsKIApAQCAtODg4LDcgKzg4Nyw2IEBACiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lICAgID0gRFJJVkVSX05BTUUsCiAJLmRldl9uYW1lICAgICAgID0gInR0eVNNWCIsCi0JLmRldmZzX25hbWUJPSAidHRzbXgvIiwKIAkubWFqb3IgICAgICAgICAgPSBTRVJJQUxfSU1YX01BSk9SLAogCS5taW5vciAgICAgICAgICA9IE1JTk9SX1NUQVJULAogCS5uciAgICAgICAgICAgICA9IEFSUkFZX1NJWkUoaW14X3BvcnRzKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IDcxN2U0N2JiLi41NzZjYTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKQEAgLTI4NTUsNyArMjg1NSw3IEBACiAJY29udHJvbC0+aWNfc29mdCA9IHNvZnQ7CiAKIAkvKiBIb29rIHVwIGludGVycnVwdCBoYW5kbGVyICovCi0JaWYgKCFyZXF1ZXN0X2lycShpZGQtPmlkZF9wZGV2LT5pcnEsIGlvYzRfaW50ciwgU0FfU0hJUlEsCisJaWYgKCFyZXF1ZXN0X2lycShpZGQtPmlkZF9wZGV2LT5pcnEsIGlvYzRfaW50ciwgSVJRRl9TSEFSRUQsCiAJCQkJInNnaS1pb2M0c2VyaWFsIiwgc29mdCkpIHsKIAkJY29udHJvbC0+aWNfaXJxID0gaWRkLT5pZGRfcGRldi0+aXJxOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jCmluZGV4IDY1MTc3MjQuLjM0MjA0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTEwODUsNyArMTA4NCw2IEBACiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGlwMjJ6aWxvZ19yZWcgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZQk9ICJzZXJpYWwiLAotCS5kZXZmc19uYW1lCT0gInR0cy8iLAogCS5kZXZfbmFtZQk9ICJ0dHlTIiwKIAkubWFqb3IJCT0gVFRZX01BSk9SLAogCS5taW5vcgkJPSA2NCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCmluZGV4IGIzZTFmNzEuLjI0NGY2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJfQogCiAJcmMgPSByZXF1ZXN0X2lycShicmQtPmlycSwgYnJkLT5iZF9vcHMtPmludHIsCi0JCQlTQV9JTlRFUlJVUFR8U0FfU0hJUlEsICJKU00iLCBicmQpOworCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkpTTSIsIGJyZCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBob29rIElSUSAlZFxuIixicmQtPmlycSk7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwppbmRleCA3ZDgyMzcwLi5mODI2MmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKQEAgLTU4OSwxMyArNTg5LDYgQEAKIAlsZCA9IHR0eV9sZGlzY19yZWYodHApOwogCiAJLyoKLQkgKiBJZiB0aGUgRE9OVF9GTElQIGZsYWcgaXMgb24sIGRvbid0IGZsdXNoIG91ciBidWZmZXIsIGFuZCBhY3QKLQkgKiBsaWtlIHRoZSBsZCBkb2Vzbid0IGhhdmUgYW55IHNwYWNlIHRvIHB1dCB0aGUgZGF0YSByaWdodCBub3cuCi0JICovCi0JaWYgKHRlc3RfYml0KFRUWV9ET05UX0ZMSVAsICZ0cC0+ZmxhZ3MpKQotCQlsZW4gPSAwOwotCi0JLyoKIAkgKiBJZiB3ZSB3ZXJlIHVuYWJsZSB0byBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGxkLAogCSAqIGRvbid0IGZsdXNoIG91ciBidWZmZXIsIGFuZCBhY3QgbGlrZSB0aGUgbGQgZG9lc24ndAogCSAqIGhhdmUgYW55IHNwYWNlIHRvIHB1dCB0aGUgZGF0YSByaWdodCBub3cuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwppbmRleCAzMjFhNDBmMy4uZTdmZTRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYworKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAgbWVtYmFzZSBpcyBhbiAnaW9yZW1hcHBlZCcgY29va2llLiAgVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9sZAogICogIHNlcmlhbC5jIGRyaXZlciwgYW5kIGlzIGN1cnJlbnRseSB0aGUgcHJlZmVycmVkIGZvcm0uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NMzJSX1NJT19DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtNTQzLDcgKzU0Miw3IEBACiBzdGF0aWMgaW50IHNlcmlhbF9saW5rX2lycV9jaGFpbihzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXApCiB7CiAJc3RydWN0IGlycV9pbmZvICppID0gaXJxX2xpc3RzICsgdXAtPnBvcnQuaXJxOwotCWludCByZXQsIGlycV9mbGFncyA9IHVwLT5wb3J0LmZsYWdzICYgVVBGX1NIQVJFX0lSUSA/IFNBX1NISVJRIDogMDsKKwlpbnQgcmV0LCBpcnFfZmxhZ3MgPSB1cC0+cG9ydC5mbGFncyAmIFVQRl9TSEFSRV9JUlEgPyBJUlFGX1NIQVJFRCA6IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZpLT5sb2NrKTsKIApAQCAtMTEzMSw3ICsxMTMwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbTMycl9zaW9fcmVnID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJzaW8iLAotCS5kZXZmc19uYW1lCQk9ICJ0dHMvIiwKIAkuZGV2X25hbWUJCT0gInR0eVMiLAogCS5tYWpvcgkJCT0gVFRZX01BSk9SLAogCS5taW5vcgkJCT0gNjQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5oIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uaAppbmRleCA3YzNlYzI0Li44NDlmMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmgKQEAgLTE1LDcgKzE1LDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgbTMycl9zaW9fcHJvYmUgewogCXN0cnVjdCBtb2R1bGUJKm93bmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW9fcmVnLmggYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npb19yZWcuaAppbmRleCA5Yzg2NDUyLi40NjcxNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npb19yZWcuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npb19yZWcuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfTTMyUl9TSU9fUkVHX0gKICNkZWZpbmUgX00zMlJfU0lPX1JFR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfTTMyUl9QTERTSU8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYwppbmRleCA4YWQyNDI5Li44MzJhYmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuYwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAkvKiBDbGVhciBtYXNrLCBzbyBubyBzdXJwcmlzZSBpbnRlcnJ1cHRzLiAqLwogCXVhcnRwW01DRlVBUlRfVUlNUl0gPSAwOwogCi0JaWYgKHJlcXVlc3RfaXJxKGluZm8tPmlycSwgbWNmcnNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCisJaWYgKHJlcXVlc3RfaXJxKGluZm8tPmlycSwgbWNmcnNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCSAgICAiQ29sZEZpcmUgVUFSVCIsIE5VTEwpKSB7CiAJCXByaW50aygiTUNGUlM6IFVuYWJsZSB0byBhdHRhY2ggQ29sZEZpcmUgVUFSVCAlZCBpbnRlcnJ1cHQgIgogCQkJInZlY3Rvcj0lZFxuIiwgaW5mby0+bGluZSwgaW5mby0+aXJxKTsKQEAgLTE3MTMsNyArMTcxMyw2IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBzdHJ1Y3R1cmUgKi8KIAltY2Zyc19zZXJpYWxfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCW1jZnJzX3NlcmlhbF9kcml2ZXItPm5hbWUgPSAidHR5UyI7Ci0JbWNmcnNfc2VyaWFsX2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ0dHlzLyI7CiAJbWNmcnNfc2VyaWFsX2RyaXZlci0+ZHJpdmVyX25hbWUgPSAic2VyaWFsIjsKIAltY2Zyc19zZXJpYWxfZHJpdmVyLT5tYWpvciA9IFRUWV9NQUpPUjsKIAltY2Zyc19zZXJpYWxfZHJpdmVyLT5taW5vcl9zdGFydCA9IDY0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmggYi9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuaAppbmRleCBhMmIyOGU4Li41NjQyMGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9tY2ZzZXJpYWwuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfTUNGX1NFUklBTF9ICiAjZGVmaW5lIF9NQ0ZfU0VSSUFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCA2NDU5ZWRjLi40OGViMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNDQsNyArNDQsNiBAQAogICogd2lsbCBiZSBtYXBwZWQgdG8uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpAQCAtMTkxLDcgKzE5MCw3IEBACiAKIAkvKiBSZXF1ZXN0IElSUSAqLwogCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgbXBjNTJ4eF91YXJ0X2ludCwKLQkJU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwgIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKKwkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC02OTMsNyArNjkyLDYgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCT0gIm1wYzUyeHhfcHNjX3VhcnQiLAogCS5kZXZfbmFtZQk9ICJ0dHlQU0MiLAotCS5kZXZmc19uYW1lCT0gInR0eVBTQyIsCiAJLm1ham9yCQk9IFNFUklBTF9QU0NfTUFKT1IsCiAJLm1pbm9yCQk9IFNFUklBTF9QU0NfTUlOT1IsCiAJLm5yCQk9IE1QQzUyeHhfUFNDX01BWE5VTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwppbmRleCA5NDY4MTkyLi42M2QyYTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCkBAIC01MCw3ICs1MCw2IEBACiAgKiA0KSBBRkFJQ1QsIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGNvbnRyb2xsZXIgLS1NQUcuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01QU0NfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCiAjZGVmaW5lIFNVUFBPUlRfU1lTUlEKQEAgLTMxNSw3ICszMTQsNiBAQAogI2RlZmluZSBNUFNDX01BSk9SCQkyMDQKICNkZWZpbmUgTVBTQ19NSU5PUl9TVEFSVAk0NAogI2RlZmluZQlNUFNDX0RSSVZFUl9OQU1FCSJNUFNDIgotI2RlZmluZQlNUFNDX0RFVkZTX05BTUUJCSJ0dHltbS8iCiAjZGVmaW5lCU1QU0NfREVWX05BTUUJCSJ0dHlNTSIKICNkZWZpbmUJTVBTQ19WRVJTSU9OCQkiMS4wMCIKIApAQCAtMTQxNCw3ICsxNDEyLDcgQEAKIAogCQkvKiBJZiBpcnEncyBhcmUgc2hhcmVkLCBuZWVkIHRvIHNldCBmbGFnICovCiAJCWlmIChtcHNjX3BvcnRzWzBdLnBvcnQuaXJxID09IG1wc2NfcG9ydHNbMV0ucG9ydC5pcnEpCi0JCQlmbGFnID0gU0FfU0hJUlE7CisJCQlmbGFnID0gSVJRRl9TSEFSRUQ7CiAKIAkJaWYgKHJlcXVlc3RfaXJxKHBpLT5wb3J0LmlycSwgbXBzY19zZG1hX2ludHIsIGZsYWcsCiAJCQkJIm1wc2Mtc2RtYSIsIHBpKSkKQEAgLTE4NjMsNyArMTg2MSw2IEBACiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIG1wc2NfcmVnID0gewogCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZSA9IE1QU0NfRFJJVkVSX05BTUUsCi0JLmRldmZzX25hbWUgID0gTVBTQ19ERVZGU19OQU1FLAogCS5kZXZfbmFtZSAgICA9IE1QU0NfREVWX05BTUUsCiAJLm1ham9yICAgICAgID0gTVBTQ19NQUpPUiwKIAkubWlub3IgICAgICAgPSBNUFNDX01JTk9SX1NUQVJULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXV4LmMgYi9kcml2ZXJzL3NlcmlhbC9tdXguYwppbmRleCA2NGMwZTg5Li40YTFjOTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tdXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9tdXguYwpAQCAtMTYsNyArMTYsNiBAQAogKioKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwppbmRleCA1MTNmZjg1Li5iZmQyYTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCkBAIC00Miw3ICs0Miw2IEBACiAjdW5kZWYgREVCVUdfSEFSRAogI3VuZGVmIFVTRV9DVFJMX09fU1lTUlEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogCkBAIC0xMDEsNyArMTAwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgcG16X3VhcnRfcmVnID0gewogCS5vd25lcgkJPQlUSElTX01PRFVMRSwKIAkuZHJpdmVyX25hbWUJPQkidHR5UyIsCi0JLmRldmZzX25hbWUJPQkidHRzLyIsCiAJLmRldl9uYW1lCT0JInR0eVMiLAogCS5tYWpvcgkJPQlUVFlfTUFKT1IsCiB9OwpAQCAtOTM2LDcgKzkzNCw3IEBACiAJfQkKIAogCXBtel9nZXRfcG9ydF9BKHVhcCktPmZsYWdzIHw9IFBNQUNaSUxPR19GTEFHX0lTX0lSUV9PTjsKLQlpZiAocmVxdWVzdF9pcnEodWFwLT5wb3J0LmlycSwgcG16X2ludGVycnVwdCwgU0FfU0hJUlEsICJQb3dlck1hYyBaaWxvZyIsIHVhcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEodWFwLT5wb3J0LmlycSwgcG16X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJQb3dlck1hYyBaaWxvZyIsIHVhcCkpIHsKIAkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwKIAkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgenMgaW50ZXJydXB0IGhhbmRsZXIuXG4iKTsKIAkJcG16X3NldF9zY2NfcG93ZXIodWFwLCAwKTsKQEAgLTE0NDUsOCArMTQ0Myw4IEBACiAJCQl1YXAtPmZsYWdzICY9IH5QTUFDWklMT0dfRkxBR19IQVNfRE1BOwogCQkJZ290byBub19kbWE7CiAJCX0KLQkJdWFwLT50eF9kbWFfaXJxID0gbnAtPmludHJzWzFdLmxpbmU7Ci0JCXVhcC0+cnhfZG1hX2lycSA9IG5wLT5pbnRyc1syXS5saW5lOworCQl1YXAtPnR4X2RtYV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMSk7CisJCXVhcC0+cnhfZG1hX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAyKTsKIAl9CiBub19kbWE6CiAKQEAgLTE0OTMsNyArMTQ5MSw3IEBACiAJICogSW5pdCByZW1haW5pbmcgYml0cyBvZiAicG9ydCIgc3RydWN0dXJlCiAJICovCiAJdWFwLT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwotCXVhcC0+cG9ydC5pcnEgPSBucC0+aW50cnNbMF0ubGluZTsKKwl1YXAtPnBvcnQuaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCXVhcC0+cG9ydC51YXJ0Y2xrID0gWlNfQ0xPQ0s7CiAJdWFwLT5wb3J0LmZpZm9zaXplID0gMTsKIAl1YXAtPnBvcnQub3BzID0gJnBtel9wb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCBhZTM2NDk1Li5hNzIwOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtMjQsNyArMjQsNiBAQAogICogd2l0aCB0aGUgc2VyaWFsIGNvcmUgbWFpbnRhaW5lciBzYXRpc2ZhY3Rpb24gdG8gYXBwZWFyIHNvb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtMzkwLDcgKzM4OSw3IEBACiAKIAkvKgogCSAqIEZpbmFsbHksIGVuYWJsZSBpbnRlcnJ1cHRzLiAgTm90ZTogTW9kZW0gc3RhdHVzIGludGVycnVwdHMKLQkgKiBhcmUgc2V0IHZpYSBzZXRfdGVybWlvcygpLCB3aGljaCB3aWxsIGJlIG9jY3VyaW5nIGltbWluZW50bHkKKwkgKiBhcmUgc2V0IHZpYSBzZXRfdGVybWlvcygpLCB3aGljaCB3aWxsIGJlIG9jY3VycmluZyBpbW1pbmVudGx5CiAJICogYW55d2F5LCBzbyB3ZSBkb24ndCBlbmFibGUgdGhlbSBoZXJlLgogCSAqLwogCXVwLT5pZXIgPSBVQVJUX0lFUl9STFNJIHwgVUFSVF9JRVJfUkRJIHwgVUFSVF9JRVJfUlRPSUUgfCBVQVJUX0lFUl9VVUU7CkBAIC03ODAsNyArNzc5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsX3B4YV9yZWcgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZQk9ICJQWEEgc2VyaWFsIiwKLQkuZGV2ZnNfbmFtZQk9ICJ0dHMvIiwKIAkuZGV2X25hbWUJPSAidHR5UyIsCiAJLm1ham9yCQk9IFRUWV9NQUpPUiwKIAkubWlub3IJCT0gNjQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggODM3YjZkYS4uMzkyYmZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtNTUsNyArNTUsNiBAQAogICogQkpELCAwNC1Ob3YtMjAwNAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1MzQzI0MTBfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCiAjZGVmaW5lIFNVUFBPUlRfU1lTUlEKQEAgLTE0OSw3ICsxNDgsNiBAQAogLyogVUFSVCBuYW1lIGFuZCBkZXZpY2UgZGVmaW5pdGlvbnMgKi8KIAogI2RlZmluZSBTM0MyNFhYX1NFUklBTF9OQU1FCSJ0dHlTQUMiCi0jZGVmaW5lIFMzQzI0WFhfU0VSSUFMX0RFVkZTICAgICJ0dHMvIgogI2RlZmluZSBTM0MyNFhYX1NFUklBTF9NQUpPUgkyMDQKICNkZWZpbmUgUzNDMjRYWF9TRVJJQUxfTUlOT1IJNjQKIApAQCAtOTUyLDcgKzk1MCw2IEBACiAJLm5yCQk9IDMsCiAJLmNvbnMJCT0gUzNDMjRYWF9TRVJJQUxfQ09OU09MRSwKIAkuZHJpdmVyX25hbWUJPSBTM0MyNFhYX1NFUklBTF9OQU1FLAotCS5kZXZmc19uYW1lCT0gUzNDMjRYWF9TRVJJQUxfREVWRlMsCiAJLm1ham9yCQk9IFMzQzI0WFhfU0VSSUFMX01BSk9SLAogCS5taW5vcgkJPSBTM0MyNFhYX1NFUklBTF9NSU5PUiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IGMyZDkwNjguLmRiMzQ4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKiAgJElkOiBzYTExMDAuYyx2IDEuNTAgMjAwMi8wNy8yOSAxNDo0MTowNCBybWsgRXhwICQKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9TQTExMDBfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCiAjZGVmaW5lIFNVUFBPUlRfU1lTUlEKQEAgLTgxNiw3ICs4MTUsNiBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJ0dHlTQSIsCiAJLmRldl9uYW1lCQk9ICJ0dHlTQSIsCi0JLmRldmZzX25hbWUJCT0gInR0eVNBIiwKIAkubWFqb3IJCQk9IFNFUklBTF9TQTExMDBfTUFKT1IsCiAJLm1pbm9yCQkJPSBNSU5PUl9TVEFSVCwKIAkubnIJCQk9IE5SX1BPUlRTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggMTc4MzllNy4uOTU4MzE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTAsNiArNDksMTIgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChwb3J0X211dGV4KTsKIAorLyoKKyAqIGxvY2tkZXA6IHBvcnQtPmxvY2sgaXMgaW5pdGlhbGl6ZWQgaW4gdHdvIHBsYWNlcywgYnV0IHdlCisgKiAgICAgICAgICB3YW50IG9ubHkgb25lIGxvY2stY2xhc3M6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcG9ydF9sb2NrX2tleTsKKwogI2RlZmluZSBISUdIX0JJVFNfT0ZGU0VUCSgoc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQpKSo4KQogCiAjZGVmaW5lIHVhcnRfdXNlcnMoc3RhdGUpCSgoc3RhdGUpLT5jb3VudCArICgoc3RhdGUpLT5pbmZvID8gKHN0YXRlKS0+aW5mby0+YmxvY2tlZF9vcGVuIDogMCkpCkBAIC0xODY2LDYgKzE4NzEsNyBAQAogCSAqIGVhcmx5LgogCSAqLwogCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKKwlsb2NrZGVwX3NldF9jbGFzcygmcG9ydC0+bG9jaywgJnBvcnRfbG9ja19rZXkpOwogCiAJbWVtc2V0KCZ0ZXJtaW9zLCAwLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKTsKIApAQCAtMjE1Myw3ICsyMTU5LDYgQEAKIAogCW5vcm1hbC0+b3duZXIJCT0gZHJ2LT5vd25lcjsKIAlub3JtYWwtPmRyaXZlcl9uYW1lCT0gZHJ2LT5kcml2ZXJfbmFtZTsKLQlub3JtYWwtPmRldmZzX25hbWUJPSBkcnYtPmRldmZzX25hbWU7CiAJbm9ybWFsLT5uYW1lCQk9IGRydi0+ZGV2X25hbWU7CiAJbm9ybWFsLT5tYWpvcgkJPSBkcnYtPm1ham9yOwogCW5vcm1hbC0+bWlub3Jfc3RhcnQJPSBkcnYtPm1pbm9yOwpAQCAtMjE2MSw3ICsyMTY2LDcgQEAKIAlub3JtYWwtPnN1YnR5cGUJCT0gU0VSSUFMX1RZUEVfTk9STUFMOwogCW5vcm1hbC0+aW5pdF90ZXJtaW9zCT0gdHR5X3N0ZF90ZXJtaW9zOwogCW5vcm1hbC0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7Ci0Jbm9ybWFsLT5mbGFncwkJPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlub3JtYWwtPmZsYWdzCQk9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCW5vcm1hbC0+ZHJpdmVyX3N0YXRlICAgID0gZHJ2OwogCXR0eV9zZXRfb3BlcmF0aW9ucyhub3JtYWwsICZ1YXJ0X29wcyk7CiAKQEAgLTIyNDksOCArMjI1NCwxMCBAQAogCSAqIElmIHRoaXMgcG9ydCBpcyBhIGNvbnNvbGUsIHRoZW4gdGhlIHNwaW5sb2NrIGlzIGFscmVhZHkKIAkgKiBpbml0aWFsaXNlZC4KIAkgKi8KLQlpZiAoISh1YXJ0X2NvbnNvbGUocG9ydCkgJiYgKHBvcnQtPmNvbnMtPmZsYWdzICYgQ09OX0VOQUJMRUQpKSkKKwlpZiAoISh1YXJ0X2NvbnNvbGUocG9ydCkgJiYgKHBvcnQtPmNvbnMtPmZsYWdzICYgQ09OX0VOQUJMRUQpKSkgewogCQlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZwb3J0LT5sb2NrLCAmcG9ydF9sb2NrX2tleSk7CisJfQogCiAJdWFydF9jb25maWd1cmVfcG9ydChkcnYsIHN0YXRlLCBwb3J0KTsKIApAQCAtMjMxMiw3ICsyMzE5LDcgQEAKIAltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CiAKIAkvKgotCSAqIFJlbW92ZSB0aGUgZGV2aWNlcyBmcm9tIGRldmZzCisJICogUmVtb3ZlIHRoZSBkZXZpY2VzIGZyb20gdGhlIHR0eSBsYXllcgogCSAqLwogCXR0eV91bnJlZ2lzdGVyX2RldmljZShkcnYtPnR0eV9kcml2ZXIsIHBvcnQtPmxpbmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCmluZGV4IDJjNzA3NzMuLmNiZjI2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCkBAIC03ODYsNiArNzg2LDcgQEAKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIkFEVkFOVEVDSCIsICJDT01wYWQtMzIvODVCLTQiLCAweDk2OTEzYTg1LCAweGNlYzhmMTAyLCAiQ09NcGFkNC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIzKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1IiwgIjEuMCIsIDB4OTY5MTNhODUsIDB4OGZiZTkyYWUsIDB4MDg3N2I2MjcsICJDT01wYWQyLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQyKCJSUy1DT00gMlAiLCAweGFkMjBiMTU2LCAiUlMtQ09NLTJQLmNpcyIpLAorCVBDTUNJQV9ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgweDAwMTMsIDB4MDAwMCwgIkdMT0JFVFJPVFRFUi5jaXMiKSwKIAkvKiB0b28gZ2VuZXJpYyAqLwogCS8qIFBDTUNJQV9NRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAxNjAsIDB4MDAwMiksICovCiAJLyogUENNQ0lBX01GQ19ERVZJQ0VfTUFORl9DQVJEKDEsIDB4MDE2MCwgMHgwMDAyKSwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCmluZGV4IDc3NmQ0ZmYuLjIzZGRlZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpAQCAtMjcsNyArMjcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTEg3QTQwWF9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKaW5kZXggM2JkZWU2NC4uYjM2MTY2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCkBAIC0zOCw3ICszOCw2IEBACiAgKgkJRml4IHNvbWUgc3Bpbl9sb2Nrcy4KICAqCQlEbyBub3QgY2FsbCB1YXJ0X2FkZF9vbmVfcG9ydCBmb3IgYWJzZW50IHBvcnRzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtNjksMTIgKzY4LDEwIEBACiAjaWYgIWRlZmluZWQoQ09ORklHX1NFUklBTF9UWFg5X1NURFNFUklBTCkKIC8qICJ0dHlTIiBpcyB1c2VkIGZvciBzdGFuZGFyZCBzZXJpYWwgZHJpdmVyICovCiAjZGVmaW5lIFRYWDlfVFRZX05BTUUgInR0eVRYIgotI2RlZmluZSBUWFg5X1RUWV9ERVZGU19OQU1FICJ0dHR4LyIKICNkZWZpbmUgVFhYOV9UVFlfTUlOT1JfU1RBUlQJKDY0ICsgNjQpCS8qIHR0eVRYMCgxMjgpLCB0dHlUWDEoMTI5KSAqLwogI2Vsc2UKIC8qIGFjdHMgbGlrZSBzdGFuZGFyZCBzZXJpYWwgZHJpdmVyICovCiAjZGVmaW5lIFRYWDlfVFRZX05BTUUgInR0eVMiCi0jZGVmaW5lIFRYWDlfVFRZX0RFVkZTX05BTUUgInR0cy8iCiAjZGVmaW5lIFRYWDlfVFRZX01JTk9SX1NUQVJUCTY0CiAjZW5kaWYKICNkZWZpbmUgVFhYOV9UVFlfTUFKT1IJVFRZX01BSk9SCkBAIC00OTgsNyArNDk1LDcgQEAKIAlzaW9fb3V0KHVwLCBUWFg5X1NJRElTUiwgMCk7CiAKIAlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+cG9ydC5pcnEsIHNlcmlhbF90eHg5X2ludGVycnVwdCwKLQkJCSAgICAgU0FfU0hJUlEsICJzZXJpYWxfdHh4OSIsIHVwKTsKKwkJCSAgICAgSVJRRl9TSEFSRUQsICJzZXJpYWxfdHh4OSIsIHVwKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC05NzEsNyArOTY4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsX3R4eDlfcmVnID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJzZXJpYWxfdHh4OSIsCi0JLmRldmZzX25hbWUJCT0gVFhYOV9UVFlfREVWRlNfTkFNRSwKIAkuZGV2X25hbWUJCT0gVFhYOV9UVFlfTkFNRSwKIAkubWFqb3IJCQk9IFRYWDlfVFRZX01BSk9SLAogCS5taW5vcgkJCT0gVFhYOV9UVFlfTUlOT1JfU1RBUlQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDQ0ZjZiZjcuLjMwMTU3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0yMCw3ICsyMCw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KQEAgLTg0Miw3ICs4NDEsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJzY2k6IENhbm5vdCBhbGxvY2F0ZSBpcnEuKElSUT0wKVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAocmVxdWVzdF9pcnEocG9ydC0+aXJxc1swXSwgc2NpX21weGVkX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQlpZiAocmVxdWVzdF9pcnEocG9ydC0+aXJxc1swXSwgc2NpX21weGVkX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCQkic2NpIiwgcG9ydCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic2NpOiBDYW5ub3QgYWxsb2NhdGUgaXJxLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTg1MSw3ICs4NTAsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoYW5kbGVycyk7IGkrKykgewogCQkJaWYgKCFwb3J0LT5pcnFzW2ldKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKHJlcXVlc3RfaXJxKHBvcnQtPmlycXNbaV0sIGhhbmRsZXJzW2ldLCBTQV9JTlRFUlJVUFQsCisJCQlpZiAocmVxdWVzdF9pcnEocG9ydC0+aXJxc1tpXSwgaGFuZGxlcnNbaV0sIElSUUZfRElTQUJMRUQsCiAJCQkJCWRlc2NbaV0sIHBvcnQpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzY2k6IENhbm5vdCBhbGxvY2F0ZSBpcnEuXG4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE2OTksOSArMTY5OCw2IEBACiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNjaV91YXJ0X2RyaXZlciA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCT0gInNjaSIsCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0JLmRldmZzX25hbWUJPSAidHRzYy8iLAotI2VuZGlmCiAJLmRldl9uYW1lCT0gInR0eVNDIiwKIAkubWFqb3IJCT0gU0NJX01BSk9SLAogCS5taW5vcgkJPSBTQ0lfTUlOT1JfU1RBUlQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IDFmMTRiYjQuLmFiMzIwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBTSDczMDAoU0gtTW9iaWxlKSBTQ0lGLiBUYWthc2hpIEt1c3VkYSAoSnVuIDIwMDMpLgogICogIE1vZGlmaWVkIHRvIHN1cHBvcnQgSDgvMzAwIFNlcmllcyBZb3NoaW5vcmkgU2F0byAoRmViIDIwMDQpLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAogI2lmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IDYwZWE0YTMuLjJmMTQ4ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTM3LDcgKzM3LDYgQEAKICAqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9HZW5JbmZvL05vdGljZUV4cGxhbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KQEAgLTY0OSw3ICs2NDgsNyBAQAogc3RhdGljIGludCBzbl9zYWxfY29ubmVjdF9pbnRlcnJ1cHQoc3RydWN0IHNuX2NvbnNfcG9ydCAqcG9ydCkKIHsKIAlpZiAocmVxdWVzdF9pcnEoU0dJX1VBUlRfVkVDVE9SLCBzbl9zYWxfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCisJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkiU0FMIGNvbnNvbGUgZHJpdmVyIiwgcG9ydCkgPj0gMCkgewogCQlyZXR1cm4gU0dJX1VBUlRfVkVDVE9SOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYwppbmRleCBmYTRhZTk0Li5lMzVkOWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5odi5jIGIvZHJpdmVycy9zZXJpYWwvc3VuaHYuYwppbmRleCBiYTIyZTI1Li5mODUxZjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKQEAgLTIwLDggKzIwLDggQEAKIAogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3ZkZXYuaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKQEAgLTM1Myw3ICszNTMsNiBAQAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzdW5odl9yZWcgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuZHJpdmVyX25hbWUJCT0gInNlcmlhbCIsCi0JLmRldmZzX25hbWUJCT0gInR0cy8iLAogCS5kZXZfbmFtZQkJPSAidHR5UyIsCiAJLm1ham9yCQkJPSBUVFlfTUFKT1IsCiB9OwpAQCAtNDA4LDE0NCArNDA3LDEyMCBAQAogCXJldHVybiAmc3VuaHZfY29uc29sZTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaHZfY29uc29sZV9jb21wYXRpYmxlKGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQl3aGlsZSAobGVuKSB7Ci0JCWludCB0aGlzX2xlbjsKLQotCQlpZiAoIXN0cmNtcChidWYsICJxY24iKSkKLQkJCXJldHVybiAxOwotCi0JCXRoaXNfbGVuID0gc3RybGVuKGJ1ZikgKyAxOwotCi0JCWJ1ZiArPSB0aGlzX2xlbjsKLQkJbGVuIC09IHRoaXNfbGVuOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBnZXRfaW50ZXJydXB0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkZXZfbm9kZTsKLQotCWRldl9ub2RlID0gc3VuNHZfdmRldl9yb290LT5jaGlsZDsKLQl3aGlsZSAoZGV2X25vZGUgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQkJaWYgKHN0cmNtcChkZXZfbm9kZS0+bmFtZSwgImNvbnNvbGUiKSkKLQkJCWdvdG8gbmV4dF9zaWJsaW5nOwotCi0JCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRldl9ub2RlLCAiY29tcGF0aWJsZSIsIE5VTEwpOwotCQlpZiAoIXByb3ApCi0JCQlnb3RvIG5leHRfc2libGluZzsKLQotCQlpZiAoaHZfY29uc29sZV9jb21wYXRpYmxlKHByb3AtPnZhbHVlLCBwcm9wLT5sZW5ndGgpKQotCQkJYnJlYWs7Ci0KLQluZXh0X3NpYmxpbmc6Ci0JCWRldl9ub2RlID0gZGV2X25vZGUtPnNpYmxpbmc7Ci0JfQotCWlmICghZGV2X25vZGUpCi0JCXJldHVybiAwOwotCi0JLyogT2ssIHRoZSB0aGlzIGlzIHRoZSBPQlAgbm9kZSBmb3IgdGhlIHN1bjR2IGh5cGVydmlzb3IKLQkgKiBjb25zb2xlIGRldmljZS4gIERlY29kZSB0aGUgaW50ZXJydXB0LgotCSAqLwotCXJldHVybiBzdW40dl92ZGV2X2RldmljZV9pbnRlcnJ1cHQoZGV2X25vZGUpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzdW5odl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBodl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKLQlpbnQgcmV0OworCWludCBlcnI7CiAKLQlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikKKwlpZiAob3AtPmlycXNbMF0gPT0gMHhmZmZmZmZmZikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwb3J0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCksIEdGUF9LRVJORUwpOworCXBvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFwb3J0KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQocG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpKTsKKwlzdW5odl9wb3J0ID0gcG9ydDsKIAogCXBvcnQtPmxpbmUgPSAwOwogCXBvcnQtPm9wcyA9ICZzdW5odl9wb3BzOwogCXBvcnQtPnR5cGUgPSBQT1JUX1NVTkhWOwogCXBvcnQtPnVhcnRjbGsgPSAoIDI5NDkxMjAwIC8gMTYgKTsgLyogYXJiaXRyYXJ5ICovCiAKLQkvKiBTZXQgdGhpcyBqdXN0IHRvIG1ha2UgdWFydF9jb25maWd1cmVfcG9ydCgpIGhhcHB5LiAgKi8KIAlwb3J0LT5tZW1iYXNlID0gKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKSBfX3BhKHBvcnQpOwogCi0JcG9ydC0+aXJxID0gZ2V0X2ludGVycnVwdCgpOwotCWlmICghcG9ydC0+aXJxKSB7Ci0JCWtmcmVlKHBvcnQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJcG9ydC0+aXJxID0gb3AtPmlycXNbMF07CisKKwlwb3J0LT5kZXYgPSAmb3AtPmRldjsKIAogCXN1bmh2X3JlZy5taW5vciA9IHN1bnNlcmlhbF9jdXJyZW50X21pbm9yOwogCXN1bmh2X3JlZy5uciA9IDE7CiAKLQlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc3VuaHZfcmVnKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlNVTkhWOiB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigpIGZhaWxlZCAlZFxuIiwKLQkJICAgICAgIHJldCk7Ci0JCWtmcmVlKHBvcnQpOwotCi0JCXJldHVybiByZXQ7Ci0JfQorCWVyciA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzdW5odl9yZWcpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfcG9ydDsKIAogCXN1bmh2X3JlZy50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgPSBzdW5odl9yZWcubWlub3IgLSA2NDsKIAlzdW5zZXJpYWxfY3VycmVudF9taW5vciArPSAxOwogCiAJc3VuaHZfcmVnLmNvbnMgPSBTVU5IVl9DT05TT0xFKCk7CiAKLQlzdW5odl9wb3J0ID0gcG9ydDsKKwllcnIgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc3VuaHZfcmVnLCBwb3J0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyX2RyaXZlcjsKIAotCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZzdW5odl9yZWcsIHBvcnQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU1VOSFY6IHVhcnRfYWRkX29uZV9wb3J0KCkgZmFpbGVkICVkXG4iLCByZXQpOwotCQlzdW5zZXJpYWxfY3VycmVudF9taW5vciAtPSAxOwotCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzdW5odl9yZWcpOwotCQlrZnJlZShwb3J0KTsKLQkJc3VuaHZfcG9ydCA9IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwllcnIgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIHN1bmh2X2ludGVycnVwdCwgMCwgImh2Y29ucyIsIHBvcnQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3JlbW92ZV9wb3J0OwogCi0JaWYgKHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgc3VuaHZfaW50ZXJydXB0LAotCQkJU0FfU0hJUlEsICJzZXJpYWwoc3VuaHYpIiwgcG9ydCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzdW5odjogQ2Fubm90IHJlZ2lzdGVyIElSUVxuIik7Ci0JCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW5odl9yZWcsIHBvcnQpOwotCQlzdW5zZXJpYWxfY3VycmVudF9taW5vciAtPSAxOwotCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzdW5odl9yZWcpOwotCQlrZnJlZShwb3J0KTsKLQkJc3VuaHZfcG9ydCA9IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHBvcnQpOwogCiAJcmV0dXJuIDA7CisKK291dF9yZW1vdmVfcG9ydDoKKwl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3VuaHZfcmVnLCBwb3J0KTsKKworb3V0X3VucmVnaXN0ZXJfZHJpdmVyOgorCXN1bnNlcmlhbF9jdXJyZW50X21pbm9yIC09IDE7CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3VuaHZfcmVnKTsKKworb3V0X2ZyZWVfcG9ydDoKKwlrZnJlZShwb3J0KTsKKwlzdW5odl9wb3J0ID0gTlVMTDsKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3VuaHZfZXhpdCh2b2lkKQorc3RhdGljIGludCBfX2RldmV4aXQgaHZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3VuaHZfcG9ydDsKLQotCUJVR19PTighcG9ydCk7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwogCiAJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKIAogCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW5odl9yZWcsIHBvcnQpOwotCXN1bnNlcmlhbF9jdXJyZW50X21pbm9yIC09IDE7CiAKKwlzdW5zZXJpYWxfY3VycmVudF9taW5vciAtPSAxOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnN1bmh2X3JlZyk7CiAKLQlrZnJlZShzdW5odl9wb3J0KTsKKwlrZnJlZShwb3J0KTsKIAlzdW5odl9wb3J0ID0gTlVMTDsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGh2X21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJjb25zb2xlIiwKKwkJLmNvbXBhdGlibGUgPSAicWNuIiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGh2X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgaHZfZHJpdmVyID0geworCS5uYW1lCQk9ICJodiIsCisJLm1hdGNoX3RhYmxlCT0gaHZfbWF0Y2gsCisJLnByb2JlCQk9IGh2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaHZfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN1bmh2X2luaXQodm9pZCkKK3sKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZodl9kcml2ZXIsICZvZl9idXNfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdW5odl9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmh2X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHN1bmh2X2luaXQpOwogbW9kdWxlX2V4aXQoc3VuaHZfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTVU40ViBIeXBlcnZpc29yIGNvbnNvbGUgZHJpdmVyIikKK01PRFVMRV9ERVNDUklQVElPTigiU1VONFYgSHlwZXJ2aXNvciBjb25zb2xlIGRyaXZlciIpOworTU9EVUxFX1ZFUlNJT04oIjIuMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwppbmRleCBlNGMwZmQyLi4wZGJkNGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIHN1bnNhYi5jOiBBU1lOQyBEcml2ZXIgZm9yIHRoZSBTSUVNRU5TIFNBQjgyNTMyIERVU0NDLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NyAgRWRkaWUgQy4gRG9zdCAgKGVjZEBza3luZXQuYmUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICoKICAqIFJld3JvdGUgYnVmZmVyIGhhbmRsaW5nIHRvIHVzZSBDSVJDKENpcmN1bGFyIEJ1ZmZlcikgbWFjcm9zLgogICogICBNYXhpbSBLcmFzbnlhbnNraXkgPG1heGtAcXVhbGNvbW0uY29tPgpAQCAtMTIsMTAgKzEyLDkgQEAKICAqICAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4sIDIwMDEtT2N0LTEyCiAgKgogICogUG9ydGVkIHRvIG5ldyAyLjUueCBVQVJUIGxheWVyLgotICogICBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+CisgKiAgIERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM3LDggKzM2LDggQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KLSNpbmNsdWRlIDxhc20vZWJ1cy5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1NVTlpJTE9HX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQogI2RlZmluZSBTVVBQT1JUX1NZU1JRCkBAIC04NTEsNyArODUwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc3Vuc2FiX3JlZyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZQkJPSAic2VyaWFsIiwKLQkuZGV2ZnNfbmFtZQkJPSAidHRzLyIsCiAJLmRldl9uYW1lCQk9ICJ0dHlTIiwKIAkubWFqb3IJCQk9IFRUWV9NQUpPUiwKIH07CkBAIC05NzcsMTk5ICs5NzUsMTg4IEBACiAjZGVmaW5lIHN1bnNhYl9jb25zb2xlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgX19pbml0IGZvcl9lYWNoX3NhYl9lZGV2KHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICosIHZvaWQgKiksIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN1bnNhYl9pbml0X29uZShzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAsCisJCQkJICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgaW50IGxpbmUpCiB7Ci0Jc3RydWN0IGxpbnV4X2VidXMgKmVidXM7Ci0Jc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICplZGV2ID0gTlVMTDsKKwl1cC0+cG9ydC5saW5lID0gbGluZTsKKwl1cC0+cG9ydC5kZXYgPSAmb3AtPmRldjsKIAotCWZvcl9lYWNoX2VidXMoZWJ1cykgewotCQlmb3JfZWFjaF9lYnVzZGV2KGVkZXYsIGVidXMpIHsKLQkJCWlmICghc3RyY21wKGVkZXYtPnByb21fbm9kZS0+bmFtZSwgInNlIikpIHsKLQkJCQljYWxsYmFjayhlZGV2LCBhcmcpOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICghc3RyY21wKGVkZXYtPnByb21fbm9kZS0+bmFtZSwgInNlcmlhbCIpKSB7Ci0JCQkJY2hhciAqY29tcGF0OwotCQkJCWludCBjbGVuOworCXVwLT5wb3J0Lm1hcGJhc2UgPSBvcC0+cmVzb3VyY2VbMF0uc3RhcnQgKyBvZmZzZXQ7CisJdXAtPnBvcnQubWVtYmFzZSA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgb2Zmc2V0LAorCQkJCSAgICAgIHNpemVvZih1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzKSwKKwkJCQkgICAgICAic2FiIik7CisJaWYgKCF1cC0+cG9ydC5tZW1iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cC0+cmVncyA9ICh1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzIF9faW9tZW0gKikgdXAtPnBvcnQubWVtYmFzZTsKIAotCQkJCS8qIE9uIFJJTyB0aGlzIGNhbiBiZSBhbiBTRSwgY2hlY2sgaXQuICBXZSBjb3VsZAotCQkJCSAqIGp1c3QgY2hlY2sgZWJ1cy0+aXNfcmlvLCBidXQgdGhpcyBpcyBtb3JlIHBvcnRhYmxlLgotCQkJCSAqLwotCQkJCWNvbXBhdCA9IG9mX2dldF9wcm9wZXJ0eShlZGV2LT5wcm9tX25vZGUsCi0JCQkJCQkJICJjb21wYXRpYmxlIiwgJmNsZW4pOwotCQkJCWlmIChjb21wYXQgJiYgY2xlbiA+IDApIHsKLQkJCQkJaWYgKHN0cm5jbXAoY29tcGF0LCAic2FiODI1MzIiLCA4KSA9PSAwKSB7Ci0JCQkJCQljYWxsYmFjayhlZGV2LCBhcmcpOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9CisJdXAtPnBvcnQuaXJxID0gb3AtPmlycXNbMF07CisKKwl1cC0+cG9ydC5maWZvc2l6ZSA9IFNBQjgyNTMyX1hNSVRfRklGT19TSVpFOworCXVwLT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOworCisJd3JpdGViKFNBQjgyNTMyX0lQQ19JQ19BQ1RfTE9XLCAmdXAtPnJlZ3MtPncuaXBjKTsKKworCXVwLT5wb3J0Lm9wcyA9ICZzdW5zYWJfcG9wczsKKwl1cC0+cG9ydC50eXBlID0gUE9SVF9TVU5TQUI7CisJdXAtPnBvcnQudWFydGNsayA9IFNBQl9CQVNFX0JBVUQ7CisKKwl1cC0+dHlwZSA9IHJlYWRiKCZ1cC0+cmVncy0+ci52c3RyKSAmIDB4MGY7CisJd3JpdGViKH4oKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDQpKSwgJnVwLT5yZWdzLT53LnBjcik7CisJd3JpdGViKDB4ZmYsICZ1cC0+cmVncy0+dy5waW0pOworCWlmICgodXAtPnBvcnQubGluZSAmIDB4MSkgPT0gMCkgeworCQl1cC0+cHZyX2Rzcl9iaXQgPSAoMSA8PCAwKTsKKwkJdXAtPnB2cl9kdHJfYml0ID0gKDEgPDwgMSk7CisJfSBlbHNlIHsKKwkJdXAtPnB2cl9kc3JfYml0ID0gKDEgPDwgMyk7CisJCXVwLT5wdnJfZHRyX2JpdCA9ICgxIDw8IDIpOworCX0KKwl1cC0+Y2FjaGVkX3B2ciA9ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCA0KTsKKwl3cml0ZWIodXAtPmNhY2hlZF9wdnIsICZ1cC0+cmVncy0+dy5wdnIpOworCXVwLT5jYWNoZWRfbW9kZSA9IHJlYWRiKCZ1cC0+cmVncy0+cncubW9kZSk7CisJdXAtPmNhY2hlZF9tb2RlIHw9IFNBQjgyNTMyX01PREVfRlJUUzsKKwl3cml0ZWIodXAtPmNhY2hlZF9tb2RlLCAmdXAtPnJlZ3MtPnJ3Lm1vZGUpOworCXVwLT5jYWNoZWRfbW9kZSB8PSBTQUI4MjUzMl9NT0RFX1JUUzsKKwl3cml0ZWIodXAtPmNhY2hlZF9tb2RlLCAmdXAtPnJlZ3MtPnJ3Lm1vZGUpOworCisJdXAtPnRlY190aW1lb3V0ID0gU0FCODI1MzJfTUFYX1RFQ19USU1FT1VUOworCXVwLT5jZWNfdGltZW91dCA9IFNBQjgyNTMyX01BWF9DRUNfVElNRU9VVDsKKworCWlmICghKHVwLT5wb3J0LmxpbmUgJiAweDAxKSkgeworCQlpbnQgZXJyOworCisJCWVyciA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSwgc3Vuc2FiX2ludGVycnVwdCwKKwkJCQkgIElSUUZfU0hBUkVELCAic2FiIiwgdXApOworCQlpZiAoZXJyKSB7CisJCQlvZl9pb3VubWFwKHVwLT5wb3J0Lm1lbWJhc2UsCisJCQkJICAgc2l6ZW9mKHVuaW9uIHNhYjgyNTMyX2FzeW5jX3JlZ3MpKTsKKwkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci19CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzYWJfY291bnRfY2FsbGJhY2soc3RydWN0IGxpbnV4X2VidXNfZGV2aWNlICplZGV2LCB2b2lkICphcmcpCi17Ci0JaW50ICpjb3VudF9wID0gYXJnOwotCi0JKCpjb3VudF9wKSsrOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2FiX2F0dGFjaF9jYWxsYmFjayhzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmVkZXYsIHZvaWQgKmFyZykKLXsKLQlpbnQgKmluc3RhbmNlX3AgPSBhcmc7Ci0Jc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKnVwOwotCXVuc2lnbmVkIGxvbmcgcmVncywgb2Zmc2V0OwotCWludCBpOwotCi0JLyogTm90ZTogcG9ydHMgYXJlIGxvY2F0ZWQgaW4gcmV2ZXJzZSBvcmRlciAqLwotCXJlZ3MgPSBlZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKLQlvZmZzZXQgPSBzaXplb2YodW5pb24gc2FiODI1MzJfYXN5bmNfcmVncyk7Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQl1cCA9ICZzdW5zYWJfcG9ydHNbKCppbnN0YW5jZV9wICogMikgKyAxIC0gaV07Ci0KLQkJbWVtc2V0KHVwLCAwLCBzaXplb2YoKnVwKSk7Ci0JCXVwLT5yZWdzID0gaW9yZW1hcChyZWdzICsgb2Zmc2V0LCBzaXplb2YodW5pb24gc2FiODI1MzJfYXN5bmNfcmVncykpOwotCQl1cC0+cG9ydC5pcnEgPSBlZGV2LT5pcnFzWzBdOwotCQl1cC0+cG9ydC5maWZvc2l6ZSA9IFNBQjgyNTMyX1hNSVRfRklGT19TSVpFOwotCQl1cC0+cG9ydC5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpdXAtPnJlZ3M7Ci0JCXVwLT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwotCi0JCXdyaXRlYihTQUI4MjUzMl9JUENfSUNfQUNUX0xPVywgJnVwLT5yZWdzLT53LmlwYyk7Ci0KLQkJb2Zmc2V0IC09IHNpemVvZih1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzKTsKLQl9Ci0JCi0JKCppbnN0YW5jZV9wKSsrOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBwcm9iZV9mb3Jfc2Ficyh2b2lkKQotewotCWludCB0aGlzX3NhYiA9IDA7Ci0KLQkvKiBGaW5kIGRldmljZSBpbnN0YW5jZXMuICAqLwotCWZvcl9lYWNoX3NhYl9lZGV2KCZzYWJfY291bnRfY2FsbGJhY2ssICZ0aGlzX3NhYik7Ci0JaWYgKCF0aGlzX3NhYikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBBbGxvY2F0ZSB0YWJsZXMuICAqLwotCXN1bnNhYl9wb3J0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0KSAqIHRoaXNfc2FiICogMiwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXN1bnNhYl9wb3J0cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQludW1fY2hhbm5lbHMgPSB0aGlzX3NhYiAqIDI7Ci0KLQl0aGlzX3NhYiA9IDA7Ci0JZm9yX2VhY2hfc2FiX2VkZXYoJnNhYl9hdHRhY2hfY2FsbGJhY2ssICZ0aGlzX3NhYik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzdW5zYWJfaW5pdF9odyh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgc2FiX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlpbnQgaTsKKwlzdGF0aWMgaW50IGluc3Q7CisJc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKnVwOworCWludCBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKnVwID0gJnN1bnNhYl9wb3J0c1tpXTsKKwl1cCA9ICZzdW5zYWJfcG9ydHNbaW5zdCAqIDJdOwogCi0JCXVwLT5wb3J0LmxpbmUgPSBpOwotCQl1cC0+cG9ydC5vcHMgPSAmc3Vuc2FiX3BvcHM7Ci0JCXVwLT5wb3J0LnR5cGUgPSBQT1JUX1NVTlNBQjsKLQkJdXAtPnBvcnQudWFydGNsayA9IFNBQl9CQVNFX0JBVUQ7CisJZXJyID0gc3Vuc2FiX2luaXRfb25lKCZ1cFswXSwgb3AsCisJCQkgICAgICBzaXplb2YodW5pb24gc2FiODI1MzJfYXN5bmNfcmVncyksCisJCQkgICAgICAoaW5zdCAqIDIpICsgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCQl1cC0+dHlwZSA9IHJlYWRiKCZ1cC0+cmVncy0+ci52c3RyKSAmIDB4MGY7Ci0JCXdyaXRlYih+KCgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCA0KSksICZ1cC0+cmVncy0+dy5wY3IpOwotCQl3cml0ZWIoMHhmZiwgJnVwLT5yZWdzLT53LnBpbSk7Ci0JCWlmICh1cC0+cG9ydC5saW5lID09IDApIHsKLQkJCXVwLT5wdnJfZHNyX2JpdCA9ICgxIDw8IDApOwotCQkJdXAtPnB2cl9kdHJfYml0ID0gKDEgPDwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQl1cC0+cHZyX2Rzcl9iaXQgPSAoMSA8PCAzKTsKLQkJCXVwLT5wdnJfZHRyX2JpdCA9ICgxIDw8IDIpOwotCQl9Ci0JCXVwLT5jYWNoZWRfcHZyID0gKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDQpOwotCQl3cml0ZWIodXAtPmNhY2hlZF9wdnIsICZ1cC0+cmVncy0+dy5wdnIpOwotCQl1cC0+Y2FjaGVkX21vZGUgPSByZWFkYigmdXAtPnJlZ3MtPnJ3Lm1vZGUpOwotCQl1cC0+Y2FjaGVkX21vZGUgfD0gU0FCODI1MzJfTU9ERV9GUlRTOwotCQl3cml0ZWIodXAtPmNhY2hlZF9tb2RlLCAmdXAtPnJlZ3MtPnJ3Lm1vZGUpOwotCQl1cC0+Y2FjaGVkX21vZGUgfD0gU0FCODI1MzJfTU9ERV9SVFM7Ci0JCXdyaXRlYih1cC0+Y2FjaGVkX21vZGUsICZ1cC0+cmVncy0+cncubW9kZSk7Ci0KLQkJdXAtPnRlY190aW1lb3V0ID0gU0FCODI1MzJfTUFYX1RFQ19USU1FT1VUOwotCQl1cC0+Y2VjX3RpbWVvdXQgPSBTQUI4MjUzMl9NQVhfQ0VDX1RJTUVPVVQ7Ci0KLQkJaWYgKCEodXAtPnBvcnQubGluZSAmIDB4MDEpKSB7Ci0JCQlpZiAocmVxdWVzdF9pcnEodXAtPnBvcnQuaXJxLCBzdW5zYWJfaW50ZXJydXB0LAotCQkJICAgICAgICAgICAgICAgIFNBX1NISVJRLCAic2VyaWFsKHNhYjgyNTMyKSIsIHVwKSkgewotCQkJCXByaW50aygic3Vuc2FiJWQ6IGNhbid0IGdldCBJUlEgJXhcbiIsCi0JCQkJICAgICAgIGksIHVwLT5wb3J0LmlycSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KKwllcnIgPSBzdW5zYWJfaW5pdF9vbmUoJnVwWzBdLCBvcCwgMCwKKwkJCSAgICAgIChpbnN0ICogMikgKyAxKTsKKwlpZiAoZXJyKSB7CisJCW9mX2lvdW5tYXAodXBbMF0ucG9ydC5tZW1iYXNlLAorCQkJICAgc2l6ZW9mKHVuaW9uIHNhYjgyNTMyX2FzeW5jX3JlZ3MpKTsKKwkJZnJlZV9pcnEodXBbMF0ucG9ydC5pcnEsICZ1cFswXSk7CisJCXJldHVybiBlcnI7CiAJfQorCisJdWFydF9hZGRfb25lX3BvcnQoJnN1bnNhYl9yZWcsICZ1cFswXS5wb3J0KTsKKwl1YXJ0X2FkZF9vbmVfcG9ydCgmc3Vuc2FiX3JlZywgJnVwWzFdLnBvcnQpOworCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCAmdXBbMF0pOworCisJaW5zdCsrOworCisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYWJfcmVtb3ZlX29uZShzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXApCit7CisJdWFydF9yZW1vdmVfb25lX3BvcnQoJnN1bnNhYl9yZWcsICZ1cC0+cG9ydCk7CisJaWYgKCEodXAtPnBvcnQubGluZSAmIDEpKQorCQlmcmVlX2lycSh1cC0+cG9ydC5pcnEsIHVwKTsKKwlvZl9pb3VubWFwKHVwLT5wb3J0Lm1lbWJhc2UsCisJCSAgIHNpemVvZih1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNhYl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKnVwID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKworCXNhYl9yZW1vdmVfb25lKCZ1cFswXSk7CisJc2FiX3JlbW92ZV9vbmUoJnVwWzFdKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc2FiX21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJzZSIsCisJfSwKKwl7CisJCS5uYW1lID0gInNlcmlhbCIsCisJCS5jb21wYXRpYmxlID0gInNhYjgyNTMyIiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNhYl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHNhYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInNhYiIsCisJLm1hdGNoX3RhYmxlCT0gc2FiX21hdGNoLAorCS5wcm9iZQkJPSBzYWJfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYWJfcmVtb3ZlKSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHN1bnNhYl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IHByb2JlX2Zvcl9zYWJzKCk7Ci0JaW50IGk7CisJc3RydWN0IGRldmljZV9ub2RlICpkcDsKKwlpbnQgZXJyOwogCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJbnVtX2NoYW5uZWxzID0gMDsKKwlmb3JfZWFjaF9ub2RlX2J5X25hbWUoZHAsICJzdSIpCisJCW51bV9jaGFubmVscyArPSAyOworCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgInNlcmlhbCIpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRwLCAic2FiODI1MzIiKSkKKwkJCW51bV9jaGFubmVscyArPSAyOworCX0KIAotCXN1bnNhYl9pbml0X2h3KCk7CisJaWYgKG51bV9jaGFubmVscykgeworCQlzdW5zYWJfcG9ydHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCkgKgorCQkJCSAgICAgICBudW1fY2hhbm5lbHMsIEdGUF9LRVJORUwpOworCQlpZiAoIXN1bnNhYl9wb3J0cykKKwkJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Vuc2FiX3JlZy5taW5vciA9IHN1bnNlcmlhbF9jdXJyZW50X21pbm9yOwotCXN1bnNhYl9yZWcubnIgPSBudW1fY2hhbm5lbHM7CisJCXN1bnNhYl9yZWcubWlub3IgPSBzdW5zZXJpYWxfY3VycmVudF9taW5vcjsKKwkJc3Vuc2FiX3JlZy5uciA9IG51bV9jaGFubmVsczsKIAotCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzdW5zYWJfcmVnKTsKLQlpZiAocmV0IDwgMCkgewotCQlpbnQgaTsKKwkJZXJyID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnN1bnNhYl9yZWcpOworCQlpZiAoZXJyKSB7CisJCQlrZnJlZShzdW5zYWJfcG9ydHMpOworCQkJc3Vuc2FiX3BvcnRzID0gTlVMTDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJCXN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCA9ICZzdW5zYWJfcG9ydHNbaV07Ci0KLQkJCWlmICghKHVwLT5wb3J0LmxpbmUgJiAweDAxKSkKLQkJCQlmcmVlX2lycSh1cC0+cG9ydC5pcnEsIHVwKTsKLQkJCWlvdW5tYXAodXAtPnJlZ3MpOworCQkJcmV0dXJuIGVycjsKIAkJfQotCQlrZnJlZShzdW5zYWJfcG9ydHMpOwotCQlzdW5zYWJfcG9ydHMgPSBOVUxMOwogCi0JCXJldHVybiByZXQ7CisJCXN1bnNhYl9yZWcudHR5X2RyaXZlci0+bmFtZV9iYXNlID0gc3Vuc2FiX3JlZy5taW5vciAtIDY0OworCQlzdW5zYWJfcmVnLmNvbnMgPSBTVU5TQUJfQ09OU09MRSgpOworCQlzdW5zZXJpYWxfY3VycmVudF9taW5vciArPSBudW1fY2hhbm5lbHM7CiAJfQogCi0Jc3Vuc2FiX3JlZy50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgPSBzdW5zYWJfcmVnLm1pbm9yIC0gNjQ7Ci0KLQlzdW5zYWJfcmVnLmNvbnMgPSBTVU5TQUJfQ09OU09MRSgpOwotCi0Jc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgKz0gbnVtX2NoYW5uZWxzOwotCQotCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhbm5lbHM7IGkrKykgewotCQlzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAgPSAmc3Vuc2FiX3BvcnRzW2ldOwotCi0JCXVhcnRfYWRkX29uZV9wb3J0KCZzdW5zYWJfcmVnLCAmdXAtPnBvcnQpOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnNhYl9kcml2ZXIsICZvZl9idXNfdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzdW5zYWJfZXhpdCh2b2lkKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9jaGFubmVsczsgaSsrKSB7Ci0JCXN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCA9ICZzdW5zYWJfcG9ydHNbaV07Ci0KLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnN1bnNhYl9yZWcsICZ1cC0+cG9ydCk7Ci0KLQkJaWYgKCEodXAtPnBvcnQubGluZSAmIDB4MDEpKQotCQkJZnJlZV9pcnEodXAtPnBvcnQuaXJxLCB1cCk7Ci0JCWlvdW5tYXAodXAtPnJlZ3MpOworCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZzYWJfZHJpdmVyKTsKKwlpZiAobnVtX2NoYW5uZWxzKSB7CisJCXN1bnNlcmlhbF9jdXJyZW50X21pbm9yIC09IG51bV9jaGFubmVsczsKKwkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3Vuc2FiX3JlZyk7CiAJfQogCi0Jc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgLT0gbnVtX2NoYW5uZWxzOwotCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnN1bnNhYl9yZWcpOwotCiAJa2ZyZWUoc3Vuc2FiX3BvcnRzKTsKIAlzdW5zYWJfcG9ydHMgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKaW5kZXggMDI2OGIzMC4uZjkwMTNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCkBAIC0xMiwxMCArMTIsOSBAQAogICogICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiwgMjAwMS1PY3QtMTIKICAqCiAgKiBDb252ZXJ0ZWQgdG8gbmV3IDIuNS54IFVBUlQgbGF5ZXIuCi0gKiAgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSksIDIwMDItSnVsLTI5CisgKiAgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCksIDIwMDItSnVsLTI5CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC00MCwxMSArMzksOCBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9lYnVzLmg+Ci0jaWZkZWYgQ09ORklHX1NQQVJDNjQKLSNpbmNsdWRlIDxhc20vaXNhLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9TVU5TVV9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtOTQsMTAgKzkwLDEwIEBACiAJLyogUHJvYmluZyBpbmZvcm1hdGlvbi4gICovCiAJZW51bSBzdV90eXBlCQlzdV90eXBlOwogCXVuc2lnbmVkIGludAkJdHlwZV9wcm9iZWQ7CS8qIFhYWCBTdHVwaWQgKi8KLQlpbnQJCQlwb3J0X25vZGU7CisJdW5zaWduZWQgbG9uZwkJcmVnX3NpemU7CiAKICNpZmRlZiBDT05GSUdfU0VSSU8KLQlzdHJ1Y3Qgc2VyaW8JCSpzZXJpbzsKKwlzdHJ1Y3Qgc2VyaW8JCXNlcmlvOwogCWludAkJCXNlcmlvX29wZW47CiAjZW5kaWYKIH07CkBAIC01MDksNyArNTA1LDcgQEAKIAkJLyogU3RvcC1BIGlzIGhhbmRsZWQgYnkgZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgbm93LiAqLwogCQlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQpIHsKICNpZmRlZiBDT05GSUdfU0VSSU8KLQkJCXNlcmlvX2ludGVycnVwdCh1cC0+c2VyaW8sIGNoLCAwLCByZWdzKTsKKwkJCXNlcmlvX2ludGVycnVwdCgmdXAtPnNlcmlvLCBjaCwgMCwgcmVncyk7CiAjZW5kaWYKIAkJfSBlbHNlIGlmICh1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX01TKSB7CiAJCQlpbnQgcmV0ID0gc3VuY29yZV9tb3VzZV9iYXVkX2RldGVjdGlvbihjaCwgaXNfYnJlYWspOwpAQCAtNTIzLDcgKzUxOSw3IEBACiAKIAkJCWNhc2UgMDoKICNpZmRlZiBDT05GSUdfU0VSSU8KLQkJCQlzZXJpb19pbnRlcnJ1cHQodXAtPnNlcmlvLCBjaCwgMCwgcmVncyk7CisJCQkJc2VyaW9faW50ZXJydXB0KCZ1cC0+c2VyaW8sIGNoLCAwLCByZWdzKTsKICNlbmRpZgogCQkJCWJyZWFrOwogCQkJfTsKQEAgLTY3MSwxMCArNjY3LDEwIEBACiAKIAlpZiAodXAtPnN1X3R5cGUgIT0gU1VfUE9SVF9QT1JUKSB7CiAJCXJldHZhbCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSwgc3Vuc3Vfa2JkX21zX2ludGVycnVwdCwKLQkJCQkgICAgIFNBX1NISVJRLCBzdV90eXBldlt1cC0+c3VfdHlwZV0sIHVwKTsKKwkJCQkgICAgIElSUUZfU0hBUkVELCBzdV90eXBldlt1cC0+c3VfdHlwZV0sIHVwKTsKIAl9IGVsc2UgewogCQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+cG9ydC5pcnEsIHN1bnN1X3NlcmlhbF9pbnRlcnJ1cHQsCi0JCQkJICAgICBTQV9TSElSUSwgc3VfdHlwZXZbdXAtPnN1X3R5cGVdLCB1cCk7CisJCQkJICAgICBJUlFGX1NIQVJFRCwgc3VfdHlwZXZbdXAtPnN1X3R5cGVdLCB1cCk7CiAJfQogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKCJzdTogQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgdXAtPnBvcnQuaXJxKTsKQEAgLTEwMzEsOTkgKzEwMjcsMTQgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czEsIHN0YXR1czIsIHNjcmF0Y2gsIHNjcmF0Y2gyLCBzY3JhdGNoMzsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfbGNyLCBzYXZlX21jcjsKLQlzdHJ1Y3QgbGludXhfZWJ1c19kZXZpY2UgKmRldiA9IE5VTEw7Ci0Jc3RydWN0IGxpbnV4X2VidXMgKmVidXM7Ci0jaWZkZWYgQ09ORklHX1NQQVJDNjQKLQlzdHJ1Y3Qgc3BhcmNfaXNhX2JyaWRnZSAqaXNhX2JyOwotCXN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICppc2FfZGV2OwotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19TUEFSQzY0Ci0Jc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHJlZzA7Ci0jZW5kaWYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCF1cC0+cG9ydF9ub2RlIHx8ICF1cC0+c3VfdHlwZSkKKwlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9OT05FKQogCQlyZXR1cm47CiAKIAl1cC0+dHlwZV9wcm9iZWQgPSBQT1JUX1VOS05PV047CiAJdXAtPnBvcnQuaW90eXBlID0gVVBJT19NRU07CiAKLQkvKgotCSAqIEZpcnN0IHdlIGxvb2sgZm9yIEVidXMtYmFzZXMgc3UncwotCSAqLwotCWZvcl9lYWNoX2VidXMoZWJ1cykgewotCQlmb3JfZWFjaF9lYnVzZGV2KGRldiwgZWJ1cykgewotCQkJaWYgKGRldi0+cHJvbV9ub2RlLT5ub2RlID09IHVwLT5wb3J0X25vZGUpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBFQnVzIGlzIGJyb2tlbiBvbiBzcGFyYzsgaXQgZGVsaXZlcnMKLQkJCQkgKiB2aXJ0dWFsIGFkZHJlc3NlcyBpbiByZXNvdXJjZXMuIE9oIHdlbGwuLi4KLQkJCQkgKiBUaGlzIGlzIGNvcnJlY3Qgb24gc3BhcmM2NCwgdGhvdWdoLgotCQkJCSAqLwotCQkJCXVwLT5wb3J0Lm1lbWJhc2UgPSAoY2hhciAqKSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCQkJCS8qCi0JCQkJICogVGhpcyBpcyBjb3JyZWN0IG9uIGJvdGggYXJjaGl0ZWN0dXJlcy4KLQkJCQkgKi8KLQkJCQl1cC0+cG9ydC5tYXBiYXNlID0gZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKLQkJCQl1cC0+cG9ydC5pcnEgPSBkZXYtPmlycXNbMF07Ci0JCQkJZ290byBlYnVzX2RvbmU7Ci0JCQl9Ci0JCX0KLQl9Ci0KLSNpZmRlZiBDT05GSUdfU1BBUkM2NAotCWZvcl9lYWNoX2lzYShpc2FfYnIpIHsKLQkJZm9yX2VhY2hfaXNhZGV2KGlzYV9kZXYsIGlzYV9icikgewotCQkJaWYgKGlzYV9kZXYtPnByb21fbm9kZS0+bm9kZSA9PSB1cC0+cG9ydF9ub2RlKSB7Ci0JCQkJLyogU2FtZSBvbiBzcGFyYzY0LiBDb29sIGFyY2hpdGVjdXJlLi4uICovCi0JCQkJdXAtPnBvcnQubWVtYmFzZSA9IChjaGFyICopIGlzYV9kZXYtPnJlc291cmNlLnN0YXJ0OwotCQkJCXVwLT5wb3J0Lm1hcGJhc2UgPSBpc2FfZGV2LT5yZXNvdXJjZS5zdGFydDsKLQkJCQl1cC0+cG9ydC5pcnEgPSBpc2FfZGV2LT5pcnE7Ci0JCQkJZ290byBlYnVzX2RvbmU7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TUEFSQzY0Ci0JLyoKLQkgKiBOb3Qgb24gRWJ1cywgYmFpbGluZy4KLQkgKi8KLQlyZXR1cm47Ci0jZWxzZQotCS8qCi0JICogTm90IG9uIEVidXMsIG11c3QgYmUgT0JJTy4KLQkgKi8KLQlpZiAocHJvbV9nZXRwcm9wZXJ0eSh1cC0+cG9ydF9ub2RlLCAicmVnIiwKLQkJCSAgICAgKGNoYXIgKikmcmVnMCwgc2l6ZW9mKHJlZzApKSA9PSAtMSkgewotCQlwcm9tX3ByaW50Zigic3Vuc3U6IG5vIFwicmVnXCIgcHJvcGVydHlcbiIpOwotCQlyZXR1cm47Ci0JfQotCXByb21fYXBwbHlfb2Jpb19yYW5nZXMoJnJlZzAsIDEpOwotCWlmIChyZWcwLndoaWNoX2lvICE9IDApIHsJLyogSnVzdCBpbiBjYXNlLi4uICovCi0JCXByb21fcHJpbnRmKCJzdW5zdTogYnVzIG51bWJlciBub256ZXJvOiAweCV4OiV4XG4iLAotCQkgICAgcmVnMC53aGljaF9pbywgcmVnMC5waHlzX2FkZHIpOwotCQlyZXR1cm47Ci0JfQotCXVwLT5wb3J0Lm1hcGJhc2UgPSByZWcwLnBoeXNfYWRkcjsKLQlpZiAoKHVwLT5wb3J0Lm1lbWJhc2UgPSBpb3JlbWFwKHJlZzAucGh5c19hZGRyLCByZWcwLnJlZ19zaXplKSkgPT0gMCkgewotCQlwcm9tX3ByaW50Zigic3Vuc3U6IENhbm5vdCBtYXAgcmVnaXN0ZXJzLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIDB4MjAgaXMgc3VuNG0gdGhpbmcsIERhdmUgUmVkbWFuIGhlcml0YWdlLgotCSAqIFNlZSBhcmNoL3NwYXJjL2tlcm5lbC9pcnEuYy4KLQkgKi8KLSNkZWZpbmUgSVJRXzRNKG4pCSgobil8MHgyMCkKLQotCS8qCi0JICogVGhlcmUgaXMgbm8gaW50ciBwcm9wZXJ0eSBvbiBNckNvZmZlZSwgc28gaGFyZHdpcmUgaXQuCi0JICovCi0JdXAtPnBvcnQuaXJxID0gSVJRXzRNKDEzKTsKLSNlbmRpZgotCi1lYnVzX2RvbmU6Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCiAJaWYgKCEodXAtPnBvcnQuZmxhZ3MgJiBVUEZfQlVHR1lfVUFSVCkpIHsKQEAgLTEyNjUsMjMgKzExNzYsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc3Vuc3VfcmVnID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJzZXJpYWwiLAotCS5kZXZmc19uYW1lCQk9ICJ0dHMvIiwKIAkuZGV2X25hbWUJCT0gInR0eVMiLAogCS5tYWpvcgkJCT0gVFRZX01BSk9SLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc3Vuc3Vfa2JkX21zX2luaXQoc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAsIGludCBjaGFubmVsKQorc3RhdGljIGludCBfX2luaXQgc3Vuc3Vfa2JkX21zX2luaXQoc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXApCiB7CiAJaW50IHF1b3QsIGJhdWQ7CiAjaWZkZWYgQ09ORklHX1NFUklPCiAJc3RydWN0IHNlcmlvICpzZXJpbzsKICNlbmRpZgogCi0Jc3Bpbl9sb2NrX2luaXQoJnVwLT5wb3J0LmxvY2spOwotCXVwLT5wb3J0LmxpbmUgPSBjaGFubmVsOwotCXVwLT5wb3J0LnR5cGUgPSBQT1JUX1VOS05PV047Ci0JdXAtPnBvcnQudWFydGNsayA9IChTVV9CQVNFX0JBVUQgKiAxNik7Ci0KIAlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQpIHsKIAkJdXAtPmNmbGFnID0gQjEyMDAgfCBDUzggfCBDTE9DQUwgfCBDUkVBRDsKIAkJYmF1ZCA9IDEyMDA7CkBAIC0xMjkzLDQxICsxMTk4LDMxIEBACiAKIAlzdW5zdV9hdXRvY29uZmlnKHVwKTsKIAlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUX1VOS05PV04pCi0JCXJldHVybiAtMTsKLQotCXByaW50ayhLRVJOX0lORk8gInN1JWQgYXQgMHglcCAoaXJxID0gJWQpIGlzIGEgJXNcbiIsCi0JICAgICAgIGNoYW5uZWwsCi0JICAgICAgIHVwLT5wb3J0Lm1lbWJhc2UsIHVwLT5wb3J0LmlycSwKLQkgICAgICAgc3Vuc3VfdHlwZSgmdXAtPnBvcnQpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKICNpZmRlZiBDT05GSUdfU0VSSU8KLQl1cC0+c2VyaW8gPSBzZXJpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpbyksIEdGUF9LRVJORUwpOwotCWlmIChzZXJpbykgewotCQltZW1zZXQoc2VyaW8sIDAsIHNpemVvZigqc2VyaW8pKTsKKwlzZXJpbyA9ICZ1cC0+c2VyaW87CisJc2VyaW8tPnBvcnRfZGF0YSA9IHVwOwogCi0JCXNlcmlvLT5wb3J0X2RhdGEgPSB1cDsKLQotCQlzZXJpby0+aWQudHlwZSA9IFNFUklPX1JTMjMyOwotCQlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQpIHsKLQkJCXNlcmlvLT5pZC5wcm90byA9IFNFUklPX1NVTktCRDsKLQkJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJzdWtiZCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwotCQl9IGVsc2UgewotCQkJc2VyaW8tPmlkLnByb3RvID0gU0VSSU9fU1VOOwotCQkJc2VyaW8tPmlkLmV4dHJhID0gMTsKLQkJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJzdW1zIiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7Ci0JCX0KLQkJc3RybGNweShzZXJpby0+cGh5cywgKGNoYW5uZWwgPT0gMCA/ICJzdS9zZXJpbzAiIDogInN1L3NlcmlvMSIpLAotCQkJc2l6ZW9mKHNlcmlvLT5waHlzKSk7Ci0KLQkJc2VyaW8tPndyaXRlID0gc3Vuc3Vfc2VyaW9fd3JpdGU7Ci0JCXNlcmlvLT5vcGVuID0gc3Vuc3Vfc2VyaW9fb3BlbjsKLQkJc2VyaW8tPmNsb3NlID0gc3Vuc3Vfc2VyaW9fY2xvc2U7Ci0KLQkJc2VyaW9fcmVnaXN0ZXJfcG9ydChzZXJpbyk7CisJc2VyaW8tPmlkLnR5cGUgPSBTRVJJT19SUzIzMjsKKwlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQpIHsKKwkJc2VyaW8tPmlkLnByb3RvID0gU0VSSU9fU1VOS0JEOworCQlzdHJsY3B5KHNlcmlvLT5uYW1lLCAic3VrYmQiLCBzaXplb2Yoc2VyaW8tPm5hbWUpKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdSVkOiBub3QgZW5vdWdoIG1lbW9yeSBmb3Igc2VyaW8gcG9ydFxuIiwKLQkJCWNoYW5uZWwpOworCQlzZXJpby0+aWQucHJvdG8gPSBTRVJJT19TVU47CisJCXNlcmlvLT5pZC5leHRyYSA9IDE7CisJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJzdW1zIiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CiAJfQorCXN0cmxjcHkoc2VyaW8tPnBoeXMsCisJCSghKHVwLT5wb3J0LmxpbmUgJiAxKSA/ICJzdS9zZXJpbzAiIDogInN1L3NlcmlvMSIpLAorCQlzaXplb2Yoc2VyaW8tPnBoeXMpKTsKKworCXNlcmlvLT53cml0ZSA9IHN1bnN1X3NlcmlvX3dyaXRlOworCXNlcmlvLT5vcGVuID0gc3Vuc3Vfc2VyaW9fb3BlbjsKKwlzZXJpby0+Y2xvc2UgPSBzdW5zdV9zZXJpb19jbG9zZTsKKwlzZXJpby0+ZGV2LnBhcmVudCA9IHVwLT5wb3J0LmRldjsKKworCXNlcmlvX3JlZ2lzdGVyX3BvcnQoc2VyaW8pOwogI2VuZGlmCiAKIAlzdW5zdV9jaGFuZ2Vfc3BlZWQoJnVwLT5wb3J0LCB1cC0+Y2ZsYWcsIDAsIHF1b3QpOwpAQCAtMTQ1OSwyMiArMTM1NCwyMCBAQAogICoJUmVnaXN0ZXIgY29uc29sZS4KICAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjb25zb2xlICpTVU5TVV9DT05TT0xFKHZvaWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb25zb2xlICpTVU5TVV9DT05TT0xFKGludCBudW1fdWFydCkKIHsKIAlpbnQgaTsKIAogCWlmIChjb25faXNfcHJlc2VudCgpKQogCQlyZXR1cm4gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3VhcnQ7IGkrKykgewogCQlpbnQgdGhpc19taW5vciA9IHN1bnN1X3JlZy5taW5vciArIGk7CiAKIAkJaWYgKCh0aGlzX21pbm9yIC0gNjQpID09IChzZXJpYWxfY29uc29sZSAtIDEpKQogCQkJYnJlYWs7CiAJfQotCWlmIChpID09IFVBUlRfTlIpCi0JCXJldHVybiBOVUxMOwotCWlmIChzdW5zdV9wb3J0c1tpXS5wb3J0X25vZGUgPT0gMCkKKwlpZiAoaSA9PSBudW1fdWFydCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlzdW5zdV9jb25zLmluZGV4ID0gaTsKQEAgLTE0ODIsMjUyICsxMzc1LDE4NiBAQAogCXJldHVybiAmc3Vuc3VfY29uczsKIH0KICNlbHNlCi0jZGVmaW5lIFNVTlNVX0NPTlNPTEUoKQkJCShOVUxMKQorI2RlZmluZSBTVU5TVV9DT05TT0xFKG51bV91YXJ0KQkJKE5VTEwpCiAjZGVmaW5lIHN1bnN1X3NlcmlhbF9jb25zb2xlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgc3Vuc3Vfc2VyaWFsX2luaXQodm9pZCkKK3N0YXRpYyBlbnVtIHN1X3R5cGUgX19kZXZpbml0IHN1X2dldF90eXBlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCiB7Ci0JaW50IGluc3RhbmNlLCByZXQsIGk7CisJc3RydWN0IGRldmljZV9ub2RlICphcCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvYWxpYXNlcyIpOwogCi0JLyogSG93IG1hbnkgaW5zdGFuY2VzIGRvIHdlIG5lZWQ/ICAqLwotCWluc3RhbmNlID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7Ci0JCXN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwID0gJnN1bnN1X3BvcnRzW2ldOworCWlmIChhcCkgeworCQljaGFyICprZXliID0gb2ZfZ2V0X3Byb3BlcnR5KGFwLCAia2V5Ym9hcmQiLCBOVUxMKTsKKwkJY2hhciAqbXMgPSBvZl9nZXRfcHJvcGVydHkoYXAsICJtb3VzZSIsIE5VTEwpOwogCi0JCWlmICh1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX01TIHx8Ci0JCSAgICB1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX0tCRCkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19pbml0KCZ1cC0+cG9ydC5sb2NrKTsKLQkJdXAtPnBvcnQuZmxhZ3MgfD0gVVBGX0JPT1RfQVVUT0NPTkY7Ci0JCXVwLT5wb3J0LnR5cGUgPSBQT1JUX1VOS05PV047Ci0JCXVwLT5wb3J0LnVhcnRjbGsgPSAoU1VfQkFTRV9CQVVEICogMTYpOwotCi0JCXN1bnN1X2F1dG9jb25maWcodXApOwotCQlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUX1VOS05PV04pCi0JCQljb250aW51ZTsKLQotCQl1cC0+cG9ydC5saW5lID0gaW5zdGFuY2UrKzsKLQkJdXAtPnBvcnQub3BzID0gJnN1bnN1X3BvcHM7Ci0JfQotCi0Jc3Vuc3VfcmVnLm1pbm9yID0gc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3I7Ci0KLQlzdW5zdV9yZWcubnIgPSBpbnN0YW5jZTsKLQotCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzdW5zdV9yZWcpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3Vuc3VfcmVnLnR0eV9kcml2ZXItPm5hbWVfYmFzZSA9IHN1bnN1X3JlZy5taW5vciAtIDY0OwotCi0Jc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgKz0gaW5zdGFuY2U7Ci0KLQlzdW5zdV9yZWcuY29ucyA9IFNVTlNVX0NPTlNPTEUoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKLQkJc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAgPSAmc3Vuc3VfcG9ydHNbaV07Ci0KLQkJLyogRG8gbm90IHJlZ2lzdGVyIEtleWJvYXJkL01vdXNlIGxpbmVzIHdpdGggVUFSVAotCQkgKiBsYXllci4KLQkJICovCi0JCWlmICh1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX01TIHx8Ci0JCSAgICB1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX0tCRCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfVU5LTk9XTikKLQkJCWNvbnRpbnVlOwotCi0JCXVhcnRfYWRkX29uZV9wb3J0KCZzdW5zdV9yZWcsICZ1cC0+cG9ydCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3Vfbm9kZV9vayhpbnQgbm9kZSwgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0JaWYgKHN0cm5jbXAobmFtZSwgInN1IiwgbmFtZWxlbikgPT0gMCB8fAotCSAgICBzdHJuY21wKG5hbWUsICJzdV9wbnAiLCBuYW1lbGVuKSA9PSAwKQotCQlyZXR1cm4gMTsKLQotCWlmIChzdHJuY21wKG5hbWUsICJzZXJpYWwiLCBuYW1lbGVuKSA9PSAwKSB7Ci0JCWNoYXIgY29tcGF0WzMyXTsKLQkJaW50IGNsZW47Ci0KLQkJLyogSXMgaXQgX3JlYWxseV8gYSAnc3UnIGRldmljZT8gKi8KLQkJY2xlbiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgImNvbXBhdGlibGUiLCBjb21wYXQsIHNpemVvZihjb21wYXQpKTsKLQkJaWYgKGNsZW4gPiAwKSB7Ci0JCQlpZiAoc3RybmNtcChjb21wYXQsICJzYWI4MjUzMiIsIDgpID09IDApIHsKLQkJCQkvKiBOb3BlLCBTaWVtZW5zIHNlcmlhbCwgbm90IGZvciB1cy4gKi8KLQkJCQlyZXR1cm4gMDsKLQkJCX0KKwkJaWYgKGtleWIpIHsKKwkJCWlmIChkcCA9PSBvZl9maW5kX25vZGVfYnlfcGF0aChrZXliKSkKKwkJCQlyZXR1cm4gU1VfUE9SVF9LQkQ7CiAJCX0KLQkJcmV0dXJuIDE7CisJCWlmIChtcykgeworCQkJaWYgKGRwID09IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKG1zKSkKKwkJCQlyZXR1cm4gU1VfUE9SVF9NUzsKKwkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBTVV9QT1JUX1BPUlQ7CiB9CiAKLSNkZWZpbmUgU1VfUFJPUFNJWkUJMTI4Ci0KLS8qCi0gKiBTY2FuIHN0YXR1cyBzdHJ1Y3R1cmUuCi0gKiAicHJvcCIgaXMgYSBsb2NhbCB2YXJpYWJsZSBidXQgaXQgZWF0cyBzdGFjayB0byBrZWVwIGl0IGluIGVhY2gKLSAqIHN0YWNrIGZyYW1lIG9mIGEgcmVjdXJzaXZlIHByb2NlZHVyZS4KLSAqLwotc3RydWN0IHN1X3Byb2JlX3NjYW4gewotCWludCBtc25vZGUsIGtibm9kZTsJLyogUFJPTSBub2RlcyBmb3IgbW91c2UgYW5kIGtleWJvYXJkICovCi0JaW50IG1zeCwga2J4OwkJLyogbWlub3JzIGZvciBtb3VzZSBhbmQga2V5Ym9hcmQgKi8KLQlpbnQgZGV2aWNlczsJCS8qIHNjYW4gaW5kZXggKi8KLQljaGFyIHByb3BbU1VfUFJPUFNJWkVdOwotfTsKLQotLyoKLSAqIFdlIGhhdmUgc2V2ZXJhbCBwbGF0Zm9ybXMgd2hpY2ggcHJlc2VudCAnc3UnIGluIGRpZmZlcmVudCBwYXJ0cwotICogb2YgdGhlIGRldmljZSB0cmVlLiAnc3UnIG1heSBiZSBmb3VuZCB1bmRlciBvYmlvLCBlYnVzLCBpc2EgYW5kIHBjaS4KLSAqIFdlIHdhbGsgb3ZlciB0aGUgdHJlZSBhbmQgZmluZCB0aGVtIHdoZXJldmVyIFBST00gaGlkZXMgdGhlbS4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHN1X3Byb2JlX2FueShzdHJ1Y3Qgc3VfcHJvYmVfc2NhbiAqdCwgaW50IHN1bm9kZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN1X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKKwlzdGF0aWMgaW50IGluc3Q7CisJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOwogCXN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwOwotCWludCBsZW47CisJc3RydWN0IHJlc291cmNlICpycDsKKwlpbnQgZXJyOwogCi0JaWYgKHQtPmRldmljZXMgPj0gVUFSVF9OUikKLQkJcmV0dXJuOworCWlmIChpbnN0ID49IFVBUlRfTlIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yICg7IHN1bm9kZSAhPSAwOyBzdW5vZGUgPSBwcm9tX2dldHNpYmxpbmcoc3Vub2RlKSkgewotCQlsZW4gPSBwcm9tX2dldHByb3BlcnR5KHN1bm9kZSwgIm5hbWUiLCB0LT5wcm9wLCBTVV9QUk9QU0laRSk7Ci0JCWlmIChsZW4gPD0gMSkKLQkJCWNvbnRpbnVlOwkJLyogQnJva2VuIFBST00gbm9kZSAqLworCXVwID0gJnN1bnN1X3BvcnRzW2luc3RdOworCXVwLT5wb3J0LmxpbmUgPSBpbnN0OwogCi0JCWlmIChzdV9ub2RlX29rKHN1bm9kZSwgdC0+cHJvcCwgbGVuKSkgewotCQkJdXAgPSAmc3Vuc3VfcG9ydHNbdC0+ZGV2aWNlc107Ci0JCQlpZiAodC0+a2Jub2RlICE9IDAgJiYgc3Vub2RlID09IHQtPmtibm9kZSkgewotCQkJCXQtPmtieCA9IHQtPmRldmljZXM7Ci0JCQkJdXAtPnN1X3R5cGUgPSBTVV9QT1JUX0tCRDsKLQkJCX0gZWxzZSBpZiAodC0+bXNub2RlICE9IDAgJiYgc3Vub2RlID09IHQtPm1zbm9kZSkgewotCQkJCXQtPm1zeCA9IHQtPmRldmljZXM7Ci0JCQkJdXAtPnN1X3R5cGUgPSBTVV9QT1JUX01TOwotCQkJfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfU1BBUkM2NAotCQkJCS8qCi0JCQkJICogRG8gbm90IGF0dGVtcHQgdG8gdXNlIHRoZSB0cnVuY2F0ZWQKLQkJCQkgKiBrZXlib2FyZC9tb3VzZSBwb3J0cyBhcyBzZXJpYWwgcG9ydHMKLQkJCQkgKiBvbiBVbHRyYXMgd2l0aCBQQyBrZXlib2FyZCBhdHRhY2hlZC4KLQkJCQkgKi8KLQkJCQlpZiAocHJvbV9nZXRib29sKHN1bm9kZSwgIm1vdXNlIikpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChwcm9tX2dldGJvb2woc3Vub2RlLCAia2V5Ym9hcmQiKSkKLQkJCQkJY29udGludWU7Ci0jZW5kaWYKLQkJCQl1cC0+c3VfdHlwZSA9IFNVX1BPUlRfUE9SVDsKLQkJCX0KLQkJCXVwLT5wb3J0X25vZGUgPSBzdW5vZGU7Ci0JCQkrK3QtPmRldmljZXM7Ci0JCX0gZWxzZSB7Ci0JCQlzdV9wcm9iZV9hbnkodCwgcHJvbV9nZXRjaGlsZChzdW5vZGUpKTsKLQkJfQotCX0KLX0KKwlzcGluX2xvY2tfaW5pdCgmdXAtPnBvcnQubG9jayk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHN1bnN1X3Byb2JlKHZvaWQpCi17Ci0JaW50IG5vZGU7Ci0JaW50IGxlbjsKLQlzdHJ1Y3Qgc3VfcHJvYmVfc2NhbiBzY2FuOworCXVwLT5zdV90eXBlID0gc3VfZ2V0X3R5cGUoZHApOwogCi0JLyoKLQkgKiBGaXJzdCwgd2Ugc2NhbiB0aGUgdHJlZS4KLQkgKi8KLQlzY2FuLmRldmljZXMgPSAwOwotCXNjYW4ubXN4ID0gLTE7Ci0Jc2Nhbi5rYnggPSAtMTsKLQlzY2FuLmtibm9kZSA9IDA7Ci0Jc2Nhbi5tc25vZGUgPSAwOworCXJwID0gJm9wLT5yZXNvdXJjZVswXTsKKwl1cC0+cG9ydC5tYXBiYXNlID0gb3AtPnJlc291cmNlWzBdLnN0YXJ0OwogCi0JLyoKLQkgKiBHZXQgdGhlIG5vZGVzIGZvciBrZXlib2FyZCBhbmQgbW91c2UgZnJvbSAnYWxpYXNlcycuLi4KLQkgKi8KLSAgICAgICAgbm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOwotCW5vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKG5vZGUsICJhbGlhc2VzIik7Ci0JaWYgKG5vZGUgIT0gMCkgewotCQlsZW4gPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJrZXlib2FyZCIsIHNjYW4ucHJvcCwgU1VfUFJPUFNJWkUpOwotCQlpZiAobGVuID4gMCkgewotCQkJc2Nhbi5wcm9wW2xlbl0gPSAwOwotCQkJc2Nhbi5rYm5vZGUgPSBwcm9tX2ZpbmRkZXZpY2Uoc2Nhbi5wcm9wKTsKLQkJfQorCXVwLT5yZWdfc2l6ZSA9IChycC0+ZW5kIC0gcnAtPnN0YXJ0KSArIDE7CisJdXAtPnBvcnQubWVtYmFzZSA9IG9mX2lvcmVtYXAocnAsIDAsIHVwLT5yZWdfc2l6ZSwgInN1Iik7CisJaWYgKCF1cC0+cG9ydC5tZW1iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQlsZW4gPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJtb3VzZSIsIHNjYW4ucHJvcCwgU1VfUFJPUFNJWkUpOwotCQlpZiAobGVuID4gMCkgewotCQkJc2Nhbi5wcm9wW2xlbl0gPSAwOwotCQkJc2Nhbi5tc25vZGUgPSBwcm9tX2ZpbmRkZXZpY2Uoc2Nhbi5wcm9wKTsKLQkJfQotCX0KKwl1cC0+cG9ydC5pcnEgPSBvcC0+aXJxc1swXTsKIAotCXN1X3Byb2JlX2FueSgmc2NhbiwgcHJvbV9nZXRjaGlsZChwcm9tX3Jvb3Rfbm9kZSkpOworCXVwLT5wb3J0LmRldiA9ICZvcC0+ZGV2OwogCi0JLyoKLQkgKiBTZWNvbmQsIHdlIHByb2Nlc3MgdGhlIHNwZWNpYWwgY2FzZSBvZiBrZXlib2FyZCBhbmQgbW91c2UuCi0JICoKLQkgKiBDdXJyZW50bHkgaWYgd2UgZ290IGtleWJvYXJkIGFuZCBtb3VzZSBob29rZWQgdG8gInN1IiBwb3J0cwotCSAqIHdlIGRvIG5vdCB1c2UgYW55IHBvc3NpYmxlIHJlbWFpbmluZyAic3UiIGFzIGEgc2VyaWFsIHBvcnQuCi0JICogVGh1cywgd2UgaWdub3JlIHZhbHVlcyBvZiAubXN4IGFuZCAua2J4LCB0aGVuIGNvbXBhY3QgcG9ydHMuCi0JICovCi0JaWYgKHNjYW4ubXN4ICE9IC0xICYmIHNjYW4ua2J4ICE9IC0xKSB7Ci0JCXN1bnN1X3BvcnRzWzBdLnN1X3R5cGUgPSBTVV9QT1JUX01TOwotCQlzdW5zdV9wb3J0c1swXS5wb3J0X25vZGUgPSBzY2FuLm1zbm9kZTsKLQkJc3Vuc3Vfa2JkX21zX2luaXQoJnN1bnN1X3BvcnRzWzBdLCAwKTsKKwl1cC0+cG9ydC50eXBlID0gUE9SVF9VTktOT1dOOworCXVwLT5wb3J0LnVhcnRjbGsgPSAoU1VfQkFTRV9CQVVEICogMTYpOwogCi0JCXN1bnN1X3BvcnRzWzFdLnN1X3R5cGUgPSBTVV9QT1JUX0tCRDsKLQkJc3Vuc3VfcG9ydHNbMV0ucG9ydF9ub2RlID0gc2Nhbi5rYm5vZGU7Ci0JCXN1bnN1X2tiZF9tc19pbml0KCZzdW5zdV9wb3J0c1sxXSwgMSk7CisJZXJyID0gMDsKKwlpZiAodXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQgfHwgdXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9NUykgeworCQllcnIgPSBzdW5zdV9rYmRfbXNfaW5pdCh1cCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bm1hcDsKIAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoc2Nhbi5tc3ggIT0gLTEgfHwgc2Nhbi5rYnggIT0gLTEpIHsKLQkJcHJpbnRrKCJzdW5zdV9wcm9iZTogY2Fubm90IG1hdGNoIGtleWJvYXJkIGFuZCBtb3VzZSwgY29uZnVzZWRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJdXAtPnBvcnQuZmxhZ3MgfD0gVVBGX0JPT1RfQVVUT0NPTkY7CiAKLQlpZiAoc2Nhbi5kZXZpY2VzID09IDApCi0JCXJldHVybiAtRU5PREVWOworCXN1bnN1X2F1dG9jb25maWcodXApOwogCi0JLyoKLQkgKiBDb25zb2xlIG11c3QgYmUgaW5pdGlhdGVkIGFmdGVyIHRoZSBnZW5lcmljIGluaXRpYWxpemF0aW9uLgotCSAqLwotICAgICAgIAlzdW5zdV9zZXJpYWxfaW5pdCgpOworCWVyciA9IC1FTk9ERVY7CisJaWYgKHVwLT5wb3J0LnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCQlnb3RvIG91dF91bm1hcDsKKworCXVwLT5wb3J0Lm9wcyA9ICZzdW5zdV9wb3BzOworCisJZXJyID0gdWFydF9hZGRfb25lX3BvcnQoJnN1bnN1X3JlZywgJnVwLT5wb3J0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bm1hcDsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgdXApOworCisJaW5zdCsrOworCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlvZl9pb3VubWFwKHVwLT5wb3J0Lm1lbWJhc2UsIHVwLT5yZWdfc2l6ZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3VfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOzsKKworCWlmICh1cC0+c3VfdHlwZSA9PSBTVV9QT1JUX01TIHx8CisJICAgIHVwLT5zdV90eXBlID09IFNVX1BPUlRfS0JEKSB7CisjaWZkZWYgQ09ORklHX1NFUklPCisJCXNlcmlvX3VucmVnaXN0ZXJfcG9ydCgmdXAtPnNlcmlvKTsKKyNlbmRpZgorCX0gZWxzZSBpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1VOS05PV04pCisJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW5zdV9yZWcsICZ1cC0+cG9ydCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHN1bnN1X2V4aXQodm9pZCkKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1X21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJzdSIsCisJfSwKKwl7CisJCS5uYW1lID0gInN1X3BucCIsCisJfSwKKwl7CisJCS5uYW1lID0gInNlcmlhbCIsCisJCS5jb21wYXRpYmxlID0gInN1IiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgc3VfZHJpdmVyID0geworCS5uYW1lCQk9ICJzdSIsCisJLm1hdGNoX3RhYmxlCT0gc3VfbWF0Y2gsCisJLnByb2JlCQk9IHN1X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3VfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgbnVtX3VhcnQ7CisKK3N0YXRpYyBpbnQgX19pbml0IHN1bnN1X2luaXQodm9pZCkKIHsKLQlpbnQgaSwgc2F3X3VhcnQ7CisJc3RydWN0IGRldmljZV9ub2RlICpkcDsKKwlpbnQgZXJyOwogCi0Jc2F3X3VhcnQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKLQkJc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAgPSAmc3Vuc3VfcG9ydHNbaV07Ci0KLQkJaWYgKHVwLT5zdV90eXBlID09IFNVX1BPUlRfTVMgfHwKLQkJICAgIHVwLT5zdV90eXBlID09IFNVX1BPUlRfS0JEKSB7Ci0jaWZkZWYgQ09ORklHX1NFUklPCi0JCQlpZiAodXAtPnNlcmlvKSB7Ci0JCQkJc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHVwLT5zZXJpbyk7Ci0JCQkJdXAtPnNlcmlvID0gTlVMTDsKLQkJCX0KLSNlbmRpZgotCQl9IGVsc2UgaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOKSB7Ci0JCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3Vuc3VfcmVnLCAmdXAtPnBvcnQpOwotCQkJc2F3X3VhcnQrKzsKKwludW1fdWFydCA9IDA7CisJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKGRwLCAic3UiKSB7CisJCWlmIChzdV9nZXRfdHlwZShkcCkgPT0gU1VfUE9SVF9QT1JUKQorCQkJbnVtX3VhcnQrKzsKKwl9CisJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKGRwLCAic3VfcG5wIikgeworCQlpZiAoc3VfZ2V0X3R5cGUoZHApID09IFNVX1BPUlRfUE9SVCkKKwkJCW51bV91YXJ0Kys7CisJfQorCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgInNlcmlhbCIpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRwLCAic3UiKSkgeworCQkJaWYgKHN1X2dldF90eXBlKGRwKSA9PSBTVV9QT1JUX1BPUlQpCisJCQkJbnVtX3VhcnQrKzsKIAkJfQogCX0KIAotCWlmIChzYXdfdWFydCkKKwlpZiAobnVtX3VhcnQpIHsKKwkJc3Vuc3VfcmVnLm1pbm9yID0gc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3I7CisJCXN1bnN1X3JlZy5uciA9IG51bV91YXJ0OworCQllcnIgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc3Vuc3VfcmVnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXN1bnN1X3JlZy50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgPSBzdW5zdV9yZWcubWlub3IgLSA2NDsKKwkJc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgKz0gbnVtX3VhcnQ7CisJCXN1bnN1X3JlZy5jb25zID0gU1VOU1VfQ09OU09MRShudW1fdWFydCk7CisJfQorCisJZXJyID0gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZzdV9kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJaWYgKGVyciAmJiBudW1fdWFydCkKKwkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3Vuc3VfcmVnKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdW5zdV9leGl0KHZvaWQpCit7CisJaWYgKG51bV91YXJ0KQogCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzdW5zdV9yZWcpOwogfQogCi1tb2R1bGVfaW5pdChzdW5zdV9wcm9iZSk7Cittb2R1bGVfaW5pdChzdW5zdV9pbml0KTsKIG1vZHVsZV9leGl0KHN1bnN1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJFZGRpZSBDLiBEb3N0LCBQZXRlciBaYWl0Y2V2LCBhbmQgRGF2aWQgUy4gTWlsbGVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1biBTVSBzZXJpYWwgcG9ydCBkcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IDc2YzliYWMuLmExNDU2ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwpAQCAtMSw1ICsxLDQgQEAKLS8qCi0gKiBzdW56aWxvZy5jCisvKiBzdW56aWxvZy5jOiBaaWxvZyBzZXJpYWwgZHJpdmVyIGZvciBTcGFyYyBzeXN0ZW1zLgogICoKICAqIERyaXZlciBmb3IgWmlsb2cgc2VyaWFsIGNoaXBzIGZvdW5kIG9uIFN1biB3b3Jrc3RhdGlvbnMgYW5kCiAgKiBzZXJ2ZXJzLiAgVGhpcyBkcml2ZXIgY291bGQgYWN0dWFsbHkgYmUgbWFkZSBtb3JlIGdlbmVyaWMuCkBAIC0xMCwxMCArOSw5IEBACiAgKiBDLiBEb3N0LCBQZXRlIFphaXRjZXYsIFRlZCBUcydvIGFuZCBBbGV4IEJ1ZWxsIGZvciB0aGVpcgogICogd29yayB0aGVyZS4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzgsMTAgKzM2LDggQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpZmRlZiBDT05GSUdfU1BBUkM2NAotI2luY2x1ZGUgPGFzbS9maGMuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGFzbS9zYnVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfU1VOWklMT0dfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCiAjZGVmaW5lIFNVUFBPUlRfU1lTUlEKQEAgLTY1LDcgKzYxLDcgQEAKICNkZWZpbmUgWlNERUxBWSgpCiAjZGVmaW5lIFpTREVMQVlfTE9ORygpCiAjZGVmaW5lIFpTX1dTWU5DKF9fY2hhbm5lbCkgXAotCXNidXNfcmVhZGIoJigoX19jaGFubmVsKS0+Y29udHJvbCkpCisJcmVhZGIoJigoX19jaGFubmVsKS0+Y29udHJvbCkpCiAjZW5kaWYKIAogc3RhdGljIGludCBudW1fc3Vuemlsb2c7CkBAIC0xMDcsNyArMTAzLDcgQEAKIAl1bnNpZ25lZCBjaGFyCQkJcHJldl9zdGF0dXM7CiAKICNpZmRlZiBDT05GSUdfU0VSSU8KLQlzdHJ1Y3Qgc2VyaW8JCQkqc2VyaW87CisJc3RydWN0IHNlcmlvCQkJc2VyaW87CiAJaW50CQkJCXNlcmlvX29wZW47CiAjZW5kaWYKIH07CkBAIC0xMzgsOSArMTM0LDkgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHJldHZhbDsKIAotCXNidXNfd3JpdGViKHJlZywgJmNoYW5uZWwtPmNvbnRyb2wpOworCXdyaXRlYihyZWcsICZjaGFubmVsLT5jb250cm9sKTsKIAlaU0RFTEFZKCk7Ci0JcmV0dmFsID0gc2J1c19yZWFkYigmY2hhbm5lbC0+Y29udHJvbCk7CisJcmV0dmFsID0gcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOwogCVpTREVMQVkoKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xNDksOSArMTQ1LDkgQEAKIHN0YXRpYyB2b2lkIHdyaXRlX3pzcmVnKHN0cnVjdCB6aWxvZ19jaGFubmVsIF9faW9tZW0gKmNoYW5uZWwsCiAJCQl1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKLQlzYnVzX3dyaXRlYihyZWcsICZjaGFubmVsLT5jb250cm9sKTsKKwl3cml0ZWIocmVnLCAmY2hhbm5lbC0+Y29udHJvbCk7CiAJWlNERUxBWSgpOwotCXNidXNfd3JpdGViKHZhbHVlLCAmY2hhbm5lbC0+Y29udHJvbCk7CisJd3JpdGViKHZhbHVlLCAmY2hhbm5lbC0+Y29udHJvbCk7CiAJWlNERUxBWSgpOwogfQogCkBAIC0xNjIsMTcgKzE1OCwxNyBAQAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCXVuc2lnbmVkIGNoYXIgcmVndmFsOwogCi0JCXJlZ3ZhbCA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOworCQlyZWd2YWwgPSByZWFkYigmY2hhbm5lbC0+Y29udHJvbCk7CiAJCVpTREVMQVkoKTsKIAkJaWYgKHJlZ3ZhbCAmIFJ4X0NIX0FWKQogCQkJYnJlYWs7CiAKIAkJcmVndmFsID0gcmVhZF96c3JlZyhjaGFubmVsLCBSMSk7Ci0JCXNidXNfcmVhZGIoJmNoYW5uZWwtPmRhdGEpOworCQlyZWFkYigmY2hhbm5lbC0+ZGF0YSk7CiAJCVpTREVMQVkoKTsKIAogCQlpZiAocmVndmFsICYgKFBBUl9FUlIgfCBSeF9PVlIgfCBDUkNfRVJSKSkgewotCQkJc2J1c193cml0ZWIoRVJSX1JFUywgJmNoYW5uZWwtPmNvbnRyb2wpOworCQkJd3JpdGViKEVSUl9SRVMsICZjaGFubmVsLT5jb250cm9sKTsKIAkJCVpTREVMQVkoKTsKIAkJCVpTX1dTWU5DKGNoYW5uZWwpOwogCQl9CkBAIC0xOTQsNyArMTkwLDcgQEAKIAkJdWRlbGF5KDEwMCk7CiAJfQogCi0Jc2J1c193cml0ZWIoRVJSX1JFUywgJmNoYW5uZWwtPmNvbnRyb2wpOworCXdyaXRlYihFUlJfUkVTLCAmY2hhbm5lbC0+Y29udHJvbCk7CiAJWlNERUxBWSgpOwogCVpTX1dTWU5DKGNoYW5uZWwpOwogCkBAIC0yOTEsNyArMjg3LDcgQEAKIAkJLyogU3RvcC1BIGlzIGhhbmRsZWQgYnkgZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgbm93LiAqLwogI2lmZGVmIENPTkZJR19TRVJJTwogCQlpZiAodXAtPnNlcmlvX29wZW4pCi0JCQlzZXJpb19pbnRlcnJ1cHQodXAtPnNlcmlvLCBjaCwgMCwgcmVncyk7CisJCQlzZXJpb19pbnRlcnJ1cHQoJnVwLT5zZXJpbywgY2gsIDAsIHJlZ3MpOwogI2VuZGlmCiAJfSBlbHNlIGlmIChaU19JU19NT1VTRSh1cCkpIHsKIAkJaW50IHJldCA9IHN1bmNvcmVfbW91c2VfYmF1ZF9kZXRlY3Rpb24oY2gsIGlzX2JyZWFrKTsKQEAgLTMwNiw3ICszMDIsNyBAQAogCQljYXNlIDA6CiAjaWZkZWYgQ09ORklHX1NFUklPCiAJCQlpZiAodXAtPnNlcmlvX29wZW4pCi0JCQkJc2VyaW9faW50ZXJydXB0KHVwLT5zZXJpbywgY2gsIDAsIHJlZ3MpOworCQkJCXNlcmlvX2ludGVycnVwdCgmdXAtPnNlcmlvLCBjaCwgMCwgcmVncyk7CiAjZW5kaWYKIAkJCWJyZWFrOwogCQl9OwpAQCAtMzMwLDEyICszMjYsMTIgQEAKIAogCQlyMSA9IHJlYWRfenNyZWcoY2hhbm5lbCwgUjEpOwogCQlpZiAocjEgJiAoUEFSX0VSUiB8IFJ4X09WUiB8IENSQ19FUlIpKSB7Ci0JCQlzYnVzX3dyaXRlYihFUlJfUkVTLCAmY2hhbm5lbC0+Y29udHJvbCk7CisJCQl3cml0ZWIoRVJSX1JFUywgJmNoYW5uZWwtPmNvbnRyb2wpOwogCQkJWlNERUxBWSgpOwogCQkJWlNfV1NZTkMoY2hhbm5lbCk7CiAJCX0KIAotCQljaCA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOworCQljaCA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKIAkJWlNERUxBWSgpOwogCiAJCS8qIFRoaXMgZnVubnkgaGFjayBkZXBlbmRzIHVwb24gQlJLX0FCUlQgbm90IGludGVyZmVyaW5nCkBAIC0zNDcsNyArMzQzLDcgQEAKIAkJaWYgKCEoY2ggJiBSeF9DSF9BVikpCiAJCQlicmVhazsKIAotCQljaCA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmRhdGEpOworCQljaCA9IHJlYWRiKCZjaGFubmVsLT5kYXRhKTsKIAkJWlNERUxBWSgpOwogCiAJCWNoICY9IHVwLT5wYXJpdHlfbWFzazsKQEAgLTQwNiwxMCArNDAyLDEwIEBACiB7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAKLQlzdGF0dXMgPSBzYnVzX3JlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKKwlzdGF0dXMgPSByZWFkYigmY2hhbm5lbC0+Y29udHJvbCk7CiAJWlNERUxBWSgpOwogCi0Jc2J1c193cml0ZWIoUkVTX0VYVF9JTlQsICZjaGFubmVsLT5jb250cm9sKTsKKwl3cml0ZWIoUkVTX0VYVF9JTlQsICZjaGFubmVsLT5jb250cm9sKTsKIAlaU0RFTEFZKCk7CiAJWlNfV1NZTkMoY2hhbm5lbCk7CiAKQEAgLTQyMSw3ICs0MTcsNyBAQAogCQkJICogY29uZnVzaW5nIHRoZSBQUk9NLgogCQkJICovCiAJCQl3aGlsZSAoMSkgewotCQkJCXN0YXR1cyA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOworCQkJCXN0YXR1cyA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKIAkJCQlaU0RFTEFZKCk7CiAJCQkJaWYgKCEoc3RhdHVzICYgQlJLX0FCUlQpKQogCQkJCQlicmVhazsKQEAgLTQ1OCw3ICs0NTQsNyBAQAogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdDsKIAogCWlmIChaU19JU19DT05TKHVwKSkgewotCQl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOworCQl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKIAkJWlNERUxBWSgpOwogCiAJCS8qIFRYIHN0aWxsIGJ1c3k/ICBKdXN0IHdhaXQgZm9yIHRoZSBuZXh0IFRYIGRvbmUgaW50ZXJydXB0LgpAQCAtNDg3LDcgKzQ4Myw3IEBACiAKIAlpZiAodXAtPnBvcnQueF9jaGFyKSB7CiAJCXVwLT5mbGFncyB8PSBTVU5aSUxPR19GTEFHX1RYX0FDVElWRTsKLQkJc2J1c193cml0ZWIodXAtPnBvcnQueF9jaGFyLCAmY2hhbm5lbC0+ZGF0YSk7CisJCXdyaXRlYih1cC0+cG9ydC54X2NoYXIsICZjaGFubmVsLT5kYXRhKTsKIAkJWlNERUxBWSgpOwogCQlaU19XU1lOQyhjaGFubmVsKTsKIApAQCAtNTA2LDcgKzUwMiw3IEBACiAJCWdvdG8gYWNrX3R4X2ludDsKIAogCXVwLT5mbGFncyB8PSBTVU5aSUxPR19GTEFHX1RYX0FDVElWRTsKLQlzYnVzX3dyaXRlYih4bWl0LT5idWZbeG1pdC0+dGFpbF0sICZjaGFubmVsLT5kYXRhKTsKKwl3cml0ZWIoeG1pdC0+YnVmW3htaXQtPnRhaWxdLCAmY2hhbm5lbC0+ZGF0YSk7CiAJWlNERUxBWSgpOwogCVpTX1dTWU5DKGNoYW5uZWwpOwogCkBAIC01MTksNyArNTE1LDcgQEAKIAlyZXR1cm47CiAKIGFja190eF9pbnQ6Ci0Jc2J1c193cml0ZWIoUkVTX1R4X1AsICZjaGFubmVsLT5jb250cm9sKTsKKwl3cml0ZWIoUkVTX1R4X1AsICZjaGFubmVsLT5jb250cm9sKTsKIAlaU0RFTEFZKCk7CiAJWlNfV1NZTkMoY2hhbm5lbCk7CiB9CkBAIC01NDAsNyArNTM2LDcgQEAKIAkJLyogQ2hhbm5lbCBBICovCiAJCXR0eSA9IE5VTEw7CiAJCWlmIChyMyAmIChDSEFFWFQgfCBDSEFUeElQIHwgQ0hBUnhJUCkpIHsKLQkJCXNidXNfd3JpdGViKFJFU19IX0lVUywgJmNoYW5uZWwtPmNvbnRyb2wpOworCQkJd3JpdGViKFJFU19IX0lVUywgJmNoYW5uZWwtPmNvbnRyb2wpOwogCQkJWlNERUxBWSgpOwogCQkJWlNfV1NZTkMoY2hhbm5lbCk7CiAKQEAgLTU2Myw3ICs1NTksNyBAQAogCQlzcGluX2xvY2soJnVwLT5wb3J0LmxvY2spOwogCQl0dHkgPSBOVUxMOwogCQlpZiAocjMgJiAoQ0hCRVhUIHwgQ0hCVHhJUCB8IENIQlJ4SVApKSB7Ci0JCQlzYnVzX3dyaXRlYihSRVNfSF9JVVMsICZjaGFubmVsLT5jb250cm9sKTsKKwkJCXdyaXRlYihSRVNfSF9JVVMsICZjaGFubmVsLT5jb250cm9sKTsKIAkJCVpTREVMQVkoKTsKIAkJCVpTX1dTWU5DKGNoYW5uZWwpOwogCkBAIC01OTQsNyArNTkwLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAogCWNoYW5uZWwgPSBaSUxPR19DSEFOTkVMX0ZST01fUE9SVChwb3J0KTsKLQlzdGF0dXMgPSBzYnVzX3JlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKKwlzdGF0dXMgPSByZWFkYigmY2hhbm5lbC0+Y29udHJvbCk7CiAJWlNERUxBWSgpOwogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTY4Miw3ICs2NzgsNyBAQAogCXVwLT5mbGFncyB8PSBTVU5aSUxPR19GTEFHX1RYX0FDVElWRTsKIAl1cC0+ZmxhZ3MgJj0gflNVTlpJTE9HX0ZMQUdfVFhfU1RPUFBFRDsKIAotCXN0YXR1cyA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOworCXN0YXR1cyA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKIAlaU0RFTEFZKCk7CiAKIAkvKiBUWCBidXN5PyAgSnVzdCB3YWl0IGZvciB0aGUgVFggZG9uZSBpbnRlcnJ1cHQuICAqLwpAQCAtNjkzLDcgKzY4OSw3IEBACiAJICogSVJRIHNlbmRpbmcgZW5naW5lLgogCSAqLwogCWlmIChwb3J0LT54X2NoYXIpIHsKLQkJc2J1c193cml0ZWIocG9ydC0+eF9jaGFyLCAmY2hhbm5lbC0+ZGF0YSk7CisJCXdyaXRlYihwb3J0LT54X2NoYXIsICZjaGFubmVsLT5kYXRhKTsKIAkJWlNERUxBWSgpOwogCQlaU19XU1lOQyhjaGFubmVsKTsKIApAQCAtNzAyLDcgKzY5OCw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CiAKLQkJc2J1c193cml0ZWIoeG1pdC0+YnVmW3htaXQtPnRhaWxdLCAmY2hhbm5lbC0+ZGF0YSk7CisJCXdyaXRlYih4bWl0LT5idWZbeG1pdC0+dGFpbF0sICZjaGFubmVsLT5kYXRhKTsKIAkJWlNERUxBWSgpOwogCQlaU19XU1lOQyhjaGFubmVsKTsKIApAQCAtNzc5LDcgKzc3NSw3IEBACiAJc3RydWN0IHppbG9nX2NoYW5uZWwgX19pb21lbSAqY2hhbm5lbDsKIAogCWNoYW5uZWwgPSBaSUxPR19DSEFOTkVMX0ZST01fUE9SVCgmdXAtPnBvcnQpOwotCXVwLT5wcmV2X3N0YXR1cyA9IHNidXNfcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOworCXVwLT5wcmV2X3N0YXR1cyA9IHJlYWRiKCZjaGFubmVsLT5jb250cm9sKTsKIAogCS8qIEVuYWJsZSByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIuICAqLwogCXVwLT5jdXJyZWdzW1IzXSB8PSBSeEVOQUI7CkBAIC05NjMsNyArOTU5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN1bnppbG9nX3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gIlN1blppbG9nIjsKKwlyZXR1cm4gInpzIjsKIH0KIAogLyogV2UgZG8gbm90IHJlcXVlc3QvcmVsZWFzZSBtYXBwaW5ncyBvZiB0aGUgcmVnaXN0ZXJzIGhlcmUsIHRoaXMKQEAgLTEwMTIsMjQyICsxMDA4LDU1IEBACiBzdGF0aWMgc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICoqc3Vuemlsb2dfY2hpcF9yZWdzOwogCiBzdGF0aWMgc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqc3Vuemlsb2dfaXJxX2NoYWluOwotc3RhdGljIGludCB6aWxvZ19pcnEgPSAtMTsKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzdW56aWxvZ19yZWcgPSB7CiAJLm93bmVyCQk9CVRISVNfTU9EVUxFLAogCS5kcml2ZXJfbmFtZQk9CSJ0dHlTIiwKLQkuZGV2ZnNfbmFtZQk9CSJ0dHMvIiwKIAkuZGV2X25hbWUJPQkidHR5UyIsCiAJLm1ham9yCQk9CVRUWV9NQUpPUiwKIH07CiAKLXN0YXRpYyB2b2lkICogX19pbml0IGFsbG9jX29uZV90YWJsZSh1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW50IF9faW5pdCBzdW56aWxvZ19hbGxvY190YWJsZXModm9pZCkKIHsKLQl2b2lkICpyZXQ7CisJc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXA7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBpOwogCi0JcmV0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0ICE9IE5VTEwpCi0JCW1lbXNldChyZXQsIDAsIHNpemUpOworCXNpemUgPSBOVU1fQ0hBTk5FTFMgKiBzaXplb2Yoc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCk7CisJc3Vuemlsb2dfcG9ydF90YWJsZSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdW56aWxvZ19wb3J0X3RhYmxlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7CisJCXVwID0gJnN1bnppbG9nX3BvcnRfdGFibGVbaV07CisKKwkJc3Bpbl9sb2NrX2luaXQoJnVwLT5wb3J0LmxvY2spOworCisJCWlmIChpID09IDApCisJCQlzdW56aWxvZ19pcnFfY2hhaW4gPSB1cDsKKworCQlpZiAoaSA8IE5VTV9DSEFOTkVMUyAtIDEpCisJCQl1cC0+bmV4dCA9IHVwICsgMTsKKwkJZWxzZQorCQkJdXAtPm5leHQgPSBOVUxMOworCX0KKworCXNpemUgPSBOVU1fU1VOWklMT0cgKiBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICopOworCXN1bnppbG9nX2NoaXBfcmVncyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdW56aWxvZ19jaGlwX3JlZ3MpIHsKKwkJa2ZyZWUoc3Vuemlsb2dfcG9ydF90YWJsZSk7CisJCXN1bnppbG9nX2lycV9jaGFpbiA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc3Vuemlsb2dfYWxsb2NfdGFibGVzKHZvaWQpCitzdGF0aWMgdm9pZCBzdW56aWxvZ19mcmVlX3RhYmxlcyh2b2lkKQogewotCXN1bnppbG9nX3BvcnRfdGFibGUgPSAKLQkJYWxsb2Nfb25lX3RhYmxlKE5VTV9DSEFOTkVMUyAqIHNpemVvZihzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0KSk7Ci0Jc3Vuemlsb2dfY2hpcF9yZWdzID0gCi0JCWFsbG9jX29uZV90YWJsZShOVU1fU1VOWklMT0cgKiBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICopKTsKLQotCWlmIChzdW56aWxvZ19wb3J0X3RhYmxlID09IE5VTEwgfHwgc3Vuemlsb2dfY2hpcF9yZWdzID09IE5VTEwpIHsKLQkJcHJvbV9wcmludGYoIlN1blppbG9nOiBDYW5ub3QgYWxsb2NhdGUgdGFibGVzLlxuIik7Ci0JCXByb21faGFsdCgpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19TUEFSQzY0Ci0KLS8qIFdlIHVzZWQgdG8gYXR0ZW1wdCB0byB1c2UgdGhlIGFkZHJlc3MgcHJvcGVydHkgb2YgdGhlIFppbG9nIGRldmljZSBub2RlCi0gKiBidXQgdGhhdCB0b3RhbGx5IGlzIG5vdCBuZWNlc3Nhcnkgb24gc3BhcmM2NC4KLSAqLwotc3RhdGljIHN0cnVjdCB6aWxvZ19sYXlvdXQgX19pb21lbSAqIF9faW5pdCBnZXRfenNfc3VuNHUoaW50IGNoaXAsIGludCB6c25vZGUpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBwZWRfYWRkcjsKLQl1bnNpZ25lZCBpbnQgc3VuNHVfaW5vOwotCXN0cnVjdCBzYnVzX2J1cyAqc2J1cyA9IE5VTEw7Ci0Jc3RydWN0IHNidXNfZGV2ICpzZGV2ID0gTlVMTDsKLQlpbnQgZXJyOwotCi0JaWYgKGNlbnRyYWxfYnVzID09IE5VTEwpIHsKLQkJZm9yX2VhY2hfc2J1cyhzYnVzKSB7Ci0JCQlmb3JfZWFjaF9zYnVzZGV2KHNkZXYsIHNidXMpIHsKLQkJCQlpZiAoc2Rldi0+cHJvbV9ub2RlID09IHpzbm9kZSkKLQkJCQkJZ290byBmb3VuZDsKLQkJCX0KLQkJfQotCX0KLSBmb3VuZDoKLQlpZiAoc2RldiA9PSBOVUxMICYmIGNlbnRyYWxfYnVzID09IE5VTEwpIHsKLQkJcHJvbV9wcmludGYoIlN1blppbG9nOiBzZGV2JiZjZW50cmFsID09IE5VTEwgZm9yICIKLQkJCSAgICAiWmlsb2cgJWQgaW4gZ2V0X3pzX3N1bjR1LlxuIiwgY2hpcCk7Ci0JCXByb21faGFsdCgpOwotCX0KLQlpZiAoY2VudHJhbF9idXMgPT0gTlVMTCkgewotCQltYXBwZWRfYWRkciA9Ci0JCQlzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCAwLAotCQkJCSAgICAgUEFHRV9TSVpFLAotCQkJCSAgICAgIlppbG9nIFJlZ2lzdGVycyIpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyB6c3JlZ3NbMV07Ci0KLQkJZXJyID0gcHJvbV9nZXRwcm9wZXJ0eSh6c25vZGUsICJyZWciLAotCQkJCSAgICAgICAoY2hhciAqKSAmenNyZWdzWzBdLAotCQkJCSAgICAgICBzaXplb2YoenNyZWdzKSk7Ci0JCWlmIChlcnIgPT0gLTEpIHsKLQkJCXByb21fcHJpbnRmKCJTdW5aaWxvZzogQ2Fubm90IG1hcCAiCi0JCQkJICAgICJaaWxvZyAlZCByZWdzIG9uICIKLQkJCQkgICAgImNlbnRyYWwgYnVzLlxuIiwgY2hpcCk7Ci0JCQlwcm9tX2hhbHQoKTsKLQkJfQotCQlhcHBseV9maGNfcmFuZ2VzKGNlbnRyYWxfYnVzLT5jaGlsZCwKLQkJCQkgJnpzcmVnc1swXSwgMSk7Ci0JCWFwcGx5X2NlbnRyYWxfcmFuZ2VzKGNlbnRyYWxfYnVzLCAmenNyZWdzWzBdLCAxKTsKLQkJbWFwcGVkX2FkZHIgPSAodm9pZCBfX2lvbWVtICopCi0JCQkoKCgodTY0KXpzcmVnc1swXS53aGljaF9pbyk8PDMyVUwpIHwKLQkJCSgodTY0KXpzcmVnc1swXS5waHlzX2FkZHIpKTsKLQl9Ci0KLQlpZiAoemlsb2dfaXJxID09IC0xKSB7Ci0JCWlmIChjZW50cmFsX2J1cykgewotCQkJdW5zaWduZWQgbG9uZyBpY2xyLCBpbWFwOwotCi0JCQlpY2xyID0gY2VudHJhbF9idXMtPmNoaWxkLT5maGNfcmVncy51cmVncwotCQkJCSsgRkhDX1VSRUdTX0lDTFI7Ci0JCQlpbWFwID0gY2VudHJhbF9idXMtPmNoaWxkLT5maGNfcmVncy51cmVncwotCQkJCSsgRkhDX1VSRUdTX0lNQVA7Ci0JCQl6aWxvZ19pcnEgPSBidWlsZF9pcnEoMCwgaWNsciwgaW1hcCk7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSBwcm9tX2dldHByb3BlcnR5KHpzbm9kZSwgImludGVycnVwdHMiLAotCQkJCQkgICAgICAgKGNoYXIgKikgJnN1bjR1X2lubywKLQkJCQkJICAgICAgIHNpemVvZihzdW40dV9pbm8pKTsKLQkJCXppbG9nX2lycSA9IHNidXNfYnVpbGRfaXJxKHNidXNfcm9vdCwgc3VuNHVfaW5vKTsKLQkJfQotCX0KLQotCXJldHVybiAoc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICopIG1hcHBlZF9hZGRyOwotfQotI2Vsc2UgLyogQ09ORklHX1NQQVJDNjQgKi8KLQotLyoKLSAqIFhYWCBUaGUgc3VuNGQgY2FzZSBpcyB1dHRlcmx5IHNjcmV3ZWQ6IGl0IHRyaWVzIHRvIHJlLXdhbGsgdGhlIHRyZWUKLSAqIChmb3IgdGhlIDNyZCB0aW1lKSBpbiBvcmRlciB0byBmaW5kIGJvb3RidXMgYW5kIGNwdS4gU3RyZWFtbGluZSBpdC4KLSAqLwotc3RhdGljIHN0cnVjdCB6aWxvZ19sYXlvdXQgX19pb21lbSAqIF9faW5pdCBnZXRfenNfc3VuNGNtZChpbnQgY2hpcCwgaW50IG5vZGUpCi17Ci0Jc3RydWN0IGxpbnV4X3Byb21faXJxcyBpcnFfaW5mb1syXTsKLQl2b2lkIF9faW9tZW0gKm1hcHBlZF9hZGRyID0gTlVMTDsKLQlpbnQgenNub2RlLCBjcHVub2RlLCBiYm5vZGU7Ci0Jc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzIHpzcmVnWzRdOwotCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0KLQlpZiAoc3BhcmNfY3B1X21vZGVsID09IHN1bjRkKSB7Ci0JCWludCB3YWxrOwotCi0JCXpzbm9kZSA9IDA7Ci0JCWJibm9kZSA9IDA7Ci0JCWNwdW5vZGUgPSAwOwotCQlmb3IgKHdhbGsgPSBwcm9tX2dldGNoaWxkKHByb21fcm9vdF9ub2RlKTsKLQkJICAgICAod2FsayA9IHByb21fc2VhcmNoc2libGluZ3Mod2FsaywgImNwdS11bml0IikpICE9IDA7Ci0JCSAgICAgd2FsayA9IHByb21fZ2V0c2libGluZyh3YWxrKSkgewotCQkJYmJub2RlID0gcHJvbV9nZXRjaGlsZCh3YWxrKTsKLQkJCWlmIChiYm5vZGUgJiYKLQkJCSAgICAoYmJub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhiYm5vZGUsICJib290YnVzIikpKSB7Ci0JCQkJaWYgKCh6c25vZGUgPSBwcm9tX2dldGNoaWxkKGJibm9kZSkpID09IG5vZGUpIHsKLQkJCQkJY3B1bm9kZSA9IHdhbGs7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoIXdhbGspIHsKLQkJCXByb21fcHJpbnRmKCJTdW5aaWxvZzogQ2Fubm90IGZpbmQgdGhlICVkJ3RoIGJvb3RidXMgb24gc3VuNGQuXG4iLAotCQkJCSAgICAoY2hpcCAvIDIpKTsKLQkJCXByb21faGFsdCgpOwotCQl9Ci0KLQkJaWYgKHByb21fZ2V0cHJvcGVydHkoenNub2RlLCAicmVnIiwKLQkJCQkgICAgIChjaGFyICopIHpzcmVnLCBzaXplb2YoenNyZWcpKSA9PSAtMSkgewotCQkJcHJvbV9wcmludGYoIlN1blppbG9nOiBDYW5ub3QgbWFwIFppbG9nICVkXG4iLCBjaGlwKTsKLQkJCXByb21faGFsdCgpOwotCQl9Ci0JCS8qIFhYWCBMb29rcyBsaWtlIGFuIG9mZiBieSBvbmU/ICovCi0JCXByb21fYXBwbHlfZ2VuZXJpY19yYW5nZXMoYmJub2RlLCBjcHVub2RlLCB6c3JlZywgMSk7Ci0JCXJlcy5zdGFydCA9IHpzcmVnWzBdLnBoeXNfYWRkcjsKLQkJcmVzLmVuZCA9IHJlcy5zdGFydCArICg4IC0gMSk7Ci0JCXJlcy5mbGFncyA9IHpzcmVnWzBdLndoaWNoX2lvIHwgSU9SRVNPVVJDRV9JTzsKLQkJbWFwcGVkX2FkZHIgPSBzYnVzX2lvcmVtYXAoJnJlcywgMCwgOCwgIlppbG9nIFNlcmlhbCIpOwotCi0JfSBlbHNlIHsKLQkJenNub2RlID0gbm9kZTsKLQotI2lmIDAgLyogWFhYIFdoZW4gd2FzIHRoaXMgdXNlZD8gKi8KLQkJaWYgKHByb21fZ2V0aW50ZGVmYXVsdCh6c25vZGUsICJzbGF2ZSIsIC0xKSAhPSBjaGlwaWQpIHsKLQkJCXpzbm9kZSA9IHByb21fZ2V0c2libGluZyh6c25vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLSNlbmRpZgotCi0JCS8qCi0JCSAqICJhZGRyZXNzIiBpcyBvbmx5IHByZXNlbnQgb24gcG9ydHMgdGhhdCBPQlAgb3BlbmVkCi0JCSAqIChmcm9tIE1pdGNoIEJyYWRsZXkncyAiSGl0Y2hoaWtlcidzIEd1aWRlIHRvIE9CUCIpLgotCQkgKiBXZSBkbyBub3QgdXNlIGl0LgotCQkgKi8KLQotCQlpZiAocHJvbV9nZXRwcm9wZXJ0eSh6c25vZGUsICJyZWciLAotCQkJCSAgICAgKGNoYXIgKikgenNyZWcsIHNpemVvZih6c3JlZykpID09IC0xKSB7Ci0JCQlwcm9tX3ByaW50ZigiU3VuWmlsb2c6IENhbm5vdCBtYXAgWmlsb2cgJWRcbiIsIGNoaXApOwotCQkJcHJvbV9oYWx0KCk7Ci0JCX0KLQkJaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40bSkJLyogQ3J1ZGUuIFBhc3MgcGFyZW50LiBYWFggKi8KLQkJCXByb21fYXBwbHlfb2Jpb19yYW5nZXMoenNyZWcsIDEpOwotCQlyZXMuc3RhcnQgPSB6c3JlZ1swXS5waHlzX2FkZHI7Ci0JCXJlcy5lbmQgPSByZXMuc3RhcnQgKyAoOCAtIDEpOwotCQlyZXMuZmxhZ3MgPSB6c3JlZ1swXS53aGljaF9pbyB8IElPUkVTT1VSQ0VfSU87Ci0JCW1hcHBlZF9hZGRyID0gc2J1c19pb3JlbWFwKCZyZXMsIDAsIDgsICJaaWxvZyBTZXJpYWwiKTsKLQl9Ci0KLQlpZiAocHJvbV9nZXRwcm9wZXJ0eSh6c25vZGUsICJpbnRyIiwKLQkJCSAgICAgKGNoYXIgKikgaXJxX2luZm8sIHNpemVvZihpcnFfaW5mbykpCi0JCSAgICAlIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9pcnFzKSkgewotCQlwcm9tX3ByaW50ZigiU3VuWmlsb2c6IENhbm5vdCBnZXQgSVJRIHByb3BlcnR5IGZvciBaaWxvZyAlZC5cbiIsCi0JCQkgICAgY2hpcCk7Ci0JCXByb21faGFsdCgpOwotCX0KLQlpZiAoemlsb2dfaXJxID09IC0xKSB7Ci0JCXppbG9nX2lycSA9IGlycV9pbmZvWzBdLnByaTsKLQl9IGVsc2UgaWYgKHppbG9nX2lycSAhPSBpcnFfaW5mb1swXS5wcmkpIHsKLQkJLyogWFhYLiBEdW1iLiBTaG91bGQgaGFuZGxlIHBlci1jaGlwIElSUSwgZm9yIGFkZC1vbnMuICovCi0JCXByb21fcHJpbnRmKCJTdW5aaWxvZzogSW5jb25zaXN0ZW50IElSUSBsYXlvdXQgZm9yIFppbG9nICVkLlxuIiwKLQkJCSAgICBjaGlwKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCi0JcmV0dXJuIChzdHJ1Y3Qgemlsb2dfbGF5b3V0IF9faW9tZW0gKikgbWFwcGVkX2FkZHI7Ci19Ci0jZW5kaWYgLyogIShDT05GSUdfU1BBUkM2NCkgKi8KLQotLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlcnMgZm9yIFN1blppbG9nIGluc3RhbmNlIENISVAuICAqLwotc3RhdGljIHN0cnVjdCB6aWxvZ19sYXlvdXQgX19pb21lbSAqIF9faW5pdCBnZXRfenMoaW50IGNoaXAsIGludCBub2RlKQotewotCWlmIChjaGlwIDwgMCB8fCBjaGlwID49IE5VTV9TVU5aSUxPRykgewotCQlwcm9tX3ByaW50ZigiU3VuWmlsb2c6IElsbGVnYWwgY2hpcCBudW1iZXIgJWQgaW4gZ2V0X3pzLlxuIiwgY2hpcCk7Ci0JCXByb21faGFsdCgpOwotCX0KLQotI2lmZGVmIENPTkZJR19TUEFSQzY0Ci0JcmV0dXJuIGdldF96c19zdW40dShjaGlwLCBub2RlKTsKLSNlbHNlCi0KLQlpZiAoc3BhcmNfY3B1X21vZGVsID09IHN1bjQpIHsKLQkJc3RydWN0IHJlc291cmNlIHJlczsKLQotCQkvKiBOb3QgcHJvYmUtYWJsZSwgaGFyZCBjb2RlIGl0LiAqLwotCQlzd2l0Y2ggKGNoaXApIHsKLQkJY2FzZSAwOgotCQkJcmVzLnN0YXJ0ID0gMHhmMTAwMDAwMDsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlyZXMuc3RhcnQgPSAweGYwMDAwMDAwOwotCQkJYnJlYWs7Ci0JCX07Ci0JCXppbG9nX2lycSA9IDEyOwotCQlyZXMuZW5kID0gKHJlcy5zdGFydCArICg4IC0gMSkpOwotCQlyZXMuZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCQlyZXR1cm4gc2J1c19pb3JlbWFwKCZyZXMsIDAsIDgsICJTdW5aaWxvZyIpOwotCX0KLQotCXJldHVybiBnZXRfenNfc3VuNGNtZChjaGlwLCBub2RlKTsKLSNlbmRpZgorCWtmcmVlKHN1bnppbG9nX3BvcnRfdGFibGUpOworCXN1bnppbG9nX2lycV9jaGFpbiA9IE5VTEw7CisJa2ZyZWUoc3Vuemlsb2dfY2hpcF9yZWdzKTsKIH0KIAogI2RlZmluZSBaU19QVVRfQ0hBUl9NQVhfREVMQVkJMjAwMAkvKiAxMCBtcyAqLwpAQCAtMTI2MSw3ICsxMDcwLDcgQEAKIAkgKiB1ZGVsYXkgd2l0aCBaU0RFTEFZIGFzIHRoYXQgaXMgYSBOT1Agb24gc29tZSBwbGF0Zm9ybXMuICAtRGF2ZU0KIAkgKi8KIAlkbyB7Ci0JCXVuc2lnbmVkIGNoYXIgdmFsID0gc2J1c19yZWFkYigmY2hhbm5lbC0+Y29udHJvbCk7CisJCXVuc2lnbmVkIGNoYXIgdmFsID0gcmVhZGIoJmNoYW5uZWwtPmNvbnRyb2wpOwogCQlpZiAodmFsICYgVHhfQlVGX0VNUCkgewogCQkJWlNERUxBWSgpOwogCQkJYnJlYWs7CkBAIC0xMjY5LDcgKzEwNzgsNyBAQAogCQl1ZGVsYXkoNSk7CiAJfSB3aGlsZSAoLS1sb29wcyk7CiAKLQlzYnVzX3dyaXRlYihjaCwgJmNoYW5uZWwtPmRhdGEpOworCXdyaXRlYihjaCwgJmNoYW5uZWwtPmRhdGEpOwogCVpTREVMQVkoKTsKIAlaU19XU1lOQyhjaGFubmVsKTsKIH0KQEAgLTEzODYsMjggKzExOTUsNiBAQAogCS5kYXRhICAgPQkmc3Vuemlsb2dfcmVnLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc3Vuemlsb2dfY29uc29sZV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoY29uX2lzX3ByZXNlbnQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKLQkJaW50IHRoaXNfbWlub3IgPSBzdW56aWxvZ19yZWcubWlub3IgKyBpOwotCi0JCWlmICgodGhpc19taW5vciAtIDY0KSA9PSAoc2VyaWFsX2NvbnNvbGUgLSAxKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBOVU1fQ0hBTk5FTFMpCi0JCXJldHVybiAwOwotCi0Jc3Vuemlsb2dfY29uc29sZS5pbmRleCA9IGk7Ci0Jc3Vuemlsb2dfcG9ydF90YWJsZVtpXS5mbGFncyB8PSBTVU5aSUxPR19GTEFHX0lTX0NPTlM7Ci0JcmVnaXN0ZXJfY29uc29sZSgmc3Vuemlsb2dfY29uc29sZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNvbnNvbGUgKlNVTlpJTE9HX0NPTlNPTEUodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTE0MzIsMTAxICsxMjE5LDggQEAKIAogI2Vsc2UKICNkZWZpbmUgU1VOWklMT0dfQ09OU09MRSgpCShOVUxMKQotI2RlZmluZSBzdW56aWxvZ19jb25zb2xlX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotLyoKLSAqIFdlIHNjYW4gdGhlIFBST00gdHJlZSByZWN1cnNpdmVseS4gVGhpcyBpcyB0aGUgbW9zdCByZWxpYWJsZSB3YXkKLSAqIHRvIGZpbmQgWmlsb2cgbm9kZXMgb24gdmFyaW91cyBwbGF0Zm9ybXMuIEhvd2V2ZXIsIHdlIGZhY2UgYW4gZXh0cmVtZQotICogc2hvcnRhZ2Ugb2Yga2VybmVsIHN0YWNrLCBzbyB3ZSBtdXN0IGJlIHZlcnkgY2FyZWZ1bC4gVG8gdGhhdCBlbmQsCi0gKiB3ZSBzY2FuIG9ubHkgdG8gYSBjZXJ0YWluIGRlcHRoLCBhbmQgd2UgdXNlIGEgY29tbW9uIHByb3BlcnR5IGJ1ZmZlcgotICogaW4gdGhlIHNjYW4gc3RydWN0dXJlLgotICovCi0jZGVmaW5lIFpTX1BST1BTSVpFICAxMjgKLSNkZWZpbmUgWlNfU0NBTl9ERVBUSAk1Ci0KLXN0cnVjdCB6c19wcm9iZV9zY2FuIHsKLQlpbnQgZGVwdGg7Ci0Jdm9pZCAoKnNjYW5uZXIpKHN0cnVjdCB6c19wcm9iZV9zY2FuICp0LCBpbnQgbm9kZSk7Ci0KLQlpbnQgZGV2aWNlczsKLQljaGFyIHByb3BbWlNfUFJPUFNJWkVdOwotfTsKLQotc3RhdGljIGludCBfX2lubGluZV9fIHN1bnppbG9nX25vZGVfb2soaW50IG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCi17Ci0JaWYgKHN0cm5jbXAobmFtZSwgInpzIiwgbGVuKSA9PSAwKQotCQlyZXR1cm4gMTsKLQkvKiBEb24ndCBmb2xkIHRoaXMgcHJvY2VkdXJlIGp1c3QgeWV0LiBDb21wYXJlIHRvIHN1X25vZGVfb2soKS4gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHN1bnppbG9nX3NjYW4oc3RydWN0IHpzX3Byb2JlX3NjYW4gKnQsIGludCBub2RlKQotewotCWludCBsZW47Ci0KLQlmb3IgKDsgbm9kZSAhPSAwOyBub2RlID0gcHJvbV9nZXRzaWJsaW5nKG5vZGUpKSB7Ci0JCWxlbiA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgIm5hbWUiLCB0LT5wcm9wLCBaU19QUk9QU0laRSk7Ci0JCWlmIChsZW4gPD0gMSkKLQkJCWNvbnRpbnVlOwkJLyogQnJva2VuIFBST00gbm9kZSAqLwotCQlpZiAoc3Vuemlsb2dfbm9kZV9vayhub2RlLCB0LT5wcm9wLCBsZW4pKSB7Ci0JCQkoKnQtPnNjYW5uZXIpKHQsIG5vZGUpOwotCQl9IGVsc2UgewotCQkJaWYgKHQtPmRlcHRoIDwgWlNfU0NBTl9ERVBUSCkgewotCQkJCXQtPmRlcHRoKys7Ci0JCQkJc3Vuemlsb2dfc2Nhbih0LCBwcm9tX2dldGNoaWxkKG5vZGUpKTsKLQkJCQktLXQtPmRlcHRoOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3Vuemlsb2dfcHJlcGFyZSh2b2lkKQotewotCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwOwotCXN0cnVjdCB6aWxvZ19sYXlvdXQgX19pb21lbSAqcnA7Ci0JaW50IGNoYW5uZWwsIGNoaXA7Ci0KLQkvKgotCSAqIFRlbXBvcmFyeSBmaXguCi0JICovCi0JZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IE5VTV9DSEFOTkVMUzsgY2hhbm5lbCsrKQotCQlzcGluX2xvY2tfaW5pdCgmc3Vuemlsb2dfcG9ydF90YWJsZVtjaGFubmVsXS5wb3J0LmxvY2spOwotCi0Jc3Vuemlsb2dfaXJxX2NoYWluID0gdXAgPSAmc3Vuemlsb2dfcG9ydF90YWJsZVswXTsKLQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgTlVNX0NIQU5ORUxTIC0gMTsgY2hhbm5lbCsrKQotCQl1cFtjaGFubmVsXS5uZXh0ID0gJnVwW2NoYW5uZWwgKyAxXTsKLQl1cFtjaGFubmVsXS5uZXh0ID0gTlVMTDsKLQotCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBOVU1fU1VOWklMT0c7IGNoaXArKykgewotCQlycCA9IHN1bnppbG9nX2NoaXBfcmVnc1tjaGlwXTsKLQkJdXBbKGNoaXAgKiAyKSArIDBdLnBvcnQubWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKikmcnAtPmNoYW5uZWxBOwotCQl1cFsoY2hpcCAqIDIpICsgMV0ucG9ydC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKSZycC0+Y2hhbm5lbEI7Ci0KLQkJLyogQ2hhbm5lbCBBICovCi0JCXVwWyhjaGlwICogMikgKyAwXS5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwotCQl1cFsoY2hpcCAqIDIpICsgMF0ucG9ydC5pcnEgPSB6aWxvZ19pcnE7Ci0JCXVwWyhjaGlwICogMikgKyAwXS5wb3J0LnVhcnRjbGsgPSBaU19DTE9DSzsKLQkJdXBbKGNoaXAgKiAyKSArIDBdLnBvcnQuZmlmb3NpemUgPSAxOwotCQl1cFsoY2hpcCAqIDIpICsgMF0ucG9ydC5vcHMgPSAmc3Vuemlsb2dfcG9wczsKLQkJdXBbKGNoaXAgKiAyKSArIDBdLnBvcnQudHlwZSA9IFBPUlRfU1VOWklMT0c7Ci0JCXVwWyhjaGlwICogMikgKyAwXS5wb3J0LmZsYWdzID0gMDsKLQkJdXBbKGNoaXAgKiAyKSArIDBdLnBvcnQubGluZSA9IChjaGlwICogMikgKyAwOwotCQl1cFsoY2hpcCAqIDIpICsgMF0uZmxhZ3MgfD0gU1VOWklMT0dfRkxBR19JU19DSEFOTkVMX0E7Ci0KLQkJLyogQ2hhbm5lbCBCICovCi0JCXVwWyhjaGlwICogMikgKyAxXS5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwotCQl1cFsoY2hpcCAqIDIpICsgMV0ucG9ydC5pcnEgPSB6aWxvZ19pcnE7Ci0JCXVwWyhjaGlwICogMikgKyAxXS5wb3J0LnVhcnRjbGsgPSBaU19DTE9DSzsKLQkJdXBbKGNoaXAgKiAyKSArIDFdLnBvcnQuZmlmb3NpemUgPSAxOwotCQl1cFsoY2hpcCAqIDIpICsgMV0ucG9ydC5vcHMgPSAmc3Vuemlsb2dfcG9wczsKLQkJdXBbKGNoaXAgKiAyKSArIDFdLnBvcnQudHlwZSA9IFBPUlRfU1VOWklMT0c7Ci0JCXVwWyhjaGlwICogMikgKyAxXS5wb3J0LmZsYWdzID0gMDsKLQkJdXBbKGNoaXAgKiAyKSArIDFdLnBvcnQubGluZSA9IChjaGlwICogMikgKyAxOwotCQl1cFsoY2hpcCAqIDIpICsgMV0uZmxhZ3MgfD0gMDsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBzdW56aWxvZ19pbml0X2tiZG1zKHN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwLCBpbnQgY2hhbm5lbCkKIHsKIAlpbnQgYmF1ZCwgYnJnOwpAQCAtMTU0MCw4ICsxMjM0LDYgQEAKIAkJdXAtPmNmbGFnID0gQjQ4MDAgfCBDUzggfCBDTE9DQUwgfCBDUkVBRDsKIAkJYmF1ZCA9IDQ4MDA7CiAJfQotCXByaW50ayhLRVJOX0lORk8gInpzJWQgYXQgMHglcCAoaXJxID0gJWQpIGlzIGEgU3VuWmlsb2dcbiIsCi0JICAgICAgIGNoYW5uZWwsIHVwLT5wb3J0Lm1lbWJhc2UsIHppbG9nX2lycSk7CiAKIAl1cC0+Y3VycmVnc1tSMTVdID0gQlJLSUU7CiAJYnJnID0gQlBTX1RPX0JSRyhiYXVkLCBaU19DTE9DSyAvIFpTX0NMT0NLX0RJVklTT1IpOwpAQCAtMTU1MywyMTYgKzEyNDUsMjY4IEBACiAjaWZkZWYgQ09ORklHX1NFUklPCiBzdGF0aWMgdm9pZCBfX2luaXQgc3Vuemlsb2dfcmVnaXN0ZXJfc2VyaW8oc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAsIGludCBjaGFubmVsKQogewotCXN0cnVjdCBzZXJpbyAqc2VyaW87CisJc3RydWN0IHNlcmlvICpzZXJpbyA9ICZ1cC0+c2VyaW87CiAKLQl1cC0+c2VyaW8gPSBzZXJpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpbyksIEdGUF9LRVJORUwpOwotCWlmIChzZXJpbykgewotCQltZW1zZXQoc2VyaW8sIDAsIHNpemVvZigqc2VyaW8pKTsKKwlzZXJpby0+cG9ydF9kYXRhID0gdXA7CiAKLQkJc2VyaW8tPnBvcnRfZGF0YSA9IHVwOwotCi0JCXNlcmlvLT5pZC50eXBlID0gU0VSSU9fUlMyMzI7Ci0JCWlmIChjaGFubmVsID09IEtFWUJPQVJEX0xJTkUpIHsKLQkJCXNlcmlvLT5pZC5wcm90byA9IFNFUklPX1NVTktCRDsKLQkJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJ6c2tiZCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwotCQl9IGVsc2UgewotCQkJc2VyaW8tPmlkLnByb3RvID0gU0VSSU9fU1VOOwotCQkJc2VyaW8tPmlkLmV4dHJhID0gMTsKLQkJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJ6c21zIiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7Ci0JCX0KLQkJc3RybGNweShzZXJpby0+cGh5cywKLQkJCShjaGFubmVsID09IEtFWUJPQVJEX0xJTkUgPyAienMvc2VyaW8wIiA6ICJ6cy9zZXJpbzEiKSwKLQkJCXNpemVvZihzZXJpby0+cGh5cykpOwotCi0JCXNlcmlvLT53cml0ZSA9IHN1bnppbG9nX3NlcmlvX3dyaXRlOwotCQlzZXJpby0+b3BlbiA9IHN1bnppbG9nX3NlcmlvX29wZW47Ci0JCXNlcmlvLT5jbG9zZSA9IHN1bnppbG9nX3NlcmlvX2Nsb3NlOwotCi0JCXNlcmlvX3JlZ2lzdGVyX3BvcnQoc2VyaW8pOworCXNlcmlvLT5pZC50eXBlID0gU0VSSU9fUlMyMzI7CisJaWYgKGNoYW5uZWwgPT0gS0VZQk9BUkRfTElORSkgeworCQlzZXJpby0+aWQucHJvdG8gPSBTRVJJT19TVU5LQkQ7CisJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJ6c2tiZCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInpzJWQ6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciBzZXJpbyBwb3J0XG4iLAotCQkJY2hhbm5lbCk7CisJCXNlcmlvLT5pZC5wcm90byA9IFNFUklPX1NVTjsKKwkJc2VyaW8tPmlkLmV4dHJhID0gMTsKKwkJc3RybGNweShzZXJpby0+bmFtZSwgInpzbXMiLCBzaXplb2Yoc2VyaW8tPm5hbWUpKTsKIAl9CisJc3RybGNweShzZXJpby0+cGh5cywKKwkJKGNoYW5uZWwgPT0gS0VZQk9BUkRfTElORSA/ICJ6cy9zZXJpbzAiIDogInpzL3NlcmlvMSIpLAorCQlzaXplb2Yoc2VyaW8tPnBoeXMpKTsKKworCXNlcmlvLT53cml0ZSA9IHN1bnppbG9nX3NlcmlvX3dyaXRlOworCXNlcmlvLT5vcGVuID0gc3Vuemlsb2dfc2VyaW9fb3BlbjsKKwlzZXJpby0+Y2xvc2UgPSBzdW56aWxvZ19zZXJpb19jbG9zZTsKKwlzZXJpby0+ZGV2LnBhcmVudCA9IHVwLT5wb3J0LmRldjsKKworCXNlcmlvX3JlZ2lzdGVyX3BvcnQoc2VyaW8pOwogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzdW56aWxvZ19pbml0X2h3KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc3Vuemlsb2dfaW5pdF9odyhzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCBfX2lvbWVtICpjaGFubmVsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGJhdWQsIGJyZzsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQlzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCA9ICZzdW56aWxvZ19wb3J0X3RhYmxlW2ldOwotCQlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCBfX2lvbWVtICpjaGFubmVsID0gWklMT0dfQ0hBTk5FTF9GUk9NX1BPUlQoJnVwLT5wb3J0KTsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IGJhdWQsIGJyZzsKKwljaGFubmVsID0gWklMT0dfQ0hBTk5FTF9GUk9NX1BPUlQoJnVwLT5wb3J0KTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisJaWYgKFpTX0lTX0NIQU5ORUxfQSh1cCkpIHsKKwkJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjksIEZIV1JFUyk7CisJCVpTREVMQVlfTE9ORygpOworCQkodm9pZCkgcmVhZF96c3JlZyhjaGFubmVsLCBSMCk7CisJfQogCi0JCWlmIChaU19JU19DSEFOTkVMX0EodXApKSB7Ci0JCQl3cml0ZV96c3JlZyhjaGFubmVsLCBSOSwgRkhXUkVTKTsKLQkJCVpTREVMQVlfTE9ORygpOwotCQkJKHZvaWQpIHJlYWRfenNyZWcoY2hhbm5lbCwgUjApOwotCQl9CisJaWYgKHVwLT5wb3J0LmxpbmUgPT0gS0VZQk9BUkRfTElORSB8fAorCSAgICB1cC0+cG9ydC5saW5lID09IE1PVVNFX0xJTkUpIHsKKwkJc3Vuemlsb2dfaW5pdF9rYmRtcyh1cCwgdXAtPnBvcnQubGluZSk7CisJCXVwLT5jdXJyZWdzW1I5XSB8PSAoTlYgfCBNSUUpOworCQl3cml0ZV96c3JlZyhjaGFubmVsLCBSOSwgdXAtPmN1cnJlZ3NbUjldKTsKKwl9IGVsc2UgeworCQkvKiBOb3JtYWwgc2VyaWFsIFRUWS4gKi8KKwkJdXAtPnBhcml0eV9tYXNrID0gMHhmZjsKKwkJdXAtPmN1cnJlZ3NbUjFdID0gRVhUX0lOVF9FTkFCIHwgSU5UX0FMTF9SeCB8IFR4SU5UX0VOQUI7CisJCXVwLT5jdXJyZWdzW1I0XSA9IFBBUl9FVkVOIHwgWDE2Q0xLIHwgU0IxOworCQl1cC0+Y3VycmVnc1tSM10gPSBSeEVOQUIgfCBSeDg7CisJCXVwLT5jdXJyZWdzW1I1XSA9IFR4RU5BQiB8IFR4ODsKKwkJdXAtPmN1cnJlZ3NbUjldID0gTlYgfCBNSUU7CisJCXVwLT5jdXJyZWdzW1IxMF0gPSBOUlo7CisJCXVwLT5jdXJyZWdzW1IxMV0gPSBUQ0JSIHwgUkNCUjsKKwkJYmF1ZCA9IDk2MDA7CisJCWJyZyA9IEJQU19UT19CUkcoYmF1ZCwgWlNfQ0xPQ0sgLyBaU19DTE9DS19ESVZJU09SKTsKKwkJdXAtPmN1cnJlZ3NbUjEyXSA9IChicmcgJiAweGZmKTsKKwkJdXAtPmN1cnJlZ3NbUjEzXSA9IChicmcgPj4gOCkgJiAweGZmOworCQl1cC0+Y3VycmVnc1tSMTRdID0gQlJTUkMgfCBCUkVOQUI7CisJCV9fbG9hZF96c3JlZ3MoY2hhbm5lbCwgdXAtPmN1cnJlZ3MpOworCQl3cml0ZV96c3JlZyhjaGFubmVsLCBSOSwgdXAtPmN1cnJlZ3NbUjldKTsKKwl9CiAKLQkJaWYgKGkgPT0gS0VZQk9BUkRfTElORSB8fCBpID09IE1PVVNFX0xJTkUpIHsKLQkJCXN1bnppbG9nX2luaXRfa2JkbXModXAsIGkpOwotCQkJdXAtPmN1cnJlZ3NbUjldIHw9IChOViB8IE1JRSk7Ci0JCQl3cml0ZV96c3JlZyhjaGFubmVsLCBSOSwgdXAtPmN1cnJlZ3NbUjldKTsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vcm1hbCBzZXJpYWwgVFRZLiAqLwotCQkJdXAtPnBhcml0eV9tYXNrID0gMHhmZjsKLQkJCXVwLT5jdXJyZWdzW1IxXSA9IEVYVF9JTlRfRU5BQiB8IElOVF9BTExfUnggfCBUeElOVF9FTkFCOwotCQkJdXAtPmN1cnJlZ3NbUjRdID0gUEFSX0VWRU4gfCBYMTZDTEsgfCBTQjE7Ci0JCQl1cC0+Y3VycmVnc1tSM10gPSBSeEVOQUIgfCBSeDg7Ci0JCQl1cC0+Y3VycmVnc1tSNV0gPSBUeEVOQUIgfCBUeDg7Ci0JCQl1cC0+Y3VycmVnc1tSOV0gPSBOViB8IE1JRTsKLQkJCXVwLT5jdXJyZWdzW1IxMF0gPSBOUlo7Ci0JCQl1cC0+Y3VycmVnc1tSMTFdID0gVENCUiB8IFJDQlI7Ci0JCQliYXVkID0gOTYwMDsKLQkJCWJyZyA9IEJQU19UT19CUkcoYmF1ZCwgWlNfQ0xPQ0sgLyBaU19DTE9DS19ESVZJU09SKTsKLQkJCXVwLT5jdXJyZWdzW1IxMl0gPSAoYnJnICYgMHhmZik7Ci0JCQl1cC0+Y3VycmVnc1tSMTNdID0gKGJyZyA+PiA4KSAmIDB4ZmY7Ci0JCQl1cC0+Y3VycmVnc1tSMTRdID0gQlJTUkMgfCBCUkVOQUI7Ci0JCQlfX2xvYWRfenNyZWdzKGNoYW5uZWwsIHVwLT5jdXJyZWdzKTsKLQkJCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFI5LCB1cC0+Y3VycmVnc1tSOV0pOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19TRVJJTwotCQlpZiAoaSA9PSBLRVlCT0FSRF9MSU5FIHx8IGkgPT0gTU9VU0VfTElORSkKLQkJCXN1bnppbG9nX3JlZ2lzdGVyX3NlcmlvKHVwLCBpKTsKKwlpZiAodXAtPnBvcnQubGluZSA9PSBLRVlCT0FSRF9MSU5FIHx8IHVwLT5wb3J0LmxpbmUgPT0gTU9VU0VfTElORSkKKwkJc3Vuemlsb2dfcmVnaXN0ZXJfc2VyaW8odXAsIHVwLT5wb3J0LmxpbmUpOwogI2VuZGlmCi0JfQogfQogCi1zdGF0aWMgc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICogX19pbml0IGdldF96cyhpbnQgY2hpcCwgaW50IG5vZGUpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc3Vuemlsb2dfc2Nhbl9wcm9iZShzdHJ1Y3QgenNfcHJvYmVfc2NhbiAqdCwgaW50IG5vZGUpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB6c19nZXRfaW5zdGFuY2Uoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlzdW56aWxvZ19jaGlwX3JlZ3NbdC0+ZGV2aWNlc10gPSBnZXRfenModC0+ZGV2aWNlcywgbm9kZSk7Ci0JdC0+ZGV2aWNlcysrOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzdW56aWxvZ19wb3J0c19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHpzX3Byb2JlX3NjYW4gc2NhbjsKIAlpbnQgcmV0OwotCWludCB1YXJ0X2NvdW50OwotCWludCBpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIlN1blppbG9nOiAlZCBjaGlwcy5cbiIsIE5VTV9TVU5aSUxPRyk7CisJcmV0ID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAic2xhdmUiLCAtMSk7CisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIHJldDsKIAotCXNjYW4uc2Nhbm5lciA9IHN1bnppbG9nX3NjYW5fcHJvYmU7Ci0Jc2Nhbi5kZXB0aCA9IDA7Ci0Jc2Nhbi5kZXZpY2VzID0gMDsKLQlzdW56aWxvZ19zY2FuKCZzY2FuLCBwcm9tX2dldGNoaWxkKHByb21fcm9vdF9ub2RlKSk7Ci0KLQlzdW56aWxvZ19wcmVwYXJlKCk7Ci0KLQlpZiAocmVxdWVzdF9pcnEoemlsb2dfaXJxLCBzdW56aWxvZ19pbnRlcnJ1cHQsIFNBX1NISVJRLAotCQkJIlN1blppbG9nIiwgc3Vuemlsb2dfaXJxX2NoYWluKSkgewotCQlwcm9tX3ByaW50ZigiU3VuWmlsb2c6IFVuYWJsZSB0byByZWdpc3RlciB6cyBpbnRlcnJ1cHQgaGFuZGxlci5cbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9Ci0KLQlzdW56aWxvZ19pbml0X2h3KCk7Ci0KLQkvKiBXZSBjYW4gb25seSBpbml0IHRoaXMgb25jZSB3ZSBoYXZlIHByb2JlZCB0aGUgWmlsb2dzCi0JICogaW4gdGhlIHN5c3RlbS4gRG8gbm90IGNvdW50IGNoYW5uZWxzIGFzc2lnbmVkIHRvIGtleWJvYXJkcwotCSAqIG9yIG1pY2Ugd2hlbiB3ZSBhcmUgZGVjaWRpbmcgaG93IG1hbnkgcG9ydHMgdG8gcmVnaXN0ZXIuCi0JICovCi0JdWFydF9jb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7Ci0JCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwID0gJnN1bnppbG9nX3BvcnRfdGFibGVbaV07Ci0KLQkJaWYgKFpTX0lTX0tFWUIodXApIHx8IFpTX0lTX01PVVNFKHVwKSkKLQkJCWNvbnRpbnVlOwotCi0JCXVhcnRfY291bnQrKzsKLQl9Ci0JCQotCXN1bnppbG9nX3JlZy5uciA9IHVhcnRfY291bnQ7Ci0Jc3Vuemlsb2dfcmVnLm1pbm9yID0gc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3I7Ci0KLQlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc3Vuemlsb2dfcmVnKTsKLQlpZiAocmV0ID09IDApIHsKLQkJc3Vuemlsb2dfcmVnLnR0eV9kcml2ZXItPm5hbWVfYmFzZSA9IHN1bnppbG9nX3JlZy5taW5vciAtIDY0OwotCQlzdW56aWxvZ19yZWcuY29ucyA9IFNVTlpJTE9HX0NPTlNPTEUoKTsKLQotCQlzdW5zZXJpYWxfY3VycmVudF9taW5vciArPSB1YXJ0X2NvdW50OwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQkJc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAgPSAmc3Vuemlsb2dfcG9ydF90YWJsZVtpXTsKLQotCQkJaWYgKFpTX0lTX0tFWUIodXApIHx8IFpTX0lTX01PVVNFKHVwKSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHVhcnRfYWRkX29uZV9wb3J0KCZzdW56aWxvZ19yZWcsICZ1cC0+cG9ydCkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgIlN1blppbG9nOiBmYWlsZWQgdG8gYWRkIHBvcnQgenMlZFxuIiwgaSk7Ci0JCQl9Ci0JCX0KLQl9CisJaWYgKG9mX2ZpbmRfcHJvcGVydHkoZHAsICJrZXlib2FyZCIsIE5VTEwpKQorCQlyZXQgPSAxOworCWVsc2UKKwkJcmV0ID0gMDsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzdW56aWxvZ19zY2FuX2NvdW50KHN0cnVjdCB6c19wcm9iZV9zY2FuICp0LCBpbnQgbm9kZSkKK3N0YXRpYyBpbnQgemlsb2dfaXJxID0gLTE7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHpzX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7Ci0JdC0+ZGV2aWNlcysrOwotfQorCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKCZkZXYtPmRldik7CisJc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXA7CisJc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICpycDsKKwlpbnQgaW5zdCA9IHpzX2dldF9pbnN0YW5jZShkZXYtPm5vZGUpOworCWludCBlcnI7CiAKLXN0YXRpYyBpbnQgX19pbml0IHN1bnppbG9nX3BvcnRzX2NvdW50KHZvaWQpCi17Ci0Jc3RydWN0IHpzX3Byb2JlX3NjYW4gc2NhbjsKKwlzdW56aWxvZ19jaGlwX3JlZ3NbaW5zdF0gPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgemlsb2dfbGF5b3V0KSwKKwkJCQkJICAgICAgInpzIik7CisJaWYgKCFzdW56aWxvZ19jaGlwX3JlZ3NbaW5zdF0pCisJCXJldHVybiAtRU5PTUVNOwogCi0JLyogU3VuNCBaaWxvZyBzZXR1cCBpcyBoYXJkIGNvZGVkLCBubyBwcm9iaW5nIHRvIGRvLiAgKi8KLQlpZiAoc3BhcmNfY3B1X21vZGVsID09IHN1bjQpCi0JCXJldHVybiAyOworCXJwID0gc3Vuemlsb2dfY2hpcF9yZWdzW2luc3RdOwogCi0Jc2Nhbi5zY2FubmVyID0gc3Vuemlsb2dfc2Nhbl9jb3VudDsKLQlzY2FuLmRlcHRoID0gMDsKLQlzY2FuLmRldmljZXMgPSAwOworCWlmICh6aWxvZ19pcnEgPT0gLTEpIHsKKwkJemlsb2dfaXJxID0gb3AtPmlycXNbMF07CisJCWVyciA9IHJlcXVlc3RfaXJxKHppbG9nX2lycSwgc3Vuemlsb2dfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkgICJ6cyIsIHN1bnppbG9nX2lycV9jaGFpbik7CisJCWlmIChlcnIpIHsKKwkJCW9mX2lvdW5tYXAocnAsIHNpemVvZihzdHJ1Y3Qgemlsb2dfbGF5b3V0KSk7CiAKLQlzdW56aWxvZ19zY2FuKCZzY2FuLCBwcm9tX2dldGNoaWxkKHByb21fcm9vdF9ub2RlKSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQogCi0JcmV0dXJuIHNjYW4uZGV2aWNlczsKLX0KKwl1cCA9ICZzdW56aWxvZ19wb3J0X3RhYmxlW2luc3QgKiAyXTsKIAotc3RhdGljIGludCBfX2luaXQgc3Vuemlsb2dfaW5pdCh2b2lkKQoteworCS8qIENoYW5uZWwgQSAqLworCXVwWzBdLnBvcnQubWFwYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydCArIDB4MDA7CisJdXBbMF0ucG9ydC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKSAmcnAtPmNoYW5uZWxBOworCXVwWzBdLnBvcnQuaW90eXBlID0gVVBJT19NRU07CisJdXBbMF0ucG9ydC5pcnEgPSBvcC0+aXJxc1swXTsKKwl1cFswXS5wb3J0LnVhcnRjbGsgPSBaU19DTE9DSzsKKwl1cFswXS5wb3J0LmZpZm9zaXplID0gMTsKKwl1cFswXS5wb3J0Lm9wcyA9ICZzdW56aWxvZ19wb3BzOworCXVwWzBdLnBvcnQudHlwZSA9IFBPUlRfU1VOWklMT0c7CisJdXBbMF0ucG9ydC5mbGFncyA9IDA7CisJdXBbMF0ucG9ydC5saW5lID0gKGluc3QgKiAyKSArIDA7CisJdXBbMF0ucG9ydC5kZXYgPSAmb3AtPmRldjsKKwl1cFswXS5mbGFncyB8PSBTVU5aSUxPR19GTEFHX0lTX0NIQU5ORUxfQTsKKwlpZiAoaW5zdCA9PSAxKQorCQl1cFswXS5mbGFncyB8PSBTVU5aSUxPR19GTEFHX0NPTlNfS0VZQjsKKwlzdW56aWxvZ19pbml0X2h3KCZ1cFswXSk7CiAKLQlOVU1fU1VOWklMT0cgPSBzdW56aWxvZ19wb3J0c19jb3VudCgpOwotCWlmIChOVU1fU1VOWklMT0cgPT0gMCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogQ2hhbm5lbCBCICovCisJdXBbMV0ucG9ydC5tYXBiYXNlID0gb3AtPnJlc291cmNlWzBdLnN0YXJ0ICsgMHgwNDsKKwl1cFsxXS5wb3J0Lm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopICZycC0+Y2hhbm5lbEI7CisJdXBbMV0ucG9ydC5pb3R5cGUgPSBVUElPX01FTTsKKwl1cFsxXS5wb3J0LmlycSA9IG9wLT5pcnFzWzBdOworCXVwWzFdLnBvcnQudWFydGNsayA9IFpTX0NMT0NLOworCXVwWzFdLnBvcnQuZmlmb3NpemUgPSAxOworCXVwWzFdLnBvcnQub3BzID0gJnN1bnppbG9nX3BvcHM7CisJdXBbMV0ucG9ydC50eXBlID0gUE9SVF9TVU5aSUxPRzsKKwl1cFsxXS5wb3J0LmZsYWdzID0gMDsKKwl1cFsxXS5wb3J0LmxpbmUgPSAoaW5zdCAqIDIpICsgMTsKKwl1cFsxXS5wb3J0LmRldiA9ICZvcC0+ZGV2OworCXVwWzFdLmZsYWdzIHw9IDA7CisJaWYgKGluc3QgPT0gMSkKKwkJdXBbMV0uZmxhZ3MgfD0gU1VOWklMT0dfRkxBR19DT05TX01PVVNFOworCXN1bnppbG9nX2luaXRfaHcoJnVwWzFdKTsKIAotCXN1bnppbG9nX2FsbG9jX3RhYmxlcygpOworCWlmIChpbnN0ICE9IDEpIHsKKwkJZXJyID0gdWFydF9hZGRfb25lX3BvcnQoJnN1bnppbG9nX3JlZywgJnVwWzBdLnBvcnQpOworCQlpZiAoZXJyKSB7CisJCQlvZl9pb3VubWFwKHJwLCBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc3Vuemlsb2dfcmVnLCAmdXBbMV0ucG9ydCk7CisJCWlmIChlcnIpIHsKKwkJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW56aWxvZ19yZWcsICZ1cFswXS5wb3J0KTsKKwkJCW9mX2lvdW5tYXAocnAsIHNpemVvZihzdHJ1Y3Qgemlsb2dfbGF5b3V0KSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQogCi0Jc3Vuemlsb2dfcG9ydHNfaW5pdCgpOworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsICZ1cFswXSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHN1bnppbG9nX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB6c19yZW1vdmVfb25lKHN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7Ci0JCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwID0gJnN1bnppbG9nX3BvcnRfdGFibGVbaV07Ci0KLQkJaWYgKFpTX0lTX0tFWUIodXApIHx8IFpTX0lTX01PVVNFKHVwKSkgeworCWlmIChaU19JU19LRVlCKHVwKSB8fCBaU19JU19NT1VTRSh1cCkpIHsKICNpZmRlZiBDT05GSUdfU0VSSU8KLQkJCWlmICh1cC0+c2VyaW8pIHsKLQkJCQlzZXJpb191bnJlZ2lzdGVyX3BvcnQodXAtPnNlcmlvKTsKLQkJCQl1cC0+c2VyaW8gPSBOVUxMOwotCQkJfQorCQlzZXJpb191bnJlZ2lzdGVyX3BvcnQoJnVwLT5zZXJpbyk7CiAjZW5kaWYKLQkJfSBlbHNlCi0JCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3Vuemlsb2dfcmVnLCAmdXAtPnBvcnQpOworCX0gZWxzZQorCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3Vuemlsb2dfcmVnLCAmdXAtPnBvcnQpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB6c19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICpyZWdzOworCisJenNfcmVtb3ZlX29uZSgmdXBbMF0pOworCXpzX3JlbW92ZV9vbmUoJnVwWzFdKTsKKworCXJlZ3MgPSBzdW56aWxvZ19jaGlwX3JlZ3NbdXBbMF0ucG9ydC5saW5lIC8gMl07CisJb2ZfaW91bm1hcChyZWdzLCBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCkpOworCisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgenNfbWF0Y2hbXSA9IHsKKwl7CisJCS5uYW1lID0gInpzIiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpzX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgenNfZHJpdmVyID0geworCS5uYW1lCQk9ICJ6cyIsCisJLm1hdGNoX3RhYmxlCT0genNfbWF0Y2gsCisJLnByb2JlCQk9IHpzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoenNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN1bnppbG9nX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOworCWludCBlcnI7CisKKwlOVU1fU1VOWklMT0cgPSAwOworCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgInpzIikKKwkJTlVNX1NVTlpJTE9HKys7CisKKwlpZiAoTlVNX1NVTlpJTE9HKSB7CisJCWludCB1YXJ0X2NvdW50OworCisJCWVyciA9IHN1bnppbG9nX2FsbG9jX3RhYmxlcygpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQkvKiBTdWJ0cmFjdCAxIGZvciBrZXlib2FyZCwgMSBmb3IgbW91c2UuICAqLworCQl1YXJ0X2NvdW50ID0gKE5VTV9TVU5aSUxPRyAqIDIpIC0gMjsKKworCQlzdW56aWxvZ19yZWcubnIgPSB1YXJ0X2NvdW50OworCQlzdW56aWxvZ19yZWcubWlub3IgPSBzdW5zZXJpYWxfY3VycmVudF9taW5vcjsKKwkJZXJyID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnN1bnppbG9nX3JlZyk7CisJCWlmIChlcnIpIHsKKwkJCXN1bnppbG9nX2ZyZWVfdGFibGVzKCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXN1bnppbG9nX3JlZy50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgPSBzdW56aWxvZ19yZWcubWlub3IgLSA2NDsKKwkJc3Vuemlsb2dfcmVnLmNvbnMgPSBTVU5aSUxPR19DT05TT0xFKCk7CisKKwkJc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgKz0gdWFydF9jb3VudDsKIAl9CiAKLQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzdW56aWxvZ19yZWcpOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnpzX2RyaXZlciwgJm9mX2J1c190eXBlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN1bnppbG9nX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX2RyaXZlcigmenNfZHJpdmVyKTsKKworCWlmICh6aWxvZ19pcnEgIT0gLTEpIHsKKwkJZnJlZV9pcnEoemlsb2dfaXJxLCBzdW56aWxvZ19pcnFfY2hhaW4pOworCQl6aWxvZ19pcnEgPSAtMTsKKwl9CisKKwlpZiAoTlVNX1NVTlpJTE9HKSB7CisJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnN1bnppbG9nX3JlZyk7CisJCXN1bnppbG9nX2ZyZWVfdGFibGVzKCk7CisJfQogfQogCiBtb2R1bGVfaW5pdChzdW56aWxvZ19pbml0KTsKQEAgLTE3NzAsNCArMTUxNCw1IEBACiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW4gWmlsb2cgc2VyaWFsIHBvcnQgZHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTigiMi4wIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC92ODUwZV91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC92ODUwZV91YXJ0LmMKaW5kZXggZGY3MDVmZC4uZjgwMjg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdjg1MGVfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3Y4NTBlX3VhcnQuYwpAQCAtMzcyLDEzICszNzIsMTMgQEAKIAogCS8qIEFsbG9jIFJYIGlycS4gICovCiAJZXJyID0gcmVxdWVzdF9pcnEgKFY4NTBFX1VBUlRfUlhfSVJRIChwb3J0LT5saW5lKSwgdjg1MGVfdWFydF9yeF9pcnEsCi0JCQkgICBTQV9JTlRFUlJVUFQsICJ2ODUwZV91YXJ0IiwgcG9ydCk7CisJCQkgICBJUlFGX0RJU0FCTEVELCAidjg1MGVfdWFydCIsIHBvcnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAkvKiBBbGxvYyBUWCBpcnEuICAqLwogCWVyciA9IHJlcXVlc3RfaXJxIChWODUwRV9VQVJUX1RYX0lSUSAocG9ydC0+bGluZSksIHY4NTBlX3VhcnRfdHhfaXJxLAotCQkJICAgU0FfSU5URVJSVVBULCAidjg1MGVfdWFydCIsIHBvcnQpOworCQkJICAgSVJRRl9ESVNBQkxFRCwgInY4NTBlX3VhcnQiLCBwb3J0KTsKIAlpZiAoZXJyKSB7CiAJCWZyZWVfaXJxIChWODUwRV9VQVJUX1JYX0lSUSAocG9ydC0+bGluZSksIHBvcnQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNDY4LDcgKzQ2OCw2IEBACiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHY4NTBlX3VhcnRfZHJpdmVyID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lCQk9ICJ2ODUwZV91YXJ0IiwKLQkuZGV2ZnNfbmFtZQkJPSAidHRzLyIsCiAJLmRldl9uYW1lCQk9ICJ0dHlTIiwKIAkubWFqb3IJCQk9IFRUWV9NQUpPUiwKIAkubWlub3IJCQk9IFY4NTBFX1VBUlRfTUlOT1JfQkFTRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwppbmRleCBkZjVlODcxLi5lOTNkMGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9WUjQxWFhfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCiAjZGVmaW5lIFNVUFBPUlRfU1lTUlEKQEAgLTkxMSw3ICs5MTAsNiBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZHJpdmVyX25hbWUJPSAiU0lVIiwKIAkuZGV2X25hbWUJPSAidHR5VlIiLAotCS5kZXZmc19uYW1lCT0gInR0dnIvIiwKIAkubWFqb3IJCT0gU0lVX01BSk9SLAogCS5taW5vcgkJPSBTSVVfTUlOT1JfQkFTRSwKIAkuY29ucwkJPSBTRVJJQUxfVlI0MVhYX0NPTlNPTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL2lvYzMuYyBiL2RyaXZlcnMvc24vaW9jMy5jCmluZGV4IGVkOTQ2MzEuLjZjN2UwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc24vaW9jMy5jCisrKyBiL2RyaXZlcnMvc24vaW9jMy5jCkBAIC03LDcgKzcsNiBAQAogICogICBQYXQgR2VmcmUgPHBmZ0BzZ2kuY29tPiAtIElPQzMgc2VyaWFsIHBvcnQgSVJRIGRlbXV4ZXIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTcwNyw3ICs3MDYsNyBAQAogCQl3cml0ZWwofjAsICZpZGQtPnZtYS0+ZWlzcik7CiAKIAkJaWRkLT5kdWFsX2lycSA9IDE7Ci0JCWlmICghcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpb2MzX2ludHJfZXRoLCBTQV9TSElSUSwKKwkJaWYgKCFyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGlvYzNfaW50cl9ldGgsIElSUUZfU0hBUkVELAogCQkJCSAiaW9jMy1ldGgiLCAodm9pZCAqKWlkZCkpIHsKIAkJCWlkZC0+aXJxX2V0aCA9IHBkZXYtPmlycTsKIAkJfSBlbHNlIHsKQEAgLTcxNSw3ICs3MTQsNyBAQAogCQkJICAgICAgICIlcyA6IHJlcXVlc3RfaXJxIGZhaWxzIGZvciBJUlEgMHgleFxuICIsCiAJCQkgICAgICAgX19GVU5DVElPTl9fLCBwZGV2LT5pcnEpOwogCQl9Ci0JCWlmICghcmVxdWVzdF9pcnEocGRldi0+aXJxKzIsIGlvYzNfaW50cl9pbywgU0FfU0hJUlEsCisJCWlmICghcmVxdWVzdF9pcnEocGRldi0+aXJxKzIsIGlvYzNfaW50cl9pbywgSVJRRl9TSEFSRUQsCiAJCQkJICJpb2MzLWlvIiwgKHZvaWQgKilpZGQpKSB7CiAJCQlpZGQtPmlycV9pbyA9IHBkZXYtPmlycSsyOwogCQl9IGVsc2UgewpAQCAtNzI0LDcgKzcyMyw3IEBACiAJCQkgICAgICAgX19GVU5DVElPTl9fLCBwZGV2LT5pcnErMik7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoIXJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaW9jM19pbnRyX2lvLCBTQV9TSElSUSwKKwkJaWYgKCFyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGlvYzNfaW50cl9pbywgSVJRRl9TSEFSRUQsCiAJCQkJICJpb2MzIiwgKHZvaWQgKilpZGQpKSB7CiAJCQlpZGQtPmlycV9pbyA9IHBkZXYtPmlycTsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc24vaW9jNC5jIGIvZHJpdmVycy9zbi9pb2M0LmMKaW5kZXggODI1NmE5Ny4uODU2MjgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zbi9pb2M0LmMKKysrIGIvZHJpdmVycy9zbi9pb2M0LmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCXswfQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIF9fZGV2aW5pdGRhdGEgaW9jNF9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaW9jNF9kcml2ZXIgPSB7CiAJLm5hbWUgPSAiSU9DNCIsCiAJLmlkX3RhYmxlID0gaW9jNF9pZF90YWJsZSwKIAkucHJvYmUgPSBpb2M0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCAxY2VhNGE2Li4xNDYyOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtMjEwLDYgKzIxMCw3IEBACiAJcHJveHktPm1hc3RlciA9IG1hc3RlcjsKIAlwcm94eS0+Y2hpcF9zZWxlY3QgPSBjaGlwLT5jaGlwX3NlbGVjdDsKIAlwcm94eS0+bWF4X3NwZWVkX2h6ID0gY2hpcC0+bWF4X3NwZWVkX2h6OworCXByb3h5LT5tb2RlID0gY2hpcC0+bW9kZTsKIAlwcm94eS0+aXJxID0gY2hpcC0+aXJxOwogCXByb3h5LT5tb2RhbGlhcyA9IGNoaXAtPm1vZGFsaWFzOwogCkBAIC01MDksNyArNTEwLDcgQEAKICAqLwogaW50IHNwaV9zeW5jKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSkKIHsKLQlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CiAJaW50IHN0YXR1czsKIAogCW1lc3NhZ2UtPmNvbXBsZXRlID0gc3BpX2NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYyBiL2RyaXZlcnMvc3BpL3NwaV9iaXRiYW5nLmMKaW5kZXggZGQyZjk1MC4uYTIzODYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JpdGJhbmcuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYml0YmFuZy5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jIGIvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jCmluZGV4IGEwMDZhMWUuLjM5ZDliMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9idXR0ZXJmbHkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYnV0dGVyZmx5LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90Yy9sazIwMS5jIGIvZHJpdmVycy90Yy9sazIwMS5jCmluZGV4IGNmMTBkNWMuLjc1N2RlYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGMvbGsyMDEuYworKysgYi9kcml2ZXJzL3RjL2xrMjAxLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgIE1hY2llaiBXLiBSb3p5Y2tpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90Yy96cy5jIGIvZHJpdmVycy90Yy96cy5jCmluZGV4IDJkZmZhOGUuLjVlOGEyNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGMvenMuYworKysgYi9kcml2ZXJzL3RjL3pzLmMKQEAgLTM5LDcgKzM5LDYgQEAKICAqICAgICBpcyBzaGFyZWQgd2l0aCBEU1JTKERURSkgYXQgcGluIDIzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0xNzQ1LDcgKzE3NDQsNiBAQAogCS8qIE5vdCBhbGwgb2YgdGhpcyBpcyBleGFjdGx5IHJpZ2h0IGZvciB1cy4gKi8KIAogCXNlcmlhbF9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0Jc2VyaWFsX2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ0dHMvIjsKIAlzZXJpYWxfZHJpdmVyLT5uYW1lID0gInR0eVMiOwogCXNlcmlhbF9kcml2ZXItPm1ham9yID0gVFRZX01BSk9SOwogCXNlcmlhbF9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gNjQ7CkBAIC0xNzU0LDcgKzE3NTIsNyBAQAogCXNlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9CiAJCUI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLQlzZXJpYWxfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCXNlcmlhbF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CiAJdHR5X3NldF9vcGVyYXRpb25zKHNlcmlhbF9kcml2ZXIsICZzZXJpYWxfb3BzKTsKIAogCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKQpAQCAtMTc5Myw3ICsxNzkxLDcgQEAKIAkJenNfc29mdFtjaGFubmVsXS5jbGtfZGl2aXNvciA9IDE2OwogCQl6c19zb2Z0W2NoYW5uZWxdLnpzX2JhdWQgPSBnZXRfenNiYXVkKCZ6c19zb2Z0W2NoYW5uZWxdKTsKIAotCQlpZiAocmVxdWVzdF9pcnEoenNfc29mdFtjaGFubmVsXS5pcnEsIHJzX2ludGVycnVwdCwgU0FfU0hJUlEsCisJCWlmIChyZXF1ZXN0X2lycSh6c19zb2Z0W2NoYW5uZWxdLmlycSwgcnNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkic2NjIiwgJnpzX3NvZnRbY2hhbm5lbF0pKQogCQkJcHJpbnRrKEtFUk5fRVJSICJkZWNzZXJpYWw6IGNhbid0IGdldCBpcnEgJWRcbiIsCiAJCQkgICAgICAgenNfc29mdFtjaGFubmVsXS5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYyBiL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMKaW5kZXggZTE2NmZmZi4uZTQxZjQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYworKysgYi9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBQSE9ORV9OVU1fREVWSUNFUwkyNTYKQEAgLTEwNiw4ICsxMDUsNiBAQAogCQlpZiAocGhvbmVfZGV2aWNlW2ldID09IE5VTEwpIHsKIAkJCXBob25lX2RldmljZVtpXSA9IHA7CiAJCQlwLT5taW5vciA9IGk7Ci0JCQlkZXZmc19ta19jZGV2KE1LREVWKFBIT05FX01BSk9SLGkpLAotCQkJCVNfSUZDSFJ8U19JUlVTUnxTX0lXVVNSLCAicGhvbmUvJWQiLCBpKTsKIAkJCW11dGV4X3VubG9jaygmcGhvbmVfbG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTI1LDcgKzEyMiw2IEBACiAJbXV0ZXhfbG9jaygmcGhvbmVfbG9jayk7CiAJaWYgKHBob25lX2RldmljZVtwZmQtPm1pbm9yXSAhPSBwZmQpCiAJCXBhbmljKCJwaG9uZTogYmFkIHVucmVnaXN0ZXIiKTsKLQlkZXZmc19yZW1vdmUoInBob25lLyVkIiwgcGZkLT5taW5vcik7CiAJcGhvbmVfZGV2aWNlW3BmZC0+bWlub3JdID0gTlVMTDsKIAltdXRleF91bmxvY2soJnBob25lX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGQ0MWRjNjcuLjM2NzBkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTExNDUsMTIgKzExNDUsMTEgQEAKIAlhY21fdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRSwKIAlhY21fdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSAiYWNtIiwKIAlhY21fdHR5X2RyaXZlci0+bmFtZSA9ICJ0dHlBQ00iLAotCWFjbV90dHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInVzYi9hY20vIiwKIAlhY21fdHR5X2RyaXZlci0+bWFqb3IgPSBBQ01fVFRZX01BSk9SLAogCWFjbV90dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IDAsCiAJYWNtX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMLAogCWFjbV90dHlfZHJpdmVyLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMLAotCWFjbV90dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTLAorCWFjbV90dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCWFjbV90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CiAJYWNtX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhhY21fdHR5X2RyaXZlciwgJmFjbV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKaW5kZXggYWQ3NDJjZS4uZjRmNGVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2J1ZmZlci5jCkBAIC01LDcgKzUsNiBAQAogICogYW5kIHNob3VsZCB3b3JrIHdpdGggYWxsIFVTQiBjb250cm9sbGVycywgcmVnYXJkbGVzIG9mIGJ1cyB0eXBlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jIGIvZHJpdmVycy91c2IvY29yZS9jb25maWcuYwppbmRleCBhOWQ4OWM3Li40YzllNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IGJjYmVhZjcuLmY3YmRkOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC02OCw2ICs2OSw3IEBACiAJdm9pZCBfX3VzZXIgKnVzZXJidWZmZXI7CiAJdm9pZCBfX3VzZXIgKnVzZXJ1cmI7CiAJc3RydWN0IHVyYiAqdXJiOworCXUzMiBzZWNpZDsKIH07CiAKIHN0YXRpYyBpbnQgdXNiZnNfc25vb3AgPSAwOwpAQCAtMzEyLDcgKzMxNCw3IEBACiAJCXNpbmZvLnNpX2NvZGUgPSBTSV9BU1lOQ0lPOwogCQlzaW5mby5zaV9hZGRyID0gYXMtPnVzZXJ1cmI7CiAJCWtpbGxfcHJvY19pbmZvX2FzX3VpZChhcy0+c2lnbnIsICZzaW5mbywgYXMtPnBpZCwgYXMtPnVpZCwgCi0JCQkJICAgICAgYXMtPmV1aWQpOworCQkJCSAgICAgIGFzLT5ldWlkLCBhcy0+c2VjaWQpOwogCX0KIAlzbm9vcCgmdXJiLT5kZXYtPmRldiwgInVyYiBjb21wbGV0ZVxuIik7CiAJc25vb3BfdXJiKHVyYiwgYXMtPnVzZXJ1cmIpOwpAQCAtNTcyLDYgKzU3NCw3IEBACiAJcHMtPmRpc2NfZXVpZCA9IGN1cnJlbnQtPmV1aWQ7CiAJcHMtPmRpc2Njb250ZXh0ID0gTlVMTDsKIAlwcy0+aWZjbGFpbWVkID0gMDsKKwlzZWN1cml0eV90YXNrX2dldHNlY2lkKGN1cnJlbnQsICZwcy0+c2VjaWQpOwogCXdtYigpOwogCWxpc3RfYWRkX3RhaWwoJnBzLT5saXN0LCAmZGV2LT5maWxlbGlzdCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHM7CkBAIC0xMDUzLDYgKzEwNTYsNyBAQAogCWFzLT5waWQgPSBjdXJyZW50LT5waWQ7CiAJYXMtPnVpZCA9IGN1cnJlbnQtPnVpZDsKIAlhcy0+ZXVpZCA9IGN1cnJlbnQtPmV1aWQ7CisJc2VjdXJpdHlfdGFza19nZXRzZWNpZChjdXJyZW50LCAmYXMtPnNlY2lkKTsKIAlpZiAoISh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pKSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcihhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIsIHV1cmItPmJ1ZmZlciwgYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkpIHsKIAkJCWZyZWVfYXN5bmMoYXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggYzE5NmYzOC4uZWM4OTA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlICJoY2QuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKaW5kZXggZjY1YjE5M2MuLmFiZWUwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDY2Yjc4NDAuLjUwNzhmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0xMjYsNyArMTI1LDcgQEAKIAogCXBjaV9zZXRfbWFzdGVyIChkZXYpOwogCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QgKGhjZCwgZGV2LT5pcnEsIFNBX1NISVJRKTsKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZCAoaGNkLCBkZXYtPmlycSwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI0OwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA0YmY5MTRkLi5mYjRkMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBlMTczMWZmLi44NzU1OTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTgsNyArOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IGJmYzliMjguLmY0OGMzZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTI3LDcgKzI3LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtMjAxLDcgKzIwMCw3IEBACiAJaWYgKCFyb290KQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZyb290LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7CiAJCWlmIChidXMtPmRfaW5vZGUpIHsKQEAgLTUyOCw3ICs1MjcsNyBAQAogCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCWlmICh1c2Jmc19wb3NpdGl2ZShkZW50cnkpKSB7CiAJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKIAkJCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKQEAgLTcwMCw3ICs2OTksNyBAQAogCQkJc2luZm8uc2lfZXJybm8gPSBFUElQRTsKIAkJCXNpbmZvLnNpX2NvZGUgPSBTSV9BU1lOQ0lPOwogCQkJc2luZm8uc2lfYWRkciA9IGRzLT5kaXNjY29udGV4dDsKLQkJCWtpbGxfcHJvY19pbmZvX2FzX3VpZChkcy0+ZGlzY3NpZ25yLCAmc2luZm8sIGRzLT5kaXNjX3BpZCwgZHMtPmRpc2NfdWlkLCBkcy0+ZGlzY19ldWlkKTsKKwkJCWtpbGxfcHJvY19pbmZvX2FzX3VpZChkcy0+ZGlzY3NpZ25yLCAmc2luZm8sIGRzLT5kaXNjX3BpZCwgZHMtPmRpc2NfdWlkLCBkcy0+ZGlzY19ldWlkLCBkcy0+c2VjaWQpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCA4NTY5NjAwLi40Y2M4ZDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtMiw3ICsyLDYgQEAKICAqIG1lc3NhZ2UuYyAtIHN5bmNocm9ub3VzIG1lc3NhZ2UgaGFuZGxpbmcKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CS8qIGZvciBzY2F0dGVybGlzdCBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbm90aWZ5LmMgYi9kcml2ZXJzL3VzYi9jb3JlL25vdGlmeS5jCmluZGV4IGZlMGVkNTQuLmIwNDI2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbm90aWZ5LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYwpAQCAtOSw3ICs5LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDNmNDliZjUuLmRlYzk3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlICJ1c2IuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IGRhZDRkOGYuLjk4NjQ5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IGZiNDg4YzguLjE4NGMyNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMjEsNyArMjEsNiBAQAogICogYXJlIGV2aWwuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuaCBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKaW5kZXggN2E2NTBjNy4uNDlmNjkyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCkBAIC04MCw2ICs4MCw3IEBACiAJdWlkX3QgZGlzY191aWQsIGRpc2NfZXVpZDsKIAl2b2lkIF9fdXNlciAqZGlzY2NvbnRleHQ7CiAJdW5zaWduZWQgbG9uZyBpZmNsYWltZWQ7CisJdTMyIHNlY2lkOwogfTsKIAogLyogaW50ZXJuYWwgbm90aWZ5IHN0dWZmICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IGI4ZDBiNzguLjFjNDU5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjdW5kZWYJVkVSQk9TRQogI3VuZGVmCVBBQ0tFVF9UUkFDRQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0xNjU0LDEzICsxNjUzLDEzIEBACiAJcHVsbHVwKHVkYywgMCk7CiAKIAkvKiByZXF1ZXN0IFVEQyBhbmQgbWF5YmUgVkJVUyBpcnFzICovCi0JaWYgKHJlcXVlc3RfaXJxKEFUOTFfSURfVURQLCBhdDkxX3VkY19pcnEsIFNBX0lOVEVSUlVQVCwgZHJpdmVyX25hbWUsIHVkYykpIHsKKwlpZiAocmVxdWVzdF9pcnEoQVQ5MV9JRF9VRFAsIGF0OTFfdWRjX2lycSwgSVJRRl9ESVNBQkxFRCwgZHJpdmVyX25hbWUsIHVkYykpIHsKIAkJREJHKCJyZXF1ZXN0IGlycSAlZCBmYWlsZWRcbiIsIEFUOTFfSURfVURQKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGZhaWwxOwogCX0KIAlpZiAodWRjLT5ib2FyZC52YnVzX3BpbiA+IDApIHsKLQkJaWYgKHJlcXVlc3RfaXJxKHVkYy0+Ym9hcmQudmJ1c19waW4sIGF0OTFfdmJ1c19pcnEsIFNBX0lOVEVSUlVQVCwgZHJpdmVyX25hbWUsIHVkYykpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKHVkYy0+Ym9hcmQudmJ1c19waW4sIGF0OTFfdmJ1c19pcnEsIElSUUZfRElTQUJMRUQsIGRyaXZlcl9uYW1lLCB1ZGMpKSB7CiAJCQlEQkcoInJlcXVlc3QgdmJ1cyBpcnEgJWQgZmFpbGVkXG4iLCB1ZGMtPmJvYXJkLnZidXNfcGluKTsKIAkJCWZyZWVfaXJxKEFUOTFfSURfVURQLCB1ZGMpOwogCQkJcmV0dmFsID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDQyY2U0MWQuLjRiZTQ3MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTM2LDcgKzM2LDYgQEAKIAogI2RlZmluZSBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMDc4ZGFhMC4uODMyMGZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTIzLDcgKzIzLDYgQEAKIC8vICNkZWZpbmUgREVCVUcgMQogLy8gI2RlZmluZSBWRVJCT1NFCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IGE0M2RjOTAuLmIxYTljZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTIyMSw3ICsyMjEsNiBAQAogI3VuZGVmIFZFUkJPU0UKICN1bmRlZiBEVU1QX01TR1MKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDUzNzhjMTcuLjdjZjI5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0yNCw3ICsyNCw2IEBACiAvLyAjZGVmaW5lCVZFUkJPU0UJCS8qIGV4dHJhIGRlYnVnIG1lc3NhZ2VzIChzdWNjZXNzIHRvbykgKi8KIC8vICNkZWZpbmUJVVNCX1RSQUNFCS8qIHBhY2tldC1sZXZlbCBzdWNjZXNzIG1lc3NhZ2VzICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTE5MTcsNyArMTkxNiw3IEBACiAJLyogaW5pdCB0byBrbm93biBzdGF0ZSwgdGhlbiBzZXR1cCBpcnFzICovCiAJdWRjX3Jlc2V0KGRldik7CiAJdWRjX3JlaW5pdCAoZGV2KTsKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBnb2t1X2lycSwgU0FfU0hJUlEvKnxTQV9TQU1QTEVfUkFORE9NKi8sCisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZ29rdV9pcnEsIElSUUZfU0hBUkVELyp8SVJRRl9TQU1QTEVfUkFORE9NKi8sCiAJCQlkcml2ZXJfbmFtZSwgZGV2KSAhPSAwKSB7CiAJCURCRyhkZXYsICJyZXF1ZXN0IGludGVycnVwdCAlZCBmYWlsZWRcbiIsIHBkZXYtPmlycSk7CiAJCXJldHZhbCA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggMGQzNDI0ZS4uYmIyMmI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTIxMDcsNyArMjEwNyw3IEBACiAKIAkvKiBpcnEgc2V0dXAgYWZ0ZXIgb2xkIGhhcmR3YXJlIHN0YXRlIGlzIGNsZWFuZWQgdXAgKi8KIAlyZXR2YWwgPQotCSAgICByZXF1ZXN0X2lycShJUlFfVVNCSU5UUiwgbGg3YTQweF91ZGNfaXJxLCBTQV9JTlRFUlJVUFQsIGRyaXZlcl9uYW1lLAorCSAgICByZXF1ZXN0X2lycShJUlFfVVNCSU5UUiwgbGg3YTQweF91ZGNfaXJxLCBJUlFGX0RJU0FCTEVELCBkcml2ZXJfbmFtZSwKIAkJCWRldik7CiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCURFQlVHKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLCBkcml2ZXJfbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKaW5kZXggOWIyZTZmNy4uZTNiYjc4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZm5kZWYgX19MSDdBNDBYX0hfCiAjZGVmaW5lIF9fTEg3QTQwWF9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAxZmFjZGVhLi4wOTI0MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICN1bmRlZglERUJVRwkJLyogbWVzc2FnZXMgb24gZXJyb3IgYW5kIG1vc3QgZmF1bHQgcGF0aHMgKi8KICN1bmRlZglWRVJCT1NFCQkvKiBleHRyYSBkZWJ1ZyBtZXNzYWdlcyAoc3VjY2VzcyB0b28pICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtMjg5Niw3ICsyODk1LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycSAocGRldi0+aXJxLCBuZXQyMjgwX2lycSwgU0FfU0hJUlEsIGRyaXZlcl9uYW1lLCBkZXYpCisJaWYgKHJlcXVlc3RfaXJxIChwZGV2LT5pcnEsIG5ldDIyODBfaXJxLCBJUlFGX1NIQVJFRCwgZHJpdmVyX25hbWUsIGRldikKIAkJCSE9IDApIHsKIAkJRVJST1IgKGRldiwgInJlcXVlc3QgaW50ZXJydXB0ICVkIGZhaWxlZFxuIiwgcGRldi0+aXJxKTsKIAkJcmV0dmFsID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwppbmRleCBmYmVhNTE0Li4yZGU5NzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpAQCAtMjIsNyArMjIsNiBAQAogI3VuZGVmCURFQlVHCiAjdW5kZWYJVkVSQk9TRQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC03NzMsNyArNzcyLDcgQEAKIAlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBkYXRhOwogCiAJLyogaWYgY2hfc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEgLi4uICovCi0JLyogaWYgY2hfc3RhdHVzICYgT01BUF9ETUFfVE9VVF9JUlEgLi4uICovCisJLyogaWYgY2hfc3RhdHVzICYgT01BUDFfRE1BX1RPVVRfSVJRIC4uLiAqLwogCUVSUigiJXMgZG1hIGVycm9yLCBsY2ggJWQgc3RhdHVzICUwMnhcbiIsIGVwLT5lcC5uYW1lLCBsY2gsIGNoX3N0YXR1cyk7CiAKIAkvKiBjb21wbGV0ZSBjdXJyZW50IHRyYW5zZmVyIC4uLiAqLwpAQCAtMjgxOSw3ICsyODE4LDcgQEAKIAogCS8qIFVTQiBnZW5lcmFsIHB1cnBvc2UgSVJROiAgZXAwLCBzdGF0ZSBjaGFuZ2VzLCBkbWEsIGV0YyAqLwogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBvbWFwX3VkY19pcnEsCi0JCQlTQV9TQU1QTEVfUkFORE9NLCBkcml2ZXJfbmFtZSwgdWRjKTsKKwkJCUlSUUZfU0FNUExFX1JBTkRPTSwgZHJpdmVyX25hbWUsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCUVSUiggImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCiAJCQlwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgc3RhdHVzKTsKQEAgLTI4MjgsNyArMjgyNyw3IEBACiAKIAkvKiBVU0IgIm5vbi1pc28iIElSUSAoUElPIGZvciBhbGwgYnV0IGVwMCkgKi8KIAlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgb21hcF91ZGNfcGlvX2lycSwKLQkJCVNBX1NBTVBMRV9SQU5ET00sICJvbWFwX3VkYyBwaW8iLCB1ZGMpOworCQkJSVJRRl9TQU1QTEVfUkFORE9NLCAib21hcF91ZGMgcGlvIiwgdWRjKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKIAkJCXBkZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBzdGF0dXMpOwpAQCAtMjgzNiw3ICsyODM1LDcgQEAKIAl9CiAjaWZkZWYJVVNFX0lTTwogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBvbWFwX3VkY19pc29faXJxLAotCQkJU0FfSU5URVJSVVBULCAib21hcF91ZGMgaXNvIiwgdWRjKTsKKwkJCUlSUUZfRElTQUJMRUQsICJvbWFwX3VkYyBpc28iLCB1ZGMpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlFUlIoImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCiAJCQlwZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCmluZGV4IDI2OWNlN2YuLmZmZjAyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMjcsNyArMjcsNiBAQAogI3VuZGVmCURFQlVHCiAvLyAjZGVmaW5lCVZFUkJPU0UJREJHX1ZFUkJPU0UKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtNjAsNyArNTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CiAKLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS9pbnRlbF91ZGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KIAogCiAvKgpAQCAtMjUyMiw3ICsyNTIxLDcgQEAKIAogCS8qIGlycSBzZXR1cCBhZnRlciBvbGQgaGFyZHdhcmUgc3RhdGUgaXMgY2xlYW5lZCB1cCAqLwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKElSUV9VU0IsIHB4YTJ4eF91ZGNfaXJxLAotCQkJU0FfSU5URVJSVVBULCBkcml2ZXJfbmFtZSwgZGV2KTsKKwkJCUlSUUZfRElTQUJMRUQsIGRyaXZlcl9uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgaXJxICVpLCBlcnIgJWRcbiIsCiAJCQlkcml2ZXJfbmFtZSwgSVJRX1VTQiwgcmV0dmFsKTsKQEAgLTI1MzQsNyArMjUzMyw3IEBACiAJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7CiAJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLAogCQkJCWx1YmJvY2tfdmJ1c19pcnEsCi0JCQkJU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAogCQkJCWRyaXZlcl9uYW1lLCBkZXYpOwogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKQEAgLTI1NDUsNyArMjU0NCw3IEBACiAJCX0KIAkJcmV0dmFsID0gcmVxdWVzdF9pcnEoTFVCQk9DS19VU0JfSVJRLAogCQkJCWx1YmJvY2tfdmJ1c19pcnEsCi0JCQkJU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAogCQkJCWRyaXZlcl9uYW1lLCBkZXYpOwogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggM2ZmNmRiNy4uMzU0NjcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCQl1cGRhdGVzIHRvIG1lcmdlIHdpdGggTGludXggMi42LCBiZXR0ZXIgbWF0Y2ggUk5ESVMgc3BlYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IDlkNmUxZDIuLjMwZDc2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01ODgsMTIgKzU4NywxMSBAQAogCWdzX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJZ3NfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSBHU19TSE9SVF9OQU1FOwogCWdzX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5Z3MiOwotCWdzX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL3R0eWdzLyI7CiAJZ3NfdHR5X2RyaXZlci0+bWFqb3IgPSBHU19NQUpPUjsKIAlnc190dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IEdTX01JTk9SX1NUQVJUOwogCWdzX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwogCWdzX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JZ3NfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlnc190dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKIAl0dHlfc2V0X29wZXJhdGlvbnMoZ3NfdHR5X2RyaXZlciwgJmdzX3R0eV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKaW5kZXggNjhlM2Q4Zi4uM2EwOGE3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtNjIsNyArNjIsNiBAQAogI2RlZmluZSBERUJVRyAxCiAvLyAjZGVmaW5lIFZFUkJPU0UKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggOWI0Njk3YS4uZDY2ODY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJLyogZWhjaV9oY2RfaW5pdChoY2RfdG9fZWhjaShoY2QpKTsgKi8KIAogCXJldHZhbCA9Ci0JICAgIHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEpOworCSAgICB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKaW5kZXggYTQ5YTY4OS4uZDAzMDUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJdGVtcCA9IGluX2xlMzIoaGNkLT5yZWdzICsgMHgxYTgpOwogCW91dF9sZTMyKGhjZC0+cmVncyArIDB4MWE4LCB0ZW1wIHwgMHgzKTsKIAotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9TSElSUSk7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfU0hBUkVEKTsKIAlpZiAocmV0dmFsICE9IDApCiAJCWdvdG8gZXJyNDsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDliMzdlNTAuLmNlZTZmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCmluZGV4IDRhMjI5MDkuLjYxZTU3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggMTQzODYyNS4uNTE0N2VkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtMTY1Myw3ICsxNjUzLDcgQEAKIAkJZ290byBlcnI2OwogCX0KIAotCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9JTlRFUlJVUFQpOworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCmluZGV4IDZiNzM1MGIuLmNkYmFmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJYXQ5MV9zdGFydF9oYyhwZGV2KTsKIAlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOwogCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX0RJU0FCTEVEKTsKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwppbmRleCBhMWM4YjNiLi42ODkyNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlhdTF4eHhfc3RhcnRfb2hjKGRldik7CiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA3M2Y1YTM3Li44ZmI4NDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC03NCw3ICs3NCw2IEBACiAgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCAwMDIwZWQ3Li41NjAyZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWxoN2E0MDRfc3RhcnRfaGMoZGV2KTsKIAlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOwogCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgSVJRRl9ESVNBQkxFRCk7CiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwppbmRleCBjYTE5YWJlLi5jNGM0YmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4JLyogU0FfSU5URVJSVVBUICovCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CS8qIElSUUZfRElTQUJMRUQgKi8KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJcmV0dmFsID0gLUVOWElPOwogCQlnb3RvIGVycjI7CiAJfQotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9JTlRFUlJVUFQpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCmluZGV4IGIyYThkZmEuLjlmZTU2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwpAQCAtNzUsNyArNzUsNyBAQAogCW9oY2ktPmZsYWdzIHw9IE9IQ0lfQklHX0VORElBTjsKIAlvaGNpX2hjZF9pbml0KG9oY2kpOwogCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIFNBX0lOVEVSUlVQVCk7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGZhZmU3YzEuLjZmNTU5ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgSVJRRl9ESVNBQkxFRCk7CiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCAxZGE1ZGU1Li5kMmZjNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTM4OCw3ICszODgsNyBAQAogCiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKIAotCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIElSUUZfRElTQUJMRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnJfaW9yZW1hcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCmluZGV4IGZiMzIyMWUuLmNlM2RlMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXNhMTExMV9zdGFydF9oYyhkZXYpOwogCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CiAKLQlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+aXJxWzFdLCBTQV9JTlRFUlJVUFQpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5pcnFbMV0sIElSUUZfRElTQUJMRUQpOwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCAxMDQ1Zjg0Li5kZmY2MDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtOCw3ICs4LDYgQEAKICAqICAoYW5kIG90aGVycykKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IDZiNGJjM2YuLmZhMzQwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMzEsNyArMzEsNiBAQAogI3VuZGVmCVZFUkJPU0UKICN1bmRlZglQQUNLRVRfVFJBQ0UKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNjg0LDkgKzE2ODMsMTMgQEAKIAkJaWYgKCFhZGRyIHx8ICFkYXRhKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWlvYWRkciA9IDE7Ci0KLQkJYWRkcl9yZWcgPSAodm9pZCBfX2lvbWVtICopIGFkZHItPnN0YXJ0OwotCQlkYXRhX3JlZyA9ICh2b2lkIF9faW9tZW0gKikgZGF0YS0+c3RhcnQ7CisJCS8qCisJCSAqIE5PVEU6IDY0LWJpdCByZXNvdXJjZS0+c3RhcnQgaXMgZ2V0dGluZyB0cnVuY2F0ZWQKKwkJICogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZywgYXNzdW1pbmcgdGhhdCAtPnN0YXJ0CisJCSAqIGlzIGFsd2F5cyAzMi1iaXQgZm9yIHRoaXMgY2FzZQorCQkgKi8KKwkJYWRkcl9yZWcgPSAodm9pZCBfX2lvbWVtICopICh1bnNpZ25lZCBsb25nKSBhZGRyLT5zdGFydDsKKwkJZGF0YV9yZWcgPSAodm9pZCBfX2lvbWVtICopICh1bnNpZ25lZCBsb25nKSBkYXRhLT5zdGFydDsKIAl9IGVsc2UgewogCQlhZGRyX3JlZyA9IGlvcmVtYXAoYWRkci0+c3RhcnQsIDEpOwogCQlpZiAoYWRkcl9yZWcgPT0gTlVMTCkgewpAQCAtMTc0Niw3ICsxNzQ5LDcgQEAKIAkgKiB3YXMgb24gYSBzeXN0ZW0gd2l0aCBzaW5nbGUgZWRnZSB0cmlnZ2VyaW5nLCBzbyBtb3N0IHNvcnRzIG9mCiAJICogdHJpZ2dlcmluZyBhcnJhbmdlbWVudCBzaG91bGQgd29yay4KIAkgKi8KLQlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCmluZGV4IDY2MzdhMGUuLmRjMjg2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCkBAIC05LDcgKzksNiBAQAogICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDEgSm9oYW5uZXMgRXJkZmVsdAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCA3YjQ4NTY3Li40MTUxZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYyBiL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYwppbmRleCAzNjg1NTA2Li45ZTNmMTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9hcHBsZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwppbmRleCAwN2M4YzBlLi4wNWQyZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCkBAIC04NSw3ICs4NSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKaW5kZXggYzQ2NzBlMS4uNzA0NzdmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIFBhdWwgU3Rld2FydCA8c3Rld2FydEB3ZXRsb2dpYy5uZXQ+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9pdG10b3VjaC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaXRtdG91Y2guYwppbmRleCA1YzU3MGNjLi44NmFjYjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9pdG10b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2l0bXRvdWNoLmMKQEAgLTM5LDcgKzM5LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYwppbmRleCA3MGFmOTg1Li40NzIzYjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIGFuZCBLZXlzcGFuLCBJbmMgdGhlIG1hbnVmYWN0dXJlcnMgb2YgdGhlIEtleXNwYW4gVVNCIERNUiBwcm9kdWN0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKaW5kZXggNGZkZWU0ZC4uYTljY2RhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKQEAgLTM5LDcgKzM5LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwppbmRleCBkYTdiMGJmLi4wMTQ5MDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLy8jZGVmaW5lIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMKaW5kZXggY2ZkNGE0ZS4uOTg4OWIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYwpAQCAtNTQsNyArNTQsNiBAQAogICogMjAwMi0wNy0xNyAtIDAuMC41IDogc2ltcGxpZmllZCBkLXBhZCBoYW5kbGluZwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jIGIvZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jCmluZGV4IDI0YWVkYmIuLjU3NWE0ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC95ZWFsaW5rLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICAqICAgMjAwNTA4MTYgaGVuawlNZXJnZSAyLjYuMTMtcmM2CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCmluZGV4IGEwNDIwNDIuLmIyMGJlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCmluZGV4IGQwYjE2NzIuLmZjZDY5YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKaW5kZXggOTY2YWNiNC4uZjMwYWIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwpAQCAtMjcsNyArMjcsNiBAQAogICogVjAuMTMgKG1oKSBBZGRlZCBzdXBwb3J0IGZvciBMRCBYLVJheSBhbmQgTWFjaGluZSBUZXN0IFN5c3RlbQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IDc3OWJjZjAuLjc2OTlkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtNzUsNyArNzUsNiBAQAogICogICAtIG1vdmUgcmVzZXQgaW50byBvcGVuIHRvIGNsZWFuIG91dCBzcHVyaW91cyBkYXRhCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwppbmRleCAxM2FlZWEyLi5iZmJiYmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpAQCAtMTMsNyArMTMsNiBAQAogICogVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCmluZGV4IDVhMDQwYzIuLmMwZGY3OWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKaW5kZXggOTY4ZjBkMy4uOWIzMGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCkBAIC0zNiw3ICszNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKaW5kZXggZjQ0MTk2NC4uMGM1ZWUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCmluZGV4IDgxYmExNGMuLjc4NmUxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2FzaXguYyBiL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKaW5kZXggMzcxMTFhYy4uMmUyYmJjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwpAQCAtMjIsNyArMjIsNiBAQAogLy8gI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBhdGggbWVzc2FnZXMsIGV4dHJhIGluZm8KIC8vICNkZWZpbmUJVkVSQk9TRQkJCS8vIG1vcmU7IHN1Y2Nlc3MgbWVzc2FnZXMKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2NkY19ldGhlci5jIGIvZHJpdmVycy91c2IvbmV0L2NkY19ldGhlci5jCmluZGV4IGVmZDE5NWIuLjgyY2UwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvY2RjX2V0aGVyLmMKQEAgLTIwLDcgKzIwLDYgQEAKIC8vICNkZWZpbmUJREVCVUcJCQkvLyBlcnJvciBwYXRoIG1lc3NhZ2VzLCBleHRyYSBpbmZvCiAvLyAjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBzdWNjZXNzIG1lc3NhZ2VzCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9jZGNfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9uZXQvY2RjX3N1YnNldC5jCmluZGV4IGVjODAxZThiLi5lMmZhZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvY2RjX3N1YnNldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9jZGNfc3Vic2V0LmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvZ2w2MjBhLmMgYi9kcml2ZXJzL3VzYi9uZXQvZ2w2MjBhLmMKaW5kZXggZmFmMWU4Ni4uMzE1NWYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L2dsNjIwYS5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9nbDYyMGEuYwpAQCAtMjEsNyArMjEsNiBAQAogLy8gI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBhdGggbWVzc2FnZXMsIGV4dHJhIGluZm8KIC8vICNkZWZpbmUJVkVSQk9TRQkJCS8vIG1vcmU7IHN1Y2Nlc3MgbWVzc2FnZXMKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L25ldDEwODAuYyBiL2RyaXZlcnMvdXNiL25ldC9uZXQxMDgwLmMKaW5kZXggNzhlNmE0My4uYTliNmVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L25ldDEwODAuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvbmV0MTA4MC5jCkBAIC0yMCw3ICsyMCw2IEBACiAvLyAjZGVmaW5lCURFQlVHCQkJLy8gZXJyb3IgcGF0aCBtZXNzYWdlcywgZXh0cmEgaW5mbwogLy8gI2RlZmluZQlWRVJCT1NFCQkJLy8gbW9yZTsgc3VjY2VzcyBtZXNzYWdlcwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcGx1c2IuYyBiL2RyaXZlcnMvdXNiL25ldC9wbHVzYi5jCmluZGV4IDRmZTg2MzMuLjVkMTdjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wbHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9wbHVzYi5jCkBAIC0yMCw3ICsyMCw2IEBACiAvLyAjZGVmaW5lCURFQlVHCQkJLy8gZXJyb3IgcGF0aCBtZXNzYWdlcywgZXh0cmEgaW5mbwogLy8gI2RlZmluZQlWRVJCT1NFCQkJLy8gbW9yZTsgc3VjY2VzcyBtZXNzYWdlcwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jIGIvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYwppbmRleCBmNTUxNTQ2Li5jMmEyOGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKQEAgLTIwLDcgKzIwLDYgQEAKIC8vICNkZWZpbmUJREVCVUcJCQkvLyBlcnJvciBwYXRoIG1lc3NhZ2VzLCBleHRyYSBpbmZvCiAvLyAjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBzdWNjZXNzIG1lc3NhZ2VzCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMgYi9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCmluZGV4IDFiYmJhZTIuLjcxOGY4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwpAQCAtNiw3ICs2LDYgQEAKICAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKaW5kZXggMzYyZDY5MC4uNTQxODNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpAQCAtMzMsNyArMzMsNiBAQAogLy8gI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBhdGggbWVzc2FnZXMsIGV4dHJhIGluZm8KIC8vICNkZWZpbmUJVkVSQk9TRQkJCS8vIG1vcmU7IHN1Y2Nlc3MgbWVzc2FnZXMKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3phdXJ1cy5jIGIvZHJpdmVycy91c2IvbmV0L3phdXJ1cy5jCmluZGV4IDgxM2U0NzAuLjE0NDU2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC96YXVydXMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvemF1cnVzLmMKQEAgLTIwLDcgKzIwLDYgQEAKIC8vICNkZWZpbmUJREVCVUcJCQkvLyBlcnJvciBwYXRoIG1lc3NhZ2VzLCBleHRyYSBpbmZvCiAvLyAjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBzdWNjZXNzIG1lc3NhZ2VzCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwppbmRleCA0MTQ0Nzc3Li4zZmFhN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCkBAIC02Myw3ICs2Myw2IEBACiAgKiAgICBVc2JTbm9vcCBvbiBXaW5kb3dzMjAwMCBhbmQgZnJvbSBleGFtaW5pbmcgdGhlIG90aGVyIFVTQiBkcml2ZXJzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYwppbmRleCBlOWY5ZjRiLi5mMmQ5OTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jCkBAIC04LDcgKzgsNiBAQAogICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCmluZGV4IGYzNDA0ZTEuLjNkNDU2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwppbmRleCBmOGMwY2IyLi5kZjBhNGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwppbmRleCAxZmQ1YzVhLi40OWI1MWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCA1ZGU3NmVmLi40ZmYyZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIC8qIENvZGUgb3JpZ2luYXRlcyBhbmQgd2FzIGJ1aWx0IHVwIGZyb20gZnRkaV9zaW8sIGJlbGtpbiwgcGwyMzAzIGFuZCBvdGhlcnMuICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IGIzZjc3NmEuLjY5NTNkM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTIzMyw3ICsyMzMsNiBAQAogKiAgJElkOiBkaWdpX2FjY2VsZXBvcnQuYyx2IDEuODAuMS4yIDIwMDAvMTEvMDIgMDU6NDU6MDggcm9vdCBFeHAgJAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwppbmRleCBhZmNhMWVhZS4uMWUyYjMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTUxLDcgKzUxLDYgQEAKICAqIAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKaW5kZXggMWU0MTljOC4uZGViYzNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKQEAgLTgsNyArOCw2IEBACiAgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggYjJiZmVhNy4uOGE3NGIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTI0NSw3ICsyNDUsNiBAQAogLyogICB0byB0YWxrIHRvIHRoZSBkZXZpY2UgKi8KIC8qIFRoYW54IHRvIGdraCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHVzYiBkZXYgZ3JvdXAgZm9yIGFsbCBjb2RlIEkgaGF2ZSBhc3NpbWlsYXRlZCA6LSkgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggMDQ3Njc3NS4uMWY1ZDE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggMDdhNDc4Yy4uOTQ1YjhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwppbmRleCBlOTcxOWRhLi43ZTA2MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCmluZGV4IGI4NWQyMTUuLmJkMmMwNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKaW5kZXggOGUxZTIyNS4uNzIzYTEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggOWRhNmQyYS4uZGJjZmUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC00NCw3ICs0NCw2IEBACiAgKiAJVGhhbmtzIHRvIGluZm8gZnJvbSBIZWF0aCBSb2JpbnNvbiBhbmQgQXJpZWggRGF2aWRvZmYuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDk0MzJjNzMuLjJjZjFmZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICAqCWluaXRpYWwgdmVyc2lvbiByZWxlYXNlZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC00NTMsOCArNDUyLDcgQEAKIAkJCXR0eSA9IHBvcnQtPnR0eTsKIAogCQkJLyoKLQkJCSAqCUZJWE1FOiBtdXN0IG5vdCBkbyB0aGlzIGluIElSUSBjb250ZXh0LAotCQkJICoJbXVzdCBob25vdXIgVFRZX0RPTlRfRkxJUAorCQkJICoJRklYTUU6IG11c3Qgbm90IGRvIHRoaXMgaW4gSVJRIGNvbnRleHQKIAkJCSAqLwogCQkJdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZigKIAkJCQl0dHksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAyY2Y2YWRlLi5kN2M1OGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTk1LDcgKzk1LDYgQEAKICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBiMDQ0MWMzLi4wM2FiM2MwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTY2LDcgKzY2LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IDY1ZDc5ZjYuLmI0NWZmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtNDUsNyArNDUsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCmluZGV4IDg3ZGZjZDguLjQ1NzczMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKQEAgLTM1LDcgKzM1LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggMzViZDI5Yi4uY2EwNWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTY0LDcgKzY0LDYgQEAKICAqICAgKHZpYSBsaW51eC11c2ItZGV2ZWwpLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IDZkY2RiNWYuLmNmYjcxMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtMzUsNyArMzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggYjA4NjFiNi4uNzhhZDRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNTcsNyArNTcsNiBAQAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXR0aGlhcyBVcmxpY2hzIDxzbXVyZkBzbXVyZi5ub3Jpcy5kZT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRHJpdmVyIGZvciBHU00gbW9kZW1zIgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggZDg4NzA0My4uZGU5M2EyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtMTQsNyArMTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCmluZGV4IGYwMjE1ZjguLjg5N2Q4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCkBAIC02MCw3ICs2MCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCBjM2EyMDcxLi5hOWFmZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTY4LDcgKzY4LDYgQEAKICAqIGZpCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggYTMwMTM1Yy4uYjU5YTA1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEwNTksMTMgKzEwNTgsMTIgQEAKIAogCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmRyaXZlcl9uYW1lID0gInVzYnNlcmlhbCI7Ci0JdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInVzYi90dHMvIjsKIAl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPm5hbWUgPSAJInR0eVVTQiI7CiAJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5tYWpvciA9IFNFUklBTF9UVFlfTUFKT1I7CiAJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IDA7CiAJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKIAl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwogCXR0eV9zZXRfb3BlcmF0aW9ucyh1c2Jfc2VyaWFsX3R0eV9kcml2ZXIsICZzZXJpYWxfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCmluZGV4IGQ1M2VhOWIuLjBmMjgwMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfSAogI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggOWU4OWI4ZC4uOTVhMjkzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCmluZGV4IDU2ZmZjODEuLjU0MDQzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKQEAgLTY1LDcgKzY1LDYgQEAKICAqIAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaAppbmRleCBjZDIwOTZhLi43N2UyNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5oCkBAIC00NCw3ICs0NCw2IEBACiAjaWZuZGVmIF9ERUJVR19IXwogI2RlZmluZSBfREVCVUdfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjZGVmaW5lIFVTQl9TVE9SQUdFICJ1c2Itc3RvcmFnZTogIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uYwppbmRleCA5MmI2OWU0Li4xNjI4Y2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uYwpAQCAtMjksNyArMjksNiBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwppbmRleCAzMGU5NjA1Li44OGFhNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwpAQCAtMjgsNyArMjgsNiBAQAogICogKGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCmluZGV4IGY5OTA3YTUuLjkyN2Y3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuaApAQCAtMzcsNyArMzcsNiBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgInVzYi5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKaW5kZXggMDI2YTU4Ny4uMzEzOTIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwpAQCAtMjgsNyArMjgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCAxOWIyNWM1Li5lYjcxODhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggNTQzMjQ0ZC4uYzdlODRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0zMSw3ICszMSw2IEBACiAgKiB0aGUgZm9sbG93aW5nIHRoaW5nIGZvciBpdCB0byB3b3JrOgogICogVGhlIG1hY3JvIFVOVVNVQUxfREVWKCkgbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBJZiB5b3UgZWRpdCB0aGlzIGZpbGUsIHBsZWFzZSB0cnkgdG8ga2VlcCBpdCBzb3J0ZWQgZmlyc3QgYnkgVmVuZG9ySUQsCiAgKiB0aGVuIGJ5IFByb2R1Y3RJRC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IGUyMzJjN2MuLjExODVhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNDcsNyArNDcsNiBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCmluZGV4IDRkZTlmYjUuLmIzNjIwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCAxN2RlNGM4NC4uM2JhZGI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTU1Nyw2ICsxNTU3LDIxIEBACiAJICBUdXJuIG9uIGRlYnVnZ2luZyBtZXNzYWdlcy4gTm90ZSB0aGF0IHlvdSBjYW4gc2V0L3Vuc2V0IGF0IHJ1biB0aW1lCiAJICB0aHJvdWdoIHN5c2ZzCiAKK2NvbmZpZyBGQl9QTlg0MDA4X0RVTQorCXRyaXN0YXRlICJEaXNwbGF5IFVwZGF0ZSBNb2R1bGUgc3VwcG9ydCBvbiBQaGlsaXBzIFBOWDQwMDggYm9hcmQiCisJZGVwZW5kcyBvbiBGQiAmJiBBUkNIX1BOWDQwMDgKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBQTlg0MDA4IERpc3BsYXkgVXBkYXRlIE1vZHVsZSAoRFVNKQorCitjb25maWcgRkJfUE5YNDAwOF9EVU1fUkdCCisJdHJpc3RhdGUgIlJHQiBGcmFtZWJ1ZmZlciBzdXBwb3J0IG9uIFBoaWxpcHMgUE5YNDAwOCBib2FyZCIKKwlkZXBlbmRzIG9uIEZCX1BOWDQwMDhfRFVNCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFBOWDQwMDggUkdCIEZyYW1lYnVmZmVyCisKIGNvbmZpZyBGQl9WSVJUVUFMCiAJdHJpc3RhdGUgIlZpcnR1YWwgRnJhbWUgQnVmZmVyIHN1cHBvcnQgKE9OTFkgRk9SIFRFU1RJTkchKSIKIAlkZXBlbmRzIG9uIEZCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCBjMzM1ZTliLi42MjgzZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTk0LDYgKzk0LDggQEAKIG9iai0kKENPTkZJR19GQl9TMUQxM1hYWCkJICArPSBzMWQxM3h4eGZiLm8KIG9iai0kKENPTkZJR19GQl9JTVgpICAgICAgICAgICAgICArPSBpbXhmYi5vCiBvYmotJChDT05GSUdfRkJfUzNDMjQxMCkJICArPSBzM2MyNDEwZmIubworb2JqLSQoQ09ORklHX0ZCX1BOWDQwMDhfRFVNKQkgICs9IHBueDQwMDgvCitvYmotJChDT05GSUdfRkJfUE5YNDAwOF9EVU1fUkdCKSAgKz0gcG54NDAwOC8KIAogIyBQbGF0Zm9ybSBvciBmYWxsYmFjayBkcml2ZXJzIGdvIGhlcmUKIG9iai0kKENPTkZJR19GQl9WRVNBKSAgICAgICAgICAgICArPSB2ZXNhZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9TM3RyaW9mYi5jIGIvZHJpdmVycy92aWRlby9TM3RyaW9mYi5jCmluZGV4IDQ1NWZkYTkuLmU3MTRlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vUzN0cmlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL1MzdHJpb2ZiLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCmluZGV4IDk4YmFlY2MuLjYxYThiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiAgLSBCbGFua2luZyA4YnBwIGRpc3BsYXlzIHdpdGggVklEQwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hbWlmYi5jIGIvZHJpdmVycy92aWRlby9hbWlmYi5jCmluZGV4IDMwMzNjNzIuLmY5YmM5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1pZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCA0NjYwNDI4Li5mZDk1YzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCkBAIC01NjEsNyArNTYxLDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCWlmIChpcnEpIHsKIAkJcGFyLT5pcnEgPSBpcnE7Ci0JCWlmIChyZXF1ZXN0X2lycShwYXItPmlycSwgJmFyY2ZiX2ludGVycnVwdCwgU0FfU0hJUlEsCisJCWlmIChyZXF1ZXN0X2lycShwYXItPmlycSwgJmFyY2ZiX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJImFyY2ZiIiwgaW5mbykpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkiYXJjZmI6IEZhaWxlZCByZXEgSVJRICVkXG4iLCBwYXItPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FzaWxpYW50ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jCmluZGV4IDI5ZjlmMGQuLmVhZWFmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggMTFjZjdmYy4uNzJjNTg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC00Niw3ICs0Niw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiLmggYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYi5oCmluZGV4IDQzZDJjYjUuLjU1ZmI4YjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiLmgKQEAgLTIsNyArMiw2IEBACiAgKiAgQVRJIEZyYW1lIEJ1ZmZlciBEZXZpY2UgRHJpdmVyIENvcmUgRGVmaW5pdGlvbnMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAgICAgLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCAyMmU3MjA2Li4wYzk3MDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC00OSw3ICs0OSw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNTY4LDcgKzE1NjcsNyBAQAogCXUzMiBpbnRfY250bDsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmcGFyLT5pcnFfZmxhZ3MpKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShwYXItPmlycSwgYXR5X2lycSwgU0FfU0hJUlEsICJhdHlmYiIsIHBhcikpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKHBhci0+aXJxLCBhdHlfaXJxLCBJUlFGX1NIQVJFRCwgImF0eWZiIiwgcGFyKSkgewogCQkJY2xlYXJfYml0KDAsICZwYXItPmlycV9mbGFncyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCmluZGV4IDdkZTY2YjguLjE3NTVkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKQEAgLTQwLDE0ICs0MCwxNCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiAKLQlpZiAocGRhdGEtPm5lZ2F0aXZlKQotCQlybGV2ZWwgPSBNQVhfUkFERU9OX0xFVkVMIC0gcmxldmVsOwotCiAJaWYgKHJsZXZlbCA8IDApCiAJCXJsZXZlbCA9IDA7CiAJZWxzZSBpZiAocmxldmVsID4gTUFYX1JBREVPTl9MRVZFTCkKIAkJcmxldmVsID0gTUFYX1JBREVPTl9MRVZFTDsKIAorCWlmIChwZGF0YS0+bmVnYXRpdmUpCisJCXJsZXZlbCA9IE1BWF9SQURFT05fTEVWRUwgLSBybGV2ZWw7CisKIAlyZXR1cm4gcmxldmVsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwppbmRleCA2OGIxNTY0Li41MWI3OGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKQEAgLTUyLDcgKzUyLDYgQEAKIAogI2RlZmluZSBSQURFT05fVkVSU0lPTgkiMC4yLjAiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jCmluZGV4IGE5ZDA0MTQuLjlhYWNhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmggYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCmluZGV4IDE2NDU5NDMuLjM4NjU3YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19SQURFT05GQl9IX18KICNkZWZpbmUgX19SQURFT05GQl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zODIsNyArMzgxLDcgQEAKIC8qIE5vdGUgYWJvdXQgdGhpcyBmdW5jdGlvbjogd2UgaGF2ZSBzb21lIHJhcmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBub3Qgc2NoZWR1bGUsCiAgKiB0aGlzIHR5cGljYWxseSBoYXBwZW4gd2l0aCBvdXIgc3BlY2lhbCAid2FrZSB1cCBlYXJseSIgaG9vayB3aGljaCBhbGxvd3MgdXMgdG8KICAqIHdha2UgdXAgdGhlIGdyYXBoaWMgY2hpcCAoYW5kIHRodXMgZ2V0IHRoZSBjb25zb2xlIGJhY2spIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UKLSAqIG9uIHNvbWUgbWFjaGluZXMgdGhhdCBzdXBwb3J0IHRoYXQgbWVjYW5pc20uIEF0IHRoaXMgcG9pbnQsIGludGVycnVwdHMgYXJlIG9mZgorICogb24gc29tZSBtYWNoaW5lcyB0aGF0IHN1cHBvcnQgdGhhdCBtZWNoYW5pc20uIEF0IHRoaXMgcG9pbnQsIGludGVycnVwdHMgYXJlIG9mZgogICogYW5kIHNjaGVkdWxpbmcgaXMgbm90IHBlcm1pdHRlZAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX3JhZGVvbl9tc2xlZXAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCB1bnNpZ25lZCBsb25nIG1zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCmluZGV4IDllZjY4Y2Q4Li5hOTJhOTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC00MCw3ICs0MCw2IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCmluZGV4IDYwMGQzZTAuLmM2YTVmMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKQEAgLTE2OTQsNyArMTY5NCw3IEBACiAKIAkvKiBOb3cgaG9vayBpbnRlcnJ1cHQgdG9vICovCiAJaWYgKChyZXQgPSByZXF1ZXN0X2lycShBVTEyMDBfTENEX0lOVCwgYXUxMjAwZmJfaGFuZGxlX2lycSwKLQkJIAkgIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLCAibGNkIiwgKHZvaWQgKilkZXYpKSA8IDApIHsKKwkJIAkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgImxjZCIsICh2b2lkICopZGV2KSkgPCAwKSB7CiAJCXByaW50X2VycigiZmFpbCB0byByZXF1ZXN0IGludGVycnVwdCBsaW5lICVkIChlcnI6ICVkKSIsCiAJCQkgIEFVMTIwMF9MQ0RfSU5ULCByZXQpOwogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKaW5kZXggYmQ4NzliNy4uY2FmMWVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAvKiBMQ0QgcG93ZXIgZnVuY3Rpb25zICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2J3Mi5jIGIvZHJpdmVycy92aWRlby9idzIuYwppbmRleCA2NTc3ZmRmLi5jNjZlM2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2J3Mi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYncyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBidzIuYzogQldUV08gZnJhbWUgYnVmZmVyIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTggSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAbnVjbGVjdS51bmFtLm14KQogICogQ29weXJpZ2h0IChDKSAxOTk3IEVkZGllIEMuIERvc3QgKGVjZEBza3luZXQuYmUpCkBAIC0xOSwxNCArMTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NidXMuaD4KICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vZmJpby5oPgogCi0jaWZkZWYgQ09ORklHX1NQQVJDMzIKLSNpbmNsdWRlIDxhc20vc3VuNHBhZGRyLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInNidXNsaWIuaCIKIAogLyoKQEAgLTU5LDMwICs1NiwzMCBAQAogI2RlZmluZSBCV1RXT19SRUdJU1RFUl9PRkZTRVQgMHg0MDAwMDAKIAogc3RydWN0IGJ0X3JlZ3MgewotCXZvbGF0aWxlIHUzMiBhZGRyOwotCXZvbGF0aWxlIHUzMiBjb2xvcl9tYXA7Ci0Jdm9sYXRpbGUgdTMyIGNvbnRyb2w7Ci0Jdm9sYXRpbGUgdTMyIGN1cnNvcjsKKwl1MzIgYWRkcjsKKwl1MzIgY29sb3JfbWFwOworCXUzMiBjb250cm9sOworCXUzMiBjdXJzb3I7CiB9OwogCiBzdHJ1Y3QgYncyX3JlZ3MgewogCXN0cnVjdCBidF9yZWdzCWNtYXA7Ci0Jdm9sYXRpbGUgdTgJY29udHJvbDsKLQl2b2xhdGlsZSB1OAlzdGF0dXM7Ci0Jdm9sYXRpbGUgdTgJY3Vyc29yX3N0YXJ0OwotCXZvbGF0aWxlIHU4CWN1cnNvcl9lbmQ7Ci0Jdm9sYXRpbGUgdTgJaF9ibGFua19zdGFydDsKLQl2b2xhdGlsZSB1OAloX2JsYW5rX2VuZDsKLQl2b2xhdGlsZSB1OAloX3N5bmNfc3RhcnQ7Ci0Jdm9sYXRpbGUgdTgJaF9zeW5jX2VuZDsKLQl2b2xhdGlsZSB1OAljb21wX3N5bmNfZW5kOwotCXZvbGF0aWxlIHU4CXZfYmxhbmtfc3RhcnRfaGlnaDsKLQl2b2xhdGlsZSB1OAl2X2JsYW5rX3N0YXJ0X2xvdzsKLQl2b2xhdGlsZSB1OAl2X2JsYW5rX2VuZDsKLQl2b2xhdGlsZSB1OAl2X3N5bmNfc3RhcnQ7Ci0Jdm9sYXRpbGUgdTgJdl9zeW5jX2VuZDsKLQl2b2xhdGlsZSB1OAl4ZmVyX2hvbGRvZmZfc3RhcnQ7Ci0Jdm9sYXRpbGUgdTgJeGZlcl9ob2xkb2ZmX2VuZDsKKwl1OAljb250cm9sOworCXU4CXN0YXR1czsKKwl1OAljdXJzb3Jfc3RhcnQ7CisJdTgJY3Vyc29yX2VuZDsKKwl1OAloX2JsYW5rX3N0YXJ0OworCXU4CWhfYmxhbmtfZW5kOworCXU4CWhfc3luY19zdGFydDsKKwl1OAloX3N5bmNfZW5kOworCXU4CWNvbXBfc3luY19lbmQ7CisJdTgJdl9ibGFua19zdGFydF9oaWdoOworCXU4CXZfYmxhbmtfc3RhcnRfbG93OworCXU4CXZfYmxhbmtfZW5kOworCXU4CXZfc3luY19zdGFydDsKKwl1OAl2X3N5bmNfZW5kOworCXU4CXhmZXJfaG9sZG9mZl9zdGFydDsKKwl1OAl4ZmVyX2hvbGRvZmZfZW5kOwogfTsKIAogLyogU3RhdHVzIFJlZ2lzdGVyIENvbnN0YW50cyAqLwpAQCAtMTE3LDkgKzExNCw4IEBACiAjZGVmaW5lIEJXMl9GTEFHX0JMQU5LRUQJMHgwMDAwMDAwMQogCiAJdW5zaWduZWQgbG9uZwkJcGh5c2Jhc2U7CisJdW5zaWduZWQgbG9uZwkJd2hpY2hfaW87CiAJdW5zaWduZWQgbG9uZwkJZmJzaXplOwotCi0Jc3RydWN0IHNidXNfZGV2CQkqc2RldjsKIH07CiAKIC8qKgpAQCAtMTc0LDkgKzE3MCw3IEBACiAKIAlyZXR1cm4gc2J1c2ZiX21tYXBfaGVscGVyKGJ3Ml9tbWFwX21hcCwKIAkJCQkgIHBhci0+cGh5c2Jhc2UsIHBhci0+ZmJzaXplLAotCQkJCSAgKHBhci0+c2RldiA/Ci0JCQkJICAgcGFyLT5zZGV2LT5yZWdfYWRkcnNbMF0ud2hpY2hfaW8gOgotCQkJCSAgIDApLAorCQkJCSAgcGFyLT53aGljaF9pbywKIAkJCQkgIHZtYSk7CiB9CiAKQEAgLTI4OCwxMzkgKzI4MiwxMjQgQEAKIHN0cnVjdCBhbGxfaW5mbyB7CiAJc3RydWN0IGZiX2luZm8gaW5mbzsKIAlzdHJ1Y3QgYncyX3BhciBwYXI7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKLXN0YXRpYyBMSVNUX0hFQUQoYncyX2xpc3QpOwogCi1zdGF0aWMgdm9pZCBidzJfaW5pdF9vbmUoc3RydWN0IHNidXNfZGV2ICpzZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgYncyX2luaXRfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+bm9kZTsKIAlzdHJ1Y3QgYWxsX2luZm8gKmFsbDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlc3A7Ci0jaWZkZWYgQ09ORklHX1NVTjQKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotI2VuZGlmCi0JaW50IGxpbmVieXRlczsKKwlpbnQgbGluZWJ5dGVzLCBlcnI7CiAKLQlhbGwgPSBrbWFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhbGwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJidzI6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYWxsLCAwLCBzaXplb2YoKmFsbCkpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFsbC0+bGlzdCk7CisJYWxsID0ga3phbGxvYyhzaXplb2YoKmFsbCksIEdGUF9LRVJORUwpOworCWlmICghYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZhbGwtPnBhci5sb2NrKTsKLQlhbGwtPnBhci5zZGV2ID0gc2RldjsKIAotI2lmZGVmIENPTkZJR19TVU40Ci0JaWYgKCFzZGV2KSB7Ci0JCWFsbC0+cGFyLnBoeXNiYXNlID0gc3VuNF9id3R3b19waHlzYWRkcjsKLQkJcmVzLnN0YXJ0ID0gc3VuNF9id3R3b19waHlzYWRkcjsKLQkJcmVzLmVuZCA9IHJlcy5zdGFydCArIEJXVFdPX1JFR0lTVEVSX09GRlNFVCArIHNpemVvZihzdHJ1Y3QgYncyX3JlZ3MpIC0gMTsKLQkJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQkJcmVzcCA9ICZyZXM7Ci0JCWFsbC0+aW5mby52YXIueHJlcyA9IGFsbC0+aW5mby52YXIueHJlc192aXJ0dWFsID0gMTE1MjsKLQkJYWxsLT5pbmZvLnZhci55cmVzID0gYWxsLT5pbmZvLnZhci55cmVzX3ZpcnR1YWwgPSA5MDA7Ci0JCWFsbC0+aW5mby52YXIuYml0c19wZXJfcGl4ZWwgPSAxOwotCQlsaW5lYnl0ZXMgPSAxMTUyIC8gODsKLQl9IGVsc2UKLSNlbHNlCi0JewotCQlCVUdfT04oIXNkZXYpOwotCQlhbGwtPnBhci5waHlzYmFzZSA9IHNkZXYtPnJlZ19hZGRyc1swXS5waHlzX2FkZHI7Ci0JCXJlc3AgPSAmc2Rldi0+cmVzb3VyY2VbMF07Ci0JCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgKHNkZXYgPyBzZGV2LT5wcm9tX25vZGUgOiAwKSwgMSk7Ci0JCWxpbmVieXRlcyA9IHByb21fZ2V0aW50ZGVmYXVsdChzZGV2LT5wcm9tX25vZGUsICJsaW5lYnl0ZXMiLAotCQkJCQkgICAgICAgYWxsLT5pbmZvLnZhci54cmVzKTsKLQl9Ci0jZW5kaWYKKwlhbGwtPnBhci5waHlzYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydDsKKwlhbGwtPnBhci53aGljaF9pbyA9IG9wLT5yZXNvdXJjZVswXS5mbGFncyAmIElPUkVTT1VSQ0VfQklUUzsKKworCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgZHAtPm5vZGUsIDEpOworCWxpbmVieXRlcyA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImxpbmVieXRlcyIsCisJCQkJCSAgYWxsLT5pbmZvLnZhci54cmVzKTsKKwogCWFsbC0+aW5mby52YXIucmVkLmxlbmd0aCA9IGFsbC0+aW5mby52YXIuZ3JlZW4ubGVuZ3RoID0KIAkJYWxsLT5pbmZvLnZhci5ibHVlLmxlbmd0aCA9IGFsbC0+aW5mby52YXIuYml0c19wZXJfcGl4ZWw7CiAJYWxsLT5pbmZvLnZhci5yZWQub2Zmc2V0ID0gYWxsLT5pbmZvLnZhci5ncmVlbi5vZmZzZXQgPQogCQlhbGwtPmluZm8udmFyLmJsdWUub2Zmc2V0ID0gMDsKIAotCWFsbC0+cGFyLnJlZ3MgPSBzYnVzX2lvcmVtYXAocmVzcCwgQldUV09fUkVHSVNURVJfT0ZGU0VULAotCQkJICAgICBzaXplb2Yoc3RydWN0IGJ3Ml9yZWdzKSwgImJ3MiByZWdzIik7CisJYWxsLT5wYXIucmVncyA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgQldUV09fUkVHSVNURVJfT0ZGU0VULAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgYncyX3JlZ3MpLCAiYncyIHJlZ3MiKTsKIAotCWlmIChzZGV2ICYmICFwcm9tX2dldGJvb2woc2Rldi0+cHJvbV9ub2RlLCAid2lkdGgiKSkKKwlpZiAoIW9mX2ZpbmRfcHJvcGVydHkoZHAsICJ3aWR0aCIsIE5VTEwpKQogCQlidzJfZG9fZGVmYXVsdF9tb2RlKCZhbGwtPnBhciwgJmFsbC0+aW5mbywgJmxpbmVieXRlcyk7CiAKIAlhbGwtPnBhci5mYnNpemUgPSBQQUdFX0FMSUdOKGxpbmVieXRlcyAqIGFsbC0+aW5mby52YXIueXJlcyk7CiAKIAlhbGwtPmluZm8uZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKIAlhbGwtPmluZm8uZmJvcHMgPSAmYncyX29wczsKLSNpZiBkZWZpbmVkKENPTkZJR19TUEFSQzMyKQotCWlmIChzZGV2KQotCQlhbGwtPmluZm8uc2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopCi0JCQlwcm9tX2dldGludGRlZmF1bHQoc2Rldi0+cHJvbV9ub2RlLCAiYWRkcmVzcyIsIDApOwotI2VuZGlmCi0JaWYgKCFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpCi0JCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9Ci0JCQlzYnVzX2lvcmVtYXAocmVzcCwgMCwgYWxsLT5wYXIuZmJzaXplLCAiYncyIHJhbSIpOworCisJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0KKwkJc2J1c19pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsIGFsbC0+cGFyLmZic2l6ZSwgImJ3MiByYW0iKTsKIAlhbGwtPmluZm8ucGFyID0gJmFsbC0+cGFyOwogCiAJYncyX2JsYW5rKDAsICZhbGwtPmluZm8pOwogCiAJYncyX2luaXRfZml4KCZhbGwtPmluZm8sIGxpbmVieXRlcyk7CiAKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYncyOiBDb3VsZCBub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXIuXG4iKTsKKwllcnI9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWlmIChlcnIgPCAwKSB7CisJCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBidzJfcmVncykpOworCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyOwogCX0KIAotCWxpc3RfYWRkKCZhbGwtPmxpc3QsICZidzJfbGlzdCk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBhbGwpOwogCi0JcHJpbnRrKCJidzI6IGJ3dHdvIGF0ICVseDolbHhcbiIsCi0JICAgICAgIChsb25nKSAoc2RldiA/IHNkZXYtPnJlZ19hZGRyc1swXS53aGljaF9pbyA6IDApLAotCSAgICAgICAobG9uZykgYWxsLT5wYXIucGh5c2Jhc2UpOworCXByaW50aygiJXM6IGJ3dHdvIGF0ICVseDolbHhcbiIsCisJICAgICAgIGRwLT5mdWxsX25hbWUsCisJICAgICAgIGFsbC0+cGFyLndoaWNoX2lvLCBhbGwtPnBhci5waHlzYmFzZSk7CisKKwlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBidzJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgYncyX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7Ci0Jc3RydWN0IHNidXNfYnVzICpzYnVzOwotCXN0cnVjdCBzYnVzX2RldiAqc2RldjsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IHRvX29mX2RldmljZSgmZGV2LT5kZXYpOwogCisJcmV0dXJuIGJ3Ml9pbml0X29uZShvcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJ3Ml9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCisJb2ZfaW91bm1hcChhbGwtPnBhci5yZWdzLCBzaXplb2Yoc3RydWN0IGJ3Ml9yZWdzKSk7CisJb2ZfaW91bm1hcChhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CisKKwlrZnJlZShhbGwpOworCisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYncyX21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJid3R3byIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBidzJfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBidzJfZHJpdmVyID0geworCS5uYW1lCQk9ICJidzIiLAorCS5tYXRjaF90YWJsZQk9IGJ3Ml9tYXRjaCwKKwkucHJvYmUJCT0gYncyX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYncyX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBidzJfaW5pdCh2b2lkKQorewogCWlmIChmYl9nZXRfb3B0aW9ucygiYncyZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLSNpZmRlZiBDT05GSUdfU1VONAotCWJ3Ml9pbml0X29uZShOVUxMKTsKLSNlbmRpZgotCWZvcl9hbGxfc2J1c2RldihzZGV2LCBzYnVzKSB7Ci0JCWlmICghc3RyY21wKHNkZXYtPnByb21fbmFtZSwgImJ3dHdvIikpCi0JCQlidzJfaW5pdF9vbmUoc2Rldik7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmYncyX2RyaXZlciwgJm9mX2J1c190eXBlKTsKIH0KIAotdm9pZCBfX2V4aXQgYncyX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBidzJfZXhpdCh2b2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmJ3Ml9saXN0KSB7Ci0JCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gbGlzdF9lbnRyeShwb3MsIHR5cGVvZigqYWxsKSwgbGlzdCk7Ci0KLQkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKLQkJa2ZyZWUoYWxsKTsKLQl9CisJcmV0dXJuIG9mX3VucmVnaXN0ZXJfZHJpdmVyKCZidzJfZHJpdmVyKTsKIH0KIAotaW50IF9faW5pdAotYncyX3NldHVwKGNoYXIgKmFyZykKLXsKLQkvKiBObyBjbWRsaW5lIG9wdGlvbnMgeWV0Li4uICovCi0JcmV0dXJuIDA7Ci19CiAKIG1vZHVsZV9pbml0KGJ3Ml9pbml0KTsKLQotI2lmZGVmIE1PRFVMRQogbW9kdWxlX2V4aXQoYncyX2V4aXQpOwotI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZnJhbWVidWZmZXIgZHJpdmVyIGZvciBCV1RXTyBjaGlwc2V0cyIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PiIpOworTU9EVUxFX1ZFUlNJT04oIjIuMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJjb3B5YXJlYS5jIGIvZHJpdmVycy92aWRlby9jZmJjb3B5YXJlYS5jCmluZGV4IDc0NDE1MzIuLjZmYWVhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2ZiY29weWFyZWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYmNvcHlhcmVhLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2ZiZmlsbHJlY3QuYyBiL2RyaXZlcnMvdmlkZW8vY2ZiZmlsbHJlY3QuYwppbmRleCBlNWZmNjJlLi5mMDBiNTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NmYmZpbGxyZWN0LmMKKysrIGIvZHJpdmVycy92aWRlby9jZmJmaWxscmVjdC5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiAgdGhlIG5hdGl2ZSBjcHUgZW5kaWFucy4gSSBhbHNvIG5lZWQgdG8gZGVhbCB3aXRoIE1TQiBwb3NpdGlvbiBpbiB0aGUgd29yZC4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYyBiL2RyaXZlcnMvdmlkZW8vY2ZiaW1nYmx0LmMKaW5kZXggYWQ4YTg5Yi4uNTFkMzUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYmltZ2JsdC5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiAgQWxzbyBuZWVkIHRvIGFkZCBjb2RlIHRvIGRlYWwgd2l0aCBjYXJkcyBlbmRpYW5zIHRoYXQgYXJlIGRpZmZlcmVudCB0aGFuCiAgKiAgdGhlIG5hdGl2ZSBjcHUgZW5kaWFucy4gSSBhbHNvIG5lZWQgdG8gZGVhbCB3aXRoIE1TQiBwb3NpdGlvbiBpbiB0aGUgd29yZC4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NnMTQuYyBiL2RyaXZlcnMvdmlkZW8vY2cxNC5jCmluZGV4IDYzYjZjNzkuLjdmOTI2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2cxNC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2cxNC5jCkBAIC0xLDYgKzEsNiBAQAogLyogY2cxNC5jOiBDR0ZPVVJURUVOIGZyYW1lIGJ1ZmZlciBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk4IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQogICogQ29weXJpZ2h0IChDKSAxOTk1IE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQG51Y2xlY3UudW5hbS5teCkKICAqCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2ZiaW8uaD4KIAogI2luY2x1ZGUgInNidXNsaWIuaCIKQEAgLTk5LDczICs5OSw3MyBAQAogI2RlZmluZSBDRzE0X01DUl9QSVhNT0RFXzMyCQkzCiAKIHN0cnVjdCBjZzE0X3JlZ3N7Ci0Jdm9sYXRpbGUgdTggbWNyOwkvKiBNYXN0ZXIgQ29udHJvbCBSZWcgKi8KLQl2b2xhdGlsZSB1OCBwcHI7CS8qIFBhY2tlZCBQaXhlbCBSZWcgKi8KLQl2b2xhdGlsZSB1OCB0bXNbMl07CS8qIFRlc3QgTW9kZSBTdGF0dXMgUmVncyAqLwotCXZvbGF0aWxlIHU4IG1zcjsJLyogTWFzdGVyIFN0YXR1cyBSZWcgKi8KLQl2b2xhdGlsZSB1OCBmc3I7CS8qIEZhdWx0IFN0YXR1cyBSZWcgKi8KLQl2b2xhdGlsZSB1OCByZXY7CS8qIFJldmlzaW9uICYgSW1wbCAqLwotCXZvbGF0aWxlIHU4IGNjcjsJLyogQ2xvY2sgQ29udHJvbCBSZWcgKi8KLQl2b2xhdGlsZSB1MzIgdG1yOwkvKiBUZXN0IE1vZGUgUmVhZCBCYWNrICovCi0Jdm9sYXRpbGUgdTggbW9kOwkvKiBNb25pdG9yIE9wZXJhdGlvbiBEYXRhIFJlZyAqLwotCXZvbGF0aWxlIHU4IGFjcjsJLyogQXV4IENvbnRyb2wgKi8KKwl1OCBtY3I7CS8qIE1hc3RlciBDb250cm9sIFJlZyAqLworCXU4IHBwcjsJLyogUGFja2VkIFBpeGVsIFJlZyAqLworCXU4IHRtc1syXTsJLyogVGVzdCBNb2RlIFN0YXR1cyBSZWdzICovCisJdTggbXNyOwkvKiBNYXN0ZXIgU3RhdHVzIFJlZyAqLworCXU4IGZzcjsJLyogRmF1bHQgU3RhdHVzIFJlZyAqLworCXU4IHJldjsJLyogUmV2aXNpb24gJiBJbXBsICovCisJdTggY2NyOwkvKiBDbG9jayBDb250cm9sIFJlZyAqLworCXUzMiB0bXI7CS8qIFRlc3QgTW9kZSBSZWFkIEJhY2sgKi8KKwl1OCBtb2Q7CS8qIE1vbml0b3IgT3BlcmF0aW9uIERhdGEgUmVnICovCisJdTggYWNyOwkvKiBBdXggQ29udHJvbCAqLwogCXU4IHh4eDBbNl07Ci0Jdm9sYXRpbGUgdTE2IGhjdDsJLyogSG9yIENvdW50ZXIgKi8KLQl2b2xhdGlsZSB1MTYgdmN0OwkvKiBWZXJ0IENvdW50ZXIgKi8KLQl2b2xhdGlsZSB1MTYgaGJzOwkvKiBIb3IgQmxhbmsgU3RhcnQgKi8KLQl2b2xhdGlsZSB1MTYgaGJjOwkvKiBIb3IgQmxhbmsgQ2xlYXIgKi8KLQl2b2xhdGlsZSB1MTYgaHNzOwkvKiBIb3IgU3luYyBTdGFydCAqLwotCXZvbGF0aWxlIHUxNiBoc2M7CS8qIEhvciBTeW5jIENsZWFyICovCi0Jdm9sYXRpbGUgdTE2IGNzYzsJLyogQ29tcG9zaXRlIFN5bmMgQ2xlYXIgKi8KLQl2b2xhdGlsZSB1MTYgdmJzOwkvKiBWZXJ0IEJsYW5rIFN0YXJ0ICovCi0Jdm9sYXRpbGUgdTE2IHZiYzsJLyogVmVydCBCbGFuayBDbGVhciAqLwotCXZvbGF0aWxlIHUxNiB2c3M7CS8qIFZlcnQgU3luYyBTdGFydCAqLwotCXZvbGF0aWxlIHUxNiB2c2M7CS8qIFZlcnQgU3luYyBDbGVhciAqLwotCXZvbGF0aWxlIHUxNiB4Y3M7Ci0Jdm9sYXRpbGUgdTE2IHhjYzsKLQl2b2xhdGlsZSB1MTYgZnNhOwkvKiBGYXVsdCBTdGF0dXMgQWRkcmVzcyAqLwotCXZvbGF0aWxlIHUxNiBhZHI7CS8qIEFkZHJlc3MgUmVnaXN0ZXJzICovCisJdTE2IGhjdDsJLyogSG9yIENvdW50ZXIgKi8KKwl1MTYgdmN0OwkvKiBWZXJ0IENvdW50ZXIgKi8KKwl1MTYgaGJzOwkvKiBIb3IgQmxhbmsgU3RhcnQgKi8KKwl1MTYgaGJjOwkvKiBIb3IgQmxhbmsgQ2xlYXIgKi8KKwl1MTYgaHNzOwkvKiBIb3IgU3luYyBTdGFydCAqLworCXUxNiBoc2M7CS8qIEhvciBTeW5jIENsZWFyICovCisJdTE2IGNzYzsJLyogQ29tcG9zaXRlIFN5bmMgQ2xlYXIgKi8KKwl1MTYgdmJzOwkvKiBWZXJ0IEJsYW5rIFN0YXJ0ICovCisJdTE2IHZiYzsJLyogVmVydCBCbGFuayBDbGVhciAqLworCXUxNiB2c3M7CS8qIFZlcnQgU3luYyBTdGFydCAqLworCXUxNiB2c2M7CS8qIFZlcnQgU3luYyBDbGVhciAqLworCXUxNiB4Y3M7CisJdTE2IHhjYzsKKwl1MTYgZnNhOwkvKiBGYXVsdCBTdGF0dXMgQWRkcmVzcyAqLworCXUxNiBhZHI7CS8qIEFkZHJlc3MgUmVnaXN0ZXJzICovCiAJdTggeHh4MVsweGNlXTsKLQl2b2xhdGlsZSB1OCBwY2dbMHgxMDBdOyAvKiBQaXhlbCBDbG9jayBHZW5lcmF0b3IgKi8KLQl2b2xhdGlsZSB1MzIgdmJyOwkvKiBGcmFtZSBCYXNlIFJvdyAqLwotCXZvbGF0aWxlIHUzMiB2bWNyOwkvKiBWQkMgTWFzdGVyIENvbnRyb2wgKi8KLQl2b2xhdGlsZSB1MzIgdmNyOwkvKiBWQkMgcmVmcmVzaCAqLwotCXZvbGF0aWxlIHUzMiB2Y2E7CS8qIFZCQyBDb25maWcgKi8KKwl1OCBwY2dbMHgxMDBdOyAvKiBQaXhlbCBDbG9jayBHZW5lcmF0b3IgKi8KKwl1MzIgdmJyOwkvKiBGcmFtZSBCYXNlIFJvdyAqLworCXUzMiB2bWNyOwkvKiBWQkMgTWFzdGVyIENvbnRyb2wgKi8KKwl1MzIgdmNyOwkvKiBWQkMgcmVmcmVzaCAqLworCXUzMiB2Y2E7CS8qIFZCQyBDb25maWcgKi8KIH07CiAKICNkZWZpbmUgQ0cxNF9DQ1JfRU5BQkxFCTB4MDQKICNkZWZpbmUgQ0cxNF9DQ1JfU0VMRUNUIDB4MDIJLyogSFcvRnVsbCBzY3JlZW4gKi8KIAogc3RydWN0IGNnMTRfY3Vyc29yIHsKLQl2b2xhdGlsZSB1MzIgY3BsMFszMl07CS8qIEVuYWJsZSBwbGFuZSAwICovCi0Jdm9sYXRpbGUgdTMyIGNwbDFbMzJdOyAgLyogQ29sb3Igc2VsZWN0aW9uIHBsYW5lICovCi0Jdm9sYXRpbGUgdTggY2NyOwkvKiBDdXJzb3IgQ29udHJvbCBSZWcgKi8KKwl1MzIgY3BsMFszMl07CS8qIEVuYWJsZSBwbGFuZSAwICovCisJdTMyIGNwbDFbMzJdOyAgLyogQ29sb3Igc2VsZWN0aW9uIHBsYW5lICovCisJdTggY2NyOwkvKiBDdXJzb3IgQ29udHJvbCBSZWcgKi8KIAl1OCB4eHgwWzNdOwotCXZvbGF0aWxlIHUxNiBjdXJzeDsJLyogQ3Vyc29yIHgseSBwb3NpdGlvbiAqLwotCXZvbGF0aWxlIHUxNiBjdXJzeTsJLyogQ3Vyc29yIHgseSBwb3NpdGlvbiAqLwotCXZvbGF0aWxlIHUzMiBjb2xvcjA7Ci0Jdm9sYXRpbGUgdTMyIGNvbG9yMTsKKwl1MTYgY3Vyc3g7CS8qIEN1cnNvciB4LHkgcG9zaXRpb24gKi8KKwl1MTYgY3Vyc3k7CS8qIEN1cnNvciB4LHkgcG9zaXRpb24gKi8KKwl1MzIgY29sb3IwOworCXUzMiBjb2xvcjE7CiAJdTMyIHh4eDFbMHgxYmNdOwotCXZvbGF0aWxlIHUzMiBjcGwwaVszMl07CS8qIEVuYWJsZSBwbGFuZSAwIGF1dG9pbmMgKi8KLQl2b2xhdGlsZSB1MzIgY3BsMWlbMzJdOyAvKiBDb2xvciBzZWxlY3Rpb24gYXV0b2luYyAqLworCXUzMiBjcGwwaVszMl07CS8qIEVuYWJsZSBwbGFuZSAwIGF1dG9pbmMgKi8KKwl1MzIgY3BsMWlbMzJdOyAvKiBDb2xvciBzZWxlY3Rpb24gYXV0b2luYyAqLwogfTsKIAogc3RydWN0IGNnMTRfZGFjIHsKLQl2b2xhdGlsZSB1OCBhZGRyOwkvKiBBZGRyZXNzIFJlZ2lzdGVyICovCisJdTggYWRkcjsJLyogQWRkcmVzcyBSZWdpc3RlciAqLwogCXU4IHh4eDBbMjU1XTsKLQl2b2xhdGlsZSB1OCBnbHV0OwkvKiBHYW1tYSB0YWJsZSAqLworCXU4IGdsdXQ7CS8qIEdhbW1hIHRhYmxlICovCiAJdTggeHh4MVsyNTVdOwotCXZvbGF0aWxlIHU4IHNlbGVjdDsJLyogUmVnaXN0ZXIgU2VsZWN0ICovCisJdTggc2VsZWN0OwkvKiBSZWdpc3RlciBTZWxlY3QgKi8KIAl1OCB4eHgyWzI1NV07Ci0Jdm9sYXRpbGUgdTggbW9kZTsJLyogTW9kZSBSZWdpc3RlciAqLworCXU4IG1vZGU7CS8qIE1vZGUgUmVnaXN0ZXIgKi8KIH07CiAKIHN0cnVjdCBjZzE0X3hsdXR7Ci0Jdm9sYXRpbGUgdTggeF94bHV0IFsyNTZdOwotCXZvbGF0aWxlIHU4IHhfeGx1dGQgWzI1Nl07CisJdTggeF94bHV0IFsyNTZdOworCXU4IHhfeGx1dGQgWzI1Nl07CiAJdTggeHh4MFsweDYwMF07Ci0Jdm9sYXRpbGUgdTggeF94bHV0X2luYyBbMjU2XTsKLQl2b2xhdGlsZSB1OCB4X3hsdXRkX2luYyBbMjU2XTsKKwl1OCB4X3hsdXRfaW5jIFsyNTZdOworCXU4IHhfeGx1dGRfaW5jIFsyNTZdOwogfTsKIAogLyogQ29sb3IgbG9vayB1cCB0YWJsZSAoY2x1dCkgKi8KQEAgLTIwNCw3ICsyMDQsNiBAQAogCiAJaW50CQkJbW9kZTsKIAlpbnQJCQlyYW1zaXplOwotCXN0cnVjdCBzYnVzX2RldgkJKnNkZXY7CiB9OwogCiBzdGF0aWMgdm9pZCBfX2NnMTRfcmVzZXQoc3RydWN0IGNnMTRfcGFyICpwYXIpCkBAIC0zNTUsMTQgKzM1NCw5IEBACiAgKiAgSW5pdGlhbGlzYXRpb24KICAqLwogCi1zdGF0aWMgdm9pZCBjZzE0X2luaXRfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgbGluZWJ5dGVzKQorc3RhdGljIHZvaWQgY2cxNF9pbml0X2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGxpbmVieXRlcywgc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlzdHJ1Y3QgY2cxNF9wYXIgKnBhciA9IChzdHJ1Y3QgY2cxNF9wYXIgKilpbmZvLT5wYXI7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQotCW5hbWUgPSAiY2dmb3VydGVlbiI7Ci0JaWYgKHBhci0+c2RldikKLQkJbmFtZSA9IHBhci0+c2Rldi0+cHJvbV9uYW1lOworCWNvbnN0IGNoYXIgKm5hbWUgPSBkcC0+bmFtZTsKIAogCXN0cmxjcHkoaW5mby0+Zml4LmlkLCBuYW1lLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CiAKQEAgLTQ1Niw5OCArNDUwLDgxIEBACiBzdHJ1Y3QgYWxsX2luZm8gewogCXN0cnVjdCBmYl9pbmZvIGluZm87CiAJc3RydWN0IGNnMTRfcGFyIHBhcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9Owotc3RhdGljIExJU1RfSEVBRChjZzE0X2xpc3QpOwogCi1zdGF0aWMgdm9pZCBjZzE0X2luaXRfb25lKHN0cnVjdCBzYnVzX2RldiAqc2RldiwgaW50IG5vZGUsIGludCBwYXJlbnRfbm9kZSkKK3N0YXRpYyB2b2lkIGNnMTRfdW5tYXBfcmVncyhzdHJ1Y3QgYWxsX2luZm8gKmFsbCkKIHsKKwlpZiAoYWxsLT5wYXIucmVncykKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5yZWdzLCBzaXplb2Yoc3RydWN0IGNnMTRfcmVncykpOworCWlmIChhbGwtPnBhci5jbHV0KQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLmNsdXQsIHNpemVvZihzdHJ1Y3QgY2cxNF9jbHV0KSk7CisJaWYgKGFsbC0+cGFyLmN1cnNvcikKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5jdXJzb3IsIHNpemVvZihzdHJ1Y3QgY2cxNF9jdXJzb3IpKTsKKwlpZiAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlKQorCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2cxNF9pbml0X29uZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CiAJc3RydWN0IGFsbF9pbmZvICphbGw7Ci0JdW5zaWduZWQgbG9uZyBwaHlzLCBycGh5czsKLQl1MzIgYmFzZXNbNl07Ci0JaW50IGlzXzhtYiwgbGluZWJ5dGVzLCBpOworCWludCBpc184bWIsIGxpbmVieXRlcywgaSwgZXJyOwogCi0JaWYgKCFzZGV2KSB7Ci0JCWlmIChwcm9tX2dldHByb3BlcnR5KG5vZGUsICJhZGRyZXNzIiwKLQkJCQkgICAgIChjaGFyICopICZiYXNlc1swXSwgc2l6ZW9mKGJhc2VzKSkgPD0gMAotCQkgICAgfHwgIWJhc2VzWzBdKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNnMTQ6IERldmljZSBpcyBub3QgbWFwcGVkLlxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKF9fZ2V0X2lvc3BhY2UoYmFzZXNbMF0pICE9IF9fZ2V0X2lvc3BhY2UoYmFzZXNbMV0pKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNnMTQ6IEkvTyBzcGFjZXMgZG9uJ3QgbWF0Y2guXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCWFsbCA9IGttYWxsb2Moc2l6ZW9mKCphbGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFsbCkgewotCQlwcmludGsoS0VSTl9FUlIgImNnMTQ6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYWxsLCAwLCBzaXplb2YoKmFsbCkpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFsbC0+bGlzdCk7CisJYWxsID0ga3phbGxvYyhzaXplb2YoKmFsbCksIEdGUF9LRVJORUwpOworCWlmICghYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZhbGwtPnBhci5sb2NrKTsKIAotCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgbm9kZSwgOCk7CisJc2J1c2ZiX2ZpbGxfdmFyKCZhbGwtPmluZm8udmFyLCBkcC0+bm9kZSwgOCk7CiAJYWxsLT5pbmZvLnZhci5yZWQubGVuZ3RoID0gODsKIAlhbGwtPmluZm8udmFyLmdyZWVuLmxlbmd0aCA9IDg7CiAJYWxsLT5pbmZvLnZhci5ibHVlLmxlbmd0aCA9IDg7CiAKLQlsaW5lYnl0ZXMgPSBwcm9tX2dldGludGRlZmF1bHQobm9kZSwgImxpbmVieXRlcyIsCi0JCQkJICAgICAgIGFsbC0+aW5mby52YXIueHJlcyk7CisJbGluZWJ5dGVzID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibGluZWJ5dGVzIiwKKwkJCQkJICBhbGwtPmluZm8udmFyLnhyZXMpOwogCWFsbC0+cGFyLmZic2l6ZSA9IFBBR0VfQUxJR04obGluZWJ5dGVzICogYWxsLT5pbmZvLnZhci55cmVzKTsKIAotCWFsbC0+cGFyLnNkZXYgPSBzZGV2OwotCWlmIChzZGV2KSB7Ci0JCXJwaHlzID0gc2Rldi0+cmVnX2FkZHJzWzBdLnBoeXNfYWRkcjsKLQkJYWxsLT5wYXIucGh5c2Jhc2UgPSBwaHlzID0gc2Rldi0+cmVnX2FkZHJzWzFdLnBoeXNfYWRkcjsKLQkJYWxsLT5wYXIuaW9zcGFjZSA9IHNkZXYtPnJlZ19hZGRyc1swXS53aGljaF9pbzsKLQotCQlhbGwtPnBhci5yZWdzID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgMCwKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgY2cxNF9yZWdzKSwKLQkJCQkgICAgICJjZzE0IHJlZ3MiKTsKLQkJYWxsLT5wYXIuY2x1dCA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIENHMTRfQ0xVVDEsCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IGNnMTRfY2x1dCksCi0JCQkJICAgICAiY2cxNCBjbHV0Iik7Ci0JCWFsbC0+cGFyLmN1cnNvciA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIENHMTRfQ1VSU09SUkVHUywKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgY2cxNF9jdXJzb3IpLAotCQkJCSAgICAgImNnMTQgY3Vyc29yIik7Ci0JCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMV0sIDAsCi0JCQkJICAgICBhbGwtPnBhci5mYnNpemUsICJjZzE0IHJhbSIpOworCWlmICghc3RyY21wKGRwLT5wYXJlbnQtPm5hbWUsICJzYnVzIikgfHwKKwkgICAgIXN0cmNtcChkcC0+cGFyZW50LT5uYW1lLCAic2JpIikpIHsKKwkJYWxsLT5wYXIucGh5c2Jhc2UgPSBvcC0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJCWFsbC0+cGFyLmlvc3BhY2UgPSBvcC0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFM7CiAJfSBlbHNlIHsKLQkJcnBoeXMgPSBfX2dldF9waHlzKGJhc2VzWzBdKTsKLQkJYWxsLT5wYXIucGh5c2Jhc2UgPSBwaHlzID0gX19nZXRfcGh5cyhiYXNlc1sxXSk7Ci0JCWFsbC0+cGFyLmlvc3BhY2UgPSBfX2dldF9pb3NwYWNlKGJhc2VzWzBdKTsKLQkJYWxsLT5wYXIucmVncyA9IChzdHJ1Y3QgY2cxNF9yZWdzIF9faW9tZW0gKikodW5zaWduZWQgbG9uZyliYXNlc1swXTsKLQkJYWxsLT5wYXIuY2x1dCA9IChzdHJ1Y3QgY2cxNF9jbHV0IF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpYmFzZXNbMF0gKwotCQkJCQkJICAgICBDRzE0X0NMVVQxKTsKLQkJYWxsLT5wYXIuY3Vyc29yID0KLQkJCShzdHJ1Y3QgY2cxNF9jdXJzb3IgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyliYXNlc1swXSArCi0JCQkJCSAgICAgICBDRzE0X0NVUlNPUlJFR1MpOwotCi0JCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IChjaGFyIF9faW9tZW0gKikodW5zaWduZWQgbG9uZyliYXNlc1sxXTsKKwkJYWxsLT5wYXIucGh5c2Jhc2UgPSBvcC0+cmVzb3VyY2VbMV0uc3RhcnQ7CisJCWFsbC0+cGFyLmlvc3BhY2UgPSBvcC0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFM7CiAJfQogCi0JcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAicmVnIiwgKGNoYXIgKikgJmJhc2VzWzBdLCBzaXplb2YoYmFzZXMpKTsKLQlpc184bWIgPSAoYmFzZXNbNV0gPT0gMHg4MDAwMDApOworCWFsbC0+cGFyLnJlZ3MgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBjZzE0X3JlZ3MpLCAiY2cxNCByZWdzIik7CisJYWxsLT5wYXIuY2x1dCA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgQ0cxNF9DTFVUMSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGNnMTRfY2x1dCksICJjZzE0IGNsdXQiKTsKKwlhbGwtPnBhci5jdXJzb3IgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIENHMTRfQ1VSU09SUkVHUywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGNnMTRfY3Vyc29yKSwgImNnMTQgY3Vyc29yIik7CiAKLQlpZiAoc2l6ZW9mKGFsbC0+cGFyLm1tYXBfbWFwKSAhPSBzaXplb2YoX19jZzE0X21tYXBfbWFwKSkgewotCQlleHRlcm4gdm9pZCBfX2NnMTRfbW1hcF9zaXplZF93cm9uZ2x5KHZvaWQpOworCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVsxXSwgMCwKKwkJCQkJICAgYWxsLT5wYXIuZmJzaXplLCAiY2cxNCByYW0iKTsKIAotCQlfX2NnMTRfbW1hcF9zaXplZF93cm9uZ2x5KCk7Ci0JfQorCWlmICghYWxsLT5wYXIucmVncyB8fCAhYWxsLT5wYXIuY2x1dCB8fCAhYWxsLT5wYXIuY3Vyc29yIHx8CisJICAgICFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpCisJCWNnMTRfdW5tYXBfcmVncyhhbGwpOworCisJaXNfOG1iID0gKCgob3AtPnJlc291cmNlWzFdLmVuZCAtIG9wLT5yZXNvdXJjZVsxXS5zdGFydCkgKyAxKSA9PQorCQkgICg4ICogMTAyNCAqIDEwMjQpKTsKKworCUJVSUxEX0JVR19PTihzaXplb2YoYWxsLT5wYXIubW1hcF9tYXApICE9IHNpemVvZihfX2NnMTRfbW1hcF9tYXApKTsKIAkJCi0JbWVtY3B5KCZhbGwtPnBhci5tbWFwX21hcCwgJl9fY2cxNF9tbWFwX21hcCwgc2l6ZW9mKGFsbC0+cGFyLm1tYXBfbWFwKSk7CisJbWVtY3B5KCZhbGwtPnBhci5tbWFwX21hcCwgJl9fY2cxNF9tbWFwX21hcCwKKwkgICAgICAgc2l6ZW9mKGFsbC0+cGFyLm1tYXBfbWFwKSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQ0cxNF9NTUFQX0VOVFJJRVM7IGkrKykgewogCQlzdHJ1Y3Qgc2J1c19tbWFwX21hcCAqbWFwID0gJmFsbC0+cGFyLm1tYXBfbWFwW2ldOwogCiAJCWlmICghbWFwLT5zaXplKQogCQkJYnJlYWs7CiAJCWlmIChtYXAtPnBvZmYgJiAweDgwMDAwMDAwKQotCQkJbWFwLT5wb2ZmID0gKG1hcC0+cG9mZiAmIDB4N2ZmZmZmZmYpICsgcnBoeXMgLSBwaHlzOworCQkJbWFwLT5wb2ZmID0gKG1hcC0+cG9mZiAmIDB4N2ZmZmZmZmYpICsKKwkJCQkob3AtPnJlc291cmNlWzBdLnN0YXJ0IC0KKwkJCQkgb3AtPnJlc291cmNlWzFdLnN0YXJ0KTsKIAkJaWYgKGlzXzhtYiAmJgogCQkgICAgbWFwLT5zaXplID49IDB4MTAwMDAwICYmCiAJCSAgICBtYXAtPnNpemUgPD0gMHg0MDAwMDApCkBAIC01NjQsODQgKzU0MSw4NyBAQAogCV9fY2cxNF9yZXNldCgmYWxsLT5wYXIpOwogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwLCAyNTYsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2cxNDogQ291bGQgbm90IGFsbG9jYXRlIGNvbG9yIG1hcC5cbiIpOworCQljZzE0X3VubWFwX3JlZ3MoYWxsKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZmJfc2V0X2NtYXAoJmFsbC0+aW5mby5jbWFwLCAmYWxsLT5pbmZvKTsKIAotCWNnMTRfaW5pdF9maXgoJmFsbC0+aW5mbywgbGluZWJ5dGVzKTsKKwljZzE0X2luaXRfZml4KCZhbGwtPmluZm8sIGxpbmVieXRlcywgZHApOwogCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNnMTQ6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlci5cbiIpOworCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWlmIChlcnIgPCAwKSB7CiAJCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOworCQljZzE0X3VubWFwX3JlZ3MoYWxsKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyOwogCX0KIAotCWxpc3RfYWRkKCZhbGwtPmxpc3QsICZjZzE0X2xpc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgYWxsKTsKIAotCXByaW50aygiY2cxNDogY2dmb3VydGVlbiBhdCAlbHg6JWx4LCAlZE1CXG4iLAotCSAgICAgICBhbGwtPnBhci5pb3NwYWNlLCBhbGwtPnBhci5waHlzYmFzZSwgYWxsLT5wYXIucmFtc2l6ZSA+PiAyMCk7CisJcHJpbnRrKCIlczogY2dmb3VydGVlbiBhdCAlbHg6JWx4LCAlZE1CXG4iLAorCSAgICAgICBkcC0+ZnVsbF9uYW1lLAorCSAgICAgICBhbGwtPnBhci5pb3NwYWNlLCBhbGwtPnBhci5waHlzYmFzZSwKKwkgICAgICAgYWxsLT5wYXIucmFtc2l6ZSA+PiAyMCk7CiAKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgY2cxNF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKCZkZXYtPmRldik7CisKKwlyZXR1cm4gY2cxNF9pbml0X29uZShvcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNnMTRfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKKworCWNnMTRfdW5tYXBfcmVncyhhbGwpOworCisJa2ZyZWUoYWxsKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNnMTRfbWF0Y2hbXSA9IHsKKwl7CisJCS5uYW1lID0gImNnZm91cnRlZW4iLAorCX0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgY2cxNF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGNnMTRfZHJpdmVyID0geworCS5uYW1lCQk9ICJjZzE0IiwKKwkubWF0Y2hfdGFibGUJPSBjZzE0X21hdGNoLAorCS5wcm9iZQkJPSBjZzE0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoY2cxNF9yZW1vdmUpLAorfTsKKwogaW50IF9faW5pdCBjZzE0X2luaXQodm9pZCkKIHsKLQlzdHJ1Y3Qgc2J1c19idXMgKnNidXM7Ci0Jc3RydWN0IHNidXNfZGV2ICpzZGV2OwotCiAJaWYgKGZiX2dldF9vcHRpb25zKCJjZzE0ZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLSNpZmRlZiBDT05GSUdfU1BBUkMzMgotCXsKLQkJaW50IHJvb3QsIG5vZGU7Ci0KLQkJcm9vdCA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOwotCQlyb290ID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhyb290LCAib2JpbyIpOwotCQlpZiAocm9vdCkgewotCQkJbm9kZSA9IHByb21fc2VhcmNoc2libGluZ3MocHJvbV9nZXRjaGlsZChyb290KSwKLQkJCQkJCSAgICJjZ2ZvdXJ0ZWVuIik7Ci0JCQlpZiAobm9kZSkKLQkJCQljZzE0X2luaXRfb25lKE5VTEwsIG5vZGUsIHJvb3QpOwotCQl9Ci0JfQotI2VuZGlmCi0JZm9yX2FsbF9zYnVzZGV2KHNkZXYsIHNidXMpIHsKLQkJaWYgKCFzdHJjbXAoc2Rldi0+cHJvbV9uYW1lLCAiY2dmb3VydGVlbiIpKQotCQkJY2cxNF9pbml0X29uZShzZGV2LCBzZGV2LT5wcm9tX25vZGUsIHNidXMtPnByb21fbm9kZSk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmY2cxNF9kcml2ZXIsICZvZl9idXNfdHlwZSk7CiB9CiAKIHZvaWQgX19leGl0IGNnMTRfZXhpdCh2b2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmNnMTRfbGlzdCkgewotCQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKmFsbCksIGxpc3QpOwotCi0JCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7Ci0JCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOwotCQlrZnJlZShhbGwpOwotCX0KLX0KLQotaW50IF9faW5pdAotY2cxNF9zZXR1cChjaGFyICphcmcpCi17Ci0JLyogTm8gY21kbGluZSBvcHRpb25zIHlldC4uLiAqLwotCXJldHVybiAwOworCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZjZzE0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNnMTRfaW5pdCk7Ci0KLSNpZmRlZiBNT0RVTEUKIG1vZHVsZV9leGl0KGNnMTRfZXhpdCk7Ci0jZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIENHZm91cnRlZW4gY2hpcHNldHMiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4iKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2czLmMgYi9kcml2ZXJzL3ZpZGVvL2NnMy5jCmluZGV4IDNkZTZlMWIuLjljOGM3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2czLmMKKysrIGIvZHJpdmVycy92aWRlby9jZzMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNnMy5jOiBDR1RIUkVFIGZyYW1lIGJ1ZmZlciBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk4IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQogICogQ29weXJpZ2h0IChDKSAxOTk2IE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQG51Y2xlY3UudW5hbS5teCkKICAqIENvcHlyaWdodCAoQykgMTk5NyBFZGRpZSBDLiBEb3N0IChlY2RAc2t5bmV0LmJlKQpAQCAtMTksOCArMTksOSBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2J1cy5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9mYmlvLmg+CiAKICNpbmNsdWRlICJzYnVzbGliLmgiCkBAIC04MCwzMCArODEsMzAgQEAKIH07CiAKIHN0cnVjdCBidF9yZWdzIHsKLQl2b2xhdGlsZSB1MzIgYWRkcjsKLQl2b2xhdGlsZSB1MzIgY29sb3JfbWFwOwotCXZvbGF0aWxlIHUzMiBjb250cm9sOwotCXZvbGF0aWxlIHUzMiBjdXJzb3I7CisJdTMyIGFkZHI7CisJdTMyIGNvbG9yX21hcDsKKwl1MzIgY29udHJvbDsKKwl1MzIgY3Vyc29yOwogfTsKIAogc3RydWN0IGNnM19yZWdzIHsKIAlzdHJ1Y3QgYnRfcmVncwljbWFwOwotCXZvbGF0aWxlIHU4CWNvbnRyb2w7Ci0Jdm9sYXRpbGUgdTgJc3RhdHVzOwotCXZvbGF0aWxlIHU4CWN1cnNvcl9zdGFydDsKLQl2b2xhdGlsZSB1OAljdXJzb3JfZW5kOwotCXZvbGF0aWxlIHU4CWhfYmxhbmtfc3RhcnQ7Ci0Jdm9sYXRpbGUgdTgJaF9ibGFua19lbmQ7Ci0Jdm9sYXRpbGUgdTgJaF9zeW5jX3N0YXJ0OwotCXZvbGF0aWxlIHU4CWhfc3luY19lbmQ7Ci0Jdm9sYXRpbGUgdTgJY29tcF9zeW5jX2VuZDsKLQl2b2xhdGlsZSB1OAl2X2JsYW5rX3N0YXJ0X2hpZ2g7Ci0Jdm9sYXRpbGUgdTgJdl9ibGFua19zdGFydF9sb3c7Ci0Jdm9sYXRpbGUgdTgJdl9ibGFua19lbmQ7Ci0Jdm9sYXRpbGUgdTgJdl9zeW5jX3N0YXJ0OwotCXZvbGF0aWxlIHU4CXZfc3luY19lbmQ7Ci0Jdm9sYXRpbGUgdTgJeGZlcl9ob2xkb2ZmX3N0YXJ0OwotCXZvbGF0aWxlIHU4CXhmZXJfaG9sZG9mZl9lbmQ7CisJdTgJY29udHJvbDsKKwl1OAlzdGF0dXM7CisJdTgJY3Vyc29yX3N0YXJ0OworCXU4CWN1cnNvcl9lbmQ7CisJdTgJaF9ibGFua19zdGFydDsKKwl1OAloX2JsYW5rX2VuZDsKKwl1OAloX3N5bmNfc3RhcnQ7CisJdTgJaF9zeW5jX2VuZDsKKwl1OAljb21wX3N5bmNfZW5kOworCXU4CXZfYmxhbmtfc3RhcnRfaGlnaDsKKwl1OAl2X2JsYW5rX3N0YXJ0X2xvdzsKKwl1OAl2X2JsYW5rX2VuZDsKKwl1OAl2X3N5bmNfc3RhcnQ7CisJdTgJdl9zeW5jX2VuZDsKKwl1OAl4ZmVyX2hvbGRvZmZfc3RhcnQ7CisJdTgJeGZlcl9ob2xkb2ZmX2VuZDsKIH07CiAKIC8qIE9mZnNldCBvZiBpbnRlcmVzdGluZyBzdHJ1Y3R1cmVzIGluIHRoZSBPQklPIHNwYWNlICovCkBAIC0xMjAsOSArMTIxLDggQEAKICNkZWZpbmUgQ0czX0ZMQUdfUkRJCQkweDAwMDAwMDAyCiAKIAl1bnNpZ25lZCBsb25nCQlwaHlzYmFzZTsKKwl1bnNpZ25lZCBsb25nCQl3aGljaF9pbzsKIAl1bnNpZ25lZCBsb25nCQlmYnNpemU7Ci0KLQlzdHJ1Y3Qgc2J1c19kZXYJCSpzZGV2OwogfTsKIAogLyoqCkBAIC0yMzUsNyArMjM1LDcgQEAKIAogCXJldHVybiBzYnVzZmJfbW1hcF9oZWxwZXIoY2czX21tYXBfbWFwLAogCQkJCSAgcGFyLT5waHlzYmFzZSwgcGFyLT5mYnNpemUsCi0JCQkJICBwYXItPnNkZXYtPnJlZ19hZGRyc1swXS53aGljaF9pbywKKwkJCQkgIHBhci0+d2hpY2hfaW8sCiAJCQkJICB2bWEpOwogfQogCkBAIC0yNTIsMTEgKzI1Miw5IEBACiAgKi8KIAogc3RhdGljIHZvaWQKLWNnM19pbml0X2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGxpbmVieXRlcykKK2NnM19pbml0X2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGxpbmVieXRlcywgc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlzdHJ1Y3QgY2czX3BhciAqcGFyID0gKHN0cnVjdCBjZzNfcGFyICopaW5mby0+cGFyOwotCi0Jc3RybGNweShpbmZvLT5maXguaWQsIHBhci0+c2Rldi0+cHJvbV9uYW1lLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CisJc3RybGNweShpbmZvLT5maXguaWQsIGRwLT5uYW1lLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CiAKIAlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwpAQCAtMjY3LDE2ICsyNjUsMTUgQEAKIH0KIAogc3RhdGljIHZvaWQgY2czX3JkaV9tYXliZV9maXh1cF92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkJICAgIHN0cnVjdCBzYnVzX2RldiAqc2RldikKKwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQljaGFyIGJ1ZmZlcls0MF07CisJY2hhciAqcGFyYW1zOwogCWNoYXIgKnA7CiAJaW50IHd3LCBoaDsKIAotCSpidWZmZXIgPSAwOwotCXByb21fZ2V0c3RyaW5nKHNkZXYtPnByb21fbm9kZSwgInBhcmFtcyIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCWlmICgqYnVmZmVyKSB7Ci0JCXd3ID0gc2ltcGxlX3N0cnRvdWwoYnVmZmVyLCAmcCwgMTApOworCXBhcmFtcyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInBhcmFtcyIsIE5VTEwpOworCWlmIChwYXJhbXMpIHsKKwkJd3cgPSBzaW1wbGVfc3RydG91bChwYXJhbXMsICZwLCAxMCk7CiAJCWlmICh3dyAmJiAqcCA9PSAneCcpIHsKIAkJCWhoID0gc2ltcGxlX3N0cnRvdWwocCArIDEsICZwLCAxMCk7CiAJCQlpZiAoaGggJiYgKnAgPT0gJy0nKSB7CkBAIC0zNDgsMTEgKzM0NSwxMSBAQAogCQlzYnVzX3dyaXRlYihwWzFdLCByZWdwKTsKIAl9CiAJZm9yIChwID0gY2czX2RhY3ZhbHM7ICpwOyBwICs9IDIpIHsKLQkJdm9sYXRpbGUgdTggX19pb21lbSAqcmVncDsKKwkJdTggX19pb21lbSAqcmVncDsKIAotCQlyZWdwID0gKHZvbGF0aWxlIHU4IF9faW9tZW0gKikmcGFyLT5yZWdzLT5jbWFwLmFkZHI7CisJCXJlZ3AgPSAodTggX19pb21lbSAqKSZwYXItPnJlZ3MtPmNtYXAuYWRkcjsKIAkJc2J1c193cml0ZWIocFswXSwgcmVncCk7Ci0JCXJlZ3AgPSAodm9sYXRpbGUgdTggX19pb21lbSAqKSZwYXItPnJlZ3MtPmNtYXAuY29udHJvbDsKKwkJcmVncCA9ICh1OCBfX2lvbWVtICopJnBhci0+cmVncy0+Y21hcC5jb250cm9sOwogCQlzYnVzX3dyaXRlYihwWzFdLCByZWdwKTsKIAl9CiB9CkBAIC0zNjAsMTI5ICszNTcsMTM3IEBACiBzdHJ1Y3QgYWxsX2luZm8gewogCXN0cnVjdCBmYl9pbmZvIGluZm87CiAJc3RydWN0IGNnM19wYXIgcGFyOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07Ci1zdGF0aWMgTElTVF9IRUFEKGNnM19saXN0KTsKIAotc3RhdGljIHZvaWQgY2czX2luaXRfb25lKHN0cnVjdCBzYnVzX2RldiAqc2RldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNnM19pbml0X29uZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CiAJc3RydWN0IGFsbF9pbmZvICphbGw7Ci0JaW50IGxpbmVieXRlczsKKwlpbnQgbGluZWJ5dGVzLCBlcnI7CiAKLQlhbGwgPSBrbWFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhbGwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjZzM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYWxsLCAwLCBzaXplb2YoKmFsbCkpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFsbC0+bGlzdCk7CisJYWxsID0ga3phbGxvYyhzaXplb2YoKmFsbCksIEdGUF9LRVJORUwpOworCWlmICghYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZhbGwtPnBhci5sb2NrKTsKLQlhbGwtPnBhci5zZGV2ID0gc2RldjsKIAotCWFsbC0+cGFyLnBoeXNiYXNlID0gc2Rldi0+cmVnX2FkZHJzWzBdLnBoeXNfYWRkcjsKKwlhbGwtPnBhci5waHlzYmFzZSA9IG9wLT5yZXNvdXJjZVswXS5zdGFydDsKKwlhbGwtPnBhci53aGljaF9pbyA9IG9wLT5yZXNvdXJjZVswXS5mbGFncyAmIElPUkVTT1VSQ0VfQklUUzsKIAotCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgc2Rldi0+cHJvbV9ub2RlLCA4KTsKKwlzYnVzZmJfZmlsbF92YXIoJmFsbC0+aW5mby52YXIsIGRwLT5ub2RlLCA4KTsKIAlhbGwtPmluZm8udmFyLnJlZC5sZW5ndGggPSA4OwogCWFsbC0+aW5mby52YXIuZ3JlZW4ubGVuZ3RoID0gODsKIAlhbGwtPmluZm8udmFyLmJsdWUubGVuZ3RoID0gODsKLQlpZiAoIXN0cmNtcChzZGV2LT5wcm9tX25hbWUsICJjZ1JESSIpKQorCWlmICghc3RyY21wKGRwLT5uYW1lLCAiY2dSREkiKSkKIAkJYWxsLT5wYXIuZmxhZ3MgfD0gQ0czX0ZMQUdfUkRJOwogCWlmIChhbGwtPnBhci5mbGFncyAmIENHM19GTEFHX1JESSkKLQkJY2czX3JkaV9tYXliZV9maXh1cF92YXIoJmFsbC0+aW5mby52YXIsIHNkZXYpOworCQljZzNfcmRpX21heWJlX2ZpeHVwX3ZhcigmYWxsLT5pbmZvLnZhciwgZHApOwogCi0JbGluZWJ5dGVzID0gcHJvbV9nZXRpbnRkZWZhdWx0KHNkZXYtPnByb21fbm9kZSwgImxpbmVieXRlcyIsCi0JCQkJICAgICAgIGFsbC0+aW5mby52YXIueHJlcyk7CisJbGluZWJ5dGVzID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibGluZWJ5dGVzIiwKKwkJCQkJICBhbGwtPmluZm8udmFyLnhyZXMpOwogCWFsbC0+cGFyLmZic2l6ZSA9IFBBR0VfQUxJR04obGluZWJ5dGVzICogYWxsLT5pbmZvLnZhci55cmVzKTsKIAotCWFsbC0+cGFyLnJlZ3MgPSBzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCBDRzNfUkVHU19PRkZTRVQsCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgY2czX3JlZ3MpLCAiY2czIHJlZ3MiKTsKKwlhbGwtPnBhci5yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCBDRzNfUkVHU19PRkZTRVQsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBjZzNfcmVncyksICJjZzMgcmVncyIpOwogCiAJYWxsLT5pbmZvLmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJYWxsLT5pbmZvLmZib3BzID0gJmNnM19vcHM7Ci0jaWZkZWYgQ09ORklHX1NQQVJDMzIKLQlhbGwtPmluZm8uc2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopCi0JCXByb21fZ2V0aW50ZGVmYXVsdChzZGV2LT5wcm9tX25vZGUsICJhZGRyZXNzIiwgMCk7Ci0jZW5kaWYKLQlpZiAoIWFsbC0+aW5mby5zY3JlZW5fYmFzZSkKLQkJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0KLQkJCXNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIENHM19SQU1fT0ZGU0VULAotCQkJCSAgICAgYWxsLT5wYXIuZmJzaXplLCAiY2czIHJhbSIpOworCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9CisJCW9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgQ0czX1JBTV9PRkZTRVQsCisJCQkgICBhbGwtPnBhci5mYnNpemUsICJjZzMgcmFtIik7CiAJYWxsLT5pbmZvLnBhciA9ICZhbGwtPnBhcjsKIAogCWNnM19ibGFuaygwLCAmYWxsLT5pbmZvKTsKIAotCWlmICghcHJvbV9nZXRib29sKHNkZXYtPnByb21fbm9kZSwgIndpZHRoIikpCisJaWYgKCFvZl9maW5kX3Byb3BlcnR5KGRwLCAid2lkdGgiLCBOVUxMKSkKIAkJY2czX2RvX2RlZmF1bHRfbW9kZSgmYWxsLT5wYXIpOwogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwLCAyNTYsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2czOiBDb3VsZCBub3QgYWxsb2NhdGUgY29sb3IgbWFwLlxuIik7CisJCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBjZzNfcmVncykpOworCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZmJfc2V0X2NtYXAoJmFsbC0+aW5mby5jbWFwLCAmYWxsLT5pbmZvKTsKIAotCWNnM19pbml0X2ZpeCgmYWxsLT5pbmZvLCBsaW5lYnl0ZXMpOworCWNnM19pbml0X2ZpeCgmYWxsLT5pbmZvLCBsaW5lYnl0ZXMsIGRwKTsKIAotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjZzM6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlci5cbiIpOworCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWlmIChlcnIgPCAwKSB7CiAJCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOworCQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgY2czX3JlZ3MpKTsKKwkJb2ZfaW91bm1hcChhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CiAJCWtmcmVlKGFsbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlsaXN0X2FkZCgmYWxsLT5saXN0LCAmY2czX2xpc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgYWxsKTsKIAotCXByaW50aygiY2czOiAlcyBhdCAlbHg6JWx4XG4iLAotCSAgICAgICBzZGV2LT5wcm9tX25hbWUsCi0JICAgICAgIChsb25nKSBzZGV2LT5yZWdfYWRkcnNbMF0ud2hpY2hfaW8sCi0JICAgICAgIChsb25nKSBzZGV2LT5yZWdfYWRkcnNbMF0ucGh5c19hZGRyKTsKKwlwcmludGsoIiVzOiBjZzMgYXQgJWx4OiVseFxuIiwKKwkgICAgICAgZHAtPmZ1bGxfbmFtZSwgYWxsLT5wYXIud2hpY2hfaW8sIGFsbC0+cGFyLnBoeXNiYXNlKTsKKworCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IGNnM19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjZzNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlzdHJ1Y3Qgc2J1c19idXMgKnNidXM7Ci0Jc3RydWN0IHNidXNfZGV2ICpzZGV2OworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKCZkZXYtPmRldik7CiAKKwlyZXR1cm4gY2czX2luaXRfb25lKG9wKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgY2czX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CisJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CisKKwlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgY2czX3JlZ3MpKTsKKwlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKKworCWtmcmVlKGFsbCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjZzNfbWF0Y2hbXSA9IHsKKwl7CisJCS5uYW1lID0gImNndGhyZWUiLAorCX0sCisJeworCQkubmFtZSA9ICJjZ1JESSIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBjZzNfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBjZzNfZHJpdmVyID0geworCS5uYW1lCQk9ICJjZzMiLAorCS5tYXRjaF90YWJsZQk9IGNnM19tYXRjaCwKKwkucHJvYmUJCT0gY2czX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoY2czX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjZzNfaW5pdCh2b2lkKQorewogCWlmIChmYl9nZXRfb3B0aW9ucygiY2czZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlmb3JfYWxsX3NidXNkZXYoc2Rldiwgc2J1cykgewotCQlpZiAoIXN0cmNtcChzZGV2LT5wcm9tX25hbWUsICJjZ3RocmVlIikgfHwKLQkJICAgICFzdHJjbXAoc2Rldi0+cHJvbV9uYW1lLCAiY2dSREkiKSkKLQkJCWNnM19pbml0X29uZShzZGV2KTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZjZzNfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOwogfQogCi12b2lkIF9fZXhpdCBjZzNfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNnM19leGl0KHZvaWQpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmY2czX2xpc3QpIHsKLQkJc3RydWN0IGFsbF9pbmZvICphbGwgPSBsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCphbGwpLCBsaXN0KTsKLQotCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOwotCQlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKLQkJa2ZyZWUoYWxsKTsKLQl9Ci19Ci0KLWludCBfX2luaXQKLWNnM19zZXR1cChjaGFyICphcmcpCi17Ci0JLyogTm8gY21kbGluZSBvcHRpb25zIHlldC4uLiAqLwotCXJldHVybiAwOworCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZjZzNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY2czX2luaXQpOwotCi0jaWZkZWYgTU9EVUxFCiBtb2R1bGVfZXhpdChjZzNfZXhpdCk7Ci0jZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIENHdGhyZWUgY2hpcHNldHMiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4iKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2c2LmMgYi9kcml2ZXJzL3ZpZGVvL2NnNi5jCmluZGV4IDdhYWI5MWUuLjY0MTQ2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2c2LmMKKysrIGIvZHJpdmVycy92aWRlby9jZzYuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNnNi5jOiBDR1NJWCAoR1gsIEdYcGx1cywgVEdYKSBmcmFtZSBidWZmZXIgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5OCBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKICAqIENvcHlyaWdodCAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRWRkaWUgQy4gRG9zdCAoZWNkQHNreW5ldC5iZSkKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NidXMuaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vZmJpby5oPgogCiAjaW5jbHVkZSAic2J1c2xpYi5oIgpAQCAtMTY0LDg5ICsxNjQsODkgQEAKIAogLyogVGhlIGNvbnRlbnRzIGFyZSB1bmtub3duICovCiBzdHJ1Y3QgY2c2X3RlYyB7Ci0Jdm9sYXRpbGUgaW50IHRlY19tYXRyaXg7Ci0Jdm9sYXRpbGUgaW50IHRlY19jbGlwOwotCXZvbGF0aWxlIGludCB0ZWNfdmRjOworCWludCB0ZWNfbWF0cml4OworCWludCB0ZWNfY2xpcDsKKwlpbnQgdGVjX3ZkYzsKIH07CiAKIHN0cnVjdCBjZzZfdGhjIHsKLSAgICAgICAgdWludCB0aGNfcGFkMFs1MTJdOwotCXZvbGF0aWxlIHVpbnQgdGhjX2hzOwkJLyogaHN5bmMgdGltaW5nICovCi0Jdm9sYXRpbGUgdWludCB0aGNfaHNkdnM7Ci0Jdm9sYXRpbGUgdWludCB0aGNfaGQ7Ci0Jdm9sYXRpbGUgdWludCB0aGNfdnM7CQkvKiB2c3luYyB0aW1pbmcgKi8KLQl2b2xhdGlsZSB1aW50IHRoY192ZDsKLQl2b2xhdGlsZSB1aW50IHRoY19yZWZyZXNoOwotCXZvbGF0aWxlIHVpbnQgdGhjX21pc2M7Ci0JdWludCB0aGNfcGFkMVs1Nl07Ci0Jdm9sYXRpbGUgdWludCB0aGNfY3Vyc3h5OwkvKiBjdXJzb3IgeCx5IHBvc2l0aW9uICgxNiBiaXRzIGVhY2gpICovCi0Jdm9sYXRpbGUgdWludCB0aGNfY3Vyc21hc2tbMzJdOwkvKiBjdXJzb3IgbWFzayBiaXRzICovCi0Jdm9sYXRpbGUgdWludCB0aGNfY3Vyc2JpdHNbMzJdOwkvKiB3aGF0IHRvIHNob3cgd2hlcmUgbWFzayBlbmFibGVkICovCisgICAgICAgIHUzMiB0aGNfcGFkMFs1MTJdOworCXUzMiB0aGNfaHM7CQkvKiBoc3luYyB0aW1pbmcgKi8KKwl1MzIgdGhjX2hzZHZzOworCXUzMiB0aGNfaGQ7CisJdTMyIHRoY192czsJCS8qIHZzeW5jIHRpbWluZyAqLworCXUzMiB0aGNfdmQ7CisJdTMyIHRoY19yZWZyZXNoOworCXUzMiB0aGNfbWlzYzsKKwl1MzIgdGhjX3BhZDFbNTZdOworCXUzMiB0aGNfY3Vyc3h5OwkvKiBjdXJzb3IgeCx5IHBvc2l0aW9uICgxNiBiaXRzIGVhY2gpICovCisJdTMyIHRoY19jdXJzbWFza1szMl07CS8qIGN1cnNvciBtYXNrIGJpdHMgKi8KKwl1MzIgdGhjX2N1cnNiaXRzWzMyXTsJLyogd2hhdCB0byBzaG93IHdoZXJlIG1hc2sgZW5hYmxlZCAqLwogfTsKIAogc3RydWN0IGNnNl9mYmMgewotCXUzMgkJeHh4MFsxXTsKLQl2b2xhdGlsZSB1MzIJbW9kZTsKLQl2b2xhdGlsZSB1MzIJY2xpcDsKLQl1MzIJCXh4eDFbMV07CSAgICAKLQl2b2xhdGlsZSB1MzIJczsKLQl2b2xhdGlsZSB1MzIJZHJhdzsKLQl2b2xhdGlsZSB1MzIJYmxpdDsKLQl2b2xhdGlsZSB1MzIJZm9udDsKLQl1MzIJCXh4eDJbMjRdOwotCXZvbGF0aWxlIHUzMgl4MCwgeTAsIHowLCBjb2xvcjA7Ci0Jdm9sYXRpbGUgdTMyCXgxLCB5MSwgejEsIGNvbG9yMTsKLQl2b2xhdGlsZSB1MzIJeDIsIHkyLCB6MiwgY29sb3IyOwotCXZvbGF0aWxlIHUzMgl4MywgeTMsIHozLCBjb2xvcjM7Ci0Jdm9sYXRpbGUgdTMyCW9mZngsIG9mZnk7Ci0JdTMyCQl4eHgzWzJdOwotCXZvbGF0aWxlIHUzMglpbmN4LCBpbmN5OwotCXUzMgkJeHh4NFsyXTsKLQl2b2xhdGlsZSB1MzIJY2xpcG1pbngsIGNsaXBtaW55OwotCXUzMgkJeHh4NVsyXTsKLQl2b2xhdGlsZSB1MzIJY2xpcG1heHgsIGNsaXBtYXh5OwotCXUzMgkJeHh4NlsyXTsKLQl2b2xhdGlsZSB1MzIJZmc7Ci0Jdm9sYXRpbGUgdTMyCWJnOwotCXZvbGF0aWxlIHUzMglhbHU7Ci0Jdm9sYXRpbGUgdTMyCXBtOwotCXZvbGF0aWxlIHUzMglwaXhlbG07Ci0JdTMyCQl4eHg3WzJdOwotCXZvbGF0aWxlIHUzMglwYXRhbGlnbjsKLQl2b2xhdGlsZSB1MzIJcGF0dGVybls4XTsKLQl1MzIJCXh4eDhbNDMyXTsKLQl2b2xhdGlsZSB1MzIJYXBvaW50eCwgYXBvaW50eSwgYXBvaW50ejsKLQl1MzIJCXh4eDlbMV07Ci0Jdm9sYXRpbGUgdTMyCXJwb2ludHgsIHJwb2ludHksIHJwb2ludHo7Ci0JdTMyCQl4eHgxMFs1XTsKLQl2b2xhdGlsZSB1MzIJcG9pbnRyLCBwb2ludGcsIHBvaW50YiwgcG9pbnRhOwotCXZvbGF0aWxlIHUzMglhbGluZXgsIGFsaW5leSwgYWxpbmV6OwotCXUzMgkJeHh4MTFbMV07Ci0Jdm9sYXRpbGUgdTMyCXJsaW5leCwgcmxpbmV5LCBybGluZXo7Ci0JdTMyCQl4eHgxMls1XTsKLQl2b2xhdGlsZSB1MzIJbGluZXIsIGxpbmVnLCBsaW5lYiwgbGluZWE7Ci0Jdm9sYXRpbGUgdTMyCWF0cml4LCBhdHJpeSwgYXRyaXo7Ci0JdTMyCQl4eHgxM1sxXTsKLQl2b2xhdGlsZSB1MzIJcnRyaXgsIHJ0cml5LCBydHJpejsKLQl1MzIJCXh4eDE0WzVdOwotCXZvbGF0aWxlIHUzMgl0cmlyLCB0cmlnLCB0cmliLCB0cmlhOwotCXZvbGF0aWxlIHUzMglhcXVhZHgsIGFxdWFkeSwgYXF1YWR6OwotCXUzMgkJeHh4MTVbMV07Ci0Jdm9sYXRpbGUgdTMyCXJxdWFkeCwgcnF1YWR5LCBycXVhZHo7Ci0JdTMyCQl4eHgxNls1XTsKLQl2b2xhdGlsZSB1MzIJcXVhZHIsIHF1YWRnLCBxdWFkYiwgcXVhZGE7Ci0Jdm9sYXRpbGUgdTMyCWFyZWN0eCwgYXJlY3R5LCBhcmVjdHo7Ci0JdTMyCQl4eHgxN1sxXTsKLQl2b2xhdGlsZSB1MzIJcnJlY3R4LCBycmVjdHksIHJyZWN0ejsKLQl1MzIJCXh4eDE4WzVdOwotCXZvbGF0aWxlIHUzMglyZWN0ciwgcmVjdGcsIHJlY3RiLCByZWN0YTsKKwl1MzIJeHh4MFsxXTsKKwl1MzIJbW9kZTsKKwl1MzIJY2xpcDsKKwl1MzIJeHh4MVsxXTsJICAgIAorCXUzMglzOworCXUzMglkcmF3OworCXUzMglibGl0OworCXUzMglmb250OworCXUzMgl4eHgyWzI0XTsKKwl1MzIJeDAsIHkwLCB6MCwgY29sb3IwOworCXUzMgl4MSwgeTEsIHoxLCBjb2xvcjE7CisJdTMyCXgyLCB5MiwgejIsIGNvbG9yMjsKKwl1MzIJeDMsIHkzLCB6MywgY29sb3IzOworCXUzMglvZmZ4LCBvZmZ5OworCXUzMgl4eHgzWzJdOworCXUzMglpbmN4LCBpbmN5OworCXUzMgl4eHg0WzJdOworCXUzMgljbGlwbWlueCwgY2xpcG1pbnk7CisJdTMyCXh4eDVbMl07CisJdTMyCWNsaXBtYXh4LCBjbGlwbWF4eTsKKwl1MzIJeHh4NlsyXTsKKwl1MzIJZmc7CisJdTMyCWJnOworCXUzMglhbHU7CisJdTMyCXBtOworCXUzMglwaXhlbG07CisJdTMyCXh4eDdbMl07CisJdTMyCXBhdGFsaWduOworCXUzMglwYXR0ZXJuWzhdOworCXUzMgl4eHg4WzQzMl07CisJdTMyCWFwb2ludHgsIGFwb2ludHksIGFwb2ludHo7CisJdTMyCXh4eDlbMV07CisJdTMyCXJwb2ludHgsIHJwb2ludHksIHJwb2ludHo7CisJdTMyCXh4eDEwWzVdOworCXUzMglwb2ludHIsIHBvaW50ZywgcG9pbnRiLCBwb2ludGE7CisJdTMyCWFsaW5leCwgYWxpbmV5LCBhbGluZXo7CisJdTMyCXh4eDExWzFdOworCXUzMglybGluZXgsIHJsaW5leSwgcmxpbmV6OworCXUzMgl4eHgxMls1XTsKKwl1MzIJbGluZXIsIGxpbmVnLCBsaW5lYiwgbGluZWE7CisJdTMyCWF0cml4LCBhdHJpeSwgYXRyaXo7CisJdTMyCXh4eDEzWzFdOworCXUzMglydHJpeCwgcnRyaXksIHJ0cml6OworCXUzMgl4eHgxNFs1XTsKKwl1MzIJdHJpciwgdHJpZywgdHJpYiwgdHJpYTsKKwl1MzIJYXF1YWR4LCBhcXVhZHksIGFxdWFkejsKKwl1MzIJeHh4MTVbMV07CisJdTMyCXJxdWFkeCwgcnF1YWR5LCBycXVhZHo7CisJdTMyCXh4eDE2WzVdOworCXUzMglxdWFkciwgcXVhZGcsIHF1YWRiLCBxdWFkYTsKKwl1MzIJYXJlY3R4LCBhcmVjdHksIGFyZWN0ejsKKwl1MzIJeHh4MTdbMV07CisJdTMyCXJyZWN0eCwgcnJlY3R5LCBycmVjdHo7CisJdTMyCXh4eDE4WzVdOworCXUzMglyZWN0ciwgcmVjdGcsIHJlY3RiLCByZWN0YTsKIH07CiAKIHN0cnVjdCBidF9yZWdzIHsKLQl2b2xhdGlsZSB1MzIgYWRkcjsKLQl2b2xhdGlsZSB1MzIgY29sb3JfbWFwOwotCXZvbGF0aWxlIHUzMiBjb250cm9sOwotCXZvbGF0aWxlIHUzMiBjdXJzb3I7CisJdTMyIGFkZHI7CisJdTMyIGNvbG9yX21hcDsKKwl1MzIgY29udHJvbDsKKwl1MzIgY3Vyc29yOwogfTsKIAogc3RydWN0IGNnNl9wYXIgewpAQCAtMjU1LDE1ICsyNTUsMTQgQEAKIAlzdHJ1Y3QgY2c2X2ZiYwkJX19pb21lbSAqZmJjOwogCXN0cnVjdCBjZzZfdGhjCQlfX2lvbWVtICp0aGM7CiAJc3RydWN0IGNnNl90ZWMJCV9faW9tZW0gKnRlYzsKLQl2b2xhdGlsZSB1MzIJCV9faW9tZW0gKmZoYzsKKwl1MzIJCQlfX2lvbWVtICpmaGM7CiAKIAl1MzIJCQlmbGFnczsKICNkZWZpbmUgQ0c2X0ZMQUdfQkxBTktFRAkweDAwMDAwMDAxCiAKIAl1bnNpZ25lZCBsb25nCQlwaHlzYmFzZTsKKwl1bnNpZ25lZCBsb25nCQl3aGljaF9pbzsKIAl1bnNpZ25lZCBsb25nCQlmYnNpemU7Ci0KLQlzdHJ1Y3Qgc2J1c19kZXYJCSpzZGV2OwogfTsKIAogc3RhdGljIGludCBjZzZfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKQEAgLTUyOSw4ICs1MjgsNyBAQAogCiAJcmV0dXJuIHNidXNmYl9tbWFwX2hlbHBlcihjZzZfbW1hcF9tYXAsCiAJCQkJICBwYXItPnBoeXNiYXNlLCBwYXItPmZic2l6ZSwKLQkJCQkgIHBhci0+c2Rldi0+cmVnX2FkZHJzWzBdLndoaWNoX2lvLAotCQkJCSAgdm1hKTsKKwkJCQkgIHBhci0+d2hpY2hfaW8sIHZtYSk7CiB9CiAKIHN0YXRpYyBpbnQgY2c2X2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTY1OCw2MiArNjU2LDc1IEBACiBzdHJ1Y3QgYWxsX2luZm8gewogCXN0cnVjdCBmYl9pbmZvIGluZm87CiAJc3RydWN0IGNnNl9wYXIgcGFyOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07Ci1zdGF0aWMgTElTVF9IRUFEKGNnNl9saXN0KTsKIAotc3RhdGljIHZvaWQgY2c2X2luaXRfb25lKHN0cnVjdCBzYnVzX2RldiAqc2RldikKK3N0YXRpYyB2b2lkIGNnNl91bm1hcF9yZWdzKHN0cnVjdCBhbGxfaW5mbyAqYWxsKQogeworCWlmIChhbGwtPnBhci5mYmMpCisJCW9mX2lvdW5tYXAoYWxsLT5wYXIuZmJjLCA0MDk2KTsKKwlpZiAoYWxsLT5wYXIudGVjKQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLnRlYywgc2l6ZW9mKHN0cnVjdCBjZzZfdGVjKSk7CisJaWYgKGFsbC0+cGFyLnRoYykKKwkJb2ZfaW91bm1hcChhbGwtPnBhci50aGMsIHNpemVvZihzdHJ1Y3QgY2c2X3RoYykpOworCWlmIChhbGwtPnBhci5idCkKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5idCwgc2l6ZW9mKHN0cnVjdCBidF9yZWdzKSk7CisJaWYgKGFsbC0+cGFyLmZoYykKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5maGMsIHNpemVvZih1MzIpKTsKKworCWlmIChhbGwtPmluZm8uc2NyZWVuX2Jhc2UpCisJCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjZzZfaW5pdF9vbmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOwogCXN0cnVjdCBhbGxfaW5mbyAqYWxsOwotCWludCBsaW5lYnl0ZXM7CisJaW50IGxpbmVieXRlcywgZXJyOwogCi0JYWxsID0ga21hbGxvYyhzaXplb2YoKmFsbCksIEdGUF9LRVJORUwpOwotCWlmICghYWxsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2c2OiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5LlxuIik7Ci0JCXJldHVybjsKLQl9Ci0JbWVtc2V0KGFsbCwgMCwgc2l6ZW9mKCphbGwpKTsKLQotCUlOSVRfTElTVF9IRUFEKCZhbGwtPmxpc3QpOworCWFsbCA9IGt6YWxsb2Moc2l6ZW9mKCphbGwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFsbCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2tfaW5pdCgmYWxsLT5wYXIubG9jayk7Ci0JYWxsLT5wYXIuc2RldiA9IHNkZXY7CiAKLQlhbGwtPnBhci5waHlzYmFzZSA9IHNkZXYtPnJlZ19hZGRyc1swXS5waHlzX2FkZHI7CisJYWxsLT5wYXIucGh5c2Jhc2UgPSBvcC0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJYWxsLT5wYXIud2hpY2hfaW8gPSBvcC0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFM7CiAKLQlzYnVzZmJfZmlsbF92YXIoJmFsbC0+aW5mby52YXIsIHNkZXYtPnByb21fbm9kZSwgOCk7CisJc2J1c2ZiX2ZpbGxfdmFyKCZhbGwtPmluZm8udmFyLCBkcC0+bm9kZSwgOCk7CiAJYWxsLT5pbmZvLnZhci5yZWQubGVuZ3RoID0gODsKIAlhbGwtPmluZm8udmFyLmdyZWVuLmxlbmd0aCA9IDg7CiAJYWxsLT5pbmZvLnZhci5ibHVlLmxlbmd0aCA9IDg7CiAKLQlsaW5lYnl0ZXMgPSBwcm9tX2dldGludGRlZmF1bHQoc2Rldi0+cHJvbV9ub2RlLCAibGluZWJ5dGVzIiwKLQkJCQkgICAgICAgYWxsLT5pbmZvLnZhci54cmVzKTsKKwlsaW5lYnl0ZXMgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsaW5lYnl0ZXMiLAorCQkJCQkgIGFsbC0+aW5mby52YXIueHJlcyk7CiAJYWxsLT5wYXIuZmJzaXplID0gUEFHRV9BTElHTihsaW5lYnl0ZXMgKiBhbGwtPmluZm8udmFyLnlyZXMpOwotCWlmIChwcm9tX2dldGJvb2woc2Rldi0+cHJvbV9ub2RlLCAiZGJsYnVmIikpCisJaWYgKG9mX2ZpbmRfcHJvcGVydHkoZHAsICJkYmxidWYiLCBOVUxMKSkKIAkJYWxsLT5wYXIuZmJzaXplICo9IDQ7CiAKLQlhbGwtPnBhci5mYmMgPSBzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCBDRzZfRkJDX09GRlNFVCwKLQkJCSAgICAgNDA5NiwgImNnc2l4IGZiYyIpOwotCWFsbC0+cGFyLnRlYyA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIENHNl9URUNfT0ZGU0VULAotCQkJICAgICBzaXplb2Yoc3RydWN0IGNnNl90ZWMpLCAiY2dzaXggdGVjIik7Ci0JYWxsLT5wYXIudGhjID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgQ0c2X1RIQ19PRkZTRVQsCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgY2c2X3RoYyksICJjZ3NpeCB0aGMiKTsKLQlhbGwtPnBhci5idCA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIENHNl9CUk9PS1RSRUVfT0ZGU0VULAotCQkJICAgICBzaXplb2Yoc3RydWN0IGJ0X3JlZ3MpLCAiY2dzaXggZGFjIik7Ci0JYWxsLT5wYXIuZmhjID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgQ0c2X0ZIQ19PRkZTRVQsCi0JCQkgICAgIHNpemVvZih1MzIpLCAiY2dzaXggZmhjIik7CisJYWxsLT5wYXIuZmJjID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCBDRzZfRkJDX09GRlNFVCwKKwkJCQkgIDQwOTYsICJjZ3NpeCBmYmMiKTsKKwlhbGwtPnBhci50ZWMgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIENHNl9URUNfT0ZGU0VULAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjZzZfdGVjKSwgImNnc2l4IHRlYyIpOworCWFsbC0+cGFyLnRoYyA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgQ0c2X1RIQ19PRkZTRVQsCisJCQkJICBzaXplb2Yoc3RydWN0IGNnNl90aGMpLCAiY2dzaXggdGhjIik7CisJYWxsLT5wYXIuYnQgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIENHNl9CUk9PS1RSRUVfT0ZGU0VULAorCQkJCSBzaXplb2Yoc3RydWN0IGJ0X3JlZ3MpLCAiY2dzaXggZGFjIik7CisJYWxsLT5wYXIuZmhjID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCBDRzZfRkhDX09GRlNFVCwKKwkJCQkgIHNpemVvZih1MzIpLCAiY2dzaXggZmhjIik7CiAKIAlhbGwtPmluZm8uZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1Q7CiAJYWxsLT5pbmZvLmZib3BzID0gJmNnNl9vcHM7Ci0jaWZkZWYgQ09ORklHX1NQQVJDMzIKLQlhbGwtPmluZm8uc2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopCi0JCXByb21fZ2V0aW50ZGVmYXVsdChzZGV2LT5wcm9tX25vZGUsICJhZGRyZXNzIiwgMCk7Ci0jZW5kaWYKLQlpZiAoIWFsbC0+aW5mby5zY3JlZW5fYmFzZSkKLQkJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0gCi0JCQlzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCBDRzZfUkFNX09GRlNFVCwKLQkJCQkgICAgIGFsbC0+cGFyLmZic2l6ZSwgImNnc2l4IHJhbSIpOworCisJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0gIG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgQ0c2X1JBTV9PRkZTRVQsCisJCQkJCSAgICBhbGwtPnBhci5mYnNpemUsICJjZ3NpeCByYW0iKTsKKwlpZiAoIWFsbC0+cGFyLmZiYyB8fCAhYWxsLT5wYXIudGVjIHx8ICFhbGwtPnBhci50aGMgfHwKKwkgICAgIWFsbC0+cGFyLmJ0IHx8ICFhbGwtPnBhci5maGMgfHwgIWFsbC0+aW5mby5zY3JlZW5fYmFzZSkgeworCQljZzZfdW5tYXBfcmVncyhhbGwpOworCQlrZnJlZShhbGwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlhbGwtPmluZm8ucGFyID0gJmFsbC0+cGFyOwogCiAJYWxsLT5pbmZvLnZhci5hY2NlbF9mbGFncyA9IEZCX0FDQ0VMRl9URVhUOwpAQCAtNzIzLDcyICs3MzQsOTAgQEAKIAljZzZfYmxhbmsoMCwgJmFsbC0+aW5mbyk7CiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXAsIDI1NiwgMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjZzY6IENvdWxkIG5vdCBhbGxvY2F0ZSBjb2xvciBtYXAuXG4iKTsKKwkJY2c2X3VubWFwX3JlZ3MoYWxsKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmYl9zZXRfY21hcCgmYWxsLT5pbmZvLmNtYXAsICZhbGwtPmluZm8pOwogCWNnNl9pbml0X2ZpeCgmYWxsLT5pbmZvLCBsaW5lYnl0ZXMpOwogCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNnNjogQ291bGQgbm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyLlxuIik7CisJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CisJaWYgKGVyciA8IDApIHsKKwkJY2c2X3VubWFwX3JlZ3MoYWxsKTsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CiAJCWtmcmVlKGFsbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlsaXN0X2FkZCgmYWxsLT5saXN0LCAmY2c2X2xpc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgYWxsKTsKIAotCXByaW50aygiY2c2OiBDR3NpeCBbJXNdIGF0ICVseDolbHhcbiIsCisJcHJpbnRrKCIlczogQ0dzaXggWyVzXSBhdCAlbHg6JWx4XG4iLAorCSAgICAgICBkcC0+ZnVsbF9uYW1lLAogCSAgICAgICBhbGwtPmluZm8uZml4LmlkLAotCSAgICAgICAobG9uZykgc2Rldi0+cmVnX2FkZHJzWzBdLndoaWNoX2lvLAotCSAgICAgICAobG9uZykgc2Rldi0+cmVnX2FkZHJzWzBdLnBoeXNfYWRkcik7CisJICAgICAgIGFsbC0+cGFyLndoaWNoX2lvLCBhbGwtPnBhci5waHlzYmFzZSk7CisKKwlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBjZzZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgY2c2X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7Ci0Jc3RydWN0IHNidXNfYnVzICpzYnVzOwotCXN0cnVjdCBzYnVzX2RldiAqc2RldjsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IHRvX29mX2RldmljZSgmZGV2LT5kZXYpOwogCisJcmV0dXJuIGNnNl9pbml0X29uZShvcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNnNl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOworCisJY2c2X3VubWFwX3JlZ3MoYWxsKTsKKworCWtmcmVlKGFsbCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjZzZfbWF0Y2hbXSA9IHsKKwl7CisJCS5uYW1lID0gImNnc2l4IiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiY2d0aHJlZSsiLAorCX0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgY2c2X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgY2c2X2RyaXZlciA9IHsKKwkubmFtZQkJPSAiY2c2IiwKKwkubWF0Y2hfdGFibGUJPSBjZzZfbWF0Y2gsCisJLnByb2JlCQk9IGNnNl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGNnNl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2c2X2luaXQodm9pZCkKK3sKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImNnNmZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZm9yX2FsbF9zYnVzZGV2KHNkZXYsIHNidXMpIHsKLQkJaWYgKCFzdHJjbXAoc2Rldi0+cHJvbV9uYW1lLCAiY2dzaXgiKSB8fAotCQkgICAgIXN0cmNtcChzZGV2LT5wcm9tX25hbWUsICJjZ3RocmVlKyIpKQotCQkJY2c2X2luaXRfb25lKHNkZXYpOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmNnNl9kcml2ZXIsICZvZl9idXNfdHlwZSk7CiB9CiAKLXZvaWQgX19leGl0IGNnNl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2c2X2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZjZzZfbGlzdCkgewotCQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKmFsbCksIGxpc3QpOwotCi0JCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7Ci0JCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOwotCQlrZnJlZShhbGwpOwotCX0KLX0KLQotaW50IF9faW5pdAotY2c2X3NldHVwKGNoYXIgKmFyZykKLXsKLQkvKiBObyBjbWRsaW5lIG9wdGlvbnMgeWV0Li4uICovCi0JcmV0dXJuIDA7CisJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmNnNl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjZzZfaW5pdCk7Ci0KLSNpZmRlZiBNT0RVTEUKIG1vZHVsZV9leGl0KGNnNl9leGl0KTsKLSNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImZyYW1lYnVmZmVyIGRyaXZlciBmb3IgQ0dzaXggY2hpcHNldHMiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4iKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jIGIvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKaW5kZXggZDc2YmJmYWMuLjBlNDY1YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jaXJydXNmYi5jIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCmluZGV4IGRkYTI0MGUuLjczNTVkYTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCkBAIC0zNiw3ICszNiw2IEBACiAKICNkZWZpbmUgQ0lSUlVTRkJfVkVSU0lPTiAiMi4wLXByZTIiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKaW5kZXggZWVhNDIyZS4uMzA4ODUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2R1bW15Y29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZHVtbXljb24uYwppbmRleCAxZWNkYTkxLi44Nzg3MDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZHVtbXljb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZHVtbXljb24uYwpAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBEVU1NWV9ST1dTCU9SSUdfVklERU9fTElORVMKICNlbGlmIGRlZmluZWQoX19ocHBhX18pCiAvKiBzZXQgYnkgS2NvbmZpZy4gVXNlIDgweDI1IGZvciA2NDB4NDgwIGFuZCAxNjB4NjQgZm9yIDEyODB4MTAyNCAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2RlZmluZSBEVU1NWV9DT0xVTU5TCUNPTkZJR19EVU1NWV9DT05TT0xFX0NPTFVNTlMKICNkZWZpbmUgRFVNTVlfUk9XUwlDT05GSUdfRFVNTVlfQ09OU09MRV9ST1dTCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCA1ZGM0MDgzLi45NGU5ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtNTgsNyArNTgsNiBAQAogCiAjdW5kZWYgRkJDT05ERUJVRwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmggYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAppbmRleCAzNDg3YTYzNi4uZjI0NGFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmgKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1ZJREVPX0ZCQ09OX0gKICNkZWZpbmUgX1ZJREVPX0ZCQ09OX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdnRfYnVmZmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jCmluZGV4IDk5MDI4OWEuLjQ0ODFjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jY3cuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY2N3LmMKQEAgLTgsNyArOCw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2N3LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY3cuYwppbmRleCBkNDRjNWZhLi43ZjkyYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY3cuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY3cuYwpAQCAtOCw3ICs4LDYgQEAKICAqICBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmMKaW5kZXggMmRjMDkxZi4uMDA4ODRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3JvdGF0ZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuYwpAQCAtOCw3ICs4LDYgQEAKICAqICBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fdWQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jCmluZGV4IGY1NmVkMDYuLmFiOTEwMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jCkBAIC04LDcgKzgsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X2Fjb3JuXzh4OC5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfYWNvcm5fOHg4LmMKaW5kZXggMmQyZTM5Ni4uNDBmM2Q0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfYWNvcm5fOHg4LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfYWNvcm5fOHg4LmMKQEAgLTEsNiArMSw1IEBACiAvKiBBY29ybi1saWtlIGZvbnQgZGVmaW5pdGlvbiwgd2l0aCBQQyBncmFwaGljcyBjaGFyYWN0ZXJzICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mb250Lmg+CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFjb3JuZGF0YV84eDhbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRzLmMKaW5kZXggMGNjMWJmZC4uYzk2MDcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRzLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvcHJvbWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3Byb21jb24uYwppbmRleCBkNmU2YWQ1Li41Y2Q1ZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvcHJvbWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9wcm9tY29uLmMKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggIEpha3ViIEplbGluZWsgIChqakB1bHRyYS5saW51eC5jeikKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29yZS5jCmluZGV4IDc0YWMyYWMuLjg4ZTcwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb3JlLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvcmUuYwpAQCAtMTMsNyArMTMsNiBAQAogICogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdGlsZWJsaXQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jCmluZGV4IDE1MzM1MmMuLmQ5ODFmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jCkBAIC04LDcgKzgsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCBmMzJiNTkwLi4wNTczNWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC0zMyw3ICszMyw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zOTAsNyArMzg5LDcgQEAKIAkJdmdhX3ZpZGVvX3BvcnRfdmFsID0gVkdBX0NSVF9ETTsKIAkJaWYgKChPUklHX1ZJREVPX0VHQV9CWCAmIDB4ZmYpICE9IDB4MTApIHsKIAkJCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWdhX2NvbnNvbGVfcmVzb3VyY2UgPQotCQkJICAgIHsgImVnYSIsIDB4M0IwLCAweDNCRiB9OworCQkJICAgIHsgLm5hbWUgPSAiZWdhIiwgLnN0YXJ0ID0gMHgzQjAsIC5lbmQgPSAweDNCRiB9OwogCQkJdmdhX3ZpZGVvX3R5cGUgPSBWSURFT19UWVBFX0VHQU07CiAJCQl2Z2FfdnJhbV9zaXplID0gMHg4MDAwOwogCQkJZGlzcGxheV9kZXNjID0gIkVHQSsiOwpAQCAtMzk4LDkgKzM5Nyw5IEBACiAJCQkJCSAmZWdhX2NvbnNvbGVfcmVzb3VyY2UpOwogCQl9IGVsc2UgewogCQkJc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtZGExX2NvbnNvbGVfcmVzb3VyY2UgPQotCQkJICAgIHsgIm1kYSIsIDB4M0IwLCAweDNCQiB9OworCQkJICAgIHsgLm5hbWUgPSAibWRhIiwgLnN0YXJ0ID0gMHgzQjAsIC5lbmQgPSAweDNCQiB9OwogCQkJc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtZGEyX2NvbnNvbGVfcmVzb3VyY2UgPQotCQkJICAgIHsgIm1kYSIsIDB4M0JGLCAweDNCRiB9OworCQkJICAgIHsgLm5hbWUgPSAibWRhIiwgLnN0YXJ0ID0gMHgzQkYsIC5lbmQgPSAweDNCRiB9OwogCQkJdmdhX3ZpZGVvX3R5cGUgPSBWSURFT19UWVBFX01EQTsKIAkJCXZnYV92cmFtX3NpemUgPSAweDIwMDA7CiAJCQlkaXNwbGF5X2Rlc2MgPSAiKk1EQSI7CkBAIC00MjMsMTQgKzQyMiwxNCBAQAogCiAJCQlpZiAoIU9SSUdfVklERU9fSVNWR0EpIHsKIAkJCQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGVnYV9jb25zb2xlX3Jlc291cmNlCi0JCQkJICAgID0geyAiZWdhIiwgMHgzQzAsIDB4M0RGIH07CisJCQkJICAgID0geyAubmFtZSA9ICJlZ2EiLCAuc3RhcnQgPSAweDNDMCwgLmVuZCA9IDB4M0RGIH07CiAJCQkJdmdhX3ZpZGVvX3R5cGUgPSBWSURFT19UWVBFX0VHQUM7CiAJCQkJZGlzcGxheV9kZXNjID0gIkVHQSI7CiAJCQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLAogCQkJCQkJICZlZ2FfY29uc29sZV9yZXNvdXJjZSk7CiAJCQl9IGVsc2UgewogCQkJCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdmdhX2NvbnNvbGVfcmVzb3VyY2UKLQkJCQkgICAgPSB7ICJ2Z2ErIiwgMHgzQzAsIDB4M0RGIH07CisJCQkJICAgID0geyAubmFtZSA9ICJ2Z2ErIiwgLnN0YXJ0ID0gMHgzQzAsIC5lbmQgPSAweDNERiB9OwogCQkJCXZnYV92aWRlb190eXBlID0gVklERU9fVFlQRV9WR0FDOwogCQkJCWRpc3BsYXlfZGVzYyA9ICJWR0ErIjsKIAkJCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsCkBAIC00NzQsNyArNDczLDcgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2dhX2NvbnNvbGVfcmVzb3VyY2UgPQotCQkJICAgIHsgImNnYSIsIDB4M0Q0LCAweDNENSB9OworCQkJICAgIHsgLm5hbWUgPSAiY2dhIiwgLnN0YXJ0ID0gMHgzRDQsIC5lbmQgPSAweDNENSB9OwogCQkJdmdhX3ZpZGVvX3R5cGUgPSBWSURFT19UWVBFX0NHQTsKIAkJCXZnYV92cmFtX3NpemUgPSAweDIwMDA7CiAJCQlkaXNwbGF5X2Rlc2MgPSAiKkNHQSI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnRyb2xmYi5jIGIvZHJpdmVycy92aWRlby9jb250cm9sZmIuYwppbmRleCA2NTUzMDFhLi5hY2RkNmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnRyb2xmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29udHJvbGZiLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqICBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggNTVhMzUxNC4uMmUyOTI0OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKQEAgLTM2LDcgKzM2LDYgQEAKICAqICh3aGljaCwgaW5jaWRlbnRhbGx5LCBpcyBhYm91dCB0aGUgc2FtZSBzYXZpbmcgYXMgYSAyLjVpbiBoYXJkIGRpc2sKICAqIGVudGVyaW5nIHN0YW5kYnkgbW9kZS4pCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5oIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5oCmluZGV4IGJkN2UxYzAuLmRlNGZjNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmgKQEAgLTksNyArOSw2IEBACiAgKgogICogSW50ZWdyYXBoaWNzIEN5YmVyMjAwMCBmcmFtZSBidWZmZXIgZGV2aWNlCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEludGVybmFsIEN5YmVyUHJvIHNpemVzIGFuZCBvZmZzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jeWJsYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmxhZmIuYwppbmRleCAwYWUwYTk3Li45NGE2NmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2N5YmxhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmxhZmIuYwpAQCAtMTQsNyArMTQsNiBAQAogCiAjZGVmaW5lIENZQkxBRkJfUElYTUFQU0laRSA4MTkyCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IDMxMTQzYWYuLjMzMDM0ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CkBAIC0zMiw3ICszMSw2IEBACiAjaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KQEAgLTEzMzEsOCArMTMyOSw2IEBACiAJZmJfYWRkX3ZpZGVvbW9kZSgmbW9kZSwgJmZiX2luZm8tPm1vZGVsaXN0KTsKIAlyZWdpc3RlcmVkX2ZiW2ldID0gZmJfaW5mbzsKIAotCWRldmZzX21rX2NkZXYoTUtERVYoRkJfTUFKT1IsIGkpLAotCQkJU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVUdPLCAiZmIvJWQiLCBpKTsKIAlldmVudC5pbmZvID0gZmJfaW5mbzsKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LAogCQkJICAgIEZCX0VWRU5UX0ZCX1JFR0lTVEVSRUQsICZldmVudCk7CkBAIC0xMzU5LDcgKzEzNTUsNiBAQAogCWkgPSBmYl9pbmZvLT5ub2RlOwogCWlmICghcmVnaXN0ZXJlZF9mYltpXSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZGV2ZnNfcmVtb3ZlKCJmYi8lZCIsIGkpOwogCiAJaWYgKGZiX2luZm8tPnBpeG1hcC5hZGRyICYmCiAJICAgIChmYl9pbmZvLT5waXhtYXAuZmxhZ3MgJiBGQl9QSVhNQVBfREVGQVVMVCkpCkBAIC0xNDMyLDcgKzE0MjcsNiBAQAogewogCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImZiIiwgMCwgTlVMTCwgZmJtZW1fcmVhZF9wcm9jLCBOVUxMKTsKIAotCWRldmZzX21rX2RpcigiZmIiKTsKIAlpZiAocmVnaXN0ZXJfY2hyZGV2KEZCX01BSk9SLCJmYiIsJmZiX2ZvcHMpKQogCQlwcmludGsoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIGZiIGRldnNcbiIsIEZCX01BSk9SKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmZiLmMKaW5kZXggNzYzM2U0MS4uMmEwZTgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZmYi5jCkBAIC0xLDYgKzEsNiBAQAogLyogZmZiLmM6IENyZWF0b3IvRWxpdGUzRCBmcmFtZSBidWZmZXIgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCwxOTk5IEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KQogICoKICAqIERyaXZlciBsYXlvdXQgYmFzZWQgbG9vc2VseSBvbiB0Z2FmYi5jLCBzZWUgdGhhdCBmaWxlIGZvciBjcmVkaXRzLgpAQCAtMTksNyArMTksOCBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VwYS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9mYmlvLmg+CiAKICNpbmNsdWRlICJzYnVzbGliLmgiCkBAIC0xODQsMTYxICsxODUsMTYxIEBACiAKIHN0cnVjdCBmZmJfZmJjIHsKIAkvKiBOZXh0IHZlcnRleCByZWdpc3RlcnMgKi8KLQl1MzIJCXh4eDFbM107Ci0Jdm9sYXRpbGUgdTMyCWFscGhhOwotCXZvbGF0aWxlIHUzMglyZWQ7Ci0Jdm9sYXRpbGUgdTMyCWdyZWVuOwotCXZvbGF0aWxlIHUzMglibHVlOwotCXZvbGF0aWxlIHUzMglkZXB0aDsKLQl2b2xhdGlsZSB1MzIJeTsKLQl2b2xhdGlsZSB1MzIJeDsKLQl1MzIJCXh4eDJbMl07Ci0Jdm9sYXRpbGUgdTMyCXJ5ZjsKLQl2b2xhdGlsZSB1MzIJcnhmOwotCXUzMgkJeHh4M1syXTsKKwl1MzIJeHh4MVszXTsKKwl1MzIJYWxwaGE7CisJdTMyCXJlZDsKKwl1MzIJZ3JlZW47CisJdTMyCWJsdWU7CisJdTMyCWRlcHRoOworCXUzMgl5OworCXUzMgl4OworCXUzMgl4eHgyWzJdOworCXUzMglyeWY7CisJdTMyCXJ4ZjsKKwl1MzIJeHh4M1syXTsKIAkKLQl2b2xhdGlsZSB1MzIJZG15ZjsKLQl2b2xhdGlsZSB1MzIJZG14ZjsKLQl1MzIJCXh4eDRbMl07Ci0Jdm9sYXRpbGUgdTMyCWVieWk7Ci0Jdm9sYXRpbGUgdTMyCWVieGk7Ci0JdTMyCQl4eHg1WzJdOwotCXZvbGF0aWxlIHUzMglieTsKLQl2b2xhdGlsZSB1MzIJYng7Ci0JdTMyCQlkeTsKLQl1MzIJCWR4OwotCXZvbGF0aWxlIHUzMgliaDsKLQl2b2xhdGlsZSB1MzIJYnc7Ci0JdTMyCQl4eHg2WzJdOworCXUzMglkbXlmOworCXUzMglkbXhmOworCXUzMgl4eHg0WzJdOworCXUzMgllYnlpOworCXUzMgllYnhpOworCXUzMgl4eHg1WzJdOworCXUzMglieTsKKwl1MzIJYng7CisJdTMyCWR5OworCXUzMglkeDsKKwl1MzIJYmg7CisJdTMyCWJ3OworCXUzMgl4eHg2WzJdOwogCQotCXUzMgkJeHh4N1szMl07CisJdTMyCXh4eDdbMzJdOwogCQogCS8qIFNldHVwIHVuaXQgdmVydGV4IHN0YXRlIHJlZ2lzdGVyICovCi0Jdm9sYXRpbGUgdTMyCXN1dnR4OwotCXUzMgkJeHh4OFs2M107CisJdTMyCXN1dnR4OworCXUzMgl4eHg4WzYzXTsKIAkKIAkvKiBDb250cm9sIHJlZ2lzdGVycyAqLwotCXZvbGF0aWxlIHUzMglwcGM7Ci0Jdm9sYXRpbGUgdTMyCXdpZDsKLQl2b2xhdGlsZSB1MzIJZmc7Ci0Jdm9sYXRpbGUgdTMyCWJnOwotCXZvbGF0aWxlIHUzMgljb25zdHk7Ci0Jdm9sYXRpbGUgdTMyCWNvbnN0ejsKLQl2b2xhdGlsZSB1MzIJeGNsaXA7Ci0Jdm9sYXRpbGUgdTMyCWRjc3M7Ci0Jdm9sYXRpbGUgdTMyCXZjbGlwbWluOwotCXZvbGF0aWxlIHUzMgl2Y2xpcG1heDsKLQl2b2xhdGlsZSB1MzIJdmNsaXB6bWluOwotCXZvbGF0aWxlIHUzMgl2Y2xpcHptYXg7Ci0Jdm9sYXRpbGUgdTMyCWRjc2Y7Ci0Jdm9sYXRpbGUgdTMyCWRjc2I7Ci0Jdm9sYXRpbGUgdTMyCWRjemY7Ci0Jdm9sYXRpbGUgdTMyCWRjemI7CisJdTMyCXBwYzsKKwl1MzIJd2lkOworCXUzMglmZzsKKwl1MzIJYmc7CisJdTMyCWNvbnN0eTsKKwl1MzIJY29uc3R6OworCXUzMgl4Y2xpcDsKKwl1MzIJZGNzczsKKwl1MzIJdmNsaXBtaW47CisJdTMyCXZjbGlwbWF4OworCXUzMgl2Y2xpcHptaW47CisJdTMyCXZjbGlwem1heDsKKwl1MzIJZGNzZjsKKwl1MzIJZGNzYjsKKwl1MzIJZGN6ZjsKKwl1MzIJZGN6YjsKIAkKLQl1MzIJCXh4eDk7Ci0Jdm9sYXRpbGUgdTMyCWJsZW5kYzsKLQl2b2xhdGlsZSB1MzIJYmxlbmRjMTsKLQl2b2xhdGlsZSB1MzIJYmxlbmRjMjsKLQl2b2xhdGlsZSB1MzIJZmJyYW1pdGM7Ci0Jdm9sYXRpbGUgdTMyCWZiYzsKLQl2b2xhdGlsZSB1MzIJcm9wOwotCXZvbGF0aWxlIHUzMgljbXA7Ci0Jdm9sYXRpbGUgdTMyCW1hdGNoYWI7Ci0Jdm9sYXRpbGUgdTMyCW1hdGNoYzsKLQl2b2xhdGlsZSB1MzIJbWFnbmFiOwotCXZvbGF0aWxlIHUzMgltYWduYzsKLQl2b2xhdGlsZSB1MzIJZmJjZmcwOwotCXZvbGF0aWxlIHUzMglmYmNmZzE7Ci0Jdm9sYXRpbGUgdTMyCWZiY2ZnMjsKLQl2b2xhdGlsZSB1MzIJZmJjZmczOworCXUzMgl4eHg5OworCXUzMglibGVuZGM7CisJdTMyCWJsZW5kYzE7CisJdTMyCWJsZW5kYzI7CisJdTMyCWZicmFtaXRjOworCXUzMglmYmM7CisJdTMyCXJvcDsKKwl1MzIJY21wOworCXUzMgltYXRjaGFiOworCXUzMgltYXRjaGM7CisJdTMyCW1hZ25hYjsKKwl1MzIJbWFnbmM7CisJdTMyCWZiY2ZnMDsKKwl1MzIJZmJjZmcxOworCXUzMglmYmNmZzI7CisJdTMyCWZiY2ZnMzsKIAkKLQl1MzIJCXBwY2ZnOwotCXZvbGF0aWxlIHUzMglwaWNrOwotCXZvbGF0aWxlIHUzMglmaWxsbW9kZTsKLQl2b2xhdGlsZSB1MzIJZmJyYW13YWM7Ci0Jdm9sYXRpbGUgdTMyCXBtYXNrOwotCXZvbGF0aWxlIHUzMgl4cG1hc2s7Ci0Jdm9sYXRpbGUgdTMyCXlwbWFzazsKLQl2b2xhdGlsZSB1MzIJenBtYXNrOwotCXZvbGF0aWxlIHUzMgljbGlwMG1pbjsKLQl2b2xhdGlsZSB1MzIJY2xpcDBtYXg7Ci0Jdm9sYXRpbGUgdTMyCWNsaXAxbWluOwotCXZvbGF0aWxlIHUzMgljbGlwMW1heDsKLQl2b2xhdGlsZSB1MzIJY2xpcDJtaW47Ci0Jdm9sYXRpbGUgdTMyCWNsaXAybWF4OwotCXZvbGF0aWxlIHUzMgljbGlwM21pbjsKLQl2b2xhdGlsZSB1MzIJY2xpcDNtYXg7CisJdTMyCXBwY2ZnOworCXUzMglwaWNrOworCXUzMglmaWxsbW9kZTsKKwl1MzIJZmJyYW13YWM7CisJdTMyCXBtYXNrOworCXUzMgl4cG1hc2s7CisJdTMyCXlwbWFzazsKKwl1MzIJenBtYXNrOworCXUzMgljbGlwMG1pbjsKKwl1MzIJY2xpcDBtYXg7CisJdTMyCWNsaXAxbWluOworCXUzMgljbGlwMW1heDsKKwl1MzIJY2xpcDJtaW47CisJdTMyCWNsaXAybWF4OworCXUzMgljbGlwM21pbjsKKwl1MzIJY2xpcDNtYXg7CiAJCiAJLyogTmV3IDNkUkFNIElJSSBzdXBwb3J0IHJlZ3MgKi8KLQl2b2xhdGlsZSB1MzIJcmF3YmxlbmQyOwotCXZvbGF0aWxlIHUzMglyYXdwcmVibGVuZDsKLQl2b2xhdGlsZSB1MzIJcmF3c3RlbmNpbDsKLQl2b2xhdGlsZSB1MzIJcmF3c3RlbmNpbGN0bDsKLQl2b2xhdGlsZSB1MzIJdGhyZWVkcmFtMTsKLQl2b2xhdGlsZSB1MzIJdGhyZWVkcmFtMjsKLQl2b2xhdGlsZSB1MzIJcGFzc2luOwotCXZvbGF0aWxlIHUzMglyYXdjbHJkZXB0aDsKLQl2b2xhdGlsZSB1MzIJcmF3cG1hc2s7Ci0Jdm9sYXRpbGUgdTMyCXJhd2NzcmM7Ci0Jdm9sYXRpbGUgdTMyCXJhd21hdGNoOwotCXZvbGF0aWxlIHUzMglyYXdtYWduOwotCXZvbGF0aWxlIHUzMglyYXdyb3BibGVuZDsKLQl2b2xhdGlsZSB1MzIJcmF3Y21wOwotCXZvbGF0aWxlIHUzMglyYXd3YWM7Ci0Jdm9sYXRpbGUgdTMyCWZicmFtaWQ7CisJdTMyCXJhd2JsZW5kMjsKKwl1MzIJcmF3cHJlYmxlbmQ7CisJdTMyCXJhd3N0ZW5jaWw7CisJdTMyCXJhd3N0ZW5jaWxjdGw7CisJdTMyCXRocmVlZHJhbTE7CisJdTMyCXRocmVlZHJhbTI7CisJdTMyCXBhc3NpbjsKKwl1MzIJcmF3Y2xyZGVwdGg7CisJdTMyCXJhd3BtYXNrOworCXUzMglyYXdjc3JjOworCXUzMglyYXdtYXRjaDsKKwl1MzIJcmF3bWFnbjsKKwl1MzIJcmF3cm9wYmxlbmQ7CisJdTMyCXJhd2NtcDsKKwl1MzIJcmF3d2FjOworCXUzMglmYnJhbWlkOwogCQotCXZvbGF0aWxlIHUzMglkcmF3b3A7Ci0JdTMyCQl4eHgxMFsyXTsKLQl2b2xhdGlsZSB1MzIJZm9udGxwYXQ7Ci0JdTMyCQl4eHgxMTsKLQl2b2xhdGlsZSB1MzIJZm9udHh5OwotCXZvbGF0aWxlIHUzMglmb250dzsKLQl2b2xhdGlsZSB1MzIJZm9udGluYzsKLQl2b2xhdGlsZSB1MzIJZm9udDsKLQl1MzIJCXh4eDEyWzNdOwotCXZvbGF0aWxlIHUzMglibGVuZDI7Ci0Jdm9sYXRpbGUgdTMyCXByZWJsZW5kOwotCXZvbGF0aWxlIHUzMglzdGVuY2lsOwotCXZvbGF0aWxlIHUzMglzdGVuY2lsY3RsOworCXUzMglkcmF3b3A7CisJdTMyCXh4eDEwWzJdOworCXUzMglmb250bHBhdDsKKwl1MzIJeHh4MTE7CisJdTMyCWZvbnR4eTsKKwl1MzIJZm9udHc7CisJdTMyCWZvbnRpbmM7CisJdTMyCWZvbnQ7CisJdTMyCXh4eDEyWzNdOworCXUzMglibGVuZDI7CisJdTMyCXByZWJsZW5kOworCXUzMglzdGVuY2lsOworCXUzMglzdGVuY2lsY3RsOwogCi0JdTMyCQl4eHgxM1s0XTsJCi0Jdm9sYXRpbGUgdTMyCWRjc3MxOwotCXZvbGF0aWxlIHUzMglkY3NzMjsKLQl2b2xhdGlsZSB1MzIJZGNzczM7Ci0Jdm9sYXRpbGUgdTMyCXdpZHBtYXNrOwotCXZvbGF0aWxlIHUzMglkY3MyOwotCXZvbGF0aWxlIHUzMglkY3MzOwotCXZvbGF0aWxlIHUzMglkY3M0OwotCXUzMgkJeHh4MTQ7Ci0Jdm9sYXRpbGUgdTMyCWRjZDI7Ci0Jdm9sYXRpbGUgdTMyCWRjZDM7Ci0Jdm9sYXRpbGUgdTMyCWRjZDQ7Ci0JdTMyCQl4eHgxNTsKKwl1MzIJeHh4MTNbNF07CQorCXUzMglkY3NzMTsKKwl1MzIJZGNzczI7CisJdTMyCWRjc3MzOworCXUzMgl3aWRwbWFzazsKKwl1MzIJZGNzMjsKKwl1MzIJZGNzMzsKKwl1MzIJZGNzNDsKKwl1MzIJeHh4MTQ7CisJdTMyCWRjZDI7CisJdTMyCWRjZDM7CisJdTMyCWRjZDQ7CisJdTMyCXh4eDE1OwogCQotCXZvbGF0aWxlIHUzMglwYXR0ZXJuWzMyXTsKKwl1MzIJcGF0dGVyblszMl07CiAJCi0JdTMyCQl4eHgxNlsyNTZdOworCXUzMgl4eHgxNlsyNTZdOwogCQotCXZvbGF0aWxlIHUzMglkZXZpZDsKLQl1MzIJCXh4eDE3WzYzXTsKKwl1MzIJZGV2aWQ7CisJdTMyCXh4eDE3WzYzXTsKIAkKLQl2b2xhdGlsZSB1MzIJdWNzcjsKLQl1MzIJCXh4eDE4WzMxXTsKKwl1MzIJdWNzcjsKKwl1MzIJeHh4MThbMzFdOwogCQotCXZvbGF0aWxlIHUzMgltZXI7CisJdTMyCW1lcjsKIH07CiAKIHN0cnVjdCBmZmJfZGFjIHsKLQl2b2xhdGlsZSB1MzIJdHlwZTsKLQl2b2xhdGlsZSB1MzIJdmFsdWU7Ci0Jdm9sYXRpbGUgdTMyCXR5cGUyOwotCXZvbGF0aWxlIHUzMgl2YWx1ZTI7CisJdTMyCXR5cGU7CisJdTMyCXZhbHVlOworCXUzMgl0eXBlMjsKKwl1MzIJdmFsdWUyOwogfTsKIAogc3RydWN0IGZmYl9wYXIgewogCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGZmYl9mYmMJCSpmYmM7Ci0Jc3RydWN0IGZmYl9kYWMJCSpkYWM7CisJc3RydWN0IGZmYl9mYmMgX19pb21lbQkqZmJjOworCXN0cnVjdCBmZmJfZGFjIF9faW9tZW0JKmRhYzsKIAogCXUzMgkJCWZsYWdzOwogI2RlZmluZSBGRkJfRkxBR19BRkIJCTB4MDAwMDAwMDEKQEAgLTM1MywxNiArMzU0LDEzIEBACiAJdW5zaWduZWQgbG9uZwkJcGh5c2Jhc2U7CiAJdW5zaWduZWQgbG9uZwkJZmJzaXplOwogCi0JY2hhcgkJCW5hbWVbNjRdOwotCWludAkJCXByb21fbm9kZTsKLQlpbnQJCQlwcm9tX3BhcmVudF9ub2RlOwogCWludAkJCWRhY19yZXY7CiAJaW50CQkJYm9hcmRfdHlwZTsKIH07CiAKIHN0YXRpYyB2b2lkIEZGQkZpZm8oc3RydWN0IGZmYl9wYXIgKnBhciwgaW50IG4pCiB7Ci0Jc3RydWN0IGZmYl9mYmMgKmZiYzsKKwlzdHJ1Y3QgZmZiX2ZiYyBfX2lvbWVtICpmYmM7CiAJaW50IGNhY2hlID0gcGFyLT5maWZvX2NhY2hlOwogCiAJaWYgKGNhY2hlIC0gbiA8IDApIHsKQEAgLTM3NSw3ICszNzMsNyBAQAogCiBzdGF0aWMgdm9pZCBGRkJXYWl0KHN0cnVjdCBmZmJfcGFyICpwYXIpCiB7Ci0Jc3RydWN0IGZmYl9mYmMgKmZiYzsKKwlzdHJ1Y3QgZmZiX2ZiYyBfX2lvbWVtICpmYmM7CiAJaW50IGxpbWl0ID0gMTAwMDA7CiAKIAlmYmMgPSBwYXItPmZiYzsKQEAgLTQwOCw4ICs0MDYsOCBAQAogCiBzdGF0aWMgdm9pZCBmZmJfc3dpdGNoX2Zyb21fZ3JhcGgoc3RydWN0IGZmYl9wYXIgKnBhcikKIHsKLQlzdHJ1Y3QgZmZiX2ZiYyAqZmJjID0gcGFyLT5mYmM7Ci0Jc3RydWN0IGZmYl9kYWMgKmRhYyA9IHBhci0+ZGFjOworCXN0cnVjdCBmZmJfZmJjIF9faW9tZW0gKmZiYyA9IHBhci0+ZmJjOworCXN0cnVjdCBmZmJfZGFjIF9faW9tZW0gKmRhYyA9IHBhci0+ZGFjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGFyLT5sb2NrLCBmbGFncyk7CkBAIC00NjIsNyArNDYwLDcgQEAKIHN0YXRpYyB2b2lkIGZmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQogewogCXN0cnVjdCBmZmJfcGFyICpwYXIgPSAoc3RydWN0IGZmYl9wYXIgKikgaW5mby0+cGFyOwotCXN0cnVjdCBmZmJfZmJjICpmYmMgPSBwYXItPmZiYzsKKwlzdHJ1Y3QgZmZiX2ZiYyBfX2lvbWVtICpmYmMgPSBwYXItPmZiYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBmZzsKIApAQCAtNTA1LDcgKzUwMyw3IEBACiBmZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkgCiB7CiAJc3RydWN0IGZmYl9wYXIgKnBhciA9IChzdHJ1Y3QgZmZiX3BhciAqKSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGZmYl9mYmMgKmZiYyA9IHBhci0+ZmJjOworCXN0cnVjdCBmZmJfZmJjIF9faW9tZW0gKmZiYyA9IHBhci0+ZmJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoYXJlYS0+ZHggIT0gYXJlYS0+c3ggfHwKQEAgLTU0MSw3ICs1MzksNyBAQAogc3RhdGljIHZvaWQgZmZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKIHsKIAlzdHJ1Y3QgZmZiX3BhciAqcGFyID0gKHN0cnVjdCBmZmJfcGFyICopIGluZm8tPnBhcjsKLQlzdHJ1Y3QgZmZiX2ZiYyAqZmJjID0gcGFyLT5mYmM7CisJc3RydWN0IGZmYl9mYmMgX19pb21lbSAqZmJjID0gcGFyLT5mYmM7CiAJY29uc3QgdTggKmRhdGEgPSBpbWFnZS0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBmZywgYmcsIHh5OwpAQCAtNjY0LDcgKzY2Miw3IEBACiBmZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgZmZiX3BhciAqcGFyID0gKHN0cnVjdCBmZmJfcGFyICopIGluZm8tPnBhcjsKLQlzdHJ1Y3QgZmZiX2RhYyAqZGFjID0gcGFyLT5kYWM7CisJc3RydWN0IGZmYl9kYWMgX19pb21lbSAqZGFjID0gcGFyLT5kYWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdG1wOwogCkBAIC04ODMsNzggKzg4MSw0MiBAQAogCWluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1NVTl9DUkVBVE9SOwogfQogCi1zdGF0aWMgaW50IGZmYl9hcHBseV91cGFfcGFyZW50X3JhbmdlcyhpbnQgcGFyZW50LAotCQkJCSAgICAgICBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcmVncykKLXsKLQlzdHJ1Y3QgbGludXhfcHJvbTY0X3JhbmdlcyByYW5nZXNbUFJPTVJFR19NQVhdOwotCWNoYXIgbmFtZVsxMjhdOwotCWludCBsZW4sIGk7Ci0KLQlwcm9tX2dldHByb3BlcnR5KHBhcmVudCwgIm5hbWUiLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCWlmIChzdHJjbXAobmFtZSwgInVwYSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShwYXJlbnQsICJyYW5nZXMiLCAodm9pZCAqKSByYW5nZXMsIHNpemVvZihyYW5nZXMpKTsKLQlpZiAobGVuIDw9IDApCi0JCXJldHVybiAxOwotCi0JbGVuIC89IHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbTY0X3Jhbmdlcyk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXN0cnVjdCBsaW51eF9wcm9tNjRfcmFuZ2VzICpybmcgPSAmcmFuZ2VzW2ldOwotCQl1NjQgcGh5c19hZGRyID0gcmVncy0+cGh5c19hZGRyOwotCi0JCWlmIChwaHlzX2FkZHIgPj0gcm5nLT5vdF9jaGlsZF9iYXNlICYmCi0JCSAgICBwaHlzX2FkZHIgPCAocm5nLT5vdF9jaGlsZF9iYXNlICsgcm5nLT5vcl9zaXplKSkgewotCQkJcmVncy0+cGh5c19hZGRyIC09IHJuZy0+b3RfY2hpbGRfYmFzZTsKLQkJCXJlZ3MtPnBoeXNfYWRkciArPSBybmctPm90X3BhcmVudF9iYXNlOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RydWN0IGFsbF9pbmZvIHsKIAlzdHJ1Y3QgZmJfaW5mbyBpbmZvOwogCXN0cnVjdCBmZmJfcGFyIHBhcjsKIAl1MzIgcHNldWRvX3BhbGV0dGVbMjU2XTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9Owotc3RhdGljIExJU1RfSEVBRChmZmJfbGlzdCk7CiAKLXN0YXRpYyB2b2lkIGZmYl9pbml0X29uZShpbnQgbm9kZSwgaW50IHBhcmVudCkKK3N0YXRpYyBpbnQgZmZiX2luaXRfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewotCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHJlZ3NbMipQUk9NUkVHX01BWF07Ci0Jc3RydWN0IGZmYl9mYmMgKmZiYzsKLQlzdHJ1Y3QgZmZiX2RhYyAqZGFjOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+bm9kZTsKKwlzdHJ1Y3QgZmZiX2ZiYyBfX2lvbWVtICpmYmM7CisJc3RydWN0IGZmYl9kYWMgX19pb21lbSAqZGFjOwogCXN0cnVjdCBhbGxfaW5mbyAqYWxsOworCWludCBlcnI7CiAKLQlpZiAocHJvbV9nZXRwcm9wZXJ0eShub2RlLCAicmVnIiwgKHZvaWQgKikgcmVncywgc2l6ZW9mKHJlZ3MpKSA8PSAwKSB7Ci0JCXByaW50aygiZmZiOiBDYW5ub3QgZ2V0IHJlZyBkZXZpY2Ugbm9kZSBwcm9wZXJ0eS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGZmYl9hcHBseV91cGFfcGFyZW50X3JhbmdlcyhwYXJlbnQsICZyZWdzWzBdKSkgewotCQlwcmludGsoImZmYjogQ2Fubm90IGFwcGx5IHBhcmVudCByYW5nZXMgdG8gcmVncy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYWxsID0ga21hbGxvYyhzaXplb2YoKmFsbCksIEdGUF9LRVJORUwpOwotCWlmICghYWxsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmZiOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5LlxuIik7Ci0JCXJldHVybjsKLQl9Ci0JbWVtc2V0KGFsbCwgMCwgc2l6ZW9mKCphbGwpKTsKLQotCUlOSVRfTElTVF9IRUFEKCZhbGwtPmxpc3QpOwkKKwlhbGwgPSBremFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFsbC0+cGFyLmxvY2spOwotCWFsbC0+cGFyLmZiYyA9IChzdHJ1Y3QgZmZiX2ZiYyAqKShyZWdzWzBdLnBoeXNfYWRkciArIEZGQl9GQkNfUkVHU19QT0ZGKTsKLQlhbGwtPnBhci5kYWMgPSAoc3RydWN0IGZmYl9kYWMgKikocmVnc1swXS5waHlzX2FkZHIgKyBGRkJfREFDX1BPRkYpOworCWFsbC0+cGFyLmZiYyA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVsyXSwgMCwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgZmZiX2ZiYyksICJmZmIgZmJjIik7CisJaWYgKCFhbGwtPnBhci5mYmMpIHsKKwkJa2ZyZWUoYWxsKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYWxsLT5wYXIuZGFjID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzFdLCAwLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBmZmJfZGFjKSwgImZmYiBkYWMiKTsKKwlpZiAoIWFsbC0+cGFyLmRhYykgeworCQlvZl9pb3VubWFwKGFsbC0+cGFyLmZiYywgc2l6ZW9mKHN0cnVjdCBmZmJfZmJjKSk7CisJCWtmcmVlKGFsbCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWFsbC0+cGFyLnJvcF9jYWNoZSA9IEZGQl9ST1BfTkVXOwotCWFsbC0+cGFyLnBoeXNiYXNlID0gcmVnc1swXS5waHlzX2FkZHI7Ci0JYWxsLT5wYXIucHJvbV9ub2RlID0gbm9kZTsKLQlhbGwtPnBhci5wcm9tX3BhcmVudF9ub2RlID0gcGFyZW50OworCWFsbC0+cGFyLnBoeXNiYXNlID0gb3AtPnJlc291cmNlWzBdLnN0YXJ0OwogCiAJLyogRG9uJ3QgbWVudGlvbiBjb3B5YXJlYSwgc28gU0NST0xMX1JFRFJBVyBpcyBhbHdheXMKIAkgKiB1c2VkLiAgSXQgaXMgdGhlIGZhc3Rlc3Qgb24gdGhpcyBjaGlwLgpAQCAtOTY4LDcgKzkzMCw3IEBACiAJYWxsLT5pbmZvLnBhciA9ICZhbGwtPnBhcjsKIAlhbGwtPmluZm8ucHNldWRvX3BhbGV0dGUgPSBhbGwtPnBzZXVkb19wYWxldHRlOwogCi0Jc2J1c2ZiX2ZpbGxfdmFyKCZhbGwtPmluZm8udmFyLCBhbGwtPnBhci5wcm9tX25vZGUsIDMyKTsKKwlzYnVzZmJfZmlsbF92YXIoJmFsbC0+aW5mby52YXIsIGRwLT5ub2RlLCAzMik7CiAJYWxsLT5wYXIuZmJzaXplID0gUEFHRV9BTElHTihhbGwtPmluZm8udmFyLnhyZXMgKgogCQkJCSAgICAgYWxsLT5pbmZvLnZhci55cmVzICoKIAkJCQkgICAgIDQpOwpAQCAtOTc2LDE0ICs5MzgsMTMgQEAKIAogCWFsbC0+aW5mby52YXIuYWNjZWxfZmxhZ3MgPSBGQl9BQ0NFTEZfVEVYVDsKIAotCXByb21fZ2V0c3RyaW5nKG5vZGUsICJuYW1lIiwgYWxsLT5wYXIubmFtZSwgc2l6ZW9mKGFsbC0+cGFyLm5hbWUpKTsKLQlpZiAoIXN0cmNtcChhbGwtPnBhci5uYW1lLCAiU1VOVyxhZmIiKSkKKwlpZiAoIXN0cmNtcChkcC0+bmFtZSwgIlNVTlcsYWZiIikpCiAJCWFsbC0+cGFyLmZsYWdzIHw9IEZGQl9GTEFHX0FGQjsKIAotCWFsbC0+cGFyLmJvYXJkX3R5cGUgPSBwcm9tX2dldGludGRlZmF1bHQobm9kZSwgImJvYXJkX3R5cGUiLCAwKTsKKwlhbGwtPnBhci5ib2FyZF90eXBlID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiYm9hcmRfdHlwZSIsIDApOwogCiAJZmJjID0gYWxsLT5wYXIuZmJjOwotCWlmKCh1cGFfcmVhZGwoJmZiYy0+dWNzcikgJiBGRkJfVUNTUl9BTExfRVJST1JTKSAhPSAwKQorCWlmICgodXBhX3JlYWRsKCZmYmMtPnVjc3IpICYgRkZCX1VDU1JfQUxMX0VSUk9SUykgIT0gMCkKIAkJdXBhX3dyaXRlbChGRkJfVUNTUl9BTExfRVJST1JTLCAmZmJjLT51Y3NyKTsKIAogCWZmYl9zd2l0Y2hfZnJvbV9ncmFwaCgmYWxsLT5wYXIpOwpAQCAtMTAwOCw4MSArOTY5LDg4IEBACiAJaWYgKGZiX2FsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwLCAyNTYsIDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmZiOiBDb3VsZCBub3QgYWxsb2NhdGUgY29sb3IgbWFwLlxuIik7CiAJCWtmcmVlKGFsbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZmZiX2luaXRfZml4KCZhbGwtPmluZm8pOwogCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pIDwgMCkgeworCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmZiOiBDb3VsZCBub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXIuXG4iKTsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CiAJCWtmcmVlKGFsbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlsaXN0X2FkZCgmYWxsLT5saXN0LCAmZmZiX2xpc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgYWxsKTsKIAotCXByaW50aygiZmZiOiAlcyBhdCAlMDE2bHggdHlwZSAlZCBEQUMgJWRcbiIsCisJcHJpbnRrKCIlczogJXMgYXQgJTAxNmx4LCB0eXBlICVkLCBEQUMgcmV2aXNpb24gJWRcbiIsCisJICAgICAgIGRwLT5mdWxsX25hbWUsCiAJICAgICAgICgoYWxsLT5wYXIuZmxhZ3MgJiBGRkJfRkxBR19BRkIpID8gIkFGQiIgOiAiRkZCIiksCi0JICAgICAgIHJlZ3NbMF0ucGh5c19hZGRyLCBhbGwtPnBhci5ib2FyZF90eXBlLCBhbGwtPnBhci5kYWNfcmV2KTsKKwkgICAgICAgYWxsLT5wYXIucGh5c2Jhc2UsIGFsbC0+cGFyLmJvYXJkX3R5cGUsIGFsbC0+cGFyLmRhY19yZXYpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZmYl9zY2FuX3NpYmxpbmdzKGludCByb290KQorc3RhdGljIGludCBfX2RldmluaXQgZmZiX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7Ci0JaW50IG5vZGUsIGNoaWxkOworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKCZkZXYtPmRldik7CiAKLQljaGlsZCA9IHByb21fZ2V0Y2hpbGQocm9vdCk7Ci0JZm9yIChub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhjaGlsZCwgIlNVTlcsZmZiIik7IG5vZGU7Ci0JICAgICBub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhwcm9tX2dldHNpYmxpbmcobm9kZSksICJTVU5XLGZmYiIpKQotCQlmZmJfaW5pdF9vbmUobm9kZSwgcm9vdCk7Ci0JZm9yIChub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhjaGlsZCwgIlNVTlcsYWZiIik7IG5vZGU7Ci0JICAgICBub2RlID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhwcm9tX2dldHNpYmxpbmcobm9kZSksICJTVU5XLGFmYiIpKQotCQlmZmJfaW5pdF9vbmUobm9kZSwgcm9vdCk7CisJcmV0dXJuIGZmYl9pbml0X29uZShvcCk7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZleGl0IGZmYl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOworCisJb2ZfaW91bm1hcChhbGwtPnBhci5mYmMsIHNpemVvZihzdHJ1Y3QgZmZiX2ZiYykpOworCW9mX2lvdW5tYXAoYWxsLT5wYXIuZGFjLCBzaXplb2Yoc3RydWN0IGZmYl9kYWMpKTsKKworCWtmcmVlKGFsbCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmZmJfbWF0Y2hbXSA9IHsKKwl7CisJCS5uYW1lID0gIlNVTlcsZmZiIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiU1VOVyxhZmIiLAorCX0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZmZiX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZmZiX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZmZiIiwKKwkubWF0Y2hfdGFibGUJPSBmZmJfbWF0Y2gsCisJLnByb2JlCQk9IGZmYl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGZmYl9yZW1vdmUpLAorfTsKKwogaW50IF9faW5pdCBmZmJfaW5pdCh2b2lkKQogewotCWludCByb290OwotCiAJaWYgKGZiX2dldF9vcHRpb25zKCJmZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlmZmJfc2Nhbl9zaWJsaW5ncyhwcm9tX3Jvb3Rfbm9kZSk7Ci0KLQlyb290ID0gcHJvbV9nZXRjaGlsZChwcm9tX3Jvb3Rfbm9kZSk7Ci0JZm9yIChyb290ID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhyb290LCAidXBhIik7IHJvb3Q7Ci0JICAgICByb290ID0gcHJvbV9zZWFyY2hzaWJsaW5ncyhwcm9tX2dldHNpYmxpbmcocm9vdCksICJ1cGEiKSkKLQkJZmZiX3NjYW5fc2libGluZ3Mocm9vdCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfZHJpdmVyKCZmZmJfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOwogfQogCiB2b2lkIF9fZXhpdCBmZmJfZXhpdCh2b2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmZmYl9saXN0KSB7Ci0JCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gbGlzdF9lbnRyeShwb3MsIHR5cGVvZigqYWxsKSwgbGlzdCk7Ci0KLQkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7Ci0JCWtmcmVlKGFsbCk7Ci0JfQotfQotCi1pbnQgX19pbml0Ci1mZmJfc2V0dXAoY2hhciAqYXJnKQotewotCS8qIE5vIGNtZGxpbmUgb3B0aW9ucyB5ZXQuLi4gKi8KLQlyZXR1cm4gMDsKKwlvZl91bnJlZ2lzdGVyX2RyaXZlcigmZmZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGZmYl9pbml0KTsKLQotI2lmZGVmIE1PRFVMRQogbW9kdWxlX2V4aXQoZmZiX2V4aXQpOwotI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZnJhbWVidWZmZXIgZHJpdmVyIGZvciBDcmVhdG9yL0VsaXRlM0QgY2hpcHNldHMiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4iKTsKK01PRFVMRV9WRVJTSU9OKCIyLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwppbmRleCA1ZTI1Yjk4Li5iZjBlNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9nYmVmYi5jCkBAIC05LDcgKzksNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9oaXRmYi5jIGIvZHJpdmVycy92aWRlby9oaXRmYi5jCmluZGV4IGYwNGNhNzIuLjAxODY0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMKQEAgLTExLDcgKzExLDYgQEAKICAqICBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMC1pMmMuYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLWkyYy5jCmluZGV4IDNmZTNhZTEuLmMxZjdiNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLWkyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLWkyYy5jCkBAIC04LDcgKzgsNiBAQAogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCiAgKiAgbW9yZSBkZXRhaWxzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwppbmRleCBhMWY3ZDgwLi5mYmU4YTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ltYWNmYi5jIGIvZHJpdmVycy92aWRlby9pbWFjZmIuYwppbmRleCA3YjFjMTY4Li5jZGJhZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ltYWNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKQEAgLTIwNywxMCArMjA3LDYgQEAKIAkJc2l6ZV9yZW1hcCA9IHNpemVfdG90YWw7CiAJaW1hY2ZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7CiAKLSNpZm5kZWYgX19pMzg2X18KLQlzY3JlZW5faW5mby5pbWFjcG1fc2VnID0gMDsKLSNlbmRpZgotCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3RvdGFsLCAiaW1hY2ZiIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgImltYWNmYjogY2Fubm90IHJlc2VydmUgdmlkZW8gbWVtb3J5IGF0IDB4JWx4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXN0dGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ltc3R0ZmIuYwppbmRleCBmNzNjNjQyLi41ZjM5M2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ltc3R0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ltc3R0ZmIuYwpAQCAtMTYsNyArMTYsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwppbmRleCAxNzE4YmFhLi4wZjliMmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC0xOCw3ICsxOCw2IEBACiAKIC8vI2RlZmluZSBERUJVRyAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKaW5kZXggMGEwYThiMS4uM2YzOWQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCkBAIC0xMDgsNyArMTA4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggNzUzM2IzZC4uM2I3OGE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwpAQCAtMTksNyArMTksNiBAQAogCiAvKiAkREhEOiBpbnRlbGZiL2ludGVsZmJody5jLHYgMS45IDIwMDMvMDYvMjcgMTU6MDY6MjUgZGF3ZXMgRXhwICQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2t5cm8vZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8va3lyby9mYmRldi5jCmluZGV4IDQ3N2FkMjkuLjJmZGJlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8va3lyby9mYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8va3lyby9mYmRldi5jCkBAIC05LDcgKzksNiBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbGVvLmMgYi9kcml2ZXJzL3ZpZGVvL2xlby5jCmluZGV4IGEyM2NmZGIuLmYzYTI0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbGVvLmMKKysrIGIvZHJpdmVycy92aWRlby9sZW8uYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxlby5jOiBMRU8gZnJhbWUgYnVmZmVyIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgTWljaGFsIFJlaGFjZWsgKE1pY2hhbC5SZWhhY2VrQHN0Lm1mZi5jdW5pLmN6KQogICoKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NidXMuaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vZmJpby5oPgogCiAjaW5jbHVkZSAic2J1c2xpYi5oIgpAQCAtODAsMTAgKzgwLDEwIEBACiAKIHN0cnVjdCBsZW9fY3Vyc29yIHsKIAl1OAkJeHh4MFsxNl07Ci0Jdm9sYXRpbGUgdTMyCWN1cl90eXBlOwotCXZvbGF0aWxlIHUzMgljdXJfbWlzYzsKLQl2b2xhdGlsZSB1MzIJY3VyX2N1cnN4eTsKLQl2b2xhdGlsZSB1MzIJY3VyX2RhdGE7CisJdTMyCWN1cl90eXBlOworCXUzMgljdXJfbWlzYzsKKwl1MzIJY3VyX2N1cnN4eTsKKwl1MzIJY3VyX2RhdGE7CiB9OwogCiAjZGVmaW5lIExFT19LUk5fVFlQRV9DTFVUMAkweDAwMDAxMDAwCkBAIC05OSwyNyArOTksMjcgQEAKICNkZWZpbmUgTEVPX0tSTl9DU1JfVU5LMgkweDAwMDAwMDAxCiAKIHN0cnVjdCBsZW9fbHhfa3JuIHsKLQl2b2xhdGlsZSB1MzIJa3JuX3R5cGU7Ci0Jdm9sYXRpbGUgdTMyCWtybl9jc3I7Ci0Jdm9sYXRpbGUgdTMyCWtybl92YWx1ZTsKKwl1MzIJa3JuX3R5cGU7CisJdTMyCWtybl9jc3I7CisJdTMyCWtybl92YWx1ZTsKIH07CiAKIHN0cnVjdCBsZW9fbGNfc3MwX2tybiB7Ci0Jdm9sYXRpbGUgdTMyIAltaXNjOworCXUzMiAJbWlzYzsKIAl1OAkJeHh4MFsweDgwMC00XTsKLQl2b2xhdGlsZSB1MzIJcmV2OworCXUzMglyZXY7CiB9OwogCiBzdHJ1Y3QgbGVvX2xjX3NzMF91c3IgewotCXZvbGF0aWxlIHUzMgljc3I7Ci0Jdm9sYXRpbGUgdTMyCWFkZHJzcGFjZTsKLQl2b2xhdGlsZSB1MzIgCWZvbnRtc2s7Ci0Jdm9sYXRpbGUgdTMyCWZvbnR0OwotCXZvbGF0aWxlIHUzMglleHRlbnQ7Ci0Jdm9sYXRpbGUgdTMyCXNyYzsKKwl1MzIJY3NyOworCXUzMglhZGRyc3BhY2U7CisJdTMyIAlmb250bXNrOworCXUzMglmb250dDsKKwl1MzIJZXh0ZW50OworCXUzMglzcmM7CiAJdTMyCQlkc3Q7Ci0Jdm9sYXRpbGUgdTMyCWNvcHk7Ci0Jdm9sYXRpbGUgdTMyCWZpbGw7CisJdTMyCWNvcHk7CisJdTMyCWZpbGw7CiB9OwogCiBzdHJ1Y3QgbGVvX2xjX3NzMV9rcm4gewpAQCAtMTMyLDQ3ICsxMzIsNDcgQEAKIAogc3RydWN0IGxlb19sZCB7CiAJdTgJCXh4eDBbMHhlMDBdOwotCXZvbGF0aWxlIHUzMgljc3I7Ci0Jdm9sYXRpbGUgdTMyCXdpZDsKLQl2b2xhdGlsZSB1MzIJd21hc2s7Ci0Jdm9sYXRpbGUgdTMyCXdpZGNsaXA7Ci0Jdm9sYXRpbGUgdTMyCXZjbGlwbWluOwotCXZvbGF0aWxlIHUzMgl2Y2xpcG1heDsKLQl2b2xhdGlsZSB1MzIJcGlja21pbjsJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJcGlja21heDsJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJZmc7Ci0Jdm9sYXRpbGUgdTMyCWJnOwotCXZvbGF0aWxlIHUzMglzcmM7CQkvKiBDb3B5L1Njcm9sbCAoU1MwIG9ubHkpICovCi0Jdm9sYXRpbGUgdTMyCWRzdDsJCS8qIENvcHkvU2Nyb2xsL0ZpbGwgKFNTMCBvbmx5KSAqLwotCXZvbGF0aWxlIHUzMglleHRlbnQ7CQkvKiBDb3B5L1Njcm9sbC9GaWxsIHNpemUgKFNTMCBvbmx5KSAqLworCXUzMgljc3I7CisJdTMyCXdpZDsKKwl1MzIJd21hc2s7CisJdTMyCXdpZGNsaXA7CisJdTMyCXZjbGlwbWluOworCXUzMgl2Y2xpcG1heDsKKwl1MzIJcGlja21pbjsJLyogU1MxIG9ubHkgKi8KKwl1MzIJcGlja21heDsJLyogU1MxIG9ubHkgKi8KKwl1MzIJZmc7CisJdTMyCWJnOworCXUzMglzcmM7CQkvKiBDb3B5L1Njcm9sbCAoU1MwIG9ubHkpICovCisJdTMyCWRzdDsJCS8qIENvcHkvU2Nyb2xsL0ZpbGwgKFNTMCBvbmx5KSAqLworCXUzMglleHRlbnQ7CQkvKiBDb3B5L1Njcm9sbC9GaWxsIHNpemUgKFNTMCBvbmx5KSAqLwogCXUzMgkJeHh4MVszXTsKLQl2b2xhdGlsZSB1MzIJc2V0c2VtOwkJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJY2xyc2VtOwkJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJY2xycGljazsJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJY2xyZGF0OwkJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJYWxwaGE7CQkvKiBTUzEgb25seSAqLworCXUzMglzZXRzZW07CQkvKiBTUzEgb25seSAqLworCXUzMgljbHJzZW07CQkvKiBTUzEgb25seSAqLworCXUzMgljbHJwaWNrOwkvKiBTUzEgb25seSAqLworCXUzMgljbHJkYXQ7CQkvKiBTUzEgb25seSAqLworCXUzMglhbHBoYTsJCS8qIFNTMSBvbmx5ICovCiAJdTgJCXh4eDJbMHgyY107Ci0Jdm9sYXRpbGUgdTMyCXdpbmJnOwotCXZvbGF0aWxlIHUzMglwbGFuZW1hc2s7Ci0Jdm9sYXRpbGUgdTMyCXJvcDsKLQl2b2xhdGlsZSB1MzIJejsKLQl2b2xhdGlsZSB1MzIJZGN6ZjsJCS8qIFNTMSBvbmx5ICovCi0Jdm9sYXRpbGUgdTMyCWRjemI7CQkvKiBTUzEgb25seSAqLwotCXZvbGF0aWxlIHUzMglkY3M7CQkvKiBTUzEgb25seSAqLwotCXZvbGF0aWxlIHUzMglkY3pzOwkJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJcGlja2ZiOwkJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJcGlja2JiOwkJLyogU1MxIG9ubHkgKi8KLQl2b2xhdGlsZSB1MzIJZGNmYzsJCS8qIFNTMSBvbmx5ICovCi0Jdm9sYXRpbGUgdTMyCWZvcmNlY29sOwkvKiBTUzEgb25seSAqLwotCXZvbGF0aWxlIHUzMglkb29yWzhdOwkvKiBTUzEgb25seSAqLwotCXZvbGF0aWxlIHUzMglwaWNrWzVdOwkvKiBTUzEgb25seSAqLworCXUzMgl3aW5iZzsKKwl1MzIJcGxhbmVtYXNrOworCXUzMglyb3A7CisJdTMyCXo7CisJdTMyCWRjemY7CQkvKiBTUzEgb25seSAqLworCXUzMglkY3piOwkJLyogU1MxIG9ubHkgKi8KKwl1MzIJZGNzOwkJLyogU1MxIG9ubHkgKi8KKwl1MzIJZGN6czsJCS8qIFNTMSBvbmx5ICovCisJdTMyCXBpY2tmYjsJCS8qIFNTMSBvbmx5ICovCisJdTMyCXBpY2tiYjsJCS8qIFNTMSBvbmx5ICovCisJdTMyCWRjZmM7CQkvKiBTUzEgb25seSAqLworCXUzMglmb3JjZWNvbDsJLyogU1MxIG9ubHkgKi8KKwl1MzIJZG9vcls4XTsJLyogU1MxIG9ubHkgKi8KKwl1MzIJcGlja1s1XTsJLyogU1MxIG9ubHkgKi8KIH07CiAKICNkZWZpbmUgTEVPX1NTMV9NSVNDX0VOQUJMRQkweDAwMDAwMDAxCiAjZGVmaW5lIExFT19TUzFfTUlTQ19TVEVSRU8JMHgwMDAwMDAwMgogc3RydWN0IGxlb19sZF9zczEgewotCXU4CQl4eHgwWzB4ZWY0XTsKLQl2b2xhdGlsZSB1MzIJc3MxX21pc2M7CisJdTgJeHh4MFsweGVmNF07CisJdTMyCXNzMV9taXNjOwogfTsKIAogc3RydWN0IGxlb19sZF9nYmwgewpAQCAtMTkzLDkgKzE5Myw4IEBACiAjZGVmaW5lIExFT19GTEFHX0JMQU5LRUQJMHgwMDAwMDAwMQogCiAJdW5zaWduZWQgbG9uZwkJcGh5c2Jhc2U7CisJdW5zaWduZWQgbG9uZwkJd2hpY2hfaW87CiAJdW5zaWduZWQgbG9uZwkJZmJzaXplOwotCi0Jc3RydWN0IHNidXNfZGV2CQkqc2RldjsKIH07CiAKIHN0YXRpYyB2b2lkIGxlb193YWl0KHN0cnVjdCBsZW9fbHhfa3JuIF9faW9tZW0gKmx4X2tybikKQEAgLTM2OCw4ICszNjcsNyBAQAogCiAJcmV0dXJuIHNidXNmYl9tbWFwX2hlbHBlcihsZW9fbW1hcF9tYXAsCiAJCQkJICBwYXItPnBoeXNiYXNlLCBwYXItPmZic2l6ZSwKLQkJCQkgIHBhci0+c2Rldi0+cmVnX2FkZHJzWzBdLndoaWNoX2lvLAotCQkJCSAgdm1hKTsKKwkJCQkgIHBhci0+d2hpY2hfaW8sIHZtYSk7CiB9CiAKIHN0YXRpYyBpbnQgbGVvX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTM4NSwxMSArMzgzLDkgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotbGVvX2luaXRfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvKQorbGVvX2luaXRfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQogewotCXN0cnVjdCBsZW9fcGFyICpwYXIgPSAoc3RydWN0IGxlb19wYXIgKilpbmZvLT5wYXI7Ci0KLQlzdHJsY3B5KGluZm8tPmZpeC5pZCwgcGFyLT5zZGV2LT5wcm9tX25hbWUsIHNpemVvZihpbmZvLT5maXguaWQpKTsKKwlzdHJsY3B5KGluZm8tPmZpeC5pZCwgZHAtPm5hbWUsIHNpemVvZihpbmZvLT5maXguaWQpKTsKIAogCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwogCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwpAQCAtNTMyLDYwICs1MjgsNzQgQEAKIHN0cnVjdCBhbGxfaW5mbyB7CiAJc3RydWN0IGZiX2luZm8gaW5mbzsKIAlzdHJ1Y3QgbGVvX3BhciBwYXI7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKLXN0YXRpYyBMSVNUX0hFQUQobGVvX2xpc3QpOwogCi1zdGF0aWMgdm9pZCBsZW9faW5pdF9vbmUoc3RydWN0IHNidXNfZGV2ICpzZGV2KQorc3RhdGljIHZvaWQgbGVvX3VubWFwX3JlZ3Moc3RydWN0IGFsbF9pbmZvICphbGwpCiB7CisJaWYgKGFsbC0+cGFyLmxjX3NzMF91c3IpCisJCW9mX2lvdW5tYXAoYWxsLT5wYXIubGNfc3MwX3VzciwgMHgxMDAwKTsKKwlpZiAoYWxsLT5wYXIubGRfc3MwKQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLmxkX3NzMCwgMHgxMDAwKTsKKwlpZiAoYWxsLT5wYXIubGRfc3MxKQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLmxkX3NzMSwgMHgxMDAwKTsKKwlpZiAoYWxsLT5wYXIubHhfa3JuKQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLmx4X2tybiwgMHgxMDAwKTsKKwlpZiAoYWxsLT5wYXIuY3Vyc29yKQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLmN1cnNvciwgc2l6ZW9mKHN0cnVjdCBsZW9fY3Vyc29yKSk7CisJaWYgKGFsbC0+aW5mby5zY3JlZW5fYmFzZSkKKwkJb2ZfaW91bm1hcChhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIDB4ODAwMDAwKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbGVvX2luaXRfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+bm9kZTsKIAlzdHJ1Y3QgYWxsX2luZm8gKmFsbDsKLQlpbnQgbGluZWJ5dGVzOworCWludCBsaW5lYnl0ZXMsIGVycjsKIAotCWFsbCA9IGttYWxsb2Moc2l6ZW9mKCphbGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFsbCkgewotCQlwcmludGsoS0VSTl9FUlIgImxlbzogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCW1lbXNldChhbGwsIDAsIHNpemVvZigqYWxsKSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYWxsLT5saXN0KTsKKwlhbGwgPSBremFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFsbC0+cGFyLmxvY2spOwotCWFsbC0+cGFyLnNkZXYgPSBzZGV2OwogCi0JYWxsLT5wYXIucGh5c2Jhc2UgPSBzZGV2LT5yZWdfYWRkcnNbMF0ucGh5c19hZGRyOworCWFsbC0+cGFyLnBoeXNiYXNlID0gb3AtPnJlc291cmNlWzBdLnN0YXJ0OworCWFsbC0+cGFyLndoaWNoX2lvID0gb3AtPnJlc291cmNlWzBdLmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTOwogCi0Jc2J1c2ZiX2ZpbGxfdmFyKCZhbGwtPmluZm8udmFyLCBzZGV2LT5wcm9tX25vZGUsIDMyKTsKKwlzYnVzZmJfZmlsbF92YXIoJmFsbC0+aW5mby52YXIsIGRwLT5ub2RlLCAzMik7CiAJbGVvX2ZpeHVwX3Zhcl9yZ2IoJmFsbC0+aW5mby52YXIpOwogCi0JbGluZWJ5dGVzID0gcHJvbV9nZXRpbnRkZWZhdWx0KHNkZXYtPnByb21fbm9kZSwgImxpbmVieXRlcyIsCi0JCQkJICAgICAgIGFsbC0+aW5mby52YXIueHJlcyk7CisJbGluZWJ5dGVzID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibGluZWJ5dGVzIiwKKwkJCQkJICBhbGwtPmluZm8udmFyLnhyZXMpOwogCWFsbC0+cGFyLmZic2l6ZSA9IFBBR0VfQUxJR04obGluZWJ5dGVzICogYWxsLT5pbmZvLnZhci55cmVzKTsKIAotI2lmZGVmIENPTkZJR19TUEFSQzMyCi0JYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKQotCQlwcm9tX2dldGludGRlZmF1bHQoc2Rldi0+cHJvbV9ub2RlLCAiYWRkcmVzcyIsIDApOwotI2VuZGlmCi0JaWYgKCFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpCi0JCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IAotCQkJc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgTEVPX09GRl9TUzAsCi0JCQkJICAgICAweDgwMDAwMCwgImxlbyByYW0iKTsKLQogCWFsbC0+cGFyLmxjX3NzMF91c3IgPQotCQlzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCBMRU9fT0ZGX0xDX1NTMF9VU1IsCi0JCQkgICAgIDB4MTAwMCwgImxlb2xjIHNzMHVzciIpOworCQlvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIExFT19PRkZfTENfU1MwX1VTUiwKKwkJCSAgIDB4MTAwMCwgImxlb2xjIHNzMHVzciIpOwogCWFsbC0+cGFyLmxkX3NzMCA9Ci0JCXNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIExFT19PRkZfTERfU1MwLAotCQkJICAgICAweDEwMDAsICJsZW9sZCBzczAiKTsKKwkJb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCBMRU9fT0ZGX0xEX1NTMCwKKwkJCSAgIDB4MTAwMCwgImxlb2xkIHNzMCIpOwogCWFsbC0+cGFyLmxkX3NzMSA9Ci0JCXNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIExFT19PRkZfTERfU1MxLAotCQkJICAgICAweDEwMDAsICJsZW9sZCBzczEiKTsKKwkJb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCBMRU9fT0ZGX0xEX1NTMSwKKwkJCSAgIDB4MTAwMCwgImxlb2xkIHNzMSIpOwogCWFsbC0+cGFyLmx4X2tybiA9Ci0JCXNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIExFT19PRkZfTFhfS1JOLAotCQkJICAgICAweDEwMDAsICJsZW9seCBrcm4iKTsKKwkJb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCBMRU9fT0ZGX0xYX0tSTiwKKwkJCSAgIDB4MTAwMCwgImxlb2x4IGtybiIpOwogCWFsbC0+cGFyLmN1cnNvciA9Ci0JCXNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbMF0sIExFT19PRkZfTFhfQ1VSU09SLAotCQkJICAgICBzaXplb2Yoc3RydWN0IGxlb19jdXJzb3IpLCAibGVvbHggY3Vyc29yIik7CisJCW9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgTEVPX09GRl9MWF9DVVJTT1IsCisJCQkgICBzaXplb2Yoc3RydWN0IGxlb19jdXJzb3IpLCAibGVvbHggY3Vyc29yIik7CisJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0gCisJCW9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgTEVPX09GRl9TUzAsCisJCQkgICAweDgwMDAwMCwgImxlbyByYW0iKTsKKwlpZiAoIWFsbC0+cGFyLmxjX3NzMF91c3IgfHwKKwkgICAgIWFsbC0+cGFyLmxkX3NzMCB8fAorCSAgICAhYWxsLT5wYXIubGRfc3MxIHx8CisJICAgICFhbGwtPnBhci5seF9rcm4gfHwKKwkgICAgIWFsbC0+cGFyLmN1cnNvciB8fAorCSAgICAhYWxsLT5pbmZvLnNjcmVlbl9iYXNlKSB7CisJCWxlb191bm1hcF9yZWdzKGFsbCk7CisJCWtmcmVlKGFsbCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWFsbC0+aW5mby5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfWVBBTjsKIAlhbGwtPmluZm8uZmJvcHMgPSAmbGVvX29wczsKQEAgLTU5Nyw2OSArNjA3LDg1IEBACiAJbGVvX2JsYW5rKDAsICZhbGwtPmluZm8pOwogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwLCAyNTYsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibGVvOiBDb3VsZCBub3QgYWxsb2NhdGUgY29sb3IgbWFwLlxuIik7CisJCWxlb191bm1hcF9yZWdzKGFsbCk7CiAJCWtmcmVlKGFsbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07OwogCX0KIAotCWxlb19pbml0X2ZpeCgmYWxsLT5pbmZvKTsKKwlsZW9faW5pdF9maXgoJmFsbC0+aW5mbywgZHApOwogCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImxlbzogQ291bGQgbm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyLlxuIik7CisJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CisJaWYgKGVyciA8IDApIHsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CisJCWxlb191bm1hcF9yZWdzKGFsbCk7CiAJCWtmcmVlKGFsbCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlsaXN0X2FkZCgmYWxsLT5saXN0LCAmbGVvX2xpc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgYWxsKTsKIAotCXByaW50aygibGVvOiAlcyBhdCAlbHg6JWx4XG4iLAotCSAgICAgICBzZGV2LT5wcm9tX25hbWUsCi0JICAgICAgIChsb25nKSBzZGV2LT5yZWdfYWRkcnNbMF0ud2hpY2hfaW8sCi0JICAgICAgIChsb25nKSBzZGV2LT5yZWdfYWRkcnNbMF0ucGh5c19hZGRyKTsKKwlwcmludGsoIiVzOiBsZW8gYXQgJWx4OiVseFxuIiwKKwkgICAgICAgZHAtPmZ1bGxfbmFtZSwKKwkgICAgICAgYWxsLT5wYXIud2hpY2hfaW8sIGFsbC0+cGFyLnBoeXNiYXNlKTsKKworCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IGxlb19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsZW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlzdHJ1Y3Qgc2J1c19idXMgKnNidXM7Ci0Jc3RydWN0IHNidXNfZGV2ICpzZGV2OworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKCZkZXYtPmRldik7CiAKKwlyZXR1cm4gbGVvX2luaXRfb25lKG9wKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbGVvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CisJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CisKKwlsZW9fdW5tYXBfcmVncyhhbGwpOworCisJa2ZyZWUoYWxsKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGxlb19tYXRjaFtdID0geworCXsKKwkJLm5hbWUgPSAibGVvIiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGxlb19tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGxlb19kcml2ZXIgPSB7CisJLm5hbWUJCT0gImxlbyIsCisJLm1hdGNoX3RhYmxlCT0gbGVvX21hdGNoLAorCS5wcm9iZQkJPSBsZW9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChsZW9fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxlb19pbml0KHZvaWQpCit7CiAJaWYgKGZiX2dldF9vcHRpb25zKCJsZW9mYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWZvcl9hbGxfc2J1c2RldihzZGV2LCBzYnVzKSB7Ci0JCWlmICghc3RyY21wKHNkZXYtPnByb21fbmFtZSwgImxlbyIpKQotCQkJbGVvX2luaXRfb25lKHNkZXYpOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJmxlb19kcml2ZXIsICZvZl9idXNfdHlwZSk7CiB9CiAKLXZvaWQgX19leGl0IGxlb19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbGVvX2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZsZW9fbGlzdCkgewotCQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKmFsbCksIGxpc3QpOwotCi0JCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7Ci0JCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOwotCQlrZnJlZShhbGwpOwotCX0KLX0KLQotaW50IF9faW5pdAotbGVvX3NldHVwKGNoYXIgKmFyZykKLXsKLQkvKiBObyBjbWRsaW5lIG9wdGlvbnMgeWV0Li4uICovCi0JcmV0dXJuIDA7CisJb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoJmxlb19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChsZW9faW5pdCk7Ci0jaWZkZWYgTU9EVUxFCiBtb2R1bGVfZXhpdChsZW9fZXhpdCk7Ci0jZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIExFTyBjaGlwc2V0cyIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PiIpOworTU9EVUxFX1ZFUlNJT04oIjIuMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYyBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvLmMKaW5kZXggNzg4ZmE4MS4uODBjMDM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYworKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jCkBAIC05LDcgKzksNiBAQAogICogIENvcHlyaWdodCAoQykgMjAwMyBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW51eF9sb2dvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMgYi9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKaW5kZXggZDIxMzIxYy4uYWIyMTQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYwpAQCAtMTUsNyArMTUsNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5jCmluZGV4IGE0NTZlNjcuLmM0YjU3MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSAibWF0cm94ZmJfREFDMTA2NC5oIgogI2luY2x1ZGUgIm1hdHJveGZiX21pc2MuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaAppbmRleCA1NjUxM2E1Li5kZjM5YzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX01BVFJPWEZCX0RBQzEwNjRfSF9fCiAjZGVmaW5lIF9fTUFUUk9YRkJfREFDMTA2NF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSAibWF0cm94ZmJfYmFzZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5jCmluZGV4IDIzZWJhZDAuLmE1NjkwYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYwpAQCAtNzgsNyArNzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlICJtYXRyb3hmYl9UaTMwMjYuaCIKICNpbmNsdWRlICJtYXRyb3hmYl9taXNjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5oCmluZGV4IDUzNmU1ZjYuLjI3ODcyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX01BVFJPWEZCX1RJMzAyNl9IX18KICNkZWZpbmUgX19NQVRST1hGQl9USTMwMjZfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgIm1hdHJveGZiX2Jhc2UuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCmluZGV4IGY0ZGRkMzQuLjRhNTdkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKQEAgLTk5LDcgKzk5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2RlZmluZSBfX09MRF9WSURJT0NfCkBAIC0yMzQsNyArMjMzLDcgQEAKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKSkgewogCQlpZiAocmVxdWVzdF9pcnEoQUNDRVNTX0ZCSU5GTyhwY2lkZXYpLT5pcnEsIG1hdHJveF9pcnEsCi0JCQkJU0FfU0hJUlEsICJtYXRyb3hmYiIsIE1JTkZPKSkgeworCQkJCUlSUUZfU0hBUkVELCAibWF0cm94ZmIiLCBNSU5GTykpIHsKIAkJCWNsZWFyX2JpdCgwLCAmQUNDRVNTX0ZCSU5GTyhpcnFfZmxhZ3MpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmggYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKaW5kZXggYjcxNzM3MS4uYjk1Nzc5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaApAQCAtMjUsNyArMjUsNiBAQAogLyogR3VhcmQgYWNjZWxlcmF0b3IgYWNjZXNzZXMgd2l0aCBzcGluX2xvY2tfaXJxc2F2ZS4uLiAqLwogI3VuZGVmIE1BVFJPWEZCX1VTRV9TUElOTE9DS1MKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmMKaW5kZXggMjYzZDgwMS4uMTg4ODZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuYwpAQCAtODQsNyArODQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlICJtYXRyb3hmYl9taXNjLmgiCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKaW5kZXggMmYxNTZiNy4uNzczODU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9uZW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbmVvZmIuYwpAQCAtNTQsNyArNTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2kyYy5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaTJjLmMKaW5kZXggMWVkYjFjNC4uMTllZWYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaTJjLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9vZi5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfb2YuYwppbmRleCA3YTAzZDA0Li44MjA5MTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9vZi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X29mLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IDdiNWNmZmIuLmIwMmQ2MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb2ZmYi5jIGIvZHJpdmVycy92aWRlby9vZmZiLmMKaW5kZXggYWQxNDM0ZS4uNzFjZTFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vZmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9vZmZiLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC05OCwxNCArOTcsNDMgQEAKIAkJCSAgdV9pbnQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgb2ZmYl9wYXIgKnBhciA9IChzdHJ1Y3Qgb2ZmYl9wYXIgKikgaW5mby0+cGFyOworCWludCBpLCBkZXB0aDsKKwl1MzIgKnBhbCA9IGluZm8tPnBzZXVkb19wYWxldHRlOwogCi0JaWYgKCFwYXItPmNtYXBfYWRyIHx8IHJlZ25vID4gMjU1KQorCWRlcHRoID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCWlmIChkZXB0aCA9PSAxNikKKwkJZGVwdGggPSAoaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9PSA1KSA/IDE1IDogMTY7CisKKwlpZiAocmVnbm8gPiAyNTUgfHwKKwkgICAgKGRlcHRoID09IDE2ICYmIHJlZ25vID4gNjMpIHx8CisJICAgIChkZXB0aCA9PSAxNSAmJiByZWdubyA+IDMxKSkKIAkJcmV0dXJuIDE7CiAKKwlpZiAocmVnbm8gPCAxNikgeworCQlzd2l0Y2ggKGRlcHRoKSB7CisJCWNhc2UgMTU6CisJCQlwYWxbcmVnbm9dID0gKHJlZ25vIDw8IDEwKSB8IChyZWdubyA8PCA1KSB8IHJlZ25vOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQlwYWxbcmVnbm9dID0gKHJlZ25vIDw8IDExKSB8IChyZWdubyA8PCA1KSB8IHJlZ25vOworCQkJYnJlYWs7CisJCWNhc2UgMjQ6CisJCQlwYWxbcmVnbm9dID0gKHJlZ25vIDw8IDE2KSB8IChyZWdubyA8PCA4KSB8IHJlZ25vOworCQkJYnJlYWs7CisJCWNhc2UgMzI6CisJCQlpID0gKHJlZ25vIDw8IDgpIHwgcmVnbm87CisJCQlwYWxbcmVnbm9dID0gKGkgPDwgMTYpIHwgaTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJcmVkID4+PSA4OwogCWdyZWVuID4+PSA4OwogCWJsdWUgPj49IDg7CiAKKwlpZiAoIXBhci0+Y21hcF9hZHIpCisJCXJldHVybiAwOworCiAJc3dpdGNoIChwYXItPmNtYXBfdHlwZSkgewogCWNhc2UgY21hcF9tNjQ6CiAJCXdyaXRlYihyZWdubywgcGFyLT5jbWFwX2Fkcik7CkBAIC0xNDIsMjAgKzE3MCw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChyZWdubyA8IDE2KQotCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgewotCQljYXNlIDE2OgotCQkJKCh1MTYgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCSAgICAocmVnbm8gPDwgMTApIHwgKHJlZ25vIDw8IDUpIHwgcmVnbm87Ci0JCQlicmVhazsKLQkJY2FzZSAzMjoKLQkJCXsKLQkJCQlpbnQgaSA9IChyZWdubyA8PCA4KSB8IHJlZ25vOwotCQkJCSgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkJICAgIChpIDw8IDE2KSB8IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0LDgxICsyMzgsOSBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBOVUxMLCAqYm9vdF9kaXNwID0gTlVMTDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0JPT1RYX1RFWFQpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWFjb3NfZGlzcGxheSA9IE5VTEw7Ci0jZW5kaWYKIAlpZiAoZmJfZ2V0X29wdGlvbnMoIm9mZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CT09UWF9URVhUKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLQkvKiBJZiB3ZSdyZSBib290ZWQgZnJvbSBCb290WC4uLiAqLwotCWlmIChib290X2luZm9zICE9IDApIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyID0KLQkJICAgICh1bnNpZ25lZCBsb25nKSBib290X2luZm9zLT5kaXNwRGV2aWNlQmFzZTsKLQkJdTMyICphZGRycDsKLQkJdTY0IGRhZGRyLCBkc2l6ZTsKLQkJdW5zaWduZWQgaW50IGZsYWdzOwotCi0JCS8qIGZpbmQgdGhlIGRldmljZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1hY29zIGRpc3BsYXkgKi8KLQkJd2hpbGUgKChkcCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRwLCAiZGlzcGxheSIpKSkgewotCQkJaW50IGk7Ci0KLQkJCS8qCi0JCQkgKiBMb29rIGZvciBhbiBBQVBMLGFkZHJlc3MgcHJvcGVydHkgZmlyc3QuCi0JCQkgKi8KLQkJCXVuc2lnbmVkIGludCBuYTsKLQkJCXVuc2lnbmVkIGludCAqYXAgPQotCQkJCSh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkoZHAsICJBQVBMLGFkZHJlc3MiLAotCQkJCQkJCSAgICAgJm5hKTsKLQkJCWlmIChhcCAhPSAwKSB7Ci0JCQkJZm9yIChuYSAvPSBzaXplb2YodW5zaWduZWQgaW50KTsgbmEgPiAwOwotCQkJCSAgICAgLS1uYSwgKythcCkKLQkJCQkJaWYgKCphcCA8PSBhZGRyICYmCi0JCQkJCSAgICBhZGRyIDwgKmFwICsgMHgxMDAwMDAwKSB7Ci0JCQkJCQltYWNvc19kaXNwbGF5ID0gZHA7Ci0JCQkJCQlnb3RvIGZvdW5kaXQ7Ci0JCQkJCX0KLQkJCX0KLQotCQkJLyoKLQkJCSAqIFNlZSBpZiB0aGUgZGlzcGxheSBhZGRyZXNzIGlzIGluIG9uZSBvZiB0aGUgYWRkcmVzcwotCQkJICogcmFuZ2VzIGZvciB0aGlzIGRpc3BsYXkuCi0JCQkgKi8KLQkJCWkgPSAwOwotCQkJZm9yICg7OykgewotCQkJCWFkZHJwID0gb2ZfZ2V0X2FkZHJlc3MoZHAsIGkrKywgJmRzaXplLCAmZmxhZ3MpOwotCQkJCWlmIChhZGRycCA9PSBOVUxMKQotCQkJCQlicmVhazsKLQkJCQlpZiAoIShmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkKLQkJCQkJY29udGludWU7Ci0JCQkJZGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhkcCwgYWRkcnApOwotCQkJCWlmIChkYWRkciA9PSBPRl9CQURfQUREUikKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKGRhZGRyIDw9IGFkZHIgJiYgYWRkciA8IChkYWRkciArIGRzaXplKSkgewotCQkJCQltYWNvc19kaXNwbGF5ID0gZHA7Ci0JCQkJCWdvdG8gZm91bmRpdDsKLQkJCQl9Ci0JCQl9Ci0JCWZvdW5kaXQ6Ci0JCQlpZiAobWFjb3NfZGlzcGxheSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIk1hY09TIGRpc3BsYXkgaXMgJXNcbiIsCi0JCQkJICAgICAgIGRwLT5mdWxsX25hbWUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJLyogaW5pdGlhbGl6ZSBpdCAqLwotCQlvZmZiX2luaXRfZmIobWFjb3NfZGlzcGxheSA/IG1hY29zX2Rpc3BsYXktPgotCQkJICAgICBuYW1lIDogIk1hY09TIGRpc3BsYXkiLAotCQkJICAgICBtYWNvc19kaXNwbGF5ID8gbWFjb3NfZGlzcGxheS0+Ci0JCQkgICAgIGZ1bGxfbmFtZSA6ICJNYWNPUyBkaXNwbGF5IiwKLQkJCSAgICAgYm9vdF9pbmZvcy0+ZGlzcERldmljZVJlY3RbMl0sCi0JCQkgICAgIGJvb3RfaW5mb3MtPmRpc3BEZXZpY2VSZWN0WzNdLAotCQkJICAgICBib290X2luZm9zLT5kaXNwRGV2aWNlRGVwdGgsCi0JCQkgICAgIGJvb3RfaW5mb3MtPmRpc3BEZXZpY2VSb3dCeXRlcywgYWRkciwgTlVMTCk7Ci0JfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0JPT1RYX1RFWFQpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAqLwotCiAJZm9yIChkcCA9IE5VTEw7IChkcCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRwLCAiZGlzcGxheSIpKTspIHsKIAkJaWYgKGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LG9wZW5lZCIsIE5VTEwpICYmCiAJCSAgICBnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290LWRpc3BsYXkiLCBOVUxMKSkgewpAQCAtMzE4LDk0ICsyNjAsOTMgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9mZmJfaW5pdF9ub2RyaXZlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQogewotCWludCAqcHAsIGk7CiAJdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgd2lkdGggPSA2NDAsIGhlaWdodCA9IDQ4MCwgZGVwdGggPSA4LCBwaXRjaDsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHJzaXplLCAqdXA7Ci0JdTY0IGFkZHJlc3MgPSBPRl9CQURfQUREUjsKLQl1MzIgKmFkZHJwOworCWludCBpLCB3aWR0aCA9IDY0MCwgaGVpZ2h0ID0gNDgwLCBkZXB0aCA9IDgsIHBpdGNoID0gNjQwOworCXVuc2lnbmVkIGludCBmbGFncywgcnNpemUsIGFkZHJfcHJvcCA9IDA7CisJdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSA9IDA7CisJdTY0IHJzdGFydCwgYWRkcmVzcyA9IE9GX0JBRF9BRERSOworCXUzMiAqcHAsICphZGRycCwgKnVwOwogCXU2NCBhc2l6ZTsKIAotCWlmICgocHAgPSAoaW50ICopIGdldF9wcm9wZXJ0eShkcCwgImRlcHRoIiwgJmxlbikpICE9IE5VTEwKLQkgICAgJiYgbGVuID09IHNpemVvZihpbnQpKQorCXBwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWRlcHRoIiwgJmxlbik7CisJaWYgKHBwID09IE5VTEwpCisJCXBwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgImRlcHRoIiwgJmxlbik7CisJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKIAkJZGVwdGggPSAqcHA7Ci0JaWYgKChwcCA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRwLCAid2lkdGgiLCAmbGVuKSkgIT0gTlVMTAotCSAgICAmJiBsZW4gPT0gc2l6ZW9mKGludCkpCisKKwlwcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC13aWR0aCIsICZsZW4pOworCWlmIChwcCA9PSBOVUxMKQorCQlwcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJ3aWR0aCIsICZsZW4pOworCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikpCiAJCXdpZHRoID0gKnBwOwotCWlmICgocHAgPSAoaW50ICopIGdldF9wcm9wZXJ0eShkcCwgImhlaWdodCIsICZsZW4pKSAhPSBOVUxMCi0JICAgICYmIGxlbiA9PSBzaXplb2YoaW50KSkKKworCXBwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWhlaWdodCIsICZsZW4pOworCWlmIChwcCA9PSBOVUxMKQorCQlwcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJoZWlnaHQiLCAmbGVuKTsKKwlpZiAocHAgJiYgbGVuID09IHNpemVvZih1MzIpKQogCQloZWlnaHQgPSAqcHA7Ci0JaWYgKChwcCA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRwLCAibGluZWJ5dGVzIiwgJmxlbikpICE9IE5VTEwKLQkgICAgJiYgbGVuID09IHNpemVvZihpbnQpKSB7CisKKwlwcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC1saW5lYnl0ZXMiLCAmbGVuKTsKKwlpZiAocHAgPT0gTlVMTCkKKwkJcHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRwLCAibGluZWJ5dGVzIiwgJmxlbik7CisJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKIAkJcGl0Y2ggPSAqcHA7Ci0JCWlmIChwaXRjaCA9PSAxKQotCQkJcGl0Y2ggPSAweDEwMDA7Ci0JfSBlbHNlCi0JCXBpdGNoID0gd2lkdGg7CisJZWxzZQorCQlwaXRjaCA9IHdpZHRoICogKChkZXB0aCArIDcpIC8gOCk7CiAKLSAgICAgICByc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXBpdGNoICogKHVuc2lnbmVkIGxvbmcpaGVpZ2h0ICoKLSAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShkZXB0aCAvIDgpOworCXJzaXplID0gKHVuc2lnbmVkIGxvbmcpcGl0Y2ggKiAodW5zaWduZWQgbG9uZyloZWlnaHQ7CiAKLSAgICAgICAvKiBUcnkgdG8gbWF0Y2ggZGV2aWNlIHRvIGEgUENJIGRldmljZSBpbiBvcmRlciB0byBnZXQgYSBwcm9wZXJseQotCSogdHJhbnNsYXRlZCBhZGRyZXNzIHJhdGhlciB0aGVuIHRyeWluZyB0byBkZWNvZGUgdGhlIG9wZW4gZmlybXdhcmUKLQkqIHN0dWZmIGluIHZhcmlvdXMgaW5jb3JyZWN0IHdheXMKLQkqLwotI2lmZGVmIENPTkZJR19QQ0kKLSAgICAgICAvKiBGaXJzdCB0cnkgdG8gbG9jYXRlIHRoZSBQQ0kgZGV2aWNlIGlmIGFueSAqLwotICAgICAgIHsKLSAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwkvKiBPaywgbm93IHdlIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBhZGRyZXNzIG9mIHRoZSBmcmFtZWJ1ZmZlci4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHksIE9wZW4gRmlybXdhcmUgZG9lc24ndCBwcm92aWRlIGEgc3RhbmRhcmQgd2F5IHRvIGRvCisJICogc28uIEFsbCB3ZSBjYW4gZG8gaXMgYSBkb2RneSBoZXVyaXN0aWMgdGhhdCBoYXBwZW5zIHRvIHdvcmsgaW4KKwkgKiBwcmFjdGljZS4gT24gbW9zdCBtYWNoaW5lcywgdGhlICJhZGRyZXNzIiBwcm9wZXJ0eSBjb250YWlucyB3aGF0CisJICogd2UgbmVlZCwgdGhvdWdoIG5vdCBvbiBNYXRyb3ggY2FyZHMgZm91bmQgaW4gSUJNIG1hY2hpbmVzLiBXaGF0IEkndmUKKwkgKiBmb3VuZCB0aGF0IGFwcGVhcnMgdG8gZ2l2ZSBnb29kIHJlc3VsdHMgaXMgdG8gZ28gdGhyb3VnaCB0aGUgUENJCisJICogcmFuZ2VzIGFuZCBwaWNrIG9uZSB0aGF0IGlzIGJvdGggYmlnIGVub3VnaCBhbmQgaWYgcG9zc2libGUgZW5jbG9zZXMKKwkgKiB0aGUgImFkZHJlc3MiIHByb3BlcnR5LiBJZiBub25lIG1hdGNoLCB3ZSBwaWNrIHRoZSBiaWdnZXN0CisJICovCisJdXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtYWRkciIsICZsZW4pOworCWlmICh1cCA9PSBOVUxMKQorCQl1cCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJhZGRyZXNzIiwgJmxlbik7CisJaWYgKHVwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKKwkJYWRkcl9wcm9wID0gKnVwOwogCi0JICAgICAgIGZvcl9lYWNoX3BjaV9kZXYocGRldikgewotICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHAgPT0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAocGRldikgewotICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNiAmJiBhZGRyZXNzID09IE9GX0JBRF9BRERSOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmCi0JCQkJICAgIElPUkVTT1VSQ0VfTUVNKSAmJgotCQkJCSAgIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpID49IHJzaXplKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIH0KLQkJICAgICAgIHBjaV9kZXZfcHV0KHBkZXYpOwotICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSSAqLworCWZvciAoaSA9IDA7IChhZGRycCA9IG9mX2dldF9hZGRyZXNzKGRwLCBpLCAmYXNpemUsICZmbGFncykpCisJCSAgICAgIT0gTlVMTDsgaSsrKSB7CisJCWludCBtYXRjaF9hZGRycCA9IDA7CiAKLSAgICAgICAvKiBUaGlzIG9uZSBpcyBkb2RneSwgd2UgbWF5IGRyb3AgaXQgLi4uICovCi0gICAgICAgaWYgKGFkZHJlc3MgPT0gT0ZfQkFEX0FERFIgJiYKLQkgICAodXAgPSAodW5zaWduZWQgKikgZ2V0X3Byb3BlcnR5KGRwLCAiYWRkcmVzcyIsICZsZW4pKSAhPSBOVUxMICYmCi0JICAgbGVuID09IHNpemVvZih1bnNpZ25lZCBpbnQpKQotCSAgICAgICBhZGRyZXNzID0gKHU2NCkgKiB1cDsKLQotICAgICAgIGlmIChhZGRyZXNzID09IE9GX0JBRF9BRERSKSB7Ci0JICAgICAgIGZvciAoaSA9IDA7IChhZGRycCA9IG9mX2dldF9hZGRyZXNzKGRwLCBpLCAmYXNpemUsICZmbGFncykpCi0JCQkgICAgIT0gTlVMTDsgaSsrKSB7Ci0JCSAgICAgICBpZiAoIShmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkKLQkJCSAgICAgICBjb250aW51ZTsKLQkJICAgICAgIGlmIChhc2l6ZSA+PSBwaXRjaCAqIGhlaWdodCAqIGRlcHRoIC8gOCkKLQkJCSAgICAgICBicmVhazsKLQkgICAgICAgfQotCQlpZiAoYWRkcnAgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm5vIGZyYW1lYnVmZmVyIGFkZHJlc3MgZm91bmQgZm9yICVzXG4iLAotCQkJICAgICAgIGRwLT5mdWxsX25hbWUpOwotCQkJcmV0dXJuOworCQlpZiAoIShmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYXNpemUgPCByc2l6ZSkKKwkJCWNvbnRpbnVlOworCQlyc3RhcnQgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhkcCwgYWRkcnApOworCQlpZiAocnN0YXJ0ID09IE9GX0JBRF9BRERSKQorCQkJY29udGludWU7CisJCWlmIChhZGRyX3Byb3AgJiYgKHJzdGFydCA8PSBhZGRyX3Byb3ApICYmCisJCSAgICAoKHJzdGFydCArIGFzaXplKSA+PSAoYWRkcl9wcm9wICsgcnNpemUpKSkKKwkJCW1hdGNoX2FkZHJwID0gMTsKKwkJaWYgKG1hdGNoX2FkZHJwKSB7CisJCQlhZGRyZXNzID0gYWRkcl9wcm9wOworCQkJYnJlYWs7CiAJCX0KLQkJYWRkcmVzcyA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKGRwLCBhZGRycCk7Ci0JCWlmIChhZGRyZXNzID09IE9GX0JBRF9BRERSKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGZyYW1lYnVmZmVyIGFkZHJlc3MgZm9yICVzXG4iLAotCQkJICAgICAgIGRwLT5mdWxsX25hbWUpOwotCQkJcmV0dXJuOwotCQl9CisJCWlmIChyc2l6ZSA+IG1heF9zaXplKSB7CisJCQltYXhfc2l6ZSA9IHJzaXplOworCQkJYWRkcmVzcyA9IE9GX0JBRF9BRERSOworIAkJfQogCisJCWlmIChhZGRyZXNzID09IE9GX0JBRF9BRERSKQorCQkJYWRkcmVzcyA9IHJzdGFydDsKKwl9CisJaWYgKGFkZHJlc3MgPT0gT0ZfQkFEX0FERFIgJiYgYWRkcl9wcm9wKQorCQlhZGRyZXNzID0gKHU2NClhZGRyX3Byb3A7CisJaWYgKGFkZHJlc3MgIT0gT0ZfQkFEX0FERFIpIHsKIAkJLyoga2x1ZGdlIGZvciB2YWxreXJpZSAqLwogCQlpZiAoc3RyY21wKGRwLT5uYW1lLCAidmFsa3lyaWUiKSA9PSAwKQogCQkJYWRkcmVzcyArPSAweDEwMDA7CisJCW9mZmJfaW5pdF9mYihkcC0+bmFtZSwgZHAtPmZ1bGxfbmFtZSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsCisJCQkgICAgIHBpdGNoLCBhZGRyZXNzLCBkcCk7CiAJfQotCW9mZmJfaW5pdF9mYihkcC0+bmFtZSwgZHAtPmZ1bGxfbmFtZSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsCi0JCSAgICAgcGl0Y2gsIGFkZHJlc3MsIGRwKTsKLQogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb2ZmYl9pbml0X2ZiKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSwKQEAgLTQxMyw3ICszNTQsNyBAQAogCQkJCWludCBwaXRjaCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCiB7Ci0JdW5zaWduZWQgbG9uZyByZXNfc2l6ZSA9IHBpdGNoICogaGVpZ2h0ICogZGVwdGggLyA4OworCXVuc2lnbmVkIGxvbmcgcmVzX3NpemUgPSBwaXRjaCAqIGhlaWdodCAqIChkZXB0aCArIDcpIC8gODsKIAlzdHJ1Y3Qgb2ZmYl9wYXIgKnBhciA9ICZkZWZhdWx0X3BhcjsKIAl1bnNpZ25lZCBsb25nIHJlc19zdGFydCA9IGFkZHJlc3M7CiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXg7CkBAIC00MjcsNyArMzY4LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJVc2luZyB1bnN1cHBvcnRlZCAlZHglZCAlcyBhdCAlbHgsIGRlcHRoPSVkLCBwaXRjaD0lZFxuIiwKIAkgICAgICAgd2lkdGgsIGhlaWdodCwgbmFtZSwgYWRkcmVzcywgZGVwdGgsIHBpdGNoKTsKLQlpZiAoZGVwdGggIT0gOCAmJiBkZXB0aCAhPSAxNiAmJiBkZXB0aCAhPSAzMikgeworCWlmIChkZXB0aCAhPSA4ICYmIGRlcHRoICE9IDE1ICYmIGRlcHRoICE9IDE2ICYmIGRlcHRoICE9IDMyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHVzZSBkZXB0aCA9ICVkXG4iLCBmdWxsX25hbWUsCiAJCSAgICAgICBkZXB0aCk7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXNfc3RhcnQsIHJlc19zaXplKTsKQEAgLTUwMyw3ICs0NDQsNiBAQAogCQkJCSAgIDogKi8gRkJfVklTVUFMX1RSVUVDT0xPUjsKIAogCXZhci0+eG9mZnNldCA9IHZhci0+eW9mZnNldCA9IDA7Ci0JdmFyLT5iaXRzX3Blcl9waXhlbCA9IGRlcHRoOwogCXN3aXRjaCAoZGVwdGgpIHsKIAljYXNlIDg6CiAJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSA4OwpAQCAtNTE2LDcgKzQ1Niw3IEBACiAJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CiAJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CiAJCWJyZWFrOwotCWNhc2UgMTY6CQkvKiBSR0IgNTU1ICovCisJY2FzZSAxNToJCS8qIFJHQiA1NTUgKi8KIAkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OwogCQl2YXItPnJlZC5vZmZzZXQgPSAxMDsKIAkJdmFyLT5yZWQubGVuZ3RoID0gNTsKQEAgLTUyNyw2ICs0NjcsMTcgQEAKIAkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKIAkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKIAkJYnJlYWs7CisJY2FzZSAxNjoJCS8qIFJHQiA1NjUgKi8KKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OworCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJYnJlYWs7CiAJY2FzZSAzMjoJCS8qIFJHQiA4ODggKi8KIAkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOwogCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcDkxMDAuYyBiL2RyaXZlcnMvdmlkZW8vcDkxMDAuYwppbmRleCAwZDE5NTc1Li41NmFjNTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3A5MTAwLmMKKysrIGIvZHJpdmVycy92aWRlby9wOTEwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyogcDkxMDAuYzogUDkxMDAgZnJhbWUgYnVmZmVyIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IDE5OTkgRGVycmljayBKIEJyYXNoZWFyIChzaGFkb3dAZGVtZW50aWEub3JnKQogICoKICAqIERyaXZlciBsYXlvdXQgYmFzZWQgbG9vc2VseSBvbiB0Z2FmYi5jLCBzZWUgdGhhdCBmaWxlIGZvciBjcmVkaXRzLgpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2J1cy5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9mYmlvLmg+CiAKICNpbmNsdWRlICJzYnVzbGliLmgiCkBAIC03Miw2MCArNzIsNjAgQEAKIAogc3RydWN0IHA5MTAwX3JlZ3MgewogCS8qIFJlZ2lzdGVycyBmb3IgdGhlIHN5c3RlbSBjb250cm9sICovCi0Jdm9sYXRpbGUgdTMyIHN5c19iYXNlOwotCXZvbGF0aWxlIHUzMiBzeXNfY29uZmlnOwotCXZvbGF0aWxlIHUzMiBzeXNfaW50cjsKLQl2b2xhdGlsZSB1MzIgc3lzX2ludF9lbmE7Ci0Jdm9sYXRpbGUgdTMyIHN5c19hbHRfcmQ7Ci0Jdm9sYXRpbGUgdTMyIHN5c19hbHRfd3I7Ci0Jdm9sYXRpbGUgdTMyIHN5c194eHhbNThdOworCXUzMiBzeXNfYmFzZTsKKwl1MzIgc3lzX2NvbmZpZzsKKwl1MzIgc3lzX2ludHI7CisJdTMyIHN5c19pbnRfZW5hOworCXUzMiBzeXNfYWx0X3JkOworCXUzMiBzeXNfYWx0X3dyOworCXUzMiBzeXNfeHh4WzU4XTsKIAogCS8qIFJlZ2lzdGVycyBmb3IgdGhlIHZpZGVvIGNvbnRyb2wgKi8KLQl2b2xhdGlsZSB1MzIgdmlkX2Jhc2U7Ci0Jdm9sYXRpbGUgdTMyIHZpZF9oY250OwotCXZvbGF0aWxlIHUzMiB2aWRfaHRvdGFsOwotCXZvbGF0aWxlIHUzMiB2aWRfaHN5bmNfcmlzZTsKLQl2b2xhdGlsZSB1MzIgdmlkX2hibGFua19yaXNlOwotCXZvbGF0aWxlIHUzMiB2aWRfaGJsYW5rX2ZhbGw7Ci0Jdm9sYXRpbGUgdTMyIHZpZF9oY250X3ByZWxvYWQ7Ci0Jdm9sYXRpbGUgdTMyIHZpZF92Y250OwotCXZvbGF0aWxlIHUzMiB2aWRfdmxlbjsKLQl2b2xhdGlsZSB1MzIgdmlkX3ZzeW5jX3Jpc2U7Ci0Jdm9sYXRpbGUgdTMyIHZpZF92YmxhbmtfcmlzZTsKLQl2b2xhdGlsZSB1MzIgdmlkX3ZibGFua19mYWxsOwotCXZvbGF0aWxlIHUzMiB2aWRfdmNudF9wcmVsb2FkOwotCXZvbGF0aWxlIHUzMiB2aWRfc2NyZWVucGFpbnRfYWRkcjsKLQl2b2xhdGlsZSB1MzIgdmlkX3NjcmVlbnBhaW50X3RpbWVjdGwxOwotCXZvbGF0aWxlIHUzMiB2aWRfc2NyZWVucGFpbnRfcXNmY250OwotCXZvbGF0aWxlIHUzMiB2aWRfc2NyZWVucGFpbnRfdGltZWN0bDI7Ci0Jdm9sYXRpbGUgdTMyIHZpZF94eHhbMTVdOworCXUzMiB2aWRfYmFzZTsKKwl1MzIgdmlkX2hjbnQ7CisJdTMyIHZpZF9odG90YWw7CisJdTMyIHZpZF9oc3luY19yaXNlOworCXUzMiB2aWRfaGJsYW5rX3Jpc2U7CisJdTMyIHZpZF9oYmxhbmtfZmFsbDsKKwl1MzIgdmlkX2hjbnRfcHJlbG9hZDsKKwl1MzIgdmlkX3ZjbnQ7CisJdTMyIHZpZF92bGVuOworCXUzMiB2aWRfdnN5bmNfcmlzZTsKKwl1MzIgdmlkX3ZibGFua19yaXNlOworCXUzMiB2aWRfdmJsYW5rX2ZhbGw7CisJdTMyIHZpZF92Y250X3ByZWxvYWQ7CisJdTMyIHZpZF9zY3JlZW5wYWludF9hZGRyOworCXUzMiB2aWRfc2NyZWVucGFpbnRfdGltZWN0bDE7CisJdTMyIHZpZF9zY3JlZW5wYWludF9xc2ZjbnQ7CisJdTMyIHZpZF9zY3JlZW5wYWludF90aW1lY3RsMjsKKwl1MzIgdmlkX3h4eFsxNV07CiAKIAkvKiBSZWdpc3RlcnMgZm9yIHRoZSB2aWRlbyBjb250cm9sICovCi0Jdm9sYXRpbGUgdTMyIHZyYW1fYmFzZTsKLQl2b2xhdGlsZSB1MzIgdnJhbV9tZW1jZmc7Ci0Jdm9sYXRpbGUgdTMyIHZyYW1fcmVmcmVzaF9wZDsKLQl2b2xhdGlsZSB1MzIgdnJhbV9yZWZyZXNoX2NudDsKLQl2b2xhdGlsZSB1MzIgdnJhbV9yYXNsb19tYXg7Ci0Jdm9sYXRpbGUgdTMyIHZyYW1fcmFzbG9fY3VyOwotCXZvbGF0aWxlIHUzMiBwd3J1cF9jZmc7Ci0Jdm9sYXRpbGUgdTMyIHZyYW1feHh4WzI1XTsKKwl1MzIgdnJhbV9iYXNlOworCXUzMiB2cmFtX21lbWNmZzsKKwl1MzIgdnJhbV9yZWZyZXNoX3BkOworCXUzMiB2cmFtX3JlZnJlc2hfY250OworCXUzMiB2cmFtX3Jhc2xvX21heDsKKwl1MzIgdnJhbV9yYXNsb19jdXI7CisJdTMyIHB3cnVwX2NmZzsKKwl1MzIgdnJhbV94eHhbMjVdOwogCiAJLyogUmVnaXN0ZXJzIGZvciBJQk0gUkdCNTI4IFBhbGV0dGUgKi8KLQl2b2xhdGlsZSB1MzIgcmFtZGFjX2NtYXBfd3JpZHg7IAotCXZvbGF0aWxlIHUzMiByYW1kYWNfcGFsZXR0ZV9kYXRhOwotCXZvbGF0aWxlIHUzMiByYW1kYWNfcGl4ZWxfbWFzazsKLQl2b2xhdGlsZSB1MzIgcmFtZGFjX3BhbGV0dGVfcmRhZGRyOwotCXZvbGF0aWxlIHUzMiByYW1kYWNfaWR4X2xvOwotCXZvbGF0aWxlIHUzMiByYW1kYWNfaWR4X2hpOwotCXZvbGF0aWxlIHUzMiByYW1kYWNfaWR4X2RhdGE7Ci0Jdm9sYXRpbGUgdTMyIHJhbWRhY19pZHhfY3RsOwotCXZvbGF0aWxlIHUzMiByYW1kYWNfeHh4WzE3ODRdOworCXUzMiByYW1kYWNfY21hcF93cmlkeDsgCisJdTMyIHJhbWRhY19wYWxldHRlX2RhdGE7CisJdTMyIHJhbWRhY19waXhlbF9tYXNrOworCXUzMiByYW1kYWNfcGFsZXR0ZV9yZGFkZHI7CisJdTMyIHJhbWRhY19pZHhfbG87CisJdTMyIHJhbWRhY19pZHhfaGk7CisJdTMyIHJhbWRhY19pZHhfZGF0YTsKKwl1MzIgcmFtZGFjX2lkeF9jdGw7CisJdTMyIHJhbWRhY194eHhbMTc4NF07CiB9OwogCiBzdHJ1Y3QgcDkxMDBfY21kX3BhcmFtZW5nIHsKLQl2b2xhdGlsZSB1MzIgcGFyYW1lbmdfc3RhdHVzOwotCXZvbGF0aWxlIHUzMiBwYXJhbWVuZ19ibHRjbWQ7Ci0Jdm9sYXRpbGUgdTMyIHBhcmFtZW5nX3F1YWRjbWQ7CisJdTMyIHBhcmFtZW5nX3N0YXR1czsKKwl1MzIgcGFyYW1lbmdfYmx0Y21kOworCXUzMiBwYXJhbWVuZ19xdWFkY21kOwogfTsKIAogc3RydWN0IHA5MTAwX3BhciB7CkBAIC0xMzYsOSArMTM2LDggQEAKICNkZWZpbmUgUDkxMDBfRkxBR19CTEFOS0VECTB4MDAwMDAwMDEKIAogCXVuc2lnbmVkIGxvbmcJCXBoeXNiYXNlOworCXVuc2lnbmVkIGxvbmcJCXdoaWNoX2lvOwogCXVuc2lnbmVkIGxvbmcJCWZic2l6ZTsKLQotCXN0cnVjdCBzYnVzX2RldgkJKnNkZXY7CiB9OwogCiAvKioKQEAgLTIyNyw4ICsyMjYsNyBAQAogCiAJcmV0dXJuIHNidXNmYl9tbWFwX2hlbHBlcihwOTEwMF9tbWFwX21hcCwKIAkJCQkgIHBhci0+cGh5c2Jhc2UsIHBhci0+ZmJzaXplLAotCQkJCSAgcGFyLT5zZGV2LT5yZWdfYWRkcnNbMF0ud2hpY2hfaW8sCi0JCQkJICB2bWEpOworCQkJCSAgcGFyLT53aGljaF9pbywgdm1hKTsKIH0KIAogc3RhdGljIGludCBwOTEwMF9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKQEAgLTI0NSwxMiArMjQzLDkgQEAKICAqICBJbml0aWFsaXNhdGlvbgogICovCiAKLXN0YXRpYyB2b2lkCi1wOTEwMF9pbml0X2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGxpbmVieXRlcykKK3N0YXRpYyB2b2lkIHA5MTAwX2luaXRfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgbGluZWJ5dGVzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQogewotCXN0cnVjdCBwOTEwMF9wYXIgKnBhciA9IChzdHJ1Y3QgcDkxMDBfcGFyICopaW5mby0+cGFyOwotCi0Jc3RybGNweShpbmZvLT5maXguaWQsIHBhci0+c2Rldi0+cHJvbV9uYW1lLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CisJc3RybGNweShpbmZvLT5maXguaWQsIGRwLT5uYW1lLCBzaXplb2YoaW5mby0+Zml4LmlkKSk7CiAKIAlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwpAQCAtMjYzLDEyMSArMjU4LDEzNyBAQAogc3RydWN0IGFsbF9pbmZvIHsKIAlzdHJ1Y3QgZmJfaW5mbyBpbmZvOwogCXN0cnVjdCBwOTEwMF9wYXIgcGFyOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07Ci1zdGF0aWMgTElTVF9IRUFEKHA5MTAwX2xpc3QpOwogCi1zdGF0aWMgdm9pZCBwOTEwMF9pbml0X29uZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwOTEwMF9pbml0X29uZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CiAJc3RydWN0IGFsbF9pbmZvICphbGw7Ci0JaW50IGxpbmVieXRlczsKKwlpbnQgbGluZWJ5dGVzLCBlcnI7CiAKLQlhbGwgPSBrbWFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhbGwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwOTEwMDogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCW1lbXNldChhbGwsIDAsIHNpemVvZigqYWxsKSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYWxsLT5saXN0KTsKKwlhbGwgPSBremFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFsbC0+cGFyLmxvY2spOwotCWFsbC0+cGFyLnNkZXYgPSBzZGV2OwogCiAJLyogVGhpcyBpcyB0aGUgZnJhbWVidWZmZXIgYW5kIHRoZSBvbmx5IHJlc291cmNlIGFwcHMgY2FuIG1tYXAuICAqLwotCWFsbC0+cGFyLnBoeXNiYXNlID0gc2Rldi0+cmVnX2FkZHJzWzJdLnBoeXNfYWRkcjsKKwlhbGwtPnBhci5waHlzYmFzZSA9IG9wLT5yZXNvdXJjZVsyXS5zdGFydDsKKwlhbGwtPnBhci53aGljaF9pbyA9IG9wLT5yZXNvdXJjZVsyXS5mbGFncyAmIElPUkVTT1VSQ0VfQklUUzsKIAotCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgc2Rldi0+cHJvbV9ub2RlLCA4KTsKKwlzYnVzZmJfZmlsbF92YXIoJmFsbC0+aW5mby52YXIsIGRwLT5ub2RlLCA4KTsKIAlhbGwtPmluZm8udmFyLnJlZC5sZW5ndGggPSA4OwogCWFsbC0+aW5mby52YXIuZ3JlZW4ubGVuZ3RoID0gODsKIAlhbGwtPmluZm8udmFyLmJsdWUubGVuZ3RoID0gODsKIAotCWxpbmVieXRlcyA9IHByb21fZ2V0aW50ZGVmYXVsdChzZGV2LT5wcm9tX25vZGUsICJsaW5lYnl0ZXMiLAotCQkJCSAgICAgICBhbGwtPmluZm8udmFyLnhyZXMpOworCWxpbmVieXRlcyA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImxpbmVieXRlcyIsCisJCQkJCSAgYWxsLT5pbmZvLnZhci54cmVzKTsKIAlhbGwtPnBhci5mYnNpemUgPSBQQUdFX0FMSUdOKGxpbmVieXRlcyAqIGFsbC0+aW5mby52YXIueXJlcyk7CiAKLQlhbGwtPnBhci5yZWdzID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgMCwKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBwOTEwMF9yZWdzKSwgInA5MTAwIHJlZ3MiKTsKKwlhbGwtPnBhci5yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCAwLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcDkxMDBfcmVncyksICJwOTEwMCByZWdzIik7CisJaWYgKCFhbGwtPnBhci5yZWdzKSB7CisJCWtmcmVlKGFsbCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWFsbC0+aW5mby5mbGFncyA9IEZCSU5GT19ERUZBVUxUOwogCWFsbC0+aW5mby5mYm9wcyA9ICZwOTEwMF9vcHM7Ci0jaWZkZWYgQ09ORklHX1NQQVJDMzIKLQlhbGwtPmluZm8uc2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopCi0JCXByb21fZ2V0aW50ZGVmYXVsdChzZGV2LT5wcm9tX25vZGUsICJhZGRyZXNzIiwgMCk7Ci0jZW5kaWYKLQlpZiAoIWFsbC0+aW5mby5zY3JlZW5fYmFzZSkKLQkJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVsyXSwgMCwKLQkJCQkgICAgIGFsbC0+cGFyLmZic2l6ZSwgInA5MTAwIHJhbSIpOworCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVsyXSwgMCwKKwkJCQkJICAgYWxsLT5wYXIuZmJzaXplLCAicDkxMDAgcmFtIik7CisJaWYgKCFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpIHsKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5yZWdzLCBzaXplb2Yoc3RydWN0IHA5MTAwX3JlZ3MpKTsKKwkJa2ZyZWUoYWxsKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCWFsbC0+aW5mby5wYXIgPSAmYWxsLT5wYXI7CiAKIAlwOTEwMF9ibGFuaygwLCAmYWxsLT5pbmZvKTsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCwgMjU2LCAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgInA5MTAwOiBDb3VsZCBub3QgYWxsb2NhdGUgY29sb3IgbWFwLlxuIik7CisJCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBwOTEwMF9yZWdzKSk7CisJCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogCQlrZnJlZShhbGwpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXA5MTAwX2luaXRfZml4KCZhbGwtPmluZm8sIGxpbmVieXRlcyk7CisJcDkxMDBfaW5pdF9maXgoJmFsbC0+aW5mbywgbGluZWJ5dGVzLCBkcCk7CiAKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicDkxMDA6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlci5cbiIpOworCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOworCWlmIChlcnIgPCAwKSB7CiAJCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOworCQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgcDkxMDBfcmVncykpOworCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyOwogCX0KIAlmYl9zZXRfY21hcCgmYWxsLT5pbmZvLmNtYXAsICZhbGwtPmluZm8pOwogCi0JbGlzdF9hZGQoJmFsbC0+bGlzdCwgJnA5MTAwX2xpc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgYWxsKTsKIAotCXByaW50aygicDkxMDA6ICVzIGF0ICVseDolbHhcbiIsCi0JICAgICAgIHNkZXYtPnByb21fbmFtZSwKLQkgICAgICAgKGxvbmcpIHNkZXYtPnJlZ19hZGRyc1swXS53aGljaF9pbywKLQkgICAgICAgKGxvbmcpIHNkZXYtPnJlZ19hZGRyc1swXS5waHlzX2FkZHIpOworCXByaW50aygiJXM6IHA5MTAwIGF0ICVseDolbHhcbiIsCisJICAgICAgIGRwLT5mdWxsX25hbWUsCisJICAgICAgIGFsbC0+cGFyLndoaWNoX2lvLCBhbGwtPnBhci5waHlzYmFzZSk7CisKKwlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBwOTEwMF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwOTEwMF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewotCXN0cnVjdCBzYnVzX2J1cyAqc2J1czsKLQlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXY7CisJc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoJmRldi0+ZGV2KTsKIAorCXJldHVybiBwOTEwMF9pbml0X29uZShvcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHA5MTAwX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CisJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CisKKwlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgcDkxMDBfcmVncykpOworCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworCisJa2ZyZWUoYWxsKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHA5MTAwX21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJwOTEwMCIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwOTEwMF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHA5MTAwX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicDkxMDAiLAorCS5tYXRjaF90YWJsZQk9IHA5MTAwX21hdGNoLAorCS5wcm9iZQkJPSBwOTEwMF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHA5MTAwX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwOTEwMF9pbml0KHZvaWQpCit7CiAJaWYgKGZiX2dldF9vcHRpb25zKCJwOTEwMGZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZm9yX2FsbF9zYnVzZGV2KHNkZXYsIHNidXMpIHsKLQkJaWYgKCFzdHJjbXAoc2Rldi0+cHJvbV9uYW1lLCAicDkxMDAiKSkKLQkJCXA5MTAwX2luaXRfb25lKHNkZXYpOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnA5MTAwX2RyaXZlciwgJm9mX2J1c190eXBlKTsKIH0KIAotdm9pZCBfX2V4aXQgcDkxMDBfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHA5MTAwX2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZwOTEwMF9saXN0KSB7Ci0JCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gbGlzdF9lbnRyeShwb3MsIHR5cGVvZigqYWxsKSwgbGlzdCk7Ci0KLQkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7Ci0JCWtmcmVlKGFsbCk7Ci0JfQotfQotCi1pbnQgX19pbml0Ci1wOTEwMF9zZXR1cChjaGFyICphcmcpCi17Ci0JLyogTm8gY21kbGluZSBvcHRpb25zIHlldC4uLiAqLwotCXJldHVybiAwOworCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZwOTEwMF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwOTEwMF9pbml0KTsKLQotI2lmZGVmIE1PRFVMRQogbW9kdWxlX2V4aXQocDkxMDBfZXhpdCk7Ci0jZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFA5MTAwIGNoaXBzZXRzIik7Ci1NT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+Iik7CitNT0RVTEVfVkVSU0lPTigiMi4wIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYyBiL2RyaXZlcnMvdmlkZW8vcGxhdGludW1mYi5jCmluZGV4IDMzNWUzNzQuLjQ1MGU4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcGxhdGludW1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcGxhdGludW1mYi5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbTJmYi5jIGIvZHJpdmVycy92aWRlby9wbTJmYi5jCmluZGV4IDRlOTYzOTMuLjQ5YTIwM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG0yZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqIAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbTNmYi5jIGIvZHJpdmVycy92aWRlby9wbTNmYi5jCmluZGV4IDUyYzE4YTMuLjBlMGY5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG0zZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAqICBXZWQgRmViIDIxIDE0OjQ3OjA2IENFVCAyMDAxLCB2IDEuMC4wOiBGaXJzdCB3b3JraW5nIHZlcnNpb24KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzZhYWNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9wbng0MDA4L01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIG5ldyBQTlg0MDA4IGZyYW1lYnVmZmVyIGRldmljZSBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX0ZCX1BOWDQwMDhfRFVNKSArPSBzZHVtLm8KK29iai0kKENPTkZJR19GQl9QTlg0MDA4X0RVTV9SR0IpICs9IHBueHJnYmZiLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbng0MDA4L2R1bS5oIGIvZHJpdmVycy92aWRlby9wbng0MDA4L2R1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGE2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvZHVtLmgKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvZHVtLmgKKyAqCisgKiBJbnRlcm5hbCBoZWFkZXIgZm9yIFNEVU0KKyAqCisgKiAyMDA1IChjKSBLb25pbmtsaWprZSBQaGlsaXBzIE4uVi4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BOWDAwOF9EVU1fSF9fCisjZGVmaW5lIF9fUE5YMDA4X0RVTV9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKKyNkZWZpbmUgUE5YNDAwOF9EVU1DT05GX1ZBX0JBU0UJCUlPX0FERFJFU1MoUE5YNDAwOF9EVU1DT05GX0JBU0UpCisjZGVmaW5lIFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRQlJT19BRERSRVNTKFBOWDQwMDhfRFVNX01BSU5DRkdfQkFTRSkKKworLyogRFVNIENGRyBBRERSRVNTRVMgKi8KKyNkZWZpbmUgRFVNX0NIX0JBU0VfQURSCQkoUE5YNDAwOF9EVU1DT05GX1ZBX0JBU0UgKyAweDAwKQorI2RlZmluZSBEVU1fQ0hfTUlOX0FEUgkJKFBOWDQwMDhfRFVNQ09ORl9WQV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgRFVNX0NIX01BWF9BRFIJCShQTlg0MDA4X0RVTUNPTkZfVkFfQkFTRSArIDB4MDQpCisjZGVmaW5lIERVTV9DSF9DT05GX0FEUgkJKFBOWDQwMDhfRFVNQ09ORl9WQV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgRFVNX0NIX1NUQVRfQURSCQkoUE5YNDAwOF9EVU1DT05GX1ZBX0JBU0UgKyAweDBDKQorI2RlZmluZSBEVU1fQ0hfQ1RSTF9BRFIJCShQTlg0MDA4X0RVTUNPTkZfVkFfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgQ0hfTUFSRwkJKDB4MTAwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIERVTV9DSF9NSU4oaSkJKCooKHZvbGF0aWxlIHUzMiAqKURVTV9DSF9NSU5fQURSICsgKGkpICogQ0hfTUFSRykpCisjZGVmaW5lIERVTV9DSF9NQVgoaSkJKCooKHZvbGF0aWxlIHUzMiAqKURVTV9DSF9NQVhfQURSICsgKGkpICogQ0hfTUFSRykpCisjZGVmaW5lIERVTV9DSF9DT05GKGkpCSgqKCh2b2xhdGlsZSB1MzIgKilEVU1fQ0hfQ09ORl9BRFIgKyAoaSkgKiBDSF9NQVJHKSkKKyNkZWZpbmUgRFVNX0NIX1NUQVQoaSkJKCooKHZvbGF0aWxlIHUzMiAqKURVTV9DSF9TVEFUX0FEUiArIChpKSAqIENIX01BUkcpKQorI2RlZmluZSBEVU1fQ0hfQ1RSTChpKQkoKigodm9sYXRpbGUgdTMyICopRFVNX0NIX0NUUkxfQURSICsgKGkpICogQ0hfTUFSRykpCisKKyNkZWZpbmUgRFVNX0NPTkZfQURSICAgICAgICAgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDAwKQorI2RlZmluZSBEVU1fQ1RSTF9BRFIgICAgICAgICAgKFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRSArIDB4MDQpCisjZGVmaW5lIERVTV9TVEFUX0FEUiAgICAgICAgICAoUE5YNDAwOF9EVU1fTUFJTl9WQV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgRFVNX0RFQ09ERV9BRFIgICAgICAgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDBDKQorI2RlZmluZSBEVU1fQ09NX0JBU0VfQURSICAgICAgKFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRSArIDB4MTApCisjZGVmaW5lIERVTV9TWU5DX0NfQURSICAgICAgICAoUE5YNDAwOF9EVU1fTUFJTl9WQV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgRFVNX0NMS19ESVZfQURSICAgICAgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDE4KQorI2RlZmluZSBEVU1fRElSVFlfTE9XX0FEUiAgICAgKFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRSArIDB4MjApCisjZGVmaW5lIERVTV9ESVJUWV9ISUdIX0FEUiAgICAoUE5YNDAwOF9EVU1fTUFJTl9WQV9CQVNFICsgMHgyNCkKKyNkZWZpbmUgRFVNX0ZPUk1BVF9BRFIgICAgICAgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDI4KQorI2RlZmluZSBEVU1fV1RDRkcxX0FEUiAgICAgICAgKFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRSArIDB4MzApCisjZGVmaW5lIERVTV9SVENGRzFfQURSICAgICAgICAoUE5YNDAwOF9EVU1fTUFJTl9WQV9CQVNFICsgMHgzNCkKKyNkZWZpbmUgRFVNX1dUQ0ZHMl9BRFIgICAgICAgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDM4KQorI2RlZmluZSBEVU1fUlRDRkcyX0FEUiAgICAgICAgKFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRSArIDB4M0MpCisjZGVmaW5lIERVTV9UQ0ZHX0FEUiAgICAgICAgICAoUE5YNDAwOF9EVU1fTUFJTl9WQV9CQVNFICsgMHg0MCkKKyNkZWZpbmUgRFVNX09VVFBfRk9STUFUMV9BRFIgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDQ0KQorI2RlZmluZSBEVU1fT1VUUF9GT1JNQVQyX0FEUiAgKFBOWDQwMDhfRFVNX01BSU5fVkFfQkFTRSArIDB4NDgpCisjZGVmaW5lIERVTV9TWU5DX01PREVfQURSICAgICAoUE5YNDAwOF9EVU1fTUFJTl9WQV9CQVNFICsgMHg0QykKKyNkZWZpbmUgRFVNX1NZTkNfT1VUX0NfQURSICAgIChQTlg0MDA4X0RVTV9NQUlOX1ZBX0JBU0UgKyAweDUwKQorCisjZGVmaW5lIERVTV9DT05GICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1MzIgKikoRFVNX0NPTkZfQURSKSkKKyNkZWZpbmUgRFVNX0NUUkwgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fQ1RSTF9BRFIpKQorI2RlZmluZSBEVU1fU1RBVCAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9TVEFUX0FEUikpCisjZGVmaW5lIERVTV9ERUNPREUgICAgICAgICAgICAoKih2b2xhdGlsZSB1MzIgKikoRFVNX0RFQ09ERV9BRFIpKQorI2RlZmluZSBEVU1fQ09NX0JBU0UgICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9DT01fQkFTRV9BRFIpKQorI2RlZmluZSBEVU1fU1lOQ19DICAgICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9TWU5DX0NfQURSKSkKKyNkZWZpbmUgRFVNX0NMS19ESVYgICAgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fQ0xLX0RJVl9BRFIpKQorI2RlZmluZSBEVU1fRElSVFlfTE9XICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9ESVJUWV9MT1dfQURSKSkKKyNkZWZpbmUgRFVNX0RJUlRZX0hJR0ggICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fRElSVFlfSElHSF9BRFIpKQorI2RlZmluZSBEVU1fRk9STUFUICAgICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9GT1JNQVRfQURSKSkKKyNkZWZpbmUgRFVNX1dUQ0ZHMSAgICAgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fV1RDRkcxX0FEUikpCisjZGVmaW5lIERVTV9SVENGRzEgICAgICAgICAgICAoKih2b2xhdGlsZSB1MzIgKikoRFVNX1JUQ0ZHMV9BRFIpKQorI2RlZmluZSBEVU1fV1RDRkcyICAgICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9XVENGRzJfQURSKSkKKyNkZWZpbmUgRFVNX1JUQ0ZHMiAgICAgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fUlRDRkcyX0FEUikpCisjZGVmaW5lIERVTV9UQ0ZHICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1MzIgKikoRFVNX1RDRkdfQURSKSkKKyNkZWZpbmUgRFVNX09VVFBfRk9STUFUMSAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fT1VUUF9GT1JNQVQxX0FEUikpCisjZGVmaW5lIERVTV9PVVRQX0ZPUk1BVDIgICAgICAoKih2b2xhdGlsZSB1MzIgKikoRFVNX09VVFBfRk9STUFUMl9BRFIpKQorI2RlZmluZSBEVU1fU1lOQ19NT0RFICAgICAgICAgKCoodm9sYXRpbGUgdTMyICopKERVTV9TWU5DX01PREVfQURSKSkKKyNkZWZpbmUgRFVNX1NZTkNfT1VUX0MgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKShEVU1fU1lOQ19PVVRfQ19BRFIpKQorCisvKiBEVU0gU0xBVkUgQUREUkVTU0VTICovCisjZGVmaW5lIERVTV9TTEFWRV9XUklURV9BRFIgICAgICAoUE5YNDAwOF9EVU1fTUFJTkNGR19CQVNFICsgMHgwMDAwMDAwKQorI2RlZmluZSBEVU1fU0xBVkVfUkVBRDFfSV9BRFIgICAgKFBOWDQwMDhfRFVNX01BSU5DRkdfQkFTRSArIDB4MTAwMDAwMCkKKyNkZWZpbmUgRFVNX1NMQVZFX1JFQUQxX1JfQURSICAgIChQTlg0MDA4X0RVTV9NQUlOQ0ZHX0JBU0UgKyAweDEwMDAwMDQpCisjZGVmaW5lIERVTV9TTEFWRV9SRUFEMl9JX0FEUiAgICAoUE5YNDAwOF9EVU1fTUFJTkNGR19CQVNFICsgMHgxMDAwMDA4KQorI2RlZmluZSBEVU1fU0xBVkVfUkVBRDJfUl9BRFIgICAgKFBOWDQwMDhfRFVNX01BSU5DRkdfQkFTRSArIDB4MTAwMDAwQykKKworI2RlZmluZSBEVU1fU0xBVkVfV1JJVEVfVyAgKCh2b2xhdGlsZSB1MzIgKikoRFVNX1NMQVZFX1dSSVRFX0FEUikpCisjZGVmaW5lIERVTV9TTEFWRV9XUklURV9IVyAoKHZvbGF0aWxlIHUxNiAqKShEVU1fU0xBVkVfV1JJVEVfQURSKSkKKyNkZWZpbmUgRFVNX1NMQVZFX1JFQUQxX0kgICgodm9sYXRpbGUgdTggKikoRFVNX1NMQVZFX1JFQUQxX0lfQURSKSkKKyNkZWZpbmUgRFVNX1NMQVZFX1JFQUQxX1IgICgodm9sYXRpbGUgdTE2ICopKERVTV9TTEFWRV9SRUFEMV9SX0FEUikpCisjZGVmaW5lIERVTV9TTEFWRV9SRUFEMl9JICAoKHZvbGF0aWxlIHU4ICopKERVTV9TTEFWRV9SRUFEMl9JX0FEUikpCisjZGVmaW5lIERVTV9TTEFWRV9SRUFEMl9SICAoKHZvbGF0aWxlIHUxNiAqKShEVU1fU0xBVkVfUkVBRDJfUl9BRFIpKQorCisvKiBTb255IGRpc3BsYXkgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIERJU1BfMF9SRUcgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgRElTUF8xX1JFRyAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBESVNQX0NBTF9SRUcgICAgICAgICAgKDB4MjApCisjZGVmaW5lIERJU1BfSURfUkVHICAgICAgICAgICAoMHgyQSkKKyNkZWZpbmUgRElTUF9YTUlOX0xfUkVHICAgICAgICgweDMwKQorI2RlZmluZSBESVNQX1hNSU5fSF9SRUcgICAgICAgKDB4MzEpCisjZGVmaW5lIERJU1BfWU1JTl9SRUcgICAgICAgICAoMHgzMikKKyNkZWZpbmUgRElTUF9YTUFYX0xfUkVHICAgICAgICgweDM0KQorI2RlZmluZSBESVNQX1hNQVhfSF9SRUcgICAgICAgKDB4MzUpCisjZGVmaW5lIERJU1BfWU1BWF9SRUcgICAgICAgICAoMHgzNikKKyNkZWZpbmUgRElTUF9TWU5DX0VOX1JFRyAgICAgICgweDM4KQorI2RlZmluZSBESVNQX1NZTkNfUklTRV9MX1JFRyAgKDB4M0MpCisjZGVmaW5lIERJU1BfU1lOQ19SSVNFX0hfUkVHICAoMHgzRCkKKyNkZWZpbmUgRElTUF9TWU5DX0ZBTExfTF9SRUcgICgweDNFKQorI2RlZmluZSBESVNQX1NZTkNfRkFMTF9IX1JFRyAgKDB4M0YpCisjZGVmaW5lIERJU1BfUElYRUxfUkVHICAgICAgICAoMHgwQikKKyNkZWZpbmUgRElTUF9EVU1NWTFfUkVHICAgICAgICgweDI4KQorI2RlZmluZSBESVNQX0RVTU1ZMl9SRUcgICAgICAgKDB4MjkpCisjZGVmaW5lIERJU1BfVElNSU5HX1JFRyAgICAgICAoMHg5OCkKKyNkZWZpbmUgRElTUF9EVU1QX1JFRyAgICAgICAgICgweDk5KQorCisvKiBTb255IGRpc3BsYXkgY29uc3RhbnRzICovCisjZGVmaW5lIFNPTllfSUQxICAgICAgICAgICAgICAoMHgyMikKKyNkZWZpbmUgU09OWV9JRDIgICAgICAgICAgICAgICgweDIzKQorCisvKiBQaGlsaXBzIGRpc3BsYXkgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIFBIX0RJU1BfT1JJRU5UX1JFRyAgICAoMHgwMDMpCisjZGVmaW5lIFBIX0RJU1BfWVBPSU5UX1JFRyAgICAoMHgyMDApCisjZGVmaW5lIFBIX0RJU1BfWFBPSU5UX1JFRyAgICAoMHgyMDEpCisjZGVmaW5lIFBIX0RJU1BfUElYRUxfUkVHICAgICAoMHgyMDIpCisjZGVmaW5lIFBIX0RJU1BfWU1JTl9SRUcgICAgICAoMHg0MDYpCisjZGVmaW5lIFBIX0RJU1BfWU1BWF9SRUcgICAgICAoMHg0MDcpCisjZGVmaW5lIFBIX0RJU1BfWE1JTl9SRUcgICAgICAoMHg0MDgpCisjZGVmaW5lIFBIX0RJU1BfWE1BWF9SRUcgICAgICAoMHg0MDkpCisKKy8qIE1pc2MgY29uc3RhbnRzICovCisjZGVmaW5lIE5PX1ZBTElEX0RJU1BMQVlfRk9VTkQgICAgICAoMCkKKyNkZWZpbmUgRElTUExBWTJfSVNfTk9UX0NPTk5FQ1RFRCAgICgwKQorCisvKiByZWdpc3RlciB2YWx1ZXMgKi8KKyNkZWZpbmUgVl9CQUNfRU5BQkxFCQkoQklUKDApKQorI2RlZmluZSBWX0JBQ19ESVNBQkxFX0lETEUJKEJJVCgxKSkKKyNkZWZpbmUgVl9CQUNfRElTQUJMRV9UUklHCShCSVQoMikpCisjZGVmaW5lIFZfRFVNX1JFU0VUCQkoQklUKDMpKQorI2RlZmluZSBWX01VWF9SRVNFVAkJKEJJVCg0KSkKKyNkZWZpbmUgQkFDX0VOQUJMRUQJCShCSVQoMCkpCisjZGVmaW5lIEJBQ19ESVNBQkxFRAkJMAorCisvKiBTb255IExDRCBjb21tYW5kcyAqLworI2RlZmluZSBWX0xDRF9TVEFOREJZX09GRgkoKEJJVCgyNSkpIHwgKDAgPDwgMTYpIHwgRElTUF8wX1JFRykKKyNkZWZpbmUgVl9MQ0RfVVNFXzlCSVRfQlVTCSgoQklUKDI1KSkgfCAoMiA8PCAxNikgfCBESVNQXzFfUkVHKQorI2RlZmluZSBWX0xDRF9TWU5DX1JJU0VfTAkoKEJJVCgyNSkpIHwgKDAgPDwgMTYpIHwgRElTUF9TWU5DX1JJU0VfTF9SRUcpCisjZGVmaW5lIFZfTENEX1NZTkNfUklTRV9ICSgoQklUKDI1KSkgfCAoMCA8PCAxNikgfCBESVNQX1NZTkNfUklTRV9IX1JFRykKKyNkZWZpbmUgVl9MQ0RfU1lOQ19GQUxMX0wJKChCSVQoMjUpKSB8ICgxNjAgPDwgMTYpIHwgRElTUF9TWU5DX0ZBTExfTF9SRUcpCisjZGVmaW5lIFZfTENEX1NZTkNfRkFMTF9ICSgoQklUKDI1KSkgfCAoMCA8PCAxNikgfCBESVNQX1NZTkNfRkFMTF9IX1JFRykKKyNkZWZpbmUgVl9MQ0RfU1lOQ19FTkFCTEUJKChCSVQoMjUpKSB8ICgxMjggPDwgMTYpIHwgRElTUF9TWU5DX0VOX1JFRykKKyNkZWZpbmUgVl9MQ0RfRElTUExBWV9PTgkoKEJJVCgyNSkpIHwgKDY0IDw8IDE2KSB8IERJU1BfMF9SRUcpCisKK2VudW0geworCVBBRF9OT05FLAorCVBBRF81MTIsCisJUEFEXzEwMjQKK307CisKK2VudW0geworCVJHQjg4OCwKKwlSR0I2NjYsCisJUkdCNTY1LAorCUJHUjU2NSwKKwlBUkdCMTU1NSwKKwlBQkdSMTU1NSwKKwlBUkdCNDQ0NCwKKwlBQkdSNDQ0NAorfTsKKworc3RydWN0IGR1bV9zZXR1cCB7CisJaW50IHN5bmNfbmVnX2VkZ2U7CisJaW50IHJvdW5kX3JvYmluOworCWludCBtdXhfaW50OworCWludCBzeW5jZWRfZGlydHlfZmxhZ19pbnQ7CisJaW50IGRpcnR5X2ZsYWdfaW50OworCWludCBlcnJvcl9pbnQ7CisJaW50IHBmX2VtcHR5X2ludDsKKwlpbnQgc2ZfZW1wdHlfaW50OworCWludCBiYWNfZGlzX2ludDsKKwl1MzIgZGlydHlfYmFzZV9hZHI7CisJdTMyIGNvbW1hbmRfYmFzZV9hZHI7CisJdTMyIHN5bmNfY2xrX2RpdjsKKwlpbnQgc3luY19vdXRwdXQ7CisJdTMyIHN5bmNfcmVzdGFydF92YWw7CisJdTMyIHNldF9zeW5jX2hpZ2g7CisJdTMyIHNldF9zeW5jX2xvdzsKK307CisKK3N0cnVjdCBkdW1fY2hfc2V0dXAgeworCWludCBkaXNwX25vOworCXUzMiB4bWluOworCXUzMiB5bWluOworCXUzMiB4bWF4OworCXUzMiB5bWF4OworCWludCB4bWlycm9yOworCWludCB5bWlycm9yOworCWludCByb3RhdGU7CisJdTMyIG1pbmFkcjsKKwl1MzIgbWF4YWRyOworCXUzMiBkaXJ0eWJ1ZmZlcjsKKwlpbnQgcGFkOworCWludCBmb3JtYXQ7CisJaW50IGh3ZGlydHk7CisJaW50IHNsYXZlX3RyYW5zOworfTsKKworc3RydWN0IGRpc3Bfd2luZG93IHsKKwl1MzIgeG1pbl9sOworCXUzMiB4bWluX2g7CisJdTMyIHltaW47CisJdTMyIHhtYXhfbDsKKwl1MzIgeG1heF9oOworCXUzMiB5bWF4OworfTsKKworI2VuZGlmCQkJCS8qICNpZm5kZWYgX19QTlgwMDhfRFVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbng0MDA4L2ZiY29tbW9uLmggYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvZmJjb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJjODdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9wbng0MDA4L2ZiY29tbW9uLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQSwgb3IgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sCisqLworCisjZGVmaW5lIFFDSUZfVyAgKDE3NikKKyNkZWZpbmUgUUNJRl9IICAoMTQ0KQorCisjZGVmaW5lIENJRl9XICAgKDM1MikKKyNkZWZpbmUgQ0lGX0ggICAoMjg4KQorCisjZGVmaW5lIExDRF9YX1JFUwkyMDgKKyNkZWZpbmUgTENEX1lfUkVTCTMyMAorI2RlZmluZSBMQ0RfWF9QQUQJMjU2CisjZGVmaW5lIExDRF9CQlAJCTQJLyogQnl0ZXMgUGVyIFBpeGVsICovCisKKyNkZWZpbmUgRElTUF9NQVhfWF9TSVpFICAgICAoMzIwKQorI2RlZmluZSBESVNQX01BWF9ZX1NJWkUgICAgICgyMDgpCisKKyNkZWZpbmUgUkVUVVJOVkFMX0JBU0UgKDB4NDAwKQorCitlbnVtIGZiX2lvY3RsX3JldHVybnR5cGUgeworCUVOT1JFU09VUkNFU0xFRlQgPSBSRVRVUk5WQUxfQkFTRSwKKwlFUkVTT1VSQ0VTTk9URlJFRUQsCisJRVBST0NOT1RPV05FUiwKKwlFRkJOT1RPV05FUiwKKwlFQ09QWUZBSUxFRCwKKwlFSU9SRU1BUEZBSUxFRCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvcG54cmdiZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9wbnhyZ2JmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTQ1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvcG54cmdiZmIuYwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIGRyaXZlcnMvdmlkZW8vcG54NDAwOC9wbnhyZ2JmYi5jCisgKgorICogUE5YNDAwOCdzIGZyYW1lYnVmZmVyIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IEdyaWdvcnkgVG9sc3RvbHl0a2luIDxndG9sc3RvbHl0a2luQHJ1Lm12aXN0YS5jb20+CisgKiBCYXNlZCBvbiBQaGlsaXBzIFNlbWljb25kdWN0b3JzJ3MgY29kZQorICoKKyAqIENvcHlyZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJzZHVtLmgiCisjaW5jbHVkZSAiZmJjb21tb24uaCIKKworc3RhdGljIHUzMiBjb2xyZWdbMTZdOworCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHJnYmZiX3ZhciBfX2luaXRkYXRhID0geworCS54cmVzID0gTENEX1hfUkVTLAorCS55cmVzID0gTENEX1lfUkVTLAorCS54cmVzX3ZpcnR1YWwgPSBMQ0RfWF9SRVMsCisJLnlyZXNfdmlydHVhbCA9IExDRF9ZX1JFUywKKwkuYml0c19wZXJfcGl4ZWwgPSAzMiwKKwkucmVkLm9mZnNldCA9IDE2LAorCS5yZWQubGVuZ3RoID0gOCwKKwkuZ3JlZW4ub2Zmc2V0ID0gOCwKKwkuZ3JlZW4ubGVuZ3RoID0gOCwKKwkuYmx1ZS5vZmZzZXQgPSAwLAorCS5ibHVlLmxlbmd0aCA9IDgsCisJLmxlZnRfbWFyZ2luID0gMCwKKwkucmlnaHRfbWFyZ2luID0gMCwKKwkudXBwZXJfbWFyZ2luID0gMCwKKwkubG93ZXJfbWFyZ2luID0gMCwKKwkudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorfTsKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gcmdiZmJfZml4IF9faW5pdGRhdGEgPSB7CisJLmlkID0gIlJHQkZCIiwKKwkubGluZV9sZW5ndGggPSBMQ0RfWF9SRVMgKiBMQ0RfQkJQLAorCS50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAorCS54cGFuc3RlcCA9IDAsCisJLnlwYW5zdGVwID0gMCwKKwkueXdyYXBzdGVwID0gMCwKKwkuYWNjZWwgPSBGQl9BQ0NFTF9OT05FLAorfTsKKworc3RhdGljIGludCBjaGFubmVsX293bmVkOworCitzdGF0aWMgaW50IG5vX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJnYmZiX3NldGNvbHJlZyh1X2ludCByZWdubywgdV9pbnQgcmVkLCB1X2ludCBncmVlbiwgdV9pbnQgYmx1ZSwKKwkJCSAgIHVfaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKHJlZ25vID4gMTUpCisJCXJldHVybiAxOworCisJY29scmVnW3JlZ25vXSA9ICgocmVkICYgMHhmZjAwKSA8PCA4KSB8IChncmVlbiAmIDB4ZmYwMCkgfAorCSAgICAoKGJsdWUgJiAweGZmMDApID4+IDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJnYmZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiBwbng0MDA4X3NkdW1fbW1hcChpbmZvLCB2bWEsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyByZ2JmYl9vcHMgPSB7CisJLmZiX21tYXAgPSByZ2JmYl9tbWFwLAorCS5mYl9zZXRjb2xyZWcgPSByZ2JmYl9zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKK307CisKK3N0YXRpYyBpbnQgcmdiZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlrZnJlZShpbmZvKTsKKwl9CisKKwlwbng0MDA4X2ZyZWVfZHVtX2NoYW5uZWwoY2hhbm5lbF9vd25lZCwgcGRldi0+aWQpOworCXBueDQwMDhfc2V0X2R1bV9leGl0X25vdGlmaWNhdGlvbihwZGV2LT5pZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcmdiZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZHVtY2hhbm5lbF91ZiBjaGFuX3VmOworCWludCByZXQ7CisJY2hhciAqb3B0aW9uOworCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZih1MzIpICogMTYsICZwZGV2LT5kZXYpOworCWlmICghaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlwbng0MDA4X2dldF9mYl9hZGRyZXNzZXMoRkJfVFlQRV9SR0IsICh2b2lkICoqKSZpbmZvLT5zY3JlZW5fYmFzZSwKKwkJCQkgKGRtYV9hZGRyX3QgKikgJnJnYmZiX2ZpeC5zbWVtX3N0YXJ0LAorCQkJCSAmcmdiZmJfZml4LnNtZW1fbGVuKTsKKworCWlmICgocmV0ID0gcG54NDAwOF9hbGxvY19kdW1fY2hhbm5lbChwZGV2LT5pZCkpIDwgMCkKKwkJZ290byBlcnIwOworCWVsc2UgeworCQljaGFubmVsX293bmVkID0gcmV0OworCQljaGFuX3VmLmNoYW5uZWxuciA9IGNoYW5uZWxfb3duZWQ7CisJCWNoYW5fdWYuZGlydHkgPSAodTMyICopIE5VTEw7CisJCWNoYW5fdWYuc291cmNlID0gKHUzMiAqKSByZ2JmYl9maXguc21lbV9zdGFydDsKKwkJY2hhbl91Zi54X29mZnNldCA9IDA7CisJCWNoYW5fdWYueV9vZmZzZXQgPSAwOworCQljaGFuX3VmLndpZHRoID0gTENEX1hfUkVTOworCQljaGFuX3VmLmhlaWdodCA9IExDRF9ZX1JFUzsKKworCQlpZiAoKHJldCA9IHBueDQwMDhfcHV0X2R1bV9jaGFubmVsX3VmKGNoYW5fdWYsIHBkZXYtPmlkKSk8IDApCisJCQlnb3RvIGVycjE7CisKKwkJaWYgKChyZXQgPQorCQkgICAgIHBueDQwMDhfc2V0X2R1bV9jaGFubmVsX3N5bmMoY2hhbm5lbF9vd25lZCwgQ09ORl9TWU5DX09OLAorCQkJCQkJICBwZGV2LT5pZCkpIDwgMCkKKwkJCWdvdG8gZXJyMTsKKworCQlpZiAoKHJldCA9CisJCSAgICAgcG54NDAwOF9zZXRfZHVtX2NoYW5uZWxfZGlydHlfZGV0ZWN0KGNoYW5uZWxfb3duZWQsCisJCQkJCQkJIENPTkZfRElSVFlERVRFQ1RJT05fT04sCisJCQkJCQkJIHBkZXYtPmlkKSkgPCAwKQorCQkJZ290byBlcnIxOworCX0KKworCWlmICghZmJfZ2V0X29wdGlvbnMoInBueHJnYmZiIiwgJm9wdGlvbikgJiYgIXN0cmNtcChvcHRpb24sICJub2N1cnNvciIpKQorCQlyZ2JmYl9vcHMuZmJfY3Vyc29yID0gbm9fY3Vyc29yOworCisJaW5mby0+bm9kZSA9IC0xOworCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlpbmZvLT5mYm9wcyA9ICZyZ2JmYl9vcHM7CisJaW5mby0+Zml4ID0gcmdiZmJfZml4OworCWluZm8tPnZhciA9IHJnYmZiX3ZhcjsKKwlpbmZvLT5zY3JlZW5fc2l6ZSA9IHJnYmZiX2ZpeC5zbWVtX2xlbjsKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGluZm8tPnBhcjsKKwlpbmZvLT5wYXIgPSBOVUxMOworCisJcmV0ID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnIyOworCisJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyMzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKworCXJldHVybiAwOworCitlcnIzOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CitlcnIyOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CitlcnIxOgorCXBueDQwMDhfZnJlZV9kdW1fY2hhbm5lbChjaGFubmVsX293bmVkLCBwZGV2LT5pZCk7CitlcnIwOgorCWtmcmVlKGluZm8pOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJnYmZiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJyZ2JmYiIsCisJfSwKKwkucHJvYmUgPSByZ2JmYl9wcm9iZSwKKwkucmVtb3ZlID0gcmdiZmJfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcmdiZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJnYmZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByZ2JmYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJnYmZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJnYmZiX2luaXQpOworbW9kdWxlX2V4aXQocmdiZmJfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9zZHVtLmMgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjBlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5jCkBAIC0wLDAgKzEsODcyIEBACisvKgorICogZHJpdmVycy92aWRlby9wbng0MDA4L3NkdW0uYworICoKKyAqIERpc3BsYXkgVXBkYXRlIE1hc3RlciBzdXBwb3J0CisgKgorICogQXV0aG9yczogR3JpZ29yeSBUb2xzdG9seXRraW4gPGd0b2xzdG9seXRraW5AcnUubXZpc3RhLmNvbT4KKyAqICAgICAgICAgIFZpdGFseSBXb29sIDx2aXRhbHl3b29sQGdtYWlsLmNvbT4KKyAqIEJhc2VkIG9uIFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMncyBjb2RlCisgKgorICogQ29weXJnaHQgKGMpIDIwMDUtMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAic2R1bS5oIgorI2luY2x1ZGUgImZiY29tbW9uLmgiCisjaW5jbHVkZSAiZHVtLmgiCisKKy8qIEZyYW1lYnVmZmVycyB3ZSBoYXZlICovCisKK3N0YXRpYyBzdHJ1Y3QgcG54NDAwOF9mYl9hZGRyIHsKKwlpbnQgZmJfdHlwZTsKKwlsb25nIGFkZHJfb2Zmc2V0OworCWxvbmcgZmJfbGVuZ3RoOworfSBmYl9hZGRyW10gPSB7CisJWzBdID0geworCQlGQl9UWVBFX1lVViwgMCwgMHhCMDAwMAorCX0sCisJWzFdID0geworCQlGQl9UWVBFX1JHQiwgMHhCMDAwMCwgMHg1MDAwMAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGR1bV9kYXRhIHsKKwl1MzIgbGNkX3BoeXNfc3RhcnQ7CisJdTMyIGxjZF92aXJ0X3N0YXJ0OworCXUzMiBzbGF2ZV9waHlzX2Jhc2U7CisJdTMyICpzbGF2ZV92aXJ0X2Jhc2U7CisJaW50IGZiX293bmluZ19jaGFubmVsW01BWF9EVU1fQ0hBTk5FTFNdOworCXN0cnVjdCBkdW1jaGFubmVsX3VmIGNoYW5fdWZfc3RvcmVbTUFYX0RVTV9DSEFOTkVMU107Cit9IGR1bV9kYXRhOworCisvKiBEaWZmZXJlbnQgbG9jYWwgaGVscGVyIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgdTMyIG5vZl9waXhlbHNfZHgoc3RydWN0IGR1bV9jaF9zZXR1cCAqY2hfc2V0dXApCit7CisJcmV0dXJuIChjaF9zZXR1cC0+eG1heCAtIGNoX3NldHVwLT54bWluICsgMSk7Cit9CisKK3N0YXRpYyB1MzIgbm9mX3BpeGVsc19keShzdHJ1Y3QgZHVtX2NoX3NldHVwICpjaF9zZXR1cCkKK3sKKwlyZXR1cm4gKGNoX3NldHVwLT55bWF4IC0gY2hfc2V0dXAtPnltaW4gKyAxKTsKK30KKworc3RhdGljIHUzMiBub2ZfcGl4ZWxzX2R4eShzdHJ1Y3QgZHVtX2NoX3NldHVwICpjaF9zZXR1cCkKK3sKKwlyZXR1cm4gKG5vZl9waXhlbHNfZHgoY2hfc2V0dXApICogbm9mX3BpeGVsc19keShjaF9zZXR1cCkpOworfQorCitzdGF0aWMgdTMyIG5vZl9ieXRlcyhzdHJ1Y3QgZHVtX2NoX3NldHVwICpjaF9zZXR1cCkKK3sKKwl1MzIgciA9IG5vZl9waXhlbHNfZHh5KGNoX3NldHVwKTsKKwlzd2l0Y2ggKGNoX3NldHVwLT5mb3JtYXQpIHsKKwljYXNlIFJHQjg4ODoKKwljYXNlIFJHQjY2NjoKKwkJciAqPSA0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXIgKj0gMjsKKwkJYnJlYWs7CisJfQorCXJldHVybiByOworfQorCitzdGF0aWMgdTMyIGJ1aWxkX2NvbW1hbmQoaW50IGRpc3Bfbm8sIHUzMiByZWcsIHUzMiB2YWwpCit7CisJcmV0dXJuICgoZGlzcF9ubyA8PCAyNikgfCBCSVQoMjUpIHwgKHZhbCA8PCAxNikgfCAoZGlzcF9ubyA8PCAxMCkgfAorCQkocmVnIDw8IDApKTsKK30KKworc3RhdGljIHUzMiBidWlsZF9kb3VibGVfaW5kZXgoaW50IGRpc3Bfbm8sIHUzMiB2YWwpCit7CisJcmV0dXJuICgoZGlzcF9ubyA8PCAyNikgfCAodmFsIDw8IDE2KSB8IChkaXNwX25vIDw8IDEwKSB8ICh2YWwgPDwgMCkpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9kaXNwX3dpbmRvdyhzdHJ1Y3QgZHVtX2NoX3NldHVwICogY2hfc2V0dXAsIHN0cnVjdCBkaXNwX3dpbmRvdyAqIGR3KQoreworCWR3LT55bWluID0gY2hfc2V0dXAtPnltaW47CisJZHctPnltYXggPSBjaF9zZXR1cC0+eW1heDsKKwlkdy0+eG1pbl9sID0gY2hfc2V0dXAtPnhtaW4gJiAweEZGOworCWR3LT54bWluX2ggPSAoY2hfc2V0dXAtPnhtaW4gJiBCSVQoOCkpID4+IDg7CisJZHctPnhtYXhfbCA9IGNoX3NldHVwLT54bWF4ICYgMHhGRjsKKwlkdy0+eG1heF9oID0gKGNoX3NldHVwLT54bWF4ICYgQklUKDgpKSA+PiA4OworfQorCitzdGF0aWMgaW50IHB1dF9jaGFubmVsKHN0cnVjdCBkdW1jaGFubmVsIGNoYW4pCit7CisJaW50IGkgPSBjaGFuLmNoYW5uZWxucjsKKworCWlmIChpIDwgMCB8fCBpID4gTUFYX0RVTV9DSEFOTkVMUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSB7CisJCURVTV9DSF9NSU4oaSkgPSBjaGFuLmR1bV9jaF9taW47CisJCURVTV9DSF9NQVgoaSkgPSBjaGFuLmR1bV9jaF9tYXg7CisJCURVTV9DSF9DT05GKGkpID0gY2hhbi5kdW1fY2hfY29uZjsKKwkJRFVNX0NIX0NUUkwoaSkgPSBjaGFuLmR1bV9jaF9jdHJsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9jaGFubmVsKGludCBjaGFubnIpCit7CisJc3RydWN0IGR1bWNoYW5uZWwgY2hhbjsKKworCWNoYW4uY2hhbm5lbG5yID0gY2hhbm5yOworCWNoYW4uZHVtX2NoX21pbiA9IDA7CisJY2hhbi5kdW1fY2hfbWF4ID0gMDsKKwljaGFuLmR1bV9jaF9jb25mID0gMDsKKwljaGFuLmR1bV9jaF9jdHJsID0gMDsKKworCXB1dF9jaGFubmVsKGNoYW4pOworfQorCitzdGF0aWMgaW50IHB1dF9jbWRfc3RyaW5nKHN0cnVjdCBjbWRzdHJpbmcgY21kcykKK3sKKwl1MTYgKmNtZF9zdHJfdmlydGFkZHI7CisJdTMyICpjbWRfcHRyMF92aXJ0YWRkcjsKKwl1MzIgY21kX3N0cl9waHlzYWRkcjsKKworCWludCBpID0gY21kcy5jaGFubmVsbnI7CisKKwlpZiAoaSA8IDAgfHwgaSA+IE1BWF9EVU1fQ0hBTk5FTFMpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKChjbWRfcHRyMF92aXJ0YWRkciA9CisJCSAgKGludCAqKWlvcmVtYXBfbm9jYWNoZShEVU1fQ09NX0JBU0UsCisJCQkJCSBzaXplb2YoaW50KSAqIE1BWF9EVU1fQ0hBTk5FTFMpKSA9PQorCQkgTlVMTCkKKwkJcmV0dXJuIC1FSU9SRU1BUEZBSUxFRDsKKwllbHNlIHsKKwkJY21kX3N0cl9waHlzYWRkciA9IGlvcmVhZDMyKCZjbWRfcHRyMF92aXJ0YWRkcltjbWRzLmNoYW5uZWxucl0pOworCQlpZiAoKGNtZF9zdHJfdmlydGFkZHIgPQorCQkgICAgICh1MTYgKikgaW9yZW1hcF9ub2NhY2hlKGNtZF9zdHJfcGh5c2FkZHIsCisJCQkJCSAgICAgc2l6ZW9mKGNtZHMpKSkgPT0gTlVMTCkgeworCQkJaW91bm1hcChjbWRfcHRyMF92aXJ0YWRkcik7CisJCQlyZXR1cm4gLUVJT1JFTUFQRkFJTEVEOworCQl9IGVsc2UgeworCQkJaW50IHQ7CisJCQlmb3IgKHQgPSAwOyB0IDwgODsgdCsrKQorCQkJCWlvd3JpdGUxNigqKCh1MTYgKikmY21kcy5wcmVzdHJpbmdsZW4gKyB0KSwKKwkJCQkJICBjbWRfc3RyX3ZpcnRhZGRyICsgdCk7CisKKwkJCWZvciAodCA9IDA7IHQgPCBjbWRzLnByZXN0cmluZ2xlbiAvIDI7IHQrKykKKwkJCQkgaW93cml0ZTE2KCooKHUxNiAqKSZjbWRzLnByZWNtZCArIHQpLAorCQkJCQkgICBjbWRfc3RyX3ZpcnRhZGRyICsgdCArIDgpOworCisJCQlmb3IgKHQgPSAwOyB0IDwgY21kcy5wb3N0c3RyaW5nbGVuIC8gMjsgdCsrKQorCQkJCWlvd3JpdGUxNigqKCh1MTYgKikmY21kcy5wb3N0Y21kICsgdCksCisJCQkJCSAgY21kX3N0cl92aXJ0YWRkciArIHQgKyA4ICsKKwkJCQkJICAJY21kcy5wcmVzdHJpbmdsZW4gLyAyKTsKKworCQkJaW91bm1hcChjbWRfcHRyMF92aXJ0YWRkcik7CisJCQlpb3VubWFwKGNtZF9zdHJfdmlydGFkZHIpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZHVtX2NoX3NldHVwKGludCBjaF9ubywgc3RydWN0IGR1bV9jaF9zZXR1cCAqIGNoX3NldHVwKQoreworCXN0cnVjdCBjbWRzdHJpbmcgY21kc19jOworCXN0cnVjdCBjbWRzdHJpbmcgKmNtZHMgPSAmY21kc19jOworCXN0cnVjdCBkaXNwX3dpbmRvdyBkdzsKKwlpbnQgc3RhbmRhcmQ7CisJdTMyIG9yaWVudGF0aW9uID0gMDsKKwlzdHJ1Y3QgZHVtY2hhbm5lbCBjaGFuID0geyAwIH07CisJaW50IHJldDsKKworCWlmICgoY2hfc2V0dXAtPnhtaXJyb3IpIHx8IChjaF9zZXR1cC0+eW1pcnJvcikgfHwgKGNoX3NldHVwLT5yb3RhdGUpKSB7CisJCXN0YW5kYXJkID0gMDsKKworCQlvcmllbnRhdGlvbiA9IEJJVCgxKTsJLyogYWx3YXlzIHNldCA5LWJpdC1idXMgKi8KKwkJaWYgKGNoX3NldHVwLT54bWlycm9yKQorCQkJb3JpZW50YXRpb24gfD0gQklUKDQpOworCQlpZiAoY2hfc2V0dXAtPnltaXJyb3IpCisJCQlvcmllbnRhdGlvbiB8PSBCSVQoMyk7CisJCWlmIChjaF9zZXR1cC0+cm90YXRlKQorCQkJb3JpZW50YXRpb24gfD0gQklUKDApOworCX0gZWxzZQorCQlzdGFuZGFyZCA9IDE7CisKKwljbWRzLT5jaGFubmVsbnIgPSBjaF9ubzsKKworCS8qIGJ1aWxkIGNvbW1hbmQgc3RyaW5nIGhlYWRlciAqLworCWlmIChzdGFuZGFyZCkgeworCQljbWRzLT5wcmVzdHJpbmdsZW4gPSAzMjsKKwkJY21kcy0+cG9zdHN0cmluZ2xlbiA9IDA7CisJfSBlbHNlIHsKKwkJY21kcy0+cHJlc3RyaW5nbGVuID0gNDg7CisJCWNtZHMtPnBvc3RzdHJpbmdsZW4gPSAxNjsKKwl9CisKKwljbWRzLT5mb3JtYXQgPQorCSAgICAodTE2KSAoKGNoX3NldHVwLT5kaXNwX25vIDw8IDQpIHwgKEJJVCgzKSkgfCAoY2hfc2V0dXAtPmZvcm1hdCkpOworCWNtZHMtPnJlc2VydmVkID0gMHgwOworCWNtZHMtPnN0YXJ0YWRkcl9sb3cgPSAoY2hfc2V0dXAtPm1pbmFkciAmIDB4RkZGRik7CisJY21kcy0+c3RhcnRhZGRyX2hpZ2ggPSAoY2hfc2V0dXAtPm1pbmFkciA+PiAxNik7CisKKwlpZiAoKGNoX3NldHVwLT5taW5hZHIgPT0gMCkgJiYgKGNoX3NldHVwLT5tYXhhZHIgPT0gMCkKKwkgICAgJiYgKGNoX3NldHVwLT54bWluID09IDApCisJICAgICYmIChjaF9zZXR1cC0+eW1pbiA9PSAwKSAmJiAoY2hfc2V0dXAtPnhtYXggPT0gMCkKKwkgICAgJiYgKGNoX3NldHVwLT55bWF4ID09IDApKSB7CisJCWNtZHMtPnBpeGRhdGxlbl9sb3cgPSAwOworCQljbWRzLT5waXhkYXRsZW5faGlnaCA9IDA7CisJfSBlbHNlIHsKKwkJdTMyIG5ieXRlcyA9IG5vZl9ieXRlcyhjaF9zZXR1cCk7CisJCWNtZHMtPnBpeGRhdGxlbl9sb3cgPSAobmJ5dGVzICYgMHhGRkZGKTsKKwkJY21kcy0+cGl4ZGF0bGVuX2hpZ2ggPSAobmJ5dGVzID4+IDE2KTsKKwl9CisKKwlpZiAoY2hfc2V0dXAtPnNsYXZlX3RyYW5zKQorCQljbWRzLT5waXhkYXRsZW5faGlnaCB8PSBCSVQoMTUpOworCisJLyogYnVpbGQgcHJlLXN0cmluZyAqLworCWJ1aWxkX2Rpc3Bfd2luZG93KGNoX3NldHVwLCAmZHcpOworCisJaWYgKHN0YW5kYXJkKSB7CisJCWNtZHMtPnByZWNtZFswXSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1hNSU5fTF9SRUcsIDB4OTkpOworCQljbWRzLT5wcmVjbWRbMV0gPQorCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9YTUlOX0xfUkVHLAorCQkJCSAgZHcueG1pbl9sKTsKKwkJY21kcy0+cHJlY21kWzJdID0KKwkJICAgIGJ1aWxkX2NvbW1hbmQoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfWE1JTl9IX1JFRywKKwkJCQkgIGR3LnhtaW5faCk7CisJCWNtZHMtPnByZWNtZFszXSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1lNSU5fUkVHLCBkdy55bWluKTsKKwkJY21kcy0+cHJlY21kWzRdID0KKwkJICAgIGJ1aWxkX2NvbW1hbmQoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfWE1BWF9MX1JFRywKKwkJCQkgIGR3LnhtYXhfbCk7CisJCWNtZHMtPnByZWNtZFs1XSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1hNQVhfSF9SRUcsCisJCQkJICBkdy54bWF4X2gpOworCQljbWRzLT5wcmVjbWRbNl0gPQorCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9ZTUFYX1JFRywgZHcueW1heCk7CisJCWNtZHMtPnByZWNtZFs3XSA9CisJCSAgICBidWlsZF9kb3VibGVfaW5kZXgoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfUElYRUxfUkVHKTsKKwl9IGVsc2UgeworCQlpZiAoZHcueG1pbl9sID09IGNoX25vKQorCQkJY21kcy0+cHJlY21kWzBdID0KKwkJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1hNSU5fTF9SRUcsCisJCQkJCSAgMHg5OSk7CisJCWVsc2UKKwkJCWNtZHMtPnByZWNtZFswXSA9CisJCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9YTUlOX0xfUkVHLAorCQkJCQkgIGNoX25vKTsKKworCQljbWRzLT5wcmVjbWRbMV0gPQorCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9YTUlOX0xfUkVHLAorCQkJCSAgZHcueG1pbl9sKTsKKwkJY21kcy0+cHJlY21kWzJdID0KKwkJICAgIGJ1aWxkX2NvbW1hbmQoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfWE1JTl9IX1JFRywKKwkJCQkgIGR3LnhtaW5faCk7CisJCWNtZHMtPnByZWNtZFszXSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1lNSU5fUkVHLCBkdy55bWluKTsKKwkJY21kcy0+cHJlY21kWzRdID0KKwkJICAgIGJ1aWxkX2NvbW1hbmQoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfWE1BWF9MX1JFRywKKwkJCQkgIGR3LnhtYXhfbCk7CisJCWNtZHMtPnByZWNtZFs1XSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1hNQVhfSF9SRUcsCisJCQkJICBkdy54bWF4X2gpOworCQljbWRzLT5wcmVjbWRbNl0gPQorCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9ZTUFYX1JFRywgZHcueW1heCk7CisJCWNtZHMtPnByZWNtZFs3XSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQXzFfUkVHLCBvcmllbnRhdGlvbik7CisJCWNtZHMtPnByZWNtZFs4XSA9CisJCSAgICBidWlsZF9kb3VibGVfaW5kZXgoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfUElYRUxfUkVHKTsKKwkJY21kcy0+cHJlY21kWzldID0KKwkJICAgIGJ1aWxkX2RvdWJsZV9pbmRleChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9QSVhFTF9SRUcpOworCQljbWRzLT5wcmVjbWRbMHhBXSA9CisJCSAgICBidWlsZF9kb3VibGVfaW5kZXgoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfUElYRUxfUkVHKTsKKwkJY21kcy0+cHJlY21kWzB4Ql0gPQorCQkgICAgYnVpbGRfZG91YmxlX2luZGV4KGNoX3NldHVwLT5kaXNwX25vLCBESVNQX1BJWEVMX1JFRyk7CisJCWNtZHMtPnBvc3RjbWRbMF0gPQorCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF8xX1JFRywgQklUKDEpKTsKKwkJY21kcy0+cG9zdGNtZFsxXSA9CisJCSAgICBidWlsZF9jb21tYW5kKGNoX3NldHVwLT5kaXNwX25vLCBESVNQX0RVTU1ZMV9SRUcsIDEpOworCQljbWRzLT5wb3N0Y21kWzJdID0KKwkJICAgIGJ1aWxkX2NvbW1hbmQoY2hfc2V0dXAtPmRpc3Bfbm8sIERJU1BfRFVNTVkxX1JFRywgMik7CisJCWNtZHMtPnBvc3RjbWRbM10gPQorCQkgICAgYnVpbGRfY29tbWFuZChjaF9zZXR1cC0+ZGlzcF9ubywgRElTUF9EVU1NWTFfUkVHLCAzKTsKKwl9CisKKwlpZiAoKHJldCA9IHB1dF9jbWRfc3RyaW5nKGNtZHNfYykpICE9IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljaGFuLmNoYW5uZWxuciA9IGNtZHMtPmNoYW5uZWxucjsKKwljaGFuLmR1bV9jaF9taW4gPSBjaF9zZXR1cC0+ZGlydHlidWZmZXIgKyBjaF9zZXR1cC0+bWluYWRyOworCWNoYW4uZHVtX2NoX21heCA9IGNoX3NldHVwLT5kaXJ0eWJ1ZmZlciArIGNoX3NldHVwLT5tYXhhZHI7CisJY2hhbi5kdW1fY2hfY29uZiA9IDB4MDAyOworCWNoYW4uZHVtX2NoX2N0cmwgPSAweDA0OworCisJcHV0X2NoYW5uZWwoY2hhbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBkaXNwbGF5X29wZW4oaW50IGNoX25vLCBpbnQgYXV0b191cGRhdGUsIHUzMiAqIGRpcnR5X2J1ZmZlciwKKwkJCXUzMiAqIGZyYW1lX2J1ZmZlciwgdTMyIHhwb3MsIHUzMiB5cG9zLCB1MzIgdywgdTMyIGgpCit7CisKKwlzdHJ1Y3QgZHVtX2NoX3NldHVwIGs7CisJaW50IHJldDsKKworCS8qIGtlZXAgd2lkdGggJiBoZWlnaHQgd2l0aGluIGRpc3BsYXkgYXJlYSAqLworCWlmICgoeHBvcyArIHcpID4gRElTUF9NQVhfWF9TSVpFKQorCQl3ID0gRElTUF9NQVhfWF9TSVpFIC0geHBvczsKKworCWlmICgoeXBvcyArIGgpID4gRElTUF9NQVhfWV9TSVpFKQorCQloID0gRElTUF9NQVhfWV9TSVpFIC0geXBvczsKKworCS8qIGFzc3VtZSAxIGRpc3BsYXkgb25seSAqLworCWsuZGlzcF9ubyA9IDA7CisJay54bWluID0geHBvczsKKwlrLnltaW4gPSB5cG9zOworCWsueG1heCA9IHhwb3MgKyAodyAtIDEpOworCWsueW1heCA9IHlwb3MgKyAoaCAtIDEpOworCisJLyogYWRqdXN0IG1pbiBhbmQgbWF4IHZhbHVlcyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoay54bWluID4gRElTUF9NQVhfWF9TSVpFIC0gMSkKKwkJay54bWluID0gRElTUF9NQVhfWF9TSVpFIC0gMTsKKwlpZiAoay55bWluID4gRElTUF9NQVhfWV9TSVpFIC0gMSkKKwkJay55bWluID0gRElTUF9NQVhfWV9TSVpFIC0gMTsKKworCWlmIChrLnhtYXggPiBESVNQX01BWF9YX1NJWkUgLSAxKQorCQlrLnhtYXggPSBESVNQX01BWF9YX1NJWkUgLSAxOworCWlmIChrLnltYXggPiBESVNQX01BWF9ZX1NJWkUgLSAxKQorCQlrLnltYXggPSBESVNQX01BWF9ZX1NJWkUgLSAxOworCisJay54bWlycm9yID0gMDsKKwlrLnltaXJyb3IgPSAwOworCWsucm90YXRlID0gMDsKKwlrLm1pbmFkciA9ICh1MzIpIGZyYW1lX2J1ZmZlcjsKKwlrLm1heGFkciA9ICh1MzIpIGZyYW1lX2J1ZmZlciArICgoKHcgLSAxKSA8PCAxMCkgfCAoKGggPDwgMikgLSAyKSk7CisJay5wYWQgPSBQQURfMTAyNDsKKwlrLmRpcnR5YnVmZmVyID0gKHUzMikgZGlydHlfYnVmZmVyOworCWsuZm9ybWF0ID0gUkdCODg4OworCWsuaHdkaXJ0eSA9IDA7CisJay5zbGF2ZV90cmFucyA9IDA7CisKKwlyZXQgPSBkdW1fY2hfc2V0dXAoY2hfbm8sICZrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9yZXNldCh2b2lkKQoreworCXUzMiAqZHVtX3Bpb19iYXNlID0gKHUzMiAqKUlPX0FERFJFU1MoUE5YNDAwOF9QSU9fQkFTRSk7CisKKwl1ZGVsYXkoMSk7CisJaW93cml0ZTMyKEJJVCgxOSksICZkdW1fcGlvX2Jhc2VbMl0pOworCXVkZWxheSgxKTsKKwlpb3dyaXRlMzIoQklUKDE5KSwgJmR1bV9waW9fYmFzZVsxXSk7CisJdWRlbGF5KDEpOworfQorCitzdGF0aWMgaW50IGR1bV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJLyogZW5hYmxlIERVTSBjbG9jayAqLworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImR1bV9jayIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgInBueDQwMDhfZHVtOiBVbmFibGUgdG8gYWNjZXNzIERVTSBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJfQorCisJY2xrX3NldF9yYXRlKGNsaywgMSk7CisJY2xrX3B1dChjbGspOworCisJRFVNX0NUUkwgPSBWX0RVTV9SRVNFVDsKKworCS8qIHNldCBwcmlvcml0eSB0byAicm91bmQtcm9iaW4iLiBBbGwgb3RoZXIgcGFyYW1zIHRvICJmYWxzZSIgKi8KKwlEVU1fQ09ORiA9IEJJVCg5KTsKKworCS8qIERpc3BsYXkgMSAqLworCURVTV9XVENGRzEgPSBQTlg0MDA4X0RVTV9XVF9DRkc7CisJRFVNX1JUQ0ZHMSA9IFBOWDQwMDhfRFVNX1JUX0NGRzsKKwlEVU1fVENGRyA9IFBOWDQwMDhfRFVNX1RfQ0ZHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bV9jaGFuX2luaXQodm9pZCkKK3sKKwlpbnQgaSA9IDAsIGNoID0gMDsKKwl1MzIgKmNtZHB0cnM7CisJdTMyICpjbWRzdHJpbmdzOworCisJRFVNX0NPTV9CQVNFID0KKwkJQ01EU1RSSU5HX0JBU0VBRERSICsgQllURVNfUEVSX0NNRFNUUklORyAqIE5SX09GX0NNRFNUUklOR1M7CisKKwlpZiAoKGNtZHB0cnMgPQorCSAgICAgKHUzMiAqKSBpb3JlbWFwX25vY2FjaGUoRFVNX0NPTV9CQVNFLAorCQkJCSAgICAgc2l6ZW9mKHUzMikgKiBOUl9PRl9DTURTVFJJTkdTKSkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChjaCA9IDA7IGNoIDwgTlJfT0ZfQ01EU1RSSU5HUzsgY2grKykKKwkJaW93cml0ZTMyKENNRFNUUklOR19CQVNFQUREUiArIEJZVEVTX1BFUl9DTURTVFJJTkcgKiBjaCwKKwkJCSAgY21kcHRycyArIGNoKTsKKworCWZvciAoY2ggPSAwOyBjaCA8IE1BWF9EVU1fQ0hBTk5FTFM7IGNoKyspCisJCWNsZWFyX2NoYW5uZWwoY2gpOworCisJLyogQ2xlYXIgdGhlIGNtZHN0cmluZ3MgKi8KKwljbWRzdHJpbmdzID0KKwkgICAgKHUzMiAqKWlvcmVtYXBfbm9jYWNoZSgqY21kcHRycywKKwkJCQkgICBCWVRFU19QRVJfQ01EU1RSSU5HICogTlJfT0ZfQ01EU1RSSU5HUyk7CisKKwlpZiAoIWNtZHN0cmluZ3MpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IE5SX09GX0NNRFNUUklOR1MgKiBCWVRFU19QRVJfQ01EU1RSSU5HIC8gc2l6ZW9mKHUzMik7CisJICAgICBpKyspCisJCWlvd3JpdGUzMigwLCBjbWRzdHJpbmdzICsgaSk7CisKKwlpb3VubWFwKCh1MzIgKiljbWRzdHJpbmdzKTsKKworb3V0OgorCWlvdW5tYXAoKHUzMiAqKWNtZHB0cnMpOworfQorCitzdGF0aWMgdm9pZCBsY2RfaW5pdCh2b2lkKQoreworCWxjZF9yZXNldCgpOworCisJRFVNX09VVFBfRk9STUFUMSA9IDA7IC8qIFJHQjY2NiAqLworCisJdWRlbGF5KDEpOworCWlvd3JpdGUzMihWX0xDRF9TVEFOREJZX09GRiwgZHVtX2RhdGEuc2xhdmVfdmlydF9iYXNlKTsKKwl1ZGVsYXkoMSk7CisJaW93cml0ZTMyKFZfTENEX1VTRV85QklUX0JVUywgZHVtX2RhdGEuc2xhdmVfdmlydF9iYXNlKTsKKwl1ZGVsYXkoMSk7CisJaW93cml0ZTMyKFZfTENEX1NZTkNfUklTRV9MLCBkdW1fZGF0YS5zbGF2ZV92aXJ0X2Jhc2UpOworCXVkZWxheSgxKTsKKwlpb3dyaXRlMzIoVl9MQ0RfU1lOQ19SSVNFX0gsIGR1bV9kYXRhLnNsYXZlX3ZpcnRfYmFzZSk7CisJdWRlbGF5KDEpOworCWlvd3JpdGUzMihWX0xDRF9TWU5DX0ZBTExfTCwgZHVtX2RhdGEuc2xhdmVfdmlydF9iYXNlKTsKKwl1ZGVsYXkoMSk7CisJaW93cml0ZTMyKFZfTENEX1NZTkNfRkFMTF9ILCBkdW1fZGF0YS5zbGF2ZV92aXJ0X2Jhc2UpOworCXVkZWxheSgxKTsKKwlpb3dyaXRlMzIoVl9MQ0RfU1lOQ19FTkFCTEUsIGR1bV9kYXRhLnNsYXZlX3ZpcnRfYmFzZSk7CisJdWRlbGF5KDEpOworCWlvd3JpdGUzMihWX0xDRF9ESVNQTEFZX09OLCBkdW1fZGF0YS5zbGF2ZV92aXJ0X2Jhc2UpOworCXVkZWxheSgxKTsKK30KKworLyogSW50ZXJmYWNlIGV4cG9ydGVkIHRvIGZyYW1lYnVmZmVyIGRyaXZlcnMgKi8KKworaW50IHBueDQwMDhfZ2V0X2ZiX2FkZHJlc3NlcyhpbnQgZmJfdHlwZSwgdm9pZCAqKnZpcnRfYWRkciwKKwkJCSAgICAgZG1hX2FkZHJfdCAqcGh5c19hZGRyLCBpbnQgKmZiX2xlbmd0aCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmJfYWRkcik7IGkrKykKKwkJaWYgKGZiX2FkZHJbaV0uZmJfdHlwZSA9PSBmYl90eXBlKSB7CisJCQkqdmlydF9hZGRyID0gKHZvaWQgKikoZHVtX2RhdGEubGNkX3ZpcnRfc3RhcnQgKworCQkJCQlmYl9hZGRyW2ldLmFkZHJfb2Zmc2V0KTsKKwkJCSpwaHlzX2FkZHIgPQorCQkJICAgIGR1bV9kYXRhLmxjZF9waHlzX3N0YXJ0ICsgZmJfYWRkcltpXS5hZGRyX29mZnNldDsKKwkJCSpmYl9sZW5ndGggPSBmYl9hZGRyW2ldLmZiX2xlbmd0aDsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dldF9mYl9hZGRyZXNzZXMpOworCitpbnQgcG54NDAwOF9hbGxvY19kdW1fY2hhbm5lbChpbnQgZGV2X2lkKQoreworCWludCBpID0gMDsKKworCXdoaWxlICgoaSA8IE1BWF9EVU1fQ0hBTk5FTFMpICYmIChkdW1fZGF0YS5mYl9vd25pbmdfY2hhbm5lbFtpXSAhPSAtMSkpCisJCWkrKzsKKworCWlmIChpID09IE1BWF9EVU1fQ0hBTk5FTFMpCisJCXJldHVybiAtRU5PUkVTT1VSQ0VTTEVGVDsKKwllbHNlIHsKKwkJZHVtX2RhdGEuZmJfb3duaW5nX2NoYW5uZWxbaV0gPSBkZXZfaWQ7CisJCXJldHVybiBpOworCX0KK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2FsbG9jX2R1bV9jaGFubmVsKTsKKworaW50IHBueDQwMDhfZnJlZV9kdW1fY2hhbm5lbChpbnQgY2hhbm5yLCBpbnQgZGV2X2lkKQoreworCWlmIChjaGFubnIgPCAwIHx8IGNoYW5uciA+IE1BWF9EVU1fQ0hBTk5FTFMpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKGR1bV9kYXRhLmZiX293bmluZ19jaGFubmVsW2NoYW5ucl0gIT0gZGV2X2lkKQorCQlyZXR1cm4gLUVGQk5PVE9XTkVSOworCWVsc2UgeworCQljbGVhcl9jaGFubmVsKGNoYW5ucik7CisJCWR1bV9kYXRhLmZiX293bmluZ19jaGFubmVsW2NoYW5ucl0gPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2ZyZWVfZHVtX2NoYW5uZWwpOworCitpbnQgcG54NDAwOF9wdXRfZHVtX2NoYW5uZWxfdWYoc3RydWN0IGR1bWNoYW5uZWxfdWYgY2hhbl91ZiwgaW50IGRldl9pZCkKK3sKKwlpbnQgaSA9IGNoYW5fdWYuY2hhbm5lbG5yOworCWludCByZXQ7CisKKwlpZiAoaSA8IDAgfHwgaSA+IE1BWF9EVU1fQ0hBTk5FTFMpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKGR1bV9kYXRhLmZiX293bmluZ19jaGFubmVsW2ldICE9IGRldl9pZCkKKwkJcmV0dXJuIC1FRkJOT1RPV05FUjsKKwllbHNlIGlmICgocmV0ID0KKwkJICBkaXNwbGF5X29wZW4oY2hhbl91Zi5jaGFubmVsbnIsIDAsIGNoYW5fdWYuZGlydHksCisJCQkgICAgICAgY2hhbl91Zi5zb3VyY2UsIGNoYW5fdWYueV9vZmZzZXQsCisJCQkgICAgICAgY2hhbl91Zi54X29mZnNldCwgY2hhbl91Zi5oZWlnaHQsCisJCQkgICAgICAgY2hhbl91Zi53aWR0aCkpICE9IDApCisJCXJldHVybiByZXQ7CisJZWxzZSB7CisJCWR1bV9kYXRhLmNoYW5fdWZfc3RvcmVbaV0uZGlydHkgPSBjaGFuX3VmLmRpcnR5OworCQlkdW1fZGF0YS5jaGFuX3VmX3N0b3JlW2ldLnNvdXJjZSA9IGNoYW5fdWYuc291cmNlOworCQlkdW1fZGF0YS5jaGFuX3VmX3N0b3JlW2ldLnhfb2Zmc2V0ID0gY2hhbl91Zi54X29mZnNldDsKKwkJZHVtX2RhdGEuY2hhbl91Zl9zdG9yZVtpXS55X29mZnNldCA9IGNoYW5fdWYueV9vZmZzZXQ7CisJCWR1bV9kYXRhLmNoYW5fdWZfc3RvcmVbaV0ud2lkdGggPSBjaGFuX3VmLndpZHRoOworCQlkdW1fZGF0YS5jaGFuX3VmX3N0b3JlW2ldLmhlaWdodCA9IGNoYW5fdWYuaGVpZ2h0OworCX0KKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfcHV0X2R1bV9jaGFubmVsX3VmKTsKKworaW50IHBueDQwMDhfc2V0X2R1bV9jaGFubmVsX3N5bmMoaW50IGNoYW5uciwgaW50IHZhbCwgaW50IGRldl9pZCkKK3sKKwlpZiAoY2hhbm5yIDwgMCB8fCBjaGFubnIgPiBNQVhfRFVNX0NIQU5ORUxTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChkdW1fZGF0YS5mYl9vd25pbmdfY2hhbm5lbFtjaGFubnJdICE9IGRldl9pZCkKKwkJcmV0dXJuIC1FRkJOT1RPV05FUjsKKwllbHNlIHsKKwkJaWYgKHZhbCA9PSBDT05GX1NZTkNfT04pIHsKKwkJCURVTV9DSF9DT05GKGNoYW5ucikgfD0gQ09ORl9TWU5DRU5BQkxFOworCQkJRFVNX0NIX0NPTkYoY2hhbm5yKSB8PSBEVU1fQ0hBTk5FTF9DRkdfU1lOQ19NQVNLIHwKKwkJCQlEVU1fQ0hBTk5FTF9DRkdfU1lOQ19NQVNLX1NFVDsKKwkJfSBlbHNlIGlmICh2YWwgPT0gQ09ORl9TWU5DX09GRikKKwkJCURVTV9DSF9DT05GKGNoYW5ucikgJj0gfkNPTkZfU1lOQ0VOQUJMRTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9zZXRfZHVtX2NoYW5uZWxfc3luYyk7CisKK2ludCBwbng0MDA4X3NldF9kdW1fY2hhbm5lbF9kaXJ0eV9kZXRlY3QoaW50IGNoYW5uciwgaW50IHZhbCwgaW50IGRldl9pZCkKK3sKKwlpZiAoY2hhbm5yIDwgMCB8fCBjaGFubnIgPiBNQVhfRFVNX0NIQU5ORUxTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChkdW1fZGF0YS5mYl9vd25pbmdfY2hhbm5lbFtjaGFubnJdICE9IGRldl9pZCkKKwkJcmV0dXJuIC1FRkJOT1RPV05FUjsKKwllbHNlIHsKKwkJaWYgKHZhbCA9PSBDT05GX0RJUlRZREVURUNUSU9OX09OKQorCQkJRFVNX0NIX0NPTkYoY2hhbm5yKSB8PSBDT05GX0RJUlRZRU5BQkxFOworCQllbHNlIGlmICh2YWwgPT0gQ09ORl9ESVJUWURFVEVDVElPTl9PRkYpCisJCQlEVU1fQ0hfQ09ORihjaGFubnIpICY9IH5DT05GX0RJUlRZRU5BQkxFOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X3NldF9kdW1fY2hhbm5lbF9kaXJ0eV9kZXRlY3QpOworCisjaWYgMCAvKiBGdW5jdGlvbnMgbm90IHVzZWQgY3VycmVudGx5LCBidXQgbGlrZWx5IHRvIGJlIHVzZWQgaW4gZnV0dXJlICovCisKK3N0YXRpYyBpbnQgZ2V0X2NoYW5uZWwoc3RydWN0IGR1bWNoYW5uZWwgKnBfY2hhbikKK3sKKwlpbnQgaSA9IHBfY2hhbi0+Y2hhbm5lbG5yOworCisJaWYgKGkgPCAwIHx8IGkgPiBNQVhfRFVNX0NIQU5ORUxTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIHsKKwkJcF9jaGFuLT5kdW1fY2hfbWluID0gRFVNX0NIX01JTihpKTsKKwkJcF9jaGFuLT5kdW1fY2hfbWF4ID0gRFVNX0NIX01BWChpKTsKKwkJcF9jaGFuLT5kdW1fY2hfY29uZiA9IERVTV9DSF9DT05GKGkpOworCQlwX2NoYW4tPmR1bV9jaF9zdGF0ID0gRFVNX0NIX1NUQVQoaSk7CisJCXBfY2hhbi0+ZHVtX2NoX2N0cmwgPSAwOwkvKiBXcml0ZU9ubHkgY29udHJvbCByZWdpc3RlciAqLworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcG54NDAwOF9nZXRfZHVtX2NoYW5uZWxfdWYoc3RydWN0IGR1bWNoYW5uZWxfdWYgKnBfY2hhbl91ZiwgaW50IGRldl9pZCkKK3sKKwlpbnQgaSA9IHBfY2hhbl91Zi0+Y2hhbm5lbG5yOworCisJaWYgKGkgPCAwIHx8IGkgPiBNQVhfRFVNX0NIQU5ORUxTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChkdW1fZGF0YS5mYl9vd25pbmdfY2hhbm5lbFtpXSAhPSBkZXZfaWQpCisJCXJldHVybiAtRUZCTk9UT1dORVI7CisJZWxzZSB7CisJCXBfY2hhbl91Zi0+ZGlydHkgPSBkdW1fZGF0YS5jaGFuX3VmX3N0b3JlW2ldLmRpcnR5OworCQlwX2NoYW5fdWYtPnNvdXJjZSA9IGR1bV9kYXRhLmNoYW5fdWZfc3RvcmVbaV0uc291cmNlOworCQlwX2NoYW5fdWYtPnhfb2Zmc2V0ID0gZHVtX2RhdGEuY2hhbl91Zl9zdG9yZVtpXS54X29mZnNldDsKKwkJcF9jaGFuX3VmLT55X29mZnNldCA9IGR1bV9kYXRhLmNoYW5fdWZfc3RvcmVbaV0ueV9vZmZzZXQ7CisJCXBfY2hhbl91Zi0+d2lkdGggPSBkdW1fZGF0YS5jaGFuX3VmX3N0b3JlW2ldLndpZHRoOworCQlwX2NoYW5fdWYtPmhlaWdodCA9IGR1bV9kYXRhLmNoYW5fdWZfc3RvcmVbaV0uaGVpZ2h0OworCX0KKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ2V0X2R1bV9jaGFubmVsX3VmKTsKKworaW50IHBueDQwMDhfZ2V0X2R1bV9jaGFubmVsX2NvbmZpZyhpbnQgY2hhbm5yLCBpbnQgZGV2X2lkKQoreworCWludCByZXQ7CisJc3RydWN0IGR1bWNoYW5uZWwgY2hhbjsKKworCWlmIChjaGFubnIgPCAwIHx8IGNoYW5uciA+IE1BWF9EVU1fQ0hBTk5FTFMpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKGR1bV9kYXRhLmZiX293bmluZ19jaGFubmVsW2NoYW5ucl0gIT0gZGV2X2lkKQorCQlyZXR1cm4gLUVGQk5PVE9XTkVSOworCWVsc2UgeworCQljaGFuLmNoYW5uZWxuciA9IGNoYW5ucjsKKwkJaWYgKChyZXQgPSBnZXRfY2hhbm5lbCgmY2hhbikpICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAoY2hhbi5kdW1fY2hfY29uZiAmIERVTV9DSEFOTkVMX0NGR19NQVNLKTsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dldF9kdW1fY2hhbm5lbF9jb25maWcpOworCitpbnQgcG54NDAwOF9mb3JjZV91cGRhdGVfZHVtX2NoYW5uZWwoaW50IGNoYW5uciwgaW50IGRldl9pZCkKK3sKKwlpZiAoY2hhbm5yIDwgMCB8fCBjaGFubnIgPiBNQVhfRFVNX0NIQU5ORUxTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVsc2UgaWYgKGR1bV9kYXRhLmZiX293bmluZ19jaGFubmVsW2NoYW5ucl0gIT0gZGV2X2lkKQorCQlyZXR1cm4gLUVGQk5PVE9XTkVSOworCWVsc2UKKwkJRFVNX0NIX0NUUkwoY2hhbm5yKSA9IENUUkxfU0VURElSVFk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2ZvcmNlX3VwZGF0ZV9kdW1fY2hhbm5lbCk7CisKKyNlbmRpZgorCitpbnQgcG54NDAwOF9zZHVtX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisKKwlpZiAob2ZmIDwgaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXZtYS0+dm1fcGdvZmYgKz0gMTsKKwkJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZShkZXYsIHZtYSwKKwkJCQkodm9pZCAqKWR1bV9kYXRhLmxjZF92aXJ0X3N0YXJ0LAorCQkJCWR1bV9kYXRhLmxjZF9waHlzX3N0YXJ0LAorCQkJCUZCX0RNQV9TSVpFKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9zZHVtX21tYXApOworCitpbnQgcG54NDAwOF9zZXRfZHVtX2V4aXRfbm90aWZpY2F0aW9uKGludCBkZXZfaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RVTV9DSEFOTkVMUzsgaSsrKQorCQlpZiAoZHVtX2RhdGEuZmJfb3duaW5nX2NoYW5uZWxbaV0gPT0gZGV2X2lkKQorCQkJcmV0dXJuIC1FUkVTT1VSQ0VTTk9URlJFRUQ7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X3NldF9kdW1fZXhpdF9ub3RpZmljYXRpb24pOworCisvKiBQbGF0Zm9ybSBkZXZpY2UgZHJpdmVyIGZvciBEVU0gKi8KKworc3RhdGljIGludCBzZHVtX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IGNsa19nZXQoMCwgImR1bV9jayIpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJY2xrX3NldF9yYXRlKGNsaywgMCk7CisJCWNsa19wdXQoY2xrKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gUFRSX0VSUihjbGspOworCisJLyogZGlzYWJsZSBCQUMgKi8KKwlEVU1fQ1RSTCA9IFZfQkFDX0RJU0FCTEVfSURMRTsKKworCS8qIExDRCBzdGFuZGJ5ICYgdHVybiBvZmYgZGlzcGxheSAqLworCWxjZF9yZXNldCgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBzZHVtX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IGNsa19nZXQoMCwgImR1bV9jayIpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJY2xrX3NldF9yYXRlKGNsaywgMSk7CisJCWNsa19wdXQoY2xrKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gUFRSX0VSUihjbGspOworCisJLyogd2FpdCBmb3IgQkFDIGRpc2FibGUgKi8KKwlEVU1fQ1RSTCA9IFZfQkFDX0RJU0FCTEVfVFJJRzsKKworCXdoaWxlIChEVU1fQ1RSTCAmIEJBQ19FTkFCTEVEKQorCQl1ZGVsYXkoMTApOworCisJLyogcmUtaW5pdCBMQ0QgKi8KKwlsY2RfaW5pdCgpOworCisJLyogZW5hYmxlIEJBQyBhbmQgcmVzZXQgTVVYICovCisJRFVNX0NUUkwgPSBWX0JBQ19FTkFCTEU7CisJdWRlbGF5KDEpOworCURVTV9DVFJMID0gVl9NVVhfUkVTRVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkdW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMCwgaSA9IDA7CisKKwkvKiBtYXAgZnJhbWUgYnVmZmVyICovCisJZHVtX2RhdGEubGNkX3ZpcnRfc3RhcnQgPSAodTMyKSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsCisJCQkJCQkgICAgICAgRkJfRE1BX1NJWkUsCisJCQkJCQkgICAgICAgJmR1bV9kYXRhLmxjZF9waHlzX3N0YXJ0LAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFkdW1fZGF0YS5sY2RfdmlydF9zdGFydCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF8zOworCX0KKworCS8qIG1hcCBzbGF2ZSByZWdpc3RlcnMgKi8KKwlkdW1fZGF0YS5zbGF2ZV9waHlzX2Jhc2UgPSBQTlg0MDA4X0RVTV9TTEFWRV9CQVNFOworCWR1bV9kYXRhLnNsYXZlX3ZpcnRfYmFzZSA9CisJICAgICh1MzIgKikgaW9yZW1hcF9ub2NhY2hlKGR1bV9kYXRhLnNsYXZlX3BoeXNfYmFzZSwgc2l6ZW9mKHUzMikpOworCisJaWYgKGR1bV9kYXRhLnNsYXZlX3ZpcnRfYmFzZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0XzI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBEVU0gYW5kIExDRCBkaXNwbGF5ICovCisJcmV0ID0gZHVtX2luaXQocGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfMTsKKworCWR1bV9jaGFuX2luaXQoKTsKKwlsY2RfaW5pdCgpOworCisJRFVNX0NUUkwgPSBWX0JBQ19FTkFCTEU7CisJdWRlbGF5KDEpOworCURVTV9DVFJMID0gVl9NVVhfUkVTRVQ7CisKKwkvKiBzZXQgZGVjb2RlIGFkZHJlc3MgYW5kIHN5bmMgY2xvY2sgZGl2aWRlciAqLworCURVTV9ERUNPREUgPSBkdW1fZGF0YS5sY2RfcGh5c19zdGFydCAmIERVTV9ERUNPREVfTUFTSzsKKwlEVU1fQ0xLX0RJViA9IFBOWDQwMDhfRFVNX0NMS19ESVY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RVTV9DSEFOTkVMUzsgaSsrKQorCQlkdW1fZGF0YS5mYl9vd25pbmdfY2hhbm5lbFtpXSA9IC0xOworCisJLypzZXR1cCB3YWtldXAgaW50ZXJydXB0ICovCisJc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZShTRV9ESVNQX1NZTkNfSU5UKTsKKwlzdGFydF9pbnRfYWNrKFNFX0RJU1BfU1lOQ19JTlQpOworCXN0YXJ0X2ludF91bWFzayhTRV9ESVNQX1NZTkNfSU5UKTsKKworCXJldHVybiAwOworCitvdXRfMToKKwlpb3VubWFwKCh2b2lkICopZHVtX2RhdGEuc2xhdmVfdmlydF9iYXNlKTsKK291dF8yOgorCWRtYV9mcmVlX3dyaXRlY29tYmluZSgmcGRldi0+ZGV2LCBGQl9ETUFfU0laRSwKKwkJCSh2b2lkICopZHVtX2RhdGEubGNkX3ZpcnRfc3RhcnQsCisJCQlkdW1fZGF0YS5sY2RfcGh5c19zdGFydCk7CitvdXRfMzoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNkdW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJc3RhcnRfaW50X21hc2soU0VfRElTUF9TWU5DX0lOVCk7CisKKwljbGsgPSBjbGtfZ2V0KDAsICJkdW1fY2siKTsKKwlpZiAoIUlTX0VSUihjbGspKSB7CisJCWNsa19zZXRfcmF0ZShjbGssIDApOworCQljbGtfcHV0KGNsayk7CisJfQorCisJaW91bm1hcCgodm9pZCAqKWR1bV9kYXRhLnNsYXZlX3ZpcnRfYmFzZSk7CisKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJnBkZXYtPmRldiwgRkJfRE1BX1NJWkUsCisJCQkodm9pZCAqKWR1bV9kYXRhLmxjZF92aXJ0X3N0YXJ0LAorCQkJZHVtX2RhdGEubGNkX3BoeXNfc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNkdW1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNkdW0iLAorCX0sCisJLnByb2JlID0gc2R1bV9wcm9iZSwKKwkucmVtb3ZlID0gc2R1bV9yZW1vdmUsCisJLnN1c3BlbmQgPSBzZHVtX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNkdW1fcmVzdW1lLAorfTsKKworaW50IF9faW5pdCBzZHVtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZHVtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZHVtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2R1bV9kcml2ZXIpOworfTsKKworbW9kdWxlX2luaXQoc2R1bV9pbml0KTsKK21vZHVsZV9leGl0KHNkdW1fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9zZHVtLmggYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzVkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLCBvciBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKKyovCisKKyNkZWZpbmUgTUFYX0RVTV9DSEFOTkVMUwk2NAorCisjZGVmaW5lIFJHQl9NRU1fV0lORE9XKHgpICgweDEwMDAwMDAwICsgKHgpKjB4MDAxMDAwMDApCisKKyNkZWZpbmUgUUNJRl9PRkZTRVQoeCkgKCgoeCkgPT0gMCkgPyAweDAwMDAwOiAoKHgpID09IDEpID8gMHgzMDAwMDogLTEpCisjZGVmaW5lIENJRl9PRkZTRVQoeCkgICgoKHgpID09IDApID8gMHgwMDAwMDogKCh4KSA9PSAxKSA/IDB4NjAwMDA6IC0xKQorCisjZGVmaW5lIENUUkxfU0VURElSVFkJIAkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgQ09ORl9ESVJUWUVOQUJMRQkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgQ09ORl9TWU5DRU5BQkxFCQkoMHgwMDAwMDAwNCkKKworI2RlZmluZSBESVJUWV9FTkFCTEVEKGNvbmYpCSgoY29uZikgJiAweDAwMjApCisjZGVmaW5lIFNZTkNfRU5BQkxFRChjb25mKSAJKChjb25mKSAmIDB4MDAwNCkKKworLyogRGlzcGxheSAxICYgMiBXcml0ZSBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBQTlg0MDA4X0RVTV9XVF9DRkcJCTB4MDAzNzIwMDAKKworLyogRGlzcGxheSAxICYgMiBSZWFkIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFBOWDQwMDhfRFVNX1JUX0NGRwkJMHgwMDAwM0E0NworCisvKiBEVU0gVHJhbnNpdCBTdGF0ZSBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBQTlg0MDA4X0RVTV9UX0NGRwkJMHgxRAkvKiAyOSBIQ0xLIGN5Y2xlcyAqLworCisvKiBEVU0gU3luYyBjb3VudCBjbG9jayBkaXZpZGVyICovCisjZGVmaW5lIFBOWDQwMDhfRFVNX0NMS19ESVYJCTB4MDJERAorCisvKiBNZW1vcnkgc2l6ZSBmb3IgZnJhbWVidWZmZXIsIGFsbG9jYXRlZCB0aHJvdWdoIGRtYV9hbGxvY193cml0ZWNvbWJpbmUoKS4KKyAqIE11c3QgYmUgUEFHRSBhbGlnbmVkCisgKi8KKyNkZWZpbmUgRkJfRE1BX1NJWkUgKFBBR0VfQUxJR04oU1pfMU0gKyBQQUdFX1NJWkUpKQorCisjZGVmaW5lIE9GRlNFVF9SR0JCVUZGRVIgKDB4QjAwMDApCisjZGVmaW5lIE9GRlNFVF9ZVVZCVUZGRVIgKDB4MDAwMDApCisKKyNkZWZpbmUgWVVWQlVGRkVSIChsY2RfdmlkZW9fc3RhcnQgKyBPRkZTRVRfWVVWQlVGRkVSKQorI2RlZmluZSBSR0JCVUZGRVIgKGxjZF92aWRlb19zdGFydCArIE9GRlNFVF9SR0JCVUZGRVIpCisKKyNkZWZpbmUgQ01EU1RSSU5HX0JBU0VBRERSCSgweDAwQzAwMCkJLyogaXJhbSAqLworI2RlZmluZSBCWVRFU19QRVJfQ01EU1RSSU5HCSgweDgwKQorI2RlZmluZSBOUl9PRl9DTURTVFJJTkdTCSg2NCkKKworI2RlZmluZSBNQVhfTlJfUFJFU1RSSU5HUyAoMHg0MCkKKyNkZWZpbmUgTUFYX05SX1BPU1RTVFJJTkdTICgweDQwKQorCisvKiB2YXJpb3VzIG1hc2sgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFVNX0NMS19FTkFCTEUgMHgwMQorI2RlZmluZSBEVU1fQ0xLX0RJU0FCTEUgMAorI2RlZmluZSBEVU1fREVDT0RFX01BU0sgMHgxRkZGRkZGRgorI2RlZmluZSBEVU1fQ0hBTk5FTF9DRkdfTUFTSyAweDAxRkYKKyNkZWZpbmUgRFVNX0NIQU5ORUxfQ0ZHX1NZTkNfTUFTSyAweEZGRkUwMEZGCisjZGVmaW5lIERVTV9DSEFOTkVMX0NGR19TWU5DX01BU0tfU0VUIDB4MENBMDAKKworI2RlZmluZSBTRFVNX1JFVFVSTlZBTF9CQVNFICgweDUwMCkKKworI2RlZmluZSBDT05GX1NZTkNfT0ZGCQkoMHg2MDIpCisjZGVmaW5lIENPTkZfU1lOQ19PTgkJKDB4NjAzKQorCisjZGVmaW5lIENPTkZfRElSVFlERVRFQ1RJT05fT0ZGCSgweDYwMCkKKyNkZWZpbmUgQ09ORl9ESVJUWURFVEVDVElPTl9PTgkoMHg2MDEpCisKKy8qIFNldCB0aGUgY29ycmVzcG9uZGluZyBiaXQuICovCisjZGVmaW5lIEJJVChuKSAoMHgxVSA8PCAobikpCisKK3N0cnVjdCBkdW1jaGFubmVsX3VmIHsKKwlpbnQgY2hhbm5lbG5yOworCXUzMiAqZGlydHk7CisJdTMyICpzb3VyY2U7CisJdTMyIHhfb2Zmc2V0OworCXUzMiB5X29mZnNldDsKKwl1MzIgd2lkdGg7CisJdTMyIGhlaWdodDsKK307CisKK2VudW0geworCUZCX1RZUEVfWVVWLAorCUZCX1RZUEVfUkdCCit9OworCitzdHJ1Y3QgY21kc3RyaW5nIHsKKwlpbnQgY2hhbm5lbG5yOworCXVpbnQxNl90IHByZXN0cmluZ2xlbjsKKwl1aW50MTZfdCBwb3N0c3RyaW5nbGVuOworCXVpbnQxNl90IGZvcm1hdDsKKwl1aW50MTZfdCByZXNlcnZlZDsKKwl1aW50MTZfdCBzdGFydGFkZHJfbG93OworCXVpbnQxNl90IHN0YXJ0YWRkcl9oaWdoOworCXVpbnQxNl90IHBpeGRhdGxlbl9sb3c7CisJdWludDE2X3QgcGl4ZGF0bGVuX2hpZ2g7CisJdTMyIHByZWNtZFtNQVhfTlJfUFJFU1RSSU5HU107CisJdTMyIHBvc3RjbWRbTUFYX05SX1BPU1RTVFJJTkdTXTsKKworfTsKKworc3RydWN0IGR1bWNoYW5uZWwgeworCWludCBjaGFubmVsbnI7CisJaW50IGR1bV9jaF9taW47CisJaW50IGR1bV9jaF9tYXg7CisJaW50IGR1bV9jaF9jb25mOworCWludCBkdW1fY2hfc3RhdDsKKwlpbnQgZHVtX2NoX2N0cmw7Cit9OworCitpbnQgcG54NDAwOF9hbGxvY19kdW1fY2hhbm5lbChpbnQgZGV2X2lkKTsKK2ludCBwbng0MDA4X2ZyZWVfZHVtX2NoYW5uZWwoaW50IGNoYW5uciwgaW50IGRldl9pZCk7CisKK2ludCBwbng0MDA4X2dldF9kdW1fY2hhbm5lbF91ZihzdHJ1Y3QgZHVtY2hhbm5lbF91ZiAqcENoYW5fdWYsIGludCBkZXZfaWQpOworaW50IHBueDQwMDhfcHV0X2R1bV9jaGFubmVsX3VmKHN0cnVjdCBkdW1jaGFubmVsX3VmIGNoYW5fdWYsIGludCBkZXZfaWQpOworCitpbnQgcG54NDAwOF9zZXRfZHVtX2NoYW5uZWxfc3luYyhpbnQgY2hhbm5yLCBpbnQgdmFsLCBpbnQgZGV2X2lkKTsKK2ludCBwbng0MDA4X3NldF9kdW1fY2hhbm5lbF9kaXJ0eV9kZXRlY3QoaW50IGNoYW5uciwgaW50IHZhbCwgaW50IGRldl9pZCk7CisKK2ludCBwbng0MDA4X2ZvcmNlX2R1bV91cGRhdGVfY2hhbm5lbChpbnQgY2hhbm5yLCBpbnQgZGV2X2lkKTsKKworaW50IHBueDQwMDhfZ2V0X2R1bV9jaGFubmVsX2NvbmZpZyhpbnQgY2hhbm5yLCBpbnQgZGV2X2lkKTsKKworaW50IHBueDQwMDhfc2R1bV9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGRldmljZSAqZGV2KTsKK2ludCBwbng0MDA4X3NldF9kdW1fZXhpdF9ub3RpZmljYXRpb24oaW50IGRldl9pZCk7CisKK2ludCBwbng0MDA4X2dldF9mYl9hZGRyZXNzZXMoaW50IGZiX3R5cGUsIHZvaWQgKip2aXJ0X2FkZHIsCisJCQkgICAgIGRtYV9hZGRyX3QgKiBwaHlzX2FkZHIsIGludCAqZmJfbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCmluZGV4IGVjNGJhY2YuLjRhMWUwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IDgwOWZjNWUuLmJiYjA3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMzM1LDcgKzEzMzQsNyBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfTENELCBweGFmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsICJMQ0QiLCBmYmkpOworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9MQ0QsIHB4YWZiX2hhbmRsZV9pcnEsIElSUUZfRElTQUJMRUQsICJMQ0QiLCBmYmkpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jCmluZGV4IDEyYWY1OGMuLjI3ODg2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKglkb3VibGVzY2FuIG1vZGVzIGFyZSBicm9rZW4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmItaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLWkyYy5jCmluZGV4IDhiMTk2N2YuLjk3NTFjMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmItaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9yaXZhL3JpdmFmYi1pMmMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmIuaCBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmIuaAppbmRleCA0NDBmZjQ0NS4uN2ZhMTNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL3JpdmFmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19SSVZBRkJfSAogI2RlZmluZSBfX1JJVkFGQl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCBmZWVjNDdiLi5hNTMzM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtMjgsNyArMjgsNiBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKaW5kZXggZmJjNDExOC4uZjQ2MWViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAogCWRwcmludGsoImdvdCBMQ0QgcmVnaW9uXG4iKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgczNjMjQxMGZiX2lycSwgU0FfSU5URVJSVVBULCBwZGV2LT5uYW1lLCBpbmZvKTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHMzYzI0MTBmYl9pcnEsIElSUUZfRElTQUJMRUQsIHBkZXYtPm5hbWUsIGluZm8pOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBpcnEgJWQgLSBlcnIgJWRcbiIsIGlycSwgcmV0KTsKIAkJcmV0ID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IGQ5ODMxZmQuLmEyZTZlNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTE2MCw3ICsxNjAsNiBAQAogICoJLSBBZGQgcGF0Y2ggNjgxLzEgYW5kIGNsZWFuIHVwIHN0b3JrIGRlZmluaXRpb25zLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTQ3Myw3ICsxNDcyLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgc2ExMTAwZmJfaGFuZGxlX2lycSwgU0FfSU5URVJSVVBULAorCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgc2ExMTAwZmJfaGFuZGxlX2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgIkxDRCIsIGZiaSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgInNhMTEwMGZiOiByZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYwppbmRleCAyMWRlYmVkLi5lODNiZWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYwpAQCAtMTAsNyArMTAsNiBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggNzg4ODNjZi4uNDcyOWFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTQxLDcgKzQxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCmluZGV4IDJlNmRmMWYuLmViYjY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCkBAIC05LDcgKzksNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTIzLDYgKzIyLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogCisjaW5jbHVkZSA8c2V0dXBfYXJjaC5oPgorCiAjZGVmaW5lIElOQ0xVREVfVElNSU5HX1RBQkxFX0RBVEEKICNkZWZpbmUgREJFX1JFR19CQVNFIHBhci0+cmVncwogI2luY2x1ZGUgPHZpZGVvL3NnaXZ3Lmg+CkBAIC00MiwxMCArNDMsNiBAQAogICogIFRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGlmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUKICAqLwogCi0vKiBzZXQgYnkgYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzZ2l2d2ZiX21lbV9waHlzOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2dpdndmYl9tZW1fc2l6ZTsKLQogc3RhdGljIGludCB5cGFuID0gMDsKIHN0YXRpYyBpbnQgeXdyYXAgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0LmggYi9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0LmgKaW5kZXggNjM0YzBhOS4uN2VjYWI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvaW5pdC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuaApAQCAtNzMsNyArNzMsNiBAQAogI2lmZGVmIFNJU19DUAogI3VuZGVmIFNJU19DUAogI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmMgYi9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmMKaW5kZXggYzNlMDcwYS4uZjEzZmFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuYwpAQCAtODA0Myw4ICs4MDQzLDggQEAKICAgICAgIFNpU19TZXRDSDcwMHgoU2lTX1ByLDB4MDEsMHgyOCk7CiAKICAgICAgIC8qIFNldCB2aWRlbyBiYW5kd2lkdGgKLSAgICAgICAgICAgIEhpZ2ggYmFuZHdpdGggTHVtYSBjb21wb3NpdGUgdmlkZW8gZmlsdGVyKFMwPTEpCi0gICAgICAgICAgICBsb3cgYmFuZHdpdGggTHVtYSBTLXZpZGVvIGZpbHRlciAoUzItMT0wMCkKKyAgICAgICAgICAgIEhpZ2ggYmFuZHdpZHRoIEx1bWEgY29tcG9zaXRlIHZpZGVvIGZpbHRlcihTMD0xKQorICAgICAgICAgICAgbG93IGJhbmR3aWR0aCBMdW1hIFMtdmlkZW8gZmlsdGVyIChTMi0xPTAwKQogCSAgICBkaXNhYmxlIHBlYWsgZmlsdGVyIGluIFMtdmlkZW8gY2hhbm5lbCAoUzM9MCkKIAkgICAgaGlnaCBiYW5kd2lkdGggQ2hyb21hIEZpbHRlciAoUzUtND0xMSkKIAkgICAgPTAwMTEwMDAxPTB4MzEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuaCBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuaAppbmRleCBmNDc1YjIxLi5iYzMyMWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmgKKysrIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5oCkBAIC02Nyw3ICs2Nyw2IEBACiAjaWZkZWYgU0lTX0NQCiAjdW5kZWYgU0lTX0NQCiAjZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXRleHRsZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXRleHRsZmIuYwppbmRleCBjYzg1NmQ5Li4wOWY1ZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0ZXh0bGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdGV4dGxmYi5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAidmdhdHlwZXMuaCIKICNpbmNsdWRlICJ2c3RydWN0LmgiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvb3NkZWYuaCBiL2RyaXZlcnMvdmlkZW8vc2lzL29zZGVmLmgKaW5kZXggODQxY2EzMS4uZjU5NTY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvb3NkZWYuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9vc2RlZi5oCkBAIC05MCw3ICs5MCw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmZGVmIFNJU19MSU5VWF9LRVJORUwKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpZmRlZiBDT05GSUdfRkJfU0lTXzMwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvc2lzLmggYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaAppbmRleCAwYjZlNjI1Li5hMjU5NDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfU0lTX0hfCiAjZGVmaW5lIF9TSVNfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgIm9zZGVmLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfYWNjZWwuYyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19hY2NlbC5jCmluZGV4IGJhYjkzM2UuLjNiN2NlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19hY2NlbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19hY2NlbC5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKgkJCWZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1cGRhdGVzKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jIGIvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYwppbmRleCBjNjNjMGU3Li5iODQ4Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKQEAgLTMzLDcgKzMzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKaW5kZXggYzQ0ZGU5MC4uZGFkNTRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zc3RmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwpAQCAtODIsNyArODIsNiBAQAogICogSW5jbHVkZXMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMKaW5kZXggNGEyOTJhYS4uM2UxNmUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zdGlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3RpZmIuYwpAQCAtNTQsNyArNTQsNiBAQAogI3VuZGVmIERFQlVHX1NUSUZCX1JFR1MJCS8qIGRlYnVnIHN0aSByZWdpc3RlciBhY2Nlc3NlcyAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zdW4zZmIuYyBiL2RyaXZlcnMvdmlkZW8vc3VuM2ZiLmMKaW5kZXggOWIzNmI5ZC4uZTA0NmUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zdW4zZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3N1bjNmYi5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90Y3guYyBiL2RyaXZlcnMvdmlkZW8vdGN4LmMKaW5kZXggOTViOTE4Mi4uNjk5MGFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90Y3guYworKysgYi9kcml2ZXJzL3ZpZGVvL3RjeC5jCkBAIC0xLDYgKzEsNiBAQAogLyogdGN4LmM6IFRDWCBmcmFtZSBidWZmZXIgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5OCBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKICAqIENvcHlyaWdodCAoQykgMTk5NiBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRWRkaWUgQy4gRG9zdCAoZWNkQHNreW5ldC5iZSkKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NidXMuaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vZmJpby5oPgogCiAjaW5jbHVkZSAic2J1c2xpYi5oIgpAQCAtNzcsMzIgKzc3LDMyIEBACiAKIC8qIFRoZSBjb250ZW50cyBhcmUgdW5rbm93biAqLwogc3RydWN0IHRjeF90ZWMgewotCXZvbGF0aWxlIHUzMiB0ZWNfbWF0cml4OwotCXZvbGF0aWxlIHUzMiB0ZWNfY2xpcDsKLQl2b2xhdGlsZSB1MzIgdGVjX3ZkYzsKKwl1MzIgdGVjX21hdHJpeDsKKwl1MzIgdGVjX2NsaXA7CisJdTMyIHRlY192ZGM7CiB9OwogCiBzdHJ1Y3QgdGN4X3RoYyB7Ci0Jdm9sYXRpbGUgdTMyIHRoY19yZXY7CisJdTMyIHRoY19yZXY7CiAgICAgICAgIHUzMiB0aGNfcGFkMFs1MTFdOwotCXZvbGF0aWxlIHUzMiB0aGNfaHM7CQkvKiBoc3luYyB0aW1pbmcgKi8KLQl2b2xhdGlsZSB1MzIgdGhjX2hzZHZzOwotCXZvbGF0aWxlIHUzMiB0aGNfaGQ7Ci0Jdm9sYXRpbGUgdTMyIHRoY192czsJCS8qIHZzeW5jIHRpbWluZyAqLwotCXZvbGF0aWxlIHUzMiB0aGNfdmQ7Ci0Jdm9sYXRpbGUgdTMyIHRoY19yZWZyZXNoOwotCXZvbGF0aWxlIHUzMiB0aGNfbWlzYzsKKwl1MzIgdGhjX2hzOwkJLyogaHN5bmMgdGltaW5nICovCisJdTMyIHRoY19oc2R2czsKKwl1MzIgdGhjX2hkOworCXUzMiB0aGNfdnM7CQkvKiB2c3luYyB0aW1pbmcgKi8KKwl1MzIgdGhjX3ZkOworCXUzMiB0aGNfcmVmcmVzaDsKKwl1MzIgdGhjX21pc2M7CiAJdTMyIHRoY19wYWQxWzU2XTsKLQl2b2xhdGlsZSB1MzIgdGhjX2N1cnN4eTsJLyogY3Vyc29yIHgseSBwb3NpdGlvbiAoMTYgYml0cyBlYWNoKSAqLwotCXZvbGF0aWxlIHUzMiB0aGNfY3Vyc21hc2tbMzJdOwkvKiBjdXJzb3IgbWFzayBiaXRzICovCi0Jdm9sYXRpbGUgdTMyIHRoY19jdXJzYml0c1szMl07CS8qIHdoYXQgdG8gc2hvdyB3aGVyZSBtYXNrIGVuYWJsZWQgKi8KKwl1MzIgdGhjX2N1cnN4eTsJLyogY3Vyc29yIHgseSBwb3NpdGlvbiAoMTYgYml0cyBlYWNoKSAqLworCXUzMiB0aGNfY3Vyc21hc2tbMzJdOwkvKiBjdXJzb3IgbWFzayBiaXRzICovCisJdTMyIHRoY19jdXJzYml0c1szMl07CS8qIHdoYXQgdG8gc2hvdyB3aGVyZSBtYXNrIGVuYWJsZWQgKi8KIH07CiAKIHN0cnVjdCBidF9yZWdzIHsKLQl2b2xhdGlsZSB1MzIgYWRkcjsKLQl2b2xhdGlsZSB1MzIgY29sb3JfbWFwOwotCXZvbGF0aWxlIHUzMiBjb250cm9sOwotCXZvbGF0aWxlIHUzMiBjdXJzb3I7CisJdTMyIGFkZHI7CisJdTMyIGNvbG9yX21hcDsKKwl1MzIgY29udHJvbDsKKwl1MzIgY3Vyc29yOwogfTsKIAogI2RlZmluZSBUQ1hfTU1BUF9FTlRSSUVTIDE0CkBAIC0xMTIsMjQgKzExMiwyMyBAQAogCXN0cnVjdCBidF9yZWdzCQlfX2lvbWVtICpidDsKIAlzdHJ1Y3QgdGN4X3RoYwkJX19pb21lbSAqdGhjOwogCXN0cnVjdCB0Y3hfdGVjCQlfX2lvbWVtICp0ZWM7Ci0Jdm9sYXRpbGUgdTMyCQlfX2lvbWVtICpjcGxhbmU7CisJdTMyCQkJX19pb21lbSAqY3BsYW5lOwogCiAJdTMyCQkJZmxhZ3M7CiAjZGVmaW5lIFRDWF9GTEFHX0JMQU5LRUQJMHgwMDAwMDAwMQogCiAJdW5zaWduZWQgbG9uZwkJcGh5c2Jhc2U7CisJdW5zaWduZWQgbG9uZwkJd2hpY2hfaW87CiAJdW5zaWduZWQgbG9uZwkJZmJzaXplOwogCiAJc3RydWN0IHNidXNfbW1hcF9tYXAJbW1hcF9tYXBbVENYX01NQVBfRU5UUklFU107CiAJaW50CQkJbG93ZGVwdGg7Ci0KLQlzdHJ1Y3Qgc2J1c19kZXYJCSpzZGV2OwogfTsKIAogLyogUmVzZXQgY29udHJvbCBwbGFuZSBzbyB0aGF0IFdJRCBpcyA4LWJpdCBwbGFuZS4gKi8KIHN0YXRpYyB2b2lkIF9fdGN4X3NldF9jb250cm9sX3BsYW5lIChzdHJ1Y3QgdGN4X3BhciAqcGFyKQogewotCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpwLCAqcGVuZDsKKwl1MzIgX19pb21lbSAqcCwgKnBlbmQ7CiAgICAgICAgIAogCWlmIChwYXItPmxvd2RlcHRoKQogCQlyZXR1cm47CkBAIC0zMDcsOCArMzA2LDcgQEAKIAogCXJldHVybiBzYnVzZmJfbW1hcF9oZWxwZXIocGFyLT5tbWFwX21hcCwKIAkJCQkgIHBhci0+cGh5c2Jhc2UsIHBhci0+ZmJzaXplLAotCQkJCSAgcGFyLT5zZGV2LT5yZWdfYWRkcnNbMF0ud2hpY2hfaW8sCi0JCQkJICB2bWEpOworCQkJCSAgcGFyLT53aGljaF9pbywgdm1hKTsKIH0KIAogc3RhdGljIGludCB0Y3hfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCkBAIC0zNTAsNDggKzM0OCw3MSBAQAogc3RydWN0IGFsbF9pbmZvIHsKIAlzdHJ1Y3QgZmJfaW5mbyBpbmZvOwogCXN0cnVjdCB0Y3hfcGFyIHBhcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9Owotc3RhdGljIExJU1RfSEVBRCh0Y3hfbGlzdCk7CiAKLXN0YXRpYyB2b2lkIHRjeF9pbml0X29uZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYpCitzdGF0aWMgdm9pZCB0Y3hfdW5tYXBfcmVncyhzdHJ1Y3QgYWxsX2luZm8gKmFsbCkKIHsKKwlpZiAoYWxsLT5wYXIudGVjKQorCQlvZl9pb3VubWFwKGFsbC0+cGFyLnRlYywgc2l6ZW9mKHN0cnVjdCB0Y3hfdGVjKSk7CisJaWYgKGFsbC0+cGFyLnRoYykKKwkJb2ZfaW91bm1hcChhbGwtPnBhci50aGMsIHNpemVvZihzdHJ1Y3QgdGN4X3RoYykpOworCWlmIChhbGwtPnBhci5idCkKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5idCwgc2l6ZW9mKHN0cnVjdCBidF9yZWdzKSk7CisJaWYgKGFsbC0+cGFyLmNwbGFuZSkKKwkJb2ZfaW91bm1hcChhbGwtPnBhci5jcGxhbmUsIGFsbC0+cGFyLmZic2l6ZSAqIHNpemVvZih1MzIpKTsKKwlpZiAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlKQorCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdGN4X2luaXRfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+bm9kZTsKIAlzdHJ1Y3QgYWxsX2luZm8gKmFsbDsKLQlpbnQgbGluZWJ5dGVzLCBpOworCWludCBsaW5lYnl0ZXMsIGksIGVycjsKIAotCWFsbCA9IGttYWxsb2Moc2l6ZW9mKCphbGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFsbCkgewotCQlwcmludGsoS0VSTl9FUlIgInRjeDogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCW1lbXNldChhbGwsIDAsIHNpemVvZigqYWxsKSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYWxsLT5saXN0KTsKKwlhbGwgPSBremFsbG9jKHNpemVvZigqYWxsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2luaXQoJmFsbC0+cGFyLmxvY2spOwotCWFsbC0+cGFyLnNkZXYgPSBzZGV2OwogCi0JYWxsLT5wYXIubG93ZGVwdGggPSBwcm9tX2dldGJvb2woc2Rldi0+cHJvbV9ub2RlLCAidGN4LTgtYml0Iik7CisJYWxsLT5wYXIubG93ZGVwdGggPQorCQkob2ZfZmluZF9wcm9wZXJ0eShkcCwgInRjeC04LWJpdCIsIE5VTEwpICE9IE5VTEwpOwogCi0Jc2J1c2ZiX2ZpbGxfdmFyKCZhbGwtPmluZm8udmFyLCBzZGV2LT5wcm9tX25vZGUsIDgpOworCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgZHAtPm5vZGUsIDgpOwogCWFsbC0+aW5mby52YXIucmVkLmxlbmd0aCA9IDg7CiAJYWxsLT5pbmZvLnZhci5ncmVlbi5sZW5ndGggPSA4OwogCWFsbC0+aW5mby52YXIuYmx1ZS5sZW5ndGggPSA4OwogCi0JbGluZWJ5dGVzID0gcHJvbV9nZXRpbnRkZWZhdWx0KHNkZXYtPnByb21fbm9kZSwgImxpbmVieXRlcyIsCi0JCQkJICAgICAgIGFsbC0+aW5mby52YXIueHJlcyk7CisJbGluZWJ5dGVzID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibGluZWJ5dGVzIiwKKwkJCQkJICBhbGwtPmluZm8udmFyLnhyZXMpOwogCWFsbC0+cGFyLmZic2l6ZSA9IFBBR0VfQUxJR04obGluZWJ5dGVzICogYWxsLT5pbmZvLnZhci55cmVzKTsKIAotCWFsbC0+cGFyLnRlYyA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbN10sIDAsCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgdGN4X3RlYyksICJ0Y3ggdGVjIik7Ci0JYWxsLT5wYXIudGhjID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVs5XSwgMCwKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB0Y3hfdGhjKSwgInRjeCB0aGMiKTsKLQlhbGwtPnBhci5idCA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbOF0sIDAsCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgYnRfcmVncyksICJ0Y3ggZGFjIik7CisJYWxsLT5wYXIudGVjID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzddLCAwLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCB0Y3hfdGVjKSwgInRjeCB0ZWMiKTsKKwlhbGwtPnBhci50aGMgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbOV0sIDAsCisJCQkJICBzaXplb2Yoc3RydWN0IHRjeF90aGMpLCAidGN4IHRoYyIpOworCWFsbC0+cGFyLmJ0ID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzhdLCAwLAorCQkJCSBzaXplb2Yoc3RydWN0IGJ0X3JlZ3MpLCAidGN4IGRhYyIpOworCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IG9mX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgMCwKKwkJCQkJICAgYWxsLT5wYXIuZmJzaXplLCAidGN4IHJhbSIpOworCWlmICghYWxsLT5wYXIudGVjIHx8ICFhbGwtPnBhci50aGMgfHwKKwkgICAgIWFsbC0+cGFyLmJ0IHx8ICFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpIHsKKwkJdGN4X3VubWFwX3JlZ3MoYWxsKTsKKwkJa2ZyZWUoYWxsKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJbWVtY3B5KCZhbGwtPnBhci5tbWFwX21hcCwgJl9fdGN4X21tYXBfbWFwLCBzaXplb2YoYWxsLT5wYXIubW1hcF9tYXApKTsKIAlpZiAoIWFsbC0+cGFyLmxvd2RlcHRoKSB7Ci0JCWFsbC0+cGFyLmNwbGFuZSA9IHNidXNfaW9yZW1hcCgmc2Rldi0+cmVzb3VyY2VbNF0sIDAsCi0JCQkJICAgICBhbGwtPnBhci5mYnNpemUgKiBzaXplb2YodTMyKSwgInRjeCBjcGxhbmUiKTsKKwkJYWxsLT5wYXIuY3BsYW5lID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzRdLCAwLAorCQkJCQkgICAgIGFsbC0+cGFyLmZic2l6ZSAqIHNpemVvZih1MzIpLAorCQkJCQkgICAgICJ0Y3ggY3BsYW5lIik7CisJCWlmICghYWxsLT5wYXIuY3BsYW5lKSB7CisJCQl0Y3hfdW5tYXBfcmVncyhhbGwpOworCQkJa2ZyZWUoYWxsKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfSBlbHNlIHsKIAkJYWxsLT5wYXIubW1hcF9tYXBbMV0uc2l6ZSA9IFNCVVNfTU1BUF9FTVBUWTsKIAkJYWxsLT5wYXIubW1hcF9tYXBbNF0uc2l6ZSA9IFNCVVNfTU1BUF9FTVBUWTsKQEAgLTQwMCw2ICs0MjEsOCBAQAogCX0KIAogCWFsbC0+cGFyLnBoeXNiYXNlID0gMDsKKwlhbGwtPnBhci53aGljaF9pbyA9IG9wLT5yZXNvdXJjZVswXS5mbGFncyAmIElPUkVTT1VSQ0VfQklUUzsKKwogCWZvciAoaSA9IDA7IGkgPCBUQ1hfTU1BUF9FTlRSSUVTOyBpKyspIHsKIAkJaW50IGo7CiAKQEAgLTQxNiwxOCArNDM5LDExIEBACiAJCQlqID0gaTsKIAkJCWJyZWFrOwogCQl9OwotCQlhbGwtPnBhci5tbWFwX21hcFtpXS5wb2ZmID0gc2Rldi0+cmVnX2FkZHJzW2pdLnBoeXNfYWRkcjsKKwkJYWxsLT5wYXIubW1hcF9tYXBbaV0ucG9mZiA9IG9wLT5yZXNvdXJjZVtqXS5zdGFydDsKIAl9CiAKIAlhbGwtPmluZm8uZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKIAlhbGwtPmluZm8uZmJvcHMgPSAmdGN4X29wczsKLSNpZmRlZiBDT05GSUdfU1BBUkMzMgotCWFsbC0+aW5mby5zY3JlZW5fYmFzZSA9IChjaGFyIF9faW9tZW0gKikKLQkJcHJvbV9nZXRpbnRkZWZhdWx0KHNkZXYtPnByb21fbm9kZSwgImFkZHJlc3MiLCAwKTsKLSNlbmRpZgotCWlmICghYWxsLT5pbmZvLnNjcmVlbl9iYXNlKQotCQlhbGwtPmluZm8uc2NyZWVuX2Jhc2UgPSBzYnVzX2lvcmVtYXAoJnNkZXYtPnJlc291cmNlWzBdLCAwLAotCQkJCSAgICAgYWxsLT5wYXIuZmJzaXplLCAidGN4IHJhbSIpOwogCWFsbC0+aW5mby5wYXIgPSAmYWxsLT5wYXI7CiAKIAkvKiBJbml0aWFsaXplIGJyb29rdHJlZSBEQUMuICovCkBAIC00NDUsNzIgKzQ2MSw4OCBAQAogCXRjeF9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCAmYWxsLT5pbmZvKTsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCwgMjU2LCAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgInRjeDogQ291bGQgbm90IGFsbG9jYXRlIGNvbG9yIG1hcC5cbiIpOworCQl0Y3hfdW5tYXBfcmVncyhhbGwpOwogCQlrZnJlZShhbGwpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZiX3NldF9jbWFwKCZhbGwtPmluZm8uY21hcCwgJmFsbC0+aW5mbyk7CiAJdGN4X2luaXRfZml4KCZhbGwtPmluZm8sIGxpbmVieXRlcyk7CiAKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidGN4OiBDb3VsZCBub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXIuXG4iKTsKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKKwlpZiAoZXJyIDwgMCkgewogCQlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKKwkJdGN4X3VubWFwX3JlZ3MoYWxsKTsKIAkJa2ZyZWUoYWxsKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyOwogCX0KIAotCWxpc3RfYWRkKCZhbGwtPmxpc3QsICZ0Y3hfbGlzdCk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBhbGwpOwogCi0JcHJpbnRrKCJ0Y3g6ICVzIGF0ICVseDolbHgsICVzXG4iLAotCSAgICAgICBzZGV2LT5wcm9tX25hbWUsCi0JICAgICAgIChsb25nKSBzZGV2LT5yZWdfYWRkcnNbMF0ud2hpY2hfaW8sCi0JICAgICAgIChsb25nKSBzZGV2LT5yZWdfYWRkcnNbMF0ucGh5c19hZGRyLAorCXByaW50aygiJXM6IFRDWCBhdCAlbHg6JWx4LCAlc1xuIiwKKwkgICAgICAgZHAtPmZ1bGxfbmFtZSwKKwkgICAgICAgYWxsLT5wYXIud2hpY2hfaW8sCisJICAgICAgIG9wLT5yZXNvdXJjZVswXS5zdGFydCwKIAkgICAgICAgYWxsLT5wYXIubG93ZGVwdGggPyAiOC1iaXQgb25seSIgOiAiMjQtYml0IGRlcHRoIik7CisKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgdGN4X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoJmRldi0+ZGV2KTsKKworCXJldHVybiB0Y3hfaW5pdF9vbmUob3ApOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0Y3hfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKKworCXRjeF91bm1hcF9yZWdzKGFsbCk7CisKKwlrZnJlZShhbGwpOworCisJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGN4X21hdGNoW10gPSB7CisJeworCQkubmFtZSA9ICJTVU5XLHRjeCIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0Y3hfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciB0Y3hfZHJpdmVyID0geworCS5uYW1lCQk9ICJ0Y3giLAorCS5tYXRjaF90YWJsZQk9IHRjeF9tYXRjaCwKKwkucHJvYmUJCT0gdGN4X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGN4X3JlbW92ZSksCit9OworCiBpbnQgX19pbml0IHRjeF9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHNidXNfYnVzICpzYnVzOwotCXN0cnVjdCBzYnVzX2RldiAqc2RldjsKLQogCWlmIChmYl9nZXRfb3B0aW9ucygidGN4ZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlmb3JfYWxsX3NidXNkZXYoc2Rldiwgc2J1cykgewotCQlpZiAoIXN0cmNtcChzZGV2LT5wcm9tX25hbWUsICJTVU5XLHRjeCIpKQotCQkJdGN4X2luaXRfb25lKHNkZXYpOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBvZl9yZWdpc3Rlcl9kcml2ZXIoJnRjeF9kcml2ZXIsICZvZl9idXNfdHlwZSk7CiB9CiAKIHZvaWQgX19leGl0IHRjeF9leGl0KHZvaWQpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmdGN4X2xpc3QpIHsKLQkJc3RydWN0IGFsbF9pbmZvICphbGwgPSBsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCphbGwpLCBsaXN0KTsKLQotCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOwotCQlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKLQkJa2ZyZWUoYWxsKTsKLQl9Ci19Ci0KLWludCBfX2luaXQKLXRjeF9zZXR1cChjaGFyICphcmcpCi17Ci0JLyogTm8gY21kbGluZSBvcHRpb25zIHlldC4uLiAqLwotCXJldHVybiAwOworCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZ0Y3hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodGN4X2luaXQpOwotCi0jaWZkZWYgTU9EVUxFCiBtb2R1bGVfZXhpdCh0Y3hfZXhpdCk7Ci0jZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFRDWCBjaGlwc2V0cyIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PiIpOworTU9EVUxFX1ZFUlNJT04oIjIuMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKaW5kZXggNWU1MzI4ZC4uMjM5YjE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCkBAIC01OCw3ICs1OCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMKaW5kZXggNDFmOGMyZC4uMTQxNzVjZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMKKysrIGIvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYwpAQCAtMTUsNyArMTUsNiBAQAogICoJVEdVSSBhY2NlbGVyYXRpb24JCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYwppbmRleCAyYmRlYjRiLi4xZDc2YzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYwpAQCAtMzksNyArMzksNiBAQAogICogIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYyBiL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYwppbmRleCAxNTE3OWVjLi5kOTRlZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZnYXN0YXRlLmMKKysrIGIvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuICAKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvem9ycm8vbmFtZXMuYyBiL2RyaXZlcnMvem9ycm8vbmFtZXMuYwppbmRleCAwZGQ1MzJkLi5lODUxN2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3pvcnJvL25hbWVzLmMKKysrIGIvZHJpdmVycy96b3Jyby9uYW1lcy5jCkBAIC05LDcgKzksNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcsIE1hcnRpbiBNYXJlcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2ZzLzlwL2NvbnYuYyBiL2ZzLzlwL2NvbnYuYwppbmRleCBhNzY3ZTA1Li4xZTg5ODE0IDEwMDY0NAotLS0gYS9mcy85cC9jb252LmMKKysrIGIvZnMvOXAvY29udi5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy85cC9lcnJvci5jIGIvZnMvOXAvZXJyb3IuYwppbmRleCA5ODFmZThlLi5hZTkxNTU1IDEwMDY0NAotLS0gYS9mcy85cC9lcnJvci5jCisrKyBiL2ZzLzlwL2Vycm9yLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEvZnMvOXAvZmNhbGwuYyBiL2ZzLzlwL2ZjYWxsLmMKaW5kZXggNmYyNjE3OC4uODU1NjA5NyAxMDA2NDQKLS0tIGEvZnMvOXAvZmNhbGwuYworKysgYi9mcy85cC9mY2FsbC5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy85cC9mY3ByaW50LmMgYi9mcy85cC9mY3ByaW50LmMKaW5kZXggNTgzZTgyNy4uMzRiOTYxMSAxMDA2NDQKLS0tIGEvZnMvOXAvZmNwcmludC5jCisrKyBiL2ZzLzlwL2ZjcHJpbnQuYwpAQCAtMjEsNyArMjEsNiBAQAogICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5jIGIvZnMvOXAvZmlkLmMKaW5kZXggYjc2MDhhZi4uNzA0OTJjYyAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmMKKysrIGIvZnMvOXAvZmlkLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2ZzLzlwL211eC5jIGIvZnMvOXAvbXV4LmMKaW5kZXggMTJlMWJhYS4uOTBhNzljNyAxMDA2NDQKLS0tIGEvZnMvOXAvbXV4LmMKKysrIGIvZnMvOXAvbXV4LmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTkzMiw2ICs5MzEsOCBAQAogCQkJCQlyLnJjYWxsIHx8IHIuZXJyKTsKIAkJCX0gd2hpbGUgKCFyLnJjYWxsICYmICFyLmVyciAmJiBlcnI9PS1FUkVTVEFSVFNZUyAmJgogCQkJCW0tPnRyYW5zLT5zdGF0dXM9PUNvbm5lY3RlZCAmJiAhbS0+ZXJyKTsKKworCQkJZXJyID0gLUVSRVNUQVJUU1lTOwogCQl9CiAJCXNpZ3BlbmRpbmcgPSAxOwogCX0KZGlmZiAtLWdpdCBhL2ZzLzlwL3RyYW5zX2ZkLmMgYi9mcy85cC90cmFuc19mZC5jCmluZGV4IDk0ZTBhN2YuLjM0ZDQzMzUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3RyYW5zX2ZkLmMKKysrIGIvZnMvOXAvdHJhbnNfZmQuYwpAQCAtMjUsNyArMjUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCBkMzc0MTZlLi4yMmY3Y2NkIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy85cC92OWZzX3Zmcy5oIGIvZnMvOXAvdjlmc192ZnMuaAppbmRleCBmODY3YjhkLi40NTBiMGMxIDEwMDY0NAotLS0gYS9mcy85cC92OWZzX3Zmcy5oCisrKyBiL2ZzLzlwL3Y5ZnNfdmZzLmgKQEAgLTM4LDcgKzM4LDcgQEAKICAqLwogCiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdjlmc19mc190eXBlOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdjlmc19hZGRyX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB2OWZzX2FkZHJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjlmc19kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19kZW50cnlfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19hZGRyLmMgYi9mcy85cC92ZnNfYWRkci5jCmluZGV4IGVmZGE0NmYuLjlkZmQyNTkgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19hZGRyLmMKKysrIGIvZnMvOXAvdmZzX2FkZHIuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAKQEAgLTEwMyw2ICsxMDIsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdjlmc19hZGRyX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHY5ZnNfYWRkcl9vcGVyYXRpb25zID0gewogICAgICAgLnJlYWRwYWdlID0gdjlmc192ZnNfcmVhZHBhZ2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2ZpbGUuYyBiL2ZzLzlwL3Zmc19maWxlLmMKaW5kZXggMWE4ZTQ2MC4uYzNjNDdlZCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2ZpbGUuYworKysgYi9mcy85cC92ZnNfZmlsZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1YzZiZGY4Li4yZjU4MGExIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJZmlkID0gVjlGU19OT0ZJRDsKIAogcHV0X2ZpZDoKLQlpZiAoZmlkID49IDApCisJaWYgKGZpZCAhPSBWOUZTX05PRklEKQogCQl2OWZzX3B1dF9pZHBvb2woZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCiAJa2ZyZWUoZmNhbGwpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCA4YjE1YmIyLi42MzMyMGQ0IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMjUsNyArMjUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA2ZGM4Y2ZkLi41M2Y1YzZkIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTMyNiw3ICszMjYsNyBAQAogCiBjb25maWcgT0NGUzJfRlMKIAl0cmlzdGF0ZSAiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE5FVCAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE5FVCAmJiBTWVNGUyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQ09ORklHRlNfRlMKIAlzZWxlY3QgSkJECiAJc2VsZWN0IENSQzMyCkBAIC0zNTYsNiArMzU2LDE2IEBACiAJICAgICAgICAgIC0gUE9TSVggQUNMcwogCSAgICAgICAgICAtIHJlYWRwYWdlcyAvIHdyaXRlcGFnZXMgKG5vdCB1c2VyIHZpc2libGUpCiAKK2NvbmZpZyBPQ0ZTMl9ERUJVR19NQVNLTE9HCisJYm9vbCAiT0NGUzIgbG9nZ2luZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gT0NGUzJfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGUgb2NmczIgZmlsZXN5c3RlbSBoYXMgYW4gZXh0ZW5zaXZlIGxvZ2dpbmcgc3lzdGVtLiAgVGhlIHN5c3RlbQorCSAgYWxsb3dzIHNlbGVjdGlvbiBvZiBldmVudHMgdG8gbG9nIHZpYSBmaWxlcyBpbiAvc3lzL28yY2IvbG9nbWFzay8uCisJICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwsIGJ1dCBpdCBhbGxvd3MgZGVidWdnaW5nIG9mCisJICBvY2ZzMiBmaWxlc3lzdGVtIGlzc3Vlcy4KKwogY29uZmlnIE1JTklYX0ZTCiAJdHJpc3RhdGUgIk1pbml4IGZzIHN1cHBvcnQiCiAJaGVscApkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCBkMGVhNmJmLi44OTEzNTQyIDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtNjYsNyArNjYsNiBAQAogb2JqLSQoQ09ORklHX1ZGQVRfRlMpCQkrPSB2ZmF0Lwogb2JqLSQoQ09ORklHX0JGU19GUykJCSs9IGJmcy8KIG9iai0kKENPTkZJR19JU085NjYwX0ZTKQkrPSBpc29mcy8KLW9iai0kKENPTkZJR19ERVZGU19GUykJCSs9IGRldmZzLwogb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpCSs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTKwogb2JqLSQoQ09ORklHX0hGU19GUykJCSs9IGhmcy8KIG9iai0kKENPTkZJR19WWEZTX0ZTKQkJKz0gZnJlZXZ4ZnMvCmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuYwppbmRleCA3YjA3NWZjLi5kM2M3OTA1IDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpci5jCisrKyBiL2ZzL2FkZnMvZGlyLmMKQEAgLTksNyArOSw2IEBACiAgKgogICogIENvbW1vbiBkaXJlY3RvcnkgaGFuZGxpbmcgZm9yIEFERlMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9hZGZzX2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9hZGZzL2lub2RlLmMgYi9mcy9hZGZzL2lub2RlLmMKaW5kZXggYTAyODAyYS4uNTM0ZjNlZSAxMDA2NDQKLS0tIGEvZnMvYWRmcy9pbm9kZS5jCisrKyBiL2ZzL2FkZnMvaW5vZGUuYwpAQCAtNzIsNyArNzIsNyBAQAogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZywgYmxvY2ssIGFkZnNfZ2V0X2Jsb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWRmc19hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWRmc19hb3BzID0gewogCS5yZWFkcGFnZQk9IGFkZnNfcmVhZHBhZ2UsCiAJLndyaXRlcGFnZQk9IGFkZnNfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oCmluZGV4IGE0M2E4NzYuLjBkZGQ0Y2MgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYWZmcy5oCisrKyBiL2ZzL2FmZnMvYWZmcy5oCkBAIC0xOTUsOSArMTk1LDkgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSBhZmZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSBhZmZzX2ZpbGVfb3BlcmF0aW9uc19vZnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkgYWZmc19kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX3N5bWxpbmtfYW9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX2FvcHM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucwkgYWZmc19hb3BzX29mczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX3N5bWxpbmtfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucwkgYWZmc19hb3BzX29mczsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucwkgYWZmc19kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMJIGFmZnNfZGVudHJ5X29wZXJhdGlvbnNfaW50bDsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmMKaW5kZXggNzA3NjI2Mi4uM2RlODU5MCAxMDA2NDQKLS0tIGEvZnMvYWZmcy9maWxlLmMKKysrIGIvZnMvYWZmcy9maWxlLmMKQEAgLTQwNiw3ICs0MDYsNyBAQAogewogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxhZmZzX2dldF9ibG9jayk7CiB9Ci1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmZnNfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZmc19hb3BzID0gewogCS5yZWFkcGFnZSA9IGFmZnNfcmVhZHBhZ2UsCiAJLndyaXRlcGFnZSA9IGFmZnNfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UgPSBibG9ja19zeW5jX3BhZ2UsCkBAIC03NTksNyArNzU5LDcgQEAKIAlnb3RvIGRvbmU7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZmc19hb3BzX29mcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZmc19hb3BzX29mcyA9IHsKIAkucmVhZHBhZ2UgPSBhZmZzX3JlYWRwYWdlX29mcywKIAkvLy53cml0ZXBhZ2UgPSBhZmZzX3dyaXRlcGFnZV9vZnMsCiAJLy8uc3luY19wYWdlID0gYWZmc19zeW5jX3BhZ2Vfb2ZzLApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zeW1saW5rLmMgYi9mcy9hZmZzL3N5bWxpbmsuYwppbmRleCA0MjZmMGYwLi5mODAyMjU2IDEwMDY0NAotLS0gYS9mcy9hZmZzL3N5bWxpbmsuYworKysgYi9mcy9hZmZzL3N5bWxpbmsuYwpAQCAtNjYsNyArNjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZmc19zeW1saW5rX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmZnNfc3ltbGlua19hb3BzID0gewogCS5yZWFkcGFnZQk9IGFmZnNfc3ltbGlua19yZWFkcGFnZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jCmluZGV4IDdiYjcxNjguLjY3ZDY2MzQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9maWxlLmMKKysrIGIvZnMvYWZzL2ZpbGUuYwpAQCAtMzUsNyArMzUsNyBAQAogCS5nZXRhdHRyCT0gYWZzX2lub2RlX2dldGF0dHIsCiB9OwogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19mc19hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBhZnNfZmlsZV9yZWFkcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLAogCS5zZXRfcGFnZV9kaXJ0eQk9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCA3MmZlYmRmLi5lODhiM2I2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtNjksNyArNjksNyBAQAogLyoKICAqIGZpbGUuYwogICovCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19mc19hb3BzOwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAKICNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggMDgyMDFmYS4uZmNhZWVhZCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtNzMsNyArNzMsNyBAQAogCS5sb29rdXAJCT0gYmVmc19sb29rdXAsCiB9OwogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZWZzX2FvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZWZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYmVmc19yZWFkcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLAogCS5ibWFwCQk9IGJlZnNfYm1hcCwKQEAgLTMyNSw3ICszMjUsNyBAQAogCWlmICghYmgpIHsKIAkJYmVmc19lcnJvcihzYiwgInVuYWJsZSB0byByZWFkIGlub2RlIGJsb2NrIC0gIgogCQkJICAgImlub2RlID0gJWx1IiwgaW5vZGUtPmlfaW5vKTsKLQkJZ290byB1bmFxdWlyZV9ub25lOworCQlnb3RvIHVuYWNxdWlyZV9ub25lOwogCX0KIAogCXJhd19pbm9kZSA9IChiZWZzX2lub2RlICopIGJoLT5iX2RhdGE7CkBAIC0zMzQsNyArMzM0LDcgQEAKIAogCWlmIChiZWZzX2NoZWNrX2lub2RlKHNiLCByYXdfaW5vZGUsIGlub2RlLT5pX2lubykgIT0gQkVGU19PSykgewogCQliZWZzX2Vycm9yKHNiLCAiQmFkIGlub2RlOiAlbHUiLCBpbm9kZS0+aV9pbm8pOwotCQlnb3RvIHVuYXF1aXJlX2JoOworCQlnb3RvIHVuYWNxdWlyZV9iaDsKIAl9CiAKIAlpbm9kZS0+aV9tb2RlID0gKHVtb2RlX3QpIGZzMzJfdG9fY3B1KHNiLCByYXdfaW5vZGUtPm1vZGUpOwpAQCAtNDAyLDE3ICs0MDIsMTcgQEAKIAkJYmVmc19lcnJvcihzYiwgIklub2RlICVsdSBpcyBub3QgYSByZWd1bGFyIGZpbGUsICIKIAkJCSAgICJkaXJlY3Rvcnkgb3Igc3ltbGluay4gVEhBVCBJUyBXUk9ORyEgQmVGUyBoYXMgbm8gIgogCQkJICAgIm9uIGRpc2sgc3BlY2lhbCBmaWxlcyIsIGlub2RlLT5pX2lubyk7Ci0JCWdvdG8gdW5hcXVpcmVfYmg7CisJCWdvdG8gdW5hY3F1aXJlX2JoOwogCX0KIAogCWJyZWxzZShiaCk7CiAJYmVmc19kZWJ1ZyhzYiwgIjwtLS0gYmVmc19yZWFkX2lub2RlKCkiKTsKIAlyZXR1cm47CiAKLSAgICAgIHVuYXF1aXJlX2JoOgorICAgICAgdW5hY3F1aXJlX2JoOgogCWJyZWxzZShiaCk7CiAKLSAgICAgIHVuYXF1aXJlX25vbmU6CisgICAgICB1bmFjcXVpcmVfbm9uZToKIAltYWtlX2JhZF9pbm9kZShpbm9kZSk7CiAJYmVmc19kZWJ1ZyhzYiwgIjwtLS0gYmVmc19yZWFkX2lub2RlKCkgLSBCYWQgaW5vZGUiKTsKIAlyZXR1cm47CkBAIC03NjEsMTQgKzc2MSwxNCBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJCZUZTKCVzKTogVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcHJpdmF0ZSAiCiAJCSAgICAgICAicG9ydGlvbiBvZiBzdXBlcmJsb2NrLiBCYWlsaW5nLlxuIiwgc2ItPnNfaWQpOwotCQlnb3RvIHVuYXF1aXJlX25vbmU7CisJCWdvdG8gdW5hY3F1aXJlX25vbmU7CiAJfQogCWJlZnNfc2IgPSBCRUZTX1NCKHNiKTsKIAltZW1zZXQoYmVmc19zYiwgMCwgc2l6ZW9mKGJlZnNfc2JfaW5mbykpOwogCiAJaWYgKCFwYXJzZV9vcHRpb25zKChjaGFyICopIGRhdGEsICZiZWZzX3NiLT5tb3VudF9vcHRzKSkgewogCQliZWZzX2Vycm9yKHNiLCAiY2Fubm90IHBhcnNlIG1vdW50IG9wdGlvbnMiKTsKLQkJZ290byB1bmFxdWlyZV9wcml2X3NicDsKKwkJZ290byB1bmFjcXVpcmVfcHJpdl9zYnA7CiAJfQogCiAJYmVmc19kZWJ1ZyhzYiwgIi0tLT4gYmVmc19maWxsX3N1cGVyKCkiKTsKQEAgLTc5NCw3ICs3OTQsNyBAQAogCiAJaWYgKCEoYmggPSBzYl9icmVhZChzYiwgc2JfYmxvY2spKSkgewogCQliZWZzX2Vycm9yKHNiLCAidW5hYmxlIHRvIHJlYWQgc3VwZXJibG9jayIpOwotCQlnb3RvIHVuYXF1aXJlX3ByaXZfc2JwOworCQlnb3RvIHVuYWNxdWlyZV9wcml2X3NicDsKIAl9CiAKIAkvKiBhY2NvdW50IGZvciBvZmZzZXQgb2Ygc3VwZXIgYmxvY2sgb24geDg2ICovCkBAIC04MDksMjAgKzgwOSwyMCBAQAogCX0KIAogCWlmIChiZWZzX2xvYWRfc2Ioc2IsIGRpc2tfc2IpICE9IEJFRlNfT0spCi0JCWdvdG8gdW5hcXVpcmVfYmg7CisJCWdvdG8gdW5hY3F1aXJlX2JoOwogCiAJYmVmc19kdW1wX3N1cGVyX2Jsb2NrKHNiLCBkaXNrX3NiKTsKIAogCWJyZWxzZShiaCk7CiAKIAlpZiAoYmVmc19jaGVja19zYihzYikgIT0gQkVGU19PSykKLQkJZ290byB1bmFxdWlyZV9wcml2X3NicDsKKwkJZ290byB1bmFjcXVpcmVfcHJpdl9zYnA7CiAKIAlpZiggYmVmc19zYi0+bnVtX2Jsb2NrcyA+IH4oKHNlY3Rvcl90KTApICkgewogCQliZWZzX2Vycm9yKHNiLCAiYmxvY2tzIGNvdW50OiAlTHUgIgogCQkJImlzIGxhcmdlciB0aGFuIHRoZSBob3N0IGNhbiB1c2UiLAogCQkJYmVmc19zYi0+bnVtX2Jsb2Nrcyk7Ci0JCWdvdG8gdW5hcXVpcmVfcHJpdl9zYnA7CisJCWdvdG8gdW5hY3F1aXJlX3ByaXZfc2JwOwogCX0KIAogCS8qCkBAIC04MzgsNyArODM4LDcgQEAKIAlpZiAoIXNiLT5zX3Jvb3QpIHsKIAkJaXB1dChyb290KTsKIAkJYmVmc19lcnJvcihzYiwgImdldCByb290IGlub2RlIGZhaWxlZCIpOwotCQlnb3RvIHVuYXF1aXJlX3ByaXZfc2JwOworCQlnb3RvIHVuYWNxdWlyZV9wcml2X3NicDsKIAl9CiAKIAkvKiBsb2FkIG5scyBsaWJyYXJ5ICovCkBAIC04NjAsMTMgKzg2MCwxMyBAQAogCiAJcmV0dXJuIDA7CiAvKioqKioqKioqKioqKioqKiovCi0gICAgICB1bmFxdWlyZV9iaDoKKyAgICAgIHVuYWNxdWlyZV9iaDoKIAlicmVsc2UoYmgpOwogCi0gICAgICB1bmFxdWlyZV9wcml2X3NicDoKKyAgICAgIHVuYWNxdWlyZV9wcml2X3NicDoKIAlrZnJlZShzYi0+c19mc19pbmZvKTsKIAotICAgICAgdW5hcXVpcmVfbm9uZToKKyAgICAgIHVuYWNxdWlyZV9ub25lOgogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtOTI1LDE4ICs5MjUsMTggQEAKIAogCWVyciA9IGJlZnNfaW5pdF9pbm9kZWNhY2hlKCk7CiAJaWYgKGVycikKLQkJZ290byB1bmFxdWlyZV9ub25lOworCQlnb3RvIHVuYWNxdWlyZV9ub25lOwogCiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYmVmc19mc190eXBlKTsKIAlpZiAoZXJyKQotCQlnb3RvIHVuYXF1aXJlX2lub2RlY2FjaGU7CisJCWdvdG8gdW5hY3F1aXJlX2lub2RlY2FjaGU7CiAKIAlyZXR1cm4gMDsKIAotdW5hcXVpcmVfaW5vZGVjYWNoZToKK3VuYWNxdWlyZV9pbm9kZWNhY2hlOgogCWJlZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAKLXVuYXF1aXJlX25vbmU6Cit1bmFjcXVpcmVfbm9uZToKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9iZnMvYmZzLmggYi9mcy9iZnMvYmZzLmgKaW5kZXggOWQ3OTEwMC4uMzE5NzNiYiAxMDA2NDQKLS0tIGEvZnMvYmZzL2Jmcy5oCisrKyBiL2ZzL2Jmcy9iZnMuaApAQCAtNTAsNyArNTAsNyBAQAogLyogZmlsZS5jICovCiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYmZzX2ZpbGVfaW5vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYmZzX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wczsKIAogLyogZGlyLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBiZnNfZGlyX2lub3BzOwpkaWZmIC0tZ2l0IGEvZnMvYmZzL2ZpbGUuYyBiL2ZzL2Jmcy9maWxlLmMKaW5kZXggZDgzY2Q3NC4uM2Q1YWNhMiAxMDA2NDQKLS0tIGEvZnMvYmZzL2ZpbGUuYworKysgYi9mcy9iZnMvZmlsZS5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBiZnNfZ2V0X2Jsb2NrKTsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBiZnNfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYmZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYmZzX3JlYWRwYWdlLAogCS53cml0ZXBhZ2UJPSBiZnNfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggZDA0MzQ0MC4uZjQyZTY0MiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtODQsNyArODQsNyBAQAogCQkubWluX2NvcmVkdW1wCT0gRUxGX0VYRUNfUEFHRVNJWkUKIH07CiAKLSNkZWZpbmUgQkFEX0FERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSA+IFRBU0tfU0laRSkKKyNkZWZpbmUgQkFEX0FERFIoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSA+PSBUQVNLX1NJWkUpCiAKIHN0YXRpYyBpbnQgc2V0X2Jyayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTM5NCw3ICszOTQsNyBAQAogCQkJICogPD0gcF9tZW1zaXplIHNvIGl0J3Mgb25seSBuZWNlc3NhcnkgdG8gY2hlY2sgcF9tZW1zei4KIAkJCSAqLwogCQkJayA9IGxvYWRfYWRkciArIGVwcG50LT5wX3ZhZGRyOwotCQkJaWYgKGsgPiBUQVNLX1NJWkUgfHwKKwkJCWlmIChCQURfQUREUihrKSB8fAogCQkJICAgIGVwcG50LT5wX2ZpbGVzeiA+IGVwcG50LT5wX21lbXN6IHx8CiAJCQkgICAgZXBwbnQtPnBfbWVtc3ogPiBUQVNLX1NJWkUgfHwKIAkJCSAgICBUQVNLX1NJWkUgLSBlcHBudC0+cF9tZW1zeiA8IGspIHsKQEAgLTg4Nyw3ICs4ODcsNyBAQAogCQkgKiBhbGxvd2VkIHRhc2sgc2l6ZS4gTm90ZSB0aGF0IHBfZmlsZXN6IG11c3QgYWx3YXlzIGJlCiAJCSAqIDw9IHBfbWVtc3ogc28gaXQgaXMgb25seSBuZWNlc3NhcnkgdG8gY2hlY2sgcF9tZW1zei4KIAkJICovCi0JCWlmIChrID4gVEFTS19TSVpFIHx8IGVsZl9wcG50LT5wX2ZpbGVzeiA+IGVsZl9wcG50LT5wX21lbXN6IHx8CisJCWlmIChCQURfQUREUihrKSB8fCBlbGZfcHBudC0+cF9maWxlc3ogPiBlbGZfcHBudC0+cF9tZW1zeiB8fAogCQkgICAgZWxmX3BwbnQtPnBfbWVtc3ogPiBUQVNLX1NJWkUgfHwKIAkJICAgIFRBU0tfU0laRSAtIGVsZl9wcG50LT5wX21lbXN6IDwgaykgewogCQkJLyogc2V0X2JyayBjYW4gbmV2ZXIgd29yay4gQXZvaWQgb3ZlcmZsb3dzLiAqLwpAQCAtOTQxLDEwICs5NDEsOSBAQAogCQkJCQkJICAgIGludGVycHJldGVyLAogCQkJCQkJICAgICZpbnRlcnBfbG9hZF9hZGRyKTsKIAkJaWYgKEJBRF9BRERSKGVsZl9lbnRyeSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGxvYWQgaW50ZXJwcmV0ZXIgJS4xMjhzXG4iLAotCQkJCWVsZl9pbnRlcnByZXRlcik7CiAJCQlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7Ci0JCQlyZXR2YWwgPSAtRU5PRVhFQzsgLyogTm9ib2R5IGdldHMgdG8gc2VlIHRoaXMsIGJ1dC4uICovCisJCQlyZXR2YWwgPSBJU19FUlIoKHZvaWQgKillbGZfZW50cnkpID8KKwkJCQkJKGludCllbGZfZW50cnkgOiAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZV9kZW50cnk7CiAJCX0KIAkJcmVsb2NfZnVuY19kZXNjID0gaW50ZXJwX2xvYWRfYWRkcjsKQEAgLTk1NSw4ICs5NTQsOCBAQAogCX0gZWxzZSB7CiAJCWVsZl9lbnRyeSA9IGxvYy0+ZWxmX2V4LmVfZW50cnk7CiAJCWlmIChCQURfQUREUihlbGZfZW50cnkpKSB7Ci0JCQlzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTsKLQkJCXJldHZhbCA9IC1FTk9FWEVDOyAvKiBOb2JvZHkgZ2V0cyB0byBzZWUgdGhpcywgYnV0Li4gKi8KKwkJCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dF9mcmVlX2RlbnRyeTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9mbGF0LmMgYi9mcy9iaW5mbXRfZmxhdC5jCmluZGV4IGM5NGQ1MmUuLmE2MmZkNDAgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9mbGF0LmMKKysrIGIvZnMvYmluZm10X2ZsYXQuYwpAQCAtMTYsNyArMTYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfc29tLmMgYi9mcy9iaW5mbXRfc29tLmMKaW5kZXggMDBhOTFkYy4uMzJiNWQ2MiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X3NvbS5jCisrKyBiL2ZzL2JpbmZtdF9zb20uYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggMDI4ZDlmYi4uMzc1MzQ1NyAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTUsMTQgKzUsMTIgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIEFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPiBTdVNFCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtNzQxLDcgKzczOSw3IEBACiAJaWYgKCFibykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmJkZXYtPmJkX211dGV4LCBCRF9NVVRFWF9QQVJUSVRJT04pOwogCXJlcyA9IGJkX2NsYWltKGJkZXYsIGhvbGRlcik7CiAJaWYgKHJlcyB8fCAhYWRkX2JkX2hvbGRlcihiZGV2LCBibykpCiAJCWZyZWVfYmRfaG9sZGVyKGJvKTsKQEAgLTc2Niw3ICs3NjQsNyBAQAogCWlmICgha29iaikKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgQkRfTVVURVhfUEFSVElUSU9OKTsKIAliZF9yZWxlYXNlKGJkZXYpOwogCWlmICgoYm8gPSBkZWxfYmRfaG9sZGVyKGJkZXYsIGtvYmopKSkKIAkJZnJlZV9iZF9ob2xkZXIoYm8pOwpAQCAtODI0LDYgKzgyMiwyMiBAQAogCiBFWFBPUlRfU1lNQk9MKG9wZW5fYnlfZGV2bnVtKTsKIAorc3RhdGljIGludAorYmxrZGV2X2dldF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGZsYWdzKTsKKworc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9wYXJ0aXRpb25fYnlfZGV2bnVtKGRldl90IGRldiwgdW5zaWduZWQgbW9kZSkKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gYmRnZXQoZGV2KTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgZmxhZ3MgPSBtb2RlICYgRk1PREVfV1JJVEUgPyBPX1JEV1IgOiBPX1JET05MWTsKKwlpZiAoYmRldikKKwkJZXJyID0gYmxrZGV2X2dldF9wYXJ0aXRpb24oYmRldiwgbW9kZSwgZmxhZ3MpOworCXJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBiZGV2OworfQorCitFWFBPUlRfU1lNQk9MKG9wZW5fcGFydGl0aW9uX2J5X2Rldm51bSk7CisKKwogLyoKICAqIFRoaXMgcm91dGluZSBjaGVja3Mgd2hldGhlciBhIHJlbW92YWJsZSBtZWRpYSBoYXMgYmVlbiBjaGFuZ2VkLAogICogYW5kIGludmFsaWRhdGVzIGFsbCBidWZmZXItY2FjaGUtZW50cmllcyBpbiB0aGF0IGNhc2UuIFRoaXMKQEAgLTg3MCw3ICs4ODQsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmRfc2V0X3NpemUpOwogCi1zdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50CitibGtkZXZfZ2V0X3dob2xlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBmbGFncyk7CisKK3N0YXRpYyBpbnQKK2RvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IE5VTEw7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CkBAIC04ODcsNyArOTA1LDggQEAKIAl9CiAJb3duZXIgPSBkaXNrLT5mb3BzLT5vd25lcjsKIAotCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfbXV0ZXgsIHN1YmNsYXNzKTsKKwogCWlmICghYmRldi0+YmRfb3BlbmVycykgewogCQliZGV2LT5iZF9kaXNrID0gZGlzazsKIAkJYmRldi0+YmRfY29udGFpbnMgPSBiZGV2OwpAQCAtOTE0LDExICs5MzMsMTEgQEAKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlpZiAoIXdob2xlKQogCQkJCWdvdG8gb3V0X2ZpcnN0OwotCQkJcmV0ID0gYmxrZGV2X2dldCh3aG9sZSwgZmlsZS0+Zl9tb2RlLCBmaWxlLT5mX2ZsYWdzKTsKKwkJCXJldCA9IGJsa2Rldl9nZXRfd2hvbGUod2hvbGUsIGZpbGUtPmZfbW9kZSwgZmlsZS0+Zl9mbGFncyk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gb3V0X2ZpcnN0OwogCQkJYmRldi0+YmRfY29udGFpbnMgPSB3aG9sZTsKLQkJCW11dGV4X2xvY2soJndob2xlLT5iZF9tdXRleCk7CisJCQltdXRleF9sb2NrX25lc3RlZCgmd2hvbGUtPmJkX211dGV4LCBCRF9NVVRFWF9XSE9MRSk7CiAJCQl3aG9sZS0+YmRfcGFydF9jb3VudCsrOwogCQkJcCA9IGRpc2stPnBhcnRbcGFydCAtIDFdOwogCQkJYmRldi0+YmRfaW5vZGUtPmlfZGF0YS5iYWNraW5nX2Rldl9pbmZvID0KQEAgLTk0Niw3ICs5NjUsOCBAQAogCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkKQogCQkJCXJlc2Nhbl9wYXJ0aXRpb25zKGJkZXYtPmJkX2Rpc2ssIGJkZXYpOwogCQl9IGVsc2UgewotCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfY29udGFpbnMtPmJkX211dGV4KTsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgsCisJCQkJCSAgQkRfTVVURVhfUEFSVElUSU9OKTsKIAkJCWJkZXYtPmJkX2NvbnRhaW5zLT5iZF9wYXJ0X2NvdW50Kys7CiAJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCk7CiAJCX0KQEAgLTk4NywxMSArMTAwNyw0OSBAQAogCWZha2VfZmlsZS5mX2RlbnRyeSA9ICZmYWtlX2RlbnRyeTsKIAlmYWtlX2RlbnRyeS5kX2lub2RlID0gYmRldi0+YmRfaW5vZGU7CiAKLQlyZXR1cm4gZG9fb3BlbihiZGV2LCAmZmFrZV9maWxlKTsKKwlyZXR1cm4gZG9fb3BlbihiZGV2LCAmZmFrZV9maWxlLCBCRF9NVVRFWF9OT1JNQUwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGJsa2Rldl9nZXQpOwogCitzdGF0aWMgaW50CitibGtkZXZfZ2V0X3dob2xlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBmbGFncykKK3sKKwkvKgorCSAqIFRoaXMgY3JvY2tsb2FkIGlzIGR1ZSB0byBiYWQgY2hvaWNlIG9mIC0+b3BlbigpIHR5cGUuCisJICogSXQgd2lsbCBnbyBhd2F5LgorCSAqIEZvciBub3csIGJsb2NrIGRldmljZSAtPm9wZW4oKSByb3V0aW5lIG11c3QgX25vdF8KKwkgKiBleGFtaW5lIGFueXRoaW5nIGluICdpbm9kZScgYXJndW1lbnQgZXhjZXB0IC0+aV9yZGV2LgorCSAqLworCXN0cnVjdCBmaWxlIGZha2VfZmlsZSA9IHt9OworCXN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnkgPSB7fTsKKwlmYWtlX2ZpbGUuZl9tb2RlID0gbW9kZTsKKwlmYWtlX2ZpbGUuZl9mbGFncyA9IGZsYWdzOworCWZha2VfZmlsZS5mX2RlbnRyeSA9ICZmYWtlX2RlbnRyeTsKKwlmYWtlX2RlbnRyeS5kX2lub2RlID0gYmRldi0+YmRfaW5vZGU7CisKKwlyZXR1cm4gZG9fb3BlbihiZGV2LCAmZmFrZV9maWxlLCBCRF9NVVRFWF9XSE9MRSk7Cit9CisKK3N0YXRpYyBpbnQKK2Jsa2Rldl9nZXRfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBmbGFncykKK3sKKwkvKgorCSAqIFRoaXMgY3JvY2tsb2FkIGlzIGR1ZSB0byBiYWQgY2hvaWNlIG9mIC0+b3BlbigpIHR5cGUuCisJICogSXQgd2lsbCBnbyBhd2F5LgorCSAqIEZvciBub3csIGJsb2NrIGRldmljZSAtPm9wZW4oKSByb3V0aW5lIG11c3QgX25vdF8KKwkgKiBleGFtaW5lIGFueXRoaW5nIGluICdpbm9kZScgYXJndW1lbnQgZXhjZXB0IC0+aV9yZGV2LgorCSAqLworCXN0cnVjdCBmaWxlIGZha2VfZmlsZSA9IHt9OworCXN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnkgPSB7fTsKKwlmYWtlX2ZpbGUuZl9tb2RlID0gbW9kZTsKKwlmYWtlX2ZpbGUuZl9mbGFncyA9IGZsYWdzOworCWZha2VfZmlsZS5mX2RlbnRyeSA9ICZmYWtlX2RlbnRyeTsKKwlmYWtlX2RlbnRyeS5kX2lub2RlID0gYmRldi0+YmRfaW5vZGU7CisKKwlyZXR1cm4gZG9fb3BlbihiZGV2LCAmZmFrZV9maWxlLCBCRF9NVVRFWF9QQVJUSVRJT04pOworfQorCiBzdGF0aWMgaW50IGJsa2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKQEAgLTEwMDcsNyArMTA2NSw3IEBACiAKIAliZGV2ID0gYmRfYWNxdWlyZShpbm9kZSk7CiAKLQlyZXMgPSBkb19vcGVuKGJkZXYsIGZpbHApOworCXJlcyA9IGRvX29wZW4oYmRldiwgZmlscCwgQkRfTVVURVhfTk9STUFMKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCkBAIC0xMDIxLDEzICsxMDc5LDEzIEBACiAJcmV0dXJuIHJlczsKIH0KIAotaW50IGJsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3N0YXRpYyBpbnQgX19ibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKmJkX2lub2RlID0gYmRldi0+YmRfaW5vZGU7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCi0JbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgc3ViY2xhc3MpOwogCWxvY2tfa2VybmVsKCk7CiAJaWYgKCEtLWJkZXYtPmJkX29wZW5lcnMpIHsKIAkJc3luY19ibG9ja2RldihiZGV2KTsKQEAgLTEwMzcsNyArMTA5NSw4IEBACiAJCWlmIChkaXNrLT5mb3BzLT5yZWxlYXNlKQogCQkJcmV0ID0gZGlzay0+Zm9wcy0+cmVsZWFzZShiZF9pbm9kZSwgTlVMTCk7CiAJfSBlbHNlIHsKLQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfY29udGFpbnMtPmJkX211dGV4KTsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCwKKwkJCQkgIHN1YmNsYXNzICsgMSk7CiAJCWJkZXYtPmJkX2NvbnRhaW5zLT5iZF9wYXJ0X2NvdW50LS07CiAJCW11dGV4X3VubG9jaygmYmRldi0+YmRfY29udGFpbnMtPmJkX211dGV4KTsKIAl9CkBAIC0xMDUzLDkgKzExMTIsOCBAQAogCQl9CiAJCWJkZXYtPmJkX2Rpc2sgPSBOVUxMOwogCQliZGV2LT5iZF9pbm9kZS0+aV9kYXRhLmJhY2tpbmdfZGV2X2luZm8gPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwotCQlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgewotCQkJYmxrZGV2X3B1dChiZGV2LT5iZF9jb250YWlucyk7Ci0JCX0KKwkJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpCisJCQlfX2Jsa2Rldl9wdXQoYmRldi0+YmRfY29udGFpbnMsIHN1YmNsYXNzICsgMSk7CiAJCWJkZXYtPmJkX2NvbnRhaW5zID0gTlVMTDsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMTA2NCw4ICsxMTIyLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGJsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gX19ibGtkZXZfcHV0KGJkZXYsIEJEX01VVEVYX05PUk1BTCk7Cit9CisKIEVYUE9SVF9TWU1CT0woYmxrZGV2X3B1dCk7CiAKK2ludCBibGtkZXZfcHV0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgQkRfTVVURVhfUEFSVElUSU9OKTsKK30KKworRVhQT1JUX1NZTUJPTChibGtkZXZfcHV0X3BhcnRpdGlvbik7CisKIHN0YXRpYyBpbnQgYmxrZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IElfQkRFVihmaWxwLT5mX21hcHBpbmctPmhvc3QpOwpAQCAtMTA5NSw3ICsxMTY1LDcgQEAKIAlyZXR1cm4gYmxrZGV2X2lvY3RsKGZpbGUtPmZfbWFwcGluZy0+aG9zdCwgZmlsZSwgY21kLCBhcmcpOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzID0gewogCS5yZWFkcGFnZQk9IGJsa2Rldl9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gYmxrZGV2X3dyaXRlcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCBmMjNiYjY0Li4zNjYwZGNiIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMTgsNyArMTgsNiBAQAogICogYXN5bmMgYnVmZmVyIGZsdXNoaW5nLCAxOTk5IEFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC04NTIsNyArODUxLDcgQEAKIAkJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJCWlmIChwYWdlLT5tYXBwaW5nKSB7CS8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8KIAkJCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKQotCQkJCWluY19wYWdlX3N0YXRlKG5yX2RpcnR5KTsKKwkJCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7CiAJCQlyYWRpeF90cmVlX3RhZ19zZXQoJm1hcHBpbmctPnBhZ2VfdHJlZSwKIAkJCQkJCXBhZ2VfaW5kZXgocGFnZSksCiAJCQkJCQlQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKQEAgLTI1OTgsNyArMjU5Nyw3IEBACiAJdW5zaWduZWQgb2Zmc2V0ID0gZnJvbSAmIChQQUdFX0NBQ0hFX1NJWkUtMSk7CiAJdW5zaWduZWQgdG87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHMgPSBtYXBwaW5nLT5hX29wczsKKwljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wcyA9IG1hcHBpbmctPmFfb3BzOwogCWNoYXIgKmthZGRyOwogCWludCByZXQgPSAwOwogCmRpZmYgLS1naXQgYS9mcy9jaGFyX2Rldi5jIGIvZnMvY2hhcl9kZXYuYwppbmRleCBmMzQxOGY3Li5hNGNiYzY3IDEwMDY0NAotLS0gYS9mcy9jaGFyX2Rldi5jCisrKyBiL2ZzL2NoYXJfZGV2LmMKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNCw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CmRpZmYgLS1naXQgYS9mcy9jaWZzL2FzbjEuYyBiL2ZzL2NpZnMvYXNuMS5jCmluZGV4IDAzMWNkZjIuLjJlNzU4ODMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvYXNuMS5jCisrKyBiL2ZzL2NpZnMvYXNuMS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGE2Mzg0ZDguLjhmNzVjNmYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtMzIsOCArMzIsOCBAQAogI2RlZmluZSBUUlVFIDEKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wc19zbWFsbGJ1ZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzX3NtYWxsYnVmOwogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlciBibG9jayBvcGVyYXRpb25zICovCiBleHRlcm4gc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2lmc19zdXBlcl9vcHM7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGU5YzE1NzMuLjk0NGQyYjkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zMjQsNyArMzI0LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIFRyeSB0byByZWFxdWlyZSBieXRlIHJhbmdlIGxvY2tzIHRoYXQgd2VyZSByZWxlYXNlZCB3aGVuIHNlc3Npb24gKi8KKy8qIFRyeSB0byByZWFjcXVpcmUgYnl0ZSByYW5nZSBsb2NrcyB0aGF0IHdlcmUgcmVsZWFzZWQgd2hlbiBzZXNzaW9uICovCiAvKiB0byBzZXJ2ZXIgd2FzIGxvc3QgKi8KIHN0YXRpYyBpbnQgY2lmc19yZWxvY2tfZmlsZShzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjaWZzRmlsZSkKIHsKQEAgLTE5NDIsNyArMTk0Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wcyA9IHsKIAkucmVhZHBhZ2UgPSBjaWZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMgPSBjaWZzX3JlYWRwYWdlcywKIAkud3JpdGVwYWdlID0gY2lmc193cml0ZXBhZ2UsCkBAIC0xOTU5LDcgKzE5NTksNyBAQAogICogY29udGFpbiB0aGUgaGVhZGVyIHBsdXMgb25lIGNvbXBsZXRlIHBhZ2Ugb2YgZGF0YS4gIE90aGVyd2lzZSwgd2UgbmVlZAogICogdG8gbGVhdmUgY2lmc19yZWFkcGFnZXMgb3V0IG9mIHRoZSBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMuCiAgKi8KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wc19zbWFsbGJ1ZiA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY2lmc19hZGRyX29wc19zbWFsbGJ1ZiA9IHsKIAkucmVhZHBhZ2UgPSBjaWZzX3JlYWRwYWdlLAogCS53cml0ZXBhZ2UgPSBjaWZzX3dyaXRlcGFnZSwKIAkud3JpdGVwYWdlcyA9IGNpZnNfd3JpdGVwYWdlcywKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCA3Y2FlZThkLi44MDNhYWNmIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpAQCAtMzY1LDIyICszNjQsMTIgQEAKIAkJZXJyID0gUFRSX0VSUihjb2RhX3BzZGV2X2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0JCQotCWRldmZzX21rX2RpciAoImNvZGEiKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPREFERVZTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPREFERVZTOyBpKyspCiAJCWNsYXNzX2RldmljZV9jcmVhdGUoY29kYV9wc2Rldl9jbGFzcywgTlVMTCwKIAkJCQlNS0RFVihDT0RBX1BTREVWX01BSk9SLGkpLCBOVUxMLCAiY2ZzJWQiLCBpKTsKLQkJZXJyID0gZGV2ZnNfbWtfY2RldihNS0RFVihDT0RBX1BTREVWX01BSk9SLCBpKSwKLQkJCQlTX0lGQ0hSfFNfSVJVU1J8U19JV1VTUiwgImNvZGEvJWQiLCBpKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0X2NsYXNzOwotCX0KIAljb2RhX3N5c2N0bF9pbml0KCk7CiAJZ290byBvdXQ7CiAKLW91dF9jbGFzczoKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPREFERVZTOyBpKyspIAotCQljbGFzc19kZXZpY2VfZGVzdHJveShjb2RhX3BzZGV2X2NsYXNzLCBNS0RFVihDT0RBX1BTREVWX01BSk9SLCBpKSk7Ci0JY2xhc3NfZGVzdHJveShjb2RhX3BzZGV2X2NsYXNzKTsKIG91dF9jaHJkZXY6CiAJdW5yZWdpc3Rlcl9jaHJkZXYoQ09EQV9QU0RFVl9NQUpPUiwgImNvZGEiKTsKIG91dDoKQEAgLTQxOSwxMiArNDA4LDkgQEAKIAl9CiAJcmV0dXJuIDA7CiBvdXQ6Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9DT0RBREVWUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9DT0RBREVWUzsgaSsrKQogCQljbGFzc19kZXZpY2VfZGVzdHJveShjb2RhX3BzZGV2X2NsYXNzLCBNS0RFVihDT0RBX1BTREVWX01BSk9SLCBpKSk7Ci0JCWRldmZzX3JlbW92ZSgiY29kYS8lZCIsIGkpOwotCX0KIAljbGFzc19kZXN0cm95KGNvZGFfcHNkZXZfY2xhc3MpOwotCWRldmZzX3JlbW92ZSgiY29kYSIpOwogCXVucmVnaXN0ZXJfY2hyZGV2KENPREFfUFNERVZfTUFKT1IsICJjb2RhIik7CiAJY29kYV9zeXNjdGxfY2xlYW4oKTsKIG91dDE6CkBAIC00NDEsMTIgKzQyNyw5IEBACiAgICAgICAgIGlmICggZXJyICE9IDAgKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKCJjb2RhOiBmYWlsZWQgdG8gdW5yZWdpc3RlciBmaWxlc3lzdGVtXG4iKTsKICAgICAgICAgfQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09EQURFVlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09EQURFVlM7IGkrKykKIAkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koY29kYV9wc2Rldl9jbGFzcywgTUtERVYoQ09EQV9QU0RFVl9NQUpPUiwgaSkpOwotCQlkZXZmc19yZW1vdmUoImNvZGEvJWQiLCBpKTsKLQl9CiAJY2xhc3NfZGVzdHJveShjb2RhX3BzZGV2X2NsYXNzKTsKLQlkZXZmc19yZW1vdmUoImNvZGEiKTsKIAl1bnJlZ2lzdGVyX2NocmRldihDT0RBX1BTREVWX01BSk9SLCAiY29kYSIpOwogCWNvZGFfc3lzY3RsX2NsZWFuKCk7CiAJY29kYV9kZXN0cm95X2lub2RlY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvc3ltbGluay5jIGIvZnMvY29kYS9zeW1saW5rLmMKaW5kZXggYjM1ZTViYi4uNzZlMDBhNiAxMDA2NDQKLS0tIGEvZnMvY29kYS9zeW1saW5rLmMKKysrIGIvZnMvY29kYS9zeW1saW5rLmMKQEAgLTUwLDYgKzUwLDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY29kYV9zeW1saW5rX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNvZGFfc3ltbGlua19hb3BzID0gewogCS5yZWFkcGFnZQk9IGNvZGFfc3ltbGlua19maWxsZXIsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9zeXNjdGwuYyBiL2ZzL2NvZGEvc3lzY3RsLmMKaW5kZXggZjBiMTA3NS4uMWM4MmU5YSAxMDA2NDQKLS0tIGEvZnMvY29kYS9zeXNjdGwuYworKysgYi9mcy9jb2RhL3N5c2N0bC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggZDhlY2ZlZC4uNDA2M2E5MyAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIGlvY3Rscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQ0LDcgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9sb29wLmg+CiAjaW5jbHVkZSA8bGludXgvYXV0b19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2F1dG9fZnM0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggMjA3ZjgwMC4uZGYwMjU0NSAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZGlyLmMKKysrIGIvZnMvY29uZmlnZnMvZGlyLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBzZDsKIAogCXNkID0gZC0+ZF9mc2RhdGE7Ci0gCWxpc3RfZGVsX2luaXQoJnNkLT5zX3NpYmxpbmcpOworCWxpc3RfZGVsX2luaXQoJnNkLT5zX3NpYmxpbmcpOwogCWNvbmZpZ2ZzX3B1dChzZCk7CiAJaWYgKGQtPmRfaW5vZGUpCiAJCXNpbXBsZV9ybWRpcihwYXJlbnQtPmRfaW5vZGUsZCk7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAogCQkJcmV0ID0gY29uZmlnZnNfZGV0YWNoX3ByZXAoc2QtPnNfZGVudHJ5KTsKIAkJCWlmICghcmV0KQotCQkJICAgICAgIAljb250aW51ZTsKKwkJCQljb250aW51ZTsKIAkJfSBlbHNlCiAJCQlyZXQgPSAtRU5PVEVNUFRZOwogCkBAIC05MzEsNyArOTMxLDcgQEAKIAogCW5ld19kZW50cnkgPSBsb29rdXBfb25lX2xlbihuZXdfbmFtZSwgcGFyZW50LCBzdHJsZW4obmV3X25hbWUpKTsKIAlpZiAoIUlTX0VSUihuZXdfZGVudHJ5KSkgewotICAJCWlmICghbmV3X2RlbnRyeS0+ZF9pbm9kZSkgeworCQlpZiAoIW5ld19kZW50cnktPmRfaW5vZGUpIHsKIAkJCWVycm9yID0gY29uZmlnX2l0ZW1fc2V0X25hbWUoaXRlbSwgIiVzIiwgbmV3X25hbWUpOwogCQkJaWYgKCFlcnJvcikgewogCQkJCWRfYWRkKG5ld19kZW50cnksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvaW5vZGUuYyBiL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKaW5kZXggYzE1M2JkOS4uZTE0NDg4YyAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvaW5vZGUuYworKysgYi9mcy9jb25maWdmcy9pbm9kZS5jCkBAIC0zOCw3ICszOCw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBjb25maWdmc19zYjsKIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY29uZmlnZnNfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gc2ltcGxlX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gc2ltcGxlX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IHNpbXBsZV9jb21taXRfd3JpdGUKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwppbmRleCBlNTUxMmUyLi5mYjY1ZTA4IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmMKKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCkBAIC02Niw3ICs2Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2xpbmsoc3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbSwKLSAJCSAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCisJCSAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqdGFyZ2V0X3NkID0gaXRlbS0+Y2lfZGVudHJ5LT5kX2ZzZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9pbm9kZS5jIGIvZnMvY3JhbWZzL2lub2RlLmMKaW5kZXggYzQ1ZDczOC4uMjIzYzA0MyAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTMwLDcgKzMwLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjcmFtZnNfb3BzOwogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNyYW1mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNyYW1mc19kaXJlY3Rvcnlfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNyYW1mc19hb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY3JhbWZzX2FvcHM7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVhZF9tdXRleCk7CiAKQEAgLTUwMSw3ICs1MDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjcmFtZnNfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNyYW1mc19hb3BzID0gewogCS5yZWFkcGFnZSA9IGNyYW1mc19yZWFkcGFnZQogfTsKIApkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA0OGI0NGE3Li4xYjRhM2EzIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMTQsNyArMTQsNiBAQAogICogdGhlIGRjYWNoZSBlbnRyeSBpcyBkZWxldGVkIG9yIGdhcmJhZ2UgY29sbGVjdGVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0zOSw3ICszOCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlKTsKIAogIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkY2FjaGVfbG9jayk7Ci1zdGF0aWMgc2VxbG9ja190IHJlbmFtZV9sb2NrIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0gU0VRTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU0VRTE9DSyhyZW5hbWVfbG9jayk7CiAKIEVYUE9SVF9TWU1CT0woZGNhY2hlX2xvY2spOwogCkBAIC0xMzQwLDEwICsxMzM5LDEwIEBACiAJICovCiAJaWYgKHRhcmdldCA8IGRlbnRyeSkgewogCQlzcGluX2xvY2soJnRhcmdldC0+ZF9sb2NrKTsKLQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCXNwaW5fbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCXNwaW5fbG9jaygmdGFyZ2V0LT5kX2xvY2spOworCQlzcGluX2xvY2tfbmVzdGVkKCZ0YXJnZXQtPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwogCX0KIAogCS8qIE1vdmUgdGhlIGRlbnRyeSB0byB0aGUgdGFyZ2V0IGhhc2ggcXVldWUsIGlmIG9uIGRpZmZlcmVudCBidWNrZXQgKi8KZGlmZiAtLWdpdCBhL2ZzL2Rjb29raWVzLmMgYi9mcy9kY29va2llcy5jCmluZGV4IDg3NDkzMzkuLjBjNGIwNjcgMTAwNjQ0Ci0tLSBhL2ZzL2Rjb29raWVzLmMKKysrIGIvZnMvZGNvb2tpZXMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogdG8gdGhlIHBhaXIgYW5kIGNhbiBiZSBsb29rZWQgdXAgZnJvbSB1c2Vyc3BhY2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9maWxlLmMgYi9mcy9kZWJ1Z2ZzL2ZpbGUuYwppbmRleCA2NmE1MDU0Li4zOTY0MGZkIDEwMDY0NAotLS0gYS9mcy9kZWJ1Z2ZzL2ZpbGUuYworKysgYi9mcy9kZWJ1Z2ZzL2ZpbGUuYwpAQCAtMTMsNyArMTMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2lub2RlLmMgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKaW5kZXggNmZhMWUwNC4uZThhZTMwNCAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9pbm9kZS5jCisrKyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwpAQCAtMTYsNyArMTYsNiBAQAogLyogdW5jb21tZW50IHRvIGdldCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtLCBhaCB0aGUgaXJvbnkuICovCiAvKiAjZGVmaW5lIERFQlVHICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CmRpZmYgLS1naXQgYS9mcy9kZXZmcy9NYWtlZmlsZSBiL2ZzL2RldmZzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGQ4ZDEyLi4wMDAwMDAwCi0tLSBhL2ZzL2RldmZzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgbGludXggZGV2ZnMtZmlsZXN5c3RlbSByb3V0aW5lcy4KLSMKLQotb2JqLSQoQ09ORklHX0RFVkZTX0ZTKSArPSBkZXZmcy5vCi0KLWRldmZzLW9ianMgOj0gYmFzZS5vIHV0aWwubwotCmRpZmYgLS1naXQgYS9mcy9kZXZmcy9iYXNlLmMgYi9mcy9kZXZmcy9iYXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYTk3ZjEuLjAwMDAwMDAKLS0tIGEvZnMvZGV2ZnMvYmFzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjgzNiArMCwwIEBACi0vKiAgZGV2ZnMgKERldmljZSBGaWxlU3lzdGVtKSBkcml2ZXIuCi0KLSAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMiAgUmljaGFyZCBHb29jaAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAgICBSaWNoYXJkIEdvb2NoIG1heSBiZSByZWFjaGVkIGJ5IGVtYWlsIGF0ICByZ29vY2hAYXRuZi5jc2lyby5hdQotICAgIFRoZSBwb3N0YWwgYWRkcmVzcyBpczoKLSAgICAgIFJpY2hhcmQgR29vY2gsIGMvbyBBVE5GLCBQLiBPLiBCb3ggNzYsIEVwcGluZywgTi5TLlcuLCAyMTIxLCBBdXN0cmFsaWEuCi0KLSAgICBDaGFuZ2VMb2cKLQotICAgIDE5OTgwMTEwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBPcmlnaW5hbCB2ZXJzaW9uLgotICB2MC4xCi0gICAgMTk5ODAxMTEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENyZWF0ZWQgcGVyLWZzIGlub2RlIHRhYmxlIHJhdGhlciB0aGFuIHVzaW5nIGlub2RlLT51LmdlbmVyaWNfaXAKLSAgdjAuMgotICAgIDE5OTgwMTExICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBDcmVhdGVkIC5lcG9jaCBpbm9kZSB3aGljaCBoYXMgYSBjdGltZSBvZiAwLgotCSAgICAgICBGaXhlZCBsb3NzIG9mIG5hbWVkIHBpcGVzIHdoZW4gZGVudHJpZXMgbG9zdC4KLQkgICAgICAgRml4ZWQgbG9zcyBvZiBpbm9kZSBkYXRhIHdoZW4gZGV2ZnNfcmVnaXN0ZXIoKSBmb2xsb3dzIG1rbm9kKCkuCi0gIHYwLjMKLSAgICAxOTk4MDExMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRml4IGZvciB3aGVuIGNvbXBpbGluZyB3aXRoIENPTkZJR19LRVJORUxELgotICAgIDE5OTgwMTEyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBGaXggZm9yIHJlYWRkaXIoKSB3aGljaCBzb21ldGltZXMgZGlkbid0IHNob3cgZW50cmllcy4KLQkgICAgICAgQWRkZWQgPDx0b2xlcmFudD4+IG9wdGlvbiB0byA8ZGV2ZnNfcmVnaXN0ZXI+LgotICB2MC40Ci0gICAgMTk5ODAxMTMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENyZWF0ZWQgPGRldmZzX2ZpbGxfZmlsZT4gZnVuY3Rpb24uCi0gIHYwLjUKLSAgICAxOTk4MDExNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQWRkZWQgc3ViZGlyZWN0b3J5IHN1cHBvcnQuIE1ham9yIHJlc3RydWN0dXJpbmcuCi0gICAgMTk5ODAxMTYgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEZpeGVkIDxmaW5kX2J5X2Rldj4gdG8gbm90IHNlYXJjaCBtYWpvcj0wLG1pbm9yPTAuCi0JICAgICAgIEFkZGVkIHN5bWxpbmsgc3VwcG9ydC4KLSAgdjAuNgotICAgIDE5OTgwMTIwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBDcmVhdGVkIDxkZXZmc19ta19kaXI+IGZ1bmN0aW9uIGFuZCBzdXBwb3J0IGRpcmVjdG9yeSB1bnJlZ2lzdGVyCi0gICAgMTk5ODAxMjAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEF1dG8tb3duZXJzaGlwIHVzZXMgcmVhbCB1aWQvZ2lkIHJhdGhlciB0aGFuIGVmZmVjdGl2ZSB1aWQvZ2lkLgotICB2MC43Ci0gICAgMTk5ODAxMjEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIFN1cHBvcnRlZCBjcmVhdGlvbiBvZiBzb2NrZXRzLgotICB2MC44Ci0gICAgMTk5ODAxMjIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEFkZGVkIERFVkZTX0ZMX0hJREVfVU5SRUcgZmxhZy4KLQkgICAgICAgSW50ZXJmYWNlIGNoYW5nZSB0byA8ZGV2ZnNfbWtfc3ltbGluaz4uCi0gICAgICAgICAgICAgICBDcmVhdGVkIDxkZXZmc19zeW1saW5rPiB0byBzdXBwb3J0IHN5bWxpbmsoMikuCi0gIHYwLjkKLSAgICAxOTk4MDEyMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQWRkZWQgY2hlY2sgdG8gPGRldmZzX2ZpbGxfZmlsZT4gdG8gY2hlY2sgaW5vZGUgaXMgaW4gZGV2ZnMuCi0JICAgICAgIEFkZGVkIG9wdGlvbmFsIHRyYXZlcnNhbCBvZiBzeW1saW5rcy4KLSAgdjAuMTAKLSAgICAxOTk4MDEyNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2ZsYWdzPiBhbmQgPGRldmZzX3NldF9mbGFncz4uCi0gIHYwLjExCi0gICAgMTk5ODAxMjUgICBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSAgICAgICAgICAgICAgIENyZWF0ZWQgPGRldmZzX2ZpbmRfaGFuZGxlPi4KLSAgICAxOTk4MDEyNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQWxsb3cgcmVtb3ZhbCBvZiBzeW1saW5rcy4KLSAgdjAuMTIKLSAgICAxOTk4MDEyNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfc2V0X3N5bWxpbmtfZGVzdGluYXRpb24+LgotICAgIDE5OTgwMTI2ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBNb3ZlZCBERVZGU19TVVBFUl9NQUdJQyBpbnRvIGhlYWRlciBmaWxlLgotCSAgICAgICBBZGRlZCBERVZGU19GTF9ISURFIGZsYWcuCi0JICAgICAgIENyZWF0ZWQgPGRldmZzX2dldF9tYWpfbWluPi4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2hhbmRsZV9mcm9tX2lub2RlPi4KLQkgICAgICAgRml4ZWQgbWlub3IgYnVnIGluIDxmaW5kX2J5X2Rldj4uCi0gICAgMTk5ODAxMjcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ2hhbmdlZCBpbnRlcmZhY2UgdG8gPGZpbmRfYnlfZGV2PiwgPGZpbmRfZW50cnk+LAotCSAgICAgICA8ZGV2ZnNfdW5yZWdpc3Rlcj4sIDxkZXZmc19maWxsX2ZpbGU+IGFuZCA8ZGV2ZnNfZmluZF9oYW5kbGU+LgotCSAgICAgICBGaXhlZCBpbm9kZSB0aW1lcyB3aGVuIHN5bWxpbmsgY3JlYXRlZCB3aXRoIHN5bWxpbmsoMikuCi0gIHYwLjEzCi0gICAgMTk5ODAxMjkgICBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSAgICAgICAgICAgICAgIEV4cG9ydGVkIDxkZXZmc19zZXRfc3ltbGlua19kZXN0aW5hdGlvbj4sIDxkZXZmc19nZXRfbWFqX21pbj4KLQkgICAgICAgYW5kIDxkZXZmc19nZXRfaGFuZGxlX2Zyb21faW5vZGU+LgotICAgIDE5OTgwMTI5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENyZWF0ZWQgPGRldmZzX3VubGluaz4gdG8gc3VwcG9ydCB1bmxpbmsoMikuCi0gIHYwLjE0Ci0gICAgMTk5ODAxMjkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQga2VybmVsZCBzdXBwb3J0IGZvciBlbnRyaWVzIGluIGRldmZzIHN1YmRpcmVjdG9yaWVzLgotICAgIDE5OTgwMTMwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEJ1Z2ZpeGVzIGluIDxjYWxsX2tlcm5lbGQ+LgotICB2MC4xNQotICAgIDE5OTgwMjA3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENhbGwga2VybmVsZCB3aGVuIGxvb2tpbmcgdXAgdW5yZWdpc3RlcmVkIGVudHJpZXMuCi0gIHYwLjE2Ci0gICAgMTk5ODAzMjYgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgTW9kaWZpZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19maW5kX2hhbmRsZT4gZm9yIHN5bWxpbmsgdHJhdmVyc2FsLgotICB2MC4xNwotICAgIDE5OTgwMzMxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEZpeGVkIHBlcnNpc3RlbmNlIGJ1ZyB3aXRoIGRldmljZSBudW1iZXJzIGZvciBtYW51YWxseSBjcmVhdGVkCi0JICAgICAgIGRldmljZSBmaWxlcy4KLQkgICAgICAgRml4ZWQgcHJvYmxlbSB3aXRoIHJlY3JlYXRpbmcgc3ltbGlua3Mgd2l0aCBkaWZmZXJlbnQgY29udGVudC4KLSAgdjAuMTgKLSAgICAxOTk4MDQwMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDaGFuZ2VkIHRvIENPTkZJR19LTU9ELgotCSAgICAgICBIaWRlIGVudHJpZXMgd2hpY2ggYXJlIG1hbnVhbGx5IHVubGlua2VkLgotCSAgICAgICBBbHdheXMgaW52YWxpZGF0ZSBkZXZmcyBkZW50cnkgY2FjaGUgd2hlbiByZWdpc3RlcmluZyBlbnRyaWVzLgotCSAgICAgICBDcmVhdGVkIDxkZXZmc19ybWRpcj4gdG8gc3VwcG9ydCBybWRpcigyKS4KLQkgICAgICAgRW5zdXJlIGRpcmVjdG9yaWVzIGNyZWF0ZWQgYnkgPGRldmZzX21rX2Rpcj4gYXJlIHZpc2libGUuCi0gIHYwLjE5Ci0gICAgMTk5ODA0MDIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgSW52YWxpZGF0ZSBkZXZmcyBkZW50cnkgY2FjaGUgd2hlbiBtYWtpbmcgZGlyZWN0b3JpZXMuCi0JICAgICAgIEludmFsaWRhdGUgZGV2ZnMgZGVudHJ5IGNhY2hlIHdoZW4gcmVtb3ZpbmcgZW50cmllcy4KLQkgICAgICAgRml4ZWQgcGVyc2lzdGVuY2UgYnVnIHdpdGggZmlmb3MuCi0gIHYwLjIwCi0gICAgMTk5ODA0MjEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUHJpbnQgcHJvY2VzcyBjb21tYW5kIHdoZW4gZGVidWdnaW5nIGtlcm5lbGQva21vZC4KLQkgICAgICAgQWRkZWQgZGVidWdnaW5nIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyL2NoYW5nZSBvcGVyYXRpb25zLgotICAgIDE5OTgwNDIyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkICJkZXZmcz0iIGJvb3Qgb3B0aW9ucy4KLSAgdjAuMjEKLSAgICAxOTk4MDQyNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBObyBsb25nZXIgbG9jay91bmxvY2sgc3VwZXJibG9jayBpbiA8ZGV2ZnNfcHV0X3N1cGVyPi4KLQkgICAgICAgRHJvcCBuZWdhdGl2ZSBkZW50cmllcyB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkLgotCSAgICAgICBNYW5hZ2UgZGNhY2hlIG1vcmUgZWZmaWNpZW50bHkuCi0gIHYwLjIyCi0gICAgMTk5ODA0MjcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgREVWRlNfRkxfQVVUT19ERVZOVU0gZmxhZy4KLSAgdjAuMjMKLSAgICAxOTk4MDQzMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBObyBsb25nZXIgc2V0IHVubmVjZXNzYXJ5IG1ldGhvZHMuCi0gIHYwLjI0Ci0gICAgMTk5ODA1MDQgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgUElEIGRpc3BsYXkgdG8gPGNhbGxfa2VybmVsZD4gZGVidWdnaW5nIG1lc3NhZ2UuCi0JICAgICAgIEFkZGVkICJhZnRlciIgZGVidWdnaW5nIG1lc3NhZ2UgdG8gPGNhbGxfa2VybmVsZD4uCi0gICAgMTk5ODA1MTkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgImRpcmVhZCIgYW5kICJkaXdyaXRlIiBib290IG9wdGlvbnMuCi0gICAgMTk5ODA1MjAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgcGVyc2lzdGVuY2UgcHJvYmxlbSB3aXRoIHBlcm1pc3Npb25zLgotICB2MC4yNQotICAgIDE5OTgwNjAyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFN1cHBvcnQgbGVnYWN5IGRldmljZSBub2Rlcy4KLQkgICAgICAgRml4ZWQgYnVnIHdoZXJlIHJlY3JlYXRlZCBpbm9kZXMgd2VyZSBoaWRkZW4uCi0gIHYwLjI2Ci0gICAgMTk5ODA2MDIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgSW1wcm92ZWQgZGVidWdnaW5nIGluIDxnZXRfdmZzX2lub2RlPi4KLSAgICAxOTk4MDYwNyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBObyBsb25nZXIgZnJlZSBvbGQgZGVudHJpZXMgaW4gPGRldmZzX21rX2Rpcj4uCi0JICAgICAgIEZyZWUgYWxsIGRlbnRyaWVzIGZvciBhIGdpdmVuIGVudHJ5IHdoZW4gZGVsZXRpbmcgaW5vZGVzLgotICB2MC4yNwotICAgIDE5OTgwNjI3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIExpbWl0IGF1dG8tZGV2aWNlIG51bWJlcmluZyB0byBtYWpvcnMgMTI4IHRvIDIzOS4KLSAgdjAuMjgKLSAgICAxOTk4MDYyOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBpbm9kZSB0aW1lcyBwZXJzaXN0ZW5jZSBwcm9ibGVtLgotICB2MC4yOQotICAgIDE5OTgwNzA0ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEZpeGVkIHNwZWxsaW5nIGluIDxkZXZmc19yZWFkbGluaz4gZGVidWcuCi0JICAgICAgIEZpeGVkIGJ1ZyBpbiA8ZGV2ZnNfc2V0dXA+IHBhcnNpbmcgImRpbG9va3VwIi4KLSAgdjAuMzAKLSAgICAxOTk4MDcwNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBkZXZmcyBpbm9kZSBsZWFrIHdoZW4gbWFudWFsbHkgcmVjcmVhdGluZyBpbm9kZXMuCi0JICAgICAgIEZpeGVkIHBlcm1pc3Npb24gcGVyc2lzdGVuY2UgcHJvYmxlbSB3aGVuIHJlY3JlYXRpbmcgaW5vZGVzLgotICB2MC4zMQotICAgIDE5OTgwNzI3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJlbW92ZWQgaGFybWxlc3MgInVudXNlZCB2YXJpYWJsZSIgY29tcGlsZXIgd2FybmluZy4KLQkgICAgICAgRml4ZWQgbW9kZXMgZm9yIG1hbnVhbGx5IHJlY3JlYXRlZCBkZXZpY2Ugbm9kZXMuCi0gIHYwLjMyCi0gICAgMTk5ODA3MjggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgTlVMTCBkZXZmcyBpbm9kZSB3YXJuaW5nIGluIDxkZXZmc19yZWFkX2lub2RlPi4KLQkgICAgICAgRm9yY2UgYWxsIGlub2RlIG5saW5rIHZhbHVlcyB0byAxLgotICB2MC4zMwotICAgIDE5OTgwNzMwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkICJkaW1rbm9kIiBib290IG9wdGlvbi4KLQkgICAgICAgU2V0IGlub2RlIG5saW5rIHRvIDAgd2hlbiBmcmVlaW5nIGRlbnRyaWVzLgotCSAgICAgICBGaXhlZCBtb2RlcyBmb3IgbWFudWFsbHkgcmVjcmVhdGVkIHN5bWxpbmtzLgotICB2MC4zNAotICAgIDE5OTgwODAyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEZpeGVkIGJ1Z3MgaW4gcmVjcmVhdGVkIGRpcmVjdG9yaWVzIGFuZCBzeW1saW5rcy4KLSAgdjAuMzUKLSAgICAxOTk4MDgwNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBidWdzIGluIHJlY3JlYXRlZCBkZXZpY2Ugbm9kZXMuCi0gICAgMTk5ODA4MDcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgYnVnIGluIGN1cnJlbnRseSB1bnVzZWQgPGRldmZzX2dldF9oYW5kbGVfZnJvbV9pbm9kZT4uCi0JICAgICAgIERlZmluZWQgbmV3IDxkZXZmc19oYW5kbGVfdD4gdHlwZS4KLQkgICAgICAgSW1wcm92ZWQgZGVidWdnaW5nIHdoZW4gZ2V0dGluZyBlbnRyaWVzLgotCSAgICAgICBGaXhlZCBidWcgd2hlcmUgZGlyZWN0b3JpZXMgY291bGQgYmUgZW1wdGllZC4KLSAgdjAuMzYKLSAgICAxOTk4MDgwOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZXBsYWNlZCBkdW1teSAuZXBvY2ggaW5vZGUgd2l0aCAuZGV2ZnNkIGNoYXJhY3RlciBkZXZpY2UuCi0gICAgMTk5ODA4MTAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgSW1wbGVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIDAuCi0gIHYwLjM3Ci0gICAgMTk5ODA4MTkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgc29vdGhpbmcgbWVzc2FnZSB0byB3YXJuaW5nIGluIDxkZXZmc19kX2lwdXQ+LgotICB2MC4zOAotICAgIDE5OTgwODI5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFVzZSBHQ0MgZXh0ZW5zaW9ucyBmb3Igc3RydWN0dXJlIGluaXRpYWxpc2F0aW9ucy4KLQkgICAgICAgSW1wbGVtZW50ZWQgYXN5bmMgb3BlbiBub3RpZmljYXRpb24uCi0JICAgICAgIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byAxLgotICB2MC4zOQotICAgIDE5OTgwOTA4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIE1vdmVkIGFzeW5jIG9wZW4gbm90aWZpY2F0aW9uIHRvIGVuZCBvZiA8ZGV2ZnNfb3Blbj4uCi0gIHYwLjQwCi0gICAgMTk5ODA5MTAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUHJlcGVuZGVkICIvZGV2LyIgdG8gbW9kdWxlIGxvYWQgcmVxdWVzdC4KLQkgICAgICAgUmVuYW1lZCA8Y2FsbF9rZXJuZWxkPiB0byA8Y2FsbF9rbW9kPi4KLSAgdjAuNDEKLSAgICAxOTk4MDkxMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCB0eXBvICJBWVNOQyIgLT4gIkFTWU5DIi4KLSAgdjAuNDIKLSAgICAxOTk4MDkxMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBvcGVuIGZsYWcgZm9yIGZpbGVzLgotICB2MC40MwotICAgIDE5OTgwOTI3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFNldCBpX2Jsb2Nrcz0wIGFuZCBpX2Jsa3NpemU9MTAyNCBpbiA8ZGV2ZnNfcmVhZF9pbm9kZT4uCi0gIHYwLjQ0Ci0gICAgMTk5ODEwMDUgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgdGVzdCBmb3IgZW1wdHkgPDxuYW1lPj4gaW4gPGRldmZzX2ZpbmRfaGFuZGxlPi4KLQkgICAgICAgUmVuYW1lZCA8Z2VuZXJhdGVfcGF0aD4gdG8gPGRldmZzX2dlbmVyYXRlX3BhdGg+IGFuZCBwdWJsaXNoZWQuCi0gIHYwLjQ1Ci0gICAgMTk5ODEwMDYgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2ZvcHM+LgotICB2MC40NgotICAgIDE5OTgxMDA3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIExpbWl0IGF1dG8tZGV2aWNlIG51bWJlcmluZyB0byBtYWpvcnMgMTQ0IHRvIDIzOS4KLSAgdjAuNDcKLSAgICAxOTk4MTAxMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBVcGRhdGVkIDxkZXZmc19mb2xsb3dfbGluaz4gZm9yIFZGUyBjaGFuZ2UgaW4gMi4xLjEyNS4KLSAgdjAuNDgKLSAgICAxOTk4MTAyMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDcmVhdGVkIERFVkZTXyBGTF9DT01QQVQgZmxhZy4KLSAgdjAuNDkKLSAgICAxOTk4MTAyMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDcmVhdGVkICJub2NvbXBhdCIgYm9vdCBvcHRpb24uCi0gIHYwLjUwCi0gICAgMTk5ODEwMjUgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUmVwbGFjZWQgIm1vdW50IiBib290IG9wdGlvbiB3aXRoICJub21vdW50Ii4KLSAgdjAuNTEKLSAgICAxOTk4MTExMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDcmVhdGVkICJvbmx5IiBib290IG9wdGlvbi4KLSAgdjAuNTIKLSAgICAxOTk4MTExMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBERVZGU19GTF9SRU1PVkFCTEUgZmxhZy4KLSAgdjAuNTMKLSAgICAxOTk4MTExNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBPbmx5IGNhbGwgPHNjYW5fZGlyX2Zvcl9yZW1vdmFibGU+IG9uIGZpcnN0IGNhbGwgdG8KLQkgICAgICAgPGRldmZzX3JlYWRkaXI+LgotICB2MC41NAotICAgIDE5OTgxMjA1ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFVwZGF0ZWQgPGRldmZzX3JtZGlyPiBmb3IgVkZTIGNoYW5nZSBpbiAyLjEuMTMxLgotICB2MC41NQotICAgIDE5OTgxMjE4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENyZWF0ZWQgPGRldmZzX21rX2NvbXBhdD4uCi0gICAgMTk5ODEyMjAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ2hlY2sgZm9yIHBhcnRpdGlvbnMgb24gcmVtb3ZhYmxlIG1lZGlhIGluIDxkZXZmc19sb29rdXA+LgotICB2MC41NgotICAgIDE5OTkwMTE4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHJlZ2lzdGVyaW5nIHJlZ3VsYXIgZmlsZXMuCi0JICAgICAgIENyZWF0ZWQgPGRldmZzX3NldF9maWxlX3NpemU+LgotCSAgICAgICBVcGRhdGUgZGV2ZnMgaW5vZGVzIGZyb20gZW50cmllcyBpZiBub3QgY2hhbmdlZCB0aHJvdWdoIEZTLgotICB2MC41NwotICAgIDE5OTkwMTI0ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEZpeGVkIDxkZXZmc19maWxsX2ZpbGU+IHRvIG9ubHkgaW5pdGlhbGlzZSB0ZW1wb3JhcnkgaW5vZGVzLgotCSAgICAgICBUcmFwIGZvciBOVUxMIGZvcHMgaW4gPGRldmZzX3JlZ2lzdGVyPi4KLQkgICAgICAgUmV0dXJuIC1FTk9ERVYgaW4gPGRldmZzX2ZpbGxfZmlsZT4gZm9yIG5vbi1kcml2ZXIgaW5vZGVzLgotICB2MC41OAotICAgIDE5OTkwMTI2ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFN3aXRjaGVkIGZyb20gUEFUSF9NQVggdG8gREVWRlNfUEFUSExFTi4KLSAgdjAuNTkKLSAgICAxOTk5MDEyNyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDcmVhdGVkICJub3R0eWNvbXBhdCIgYm9vdCBvcHRpb24uCi0gIHYwLjYwCi0gICAgMTk5OTAzMTggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgPGRldmZzZF9yZWFkPiB0byBub3Qgb3ZlcnJ1biBldmVudCBidWZmZXIuCi0gIHYwLjYxCi0gICAgMTk5OTAzMjkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfYXV0b191bnJlZ2lzdGVyPi4KLSAgdjAuNjIKLSAgICAxOTk5MDMzMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBEb24ndCByZXR1cm4gdW5yZWdpc3RyZWQgZW50cmllcyBpbiA8ZGV2ZnNfZmluZF9oYW5kbGU+LgotCSAgICAgICBQYW5pYyBpbiA8ZGV2ZnNfdW5yZWdpc3Rlcj4gaWYgZW50cnkgdW5yZWdpc3RlcmVkLgotICAgIDE5OTkwNDAxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIERvbid0IHBhbmljIGluIDxkZXZmc19hdXRvX3VucmVnaXN0ZXI+IGZvciBkdXBsaWNhdGVzLgotICB2MC42MwotICAgIDE5OTkwNDAyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIERvbid0IHVucmVnaXN0ZXIgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZW50cmllcyBpbiA8dW5yZWdpc3Rlcj4uCi0gIHYwLjY0Ci0gICAgMTk5OTA1MTAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRGlzYWJsZSB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlIGZvcgotCSAgICAgICByZW1vdmFibGUgbWVkaWEuCi0gIHYwLjY1Ci0gICAgMTk5OTA1MTIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgVXBkYXRlZCA8ZGV2ZnNfbG9va3VwPiBmb3IgVkZTIGNoYW5nZSBpbiAyLjMuMS1wcmUxLgotCSAgICAgICBDcmVhdGVkICJvb3BzLW9uLXBhbmljIiBib290IG9wdGlvbi4KLQkgICAgICAgSW1wcm92ZWQgZGVidWdnaW5nIGluIDxkZXZmc19yZWdpc3Rlcj4gYW5kIDxkZXZmc191bnJlZ2lzdGVyPi4KLSAgdjAuNjYKLSAgICAxOTk5MDUxOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBkb2N1bWVudGF0aW9uIGZvciBzb21lIGZ1bmN0aW9ucy4KLSAgICAxOTk5MDUyNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkICJvb3BzLW9uLXBhbmljIiBib290IG9wdGlvbjogbm93IGFsd2F5cyBPb3BzLgotICB2MC42NwotICAgIDE5OTkwNTMxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEltcHJvdmVkIGRlYnVnZ2luZyBpbiA8ZGV2ZnNfcmVnaXN0ZXI+LgotICB2MC42OAotICAgIDE5OTkwNjA0ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkICJkaXVubGluayIgYW5kICJub2ttb2QiIGJvb3Qgb3B0aW9ucy4KLQkgICAgICAgUmVtb3ZlZCBzdXBlcmZsdW91cyB3YXJuaW5nIG1lc3NhZ2UgaW4gPGRldmZzX2RfaXB1dD4uCi0gIHYwLjY5Ci0gICAgMTk5OTA2MTEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgVG9vayBhY2NvdW50IG9mIGNoYW5nZSB0byA8ZF9hbGxvY19yb290Pi4KLSAgdjAuNzAKLSAgICAxOTk5MDYxNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDcmVhdGVkIHNlcGFyYXRlIGV2ZW50IHF1ZXVlIGZvciBlYWNoIG1vdW50ZWQgZGV2ZnMuCi0JICAgICAgIFJlbW92ZWQgPGRldmZzX2ludmFsaWRhdGVfZGNhY2hlPi4KLQkgICAgICAgQ3JlYXRlZCBuZXcgaW9jdGwoKXMuCi0JICAgICAgIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byAzLgotCSAgICAgICBGaXhlZCBidWcgd2hlbiByZS1jcmVhdGluZyBkaXJlY3RvcmllczogY29udGVudHMgd2VyZSBsb3N0LgotCSAgICAgICBCbG9jayBhY2Nlc3MgdG8gaW5vZGVzIHVudGlsIGRldmZzZCB1cGRhdGVzIHBlcm1pc3Npb25zLgotICAgIDE5OTkwNjE1ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFN1cHBvcnQgMi4yLngga2VybmVscy4KLSAgdjAuNzEKLSAgICAxOTk5MDYyMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBTd2l0Y2hlZCB0byBzZW5kaW5nIHByb2Nlc3MgdWlkL2dpZCB0byBkZXZmc2QuCi0JICAgICAgIFJlbmFtZWQgPGNhbGxfa21vZD4gdG8gPHRyeV9tb2Rsb2FkPi4KLQkgICAgICAgQWRkZWQgREVWRlNEX05PVElGWV9MT09LVVAgZXZlbnQuCi0gICAgMTk5OTA2MjQgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgREVWRlNEX05PVElGWV9DSEFOR0UgZXZlbnQuCi0JICAgICAgIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byA0LgotICB2MC43MgotICAgIDE5OTkwNzEzICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJldHVybiBFSVNESVIgcmF0aGVyIHRoYW4gRUlOVkFMIGZvciByZWFkKDIpIG9uIGRpcmVjdG9yaWVzLgotICB2MC43MwotICAgIDE5OTkwODA5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENoYW5nZWQgPGRldmZzX3NldHVwPiB0byBuZXcgX19pbml0IHNjaGVtZS4KLSAgdjAuNzQKLSAgICAxOTk5MDkwMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBDaGFuZ2VkIHJlbWFpbmluZyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdG8gbmV3IF9faW5pdCBzY2hlbWUuCi0gIHYwLjc1Ci0gICAgMTk5OTEwMTMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2luZm8+LCA8ZGV2ZnNfc2V0X2luZm8+LAotCSAgICAgICA8ZGV2ZnNfZ2V0X2ZpcnN0X2NoaWxkPiBhbmQgPGRldmZzX2dldF9uZXh0X3NpYmxpbmc+LgotCSAgICAgICBBZGRlZCA8PGRpcj4+IHBhcmFtZXRlciB0byA8ZGV2ZnNfcmVnaXN0ZXI+LCA8ZGV2ZnNfbWtfY29tcGF0PiwKLQkgICAgICAgPGRldmZzX21rX2Rpcj4gYW5kIDxkZXZmc19maW5kX2hhbmRsZT4uCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuNzYKLSAgICAxOTk5MTAxNyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBbGxvdyBtdWx0aXBsZSB1bnJlZ2lzdHJhdGlvbnMuCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuNzcKLSAgICAxOTk5MTAyNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBtYWpvciBhbmQgbWlub3IgbnVtYmVyIHRvIGRldmZzZCBwcm90b2NvbC4KLQkgICAgICAgSW5jcmVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIHRvIDUuCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuNzgKLSAgICAxOTk5MTAzMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBTdXBwb3J0IGluZm8gcG9pbnRlciBmb3IgYWxsIGRldmZzIGVudHJ5IHR5cGVzLgotCSAgICAgICBBZGRlZCA8PGluZm8+PiBwYXJhbWV0ZXIgdG8gPGRldmZzX21rX2Rpcj4gYW5kCi0JICAgICAgIDxkZXZmc19ta19zeW1saW5rPi4KLQkgICAgICAgV29yayBzcG9uc29yZWQgYnkgU0dJLgotICB2MC43OQotICAgIDE5OTkxMDMxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFN1cHBvcnQgIi4uLyIgd2hlbiBzZWFyY2hpbmcgZGV2ZnMgbmFtZXNwYWNlLgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjgwCi0gICAgMTk5OTExMDEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X3VucmVnaXN0ZXJfc2xhdmU+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjgxCi0gICAgMTk5OTExMDMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRXhwb3J0ZWQgPGRldmZzX2dldF9wYXJlbnQ+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjgyCi0gICAgMTk5OTExMDQgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIFJlbW92ZWQgdW51c2VkIDxkZXZmc19zZXRfc3ltbGlua19kZXN0aW5hdGlvbj4uCi0gICAgMTk5OTExMDUgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIERvIG5vdCBoaWRlIGVudHJpZXMgZnJvbSBkZXZmc2Qgb3IgY2hpbGRyZW4uCi0JICAgICAgIFJlbW92ZWQgREVWRlNfIEZMX1RUWV9DT01QQVQgZmxhZy4KLQkgICAgICAgUmVtb3ZlZCAibm90dHljb21wYXQiIGJvb3Qgb3B0aW9uLgotCSAgICAgICBSZW1vdmVkIDxkZXZmc19ta19jb21wYXQ+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjgzCi0gICAgMTk5OTExMDcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgREVWRlNfRkxfV0FJVCBmbGFnLgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjg0Ci0gICAgMTk5OTExMDcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgU3VwcG9ydCBuZXcgImRpc2MiIG5hbWluZyBzY2hlbWUgaW4gPGdldF9yZW1vdmFibGVfcGFydGl0aW9uPi4KLQkgICAgICAgQWxsb3cgTlVMTCBmb3BzIGluIDxkZXZmc19yZWdpc3Rlcj4uCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuODUKLSAgICAxOTk5MTExMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGYWxsIGJhY2sgdG8gbWFqb3IgdGFibGUgaWYgTlVMTCBmb3BzIGdpdmVuIHRvIDxkZXZmc19yZWdpc3Rlcj4uCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuODYKLSAgICAxOTk5MTIwNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBTdXBwb3J0IGZpZm9zIHdoZW4gdW5yZWdpc3RlcmluZy4KLQkgICAgICAgV29yayBzcG9uc29yZWQgYnkgU0dJLgotICB2MC44NwotICAgIDE5OTkxMjA5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJlbW92ZWQgb2Jzb2xldGUgREVWRlNfIEZMX0NPTVBBVCBhbmQgREVWRlNfIEZMX1RPTEVSQU5UIGZsYWdzLgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjg4Ci0gICAgMTk5OTEyMTQgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUmVtb3ZlZCBrbW9kIHN1cHBvcnQuCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuODkKLSAgICAxOTk5MTIxNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBJbXByb3ZlZCBkZWJ1Z2dpbmcgaW4gPGdldF92ZnNfaW5vZGU+LgotCSAgICAgICBFbnN1cmUgZGVudHJpZXMgY3JlYXRlZCBieSBkZXZmc2Qgd2lsbCBiZSBjbGVhbmVkIHVwLgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjkwCi0gICAgMTk5OTEyMjMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X25hbWU+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjkxCi0gICAgMjAwMDAyMDMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDIuCi0JICAgICAgIFJlbW92ZWQgPGRldmZzX2ZpbGxfZmlsZT4uCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuOTIKLSAgICAyMDAwMDMwNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBERVZGU18gRkxfTk9fUEVSU0lTVEVOQ0UgZmxhZy4KLQkgICAgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYWxsIHRvIDx1cGRhdGVfZGV2ZnNfaW5vZGVfZnJvbV9lbnRyeT4gaW4KLQkgICAgICAgPGRldmZzX3JlYWRkaXI+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjkzCi0gICAgMjAwMDA0MTMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgU2V0IGlub2RlLT5pX3NpemUgdG8gY29ycmVjdCBzaXplIGZvciBzeW1saW5rcy4KLSAgICAyMDAwMDQxNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBPbmx5IGdpdmUgbG9va3VwKCkgbWV0aG9kIHRvIGRpcmVjdG9yaWVzIHRvIGNvbXBseSB3aXRoIG5ldyBWRlMKLQkgICAgICAgYXNzdW1wdGlvbnMuCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgICAyMDAwMDQxNSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgdGVzdHMgaW4gc3ltbGluayBtZXRob2RzLgotCSAgICAgICBEb24ndCBraWxsIGV4aXN0aW5nIGJsb2NrIG9wcyBpbiA8ZGV2ZnNfcmVhZF9pbm9kZT4uCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuOTQKLSAgICAyMDAwMDQyNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBEb24ndCBjcmVhdGUgbWlzc2luZyBkaXJlY3RvcmllcyBpbiA8ZGV2ZnNfZmluZF9oYW5kbGU+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjk1Ci0gICAgMjAwMDA0MzAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQWRkZWQgQ09ORklHX0RFVkZTX01PVU5ULgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjk2Ci0gICAgMjAwMDA2MDggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRGlzYWJsZWQgbXVsdGktbW91bnQgY2FwYWJpbGl0eSAodXNlIFZGUyBiaW5kaW5ncyBpbnN0ZWFkKS4KLQkgICAgICAgV29yayBzcG9uc29yZWQgYnkgU0dJLgotICB2MC45NwotICAgIDIwMDAwNjEwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFN3aXRjaGVkIHRvIEZTX1NJTkdMRSB0byBkaXNhYmxlIG11bHRpLW1vdW50cy4KLSAgICAyMDAwMDYxMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIG1vZHVsZSBzdXBwb3J0LgotCSAgICAgICBSZW1vdmVkIG11bHRpLW1vdW50IGNvZGUuCi0JICAgICAgIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBtYWNyb3M6IFZGUyBoYXMgY2hhbmdlZCB0b28gbXVjaC4KLQkgICAgICAgV29yayBzcG9uc29yZWQgYnkgU0dJLgotICB2MC45OAotICAgIDIwMDAwNjE0ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIE1lcmdlZCBkZXZmcyBpbm9kZSBpbnRvIGRldmZzIGVudHJ5LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjk5Ci0gICAgMjAwMDA2MTkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUmVtb3ZlZCBkZWFkIGNvZGUgaW4gPGRldmZzX3JlZ2lzdGVyPiB3aGljaCB1c2VkIHRvIGNhbGwKLQkgICAgICAgPGZyZWVfZGVudHJpZXM+LgotCSAgICAgICBXb3JrIHNwb25zb3JlZCBieSBTR0kuCi0gIHYwLjEwMAotICAgIDIwMDAwNjIxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENoYW5nZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19yZWdpc3Rlcj4uCi0JICAgICAgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSS4KLSAgdjAuMTAxCi0gICAgMjAwMDA2MjIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gPGRldmZzX21rX3N5bWxpbms+IGFuZCA8ZGV2ZnNfbWtfZGlyPi4KLQkgICAgICAgU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gPGRldmZzX2ZpbmRfaGFuZGxlPi4KLQkgICAgICAgV29yayBzcG9uc29yZWQgYnkgU0dJLgotICB2MC4xMDIKLSAgICAyMDAxMDUxOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBFbnN1cmUgPGRldmZzX2dlbmVyYXRlX3BhdGg+IHRlcm1pbmF0ZXMgc3RyaW5nIGZvciByb290IGVudHJ5LgotCSAgICAgICBFeHBvcnRlZCA8ZGV2ZnNfZ2V0X25hbWU+IHRvIG1vZHVsZXMuCi0gICAgMjAwMTA1MjAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgTWFrZSA8ZGV2ZnNfbWtfc3ltbGluaz4gc2VuZCBldmVudHMgdG8gZGV2ZnNkLgotCSAgICAgICBDbGVhbmVkIHVwIG9wdGlvbiBwcm9jZXNzaW5nIGluIDxkZXZmc19zZXR1cD4uCi0gICAgMjAwMTA1MjEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgYnVncyBpbiBoYW5kbGluZyBzeW1saW5rczogY291bGQgbGVhayBvciBjYXVzZSBPb3BzLgotICAgIDIwMDEwNTIyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENsZWFuZWQgdXAgZGlyZWN0b3J5IGhhbmRsaW5nIGJ5IHNlcGFyYXRpbmcgZm9wcy4KLSAgdjAuMTAzCi0gICAgMjAwMTA2MDEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgaGFuZGxpbmcgb2YgaW52ZXJ0ZWQgb3B0aW9ucyBpbiA8ZGV2ZnNfc2V0dXA+LgotICB2MC4xMDQKLSAgICAyMDAxMDYwNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGp1c3RlZCA8dHJ5X21vZGxvYWQ+IHRvIGFjY291bnQgZm9yIDxkZXZmc19nZW5lcmF0ZV9wYXRoPiBmaXguCi0gIHYwLjEwNQotICAgIDIwMDEwNjE3ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFuc3dlcmVkIHF1ZXN0aW9uIHBvc2VkIGJ5IEFsIFZpcm8gYW5kIHJlbW92ZWQgaGlzIGNvbW1lbnRzLgotCSAgICAgICBNb3ZlZCBzZXR0aW5nIG9mIHJlZ2lzdGVyZWQgZmxhZyBhZnRlciBvdGhlciBmaWVsZHMgYXJlIGNoYW5nZWQuCi0JICAgICAgIEZpeGVkIHJhY2UgYmV0d2VlbiA8ZGV2ZnNkX2Nsb3NlPiBhbmQgPGRldmZzZF9ub3RpZnlfb25lPi4KLQkgICAgICAgR2xvYmFsIFZGUyBjaGFuZ2VzIGFkZGVkIGJvZ3VzIEJLTCB0byA8ZGV2ZnNkX2Nsb3NlPjogcmVtb3ZlZC4KLQkgICAgICAgV2lkZW5lZCBsb2NraW5nIGluIDxkZXZmc19yZWFkbGluaz4gYW5kIDxkZXZmc19mb2xsb3dfbGluaz4uCi0JICAgICAgIFJlcGxhY2VkIDxkZXZmc2RfcmVhZD4gc3RhY2sgdXNhZ2Ugd2l0aCA8ZGV2ZnNkX2lvY3RsPiBrbWFsbG9jLgotCSAgICAgICBTaW1wbGlmaWVkIGxvY2tpbmcgaW4gPGRldmZzZF9pb2N0bD4gYW5kIGZpeGVkIG1lbW9yeSBsZWFrLgotICB2MC4xMDYKLSAgICAyMDAxMDcwOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIGJyb2tlbiBkZXZudW0gYWxsb2NhdGlvbiBhbmQgdXNlIDxkZXZmc19hbGxvY19kZXZudW0+LgotCSAgICAgICBGaXhlZCBvbGQgZGV2bnVtIGxlYWsgYnkgY2FsbGluZyBuZXcgPGRldmZzX2RlYWxsb2NfZGV2bnVtPi4KLSAgdjAuMTA3Ci0gICAgMjAwMTA3MTIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgYnVnIGluIDxkZXZmc19zZXR1cD4gd2hpY2ggY291bGQgaGFuZyBib290IHByb2Nlc3MuCi0gIHYwLjEwOAotICAgIDIwMDEwNzMwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkIERFVkZTRF9OT1RJRllfREVMRVRFIGV2ZW50LgotICAgIDIwMDEwODAxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJlbW92ZWQgI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+LgotICB2MC4xMDkKLSAgICAyMDAxMDgwNyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBpbm9kZSB0YWJsZSByYWNlcyBieSByZW1vdmluZyBpdCBhbmQgdXNpbmcKLQkgICAgICAgaW5vZGUtPnUuZ2VuZXJpY19pcCBpbnN0ZWFkLgotCSAgICAgICBNb3ZlZCA8ZGV2ZnNfcmVhZF9pbm9kZT4gaW50byA8Z2V0X3Zmc19pbm9kZT4uCi0JICAgICAgIE1vdmVkIDxkZXZmc193cml0ZV9pbm9kZT4gaW50byA8ZGV2ZnNfbm90aWZ5X2NoYW5nZT4uCi0gIHYwLjExMAotICAgIDIwMDEwODA4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEZpeGVkIHJhY2UgaW4gPGRldmZzX2RvX3N5bWxpbms+IGZvciB1bmktcHJvY2Vzc29yLgotICB2MC4xMTEKLSAgICAyMDAxMDgxOCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIHJlbW5hbnQgb2YgbXVsdGktbW91bnQgc3VwcG9ydCBpbiA8ZGV2ZnNfbWtub2Q+LgotICAgICAgICAgICAgICAgUmVtb3ZlZCB1bnVzZWQgREVWRlNfRkxfU0hPV19VTlJFRyBmbGFnLgotICB2MC4xMTIKLSAgICAyMDAxMDgyMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIG5saW5rIGZpZWxkIGZyb20gc3RydWN0IGRldmZzX2lub2RlLgotICB2MC4xMTMKLSAgICAyMDAxMDgyMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZXBsYWNlZCBCS0wgd2l0aCBnbG9iYWwgcndzZW0gdG8gcHJvdGVjdCBzeW1saW5rIGRhdGEgKHF1aWNrCi0JICAgICAgIGFuZCBkaXJ0eSBoYWNrKS4KLSAgdjAuMTE0Ci0gICAgMjAwMTA4MjcgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUmVwbGFjZWQgZ2xvYmFsIHJ3c2VtIGZvciBzeW1saW5rIHdpdGggcGVyLWxpbmsgcmVmY291bnQuCi0gIHYwLjExNQotICAgIDIwMDEwOTE5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFNldCBpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyBmb3IgYmxvY2sgbm9kZXMgaW4gPGdldF92ZnNfaW5vZGU+LgotICB2MC4xMTYKLSAgICAyMDAxMTAwOCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBvdmVycnVuIGluIDxkZXZmc19saW5rPiBieSByZW1vdmluZyBmdW5jdGlvbiAobm90IG5lZWRlZCkuCi0gICAgMjAwMTEwMDkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgYnVmZmVyIHVuZGVycnVuIGluIDx0cnlfbW9kbG9hZD4uCi0gICAgMjAwMTEwMjkgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgcmFjZSBpbiA8ZGV2ZnNkX2lvY3RsPiB3aGVuIHNldHRpbmcgZXZlbnQgbWFzay4KLSAgICAyMDAxMTExNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXJzdCByZWxlYXNlIG9mIG5ldyBsb2NraW5nIGNvZGUuCi0gIHYxLjAKLSAgICAyMDAxMTExNyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBEaXNjYXJkIHRlbXBvcmFyeSBidWZmZXIsIG5vdyB1c2UgIiVzIiBmb3IgZGVudHJ5IG5hbWVzLgotICAgIDIwMDExMTE4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIERvbid0IGdlbmVyYXRlIHBhdGggaW4gPHRyeV9tb2Rsb2FkPjogdXNlIGZha2UgZW50cnkgaW5zdGVhZC4KLQkgICAgICAgVXNlICJleGlzdGluZyIgZGlyZWN0b3J5IGluIDxfZGV2ZnNfbWFrZV9wYXJlbnRfZm9yX2xlYWY+LgotICAgIDIwMDExMTIyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFVzZSBzbGFiIGNhY2hlIHJhdGhlciB0aGFuIGZpeGVkIGJ1ZmZlciBmb3IgZGV2ZnNkIGV2ZW50cy4KLSAgdjEuMQotICAgIDIwMDExMTI1ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFNlbmQgREVWRlNEX05PVElGWV9SRUdJU1RFUkVEIGV2ZW50cyBpbiA8ZGV2ZnNfbWtfZGlyPi4KLSAgICAyMDAxMTEyNyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBsb2NraW5nIGJ1ZyBpbiA8ZGV2ZnNfZF9yZXZhbGlkYXRlX3dhaXQ+IGR1ZSB0byB0eXBvLgotCSAgICAgICBEbyBub3Qgc2VuZCBDUkVBVEUsIENIQU5HRSwgQVNZTkNfT1BFTiBvciBERUxFVEUgZXZlbnRzIGZyb20KLQkgICAgICAgZGV2ZnNkIG9yIGNoaWxkcmVuLgotICB2MS4yCi0gICAgMjAwMTEyMDIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgYnVnIGluIDxkZXZmc2RfcmVhZD46IHdhcyBkZXJlZmVyZW5jaW5nIGZyZWVkIHBvaW50ZXIuCi0gIHYxLjMKLSAgICAyMDAxMTIwMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBidWcgaW4gPGRldmZzZF9jbG9zZT46IHdhcyBkZXJlZmVyZW5jaW5nIGZyZWVkIHBvaW50ZXIuCi0JICAgICAgIEFkZGVkIHByb2Nlc3MgZ3JvdXAgY2hlY2sgZm9yIGRldmZzZCBwcml2aWxlZ2VzLgotICB2MS40Ci0gICAgMjAwMTEyMDQgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgVXNlIFNMQUJfQVRPTUlDIGluIDxkZXZmc2Rfbm90aWZ5X2RlPiBmcm9tIDxkZXZmc19kX2RlbGV0ZT4uCi0gIHYxLjUKLSAgICAyMDAxMTIxMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZXR1cm4gb2xkIGVudHJ5IGluIDxkZXZmc19ta19kaXI+IGZvciAyLjQueCBrZXJuZWxzLgotICAgIDIwMDExMjEyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEluY3JlbWVudCByZWZjb3VudCBvbiBtb2R1bGUgaW4gPGNoZWNrX2Rpc2NfY2hhbmdlZD4uCi0gICAgMjAwMTEyMTUgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2hhbmRsZT4gYW5kIGV4cG9ydGVkIDxkZXZmc19wdXQ+LgotCSAgICAgICBJbmNyZW1lbnQgcmVmY291bnQgb24gbW9kdWxlIGluIDxkZXZmc19nZXRfb3BzPi4KLQkgICAgICAgQ3JlYXRlZCA8ZGV2ZnNfcHV0X29wcz4uCi0gIHYxLjYKLSAgICAyMDAxMTIxNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBwb2lzb25pbmcgdG8gPGRldmZzX3B1dD4uCi0JICAgICAgIEltcHJvdmVkIGRlYnVnZ2luZyBtZXNzYWdlcy4KLSAgdjEuNwotICAgIDIwMDExMjIxICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENvcnJlY3RlZCAobWFkZSB1c2VmdWwpIGRlYnVnZ2luZyBtZXNzYWdlIGluIDx1bnJlZ2lzdGVyPi4KLQkgICAgICAgTW92ZWQgPGttZW1fY2FjaGVfY3JlYXRlPiBpbiA8bW91bnRfZGV2ZnNfZnM+IHRvIDxpbml0X2RldmZzX2ZzPgotICAgIDIwMDExMjI0ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkIG1hZ2ljIG51bWJlciB0byBndWFyZCBhZ2FpbnN0IHNjcmliYmxpbmcgZHJpdmVycy4KLSAgICAyMDAxMTIyNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBPbmx5IHJldHVybiBvbGQgZW50cnkgaW4gPGRldmZzX21rX2Rpcj4gaWYgYSBkaXJlY3RvcnkuCi0JICAgICAgIERlZmluZWQgbWFjcm9zIGZvciBlcnJvciBhbmQgZGVidWcgbWVzc2FnZXMuCi0gIHYxLjgKLSAgICAyMDAyMDExMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCAocmFyZSwgb2xkKSByYWNlIGluIDxkZXZmc19sb29rdXA+LgotICB2MS45Ci0gICAgMjAwMjAxMjAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgRml4ZWQgZGVhZGxvY2sgYnVnIGluIDxkZXZmc19kX3JldmFsaWRhdGVfd2FpdD4uCi0JICAgICAgIFRhZyBWRlMgZGVsZXRhYmxlIGluIDxkZXZmc19ta19zeW1saW5rPiBpZiBoYW5kbGUgaWdub3JlZC4KLSAgdjEuMTAKLSAgICAyMDAyMDEyOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBBZGRlZCBLRVJOXyogdG8gcmVtYWluaW5nIG1lc3NhZ2VzLgotCSAgICAgICBDbGVhbmVkIHVwIGRlY2xhcmF0aW9uIG9mIDxzdGF0X3JlYWQ+LgotICB2MS4xMQotICAgIDIwMDIwMjE5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENoYW5nZWQgPGRldmZzX3JtZGlyPiB0byBhbGxvdyBsYXRlciBhZGRpdGlvbnMgaWYgbm90IHlldCBlbXB0eS4KLSAgdjEuMTIKLSAgICAyMDAyMDQwNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBSZW1vdmVkIHNpbGVudGx5IGludHJvZHVjZWQgY2FsbHMgdG8gbG9ja19rZXJuZWwoKSBhbmQKLQkgICAgICAgdW5sb2NrX2tlcm5lbCgpIGR1ZSB0byByZWNlbnQgVkZTIGxvY2tpbmcgY2hhbmdlcy4gQktMIGlzbid0Ci0JICAgICAgIHJlcXVpcmVkIGluIGRldmZzLgotICB2MS4xMwotICAgIDIwMDIwNDI4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJlbW92ZWQgMi40LnggY29tcGF0aWJpbGl0eSBjb2RlLgotICB2MS4xNAotICAgIDIwMDIwNTEwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEFkZGVkIEJLTCB0byA8ZGV2ZnNfb3Blbj4gYmVjYXVzZSBkcml2ZXJzIHN0aWxsIG5lZWQgaXQuCi0gIHYxLjE1Ci0gICAgMjAwMjA1MTIgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUHJvdGVjdGVkIDxzY2FuX2Rpcl9mb3JfcmVtb3ZhYmxlPiBhbmQgPGdldF9yZW1vdmFibGVfcGFydGl0aW9uPgotCSAgICAgICBmcm9tIGNoYW5naW5nIGRpcmVjdG9yeSBjb250ZW50cy4KLSAgdjEuMTYKLSAgICAyMDAyMDUxNCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBNaW5vciBjbGVhbnVwIG9mIDxzY2FuX2Rpcl9mb3JfcmVtb3ZhYmxlPi4KLSAgdjEuMTcKLSAgICAyMDAyMDcyMSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBTd2l0Y2hlZCB0byBJU08gQyBzdHJ1Y3R1cmUgZmllbGQgaW5pdGlhbGlzZXJzLgotCSAgICAgICBTd2l0Y2ggdG8gc2V0X2N1cnJlbnRfc3RhdGUoKSBhbmQgbW92ZSBiZWZvcmUgYWRkX3dhaXRfcXVldWUoKS4KLSAgICAyMDAyMDcyMiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotCSAgICAgICBGaXhlZCBkZXZmcyBlbnRyeSBsZWFrIGluIDxkZXZmc19yZWFkZGlyPiB3aGVuICpyZWFkZGlyIGZhaWxzLgotICB2MS4xOAotICAgIDIwMDIwNzI1ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIENyZWF0ZWQgPGRldmZzX2ZpbmRfYW5kX3VucmVnaXN0ZXI+LgotICB2MS4xOQotICAgIDIwMDIwNzI4ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIFJlbW92ZWQgZGVwcmVjYXRlZCA8ZGV2ZnNfZmluZF9oYW5kbGU+LgotICB2MS4yMAotICAgIDIwMDIwODIwICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0JICAgICAgIEZpeGVkIG1vZHVsZSB1bmxvYWQgcmFjZSBpbiA8ZGV2ZnNfb3Blbj4uCi0gIHYxLjIxCi0gICAgMjAwMjEwMTMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLQkgICAgICAgUmVtb3ZlZCBERVZGU18gRkxfQVVUT19PV05FUi4KLQkgICAgICAgU3dpdGNoZWQgbGluZ2VyaW5nIHN0cnVjdHVyZSBmaWVsZCBpbml0aWFsaXNlciB0byBJU08gQy4KLQkgICAgICAgQWRkZWQgbG9ja2luZyB3aGVuIHVwZGF0aW5nIEZDQiBmbGFncy4KLSAgdjEuMjIKLSovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotI2RlZmluZSBERVZGU19WRVJTSU9OICAgICAgICAgICAgIjIwMDQtMDEtMzEiCi0KLSNkZWZpbmUgREVWRlNfTkFNRSAiZGV2ZnMiCi0KLSNkZWZpbmUgRklSU1RfSU5PREUgMQotCi0jZGVmaW5lIFNUUklOR19MRU5HVEggMjU2Ci0jZGVmaW5lIEZBS0VfQkxPQ0tfU0laRSAxMDI0Ci0jZGVmaW5lIFBPSVNPTl9QVFIgKCAqKHZvaWQgKiopIHBvaXNvbl9hcnJheSApCi0jZGVmaW5lIE1BR0lDX1ZBTFVFIDB4MzI3ZGI4MjMKLQotI2lmbmRlZiBUUlVFCi0jICBkZWZpbmUgVFJVRSAxCi0jICBkZWZpbmUgRkFMU0UgMAotI2VuZGlmCi0KLSNkZWZpbmUgTU9ERV9ESVIgKFNfSUZESVIgfCBTX0lXVVNSIHwgU19JUlVHTyB8IFNfSVhVR08pCi0KLSNkZWZpbmUgREVCVUdfTk9ORSAgICAgICAgIDB4MDAwMDAwMAotI2RlZmluZSBERUJVR19NT0RVTEVfTE9BRCAgMHgwMDAwMDAxCi0jZGVmaW5lIERFQlVHX1JFR0lTVEVSICAgICAweDAwMDAwMDIKLSNkZWZpbmUgREVCVUdfVU5SRUdJU1RFUiAgIDB4MDAwMDAwNAotI2RlZmluZSBERUJVR19GUkVFICAgICAgICAgMHgwMDAwMDA4Ci0jZGVmaW5lIERFQlVHX1NFVF9GTEFHUyAgICAweDAwMDAwMTAKLSNkZWZpbmUgREVCVUdfU19SRUFEICAgICAgIDB4MDAwMDEwMAkvKiAgQnJlYWsgICovCi0jZGVmaW5lIERFQlVHX0lfTE9PS1VQICAgICAweDAwMDEwMDAJLyogIEJyZWFrICAqLwotI2RlZmluZSBERUJVR19JX0NSRUFURSAgICAgMHgwMDAyMDAwCi0jZGVmaW5lIERFQlVHX0lfR0VUICAgICAgICAweDAwMDQwMDAKLSNkZWZpbmUgREVCVUdfSV9DSEFOR0UgICAgIDB4MDAwODAwMAotI2RlZmluZSBERUJVR19JX1VOTElOSyAgICAgMHgwMDEwMDAwCi0jZGVmaW5lIERFQlVHX0lfUkxJTksgICAgICAweDAwMjAwMDAKLSNkZWZpbmUgREVCVUdfSV9GTElOSyAgICAgIDB4MDA0MDAwMAotI2RlZmluZSBERUJVR19JX01LTk9EICAgICAgMHgwMDgwMDAwCi0jZGVmaW5lIERFQlVHX0ZfUkVBRERJUiAgICAweDAxMDAwMDAJLyogIEJyZWFrICAqLwotI2RlZmluZSBERUJVR19EX0RFTEVURSAgICAgMHgxMDAwMDAwCS8qICBCcmVhayAgKi8KLSNkZWZpbmUgREVCVUdfRF9SRUxFQVNFICAgIDB4MjAwMDAwMAotI2RlZmluZSBERUJVR19EX0lQVVQgICAgICAgMHg0MDAwMDAwCi0jZGVmaW5lIERFQlVHX0FMTCAgICAgICAgICAweGZmZmZmZmYKLSNkZWZpbmUgREVCVUdfRElTQUJMRUQgICAgIERFQlVHX05PTkUKLQotI2RlZmluZSBPUFRJT05fTk9ORSAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIE9QVElPTl9NT1VOVCAgICAgICAgICAgIDB4MDEKLQotI2RlZmluZSBQUklOVEsoZm9ybWF0LCBhcmdzLi4uKSBcCi0gICB7cHJpbnRrIChLRVJOX0VSUiAiJXMiIGZvcm1hdCwgX19GVU5DVElPTl9fICwgIyMgYXJncyk7fQotCi0jZGVmaW5lIE9PUFMoZm9ybWF0LCBhcmdzLi4uKSBcCi0gICB7cHJpbnRrIChLRVJOX0NSSVQgIiVzIiBmb3JtYXQsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpOyBcCi0gICAgcHJpbnRrICgiRm9yY2luZyBPb3BzXG4iKTsgXAotICAgIEJVRygpO30KLQotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotIyAgZGVmaW5lIFZFUklGWV9FTlRSWShkZSkgXAotICAge2lmICgoZGUpICYmIChkZSktPm1hZ2ljX251bWJlciAhPSBNQUdJQ19WQUxVRSkgXAotICAgICAgICBPT1BTICgiKCVwKTogYmFkIG1hZ2ljIHZhbHVlOiAleFxuIiwgKGRlKSwgKGRlKS0+bWFnaWNfbnVtYmVyKTt9Ci0jICBkZWZpbmUgV1JJVEVfRU5UUllfTUFHSUMoZGUsbWFnaWMpIChkZSktPm1hZ2ljX251bWJlciA9IChtYWdpYykKLSMgIGRlZmluZSBEUFJJTlRLKGZsYWcsIGZvcm1hdCwgYXJncy4uLikgXAotICAge2lmIChkZXZmc19kZWJ1ZyAmIGZsYWcpIFwKLQlwcmludGsgKEtFUk5fSU5GTyAiJXMiIGZvcm1hdCwgX19GVU5DVElPTl9fICwgIyMgYXJncyk7fQotI2Vsc2UKLSMgIGRlZmluZSBWRVJJRllfRU5UUlkoZGUpCi0jICBkZWZpbmUgV1JJVEVfRU5UUllfTUFHSUMoZGUsbWFnaWMpCi0jICBkZWZpbmUgRFBSSU5USyhmbGFnLCBmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRldmZzX2hhbmRsZV90OwotCi1zdHJ1Y3QgZGlyZWN0b3J5X3R5cGUgewotCXJ3bG9ja190IGxvY2s7CQkvKiAgTG9jayBmb3Igc2VhcmNoaW5nKFIpL3VwZGF0aW5nKFcpICAgKi8KLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKmZpcnN0OwotCXN0cnVjdCBkZXZmc19lbnRyeSAqbGFzdDsKLQl1bnNpZ25lZCBjaGFyIG5vX21vcmVfYWRkaXRpb25zOjE7Ci19OwotCi1zdHJ1Y3Qgc3ltbGlua190eXBlIHsKLQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwkvKiAgTm90IGluY2x1ZGluZyB0aGUgTlVMTC10ZXJtaW1hdG9yICAgICAgICovCi0JY2hhciAqbGlua25hbWU7CQkvKiAgVGhpcyBpcyBOVUxMLXRlcm1pbmF0ZWQgICAgICAgICAgICAgICAgICovCi19OwotCi1zdHJ1Y3QgZGV2ZnNfaW5vZGUgewkJLyogIFRoaXMgc3RydWN0dXJlIGlzIGZvciAicGVyc2lzdGVudCIgaW5vZGUgc3RvcmFnZSAgKi8KLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IHRpbWVzcGVjIGF0aW1lOwotCXN0cnVjdCB0aW1lc3BlYyBtdGltZTsKLQlzdHJ1Y3QgdGltZXNwZWMgY3RpbWU7Ci0JdW5zaWduZWQgaW50IGlubzsJLyogIElub2RlIG51bWJlciBhcyBzZWVuIGluIHRoZSBWRlMgICAgICAgICAqLwotCXVpZF90IHVpZDsKLQlnaWRfdCBnaWQ7Ci19OwotCi1zdHJ1Y3QgZGV2ZnNfZW50cnkgewotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotCXVuc2lnbmVkIGludCBtYWdpY19udW1iZXI7Ci0jZW5kaWYKLQl2b2lkICppbmZvOwotCWF0b21pY190IHJlZmNvdW50OwkvKiAgV2hlbiB0aGlzIGRyb3BzIHRvIHplcm8sIGl0J3MgdW51c2VkICAgICovCi0JdW5pb24gewotCQlzdHJ1Y3QgZGlyZWN0b3J5X3R5cGUgZGlyOwotCQlkZXZfdCBkZXY7Ci0JCXN0cnVjdCBzeW1saW5rX3R5cGUgc3ltbGluazsKLQkJY29uc3QgY2hhciAqbmFtZTsJLyogIE9ubHkgdXNlZCBmb3IgKG1vZGUgPT0gMCkgICAgICAgICAgICAgICAqLwotCX0gdTsKLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKnByZXY7CS8qICBQcmV2aW91cyBlbnRyeSBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSAgKi8KLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKm5leHQ7CS8qICBOZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICAgICAgKi8KLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKnBhcmVudDsJLyogIFRoZSBwYXJlbnQgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAqLwotCXN0cnVjdCBkZXZmc19pbm9kZSBpbm9kZTsKLQl1bW9kZV90IG1vZGU7Ci0JdW5zaWduZWQgc2hvcnQgbmFtZWxlbjsJLyogIEkgdGhpbmsgNjRrKyBmaWxlbmFtZXMgYXJlIGEgd2F5IG9mZi4uLiAqLwotCXVuc2lnbmVkIGNoYXIgdmZzOjE7CS8qICBXaGV0aGVyIHRoZSBWRlMgbWF5IGRlbGV0ZSB0aGUgZW50cnkgICAqLwotCWNoYXIgbmFtZVsxXTsJCS8qICBUaGlzIGlzIGp1c3QgYSBkdW1teTogdGhlIGFsbG9jYXRlZCBhcnJheQotCQkJCSAgIGlzIGJpZ2dlci4gVGhpcyBpcyBOVUxMLXRlcm1pbmF0ZWQgICAgICAqLwotfTsKLQotLyogIFRoZSByb290IG9mIHRoZSBkZXZpY2UgdHJlZSAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2ZnNfZW50cnkgKnJvb3RfZW50cnk7Ci0KLXN0cnVjdCBkZXZmc2RfYnVmX2VudHJ5IHsKLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlOwkvKiAgVGhlIG5hbWUgaXMgZ2VuZXJhdGVkIHdpdGggdGhpcyAgICAgICAgICovCi0JdW5zaWduZWQgc2hvcnQgdHlwZTsJLyogIFRoZSB0eXBlIG9mIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAqLwotCXVtb2RlX3QgbW9kZTsKLQl1aWRfdCB1aWQ7Ci0JZ2lkX3QgZ2lkOwotCXN0cnVjdCBkZXZmc2RfYnVmX2VudHJ5ICpuZXh0OwotfTsKLQotc3RydWN0IGZzX2luZm8gewkJLyogIFRoaXMgc3RydWN0dXJlIGlzIGZvciB0aGUgbW91bnRlZCBkZXZmcyAgKi8KLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwotCXNwaW5sb2NrX3QgZGV2ZnNkX2J1ZmZlcl9sb2NrOwkvKiAgTG9jayB3aGVuIGluc2VydGluZy9kZWxldGluZyBldmVudHMgICovCi0Jc3RydWN0IGRldmZzZF9idWZfZW50cnkgKmRldmZzZF9maXJzdF9ldmVudDsKLQlzdHJ1Y3QgZGV2ZnNkX2J1Zl9lbnRyeSAqZGV2ZnNkX2xhc3RfZXZlbnQ7Ci0Jdm9sYXRpbGUgaW50IGRldmZzZF9zbGVlcGluZzsKLQl2b2xhdGlsZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRldmZzZF90YXNrOwotCXZvbGF0aWxlIHBpZF90IGRldmZzZF9wZ3JwOwotCXZvbGF0aWxlIHN0cnVjdCBmaWxlICpkZXZmc2RfZmlsZTsKLQlzdHJ1Y3QgZGV2ZnNkX25vdGlmeV9zdHJ1Y3QgKmRldmZzZF9pbmZvOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGV2ZnNkX2V2ZW50X21hc2s7Ci0JYXRvbWljX3QgZGV2ZnNkX292ZXJydW5fY291bnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgZGV2ZnNkX3dhaXRfcXVldWU7CS8qICBXYWtlIGRldmZzZCBvbiBpbnB1dCAgICAgICAqLwotCXdhaXRfcXVldWVfaGVhZF90IHJldmFsaWRhdGVfd2FpdF9xdWV1ZTsJLyogIFdha2Ugd2hlbiBkZXZmc2Qgc2xlZXBzICAgICovCi19OwotCi1zdGF0aWMgc3RydWN0IGZzX2luZm8gZnNfaW5mbyA9IHsuZGV2ZnNkX2J1ZmZlcl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEIH07Ci1zdGF0aWMga21lbV9jYWNoZV90ICpkZXZmc2RfYnVmX2NhY2hlOwotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotc3RhdGljIHVuc2lnbmVkIGludCBkZXZmc19kZWJ1Z19pbml0IF9faW5pdGRhdGEgPSBERUJVR19OT05FOwotc3RhdGljIHVuc2lnbmVkIGludCBkZXZmc19kZWJ1ZyA9IERFQlVHX05PTkU7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN0YXRfbG9jayk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXRfbnVtX2VudHJpZXM7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXRfbnVtX2J5dGVzOwotI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgY2hhciBwb2lzb25fYXJyYXlbOF0gPQotICAgIHsgMHg1YSwgMHg1YSwgMHg1YSwgMHg1YSwgMHg1YSwgMHg1YSwgMHg1YSwgMHg1YSB9OwotCi0jaWZkZWYgQ09ORklHX0RFVkZTX01PVU5UCi1zdGF0aWMgdW5zaWduZWQgaW50IGJvb3Rfb3B0aW9ucyA9IE9QVElPTl9NT1VOVDsKLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQgaW50IGJvb3Rfb3B0aW9ucyA9IE9QVElPTl9OT05FOwotI2VuZGlmCi0KLS8qICBGb3J3YXJkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAgKi8KLXN0YXRpYyBkZXZmc19oYW5kbGVfdCBfZGV2ZnNfd2Fsa19wYXRoKHN0cnVjdCBkZXZmc19lbnRyeSAqZGlyLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCQkgICAgICAgaW50IHRyYXZlcnNlX3N5bWxpbmspOwotc3RhdGljIHNzaXplX3QgZGV2ZnNkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sCi0JCQkgICBsb2ZmX3QgKiBwcG9zKTsKLXN0YXRpYyBpbnQgZGV2ZnNkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIGludCBkZXZmc2RfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotc3RhdGljIHNzaXplX3Qgc3RhdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLAotCQkJIGxvZmZfdCAqIHBwb3MpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhdF9mb3BzID0gewotCS5vcGVuID0gbm9uc2Vla2FibGVfb3BlbiwKLQkucmVhZCA9IHN0YXRfcmVhZCwKLX07Ci0jZW5kaWYKLQotLyogIERldmZzIGRhZW1vbiBmaWxlIG9wZXJhdGlvbnMgICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZmc2RfZm9wcyA9IHsKLQkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCi0JLnJlYWQgPSBkZXZmc2RfcmVhZCwKLQkuaW9jdGwgPSBkZXZmc2RfaW9jdGwsCi0JLnJlbGVhc2UgPSBkZXZmc2RfY2xvc2UsCi19OwotCi0vKiAgU3VwcG9ydCBmdW5jdGlvbnMgZm9sbG93ICAqLwotCi0vKioKLSAqCWRldmZzX2dldCAtIEdldCBhIHJlZmVyZW5jZSB0byBhIGRldmZzIGVudHJ5LgotICoJQGRlOiAgVGhlIGRldmZzIGVudHJ5LgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRldmZzX2dldChzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlKQotewotCVZFUklGWV9FTlRSWShkZSk7Ci0JaWYgKGRlKQotCQlhdG9taWNfaW5jKCZkZS0+cmVmY291bnQpOwotCXJldHVybiBkZTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19nZXQgICovCi0KLS8qKgotICoJZGV2ZnNfcHV0IC0gUHV0IChyZWxlYXNlKSBhIHJlZmVyZW5jZSB0byBhIGRldmZzIGVudHJ5LgotICoJQGRlOiAgVGhlIGhhbmRsZSB0byB0aGUgZGV2ZnMgZW50cnkuCi0gKi8KLQotc3RhdGljIHZvaWQgZGV2ZnNfcHV0KGRldmZzX2hhbmRsZV90IGRlKQotewotCWlmICghZGUpCi0JCXJldHVybjsKLQlWRVJJRllfRU5UUlkoZGUpOwotCWlmIChkZS0+aW5mbyA9PSBQT0lTT05fUFRSKQotCQlPT1BTKCIoJXApOiBwb2lzb25lZCBwb2ludGVyXG4iLCBkZSk7Ci0JaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkZS0+cmVmY291bnQpKQotCQlyZXR1cm47Ci0JaWYgKGRlID09IHJvb3RfZW50cnkpCi0JCU9PUFMoIiglcCk6IHJvb3QgZW50cnkgYmVpbmcgZnJlZWRcbiIsIGRlKTsKLQlEUFJJTlRLKERFQlVHX0ZSRUUsICIoJXMpOiBkZTogJXAsIHBhcmVudDogJXAgXCIlc1wiXG4iLAotCQlkZS0+bmFtZSwgZGUsIGRlLT5wYXJlbnQsCi0JCWRlLT5wYXJlbnQgPyBkZS0+cGFyZW50LT5uYW1lIDogIm5vIHBhcmVudCIpOwotCWlmIChTX0lTTE5LKGRlLT5tb2RlKSkKLQkJa2ZyZWUoZGUtPnUuc3ltbGluay5saW5rbmFtZSk7Ci0JV1JJVEVfRU5UUllfTUFHSUMoZGUsIDApOwotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotCXNwaW5fbG9jaygmc3RhdF9sb2NrKTsKLQktLXN0YXRfbnVtX2VudHJpZXM7Ci0Jc3RhdF9udW1fYnl0ZXMgLT0gc2l6ZW9mICpkZSArIGRlLT5uYW1lbGVuOwotCWlmIChTX0lTTE5LKGRlLT5tb2RlKSkKLQkJc3RhdF9udW1fYnl0ZXMgLT0gZGUtPnUuc3ltbGluay5sZW5ndGggKyAxOwotCXNwaW5fdW5sb2NrKCZzdGF0X2xvY2spOwotI2VuZGlmCi0JZGUtPmluZm8gPSBQT0lTT05fUFRSOwotCWtmcmVlKGRlKTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19wdXQgICovCi0KLS8qKgotICoJX2RldmZzX3NlYXJjaF9kaXIgLSBTZWFyY2ggZm9yIGEgZGV2ZnMgZW50cnkgaW4gYSBkaXJlY3RvcnkuCi0gKglAZGlyOiAgVGhlIGRpcmVjdG9yeSB0byBzZWFyY2guCi0gKglAbmFtZTogIFRoZSBuYW1lIG9mIHRoZSBlbnRyeSB0byBzZWFyY2ggZm9yLgotICoJQG5hbWVsZW46ICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gQG5hbWUuCi0gKgotICogIFNlYXJjaCBmb3IgYSBkZXZmcyBlbnRyeSBpbiBhIGRpcmVjdG9yeSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVudHJ5Ci0gKiAgIG9uIHN1Y2Nlc3MsIGVsc2UgJU5VTEwuIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBsb2NrZWQgYWxyZWFkeS4KLSAqICAgQW4gaW1wbGljaXQgZGV2ZnNfZ2V0KCkgaXMgcGVyZm9ybWVkIG9uIHRoZSByZXR1cm5lZCBlbnRyeS4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGRldmZzX2VudHJ5ICpfZGV2ZnNfc2VhcmNoX2RpcihzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRpciwKLQkJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBuYW1lbGVuKQotewotCXN0cnVjdCBkZXZmc19lbnRyeSAqY3VycjsKLQotCWlmICghU19JU0RJUihkaXItPm1vZGUpKSB7Ci0JCVBSSU5USygiKCVzKTogbm90IGEgZGlyZWN0b3J5XG4iLCBkaXItPm5hbWUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZm9yIChjdXJyID0gZGlyLT51LmRpci5maXJzdDsgY3VyciAhPSBOVUxMOyBjdXJyID0gY3Vyci0+bmV4dCkgewotCQlpZiAoY3Vyci0+bmFtZWxlbiAhPSBuYW1lbGVuKQotCQkJY29udGludWU7Ci0JCWlmIChtZW1jbXAoY3Vyci0+bmFtZSwgbmFtZSwgbmFtZWxlbikgPT0gMCkKLQkJCWJyZWFrOwotCQkvKiAgTm90IGZvdW5kOiB0cnkgdGhlIG5leHQgb25lICAqLwotCX0KLQlyZXR1cm4gZGV2ZnNfZ2V0KGN1cnIpOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIF9kZXZmc19zZWFyY2hfZGlyICAqLwotCi0vKioKLSAqCV9kZXZmc19hbGxvY19lbnRyeSAtIEFsbG9jYXRlIGEgZGV2ZnMgZW50cnkuCi0gKglAbmFtZTogICAgIHRoZSBuYW1lIG9mIHRoZSBlbnRyeQotICoJQG5hbWVsZW46ICB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gQG5hbWUKLSAqICAgICAgQG1vZGU6ICAgICB0aGUgbW9kZSBmb3IgdGhlIGVudHJ5Ci0gKgotICogIEFsbG9jYXRlIGEgZGV2ZnMgZW50cnkgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbnRyeSBvbiBzdWNjZXNzLCBlbHNlCi0gKiAgICVOVUxMLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGV2ZnNfZW50cnkgKl9kZXZmc19hbGxvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKLQkJCQkJICAgICAgdW1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBkZXZmc19lbnRyeSAqbmV3OwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGlub2RlX2NvdW50ZXIgPSBGSVJTVF9JTk9ERTsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvdW50ZXJfbG9jayk7Ci0KLQlpZiAobmFtZSAmJiAobmFtZWxlbiA8IDEpKQotCQluYW1lbGVuID0gc3RybGVuKG5hbWUpOwotCWlmICgobmV3ID0ga21hbGxvYyhzaXplb2YgKm5ldyArIG5hbWVsZW4sIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQobmV3LCAwLCBzaXplb2YgKm5ldyArIG5hbWVsZW4pOwkvKiAgV2lsbCBzZXQgJ1wwJyBvbiBuYW1lICAqLwotCW5ldy0+bW9kZSA9IG1vZGU7Ci0JaWYgKFNfSVNESVIobW9kZSkpCi0JCXJ3bG9ja19pbml0KCZuZXctPnUuZGlyLmxvY2spOwotCWF0b21pY19zZXQoJm5ldy0+cmVmY291bnQsIDEpOwotCXNwaW5fbG9jaygmY291bnRlcl9sb2NrKTsKLQluZXctPmlub2RlLmlubyA9IGlub2RlX2NvdW50ZXIrKzsKLQlzcGluX3VubG9jaygmY291bnRlcl9sb2NrKTsKLQlpZiAobmFtZSkKLQkJbWVtY3B5KG5ldy0+bmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0JbmV3LT5uYW1lbGVuID0gbmFtZWxlbjsKLQlXUklURV9FTlRSWV9NQUdJQyhuZXcsIE1BR0lDX1ZBTFVFKTsKLSNpZmRlZiBDT05GSUdfREVWRlNfREVCVUcKLQlzcGluX2xvY2soJnN0YXRfbG9jayk7Ci0JKytzdGF0X251bV9lbnRyaWVzOwotCXN0YXRfbnVtX2J5dGVzICs9IHNpemVvZiAqbmV3ICsgbmFtZWxlbjsKLQlzcGluX3VubG9jaygmc3RhdF9sb2NrKTsKLSNlbmRpZgotCXJldHVybiBuZXc7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX2FsbG9jX2VudHJ5ICAqLwotCi0vKioKLSAqCV9kZXZmc19hcHBlbmRfZW50cnkgLSBBcHBlbmQgYSBkZXZmcyBlbnRyeSB0byBhIGRpcmVjdG9yeSdzIGNoaWxkIGxpc3QuCi0gKglAZGlyOiAgVGhlIGRpcmVjdG9yeSB0byBhZGQgdG8uCi0gKglAZGU6ICBUaGUgZGV2ZnMgZW50cnkgdG8gYXBwZW5kLgotICoJQG9sZF9kZTogSWYgYW4gZXhpc3RpbmcgZW50cnkgZXhpc3RzLCBpdCB3aWxsIGJlIHdyaXR0ZW4gaGVyZS4gVGhpcyBtYXkKLSAqCQkgYmUgJU5VTEwuIEFuIGltcGxpY2l0IGRldmZzX2dldCgpIGlzIHBlcmZvcm1lZCBvbiB0aGlzIGVudHJ5LgotICoKLSAqICBBcHBlbmQgYSBkZXZmcyBlbnRyeSB0byBhIGRpcmVjdG9yeSdzIGxpc3Qgb2YgY2hpbGRyZW4sIGNoZWNraW5nIGZpcnN0IHRvCi0gKiAgIHNlZSBpZiBhbiBlbnRyeSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cy4gVGhlIGRpcmVjdG9yeSB3aWxsIGJlIGxvY2tlZC4KLSAqICAgVGhlIHZhbHVlIDAgaXMgcmV0dXJuZWQgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gKiAgIE9uIGZhaWx1cmUsIGFuIGltcGxpY2l0IGRldmZzX3B1dCgpIGlzIHBlcmZvcm1lZCBvbiAlZGUuCi0gKi8KLQotc3RhdGljIGludCBfZGV2ZnNfYXBwZW5kX2VudHJ5KGRldmZzX2hhbmRsZV90IGRpciwgZGV2ZnNfaGFuZGxlX3QgZGUsCi0JCQkgICAgICAgZGV2ZnNfaGFuZGxlX3QgKiBvbGRfZGUpCi17Ci0JaW50IHJldHZhbDsKLQotCWlmIChvbGRfZGUpCi0JCSpvbGRfZGUgPSBOVUxMOwotCWlmICghU19JU0RJUihkaXItPm1vZGUpKSB7Ci0JCVBSSU5USygiKCVzKTogZGlyOiBcIiVzXCIgaXMgbm90IGEgZGlyZWN0b3J5XG4iLCBkZS0+bmFtZSwKLQkJICAgICAgIGRpci0+bmFtZSk7Ci0JCWRldmZzX3B1dChkZSk7Ci0JCXJldHVybiAtRU5PVERJUjsKLQl9Ci0Jd3JpdGVfbG9jaygmZGlyLT51LmRpci5sb2NrKTsKLQlpZiAoZGlyLT51LmRpci5ub19tb3JlX2FkZGl0aW9ucykKLQkJcmV0dmFsID0gLUVOT0VOVDsKLQllbHNlIHsKLQkJc3RydWN0IGRldmZzX2VudHJ5ICpvbGQ7Ci0KLQkJb2xkID0gX2RldmZzX3NlYXJjaF9kaXIoZGlyLCBkZS0+bmFtZSwgZGUtPm5hbWVsZW4pOwotCQlpZiAob2xkX2RlKQotCQkJKm9sZF9kZSA9IG9sZDsKLQkJZWxzZQotCQkJZGV2ZnNfcHV0KG9sZCk7Ci0JCWlmIChvbGQgPT0gTlVMTCkgewotCQkJZGUtPnBhcmVudCA9IGRpcjsKLQkJCWRlLT5wcmV2ID0gZGlyLT51LmRpci5sYXN0OwotCQkJLyogIEFwcGVuZCB0byB0aGUgZGlyZWN0b3J5J3MgbGlzdCBvZiBjaGlsZHJlbiAgKi8KLQkJCWlmIChkaXItPnUuZGlyLmZpcnN0ID09IE5VTEwpCi0JCQkJZGlyLT51LmRpci5maXJzdCA9IGRlOwotCQkJZWxzZQotCQkJCWRpci0+dS5kaXIubGFzdC0+bmV4dCA9IGRlOwotCQkJZGlyLT51LmRpci5sYXN0ID0gZGU7Ci0JCQlyZXR2YWwgPSAwOwotCQl9IGVsc2UKLQkJCXJldHZhbCA9IC1FRVhJU1Q7Ci0JfQotCXdyaXRlX3VubG9jaygmZGlyLT51LmRpci5sb2NrKTsKLQlpZiAocmV0dmFsKQotCQlkZXZmc19wdXQoZGUpOwotCXJldHVybiByZXR2YWw7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX2FwcGVuZF9lbnRyeSAgKi8KLQotLyoqCi0gKglfZGV2ZnNfZ2V0X3Jvb3RfZW50cnkgLSBHZXQgdGhlIHJvb3QgZGV2ZnMgZW50cnkuCi0gKgotICoJUmV0dXJucyB0aGUgcm9vdCBkZXZmcyBlbnRyeSBvbiBzdWNjZXNzLCBlbHNlICVOVUxMLgotICoKLSAqCVRPRE8gaXQgbXVzdCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkgZHVlIHRvIHRoZSBmYWN0Ci0gKgl0aGF0IGRldmZzIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlbHkgbGF0ZS4gUHJvcGVyIHdheQotICoJaXMgdG8gcmVtb3ZlIG1vZHVsZV9pbml0IGZyb20gaW5pdF9kZXZmc19mcyBhbmQgbWFudWFsbHkKLSAqCWNhbGwgaXQgZWFybHkgZW5vdWdoIGR1cmluZyBzeXN0ZW0gaW5pdAotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGV2ZnNfZW50cnkgKl9kZXZmc19nZXRfcm9vdF9lbnRyeSh2b2lkKQotewotCXN0cnVjdCBkZXZmc19lbnRyeSAqbmV3OwotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socm9vdF9sb2NrKTsKLQotCWlmIChyb290X2VudHJ5KQotCQlyZXR1cm4gcm9vdF9lbnRyeTsKLQotCW5ldyA9IF9kZXZmc19hbGxvY19lbnRyeShOVUxMLCAwLCBNT0RFX0RJUik7Ci0JaWYgKG5ldyA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXNwaW5fbG9jaygmcm9vdF9sb2NrKTsKLQlpZiAocm9vdF9lbnRyeSkgewotCQlzcGluX3VubG9jaygmcm9vdF9sb2NrKTsKLQkJZGV2ZnNfcHV0KG5ldyk7Ci0JCXJldHVybiByb290X2VudHJ5OwotCX0KLQlyb290X2VudHJ5ID0gbmV3OwotCXNwaW5fdW5sb2NrKCZyb290X2xvY2spOwotCi0JcmV0dXJuIHJvb3RfZW50cnk7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX2dldF9yb290X2VudHJ5ICAqLwotCi0vKioKLSAqCV9kZXZmc19kZXNjZW5kIC0gRGVzY2VuZCBkb3duIGEgdHJlZSB1c2luZyB0aGUgbmV4dCBjb21wb25lbnQgbmFtZS4KLSAqCUBkaXI6ICBUaGUgZGlyZWN0b3J5IHRvIHNlYXJjaC4KLSAqCUBuYW1lOiAgVGhlIGNvbXBvbmVudCBuYW1lIHRvIHNlYXJjaCBmb3IuCi0gKglAbmFtZWxlbjogIFRoZSBsZW5ndGggb2YgJW5hbWUuCi0gKglAbmV4dF9wb3M6ICBUaGUgcG9zaXRpb24gb2YgdGhlIG5leHQgJy8nIG9yICdcMCcgaXMgd3JpdHRlbiBoZXJlLgotICoKLSAqICBEZXNjZW5kIGludG8gYSBkaXJlY3RvcnksIHNlYXJjaGluZyBmb3IgYSBjb21wb25lbnQuIFRoaXMgZnVuY3Rpb24gZm9ybXMKLSAqICAgdGhlIGNvcmUgb2YgYSB0cmVlLXdhbGtpbmcgYWxnb3JpdGhtLiBUaGUgZGlyZWN0b3J5IHdpbGwgYmUgbG9ja2VkLgotICogICBUaGUgZGV2ZnMgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgY29tcG9uZW50IGlzIHJldHVybmVkLiBJZiB0aGVyZSBpcwotICogICBubyBtYXRjaGluZyBlbnRyeSwgJU5VTEwgaXMgcmV0dXJuZWQuCi0gKiAgIEFuIGltcGxpY2l0IGRldmZzX2dldCgpIGlzIHBlcmZvcm1lZCBvbiB0aGUgcmV0dXJuZWQgZW50cnkuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBkZXZmc19lbnRyeSAqX2RldmZzX2Rlc2NlbmQoc3RydWN0IGRldmZzX2VudHJ5ICpkaXIsCi0JCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkJCSAgaW50ICpuZXh0X3BvcykKLXsKLQljb25zdCBjaGFyICpzdG9wLCAqcHRyOwotCXN0cnVjdCBkZXZmc19lbnRyeSAqZW50cnk7Ci0KLQlpZiAoKG5hbWVsZW4gPj0gMykgJiYgKHN0cm5jbXAobmFtZSwgIi4uLyIsIDMpID09IDApKSB7CS8qICBTcGVjaWFsLWNhc2UgZ29pbmcgdG8gcGFyZW50IGRpcmVjdG9yeSAgKi8KLQkJKm5leHRfcG9zID0gMzsKLQkJcmV0dXJuIGRldmZzX2dldChkaXItPnBhcmVudCk7Ci0JfQotCXN0b3AgPSBuYW1lICsgbmFtZWxlbjsKLQkvKiAgU2VhcmNoIGZvciBhIHBvc3NpYmxlICcvJyAgKi8KLQlmb3IgKHB0ciA9IG5hbWU7IChwdHIgPCBzdG9wKSAmJiAoKnB0ciAhPSAnLycpOyArK3B0cikgOwotCSpuZXh0X3BvcyA9IHB0ciAtIG5hbWU7Ci0JcmVhZF9sb2NrKCZkaXItPnUuZGlyLmxvY2spOwotCWVudHJ5ID0gX2RldmZzX3NlYXJjaF9kaXIoZGlyLCBuYW1lLCAqbmV4dF9wb3MpOwotCXJlYWRfdW5sb2NrKCZkaXItPnUuZGlyLmxvY2spOwotCXJldHVybiBlbnRyeTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBfZGV2ZnNfZGVzY2VuZCAgKi8KLQotc3RhdGljIGRldmZzX2hhbmRsZV90IF9kZXZmc19tYWtlX3BhcmVudF9mb3JfbGVhZihzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRpciwKLQkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCSAgaW50IG5hbWVsZW4sIGludCAqbGVhZl9wb3MpCi17Ci0JaW50IG5leHRfcG9zID0gMDsKLQotCWlmIChkaXIgPT0gTlVMTCkKLQkJZGlyID0gX2RldmZzX2dldF9yb290X2VudHJ5KCk7Ci0JaWYgKGRpciA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlkZXZmc19nZXQoZGlyKTsKLQkvKiAgU2VhcmNoIGZvciBwb3NzaWJsZSB0cmFpbGluZyBjb21wb25lbnQgYW5kIGlnbm9yZSBpdCAgKi8KLQlmb3IgKC0tbmFtZWxlbjsgKG5hbWVsZW4gPiAwKSAmJiAobmFtZVtuYW1lbGVuXSAhPSAnLycpOyAtLW5hbWVsZW4pIDsKLQkqbGVhZl9wb3MgPSAobmFtZVtuYW1lbGVuXSA9PSAnLycpID8gKG5hbWVsZW4gKyAxKSA6IDA7Ci0JZm9yICg7IG5hbWVsZW4gPiAwOyBuYW1lICs9IG5leHRfcG9zLCBuYW1lbGVuIC09IG5leHRfcG9zKSB7Ci0JCXN0cnVjdCBkZXZmc19lbnRyeSAqZGUsICpvbGQgPSBOVUxMOwotCi0JCWlmICgoZGUgPQotCQkgICAgIF9kZXZmc19kZXNjZW5kKGRpciwgbmFtZSwgbmFtZWxlbiwgJm5leHRfcG9zKSkgPT0gTlVMTCkgewotCQkJZGUgPSBfZGV2ZnNfYWxsb2NfZW50cnkobmFtZSwgbmV4dF9wb3MsIE1PREVfRElSKTsKLQkJCWRldmZzX2dldChkZSk7Ci0JCQlpZiAoIWRlIHx8IF9kZXZmc19hcHBlbmRfZW50cnkoZGlyLCBkZSwgJm9sZCkpIHsKLQkJCQlkZXZmc19wdXQoZGUpOwotCQkJCWlmICghb2xkIHx8ICFTX0lTRElSKG9sZC0+bW9kZSkpIHsKLQkJCQkJZGV2ZnNfcHV0KG9sZCk7Ci0JCQkJCWRldmZzX3B1dChkaXIpOwotCQkJCQlyZXR1cm4gTlVMTDsKLQkJCQl9Ci0JCQkJZGUgPSBvbGQ7CS8qICBVc2UgdGhlIGV4aXN0aW5nIGRpcmVjdG9yeSAgKi8KLQkJCX0KLQkJfQotCQlpZiAoZGUgPT0gZGlyLT5wYXJlbnQpIHsKLQkJCWRldmZzX3B1dChkaXIpOwotCQkJZGV2ZnNfcHV0KGRlKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWRldmZzX3B1dChkaXIpOwotCQlkaXIgPSBkZTsKLQkJaWYgKG5hbWVbbmV4dF9wb3NdID09ICcvJykKLQkJCSsrbmV4dF9wb3M7Ci0JfQotCXJldHVybiBkaXI7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX21ha2VfcGFyZW50X2Zvcl9sZWFmICAqLwotCi1zdGF0aWMgZGV2ZnNfaGFuZGxlX3QgX2RldmZzX3ByZXBhcmVfbGVhZihkZXZmc19oYW5kbGVfdCAqIGRpciwKLQkJCQkJICBjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUpCi17Ci0JaW50IG5hbWVsZW4sIGxlYWZfcG9zOwotCXN0cnVjdCBkZXZmc19lbnRyeSAqZGU7Ci0KLQluYW1lbGVuID0gc3RybGVuKG5hbWUpOwotCWlmICgoKmRpciA9IF9kZXZmc19tYWtlX3BhcmVudF9mb3JfbGVhZigqZGlyLCBuYW1lLCBuYW1lbGVuLAotCQkJCQkJJmxlYWZfcG9zKSkgPT0gTlVMTCkgewotCQlQUklOVEsoIiglcyk6IGNvdWxkIG5vdCBjcmVhdGUgcGFyZW50IHBhdGhcbiIsIG5hbWUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKChkZSA9IF9kZXZmc19hbGxvY19lbnRyeShuYW1lICsgbGVhZl9wb3MsIG5hbWVsZW4gLSBsZWFmX3BvcywgbW9kZSkpCi0JICAgID09IE5VTEwpIHsKLQkJUFJJTlRLKCIoJXMpOiBjb3VsZCBub3QgYWxsb2NhdGUgZW50cnlcbiIsIG5hbWUpOwotCQlkZXZmc19wdXQoKmRpcik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gZGU7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX3ByZXBhcmVfbGVhZiAgKi8KLQotc3RhdGljIGRldmZzX2hhbmRsZV90IF9kZXZmc193YWxrX3BhdGgoc3RydWN0IGRldmZzX2VudHJ5ICpkaXIsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJCSAgICAgICBpbnQgdHJhdmVyc2Vfc3ltbGluaykKLXsKLQlpbnQgbmV4dF9wb3MgPSAwOwotCi0JaWYgKGRpciA9PSBOVUxMKQotCQlkaXIgPSBfZGV2ZnNfZ2V0X3Jvb3RfZW50cnkoKTsKLQlpZiAoZGlyID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWRldmZzX2dldChkaXIpOwotCWZvciAoOyBuYW1lbGVuID4gMDsgbmFtZSArPSBuZXh0X3BvcywgbmFtZWxlbiAtPSBuZXh0X3BvcykgewotCQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlLCAqbGluazsKLQotCQlpZiAoIVNfSVNESVIoZGlyLT5tb2RlKSkgewotCQkJZGV2ZnNfcHV0KGRpcik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCWlmICgoZGUgPQotCQkgICAgIF9kZXZmc19kZXNjZW5kKGRpciwgbmFtZSwgbmFtZWxlbiwgJm5leHRfcG9zKSkgPT0gTlVMTCkgewotCQkJZGV2ZnNfcHV0KGRpcik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoU19JU0xOSyhkZS0+bW9kZSkgJiYgdHJhdmVyc2Vfc3ltbGluaykgewkvKiAgTmVlZCB0byBmb2xsb3cgdGhlIGxpbms6IHRoaXMgaXMgYSBzdGFjayBjaG9tcGVyICAqLwotCQkJLyogRklYTUUgd2hhdCBpZiBpdCBwdXRzIG91dHNpZGUgb2YgbW91bnRlZCB0cmVlPyAqLwotCQkJbGluayA9IF9kZXZmc193YWxrX3BhdGgoZGlyLCBkZS0+dS5zeW1saW5rLmxpbmtuYW1lLAotCQkJCQkJZGUtPnUuc3ltbGluay5sZW5ndGgsIFRSVUUpOwotCQkJZGV2ZnNfcHV0KGRlKTsKLQkJCWlmICghbGluaykgewotCQkJCWRldmZzX3B1dChkaXIpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJZGUgPSBsaW5rOwotCQl9Ci0JCWRldmZzX3B1dChkaXIpOwotCQlkaXIgPSBkZTsKLQkJaWYgKG5hbWVbbmV4dF9wb3NdID09ICcvJykKLQkJCSsrbmV4dF9wb3M7Ci0JfQotCXJldHVybiBkaXI7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX3dhbGtfcGF0aCAgKi8KLQotLyoqCi0gKglfZGV2ZnNfZmluZF9lbnRyeSAtIEZpbmQgYSBkZXZmcyBlbnRyeS4KLSAqCUBkaXI6IFRoZSBoYW5kbGUgdG8gdGhlIHBhcmVudCBkZXZmcyBkaXJlY3RvcnkgZW50cnkuIElmIHRoaXMgaXMgJU5VTEwgdGhlCi0gKgkJbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgZGV2ZnMuCi0gKglAbmFtZTogVGhlIG5hbWUgb2YgdGhlIGVudHJ5LiBUaGlzIG1heSBiZSAlTlVMTC4KLSAqCUB0cmF2ZXJzZV9zeW1saW5rOiBJZiAlVFJVRSB0aGVuIHN5bWJvbGljIGxpbmtzIGFyZSB0cmF2ZXJzZWQuCi0gKgotICoJUmV0dXJucyB0aGUgZGV2ZnNfZW50cnkgcG9pbnRlciBvbiBzdWNjZXNzLCBlbHNlICVOVUxMLiBBbiBpbXBsaWNpdAotICoJZGV2ZnNfZ2V0KCkgaXMgcGVyZm9ybWVkLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGV2ZnNfZW50cnkgKl9kZXZmc19maW5kX2VudHJ5KGRldmZzX2hhbmRsZV90IGRpciwKLQkJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgIGludCB0cmF2ZXJzZV9zeW1saW5rKQotewotCXVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOwotCi0JaWYgKG5hbWVbMF0gPT0gJy8nKSB7Ci0JCS8qICBTa2lwIGxlYWRpbmcgcGF0aG5hbWUgY29tcG9uZW50ICAqLwotCQlpZiAobmFtZWxlbiA8IDIpIHsKLQkJCVBSSU5USygiKCVzKTogdG9vIHNob3J0XG4iLCBuYW1lKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWZvciAoKytuYW1lLCAtLW5hbWVsZW47ICgqbmFtZSAhPSAnLycpICYmIChuYW1lbGVuID4gMCk7Ci0JCSAgICAgKytuYW1lLCAtLW5hbWVsZW4pIDsKLQkJaWYgKG5hbWVsZW4gPCAyKSB7Ci0JCQlQUklOVEsoIiglcyk6IHRvbyBzaG9ydFxuIiwgbmFtZSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQkrK25hbWU7Ci0JCS0tbmFtZWxlbjsKLQl9Ci0JcmV0dXJuIF9kZXZmc193YWxrX3BhdGgoZGlyLCBuYW1lLCBuYW1lbGVuLCB0cmF2ZXJzZV9zeW1saW5rKTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBfZGV2ZnNfZmluZF9lbnRyeSAgKi8KLQotc3RhdGljIHN0cnVjdCBkZXZmc19lbnRyeSAqZ2V0X2RldmZzX2VudHJ5X2Zyb21fdmZzX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKGlub2RlID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCVZFUklGWV9FTlRSWSgoc3RydWN0IGRldmZzX2VudHJ5ICopaW5vZGUtPnUuZ2VuZXJpY19pcCk7Ci0JcmV0dXJuIGlub2RlLT51LmdlbmVyaWNfaXA7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZ2V0X2RldmZzX2VudHJ5X2Zyb21fdmZzX2lub2RlICAqLwotCi0vKioKLSAqCWZyZWVfZGVudHJ5IC0gRnJlZSB0aGUgZGVudHJ5IGZvciBhIGRldmljZSBlbnRyeSBhbmQgaW52YWxpZGF0ZSBpbm9kZS4KLSAqCUBkZTogVGhlIGVudHJ5LgotICoKLSAqCVRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgZW50cnkgaGFzIGJlZW4gdW5ob29rZWQgZnJvbSBpdHMKLSAqCSBwYXJlbnQgZGlyZWN0b3J5LgotICovCi0KLXN0YXRpYyB2b2lkIGZyZWVfZGVudHJ5KHN0cnVjdCBkZXZmc19lbnRyeSAqZGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGUtPmlub2RlLmRlbnRyeTsKLQotCWlmICghZGVudHJ5KQotCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JZGdldF9sb2NrZWQoZGVudHJ5KTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCS8qICBGb3JjZWZ1bGx5IHJlbW92ZSB0aGUgaW5vZGUgICovCi0JaWYgKGRlbnRyeS0+ZF9pbm9kZSAhPSBOVUxMKQotCQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPSAwOwotCWRfZHJvcChkZW50cnkpOwotCWRwdXQoZGVudHJ5KTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBmcmVlX2RlbnRyeSAgKi8KLQotLyoqCi0gKglpc19kZXZmc2Rfb3JfY2hpbGQgLSBUZXN0IGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgZGV2ZnNkIG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4uCi0gKglAZnNfaW5mbzogVGhlIGZpbGVzeXN0ZW0gaW5mb3JtYXRpb24uCi0gKgotICoJUmV0dXJucyAlVFJVRSBpZiBkZXZmc2Qgb3IgY2hpbGQsIGVsc2UgJUZBTFNFLgotICovCi0KLXN0YXRpYyBpbnQgaXNfZGV2ZnNkX29yX2NoaWxkKHN0cnVjdCBmc19pbmZvICpmc19pbmZvKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQ7Ci0KLQlpZiAocCA9PSBmc19pbmZvLT5kZXZmc2RfdGFzaykKLQkJcmV0dXJuIChUUlVFKTsKLQlpZiAocHJvY2Vzc19ncm91cChwKSA9PSBmc19pbmZvLT5kZXZmc2RfcGdycCkKLQkJcmV0dXJuIChUUlVFKTsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCWZvciAoOyBwICE9ICZpbml0X3Rhc2s7IHAgPSBwLT5yZWFsX3BhcmVudCkgewotCQlpZiAocCA9PSBmc19pbmZvLT5kZXZmc2RfdGFzaykgewotCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCQkJcmV0dXJuIChUUlVFKTsKLQkJfQotCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JcmV0dXJuIChGQUxTRSk7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gaXNfZGV2ZnNkX29yX2NoaWxkICAqLwotCi0vKioKLSAqCWRldmZzZF9xdWV1ZV9lbXB0eSAtIFRlc3QgaWYgZGV2ZnNkIGhhcyB3b3JrIHBlbmRpbmcgaW4gaXRzIGV2ZW50IHF1ZXVlLgotICoJQGZzX2luZm86IFRoZSBmaWxlc3lzdGVtIGluZm9ybWF0aW9uLgotICoKLSAqCVJldHVybnMgJVRSVUUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCBlbHNlICVGQUxTRS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBkZXZmc2RfcXVldWVfZW1wdHkoc3RydWN0IGZzX2luZm8gKmZzX2luZm8pCi17Ci0JcmV0dXJuIChmc19pbmZvLT5kZXZmc2RfbGFzdF9ldmVudCkgPyBGQUxTRSA6IFRSVUU7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNkX3F1ZXVlX2VtcHR5ICAqLwotCi0vKioKLSAqCXdhaXRfZm9yX2RldmZzZF9maW5pc2hlZCAtIFdhaXQgZm9yIGRldmZzZCB0byBmaW5pc2ggcHJvY2Vzc2luZyBpdHMgZXZlbnQgcXVldWUuCi0gKglAZnNfaW5mbzogVGhlIGZpbGVzeXN0ZW0gaW5mb3JtYXRpb24uCi0gKgotICoJUmV0dXJucyAlVFJVRSBpZiBubyBtb3JlIHdhaXRpbmcgd2lsbCBiZSByZXF1aXJlZCwgZWxzZSAlRkFMU0UuCi0gKi8KLQotc3RhdGljIGludCB3YWl0X2Zvcl9kZXZmc2RfZmluaXNoZWQoc3RydWN0IGZzX2luZm8gKmZzX2luZm8pCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlpZiAoZnNfaW5mby0+ZGV2ZnNkX3Rhc2sgPT0gTlVMTCkKLQkJcmV0dXJuIChUUlVFKTsKLQlpZiAoZGV2ZnNkX3F1ZXVlX2VtcHR5KGZzX2luZm8pICYmIGZzX2luZm8tPmRldmZzZF9zbGVlcGluZykKLQkJcmV0dXJuIFRSVUU7Ci0JaWYgKGlzX2RldmZzZF9vcl9jaGlsZChmc19pbmZvKSkKLQkJcmV0dXJuIChGQUxTRSk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlKCZmc19pbmZvLT5yZXZhbGlkYXRlX3dhaXRfcXVldWUsICZ3YWl0KTsKLQlpZiAoIWRldmZzZF9xdWV1ZV9lbXB0eShmc19pbmZvKSB8fCAhZnNfaW5mby0+ZGV2ZnNkX3NsZWVwaW5nKQotCQlpZiAoZnNfaW5mby0+ZGV2ZnNkX3Rhc2spCi0JCQlzY2hlZHVsZSgpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZmc19pbmZvLT5yZXZhbGlkYXRlX3dhaXRfcXVldWUsICZ3YWl0KTsKLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmV0dXJuIChUUlVFKTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiB3YWl0X2Zvcl9kZXZmc2RfZmluaXNoZWQgICovCi0KLS8qKgotICoJZGV2ZnNkX25vdGlmeV9kZSAtIE5vdGlmeSB0aGUgZGV2ZnNkIGRhZW1vbiBvZiBhIGNoYW5nZS4KLSAqCUBkZTogVGhlIGRldmZzIGVudHJ5IHRoYXQgaGFzIGNoYW5nZWQuIFRoaXMgYW5kIGFsbCBwYXJlbnQgZW50cmllcyB3aWxsCi0gKiAgICAgICAgICAgIGhhdmUgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBpbmNyZW1lbnRlZCBpZiB0aGUgZXZlbnQgd2FzIHF1ZXVlZC4KLSAqCUB0eXBlOiBUaGUgdHlwZSBvZiBjaGFuZ2UuCi0gKglAbW9kZTogVGhlIG1vZGUgb2YgdGhlIGVudHJ5LgotICoJQHVpZDogVGhlIHVzZXIgSUQuCi0gKglAZ2lkOiBUaGUgZ3JvdXAgSUQuCi0gKglAZnNfaW5mbzogVGhlIGZpbGVzeXN0ZW0gaW5mby4KLSAqCi0gKglSZXR1cm5zICVUUlVFIGlmIGFuIGV2ZW50IHdhcyBxdWV1ZWQgYW5kIGRldmZzZCB3b2tlbiB1cCwgZWxzZSAlRkFMU0UuCi0gKi8KLQotc3RhdGljIGludCBkZXZmc2Rfbm90aWZ5X2RlKHN0cnVjdCBkZXZmc19lbnRyeSAqZGUsCi0JCQkgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgdW1vZGVfdCBtb2RlLAotCQkJICAgIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBzdHJ1Y3QgZnNfaW5mbyAqZnNfaW5mbykKLXsKLQlzdHJ1Y3QgZGV2ZnNkX2J1Zl9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGRldmZzX2VudHJ5ICpjdXJyOwotCi0JaWYgKCEoZnNfaW5mby0+ZGV2ZnNkX2V2ZW50X21hc2sgJiAoMSA8PCB0eXBlKSkpCi0JCXJldHVybiAoRkFMU0UpOwotCWlmICgoZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jKGRldmZzZF9idWZfY2FjaGUsIFNMQUJfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlhdG9taWNfaW5jKCZmc19pbmZvLT5kZXZmc2Rfb3ZlcnJ1bl9jb3VudCk7Ci0JCXJldHVybiAoRkFMU0UpOwotCX0KLQlmb3IgKGN1cnIgPSBkZTsgY3VyciAhPSBOVUxMOyBjdXJyID0gY3Vyci0+cGFyZW50KQotCQlkZXZmc19nZXQoY3Vycik7Ci0JZW50cnktPmRlID0gZGU7Ci0JZW50cnktPnR5cGUgPSB0eXBlOwotCWVudHJ5LT5tb2RlID0gbW9kZTsKLQllbnRyeS0+dWlkID0gdWlkOwotCWVudHJ5LT5naWQgPSBnaWQ7Ci0JZW50cnktPm5leHQgPSBOVUxMOwotCXNwaW5fbG9jaygmZnNfaW5mby0+ZGV2ZnNkX2J1ZmZlcl9sb2NrKTsKLQlpZiAoIWZzX2luZm8tPmRldmZzZF9maXJzdF9ldmVudCkKLQkJZnNfaW5mby0+ZGV2ZnNkX2ZpcnN0X2V2ZW50ID0gZW50cnk7Ci0JaWYgKGZzX2luZm8tPmRldmZzZF9sYXN0X2V2ZW50KQotCQlmc19pbmZvLT5kZXZmc2RfbGFzdF9ldmVudC0+bmV4dCA9IGVudHJ5OwotCWZzX2luZm8tPmRldmZzZF9sYXN0X2V2ZW50ID0gZW50cnk7Ci0Jc3Bpbl91bmxvY2soJmZzX2luZm8tPmRldmZzZF9idWZmZXJfbG9jayk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmc19pbmZvLT5kZXZmc2Rfd2FpdF9xdWV1ZSk7Ci0JcmV0dXJuIChUUlVFKTsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc2Rfbm90aWZ5X2RlICAqLwotCi0vKioKLSAqCWRldmZzZF9ub3RpZnkgLSBOb3RpZnkgdGhlIGRldmZzZCBkYWVtb24gb2YgYSBjaGFuZ2UuCi0gKglAZGU6IFRoZSBkZXZmcyBlbnRyeSB0aGF0IGhhcyBjaGFuZ2VkLgotICoJQHR5cGU6IFRoZSB0eXBlIG9mIGNoYW5nZSBldmVudC4KLSAqCUB3YWl0OiBJZiBUUlVFLCB0aGUgZnVuY3Rpb24gd2FpdHMgZm9yIHRoZSBkYWVtb24gdG8gZmluaXNoIHByb2Nlc3NpbmcKLSAqCQl0aGUgZXZlbnQuCi0gKi8KLQotc3RhdGljIHZvaWQgZGV2ZnNkX25vdGlmeShzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlLCB1bnNpZ25lZCBzaG9ydCB0eXBlKQotewotCWRldmZzZF9ub3RpZnlfZGUoZGUsIHR5cGUsIGRlLT5tb2RlLCBjdXJyZW50LT5ldWlkLAotCQkJIGN1cnJlbnQtPmVnaWQsICZmc19pbmZvKTsKLX0KLQotc3RhdGljIGludCBkZXZmc19ta19kZXYoZGV2X3QgZGV2LCB1bW9kZV90IG1vZGUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQotewotCXN0cnVjdCBkZXZmc19lbnRyeSAqZGlyID0gTlVMTCwgKmRlOwotCWNoYXIgYnVmWzY0XTsKLQlpbnQgZXJyb3IsIG47Ci0KLQluID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7Ci0JaWYgKG4gPj0gc2l6ZW9mKGJ1ZikgfHwgIWJ1ZlswXSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBmb3JtYXQgc3RyaW5nICVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBmbXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZSA9IF9kZXZmc19wcmVwYXJlX2xlYWYoJmRpciwgYnVmLCBtb2RlKTsKLQlpZiAoIWRlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZCBub3QgcHJlcGFyZSBsZWFmIGZvciAlc1xuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgYnVmKTsKLQkJcmV0dXJuIC1FTk9NRU07CS8qIGNvdWxkIGJlIG1vcmUgYWNjdXJhdGUuLi4gKi8KLQl9Ci0KLQlkZS0+dS5kZXYgPSBkZXY7Ci0KLQllcnJvciA9IF9kZXZmc19hcHBlbmRfZW50cnkoZGlyLCBkZSwgTlVMTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZCBub3QgYXBwZW5kIHRvIHBhcmVudCBmb3IgJXNcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGJ1Zik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRldmZzZF9ub3RpZnkoZGUsIERFVkZTRF9OT1RJRllfUkVHSVNURVJFRCk7Ci0gICAgICBvdXQ6Ci0JZGV2ZnNfcHV0KGRpcik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1pbnQgZGV2ZnNfbWtfYmRldihkZXZfdCBkZXYsIHVtb2RlX3QgbW9kZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcmdzOwotCi0JaWYgKCFTX0lTQkxLKG1vZGUpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnZhbGlkZSBtb2RlICgldSkgZm9yICVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBtb2RlLCBmbXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXJldHVybiBkZXZmc19ta19kZXYoZGV2LCBtb2RlLCBmbXQsIGFyZ3MpOwotfQotCi1FWFBPUlRfU1lNQk9MKGRldmZzX21rX2JkZXYpOwotCi1pbnQgZGV2ZnNfbWtfY2RldihkZXZfdCBkZXYsIHVtb2RlX3QgbW9kZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcmdzOwotCi0JaWYgKCFTX0lTQ0hSKG1vZGUpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnZhbGlkZSBtb2RlICgldSkgZm9yICVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBtb2RlLCBmbXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXJldHVybiBkZXZmc19ta19kZXYoZGV2LCBtb2RlLCBmbXQsIGFyZ3MpOwotfQotCi1FWFBPUlRfU1lNQk9MKGRldmZzX21rX2NkZXYpOwotCi0vKioKLSAqCV9kZXZmc191bmhvb2sgLSBVbmhvb2sgYSBkZXZpY2UgZW50cnkgZnJvbSBpdHMgcGFyZW50cyBsaXN0Ci0gKglAZGU6IFRoZSBlbnRyeSB0byB1bmhvb2suCi0gKgotICoJUmV0dXJucyAlVFJVRSBpZiB0aGUgZW50cnkgd2FzIHVuaG9va2VkLCBlbHNlICVGQUxTRSBpZiBpdCB3YXMKLSAqCQlwcmV2aW91c2x5IHVuaG9va2VkLgotICoJVGhlIGNhbGxlciBtdXN0IGhhdmUgYSB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICovCi0KLXN0YXRpYyBpbnQgX2RldmZzX3VuaG9vayhzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlKQotewotCXN0cnVjdCBkZXZmc19lbnRyeSAqcGFyZW50OwotCi0JaWYgKCFkZSB8fCAoZGUtPnByZXYgPT0gZGUpKQotCQlyZXR1cm4gRkFMU0U7Ci0JcGFyZW50ID0gZGUtPnBhcmVudDsKLQlpZiAoZGUtPnByZXYgPT0gTlVMTCkKLQkJcGFyZW50LT51LmRpci5maXJzdCA9IGRlLT5uZXh0OwotCWVsc2UKLQkJZGUtPnByZXYtPm5leHQgPSBkZS0+bmV4dDsKLQlpZiAoZGUtPm5leHQgPT0gTlVMTCkKLQkJcGFyZW50LT51LmRpci5sYXN0ID0gZGUtPnByZXY7Ci0JZWxzZQotCQlkZS0+bmV4dC0+cHJldiA9IGRlLT5wcmV2OwotCWRlLT5wcmV2ID0gZGU7CQkvKiAgSW5kaWNhdGUgd2UncmUgdW5ob29rZWQgICAgICAgICAgICAgICAgICAgICAgKi8KLQlkZS0+bmV4dCA9IE5VTEw7CS8qICBGb3JjZSBlYXJseSB0ZXJtaW5hdGlvbiBmb3IgPGRldmZzX3JlYWRkaXI+ICAqLwotCXJldHVybiBUUlVFOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIF9kZXZmc191bmhvb2sgICovCi0KLS8qKgotICoJX2RldmZzX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIGEgZGV2aWNlIGVudHJ5IGZyb20gaXRzIHBhcmVudC4KLSAqCUBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICoJQGRlOiBUaGUgZW50cnkgdG8gdW5yZWdpc3Rlci4KLSAqCi0gKglUaGUgY2FsbGVyIG11c3QgaGF2ZSBhIHdyaXRlIGxvY2sgb24gdGhlIHBhcmVudCBkaXJlY3RvcnksIHdoaWNoIGlzCi0gKgl1bmxvY2tlZCBieSB0aGlzIGZ1bmN0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIF9kZXZmc191bnJlZ2lzdGVyKHN0cnVjdCBkZXZmc19lbnRyeSAqZGlyLCBzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlKQotewotCWludCB1bmhvb2tlZCA9IF9kZXZmc191bmhvb2soZGUpOwotCi0Jd3JpdGVfdW5sb2NrKCZkaXItPnUuZGlyLmxvY2spOwotCWlmICghdW5ob29rZWQpCi0JCXJldHVybjsKLQlkZXZmc19nZXQoZGlyKTsKLQlkZXZmc2Rfbm90aWZ5KGRlLCBERVZGU0RfTk9USUZZX1VOUkVHSVNURVJFRCk7Ci0JZnJlZV9kZW50cnkoZGUpOwotCWRldmZzX3B1dChkaXIpOwotCWlmICghU19JU0RJUihkZS0+bW9kZSkpCi0JCXJldHVybjsKLQl3aGlsZSAoVFJVRSkgewkJLyogIFJlY3Vyc2l2ZWx5IHVucmVnaXN0ZXI6IHRoaXMgaXMgYSBzdGFjayBjaG9tcGVyICAqLwotCQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKmNoaWxkOwotCi0JCXdyaXRlX2xvY2soJmRlLT51LmRpci5sb2NrKTsKLQkJZGUtPnUuZGlyLm5vX21vcmVfYWRkaXRpb25zID0gVFJVRTsKLQkJY2hpbGQgPSBkZS0+dS5kaXIuZmlyc3Q7Ci0JCVZFUklGWV9FTlRSWShjaGlsZCk7Ci0JCV9kZXZmc191bnJlZ2lzdGVyKGRlLCBjaGlsZCk7Ci0JCWlmICghY2hpbGQpCi0JCQlicmVhazsKLQkJRFBSSU5USyhERUJVR19VTlJFR0lTVEVSLCAiKCVzKTogY2hpbGQ6ICVwICByZWZjb3VudDogJWRcbiIsCi0JCQljaGlsZC0+bmFtZSwgY2hpbGQsIGF0b21pY19yZWFkKCZjaGlsZC0+cmVmY291bnQpKTsKLQkJZGV2ZnNfcHV0KGNoaWxkKTsKLQl9Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gX2RldmZzX3VucmVnaXN0ZXIgICovCi0KLXN0YXRpYyBpbnQgZGV2ZnNfZG9fc3ltbGluayhkZXZmc19oYW5kbGVfdCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgY29uc3QgY2hhciAqbGluaywgZGV2ZnNfaGFuZGxlX3QgKiBoYW5kbGUpCi17Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBpbnQgbGlua2xlbmd0aDsKLQljaGFyICpuZXdsaW5rOwotCXN0cnVjdCBkZXZmc19lbnRyeSAqZGU7Ci0KLQlpZiAoaGFuZGxlICE9IE5VTEwpCi0JCSpoYW5kbGUgPSBOVUxMOwotCWlmIChuYW1lID09IE5VTEwpIHsKLQkJUFJJTlRLKCIoKTogTlVMTCBuYW1lIHBvaW50ZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGxpbmsgPT0gTlVMTCkgewotCQlQUklOVEsoIiglcyk6IE5VTEwgbGluayBwb2ludGVyXG4iLCBuYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWxpbmtsZW5ndGggPSBzdHJsZW4obGluayk7Ci0JaWYgKChuZXdsaW5rID0ga21hbGxvYyhsaW5rbGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShuZXdsaW5rLCBsaW5rLCBsaW5rbGVuZ3RoKTsKLQluZXdsaW5rW2xpbmtsZW5ndGhdID0gJ1wwJzsKLQlpZiAoKGRlID0gX2RldmZzX3ByZXBhcmVfbGVhZigmZGlyLCBuYW1lLCBTX0lGTE5LIHwgU19JUlVHTyB8IFNfSVhVR08pKQotCSAgICA9PSBOVUxMKSB7Ci0JCVBSSU5USygiKCVzKTogY291bGQgbm90IHByZXBhcmUgbGVhZlxuIiwgbmFtZSk7Ci0JCWtmcmVlKG5ld2xpbmspOwotCQlyZXR1cm4gLUVOT1RESVI7Ci0JfQotCWRlLT5pbmZvID0gTlVMTDsKLQlkZS0+dS5zeW1saW5rLmxpbmtuYW1lID0gbmV3bGluazsKLQlkZS0+dS5zeW1saW5rLmxlbmd0aCA9IGxpbmtsZW5ndGg7Ci0JaWYgKChlcnIgPSBfZGV2ZnNfYXBwZW5kX2VudHJ5KGRpciwgZGUsIE5VTEwpKSAhPSAwKSB7Ci0JCVBSSU5USygiKCVzKTogY291bGQgbm90IGFwcGVuZCB0byBwYXJlbnQsIGVycjogJWRcbiIsIG5hbWUsCi0JCSAgICAgICBlcnIpOwotCQlkZXZmc19wdXQoZGlyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JZGV2ZnNfcHV0KGRpcik7Ci0jaWZkZWYgQ09ORklHX0RFVkZTX0RFQlVHCi0Jc3Bpbl9sb2NrKCZzdGF0X2xvY2spOwotCXN0YXRfbnVtX2J5dGVzICs9IGxpbmtsZW5ndGggKyAxOwotCXNwaW5fdW5sb2NrKCZzdGF0X2xvY2spOwotI2VuZGlmCi0JaWYgKGhhbmRsZSAhPSBOVUxMKQotCQkqaGFuZGxlID0gZGU7Ci0JcmV0dXJuIDA7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZG9fc3ltbGluayAgKi8KLQotLyoqCi0gKglkZXZmc19ta19zeW1saW5rIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsgaW4gdGhlIGRldmZzIG5hbWVzcGFjZS4KLSAqCUBmcm9tOiBUaGUgbmFtZSBvZiB0aGUgZW50cnkuCi0gKglAdG86IE5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uCi0gKgotICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLgotICovCi0KLWludCBkZXZmc19ta19zeW1saW5rKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQotewotCWRldmZzX2hhbmRsZV90IGRlOwotCWludCBlcnI7Ci0KLQllcnIgPSBkZXZmc19kb19zeW1saW5rKE5VTEwsIGZyb20sIHRvLCAmZGUpOwotCWlmICghZXJyKSB7Ci0JCWRlLT52ZnMgPSBUUlVFOwotCQlkZXZmc2Rfbm90aWZ5KGRlLCBERVZGU0RfTk9USUZZX1JFR0lTVEVSRUQpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgotICoJZGV2ZnNfbWtfZGlyIC0gQ3JlYXRlIGEgZGlyZWN0b3J5IGluIHRoZSBkZXZmcyBuYW1lc3BhY2UuCi0gKgkJbmV3IG5hbWUgaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGRldmZzLgotICoJQGZtdDogVGhlIG5hbWUgb2YgdGhlIGVudHJ5LgotICoKLSAqCVVzZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiBUaGUgZGV2ZnNfcmVnaXN0ZXIoKSBmdW5jdGlvbgotICoJd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9uCi0gKglpcyBwcm92aWRlZCBmb3IgZWZmaWNpZW5jeSByZWFzb25zLCBhcyBpdCBwcm92aWRlcyBhIGhhbmRsZSB0byBhIGRpcmVjdG9yeS4KLSAqCU9uIGZhaWx1cmUgJU5VTEwgaXMgcmV0dXJuZWQuCi0gKi8KLQotaW50IGRldmZzX21rX2Rpcihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRpciA9IE5VTEwsICpkZSA9IE5VTEwsICpvbGQ7Ci0JY2hhciBidWZbNjRdOwotCXZhX2xpc3QgYXJnczsKLQlpbnQgZXJyb3IsIG47Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCW4gPSB2c25wcmludGYoYnVmLCA2NCwgZm10LCBhcmdzKTsKLQlpZiAobiA+PSA2NCB8fCAhYnVmWzBdKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnZhbGlkIGFyZ3VtZW50LiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRlID0gX2RldmZzX3ByZXBhcmVfbGVhZigmZGlyLCBidWYsIE1PREVfRElSKTsKLQlpZiAoIWRlKSB7Ci0JCVBSSU5USygiKCVzKTogY291bGQgbm90IHByZXBhcmUgbGVhZlxuIiwgYnVmKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZXJyb3IgPSBfZGV2ZnNfYXBwZW5kX2VudHJ5KGRpciwgZGUsICZvbGQpOwotCWlmIChlcnJvciA9PSAtRUVYSVNUICYmIFNfSVNESVIob2xkLT5tb2RlKSkgewotCQkvKgotCQkgKiBkZXZmc19ta19kaXIoKSBvZiBhbiBhbHJlYWR5LWV4aXN0aW5nIGRpcmVjdG9yeSB3aWxsCi0JCSAqIHJldHVybiBzdWNjZXNzLgotCQkgKi8KLQkJZXJyb3IgPSAwOwotCQlnb3RvIG91dF9wdXQ7Ci0JfSBlbHNlIGlmIChlcnJvcikgewotCQlQUklOVEsoIiglcyk6IGNvdWxkIG5vdCBhcHBlbmQgdG8gZGlyOiAlcCBcIiVzXCJcbiIsCi0JCSAgICAgICBidWYsIGRpciwgZGlyLT5uYW1lKTsKLQkJZGV2ZnNfcHV0KG9sZCk7Ci0JCWdvdG8gb3V0X3B1dDsKLQl9Ci0KLQlkZXZmc2Rfbm90aWZ5KGRlLCBERVZGU0RfTk9USUZZX1JFR0lTVEVSRUQpOwotCi0gICAgICBvdXRfcHV0OgotCWRldmZzX3B1dChkaXIpOwotCXJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBkZXZmc19yZW1vdmUoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JY2hhciBidWZbNjRdOwotCXZhX2xpc3QgYXJnczsKLQlpbnQgbjsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOwotCWlmIChuIDwgc2l6ZW9mKGJ1ZikgJiYgYnVmWzBdKSB7Ci0JCWRldmZzX2hhbmRsZV90IGRlID0gX2RldmZzX2ZpbmRfZW50cnkoTlVMTCwgYnVmLCAwKTsKLQotCQlpZiAoIWRlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBub3QgZm91bmQsIGNhbm5vdCByZW1vdmVcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBidWYpOwotCQkJZHVtcF9zdGFjaygpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJd3JpdGVfbG9jaygmZGUtPnBhcmVudC0+dS5kaXIubG9jayk7Ci0JCV9kZXZmc191bnJlZ2lzdGVyKGRlLT5wYXJlbnQsIGRlKTsKLQkJZGV2ZnNfcHV0KGRlKTsKLQkJZGV2ZnNfcHV0KGRlKTsKLQl9Ci19Ci0KLS8qKgotICoJZGV2ZnNfZ2VuZXJhdGVfcGF0aCAtIEdlbmVyYXRlIGEgcGF0aG5hbWUgZm9yIGFuIGVudHJ5LCByZWxhdGl2ZSB0byB0aGUgZGV2ZnMgcm9vdC4KLSAqCUBkZTogVGhlIGRldmZzIGVudHJ5LgotICoJQHBhdGg6IFRoZSBidWZmZXIgdG8gd3JpdGUgdGhlIHBhdGhuYW1lIHRvLiBUaGUgcGF0aG5hbWUgYW5kICdcMCcKLSAqCQl0ZXJtaW5hdG9yIHdpbGwgYmUgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gKglAYnVmbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuCi0gKgotICoJUmV0dXJucyB0aGUgb2Zmc2V0IGluIHRoZSBidWZmZXIgd2hlcmUgdGhlIHBhdGhuYW1lIHN0YXJ0cyBvbiBzdWNjZXNzLAotICoJZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gKi8KLQotc3RhdGljIGludCBkZXZmc19nZW5lcmF0ZV9wYXRoKGRldmZzX2hhbmRsZV90IGRlLCBjaGFyICpwYXRoLCBpbnQgYnVmbGVuKQotewotCWludCBwb3M7Ci0jZGVmaW5lIE5BTUVPRihkZSkgKCAoZGUpLT5tb2RlID8gKGRlKS0+bmFtZSA6IChkZSktPnUubmFtZSApCi0KLQlpZiAoZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JVkVSSUZZX0VOVFJZKGRlKTsKLQlpZiAoZGUtPm5hbWVsZW4gPj0gYnVmbGVuKQotCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsJLyogIE11c3QgYmUgZmlyc3QgICAgICAgKi8KLQlwYXRoW2J1ZmxlbiAtIDFdID0gJ1wwJzsKLQlpZiAoZGUtPnBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gYnVmbGVuIC0gMTsJLyogIERvbid0IHByZXBlbmQgcm9vdCAgKi8KLQlwb3MgPSBidWZsZW4gLSBkZS0+bmFtZWxlbiAtIDE7Ci0JbWVtY3B5KHBhdGggKyBwb3MsIE5BTUVPRihkZSksIGRlLT5uYW1lbGVuKTsKLQlmb3IgKGRlID0gZGUtPnBhcmVudDsgZGUtPnBhcmVudCAhPSBOVUxMOyBkZSA9IGRlLT5wYXJlbnQpIHsKLQkJaWYgKHBvcyAtIGRlLT5uYW1lbGVuIC0gMSA8IDApCi0JCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKLQkJcGF0aFstLXBvc10gPSAnLyc7Ci0JCXBvcyAtPSBkZS0+bmFtZWxlbjsKLQkJbWVtY3B5KHBhdGggKyBwb3MsIE5BTUVPRihkZSksIGRlLT5uYW1lbGVuKTsKLQl9Ci0JcmV0dXJuIHBvczsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19nZW5lcmF0ZV9wYXRoICAqLwotCi0vKioKLSAqCWRldmZzX3NldHVwIC0gUHJvY2VzcyBrZXJuZWwgYm9vdCBvcHRpb25zLgotICoJQHN0cjogVGhlIGJvb3Qgb3B0aW9ucyBhZnRlciB0aGUgImRldmZzPSIuCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgZGV2ZnNfc2V0dXAoY2hhciAqc3RyKQotewotCXN0YXRpYyBzdHJ1Y3QgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBpbnQgbWFzazsKLQkJdW5zaWduZWQgaW50ICpvcHQ7Ci0JfSBkZXZmc19vcHRpb25zX3RhYltdIF9faW5pdGRhdGEgPSB7Ci0jaWZkZWYgQ09ORklHX0RFVkZTX0RFQlVHCi0JCXsKLQkJImRhbGwiLCBERUJVR19BTEwsICZkZXZmc19kZWJ1Z19pbml0fSwgewotCQkiZG1vZCIsIERFQlVHX01PRFVMRV9MT0FELCAmZGV2ZnNfZGVidWdfaW5pdH0sIHsKLQkJImRyZWciLCBERUJVR19SRUdJU1RFUiwgJmRldmZzX2RlYnVnX2luaXR9LCB7Ci0JCSJkdW5yZWciLCBERUJVR19VTlJFR0lTVEVSLCAmZGV2ZnNfZGVidWdfaW5pdH0sIHsKLQkJImRmcmVlIiwgREVCVUdfRlJFRSwgJmRldmZzX2RlYnVnX2luaXR9LCB7Ci0JCSJkaWdldCIsIERFQlVHX0lfR0VULCAmZGV2ZnNfZGVidWdfaW5pdH0sIHsKLQkJImRjaGFuZ2UiLCBERUJVR19TRVRfRkxBR1MsICZkZXZmc19kZWJ1Z19pbml0fSwgewotCQkiZHNyZWFkIiwgREVCVUdfU19SRUFELCAmZGV2ZnNfZGVidWdfaW5pdH0sIHsKLQkJImRpY2hhbmdlIiwgREVCVUdfSV9DSEFOR0UsICZkZXZmc19kZWJ1Z19pbml0fSwgewotCQkiZGlta25vZCIsIERFQlVHX0lfTUtOT0QsICZkZXZmc19kZWJ1Z19pbml0fSwgewotCQkiZGlsb29rdXAiLCBERUJVR19JX0xPT0tVUCwgJmRldmZzX2RlYnVnX2luaXR9LCB7Ci0JCSJkaXVubGluayIsIERFQlVHX0lfVU5MSU5LLCAmZGV2ZnNfZGVidWdfaW5pdH0sCi0jZW5kaWYJCQkJLyogIENPTkZJR19ERVZGU19ERUJVRyAgKi8KLQkJewotCQkibW91bnQiLCBPUFRJT05fTU9VTlQsICZib290X29wdGlvbnN9LCB7Ci0JCU5VTEwsIDAsIE5VTEx9Ci0JfTsKLQotCXdoaWxlICgoKnN0ciAhPSAnXDAnKSAmJiAhaXNzcGFjZSgqc3RyKSkgewotCQlpbnQgaSwgZm91bmQgPSAwLCBpbnZlcnQgPSAwOwotCi0JCWlmIChzdHJuY21wKHN0ciwgIm5vIiwgMikgPT0gMCkgewotCQkJaW52ZXJ0ID0gMTsKLQkJCXN0ciArPSAyOwotCQl9Ci0JCWZvciAoaSA9IDA7IGRldmZzX29wdGlvbnNfdGFiW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7Ci0JCQlpbnQgbGVuID0gc3RybGVuKGRldmZzX29wdGlvbnNfdGFiW2ldLm5hbWUpOwotCi0JCQlpZiAoc3RybmNtcChzdHIsIGRldmZzX29wdGlvbnNfdGFiW2ldLm5hbWUsIGxlbikgPT0gMCkgewotCQkJCWlmIChpbnZlcnQpCi0JCQkJCSpkZXZmc19vcHRpb25zX3RhYltpXS5vcHQgJj0KLQkJCQkJICAgIH5kZXZmc19vcHRpb25zX3RhYltpXS5tYXNrOwotCQkJCWVsc2UKLQkJCQkJKmRldmZzX29wdGlvbnNfdGFiW2ldLm9wdCB8PQotCQkJCQkgICAgZGV2ZnNfb3B0aW9uc190YWJbaV0ubWFzazsKLQkJCQlzdHIgKz0gbGVuOwotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKQotCQkJcmV0dXJuIDA7CS8qICBObyBtYXRjaCAgICAgICAgICovCi0JCWlmICgqc3RyICE9ICcsJykKLQkJCXJldHVybiAwOwkvKiAgTm8gbW9yZSBvcHRpb25zICAqLwotCQkrK3N0cjsKLQl9Ci0JcmV0dXJuIDE7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfc2V0dXAgICovCi0KLV9fc2V0dXAoImRldmZzPSIsIGRldmZzX3NldHVwKTsKLQotRVhQT1JUX1NZTUJPTChkZXZmc19ta19kaXIpOwotRVhQT1JUX1NZTUJPTChkZXZmc19yZW1vdmUpOwotCi0vKioKLSAqCXRyeV9tb2Rsb2FkIC0gTm90aWZ5IGRldmZzZCBvZiBhbiBpbm9kZSBsb29rdXAgYnkgYSBub24tZGV2ZnNkIHByb2Nlc3MuCi0gKglAcGFyZW50OiBUaGUgcGFyZW50IGRldmZzIGVudHJ5LgotICoJQGZzX2luZm86IFRoZSBmaWxlc3lzdGVtIGluZm8uCi0gKglAbmFtZTogVGhlIGRldmljZSBuYW1lLgotICoJQG5hbWVsZW46IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBAbmFtZS4KLSAqCUBidWY6IEEgd29ya2luZyBhcmVhIHRoYXQgd2lsbCBiZSB1c2VkLiBUaGlzIG11c3Qgbm90IGdvIG91dCBvZiBzY29wZQotICogICAgICAgICAgICB1bnRpbCBkZXZmc2QgaXMgaWRsZSBhZ2Fpbi4KLSAqCi0gKglSZXR1cm5zIDAgb24gc3VjY2VzcyAoZXZlbnQgd2FzIHF1ZXVlZCksIGVsc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICovCi0KLXN0YXRpYyBpbnQgdHJ5X21vZGxvYWQoc3RydWN0IGRldmZzX2VudHJ5ICpwYXJlbnQsIHN0cnVjdCBmc19pbmZvICpmc19pbmZvLAotCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbmFtZWxlbiwKLQkJICAgICAgIHN0cnVjdCBkZXZmc19lbnRyeSAqYnVmKQotewotCWlmICghKGZzX2luZm8tPmRldmZzZF9ldmVudF9tYXNrICYgKDEgPDwgREVWRlNEX05PVElGWV9MT09LVVApKSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JaWYgKGlzX2RldmZzZF9vcl9jaGlsZChmc19pbmZvKSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mICpidWYpOwotCWF0b21pY19zZXQoJmJ1Zi0+cmVmY291bnQsIDEpOwotCWJ1Zi0+cGFyZW50ID0gcGFyZW50OwotCWJ1Zi0+bmFtZWxlbiA9IG5hbWVsZW47Ci0JYnVmLT51Lm5hbWUgPSBuYW1lOwotCVdSSVRFX0VOVFJZX01BR0lDKGJ1ZiwgTUFHSUNfVkFMVUUpOwotCWlmICghZGV2ZnNkX25vdGlmeV9kZShidWYsIERFVkZTRF9OT1RJRllfTE9PS1VQLCAwLAotCQkJICAgICAgY3VycmVudC0+ZXVpZCwgY3VycmVudC0+ZWdpZCwgZnNfaW5mbykpCi0JCXJldHVybiAtRU5PRU5UOwotCS8qICBQb3NzaWJsZSBzdWNjZXNzOiBldmVudCBoYXMgYmVlbiBxdWV1ZWQgICovCi0JcmV0dXJuIDA7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gdHJ5X21vZGxvYWQgICovCi0KLS8qICBTdXBlcmJsb2NrIG9wZXJhdGlvbnMgZm9sbG93ICAqLwotCi1zdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGV2ZnNfaW9wczsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkZXZmc19kaXJfaW9wczsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmZzX2ZvcHM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZmc19kaXJfZm9wczsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkZXZmc19zeW1saW5rX2lvcHM7Ci0KLXN0YXRpYyBpbnQgZGV2ZnNfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCi17Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGZzX2luZm8gKmZzX2luZm8gPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwotCi0JZGUgPSBnZXRfZGV2ZnNfZW50cnlfZnJvbV92ZnNfaW5vZGUoaW5vZGUpOwotCWlmIChkZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR2YWwgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKLQlpZiAocmV0dmFsICE9IDApCi0JCXJldHVybiByZXR2YWw7Ci0JcmV0dmFsID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgaWF0dHIpOwotCWlmIChyZXR2YWwgIT0gMCkKLQkJcmV0dXJuIHJldHZhbDsKLQlEUFJJTlRLKERFQlVHX0lfQ0hBTkdFLCAiKCVkKTogVkZTIGlub2RlOiAlcCAgZGV2ZnNfZW50cnk6ICVwXG4iLAotCQkoaW50KWlub2RlLT5pX2lubywgaW5vZGUsIGRlKTsKLQlEUFJJTlRLKERFQlVHX0lfQ0hBTkdFLCAiKCk6ICAgbW9kZTogMCVvICB1aWQ6ICVkICBnaWQ6ICVkXG4iLAotCQkoaW50KWlub2RlLT5pX21vZGUsIChpbnQpaW5vZGUtPmlfdWlkLCAoaW50KWlub2RlLT5pX2dpZCk7Ci0JLyogIElub2RlIGlzIG5vdCBvbiBoYXNoIGNoYWlucywgdGh1cyBtdXN0IHNhdmUgcGVybWlzc2lvbnMgaGVyZSByYXRoZXIKLQkgICB0aGFuIGluIGEgd3JpdGVfaW5vZGUoKSBtZXRob2QgICovCi0JZGUtPm1vZGUgPSBpbm9kZS0+aV9tb2RlOwotCWRlLT5pbm9kZS51aWQgPSBpbm9kZS0+aV91aWQ7Ci0JZGUtPmlub2RlLmdpZCA9IGlub2RlLT5pX2dpZDsKLQlkZS0+aW5vZGUuYXRpbWUgPSBpbm9kZS0+aV9hdGltZTsKLQlkZS0+aW5vZGUubXRpbWUgPSBpbm9kZS0+aV9tdGltZTsKLQlkZS0+aW5vZGUuY3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKLQlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIChBVFRSX01PREUgfCBBVFRSX1VJRCB8IEFUVFJfR0lEKSkgJiYKLQkgICAgIWlzX2RldmZzZF9vcl9jaGlsZChmc19pbmZvKSkKLQkJZGV2ZnNkX25vdGlmeV9kZShkZSwgREVWRlNEX05PVElGWV9DSEFOR0UsIGlub2RlLT5pX21vZGUsCi0JCQkJIGlub2RlLT5pX3VpZCwgaW5vZGUtPmlfZ2lkLCBmc19pbmZvKTsKLQlyZXR1cm4gMDsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19ub3RpZnlfY2hhbmdlICAqLwotCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGV2ZnNfc29wcyA9IHsKLQkuZHJvcF9pbm9kZSA9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAotCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLAotfTsKLQotLyoqCi0gKglfZGV2ZnNfZ2V0X3Zmc19pbm9kZSAtIEdldCBhIFZGUyBpbm9kZS4KLSAqCUBzYjogVGhlIHN1cGVyIGJsb2NrLgotICoJQGRlOiBUaGUgZGV2ZnMgaW5vZGUuCi0gKglAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHJlZ2lzdGVyIHdpdGggdGhlIGRldmZzIGlub2RlLgotICoKLSAqCVJldHVybnMgdGhlIGlub2RlIG9uIHN1Y2Nlc3MsIGVsc2UgJU5VTEwuIEFuIGltcGxpY2l0IGRldmZzX2dldCgpIGlzCi0gKiAgICAgICBwZXJmb3JtZWQgaWYgdGhlIGlub2RlIGlzIGNyZWF0ZWQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpbm9kZSAqX2RldmZzX2dldF92ZnNfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICBzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRlLAotCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JaWYgKGRlLT5wcmV2ID09IGRlKQotCQlyZXR1cm4gTlVMTDsJLyogIFF1aWNrIGNoZWNrIHRvIHNlZSBpZiB1bmhvb2tlZCAgKi8KLQlpZiAoKGlub2RlID0gbmV3X2lub2RlKHNiKSkgPT0gTlVMTCkgewotCQlQUklOVEsoIiglcyk6IG5ld19pbm9kZSgpIGZhaWxlZCwgZGU6ICVwXG4iLCBkZS0+bmFtZSwgZGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKGRlLT5wYXJlbnQpIHsKLQkJcmVhZF9sb2NrKCZkZS0+cGFyZW50LT51LmRpci5sb2NrKTsKLQkJaWYgKGRlLT5wcmV2ICE9IGRlKQotCQkJZGUtPmlub2RlLmRlbnRyeSA9IGRlbnRyeTsJLyogICAgICBOb3QgdW5ob29rZWQgICovCi0JCXJlYWRfdW5sb2NrKCZkZS0+cGFyZW50LT51LmRpci5sb2NrKTsKLQl9IGVsc2UKLQkJZGUtPmlub2RlLmRlbnRyeSA9IGRlbnRyeTsJLyogIFJvb3Q6IG5vIGxvY2tpbmcgbmVlZGVkICAqLwotCWlmIChkZS0+aW5vZGUuZGVudHJ5ICE9IGRlbnRyeSkgewkvKiAgTXVzdCBoYXZlIGJlZW4gdW5ob29rZWQgICovCi0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyogRklYTUUgd2hlcmUgaXMgZGV2ZnNfcHV0PyAqLwotCWlub2RlLT51LmdlbmVyaWNfaXAgPSBkZXZmc19nZXQoZGUpOwotCWlub2RlLT5pX2lubyA9IGRlLT5pbm9kZS5pbm87Ci0JRFBSSU5USyhERUJVR19JX0dFVCwgIiglZCk6IFZGUyBpbm9kZTogJXAgIGRldmZzX2VudHJ5OiAlcFxuIiwKLQkJKGludClpbm9kZS0+aV9pbm8sIGlub2RlLCBkZSk7Ci0JaW5vZGUtPmlfYmxvY2tzID0gMDsKLQlpbm9kZS0+aV9ibGtzaXplID0gRkFLRV9CTE9DS19TSVpFOwotCWlub2RlLT5pX29wID0gJmRldmZzX2lvcHM7Ci0JaW5vZGUtPmlfbW9kZSA9IGRlLT5tb2RlOwotCWlmIChTX0lTRElSKGRlLT5tb2RlKSkgewotCQlpbm9kZS0+aV9vcCA9ICZkZXZmc19kaXJfaW9wczsKLQkJaW5vZGUtPmlfZm9wID0gJmRldmZzX2Rpcl9mb3BzOwotCX0gZWxzZSBpZiAoU19JU0xOSyhkZS0+bW9kZSkpIHsKLQkJaW5vZGUtPmlfb3AgPSAmZGV2ZnNfc3ltbGlua19pb3BzOwotCQlpbm9kZS0+aV9zaXplID0gZGUtPnUuc3ltbGluay5sZW5ndGg7Ci0JfSBlbHNlIGlmIChTX0lTQ0hSKGRlLT5tb2RlKSB8fCBTX0lTQkxLKGRlLT5tb2RlKSkgewotCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGRlLT5tb2RlLCBkZS0+dS5kZXYpOwotCX0gZWxzZSBpZiAoU19JU0ZJRk8oZGUtPm1vZGUpIHx8IFNfSVNTT0NLKGRlLT5tb2RlKSkgewotCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGRlLT5tb2RlLCAwKTsKLQl9IGVsc2UgewotCQlQUklOVEsoIiglcyk6IHVua25vd24gbW9kZSAlbyBkZTogJXBcbiIsCi0JCSAgICAgICBkZS0+bmFtZSwgZGUtPm1vZGUsIGRlKTsKLQkJaXB1dChpbm9kZSk7Ci0JCWRldmZzX3B1dChkZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlub2RlLT5pX3VpZCA9IGRlLT5pbm9kZS51aWQ7Ci0JaW5vZGUtPmlfZ2lkID0gZGUtPmlub2RlLmdpZDsKLQlpbm9kZS0+aV9hdGltZSA9IGRlLT5pbm9kZS5hdGltZTsKLQlpbm9kZS0+aV9tdGltZSA9IGRlLT5pbm9kZS5tdGltZTsKLQlpbm9kZS0+aV9jdGltZSA9IGRlLT5pbm9kZS5jdGltZTsKLQlEUFJJTlRLKERFQlVHX0lfR0VULCAiKCk6ICAgbW9kZTogMCVvICB1aWQ6ICVkICBnaWQ6ICVkXG4iLAotCQkoaW50KWlub2RlLT5pX21vZGUsIChpbnQpaW5vZGUtPmlfdWlkLCAoaW50KWlub2RlLT5pX2dpZCk7Ci0JcmV0dXJuIGlub2RlOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIF9kZXZmc19nZXRfdmZzX2lub2RlICAqLwotCi0vKiAgRmlsZSBvcGVyYXRpb25zIGZvciBkZXZpY2UgZW50cmllcyBmb2xsb3cgICovCi0KLXN0YXRpYyBpbnQgZGV2ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKLXsKLQlpbnQgZXJyLCBjb3VudDsKLQlpbnQgc3RvcmVkID0gMDsKLQlzdHJ1Y3QgZnNfaW5mbyAqZnNfaW5mbzsKLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgKnBhcmVudCwgKmRlLCAqbmV4dCA9IE5VTEw7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCi0JZnNfaW5mbyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87Ci0JcGFyZW50ID0gZ2V0X2RldmZzX2VudHJ5X2Zyb21fdmZzX2lub2RlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAoKGxvbmcpZmlsZS0+Zl9wb3MgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlEUFJJTlRLKERFQlVHX0ZfUkVBRERJUiwgIiglcyk6IGZzX2luZm86ICVwICBwb3M6ICVsZFxuIiwKLQkJcGFyZW50LT5uYW1lLCBmc19pbmZvLCAobG9uZylmaWxlLT5mX3Bvcyk7Ci0Jc3dpdGNoICgobG9uZylmaWxlLT5mX3BvcykgewotCWNhc2UgMDoKLQkJZXJyID0gKCpmaWxsZGlyKSAoZGlyZW50LCAiLi4iLCAyLCBmaWxlLT5mX3BvcywKLQkJCQkgIHBhcmVudF9pbm8oZmlsZS0+Zl9kZW50cnkpLCBEVF9ESVIpOwotCQlpZiAoZXJyID09IC1FSU5WQUwpCi0JCQlicmVhazsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlmaWxlLT5mX3BvcysrOwotCQkrK3N0b3JlZDsKLQkJLyogIEZhbGwgdGhyb3VnaCAgKi8KLQljYXNlIDE6Ci0JCWVyciA9Ci0JCSAgICAoKmZpbGxkaXIpIChkaXJlbnQsICIuIiwgMSwgZmlsZS0+Zl9wb3MsIGlub2RlLT5pX2lubywKLQkJCQlEVF9ESVIpOwotCQlpZiAoZXJyID09IC1FSU5WQUwpCi0JCQlicmVhazsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlmaWxlLT5mX3BvcysrOwotCQkrK3N0b3JlZDsKLQkJLyogIEZhbGwgdGhyb3VnaCAgKi8KLQlkZWZhdWx0OgotCQkvKiAgU2tpcCBlbnRyaWVzICAqLwotCQljb3VudCA9IGZpbGUtPmZfcG9zIC0gMjsKLQkJcmVhZF9sb2NrKCZwYXJlbnQtPnUuZGlyLmxvY2spOwotCQlmb3IgKGRlID0gcGFyZW50LT51LmRpci5maXJzdDsgZGUgJiYgKGNvdW50ID4gMCk7IGRlID0gZGUtPm5leHQpCi0JCQktLWNvdW50OwotCQlkZXZmc19nZXQoZGUpOwotCQlyZWFkX3VubG9jaygmcGFyZW50LT51LmRpci5sb2NrKTsKLQkJLyogIE5vdyBhZGQgYWxsIHJlbWFpbmluZyBlbnRyaWVzICAqLwotCQl3aGlsZSAoZGUpIHsKLQkJCWVyciA9ICgqZmlsbGRpcikgKGRpcmVudCwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuLAotCQkJCQkgIGZpbGUtPmZfcG9zLCBkZS0+aW5vZGUuaW5vLAotCQkJCQkgIGRlLT5tb2RlID4+IDEyKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCWRldmZzX3B1dChkZSk7Ci0JCQllbHNlIHsKLQkJCQlmaWxlLT5mX3BvcysrOwotCQkJCSsrc3RvcmVkOwotCQkJfQotCQkJaWYgKGVyciA9PSAtRUlOVkFMKQotCQkJCWJyZWFrOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJCXJlYWRfbG9jaygmcGFyZW50LT51LmRpci5sb2NrKTsKLQkJCW5leHQgPSBkZXZmc19nZXQoZGUtPm5leHQpOwotCQkJcmVhZF91bmxvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0JCQlkZXZmc19wdXQoZGUpOwotCQkJZGUgPSBuZXh0OwotCQl9Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gc3RvcmVkOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIGRldmZzX3JlYWRkaXIgICovCi0KLS8qIE9wZW4gZGV2ZnMgc3BlY2lmaWMgc3BlY2lhbCBmaWxlcyAqLwotc3RhdGljIGludCBkZXZmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBlcnI7Ci0JaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqb2xkX2ZvcHMsICpuZXdfZm9wczsKLQotCXN3aXRjaCAobWlub3IpIHsKLQljYXNlIDA6CQkvKiAvZGV2Ly5kZXZmc2QgKi8KLQkJbmV3X2ZvcHMgPSBmb3BzX2dldCgmZGV2ZnNkX2ZvcHMpOwotCQlicmVhazsKLSNpZmRlZiBDT05GSUdfREVWRlNfREVCVUcKLQljYXNlIDE6CQkvKiAvZGV2Ly5zdGF0ICovCi0JCW5ld19mb3BzID0gZm9wc19nZXQoJnN0YXRfZm9wcyk7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKG5ld19mb3BzID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCW9sZF9mb3BzID0gZmlsZS0+Zl9vcDsKLQlmaWxlLT5mX29wID0gbmV3X2ZvcHM7Ci0JZXJyID0gbmV3X2ZvcHMtPm9wZW4gPyBuZXdfZm9wcy0+b3Blbihpbm9kZSwgZmlsZSkgOiAwOwotCWlmIChlcnIpIHsKLQkJZmlsZS0+Zl9vcCA9IG9sZF9mb3BzOwotCQlmb3BzX3B1dChuZXdfZm9wcyk7Ci0JfSBlbHNlCi0JCWZvcHNfcHV0KG9sZF9mb3BzKTsKLQlyZXR1cm4gZXJyOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIGRldmZzX29wZW4gICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmZzX2ZvcHMgPSB7Ci0JLm9wZW4gPSBkZXZmc19vcGVuLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2ZnNfZGlyX2ZvcHMgPSB7Ci0JLnJlYWQgPSBnZW5lcmljX3JlYWRfZGlyLAotCS5yZWFkZGlyID0gZGV2ZnNfcmVhZGRpciwKLX07Ci0KLS8qICBEZW50cnkgb3BlcmF0aW9ucyBmb3IgZGV2aWNlIGVudHJpZXMgZm9sbG93ICAqLwotCi0vKioKLSAqCWRldmZzX2RfcmVsZWFzZSAtIENhbGxiYWNrIGZvciB3aGVuIGEgZGVudHJ5IGlzIGZyZWVkLgotICoJQGRlbnRyeTogVGhlIGRlbnRyeS4KLSAqLwotCi1zdGF0aWMgdm9pZCBkZXZmc19kX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCURQUklOVEsoREVCVUdfRF9SRUxFQVNFLCAiKCVwKTogaW5vZGU6ICVwXG4iLCBkZW50cnksIGRlbnRyeS0+ZF9pbm9kZSk7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZF9yZWxlYXNlICAqLwotCi0vKioKLSAqCWRldmZzX2RfaXB1dCAtIENhbGxiYWNrIGZvciB3aGVuIGEgZGVudHJ5IGxvc2VzIGl0cyBpbm9kZS4KLSAqCUBkZW50cnk6IFRoZSBkZW50cnkuCi0gKglAaW5vZGU6CVRoZSBpbm9kZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBkZXZmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBkZXZmc19lbnRyeSAqZGU7Ci0KLQlkZSA9IGdldF9kZXZmc19lbnRyeV9mcm9tX3Zmc19pbm9kZShpbm9kZSk7Ci0JRFBSSU5USyhERUJVR19EX0lQVVQsCi0JCSIoJXMpOiBkZW50cnk6ICVwIGlub2RlOiAlcCBkZTogJXAgZGUtPmRlbnRyeTogJXBcbiIsIGRlLT5uYW1lLAotCQlkZW50cnksIGlub2RlLCBkZSwgZGUtPmlub2RlLmRlbnRyeSk7Ci0JaWYgKGRlLT5pbm9kZS5kZW50cnkgJiYgKGRlLT5pbm9kZS5kZW50cnkgIT0gZGVudHJ5KSkKLQkJT09QUygiKCVzKTogZGU6ICVwIGRlbnRyeTogJXAgZGUtPmRlbnRyeTogJXBcbiIsCi0JCSAgICAgZGUtPm5hbWUsIGRlLCBkZW50cnksIGRlLT5pbm9kZS5kZW50cnkpOwotCWRlLT5pbm9kZS5kZW50cnkgPSBOVUxMOwotCWlwdXQoaW5vZGUpOwotCWRldmZzX3B1dChkZSk7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZF9pcHV0ICAqLwotCi1zdGF0aWMgaW50IGRldmZzX2RfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZGV2ZnNfZG9wcyA9IHsKLQkuZF9kZWxldGUgPSBkZXZmc19kX2RlbGV0ZSwKLQkuZF9yZWxlYXNlID0gZGV2ZnNfZF9yZWxlYXNlLAotCS5kX2lwdXQgPSBkZXZmc19kX2lwdXQsCi19OwotCi1zdGF0aWMgaW50IGRldmZzX2RfcmV2YWxpZGF0ZV93YWl0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqKTsKLQotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBkZXZmc193YWl0X2RvcHMgPSB7Ci0JLmRfZGVsZXRlID0gZGV2ZnNfZF9kZWxldGUsCi0JLmRfcmVsZWFzZSA9IGRldmZzX2RfcmVsZWFzZSwKLQkuZF9pcHV0ID0gZGV2ZnNfZF9pcHV0LAotCS5kX3JldmFsaWRhdGUgPSBkZXZmc19kX3JldmFsaWRhdGVfd2FpdCwKLX07Ci0KLS8qKgotICoJZGV2ZnNfZF9kZWxldGUgLSBDYWxsYmFjayBmb3Igd2hlbiBhbGwgZmlsZXMgZm9yIGEgZGVudHJ5IGFyZSBjbG9zZWQuCi0gKglAZGVudHJ5OiBUaGUgZGVudHJ5LgotICovCi0KLXN0YXRpYyBpbnQgZGV2ZnNfZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0KLQlpZiAoZGVudHJ5LT5kX29wID09ICZkZXZmc193YWl0X2RvcHMpCi0JCWRlbnRyeS0+ZF9vcCA9ICZkZXZmc19kb3BzOwotCS8qICBVbmhhc2ggZGVudHJ5IGlmIG5lZ2F0aXZlIChoYXMgbm8gaW5vZGUpICAqLwotCWlmIChpbm9kZSA9PSBOVUxMKSB7Ci0JCURQUklOVEsoREVCVUdfRF9ERUxFVEUsICIoJXApOiBkcm9wcGluZyBuZWdhdGl2ZSBkZW50cnlcbiIsCi0JCQlkZW50cnkpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZF9kZWxldGUgICovCi0KLXN0cnVjdCBkZXZmc19sb29rdXBfc3RydWN0IHsKLQlkZXZmc19oYW5kbGVfdCBkZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwotfTsKLQotLyogWFhYOiB0aGlzIGRvZXNuJ3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGdvdCBhIG5lZ2F0aXZlIGRlbnRyeQotICAgICAgICBidXQgYSBkZXZmcyBlbnRyeSBoYXMgYmVlbiByZWdpc3RlcmVkIGluIHRoZSBtZWFud2hpbGUgKi8KLXN0YXRpYyBpbnQgZGV2ZnNfZF9yZXZhbGlkYXRlX3dhaXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7Ci0Jc3RydWN0IGZzX2luZm8gKmZzX2luZm8gPSBkaXItPmlfc2ItPnNfZnNfaW5mbzsKLQlkZXZmc19oYW5kbGVfdCBwYXJlbnQgPSBnZXRfZGV2ZnNfZW50cnlfZnJvbV92ZnNfaW5vZGUoZGlyKTsKLQlzdHJ1Y3QgZGV2ZnNfbG9va3VwX3N0cnVjdCAqbG9va3VwX2luZm8gPSBkZW50cnktPmRfZnNkYXRhOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCWludCBuZWVkX2xvY2s7Ci0KLQkvKgotCSAqIEZJWE1FIEhBQ0sKLQkgKgotCSAqIG1ha2Ugc3VyZSB0aGF0Ci0JICogICBkX2luc3RhbnRpYXRlIGFsd2F5cyBydW5zIHVuZGVyIGxvY2sKLQkgKiAgIHdlIHJlbGVhc2UgaV9tdXRleCBsb2NrIGJlZm9yZSBnb2luZyB0byBzbGVlcAotCSAqCi0JICogdW5mb3J0dW5hdGVseSBzb21ldGltZXMgZF9yZXZhbGlkYXRlIGlzIGNhbGxlZCB3aXRoCi0JICogYW5kIHNvbWV0aW1lcyB3aXRob3V0IGlfbXV0ZXggbG9jayBoZWxkLiBUaGUgZm9sbG93aW5nIGNoZWNrcwotCSAqIGF0dGVtcHQgdG8gZGVkdWNlIHdoZW4gd2UgbmVlZCB0byBhZGQgKGFuZCBkcm9wIHJlc3AuKSBsb2NrCi0JICogaGVyZS4gVGhpcyByZWxpZXMgb24gY3VycmVudCAoMi42LjIpIGNhbGxpbmcgY292ZW50aW9uczoKLQkgKgotCSAqICAgbG9va3VwX2hhc2ggaXMgYWx3YXlzIHJ1biB1bmRlciBpX211dGV4IGFuZCBpcyBwYXNzaW5nIE5VTEwKLQkgKiAgIGFzIG5kCi0JICoKLQkgKiAgIG9wZW4oLi4uLE9fQ1JFQVRFLC4uLikgY2FsbHMgX2xvb2t1cF9oYXNoIHVuZGVyIGlfbXV0ZXgKLQkgKiAgIGFuZCBzZXRzIGZsYWdzIHRvIExPT0tVUF9PUEVOfExPT0tVUF9DUkVBVEUKLQkgKgotCSAqICAgYWxsIG90aGVyIGludm9jYXRpb25zIG9mIC0+ZF9yZXZhbGlkYXRlIHNlZW0gdG8gaGFwcGVuCi0JICogICBvdXRzaWRlIG9mIGlfbXV0ZXgKLQkgKi8KLQluZWVkX2xvY2sgPSBuZCAmJgotCSAgICAoIShuZC0+ZmxhZ3MgJiBMT09LVVBfQ1JFQVRFKSB8fCAobmQtPmZsYWdzICYgTE9PS1VQX1BBUkVOVCkpOwotCi0JaWYgKG5lZWRfbG9jaykKLQkJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKLQotCWlmIChpc19kZXZmc2Rfb3JfY2hpbGQoZnNfaW5mbykpIHsKLQkJZGV2ZnNfaGFuZGxlX3QgZGUgPSBsb29rdXBfaW5mby0+ZGU7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQkJRFBSSU5USyhERUJVR19JX0xPT0tVUCwKLQkJCSIoJXMpOiBkZW50cnk6ICVwIGlub2RlOiAlcCBkZTogJXAgYnk6IFwiJXNcIlxuIiwKLQkJCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeSwgZGVudHJ5LT5kX2lub2RlLCBkZSwKLQkJCWN1cnJlbnQtPmNvbW0pOwotCQlpZiAoZGVudHJ5LT5kX2lub2RlKQotCQkJZ290byBvdXQ7Ci0JCWlmIChkZSA9PSBOVUxMKSB7Ci0JCQlyZWFkX2xvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0JCQlkZSA9IF9kZXZmc19zZWFyY2hfZGlyKHBhcmVudCwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbik7Ci0JCQlyZWFkX3VubG9jaygmcGFyZW50LT51LmRpci5sb2NrKTsKLQkJCWlmIChkZSA9PSBOVUxMKQotCQkJCWdvdG8gb3V0OwotCQkJbG9va3VwX2luZm8tPmRlID0gZGU7Ci0JCX0KLQkJLyogIENyZWF0ZSBhbiBpbm9kZSwgbm93IHRoYXQgdGhlIGRyaXZlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgICovCi0JCWlub2RlID0gX2RldmZzX2dldF92ZnNfaW5vZGUoZGlyLT5pX3NiLCBkZSwgZGVudHJ5KTsKLQkJaWYgKCFpbm9kZSkKLQkJCWdvdG8gb3V0OwotCQlEUFJJTlRLKERFQlVHX0lfTE9PS1VQLAotCQkJIiglcyk6IG5ldyBWRlMgaW5vZGUoJXUpOiAlcCBkZTogJXAgYnk6IFwiJXNcIlxuIiwKLQkJCWRlLT5uYW1lLCBkZS0+aW5vZGUuaW5vLCBpbm9kZSwgZGUsIGN1cnJlbnQtPmNvbW0pOwotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGxvb2t1cF9pbmZvID09IE5VTEwpCi0JCWdvdG8gb3V0OwkvKiAgRWFybHkgdGVybWluYXRpb24gICovCi0JcmVhZF9sb2NrKCZwYXJlbnQtPnUuZGlyLmxvY2spOwotCWlmIChkZW50cnktPmRfZnNkYXRhKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJYWRkX3dhaXRfcXVldWUoJmxvb2t1cF9pbmZvLT53YWl0X3F1ZXVlLCAmd2FpdCk7Ci0JCXJlYWRfdW5sb2NrKCZwYXJlbnQtPnUuZGlyLmxvY2spOwotCQkvKiBhdCB0aGlzIHBvaW50IGl0IGlzIGFsd2F5cyAoaG9wZWZ1bGx5KSBsb2NrZWQgKi8KLQkJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwotCQlzY2hlZHVsZSgpOwotCQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwotCQkvKgotCQkgKiBUaGlzIGRvZXMgbm90IG5lZWQgbm9yIHNob3VsZCByZW1vdmUgd2FpdCBmcm9tIHdhaXRfcXVldWUuCi0JCSAqIFdhaXQgcXVldWUgaGVhZCBpcyBuZXZlciByZXVzZWQgLSBub3RoaW5nIGlzIGV2ZXIgYWRkZWQgdG8gaXQKLQkJICogYWZ0ZXIgYWxsIHdhaXRlcnMgaGF2ZSBiZWVuIHdha2VkIHVwIGFuZCBoZWFkIGl0c2VsZiBkaXNhcHBlYXJzCi0JCSAqIHZlcnkgc29vbiBhZnRlciBpdC4gTW9yZW92ZXIgaXQgaXMgbG9jYWwgdmFyaWFibGUgb24gc3RhY2sgdGhhdAotCQkgKiBpcyBsaWtlbHkgdG8gaGF2ZSBhbHJlYWR5IGRpc2FwcGVhcmVkIHNvIGFueSByZWZlcmVuY2UgdG8gaXQKLQkJICogYXQgdGhpcyBwb2ludCBpcyBidWdneS4KLQkJICovCi0KLQl9IGVsc2UKLQkJcmVhZF91bmxvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0KLSAgICAgIG91dDoKLQlpZiAobmVlZF9sb2NrKQotCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JcmV0dXJuIDE7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZF9yZXZhbGlkYXRlX3dhaXQgICovCi0KLS8qICBJbm9kZSBvcGVyYXRpb25zIGZvciBkZXZpY2UgZW50cmllcyBmb2xsb3cgICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZXZmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkgICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgZGV2ZnNfZW50cnkgdG1wOwkvKiAgTXVzdCBzdGF5IGluIHNjb3BlIHVudGlsIGRldmZzZCBpZGxlIGFnYWluICAqLwotCXN0cnVjdCBkZXZmc19sb29rdXBfc3RydWN0IGxvb2t1cF9pbmZvOwotCXN0cnVjdCBmc19pbmZvICpmc19pbmZvID0gZGlyLT5pX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IGRldmZzX2VudHJ5ICpwYXJlbnQsICpkZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgKnJldHZhbCA9IE5VTEw7Ci0KLQkvKiAgU2V0IHVwIHRoZSBkZW50cnkgb3BlcmF0aW9ucyBiZWZvcmUgYW55dGhpbmcgZWxzZSwgdG8gZW5zdXJlIGNsZWFuaW5nCi0JICAgdXAgb24gYW55IGVycm9yICAqLwotCWRlbnRyeS0+ZF9vcCA9ICZkZXZmc19kb3BzOwotCS8qICBGaXJzdCB0cnkgdG8gZ2V0IHRoZSBkZXZmcyBlbnRyeSBmb3IgdGhpcyBkaXJlY3RvcnkgICovCi0JcGFyZW50ID0gZ2V0X2RldmZzX2VudHJ5X2Zyb21fdmZzX2lub2RlKGRpcik7Ci0JRFBSSU5USyhERUJVR19JX0xPT0tVUCwgIiglcyk6IGRlbnRyeTogJXAgcGFyZW50OiAlcCBieTogXCIlc1wiXG4iLAotCQlkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnksIHBhcmVudCwgY3VycmVudC0+Y29tbSk7Ci0JaWYgKHBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKLQlyZWFkX2xvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0JZGUgPSBfZGV2ZnNfc2VhcmNoX2RpcihwYXJlbnQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbik7Ci0JcmVhZF91bmxvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0JbG9va3VwX2luZm8uZGUgPSBkZTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsb29rdXBfaW5mby53YWl0X3F1ZXVlKTsKLQlkZW50cnktPmRfZnNkYXRhID0gJmxvb2t1cF9pbmZvOwotCWlmIChkZSA9PSBOVUxMKSB7CS8qICBUcnkgd2l0aCBkZXZmc2QuIEZvciBhbnkga2luZCBvZiBmYWlsdXJlLCBsZWF2ZSBhIG5lZ2F0aXZlIGRlbnRyeQotCQkJCSAgIHNvIHNvbWVvbmUgZWxzZSBjYW4gZGVhbCB3aXRoIGl0IChpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3lzYWRtaW4KLQkJCQkgICBkb2VzIGEgbWtub2QoKSkuIEl0J3MgaW1wb3J0YW50IHRvIGRvIHRoaXMgYmVmb3JlIGhhc2hpbmcgdGhlCi0JCQkJICAgZGVudHJ5LCBzbyB0aGF0IHRoZSBkZXZmc2QgcXVldWUgaXMgZmlsbGVkIGJlZm9yZSByZXZhbGlkYXRlcwotCQkJCSAgIGNhbiBzdGFydCAgKi8KLQkJaWYgKHRyeV9tb2Rsb2FkKHBhcmVudCwgZnNfaW5mbywgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAmdG1wKSA8IDApIHsJLyogIExvb2t1cCBldmVudCB3YXMgbm90IHF1ZXVlZCB0byBkZXZmc2QgICovCi0JCQlkX2FkZChkZW50cnksIE5VTEwpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0JZGVudHJ5LT5kX29wID0gJmRldmZzX3dhaXRfZG9wczsKLQlkX2FkZChkZW50cnksIE5VTEwpOwkvKiAgT3BlbiB0aGUgZmxvb2RnYXRlcyAgKi8KLQkvKiAgVW5sb2NrIGRpcmVjdG9yeSBzZW1hcGhvcmUsIHdoaWNoIHdpbGwgcmVsZWFzZSBhbnkgd2FpdGVycy4gVGhleQotCSAgIHdpbGwgZ2V0IHRoZSBoYXNoZWQgZGVudHJ5LCBhbmQgbWF5IGJlIGZvcmNlZCB0byB3YWl0IGZvcgotCSAgIHJldmFsaWRhdGlvbiAgKi8KLQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0Jd2FpdF9mb3JfZGV2ZnNkX2ZpbmlzaGVkKGZzX2luZm8pOwkvKiAgSWYgSSdtIG5vdCBkZXZmc2QsIG11c3Qgd2FpdCAgKi8KLQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwkvKiAgR3JhYiBpdCBhZ2FpbiBiZWNhdXNlIHRoZW0ncyB0aGUgcnVsZXMgICovCi0JZGUgPSBsb29rdXBfaW5mby5kZTsKLQkvKiAgSWYgc29tZW9uZSBlbHNlIGhhcyBiZWVuIHNvIGtpbmQgYXMgdG8gbWFrZSB0aGUgaW5vZGUsIHdlIGdvIGhvbWUKLQkgICBlYXJseSAgKi8KLQlpZiAoZGVudHJ5LT5kX2lub2RlKQotCQlnb3RvIG91dDsKLQlpZiAoZGUgPT0gTlVMTCkgewotCQlyZWFkX2xvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0JCWRlID0gX2RldmZzX3NlYXJjaF9kaXIocGFyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4pOwotCQlyZWFkX3VubG9jaygmcGFyZW50LT51LmRpci5sb2NrKTsKLQkJaWYgKGRlID09IE5VTEwpCi0JCQlnb3RvIG91dDsKLQkJLyogIE9LLCB0aGVyZSdzIGFuIGVudHJ5IG5vdywgYnV0IG5vIFZGUyBpbm9kZSB5ZXQgICovCi0JfQotCS8qICBDcmVhdGUgYW4gaW5vZGUsIG5vdyB0aGF0IHRoZSBkcml2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlICAqLwotCWlub2RlID0gX2RldmZzX2dldF92ZnNfaW5vZGUoZGlyLT5pX3NiLCBkZSwgZGVudHJ5KTsKLQlpZiAoIWlub2RlKSB7Ci0JCXJldHZhbCA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlEUFJJTlRLKERFQlVHX0lfTE9PS1VQLAotCQkiKCVzKTogbmV3IFZGUyBpbm9kZSgldSk6ICVwIGRlOiAlcCBieTogXCIlc1wiXG4iLCBkZS0+bmFtZSwKLQkJZGUtPmlub2RlLmlubywgaW5vZGUsIGRlLCBjdXJyZW50LT5jb21tKTsKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotICAgICAgb3V0OgotCXdyaXRlX2xvY2soJnBhcmVudC0+dS5kaXIubG9jayk7Ci0JZGVudHJ5LT5kX29wID0gJmRldmZzX2RvcHM7Ci0JZGVudHJ5LT5kX2ZzZGF0YSA9IE5VTEw7Ci0Jd2FrZV91cCgmbG9va3VwX2luZm8ud2FpdF9xdWV1ZSk7Ci0Jd3JpdGVfdW5sb2NrKCZwYXJlbnQtPnUuZGlyLmxvY2spOwotCWRldmZzX3B1dChkZSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19sb29rdXAgICovCi0KLXN0YXRpYyBpbnQgZGV2ZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IHVuaG9va2VkOwotCXN0cnVjdCBkZXZmc19lbnRyeSAqZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZnNfaW5mbyAqZnNfaW5mbyA9IGRpci0+aV9zYi0+c19mc19pbmZvOwotCi0JZGUgPSBnZXRfZGV2ZnNfZW50cnlfZnJvbV92ZnNfaW5vZGUoaW5vZGUpOwotCURQUklOVEsoREVCVUdfSV9VTkxJTkssICIoJXMpOiBkZTogJXBcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlKTsKLQlpZiAoZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JaWYgKCFkZS0+dmZzKQotCQlyZXR1cm4gLUVQRVJNOwotCXdyaXRlX2xvY2soJmRlLT5wYXJlbnQtPnUuZGlyLmxvY2spOwotCXVuaG9va2VkID0gX2RldmZzX3VuaG9vayhkZSk7Ci0Jd3JpdGVfdW5sb2NrKCZkZS0+cGFyZW50LT51LmRpci5sb2NrKTsKLQlpZiAoIXVuaG9va2VkKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoIWlzX2RldmZzZF9vcl9jaGlsZChmc19pbmZvKSkKLQkJZGV2ZnNkX25vdGlmeV9kZShkZSwgREVWRlNEX05PVElGWV9ERUxFVEUsIGlub2RlLT5pX21vZGUsCi0JCQkJIGlub2RlLT5pX3VpZCwgaW5vZGUtPmlfZ2lkLCBmc19pbmZvKTsKLQlmcmVlX2RlbnRyeShkZSk7Ci0JZGV2ZnNfcHV0KGRlKTsKLQlyZXR1cm4gMDsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc191bmxpbmsgICovCi0KLXN0YXRpYyBpbnQgZGV2ZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJIGNvbnN0IGNoYXIgKnN5bW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZnNfaW5mbyAqZnNfaW5mbyA9IGRpci0+aV9zYi0+c19mc19pbmZvOwotCXN0cnVjdCBkZXZmc19lbnRyeSAqcGFyZW50LCAqZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCS8qICBGaXJzdCB0cnkgdG8gZ2V0IHRoZSBkZXZmcyBlbnRyeSBmb3IgdGhpcyBkaXJlY3RvcnkgICovCi0JcGFyZW50ID0gZ2V0X2RldmZzX2VudHJ5X2Zyb21fdmZzX2lub2RlKGRpcik7Ci0JaWYgKHBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0VOVDsKLQllcnIgPSBkZXZmc19kb19zeW1saW5rKHBhcmVudCwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3ltbmFtZSwgJmRlKTsKLQlEUFJJTlRLKERFQlVHX0RJU0FCTEVELCAiKCVzKTogZXJyY29kZSBmcm9tIDxkZXZmc19kb19zeW1saW5rPjogJWRcbiIsCi0JCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIGVycik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZGUtPnZmcyA9IFRSVUU7Ci0JZGUtPmlub2RlLnVpZCA9IGN1cnJlbnQtPmV1aWQ7Ci0JZGUtPmlub2RlLmdpZCA9IGN1cnJlbnQtPmVnaWQ7Ci0JZGUtPmlub2RlLmF0aW1lID0gQ1VSUkVOVF9USU1FOwotCWRlLT5pbm9kZS5tdGltZSA9IENVUlJFTlRfVElNRTsKLQlkZS0+aW5vZGUuY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JaWYgKChpbm9kZSA9IF9kZXZmc19nZXRfdmZzX2lub2RlKGRpci0+aV9zYiwgZGUsIGRlbnRyeSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCURQUklOVEsoREVCVUdfRElTQUJMRUQsICIoJXMpOiBuZXcgVkZTIGlub2RlKCV1KTogJXAgIGRlbnRyeTogJXBcbiIsCi0JCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlLT5pbm9kZS5pbm8sIGlub2RlLCBkZW50cnkpOwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JaWYgKCFpc19kZXZmc2Rfb3JfY2hpbGQoZnNfaW5mbykpCi0JCWRldmZzZF9ub3RpZnlfZGUoZGUsIERFVkZTRF9OT1RJRllfQ1JFQVRFLCBpbm9kZS0+aV9tb2RlLAotCQkJCSBpbm9kZS0+aV91aWQsIGlub2RlLT5pX2dpZCwgZnNfaW5mbyk7Ci0JcmV0dXJuIDA7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfc3ltbGluayAgKi8KLQotc3RhdGljIGludCBkZXZmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBmc19pbmZvICpmc19pbmZvID0gZGlyLT5pX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IGRldmZzX2VudHJ5ICpwYXJlbnQsICpkZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JbW9kZSA9IChtb2RlICYgflNfSUZNVCkgfCBTX0lGRElSOwkvKiAgVkZTIGRvZXNuJ3QgcGFzcyBTX0lGTVQgcGFydCAgKi8KLQlwYXJlbnQgPSBnZXRfZGV2ZnNfZW50cnlfZnJvbV92ZnNfaW5vZGUoZGlyKTsKLQlpZiAocGFyZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PRU5UOwotCWRlID0gX2RldmZzX2FsbG9jX2VudHJ5KGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgbW9kZSk7Ci0JaWYgKCFkZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGUtPnZmcyA9IFRSVUU7Ci0JaWYgKChlcnIgPSBfZGV2ZnNfYXBwZW5kX2VudHJ5KHBhcmVudCwgZGUsIE5VTEwpKSAhPSAwKQotCQlyZXR1cm4gZXJyOwotCWRlLT5pbm9kZS51aWQgPSBjdXJyZW50LT5ldWlkOwotCWRlLT5pbm9kZS5naWQgPSBjdXJyZW50LT5lZ2lkOwotCWRlLT5pbm9kZS5hdGltZSA9IENVUlJFTlRfVElNRTsKLQlkZS0+aW5vZGUubXRpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JZGUtPmlub2RlLmN0aW1lID0gQ1VSUkVOVF9USU1FOwotCWlmICgoaW5vZGUgPSBfZGV2ZnNfZ2V0X3Zmc19pbm9kZShkaXItPmlfc2IsIGRlLCBkZW50cnkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlEUFJJTlRLKERFQlVHX0RJU0FCTEVELCAiKCVzKTogbmV3IFZGUyBpbm9kZSgldSk6ICVwICBkZW50cnk6ICVwXG4iLAotCQlkZW50cnktPmRfbmFtZS5uYW1lLCBkZS0+aW5vZGUuaW5vLCBpbm9kZSwgZGVudHJ5KTsKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCWlmICghaXNfZGV2ZnNkX29yX2NoaWxkKGZzX2luZm8pKQotCQlkZXZmc2Rfbm90aWZ5X2RlKGRlLCBERVZGU0RfTk9USUZZX0NSRUFURSwgaW5vZGUtPmlfbW9kZSwKLQkJCQkgaW5vZGUtPmlfdWlkLCBpbm9kZS0+aV9naWQsIGZzX2luZm8pOwotCXJldHVybiAwOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIGRldmZzX21rZGlyICAqLwotCi1zdGF0aWMgaW50IGRldmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGRldmZzX2VudHJ5ICpkZTsKLQlzdHJ1Y3QgZnNfaW5mbyAqZnNfaW5mbyA9IGRpci0+aV9zYi0+c19mc19pbmZvOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0KLQlpZiAoZGlyLT5pX3NiLT5zX2ZzX2luZm8gIT0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZGUgPSBnZXRfZGV2ZnNfZW50cnlfZnJvbV92ZnNfaW5vZGUoaW5vZGUpOwotCWlmIChkZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoIVNfSVNESVIoZGUtPm1vZGUpKQotCQlyZXR1cm4gLUVOT1RESVI7Ci0JaWYgKCFkZS0+dmZzKQotCQlyZXR1cm4gLUVQRVJNOwotCS8qICBGaXJzdCBlbnN1cmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eSBhbmQgd2lsbCBzdGF5IHRoYXQgd2F5ICAqLwotCXdyaXRlX2xvY2soJmRlLT51LmRpci5sb2NrKTsKLQlpZiAoZGUtPnUuZGlyLmZpcnN0KQotCQllcnIgPSAtRU5PVEVNUFRZOwotCWVsc2UKLQkJZGUtPnUuZGlyLm5vX21vcmVfYWRkaXRpb25zID0gVFJVRTsKLQl3cml0ZV91bmxvY2soJmRlLT51LmRpci5sb2NrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCS8qICBOb3cgdW5ob29rIHRoZSBkaXJlY3RvcnkgZnJvbSBpdHMgcGFyZW50ICAqLwotCXdyaXRlX2xvY2soJmRlLT5wYXJlbnQtPnUuZGlyLmxvY2spOwotCWlmICghX2RldmZzX3VuaG9vayhkZSkpCi0JCWVyciA9IC1FTk9FTlQ7Ci0Jd3JpdGVfdW5sb2NrKCZkZS0+cGFyZW50LT51LmRpci5sb2NrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWlmICghaXNfZGV2ZnNkX29yX2NoaWxkKGZzX2luZm8pKQotCQlkZXZmc2Rfbm90aWZ5X2RlKGRlLCBERVZGU0RfTk9USUZZX0RFTEVURSwgaW5vZGUtPmlfbW9kZSwKLQkJCQkgaW5vZGUtPmlfdWlkLCBpbm9kZS0+aV9naWQsIGZzX2luZm8pOwotCWZyZWVfZGVudHJ5KGRlKTsKLQlkZXZmc19wdXQoZGUpOwotCXJldHVybiAwOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIGRldmZzX3JtZGlyICAqLwotCi1zdGF0aWMgaW50IGRldmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAotCQkgICAgICAgZGV2X3QgcmRldikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBmc19pbmZvICpmc19pbmZvID0gZGlyLT5pX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IGRldmZzX2VudHJ5ICpwYXJlbnQsICpkZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JRFBSSU5USyhERUJVR19JX01LTk9ELCAiKCVzKTogbW9kZTogMCVvICBkZXY6ICV1OiV1XG4iLAotCQlkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlLCBNQUpPUihyZGV2KSwgTUlOT1IocmRldikpOwotCXBhcmVudCA9IGdldF9kZXZmc19lbnRyeV9mcm9tX3Zmc19pbm9kZShkaXIpOwotCWlmIChwYXJlbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JZGUgPSBfZGV2ZnNfYWxsb2NfZW50cnkoZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCBtb2RlKTsKLQlpZiAoIWRlKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkZS0+dmZzID0gVFJVRTsKLQlpZiAoU19JU0NIUihtb2RlKSB8fCBTX0lTQkxLKG1vZGUpKQotCQlkZS0+dS5kZXYgPSByZGV2OwotCWlmICgoZXJyID0gX2RldmZzX2FwcGVuZF9lbnRyeShwYXJlbnQsIGRlLCBOVUxMKSkgIT0gMCkKLQkJcmV0dXJuIGVycjsKLQlkZS0+aW5vZGUudWlkID0gY3VycmVudC0+ZXVpZDsKLQlkZS0+aW5vZGUuZ2lkID0gY3VycmVudC0+ZWdpZDsKLQlkZS0+aW5vZGUuYXRpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JZGUtPmlub2RlLm10aW1lID0gQ1VSUkVOVF9USU1FOwotCWRlLT5pbm9kZS5jdGltZSA9IENVUlJFTlRfVElNRTsKLQlpZiAoKGlub2RlID0gX2RldmZzX2dldF92ZnNfaW5vZGUoZGlyLT5pX3NiLCBkZSwgZGVudHJ5KSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JRFBSSU5USyhERUJVR19JX01LTk9ELCAiOiAgIG5ldyBWRlMgaW5vZGUoJXUpOiAlcCAgZGVudHJ5OiAlcFxuIiwKLQkJZGUtPmlub2RlLmlubywgaW5vZGUsIGRlbnRyeSk7Ci0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlpZiAoIWlzX2RldmZzZF9vcl9jaGlsZChmc19pbmZvKSkKLQkJZGV2ZnNkX25vdGlmeV9kZShkZSwgREVWRlNEX05PVElGWV9DUkVBVEUsIGlub2RlLT5pX21vZGUsCi0JCQkJIGlub2RlLT5pX3VpZCwgaW5vZGUtPmlfZ2lkLCBmc19pbmZvKTsKLQlyZXR1cm4gMDsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19ta25vZCAgKi8KLQotc3RhdGljIHZvaWQgKmRldmZzX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IGRldmZzX2VudHJ5ICpwID0gZ2V0X2RldmZzX2VudHJ5X2Zyb21fdmZzX2lub2RlKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JbmRfc2V0X2xpbmsobmQsIHAgPyBwLT51LnN5bWxpbmsubGlua25hbWUgOiBFUlJfUFRSKC1FTk9ERVYpKTsKLQlyZXR1cm4gTlVMTDsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc19mb2xsb3dfbGluayAgKi8KLQotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRldmZzX2lvcHMgPSB7Ci0JLnNldGF0dHIgPSBkZXZmc19ub3RpZnlfY2hhbmdlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRldmZzX2Rpcl9pb3BzID0gewotCS5sb29rdXAgPSBkZXZmc19sb29rdXAsCi0JLnVubGluayA9IGRldmZzX3VubGluaywKLQkuc3ltbGluayA9IGRldmZzX3N5bWxpbmssCi0JLm1rZGlyID0gZGV2ZnNfbWtkaXIsCi0JLnJtZGlyID0gZGV2ZnNfcm1kaXIsCi0JLm1rbm9kID0gZGV2ZnNfbWtub2QsCi0JLnNldGF0dHIgPSBkZXZmc19ub3RpZnlfY2hhbmdlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRldmZzX3N5bWxpbmtfaW9wcyA9IHsKLQkucmVhZGxpbmsgPSBnZW5lcmljX3JlYWRsaW5rLAotCS5mb2xsb3dfbGluayA9IGRldmZzX2ZvbGxvd19saW5rLAotCS5zZXRhdHRyID0gZGV2ZnNfbm90aWZ5X2NoYW5nZSwKLX07Ci0KLXN0YXRpYyBpbnQgZGV2ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQotewotCXN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZSA9IE5VTEw7Ci0KLQlpZiAoX2RldmZzX2dldF9yb290X2VudHJ5KCkgPT0gTlVMTCkKLQkJZ290byBvdXRfbm9fcm9vdDsKLQlhdG9taWNfc2V0KCZmc19pbmZvLmRldmZzZF9vdmVycnVuX2NvdW50LCAwKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc19pbmZvLmRldmZzZF93YWl0X3F1ZXVlKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc19pbmZvLnJldmFsaWRhdGVfd2FpdF9xdWV1ZSk7Ci0JZnNfaW5mby5zYiA9IHNiOwotCXNiLT5zX2ZzX2luZm8gPSAmZnNfaW5mbzsKLQlzYi0+c19ibG9ja3NpemUgPSAxMDI0OwotCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7Ci0Jc2ItPnNfbWFnaWMgPSBERVZGU19TVVBFUl9NQUdJQzsKLQlzYi0+c19vcCA9ICZkZXZmc19zb3BzOwotCXNiLT5zX3RpbWVfZ3JhbiA9IDE7Ci0JaWYgKChyb290X2lub2RlID0gX2RldmZzX2dldF92ZnNfaW5vZGUoc2IsIHJvb3RfZW50cnksIE5VTEwpKSA9PSBOVUxMKQotCQlnb3RvIG91dF9ub19yb290OwotCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdF9pbm9kZSk7Ci0JaWYgKCFzYi0+c19yb290KQotCQlnb3RvIG91dF9ub19yb290OwotCURQUklOVEsoREVCVUdfU19SRUFELCAiKCk6IG1hZGUgZGV2ZnMgcHRyOiAlcFxuIiwgc2ItPnNfZnNfaW5mbyk7Ci0JcmV0dXJuIDA7Ci0KLSAgICAgIG91dF9ub19yb290OgotCVBSSU5USygiKCk6IGdldCByb290IGlub2RlIGZhaWxlZFxuIik7Ci0JaWYgKHJvb3RfaW5vZGUpCi0JCWlwdXQocm9vdF9pbm9kZSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNfZmlsbF9zdXBlciAgKi8KLQotc3RhdGljIGludCBkZXZmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCi0JCQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAotCQkJdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCi17Ci0JcmV0dXJuIGdldF9zYl9zaW5nbGUoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIGRldmZzX2ZpbGxfc3VwZXIsIG1udCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXZmc19mc190eXBlID0gewotCS5uYW1lID0gREVWRlNfTkFNRSwKLQkuZ2V0X3NiID0gZGV2ZnNfZ2V0X3NiLAotCS5raWxsX3NiID0ga2lsbF9hbm9uX3N1cGVyLAotfTsKLQotLyogIEZpbGUgb3BlcmF0aW9ucyBmb3IgZGV2ZnNkIGZvbGxvdyAgKi8KLQotc3RhdGljIHNzaXplX3QgZGV2ZnNkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sCi0JCQkgICBsb2ZmX3QgKiBwcG9zKQotewotCWludCBkb25lID0gRkFMU0U7Ci0JaW50IGl2YWw7Ci0JbG9mZl90IHBvcywgZGV2bmFtZV9vZmZzZXQsIHRsZW4sIHJwb3M7Ci0JZGV2ZnNfaGFuZGxlX3QgZGU7Ci0Jc3RydWN0IGRldmZzZF9idWZfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBmc19pbmZvICpmc19pbmZvID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKLQlzdHJ1Y3QgZGV2ZnNkX25vdGlmeV9zdHJ1Y3QgKmluZm8gPSBmc19pbmZvLT5kZXZmc2RfaW5mbzsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCS8qICBWZXJpZnkgdGhlIHRhc2sgaGFzIGdyYWJiZWQgdGhlIHF1ZXVlICAqLwotCWlmIChmc19pbmZvLT5kZXZmc2RfdGFzayAhPSBjdXJyZW50KQotCQlyZXR1cm4gLUVQRVJNOwotCWluZm8tPm1ham9yID0gMDsKLQlpbmZvLT5taW5vciA9IDA7Ci0JLyogIEJsb2NrIGZvciBhIG5ldyBlbnRyeSAgKi8KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlKCZmc19pbmZvLT5kZXZmc2Rfd2FpdF9xdWV1ZSwgJndhaXQpOwotCXdoaWxlIChkZXZmc2RfcXVldWVfZW1wdHkoZnNfaW5mbykpIHsKLQkJZnNfaW5mby0+ZGV2ZnNkX3NsZWVwaW5nID0gVFJVRTsKLQkJd2FrZV91cCgmZnNfaW5mby0+cmV2YWxpZGF0ZV93YWl0X3F1ZXVlKTsKLQkJc2NoZWR1bGUoKTsKLQkJZnNfaW5mby0+ZGV2ZnNkX3NsZWVwaW5nID0gRkFMU0U7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmZzX2luZm8tPmRldmZzZF93YWl0X3F1ZXVlLCAmd2FpdCk7Ci0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlyZXR1cm4gLUVJTlRSOwotCQl9Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZmc19pbmZvLT5kZXZmc2Rfd2FpdF9xdWV1ZSwgJndhaXQpOwotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkvKiAgTm93IHBsYXkgd2l0aCB0aGUgZGF0YSAgKi8KLQlpdmFsID0gYXRvbWljX3JlYWQoJmZzX2luZm8tPmRldmZzZF9vdmVycnVuX2NvdW50KTsKLQlpbmZvLT5vdmVycnVuX2NvdW50ID0gaXZhbDsKLQllbnRyeSA9IGZzX2luZm8tPmRldmZzZF9maXJzdF9ldmVudDsKLQlpbmZvLT50eXBlID0gZW50cnktPnR5cGU7Ci0JaW5mby0+bW9kZSA9IGVudHJ5LT5tb2RlOwotCWluZm8tPnVpZCA9IGVudHJ5LT51aWQ7Ci0JaW5mby0+Z2lkID0gZW50cnktPmdpZDsKLQlkZSA9IGVudHJ5LT5kZTsKLQlpZiAoU19JU0NIUihkZS0+bW9kZSkgfHwgU19JU0JMSyhkZS0+bW9kZSkpIHsKLQkJaW5mby0+bWFqb3IgPSBNQUpPUihkZS0+dS5kZXYpOwotCQlpbmZvLT5taW5vciA9IE1JTk9SKGRlLT51LmRldik7Ci0JfQotCXBvcyA9IGRldmZzX2dlbmVyYXRlX3BhdGgoZGUsIGluZm8tPmRldm5hbWUsIERFVkZTX1BBVEhMRU4pOwotCWlmIChwb3MgPCAwKQotCQlyZXR1cm4gcG9zOwotCWluZm8tPm5hbWVsZW4gPSBERVZGU19QQVRITEVOIC0gcG9zIC0gMTsKLQlpZiAoaW5mby0+bW9kZSA9PSAwKQotCQlpbmZvLT5tb2RlID0gZGUtPm1vZGU7Ci0JZGV2bmFtZV9vZmZzZXQgPSBpbmZvLT5kZXZuYW1lIC0gKGNoYXIgKilpbmZvOwotCXJwb3MgPSAqcHBvczsKLQlpZiAocnBvcyA8IGRldm5hbWVfb2Zmc2V0KSB7Ci0JCS8qICBDb3B5IHBhcnRzIG9mIHRoZSBoZWFkZXIgICovCi0JCXRsZW4gPSBkZXZuYW1lX29mZnNldCAtIHJwb3M7Ci0JCWlmICh0bGVuID4gbGVuKQotCQkJdGxlbiA9IGxlbjsKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIChjaGFyICopaW5mbyArIHJwb3MsIHRsZW4pKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlycG9zICs9IHRsZW47Ci0JCWJ1ZiArPSB0bGVuOwotCQlsZW4gLT0gdGxlbjsKLQl9Ci0JaWYgKChycG9zID49IGRldm5hbWVfb2Zmc2V0KSAmJiAobGVuID4gMCkpIHsKLQkJLyogIENvcHkgdGhlIG5hbWUgICovCi0JCXRsZW4gPSBpbmZvLT5uYW1lbGVuICsgMTsKLQkJaWYgKHRsZW4gPiBsZW4pCi0JCQl0bGVuID0gbGVuOwotCQllbHNlCi0JCQlkb25lID0gVFJVRTsKLQkJaWYgKGNvcHlfdG9fdXNlcgotCQkgICAgKGJ1ZiwgaW5mby0+ZGV2bmFtZSArIHBvcyArIHJwb3MgLSBkZXZuYW1lX29mZnNldCwgdGxlbikpIHsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCXJwb3MgKz0gdGxlbjsKLQl9Ci0JdGxlbiA9IHJwb3MgLSAqcHBvczsKLQlpZiAoZG9uZSkgewotCQlkZXZmc19oYW5kbGVfdCBwYXJlbnQ7Ci0KLQkJc3Bpbl9sb2NrKCZmc19pbmZvLT5kZXZmc2RfYnVmZmVyX2xvY2spOwotCQlmc19pbmZvLT5kZXZmc2RfZmlyc3RfZXZlbnQgPSBlbnRyeS0+bmV4dDsKLQkJaWYgKGVudHJ5LT5uZXh0ID09IE5VTEwpCi0JCQlmc19pbmZvLT5kZXZmc2RfbGFzdF9ldmVudCA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5kZXZmc2RfYnVmZmVyX2xvY2spOwotCQlmb3IgKDsgZGUgIT0gTlVMTDsgZGUgPSBwYXJlbnQpIHsKLQkJCXBhcmVudCA9IGRlLT5wYXJlbnQ7Ci0JCQlkZXZmc19wdXQoZGUpOwotCQl9Ci0JCWttZW1fY2FjaGVfZnJlZShkZXZmc2RfYnVmX2NhY2hlLCBlbnRyeSk7Ci0JCWlmIChpdmFsID4gMCkKLQkJCWF0b21pY19zdWIoaXZhbCwgJmZzX2luZm8tPmRldmZzZF9vdmVycnVuX2NvdW50KTsKLQkJKnBwb3MgPSAwOwotCX0gZWxzZQotCQkqcHBvcyA9IHJwb3M7Ci0JcmV0dXJuIHRsZW47Ci19CQkJCS8qICBFbmQgRnVuY3Rpb24gZGV2ZnNkX3JlYWQgICovCi0KLXN0YXRpYyBpbnQgZGV2ZnNkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IGl2YWw7Ci0Jc3RydWN0IGZzX2luZm8gKmZzX2luZm8gPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIERFVkZTRElPQ19HRVRfUFJPVE9fUkVWOgotCQlpdmFsID0gREVWRlNEX1BST1RPQ09MX1JFVklTSU9OX0tFUk5FTDsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpdmFsLCBzaXplb2YgaXZhbCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBERVZGU0RJT0NfU0VUX0VWRU5UX01BU0s6Ci0JCS8qICBFbnN1cmUgb25seSBvbmUgcmVhZGVyIGhhcyBhY2Nlc3MgdG8gdGhlIHF1ZXVlLiBUaGlzIHNjaGVtZSB3aWxsCi0JCSAgIHdvcmsgZXZlbiBpZiB0aGUgZ2xvYmFsIGtlcm5lbCBsb2NrIHdlcmUgdG8gYmUgcmVtb3ZlZCwgYmVjYXVzZSBpdAotCQkgICBkb2Vzbid0IG1hdHRlciB3aG8gZ2V0cyBpbiBmaXJzdCwgYXMgbG9uZyBhcyBvbmx5IG9uZSBnZXRzIGl0ICAqLwotCQlpZiAoZnNfaW5mby0+ZGV2ZnNkX3Rhc2sgPT0gTlVMTCkgewotCQkJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsKLQotCQkJaWYgKCFzcGluX3RyeWxvY2soJmxvY2spKQotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQlpZiAoZnNfaW5mby0+ZGV2ZnNkX3Rhc2sgIT0gTlVMTCkgewkvKiAgV2UgbG9zdCB0aGUgcmFjZS4uLiAgKi8KLQkJCQlzcGluX3VubG9jaygmbG9jayk7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQkJCWZzX2luZm8tPmRldmZzZF90YXNrID0gY3VycmVudDsKLQkJCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQkJCWZzX2luZm8tPmRldmZzZF9wZ3JwID0KLQkJCSAgICAocHJvY2Vzc19ncm91cChjdXJyZW50KSA9PQotCQkJICAgICBjdXJyZW50LT5waWQpID8gcHJvY2Vzc19ncm91cChjdXJyZW50KSA6IDA7Ci0JCQlmc19pbmZvLT5kZXZmc2RfZmlsZSA9IGZpbGU7Ci0JCQlmc19pbmZvLT5kZXZmc2RfaW5mbyA9Ci0JCQkgICAga21hbGxvYyhzaXplb2YgKmZzX2luZm8tPmRldmZzZF9pbmZvLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghZnNfaW5mby0+ZGV2ZnNkX2luZm8pIHsKLQkJCQlkZXZmc2RfY2xvc2UoaW5vZGUsIGZpbGUpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQl9IGVsc2UgaWYgKGZzX2luZm8tPmRldmZzZF90YXNrICE9IGN1cnJlbnQpCi0JCQlyZXR1cm4gLUVCVVNZOwotCQlmc19pbmZvLT5kZXZmc2RfZXZlbnRfbWFzayA9IGFyZzsJLyogIExldCB0aGUgbWFzc2VzIGNvbWUgZm9ydGggICovCi0JCWJyZWFrOwotCWNhc2UgREVWRlNESU9DX1JFTEVBU0VfRVZFTlRfUVVFVUU6Ci0JCWlmIChmc19pbmZvLT5kZXZmc2RfZmlsZSAhPSBmaWxlKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJcmV0dXJuIGRldmZzZF9jbG9zZShpbm9kZSwgZmlsZSk7Ci0JCS8qYnJlYWs7ICovCi0jaWZkZWYgQ09ORklHX0RFVkZTX0RFQlVHCi0JY2FzZSBERVZGU0RJT0NfU0VUX0RFQlVHX01BU0s6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmaXZhbCwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YgaXZhbCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJZGV2ZnNfZGVidWcgPSBpdmFsOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIGRldmZzZF9pb2N0bCAgKi8KLQotc3RhdGljIGludCBkZXZmc2RfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRldmZzZF9idWZfZW50cnkgKmVudHJ5LCAqbmV4dDsKLQlzdHJ1Y3QgZnNfaW5mbyAqZnNfaW5mbyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87Ci0KLQlpZiAoZnNfaW5mby0+ZGV2ZnNkX2ZpbGUgIT0gZmlsZSkKLQkJcmV0dXJuIDA7Ci0JZnNfaW5mby0+ZGV2ZnNkX2V2ZW50X21hc2sgPSAwOwotCWZzX2luZm8tPmRldmZzZF9maWxlID0gTlVMTDsKLQlzcGluX2xvY2soJmZzX2luZm8tPmRldmZzZF9idWZmZXJfbG9jayk7Ci0JZW50cnkgPSBmc19pbmZvLT5kZXZmc2RfZmlyc3RfZXZlbnQ7Ci0JZnNfaW5mby0+ZGV2ZnNkX2ZpcnN0X2V2ZW50ID0gTlVMTDsKLQlmc19pbmZvLT5kZXZmc2RfbGFzdF9ldmVudCA9IE5VTEw7Ci0Ja2ZyZWUoZnNfaW5mby0+ZGV2ZnNkX2luZm8pOwotCWZzX2luZm8tPmRldmZzZF9pbmZvID0gTlVMTDsKLQlzcGluX3VubG9jaygmZnNfaW5mby0+ZGV2ZnNkX2J1ZmZlcl9sb2NrKTsKLQlmc19pbmZvLT5kZXZmc2RfcGdycCA9IDA7Ci0JZnNfaW5mby0+ZGV2ZnNkX3Rhc2sgPSBOVUxMOwotCXdha2VfdXAoJmZzX2luZm8tPnJldmFsaWRhdGVfd2FpdF9xdWV1ZSk7Ci0JZm9yICg7IGVudHJ5OyBlbnRyeSA9IG5leHQpIHsKLQkJbmV4dCA9IGVudHJ5LT5uZXh0OwotCQlrbWVtX2NhY2hlX2ZyZWUoZGV2ZnNkX2J1Zl9jYWNoZSwgZW50cnkpOwotCX0KLQlyZXR1cm4gMDsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBkZXZmc2RfY2xvc2UgICovCi0KLSNpZmRlZiBDT05GSUdfREVWRlNfREVCVUcKLXN0YXRpYyBzc2l6ZV90IHN0YXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJCSBsb2ZmX3QgKiBwcG9zKQotewotCXNzaXplX3QgbnVtOwotCWNoYXIgdHh0WzgwXTsKLQotCW51bSA9IHNwcmludGYodHh0LCAiTnVtYmVyIG9mIGVudHJpZXM6ICV1ICBudW1iZXIgb2YgYnl0ZXM6ICV1XG4iLAotCQkgICAgICBzdGF0X251bV9lbnRyaWVzLCBzdGF0X251bV9ieXRlcykgKyAxOwotCWlmICgqcHBvcyA+PSBudW0pCi0JCXJldHVybiAwOwotCWlmICgqcHBvcyArIGxlbiA+IG51bSkKLQkJbGVuID0gbnVtIC0gKnBwb3M7Ci0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHR4dCArICpwcG9zLCBsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkqcHBvcyArPSBsZW47Ci0JcmV0dXJuIGxlbjsKLX0JCQkJLyogIEVuZCBGdW5jdGlvbiBzdGF0X3JlYWQgICovCi0jZW5kaWYKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9kZXZmc19mcyh2b2lkKQotewotCWludCBlcnI7Ci0JaW50IG1ham9yOwotCXN0cnVjdCBkZXZmc19lbnRyeSAqZGV2ZnNkOwotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotCXN0cnVjdCBkZXZmc19lbnRyeSAqc3RhdDsKLSNlbmRpZgotCi0JaWYgKF9kZXZmc19nZXRfcm9vdF9lbnRyeSgpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIFJpY2hhcmQgR29vY2ggKHJnb29jaEBhdG5mLmNzaXJvLmF1KVxuIiwKLQkgICAgICAgREVWRlNfTkFNRSwgREVWRlNfVkVSU0lPTik7Ci0JZGV2ZnNkX2J1Zl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJkZXZmc2RfZXZlbnQiLAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGV2ZnNkX2J1Zl9lbnRyeSksCi0JCQkJCSAgICAgMCwgMCwgTlVMTCwgTlVMTCk7Ci0JaWYgKCFkZXZmc2RfYnVmX2NhY2hlKQotCQlPT1BTKCIoKTogdW5hYmxlIHRvIGFsbG9jYXRlIGV2ZW50IHNsYWJcbiIpOwotI2lmZGVmIENPTkZJR19ERVZGU19ERUJVRwotCWRldmZzX2RlYnVnID0gZGV2ZnNfZGVidWdfaW5pdDsKLQlwcmludGsoS0VSTl9JTkZPICIlczogZGV2ZnNfZGVidWc6IDB4JTB4XG4iLCBERVZGU19OQU1FLCBkZXZmc19kZWJ1Zyk7Ci0jZW5kaWYKLQlwcmludGsoS0VSTl9JTkZPICIlczogYm9vdF9vcHRpb25zOiAweCUweFxuIiwgREVWRlNfTkFNRSwgYm9vdF9vcHRpb25zKTsKLQotCS8qIHJlZ2lzdGVyIHNwZWNpYWwgZGV2aWNlIGZvciBkZXZmc2QgY29tbXVuaWNhdGlvbiAqLwotCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJkZXZmcyIsICZkZXZmc19mb3BzKTsKLQlpZiAobWFqb3IgPCAwKQotCQlyZXR1cm4gbWFqb3I7Ci0KLQkvKiAgQW5kIGNyZWF0ZSB0aGUgZW50cnkgZm9yICIuZGV2ZnNkIiAgKi8KLQlkZXZmc2QgPSBfZGV2ZnNfYWxsb2NfZW50cnkoIi5kZXZmc2QiLCAwLCBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IpOwotCWlmIChkZXZmc2QgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGV2ZnNkLT51LmRldiA9IE1LREVWKG1ham9yLCAwKTsKLQlfZGV2ZnNfYXBwZW5kX2VudHJ5KHJvb3RfZW50cnksIGRldmZzZCwgTlVMTCk7Ci0KLSNpZmRlZiBDT05GSUdfREVWRlNfREVCVUcKLQlzdGF0ID0gX2RldmZzX2FsbG9jX2VudHJ5KCIuc3RhdCIsIDAsIFNfSUZDSFIgfCBTX0lSVUdPKTsKLQlpZiAoc3RhdCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzdGF0LT51LmRldiA9IE1LREVWKG1ham9yLCAxKTsKLQlfZGV2ZnNfYXBwZW5kX2VudHJ5KHJvb3RfZW50cnksIHN0YXQsIE5VTEwpOwotI2VuZGlmCi0KLQllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZkZXZmc19mc190eXBlKTsKLQlyZXR1cm4gZXJyOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIGluaXRfZGV2ZnNfZnMgICovCi0KLXZvaWQgX19pbml0IG1vdW50X2RldmZzX2ZzKHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWlmICghKGJvb3Rfb3B0aW9ucyAmIE9QVElPTl9NT1VOVCkpCi0JCXJldHVybjsKLQllcnIgPSBkb19tb3VudCgibm9uZSIsICIvZGV2IiwgImRldmZzIiwgMCwgTlVMTCk7Ci0JaWYgKGVyciA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICJNb3VudGVkIGRldmZzIG9uIC9kZXZcbiIpOwotCWVsc2UKLQkJUFJJTlRLKCIoKTogdW5hYmxlIHRvIG1vdW50IGRldmZzLCBlcnI6ICVkXG4iLCBlcnIpOwotfQkJCQkvKiAgRW5kIEZ1bmN0aW9uIG1vdW50X2RldmZzX2ZzICAqLwotCi1tb2R1bGVfaW5pdChpbml0X2RldmZzX2ZzKQpkaWZmIC0tZ2l0IGEvZnMvZGV2ZnMvdXRpbC5jIGIvZnMvZGV2ZnMvdXRpbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjA2ZDM4Li4wMDAwMDAwCi0tLSBhL2ZzL2RldmZzL3V0aWwuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qICBkZXZmcyAoRGV2aWNlIEZpbGVTeXN0ZW0pIHV0aWxpdGllcy4KLQotICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyICBSaWNoYXJkIEdvb2NoCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICAgIFJpY2hhcmQgR29vY2ggbWF5IGJlIHJlYWNoZWQgYnkgZW1haWwgYXQgIHJnb29jaEBhdG5mLmNzaXJvLmF1Ci0gICAgVGhlIHBvc3RhbCBhZGRyZXNzIGlzOgotICAgICAgUmljaGFyZCBHb29jaCwgYy9vIEFUTkYsIFAuIE8uIEJveCA3NiwgRXBwaW5nLCBOLlMuVy4sIDIxMjEsIEF1c3RyYWxpYS4KLQotICAgIENoYW5nZUxvZwotCi0gICAgMTk5OTEwMzEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENyZWF0ZWQuCi0gICAgMTk5OTExMDMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENyZWF0ZWQgPF9kZXZmc19jb252ZXJ0X25hbWU+IGFuZCBzdXBwb3J0ZWQgU0NTSSBhbmQgSURFIENELVJPTXMKLSAgICAyMDAwMDIwMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgQ2hhbmdlZCBvcGVyYXRpb25zIHBvaW50ZXIgdHlwZSB0byB2b2lkICouCi0gICAgMjAwMDA2MjEgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENoYW5nZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19yZWdpc3Rlcl9zZXJpZXM+LgotICAgIDIwMDAwNjIyICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBUb29rIGFjY291bnQgb2YgaW50ZXJmYWNlIGNoYW5nZSB0byA8ZGV2ZnNfbWtfc3ltbGluaz4uCi0gICAgICAgICAgICAgICBUb29rIGFjY291bnQgb2YgaW50ZXJmYWNlIGNoYW5nZSB0byA8ZGV2ZnNfbWtfZGlyPi4KLSAgICAyMDAxMDUxOSAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBjbGVhbnVwLgotICAgIDIwMDEwNzA5ICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBDcmVhdGVkIDxkZXZmc18qYWxsb2NfbWFqb3I+IGFuZCA8ZGV2ZnNfKmFsbG9jX2Rldm51bT4uCi0gICAgMjAwMTA3MTAgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENyZWF0ZWQgPGRldmZzXyphbGxvY191bmlxdWVfbnVtYmVyPi4KLSAgICAyMDAxMDczMCAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiB0eXBvIGZpeC4KLSAgICAyMDAxMDgwNiAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgTWFkZSA8YmxvY2tfc2VtYXBob3JlPiBhbmQgPGNoYXJfc2VtYXBob3JlPiBwcml2YXRlLgotICAgIDIwMDEwODEzICAgUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+Ci0gICAgICAgICAgICAgICBGaXhlZCBidWcgaW4gPGRldmZzX2FsbG9jX3VuaXF1ZV9udW1iZXI+OiBsaW1pdGVkIHRvIDEyOCBudW1iZXJzCi0gICAgMjAwMTA4MTggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIFVwZGF0ZWQgbWFqb3IgbWFza3MgdXAgdG8gTGludXMnICJubyBuZXcgbWFqb3JzIiBwcm9jbGFtYXRpb24uCi0JICAgICAgIEJsb2NrOiB3ZXJlIDEyNiBub3cgMTIyIGZyZWUsIGNoYXI6IHdlcmUgMjYgbm93IDE5IGZyZWUuCi0gICAgMjAwMjAzMjQgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEZpeGVkIGJ1ZyBpbiA8ZGV2ZnNfYWxsb2NfdW5pcXVlX251bWJlcj46IHdhcyBjbGVhcmluZyBiZXlvbmQKLQkgICAgICAgYml0ZmllbGQuCi0gICAgMjAwMjAzMjYgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIEZpeGVkIGJpdGZpZWxkIGRhdGEgdHlwZSBmb3IgPGRldmZzXyphbGxvY19kZXZudW0+LgotICAgICAgICAgICAgICAgTWFkZSBtYWpvciBiaXRmaWVsZCB0eXBlIGFuZCBpbml0aWFsaXNlciA2NCBiaXQgc2FmZS4KLSAgICAyMDAyMDQxMyAgIFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgotICAgICAgICAgICAgICAgRml4ZWQgc2hpZnQgd2FybmluZyBvbiA2NCBiaXQgbWFjaGluZXMuCi0gICAgMjAwMjA0MjggICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIENvcGllZCBhbmQgdXNlZCBtYWNybyBmb3IgZXJyb3IgbWVzc2FnZXMgZnJvbSBmcy9kZXZmcy9iYXNlLmMgCi0gICAgMjAwMjEwMTMgICBSaWNoYXJkIEdvb2NoIDxyZ29vY2hAYXRuZi5jc2lyby5hdT4KLSAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gZml4LgotICAgIDIwMDMwMTAxICAgQWRhbSBKLiBSaWNodGVyIDxhZGFtQHlnZ2RyYXNpbC5jb20+Ci0gICAgICAgICAgICAgICBFbGltaW5hdGUgREVWRlNfU1BFQ0lBTF97Q0hSLEJMS30uICBVc2UgbW9kZV90IGluc3RlYWQuCi0gICAgMjAwMzAxMDYgICBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+Ci0gICAgICAgICAgICAgICBSZXdyaXRlIGRldmZzX3ssZGV9YWxsb2NfZGV2bnVtIHRvIGxvb2sgbGlrZSBDIGNvZGUuCi0qLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLWludCBkZXZmc19yZWdpc3Rlcl90YXBlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JY2hhciB0bmFtZVszMl0sIGRlc3RbNjRdOwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgdGFwZV9jb3VudGVyOwotCXVuc2lnbmVkIGludCBuID0gdGFwZV9jb3VudGVyKys7Ci0KLQlzcHJpbnRmKGRlc3QsICIuLi8lcyIsIG5hbWUpOwotCXNwcmludGYodG5hbWUsICJ0YXBlcy90YXBlJXUiLCBuKTsKLQlkZXZmc19ta19zeW1saW5rKHRuYW1lLCBkZXN0KTsKLQotCXJldHVybiBuOwotfQotCi1FWFBPUlRfU1lNQk9MKGRldmZzX3JlZ2lzdGVyX3RhcGUpOwotCi12b2lkIGRldmZzX3VucmVnaXN0ZXJfdGFwZShpbnQgbnVtKQotewotCWlmIChudW0gPj0gMCkKLQkJZGV2ZnNfcmVtb3ZlKCJ0YXBlcy90YXBlJXUiLCBudW0pOwotfQotCi1FWFBPUlRfU1lNQk9MKGRldmZzX3VucmVnaXN0ZXJfdGFwZSk7CmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IDUzOGZiMDQuLjU5ODFlMTdmIDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtMjIwLDcgKzIyMCw4IEBACiAJaWYgKGRpby0+ZW5kX2lvICYmIGRpby0+cmVzdWx0KQogCQlkaW8tPmVuZF9pbyhkaW8tPmlvY2IsIG9mZnNldCwgYnl0ZXMsIGRpby0+bWFwX2JoLmJfcHJpdmF0ZSk7CiAJaWYgKGRpby0+bG9ja190eXBlID09IERJT19MT0NLSU5HKQotCQl1cF9yZWFkKCZkaW8tPmlub2RlLT5pX2FsbG9jX3NlbSk7CisJCS8qIGxvY2tkZXA6IG5vbi1vd25lciByZWxlYXNlICovCisJCXVwX3JlYWRfbm9uX293bmVyKCZkaW8tPmlub2RlLT5pX2FsbG9jX3NlbSk7CiB9CiAKIC8qCkBAIC0xMjYxLDcgKzEyNjIsOCBAQAogCQl9CiAKIAkJaWYgKGRpb19sb2NrX3R5cGUgPT0gRElPX0xPQ0tJTkcpCi0JCQlkb3duX3JlYWQoJmlub2RlLT5pX2FsbG9jX3NlbSk7CisJCQkvKiBsb2NrZGVwOiBub3QgdGhlIG93bmVyIHdpbGwgcmVsZWFzZSBpdCAqLworCQkJZG93bl9yZWFkX25vbl9vd25lcigmaW5vZGUtPmlfYWxsb2Nfc2VtKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvZWZzL2lub2RlLmMgYi9mcy9lZnMvaW5vZGUuYwppbmRleCAxODA2MDdmLi4xNzQ2OTZmIDEwMDY0NAotLS0gYS9mcy9lZnMvaW5vZGUuYworKysgYi9mcy9lZnMvaW5vZGUuYwpAQCAtMjEsNyArMjEsNyBAQAogewogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayxlZnNfZ2V0X2Jsb2NrKTsKIH0KLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVmc19hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gZWZzX3JlYWRwYWdlLAogCS5zeW5jX3BhZ2UgPSBibG9ja19zeW5jX3BhZ2UsCiAJLmJtYXAgPSBfZWZzX2JtYXAKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9zeW1saW5rLmMgYi9mcy9lZnMvc3ltbGluay5jCmluZGV4IDNkOWEzNTAuLmUyNDljZjcgMTAwNjQ0Ci0tLSBhL2ZzL2Vmcy9zeW1saW5rLmMKKysrIGIvZnMvZWZzL3N5bWxpbmsuYwpAQCAtNTMsNiArNTMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWZzX3N5bWxpbmtfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWZzX3N5bWxpbmtfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBlZnNfc3ltbGlua19yZWFkcGFnZQogfTsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggOWM2NzdiYi4uMTlmZmIwNCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogICovCiBzdHJ1Y3Qgd2FrZV90YXNrX25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgbGxpbms7Ci0JdGFza190ICp0YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CiB9OwogCkBAIC00MTMsNyArNDEzLDcgQEAKIHsKIAlpbnQgd2FrZV9uZXN0cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl0YXNrX3QgKnRoaXNfdGFzayA9IGN1cnJlbnQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aGlzX3Rhc2sgPSBjdXJyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgKmxzdGhlYWQgPSAmcHN3LT53YWtlX3Rhc2tfbGlzdCwgKmxuazsKIAlzdHJ1Y3Qgd2FrZV90YXNrX25vZGUgKnRuY3VyOwogCXN0cnVjdCB3YWtlX3Rhc2tfbm9kZSB0bm9kZTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjODQ5NGY1Li44MzQ0YmE3IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBmb3JtYXRzLiAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCA0MzNhMjEzLi5kNDg3MDQzIDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTExLDcgKzExLDYgQEAKICAqICAgICAgICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpLCAxOTk1CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImV4dDIuaCIKICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oCmluZGV4IDlmNzRhNjIuLmU2NWEwMTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZXh0Mi5oCisrKyBiL2ZzL2V4dDIvZXh0Mi5oCkBAIC0xNjIsOSArMTYyLDkgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfeGlwX2ZpbGVfb3BlcmF0aW9uczsKIAogLyogaW5vZGUuYyAqLwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzX3hpcDsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDJfbm9iaF9hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzX3hpcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDJfbm9iaF9hb3BzOwogCiAvKiBuYW1laS5jICovCiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9kaXJfaW5vZGVfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaWFsbG9jLmMgYi9mcy9leHQyL2lhbGxvYy5jCmluZGV4IDMwOGMyNTIuLmRlODVjNjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaWFsbG9jLmMKKysrIGIvZnMvZXh0Mi9pYWxsb2MuYwpAQCAtMTIsNyArMTIsNiBAQAogICogICAgICAgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSksIDE5OTUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggMDRhZjljNC4uZmI0ZDMyMiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtNjg0LDcgKzY4NCw3IEBACiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBleHQyX2dldF9ibG9jayk7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleHQyX2FvcHMgPSB7CiAJLnJlYWRwYWdlCQk9IGV4dDJfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcwkJPSBleHQyX3JlYWRwYWdlcywKIAkud3JpdGVwYWdlCQk9IGV4dDJfd3JpdGVwYWdlLApAQCAtNjk3LDEyICs2OTcsMTIgQEAKIAkubWlncmF0ZXBhZ2UJCT0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKIH07CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzX3hpcCA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0Ml9hb3BzX3hpcCA9IHsKIAkuYm1hcAkJCT0gZXh0Ml9ibWFwLAogCS5nZXRfeGlwX3BhZ2UJCT0gZXh0Ml9nZXRfeGlwX3BhZ2UsCiB9OwogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDJfbm9iaF9hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleHQyX25vYmhfYW9wcyA9IHsKIAkucmVhZHBhZ2UJCT0gZXh0Ml9yZWFkcGFnZSwKIAkucmVhZHBhZ2VzCQk9IGV4dDJfcmVhZHBhZ2VzLAogCS53cml0ZXBhZ2UJCT0gZXh0Ml9ub2JoX3dyaXRlcGFnZSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCBkNDIzM2IyLi5mMjcwMmNkIDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgICAgICAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KSwgMTk5NQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTE1OCw3ICsxMTU3LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgdG1wX2JoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBJX01VVEVYX1FVT1RBKTsKIAl3aGlsZSAodG93cml0ZSA+IDApIHsKIAkJdG9jb3B5ID0gc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDwgdG93cml0ZSA/CiAJCQkJc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDogdG93cml0ZTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuaCBiL2ZzL2V4dDIveGF0dHIuaAppbmRleCA2N2NmZWI2Li5iZjgxNzViIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmgKKysrIGIvZnMvZXh0Mi94YXR0ci5oCkBAIC02LDcgKzYsNiBAQAogICAoQykgMjAwMSBBbmRyZWFzIEdydWVuYmFjaGVyLCA8YS5ncnVlbmJhY2hlckBjb21wdXRlci5vcmc+CiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDk2MTcyZTguLmE1MDRhNDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMTEsNyArMTEsNiBAQAogICogICAgICAgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSksIDE5OTUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDAzMjFlMWIuLmY4MDRkNWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTE2OTgsNyArMTY5OCw3IEBACiAJcmV0dXJuIF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHBhZ2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleHQzX29yZGVyZWRfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDNfb3JkZXJlZF9hb3BzID0gewogCS5yZWFkcGFnZQk9IGV4dDNfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcwk9IGV4dDNfcmVhZHBhZ2VzLAogCS53cml0ZXBhZ2UJPSBleHQzX29yZGVyZWRfd3JpdGVwYWdlLApAQCAtMTcxMiw3ICsxNzEyLDcgQEAKIAkubWlncmF0ZXBhZ2UJPSBidWZmZXJfbWlncmF0ZV9wYWdlLAogfTsKIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0M193cml0ZWJhY2tfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDNfd3JpdGViYWNrX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gZXh0M19yZWFkcGFnZSwKIAkucmVhZHBhZ2VzCT0gZXh0M19yZWFkcGFnZXMsCiAJLndyaXRlcGFnZQk9IGV4dDNfd3JpdGViYWNrX3dyaXRlcGFnZSwKQEAgLTE3MjYsNyArMTcyNiw3IEBACiAJLm1pZ3JhdGVwYWdlCT0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4dDNfam91cm5hbGxlZF9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXh0M19qb3VybmFsbGVkX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gZXh0M19yZWFkcGFnZSwKIAkucmVhZHBhZ2VzCT0gZXh0M19yZWFkcGFnZXMsCiAJLndyaXRlcGFnZQk9IGV4dDNfam91cm5hbGxlZF93cml0ZXBhZ2UsCmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCBkZmQ4MTE4Li41ZTEzMzdmIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTgsNyArOCw2IEBACiAgKiBUaGlzIGNvdWxkIHByb2JhYmx5IGJlIG1hZGUgaW50byBhIG1vZHVsZSwgYmVjYXVzZSBpdCBpcyBub3Qgb2Z0ZW4gaW4gdXNlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBFWFQzRlNfREVCVUcKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IGI3NDgzMzYuLjgxM2Q1ODkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqICAgICAgICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpLCAxOTk1CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0yNjE1LDcgKzI2MTQsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGpvdXJuYWxfY3VycmVudF9oYW5kbGUoKTsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOwogCXdoaWxlICh0b3dyaXRlID4gMCkgewogCQl0b2NvcHkgPSBzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgPCB0b3dyaXRlID8KIAkJCQlzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgOiB0b3dyaXRlOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My94YXR0ci5oIGIvZnMvZXh0My94YXR0ci5oCmluZGV4IDJjZWFlMzguLjZiMWFlMWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMveGF0dHIuaAorKysgYi9mcy9leHQzL3hhdHRyLmgKQEAgLTYsNyArNiw2IEBACiAgIChDKSAyMDAxIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIDxhLmdydWVuYmFjaGVyQGNvbXB1dGVyLm9yZz4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogCiAvKiBNYWdpYyB2YWx1ZSBpbiBhdHRyaWJ1dGUgYmxvY2tzICovCmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IDdjMzVkNTguLjMxYjcxNzQgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBmYXRfZ2V0X2Jsb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZmF0X2FvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBmYXRfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBmYXRfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcwk9IGZhdF9yZWFkcGFnZXMsCiAJLndyaXRlcGFnZQk9IGZhdF93cml0ZXBhZ2UsCmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggNTA2ZDUzMC4uMDEzMWJhMCAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtNSw3ICs1LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19pbW1lZC5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19pbW1lZC5jCmluZGV4IDZmNWRmMTcuLjRlMjVmM2YgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW1tZWQuYworKysgYi9mcy9mcmVldnhmcy92eGZzX2ltbWVkLmMKQEAgLTU2LDcgKzU2LDcgQEAKIC8qCiAgKiBBZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBmb3IgaW1tZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogICovCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZ4ZnNfaW1tZWRfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdnhmc19pbW1lZF9hb3BzID0gewogCS5yZWFkcGFnZSA9CQl2eGZzX2ltbWVkX3JlYWRwYWdlLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jCmluZGV4IGY1NDRhYWUuLmNhNmEzOTcgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYworKysgYi9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMKQEAgLTQxLDggKzQxLDggQEAKICNpbmNsdWRlICJ2eGZzX2V4dGVybi5oIgogCiAKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZ4ZnNfYW9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZ4ZnNfaW1tZWRfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZ4ZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZ4ZnNfaW1tZWRfYW9wczsKIAogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHZ4ZnNfaW1tZWRfc3ltbGlua19pb3BzOwogCkBAIC0yOTUsNyArMjk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJCSpzYnAgPSBpcC0+aV9zYjsKIAlzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvCQkqdmlwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMJKmFvcHM7CisJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucwkqYW9wczsKIAlpbm9fdAkJCQlpbm8gPSBpcC0+aV9pbm87CiAKIAlpZiAoISh2aXAgPSBfX3Z4ZnNfaWdldChpbm8sIFZYRlNfU0JJKHNicCktPnZzaV9pbGlzdCkpKQpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19zdWJyLmMgYi9mcy9mcmVldnhmcy92eGZzX3N1YnIuYwppbmRleCBjMWJlMTE4Li5kZWNhYzYyIDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX3N1YnIuYworKysgYi9mcy9mcmVldnhmcy92eGZzX3N1YnIuYwpAQCAtNDIsNyArNDIsNyBAQAogc3RhdGljIGludAkJdnhmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKIHN0YXRpYyBzZWN0b3JfdAkJdnhmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHNlY3Rvcl90KTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB2eGZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZ4ZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UgPQkJdnhmc19yZWFkcGFnZSwKIAkuYm1hcCA9CQkJdnhmc19ibWFwLAogCS5zeW5jX3BhZ2UgPQkJYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCAwMzFiMjdhLi44OTI2NDNkIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtNDY0LDggKzQ2NCw4IEBACiAJCS5yYW5nZV9zdGFydAk9IDAsCiAJCS5yYW5nZV9lbmQJPSBMTE9OR19NQVgsCiAJfTsKLQl1bnNpZ25lZCBsb25nIG5yX2RpcnR5ID0gcmVhZF9wYWdlX3N0YXRlKG5yX2RpcnR5KTsKLQl1bnNpZ25lZCBsb25nIG5yX3Vuc3RhYmxlID0gcmVhZF9wYWdlX3N0YXRlKG5yX3Vuc3RhYmxlKTsKKwl1bnNpZ25lZCBsb25nIG5yX2RpcnR5ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSk7CisJdW5zaWduZWQgbG9uZyBucl91bnN0YWJsZSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyk7CiAKIAl3YmMubnJfdG9fd3JpdGUgPSBucl9kaXJ0eSArIG5yX3Vuc3RhYmxlICsKIAkJCShpbm9kZXNfc3RhdC5ucl9pbm9kZXMgLSBpbm9kZXNfc3RhdC5ucl91bnVzZWQpICsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggMjhhYTgxZS4uNjM2MTRlZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogCS8qIG5vIG1tYXAgYW5kIHNlbmRmaWxlICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfYW9wcyAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfYW9wcyAgPSB7CiAJLnJlYWRwYWdlCT0gZnVzZV9yZWFkcGFnZSwKIAkucHJlcGFyZV93cml0ZQk9IGZ1c2VfcHJlcGFyZV93cml0ZSwKIAkuY29tbWl0X3dyaXRlCT0gZnVzZV9jb21taXRfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9oZnMvaGZzX2ZzLmggYi9mcy9oZnMvaGZzX2ZzLmgKaW5kZXggM2VkODY2My4uNzM1MzMyZCAxMDA2NDQKLS0tIGEvZnMvaGZzL2hmc19mcy5oCisrKyBiL2ZzL2hmcy9oZnNfZnMuaApAQCAtMTgyLDggKzE4Miw4IEBACiBleHRlcm4gaW50IGhmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKIAogLyogaW5vZGUuYyAqLwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzX2FvcHM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNfYnRyZWVfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzX2J0cmVlX2FvcHM7CiAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmhmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICosIGludCk7CiBleHRlcm4gdm9pZCBoZnNfaW5vZGVfd3JpdGVfZm9yayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGhmc19leHRlbnQgKiwgX19iZTMyICosIF9fYmUzMiAqKTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9pbm9kZS5jIGIvZnMvaGZzL2lub2RlLmMKaW5kZXggMmQ0Y2VkMi4uMzE1Y2Y0NCAxMDA2NDQKLS0tIGEvZnMvaGZzL2lub2RlLmMKKysrIGIvZnMvaGZzL2lub2RlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCXJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzX2dldF9ibG9jayk7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzX2J0cmVlX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc19idHJlZV9hb3BzID0gewogCS5yZWFkcGFnZQk9IGhmc19yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gaGZzX3dyaXRlcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLApAQCAtMTI0LDcgKzEyNCw3IEBACiAJLnJlbGVhc2VwYWdlCT0gaGZzX3JlbGVhc2VwYWdlLAogfTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gaGZzX3JlYWRwYWdlLAogCS53cml0ZXBhZ2UJPSBoZnNfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IGQ5MjI3YmYuLjM0OTM3ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBCYXNlZCBvbiB0aGUgbWluaXggZmlsZSBzeXN0ZW0gY29kZSwgKEMpIDE5OTEsIDE5OTIgYnkgTGludXMgVG9ydmFsZHMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggN2FlMzkzNi4uOGExY2E1ZSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKKysrIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTMyMyw4ICszMjMsOCBAQAogdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICopOwogCiAvKiBpbm9kZS5jICovCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7CiAKIHZvaWQgaGZzcGx1c19pbm9kZV9yZWFkX2Zvcmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICopOwogdm9pZCBoZnNwbHVzX2lub2RlX3dyaXRlX2Zvcmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICopOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jCmluZGV4IGFjZjY2ZGIuLjkyNGVjZGUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuYworKysgYi9mcy9oZnNwbHVzL2lub2RlLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0gewogCS5yZWFkcGFnZQk9IGhmc3BsdXNfcmVhZHBhZ2UsCiAJLndyaXRlcGFnZQk9IGhmc3BsdXNfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCkBAIC0xMTksNyArMTE5LDcgQEAKIAkucmVsZWFzZXBhZ2UJPSBoZnNwbHVzX3JlbGVhc2VwYWdlLAogfTsKIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBoZnNwbHVzX3JlYWRwYWdlLAogCS53cml0ZXBhZ2UJPSBoZnNwbHVzX3dyaXRlcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDBhOTJmYTIuLmQyNzlkNTkgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTcsNyArNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwppbmRleCA4ZTBkMzc3Li5iODJlM2Q5IDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtNTQsNyArNTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaG9zdGZzX2lvcHM7CiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaG9zdGZzX2Rpcl9pb3BzOwotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaG9zdGZzX2xpbmtfYW9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhvc3Rmc19saW5rX2FvcHM7CiAKICNpZm5kZWYgTU9EVUxFCiBzdGF0aWMgaW50IF9faW5pdCBob3N0ZnNfYXJncyhjaGFyICpvcHRpb25zLCBpbnQgKmFkZCkKQEAgLTUxOCw3ICs1MTgsNyBAQAogCXJldHVybihlcnIpOwogfQogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBob3N0ZnNfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhvc3Rmc19hb3BzID0gewogCS53cml0ZXBhZ2UgCT0gaG9zdGZzX3dyaXRlcGFnZSwKIAkucmVhZHBhZ2UJPSBob3N0ZnNfcmVhZHBhZ2UsCiAJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCkBAIC05MzUsNyArOTM1LDcgQEAKIAlyZXR1cm4oZXJyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaG9zdGZzX2xpbmtfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhvc3Rmc19saW5rX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gaG9zdGZzX2xpbmtfcmVhZHBhZ2UsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2ZpbGUuYyBiL2ZzL2hwZnMvZmlsZS5jCmluZGV4IGQzYjlmZmYuLmQ5ZWIxOWIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZmlsZS5jCisrKyBiL2ZzL2hwZnMvZmlsZS5jCkBAIC05OSw3ICs5OSw3IEBACiB7CiAJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLGhwZnNfZ2V0X2Jsb2NrKTsKIH0KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHBmc19hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBocGZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gaHBmc19yZWFkcGFnZSwKIAkud3JpdGVwYWdlID0gaHBmc193cml0ZXBhZ2UsCiAJLnN5bmNfcGFnZSA9IGJsb2NrX3N5bmNfcGFnZSwKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaHBmc19mbi5oIGIvZnMvaHBmcy9ocGZzX2ZuLmgKaW5kZXggMjliN2EzZS4uZjY4N2Q1NCAxMDA2NDQKLS0tIGEvZnMvaHBmcy9ocGZzX2ZuLmgKKysrIGIvZnMvaHBmcy9ocGZzX2ZuLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogaW50IGhwZnNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocGZzX2ZpbGVfb3BzOwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhwZnNfZmlsZV9pb3BzOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHBmc19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHBmc19hb3BzOwogCiAvKiBpbm9kZS5jICovCiAKQEAgLTMwNCw3ICszMDQsNyBAQAogLyogbmFtZWkuYyAqLwogCiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHBmc19kaXJfaW9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhwZnNfc3ltbGlua19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHBmc19zeW1saW5rX2FvcHM7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CmRpZmYgLS1naXQgYS9mcy9ocGZzL25hbWVpLmMgYi9mcy9ocGZzL25hbWVpLmMKaW5kZXggYTAzYWJiMS4uNTllN2RjMSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9uYW1laS5jCisrKyBiL2ZzL2hwZnMvbmFtZWkuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBocGZzX3N5bWxpbmtfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHBmc19zeW1saW5rX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gaHBmc19zeW1saW5rX3JlYWRwYWdlCiB9OwogCQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCBlNjQxMGQ4Li42NDQ5Y2I2IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBIVUdFVExCRlNfTUFHSUMJMHg5NTg0NThmNgogCiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHVnZXRsYmZzX29wczsKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2FvcHM7CiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zOwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJa21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gaHVnZXRsYmZzX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gaHVnZXRsYmZzX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IGh1Z2V0bGJmc19jb21taXRfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAzYTI0NDZhLi4wYmY5ZjA0IDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTQsNyArNCw2IEBACiAgKiAoQykgMTk5NyBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CkBAIC0xMDIsNyArMTAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlbXB0eV9hb3BzOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVtcHR5X2FvcHM7CiAJc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGVtcHR5X2lvcHM7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZW1wdHlfZm9wczsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtNDUyLDE1ICs0NTEsMTQgQEAKIAkJbnJfcHJ1bmVkKys7CiAJfQogCWlub2Rlc19zdGF0Lm5yX3VudXNlZCAtPSBucl9wcnVuZWQ7CisJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCisJCV9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9JTk9ERVNURUFMLCByZWFwKTsKKwllbHNlCisJCV9fY291bnRfdm1fZXZlbnRzKFBHSU5PREVTVEVBTCwgcmVhcCk7CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCiAJZGlzcG9zZV9saXN0KCZmcmVlYWJsZSk7CiAJbXV0ZXhfdW5sb2NrKCZpcHJ1bmVfbXV0ZXgpOwotCi0JaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCi0JCW1vZF9wYWdlX3N0YXRlKGtzd2FwZF9pbm9kZXN0ZWFsLCByZWFwKTsKLQllbHNlCi0JCW1vZF9wYWdlX3N0YXRlKHBnaW5vZGVzdGVhbCwgcmVhcCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCBmOGFlZWMzLi40Yjc2NjBiIDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KZGlmZiAtLWdpdCBhL2ZzL2lvcHJpby5jIGIvZnMvaW9wcmlvLmMKaW5kZXggN2ZhNzZlZC4uOTNhYTU3MSAxMDA2NDQKLS0tIGEvZnMvaW9wcmlvLmMKKysrIGIvZnMvaW9wcmlvLmMKQEAgLTEyNSwxMSArMTI1LDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBnZXRfdGFza19pb3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzZWN1cml0eV90YXNrX2dldGlvcHJpbyhwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSBwLT5pb3ByaW87CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogYXNtbGlua2FnZSBsb25nIHN5c19pb3ByaW9fZ2V0KGludCB3aGljaCwgaW50IHdobykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKIAlpbnQgcmV0ID0gLUVTUkNIOworCWludCB0bXBpbzsKIAogCXJlYWRfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCXN3aXRjaCAod2hpY2gpIHsKQEAgLTEzOSwxNiArMTUyLDE5IEBACiAJCQllbHNlCiAJCQkJcCA9IGZpbmRfdGFza19ieV9waWQod2hvKTsKIAkJCWlmIChwKQotCQkJCXJldCA9IHAtPmlvcHJpbzsKKwkJCQlyZXQgPSBnZXRfdGFza19pb3ByaW8ocCk7CiAJCQlicmVhazsKIAkJY2FzZSBJT1BSSU9fV0hPX1BHUlA6CiAJCQlpZiAoIXdobykKIAkJCQl3aG8gPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOwogCQkJZG9fZWFjaF90YXNrX3BpZCh3aG8sIFBJRFRZUEVfUEdJRCwgcCkgeworCQkJCXRtcGlvID0gZ2V0X3Rhc2tfaW9wcmlvKHApOworCQkJCWlmICh0bXBpbyA8IDApCisJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChyZXQgPT0gLUVTUkNIKQotCQkJCQlyZXQgPSBwLT5pb3ByaW87CisJCQkJCXJldCA9IHRtcGlvOwogCQkJCWVsc2UKLQkJCQkJcmV0ID0gaW9wcmlvX2Jlc3QocmV0LCBwLT5pb3ByaW8pOworCQkJCQlyZXQgPSBpb3ByaW9fYmVzdChyZXQsIHRtcGlvKTsKIAkJCX0gd2hpbGVfZWFjaF90YXNrX3BpZCh3aG8sIFBJRFRZUEVfUEdJRCwgcCk7CiAJCQlicmVhazsKIAkJY2FzZSBJT1BSSU9fV0hPX1VTRVI6CkBAIC0xNjMsMTAgKzE3OSwxMyBAQAogCQkJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQkJCWlmIChwLT51aWQgIT0gdXNlci0+dWlkKQogCQkJCQljb250aW51ZTsKKwkJCQl0bXBpbyA9IGdldF90YXNrX2lvcHJpbyhwKTsKKwkJCQlpZiAodG1waW8gPCAwKQorCQkJCQljb250aW51ZTsKIAkJCQlpZiAocmV0ID09IC1FU1JDSCkKLQkJCQkJcmV0ID0gcC0+aW9wcmlvOworCQkJCQlyZXQgPSB0bXBpbzsKIAkJCQllbHNlCi0JCQkJCXJldCA9IGlvcHJpb19iZXN0KHJldCwgcC0+aW9wcmlvKTsKKwkJCQkJcmV0ID0gaW9wcmlvX2Jlc3QocmV0LCB0bXBpbyk7CiAJCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCiAJCQlpZiAod2hvKQpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvY29tcHJlc3MuYyBiL2ZzL2lzb2ZzL2NvbXByZXNzLmMKaW5kZXggNDkxNzMxNS4uNzMxODE2MyAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvY29tcHJlc3MuYworKysgYi9mcy9pc29mcy9jb21wcmVzcy5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBUcmFuc3BhcmVudCBkZWNvbXByZXNzaW9uIG9mIGZpbGVzIG9uIGFuIGlzbzk2NjAgZmlsZXN5c3RlbQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKQEAgLTMxMiw3ICszMTEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgemlzb2ZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHppc29mc19hb3BzID0gewogCS5yZWFkcGFnZSA9IHppc29mc19yZWFkcGFnZSwKIAkvKiBObyBzeW5jX3BhZ2Ugb3BlcmF0aW9uIHN1cHBvcnRlZD8gKi8KIAkvKiBObyBibWFwIG9wZXJhdGlvbiBzdXBwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2Rpci5jIGIvZnMvaXNvZnMvZGlyLmMKaW5kZXggNTQ0MGVhMi4uMjdlMjc2OSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvZGlyLmMKKysrIGIvZnMvaXNvZnMvZGlyLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqIAogICogIGlzb2ZzIGRpcmVjdG9yeSBoYW5kbGluZyBmdW5jdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSAiaXNvZnMuaCIKIApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggM2Y5YzhiYS4uMTQzOTEzNiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYworKysgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgkyMDA0ICBQYXVsIFNlcmljZSAtIE5GUyBFeHBvcnQgT3BlcmF0aW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKQEAgLTEwNTQsNyArMTA1Myw3IEBACiAJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLGlzb2ZzX2dldF9ibG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGlzb2ZzX2FvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpc29mc19hb3BzID0gewogCS5yZWFkcGFnZSA9IGlzb2ZzX3JlYWRwYWdlLAogCS5zeW5jX3BhZ2UgPSBibG9ja19zeW5jX3BhZ2UsCiAJLmJtYXAgPSBfaXNvZnNfYm1hcApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmgKaW5kZXggYjg3YmEwNi4uZTYzMDhjOCAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaXNvZnMuaAorKysgYi9mcy9pc29mcy9pc29mcy5oCkBAIC0xNzYsNSArMTc2LDUgQEAKIAogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGlzb2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXNvZnNfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpc29mc19zeW1saW5rX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpc29mc19zeW1saW5rX2FvcHM7CiBleHRlcm4gc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGlzb2ZzX2V4cG9ydF9vcHM7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmMKaW5kZXggNDMyNmNiNC4uZjNhMWRiMyAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvcm9jay5jCisrKyBiL2ZzL2lzb2ZzL3JvY2suYwpAQCAtNzU0LDYgKzc1NCw2IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaXNvZnNfc3ltbGlua19hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpc29mc19zeW1saW5rX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gcm9ja19yaWRnZV9zeW1saW5rX3JlYWRwYWdlCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvemlzb2ZzLmggYi9mcy9pc29mcy96aXNvZnMuaAppbmRleCBkNzg0ODVkLi4yNzM3OTU3IDEwMDY0NAotLS0gYS9mcy9pc29mcy96aXNvZnMuaAorKysgYi9mcy9pc29mcy96aXNvZnMuaApAQCAtMTUsNyArMTUsNyBAQAogICovCiAKICNpZmRlZiBDT05GSUdfWklTT0ZTCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB6aXNvZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHppc29mc19hb3BzOwogZXh0ZXJuIGludCBfX2luaXQgemlzb2ZzX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB6aXNvZnNfY2xlYW51cCh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvamZmcy9pbm9kZS12MjMuYyBiL2ZzL2pmZnMvaW5vZGUtdjIzLmMKaW5kZXggOWU0NmVhNi4uOTMwNjg2OSAxMDA2NDQKLS0tIGEvZnMvamZmcy9pbm9kZS12MjMuYworKysgYi9mcy9qZmZzL2lub2RlLXYyMy5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZmZzX2Rpcl9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZmZzX2FkZHJlc3Nfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmZnNfYWRkcmVzc19vcGVyYXRpb25zOwogCiBrbWVtX2NhY2hlX3QgICAgICpub2RlX2NhY2hlID0gTlVMTDsKIGttZW1fY2FjaGVfdCAgICAgKmZtX2NhY2hlID0gTlVMTDsKQEAgLTE2MTQsNyArMTYxNCw3IEBACiB9IC8qIGpmZnNfaW9jdGwoKSAgKi8KIAogCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZmZzX2FkZHJlc3Nfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmZnNfYWRkcmVzc19vcGVyYXRpb25zID0gewogCS5yZWFkcGFnZQk9IGpmZnNfcmVhZHBhZ2UsCiAJLnByZXBhcmVfd3JpdGUJPSBqZmZzX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IGpmZnNfY29tbWl0X3dyaXRlLApkaWZmIC0tZ2l0IGEvZnMvamZmcy9pbnRyZXAuYyBiL2ZzL2pmZnMvaW50cmVwLmMKaW5kZXggNTM3MWE0MC4uOTAwMGYxZSAxMDA2NDQKLS0tIGEvZnMvamZmcy9pbnRyZXAuYworKysgYi9mcy9qZmZzL2ludHJlcC5jCkBAIC01NSw3ICs1NSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzLmg+CmRpZmYgLS1naXQgYS9mcy9qZmZzL2pmZnNfZm0uaCBiL2ZzL2pmZnMvamZmc19mbS5oCmluZGV4IGM3OTRkOTIuLjllZTZhZDIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvamZmc19mbS5oCisrKyBiL2ZzL2pmZnMvamZmc19mbS5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9fTElOVVhfSkZGU19GTV9IX18KICNkZWZpbmUgX19MSU5VWF9KRkZTX0ZNX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvY29tcHJfemxpYi5jIGIvZnMvamZmczIvY29tcHJfemxpYi5jCmluZGV4IDVjNjNlMGMuLjM2ODFkMDcgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByX3psaWIuYworKysgYi9mcy9qZmZzMi9jb21wcl96bGliLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNlcnJvciAiVGhlIHVzZXJzcGFjZSBzdXBwb3J0IGdvdCB0b28gbWVzc3kgYW5kIHdhcyByZW1vdmVkLiBVcGRhdGUgeW91ciBta2ZzLmpmZnMyIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2RlYnVnLmggYi9mcy9qZmZzMi9kZWJ1Zy5oCmluZGV4IDVmYTQ5NGEuLjNkYWYzYmMgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2RlYnVnLmgKKysrIGIvZnMvamZmczIvZGVidWcuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfSkZGUzJfREVCVUdfSF8KICNkZWZpbmUgX0pGRlMyX0RFQlVHX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBDT05GSUdfSkZGUzJfRlNfREVCVUcKICNkZWZpbmUgQ09ORklHX0pGRlMyX0ZTX0RFQlVHIDAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2ZpbGUuYyBiL2ZzL2pmZnMyL2ZpbGUuYwppbmRleCBiYjg4NDRmLi4zZWQ2ZTNlIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9maWxlLmMKKysrIGIvZnMvamZmczIvZmlsZS5jCkBAIC02Miw3ICs2Miw3IEBACiAJLnJlbW92ZXhhdHRyID0JamZmczJfcmVtb3ZleGF0dHIKIH07CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZmczJfZmlsZV9hZGRyZXNzX29wZXJhdGlvbnMgPQorY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZmZzMl9maWxlX2FkZHJlc3Nfb3BlcmF0aW9ucyA9CiB7CiAJLnJlYWRwYWdlID0JamZmczJfcmVhZHBhZ2UsCiAJLnByZXBhcmVfd3JpdGUgPWpmZnMyX3ByZXBhcmVfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9mcy5jIGIvZnMvamZmczIvZnMuYwppbmRleCA5N2NhYTc3Li40NzgwZjgyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9mcy5jCisrKyBiL2ZzL2pmZnMyL2ZzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL25vZGVsaXN0LmggYi9mcy9qZmZzMi9ub2RlbGlzdC5oCmluZGV4IGJlNmQ0YTQuLmNhZTkyYzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL25vZGVsaXN0LmgKKysrIGIvZnMvamZmczIvbm9kZWxpc3QuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX0pGRlMyX05PREVMSVNUX0hfXwogI2RlZmluZSBfX0pGRlMyX05PREVMSVNUX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9vcy1saW51eC5oIGIvZnMvamZmczIvb3MtbGludXguaAppbmRleCA2YjUyMjM1Li45ZjQxZmMwIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9vcy1saW51eC5oCisrKyBiL2ZzL2pmZnMyL29zLWxpbnV4LmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogLyogZmlsZS5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZmZzMl9maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZmczJfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZmczJfZmlsZV9hZGRyZXNzX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZmZzMl9maWxlX2FkZHJlc3Nfb3BlcmF0aW9uczsKIGludCBqZmZzMl9mc3luYyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBpbnQgamZmczJfZG9fcmVhZHBhZ2VfdW5sb2NrIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGcpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdXBlci5jIGIvZnMvamZmczIvc3VwZXIuYwppbmRleCAyMzc4YTY2Li42OGUzOTUzIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdXBlci5jCisrKyBiL2ZzL2pmZnMyL3N1cGVyLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2ZzL2pmcy9pbm9kZS5jIGIvZnMvamZzL2lub2RlLmMKaW5kZXggMDRlYjc4Zi4uNDNlM2Y1NiAxMDA2NDQKLS0tIGEvZnMvamZzL2lub2RlLmMKKysrIGIvZnMvamZzL2lub2RlLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQkJCW9mZnNldCwgbnJfc2VncywgamZzX2dldF9ibG9jaywgTlVMTCk7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19hb3BzID0gewogCS5yZWFkcGFnZQk9IGpmc19yZWFkcGFnZSwKIAkucmVhZHBhZ2VzCT0gamZzX3JlYWRwYWdlcywKIAkud3JpdGVwYWdlCT0gamZzX3dyaXRlcGFnZSwKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW5vZGUuaCBiL2ZzL2pmcy9qZnNfaW5vZGUuaAppbmRleCBjMzAwNzI2Li5iNWM3ZGE2IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2lub2RlLmgKKysrIGIvZnMvamZzL2pmc19pbm9kZS5oCkBAIC0zMyw3ICszMyw3IEBACiBleHRlcm4gc3RydWN0IGRlbnRyeSAqamZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiB2b2lkIGpmc19zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICopOwogCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19hb3BzOwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpmc19kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IDdmNmU4ODAuLmUxZTBhNmUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCW1ldGFwYWdlX3JlbGVhc2VwYWdlKHBhZ2UsIDApOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19tZXRhcGFnZV9hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBtZXRhcGFnZV9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gbWV0YXBhZ2Vfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmggYi9mcy9qZnMvamZzX21ldGFwYWdlLmgKaW5kZXggZjBiN2QzMi4uZDE3YTMyOSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5oCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaApAQCAtMTM5LDcgKzEzOSw3IEBACiAJcHV0X21ldGFwYWdlKG1wKTsKIH0KIAotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wczsKIAogLyoKICAqIFRoaXMgcm91dGluZXMgaW52YWxpZGF0ZSBhbGwgcGFnZXMgZm9yIGFuIGV4dGVudC4KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfdHhubWdyLmMgYi9mcy9qZnMvamZzX3R4bm1nci5jCmluZGV4IGFjM2Q2NjkuLjEwYzQ2MjMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdHhubWdyLmMKKysrIGIvZnMvamZzL2pmc190eG5tZ3IuYwpAQCAtODQyLDcgKzg0Miw3IEBACiAJVFhOX1VOTE9DSygpOwogCXJlbGVhc2VfbWV0YXBhZ2UobXApOwogCVRYTl9MT0NLKCk7Ci0JeHRpZCA9IHRsY2stPnRpZDsJLyogcmVhcXVpcmUgYWZ0ZXIgZHJvcHBpbmcgVFhOX0xPQ0sgKi8KKwl4dGlkID0gdGxjay0+dGlkOwkvKiByZWFjcXVpcmUgYWZ0ZXIgZHJvcHBpbmcgVFhOX0xPQ0sgKi8KIAogCWpmc19pbmZvKCJ0eExvY2s6IGluIHdhaXRMb2NrLCB0aWQgPSAlZCwgeHRpZCA9ICVkLCBsaWQgPSAlZCIsCiAJCSB0aWQsIHh0aWQsIGxpZCk7CmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IDczZDJhYmEuLjRmNmNmZWIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudHByb2MuYyBiL2ZzL2xvY2tkL2NsbnRwcm9jLmMKaW5kZXggNGRiNjIwOS4uNTk4MGM0NSAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudHByb2MuYworKysgYi9mcy9sb2NrZC9jbG50cHJvYy5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjLmMgYi9mcy9sb2NrZC9zdmMuYwppbmRleCBmZDU2Yzg4Li45YTk5MWI1IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmMuYworKysgYi9mcy9sb2NrZC9zdmMuYwpAQCAtMTIsNyArMTIsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNsb2NrLmMgYi9mcy9sb2NrZC9zdmNsb2NrLmMKaW5kZXggM2VmNzM5MS4uYmFmNWFlNSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjbG9jay5jCisrKyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwpAQCAtMjAsNyArMjAsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjcHJvYy5jIGIvZnMvbG9ja2Qvc3ZjcHJvYy5jCmluZGV4IGQyMTBjZjMuLmRiYjY2YTMgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3Byb2MuYworKysgYi9mcy9sb2NrZC9zdmNwcm9jLmMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNzdWJzLmMgYi9mcy9sb2NrZC9zdmNzdWJzLmMKaW5kZXggYTU3MGU1Yy4uMmE0ZGY5YiAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3Zjc3Vicy5jCisrKyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiwgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QveGRyLmMgYi9mcy9sb2NrZC94ZHIuYwppbmRleCBmMjJhMzc2Li4wMzNlYTRhIDEwMDY0NAotLS0gYS9mcy9sb2NrZC94ZHIuYworKysgYi9mcy9sb2NrZC94ZHIuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jCmluZGV4IGE2ZmI1MDkuLjllYTkxYzUgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKKysrIGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiB7CiAJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLG1pbml4X2dldF9ibG9jayk7CiB9Ci1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtaW5peF9hb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWluaXhfYW9wcyA9IHsKIAkucmVhZHBhZ2UgPSBtaW5peF9yZWFkcGFnZSwKIAkud3JpdGVwYWdlID0gbWluaXhfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UgPSBibG9ja19zeW5jX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCBjNzg0ZThiLi5jOTc1MGQ3IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJc3RydWN0IGRlbnRyeSAqcDsKIAogCWlmIChwMSA9PSBwMikgewotCQltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE0MzEsMjIgKzE0MzEsMjIgQEAKIAogCWZvciAocCA9IHAxOyBwLT5kX3BhcmVudCAhPSBwOyBwID0gcC0+ZF9wYXJlbnQpIHsKIAkJaWYgKHAtPmRfcGFyZW50ID09IHAyKSB7Ci0JCQltdXRleF9sb2NrKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JCQltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQltdXRleF9sb2NrX25lc3RlZCgmcDItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CiAJCQlyZXR1cm4gcDsKIAkJfQogCX0KIAogCWZvciAocCA9IHAyOyBwLT5kX3BhcmVudCAhPSBwOyBwID0gcC0+ZF9wYXJlbnQpIHsKIAkJaWYgKHAtPmRfcGFyZW50ID09IHAxKSB7Ci0JCQltdXRleF9sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JCQltdXRleF9sb2NrKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQltdXRleF9sb2NrX25lc3RlZCgmcDEtPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CiAJCQlyZXR1cm4gcDsKIAkJfQogCX0KIAotCW11dGV4X2xvY2soJnAxLT5kX2lub2RlLT5pX211dGV4KTsKLQltdXRleF9sb2NrKCZwMi0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJnAxLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJnAyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTc1MSw3ICsxNzUxLDcgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBFUlJfUFRSKC1FRVhJU1QpOwogCi0JbXV0ZXhfbG9jaygmbmQtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJm5kLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKIAkvKgogCSAqIFl1Y2t5IGxhc3QgY29tcG9uZW50IG9yIG5vIGxhc3QgY29tcG9uZW50IGF0IGFsbD8KIAkgKiAoZm9vLy4sIGZvby8uLiwgLy8vLy8pCkBAIC0yMDA4LDcgKzIwMDgsNyBAQAogCQkJZXJyb3IgPSAtRUJVU1k7CiAJCQlnb3RvIGV4aXQxOwogCX0KLQltdXRleF9sb2NrKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZuZC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKIAlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQpOwogCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKQEAgLTIwODIsNyArMjA4Miw3IEBACiAJZXJyb3IgPSAtRUlTRElSOwogCWlmIChuZC5sYXN0X3R5cGUgIT0gTEFTVF9OT1JNKQogCQlnb3RvIGV4aXQxOwotCW11dGV4X2xvY2soJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCBiM2VkMjEyLi5mYTdlZDZhOWYgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC04LDcgKzgsNiBAQAogICogSGVhdmlseSByZXdyaXR0ZW4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9kaXIuYyBiL2ZzL25jcGZzL2Rpci5jCmluZGV4IGYwODYwYzYuLmI0ZWU4OTIgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2Rpci5jCisrKyBiL2ZzL25jcGZzL2Rpci5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggOTBkMmVhMi4uMWRkZjc3YiAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xMDUsNyArMTA0LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3Bfcm9vdF9kZW50cnlfb3BlcmF0aW9uczsKICNpZiBkZWZpbmVkKENPTkZJR19OQ1BGU19FWFRSQVMpIHx8IGRlZmluZWQoQ09ORklHX05DUEZTX05GU19OUykKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5jcF9zeW1saW5rX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuY3Bfc3ltbGlua19hb3BzOwogZXh0ZXJuIGludCBuY3Bfc3ltbGluayhzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZGVudHJ5KiwgY29uc3QgY2hhciopOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lvY3RsLmMgYi9mcy9uY3Bmcy9pb2N0bC5jCmluZGV4IGViMzgxM2EuLjQyMDM5ZmUgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lvY3RsLmMKKysrIGIvZnMvbmNwZnMvaW9jdGwuYwpAQCAtNyw3ICs3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9tbWFwLmMgYi9mcy9uY3Bmcy9tbWFwLmMKaW5kZXggNTJkNjBjMy4uZTdkNWEzMCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbW1hcC5jCisrKyBiL2ZzL25jcGZzL21tYXAuYwpAQCAtOTMsNyArOTMsNyBAQAogCSAqLwogCWlmICh0eXBlKQogCQkqdHlwZSA9IFZNX0ZBVUxUX01BSk9SOwotCWluY19wYWdlX3N0YXRlKHBnbWFqZmF1bHQpOworCWNvdW50X3ZtX2V2ZW50KFBHTUFKRkFVTFQpOwogCXJldHVybiBwYWdlOwogfQogCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMgYi9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMKaW5kZXggZDllYmY2NC4uNTUxZTBiYSAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5jCisrKyBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSAibmNwbGliX2tlcm5lbC5oIgogCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmggYi9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmgKaW5kZXggNzk5ZTVjMi4uMjQ0MWQxYSAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5oCisrKyBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfTkNQTElCX0gKICNkZWZpbmUgX05DUExJQl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2ZzL25jcGZzL25jcHNpZ25fa2VybmVsLmMgYi9mcy9uY3Bmcy9uY3BzaWduX2tlcm5lbC5jCmluZGV4IGE2ZWM5MGMuLjc0OWExOGQgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL25jcHNpZ25fa2VybmVsLmMKKysrIGIvZnMvbmNwZnMvbmNwc2lnbl9rZXJuZWwuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HCiAKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL3NvY2suYyBiL2ZzL25jcGZzL3NvY2suYwppbmRleCA4NzgzZWI3Li4xMWMyYjI1IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9zb2NrLmMKKysrIGIvZnMvbmNwZnMvc29jay5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2ZzL25jcGZzL3N5bWxpbmsuYyBiL2ZzL25jcGZzL3N5bWxpbmsuYwppbmRleCBlOTM1ZjFiLi5jYTkyYzI0IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9zeW1saW5rLmMKKysrIGIvZnMvbmNwZnMvc3ltbGluay5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTk5LDcgKzk4LDcgQEAKIC8qCiAgKiBzeW1saW5rcyBjYW4ndCBkbyBtdWNoLi4uCiAgKi8KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbmNwX3N5bWxpbmtfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbmNwX3N5bWxpbmtfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBuY3Bfc3ltbGlua19yZWFkcGFnZSwKIH07CiAJCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suYyBiL2ZzL25mcy9jYWxsYmFjay5jCmluZGV4IGQ1M2Y4YzYuLmZlMGE2YjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5jCisrKyBiL2ZzL25mcy9jYWxsYmFjay5jCkBAIC02LDcgKzYsNiBAQAogICogTkZTdjQgY2FsbGJhY2sgaGFuZGxpbmcKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCA0NjJjZmNlLi43NzE5NDgzIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTUsNyArNSw2IEBACiAgKgogICogTkZTdjQgY2FsbGJhY2sgcHJvY2VkdXJlcwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzNC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgogI2luY2x1ZGUgIm5mczRfZnMuaCIKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja194ZHIuYyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwppbmRleCBjOTI5OTEzLi4yOWY5MzIxIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqIE5GU3Y0IGNhbGxiYWNrIGVuY29kZS9kZWNvZGUgcHJvY2VkdXJlcwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IGQzYmU5MjMuLjk1NDBhMzEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtNiw3ICs2LDYgQEAKICAqIE5GUyBmaWxlIGRlbGVnYXRpb24gbWFuYWdlbWVudAogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggOGNhOTcwNy4uNGNkZDFiNCAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtMzgsNyArMzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggYWRkMjg5MS4uY2MyYjg3NCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAlyZXR1cm4gIW5mc193Yl9wYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5mc19maWxlX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5mc19maWxlX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gbmZzX3JlYWRwYWdlLAogCS5yZWFkcGFnZXMgPSBuZnNfcmVhZHBhZ2VzLAogCS5zZXRfcGFnZV9kaXJ0eSA9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCBjNWI5MTY2Li5kMzQ5ZmIyIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMTMsNyArMTMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDRmZTUxYzEuLmU0ZjRlNWQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC04MSw5ICs4MSw5IEBACiAjaWZkZWYgQ09ORklHX05GU19WNAogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNsb25lX25mczRfZnNfdHlwZTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKIGV4dGVybiBzdHJ1Y3QgcnBjX3N0YXQgbmZzX3JwY3N0YXQ7Ci0jZW5kaWYKKwogZXh0ZXJuIGludCBfX2luaXQgcmVnaXN0ZXJfbmZzX2ZzKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19leGl0IHVucmVnaXN0ZXJfbmZzX2ZzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN0YXRlLmMgYi9mcy9uZnMvbmZzNHN0YXRlLmMKaW5kZXggOTZlNWI4Mi4uMDkwYTM2YiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mcy9uZnM0c3RhdGUuYwpAQCAtMzgsNyArMzgsNiBAQAogICogc3Vic2VxdWVudCBwYXRjaC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IGQ4OWY2ZmIuLjM2ZTkwMmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgpAQCAtMzE1LDYgKzMxNCw3IEBACiAJCQkJCQlyZXEtPndiX2luZGV4LCBORlNfUEFHRV9UQUdfRElSVFkpOwogCQkJCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7CiAJCQkJbmZzX2xpc3RfYWRkX3JlcXVlc3QocmVxLCBkc3QpOworCQkJCWRlY196b25lX3BhZ2Vfc3RhdGUocmVxLT53Yl9wYWdlLCBOUl9GSUxFX0RJUlRZKTsKIAkJCQlyZXMrKzsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggMzJjZjM3Ny4uNTJiZjYzNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiB3aXRoaW4gdGhlIFJQQyBjb2RlIHdoZW4gcm9vdCBzcXVhc2hpbmcgaXMgc3VzcGVjdGVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2ZzL25mcy9zeXNjdGwuYyBiL2ZzL25mcy9zeXNjdGwuYwppbmRleCBkYjYxZTUxLi4yZmUzNDAzIDEwMDY0NAotLS0gYS9mcy9uZnMvc3lzY3RsLmMKKysrIGIvZnMvbmZzL3N5c2N0bC5jCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIFN5c2N0bCBpbnRlcmZhY2UgdG8gTkZTIHBhcmFtZXRlcnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDhmY2NiOWMuLmJjYTU3MzQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC00Niw3ICs0Niw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtNDk3LDcgKzQ5Niw3IEBACiAJbmZzX2xpc3RfYWRkX3JlcXVlc3QocmVxLCAmbmZzaS0+ZGlydHkpOwogCW5mc2ktPm5kaXJ0eSsrOwogCXNwaW5fdW5sb2NrKCZuZnNpLT5yZXFfbG9jayk7Ci0JaW5jX3BhZ2Vfc3RhdGUobnJfZGlydHkpOworCWluY196b25lX3BhZ2Vfc3RhdGUocmVxLT53Yl9wYWdlLCBOUl9GSUxFX0RJUlRZKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIH0KIApAQCAtNTI1LDcgKzUyNCw3IEBACiAJbmZzX2xpc3RfYWRkX3JlcXVlc3QocmVxLCAmbmZzaS0+Y29tbWl0KTsKIAluZnNpLT5uY29tbWl0Kys7CiAJc3Bpbl91bmxvY2soJm5mc2ktPnJlcV9sb2NrKTsKLQlpbmNfcGFnZV9zdGF0ZShucl91bnN0YWJsZSk7CisJaW5jX3pvbmVfcGFnZV9zdGF0ZShyZXEtPndiX3BhZ2UsIE5SX1VOU1RBQkxFX05GUyk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiB9CiAjZW5kaWYKQEAgLTYwOSw3ICs2MDgsNiBAQAogCWlmIChuZnNpLT5uZGlydHkgIT0gMCkgewogCQlyZXMgPSBuZnNfc2Nhbl9sb2NrX2RpcnR5KG5mc2ksIGRzdCwgaWR4X3N0YXJ0LCBucGFnZXMpOwogCQluZnNpLT5uZGlydHkgLT0gcmVzOwotCQlzdWJfcGFnZV9zdGF0ZShucl9kaXJ0eSxyZXMpOwogCQlpZiAoKG5mc2ktPm5kaXJ0eSA9PSAwKSAhPSBsaXN0X2VtcHR5KCZuZnNpLT5kaXJ0eSkpCiAJCQlwcmludGsoS0VSTl9FUlIgIk5GUzogZGVzeW5jaHJvbml6ZWQgdmFsdWUgb2YgbmZzX2kubmRpcnR5LlxuIik7CiAJfQpAQCAtMTM5NCw3ICsxMzkyLDYgQEAKIHsKIAlzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEJKmRhdGEgPSBjYWxsZGF0YTsKIAlzdHJ1Y3QgbmZzX3BhZ2UJCSpyZXE7Ci0JaW50IHJlcyA9IDA7CiAKICAgICAgICAgZHByaW50aygiTkZTOiAlNGQgbmZzX2NvbW1pdF9kb25lIChzdGF0dXMgJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLT50a19waWQsIHRhc2stPnRrX3N0YXR1cyk7CkBAIC0xNDA2LDYgKzE0MDMsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmZGF0YS0+cGFnZXMpKSB7CiAJCXJlcSA9IG5mc19saXN0X2VudHJ5KGRhdGEtPnBhZ2VzLm5leHQpOwogCQluZnNfbGlzdF9yZW1vdmVfcmVxdWVzdChyZXEpOworCQlkZWNfem9uZV9wYWdlX3N0YXRlKHJlcS0+d2JfcGFnZSwgTlJfVU5TVEFCTEVfTkZTKTsKIAogCQlkcHJpbnRrKCJORlM6IGNvbW1pdCAoJXMvJUxkICVkQCVMZCkiLAogCQkJcmVxLT53Yl9jb250ZXh0LT5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCkBAIC0xNDMyLDkgKzE0MzAsNyBAQAogCQluZnNfbWFya19yZXF1ZXN0X2RpcnR5KHJlcSk7CiAJbmV4dDoKIAkJbmZzX2NsZWFyX3BhZ2Vfd3JpdGViYWNrKHJlcSk7Ci0JCXJlcysrOwogCX0KLQlzdWJfcGFnZV9zdGF0ZShucl91bnN0YWJsZSxyZXMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNfY29tbWl0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL25mc2N0bC5jIGIvZnMvbmZzY3RsLmMKaW5kZXggYTVhMThkNC4uYzA0MzEzNmEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2N0bC5jCisrKyBiL2ZzL25mc2N0bC5jCkBAIC00LDcgKzQsNiBAQAogICoJVGhpcyBzaG91bGQgZXZlbnR1YWxseSBtb3ZlIHRvIHVzZXJsYW5kLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9uZnNkL2V4cG9ydC5jIGIvZnMvbmZzZC9leHBvcnQuYwppbmRleCAzZWVjMzAwLi4wMWJjNjhjIDEwMDY0NAotLS0gYS9mcy9uZnNkL2V4cG9ydC5jCisrKyBiL2ZzL25mc2QvZXhwb3J0LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWlmICgqZXApCiAJCWdvdG8gb3V0OwogCWRwcmludGsoImZvdW5kIGZzaWR0eXBlICVkXG4iLCBmc2lkdHlwZSk7Ci0JaWYgKGZzaWR0eXBlID4gMikKKwlpZiAoa2V5X2xlbihmc2lkdHlwZSk9PTApIC8qIGludmFsaWQgdHlwZSAqLwogCQlnb3RvIG91dDsKIAlpZiAoKGxlbj1xd29yZF9nZXQoJm1lc2csIGJ1ZiwgUEFHRV9TSVpFKSkgPD0gMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCBkYmFmM2Y5Li41NGIzN2IxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTMzLDcgKzMzLDYgQEAKICAqICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGlkbWFwLmMgYi9mcy9uZnNkL25mczRpZG1hcC5jCmluZGV4IDRiNmFhNjAuLmJlYTZiOTQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGlkbWFwLmMKKysrIGIvZnMvbmZzZC9uZnM0aWRtYXAuYwpAQCAtMzQsNyArMzQsNiBAQAogICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDdjN2QwMTYuLjlkYWEwYjkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMTIzNyw4ICsxMjM3LDE1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNkZWZpbmUgVEVTVF9BQ0NFU1MoeCkgKCh4ID4gMCB8fCB4IDwgNCk/MTowKQotI2RlZmluZSBURVNUX0RFTlkoeCkgKCh4ID49IDAgfHwgeCA8IDUpPzE6MCkKK3N0YXRpYyBpbnQgYWNjZXNzX3ZhbGlkKHUzMiB4KQoreworCXJldHVybiAoeCA+IDAgJiYgeCA8IDQpOworfQorCitzdGF0aWMgaW50IGRlbnlfdmFsaWQodTMyIHgpCit7CisJcmV0dXJuICh4ID49IDAgJiYgeCA8IDUpOworfQogCiBzdGF0aWMgdm9pZAogc2V0X2FjY2Vzcyh1bnNpZ25lZCBpbnQgKmFjY2VzcywgdW5zaWduZWQgbG9uZyBibWFwKSB7CkBAIC0xNzQ1LDcgKzE3NTIsOCBAQAogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBuZnNlcnJfaW52YWw7Ci0JaWYgKCFURVNUX0FDQ0VTUyhvcGVuLT5vcF9zaGFyZV9hY2Nlc3MpIHx8ICFURVNUX0RFTlkob3Blbi0+b3Bfc2hhcmVfZGVueSkpCisJaWYgKCFhY2Nlc3NfdmFsaWQob3Blbi0+b3Bfc2hhcmVfYWNjZXNzKQorCQkJfHwgIWRlbnlfdmFsaWQob3Blbi0+b3Bfc2hhcmVfZGVueSkpCiAJCWdvdG8gb3V0OwogCS8qCiAJICogTG9va3VwIGZpbGU7IGlmIGZvdW5kLCBsb29rdXAgc3RhdGVpZCBhbmQgY2hlY2sgb3BlbiByZXF1ZXN0LApAQCAtMTc4MiwxMCArMTc5MCwxMCBAQAogCX0gZWxzZSB7CiAJCS8qIFN0YXRlaWQgd2FzIG5vdCBmb3VuZCwgdGhpcyBpcyBhIG5ldyBPUEVOICovCiAJCWludCBmbGFncyA9IDA7CisJCWlmIChvcGVuLT5vcF9zaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19SRUFEKQorCQkJZmxhZ3MgfD0gTUFZX1JFQUQ7CiAJCWlmIChvcGVuLT5vcF9zaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19XUklURSkKLQkJCWZsYWdzID0gTUFZX1dSSVRFOwotCQllbHNlCi0JCQlmbGFncyA9IE1BWV9SRUFEOworCQkJZmxhZ3MgfD0gTUFZX1dSSVRFOwogCQlzdGF0dXMgPSBuZnM0X25ld19vcGVuKHJxc3RwLCAmc3RwLCBkcCwgY3VycmVudF9maCwgZmxhZ3MpOwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBvdXQ7CkBAIC0yMDcwLDE2ICsyMDc4LDEyIEBACiAJaWYgKCFzdGF0ZWlkLT5zaV9maWxlaWQpIHsgLyogZGVsZWdhdGlvbiBzdGF0ZWlkICovCiAJCWlmKCEoZHAgPSBmaW5kX2RlbGVnYXRpb25fc3RhdGVpZChpbm8sIHN0YXRlaWQpKSkgewogCQkJZHByaW50aygiTkZTRDogZGVsZWdhdGlvbiBzdGF0ZWlkIG5vdCBmb3VuZFxuIik7Ci0JCQlpZiAobmZzNF9pbl9ncmFjZSgpKQotCQkJCXN0YXR1cyA9IG5mc2Vycl9ncmFjZTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXN0aWRwID0gJmRwLT5kbF9zdGF0ZWlkOwogCX0gZWxzZSB7IC8qIG9wZW4gb3IgbG9jayBzdGF0ZWlkICovCiAJCWlmICghKHN0cCA9IGZpbmRfc3RhdGVpZChzdGF0ZWlkLCBmbGFncykpKSB7CiAJCQlkcHJpbnRrKCJORlNEOiBvcGVuIG9yIGxvY2sgc3RhdGVpZCBub3QgZm91bmRcbiIpOwotCQkJaWYgKG5mczRfaW5fZ3JhY2UoKSkKLQkJCQlzdGF0dXMgPSBuZnNlcnJfZ3JhY2U7CiAJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoKGZsYWdzICYgQ0hFQ0tfRkgpICYmIG5mczRfY2hlY2tfZmgoY3VycmVudF9maCwgc3RwKSkKQEAgLTIyNTIsOCArMjI1Niw5IEBACiAJCQkoaW50KWN1cnJlbnRfZmgtPmZoX2RlbnRyeS0+ZF9uYW1lLmxlbiwKIAkJCWN1cnJlbnRfZmgtPmZoX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0JaWYgKChzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsIGN1cnJlbnRfZmgsIFNfSUZSRUcsIDApKSkKLQkJZ290byBvdXQ7CisJc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCBTX0lGUkVHLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJbmZzNF9sb2NrX3N0YXRlKCk7CiAKQEAgLTIzMjAsNyArMjMyNSw4IEBACiAJCQkoaW50KWN1cnJlbnRfZmgtPmZoX2RlbnRyeS0+ZF9uYW1lLmxlbiwKIAkJCWN1cnJlbnRfZmgtPmZoX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0JaWYgKCFURVNUX0FDQ0VTUyhvZC0+b2Rfc2hhcmVfYWNjZXNzKSB8fCAhVEVTVF9ERU5ZKG9kLT5vZF9zaGFyZV9kZW55KSkKKwlpZiAoIWFjY2Vzc192YWxpZChvZC0+b2Rfc2hhcmVfYWNjZXNzKQorCQkJfHwgIWRlbnlfdmFsaWQob2QtPm9kX3NoYXJlX2RlbnkpKQogCQlyZXR1cm4gbmZzZXJyX2ludmFsOwogCiAJbmZzNF9sb2NrX3N0YXRlKCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCBhMTgxMGU2Li43MDQ2YWM5IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgT2xhZiBLaXJjaCA8b2tpckBtb25hZC5zd2IuZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNmaC5jIGIvZnMvbmZzZC9uZnNmaC5jCmluZGV4IDNmMmVjMmUuLmVjYzQzOWQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzZmguYworKysgYi9mcy9uZnNkL25mc2ZoLmMKQEAgLTE4NywxMyArMTg3LDYgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJLyogU2V0IHVzZXIgY3JlZHMgZm9yIHRoaXMgZXhwb3J0cG9pbnQgKi8KLQkJZXJyb3IgPSBuZnNkX3NldHVzZXIocnFzdHAsIGV4cCk7Ci0JCWlmIChlcnJvcikgewotCQkJZXJyb3IgPSBuZnNlcnJubyhlcnJvcik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCiAJCS8qCiAJCSAqIExvb2sgdXAgdGhlIGRlbnRyeSB1c2luZyB0aGUgTkZTIGZpbGUgaGFuZGxlLgogCQkgKi8KQEAgLTI1MSw2ICsyNDQsMTQgQEAKIAl9CiAJY2FjaGVfZ2V0KCZleHAtPmgpOwogCisJLyogU2V0IHVzZXIgY3JlZHMgZm9yIHRoaXMgZXhwb3J0cG9pbnQ7IG5lY2Vzc2FyeSBldmVuIGluIHRoZSAianVzdAorCSAqIGNoZWNraW5nIiBjYXNlIGJlY2F1c2UgdGhpcyBtYXkgYmUgYSBmaWxlaGFuZGxlIHRoYXQgd2FzIGNyZWF0ZWQgYnkKKwkgKiBmaF9jb21wb3NlLCBhbmQgdGhhdCBpcyBhYm91dCB0byBiZSB1c2VkIGluIGFub3RoZXIgbmZzdjQgY29tcG91bmQKKwkgKiBvcGVyYXRpb24gKi8KKwllcnJvciA9IG5mc2Vycm5vKG5mc2Rfc2V0dXNlcihycXN0cCwgZXhwKSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwogCWVycm9yID0gbmZzZF9tb2RlX2NoZWNrKHJxc3RwLCBkZW50cnktPmRfaW5vZGUtPmlfbW9kZSwgdHlwZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKQEAgLTMxMiw4ICszMTMsOCBAQAogZmhfY29tcG9zZShzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBzdmNfZXhwb3J0ICpleHAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHN2Y19maCAqcmVmX2ZoKQogewogCS8qIHJlZl9maCBpcyBhIHJlZmVyZW5jZSBmaWxlIGhhbmRsZS4KLQkgKiBpZiBpdCBpcyBub24tbnVsbCwgdGhlbiB3ZSBzaG91bGQgY29tcG9zZSBhIGZpbGVoYW5kbGUgd2hpY2ggaXMKLQkgKiBvZiB0aGUgc2FtZSB2ZXJzaW9uLCB3aGVyZSBwb3NzaWJsZS4KKwkgKiBpZiBpdCBpcyBub24tbnVsbCBhbmQgZm9yIHRoZSBzYW1lIGZpbGVzeXN0ZW0sIHRoZW4gd2Ugc2hvdWxkIGNvbXBvc2UKKwkgKiBhIGZpbGVoYW5kbGUgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdmVyc2lvbiwgd2hlcmUgcG9zc2libGUuCiAJICogQ3VycmVudGx5LCB0aGF0IG1lYW5zIHRoYXQgaWYgcmVmX2ZoLT5maF9oYW5kbGUuZmhfdmVyc2lvbiA9PSAweGNhCiAJICogVGhlbiBjcmVhdGUgYSAzMmJ5dGUgZmlsZWhhbmRsZSB1c2luZyBuZnNfZmhiYXNlX29sZAogCSAqCkBAIC0zMzIsNyArMzMzLDcgQEAKIAkJcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJKGlub2RlID8gaW5vZGUtPmlfaW5vIDogMCkpOwogCi0JaWYgKHJlZl9maCkgeworCWlmIChyZWZfZmggJiYgcmVmX2ZoLT5maF9leHBvcnQgPT0gZXhwKSB7CiAJCXJlZl9maF92ZXJzaW9uID0gcmVmX2ZoLT5maF9oYW5kbGUuZmhfdmVyc2lvbjsKIAkJaWYgKHJlZl9maF92ZXJzaW9uID09IDB4Y2EpCiAJCQlyZWZfZmhfZnNpZF90eXBlID0gMDsKQEAgLTQ2MSw3ICs0NjIsNyBAQAogCX0gZWxzZSB7CiAJCWludCBzaXplOwogCQlpZiAoZmhwLT5maF9oYW5kbGUuZmhfZmlsZWlkX3R5cGUgIT0gMCkKLQkJCWdvdG8gb3V0X3VwdG9kYXRlOworCQkJZ290byBvdXQ7CiAJCWRhdGFwID0gZmhwLT5maF9oYW5kbGUuZmhfYXV0aCsKIAkJCWZocC0+ZmhfaGFuZGxlLmZoX3NpemUvNCAtMTsKIAkJc2l6ZSA9IChmaHAtPmZoX21heHNpemUgLSBmaHAtPmZoX2hhbmRsZS5maF9zaXplKS80OwpAQCAtNDgxLDEwICs0ODIsNiBAQAogCXByaW50ayhLRVJOX0VSUiAiZmhfdXBkYXRlOiAlcy8lcyBzdGlsbCBuZWdhdGl2ZSFcbiIsCiAJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAlnb3RvIG91dDsKLW91dF91cHRvZGF0ZToKLQlwcmludGsoS0VSTl9FUlIgImZoX3VwZGF0ZTogJXMvJXMgYWxyZWFkeSB1cC10by1kYXRlIVxuIiwKLQkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWdvdG8gb3V0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNzdmMuYyBiL2ZzL25mc2QvbmZzc3ZjLmMKaW5kZXggMzc5MDcyNy4uZWMxZGVjZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNzdmMuYworKysgYi9mcy9uZnNkL25mc3N2Yy5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDI0NWVhYTEuLmM5ZTNiNWEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMTYsNyArMTYsNiBAQAogICogWmVyb2NweSBORlMgc3VwcG9ydCAoQykgMjAwMiBIaXJva2F6dSBUYWthaGFzaGkgPHRha2FAdmFsaW51eC5jby5qcD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02NzMsNyArNjcyLDEwIEBACiAJCWdvdG8gb3V0X25mc2VycjsKIAogCWlmIChhY2Nlc3MgJiBNQVlfV1JJVEUpIHsKLQkJZmxhZ3MgPSBPX1dST05MWXxPX0xBUkdFRklMRTsKKwkJaWYgKGFjY2VzcyAmIE1BWV9SRUFEKQorCQkJZmxhZ3MgPSBPX1JEV1J8T19MQVJHRUZJTEU7CisJCWVsc2UKKwkJCWZsYWdzID0gT19XUk9OTFl8T19MQVJHRUZJTEU7CiAKIAkJRFFVT1RfSU5JVChpbm9kZSk7CiAJfQpAQCAtODM0LDcgKzgzNiw3IEBACiAJaWYgKHJhICYmIHJhLT5wX3NldCkKIAkJZmlsZS0+Zl9yYSA9IHJhLT5wX3JhOwogCi0JaWYgKGZpbGUtPmZfb3AtPnNlbmRmaWxlKSB7CisJaWYgKGZpbGUtPmZfb3AtPnNlbmRmaWxlICYmIHJxc3RwLT5ycV9zZW5kZmlsZV9vaykgewogCQlzdmNfcHVzaGJhY2tfdW51c2VkX3BhZ2VzKHJxc3RwKTsKIAkJZXJyID0gZmlsZS0+Zl9vcC0+c2VuZGZpbGUoZmlsZSwgJm9mZnNldCwgKmNvdW50LAogCQkJCQkJIG5mc2RfcmVhZF9hY3RvciwgcnFzdHApOwpAQCAtMTUxNywxNCArMTUxOSwxNSBAQAogCQkJZXJyID0gbmZzZXJybm8oZXJyKTsKIAl9CiAKLQlmaF91bmxvY2soZmZocCk7CiAJZHB1dChkbmV3KTsKK291dF91bmxvY2s6CisJZmhfdW5sb2NrKGZmaHApOwogb3V0OgogCXJldHVybiBlcnI7CiAKIG91dF9uZnNlcnI6CiAJZXJyID0gbmZzZXJybm8oZXJyKTsKLQlnb3RvIG91dDsKKwlnb3RvIG91dF91bmxvY2s7CiB9CiAKIC8qCkBAIC0xNTUzLDcgKzE1NTYsNyBAQAogCXRkaXIgPSB0ZGVudHJ5LT5kX2lub2RlOwogCiAJZXJyID0gKHJxc3RwLT5ycV92ZXJzID09IDIpID8gbmZzZXJyX2FjY2VzIDogbmZzZXJyX3hkZXY7Ci0JaWYgKGZkaXItPmlfc2IgIT0gdGRpci0+aV9zYikKKwlpZiAoZmZocC0+ZmhfZXhwb3J0ICE9IHRmaHAtPmZoX2V4cG9ydCkKIAkJZ290byBvdXQ7CiAKIAllcnIgPSBuZnNlcnJfcGVybTsKZGlmZiAtLWdpdCBhL2ZzL25scy9ubHNfYmFzZS5jIGIvZnMvbmxzL25sc19iYXNlLmMKaW5kZXggYTkxMmRlYi4uOWRlNmI0OSAxMDA2NDQKLS0tIGEvZnMvbmxzL25sc19iYXNlLmMKKysrIGIvZnMvbmxzL25sc19iYXNlLmMKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25scy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9mcy9udGZzL2FvcHMuYyBiL2ZzL250ZnMvYW9wcy5jCmluZGV4IDU4MDQxMmQuLmJjNTc5YmYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvYW9wcy5jCisrKyBiL2ZzL250ZnMvYW9wcy5jCkBAIC0xNTQ0LDcgKzE1NDQsNyBAQAogLyoqCiAgKiBudGZzX2FvcHMgLSBnZW5lcmFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBmb3IgaW5vZGVzIGFuZCBhdHRyaWJ1dGVzCiAgKi8KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gbnRmc19yZWFkcGFnZSwJLyogRmlsbCBwYWdlIHdpdGggZGF0YS4gKi8KIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLAkvKiBDdXJyZW50bHksIGp1c3QgdW5wbHVncyB0aGUKIAkJCQkJCSAgIGRpc2sgcmVxdWVzdCBxdWV1ZS4gKi8KQEAgLTE1NjAsNyArMTU2MCw3IEBACiAgKiBudGZzX21zdF9hb3BzIC0gZ2VuZXJhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgZm9yIG1zdCBwcm90ZWN0ZWVkIGlub2RlcwogICoJCSAgIGFuZCBhdHRyaWJ1dGVzCiAgKi8KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19tc3RfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19tc3RfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBudGZzX3JlYWRwYWdlLAkvKiBGaWxsIHBhZ2Ugd2l0aCBkYXRhLiAqLwogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCS8qIEN1cnJlbnRseSwganVzdCB1bnBsdWdzIHRoZQogCQkJCQkJICAgZGlzayByZXF1ZXN0IHF1ZXVlLiAqLwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jCmluZGV4IDRjODZiN2UuLmQzMTNmMzUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvaW5vZGUuYworKysgYi9mcy9udGZzL2lub2RlLmMKQEAgLTM2Nyw2ICszNjcsMTIgQEAKIAlrbWVtX2NhY2hlX2ZyZWUobnRmc19pbm9kZV9jYWNoZSwgbmkpOwogfQogCisvKgorICogVGhlIGF0dHJpYnV0ZSBydW5saXN0IGxvY2sgaGFzIHNlcGFyYXRlIGxvY2tpbmcgcnVsZXMgZnJvbSB0aGUKKyAqIG5vcm1hbCBydW5saXN0IGxvY2ssIHNvIHNwbGl0IHRoZSB0d28gbG9jay1jbGFzc2VzOgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGF0dHJfbGlzdF9ybF9sb2NrX2NsYXNzOworCiAvKioKICAqIF9fbnRmc19pbml0X2lub2RlIC0gaW5pdGlhbGl6ZSBudGZzIHNwZWNpZmljIHBhcnQgb2YgYW4gaW5vZGUKICAqIEBzYjoJCXN1cGVyIGJsb2NrIG9mIG1vdW50ZWQgdm9sdW1lCkBAIC0zOTQsNiArNDAwLDggQEAKIAluaS0+YXR0cl9saXN0X3NpemUgPSAwOwogCW5pLT5hdHRyX2xpc3QgPSBOVUxMOwogCW50ZnNfaW5pdF9ydW5saXN0KCZuaS0+YXR0cl9saXN0X3JsKTsKKwlsb2NrZGVwX3NldF9jbGFzcygmbmktPmF0dHJfbGlzdF9ybC5sb2NrLAorCQkJCSZhdHRyX2xpc3RfcmxfbG9ja19jbGFzcyk7CiAJbmktPml0eXBlLmluZGV4LmJtcF9pbm8gPSBOVUxMOwogCW5pLT5pdHlwZS5pbmRleC5ibG9ja19zaXplID0gMDsKIAluaS0+aXR5cGUuaW5kZXgudmNuX3NpemUgPSAwOwpAQCAtNDA1LDYgKzQxMywxMyBAQAogCW5pLT5leHQuYmFzZV9udGZzX2lubyA9IE5VTEw7CiB9CiAKKy8qCisgKiBFeHRlbnQgaW5vZGVzIGdldCBNRlQtbWFwcGVkIGluIGEgbmVzdGVkIHdheSwgd2hpbGUgdGhlIGJhc2UgaW5vZGUKKyAqIGlzIHN0aWxsIG1hcHBlZC4gVGVhY2ggdGhpcyBuZXN0aW5nIHRvIHRoZSBsb2NrIHZhbGlkYXRvciBieSBjcmVhdGluZworICogYSBzZXBhcmF0ZSBjbGFzcyBmb3IgbmVzdGVkIGlub2RlJ3MgbXJlY19sb2NrJ3M6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZXh0ZW50X2lub2RlX21yZWNfbG9ja19rZXk7CisKIGlubGluZSBudGZzX2lub2RlICpudGZzX25ld19leHRlbnRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJdW5zaWduZWQgbG9uZyBtZnRfbm8pCiB7CkBAIC00MTMsNiArNDI4LDcgQEAKIAludGZzX2RlYnVnKCJFbnRlcmluZy4iKTsKIAlpZiAobGlrZWx5KG5pICE9IE5VTEwpKSB7CiAJCV9fbnRmc19pbml0X2lub2RlKHNiLCBuaSk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZuaS0+bXJlY19sb2NrLCAmZXh0ZW50X2lub2RlX21yZWNfbG9ja19rZXkpOwogCQluaS0+bWZ0X25vID0gbWZ0X25vOwogCQluaS0+dHlwZSA9IEFUX1VOVVNFRDsKIAkJbmktPm5hbWUgPSBOVUxMOwpAQCAtMTcyMiw2ICsxNzM4LDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoKKyAqIFRoZSBNRlQgaW5vZGUgaGFzIHNwZWNpYWwgbG9ja2luZywgc28gdGVhY2ggdGhlIGxvY2sgdmFsaWRhdG9yCisgKiBhYm91dCB0aGlzIGJ5IHNwbGl0dGluZyBvZmYgdGhlIGxvY2tpbmcgcnVsZXMgb2YgdGhlIE1GVCBmcm9tCisgKiB0aGUgbG9ja2luZyBydWxlcyBvZiBvdGhlciBpbm9kZXMuIFRoZSBNRlQgaW5vZGUgY2FuIG5ldmVyIGJlCisgKiBhY2Nlc3NlZCBmcm9tIHRoZSBWRlMgc2lkZSAob3IgZXZlbiBpbnRlcm5hbGx5KSwgb25seSBieSB0aGUKKyAqIG1hcF9tZnQgZnVuY3Rpb25zLgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG1mdF9uaV9ydW5saXN0X2xvY2tfa2V5LCBtZnRfbmlfbXJlY19sb2NrX2tleTsKKwogLyoqCiAgKiBudGZzX3JlYWRfaW5vZGVfbW91bnQgLSBzcGVjaWFsIHJlYWRfaW5vZGUgZm9yIG1vdW50IHRpbWUgdXNlIG9ubHkKICAqIEB2aToJCWlub2RlIHRvIHJlYWQKQEAgLTIxNDgsNiArMjE3MywxNCBAQAogCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCW50ZnNfZGVidWcoIkRvbmUuIik7CiAJbnRmc19mcmVlKG0pOworCisJLyoKKwkgKiBTcGxpdCB0aGUgbG9ja2luZyBydWxlcyBvZiB0aGUgTUZUIGlub2RlIGZyb20gdGhlCisJICogbG9ja2luZyBydWxlcyBvZiBvdGhlciBpbm9kZXM6CisJICovCisJbG9ja2RlcF9zZXRfY2xhc3MoJm5pLT5ydW5saXN0LmxvY2ssICZtZnRfbmlfcnVubGlzdF9sb2NrX2tleSk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJm5pLT5tcmVjX2xvY2ssICZtZnRfbmlfbXJlY19sb2NrX2tleSk7CisKIAlyZXR1cm4gMDsKIAogZW1fcHV0X2Vycl9vdXQ6CmRpZmYgLS1naXQgYS9mcy9udGZzL250ZnMuaCBiL2ZzL250ZnMvbnRmcy5oCmluZGV4IGJmN2IzZDcuLmRkZDNkNTAgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbnRmcy5oCisrKyBiL2ZzL250ZnMvbnRmcy5oCkBAIC01Nyw4ICs1Nyw4IEBACiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm50ZnNfaW5kZXhfY3R4X2NhY2hlOwogCiAvKiBUaGUgdmFyaW91cyBvcGVyYXRpb25zIHN0cnVjdHMgZGVmaW5lZCB0aHJvdWdob3V0IHRoZSBkcml2ZXIgZmlsZXMuICovCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX2FvcHM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX21zdF9hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19tc3RfYW9wczsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCAgZmlsZV9vcGVyYXRpb25zIG50ZnNfZmlsZV9vcHM7CiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19maWxlX2lub2RlX29wczsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuYwppbmRleCAwZTE0YWNlLi43NGUwZWU4IDEwMDY0NAotLS0gYS9mcy9udGZzL3N1cGVyLmMKKysrIGIvZnMvbnRmcy9zdXBlci5jCkBAIC0xNzI0LDYgKzE3MjQsMTQgQEAKIAlyZXR1cm4gRkFMU0U7CiB9CiAKKy8qCisgKiBUaGUgbGNuIGFuZCBtZnQgYml0bWFwIGlub2RlcyBhcmUgTlRGUy1pbnRlcm5hbCBpbm9kZXMgd2l0aAorICogdGhlaXIgb3duIHNwZWNpYWwgbG9ja2luZyBydWxlczoKKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleQorCWxjbmJtcF9ydW5saXN0X2xvY2tfa2V5LCBsY25ibXBfbXJlY19sb2NrX2tleSwKKwltZnRibXBfcnVubGlzdF9sb2NrX2tleSwgbWZ0Ym1wX21yZWNfbG9ja19rZXk7CisKIC8qKgogICogbG9hZF9zeXN0ZW1fZmlsZXMgLSBvcGVuIHRoZSBzeXN0ZW0gZmlsZXMgdXNpbmcgbm9ybWFsIGZ1bmN0aW9ucwogICogQHZvbDoJbnRmcyBzdXBlciBibG9jayBkZXNjcmliaW5nIGRldmljZSB3aG9zZSBzeXN0ZW0gZmlsZXMgdG8gbG9hZApAQCAtMTc4MCw2ICsxNzg4LDEwIEBACiAJCW50ZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gbG9hZCAkTUZULyRCSVRNQVAgYXR0cmlidXRlLiIpOwogCQlnb3RvIGlwdXRfbWlycl9lcnJfb3V0OwogCX0KKwlsb2NrZGVwX3NldF9jbGFzcygmTlRGU19JKHZvbC0+bWZ0Ym1wX2lubyktPnJ1bmxpc3QubG9jaywKKwkJCSAgICZtZnRibXBfcnVubGlzdF9sb2NrX2tleSk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJk5URlNfSSh2b2wtPm1mdGJtcF9pbm8pLT5tcmVjX2xvY2ssCisJCQkgICAmbWZ0Ym1wX21yZWNfbG9ja19rZXkpOwogCS8qIFJlYWQgdXBjYXNlIHRhYmxlIGFuZCBzZXR1cCBAdm9sLT51cGNhc2UgYW5kIEB2b2wtPnVwY2FzZV9sZW4uICovCiAJaWYgKCFsb2FkX2FuZF9pbml0X3VwY2FzZSh2b2wpKQogCQlnb3RvIGlwdXRfbWZ0Ym1wX2Vycl9vdXQ7CkBAIC0xODAyLDYgKzE4MTQsMTEgQEAKIAkJCWlwdXQodm9sLT5sY25ibXBfaW5vKTsKIAkJZ290byBiaXRtYXBfZmFpbGVkOwogCX0KKwlsb2NrZGVwX3NldF9jbGFzcygmTlRGU19JKHZvbC0+bGNuYm1wX2lubyktPnJ1bmxpc3QubG9jaywKKwkJCSAgICZsY25ibXBfcnVubGlzdF9sb2NrX2tleSk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJk5URlNfSSh2b2wtPmxjbmJtcF9pbm8pLT5tcmVjX2xvY2ssCisJCQkgICAmbGNuYm1wX21yZWNfbG9ja19rZXkpOworCiAJTklub1NldFNwYXJzZURpc2FibGVkKE5URlNfSSh2b2wtPmxjbmJtcF9pbm8pKTsKIAlpZiAoKHZvbC0+bnJfY2x1c3RlcnMgKyA3KSA+PiAzID4gaV9zaXplX3JlYWQodm9sLT5sY25ibXBfaW5vKSkgewogCQlpcHV0KHZvbC0+bGNuYm1wX2lubyk7CkBAIC0yNzQzLDYgKzI3NjAsMTcgQEAKIAlzdHJ1Y3QgaW5vZGUgKnRtcF9pbm87CiAJaW50IGJsb2Nrc2l6ZSwgcmVzdWx0OwogCisJLyoKKwkgKiBXZSBkbyBhIHByZXR0eSBkaWZmaWN1bHQgcGllY2Ugb2YgYm9vdHN0cmFwIGJ5IHJlYWRpbmcgdGhlCisJICogTUZUIChhbmQgb3RoZXIgbWV0YWRhdGEpIGZyb20gZGlzayBpbnRvIG1lbW9yeS4gV2UnbGwgb25seQorCSAqIHJlbGVhc2UgdGhpcyBtZXRhZGF0YSBkdXJpbmcgdW1vdW50LCBzbyB0aGUgbG9ja2luZyBwYXR0ZXJucworCSAqIG9ic2VydmVkIGR1cmluZyBib290c3RyYXAgZG8gbm90IGNvdW50LiBTbyB0dXJuIG9mZiB0aGUKKwkgKiBvYnNlcnZhdGlvbiBvZiBsb2NraW5nIHBhdHRlcm5zIChzdHJpY3RseSBmb3IgdGhpcyBjb250ZXh0CisJICogb25seSkgd2hpbGUgbW91bnRpbmcgTlRGUy4gW1RoZSB2YWxpZGF0b3IgaXMgc3RpbGwgYWN0aXZlCisJICogb3RoZXJ3aXNlLCBldmVuIGZvciB0aGlzIGNvbnRleHQ6IGl0IHdpbGwgZm9yIGV4YW1wbGUgcmVjb3JkCisJICogbG9jayBjbGFzcyByZWdpc3RyYXRpb25zLl0KKwkgKi8KKwlsb2NrZGVwX29mZigpOwogCW50ZnNfZGVidWcoIkVudGVyaW5nLiIpOwogI2lmbmRlZiBOVEZTX1JXCiAJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwpAQCAtMjc1NCw2ICsyNzgyLDcgQEAKIAkJaWYgKCFzaWxlbnQpCiAJCQludGZzX2Vycm9yKHNiLCAiQWxsb2NhdGlvbiBvZiBOVEZTIHZvbHVtZSBzdHJ1Y3R1cmUgIgogCQkJCQkiZmFpbGVkLiBBYm9ydGluZyBtb3VudC4uLiIpOworCQlsb2NrZGVwX29uKCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKiBJbml0aWFsaXplIG50ZnNfdm9sdW1lIHN0cnVjdHVyZS4gKi8KQEAgLTI5NDAsNiArMjk2OSw3IEBACiAJCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKIAkJc2ItPnNfZXhwb3J0X29wID0gJm50ZnNfZXhwb3J0X29wczsKIAkJbG9ja19rZXJuZWwoKTsKKwkJbG9ja2RlcF9vbigpOwogCQlyZXR1cm4gMDsKIAl9CiAJbnRmc19lcnJvcihzYiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByb290IGRpcmVjdG9yeS4iKTsKQEAgLTMwNTksNiArMzA4OSw3IEBACiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiAJa2ZyZWUodm9sKTsKIAludGZzX2RlYnVnKCJGYWlsZWQsIHJldHVybmluZyAtRUlOVkFMLiIpOworCWxvY2tkZXBfb24oKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9zeXNjdGwuaCBiL2ZzL250ZnMvc3lzY3RsLmgKaW5kZXggYzgwNjRjYS4uYmVkYTViZjkgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvc3lzY3RsLmgKKysrIGIvZnMvbnRmcy9zeXNjdGwuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfTElOVVhfTlRGU19TWVNDVExfSAogI2RlZmluZSBfTElOVVhfTlRGU19TWVNDVExfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19TWVNDVEwpCiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCA0NzE1MmJmLi5mMWQxYzM0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC01NTgsMTYgKzU1OCw5IEBACiAJdTY0IHZib19tYXg7IC8qIGZpbGUgb2Zmc2V0LCBtYXhfYmxvY2tzIGZyb20gaWJsb2NrICovCiAJdTY0IHBfYmxrbm87CiAJaW50IGNvbnRpZ19ibG9ja3M7Ci0JdW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0czsKKwl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBtYXhfYmxvY2tzID0gYmhfcmVzdWx0LT5iX3NpemUgPj4gaW5vZGUtPmlfYmxrYml0czsKIAotCWlmICghaW5vZGUgfHwgIWJoX3Jlc3VsdCkgewotCQltbG9nKE1MX0VSUk9SLCAiaW5vZGUgb3IgYmhfcmVzdWx0IGlzIG51bGxcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlibG9ja3NpemVfYml0cyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCiAJLyogVGhpcyBmdW5jdGlvbiB3b24ndCBldmVuIGJlIGNhbGxlZCBpZiB0aGUgcmVxdWVzdCBpc24ndCBhbGwKIAkgKiBuaWNlbHkgYWxpZ25lZCBhbmQgb2YgdGhlIHJpZ2h0IHNpemUsIHNvIHRoZXJlJ3Mgbm8gbmVlZAogCSAqIGZvciB1cyB0byBjaGVjayBhbnkgb2YgdGhhdC4gKi8KQEAgLTY2Niw3ICs2NTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBvY2ZzMl9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gb2NmczJfd3JpdGVwYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gb2NmczJfcHJlcGFyZV93cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDFkMjZjZmMuLjUwNDU5NWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtNTE3LDYgKzUxNyw3IEBACiAJaGJfYmxvY2stPmhiX3NlcSA9IGNwdV90b19sZTY0KGNwdXRpbWUpOwogCWhiX2Jsb2NrLT5oYl9ub2RlID0gbm9kZV9udW07CiAJaGJfYmxvY2stPmhiX2dlbmVyYXRpb24gPSBjcHVfdG9fbGU2NChnZW5lcmF0aW9uKTsKKwloYl9ibG9jay0+aGJfZGVhZF9tcyA9IGNwdV90b19sZTMyKG8yaGJfZGVhZF90aHJlc2hvbGQgKiBPMkhCX1JFR0lPTl9USU1FT1VUX01TKTsKIAogCS8qIFRoaXMgc3RlcCBtdXN0IGFsd2F5cyBoYXBwZW4gbGFzdCEgKi8KIAloYl9ibG9jay0+aGJfY2tzdW0gPSBjcHVfdG9fbGUzMihvMmhiX2NvbXB1dGVfYmxvY2tfY3JjX2xlKHJlZywKQEAgLTY0NSw2ICs2NDYsOCBAQAogCXN0cnVjdCBvMm5tX25vZGUgKm5vZGU7CiAJc3RydWN0IG8yaGJfZGlza19oZWFydGJlYXRfYmxvY2sgKmhiX2Jsb2NrID0gcmVnLT5ocl90bXBfYmxvY2s7CiAJdTY0IGNwdXRpbWU7CisJdW5zaWduZWQgaW50IGRlYWRfbXMgPSBvMmhiX2RlYWRfdGhyZXNob2xkICogTzJIQl9SRUdJT05fVElNRU9VVF9NUzsKKwl1bnNpZ25lZCBpbnQgc2xvdF9kZWFkX21zOwogCiAJbWVtY3B5KGhiX2Jsb2NrLCBzbG90LT5kc19yYXdfYmxvY2ssIHJlZy0+aHJfYmxvY2tfYnl0ZXMpOwogCkBAIC03MzMsNiArNzM2LDIzIEBACiAJCQkgICAgICAmbzJoYl9saXZlX3Nsb3RzW3Nsb3QtPmRzX25vZGVfbnVtXSk7CiAKIAkJc2xvdC0+ZHNfZXF1YWxfc2FtcGxlcyA9IDA7CisKKwkJLyogV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgYWxsIG5vZGVzIGFncmVlIG9uIHRoZQorCQkgKiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSBhIG5vZGUgd2lsbCBiZQorCQkgKiBjb25zaWRlcmVkIGRlYWQuIFRoZSBzZWxmLWZlbmNpbmcgdGltZW91dCBpcworCQkgKiBjb21wdXRlZCBmcm9tIHRoaXMgdmFsdWUsIGFuZCBhIGRpc2NyZXBhbmN5IG1pZ2h0CisJCSAqIHJlc3VsdCBpbiBoZWFydGJlYXQgY2FsbGluZyBhIG5vZGUgZGVhZCB3aGVuIGl0CisJCSAqIGhhc24ndCBzZWxmLWZlbmNlZCB5ZXQuICovCisJCXNsb3RfZGVhZF9tcyA9IGxlMzJfdG9fY3B1KGhiX2Jsb2NrLT5oYl9kZWFkX21zKTsKKwkJaWYgKHNsb3RfZGVhZF9tcyAmJiBzbG90X2RlYWRfbXMgIT0gZGVhZF9tcykgeworCQkJLyogVE9ETzogUGVyaGFwcyB3ZSBjYW4gZmFpbCB0aGUgcmVnaW9uIGhlcmUuICovCisJCQltbG9nKE1MX0VSUk9SLCAiTm9kZSAlZCBvbiBkZXZpY2UgJXMgaGFzIGEgZGVhZCBjb3VudCAiCisJCQkgICAgICJvZiAldSBtcywgYnV0IG91ciBjb3VudCBpcyAldSBtcy5cbiIKKwkJCSAgICAgIlBsZWFzZSBkb3VibGUgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIHZhbHVlcyAiCisJCQkgICAgICJmb3IgJ08yQ0JfSEVBUlRCRUFUX1RIUkVTSE9MRCdcbiIsCisJCQkgICAgIHNsb3QtPmRzX25vZGVfbnVtLCByZWctPmhyX2Rldl9uYW1lLCBzbG90X2RlYWRfbXMsCisJCQkgICAgIGRlYWRfbXMpOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA3M2VkYWQ3Li5hNDI2MjhiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTIzLDYgKzEyMywxNyBAQAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIDAKICNlbmRpZgogCisvKgorICogV2hlbiBsb2dnaW5nIGlzIGRpc2FibGVkLCBmb3JjZSB0aGUgYml0IHRlc3QgdG8gMCBmb3IgYW55dGhpbmcgb3RoZXIKKyAqIHRoYW4gZXJyb3JzIGFuZCBub3RpY2VzLCBhbGxvd2luZyBnY2MgdG8gcmVtb3ZlIHRoZSBjb2RlIGNvbXBsZXRlbHkuCisgKiBXaGVuIGVuYWJsZWQsIGFsbG93IGFsbCBtYXNrcy4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0cpCisjZGVmaW5lIE1MX0FMTE9XRURfQklUUyB+MAorI2Vsc2UKKyNkZWZpbmUgTUxfQUxMT1dFRF9CSVRTIChNTF9FUlJPUnxNTF9OT1RJQ0UpCisjZW5kaWYKKwogI2RlZmluZSBNTE9HX01BWF9CSVRTIDY0CiAKIHN0cnVjdCBtbG9nX2JpdHMgewpAQCAtMTg3LDcgKzE5OCw4IEBACiAKICNkZWZpbmUgbWxvZyhtYXNrLCBmbXQsIGFyZ3MuLi4pIGRvIHsJCQkJCVwKIAl1NjQgX19tID0gTUxPR19NQVNLX1BSRUZJWCB8IChtYXNrKTsJCQkJXAotCWlmIChfX21sb2dfdGVzdF91NjQoX19tLCBtbG9nX2FuZF9iaXRzKSAmJgkJCVwKKwlpZiAoKF9fbSAmIE1MX0FMTE9XRURfQklUUykgJiYJCQkJCVwKKwkgICAgX19tbG9nX3Rlc3RfdTY0KF9fbSwgbWxvZ19hbmRfYml0cykgJiYJCQlcCiAJICAgICFfX21sb2dfdGVzdF91NjQoX19tLCBtbG9nX25vdF9iaXRzKSkgewkJCVwKIAkJaWYgKF9fbSAmIE1MX0VSUk9SKQkJCQkJXAogCQkJX19tbG9nX3ByaW50ayhLRVJOX0VSUiwgIkVSUk9SOiAiZm10ICwgIyNhcmdzKTsJXApAQCAtMjA0LDYgKzIxNiw3IEBACiAJCW1sb2coTUxfRVJST1IsICJzdGF0dXMgPSAlbGxkXG4iLCAobG9uZyBsb25nKV9zdCk7CVwKIH0gd2hpbGUgKDApCiAKKyNpZiBkZWZpbmVkKENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HKQogI2RlZmluZSBtbG9nX2VudHJ5KGZtdCwgYXJncy4uLikgZG8gewkJCQkJXAogCW1sb2coTUxfRU5UUlksICJFTlRSWToiIGZtdCAsICMjYXJncyk7CQkJCVwKIH0gd2hpbGUgKDApCkBAIC0yNDcsNiArMjYwLDEzIEBACiAjZGVmaW5lIG1sb2dfZXhpdF92b2lkKCkgZG8gewkJCQkJCVwKIAltbG9nKE1MX0VYSVQsICJFWElUXG4iKTsJCQkJCVwKIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBtbG9nX2VudHJ5KC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWxvZ19lbnRyeV92b2lkKC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWxvZ19leGl0KC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWxvZ19leGl0X3B0ciguLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1sb2dfZXhpdF92b2lkKC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAgLyogZGVmaW5lZChDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRykgKi8KIAogI2RlZmluZSBtbG9nX2J1Z19vbl9tc2coY29uZCwgZm10LCBhcmdzLi4uKSBkbyB7CQkJXAogCWlmIChjb25kKSB7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvb2NmczJfaGVhcnRiZWF0LmggYi9mcy9vY2ZzMi9jbHVzdGVyL29jZnMyX2hlYXJ0YmVhdC5oCmluZGV4IDk0MDk2MDYuLjNmNDE1MWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvb2NmczJfaGVhcnRiZWF0LmgKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9vY2ZzMl9oZWFydGJlYXQuaApAQCAtMzIsNiArMzIsNyBAQAogCV9fdTggIGhiX3BhZDFbM107CiAJX19sZTMyIGhiX2Nrc3VtOwogCV9fbGU2NCBoYl9nZW5lcmF0aW9uOworCV9fbGUzMiBoYl9kZWFkX21zOwogfTsKIAogI2VuZGlmIC8qIF9PQ0ZTMl9IRUFSVEJFQVRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKaW5kZXggMTU5MWViMy4uYjY1MGVmYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCkBAIC0zOTYsOCArMzk2LDggQEAKIAl9CiAKIAlpZiAod2FzX3ZhbGlkICYmICF2YWxpZCkgewotCQltbG9nKE1MX05PVElDRSwgIm5vIGxvbmdlciBjb25uZWN0ZWQgdG8gIiBTQ19OT0RFRl9GTVQgIlxuIiwKLQkJICAgICBTQ19OT0RFRl9BUkdTKG9sZF9zYykpOworCQlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogbm8gbG9uZ2VyIGNvbm5lY3RlZCB0byAiCisJCSAgICAgICBTQ19OT0RFRl9GTVQgIlxuIiwgU0NfTk9ERUZfQVJHUyhvbGRfc2MpKTsKIAkJbzJuZXRfY29tcGxldGVfbm9kZXNfbnN3KG5uKTsKIAl9CiAKQEAgLTQwOSwxMCArNDA5LDEwIEBACiAJCSAqIHRoZSBvbmx5IHdheSB0byBzdGFydCBjb25uZWN0aW5nIGFnYWluIGlzIHRvIGRvd24KIAkJICogaGVhcnRiZWF0IGFuZCBicmluZyBpdCBiYWNrIHVwLiAqLwogCQljYW5jZWxfZGVsYXllZF93b3JrKCZubi0+bm5fY29ubmVjdF9leHBpcmVkKTsKLQkJbWxvZyhNTF9OT1RJQ0UsICIlcyAiIFNDX05PREVGX0ZNVCAiXG4iLCAKLQkJICAgICBvMm5tX3RoaXNfbm9kZSgpID4gc2MtPnNjX25vZGUtPm5kX251bSA/Ci0JCSAgICAgCSJjb25uZWN0ZWQgdG8iIDogImFjY2VwdGVkIGNvbm5lY3Rpb24gZnJvbSIsCi0JCSAgICAgU0NfTk9ERUZfQVJHUyhzYykpOworCQlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogJXMgIiBTQ19OT0RFRl9GTVQgIlxuIiwKKwkJICAgICAgIG8ybm1fdGhpc19ub2RlKCkgPiBzYy0+c2Nfbm9kZS0+bmRfbnVtID8KKwkJICAgICAgIAkJImNvbm5lY3RlZCB0byIgOiAiYWNjZXB0ZWQgY29ubmVjdGlvbiBmcm9tIiwKKwkJICAgICAgIFNDX05PREVGX0FSR1Moc2MpKTsKIAl9CiAKIAkvKiB0cmlnZ2VyIHRoZSBjb25uZWN0aW5nIHdvcmtlciBmdW5jIGFzIGxvbmcgYXMgd2UncmUgbm90IHZhbGlkLApAQCAtMTI4MCw3ICsxMjgwLDcgQEAKIAogCWRvX2dldHRpbWVvZmRheSgmbm93KTsKIAotCW1sb2coTUxfTk9USUNFLCAiY29ubmVjdGlvbiB0byAiIFNDX05PREVGX0ZNVCAiIGhhcyBiZWVuIGlkbGUgZm9yIDEwICIKKwlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogY29ubmVjdGlvbiB0byAiIFNDX05PREVGX0ZNVCAiIGhhcyBiZWVuIGlkbGUgZm9yIDEwICIKIAkgICAgICJzZWNvbmRzLCBzaHV0dGluZyBpdCBkb3duLlxuIiwgU0NfTk9ERUZfQVJHUyhzYykpOwogCW1sb2coTUxfTk9USUNFLCAiaGVyZSBhcmUgc29tZSB0aW1lcyB0aGF0IG1pZ2h0IGhlbHAgZGVidWcgdGhlICIKIAkgICAgICJzaXR1YXRpb246ICh0bXIgJWxkLiVsZCBub3cgJWxkLiVsZCBkciAlbGQuJWxkIGFkdiAiCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IGFlNDdmNDUuLjNkNDk0ZDEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC0yMTMsMTEgKzIxMyw5IEBACiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKipkaXJlbnQpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9FTlQ7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKLQltbG9nX2VudHJ5KCIob3NiPSVwLCBwYXJlbnQ9JWxsdSwgbmFtZT0nJS4qcycsIGJsa25vPSVwLCBpbm9kZT0lcClcbiIsCi0JCSAgIG9zYiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCSAgIG5hbWVsZW4sIG5hbWUsIGJsa25vLCBpbm9kZSk7CisJbWxvZ19lbnRyeSgiKG5hbWU9JS4qcywgYmxrbm89JXAsIGlub2RlPSVwLCBkaXJlbnRfYmg9JXAsIGRpcmVudD0lcClcbiIsCisJCSAgIG5hbWVsZW4sIG5hbWUsIGJsa25vLCBpbm9kZSwgZGlyZW50X2JoLCBkaXJlbnQpOwogCiAJKmRpcmVudF9iaCA9IG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgbmFtZWxlbiwgaW5vZGUsIGRpcmVudCk7CiAJaWYgKCEqZGlyZW50X2JoIHx8ICEqZGlyZW50KSB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmggYi9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKaW5kZXggOWJkYzljZi4uMTQ1MzBlZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaApAQCAtODIyLDggKzgyMiw2IEBACiBpbnQgZGxtX2ZpbmFsaXplX3JlY29faGFuZGxlcihzdHJ1Y3QgbzJuZXRfbXNnICptc2csIHUzMiBsZW4sIHZvaWQgKmRhdGEpOwogaW50IGRsbV9kb19tYXN0ZXJfcmVxdWVyeShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCiAJCQkgIHU4IG5vZGVudW0sIHU4ICpyZWFsX21hc3Rlcik7Ci1pbnQgZGxtX2xvY2tyZXNfbWFzdGVyX3JlcXVlcnkoc3RydWN0IGRsbV9jdHh0ICpkbG0sCi0JCQkgICAgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsIHU4ICpyZWFsX21hc3Rlcik7CiAKIAogaW50IGRsbV9kaXNwYXRjaF9hc3NlcnRfbWFzdGVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCmluZGV4IGI4YzIzZjcuLjhkMTA2NWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKQEAgLTQwOCwxMiArNDA4LDEzIEBACiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCi0JbWxvZyhNTF9OT1RJQ0UsICJOb2RlcyBpbiBteSBkb21haW4gKFwiJXNcIik6XG4iLCBkbG0tPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIm9jZnMyX2RsbTogTm9kZXMgaW4gZG9tYWluIChcIiVzXCIpOiAiLCBkbG0tPm5hbWUpOwogCiAJd2hpbGUgKChub2RlID0gZmluZF9uZXh0X2JpdChkbG0tPmRvbWFpbl9tYXAsIE8yTk1fTUFYX05PREVTLAogCQkJCSAgICAgbm9kZSArIDEpKSA8IE8yTk1fTUFYX05PREVTKSB7Ci0JCW1sb2coTUxfTk9USUNFLCAiIG5vZGUgJWRcbiIsIG5vZGUpOworCQlwcmludGsoIiVkICIsIG5vZGUpOwogCX0KKwlwcmludGsoIlxuIik7CiB9CiAKIHN0YXRpYyBpbnQgZGxtX2V4aXRfZG9tYWluX2hhbmRsZXIoc3RydWN0IG8ybmV0X21zZyAqbXNnLCB1MzIgbGVuLCB2b2lkICpkYXRhKQpAQCAtNDI5LDcgKzQzMCw3IEBACiAKIAlub2RlID0gZXhpdF9tc2ctPm5vZGVfaWR4OwogCi0JbWxvZygwLCAiTm9kZSAldSBsZWF2ZXMgZG9tYWluICVzXG4iLCBub2RlLCBkbG0tPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIm9jZnMyX2RsbTogTm9kZSAldSBsZWF2ZXMgZG9tYWluICVzXG4iLCBub2RlLCBkbG0tPm5hbWUpOwogCiAJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAljbGVhcl9iaXQobm9kZSwgZGxtLT5kb21haW5fbWFwKTsKQEAgLTY3OCw2ICs2NzksOCBAQAogCQlzZXRfYml0KGFzc2VydC0+bm9kZV9pZHgsIGRsbS0+ZG9tYWluX21hcCk7CiAJCV9fZGxtX3NldF9qb2luaW5nX25vZGUoZGxtLCBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTik7CiAKKwkJcHJpbnRrKEtFUk5fSU5GTyAib2NmczJfZGxtOiBOb2RlICV1IGpvaW5zIGRvbWFpbiAlc1xuIiwKKwkJICAgICAgIGFzc2VydC0+bm9kZV9pZHgsIGRsbS0+bmFtZSk7CiAJCV9fZGxtX3ByaW50X25vZGVzKGRsbSk7CiAKIAkJLyogbm90aWZ5IGFueXRoaW5nIGF0dGFjaGVkIHRvIHRoZSBoZWFydGJlYXQgZXZlbnRzICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCmluZGV4IDI5YjI4NDUuLjU5NDc0NWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCkBAIC05NSw2ICs5NSw5IEBACiBzdGF0aWMgdm9pZCBkbG1fcmVxdWVzdF9hbGxfbG9ja3Nfd29ya2VyKHN0cnVjdCBkbG1fd29ya19pdGVtICppdGVtLAogCQkJCQkgdm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCBkbG1fbWlnX2xvY2tyZXNfd29ya2VyKHN0cnVjdCBkbG1fd29ya19pdGVtICppdGVtLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgZGxtX2xvY2tyZXNfbWFzdGVyX3JlcXVlcnkoc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJICAgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCisJCQkJICAgICAgdTggKnJlYWxfbWFzdGVyKTsKIAogc3RhdGljIHU2NCBkbG1fZ2V0X25leHRfbWlnX2Nvb2tpZSh2b2lkKTsKIApAQCAtMTQ4NCw4ICsxNDg3LDkgQEAKIAogCiAKLWludCBkbG1fbG9ja3Jlc19tYXN0ZXJfcmVxdWVyeShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKLQkJCSAgICAgICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywgdTggKnJlYWxfbWFzdGVyKQorc3RhdGljIGludCBkbG1fbG9ja3Jlc19tYXN0ZXJfcmVxdWVyeShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQkgICAgICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKKwkJCQkgICAgICB1OCAqcmVhbF9tYXN0ZXIpCiB7CiAJc3RydWN0IGRsbV9ub2RlX2l0ZXIgaXRlcjsKIAlpbnQgbm9kZW51bTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuYyBiL2ZzL29jZnMyL2RsbWdsdWUuYwppbmRleCA0YWNkMzcyLi43NjJlYjFmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmMKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCkBAIC0yMDcxLDggKzIwNzEsNyBAQAogCX0KIAogCS8qIGxhdW5jaCB2b3RlIHRocmVhZCAqLwotCW9zYi0+dm90ZV90YXNrID0ga3RocmVhZF9ydW4ob2NmczJfdm90ZV90aHJlYWQsIG9zYiwgIm9jZnMydm90ZS0lZCIsCi0JCQkJICAgICBvc2ItPm9zYl9pZCk7CisJb3NiLT52b3RlX3Rhc2sgPSBrdGhyZWFkX3J1bihvY2ZzMl92b3RlX3RocmVhZCwgb3NiLCAib2NmczJ2b3RlIik7CiAJaWYgKElTX0VSUihvc2ItPnZvdGVfdGFzaykpIHsKIAkJc3RhdHVzID0gUFRSX0VSUihvc2ItPnZvdGVfdGFzayk7CiAJCW9zYi0+dm90ZV90YXNrID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwppbmRleCAxYTVjNjkwLi5mY2Q0NDc1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAogCQlyZXQgPSBvY2ZzMl9leHRlbnRfbWFwX2luc2VydChpbm9kZSwgcmVjLAogCQkJCQkgICAgICBsZTE2X3RvX2NwdShlbC0+bF90cmVlX2RlcHRoKSk7Ci0JCWlmIChyZXQpIHsKKwkJaWYgKHJldCAmJiAocmV0ICE9IC1FRVhJU1QpKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC00MjcsNiArNDI3LDExIEBACiAvKgogICogU2ltcGxlIHJ1bGU6IG9uIGFueSByZXR1cm4gY29kZSBvdGhlciB0aGFuIC1FQUdBSU4sIGFueXRoaW5nIGxlZnQKICAqIGluIHRoZSBpbnNlcnRfY29udGV4dCB3aWxsIGJlIGZyZWVkLgorICoKKyAqIFNpbXBsZSBydWxlICMyOiBBIHJldHVybiBjb2RlIG9mIC1FRVhJU1QgZnJvbSB0aGlzIGZ1bmN0aW9uIG9yCisgKiBpdHMgY2FsbHMgdG8gb2NmczJfZXh0ZW50X21hcF9pbnNlcnRfZW50cnkoKSBzaWduaWZpZXMgdGhhdCBhbm90aGVyCisgKiB0aHJlYWQgYmVhdCB1cyB0byB0aGUgaW5zZXJ0LiAgSXQgaXMgbm90IGFuIGFjdHVhbCBlcnJvciwgYnV0IGl0CisgKiB0ZWxscyB0aGUgY2FsbGVyIHdlIGhhdmUgbm8gbW9yZSB3b3JrIHRvIGRvLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2V4dGVudF9tYXBfdHJ5X2luc2VydChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjLApAQCAtNDQ4LDIyICs0NTMsMzIgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAorCS8qIFNpbmNlIGluc2VydF9lbnRyeSBmYWlsZWQsIHRoZSBtYXAgTVVTVCBoYXZlIG9sZF9lbnQgKi8KIAlvbGRfZW50ID0gb2NmczJfZXh0ZW50X21hcF9sb29rdXAoZW0sIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSwKLQkJCQkJICBsZTMyX3RvX2NwdShyZWMtPmVfY2x1c3RlcnMpLCBOVUxMLAotCQkJCQkgIE5VTEwpOworCQkJCQkgIGxlMzJfdG9fY3B1KHJlYy0+ZV9jbHVzdGVycyksCisJCQkJCSAgTlVMTCwgTlVMTCk7CiAKIAlCVUdfT04oIW9sZF9lbnQpOwogCi0JcmV0ID0gLUVFWElTVDsKLQlpZiAob2xkX2VudC0+ZV90cmVlX2RlcHRoIDwgdHJlZV9kZXB0aCkKKwlpZiAob2xkX2VudC0+ZV90cmVlX2RlcHRoIDwgdHJlZV9kZXB0aCkgeworCQkvKiBBbm90aGVyIHRocmVhZCBiZWF0IHVzIHRvIHRoZSBsb3dlciB0cmVlX2RlcHRoICovCisJCXJldCA9IC1FRVhJU1Q7CiAJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAlpZiAob2xkX2VudC0+ZV90cmVlX2RlcHRoID09IHRyZWVfZGVwdGgpIHsKKwkJLyoKKwkJICogQW5vdGhlciB0aHJlYWQgYmVhdCB1cyB0byB0aGlzIHRyZWVfZGVwdGguCisJCSAqIExldCdzIG1ha2Ugc3VyZSB3ZSBhZ3JlZSB3aXRoIHRoYXQgdGhyZWFkICh0aGUKKwkJICogZXh0ZW50X3JlYyBzaG91bGQgYmUgaWRlbnRpY2FsKS4KKwkJICovCiAJCWlmICghbWVtY21wKHJlYywgJm9sZF9lbnQtPmVfcmVjLAogCQkJICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYykpKQogCQkJcmV0ID0gMDsKKwkJZWxzZQorCQkJLyogRklYTUU6IFNob3VsZCB0aGlzIGJlIEVTUkNIL0VCQURSPz8/ICovCisJCQlyZXQgPSAtRUVYSVNUOwogCi0JCS8qIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBFU1JDSC9FQkFEUj8/PyAqLwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC01OTksNyArNjE0LDcgQEAKIAkJCQkJCSAgdHJlZV9kZXB0aCwgJmN0eHQpOwogCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKIAotCWlmIChyZXQgPCAwKQorCWlmICgocmV0IDwgMCkgJiYgKHJldCAhPSAtRUVYSVNUKSkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiAJaWYgKGN0eHQubGVmdF9lbnQpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5oIGIvZnMvb2NmczIvaW5vZGUuaAppbmRleCA4NGM1MDc5Li4zNTE0MGY2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5oCisrKyBiL2ZzL29jZnMyL2lub2RlLmgKQEAgLTExNCw3ICsxMTQsNyBAQAogCiBleHRlcm4ga21lbV9jYWNoZV90ICpvY2ZzMl9pbm9kZV9jYWNoZTsKIAotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9jZnMyX2FvcHM7CiAKIHN0cnVjdCBidWZmZXJfaGVhZCAqb2NmczJfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2NrLAogCQkJCWludCAqZXJyLCBpbnQgcmVhZGEpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IDkxMGE2MDEuLmY5MmJmMWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTc4NCw4ICs3ODQsNyBAQAogCX0KIAogCS8qIExhdW5jaCB0aGUgY29tbWl0IHRocmVhZCAqLwotCW9zYi0+Y29tbWl0X3Rhc2sgPSBrdGhyZWFkX3J1bihvY2ZzMl9jb21taXRfdGhyZWFkLCBvc2IsICJvY2ZzMmNtdC0lZCIsCi0JCQkJICAgICAgIG9zYi0+b3NiX2lkKTsKKwlvc2ItPmNvbW1pdF90YXNrID0ga3RocmVhZF9ydW4ob2NmczJfY29tbWl0X3RocmVhZCwgb3NiLCAib2NmczJjbXQiKTsKIAlpZiAoSVNfRVJSKG9zYi0+Y29tbWl0X3Rhc2spKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIob3NiLT5jb21taXRfdGFzayk7CiAJCW9zYi0+Y29tbWl0X3Rhc2sgPSBOVUxMOwpAQCAtMTExOCw3ICsxMTE3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlvc2ItPnJlY292ZXJ5X3RocmVhZF90YXNrID0gIGt0aHJlYWRfcnVuKF9fb2NmczJfcmVjb3ZlcnlfdGhyZWFkLCBvc2IsCi0JCQkJCQkgIm9jZnMycmVjLSVkIiwgb3NiLT5vc2JfaWQpOworCQkJCQkJICJvY2ZzMnJlYyIpOwogCWlmIChJU19FUlIob3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzaykpIHsKIAkJbWxvZ19lcnJubygoaW50KVBUUl9FUlIob3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzaykpOwogCQlvc2ItPnJlY292ZXJ5X3RocmVhZF90YXNrID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL21tYXAuYyBiL2ZzL29jZnMyL21tYXAuYwppbmRleCA4NDNjZjlkLi44MzkzNGUzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9tbWFwLmMKKysrIGIvZnMvb2NmczIvbW1hcC5jCkBAIC00NiwxMiArNDYsMTIgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJCSBpbnQgKnR5cGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGFyZWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTk9QQUdFX1NJR0JVUzsKIAlzaWdzZXRfdCBibG9ja2VkLCBvbGRzZXQ7CiAJaW50IHJldDsKIAotCW1sb2dfZW50cnkoIihpbm9kZSAlbHUsIGFkZHJlc3MgJWx1KVxuIiwgaW5vZGUtPmlfaW5vLCBhZGRyZXNzKTsKKwltbG9nX2VudHJ5KCIoYXJlYT0lcCwgYWRkcmVzcz0lbHUsIHR5cGU9JXApXG4iLCBhcmVhLCBhZGRyZXNzLAorCQkgICB0eXBlKTsKIAogCS8qIFRoZSBiZXN0IHdheSB0byBkZWFsIHdpdGggc2lnbmFscyBpbiB0aGlzIHBhdGggaXMKIAkgKiB0byBibG9jayB0aGVtIHVwZnJvbnQsIHJhdGhlciB0aGFuIGFsbG93aW5nIHRoZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggZGExMDkzMC4uY2Q0YTZmMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0xODQsNyArMTg0LDYgQEAKIHN0cnVjdCBvY2ZzMl9qb3VybmFsX2hhbmRsZTsKIHN0cnVjdCBvY2ZzMl9zdXBlcgogewotCXUzMiBvc2JfaWQ7CQkvKiBpZCB1c2VkIGJ5IHRoZSBwcm9jIGludGVyZmFjZSAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY29tbWl0X3Rhc2s7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgaW5vZGUgKnJvb3RfaW5vZGU7CkBAIC0yMjIsMTMgKzIyMSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CiAKIAl1MTYgbWF4X3Nsb3RzOwotCXUxNiBudW1fbm9kZXM7CiAJczE2IG5vZGVfbnVtOwogCXMxNiBzbG90X251bTsKIAlpbnQgc19zZWN0c2l6ZV9iaXRzOwogCWludCBzX2NsdXN0ZXJzaXplOwogCWludCBzX2NsdXN0ZXJzaXplX2JpdHM7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N1Yl9kaXI7IC8qIHBvaW50cyB0byAvcHJvYy9mcy9vY2ZzMi88bWFqX21pbj4gKi8KIAogCWF0b21pY190IHZvbF9zdGF0ZTsKIAlzdHJ1Y3QgbXV0ZXggcmVjb3ZlcnlfbG9jazsKQEAgLTI5NCw3ICsyOTEsNiBAQAogfTsKIAogI2RlZmluZSBPQ0ZTMl9TQihzYikJICAgICgoc3RydWN0IG9jZnMyX3N1cGVyICopKHNiKS0+c19mc19pbmZvKQotI2RlZmluZSBPQ0ZTMl9NQVhfT1NCX0lEICAgICAgICAgICAgIDY1NTM2CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zbG90X21hcC5jIGIvZnMvb2NmczIvc2xvdF9tYXAuYwppbmRleCA4NzE2Mjc5Li5hYTZmNWFhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zbG90X21hcC5jCisrKyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCW9zYi0+c2xvdF9udW0gPSBzbG90OwogCXNwaW5fdW5sb2NrKCZzaS0+c2lfbG9jayk7CiAKLQltbG9nKE1MX05PVElDRSwgInRha2luZyBub2RlIHNsb3QgJWRcbiIsIG9zYi0+c2xvdF9udW0pOworCW1sb2coMCwgInRha2luZyBub2RlIHNsb3QgJWRcbiIsIG9zYi0+c2xvdF9udW0pOwogCiAJc3RhdHVzID0gb2NmczJfdXBkYXRlX2Rpc2tfc2xvdHMob3NiLCBzaSk7CiAJaWYgKHN0YXR1cyA8IDApCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCBjZGY3MzM5Li4zODI3MDZhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTY4LDEzICs2OCw2IEBACiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCi0vKgotICogR2xvYmFscwotICovCi1zdGF0aWMgc3BpbmxvY2tfdCBvY2ZzMl9nbG9iYWxzX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7Ci0KLXN0YXRpYyB1MzIgb3NiX2lkOyAgICAgICAgICAgICAvKiBLZWVwcyB0cmFjayBvZiBuZXh0IGF2YWlsYWJsZSBPU0IgSWQgKi8KLQogc3RhdGljIGttZW1fY2FjaGVfdCAqb2NmczJfaW5vZGVfY2FjaGVwID0gTlVMTDsKIAoga21lbV9jYWNoZV90ICpvY2ZzMl9sb2NrX2NhY2hlID0gTlVMTDsKQEAgLTY0MiwxMCArNjM1LDkgQEAKIAogCW9jZnMyX2NvbXBsZXRlX21vdW50X3JlY292ZXJ5KG9zYik7CiAKLQlwcmludGsoIm9jZnMyOiBNb3VudGluZyBkZXZpY2UgKCV1LCV1KSBvbiAobm9kZSAlZCwgc2xvdCAlZCkgd2l0aCAlcyAiCi0JICAgICAgICJkYXRhIG1vZGUuXG4iLAotCSAgICAgICBNQUpPUihzYi0+c19kZXYpLCBNSU5PUihzYi0+c19kZXYpLCBvc2ItPm5vZGVfbnVtLAotCSAgICAgICBvc2ItPnNsb3RfbnVtLAorCXByaW50ayhLRVJOX0lORk8gIm9jZnMyOiBNb3VudGluZyBkZXZpY2UgKCVzKSBvbiAobm9kZSAlZCwgc2xvdCAlZCkgIgorCSAgICAgICAid2l0aCAlcyBkYXRhIG1vZGUuXG4iLAorCSAgICAgICBvc2ItPmRldl9zdHIsIG9zYi0+bm9kZV9udW0sIG9zYi0+c2xvdF9udW0sCiAJICAgICAgIG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9EQVRBX1dSSVRFQkFDSyA/ICJ3cml0ZWJhY2siIDoKIAkgICAgICAgIm9yZGVyZWQiKTsKIApAQCAtODAwLDEwICs3OTIsNiBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCXNwaW5fbG9jaygmb2NmczJfZ2xvYmFsc19sb2NrKTsKLQlvc2JfaWQgPSAwOwotCXNwaW5fdW5sb2NrKCZvY2ZzMl9nbG9iYWxzX2xvY2spOwotCiAJb2NmczJfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJvY2ZzMiIsIE5VTEwpOwogCWlmICghb2NmczJfZGVidWdmc19yb290KSB7CiAJCXN0YXR1cyA9IC1FRkFVTFQ7CkBAIC0xMDIwLDcgKzEwMDgsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JbWxvZyhNTF9OT1RJQ0UsICJJIGFtIG5vZGUgJWRcbiIsIG9zYi0+bm9kZV9udW0pOworCW1sb2coMCwgIkkgYW0gbm9kZSAlZFxuIiwgb3NiLT5ub2RlX251bSk7CiAKIAlzdGF0dXMgPSAwOwogYmFpbDoKQEAgLTExOTEsOCArMTE3OSw4IEBACiAKIAlhdG9taWNfc2V0KCZvc2ItPnZvbF9zdGF0ZSwgVk9MVU1FX0RJU01PVU5URUQpOwogCi0JcHJpbnRrKCJvY2ZzMjogVW5tb3VudGluZyBkZXZpY2UgKCV1LCV1KSBvbiAobm9kZSAlZClcbiIsCi0JICAgICAgIE1BSk9SKG9zYi0+c2ItPnNfZGV2KSwgTUlOT1Iob3NiLT5zYi0+c19kZXYpLCBvc2ItPm5vZGVfbnVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogVW5tb3VudGluZyBkZXZpY2UgKCVzKSBvbiAobm9kZSAlZClcbiIsCisJICAgICAgIG9zYi0+ZGV2X3N0ciwgb3NiLT5ub2RlX251bSk7CiAKIAlvY2ZzMl9kZWxldGVfb3NiKG9zYik7CiAJa2ZyZWUob3NiKTsKQEAgLTEyMTIsOCArMTIwMCw2IEBACiAJaWYgKG9zYi0+dXVpZF9zdHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkob3NiLT51dWlkLCB1dWlkLCBPQ0ZTMl9WT0xfVVVJRF9MRU4pOwotCiAJZm9yIChpID0gMCwgcHRyID0gb3NiLT51dWlkX3N0cjsgaSA8IE9DRlMyX1ZPTF9VVUlEX0xFTjsgaSsrKSB7CiAJCS8qIHByaW50IHdpdGggbnVsbCAqLwogCQlyZXQgPSBzbnByaW50ZihwdHIsIDMsICIlMDJYIiwgdXVpZFtpXSk7CkBAIC0xMzExLDEzICsxMjk3LDYgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCW9zYi0+dXVpZCA9IGttYWxsb2MoT0NGUzJfVk9MX1VVSURfTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9zYi0+dXVpZCkgewotCQltbG9nKE1MX0VSUk9SLCAidW5hYmxlIHRvIGFsbG9jIHV1aWRcbiIpOwotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGJhaWw7Ci0JfQotCiAJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWJoLT5iX2RhdGE7CiAKIAlvc2ItPm1heF9zbG90cyA9IGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9zdXBlci5zX21heF9zbG90cyk7CkBAIC0xMzI3LDcgKzEzMDYsNyBAQAogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGJhaWw7CiAJfQotCW1sb2coTUxfTk9USUNFLCAibWF4X3Nsb3RzIGZvciB0aGlzIGRldmljZTogJXVcbiIsIG9zYi0+bWF4X3Nsb3RzKTsKKwltbG9nKDAsICJtYXhfc2xvdHMgZm9yIHRoaXMgZGV2aWNlOiAldVxuIiwgb3NiLT5tYXhfc2xvdHMpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmb3NiLT5vc2Jfd2lwZV9ldmVudCk7CiAJb3NiLT5vc2Jfb3JwaGFuX3dpcGVzID0ga2NhbGxvYyhvc2ItPm1heF9zbG90cywKQEAgLTE0MTgsNyArMTM5Nyw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQltZW1jcHkoJnV1aWRfbmV0X2tleSwgJm9zYi0+dXVpZFtpXSwgc2l6ZW9mKG9zYi0+bmV0X2tleSkpOworCW1lbWNweSgmdXVpZF9uZXRfa2V5LCBkaS0+aWQyLmlfc3VwZXIuc191dWlkLCBzaXplb2YodXVpZF9uZXRfa2V5KSk7CiAJb3NiLT5uZXRfa2V5ID0gbGUzMl90b19jcHUodXVpZF9uZXRfa2V5KTsKIAogCXN0cm5jcHkob3NiLT52b2xfbGFiZWwsIGRpLT5pZDIuaV9zdXBlci5zX2xhYmVsLCA2Myk7CkBAIC0xNDg0LDE4ICsxNDYzLDYgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCS8qICBMaW5rIHRoaXMgb3NiIG9udG8gdGhlIGdsb2JhbCBsaW5rZWQgbGlzdCBvZiBhbGwgb3NiIHN0cnVjdHVyZXMuICovCi0JLyogIFRoZSBHbG9iYWwgTGluayBMaXN0IGlzIG1haW50ZWQgZm9yIHRoZSB3aG9sZSBkcml2ZXIgLiAqLwotCXNwaW5fbG9jaygmb2NmczJfZ2xvYmFsc19sb2NrKTsKLQlvc2ItPm9zYl9pZCA9IG9zYl9pZDsKLQlpZiAob3NiX2lkIDwgT0NGUzJfTUFYX09TQl9JRCkKLQkJb3NiX2lkKys7Ci0JZWxzZSB7Ci0JCW1sb2coTUxfRVJST1IsICJUb28gbWFueSB2b2x1bWVzIG1vdW50ZWRcbiIpOwotCQlzdGF0dXMgPSAtRU5PTUVNOwotCX0KLQlzcGluX3VubG9jaygmb2NmczJfZ2xvYmFsc19sb2NrKTsKLQogYmFpbDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ltbGluay5jIGIvZnMvb2NmczIvc3ltbGluay5jCmluZGV4IDBjOGExMjkuLmMwZjY4YWEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N5bWxpbmsuYworKysgYi9mcy9vY2ZzMi9zeW1saW5rLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCX0KIAogCXN0YXR1cyA9IHZmc19mb2xsb3dfbGluayhuZCwgbGluayk7Ci0JaWYgKHN0YXR1cykKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRU5PRU5UKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiBiYWlsOgogCWlmIChwYWdlKSB7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL01ha2VmaWxlIGIvZnMvcGFydGl0aW9ucy9NYWtlZmlsZQppbmRleCA0MmM3ZDM4Li5kNzEzY2U2IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL01ha2VmaWxlCisrKyBiL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUKQEAgLTQsNyArNCw2IEBACiAKIG9iai15IDo9IGNoZWNrLm8KIAotb2JqLSQoQ09ORklHX0RFVkZTX0ZTKSArPSBkZXZmcy5vCiBvYmotJChDT05GSUdfQUNPUk5fUEFSVElUSU9OKSArPSBhY29ybi5vCiBvYmotJChDT05GSUdfQU1JR0FfUEFSVElUSU9OKSArPSBhbWlnYS5vCiBvYmotJChDT05GSUdfQVRBUklfUEFSVElUSU9OKSArPSBhdGFyaS5vCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2Fjb3JuLmMgYi9mcy9wYXJ0aXRpb25zL2Fjb3JuLmMKaW5kZXggYzA1MDg1Ny4uMWJjOWYzNyAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9hY29ybi5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvYWNvcm4uYwpAQCAtMTIsNyArMTIsNiBAQAogICogIGV2ZXJ5IHNpbmdsZSBtYW51ZmFjdHVyZXIgb2YgU0NTSSBhbmQgSURFIGNhcmRzIGNyZWF0ZWQgdGhlaXIgb3duCiAgKiAgbWV0aG9kLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9hZGZzX2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCAyZWYzMTNhLi44Mzk2MzQwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0xOCwxMCArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAKICNpbmNsdWRlICJjaGVjay5oIgotI2luY2x1ZGUgImRldmZzLmgiCiAKICNpbmNsdWRlICJhY29ybi5oIgogI2luY2x1ZGUgImFtaWdhLmgiCkBAIC0xNjEsMTggKzE1OSwxMSBAQAogCWlmICghc3RhdGUpCiAJCXJldHVybiBOVUxMOwogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0JaWYgKGhkLT5kZXZmc19uYW1lWzBdICE9ICdcMCcpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiIC9kZXYvJXM6IiwgaGQtPmRldmZzX25hbWUpOworCWRpc2tfbmFtZShoZCwgMCwgc3RhdGUtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiAlczoiLCBzdGF0ZS0+bmFtZSk7CisJaWYgKGlzZGlnaXQoc3RhdGUtPm5hbWVbc3RybGVuKHN0YXRlLT5uYW1lKS0xXSkpCiAJCXNwcmludGYoc3RhdGUtPm5hbWUsICJwIik7Ci0JfQotI2VuZGlmCi0JZWxzZSB7Ci0JCWRpc2tfbmFtZShoZCwgMCwgc3RhdGUtPm5hbWUpOwotCQlwcmludGsoS0VSTl9JTkZPICIgJXM6Iiwgc3RhdGUtPm5hbWUpOwotCQlpZiAoaXNkaWdpdChzdGF0ZS0+bmFtZVtzdHJsZW4oc3RhdGUtPm5hbWUpLTFdKSkKLQkJCXNwcmludGYoc3RhdGUtPm5hbWUsICJwIik7Ci0JfQorCiAJc3RhdGUtPmxpbWl0ID0gaGQtPm1pbm9yczsKIAlpID0gcmVzID0gMDsKIAl3aGlsZSAoIXJlcyAmJiBjaGVja19wYXJ0W2ldKSB7CkBAIC0zMjgsNyArMzE5LDYgQEAKIAlwLT5ucl9zZWN0cyA9IDA7CiAJcC0+aW9zWzBdID0gcC0+aW9zWzFdID0gMDsKIAlwLT5zZWN0b3JzWzBdID0gcC0+c2VjdG9yc1sxXSA9IDA7Ci0JZGV2ZnNfcmVtb3ZlKCIlcy9wYXJ0JWQiLCBkaXNrLT5kZXZmc19uYW1lLCBwYXJ0KTsKIAlzeXNmc19yZW1vdmVfbGluaygmcC0+a29iaiwgInN1YnN5c3RlbSIpOwogCWlmIChwLT5ob2xkZXJfZGlyKQogCQlrb2JqZWN0X3VucmVnaXN0ZXIocC0+aG9sZGVyX2Rpcik7CkBAIC0zNTAsMTAgKzM0MCw2IEBACiAJcC0+bnJfc2VjdHMgPSBsZW47CiAJcC0+cGFydG5vID0gcGFydDsKIAotCWRldmZzX21rX2JkZXYoTUtERVYoZGlzay0+bWFqb3IsIGRpc2stPmZpcnN0X21pbm9yICsgcGFydCksCi0JCQlTX0lGQkxLfFNfSVJVU1J8U19JV1VTUiwKLQkJCSIlcy9wYXJ0JWQiLCBkaXNrLT5kZXZmc19uYW1lLCBwYXJ0KTsKLQogCWlmIChpc2RpZ2l0KGRpc2stPmtvYmoubmFtZVtzdHJsZW4oZGlzay0+a29iai5uYW1lKS0xXSkpCiAJCXNucHJpbnRmKHAtPmtvYmoubmFtZSxLT0JKX05BTUVfTEVOLCIlc3AlZCIsZGlzay0+a29iai5uYW1lLHBhcnQpOwogCWVsc2UKQEAgLTQyMywxNCArNDA5LDggQEAKICAJZGlza19zeXNmc19hZGRfc3ViZGlycyhkaXNrKTsKIAogCS8qIE5vIG1pbm9ycyB0byB1c2UgZm9yIHBhcnRpdGlvbnMgKi8KLQlpZiAoZGlzay0+bWlub3JzID09IDEpIHsKLQkJaWYgKGRpc2stPmRldmZzX25hbWVbMF0gIT0gJ1wwJykKLQkJCWRldmZzX2FkZF9kaXNrKGRpc2spOworCWlmIChkaXNrLT5taW5vcnMgPT0gMSkKIAkJZ290byBleGl0OwotCX0KLQotCS8qIGFsd2F5cyBhZGQgaGFuZGxlIGZvciB0aGUgd2hvbGUgZGlzayAqLwotCWRldmZzX2FkZF9wYXJ0aXRpb25lZChkaXNrKTsKIAogCS8qIE5vIHN1Y2ggZGV2aWNlIChlLmcuLCBtZWRpYSB3ZXJlIGp1c3QgcmVtb3ZlZCkgKi8KIAlpZiAoIWdldF9jYXBhY2l0eShkaXNrKSkKQEAgLTUzOCw4ICs1MTgsNiBAQAogCWRpc2tfc3RhdF9zZXRfYWxsKGRpc2ssIDApOwogCWRpc2stPnN0YW1wID0gMDsKIAotCWRldmZzX3JlbW92ZV9kaXNrKGRpc2spOwotCiAJa29iamVjdF91ZXZlbnQoJmRpc2stPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlpZiAoZGlzay0+aG9sZGVyX2RpcikKIAkJa29iamVjdF91bnJlZ2lzdGVyKGRpc2stPmhvbGRlcl9kaXIpOwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9kZXZmcy5jIGIvZnMvcGFydGl0aW9ucy9kZXZmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjBhNzgwLi4wMDAwMDAwCi0tLSBhL2ZzL3BhcnRpdGlvbnMvZGV2ZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogVGhpcyB0cmllcyB0byBrZWVwIGJsb2NrIGRldmljZXMgYXdheSBmcm9tIGRldmZzIGFzIG11Y2ggYXMgcG9zc2libGUuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLQotc3RydWN0IHVuaXF1ZV9udW1zcGFjZSB7Ci0JdTMyCQkgIG51bV9mcmVlOyAgICAgICAgICAvKiAgTnVtIGZyZWUgaW4gYml0cyAgICAgICAqLwotCXUzMgkJICBsZW5ndGg7ICAgICAgICAgICAgLyogIEFycmF5IGxlbmd0aCBpbiBieXRlcyAgKi8KLQl1bnNpZ25lZCBsb25nCSAgKmJpdHM7Ci0Jc3RydWN0IHNlbWFwaG9yZSAgbXV0ZXg7Ci19OwotCi1zdGF0aWMgREVGSU5FX01VVEVYKG51bXNwYWNlX211dGV4KTsKLQotc3RhdGljIGludCBleHBhbmRfbnVtc3BhY2Uoc3RydWN0IHVuaXF1ZV9udW1zcGFjZSAqcykKLXsKLQl1MzIgbGVuZ3RoOwotCXZvaWQgKmJpdHM7Ci0KLQlpZiAocy0+bGVuZ3RoIDwgMTYpCi0JCWxlbmd0aCA9IDE2OwotCWVsc2UKLQkJbGVuZ3RoID0gcy0+bGVuZ3RoIDw8IDE7Ci0KLQliaXRzID0gdm1hbGxvYyhsZW5ndGgpOwotCWlmICghYml0cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHMtPmJpdHMpIHsKLQkJbWVtY3B5KGJpdHMsIHMtPmJpdHMsIHMtPmxlbmd0aCk7Ci0JCXZmcmVlKHMtPmJpdHMpOwotCX0KLQkJCi0Jcy0+bnVtX2ZyZWUgPSAobGVuZ3RoIC0gcy0+bGVuZ3RoKSA8PCAzOwotCXMtPmJpdHMgPSBiaXRzOwotCW1lbXNldChiaXRzICsgcy0+bGVuZ3RoLCAwLCBsZW5ndGggLSBzLT5sZW5ndGgpOwotCXMtPmxlbmd0aCA9IGxlbmd0aDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFsbG9jX3VuaXF1ZV9udW1iZXIoc3RydWN0IHVuaXF1ZV9udW1zcGFjZSAqcykKLXsKLQlpbnQgcnZhbCA9IDA7Ci0KLQltdXRleF9sb2NrKCZudW1zcGFjZV9tdXRleCk7Ci0JaWYgKHMtPm51bV9mcmVlIDwgMSkKLQkJcnZhbCA9IGV4cGFuZF9udW1zcGFjZShzKTsKLQlpZiAoIXJ2YWwpIHsKLQkJcnZhbCA9IGZpbmRfZmlyc3RfemVyb19iaXQocy0+Yml0cywgcy0+bGVuZ3RoIDw8IDMpOwotCQktLXMtPm51bV9mcmVlOwotCQlfX3NldF9iaXQocnZhbCwgcy0+Yml0cyk7Ci0JfQotCW11dGV4X3VubG9jaygmbnVtc3BhY2VfbXV0ZXgpOwotCi0JcmV0dXJuIHJ2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlYWxsb2NfdW5pcXVlX251bWJlcihzdHJ1Y3QgdW5pcXVlX251bXNwYWNlICpzLCBpbnQgbnVtYmVyKQotewotCWludCBvbGRfdmFsOwotCi0JaWYgKG51bWJlciA+PSAwKSB7Ci0JCW11dGV4X2xvY2soJm51bXNwYWNlX211dGV4KTsKLQkJb2xkX3ZhbCA9IF9fdGVzdF9hbmRfY2xlYXJfYml0KG51bWJlciwgcy0+Yml0cyk7Ci0JCWlmIChvbGRfdmFsKQotCQkJKytzLT5udW1fZnJlZTsKLQkJbXV0ZXhfdW5sb2NrKCZudW1zcGFjZV9tdXRleCk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHVuaXF1ZV9udW1zcGFjZSBkaXNjX251bXNwYWNlOwotc3RhdGljIHN0cnVjdCB1bmlxdWVfbnVtc3BhY2UgY2Ryb21fbnVtc3BhY2U7Ci0KLXZvaWQgZGV2ZnNfYWRkX3BhcnRpdGlvbmVkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCWNoYXIgZGlybmFtZVs2NF0sIHN5bWxpbmtbMTZdOwotCi0JZGV2ZnNfbWtfZGlyKGRpc2stPmRldmZzX25hbWUpOwotCWRldmZzX21rX2JkZXYoTUtERVYoZGlzay0+bWFqb3IsIGRpc2stPmZpcnN0X21pbm9yKSwKLQkJCVNfSUZCTEt8U19JUlVTUnxTX0lXVVNSLAotCQkJIiVzL2Rpc2MiLCBkaXNrLT5kZXZmc19uYW1lKTsKLQotCWRpc2stPm51bWJlciA9IGFsbG9jX3VuaXF1ZV9udW1iZXIoJmRpc2NfbnVtc3BhY2UpOwotCi0Jc3ByaW50ZihzeW1saW5rLCAiZGlzY3MvZGlzYyVkIiwgZGlzay0+bnVtYmVyKTsKLQlzcHJpbnRmKGRpcm5hbWUsICIuLi8lcyIsIGRpc2stPmRldmZzX25hbWUpOwotCWRldmZzX21rX3N5bWxpbmsoc3ltbGluaywgZGlybmFtZSk7Ci0KLX0KLQotdm9pZCBkZXZmc19hZGRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlkZXZmc19ta19iZGV2KE1LREVWKGRpc2stPm1ham9yLCBkaXNrLT5maXJzdF9taW5vciksCi0JCQkoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9DRCkgPwotCQkJCVNfSUZCTEt8U19JUlVHT3xTX0lXVUdPIDoKLQkJCQlTX0lGQkxLfFNfSVJVU1J8U19JV1VTUiwKLQkJCSIlcyIsIGRpc2stPmRldmZzX25hbWUpOwotCi0JaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfQ0QpIHsKLQkJY2hhciBkaXJuYW1lWzY0XSwgc3ltbGlua1sxNl07Ci0KLQkJZGlzay0+bnVtYmVyID0gYWxsb2NfdW5pcXVlX251bWJlcigmY2Ryb21fbnVtc3BhY2UpOwotCi0JCXNwcmludGYoc3ltbGluaywgImNkcm9tcy9jZHJvbSVkIiwgZGlzay0+bnVtYmVyKTsKLQkJc3ByaW50ZihkaXJuYW1lLCAiLi4vJXMiLCBkaXNrLT5kZXZmc19uYW1lKTsKLQkJZGV2ZnNfbWtfc3ltbGluayhzeW1saW5rLCBkaXJuYW1lKTsKLQl9Ci19Ci0KLXZvaWQgZGV2ZnNfcmVtb3ZlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0JaWYgKGRpc2stPm1pbm9ycyAhPSAxKSB7Ci0JCWRldmZzX3JlbW92ZSgiZGlzY3MvZGlzYyVkIiwgZGlzay0+bnVtYmVyKTsKLQkJZGVhbGxvY191bmlxdWVfbnVtYmVyKCZkaXNjX251bXNwYWNlLCBkaXNrLT5udW1iZXIpOwotCQlkZXZmc19yZW1vdmUoIiVzL2Rpc2MiLCBkaXNrLT5kZXZmc19uYW1lKTsKLQl9Ci0JaWYgKGRpc2stPmZsYWdzICYgR0VOSERfRkxfQ0QpIHsKLQkJZGV2ZnNfcmVtb3ZlKCJjZHJvbXMvY2Ryb20lZCIsIGRpc2stPm51bWJlcik7Ci0JCWRlYWxsb2NfdW5pcXVlX251bWJlcigmY2Ryb21fbnVtc3BhY2UsIGRpc2stPm51bWJlcik7Ci0JfQotCWRldmZzX3JlbW92ZShkaXNrLT5kZXZmc19uYW1lKTsKLX0KLQotCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2RldmZzLmggYi9mcy9wYXJ0aXRpb25zL2RldmZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NjExOGIuLjAwMDAwMDAKLS0tIGEvZnMvcGFydGl0aW9ucy9kZXZmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi12b2lkIGRldmZzX2FkZF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkZXYpOwotdm9pZCBkZXZmc19hZGRfcGFydGl0aW9uZWQoc3RydWN0IGdlbmRpc2sgKmRldik7Ci12b2lkIGRldmZzX3JlbW92ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkZXYpOwotI2Vsc2UKLSMgZGVmaW5lIGRldmZzX2FkZF9kaXNrKGRpc2spCQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgZGV2ZnNfYWRkX3BhcnRpdGlvbmVkKGRpc2spCQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBkZXZmc19yZW1vdmVfZGlzayhkaXNrKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2VmaS5jIGIvZnMvcGFydGl0aW9ucy9lZmkuYwppbmRleCAwZjViMDE3Li42MzczMDI4IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2VmaS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvZWZpLmMKQEAgLTkxLDcgKzkxLDYgQEAKICAqIC0gQ29kZSB3b3JrcywgZGV0ZWN0cyBhbGwgdGhlIHBhcnRpdGlvbnMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgImNoZWNrLmgiCiAjaW5jbHVkZSAiZWZpLmgiCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2VmaS5oIGIvZnMvcGFydGl0aW9ucy9lZmkuaAppbmRleCBjNDRmYjA1Li4yY2M4OWQwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2VmaS5oCisrKyBiL2ZzL3BhcnRpdGlvbnMvZWZpLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgRlNfUEFSVF9FRklfSF9JTkNMVURFRAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2libS5jIGIvZnMvcGFydGl0aW9ucy9pYm0uYwppbmRleCA4MzBjNTVkLi5kMzUyYTczIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2libS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKQEAgLTYsNyArNiw2IEBACiAgKiAoQykgSUJNIENvcnBvcmF0aW9uLCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgMTk5OSwyMDAwCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL21hYy5jIGIvZnMvcGFydGl0aW9ucy9tYWMuYwppbmRleCA4MTMyOTJmLi5jMDg3MTAwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL21hYy5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKQEAgLTYsNyArNiw2IEBACiAgKiAgUmUtb3JnYW5pc2VkIEZlYiAxOTk4IFJ1c3NlbGwgS2luZwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgImNoZWNrLmgiCiAjaW5jbHVkZSAibWFjLmgiCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL21zZG9zLmMgYi9mcy9wYXJ0aXRpb25zL21zZG9zLmMKaW5kZXggOTkzNWQyNS4uOGYxMjU4NyAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tc2Rvcy5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbXNkb3MuYwpAQCAtMTksNyArMTksNiBAQAogICogIFJlLW9yZ2FuaXNlZCBGZWIgMTk5OCBSdXNzZWxsIEtpbmcKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlICJjaGVjay5oIgogI2luY2x1ZGUgIm1zZG9zLmgiCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggN2E3NmFkNS4uNzQ5NWQzZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtNTIsNyArNTIsNiBAQAogICoJCQkgOiAgYmFzZS5jIHRvby4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNmJhNzc4NS4uMjQzYTk0YSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9wcm9jL2tjb3JlLmMgYi9mcy9wcm9jL2tjb3JlLmMKaW5kZXggMTdmNmU4Zi4uMDM2ZDE0ZDggMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mva2NvcmUuYworKysgYi9mcy9wcm9jL2tjb3JlLmMKQEAgLTksNyArOSw2IEBACiAgKglTYWZlIGFjY2Vzc2VzIHRvIHZtYWxsb2MvZGlyZWN0LW1hcHBlZCBkaXNjb250aWd1b3VzIGFyZWFzLCBLYW5vaiBTYXJjYXIgPGthbm9qQHNnaS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmluZGV4IDVjMTBlYTEuLjlmMmNmYzMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIGIvZnMvcHJvYy9wcm9jX21pc2MuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CkBAIC0xMjAsNyArMTE5LDYgQEAKIHsKIAlzdHJ1Y3Qgc3lzaW5mbyBpOwogCWludCBsZW47Ci0Jc3RydWN0IHBhZ2Vfc3RhdGUgcHM7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIGFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIGZyZWU7CkBAIC0xMjksNyArMTI3LDYgQEAKIAlzdHJ1Y3Qgdm1hbGxvY19pbmZvIHZtaTsKIAlsb25nIGNhY2hlZDsKIAotCWdldF9wYWdlX3N0YXRlKCZwcyk7CiAJZ2V0X3pvbmVfY291bnRzKCZhY3RpdmUsICZpbmFjdGl2ZSwgJmZyZWUpOwogCiAvKgpAQCAtMTQyLDcgKzEzOSw4IEBACiAJYWxsb3dlZCA9ICgodG90YWxyYW1fcGFnZXMgLSBodWdldGxiX3RvdGFsX3BhZ2VzKCkpCiAJCSogc3lzY3RsX292ZXJjb21taXRfcmF0aW8gLyAxMDApICsgdG90YWxfc3dhcF9wYWdlczsKIAotCWNhY2hlZCA9IGdldF9wYWdlX2NhY2hlX3NpemUoKSAtIHRvdGFsX3N3YXBjYWNoZV9wYWdlcyAtIGkuYnVmZmVycmFtOworCWNhY2hlZCA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfUEFHRVMpIC0KKwkJCXRvdGFsX3N3YXBjYWNoZV9wYWdlcyAtIGkuYnVmZmVycmFtOwogCWlmIChjYWNoZWQgPCAwKQogCQljYWNoZWQgPSAwOwogCkBAIC0xNjcsMTEgKzE2NSwxNCBAQAogCQkiU3dhcEZyZWU6ICAgICAlOGx1IGtCXG4iCiAJCSJEaXJ0eTogICAgICAgICU4bHUga0JcbiIKIAkJIldyaXRlYmFjazogICAgJThsdSBrQlxuIgorCQkiQW5vblBhZ2VzOiAgICAlOGx1IGtCXG4iCiAJCSJNYXBwZWQ6ICAgICAgICU4bHUga0JcbiIKIAkJIlNsYWI6ICAgICAgICAgJThsdSBrQlxuIgorCQkiUGFnZVRhYmxlczogICAlOGx1IGtCXG4iCisJCSJORlMgVW5zdGFibGU6ICU4bHUga0JcbiIKKwkJIkJvdW5jZTogICAgICAgJThsdSBrQlxuIgogCQkiQ29tbWl0TGltaXQ6ICAlOGx1IGtCXG4iCiAJCSJDb21taXR0ZWRfQVM6ICU4bHUga0JcbiIKLQkJIlBhZ2VUYWJsZXM6ICAgJThsdSBrQlxuIgogCQkiVm1hbGxvY1RvdGFsOiAlOGx1IGtCXG4iCiAJCSJWbWFsbG9jVXNlZDogICU4bHUga0JcbiIKIAkJIlZtYWxsb2NDaHVuazogJThsdSBrQlxuIiwKQEAgLTE4OCwxMyArMTg5LDE2IEBACiAJCUsoaS5mcmVlcmFtLWkuZnJlZWhpZ2gpLAogCQlLKGkudG90YWxzd2FwKSwKIAkJSyhpLmZyZWVzd2FwKSwKLQkJSyhwcy5ucl9kaXJ0eSksCi0JCUsocHMubnJfd3JpdGViYWNrKSwKLQkJSyhwcy5ucl9tYXBwZWQpLAotCQlLKHBzLm5yX3NsYWIpLAorCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9BTk9OX1BBR0VTKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9NQVBQRUQpKSwKKwkJSyhnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfUEFHRVRBQkxFKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSksCisJCUsoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQk9VTkNFKSksCiAJCUsoYWxsb3dlZCksCiAJCUsoY29tbWl0dGVkKSwKLQkJSyhwcy5ucl9wYWdlX3RhYmxlX3BhZ2VzKSwKIAkJKHVuc2lnbmVkIGxvbmcpVk1BTExPQ19UT1RBTCA+PiAxMCwKIAkJdm1pLnVzZWQgPj4gMTAsCiAJCXZtaS5sYXJnZXN0X2NodW5rID4+IDEwCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IDk5OTUzNTYuLjg5MDFjNjUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy92bWNvcmUuYyBiL2ZzL3Byb2Mvdm1jb3JlLmMKaW5kZXggMjBkNGIyMi4uZDk2MDUwNzIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvdm1jb3JlLmMKKysrIGIvZnMvcHJvYy92bWNvcmUuYwpAQCAtNyw3ICs3LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KZGlmZiAtLWdpdCBhL2ZzL3FueDQvYml0bWFwLmMgYi9mcy9xbng0L2JpdG1hcC5jCmluZGV4IDQ2ZWZiZjUuLjg0MjVjZjYgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvYml0bWFwLmMKKysrIGIvZnMvcW54NC9iaXRtYXAuYwpAQCAtMTMsNyArMTMsNiBAQAogICogMjgtMDYtMTk5OCBieSBGcmFuayBEZW5pcyA6IHFueDRfZnJlZV9pbm9kZSAodG8gYmUgZml4ZWQpIC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcW54NF9mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvcW54NC9kaXIuYyBiL2ZzL3FueDQvZGlyLmMKaW5kZXggOTAzMTk0OC4uMGQ3MTAzZiAxMDA2NDQKLS0tIGEvZnMvcW54NC9kaXIuYworKysgYi9mcy9xbng0L2Rpci5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAyMC0wNi0xOTk4IGJ5IEZyYW5rIERlbmlzIDogTGludXggMi4xLjk5KyAmIGRjYWNoZSBzdXBwb3J0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9xbng0L2ZzeW5jLmMgYi9mcy9xbng0L2ZzeW5jLmMKaW5kZXggZGY1YmM3NS4uYWEzYjE5NSAxMDA2NDQKLS0tIGEvZnMvcW54NC9mc3luYy5jCisrKyBiL2ZzL3FueDQvZnN5bmMuYwpAQCAtMTAsNyArMTAsNiBAQAogICogMjQtMDMtMTk5OCBieSBSaWNoYXJkIEZyb3dpam4gOiBmaXJzdCByZWxlYXNlLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CmRpZmYgLS1naXQgYS9mcy9xbng0L2lub2RlLmMgYi9mcy9xbng0L2lub2RlLmMKaW5kZXggMmYyNGM0Ni4uNWE5MDM0OSAxMDA2NDQKLS0tIGEvZnMvcW54NC9pbm9kZS5jCisrKyBiL2ZzL3FueDQvaW5vZGUuYwpAQCAtMTIsNyArMTIsNiBAQAogICogMzAtMDYtMTk5OCBieSBGcmFuayBEZW5pcyA6IGZpcnN0IHN0ZXAgdG8gd3JpdGUgaW5vZGVzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDUwLDcgKzQ0OSw3IEBACiB7CiAJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLGJsb2NrLHFueDRfZ2V0X2Jsb2NrKTsKIH0KLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHFueDRfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHFueDRfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBxbng0X3JlYWRwYWdlLAogCS53cml0ZXBhZ2UJPSBxbng0X3dyaXRlcGFnZSwKIAkuc3luY19wYWdlCT0gYmxvY2tfc3luY19wYWdlLApkaWZmIC0tZ2l0IGEvZnMvcW54NC9uYW1laS5jIGIvZnMvcW54NC9uYW1laS5jCmluZGV4IDRhZjQ5NTEuLmMzZDgzZjYgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvbmFtZWkuYworKysgYi9mcy9xbng0L25hbWVpLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIDA0LTA3LTE5OTggYnkgRnJhbmsgRGVuaXMgOiBmaXJzdCBzdGVwIGZvciBybWRpci91bmxpbmsuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3FueDRfZnMuaD4KZGlmZiAtLWdpdCBhL2ZzL3FueDQvdHJ1bmNhdGUuYyBiL2ZzL3FueDQvdHJ1bmNhdGUuYwppbmRleCA4NjU2M2VjLi42NDM3YzFjIDEwMDY0NAotLS0gYS9mcy9xbng0L3RydW5jYXRlLmMKKysrIGIvZnMvcW54NC90cnVuY2F0ZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAzMC0wNi0xOTk4IGJ5IEZyYW5rIERFTklTIDogdWdseSBmaWxsZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbW11LmMKaW5kZXggMDBhOTMzZS4uODZmMTRjYSAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW1tdS5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJhbWZzX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJhbWZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gc2ltcGxlX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gc2ltcGxlX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IHNpbXBsZV9jb21taXRfd3JpdGUKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCBmNDQzYTg0Li45OWZmZmM5ZSAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtMjcsNyArMjcsNyBAQAogCiBzdGF0aWMgaW50IHJhbWZzX25vbW11X3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiAKLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZnNfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJCT0gc2ltcGxlX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCQk9IHNpbXBsZV9wcmVwYXJlX3dyaXRlLAogCS5jb21taXRfd3JpdGUJCT0gc2ltcGxlX2NvbW1pdF93cml0ZQpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvaW50ZXJuYWwuaCBiL2ZzL3JhbWZzL2ludGVybmFsLmgKaW5kZXggMzEzMjM3Ni4uYzJiYjU4ZSAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvaW50ZXJuYWwuaAorKysgYi9mcy9yYW1mcy9pbnRlcm5hbC5oCkBAIC0xMCw2ICsxMCw2IEBACiAgKi8KIAogCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyByYW1mc19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZnNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhbWZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByYW1mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IDkwOWY3MWUuLjRhN2RiZGUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC0zLDcgKzMsNiBAQAogICovCiAvKiBSZWlzZXJmcyBibG9jayAoZGUpYWxsb2NhdG9yLCBiaXRtYXAtYmFzZWQuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZGlyLmMgYi9mcy9yZWlzZXJmcy9kaXIuYwppbmRleCA5NzNjODE5Li45YWFiY2MwIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kaXIuYworKysgYi9mcy9yZWlzZXJmcy9kaXIuYwpAQCAtMiw3ICsyLDYgQEAKICAqIENvcHlyaWdodCAyMDAwIGJ5IEhhbnMgUmVpc2VyLCBsaWNlbnNpbmcgZ292ZXJuZWQgYnkgcmVpc2VyZnMvUkVBRE1FCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMgYi9mcy9yZWlzZXJmcy9kb19iYWxhbi5jCmluZGV4IGIyMjY0YmEuLmZiYTMwNGUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMKKysrIGIvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYwpAQCAtMTUsNyArMTUsNiBAQAogICoqCiAgKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZml4X25vZGUuYyBiL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKaW5kZXggNTYwMGQzZC4uNmQwZTU1NCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZml4X25vZGUuYworKysgYi9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiogCiAgKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMgYi9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jCmluZGV4IDZjNWE3MjYuLmRlMzkxYTggMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMKKysrIGIvZnMvcmVpc2VyZnMvaWJhbGFuY2UuYwpAQCAtMiw3ICsyLDYgQEAKICAqIENvcHlyaWdodCAyMDAwIGJ5IEhhbnMgUmVpc2VyLCBsaWNlbnNpbmcgZ292ZXJuZWQgYnkgcmVpc2VyZnMvUkVBRE1FCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggOTg1N2U1MC4uMTJkZmRjZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0yLDcgKzIsNiBAQAogICogQ29weXJpZ2h0IDIwMDAgYnkgSGFucyBSZWlzZXIsIGxpY2Vuc2luZyBnb3Zlcm5lZCBieSByZWlzZXJmcy9SRUFETUUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KQEAgLTI5MzMsNiArMjkzMiwxMSBAQAogCQkJfQogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0OworCQkJLyoKKwkJCSAqIGZpbGUgc2l6ZSBpcyBjaGFuZ2VkLCBjdGltZSBhbmQgbXRpbWUgYXJlCisJCQkgKiB0byBiZSB1cGRhdGVkCisJCQkgKi8KKwkJCWF0dHItPmlhX3ZhbGlkIHw9IChBVFRSX01USU1FIHwgQVRUUl9DVElNRSk7CiAJCX0KIAl9CiAKQEAgLTI5OTYsNyArMzAwMCw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJlaXNlcmZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmVpc2VyZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0gewogCS53cml0ZXBhZ2UgPSByZWlzZXJmc193cml0ZXBhZ2UsCiAJLnJlYWRwYWdlID0gcmVpc2VyZnNfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcyA9IHJlaXNlcmZzX3JlYWRwYWdlcywKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwppbmRleCA0OWQxYTUzLi45YjM2NzJkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMKKysrIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCkBAIC0zNCw3ICszNCw2IEBACiAqKgkJICAgICAgICBmcm9tIHdpdGhpbiBrdXBkYXRlLCBpdCB3aWxsIGlnbm9yZSB0aGUgaW1tZWRpYXRlIGZsYWcKICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYyBiL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMKaW5kZXggMjUzM2MxZi4uMjgxZjgwNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYworKysgYi9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jCkBAIC0yLDcgKzIsNiBAQAogICogQ29weXJpZ2h0IDIwMDAgYnkgSGFucyBSZWlzZXIsIGxpY2Vuc2luZyBnb3Zlcm5lZCBieSByZWlzZXJmcy9SRUFETUUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCAyODRmNzg1Li5jNjE3MTBlIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIE5PIFdBUlJBTlRZCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYyBiL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKaW5kZXggZjYyNTkwYS4uNjVmZWJhNCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYworKysgYi9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCkBAIC0yLDcgKzIsNiBAQAogICogQ29weXJpZ2h0IDIwMDAgYnkgSGFucyBSZWlzZXIsIGxpY2Vuc2luZyBnb3Zlcm5lZCBieSByZWlzZXJmcy9SRUFETUUKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcHJpbnRzLmMgYi9mcy9yZWlzZXJmcy9wcmludHMuYwppbmRleCAyN2JkM2ExLi5iYzgwOGE5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9wcmludHMuYworKysgYi9mcy9yZWlzZXJmcy9wcmludHMuYwpAQCAtMiw3ICsyLDYgQEAKICAqIENvcHlyaWdodCAyMDAwIGJ5IEhhbnMgUmVpc2VyLCBsaWNlbnNpbmcgZ292ZXJuZWQgYnkgcmVpc2VyZnMvUkVBRE1FCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9wcm9jZnMuYyBiL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCmluZGV4IDczMTY4OGUuLjVkOGE4Y2YgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCisrKyBiL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCkBAIC0xMCw3ICsxMCw2IEBACiAKIC8qICRJZDogcHJvY2ZzLmMsdiAxLjEuOC4yIDIwMDEvMDcvMTUgMTc6MDg6NDIgZ29kIEV4cCAkICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IGQyYjI1ZTEuLjhiOWIxMzEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtNDksNyArNDksNiBAQAogICogcmVpc2VyZnNfaW5zZXJ0X2l0ZW0KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDAwZjEzMjEuLjU1NjczMjggMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMTEsNyArMTEsNiBAQAogICogTk8gV0FSUkFOVFkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTIyMDQsNyArMjIwMyw3IEBACiAJc2l6ZV90IHRvd3JpdGUgPSBsZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkIHRtcF9iaCwgKmJoOwogCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9RVU9UQSk7CiAJd2hpbGUgKHRvd3JpdGUgPiAwKSB7CiAJCXRvY29weSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA8IHRvd3JpdGUgPwogCQkgICAgc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDogdG93cml0ZTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3RhaWxfY29udmVyc2lvbi5jIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKaW5kZXggMTk2ZTk3MS4uMzZmMTA4ZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKKysrIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKQEAgLTIsNyArMiw2IEBACiAgKiBDb3B5cmlnaHQgMTk5OSBIYW5zIFJlaXNlciwgc2VlIHJlaXNlcmZzL1JFQURNRSBmb3IgbGljZW5zaW5nIGFuZCBjb3B5cmlnaHQgZGV0YWlscwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CmRpZmYgLS1naXQgYS9mcy9yb21mcy9pbm9kZS5jIGIvZnMvcm9tZnMvaW5vZGUuYwppbmRleCAyODNmYmM2Li4yMmVlZDYxIDEwMDY0NAotLS0gYS9mcy9yb21mcy9pbm9kZS5jCisrKyBiL2ZzL3JvbWZzL2lub2RlLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCiAvKiBNYXBwaW5nIGZyb20gb3VyIHR5cGVzIHRvIHRoZSBrZXJuZWwgKi8KIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcm9tZnNfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJvbWZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gcm9tZnNfcmVhZHBhZ2UKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2ZpbGUuYyBiL2ZzL3NtYmZzL2ZpbGUuYwppbmRleCBlZDlhMjRkLi5kYWU2NzA0IDEwMDY0NAotLS0gYS9mcy9zbWJmcy9maWxlLmMKKysrIGIvZnMvc21iZnMvZmlsZS5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNtYl9maWxlX2FvcHMgPSB7Citjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNtYl9maWxlX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gc21iX3JlYWRwYWdlLAogCS53cml0ZXBhZ2UgPSBzbWJfd3JpdGVwYWdlLAogCS5wcmVwYXJlX3dyaXRlID0gc21iX3ByZXBhcmVfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9pbm9kZS5jIGIvZnMvc21iZnMvaW5vZGUuYwppbmRleCA1MDZmZjg3Li5hMWVkNjU3IDEwMDY0NAotLS0gYS9mcy9zbWJmcy9pbm9kZS5jCisrKyBiL2ZzL3NtYmZzL2lub2RlLmMKQEAgLTcsNyArNyw2IEBACiAgKiAgUGxlYXNlIGFkZCBhIG5vdGUgYWJvdXQgeW91ciBjaGFuZ2VzIHRvIHNtYmZzIGluIHRoZSBDaGFuZ2VMb2cgZmlsZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvcHJvdG8uaCBiL2ZzL3NtYmZzL3Byb3RvLmgKaW5kZXggOTcyZWQ3ZC4uMzRmYjQ2MiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvcHJvdG8uaAorKysgYi9mcy9zbWJmcy9wcm90by5oCkBAIC02Myw3ICs2Myw3IEBACiBleHRlcm4gaW50IHNtYl9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdCAqc3RhdCk7CiBleHRlcm4gaW50IHNtYl9ub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIC8qIGZpbGUuYyAqLwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc21iX2ZpbGVfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNtYl9maWxlX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbWJfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNtYl9maWxlX2lub2RlX29wZXJhdGlvbnM7CiAvKiBpb2N0bC5jICovCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9zbWJpb2QuYyBiL2ZzL3NtYmZzL3NtYmlvZC5jCmluZGV4IDI0NTc3ZTIuLmU2NzU0MDQgMTAwNjQ0Ci0tLSBhL2ZzL3NtYmZzL3NtYmlvZC5jCisrKyBiL2ZzL3NtYmZzL3NtYmlvZC5jCkBAIC01LDcgKzUsNiBAQAogICogIENvcHlyaWdodCAoQykgMjAwMSwgVXJiYW4gV2lkbWFyawogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmMKaW5kZXggMGYyODJmYWMuLjNhNDRkY2YgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA4YTY2OWY2Li42ZDRlODE3IDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqICBIZWF2aWx5IHJld3JpdHRlbiBmb3IgJ29uZSBmcyAtIG9uZSB0cmVlJyBkY2FjaGUgYXJjaGl0ZWN0dXJlLiBBViwgTWFyIDIwMDAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTU0LDcgKzUzLDcgQEAKICAqCUFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgJnN0cnVjdCBzdXBlcl9ibG9jay4gIGFsbG9jX3N1cGVyKCkKICAqCXJldHVybnMgYSBwb2ludGVyIG5ldyBzdXBlcmJsb2NrIG9yICVOVUxMIGlmIGFsbG9jYXRpb24gaGFkIGZhaWxlZC4KICAqLwotc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIodm9pZCkKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdXBlcl9ibG9jayksICBHRlBfVVNFUik7CiAJc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRlZmF1bHRfb3A7CkBAIC03Myw2ICs3MiwxMyBAQAogCQlJTklUX0xJU1RfSEVBRCgmcy0+c19pbm9kZXMpOwogCQlpbml0X3J3c2VtKCZzLT5zX3Vtb3VudCk7CiAJCW11dGV4X2luaXQoJnMtPnNfbG9jayk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZzLT5zX3Vtb3VudCwgJnR5cGUtPnNfdW1vdW50X2tleSk7CisJCS8qCisJCSAqIFRoZSBsb2NraW5nIHJ1bGVzIGZvciBzX2xvY2sgYXJlIHVwIHRvIHRoZQorCQkgKiBmaWxlc3lzdGVtLiBGb3IgZXhhbXBsZSBleHQzZnMgaGFzIGRpZmZlcmVudAorCQkgKiBsb2NrIG9yZGVyaW5nIHRoYW4gdXNiZnM6CisJCSAqLworCQlsb2NrZGVwX3NldF9jbGFzcygmcy0+c19sb2NrLCAmdHlwZS0+c19sb2NrX2tleSk7CiAJCWRvd25fd3JpdGUoJnMtPnNfdW1vdW50KTsKIAkJcy0+c19jb3VudCA9IFNfQklBUzsKIAkJYXRvbWljX3NldCgmcy0+c19hY3RpdmUsIDEpOwpAQCAtMjk2LDcgKzMwMiw3IEBACiAJfQogCWlmICghcykgewogCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCXMgPSBhbGxvY19zdXBlcigpOworCQlzID0gYWxsb2Nfc3VwZXIodHlwZSk7CiAJCWlmICghcykKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCQlnb3RvIHJldHJ5OwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvaW5vZGUuYyBiL2ZzL3N5c2ZzL2lub2RlLmMKaW5kZXggZjBiMzQ3Yi4uNWUwZTMxYyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvaW5vZGUuYworKysgYi9mcy9zeXNmcy9pbm9kZS5jCkBAIC0xNiw3ICsxNiw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzeXNmc19zYjsKIAotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3lzZnNfYW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHN5c2ZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gc2ltcGxlX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gc2ltcGxlX3ByZXBhcmVfd3JpdGUsCiAJLmNvbW1pdF93cml0ZQk9IHNpbXBsZV9jb21taXRfd3JpdGUKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvaXRyZWUuYyBiL2ZzL3N5c3YvaXRyZWUuYwppbmRleCA4NmY1ZjhkLi5mMmJjY2NkIDEwMDY0NAotLS0gYS9mcy9zeXN2L2l0cmVlLmMKKysrIGIvZnMvc3lzdi9pdHJlZS5jCkBAIC00NjUsNyArNDY1LDcgQEAKIHsKIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsYmxvY2ssZ2V0X2Jsb2NrKTsKIH0KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3lzdl9hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzeXN2X2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gc3lzdl9yZWFkcGFnZSwKIAkud3JpdGVwYWdlID0gc3lzdl93cml0ZXBhZ2UsCiAJLnN5bmNfcGFnZSA9IGJsb2NrX3N5bmNfcGFnZSwKZGlmZiAtLWdpdCBhL2ZzL3N5c3Yvc3lzdi5oIGIvZnMvc3lzdi9zeXN2LmgKaW5kZXggMzkzYTQ4MC4uOWRjYzgyMSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9zeXN2LmgKKysrIGIvZnMvc3lzdi9zeXN2LmgKQEAgLTE2MSw3ICsxNjEsNyBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHN5c3ZfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXN2X2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5c3ZfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzeXN2X2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzeXN2X2FvcHM7CiBleHRlcm4gc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3lzdl9zb3BzOwogZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXN2X2RlbnRyeV9vcGVyYXRpb25zOwogCmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuYwppbmRleCBlMzRiMDBlLi5hNTllNWYzIDEwMDY0NAotLS0gYS9mcy91ZGYvZmlsZS5jCisrKyBiL2ZzL3VkZi9maWxlLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZGZfYWRpbmljYl9hb3BzID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZGZfYWRpbmljYl9hb3BzID0gewogCS5yZWFkcGFnZQkJPSB1ZGZfYWRpbmljYl9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCQk9IHVkZl9hZGluaWNiX3dyaXRlcGFnZSwKIAkuc3luY19wYWdlCQk9IGJsb2NrX3N5bmNfcGFnZSwKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggMjk4M2FmZC4uNjA1ZjUxMSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXJldHVybiBnZW5lcmljX2Jsb2NrX2JtYXAobWFwcGluZyxibG9jayx1ZGZfZ2V0X2Jsb2NrKTsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZGZfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWRmX2FvcHMgPSB7CiAJLnJlYWRwYWdlCQk9IHVkZl9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCQk9IHVkZl93cml0ZXBhZ2UsCiAJLnN5bmNfcGFnZQkJPSBibG9ja19zeW5jX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jCmluZGV4IDQ0ZmUyY2IuLjRkZjgyMmMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCisrKyBiL2ZzL3VkZi9zdXBlci5jCkBAIC00MCw3ICs0MCw2IEBACiAKICNpbmNsdWRlICJ1ZGZkZWNsLmgiICAgIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N5bWxpbmsuYyBiL2ZzL3VkZi9zeW1saW5rLmMKaW5kZXggNjc0YmI0MC4uYmEwNjhhNyAxMDA2NDQKLS0tIGEvZnMvdWRmL3N5bWxpbmsuYworKysgYi9mcy91ZGYvc3ltbGluay5jCkBAIC0xMTMsNiArMTEzLDYgQEAKIC8qCiAgKiBzeW1saW5rcyBjYW4ndCBkbyBtdWNoLi4uCiAgKi8KLXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWRmX3N5bWxpbmtfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWRmX3N5bWxpbmtfYW9wcyA9IHsKIAkucmVhZHBhZ2UJCT0gdWRmX3N5bWxpbmtfZmlsbGVyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oCmluZGV4IDAyM2UxOWIuLjEwMzNiN2MgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZkZWNsLmgKKysrIGIvZnMvdWRmL3VkZmRlY2wuaApAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlICJvc3RhX3VkZi5oIgogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VkZl9mc19pLmg+CiAjaW5jbHVkZSA8bGludXgvdWRmX2ZzX3NiLmg+CkBAIC00Nyw5ICs0Niw5IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWRmX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZGZfYW9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVkZl9hZGluaWNiX2FvcHM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZGZfc3ltbGlua19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWRmX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZGZfYWRpbmljYl9hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWRmX3N5bWxpbmtfYW9wczsKIAogc3RydWN0IHVkZl9maWxlaWRlbnRfYmgKIHsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9iYWxsb2MuYyBiL2ZzL3Vmcy9iYWxsb2MuYwppbmRleCA5NWI4NzhlLi5iMDE4MDRiIDEwMDY0NAotLS0gYS9mcy91ZnMvYmFsbG9jLmMKKysrIGIvZnMvdWZzL2JhbGxvYy5jCkBAIC0yMTcsNDggKzIxNyw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnVmc19nZXRfbG9ja2VkX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICB1bnNpZ25lZCBsb25nIGluZGV4KQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi10cnlfYWdhaW46Ci0JcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGluZGV4KTsKLQlpZiAoIXBhZ2UpIHsKLQkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCwKLQkJCQkgICAgICAgKGZpbGxlcl90KiltYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UsCi0JCQkJICAgICAgIE5VTEwpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVmc19jaGFuZ2VfYmxvY2tucjogIgotCQkJICAgICAgICJyZWFkX2NhY2hlX3BhZ2UgZXJyb3I6IGlubyAlbHUsIGluZGV4OiAlbHVcbiIsCi0JCQkgICAgICAgbWFwcGluZy0+aG9zdC0+aV9pbm8sIGluZGV4KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbG9ja19wYWdlKHBhZ2UpOwotCi0JCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpIHx8IFBhZ2VFcnJvcihwYWdlKSkgewotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0KLQkJCXByaW50ayhLRVJOX0VSUiAidWZzX2NoYW5nZV9ibG9ja25yOiAiCi0JCQkgICAgICAgImNhbiBub3QgcmVhZCBwYWdlOiBpbm8gJWx1LCBpbmRleDogJWx1XG4iLAotCQkJICAgICAgIG1hcHBpbmctPmhvc3QtPmlfaW5vLCBpbmRleCk7Ci0KLQkJCXBhZ2UgPSBFUlJfUFRSKC1FSU8pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAodW5saWtlbHkoIXBhZ2UtPm1hcHBpbmcgfHwgIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpKSB7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCWdvdG8gdHJ5X2FnYWluOy8qd2UgcmVhbGx5IG5lZWQgdGhlc2UgYnVmZmVycyovCi0JfQotb3V0OgotCXJldHVybiBwYWdlOwotfQotCiAvKgogICogTW9kaWZ5IGlub2RlIHBhZ2UgY2FjaGUgaW4gc3VjaCB3YXk6CiAgKiBoYXZlIC0gYmxvY2tzIHdpdGggYl9ibG9ja25yIGVxdWFsIHRvIG9sZGIuLi5vbGRiK2NvdW50LTEKQEAgLTMxMSwxMCArMjY5LDggQEAKIAogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAotCQlpZiAobGlrZWx5KGN1cl9pbmRleCAhPSBpbmRleCkpIHsKLQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQl9CisJCWlmIChsaWtlbHkoY3VyX2luZGV4ICE9IGluZGV4KSkKKwkJCXVmc19wdXRfbG9ja2VkX3BhZ2UocGFnZSk7CiAgCX0KIAlVRlNEKCJFWElUXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Vmcy9maWxlLmMgYi9mcy91ZnMvZmlsZS5jCmluZGV4IDBlNTAwMTUuLmE5YzZlNWYgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9maWxlLmMKKysrIGIvZnMvdWZzL2ZpbGUuYwpAQCAtNjAsNyArNjAsMyBAQAogCS5mc3luYwkJPSB1ZnNfc3luY19maWxlLAogCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKIH07Ci0KLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLnRydW5jYXRlCT0gdWZzX3RydW5jYXRlLAotfTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pbm9kZS5jIGIvZnMvdWZzL2lub2RlLmMKaW5kZXggMjU5YmQxOS4uZTdjODYxNSAxMDA2NDQKLS0tIGEvZnMvdWZzL2lub2RlLmMKKysrIGIvZnMvdWZzL2lub2RlLmMKQEAgLTk4LDcgKzk4LDkgQEAKIAl1NjQgdGVtcCA9IDBMOwogCiAJVUZTRCgiOiBmcmFnID0gJWxsdSAgZGVwdGggPSAlZFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylmcmFnLCBkZXB0aCk7Ci0JVUZTRCgiOiB1c3BpLT5zX2ZwYnNoaWZ0ID0gJWQgLHVzcGktPnNfYXBibWFzayA9ICV4LCBtYXNrPSVsbHhcbiIsdXNwaS0+c19mcGJzaGlmdCx1c3BpLT5zX2FwYm1hc2ssbWFzayk7CisJVUZTRCgiOiB1c3BpLT5zX2ZwYnNoaWZ0ID0gJWQgLHVzcGktPnNfYXBibWFzayA9ICV4LCBtYXNrPSVsbHhcbiIsCisJCXVzcGktPnNfZnBic2hpZnQsIHVzcGktPnNfYXBibWFzaywKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyltYXNrKTsKIAogCWlmIChkZXB0aCA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTQyOSw3ICs0MzEsNyBAQAogCQogCWlmICghY3JlYXRlKSB7CiAJCXBoeXM2NCA9IHVmc19mcmFnX21hcChpbm9kZSwgZnJhZ21lbnQpOwotCQlVRlNEKCJwaHlzNjQgPSAlbGx1IFxuIixwaHlzNjQpOworCQlVRlNEKCJwaHlzNjQgPSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXBoeXM2NCk7CiAJCWlmIChwaHlzNjQpCiAJCQltYXBfYmgoYmhfcmVzdWx0LCBzYiwgcGh5czY0KTsKIAkJcmV0dXJuIDA7CkBAIC01NzQsNyArNTc2LDcgQEAKIHsKIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsYmxvY2ssdWZzX2dldGZyYWdfYmxvY2spOwogfQotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZnNfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlID0gdWZzX3JlYWRwYWdlLAogCS53cml0ZXBhZ2UgPSB1ZnNfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UgPSBibG9ja19zeW5jX3BhZ2UsCkBAIC04NDEsMTQgKzg0MywxNyBAQAogCiB2b2lkIHVmc19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogeworCWxvZmZfdCBvbGRfaV9zaXplOworCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwogCS8qVUZTX0koaW5vZGUpLT5pX2R0aW1lID0gQ1VSUkVOVF9USU1FOyovCiAJbG9ja19rZXJuZWwoKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAl1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7CisJb2xkX2lfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JaWYgKGlub2RlLT5pX2Jsb2NrcykKLQkJdWZzX3RydW5jYXRlIChpbm9kZSk7CisJaWYgKGlub2RlLT5pX2Jsb2NrcyAmJiB1ZnNfdHJ1bmNhdGUoaW5vZGUsIG9sZF9pX3NpemUpKQorCQl1ZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgX19GVU5DVElPTl9fLCAidWZzX3RydW5jYXRlIGZhaWxlZFxuIik7CiAJdWZzX2ZyZWVfaW5vZGUgKGlub2RlKTsKIAl1bmxvY2tfa2VybmVsKCk7CiB9CmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IDc0ZWY1ZTkuLjk5MmVlMGIgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC02NCw3ICs2NCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKQEAgLTEzMjcsNyArMTMyNiw3IEBACiAJc2l6ZV90IHRvd3JpdGUgPSBsZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOwogCXdoaWxlICh0b3dyaXRlID4gMCkgewogCQl0b2NvcHkgPSBzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgPCB0b3dyaXRlID8KIAkJCQlzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgOiB0b3dyaXRlOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3RydW5jYXRlLmMgYi9mcy91ZnMvdHJ1bmNhdGUuYwppbmRleCAzYzNiMzAxLi5jOWI1NTg3IDEwMDY0NAotLS0gYS9mcy91ZnMvdHJ1bmNhdGUuYworKysgYi9mcy91ZnMvdHJ1bmNhdGUuYwpAQCAtMzY5LDI0ICszNjksOTcgQEAKIAlVRlNEKCJFWElUXG4iKTsKIAlyZXR1cm4gcmV0cnk7CiB9Ci0JCQotdm9pZCB1ZnNfdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQorCitzdGF0aWMgaW50IHVmc19hbGxvY19sYXN0YmxvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKnVzcGkgPSBVRlNfU0IoaW5vZGUtPmlfc2IpLT5zX3VzcGk7CisJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOworCXVuc2lnbmVkIGxhc3RmcmFnLCBpLCBlbmQ7CisJc3RydWN0IHBhZ2UgKmxhc3RwYWdlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwlsYXN0ZnJhZyA9IChpX3NpemVfcmVhZChpbm9kZSkgKyB1c3BpLT5zX2ZzaXplIC0gMSkgPj4gdXNwaS0+c19mc2hpZnQ7CisKKwlpZiAoIWxhc3RmcmFnKSB7CisJCXVmc2ktPmlfbGFzdGZyYWcgPSAwOworCQlnb3RvIG91dDsKKwl9CisJbGFzdGZyYWctLTsKKworCWxhc3RwYWdlID0gdWZzX2dldF9sb2NrZWRfcGFnZShtYXBwaW5nLCBsYXN0ZnJhZyA+PgorCQkJCSAgICAgICAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpKTsKKyAgICAgICBpZiAoSVNfRVJSKGxhc3RwYWdlKSkgeworICAgICAgICAgICAgICAgZXJyID0gLUVJTzsKKyAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgIH0KKworICAgICAgIGVuZCA9IGxhc3RmcmFnICYgKCgxIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cykpIC0gMSk7CisgICAgICAgYmggPSBwYWdlX2J1ZmZlcnMobGFzdHBhZ2UpOworICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgICAgIGJoID0gYmgtPmJfdGhpc19wYWdlOworCisgICAgICAgaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkgeworICAgICAgICAgICAgICAgZXJyID0gdWZzX2dldGZyYWdfYmxvY2soaW5vZGUsIGxhc3RmcmFnLCBiaCwgMSk7CisKKyAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShlcnIpKQorICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7CisKKyAgICAgICAgICAgICAgIGlmIChidWZmZXJfbmV3KGJoKSkgeworICAgICAgICAgICAgICAgICAgICAgICBjbGVhcl9idWZmZXJfbmV3KGJoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShiaC0+Yl9iZGV2LAorCQkJCQkJIGJoLT5iX2Jsb2NrbnIpOworCQkgICAgICAgLyoKKwkJCSogd2UgZG8gbm90IHplcm9pemUgZnJhZ21lbnQsIGJlY2F1c2Ugb2YKKwkJCSogaWYgaXQgbWFwZWQgdG8gaG9sZSwgaXQgYWxyZWFkeSBjb250YWlucyB6ZXJvZXMKKwkJCSovCisgICAgICAgICAgICAgICAgICAgICAgIHNldF9idWZmZXJfdXB0b2RhdGUoYmgpOworICAgICAgICAgICAgICAgICAgICAgICBtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisgICAgICAgICAgICAgICAgICAgICAgIHNldF9wYWdlX2RpcnR5KGxhc3RwYWdlKTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICB9CitvdXRfdW5sb2NrOgorICAgICAgIHVmc19wdXRfbG9ja2VkX3BhZ2UobGFzdHBhZ2UpOworb3V0OgorICAgICAgIHJldHVybiBlcnI7Cit9CisKK2ludCB1ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9sZF9pX3NpemUpCiB7CiAJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOwotCXN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTsKLQlpbnQgcmV0cnk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICp1c3BpID0gVUZTX1NCKHNiKS0+c191c3BpOworCWludCByZXRyeSwgZXJyID0gMDsKIAkKIAlVRlNEKCJFTlRFUlxuIik7Ci0Jc2IgPSBpbm9kZS0+aV9zYjsKLQl1c3BpID0gVUZTX1NCKHNiKS0+c191c3BpOwogCi0JaWYgKCEoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpKQotCQlyZXR1cm47CisJaWYgKCEoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8CisJICAgICAgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCisJCXJldHVybiAtRUlOVkFMOwogCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FUEVSTTsKIAotCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywJaW5vZGUtPmlfc2l6ZSwgdWZzX2dldGZyYWdfYmxvY2spOworCWlmIChpbm9kZS0+aV9zaXplID4gb2xkX2lfc2l6ZSkgeworCQkvKgorCQkgKiBpZiB3ZSBleHBhbmQgZmlsZSB3ZSBzaG91bGQgY2FyZSBhYm91dAorCQkgKiBhbGxvY2F0aW9uIG9mIGJsb2NrIGZvciBsYXN0IGJ5dGUgZmlyc3Qgb2YgYWxsCisJCSAqLworCQllcnIgPSB1ZnNfYWxsb2NfbGFzdGJsb2NrKGlub2RlKTsKKworCQlpZiAoZXJyKSB7CisJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9pX3NpemUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyoKKwkJICogZ28gYXdheSwgYmVjYXVzZSBvZiB3ZSBleHBhbmQgZmlsZSwgYW5kIHdlIGRvIG5vdAorCQkgKiBuZWVkIGZyZWUgYmxvY2tzLCBhbmQgemVyb2l6ZXMgcGFnZQorCQkgKi8KKwkJbG9ja19rZXJuZWwoKTsKKwkJZ290byBhbG1vc3RfZW5kOworCX0KKworCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSwgdWZzX2dldGZyYWdfYmxvY2spOwogCiAJbG9ja19rZXJuZWwoKTsKIAl3aGlsZSAoMSkgewpAQCAtNDA0LDkgKzQ3Nyw1OCBAQAogCQl5aWVsZCgpOwogCX0KIAorCWlmIChpbm9kZS0+aV9zaXplIDwgb2xkX2lfc2l6ZSkgeworCQkvKgorCQkgKiBub3cgd2Ugc2hvdWxkIGhhdmUgZW5vdWdoIHNwYWNlCisJCSAqIHRvIGFsbG9jYXRlIGJsb2NrIGZvciBsYXN0IGJ5dGUKKwkJICovCisJCWVyciA9IHVmc19hbGxvY19sYXN0YmxvY2soaW5vZGUpOworCQlpZiAoZXJyKQorCQkJLyoKKwkJCSAqIGxvb2tzIGxpa2UgYWxsIHRoZSBzYW1lIC0gd2UgaGF2ZSBubyBzcGFjZSwKKwkJCSAqIGJ1dCB3ZSB0cnVuY2F0ZSBmaWxlIGFscmVhZHkKKwkJCSAqLworCQkJaW5vZGUtPmlfc2l6ZSA9ICh1ZnNpLT5pX2xhc3RmcmFnIC0gMSkgKiB1c3BpLT5zX2ZzaXplOworCX0KK2FsbW9zdF9lbmQ6CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JdWZzaS0+aV9sYXN0ZnJhZyA9IERJUkVDVF9GUkFHTUVOVDsKIAl1bmxvY2tfa2VybmVsKCk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JVUZTRCgiRVhJVFxuIik7CitvdXQ6CisJVUZTRCgiRVhJVDogZXJyICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7CiB9CisKKworLyoKKyAqIFdlIGRvbid0IGRlZmluZSBvdXIgYGlub2RlLT5pX29wLT50cnVuY2F0ZScsIGFuZCBjYWxsIGl0IGhlcmUsCisgKiBiZWNhdXNlIG9mOgorICogLSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyBvbGQgc2l6ZQorICogLSB0aGVyZSBpcyBubyB3YXkgaW5mb3JtIHVzZXIgYWJvdXQgZXJyb3IsIGlmIGl0IGhhcHBlbnMgaW4gYHRydW5jYXRlJworICovCitzdGF0aWMgaW50IHVmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci0+aWFfdmFsaWQ7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGlhX3ZhbGlkICYgQVRUUl9TSVpFICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWxvZmZfdCBvbGRfaV9zaXplID0gaW5vZGUtPmlfc2l6ZTsKKwkJZXJyb3IgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQllcnJvciA9IHVmc190cnVuY2F0ZShpbm9kZSwgb2xkX2lfc2l6ZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisJcmV0dXJuIGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworfQorCitzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0geworCS5zZXRhdHRyID0gdWZzX3NldGF0dHIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3V0aWwuYyBiL2ZzL3Vmcy91dGlsLmMKaW5kZXggYTJmMTNmNC4uMzM3Y2YyYyAxMDA2NDQKLS0tIGEvZnMvdWZzL3V0aWwuYworKysgYi9mcy91ZnMvdXRpbC5jCkBAIC0yMzMsMyArMjMzLDU3IEBACiAJZWxzZQogCQl1ZnNpLT5pX3UxLmlfZGF0YVswXSA9IGZzMzI7CiB9CisKKy8qKgorICogdWZzX2dldF9sb2NrZWRfcGFnZSgpIC0gbG9jYXRlLCBwaW4gYW5kIGxvY2sgYSBwYWdlY2FjaGUgcGFnZSwgaWYgbm90IGV4aXN0CisgKiByZWFkIGl0IGZyb20gZGlzay4KKyAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2gKKyAqIEBpbmRleDogdGhlIHBhZ2UgaW5kZXgKKyAqCisgKiBMb2NhdGVzIHRoZSBkZXNpcmVkIHBhZ2VjYWNoZSBwYWdlLCBpZiBub3QgZXhpc3Qgd2UnbGwgcmVhZCBpdCwKKyAqIGxvY2tzIGl0LCBpbmNyZW1lbnRzIGl0cyByZWZlcmVuY2UKKyAqIGNvdW50IGFuZCByZXR1cm5zIGl0cyBhZGRyZXNzLgorICoKKyAqLworCitzdHJ1Y3QgcGFnZSAqdWZzX2dldF9sb2NrZWRfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkgcGdvZmZfdCBpbmRleCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwordHJ5X2FnYWluOgorCXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpbmRleCk7CisJaWYgKCFwYWdlKSB7CisJCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgsCisJCQkJICAgICAgIChmaWxsZXJfdCopbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlLAorCQkJCSAgICAgICBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1ZnNfY2hhbmdlX2Jsb2NrbnI6ICIKKwkJCSAgICAgICAicmVhZF9jYWNoZV9wYWdlIGVycm9yOiBpbm8gJWx1LCBpbmRleDogJWx1XG4iLAorCQkJICAgICAgIG1hcHBpbmctPmhvc3QtPmlfaW5vLCBpbmRleCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWxvY2tfcGFnZShwYWdlKTsKKworCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSB8fCBQYWdlRXJyb3IocGFnZSkpIHsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJCQlwcmludGsoS0VSTl9FUlIgInVmc19jaGFuZ2VfYmxvY2tucjogIgorCQkJICAgICAgICJjYW4gbm90IHJlYWQgcGFnZTogaW5vICVsdSwgaW5kZXg6ICVsdVxuIiwKKwkJCSAgICAgICBtYXBwaW5nLT5ob3N0LT5pX2lubywgaW5kZXgpOworCisJCQlwYWdlID0gRVJSX1BUUigtRUlPKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHVubGlrZWx5KCFwYWdlLT5tYXBwaW5nIHx8ICFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSkgeworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlnb3RvIHRyeV9hZ2FpbjsvKndlIHJlYWxseSBuZWVkIHRoZXNlIGJ1ZmZlcnMqLworCX0KK291dDoKKwlyZXR1cm4gcGFnZTsKK30KZGlmZiAtLWdpdCBhL2ZzL3Vmcy91dGlsLmggYi9mcy91ZnMvdXRpbC5oCmluZGV4IDQwNjk4MWYuLjI4ZmNlNmMgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91dGlsLmgKKysrIGIvZnMvdWZzL3V0aWwuaApAQCAtMjUxLDYgKzI1MSwxNCBAQAogI2RlZmluZSB1YmhfbWVtY3B5dWJoKHViaCxtZW0sc2l6ZSkgX3ViaF9tZW1jcHl1YmhfKHVzcGksdWJoLG1lbSxzaXplKQogZXh0ZXJuIHZvaWQgX3ViaF9tZW1jcHl1YmhfKHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICosIHN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCk7CiAKKy8qIFRoaXMgZnVuY3Rpb25zIHdvcmtzIHdpdGggY2FjaGUgcGFnZXMqLworZXh0ZXJuIHN0cnVjdCBwYWdlICp1ZnNfZ2V0X2xvY2tlZF9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQlwZ29mZl90IGluZGV4KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZnNfcHV0X2xvY2tlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworICAgICAgIHVubG9ja19wYWdlKHBhZ2UpOworICAgICAgIHBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDNlODA3YjguLmM0MGY4MWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTE0NTQsNyArMTQ1NCw3IEBACiAJYmxvY2tfaW52YWxpZGF0ZXBhZ2UocGFnZSwgb2Zmc2V0KTsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0gewogCS5yZWFkcGFnZQkJPSB4ZnNfdm1fcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcwkJPSB4ZnNfdm1fcmVhZHBhZ2VzLAogCS53cml0ZXBhZ2UJCT0geGZzX3ZtX3dyaXRlcGFnZSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaAppbmRleCA3MDZkOGM3Li4yMjQ0ZTUxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oCkBAIC00MCw3ICs0MCw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0CWlvX3dvcms7CS8qIHhmc2RhdGFkIHdvcmsgcXVldWUgKi8KIH0geGZzX2lvZW5kX3Q7CiAKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zOwogZXh0ZXJuIGludCB4ZnNfZ2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogCiAjZW5kaWYgLyogX19YRlNfQU9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKaW5kZXggMjZmZWQwNy4uMmFmNTI4ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTE1MjAsNyArMTUyMCw3IEBACiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JKmJkaTsKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZzsKLQlzdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtYXBwaW5nX2FvcHMgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbWFwcGluZ19hb3BzID0gewogCQkuc3luY19wYWdlID0gYmxvY2tfc3luY19wYWdlLAogCQkubWlncmF0ZXBhZ2UgPSBmYWlsX21pZ3JhdGVfcGFnZSwKIAl9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCA0ZGQ2NTkyLi5jZWRhM2EyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX1hGU19CVUZfSF9fCiAjZGVmaW5lIF9fWEZTX0JVRl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKaW5kZXggNjAxZjAxYy4uMjcwZGIwZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwpAQCAtMTUsNyArMTUsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCAwMjhlYjE3Li44YzAyMWRjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgX19YRlNfTElOVVhfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFNvbWUgdHlwZXMgYXJlIGNvbmRpdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKaW5kZXggYjliZWNlYi4uYjQ5Mjg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAogLyogQ3VycmVudCBBQ1BJQ0Egc3Vic3lzdGVtIHZlcnNpb24gaW4gWVlZWU1NREQgZm9ybWF0ICovCiAKLSNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDYwNjA4CisjZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDA2MDYyMwogCiAvKgogICogT1MgbmFtZSwgdXNlZCBmb3IgdGhlIF9PUyBvYmplY3QuICBUaGUgX09TIG9iamVjdCBpcyBlc3NlbnRpYWxseSBvYnNvbGV0ZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2Rpc3BhdC5oIGIvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKaW5kZXggMjg4Zjg0OS4uYTIyZmU5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmgKQEAgLTIwMSw3ICsyMDEsNyBAQAogYWNwaV9zdGF0dXMKIGFjcGlfZHNfYmVnaW5fbWV0aG9kX2V4ZWN1dGlvbihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbWV0aG9kX25vZGUsCiAJCQkgICAgICAgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MsCi0JCQkgICAgICAgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmNhbGxpbmdfbWV0aG9kX25vZGUpOworCQkJICAgICAgIHN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGUpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9kc19tZXRob2RfZXJyb3IoYWNwaV9zdGF0dXMgc3RhdHVzLCBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oIGIvaW5jbHVkZS9hY3BpL2FjZ2xvYmFsLmgKaW5kZXggMTQ1MzFkNC4uMDY5NzJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZ2xvYmFsLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZ2xvYmFsLmgKQEAgLTE4MSw2ICsxODEsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgYWNwaV90YWJsZV9saXN0IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW0FDUElfVEFCTEVfSURfTUFYICsgMV07CiBleHRlcm4gc3RydWN0IGFjcGlfdGFibGVfc3VwcG9ydCBhY3BpX2dibF90YWJsZV9kYXRhW0FDUElfVEFCTEVfSURfTUFYICsgMV07CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE11dHVhbCBleGx1c2lvbiB3aXRoaW4gQUNQSUNBIHN1YnN5c3RlbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgogICogUHJlZGVmaW5lZCBtdXRleCBvYmplY3RzLiAgVGhpcyBhcnJheSBjb250YWlucyB0aGUKICAqIGFjdHVhbCBPUyBtdXRleCBoYW5kbGVzLCBpbmRleGVkIGJ5IHRoZSBsb2NhbCBBQ1BJX01VVEVYX0hBTkRMRXMuCkBAIC0xODgsNiArMTk0LDIwIEBACiAgKi8KIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX211dGV4X2luZm8gYWNwaV9nYmxfbXV0ZXhfaW5mb1tBQ1BJX05VTV9NVVRFWF07CiAKKy8qCisgKiBHbG9iYWwgbG9jayBzZW1hcGhvcmUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYWN0dWFsIEhXIGdsb2JhbCBsb2NrCisgKi8KK0FDUElfRVhURVJOIGFjcGlfc2VtYXBob3JlIGFjcGlfZ2JsX2dsb2JhbF9sb2NrX3NlbWFwaG9yZTsKKworLyoKKyAqIFNwaW5sb2NrcyBhcmUgdXNlZCBmb3IgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSBwb3NzaWJseSBjYWxsZWQgYXQKKyAqIGludGVycnVwdCBsZXZlbAorICovCitBQ1BJX0VYVEVSTiBzcGlubG9ja190IF9hY3BpX2dibF9ncGVfbG9jazsJLyogRm9yIEdQRSBkYXRhIHN0cnVjdHMgYW5kIHJlZ2lzdGVycyAqLworQUNQSV9FWFRFUk4gc3BpbmxvY2tfdCBfYWNwaV9nYmxfaGFyZHdhcmVfbG9jazsJLyogRm9yIEFDUEkgSC9XIGV4Y2VwdCBHUEUgcmVnaXN0ZXJzICovCisjZGVmaW5lIGFjcGlfZ2JsX2dwZV9sb2NrCSZfYWNwaV9nYmxfZ3BlX2xvY2sKKyNkZWZpbmUgYWNwaV9nYmxfaGFyZHdhcmVfbG9jawkmX2FjcGlfZ2JsX2hhcmR3YXJlX2xvY2sKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTWlzY2VsbGFuZW91cyBnbG9iYWxzCkBAIC0yMTcsNyArMjM3LDYgQEAKIEFDUElfRVhURVJOIGFjcGlfZXhjZXB0aW9uX2hhbmRsZXIgYWNwaV9nYmxfZXhjZXB0aW9uX2hhbmRsZXI7CiBBQ1BJX0VYVEVSTiBhY3BpX2luaXRfaGFuZGxlciBhY3BpX2dibF9pbml0X2hhbmRsZXI7CiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICphY3BpX2dibF9icmVha3BvaW50X3dhbGs7Ci1BQ1BJX0VYVEVSTiBhY3BpX2hhbmRsZSBhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmU7CiAKIC8qIE1pc2MgKi8KIApAQCAtMzE1LDExICszMzQsNiBAQAogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8KICAgICAqYWNwaV9nYmxfZ3BlX2ZhZHRfYmxvY2tzW0FDUElfTUFYX0dQRV9CTE9DS1NdOwogCi0vKiBTcGlubG9ja3MgKi8KLQotQUNQSV9FWFRFUk4gYWNwaV9oYW5kbGUgYWNwaV9nYmxfZ3BlX2xvY2s7Ci1BQ1BJX0VYVEVSTiBhY3BpX2hhbmRsZSBhY3BpX2dibF9oYXJkd2FyZV9sb2NrOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBEZWJ1Z2dlciBnbG9iYWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNpbnRlcnAuaCBiL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCmluZGV4IDlmMjJjZmMuLjIxNjMzOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCkBAIC0yODcsNyArMjg3LDEwIEBACiAKIGFjcGlfc3RhdHVzIGFjcGlfZXhfc3lzdGVtX3Jlc2V0X2V2ZW50KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9leF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUoYWNwaV9oYW5kbGUgc2VtYXBob3JlLCB1MTYgdGltZW91dCk7CithY3BpX3N0YXR1cworYWNwaV9leF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUoYWNwaV9zZW1hcGhvcmUgc2VtYXBob3JlLCB1MTYgdGltZW91dCk7CisKK2FjcGlfc3RhdHVzIGFjcGlfZXhfc3lzdGVtX3dhaXRfbXV0ZXgoYWNwaV9tdXRleCBtdXRleCwgdTE2IHRpbWVvdXQpOwogCiAvKgogICogZXhvcGFyZzEgLSBBQ1BJIEFNTCBleGVjdXRpb24sIDEgb3BlcmFuZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2xvY2FsLmgKaW5kZXggMWVlY2E3YS4uNTZiODAyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCkBAIC00NywxMCArNDcsMTEgQEAKIC8qIGFjcGlzcmM6c3RydWN0X2RlZnMgLS0gZm9yIGFjcGlzcmMgY29udmVyc2lvbiAqLwogCiAjZGVmaW5lIEFDUElfV0FJVF9GT1JFVkVSICAgICAgICAgICAgICAgMHhGRkZGCS8qIHUxNiwgYXMgcGVyIEFDUEkgc3BlYyAqLwotI2RlZmluZSBBQ1BJX0lORklOSVRFX0NPTkNVUlJFTkNZICAgICAgIDB4RkYKKyNkZWZpbmUgQUNQSV9ET19OT1RfV0FJVCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFDUElfU0VSSUFMSVpFRCAgICAgICAgICAgICAgICAgMHhGRgogCi10eXBlZGVmIHZvaWQgKmFjcGlfbXV0ZXg7CiB0eXBlZGVmIHUzMiBhY3BpX211dGV4X2hhbmRsZTsKKyNkZWZpbmUgQUNQSV9HTE9CQUxfTE9DSyAgICAgICAgICAgICAgICAoYWNwaV9zZW1hcGhvcmUpICgtMSkKIAogLyogVG90YWwgbnVtYmVyIG9mIGFtbCBvcGNvZGVzIGRlZmluZWQgKi8KIApAQCAtNzksMTYgKzgwLDE1IEBACiAgKiB0YWJsZSBiZWxvdyBhbHNvIQogICovCiAjZGVmaW5lIEFDUElfTVRYX0lOVEVSUFJFVEVSICAgICAgICAgICAgMAkvKiBBTUwgSW50ZXJwcmV0ZXIsIG1haW4gbG9jayAqLwotI2RlZmluZSBBQ1BJX01UWF9DT05UUk9MX01FVEhPRCAgICAgICAgIDEJLyogQ29udHJvbCBtZXRob2QgdGVybWluYXRpb24gW1RCRDogbWF5IG5vIGxvbmdlciBiZSBuZWNlc3NhcnldICovCi0jZGVmaW5lIEFDUElfTVRYX1RBQkxFUyAgICAgICAgICAgICAgICAgMgkvKiBEYXRhIGZvciBBQ1BJIHRhYmxlcyAqLwotI2RlZmluZSBBQ1BJX01UWF9OQU1FU1BBQ0UgICAgICAgICAgICAgIDMJLyogQUNQSSBOYW1lc3BhY2UgKi8KLSNkZWZpbmUgQUNQSV9NVFhfRVZFTlRTICAgICAgICAgICAgICAgICA0CS8qIERhdGEgZm9yIEFDUEkgZXZlbnRzICovCi0jZGVmaW5lIEFDUElfTVRYX0NBQ0hFUyAgICAgICAgICAgICAgICAgNQkvKiBJbnRlcm5hbCBjYWNoZXMsIGdlbmVyYWwgcHVycG9zZXMgKi8KLSNkZWZpbmUgQUNQSV9NVFhfTUVNT1JZICAgICAgICAgICAgICAgICA2CS8qIERlYnVnIG1lbW9yeSB0cmFja2luZyBsaXN0cyAqLwotI2RlZmluZSBBQ1BJX01UWF9ERUJVR19DTURfQ09NUExFVEUgICAgIDcJLyogQU1MIGRlYnVnZ2VyICovCi0jZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9SRUFEWSAgICAgICAgOAkvKiBBTUwgZGVidWdnZXIgKi8KKyNkZWZpbmUgQUNQSV9NVFhfVEFCTEVTICAgICAgICAgICAgICAgICAxCS8qIERhdGEgZm9yIEFDUEkgdGFibGVzICovCisjZGVmaW5lIEFDUElfTVRYX05BTUVTUEFDRSAgICAgICAgICAgICAgMgkvKiBBQ1BJIE5hbWVzcGFjZSAqLworI2RlZmluZSBBQ1BJX01UWF9FVkVOVFMgICAgICAgICAgICAgICAgIDMJLyogRGF0YSBmb3IgQUNQSSBldmVudHMgKi8KKyNkZWZpbmUgQUNQSV9NVFhfQ0FDSEVTICAgICAgICAgICAgICAgICA0CS8qIEludGVybmFsIGNhY2hlcywgZ2VuZXJhbCBwdXJwb3NlcyAqLworI2RlZmluZSBBQ1BJX01UWF9NRU1PUlkgICAgICAgICAgICAgICAgIDUJLyogRGVidWcgbWVtb3J5IHRyYWNraW5nIGxpc3RzICovCisjZGVmaW5lIEFDUElfTVRYX0RFQlVHX0NNRF9DT01QTEVURSAgICAgNgkvKiBBTUwgZGVidWdnZXIgKi8KKyNkZWZpbmUgQUNQSV9NVFhfREVCVUdfQ01EX1JFQURZICAgICAgICA3CS8qIEFNTCBkZWJ1Z2dlciAqLwogCi0jZGVmaW5lIEFDUElfTUFYX01VVEVYICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBQ1BJX01BWF9NVVRFWCAgICAgICAgICAgICAgICAgIDcKICNkZWZpbmUgQUNQSV9OVU1fTVVURVggICAgICAgICAgICAgICAgICBBQ1BJX01BWF9NVVRFWCsxCiAKICNpZiBkZWZpbmVkKEFDUElfREVCVUdfT1VUUFVUKSB8fCBkZWZpbmVkKEFDUElfREVCVUdHRVIpCkBAIC05OCwxNCArOTgsMTMgQEAKIAogc3RhdGljIGNoYXIgKmFjcGlfZ2JsX211dGV4X25hbWVzW0FDUElfTlVNX01VVEVYXSA9IHsKIAkiQUNQSV9NVFhfSW50ZXJwcmV0ZXIiLAotCSJBQ1BJX01UWF9NZXRob2QiLAogCSJBQ1BJX01UWF9UYWJsZXMiLAogCSJBQ1BJX01UWF9OYW1lc3BhY2UiLAogCSJBQ1BJX01UWF9FdmVudHMiLAogCSJBQ1BJX01UWF9DYWNoZXMiLAogCSJBQ1BJX01UWF9NZW1vcnkiLAotCSJBQ1BJX01UWF9EZWJ1Z0NtZENvbXBsZXRlIiwKLQkiQUNQSV9NVFhfRGVidWdDbWRSZWFkeSIKKwkiQUNQSV9NVFhfQ29tbWFuZENvbXBsZXRlIiwKKwkiQUNQSV9NVFhfQ29tbWFuZFJlYWR5IgogfTsKIAogI2VuZGlmCkBAIC03MDUsNiArNzA0LDEzIEBACiB9OwogCiAvKgorICogU29tZSBBQ1BJIHJlZ2lzdGVycyBoYXZlIGJpdHMgdGhhdCBtdXN0IGJlIGlnbm9yZWQgLS0gbWVhbmluZyB0aGF0IHRoZXkKKyAqIG11c3QgYmUgcHJlc2VydmVkLgorICovCisjZGVmaW5lIEFDUElfUE0xX1NUQVRVU19QUkVTRVJWRURfQklUUyAgICAgICAgICAweDA4MDAJLyogQml0IDExICovCisjZGVmaW5lIEFDUElfUE0xX0NPTlRST0xfUFJFU0VSVkVEX0JJVFMgICAgICAgICAweDAyMDEJLyogQml0IDksIEJpdCAwIChTQ0lfRU4pICovCisKKy8qCiAgKiBSZWdpc3RlciBJRHMKICAqIFRoZXNlIGFyZSB0aGUgZnVsbCBBQ1BJIHJlZ2lzdGVycwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNtYWNyb3MuaCBiL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCmluZGV4IDM4ZjlhYTQuLjRiYjM4MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oCkBAIC0zOTQsNiArMzk0LDggQEAKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QUkVQQVJFX0JJVFModmFsLCBwb3MsIG1hc2spICAgICAgKCh2YWwgPDwgcG9zKSAmIG1hc2spCiAjZGVmaW5lIEFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZywgcG9zLCBtYXNrLCB2YWwpICByZWcgPSAocmVnICYgKH4obWFzaykpKSB8IEFDUElfUkVHSVNURVJfUFJFUEFSRV9CSVRTKHZhbCwgcG9zLCBtYXNrKQogCisjZGVmaW5lIEFDUElfSU5TRVJUX0JJVFModGFyZ2V0LCBtYXNrLCBzb3VyY2UpICAgICAgICAgIHRhcmdldCA9ICgodGFyZ2V0ICYgKH4obWFzaykpKSB8IChzb3VyY2UgJiBtYXNrKSkKKwogLyogR2VuZXJhdGUgYSBVVUlEICovCiAKICNkZWZpbmUgQUNQSV9JTklUX1VVSUQoYSxiLGMsZDAsZDEsZDIsZDMsZDQsZDUsZDYsZDcpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKaW5kZXggMTc0N2Q5NC4uOGZkZWUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKQEAgLTE0MCwxNCArMTQwLDE0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0cnVjdCBhY3BpX29iamVjdF9ldmVudCB7Ci0JQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB2b2lkICpzZW1hcGhvcmU7CisJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiBhY3BpX3NlbWFwaG9yZSBvc19zZW1hcGhvcmU7CS8qIEFjdHVhbCBPUyBzeW5jaHJvbml6YXRpb24gb2JqZWN0ICovCiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfbXV0ZXggewogCUFDUElfT0JKRUNUX0NPTU1PTl9IRUFERVIgdTggc3luY19sZXZlbDsJLyogMC0xNSwgc3BlY2lmaWVkIGluIE11dGV4KCkgY2FsbCAqLwogCXUxNiBhY3F1aXNpdGlvbl9kZXB0aDsJLyogQWxsb3cgbXVsdGlwbGUgQWNxdWlyZXMsIHNhbWUgdGhyZWFkICovCiAJc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICpvd25lcl90aHJlYWQ7CS8qIEN1cnJlbnQgb3duZXIgb2YgdGhlIG11dGV4ICovCi0Jdm9pZCAqc2VtYXBob3JlOwkvKiBBY3R1YWwgT1Mgc3luY2hyb25pemF0aW9uIG9iamVjdCAqLworCWFjcGlfbXV0ZXggb3NfbXV0ZXg7CS8qIEFjdHVhbCBPUyBzeW5jaHJvbml6YXRpb24gb2JqZWN0ICovCiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcHJldjsJLyogTGluayBmb3IgbGlzdCBvZiBhY3F1aXJlZCBtdXRleGVzICovCiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV4dDsJLyogTGluayBmb3IgbGlzdCBvZiBhY3F1aXJlZCBtdXRleGVzICovCiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CS8qIENvbnRhaW5pbmcgbmFtZXNwYWNlIG5vZGUgKi8KQEAgLTE2Niw4ICsxNjYsOCBAQAogc3RydWN0IGFjcGlfb2JqZWN0X21ldGhvZCB7CiAJQUNQSV9PQkpFQ1RfQ09NTU9OX0hFQURFUiB1OCBtZXRob2RfZmxhZ3M7CiAJdTggcGFyYW1fY291bnQ7Ci0JdTggY29uY3VycmVuY3k7Ci0Jdm9pZCAqc2VtYXBob3JlOworCXU4IHN5bmNfbGV2ZWw7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbXV0ZXg7CiAJdTggKmFtbF9zdGFydDsKIAlBQ1BJX0lOVEVSTkFMX01FVEhPRCBpbXBsZW1lbnRhdGlvbjsKIAl1MzIgYW1sX2xlbmd0aDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKaW5kZXggYTJiM2UzOS4uZjMzOGU0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKQEAgLTMzNCw3ICszMzQsNyBAQAogCQkgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSk7CiBpbnQgYWNwaV9idXNfdHJpbShzdHJ1Y3QgYWNwaV9kZXZpY2UgKnN0YXJ0LCBpbnQgcm1kZXZpY2UpOwogaW50IGFjcGlfYnVzX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLQorYWNwaV9zdGF0dXMgYWNwaV9idXNfZ2V0X2VqZChhY3BpX2hhbmRsZSBoYW5kbGUsIGFjcGlfaGFuZGxlICplamQpOwogaW50IGFjcGlfbWF0Y2hfaWRzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBjaGFyICppZHMpOwogaW50IGFjcGlfY3JlYXRlX2RpcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKik7CiB2b2lkIGFjcGlfcmVtb3ZlX2RpcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKaW5kZXggYjQyNWY5Yi4uNmE1YmRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaApAQCAtMTEwLDQgKzExMCwyMSBAQAogCiBleHRlcm4gaW50IGFjcGlfc3BlY2lmaWNfaG90a2V5X2VuYWJsZWQ7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2NrIFN0YXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BQ1BJX0RPQ0spIHx8IGRlZmluZWQoQ09ORklHX0FDUElfRE9DS19NT0RVTEUpCitleHRlcm4gaW50IGlzX2RvY2tfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSk7CitleHRlcm4gaW50IHJlZ2lzdGVyX2RvY2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2RvY2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLAorCWFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlciwgdm9pZCAqY29udGV4dCk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKTsKKyNlbHNlCisjZGVmaW5lIGlzX2RvY2tfZGV2aWNlKGgpCQkJKDApCisjZGVmaW5lIHJlZ2lzdGVyX2RvY2tfbm90aWZpZXIobmIpIAkJKC1FTk9ERVYpCisjZGVmaW5lIHVucmVnaXN0ZXJfZG9ja19ub3RpZmllcihuYikgICAgICAgICAgIAlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShoMSwgaDIsIGMpCSgtRU5PREVWKQorI2RlZmluZSB1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoaCkgICAgICAgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKICNlbmRpZiAvKl9fQUNQSV9EUklWRVJTX0hfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IDhmNDczYzguLjg5YmM0YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCkBAIC05NiwyNSArOTYsNDcgQEAKIAkJICAgICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm5ld190YWJsZSk7CiAKIC8qCi0gKiBTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcworICogU3BpbmxvY2sgcHJpbWl0aXZlcworICovCithY3BpX3N0YXR1cyBhY3BpX29zX2NyZWF0ZV9sb2NrKGFjcGlfc3BpbmxvY2sgKiBvdXRfaGFuZGxlKTsKKwordm9pZCBhY3BpX29zX2RlbGV0ZV9sb2NrKGFjcGlfc3BpbmxvY2sgaGFuZGxlKTsKKworYWNwaV9jcHVfZmxhZ3MgYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9zcGlubG9jayBoYW5kbGUpOworCit2b2lkIGFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfc3BpbmxvY2sgaGFuZGxlLCBhY3BpX2NwdV9mbGFncyBmbGFncyk7CisKKy8qCisgKiBTZW1hcGhvcmUgcHJpbWl0aXZlcwogICovCiBhY3BpX3N0YXR1cwogYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlKHUzMiBtYXhfdW5pdHMsCi0JCQkgdTMyIGluaXRpYWxfdW5pdHMsIGFjcGlfaGFuZGxlICogb3V0X2hhbmRsZSk7CisJCQkgdTMyIGluaXRpYWxfdW5pdHMsIGFjcGlfc2VtYXBob3JlICogb3V0X2hhbmRsZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfb3NfZGVsZXRlX3NlbWFwaG9yZShhY3BpX2hhbmRsZSBoYW5kbGUpOworYWNwaV9zdGF0dXMgYWNwaV9vc19kZWxldGVfc2VtYXBob3JlKGFjcGlfc2VtYXBob3JlIGhhbmRsZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfb3Nfd2FpdF9zZW1hcGhvcmUoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgdW5pdHMsIHUxNiB0aW1lb3V0KTsKK2FjcGlfc3RhdHVzCithY3BpX29zX3dhaXRfc2VtYXBob3JlKGFjcGlfc2VtYXBob3JlIGhhbmRsZSwgdTMyIHVuaXRzLCB1MTYgdGltZW91dCk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiB1bml0cyk7CithY3BpX3N0YXR1cyBhY3BpX29zX3NpZ25hbF9zZW1hcGhvcmUoYWNwaV9zZW1hcGhvcmUgaGFuZGxlLCB1MzIgdW5pdHMpOwogCi1hY3BpX3N0YXR1cyBhY3BpX29zX2NyZWF0ZV9sb2NrKGFjcGlfaGFuZGxlICogb3V0X2hhbmRsZSk7CisvKgorICogTXV0ZXggcHJpbWl0aXZlcworICovCithY3BpX3N0YXR1cyBhY3BpX29zX2NyZWF0ZV9tdXRleChhY3BpX211dGV4ICogb3V0X2hhbmRsZSk7CiAKLXZvaWQgYWNwaV9vc19kZWxldGVfbG9jayhhY3BpX2hhbmRsZSBoYW5kbGUpOwordm9pZCBhY3BpX29zX2RlbGV0ZV9tdXRleChhY3BpX211dGV4IGhhbmRsZSk7CiAKLWFjcGlfY3B1X2ZsYWdzIGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfaGFuZGxlIGhhbmRsZSk7CithY3BpX3N0YXR1cyBhY3BpX29zX2FjcXVpcmVfbXV0ZXgoYWNwaV9tdXRleCBoYW5kbGUsIHUxNiB0aW1lb3V0KTsKIAotdm9pZCBhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2hhbmRsZSBoYW5kbGUsIGFjcGlfY3B1X2ZsYWdzIGZsYWdzKTsKK3ZvaWQgYWNwaV9vc19yZWxlYXNlX211dGV4KGFjcGlfbXV0ZXggaGFuZGxlKTsKKworLyogVGVtcG9yYXJ5IG1hY3JvcyBmb3IgTXV0ZXgqIGludGVyZmFjZXMsIG1hcCB0byBleGlzdGluZyBzZW1hcGhvcmUgeGZhY2VzICovCisKKyNkZWZpbmUgYWNwaV9vc19jcmVhdGVfbXV0ZXgob3V0X2hhbmRsZSkgICAgYWNwaV9vc19jcmVhdGVfc2VtYXBob3JlICgxLCAxLCBvdXRfaGFuZGxlKQorI2RlZmluZSBhY3BpX29zX2RlbGV0ZV9tdXRleChoYW5kbGUpICAgICAgICAodm9pZCkgYWNwaV9vc19kZWxldGVfc2VtYXBob3JlIChoYW5kbGUpCisjZGVmaW5lIGFjcGlfb3NfYWNxdWlyZV9tdXRleChoYW5kbGUsdGltZSkgIGFjcGlfb3Nfd2FpdF9zZW1hcGhvcmUgKGhhbmRsZSwgMSwgdGltZSkKKyNkZWZpbmUgYWNwaV9vc19yZWxlYXNlX211dGV4KGhhbmRsZSkgICAgICAgKHZvaWQpIGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZSAoaGFuZGxlLCAxKQogCiAvKgogICogTWVtb3J5IGFsbG9jYXRpb24gYW5kIG1hcHBpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmggYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCmluZGV4IDc3Y2YxMjMuLjY0YjYwM2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIE9TLSBvciBjb21waWxlci1kZXBlbmRlbnQgdHlwZXMKKyAqIE9TLWRlcGVuZGVudCBhbmQgY29tcGlsZXItZGVwZW5kZW50IHR5cGVzCiAgKgogICogSWYgdGhlIGRlZmF1bHRzIGJlbG93IGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSBob3N0IHN5c3RlbSwgdGhleSBjYW4KICAqIGJlIGRlZmluZWQgaW4gdGhlIGNvbXBpbGVyLXNwZWNpZmljIG9yIE9TLXNwZWNpZmljIGhlYWRlciwgYW5kIHRoaXMgd2lsbApAQCAtMjQ5LDI3ICsyNDksMzQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBVc2UgQzk5IHVpbnRwdHJfdCBmb3IgcG9pbnRlciBjYXN0aW5nIGlmIGF2YWlsYWJsZSwgInZvaWQgKiIgb3RoZXJ3aXNlICovCisvKiBWYWx1ZSByZXR1cm5lZCBieSBhY3BpX29zX2dldF90aHJlYWRfaWQgKi8KIAotI2lmbmRlZiBhY3BpX3VpbnRwdHJfdAotI2RlZmluZSBhY3BpX3VpbnRwdHJfdCAgICAgICAgICAgICAgICAgIHZvaWQgKgorI2lmbmRlZiBhY3BpX3RocmVhZF9pZAorI2RlZmluZSBhY3BpX3RocmVhZF9pZCAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX3VpbnQKICNlbmRpZgogCi0vKgotICogSWYgYWNwaV9jYWNoZV90IHdhcyBub3QgZGVmaW5lZCBpbiB0aGUgT1MtZGVwZW5kZW50IGhlYWRlciwKLSAqIGRlZmluZSBpdCBub3cuIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBjYXNlIHdoZXJlIHRoZSBsb2NhbCBjYWNoZQotICogbWFuYWdlciBpbXBsZW1lbnRhdGlvbiBpcyB0byBiZSB1c2VkIChBQ1BJX1VTRV9MT0NBTF9DQUNIRSkKLSAqLworLyogT2JqZWN0IHJldHVybmVkIGZyb20gYWNwaV9vc19jcmVhdGVfbG9jayAqLworCisjaWZuZGVmIGFjcGlfc3BpbmxvY2sKKyNkZWZpbmUgYWNwaV9zcGlubG9jayAgICAgICAgICAgICAgICAgICB2b2lkICoKKyNlbmRpZgorCisvKiBGbGFncyBmb3IgYWNwaV9vc19hY3F1aXJlX2xvY2svYWNwaV9vc19yZWxlYXNlX2xvY2sgKi8KKworI2lmbmRlZiBhY3BpX2NwdV9mbGFncworI2RlZmluZSBhY3BpX2NwdV9mbGFncyAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX3VpbnQKKyNlbmRpZgorCisvKiBPYmplY3QgcmV0dXJuZWQgZnJvbSBhY3BpX29zX2NyZWF0ZV9jYWNoZSAqLworCiAjaWZuZGVmIGFjcGlfY2FjaGVfdAogI2RlZmluZSBhY3BpX2NhY2hlX3QgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhY3BpX21lbW9yeV9saXN0CiAjZW5kaWYKIAotLyoKLSAqIEFsbG93IHRoZSBDUFUgZmxhZ3Mgd29yZCB0byBiZSBkZWZpbmVkIHBlci1PUyB0byBzaW1wbGlmeSB0aGUgdXNlIG9mIHRoZQotICogbG9jayBhbmQgdW5sb2NrIE9TTCBpbnRlcmZhY2VzLgotICovCi0jaWZuZGVmIGFjcGlfY3B1X2ZsYWdzCi0jZGVmaW5lIGFjcGlfY3B1X2ZsYWdzICAgICAgICAgICAgICAgICAgYWNwaV9uYXRpdmVfdWludAorLyogVXNlIEM5OSB1aW50cHRyX3QgZm9yIHBvaW50ZXIgY2FzdGluZyBpZiBhdmFpbGFibGUsICJ2b2lkICoiIG90aGVyd2lzZSAqLworCisjaWZuZGVmIGFjcGlfdWludHB0cl90CisjZGVmaW5lIGFjcGlfdWludHB0cl90ICAgICAgICAgICAgICAgICAgdm9pZCAqCiAjZW5kaWYKIAogLyoKQEAgLTI5OCwxMyArMzA1LDYgQEAKICNkZWZpbmUgQUNQSV9FWFBPUlRfU1lNQk9MKHN5bWJvbCkKICNlbmRpZgogCi0vKgotICogdGhyZWFkX2lkIGlzIHJldHVybmVkIGJ5IGFjcGlfb3NfZ2V0X3RocmVhZF9pZC4KLSAqLwotI2lmbmRlZiBhY3BpX3RocmVhZF9pZAotI2RlZmluZSBhY3BpX3RocmVhZF9pZCAgICAgICAgICAgICAgICAgIGFjcGlfbmF0aXZlX3VpbnQKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEluZGVwZW5kZW50IHR5cGVzCkBAIC0zODAsNiArMzgwLDExIEBACiAJdTMyIGhpOwogfTsKIAorLyogU3luY2hyb25pemF0aW9uIG9iamVjdHMgKi8KKworI2RlZmluZSBhY3BpX211dGV4ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKgorI2RlZmluZSBhY3BpX3NlbWFwaG9yZSAgICAgICAgICAgICAgICAgIHZvaWQgKgorCiAvKgogICogQWNwaSBpbnRlZ2VyIHdpZHRoLiBJbiBBQ1BJIHZlcnNpb24gMSwgaW50ZWdlcnMgYXJlCiAgKiAzMiBiaXRzLiAgSW4gQUNQSSB2ZXJzaW9uIDIsIGludGVnZXJzIGFyZSA2NCBiaXRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKaW5kZXggMjc3ZDM1Yi4uM2Y4NTNjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCkBAIC01OCwxMSArNTgsMTMgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCiAvKiBIb3N0LWRlcGVuZGVudCB0eXBlcyBhbmQgZGVmaW5lcyAqLwogCiAjZGVmaW5lIEFDUElfTUFDSElORV9XSURUSCAgICAgICAgICBCSVRTX1BFUl9MT05HCiAjZGVmaW5lIGFjcGlfY2FjaGVfdCAgICAgICAgICAgICAgICAgICAgICAgIGttZW1fY2FjaGVfdAorI2RlZmluZSBhY3BpX3NwaW5sb2NrICAgICAgICAgICAgICAgICAgIHNwaW5sb2NrX3QgKgogI2RlZmluZSBBQ1BJX0VYUE9SVF9TWU1CT0woc3ltYm9sKSAgRVhQT1JUX1NZTUJPTChzeW1ib2wpOwogI2RlZmluZSBzdHJ0b3VsICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX3N0cnRvdWwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCmluZGV4IDc3MzcxYjMuLjlkZDViNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKQEAgLTYyLDYgKzYyLDcgQEAKIAl1MzIgbGF0ZW5jeV90aWNrczsKIAl1MzIgcG93ZXI7CiAJdTMyIHVzYWdlOworCXU2NCB0aW1lOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeF9wb2xpY3kgcHJvbW90aW9uOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeF9wb2xpY3kgZGVtb3Rpb247CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaAppbmRleCAyMTgxNmQzLi42YTlmMDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaApAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBmZF9kaXNhYmxlX2lycSgpICAgICAgICBkaXNhYmxlX2lycShGTE9QUFlfSVJRKQogI2RlZmluZSBmZF9jYWNoZWZsdXNoKGFkZHIsc2l6ZSkgLyogbm90aGluZyAqLwogI2RlZmluZSBmZF9yZXF1ZXN0X2lycSgpICAgICAgICByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LFwKLQkJCQkJICAgIFNBX0lOVEVSUlVQVCwgImZsb3BweSIsIE5VTEwpCisJCQkJCSAgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCkKICNkZWZpbmUgZmRfZnJlZV9pcnEoKSAgICAgICAgICAgZnJlZV9pcnEoRkxPUFBZX0lSUSwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCmluZGV4IGNhOWQ0M2IuLmEzN2RiMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCkBAIC0yLDggKzIsNiBAQAogI2RlZmluZSBfQUxQSEFfSFdfSVJRX0gKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKSB7fQotCiBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpcnFfZXJyX2NvdW50OwogCiAjaWZkZWYgQ09ORklHX0FMUEhBX0dFTkVSSUMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3J3c2VtLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9yd3NlbS5oCmluZGV4IGZhZmRkNGYuLjE1NzBjMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3J3c2VtLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcndzZW0uaApAQCAtMzYsMjAgKzM2LDExIEBACiAjZGVmaW5lIFJXU0VNX0FDVElWRV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCiAJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwotI2lmIFJXU0VNX0RFQlVHCi0JaW50CQkJZGVidWc7Ci0jZW5kaWYKIH07CiAKLSNpZiBSV1NFTV9ERUJVRwotI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKLSNlbHNlCi0jZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLwotI2VuZGlmCi0KICNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCiAJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCi0JTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19SV1NFTV9ERUJVR19JTklUIH0KKwlMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBcCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQpAQCAtNTksOSArNTAsNiBAQAogCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKIAlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7Ci0jaWYgUldTRU1fREVCVUcKLQlzZW0tPmRlYnVnID0gMDsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaAppbmRleCAxYTJjNTJhLi4xM2MyMzA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zaWduYWwuaApAQCAtNzcsNyArNzcsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC05OCw3ICs5Nyw2IEBACiAKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAvKiAKICAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NvY2tldC5oCmluZGV4IGI1MTkzMjIuLmQyMmFiOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3NvY2tldC5oCkBAIC01MSw2ICs1MSw3IEBACiAjZGVmaW5lIFNDTV9USU1FU1RBTVAJCVNPX1RJTUVTVEFNUAogCiAjZGVmaW5lIFNPX1BFRVJTRUMJCTMwCisjZGVmaW5lIFNPX1BBU1NTRUMJCTM0CiAKIC8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCiAjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkxOQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCmluZGV4IDFmZGQ3MGIyLi5jMWNhOWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2JvYXJkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qCiAgKiBUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvdW5kIGluIHBsYXRmb3JtX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSwKLSAqIGFuZCBkZXNjcmliaW5nIGJvYXJkLXNwZWNmaWMgZGF0YSBuZWVkZWQgYnkgZHJpdmVycy4gIEZvciBleGFtcGxlLAorICogYW5kIGRlc2NyaWJpbmcgYm9hcmQtc3BlY2lmaWMgZGF0YSBuZWVkZWQgYnkgZHJpdmVycy4gIEZvciBleGFtcGxlLAogICogd2hpY2ggcGluIGlzIHVzZWQgZm9yIGEgZ2l2ZW4gR1BJTyByb2xlLgogICoKICAqIEluIDIuNiwgZHJpdmVycyBzaG91bGQgc3Ryb25nbHkgYXZvaWQgYm9hcmQtc3BlY2lmaWMga25vd2xlZGdlIHNvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaAppbmRleCAzYzMyN2M0Li5mOTg1MDY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvbWVtb3J5LmgKQEAgLTMzLDkgKzMzLDcgQEAKICAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKICAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgogICovCi0jZGVmaW5lIF9fdmlydF90b19idXNfX2lzX2FfbWFjcm8KICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0X19pc19hX21hY3JvCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L21lbW9yeS5oCmluZGV4IDRhMWJmZDcuLjUzZTkyM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L21lbW9yeS5oCkBAIC0yMyw5ICsyMyw3IEBACiAgKiBUaGVyZSBpcyBzb21ldGhpbmcgdG8gZG8gaGVyZSBsYXRlciAhLCBNYXIgMjAwMCwgSnVuZ2p1biBLaW0KICAqLwogCi0jZGVmaW5lIF9fdmlydF90b19idXNfX2lzX2FfbWFjcm8KICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQlfX3ZpcnRfdG9fcGh5cyh4KQotI2RlZmluZSBfX2J1c190b192aXJ0X19pc19hX21hY3JvCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvbWVtb3J5LmgKaW5kZXggZDA5YWUzMmMuLjVhZDkwMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvbWVtb3J5LmgKQEAgLTMwLDkgKzMwLDcgQEAKICAqIGJ1c190b192aXJ0OiBVc2VkIHRvIGNvbnZlcnQgYW4gYWRkcmVzcyBmb3IgRE1BIG9wZXJhdGlvbnMKICAqICAgICAgICAgICAgICB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGtlcm5lbCBjYW4gdXNlLgogICovCi0jZGVmaW5lIF9fdmlydF90b19idXNfX2lzX2FfbWFjcm8KLSNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCAtIFBBR0VfT0ZGU0VUICsgIFBIWVNfT0ZGU0VUKQotI2RlZmluZSBfX2J1c190b192aXJ0X19pc19hX21hY3JvCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKHggLSAgUEhZU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoeCAtIFBBR0VfT0ZGU0VUICsgUEhZU19PRkZTRVQpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKHggLSBQSFlTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvaXhwMjN4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9peHAyM3h4LmgKaW5kZXggZDBhNzIyMC4uMzkyN2IxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9peHAyM3h4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9peHAyM3h4LmgKQEAgLTI5NSwxNSArMjk1LDQgQEAKICNkZWZpbmUgSVhQMjNYWF9QQ0lfQ1BQX0FERFJfQklUUwlJWFAyM1hYX1BDSV9DU1IoMHgwMTYwKQogCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKgotICogSXMgc3lzdGVtIG1lbW9yeSBvbiB0aGUgWFNJIG9yIENQUCBidXM/Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaXhwMjN4eF9jcHBfYm9vdCh2b2lkKQotewotCXJldHVybiAoKklYUDIzWFhfRVhQX0NGRzAgJiBJWFAyM1hYX0VYUF9DRkcwX1hTSV9OT1RfUFJFUyk7Ci19Ci0jZW5kaWYKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvcGxhdGZvcm0uaAppbmRleCAxOWE3M2IzLi41NmUxNmQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9wbGF0Zm9ybS5oCkBAIC00Myw1ICs0MywxNSBAQAogCiAjZGVmaW5lIElYUDIzWFhfVUFSVF9YVEFMCQkxNDc0NTYwMAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIElzIHN5c3RlbSBtZW1vcnkgb24gdGhlIFhTSSBvciBDUFAgYnVzPworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGl4cDIzeHhfY3BwX2Jvb3Qodm9pZCkKK3sKKwlyZXR1cm4gKCpJWFAyM1hYX0VYUF9DRkcwICYgSVhQMjNYWF9FWFBfQ0ZHMF9YU0lfTk9UX1BSRVMpOworfQorI2VuZGlmCisKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvdW5jb21wcmVzcy5oCmluZGV4IDAxMzU3NWUuLjE2YzExMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvdW5jb21wcmVzcy5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9peHAyM3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogCiAjZGVmaW5lIFVBUlRfQkFTRQkoKHZvbGF0aWxlIHUzMiAqKUlYUDIzWFhfVUFSVDFfUEhZUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lvLmgKaW5kZXggYjU5NTIwZS4uMGQ1MTcyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lvLmgKQEAgLTM4LDcgKzM4LDcgQEAKICAqIDIpIElmID4gNjRNQiBvZiBtZW1vcnkgc3BhY2UgaXMgcmVxdWlyZWQsIHRoZSBJWFA0eHggY2FuIGJlIGNvbmZpZ3VyZWQKICAqICAgIHRvIHVzZSBpbmRpcmVjdCByZWdpc3RlcnMgdG8gYWNjZXNzIFBDSSAoYXMgd2UgZG8gYmVsb3cgZm9yIEkvTwogICogICAgdHJhbnNhY3Rpb25zKS4gVGhpcyBhbGxvd3MgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpCi0gKiAgICBvZiBtZW1vcnkgb24gdGhlIGJ1cy4gVGhlIGRpc2FkdmFudGFkZ2Ugb2YgdGhpcyBpcyB0aGF0IGV2ZXJ5IAorICogICAgb2YgbWVtb3J5IG9uIHRoZSBidXMuIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IGV2ZXJ5IAogICogICAgUENJIGFjY2VzcyByZXF1aXJlcyB0aHJlZSBsb2NhbCByZWdpc3RlciBhY2Nlc3NlcyBwbHVzIGEgc3BpbmxvY2ssCiAgKiAgICBidXQgaW4gc29tZSBjYXNlcyB0aGUgcGVyZm9ybWFuY2UgaGl0IGlzIGFjY2VwdGFibGUuIEluIGFkZGl0aW9uLAogICogICAgeW91IGNhbm5vdCBtbWFwKCkgUENJIGRldmljZXMgaW4gdGhpcyBjYXNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1mc2FtcGxlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWZzYW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWExZTUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1mc2FtcGxlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtZnNhbXBsZS5oCisgKgorICogQm9hcmQtc3BlY2lmaWMgZ29vZGllcyBmb3IgVEkgRi1TYW1wbGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0ZTQU1QTEVfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfRlNBTVBMRV9ICisKKy8qIGZzYW1wbGUgaXMgcHJldHR5IGNsb3NlIHRvIHAyLXNhbXBsZSAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLXBlcnNldXMyLmg+CisKKyNkZWZpbmUgZnNhbXBsZV9jcGxkX3JlYWQocmVnKSBfX3Jhd19yZWFkYihyZWcpCisjZGVmaW5lIGZzYW1wbGVfY3BsZF93cml0ZSh2YWwsIHJlZykgX19yYXdfd3JpdGViKHZhbCwgcmVnKQorCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CQVNFICAgIDB4RTgxMDAwMDAKKyNkZWZpbmUgRlNBTVBMRV9DUExEX1NJWkUgICAgU1pfNEsKKyNkZWZpbmUgRlNBTVBMRV9DUExEX1NUQVJUICAgMHgwNTA4MDAwMAorCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9SRUdfQSAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDApCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TV0lUQ0ggIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDIpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9VQVJUICAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDIpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9SRUdfQiAgIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDQpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9WRVJTSU9OIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDYpCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSIChGU0FNUExFX0NQTERfQkFTRSArIDB4MDYpCisKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9CVF9SRVNFVCAgICAgICAgIDAKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9MQ0RfUkVTRVQgICAgICAgIDEKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9DQU1fUFdETiAgICAgICAgIDIKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9DSEFSR0VSX0VOQUJMRSAgIDMKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9TRF9NTUNfRU4gICAgICAgIDQKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX1BXUkVOICAgICAgIDUKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9CQUNLTElHSFQgICAgICAgIDYKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX0VOX1JFU0VUICAgIDcKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9hR1BTX1NMRUVQeF9OICAgIDgKKyNkZWZpbmUgRlNBTVBMRV9DUExEX0JJVF9PVEdfUkVTRVQgICAgICAgIDkKKworI2RlZmluZSBmc2FtcGxlX2NwbGRfc2V0KGJpdCkgXAorICAgIGZzYW1wbGVfY3BsZF93cml0ZSgoKChiaXQpICYgMTUpIDw8IDQpIHwgMHgwZiwgRlNBTVBMRV9DUExEX1NFVF9DTFIpCisKKyNkZWZpbmUgZnNhbXBsZV9jcGxkX2NsZWFyKGJpdCkgXAorICAgIGZzYW1wbGVfY3BsZF93cml0ZSgweGYwIHwgKChiaXQpICYgMTUpLCBGU0FNUExFX0NQTERfU0VUX0NMUikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKaW5kZXggZGZkYmYwNi4uZWRmMWRjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBPTUFQX1RBR19VQVJUCQkweDRmMDcKICNkZWZpbmUgT01BUF9UQUdfRkJNRU0JCTB4NGYwOAogI2RlZmluZSBPTUFQX1RBR19TVElfQ09OU09MRQkweDRmMDkKKyNkZWZpbmUgT01BUF9UQUdfQ0FNRVJBX1NFTlNPUgkweDRmMGEKIAogI2RlZmluZSBPTUFQX1RBR19CT09UX1JFQVNPTiAgICAweDRmODAKICNkZWZpbmUgT01BUF9UQUdfRkxBU0hfUEFSVAkweDRmODEKQEAgLTYxLDYgKzYyLDEyIEBACiAJdTggY2hhbm5lbDsKIH07CiAKK3N0cnVjdCBvbWFwX2NhbWVyYV9zZW5zb3JfY29uZmlnIHsKKwl1MTYgcmVzZXRfZ3BpbzsKKwlpbnQgKCpwb3dlcl9vbikodm9pZCAqIGRhdGEpOworCWludCAoKnBvd2VyX29mZikodm9pZCAqIGRhdGEpOworfTsKKwogc3RydWN0IG9tYXBfdXNiX2NvbmZpZyB7CiAJLyogQ29uZmlndXJlIGRyaXZlcnMgYWNjb3JkaW5nIHRvIHRoZSBjb25uZWN0b3JzIG9uIHlvdXIgYm9hcmQ6CiAJICogIC0gIkEiIGNvbm5lY3RvciAocmVjdGFndWxhcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCmluZGV4IGNhMTIwMjMxLi4xYjFiMDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKQEAgLTE4NSw4ICsxODUsOCBAQAogLyogRE1BIGNoYW5uZWxzIGZvciAyNHh4ICovCiAjZGVmaW5lIE9NQVAyNFhYX0RNQV9OT19ERVZJQ0UJCTAKICNkZWZpbmUgT01BUDI0WFhfRE1BX1hUSV9ETUEJCTEJLyogU19ETUFfMCAqLwotI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX05ETUFfUkVRMAkyCS8qIFNfRE1BXzEgKi8KLSNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ORE1BX1JFUTEJMwkvKiBTX0RNQV8yICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMAkyCS8qIFNfRE1BXzEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVExCTMJLyogU19ETUFfMiAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfR1BNQwkJNAkvKiBTX0RNQV8zICovCiAjZGVmaW5lIE9NQVAyNFhYX0RNQV9HRlgJCTUJLyogU19ETUFfNCAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfRFNTCQk2CS8qIFNfRE1BXzUgKi8KQEAgLTE5Nyw3ICsxOTcsOSBAQAogI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1RYCQkxMQkvKiBTX0RNQV8xMCAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1JYCQkxMgkvKiBTX0RNQV8xMSAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfU0hBMU1ENV9SWAkJMTMJLyogU19ETUFfMTIgKi8KLQorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTIJMTQJLyogU19ETUFfMTMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVEzCTE1CS8qIFNfRE1BXzE0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRNAkxNgkvKiBTX0RNQV8xNSAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1JECQkxNwkvKiBTX0RNQV8xNiAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1dSCQkxOAkvKiBTX0RNQV8xNyAqLwogI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1JECTE5CS8qIFNfRE1BXzE4ICovCkBAIC0yNDQsNiArMjQ2LDcgQEAKICNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfVFgJCTYxCS8qIFNETUFfNjAgKi8KICNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfUlgJCTYyCS8qIFNETUFfNjEgKi8KICNkZWZpbmUgT01BUDI0WFhfRE1BX01TCQkJNjMJLyogU0RNQV82MiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTUJNjQJLyogU19ETUFfNjMgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjc0LDcgKzI3Nyw3IEBACiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZWEpCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZjQpCiAKLSNkZWZpbmUgT01BUF9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCS8qIE9ubHkgb24gb21hcDEgKi8KKyNkZWZpbmUgT01BUDFfRE1BX1RPVVRfSVJRCQkoMSA8PCAwKQogI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUQkJKDEgPDwgMSkKICNkZWZpbmUgT01BUF9ETUFfSEFMRl9JUlEJCSgxIDw8IDIpCiAjZGVmaW5lIE9NQVBfRE1BX0ZSQU1FX0lSUQkJKDEgPDwgMykKQEAgLTMxNSwxMSArMzE4LDExIEBACiAJT01BUF9MQ0RfRE1BX0IyX0JPVFRPTQogfTsKIAotLyogUkVWSVNJVDogQ2hlY2sgaWYgQlVSU1RfNCBpcyByZWFsbHkgMSAob3IgMikgKi8KIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSB7CiAJT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAogCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCwKLQlPTUFQX0RNQV9EQVRBX0JVUlNUXzgKKwlPTUFQX0RNQV9EQVRBX0JVUlNUXzgsCisJT01BUF9ETUFfREFUQV9CVVJTVF8xNiwKIH07CiAKIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtdGltZXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oCmluZGV4IGU2NTIyZTYuLjdhMjg5ZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG10aW1lci5oCkBAIC01LDYgKzUsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICogQXV0aG9yOiBMYXVyaSBMZXVra3VuZW4gPGxhdXJpLmxldWtrdW5lbkBub2tpYS5jb20+CisgKiBQV00gYW5kIGNsb2NrIGZyYW13b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yNSw2OSArMjYsNTYgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9USU1FUl9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVJfSAorI2lmbmRlZiBfX0FTTV9BUkNIX0RNVElNRVJfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNVElNRVJfSAogCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jZGVmaW5lIE9NQVBfVElNRVJfU1JDX0FSTVhPUgkJMHgwMAotI2RlZmluZSBPTUFQX1RJTUVSX1NSQ18zMl9LSFoJCTB4MDEKLSNkZWZpbmUgT01BUF9USU1FUl9TUkNfRVhUX0NMSwkJMHgwMgotCi0vKiB0aW1lciBjb250cm9sIHJlZyBiaXRzICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9DQVBUTU9ERQkoMSA8PCAxMykKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RSR19PVkVSRkxPVwkoMHgxIDw8IDEwKQotI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVFJHX09GQU5ETUFUQ0gJKDB4MiA8PCAxMCkKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1RDTV9MT1dUT0hJR0gJKDB4MSA8PCA4KQotI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfVENNX0hJR0hUT0xPVwkoMHgyIDw8IDgpCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9UQ01fQk9USEVER0VTCSgweDMgPDwgOCkKLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1NDUFdNCQkoMSA8PCA3KQotI2RlZmluZSBPTUFQX1RJTUVSX0NUUkxfQ0UJCSgxIDw8IDYpCS8qIGNvbXBhcmUgZW5hYmxlICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9QUkUJCSgxIDw8IDUpCS8qIHByZXNjYWxlciBlbmFibGUgKi8KLSNkZWZpbmUgT01BUF9USU1FUl9DVFJMX1BUVl9TSElGVAkyCQkvKiBob3cgbXVjaCB0byBzaGlmdCB0aGUgcHJlc2NhbGVyIHZhbHVlICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9BUgkJKDEgPDwgMSkJLyogYXV0by1yZWxvYWQgZW5hYmxlICovCi0jZGVmaW5lIE9NQVBfVElNRVJfQ1RSTF9TVAkJKDEgPDwgMCkJLyogc3RhcnQgdGltZXIgKi8KKy8qIGNsb2NrIHNvdXJjZXMgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9TUkNfU1lTX0NMSwkJCTB4MDAKKyNkZWZpbmUgT01BUF9USU1FUl9TUkNfMzJfS0haCQkJMHgwMQorI2RlZmluZSBPTUFQX1RJTUVSX1NSQ19FWFRfQ0xLCQkJMHgwMgogCiAvKiB0aW1lciBpbnRlcnJ1cHQgZW5hYmxlIGJpdHMgKi8KLSNkZWZpbmUgT01BUF9USU1FUl9JTlRfQ0FQVFVSRQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVBfVElNRVJfSU5UX01BVENICQkoMSA8PCAwKQorI2RlZmluZSBPTUFQX1RJTUVSX0lOVF9DQVBUVVJFCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUF9USU1FUl9JTlRfT1ZFUkZMT1cJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQX1RJTUVSX0lOVF9NQVRDSAkJCSgxIDw8IDApCiAKKy8qIHRyaWdnZXIgdHlwZXMgKi8KKyNkZWZpbmUgT01BUF9USU1FUl9UUklHR0VSX05PTkUJCQkweDAwCisjZGVmaW5lIE9NQVBfVElNRVJfVFJJR0dFUl9PVkVSRkxPVwkJMHgwMQorI2RlZmluZSBPTUFQX1RJTUVSX1RSSUdHRVJfT1ZFUkZMT1dfQU5EX0NPTVBBUkUJMHgwMgogCi1zdHJ1Y3Qgb21hcF9kbV90aW1lciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0aW1lcl9saXN0Oworc3RydWN0IG9tYXBfZG1fdGltZXI7CitzdHJ1Y3QgY2xrOwogCi0JdTMyIGJhc2U7Ci0JdW5zaWduZWQgaW50IGlycTsKLX07CitpbnQgb21hcF9kbV90aW1lcl9pbml0KHZvaWQpOwogCi11MzIgb21hcF9kbV90aW1lcl9yZWFkX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcpOwotdm9pZCBvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCByZWcsIHUzMiB2YWx1ZSk7Ci0KLXN0cnVjdCBvbWFwX2RtX3RpbWVyICogb21hcF9kbV90aW1lcl9yZXF1ZXN0KHZvaWQpOworc3RydWN0IG9tYXBfZG1fdGltZXIgKm9tYXBfZG1fdGltZXJfcmVxdWVzdCh2b2lkKTsKK3N0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoaW50IHRpbWVyX2lkKTsKIHZvaWQgb21hcF9kbV90aW1lcl9mcmVlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7Ci12b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpOwogCi12b2lkIG9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpOwotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF90cmlnZ2VyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKTsKLXZvaWQgb21hcF9kbV90aW1lcl9lbmFibGVfY29tcGFyZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwotdm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZV9hdXRvcmVsb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CitpbnQgb21hcF9kbV90aW1lcl9nZXRfaXJxKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CisKK3UzMiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayh1MzIgaW5wdXRtYXNrKTsKK3N0cnVjdCBjbGsgKm9tYXBfZG1fdGltZXJfZ2V0X2ZjbGsoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3RyaWdnZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIHZvaWQgb21hcF9kbV90aW1lcl9zdGFydChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwogdm9pZCBvbWFwX2RtX3RpbWVyX3N0b3Aoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIAotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IGxvYWQpOwotdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9tYXRjaChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCBtYXRjaCk7Cit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBzb3VyY2UpOwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9sb2FkKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGF1dG9yZWxvYWQsIHVuc2lnbmVkIGludCB2YWx1ZSk7Cit2b2lkIG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGVuYWJsZSwgdW5zaWduZWQgaW50IG1hdGNoKTsKK3ZvaWQgb21hcF9kbV90aW1lcl9zZXRfcHdtKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgaW50IGRlZl9vbiwgaW50IHRvZ2dsZSwgaW50IHRyaWdnZXIpOwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9wcmVzY2FsZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcHJlc2NhbGVyKTsKKwordm9pZCBvbWFwX2RtX3RpbWVyX3NldF9pbnRfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKTsKIAogdW5zaWduZWQgaW50IG9tYXBfZG1fdGltZXJfcmVhZF9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKIHZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpOwotCiB1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKTsKLXZvaWQgb21hcF9kbV90aW1lcl9yZXNldF9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7Cit2b2lkIG9tYXBfZG1fdGltZXJfd3JpdGVfY291bnRlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKIGludCBvbWFwX2RtX3RpbWVyc19hY3RpdmUodm9pZCk7Ci11MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2sodTMyIGlucHV0bWFzayk7CiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVSX0ggKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1USU1FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3BtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMGE1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwbWMuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogR2VuZXJhbC1QdXJwb3NlIE1lbW9yeSBDb250cm9sbGVyIGZvciBPTUFQMgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fT01BUDJfR1BNQ19ICisjZGVmaW5lIF9fT01BUDJfR1BNQ19ICisKKyNkZWZpbmUgR1BNQ19DU19DT05GSUcxCQkweDAwCisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMgkJMHgwNAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzMJCTB4MDgKKyNkZWZpbmUgR1BNQ19DU19DT05GSUc0CQkweDBjCisjZGVmaW5lIEdQTUNfQ1NfQ09ORklHNQkJMHgxMAorI2RlZmluZSBHUE1DX0NTX0NPTkZJRzYJCTB4MTQKKyNkZWZpbmUgR1BNQ19DU19DT05GSUc3CQkweDE4CisjZGVmaW5lIEdQTUNfQ1NfTkFORF9DT01NQU5ECTB4MWMKKyNkZWZpbmUgR1BNQ19DU19OQU5EX0FERFJFU1MJMHgyMAorI2RlZmluZSBHUE1DX0NTX05BTkRfREFUQQkweDI0CisKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dSQVBCVVJTVF9TVVBQICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURNVUxUSVBMRV9TVVBQICAoMSA8PCAyMCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURUWVBFX0FTWU5DICAgICAoMCA8PCAyOSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURUWVBFX1NZTkMgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dSSVRFVFlQRV9BU1lOQyAgICAoMCA8PCAyNykKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1dSSVRFVFlQRV9TWU5DICAgICAoMSA8PCAyNykKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0NMS0FDVElWQVRJT05USU1FKHZhbCkgKCh2YWwgJiAzKSA8PCAyNSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1BBR0VfTEVOKHZhbCkgICAgICAoKHZhbCAmIDMpIDw8IDIzKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9SRUFEX01PTiAgICAgICgxIDw8IDIyKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9XUklURV9NT04gICAgICgxIDw8IDIxKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfV0FJVF9NT05fSUlNRSh2YWwpICgodmFsICYgMykgPDwgMTgpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9XQUlUX1BJTl9TRUwodmFsKSAgKCh2YWwgJiAzKSA8PCAxNikKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVNJWkUodmFsKSAgICAoKHZhbCAmIDMpIDw8IDEyKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFU0laRV8xNiAgICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VTSVpFKDEpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKHZhbCkgICAgKCh2YWwgJiAzKSA8PCAxMCkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEVfTk9SICAgICBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSgwKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRV9OQU5EICAgIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFKDEpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9NVVhBREREQVRBICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX1RJTUVfUEFSQV9HUkFOICAgICAoMSA8PCA0KQorI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVYodmFsKSAgICAgICh2YWwgJiAzKQorI2RlZmluZSBHUE1DX0NPTkZJRzFfRkNMS19ESVYyICAgICAgICAgIChHUE1DX0NPTkZJRzFfRkNMS19ESVYoMSkpCisjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjMgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigyKSkKKyNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWNCAgICAgICAgICAoR1BNQ19DT05GSUcxX0ZDTEtfRElWKDMpKQorCisvKgorICogTm90ZSB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhpcyBzdHJ1Y3QgYXJlIGluIG5hbm9zZWNvbmRzLCB3aGlsZQorICogdGhlIHJlZ2lzdGVyIHZhbHVlcyBhcmUgaW4gZ3BtY19mY2sgY3ljbGVzLgorICovCitzdHJ1Y3QgZ3BtY190aW1pbmdzIHsKKwkvKiBNaW5pbXVtIGNsb2NrIHBlcmlvZCBmb3Igc3luY2hyb25vdXMgbW9kZSAqLworCXUxNiBzeW5jX2NsazsKKworCS8qIENoaXAtc2VsZWN0IHNpZ25hbCB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DU19DT05GSUcyICovCisJdTE2IGNzX29uOwkJLyogQXNzZXJ0aW9uIHRpbWUgKi8KKwl1MTYgY3NfcmRfb2ZmOwkJLyogUmVhZCBkZWFzc2VydGlvbiB0aW1lICovCisJdTE2IGNzX3dyX29mZjsJCS8qIFdyaXRlIGRlYXNzZXJ0aW9uIHRpbWUgKi8KKworCS8qIEFEViBzaWduYWwgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIEdQTUNfQ09ORklHMyAqLworCXUxNiBhZHZfb247CQkvKiBBc3NlcnRpb24gdGltZSAqLworCXUxNiBhZHZfcmRfb2ZmOwkJLyogUmVhZCBkZWFzc2VydGlvbiB0aW1lICovCisJdTE2IGFkdl93cl9vZmY7CQkvKiBXcml0ZSBkZWFzc2VydGlvbiB0aW1lICovCisKKwkvKiBXRSBzaWduYWxzIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzQgKi8KKwl1MTYgd2Vfb247CQkvKiBXRSBhc3NlcnRpb24gdGltZSAqLworCXUxNiB3ZV9vZmY7CQkvKiBXRSBkZWFzc2VydGlvbiB0aW1lICovCisKKwkvKiBPRSBzaWduYWxzIHRpbWluZ3MgY29ycmVzcG9uZGluZyB0byBHUE1DX0NPTkZJRzQgKi8KKwl1MTYgb2Vfb247CQkvKiBPRSBhc3NlcnRpb24gdGltZSAqLworCXUxNiBvZV9vZmY7CQkvKiBPRSBkZWFzc2VydGlvbiB0aW1lICovCisKKwkvKiBBY2Nlc3MgdGltZSBhbmQgY3ljbGUgdGltZSB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DT05GSUc1ICovCisJdTE2IHBhZ2VfYnVyc3RfYWNjZXNzOwkvKiBNdWx0aXBsZSBhY2Nlc3Mgd29yZCBkZWxheSAqLworCXUxNiBhY2Nlc3M7CQkvKiBTdGFydC1jeWNsZSB0byBmaXJzdCBkYXRhIHZhbGlkIGRlbGF5ICovCisJdTE2IHJkX2N5Y2xlOwkJLyogVG90YWwgcmVhZCBjeWNsZSB0aW1lICovCisJdTE2IHdyX2N5Y2xlOwkJLyogVG90YWwgd3JpdGUgY3ljbGUgdGltZSAqLworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKTsKKworZXh0ZXJuIHZvaWQgZ3BtY19jc193cml0ZV9yZWcoaW50IGNzLCBpbnQgaWR4LCB1MzIgdmFsKTsKK2V4dGVybiB1MzIgZ3BtY19jc19yZWFkX3JlZyhpbnQgY3MsIGludCBpZHgpOworZXh0ZXJuIGludCBncG1jX2NzX2NhbGNfZGl2aWRlcihpbnQgY3MsIHVuc2lnbmVkIGludCBzeW5jX2Nsayk7CitleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3RpbWluZ3MoaW50IGNzLCBjb25zdCBzdHJ1Y3QgZ3BtY190aW1pbmdzICp0KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdwbWNfY3NfZ2V0X2Jhc2VfYWRkcihpbnQgY3MpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCmluZGV4IGM3ZDllODUuLjQ4MTA0OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKQEAgLTI5Nyw2ICsyOTcsMTAgQEAKICNpbmNsdWRlICJib2FyZC1wZXJzZXVzMi5oIgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0ZTQU1QTEUKKyNpbmNsdWRlICJib2FyZC1mc2FtcGxlLmgiCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfSDMKICNpbmNsdWRlICJib2FyZC1oMy5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCmluZGV4IDQyMDk4ZDkuLjI1NDI0OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCkBAIC0yNDIsMTAgKzI0MiwyNCBAQAogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksyCTMwCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMJMzEKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LNAkzMgorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMQkzNworI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMgkzOAorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMwkzOQorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNAk0MAorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNQk0MQorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNgk0MgorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNwk0MworI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSOAk0NAorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSOQk0NQorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTAJNDYKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjExCTQ3CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMgk0OAogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYCTU5CiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMV9JUlFfUlgJNjAKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9UWAk2MgogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYCTYzCisjZGVmaW5lIElOVF8yNFhYX1VBUlQxX0lSUQk3MgorI2RlZmluZSBJTlRfMjRYWF9VQVJUMl9JUlEJNzMKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDNfSVJRCTc0CiAKIC8qIE1heC4gMTI4IGxldmVsIDIgSVJRcyAoT01BUDE2MTApLCAxOTIgR1BJT3MgKE9NQVA3MzApIGFuZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKaW5kZXggMGRjMjRkNC4uNjc5ODY5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCkBAIC00MTAsNiArNDEwLDEyIEBACiAJLyogMjR4eCBjbG9jayAqLwogCVcxNF8yNFhYX1NZU19DTEtPVVQsCiAKKwkvKiAyNHh4IEdQTUMgd2FpdCBwaW4gbW9uaXRvcmluZyAqLworCUwzX0dQTUNfV0FJVDAsCisJTjdfR1BNQ19XQUlUMSwKKwlNMV9HUE1DX1dBSVQyLAorCVAxX0dQTUNfV0FJVDMsCisKIAkvKiAyNDJYIE1jQlNQICovCiAJWTE1XzI0WFhfTUNCU1AyX0NMS1gsCiAJUjE0XzI0WFhfTUNCU1AyX0ZTWCwKQEAgLTQyOSw2ICs0MzUsMjYgQEAKIAlNMTVfMjRYWF9HUElPOTIsCiAJVjE0XzI0WFhfR1BJTzExNywKIAorCS8qIDI0MnggREJHIEdQSU8gKi8KKwlWNF8yNDJYX0dQSU80OSwKKwlXMl8yNDJYX0dQSU81MCwKKwlVNF8yNDJYX0dQSU81MSwKKwlWM18yNDJYX0dQSU81MiwKKwlWMl8yNDJYX0dQSU81MywKKwlWNl8yNDJYX0dQSU81MywKKwlUNF8yNDJYX0dQSU81NCwKKwlZNF8yNDJYX0dQSU81NCwKKwlUM18yNDJYX0dQSU81NSwKKwlVMl8yNDJYX0dQSU81NiwKKworCS8qIDI0eHggZXh0ZXJuYWwgRE1BIHJlcXVlc3RzICovCisJQUExMF8yNDJYX0RNQVJFUTAsCisJQUE2XzI0MlhfRE1BUkVRMSwKKwlFNF8yNDJYX0RNQVJFUTIsCisJRzRfMjQyWF9ETUFSRVEzLAorCUQzXzI0MlhfRE1BUkVRNCwKKwlFM18yNDJYX0RNQVJFUTUsCisKIAlQMjBfMjRYWF9UU0NfSVJRLAogCiAJLyogVUFSVDMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAppbmRleCAwNWIwMDNmLi5lNDY2MjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCkBAIC0yOTksMTAgKzI5OSw0MyBAQAogCU9NQVAyNFhYX1NMRUVQX1NBVkVfSU5UQ19NSVIwLAogCU9NQVAyNFhYX1NMRUVQX1NBVkVfSU5UQ19NSVIxLAogCU9NQVAyNFhYX1NMRUVQX1NBVkVfSU5UQ19NSVIyLAorCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9DTEtTVENUUkxfTVBVLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fQ0xLU1RDVFJMX0NPUkUsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9DTEtTVENUUkxfR0ZYLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fQ0xLU1RDVFJMX0RTUCwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0NMS1NUQ1RSTF9NRE0sCisKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX1BNX1BXU1RDVFJMX01QVSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX1BNX1BXU1RDVFJMX0NPUkUsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9QTV9QV1NUQ1RSTF9HRlgsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9QTV9QV1NUQ1RSTF9EU1AsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9QTV9QV1NUQ1RSTF9NRE0sCisKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVDFfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVDJfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVDNfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVDRfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVF9HRlgsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9JRExFU1RfV0tVUCwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVF9DS0dFTiwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lETEVTVF9EU1AsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9JRExFU1RfTURNLAorCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9BVVRPSURMRTFfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0FVVE9JRExFMl9DT1JFLAorCU9NQVAyNFhYX1NMRUVQX1NBVkVfQ01fQVVUT0lETEUzX0NPUkUsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9BVVRPSURMRTRfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0FVVE9JRExFX1dLVVAsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9BVVRPSURMRV9QTEwsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9BVVRPSURMRV9EU1AsCisJT01BUDI0WFhfU0xFRVBfU0FWRV9DTV9BVVRPSURMRV9NRE0sCisKIAlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0ZDTEtFTjFfQ09SRSwKIAlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0ZDTEtFTjJfQ09SRSwKIAlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjFfQ09SRSwKIAlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjJfQ09SRSwKKwlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjNfQ09SRSwKIAlPTUFQMjRYWF9TTEVFUF9TQVZFX0NNX0lDTEtFTjRfQ09SRSwKIAlPTUFQMjRYWF9TTEVFUF9TQVZFX0dQSU8xX0lSUUVOQUJMRTEsCiAJT01BUDI0WFhfU0xFRVBfU0FWRV9HUElPMl9JUlFFTkFCTEUxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAppbmRleCA5ZjgzZjRhLi5mNWNjNjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaApAQCAtMTMyOSw2ICsxMzI5LDcgQEAKICNkZWZpbmUgR1BJTzg0X05TUlhECQk4NAkvKiBOU1NQIHJlY2VpdmUgKi8KICNkZWZpbmUgR1BJTzg1X25QQ0VfMQkJODUJLyogQ2FyZCBFbmFibGUgZm9yIENhcmQgU3BhY2UgKFBYQTI3eCkgKi8KICNkZWZpbmUgR1BJTzkyX01NQ0RBVDAJCTkyCS8qIE1NQyBEQVQwIChQWEEyN3gpICovCisjZGVmaW5lIEdQSU8xMDJfblBDRV8xCQkxMDIJLyogUENNQ0lBIChQWEEyN3gpICovCiAjZGVmaW5lIEdQSU8xMDlfTU1DREFUMQkJMTA5CS8qIE1NQyBEQVQxIChQWEEyN3gpICovCiAjZGVmaW5lIEdQSU8xMTBfTU1DREFUMgkJMTEwCS8qIE1NQyBEQVQyIChQWEEyN3gpICovCiAjZGVmaW5lIEdQSU8xMTBfTU1DQ1MwCQkxMTAJLyogTU1DIENoaXAgU2VsZWN0IDAgKFBYQTI3eCkgKi8KQEAgLTE0NzEsNiArMTQ3Miw3IEBACiAjZGVmaW5lIEdQSU84NF9OU1NQX1JYICAgICAgCSg4NCB8IEdQSU9fQUxUX0ZOXzJfSU4pCiAjZGVmaW5lIEdQSU84NV9uUENFXzFfTUQJKDg1IHwgR1BJT19BTFRfRk5fMV9PVVQpCiAjZGVmaW5lIEdQSU85Ml9NTUNEQVQwX01ECSg5MiB8IEdQSU9fQUxUX0ZOXzFfT1VUKQorI2RlZmluZSBHUElPMTAyX25QQ0VfMV9NRAkoMTAyIHwgR1BJT19BTFRfRk5fMV9PVVQpCiAjZGVmaW5lIEdQSU8xMDRfcFNLVFNFTF9NRAkoMTA0IHwgR1BJT19BTFRfRk5fMV9PVVQpCiAjZGVmaW5lIEdQSU8xMDlfTU1DREFUMV9NRAkoMTA5IHwgR1BJT19BTFRfRk5fMV9PVVQpCiAjZGVmaW5lIEdQSU8xMTBfTU1DREFUMl9NRAkoMTEwIHwgR1BJT19BTFRfRk5fMV9PVVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdHJpemVwczQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90cml6ZXBzNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MWQwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdHJpemVwczQuaApAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5jbHVkZSBmaWxlIGZvciBUUklaRVBTNCBTb00gYW5kIENvblhTIGV2YWwtYm9hcmQKKyAqIENvcHlyaWdodCAoYykgSsO8cmdlbiBTY2hpbmRlbGUKKyAqIDIwMDYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJbmNsdWRlcy9EZWZpbmVzCisgKi8KKyNpZm5kZWYgX1RSSVBFUFM0X0hfCisjZGVmaW5lIF9UUklQRVBTNF9IXworCisvKiBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyAqLworI2RlZmluZSBUUklaRVBTNF9GTEFTSF9QSFlTCShQWEFfQ1MwX1BIWVMpICAvKiBGbGFzaCByZWdpb24gKi8KKyNkZWZpbmUgVFJJWkVQUzRfRElTS19QSFlTCShQWEFfQ1MxX1BIWVMpICAvKiBEaXNrIE9uIENoaXAgcmVnaW9uICovCisjZGVmaW5lIFRSSVpFUFM0X0VUSF9QSFlTCShQWEFfQ1MyX1BIWVMpICAvKiBFdGhlcm5ldCBETTkwMDAgcmVnaW9uICovCisjZGVmaW5lIFRSSVpFUFM0X1BJQ19QSFlTCShQWEFfQ1MzX1BIWVMpCS8qIExvZ2ljIGNoaXAgb24gQ29uWFMtQm9hcmQgKi8KKyNkZWZpbmUgVFJJWkVQUzRfU0RSQU1fQkFTRQkweGEwMDAwMDAwICAgICAgLyogU0RSQU0gcmVnaW9uICovCisKKyNkZWZpbmUgVFJJWkVQUzRfQ0ZTUl9QSFlTCShQWEFfQ1MzX1BIWVMpCQkJLyogTG9naWMgY2hpcCBvbiBDb25YUy1Cb2FyZCBDU0ZSIHJlZ2lzdGVyICovCisjZGVmaW5lIFRSSVpFUFM0X0JPQ1JfUEhZUwkoUFhBX0NTM19QSFlTKzB4MDIwMDAwMDApCS8qIExvZ2ljIGNoaXAgb24gQ29uWFMtQm9hcmQgQk9DUiByZWdpc3RlciAqLworI2RlZmluZSBUUklaRVBTNF9JUkNSX1BIWVMJKFBYQV9DUzNfUEhZUysweDAyNDAwMDAwKQkvKiBMb2dpYyBjaGlwIG9uIENvblhTLUJvYXJkIElSQ1IgcmVnaXN0ZXIqLworI2RlZmluZSBUUklaRVBTNF9VUFNSX1BIWVMJKFBYQV9DUzNfUEhZUysweDAyODAwMDAwKQkvKiBMb2dpYyBjaGlwIG9uIENvblhTLUJvYXJkIFVQU1IgcmVnaXN0ZXIqLworI2RlZmluZSBUUklaRVBTNF9ESUNSX1BIWVMJKFBYQV9DUzNfUEhZUysweDAzODAwMDAwKQkvKiBMb2dpYyBjaGlwIG9uIENvblhTLUJvYXJkIERJQ1IgcmVnaXN0ZXIqLworCisvKiB2aXJ0dWFsIG1lbW9yeSByZWdpb25zICovCisjZGVmaW5lIFRSSVpFUFM0X0RJU0tfVklSVAkweEYwMDAwMDAwCS8qIERpc2sgT24gQ2hpcCByZWdpb24gKi8KKworI2RlZmluZSBUUklaRVBTNF9QSUNfVklSVAkweEYwMTAwMDAwCS8qIG5vdCB1c2VkICovCisjZGVmaW5lIFRSSVpFUFM0X0NGU1JfVklSVAkweEYwMTAwMDAwCisjZGVmaW5lIFRSSVpFUFM0X0JPQ1JfVklSVAkweEYwMjAwMDAwCisjZGVmaW5lIFRSSVpFUFM0X0RJQ1JfVklSVAkweEYwMzAwMDAwCisjZGVmaW5lIFRSSVpFUFM0X0lSQ1JfVklSVAkweEYwNDAwMDAwCisjZGVmaW5lIFRSSVpFUFM0X1VQU1JfVklSVAkweEYwNTAwMDAwCisKKy8qIHNpemUgb2YgZmxhc2ggKi8KKyNkZWZpbmUgVFJJWkVQUzRfRkxBU0hfU0laRQkweDAyMDAwMDAwCS8qIEZsYXNoIHNpemUgMzIgTUIgKi8KKworLyogRXRoZXJuZXQgQ29udHJvbGxlciBEYXZpY29tIERNOTAwMCAqLworI2RlZmluZSBHUElPX0RNOTAwMAkJMTAxCisjZGVmaW5lIFRSSVpFUFM0X0VUSF9JUlEJSVJRX0dQSU8oR1BJT19ETTkwMDApCisKKy8qIFVDQjE0MDAgYXVkaW8gLyBUUy1jb250cm9sbGVyICovCisjZGVmaW5lIEdQSU9fVUNCMTQwMAkJMQorI2RlZmluZSBUUklaRVBTNF9VQ0IxNDAwX0lSUQlJUlFfR1BJTyhHUElPX1VDQjE0MDApCisKKy8qIFBDTUNJQSBzb2NrZXQgQ29tcGFjdCBGbGFzaCAqLworI2RlZmluZSBHUElPX1BDRAkJMTEJCS8qIFBDTUNJQSBDYXJkIERldGVjdCAqLworI2RlZmluZSBUUklaRVBTNF9DRF9JUlEJCUlSUV9HUElPKEdQSU9fUENEKQorI2RlZmluZSBHUElPX1BSRFkJCTEzCQkvKiBSRUFEWSAvIG5JTlQgKi8KKyNkZWZpbmUgVFJJWkVQUzRfUkVBRFlfTklOVAlJUlFfR1BJTyhHUElPX1BSRFkpCisKKy8qIE1NQyBzb2NrZXQgKi8KKyNkZWZpbmUgR1BJT19NTUNfREVUCQkxMgorI2RlZmluZSBUUklaRVBTNF9NTUNfSVJRCUlSUV9HUElPKEdQSU9fTU1DX0RFVCkKKworLyogTEVEUyB1c2luZyB0eDIgLyByeDIgKi8KKyNkZWZpbmUgR1BJT19TWVNfQlVTWV9MRUQJNDYKKyNkZWZpbmUgR1BJT19IRUFSVEJFQVRfTEVECTQ3CisKKy8qIE9mZi1tb2R1bGUgUElDIG9uIENvblhTIGJvYXJkICovCisjZGVmaW5lIEdQSU9fUElDCQkwCisjZGVmaW5lIFRSSVpFUFM0X1BJQ19JUlEJSVJRX0dQSU8oR1BJT19QSUMpCisKKyNkZWZpbmUgQ0ZTUl9QMlYoeCkJCSgoeCkgLSBUUklaRVBTNF9DRlNSX1BIWVMgKyBUUklaRVBTNF9DRlNSX1ZJUlQpCisjZGVmaW5lIENGU1JfVjJQKHgpCQkoKHgpIC0gVFJJWkVQUzRfQ0ZTUl9WSVJUICsgVFJJWkVQUzRfQ0ZTUl9QSFlTKQorCisjZGVmaW5lIEJDUl9QMlYoeCkJCSgoeCkgLSBUUklaRVBTNF9CT0NSX1BIWVMgKyBUUklaRVBTNF9CT0NSX1ZJUlQpCisjZGVmaW5lIEJDUl9WMlAoeCkJCSgoeCkgLSBUUklaRVBTNF9CT0NSX1ZJUlQgKyBUUklaRVBTNF9CT0NSX1BIWVMpCisKKyNkZWZpbmUgRENSX1AyVih4KQkJKCh4KSAtIFRSSVpFUFM0X0RJQ1JfUEhZUyArIFRSSVpFUFM0X0RJQ1JfVklSVCkKKyNkZWZpbmUgRENSX1YyUCh4KQkJKCh4KSAtIFRSSVpFUFM0X0RJQ1JfVklSVCArIFRSSVpFUFM0X0RJQ1JfUEhZUykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgQ29uWFNfQ0ZTUgkJKCooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopQ0ZTUl9QMlYoMHgwQzAwMDAwMCkpKQorI2RlZmluZSBDb25YU19CQ1IJCSgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUJDUl9QMlYoMHgwRTAwMDAwMCkpKQorI2RlZmluZSBDb25YU19EQ1IJCSgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKURDUl9QMlYoMHgwRjgwMDAwMCkpKQorI2Vsc2UKKyNkZWZpbmUgQ29uWFNfQ0ZTUgkJQ0ZTUl9QMlYoMHgwQzAwMDAwMCkKKyNkZWZpbmUgQ29uWFNfQkNSCQlCQ1JfUDJWKDB4MEUwMDAwMDApCisjZGVmaW5lIENvblhTX0RDUgkJRENSX1AyVigweDBGODAwMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgQ29uWFNfQ0ZTUl9CVkRfTUFTSwkweDAwMDMKKyNkZWZpbmUgQ29uWFNfQ0ZTUl9CVkQxCQkoMSA8PCAwKQorI2RlZmluZSBDb25YU19DRlNSX0JWRDIJCSgxIDw8IDEpCisjZGVmaW5lIENvblhTX0NGU1JfVlNfTUFTSwkweDAwMEMKKyNkZWZpbmUgQ29uWFNfQ0ZTUl9WUzEJCSgxIDw8IDIpCisjZGVmaW5lIENvblhTX0NGU1JfVlMyCQkoMSA8PCAzKQorI2RlZmluZSBDb25YU19DRlNSX1ZTXzVWCSgweDMgPDwgMikKKyNkZWZpbmUgQ29uWFNfQ0ZTUl9WU18zVjMJMHgwCisKKyNkZWZpbmUgQ29uWFNfQkNSX1MwX1BPV19FTjAJKDEgPDwgMCkKKyNkZWZpbmUgQ29uWFNfQkNSX1MwX1BPV19FTjEJKDEgPDwgMSkKKyNkZWZpbmUgQ29uWFNfQkNSX0xfRElTUAkoMSA8PCA0KQorI2RlZmluZSBDb25YU19CQ1JfQ0ZfQlVGX0VOCSgxIDw8IDUpCisjZGVmaW5lIENvblhTX0JDUl9DRl9SRVNFVAkoMSA8PCA3KQorI2RlZmluZSBDb25YU19CQ1JfUzBfVkNDXzNWMwkweDEKKyNkZWZpbmUgQ29uWFNfQkNSX1MwX1ZDQ181VjAJMHgyCisjZGVmaW5lIENvblhTX0JDUl9TMF9WUFBfMTJWCTB4NAorI2RlZmluZSBDb25YU19CQ1JfUzBfVlBQXzNWMwkweDgKKworI2RlZmluZSBDb25YU19JUkNSX01PREUJCSgxIDw8IDApCisjZGVmaW5lIENvblhTX0lSQ1JfU0QJCSgxIDw8IDEpCisKKyNlbmRpZiAvKiBfVFJJUEVQUzRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1kc2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1kc2MuaAppbmRleCA4NGFjYTYxLi5hMGExMjQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZHNjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWRzYy5oCkBAIC03LDI1ICs3LDIzIEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogUzNDMjQ0MCBTaWduYWwgRHJpdmUgU3RyZW5ndGggQ29udHJvbAotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgICAxMS1BdWctMjAwNCAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDI1LUF1Zy0yMDA0ICAgICBCSkQgICAgIEFkZGVkIHRoZSBfU0VMRUNUXyogZGVmcyBmb3IgdXNpbmcgd2l0aCBmdW5jdGlvbnMKKyAqIFMzQzI0NDAvUzNDMjQxMiBTaWduYWwgRHJpdmUgU3RyZW5ndGggQ29udHJvbAogKi8KIAogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19EU0NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfRFNDX0ggIjI0NDAtZHNjIgogCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTIpCisjZGVmaW5lIFMzQzI0MTJfRFNDMAkgICBTM0MyNDEwX0dQSU9SRUcoMHhkYykKKyNkZWZpbmUgUzNDMjQxMl9EU0MxCSAgIFMzQzI0MTBfR1BJT1JFRygweGUwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MCkKIAogI2RlZmluZSBTM0MyNDQwX0RTQzAJICAgUzNDMjQxMF9HUElPUkVHKDB4YzQpCiAjZGVmaW5lIFMzQzI0NDBfRFNDMQkgICBTM0MyNDEwX0dQSU9SRUcoMHhjOCkKIAotI2RlZmluZSBTM0MyNDEyX0RTQzAJICAgUzNDMjQxMF9HUElPUkVHKDB4ZGMpCi0jZGVmaW5lIFMzQzI0MTJfRFNDMQkgICBTM0MyNDEwX0dQSU9SRUcoMHhlMCkKLQogI2RlZmluZSBTM0MyNDQwX1NFTEVDVF9EU0MwICgwKQogI2RlZmluZSBTM0MyNDQwX1NFTEVDVF9EU0MxICgxPDwzMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2J1Zy5oIGIvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCmluZGV4IDdmYjAyMTMuLjBlMzZmZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01BUk1fQlVHX0gKICNkZWZpbmUgX0FTTUFSTV9CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9idWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYnVncy5oCmluZGV4IDRjODBlYzUuLmNhNTRlYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2J1Z3MuaApAQCAtMTAsOCArMTAsMTIgQEAKICNpZm5kZWYgX19BU01fQlVHU19ICiAjZGVmaW5lIF9fQVNNX0JVR1NfSAogCisjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHZvaWQgY2hlY2tfd3JpdGVidWZmZXJfYnVncyh2b2lkKTsKIAogI2RlZmluZSBjaGVja19idWdzKCkgY2hlY2tfd3JpdGVidWZmZXJfYnVncygpCisjZWxzZQorI2RlZmluZSBjaGVja19idWdzKCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oIGIvaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCmluZGV4IGY4ZWEyZGUuLjRjMjg4NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKQEAgLTUwLDYgKzUwLDggQEAKICNkZWZpbmUgZG9tYWluX3ZhbChkb20sdHlwZSkJKCh0eXBlKSA8PCAoMiooZG9tKSkpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIHNldF9kb21haW4oeCkJCQkJCVwKIAlkbyB7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCkBAIC02Niw1ICs2OCwxMCBAQAogCXNldF9kb21haW4odGhyZWFkLT5jcHVfZG9tYWluKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKKyNlbHNlCisjZGVmaW5lIHNldF9kb21haW4oeCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbW9kaWZ5X2RvbWFpbihkb20sdHlwZSkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKICNlbmRpZgogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9keW50aWNrLmggYi9pbmNsdWRlL2FzbS1hcm0vZHludGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZmFiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZHludGljay5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfQVNNQVJNX0RZTlRJQ0tfSAorI2RlZmluZSBfQVNNQVJNX0RZTlRJQ0tfSAorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjZW5kaWYgLyogX0FTTUFSTV9EWU5USUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLWFybS9mbG9wcHkuaAppbmRleCBhYTBjOGQyLi41NGI1YWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Zsb3BweS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmIoKHBvcnQpKQogI2RlZmluZSBmZF9yZXF1ZXN0X2lycSgpCXJlcXVlc3RfaXJxKElSUV9GTE9QUFlESVNLLGZsb3BweV9pbnRlcnJ1cHQsXAotCQkJCQkgICAgU0FfSU5URVJSVVBULCJmbG9wcHkiLE5VTEwpCisJCQkJCSAgICBJUlFGX0RJU0FCTEVELCJmbG9wcHkiLE5VTEwpCiAjZGVmaW5lIGZkX2ZyZWVfaXJxKCkJCWZyZWVfaXJxKElSUV9GTE9QUFlESVNLLE5VTEwpCiAjZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkJZGlzYWJsZV9pcnEoSVJRX0ZMT1BQWURJU0spCiAjZGVmaW5lIGZkX2VuYWJsZV9pcnEoKQkJZW5hYmxlX2lycShJUlFfRkxPUFBZRElTSykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCmluZGV4IDEzMmMzYzUuLjZhZjRlNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaApAQCAtNzIsNiArNzIsMTQgQEAKIAogI2RlZmluZSBGUF9TSVpFIChzaXplb2YodW5pb24gZnBfc3RhdGUpIC8gc2l6ZW9mKGludCkpCiAKK3N0cnVjdCBjcnVuY2hfc3RhdGUgeworCXVuc2lnbmVkIGludAltdmR4WzE2XVsyXTsKKwl1bnNpZ25lZCBpbnQJbXZheFs0XVszXTsKKwl1bnNpZ25lZCBpbnQJZHNwc2NbMl07Cit9OworCisjZGVmaW5lIENSVU5DSF9TSVpFCXNpemVvZihzdHJ1Y3QgY3J1bmNoX3N0YXRlKQorCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4NTY5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9od19pcnEuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogTm90aGluZyB0byBzZWUgaGVyZSB5ZXQKKyAqLworI2lmbmRlZiBfQVJDSF9BUk1fSFdfSVJRX0gKKyNkZWZpbmUgX0FSQ0hfQVJNX0hXX0lSUV9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX05PX0lETEVfSFopCisjIGluY2x1ZGUgPGFzbS9keW50aWNrLmg+CisjIGRlZmluZSBoYW5kbGVfZHluYW1pY190aWNrKGFjdGlvbikJCQkJCVwKKwlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9USU1FUikgJiYgc3lzdGVtX3RpbWVyLT5keW5fdGljaykgewlcCisJCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwkJCQlcCisJCWlmIChzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5zdGF0ZSAmIERZTl9USUNLX0VOQUJMRUQpCVwKKwkJCXN5c3RlbV90aW1lci0+ZHluX3RpY2stPmhhbmRsZXIoaXJxLCAwLCByZWdzKTsJXAorCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwkJCQlcCisJfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2lycS5oCmluZGV4IDY2ZTY3ZTYuLjI4M2FmNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaXJxLmgKQEAgLTIxLDE4ICsyMSwxMyBAQAogCiBzdHJ1Y3QgaXJxYWN0aW9uOwogCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0KIC8qCi0gKiBUaGVzZSBjb3JyZXNwb25kIHdpdGggdGhlIFNBX1RSSUdHRVJfKiBkZWZpbmVzLCBhbmQgdGhlcmVmb3JlIHRoZQotICogSU9SRVNPVVJDRV9JUlFfKiBkZWZpbmVzLgorICogTWlncmF0aW9uIGhlbHBlcnMKICAqLwotI2RlZmluZSBfX0lSUVRfUklTRURHRQkoMSA8PCAwKQotI2RlZmluZSBfX0lSUVRfRkFMRURHRQkoMSA8PCAxKQotI2RlZmluZSBfX0lSUVRfSElHSExWTAkoMSA8PCAyKQotI2RlZmluZSBfX0lSUVRfTE9XTFZMCSgxIDw8IDMpCisjZGVmaW5lIF9fSVJRVF9GQUxFREdFCUlSUV9UWVBFX0VER0VfRkFMTElORworI2RlZmluZSBfX0lSUVRfUklTRURHRQlJUlFfVFlQRV9FREdFX1JJU0lORworI2RlZmluZSBfX0lSUVRfTE9XTFZMCUlSUV9UWVBFX0xFVkVMX0xPVworI2RlZmluZSBfX0lSUVRfSElHSExWTAlJUlFfVFlQRV9MRVZFTF9ISUdICiAKICNkZWZpbmUgSVJRVF9OT0VER0UJKDApCiAjZGVmaW5lIElSUVRfUklTSU5HCShfX0lSUVRfUklTRURHRSkKQEAgLTQwLDEyICszNSw3IEBACiAjZGVmaW5lIElSUVRfQk9USEVER0UJKF9fSVJRVF9SSVNFREdFfF9fSVJRVF9GQUxFREdFKQogI2RlZmluZSBJUlFUX0xPVwkoX19JUlFUX0xPV0xWTCkKICNkZWZpbmUgSVJRVF9ISUdICShfX0lSUVRfSElHSExWTCkKLSNkZWZpbmUgSVJRVF9QUk9CRQkoMSA8PCA0KQotCi1pbnQgc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKTsKLXZvaWQgZGlzYWJsZV9pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxKTsKLXZvaWQgZW5hYmxlX2lycV93YWtlKHVuc2lnbmVkIGludCBpcnEpOwotaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQsIHN0cnVjdCBpcnFhY3Rpb24gKik7CisjZGVmaW5lIElSUVRfUFJPQkUJSVJRX1RZUEVfUFJPQkUKIAogZXh0ZXJuIHZvaWQgbWlncmF0ZV9pcnFzKHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2lycS5oCmluZGV4IGQ0ZDQyMGUuLjEzMWYzMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL2lycS5oCkBAIC0xMCwxMTQgKzEwLDMyIEBACiAjaWZuZGVmIF9fQVNNX0FSTV9NQUNIX0lSUV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9NQUNIX0lSUV9ICiAKLXN0cnVjdCBpcnFkZXNjOwotc3RydWN0IHB0X3JlZ3M7CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKIHN0cnVjdCBzZXFfZmlsZTsKIAotdHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxZGVzYyAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLXR5cGVkZWYgdm9pZCAoKmlycV9jb250cm9sX3QpKHVuc2lnbmVkIGludCk7Ci0KLXN0cnVjdCBpcnFjaGlwIHsKLQkvKgotCSAqIEFja25vd2xlZGdlIHRoZSBJUlEuCi0JICogSWYgdGhpcyBpcyBhIGxldmVsLWJhc2VkIElSUSwgdGhlbiBpdCBpcyBleHBlY3RlZCB0byBtYXNrIHRoZSBJUlEKLQkgKiBhcyB3ZWxsLgotCSAqLwotCXZvaWQgKCphY2spKHVuc2lnbmVkIGludCk7Ci0JLyoKLQkgKiBNYXNrIHRoZSBJUlEgaW4gaGFyZHdhcmUuCi0JICovCi0Jdm9pZCAoKm1hc2spKHVuc2lnbmVkIGludCk7Ci0JLyoKLQkgKiBVbm1hc2sgdGhlIElSUSBpbiBoYXJkd2FyZS4KLQkgKi8KLQl2b2lkICgqdW5tYXNrKSh1bnNpZ25lZCBpbnQpOwotCS8qCi0JICogQXNrIHRoZSBoYXJkd2FyZSB0byByZS10cmlnZ2VyIHRoZSBJUlEuCi0JICogTm90ZTogVGhpcyBtZXRob2QgX211c3RfIF9ub3RfIGNhbGwgdGhlIGludGVycnVwdCBoYW5kbGVyLgotCSAqIElmIHlvdSBhcmUgdW5hYmxlIHRvIHJldHJpZ2dlciB0aGUgaW50ZXJydXB0LCBkbyBub3QKLQkgKiBwcm92aWRlIGEgZnVuY3Rpb24sIG9yIGlmIHlvdSBkbywgcmV0dXJuIG5vbi16ZXJvLgotCSAqLwotCWludCAoKnJldHJpZ2dlcikodW5zaWduZWQgaW50KTsKLQkvKgotCSAqIFNldCB0aGUgdHlwZSBvZiB0aGUgSVJRLgotCSAqLwotCWludCAoKnNldF90eXBlKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci0JLyoKLQkgKiBTZXQgd2FrZXVwLWVuYWJsZSBvbiB0aGUgc2VsZWN0ZWQgSVJRCi0JICovCi0JaW50ICgqc2V0X3dha2UpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIFJvdXRlIGFuIGludGVycnVwdCB0byBhIENQVQotCSAqLwotCXZvaWQgKCpzZXRfY3B1KShzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSk7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBpcnFkZXNjIHsKLQlpcnFfaGFuZGxlcl90CWhhbmRsZTsKLQlzdHJ1Y3QgaXJxY2hpcAkqY2hpcDsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0Jc3RydWN0IGxpc3RfaGVhZCBwZW5kOwotCXZvaWQgX19pb21lbQkqYmFzZTsKLQl2b2lkCQkqZGF0YTsKLQl1bnNpZ25lZCBpbnQJZGlzYWJsZV9kZXB0aDsKLQotCXVuc2lnbmVkIGludAl0cmlnZ2VyZWQ6IDE7CQkvKiBJUlEgaGFzIG9jY3VycmVkCSAgICAgICovCi0JdW5zaWduZWQgaW50CXJ1bm5pbmcgIDogMTsJCS8qIElSUSBpcyBydW5uaW5nICAgICAgICAgICAgICovCi0JdW5zaWduZWQgaW50CXBlbmRpbmcgIDogMTsJCS8qIElSUSBpcyBwZW5kaW5nCSAgICAgICovCi0JdW5zaWduZWQgaW50CXByb2JpbmcgIDogMTsJCS8qIElSUSBpbiB1c2UgZm9yIGEgcHJvYmUgICAgICovCi0JdW5zaWduZWQgaW50CXByb2JlX29rIDogMTsJCS8qIElSUSBjYW4gYmUgdXNlZCBmb3IgcHJvYmUgICovCi0JdW5zaWduZWQgaW50CXZhbGlkICAgIDogMTsJCS8qIElSUSBjbGFpbWFibGUJICAgICAgKi8KLQl1bnNpZ25lZCBpbnQJbm9hdXRvZW5hYmxlIDogMTsJLyogZG9uJ3QgYXV0b21hdGljYWxseSBlbmFibGUgSVJRICovCi0JdW5zaWduZWQgaW50CXVudXNlZCAgIDoyNTsKLQotCXVuc2lnbmVkIGludAlpcnFzX3VuaGFuZGxlZDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NkaXI7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza190CWFmZmluaXR5OwotCXVuc2lnbmVkIGludAljcHU7Ci0jZW5kaWYKLQotCS8qCi0JICogSVJRIGxvY2sgZGV0ZWN0aW9uCi0JICovCi0JdW5zaWduZWQgaW50CWxja19jbnQ7Ci0JdW5zaWduZWQgaW50CWxja19wYzsKLQl1bnNpZ25lZCBpbnQJbGNrX2ppZjsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgaXJxZGVzYyBpcnFfZGVzY1tdOwotCi0vKgotICogSGVscGZ1bCBpbmxpbmUgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaXJxIGRlc2NyaXB0b3IgaGFuZGxlcnMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXNjX2hhbmRsZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWRlc2MtPmhhbmRsZShpcnEsIGRlc2MsIHJlZ3MpOwotfQotCiAvKgogICogVGhpcyBpcyBpbnRlcm5hbC4gIERvIG5vdCB1c2UgaXQuCiAgKi8KIGV4dGVybiB2b2lkICgqaW5pdF9hcmNoX2lycSkodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X0ZJUSh2b2lkKTsKIGV4dGVybiBpbnQgc2hvd19maXFfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKLXZvaWQgX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgaXJxX2hhbmRsZXJfdCwgaW50KTsKIAogLyoKLSAqIEV4dGVybmFsIHN0dWZmLgorICogRnVuY3Rpb24gd3JhcHBlcnMKICAqLwotI2RlZmluZSBzZXRfaXJxX2hhbmRsZXIoaXJxLGhhbmRsZXIpCQlfX3NldF9pcnFfaGFuZGxlcihpcnEsaGFuZGxlciwwKQotI2RlZmluZSBzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsaGFuZGxlcikJX19zZXRfaXJxX2hhbmRsZXIoaXJxLGhhbmRsZXIsMSkKLSNkZWZpbmUgc2V0X2lycV9kYXRhKGlycSxkKQkJCWRvIHsgaXJxX2Rlc2NbaXJxXS5kYXRhID0gZDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0X2lycV9jaGlwZGF0YShpcnEsZCkJCQlkbyB7IGlycV9kZXNjW2lycV0uYmFzZSA9IGQ7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGdldF9pcnFfY2hpcGRhdGEoaXJxKQkJCShpcnFfZGVzY1tpcnFdLmJhc2UpCisjZGVmaW5lIHNldF9pcnFfY2hpcGRhdGEoaXJxLCBkKQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGQpCisjZGVmaW5lIGdldF9pcnFfY2hpcGRhdGEoaXJxKQkJZ2V0X2lycV9jaGlwX2RhdGEoaXJxKQogCi12b2lkIHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxY2hpcCAqKTsKKy8qCisgKiBPYnNvbGV0ZSBpbmxpbmUgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaXJxIGRlc2NyaXB0b3IgaGFuZGxlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXNjX2hhbmRsZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjLCByZWdzKTsKK30KKwogdm9pZCBzZXRfaXJxX2ZsYWdzKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbGFncyk7CiAKICNkZWZpbmUgSVJRRl9WQUxJRAkoMSA8PCAwKQpAQCAtMTI1LDEyICs0MywyNSBAQAogI2RlZmluZSBJUlFGX05PQVVUT0VOCSgxIDw8IDIpCiAKIC8qCi0gKiBCdWlsdC1pbiBJUlEgaGFuZGxlcnMuCisgKiBUaGlzIGlzIGZvciBlYXN5IG1pZ3JhdGlvbiwgYnV0IHNob3VsZCBiZSBjaGFuZ2VkIGluIHRoZSBzb3VyY2UKICAqLwotdm9pZCBkb19sZXZlbF9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXZvaWQgZG9fZWRnZV9JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWRlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXZvaWQgZG9fc2ltcGxlX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotdm9pZCBkb19iYWRfSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFkZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci12b2lkIGR1bW15X21hc2tfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKyNkZWZpbmUgZG9fbGV2ZWxfSVJRCWhhbmRsZV9sZXZlbF9pcnEKKyNkZWZpbmUgZG9fZWRnZV9JUlEJaGFuZGxlX2VkZ2VfaXJxCisjZGVmaW5lIGRvX3NpbXBsZV9JUlEJaGFuZGxlX3NpbXBsZV9pcnEKKyNkZWZpbmUgaXJxZGVzYwkJaXJxX2Rlc2MKKyNkZWZpbmUgaXJxY2hpcAkJaXJxX2NoaXAKKworI2RlZmluZSBkb19iYWRfSVJRKGlycSxkZXNjLHJlZ3MpCQkJXAorZG8gewkJCQkJCQlcCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsJCQkJXAorCWhhbmRsZV9iYWRfaXJxKGlycSwgZGVzYywgcmVncyk7CQlcCisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwkJCVwKK30gd2hpbGUoMCkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaXJxX2Vycl9jb3VudDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfYmFkX2lycShpbnQgaXJxKQoreworCWlycV9lcnJfY291bnQrKzsKK30KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL21hcC5oCmluZGV4IGU4ZWE2N2MuLmNlZjUzNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL21hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL21hcC5oCkBAIC0xNiw4ICsxNiw2IEBACiAJdW5zaWduZWQgaW50IHR5cGU7CiB9OwogCi1zdHJ1Y3QgbWVtaW5mbzsKLQogI2RlZmluZSBNVF9ERVZJQ0UJCTAKICNkZWZpbmUgTVRfQ0FDSEVDTEVBTgkJMQogI2RlZmluZSBNVF9NSU5JQ0xFQU4JCTIKQEAgLTI4LDcgKzI2LDggQEAKICNkZWZpbmUgTVRfSVhQMjAwMF9ERVZJQ0UJNwogI2RlZmluZSBNVF9OT05TSEFSRURfREVWSUNFCTgKIAotZXh0ZXJuIHZvaWQgY3JlYXRlX21lbW1hcF9ob2xlcyhzdHJ1Y3QgbWVtaW5mbyAqKTsKLWV4dGVybiB2b2lkIG1lbXRhYmxlX2luaXQoc3RydWN0IG1lbWluZm8gKik7CisjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHZvaWQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgc2V0dXBfaW9fZGVzYyh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIGlvdGFibGVfaW5pdChtYXAsbnVtKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3BjaS5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvcGNpLmgKaW5kZXggMjVkNTQwZS4uOTIzZTBjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21hY2gvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvcGNpLmgKQEAgLTI4LDcgKzI4LDcgQEAKIHN0cnVjdCBwY2lfc3lzX2RhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlpbnQJCWJ1c25yOwkJLyogcHJpbWFyeSBidXMgbnVtYmVyCQkJKi8KLQl1bnNpZ25lZCBsb25nCW1lbV9vZmZzZXQ7CS8qIGJ1cy0+Y3B1IG1lbW9yeSBtYXBwaW5nIG9mZnNldAkqLworCXU2NAkJbWVtX29mZnNldDsJLyogYnVzLT5jcHUgbWVtb3J5IG1hcHBpbmcgb2Zmc2V0CSovCiAJdW5zaWduZWQgbG9uZwlpb19vZmZzZXQ7CS8qIGJ1cy0+Y3B1IElPIG1hcHBpbmcgb2Zmc2V0CQkqLwogCXN0cnVjdCBwY2lfYnVzCSpidXM7CQkvKiBQQ0kgYnVzCQkJCSovCiAJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZVszXTsJLyogUHJpbWFyeSBQQ0kgYnVzIHJlc291cmNlcwkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaAppbmRleCA5ZjI4MDczLi5kZWUwYmMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oCkBAIC02OSw2ICs2OSw3IEBACiAvKgogICogS2VybmVsIHRpbWUga2VlcGluZyBzdXBwb3J0LgogICovCitzdHJ1Y3QgdGltZXNwZWM7CiBleHRlcm4gaW50ICgqc2V0X3J0Yykodm9pZCk7CiBleHRlcm4gdm9pZCBzYXZlX3RpbWVfZGVsdGEoc3RydWN0IHRpbWVzcGVjICpkZWx0YSwgc3RydWN0IHRpbWVzcGVjICpydGMpOwogZXh0ZXJuIHZvaWQgcmVzdG9yZV90aW1lX2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEsIHN0cnVjdCB0aW1lc3BlYyAqcnRjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAppbmRleCA3MzFlMzIxLi45MWQ1MzZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCkBAIC0yLDYgKzIsNyBAQAogICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBtb2RpZmljYXRpb24gZm9yIG5vbW11LCBIeW9rIFMuIENob2ksIDIwMDQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI2LDYgKzI3LDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAorI2lmZGVmIENPTkZJR19NTVUKKwogI2lmbmRlZiBUQVNLX1NJWkUKIC8qCiAgKiBUQVNLX1NJWkUgLSB0aGUgbWF4aW11bSBzaXplIG9mIGEgdXNlciBzcGFjZSB0YXNrLgpAQCAtNDgsNiArNTEsNjUgQEAKICNlbmRpZgogCiAvKgorICogVGhlIG1vZHVsZSBzcGFjZSBsaXZlcyBiZXR3ZWVuIHRoZSBhZGRyZXNzZXMgZ2l2ZW4gYnkgVEFTS19TSVpFCisgKiBhbmQgUEFHRV9PRkZTRVQgLSBpdCBtdXN0IGJlIHdpdGhpbiAzMk1CIG9mIHRoZSBrZXJuZWwgdGV4dC4KKyAqLworI2RlZmluZSBNT0RVTEVfRU5ECQkoUEFHRV9PRkZTRVQpCisjZGVmaW5lIE1PRFVMRV9TVEFSVAkJKE1PRFVMRV9FTkQgLSAxNioxMDQ4NTc2KQorCisjaWYgVEFTS19TSVpFID4gTU9EVUxFX1NUQVJUCisjZXJyb3IgVG9wIG9mIHVzZXIgc3BhY2UgY2xhc2hlcyB3aXRoIHN0YXJ0IG9mIG1vZHVsZSBzcGFjZQorI2VuZGlmCisKKy8qCisgKiBUaGUgWElQIGtlcm5lbCBnZXRzIG1hcHBlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBtb2R1bGUgdm0gYXJlYS4KKyAqIFNpbmNlIHdlIHVzZSBzZWN0aW9ucyB0byBtYXAgaXQsIHRoaXMgbWFjcm8gcmVwbGFjZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqIHdpdGggaXRzIHZpcnR1YWwgYWRkcmVzcyB3aGlsZSBrZWVwaW5nIG9mZnNldCBmcm9tIHRoZSBiYXNlIHNlY3Rpb24uCisgKi8KKyNkZWZpbmUgWElQX1ZJUlRfQUREUihwaHlzYWRkcikgIChNT0RVTEVfU1RBUlQgKyAoKHBoeXNhZGRyKSAmIDB4MDAwZmZmZmYpKQorCisvKgorICogQWxsb3cgMTZNQi1hbGlnbmVkIGlvcmVtYXAgcGFnZXMKKyAqLworI2RlZmluZSBJT1JFTUFQX01BWF9PUkRFUgkyNAorCisjZWxzZSAvKiBDT05GSUdfTU1VICovCisKKy8qCisgKiBUaGUgbGltaXRhdGlvbiBvZiB1c2VyIHRhc2sgc2l6ZSBjYW4gZ3JvdyB1cCB0byB0aGUgZW5kIG9mIGZyZWUgcmFtIHJlZ2lvbi4KKyAqIEl0IGlzIGRpZmZpY3VsdCB0byBkZWZpbmUgYW5kIHBlcmhhcHMgd2lsbCBuZXZlciBtZWV0IHRoZSBvcmlnaW5hbCBtZWFuaW5nCisgKiBvZiB0aGlzIGRlZmluZSB0aGF0IHdhcyBtZWFudCB0by4KKyAqIEZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyByZWZlcmVuY2UgZm9yIHRoaXMgaW4gbm9NTVUgbW9kZSwgZm9yIG5vdy4KKyAqLworI2lmbmRlZiBUQVNLX1NJWkUKKyNkZWZpbmUgVEFTS19TSVpFCQkoQ09ORklHX0RSQU1fU0laRSkKKyNlbmRpZgorCisjaWZuZGVmIFRBU0tfVU5NQVBQRURfQkFTRQorI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJVUwoMHgwMDAwMDAwMCkKKyNlbmRpZgorCisjaWZuZGVmIFBIWVNfT0ZGU0VUCisjZGVmaW5lIFBIWVNfT0ZGU0VUIAkJKENPTkZJR19EUkFNX0JBU0UpCisjZW5kaWYKKworI2lmbmRlZiBFTkRfTUVNCisjZGVmaW5lIEVORF9NRU0gICAgIAkJKENPTkZJR19EUkFNX0JBU0UgKyBDT05GSUdfRFJBTV9TSVpFKQorI2VuZGlmCisKKyNpZm5kZWYgUEFHRV9PRkZTRVQKKyNkZWZpbmUgUEFHRV9PRkZTRVQJCShQSFlTX09GRlNFVCkKKyNlbmRpZgorCisvKgorICogVGhlIG1vZHVsZSBjYW4gYmUgYXQgYW55IHBsYWNlIGluIHJhbSBpbiBub21tdSBtb2RlLgorICovCisjZGVmaW5lIE1PRFVMRV9FTkQJCShFTkRfTUVNKQorI2RlZmluZSBNT0RVTEVfU1RBUlQJCShQSFlTX09GRlNFVCkKKworI2VuZGlmIC8qICFDT05GSUdfTU1VICovCisKKy8qCiAgKiBTaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24uICBNdXN0IGJlIG11bHRpcGxlIG9mIDJNLAogICogYmV0d2VlbiAyTUIgYW5kIDE0TUIgaW5jbHVzaXZlLgogICovCkBAIC03MSwyNCArMTMzLDYgQEAKICNkZWZpbmUJX19waHlzX3RvX3BmbihwYWRkcikJKChwYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUJX19wZm5fdG9fcGh5cyhwZm4pCSgocGZuKSA8PCBQQUdFX1NISUZUKQogCi0vKgotICogVGhlIG1vZHVsZSBzcGFjZSBsaXZlcyBiZXR3ZWVuIHRoZSBhZGRyZXNzZXMgZ2l2ZW4gYnkgVEFTS19TSVpFCi0gKiBhbmQgUEFHRV9PRkZTRVQgLSBpdCBtdXN0IGJlIHdpdGhpbiAzMk1CIG9mIHRoZSBrZXJuZWwgdGV4dC4KLSAqLwotI2RlZmluZSBNT0RVTEVfRU5ECShQQUdFX09GRlNFVCkKLSNkZWZpbmUgTU9EVUxFX1NUQVJUCShNT0RVTEVfRU5EIC0gMTYqMTA0ODU3NikKLQotI2lmIFRBU0tfU0laRSA+IE1PRFVMRV9TVEFSVAotI2Vycm9yIFRvcCBvZiB1c2VyIHNwYWNlIGNsYXNoZXMgd2l0aCBzdGFydCBvZiBtb2R1bGUgc3BhY2UKLSNlbmRpZgotCi0vKgotICogVGhlIFhJUCBrZXJuZWwgZ2V0cyBtYXBwZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbW9kdWxlIHZtIGFyZWEuCi0gKiBTaW5jZSB3ZSB1c2Ugc2VjdGlvbnMgdG8gbWFwIGl0LCB0aGlzIG1hY3JvIHJlcGxhY2VzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCi0gKiB3aXRoIGl0cyB2aXJ0dWFsIGFkZHJlc3Mgd2hpbGUga2VlcGluZyBvZmZzZXQgZnJvbSB0aGUgYmFzZSBzZWN0aW9uLgotICovCi0jZGVmaW5lIFhJUF9WSVJUX0FERFIocGh5c2FkZHIpICAoTU9EVUxFX1NUQVJUICsgKChwaHlzYWRkcikgJiAweDAwMGZmZmZmKSkKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tbXUuaCBiL2luY2x1ZGUvYXNtLWFybS9tbXUuaAppbmRleCBhNDU3Y2I3Li5mZTJhMjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbW11LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21tdS5oCkBAIC0xLDEwICsxLDEzIEBACiAjaWZuZGVmIF9fQVJNX01NVV9ICiAjZGVmaW5lIF9fQVJNX01NVV9ICiAKKyNpZmRlZiBDT05GSUdfTU1VCisKIHR5cGVkZWYgc3RydWN0IHsKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgogCXVuc2lnbmVkIGludCBpZDsKICNlbmRpZgorCXVuc2lnbmVkIGludCBrdm1fc2VxOwogfSBtbV9jb250ZXh0X3Q7CiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgpAQCAtMTMsNCArMTYsMTggQEAKICNkZWZpbmUgQVNJRChtbSkJKDApCiAjZW5kaWYKIAorI2Vsc2UKKworLyoKKyAqIEZyb20gbm9tbXUuaDoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+CisgKiAgbW9kaWZpZWQgZm9yIDIuNiBieSBIeW9rIFMuIENob2kgPGh5b2suY2hvaUBzYW1zdW5nLmNvbT4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB2bV9saXN0X3N0cnVjdAkqdm1saXN0OworCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1hcm0vbW11X2NvbnRleHQuaAppbmRleCA4MWM1OWZhLi5kMWE2NWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbW11X2NvbnRleHQuaApAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CiAKK3ZvaWQgX19jaGVja19rdm1fc2VxKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKwogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CiAKIC8qCkBAIC00NSwxMyArNDcsMjEgQEAKIHsKIAlpZiAodW5saWtlbHkoKG1tLT5jb250ZXh0LmlkIF4gY3B1X2xhc3RfYXNpZCkgPj4gQVNJRF9CSVRTKSkKIAkJX19uZXdfY29udGV4dChtbSk7CisKKwlpZiAodW5saWtlbHkobW0tPmNvbnRleHQua3ZtX3NlcSAhPSBpbml0X21tLmNvbnRleHQua3ZtX3NlcSkpCisJCV9fY2hlY2tfa3ZtX3NlcShtbSk7CiB9CiAKICNkZWZpbmUgaW5pdF9uZXdfY29udGV4dCh0c2ssbW0pCShfX2luaXRfbmV3X2NvbnRleHQodHNrLG1tKSwwKQogCiAjZWxzZQogCi0jZGVmaW5lIGNoZWNrX2NvbnRleHQobW0pCQlkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAodW5saWtlbHkobW0tPmNvbnRleHQua3ZtX3NlcSAhPSBpbml0X21tLmNvbnRleHQua3ZtX3NlcSkpCisJCV9fY2hlY2tfa3ZtX3NlcShtbSk7Cit9CisKICNkZWZpbmUgaW5pdF9uZXdfY29udGV4dCh0c2ssbW0pCTAKIAogI2VuZGlmCkBAIC04Miw2ICs5Miw3IEBACiBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKIAkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogeworI2lmZGVmIENPTkZJR19NTVUKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKHByZXYgIT0gbmV4dCkgewpAQCAtOTEsNiArMTAyLDcgQEAKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKIAkJCWNwdV9jbGVhcihjcHUsIHByZXYtPmNwdV92bV9tYXNrKTsKIAl9CisjZW5kaWYKIH0KIAogI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BhZ2Utbm9tbXUuaCBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLW5vbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiY2FkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLW5vbW11LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGFnZS1ub21tdS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBIeW9rIFMuIENob2kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9BU01BUk1fUEFHRV9OT01NVV9ICisjZGVmaW5lIF9BU01BUk1fUEFHRV9OT01NVV9ICisKKyNpZiAhZGVmaW5lZChDT05GSUdfU01BTExfVEFTS1MpICYmIFBBR0VfU0hJRlQgPCAxMworI2RlZmluZSBLVEhSRUFEX1NJWkUgKDgxOTIpCisjZWxzZQorI2RlZmluZSBLVEhSRUFEX1NJWkUgUEFHRV9TSVpFCisjZW5kaWYKKyAKKyNkZWZpbmUgZ2V0X3VzZXJfcGFnZSh2YWRkcikJCV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKQorI2RlZmluZSBmcmVlX3VzZXJfcGFnZShwYWdlLCBhZGRyKQlmcmVlX3BhZ2UoYWRkcikKKworI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCgocGFnZSksIDAsIFBBR0VfU0laRSkKKyNkZWZpbmUgY29weV9wYWdlKHRvLGZyb20pCW1lbWNweSgodG8pLCAoZnJvbSksIFBBR0VfU0laRSkKKworI2RlZmluZSBjbGVhcl91c2VyX3BhZ2UocGFnZSwgdmFkZHIsIHBnKQljbGVhcl9wYWdlKHBhZ2UpCisjZGVmaW5lIGNvcHlfdXNlcl9wYWdlKHRvLCBmcm9tLCB2YWRkciwgcGcpCWNvcHlfcGFnZSh0bywgZnJvbSkKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2UgdXNlIG9mIEMgdHlwZS1jaGVja2luZy4uCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwbWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdFsyXTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ3Byb3RfdDsKKworI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKHgpCisjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoeCkKKyNkZWZpbmUgcGdkX3ZhbCh4KQkoKHgpWzBdKQorI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpCisKKyNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KQorI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKHgpCisjZGVmaW5lIF9fcGdwcm90KHgpICAgICAoeCkKKworLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCisjZGVmaW5lIFBBR0VfQUxJR04oYWRkcikJKCgoYWRkcikrUEFHRV9TSVpFLTEpJlBBR0VfTUFTSykKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaAppbmRleCA2NmNmZWI1Li42M2QxMmYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKQEAgLTIzLDYgKzIzLDEyIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpZm5kZWYgQ09ORklHX01NVQorCisjaW5jbHVkZSAicGFnZS1ub21tdS5oIgorCisjZWxzZQorCiAjaW5jbHVkZSA8YXNtL2dsdWUuaD4KIAogLyoKQEAgLTE3MSw2ICsxNzcsOCBAQAogLyogdGhlIHVwcGVyLW1vc3QgcGFnZSB0YWJsZSBwb2ludGVyICovCiBleHRlcm4gcG1kX3QgKnRvcF9wbWQ7CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL3BnYWxsb2MuaAppbmRleCBjNGFjMmU2Li40ZDQzOTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wZ2FsbG9jLmgKQEAgLTE2LDYgKzE2LDEwIEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQkJZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX01NVQorCiAjZGVmaW5lIF9QQUdFX1VTRVJfVEFCTEUJKFBNRF9UWVBFX1RBQkxFIHwgUE1EX0JJVDQgfCBQTURfRE9NQUlOKERPTUFJTl9VU0VSKSkKICNkZWZpbmUgX1BBR0VfS0VSTkVMX1RBQkxFCShQTURfVFlQRV9UQUJMRSB8IFBNRF9CSVQ0IHwgUE1EX0RPTUFJTihET01BSU5fS0VSTkVMKSkKIApAQCAtMzIsOCArMzYsNiBAQAogI2RlZmluZSBwZ2RfYWxsb2MobW0pCQkJZ2V0X3BnZF9zbG93KG1tKQogI2RlZmluZSBwZ2RfZnJlZShwZ2QpCQkJZnJlZV9wZ2Rfc2xvdyhwZ2QpCiAKLSNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJCWRvIHsgfSB3aGlsZSAoMCkKLQogLyoKICAqIEFsbG9jYXRlIG9uZSBQVEUgdGFibGUuCiAgKgpAQCAtMTI2LDQgKzEyOCw2IEBACiAJX19wbWRfcG9wdWxhdGUocG1kcCwgcGFnZV90b19wZm4ocHRlcCkgPDwgUEFHRV9TSElGVCB8IF9QQUdFX1VTRVJfVEFCTEUpOwogfQogCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLWh3ZGVmLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS1od2RlZi5oCmluZGV4IDFiYzFmOTkuLmYzYjUxMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLWh3ZGVmLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtaHdkZWYuaApAQCAtMjgsNiArMjgsNyBAQAogICovCiAjZGVmaW5lIFBNRF9TRUNUX0JVRkZFUkFCTEUJKDEgPDwgMikKICNkZWZpbmUgUE1EX1NFQ1RfQ0FDSEVBQkxFCSgxIDw8IDMpCisjZGVmaW5lIFBNRF9TRUNUX1hOCQkoMSA8PCA0KQkvKiB2NiAqLwogI2RlZmluZSBQTURfU0VDVF9BUF9XUklURQkoMSA8PCAxMCkKICNkZWZpbmUgUE1EX1NFQ1RfQVBfUkVBRAkoMSA8PCAxMSkKICNkZWZpbmUgUE1EX1NFQ1RfVEVYKHgpCQkoKHgpIDw8IDEyKQkvKiB2NSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtbm9tbXUuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLW5vbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzMzIyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLW5vbW11LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtbm9tbXUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgIEh5b2sgUy4gQ2hvaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0FTTUFSTV9QR1RBQkxFX05PTU1VX0gKKyNkZWZpbmUgX0FTTUFSTV9QR1RBQkxFX05PTU1VX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIFRyaXZpYWwgcGFnZSB0YWJsZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKQkoMSkKKyNkZWZpbmUgcGdkX25vbmUocGdkKQkJKDApCisjZGVmaW5lIHBnZF9iYWQocGdkKQkJKDApCisjZGVmaW5lIHBnZF9jbGVhcihwZ2RwKQorI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisjZGVmaW5lCXBtZF9vZmZzZXQoYSwgYikJKCh2b2lkICopMCkKKy8qIEZJWE1FICovCisvKgorICogUE1EX1NISUZUIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBjYW4gbWFwCisgKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAKKyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkJMjEKKworI2RlZmluZSBQR0RJUl9TSVpFCQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCQkofihQR0RJUl9TSVpFLTEpKQorLyogRklYTUUgKi8KKworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KDApCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoMCkKKworLy9leHRlcm4gdm9pZCBwYWdpbmdfaW5pdChzdHJ1Y3QgbWVtaW5mbyAqLCBzdHJ1Y3QgbWFjaGluZV9kZXNjICopOworI2RlZmluZSBzd2FwcGVyX3BnX2RpciAoKHBnZF90ICopIDApCisKKyNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKDApCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKDApCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cCxvZmYpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXApIHwgKChvZmYpIDw8IDcpKSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIH0pCisKKwordHlwZWRlZiBwdGVfdCAqcHRlX2FkZHJfdDsKKworc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSB7IHJldHVybiAwOyB9CisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHZpcnRfdG9fcGFnZSgwKSkKKworLyoKKyAqIE1hcmsgdGhlIHByb3QgdmFsdWUgYXMgdW5jYWNoZWFibGUgYW5kIHVuYnVmZmVyYWJsZS4KKyAqLworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCV9fcGdwcm90KDApCisjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCkgX19wZ3Byb3QoMCkKKworCisvKgorICogVGhlc2Ugd291bGQgYmUgaW4gb3RoZXIgcGxhY2VzIGJ1dCBoYXZpbmcgdGhlbSBoZXJlIHJlZHVjZXMgdGhlIGRpZmZzLgorICovCitleHRlcm4gdW5zaWduZWQgaW50IGtvYmpzaXplKGNvbnN0IHZvaWQgKm9ianApOworZXh0ZXJuIGludCBpc19pbl9yb20odW5zaWduZWQgbG9uZyk7CisKKy8qCisgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlLgorICovCisjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZQlyZW1hcF9wYWdlX3JhbmdlCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZQlyZW1hcF9wZm5fcmFuZ2UKKworI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQorI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCisjZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCisKKworLyoKKyAqIEFsbCAzMmJpdCBhZGRyZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IHZhbGlkIGZvciB2bWFsbG9jLi4uCisgKiBTb3J0IG9mIG1lYW5pbmdsZXNzIGZvciBub24tVk0gdGFyZ2V0cy4KKyAqLworI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKKyNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgorCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAgICAgICgwKQorCisjZWxzZSAKKworLyoKKyAqIGR1bW15IHRsYiBhbmQgdXNlciBzdHJ1Y3R1cmVzLgorICovCisjZGVmaW5lIHYzX3RsYl9mbnMJKDApCisjZGVmaW5lIHY0X3RsYl9mbnMJKDApCisjZGVmaW5lIHY0d2JfdGxiX2ZucwkoMCkKKyNkZWZpbmUgdjR3YmlfdGxiX2ZucwkoMCkKKyNkZWZpbmUgdjZfdGxiX2ZucwkoMCkKKworI2RlZmluZSB2M191c2VyX2ZucwkoMCkKKyNkZWZpbmUgdjRfdXNlcl9mbnMJKDApCisjZGVmaW5lIHY0X21jX3VzZXJfZm5zCSgwKQorI2RlZmluZSB2NHdiX3VzZXJfZm5zCSgwKQorI2RlZmluZSB2NHd0X3VzZXJfZm5zCSgwKQorI2RlZmluZSB2Nl91c2VyX2ZucwkoMCkKKyNkZWZpbmUgeHNjYWxlX21jX3VzZXJfZm5zICgwKQorCisjZW5kaWYgLypfX0FTU0VNQkxZX18qLworCisjZW5kaWYgLyogX0FTTUFSTV9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCmluZGV4IGU4NWMwOGQuLjhkMzkxOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaApAQCAtMTEsOSArMTEsMTUgQEAKICNkZWZpbmUgX0FTTUFSTV9QR1RBQkxFX0gKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCisjaWZuZGVmIENPTkZJR19NTVUKKworI2luY2x1ZGUgInBndGFibGUtbm9tbXUuaCIKKworI2Vsc2UKIAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLSNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC92bWFsbG9jLmg+CiAKIC8qCkBAIC0zNzgsNCArMzg0LDYgQEAKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKwogI2VuZGlmIC8qIF9BU01BUk1fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaCBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCmluZGV4IGU5MzEwODkuLjFiZGU5MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCkBAIC0xNjUsNiArMTY1LDggQEAKIAogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KIAorI2lmZGVmIENPTkZJR19NTVUKKwogI2RlZmluZSBjcHVfc3dpdGNoX21tKHBnZCxtbSkgY3B1X2RvX3N3aXRjaF9tbSh2aXJ0X3RvX3BoeXMocGdkKSxtbSkKIAogI2RlZmluZSBjcHVfZ2V0X3BnZCgpCVwKQEAgLTE3Niw2ICsxNzgsOCBAQAogCQkocGdkX3QgKilwaHlzX3RvX3ZpcnQocGcpOwkJXAogCX0pCiAKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1BST0NGTlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmggYi9pbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaAppbmRleCA4NDI1MjYwLi5lZGI3YjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHJvY2luZm8uaApAQCAtMjksNyArMjksOCBAQAogc3RydWN0IHByb2NfaW5mb19saXN0IHsKIAl1bnNpZ25lZCBpbnQJCWNwdV92YWw7CiAJdW5zaWduZWQgaW50CQljcHVfbWFzazsKLQl1bnNpZ25lZCBsb25nCQlfX2NwdV9tbXVfZmxhZ3M7CS8qIHVzZWQgYnkgaGVhZC5TICovCisJdW5zaWduZWQgbG9uZwkJX19jcHVfbW1fbW11X2ZsYWdzOwkvKiB1c2VkIGJ5IGhlYWQuUyAqLworCXVuc2lnbmVkIGxvbmcJCV9fY3B1X2lvX21tdV9mbGFnczsJLyogdXNlZCBieSBoZWFkLlMgKi8KIAl1bnNpZ25lZCBsb25nCQlfX2NwdV9mbHVzaDsJCS8qIHVzZWQgYnkgaGVhZC5TICovCiAJY29uc3QgY2hhcgkJKmFyY2hfbmFtZTsKIAljb25zdCBjaGFyCQkqZWxmX25hbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmgKaW5kZXggMmJlYmUzZC4uNWE4ZWY3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaApAQCAtMjUsNiArMjUsMTEgQEAKIAogI2RlZmluZSBQVFJBQ0VfU0VUX1NZU0NBTEwJMjMKIAorLyogUFRSQUNFX1NZU0NBTEwgaXMgMjQgKi8KKworI2RlZmluZSBQVFJBQ0VfR0VUQ1JVTkNIUkVHUwkyNQorI2RlZmluZSBQVFJBQ0VfU0VUQ1JVTkNIUkVHUwkyNgorCiAvKgogICogUFNSIGJpdHMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oCmluZGV4IGNlZDY5MTYxLi5kMGZiNDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NpZ25hbC5oCkBAIC04Miw3ICs4Miw2IEBACiAgKgkJCWlzIHJ1bm5pbmcgaW4gMjYtYml0LgogICogU0FfT05TVEFDSwkJYWxsb3dzIGFsdGVybmF0ZSBzaWduYWwgc3RhY2tzIChzZWUgc2lnYWx0c3RhY2soMikpLgogICogU0FfUkVTVEFSVAkJZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQotICogU0FfSU5URVJSVVBUCQlpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9OT0RFRkVSCQlwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCiAgKiBTQV9SRVNFVEhBTkQJCWNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgogICoKQEAgLTEwMSw3ICsxMDAsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogCiAvKiAKQEAgLTExMywxMCArMTExLDYgQEAKICNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAogI2RlZmluZSBTSUdTVEtTWgk4MTkyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIFNBX1RJTUVSCQkweDQwMDAwMDAwCi0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tYXJtL3NvY2tldC5oCmluZGV4IDNjNTFkYTYuLjE5ZjdkZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc29ja2V0LmgKQEAgLTQ4LDUgKzQ4LDYgQEAKICNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKIAogI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaAppbmRleCBjZmJjY2I2Li5mMjhiMjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaApAQCAtNTksNiArNTksNyBAQAogCXN0cnVjdCBjcHVfY29udGV4dF9zYXZlCWNwdV9jb250ZXh0OwkvKiBjcHUgY29udGV4dCAqLwogCV9fdTgJCQl1c2VkX2NwWzE2XTsJLyogdGhyZWFkIHVzZWQgY29wcm8gKi8KIAl1bnNpZ25lZCBsb25nCQl0cF92YWx1ZTsKKwlzdHJ1Y3QgY3J1bmNoX3N0YXRlCWNydW5jaHN0YXRlOwogCXVuaW9uIGZwX3N0YXRlCQlmcHN0YXRlIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKIAl1bmlvbiB2ZnBfc3RhdGUJCXZmcHN0YXRlOwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7CkBAIC0xMDEsMTYgKzEwMiwyMiBAQAogI2RlZmluZSB0aHJlYWRfc2F2ZWRfZnAodHNrKQlcCiAJKCh1bnNpZ25lZCBsb25nKSh0YXNrX3RocmVhZF9pbmZvKHRzayktPmNwdV9jb250ZXh0LmZwKSkKIAorZXh0ZXJuIHZvaWQgY3J1bmNoX3Rhc2tfZGlzYWJsZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CitleHRlcm4gdm9pZCBjcnVuY2hfdGFza19jb3B5KHN0cnVjdCB0aHJlYWRfaW5mbyAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgY3J1bmNoX3Rhc2tfcmVzdG9yZShzdHJ1Y3QgdGhyZWFkX2luZm8gKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGNydW5jaF90YXNrX3JlbGVhc2Uoc3RydWN0IHRocmVhZF9pbmZvICopOworCiBleHRlcm4gdm9pZCBpd21teHRfdGFza19kaXNhYmxlKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKIGV4dGVybiB2b2lkIGl3bW14dF90YXNrX2NvcHkoc3RydWN0IHRocmVhZF9pbmZvICosIHZvaWQgKik7CiBleHRlcm4gdm9pZCBpd21teHRfdGFza19yZXN0b3JlKHN0cnVjdCB0aHJlYWRfaW5mbyAqLCB2b2lkICopOwogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CitleHRlcm4gdm9pZCBpd21teHRfdGFza19zd2l0Y2goc3RydWN0IHRocmVhZF9pbmZvICopOwogCiAjZW5kaWYKIAogLyoKICAqIFdlIHVzZSBiaXQgMzAgb2YgdGhlIHByZWVtcHRfY291bnQgdG8gaW5kaWNhdGUgdGhhdCBrZXJuZWwKLSAqIHByZWVtcHRpb24gaXMgb2NjdXJpbmcuICBTZWUgaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaC4KKyAqIHByZWVtcHRpb24gaXMgb2NjdXJyaW5nLiAgU2VlIGluY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmguCiAgKi8KICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJMHg0MDAwMDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tYXJtL3VhY2Nlc3MuaAppbmRleCAwNjRmMGY1Li44N2FiYTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91YWNjZXNzLmgKQEAgLTQxLDE1ICs0MSwyNCBAQAogZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiAvKgorICogVGhlc2UgdHdvIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBkZWZpbmVkIGFueXdoZXJlIC0gaWYgdGhlIGtlcm5lbAorICogY29kZSBnZW5lcmF0ZXMgYW55IHJlZmVyZW5jZXMgdG8gdGhlbSwgdGhhdCdzIGEgYnVnLgorICovCitleHRlcm4gaW50IF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworLyoKICAqIE5vdGUgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IDB4MSwwMDAwLDAwMDAKICAqLwogI2RlZmluZSBLRVJORUxfRFMJMHgwMDAwMDAwMAotI2RlZmluZSBVU0VSX0RTCQlUQVNLX1NJWkUKLQogI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQorCisjaWZkZWYgQ09ORklHX01NVQorCisjZGVmaW5lIFVTRVJfRFMJCVRBU0tfU0laRQogI2RlZmluZSBnZXRfZnMoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzIChtbV9zZWdtZW50X3QgZnMpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCBmcykKIHsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSBmczsKIAltb2RpZnlfZG9tYWluKERPTUFJTl9LRVJORUwsIGZzID8gRE9NQUlOX0NMSUVOVCA6IERPTUFJTl9NQU5BR0VSKTsKQEAgLTc1LDggKzg0LDYgQEAKIAkJOiAiY2MiKTsgXAogCWZsYWc7IH0pCiAKLSNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKQkoX19yYW5nZV9vayhhZGRyLHNpemUpID09IDApCi0KIC8qCiAgKiBTaW5nbGUtdmFsdWUgdHJhbnNmZXIgcm91dGluZXMuICBUaGV5IGF1dG9tYXRpY2FsbHkgdXNlIHRoZSByaWdodAogICogc2l6ZSBpZiB3ZSBqdXN0IGhhdmUgdGhlIHJpZ2h0IHBvaW50ZXIgdHlwZS4gIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb25zCkBAIC04NywyMCArOTQsMTAgQEAKICAqIGZpeHVwIGNvZGUsIGJ1dCB0aGVyZSBhcmUgYSBmZXcgcGxhY2VzIHdoZXJlIGl0IGludHJ1ZGVzIG9uIHRoZQogICogbWFpbiBjb2RlIHBhdGguICBXaGVuIHdlIG9ubHkgd3JpdGUgdG8gdXNlciBzcGFjZSwgdGhlcmUgaXMgbm8KICAqIHByb2JsZW0uCi0gKgotICogVGhlICJfX3h4eCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBkbyBub3QgdmVyaWZ5IHRoZQotICogYWRkcmVzcyBzcGFjZSAtIGl0IG11c3QgaGF2ZSBiZWVuIGRvbmUgcHJldmlvdXNseSB3aXRoIGEgc2VwYXJhdGUKLSAqICJhY2Nlc3Nfb2soKSIgY2FsbC4KLSAqCi0gKiBUaGUgInh4eF9lcnJvciIgdmVyc2lvbnMgc2V0IHRoZSB0aGlyZCBhcmd1bWVudCB0byBFRkFVTFQgaWYgYW4KLSAqIGVycm9yIG9jY3VycywgYW5kIGxlYXZlIGl0IHVuY2hhbmdlZCBvbiBzdWNjZXNzLiAgTm90ZSB0aGF0IHRoZXNlCi0gKiB2ZXJzaW9ucyBhcmUgdm9pZCAoaWUsIGRvbid0IHJldHVybiBhIHZhbHVlIGFzIHN1Y2gpLgogICovCi0KIGV4dGVybiBpbnQgX19nZXRfdXNlcl8xKHZvaWQgKik7CiBleHRlcm4gaW50IF9fZ2V0X3VzZXJfMih2b2lkICopOwogZXh0ZXJuIGludCBfX2dldF91c2VyXzQodm9pZCAqKTsKLWV4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CiAKICNkZWZpbmUgX19nZXRfdXNlcl94KF9fcjIsX19wLF9fZSxfX3MsX19pLi4uKQkJCQlcCiAJICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJXApAQCAtMTMxLDYgKzEyOCw3NCBAQAogCQlfX2U7CQkJCQkJCVwKIAl9KQogCitleHRlcm4gaW50IF9fcHV0X3VzZXJfMSh2b2lkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IF9fcHV0X3VzZXJfMih2b2lkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IF9fcHV0X3VzZXJfNCh2b2lkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IF9fcHV0X3VzZXJfOCh2b2lkICosIHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKyNkZWZpbmUgX19wdXRfdXNlcl94KF9fcjIsX19wLF9fZSxfX3MpCQkJCQlcCisJICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJXAorCQlfX2FzbWVxKCIlMCIsICJyMCIpIF9fYXNtZXEoIiUyIiwgInIyIikJCQlcCisJCSJibAlfX3B1dF91c2VyXyIgI19fcwkJCQlcCisJCTogIj0mciIgKF9fZSkJCQkJCQlcCisJCTogIjAiIChfX3ApLCAiciIgKF9fcjIpCQkJCQlcCisJCTogImlwIiwgImxyIiwgImNjIikKKworI2RlZmluZSBwdXRfdXNlcih4LHApCQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQljb25zdCByZWdpc3RlciB0eXBlb2YoKihwKSkgX19yMiBhc20oInIyIikgPSAoeCk7CVwKKwkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fdXNlciAqX19wIGFzbSgicjAiKSA9IChwKTtcCisJCXJlZ2lzdGVyIGludCBfX2UgYXNtKCJyMCIpOwkJCQlcCisJCXN3aXRjaCAoc2l6ZW9mKCooX19wKSkpIHsJCQkJXAorCQljYXNlIDE6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgMSk7CQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgMjoJCQkJCQkJXAorCQkJX19wdXRfdXNlcl94KF9fcjIsIF9fcCwgX19lLCAyKTsJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA0OgkJCQkJCQlcCisJCQlfX3B1dF91c2VyX3goX19yMiwgX19wLCBfX2UsIDQpOwkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDg6CQkJCQkJCVwKKwkJCV9fcHV0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgOCk7CQlcCisJCQlicmVhazsJCQkJCQlcCisJCWRlZmF1bHQ6IF9fZSA9IF9fcHV0X3VzZXJfYmFkKCk7IGJyZWFrOwkJCVwKKwkJfQkJCQkJCQlcCisJCV9fZTsJCQkJCQkJXAorCX0pCisKKyNlbHNlIC8qIENPTkZJR19NTVUgKi8KKworLyoKKyAqIHVDbGludXggaGFzIG9ubHkgb25lIGFkZHIgc3BhY2UsIHNvIGhhcyBzaW1wbGlmaWVkIGFkZHJlc3MgbGltaXRzLgorICovCisjZGVmaW5lIFVTRVJfRFMJCQlLRVJORUxfRFMKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJCSgxKQorI2RlZmluZSBfX2FkZHJfb2soYWRkcikJCSgxKQorI2RlZmluZSBfX3JhbmdlX29rKGFkZHIsc2l6ZSkJKDApCisjZGVmaW5lIGdldF9mcygpCQkoS0VSTkVMX0RTKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCBmcykKK3sKK30KKworI2RlZmluZSBnZXRfdXNlcih4LHApCV9fZ2V0X3VzZXIoeCxwKQorI2RlZmluZSBwdXRfdXNlcih4LHApCV9fcHV0X3VzZXIoeCxwKQorCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkJKF9fcmFuZ2Vfb2soYWRkcixzaXplKSA9PSAwKQorCisvKgorICogVGhlICJfX3h4eCIgdmVyc2lvbnMgb2YgdGhlIHVzZXIgYWNjZXNzIGZ1bmN0aW9ucyBkbyBub3QgdmVyaWZ5IHRoZQorICogYWRkcmVzcyBzcGFjZSAtIGl0IG11c3QgaGF2ZSBiZWVuIGRvbmUgcHJldmlvdXNseSB3aXRoIGEgc2VwYXJhdGUKKyAqICJhY2Nlc3Nfb2soKSIgY2FsbC4KKyAqCisgKiBUaGUgInh4eF9lcnJvciIgdmVyc2lvbnMgc2V0IHRoZSB0aGlyZCBhcmd1bWVudCB0byBFRkFVTFQgaWYgYW4KKyAqIGVycm9yIG9jY3VycywgYW5kIGxlYXZlIGl0IHVuY2hhbmdlZCBvbiBzdWNjZXNzLiAgTm90ZSB0aGF0IHRoZXNlCisgKiB2ZXJzaW9ucyBhcmUgdm9pZCAoaWUsIGRvbid0IHJldHVybiBhIHZhbHVlIGFzIHN1Y2gpLgorICovCiAjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX2d1X2VyciA9IDA7CQkJCQkJXApAQCAtMjEyLDQzICsyNzcsNiBAQAogCTogInIiIChhZGRyKSwgImkiICgtRUZBVUxUKQkJCQlcCiAJOiAiY2MiKQogCi1leHRlcm4gaW50IF9fcHV0X3VzZXJfMSh2b2lkICosIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IF9fcHV0X3VzZXJfMih2b2lkICosIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IF9fcHV0X3VzZXJfNCh2b2lkICosIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IF9fcHV0X3VzZXJfOCh2b2lkICosIHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci1leHRlcm4gaW50IF9fcHV0X3VzZXJfYmFkKHZvaWQpOwotCi0jZGVmaW5lIF9fcHV0X3VzZXJfeChfX3IyLF9fcCxfX2UsX19zKQkJCQkJXAotCSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCVwKLQkJX19hc21lcSgiJTAiLCAicjAiKSBfX2FzbWVxKCIlMiIsICJyMiIpCQkJXAotCQkiYmwJX19wdXRfdXNlcl8iICNfX3MJCQkJXAotCQk6ICI9JnIiIChfX2UpCQkJCQkJXAotCQk6ICIwIiAoX19wKSwgInIiIChfX3IyKQkJCQkJXAotCQk6ICJpcCIsICJsciIsICJjYyIpCi0KLSNkZWZpbmUgcHV0X3VzZXIoeCxwKQkJCQkJCQlcCi0JKHsJCQkJCQkJCVwKLQkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fcjIgYXNtKCJyMiIpID0gKHgpOwlcCi0JCWNvbnN0IHJlZ2lzdGVyIHR5cGVvZigqKHApKSBfX3VzZXIgKl9fcCBhc20oInIwIikgPSAocCk7XAotCQlyZWdpc3RlciBpbnQgX19lIGFzbSgicjAiKTsJCQkJXAotCQlzd2l0Y2ggKHNpemVvZigqKF9fcCkpKSB7CQkJCVwKLQkJY2FzZSAxOgkJCQkJCQlcCi0JCQlfX3B1dF91c2VyX3goX19yMiwgX19wLCBfX2UsIDEpOwkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIDI6CQkJCQkJCVwKLQkJCV9fcHV0X3VzZXJfeChfX3IyLCBfX3AsIF9fZSwgMik7CQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgNDoJCQkJCQkJXAotCQkJX19wdXRfdXNlcl94KF9fcjIsIF9fcCwgX19lLCA0KTsJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSA4OgkJCQkJCQlcCi0JCQlfX3B1dF91c2VyX3goX19yMiwgX19wLCBfX2UsIDgpOwkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlkZWZhdWx0OiBfX2UgPSBfX3B1dF91c2VyX2JhZCgpOyBicmVhazsJCQlcCi0JCX0JCQkJCQkJXAotCQlfX2U7CQkJCQkJCVwKLQl9KQotCiAjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX3B1X2VyciA9IDA7CQkJCQkJXApAQCAtMzUzLDY2ICszODEsNTQgQEAKIAk6ICJyIiAoeCksICJpIiAoLUVGQVVMVCkJCQkJXAogCTogImNjIikKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19hcmNoX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fYXJjaF9jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19hcmNoX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2FyY2hfc3RybmNweV9mcm9tX3VzZXIoY2hhciAqdG8sIGNvbnN0IGNoYXIgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fYXJjaF9zdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbik7CisKKyNpZmRlZiBDT05GSUdfTU1VCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqYWRkciwgdW5zaWduZWQgbG9uZyBuKTsKKyNlbHNlCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKQkobWVtY3B5KHRvLCAodm9pZCBfX2ZvcmNlICopZnJvbSwgbiksIDApCisjZGVmaW5lIF9fY29weV90b191c2VyKHRvLGZyb20sbikJKG1lbWNweSgodm9pZCBfX2ZvcmNlICopdG8sIGZyb20sIG4pLCAwKQorI2RlZmluZSBfX2NsZWFyX3VzZXIoYWRkcixuKQkJKG1lbXNldCgodm9pZCBfX2ZvcmNlICopYWRkciwgMCwgbiksIDApCisjZW5kaWYKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICp0bywgY29uc3QgY2hhciBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbik7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKLQkJbiA9IF9fYXJjaF9jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisJCW4gPSBfX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKIAllbHNlIC8qIHNlY3VyaXR5IGhvbGUgLSBwbHVnIGl0ICovCiAJCW1lbXplcm8odG8sIG4pOwogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKLXsKLQlyZXR1cm4gX19hcmNoX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQotCQluID0gX19hcmNoX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CisJCW4gPSBfX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKLXsKLQlyZXR1cm4gX19hcmNoX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7Ci19Ci0KICNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMgX19jb3B5X3RvX3VzZXIKICNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyBfX2NvcHlfZnJvbV91c2VyCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyICh2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywgdW5zaWduZWQgbG9uZyBuKQogewogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCi0JCW4gPSBfX2FyY2hfY2xlYXJfdXNlcih0bywgbik7CisJCW4gPSBfX2NsZWFyX3VzZXIodG8sIG4pOwogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyICh2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKLXsKLQlyZXR1cm4gX19hcmNoX2NsZWFyX3VzZXIodG8sIG4pOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgc3RybmNweV9mcm9tX3VzZXIgKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKK3N0YXRpYyBpbmxpbmUgbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpCiB7CiAJbG9uZyByZXMgPSAtRUZBVUxUOwogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNyYywgMSkpCi0JCXJlcyA9IF9fYXJjaF9zdHJuY3B5X2Zyb21fdXNlcihkc3QsIHNyYywgY291bnQpOworCQlyZXMgPSBfX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7CiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIF9fc3RybmNweV9mcm9tX3VzZXIgKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKLXsKLQlyZXR1cm4gX19hcmNoX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7Ci19Ci0KICNkZWZpbmUgc3RybGVuX3VzZXIocykJc3Rybmxlbl91c2VyKHMsIH4wVUwgPj4gMSkKIAogc3RhdGljIGlubGluZSBsb25nIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqcywgbG9uZyBuKQpAQCAtNDIwLDcgKzQzNiw3IEBACiAJdW5zaWduZWQgbG9uZyByZXMgPSAwOwogCiAJaWYgKF9fYWRkcl9vayhzKSkKLQkJcmVzID0gX19hcmNoX3N0cm5sZW5fdXNlcihzLCBuKTsKKwkJcmVzID0gX19zdHJubGVuX3VzZXIocywgbik7CiAKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Vjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1hcm0vdWNvbnRleHQuaAppbmRleCA5ZTZmN2NhLi5iZjY1ZTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdWNvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdWNvbnRleHQuaApAQCAtMzUsNiArMzUsMTcgQEAKICAqIGJ5dGVzLCB0byBwcmV2ZW50IHVucHJlZGljdGFibGUgcGFkZGluZyBpbiB0aGUgc2lnbmFsIGZyYW1lLgogICovCiAKKyNpZmRlZiBDT05GSUdfQ1JVTkNICisjZGVmaW5lIENSVU5DSF9NQUdJQwkJMHg1MDY1Y2YwMworI2RlZmluZSBDUlVOQ0hfU1RPUkFHRV9TSVpFCShDUlVOQ0hfU0laRSArIDgpCisKK3N0cnVjdCBjcnVuY2hfc2lnZnJhbWUgeworCXVuc2lnbmVkIGxvbmcJbWFnaWM7CisJdW5zaWduZWQgbG9uZwlzaXplOworCXN0cnVjdCBjcnVuY2hfc3RhdGUJc3RvcmFnZTsKK30gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oOCkpKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lXTU1YVAogLyogaXdtbXh0X2FyZWEgaXMgMHg5OCBieXRlcyBsb25nLCBwcmVjZWVkZWQgYnkgOCBieXRlcyBvZiBzaWduYXR1cmUgKi8KICNkZWZpbmUgSVdNTVhUX01BR0lDCQkweDEyZWY4NDJhCkBAIC03NCw2ICs4NSw5IEBACiAgKiBvbmUgb2YgdGhlc2UuCiAgKi8KIHN0cnVjdCBhdXhfc2lnZnJhbWUgeworI2lmZGVmIENPTkZJR19DUlVOQ0gKKwlzdHJ1Y3QgY3J1bmNoX3NpZ2ZyYW1lCWNydW5jaDsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19JV01NWFQKIAlzdHJ1Y3QgaXdtbXh0X3NpZ2ZyYW1lCWl3bW14dDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1hcm0yNi9mbG9wcHkuaAppbmRleCBhMThhZjA2Li5lZmI3MzIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9mbG9wcHkuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjZGVmaW5lIGZkX2luYihwb3J0KQkJaW5iKChwb3J0KSkKICNkZWZpbmUgZmRfcmVxdWVzdF9pcnEoKQlyZXF1ZXN0X2lycShJUlFfRkxPUFBZRElTSyxmbG9wcHlfaW50ZXJydXB0LFwKLQkJCQkJU0FfSU5URVJSVVBULCJmbG9wcHkiLE5VTEwpCisJCQkJCUlSUUZfRElTQUJMRUQsImZsb3BweSIsTlVMTCkKICNkZWZpbmUgZmRfZnJlZV9pcnEoKQkJZnJlZV9pcnEoSVJRX0ZMT1BQWURJU0ssTlVMTCkKICNkZWZpbmUgZmRfZGlzYWJsZV9pcnEoKQlkaXNhYmxlX2lycShJUlFfRkxPUFBZRElTSykKICNkZWZpbmUgZmRfZW5hYmxlX2lycSgpCQllbmFibGVfaXJxKElSUV9GTE9QUFlESVNLKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zaWduYWwuaAppbmRleCAzN2FkMjUzLi45NjdiYTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zaWduYWwuaApAQCAtODIsNyArODIsNiBAQAogICoJCQlpcyBydW5uaW5nIGluIDI2LWJpdC4KICAqIFNBX09OU1RBQ0sJCWFsbG93cyBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrcyAoc2VlIHNpZ2FsdHN0YWNrKDIpKS4KICAqIFNBX1JFU1RBUlQJCWZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKLSAqIFNBX0lOVEVSUlVQVAkJaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQogICogU0FfTk9ERUZFUgkJcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgogICogU0FfUkVTRVRIQU5ECQljbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KICAqCkBAIC0xMDEsNyArMTAwLDYgQEAKIAogI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCiAKIAogLyogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NvY2tldC5oCmluZGV4IDNjNTFkYTYuLjE5ZjdkZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NvY2tldC5oCkBAIC00OCw1ICs0OCw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAKICNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKyNkZWZpbmUgU09fUEFTU1NFQwkJMzQKIAogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lycS5oCmluZGV4IDRmYTg5NDUuLmIxMTI4YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9pcnEuaApAQCAtMTQxLDcgKzE0MSw3IEBACiAgKiBpdCBoZXJlLCB3ZSB3b3VsZCBub3QgZ2V0IHRoZSBtdWx0aXBsZV9pcnEgYXQgYWxsLgogICoKICAqIFRoZSBub24tYmxvY2tpbmcgaGVyZSBpcyBiYXNlZCBvbiB0aGUga25vd2xlZGdlIHRoYXQgdGhlIHRpbWVyIGludGVycnVwdCBpcyAKLSAqIHJlZ2lzdHJlZCBhcyBhIGZhc3QgaW50ZXJydXB0IChTQV9JTlRFUlJVUFQpIHNvIHRoYXQgd2UgX2tub3dfIHRoZXJlIHdpbGwgbm90CisgKiByZWdpc3RyZWQgYXMgYSBmYXN0IGludGVycnVwdCAoSVJRRl9ESVNBQkxFRCkgc28gdGhhdCB3ZSBfa25vd18gdGhlcmUgd2lsbCBub3QKICAqIGJlIGFuIHN0aSgpIGJlZm9yZSB0aGUgdGltZXIgaXJxIGhhbmRsZXIgaXMgcnVuIHRvIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9hcmJpdGVyLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2FyYml0ZXIuaAppbmRleCBkYmEzYzI4Li4wODFhOTExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2FyYml0ZXIuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2FyYml0ZXIuaApAQCAtMjAsOCArMjAsOCBAQAogICBhcmJpdGVyX2FsbF9hY2Nlc3NlcyA9IDB4ZmYKIH07CiAKLWludCBjcmlzdjMyX2FyYml0ZXJfYWxsb2NhdGVfYmFuZHdpdGgoaW50IGNsaWVudCwgaW50IHJlZ2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBiYW5kd2lkdGgpOworaW50IGNyaXN2MzJfYXJiaXRlcl9hbGxvY2F0ZV9iYW5kd2lkdGgoaW50IGNsaWVudCwgaW50IHJlZ2lvbiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiYW5kd2lkdGgpOwogaW50IGNyaXN2MzJfYXJiaXRlcl93YXRjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY2xpZW50cywgdW5zaWduZWQgbG9uZyBhY2Nlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hfY2FsbGJhY2sqIGNiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lycS5oCmluZGV4IGVlYjBhODAuLmJhYzk0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pcnEuaApAQCAtOTgsNyArOTgsNyBAQAogICogaWYgd2UgaGFkIEJMT0NLJ2VkaXQgaGVyZSwgd2Ugd291bGQgbm90IGdldCB0aGUgbXVsdGlwbGVfaXJxIGF0IGFsbC4KICAqCiAgKiBUaGUgbm9uLWJsb2NraW5nIGhlcmUgaXMgYmFzZWQgb24gdGhlIGtub3dsZWRnZSB0aGF0IHRoZSB0aW1lciBpbnRlcnJ1cHQgaXMKLSAqIHJlZ2lzdHJlZCBhcyBhIGZhc3QgaW50ZXJydXB0IChTQV9JTlRFUlJVUFQpIHNvIHRoYXQgd2UgX2tub3dfIHRoZXJlIHdpbGwgbm90CisgKiByZWdpc3RyZWQgYXMgYSBmYXN0IGludGVycnVwdCAoSVJRRl9ESVNBQkxFRCkgc28gdGhhdCB3ZSBfa25vd18gdGhlcmUgd2lsbCBub3QKICAqIGJlIGFuIHN0aSgpIGJlZm9yZSB0aGUgdGltZXIgaXJxIGhhbmRsZXIgaXMgcnVuIHRvIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQuCiAgKi8KICNkZWZpbmUgQlVJTERfVElNRVJfSVJRKG5yLCBtYXNrKSAJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWNyaXMvaHdfaXJxLmgKaW5kZXggMzQxNTM2YS4uMjk4MDY2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2h3X2lycS5oCkBAIC0xLDcgKzEsNSBAQAogI2lmbmRlZiBfQVNNX0hXX0lSUV9ICiAjZGVmaW5lIF9BU01fSFdfSVJRX0gKIAotc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkge30KLQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2lycS5oCmluZGV4IDRiMzM4NzkuLjk5OGNjZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9pcnEuaApAQCAtMSwxMSArMSw2IEBACiAjaWZuZGVmIF9BU01fSVJRX0gKICNkZWZpbmUgX0FTTV9JUlFfSAogCi0vKgotICogSVJRIGxpbmUgc3RhdHVzIG1hY3JvIElSUV9QRVJfQ1BVIGlzIHVzZWQKLSAqLwotI2RlZmluZSBBUkNIX0hBU19JUlFfUEVSX0NQVQotCiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV9jYW5vbmljYWxpemUoaW50IGlycSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1jcmlzL3NpZ25hbC5oCmluZGV4IGRmZTAzOTUuLjM0OWFlNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9zaWduYWwuaApAQCAtNzQsNyArNzQsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC05NSw3ICs5NCw2IEBACiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvc29ja2V0LmgKaW5kZXggOGIxZGEzZS4uMDFjZmRmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3NvY2tldC5oCkBAIC01MCw2ICs1MCw3IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4gICAgICAgICAgMzAKIAogI2RlZmluZSBTT19QRUVSU0VDICAgICAgICAgICAgIDMxCisjZGVmaW5lIFNPX1BBU1NTRUMJCTM0CiAKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pcnEtcm91dGluZy5oIGIvaW5jbHVkZS9hc20tZnJ2L2lycS1yb3V0aW5nLmgKaW5kZXggNjg2ZmIyYjMuLmFjM2FiOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pcnEtcm91dGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcnEtcm91dGluZy5oCkBAIC01MSw3ICs1MSw3IEBACiBzdHJ1Y3QgaXJxX2xldmVsIHsKIAlpbnQJCQl1c2FnZTsKIAlpbnQJCQlkaXNhYmxlX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogY3VycmVudCBTQV9JTlRFUlJVUFQgYW5kIFNBX1NISVJRIHNldHRpbmdzICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBjdXJyZW50IElSUUZfRElTQUJMRUQgYW5kIElSUUZfU0hBUkVEIHNldHRpbmdzICovCiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgaXJxX3NvdXJjZQkqc291cmNlczsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1mcnYvc2lnbmFsLmgKaW5kZXggZGNjMWIzNS4uMjA3OTE5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zaWduYWwuaApAQCAtNzQsNyArNzQsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC05NCw3ICs5Myw2IEBACiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCmluZGV4IDcxNzdmOGIuLjMxZGIxOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKIAogI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNWJmNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaApAQCAtMCwwICsxLDE4IEBACitfX05SX2NobW9kLAorX19OUl9mY2htb2QsCitfX05SX2Nob3duLAorX19OUl9mY2hvd24sCitfX05SX2xjaG93biwKK19fTlJfc2V0eGF0dHIsCitfX05SX2xzZXR4YXR0ciwKK19fTlJfZnNldHhhdHRyLAorX19OUl9yZW1vdmV4YXR0ciwKK19fTlJfbHJlbW92ZXhhdHRyLAorX19OUl9mcmVtb3ZleGF0dHIsCitfX05SX2ZjaG93bmF0LAorX19OUl9mY2htb2RhdCwKKyNpZmRlZiBfX05SX2Nob3duMzIKK19fTlJfY2hvd24zMiwKK19fTlJfZmNob3duMzIsCitfX05SX2xjaG93bjMyLAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjFhN2E1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaApAQCAtMCwwICsxLDE0IEBACitfX05SX3JlbmFtZSwKK19fTlJfbWtkaXIsCitfX05SX3JtZGlyLAorX19OUl9jcmVhdCwKK19fTlJfbGluaywKK19fTlJfdW5saW5rLAorX19OUl9zeW1saW5rLAorX19OUl9ta25vZCwKK19fTlJfbWtkaXJhdCwKK19fTlJfbWtub2RhdCwKK19fTlJfdW5saW5rYXQsCitfX05SX3JlbmFtZWF0LAorX19OUl9saW5rYXQsCitfX05SX3N5bWxpbmthdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbXV0ZXgtbnVsbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1udWxsLmgKaW5kZXggNWNmOGI3Yy4uMjU0YTEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1udWxsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tdXRleC1udWxsLmgKQEAgLTEwLDE1ICsxMCwxMCBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfTVVURVhfTlVMTF9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19NVVRFWF9OVUxMX0gKIAotLyogZXh0cmEgcGFyYW1ldGVyIG9ubHkgbmVlZGVkIGZvciBtdXRleCBkZWJ1Z2dpbmc6ICovCi0jaWZuZGVmIF9fSVBfXwotIyBkZWZpbmUgX19JUF9fCi0jZW5kaWYKLQotI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2soY291bnQsIGZhaWxfZm4pCSAgICAgIGZhaWxfZm4oY291bnQgX19SRVRfSVBfXykKLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbChjb3VudCwgZmFpbF9mbikgIGZhaWxfZm4oY291bnQgX19SRVRfSVBfXykKLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF91bmxvY2soY291bnQsIGZhaWxfZm4pICAgICAgIGZhaWxfZm4oY291bnQgX19SRVRfSVBfXykKLSNkZWZpbmUgX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKGNvdW50LCBmYWlsX2ZuKSAgICAgIGZhaWxfZm4oY291bnQpCi0jZGVmaW5lIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkJICAgICAgMQorI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2soY291bnQsIGZhaWxfZm4pCQlmYWlsX2ZuKGNvdW50KQorI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsKGNvdW50LCBmYWlsX2ZuKQlmYWlsX2ZuKGNvdW50KQorI2RlZmluZSBfX211dGV4X2Zhc3RwYXRoX3VubG9jayhjb3VudCwgZmFpbF9mbikJCWZhaWxfZm4oY291bnQpCisjZGVmaW5lIF9fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhjb3VudCwgZmFpbF9mbikJZmFpbF9mbihjb3VudCkKKyNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKQkJMQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCmluZGV4IGM3NDUyMTEuLmUxNjBlMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtNyw2ICs3LDggQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXTsKIAorI2RlZmluZSBwZXJfY3B1X29mZnNldCh4KSAoX19wZXJfY3B1X29mZnNldFt4XSkKKwogLyogU2VwYXJhdGUgb3V0IHRoZSB0eXBlLCBzbyAoaW50WzNdLCBmb28pIHdvcmtzLiAqLwogI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBcCiAgICAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBlcmNwdSIpKSkgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2VjdGlvbnMuaAppbmRleCAwYjQ5ZjllLi45NjJjYWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCkBAIC0xNCw1ICsxNCw2IEBACiBleHRlcm4gY2hhciBfX3Blcl9jcHVfc3RhcnRbXSwgX19wZXJfY3B1X2VuZFtdOwogZXh0ZXJuIGNoYXIgX19rcHJvYmVzX3RleHRfc3RhcnRbXSwgX19rcHJvYmVzX3RleHRfZW5kW107CiBleHRlcm4gY2hhciBfX2luaXRkYXRhX2JlZ2luW10sIF9faW5pdGRhdGFfZW5kW107CitleHRlcm4gY2hhciBfX3N0YXJ0X3JvZGF0YVtdLCBfX2VuZF9yb2RhdGFbXTsKIAogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19TRUNUSU9OU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDlkMTE1NTAuLmRiNWEzNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTU4LDYgKzU4LDIwIEBACiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tzeW10YWJfZ3BsKSA9IC47CQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAorCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCB1bnVzZWQgc3ltYm9scyAqLwkJXAorCV9fa3N5bXRhYl91bnVzZWQgIDogQVQoQUREUihfX2tzeW10YWJfdW51c2VkKSAtIExPQURfT0ZGU0VUKSB7CVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tzeW10YWJfdW51c2VkKSA9IC47CQlcCisJCSooX19rc3ltdGFiX3VudXNlZCkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl91bnVzZWQpID0gLjsJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8JCVwKKwlfX2tzeW10YWJfdW51c2VkX2dwbCA6IEFUKEFERFIoX19rc3ltdGFiX3VudXNlZF9ncGwpIC0gTE9BRF9PRkZTRVQpIHsgXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRfZ3BsKSA9IC47CVwKKwkJKihfX2tzeW10YWJfdW51c2VkX2dwbCkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl91bnVzZWRfZ3BsKSA9IC47CVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZS1vbmx5IHN5bWJvbHMgKi8JCVwKIAlfX2tzeW10YWJfZ3BsX2Z1dHVyZSA6IEFUKEFERFIoX19rc3ltdGFiX2dwbF9mdXR1cmUpIC0gTE9BRF9PRkZTRVQpIHsgXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlKSA9IC47CVwKQEAgLTc5LDYgKzkzLDIwIEBACiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWJfZ3BsKSA9IC47CQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAorCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCB1bnVzZWQgc3ltYm9scyAqLwkJXAorCV9fa2NyY3RhYl91bnVzZWQgIDogQVQoQUREUihfX2tjcmN0YWJfdW51c2VkKSAtIExPQURfT0ZGU0VUKSB7CVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWJfdW51c2VkKSA9IC47CQlcCisJCSooX19rY3JjdGFiX3VudXNlZCkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa2NyY3RhYl91bnVzZWQpID0gLjsJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8JCVwKKwlfX2tjcmN0YWJfdW51c2VkX2dwbCA6IEFUKEFERFIoX19rY3JjdGFiX3VudXNlZF9ncGwpIC0gTE9BRF9PRkZTRVQpIHsgXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWRfZ3BsKSA9IC47CVwKKwkJKihfX2tjcmN0YWJfdW51c2VkX2dwbCkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa2NyY3RhYl91bnVzZWRfZ3BsKSA9IC47CVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZS1vbmx5IHN5bWJvbHMgKi8JCVwKIAlfX2tjcmN0YWJfZ3BsX2Z1dHVyZSA6IEFUKEFERFIoX19rY3JjdGFiX2dwbF9mdXR1cmUpIC0gTE9BRF9PRkZTRVQpIHsgXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYl9ncGxfZnV0dXJlKSA9IC47CVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKaW5kZXggOGVjY2RjMS4uN2JjMTUwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2lnbmFsLmgKQEAgLTc0LDcgKzc0LDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtOTQsNyArOTMsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NvY2tldC5oIGIvaW5jbHVkZS9hc20taDgzMDAvc29ja2V0LmgKaW5kZXggZDk4Y2Y4NS4uZWJjODMwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc29ja2V0LmgKQEAgLTQ4LDUgKzQ4LDYgQEAKICNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKIAogI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hbHRlcm5hdGl2ZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9hbHRlcm5hdGl2ZS5oCmluZGV4IGM2MWJkMWEuLjk2YWRiYWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FsdGVybmF0aXZlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hbHRlcm5hdGl2ZS5oCkBAIC0xOSwxMSArMTksMTkgQEAKIGV4dGVybiB2b2lkIGFwcGx5X2FsdGVybmF0aXZlcyhzdHJ1Y3QgYWx0X2luc3RyICpzdGFydCwgc3RydWN0IGFsdF9pbnN0ciAqZW5kKTsKIAogc3RydWN0IG1vZHVsZTsKKyNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpuYW1lLAogCQkJCQl2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAogCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKTsKIGV4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpuYW1lLAorCQkJCQl2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAorCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApIHt9CisjZW5kaWYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1pMzg2L2Zsb3BweS5oCmluZGV4IDljYjI3OTMuLjM1OWVhZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9mbG9wcHkuaApAQCAtMTQ0LDExICsxNDQsMTEgQEAKIHN0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKIHsKIAlpZihjYW5fdXNlX3ZpcnR1YWxfZG1hKQotCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2hhcmRpbnQsU0FfSU5URVJSVVBULAotCQkJCQkJICAgImZsb3BweSIsIE5VTEwpOworCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2hhcmRpbnQsCisJCQkJICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOwogCWVsc2UKLQkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKLQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKIAogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oIGIvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaAppbmRleCBhNGMwYTVhLi44N2U1YTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHdfaXJxLmgKQEAgLTY5LDE0ICs2OSw0IEBACiAKICNkZWZpbmUgSU9fQVBJQ19JUlEoeCkgKCgoeCkgPj0gMTYpIHx8ICgoMTw8KHgpKSAmIGlvX2FwaWNfaXJxcykpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLXN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpCi17Ci0JaWYgKElPX0FQSUNfSVJRKGkpKQotCQlzZW5kX0lQSV9zZWxmKElPX0FQSUNfVkVDVE9SKGkpKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKSB7fQotI2VuZGlmCi0KICNlbmRpZiAvKiBfQVNNX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lycWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiZGI5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaXJxZmxhZ3MuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWkzODYvaXJxZmxhZ3MuaAorICoKKyAqIElSUSBmbGFncyBoYW5kbGluZworICoKKyAqIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gbG93bGV2ZWwgYXNtIGhlYWRlcnMgdG9vLCB0byBwcm92aWRlCisgKiB3cmFwcGVkIHZlcnNpb25zIG9mIHRoZSBsb2NhbF9pcnFfKigpIEFQSXMsIGJhc2VkIG9uIHRoZQorICogcmF3X2xvY2FsX2lycV8qKCkgZnVuY3Rpb25zIGZyb20gdGhlIGxvd2xldmVsIGhlYWRlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICisjZGVmaW5lIF9BU01fSVJRRkxBR1NfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfc2F2ZV9mbGFncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInB1c2hmbCA7IHBvcGwgJTAiCisJCTogIj1nIiAoZmxhZ3MpCisJCTogLyogbm8gaW5wdXQgKi8KKwkpOworCisJcmV0dXJuIGZsYWdzOworfQorCisjZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBcCisJCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkicHVzaGwgJTAgOyBwb3BmbCIKKwkJOiAvKiBubyBvdXRwdXQgKi8KKwkJOiJnIiAoZmxhZ3MpCisJCToibWVtb3J5IiwgImNjIgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIiA6IDogOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGkiIDogOiA6ICJtZW1vcnkiKTsKK30KKworLyoKKyAqIFVzZWQgaW4gdGhlIGlkbGUgbG9vcDsgc3RpIHRha2VzIG9uZSBpbnN0cnVjdGlvbiBjeWNsZQorICogdG8gY29tcGxldGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfc2FmZV9oYWx0KHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aTsgaGx0IiA6IDogOiAibWVtb3J5Iik7Cit9CisKKy8qCisgKiBVc2VkIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBlbmFibGVkIG9yIHRvCisgKiBzaHV0ZG93biB0aGUgcHJvY2Vzc29yOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGFsdCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJobHQiOiA6IDoibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICEoZmxhZ3MgJiAoMSA8PCA5KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsKKworCXJldHVybiByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyk7Cit9CisKKy8qCisgKiBGb3Igc3BpbmxvY2tzLCBldGM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7CisKKwlyYXdfbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCXJldHVybiBmbGFnczsKK30KKworI2RlZmluZSByYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpIFwKKwkJZG8geyAoZmxhZ3MpID0gX19yYXdfbG9jYWxfaXJxX3NhdmUoKTsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogRG8gdGhlIENQVSdzIElSUS1zdGF0ZSB0cmFjaW5nIGZyb20gYXNzZW1ibHkgY29kZS4gV2UgY2FsbCBhCisgKiBDIGZ1bmN0aW9uLCBzbyBzYXZlIGFsbCB0aGUgQy1jbG9iYmVyZWQgcmVnaXN0ZXJzOgorICovCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisKKyMgZGVmaW5lIFRSQUNFX0lSUVNfT04JCQkJXAorCXB1c2hsICVlYXg7CQkJCVwKKwlwdXNobCAlZWN4OwkJCQlcCisJcHVzaGwgJWVkeDsJCQkJXAorCWNhbGwgdHJhY2VfaGFyZGlycXNfb247CQkJXAorCXBvcGwgJWVkeDsJCQkJXAorCXBvcGwgJWVjeDsJCQkJXAorCXBvcGwgJWVheDsKKworIyBkZWZpbmUgVFJBQ0VfSVJRU19PRkYJCQkJXAorCXB1c2hsICVlYXg7CQkJCVwKKwlwdXNobCAlZWN4OwkJCQlcCisJcHVzaGwgJWVkeDsJCQkJXAorCWNhbGwgdHJhY2VfaGFyZGlycXNfb2ZmOwkJXAorCXBvcGwgJWVkeDsJCQkJXAorCXBvcGwgJWVjeDsJCQkJXAorCXBvcGwgJWVheDsKKworI2Vsc2UKKyMgZGVmaW5lIFRSQUNFX0lSUVNfT04KKyMgZGVmaW5lIFRSQUNFX0lSUVNfT0ZGCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3Mvc2V0dXBfYXJjaC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZpc3dzL3NldHVwX2FyY2guaAppbmRleCBiOTJkNmQ5Li4zM2Y3MDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3Mvc2V0dXBfYXJjaC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9zZXR1cF9hcmNoLmgKQEAgLTEsNSArMSw4IEBACiAvKiBIb29rIHRvIGNhbGwgQklPUyBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbiAqLwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBzZ2l2d2ZiX21lbV9waHlzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2dpdndmYl9tZW1fc2l6ZTsKKwogLyogbm8gYWN0aW9uIGZvciB2aXN3cyAqLwogCiAjZGVmaW5lIEFSQ0hfU0VUVVAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcndzZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvcndzZW0uaAppbmRleCBiZTRhYjg1Li4yZjA3NjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3J3c2VtLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9yd3NlbS5oCkBAIC00MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAKIHN0cnVjdCByd3NlbV93YWl0ZXI7CiAKQEAgLTYxLDM2ICs2MiwzNCBAQAogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZiBSV1NFTV9ERUJVRwotCWludAkJCWRlYnVnOworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CiAjZW5kaWYKIH07CiAKLS8qCi0gKiBpbml0aWFsaXNhdGlvbgotICovCi0jaWYgUldTRU1fREVCVUcKLSNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUICAgICAgLCAwCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKSAsIC5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9CiAjZWxzZQotI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQJLyogKi8KKyMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKQogI2VuZGlmCiAKKwogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKIHsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgXAotCV9fUldTRU1fREVCVUdfSU5JVCB9CisJX19SV1NFTV9ERVBfTUFQX0lOSVQobmFtZSkgfQogCiAjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkgXAogCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKIAotc3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKLQlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7Ci0jaWYgUldTRU1fREVCVUcKLQlzZW0tPmRlYnVnID0gMDsKLSNlbmRpZgotfQorZXh0ZXJuIHZvaWQgX19pbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNkZWZpbmUgaW5pdF9yd3NlbShzZW0pCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQkJCQkJCQlcCisJX19pbml0X3J3c2VtKChzZW0pLCAjc2VtLCAmX19rZXkpOwkJCVwKK30gd2hpbGUgKDApCiAKIC8qCiAgKiBsb2NrIGZvciByZWFkaW5nCkBAIC0xNDMsNyArMTQyLDcgQEAKIC8qCiAgKiBsb2NrIGZvciB3cml0aW5nCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQorc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZV9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCiB7CiAJaW50IHRtcDsKIApAQCAtMTY3LDYgKzE2NiwxMSBAQAogCQk6ICJtZW1vcnkiLCAiY2MiKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJX19kb3duX3dyaXRlX25lc3RlZChzZW0sIDApOworfQorCiAvKgogICogdHJ5bG9jayBmb3Igd3JpdGluZyAtLSByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NpZ25hbC5oCmluZGV4IDAyNmZkMjMuLjM4MjRhNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaApAQCAtNzcsNyArNzcsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC05Nyw3ICs5Niw2IEBACiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvc29ja2V0LmgKaW5kZXggODAyYWU3Ni4uNTc1NWQ1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NvY2tldC5oCkBAIC00OCw1ICs0OCw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAKICNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKyNkZWZpbmUgU09fUEFTU1NFQwkJMzQKIAogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaAppbmRleCAwNGJhMzAyLi44N2M0MGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCkBAIC0zMSw2ICszMSwxMSBAQAogCSJqbXAgMWJcbiIgXAogCSIzOlxuXHQiCiAKKy8qCisgKiBOT1RFOiB0aGVyZSdzIGFuIGlycXMtb24gc2VjdGlvbiBoZXJlLCB3aGljaCBub3JtYWxseSB3b3VsZCBoYXZlIHRvIGJlCisgKiBpcnEtdHJhY2VkLCBidXQgb24gQ09ORklHX1RSQUNFX0lSUUZMQUdTIHdlIG5ldmVyIHVzZQorICogX19yYXdfc3Bpbl9sb2NrX3N0cmluZ19mbGFncygpLgorICovCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19zdHJpbmdfZmxhZ3MgXAogCSJcbjE6XHQiIFwKIAkibG9jayA7IGRlY2IgJTBcblx0IiBcCkBAIC02Myw2ICs2OCwxMiBAQAogCQkiPW0iIChsb2NrLT5zbG9jaykgOiA6ICJtZW1vcnkiKTsKIH0KIAorLyoKKyAqIEl0IGlzIGVhc2llciBmb3IgdGhlIGxvY2sgdmFsaWRhdG9yIGlmIGludGVycnVwdHMgYXJlIG5vdCByZS1lbmFibGVkCisgKiBpbiB0aGUgbWlkZGxlIG9mIGEgbG9jay1hY3F1aXJlLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgZmVhdHVyZSBhbnl3YXkKKyAqIHNvIHdlIHR1cm4gaXQgb2ZmOgorICovCisjaWZuZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWFsdGVybmF0aXZlX3NtcCgKQEAgLTcwLDYgKzgxLDcgQEAKIAkJX19yYXdfc3Bpbl9sb2NrX3N0cmluZ191cCwKIAkJIj1tIiAobG9jay0+c2xvY2spIDogInIiIChmbGFncykgOiAibWVtb3J5Iik7CiB9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKaW5kZXggY2FiMDE4MC4uZGIzOThkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCkBAIC00NTYsMjUgKzQ1Niw3IEBACiAKICNkZWZpbmUgc2V0X3dtYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyB3bWIoKTsgfSB3aGlsZSAoMCkKIAotLyogaW50ZXJydXB0IGNvbnRyb2wuLiAqLwotI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKHgpCWRvIHsgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcseCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIjoiPWciICh4KTogLyogbm8gaW5wdXQgKi8pOyB9IHdoaWxlICgwKQotI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSh4KSAJZG8geyB0eXBlY2hlY2sodW5zaWduZWQgbG9uZyx4KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiAvKiBubyBvdXRwdXQgKi8gOiJnIiAoeCk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKQotI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIpCi0vKiB1c2VkIGluIHRoZSBpZGxlIGxvb3A7IHN0aSB0YWtlcyBvbmUgaW5zdHJ1Y3Rpb24gY3ljbGUgdG8gY29tcGxldGUgKi8KLSNkZWZpbmUgc2FmZV9oYWx0KCkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGk7IGhsdCI6IDogOiJtZW1vcnkiKQotLyogdXNlZCB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHkgZW5hYmxlZCBvciB0byBzaHV0ZG93biB0aGUgcHJvY2Vzc29yICovCi0jZGVmaW5lIGhhbHQoKQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJobHQiOiA6IDoibWVtb3J5IikKLQotI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCQlcCi0oewkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKLQkhKGZsYWdzICYgKDE8PDkpKTsJCVwKLX0pCi0KLS8qIEZvciBzcGlubG9ja3MgZXRjICovCi0jZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCV9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciICh4KTogLyogbm8gaW5wdXQgKi8gOiJtZW1vcnkiKQorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAKIC8qCiAgKiBkaXNhYmxlIGhsdCBkdXJpbmcgY2VydGFpbiBjcml0aWNhbCBpL28gb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKaW5kZXggZWE4YjhjNC4uMjdmOWRmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oCkBAIC05Nyw4ICs5Nyw3IEBACiBleHRlcm4gdm9pZCBpYTY0X3NlbmRfaXBpIChpbnQgY3B1LCBpbnQgdmVjdG9yLCBpbnQgZGVsaXZlcnlfbW9kZSwgaW50IHJlZGlyZWN0KTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX3BlcmNwdV9pcnEgKGlhNjRfdmVjdG9yIHZlYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAotc3RhdGljIGlubGluZSB2b2lkCi1od19yZXNlbmRfaXJxIChzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCB2ZWN0b3IpCitzdGF0aWMgaW5saW5lIHZvaWQgaWE2NF9yZXNlbmRfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCiB7CiAJcGxhdGZvcm1fc2VuZF9pcGkoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ZWN0b3IsIElBNjRfSVBJX0RNX0lOVCwgMCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lycS5oIGIvaW5jbHVkZS9hc20taWE2NC9pcnEuaAppbmRleCBkYmU4NmMwLi43OTQ3OWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaXJxLmgKQEAgLTE0LDExICsxNCw2IEBACiAjZGVmaW5lIE5SX0lSUVMJCTI1NgogI2RlZmluZSBOUl9JUlFfVkVDVE9SUwlOUl9JUlFTCiAKLS8qCi0gKiBJUlEgbGluZSBzdGF0dXMgbWFjcm8gSVJRX1BFUl9DUFUgaXMgdXNlZAotICovCi0jZGVmaW5lIEFSQ0hfSEFTX0lSUV9QRVJfQ1BVCi0KIHN0YXRpYyBfX2lubGluZV9fIGludAogaXJxX2Nhbm9uaWNhbGl6ZSAoaW50IGlycSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1pYTY0L3BlcmNwdS5oCmluZGV4IDI0ZDg5OGIuLmZiZTVjZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaApAQCAtMzYsNiArMzYsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXTsKKyNkZWZpbmUgcGVyX2NwdV9vZmZzZXQoeCkgKF9fcGVyX2NwdV9vZmZzZXQoeCkpCiAKIC8qIEVxdWFsIHRvIF9fcGVyX2NwdV9vZmZzZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXSwgYnV0IGZhc3RlciB0byBhY2Nlc3M6ICovCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbG9jYWxfcGVyX2NwdV9vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9yd3NlbS5oIGIvaW5jbHVkZS9hc20taWE2NC9yd3NlbS5oCmluZGV4IDEzMjdjOTEuLjJkMTY0MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcndzZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3J3c2VtLmgKQEAgLTMzLDkgKzMzLDYgQEAKIAlzaWduZWQgbG9uZwkJY291bnQ7CiAJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwotI2lmIFJXU0VNX0RFQlVHCi0JaW50CQkJZGVidWc7Ci0jZW5kaWYKIH07CiAKICNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCV9fSUE2NF9VTF9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDApCkBAIC00NSwxOSArNDIsOSBAQAogI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUwogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCi0vKgotICogaW5pdGlhbGl6YXRpb24KLSAqLwotI2lmIFJXU0VNX0RFQlVHCi0jZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVCAgICAgICwgMAotI2Vsc2UKLSNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUCS8qICovCi0jZW5kaWYKLQogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKIAl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKLQkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKLQkgIF9fUldTRU1fREVCVUdfSU5JVCB9CisJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBcCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQpAQCAtNzMsOSArNjAsNiBAQAogCXNlbS0+Y291bnQgPSBSV1NFTV9VTkxPQ0tFRF9WQUxVRTsKIAlzcGluX2xvY2tfaW5pdCgmc2VtLT53YWl0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZzZW0tPndhaXRfbGlzdCk7Ci0jaWYgUldTRU1fREVCVUcKLQlzZW0tPmRlYnVnID0gMDsKLSNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmgKaW5kZXggNWUzMjhlZC4uNGY1Y2E1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ25hbC5oCkBAIC01Niw3ICs1Niw2IEBACiAgKiBTQV9GTEFHUyB2YWx1ZXM6CiAgKgogICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4KICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC03Niw3ICs3NSw2IEBACiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKIApAQCAtMTE0LDggKzExMiw2IEBACiAjZGVmaW5lIF9OU0lHX0JQVwk2NAogI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCiAKLSNkZWZpbmUgU0FfUEVSQ1BVX0lSUQkJMHgwMjAwMDAwMAotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAppbmRleCBjZDQ5MGIyLi5iZDQ0NTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKQEAgLTg1LDYgKzg1LDcgQEAKICNkZWZpbmUgIFNOX1NBTF9HRVRfUFJPTV9GRUFUVVJFX1NFVAkJICAgMHgwMjAwMDA2NQogI2RlZmluZSAgU05fU0FMX1NFVF9PU19GRUFUVVJFX1NFVAkJICAgMHgwMjAwMDA2NgogI2RlZmluZSAgU05fU0FMX0lOSkVDVF9FUlJPUgkJCSAgIDB4MDIwMDAwNjcKKyNkZWZpbmUgIFNOX1NBTF9TRVRfQ1BVX05VTUJFUgkJCSAgIDB4MDIwMDAwNjgKIAogLyoKICAqIFNlcnZpY2Utc3BlY2lmaWMgY29uc3RhbnRzCkBAIC0xMTUwLDQgKzExNTEsMTMgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwogCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOwogfQorCitzdGF0aWMgaW5saW5lIGludAoraWE2NF9zbl9zZXRfY3B1X251bWJlcihpbnQgY3B1KQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcnY7CisKKwlTQUxfQ0FMTF9OT0xPQ0socnYsIFNOX1NBTF9TRVRfQ1BVX05VTUJFUiwgY3B1LCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlyZXR1cm4gcnYuc3RhdHVzOworfQogI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9TTl9TQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYV9wcm92aWRlci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jYV9wcm92aWRlci5oCmluZGV4IGFiN2ZlMjQuLjY1Y2RkNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2FfcHJvdmlkZXIuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NhX3Byb3ZpZGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgUFY5MDgyMzQgKDEgPDwgMSkKICAgLyogQ0E6QUdQRE1BIHdyaXRlIHJlcXVlc3QgZGF0YSBtaXNtYXRjaCB3aXRoIEFCQzFDTCBtZXJnZSAqLwogI2RlZmluZSBQVjg5NTQ2OSAoMSA8PCAxKQotICAvKiBUSU86Q0EgVExCIGludmFsaWRhdGUgb2Ygd3JpdHRlbiBHQVJUIGVudHJpZXMgcG9zc2libHkgbm90IG9jY3VyaW5nIGluIENBKi8KKyAgLyogVElPOkNBIFRMQiBpbnZhbGlkYXRlIG9mIHdyaXR0ZW4gR0FSVCBlbnRyaWVzIHBvc3NpYmx5IG5vdCBvY2N1cnJpbmcgaW4gQ0EqLwogI2RlZmluZSBQVjkxMDI0NCAoMSA8PCAxKQogCiBzdHJ1Y3QgdGlvY2FfZG1hbWFwewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc29ja2V0LmgKaW5kZXggYTI1NTAwNi4uZDYzOGVmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NvY2tldC5oCkBAIC01Nyw1ICs1Nyw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAKICNkZWZpbmUgU09fUEVFUlNFQyAgICAgICAgICAgICAzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKaW5kZXggOGJjOTg2OS4uOGFkY2RlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaApAQCAtNjgsNyArNjgsNyBAQAogI2RlZmluZSBlbmRfb2Zfc3RhY2socCkgKHVuc2lnbmVkIGxvbmcgKikoKHZvaWQgKikocCkgKyBJQTY0X1JCU19PRkZTRVQpCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEFTS19TVFJVQ1RfQUxMT0NBVE9SCi0jZGVmaW5lIGFsbG9jX3Rhc2tfc3RydWN0KCkJKCh0YXNrX3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikpCisjZGVmaW5lIGFsbG9jX3Rhc2tfc3RydWN0KCkJKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLCBLRVJORUxfU1RBQ0tfU0laRV9PUkRFUikpCiAjZGVmaW5lIGZyZWVfdGFza19zdHJ1Y3QodHNrKQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodHNrKSwgS0VSTkVMX1NUQUNLX1NJWkVfT1JERVIpCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9od19pcnEuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaHdfaXJxLmgKaW5kZXggOGQ3ZTlkMC4uNzEzODUzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2h3X2lycS5oCkBAIC0xLDkgKzEsNCBAQAogI2lmbmRlZiBfQVNNX00zMlJfSFdfSVJRX0gKICNkZWZpbmUgX0FTTV9NMzJSX0hXX0lSUV9ICiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpCi17Ci0JLyogTm90aGluZyB0byBkbyAqLwotfQotCiAjZW5kaWYgLyogX0FTTV9NMzJSX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTMyci9zaWduYWwuaAppbmRleCA5NWY2OWIxLi5lNzUwMDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnbmFsLmgKQEAgLTgxLDcgKzgxLDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtMTAxLDcgKzEwMCw2IEBACiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKaW5kZXggOGI2NjgwZi4uYWNkZjc0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCkBAIC00OCw1ICs0OCw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAKICNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKyNkZWZpbmUgU09fUEFTU1NFQwkJMzQKIAogI2VuZGlmIC8qIF9BU01fTTMyUl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKaW5kZXggNjZjNDc0MmYuLjMxMWNlYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaApAQCAtMTgsNyArMTgsNyBAQAogICogc3dpdGNoX3RvKHByZXYsIG5leHQpIHNob3VsZCBzd2l0Y2ggZnJvbSB0YXNrIGBwcmV2JyB0byBgbmV4dCcKICAqIGBwcmV2JyB3aWxsIG5ldmVyIGJlIHRoZSBzYW1lIGFzIGBuZXh0Jy4KICAqCi0gKiBgbmV4dCcgYW5kIGBwcmV2JyBzaG91bGQgYmUgdGFza190LCBidXQgaXQgaXNuJ3QgYWx3YXlzIGRlZmluZWQKKyAqIGBuZXh0JyBhbmQgYHByZXYnIHNob3VsZCBiZSBzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJ1dCBpdCBpc24ndCBhbHdheXMgZGVmaW5lZAogICovCiAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpICBkbyB7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZmxvcHB5LmggYi9pbmNsdWRlL2FzbS1tNjhrL2Zsb3BweS5oCmluZGV4IDYzYTA1ZWQuLjU3ZjRmZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9mbG9wcHkuaApAQCAtODgsOCArODgsOCBAQAogc3RhdGljIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQogewogCWlmKE1BQ0hfSVNfUTQwKQotCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2hhcmRpbnQsU0FfSU5URVJSVVBULAotCQkJCQkJICAgImZsb3BweSIsIGZsb3BweV9oYXJkaW50KTsKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LAorCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBmbG9wcHlfaGFyZGludCk7CiAJZWxzZSBpZihNQUNIX0lTX1NVTjNYKQogCQlyZXR1cm4gc3VuM3hmbG9wX3JlcXVlc3RfaXJxKCk7CiAJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaXJxLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCmluZGV4IGY0YWU3ZDguLjMyNTdmOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pcnEuaApAQCAtNjcsOCArNjcsOCBAQAogCiAvKgogICogdmFyaW91cyBmbGFncyBmb3IgcmVxdWVzdF9pcnEoKSAtIHRoZSBBbWlnYSBub3cgdXNlcyB0aGUgc3RhbmRhcmQKLSAqIG1lY2hhbmlzbSBsaWtlIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzIC0gU0FfSU5URVJSVVBUIGFuZCBTQV9TSElSUQotICogYXJlIHlvdXIgZnJpZW5kcy4KKyAqIG1lY2hhbmlzbSBsaWtlIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzIC0gSVJRRl9ESVNBQkxFRCBhbmQKKyAqIElSUUZfU0hBUkVEIGFyZSB5b3VyIGZyaWVuZHMuCiAgKi8KICNpZm5kZWYgTUFDSF9BTUlHQV9PTkxZCiAjZGVmaW5lIElSUV9GTEdfTE9DSwkoMHgwMDAxKQkvKiBoYW5kbGVyIGlzIG5vdCByZXBsYWNlYWJsZQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2lnbmFsLmgKaW5kZXggODUwMzdhMy4uZGUxYmE2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NpZ25hbC5oCkBAIC03NCw3ICs3NCw2IEBACiAgKiBTQV9GTEFHUyB2YWx1ZXM6CiAgKgogICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQogICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCiAgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KICAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KQEAgLTk0LDcgKzkzLDYgQEAKIAogI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCiAKIC8qCiAgKiBzaWdhbHRzdGFjayBjb250cm9scwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLW02OGsvc29ja2V0LmgKaW5kZXggZjU3OGNhNC4uYTU5NjZlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NvY2tldC5oCkBAIC00OCw1ICs0OCw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAKICNkZWZpbmUgU09fUEVFUlNFQyAgICAgICAgICAgICAzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zeGZsb3AuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM3hmbG9wLmgKaW5kZXggOThhOWY3OS4uY2E4Y2M0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zeGZsb3AuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjN4ZmxvcC5oCkBAIC0yMDgsNyArMjA4LDggQEAKIAogCWlmKCFvbmNlKSB7CiAJCW9uY2UgPSAxOwotCQllcnJvciA9IHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIHN1bjN4ZmxvcF9oYXJkaW50LCBTQV9JTlRFUlJVUFQsICJmbG9wcHkiLCBOVUxMKTsKKwkJZXJyb3IgPSByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBzdW4zeGZsb3BfaGFyZGludCwKKwkJCQkgICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOwogCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7CiAJfSBlbHNlIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2Jvb3RzdGQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9ib290c3RkLmgKaW5kZXggM2ZkYzc5Zi4uYmRjMWE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2Jvb3RzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYm9vdHN0ZC5oCkBAIC01Miw3ICs1Miw3IEBACiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgIzIiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9ZyIgKF9fcmVzKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fcmVzKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWQwIik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICApOyBcCiAgICBfX2JzY19yZXR1cm4odHlwZSxfX3Jlcyk7IFwKIH0KIApAQCAtNjQsNyArNjQsNyBAQAogICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICMyIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWciIChfX3JlcykgXAogICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3JlcyksICJkIiAoX19hKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWQwIik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICApOyBcCiAgICBfX2JzY19yZXR1cm4odHlwZSxfX3Jlcyk7IFwKIH0KIApAQCAtNzcsNyArNzcsNyBAQAogICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICMyIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWciIChfX3JlcykgXAogICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3JlcyksICJkIiAoX19hKSwgImQiIChfX2IpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZDAiKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICk7IFwKICAgIF9fYnNjX3JldHVybih0eXBlLF9fcmVzKTsgXAogfQogCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWciIChfX3JlcykgXAogICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3JlcyksICJkIiAoX19hKSwgImQiIChfX2IpLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZCIgKF9fYykgXAotICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVkMCIpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsgXAogICAgX19ic2NfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1nIiAoX19yZXMpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX19yZXMpLCAiZCIgKF9fYSksICJkIiAoX19iKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImQiIChfX2MpLCAiZCIgKF9fZCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVkMCIpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsgXAogICAgX19ic2NfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1nIiAoX19yZXMpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX19yZXMpLCAiZCIgKF9fYSksICJkIiAoX19iKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImQiIChfX2MpLCAiZCIgKF9fZCksICJkIiAoX19lKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWQwIik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICApOyBcCiAgICBfX2JzY19yZXR1cm4odHlwZSxfX3Jlcyk7IFwKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oCmluZGV4IDUzNTU3MjcuLjQ1ZTdhMmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oCkBAIC02Miw4ICs2Miw4IEBACiAKIC8qCiAgKiB2YXJpb3VzIGZsYWdzIGZvciByZXF1ZXN0X2lycSgpIC0gdGhlIEFtaWdhIG5vdyB1c2VzIHRoZSBzdGFuZGFyZAotICogbWVjaGFuaXNtIGxpa2UgYWxsIG90aGVyIGFyY2hpdGVjdHVyZXMgLSBTQV9JTlRFUlJVUFQgYW5kIFNBX1NISVJRCi0gKiBhcmUgeW91ciBmcmllbmRzLgorICogbWVjaGFuaXNtIGxpa2UgYWxsIG90aGVyIGFyY2hpdGVjdHVyZXMgLSBJUlFGX0RJU0FCTEVEIGFuZAorICogSVJRRl9TSEFSRUQgYXJlIHlvdXIgZnJpZW5kcy4KICAqLwogI2RlZmluZSBJUlFfRkxHX0xPQ0sJKDB4MDAwMSkJLyogaGFuZGxlciBpcyBub3QgcmVwbGFjZWFibGUJKi8KICNkZWZpbmUgSVJRX0ZMR19SRVBMQUNFCSgweDAwMDIpCS8qIHJlcGxhY2UgZXhpc3RpbmcgaGFuZGxlcgkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NpZ25hbC5oCmluZGV4IDFkMTMxODcuLjIxNmMwOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2lnbmFsLmgKQEAgLTc0LDcgKzc0LDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtOTQsNyArOTMsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogLyogCiAgKiBzaWdhbHRzdGFjayBjb250cm9scwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCmluZGV4IDJjNDJmNmIuLjkyZTYyZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKQEAgLTI2LDE0ICsyNiwxNCBAQAogCW9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCiAJeG9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCiAJbXRjMAlccmVnLCBDUDBfVENTVEFUVVMKLQllaGIKKwlfZWhiCiAJLmVuZG0KIAogCS5tYWNybwlsb2NhbF9pcnFfZGlzYWJsZSByZWc9dDAKIAltZmMwCVxyZWcsIENQMF9UQ1NUQVRVUwogCW9yaQlccmVnLCBccmVnLCBUQ1NUQVRVU19JWE1UCiAJbXRjMAlccmVnLCBDUDBfVENTVEFUVVMKLQllaGIKKwlfZWhiCiAJLmVuZG0KICNlbHNlCiAJLm1hY3JvCWxvY2FsX2lycV9lbmFibGUgcmVnPXQwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAppbmRleCA4ODFjZTFmLi40NDI4NWE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCkBAIC0xODcsMTkgKzE4NywxNSBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgotIyBpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyX0lSUV9WSSkgJiYgIWRlZmluZWQoY3B1X2hhc192aW50KQotIyAgZGVmaW5lIGNwdV9oYXNfdmludAkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9WSU5UKQotIyBlbHNlCi0jICBkZWZpbmUgY3B1X2hhc192aW50CQkJMAotIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyX0lSUV9FSSkgJiYgIWRlZmluZWQoY3B1X2hhc192ZWljKQotIyAgZGVmaW5lIGNwdV9oYXNfdmVpYwkJKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9WRUlDKQotIyBlbHNlCi0jICBkZWZpbmUgY3B1X2hhc192ZWljCQkJMAotIyBlbmRpZgotI2Vsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyX0lSUV9WSSkgJiYgIWRlZmluZWQoY3B1X2hhc192aW50KQorIyBkZWZpbmUgY3B1X2hhc192aW50CQkoY3B1X2RhdGFbMF0ub3B0aW9ucyAmIE1JUFNfQ1BVX1ZJTlQpCisjZWxpZiAhZGVmaW5lZChjcHVfaGFzX3ZpbnQpCiAjIGRlZmluZSBjcHVfaGFzX3ZpbnQJCQkwCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjJfSVJRX0VJKSAmJiAhZGVmaW5lZChjcHVfaGFzX3ZlaWMpCisjIGRlZmluZSBjcHVfaGFzX3ZlaWMJCShjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfVkVJQykKKyNlbGlmICFkZWZpbmVkKGNwdV9oYXNfdmVpYykKICMgZGVmaW5lIGNwdV9oYXNfdmVpYwkJCTAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaAppbmRleCAxY2FkZWZiLi42OTU5YmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZml4bWFwLmgKQEAgLTY5LDcgKzY5LDExIEBACiAgKiB0aGUgc3RhcnQgb2YgdGhlIGZpeG1hcCwgYW5kIGxlYXZlIG9uZSBwYWdlIGVtcHR5CiAgKiBhdCB0aGUgdG9wIG9mIG1lbS4uCiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFg0OVhYKQorI2RlZmluZSBGSVhBRERSX1RPUAkoMHhmZjAwMDAwMFVMIC0gMHgyMDAwKQorI2Vsc2UKICNkZWZpbmUgRklYQUREUl9UT1AJKDB4ZmZmZmUwMDBVTCkKKyNlbmRpZgogI2RlZmluZSBGSVhBRERSX1NJWkUJKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBGSVhBRERSX1NUQVJUCShGSVhBRERSX1RPUCAtIEZJWEFERFJfU0laRSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAppbmRleCA2Njk0M2M0Li4yNWY1ZThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaApAQCAtNjksMTAgKzY5LDEwIEBACiAgKiBVc2UgYSBtYWNybyBmb3IgZWhiIHVubGVzcyBleHBsaWNpdCBzdXBwb3J0IGZvciBNSVBTUjIgaXMgZW5hYmxlZAogICovCiAKLSNkZWZpbmUgaXJxX2VuYWJsZV9oYXphcmQKKyNkZWZpbmUgaXJxX2VuYWJsZV9oYXphcmQJCQkJCQlcCiAJX2VoYgogCi0jZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZAorI2RlZmluZSBpcnFfZGlzYWJsZV9oYXphcmQJCQkJCQlcCiAJX2VoYgogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUk05MDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaHdfaXJxLmgKaW5kZXggYzg1NGQwMS4uNDU4ZDlmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2h3X2lycS5oCkBAIC0xOSw5ICsxOSw5IEBACiAKIGV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCi0vKiBUaGlzIG1heSBub3QgYmUgYXByb3ByaWF0ZSBmb3IgYWxsIG1hY2hpbmVzLCB3ZSdsbCBzZWUgLi4uICAqLwotc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkKLXsKLX0KKy8qCisgKiBpbnRlcnJ1cHQtcmV0cmlnZ2VyOiBOT1AgZm9yIG5vdy4gVGhpcyBtYXkgbm90IGJlIGFwcm9wcmlhdGUgZm9yIGFsbAorICogbWFjaGluZXMsIHdlJ2xsIHNlZSAuLi4KKyAqLwogCiAjZW5kaWYgLyogX19BU01fSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IGQzNWM2MTcuLjg5NjU1MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtNzYsNCArNzYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGh3bWFzayk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBBUkNIX0hBU19JUlFfUEVSX0NQVQorI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCmluZGV4IGQ3Y2JhY2QuLjFiZDRlMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCkBAIC01MTIsNyArNTEyLDcgQEAKIAogLyogVHJhbnNtaXQgcmVnaXN0ZXIgY29udHJvbC4KICovCi0jZGVmaW5lIFBTQ19TTUJUWFJYX1JTUgkJKDEgPDwgMzApCisjZGVmaW5lIFBTQ19TTUJUWFJYX1JTUgkJKDEgPDwgMjgpCiAjZGVmaW5lIFBTQ19TTUJUWFJYX1NUUAkJKDEgPDwgMjkpCiAjZGVmaW5lIFBTQ19TTUJUWFJYX0RBVEFNQVNLCSgweGZmKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2Zsb3BweS5oCmluZGV4IDgzY2Q2OWUuLjAwMWE4Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2Zsb3BweS5oCkBAIC05OCw3ICs5OCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQogewogCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAotCSAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFQsICJmbG9wcHkiLCBOVUxMKTsKKwkgICAgICAgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmRfZnJlZV9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovZmxvcHB5LmgKaW5kZXggOTQxMzExNy4uNTZlOWNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovZmxvcHB5LmgKQEAgLTkwLDcgKzkwLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGZkX3JlcXVlc3RfaXJxKHZvaWQpCiB7CiAJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9pbnRlcnJ1cHQsCi0JICAgICAgICAgICAgICAgICAgIFNBX0lOVEVSUlVQVCwgImZsb3BweSIsIE5VTEwpOworCSAgICAgICAgICAgICAgICAgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmZF9mcmVlX2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9pcnEuaAppbmRleCAwODNkOWM1Li5lOTk0YjBjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKQEAgLTQsMTAgKzQsNCBAQAogCiAjZGVmaW5lIE5SX0lSUVMJMjU2CiAKLSNpZmRlZiBDT05GSUdfU01QCi0KLSNkZWZpbmUgQVJDSF9IQVNfSVJRX1BFUl9DUFUKLQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTTV9NQUNIX01JUFNfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAppbmRleCA2NzM5Nzc5Li45MTkyZDc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCkBAIC0xNDU5LDcgKzE0NTksOCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZWhiKHZvaWQpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIgllaGIJCQkJCQkJXG4iKTsKKwkiCS5zZXQJbWlwczMycjIJCQkJCVxuIgorCSIJZWhiCQkJCQkJCVxuIgkJIgkuc2V0CW1pcHMwCQkJCQkJXG4iKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCmluZGV4IGExZjNhM2YuLjg3YTFkZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaApAQCAtNjQsNyArNjQsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC04NCw3ICs4Myw2IEBACiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAJLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCiAjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAJLyogT25seSBmb3IgbzMyICovCiAKQEAgLTk5LDE1ICs5Nyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgZmxhZyBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KLSAqLwotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLQogI2lmZGVmIENPTkZJR19UUkFEX1NJR05BTFMKICNkZWZpbmUgc2lnX3VzZXNfc2lnaW5mbyhrYSkJKChrYSktPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2lvYzMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vaW9jMy5oCmluZGV4IGY3ZDUzMGYuLjA5OTY3NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vaW9jMy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vaW9jMy5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfSU9DM19ICiAjZGVmaW5lIF9JT0MzX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFNVUEVSSU8gdWFydCByZWdpc3RlciBtYXAgKi8KIHR5cGVkZWYgdm9sYXRpbGUgc3RydWN0IGlvYzNfdWFydHJlZ3MgewogCXVuaW9uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaAppbmRleCA1MjIzOGU2Li5iNjNjZDA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCkBAIC02MDIsNyArNjAyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qga2xodWJfcyB7CQkJLyogSFVCICovCiAJa2xpbmZvX3QgCWh1Yl9pbmZvOwotCXVpbnQgCQlodWJfZmxhZ3M7CQkvKiBQQ0ZHX0hVQl94eHggZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgCQlodWJfZmxhZ3M7CQkvKiBQQ0ZHX0hVQl94eHggZmxhZ3MgKi8KIAlrbHBvcnRfdAlodWJfcG9ydDsJCS8qIGh1YiBpcyBjb25uZWN0ZWQgdG8gdGhpcyAqLwogCW5pY190CQlodWJfYm94X25pYzsJCS8qIG5pYyBvZiBjb250YWluaW5nIGJveCAqLwogCWtsY29uZl9vZmZfdAlodWJfbWZnX25pYzsJCS8qIE1GRyBOSUMgc3RyaW5nICovCkBAIC02MTEsNyArNjExLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qga2xodWJfdWFydF9zIHsJCQkvKiBIVUIgKi8KIAlrbGluZm9fdCAJaHVidWFydF9pbmZvOwotCXVpbnQgCQlodWJ1YXJ0X2ZsYWdzOwkJLyogUENGR19IVUJfeHh4IGZsYWdzICovCisJdW5zaWduZWQgaW50IAkJaHVidWFydF9mbGFnczsJCS8qIFBDRkdfSFVCX3h4eCBmbGFncyAqLwogCW5pY190CQlodWJ1YXJ0X2JveF9uaWM7CS8qIG5pYyBvZiBjb250YWluaW5nIGJveCAqLwogfSBrbGh1Yl91YXJ0X3QgOwogCkBAIC03MTAsNyArNzEwLDcgQEAKIC8qIFhYWCAtIERvbid0IHdlIG5lZWQgdGhlIG51bWJlciBvZiBwb3J0cyBoZXJlPyE/ICovCiB0eXBlZGVmIHN0cnVjdCBrbHJvdV9zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJPVVRFUiAqLwogCWtsaW5mb190IAlyb3VfaW5mbyA7Ci0JdWludAkJcm91X2ZsYWdzIDsgICAgICAgICAgIC8qIFBDRkdfUk9VVEVSX3h4eCBmbGFncyAqLworCXVuc2lnbmVkIGludAkJcm91X2ZsYWdzIDsgICAgICAgICAgIC8qIFBDRkdfUk9VVEVSX3h4eCBmbGFncyAqLwogCW5pY190CQlyb3VfYm94X25pYyA7ICAgICAgICAgLyogbmljIG9mIHRoZSBjb250YWluaW5nIG1vZHVsZSAqLwogICAgIAlrbHBvcnRfdCAJcm91X3BvcnRbTUFYX1JPVVRFUl9QT1JUUyArIDFdIDsgLyogYXJyYXkgaW5kZXggMSB0byA2ICovCiAJa2xjb25mX29mZl90CXJvdV9tZmdfbmljIDsgICAgIC8qIE1GRyBOSUMgc3RyaW5nICovCkBAIC03MzMsOCArNzMzLDggQEAKIAlrbGluZm9fdCAJZ2Z4X2luZm87CiAJa2xjb25mX29mZl90ICAgIG9sZF9nbmRldnM7CS8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcHJvbXMgKi8KIAlrbGNvbmZfb2ZmX3QgICAgb2xkX2dkb2ZmMDsJLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBwcm9tcyAqLwotCXVpbnQJCWNvb2tpZTsJCS8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcHJvbXMgKi8KLQl1aW50CQltb2R1bGVzbG90OworCXVuc2lnbmVkIGludAkJY29va2llOwkJLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBwcm9tcyAqLworCXVuc2lnbmVkIGludAkJbW9kdWxlc2xvdDsKIAlzdHJ1Y3Qga2xnZnhfcwkqZ2Z4X25leHRfcGlwZTsKIAlncmFwaGljc190CWdmeF9zcGVjaWZpYzsKIAlrbGNvbmZfb2ZmX3QgICAgcGFkMDsJCS8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcHJvbXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1taXBzL3NvY2tldC5oCmluZGV4IDBiYjMxZTUuLjM2ZWJlNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zb2NrZXQuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBTT19QRUVSU0VDCQkzMAogI2RlZmluZSBTT19TTkRCVUZGT1JDRQkJMzEKICNkZWZpbmUgU09fUkNWQlVGRk9SQ0UJCTMzCisjZGVmaW5lIFNPX1BBU1NTRUMJCTM0CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKaW5kZXggNTEzYWE1MS4uMTU4YTRjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKQEAgLTMwNCw3ICszMDQsNyBAQAogCQltZmMwCXYwLCBDUDBfVENTVEFUVVMKIAkJb3JpCXYwLCBUQ1NUQVRVU19JWE1UCiAJCW10YzAJdjAsIENQMF9UQ1NUQVRVUwotCQllaGIKKwkJX2VoYgogCQlETVQJNQkJCQkjIGRtdCBhMQogCQlqYWwJbWlwc19paGIKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCkBAIC0zMjUsMTQgKzMyNSwxNCBAQAogICogcmVzdG9yZSBUQ1N0YXR1cy5JWE1ULgogICovCiAJCUxPTkdfTAl2MSwgUFRfVENTVEFUVVMoc3ApCi0JCWVoYgorCQlfZWhiCiAJCW1mYzAJdjAsIENQMF9UQ1NUQVRVUwogCQlhbmRpCXYxLCBUQ1NUQVRVU19JWE1UCiAJCS8qIFdlIGtub3cgdGhhdCBUQ1N0YXR1YS5JWE1UIHNob3VsZCBiZSBzZXQgZnJvbSBhYm92ZSAqLwogCQl4b3JpCXYwLCB2MCwgVENTVEFUVVNfSVhNVAogCQlvcgl2MCwgdjAsIHYxCiAJCW10YzAJdjAsIENQMF9UQ1NUQVRVUwotCQllaGIKKwkJX2VoYgogCQlhbmRpCWExLCBhMSwgVlBFQ09OVFJPTF9URQogCQliZXF6CWExLCAxZgogCQllbXQKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkvKiBDbGVhciBUS1NVLCBsZWF2ZSBJWE1UICovCiAJCXhvcmkJdDAsIDB4MDAwMDE4MDAKIAkJbXRjMAl0MCwgQ1AwX1RDU1RBVFVTCi0JCWVoYgorCQlfZWhiCiAJCS8qIFdlIG5lZWQgdG8gbGVhdmUgdGhlIGdsb2JhbCBJRSBiaXQgc2V0LCBidXQgY2xlYXIgRVhMLi4uKi8KIAkJbWZjMAl0MCwgQ1AwX1NUQVRVUwogCQlvcmkJdDAsIFNUMF9FWEwgfCBTVDBfRVJMCkBAIC00MzgsNyArNDM4LDcgQEAKIAkJICogYW5kIGVuYWJsZSBpbnRlcnJ1cHRzIG9ubHkgZm9yIHRoZQogCQkgKiBjdXJyZW50IFRDLCB1c2luZyB0aGUgVENTdGF0dXMgcmVnaXN0ZXIuCiAJCSAqLwotCQllaGIKKwkJX2VoYgogCQltZmMwCXQwLENQMF9UQ1NUQVRVUwogCQkvKiBGb3J0dW5hdGVseSBDVSAwIGlzIGluIHRoZSBzYW1lIHBsYWNlIGluIGJvdGggcmVnaXN0ZXJzICovCiAJCS8qIFNldCBUQ1UwLCBUS1NVIChmb3IgbGF0ZXIgaW52ZXJzaW9uKSBhbmQgSVhNVCAqLwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJCS8qIENsZWFyIFRLU1UgKmFuZCogSVhNVCAqLwogCQl4b3JpCXQwLCAweDAwMDAxYzAwCiAJCW10YzAJdDAsIENQMF9UQ1NUQVRVUwotCQllaGIKKwkJX2VoYgogCQkvKiBXZSBuZWVkIHRvIGxlYXZlIHRoZSBnbG9iYWwgSUUgYml0IHNldCwgYnV0IGNsZWFyIEVYTC4uLiovCiAJCW1mYzAJdDAsIENQMF9TVEFUVVMKIAkJb3JpCXQwLCBTVDBfRVhMCkBAIC00NzksNyArNDc5LDcgQEAKIAkJYW5kaQl2MSwgdjAsIFRDU1RBVFVTX0lYTVQKIAkJb3JpCXYwLCBUQ1NUQVRVU19JWE1UCiAJCW10YzAJdjAsIENQMF9UQ1NUQVRVUwotCQllaGIKKwkJX2VoYgogCQlETVQJMgkJCQkjIGRtdAl2MAogCQkvKgogCQkgKiBXZSBkb24ndCBrbm93IGEgcHJpb3JpIGlmIHJhIGlzICJsaXZlIgpAQCAtNDk1LDcgKzQ5NSw3IEBACiAJCXhvcmkJdDAsIDB4MWUKIAkJbXRjMAl0MCwgQ1AwX1NUQVRVUwogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQkJZWhiCisJCV9laGIKIAkJYW5kaQl2MCwgdjAsIFZQRUNPTlRST0xfVEUKIAkJYmVxegl2MCwgMmYKIAkJbm9wCS8qIGRlbGF5IHNsb3QgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCmluZGV4IDhiYjBiYjkuLjgwOWY5ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaApAQCAtMzI2LDE2ICszMjYsMTcgQEAKICNkZWZpbmUgX19OUl91bnNoYXJlCQkJKF9fTlJfTGludXggKyAzMDMpCiAjZGVmaW5lIF9fTlJfc3BsaWNlCQkJKF9fTlJfTGludXggKyAzMDQpCiAjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkoX19OUl9MaW51eCArIDMwNSkKKyNkZWZpbmUgX19OUl90ZWUJCQkoX19OUl9MaW51eCArIDMwNikKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMDUKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzA2CiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMDUKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMwNgogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC02MDgsMTYgKzYwOSwxNyBAQAogI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkoX19OUl9MaW51eCArIDI2MikKICNkZWZpbmUgX19OUl9zcGxpY2UJCQkoX19OUl9MaW51eCArIDI2MykKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJCShfX05SX0xpbnV4ICsgMjY0KQorI2RlZmluZSBfX05SX3RlZQkJCShfX05SX0xpbnV4ICsgMjY1KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IExpbnV4IDY0LWJpdCBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2NAorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNjUKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgKi8KIAogI2RlZmluZSBfX05SXzY0X0xpbnV4CQkJNTAwMAotI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzCQkyNjQKKyNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjY1CiAKICNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgogCkBAIC04OTQsMTYgKzg5NiwxNyBAQAogI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkoX19OUl9MaW51eCArIDI2NikKICNkZWZpbmUgX19OUl9zcGxpY2UJCQkoX19OUl9MaW51eCArIDI2NykKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJCShfX05SX0xpbnV4ICsgMjY4KQorI2RlZmluZSBfX05SX3RlZQkJCShfX05SX0xpbnV4ICsgMjY5KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IE4zMiBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2OAorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNjkKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCiAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNjgKKyNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI2OQogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXNzZW1ibHkuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hc3NlbWJseS5oCmluZGV4IDNjZTM0NDAuLjFhN2JmZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hc3NlbWJseS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hc3NlbWJseS5oCkBAIC00OCw2ICs0OCw3IEBACiAjZGVmaW5lIENBTExFRV9TQVZFX0ZSQU1FX1NJWkUgKENBTExFRV9SRUdfRlJBTUVfU0laRSArIENBTExFRV9GTE9BVF9GUkFNRV9TSVpFKQogCiAjaWZkZWYgQ09ORklHX1BBMjAKKyNkZWZpbmUgTERDVwkJbGRjdyxjbwogI2RlZmluZSBCTAkJYixsCiAjIGlmZGVmIENPTkZJR182NEJJVAogIyAgZGVmaW5lIExFVkVMCQkyLjB3CkBAIC01NSw2ICs1Niw3IEBACiAjICBkZWZpbmUgTEVWRUwJCTIuMAogIyBlbmRpZgogI2Vsc2UKKyNkZWZpbmUgTERDVwkJbGRjdwogI2RlZmluZSBCTAkJYmwKICNkZWZpbmUgTEVWRUwJCTEuMQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0LmgKaW5kZXggMjg5NjI0ZC4uNzFiNGVlZWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdC5oCkBAIC01LDYgKzUsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAKICNkZWZpbmUgQ09NUEFUX1VTRVJfSFogMTAwCiAKQEAgLTE0OSw0ICsxNTAsMTQgQEAKIAlyZXR1cm4gKHZvaWQgX191c2VyICopcmVncy0+Z3JbMzBdOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX2lzX2NvbXBhdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3sKKwlyZXR1cm4gcGVyc29uYWxpdHkodC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19jb21wYXRfdGFzayh2b2lkKQoreworCXJldHVybiBfX2lzX2NvbXBhdF90YXNrKGN1cnJlbnQpOworfQorCiAjZW5kaWYgLyogX0FTTV9QQVJJU0NfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9mbG9wcHkuaAppbmRleCA0NThjZGIyLi5kYTJmOWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Zsb3BweS5oCkBAIC0xNTYsMTEgKzE1NiwxMSBAQAogc3RhdGljIGludCBmZF9yZXF1ZXN0X2lycSh2b2lkKQogewogCWlmKGNhbl91c2VfdmlydHVhbF9kbWEpCi0JCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCxTQV9JTlRFUlJVUFQsCi0JCQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwKKwkJCQkgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCk7CiAJZWxzZQotCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwgU0FfSU5URVJSVVBULAotCQkJCSAgICJmbG9wcHkiLCBOVUxMKTsKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9pbnRlcnJ1cHQsCisJCQkJICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWFfbWVtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9od19pcnEuaAppbmRleCAxNTE0MjZlLi42NzA3ZjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2h3X2lycS5oCkBAIC0zLDE1ICszLDYgQEAKIAogLyoKICAqCWxpbnV4L2luY2x1ZGUvYXNtL2h3X2lycS5oCi0gKgotICoJKEMpIDE5OTIsIDE5OTMgTGludXMgVG9ydmFsZHMsIChDKSAxOTk3IEluZ28gTW9sbmFyCi0gKgotICoJbW92ZWQgc29tZSBvZiB0aGUgb2xkIGFyY2gvaTM4Ni9rZXJuZWwvaXJxLmggdG8gaGVyZS4gVlkKLSAqCi0gKglJUlEvSVBJIGNoYW5nZXMgdGFrZW4gZnJvbSB3b3JrIGJ5IFRob21hcyBSYWRrZQotICoJPHRvbXNvZnRAaW5mb3JtYXRpay50dS1jaGVtbml0ei5kZT4KICAqLwogCi1leHRlcm4gdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqLCB1bnNpZ25lZCBpbnQpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaAppbmRleCAzNzdiYTkwLi41Y2FlMjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lycS5oCkBAIC0yNiwxMSArMjYsNiBAQAogCiAjZGVmaW5lIE5SX0lSUVMJCShDUFVfSVJRX01BWCArIDEpCiAKLS8qCi0gKiBJUlEgbGluZSBzdGF0dXMgbWFjcm8gSVJRX1BFUl9DUFUgaXMgdXNlZAotICovCi0jZGVmaW5lIEFSQ0hfSEFTX0lSUV9QRVJfQ1BVCi0KIHN0YXRpYyBfX2lubGluZV9fIGludCBpcnFfY2Fub25pY2FsaXplKGludCBpcnEpCiB7CiAJcmV0dXJuIChpcnEgPT0gMikgPyA5IDogaXJxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCmluZGV4IDA4MzY0ZjkuLmM5YjJlMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKQEAgLTI3OCwxMiArMjc4LDExIEBACiAvKiBjb25zdGFudHMgZm9yIE9TIChOVk0uLi4pICovCiAjZGVmaW5lIE9TX0lEX05PTkUJCTAJLyogVW5kZWZpbmVkIE9TIElECSovCiAjZGVmaW5lIE9TX0lEX0hQVVgJCTEJLyogSFAtVVggT1MJCSovCi0jZGVmaW5lIE9TX0lEX0xJTlVYCQlPU19JRF9IUFVYIC8qIGp1c3QgdXNlIHRoZSBzYW1lIHZhbHVlIGFzIGhwdXggKi8KICNkZWZpbmUgT1NfSURfTVBFWEwJCTIJLyogTVBFIFhMIE9TCQkqLwogI2RlZmluZSBPU19JRF9PU0YJCTMJLyogT1NGIE9TCQkqLwogI2RlZmluZSBPU19JRF9IUFJUCQk0CS8qIEhQLVJUIE9TCQkqLwogI2RlZmluZSBPU19JRF9OT1ZFTAkJNQkvKiBOT1ZFTEwgT1MJCSovCi0jZGVmaW5lIE9TX0lEX05UCQk2CS8qIE5UIE9TCQkqLworI2RlZmluZSBPU19JRF9MSU5VWAkJNgkvKiBMaW51eAkJKi8KIAogCiAvKiBjb25zdGFudHMgZm9yIFBEQ19DSEFTU0lTICovCkBAIC0zNTIsOCArMzUxLDggQEAKIAkJY2Nfd3QJOiAxLAkvKiAwID0gV1QtRGNhY2hlLCAxID0gV0ItRGNhY2hlICovCiAJCWNjX3NoCTogMiwJLyogMCA9IHNlcGFyYXRlIEkvRC1jYWNoZSwgZWxzZSBzaGFyZWQgSS9ELWNhY2hlICovCiAJCWNjX2NzdCAgOiAzLAkvKiAwID0gaW5jb2hlcmVudCBELWNhY2hlLCAxPWNvaGVyZW50IEQtY2FjaGUgKi8KLQkJY2NfcGFkMSA6IDUsCS8qIHJlc2VydmVkICovCi0JCWNjX2Fzc29jOiA4OwkvKiBhc3NvY2lhdGl2aXR5IG9mIEkvRC1jYWNoZSAqLworCQljY19wYWQxIDogMTAsCS8qIHJlc2VydmVkICovCisJCWNjX2h2ICAgOiAzOwkvKiBodmVyc2lvbiBkZXBlbmRlbnQgKi8KIH07CiAKIHN0cnVjdCBwZGNfdGxiX2NmIHsJCS8qIGZvciBQRENfQ0FDSEUgKEkvRC1UTEIncykgKi8KQEAgLTcxOSw2ICs3MTgsNyBAQAogaW50IHBkY19hZGRfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGludCBwZGNfY2hhc3Npc19pbmZvKHN0cnVjdCBwZGNfY2hhc3Npc19pbmZvICpjaGFzc2lzX2luZm8sIHZvaWQgKmxlZF9pbmZvLCB1bnNpZ25lZCBsb25nIGxlbik7CiBpbnQgcGRjX2NoYXNzaXNfZGlzcCh1bnNpZ25lZCBsb25nIGRpc3ApOworaW50IHBkY19jaGFzc2lzX3dhcm4odW5zaWduZWQgbG9uZyAqd2Fybik7CiBpbnQgcGRjX2NvcHJvY19jZmcoc3RydWN0IHBkY19jb3Byb2NfY2ZnICpwZGNfY29wcm9jX2luZm8pOwogaW50IHBkY19pb2RjX3JlYWQodW5zaWduZWQgbG9uZyAqYWN0Y250LCB1bnNpZ25lZCBsb25nIGhwYSwgdW5zaWduZWQgaW50IGluZGV4LAogCQkgIHZvaWQgKmlvZGNfZGF0YSwgdW5zaWduZWQgaW50IGlvZGNfZGF0YV9zaXplKTsKQEAgLTczMiw2ICs3MzIsNyBAQAogaW50IHBkY19tb2RlbF92ZXJzaW9ucyh1bnNpZ25lZCBsb25nICp2ZXJzaW9ucywgaW50IGlkKTsKIGludCBwZGNfbW9kZWxfY2FwYWJpbGl0aWVzKHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcyk7CiBpbnQgcGRjX2NhY2hlX2luZm8oc3RydWN0IHBkY19jYWNoZV9pbmZvICpjYWNoZSk7CitpbnQgcGRjX3NwYWNlaWRfYml0cyh1bnNpZ25lZCBsb25nICpzcGFjZV9iaXRzKTsKICNpZm5kZWYgQ09ORklHX1BBMjAKIGludCBwZGNfYnRsYl9pbmZvKHN0cnVjdCBwZGNfYnRsYl9pbmZvICpidGxiKTsKIGludCBwZGNfbWVtX21hcF9ocGEoc3RydWN0IHBkY19tZW1vcnlfbWFwICpyX2FkZHIsIHN0cnVjdCBwZGNfbW9kdWxlX3BhdGggKm1vZF9wYXRoKTsKQEAgLTc3NSw2ICs3NzYsMTggQEAKIAogZXh0ZXJuIHZvaWQgcGRjX2luaXQodm9pZCk7CiAKK3N0YXRpYyBpbmxpbmUgY2hhciAqIG9zX2lkX3RvX3N0cmluZyh1MTYgb3NfaWQpIHsKKwlzd2l0Y2gob3NfaWQpIHsKKwljYXNlIE9TX0lEX05PTkU6CXJldHVybiAiTm8gT1MiOworCWNhc2UgT1NfSURfSFBVWDoJcmV0dXJuICJIUC1VWCI7CisJY2FzZSBPU19JRF9NUEVYTDoJcmV0dXJuICJNUEUtaVgiOworCWNhc2UgT1NfSURfT1NGOgkJcmV0dXJuICJPU0YiOworCWNhc2UgT1NfSURfSFBSVDoJcmV0dXJuICJIUC1SVCI7CisJY2FzZSBPU19JRF9OT1ZFTDoJcmV0dXJuICJOb3ZlbGwgTmV0d2FyZSI7CisJY2FzZSBPU19JRF9MSU5VWDoJcmV0dXJuICJMaW51eCI7CisJZGVmYXVsdDoJcmV0dXJuICJVbmtub3duIjsKKwl9Cit9CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfUEFSSVNDX1BEQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAppbmRleCBiNmJjYzY3Li41MDY2YzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKQEAgLTUwNiwxMyArNTA2LDEzIEBACiAKIC8qIFRMQiBwYWdlIHNpemUgZW5jb2RpbmcgLSBzZWUgdGFibGUgMy0xIGluIHBhcmlzYzIwLnBkZiAqLwogI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzRLCQkwCi0jZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfMTZLCTEKLSNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR182NEsJMgorI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzE2SwkJMQorI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzY0SwkJMgogI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzI1NksJMwogI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzFNCQk0CiAjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfNE0JCTUKLSNkZWZpbmUgX1BBR0VfU0laRV9FTkNPRElOR18xNk0JNgotI2RlZmluZSBfUEFHRV9TSVpFX0VOQ09ESU5HXzY0TQk3CisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfMTZNCQk2CisjZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfNjRNCQk3CiAKICNpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKICMgZGVmaW5lIF9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCBfUEFHRV9TSVpFX0VOQ09ESU5HXzRLCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmgKaW5kZXggY2E0OWRjOS4uYjczNjI2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaApAQCAtMjYsMTQgKzI2LDEyIEBACiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CiAgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCiAgKi8KLQotLyogV2UgY2Fubm90IHVzZSBNRklBIGFzIGl0IHdhcyBhZGRlZCBmb3IgUEEyLjAgLSBwcnVtcGYKLQotICAgQXQgb25lIHBvaW50IHRoZXJlIHdlcmUgbm8gIjBmLzBiIiB0eXBlIGxvY2FsIHN5bWJvbHMgaW4gZ2FzIGZvcgotICAgUEEtUklTQy4gIFRoaXMgaXMgbm8gbG9uZ2VyIHRydWUsIGJ1dCB0aGlzIHN0aWxsIHNlZW1zIGxpa2UgdGhlCi0gICBuaWNlc3Qgd2F5IHRvIGltcGxlbWVudCB0aGlzLiAqLwotCi0jZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oIlxuXHRibHIgMCwlMFxuXHRub3AiOiI9ciIgKHBjKSk7IHBjOyB9KQorI2lmZGVmIENPTkZJR19QQTIwCisjZGVmaW5lIGN1cnJlbnRfaWEoeCkJX19hc21fXygibWZpYSAlMCIgOiAiPXIiKHgpKQorI2Vsc2UgLyogbWZpYSBhZGRlZCBpbiBwYTIuMCAqLworI2RlZmluZSBjdXJyZW50X2lhKHgpCV9fYXNtX18oImJsciAwLCUwXG5cdG5vcCIgOiAiPXIiKHgpKQorI2VuZGlmCisjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IGN1cnJlbnRfaWEocGMpOyBwYzsgfSkKIAogI2RlZmluZSBUQVNLX1NJWkUgICAgICAgICAgICAgICAoY3VycmVudC0+dGhyZWFkLnRhc2tfc2l6ZSkKICNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFICAgICAgKGN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zaWduYWwuaAppbmRleCAyNWNiMjNlLi45OGE4MmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NpZ25hbC5oCkBAIC00OCw3ICs0OCw2IEBACiAgKiBTQV9GTEFHUyB2YWx1ZXM6CiAgKgogICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQogICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCiAgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KICAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KQEAgLTY5LDcgKzY4LDYgQEAKIAogI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCiAKICNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMCAvKiBvYnNvbGV0ZSAtLSBpZ25vcmVkICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zb2NrZXQuaAppbmRleCAxYmY1NGRjLi5jZTJlYWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3NvY2tldC5oCkBAIC00OCw1ICs0OCw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTB4NDAxYwogCiAjZGVmaW5lIFNPX1BFRVJTRUMJCTB4NDAxZAorI2RlZmluZSBTT19QQVNTU0VDCQkweDQwMWUKIAogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaAppbmRleCA4NjM4NzYxLi41ZmUyZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oCkBAIC0xNTUsMTMgKzE1NSwxNCBAQAogICAgdHlwZSBhbmQgZHluYW1pY2FsbHkgc2VsZWN0IHRoZSAxNi1ieXRlIGFsaWduZWQgaW50IGZyb20gdGhlIGFycmF5CiAgICBmb3IgdGhlIHNlbWFwaG9yZS4gICovCiAKLSNkZWZpbmUgX19QQV9MRENXX0FMSUdOTUVOVCAxNgotI2RlZmluZSBfX2xkY3dfYWxpZ24oYSkgKHsgXAotICB1bnNpZ25lZCBsb25nIF9fcmV0ID0gKHVuc2lnbmVkIGxvbmcpICYoYSktPmxvY2tbMF07ICAgICAgICAJCVwKLSAgX19yZXQgPSAoX19yZXQgKyBfX1BBX0xEQ1dfQUxJR05NRU5UIC0gMSkgJiB+KF9fUEFfTERDV19BTElHTk1FTlQgLSAxKTsgXAotICAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIF9fcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBfX1BBX0xEQ1dfQUxJR05NRU5UCTE2CisjZGVmaW5lIF9fbGRjd19hbGlnbihhKSAoewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19yZXQgPSAodW5zaWduZWQgbG9uZykgJihhKS0+bG9ja1swXTsJXAorCV9fcmV0ID0gKF9fcmV0ICsgX19QQV9MRENXX0FMSUdOTUVOVCAtIDEpCQlcCisJCSYgfihfX1BBX0xEQ1dfQUxJR05NRU5UIC0gMSk7CQkJXAorCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgX19yZXQ7CQkJXAogfSkKLSNkZWZpbmUgTERDVwkibGRjdyIKKyNkZWZpbmUgX19MRENXCSJsZGN3IgogCiAjZWxzZSAvKkNPTkZJR19QQTIwKi8KIC8qIEZyb206ICJKaW0gSHVsbCIgPGppbS5odWxsIG9mIGhwLmNvbT4KQEAgLTE3MSwxNyArMTcyLDE4IEBACiAgICB0aGV5IG9ubHkgcmVxdWlyZSAibmF0dXJhbCIgYWxpZ25tZW50ICg0LWJ5dGUgZm9yIGxkY3csIDgtYnl0ZSBmb3IKICAgIGxkY2QpLiAqLwogCi0jZGVmaW5lIF9fUEFfTERDV19BTElHTk1FTlQgNAorI2RlZmluZSBfX1BBX0xEQ1dfQUxJR05NRU5UCTQKICNkZWZpbmUgX19sZGN3X2FsaWduKGEpICgodm9sYXRpbGUgdW5zaWduZWQgaW50ICopYSkKLSNkZWZpbmUgTERDVwkibGRjdyxjbyIKKyNkZWZpbmUgX19MRENXCSJsZGN3LGNvIgogCiAjZW5kaWYgLyohQ09ORklHX1BBMjAqLwogCiAvKiBMRENXLCB0aGUgb25seSBhdG9taWMgcmVhZC13cml0ZSBvcGVyYXRpb24gUEEtUklTQyBoYXMuICpzaWdoKi4gICovCi0jZGVmaW5lIF9fbGRjdyhhKSAoeyBcCi0JdW5zaWduZWQgX19yZXQ7IFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMRENXICIgMCglMSksJTAiIDogIj1yIiAoX19yZXQpIDogInIiIChhKSk7IFwKLQlfX3JldDsgXAorI2RlZmluZSBfX2xkY3coYSkgKHsJCQkJCQlcCisJdW5zaWduZWQgX19yZXQ7CQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKF9fTERDVyAiIDAoJTEpLCUwIgkJCVwKKwkJOiAiPXIiIChfX3JldCkgOiAiciIgKGEpKTsJCQlcCisJX19yZXQ7CQkJCQkJCVwKIH0pCiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VhY2Nlc3MuaAppbmRleCBmNmM0MTdjLi5kOTczZThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy91YWNjZXNzLmgKQEAgLTE3Miw3ICsxNzIsMTEgQEAKIC8qCiAgKiBUaGUgIl9fcHV0X3VzZXIva2VybmVsX2FzbSgpIiBtYWNyb3MgdGVsbCBnY2MgdGhleSByZWFkIGZyb20gbWVtb3J5CiAgKiBpbnN0ZWFkIG9mIHdyaXRpbmcuIFRoaXMgaXMgYmVjYXVzZSB0aGV5IGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5Ci0gKiBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubyBhbGlhc2luZyBpc3N1ZXMuCisgKiBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlIGFyZSBubyBhbGlhc2luZyBpc3N1ZXMuIFRoZXNlIG1hY3JvcyBtdXN0CisgKiBhbHNvIGJlIGF3YXJlIHRoYXQgImZpeHVwX3B1dF91c2VyX3NraXBfWzEyXSIgYXJlIGV4ZWN1dGVkIGluIHRoZQorICogY29udGV4dCBvZiB0aGUgZmF1bHQsIGFuZCBhbnkgcmVnaXN0ZXJzIHVzZWQgdGhlcmUgbXVzdCBiZSBsaXN0ZWQKKyAqIGFzIGNsb2JiZXJzLiBJbiB0aGlzIGNhc2Ugb25seSAicjEiIGlzIHVzZWQgYnkgdGhlIGN1cnJlbnQgcm91dGluZXMuCisgKiByOC9yOSBhcmUgYWxyZWFkeSBsaXN0ZWQgYXMgZXJyL3ZhbC4KICAqLwogCiAjaWZkZWYgX19MUDY0X18KQEAgLTE4Myw3ICsxODcsOCBAQAogCQkiXHQuZHdvcmRcdDFiLGZpeHVwX3B1dF91c2VyX3NraXBfMVxuIgkgICAgXAogCQkiXHQucHJldmlvdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJOiAiPXIiKF9fcHVfZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCTogInIiKHB0ciksICJyIih4KSwgIjAiKF9fcHVfZXJyKSkKKwkJOiAiciIocHRyKSwgInIiKHgpLCAiMCIoX19wdV9lcnIpCSAgICBcCisJICAgIAk6ICJyMSIpCiAKICNkZWZpbmUgX19wdXRfdXNlcl9hc20oc3R4LHgscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCmluZGV4IDEyYjg2NzIuLjI3YmNmYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKQEAgLTc5NywxMSArNzk3LDYgQEAKIAogI2RlZmluZSBTWVNfaWZ5KHN5c2NhbGxfbmFtZSkgICBfX05SXyMjc3lzY2FsbF9uYW1lCiAKLS8qIEFzc3VtZSBhbGwgc3lzY2FsbHMgYXJlIGRvbmUgZnJvbSBQSUMgY29kZSBqdXN0IHRvIGJlCi0gKiBzYWZlLiBUaGUgd29yc3QgY2FzZSBzY2VuYXJpbyBpcyB0aGF0IHlvdSBsb3NlIGEgcmVnaXN0ZXIKLSAqIGFuZCBzYXZlL3Jlc3RvcmUgcjE5IGFjcm9zcyB0aGUgc3lzY2FsbC4gKi8KLSNkZWZpbmUgUElDCi0KICNpZm5kZWYgQVNNX0xJTkVfU0VQCiAjIGRlZmluZSBBU01fTElORV9TRVAgOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggZmFiNDFjMi4uMWJhM2M5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtMTE3LDM4ICsxMTcsMzAgQEAKICNkZWZpbmUgQ1BVX0ZUUl9QUENfTEUJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMjAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1JFQUxfTEUJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwNDAwMDAwKQogCisvKgorICogQWRkIHRoZSA2NC1iaXQgcHJvY2Vzc29yIHVuaXF1ZSBmZWF0dXJlcyBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIHdvcmQ7CisgKiBvbiAzMi1iaXQsIG1ha2UgdGhlIG5hbWVzIGF2YWlsYWJsZSBidXQgZGVmaW5lZCB0byBiZSAwLgorICovCiAjaWZkZWYgX19wb3dlcnBjNjRfXwotLyogQWRkIHRoZSA2NGIgcHJvY2Vzc29yIHVuaXF1ZSBmZWF0dXJlcyBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIHdvcmQgKi8KLSNkZWZpbmUgQ1BVX0ZUUl9TTEIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMTAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSXzE2TV9QQUdFCQlBU01fQ09OU1QoMHgwMDAwMDAwMjAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX1RMQklFTAkJCUFTTV9DT05TVCgweDAwMDAwMDA0MDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfTk9FWEVDVVRFCQlBU01fQ09OU1QoMHgwMDAwMDAwODAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX0lBQlIJCQlBU01fQ09OU1QoMHgwMDAwMDAyMDAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX01NQ1JBCQkJQVNNX0NPTlNUKDB4MDAwMDAwNDAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9DVFJMCQkJQVNNX0NPTlNUKDB4MDAwMDAwODAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9TTVQJCQlBU01fQ09OU1QoMHgwMDAwMDEwMDAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRQkJQVNNX0NPTlNUKDB4MDAwMDAyMDAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRQkJQVNNX0NPTlNUKDB4MDAwMDA0MDAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFCQlBU01fQ09OU1QoMHgwMDAwMTAwMDAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX1BBVVNFX1pFUk8JCUFTTV9DT05TVCgweDAwMDAyMDAwMDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfUFVSUgkJCUFTTV9DT05TVCgweDAwMDA0MDAwMDAwMDAwMDApCisjZGVmaW5lIExPTkdfQVNNX0NPTlNUKHgpCQlBU01fQ09OU1QoeCkKICNlbHNlCi0vKiBlbnN1cmUgb24gMzJiIHByb2Nlc3NvcnMgdGhlIGZsYWdzIGFyZSBhdmFpbGFibGUgZm9yIGNvbXBpbGluZyBidXQKLSAqIGRvbid0IGRvIGFueXRoaW5nICovCi0jZGVmaW5lIENQVV9GVFJfU0xCCQkJQVNNX0NPTlNUKDB4MCkKLSNkZWZpbmUgQ1BVX0ZUUl8xNk1fUEFHRQkJQVNNX0NPTlNUKDB4MCkKLSNkZWZpbmUgQ1BVX0ZUUl9UTEJJRUwJCQlBU01fQ09OU1QoMHgwKQotI2RlZmluZSBDUFVfRlRSX05PRVhFQ1VURQkJQVNNX0NPTlNUKDB4MCkKLSNkZWZpbmUgQ1BVX0ZUUl9JQUJSCQkJQVNNX0NPTlNUKDB4MCkKLSNkZWZpbmUgQ1BVX0ZUUl9NTUNSQQkJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfQ1RSTAkJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfU01UCQkJQVNNX0NPTlNUKDB4MCkKLSNkZWZpbmUgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfTE9DS0xFU1NfVExCSUUJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfQ0lfTEFSR0VfUEFHRQkJQVNNX0NPTlNUKDB4MCkKLSNkZWZpbmUgQ1BVX0ZUUl9QVVJSCQkJQVNNX0NPTlNUKDB4MCkKKyNkZWZpbmUgTE9OR19BU01fQ09OU1QoeCkJCTAKICNlbmRpZgogCisjZGVmaW5lIENQVV9GVFJfU0xCCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAwMTAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSXzE2TV9QQUdFCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDAyMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfVExCSUVMCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAwNDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX05PRVhFQ1VURQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAwODAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0lBQlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDIwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfTU1DUkEJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDQwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfQ1RSTAkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwODAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9TTVQJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMTAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMjAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfTE9DS0xFU1NfVExCSUUJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDA0MDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFCQlMT05HX0FTTV9DT05TVCgweDAwMDAxMDAwMDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfUEFVU0VfWkVSTwkJTE9OR19BU01fQ09OU1QoMHgwMDAwMjAwMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX1BVUlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDA0MDAwMDAwMDAwMDApCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNkZWZpbmUgQ1BVX0ZUUl9QUENBU19BUkNIX1YyX0JBU0UgKENQVV9GVFJfU0xCIHwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmxvcHB5LmgKaW5kZXggOWM4ZDkxYi4uZmQyNDJhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9mbG9wcHkuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zsb3BweS5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIGZkX2Rpc2FibGVfaXJxKCkgICAgICAgIGRpc2FibGVfaXJxKEZMT1BQWV9JUlEpCiAjZGVmaW5lIGZkX2NhY2hlZmx1c2goYWRkcixzaXplKSAvKiBub3RoaW5nICovCiAjZGVmaW5lIGZkX3JlcXVlc3RfaXJxKCkgICAgICAgIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9pbnRlcnJ1cHQsIFwKLQkJCQkJICAgIFNBX0lOVEVSUlVQVCwgImZsb3BweSIsIE5VTEwpCisJCQkJCSAgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCkKICNkZWZpbmUgZmRfZnJlZV9pcnEoKSAgICAgICAgICAgZnJlZV9pcnEoRkxPUFBZX0lSUSwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAppbmRleCBjZTBmN2RiLi5kNDAzNTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKQEAgLTg2LDI3ICs4NiwyNyBAQAogI2RlZmluZSBtYXNrX2lycShpcnEpCQkJCQkJXAogCSh7CQkJCQkJCVwKIAkgCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsJCVwKLQkJaWYgKGRlc2MtPmhhbmRsZXIgJiYgZGVzYy0+aGFuZGxlci0+ZGlzYWJsZSkJXAotCQkJZGVzYy0+aGFuZGxlci0+ZGlzYWJsZShpcnEpOwkJXAorCQlpZiAoZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5kaXNhYmxlKQlcCisJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CQlcCiAJfSkKICNkZWZpbmUgdW5tYXNrX2lycShpcnEpCQkJCQkJXAogCSh7CQkJCQkJCVwKIAkgCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsJCVwKLQkJaWYgKGRlc2MtPmhhbmRsZXIgJiYgZGVzYy0+aGFuZGxlci0+ZW5hYmxlKQlcCi0JCQlkZXNjLT5oYW5kbGVyLT5lbmFibGUoaXJxKTsJCVwKKwkJaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW5hYmxlKQlcCisJCQlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsJCVwKIAl9KQogI2RlZmluZSBhY2tfaXJxKGlycSkJCQkJCQlcCiAJKHsJCQkJCQkJXAogCSAJaXJxX2Rlc2NfdCAqZGVzYyA9IGdldF9pcnFfZGVzYyhpcnEpOwkJXAotCQlpZiAoZGVzYy0+aGFuZGxlciAmJiBkZXNjLT5oYW5kbGVyLT5hY2spCVwKLQkJCWRlc2MtPmhhbmRsZXItPmFjayhpcnEpOwkJXAorCQlpZiAoZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5hY2spCVwKKwkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwkJXAogCX0pCiAKLS8qIFNob3VsZCB3ZSBoYW5kbGUgdGhpcyB2aWEgbG9zdCBpbnRlcnJ1cHRzIGFuZCBJUElzIG9yIHNob3VsZCB3ZSBkb24ndCBjYXJlIGxpa2UKLSAqIHdlIGRvIG5vdyA/IC0tQmVuSC4KKy8qCisgKiBpbnRlcnJ1cHQtcmV0cmlnZ2VyOiBzaG91bGQgd2UgaGFuZGxlIHRoaXMgdmlhIGxvc3QgaW50ZXJydXB0cyBhbmQgSVBJcworICogb3Igc2hvdWxkIHdlIG5vdCBjYXJlIGxpa2Ugd2UgZG8gbm93ID8gLS1CZW5ILgogICovCiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGU7Ci1zdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKSB7fQogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pODI1OS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pODI1OS5oCmluZGV4IDAzOTIxNTkuLmM4MGUxMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaTgyNTkuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2k4MjU5LmgKQEAgLTQsMTEgKzQsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCi1leHRlcm4gc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGk4MjU5X3BpYzsKLQorI2lmZGVmIENPTkZJR19QUENfTUVSR0UKK2V4dGVybiB2b2lkIGk4MjU5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1bnNpZ25lZCBsb25nIGludGFja19hZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaTgyNTlfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbHNlCiBleHRlcm4gdm9pZCBpODI1OV9pbml0KHVuc2lnbmVkIGxvbmcgaW50YWNrX2FkZHIsIGludCBvZmZzZXQpOwogZXh0ZXJuIGludCBpODI1OV9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBpODI1OV9pcnFfY2FzY2FkZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqdW51c2VkKTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19JODI1OV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAppbmRleCBhMTBmZWVjLi5lMDU3NTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKQEAgLTksMTMgKzksMzI2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotLyogdGhpcyBudW1iZXIgaXMgdXNlZCB3aGVuIG5vIGludGVycnVwdCBoYXMgYmVlbiBhc3NpZ25lZCAqLworCisjZGVmaW5lIGdldF9pcnFfZGVzYyhpcnEpICgmaXJxX2Rlc2NbKGlycSldKQorCisvKiBEZWZpbmUgYSB3YXkgdG8gaXRlcmF0ZSBhY3Jvc3MgaXJxcy4gKi8KKyNkZWZpbmUgZm9yX2VhY2hfaXJxKGkpIFwKKwlmb3IgKChpKSA9IDA7IChpKSA8IE5SX0lSUVM7ICsrKGkpKQorCitleHRlcm4gYXRvbWljX3QgcHBjX25fbG9zdF9pbnRlcnJ1cHRzOworCisjaWZkZWYgQ09ORklHX1BQQ19NRVJHRQorCisvKiBUaGlzIG51bWJlciBpcyB1c2VkIHdoZW4gbm8gaW50ZXJydXB0IGhhcyBiZWVuIGFzc2lnbmVkICovCisjZGVmaW5lIE5PX0lSUQkJCSgwKQorCisvKiBUaGlzIGlzIGEgc3BlY2lhbCBpcnEgbnVtYmVyIHRvIHJldHVybiBmcm9tIGdldF9pcnEoKSB0byB0ZWxsIHRoYXQKKyAqIG5vIGludGVycnVwdCBoYXBwZW5lZCBfYW5kXyBpZ25vcmUgaXQgKGRvbid0IGNvdW50IGl0IGFzIGJhZCkuIFNvbWUKKyAqIHBsYXRmb3JtcyBsaWtlIGlTZXJpZXMgcmVseSBvbiB0aGF0LgorICovCisjZGVmaW5lIE5PX0lSUV9JR05PUkUJCSgodW5zaWduZWQgaW50KS0xKQorCisvKiBUb3RhbCBudW1iZXIgb2YgdmlycSBpbiB0aGUgcGxhdGZvcm0gKG1ha2UgaXQgYSBDT05GSUdfKiBvcHRpb24gPyAqLworI2RlZmluZSBOUl9JUlFTCQk1MTIKKworLyogTnVtYmVyIG9mIGlycXMgcmVzZXJ2ZWQgZm9yIHRoZSBsZWdhY3kgY29udHJvbGxlciAqLworI2RlZmluZSBOVU1fSVNBX0lOVEVSUlVQVFMJMTYKKworLyogVGhpcyB0eXBlIGlzIHRoZSBwbGFjZWhvbGRlciBmb3IgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbnVtYmVyLiBJdCBoYXMgdG8KKyAqIGJlIGJpZyBlbm91Z2ggdG8gZW5jbG9zZSB3aGF0ZXZlciByZXByZXNlbnRhdGlvbiBpcyB1c2VkIGJ5IGEgZ2l2ZW4KKyAqIHBsYXRmb3JtLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaXJxX2h3X251bWJlcl90OworCisvKiBJbnRlcnJ1cHQgY29udHJvbGxlciAiaG9zdCIgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgYmUgZGVmaW5lZCBhcyBhCisgKiBpcnEgZG9tYWluIGNvbnRyb2xsZXIuIFRoYXQgaXMsIGl0IGhhbmRsZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBoYXJkd2FyZQorICogYW5kIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlcnMgZm9yIGEgZ2l2ZW4gaW50ZXJydXB0IGRvbWFpbi4gVGhlIGhvc3QKKyAqIHN0cnVjdHVyZSBpcyBnZW5lcmFsbHkgY3JlYXRlZCBieSB0aGUgUElDIGNvZGUgZm9yIGEgZ2l2ZW4gUElDIGluc3RhbmNlCisgKiAodGhvdWdoIGEgaG9zdCBjYW4gY292ZXIgbW9yZSB0aGFuIG9uZSBQSUMgaWYgdGhleSBoYXZlIGEgZmxhdCBudW1iZXIKKyAqIG1vZGVsKS4gSXQncyB0aGUgaG9zdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlCisgKiBpcnFfY2hpcCBvbiBhIGdpdmVuIGlycV9kZXNjIGFmdGVyIGl0J3MgYmVlbiBtYXBwZWQuCisgKgorICogVGhlIGhvc3QgY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBmYWlybHkgYWdub3N0aWMgdG8gdGhlIGZhY3QgdGhhdAorICogd2UgdXNlIGFuIG9wZW4gZmlybXdhcmUgZGV2aWNlLXRyZWUuIFdlIGRvIGhhdmUgcmVmZXJlbmNlcyB0byBzdHJ1Y3QKKyAqIGRldmljZV9ub2RlIGluIHR3byBwbGFjZXM6IGluIGlycV9maW5kX2hvc3QoKSB0byBmaW5kIHRoZSBob3N0IG1hdGNoaW5nCisgKiBhIGdpdmVuIGludGVycnVwdCBjb250cm9sbGVyIG5vZGUsIGFuZCBvZiBjb3Vyc2UgYXMgYW4gYXJndW1lbnQgdG8gaXRzCisgKiBjb3VudGVycGFydCBob3N0LT5vcHMtPm1hdGNoKCkgY2FsbGJhY2suIEhvd2V2ZXIsIHRob3NlIGFyZSB0cmVhdGVkIGFzCisgKiBnZW5lcmljIHBvaW50ZXJzIGJ5IHRoZSBjb3JlIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgYWN0dWFsbHkgYSBkZXZpY2Utbm9kZQorICogcG9pbnRlciBpcyBwdXJlbHkgYSBjb252ZW50aW9uIGJldHdlZW4gY2FsbGVycyBhbmQgaW1wbGVtZW50YXRpb24uIFRoaXMKKyAqIGNvZGUgY291bGQgdGh1cyBiZSB1c2VkIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgYnkgcmVwbGFjaW5nIHRob3NlIHR3bworICogYnkgc29tZSBzb3J0IG9mIGFyY2gtc3BlY2lmaWMgdm9pZCAqICJ0b2tlbiIgdXNlZCB0byBpZGVudGlmeSBpbnRlcnJ1cHQKKyAqIGNvbnRyb2xsZXJzLgorICovCitzdHJ1Y3QgaXJxX2hvc3Q7CitzdHJ1Y3QgcmFkaXhfdHJlZV9yb290OworCisvKiBGdW5jdGlvbnMgYmVsb3cgYXJlIHByb3ZpZGVkIGJ5IHRoZSBob3N0IGFuZCBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgbWFwcGluZworICogaXMgY3JlYXRlZCBvciBhbiBvbGQgbWFwcGluZyBpcyBkaXNwb3NlZC4gVGhlIGhvc3QgY2FuIHRoZW4gcHJvY2VlZCB0bworICogd2hhdGV2ZXIgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIG1hbmFnZW1lbnQgaXMgcmVxdWlyZWQuIEl0IGFsc28gbmVlZHMKKyAqIHRvIHNldHVwIHRoZSBpcnFfZGVzYyB3aGVuIHJldHVybmluZyBmcm9tIG1hcCgpLgorICovCitzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHsKKwkvKiBNYXRjaCBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciBkZXZpY2Ugbm9kZSB0byBhIGhvc3QsIHJldHVybnMKKwkgKiAxIG9uIGEgbWF0Y2gKKwkgKi8KKwlpbnQgKCptYXRjaCkoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworCisJLyogQ3JlYXRlIG9yIHVwZGF0ZSBhIG1hcHBpbmcgYmV0d2VlbiBhIHZpcnR1YWwgaXJxIG51bWJlciBhbmQgYSBodworCSAqIGlycSBudW1iZXIuIFRoaXMgY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGZvciB0aGUgc2FtZSBtYXBwaW5nCisJICogYnV0IHdpdGggZGlmZmVyZW50IGZsYWdzLCB0aG91Z2ggdW5tYXAgc2hhbGwgYWx3YXlzIGJlIGNhbGxlZAorCSAqIGJlZm9yZSB0aGUgdmlycS0+aHcgbWFwcGluZyBpcyBjaGFuZ2VkLgorCSAqLworCWludCAoKm1hcCkoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJICAgaXJxX2h3X251bWJlcl90IGh3LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisJLyogRGlzcG9zZSBvZiBzdWNoIGEgbWFwcGluZyAqLworCXZvaWQgKCp1bm1hcCkoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSk7CisKKwkvKiBUcmFuc2xhdGUgZGV2aWNlLXRyZWUgaW50ZXJydXB0IHNwZWNpZmllciBmcm9tIHJhdyBmb3JtYXQgY29taW5nCisJICogZnJvbSB0aGUgZmlybXdhcmUgdG8gYSBpcnFfaHdfbnVtYmVyX3QgKGludGVycnVwdCBsaW5lIG51bWJlcikgYW5kCisJICogdHJpZ2dlciBmbGFncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gaXJxX2NyZWF0ZV9tYXBwaW5nKCkuCisJICogSWYgbm8gdHJhbnNsYXRpb24gaXMgcHJvdmlkZWQsIHJhdyBmb3JtYXQgaXMgYXNzdW1lZCB0byBiZSBvbmUgY2VsbAorCSAqIGZvciBpbnRlcnJ1cHQgbGluZSBhbmQgZGVmYXVsdCBzZW5zZS4KKwkgKi8KKwlpbnQgKCp4bGF0ZSkoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxlciwKKwkJICAgICB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkgICAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncyk7Cit9OworCitzdHJ1Y3QgaXJxX2hvc3QgeworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsKKworCS8qIHR5cGUgb2YgcmV2ZXJzZSBtYXBwaW5nIHRlY2huaXF1ZSAqLworCXVuc2lnbmVkIGludAkJcmV2bWFwX3R5cGU7CisjZGVmaW5lIElSUV9IT1NUX01BUF9MRUdBQ1kgICAgIDAgLyogbGVnYWN5IDgyNTksIGdldHMgaXJxcyAxLi4xNSAqLworI2RlZmluZSBJUlFfSE9TVF9NQVBfTk9NQVAJMSAvKiBubyBmYXN0IHJldmVyc2UgbWFwcGluZyAqLworI2RlZmluZSBJUlFfSE9TVF9NQVBfTElORUFSCTIgLyogbGluZWFyIG1hcCBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9IT1NUX01BUF9UUkVFCTMgLyogcmFkaXggdHJlZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBzaXplOworCQkJdW5zaWduZWQgaW50ICpyZXZtYXA7CisJCX0gbGluZWFyOworCQlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHRyZWU7CisJfSByZXZtYXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2hvc3Rfb3BzCSpvcHM7CisJdm9pZAkJCSpob3N0X2RhdGE7CisJaXJxX2h3X251bWJlcl90CQlpbnZhbF9pcnE7Cit9OworCisvKiBUaGUgbWFpbiBpcnEgbWFwIGl0c2VsZiBpcyBhbiBhcnJheSBvZiBOUl9JUlEgZW50cmllcyBjb250YWluaW5nIHRoZQorICogYXNzb2NpYXRlIGhvc3QgYW5kIGlycSBudW1iZXIuIEFuIGVudHJ5IHdpdGggYSBob3N0IG9mIE5VTEwgaXMgZnJlZS4KKyAqIEFuIGVudHJ5IGNhbiBiZSBhbGxvY2F0ZWQgaWYgaXQncyBmcmVlLCB0aGUgYWxsb2NhdG9yIGFsd2F5cyB0aGVuIHNldHMKKyAqIGh3aXJxIGZpcnN0IHRvIHRoZSBob3N0J3MgaW52YWxpZCBpcnEgbnVtYmVyIGFuZCB0aGVuIGZpbGxzIG9wcy4KKyAqLworc3RydWN0IGlycV9tYXBfZW50cnkgeworCWlycV9od19udW1iZXJfdAlod2lycTsKKwlzdHJ1Y3QgaXJxX2hvc3QJKmhvc3Q7Cit9OworCitleHRlcm4gc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKKworCisvKioqCisgKiBpcnFfYWxsb2NfaG9zdCAtIEFsbG9jYXRlIGEgbmV3IGlycV9ob3N0IGRhdGEgc3RydWN0dXJlCisgKiBAbm9kZTogZGV2aWNlLXRyZWUgbm9kZSBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEByZXZtYXBfdHlwZTogdHlwZSBvZiByZXZlcnNlIG1hcHBpbmcgdG8gdXNlCisgKiBAcmV2bWFwX2FyZzogZm9yIElSUV9IT1NUX01BUF9MSU5FQVIgbGluZWFyIG9ubHk6IHNpemUgb2YgdGhlIG1hcAorICogQG9wczogbWFwL3VubWFwIGhvc3QgY2FsbGJhY2tzCisgKiBAaW52YWxfaXJxOiBwcm92aWRlIGEgaHcgbnVtYmVyIGluIHRoYXQgaG9zdCBzcGFjZSB0aGF0IGlzIGFsd2F5cyBpbnZhbGlkCisgKgorICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplIGFuZCBpcnFfaG9zdCBzdHJ1Y3R1cmUuIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZgorICogSVJRX0hPU1RfTUFQX0xFR0FDWSwgdGhlIG1hcCgpIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIHJldHVybnMKKyAqIGZvciBhbGwgbGVnYWN5IGludGVycnVwdHMgZXhjZXB0IDAgKHdoaWNoIGlzIGFsd2F5cyB0aGUgaW52YWxpZCBpcnEgZm9yCisgKiBhIGxlZ2FjeSBjb250cm9sbGVyKS4gRm9yIGEgSVJRX0hPU1RfTUFQX0xJTkVBUiwgdGhlIG1hcCBpcyBhbGxvY2F0ZWQgYnkKKyAqIHRoaXMgY2FsbCBhcyB3ZWxsLiBGb3IgYSBJUlFfSE9TVF9NQVBfVFJFRSwgdGhlIHJhZGl4IHRyZWUgd2lsbCBiZSBhbGxvY2F0ZWQKKyAqIGxhdGVyIGR1cmluZyBib290IGF1dG9tYXRpY2FsbHkgKHRoZSByZXZlcnNlIG1hcHBpbmcgd2lsbCB1c2UgdGhlIHNsb3cgcGF0aAorICogdW50aWwgdGhhdCBoYXBwZW5zKS4KKyAqLworZXh0ZXJuIHN0cnVjdCBpcnFfaG9zdCAqaXJxX2FsbG9jX2hvc3QodW5zaWduZWQgaW50IHJldm1hcF90eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmV2bWFwX2FyZywKKwkJCQkgICAgICAgc3RydWN0IGlycV9ob3N0X29wcyAqb3BzLAorCQkJCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgaW52YWxfaXJxKTsKKworCisvKioqCisgKiBpcnFfZmluZF9ob3N0IC0gTG9jYXRlcyBhIGhvc3QgZm9yIGEgZ2l2ZW4gZGV2aWNlIG5vZGUKKyAqIEBub2RlOiBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgorICovCitleHRlcm4gc3RydWN0IGlycV9ob3N0ICppcnFfZmluZF9ob3N0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CisKKworLyoqKgorICogaXJxX3NldF9kZWZhdWx0X2hvc3QgLSBTZXQgYSAiZGVmYXVsdCIgaG9zdAorICogQGhvc3Q6IGRlZmF1bHQgaG9zdCBwb2ludGVyCisgKgorICogRm9yIGNvbnZlbmllbmNlLCBpdCdzIHBvc3NpYmxlIHRvIHNldCBhICJkZWZhdWx0IiBob3N0IHRoYXQgd2lsbCBiZSB1c2VkCisgKiB3aGVuZXZlciBOVUxMIGlzIHBhc3NlZCB0byBpcnFfY3JlYXRlX21hcHBpbmcoKS4gSXQgbWFrZXMgbGlmZSBlYXNpZXIgZm9yCisgKiBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIG1hbmlwdWxhdGUgYSBmZXcgaGFyZCBjb2RlZCBpbnRlcnJ1cHQgbnVtYmVycyB0aGF0CisgKiBhcmVuJ3QgcHJvcGVybHkgcmVwcmVzZW50ZWQgaW4gdGhlIGRldmljZS10cmVlLgorICovCitleHRlcm4gdm9pZCBpcnFfc2V0X2RlZmF1bHRfaG9zdChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QpOworCisKKy8qKioKKyAqIGlycV9zZXRfdmlycV9jb3VudCAtIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmlydCBpcnFzCisgKiBAY291bnQ6IG51bWJlciBvZiBsaW51eCB2aXJ0dWFsIGlycXMsIGNhcHBlZCB3aXRoIE5SX0lSUVMKKyAqCisgKiBUaGlzIGlzIG1haW5seSBmb3IgdXNlIGJ5IHBsYXRmb3JtcyBsaWtlIGlTZXJpZXMgd2hvIHdhbnQgdG8gcHJvZ3JhbQorICogdGhlIHZpcnR1YWwgaXJxIG51bWJlciBpbiB0aGUgY29udHJvbGxlciB0byBhdm9pZCB0aGUgcmV2ZXJzZSBtYXBwaW5nCisgKi8KK2V4dGVybiB2b2lkIGlycV9zZXRfdmlycV9jb3VudCh1bnNpZ25lZCBpbnQgY291bnQpOworCisKKy8qKioKKyAqIGlycV9jcmVhdGVfbWFwcGluZyAtIE1hcCBhIGhhcmR3YXJlIGludGVycnVwdCBpbnRvIGxpbnV4IHZpcnEgc3BhY2UKKyAqIEBob3N0OiBob3N0IG93bmluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdCBvciBOVUxMIGZvciBkZWZhdWx0IGhvc3QKKyAqIEBod2lycTogaGFyZHdhcmUgaXJxIG51bWJlciBpbiB0aGF0IGhvc3Qgc3BhY2UKKyAqIEBmbGFnczogZmxhZ3MgcGFzc2VkIHRvIHRoZSBjb250cm9sbGVyLiBjb250YWlucyB0aGUgdHJpZ2dlciB0eXBlIGFtb25nCisgKiAgICAgICAgIG90aGVycy4gVXNlIElSUV9UWVBFXyogZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2lycS5oCisgKgorICogT25seSBvbmUgbWFwcGluZyBwZXIgaGFyZHdhcmUgaW50ZXJydXB0IGlzIHBlcm1pdHRlZC4gUmV0dXJucyBhIGxpbnV4CisgKiB2aXJxIG51bWJlci4gVGhlIGZsYWdzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgc2Vuc2UgaW5mb3JtYXRpb24gdG8gdGhlCisgKiBjb250cm9sbGVyICh0eXBpY2FsbHkgZXh0cmFjdGVkIGZyb20gdGhlIGRldmljZS10cmVlKS4gSWYgbm8gaW5mb3JtYXRpb24KKyAqIGlzIHBhc3NlZCwgdGhlIGNvbnRyb2xsZXIgZGVmYXVsdHMgd2lsbCBhcHBseSAoZm9yIGV4YW1wbGUsIHhpY3MgY2FuIG9ubHkKKyAqIGRvIGVkZ2Ugc28gZmxhZ3MgYXJlIGlycmVsZXZhbnQgZm9yIHNvbWUgcHNlcmllcyBzcGVjaWZpYyBpcnFzKS4KKyAqCisgKiBUaGUgZGV2aWNlLXRyZWUgZ2VuZXJhbGx5IGNvbnRhaW5zIHRoZSB0cmlnZ2VyIGluZm8gaW4gYW4gZW5jb2RpbmcgdGhhdCBpcworICogc3BlY2lmaWMgdG8gYSBnaXZlbiB0eXBlIG9mIGNvbnRyb2xsZXIuIEluIHRoYXQgY2FzZSwgeW91IGNhbiBkaXJlY3RseSB1c2UKKyAqIGhvc3QtPm9wcy0+dHJpZ2dlcl94bGF0ZSgpIHRvIHRyYW5zbGF0ZSB0aGF0LgorICoKKyAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmV3IFBJQ3MgdGhhdCBkb24ndCBoYXZlIGV4aXN0aW5nIE9GIGJpbmRpbmdzIGNob3NlCisgKiB0byB1c2UgYSByZXByZXNlbnRhdGlvbiBvZiB0cmlnZ2VycyBpZGVudGljYWwgdG8gbGludXguCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgaXJxX2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKKwkJCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisKKy8qKioKKyAqIGlycV9kaXNwb3NlX21hcHBpbmcgLSBVbm1hcCBhbiBpbnRlcnJ1cHQKKyAqIEB2aXJxOiBsaW51eCB2aXJxIG51bWJlciBvZiB0aGUgaW50ZXJydXB0IHRvIHVubWFwCisgKi8KK2V4dGVybiB2b2lkIGlycV9kaXNwb3NlX21hcHBpbmcodW5zaWduZWQgaW50IHZpcnEpOworCisvKioqCisgKiBpcnFfZmluZF9tYXBwaW5nIC0gRmluZCBhIGxpbnV4IHZpcnEgZnJvbSBhbiBodyBpcnEgbnVtYmVyLgorICogQGhvc3Q6IGhvc3Qgb3duaW5nIHRoaXMgaGFyZHdhcmUgaW50ZXJydXB0CisgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCisgKgorICogVGhpcyBpcyBhIHNsb3cgcGF0aCwgZm9yIHVzZSBieSBnZW5lcmljIGNvZGUuIEl0J3MgZXhwZWN0ZWQgdGhhdCBhbgorICogaXJxIGNvbnRyb2xsZXIgaW1wbGVtZW50YXRpb24gZGlyZWN0bHkgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGxvdyBsZXZlbAorICogbWFwcGluZyBmdW5jdGlvbi4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfZmluZF9tYXBwaW5nKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKKwkJCQkgICAgIGlycV9od19udW1iZXJfdCBod2lycSk7CisKKworLyoqKgorICogaXJxX3JhZGl4X3Jldm1hcCAtIEZpbmQgYSBsaW51eCB2aXJxIGZyb20gYSBodyBpcnEgbnVtYmVyLgorICogQGhvc3Q6IGhvc3Qgb3duaW5nIHRoaXMgaGFyZHdhcmUgaW50ZXJydXB0CisgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCisgKgorICogVGhpcyBpcyBhIGZhc3QgcGF0aCwgZm9yIHVzZSBieSBpcnEgY29udHJvbGxlciBjb2RlIHRoYXQgdXNlcyByYWRpeCB0cmVlCisgKiByZXZtYXBzCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCisJCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOworCisvKioqCisgKiBpcnFfbGluZWFyX3Jldm1hcCAtIEZpbmQgYSBsaW51eCB2aXJxIGZyb20gYSBodyBpcnEgbnVtYmVyLgorICogQGhvc3Q6IGhvc3Qgb3duaW5nIHRoaXMgaGFyZHdhcmUgaW50ZXJydXB0CisgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCisgKgorICogVGhpcyBpcyBhIGZhc3QgcGF0aCwgZm9yIHVzZSBieSBpcnEgY29udHJvbGxlciBjb2RlIHRoYXQgdXNlcyBsaW5lYXIKKyAqIHJldm1hcHMuIEl0IGRvZXMgZmFsbGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBpZiB0aGUgcmV2bWFwIGRvZXNuJ3QgZXhpc3QKKyAqIHlldCBhbmQgd2lsbCBjcmVhdGUgdGhlIHJldm1hcCBlbnRyeSB3aXRoIGFwcHJvcHJpYXRlIGxvY2tpbmcKKyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IGlycV9saW5lYXJfcmV2bWFwKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKKwkJCQkgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOworCisKKworLyoqKgorICogaXJxX2FsbG9jX3ZpcnQgLSBBbGxvY2F0ZSB2aXJ0dWFsIGlycSBudW1iZXJzCisgKiBAaG9zdDogaG9zdCBvd25pbmcgdGhlc2UgbmV3IHZpcnR1YWwgaXJxcworICogQGNvdW50OiBudW1iZXIgb2YgY29uc2VjdXRpdmUgbnVtYmVycyB0byBhbGxvY2F0ZQorICogQGhpbnQ6IHBhc3MgYSBoaW50IG51bWJlciwgdGhlIGFsbG9jYXRvciB3aWxsIHRyeSB0byB1c2UgYSAxOjEgbWFwcGluZworICoKKyAqIFRoaXMgaXMgYSBsb3cgbGV2ZWwgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGludGVybmFsbHkgYnkgaXJxX2NyZWF0ZV9tYXBwaW5nKCkKKyAqIGFuZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHNvbWUgaXJxIGNvbnRyb2xsZXJzIGltcGxlbWVudGF0aW9ucyBmb3IgdGhpbmdzCisgKiBsaWtlIGFsbG9jYXRpbmcgcmFuZ2VzIG9mIG51bWJlcnMgZm9yIE1TSXMuIFRoZSByZXZtYXBzIGFyZSBsZWZ0IHVudG91Y2hlZC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfYWxsb2NfdmlydChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCisJCQkJICAgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCSAgIHVuc2lnbmVkIGludCBoaW50KTsKKworLyoqKgorICogaXJxX2ZyZWVfdmlydCAtIEZyZWUgdmlydHVhbCBpcnEgbnVtYmVycworICogQHZpcnE6IHZpcnR1YWwgaXJxIG51bWJlciBvZiB0aGUgZmlyc3QgaW50ZXJydXB0IHRvIGZyZWUKKyAqIEBjb3VudDogbnVtYmVyIG9mIGludGVycnVwdHMgdG8gZnJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9wcG9zaXRlIG9mIGlycV9hbGxvY192aXJ0LiBJdCB3aWxsIG5vdCBjbGVhciByZXZlcnNlCisgKiBtYXBzLCB0aGlzIHNob3VsZCBiZSBkb25lIHByZXZpb3VzbHkgYnkgdW5tYXAnaW5nIHRoZSBpbnRlcnJ1cHQuIEluIGZhY3QsCisgKiBhbGwgaW50ZXJydXB0cyBjb3ZlcmVkIGJ5IHRoZSByYW5nZSBiZWluZyBmcmVlZCBzaG91bGQgaGF2ZSBiZWVuIHVubWFwcGVkCisgKiBwcmlvciB0byBjYWxsaW5nIHRoaXMuCisgKi8KK2V4dGVybiB2b2lkIGlycV9mcmVlX3ZpcnQodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBjb3VudCk7CisKKworLyogLS0gT0YgaGVscGVycyAtLSAqLworCisvKiBpcnFfY3JlYXRlX29mX21hcHBpbmcgLSBNYXAgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgaW50byBsaW51eCB2aXJxIHNwYWNlCisgKiBAY29udHJvbGxlcjogRGV2aWNlIG5vZGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCisgKiBAaW5zcGVjOiBJbnRlcnJ1cHQgc3BlY2lmaWVyIGZyb20gdGhlIGRldmljZS10cmVlCisgKiBAaW50c2l6ZTogU2l6ZSBvZiB0aGUgaW50ZXJydXB0IHNwZWNpZmllciBmcm9tIHRoZSBkZXZpY2UtdHJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlycV9jcmVhdGVfbWFwcGluZyBleGNlcHQgdGhhdCBpdCB0YWtlcworICogYXMgaW5wdXQgaW5mb3JtYXRpb25zIHN0cmFpZ2h0IGZyb20gdGhlIGRldmljZS10cmVlICh0eXBpY2FsbHkgdGhlIHJlc3VsdHMKKyAqIG9mIHRoZSBvZl9pcnFfbWFwXyooKSBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX29mX21hcHBpbmcoc3RydWN0IGRldmljZV9ub2RlICpjb250cm9sbGVyLAorCQkJCQkgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUpOworCisKKy8qIGlycV9vZl9wYXJzZV9hbmRfbWFwIC0gUGFyc2UgbmFkIE1hcCBhbiBpbnRlcnJ1cHQgaW50byBsaW51eCB2aXJxIHNwYWNlCisgKiBAZGV2aWNlOiBEZXZpY2Ugbm9kZSBvZiB0aGUgZGV2aWNlIHdob3NlIGludGVycnVwdCBpcyB0byBiZSBtYXBwZWQKKyAqIEBpbmRleDogSW5kZXggb2YgdGhlIGludGVycnVwdCB0byBtYXAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciB0aGF0IGNoYWlucyBvZl9pcnFfbWFwX29uZSgpIGFuZAorICogaXJxX2NyZWF0ZV9vZl9tYXBwaW5nKCkgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIHRvIGNhbGxlcnMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfb2ZfcGFyc2VfYW5kX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4KTsKKworLyogLS0gRW5kIE9GIGhlbHBlcnMgLS0gKi8KKworLyoqKgorICogaXJxX2Vhcmx5X2luaXQgLSBJbml0IGlycSByZW1hcHBpbmcgc3Vic3lzdGVtCisgKi8KK2V4dGVybiB2b2lkIGlycV9lYXJseV9pbml0KHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm9uaWNhbGl6ZShpbnQgaXJxKQoreworCXJldHVybiBpcnE7Cit9CisKKworI2Vsc2UgLyogQ09ORklHX1BQQ19NRVJHRSAqLworCisvKiBUaGlzIG51bWJlciBpcyB1c2VkIHdoZW4gbm8gaW50ZXJydXB0IGhhcyBiZWVuIGFzc2lnbmVkICovCiAjZGVmaW5lIE5PX0lSUQkJCSgtMSkKKyNkZWZpbmUgTk9fSVJRX0lHTk9SRQkJKC0yKQorCiAKIC8qCiAgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gYWJvdXQgaW50ZXJydXB0CkBAIC0zMCw2MSArMzQzLDYgQEAKICNkZWZpbmUgSVJRX1BPTEFSSVRZX1BPU0lUSVZFCTB4MgkvKiBoaWdoIGxldmVsIG9yIGxvdy0+aGlnaCBlZGdlICovCiAjZGVmaW5lIElSUV9QT0xBUklUWV9ORUdBVElWRQkweDAJLyogbG93IGxldmVsIG9yIGhpZ2gtPmxvdyBlZGdlICovCiAKLS8qCi0gKiBJUlEgbGluZSBzdGF0dXMgbWFjcm8gSVJRX1BFUl9DUFUgaXMgdXNlZAotICovCi0jZGVmaW5lIEFSQ0hfSEFTX0lSUV9QRVJfQ1BVCi0KLSNkZWZpbmUgZ2V0X2lycV9kZXNjKGlycSkgKCZpcnFfZGVzY1soaXJxKV0pCi0KLS8qIERlZmluZSBhIHdheSB0byBpdGVyYXRlIGFjcm9zcyBpcnFzLiAqLwotI2RlZmluZSBmb3JfZWFjaF9pcnEoaSkgXAotCWZvciAoKGkpID0gMDsgKGkpIDwgTlJfSVJRUzsgKysoaSkpCi0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLQotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdCBzb3VyY2VzIHRoYXQgd2UgY2FuIGhhbmRsZS4KLSAqLwotI2RlZmluZSBOUl9JUlFTCQk1MTIKLQotLyogSW50ZXJydXB0IG51bWJlcnMgYXJlIHZpcnR1YWwgaW4gY2FzZSB0aGV5IGFyZSBzcGFyc2VseQotICogZGlzdHJpYnV0ZWQgYnkgdGhlIGhhcmR3YXJlLgotICovCi1leHRlcm4gdW5zaWduZWQgaW50IHZpcnRfaXJxX3RvX3JlYWxfbWFwW05SX0lSUVNdOwotCi0vKiBUaGUgbWF4aW11bSB2aXJ0dWFsIElSUSBudW1iZXIgdGhhdCB3ZSBzdXBwb3J0LiAgVGhpcwotICogY2FuIGJlIHNldCBieSB0aGUgcGxhdGZvcm0gYW5kIHdpbGwgYmUgcmVkdWNlZCBieSB0aGUKLSAqIHZhbHVlIG9mIF9faXJxX29mZnNldF92YWx1ZS4gIEl0IGRlZmF1bHRzIHRvIGFuZCBpcwotICogY2FwcGVkIGJ5IChOUl9JUlFTIC0gMSkuCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgdmlydF9pcnFfbWF4OwotCi0vKiBDcmVhdGUgYSBtYXBwaW5nIGZvciBhIHJlYWxfaXJxIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KLSAqIFJldHVybiB0aGUgdmlydHVhbCBpcnEgYXMgYSBjb252ZW5pZW5jZS4KLSAqLwotaW50IHZpcnRfaXJxX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGludCByZWFsX2lycSk7Ci12b2lkIHZpcnRfaXJxX2luaXQodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZpcnRfaXJxX3RvX3JlYWwodW5zaWduZWQgaW50IHZpcnRfaXJxKQotewotCXJldHVybiB2aXJ0X2lycV90b19yZWFsX21hcFt2aXJ0X2lycV07Ci19Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgcmVhbF9pcnFfdG9fdmlydF9zbG93cGF0aCh1bnNpZ25lZCBpbnQgcmVhbF9pcnEpOwotCi0vKgotICogTGlzdCBvZiBpbnRlcnJ1cHQgY29udHJvbGxlcnMuCi0gKi8KLSNkZWZpbmUgSUNfSU5WQUxJRCAgICAwCi0jZGVmaW5lIElDX09QRU5fUElDICAgMQotI2RlZmluZSBJQ19QUENfWElDICAgIDIKLSNkZWZpbmUgSUNfQ0VMTF9QSUMgICAzCi0jZGVmaW5lIElDX0lTRVJJRVMgICAgNAotCi1leHRlcm4gdTY0IHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyOwotCi0jZWxzZSAvKiAzMi1iaXQgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHXzQweCkKICNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+CkBAIC01MTcsMTYgKzc3NSwxMSBAQAogCiAjZW5kaWYgLyogQ09ORklHXzgyNjAgKi8KIAotI2VuZGlmCisjZW5kaWYgLyogV2hhdGV2ZXIgd2F5IHRvbyBiaWcgI2lmZGVmICovCiAKICNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKIC8qIHBlZGFudGljOiB0aGVzZSBhcmUgbG9uZyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgd2l0aCBzZXRfYml0IC0tUlIgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107Ci1leHRlcm4gYXRvbWljX3QgcHBjX25fbG9zdF9pbnRlcnJ1cHRzOwotCi0jZGVmaW5lIHZpcnRfaXJxX2NyZWF0ZV9tYXBwaW5nKHgpCSh4KQotCi0jZW5kaWYKIAogLyoKICAqIEJlY2F1c2UgbWFueSBzeXN0ZW1zIGhhdmUgdHdvIG92ZXJsYXBwaW5nIG5hbWVzIHNwYWNlcyBmb3IKQEAgLTU2NSw2ICs4MTgsNyBAQAogCQlpcnEgPSA5OwogCXJldHVybiBpcnE7CiB9CisjZW5kaWYgLyogQ09ORklHX1BQQ19NRVJHRSAqLwogCiBleHRlcm4gaW50IGRpc3RyaWJ1dGVfaXJxczsKIApAQCAtNTg0LDkgKzgzOCw4IEBACiAKIGV4dGVybiB2b2lkIGlycV9jdHhfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNhbGxfZG9fc29mdGlycShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKLWV4dGVybiBpbnQgY2FsbF9fX2RvX0lSUShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJc3RydWN0IHRocmVhZF9pbmZvICp0cCk7Ci0KK2V4dGVybiBpbnQgY2FsbF9oYW5kbGVfaXJxKGludCBpcnEsIHZvaWQgKnAxLCB2b2lkICpwMiwKKwkJCSAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHAsIHZvaWQgKmZ1bmMpOwogI2Vsc2UKICNkZWZpbmUgaXJxX2N0eF9pbml0KCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnFmbGFncy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzBjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycWZsYWdzLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXBvd2VycGMvaXJxZmxhZ3MuaAorICoKKyAqIElSUSBmbGFncyBoYW5kbGluZworICoKKyAqIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gbG93bGV2ZWwgYXNtIGhlYWRlcnMgdG9vLCB0byBwcm92aWRlCisgKiB3cmFwcGVkIHZlcnNpb25zIG9mIHRoZSBsb2NhbF9pcnFfKigpIEFQSXMsIGJhc2VkIG9uIHRoZQorICogcmF3X2xvY2FsX2lycV8qKCkgbWFjcm9zIGZyb20gdGhlIGxvd2xldmVsIGhlYWRlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICisjZGVmaW5lIF9BU01fSVJRRkxBR1NfSAorCisvKgorICogR2V0IGRlZmluaXRpb25zIGZvciByYXdfbG9jYWxfc2F2ZV9mbGFncyh4KSwgZXRjLgorICovCisjaW5jbHVkZSA8YXNtLXBvd2VycGMvaHdfaXJxLmg+CisKKy8qCisgKiBEbyB0aGUgQ1BVJ3MgSVJRLXN0YXRlIHRyYWNpbmcgZnJvbSBhc3NlbWJseSBjb2RlLiBXZSBjYWxsIGEKKyAqIEMgZnVuY3Rpb24sIHNvIHNhdmUgYWxsIHRoZSBDLWNsb2JiZXJlZCByZWdpc3RlcnM6CisgKi8KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKworI2Vycm9yIE5vIHN1cHBvcnQgb24gUG93ZXJQQyB5ZXQgZm9yIENPTkZJR19UUkFDRV9JUlFGTEFHUworCisjZWxzZQorIyBkZWZpbmUgVFJBQ0VfSVJRU19PTgorIyBkZWZpbmUgVFJBQ0VfSVJRU19PRkYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pdF9scF9xdWV1ZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2l0X2xwX3F1ZXVlLmgKaW5kZXggYjdjNmZjMS4uMjg0YzVhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2l0X2xwX3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2l0X2xwX3F1ZXVlLmgKQEAgLTI5LDIwICsyOSwyMCBAQAogCiBzdHJ1Y3QgSHZMcEV2ZW50OwogCi0jZGVmaW5lIElUTWF4THBRdWV1ZXMJOAorI2RlZmluZSBJVF9MUF9NQVhfUVVFVUVTCTgKIAotI2RlZmluZSBOb3RVc2VkCQkwCS8vIFF1ZXVlIHdpbGwgbm90IGJlIHVzZWQgYnkgUExJQwotI2RlZmluZSBEZWRpY2F0ZWRJbwkxCS8vIFF1ZXVlIGRlZGljYXRlZCB0byBJTyBwcm9jZXNzb3Igc3BlY2lmaWVkCi0jZGVmaW5lIERlZGljYXRlZExwCTIJLy8gUXVldWUgZGVkaWNhdGVkIHRvIExQIHNwZWNpZmllZAotI2RlZmluZSBTaGFyZWQJCTMJLy8gUXVldWUgc2hhcmVkIGZvciBib3RoIElPIGFuZCBMUAorI2RlZmluZSBJVF9MUF9OT1RfVVNFRAkJMAkvKiBRdWV1ZSB3aWxsIG5vdCBiZSB1c2VkIGJ5IFBMSUMgKi8KKyNkZWZpbmUgSVRfTFBfREVESUNBVEVEX0lPCTEJLyogUXVldWUgZGVkaWNhdGVkIHRvIElPIHByb2Nlc3NvciBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgSVRfTFBfREVESUNBVEVEX0xQCTIJLyogUXVldWUgZGVkaWNhdGVkIHRvIExQIHNwZWNpZmllZCAqLworI2RlZmluZSBJVF9MUF9TSEFSRUQJCTMJLyogUXVldWUgc2hhcmVkIGZvciBib3RoIElPIGFuZCBMUCAqLwogCi0jZGVmaW5lIExwRXZlbnRTdGFja1NpemUJNDA5NgotI2RlZmluZSBMcEV2ZW50TWF4U2l6ZQkJMjU2Ci0jZGVmaW5lIExwRXZlbnRBbGlnbgkJNjQKKyNkZWZpbmUgSVRfTFBfRVZFTlRfU1RBQ0tfU0laRQk0MDk2CisjZGVmaW5lIElUX0xQX0VWRU5UX01BWF9TSVpFCTI1NgorI2RlZmluZSBJVF9MUF9FVkVOVF9BTElHTgk2NAogCiBzdHJ1Y3QgaHZscGV2ZW50X3F1ZXVlIHsKIC8qCi0gKiBUaGUgeFNsaWNDdXJFdmVudFB0ciBpcyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBldmVudCBzdGFjayBlbnRyeQorICogVGhlIGhxX2N1cnJlbnRfZXZlbnQgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgZXZlbnQgc3RhY2sgZW50cnkKICAqIHRoYXQgd2lsbCBiZWNvbWUgdmFsaWQuICBUaGUgT1MgbXVzdCBwZWVrIGF0IHRoaXMgZW50cnkgdG8gZGV0ZXJtaW5lCiAgKiBpZiBpdCBpcyB2YWxpZC4gIFBMSUMgd2lsbCBzZXQgdGhlIHZhbGlkIGluZGljYXRvciBhcyB0aGUgdmVyeSBsYXN0CiAgKiBzdG9yZSBpbnRvIHRoYXQgZW50cnkuCkBAIC01MiwyMyArNTIsMjMgQEAKICAqIGxvY2F0aW9uIGFnYWluLgogICoKICAqIElmIHRoZSBldmVudCBzdGFjayBmaWxscyBhbmQgdGhlcmUgYXJlIG92ZXJmbG93IGV2ZW50cywgdGhlbiBQTElDCi0gKiB3aWxsIHNldCB0aGUgeFBsaWNPdmVyZmxvd0ludFBlbmRpbmcgZmxhZyBpbiB3aGljaCBjYXNlIHRoZSBPUyB3aWxsCisgKiB3aWxsIHNldCB0aGUgaHFfb3ZlcmZsb3dfcGVuZGluZyBmbGFnIGluIHdoaWNoIGNhc2UgdGhlIE9TIHdpbGwKICAqIGhhdmUgdG8gZmV0Y2ggdGhlIGFkZGl0aW9uYWwgTFAgZXZlbnRzIG9uY2UgdGhleSBoYXZlIGRyYWluZWQgdGhlCiAgKiBldmVudCBzdGFjay4KICAqCiAgKiBUaGUgZmlyc3QgMTYtYnl0ZXMgYXJlIGtub3duIGJ5IGJvdGggdGhlIE9TIGFuZCBQTElDLiAgVGhlIHJlbWFpbmRlcgogICogb2YgdGhlIGNhY2hlIGxpbmUgaXMgZm9yIHVzZSBieSB0aGUgT1MuCiAgKi8KLQl1OAl4UGxpY092ZXJmbG93SW50UGVuZGluZzsvLyAweDAwIE92ZXJmbG93IGV2ZW50cyBhcmUgcGVuZGluZwotCXU4CXhQbGljU3RhdHVzOwkJLy8gMHgwMSBEZWRpY2F0ZWRJbyBvciBEZWRpY2F0ZWRMcCBvciBOb3RVc2VkCi0JdTE2CXhTbGljTG9naWNhbFByb2NJbmRleDsJLy8gMHgwMiBMb2dpY2FsIFByb2MgSW5kZXggZm9yIGNvcnJlbGF0aW9uCi0JdTgJeFBsaWNSc3ZkWzEyXTsJCS8vIDB4MDQKLQljaGFyCSp4U2xpY0N1ckV2ZW50UHRyOwkvLyAweDEwCi0JY2hhcgkqeFNsaWNMYXN0VmFsaWRFdmVudFB0cjsgLy8gMHgxOAotCWNoYXIJKnhTbGljRXZlbnRTdGFja1B0cjsJLy8gMHgyMAotCXU4CXhJbmRleDsJCQkvLyAweDI4IHVuaXF1ZSBzZXF1ZW50aWFsIGluZGV4LgotCXU4CXhTbGljUnN2ZFszXTsJCS8vIDB4MjktMmIKLQlzcGlubG9ja190CWxvY2s7CisJdTgJCWhxX292ZXJmbG93X3BlbmRpbmc7CS8qIDB4MDAgT3ZlcmZsb3cgZXZlbnRzIGFyZSBwZW5kaW5nICovCisJdTgJCWhxX3N0YXR1czsJCS8qIDB4MDEgRGVkaWNhdGVkSW8gb3IgRGVkaWNhdGVkTHAgb3IgTm90VXNlZCAqLworCXUxNgkJaHFfcHJvY19pbmRleDsJCS8qIDB4MDIgTG9naWNhbCBQcm9jIEluZGV4IGZvciBjb3JyZWxhdGlvbiAqLworCXU4CQlocV9yZXNlcnZlZDFbMTJdOwkvKiAweDA0ICovCisJY2hhcgkJKmhxX2N1cnJlbnRfZXZlbnQ7CS8qIDB4MTAgKi8KKwljaGFyCQkqaHFfbGFzdF9ldmVudDsJCS8qIDB4MTggKi8KKwljaGFyCQkqaHFfZXZlbnRfc3RhY2s7CS8qIDB4MjAgKi8KKwl1OAkJaHFfaW5kZXg7CQkvKiAweDI4IHVuaXF1ZSBzZXF1ZW50aWFsIGluZGV4LiAqLworCXU4CQlocV9yZXNlcnZlZDJbM107CS8qIDB4MjktMmIgKi8KKwlzcGlubG9ja190CWhxX2xvY2s7CiB9OwogCiBleHRlcm4gc3RydWN0IGh2bHBldmVudF9xdWV1ZSBodmxwZXZlbnRfcXVldWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2tkdW1wLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2tkdW1wLmgKaW5kZXggNWE1YzNiNS4uZGMxNTc0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rZHVtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMva2R1bXAuaApAQCAtMTUsNiArMTUsOCBAQAogI2RlZmluZSBLRFVNUF9UUkFNUE9MSU5FX1NUQVJUCTB4MDEwMAogI2RlZmluZSBLRFVNUF9UUkFNUE9MSU5FX0VORAkweDMwMDAKIAorI2RlZmluZSBLRFVNUF9NSU5fVENFX0VOVFJJRVMJMjA0OAorCiAjZWxzZSAvKiAhQ09ORklHX0NSQVNIX0RVTVAgKi8KIAogI2RlZmluZSBQSFlTSUNBTF9TVEFSVAkweDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMva2V4ZWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMva2V4ZWMuaAppbmRleCBlZmU4ODcyLi44ZjdmZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rZXhlYy5oCkBAIC0xMTIsOSArMTEyLDEzIEBACiAjaWZkZWYgX19wb3dlcnBjNjRfXwogZXh0ZXJuIHZvaWQga2V4ZWNfc21wX3dhaXQodm9pZCk7CS8qIGdldCBhbmQgY2xlYXIgbmFjYSBwaHlzaWQsIHdhaXQgZm9yCiAJCQkJCSAgbWFzdGVyIHRvIGNvcHkgbmV3IGNvZGUgdG8gMCAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGtleGVjX3NldHVwKHZvaWQpOwogZXh0ZXJuIGludCBjcmFzaGluZ19jcHU7CiBleHRlcm4gdm9pZCBjcmFzaF9zZW5kX2lwaSh2b2lkICgqY3Jhc2hfaXBpX2NhbGxiYWNrKShzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gY3B1bWFza190IGNwdXNfaW5fc3I7CitzdGF0aWMgaW5saW5lIGludCBrZXhlY19zcl9hY3RpdmF0ZWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gY3B1X2lzc2V0KGNwdSxjcHVzX2luX3NyKTsKK30KICNlbmRpZiAvKiBfX3Bvd2VycGM2NCBfXyAqLwogCiBzdHJ1Y3Qga2ltYWdlOwpAQCAtMTI0LDEwICsxMjgsMTMgQEAKIGV4dGVybiB2b2lkIGRlZmF1bHRfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIGV4dGVybiB2b2lkIG1hY2hpbmVfa2V4ZWNfc2ltcGxlKHN0cnVjdCBraW1hZ2UgKmltYWdlKTsKK2V4dGVybiB2b2lkIGNyYXNoX2tleGVjX3NlY29uZGFyeShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gaW50IG92ZXJsYXBzX2NyYXNoa2VybmVsKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpOwogCiAjZWxzZSAvKiAhQ09ORklHX0tFWEVDICovCitzdGF0aWMgaW5saW5lIGludCBrZXhlY19zcl9hY3RpdmF0ZWQoaW50IGNwdSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX2tleGVjX3NlY29uZGFyeShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG92ZXJsYXBzX2NyYXNoa2VybmVsKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKaW5kZXggNzNkYjFmNy4uYzE3YzEzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKQEAgLTgxLDYgKzgxLDggQEAKIAl2b2lkCQkoKnRjZV9mcmVlKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKIAkJCQkgICAgbG9uZyBpbmRleCwKIAkJCQkgICAgbG9uZyBucGFnZXMpOworCXVuc2lnbmVkIGxvbmcJKCp0Y2VfZ2V0KShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKKwkJCQkgICAgbG9uZyBpbmRleCk7CiAJdm9pZAkJKCp0Y2VfZmx1c2gpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKTsKIAl2b2lkCQkoKmlvbW11X2Rldl9zZXR1cCkoc3RydWN0IHBjaV9kZXYgKmRldik7CiAJdm9pZAkJKCppb21tdV9idXNfc2V0dXApKHN0cnVjdCBwY2lfYnVzICpidXMpOwpAQCAtOTUsNyArOTcsNyBAQAogCXZvaWQJCSgqc2hvd19wZXJjcHVpbmZvKShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBpKTsKIAogCXZvaWQJCSgqaW5pdF9JUlEpKHZvaWQpOwotCWludAkJKCpnZXRfaXJxKShzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfaXJxKShzdHJ1Y3QgcHRfcmVncyAqKTsKICNpZmRlZiBDT05GSUdfS0VYRUMKIAl2b2lkCQkoKmtleGVjX2NwdV9kb3duKShpbnQgY3Jhc2hfc2h1dGRvd24sIGludCBzZWNvbmRhcnkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUuaAppbmRleCAzYTVlYmUyLi5jM2ZjN2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LmgKQEAgLTIzOCw3ICsyMzgsNiBAQAogCQkJICB1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHZzaWQsIGludCBsb2NhbCwKIAkJCSAgdW5zaWduZWQgbG9uZyB0cmFwKTsKIAotZXh0ZXJuIHZvaWQgaHRhYl9maW5pc2hfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgaHRhYl9ib2x0X21hcHBpbmcodW5zaWduZWQgbG9uZyB2c3RhcnQsIHVuc2lnbmVkIGxvbmcgdmVuZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBwc3RhcnQsIHVuc2lnbmVkIGxvbmcgbW9kZSwKIAkJCSAgICAgaW50IHBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaAppbmRleCA4YzZiMWE2ZC4uMDgzYWM5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaApAQCAtMjUsOCArMjUsMTMgQEAKIHsKIH0KIAorLyoKKyAqIFRoZSBwcm90by1WU0lEIHNwYWNlIGhhcyAyXjM1IC0gMSBzZWdtZW50cyBhdmFpbGFibGUgZm9yIHVzZXIgbWFwcGluZ3MuCisgKiBFYWNoIHNlZ21lbnQgY29udGFpbnMgMl4yOCBieXRlcy4gIEVhY2ggY29udGV4dCBtYXBzIDJeNDQgYnl0ZXMsCisgKiBzbyB3ZSBjYW4gc3VwcG9ydCAyXjE5LTEgY29udGV4dHMgKDE5ID09IDM1ICsgMjggLSA0NCkuCisgKi8KICNkZWZpbmUgTk9fQ09OVEVYVAkwCi0jZGVmaW5lIE1BWF9DT05URVhUCSgweDEwMDAwMC0xKQorI2RlZmluZSBNQVhfQ09OVEVYVAkoKDFVTCA8PCAxOSkgLSAxKQogCiBleHRlcm4gaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzg2eHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODZ4eC5oCmluZGV4IGQwYTY3MTguLmYyNjAzODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODZ4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODZ4eC5oCkBAIC0xNSwxNSArMTUsMTAgQEAKICNpZm5kZWYgX19BU01fUE9XRVJQQ19NUEM4Nnh4X0hfXwogI2RlZmluZSBfX0FTTV9QT1dFUlBDX01QQzg2eHhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKICNpZmRlZiBDT05GSUdfUFBDXzg2eHgKIAotI2lmZGVmIENPTkZJR19NUEM4NjQxX0hQQ04KLSNpbmNsdWRlIDxwbGF0Zm9ybXMvODZ4eC9tcGM4NjQxX2hwY24uaD4KLSNlbmRpZgotCiAjZGVmaW5lIF9JT19CQVNFICAgICAgICBpc2FfaW9fYmFzZQogI2RlZmluZSBfSVNBX01FTV9CQVNFICAgaXNhX21lbV9iYXNlCiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tcGljLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21waWMuaAppbmRleCBmMGQyMmFjLi5lYjI0MWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21waWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21waWMuaApAQCAtMTE0LDkgKzExNCw2IEBACiAjZGVmaW5lIE1QSUNfVkVDX1RJTUVSXzEJMjQ4CiAjZGVmaW5lIE1QSUNfVkVDX1RJTUVSXzAJMjQ3CiAKLS8qIFR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgY2FzY2FkZSBoYW5kbGVyICovCi10eXBlZGVmIGludCAoKm1waWNfY2FzY2FkZV90KShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqZGF0YSk7Ci0KICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKIC8qIEZpeHVwIHRhYmxlIGVudHJ5ICovCiBzdHJ1Y3QgbXBpY19pcnFfZml4dXAKQEAgLTEzMiwxMCArMTI5LDE5IEBACiAvKiBUaGUgaW5zdGFuY2UgZGF0YSBvZiBhIGdpdmVuIE1QSUMgKi8KIHN0cnVjdCBtcGljCiB7CisJLyogVGhlIGRldmljZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKKworCS8qIFRoZSByZW1hcHBlciBmb3IgdGhpcyBNUElDICovCisJc3RydWN0IGlycV9ob3N0CQkqaXJxaG9zdDsKKwogCS8qIFRoZSAibGludXgiIGNvbnRyb2xsZXIgc3RydWN0ICovCi0JaHdfaXJxX2NvbnRyb2xsZXIJaGNfaXJxOworCXN0cnVjdCBpcnFfY2hpcAkJaGNfaXJxOworI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9VMworCXN0cnVjdCBpcnFfY2hpcAkJaGNfaHRfaXJxOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUAotCWh3X2lycV9jb250cm9sbGVyCWhjX2lwaTsKKwlzdHJ1Y3QgaXJxX2NoaXAJCWhjX2lwaTsKICNlbmRpZgogCWNvbnN0IGNoYXIJCSpuYW1lOwogCS8qIEZsYWdzICovCkBAIC0xNDQsMjAgKzE1MCwxMiBAQAogCXVuc2lnbmVkIGludAkJaXN1X3NpemU7CiAJdW5zaWduZWQgaW50CQlpc3Vfc2hpZnQ7CiAJdW5zaWduZWQgaW50CQlpc3VfbWFzazsKLQkvKiBPZmZzZXQgb2YgaXJxIHZlY3RvciBudW1iZXJzICovCi0JdW5zaWduZWQgaW50CQlpcnFfb2Zmc2V0OwkKIAl1bnNpZ25lZCBpbnQJCWlycV9jb3VudDsKLQkvKiBPZmZzZXQgb2YgaXBpIHZlY3RvciBudW1iZXJzICovCi0JdW5zaWduZWQgaW50CQlpcGlfb2Zmc2V0OwogCS8qIE51bWJlciBvZiBzb3VyY2VzICovCiAJdW5zaWduZWQgaW50CQludW1fc291cmNlczsKIAkvKiBOdW1iZXIgb2YgQ1BVcyAqLwogCXVuc2lnbmVkIGludAkJbnVtX2NwdXM7Ci0JLyogY2FzY2FkZSBoYW5kbGVyICovCi0JbXBpY19jYXNjYWRlX3QJCWNhc2NhZGU7Ci0Jdm9pZAkJCSpjYXNjYWRlX2RhdGE7Ci0JdW5zaWduZWQgaW50CQljYXNjYWRlX3ZlYzsKLQkvKiBzZW5zZXMgYXJyYXkgKi8KKwkvKiBkZWZhdWx0IHNlbnNlcyBhcnJheSAqLwogCXVuc2lnbmVkIGNoYXIJCSpzZW5zZXM7CiAJdW5zaWduZWQgaW50CQlzZW5zZXNfY291bnQ7CiAKQEAgLTIxMywxNCArMjExLDExIEBACiAgKiBUaGUgdmFsdWVzIGluIHRoZSBhcnJheSBzdGFydCBhdCB0aGUgZmlyc3Qgc291cmNlIG9mIHRoZSBNUElDLAogICogdGhhdCBpcyBzZW5zZXNbMF0gY29ycmVzcG9uZCB0byBsaW51eCBpcnEgImlycV9vZmZzZXQiLgogICovCi1leHRlcm4gc3RydWN0IG1waWMgKm1waWNfYWxsb2ModW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCitleHRlcm4gc3RydWN0IG1waWMgKm1waWNfYWxsb2Moc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgaXN1X3NpemUsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGlycV9vZmZzZXQsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGlycV9jb3VudCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaXBpX29mZnNldCwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzZW5zZXMsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHNlbnNlc19udW0sCiAJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qIEFzc2lnbiBJU1VzLCB0byBjYWxsIGJlZm9yZSBtcGljX2luaXQoKQpAQCAtMjMyLDIyICsyMjcsMjcgQEAKIGV4dGVybiB2b2lkIG1waWNfYXNzaWduX2lzdShzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IGlzdV9udW0sCiAJCQkgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIpOwogCisvKiBTZXQgZGVmYXVsdCBzZW5zZSBjb2RlcworICoKKyAqIEBtcGljOgljb250cm9sbGVyCisgKiBAc2Vuc2VzOglhcnJheSBvZiBzZW5zZSBjb2RlcworICogQGNvdW50OglzaXplIG9mIGFib3ZlIGFycmF5CisgKgorICogT3B0aW9uYWxseSBwcm92aWRlIGFuIGFycmF5IChpbmRleGVkIG9uIGhhcmR3YXJlIGludGVycnVwdCBudW1iZXJzCisgKiBmb3IgdGhpcyBNUElDKSBvZiBkZWZhdWx0IHNlbnNlIGNvZGVzIGZvciB0aGUgY2hpcC4gVGhvc2UgYXJlIGxpbnV4CisgKiBzZW5zZSBjb2RlcyBJUlFfVFlQRV8qCisgKgorICogVGhlIGRyaXZlciBnZXRzIG93bmVyc2hpcCBvZiB0aGUgcG9pbnRlciwgZG9uJ3QgZGlzcG9zZSBvZiBpdCBvcgorICogYW55dGhpbmcgbGlrZSB0aGF0LiBfX2luaXQgb25seS4KKyAqLworZXh0ZXJuIHZvaWQgbXBpY19zZXRfZGVmYXVsdF9zZW5zZXMoc3RydWN0IG1waWMgKm1waWMsIHU4ICpzZW5zZXMsIGludCBjb3VudCk7CisKKwogLyogSW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlci4gQWZ0ZXIgdGhpcyBoYXMgYmVlbiBjYWxsZWQsIG5vbmUgb2YgdGhlIGFib3ZlCiAgKiBzaG91bGQgYmUgY2FsbGVkIGFnYWluIGZvciB0aGlzIG1waWMKICAqLwogZXh0ZXJuIHZvaWQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKTsKIAotLyogU2V0dXAgYSBjYXNjYWRlLiBDdXJyZW50bHksIG9ubHkgb25lIGNhc2NhZGUgaXMgc3VwcG9ydGVkIHRoaXMKLSAqIHdheSwgdGhvdWdoIHlvdSBjYW4gYWx3YXlzIGRvIGEgbm9ybWFsIHJlcXVlc3RfaXJxKCkgYW5kIGFkZAotICogb3RoZXIgY2FzY2FkZXMgdGhpcyB3YXkuIFlvdSBzaG91bGQgY2FsbCB0aGlzIF9hZnRlcl8gaGF2aW5nCi0gKiBhZGRlZCBhbGwgdGhlIElTVXMKLSAqCi0gKiBAaXJxX25vOgkibGludXgiIGlycSBudW1iZXIgb2YgdGhlIGNhc2NhZGUgKHRoYXQgaXMgb2Zmc2V0J2VkIHZlY3RvcikKLSAqIEBoYW5kbGVyOgljYXNjYWRlIGhhbmRsZXIgZnVuY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgbXBpY19zZXR1cF9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnFfbm8sIG1waWNfY2FzY2FkZV90IGhhbmxkZXIsCi0JCQkgICAgICAgdm9pZCAqZGF0YSk7Ci0KIC8qCiAgKiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCBvbmx5IGJlIHVzZWQgYWZ0ZXIgdGhlCiAgKiBJU1VzIGhhdmUgYmVlbiBhc3NpZ25lZCBhbmQgdGhlIGNvbnRyb2xsZXIgZnVsbHkgaW5pdGlhbGl6ZWQKQEAgLTI4NCw5ICsyODQsOSBAQAogdm9pZCBzbXBfbXBpY19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CiAKIC8qIEZldGNoIGludGVycnVwdCBmcm9tIGEgZ2l2ZW4gbXBpYyAqLwotZXh0ZXJuIGludCBtcGljX2dldF9vbmVfaXJxKHN0cnVjdCBtcGljICptcGljLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdW5zaWduZWQgaW50IG1waWNfZ2V0X29uZV9pcnEoc3RydWN0IG1waWMgKm1waWMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIC8qIFRoaXMgb25lIGdldHMgdG8gdGhlIHByaW1hcnkgbXBpYyAqLwotZXh0ZXJuIGludCBtcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHVuc2lnbmVkIGludCBtcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiAvKiBTZXQgdGhlIEVQSUMgY2xvY2sgcmF0aW8gKi8KIHZvaWQgbXBpY19zZXRfY2xrX3JhdGlvKHN0cnVjdCBtcGljICptcGljLCB1MzIgY2xvY2tfcmF0aW8pOwpAQCAtMjk0LDggKzI5NCw1IEBACiAvKiBFbmFibGUvRGlzYWJsZSBFUElDIHNlcmlhbCBpbnRlcnJ1cHQgbW9kZSAqLwogdm9pZCBtcGljX3NldF9zZXJpYWxfaW50KHN0cnVjdCBtcGljICptcGljLCBpbnQgZW5hYmxlKTsKIAotLyogZ2xvYmFsIG1waWMgZm9yIHBTZXJpZXMgKi8KLWV4dGVybiBzdHJ1Y3QgbXBpYyAqcFNlcmllc19tcGljOwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19NUElDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvb2ZfZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL29mX2RldmljZS5oCmluZGV4IDYyNDlhN2MuLmM1YzBiMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvb2ZfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9vZl9kZXZpY2UuaApAQCAtOSw3ICs5LDcgQEAKIC8qCiAgKiBUaGUgb2ZfcGxhdGZvcm1fYnVzX3R5cGUgaXMgYSBidXMgdHlwZSB1c2VkIGJ5IGRyaXZlcnMgdGhhdCBkbyBub3QKICAqIGF0dGFjaCB0byBhIG1hY2lvIG9yIHNpbWlsYXIgYnVzIGJ1dCBzdGlsbCB1c2UgT0YgcHJvYmluZwotICogbWVjYW5pc20KKyAqIG1lY2hhbmlzbQogICovCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG9mX3BsYXRmb3JtX2J1c190eXBlOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wY2kuaAppbmRleCA1ZDJjOWU2Li40NmFmZDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGNpLmgKQEAgLTI0Miw3ICsyNDIsNyBAQAogI2RlZmluZSBIQVZFX0FSQ0hfUENJX1JFU09VUkNFX1RPX1VTRVIKIGV4dGVybiB2b2lkIHBjaV9yZXNvdXJjZV90b191c2VyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsCiAJCQkJIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcnNyYywKLQkJCQkgdTY0ICpzdGFydCwgdTY0ICplbmQpOworCQkJCSByZXNvdXJjZV9zaXplX3QgKnN0YXJ0LCByZXNvdXJjZV9zaXplX3QgKmVuZCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIHx8IENPTkZJR19QUEMzMiAqLwogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGVyY3B1LmgKaW5kZXggZmFhMWZjNy4uMmYyZTMwMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZXJjcHUuaApAQCAtMTQsNiArMTQsNyBAQAogCiAjZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAocGFjYVtjcHVdLmRhdGFfb2Zmc2V0KQogI2RlZmluZSBfX215X2NwdV9vZmZzZXQoKSBnZXRfcGFjYSgpLT5kYXRhX29mZnNldAorI2RlZmluZSBwZXJfY3B1X29mZnNldCh4KSAoX19wZXJfY3B1X29mZnNldCh4KSkKIAogLyogU2VwYXJhdGUgb3V0IHRoZSB0eXBlLCBzbyAoaW50WzNdLCBmb28pIHdvcmtzLiAqLwogI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtYWNfcGZ1bmMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1hY19wZnVuYy5oCmluZGV4IGNlZjYxMzAuLjEzMzBkNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1hY19wZnVuYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1hY19wZnVuYy5oCkBAIC0yMDUsNyArMjA1LDcgQEAKICAqCiAgKiBUaGUgYXJncyBhcnJheSBjb250YWlucyBhcyBtYW55IGFyZ3VtZW50cyBhcyBpcyByZXF1aXJlZCBieSB0aGUgZnVuY3Rpb24sCiAgKiB0aGlzIGlzIGRlcGVuZGVudCBvbiB0aGUgZnVuY3Rpb24geW91IGFyZSBjYWxsaW5nLCB1bmZvcnR1bmF0ZWx5IEFwcGxlCi0gKiBtZWNhbmlzbSBwcm92aWRlcyBubyB3YXkgdG8gZW5jb2RlIHRoYXQgc28geW91IGhhdmUgdG8gZ2V0IGl0IHJpZ2h0IGF0CisgKiBtZWNoYW5pc20gcHJvdmlkZXMgbm8gd2F5IHRvIGVuY29kZSB0aGF0IHNvIHlvdSBoYXZlIHRvIGdldCBpdCByaWdodCBhdAogICogdGhlIGNhbGwgc2l0ZS4gU29tZSBmdW5jdGlvbnMgcmVxdWlyZSBubyBhcmdzLCBpbiB3aGljaCBjYXNlLCB5b3UgY2FuCiAgKiBwYXNzIE5VTEwuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaAppbmRleCAwMTBkMTg2Li5iMDk1YTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaApAQCAtNjQsMTEgKzY0LDYgQEAKIHR5cGVkZWYgdTMyIHBoYW5kbGU7CiB0eXBlZGVmIHUzMiBpaGFuZGxlOwogCi1zdHJ1Y3QgaW50ZXJydXB0X2luZm8gewotCWludAlsaW5lOwotCWludAlzZW5zZTsJCS8qICt2ZS8tdmUgbG9naWMsIGVkZ2Ugb3IgbGV2ZWwsIGV0Yy4gKi8KLX07Ci0KIHN0cnVjdCBwcm9wZXJ0eSB7CiAJY2hhcgkqbmFtZTsKIAlpbnQJbGVuZ3RoOwpAQCAtODEsOCArNzYsNiBAQAogCWNoYXIJKnR5cGU7CiAJcGhhbmRsZQlub2RlOwogCXBoYW5kbGUgbGludXhfcGhhbmRsZTsKLQlpbnQJbl9pbnRyczsKLQlzdHJ1Y3QJaW50ZXJydXB0X2luZm8gKmludHJzOwogCWNoYXIJKmZ1bGxfbmFtZTsKIAogCXN0cnVjdAlwcm9wZXJ0eSAqcHJvcGVydGllczsKQEAgLTE2Nyw4ICsxNjAsOCBAQAogZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kZXZ0cmVlKHZvaWQgKik7CiBleHRlcm4gaW50IGRldmljZV9pc19jb21wYXRpYmxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyICpnZXRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgIGludCAqbGVucCk7CitleHRlcm4gdm9pZCAqZ2V0X3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJaW50ICpsZW5wKTsKIGV4dGVybiB2b2lkIHByaW50X3Byb3BlcnRpZXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIGV4dGVybiBpbnQgcHJvbV9uX2FkZHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlKiBucCk7CiBleHRlcm4gaW50IHByb21fbl9zaXplX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApOwpAQCAtMjA0LDYgKzE5NywxNSBAQAogICovCiAKIAorLyogSGVscGVyIHRvIHJlYWQgYSBiaWcgbnVtYmVyICovCitzdGF0aWMgaW5saW5lIHU2NCBvZl9yZWFkX251bWJlcih1MzIgKmNlbGwsIGludCBzaXplKQoreworCXU2NCByID0gMDsKKwl3aGlsZSAoc2l6ZS0tKQorCQlyID0gKHIgPDwgMzIpIHwgKihjZWxsKyspOworCXJldHVybiByOworfQorCiAvKiBUcmFuc2xhdGUgYW4gT0YgYWRkcmVzcyBibG9jayBpbnRvIGEgQ1BVIHBoeXNpY2FsIGFkZHJlc3MKICAqLwogI2RlZmluZSBPRl9CQURfQUREUgkoKHU2NCktMSkKQEAgLTI0MCw1ICsyNDIsODMgQEAKIC8qIENQVSBPRiBub2RlIG1hdGNoaW5nICovCiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dldF9jcHVfbm9kZShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgKnRocmVhZCk7CiAKKworLyoKKyAqIE9GIGludGVycnVwdCBtYXBwaW5nCisgKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgd2hlbiBhbiBpbnRlcnJ1cHQgaXMgbWFwcGVkLiBUaGUgY29udHJvbGxlcgorICogZmllbGQgbmVlZHMgdG8gYmUgcHV0KCkgYWZ0ZXIgdXNlCisgKi8KKworI2RlZmluZSBPRl9NQVhfSVJRX1NQRUMJCSA0IC8qIFdlIGhhbmRsZSBzcGVjaWZpZXJzIG9mIGF0IG1vc3QgNCBjZWxscyAqLworCitzdHJ1Y3Qgb2ZfaXJxIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnRyb2xsZXI7CS8qIEludGVycnVwdCBjb250cm9sbGVyIG5vZGUgKi8KKwl1MzIgc2l6ZTsJCQkvKiBTcGVjaWZpZXIgc2l6ZSAqLworCXUzMiBzcGVjaWZpZXJbT0ZfTUFYX0lSUV9TUEVDXTsJLyogU3BlY2lmaWVyIGNvcHkgKi8KK307CisKKy8qKioKKyAqIG9mX2lycV9tYXBfaW5pdCAtIEluaXRpYWxpemUgdGhlIGlycSByZW1hcHBlcgorICogQGZsYWdzOglmbGFncyBkZWZpbmluZyB3b3JrYXJvdW5kcyB0byBlbmFibGUKKyAqCisgKiBTb21lIG1hY2hpbmVzIGhhdmUgYnVncyBpbiB0aGUgZGV2aWNlLXRyZWUgd2hpY2ggcmVxdWlyZSBjZXJ0YWluIHdvcmthcm91bmRzCisgKiB0byBiZSBhcHBsaWVkLiBDYWxsIHRoaXMgYmVmb3JlIGFueSBpbnRlcnJ1cHQgbWFwcGluZyBhdHRlbXB0cyB0byBlbmFibGUKKyAqIHRob3NlIHdvcmthcm91bmRzLgorICovCisjZGVmaW5lIE9GX0lNQVBfT0xEV09STERfTUFDCTB4MDAwMDAwMDEKKyNkZWZpbmUgT0ZfSU1BUF9OT19QSEFORExFCTB4MDAwMDAwMDIKKworZXh0ZXJuIHZvaWQgb2ZfaXJxX21hcF9pbml0KHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qKioKKyAqIG9mX2lycV9tYXBfcmF3IC0gTG93IGxldmVsIGludGVycnVwdCB0cmVlIHBhcnNpbmcKKyAqIEBwYXJlbnQ6CXRoZSBkZXZpY2UgaW50ZXJydXB0IHBhcmVudAorICogQGludHNwZWM6CWludGVycnVwdCBzcGVjaWZpZXIgKCJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQorICogQGFkZHI6CWFkZHJlc3Mgc3BlY2lmaWVyIChzdGFydCBvZiAicmVnIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQorICogQG91dF9pcnE6CXN0cnVjdHVyZSBvZl9pcnEgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgb24gZXJyb3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgbG93LWxldmVsIGludGVycnVwdCB0cmVlIHdhbGtpbmcgZnVuY3Rpb24uIEl0CisgKiBjYW4gYmUgdXNlZCB0byBkbyBhIHBhcnRpYWwgd2FsayB3aXRoIHN5bnRoZXRpemVkIHJlZyBhbmQgaW50ZXJydXB0cworICogcHJvcGVydGllcywgZm9yIGV4YW1wbGUgd2hlbiByZXNvbHZpbmcgUENJIGludGVycnVwdHMgd2hlbiBubyBkZXZpY2UKKyAqIG5vZGUgZXhpc3QgZm9yIHRoZSBwYXJlbnQuCisgKgorICovCisKK2V4dGVybiBpbnQgb2ZfaXJxX21hcF9yYXcoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIHUzMiAqaW50c3BlYywgdTMyICphZGRyLAorCQkJICBzdHJ1Y3Qgb2ZfaXJxICpvdXRfaXJxKTsKKworCisvKioqCisgKiBvZl9pcnFfbWFwX29uZSAtIFJlc29sdmUgYW4gaW50ZXJydXB0IGZvciBhIGRldmljZQorICogQGRldmljZToJdGhlIGRldmljZSB3aG9zZSBpbnRlcnJ1cHQgaXMgdG8gYmUgcmVzb2x2ZWQKKyAqIEBpbmRleDogICAgIAlpbmRleCBvZiB0aGUgaW50ZXJydXB0IHRvIHJlc29sdmUKKyAqIEBvdXRfaXJxOglzdHJ1Y3R1cmUgb2ZfaXJxIGZpbGxlZCBieSB0aGlzIGZ1bmN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiByZXNvbHZlcyBhbiBpbnRlcnJ1cHQsIHdhbGtpbmcgdGhlIHRyZWUsIGZvciBhIGdpdmVuCisgKiBkZXZpY2UtdHJlZSBub2RlLiBJdCdzIHRoZSBoaWdoIGxldmVsIHBlbmRhbnQgdG8gb2ZfaXJxX21hcF9yYXcoKS4KKyAqIEl0IGFsc28gaW1wbGVtZW50cyB0aGUgd29ya2Fyb3VuZHMgZm9yIE9sZFdvbHJkIE1hY3MuCisgKi8KK2V4dGVybiBpbnQgb2ZfaXJxX21hcF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwKKwkJCSAgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7CisKKy8qKioKKyAqIG9mX2lycV9tYXBfcGNpIC0gUmVzb2x2ZSB0aGUgaW50ZXJydXB0IGZvciBhIFBDSSBkZXZpY2UKKyAqIEBwZGV2Ogl0aGUgZGV2aWNlIHdob3NlIGludGVycnVwdCBpcyB0byBiZSByZXNvbHZlZAorICogQG91dF9pcnE6CXN0cnVjdHVyZSBvZl9pcnEgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc29sdmVzIHRoZSBQQ0kgaW50ZXJydXB0IGZvciBhIGdpdmVuIFBDSSBkZXZpY2UuIElmIGEKKyAqIGRldmljZS1ub2RlIGV4aXN0cyBmb3IgYSBnaXZlbiBwY2lfZGV2LCBpdCB3aWxsIHVzZSBub3JtYWwgT0YgdHJlZQorICogd2Fsa2luZy4gSWYgbm90LCBpdCB3aWxsIGltcGxlbWVudCBzdGFuZGFyZCBzd2l6emxpbmcgYW5kIHdhbGsgdXAgdGhlCisgKiBQQ0kgdHJlZSB1bnRpbCBhbiBkZXZpY2Utbm9kZSBpcyBmb3VuZCwgYXQgd2hpY2ggcG9pbnQgaXQgd2lsbCBmaW5pc2gKKyAqIHJlc29sdmluZyB1c2luZyB0aGUgT0YgdHJlZSB3YWxraW5nLgorICovCitzdHJ1Y3QgcGNpX2RldjsKK2V4dGVybiBpbnQgb2ZfaXJxX21hcF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpOworCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX1BPV0VSUENfUFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3J0YXMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcnRhcy5oCmluZGV4IDAyZTIxM2UuLmEzM2M2YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcnRhcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcnRhcy5oCkBAIC0xODEsNiArMTgxLDkgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcnRhc19idXN5X2RlbGF5X3RpbWUoaW50IHN0YXR1cyk7CiBleHRlcm4gdW5zaWduZWQgaW50IHJ0YXNfYnVzeV9kZWxheShpbnQgc3RhdHVzKTsKIAorZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fcnRhcyh1bnNpZ25lZCBsb25nIG5vZGUsCisJCWNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpOworCiBleHRlcm4gdm9pZCBwU2VyaWVzX2xvZ19lcnJvcihjaGFyICpidWYsIHVuc2lnbmVkIGludCBlcnJfdHlwZSwgaW50IGZhdGFsKTsKIAogLyogRXJyb3IgdHlwZXMgbG9nZ2VkLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcndzZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcndzZW0uaAppbmRleCAyYzJmZTk2Li5lOTI5MTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3J3c2VtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yd3NlbS5oCkBAIC0yOCwyNCArMjgsMTEgQEAKICNkZWZpbmUgUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMJCShSV1NFTV9XQUlUSU5HX0JJQVMgKyBSV1NFTV9BQ1RJVkVfQklBUykKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7Ci0jaWYgUldTRU1fREVCVUcKLQlpbnQJCQlkZWJ1ZzsKLSNlbmRpZgogfTsKIAotLyoKLSAqIGluaXRpYWxpc2F0aW9uCi0gKi8KLSNpZiBSV1NFTV9ERUJVRwotI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQgICAgICAsIDAKLSNlbHNlCi0jZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVAkvKiAqLwotI2VuZGlmCi0KICNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCiAJeyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBcCi0JICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCi0JICBfX1JXU0VNX0RFQlVHX0lOSVQgfQorCSAgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgfQogCiAjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkJCVwKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCkBAIC02MCw5ICs0Nyw2IEBACiAJc2VtLT5jb3VudCA9IFJXU0VNX1VOTE9DS0VEX1ZBTFVFOwogCXNwaW5fbG9ja19pbml0KCZzZW0tPndhaXRfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnNlbS0+d2FpdF9saXN0KTsKLSNpZiBSV1NFTV9ERUJVRwotCXNlbS0+ZGVidWcgPSAwOwotI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zaWduYWwuaAppbmRleCBhNGQ4Zjg2Li5hOGM3YmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKQEAgLTYzLDcgKzYzLDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLCBidXQgd2lsbCBhbGxvdyBzaWdhbHRzdGFjaygyKS4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtODMsNyArODIsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwdSAvKiBkdW1teSAtLSBpZ25vcmVkICovCiAKICNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMFUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc29ja2V0LmgKaW5kZXggZTRiODE3Ny4uYzhiMWRhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NvY2tldC5oCkBAIC01NSw1ICs1NSw2IEBACiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAKICNkZWZpbmUgU09fUEVFUlNFQwkJMzEKKyNkZWZpbmUgU09fUEFTU1NFQwkJMzQKIAogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKaW5kZXggOTYwOWQzZS4uYzAyZDEwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCkBAIC0xMTcsNiArMTE3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVkX2xpc3Q7CiAJaW50IG51bWJlcjsKIAlpbnQgbmlkOworCXVuc2lnbmVkIGludCBpcnFzWzNdOwogCXUzMiBpc3JjOwogCXUzMiBub2RlOwogCXU2NCBmbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKaW5kZXggNDQ2MzE0OC4uZGNkZTQ0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmgKQEAgLTE4LDggKzE4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKICNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2NhbGwuaD4KICNlbmRpZgogCkBAIC0xNzcsNyArMTc4LDggQEAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIAlpbnQgY3VyX2RlYzsKIAotCWlmIChnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKSB7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykgJiYKKwkJCWdldF9scHBhY2EoKS0+c2hhcmVkX3Byb2MpIHsKIAkJZ2V0X2xwcGFjYSgpLT52aXJ0dWFsX2RlY3IgPSB2YWw7CiAJCWN1cl9kZWMgPSBnZXRfZGVjKCk7CiAJCWlmIChjdXJfZGVjID4gdmFsKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90b2RjLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGE4YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b2RjLmgKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgdGhlIE00OFR4eCBhbmQgbWMxNDY4MTggc2VyaWVzIG9mIFRpbWUgb2YgZGF5L1JlYWwgVGltZQorICogQ2xvY2sgY2hpcHMuCisgKgorICogQXV0aG9yOiBNYXJrIEEuIEdyZWVyIDxtZ3JlZXJAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDAxIChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKy8qCisgKiBTdXBwb3J0IGZvciB0aGUgTTQ4VDM3L000OFQ1OS8uLi4vbWMxNDY4MTggUmVhbCBUaW1lIENsb2NrIGNoaXBzLgorICogUHVycG9zZSBpcyB0byBtYWtlIG9uZSBnZW5lcmljIGZpbGUgdGhhdCBoYW5kbGVzIGFsbCBvZiB0aGVzZSBjaGlwcyBpbnN0ZWFkCisgKiBvZiBldmVyeSBwbGF0Zm9ybSBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgY29kZSBvdmVyICYgb3ZlciBhZ2Fpbi4KKyAqLworCisjaWZuZGVmIF9fUFBDX0tFUk5FTF9UT0RDX0gKKyNkZWZpbmUgX19QUENfS0VSTkVMX1RPRENfSAorCit0eXBlZGVmIHN0cnVjdCB7CisJdWludCBydGNfdHlwZTsJCS8qIHlvdXIgcGFydGljdWxhciBjaGlwICovCisKKwkvKgorCSAqIEZvbGxvd2luZyBhcmUgdGhlIGFkZHJlc3NlcyBvZiB0aGUgQVMwLCBBUzEsIGFuZCBEQVRBIHJlZ2lzdGVycworCSAqIG9mIHRoZXNlIGNoaXBzLiAgTm90ZSB0aGF0IHRoZXNlIGFyZSBib2FyZC1zcGVjaWZpYy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbnZyYW1fYXMwOworCXVuc2lnbmVkIGludCBudnJhbV9hczE7CisJdW5zaWduZWQgaW50IG52cmFtX2RhdGE7CisKKwkvKgorCSAqIERlZmluZSBiaXRzIHRvIHN0b3AgZXh0ZXJuYWwgc2V0IG9mIHJlZ3MgZnJvbSBjaGFuZ2luZyBzbworCSAqIHRoZSBjaGlwIGNhbiBiZSByZWFkL3dyaXR0ZW4gcmVsaWFibHkuCisJICovCisJdW5zaWduZWQgY2hhciBlbmFibGVfcmVhZDsKKwl1bnNpZ25lZCBjaGFyIGVuYWJsZV93cml0ZTsKKworCS8qCisJICogRm9sbG93aW5nIGlzIHRoZSBudW1iZXIgb2YgQVMwIGFkZHJlc3MgYml0cy4gIFRoaXMgaXMgbm9ybWFsbHkKKwkgKiA4IGJ1dCBzb21lIGJhZCBoYXJkd2FyZSByb3V0ZXMgYWRkcmVzcyBsaW5lcyBpbmNvcnJlY3RseS4KKwkgKi8KKwlpbnQgYXMwX2JpdHM7CisKKwlpbnQgbnZyYW1fc2l6ZTsJLyogU2l6ZSBvZiBOVlJBTSBvbiBjaGlwICovCisJaW50IHN3X2ZsYWdzOwkvKiBTb2Z0d2FyZSBjb250cm9sIGZsYWdzICovCisKKwkvKiBGb2xsb3dpbmcgYXJlIHRoZSByZWdpc3RlciBvZmZzZXRzIGZvciB0aGUgcGFydGljdWxhciBjaGlwICovCisJaW50IHllYXI7CisJaW50IG1vbnRoOworCWludCBkYXlfb2ZfbW9udGg7CisJaW50IGRheV9vZl93ZWVrOworCWludCBob3VyczsKKwlpbnQgbWludXRlczsKKwlpbnQgc2Vjb25kczsKKwlpbnQgY29udHJvbF9iOworCWludCBjb250cm9sX2E7CisJaW50IHdhdGNoZG9nOworCWludCBpbnRlcnJ1cHRzOworCWludCBhbGFybV9kYXRlOworCWludCBhbGFybV9ob3VyOworCWludCBhbGFybV9taW51dGVzOworCWludCBhbGFybV9zZWNvbmRzOworCWludCBjZW50dXJ5OworCWludCBmbGFnczsKKworCS8qCisJICogU29tZSBSVEMgY2hpcHMgaGF2ZSB0aGVpciBOVlJBTSBidXJpZWQgYmVoaW5kIGEgYWRkci9kYXRhIHBhaXIgb2YKKwkgKiByZWdzIG9uIHRoZSBmaXJzdCBsZXZlbC9jbG9jayByZWdpc3RlcnMuICBUaGUgZm9sbG93aW5nIGZpZWxkcworCSAqIGFyZSB0aGUgYWRkcmVzc2VzIGZvciB0aG9zZSBhZGRyL2RhdGEgcmVncy4KKwkgKi8KKwlpbnQgbnZyYW1fYWRkcl9yZWc7CisJaW50IG52cmFtX2RhdGFfcmVnOworfSB0b2RjX2luZm9fdDsKKworLyoKKyAqIERlZmluZSB0aGUgdHlwZXMgb2YgVE9EQy9SVEMgdmFyaWFudHMgdGhhdCBhcmUgc3VwcG9ydGVkIGluCisgKiBhcmNoL3BwYy9rZXJuZWwvdG9kY190aW1lLmMKKyAqIE1ha2UgYSBuZXcgb25lIG9mIHRoZXNlIGZvciBhbnkgY2hpcCBzb21laG93IGRpZmZlcnMgZnJvbSB3aGF0J3MgYWxyZWFkeQorICogZGVmaW5lZC4gIFRoYXQgd2F5LCBpZiB5b3UgZXZlciBuZWVkIHRvIHB1dCBpbiBjb2RlIHRvIHRvdWNoIHRob3NlCisgKiBiaXRzL3JlZ2lzdGVycyBpbiB0b2RjX3RpbWUuYywgeW91IGNhbiBwdXQgaXQgaW5zaWRlIGFuCisgKiAnaWYgKHRvZGNfaW5mby0+cnRjX3R5cGUgPT0gVE9EQ19UWVBFX1hYWCknIHNvIHlvdSB3b24ndCBicmVhaworICogYW55b25lIGVsc2UuCisgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzUJCTEKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzcJCTIKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTkJCTMKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY5MwkJNAkvKiBEYWxsYXMgRFMxNjkzIFJUQyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzCQk1CS8qIERhbGxhcyBEUzE3NDMgUlRDICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDYJCTYJLyogRGFsbGFzIERTMTc0NiBSVEMgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0NwkJNwkvKiBEYWxsYXMgRFMxNzQ3IFJUQyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxCQk4CS8qIERhbGxhcyBEUzE1MDEgUlRDICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDMJCTkJLyogRGFsbGFzIERTMTY0MyBSVEMgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX1BDOTczMDcJCTEwCS8qIFBDOTczMDcgaW50ZXJuYWwgUlRDICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTcJCTExCS8qIERhbGxhcyBEUzE1NTcgUlRDICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1CQkxMgkvKiBEYWxsYXMgRFMxNzI4NSBSVEMgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1MwkJMTMJLyogRGFsbGFzIERTMTU1MyBSVEMgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4CQkxMDAJLyogTGVhdmUgcm9vbSBmb3IgbTQ4dHh4J3MgKi8KKworLyoKKyAqIEJpdCB0byBjbGVhci9zZXQgdG8gZW5hYmxlIHJlYWRzL3dyaXRlcyB0byB0aGUgY2hpcAorICovCisjZGVmaW5lIFRPRENfTUs0OFRYWF9DTlRMX0FfUgkJMHg0MAorI2RlZmluZSBUT0RDX01LNDhUWFhfQ05UTF9BX1cJCTB4ODAKKyNkZWZpbmUgVE9EQ19NSzQ4VFhYX0RBWV9DQgkJMHg4MAorCisjZGVmaW5lIFRPRENfRFMxNTAxX0NOVExfQl9URQkJMHg4MAorCisvKgorICogRGVmaW5lIGZsYWcgYml0cyB1c2VkIGJ5IHRvZGMgcm91dGluZXMuCisgKi8KKyNkZWZpbmUgVE9EQ19GTEFHXzJfTEVWRUxfTlZSQU0JCTB4MDAwMDAwMDEKKworLyoKKyAqIERlZmluZSB0aGUgdmFsdWVzIGZvciB0aGUgdmFyaW91cyBSVEMncyB0aGF0IHNob3VsZCB0byBpbnRvIHRoZSB0b2RjX2luZm8KKyAqIHRhYmxlLgorICogTm90ZTogVGhlIFhYWF9OVlJBTV9TSVpFLCBYWFhfTlZSQU1fQUREUl9SRUcsIGFuZCBYWFhfTlZSQU1fREFUQV9SRUcgb25seQorICogbWF0dGVyIGlmIFhYWF9TV19GTEFHUyBoYXMgVE9EQ19GTEFHXzJfTEVWRUxfTlZSQU0gc2V0LgorICovCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X05WUkFNX1NJWkUJCTB4N2ZmOAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9TV19GTEFHUwkJMAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9ZRUFSCQkJMHg3ZmZmCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X01PTlRICQkJMHg3ZmZlCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X0RPTQkJCTB4N2ZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzVfRE9XCQkJMHg3ZmZjCS8qIERheSBvZiBXZWVrICovCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X0hPVVJTCQkJMHg3ZmZiCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X01JTlVURVMJCTB4N2ZmYQorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9TRUNPTkRTCQkweDdmZjkKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzVfQ05UTF9CCQkweDdmZjkKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzVfQ05UTF9BCQkweDdmZjgKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzVfV0FUQ0hET0cJCTB4MDAwMAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9JTlRFUlJVUFRTCQkweDAwMDAKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzVfQUxBUk1fREFURQkJMHgwMDAwCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X0FMQVJNX0hPVVIJCTB4MDAwMAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9BTEFSTV9NSU5VVEVTCQkweDAwMDAKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzVfQUxBUk1fU0VDT05EUwkJMHgwMDAwCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X0NFTlRVUlkJCTB4MDAwMAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9GTEFHUwkJCTB4MDAwMAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzNV9OVlJBTV9BRERSX1JFRwkwCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM1X05WUkFNX0RBVEFfUkVHCTAKKworI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19OVlJBTV9TSVpFCQkweDdmZjAKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfU1dfRkxBR1MJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfWUVBUgkJCTB4N2ZmZgorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19NT05USAkJCTB4N2ZmZQorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19ET00JCQkweDdmZmQJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM3X0RPVwkJCTB4N2ZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19IT1VSUwkJCTB4N2ZmYgorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19NSU5VVEVTCQkweDdmZmEKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfU0VDT05EUwkJMHg3ZmY5CisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM3X0NOVExfQgkJMHg3ZmY5CisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM3X0NOVExfQQkJMHg3ZmY4CisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM3X1dBVENIRE9HCQkweDdmZjcKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfSU5URVJSVVBUUwkJMHg3ZmY2CisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM3X0FMQVJNX0RBVEUJCTB4N2ZmNQorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19BTEFSTV9IT1VSCQkweDdmZjQKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfQUxBUk1fTUlOVVRFUwkJMHg3ZmYzCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDM3X0FMQVJNX1NFQ09ORFMJCTB4N2ZmMgorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19DRU5UVVJZCQkweDdmZjEKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfRkxBR1MJCQkweDdmZjAKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUMzdfTlZSQU1fQUREUl9SRUcJMAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQzN19OVlJBTV9EQVRBX1JFRwkwCisKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfTlZSQU1fU0laRQkJMHgxZmYwCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X1NXX0ZMQUdTCQkwCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X1lFQVIJCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfTU9OVEgJCQkweDFmZmUKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfRE9NCQkJMHgxZmZkCS8qIERheSBvZiBNb250aCAqLworI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQ1OV9ET1cJCQkweDFmZmMJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfSE9VUlMJCQkweDFmZmIKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfTUlOVVRFUwkJMHgxZmZhCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X1NFQ09ORFMJCTB4MWZmOQorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQ1OV9DTlRMX0IJCTB4MWZmOQorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQ1OV9DTlRMX0EJCTB4MWZmOAorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQ1OV9XQVRDSERPRwkJMHgxZmZmCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X0lOVEVSUlVQVFMJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQ1OV9BTEFSTV9EQVRFCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfQUxBUk1fSE9VUgkJMHgxZmZmCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X0FMQVJNX01JTlVURVMJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfTUs0OFQ1OV9BTEFSTV9TRUNPTkRTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfQ0VOVFVSWQkJMHgxZmZmCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X0ZMQUdTCQkJMHgxZmZmCisjZGVmaW5lIFRPRENfVFlQRV9NSzQ4VDU5X05WUkFNX0FERFJfUkVHCTAKKyNkZWZpbmUgVE9EQ19UWVBFX01LNDhUNTlfTlZSQU1fREFUQV9SRUcJMAorCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRQkweDEwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxX1NXX0ZMQUdTCVRPRENfRkxBR18yX0xFVkVMX05WUkFNCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfWUVBUgkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDYpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfTU9OVEgJCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDA1KQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxX0RPTQkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDQpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfRE9XCQkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwMykKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTUwMV9IT1VSUwkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDIpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfTUlOVVRFUwkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwMSkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTUwMV9TRUNPTkRTCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDAwKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxX0NOVExfQgkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MGYpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfQ05UTF9BCQkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwZikKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTUwMV9XQVRDSERPRwkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHhmZikKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTUwMV9JTlRFUlJVUFRTCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweGZmKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxX0FMQVJNX0RBVEUJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MGIpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfQUxBUk1fSE9VUgkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwYSkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTUwMV9BTEFSTV9NSU5VVEVTCShUT0RDX1RZUEVfRFMxNTAxX05WUkFNX1NJWkUgKyAweDA5KQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxX0FMQVJNX1NFQ09ORFMJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4MDgpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfQ0VOVFVSWQkoVE9EQ19UWVBFX0RTMTUwMV9OVlJBTV9TSVpFICsgMHgwNykKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTUwMV9GTEFHUwkJKFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fU0laRSArIDB4ZmYpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1MDFfTlZSQU1fQUREUl9SRUcJMHgxMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTAxX05WUkFNX0RBVEFfUkVHCTB4MTMKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX05WUkFNX1NJWkUJCTB4MWZmMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX1NXX0ZMQUdTCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfWUVBUgkJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX01PTlRICQkJMHgxZmZlCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfRE9NCQkJMHgxZmZkCS8qIERheSBvZiBNb250aCAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX0RPVwkJCTB4MWZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX0hPVVJTCQkJMHgxZmZiCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfTUlOVVRFUwkJMHgxZmZhCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfU0VDT05EUwkJMHgxZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfQ05UTF9CCQkJMHgxZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfQ05UTF9BCQkJMHgxZmY4CS8qIGNvbnRyb2xfYSBSL1cgcmVncyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX1dBVENIRE9HCQkweDFmZjcKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19JTlRFUlJVUFRTCQkweDFmZjYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19BTEFSTV9EQVRFCQkweDFmZjUKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19BTEFSTV9IT1VSCQkweDFmZjQKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19BTEFSTV9NSU5VVEVTCQkweDFmZjMKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19BTEFSTV9TRUNPTkRTCQkweDFmZjIKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19DRU5UVVJZCQkweDFmZjgKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1M19GTEFHUwkJCTB4MWZmMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTUzX05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTNfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X05WUkFNX1NJWkUJCTB4N2ZmZjAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1N19TV19GTEFHUwkJMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X1lFQVIJCQkweDdmZmZmCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfTU9OVEgJCQkweDdmZmZlCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfRE9NCQkJMHg3ZmZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1N19ET1cJCQkweDdmZmZjCS8qIERheSBvZiBXZWVrICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfSE9VUlMJCQkweDdmZmZiCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfTUlOVVRFUwkJMHg3ZmZmYQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X1NFQ09ORFMJCTB4N2ZmZjkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1N19DTlRMX0IJCQkweDdmZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfQ05UTF9BCQkJMHg3ZmZmOAkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1N19XQVRDSERPRwkJMHg3ZmZmNworI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X0lOVEVSUlVQVFMJCTB4N2ZmZjYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1N19BTEFSTV9EQVRFCQkweDdmZmY1CisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfQUxBUk1fSE9VUgkJMHg3ZmZmNAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X0FMQVJNX01JTlVURVMJCTB4N2ZmZjMKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTU1N19BTEFSTV9TRUNPTkRTCQkweDdmZmYyCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfQ0VOVFVSWQkJMHg3ZmZmOAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X0ZMQUdTCQkJMHg3ZmZmMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNTU3X05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE1NTdfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX05WUkFNX1NJWkUJCTB4MWZmOAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX1NXX0ZMQUdTCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfWUVBUgkJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX01PTlRICQkJMHgxZmZlCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfRE9NCQkJMHgxZmZkCS8qIERheSBvZiBNb250aCAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX0RPVwkJCTB4MWZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX0hPVVJTCQkJMHgxZmZiCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfTUlOVVRFUwkJMHgxZmZhCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfU0VDT05EUwkJMHgxZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfQ05UTF9CCQkJMHgxZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfQ05UTF9BCQkJMHgxZmY4CS8qIGNvbnRyb2xfYSBSL1cgcmVncyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX1dBVENIRE9HCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19JTlRFUlJVUFRTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19BTEFSTV9EQVRFCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19BTEFSTV9IT1VSCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19BTEFSTV9NSU5VVEVTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19BTEFSTV9TRUNPTkRTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19DRU5UVVJZCQkweDFmZjgKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY0M19GTEFHUwkJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjQzX05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2NDNfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX05WUkFNX1NJWkUJCTAgLyogTm90IGhhbmRsZWQgeWV0ICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2OTNfU1dfRkxBR1MJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY5M19ZRUFSCQkJMHgwOQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX01PTlRICQkJMHgwOAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX0RPTQkJCTB4MDcJLyogRGF5IG9mIE1vbnRoICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2OTNfRE9XCQkJMHgwNgkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX0hPVVJTCQkJMHgwNAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX01JTlVURVMJCTB4MDIKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY5M19TRUNPTkRTCQkweDAwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2OTNfQ05UTF9CCQkJMHgwYgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX0NOVExfQQkJCTB4MGEKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY5M19XQVRDSERPRwkJMHhmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX0lOVEVSUlVQVFMJCTB4ZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY5M19BTEFSTV9EQVRFCQkweDQ5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE2OTNfQUxBUk1fSE9VUgkJMHgwNQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX0FMQVJNX01JTlVURVMJCTB4MDMKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTY5M19BTEFSTV9TRUNPTkRTCQkweDAxCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2OTNfQ0VOVFVSWQkJMHg0OAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX0ZMQUdTCQkJMHhmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNjkzX05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE2OTNfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX05WUkFNX1NJWkUJCTB4MWZmOAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX1NXX0ZMQUdTCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfWUVBUgkJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX01PTlRICQkJMHgxZmZlCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfRE9NCQkJMHgxZmZkCS8qIERheSBvZiBNb250aCAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX0RPVwkJCTB4MWZmYwkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX0hPVVJTCQkJMHgxZmZiCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfTUlOVVRFUwkJMHgxZmZhCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfU0VDT05EUwkJMHgxZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfQ05UTF9CCQkJMHgxZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfQ05UTF9BCQkJMHgxZmY4CS8qIGNvbnRyb2xfYSBSL1cgcmVncyAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX1dBVENIRE9HCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19JTlRFUlJVUFRTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19BTEFSTV9EQVRFCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19BTEFSTV9IT1VSCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19BTEFSTV9NSU5VVEVTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19BTEFSTV9TRUNPTkRTCQkweDFmZmYKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19DRU5UVVJZCQkweDFmZjgKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0M19GTEFHUwkJCTB4MWZmZgorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQzX05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDNfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X05WUkFNX1NJWkUJCTB4MWZmZjgKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0Nl9TV19GTEFHUwkJMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X1lFQVIJCQkweDFmZmZmCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfTU9OVEgJCQkweDFmZmZlCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfRE9NCQkJMHgxZmZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0Nl9ET1cJCQkweDFmZmZjCS8qIERheSBvZiBXZWVrICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfSE9VUlMJCQkweDFmZmZiCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfTUlOVVRFUwkJMHgxZmZmYQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X1NFQ09ORFMJCTB4MWZmZjkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0Nl9DTlRMX0IJCQkweDFmZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfQ05UTF9BCQkJMHgxZmZmOAkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0Nl9XQVRDSERPRwkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X0lOVEVSUlVQVFMJCTB4MDAwMDAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0Nl9BTEFSTV9EQVRFCQkweDAwMDAwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfQUxBUk1fSE9VUgkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X0FMQVJNX01JTlVURVMJCTB4MDAwMDAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0Nl9BTEFSTV9TRUNPTkRTCQkweDAwMDAwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfQ0VOVFVSWQkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X0ZMQUdTCQkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ2X05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDZfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X05WUkFNX1NJWkUJCTB4N2ZmZjgKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0N19TV19GTEFHUwkJMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X1lFQVIJCQkweDdmZmZmCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfTU9OVEgJCQkweDdmZmZlCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfRE9NCQkJMHg3ZmZmZAkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0N19ET1cJCQkweDdmZmZjCS8qIERheSBvZiBXZWVrICovCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfSE9VUlMJCQkweDdmZmZiCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfTUlOVVRFUwkJMHg3ZmZmYQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X1NFQ09ORFMJCTB4N2ZmZjkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0N19DTlRMX0IJCQkweDdmZmY5CisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfQ05UTF9BCQkJMHg3ZmZmOAkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0N19XQVRDSERPRwkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X0lOVEVSUlVQVFMJCTB4MDAwMDAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0N19BTEFSTV9EQVRFCQkweDAwMDAwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfQUxBUk1fSE9VUgkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X0FMQVJNX01JTlVURVMJCTB4MDAwMDAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTc0N19BTEFSTV9TRUNPTkRTCQkweDAwMDAwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfQ0VOVFVSWQkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X0ZMQUdTCQkJMHgwMDAwMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzQ3X05WUkFNX0FERFJfUkVHCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3NDdfTlZSQU1fREFUQV9SRUcJCTAKKworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFCQkoMHgxMDAwLTB4ODApIC8qIDRLeDggTlZSQU0gKG1pbnVzIFJUQyByZWdzKSAqLworI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9TV19GTEFHUwkJVE9EQ19GTEFHXzJfTEVWRUxfTlZSQU0KKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfU0VDT05EUwkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDAwKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9BTEFSTV9TRUNPTkRTCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDEpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X01JTlVURVMJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwMikKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfQUxBUk1fTUlOVVRFUwkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDAzKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9IT1VSUwkJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwNCkKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfQUxBUk1fSE9VUgkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDA1KQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9ET1cJCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDYpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0RPTQkJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwNykKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfTU9OVEgJCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDgpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X1lFQVIJCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MDkpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0NOVExfQQkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDBBKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9DTlRMX0IJCShUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9TSVpFICsgMHgwQikKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfQ05UTF9DCQkoVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fU0laRSArIDB4MEMpCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0NOVExfRAkJKFRPRENfVFlQRV9EUzE3Mjg1X05WUkFNX1NJWkUgKyAweDBEKQorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9XQVRDSERPRwkJMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9JTlRFUlJVUFRTCQkwCisjZGVmaW5lIFRPRENfVFlQRV9EUzE3Mjg1X0FMQVJNX0RBVEUJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfQ0VOVFVSWQkJMAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9GTEFHUwkJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX0RTMTcyODVfTlZSQU1fQUREUl9SRUcJMHg1MAorI2RlZmluZSBUT0RDX1RZUEVfRFMxNzI4NV9OVlJBTV9EQVRBX1JFRwkweDUzCisKKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X05WUkFNX1NJWkUJCTAJLyogWFhYWCAqLworI2RlZmluZSBUT0RDX1RZUEVfTUMxNDY4MThfU1dfRkxBR1MJCTAKKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X1lFQVIJCQkweDA5CisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9NT05USAkJMHgwOAorI2RlZmluZSBUT0RDX1RZUEVfTUMxNDY4MThfRE9NCQkJMHgwNwkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X0RPVwkJCTB4MDYJLyogRGF5IG9mIFdlZWsgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X0hPVVJTCQkweDA0CisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9NSU5VVEVTCQkweDAyCisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9TRUNPTkRTCQkweDAwCisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9DTlRMX0IJCTB4MGEKKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X0NOVExfQQkJMHgwYgkvKiBjb250cm9sX2EgUi9XIHJlZ3MgKi8KKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X1dBVENIRE9HCQkwCisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9JTlRFUlJVUFRTCQkweDBjCisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9BTEFSTV9EQVRFCQkweGZmCisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9BTEFSTV9IT1VSCQkweDA1CisjZGVmaW5lIFRPRENfVFlQRV9NQzE0NjgxOF9BTEFSTV9NSU5VVEVTCTB4MDMKKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X0FMQVJNX1NFQ09ORFMJMHgwMQorI2RlZmluZSBUT0RDX1RZUEVfTUMxNDY4MThfQ0VOVFVSWQkJMHhmZgorI2RlZmluZSBUT0RDX1RZUEVfTUMxNDY4MThfRkxBR1MJCTB4ZmYKKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X05WUkFNX0FERFJfUkVHCTAKKyNkZWZpbmUgVE9EQ19UWVBFX01DMTQ2ODE4X05WUkFNX0RBVEFfUkVHCTAKKworI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19OVlJBTV9TSVpFCQkwCS8qIE5vIE5WUkFNPyAqLworI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19TV19GTEFHUwkJMAorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19ZRUFSCQkJMHgwOQorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19NT05USAkJCTB4MDgKKyNkZWZpbmUgVE9EQ19UWVBFX1BDOTczMDdfRE9NCQkJMHgwNwkvKiBEYXkgb2YgTW9udGggKi8KKyNkZWZpbmUgVE9EQ19UWVBFX1BDOTczMDdfRE9XCQkJMHgwNgkvKiBEYXkgb2YgV2VlayAqLworI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19IT1VSUwkJCTB4MDQKKyNkZWZpbmUgVE9EQ19UWVBFX1BDOTczMDdfTUlOVVRFUwkJMHgwMgorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19TRUNPTkRTCQkweDAwCisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3X0NOVExfQgkJMHgwYQorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19DTlRMX0EJCTB4MGIJLyogY29udHJvbF9hIFIvVyByZWdzICovCisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3X1dBVENIRE9HCQkweDBjCisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3X0lOVEVSUlVQVFMJCTB4MGQKKyNkZWZpbmUgVE9EQ19UWVBFX1BDOTczMDdfQUxBUk1fREFURQkJMHhmZgorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19BTEFSTV9IT1VSCQkweDA1CisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3X0FMQVJNX01JTlVURVMJCTB4MDMKKyNkZWZpbmUgVE9EQ19UWVBFX1BDOTczMDdfQUxBUk1fU0VDT05EUwkJMHgwMQorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19DRU5UVVJZCQkweGZmCisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3X0ZMQUdTCQkJMHhmZgorI2RlZmluZSBUT0RDX1RZUEVfUEM5NzMwN19OVlJBTV9BRERSX1JFRwkwCisjZGVmaW5lIFRPRENfVFlQRV9QQzk3MzA3X05WUkFNX0RBVEFfUkVHCTAKKworLyoKKyAqIERlZmluZSBtYWNyb3MgdG8gYWxsb2NhdGUgYW5kIGluaXQgdGhlIHRvZGNfaW5mb190IHRhYmxlIHRoYXQgd2lsbAorICogYmUgdXNlZCBieSB0aGUgdG9kY190aW1lLmMgcm91dGluZXMuCisgKi8KKyNkZWZpbmUgVE9EQ19BTExPQygpCQkJCQkJCVwKKwlzdGF0aWMgdG9kY19pbmZvX3QgdG9kY19pbmZvX2FsbG9jOwkJCQlcCisJdG9kY19pbmZvX3QgKnRvZGNfaW5mbyA9ICZ0b2RjX2luZm9fYWxsb2M7CisKKyNkZWZpbmUgVE9EQ19JTklUKGNsb2NrX3R5cGUsIGFzMCwgYXMxLCBkYXRhLCBiaXRzKSB7CQkJXAorCXRvZGNfaW5mby0+cnRjX3R5cGUgPSBjbG9ja190eXBlOwkJCQlcCisJCQkJCQkJCQlcCisJdG9kY19pbmZvLT5udnJhbV9hczAgPSAodW5zaWduZWQgaW50KShhczApOwkJCVwKKwl0b2RjX2luZm8tPm52cmFtX2FzMSA9ICh1bnNpZ25lZCBpbnQpKGFzMSk7CQkJXAorCXRvZGNfaW5mby0+bnZyYW1fZGF0YSA9ICh1bnNpZ25lZCBpbnQpKGRhdGEpOwkJCVwKKwkJCQkJCQkJCVwKKwl0b2RjX2luZm8tPmFzMF9iaXRzID0gKGJpdHMpOwkJCQkJXAorCQkJCQkJCQkJXAorCXRvZGNfaW5mby0+bnZyYW1fc2l6ZSA9IGNsb2NrX3R5cGUgIyNfTlZSQU1fU0laRTsJCVwKKwl0b2RjX2luZm8tPnN3X2ZsYWdzID0gY2xvY2tfdHlwZSAjI19TV19GTEFHUzsJCQlcCisJCQkJCQkJCQlcCisJdG9kY19pbmZvLT55ZWFyID0gY2xvY2tfdHlwZSAjI19ZRUFSOwkJCQlcCisJdG9kY19pbmZvLT5tb250aCA9IGNsb2NrX3R5cGUgIyNfTU9OVEg7CQkJCVwKKwl0b2RjX2luZm8tPmRheV9vZl9tb250aCA9IGNsb2NrX3R5cGUgIyNfRE9NOwkJCVwKKwl0b2RjX2luZm8tPmRheV9vZl93ZWVrID0gY2xvY2tfdHlwZSAjI19ET1c7CQkJXAorCXRvZGNfaW5mby0+aG91cnMgPSBjbG9ja190eXBlICMjX0hPVVJTOwkJCQlcCisJdG9kY19pbmZvLT5taW51dGVzID0gY2xvY2tfdHlwZSAjI19NSU5VVEVTOwkJCVwKKwl0b2RjX2luZm8tPnNlY29uZHMgPSBjbG9ja190eXBlICMjX1NFQ09ORFM7CQkJXAorCXRvZGNfaW5mby0+Y29udHJvbF9iID0gY2xvY2tfdHlwZSAjI19DTlRMX0I7CQkJXAorCXRvZGNfaW5mby0+Y29udHJvbF9hID0gY2xvY2tfdHlwZSAjI19DTlRMX0E7CQkJXAorCXRvZGNfaW5mby0+d2F0Y2hkb2cgPSBjbG9ja190eXBlICMjX1dBVENIRE9HOwkJCVwKKwl0b2RjX2luZm8tPmludGVycnVwdHMgPSBjbG9ja190eXBlICMjX0lOVEVSUlVQVFM7CQlcCisJdG9kY19pbmZvLT5hbGFybV9kYXRlID0gY2xvY2tfdHlwZSAjI19BTEFSTV9EQVRFOwkJXAorCXRvZGNfaW5mby0+YWxhcm1faG91ciA9IGNsb2NrX3R5cGUgIyNfQUxBUk1fSE9VUjsJCVwKKwl0b2RjX2luZm8tPmFsYXJtX21pbnV0ZXMgPSBjbG9ja190eXBlICMjX0FMQVJNX01JTlVURVM7CQlcCisJdG9kY19pbmZvLT5hbGFybV9zZWNvbmRzID0gY2xvY2tfdHlwZSAjI19BTEFSTV9TRUNPTkRTOwkJXAorCXRvZGNfaW5mby0+Y2VudHVyeSA9IGNsb2NrX3R5cGUgIyNfQ0VOVFVSWTsJCQlcCisJdG9kY19pbmZvLT5mbGFncyA9IGNsb2NrX3R5cGUgIyNfRkxBR1M7CQkJCVwKKwkJCQkJCQkJCVwKKwl0b2RjX2luZm8tPm52cmFtX2FkZHJfcmVnID0gY2xvY2tfdHlwZSAjI19OVlJBTV9BRERSX1JFRzsJXAorCXRvZGNfaW5mby0+bnZyYW1fZGF0YV9yZWcgPSBjbG9ja190eXBlICMjX05WUkFNX0RBVEFfUkVHOwlcCit9CisKK2V4dGVybiB0b2RjX2luZm9fdCAqdG9kY19pbmZvOworCit1bnNpZ25lZCBjaGFyIHRvZGNfZGlyZWN0X3JlYWRfdmFsKGludCBhZGRyKTsKK3ZvaWQgdG9kY19kaXJlY3Rfd3JpdGVfdmFsKGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit1bnNpZ25lZCBjaGFyIHRvZGNfbTQ4dHh4X3JlYWRfdmFsKGludCBhZGRyKTsKK3ZvaWQgdG9kY19tNDh0eHhfd3JpdGVfdmFsKGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit1bnNpZ25lZCBjaGFyIHRvZGNfbWMxNDY4MThfcmVhZF92YWwoaW50IGFkZHIpOwordm9pZCB0b2RjX21jMTQ2ODE4X3dyaXRlX3ZhbChpbnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpOworCitsb25nIHRvZGNfdGltZV9pbml0KHZvaWQpOwordm9pZCB0b2RjX2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKik7CitpbnQgdG9kY19zZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICopOwordm9pZCB0b2RjX2NhbGlicmF0ZV9kZWNyKHZvaWQpOworCisjZW5kaWYJCQkJLyogX19QUENfS0VSTkVMX1RPRENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90c2kxMDguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjMjc4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4LmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1wcGMvdHNpMTA4LmgKKyAqCisgKiBjb21tb24gcm91dGluZSBhbmQgbWVtb3J5IGxheW91dCBmb3IgVHVuZHJhIFRTSTEwOChHcmVuZGVsKSBob3N0IGJyaWRnZQorICogbWVtb3J5IGNvbnRyb2xsZXIuCisgKgorICogQXV0aG9yOiBKYWNvYiBQYW4gKGphY29iLnBhbkBmcmVlc2NhbGUuY29tKQorICoJICAgQWxleCBCb3VuaW5lIChhbGV4YW5kcmViQHR1bmRyYS5jb20pCisgKiAyMDA0IChjKSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19QUENfS0VSTkVMX1RTSTEwOF9ICisjZGVmaW5lIF9fUFBDX0tFUk5FTF9UU0kxMDhfSAorCisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKworLyogU2l6ZSBvZiBlbnRpcmUgcmVnaXN0ZXIgc3BhY2UgKi8KKyNkZWZpbmUgVFNJMTA4X1JFR19TSVpFCQkoMHgxMDAwMCkKKworLyogU2l6ZXMgb2YgcmVnaXN0ZXIgc3BhY2VzIGZvciBpbmRpdmlkdWFsIGJsb2NrcyAqLworI2RlZmluZSBUU0kxMDhfSExQX1NJWkUJCTB4MTAwMAorI2RlZmluZSBUU0kxMDhfUENJX1NJWkUJCTB4MTAwMAorI2RlZmluZSBUU0kxMDhfQ0xLX1NJWkUJCTB4MTAwMAorI2RlZmluZSBUU0kxMDhfUEJfU0laRQkJMHgxMDAwCisjZGVmaW5lIFRTSTEwOF9TRF9TSVpFCQkweDEwMDAKKyNkZWZpbmUgVFNJMTA4X0RNQV9TSVpFCQkweDEwMDAKKyNkZWZpbmUgVFNJMTA4X0VUSF9TSVpFCQkweDEwMDAKKyNkZWZpbmUgVFNJMTA4X0kyQ19TSVpFCQkweDQwMAorI2RlZmluZSBUU0kxMDhfTVBJQ19TSVpFCTB4NDAwCisjZGVmaW5lIFRTSTEwOF9VQVJUMF9TSVpFCTB4MjAwCisjZGVmaW5lIFRTSTEwOF9HUElPX1NJWkUJMHgyMDAKKyNkZWZpbmUgVFNJMTA4X1VBUlQxX1NJWkUJMHgyMDAKKworLyogT2Zmc2V0cyB3aXRoaW4gVHNpMTA4KEEpIENTUiBzcGFjZSBmb3IgaW5kaXZpZHVhbCBibG9ja3MgKi8KKyNkZWZpbmUgVFNJMTA4X0hMUF9PRkZTRVQJMHgwMDAwCisjZGVmaW5lIFRTSTEwOF9QQ0lfT0ZGU0VUCTB4MTAwMAorI2RlZmluZSBUU0kxMDhfQ0xLX09GRlNFVAkweDIwMDAKKyNkZWZpbmUgVFNJMTA4X1BCX09GRlNFVAkweDMwMDAKKyNkZWZpbmUgVFNJMTA4X1NEX09GRlNFVAkweDQwMDAKKyNkZWZpbmUgVFNJMTA4X0RNQV9PRkZTRVQJMHg1MDAwCisjZGVmaW5lIFRTSTEwOF9FVEhfT0ZGU0VUCTB4NjAwMAorI2RlZmluZSBUU0kxMDhfSTJDX09GRlNFVAkweDcwMDAKKyNkZWZpbmUgVFNJMTA4X01QSUNfT0ZGU0VUCTB4NzQwMAorI2RlZmluZSBUU0kxMDhfVUFSVDBfT0ZGU0VUCTB4NzgwMAorI2RlZmluZSBUU0kxMDhfR1BJT19PRkZTRVQJMHg3QTAwCisjZGVmaW5lIFRTSTEwOF9VQVJUMV9PRkZTRVQJMHg3QzAwCisKKy8qIFRzaTEwOCByZWdpc3RlcnMgdXNlZCBieSBjb21tb24gY29kZSBjb21wb25lbnRzICovCisjZGVmaW5lIFRTSTEwOF9QQ0lfQ1NSCQkoMHgwMDQpCisjZGVmaW5lIFRTSTEwOF9QQ0lfSVJQX0NGR19DVEwJKDB4MTgwKQorI2RlZmluZSBUU0kxMDhfUENJX0lSUF9TVEFUCSgweDE4NCkKKyNkZWZpbmUgVFNJMTA4X1BDSV9JUlBfRU5BQkxFCSgweDE4OCkKKyNkZWZpbmUgVFNJMTA4X1BDSV9JUlBfSU5UQUQJKDB4MThDKQorCisjZGVmaW5lIFRTSTEwOF9QQ0lfSVJQX1NUQVRfUF9JTlQJKDB4MDA0MDAwMDApCisjZGVmaW5lIFRTSTEwOF9QQ0lfSVJQX0VOQUJMRV9QX0lOVAkoMHgwMDQwMDAwMCkKKworI2RlZmluZSBUU0kxMDhfQ0dfUFdSVVBfU1RBVFVTCSgweDIzNCkKKworI2RlZmluZSBUU0kxMDhfUEJfSVNSCQkoMHgwMEMpCisjZGVmaW5lIFRTSTEwOF9QQl9FUlJDUwkJKDB4NDA0KQorI2RlZmluZSBUU0kxMDhfUEJfQUVSUgkJKDB4NDA4KQorCisjZGVmaW5lIFRTSTEwOF9QQl9FUlJDU19FUwkJKDEgPDwgMSkKKyNkZWZpbmUgVFNJMTA4X1BCX0lTUl9QQlNfUkRfRVJSCSgxIDw8IDgpCisKKyNkZWZpbmUgVFNJMTA4X1BDSV9DRkdfQkFTRV9QSFlTCSgweGZiMDAwMDAwKQorI2RlZmluZSBUU0kxMDhfUENJX0NGR19TSVpFCQkoMHgwMTAwMDAwMCkKKy8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KKworZXh0ZXJuIHUzMiB0c2kxMDhfcGNpX2NmZ19iYXNlOworLyogRXhwb3J0ZWQgZnVuY3Rpb25zICovCisKK2V4dGVybiBpbnQgdHNpMTA4X2JyaWRnZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgdWludCBwaHlzX2Nzcl9iYXNlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRzaTEwOF9nZXRfbWVtX3NpemUodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0c2kxMDhfZ2V0X2NwdV9jbGsodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0c2kxMDhfZ2V0X3NkY19jbGsodm9pZCk7CitleHRlcm4gaW50IHRzaTEwOF9kaXJlY3Rfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgdmFsKTsKK2V4dGVybiBpbnQgdHNpMTA4X2RpcmVjdF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKiB2YWwpOworZXh0ZXJuIHZvaWQgdHNpMTA4X2NsZWFyX3BjaV9lcnJvcih1MzIgcGNpX2NmZ19iYXNlKTsKKworZXh0ZXJuIHBoeXNfYWRkcl90IGdldF9jc3JiYXNlKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIHJlZ3M7CQkvKiBodyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovCisJdTMyIHBoeXJlZ3M7CQkvKiBwaHkgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyAqLworCXUxNiBwaHk7CQkvKiBwaHkgYWRkcmVzcyAqLworCXUxNiBpcnFfbnVtOwkJLyogaXJxIG51bWJlciAqLworCXU4IG1hY19hZGRyWzZdOwkJLyogcGh5IG1hYyBhZGRyZXNzICovCit9IGh3X2luZm87CisKK2V4dGVybiB1MzIgZ2V0X3Zpcl9jc3JiYXNlKHZvaWQpOworZXh0ZXJuIHUzMiB0c2kxMDhfY3NyX3Zpcl9iYXNlOworCitleHRlcm4gaW5saW5lIHUzMiB0c2kxMDhfcmVhZF9yZWcodTMyIHJlZ19vZmZzZXQpCit7CisJcmV0dXJuIGluX2JlMzIoKHZvbGF0aWxlIHUzMiAqKSh0c2kxMDhfY3NyX3Zpcl9iYXNlICsgcmVnX29mZnNldCkpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgdHNpMTA4X3dyaXRlX3JlZyh1MzIgcmVnX29mZnNldCwgdTMyIHZhbCkKK3sKKwlvdXRfYmUzMigodm9sYXRpbGUgdTMyICopKHRzaTEwOF9jc3JfdmlyX2Jhc2UgKyByZWdfb2Zmc2V0KSwgdmFsKTsKK30KKworI2VuZGlmCQkJCS8qIF9fUFBDX0tFUk5FTF9UU0kxMDhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91ZGJnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VkYmcuaAppbmRleCAxOWExNTE3Li41NWU1Nzg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VkYmcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VkYmcuaApAQCAtNDIsNyArNDIsOCBAQAogZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF9wbWFjX3JlYWxtb2RlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF9tYXBsZV9yZWFsbW9kZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfaXNlcmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfcnRhcyh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfcnRhc19wYW5lbCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfcnRhc19jb25zb2xlKHZvaWQpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19VREJHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXBwYy9mbG9wcHkuaAppbmRleCAyYmExOTFlLi5kMzk2M2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2Zsb3BweS5oCkBAIC05NiwxMSArOTYsMTEgQEAKIHN0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKIHsKIAlpZiAoY2FuX3VzZV92aXJ0dWFsX2RtYSkKLQkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LFNBX0lOVEVSUlVQVCwKLQkJCQkJCSAgICJmbG9wcHkiLCBOVUxMKTsKKwkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LAorCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKIAllbHNlCi0JCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsCi0JCQkJICAgImZsb3BweSIsIE5VTEwpOworCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwKKwkJCQkgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgdmRtYV9kbWFfc2V0dXAoY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbW9kZSwgaW50IGlvKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29jcC5oIGIvaW5jbHVkZS9hc20tcHBjL29jcC5oCmluZGV4IDNiZTVkNzYuLjE2ZGJjN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9vY3AuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb2NwLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaAppbmRleCAwYjE5YWY4Li5mZTk1YzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKQEAgLTE3MCw3ICsxNzAsNyBAQAogI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCiAJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCiAKLS8qIFdlIGRvIGRlZmluZSBBVF9TWVNJTkZPX0VIRFIgYnV0IGRvbid0IHVzZSB0aGUgZ2F0ZSBtZWNhbmlzbSAqLworLyogV2UgZG8gZGVmaW5lIEFUX1NZU0lORk9fRUhEUiBidXQgZG9uJ3QgdXNlIHRoZSBnYXRlIG1lY2hhbmlzbSAqLwogI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEJCTEKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BjaS5oIGIvaW5jbHVkZS9hc20tcHBjL3BjaS5oCmluZGV4IDYxNDM0ZWQuLjExZmZhYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGNpLmgKQEAgLTEzMyw3ICsxMzMsNyBAQAogI2RlZmluZSBIQVZFX0FSQ0hfUENJX1JFU09VUkNFX1RPX1VTRVIKIGV4dGVybiB2b2lkIHBjaV9yZXNvdXJjZV90b191c2VyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsCiAJCQkJIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcnNyYywKLQkJCQkgdTY0ICpzdGFydCwgdTY0ICplbmQpOworCQkJCSByZXNvdXJjZV9zaXplX3QgKnN0YXJ0LCByZXNvdXJjZV9zaXplX3QgKmVuZCk7CiAKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCmluZGV4IDRkMmIxMjYuLjBkZGNkYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaApAQCAtMTIsNiArMTIsOSBAQAogICogICAgQ29weXJpZ2h0IChDKSAxOTkyLCBMaW51cyBUb3J2YWxkcwogICoKICAqLworCisjaWZkZWYgX19LRVJORUxfXworCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyoKQEAgLTUwLDE5ICs1Myw2IEBACiAgKiB3aXRoIG9wZXJhdGlvbiBvZiB0aGUgZm9ybSAic2V0X2JpdChiaXRuciwgZmxhZ3MpIi4KICAqLwogCi0vKiBzZXQgQUxJR05fQ1MgdG8gMSBpZiB0aGUgU01QIHNhZmUgYml0IG9wZXJhdGlvbnMgc2hvdWxkCi0gKiBhbGlnbiB0aGUgYWRkcmVzcyB0byA0IGJ5dGUgYm91bmRhcnkuIEl0IHNlZW1zIHRvIHdvcmsKLSAqIHdpdGhvdXQgdGhlIGFsaWdubWVudC4gCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIEFMSUdOX0NTIDAKLSNlbHNlCi0jZGVmaW5lIEFMSUdOX0NTIDEKLSNpZm5kZWYgQ09ORklHX1NNUAotI2Vycm9yICJiaXRvcHMgd29uJ3Qgd29yayB3aXRob3V0IENPTkZJR19TTVAiCi0jZW5kaWYKLSNlbmRpZgotCiAvKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9TMzkwL2tlcm5lbC9iaXRtYXAuUyAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgX29pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX25pX2JpdG1hcFtdOwpAQCAtMTIxLDEwICsxMTEsNiBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIG9sZCwgbmV3LCBtYXNrOwogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHI7Ci0jaWYgQUxJR05fQ1MgPT0gMQotCW5yICs9IChhZGRyICYgX19CSVRPUFNfQUxJR04pIDw8IDM7ICAgIC8qIGFkZCBhbGlnbm1lbnQgdG8gYml0IG51bWJlciAqLwotCWFkZHIgXj0gYWRkciAmIF9fQklUT1BTX0FMSUdOOwkgICAgICAgLyogYWxpZ24gYWRkcmVzcyB0byA4ICovCi0jZW5kaWYKIAkvKiBjYWxjdWxhdGUgYWRkcmVzcyBmb3IgQ1MgKi8KIAlhZGRyICs9IChuciBeIChuciAmIChfX0JJVE9QU19XT1JEU0laRSAtIDEpKSkgPj4gMzsKIAkvKiBtYWtlIE9SIG1hc2sgKi8KQEAgLTE0MSwxMCArMTI3LDYgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBvbGQsIG5ldywgbWFzazsKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOwotI2lmIEFMSUdOX0NTID09IDEKLQluciArPSAoYWRkciAmIF9fQklUT1BTX0FMSUdOKSA8PCAzOyAgICAvKiBhZGQgYWxpZ25tZW50IHRvIGJpdCBudW1iZXIgKi8KLQlhZGRyIF49IGFkZHIgJiBfX0JJVE9QU19BTElHTjsJICAgICAgIC8qIGFsaWduIGFkZHJlc3MgdG8gOCAqLwotI2VuZGlmCiAJLyogY2FsY3VsYXRlIGFkZHJlc3MgZm9yIENTICovCiAJYWRkciArPSAobnIgXiAobnIgJiAoX19CSVRPUFNfV09SRFNJWkUgLSAxKSkpID4+IDM7CiAJLyogbWFrZSBBTkQgbWFzayAqLwpAQCAtMTYxLDEwICsxNDMsNiBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIG9sZCwgbmV3LCBtYXNrOwogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHI7Ci0jaWYgQUxJR05fQ1MgPT0gMQotCW5yICs9IChhZGRyICYgX19CSVRPUFNfQUxJR04pIDw8IDM7ICAgIC8qIGFkZCBhbGlnbm1lbnQgdG8gYml0IG51bWJlciAqLwotCWFkZHIgXj0gYWRkciAmIF9fQklUT1BTX0FMSUdOOwkgICAgICAgLyogYWxpZ24gYWRkcmVzcyB0byA4ICovCi0jZW5kaWYKIAkvKiBjYWxjdWxhdGUgYWRkcmVzcyBmb3IgQ1MgKi8KIAlhZGRyICs9IChuciBeIChuciAmIChfX0JJVE9QU19XT1JEU0laRSAtIDEpKSkgPj4gMzsKIAkvKiBtYWtlIFhPUiBtYXNrICovCkBAIC0xODIsMTAgKzE2MCw2IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgb2xkLCBuZXcsIG1hc2s7CiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKLSNpZiBBTElHTl9DUyA9PSAxCi0JbnIgKz0gKGFkZHIgJiBfX0JJVE9QU19BTElHTikgPDwgMzsgICAgLyogYWRkIGFsaWdubWVudCB0byBiaXQgbnVtYmVyICovCi0JYWRkciBePSBhZGRyICYgX19CSVRPUFNfQUxJR047CSAgICAgICAvKiBhbGlnbiBhZGRyZXNzIHRvIDggKi8KLSNlbmRpZgogCS8qIGNhbGN1bGF0ZSBhZGRyZXNzIGZvciBDUyAqLwogCWFkZHIgKz0gKG5yIF4gKG5yICYgKF9fQklUT1BTX1dPUkRTSVpFIC0gMSkpKSA+PiAzOwogCS8qIG1ha2UgT1IvdGVzdCBtYXNrICovCkBAIC0yMDUsMTAgKzE3OSw2IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgb2xkLCBuZXcsIG1hc2s7CiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKLSNpZiBBTElHTl9DUyA9PSAxCi0JbnIgKz0gKGFkZHIgJiBfX0JJVE9QU19BTElHTikgPDwgMzsgICAgLyogYWRkIGFsaWdubWVudCB0byBiaXQgbnVtYmVyICovCi0JYWRkciBePSBhZGRyICYgX19CSVRPUFNfQUxJR047CSAgICAgICAvKiBhbGlnbiBhZGRyZXNzIHRvIDggKi8KLSNlbmRpZgogCS8qIGNhbGN1bGF0ZSBhZGRyZXNzIGZvciBDUyAqLwogCWFkZHIgKz0gKG5yIF4gKG5yICYgKF9fQklUT1BTX1dPUkRTSVpFIC0gMSkpKSA+PiAzOwogCS8qIG1ha2UgQU5EL3Rlc3QgbWFzayAqLwpAQCAtMjI4LDEwICsxOTgsNiBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIG9sZCwgbmV3LCBtYXNrOwogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHI7Ci0jaWYgQUxJR05fQ1MgPT0gMQotCW5yICs9IChhZGRyICYgX19CSVRPUFNfQUxJR04pIDw8IDM7ICAvKiBhZGQgYWxpZ25tZW50IHRvIGJpdCBudW1iZXIgKi8KLQlhZGRyIF49IGFkZHIgJiBfX0JJVE9QU19BTElHTjsJICAgICAvKiBhbGlnbiBhZGRyZXNzIHRvIDggKi8KLSNlbmRpZgogCS8qIGNhbGN1bGF0ZSBhZGRyZXNzIGZvciBDUyAqLwogCWFkZHIgKz0gKG5yIF4gKG5yICYgKF9fQklUT1BTX1dPUkRTSVpFIC0gMSkpKSA+PiAzOwogCS8qIG1ha2UgWE9SL3Rlc3QgbWFzayAqLwpAQCAtODM0LDggKzgwMCw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgogCi0jaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogQVRURU5USU9OOiBpbnRlbCBieXRlIG9yZGVyaW5nIGNvbnZlbnRpb24gZm9yIGV4dDIgYW5kIG1pbml4ICEhCiAgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFkZHI7IGJpdCAzMSBpcyB0aGUgTVNCIG9mIGFkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2Npby5oIGIvaW5jbHVkZS9hc20tczM5MC9jaW8uaAppbmRleCAwODljZjU2Li4yYjE2MTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Npby5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY2lvLmgKQEAgLTI3Niw2ICsyNzYsOCBAQAogCiBleHRlcm4gdm9pZCBjbGVhcl9hbGxfc3ViY2hhbm5lbHModm9pZCk7CiAKK2V4dGVybiB2b2lkIGNzc19zY2hlZHVsZV9yZXByb2JlKHZvaWQpOworCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oIGIvaW5jbHVkZS9hc20tczM5MC9jbWIuaAppbmRleCAyZDA5OTUwLi4yNDE3NTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY21iLmgKQEAgLTQ0LDEwICs0NCw2IEBACiAjZGVmaW5lIEJJT0RBU0RDTUZFTkFCTEUJX0lPKERBU0RfSU9DVExfTEVUVEVSLDMyKQogLyogZW5hYmxlIGNoYW5uZWwgbWVhc3VyZW1lbnQgKi8KICNkZWZpbmUgQklPREFTRENNRkRJU0FCTEUJX0lPKERBU0RfSU9DVExfTEVUVEVSLDMzKQotLyogcmVzZXQgY2hhbm5lbCBtZWFzdXJlbWVudCBibG9jayAqLwotI2RlZmluZSBCSU9EQVNEUkVTRVRDTUIJCV9JTyhEQVNEX0lPQ1RMX0xFVFRFUiwzNCkKLS8qIHJlYWQgY2hhbm5lbCBtZWFzdXJlbWVudCBkYXRhICovCi0jZGVmaW5lIEJJT0RBU0RSRUFEQ01CCQlfSU9XUihEQVNEX0lPQ1RMX0xFVFRFUiwzMixfX3U2NCkKIC8qIHJlYWQgY2hhbm5lbCBtZWFzdXJlbWVudCBkYXRhICovCiAjZGVmaW5lIEJJT0RBU0RSRUFEQUxMQ01CCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMzLHN0cnVjdCBjbWJkYXRhKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2Rhc2QuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZGFzZC5oCmluZGV4IDE2MzBjMjYuLmMwNDJmOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZGFzZC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZGFzZC5oCkBAIC02OCwxMCArNjgsMTIgQEAKICAqIDB4MDA6IGRlZmF1bHQgZmVhdHVyZXMKICAqIDB4MDE6IHJlYWRvbmx5IChybykKICAqIDB4MDI6IHVzZSBkaWFnIGRpc2NpcGxpbmUgKGRpYWcpCisgKiAweDA0OiBzZXQgdGhlIGRldmljZSBpbml0aWFsbHkgb25saW5lIChpbnRlcm5hbCB1c2Ugb25seSkKICAqLwotI2RlZmluZSBEQVNEX0ZFQVRVUkVfREVGQVVMVCAgMAotI2RlZmluZSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgMQotI2RlZmluZSBEQVNEX0ZFQVRVUkVfVVNFRElBRyAgMgorI2RlZmluZSBEQVNEX0ZFQVRVUkVfREVGQVVMVAkgICAgIDB4MDAKKyNkZWZpbmUgREFTRF9GRUFUVVJFX1JFQURPTkxZCSAgICAgMHgwMQorI2RlZmluZSBEQVNEX0ZFQVRVUkVfVVNFRElBRwkgICAgIDB4MDIKKyNkZWZpbmUgREFTRF9GRUFUVVJFX0lOSVRJQUxfT05MSU5FICAweDA0CiAKICNkZWZpbmUgREFTRF9QQVJUTl9CSVRTIDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pcnFmbGFncy5oIGIvaW5jbHVkZS9hc20tczM5MC9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjRkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lycWZsYWdzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL2lycWZsYWdzLmgKKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CisgKiAgICBBdXRob3Iocyk6IEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgorICovCisKKyNpZm5kZWYgX19BU01fSVJRRkxBR1NfSAorI2RlZmluZSBfX0FTTV9JUlFGTEFHU19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIGludGVycnVwdCBjb250cm9sLi4gKi8KKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9lbmFibGUoKSAoeyBcCisJdW5zaWduZWQgbG9uZyAgX19kdW1teTsgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICggXAorCQkic3Rvc20gMCglMSksMHgwMyIgXAorCQk6ICI9bSIgKF9fZHVtbXkpIDogImEiICgmX19kdW1teSkgOiAibWVtb3J5IiApOyBcCisJfSkKKworI2RlZmluZSByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKSAoeyBcCisJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCisJCSJzdG5zbSAwKCUxKSwweGZjIiA6ICI9bSIgKF9fZmxhZ3MpIDogImEiICgmX19mbGFncykgKTsgXAorCV9fZmxhZ3M7IFwKKwl9KQorCisjZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKHgpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3Rvc20gMCglMSksMCIgOiAiPW0iICh4KSA6ICJhIiAoJngpLCAibSIgKHgpICkKKworI2RlZmluZSByYXdfbG9jYWxfaXJxX3Jlc3RvcmUoeCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzc20gICAwKCUwKSIgOiA6ICJhIiAoJngpLCAibSIgKHgpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgcmF3X2lycXNfZGlzYWJsZWQoKQkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJXAorCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwlcCisJISgoZmxhZ3MgPj4gX19GTEFHX1NISUZUKSAmIDMpOwlcCit9KQorCitzdGF0aWMgaW5saW5lIGludCByYXdfaXJxc19kaXNhYmxlZF9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAhKChmbGFncyA+PiBfX0ZMQUdfU0hJRlQpICYgMyk7Cit9CisKKy8qIEZvciBzcGlubG9ja3MgZXRjICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZSh4KQkoKHgpID0gcmF3X2xvY2FsX2lycV9kaXNhYmxlKCkpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fSVJRRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGVyY3B1LmgKaW5kZXggZDlhOGNjYS4uMjhiMzUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BlcmNwdS5oCkBAIC00Miw2ICs0Miw3IEBACiAjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSBfX3JlbG9jX2hpZGUodmFyLFMzOTBfbG93Y29yZS5wZXJjcHVfb2Zmc2V0KQogI2RlZmluZSBfX3Jhd19nZXRfY3B1X3Zhcih2YXIpIF9fcmVsb2NfaGlkZSh2YXIsUzM5MF9sb3djb3JlLnBlcmNwdV9vZmZzZXQpCiAjZGVmaW5lIHBlcl9jcHUodmFyLGNwdSkgX19yZWxvY19oaWRlKHZhcixfX3Blcl9jcHVfb2Zmc2V0W2NwdV0pCisjZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0W3hdKQogCiAvKiBBIG1hY3JvIHRvIGF2b2lkICNpbmNsdWRlIGhlbGwuLi4gKi8KICNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmgKaW5kZXggODU5YjVlOS4uMjQzMTIzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmgKQEAgLTY1NywxMyArNjU3LDYgQEAKIAlfX3B0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9KQogCi0jZGVmaW5lIFNldFBhZ2VVcHRvZGF0ZShfcGFnZSkgXAotCWRvIHsJCQkJCQkJCSAgICAgIFwKLQkJc3RydWN0IHBhZ2UgKl9fcGFnZSA9IChfcGFnZSk7CQkJCSAgICAgIFwKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBHX3VwdG9kYXRlLCAmX19wYWdlLT5mbGFncykpCSAgICAgIFwKLQkJCXBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkoX3BhZ2UpOwkJICAgICAgXAotCX0gd2hpbGUgKDApCi0KICNpZmRlZiBfX3MzOTB4X18KIAogI2RlZmluZSBwZm5fcG1kKHBmbiwgcGdwcm90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3J3c2VtLmggYi9pbmNsdWRlL2FzbS1zMzkwL3J3c2VtLmgKaW5kZXggMDQyMmEwOC4uMTNlYzE2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9yd3NlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcndzZW0uaApAQCAtNjEsNiArNjEsOSBAQAogCXNpZ25lZCBsb25nCQljb3VudDsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwlzdHJ1Y3QgbG9ja2RlcF9tYXAJZGVwX21hcDsKKyNlbmRpZgogfTsKIAogI2lmbmRlZiBfX3MzOTB4X18KQEAgLTgwLDggKzgzLDE2IEBACiAvKgogICogaW5pdGlhbGlzYXRpb24KICAqLworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKSAsIC5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9CisjZWxzZQorIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpCisjZW5kaWYKKwogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKLXsgUldTRU1fVU5MT0NLRURfVkFMVUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgfQoreyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBcCisgIF9fUldTRU1fREVQX01BUF9JTklUKG5hbWUpIH0KIAogI2RlZmluZSBERUNMQVJFX1JXU0VNKG5hbWUpIFwKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIG5hbWUgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpCkBAIC05Myw2ICsxMDQsMTcgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOwogfQogCitleHRlcm4gdm9pZCBfX2luaXRfcndzZW0oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworI2RlZmluZSBpbml0X3J3c2VtKHNlbSkJCQkJXAorZG8gewkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwlcCisJCQkJCQlcCisJX19pbml0X3J3c2VtKChzZW0pLCAjc2VtLCAmX19rZXkpOwlcCit9IHdoaWxlICgwKQorCisKIC8qCiAgKiBsb2NrIGZvciByZWFkaW5nCiAgKi8KQEAgLTE1NSw3ICsxNzcsNyBAQAogLyoKICAqIGxvY2sgZm9yIHdyaXRpbmcKICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlX25lc3RlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBzdWJjbGFzcykKIHsKIAlzaWduZWQgbG9uZyBvbGQsIG5ldywgdG1wOwogCkBAIC0xODEsNiArMjAzLDExIEBACiAJCXJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHNlbSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fZG93bl93cml0ZV9uZXN0ZWQoc2VtLCAwKTsKK30KKwogLyoKICAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaAppbmRleCA3MDJjZjQzLi4zMmNkYzY5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oCkBAIC0zNyw3ICszNyw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZW1hX2luaXQgKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgaW50IHZhbCkKIHsKLQkqc2VtID0gKHN0cnVjdCBzZW1hcGhvcmUpIF9fU0VNQVBIT1JFX0lOSVRJQUxJWkVSKCgqc2VtKSx2YWwpOworCWF0b21pY19zZXQoJnNlbS0+Y291bnQsIHZhbCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VtLT53YWl0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ25hbC5oCmluZGV4IDcwODQ2MjYuLmY2Y2ZkZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zaWduYWwuaApAQCAtODQsNyArODQsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC0xMDQsNyArMTAzLDYgQEAKIAogI2RlZmluZSBTQV9OT01BU0sgICAgICAgU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UICAgICAgU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVCAgICAweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogI2RlZmluZSBTQV9SRVNUT1JFUiAgICAgMHgwNDAwMDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tczM5MC9zb2NrZXQuaAppbmRleCAxNWE1Mjk4Li4xNzc4YTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc29ja2V0LmgKQEAgLTU2LDUgKzU2LDYgQEAKICNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKIAogI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKaW5kZXggNzFhMDczMi4uOWFiMTg2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCkBAIC0zMDEsMzQgKzMwMSw2IEBACiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSAgICAgIGRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNldF93bWIodmFyLCB2YWx1ZSkgICAgIGRvIHsgdmFyID0gdmFsdWU7IHdtYigpOyB9IHdoaWxlICgwKQogCi0vKiBpbnRlcnJ1cHQgY29udHJvbC4uICovCi0jZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSAoeyBcCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgIF9fZHVtbXk7IFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0gICAgICAgICAgICAgICAgInN0b3NtIDAoJTEpLDB4MDMiIFwKLQkJOiAiPW0iIChfX2R1bW15KSA6ICJhIiAoJl9fZHVtbXkpIDogIm1lbW9yeSIgKTsgXAotICAgICAgICB9KQotCi0jZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkgKHsgXAotICAgICAgICB1bnNpZ25lZCBsb25nIF9fZmxhZ3M7IFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0gICAgICAgICAgICAgICAgInN0bnNtIDAoJTEpLDB4ZmMiIDogIj1tIiAoX19mbGFncykgOiAiYSIgKCZfX2ZsYWdzKSApOyBcCi0gICAgICAgIF9fZmxhZ3M7IFwKLSAgICAgICAgfSkKLQotI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKHgpIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0b3NtIDAoJTEpLDAiIDogIj1tIiAoeCkgOiAiYSIgKCZ4KSwgIm0iICh4KSApCi0KLSNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3NtICAgMCglMCkiIDogOiAiYSIgKCZ4KSwgIm0iICh4KSA6ICJtZW1vcnkiKQotCi0jZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCVwKLSh7CQkJCQlcCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCVwKLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJXAotICAgICAgICAhKChmbGFncyA+PiBfX0ZMQUdfU0hJRlQpICYgMyk7CVwKLX0pCi0KICNpZmRlZiBfX3MzOTB4X18KIAogI2RlZmluZSBfX2N0bF9sb2FkKGFycmF5LCBsb3csIGhpZ2gpICh7IFwKQEAgLTQ0Miw4ICs0MTQsNyBAQAogICAgICAgICB9KQogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCi0vKiBGb3Igc3BpbmxvY2tzIGV0YyAqLwotI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KQkoKHgpID0gbG9jYWxfaXJxX2Rpc2FibGUoKSkKKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCiAvKgogICogVXNlIHRvIHNldCBwc3cgbWFzayBleGNlcHQgZm9yIHRoZSBmaXJzdCBieXRlIHdoaWNoCkBAIC00ODIsNCArNDUzLDMgQEAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1zMzkwL3RocmVhZF9pbmZvLmgKaW5kZXggOGUwYzdlZC4uMGE1MTg5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGhyZWFkX2luZm8uaApAQCAtNjMsNiArNjMsNyBAQAogCS5leGVjX2RvbWFpbgk9ICZkZWZhdWx0X2V4ZWNfZG9tYWluLAlcCiAJLmZsYWdzCQk9IDAsCQkJXAogCS5jcHUJCT0gMCwJCQlcCisJLnByZWVtcHRfY291bnQJPSAxLAkJCVwKIAkucmVzdGFydF9ibG9jawk9IHsJCQlcCiAJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAogCX0sCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAppbmRleCBlMjE0NDNkLi5hYTdhMjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKQEAgLTM5NCwxMSArMzk0LDkgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjI6IHNlZSA8YXNtLXMzOTAvZXJybm8uaD4gKi8KLQogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkgICAgIFwKIGRvIHsJCQkJCQkJICAgICBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtNDA5NSkpIHtcCiAJCWVycm5vID0gLShyZXMpOwkJCQkgICAgIFwKIAkJcmVzID0gLTE7CQkJCSAgICAgXAogCX0JCQkJCQkgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKaW5kZXggMzA3ZDljZS4uZGMxYWQ0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZmxvcHB5LmgKQEAgLTE0NiwxMiArMTQ2LDExIEBACiBzdGF0aWMgaW50IGZkX3JlcXVlc3RfaXJxKHZvaWQpCiB7CiAJaWYoY2FuX3VzZV92aXJ0dWFsX2RtYSkKLQkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9oYXJkaW50LFNBX0lOVEVSUlVQVCwKLQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwKKwkJCQkgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCk7CiAJZWxzZQotCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwgU0FfSU5URVJSVVBULAotCQkJCSAgICJmbG9wcHkiLCBOVUxMKTsKLQorCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2ludGVycnVwdCwKKwkJCQkgICBJUlFGX0RJU0FCTEVELCAiZmxvcHB5IiwgTlVMTCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRtYV9tZW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1zaC9od19pcnEuaAppbmRleCAxZDkzNGZiLi5mZWQyNjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9od19pcnEuaApAQCAtMSw5ICsxLDQgQEAKICNpZm5kZWYgX19BU01fU0hfSFdfSVJRX0gKICNkZWZpbmUgX19BU01fU0hfSFdfSVJRX0gKIAotc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci0KICNlbmRpZiAvKiBfX0FTTV9TSF9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9rZXlib2FyZC5oCmluZGV4IDVmMGI5MDguLjcxZWY0Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEva2V5Ym9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2tleWJvYXJkLmgKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUgQVVYX0lSUSAxMgogCiAjZGVmaW5lIGF1eF9yZXF1ZXN0X2lycShoYW5kLCBkZXZfaWQpCQkJCQlcCi0JcmVxdWVzdF9pcnEoQVVYX0lSUSwgaGFuZCwgU0FfU0hJUlEsICJQUzIgTW91c2UiLCBkZXZfaWQpCisJcmVxdWVzdF9pcnEoQVVYX0lSUSwgaGFuZCwgSVJRRl9TSEFSRUQsICJQUzIgTW91c2UiLCBkZXZfaWQpCiAKICNkZWZpbmUgYXV4X2ZyZWVfaXJxKGRldl9pZCkgZnJlZV9pcnEoQVVYX0lSUSwgZGV2X2lkKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9yd3NlbS5oIGIvaW5jbHVkZS9hc20tc2gvcndzZW0uaAppbmRleCAwMjYyZDNkLi45ZDJhZWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9yd3NlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3J3c2VtLmgKQEAgLTI1LDI0ICsyNSwxMSBAQAogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZiBSV1NFTV9ERUJVRwotCWludAkJCWRlYnVnOwotI2VuZGlmCiB9OwogCi0vKgotICogaW5pdGlhbGlzYXRpb24KLSAqLwotI2lmIFJXU0VNX0RFQlVHCi0jZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVCAgICAgICwgMAotI2Vsc2UKLSNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUCS8qICovCi0jZW5kaWYKLQogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKIAl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKLQkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKLQkgIF9fUldTRU1fREVCVUdfSU5JVCB9CisJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKQkJXAogCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKQEAgLTU3LDkgKzQ0LDYgQEAKIAlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7CiAJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOwotI2lmIFJXU0VNX0RFQlVHCi0Jc2VtLT5kZWJ1ZyA9IDA7Ci0jZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc2gvc2lnbmFsLmgKaW5kZXggZDZlOGViMC4uNWM1YzFlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc2lnbmFsLmgKQEAgLTc1LDcgKzc1LDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtOTUsNyArOTQsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tc2gvc29ja2V0LmgKaW5kZXggNTUzOTA0Zi4uY2E3MDM2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc29ja2V0LmgKQEAgLTQ4LDUgKzQ4LDYgQEAKICNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKIAogI2RlZmluZSBTT19QRUVSU0VDCQkzMQorI2RlZmluZSBTT19QQVNTU0VDCQkzNAogCiAjZW5kaWYgLyogX19BU01fU0hfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKaW5kZXggYjc1MmU1Yy4uY2UyZTYwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKQEAgLTEyLDcgKzEyLDcgQEAKICAqLwogCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KSBkbyB7CQkJCVwKLSB0YXNrX3QgKl9fbGFzdDsJCQkJCQkJXAorIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19sYXN0OwkJCQkJCVwKICByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzMSBfX2FzbV9fICgicjEiKSA9ICZwcmV2LT50aHJlYWQuc3A7CVwKICByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzMiBfX2FzbV9fICgicjIiKSA9ICZwcmV2LT50aHJlYWQucGM7CVwKICByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzNCBfX2FzbV9fICgicjQiKSA9ICh1bnNpZ25lZCBsb25nICopcHJldjsJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXNoNjQvaHdfaXJxLmgKaW5kZXggYWU3MThkMWYuLmViYjM5MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9od19pcnEuaApAQCAtMTEsNiArMTEsNSBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKICAqCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKSB7IC8qIE5vdGhpbmcgdG8gZG8gKi8gfQogCiAjZW5kaWYgLyogX19BU01fU0g2NF9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tc2g2NC9rZXlib2FyZC5oCmluZGV4IDczM2UyYmIuLjFmYWI5NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQva2V5Ym9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2tleWJvYXJkLmgKQEAgLTY1LDcgKzY1LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIGF1eF9yZXF1ZXN0X2lycShoYW5kLCBkZXZfaWQpCQkJCQlcCi0JcmVxdWVzdF9pcnEoQVVYX0lSUSwgaGFuZCwgU0FfU0hJUlEsICJQUzIgTW91c2UiLCBkZXZfaWQpCisJcmVxdWVzdF9pcnEoQVVYX0lSUSwgaGFuZCwgSVJRRl9TSEFSRUQsICJQUzIgTW91c2UiLCBkZXZfaWQpCiAKICNkZWZpbmUgYXV4X2ZyZWVfaXJxKGRldl9pZCkgZnJlZV9pcnEoQVVYX0lSUSwgZGV2X2lkKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc2g2NC9zaWduYWwuaAppbmRleCAyNDAwZGM2Li5hNWEyODIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2lnbmFsLmgKQEAgLTc0LDcgKzc0LDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtOTQsNyArOTMsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKaW5kZXggN2E5NDFiOC4uYzUzYjMzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZmxvcHB5LmgKQEAgLTI3MSw3ICsyNzEsOCBAQAogCiAJaWYoIW9uY2UpIHsKIAkJb25jZSA9IDE7Ci0JCWVycm9yID0gcmVxdWVzdF9mYXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwgU0FfSU5URVJSVVBULCAiZmxvcHB5Iik7CisJCWVycm9yID0gcmVxdWVzdF9mYXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaGFyZGludCwKKwkJCQkJIElSUUZfRElTQUJMRUQsICJmbG9wcHkiKTsKIAkJcmV0dXJuICgoZXJyb3IgPT0gMCkgPyAwIDogLTEpOwogCX0gZWxzZSByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL29mX2RldmljZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvb2ZfZGV2aWNlLmgKaW5kZXggNDgxNmQxMC4uODBlYTMxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvb2ZfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvb2ZfZGV2aWNlLmgKQEAgLTQsMTAgKzQsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZWJ1c19idXNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgc2J1c19idXNfdHlwZTsKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgb2ZfYnVzX3R5cGU7CiAKIC8qCiAgKiBUaGUgb2ZfZGV2aWNlIGlzIGEga2luZCBvZiAiYmFzZSBjbGFzcyIgdGhhdCBpcyBhIHN1cGVyc2V0IG9mCkBAIC0xNiwxMSArMTgsMjUgQEAKICAqLwogc3RydWN0IG9mX2RldmljZQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbm9kZTsJCS8qIE9GIGRldmljZSBub2RlICovCi0Jc3RydWN0IGRldmljZQkJZGV2OwkJLyogR2VuZXJpYyBkZXZpY2UgaW50ZXJmYWNlICovCisJc3RydWN0IGRldmljZV9ub2RlCQkqbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlCQkJZGV2OworCXN0cnVjdCByZXNvdXJjZQkJCXJlc291cmNlW1BST01SRUdfTUFYXTsKKwl1bnNpZ25lZCBpbnQJCQlpcnFzW1BST01JTlRSX01BWF07CisJaW50CQkJCW51bV9pcnFzOworCisJdm9pZAkJCQkqc3lzZGF0YTsKKworCWludAkJCQlzbG90OworCWludAkJCQlwb3J0aWQ7CisJaW50CQkJCWNsb2NrX2ZyZXE7CiB9OwogI2RlZmluZQl0b19vZl9kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBvZl9kZXZpY2UsIGRldikKIAorZXh0ZXJuIHZvaWQgX19pb21lbSAqb2ZfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBvZl9pb3VubWFwKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworZXh0ZXJuIHN0cnVjdCBvZl9kZXZpY2UgKm9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOworCiBleHRlcm4gY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2hfZGV2aWNlKAogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoZXMsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3Byb20uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3Byb20uaAppbmRleCBmOWNmNDRjLi44NmMxM2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcHJvbS5oCkBAIC0yNSwxMSArMjUsNiBAQAogdHlwZWRlZiB1MzIgcGhhbmRsZTsKIHR5cGVkZWYgdTMyIGloYW5kbGU7CiAKLXN0cnVjdCBpbnRlcnJ1cHRfaW5mbyB7Ci0JaW50CWxpbmU7Ci0JaW50CXNlbnNlOwkJLyogK3ZlLy12ZSBsb2dpYywgZWRnZSBvciBsZXZlbCwgZXRjLiAqLwotfTsKLQogc3RydWN0IHByb3BlcnR5IHsKIAljaGFyCSpuYW1lOwogCWludAlsZW5ndGg7CkBAIC00Myw5ICszOCw2IEBACiAJY2hhcgkqbmFtZTsKIAljaGFyCSp0eXBlOwogCXBoYW5kbGUJbm9kZTsKLQlwaGFuZGxlIGxpbnV4X3BoYW5kbGU7Ci0JaW50CW5faW50cnM7Ci0Jc3RydWN0CWludGVycnVwdF9pbmZvICppbnRyczsKIAljaGFyCSpwYXRoX2NvbXBvbmVudF9uYW1lOwogCWNoYXIJKmZ1bGxfbmFtZTsKIApAQCAtNjksNiArNjEsOCBAQAogI2RlZmluZSBPRl9JU19EWU5BTUlDKHgpIHRlc3RfYml0KE9GX0RZTkFNSUMsICZ4LT5fZmxhZ3MpCiAjZGVmaW5lIE9GX01BUktfRFlOQU1JQyh4KSBzZXRfYml0KE9GX0RZTkFNSUMsICZ4LT5fZmxhZ3MpCiAKKyNkZWZpbmUgT0ZfQkFEX0FERFIJKCh1NjQpLTEpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbm9kZV9wcm9jX2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7CiAJZG4tPnBkZSA9IGRlOwpAQCAtMTAxLDYgKzk1LDggQEAKIGV4dGVybiBpbnQgb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJIGludCBkZWYpOworZXh0ZXJuIGludCBvZl9uX2FkZHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpucCk7CitleHRlcm4gaW50IG9mX25fc2l6ZV9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIAogZXh0ZXJuIHZvaWQgcHJvbV9idWlsZF9kZXZpY2V0cmVlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oCmluZGV4IGFhOTk2MGEuLjBhZTUwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NpZ25hbC5oCkBAIC0xMzIsMTYgKzEzMiwxMyBAQAogICogdXNhZ2Ugb2Ygc2lnbmFsIHN0YWNrcyBieSB1c2luZyB0aGUgKG5vdyBvYnNvbGV0ZSkgc2FfcmVzdG9yZXIgZmllbGQgaW4KICAqIHRoZSBzaWdhY3Rpb24gc3RydWN0dXJlIGFzIGEgc3RhY2sgcG9pbnRlci4gVGhpcyBpcyBub3cgcG9zc2libGUgZHVlIHRvCiAgKiB0aGUgY2hhbmdlcyBpbiBzaWduYWwgaGFuZGxpbmcuIExCVCAwMTA0OTMuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQogICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCi0gKiBTQV9TSElSUSBmbGFnIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgogICovCiAjZGVmaW5lIFNBX05PQ0xEU1RPUAlfU1ZfSUdOQ0hJTEQKICNkZWZpbmUgU0FfU1RBQ0sJX1NWX1NTVEFDSwogI2RlZmluZSBTQV9PTlNUQUNLCV9TVl9TU1RBQ0sKICNkZWZpbmUgU0FfUkVTVEFSVAlfU1ZfSU5UUgogI2RlZmluZSBTQV9PTkVTSE9UCV9TVl9SRVNFVAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgxMHUKICNkZWZpbmUgU0FfTk9NQVNLCTB4MjB1CiAjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDEwMHUKICNkZWZpbmUgU0FfU0lHSU5GTwkweDIwMHUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NvY2tldC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc29ja2V0LmgKaW5kZXggNGUwY2UzYS4uZjZjNGU1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc29ja2V0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCiAKICNkZWZpbmUgU09fUEVFUlNFQwkJMHgwMDFlCisjZGVmaW5lIFNPX1BBU1NTRUMJCTB4MDAxZgogCiAvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLwogI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMHg1MDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mbG9wcHkuaAppbmRleCBiNTkxZDBlLi5hYmYxNTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmxvcHB5LmgKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQlvbmNlID0gMTsKIAogCQllcnJvciA9IHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIHNwYXJjX2Zsb3BweV9pcnEsIAotCQkJCSAgICBTQV9JTlRFUlJVUFQsICJmbG9wcHkiLCBOVUxMKTsKKwkJCQkgICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOwogCiAJCXJldHVybiAoKGVycm9yID09IDApID8gMCA6IC0xKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX2RldmljZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vZl9kZXZpY2UuaAppbmRleCAwMjQwODhlLi5hNjJjN2I5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX2RldmljZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb2ZfZGV2aWNlLmgKQEAgLTQsMTEgKzQsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgaXNhX2J1c190eXBlOwogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBlYnVzX2J1c190eXBlOwogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzYnVzX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBvZl9idXNfdHlwZTsKIAogLyoKICAqIFRoZSBvZl9kZXZpY2UgaXMgYSBraW5kIG9mICJiYXNlIGNsYXNzIiB0aGF0IGlzIGEgc3VwZXJzZXQgb2YKQEAgLTE3LDExICsxOSwyNSBAQAogICovCiBzdHJ1Y3Qgb2ZfZGV2aWNlCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlCSpub2RlOwkJLyogT0YgZGV2aWNlIG5vZGUgKi8KLQlzdHJ1Y3QgZGV2aWNlCQlkZXY7CQkvKiBHZW5lcmljIGRldmljZSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpub2RlOworCXN0cnVjdCBkZXZpY2UJCQlkZXY7CisJc3RydWN0IHJlc291cmNlCQkJcmVzb3VyY2VbUFJPTVJFR19NQVhdOworCXVuc2lnbmVkIGludAkJCWlycXNbUFJPTUlOVFJfTUFYXTsKKwlpbnQJCQkJbnVtX2lycXM7CisKKwl2b2lkCQkJCSpzeXNkYXRhOworCisJaW50CQkJCXNsb3Q7CisJaW50CQkJCXBvcnRpZDsKKwlpbnQJCQkJY2xvY2tfZnJlcTsKIH07CiAjZGVmaW5lCXRvX29mX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IG9mX2RldmljZSwgZGV2KQogCitleHRlcm4gdm9pZCBfX2lvbWVtICpvZl9pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIG9mX2lvdW5tYXAodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CisKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9tYXRjaF9kZXZpY2UoCiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywgY29uc3Qgc3RydWN0IG9mX2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYm0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmgKaW5kZXggY2ViZTgwYi4uZGNmYTc2MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYm0uaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAKIC8qIFRoZSBhYnN0cmFjdGlvbiB1c2VkIGhlcmUgaXMgdGhhdCB0aGVyZSBhcmUgUENJIGNvbnRyb2xsZXJzLApAQCAtMjA5LDcgKzIxMCw2IEBACiAKIAkvKiBPcGVyYXRpb25zIHdoaWNoIGFyZSBjb250cm9sbGVyIHNwZWNpZmljLiAqLwogCXZvaWQgKCpzY2FuX2J1cykoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKik7Ci0JdW5zaWduZWQgaW50ICgqaXJxX2J1aWxkKShzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfZGV2ICosIHVuc2lnbmVkIGludCk7CiAJdm9pZCAoKmJhc2VfYWRkcmVzc191cGRhdGUpKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CiAJdm9pZCAoKnJlc291cmNlX2FkanVzdCkoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlICosIHN0cnVjdCByZXNvdXJjZSAqKTsKIApAQCAtMjE3LDggKzIxNyw2IEBACiAJc3RydWN0IHBjaV9vcHMJCQkqcGNpX29wczsKIAl1bnNpZ25lZCBpbnQJCQlwY2lfZmlyc3RfYnVzbm87CiAJdW5zaWduZWQgaW50CQkJcGNpX2xhc3RfYnVzbm87Ci0KLQl2b2lkCQkJCSpzdGFyZmlyZV9jb29raWU7CiB9OwogCiAvKiBQQ0kgZGV2aWNlcyB3aGljaCBhcmUgbm90IGJyaWRnZXMgaGF2ZSB0aGlzIHBsYWNlZCBpbiB0aGVpciBwY2lfZGV2CkBAIC0yMjgsNiArMjI2LDcgQEAKIHN0cnVjdCBwY2lkZXZfY29va2llIHsKIAlzdHJ1Y3QgcGNpX3BibV9pbmZvCQkqcGJtOwogCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlCQkqb3A7CiAJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycwlwcm9tX3JlZ3NbUFJPTVJFR19NQVhdOwogCWludCBudW1fcHJvbV9yZWdzOwogCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgcHJvbV9hc3NpZ25tZW50c1tQUk9NUkVHX01BWF07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaAppbmRleCBhNmVjZTA2Li5jZWQ4Y2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKQEAgLTExLDYgKzExLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9zaGlmdDsKICNkZWZpbmUgX19wZXJfY3B1X29mZnNldChfX2NwdSkgXAogCShfX3Blcl9jcHVfYmFzZSArICgodW5zaWduZWQgbG9uZykoX19jcHUpIDw8IF9fcGVyX2NwdV9zaGlmdCkpCisjZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0KHgpKQogCiAvKiBTZXBhcmF0ZSBvdXQgdGhlIHR5cGUsIHNvIChpbnRbM10sIGZvbykgd29ya3MuICovCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVKHR5cGUsIG5hbWUpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9tLmgKaW5kZXggMjY1NjE0ZC4uOTk2NzFlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9tLmgKQEAgLTI1LDExICsyNSw2IEBACiB0eXBlZGVmIHUzMiBwaGFuZGxlOwogdHlwZWRlZiB1MzIgaWhhbmRsZTsKIAotc3RydWN0IGludGVycnVwdF9pbmZvIHsKLQlpbnQJbGluZTsKLQlpbnQJc2Vuc2U7CQkvKiArdmUvLXZlIGxvZ2ljLCBlZGdlIG9yIGxldmVsLCBldGMuICovCi19OwotCiBzdHJ1Y3QgcHJvcGVydHkgewogCWNoYXIJKm5hbWU7CiAJaW50CWxlbmd0aDsKQEAgLTM5LDEzICszNCwxMSBAQAogCXVuc2lnbmVkIGludCB1bmlxdWVfaWQ7CiB9OwogCitzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXI7CiBzdHJ1Y3QgZGV2aWNlX25vZGUgewogCWNoYXIJKm5hbWU7CiAJY2hhcgkqdHlwZTsKIAlwaGFuZGxlCW5vZGU7Ci0JcGhhbmRsZSBsaW51eF9waGFuZGxlOwotCWludAluX2ludHJzOwotCXN0cnVjdAlpbnRlcnJ1cHRfaW5mbyAqaW50cnM7CiAJY2hhcgkqcGF0aF9jb21wb25lbnRfbmFtZTsKIAljaGFyCSpmdWxsX25hbWU7CiAKQEAgLTYxLDYgKzU0LDEzIEBACiAJdW5zaWduZWQgbG9uZyBfZmxhZ3M7CiAJdm9pZAkqZGF0YTsKIAl1bnNpZ25lZCBpbnQgdW5pcXVlX2lkOworCisJc3RydWN0IG9mX2lycV9jb250cm9sbGVyICppcnFfdHJhbnM7Cit9OworCitzdHJ1Y3Qgb2ZfaXJxX2NvbnRyb2xsZXIgeworCXVuc2lnbmVkIGludAkoKmlycV9idWlsZCkoc3RydWN0IGRldmljZV9ub2RlICosIHVuc2lnbmVkIGludCwgdm9pZCAqKTsKKwl2b2lkCQkqZGF0YTsKIH07CiAKIC8qIGZsYWcgZGVzY3JpcHRpb25zICovCkBAIC02OSw2ICs2OSw4IEBACiAjZGVmaW5lIE9GX0lTX0RZTkFNSUMoeCkgdGVzdF9iaXQoT0ZfRFlOQU1JQywgJngtPl9mbGFncykKICNkZWZpbmUgT0ZfTUFSS19EWU5BTUlDKHgpIHNldF9iaXQoT0ZfRFlOQU1JQywgJngtPl9mbGFncykKIAorI2RlZmluZSBPRl9CQURfQUREUgkoKHU2NCktMSkKKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9ub2RlX3Byb2NfZW50cnkoc3RydWN0IGRldmljZV9ub2RlICpkbiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKIAlkbi0+cGRlID0gZGU7CkBAIC0xMDEsNiArMTAzLDggQEAKIGV4dGVybiBpbnQgb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJIGludCBkZWYpOworZXh0ZXJuIGludCBvZl9uX2FkZHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlICpucCk7CitleHRlcm4gaW50IG9mX25fc2l6ZV9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIAogZXh0ZXJuIHZvaWQgcHJvbV9idWlsZF9kZXZpY2V0cmVlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NidXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2J1cy5oCmluZGV4IDU2ZWU5ODUuLjdlZmQ0OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2J1cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2J1cy5oCkBAIC04MCw3ICs4MCw2IEBACiAJaW50IG51bV9zYnVzX3JhbmdlczsKIAogCWludCBwb3J0aWQ7Ci0Jdm9pZCAqc3RhcmZpcmVfY29va2llOwogfTsKICNkZWZpbmUgdG9fc2J1cyhkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHNidXNfYnVzLCBvZmRldi5kZXYpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCmluZGV4IGZkYzQyYTEuLjk5Njg4NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaApAQCAtMTMzLDE2ICsxMzMsMTMgQEAKICAqIHVzYWdlIG9mIHNpZ25hbCBzdGFja3MgYnkgdXNpbmcgdGhlIChub3cgb2Jzb2xldGUpIHNhX3Jlc3RvcmVyIGZpZWxkIGluCiAgKiB0aGUgc2lnYWN0aW9uIHN0cnVjdHVyZSBhcyBhIHN0YWNrIHBvaW50ZXIuIFRoaXMgaXMgbm93IHBvc3NpYmxlIGR1ZSB0bwogICogdGhlIGNoYW5nZXMgaW4gc2lnbmFsIGhhbmRsaW5nLiBMQlQgMDEwNDkzLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQotICogU0FfU0hJUlEgZmxhZyBpcyBmb3Igc2hhcmVkIGludGVycnVwdCBzdXBwb3J0IG9uIFBDSSBhbmQgRUlTQS4KICAqLwogI2RlZmluZSBTQV9OT0NMRFNUT1AJX1NWX0lHTkNISUxECiAjZGVmaW5lIFNBX1NUQUNLCV9TVl9TU1RBQ0sKICNkZWZpbmUgU0FfT05TVEFDSwlfU1ZfU1NUQUNLCiAjZGVmaW5lIFNBX1JFU1RBUlQJX1NWX0lOVFIKICNkZWZpbmUgU0FfT05FU0hPVAlfU1ZfUkVTRVQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MTB1CiAjZGVmaW5lIFNBX05PTUFTSwkweDIwdQogI2RlZmluZSBTQV9OT0NMRFdBSVQgICAgMHgxMDB1CiAjZGVmaW5lIFNBX1NJR0lORk8gICAgICAweDIwMHUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NvY2tldC5oCmluZGV4IDU5OTg3ZGEuLjc1NGQ0NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zb2NrZXQuaApAQCAtNDgsNiArNDgsNyBAQAogI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKIAogI2RlZmluZSBTT19QRUVSU0VDCQkweDAwMWUKKyNkZWZpbmUgU09fUEFTU1NFQwkJMHgwMDFmCiAKIC8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCiAjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkweDUwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhcmZpcmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3RhcmZpcmUuaAppbmRleCBiNjA2Y2IyLi40OGI1MGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N0YXJmaXJlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zdGFyZmlyZS5oCkBAIC0xNCw3ICsxNCw3IEBACiBleHRlcm4gdm9pZCBjaGVja19pZl9zdGFyZmlyZSh2b2lkKTsKIGV4dGVybiB2b2lkIHN0YXJmaXJlX2NwdV9zZXR1cCh2b2lkKTsKIGV4dGVybiBpbnQgc3RhcmZpcmVfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwotZXh0ZXJuIHZvaWQgKnN0YXJmaXJlX2hvb2t1cChpbnQpOworZXh0ZXJuIHZvaWQgc3RhcmZpcmVfaG9va3VwKGludCk7CiBleHRlcm4gdW5zaWduZWQgaW50IHN0YXJmaXJlX3RyYW5zbGF0ZSh1bnNpZ25lZCBsb25nIGltYXAsIHVuc2lnbmVkIGludCB1cGFpZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC92ZGV2LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3ZkZXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2MzdjNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3ZkZXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIHZkZXYuaDogU1VONFYgdmlydHVhbCBkZXZpY2UgaW50ZXJmYWNlcyBhbmQgZGVmaW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgotICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfVkRFVl9ICi0jZGVmaW5lIF9TUEFSQzY0X1ZERVZfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotCi1leHRlcm4gdTMyIHN1bjR2X3ZkZXZfZGV2aGFuZGxlOwotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3VuNHZfdmRldl9yb290OwotCi1leHRlcm4gdW5zaWduZWQgaW50IHN1bjR2X3ZkZXZfZGV2aWNlX2ludGVycnVwdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9ub2RlKTsKLQotI2VuZGlmIC8qICEoX1NQQVJDNjRfVkRFVl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vaHdfaXJxLmggYi9pbmNsdWRlL2FzbS11bS9od19pcnEuaAppbmRleCA0ZWUzOGMwLi4xY2Y4NGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS11bS9od19pcnEuaApAQCAtNCw3ICs0LDQgQEAKICNpbmNsdWRlICJhc20vaXJxLmgiCiAjaW5jbHVkZSAiYXNtL2FyY2hwYXJhbS5oIgogCi1zdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKQote30KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pby5oIGIvaW5jbHVkZS9hc20tdW0vaW8uaAppbmRleCAxOTM0ZDkzLi40NGU4YjhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2lvLmgKQEAgLTQ1LDggKzQ1LDEzIEBACiB7CiAJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKSBhZGRyID0gYjsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodW5zaWduZWQgaW50IGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZvcmNlICopIGFkZHIgPSBiOworfQogI2RlZmluZSBfX3Jhd193cml0ZWIgd3JpdGViCiAjZGVmaW5lIF9fcmF3X3dyaXRldyB3cml0ZXcKICNkZWZpbmUgX19yYXdfd3JpdGVsIHdyaXRlbAorI2RlZmluZSBfX3Jhd193cml0ZXEgd3JpdGVxCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0va21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tdW0va21hcF90eXBlcy5oCmluZGV4IDBiMjJhZDcuLjZjMDNhY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9rbWFwX3R5cGVzLmgKQEAgLTYsNiArNiwyNCBAQAogI2lmbmRlZiBfX1VNX0tNQVBfVFlQRVNfSAogI2RlZmluZSBfX1VNX0tNQVBfVFlQRVNfSAogCi0jaW5jbHVkZSAiYXNtL2FyY2gva21hcF90eXBlcy5oIgorLyogTm8gbW9yZSAjaW5jbHVkZSAiYXNtL2FyY2gva21hcF90eXBlcy5oIiAhICovCisKK2VudW0ga21fdHlwZSB7CisJS01fQk9VTkNFX1JFQUQsCisJS01fU0tCX1NVTlJQQ19EQVRBLAorCUtNX1NLQl9EQVRBX1NPRlRJUlEsCisJS01fVVNFUjAsCisJS01fVVNFUjEsCisJS01fVU1MX1VTRVJDT1BZLAkvKiBVTUwgc3BlY2lmaWMsIGZvciBjb3B5XypfdXNlciAtIHVzZWQgaW4gZG9fb3Bfb25lX3BhZ2UgKi8KKwlLTV9CSU9fU1JDX0lSUSwKKwlLTV9CSU9fRFNUX0lSUSwKKwlLTV9QVEUwLAorCUtNX1BURTEsCisJS01fSVJRMCwKKwlLTV9JUlExLAorCUtNX1NPRlRJUlEwLAorCUtNX1NPRlRJUlExLAorCUtNX1RZUEVfTlIKK307CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvaHdfaXJxLmgKaW5kZXggYThhYWI0My4uMDQzZTk0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2h3X2lycS5oCkBAIC0xLDggKzEsNCBAQAogI2lmbmRlZiBfX1Y4NTBfSFdfSVJRX0hfXwogI2RlZmluZSBfX1Y4NTBfSFdfSVJRX0hfXwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycSAoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkKLXsKLX0KLQogI2VuZGlmIC8qIF9fVjg1MF9IV19JUlFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tdjg1MC9zaWduYWwuaAppbmRleCBjYjUyY2FhLi5hMzhkZjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2lnbmFsLmgKQEAgLTc3LDcgKzc3LDYgQEAKICAqIFNBX0ZMQUdTIHZhbHVlczoKICAqCiAgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCiAgKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKICAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgogICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgpAQCAtOTcsNyArOTYsNiBAQAogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAogI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc29ja2V0LmggYi9pbmNsdWRlL2FzbS12ODUwL3NvY2tldC5oCmluZGV4IDAyNDBkMzYuLjBkZmU1NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zb2NrZXQuaApAQCAtNDgsNSArNDgsNiBAQAogI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAogCiAjZGVmaW5lIFNPX1BFRVJTRUMJCTMxCisjZGVmaW5lIFNPX1BBU1NTRUMJCTM0CiAKICNlbmRpZiAvKiBfX1Y4NTBfU09DS0VUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FsdGVybmF0aXZlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYWx0ZXJuYXRpdmUuaAppbmRleCAzODdjOGY2Li5hYTY3YmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYWx0ZXJuYXRpdmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYWx0ZXJuYXRpdmUuaApAQCAtMTcsMTEgKzE3LDIwIEBACiBleHRlcm4gdm9pZCBhcHBseV9hbHRlcm5hdGl2ZXMoc3RydWN0IGFsdF9pbnN0ciAqc3RhcnQsIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCk7CiAKIHN0cnVjdCBtb2R1bGU7CisKKyNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpuYW1lLAogCQkJCQl2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAogCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKTsKIGV4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpuYW1lLAorCQkJCQl2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAorCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApIHt9CisjZW5kaWYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9mbG9wcHkuaAppbmRleCAwMDYyOTFlLi4zMmZmNWQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9mbG9wcHkuaApAQCAtMTQ0LDExICsxNDQsMTEgQEAKIHN0YXRpYyBpbnQgZmRfcmVxdWVzdF9pcnEodm9pZCkKIHsKIAlpZihjYW5fdXNlX3ZpcnR1YWxfZG1hKQotCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2hhcmRpbnQsU0FfSU5URVJSVVBULAotCQkJCQkJICAgImZsb3BweSIsIE5VTEwpOworCQlyZXR1cm4gcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwgZmxvcHB5X2hhcmRpbnQsCisJCQkJICAgSVJRRl9ESVNBQkxFRCwgImZsb3BweSIsIE5VTEwpOwogCWVsc2UKLQkJcmV0dXJuIHJlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKLQkJCQkgICAiZmxvcHB5IiwgTlVMTCk7CisJCXJldHVybiByZXF1ZXN0X2lycShGTE9QUFlfSVJRLCBmbG9wcHlfaW50ZXJydXB0LAorCQkJCSAgIElSUUZfRElTQUJMRUQsICJmbG9wcHkiLCBOVUxMKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1hX21lbV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKaW5kZXggOTMxODc3NC4uNDhhNGE1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaApAQCAtMTI3LDE1ICsxMjcsNiBAQAogCSJwdXNoICR+KCIgI25yICIpIDsgIiBcCiAJImptcCBjb21tb25faW50ZXJydXB0Iik7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLXN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHsKLQlpZiAoSU9fQVBJQ19JUlEoaSkpCi0JCXNlbmRfSVBJX3NlbGYoSU9fQVBJQ19WRUNUT1IoaSkpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9Ci0jZW5kaWYKLQogI2RlZmluZSBwbGF0Zm9ybV9sZWdhY3lfaXJxKGlycSkJKChpcnEpIDwgMTYpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaXJxZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U2OTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lycWZsYWdzLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS14ODZfNjQvaXJxZmxhZ3MuaAorICoKKyAqIElSUSBmbGFncyBoYW5kbGluZworICoKKyAqIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gbG93bGV2ZWwgYXNtIGhlYWRlcnMgdG9vLCB0byBwcm92aWRlCisgKiB3cmFwcGVkIHZlcnNpb25zIG9mIHRoZSBsb2NhbF9pcnFfKigpIEFQSXMsIGJhc2VkIG9uIHRoZQorICogcmF3X2xvY2FsX2lycV8qKCkgZnVuY3Rpb25zIGZyb20gdGhlIGxvd2xldmVsIGhlYWRlcnMuCisgKi8KKyNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICisjZGVmaW5lIF9BU01fSVJRRkxBR1NfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIEludGVycnVwdCBjb250cm9sOgorICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiIyBfX3Jhd19zYXZlX2ZsYWdzXG5cdCIKKwkJInB1c2hmcSA7IHBvcHEgJXEwIgorCQk6ICI9ZyIgKGZsYWdzKQorCQk6IC8qIG5vIGlucHV0ICovCisJCTogIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIGZsYWdzOworfQorCisjZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBcCisJCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkicHVzaHEgJTAgOyBwb3BmcSIKKwkJOiAvKiBubyBvdXRwdXQgKi8KKwkJOiJnIiAoZmxhZ3MpCisJCToibWVtb3J5IiwgImNjIgorCSk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2X1ZTTVAKKworLyoKKyAqIEludGVycnVwdCBjb250cm9sIGZvciB0aGUgVlNNUCBhcmNoaXRlY3R1cmU6CisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7CisKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoKGZsYWdzICYgfigxIDw8IDkpKSB8ICgxIDw8IDE4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7CisKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoKGZsYWdzIHwgKDEgPDwgOSkpICYgfigxIDw8IDE4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICEoZmxhZ3MgJiAoMTw8OSkpIHx8IChmbGFncyAmICgxIDw8IDE4KSk7Cit9CisKKyNlbHNlIC8qIENPTkZJR19YODZfVlNNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9kaXNhYmxlKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSIgOiA6IDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIiA6IDogOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICEoZmxhZ3MgJiAoMSA8PCA5KSk7Cit9CisKKyNlbmRpZgorCisvKgorICogRm9yIHNwaW5sb2NrcywgZXRjLjoKKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOworCisJcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBcCisJCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX2lycV9zYXZlKCk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsKKworCXJldHVybiByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyk7Cit9CisKKy8qCisgKiBVc2VkIGluIHRoZSBpZGxlIGxvb3A7IHN0aSB0YWtlcyBvbmUgaW5zdHJ1Y3Rpb24gY3ljbGUKKyAqIHRvIGNvbXBsZXRlOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X3NhZmVfaGFsdCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGk7IGhsdCIgOiA6IDogIm1lbW9yeSIpOworfQorCisvKgorICogVXNlZCB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHkgZW5hYmxlZCBvciB0bworICogc2h1dGRvd24gdGhlIHByb2Nlc3NvcjoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGhhbHQodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiaGx0IjogOiA6Im1lbW9yeSIpOworfQorCisjZWxzZSAvKiBfX0FTU0VNQkxZX186ICovCisjIGlmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworIyAgZGVmaW5lIFRSQUNFX0lSUVNfT04JCWNhbGwgdHJhY2VfaGFyZGlycXNfb25fdGh1bmsKKyMgIGRlZmluZSBUUkFDRV9JUlFTX09GRgljYWxsIHRyYWNlX2hhcmRpcnFzX29mZl90aHVuaworIyBlbHNlCisjICBkZWZpbmUgVFJBQ0VfSVJRU19PTgorIyAgZGVmaW5lIFRSQUNFX0lSUVNfT0ZGCisjIGVuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmggYi9pbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmgKaW5kZXggY2Q1MmM3Zi4uMmIwYzA4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9rZGVidWcuaApAQCAtNDksNyArNDksNyBAQAogCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmZGllX2NoYWluLCB2YWwsICZhcmdzKTsKIH0gCiAKLWV4dGVybiBpbnQgcHJpbnRrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiBleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLHN0cnVjdCBwdF9yZWdzICosbG9uZyk7CiBleHRlcm4gdm9pZCBfX2RpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKIGV4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaAppbmRleCA1NDllYjkyLi4wOGRkOWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oCkBAIC0xNCw2ICsxNCw4IEBACiAjZGVmaW5lIF9fcGVyX2NwdV9vZmZzZXQoY3B1KSAoY3B1X3BkYShjcHUpLT5kYXRhX29mZnNldCkKICNkZWZpbmUgX19teV9jcHVfb2Zmc2V0KCkgcmVhZF9wZGEoZGF0YV9vZmZzZXQpCiAKKyNkZWZpbmUgcGVyX2NwdV9vZmZzZXQoeCkgKF9fcGVyX2NwdV9vZmZzZXQoeCkpCisKIC8qIFNlcGFyYXRlIG91dCB0aGUgdHlwZSwgc28gKGludFszXSwgZm9vKSB3b3Jrcy4gKi8KICNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkgXAogICAgIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wZXJjcHUiKSkpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmgKaW5kZXggZjhkNTU3OS4uY2VmN2E3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWduYWwuaApAQCAtODMsNyArODMsNiBAQAogICogU0FfRkxBR1MgdmFsdWVzOgogICoKICAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKICAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQogICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCiAgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCkBAIC0xMDMsNyArMTAyLDYgQEAKIAogI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCiAKICNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc29ja2V0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc29ja2V0LmgKaW5kZXggZjJjZGJlYS4uYjQ2NzAyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zb2NrZXQuaApAQCAtNDgsNSArNDgsNiBAQAogI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAogCiAjZGVmaW5lIFNPX1BFRVJTRUMgICAgICAgICAgICAgMzEKKyNkZWZpbmUgU09fUEFTU1NFQwkJMzQKIAogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaAppbmRleCA2OGU1NTlmLi5mNjdmMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oCkBAIC0yNDQsNDMgKzI0NCw3IEBACiAKICNkZWZpbmUgd2Fybl9pZl9ub3RfdWxvbmcoeCkgZG8geyB1bnNpZ25lZCBsb25nIGZvbzsgKHZvaWQpICgmKHgpID09ICZmb28pOyB9IHdoaWxlICgwKQogCi0vKiBpbnRlcnJ1cHQgY29udHJvbC4uICovCi0jZGVmaW5lIGxvY2FsX3NhdmVfZmxhZ3MoeCkJZG8geyB3YXJuX2lmX25vdF91bG9uZyh4KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgc2F2ZV9mbGFncyBcblx0IHB1c2hmcSA7IHBvcHEgJXEwIjoiPWciICh4KTogLyogbm8gaW5wdXQgKi8gOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgCV9fYXNtX18gX192b2xhdGlsZV9fKCIjIHJlc3RvcmVfZmxhZ3MgXG5cdCBwdXNocSAlMCA7IHBvcGZxIjogLyogbm8gb3V0cHV0ICovIDoiZyIgKHgpOiJtZW1vcnkiLCAiY2MiKQotCi0jaWZkZWYgQ09ORklHX1g4Nl9WU01QCi0vKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgVlNNUCAgYXJjaGl0ZWN0dXJlICovCi0jZGVmaW5lIGxvY2FsX2lycV9kaXNhYmxlKCkJZG8geyB1bnNpZ25lZCBsb25nIGZsYWdzOyBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsgbG9jYWxfaXJxX3Jlc3RvcmUoKGZsYWdzICYgfigxIDw8IDkpKSB8ICgxIDw8IDE4KSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQlkbyB7IHVuc2lnbmVkIGxvbmcgZmxhZ3M7IGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOyBsb2NhbF9pcnFfcmVzdG9yZSgoZmxhZ3MgfCAoMSA8PCA5KSkgJiB+KDEgPDwgMTgpKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCQkJCVwKLSh7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQlcCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CQkJXAotCShmbGFncyAmICgxPDwxOCkpIHx8ICEoZmxhZ3MgJiAoMTw8OSkpOwkJXAotfSkKLQotLyogRm9yIHNwaW5sb2NrcyBldGMgKi8KLSNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoeCkJZG8geyBsb2NhbF9zYXZlX2ZsYWdzKHgpOyBsb2NhbF9pcnFfcmVzdG9yZSgoeCAmIH4oMSA8PCA5KSkgfCAoMSA8PCAxOCkpOyB9IHdoaWxlICgwKQotI2Vsc2UgIC8qIENPTkZJR19YODZfVlNNUCAqLwotI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIpCi0KLSNkZWZpbmUgaXJxc19kaXNhYmxlZCgpCQkJXAotKHsJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJXAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwlcCi0JIShmbGFncyAmICgxPDw5KSk7CQlcCi19KQotCi0vKiBGb3Igc3BpbmxvY2tzIGV0YyAqLwotI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSh4KSAJZG8geyB3YXJuX2lmX25vdF91bG9uZyh4KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgbG9jYWxfaXJxX3NhdmUgXG5cdCBwdXNoZnEgOyBwb3BxICUwIDsgY2xpIjoiPWciICh4KTogLyogbm8gaW5wdXQgKi8gOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKiB1c2VkIGluIHRoZSBpZGxlIGxvb3A7IHN0aSB0YWtlcyBvbmUgaW5zdHJ1Y3Rpb24gY3ljbGUgdG8gY29tcGxldGUgKi8KLSNkZWZpbmUgc2FmZV9oYWx0KCkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGk7IGhsdCI6IDogOiJtZW1vcnkiKQotLyogdXNlZCB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHkgZW5hYmxlZCBvciB0byBzaHV0ZG93biB0aGUgcHJvY2Vzc29yICovCi0jZGVmaW5lIGhhbHQoKQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJobHQiOiA6IDoibWVtb3J5IikKKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCiB2b2lkIGNwdV9pZGxlX3dhaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9od19pcnEuaAppbmRleCBjY2Y0MzYyLi4zZGRiZWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2h3X2lycS5oCkBAIC0xMSw4ICsxMSw0IEBACiAjaWZuZGVmIF9YVEVOU0FfSFdfSVJRX0gKICNkZWZpbmUgX1hURU5TQV9IV19JUlFfSAogCi1zdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKQotewotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9yd3NlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3J3c2VtLmgKaW5kZXggYWJjZDg2ZC4uMGFhZDNhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3J3c2VtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3J3c2VtLmgKQEAgLTMxLDI0ICszMSwxMSBAQAogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZiBSV1NFTV9ERUJVRwotCWludAkJCWRlYnVnOwotI2VuZGlmCiB9OwogCi0vKgotICogaW5pdGlhbGlzYXRpb24KLSAqLwotI2lmIFJXU0VNX0RFQlVHCi0jZGVmaW5lIF9fUldTRU1fREVCVUdfSU5JVCAgICAgICwgMAotI2Vsc2UKLSNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUCS8qICovCi0jZW5kaWYKLQogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKIAl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKLQkgIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKLQkgIF9fUldTRU1fREVCVUdfSU5JVCB9CisJICBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKQkJXAogCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKQEAgLTYzLDkgKzUwLDYgQEAKIAlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7CiAJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOwotI2lmIFJXU0VNX0RFQlVHCi0Jc2VtLT5kZWJ1ZyA9IDA7Ci0jZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaWduYWwuaAppbmRleCBhOTljOWFlLi42MzNiYTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3NpZ25hbC5oCkBAIC03NSw3ICs3NSw2IEBACiAgKiBTQV9GTEFHUyB2YWx1ZXM6CiAgKgogICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQogICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCiAgKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KICAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KQEAgLTk1LDcgKzk0LDYgQEAKIAogI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMCAvKiBkdW1teSAtLSBpZ25vcmVkICovCiAKICNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMAogCkBAIC0xMDksMTkgKzEwNyw2IEBACiAjZGVmaW5lIFNJR1NUS1NaCTgxOTIKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiBUaGVzZSB2YWx1ZXMgb2Ygc2FfZmxhZ3MgYXJlIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCi0gKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCi0gKgotICogU0FfSU5URVJSVVBUIGlzIGFsc28gdXNlZCBieSB0aGUgaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICogU0FfU0hJUlEgaXMgZm9yIHNoYXJlZCBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBQQ0kgYW5kIEVJU0EuCi0gKi8KLSNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlTQV9SRVNUQVJUCi0jZGVmaW5lIFNBX1NISVJRCQkweDA0MDAwMDAwCi0jZGVmaW5lIFNBX1BST0JFSVJRCQkweDA4MDAwMDAwCi0jZW5kaWYKIAogI2RlZmluZSBTSUdfQkxPQ0sgICAgICAgICAgMAkvKiBmb3IgYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfVU5CTE9DSyAgICAgICAgMQkvKiBmb3IgdW5ibG9ja2luZyBzaWduYWxzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc29ja2V0LmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc29ja2V0LmgKaW5kZXggMDBmODNmMy4uOTcxZDIzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zb2NrZXQuaApAQCAtNTksNSArNTksNiBAQAogCiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JCTMwCiAjZGVmaW5lIFNPX1BFRVJTRUMJCTMxCisjZGVmaW5lIFNPX1BBU1NTRUMJCTM0CiAKICNlbmRpZgkvKiBfWFRFTlNBX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvbGludXgvYWM5N19jb2RlYy5oCmluZGV4IGMzNTgzMzguLjJlZDJmZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWM5N19jb2RlYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYWM5N19jb2RlYy5oCkBAIC0yNTksNyArMjU5LDcgQEAKIAlpbnQgdHlwZTsKIAl1MzIgbW9kZWw7CiAKLQlpbnQgbW9kZW06MTsKKwl1bnNpZ25lZCBpbnQgbW9kZW06MTsKIAogCXN0cnVjdCBhYzk3X29wcyAqY29kZWNfb3BzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaAppbmRleCAxZWIyMzhhLi40MTc4OGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKQEAgLTcsNiArNyw3IEBACiAjZGVmaW5lIExJTlVYX0FUTURFVl9ICiAKIAorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgpAQCAtMzU4LDYgKzM1OSw3IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OyAvKiBwcm9jIGVudHJ5ICovCiAJY2hhciAqcHJvY19uYW1lOwkJLyogcHJvYyBlbnRyeSBuYW1lICovCiAjZW5kaWYKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsJLyogc3lzZnMgY2xhc3MgZGV2aWNlICovCiAJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsJLyogbGlua2FnZSAqLwogfTsKIApAQCAtNDU5LDcgKzQ2MSw3IEBACiAJCUJVR19PTighdGVzdF9iaXQoQVRNX0RGX1JFTU9WRUQsICZkZXYtPmZsYWdzKSk7CiAJCWlmIChkZXYtPm9wcy0+ZGV2X2Nsb3NlKQogCQkJZGV2LT5vcHMtPmRldl9jbG9zZShkZXYpOwotCQlrZnJlZShkZXYpOworCQljbGFzc19kZXZpY2VfcHV0KCZkZXYtPmNsYXNzX2Rldik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggZTA1MWZmOS4uYjI3ZDdkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtMTIyLDEwICsxMjIsMTcgQEAKIC8qIFJ1bGUgc3RydWN0dXJlIHNpemVzIC0tIGlmIHRoZXNlIGNoYW5nZSwgZGlmZmVyZW50IEFVRElUX0FERCBhbmQKICAqIEFVRElUX0xJU1QgY29tbWFuZHMgbXVzdCBiZSBpbXBsZW1lbnRlZC4gKi8KICNkZWZpbmUgQVVESVRfTUFYX0ZJRUxEUyAgIDY0CisjZGVmaW5lIEFVRElUX01BWF9LRVlfTEVOICAzMgogI2RlZmluZSBBVURJVF9CSVRNQVNLX1NJWkUgNjQKICNkZWZpbmUgQVVESVRfV09SRChucikgKChfX3UzMikoKG5yKS8zMikpCiAjZGVmaW5lIEFVRElUX0JJVChucikgICgxIDw8ICgobnIpIC0gQVVESVRfV09SRChucikqMzIpKQogCisjZGVmaW5lIEFVRElUX1NZU0NBTExfQ0xBU1NFUyAxNgorI2RlZmluZSBBVURJVF9DTEFTU19ESVJfV1JJVEUgMAorI2RlZmluZSBBVURJVF9DTEFTU19ESVJfV1JJVEVfMzIgMQorI2RlZmluZSBBVURJVF9DTEFTU19DSEFUVFIgMgorI2RlZmluZSBBVURJVF9DTEFTU19DSEFUVFJfMzIgMworCiAvKiBUaGlzIGJpdG1hc2sgaXMgdXNlZCB0byB2YWxpZGF0ZSB1c2VyIGlucHV0LiAgSXQgcmVwcmVzZW50cyBhbGwgYml0cyB0aGF0CiAgKiBhcmUgY3VycmVudGx5IHVzZWQgaW4gYW4gYXVkaXQgZmllbGQgY29uc3RhbnQgdW5kZXJzdG9vZCBieSB0aGUga2VybmVsLgogICogSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgI2RlZmluZSBBVURJVF88d2hhdGV2ZXI+LCBwbGVhc2UgZW5zdXJlIHRoYXQKQEAgLTE1MCwxMiArMTU3LDE3IEBACiAjZGVmaW5lIEFVRElUX1BFUlMJMTAKICNkZWZpbmUgQVVESVRfQVJDSAkxMQogI2RlZmluZSBBVURJVF9NU0dUWVBFCTEyCi0jZGVmaW5lIEFVRElUX1NFX1VTRVIJMTMJLyogc2VjdXJpdHkgbGFiZWwgdXNlciAqLwotI2RlZmluZSBBVURJVF9TRV9ST0xFCTE0CS8qIHNlY3VyaXR5IGxhYmVsIHJvbGUgKi8KLSNkZWZpbmUgQVVESVRfU0VfVFlQRQkxNQkvKiBzZWN1cml0eSBsYWJlbCB0eXBlICovCi0jZGVmaW5lIEFVRElUX1NFX1NFTgkxNgkvKiBzZWN1cml0eSBsYWJlbCBzZW5zaXRpdml0eSBsYWJlbCAqLwotI2RlZmluZSBBVURJVF9TRV9DTFIJMTcJLyogc2VjdXJpdHkgbGFiZWwgY2xlYXJhbmNlIGxhYmVsICovCisjZGVmaW5lIEFVRElUX1NVQkpfVVNFUgkxMwkvKiBzZWN1cml0eSBsYWJlbCB1c2VyICovCisjZGVmaW5lIEFVRElUX1NVQkpfUk9MRQkxNAkvKiBzZWN1cml0eSBsYWJlbCByb2xlICovCisjZGVmaW5lIEFVRElUX1NVQkpfVFlQRQkxNQkvKiBzZWN1cml0eSBsYWJlbCB0eXBlICovCisjZGVmaW5lIEFVRElUX1NVQkpfU0VOCTE2CS8qIHNlY3VyaXR5IGxhYmVsIHNlbnNpdGl2aXR5IGxhYmVsICovCisjZGVmaW5lIEFVRElUX1NVQkpfQ0xSCTE3CS8qIHNlY3VyaXR5IGxhYmVsIGNsZWFyYW5jZSBsYWJlbCAqLwogI2RlZmluZSBBVURJVF9QUElECTE4CisjZGVmaW5lIEFVRElUX09CSl9VU0VSCTE5CisjZGVmaW5lIEFVRElUX09CSl9ST0xFCTIwCisjZGVmaW5lIEFVRElUX09CSl9UWVBFCTIxCisjZGVmaW5lIEFVRElUX09CSl9MRVZfTE9XCTIyCisjZGVmaW5lIEFVRElUX09CSl9MRVZfSElHSAkyMwogCiAJCQkJLyogVGhlc2UgYXJlIE9OTFkgdXNlZnVsIHdoZW4gY2hlY2tpbmcKIAkJCQkgKiBhdCBzeXNjYWxsIGV4aXQgdGltZSAoQVVESVRfQVRfRVhJVCkuICovCkBAIC0xNzEsNiArMTgzLDggQEAKICNkZWZpbmUgQVVESVRfQVJHMiAgICAgIChBVURJVF9BUkcwKzIpCiAjZGVmaW5lIEFVRElUX0FSRzMgICAgICAoQVVESVRfQVJHMCszKQogCisjZGVmaW5lIEFVRElUX0ZJTFRFUktFWQkyMTAKKwogI2RlZmluZSBBVURJVF9ORUdBVEUJCQkweDgwMDAwMDAwCiAKIC8qIFRoZXNlIGFyZSB0aGUgc3VwcG9ydGVkIG9wZXJhdG9ycy4KQEAgLTI5OSw2ICszMTMsNyBAQAogI2RlZmluZSBBVURJVFNDX1NVQ0NFU1MgMQogI2RlZmluZSBBVURJVFNDX0ZBSUxVUkUgMgogI2RlZmluZSBBVURJVFNDX1JFU1VMVCh4KSAoICgobG9uZykoeCkpPDA/QVVESVRTQ19GQUlMVVJFOkFVRElUU0NfU1VDQ0VTUyApCitleHRlcm4gaW50IF9faW5pdCBhdWRpdF9yZWdpc3Rlcl9jbGFzcyhpbnQgY2xhc3MsIHVuc2lnbmVkICpsaXN0KTsKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBhdWRpdHNjLmMgKi8KIAkJCQkvKiBQdWJsaWMgQVBJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGFfbGludXguaCBiL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCmluZGV4IDdiNWM1ZGYuLmJlNTEyY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCkBAIC0yNyw4ICsyNyw4IEBACiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY29kYV9pb2N0bF9pbm9kZV9vcGVyYXRpb25zOwogCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjb2RhX2ZpbGVfYW9wczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNvZGFfc3ltbGlua19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY29kYV9maWxlX2FvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjb2RhX3N5bWxpbmtfYW9wczsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29kYV9kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvZGFfZmlsZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKaW5kZXggOTE3ZDYyZS4uMjY5ZDAwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCkBAIC01NjcsMTEgKzU2Nyw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQVNLUkVHSE9TVCkKIENPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19UT0dHTEVSRUdIT1NUKQogQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0FTS1VNT1VOVCkKLS8qIERFVkZTICovCi1DT01QQVRJQkxFX0lPQ1RMKERFVkZTRElPQ19HRVRfUFJPVE9fUkVWKQotQ09NUEFUSUJMRV9JT0NUTChERVZGU0RJT0NfU0VUX0VWRU5UX01BU0spCi1DT01QQVRJQkxFX0lPQ1RMKERFVkZTRElPQ19SRUxFQVNFX0VWRU5UX1FVRVVFKQotQ09NUEFUSUJMRV9JT0NUTChERVZGU0RJT0NfU0VUX0RFQlVHX01BU0spCiAvKiBSYXcgZGV2aWNlcyAqLwogQ09NUEFUSUJMRV9JT0NUTChSQVdfU0VUQklORCkKIENPTVBBVElCTEVfSU9DVEwoUkFXX0dFVEJJTkQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBsZXRpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCmluZGV4IDkwNjYzYWQuLjI1MWM0MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCkBAIC0yMSw2ICsyMSwxOCBAQAogI2RlZmluZSBERUNMQVJFX0NPTVBMRVRJT04od29yaykgXAogCXN0cnVjdCBjb21wbGV0aW9uIHdvcmsgPSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKHdvcmspCiAKKy8qCisgKiBMb2NrZGVwIG5lZWRzIHRvIHJ1biBhIG5vbi1jb25zdGFudCBpbml0aWFsaXplciBmb3Igb24tc3RhY2sKKyAqIGNvbXBsZXRpb25zIC0gc28gd2UgdXNlIHRoZSBfT05TVEFDSygpIHZhcmlhbnQgZm9yIHRob3NlIHRoYXQKKyAqIGFyZSBvbiB0aGUga2VybmVsIHN0YWNrOgorICovCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKyMgZGVmaW5lIERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdvcmspIFwKKwlzdHJ1Y3QgY29tcGxldGlvbiB3b3JrID0gKHsgaW5pdF9jb21wbGV0aW9uKCZ3b3JrKTsgd29yazsgfSkKKyNlbHNlCisjIGRlZmluZSBERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3b3JrKSBERUNMQVJFX0NPTVBMRVRJT04od29yaykKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICp4KQogewogCXgtPmRvbmUgPSAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHUuaCBiL2luY2x1ZGUvbGludXgvY3B1LmgKaW5kZXggYTNjYWY2OC4uNDRhMTFmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdS5oCkBAIC04Nyw5ICs4Nyw5IEBACiAjZGVmaW5lIGxvY2tfY3B1X2hvdHBsdWcoKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHVubG9ja19jcHVfaG90cGx1ZygpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbG9ja19jcHVfaG90cGx1Z19pbnRlcnJ1cHRpYmxlKCkgMAotI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkKLSNkZWZpbmUgcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKG5iKQotI2RlZmluZSB1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikKKyNkZWZpbmUgaG90Y3B1X25vdGlmaWVyKGZuLCBwcmkpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKG5iKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKG5iKQlkbyB7IH0gd2hpbGUgKDApCiAKIC8qIENQVXMgZG9uJ3QgZ28gb2ZmbGluZSBvbmNlIHRoZXkncmUgb25saW5lIHcvbyBDT05GSUdfSE9UUExVR19DUFUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9pc19vZmZsaW5lKGludCBjcHUpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggNDY2ZmJlOS4uMzVlMTM3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTEwMCw4ICsxMDAsMTAgQEAKICNkZWZpbmUgQ1BVRlJFUV9JTkNPTVBBVElCTEUJKDEpCiAjZGVmaW5lIENQVUZSRVFfTk9USUZZCQkoMikKIAotI2RlZmluZSBDUFVGUkVRX1NIQVJFRF9UWVBFX0FMTAkoMCkgLyogQWxsIGRlcGVuZGVudCBDUFVzIHNob3VsZCBzZXQgZnJlcSAqLwotI2RlZmluZSBDUFVGUkVRX1NIQVJFRF9UWVBFX0FOWQkoMSkgLyogRnJlcSBjYW4gYmUgc2V0IGZyb20gYW55IGRlcGVuZGVudCBDUFUgKi8KKyNkZWZpbmUgQ1BVRlJFUV9TSEFSRURfVFlQRV9OT05FICgwKSAvKiBOb25lICovCisjZGVmaW5lIENQVUZSRVFfU0hBUkVEX1RZUEVfSFcJICgxKSAvKiBIVyBkb2VzIG5lZWRlZCBjb29yZGluYXRpb24gKi8KKyNkZWZpbmUgQ1BVRlJFUV9TSEFSRURfVFlQRV9BTEwJICgyKSAvKiBBbGwgZGVwZW5kZW50IENQVXMgc2hvdWxkIHNldCBmcmVxICovCisjZGVmaW5lIENQVUZSRVFfU0hBUkVEX1RZUEVfQU5ZCSAoMykgLyogRnJlcSBjYW4gYmUgc2V0IGZyb20gYW55IGRlcGVuZGVudCBDUFUqLwogCiAvKioqKioqKioqKioqKioqKioqKiogY3B1ZnJlcSB0cmFuc2l0aW9uIG5vdGlmaWVycyAqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaAppbmRleCAwZGQxNjEwLi40NzE3ODFmZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMTE0LDYgKzExNCwxOCBAQAogCXVuc2lnbmVkIGNoYXIgZF9pbmFtZVtETkFNRV9JTkxJTkVfTEVOX01JTl07CS8qIHNtYWxsIG5hbWVzICovCiB9OwogCisvKgorICogZGVudHJ5LT5kX2xvY2sgc3BpbmxvY2sgbmVzdGluZyBzdWJjbGFzc2VzOgorICoKKyAqIDA6IG5vcm1hbAorICogMTogbmVzdGVkCisgKi8KK2VudW0gZGVudHJ5X2RfbG9ja19jbGFzcworeworCURFTlRSWV9EX0xPQ0tfTk9STUFMLCAvKiBpbXBsaWNpdGx5IHVzZWQgYnkgcGxhaW4gc3Bpbl9sb2NrKCkgQVBJcy4gKi8KKwlERU5UUllfRF9MT0NLX05FU1RFRAorfTsKKwogc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHsKIAlpbnQgKCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIAlpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWJ1Z19sb2Nrcy5oIGIvaW5jbHVkZS9saW51eC9kZWJ1Z19sb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzA0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnX2xvY2tzLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBfX0xJTlVYX0RFQlVHX0xPQ0tJTkdfSAorI2RlZmluZSBfX0xJTlVYX0RFQlVHX0xPQ0tJTkdfSAorCitleHRlcm4gaW50IGRlYnVnX2xvY2tzOworZXh0ZXJuIGludCBkZWJ1Z19sb2Nrc19zaWxlbnQ7CisKKy8qCisgKiBHZW5lcmljICd0dXJuIG9mZiBhbGwgbG9jayBkZWJ1Z2dpbmcnIGZ1bmN0aW9uOgorICovCitleHRlcm4gaW50IGRlYnVnX2xvY2tzX29mZih2b2lkKTsKKworLyoKKyAqIEluIHRoZSBkZWJ1ZyBjYXNlIHdlIGNhcnJ5IHRoZSBjYWxsZXIncyBpbnN0cnVjdGlvbiBwb2ludGVyIGludG8KKyAqIG90aGVyIGZ1bmN0aW9ucywgYnV0IHdlIGRvbnQgd2FudCB0aGUgZnVuY3Rpb24gYXJndW1lbnQgb3ZlcmhlYWQKKyAqIGluIHRoZSBub25kZWJ1ZyBjYXNlIC0gaGVuY2UgdGhlc2UgbWFjcm9zOgorICovCisjZGVmaW5lIF9SRVRfSVBfCQkodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkKKyNkZWZpbmUgX1RISVNfSVBfICAoeyBfX2xhYmVsX18gX19oZXJlOyBfX2hlcmU6ICh1bnNpZ25lZCBsb25nKSYmX19oZXJlOyB9KQorCisjZGVmaW5lIERFQlVHX0xPQ0tTX1dBUk5fT04oYykJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KGMpKSB7CQkJCQkJXAorCQlpZiAoZGVidWdfbG9ja3Nfb2ZmKCkpCQkJCQlcCisJCQlXQVJOX09OKDEpOwkJCQkJXAorCQlfX3JldCA9IDE7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKKyNpZmRlZiBDT05GSUdfU01QCisjIGRlZmluZSBTTVBfREVCVUdfTE9DS1NfV0FSTl9PTihjKQkJCURFQlVHX0xPQ0tTX1dBUk5fT04oYykKKyNlbHNlCisjIGRlZmluZSBTTVBfREVCVUdfTE9DS1NfV0FSTl9PTihjKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUworICBleHRlcm4gdm9pZCBsb2NraW5nX3NlbGZ0ZXN0KHZvaWQpOworI2Vsc2UKKyMgZGVmaW5lIGxvY2tpbmdfc2VsZnRlc3QoKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MT0NLREVQCitleHRlcm4gdm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIGRlYnVnX3Nob3dfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHZvaWQgZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBsZW4pOworZXh0ZXJuIHZvaWQgZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfc2hvd19oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkZWJ1Z19jaGVja19ub19sb2Nrc19oZWxkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2ZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvZGV2ZnNfZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyMzZmNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmZzX2ZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaWZuZGVmIF9MSU5VWF9ERVZGU19GU19ICi0jZGVmaW5lIF9MSU5VWF9ERVZGU19GU19ICi0KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi0jZGVmaW5lIERFVkZTRF9QUk9UT0NPTF9SRVZJU0lPTl9LRVJORUwgIDUKLQotI2RlZmluZQlERVZGU0RfSU9DVExfQkFTRQknZCcKLQotLyogIFRoZXNlIGFyZSB0aGUgdmFyaW91cyBpb2N0bHMgICovCi0jZGVmaW5lIERFVkZTRElPQ19HRVRfUFJPVE9fUkVWICAgICAgICAgX0lPUihERVZGU0RfSU9DVExfQkFTRSwgMCwgaW50KQotI2RlZmluZSBERVZGU0RJT0NfU0VUX0VWRU5UX01BU0sgICAgICAgIF9JT1coREVWRlNEX0lPQ1RMX0JBU0UsIDIsIGludCkKLSNkZWZpbmUgREVWRlNESU9DX1JFTEVBU0VfRVZFTlRfUVVFVUUgICBfSU9XKERFVkZTRF9JT0NUTF9CQVNFLCAzLCBpbnQpCi0jZGVmaW5lIERFVkZTRElPQ19TRVRfREVCVUdfTUFTSyAgICAgICAgX0lPVyhERVZGU0RfSU9DVExfQkFTRSwgNCwgaW50KQotCi0jZGVmaW5lIERFVkZTRF9OT1RJRllfUkVHSVNURVJFRCAgICAwCi0jZGVmaW5lIERFVkZTRF9OT1RJRllfVU5SRUdJU1RFUkVEICAxCi0jZGVmaW5lIERFVkZTRF9OT1RJRllfQVNZTkNfT1BFTiAgICAyCi0jZGVmaW5lIERFVkZTRF9OT1RJRllfQ0xPU0UgICAgICAgICAzCi0jZGVmaW5lIERFVkZTRF9OT1RJRllfTE9PS1VQICAgICAgICA0Ci0jZGVmaW5lIERFVkZTRF9OT1RJRllfQ0hBTkdFICAgICAgICA1Ci0jZGVmaW5lIERFVkZTRF9OT1RJRllfQ1JFQVRFICAgICAgICA2Ci0jZGVmaW5lIERFVkZTRF9OT1RJRllfREVMRVRFICAgICAgICA3Ci0KLSNkZWZpbmUgREVWRlNfUEFUSExFTiAgICAgICAgICAgICAgIDEwMjQJLyogIE5ldmVyIGNoYW5nZSB0aGlzIG90aGVyd2lzZSB0aGUKLQkJCQkJCSAgIGJpbmFyeSBpbnRlcmZhY2Ugd2lsbCBjaGFuZ2UgICAqLwotCi1zdHJ1Y3QgZGV2ZnNkX25vdGlmeV9zdHJ1Y3QgewkvKiAgVXNlIG5hdGl2ZSBDIHR5cGVzIHRvIGVuc3VyZSBzYW1lIHR5cGVzIGluIGtlcm5lbCBhbmQgdXNlciBzcGFjZSAgICAgKi8KLQl1bnNpZ25lZCBpbnQgdHlwZTsJLyogIERFVkZTRF9OT1RJRllfKiB2YWx1ZSAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGludCBtb2RlOwkvKiAgTW9kZSBvZiB0aGUgaW5vZGUgb3IgZGV2aWNlIGVudHJ5ICAgICAgICovCi0JdW5zaWduZWQgaW50IG1ham9yOwkvKiAgTWFqb3IgbnVtYmVyIG9mIGRldmljZSBlbnRyeSAgICAgICAgICAgICovCi0JdW5zaWduZWQgaW50IG1pbm9yOwkvKiAgTWlub3IgbnVtYmVyIG9mIGRldmljZSBlbnRyeSAgICAgICAgICAgICovCi0JdW5zaWduZWQgaW50IHVpZDsJLyogIFVpZCBvZiBwcm9jZXNzLCBpbm9kZSBvciBkZXZpY2UgZW50cnkgICAqLwotCXVuc2lnbmVkIGludCBnaWQ7CS8qICBHaWQgb2YgcHJvY2VzcywgaW5vZGUgb3IgZGV2aWNlIGVudHJ5ICAgKi8KLQl1bnNpZ25lZCBpbnQgb3ZlcnJ1bl9jb3VudDsJLyogIE51bWJlciBvZiBsb3N0IGV2ZW50cyAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGludCBuYW1lbGVuOwkvKiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZyAnXDAnICovCi0JLyogIFRoZSBkZXZpY2UgbmFtZSBNVVNUIGNvbWUgbGFzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JY2hhciBkZXZuYW1lW0RFVkZTX1BBVEhMRU5dOwkvKiAgVGhpcyB3aWxsIGJlICdcMCcgdGVybWluYXRlZCAgICAgICAgICAgICovCi19OwotCi0jZW5kaWYJCQkJLyogIF9MSU5VWF9ERVZGU19GU19IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzRhNmYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX0RFVkZTX0ZTX0tFUk5FTF9ICi0jZGVmaW5lIF9MSU5VWF9ERVZGU19GU19LRVJORUxfSAotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KLSNkZWZpbmUgREVWRlNfU1VQRVJfTUFHSUMgICAgICAgICAgICAgICAgMHgxMzczCi0KLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLWV4dGVybiBpbnQgZGV2ZnNfbWtfYmRldihkZXZfdCBkZXYsIHVtb2RlX3QgbW9kZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCi0gICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDMsIDQpKSk7Ci1leHRlcm4gaW50IGRldmZzX21rX2NkZXYoZGV2X3QgZGV2LCB1bW9kZV90IG1vZGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOwotZXh0ZXJuIGludCBkZXZmc19ta19zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmxpbmspOwotZXh0ZXJuIGludCBkZXZmc19ta19kaXIoY29uc3QgY2hhciAqZm10LCAuLi4pCi0gICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDEsIDIpKSk7Ci1leHRlcm4gdm9pZCBkZXZmc19yZW1vdmUoY29uc3QgY2hhciAqZm10LCAuLi4pCi0gICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDEsIDIpKSk7Ci1leHRlcm4gaW50IGRldmZzX3JlZ2lzdGVyX3RhcGUoY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBkZXZmc191bnJlZ2lzdGVyX3RhcGUoaW50IG51bSk7Ci1leHRlcm4gdm9pZCBtb3VudF9kZXZmc19mcyh2b2lkKTsKLSNlbHNlCQkJCS8qICBDT05GSUdfREVWRlNfRlMgICovCi1zdGF0aWMgaW5saW5lIGludCBkZXZmc19ta19iZGV2KGRldl90IGRldiwgdW1vZGVfdCBtb2RlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGRldmZzX21rX2NkZXYoZGV2X3QgZGV2LCB1bW9kZV90IG1vZGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgZGV2ZnNfbWtfc3ltbGluayhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpsaW5rKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgZGV2ZnNfbWtfZGlyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIGRldmZzX3JlbW92ZShjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGRldmZzX3JlZ2lzdGVyX3RhcGUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4gLTE7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGV2ZnNfdW5yZWdpc3Rlcl90YXBlKGludCBudW0pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgbW91bnRfZGV2ZnNfZnModm9pZCkKLXsKLQlyZXR1cm47Ci19Ci0jZW5kaWYJCQkJLyogIENPTkZJR19ERVZGU19GUyAgKi8KLSNlbmRpZgkJCQkvKiAgX0xJTlVYX0RFVkZTX0ZTX0tFUk5FTF9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKaW5kZXggMjcyMDEwYTYuLmM5NGQ4ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtNDQsNyArNDQsNyBAQAogfTsKIAogLyoqCi0gKiB0eXBlZGVmIGRtYV9jb29raWVfdAorICogdHlwZWRlZiBkbWFfY29va2llX3QgLSBhbiBvcGFxdWUgRE1BIGNvb2tpZQogICoKICAqIGlmIGRtYV9jb29raWVfdCBpcyA+MCBpdCdzIGEgRE1BIHJlcXVlc3QgY29va2llLCA8MCBpdCdzIGFuIGVycm9yIGNvZGUKICAqLwpAQCAtODAsMTQgKzgwLDE0IEBACiAKIC8qKgogICogc3RydWN0IGRtYV9jaGFuIC0gZGV2aWNlcyBzdXBwbHkgRE1BIGNoYW5uZWxzLCBjbGllbnRzIHVzZSB0aGVtCi0gKiBAY2xpZW50OiBwdHIgdG8gdGhlIGNsaWVudCB1c2VyIG9mIHRoaXMgY2hhbiwgd2lsbCBiZSBOVUxMIHdoZW4gdW51c2VkCi0gKiBAZGV2aWNlOiBwdHIgdG8gdGhlIGRtYSBkZXZpY2Ugd2hvIHN1cHBsaWVzIHRoaXMgY2hhbm5lbCwgYWx3YXlzICFOVUxMCisgKiBAY2xpZW50OiBwdHIgdG8gdGhlIGNsaWVudCB1c2VyIG9mIHRoaXMgY2hhbiwgd2lsbCBiZSAlTlVMTCB3aGVuIHVudXNlZAorICogQGRldmljZTogcHRyIHRvIHRoZSBkbWEgZGV2aWNlIHdobyBzdXBwbGllcyB0aGlzIGNoYW5uZWwsIGFsd2F5cyAhJU5VTEwKICAqIEBjb29raWU6IGxhc3QgY29va2llIHZhbHVlIHJldHVybmVkIHRvIGNsaWVudAotICogQGNoYW5faWQ6Ci0gKiBAY2xhc3NfZGV2OgorICogQGNoYW5faWQ6IGNoYW5uZWwgSUQgZm9yIHN5c2ZzCisgKiBAY2xhc3NfZGV2OiBjbGFzcyBkZXZpY2UgZm9yIHN5c2ZzCiAgKiBAcmVmY291bnQ6IGtyZWYsIHVzZWQgaW4gImJpZ3JlZiIgc2xvdy1tb2RlCi0gKiBAc2xvd19yZWY6Ci0gKiBAcmN1OgorICogQHNsb3dfcmVmOiBpbmRpY2F0ZXMgdGhhdCB0aGUgRE1BIGNoYW5uZWwgaXMgZnJlZQorICogQHJjdTogdGhlIERNQSBjaGFubmVsJ3MgUkNVIGhlYWQKICAqIEBjbGllbnRfbm9kZTogdXNlZCB0byBhZGQgdGhpcyB0byB0aGUgY2xpZW50IGNoYW4gbGlzdAogICogQGRldmljZV9ub2RlOiB1c2VkIHRvIGFkZCB0aGlzIHRvIHRoZSBkZXZpY2UgY2hhbiBsaXN0CiAgKiBAbG9jYWw6IHBlci1jcHUgcG9pbnRlciB0byBhIHN0cnVjdCBkbWFfY2hhbl9wZXJjcHUKQEAgLTE2MiwxMCArMTYyLDE3IEBACiAgKiBAY2hhbmNudDogaG93IG1hbnkgRE1BIGNoYW5uZWxzIGFyZSBzdXBwb3J0ZWQKICAqIEBjaGFubmVsczogdGhlIGxpc3Qgb2Ygc3RydWN0IGRtYV9jaGFuCiAgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9kZXZpY2VfbGlzdAotICogQHJlZmNvdW50OgotICogQGRvbmU6Ci0gKiBAZGV2X2lkOgotICogT3RoZXIgZnVuYyBwdHJzOiB1c2VkIHRvIG1ha2UgdXNlIG9mIHRoaXMgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzCisgKiBAcmVmY291bnQ6IHJlZmVyZW5jZSBjb3VudAorICogQGRvbmU6IElPIGNvbXBsZXRpb24gc3RydWN0CisgKiBAZGV2X2lkOiB1bmlxdWUgZGV2aWNlIElECisgKiBAZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzOiBhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHJldHVybiB0aGUKKyAqCW51bWJlciBvZiBhbGxvY2F0ZWQgZGVzY3JpcHRvcnMKKyAqIEBkZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlczogcmVsZWFzZSBETUEgY2hhbm5lbCdzIHJlc291cmNlcworICogQGRldmljZV9tZW1jcHlfYnVmX3RvX2J1ZjogbWVtY3B5IGJ1ZiBwb2ludGVyIHRvIGJ1ZiBwb2ludGVyCisgKiBAZGV2aWNlX21lbWNweV9idWZfdG9fcGc6IG1lbWNweSBidWYgcG9pbnRlciB0byBzdHJ1Y3QgcGFnZQorICogQGRldmljZV9tZW1jcHlfcGdfdG9fcGc6IG1lbWNweSBzdHJ1Y3QgcGFnZS9vZmZzZXQgdG8gc3RydWN0IHBhZ2Uvb2Zmc2V0CisgKiBAZGV2aWNlX21lbWNweV9jb21wbGV0ZTogcG9sbCB0aGUgc3RhdHVzIG9mIGFuIElPQVQgRE1BIHRyYW5zYWN0aW9uCisgKiBAZGV2aWNlX21lbWNweV9pc3N1ZV9wZW5kaW5nOiBwdXNoIGFwcGVuZGVkIGRlc2NyaXB0b3JzIHRvIGhhcmR3YXJlCiAgKi8KIHN0cnVjdCBkbWFfZGV2aWNlIHsKIApAQCAtMjExLDcgKzIxOCw3IEBACiAgKiBCb3RoIEBkZXN0IGFuZCBAc3JjIG11c3QgYmUgbWFwcGFibGUgdG8gYSBidXMgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlCiAgKiBETUEgbWFwcGluZyBBUEkgcnVsZXMgZm9yIHN0cmVhbWluZyBtYXBwaW5ncy4KICAqIEJvdGggQGRlc3QgYW5kIEBzcmMgbXVzdCBzdGF5IG1lbW9yeSByZXNpZGVudCAoa2VybmVsIG1lbW9yeSBvciBsb2NrZWQKLSAqIHVzZXIgc3BhY2UgcGFnZXMpCisgKiB1c2VyIHNwYWNlIHBhZ2VzKS4KICAqLwogc3RhdGljIGlubGluZSBkbWFfY29va2llX3QgZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKIAl2b2lkICpkZXN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCkBAIC0yMjUsNyArMjMyLDcgQEAKIH0KIAogLyoqCi0gKiBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19wZyAtIG9mZmxvYWRlZCBjb3B5CisgKiBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19wZyAtIG9mZmxvYWRlZCBjb3B5IGZyb20gYWRkcmVzcyB0byBwYWdlCiAgKiBAY2hhbjogRE1BIGNoYW5uZWwgdG8gb2ZmbG9hZCBjb3B5IHRvCiAgKiBAcGFnZTogZGVzdGluYXRpb24gcGFnZQogICogQG9mZnNldDogb2Zmc2V0IGluIHBhZ2UgdG8gY29weSB0bwpAQCAtMjUwLDE4ICsyNTcsMTggQEAKIH0KIAogLyoqCi0gKiBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19wZyAtIG9mZmxvYWRlZCBjb3B5CisgKiBkbWFfYXN5bmNfbWVtY3B5X3BnX3RvX3BnIC0gb2ZmbG9hZGVkIGNvcHkgZnJvbSBwYWdlIHRvIHBhZ2UKICAqIEBjaGFuOiBETUEgY2hhbm5lbCB0byBvZmZsb2FkIGNvcHkgdG8KLSAqIEBkZXN0X3BhZ2U6IGRlc3RpbmF0aW9uIHBhZ2UKKyAqIEBkZXN0X3BnOiBkZXN0aW5hdGlvbiBwYWdlCiAgKiBAZGVzdF9vZmY6IG9mZnNldCBpbiBwYWdlIHRvIGNvcHkgdG8KLSAqIEBzcmNfcGFnZTogc291cmNlIHBhZ2UKKyAqIEBzcmNfcGc6IHNvdXJjZSBwYWdlCiAgKiBAc3JjX29mZjogb2Zmc2V0IGluIHBhZ2UgdG8gY29weSBmcm9tCiAgKiBAbGVuOiBsZW5ndGgKICAqCiAgKiBCb3RoIEBkZXN0X3BhZ2UvQGRlc3Rfb2ZmIGFuZCBAc3JjX3BhZ2UvQHNyY19vZmYgbXVzdCBiZSBtYXBwYWJsZSB0byBhIGJ1cwogICogYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIERNQSBtYXBwaW5nIEFQSSBydWxlcyBmb3Igc3RyZWFtaW5nIG1hcHBpbmdzLgogICogQm90aCBAZGVzdF9wYWdlL0BkZXN0X29mZiBhbmQgQHNyY19wYWdlL0BzcmNfb2ZmIG11c3Qgc3RheSBtZW1vcnkgcmVzaWRlbnQKLSAqIChrZXJuZWwgbWVtb3J5IG9yIGxvY2tlZCB1c2VyIHNwYWNlIHBhZ2VzKQorICogKGtlcm5lbCBtZW1vcnkgb3IgbG9ja2VkIHVzZXIgc3BhY2UgcGFnZXMpLgogICovCiBzdGF0aWMgaW5saW5lIGRtYV9jb29raWVfdCBkbWFfYXN5bmNfbWVtY3B5X3BnX3RvX3BnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKIAlzdHJ1Y3QgcGFnZSAqZGVzdF9wZywgdW5zaWduZWQgaW50IGRlc3Rfb2ZmLCBzdHJ1Y3QgcGFnZSAqc3JjX3BnLApAQCAtMjc4LDcgKzI4NSw3IEBACiAKIC8qKgogICogZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nIC0gZmx1c2ggcGVuZGluZyBjb3BpZXMgdG8gSFcKLSAqIEBjaGFuOgorICogQGNoYW46IHRhcmdldCBETUEgY2hhbm5lbAogICoKICAqIFRoaXMgYWxsb3dzIGRyaXZlcnMgdG8gcHVzaCBjb3BpZXMgdG8gSFcgaW4gYmF0Y2hlcywKICAqIHJlZHVjaW5nIE1NSU8gd3JpdGVzIHdoZXJlIHBvc3NpYmxlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaCBiL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmgKaW5kZXggMmZkYTFiMi4uNTI3NTA0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RxYmxrX3hmcy5oCkBAIC0xMjUsMTQgKzEyNSwxNCBAQAogCiAvKgogICogZnNfcXVvdGFfc3RhdCBpcyB0aGUgc3RydWN0IHJldHVybmVkIGluIFFfWEdFVFFTVEFUIGZvciBhIGdpdmVuIGZpbGUgc3lzdGVtLgotICogUHJvdmlkZXMgYSBjZW50cmFsaXplZCB3YXkgdG8gZ2V0IG1ldGEgaW5mb21hdGlvbiBhYm91dCB0aGUgcXVvdGEgc3Vic3lzdGVtLgorICogUHJvdmlkZXMgYSBjZW50cmFsaXplZCB3YXkgdG8gZ2V0IG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1b3RhIHN1YnN5c3RlbS4KICAqIGVnLiBzcGFjZSB0YWtlbiB1cCBmb3IgdXNlciBhbmQgZ3JvdXAgcXVvdGFzLCBudW1iZXIgb2YgZHF1b3RzIGN1cnJlbnRseQogICogaW5jb3JlLgogICovCiAjZGVmaW5lIEZTX1FTVEFUX1ZFUlNJT04JMQkvKiBmc19xdW90YV9zdGF0LnFzX3ZlcnNpb24gKi8KIAogLyoKLSAqIFNvbWUgYmFzaWMgaW5mb21hdGlvbiBhYm91dCAncXVvdGEgZmlsZXMnLgorICogU29tZSBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCAncXVvdGEgZmlsZXMnLgogICovCiB0eXBlZGVmIHN0cnVjdCBmc19xZmlsZXN0YXQgewogCV9fdTY0CQlxZnNfaW5vOwkvKiBpbm9kZSBudW1iZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2Vmc19mcy5oCmluZGV4IGZiZmE2YjUuLjI3OGVmNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZnNfZnMuaApAQCAtMzgsNyArMzgsNyBAQAogCiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWZzX3N5bWxpbmtfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGVmc19zeW1saW5rX2FvcHM7CiAKIGV4dGVybiB2b2lkIGVmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBlZnNfYmxvY2tfdCBlZnNfbWFwX2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBlZnNfYmxvY2tfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi1lbS5oIGIvaW5jbHVkZS9saW51eC9lbGYtZW0uaAppbmRleCAxMTRhOTZkLi42YTU3OTZjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi1lbS5oCkBAIC0xMSw3ICsxMSwxMiBAQAogI2RlZmluZSBFTV80ODYJCTYJLyogUGVyaGFwcyBkaXN1c2VkICovCiAjZGVmaW5lIEVNXzg2MAkJNwogI2RlZmluZSBFTV9NSVBTCQk4CS8qIE1JUFMgUjMwMDAgKG9mZmljaWFsbHksIGJpZy1lbmRpYW4gb25seSkgKi8KKwkJCQkvKiBOZXh0IHR3byBhcmUgaGlzdG9yaWNhbCBhbmQgYmluYXJpZXMgYW5kCisJCQkJICAgbW9kdWxlcyBvZiB0aGVzZSB0eXBlcyB3aWxsIGJlIHJlamVjdGVkIGJ5CisJCQkJICAgTGludXguICAqLworI2RlZmluZSBFTV9NSVBTX1JTM19MRQkxMAkvKiBNSVBTIFIzMDAwIGxpdHRsZS1lbmRpYW4gKi8KICNkZWZpbmUgRU1fTUlQU19SUzRfQkUJMTAJLyogTUlQUyBSNDAwMCBiaWctZW5kaWFuICovCisKICNkZWZpbmUgRU1fUEFSSVNDCTE1CS8qIEhQUEEgKi8KICNkZWZpbmUgRU1fU1BBUkMzMlBMVVMJMTgJLyogU3VuJ3MgInY4cGx1cyIgKi8KICNkZWZpbmUgRU1fUFBDCQkyMAkvKiBQb3dlclBDICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vyci5oIGIvaW5jbHVkZS9saW51eC9lcnIuaAppbmRleCBmZjcxZDJhZi4uY2QzYjM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Vyci5oCkBAIC0xMyw3ICsxMyw5IEBACiAgKiBUaGlzIHNob3VsZCBiZSBhIHBlci1hcmNoaXRlY3R1cmUgdGhpbmcsIHRvIGFsbG93IGRpZmZlcmVudAogICogZXJyb3IgYW5kIHBvaW50ZXIgZGVjaXNpb25zLgogICovCi0jZGVmaW5lIElTX0VSUl9WQUxVRSh4KSB1bmxpa2VseSgoeCkgPiAodW5zaWduZWQgbG9uZyktMTAwMEwpCisjZGVmaW5lIE1BWF9FUlJOTwk0MDk1CisKKyNkZWZpbmUgSVNfRVJSX1ZBTFVFKHgpIHVubGlrZWx5KCh4KSA+PSAodW5zaWduZWQgbG9uZyktTUFYX0VSUk5PKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCAwN2EwOGU5Li5mZmVmZWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC0zODAsNyArMzgwLDYgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTU1OCw3ICs1NTcsNyBAQAogICogRnJhbWUgYnVmZmVyIG9wZXJhdGlvbnMKICAqCiAgKiBMT0NLSU5HIE5PVEU6IHRob3NlIGZ1bmN0aW9ucyBtdXN0IF9BTExfIGJlIGNhbGxlZCB3aXRoIHRoZSBjb25zb2xlCi0gKiBzZW1hcGhvcmUgaGVsZCwgdGhpcyBpcyB0aGUgb25seSBzdWl0YWJsZSBsb2NraW5nIG1lY2FuaXNtIHdlIGhhdmUKKyAqIHNlbWFwaG9yZSBoZWxkLCB0aGlzIGlzIHRoZSBvbmx5IHN1aXRhYmxlIGxvY2tpbmcgbWVjaGFuaXNtIHdlIGhhdmUKICAqIGluIDIuNi4gU29tZSBtYXkgYmUgY2FsbGVkIGF0IGludGVycnVwdCB0aW1lIGF0IHRoaXMgcG9pbnQgdGhvdWdoLgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAyZDhiMzQ4Li4xMzRiMzIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl1bnNpZ25lZCBpbnQJCXRydW5jYXRlX2NvdW50OwkvKiBDb3ZlciByYWNlIGNvbmRpdGlvbiB3aXRoIHRydW5jYXRlICovCiAJdW5zaWduZWQgbG9uZwkJbnJwYWdlczsJLyogbnVtYmVyIG9mIHRvdGFsIHBhZ2VzICovCiAJcGdvZmZfdAkJCXdyaXRlYmFja19pbmRleDsvKiB3cml0ZWJhY2sgc3RhcnRzIGhlcmUgKi8KLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wczsJLyogbWV0aG9kcyAqLworCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFfb3BzOwkvKiBtZXRob2RzICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBlcnJvciBiaXRzL2dmcCBtYXNrICovCiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJhY2tpbmdfZGV2X2luZm87IC8qIGRldmljZSByZWFkYWhlYWQsIGV0YyAqLwogCXNwaW5sb2NrX3QJCXByaXZhdGVfbG9jazsJLyogZm9yIHVzZSBieSB0aGUgYWRkcmVzc19zcGFjZSAqLwpAQCAtNDM2LDYgKzQzNiwyMSBAQAogfTsKIAogLyoKKyAqIGJkZXYtPmJkX211dGV4IG5lc3Rpbmcgc3ViY2xhc3NlcyBmb3IgdGhlIGxvY2sgdmFsaWRhdG9yOgorICoKKyAqIDA6IG5vcm1hbAorICogMTogJ3dob2xlJworICogMjogJ3BhcnRpdGlvbicKKyAqLworZW51bSBiZGV2X2JkX211dGV4X2xvY2tfY2xhc3MKK3sKKwlCRF9NVVRFWF9OT1JNQUwsCisJQkRfTVVURVhfV0hPTEUsCisJQkRfTVVURVhfUEFSVElUSU9OCit9OworCisKKy8qCiAgKiBSYWRpeC10cmVlIHRhZ3MsIGZvciB0YWdnaW5nIGRpcnR5IGFuZCB3cml0ZWJhY2sgcGFnZXMgd2l0aGluIHRoZSBwYWdlY2FjaGUKICAqIHJhZGl4IHRyZWVzCiAgKi8KQEAgLTU0Myw2ICs1NTgsMjUgQEAKIH07CiAKIC8qCisgKiBpbm9kZS0+aV9tdXRleCBuZXN0aW5nIHN1YmNsYXNzZXMgZm9yIHRoZSBsb2NrIHZhbGlkYXRvcjoKKyAqCisgKiAwOiB0aGUgb2JqZWN0IG9mIHRoZSBjdXJyZW50IFZGUyBvcGVyYXRpb24KKyAqIDE6IHBhcmVudAorICogMjogY2hpbGQvdGFyZ2V0CisgKiAzOiBxdW90YSBmaWxlCisgKgorICogVGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiB0aGVzZSBjbGFzc2VzIGlzCisgKiBwYXJlbnQgLT4gY2hpbGQgLT4gbm9ybWFsIC0+IHF1b3RhCisgKi8KK2VudW0gaW5vZGVfaV9tdXRleF9sb2NrX2NsYXNzCit7CisJSV9NVVRFWF9OT1JNQUwsCisJSV9NVVRFWF9QQVJFTlQsCisJSV9NVVRFWF9DSElMRCwKKwlJX01VVEVYX1FVT1RBCit9OworCisvKgogICogTk9URTogaW4gYSAzMmJpdCBhcmNoIHdpdGggYSBwcmVlbXB0YWJsZSBrZXJuZWwgYW5kCiAgKiBhbiBVUCBjb21waWxlIHRoZSBpX3NpemVfcmVhZC93cml0ZSBtdXN0IGJlIGF0b21pYwogICogd2l0aCByZXNwZWN0IHRvIHRoZSBsb2NhbCBjcHUgKHVubGlrZSB3aXRoIHByZWVtcHQgZGlzYWJsZWQpLApAQCAtMTI3Niw2ICsxMzEwLDggQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqIG5leHQ7CiAJc3RydWN0IGxpc3RfaGVhZCBmc19zdXBlcnM7CisJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHNfbG9ja19rZXk7CisJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHNfdW1vdW50X2tleTsKIH07CiAKIGV4dGVybiBpbnQgZ2V0X3NiX2JkZXYoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCkBAIC0xNDA0LDggKzE0NDAsOSBAQAogZXh0ZXJuIHZvaWQgYmRfZm9yZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgYmRwdXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2J5X2Rldm51bShkZXZfdCwgdW5zaWduZWQpOworZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKm9wZW5fcGFydGl0aW9uX2J5X2Rldm51bShkZXZfdCwgdW5zaWduZWQpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOwotZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Nocl9mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmFkX3NvY2tfZm9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9maWZvX2ZvcHM7CkBAIC0xNDE0LDYgKzE0NTEsNyBAQAogZXh0ZXJuIGxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBtb2RlX3QsIHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBibGtkZXZfcHV0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIGludCBiZF9jbGFpbShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHZvaWQgKik7CiBleHRlcm4gdm9pZCBiZF9yZWxlYXNlKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggMzQ5OGEwYy4uZTRhZjU3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMTEyLDggKzExMiw2IEBACiAJc2VjdG9yX3QgY2FwYWNpdHk7CiAKIAlpbnQgZmxhZ3M7Ci0JY2hhciBkZXZmc19uYW1lWzY0XTsJCS8qIGRldmZzIGNyYXAgKi8KLQlpbnQgbnVtYmVyOwkJCS8qIG1vcmUgb2YgdGhlIHNhbWUgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkcml2ZXJmc19kZXY7CiAJc3RydWN0IGtvYmplY3Qga29iajsKIAlzdHJ1Y3Qga29iamVjdCAqaG9sZGVyX2RpcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKaW5kZXggMTE0YWU1OC4uNTBkOGI1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTg2LDkgKzg3LDYgQEAKICMgZGVmaW5lIHN5bmNocm9uaXplX2lycShpcnEpCWJhcnJpZXIoKQogI2VuZGlmCiAKLSNkZWZpbmUgbm1pX2VudGVyKCkJCWlycV9lbnRlcigpCi0jZGVmaW5lIG5taV9leGl0KCkJCXN1Yl9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKQotCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKICNpZm5kZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKQEAgLTk3LDEyICs5NSwzNSBAQAogfQogI2VuZGlmCiAKKy8qCisgKiBJdCBpcyBzYWZlIHRvIGRvIG5vbi1hdG9taWMgb3BzIG9uIC0+aGFyZGlycV9jb250ZXh0LAorICogYmVjYXVzZSBOTUkgaGFuZGxlcnMgbWF5IG5vdCBwcmVlbXB0IGFuZCB0aGUgb3BzIGFyZQorICogYWx3YXlzIGJhbGFuY2VkLCBzbyB0aGUgaW50ZXJydXB0ZWQgdmFsdWUgb2YgLT5oYXJkaXJxX2NvbnRleHQKKyAqIHdpbGwgYWx3YXlzIGJlIHJlc3RvcmVkLgorICovCiAjZGVmaW5lIGlycV9lbnRlcigpCQkJCQlcCiAJZG8gewkJCQkJCVwKIAkJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CQlcCiAJCWFkZF9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKTsJXAorCQl0cmFjZV9oYXJkaXJxX2VudGVyKCk7CQkJXAogCX0gd2hpbGUgKDApCiAKKy8qCisgKiBFeGl0IGlycSBjb250ZXh0IHdpdGhvdXQgcHJvY2Vzc2luZyBzb2Z0aXJxczoKKyAqLworI2RlZmluZSBfX2lycV9leGl0KCkJCQkJCVwKKwlkbyB7CQkJCQkJXAorCQl0cmFjZV9oYXJkaXJxX2V4aXQoKTsJCQlcCisJCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwkJXAorCQlzdWJfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7CVwKKwl9IHdoaWxlICgwKQorCisvKgorICogRXhpdCBpcnEgY29udGV4dCBhbmQgcHJvY2VzcyBzb2Z0aXJxcyBpZiBuZWVkZWQ6CisgKi8KIGV4dGVybiB2b2lkIGlycV9leGl0KHZvaWQpOwogCisjZGVmaW5lIG5taV9lbnRlcigpCQlkbyB7IGxvY2tkZXBfb2ZmKCk7IGlycV9lbnRlcigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBubWlfZXhpdCgpCQlkbyB7IF9faXJxX2V4aXQoKTsgbG9ja2RlcF9vbigpOyB9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogTElOVVhfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCmluZGV4IDA3ZDczMDUuLmU0YmNjYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCkBAIC05MSw2ICs5MSw3IEBACiAJa3RpbWVfdAkJCSgqZ2V0X3NvZnRpcnFfdGltZSkodm9pZCk7CiAJc3RydWN0IGhydGltZXIJCSpjdXJyX3RpbWVyOwogCWt0aW1lX3QJCQlzb2Z0aXJxX3RpbWU7CisJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGVmN2JlZjIuLmRjN2FiZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtNTUyLDcgKzU1Miw2IEBACiAJc3RydWN0IGhkX2RyaXZlaWQJKmlkOwkvKiBkcml2ZSBtb2RlbCBpZGVudGlmaWNhdGlvbiBpbmZvICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwkvKiAvcHJvYy9pZGUvIGRpcmVjdG9yeSBlbnRyeSAqLwogCXN0cnVjdCBpZGVfc2V0dGluZ3NfcyAqc2V0dGluZ3M7LyogL3Byb2MvaWRlLyBkcml2ZSBzZXR0aW5ncyAqLwotCWNoYXIJCWRldmZzX25hbWVbNjRdOwkvKiBkZXZmcyBjcmFwICovCiAKIAlzdHJ1Y3QgaHdpZl9zCQkqaHdpZjsJLyogYWN0dWFsbHkgKGlkZV9od2lmX3QgKikgKi8KIApAQCAtNzkzLDYgKzc5Miw3IEBACiAJdW5zaWduZWQJYXV0b19wb2xsICA6IDE7IC8qIHN1cHBvcnRzIG5vcCBhdXRvLXBvbGwgKi8KIAl1bnNpZ25lZAlzZ19tYXBwZWQgIDogMTsJLyogc2dfdGFibGUgYW5kIHNnX25lbnRzIGFyZSByZWFkeSAqLwogCXVuc2lnbmVkCW5vX2lvXzMyYml0IDogMTsgLyogMSA9IGNhbiBub3QgZG8gMzItYml0IElPIG9wcyAqLworCXVuc2lnbmVkCWVycl9zdG9wc19maWZvIDogMTsgLyogMT1kYXRhIEZJRk8gaXMgY2xlYXJlZCBieSBhbiBlcnJvciAqLwogCiAJc3RydWN0IGRldmljZQlnZW5kZXY7CiAJc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOyAvKiBUbyBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAKICAqIGlkZV9kcml2ZV90LT5od2lmOiBjb25zdGFudCwgbm8gbG9ja2luZwogICovCiAKLSNkZWZpbmUgbG9jYWxfaXJxX3NldChmbGFncykJZG8geyBsb2NhbF9zYXZlX2ZsYWdzKChmbGFncykpOyBsb2NhbF9pcnFfZW5hYmxlKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2FsX2lycV9zZXQoZmxhZ3MpCWRvIHsgbG9jYWxfc2F2ZV9mbGFncygoZmxhZ3MpKTsgbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7IH0gd2hpbGUgKDApCiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgaWRlX2J1c190eXBlOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkci5oIGIvaW5jbHVkZS9saW51eC9pZHIuaAppbmRleCBmNTU5YTcxLi44MjY4MDM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRyLmgKQEAgLTY2LDcgKzY2LDcgQEAKIAkuaWRfZnJlZQk9IE5VTEwsCQkJCQlcCiAJLmxheWVycyAJPSAwLAkJCQkJXAogCS5pZF9mcmVlX2NudAk9IDAsCQkJCQlcCi0JLmxvY2sJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCVwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLmxvY2spLAlcCiB9CiAjZGVmaW5lIERFRklORV9JRFIobmFtZSkJc3RydWN0IGlkciBuYW1lID0gSURSX0lOSVQobmFtZSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggM2EyNTY5NS4uNjBhYWMyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0zLDYgKzMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAKICNkZWZpbmUgSU5JVF9GRFRBQkxFIFwKIHsJCQkJCQkJXApAQCAtMjEsNyArMjMsNyBAQAogCS5jb3VudAkJPSBBVE9NSUNfSU5JVCgxKSwgCQlcCiAJLmZkdAkJPSAmaW5pdF9maWxlcy5mZHRhYiwgCQlcCiAJLmZkdGFiCQk9IElOSVRfRkRUQUJMRSwJCQlcCi0JLmZpbGVfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwgCQlcCisJLmZpbGVfbG9jawk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfdGFzay5maWxlX2xvY2spLCBcCiAJLm5leHRfZmQJPSAwLCAJCQkJXAogCS5jbG9zZV9vbl9leGVjX2luaXQgPSB7IHsgMCwgfSB9LCAJCVwKIAkub3Blbl9mZHNfaW5pdAk9IHsgeyAwLCB9IH0sIAkJCVwKQEAgLTM2LDcgKzM4LDcgQEAKIAkudXNlcl9pZAk9IDAsCQkJCVwKIAkubmV4dAkJPSBOVUxMLAkJCQlcCiAJLndhaXQJCT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIobmFtZS53YWl0KSwgXAotCS5jdHhfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCVwKKwkuY3R4X2xvY2sJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLmN0eF9sb2NrKSwgXAogCS5yZXFzX2FjdGl2ZQk9IDBVLAkJCQlcCiAJLm1heF9yZXFzCT0gfjBVLAkJCQlcCiB9CkBAIC00OCw3ICs1MCw3IEBACiAJLm1tX3VzZXJzCT0gQVRPTUlDX0lOSVQoMiksIAkJCVwKIAkubW1fY291bnQJPSBBVE9NSUNfSU5JVCgxKSwgCQkJXAogCS5tbWFwX3NlbQk9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZS5tbWFwX3NlbSksCVwKLQkucGFnZV90YWJsZV9sb2NrID0gIFNQSU5fTE9DS19VTkxPQ0tFRCwgCQlcCisJLnBhZ2VfdGFibGVfbG9jayA9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLnBhZ2VfdGFibGVfbG9jayksCVwKIAkubW1saXN0CQk9IExJU1RfSEVBRF9JTklUKG5hbWUubW1saXN0KSwJCVwKIAkuY3B1X3ZtX21hc2sJPSBDUFVfTUFTS19BTEwsCQkJCVwKIH0KQEAgLTY5LDcgKzcxLDcgQEAKICNkZWZpbmUgSU5JVF9TSUdIQU5EKHNpZ2hhbmQpIHsJCQkJCQlcCiAJLmNvdW50CQk9IEFUT01JQ19JTklUKDEpLCAJCQkJXAogCS5hY3Rpb24JCT0geyB7IHsgLnNhX2hhbmRsZXIgPSBOVUxMLCB9IH0sIH0sCQlcCi0JLnNpZ2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsIAkJCQlcCisJLnNpZ2xvY2sJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChzaWdoYW5kLnNpZ2xvY2spLAlcCiB9CiAKIGV4dGVybiBzdHJ1Y3QgZ3JvdXBfaW5mbyBpbml0X2dyb3VwczsKQEAgLTExOSwxMiArMTIxLDEzIEBACiAJCS5saXN0ID0gTElTVF9IRUFEX0lOSVQodHNrLnBlbmRpbmcubGlzdCksCQlcCiAJCS5zaWduYWwgPSB7ezB9fX0sCQkJCQlcCiAJLmJsb2NrZWQJPSB7ezB9fSwJCQkJCVwKLQkuYWxsb2NfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJXAorCS5hbGxvY19sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQodHNrLmFsbG9jX2xvY2spLAkJXAogCS5qb3VybmFsX2luZm8JPSBOVUxMLAkJCQkJCVwKIAkuY3B1X3RpbWVycwk9IElOSVRfQ1BVX1RJTUVSUyh0c2suY3B1X3RpbWVycyksCQlcCiAJLmZzX2V4Y2wJPSBBVE9NSUNfSU5JVCgwKSwJCQkJXAogCS5waV9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCQlcCi0JSU5JVF9SVF9NVVRFWEVTKHRzaykJCQkJCQlcCisJSU5JVF9UUkFDRV9JUlFGTEFHUwkJCQkJCVwKKwlJTklUX0xPQ0tERVAJCQkJCQkJXAogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDcwNzQxZTEuLmQ1YWZlZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMTAsMTAgKzEwLDYwIEBACiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAorLyoKKyAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIElPUkVTT1VSQ0VfSVJRXyogZGVmaW5lcyBpbgorICogbGludXgvaW9wb3J0LmggdG8gc2VsZWN0IHRoZSBpbnRlcnJ1cHQgbGluZSBiZWhhdmlvdXIuICBXaGVuCisgKiByZXF1ZXN0aW5nIGFuIGludGVycnVwdCB3aXRob3V0IHNwZWNpZnlpbmcgYSBJUlFGX1RSSUdHRVIsIHRoZQorICogc2V0dGluZyBzaG91bGQgYmUgYXNzdW1lZCB0byBiZSAiYXMgYWxyZWFkeSBjb25maWd1cmVkIiwgd2hpY2gKKyAqIG1heSBiZSBhcyBwZXIgbWFjaGluZSBvciBmaXJtd2FyZSBpbml0aWFsaXNhdGlvbi4KKyAqLworI2RlZmluZSBJUlFGX1RSSUdHRVJfTk9ORQkweDAwMDAwMDAwCisjZGVmaW5lIElSUUZfVFJJR0dFUl9SSVNJTkcJMHgwMDAwMDAwMQorI2RlZmluZSBJUlFGX1RSSUdHRVJfRkFMTElORwkweDAwMDAwMDAyCisjZGVmaW5lIElSUUZfVFJJR0dFUl9ISUdICTB4MDAwMDAwMDQKKyNkZWZpbmUgSVJRRl9UUklHR0VSX0xPVwkweDAwMDAwMDA4CisjZGVmaW5lIElSUUZfVFJJR0dFUl9NQVNLCShJUlFGX1RSSUdHRVJfSElHSCB8IElSUUZfVFJJR0dFUl9MT1cgfCBcCisJCQkJIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORykKKyNkZWZpbmUgSVJRRl9UUklHR0VSX1BST0JFCTB4MDAwMDAwMTAKKworLyoKKyAqIFRoZXNlIGZsYWdzIHVzZWQgb25seSBieSB0aGUga2VybmVsIGFzIHBhcnQgb2YgdGhlCisgKiBpcnEgaGFuZGxpbmcgcm91dGluZXMuCisgKgorICogSVJRRl9ESVNBQkxFRCAtIGtlZXAgaXJxcyBkaXNhYmxlZCB3aGVuIGNhbGxpbmcgdGhlIGFjdGlvbiBoYW5kbGVyCisgKiBJUlFGX1NBTVBMRV9SQU5ET00gLSBpcnEgaXMgdXNlZCB0byBmZWVkIHRoZSByYW5kb20gZ2VuZXJhdG9yCisgKiBJUlFGX1NIQVJFRCAtIGFsbG93IHNoYXJpbmcgdGhlIGlycSBhbW9uZyBzZXZlcmFsIGRldmljZXMKKyAqIElSUUZfUFJPQkVfU0hBUkVEIC0gc2V0IGJ5IGNhbGxlcnMgd2hlbiB0aGV5IGV4cGVjdCBzaGFyaW5nIG1pc21hdGNoZXMgdG8gb2NjdXIKKyAqIElSUUZfVElNRVIgLSBGbGFnIHRvIG1hcmsgdGhpcyBpbnRlcnJ1cHQgYXMgdGltZXIgaW50ZXJydXB0CisgKi8KKyNkZWZpbmUgSVJRRl9ESVNBQkxFRAkJMHgwMDAwMDAyMAorI2RlZmluZSBJUlFGX1NBTVBMRV9SQU5ET00JMHgwMDAwMDA0MAorI2RlZmluZSBJUlFGX1NIQVJFRAkJMHgwMDAwMDA4MAorI2RlZmluZSBJUlFGX1BST0JFX1NIQVJFRAkweDAwMDAwMTAwCisjZGVmaW5lIElSUUZfVElNRVIJCTB4MDAwMDAyMDAKKyNkZWZpbmUgSVJRRl9QRVJDUFUJCTB4MDAwMDA0MDAKKworLyoKKyAqIE1pZ3JhdGlvbiBoZWxwZXJzLiBTY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4gMS8yMDA3CisgKiBEbyBub3QgdXNlIGZvciBuZXcgY29kZSAhCisgKi8KKyNkZWZpbmUgU0FfSU5URVJSVVBUCQlJUlFGX0RJU0FCTEVECisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00JSVJRRl9TQU1QTEVfUkFORE9NCisjZGVmaW5lIFNBX1NISVJRCQlJUlFGX1NIQVJFRAorI2RlZmluZSBTQV9QUk9CRUlSUQkJSVJRRl9QUk9CRV9TSEFSRUQKKyNkZWZpbmUgU0FfUEVSQ1BVCQlJUlFGX1BFUkNQVQorCisjZGVmaW5lIFNBX1RSSUdHRVJfTE9XCQlJUlFGX1RSSUdHRVJfTE9XCisjZGVmaW5lIFNBX1RSSUdHRVJfSElHSAkJSVJRRl9UUklHR0VSX0hJR0gKKyNkZWZpbmUgU0FfVFJJR0dFUl9GQUxMSU5HCUlSUUZfVFJJR0dFUl9GQUxMSU5HCisjZGVmaW5lIFNBX1RSSUdHRVJfUklTSU5HCUlSUUZfVFJJR0dFUl9SSVNJTkcKKyNkZWZpbmUgU0FfVFJJR0dFUl9NQVNLCQlJUlFGX1RSSUdHRVJfTUFTSworCiBzdHJ1Y3QgaXJxYWN0aW9uIHsKIAlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzEsMTIgKzgxLDkwIEBACiAJCSAgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICosIHZvaWQgKik7CiBleHRlcm4gdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CiAKKy8qCisgKiBPbiBsb2NrZGVwIHdlIGRvbnQgd2FudCB0byBlbmFibGUgaGFyZGlycXMgaW4gaGFyZGlycQorICogY29udGV4dC4gVXNlIGxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpIHRvIGFubm90YXRlCisgKiBrZXJuZWwgY29kZSB0aGF0IGhhcyB0byBkbyB0aGlzIG5ldmVydGhlbGVzcyAocHJldHR5IG11Y2gKKyAqIHRoZSBvbmx5IHZhbGlkIGNhc2UgaXMgZm9yIG9sZC9icm9rZW4gaGFyZHdhcmUgdGhhdCBpcworICogaW5zYW5lbHkgc2xvdykuCisgKgorICogTk9URTogaW4gdGhlb3J5IHRoaXMgbWlnaHQgYnJlYWsgZnJhZ2lsZSBjb2RlIHRoYXQgcmVsaWVzCisgKiBvbiBoYXJkaXJxIGRlbGl2ZXJ5IC0gaW4gcHJhY3RpY2Ugd2UgZG9udCBzZWVtIHRvIGhhdmUgc3VjaAorICogcGxhY2VzIGxlZnQuIFNvIHRoZSBvbmx5IGVmZmVjdCBzaG91bGQgYmUgc2xpZ2h0bHkgaW5jcmVhc2VkCisgKiBpcnFzLW9mZiBsYXRlbmNpZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorIyBkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCkJZG8geyB9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIGxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpCWxvY2FsX2lycV9lbmFibGUoKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisvKgorICogU3BlY2lhbCBsb2NrZGVwIHZhcmlhbnRzIG9mIGlycSBkaXNhYmxpbmcvZW5hYmxpbmcuCisgKiBUaGVzZSBzaG91bGQgYmUgdXNlZCBmb3IgbG9ja2luZyBjb25zdHJ1Y3RzIHRoYXQKKyAqIGtub3cgdGhhdCBhIHBhcnRpY3VsYXIgaXJxIGNvbnRleHQgd2hpY2ggaXMgZGlzYWJsZWQsCisgKiBhbmQgd2hpY2ggaXMgdGhlIG9ubHkgaXJxLWNvbnRleHQgdXNlciBvZiBhIGxvY2ssCisgKiB0aGF0IGl0J3Mgc2FmZSB0byB0YWtlIHRoZSBsb2NrIGluIHRoZSBpcnEtZGlzYWJsZWQKKyAqIHNlY3Rpb24gd2l0aG91dCBkaXNhYmxpbmcgaGFyZGlycXMuCisgKgorICogT24gIUNPTkZJR19MT0NLREVQIHRoZXkgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIG5vcm1hbAorICogaXJxIGRpc2FibGUvZW5hYmxlIG1ldGhvZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2lycV9ub3N5bmNfbG9ja2RlcCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworI2lmZGVmIENPTkZJR19MT0NLREVQCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKICNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9pcnFfbG9ja2RlcCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRpc2FibGVfaXJxKGlycSk7CisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfaXJxX2xvY2tkZXAodW5zaWduZWQgaW50IGlycSkKK3sKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCWxvY2FsX2lycV9lbmFibGUoKTsKKyNlbmRpZgorCWVuYWJsZV9pcnEoaXJxKTsKK30KKworLyogSVJRIHdha2V1cCAoUE0pIGNvbnRyb2w6ICovCitleHRlcm4gaW50IHNldF9pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pOworCitzdGF0aWMgaW5saW5lIGludCBlbmFibGVfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gc2V0X2lycV93YWtlKGlycSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpc2FibGVfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gc2V0X2lycV93YWtlKGlycSwgMCk7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfR0VORVJJQ19IQVJESVJRUyAqLworLyoKKyAqIE5PVEU6IG5vbi1nZW5pcnEgYXJjaGl0ZWN0dXJlcywgaWYgdGhleSB3YW50IHRvIHN1cHBvcnQgdGhlIGxvY2sKKyAqIHZhbGlkYXRvciBuZWVkIHRvIGRlZmluZSB0aGUgbWV0aG9kcyBiZWxvdyBpbiB0aGVpciBhc20vaXJxLmgKKyAqIGZpbGVzLCB1bmRlciBhbiAjaWZkZWYgQ09ORklHX0xPQ0tERVAgc2VjdGlvbi4KKyAqLworIyBpZm5kZWYgQ09ORklHX0xPQ0tERVAKKyMgIGRlZmluZSBkaXNhYmxlX2lycV9ub3N5bmNfbG9ja2RlcChpcnEpCWRpc2FibGVfaXJxX25vc3luYyhpcnEpCisjICBkZWZpbmUgZGlzYWJsZV9pcnFfbG9ja2RlcChpcnEpCQlkaXNhYmxlX2lycShpcnEpCisjICBkZWZpbmUgZW5hYmxlX2lycV9sb2NrZGVwKGlycSkJCWVuYWJsZV9pcnEoaXJxKQorIyBlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIAogI2lmbmRlZiBfX0FSQ0hfU0VUX1NPRlRJUlFfUEVORElORwogI2RlZmluZSBzZXRfc29mdGlycV9wZW5kaW5nKHgpIChsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSA9ICh4KSkKQEAgLTcyLDEzICsyMDAsMTEgQEAKICNkZWZpbmUgc2F2ZV9hbmRfY2xpKHgpCXNhdmVfYW5kX2NsaSgmeCkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLS8qIFNvZnRJUlEgcHJpbWl0aXZlcy4gICovCi0jZGVmaW5lIGxvY2FsX2JoX2Rpc2FibGUoKSBcCi0JCWRvIHsgYWRkX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQpOyBiYXJyaWVyKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9fbG9jYWxfYmhfZW5hYmxlKCkgXAotCQlkbyB7IGJhcnJpZXIoKTsgc3ViX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQpOyB9IHdoaWxlICgwKQotCitleHRlcm4gdm9pZCBsb2NhbF9iaF9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgX19sb2NhbF9iaF9lbmFibGUodm9pZCk7CitleHRlcm4gdm9pZCBfbG9jYWxfYmhfZW5hYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgbG9jYWxfYmhfZW5hYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9jYWxfYmhfZW5hYmxlX2lwKHVuc2lnbmVkIGxvbmcgaXApOwogCiAvKiBQTEVBU0UsIGF2b2lkIHRvIGFsbG9jYXRlIG5ldyBzb2Z0aXJxcywgaWYgeW91IG5lZWQgbm90IF9yZWFsbHlfIGhpZ2gKICAgIGZyZXF1ZW5jeSB0aHJlYWRlZCBqb2Igc2NoZWR1bGluZy4gRm9yIGFsbW9zdCBhbGwgdGhlIHB1cnBvc2VzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaAppbmRleCBlZGZjNzMzLi41NjEyZGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKQEAgLTksMTMgKzksMTUgQEAKICNkZWZpbmUgX0xJTlVYX0lPUE9SVF9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKgogICogUmVzb3VyY2VzIGFyZSB0cmVlLWxpa2UsIGFsbG93aW5nCiAgKiBuZXN0aW5nIGV0Yy4uCiAgKi8KIHN0cnVjdCByZXNvdXJjZSB7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OworCXJlc291cmNlX3NpemVfdCBlbmQ7CiAJY29uc3QgY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgKnNpYmxpbmcsICpjaGlsZDsKIH07CkBAIC01Myw2ICs1NSw3IEBACiAjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UJCSgxPDwxKQogI2RlZmluZSBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwJKDE8PDIpCiAjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMCQkoMTw8MykKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFCSgxPDw0KQogCiAvKiBJU0EgUG5QIERNQSBzcGVjaWZpYyBiaXRzIChJT1JFU09VUkNFX0JJVFMpICovCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1RZUEVfTUFTSwkoMzw8MCkKQEAgLTk2LDE0ICs5OSwxMyBAQAogZXh0ZXJuIGludCByZWxlYXNlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKIGV4dGVybiBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMgaW50IGluc2VydF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIGludCBhbGxvY2F0ZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAotCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCisJCQkgICAgIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKIAkJCSAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAogCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7Ci1pbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkgICAgdW5zaWduZWQgbG9uZyBzaXplKTsKK2ludCBhZGp1c3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJICAgIHJlc291cmNlX3NpemVfdCBzaXplKTsKIAogLyogZ2V0IHJlZ2lzdGVyZWQgU1lTVEVNX1JBTSByZXNvdXJjZXMgaW4gc3BlY2lmaWVkIGFyZWEgKi8KIGV4dGVybiBpbnQgZmluZF9uZXh0X3N5c3RlbV9yYW0oc3RydWN0IHJlc291cmNlICpyZXMpOwpAQCAtMTEzLDE3ICsxMTUsMjEgQEAKICNkZWZpbmUgcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LG4sbmFtZSkgX19yZXF1ZXN0X3JlZ2lvbigmaW9tZW1fcmVzb3VyY2UsIChzdGFydCksIChuKSwgKG5hbWUpKQogI2RlZmluZSByZW5hbWVfcmVnaW9uKHJlZ2lvbiwgbmV3bmFtZSkgZG8geyAocmVnaW9uKS0+bmFtZSA9IChuZXduYW1lKTsgfSB3aGlsZSAoMCkKIAotZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqIF9fcmVxdWVzdF9yZWdpb24oc3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbiwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gc3RydWN0IHJlc291cmNlICogX19yZXF1ZXN0X3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkJCQlyZXNvdXJjZV9zaXplX3QgbiwgY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qIENvbXBhdGliaWxpdHkgY3J1ZnQgKi8KICNkZWZpbmUgcmVsZWFzZV9yZWdpb24oc3RhcnQsbikJX19yZWxlYXNlX3JlZ2lvbigmaW9wb3J0X3Jlc291cmNlLCAoc3RhcnQpLCAobikpCiAjZGVmaW5lIGNoZWNrX21lbV9yZWdpb24oc3RhcnQsbikJX19jaGVja19yZWdpb24oJmlvbWVtX3Jlc291cmNlLCAoc3RhcnQpLCAobikpCiAjZGVmaW5lIHJlbGVhc2VfbWVtX3JlZ2lvbihzdGFydCxuKQlfX3JlbGVhc2VfcmVnaW9uKCZpb21lbV9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pKQogCi1leHRlcm4gaW50IF9fY2hlY2tfcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIF9fcmVsZWFzZV9yZWdpb24oc3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCBfX2NoZWNrX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpOworZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCXJlc291cmNlX3NpemVfdCk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCBjaGVja19yZWdpb24odW5zaWduZWQgbG9uZyBzLCB1bnNpZ25lZCBsb25nIG4pCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgY2hlY2tfcmVnaW9uKHJlc291cmNlX3NpemVfdCBzLAorCQkJCQkJcmVzb3VyY2Vfc2l6ZV90IG4pCiB7CiAJcmV0dXJuIF9fY2hlY2tfcmVnaW9uKCZpb3BvcnRfcmVzb3VyY2UsIHMsIG4pOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggNjc2ZTAwZC4uYjQ4ZWFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfX2lycV9oCi0jZGVmaW5lIF9faXJxX2gKKyNpZm5kZWYgX0xJTlVYX0lSUV9ICisjZGVmaW5lIF9MSU5VWF9JUlFfSAogCiAvKgogICogUGxlYXNlIGRvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBpbiBnZW5lcmljIGNvZGUuICBUaGVyZSBpcyBjdXJyZW50bHkKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX1MzOTApCisjaWZuZGVmIENPTkZJR19TMzkwCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KQEAgLTI0LDg0ICsyNCwxNzIgQEAKIAogLyoKICAqIElSUSBsaW5lIHN0YXR1cy4KKyAqCisgKiBCaXRzIDAtMTYgYXJlIHJlc2VydmVkIGZvciB0aGUgSVJRRl8qIGJpdHMgaW4gbGludXgvaW50ZXJydXB0LmgKKyAqCisgKiBJUlEgdHlwZXMKICAqLwotI2RlZmluZSBJUlFfSU5QUk9HUkVTUwkxCS8qIElSUSBoYW5kbGVyIGFjdGl2ZSAtIGRvIG5vdCBlbnRlciEgKi8KLSNkZWZpbmUgSVJRX0RJU0FCTEVECTIJLyogSVJRIGRpc2FibGVkIC0gZG8gbm90IGVudGVyISAqLwotI2RlZmluZSBJUlFfUEVORElORwk0CS8qIElSUSBwZW5kaW5nIC0gcmVwbGF5IG9uIGVuYWJsZSAqLwotI2RlZmluZSBJUlFfUkVQTEFZCTgJLyogSVJRIGhhcyBiZWVuIHJlcGxheWVkIGJ1dCBub3QgYWNrZWQgeWV0ICovCi0jZGVmaW5lIElSUV9BVVRPREVURUNUCTE2CS8qIElSUSBpcyBiZWluZyBhdXRvZGV0ZWN0ZWQgKi8KLSNkZWZpbmUgSVJRX1dBSVRJTkcJMzIJLyogSVJRIG5vdCB5ZXQgc2VlbiAtIGZvciBhdXRvZGV0ZWN0aW9uICovCi0jZGVmaW5lIElSUV9MRVZFTAk2NAkvKiBJUlEgbGV2ZWwgdHJpZ2dlcmVkICovCi0jZGVmaW5lIElSUV9NQVNLRUQJMTI4CS8qIElSUSBtYXNrZWQgLSBzaG91bGRuJ3QgYmUgc2VlbiBhZ2FpbiAqLwotI2lmIGRlZmluZWQoQVJDSF9IQVNfSVJRX1BFUl9DUFUpCi0jIGRlZmluZSBJUlFfUEVSX0NQVQkyNTYJLyogSVJRIGlzIHBlciBDUFUgKi8KKyNkZWZpbmUgSVJRX1RZUEVfTk9ORQkJMHgwMDAwMDAwMAkvKiBEZWZhdWx0LCB1bnNwZWNpZmllZCB0eXBlICovCisjZGVmaW5lIElSUV9UWVBFX0VER0VfUklTSU5HCTB4MDAwMDAwMDEJLyogRWRnZSByaXNpbmcgdHlwZSAqLworI2RlZmluZSBJUlFfVFlQRV9FREdFX0ZBTExJTkcJMHgwMDAwMDAwMgkvKiBFZGdlIGZhbGxpbmcgdHlwZSAqLworI2RlZmluZSBJUlFfVFlQRV9FREdFX0JPVEggKElSUV9UWVBFX0VER0VfRkFMTElORyB8IElSUV9UWVBFX0VER0VfUklTSU5HKQorI2RlZmluZSBJUlFfVFlQRV9MRVZFTF9ISUdICTB4MDAwMDAwMDQJLyogTGV2ZWwgaGlnaCB0eXBlICovCisjZGVmaW5lIElSUV9UWVBFX0xFVkVMX0xPVwkweDAwMDAwMDA4CS8qIExldmVsIGxvdyB0eXBlICovCisjZGVmaW5lIElSUV9UWVBFX1NFTlNFX01BU0sJMHgwMDAwMDAwZgkvKiBNYXNrIG9mIHRoZSBhYm92ZSAqLworI2RlZmluZSBJUlFfVFlQRV9QUk9CRQkJMHgwMDAwMDAxMAkvKiBQcm9iaW5nIGluIHByb2dyZXNzICovCisKKy8qIEludGVybmFsIGZsYWdzICovCisjZGVmaW5lIElSUV9JTlBST0dSRVNTCQkweDAwMDEwMDAwCS8qIElSUSBoYW5kbGVyIGFjdGl2ZSAtIGRvIG5vdCBlbnRlciEgKi8KKyNkZWZpbmUgSVJRX0RJU0FCTEVECQkweDAwMDIwMDAwCS8qIElSUSBkaXNhYmxlZCAtIGRvIG5vdCBlbnRlciEgKi8KKyNkZWZpbmUgSVJRX1BFTkRJTkcJCTB4MDAwNDAwMDAJLyogSVJRIHBlbmRpbmcgLSByZXBsYXkgb24gZW5hYmxlICovCisjZGVmaW5lIElSUV9SRVBMQVkJCTB4MDAwODAwMDAJLyogSVJRIGhhcyBiZWVuIHJlcGxheWVkIGJ1dCBub3QgYWNrZWQgeWV0ICovCisjZGVmaW5lIElSUV9BVVRPREVURUNUCQkweDAwMTAwMDAwCS8qIElSUSBpcyBiZWluZyBhdXRvZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSVJRX1dBSVRJTkcJCTB4MDAyMDAwMDAJLyogSVJRIG5vdCB5ZXQgc2VlbiAtIGZvciBhdXRvZGV0ZWN0aW9uICovCisjZGVmaW5lIElSUV9MRVZFTAkJMHgwMDQwMDAwMAkvKiBJUlEgbGV2ZWwgdHJpZ2dlcmVkICovCisjZGVmaW5lIElSUV9NQVNLRUQJCTB4MDA4MDAwMDAJLyogSVJRIG1hc2tlZCAtIHNob3VsZG4ndCBiZSBzZWVuIGFnYWluICovCisjaWZkZWYgQ09ORklHX0lSUV9QRVJfQ1BVCisjIGRlZmluZSBJUlFfUEVSX0NQVQkJMHgwMTAwMDAwMAkvKiBJUlEgaXMgcGVyIENQVSAqLwogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKICNlbHNlCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpIDAKICNlbmRpZgogCi0vKgotICogSW50ZXJydXB0IGNvbnRyb2xsZXIgZGVzY3JpcHRvci4gVGhpcyBpcyBhbGwgd2UgbmVlZAotICogdG8gZGVzY3JpYmUgYWJvdXQgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZS4gCisjZGVmaW5lIElSUV9OT1BST0JFCQkweDAyMDAwMDAwCS8qIElSUSBpcyBub3QgdmFsaWQgZm9yIHByb2JpbmcgKi8KKyNkZWZpbmUgSVJRX05PUkVRVUVTVAkJMHgwNDAwMDAwMAkvKiBJUlEgY2Fubm90IGJlIHJlcXVlc3RlZCAqLworI2RlZmluZSBJUlFfTk9BVVRPRU4JCTB4MDgwMDAwMDAJLyogSVJRIHdpbGwgbm90IGJlIGVuYWJsZWQgb24gcmVxdWVzdCBpcnEgKi8KKyNkZWZpbmUgSVJRX0RFTEFZRURfRElTQUJMRQkweDEwMDAwMDAwCS8qIElSUSBkaXNhYmxlIChtYXNraW5nKSBoYXBwZW5zIGRlbGF5ZWQuICovCisKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeTsKKworLyoqCisgKiBzdHJ1Y3QgaXJxX2NoaXAgLSBoYXJkd2FyZSBpbnRlcnJ1cHQgY2hpcCBkZXNjcmlwdG9yCisgKgorICogQG5hbWU6CQluYW1lIGZvciAvcHJvYy9pbnRlcnJ1cHRzCisgKiBAc3RhcnR1cDoJCXN0YXJ0IHVwIHRoZSBpbnRlcnJ1cHQgKGRlZmF1bHRzIHRvIC0+ZW5hYmxlIGlmIE5VTEwpCisgKiBAc2h1dGRvd246CQlzaHV0IGRvd24gdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gLT5kaXNhYmxlIGlmIE5VTEwpCisgKiBAZW5hYmxlOgkJZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKGRlZmF1bHRzIHRvIGNoaXAtPnVubWFzayBpZiBOVUxMKQorICogQGRpc2FibGU6CQlkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKGRlZmF1bHRzIHRvIGNoaXAtPm1hc2sgaWYgTlVMTCkKKyAqIEBhY2s6CQlzdGFydCBvZiBhIG5ldyBpbnRlcnJ1cHQKKyAqIEBtYXNrOgkJbWFzayBhbiBpbnRlcnJ1cHQgc291cmNlCisgKiBAbWFza19hY2s6CQlhY2sgYW5kIG1hc2sgYW4gaW50ZXJydXB0IHNvdXJjZQorICogQHVubWFzazoJCXVubWFzayBhbiBpbnRlcnJ1cHQgc291cmNlCisgKiBAZW9pOgkJZW5kIG9mIGludGVycnVwdCAtIGNoaXAgbGV2ZWwKKyAqIEBlbmQ6CQllbmQgb2YgaW50ZXJydXB0IC0gZmxvdyBsZXZlbAorICogQHNldF9hZmZpbml0eToJc2V0IHRoZSBDUFUgYWZmaW5pdHkgb24gU01QIG1hY2hpbmVzCisgKiBAcmV0cmlnZ2VyOgkJcmVzZW5kIGFuIElSUSB0byB0aGUgQ1BVCisgKiBAc2V0X3R5cGU6CQlzZXQgdGhlIGZsb3cgdHlwZSAoSVJRX1RZUEVfTEVWRUwvZXRjLikgb2YgYW4gSVJRCisgKiBAc2V0X3dha2U6CQllbmFibGUvZGlzYWJsZSBwb3dlci1tYW5hZ2VtZW50IHdha2Utb24gb2YgYW4gSVJRCisgKgorICogQHJlbGVhc2U6CQlyZWxlYXNlIGZ1bmN0aW9uIHNvbGVseSB1c2VkIGJ5IFVNTAorICogQHR5cGVuYW1lOgkJb2Jzb2xldGVkIGJ5IG5hbWUsIGtlcHQgYXMgbWlncmF0aW9uIGhlbHBlcgogICovCi1zdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgewotCWNvbnN0IGNoYXIgKiB0eXBlbmFtZTsKLQl1bnNpZ25lZCBpbnQgKCpzdGFydHVwKSh1bnNpZ25lZCBpbnQgaXJxKTsKLQl2b2lkICgqc2h1dGRvd24pKHVuc2lnbmVkIGludCBpcnEpOwotCXZvaWQgKCplbmFibGUpKHVuc2lnbmVkIGludCBpcnEpOwotCXZvaWQgKCpkaXNhYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsKLQl2b2lkICgqYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKLQl2b2lkICgqZW5kKSh1bnNpZ25lZCBpbnQgaXJxKTsKLQl2b2lkICgqc2V0X2FmZmluaXR5KSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgZGVzdCk7CitzdHJ1Y3QgaXJxX2NoaXAgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJdW5zaWduZWQgaW50CSgqc3RhcnR1cCkodW5zaWduZWQgaW50IGlycSk7CisJdm9pZAkJKCpzaHV0ZG93bikodW5zaWduZWQgaW50IGlycSk7CisJdm9pZAkJKCplbmFibGUpKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQJCSgqZGlzYWJsZSkodW5zaWduZWQgaW50IGlycSk7CisKKwl2b2lkCQkoKmFjaykodW5zaWduZWQgaW50IGlycSk7CisJdm9pZAkJKCptYXNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKwl2b2lkCQkoKm1hc2tfYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKwl2b2lkCQkoKnVubWFzaykodW5zaWduZWQgaW50IGlycSk7CisJdm9pZAkJKCplb2kpKHVuc2lnbmVkIGludCBpcnEpOworCisJdm9pZAkJKCplbmQpKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQJCSgqc2V0X2FmZmluaXR5KSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgZGVzdCk7CisJaW50CQkoKnJldHJpZ2dlcikodW5zaWduZWQgaW50IGlycSk7CisJaW50CQkoKnNldF90eXBlKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKKwlpbnQJCSgqc2V0X3dha2UpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbik7CisKIAkvKiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IFVNTCwgbWlnaHQgZGlzYXBwZWFyIG9uZSBkYXkuKi8KICNpZmRlZiBDT05GSUdfSVJRX1JFTEVBU0VfTUVUSE9ECi0Jdm9pZCAoKnJlbGVhc2UpKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisJdm9pZAkJKCpyZWxlYXNlKSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogI2VuZGlmCisJLyoKKwkgKiBGb3IgY29tcGF0aWJpbGl0eSwgLT50eXBlbmFtZSBpcyBjb3BpZWQgaW50byAtPm5hbWUuCisJICogV2lsbCBkaXNhcHBlYXIuCisJICovCisJY29uc3QgY2hhcgkqdHlwZW5hbWU7CiB9OwogCi10eXBlZGVmIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAgaHdfaXJxX2NvbnRyb2xsZXI7Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSAiSVJRIGRlc2NyaXB0b3IiLCB3aGljaCBjb250YWlucyB2YXJpb3VzIGluZm9ybWF0aW9uCi0gKiBhYm91dCB0aGUgaXJxLCBpbmNsdWRpbmcgd2hhdCBraW5kIG9mIGhhcmR3YXJlIGhhbmRsaW5nIGl0IGhhcywKLSAqIHdoZXRoZXIgaXQgaXMgZGlzYWJsZWQgZXRjIGV0Yy4KKy8qKgorICogc3RydWN0IGlycV9kZXNjIC0gaW50ZXJydXB0IGRlc2NyaXB0b3IKKyAqCisgKiBAaGFuZGxlX2lycToJCWhpZ2hsZXZlbCBpcnEtZXZlbnRzIGhhbmRsZXIgW2lmIE5VTEwsIF9fZG9fSVJRKCldCisgKiBAY2hpcDoJCWxvdyBsZXZlbCBpbnRlcnJ1cHQgaGFyZHdhcmUgYWNjZXNzCisgKiBAaGFuZGxlcl9kYXRhOglwZXItSVJRIGRhdGEgZm9yIHRoZSBpcnFfY2hpcCBtZXRob2RzCisgKiBAY2hpcF9kYXRhOgkJcGxhdGZvcm0tc3BlY2lmaWMgcGVyLWNoaXAgcHJpdmF0ZSBkYXRhIGZvciB0aGUgY2hpcAorICoJCQltZXRob2RzLCB0byBhbGxvdyBzaGFyZWQgY2hpcCBpbXBsZW1lbnRhdGlvbnMKKyAqIEBhY3Rpb246CQl0aGUgaXJxIGFjdGlvbiBjaGFpbgorICogQHN0YXR1czoJCXN0YXR1cyBpbmZvcm1hdGlvbgorICogQGRlcHRoOgkJZGlzYWJsZS1kZXB0aCwgZm9yIG5lc3RlZCBpcnFfZGlzYWJsZSgpIGNhbGxzCisgKiBAaXJxX2NvdW50OgkJc3RhdHMgZmllbGQgdG8gZGV0ZWN0IHN0YWxsZWQgaXJxcworICogQGlycXNfdW5oYW5kbGVkOglzdGF0cyBmaWVsZCBmb3Igc3B1cmlvdXMgdW5oYW5kbGVkIGludGVycnVwdHMKKyAqIEBsb2NrOgkJbG9ja2luZyBmb3IgU01QCisgKiBAYWZmaW5pdHk6CQlJUlEgYWZmaW5pdHkgb24gU01QCisgKiBAY3B1OgkJY3B1IGluZGV4IHVzZWZ1bCBmb3IgYmFsYW5jaW5nCisgKiBAcGVuZGluZ19tYXNrOglwZW5kaW5nIHJlYmFsYW5jZWQgaW50ZXJydXB0cworICogQG1vdmVfaXJxOgkJbmVlZCB0byByZS10YXJnZXQgSVJRIGRlc3RpbmF0aW9uCisgKiBAZGlyOgkJL3Byb2MvaXJxLyBwcm9jZnMgZW50cnkKKyAqIEBhZmZpbml0eV9lbnRyeToJL3Byb2MvaXJxL3NtcF9hZmZpbml0eSBwcm9jZnMgZW50cnkgb24gU01QCiAgKgogICogUGFkIHRoaXMgb3V0IHRvIDMyIGJ5dGVzIGZvciBjYWNoZSBhbmQgaW5kZXhpbmcgcmVhc29ucy4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgaXJxX2Rlc2MgewotCWh3X2lycV9jb250cm9sbGVyICpoYW5kbGVyOwotCXZvaWQgKmhhbmRsZXJfZGF0YTsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CS8qIElSUSBhY3Rpb24gbGlzdCAqLwotCXVuc2lnbmVkIGludCBzdGF0dXM7CQkvKiBJUlEgc3RhdHVzICovCi0JdW5zaWduZWQgaW50IGRlcHRoOwkJLyogbmVzdGVkIGlycSBkaXNhYmxlcyAqLwotCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CQkvKiBGb3IgZGV0ZWN0aW5nIGJyb2tlbiBpbnRlcnJ1cHRzICovCi0JdW5zaWduZWQgaW50IGlycXNfdW5oYW5kbGVkOwotCXNwaW5sb2NrX3QgbG9jazsKLSNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgfHwgZGVmaW5lZCAoQ09ORklHX0lSUUJBTEFOQ0UpCi0JdW5zaWduZWQgaW50IG1vdmVfaXJxOwkJLyogRmxhZyBuZWVkIHRvIHJlLXRhcmdldCBpbnRyIGRlc3QqLworc3RydWN0IGlycV9kZXNjIHsKKwl2b2lkIGZhc3RjYWxsCQkoKmhhbmRsZV9pcnEpKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CisJdm9pZAkJCSpoYW5kbGVyX2RhdGE7CisJdm9pZAkJCSpjaGlwX2RhdGE7CisJc3RydWN0IGlycWFjdGlvbgkqYWN0aW9uOwkvKiBJUlEgYWN0aW9uIGxpc3QgKi8KKwl1bnNpZ25lZCBpbnQJCXN0YXR1czsJCS8qIElSUSBzdGF0dXMgKi8KKworCXVuc2lnbmVkIGludAkJZGVwdGg7CQkvKiBuZXN0ZWQgaXJxIGRpc2FibGVzICovCisJdW5zaWduZWQgaW50CQlpcnFfY291bnQ7CS8qIEZvciBkZXRlY3RpbmcgYnJva2VuIElSUXMgKi8KKwl1bnNpZ25lZCBpbnQJCWlycXNfdW5oYW5kbGVkOworCXNwaW5sb2NrX3QJCWxvY2s7CisjaWZkZWYgQ09ORklHX1NNUAorCWNwdW1hc2tfdAkJYWZmaW5pdHk7CisJdW5zaWduZWQgaW50CQljcHU7CiAjZW5kaWYKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9kZXNjX3Q7CisjaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgfHwgZGVmaW5lZChDT05GSUdfSVJRQkFMQU5DRSkKKwljcHVtYXNrX3QJCXBlbmRpbmdfbWFzazsKKwl1bnNpZ25lZCBpbnQJCW1vdmVfaXJxOwkvKiBuZWVkIHRvIHJlLXRhcmdldCBJUlEgZGVzdCAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpcjsKKyNlbmRpZgorfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKLWV4dGVybiBpcnFfZGVzY190IGlycV9kZXNjIFtOUl9JUlFTXTsKK2V4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU107CiAKLS8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGlycSBkZXNjcmlwdG9yIGZvciBJUlEuICAqLwotc3RhdGljIGlubGluZSBpcnFfZGVzY190ICoKLWlycV9kZXNjcCAoaW50IGlycSkKLXsKLQlyZXR1cm4gaXJxX2Rlc2MgKyBpcnE7Ci19CisvKgorICogTWlncmF0aW9uIGhlbHBlcnMgZm9yIG9ic29sZXRlIG5hbWVzLCB0aGV5IHdpbGwgZ28gYXdheToKKyAqLworI2RlZmluZSBod19pbnRlcnJ1cHRfdHlwZQlpcnFfY2hpcAordHlwZWRlZiBzdHJ1Y3QgaXJxX2NoaXAJCWh3X2lycV9jb250cm9sbGVyOworI2RlZmluZSBub19pcnFfdHlwZQkJbm9faXJxX2NoaXAKK3R5cGVkZWYgc3RydWN0IGlycV9kZXNjCQlpcnFfZGVzY190OwogCi0jaW5jbHVkZSA8YXNtL2h3X2lycS5oPiAvKiB0aGUgYXJjaCBkZXBlbmRlbnQgc3R1ZmYgKi8KKy8qCisgKiBQaWNrIHVwIHRoZSBhcmNoLWRlcGVuZGVudCBtZXRob2RzOgorICovCisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCi1leHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICogbmV3KTsKK2V4dGVybiBpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldyk7CiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwotZXh0ZXJuIGNwdW1hc2tfdCBpcnFfYWZmaW5pdHlbTlJfSVJRU107CisKKyNpZm5kZWYgaGFuZGxlX2R5bmFtaWNfdGljaworIyBkZWZpbmUgaGFuZGxlX2R5bmFtaWNfdGljayhhKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X25hdGl2ZV9pcnFfaW5mbyhpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKLQlpcnFfYWZmaW5pdHlbaXJxXSA9IG1hc2s7CisJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNldF9uYXRpdmVfaXJxX2luZm8oaW50IGlycSwgY3B1bWFza190IG1hc2spCkBAIC0xMTEsOCArMTk5LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAotI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkIChDT05GSUdfSVJRQkFMQU5DRSkKLWV4dGVybiBjcHVtYXNrX3QgcGVuZGluZ19pcnFfY3B1bWFza1tOUl9JUlFTXTsKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkKENPTkZJR19JUlFCQUxBTkNFKQogCiB2b2lkIHNldF9wZW5kaW5nX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzayk7CiB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKTsKQEAgLTEzMyw3ICsyMjAsNyBAQAogewogfQogCi0jZWxzZSAvLyBDT05GSUdfUENJX01TSQorI2Vsc2UgLyogQ09ORklHX1BDSV9NU0kgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaXJxKGludCBpcnEpCiB7CkBAIC0xNDQsMjYgKzIzMSwzNiBAQAogewogCXNldF9uYXRpdmVfaXJxX2luZm8oaXJxLCBtYXNrKTsKIH0KLSNlbmRpZiAvLyBDT05GSUdfUENJX01TSQogCi0jZWxzZQkvLyBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSB8fCBDT05GSUdfSVJRQkFMQU5DRQorI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiAKLSNkZWZpbmUgbW92ZV9pcnEoeCkKLSNkZWZpbmUgbW92ZV9uYXRpdmVfaXJxKHgpCi0jZGVmaW5lIHNldF9wZW5kaW5nX2lycSh4LHkpCisjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSB8fCBDT05GSUdfSVJRQkFMQU5DRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9pcnEoaW50IGlycSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlbmRpbmdfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lycV9pbmZvKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQogewogCXNldF9uYXRpdmVfaXJxX2luZm8oaXJxLCBtYXNrKTsKIH0KIAotI2VuZGlmIC8vIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEgKi8KIAotI2Vsc2UgLy8gQ09ORklHX1NNUAorI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogCiAjZGVmaW5lIG1vdmVfaXJxKHgpCiAjZGVmaW5lIG1vdmVfbmF0aXZlX2lycSh4KQogCi0jZW5kaWYgLy8gQ09ORklHX1NNUAorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19JUlFCQUxBTkNFCiBleHRlcm4gdm9pZCBzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spOwpAQCAtMTczLDMyICsyNzAsMTM5IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIGludCBub19pcnFfYWZmaW5pdHk7Ci1leHRlcm4gaW50IG5vaXJxZGVidWdfc2V0dXAoY2hhciAqc3RyKTsKLQotZXh0ZXJuIGZhc3RjYWxsIGlycXJldHVybl90IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7Ci1leHRlcm4gZmFzdGNhbGwgdW5zaWduZWQgaW50IF9fZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWV4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIGlycV9kZXNjX3QgKmRlc2MsCi0JCQkJCWludCBhY3Rpb25fcmV0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGNhbl9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzKTsKLQotZXh0ZXJuIHZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKTsKLQogI2lmZGVmIENPTkZJR19BVVRPX0lSUV9BRkZJTklUWQogZXh0ZXJuIGludCBzZWxlY3Rfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50Ci1zZWxlY3Rfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgaW5saW5lIGludCBzZWxlY3Rfc21wX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpCiB7CiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKIAotI2VuZGlmCitleHRlcm4gaW50IG5vX2lycV9hZmZpbml0eTsKIAotZXh0ZXJuIGh3X2lycV9jb250cm9sbGVyIG5vX2lycV90eXBlOyAgLyogbmVlZGVkIGluIGV2ZXJ5IGFyY2ggPyAqLworLyogSGFuZGxlIGlycSBhY3Rpb24gY2hhaW5zOiAqLworZXh0ZXJuIGludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJICAgIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiAKLSNlbmRpZgorLyoKKyAqIEJ1aWx0LWluIElSUSBoYW5kbGVycyBmb3IgdmFyaW91cyBJUlEgdHlwZXMsCisgKiBjYWxsYWJsZSB2aWEgZGVzYy0+Y2hpcC0+aGFuZGxlX2lycSgpCisgKi8KK2V4dGVybiB2b2lkIGZhc3RjYWxsCitoYW5kbGVfbGV2ZWxfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZmFzdGNhbGwKK2hhbmRsZV9mYXN0ZW9pX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZmFzdGNhbGwKK2hhbmRsZV9lZGdlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGZhc3RjYWxsCitoYW5kbGVfc2ltcGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZmFzdGNhbGwKK2hhbmRsZV9wZXJjcHVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBmYXN0Y2FsbAoraGFuZGxlX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLSNlbmRpZiAvKiBfX2lycV9oICovCisvKgorICogR2V0IGEgZGVzY3JpcHRpdmUgc3RyaW5nIGZvciB0aGUgaGlnaGxldmVsIGhhbmRsZXIsIGZvcgorICogL3Byb2MvaW50ZXJydXB0cyBvdXRwdXQ6CisgKi8KK2V4dGVybiBjb25zdCBjaGFyICoKK2hhbmRsZV9pcnFfbmFtZSh2b2lkIGZhc3RjYWxsICgqaGFuZGxlKSh1bnNpZ25lZCBpbnQsIHN0cnVjdCBpcnFfZGVzYyAqLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqKSk7CisKKy8qCisgKiBNb25vbGl0aGljIGRvX0lSUSBpbXBsZW1lbnRhdGlvbi4KKyAqIChpcyBhbiBleHBsaWNpdCBmYXN0Y2FsbCwgYmVjYXVzZSBpMzg2IDRLU1RBQ0tTIGNhbGxzIGl0IGZyb20gYXNzZW1ibHkpCisgKi8KK2V4dGVybiBmYXN0Y2FsbCB1bnNpZ25lZCBpbnQgX19kb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogQXJjaGl0ZWN0dXJlcyBjYWxsIHRoaXMgdG8gbGV0IHRoZSBnZW5lcmljIElSUSBsYXllcgorICogaGFuZGxlIGFuIGludGVycnVwdC4gSWYgdGhlIGRlc2NyaXB0b3IgaXMgYXR0YWNoZWQgdG8gYW4KKyAqIGlycWNoaXAtc3R5bGUgY29udHJvbGxlciB0aGVuIHdlIGNhbGwgdGhlIC0+aGFuZGxlX2lycSgpIGhhbmRsZXIsCisgKiBhbmQgaXQgY2FsbHMgX19kb19JUlEoKSBpZiBpdCdzIGF0dGFjaGVkIHRvIGFuIGlycXR5cGUtc3R5bGUgY29udHJvbGxlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCWlmIChsaWtlbHkoZGVzYy0+aGFuZGxlX2lycSkpCisJCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjLCByZWdzKTsKKwllbHNlCisJCV9fZG9fSVJRKGlycSwgcmVncyk7Cit9CisKKy8qIEhhbmRsaW5nIG9mIHVuaGFuZGxlZCBhbmQgc3B1cmlvdXMgaW50ZXJydXB0czogKi8KK2V4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCSAgIGludCBhY3Rpb25fcmV0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIFJlc2VuZGluZyBvZiBpbnRlcnJ1cHRzIDoqLwordm9pZCBjaGVja19pcnFfcmVzZW5kKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSk7CisKKy8qIEluaXRpYWxpemUgL3Byb2MvaXJxLyAqLworZXh0ZXJuIHZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKTsKKworLyogRW5hYmxlL2Rpc2FibGUgaXJxIGRlYnVnZ2luZyBvdXRwdXQ6ICovCitleHRlcm4gaW50IG5vaXJxZGVidWdfc2V0dXAoY2hhciAqc3RyKTsKKworLyogQ2hlY2tzIHdoZXRoZXIgdGhlIGludGVycnVwdCBjYW4gYmUgcmVxdWVzdGVkIGJ5IHJlcXVlc3RfaXJxKCk6ICovCitleHRlcm4gaW50IGNhbl9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzKTsKKworLyogRHVtbXkgaXJxLWNoaXAgaW1wbGVtZW50YXRpb25zOiAqLworZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBub19pcnFfY2hpcDsKK2V4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgZHVtbXlfaXJxX2NoaXA7CisKK2V4dGVybiB2b2lkCitzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9jaGlwICpjaGlwLAorCQkJIHZvaWQgZmFzdGNhbGwgKCpoYW5kbGUpKHVuc2lnbmVkIGludCwKKwkJCQkJCSBzdHJ1Y3QgaXJxX2Rlc2MgKiwKKwkJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdm9pZAorX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwKKwkJICB2b2lkIGZhc3RjYWxsICgqaGFuZGxlKSh1bnNpZ25lZCBpbnQsIHN0cnVjdCBpcnFfZGVzYyAqLAorCQkJCQkgIHN0cnVjdCBwdF9yZWdzICopLAorCQkgIGludCBpc19jaGFpbmVkKTsKKworLyoKKyAqIFNldCBhIGhpZ2hsZXZlbCBmbG93IGhhbmRsZXIgZm9yIGEgZ2l2ZW4gSVJROgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLAorCQl2b2lkIGZhc3RjYWxsICgqaGFuZGxlKSh1bnNpZ25lZCBpbnQsIHN0cnVjdCBpcnFfZGVzYyAqLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwlfX3NldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZSwgMCk7Cit9CisKKy8qCisgKiBTZXQgYSBoaWdobGV2ZWwgY2hhaW5lZCBmbG93IGhhbmRsZXIgZm9yIGEgZ2l2ZW4gSVJRLgorICogKGEgY2hhaW5lZCBoYW5kbGVyIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBhbmQgc2V0IHRvCisgKiAgSVJRX05PUkVRVUVTVCBhbmQgSVJRX05PUFJPQkUpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwKKwkJCXZvaWQgZmFzdGNhbGwgKCpoYW5kbGUpKHVuc2lnbmVkIGludCwgc3RydWN0IGlycV9kZXNjICosCisJCQkJCQlzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwlfX3NldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZSwgMSk7Cit9CisKKy8qIFNldC9nZXQgY2hpcC9kYXRhIGZvciBhbiBJUlE6ICovCisKK2V4dGVybiBpbnQgc2V0X2lycV9jaGlwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCk7CitleHRlcm4gaW50IHNldF9pcnFfZGF0YSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgc2V0X2lycV9jaGlwX2RhdGEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IHNldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSk7CisKKyNkZWZpbmUgZ2V0X2lycV9jaGlwKGlycSkJKGlycV9kZXNjW2lycV0uY2hpcCkKKyNkZWZpbmUgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKQkoaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfZGF0YShpcnEpCShpcnFfZGVzY1tpcnFdLmhhbmRsZXJfZGF0YSkKKworI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0hBUkRJUlFTICovCisKKyNlbmRpZiAvKiAhQ09ORklHX1MzOTAgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oIGIvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmUwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvaXJxZmxhZ3MuaAorICoKKyAqIElSUSBmbGFncyB0cmFjaW5nOiBmb2xsb3cgdGhlIHN0YXRlIG9mIHRoZSBoYXJkaXJxIGFuZCBzb2Z0aXJxIGZsYWdzIGFuZAorICogcHJvdmlkZSBjYWxsYmFja3MgZm9yIHRyYW5zaXRpb25zIGJldHdlZW4gT04gYW5kIE9GRiBzdGF0ZXMuCisgKgorICogVGhpcyBmaWxlIGdldHMgaW5jbHVkZWQgZnJvbSBsb3dsZXZlbCBhc20gaGVhZGVycyB0b28sIHRvIHByb3ZpZGUKKyAqIHdyYXBwZWQgdmVyc2lvbnMgb2YgdGhlIGxvY2FsX2lycV8qKCkgQVBJcywgYmFzZWQgb24gdGhlCisgKiByYXdfbG9jYWxfaXJxXyooKSBtYWNyb3MgZnJvbSB0aGUgbG93bGV2ZWwgaGVhZGVycy4KKyAqLworI2lmbmRlZiBfTElOVVhfVFJBQ0VfSVJRRkxBR1NfSAorI2RlZmluZSBfTElOVVhfVFJBQ0VfSVJRRkxBR1NfSAorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisgIGV4dGVybiB2b2lkIHRyYWNlX2hhcmRpcnFzX29uKHZvaWQpOworICBleHRlcm4gdm9pZCB0cmFjZV9oYXJkaXJxc19vZmYodm9pZCk7CisgIGV4dGVybiB2b2lkIHRyYWNlX3NvZnRpcnFzX29uKHVuc2lnbmVkIGxvbmcgaXApOworICBleHRlcm4gdm9pZCB0cmFjZV9zb2Z0aXJxc19vZmYodW5zaWduZWQgbG9uZyBpcCk7CisjIGRlZmluZSB0cmFjZV9oYXJkaXJxX2NvbnRleHQocCkJKChwKS0+aGFyZGlycV9jb250ZXh0KQorIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9jb250ZXh0KHApCSgocCktPnNvZnRpcnFfY29udGV4dCkKKyMgZGVmaW5lIHRyYWNlX2hhcmRpcnFzX2VuYWJsZWQocCkJKChwKS0+aGFyZGlycXNfZW5hYmxlZCkKKyMgZGVmaW5lIHRyYWNlX3NvZnRpcnFzX2VuYWJsZWQocCkJKChwKS0+c29mdGlycXNfZW5hYmxlZCkKKyMgZGVmaW5lIHRyYWNlX2hhcmRpcnFfZW50ZXIoKQlkbyB7IGN1cnJlbnQtPmhhcmRpcnFfY29udGV4dCsrOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgdHJhY2VfaGFyZGlycV9leGl0KCkJZG8geyBjdXJyZW50LT5oYXJkaXJxX2NvbnRleHQtLTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHRyYWNlX3NvZnRpcnFfZW50ZXIoKQlkbyB7IGN1cnJlbnQtPnNvZnRpcnFfY29udGV4dCsrOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9leGl0KCkJZG8geyBjdXJyZW50LT5zb2Z0aXJxX2NvbnRleHQtLTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIElOSVRfVFJBQ0VfSVJRRkxBR1MJLnNvZnRpcnFzX2VuYWJsZWQgPSAxLAorI2Vsc2UKKyMgZGVmaW5lIHRyYWNlX2hhcmRpcnFzX29uKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHRyYWNlX2hhcmRpcnFzX29mZigpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSB0cmFjZV9zb2Z0aXJxc19vbihpcCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHRyYWNlX3NvZnRpcnFzX29mZihpcCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHRyYWNlX2hhcmRpcnFfY29udGV4dChwKQkwCisjIGRlZmluZSB0cmFjZV9zb2Z0aXJxX2NvbnRleHQocCkJMAorIyBkZWZpbmUgdHJhY2VfaGFyZGlycXNfZW5hYmxlZChwKQkwCisjIGRlZmluZSB0cmFjZV9zb2Z0aXJxc19lbmFibGVkKHApCTAKKyMgZGVmaW5lIHRyYWNlX2hhcmRpcnFfZW50ZXIoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgdHJhY2VfaGFyZGlycV9leGl0KCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHRyYWNlX3NvZnRpcnFfZW50ZXIoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9leGl0KCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIElOSVRfVFJBQ0VfSVJRRkxBR1MKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQKKworI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgorCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSBcCisJZG8geyB0cmFjZV9oYXJkaXJxc19vbigpOyByYXdfbG9jYWxfaXJxX2VuYWJsZSgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpIFwKKwlkbyB7IHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpOyB0cmFjZV9oYXJkaXJxc19vZmYoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpIFwKKwlkbyB7IHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7IHRyYWNlX2hhcmRpcnFzX29mZigpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChyYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykpIHsJCVwKKwkJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQlcCisJCQl0cmFjZV9oYXJkaXJxc19vZmYoKTsJCQlcCisJCX0gZWxzZSB7CQkJCQlcCisJCQl0cmFjZV9oYXJkaXJxc19vbigpOwkJCVwKKwkJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKyNlbHNlIC8qICFDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAqLworLyoKKyAqIFRoZSBsb2NhbF9pcnFfKigpIEFQSXMgYXJlIGVxdWFsIHRvIHRoZSByYXdfbG9jYWxfaXJxKigpCisgKiBpZiAhVFJBQ0VfSVJRRkxBR1MuCisgKi8KKyMgZGVmaW5lIHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpCWxvY2FsX2lycV9kaXNhYmxlKCkKKyMgZGVmaW5lIHJhd19sb2NhbF9pcnFfZW5hYmxlKCkJCWxvY2FsX2lycV9lbmFibGUoKQorIyBkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKQlsb2NhbF9pcnFfc2F2ZShmbGFncykKKyMgZGVmaW5lIHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncykJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisjZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQgKi8KKworI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUCisjZGVmaW5lIHNhZmVfaGFsdCgpCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl0cmFjZV9oYXJkaXJxc19vbigpOwkJCQlcCisJCXJhd19zYWZlX2hhbHQoKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyhmbGFncykJCXJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKQorCisjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJCQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCVwKKwkJCQkJCQkJXAorCXJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsJCQkJXAorCXJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKTsJCQkJXAorfSkKKworI2RlZmluZSBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKQlyYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykKKyNlbmRpZgkJLyogQ09ORklHX1g4NiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vdHBhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMThkZDBkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKiAkSWQ6IHRwYW0uaCx2IDEuMS4yLjEgMjAwMS8wNi8wOCAwODoyMzo0NiBrYWkgRXhwICQKLSAqCi0gKiBUdXJibyBQQU0gSVNETiBkcml2ZXIgZm9yIExpbnV4LiAoS2VybmVsIERyaXZlcikKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSBTdGVsaWFuIFBvcCA8c3RlbGlhbi5wb3BAZnIuYWxjb3ZlLmNvbT4sIEFsY/R2ZQotICoKLSAqIEZvciBhbGwgc3VwcG9ydCBxdWVzdGlvbnMgcGxlYXNlIGNvbnRhY3Q6IDxzdXBwb3J0QGF1dmVydGVjaC5mcj4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVFBBTV9IXwotI2RlZmluZSBfVFBBTV9IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogSU9DVEwgY29tbWFuZHMgKi8KLSNkZWZpbmUgVFBBTV9DTURfRFNQTE9BRAkweDAwMDEKLSNkZWZpbmUgVFBBTV9DTURfRFNQU0FWRQkweDAwMDIKLSNkZWZpbmUgVFBBTV9DTURfRFNQUlVOCQkweDAwMDMKLSNkZWZpbmUgVFBBTV9DTURfTE9PUE1PREVPTgkweDAwMDQKLSNkZWZpbmUgVFBBTV9DTURfTE9PUE1PREVPRkYJMHgwMDA1Ci0KLS8qIGFkZHJlc3NlcyBvZiBkZWJ1ZyBpbmZvcm1hdGlvbiB6b25lcyBvbiBib2FyZCAqLwotI2RlZmluZSBUUEFNX1RSQVBBVURJVF9SRUdJU1RFUgkJMHgwMDU0OTNlNAotI2RlZmluZSBUUEFNX05DT0FVRElUX1JFR0lTVEVSCQkweDAwNTAwMDAwCi0jZGVmaW5lIFRQQU1fTVNHQVVESVRfUkVHSVNURVIJCTB4MDA4RTMwRjAKLQotLyogbGVuZ3RoIG9mIGRlYnVnIGluZm9ybWF0aW9uIHpvbmVzIG9uIGJvYXJkICovCi0jZGVmaW5lIFRQQU1fVFJBUEFVRElUX0xFTkdUSAkJMTAwMDAKLSNkZWZpbmUgVFBBTV9OQ09BVURJVF9MRU5HVEgJCTMwMDAwMAotI2RlZmluZSBUUEFNX05DT0FVRElUX0NPVU5UCQkzMAotI2RlZmluZSBUUEFNX01TR0FVRElUX0xFTkdUSAkJNjAwMDAKLQotLyogSU9DVEwgbG9hZC9zYXZlIHBhcmFtZXRlciAqLwotdHlwZWRlZiBzdHJ1Y3QgdHBhbV9kc3BfaW9jdGwgewotCV9fdTMyIGFkZHJlc3M7CS8qIGFkZHJlc3MgdG8gbG9hZC9zYXZlIGRhdGEgKi8KLQlfX3UzMiBkYXRhX2xlbjsJLyogc2l6ZSBvZiBkYXRhIHRvIGJlIGxvYWRlZC9zYXZlZCAqLwotCV9fdTggZGF0YVswXTsJLyogZGF0YSAqLwotfSB0cGFtX2RzcF9pb2N0bDsKLQotI2VuZGlmIC8qIF9UUEFNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmggYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKaW5kZXggNTRlMjU0OS4uODQ5MDQzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCisrKyBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaApAQCAtNTcsMTAgKzU3LDI1IEBACiAjZGVmaW5lIHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKGZtdCwgYWRkcikgcHJpbnRfc3ltYm9sKGZtdCwgYWRkcikKICNlbmRpZgogCi0jZGVmaW5lIHByaW50X3N5bWJvbChmbXQsIGFkZHIpCQkJXAotZG8gewkJCQkJCVwKLQlfX2NoZWNrX3ByaW50c3ltX2Zvcm1hdChmbXQsICIiKTsJXAotCV9fcHJpbnRfc3ltYm9sKGZtdCwgYWRkcik7CQlcCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfc3ltYm9sKGNvbnN0IGNoYXIgKmZtdCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fY2hlY2tfcHJpbnRzeW1fZm9ybWF0KGZtdCwgIiIpOworCV9fcHJpbnRfc3ltYm9sKGZtdCwgKHVuc2lnbmVkIGxvbmcpCisJCSAgICAgICBfX2J1aWx0aW5fZXh0cmFjdF9yZXR1cm5fYWRkcigodm9pZCAqKWFkZHIpKTsKK30KKworI2lmbmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgcHJpbnRfaXBfc3ltKGlwKQkJXAorZG8gewkJCQkJXAorCXByaW50aygiWzwlMDhseD5dIiwgaXApOwlcCisJcHJpbnRfc3ltYm9sKCIgJXNcbiIsIGlwKTsJXAogfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgcHJpbnRfaXBfc3ltKGlwKQkJXAorZG8gewkJCQkJXAorCXByaW50aygiWzwlMDE2bHg+XSIsIGlwKTsJXAorCXByaW50X3N5bWJvbCgiICVzXG4iLCBpcCk7CVwKK30gd2hpbGUoMCkKKyNlbmRpZgogCiAjZW5kaWYgLypfTElOVVhfS0FMTFNZTVNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L2tiZF9rZXJuLmgKaW5kZXggNGViODUxZS4uZWZlMGVlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rYmRfa2Vybi5oCisrKyBiL2luY2x1ZGUvbGludXgva2JkX2tlcm4uaApAQCAtMTU1LDEwICsxNTUsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JaWYgKHQtPmJ1Zi50YWlsICE9IE5VTEwpIHsKLQkJdC0+YnVmLnRhaWwtPmFjdGl2ZSA9IDA7CisJaWYgKHQtPmJ1Zi50YWlsICE9IE5VTEwpCiAJCXQtPmJ1Zi50YWlsLT5jb21taXQgPSB0LT5idWYudGFpbC0+dXNlZDsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+YnVmLmxvY2ssIGZsYWdzKTsKIAlzY2hlZHVsZV93b3JrKCZ0LT5idWYud29yayk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleS5oIGIvaW5jbHVkZS9saW51eC9rZXkuaAppbmRleCBlNjkzZTcyLi4xNjlmMDVlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tleS5oCkBAIC0xNzcsNyArMTc3LDggQEAKIC8qCiAgKiBrZXJuZWwgbWFuYWdlZCBrZXkgdHlwZSBkZWZpbml0aW9uCiAgKi8KLXR5cGVkZWYgaW50ICgqcmVxdWVzdF9rZXlfYWN0b3JfdCkoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5ICphdXRoa2V5LCBjb25zdCBjaGFyICpvcCk7Cit0eXBlZGVmIGludCAoKnJlcXVlc3Rfa2V5X2FjdG9yX3QpKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleSAqYXV0aGtleSwKKwkJCQkgICBjb25zdCBjaGFyICpvcCwgdm9pZCAqYXV4KTsKIAogc3RydWN0IGtleV90eXBlIHsKIAkvKiBuYW1lIG9mIHRoZSB0eXBlICovCkBAIC0yODUsNiArMjg2LDExIEBACiAJCQkgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCiAJCQkgICAgICAgY29uc3QgY2hhciAqY2FsbG91dF9pbmZvKTsKIAorZXh0ZXJuIHN0cnVjdCBrZXkgKnJlcXVlc3Rfa2V5X3dpdGhfYXV4ZGF0YShzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCisJCQkJCSAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmNhbGxvdXRfaW5mbywKKwkJCQkJICAgIHZvaWQgKmF1eCk7CisKIGV4dGVybiBpbnQga2V5X3ZhbGlkYXRlKHN0cnVjdCBrZXkgKmtleSk7CiAKIGV4dGVybiBrZXlfcmVmX3Qga2V5X2NyZWF0ZV9vcl91cGRhdGUoa2V5X3JlZl90IGtleXJpbmcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaCBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCmluZGV4IDJkMjI5MzIuLjA1MDNiMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC00Niw2ICs0Niw4IEBACiAJS09CSl9VTU9VTlQJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA1LAkvKiB1bW91bnQgZXZlbnQgZm9yIGJsb2NrIGRldmljZXMgKGJyb2tlbikgKi8KIAlLT0JKX09GRkxJTkUJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA2LAkvKiBkZXZpY2Ugb2ZmbGluZSAqLwogCUtPQkpfT05MSU5FCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwNywJLyogZGV2aWNlIG9ubGluZSAqLworCUtPQkpfVU5ET0NLCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwOCwgCS8qIHVuZG9ja2luZyAqLworCUtPQkpfRE9DSwk9IChfX2ZvcmNlIGtvYmplY3RfYWN0aW9uX3QpIDB4MDksCS8qIGRvY2sgKi8KIH07CiAKIHN0cnVjdCBrb2JqZWN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2ZTBmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICogUnVudGltZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogc2VlIERvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9MT0NLREVQX0gKKyNkZWZpbmUgX19MSU5VWF9MT0NLREVQX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCisvKgorICogTG9jay1jbGFzcyB1c2FnZS1zdGF0ZSBiaXRzOgorICovCitlbnVtIGxvY2tfdXNhZ2VfYml0Cit7CisJTE9DS19VU0VEID0gMCwKKwlMT0NLX1VTRURfSU5fSEFSRElSUSwKKwlMT0NLX1VTRURfSU5fU09GVElSUSwKKwlMT0NLX0VOQUJMRURfU09GVElSUVMsCisJTE9DS19FTkFCTEVEX0hBUkRJUlFTLAorCUxPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQsCisJTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCwKKwlMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRCwKKwlMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCwKKwlMT0NLX1VTQUdFX1NUQVRFUworfTsKKworLyoKKyAqIFVzYWdlLXN0YXRlIGJpdG1hc2tzOgorICovCisjZGVmaW5lIExPQ0tGX1VTRUQJCQkoMSA8PCBMT0NLX1VTRUQpCisjZGVmaW5lIExPQ0tGX1VTRURfSU5fSEFSRElSUQkJKDEgPDwgTE9DS19VU0VEX0lOX0hBUkRJUlEpCisjZGVmaW5lIExPQ0tGX1VTRURfSU5fU09GVElSUQkJKDEgPDwgTE9DS19VU0VEX0lOX1NPRlRJUlEpCisjZGVmaW5lIExPQ0tGX0VOQUJMRURfSEFSRElSUVMJCSgxIDw8IExPQ0tfRU5BQkxFRF9IQVJESVJRUykKKyNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRUwkJKDEgPDwgTE9DS19FTkFCTEVEX1NPRlRJUlFTKQorCisjZGVmaW5lIExPQ0tGX0VOQUJMRURfSVJRUyAoTE9DS0ZfRU5BQkxFRF9IQVJESVJRUyB8IExPQ0tGX0VOQUJMRURfU09GVElSUVMpCisjZGVmaW5lIExPQ0tGX1VTRURfSU5fSVJRIChMT0NLRl9VU0VEX0lOX0hBUkRJUlEgfCBMT0NLRl9VU0VEX0lOX1NPRlRJUlEpCisKKyNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQJKDEgPDwgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCkKKyNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQJKDEgPDwgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCkKKyNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9IQVJESVJRU19SRUFECSgxIDw8IExPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEKQorI2RlZmluZSBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQJKDEgPDwgTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCisKKyNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9JUlFTX1JFQUQgXAorCQkoTE9DS0ZfRU5BQkxFRF9IQVJESVJRU19SRUFEIHwgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQorI2RlZmluZSBMT0NLRl9VU0VEX0lOX0lSUV9SRUFEIFwKKwkJKExPQ0tGX1VTRURfSU5fSEFSRElSUV9SRUFEIHwgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpCisKKyNkZWZpbmUgTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUwkJOFVMCisKKy8qCisgKiBMb2NrLWNsYXNzZXMgYXJlIGtleWVkIHZpYSB1bmlxdWUgYWRkcmVzc2VzLCBieSBlbWJlZGRpbmcgdGhlCisgKiBsb2NrY2xhc3Mta2V5IGludG8gdGhlIGtlcm5lbCAob3IgbW9kdWxlKSAuZGF0YSBzZWN0aW9uLiAoRm9yCisgKiBzdGF0aWMgbG9ja3Mgd2UgdXNlIHRoZSBsb2NrIGFkZHJlc3MgaXRzZWxmIGFzIHRoZSBrZXkuKQorICovCitzdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkgeworCWNoYXIgX19vbmVfYnl0ZTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHsKKwlzdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkJc3Via2V5c1tNQVhfTE9DS0RFUF9TVUJDTEFTU0VTXTsKK307CisKKy8qCisgKiBUaGUgbG9jay1jbGFzcyBpdHNlbGY6CisgKi8KK3N0cnVjdCBsb2NrX2NsYXNzIHsKKwkvKgorCSAqIGNsYXNzLWhhc2g6CisJICovCisJc3RydWN0IGxpc3RfaGVhZAkJaGFzaF9lbnRyeTsKKworCS8qCisJICogZ2xvYmFsIGxpc3Qgb2YgYWxsIGxvY2stY2xhc3NlczoKKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsb2NrX2VudHJ5OworCisJc3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5CSprZXk7CisJdW5zaWduZWQgaW50CQkJc3ViY2xhc3M7CisKKwkvKgorCSAqIElSUS9zb2Z0aXJxIHVzYWdlIHRyYWNraW5nIGJpdHM6CisJICovCisJdW5zaWduZWQgbG9uZwkJCXVzYWdlX21hc2s7CisJc3RydWN0IHN0YWNrX3RyYWNlCQl1c2FnZV90cmFjZXNbTE9DS19VU0FHRV9TVEFURVNdOworCisJLyoKKwkgKiBUaGVzZSBmaWVsZHMgcmVwcmVzZW50IGEgZGlyZWN0ZWQgZ3JhcGggb2YgbG9jayBkZXBlbmRlbmNpZXMsCisJICogdG8gZXZlcnkgbm9kZSB3ZSBhdHRhY2ggYSBsaXN0IG9mICJmb3J3YXJkIiBhbmQgYSBsaXN0IG9mCisJICogImJhY2t3YXJkIiBncmFwaCBub2Rlcy4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsb2Nrc19hZnRlciwgbG9ja3NfYmVmb3JlOworCisJLyoKKwkgKiBHZW5lcmF0aW9uIGNvdW50ZXIsIHdoZW4gZG9pbmcgY2VydGFpbiBjbGFzc2VzIG9mIGdyYXBoIHdhbGtpbmcsCisJICogdG8gZW5zdXJlIHRoYXQgd2UgY2hlY2sgb25lIG5vZGUgb25seSBvbmNlOgorCSAqLworCXVuc2lnbmVkIGludAkJCXZlcnNpb247CisKKwkvKgorCSAqIFN0YXRpc3RpY3MgY291bnRlcjoKKwkgKi8KKwl1bnNpZ25lZCBsb25nCQkJb3BzOworCisJY29uc3QgY2hhcgkJCSpuYW1lOworCWludAkJCQluYW1lX3ZlcnNpb247Cit9OworCisvKgorICogTWFwIHRoZSBsb2NrIG9iamVjdCAodGhlIGxvY2sgaW5zdGFuY2UpIHRvIHRoZSBsb2NrLWNsYXNzIG9iamVjdC4KKyAqIFRoaXMgaXMgZW1iZWRkZWQgaW50byBzcGVjaWZpYyBsb2NrIGluc3RhbmNlczoKKyAqLworc3RydWN0IGxvY2tkZXBfbWFwIHsKKwlzdHJ1Y3QgbG9ja19jbGFzc19rZXkJCSprZXk7CisJc3RydWN0IGxvY2tfY2xhc3MJCSpjbGFzc1tNQVhfTE9DS0RFUF9TVUJDTEFTU0VTXTsKKwljb25zdCBjaGFyCQkJKm5hbWU7Cit9OworCisvKgorICogRXZlcnkgbG9jayBoYXMgYSBsaXN0IG9mIG90aGVyIGxvY2tzIHRoYXQgd2VyZSB0YWtlbiBhZnRlciBpdC4KKyAqIFdlIG9ubHkgZ3JvdyB0aGUgbGlzdCwgbmV2ZXIgcmVtb3ZlIGZyb20gaXQ6CisgKi8KK3N0cnVjdCBsb2NrX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQJCWVudHJ5OworCXN0cnVjdCBsb2NrX2NsYXNzCQkqY2xhc3M7CisJc3RydWN0IHN0YWNrX3RyYWNlCQl0cmFjZTsKK307CisKKy8qCisgKiBXZSByZWNvcmQgbG9jayBkZXBlbmRlbmN5IGNoYWlucywgc28gdGhhdCB3ZSBjYW4gY2FjaGUgdGhlbToKKyAqLworc3RydWN0IGxvY2tfY2hhaW4geworCXN0cnVjdCBsaXN0X2hlYWQJCWVudHJ5OworCXU2NAkJCQljaGFpbl9rZXk7Cit9OworCitzdHJ1Y3QgaGVsZF9sb2NrIHsKKwkvKgorCSAqIE9uZS13YXkgaGFzaCBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbiB1cCB0byB0aGlzIHBvaW50LiBXZQorCSAqIGhhc2ggdGhlIGhhc2hlcyBzdGVwIGJ5IHN0ZXAgYXMgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZ3Jvd3MuCisJICoKKwkgKiBXZSB1c2UgaXQgZm9yIGRlcGVuZGVuY3ktY2FjaGluZyBhbmQgd2Ugc2tpcCBkZXRlY3Rpb24KKwkgKiBwYXNzZXMgYW5kIGRlcGVuZGVuY3ktdXBkYXRlcyBpZiB0aGVyZSBpcyBhIGNhY2hlLWhpdCwgc28KKwkgKiBpdCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciAxMDAlIGNvdmVyYWdlIG9mIHRoZSB2YWxpZGF0b3IKKwkgKiB0byBoYXZlIGEgdW5pcXVlIGtleSB2YWx1ZSBmb3IgZXZlcnkgdW5pcXVlIGRlcGVuZGVuY3kgcGF0aAorCSAqIHRoYXQgY2FuIG9jY3VyIGluIHRoZSBzeXN0ZW0sIHRvIG1ha2UgYSB1bmlxdWUgaGFzaCB2YWx1ZQorCSAqIGFzIGxpa2VseSBhcyBwb3NzaWJsZSAtIGhlbmNlIHRoZSA2NC1iaXQgd2lkdGguCisJICoKKwkgKiBUaGUgdGFzayBzdHJ1Y3QgaG9sZHMgdGhlIGN1cnJlbnQgaGFzaCB2YWx1ZSAoaW5pdGlhbGl6ZWQKKwkgKiB3aXRoIHplcm8pLCBoZXJlIHdlIHN0b3JlIHRoZSBwcmV2aW91cyBoYXNoIHZhbHVlOgorCSAqLworCXU2NAkJCQlwcmV2X2NoYWluX2tleTsKKwlzdHJ1Y3QgbG9ja19jbGFzcwkJKmNsYXNzOworCXVuc2lnbmVkIGxvbmcJCQlhY3F1aXJlX2lwOworCXN0cnVjdCBsb2NrZGVwX21hcAkJKmluc3RhbmNlOworCisJLyoKKwkgKiBUaGUgbG9jay1zdGFjayBpcyB1bmlmaWVkIGluIHRoYXQgdGhlIGxvY2sgY2hhaW5zIG9mIGludGVycnVwdAorCSAqIGNvbnRleHRzIG5lc3Qgb250b3Agb2YgcHJvY2VzcyBjb250ZXh0IGNoYWlucywgYnV0IHdlICdzZXBhcmF0ZScKKwkgKiB0aGUgaGFzaGVzIGJ5IHN0YXJ0aW5nIHdpdGggMCBpZiB3ZSBjcm9zcyBpbnRvIGFuIGludGVycnVwdAorCSAqIGNvbnRleHQsIGFuZCB3ZSBhbHNvIGtlZXAgZG8gbm90IGFkZCBjcm9zcy1jb250ZXh0IGxvY2sKKwkgKiBkZXBlbmRlbmNpZXMgLSB0aGUgbG9jayB1c2FnZSBncmFwaCB3YWxraW5nIGNvdmVycyB0aGF0IGFyZWEKKwkgKiBhbnl3YXksIGFuZCB3ZSdkIGp1c3QgdW5uZWNlc3NhcmlseSBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mCisJICogZGVwZW5kZW5jaWVzIG90aGVyd2lzZS4gW05vdGU6IGhhcmRpcnEgYW5kIHNvZnRpcnEgY29udGV4dHMKKwkgKiBhcmUgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciB0b28uXQorCSAqCisJICogVGhlIGZvbGxvd2luZyBmaWVsZCBpcyB1c2VkIHRvIGRldGVjdCB3aGVuIHdlIGNyb3NzIGludG8gYW4KKwkgKiBpbnRlcnJ1cHQgY29udGV4dDoKKwkgKi8KKwlpbnQJCQkJaXJxX2NvbnRleHQ7CisJaW50CQkJCXRyeWxvY2s7CisJaW50CQkJCXJlYWQ7CisJaW50CQkJCWNoZWNrOworCWludAkJCQloYXJkaXJxc19vZmY7Cit9OworCisvKgorICogSW5pdGlhbGl6YXRpb24sIHNlbGYtdGVzdCBhbmQgZGVidWdnaW5nLW91dHB1dCBtZXRob2RzOgorICovCitleHRlcm4gdm9pZCBsb2NrZGVwX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBsb2NrZGVwX2luZm8odm9pZCk7CitleHRlcm4gdm9pZCBsb2NrZGVwX3Jlc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgbG9ja2RlcF9yZXNldF9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7CitleHRlcm4gdm9pZCBsb2NrZGVwX2ZyZWVfa2V5X3JhbmdlKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gdm9pZCBsb2NrZGVwX29mZih2b2lkKTsKK2V4dGVybiB2b2lkIGxvY2tkZXBfb24odm9pZCk7CitleHRlcm4gaW50IGxvY2tkZXBfaW50ZXJuYWwodm9pZCk7CisKKy8qCisgKiBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IHNwZWNpZmljIGxvY2tpbmcgdmFyaWFudHMgKHNwaW5sb2NrcywKKyAqIHJ3bG9ja3MsIG11dGV4ZXMgYW5kIHJ3c2VtcykgdG8gcGFzcyBpbml0L2FjcXVpcmUvcmVsZWFzZSBldmVudHMKKyAqIHRvIGxvY2tkZXA6CisgKi8KKworZXh0ZXJuIHZvaWQgbG9ja2RlcF9pbml0X21hcChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworLyoKKyAqIFJlaW5pdGlhbGl6ZSBhIGxvY2sga2V5IC0gZm9yIGNhc2VzIHdoZXJlIHRoZXJlIGlzIHNwZWNpYWwgbG9ja2luZyBvcgorICogc3BlY2lhbCBpbml0aWFsaXphdGlvbiBvZiBsb2NrcyBzbyB0aGF0IHRoZSB2YWxpZGF0b3IgZ2V0cyB0aGUgc2NvcGUKKyAqIG9mIGRlcGVuZGVuY2llcyB3cm9uZzogdGhleSBhcmUgZWl0aGVyIHRvbyBicm9hZCAodGhleSBuZWVkIGEgY2xhc3Mtc3BsaXQpCisgKiBvciB0aGV5IGFyZSB0b28gbmFycm93ICh0aGV5IHN1ZmZlciBmcm9tIGEgZmFsc2UgY2xhc3Mtc3BsaXQpOgorICovCisjZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzKGxvY2ssIGtleSkgXAorCQlsb2NrZGVwX2luaXRfbWFwKCYobG9jayktPmRlcF9tYXAsICNrZXksIGtleSkKKyNkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSBcCisJCWxvY2tkZXBfaW5pdF9tYXAoJihsb2NrKS0+ZGVwX21hcCwgbmFtZSwga2V5KQorCisvKgorICogQWNxdWlyZSBhIGxvY2suCisgKgorICogVmFsdWVzIGZvciAicmVhZCI6CisgKgorICogICAwOiBleGNsdXNpdmUgKHdyaXRlKSBhY3F1aXJlCisgKiAgIDE6IHJlYWQtYWNxdWlyZSAobm8gcmVjdXJzaW9uIGFsbG93ZWQpCisgKiAgIDI6IHJlYWQtYWNxdWlyZSB3aXRoIHNhbWUtaW5zdGFuY2UgcmVjdXJzaW9uIGFsbG93ZWQKKyAqCisgKiBWYWx1ZXMgZm9yIGNoZWNrOgorICoKKyAqICAgMDogZGlzYWJsZWQKKyAqICAgMTogc2ltcGxlIGNoZWNrcyAoZnJlZWluZywgaGVsZC1hdC1leGl0LXRpbWUsIGV0Yy4pCisgKiAgIDI6IGZ1bGwgdmFsaWRhdGlvbgorICovCitleHRlcm4gdm9pZCBsb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCisJCQkgaW50IHRyeWxvY2ssIGludCByZWFkLCBpbnQgY2hlY2ssIHVuc2lnbmVkIGxvbmcgaXApOworCitleHRlcm4gdm9pZCBsb2NrX3JlbGVhc2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgbmVzdGVkLAorCQkJIHVuc2lnbmVkIGxvbmcgaXApOworCisjIGRlZmluZSBJTklUX0xPQ0tERVAJCQkJLmxvY2tkZXBfcmVjdXJzaW9uID0gMCwKKworI2Vsc2UgLyogIUxPQ0tERVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfb2ZmKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX29uKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tkZXBfaW50ZXJuYWwodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworIyBkZWZpbmUgbG9ja19hY3F1aXJlKGwsIHMsIHQsIHIsIGMsIGkpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrX3JlbGVhc2UobCwgbiwgaSkJCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX2luaXQoKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX2luZm8oKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX2luaXRfbWFwKGxvY2ssIG5hbWUsIGtleSkJZG8geyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzKGxvY2ssIGtleSkJCWRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZShsb2NrLCBrZXksIG5hbWUpIFwKKwkJZG8geyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIElOSVRfTE9DS0RFUAorIyBkZWZpbmUgbG9ja2RlcF9yZXNldCgpCQlkbyB7IGRlYnVnX2xvY2tzID0gMTsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfZnJlZV9rZXlfcmFuZ2Uoc3RhcnQsIHNpemUpCWRvIHsgfSB3aGlsZSAoMCkKKy8qCisgKiBUaGUgY2xhc3Mga2V5IHRha2VzIG5vIHNwYWNlIGlmIGxvY2tkZXAgaXMgZGlzYWJsZWQ6CisgKi8KK3N0cnVjdCBsb2NrX2NsYXNzX2tleSB7IH07CisjZW5kaWYgLyogIUxPQ0tERVAgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1RSQUNFX0lSUUZMQUdTKSAmJiBkZWZpbmVkKENPTkZJR19HRU5FUklDX0hBUkRJUlFTKQorZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcyh2b2lkKTsKKyNlbHNlCisjIGRlZmluZSBlYXJseV9pbml0X2lycV9sb2NrX2NsYXNzKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCitleHRlcm4gdm9pZCBlYXJseV9ib290X2lycXNfb2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfYm9vdF9pcnFzX29uKHZvaWQpOworI2Vsc2UKKyMgZGVmaW5lIGVhcmx5X2Jvb3RfaXJxc19vZmYoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGVhcmx5X2Jvb3RfaXJxc19vbigpCQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBGb3IgdHJpdmlhbCBvbmUtZGVwdGggbmVzdGluZyBvZiBhIGxvY2stY2xhc3MsIHRoZSBmb2xsb3dpbmcKKyAqIGdsb2JhbCBkZWZpbmUgY2FuIGJlIHVzZWQuIChTdWJzeXN0ZW1zIHdpdGggbXVsdGlwbGUgbGV2ZWxzCisgKiBvZiBuZXN0aW5nIHNob3VsZCBkZWZpbmUgdGhlaXIgb3duIGxvY2stbmVzdGluZyBzdWJjbGFzc2VzLikKKyAqLworI2RlZmluZSBTSU5HTEVfREVQVEhfTkVTVElORwkJCTEKKworLyoKKyAqIE1hcCB0aGUgZGVwZW5kZW5jeSBvcHMgdG8gTk9QIG9yIHRvIHJlYWwgbG9ja2RlcCBvcHMsIGRlcGVuZGluZworICogb24gdGhlIHBlciBsb2NrLWNsYXNzIGRlYnVnIG1vZGU6CisgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisjIGlmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCisjICBkZWZpbmUgc3Bpbl9hY3F1aXJlKGwsIHMsIHQsIGkpCQlsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMiwgaSkKKyMgZWxzZQorIyAgZGVmaW5lIHNwaW5fYWNxdWlyZShsLCBzLCB0LCBpKQkJbG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIGkpCisjIGVuZGlmCisjIGRlZmluZSBzcGluX3JlbGVhc2UobCwgbiwgaSkJCQlsb2NrX3JlbGVhc2UobCwgbiwgaSkKKyNlbHNlCisjIGRlZmluZSBzcGluX2FjcXVpcmUobCwgcywgdCwgaSkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHNwaW5fcmVsZWFzZShsLCBuLCBpKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyMgaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKKyMgIGRlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKQkJbG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDIsIGkpCisjICBkZWZpbmUgcndsb2NrX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKQlsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMiwgaSkKKyMgZWxzZQorIyAgZGVmaW5lIHJ3bG9ja19hY3F1aXJlKGwsIHMsIHQsIGkpCQlsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMSwgaSkKKyMgIGRlZmluZSByd2xvY2tfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpCWxvY2tfYWNxdWlyZShsLCBzLCB0LCAyLCAxLCBpKQorIyBlbmRpZgorIyBkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgbiwgaSkJCWxvY2tfcmVsZWFzZShsLCBuLCBpKQorI2Vsc2UKKyMgZGVmaW5lIHJ3bG9ja19hY3F1aXJlKGwsIHMsIHQsIGkpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByd2xvY2tfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJ3bG9ja19yZWxlYXNlKGwsIG4sIGkpCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisjIGlmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCisjICBkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKQkJbG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDIsIGkpCisjIGVsc2UKKyMgIGRlZmluZSBtdXRleF9hY3F1aXJlKGwsIHMsIHQsIGkpCQlsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMSwgaSkKKyMgZW5kaWYKKyMgZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgbiwgaSkJCQlsb2NrX3JlbGVhc2UobCwgbiwgaSkKKyNlbHNlCisjIGRlZmluZSBtdXRleF9hY3F1aXJlKGwsIHMsIHQsIGkpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBtdXRleF9yZWxlYXNlKGwsIG4sIGkpCQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworIyAgZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSkJCWxvY2tfYWNxdWlyZShsLCBzLCB0LCAwLCAyLCBpKQorIyAgZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKQlsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMiwgaSkKKyMgZWxzZQorIyAgZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSkJCWxvY2tfYWNxdWlyZShsLCBzLCB0LCAwLCAxLCBpKQorIyAgZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKQlsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgaSkKKyMgZW5kaWYKKyMgZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgbiwgaSkJCQlsb2NrX3JlbGVhc2UobCwgbiwgaSkKKyNlbHNlCisjIGRlZmluZSByd3NlbV9hY3F1aXJlKGwsIHMsIHQsIGkpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgbiwgaSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmIC8qIF9fTElOVVhfTE9DS0RFUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCmluZGV4IDViNTg0ZGEuLmIwM2NmYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCkBAIC00MCw3ICs0MCw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzczsKLQljaGFyIGRldmZzX25hbWVbNjRdOwogfTsKIAogZXh0ZXJuIGludCBtaXNjX3JlZ2lzdGVyKHN0cnVjdCBtaXNjZGV2aWNlICogbWlzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggYzQxYTEyOS4uOTkwOTU3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogCiBzdHJ1Y3QgbWVtcG9saWN5Owogc3RydWN0IGFub25fdm1hOwpAQCAtMzYsNyArMzcsNiBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjZGVmaW5lIG50aF9wYWdlKHBhZ2UsbikgcGZuX3RvX3BhZ2UocGFnZV90b19wZm4oKHBhZ2UpKSArIChuKSkKIApAQCAtNTE1LDYgKzUxNSwxMSBAQAogCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7CiB9CiAKKy8qCisgKiBTb21lIGlubGluZSBmdW5jdGlvbnMgaW4gdm1zdGF0LmggZGVwZW5kIG9uIHBhZ2Vfem9uZSgpCisgKi8KKyNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4KKwogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAvKiBUaGUgYXJyYXkgb2Ygc3RydWN0IHBhZ2VzIC0gZm9yIGRpc2NvbnRpZ21lbSB1c2UgcGdkYXQtPmxtZW1fbWFwICovCiBleHRlcm4gc3RydWN0IHBhZ2UgKm1lbV9tYXA7CkBAIC0xMDMwLDEzICsxMDM1LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGZyb20sIGxlbik7Ci0JcnRfbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoZnJvbSwgbGVuKTsKLX0KLQogI2lmbmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiBzdGF0aWMgaW5saW5lIHZvaWQKIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGQ2MTIwZmEuLjY1NmI1ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDYsNiArNDYsMjcgQEAKICNkZWZpbmUgWk9ORV9QQURESU5HKG5hbWUpCiAjZW5kaWYKIAorZW51bSB6b25lX3N0YXRfaXRlbSB7CisJTlJfQU5PTl9QQUdFUywJLyogTWFwcGVkIGFub255bW91cyBwYWdlcyAqLworCU5SX0ZJTEVfTUFQUEVELAkvKiBwYWdlY2FjaGUgcGFnZXMgbWFwcGVkIGludG8gcGFnZXRhYmxlcy4KKwkJCSAgIG9ubHkgbW9kaWZpZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgKi8KKwlOUl9GSUxFX1BBR0VTLAorCU5SX1NMQUIsCS8qIFBhZ2VzIHVzZWQgYnkgc2xhYiBhbGxvY2F0b3IgKi8KKwlOUl9QQUdFVEFCTEUsCS8qIHVzZWQgZm9yIHBhZ2V0YWJsZXMgKi8KKwlOUl9GSUxFX0RJUlRZLAorCU5SX1dSSVRFQkFDSywKKwlOUl9VTlNUQUJMRV9ORlMsCS8qIE5GUyB1bnN0YWJsZSBwYWdlcyAqLworCU5SX0JPVU5DRSwKKyNpZmRlZiBDT05GSUdfTlVNQQorCU5VTUFfSElULAkJLyogYWxsb2NhdGVkIGluIGludGVuZGVkIG5vZGUgKi8KKwlOVU1BX01JU1MsCQkvKiBhbGxvY2F0ZWQgaW4gbm9uIGludGVuZGVkIG5vZGUgKi8KKwlOVU1BX0ZPUkVJR04sCQkvKiB3YXMgaW50ZW5kZWQgaGVyZSwgaGl0IGVsc2V3aGVyZSAqLworCU5VTUFfSU5URVJMRUFWRV9ISVQsCS8qIGludGVybGVhdmVyIHByZWZlcnJlZCB0aGlzIHpvbmUgKi8KKwlOVU1BX0xPQ0FMLAkJLyogYWxsb2NhdGlvbiBmcm9tIGxvY2FsIG5vZGUgKi8KKwlOVU1BX09USEVSLAkJLyogYWxsb2NhdGlvbiBmcm9tIG90aGVyIG5vZGUgKi8KKyNlbmRpZgorCU5SX1ZNX1pPTkVfU1RBVF9JVEVNUyB9OworCiBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyB7CiAJaW50IGNvdW50OwkJLyogbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBsaXN0ICovCiAJaW50IGhpZ2g7CQkvKiBoaWdoIHdhdGVybWFyaywgZW1wdHlpbmcgbmVlZGVkICovCkBAIC01NSwxMyArNzYsOCBAQAogCiBzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0IHsKIAlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyBwY3BbMl07CS8qIDA6IGhvdC4gIDE6IGNvbGQgKi8KLSNpZmRlZiBDT05GSUdfTlVNQQotCXVuc2lnbmVkIGxvbmcgbnVtYV9oaXQ7CQkvKiBhbGxvY2F0ZWQgaW4gaW50ZW5kZWQgbm9kZSAqLwotCXVuc2lnbmVkIGxvbmcgbnVtYV9taXNzOwkvKiBhbGxvY2F0ZWQgaW4gbm9uIGludGVuZGVkIG5vZGUgKi8KLQl1bnNpZ25lZCBsb25nIG51bWFfZm9yZWlnbjsJLyogd2FzIGludGVuZGVkIGhlcmUsIGhpdCBlbHNld2hlcmUgKi8KLQl1bnNpZ25lZCBsb25nIGludGVybGVhdmVfaGl0OyAJLyogaW50ZXJsZWF2ZXIgcHJlZmVyZWQgdGhpcyB6b25lICovCi0JdW5zaWduZWQgbG9uZyBsb2NhbF9ub2RlOwkvKiBhbGxvY2F0aW9uIGZyb20gbG9jYWwgbm9kZSAqLwotCXVuc2lnbmVkIGxvbmcgb3RoZXJfbm9kZTsJLyogYWxsb2NhdGlvbiBmcm9tIG90aGVyIG5vZGUgKi8KKyNpZmRlZiBDT05GSUdfU01QCisJczggdm1fc3RhdF9kaWZmW05SX1ZNX1pPTkVfU1RBVF9JVEVNU107CiAjZW5kaWYKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIApAQCAtMTM0LDYgKzE1MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcJCWxvd21lbV9yZXNlcnZlW01BWF9OUl9aT05FU107CiAKICNpZmRlZiBDT05GSUdfTlVNQQorCS8qCisJICogem9uZSByZWNsYWltIGJlY29tZXMgYWN0aXZlIGlmIG1vcmUgdW5tYXBwZWQgcGFnZXMgZXhpc3QuCisJICovCisJdW5zaWduZWQgbG9uZwkJbWluX3VubWFwcGVkX3JhdGlvOwogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQJKnBhZ2VzZXRbTlJfQ1BVU107CiAjZWxzZQogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQJcGFnZXNldFtOUl9DUFVTXTsKQEAgLTE2NSwxMiArMTg1LDggQEAKIAkvKiBBIGNvdW50IG9mIGhvdyBtYW55IHJlY2xhaW1lcnMgYXJlIHNjYW5uaW5nIHRoaXMgem9uZSAqLwogCWF0b21pY190CQlyZWNsYWltX2luX3Byb2dyZXNzOwogCi0JLyoKLQkgKiB0aW1lc3RhbXAgKGluIGppZmZpZXMpIG9mIHRoZSBsYXN0IHpvbmUgcmVjbGFpbSB0aGF0IGRpZCBub3QKLQkgKiByZXN1bHQgaW4gZnJlZWluZyBvZiBwYWdlcy4gVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHJlcGVhdGVkIHNjYW5zCi0JICogaWYgYWxsIG1lbW9yeSBpbiB0aGUgem9uZSBpcyBpbiB1c2UuCi0JICovCi0JdW5zaWduZWQgbG9uZwkJbGFzdF91bnN1Y2Nlc3NmdWxfem9uZV9yZWNsYWltOworCS8qIFpvbmUgc3RhdGlzdGljcyAqLworCWF0b21pY19sb25nX3QJCXZtX3N0YXRbTlJfVk1fWk9ORV9TVEFUX0lURU1TXTsKIAogCS8qCiAJICogcHJldl9wcmlvcml0eSBob2xkcyB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgZm9yIHRoaXMgem9uZS4gIEl0IGlzCkBAIC00MDIsNiArNDE4LDggQEAKIAkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIGludCBwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb25fc3lzY3RsX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCiAJCQkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpb19zeXNjdGxfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwKKwkJCXN0cnVjdCBmaWxlICosIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CiAKICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IE5vZGUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA5ZWJiYjc0Li5kMDZjNzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTIwMyw2ICsyMDMsMTUgQEAKICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFKHN5bSkJCQkJXAogCV9fRVhQT1JUX1NZTUJPTChzeW0sICJfZ3BsX2Z1dHVyZSIpCiAKKworI2lmZGVmIENPTkZJR19VTlVTRURfU1lNQk9MUworI2RlZmluZSBFWFBPUlRfVU5VU0VEX1NZTUJPTChzeW0pIF9fRVhQT1JUX1NZTUJPTChzeW0sICJfdW51c2VkIikKKyNkZWZpbmUgRVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMKHN5bSkgX19FWFBPUlRfU1lNQk9MKHN5bSwgIl91bnVzZWRfZ3BsIikKKyNlbHNlCisjZGVmaW5lIEVYUE9SVF9VTlVTRURfU1lNQk9MKHN5bSkKKyNkZWZpbmUgRVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMKHN5bSkKKyNlbmRpZgorCiAjZW5kaWYKIAogc3RydWN0IG1vZHVsZV9yZWYKQEAgLTI2MSw2ICsyNzAsMTUgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX2dwbF9zeW1zOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmdwbF9jcmNzOwogCisJLyogdW51c2VkIGV4cG9ydGVkIHN5bWJvbHMuICovCisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnVudXNlZF9zeW1zOworCXVuc2lnbmVkIGludCBudW1fdW51c2VkX3N5bXM7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqdW51c2VkX2NyY3M7CisJLyogR1BMLW9ubHksIHVudXNlZCBleHBvcnRlZCBzeW1ib2xzLiAqLworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICp1bnVzZWRfZ3BsX3N5bXM7CisJdW5zaWduZWQgaW50IG51bV91bnVzZWRfZ3BsX3N5bXM7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqdW51c2VkX2dwbF9jcmNzOworCiAJLyogc3ltYm9scyB0aGF0IHdpbGwgYmUgR1BMLW9ubHkgaW4gdGhlIG5lYXIgZnV0dXJlLiAqLwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfZnV0dXJlX3N5bXM7CiAJdW5zaWduZWQgaW50IG51bV9ncGxfZnV0dXJlX3N5bXM7CkBAIC0zNDAsNiArMzU4LDcgQEAKIC8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKHNlY29uZCBpcyB3aXRoIG5vIGxvY2tzLCBmb3Igb29wcykgKi8KIHN0cnVjdCBtb2R1bGUgKm1vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOworaW50IGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKIC8qIFJldHVybnMgbW9kdWxlIGFuZCBmaWxscyBpbiB2YWx1ZSwgZGVmaW5lZCBhbmQgbmFtZWJ1Ziwgb3IgTlVMTCBpZgogICAgc3ltbnVtIG91dCBvZiByYW5nZS4gKi8KQEAgLTQ1Niw2ICs0NzUsOCBAQAogI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkKICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUEwoc3ltKQogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUoc3ltKQorI2RlZmluZSBFWFBPUlRfVU5VU0VEX1NZTUJPTChzeW0pCisjZGVmaW5lIEVYUE9SVF9VTlVTRURfU1lNQk9MX0dQTChzeW0pCiAKIC8qIEdpdmVuIGFuIGFkZHJlc3MsIGxvb2sgZm9yIGl0IGluIHRoZSBleGNlcHRpb24gdGFibGVzLiAqLwogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICoKQEAgLTQ3Niw2ICs0OTcsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAwOworfQorCiAvKiBHZXQvcHV0IGEga2VybmVsIHN5bWJvbCAoY2FsbHMgc2hvdWxkIGJlIHN5bW1ldHJpYykgKi8KICNkZWZpbmUgc3ltYm9sX2dldCh4KSAoeyBleHRlcm4gdHlwZW9mKHgpIHggX19hdHRyaWJ1dGVfXygod2VhaykpOyAmKHgpOyB9KQogI2RlZmluZSBzeW1ib2xfcHV0KHgpIGRvIHsgfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdXRleC1kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9tdXRleC1kZWJ1Zy5oCmluZGV4IDhiNTc2OWYuLjI1MzcyODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXV0ZXgtZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L211dGV4LWRlYnVnLmgKQEAgLTIsMjIgKzIsMjIgQEAKICNkZWZpbmUgX19MSU5VWF9NVVRFWF9ERUJVR19ICiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogCiAvKgogICogTXV0ZXhlcyAtIGRlYnVnZ2luZyBoZWxwZXJzOgogICovCiAKLSNkZWZpbmUgX19ERUJVR19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgXAotCSwgLmhlbGRfbGlzdCA9IExJU1RfSEVBRF9JTklUKGxvY2tuYW1lLmhlbGRfbGlzdCksIFwKLQkgIC5uYW1lID0gI2xvY2tuYW1lICwgLm1hZ2ljID0gJmxvY2tuYW1lCisjZGVmaW5lIF9fREVCVUdfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpCQkJCVwKKwksIC5tYWdpYyA9ICZsb2NrbmFtZQogCi0jZGVmaW5lIG11dGV4X2luaXQoc2VtKQkJX19tdXRleF9pbml0KHNlbSwgX19GVU5DVElPTl9fKQorI2RlZmluZSBtdXRleF9pbml0KG11dGV4KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQkJXAorCQkJCQkJCQkJXAorCV9fbXV0ZXhfaW5pdCgobXV0ZXgpLCAjbXV0ZXgsICZfX2tleSk7CQkJCVwKK30gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIEZBU1RDQUxMKG11dGV4X2Rlc3Ryb3koc3RydWN0IG11dGV4ICpsb2NrKSk7CiAKLWV4dGVybiB2b2lkIG11dGV4X2RlYnVnX3Nob3dfYWxsX2xvY2tzKHZvaWQpOwotZXh0ZXJuIHZvaWQgbXV0ZXhfZGVidWdfc2hvd19oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmlsdGVyKTsKLWV4dGVybiB2b2lkIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLWV4dGVybiB2b2lkIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbGVuKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L211dGV4LmggYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKaW5kZXggZjFhYzUwNy4uMjdjNDhkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXV0ZXguaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTUwLDExICs1MSwxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwogI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCiAJc3RydWN0IHRocmVhZF9pbmZvCSpvd25lcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWhlbGRfbGlzdDsKLQl1bnNpZ25lZCBsb25nCQlhY3F1aXJlX2lwOwogCWNvbnN0IGNoYXIgCQkqbmFtZTsKIAl2b2lkCQkJKm1hZ2ljOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwlzdHJ1Y3QgbG9ja2RlcF9tYXAJZGVwX21hcDsKKyNlbmRpZgogfTsKIAogLyoKQEAgLTc0LDI0ICs3NiwzNCBAQAogIyBpbmNsdWRlIDxsaW51eC9tdXRleC1kZWJ1Zy5oPgogI2Vsc2UKICMgZGVmaW5lIF9fREVCVUdfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpCi0jIGRlZmluZSBtdXRleF9pbml0KG11dGV4KQkJCV9fbXV0ZXhfaW5pdChtdXRleCwgTlVMTCkKKyMgZGVmaW5lIG11dGV4X2luaXQobXV0ZXgpIFwKK2RvIHsJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQlcCisJCQkJCQkJXAorCV9fbXV0ZXhfaW5pdCgobXV0ZXgpLCAjbXV0ZXgsICZfX2tleSk7CQlcCit9IHdoaWxlICgwKQogIyBkZWZpbmUgbXV0ZXhfZGVzdHJveShtdXRleCkJCQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgbXV0ZXhfZGVidWdfc2hvd19hbGxfbG9ja3MoKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIG11dGV4X2RlYnVnX3Nob3dfaGVsZF9sb2NrcyhwKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQodGFzaykJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIG11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGZyb20sIGxlbikJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgX19ERVBfTUFQX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSBcCisJCSwgLmRlcF9tYXAgPSB7IC5uYW1lID0gI2xvY2tuYW1lIH0KKyNlbHNlCisjIGRlZmluZSBfX0RFUF9NQVBfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpCiAjZW5kaWYKIAogI2RlZmluZSBfX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSBcCiAJCXsgLmNvdW50ID0gQVRPTUlDX0lOSVQoMSkgXAogCQksIC53YWl0X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQgXAogCQksIC53YWl0X2xpc3QgPSBMSVNUX0hFQURfSU5JVChsb2NrbmFtZS53YWl0X2xpc3QpIFwKLQkJX19ERUJVR19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgfQorCQlfX0RFQlVHX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSBcCisJCV9fREVQX01BUF9NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgfQogCiAjZGVmaW5lIERFRklORV9NVVRFWChtdXRleG5hbWUpIFwKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXhuYW1lID0gX19NVVRFWF9JTklUSUFMSVpFUihtdXRleG5hbWUpCiAKLWV4dGVybiB2b2lkIGZhc3RjYWxsIF9fbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgX19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CiAKIC8qKioKICAqIG11dGV4X2lzX2xvY2tlZCAtIGlzIHRoZSBtdXRleCBsb2NrZWQKQEAgLTExMCw2ICsxMjIsMTMgQEAKICAqLwogZXh0ZXJuIHZvaWQgZmFzdGNhbGwgbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOwogZXh0ZXJuIGludCBmYXN0Y2FsbCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IG11dGV4ICpsb2NrKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCitleHRlcm4gdm9pZCBtdXRleF9sb2NrX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyk7CisjZWxzZQorIyBkZWZpbmUgbXV0ZXhfbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIG11dGV4X2xvY2sobG9jaykKKyNlbmRpZgorCiAvKgogICogTk9URTogbXV0ZXhfdHJ5bG9jaygpIGZvbGxvd3MgdGhlIHNwaW5fdHJ5bG9jaygpIGNvbnZlbnRpb24sCiAgKiAgICAgICBub3QgdGhlIGRvd25fdHJ5bG9jaygpIGNvbnZlbnRpb24hCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCAzODVlNjhmLi5iMjBjNTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTYxLDYgKzYxLDcgQEAKICNkZWZpbmUgU09DS19BU1lOQ19XQUlUREFUQQkxCiAjZGVmaW5lIFNPQ0tfTk9TUEFDRQkJMgogI2RlZmluZSBTT0NLX1BBU1NDUkVECQkzCisjZGVmaW5lIFNPQ0tfUEFTU1NFQwkJNAogCiAjaWZuZGVmIEFSQ0hfSEFTX1NPQ0tFVF9UWVBFUwogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCAwM2NkNzU1Li44NWY5OWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTMxMyw4ICszMTMsMTIgQEAKIAogCS8qIFNlZ21lbnRhdGlvbiBvZmZsb2FkIGZlYXR1cmVzICovCiAjZGVmaW5lIE5FVElGX0ZfR1NPX1NISUZUCTE2CisjZGVmaW5lIE5FVElGX0ZfR1NPX01BU0sJMHhmZmZmMDAwMAogI2RlZmluZSBORVRJRl9GX1RTTwkJKFNLQl9HU09fVENQVjQgPDwgTkVUSUZfRl9HU09fU0hJRlQpCi0jZGVmaW5lIE5FVElGX0ZfVUZPCQkoU0tCX0dTT19VRFBWNCA8PCBORVRJRl9GX0dTT19TSElGVCkKKyNkZWZpbmUgTkVUSUZfRl9VRk8JCShTS0JfR1NPX1VEUCA8PCBORVRJRl9GX0dTT19TSElGVCkKKyNkZWZpbmUgTkVUSUZfRl9HU09fUk9CVVNUCShTS0JfR1NPX0RPREdZIDw8IE5FVElGX0ZfR1NPX1NISUZUKQorI2RlZmluZSBORVRJRl9GX1RTT19FQ04JCShTS0JfR1NPX1RDUF9FQ04gPDwgTkVUSUZfRl9HU09fU0hJRlQpCisjZGVmaW5lIE5FVElGX0ZfVFNPNgkJKFNLQl9HU09fVENQVjYgPDwgTkVUSUZfRl9HU09fU0hJRlQpCiAKICNkZWZpbmUgTkVUSUZfRl9HRU5fQ1NVTQkoTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9IV19DU1VNKQogI2RlZmluZSBORVRJRl9GX0FMTF9DU1VNCShORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0dFTl9DU1VNKQpAQCAtNTQzLDcgKzU0Nyw4IEBACiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCQkgc3RydWN0IHBhY2tldF90eXBlICosCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLQlzdHJ1Y3Qgc2tfYnVmZgkJKigqZ3NvX3NlZ21lbnQpKHN0cnVjdCBza19idWZmICpza2IsIGludCBzZyk7CisJc3RydWN0IHNrX2J1ZmYJCSooKmdzb19zZWdtZW50KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJaW50IGZlYXR1cmVzKTsKIAl2b2lkCQkJKmFmX3BhY2tldF9wcml2OwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIH07CkBAIC05NjgsNyArOTczLDcgQEAKIGV4dGVybiBpbnQJCXdlaWdodF9wOwogZXh0ZXJuIGludAkJbmV0ZGV2X3NldF9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcik7CiBleHRlcm4gaW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIGludCBpbndhcmQpOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2JfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNnKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7CiAjaWZkZWYgQ09ORklHX0JVRwogZXh0ZXJuIHZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZWxzZQpAQCAtOTg4LDExICs5OTMsMjEgQEAKIAogZXh0ZXJuIHZvaWQgbGlua3dhdGNoX3J1bl9xdWV1ZSh2b2lkKTsKIAorc3RhdGljIGlubGluZSBpbnQgbmV0X2dzb19vayhpbnQgZmVhdHVyZXMsIGludCBnc29fdHlwZSkKK3sKKwlpbnQgZmVhdHVyZSA9IGdzb190eXBlIDw8IE5FVElGX0ZfR1NPX1NISUZUOworCXJldHVybiAoZmVhdHVyZXMgJiBmZWF0dXJlKSA9PSBmZWF0dXJlOworfQorCitzdGF0aWMgaW5saW5lIGludCBza2JfZ3NvX29rKHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcykKK3sKKwlyZXR1cm4gbmV0X2dzb19vayhmZWF0dXJlcywgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA/CisJCQkJICAgIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgOiAwKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbmV0aWZfbmVlZHNfZ3NvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGZlYXR1cmUgPSBza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlIDw8IE5FVElGX0ZfR1NPX1NISUZUOwotCXJldHVybiBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplICYmCi0JICAgICAgIChkZXYtPmZlYXR1cmVzICYgZmVhdHVyZSkgIT0gZmVhdHVyZTsKKwlyZXR1cm4gIXNrYl9nc29fb2soc2tiLCBkZXYtPmZlYXR1cmVzKTsKIH0KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IDBhMTc0MGIuLjU1ZWE4NTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0xJTlVYX05GU19GU19ICiAjZGVmaW5lIF9MSU5VWF9ORlNfRlNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTMzNSw3ICszMzQsNyBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuZnNfZmlsZV9hb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbmZzX2ZpbGVfYW9wczsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjX2NyZWQgKm5mc19maWxlX2NyZWQoc3RydWN0IGZpbGUgKmZpbGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKaW5kZXggNTFkYmFiOS4uN2ZmMzg2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCisrKyBiL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaApAQCAtNjUsNyArNjUsNyBAQAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgQVRPTUlDX05PVElGSUVSX0lOSVQobmFtZSkgewkJCQlcCi0JCS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCVwKKwkJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLmxvY2spLAlcCiAJCS5oZWFkID0gTlVMTCB9CiAjZGVmaW5lIEJMT0NLSU5HX05PVElGSUVSX0lOSVQobmFtZSkgewkJCQlcCiAJCS5yd3NlbSA9IF9fUldTRU1fSU5JVElBTElaRVIoKG5hbWUpLnJ3c2VtKSwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCAwYzA3NmQ1Li41NzQ4NjQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNSwxMiArNSw4IEBACiAjaWZuZGVmIFBBR0VfRkxBR1NfSAogI2RlZmluZSBQQUdFX0ZMQUdTX0gKIAotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KIC8qCiAgKiBWYXJpb3VzIHBhZ2UtPmZsYWdzIGJpdHM6CiAgKgpAQCAtMTAzLDEzNCArOTksNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBHbG9iYWwgcGFnZSBhY2NvdW50aW5nLiAgT25lIGluc3RhbmNlIHBlciBDUFUuICBPbmx5IHVuc2lnbmVkIGxvbmdzIGFyZQotICogYWxsb3dlZC4KLSAqCi0gKiAtIEZpZWxkcyBjYW4gYmUgbW9kaWZpZWQgd2l0aCB4eHhfcGFnZV9zdGF0ZSBhbmQgeHh4X3BhZ2Vfc3RhdGVfem9uZSBhdAotICogYW55IHRpbWUgc2FmZWx5ICh3aGljaCBwcm90ZWN0cyB0aGUgaW5zdGFuY2UgZnJvbSBtb2RpZmljYXRpb24gYnkKLSAqIGludGVycnVwdC4KLSAqIC0gVGhlIF9feHh4X3BhZ2Vfc3RhdGUgdmFyaWFudHMgY2FuIGJlIHVzZWQgc2FmZWx5IHdoZW4gaW50ZXJydXB0cyBhcmUKLSAqIGRpc2FibGVkLgotICogLSBUaGUgX194eHhfcGFnZV9zdGF0ZSB2YXJpYW50cyBjYW4gYmUgdXNlZCBpZiB0aGUgZmllbGQgaXMgb25seQotICogbW9kaWZpZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgYW5kIHByb3RlY3RlZCBmcm9tIHByZWVtcHRpb24sIG9yIG9ubHkKLSAqIG1vZGlmaWVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICBJbiB0aGlzIGNhc2UsIHRoZSBmaWVsZCBzaG91bGQgYmUKLSAqIGNvbW1lbnRlZCBoZXJlLgotICovCi1zdHJ1Y3QgcGFnZV9zdGF0ZSB7Ci0JdW5zaWduZWQgbG9uZyBucl9kaXJ0eTsJCS8qIERpcnR5IHdyaXRlYWJsZSBwYWdlcyAqLwotCXVuc2lnbmVkIGxvbmcgbnJfd3JpdGViYWNrOwkvKiBQYWdlcyB1bmRlciB3cml0ZWJhY2sgKi8KLQl1bnNpZ25lZCBsb25nIG5yX3Vuc3RhYmxlOwkvKiBORlMgdW5zdGFibGUgcGFnZXMgKi8KLQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VfdGFibGVfcGFnZXM7LyogUGFnZXMgdXNlZCBmb3IgcGFnZXRhYmxlcyAqLwotCXVuc2lnbmVkIGxvbmcgbnJfbWFwcGVkOwkvKiBtYXBwZWQgaW50byBwYWdldGFibGVzLgotCQkJCQkgKiBvbmx5IG1vZGlmaWVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovCi0JdW5zaWduZWQgbG9uZyBucl9zbGFiOwkJLyogSW4gc2xhYiAqLwotI2RlZmluZSBHRVRfUEFHRV9TVEFURV9MQVNUIG5yX3NsYWIKLQotCS8qCi0JICogVGhlIGJlbG93IGFyZSB6ZXJvZWQgYnkgZ2V0X3BhZ2Vfc3RhdGUoKS4gIFVzZSBnZXRfZnVsbF9wYWdlX3N0YXRlKCkKLQkgKiB0byBhZGQgdXAgYWxsIHRoZXNlLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgcGdwZ2luOwkJLyogRGlzayByZWFkcyAqLwotCXVuc2lnbmVkIGxvbmcgcGdwZ291dDsJCS8qIERpc2sgd3JpdGVzICovCi0JdW5zaWduZWQgbG9uZyBwc3dwaW47CQkvKiBzd2FwIHJlYWRzICovCi0JdW5zaWduZWQgbG9uZyBwc3dwb3V0OwkJLyogc3dhcCB3cml0ZXMgKi8KLQotCXVuc2lnbmVkIGxvbmcgcGdhbGxvY19oaWdoOwkvKiBwYWdlIGFsbG9jYXRpb25zICovCi0JdW5zaWduZWQgbG9uZyBwZ2FsbG9jX25vcm1hbDsKLQl1bnNpZ25lZCBsb25nIHBnYWxsb2NfZG1hMzI7Ci0JdW5zaWduZWQgbG9uZyBwZ2FsbG9jX2RtYTsKLQotCXVuc2lnbmVkIGxvbmcgcGdmcmVlOwkJLyogcGFnZSBmcmVlaW5ncyAqLwotCXVuc2lnbmVkIGxvbmcgcGdhY3RpdmF0ZTsJLyogcGFnZXMgbW92ZWQgaW5hY3RpdmUtPmFjdGl2ZSAqLwotCXVuc2lnbmVkIGxvbmcgcGdkZWFjdGl2YXRlOwkvKiBwYWdlcyBtb3ZlZCBhY3RpdmUtPmluYWN0aXZlICovCi0KLQl1bnNpZ25lZCBsb25nIHBnZmF1bHQ7CQkvKiBmYXVsdHMgKG1ham9yK21pbm9yKSAqLwotCXVuc2lnbmVkIGxvbmcgcGdtYWpmYXVsdDsJLyogZmF1bHRzIChtYWpvciBvbmx5KSAqLwotCi0JdW5zaWduZWQgbG9uZyBwZ3JlZmlsbF9oaWdoOwkvKiBpbnNwZWN0ZWQgaW4gcmVmaWxsX2luYWN0aXZlX3pvbmUgKi8KLQl1bnNpZ25lZCBsb25nIHBncmVmaWxsX25vcm1hbDsKLQl1bnNpZ25lZCBsb25nIHBncmVmaWxsX2RtYTMyOwotCXVuc2lnbmVkIGxvbmcgcGdyZWZpbGxfZG1hOwotCi0JdW5zaWduZWQgbG9uZyBwZ3N0ZWFsX2hpZ2g7CS8qIHRvdGFsIGhpZ2htZW0gcGFnZXMgcmVjbGFpbWVkICovCi0JdW5zaWduZWQgbG9uZyBwZ3N0ZWFsX25vcm1hbDsKLQl1bnNpZ25lZCBsb25nIHBnc3RlYWxfZG1hMzI7Ci0JdW5zaWduZWQgbG9uZyBwZ3N0ZWFsX2RtYTsKLQotCXVuc2lnbmVkIGxvbmcgcGdzY2FuX2tzd2FwZF9oaWdoOy8qIHRvdGFsIGhpZ2htZW0gcGFnZXMgc2Nhbm5lZCAqLwotCXVuc2lnbmVkIGxvbmcgcGdzY2FuX2tzd2FwZF9ub3JtYWw7Ci0JdW5zaWduZWQgbG9uZyBwZ3NjYW5fa3N3YXBkX2RtYTMyOwotCXVuc2lnbmVkIGxvbmcgcGdzY2FuX2tzd2FwZF9kbWE7Ci0KLQl1bnNpZ25lZCBsb25nIHBnc2Nhbl9kaXJlY3RfaGlnaDsvKiB0b3RhbCBoaWdobWVtIHBhZ2VzIHNjYW5uZWQgKi8KLQl1bnNpZ25lZCBsb25nIHBnc2Nhbl9kaXJlY3Rfbm9ybWFsOwotCXVuc2lnbmVkIGxvbmcgcGdzY2FuX2RpcmVjdF9kbWEzMjsKLQl1bnNpZ25lZCBsb25nIHBnc2Nhbl9kaXJlY3RfZG1hOwotCi0JdW5zaWduZWQgbG9uZyBwZ2lub2Rlc3RlYWw7CS8qIHBhZ2VzIHJlY2xhaW1lZCB2aWEgaW5vZGUgZnJlZWluZyAqLwotCXVuc2lnbmVkIGxvbmcgc2xhYnNfc2Nhbm5lZDsJLyogc2xhYiBvYmplY3RzIHNjYW5uZWQgKi8KLQl1bnNpZ25lZCBsb25nIGtzd2FwZF9zdGVhbDsJLyogcGFnZXMgcmVjbGFpbWVkIGJ5IGtzd2FwZCAqLwotCXVuc2lnbmVkIGxvbmcga3N3YXBkX2lub2Rlc3RlYWw7LyogcmVjbGFpbWVkIHZpYSBrc3dhcGQgaW5vZGUgZnJlZWluZyAqLwotCXVuc2lnbmVkIGxvbmcgcGFnZW91dHJ1bjsJLyoga3N3YXBkJ3MgY2FsbHMgdG8gcGFnZSByZWNsYWltICovCi0JdW5zaWduZWQgbG9uZyBhbGxvY3N0YWxsOwkvKiBkaXJlY3QgcmVjbGFpbSBjYWxscyAqLwotCi0JdW5zaWduZWQgbG9uZyBwZ3JvdGF0ZWQ7CS8qIHBhZ2VzIHJvdGF0ZWQgdG8gdGFpbCBvZiB0aGUgTFJVICovCi0JdW5zaWduZWQgbG9uZyBucl9ib3VuY2U7CS8qIHBhZ2VzIGZvciBib3VuY2UgYnVmZmVycyAqLwotfTsKLQotZXh0ZXJuIHZvaWQgZ2V0X3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCk7Ci1leHRlcm4gdm9pZCBnZXRfcGFnZV9zdGF0ZV9ub2RlKHN0cnVjdCBwYWdlX3N0YXRlICpyZXQsIGludCBub2RlKTsKLWV4dGVybiB2b2lkIGdldF9mdWxsX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyByZWFkX3BhZ2Vfc3RhdGVfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLWV4dGVybiB2b2lkIG1vZF9wYWdlX3N0YXRlX29mZnNldCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBkZWx0YSk7Ci1leHRlcm4gdm9pZCBfX21vZF9wYWdlX3N0YXRlX29mZnNldCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBkZWx0YSk7Ci0KLSNkZWZpbmUgcmVhZF9wYWdlX3N0YXRlKG1lbWJlcikgXAotCXJlYWRfcGFnZV9zdGF0ZV9vZmZzZXQob2Zmc2V0b2Yoc3RydWN0IHBhZ2Vfc3RhdGUsIG1lbWJlcikpCi0KLSNkZWZpbmUgbW9kX3BhZ2Vfc3RhdGUobWVtYmVyLCBkZWx0YSkJXAotCW1vZF9wYWdlX3N0YXRlX29mZnNldChvZmZzZXRvZihzdHJ1Y3QgcGFnZV9zdGF0ZSwgbWVtYmVyKSwgKGRlbHRhKSkKLQotI2RlZmluZSBfX21vZF9wYWdlX3N0YXRlKG1lbWJlciwgZGVsdGEpCVwKLQlfX21vZF9wYWdlX3N0YXRlX29mZnNldChvZmZzZXRvZihzdHJ1Y3QgcGFnZV9zdGF0ZSwgbWVtYmVyKSwgKGRlbHRhKSkKLQotI2RlZmluZSBpbmNfcGFnZV9zdGF0ZShtZW1iZXIpCQltb2RfcGFnZV9zdGF0ZShtZW1iZXIsIDFVTCkKLSNkZWZpbmUgZGVjX3BhZ2Vfc3RhdGUobWVtYmVyKQkJbW9kX3BhZ2Vfc3RhdGUobWVtYmVyLCAwVUwgLSAxKQotI2RlZmluZSBhZGRfcGFnZV9zdGF0ZShtZW1iZXIsZGVsdGEpCW1vZF9wYWdlX3N0YXRlKG1lbWJlciwgKGRlbHRhKSkKLSNkZWZpbmUgc3ViX3BhZ2Vfc3RhdGUobWVtYmVyLGRlbHRhKQltb2RfcGFnZV9zdGF0ZShtZW1iZXIsIDBVTCAtIChkZWx0YSkpCi0KLSNkZWZpbmUgX19pbmNfcGFnZV9zdGF0ZShtZW1iZXIpCV9fbW9kX3BhZ2Vfc3RhdGUobWVtYmVyLCAxVUwpCi0jZGVmaW5lIF9fZGVjX3BhZ2Vfc3RhdGUobWVtYmVyKQlfX21vZF9wYWdlX3N0YXRlKG1lbWJlciwgMFVMIC0gMSkKLSNkZWZpbmUgX19hZGRfcGFnZV9zdGF0ZShtZW1iZXIsZGVsdGEpCV9fbW9kX3BhZ2Vfc3RhdGUobWVtYmVyLCAoZGVsdGEpKQotI2RlZmluZSBfX3N1Yl9wYWdlX3N0YXRlKG1lbWJlcixkZWx0YSkJX19tb2RfcGFnZV9zdGF0ZShtZW1iZXIsIDBVTCAtIChkZWx0YSkpCi0KLSNkZWZpbmUgcGFnZV9zdGF0ZShtZW1iZXIpICgqX19wYWdlX3N0YXRlKG9mZnNldG9mKHN0cnVjdCBwYWdlX3N0YXRlLCBtZW1iZXIpKSkKLQotI2RlZmluZSBzdGF0ZV96b25lX29mZnNldCh6b25lLCBtZW1iZXIpCQkJCQlcCi0oewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBvZmZzZXQ7CQkJCQkJXAotCWlmIChpc19oaWdobWVtKHpvbmUpKQkJCQkJCVwKLQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBhZ2Vfc3RhdGUsIG1lbWJlciMjX2hpZ2gpOwlcCi0JZWxzZSBpZiAoaXNfbm9ybWFsKHpvbmUpKQkJCQkJXAotCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGFnZV9zdGF0ZSwgbWVtYmVyIyNfbm9ybWFsKTsJXAotCWVsc2UgaWYgKGlzX2RtYTMyKHpvbmUpKQkJCQkJXAotCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGFnZV9zdGF0ZSwgbWVtYmVyIyNfZG1hMzIpOwlcCi0JZWxzZQkJCQkJCQkJXAotCQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGFnZV9zdGF0ZSwgbWVtYmVyIyNfZG1hKTsJXAotCW9mZnNldDsJCQkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX19tb2RfcGFnZV9zdGF0ZV96b25lKHpvbmUsIG1lbWJlciwgZGVsdGEpCQkJXAotIGRvIHsJCQkJCQkJCQlcCi0JX19tb2RfcGFnZV9zdGF0ZV9vZmZzZXQoc3RhdGVfem9uZV9vZmZzZXQoem9uZSwgbWVtYmVyKSwgKGRlbHRhKSk7IFwKLSB9IHdoaWxlICgwKQotCi0jZGVmaW5lIG1vZF9wYWdlX3N0YXRlX3pvbmUoem9uZSwgbWVtYmVyLCBkZWx0YSkJCQlcCi0gZG8gewkJCQkJCQkJCVwKLQltb2RfcGFnZV9zdGF0ZV9vZmZzZXQoc3RhdGVfem9uZV9vZmZzZXQoem9uZSwgbWVtYmVyKSwgKGRlbHRhKSk7IFwKLSB9IHdoaWxlICgwKQotCi0vKgogICogTWFuaXB1bGF0aW9uIG9mIHBhZ2Ugc3RhdGUgZmxhZ3MKICAqLwogI2RlZmluZSBQYWdlTG9ja2VkKHBhZ2UpCQlcCkBAIC0yNTQsNyArMTIyLDE0IEBACiAjZGVmaW5lIFRlc3RDbGVhclBhZ2VSZWZlcmVuY2VkKHBhZ2UpIHRlc3RfYW5kX2NsZWFyX2JpdChQR19yZWZlcmVuY2VkLCAmKHBhZ2UpLT5mbGFncykKIAogI2RlZmluZSBQYWdlVXB0b2RhdGUocGFnZSkJdGVzdF9iaXQoUEdfdXB0b2RhdGUsICYocGFnZSktPmZsYWdzKQotI2lmbmRlZiBTZXRQYWdlVXB0b2RhdGUKKyNpZmRlZiBDT05GSUdfUzM5MAorI2RlZmluZSBTZXRQYWdlVXB0b2RhdGUoX3BhZ2UpIFwKKwlkbyB7CQkJCQkJCQkgICAgICBcCisJCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSAoX3BhZ2UpOwkJCQkgICAgICBcCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChQR191cHRvZGF0ZSwgJl9fcGFnZS0+ZmxhZ3MpKQkgICAgICBcCisJCQlwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9wYWdlKTsJCSAgICAgIFwKKwl9IHdoaWxlICgwKQorI2Vsc2UKICNkZWZpbmUgU2V0UGFnZVVwdG9kYXRlKHBhZ2UpCXNldF9iaXQoUEdfdXB0b2RhdGUsICYocGFnZSktPmZsYWdzKQogI2VuZGlmCiAjZGVmaW5lIENsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpCWNsZWFyX2JpdChQR191cHRvZGF0ZSwgJihwYWdlKS0+ZmxhZ3MpCkBAIC0zMDYsNyArMTgxLDcgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChQR193cml0ZWJhY2ssCQkJXAogCQkJCSYocGFnZSktPmZsYWdzKSkJCQlcCi0JCQlpbmNfcGFnZV9zdGF0ZShucl93cml0ZWJhY2spOwkJCVwKKwkJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfV1JJVEVCQUNLKTsJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIFRlc3RTZXRQYWdlV3JpdGViYWNrKHBhZ2UpCQkJCQlcCiAJKHsJCQkJCQkJCVwKQEAgLTMxNCwxNCArMTg5LDE0IEBACiAJCXJldCA9IHRlc3RfYW5kX3NldF9iaXQoUEdfd3JpdGViYWNrLAkJCVwKIAkJCQkJJihwYWdlKS0+ZmxhZ3MpOwkJXAogCQlpZiAoIXJldCkJCQkJCQlcCi0JCQlpbmNfcGFnZV9zdGF0ZShucl93cml0ZWJhY2spOwkJCVwKKwkJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfV1JJVEVCQUNLKTsJXAogCQlyZXQ7CQkJCQkJCVwKIAl9KQogI2RlZmluZSBDbGVhclBhZ2VXcml0ZWJhY2socGFnZSkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfd3JpdGViYWNrLAkJCVwKIAkJCQkmKHBhZ2UpLT5mbGFncykpCQkJXAotCQkJZGVjX3BhZ2Vfc3RhdGUobnJfd3JpdGViYWNrKTsJCQlcCisJCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX1dSSVRFQkFDSyk7CVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrKHBhZ2UpCQkJCQlcCiAJKHsJCQkJCQkJCVwKQEAgLTMyOSw3ICsyMDQsNyBAQAogCQlyZXQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfd3JpdGViYWNrLAkJCVwKIAkJCQkmKHBhZ2UpLT5mbGFncyk7CQkJXAogCQlpZiAocmV0KQkJCQkJCVwKLQkJCWRlY19wYWdlX3N0YXRlKG5yX3dyaXRlYmFjayk7CQkJXAorCQkJZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9XUklURUJBQ0spOwlcCiAJCXJldDsJCQkJCQkJXAogCX0pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggMTI0NWRmNy4uMGEyZjVkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTExMyw1MSArMTEzLDYgQEAKIGV4dGVybiB2b2lkIHJlbW92ZV9mcm9tX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotZXh0ZXJuIGF0b21pY190IG5yX3BhZ2VjYWNoZTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQotI2RlZmluZSBQQUdFQ0FDSEVfQUNDVF9USFJFU0hPTEQgICAgICAgIG1heCgxNiwgTlJfQ1BVUyAqIDIpCi1ERUNMQVJFX1BFUl9DUFUobG9uZywgbnJfcGFnZWNhY2hlX2xvY2FsKTsKLQotLyoKLSAqIHBhZ2VjYWNoZV9hY2N0IGltcGxlbWVudHMgYXBwcm94aW1hdGUgYWNjb3VudGluZyBmb3IgcGFnZWNhY2hlLgotICogdm1fZW5vdWdoX21lbW9yeSgpIGRvIG5vdCBuZWVkIGhpZ2ggYWNjdXJhY3kuIFdyaXRlcnMgd2lsbCBrZWVwCi0gKiBhbiBvZmZzZXQgaW4gdGhlaXIgcGVyLWNwdSBhcmVuYSBhbmQgd2lsbCBzcGlsbCB0aGF0IGludG8gdGhlCi0gKiBnbG9iYWwgY291bnQgd2hlbmV2ZXIgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBsb2NhbCBjb3VudAotICogZXhjZWVkcyB0aGUgY291bnRlcidzIHRocmVzaG9sZC4KLSAqCi0gKiBNVVNUIGJlIHByb3RlY3RlZCBmcm9tIHByZWVtcHRpb24uCi0gKiBjdXJyZW50IHByb3RlY3Rpb24gaXMgbWFwcGluZy0+cGFnZV9sb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZWNhY2hlX2FjY3QoaW50IGNvdW50KQotewotCWxvbmcgKmxvY2FsOwotCi0JbG9jYWwgPSAmX19nZXRfY3B1X3Zhcihucl9wYWdlY2FjaGVfbG9jYWwpOwotCSpsb2NhbCArPSBjb3VudDsKLQlpZiAoKmxvY2FsID4gUEFHRUNBQ0hFX0FDQ1RfVEhSRVNIT0xEIHx8ICpsb2NhbCA8IC1QQUdFQ0FDSEVfQUNDVF9USFJFU0hPTEQpIHsKLQkJYXRvbWljX2FkZCgqbG9jYWwsICZucl9wYWdlY2FjaGUpOwotCQkqbG9jYWwgPSAwOwotCX0KLX0KLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHBhZ2VjYWNoZV9hY2N0KGludCBjb3VudCkKLXsKLQlhdG9taWNfYWRkKGNvdW50LCAmbnJfcGFnZWNhY2hlKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3BhZ2VfY2FjaGVfc2l6ZSh2b2lkKQotewotCWludCByZXQgPSBhdG9taWNfcmVhZCgmbnJfcGFnZWNhY2hlKTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCi0JCXJldCA9IDA7Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIFJldHVybiBieXRlLW9mZnNldCBpbnRvIGZpbGVzeXN0ZW0gb2JqZWN0IGZvciBwYWdlLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA2MmE4YzIyLi45ODNmY2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTQwNCw4ICs0MDQsOCBAQAogY2hhciAqcGNpYmlvc19zZXR1cCAoY2hhciAqc3RyKTsKIAogLyogVXNlZCBvbmx5IHdoZW4gZHJpdmVycy9wY2kvc2V0dXAuYyBpcyB1c2VkICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCSAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLCByZXNvdXJjZV9zaXplX3QsCisJCQkJcmVzb3VyY2Vfc2l6ZV90KTsKIHZvaWQgcGNpYmlvc191cGRhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICosIGludCBpcnEpOwogCiAvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5ICovCkBAIC01MzIsMTAgKzUzMiwxMCBAQAogCiAvKiBkcml2ZXJzL3BjaS9idXMuYyAqLwogaW50IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkgICB1bnNpZ25lZCBsb25nIG1pbiwgdW5zaWduZWQgaW50IHR5cGVfbWFzaywKKwkJCSAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCisJCQkgICByZXNvdXJjZV9zaXplX3QgbWluLCB1bnNpZ25lZCBpbnQgdHlwZV9tYXNrLAogCQkJICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkJICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSwKKwkJCQkJICByZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCiAJCQkgICB2b2lkICphbGlnbmZfZGF0YSk7CiB2b2lkIHBjaV9lbmFibGVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIApAQCAtNzMwLDcgKzczMCw4IEBACiAgKi8KICNpZm5kZWYgSEFWRV9BUkNIX1BDSV9SRVNPVVJDRV9UT19VU0VSCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc291cmNlX3RvX3VzZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwKLSAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJzcmMsIHU2NCAqc3RhcnQsIHU2NCAqZW5kKQorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcnNyYywgcmVzb3VyY2Vfc2l6ZV90ICpzdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZV90ICplbmQpCiB7CiAJKnN0YXJ0ID0gcnNyYy0+c3RhcnQ7CiAJKmVuZCA9IHJzcmMtPmVuZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggOWFlNmIxYS4uNjg1MDgxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTcyOCw3ICs3MjgsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RWUDQwMjAJMHgzZDA3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDQ1MAkJMHg4MDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExCTB4ODAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRAkweDgwMzQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YNTE1CQkweDgwMzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDEyCQkweDgwMzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMwCQkweGFjMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMDMxCQkweGFjMTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMxCQkweGFjMTUKQEAgLTE0NDEsNiArMTQ0Myw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3NQkweDA0NzUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc2CTB4MDQ3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzgJMHgwNDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUjVDODIyCTB4MDgyMgogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRExJTksJCTB4MTE4NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RMSU5LX0RHRTUxMFQJMHg0YzAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggMzQwNGZhZS4uYjk1ODE4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtNzMsNiArNzMsNyBAQAogI2lmbmRlZiBfTElOVVhfUExJU1RfSF8KICNkZWZpbmUgX0xJTlVYX1BMSVNUX0hfCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbnAuaCBiL2luY2x1ZGUvbGludXgvcG5wLmgKaW5kZXggOTNiMDk1OS4uYWI4YThkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BucC5oCkBAIC0zODksNyArMzg5LDggQEAKIGludCBwbnBfc3RvcF9kZXYoc3RydWN0IHBucF9kZXYgKmRldik7CiBpbnQgcG5wX2FjdGl2YXRlX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKIGludCBwbnBfZGlzYWJsZV9kZXYoc3RydWN0IHBucF9kZXYgKmRldik7Ci12b2lkIHBucF9yZXNvdXJjZV9jaGFuZ2Uoc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK3ZvaWQgcG5wX3Jlc291cmNlX2NoYW5nZShzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUpOwogCiAvKiBwcm90b2NvbCBoZWxwZXJzICovCiBpbnQgcG5wX2lzX2FjdGl2ZShzdHJ1Y3QgcG5wX2RldiAqIGRldik7CkBAIC00MzQsNyArNDM1LDkgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHBucF9zdG9wX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KSB7IHJldHVybiAtRU5PREVWOyB9CiBzdGF0aWMgaW5saW5lIGludCBwbnBfYWN0aXZhdGVfZGV2KHN0cnVjdCBwbnBfZGV2ICpkZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBucF9kaXNhYmxlX2RldihzdHJ1Y3QgcG5wX2RldiAqZGV2KSB7IHJldHVybiAtRU5PREVWOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcG5wX3Jlc291cmNlX2NoYW5nZShzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHBucF9yZXNvdXJjZV9jaGFuZ2Uoc3RydWN0IHJlc291cmNlICpyZXNvdXJjZSwKKwkJCQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSkgeyB9CiAKIC8qIHByb3RvY29sIGhlbHBlcnMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBucF9pc19hY3RpdmUoc3RydWN0IHBucF9kZXYgKiBkZXYpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9pc29uLmggYi9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCmluZGV4IGE1MzQ3YzAuLjNlNjI4ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9pc29uLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaApAQCAtNDQsNiArNDQsMTEgQEAKIAogLyoqKioqKioqKiogZHJpdmVycy9hdG0vICoqKioqKioqKiovCiAjZGVmaW5lIEFUTV9QT0lTT05fRlJFRQkJMHgxMgorI2RlZmluZSBBVE1fUE9JU09OCQkweGRlYWRiZWVmCisKKy8qKioqKioqKioqIG5ldC8gKioqKioqKioqKi8KKyNkZWZpbmUgTkVJR0hCT1JfREVBRAkJMHhkZWFkYmVlZgorI2RlZmluZSBORVRGSUxURVJfTElOS19QT0lTT04JMHhkZWFkNTdhYwogCiAvKioqKioqKioqKiBrZXJuZWwvbXV0ZXhlcyAqKioqKioqKioqLwogI2RlZmluZSBNVVRFWF9ERUJVR19JTklUCTB4MTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCA0OGRmZTAwLi5iNGNhNzNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC0xNjMsMTQgKzE2MywyMiBAQAogICoKICAqIEl0IGlzIGlsbGVnYWwgdG8gYmxvY2sgd2hpbGUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgogICovCi0jZGVmaW5lIHJjdV9yZWFkX2xvY2soKQkJcHJlZW1wdF9kaXNhYmxlKCkKKyNkZWZpbmUgcmN1X3JlYWRfbG9jaygpIFwKKwlkbyB7IFwKKwkJcHJlZW1wdF9kaXNhYmxlKCk7IFwKKwkJX19hY3F1aXJlKFJDVSk7IFwKKwl9IHdoaWxlKDApCiAKIC8qKgogICogcmN1X3JlYWRfdW5sb2NrIC0gbWFya3MgdGhlIGVuZCBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCiAgKgogICogU2VlIHJjdV9yZWFkX2xvY2soKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSByY3VfcmVhZF91bmxvY2soKQlwcmVlbXB0X2VuYWJsZSgpCisjZGVmaW5lIHJjdV9yZWFkX3VubG9jaygpIFwKKwlkbyB7IFwKKwkJX19yZWxlYXNlKFJDVSk7IFwKKwkJcHJlZW1wdF9lbmFibGUoKTsgXAorCX0gd2hpbGUoMCkKIAogLyoKICAqIFNvIHdoZXJlIGlzIHJjdV93cml0ZV9sb2NrKCk/ICBJdCBkb2VzIG5vdCBleGlzdCwgYXMgdGhlcmUgaXMgbm8KQEAgLTE5MywxNCArMjAxLDIyIEBACiAgKiBjYW4gdXNlIGp1c3QgcmN1X3JlYWRfbG9jaygpLgogICoKICAqLwotI2RlZmluZSByY3VfcmVhZF9sb2NrX2JoKCkJbG9jYWxfYmhfZGlzYWJsZSgpCisjZGVmaW5lIHJjdV9yZWFkX2xvY2tfYmgoKSBcCisJZG8geyBcCisJCWxvY2FsX2JoX2Rpc2FibGUoKTsgXAorCQlfX2FjcXVpcmUoUkNVX0JIKTsgXAorCX0gd2hpbGUoMCkKIAogLyoKICAqIHJjdV9yZWFkX3VubG9ja19iaCAtIG1hcmtzIHRoZSBlbmQgb2YgYSBzb2Z0aXJxLW9ubHkgUkNVIGNyaXRpY2FsIHNlY3Rpb24KICAqCiAgKiBTZWUgcmN1X3JlYWRfbG9ja19iaCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIHJjdV9yZWFkX3VubG9ja19iaCgpCWxvY2FsX2JoX2VuYWJsZSgpCisjZGVmaW5lIHJjdV9yZWFkX3VubG9ja19iaCgpIFwKKwlkbyB7IFwKKwkJX19yZWxlYXNlKFJDVV9CSCk7IFwKKwkJbG9jYWxfYmhfZW5hYmxlKCk7IFwKKwl9IHdoaWxlKDApCiAKIC8qKgogICogcmN1X2RlcmVmZXJlbmNlIC0gZmV0Y2ggYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyIGluIGFuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggNTY3NmM0Mi4uZGFhMmQ4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMTk3Myw3ICsxOTczLDcgQEAKIC8qIGZpbGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJlaXNlcmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlaXNlcmZzX2ZpbGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJlaXNlcmZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJlaXNlcmZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uczsKIAogLyogZml4X25vZGVzLmMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMuaCBiL2luY2x1ZGUvbGludXgvcnRjLmgKaW5kZXggMzZlMmJmNC4uNTM3MWU0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0zNCw4ICszNCw4IEBACiAgKiBhbGFybSBBUEkuCiAgKi8KIHN0cnVjdCBydGNfd2thbHJtIHsKLQl1bnNpZ25lZCBjaGFyIGVuYWJsZWQ7CS8qIDAgPSBhbGFybSBkaXNhYmxlLCAxID0gYWxhcm0gZGlzYWJsZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHBlbmRpbmc7ICAvKiAwID0gYWxhcm0gcGVuZGluZywgMSA9IGFsYXJtIG5vdCBwZW5kaW5nICovCisJdW5zaWduZWQgY2hhciBlbmFibGVkOwkvKiAwID0gYWxhcm0gZGlzYWJsZWQsIDEgPSBhbGFybSBlbmFibGVkICovCisJdW5zaWduZWQgY2hhciBwZW5kaW5nOyAgLyogMCA9IGFsYXJtIG5vdCBwZW5kaW5nLCAxID0gYWxhcm0gcGVuZGluZyAqLwogCXN0cnVjdCBydGNfdGltZSB0aW1lOwkvKiB0aW1lIHRoZSBhbGFybSBpcyBzZXQgdG8gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRtdXRleC5oIGIvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKaW5kZXggZmE0YTNiOC4uNWQ0MWRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG11dGV4LmgKQEAgLTI5LDggKzI5LDYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKm93bmVyOwogI2lmZGVmIENPTkZJR19ERUJVR19SVF9NVVRFWEVTCiAJaW50CQkJc2F2ZV9zdGF0ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWhlbGRfbGlzdF9lbnRyeTsKLQl1bnNpZ25lZCBsb25nCQlhY3F1aXJlX2lwOwogCWNvbnN0IGNoYXIgCQkqbmFtZSwgKmZpbGU7CiAJaW50CQkJbGluZTsKIAl2b2lkCQkJKm1hZ2ljOwpAQCAtOTgsMTQgKzk2LDYgQEAKIAogZXh0ZXJuIHZvaWQgcnRfbXV0ZXhfdW5sb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfUlRfTVVURVhFUwotIyBkZWZpbmUgSU5JVF9SVF9NVVRFWF9ERUJVRyh0c2spCQkJCQlcCi0JLmhlbGRfbGlzdF9oZWFkCT0gTElTVF9IRUFEX0lOSVQodHNrLmhlbGRfbGlzdF9oZWFkKSwJCVwKLQkuaGVsZF9saXN0X2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQKLSNlbHNlCi0jIGRlZmluZSBJTklUX1JUX01VVEVYX0RFQlVHKHRzaykKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1JUX01VVEVYRVMKICMgZGVmaW5lIElOSVRfUlRfTVVURVhFUyh0c2spCQkJCQkJXAogCS5waV93YWl0ZXJzCT0gUExJU1RfSEVBRF9JTklUKHRzay5waV93YWl0ZXJzLCB0c2sucGlfbG9jayksCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcndzZW0tc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvcndzZW0tc3BpbmxvY2suaAppbmRleCBmMzBmODA1Li5hZTFmY2FkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J3c2VtLXNwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9yd3NlbS1zcGlubG9jay5oCkBAIC0zMiwzMCArMzIsMzcgQEAKIAlfX3MzMgkJCWFjdGl2aXR5OwogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZiBSV1NFTV9ERUJVRwotCWludAkJCWRlYnVnOworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CiAjZW5kaWYKIH07CiAKLS8qCi0gKiBpbml0aWFsaXNhdGlvbgotICovCi0jaWYgUldTRU1fREVCVUcKLSNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklUICAgICAgLCAwCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKSAsIC5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9CiAjZWxzZQotI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQJLyogKi8KKyMgZGVmaW5lIF9fUldTRU1fREVQX01BUF9JTklUKGxvY2tuYW1lKQogI2VuZGlmCiAKICNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCi17IDAsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgX19SV1NFTV9ERUJVR19JTklUIH0KK3sgMCwgU1BJTl9MT0NLX1VOTE9DS0VELCBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSBfX1JXU0VNX0RFUF9NQVBfSU5JVChuYW1lKSB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBcCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQogCi1leHRlcm4gdm9pZCBGQVNUQ0FMTChpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOworZXh0ZXJuIHZvaWQgX19pbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNkZWZpbmUgaW5pdF9yd3NlbShzZW0pCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQkJCQkJCQlcCisJX19pbml0X3J3c2VtKChzZW0pLCAjc2VtLCAmX19rZXkpOwkJCVwKK30gd2hpbGUgKDApCisKIGV4dGVybiB2b2lkIEZBU1RDQUxMKF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOwogZXh0ZXJuIGludCBGQVNUQ0FMTChfX2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOwogZXh0ZXJuIHZvaWQgRkFTVENBTEwoX19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoX19kb3duX3dyaXRlX25lc3RlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBzdWJjbGFzcykpOwogZXh0ZXJuIGludCBGQVNUQ0FMTChfX2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKIGV4dGVybiB2b2lkIEZBU1RDQUxMKF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKIGV4dGVybiB2b2lkIEZBU1RDQUxMKF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J3c2VtLmggYi9pbmNsdWRlL2xpbnV4L3J3c2VtLmgKaW5kZXggZjk5ZmU5MC4uNjU4YWZiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yd3NlbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcndzZW0uaApAQCAtOSw4ICs5LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAotI2RlZmluZSBSV1NFTV9ERUJVRyAwCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMjYsODkgKzI0LDU4IEBACiAjaW5jbHVkZSA8YXNtL3J3c2VtLmg+IC8qIHVzZSBhbiBhcmNoLXNwZWNpZmljIGltcGxlbWVudGF0aW9uICovCiAjZW5kaWYKIAotI2lmbmRlZiByd3NlbXRyYWNlCi0jaWYgUldTRU1fREVCVUcKLWV4dGVybiB2b2lkIEZBU1RDQUxMKHJ3c2VtdHJhY2Uoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpzdHIpKTsKLSNlbHNlCi0jZGVmaW5lIHJ3c2VtdHJhY2UoU0VNLEZNVCkKLSNlbmRpZgotI2VuZGlmCi0KIC8qCiAgKiBsb2NrIGZvciByZWFkaW5nCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0JcndzZW10cmFjZShzZW0sIkVudGVyaW5nIGRvd25fcmVhZCIpOwotCV9fZG93bl9yZWFkKHNlbSk7Ci0JcndzZW10cmFjZShzZW0sIkxlYXZpbmcgZG93bl9yZWFkIik7Ci19CitleHRlcm4gdm9pZCBkb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKIAogLyoKICAqIHRyeWxvY2sgZm9yIHJlYWRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgogICovCi1zdGF0aWMgaW5saW5lIGludCBkb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IHJldDsKLQlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgZG93bl9yZWFkX3RyeWxvY2siKTsKLQlyZXQgPSBfX2Rvd25fcmVhZF90cnlsb2NrKHNlbSk7Ci0JcndzZW10cmFjZShzZW0sIkxlYXZpbmcgZG93bl9yZWFkX3RyeWxvY2siKTsKLQlyZXR1cm4gcmV0OwotfQorZXh0ZXJuIGludCBkb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwogCiAvKgogICogbG9jayBmb3Igd3JpdGluZwogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLQlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgZG93bl93cml0ZSIpOwotCV9fZG93bl93cml0ZShzZW0pOwotCXJ3c2VtdHJhY2Uoc2VtLCJMZWF2aW5nIGRvd25fd3JpdGUiKTsKLX0KK2V4dGVybiB2b2lkIGRvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKIAogLyoKICAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgogICovCi1zdGF0aWMgaW5saW5lIGludCBkb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCWludCByZXQ7Ci0JcndzZW10cmFjZShzZW0sIkVudGVyaW5nIGRvd25fd3JpdGVfdHJ5bG9jayIpOwotCXJldCA9IF9fZG93bl93cml0ZV90cnlsb2NrKHNlbSk7Ci0JcndzZW10cmFjZShzZW0sIkxlYXZpbmcgZG93bl93cml0ZV90cnlsb2NrIik7Ci0JcmV0dXJuIHJldDsKLX0KK2V4dGVybiBpbnQgZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CiAKIC8qCiAgKiByZWxlYXNlIGEgcmVhZCBsb2NrCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgdXBfcmVhZCIpOwotCV9fdXBfcmVhZChzZW0pOwotCXJ3c2VtdHJhY2Uoc2VtLCJMZWF2aW5nIHVwX3JlYWQiKTsKLX0KK2V4dGVybiB2b2lkIHVwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKIAogLyoKICAqIHJlbGVhc2UgYSB3cml0ZSBsb2NrCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0JcndzZW10cmFjZShzZW0sIkVudGVyaW5nIHVwX3dyaXRlIik7Ci0JX191cF93cml0ZShzZW0pOwotCXJ3c2VtdHJhY2Uoc2VtLCJMZWF2aW5nIHVwX3dyaXRlIik7Ci19CitleHRlcm4gdm9pZCB1cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwogCiAvKgogICogZG93bmdyYWRlIHdyaXRlIGxvY2sgdG8gcmVhZCBsb2NrCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCXJ3c2VtdHJhY2Uoc2VtLCJFbnRlcmluZyBkb3duZ3JhZGVfd3JpdGUiKTsKLQlfX2Rvd25ncmFkZV93cml0ZShzZW0pOwotCXJ3c2VtdHJhY2Uoc2VtLCJMZWF2aW5nIGRvd25ncmFkZV93cml0ZSIpOwotfQorZXh0ZXJuIHZvaWQgZG93bmdyYWRlX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworLyoKKyAqIG5lc3RlZCBsb2NraW5nOgorICovCitleHRlcm4gdm9pZCBkb3duX3JlYWRfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKTsKK2V4dGVybiB2b2lkIGRvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKTsKKy8qCisgKiBUYWtlL3JlbGVhc2UgYSBsb2NrIHdoZW4gbm90IHRoZSBvd25lciB3aWxsIHJlbGVhc2UgaXQ6CisgKi8KK2V4dGVybiB2b2lkIGRvd25fcmVhZF9ub25fb3duZXIoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKK2V4dGVybiB2b2lkIHVwX3JlYWRfbm9uX293bmVyKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CisjZWxzZQorIyBkZWZpbmUgZG93bl9yZWFkX25lc3RlZChzZW0sIHN1YmNsYXNzKQkJZG93bl9yZWFkKHNlbSkKKyMgZGVmaW5lIGRvd25fd3JpdGVfbmVzdGVkKHNlbSwgc3ViY2xhc3MpCWRvd25fd3JpdGUoc2VtKQorIyBkZWZpbmUgZG93bl9yZWFkX25vbl9vd25lcihzZW0pCQlkb3duX3JlYWQoc2VtKQorIyBkZWZpbmUgdXBfcmVhZF9ub25fb3duZXIoc2VtKQkJCXVwX3JlYWQoc2VtKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX1JXU0VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4MjFmMDQ4Li4xYzg3NmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xODQsMTEgKzE4NCwxMSBAQAogZXh0ZXJuIHJ3bG9ja190IHRhc2tsaXN0X2xvY2s7CiBleHRlcm4gc3BpbmxvY2tfdCBtbWxpc3RfbG9jazsKIAotdHlwZWRlZiBzdHJ1Y3QgdGFza19zdHJ1Y3QgdGFza190Oworc3RydWN0IHRhc2tfc3RydWN0OwogCiBleHRlcm4gdm9pZCBzY2hlZF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgc2NoZWRfaW5pdF9zbXAodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X2lkbGUodGFza190ICppZGxlLCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGluaXRfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUsIGludCBjcHUpOwogCiBleHRlcm4gY3B1bWFza190IG5vaHpfY3B1X21hc2s7CiAKQEAgLTM4Myw3ICszODMsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY2hsZGV4aXQ7CS8qIGZvciB3YWl0NCgpICovCiAKIAkvKiBjdXJyZW50IHRocmVhZCBncm91cCBzaWduYWwgbG9hZC1iYWxhbmNpbmcgdGFyZ2V0OiAqLwotCXRhc2tfdAkJCSpjdXJyX3RhcmdldDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKmN1cnJfdGFyZ2V0OwogCiAJLyogc2hhcmVkIHNpZ25hbCBoYW5kbGluZzogKi8KIAlzdHJ1Y3Qgc2lncGVuZGluZwlzaGFyZWRfcGVuZGluZzsKQEAgLTUzNCw3ICs1MzQsNiBAQAogZXh0ZXJuIHN0cnVjdCB1c2VyX3N0cnVjdCByb290X3VzZXI7CiAjZGVmaW5lIElOSVRfVVNFUiAoJnJvb3RfdXNlcikKIAotdHlwZWRlZiBzdHJ1Y3QgcHJpb19hcnJheSBwcmlvX2FycmF5X3Q7CiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbzsKIHN0cnVjdCByZWNsYWltX3N0YXRlOwogCkBAIC02OTksNyArNjk4LDcgQEAKICAgICAoKGdpKS0+YmxvY2tzWyhpKS9OR1JPVVBTX1BFUl9CTE9DS11bKGkpJU5HUk9VUFNfUEVSX0JMT0NLXSkKIAogI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIX1NXSVRDSF9TVEFDSwotZXh0ZXJuIHZvaWQgcHJlZmV0Y2hfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0Kik7CitleHRlcm4gdm9pZCBwcmVmZXRjaF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfQogI2VuZGlmCkBAIC03MTUsNiArNzE0LDggQEAKIAlTTEVFUF9JTlRFUlJVUFRFRCwKIH07CiAKK3N0cnVjdCBwcmlvX2FycmF5OworCiBzdHJ1Y3QgdGFza19zdHJ1Y3QgewogCXZvbGF0aWxlIGxvbmcgc3RhdGU7CS8qIC0xIHVucnVubmFibGUsIDAgcnVubmFibGUsID4wIHN0b3BwZWQgKi8KIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZF9pbmZvOwpAQCAtNzMyLDcgKzczMyw3IEBACiAJaW50IGxvYWRfd2VpZ2h0OwkvKiBmb3IgbmljZW5lc3MgbG9hZCBiYWxhbmNpbmcgcHVycG9zZXMgKi8KIAlpbnQgcHJpbywgc3RhdGljX3ByaW8sIG5vcm1hbF9wcmlvOwogCXN0cnVjdCBsaXN0X2hlYWQgcnVuX2xpc3Q7Ci0JcHJpb19hcnJheV90ICphcnJheTsKKwlzdHJ1Y3QgcHJpb19hcnJheSAqYXJyYXk7CiAKIAl1bnNpZ25lZCBzaG9ydCBpb3ByaW87CiAJdW5zaWduZWQgaW50IGJ0cmFjZV9zZXE7CkBAIC04NjUsMTYgKzg2NiwzNCBAQAogCXN0cnVjdCBwbGlzdF9oZWFkIHBpX3dhaXRlcnM7CiAJLyogRGVhZGxvY2sgZGV0ZWN0aW9uIGFuZCBwcmlvcml0eSBpbmhlcml0YW5jZSBoYW5kbGluZyAqLwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnBpX2Jsb2NrZWRfb247Ci0jIGlmZGVmIENPTkZJR19ERUJVR19SVF9NVVRFWEVTCi0Jc3BpbmxvY2tfdCBoZWxkX2xpc3RfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGhlbGRfbGlzdF9oZWFkOwotIyBlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfTVVURVhFUwogCS8qIG11dGV4IGRlYWRsb2NrIGRldGVjdGlvbiAqLwogCXN0cnVjdCBtdXRleF93YWl0ZXIgKmJsb2NrZWRfb247CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwl1bnNpZ25lZCBpbnQgaXJxX2V2ZW50czsKKwlpbnQgaGFyZGlycXNfZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIGhhcmRpcnFfZW5hYmxlX2lwOworCXVuc2lnbmVkIGludCBoYXJkaXJxX2VuYWJsZV9ldmVudDsKKwl1bnNpZ25lZCBsb25nIGhhcmRpcnFfZGlzYWJsZV9pcDsKKwl1bnNpZ25lZCBpbnQgaGFyZGlycV9kaXNhYmxlX2V2ZW50OworCWludCBzb2Z0aXJxc19lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgc29mdGlycV9kaXNhYmxlX2lwOworCXVuc2lnbmVkIGludCBzb2Z0aXJxX2Rpc2FibGVfZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBzb2Z0aXJxX2VuYWJsZV9pcDsKKwl1bnNpZ25lZCBpbnQgc29mdGlycV9lbmFibGVfZXZlbnQ7CisJaW50IGhhcmRpcnFfY29udGV4dDsKKwlpbnQgc29mdGlycV9jb250ZXh0OworI2VuZGlmCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKyMgZGVmaW5lIE1BWF9MT0NLX0RFUFRIIDMwVUwKKwl1NjQgY3Vycl9jaGFpbl9rZXk7CisJaW50IGxvY2tkZXBfZGVwdGg7CisJc3RydWN0IGhlbGRfbG9jayBoZWxkX2xvY2tzW01BWF9MT0NLX0RFUFRIXTsKKwl1bnNpZ25lZCBpbnQgbG9ja2RlcF9yZWN1cnNpb247CisjZW5kaWYKIAogLyogam91cm5hbGxpbmcgZmlsZXN5c3RlbSBpbmZvICovCiAJdm9pZCAqam91cm5hbF9pbmZvOwpAQCAtMTAxMyw5ICsxMDMyLDkgQEAKICNkZWZpbmUgdXNlZF9tYXRoKCkgdHNrX3VzZWRfbWF0aChjdXJyZW50KQogCiAjaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIGludCBzZXRfY3B1c19hbGxvd2VkKHRhc2tfdCAqcCwgY3B1bWFza190IG5ld19tYXNrKTsKK2V4dGVybiBpbnQgc2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdW1hc2tfdCBuZXdfbWFzayk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgc2V0X2NwdXNfYWxsb3dlZCh0YXNrX3QgKnAsIGNwdW1hc2tfdCBuZXdfbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjcHVtYXNrX3QgbmV3X21hc2spCiB7CiAJaWYgKCFjcHVfaXNzZXQoMCwgbmV3X21hc2spKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMjQsNyArMTA0Myw4IEBACiAjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudF9zY2hlZF90aW1lKGNvbnN0IHRhc2tfdCAqY3VycmVudF90YXNrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcKK2N1cnJlbnRfc2NoZWRfdGltZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfdGFzayk7CiAKIC8qIHNjaGVkX2V4ZWMgaXMgY2FsbGVkIGJ5IHByb2Nlc3NlcyBwZXJmb3JtaW5nIGFuIGV4ZWMgKi8KICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMDQyLDI3ICsxMDYyLDI3IEBACiBleHRlcm4gdm9pZCBzY2hlZF9pZGxlX25leHQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfUlRfTVVURVhFUwotZXh0ZXJuIGludCBydF9tdXRleF9nZXRwcmlvKHRhc2tfdCAqcCk7Ci1leHRlcm4gdm9pZCBydF9tdXRleF9zZXRwcmlvKHRhc2tfdCAqcCwgaW50IHByaW8pOwotZXh0ZXJuIHZvaWQgcnRfbXV0ZXhfYWRqdXN0X3BpKHRhc2tfdCAqcCk7CitleHRlcm4gaW50IHJ0X211dGV4X2dldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiB2b2lkIHJ0X211dGV4X3NldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcHJpbyk7CitleHRlcm4gdm9pZCBydF9tdXRleF9hZGp1c3RfcGkoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBydF9tdXRleF9nZXRwcmlvKHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgaW50IHJ0X211dGV4X2dldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBwLT5ub3JtYWxfcHJpbzsKIH0KICMgZGVmaW5lIHJ0X211dGV4X2FkanVzdF9waShwKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHNldF91c2VyX25pY2UodGFza190ICpwLCBsb25nIG5pY2UpOwotZXh0ZXJuIGludCB0YXNrX3ByaW8oY29uc3QgdGFza190ICpwKTsKLWV4dGVybiBpbnQgdGFza19uaWNlKGNvbnN0IHRhc2tfdCAqcCk7Ci1leHRlcm4gaW50IGNhbl9uaWNlKGNvbnN0IHRhc2tfdCAqcCwgY29uc3QgaW50IG5pY2UpOwotZXh0ZXJuIGludCB0YXNrX2N1cnIoY29uc3QgdGFza190ICpwKTsKK2V4dGVybiB2b2lkIHNldF91c2VyX25pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBsb25nIG5pY2UpOworZXh0ZXJuIGludCB0YXNrX3ByaW8oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiBpbnQgdGFza19uaWNlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gaW50IGNhbl9uaWNlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3QgaW50IG5pY2UpOworZXh0ZXJuIGludCB0YXNrX2N1cnIoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiBpbnQgaWRsZV9jcHUoaW50IGNwdSk7CiBleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7Ci1leHRlcm4gdGFza190ICppZGxlX3Rhc2soaW50IGNwdSk7Ci1leHRlcm4gdGFza190ICpjdXJyX3Rhc2soaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBzZXRfY3Vycl90YXNrKGludCBjcHUsIHRhc2tfdCAqcCk7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICppZGxlX3Rhc2soaW50IGNwdSk7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyX3Rhc2soaW50IGNwdSk7CitleHRlcm4gdm9pZCBzZXRfY3Vycl90YXNrKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIHZvaWQgeWllbGQodm9pZCk7CiAKQEAgLTExMTksOCArMTEzOSw4IEBACiAjZWxzZQogIHN0YXRpYyBpbmxpbmUgdm9pZCBraWNrX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQogI2VuZGlmCi1leHRlcm4gdm9pZCBGQVNUQ0FMTChzY2hlZF9mb3JrKHRhc2tfdCAqIHAsIGludCBjbG9uZV9mbGFncykpOwotZXh0ZXJuIHZvaWQgRkFTVENBTEwoc2NoZWRfZXhpdCh0YXNrX3QgKiBwKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChzY2hlZF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIGludCBjbG9uZV9mbGFncykpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwoc2NoZWRfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKSk7CiAKIGV4dGVybiBpbnQgaW5fZ3JvdXBfcChnaWRfdCk7CiBleHRlcm4gaW50IGluX2Vncm91cF9wKGdpZF90KTsKQEAgLTExNTMsNyArMTE3Myw3IEBACiBleHRlcm4gaW50IF9fa2lsbF9wZ19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBwaWRfdCBwZ3JwKTsKIGV4dGVybiBpbnQga2lsbF9wZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3QpOwogZXh0ZXJuIGludCBraWxsX3Byb2NfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKLWV4dGVybiBpbnQga2lsbF9wcm9jX2luZm9fYXNfdWlkKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3QsIHVpZF90LCB1aWRfdCk7CitleHRlcm4gaW50IGtpbGxfcHJvY19pbmZvX2FzX3VpZChpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90LCB1aWRfdCwgdWlkX3QsIHUzMik7CiBleHRlcm4gdm9pZCBkb19ub3RpZnlfcGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgZm9yY2Vfc2lnKGludCwgc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgZm9yY2Vfc2lnX3NwZWNpZmljKGludCwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpAQCAtMTIyNSwxNyArMTI0NSwxNyBAQAogZXh0ZXJuIHZvaWQgZGFlbW9uaXplKGNvbnN0IGNoYXIgKiwgLi4uKTsKIGV4dGVybiBpbnQgYWxsb3dfc2lnbmFsKGludCk7CiBleHRlcm4gaW50IGRpc2FsbG93X3NpZ25hbChpbnQpOwotZXh0ZXJuIHRhc2tfdCAqY2hpbGRfcmVhcGVyOworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGRfcmVhcGVyOwogCiBleHRlcm4gaW50IGRvX2V4ZWN2ZShjaGFyICosIGNoYXIgX191c2VyICogX191c2VyICosIGNoYXIgX191c2VyICogX191c2VyICosIHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIGxvbmcgZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nLCBpbnQgX191c2VyICosIGludCBfX3VzZXIgKik7Ci10YXNrX3QgKmZvcmtfaWRsZShpbnQpOworc3RydWN0IHRhc2tfc3RydWN0ICpmb3JrX2lkbGUoaW50KTsKIAogZXh0ZXJuIHZvaWQgc2V0X3Rhc2tfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY2hhciAqZnJvbSk7CiBleHRlcm4gdm9pZCBnZXRfdGFza19jb21tKGNoYXIgKnRvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKICNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gdm9pZCB3YWl0X3Rhc2tfaW5hY3RpdmUodGFza190ICogcCk7CitleHRlcm4gdm9pZCB3YWl0X3Rhc2tfaW5hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICogcCk7CiAjZWxzZQogI2RlZmluZSB3YWl0X3Rhc2tfaW5hY3RpdmUocCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCkBAIC0xMjYxLDEzICsxMjgxLDEzIEBACiAvKiBkZV90aHJlYWQgZGVwZW5kcyBvbiB0aHJlYWRfZ3JvdXBfbGVhZGVyIG5vdCBiZWluZyBhIHBpZCBiYXNlZCBjaGVjayAqLwogI2RlZmluZSB0aHJlYWRfZ3JvdXBfbGVhZGVyKHApCShwID09IHAtPmdyb3VwX2xlYWRlcikKIAotc3RhdGljIGlubGluZSB0YXNrX3QgKm5leHRfdGhyZWFkKGNvbnN0IHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3RocmVhZChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHAtPnRocmVhZF9ncm91cC5uZXh0KSwKLQkJCQl0YXNrX3QsIHRocmVhZF9ncm91cCk7CisJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2dyb3VwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGhyZWFkX2dyb3VwX2VtcHR5KHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgaW50IHRocmVhZF9ncm91cF9lbXB0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIGxpc3RfZW1wdHkoJnAtPnRocmVhZF9ncm91cCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggNTE4MDU4MC4uZjc1MzAzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNjcsNyArNjcsNyBAQAogc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4OwogCiBleHRlcm4gaW50IGNhcF9uZXRsaW5rX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBpbnQgY2FwX25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgY2FwX25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY2FwKTsKIAogLyoKICAqIFZhbHVlcyB1c2VkIGluIHRoZSB0YXNrX3NlY3VyaXR5X29wcyBjYWxscwpAQCAtNTY3LDYgKzU2Nyw5IEBACiAgKglAcC4KICAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgdGhlIHByb2Nlc3MuCiAgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCisgKiBAdGFza19nZXRzZWNpZDoKKyAqCVJldHJpZXZlIHRoZSBzZWN1cml0eSBpZGVudGlmaWVyIG9mIHRoZSBwcm9jZXNzIEBwLgorICoJQHAgY29udGFpbnMgdGhlIHRhc2tfc3RydWN0IGZvciB0aGUgcHJvY2VzcyBhbmQgcGxhY2UgaXMgaW50byBAc2VjaWQuCiAgKiBAdGFza19zZXRncm91cHM6CiAgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBzZXR0aW5nIHRoZSBzdXBwbGVtZW50YXJ5IGdyb3VwIHNldCBvZiB0aGUKICAqCWN1cnJlbnQgcHJvY2Vzcy4KQEAgLTU4Miw2ICs1ODUsMTAgQEAKICAqCUBwIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBvZiBwcm9jZXNzLgogICoJQGlvcHJpbyBjb250YWlucyB0aGUgbmV3IGlvcHJpbyB2YWx1ZQogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgorICogQHRhc2tfZ2V0aW9wcmlvCisgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBnZXR0aW5nIHRoZSBpb3ByaW8gdmFsdWUgb2YgQHAuCisgKglAcCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgb2YgcHJvY2Vzcy4KKyAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqIEB0YXNrX3NldHJsaW1pdDoKICAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHNldHRpbmcgdGhlIHJlc291cmNlIGxpbWl0cyBvZiB0aGUgY3VycmVudAogICoJcHJvY2VzcyBmb3IgQHJlc291cmNlIHRvIEBuZXdfcmxpbS4gIFRoZSBvbGQgcmVzb3VyY2UgbGltaXQgdmFsdWVzIGNhbgpAQCAtNjE1LDYgKzYyMiw3IEBACiAgKglAcCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHByb2Nlc3MuCiAgKglAaW5mbyBjb250YWlucyB0aGUgc2lnbmFsIGluZm9ybWF0aW9uLgogICoJQHNpZyBjb250YWlucyB0aGUgc2lnbmFsIHZhbHVlLgorICoJQHNlY2lkIGNvbnRhaW5zIHRoZSBzaWQgb2YgdGhlIHByb2Nlc3Mgd2hlcmUgdGhlIHNpZ25hbCBvcmlnaW5hdGVkCiAgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKiBAdGFza193YWl0OgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgYWxsb3dpbmcgYSBwcm9jZXNzIHRvIHJlYXAgYSBjaGlsZCBwcm9jZXNzIEBwCkBAIC02NTYsNiArNjY0LDcgQEAKICAqCUNoZWNrIHBlcm1pc3Npb24gYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmVkIG5ldGxpbmsgbWVzc2FnZSBpbgogICoJQHNrYi4KICAqCUBza2IgY29udGFpbnMgdGhlIHNrX2J1ZmYgc3RydWN0dXJlIGZvciB0aGUgbmV0bGluayBtZXNzYWdlLgorICoJQGNhcCBpbmRpY2F0ZXMgdGhlIGNhcGFiaWxpdHkgcmVxdWlyZWQKICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqCiAgKiBTZWN1cml0eSBob29rcyBmb3IgVW5peCBkb21haW4gbmV0d29ya2luZy4KQEAgLTEyMTgsMTYgKzEyMjcsMTggQEAKIAlpbnQgKCp0YXNrX3NldHBnaWQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBwaWRfdCBwZ2lkKTsKIAlpbnQgKCp0YXNrX2dldHBnaWQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKTsKIAlpbnQgKCp0YXNrX2dldHNpZCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOworCXZvaWQgKCp0YXNrX2dldHNlY2lkKSAoc3RydWN0IHRhc2tfc3RydWN0ICogcCwgdTMyICogc2VjaWQpOwogCWludCAoKnRhc2tfc2V0Z3JvdXBzKSAoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pOwogCWludCAoKnRhc2tfc2V0bmljZSkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIGludCBuaWNlKTsKIAlpbnQgKCp0YXNrX3NldGlvcHJpbykgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIGludCBpb3ByaW8pOworCWludCAoKnRhc2tfZ2V0aW9wcmlvKSAoc3RydWN0IHRhc2tfc3RydWN0ICogcCk7CiAJaW50ICgqdGFza19zZXRybGltaXQpICh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKiBuZXdfcmxpbSk7CiAJaW50ICgqdGFza19zZXRzY2hlZHVsZXIpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBpbnQgcG9saWN5LAogCQkJCSAgc3RydWN0IHNjaGVkX3BhcmFtICogbHApOwogCWludCAoKnRhc2tfZ2V0c2NoZWR1bGVyKSAoc3RydWN0IHRhc2tfc3RydWN0ICogcCk7CiAJaW50ICgqdGFza19tb3ZlbWVtb3J5KSAoc3RydWN0IHRhc2tfc3RydWN0ICogcCk7CiAJaW50ICgqdGFza19raWxsKSAoc3RydWN0IHRhc2tfc3RydWN0ICogcCwKLQkJCSAgc3RydWN0IHNpZ2luZm8gKiBpbmZvLCBpbnQgc2lnKTsKKwkJCSAgc3RydWN0IHNpZ2luZm8gKiBpbmZvLCBpbnQgc2lnLCB1MzIgc2VjaWQpOwogCWludCAoKnRhc2tfd2FpdCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApOwogCWludCAoKnRhc2tfcHJjdGwpIChpbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGFyZzIsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCwKQEAgLTEyNjYsNyArMTI3Nyw3IEBACiAJCQkgIHN0cnVjdCBzZW1idWYgKiBzb3BzLCB1bnNpZ25lZCBuc29wcywgaW50IGFsdGVyKTsKIAogCWludCAoKm5ldGxpbmtfc2VuZCkgKHN0cnVjdCBzb2NrICogc2ssIHN0cnVjdCBza19idWZmICogc2tiKTsKLQlpbnQgKCpuZXRsaW5rX3JlY3YpIChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYik7CisJaW50ICgqbmV0bGlua19yZWN2KSAoc3RydWN0IHNrX2J1ZmYgKiBza2IsIGludCBjYXApOwogCiAJLyogYWxsb3cgbW9kdWxlIHN0YWNraW5nICovCiAJaW50ICgqcmVnaXN0ZXJfc2VjdXJpdHkpIChjb25zdCBjaGFyICpuYW1lLApAQCAtMTgzOCw2ICsxODQ5LDExIEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19nZXRzaWQgKHApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfdGFza19nZXRzZWNpZCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgKnNlY2lkKQoreworCXNlY3VyaXR5X29wcy0+dGFza19nZXRzZWNpZCAocCwgc2VjaWQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3NldGdyb3VwcyAoc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8pCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19zZXRncm91cHMgKGdyb3VwX2luZm8pOwpAQCAtMTg1Myw2ICsxODY5LDExIEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19zZXRpb3ByaW8gKHAsIGlvcHJpbyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfZ2V0aW9wcmlvIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19nZXRpb3ByaW8gKHApOworfQorCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3NldHJsaW1pdCAodW5zaWduZWQgaW50IHJlc291cmNlLAogCQkJCQkgICBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKIHsKQEAgLTE4NzcsOSArMTg5OCwxMCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2tpbGwgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQkgICAgICBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZykKKwkJCQkgICAgICBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZywKKwkJCQkgICAgICB1MzIgc2VjaWQpCiB7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19raWxsIChwLCBpbmZvLCBzaWcpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnRhc2tfa2lsbCAocCwgaW5mbywgc2lnLCBzZWNpZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfd2FpdCAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMjAzMiw5ICsyMDU0LDkgQEAKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5uZXRsaW5rX3NlbmQoc2ssIHNrYik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgaW50IGNhcCkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5uZXRsaW5rX3JlY3Yoc2tiKTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5uZXRsaW5rX3JlY3Yoc2tiLCBjYXApOwogfQogCiAvKiBwcm90b3R5cGVzICovCkBAIC0yNDkwLDYgKzI1MTIsOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfdGFza19nZXRzZWNpZCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgKnNlY2lkKQoreyB9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0Z3JvdXBzIChzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKIHsKIAlyZXR1cm4gMDsKQEAgLTI1MDUsNiArMjUzMCwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX2dldGlvcHJpbyAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90YXNrX3NldHJsaW1pdCAodW5zaWduZWQgaW50IHJlc291cmNlLAogCQkJCQkgICBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKIHsKQEAgLTI1MjksNyArMjU1OSw4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfa2lsbCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkJCSAgICAgIHN0cnVjdCBzaWdpbmZvICppbmZvLCBpbnQgc2lnKQorCQkJCSAgICAgIHN0cnVjdCBzaWdpbmZvICppbmZvLCBpbnQgc2lnLAorCQkJCSAgICAgIHUzMiBzZWNpZCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NzAsOSArMjcwMSw5IEBACiAJcmV0dXJuIGNhcF9uZXRsaW5rX3NlbmQgKHNrLCBza2IpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9uZXRsaW5rX3JlY3YgKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9uZXRsaW5rX3JlY3YgKHN0cnVjdCBza19idWZmICpza2IsIGludCBjYXApCiB7Ci0JcmV0dXJuIGNhcF9uZXRsaW5rX3JlY3YgKHNrYik7CisJcmV0dXJuIGNhcF9uZXRsaW5rX3JlY3YgKHNrYiwgY2FwKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpzZWN1cml0eWZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggN2JjNWM3Yy4uNDYwMDA5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTM4LDkgKzM4LDE3IEBACiAgKiBUaGVzZSBtYWNyb3MgdHJpZ2dlcmVkIGdjYy0zLnggY29tcGlsZS10aW1lIHByb2JsZW1zLiAgV2UgdGhpbmsgdGhlc2UgYXJlCiAgKiBPSyBub3cuICBCZSBjYXV0aW91cy4KICAqLwotI2RlZmluZSBTRVFMT0NLX1VOTE9DS0VEIHsgMCwgU1BJTl9MT0NLX1VOTE9DS0VEIH0KLSNkZWZpbmUgc2VxbG9ja19pbml0KHgpCWRvIHsgKih4KSA9IChzZXFsb2NrX3QpIFNFUUxPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fU0VRTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgXAorCQkgeyAwLCBfX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgfQogCisjZGVmaW5lIFNFUUxPQ0tfVU5MT0NLRUQgXAorCQkgX19TRVFMT0NLX1VOTE9DS0VEKG9sZF9zdHlsZV9zZXFsb2NrX2luaXQpCisKKyNkZWZpbmUgc2VxbG9ja19pbml0KHgpIFwKKwkJZG8geyAqKHgpID0gKHNlcWxvY2tfdCkgX19TRVFMT0NLX1VOTE9DS0VEKHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERFRklORV9TRVFMT0NLKHgpIFwKKwkJc2VxbG9ja190IHggPSBfX1NFUUxPQ0tfVU5MT0NLRUQoeCkKIAogLyogTG9jayBvdXQgb3RoZXIgd3JpdGVycyBhbmQgdXBkYXRlIHRoZSBjb3VudC4KICAqIEFjdHMgbGlrZSBhIG5vcm1hbCBzcGluX2xvY2svdW5sb2NrLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDk1MWM0ZTguLmZjMTEwNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTMzNiw3ICszMzYsNiBAQAogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAljb25zdCBjaGFyCQkqZHJpdmVyX25hbWU7CiAJY29uc3QgY2hhcgkJKmRldl9uYW1lOwotCWNvbnN0IGNoYXIJCSpkZXZmc19uYW1lOwogCWludAkJCSBtYWpvcjsKIAlpbnQJCQkgbWlub3I7CiAJaW50CQkJIG5yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKaW5kZXggMWU0Y2U3Mi4uMTE3MTM1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCkBAIC05LDMyICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgotICogVGhlc2UgdmFsdWVzIG9mIHNhX2ZsYWdzIGFyZSB1c2VkIG9ubHkgYnkgdGhlIGtlcm5lbCBhcyBwYXJ0IG9mIHRoZQotICogaXJxIGhhbmRsaW5nIHJvdXRpbmVzLgotICoKLSAqIFNBX0lOVEVSUlVQVCBpcyBhbHNvIHVzZWQgYnkgdGhlIGlycSBoYW5kbGluZyByb3V0aW5lcy4KLSAqIFNBX1NISVJRIGlzIGZvciBzaGFyZWQgaW50ZXJydXB0IHN1cHBvcnQgb24gUENJIGFuZCBFSVNBLgotICogU0FfUFJPQkVJUlEgaXMgc2V0IGJ5IGNhbGxlcnMgd2hlbiB0aGV5IGV4cGVjdCBzaGFyaW5nIG1pc21hdGNoZXMgdG8gb2NjdXIKLSAqLwotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCVNBX1JFU1RBUlQKLSNkZWZpbmUgU0FfU0hJUlEJCTB4MDQwMDAwMDAKLSNkZWZpbmUgU0FfUFJPQkVJUlEJCTB4MDgwMDAwMDAKLQotLyoKLSAqIEFzIGFib3ZlLCB0aGVzZSBjb3JyZXNwb25kIHRvIHRoZSBJT1JFU09VUkNFX0lSUV8qIGRlZmluZXMgaW4KLSAqIGxpbnV4L2lvcG9ydC5oIHRvIHNlbGVjdCB0aGUgaW50ZXJydXB0IGxpbmUgYmVoYXZpb3VyLiAgV2hlbgotICogcmVxdWVzdGluZyBhbiBpbnRlcnJ1cHQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgU0FfVFJJR0dFUiwgdGhlCi0gKiBzZXR0aW5nIHNob3VsZCBiZSBhc3N1bWVkIHRvIGJlICJhcyBhbHJlYWR5IGNvbmZpZ3VyZWQiLCB3aGljaAotICogbWF5IGJlIGFzIHBlciBtYWNoaW5lIG9yIGZpcm13YXJlIGluaXRpYWxpc2F0aW9uLgotICovCi0jZGVmaW5lIFNBX1RSSUdHRVJfTE9XCQkweDAwMDAwMDA4Ci0jZGVmaW5lIFNBX1RSSUdHRVJfSElHSAkJMHgwMDAwMDAwNAotI2RlZmluZSBTQV9UUklHR0VSX0ZBTExJTkcJMHgwMDAwMDAwMgotI2RlZmluZSBTQV9UUklHR0VSX1JJU0lORwkweDAwMDAwMDAxCi0jZGVmaW5lIFNBX1RSSUdHRVJfTUFTSwkoU0FfVFJJR0dFUl9ISUdIfFNBX1RSSUdHRVJfTE9XfFwKLQkJCQkgU0FfVFJJR0dFUl9SSVNJTkd8U0FfVFJJR0dFUl9GQUxMSU5HKQotCi0vKgogICogUmVhbCBUaW1lIHNpZ25hbHMgbWF5IGJlIHF1ZXVlZC4KICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAxNmVlZjAzLi4zNTk3YjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTE3MSw3ICsxNzEsMTUgQEAKIAogZW51bSB7CiAJU0tCX0dTT19UQ1BWNCA9IDEgPDwgMCwKLQlTS0JfR1NPX1VEUFY0ID0gMSA8PCAxLAorCVNLQl9HU09fVURQID0gMSA8PCAxLAorCisJLyogVGhpcyBpbmRpY2F0ZXMgdGhlIHNrYiBpcyBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UuICovCisJU0tCX0dTT19ET0RHWSA9IDEgPDwgMiwKKworCS8qIFRoaXMgaW5kaWNhdGVzIHRoZSB0Y3Agc2VnbWVudCBoYXMgQ1dSIHNldC4gKi8KKwlTS0JfR1NPX1RDUF9FQ04gPSAxIDw8IDMsCisKKwlTS0JfR1NPX1RDUFY2ID0gMSA8PCA0LAogfTsKIAogLyoqIApAQCAtNTk2LDkgKzYwNCwxMiBAQAogCXJldHVybiBsaXN0Xy0+cWxlbjsKIH0KIAorZXh0ZXJuIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBza2JfcXVldWVfbG9ja19rZXk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcXVldWVfaGVhZF9pbml0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmxpc3QtPmxvY2spOworCWxvY2tkZXBfc2V0X2NsYXNzKCZsaXN0LT5sb2NrLCAmc2tiX3F1ZXVlX2xvY2tfa2V5KTsKIAlsaXN0LT5wcmV2ID0gbGlzdC0+bmV4dCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CiAJbGlzdC0+cWxlbiA9IDA7CiB9CkBAIC0xMjk4LDggKzEzMDksNyBAQAogZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9zcGxpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSwgY29uc3QgdTMyIGxlbik7CiAKLWV4dGVybiB2b2lkCSAgICAgICBza2JfcmVsZWFzZV9kYXRhKHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2cpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9oZWFkZXJfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAogCQkJCSAgICAgICBpbnQgbGVuLCB2b2lkICpidWZmZXIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCBjOTNjM2ZlLi44MzdlOGJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTEyNSw0ICsxMjUsNiBAQAogI2RlZmluZSBwdXRfY3B1KCkJCXByZWVtcHRfZW5hYmxlKCkKICNkZWZpbmUgcHV0X2NwdV9ub19yZXNjaGVkKCkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpCiAKK3ZvaWQgc21wX3NldHVwX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKKwogI2VuZGlmIC8qIF9fTElOVVhfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKaW5kZXggZTkyOGMwZC4uYzhiYjY4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKQEAgLTY0MiwxMCArNjQyLDE0IEBACiAJdTE2CQlidXNfbnVtOwogCXUxNgkJY2hpcF9zZWxlY3Q7CiAKKwkvKiBtb2RlIGJlY29tZXMgc3BpX2RldmljZS5tb2RlLCBhbmQgaXMgZXNzZW50aWFsIGZvciBjaGlwcworCSAqIHdoZXJlIHRoZSBkZWZhdWx0IG9mIFNQSV9DU19ISUdIID0gMCBpcyB3cm9uZy4KKwkgKi8KKwl1OAkJbW9kZTsKKwogCS8qIC4uLiBtYXkgbmVlZCBhZGRpdGlvbmFsIHNwaV9kZXZpY2UgY2hpcCBjb25maWcgZGF0YSBoZXJlLgogCSAqIGF2b2lkIHN0dWZmIHByb3RvY29sIGRyaXZlcnMgY2FuIHNldDsgYnV0IGluY2x1ZGUgc3R1ZmYKIAkgKiBuZWVkZWQgdG8gYmVoYXZlIHdpdGhvdXQgYmVpbmcgYm91bmQgdG8gYSBkcml2ZXI6Ci0JICogIC0gY2hpcHNlbGVjdCBwb2xhcml0eQogCSAqICAtIHF1aXJrcyBsaWtlIGNsb2NrIHJhdGUgbWF0dGVyaW5nIHdoZW4gbm90IHNlbGVjdGVkCiAJICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCmluZGV4IGFlMjNiZWUuLjMxNDczZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTgyLDE0ICs4Miw0MCBAQAogLyoKICAqIFB1bGwgdGhlIF9fcmF3KigpIGZ1bmN0aW9ucy9kZWNsYXJhdGlvbnMgKFVQLW5vbmRlYnVnIGRvZXNudCBuZWVkIHRoZW0pOgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmZGVmIENPTkZJR19TTVAKICMgaW5jbHVkZSA8YXNtL3NwaW5sb2NrLmg+CiAjZWxzZQogIyBpbmNsdWRlIDxsaW51eC9zcGlubG9ja191cC5oPgogI2VuZGlmCiAKLSNkZWZpbmUgc3Bpbl9sb2NrX2luaXQobG9jaykJZG8geyAqKGxvY2spID0gU1BJTl9MT0NLX1VOTE9DS0VEOyB9IHdoaWxlICgwKQotI2RlZmluZSByd2xvY2tfaW5pdChsb2NrKQlkbyB7ICoobG9jaykgPSBSV19MT0NLX1VOTE9DS0VEOyB9IHdoaWxlICgwKQorI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworICBleHRlcm4gdm9pZCBfX3NwaW5fbG9ja19pbml0KHNwaW5sb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworIyBkZWZpbmUgc3Bpbl9sb2NrX2luaXQobG9jaykJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJXAorCV9fc3Bpbl9sb2NrX2luaXQoKGxvY2spLCAjbG9jaywgJl9fa2V5KTsJCVwKK30gd2hpbGUgKDApCisKKyNlbHNlCisjIGRlZmluZSBzcGluX2xvY2tfaW5pdChsb2NrKQkJCQkJXAorCWRvIHsgKihsb2NrKSA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisgIGV4dGVybiB2b2lkIF9fcndsb2NrX2luaXQocndsb2NrX3QgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOworIyBkZWZpbmUgcndsb2NrX2luaXQobG9jaykJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJXAorCV9fcndsb2NrX2luaXQoKGxvY2spLCAjbG9jaywgJl9fa2V5KTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIHJ3bG9ja19pbml0KGxvY2spCQkJCQlcCisJZG8geyAqKGxvY2spID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKyNlbmRpZgogCiAjZGVmaW5lIHNwaW5faXNfbG9ja2VkKGxvY2spCV9fcmF3X3NwaW5faXNfbG9ja2VkKCYobG9jayktPnJhd19sb2NrKQogCkBAIC0xMTMsNyArMTM5LDYgQEAKICNkZWZpbmUgX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfc3Bpbl9sb2NrKGxvY2spCiAgZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKTsKICBleHRlcm4gdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwotCiAgZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX2xvY2socndsb2NrX3QgKmxvY2spOwogIGV4dGVybiBpbnQgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrX3QgKmxvY2spOwogIGV4dGVybiB2b2lkIF9yYXdfcmVhZF91bmxvY2socndsb2NrX3QgKmxvY2spOwpAQCAtMTIxLDE3ICsxNDYsMTcgQEAKICBleHRlcm4gaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spOwogI2Vsc2UKLSMgZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykJCV9fcmF3X3NwaW5fdW5sb2NrKCYobG9jayktPnJhd19sb2NrKQotIyBkZWZpbmUgX3Jhd19zcGluX3RyeWxvY2sobG9jaykJX19yYXdfc3Bpbl90cnlsb2NrKCYobG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd19zcGluX2xvY2sobG9jaykJCV9fcmF3X3NwaW5fbG9jaygmKGxvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBcCiAJCV9fcmF3X3NwaW5fbG9ja19mbGFncygmKGxvY2spLT5yYXdfbG9jaywgKihmbGFncykpCisjIGRlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayhsb2NrKQlfX3Jhd19zcGluX3RyeWxvY2soJihsb2NrKS0+cmF3X2xvY2spCisjIGRlZmluZSBfcmF3X3NwaW5fdW5sb2NrKGxvY2spCQlfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfcmVhZF9sb2NrKHJ3bG9jaykJCV9fcmF3X3JlYWRfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQotIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQotIyBkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhyd2xvY2spCV9fcmF3X3JlYWRfdW5sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCi0jIGRlZmluZSBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2spCV9fcmF3X3dyaXRlX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrKQlfX3Jhd19yZWFkX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyMgZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socndsb2NrKQlfX3Jhd19yZWFkX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorIyBkZWZpbmUgX3Jhd193cml0ZV91bmxvY2socndsb2NrKQlfX3Jhd193cml0ZV91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICNlbmRpZgogCiAjZGVmaW5lIHJlYWRfY2FuX2xvY2socndsb2NrKQkJX19yYXdfcmVhZF9jYW5fbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQpAQCAtMTQ3LDYgKzE3MiwxMyBAQAogI2RlZmluZSB3cml0ZV90cnlsb2NrKGxvY2spCQlfX2NvbmRfbG9jayhfd3JpdGVfdHJ5bG9jayhsb2NrKSkKIAogI2RlZmluZSBzcGluX2xvY2sobG9jaykJCQlfc3Bpbl9sb2NrKGxvY2spCisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykgX3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpCisjZWxzZQorIyBkZWZpbmUgc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykgX3NwaW5fbG9jayhsb2NrKQorI2VuZGlmCisKICNkZWZpbmUgd3JpdGVfbG9jayhsb2NrKQkJX3dyaXRlX2xvY2sobG9jaykKICNkZWZpbmUgcmVhZF9sb2NrKGxvY2spCQkJX3JlYWRfbG9jayhsb2NrKQogCkBAIC0xNzIsMjEgKzIwNCwxOCBAQAogLyoKICAqIFdlIGlubGluZSB0aGUgdW5sb2NrIGZ1bmN0aW9ucyBpbiB0aGUgbm9uZGVidWcgY2FzZToKICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSB8fCAhZGVmaW5lZChDT05GSUdfU01QKQorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSB8fCBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSB8fCBcCisJIWRlZmluZWQoQ09ORklHX1NNUCkKICMgZGVmaW5lIHNwaW5fdW5sb2NrKGxvY2spCQlfc3Bpbl91bmxvY2sobG9jaykKICMgZGVmaW5lIHJlYWRfdW5sb2NrKGxvY2spCQlfcmVhZF91bmxvY2sobG9jaykKICMgZGVmaW5lIHdyaXRlX3VubG9jayhsb2NrKQkJX3dyaXRlX3VubG9jayhsb2NrKQotI2Vsc2UKLSMgZGVmaW5lIHNwaW5fdW5sb2NrKGxvY2spCQlfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIHJlYWRfdW5sb2NrKGxvY2spCQlfX3Jhd19yZWFkX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKLSMgZGVmaW5lIHdyaXRlX3VubG9jayhsb2NrKQkJX19yYXdfd3JpdGVfdW5sb2NrKCYobG9jayktPnJhd19sb2NrKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgIWRlZmluZWQoQ09ORklHX1NNUCkKICMgZGVmaW5lIHNwaW5fdW5sb2NrX2lycShsb2NrKQkJX3NwaW5fdW5sb2NrX2lycShsb2NrKQogIyBkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spCQlfcmVhZF91bmxvY2tfaXJxKGxvY2spCiAjIGRlZmluZSB3cml0ZV91bmxvY2tfaXJxKGxvY2spCQlfd3JpdGVfdW5sb2NrX2lycShsb2NrKQogI2Vsc2UKKyMgZGVmaW5lIHNwaW5fdW5sb2NrKGxvY2spCQlfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKKyMgZGVmaW5lIHJlYWRfdW5sb2NrKGxvY2spCQlfX3Jhd19yZWFkX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKKyMgZGVmaW5lIHdyaXRlX3VubG9jayhsb2NrKQkJX19yYXdfd3JpdGVfdW5sb2NrKCYobG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgc3Bpbl91bmxvY2tfaXJxKGxvY2spIFwKICAgICBkbyB7IF9fcmF3X3NwaW5fdW5sb2NrKCYobG9jayktPnJhd19sb2NrKTsgbG9jYWxfaXJxX2VuYWJsZSgpOyB9IHdoaWxlICgwKQogIyBkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKaW5kZXggNzhlNjk4OS4uYjJjNGY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKQEAgLTIwLDYgKzIwLDggQEAKICNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKHgpCUJVR19PTighc3Bpbl9pc19sb2NrZWQoeCkpCiAKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKHNwaW5sb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKKwkJCQkJCQlfX2FjcXVpcmVzKHNwaW5sb2NrX3QpOwogdm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2socndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKIHZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOwogdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMoc3BpbmxvY2tfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfdXAuaAppbmRleCBjZDgxY2VlLi42N2ZhYTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3VwLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICAgZG8geyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IF9fVU5MT0NLKGxvY2spOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9zcGluX2xvY2sobG9jaykJCQlfX0xPQ0sobG9jaykKKyNkZWZpbmUgX3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpCV9fTE9DSyhsb2NrKQogI2RlZmluZSBfcmVhZF9sb2NrKGxvY2spCQkJX19MT0NLKGxvY2spCiAjZGVmaW5lIF93cml0ZV9sb2NrKGxvY2spCQkJX19MT0NLKGxvY2spCiAjZGVmaW5lIF9zcGluX2xvY2tfYmgobG9jaykJCQlfX0xPQ0tfQkgobG9jaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXMuaAppbmRleCA5Y2I1MWUwLi5kYzVmYjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja190eXBlcy5oCkBAIC05LDYgKzksOCBAQAogICogUmVsZWFzZWQgdW5kZXIgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKICMgaW5jbHVkZSA8YXNtL3NwaW5sb2NrX3R5cGVzLmg+CiAjZWxzZQpAQCAtMjQsNiArMjYsOSBAQAogCXVuc2lnbmVkIGludCBtYWdpYywgb3duZXJfY3B1OwogCXZvaWQgKm93bmVyOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKKyNlbmRpZgogfSBzcGlubG9ja190OwogCiAjZGVmaW5lIFNQSU5MT0NLX01BR0lDCQkweGRlYWQ0ZWFkCkBAIC0zNywzMSArNDIsNTMgQEAKIAl1bnNpZ25lZCBpbnQgbWFnaWMsIG93bmVyX2NwdTsKIAl2b2lkICpvd25lcjsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CisjZW5kaWYKIH0gcndsb2NrX3Q7CiAKICNkZWZpbmUgUldMT0NLX01BR0lDCQkweGRlYWYxZWVkCiAKICNkZWZpbmUgU1BJTkxPQ0tfT1dORVJfSU5JVAkoKHZvaWQgKiktMUwpCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgU1BJTl9ERVBfTUFQX0lOSVQobG9ja25hbWUpCS5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9CisjZWxzZQorIyBkZWZpbmUgU1BJTl9ERVBfTUFQX0lOSVQobG9ja25hbWUpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisjIGRlZmluZSBSV19ERVBfTUFQX0lOSVQobG9ja25hbWUpCS5kZXBfbWFwID0geyAubmFtZSA9ICNsb2NrbmFtZSB9CisjZWxzZQorIyBkZWZpbmUgUldfREVQX01BUF9JTklUKGxvY2tuYW1lKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKLSMgZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRAkJCQkJCVwKKyMgZGVmaW5lIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKQkJCQkJXAogCShzcGlubG9ja190KQl7CS5yYXdfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwJXAogCQkJCS5tYWdpYyA9IFNQSU5MT0NLX01BR0lDLAkJXAogCQkJCS5vd25lciA9IFNQSU5MT0NLX09XTkVSX0lOSVQsCQlcCi0JCQkJLm93bmVyX2NwdSA9IC0xIH0KLSNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAkJCQkJCVwKKwkJCQkub3duZXJfY3B1ID0gLTEsCQkJXAorCQkJCVNQSU5fREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CisjZGVmaW5lIF9fUldfTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkJCQkJCVwKIAkocndsb2NrX3QpCXsJLnJhd19sb2NrID0gX19SQVdfUldfTE9DS19VTkxPQ0tFRCwJXAogCQkJCS5tYWdpYyA9IFJXTE9DS19NQUdJQywJCQlcCiAJCQkJLm93bmVyID0gU1BJTkxPQ0tfT1dORVJfSU5JVCwJCVwKLQkJCQkub3duZXJfY3B1ID0gLTEgfQorCQkJCS5vd25lcl9jcHUgPSAtMSwJCQlcCisJCQkJUldfREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CiAjZWxzZQotIyBkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VEIFwKLQkoc3BpbmxvY2tfdCkJewkucmF3X2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgfQotI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIFwKLQkocndsb2NrX3QpCXsJLnJhd19sb2NrID0gX19SQVdfUldfTE9DS19VTkxPQ0tFRCB9CisjIGRlZmluZSBfX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgXAorCShzcGlubG9ja190KQl7CS5yYXdfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwJXAorCQkJCVNQSU5fREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CisjZGVmaW5lIF9fUldfTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgXAorCShyd2xvY2tfdCkJewkucmF3X2xvY2sgPSBfX1JBV19SV19MT0NLX1VOTE9DS0VELAlcCisJCQkJUldfREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CiAjZW5kaWYKIAotI2RlZmluZSBERUZJTkVfU1BJTkxPQ0soeCkJc3BpbmxvY2tfdCB4ID0gU1BJTl9MT0NLX1VOTE9DS0VECi0jZGVmaW5lIERFRklORV9SV0xPQ0soeCkJcndsb2NrX3QgeCA9IFJXX0xPQ0tfVU5MT0NLRUQKKyNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VECV9fU1BJTl9MT0NLX1VOTE9DS0VEKG9sZF9zdHlsZV9zcGluX2luaXQpCisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQJX19SV19MT0NLX1VOTE9DS0VEKG9sZF9zdHlsZV9yd19pbml0KQorCisjZGVmaW5lIERFRklORV9TUElOTE9DSyh4KQlzcGlubG9ja190IHggPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCh4KQorI2RlZmluZSBERUZJTkVfUldMT0NLKHgpCXJ3bG9ja190IHggPSBfX1JXX0xPQ0tfVU5MT0NLRUQoeCkKIAogI2VuZGlmIC8qIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9ja190eXBlc191cC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja190eXBlc191cC5oCmluZGV4IDA0MTM1YjAuLjI3NjQ0YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXNfdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmgKQEAgLTEyLDEwICsxMiwxNCBAQAogICogUmVsZWFzZWQgdW5kZXIgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCiAgKi8KIAotI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSB8fCBcCisJZGVmaW5lZChDT05GSUdfREVCVUdfTE9DS19BTExPQykKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzbG9jazsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOworI2VuZGlmCiB9IHJhd19zcGlubG9ja190OwogCiAjZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCB7IDEgfQpAQCAtMzAsNiArMzQsOSBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLyogbm8gZGVidWcgdmVyc2lvbiBvbiBVUCAqLworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7CisjZW5kaWYKIH0gcmF3X3J3bG9ja190OwogCiAjZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQgeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3VwLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3VwLmgKaW5kZXggMzFhY2NmMi4uZWE1NGM0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja191cC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdXAuaApAQCAtMTgsNyArMTgsNiBAQAogICovCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKLQogI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+c2xvY2sgPT0gMCkKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RhY2t0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9zdGFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjODFlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3RhY2t0cmFjZS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19MSU5VWF9TVEFDS1RSQUNFX0gKKyNkZWZpbmUgX19MSU5VWF9TVEFDS1RSQUNFX0gKKworI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCitzdHJ1Y3Qgc3RhY2tfdHJhY2UgeworCXVuc2lnbmVkIGludCBucl9lbnRyaWVzLCBtYXhfZW50cmllczsKKwl1bnNpZ25lZCBsb25nICplbnRyaWVzOworfTsKKworZXh0ZXJuIHZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBhbGxfY29udGV4dHMsCisJCQkgICAgIHVuc2lnbmVkIGludCBza2lwKTsKKworZXh0ZXJuIHZvaWQgcHJpbnRfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwgaW50IHNwYWNlcyk7CisjZWxzZQorIyBkZWZpbmUgc2F2ZV9zdGFja190cmFjZSh0cmFjZSwgdGFzaywgYWxsLCBza2lwKQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBwcmludF9zdGFja190cmFjZSh0cmFjZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IDUwMzU2NDMuLjdiMjdjMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC0xNTksNyArMTU5LDkgQEAKIAkJCQkJCSAqIGRldGVybWluZSB3aGF0IGRldmljZSBudW1iZXIKIAkJCQkJCSAqIHRvIHJlcG9ydCAocmVhbCBvciB2aXJ0dWFsKQogCQkJCQkJICovCi0KKwlpbnQJCQlycV9zZW5kZmlsZV9vazsgLyogdHVybmVkIG9mZiBpbiBnc3MgcHJpdmFjeQorCQkJCQkJICogdG8gcHJldmVudCBlbmNyeXB0aW5nIHBhZ2UKKwkJCQkJCSAqIGNhY2hlIHBhZ2VzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJcnFfd2FpdDsJLyogc3luY2hyb25pemF0aW9uICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGM0MWUyZDYuLjVlNTkxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0xODksNyArMTg5LDcgQEAKIAogI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gaW50IHpvbmVfcmVjbGFpbV9tb2RlOwotZXh0ZXJuIGludCB6b25lX3JlY2xhaW1faW50ZXJ2YWw7CitleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87CiBleHRlcm4gaW50IHpvbmVfcmVjbGFpbShzdHJ1Y3Qgem9uZSAqLCBnZnBfdCwgdW5zaWduZWQgaW50KTsKICNlbHNlCiAjZGVmaW5lIHpvbmVfcmVjbGFpbV9tb2RlIDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDQ2ZTRkOGYuLmU0YjFhNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtMTg4LDcgKzE4OCw3IEBACiAJVk1fRFJPUF9QQUdFQ0FDSEU9MjksCS8qIGludDogbnVrZSBsb3RzIG9mIHBhZ2VjYWNoZSAqLwogCVZNX1BFUkNQVV9QQUdFTElTVF9GUkFDVElPTj0zMCwvKiBpbnQ6IGZyYWN0aW9uIG9mIHBhZ2VzIGluIGVhY2ggcGVyY3B1X3BhZ2VsaXN0ICovCiAJVk1fWk9ORV9SRUNMQUlNX01PREU9MzEsIC8qIHJlY2xhaW0gbG9jYWwgem9uZSBtZW1vcnkgYmVmb3JlIGdvaW5nIG9mZiBub2RlICovCi0JVk1fWk9ORV9SRUNMQUlNX0lOVEVSVkFMPTMyLCAvKiB0aW1lIHBlcmlvZCB0byB3YWl0IGFmdGVyIHJlY2xhaW0gZmFpbHVyZSAqLworCVZNX01JTl9VTk1BUFBFRD0zMiwJLyogU2V0IG1pbiBwZXJjZW50IG9mIHVubWFwcGVkIHBhZ2VzICovCiAJVk1fUEFOSUNfT05fT09NPTMzLAkvKiBwYW5pYyBhdCBvdXQtb2YtbWVtb3J5ICovCiAJVk1fVkRTT19FTkFCTEVEPTM0LAkvKiBtYXAgVkRTTyBpbnRvIG5ldyBwcm9jZXNzZXM/ICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggY2IzNWNhNS4uYjNiODA3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC01Nyw3ICs1Nyw2IEBACiAJdW5zaWduZWQgY2hhciAqZmxhZ19idWZfcHRyOwogCWludCB1c2VkOwogCWludCBzaXplOwotCWludCBhY3RpdmU7CiAJaW50IGNvbW1pdDsKIAlpbnQgcmVhZDsKIAkvKiBEYXRhIHBvaW50cyBoZXJlICovCkBAIC0yNTksNyArMjU4LDYgQEAKICNkZWZpbmUgVFRZX0RPX1dSSVRFX1dBS0VVUCAJNQkvKiBDYWxsIHdyaXRlX3dha2V1cCBhZnRlciBxdWV1aW5nIG5ldyAqLwogI2RlZmluZSBUVFlfUFVTSCAJCTYJLyogbl90dHkgcHJpdmF0ZSAqLwogI2RlZmluZSBUVFlfQ0xPU0lORyAJCTcJLyogLT5jbG9zZSgpIGluIHByb2dyZXNzICovCi0jZGVmaW5lIFRUWV9ET05UX0ZMSVAgCQk4CS8qIERlZmVyIGJ1ZmZlciBmbGlwICovCiAjZGVmaW5lIFRUWV9MRElTQyAJCTkJLyogTGluZSBkaXNjaXBsaW5lIGF0dGFjaGVkICovCiAjZGVmaW5lIFRUWV9IV19DT09LX09VVCAJMTQJLyogSGFyZHdhcmUgY2FuIGRvIG91dHB1dCBjb29raW5nICovCiAjZGVmaW5lIFRUWV9IV19DT09LX0lOIAkJMTUJLyogSGFyZHdhcmUgY2FuIGRvIGlucHV0IGNvb2tpbmcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggYjM2OGIyOS4uNThjOTYxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTE1Nyw3ICsxNTcsNiBAQAogCXN0cnVjdCBjZGV2IGNkZXY7CiAJc3RydWN0IG1vZHVsZQkqb3duZXI7CiAJY29uc3QgY2hhcgkqZHJpdmVyX25hbWU7Ci0JY29uc3QgY2hhcgkqZGV2ZnNfbmFtZTsKIAljb25zdCBjaGFyCSpuYW1lOwogCWludAluYW1lX2Jhc2U7CS8qIG9mZnNldCBvZiBwcmludGVkIG5hbWUgKi8KIAlpbnQJbWFqb3I7CQkvKiBtYWpvciBkZXZpY2UgbnVtYmVyICovCkBAIC0yNDIsOCArMjQxLDE1IEBACiAgKiAJaXMgYWxzbyBhIHByb21pc2UsIGlmIHRoZSBhYm92ZSBjYXNlIGlzIHRydWUsIG5vdCB0byBzaWduYWwKICAqIAlvdmVycnVucywgZWl0aGVyLikKICAqCi0gKiBUVFlfRFJJVkVSX05PX0RFVkZTIC0tLSBpZiBzZXQsIGRvIG5vdCBjcmVhdGUgZGV2ZnMgZW50cmllcy4gVGhpcwotICoJaXMgb25seSB1c2VkIGJ5IHR0eV9yZWdpc3Rlcl9kcml2ZXIoKS4KKyAqIFRUWV9EUklWRVJfRFlOQU1JQ19ERVYgLS0tIGlmIHNldCwgdGhlIGluZGl2aWR1YWwgdHR5IGRldmljZXMgbmVlZAorICoJdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0byB0dHlfcmVnaXN0ZXJfZHJpdmVyKCkgd2hlbiB0aGUKKyAqCWRldmljZSBpcyBmb3VuZCBpbiB0aGUgc3lzdGVtIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aCBhIGNhbGwgdG8KKyAqCXR0eV91bnJlZ2lzdGVyX2RldmljZSgpIHNvIHRoZSBkZXZpY2VzIHdpbGwgYmUgc2hvdyB1cAorICoJcHJvcGVybHkgaW4gc3lzZnMuICBJZiBub3Qgc2V0LCBkcml2ZXItPm51bSBlbnRyaWVzIHdpbGwgYmUKKyAqCWNyZWF0ZWQgYnkgdGhlIHR0eSBjb3JlIGluIHN5c2ZzIHdoZW4gdHR5X3JlZ2lzdGVyX2RyaXZlcigpIGlzCisgKgljYWxsZWQuICBUaGlzIGlzIHRvIGJlIHVzZWQgYnkgZHJpdmVycyB0aGF0IGhhdmUgdHR5IGRldmljZXMKKyAqCXRoYXQgY2FuIGFwcGVhciBhbmQgZGlzYXBwZWFyIHdoaWxlIHRoZSBtYWluIHR0eSBkcml2ZXIgaXMKKyAqCXJlZ2lzdGVyZWQgd2l0aCB0aGUgdHR5IGNvcmUuCiAgKgogICogVFRZX0RSSVZFUl9ERVZQVFNfTUVNIC0tIGRvbid0IHVzZSB0aGUgc3RhbmRhcmQgYXJyYXlzLCBpbnN0ZWFkCiAgKgl1c2UgZHluYW1pYyBtZW1vcnkga2V5ZWQgdGhyb3VnaCB0aGUgZGV2cHRzIGZpbGVzeXN0ZW0uICBUaGlzCkBAIC0yNTIsNyArMjU4LDcgQEAKICNkZWZpbmUgVFRZX0RSSVZFUl9JTlNUQUxMRUQJCTB4MDAwMQogI2RlZmluZSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MJMHgwMDAyCiAjZGVmaW5lIFRUWV9EUklWRVJfUkVBTF9SQVcJCTB4MDAwNAotI2RlZmluZSBUVFlfRFJJVkVSX05PX0RFVkZTCQkweDAwMDgKKyNkZWZpbmUgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVgkJMHgwMDA4CiAjZGVmaW5lIFRUWV9EUklWRVJfREVWUFRTX01FTQkJMHgwMDEwCiAKIC8qIHR0eSBkcml2ZXIgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaCBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaAppbmRleCAzMTU0ODMwLi5lYjY3N2NmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtMTIsNyArMTIsNyBAQAogCQkJCQl1bnNpZ25lZCBjaGFyIGNoLCBjaGFyIGZsYWcpCiB7CiAJc3RydWN0IHR0eV9idWZmZXIgKnRiID0gdHR5LT5idWYudGFpbDsKLQlpZiAodGIgJiYgdGItPmFjdGl2ZSAmJiB0Yi0+dXNlZCA8IHRiLT5zaXplKSB7CisJaWYgKHRiICYmIHRiLT51c2VkIDwgdGItPnNpemUpIHsKIAkJdGItPmZsYWdfYnVmX3B0clt0Yi0+dXNlZF0gPSBmbGFnOwogCQl0Yi0+Y2hhcl9idWZfcHRyW3RiLT51c2VkKytdID0gY2g7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGE1ZTQ2ZTcuLjNmMjM1NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTE3Nyw4ICsxNzcsMTUgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIHR5cGVkZWYgdW5zaWduZWQgX19iaXR3aXNlX18gZ2ZwX3Q7CisKKyNpZmRlZiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUCit0eXBlZGVmIHU2NCByZXNvdXJjZV9zaXplX3Q7CisjZWxzZQordHlwZWRlZiB1MzIgcmVzb3VyY2Vfc2l6ZV90OwogI2VuZGlmCiAKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKIHN0cnVjdCB1c3RhdCB7CiAJX19rZXJuZWxfZGFkZHJfdAlmX3RmcmVlOwogCV9fa2VybmVsX2lub190CQlmX3Rpbm9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oCmluZGV4IGJkZDM5YmUuLjkwMjIzZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC91ZHAuaApAQCAtNDYsNyArNDYsNyBAQAogCXVuc2lnbmVkIGludAkgY29ya2ZsYWc7CS8qIENvcmsgaXMgcmVxdWlyZWQgKi8KICAgCV9fdTE2CQkgZW5jYXBfdHlwZTsJLyogSXMgdGhpcyBhbiBFbmNhcHN1bGF0aW9uIHNvY2tldD8gKi8KIAkvKgotCSAqIEZvbGxvd2luZyBtZW1iZXIgcmV0YWlucyB0aGUgaW5mb21hdGlvbiB0byBjcmVhdGUgYSBVRFAgaGVhZGVyCisJICogRm9sbG93aW5nIG1lbWJlciByZXRhaW5zIHRoZSBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBVRFAgaGVhZGVyCiAJICogd2hlbiB0aGUgc29ja2V0IGlzIHVuY29ya2VkLgogCSAqLwogCV9fdTE2CQkgbGVuOwkJLyogdG90YWwgbGVuZ3RoIG9mIHBlbmRpbmcgZnJhbWVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIGIvaW5jbHVkZS9saW51eC91ZnNfZnMuaAppbmRleCA5MTRmOTExLi5mYzYyODg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKQEAgLTk2Niw3ICs5NjYsNyBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9vcGVyYXRpb25zOwogCi1leHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1ZnNfYW9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVmc19hb3BzOwogCiAvKiBpYWxsb2MuYyAqLwogZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtOTkzLDcgKzk5Myw3IEBACiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCiAvKiB0cnVuY2F0ZS5jICovCi1leHRlcm4gdm9pZCB1ZnNfdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgdWZzX3RydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdWZzX3NiX2luZm8gKlVGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oIGIvaW5jbHVkZS9saW51eC92ZXJtYWdpYy5oCmluZGV4IGRjN2M2MjEuLjQ2OTE5ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmVybWFnaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Zlcm1hZ2ljLmgKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogLyogU2ltcGx5IHNhbml0eSB2ZXJzaW9uIHN0YW1wIGZvciBtb2R1bGVzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwZGFmNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTAsMCArMSwyMTUgQEAKKyNpZm5kZWYgX0xJTlVYX1ZNU1RBVF9ICisjZGVmaW5lIF9MSU5VWF9WTVNUQVRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNpZmRlZiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMKKy8qCisgKiBMaWdodCB3ZWlnaHQgcGVyIGNwdSBjb3VudGVyIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvdW50ZXJzIHNob3VsZCBvbmx5IGJlIGluY3JlbWVudGVkIGFuZCBubyBjcml0aWNhbCBrZXJuZWwgY29tcG9uZW50CisgKiBzaG91bGQgcmVseSBvbiB0aGUgY291bnRlciB2YWx1ZXMuCisgKgorICogQ291bnRlcnMgYXJlIGhhbmRsZWQgY29tcGxldGVseSBpbmxpbmUuIE9uIG1hbnkgcGxhdGZvcm1zIHRoZSBjb2RlCisgKiBnZW5lcmF0ZWQgd2lsbCBzaW1wbHkgYmUgdGhlIGluY3JlbWVudCBvZiBhIGdsb2JhbCBhZGRyZXNzLgorICovCisKKyNkZWZpbmUgRk9SX0FMTF9aT05FUyh4KSB4IyNfRE1BLCB4IyNfRE1BMzIsIHgjI19OT1JNQUwsIHgjI19ISUdICisKK2VudW0gdm1fZXZlbnRfaXRlbSB7IFBHUEdJTiwgUEdQR09VVCwgUFNXUElOLCBQU1dQT1VULAorCQlGT1JfQUxMX1pPTkVTKFBHQUxMT0MpLAorCQlQR0ZSRUUsIFBHQUNUSVZBVEUsIFBHREVBQ1RJVkFURSwKKwkJUEdGQVVMVCwgUEdNQUpGQVVMVCwKKwkJRk9SX0FMTF9aT05FUyhQR1JFRklMTCksCisJCUZPUl9BTExfWk9ORVMoUEdTVEVBTCksCisJCUZPUl9BTExfWk9ORVMoUEdTQ0FOX0tTV0FQRCksCisJCUZPUl9BTExfWk9ORVMoUEdTQ0FOX0RJUkVDVCksCisJCVBHSU5PREVTVEVBTCwgU0xBQlNfU0NBTk5FRCwgS1NXQVBEX1NURUFMLCBLU1dBUERfSU5PREVTVEVBTCwKKwkJUEFHRU9VVFJVTiwgQUxMT0NTVEFMTCwgUEdST1RBVEVELAorCQlOUl9WTV9FVkVOVF9JVEVNUworfTsKKworc3RydWN0IHZtX2V2ZW50X3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nIGV2ZW50W05SX1ZNX0VWRU5UX0lURU1TXTsKK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgdm1fZXZlbnRfc3RhdGUsIHZtX2V2ZW50X3N0YXRlcyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvdW50X3ZtX2V2ZW50KGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKQoreworCV9fZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dKSsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfdm1fZXZlbnQoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0pCit7CisJZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dKSsrOworCXB1dF9jcHUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY291bnRfdm1fZXZlbnRzKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtLCBsb25nIGRlbHRhKQoreworCV9fZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dKSArPSBkZWx0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvdW50X3ZtX2V2ZW50cyhlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSwgbG9uZyBkZWx0YSkKK3sKKwlnZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMuZXZlbnRbaXRlbV0pKys7CisJcHV0X2NwdSgpOworfQorCitleHRlcm4gdm9pZCBhbGxfdm1fZXZlbnRzKHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB2bV9ldmVudHNfZm9sZF9jcHUoaW50IGNwdSk7CisKKyNlbHNlCisKKy8qIERpc2FibGUgY291bnRlcnMgKi8KKyNkZWZpbmUgZ2V0X2NwdV92bV9ldmVudHMoZSkJMEwKKyNkZWZpbmUgY291bnRfdm1fZXZlbnQoZSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBjb3VudF92bV9ldmVudHMoZSxkKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fY291bnRfdm1fZXZlbnQoZSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2NvdW50X3ZtX2V2ZW50cyhlLGQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdm1fZXZlbnRzX2ZvbGRfY3B1KHgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyAqLworCisjZGVmaW5lIF9fY291bnRfem9uZV92bV9ldmVudHMoaXRlbSwgem9uZSwgZGVsdGEpIFwKKwkJCV9fY291bnRfdm1fZXZlbnRzKGl0ZW0jI19ETUEgKyB6b25lX2lkeCh6b25lKSwgZGVsdGEpCisKKy8qCisgKiBab25lIGJhc2VkIHBhZ2UgYWNjb3VudGluZyB3aXRoIHBlciBjcHUgZGlmZmVyZW50aWFscy4KKyAqLworZXh0ZXJuIGF0b21pY19sb25nX3Qgdm1fc3RhdFtOUl9WTV9aT05FX1NUQVRfSVRFTVNdOworCitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9wYWdlX3N0YXRlX2FkZChsb25nIHgsIHN0cnVjdCB6b25lICp6b25lLAorCQkJCSBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCit7CisJYXRvbWljX2xvbmdfYWRkKHgsICZ6b25lLT52bV9zdGF0W2l0ZW1dKTsKKwlhdG9taWNfbG9uZ19hZGQoeCwgJnZtX3N0YXRbaXRlbV0pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2xvYmFsX3BhZ2Vfc3RhdGUoZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtKQoreworCWxvbmcgeCA9IGF0b21pY19sb25nX3JlYWQoJnZtX3N0YXRbaXRlbV0pOworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoeCA8IDApCisJCXggPSAwOworI2VuZGlmCisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsCisJCQkJCWVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlsb25nIHggPSBhdG9taWNfbG9uZ19yZWFkKCZ6b25lLT52bV9zdGF0W2l0ZW1dKTsKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHggPCAwKQorCQl4ID0gMDsKKyNlbmRpZgorCXJldHVybiB4OworfQorCisjaWZkZWYgQ09ORklHX05VTUEKKy8qCisgKiBEZXRlcm1pbmUgdGhlIHBlciBub2RlIHZhbHVlIG9mIGEgc3RhdCBpdGVtLiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgZnJlcXVlbnRseSBpbiBhIE5VTUEgbWFjaGluZSwgc28gdHJ5IHRvIGJlIGFzCisgKiBmcnVnYWwgYXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2Vfc3RhdGUoaW50IG5vZGUsCisJCQkJIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZXMgPSBOT0RFX0RBVEEobm9kZSktPm5vZGVfem9uZXM7CisKKwlyZXR1cm4KKyNpZm5kZWYgQ09ORklHX0RNQV9JU19OT1JNQUwKKyNpZiAhZGVmaW5lZChDT05GSUdfRE1BX0lTX0RNQTMyKSAmJiBCSVRTX1BFUl9MT05HID49IDY0CisJCXpvbmVfcGFnZV9zdGF0ZSgmem9uZXNbWk9ORV9ETUEzMl0sIGl0ZW0pICsKKyNlbmRpZgorCQl6b25lX3BhZ2Vfc3RhdGUoJnpvbmVzW1pPTkVfTk9STUFMXSwgaXRlbSkgKworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJem9uZV9wYWdlX3N0YXRlKCZ6b25lc1taT05FX0hJR0hNRU1dLCBpdGVtKSArCisjZW5kaWYKKwkJem9uZV9wYWdlX3N0YXRlKCZ6b25lc1taT05FX0RNQV0sIGl0ZW0pOworfQorCitleHRlcm4gdm9pZCB6b25lX3N0YXRpc3RpY3Moc3RydWN0IHpvbmVsaXN0ICosIHN0cnVjdCB6b25lICopOworCisjZWxzZQorCisjZGVmaW5lIG5vZGVfcGFnZV9zdGF0ZShub2RlLCBpdGVtKSBnbG9iYWxfcGFnZV9zdGF0ZShpdGVtKQorI2RlZmluZSB6b25lX3N0YXRpc3RpY3MoX3psLF96KSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCisjZGVmaW5lIF9fYWRkX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKQlcCisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKQorI2RlZmluZSBfX3N1Yl96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkJXAorCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksLShfX2QpKQorCisjZGVmaW5lIGFkZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkgbW9kX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgX19kKQorI2RlZmluZSBzdWJfem9uZV9wYWdlX3N0YXRlKF9feiwgX19pLCBfX2QpIG1vZF96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIC0oX19kKSkKKworc3RhdGljIGlubGluZSB2b2lkIHphcF96b25lX3ZtX3N0YXRzKHN0cnVjdCB6b25lICp6b25lKQoreworCW1lbXNldCh6b25lLT52bV9zdGF0LCAwLCBzaXplb2Yoem9uZS0+dm1fc3RhdCkpOworfQorCitleHRlcm4gdm9pZCBpbmNfem9uZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqLCBlbnVtIHpvbmVfc3RhdF9pdGVtKTsKKworI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgX19tb2Rfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCB6b25lICosIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwgaW50KTsKK3ZvaWQgX19pbmNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGVudW0gem9uZV9zdGF0X2l0ZW0pOwordm9pZCBfX2RlY196b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKiwgZW51bSB6b25lX3N0YXRfaXRlbSk7CisKK3ZvaWQgbW9kX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqLCBlbnVtIHpvbmVfc3RhdF9pdGVtLCBpbnQpOwordm9pZCBpbmNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGVudW0gem9uZV9zdGF0X2l0ZW0pOwordm9pZCBkZWNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGVudW0gem9uZV9zdGF0X2l0ZW0pOworCitleHRlcm4gdm9pZCBpbmNfem9uZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqLCBlbnVtIHpvbmVfc3RhdF9pdGVtKTsKKwordm9pZCByZWZyZXNoX2NwdV92bV9zdGF0cyhpbnQpOwordm9pZCByZWZyZXNoX3ZtX3N0YXRzKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBXZSBkbyBub3QgbWFpbnRhaW4gZGlmZmVyZW50aWFscyBpbiBhIHNpbmdsZSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KKyAqIFRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZ5IHRoZSB6b25lIGFuZCBnbG9iYWwgY291bnRlcnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsCisJCQllbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sIGludCBkZWx0YSkKK3sKKwl6b25lX3BhZ2Vfc3RhdGVfYWRkKGRlbHRhLCB6b25lLCBpdGVtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5jX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCWVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlhdG9taWNfbG9uZ19pbmMoJnBhZ2Vfem9uZShwYWdlKS0+dm1fc3RhdFtpdGVtXSk7CisJYXRvbWljX2xvbmdfaW5jKCZ2bV9zdGF0W2l0ZW1dKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVjX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCWVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlhdG9taWNfbG9uZ19kZWMoJnBhZ2Vfem9uZShwYWdlKS0+dm1fc3RhdFtpdGVtXSk7CisJYXRvbWljX2xvbmdfZGVjKCZ2bV9zdGF0W2l0ZW1dKTsKK30KKworLyoKKyAqIFdlIG9ubHkgdXNlIGF0b21pYyBvcGVyYXRpb25zIHRvIHVwZGF0ZSBjb3VudGVycy4gU28gdGhlcmUgaXMgbm8gbmVlZCB0bworICogZGlzYWJsZSBpbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIGluY196b25lX3BhZ2Vfc3RhdGUgX19pbmNfem9uZV9wYWdlX3N0YXRlCisjZGVmaW5lIGRlY196b25lX3BhZ2Vfc3RhdGUgX19kZWNfem9uZV9wYWdlX3N0YXRlCisjZGVmaW5lIG1vZF96b25lX3BhZ2Vfc3RhdGUgX19tb2Rfem9uZV9wYWdlX3N0YXRlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWZyZXNoX2NwdV92bV9zdGF0cyhpbnQgY3B1KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWZyZXNoX3ZtX3N0YXRzKHZvaWQpIHsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTElOVVhfVk1TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FpdC5oIGIvaW5jbHVkZS9saW51eC93YWl0LmgKaW5kZXggNTQ0ZTg1NS4uNzk0YmU3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93YWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC93YWl0LmgKQEAgLTY4LDcgKzY4LDcgQEAKIAl3YWl0X3F1ZXVlX3QgbmFtZSA9IF9fV0FJVFFVRVVFX0lOSVRJQUxJWkVSKG5hbWUsIHRzaykKIAogI2RlZmluZSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihuYW1lKSB7CQkJCVwKLQkubG9jawkJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCQkJCVwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLmxvY2spLAkJXAogCS50YXNrX2xpc3QJPSB7ICYobmFtZSkudGFza19saXN0LCAmKG5hbWUpLnRhc2tfbGlzdCB9IH0KIAogI2RlZmluZSBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChuYW1lKSBcCkBAIC03Nyw5ICs3NywxNSBAQAogI2RlZmluZSBfX1dBSVRfQklUX0tFWV9JTklUSUFMSVpFUih3b3JkLCBiaXQpCQkJCVwKIAl7IC5mbGFncyA9IHdvcmQsIC5iaXRfbnIgPSBiaXQsIH0KIAorLyoKKyAqIGxvY2tkZXA6IHdlIHdhbnQgb25lIGxvY2stY2xhc3MgZm9yIGFsbCB3YWl0cXVldWUgbG9ja3MuCisgKi8KK2V4dGVybiBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgd2FpdHF1ZXVlX2xvY2tfa2V5OworCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVfaGVhZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKIHsKIAlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnEtPmxvY2ssICZ3YWl0cXVldWVfbG9ja19rZXkpOwogCUlOSVRfTElTVF9IRUFEKCZxLT50YXNrX2xpc3QpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmggYi9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmgKaW5kZXggMTE5MmVkOGYuLjAxMWJjZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2F0Y2hkb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhdGNoZG9nLmgKQEAgLTI4LDYgKzI4LDkgQEAKICNkZWZpbmUJV0RJT0NfS0VFUEFMSVZFCQlfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDUsIGludCkKICNkZWZpbmUJV0RJT0NfU0VUVElNRU9VVCAgICAgICAgX0lPV1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgNiwgaW50KQogI2RlZmluZQlXRElPQ19HRVRUSU1FT1VUICAgICAgICBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDcsIGludCkKKyNkZWZpbmUJV0RJT0NfU0VUUFJFVElNRU9VVAlfSU9XUihXQVRDSERPR19JT0NUTF9CQVNFLCA4LCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVFBSRVRJTUVPVVQJX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCA5LCBpbnQpCisjZGVmaW5lCVdESU9DX0dFVFRJTUVMRUZUCV9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMTAsIGludCkKIAogI2RlZmluZQlXRElPRl9VTktOT1dOCQktMQkvKiBVbmtub3duIGZsYWcgZXJyb3IgKi8KICNkZWZpbmUJV0RJT1NfVU5LTk9XTgkJLTEJLyogVW5rbm93biBzdGF0dXMgZXJyb3IgKi8KQEAgLTM4LDkgKzQxLDEwIEBACiAjZGVmaW5lCVdESU9GX0VYVEVSTjIJCTB4MDAwOAkvKiBFeHRlcm5hbCByZWxheSAyICovCiAjZGVmaW5lCVdESU9GX1BPV0VSVU5ERVIJMHgwMDEwCS8qIFBvd2VyIGJhZC9wb3dlciBmYXVsdCAqLwogI2RlZmluZQlXRElPRl9DQVJEUkVTRVQJCTB4MDAyMAkvKiBDYXJkIHByZXZpb3VzbHkgcmVzZXQgdGhlIENQVSAqLwotI2RlZmluZSBXRElPRl9QT1dFUk9WRVIJCTB4MDA0MAkvKiBQb3dlciBvdmVyIHZvbHRhZ2UgKi8KLSNkZWZpbmUgV0RJT0ZfU0VUVElNRU9VVAkweDAwODAgIC8qIFNldCB0aW1lb3V0IChpbiBzZWNvbmRzKSAqLwotI2RlZmluZSBXRElPRl9NQUdJQ0NMT1NFCTB4MDEwMAkvKiBTdXBwb3J0cyBtYWdpYyBjbG9zZSBjaGFyICovCisjZGVmaW5lCVdESU9GX1BPV0VST1ZFUgkJMHgwMDQwCS8qIFBvd2VyIG92ZXIgdm9sdGFnZSAqLworI2RlZmluZQlXRElPRl9TRVRUSU1FT1VUCTB4MDA4MCAgLyogU2V0IHRpbWVvdXQgKGluIHNlY29uZHMpICovCisjZGVmaW5lCVdESU9GX01BR0lDQ0xPU0UJMHgwMTAwCS8qIFN1cHBvcnRzIG1hZ2ljIGNsb3NlIGNoYXIgKi8KKyNkZWZpbmUJV0RJT0ZfUFJFVElNRU9VVAkweDAyMDAgIC8qIFByZXRpbWVvdXQgKGluIHNlY29uZHMpLCBnZXQvc2V0ICovCiAjZGVmaW5lCVdESU9GX0tFRVBBTElWRVBJTkcJMHg4MDAwCS8qIEtlZXAgYWxpdmUgcGluZyByZXBseSAqLwogCiAjZGVmaW5lCVdESU9TX0RJU0FCTEVDQVJECTB4MDAwMQkvKiBUdXJuIG9mZiB0aGUgd2F0Y2hkb2cgdGltZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaAppbmRleCBhZDljMTcxLi4zYzQzYjk1ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLXR5cGVzLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAogc3RydWN0IHR1bmVyX3BhcmFtcyB7CiAJZW51bSBwYXJhbV90eXBlIHR5cGU7CisKIAkvKiBNYW55IFBoaWxpcHMgYmFzZWQgdHVuZXJzIGhhdmUgYSBjb21tZW50IGxpa2UgdGhpcyBpbiB0aGVpcgogCSAqIGRhdGFzaGVldDoKIAkgKgpAQCAtMzksNiArNDAsNjAgQEAKIAkgKiBzdGF0aWMgdW5sZXNzIHRoZSBjb250cm9sIGJ5dGUgd2FzIHNlbnQgZmlyc3QuCiAJICovCiAJdW5zaWduZWQgaW50IGNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXE6MTsKKwkvKiBTZXQgdG8gMSBpZiB0aGlzIHR1bmVyIHVzZXMgYSB0ZGE5ODg3ICovCisJdW5zaWduZWQgaW50IGhhc190ZGE5ODg3OjE7CisJLyogTWFueSBQaGlsaXBzIHR1bmVycyB1c2UgdGRhOTg4NyBQT1JUMSB0byBzZWxlY3QgdGhlIEZNIHJhZGlvCisJICAgc2Vuc2l0aXZpdHkuIElmIHRoaXMgc2V0dGluZyBpcyAxLCB0aGVuIHNldCBQT1JUMSB0byAxIHRvCisJICAgZ2V0IHByb3BlciBGTSByZWNlcHRpb24uICovCisJdW5zaWduZWQgaW50IHBvcnQxX2ZtX2hpZ2hfc2Vuc2l0aXZpdHk6MTsKKwkvKiBTb21lIFBoaWxpcHMgdHVuZXJzIHVzZSB0ZGE5ODg3IFBPUlQyIHRvIHNlbGVjdCB0aGUgRk0gcmFkaW8KKwkgICBzZW5zaXRpdml0eS4gSWYgdGhpcyBzZXR0aW5nIGlzIDEsIHRoZW4gc2V0IFBPUlQyIHRvIDEgdG8KKwkgICBnZXQgcHJvcGVyIEZNIHJlY2VwdGlvbi4gKi8KKwl1bnNpZ25lZCBpbnQgcG9ydDJfZm1faGlnaF9zZW5zaXRpdml0eToxOworCS8qIE1vc3QgdHVuZXJzIHdpdGggYSB0ZGE5ODg3IHVzZSBRU1MgbW9kZS4gU29tZSAoY2hlYXBlcikgdHVuZXJzCisJICAgdXNlIEludGVyY2FycmllciBtb2RlLiBJZiB0aGlzIHNldHRpbmcgaXMgMSwgdGhlbiB0aGUgdHVuZXIKKwkgICBuZWVkcyB0byBiZSBzZXQgdG8gaW50ZXJjYXJyaWVyIG1vZGUuICovCisJdW5zaWduZWQgaW50IGludGVyY2Fycmllcl9tb2RlOjE7CisJLyogVGhpcyBzZXR0aW5nIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIFBPUlQxLgorCSAgIDAgbWVhbnMgaW5hY3RpdmUsIDEgbWVhbnMgYWN0aXZlLiBOb3RlOiB0aGUgYWN0dWFsIGJpdAorCSAgIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIHRkYTk4ODcgaXMgaW52ZXJ0ZWQuIFNvIGEgMCBoZXJlCisJICAgbWVhbnMgYSAxIGluIHRoZSBCNiBiaXQuICovCisJdW5zaWduZWQgaW50IHBvcnQxX2FjdGl2ZToxOworCS8qIFRoaXMgc2V0dGluZyBzZXRzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBQT1JUMi4KKwkgICAwIG1lYW5zIGluYWN0aXZlLCAxIG1lYW5zIGFjdGl2ZS4gTm90ZTogdGhlIGFjdHVhbCBiaXQKKwkgICB2YWx1ZSB3cml0dGVuIHRvIHRoZSB0ZGE5ODg3IGlzIGludmVydGVkLiBTbyBhIDAgaGVyZQorCSAgIG1lYW5zIGEgMSBpbiB0aGUgQjcgYml0LiAqLworCXVuc2lnbmVkIGludCBwb3J0Ml9hY3RpdmU6MTsKKwkvKiBTb21ldGltZXMgUE9SVDEgaXMgaW52ZXJ0ZWQgd2hlbiB0aGUgU0VDQU0tTCcgc3RhbmRhcmQgaXMgc2VsZWN0ZWQuCisJICAgU2V0IHRoaXMgYml0IHRvIDEgaWYgdGhpcyBpcyBuZWVkZWQuICovCisJdW5zaWduZWQgaW50IHBvcnQxX2ludmVydF9mb3Jfc2VjYW1fbGM6MTsKKwkvKiBTb21ldGltZXMgUE9SVDIgaXMgaW52ZXJ0ZWQgd2hlbiB0aGUgU0VDQU0tTCcgc3RhbmRhcmQgaXMgc2VsZWN0ZWQuCisJICAgU2V0IHRoaXMgYml0IHRvIDEgaWYgdGhpcyBpcyBuZWVkZWQuICovCisJdW5zaWduZWQgaW50IHBvcnQyX2ludmVydF9mb3Jfc2VjYW1fbGM6MTsKKwkvKiBTb21lIGNhcmRzIHJlcXVpcmUgUE9SVDEgdG8gYmUgMSBmb3IgbW9ubyBSYWRpbyBGTSBhbmQgMCBmb3Igc3RlcmVvLiAqLworCXVuc2lnbmVkIGludCBwb3J0MV9zZXRfZm9yX2ZtX21vbm86MTsKKwkvKiBEZWZhdWx0IHRkYTk4ODcgVE9QIHZhbHVlIGluIGRCIGZvciB0aGUgbG93IGJhbmQuIERlZmF1bHQgaXMgMC4KKwkgICBSYW5nZTogLTE2OisxNSAqLworCXNpZ25lZCBpbnQgZGVmYXVsdF90b3BfbG93OjU7CisJLyogRGVmYXVsdCB0ZGE5ODg3IFRPUCB2YWx1ZSBpbiBkQiBmb3IgdGhlIG1pZCBiYW5kLiBEZWZhdWx0IGlzIDAuCisJICAgUmFuZ2U6IC0xNjorMTUgKi8KKwlzaWduZWQgaW50IGRlZmF1bHRfdG9wX21pZDo1OworCS8qIERlZmF1bHQgdGRhOTg4NyBUT1AgdmFsdWUgaW4gZEIgZm9yIHRoZSBoaWdoIGJhbmQuIERlZmF1bHQgaXMgMC4KKwkgICBSYW5nZTogLTE2OisxNSAqLworCXNpZ25lZCBpbnQgZGVmYXVsdF90b3BfaGlnaDo1OworCS8qIERlZmF1bHQgdGRhOTg4NyBUT1AgdmFsdWUgaW4gZEIgZm9yIFNFQ0FNLUwvTCcgZm9yIHRoZSBsb3cgYmFuZC4KKwkgICBEZWZhdWx0IGlzIDAuIFNldmVyYWwgdHVuZXJzIHJlcXVpcmUgYSBkaWZmZXJlbnQgVE9QIHZhbHVlIGZvcgorCSAgIHRoZSBTRUNBTS1ML0wnIHN0YW5kYXJkcy4gUmFuZ2U6IC0xNjorMTUgKi8KKwlzaWduZWQgaW50IGRlZmF1bHRfdG9wX3NlY2FtX2xvdzo1OworCS8qIERlZmF1bHQgdGRhOTg4NyBUT1AgdmFsdWUgaW4gZEIgZm9yIFNFQ0FNLUwvTCcgZm9yIHRoZSBtaWQgYmFuZC4KKwkgICBEZWZhdWx0IGlzIDAuIFNldmVyYWwgdHVuZXJzIHJlcXVpcmUgYSBkaWZmZXJlbnQgVE9QIHZhbHVlIGZvcgorCSAgIHRoZSBTRUNBTS1ML0wnIHN0YW5kYXJkcy4gUmFuZ2U6IC0xNjorMTUgKi8KKwlzaWduZWQgaW50IGRlZmF1bHRfdG9wX3NlY2FtX21pZDo1OworCS8qIERlZmF1bHQgdGRhOTg4NyBUT1AgdmFsdWUgaW4gZEIgZm9yIFNFQ0FNLUwvTCcgZm9yIHRoZSBoaWdoIGJhbmQuCisJICAgRGVmYXVsdCBpcyAwLiBTZXZlcmFsIHR1bmVycyByZXF1aXJlIGEgZGlmZmVyZW50IFRPUCB2YWx1ZSBmb3IKKwkgICB0aGUgU0VDQU0tTC9MJyBzdGFuZGFyZHMuIFJhbmdlOiAtMTY6KzE1ICovCisJc2lnbmVkIGludCBkZWZhdWx0X3RvcF9zZWNhbV9oaWdoOjU7CisKIAogCXVuc2lnbmVkIGludCBjb3VudDsKIAlzdHJ1Y3QgdHVuZXJfcmFuZ2UgKnJhbmdlczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCBhMWI0NzMxLi42MmRhZTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC0zMTQsNyArMzE0LDYgQEAKIAkvKiBmb3IgdmlkZW9kZXYuYyBpbnRlbmFsIHVzYWdlIC0tIHBsZWFzZSBkb24ndCB0b3VjaCAqLwogCWludCB1c2VyczsgICAgICAgICAgICAgICAgICAgICAvKiB2aWRlb19leGNsdXNpdmVfe29wZW58Y2xvc2V9IC4uLiAqLwogCXN0cnVjdCBtdXRleCBsb2NrOyAgICAgICAgICAgICAvKiAuLi4gaGVscGVyIGZ1bmN0aW9uIHVzZXMgdGhlc2UgICAqLwotCWNoYXIgZGV2ZnNfbmFtZVs2NF07ICAgICAgICAgICAvKiBkZXZmcyAqLwogCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OyAvKiBzeXNmcyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCmluZGV4IDc5NWY4MWYuLjJmZWM4MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaAorKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmgKQEAgLTUzLDE0ICs1MywyMyBAQAogc3RydWN0IHVuaXhfc2tiX3Bhcm1zIHsKIAlzdHJ1Y3QgdWNyZWQJCWNyZWRzOwkJLyogU2tiIGNyZWRlbnRpYWxzCSovCiAJc3RydWN0IHNjbV9mcF9saXN0CSpmcDsJCS8qIFBhc3NlZCBmaWxlcwkJKi8KKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSworCWNoYXIJCQkqc2VjZGF0YTsJLyogU2VjdXJpdHkgY29udGV4dAkqLworCXUzMgkJCXNlY2xlbjsJCS8qIFNlY3VyaXR5IGxlbmd0aAkqLworI2VuZGlmCiB9OwogCiAjZGVmaW5lIFVOSVhDQihza2IpIAkoKihzdHJ1Y3QgdW5peF9za2JfcGFybXMqKSYoKHNrYiktPmNiKSkKICNkZWZpbmUgVU5JWENSRURTKHNrYikJKCZVTklYQ0IoKHNrYikpLmNyZWRzKQorI2RlZmluZSBVTklYU0VDREFUQShza2IpCSgmVU5JWENCKChza2IpKS5zZWNkYXRhKQorI2RlZmluZSBVTklYU0VDTEVOKHNrYikJCSgmVU5JWENCKChza2IpKS5zZWNsZW4pCiAKICNkZWZpbmUgdW5peF9zdGF0ZV9ybG9jayhzKQlzcGluX2xvY2soJnVuaXhfc2socyktPmxvY2spCiAjZGVmaW5lIHVuaXhfc3RhdGVfcnVubG9jayhzKQlzcGluX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKICNkZWZpbmUgdW5peF9zdGF0ZV93bG9jayhzKQlzcGluX2xvY2soJnVuaXhfc2socyktPmxvY2spCisjZGVmaW5lIHVuaXhfc3RhdGVfd2xvY2tfbmVzdGVkKHMpIFwKKwkJCQlzcGluX2xvY2tfbmVzdGVkKCZ1bml4X3NrKHMpLT5sb2NrLCBcCisJCQkJU0lOR0xFX0RFUFRIX05FU1RJTkcpCiAjZGVmaW5lIHVuaXhfc3RhdGVfd3VubG9jayhzKQlzcGluX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCA3Y2Q1MjhlOS4uNjkzNzRjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXgyNS5oCisrKyBiL2luY2x1ZGUvbmV0L2F4MjUuaApAQCAtMTgyLDE0ICsxODIsMjYgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgYXgyNV9yb3V0ZSB7CiAJc3RydWN0IGF4MjVfcm91dGUJKm5leHQ7Ci0JYXRvbWljX3QJCXJlZjsKKwlhdG9taWNfdAkJcmVmY291bnQ7CiAJYXgyNV9hZGRyZXNzCQljYWxsc2lnbjsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCWF4MjVfZGlnaQkJKmRpZ2lwZWF0OwogCWNoYXIJCQlpcF9tb2RlOwotCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogfSBheDI1X3JvdXRlOwogCitzdGF0aWMgaW5saW5lIHZvaWQgYXgyNV9ob2xkX3JvdXRlKGF4MjVfcm91dGUgKmF4MjVfcnQpCit7CisJYXRvbWljX2luYygmYXgyNV9ydC0+cmVmY291bnQpOworfQorCitleHRlcm4gdm9pZCBfX2F4MjVfcHV0X3JvdXRlKGF4MjVfcm91dGUgKmF4MjVfcnQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYXgyNV9wdXRfcm91dGUoYXgyNV9yb3V0ZSAqYXgyNV9ydCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYXgyNV9ydC0+cmVmY291bnQpKQorCQlfX2F4MjVfcHV0X3JvdXRlKGF4MjVfcnQpOworfQorCiB0eXBlZGVmIHN0cnVjdCB7CiAJY2hhcgkJCXNsYXZlOwkJCS8qIHNsYXZlX21vZGU/ICAgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAlzbGF2ZV90aW1lcjsJCS8qIHRpbWVvdXQgdGltZXIgKi8KQEAgLTM0OCwxNyArMzYwLDExIEBACiBleHRlcm4gdm9pZCBheDI1X3J0X2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICopOwogZXh0ZXJuIGludCAgYXgyNV9ydF9pb2N0bCh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopOwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXgyNV9yb3V0ZV9mb3BzOworZXh0ZXJuIGF4MjVfcm91dGUgKmF4MjVfZ2V0X3JvdXRlKGF4MjVfYWRkcmVzcyAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50ICBheDI1X3J0X2F1dG9iaW5kKGF4MjVfY2IgKiwgYXgyNV9hZGRyZXNzICopOwotZXh0ZXJuIGF4MjVfcm91dGUgKmF4MjVfcnRfZmluZF9yb3V0ZShheDI1X3JvdXRlICosIGF4MjVfYWRkcmVzcyAqLAotCXN0cnVjdCBuZXRfZGV2aWNlICopOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpheDI1X3J0X2J1aWxkX3BhdGgoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kgKik7CiBleHRlcm4gdm9pZCBheDI1X3J0X2ZyZWUodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBheDI1X3B1dF9yb3V0ZShheDI1X3JvdXRlICpheDI1X3J0KQotewotCWF0b21pY19kZWMoJmF4MjVfcnQtPnJlZik7Ci19Ci0KIC8qIGF4MjVfc3RkX2luLmMgKi8KIGV4dGVybiBpbnQgIGF4MjVfc3RkX2ZyYW1lX2luKGF4MjVfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCmluZGV4IDkxMWNlYjUuLjc3MWQxNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKQEAgLTE3NSw2ICsxNzUsNiBAQAogZXh0ZXJuIGludCBidF9zeXNmc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgYnRfc3lzZnNfY2xlYW51cCh2b2lkKTsKIAotZXh0ZXJuIHN0cnVjdCBjbGFzcyBidF9jbGFzczsKK2V4dGVybiBzdHJ1Y3QgY2xhc3MgKmJ0X2NsYXNzOwogCiAjZW5kaWYgLyogX19CTFVFVE9PVEhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IGIwNmEyZDIuLmIyYmRiMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTU0LDcgKzU0LDggQEAKIC8qIEhDSSBkZXZpY2UgcXVpcmtzICovCiBlbnVtIHsKIAlIQ0lfUVVJUktfUkVTRVRfT05fSU5JVCwKLQlIQ0lfUVVJUktfUkFXX0RFVklDRQorCUhDSV9RVUlSS19SQVdfREVWSUNFLAorCUhDSV9RVUlSS19GSVhVUF9CVUZGRVJfU0laRQogfTsKIAogLyogSENJIGRldmljZSBmbGFncyAqLwpAQCAtMTAwLDkgKzEwMSwxMCBAQAogI2RlZmluZSBIQ0lJTlFVSVJZCV9JT1IoJ0gnLCAyNDAsIGludCkKIAogLyogSENJIHRpbWVvdXRzICovCi0jZGVmaW5lIEhDSV9DT05OX1RJTUVPVVQJKEhaICogNDApCi0jZGVmaW5lIEhDSV9ESVNDT05OX1RJTUVPVVQJKEhaICogMikKLSNkZWZpbmUgSENJX0NPTk5fSURMRV9USU1FT1VUCShIWiAqIDYwKQorI2RlZmluZSBIQ0lfQ09OTkVDVF9USU1FT1VUCSg0MDAwMCkJLyogNDAgc2Vjb25kcyAqLworI2RlZmluZSBIQ0lfRElTQ09OTl9USU1FT1VUCSgyMDAwKQkvKiAyIHNlY29uZHMgKi8KKyNkZWZpbmUgSENJX0lETEVfVElNRU9VVAkoNjAwMCkJLyogNiBzZWNvbmRzICovCisjZGVmaW5lIEhDSV9JTklUX1RJTUVPVVQJKDEwMDAwKQkvKiAxMCBzZWNvbmRzICovCiAKIC8qIEhDSSBQYWNrZXQgdHlwZXMgKi8KICNkZWZpbmUgSENJX0NPTU1BTkRfUEtUCQkweDAxCkBAIC0xNDQsNyArMTQ2LDcgQEAKICNkZWZpbmUgTE1QX1RBQ0NVUkFDWQkweDEwCiAjZGVmaW5lIExNUF9SU1dJVENICTB4MjAKICNkZWZpbmUgTE1QX0hPTEQJMHg0MAotI2RlZmluZSBMTVBfU05JRgkweDgwCisjZGVmaW5lIExNUF9TTklGRgkweDgwCiAKICNkZWZpbmUgTE1QX1BBUksJMHgwMQogI2RlZmluZSBMTVBfUlNTSQkweDAyCkBAIC0xNTksMTMgKzE2MSwyMSBAQAogI2RlZmluZSBMTVBfUFNDSEVNRQkweDAyCiAjZGVmaW5lIExNUF9QQ09OVFJPTAkweDA0CiAKKyNkZWZpbmUgTE1QX1NOSUZGX1NVQlIJMHgwMgorCisvKiBDb25uZWN0aW9uIG1vZGVzICovCisjZGVmaW5lIEhDSV9DTV9BQ1RJVkUJMHgwMDAwCisjZGVmaW5lIEhDSV9DTV9IT0xECTB4MDAwMQorI2RlZmluZSBIQ0lfQ01fU05JRkYJMHgwMDAyCisjZGVmaW5lIEhDSV9DTV9QQVJLCTB4MDAwMworCiAvKiBMaW5rIHBvbGljaWVzICovCiAjZGVmaW5lIEhDSV9MUF9SU1dJVENICTB4MDAwMQogI2RlZmluZSBIQ0lfTFBfSE9MRAkweDAwMDIKICNkZWZpbmUgSENJX0xQX1NOSUZGCTB4MDAwNAogI2RlZmluZSBIQ0lfTFBfUEFSSwkweDAwMDgKIAotLyogTGluayBtb2RlICovCisvKiBMaW5rIG1vZGVzICovCiAjZGVmaW5lIEhDSV9MTV9BQ0NFUFQJMHg4MDAwCiAjZGVmaW5lIEhDSV9MTV9NQVNURVIJMHgwMDAxCiAjZGVmaW5lIEhDSV9MTV9BVVRICTB4MDAwMgpAQCAtMTkxLDcgKzIwMSw3IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfUkVBRF9MT0NBTF9GRUFUVVJFUwkweDAwMDMKLXN0cnVjdCBoY2lfcnBfcmVhZF9sb2NfZmVhdHVyZXMgeworc3RydWN0IGhjaV9ycF9yZWFkX2xvY2FsX2ZlYXR1cmVzIHsKIAlfX3U4IHN0YXR1czsKIAlfX3U4IGZlYXR1cmVzWzhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0zNzUsMTcgKzM4NSwzMiBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgT0NGX1JFQURfUkVNT1RFX0ZFQVRVUkVTIDB4MDAxQgotc3RydWN0IGhjaV9jcF9yZWFkX3JtdF9mZWF0dXJlcyB7CitzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX2ZlYXR1cmVzIHsKIAlfX2xlMTYgICBoYW5kbGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfUkVBRF9SRU1PVEVfVkVSU0lPTiAweDAwMUQKLXN0cnVjdCBoY2lfY3BfcmVhZF9ybXRfdmVyc2lvbiB7CitzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX3ZlcnNpb24gewogCV9fbGUxNiAgIGhhbmRsZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBMaW5rIFBvbGljeSAqLwotI2RlZmluZSBPR0ZfTElOS19QT0xJQ1kJIDB4MDIgICAKKyNkZWZpbmUgT0dGX0xJTktfUE9MSUNZCTB4MDIgICAKKworI2RlZmluZSBPQ0ZfU05JRkZfTU9ERQkJMHgwMDAzCitzdHJ1Y3QgaGNpX2NwX3NuaWZmX21vZGUgeworCV9fbGUxNiAgIGhhbmRsZTsKKwlfX2xlMTYgICBtYXhfaW50ZXJ2YWw7CisJX19sZTE2ICAgbWluX2ludGVydmFsOworCV9fbGUxNiAgIGF0dGVtcHQ7CisJX19sZTE2ICAgdGltZW91dDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE9DRl9FWElUX1NOSUZGX01PREUJMHgwMDA0CitzdHJ1Y3QgaGNpX2NwX2V4aXRfc25pZmZfbW9kZSB7CisJX19sZTE2ICAgaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKICNkZWZpbmUgT0NGX1JPTEVfRElTQ09WRVJZCTB4MDAwOQogc3RydWN0IGhjaV9jcF9yb2xlX2Rpc2NvdmVyeSB7CiAJX19sZTE2ICAgaGFuZGxlOwpAQCAtNDA2LDcgKzQzMSw3IEBACiAJX19sZTE2ICAgcG9saWN5OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgT0NGX1NXSVRDSF9ST0xFCTB4MDAwQgorI2RlZmluZSBPQ0ZfU1dJVENIX1JPTEUJCTB4MDAwQgogc3RydWN0IGhjaV9jcF9zd2l0Y2hfcm9sZSB7CiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggICAgIHJvbGU7CkBAIC00MjIsNiArNDQ3LDE0IEBACiAJX19sZTE2ICAgaGFuZGxlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgT0NGX1NOSUZGX1NVQlJBVEUJMHgwMDExCitzdHJ1Y3QgaGNpX2NwX3NuaWZmX3N1YnJhdGUgeworCV9fbGUxNiAgIGhhbmRsZTsKKwlfX2xlMTYgICBtYXhfbGF0ZW5jeTsKKwlfX2xlMTYgICBtaW5fcmVtb3RlX3RpbWVvdXQ7CisJX19sZTE2ICAgbWluX2xvY2FsX3RpbWVvdXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogU3RhdHVzIHBhcmFtcyAqLwogI2RlZmluZSBPR0ZfU1RBVFVTX1BBUkFNCTB4MDUKIApAQCAtNTgxLDE1ICs2MTQsMTUgQEAKIAlfX3U4CSBrZXlfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIEhDSV9FVl9STVRfRkVBVFVSRVMJMHgwQgotc3RydWN0IGhjaV9ldl9ybXRfZmVhdHVyZXMgeworI2RlZmluZSBIQ0lfRVZfUkVNT1RFX0ZFQVRVUkVTCTB4MEIKK3N0cnVjdCBoY2lfZXZfcmVtb3RlX2ZlYXR1cmVzIHsKIAlfX3U4ICAgICBzdGF0dXM7CiAJX19sZTE2ICAgaGFuZGxlOwogCV9fdTggICAgIGZlYXR1cmVzWzhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSENJX0VWX1JNVF9WRVJTSU9OCTB4MEMKLXN0cnVjdCBoY2lfZXZfcm10X3ZlcnNpb24geworI2RlZmluZSBIQ0lfRVZfUkVNT1RFX1ZFUlNJT04JMHgwQworc3RydWN0IGhjaV9ldl9yZW1vdGVfdmVyc2lvbiB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fbGUxNiAgIGhhbmRsZTsKIAlfX3U4ICAgICBsbXBfdmVyOwpAQCAtNjEwLDYgKzY0MywxNiBAQAogCV9fdTggICAgIHBzY2FuX3JlcF9tb2RlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgSENJX0VWX1NOSUZGX1NVQlJBVEUJMHgyRQorc3RydWN0IGhjaV9ldl9zbmlmZl9zdWJyYXRlIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX19sZTE2ICAgaGFuZGxlOworCV9fbGUxNiAgIG1heF90eF9sYXRlbmN5OworCV9fbGUxNiAgIG1heF9yeF9sYXRlbmN5OworCV9fbGUxNiAgIG1heF9yZW1vdGVfdGltZW91dDsKKwlfX2xlMTYgICBtYXhfbG9jYWxfdGltZW91dDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBJbnRlcm5hbCBldmVudHMgZ2VuZXJhdGVkIGJ5IEJsdWV0b290aCBzdGFjayAqLwogI2RlZmluZSBIQ0lfRVZfU1RBQ0tfSU5URVJOQUwJMHhGRAogc3RydWN0IGhjaV9ldl9zdGFja19pbnRlcm5hbCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGJiOWY4MWQuLmQ4NDg1NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0zMSwxMCArMzEsNyBAQAogI2RlZmluZSBIQ0lfUFJPVE9fTDJDQVAJMAogI2RlZmluZSBIQ0lfUFJPVE9fU0NPCTEKIAotI2RlZmluZSBIQ0lfSU5JVF9USU1FT1VUIChIWiAqIDEwKQotCiAvKiBIQ0kgQ29yZSBzdHJ1Y3R1cmVzICovCi0KIHN0cnVjdCBpbnF1aXJ5X2RhdGEgewogCWJkYWRkcl90CWJkYWRkcjsKIAlfX3U4CQlwc2Nhbl9yZXBfbW9kZTsKQEAgLTgxLDYgKzc4LDEwIEBACiAJX191MTYJCWxpbmtfcG9saWN5OwogCV9fdTE2CQlsaW5rX21vZGU7CiAKKwlfX3UzMgkJaWRsZV90aW1lb3V0OworCV9fdTE2CQlzbmlmZl9taW5faW50ZXJ2YWw7CisJX191MTYJCXNuaWZmX21heF9pbnRlcnZhbDsKKwogCXVuc2lnbmVkIGxvbmcJcXVpcmtzOwogCiAJYXRvbWljX3QJY21kX2NudDsKQEAgLTEyMyw3ICsxMjQsOCBAQAogCiAJYXRvbWljX3QgCQlwcm9taXNjOwogCi0Jc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CisJc3RydWN0IGRldmljZQkJKnBhcmVudDsKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CiAKIAlzdHJ1Y3QgbW9kdWxlIAkJKm93bmVyOwogCkBAIC0xNDUsMTggKzE0NywyNCBAQAogCWJkYWRkcl90CSBkc3Q7CiAJX191MTYJCSBoYW5kbGU7CiAJX191MTYJCSBzdGF0ZTsKKwlfX3U4ICAgICAgICAgICAgIG1vZGU7CiAJX191OAkJIHR5cGU7CiAJX191OAkJIG91dDsKIAlfX3U4CQkgZGV2X2NsYXNzWzNdOworCV9fdTggICAgICAgICAgICAgZmVhdHVyZXNbOF07CisJX191MTYgICAgICAgICAgICBpbnRlcnZhbDsKKwlfX3UxNiAgICAgICAgICAgIGxpbmtfcG9saWN5OwogCV9fdTMyCQkgbGlua19tb2RlOworCV9fdTggICAgICAgICAgICAgcG93ZXJfc2F2ZTsKIAl1bnNpZ25lZCBsb25nCSBwZW5kOwotCQorCiAJdW5zaWduZWQgaW50CSBzZW50OwotCQorCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBkYXRhX3E7CiAKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQkKKwlzdHJ1Y3QgdGltZXJfbGlzdCBkaXNjX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGlkbGVfdGltZXI7CisKIAlzdHJ1Y3QgaGNpX2RldgkqaGRldjsKIAl2b2lkCQkqbDJjYXBfZGF0YTsKIAl2b2lkCQkqc2NvX2RhdGE7CkBAIC0yMTEsNyArMjE5LDggQEAKIGVudW0gewogCUhDSV9DT05OX0FVVEhfUEVORCwKIAlIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsCi0JSENJX0NPTk5fUlNXSVRDSF9QRU5ECisJSENJX0NPTk5fUlNXSVRDSF9QRU5ELAorCUhDSV9DT05OX01PREVfQ0hBTkdFX1BFTkQsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nvbm5faGFzaF9pbml0KHN0cnVjdCBoY2lfZGV2ICpoZGV2KQpAQCAtMjg2LDMxICsyOTUsMjcgQEAKIGludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIGludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY29ubl9zZXRfdGltZXIoc3RydWN0IGhjaV9jb25uICpjb25uLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0JbW9kX3RpbWVyKCZjb25uLT50aW1lciwgamlmZmllcyArIHRpbWVvdXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nvbm5fZGVsX3RpbWVyKHN0cnVjdCBoY2lfY29ubiAqY29ubikKLXsKLQlkZWxfdGltZXIoJmNvbm4tPnRpbWVyKTsKLX0KK3ZvaWQgaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKK3ZvaWQgaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nvbm5faG9sZChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCiB7CiAJYXRvbWljX2luYygmY29ubi0+cmVmY250KTsKLQloY2lfY29ubl9kZWxfdGltZXIoY29ubik7CisJZGVsX3RpbWVyKCZjb25uLT5kaXNjX3RpbWVyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9jb25uX3B1dChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvbm4tPnJlZmNudCkpIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lbzsKIAkJaWYgKGNvbm4tPnR5cGUgPT0gQUNMX0xJTkspIHsKLQkJCXVuc2lnbmVkIGxvbmcgdGltZW8gPSAoY29ubi0+b3V0KSA/Ci0JCQkJSENJX0RJU0NPTk5fVElNRU9VVCA6IEhDSV9ESVNDT05OX1RJTUVPVVQgKiAyOwotCQkJaGNpX2Nvbm5fc2V0X3RpbWVyKGNvbm4sIHRpbWVvKTsKKwkJCXRpbWVvID0gbXNlY3NfdG9famlmZmllcyhIQ0lfRElTQ09OTl9USU1FT1VUKTsKKwkJCWlmICghY29ubi0+b3V0KQorCQkJCXRpbWVvICo9IDI7CisJCQlkZWxfdGltZXIoJmNvbm4tPmlkbGVfdGltZXIpOwogCQl9IGVsc2UKLQkJCWhjaV9jb25uX3NldF90aW1lcihjb25uLCBIWiAvIDEwMCk7CisJCQl0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQltb2RfdGltZXIoJmNvbm4tPmRpc2NfdGltZXIsIGppZmZpZXMgKyB0aW1lbyk7CiAJfQogfQogCkBAIC00MDgsMTEgKzQxMywxMyBAQAogaW50IGhjaV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiB2b2lkIGhjaV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIAotI2RlZmluZSBTRVRfSENJREVWX0RFVihoZGV2LCBwZGV2KSAoKGhkZXYpLT5jbGFzc19kZXYuZGV2ID0gKHBkZXYpKQorI2RlZmluZSBTRVRfSENJREVWX0RFVihoZGV2LCBwZGV2KSAoKGhkZXYpLT5wYXJlbnQgPSAocGRldikpCiAKIC8qIC0tLS0tIExNUCBjYXBhYmlsaXRpZXMgLS0tLS0gKi8KLSNkZWZpbmUgbG1wX3Jzd2l0Y2hfY2FwYWJsZShkZXYpIChkZXYtPmZlYXR1cmVzWzBdICYgTE1QX1JTV0lUQ0gpCi0jZGVmaW5lIGxtcF9lbmNyeXB0X2NhcGFibGUoZGV2KSAoZGV2LT5mZWF0dXJlc1swXSAmIExNUF9FTkNSWVBUKQorI2RlZmluZSBsbXBfcnN3aXRjaF9jYXBhYmxlKGRldikgICAoKGRldiktPmZlYXR1cmVzWzBdICYgTE1QX1JTV0lUQ0gpCisjZGVmaW5lIGxtcF9lbmNyeXB0X2NhcGFibGUoZGV2KSAgICgoZGV2KS0+ZmVhdHVyZXNbMF0gJiBMTVBfRU5DUllQVCkKKyNkZWZpbmUgbG1wX3NuaWZmX2NhcGFibGUoZGV2KSAgICAgKChkZXYpLT5mZWF0dXJlc1swXSAmIExNUF9TTklGRikKKyNkZWZpbmUgbG1wX3NuaWZmc3Vicl9jYXBhYmxlKGRldikgKChkZXYpLT5mZWF0dXJlc1s1XSAmIExNUF9TTklGRl9TVUJSKQogCiAvKiAtLS0tLSBIQ0kgcHJvdG9jb2xzIC0tLS0tICovCiBzdHJ1Y3QgaGNpX3Byb3RvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggYTM5OGFlNS4uYWIyOWRhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIGRzdDsKIAogCXdyaXRlX2xvY2soJnNrLT5za19kc3RfbG9jayk7Ci0JX19za19kc3Rfc2V0KHNrLCBkc3QpOworCXNrX3NldHVwX2NhcHMoc2ssIGRzdCk7CiAJbnAtPmRhZGRyX2NhY2hlID0gZGFkZHI7CiAJbnAtPmRzdF9jb29raWUgPSBydC0+cnQ2aV9ub2RlID8gcnQtPnJ0Nmlfbm9kZS0+Zm5fc2VybnVtIDogMDsKIAl3cml0ZV91bmxvY2soJnNrLT5za19kc3RfbG9jayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKaW5kZXggMDU3NWM1OS4uYmNhMTljYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaApAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgIGludCBpcnEsIGlycTI7ICAgICAgICAvKiBJbnRlcnJ1cHRzIHVzZWQgKi8KICAgICAgICAgaW50IGRtYSwgZG1hMjsgICAgICAgIC8qIERNQSBjaGFubmVsKHMpIHVzZWQgKi8KICAgICAgICAgaW50IGZpZm9fc2l6ZTsgICAgICAgIC8qIEZJRk8gc2l6ZSAqLwotICAgICAgICBpbnQgaXJxZmxhZ3M7ICAgICAgICAgLyogaW50ZXJydXB0IGZsYWdzIChpZSwgU0FfU0hJUlF8U0FfSU5URVJSVVBUKSAqLworICAgICAgICBpbnQgaXJxZmxhZ3M7ICAgICAgICAgLyogaW50ZXJydXB0IGZsYWdzIChpZSwgSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCkgKi8KIAlpbnQgZGlyZWN0aW9uOyAgICAgICAgLyogTGluayBkaXJlY3Rpb24sIHVzZWQgYnkgc29tZSBGSVIgZHJpdmVycyAqLwogCWludCBlbmFibGVkOyAgICAgICAgICAvKiBQb3dlcmVkIG9uPyAqLwogCWludCBzdXNwZW5kZWQ7ICAgICAgICAvKiBTdXNwZW5kZWQgYnkgQVBNICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDc1YjViOTMuLjE5MjVjNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0xNjksMTcgKzE2OSwyMyBAQAogCiAjZGVmaW5lIFBTQ0hFRF9UQUREMih0diwgZGVsdGEsIHR2X3JlcykgXAogKHsgXAotCSAgIGludCBfX2RlbHRhID0gKHR2KS50dl91c2VjICsgKGRlbHRhKTsgXAotCSAgICh0dl9yZXMpLnR2X3NlYyA9ICh0dikudHZfc2VjOyBcCi0JICAgaWYgKF9fZGVsdGEgPiBVU0VDX1BFUl9TRUMpIHsgKHR2X3JlcykudHZfc2VjKys7IF9fZGVsdGEgLT0gVVNFQ19QRVJfU0VDOyB9IFwKKwkgICBpbnQgX19kZWx0YSA9IChkZWx0YSk7IFwKKwkgICAodHZfcmVzKSA9ICh0dik7IFwKKwkgICB3aGlsZShfX2RlbHRhID49IFVTRUNfUEVSX1NFQyl7IFwKKwkJICh0dl9yZXMpLnR2X3NlYysrOyBcCisJCSBfX2RlbHRhIC09IFVTRUNfUEVSX1NFQzsgXAorCSAgIH0gXAogCSAgICh0dl9yZXMpLnR2X3VzZWMgPSBfX2RlbHRhOyBcCiB9KQogCiAjZGVmaW5lIFBTQ0hFRF9UQUREKHR2LCBkZWx0YSkgXAogKHsgXAotCSAgICh0dikudHZfdXNlYyArPSAoZGVsdGEpOyBcCi0JICAgaWYgKCh0dikudHZfdXNlYyA+IFVTRUNfUEVSX1NFQykgeyAodHYpLnR2X3NlYysrOyBcCi0JCSAodHYpLnR2X3VzZWMgLT0gVVNFQ19QRVJfU0VDOyB9IFwKKwkgICBpbnQgX19kZWx0YSA9IChkZWx0YSk7IFwKKwkgICB3aGlsZShfX2RlbHRhID49IFVTRUNfUEVSX1NFQyl7IFwKKwkJICh0dikudHZfc2VjKys7IFwKKwkJIF9fZGVsdGEgLT0gVVNFQ19QRVJfU0VDOyBcCisJICAgfSBcCisJICAgKHR2KS50dl91c2VjID0gX19kZWx0YTsgXAogfSkKIAogLyogU2V0L2NoZWNrIHRoYXQgdGltZSBpcyBpbiB0aGUgInBhc3QgcGVyZmVjdCI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wcm90b2NvbC5oIGIvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaAppbmRleCAzYjZkYzE1Li5hMjI1ZDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wcm90b2NvbC5oCisrKyBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKQEAgLTM2LDcgKzM2LDggQEAKIHN0cnVjdCBuZXRfcHJvdG9jb2wgewogCWludAkJCSgqaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJdm9pZAkJCSgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKTsKLQlzdHJ1Y3Qgc2tfYnVmZgkgICAgICAgKigqZ3NvX3NlZ21lbnQpKHN0cnVjdCBza19idWZmICpza2IsIGludCBzZyk7CisJc3RydWN0IHNrX2J1ZmYJICAgICAgICooKmdzb19zZWdtZW50KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICAgaW50IGZlYXR1cmVzKTsKIAlpbnQJCQlub19wb2xpY3k7CiB9OwogCkBAIC00OSwxMSArNTAsMTcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKIAkJCSAgICAgICBpbnQgdHlwZSwgaW50IGNvZGUsIGludCBvZmZzZXQsCiAJCQkgICAgICAgX191MzIgaW5mbyk7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnc29fc2VnbWVudCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgaW50IGZlYXR1cmVzKTsKKwogCXVuc2lnbmVkIGludAlmbGFnczsJLyogSU5FVDZfUFJPVE9feHh4ICovCiB9OwogCiAjZGVmaW5lIElORVQ2X1BST1RPX05PUE9MSUNZCTB4MQogI2RlZmluZSBJTkVUNl9QUk9UT19GSU5BTAkweDIKKy8qIFRoaXMgc2hvdWxkIGJlIHNldCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXIgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIEdTTy4gKi8KKyNkZWZpbmUgSU5FVDZfUFJPVE9fR1NPX0VYVEhEUgkweDQKICNlbmRpZgogCiAvKiBUaGlzIGlzIHVzZWQgdG8gcmVnaXN0ZXIgc29ja2V0IGludGVyZmFjZXMgZm9yIElQIHByb3RvY29scy4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY20uaCBiL2luY2x1ZGUvbmV0L3NjbS5oCmluZGV4IDU0MDYxOWMuLjAyZGFhMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjbS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjbS5oCkBAIC0xOSw2ICsxOSwxMCBAQAogewogCXN0cnVjdCB1Y3JlZAkJY3JlZHM7CQkvKiBTa2IgY3JlZGVudGlhbHMJKi8KIAlzdHJ1Y3Qgc2NtX2ZwX2xpc3QJKmZwOwkJLyogUGFzc2VkIGZpbGVzCQkqLworI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCisJY2hhcgkJCSpzZWNkYXRhOwkvKiBTZWN1cml0eSBjb250ZXh0CSovCisJdTMyCQkJc2VjbGVuOwkJLyogU2VjdXJpdHkgbGVuZ3RoCSovCisjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQlzZXE7CQkvKiBDb25uZWN0aW9uIHNlcW5vCSovCiB9OwogCkBAIC00OCw2ICs1MiwxNyBAQAogCXJldHVybiBfX3NjbV9zZW5kKHNvY2ssIG1zZywgc2NtKTsKIH0KIAorI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCitzdGF0aWMgaW5saW5lIHZvaWQgc2NtX3Bhc3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pCit7CisJaWYgKHRlc3RfYml0KFNPQ0tfUEFTU1NFQywgJnNvY2stPmZsYWdzKSAmJiBzY20tPnNlY2RhdGEgIT0gTlVMTCkKKwkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fU0VDVVJJVFksIHNjbS0+c2VjbGVuLCBzY20tPnNlY2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY21fcGFzc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKK3sgfQorI2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLICovCisKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2NtX3JlY3Yoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkJCXN0cnVjdCBzY21fY29va2llICpzY20sIGludCBmbGFncykKIHsKQEAgLTYyLDYgKzc3LDggQEAKIAlpZiAodGVzdF9iaXQoU09DS19QQVNTQ1JFRCwgJnNvY2stPmZsYWdzKSkKIAkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fQ1JFREVOVElBTFMsIHNpemVvZihzY20tPmNyZWRzKSwgJnNjbS0+Y3JlZHMpOwogCisJc2NtX3Bhc3NlYyhzb2NrLCBtc2csIHNjbSk7CisKIAlpZiAoIXNjbS0+ZnApCiAJCXJldHVybjsKIAkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCAyZDhkNmFkLi4zMjRiM2VhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4JLyogc3RydWN0IHNrX2J1ZmYgKi8KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpAQCAtNzgsMTQgKzc5LDE3IEBACiAJc3BpbmxvY2tfdAkJc2xvY2s7CiAJc3RydWN0IHNvY2tfaW9jYgkqb3duZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJLyoKKwkgKiBXZSBleHByZXNzIHRoZSBtdXRleC1hbGlrZSBzb2NrZXRfbG9jayBzZW1hbnRpY3MKKwkgKiB0byB0aGUgbG9jayB2YWxpZGF0b3IgYnkgZXhwbGljaXRseSBtYW5hZ2luZworCSAqIHRoZSBzbG9jayBhcyBhIGxvY2sgdmFyaWFudCAoaW4gYWRkaXRpb24gdG8KKwkgKiB0aGUgc2xvY2sgaXRzZWxmKToKKwkgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOworI2VuZGlmCiB9IHNvY2tldF9sb2NrX3Q7CiAKLSNkZWZpbmUgc29ja19sb2NrX2luaXQoX19zaykgXAotZG8gewlzcGluX2xvY2tfaW5pdCgmKChfX3NrKS0+c2tfbG9jay5zbG9jaykpOyBcCi0JKF9fc2spLT5za19sb2NrLm93bmVyID0gTlVMTDsgXAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJigoX19zayktPnNrX2xvY2sud3EpKTsgXAotfSB3aGlsZSgwKQotCiBzdHJ1Y3Qgc29jazsKIHN0cnVjdCBwcm90bzsKIApAQCAtMTQwLDYgKzE0NCw3IEBACiAgICoJQHNrX2ZsYWdzOiAlU09fTElOR0VSIChsX29ub2ZmKSwgJVNPX0JST0FEQ0FTVCwgJVNPX0tFRVBBTElWRSwgJVNPX09PQklOTElORSBzZXR0aW5ncwogICAqCUBza19ub19jaGVjazogJVNPX05PX0NIRUNLIHNldHRpbmcsIHdldGhlciBvciBub3QgY2hlY2t1cCBwYWNrZXRzCiAgICoJQHNrX3JvdXRlX2NhcHM6IHJvdXRlIGNhcGFiaWxpdGllcyAoZS5nLiAlTkVUSUZfRl9UU08pCisgICoJQHNrX2dzb190eXBlOiBHU08gdHlwZSAoZS5nLiAlU0tCX0dTT19UQ1BWNCkKICAgKglAc2tfbGluZ2VydGltZTogJVNPX0xJTkdFUiBsX2xpbmdlciBzZXR0aW5nCiAgICoJQHNrX2JhY2tsb2c6IGFsd2F5cyB1c2VkIHdpdGggdGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgaGVsZAogICAqCUBza19jYWxsYmFja19sb2NrOiB1c2VkIHdpdGggdGhlIGNhbGxiYWNrcyBpbiB0aGUgZW5kIG9mIHRoaXMgc3RydWN0CkBAIC0yMTEsNiArMjE2LDcgQEAKIAlnZnBfdAkJCXNrX2FsbG9jYXRpb247CiAJaW50CQkJc2tfc25kYnVmOwogCWludAkJCXNrX3JvdXRlX2NhcHM7CisJaW50CQkJc2tfZ3NvX3R5cGU7CiAJaW50CQkJc2tfcmN2bG93YXQ7CiAJdW5zaWduZWQgbG9uZyAJCXNrX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcJICAgICAgICBza19saW5nZXJ0aW1lOwpAQCAtMzgzLDcgKzM4OSw2IEBACiAJU09DS19VU0VfV1JJVEVfUVVFVUUsIC8qIHdoZXRoZXIgdG8gY2FsbCBzay0+c2tfd3JpdGVfc3BhY2UgaW4gc29ja193ZnJlZSAqLwogCVNPQ0tfREJHLCAvKiAlU09fREVCVUcgc2V0dGluZyAqLwogCVNPQ0tfUkNWVFNUQU1QLCAvKiAlU09fVElNRVNUQU1QIHNldHRpbmcgKi8KLQlTT0NLX05PX0xBUkdFU0VORCwgLyogd2hldGhlciB0byBzZW50IGxhcmdlIHNlZ21lbnRzIG9yIG5vdCAqLwogCVNPQ0tfTE9DQUxST1VURSwgLyogcm91dGUgbG9jYWxseSBvbmx5LCAlU09fRE9OVFJPVVRFIHNldHRpbmcgKi8KIAlTT0NLX1FVRVVFX1NIUlVOSywgLyogd3JpdGUgcXVldWUgaGFzIGJlZW4gc2hydW5rIHJlY2VudGx5ICovCiB9OwpAQCAtNzQ2LDYgKzc1MSw5IEBACiAKIC8qIEJIIGNvbnRleHQgbWF5IG9ubHkgdXNlIHRoZSBmb2xsb3dpbmcgbG9ja2luZyBpbnRlcmZhY2UuICovCiAjZGVmaW5lIGJoX2xvY2tfc29jayhfX3NrKQlzcGluX2xvY2soJigoX19zayktPnNrX2xvY2suc2xvY2spKQorI2RlZmluZSBiaF9sb2NrX3NvY2tfbmVzdGVkKF9fc2spIFwKKwkJCQlzcGluX2xvY2tfbmVzdGVkKCYoKF9fc2spLT5za19sb2NrLnNsb2NrKSwgXAorCQkJCVNJTkdMRV9ERVBUSF9ORVNUSU5HKQogI2RlZmluZSBiaF91bmxvY2tfc29jayhfX3NrKQlzcGluX3VubG9jaygmKChfX3NrKS0+c2tfbG9jay5zbG9jaykpCiAKIGV4dGVybiBzdHJ1Y3Qgc29jawkJKnNrX2FsbG9jKGludCBmYW1pbHksCkBAIC0xMDI2LDE1ICsxMDM0LDIwIEBACiAKIGV4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5ICpza19kc3RfY2hlY2soc3RydWN0IHNvY2sgKnNrLCB1MzIgY29va2llKTsKIAorc3RhdGljIGlubGluZSBpbnQgc2tfY2FuX2dzbyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIG5ldF9nc29fb2soc2stPnNrX3JvdXRlX2NhcHMsIHNrLT5za19nc29fdHlwZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBza19zZXR1cF9jYXBzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewogCV9fc2tfZHN0X3NldChzaywgZHN0KTsKIAlzay0+c2tfcm91dGVfY2FwcyA9IGRzdC0+ZGV2LT5mZWF0dXJlczsKIAlpZiAoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX0dTTykKLQkJc2stPnNrX3JvdXRlX2NhcHMgfD0gTkVUSUZfRl9UU087Ci0JaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9UU08pIHsKLQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19OT19MQVJHRVNFTkQpIHx8IGRzdC0+aGVhZGVyX2xlbikKLQkJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX1RTTzsKKwkJc2stPnNrX3JvdXRlX2NhcHMgfD0gTkVUSUZfRl9HU09fTUFTSzsKKwlpZiAoc2tfY2FuX2dzbyhzaykpIHsKKwkJaWYgKGRzdC0+aGVhZGVyX2xlbikKKwkJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCQllbHNlIAogCQkJc2stPnNrX3JvdXRlX2NhcHMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IGNhM2QzOGQuLjNjZDgwM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC03NTEsNyArNzUxLDcgQEAKIAlpZiAoaW5fZmxpZ2h0ID49IHRwLT5zbmRfY3duZCkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfVFNPKSkKKwlpZiAoIXNrX2Nhbl9nc28oc2spKQogCQlyZXR1cm4gMDsKIAogCWxlZnQgPSB0cC0+c25kX2N3bmQgLSBpbl9mbGlnaHQ7CkBAIC0xMDg2LDcgKzEwODYsNyBAQAogCiBleHRlcm4gaW50IHRjcF92NF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKIAotZXh0ZXJuIHN0cnVjdCBza19idWZmICp0Y3BfdHNvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNnKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX3Rzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogZXh0ZXJuIGludCAgdGNwNF9wcm9jX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3BfZWNuLmggYi9pbmNsdWRlL25ldC90Y3BfZWNuLmgKaW5kZXggYzZiODQzOS4uNDYyOWQ3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwX2Vjbi5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcF9lY24uaApAQCAtMzEsMTAgKzMxLDkgQEAKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl0cC0+ZWNuX2ZsYWdzID0gMDsKLQlpZiAoc3lzY3RsX3RjcF9lY24gJiYgIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfVFNPKSkgeworCWlmIChzeXNjdGxfdGNwX2VjbikgewogCQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzIHw9IFRDUENCX0ZMQUdfRUNFfFRDUENCX0ZMQUdfQ1dSOwogCQl0cC0+ZWNuX2ZsYWdzID0gVENQX0VDTl9PSzsKLQkJc29ja19zZXRfZmxhZyhzaywgU09DS19OT19MQVJHRVNFTkQpOwogCX0KIH0KIApAQCAtNTYsNiArNTUsNyBAQAogCQkJaWYgKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9RVUVVRV9DV1IpIHsKIAkJCQl0cC0+ZWNuX2ZsYWdzICY9IH5UQ1BfRUNOX1FVRVVFX0NXUjsKIAkJCQlza2ItPmgudGgtPmN3ciA9IDE7CisJCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSB8PSBTS0JfR1NPX1RDUF9FQ047CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiBBQ0sgb3IgcmV0cmFuc21pdHRlZCBzZWdtZW50OiBjbGVhciBFQ1R8Q0UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKaW5kZXggMjUzNzk3Yy4uNTVlYmYwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTQ3LDEwICs0NywxOSBAQAogCUlTQ1NJX1VFVkVOVF9UUkFOU1BPUlRfRVBfUE9MTAkJPSBVRVZFTlRfQkFTRSArIDEzLAogCUlTQ1NJX1VFVkVOVF9UUkFOU1BPUlRfRVBfRElTQ09OTkVDVAk9IFVFVkVOVF9CQVNFICsgMTQsCiAKKwlJU0NTSV9VRVZFTlRfVEdUX0RTQ1ZSCQk9IFVFVkVOVF9CQVNFICsgMTUsCisKIAkvKiB1cCBldmVudHMgKi8KIAlJU0NTSV9LRVZFTlRfUkVDVl9QRFUJCT0gS0VWRU5UX0JBU0UgKyAxLAogCUlTQ1NJX0tFVkVOVF9DT05OX0VSUk9SCQk9IEtFVkVOVF9CQVNFICsgMiwKIAlJU0NTSV9LRVZFTlRfSUZfRVJST1IJCT0gS0VWRU5UX0JBU0UgKyAzLAorCUlTQ1NJX0tFVkVOVF9ERVNUUk9ZX1NFU1NJT04JPSBLRVZFTlRfQkFTRSArIDQsCit9OworCitlbnVtIGlzY3NpX3RndF9kc2N2ciB7CisJSVNDU0lfVEdUX0RTQ1ZSX1NFTkRfVEFSR0VUUwk9IDEsCisJSVNDU0lfVEdUX0RTQ1ZSX0lTTlMJCT0gMiwKKwlJU0NTSV9UR1RfRFNDVlJfU0xQCQk9IDMsCiB9OwogCiBzdHJ1Y3QgaXNjc2lfdWV2ZW50IHsKQEAgLTExNiw2ICsxMjUsMTcgQEAKIAkJc3RydWN0IG1zZ190cmFuc3BvcnRfZGlzY29ubmVjdCB7CiAJCQl1aW50NjRfdAllcF9oYW5kbGU7CiAJCX0gZXBfZGlzY29ubmVjdDsKKwkJc3RydWN0IG1zZ190Z3RfZHNjdnIgeworCQkJZW51bSBpc2NzaV90Z3RfZHNjdnIJdHlwZTsKKwkJCXVpbnQzMl90CWhvc3Rfbm87CisJCQkvKgorIAkJCSAqIGVuYWJsZSA9IDEgdG8gZXN0YWJsaXNoIGEgbmV3IGNvbm5lY3Rpb24KKwkJCSAqIHdpdGggdGhlIHNlcnZlci4gZW5hYmxlID0gMCB0byBkaXNjb25uZWN0CisJCQkgKiBmcm9tIHRoZSBzZXJ2ZXIuIFVzZWQgcHJpbWFyaWx5IHRvIHN3aXRjaAorCQkJICogZnJvbSBvbmUgaVNOUyBzZXJ2ZXIgdG8gYW5vdGhlci4KKwkJCSAqLworCQkJdWludDMyX3QJZW5hYmxlOworCQl9IHRndF9kc2N2cjsKIAl9IHU7CiAJdW5pb24gewogCQkvKiBtZXNzYWdlcyBrIC0+IHUgKi8KQEAgLTEzOCw2ICsxNTgsMTAgQEAKIAkJCXVpbnQzMl90CWNpZDsKIAkJCXVpbnQzMl90CWVycm9yOyAvKiBlbnVtIGlzY3NpX2VyciAqLwogCQl9IGNvbm5lcnJvcjsKKwkJc3RydWN0IG1zZ19zZXNzaW9uX2Rlc3Ryb3llZCB7CisJCQl1aW50MzJfdAlob3N0X25vOworCQkJdWludDMyX3QJc2lkOworCQl9IGRfc2Vzc2lvbjsKIAkJc3RydWN0IG1zZ190cmFuc3BvcnRfY29ubmVjdF9yZXQgewogCQkJdWludDY0X3QJaGFuZGxlOwogCQl9IGVwX2Nvbm5lY3RfcmV0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCBjYmY3ZTU4Li5iYTI3NjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMTU3LDYgKzE1NywxMSBAQAogCWludAkJCW1heF94bWl0X2RsZW5ndGg7IC8qIHRhcmdldF9tYXhfcmVjdl9kc2wgKi8KIAlpbnQJCQloZHJkZ3N0X2VuOwogCWludAkJCWRhdGFkZ3N0X2VuOworCWludAkJCWlmbWFya2VyX2VuOworCWludAkJCW9mbWFya2VyX2VuOworCS8qIHZhbHVlcyB1c2Vyc3BhY2UgdXNlcyB0byBpZCBhIGNvbm4gKi8KKwlpbnQJCQlwZXJzaXN0ZW50X3BvcnQ7CisJY2hhcgkJCSpwZXJzaXN0ZW50X2FkZHJlc3M7CiAKIAkvKiBNSUItc3RhdGlzdGljcyAqLwogCXVpbnQ2NF90CQl0eGRhdGFfb2N0ZXRzOwpAQCAtMTk2LDggKzIwMSw4IEBACiAJaW50CQkJcGR1X2lub3JkZXJfZW47CiAJaW50CQkJZGF0YXNlcV9pbm9yZGVyX2VuOwogCWludAkJCWVybDsKLQlpbnQJCQlpZm1hcmtlcl9lbjsKLQlpbnQJCQlvZm1hcmtlcl9lbjsKKwlpbnQJCQl0cGd0OworCWNoYXIJCQkqdGFyZ2V0bmFtZTsKIAogCS8qIGNvbnRyb2wgZGF0YSAqLwogCXN0cnVjdCBpc2NzaV90cmFuc3BvcnQJKnR0OwpAQCAtMjQwLDYgKzI0NSwxMCBAQAogZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKik7CiBleHRlcm4gc3RydWN0IGlzY3NpX3Nlc3Npb24gKmNsYXNzX3RvX3RyYW5zcG9ydF9zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqKTsKIGV4dGVybiB2b2lkIGlzY3NpX3Nlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICopOworZXh0ZXJuIGludCBpc2NzaV9zZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJCSAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CitleHRlcm4gaW50IGlzY3NpX3Nlc3Npb25fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb24sCisJCQkJICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIAogI2RlZmluZSBzZXNzaW9uX3RvX2Nscyhfc2VzcykgXAogCWhvc3RkYXRhX3Nlc3Npb24oX3Nlc3MtPmhvc3QtPmhvc3RkYXRhKQpAQCAtMjU1LDYgKzI2NCw4IEBACiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fYmluZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKiwgc3RydWN0IGlzY3NpX2Nsc19jb25uICosCiAJCQkgICBpbnQpOwogZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnIpOworZXh0ZXJuIGludCBpc2NzaV9jb25uX2dldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJCWVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CiAKIC8qCiAgKiBwZHUgYW5kIHRhc2sgcHJvY2Vzc2luZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCmluZGV4IGU0NmNkNDAuLjM3MWY3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiBleHRlcm4gc3RydWN0IHNjc2lfY21uZCAqc2NzaV9nZXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgZ2ZwX3QpOwogZXh0ZXJuIHZvaWQgc2NzaV9wdXRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICopOwotZXh0ZXJuIHZvaWQgc2NzaV9pb19jb21wbGV0aW9uKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgc2NzaV9pb19jb21wbGV0aW9uKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNjc2lfZmluaXNoX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIGV4dGVybiB2b2lkIHNjc2lfcmVxX2Fib3J0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggYTQyZWZkNi4uYjNkZDkwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNTQyLDYgKzU0Miw5IEBACiAJICovCiAJdW5zaWduZWQgb3JkZXJlZF90YWc6MTsKIAorCS8qIHRhc2sgbWdtdCBmdW5jdGlvbiBpbiBwcm9ncmVzcyAqLworCXVuc2lnbmVkIHRtZl9pbl9wcm9ncmVzczoxOworCiAJLyoKIAkgKiBPcHRpb25hbCB3b3JrIHF1ZXVlIHRvIGJlIHV0aWxpemVkIGJ5IHRoZSB0cmFuc3BvcnQKIAkgKi8KQEAgLTYxOSw3ICs2MjIsOCBAQAogewogCXJldHVybiBzaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfUkVDT1ZFUlkgfHwKIAkJc2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX0NBTkNFTF9SRUNPVkVSWSB8fAotCQlzaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMX1JFQ09WRVJZOworCQlzaG9zdC0+c2hvc3Rfc3RhdGUgPT0gU0hPU1RfREVMX1JFQ09WRVJZIHx8CisJCXNob3N0LT50bWZfaW5fcHJvZ3Jlc3M7CiB9CiAKIGV4dGVybiBpbnQgc2NzaV9xdWV1ZV93b3JrKHN0cnVjdCBTY3NpX0hvc3QgKiwgc3RydWN0IHdvcmtfc3RydWN0ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAppbmRleCBiNjg0NDI2Li41YTNkZjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaApAQCAtMzQsNiArMzQsNyBAQAogc3RydWN0IGlzY3NpX2Nvbm47CiBzdHJ1Y3QgaXNjc2lfY21kX3Rhc2s7CiBzdHJ1Y3QgaXNjc2lfbWdtdF90YXNrOworc3RydWN0IHNvY2thZGRyOwogCiAvKioKICAqIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgLSBpU0NTSSBUcmFuc3BvcnQgdGVtcGxhdGUKQEAgLTQ2LDcgKzQ3LDEyIEBACiAgKiBAYmluZF9jb25uOgkJYXNzb2NpYXRlIHRoaXMgY29ubmVjdGlvbiB3aXRoIGV4aXN0aW5nIGlTQ1NJIHNlc3Npb24KICAqCQkJYW5kIHNwZWNpZmllZCB0cmFuc3BvcnQgZGVzY3JpcHRvcgogICogQGRlc3Ryb3lfY29ubjoJZGVzdHJveSBpbmFjdGl2ZSBpU0NTSSBjb25uZWN0aW9uCi0gKiBAc2V0X3BhcmFtOgkJc2V0IGlTQ1NJIERhdGEtUGF0aCBvcGVyYXRpb25hbCBwYXJhbWV0ZXIKKyAqIEBzZXRfcGFyYW06CQlzZXQgaVNDU0kgcGFyYW1ldGVyLiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRU5PREFUQQorICoJCQl3aGVuIHBhcmFtIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCBhIC1FeHggdmFsdWUgb24gb3RoZXIKKyAqCQkJZXJyb3IuCisgKiBAZ2V0X3BhcmFtCQlnZXQgaVNDU0kgcGFyYW1ldGVyLiBNdXN0IHJldHVybiBudW1iZXIgb2YgYnl0ZXMKKyAqCQkJY29waWVkIHRvIGJ1ZmZlciBvbiBzdWNjZXNzLCAtRU5PREFUQSB3aGVuIHBhcmFtCisgKgkJCWlzIG5vdCBzdXBwb3J0ZWQsIGFuZCBhIC1FeHggdmFsdWUgb24gb3RoZXIgZXJyb3IKICAqIEBzdGFydF9jb25uOgkJc2V0IGNvbm5lY3Rpb24gdG8gYmUgb3BlcmF0aW9uYWwKICAqIEBzdG9wX2Nvbm46CQlzdXNwZW5kL3JlY292ZXIvdGVybWluYXRlIGNvbm5lY3Rpb24KICAqIEBzZW5kX3BkdToJCXNlbmQgaVNDU0kgUERVLCBMb2dpbiwgTG9nb3V0LCBOT1AtT3V0LCBSZWplY3QsIFRleHQuCkBAIC05NywxNSArMTAzLDExIEBACiAJdm9pZCAoKnN0b3BfY29ubikgKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgaW50IGZsYWcpOwogCXZvaWQgKCpkZXN0cm95X2Nvbm4pIChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4pOwogCWludCAoKnNldF9wYXJhbSkgKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwKLQkJCSAgdWludDMyX3QgdmFsdWUpOworCQkJICBjaGFyICpidWYsIGludCBidWZsZW4pOwogCWludCAoKmdldF9jb25uX3BhcmFtKSAoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLAotCQkJICAgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIHVpbnQzMl90ICp2YWx1ZSk7CisJCQkgICAgICAgZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIAlpbnQgKCpnZXRfc2Vzc2lvbl9wYXJhbSkgKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQkgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIHVpbnQzMl90ICp2YWx1ZSk7Ci0JaW50ICgqZ2V0X2Nvbm5fc3RyX3BhcmFtKSAoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLAotCQkJCSAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7Ci0JaW50ICgqZ2V0X3Nlc3Npb25fc3RyX3BhcmFtKSAoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uLAotCQkJCSAgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1Zik7CisJCQkJICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOwogCWludCAoKnNlbmRfcGR1KSAoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJCQkgY2hhciAqZGF0YSwgdWludDMyX3QgZGF0YV9zaXplKTsKIAl2b2lkICgqZ2V0X3N0YXRzKSAoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLApAQCAtMTI3LDYgKzEyOSw4IEBACiAJCQkgICB1aW50NjRfdCAqZXBfaGFuZGxlKTsKIAlpbnQgKCplcF9wb2xsKSAodWludDY0X3QgZXBfaGFuZGxlLCBpbnQgdGltZW91dF9tcyk7CiAJdm9pZCAoKmVwX2Rpc2Nvbm5lY3QpICh1aW50NjRfdCBlcF9oYW5kbGUpOworCWludCAoKnRndF9kc2N2cikgKGVudW0gaXNjc2lfdGd0X2RzY3ZyIHR5cGUsIHVpbnQzMl90IGhvc3Rfbm8sCisJCQkgIHVpbnQzMl90IGVuYWJsZSwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkcik7CiB9OwogCiAvKgpAQCAtMTU1LDEzICsxNTksNiBAQAogCXN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAl1aW50MzJfdCBjaWQ7CQkJLyogY29ubmVjdGlvbiBpZCAqLwogCi0JLyogcG9ydGFsL2dyb3VwIHZhbHVlcyB3ZSBnb3QgZHVyaW5nIGRpc2NvdmVyeSAqLwotCWNoYXIgKnBlcnNpc3RlbnRfYWRkcmVzczsKLQlpbnQgcGVyc2lzdGVudF9wb3J0OwotCS8qIHBvcnRhbC9ncm91cCB2YWx1ZXMgd2UgYXJlIGN1cnJlbnRseSB1c2luZyAqLwotCWNoYXIgKmFkZHJlc3M7Ci0JaW50IHBvcnQ7Ci0KIAlpbnQgYWN0aXZlOwkJCS8qIG11c3QgYmUgYWNjZXNzZWQgd2l0aCB0aGUgY29ubmxvY2sgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIHN5c2ZzIHRyYW5zcG9ydC9jb250YWluZXIgZGV2aWNlICovCiAJc3RydWN0IG1lbXBvb2xfem9uZSAqel9lcnJvcjsKQEAgLTE4NSwxNiArMTgyLDExIEBACiAJc3RydWN0IGxpc3RfaGVhZCBob3N0X2xpc3Q7CiAJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCi0JLyogaVNDU0kgdmFsdWVzIHVzZWQgYXMgdW5pcXVlIGlkIGJ5IHVzZXJzcGFjZS4gKi8KLQljaGFyICp0YXJnZXRuYW1lOwotCWludCB0cGd0OwotCiAJLyogcmVjb3ZlcnkgZmllbGRzICovCiAJaW50IHJlY292ZXJ5X3RtbzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjb3Zlcnlfd29yazsKIAogCWludCB0YXJnZXRfaWQ7Ci0JaW50IGNoYW5uZWw7CiAKIAlpbnQgc2lkOwkJCQkvKiBzZXNzaW9uIGlkICovCiAJdm9pZCAqZGRfZGF0YTsJCQkJLyogTExEIHByaXZhdGUgZGF0YSAqLwpAQCAtMjA3LDggKzE5OSwxMCBAQAogI2RlZmluZSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KF9zZXNzaW9uKSBcCiAJZGV2X3RvX3Nob3N0KF9zZXNzaW9uLT5kZXYucGFyZW50KQogCisjZGVmaW5lIHN0YXJnZXRfdG9fc2Vzc2lvbihfc3RndCkgXAorCWlzY3NpX2Rldl90b19zZXNzaW9uKF9zdGd0LT5kZXYucGFyZW50KQorCiBzdHJ1Y3QgaXNjc2lfaG9zdCB7Ci0JaW50IG5leHRfdGFyZ2V0X2lkOwogCXN0cnVjdCBsaXN0X2hlYWQgc2Vzc2lvbnM7CiAJc3RydWN0IG11dGV4IG11dGV4OwogfTsKQEAgLTIxNiw4ICsyMTAsMTcgQEAKIC8qCiAgKiBzZXNzaW9uIGFuZCBjb25uZWN0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGJ5IEhXIGlTQ1NJIExMRHMKICAqLworZXh0ZXJuIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqaXNjc2lfYWxsb2Nfc2Vzc2lvbihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCQkJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKK2V4dGVybiBpbnQgaXNjc2lfYWRkX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkKTsKK2V4dGVybiBpbnQgaXNjc2lfaWZfY3JlYXRlX3Nlc3Npb25fZG9uZShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4pOworZXh0ZXJuIGludCBpc2NzaV9pZl9kZXN0cm95X3Nlc3Npb25fZG9uZShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4pOwogZXh0ZXJuIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqaXNjc2lfY3JlYXRlX3Nlc3Npb24oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCQkJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdCwgaW50IGNoYW5uZWwpOworCQkJCQkJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqdCwKKwkJCQkJCXVuc2lnbmVkIGludCB0YXJnZXRfaWQpOworZXh0ZXJuIHZvaWQgaXNjc2lfcmVtb3ZlX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKTsKK2V4dGVybiB2b2lkIGlzY3NpX2ZyZWVfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pOwogZXh0ZXJuIGludCBpc2NzaV9kZXN0cm95X3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKTsKIGV4dGVybiBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmlzY3NpX2NyZWF0ZV9jb25uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2VzcywKIAkJCQkJICAgIHVpbnQzMl90IGNpZCk7CkBAIC0yMjUsNCArMjI4LDUgQEAKIGV4dGVybiB2b2lkIGlzY3NpX3VuYmxvY2tfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pOwogZXh0ZXJuIHZvaWQgaXNjc2lfYmxvY2tfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pOwogCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCmluZGV4IDkzY2ZiNGIuLmUzYzUwM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90cmFuc3BvcnRfY2xhc3MuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZTsKIHN0cnVjdCBzYXNfcnBoeTsKQEAgLTU1LDcgKzU2LDYgQEAKIAllbnVtIHNhc19saW5rcmF0ZQltaW5pbXVtX2xpbmtyYXRlOwogCWVudW0gc2FzX2xpbmtyYXRlCW1heGltdW1fbGlua3JhdGVfaHc7CiAJZW51bSBzYXNfbGlua3JhdGUJbWF4aW11bV9saW5rcmF0ZTsKLQl1OAkJCXBvcnRfaWRlbnRpZmllcjsKIAogCS8qIGludGVybmFsIHN0YXRlICovCiAJdW5zaWduZWQgaW50CQlsb2NhbF9hdHRhY2hlZCA6IDE7CkBAIC02Niw4ICs2Niw4IEBACiAJdTMyCQkJbG9zc19vZl9kd29yZF9zeW5jX2NvdW50OwogCXUzMgkJCXBoeV9yZXNldF9wcm9ibGVtX2NvdW50OwogCi0JLyogdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayAqLwotCXN0cnVjdCBzYXNfcnBoeQkJKnJwaHk7CisJLyogZm9yIHRoZSBsaXN0IG9mIHBoeXMgYmVsb25naW5nIHRvIGEgcG9ydCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcG9ydF9zaWJsaW5nczsKIH07CiAKICNkZWZpbmUgZGV2X3RvX3BoeShkKSBcCkBAIC0xMjQsNiArMTI0LDI0IEBACiAjZGVmaW5lIHJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHIpIFwKIAljb250YWluZXJfb2YoKHIpLCBzdHJ1Y3Qgc2FzX2V4cGFuZGVyX2RldmljZSwgcnBoeSkKIAorc3RydWN0IHNhc19wb3J0IHsKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisKKwl1OAkJCXBvcnRfaWRlbnRpZmllcjsKKwlpbnQJCQludW1fcGh5czsKKworCS8qIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgKi8KKwlzdHJ1Y3Qgc2FzX3JwaHkJCSpycGh5OworCisJc3RydWN0IG11dGV4CQlwaHlfbGlzdF9tdXRleDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBoeV9saXN0OworfTsKKworI2RlZmluZSBkZXZfdG9fc2FzX3BvcnQoZCkgXAorCWNvbnRhaW5lcl9vZigoZCksIHN0cnVjdCBzYXNfcG9ydCwgZGV2KQorI2RlZmluZSB0cmFuc3BvcnRfY2xhc3NfdG9fc2FzX3BvcnQoY2RldikgXAorCWRldl90b19zYXNfcG9ydCgoY2RldiktPmRldikKKwogLyogVGhlIGZ1bmN0aW9ucyBieSB3aGljaCB0aGUgdHJhbnNwb3J0IGNsYXNzIGFuZCB0aGUgZHJpdmVyIGNvbW11bmljYXRlICovCiBzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIHsKIAlpbnQgKCpnZXRfbGlua2Vycm9ycykoc3RydWN0IHNhc19waHkgKik7CkBAIC0xMzMsNiArMTUxLDcgQEAKIH07CiAKIAordm9pZCBzYXNfcmVtb3ZlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBzYXNfcmVtb3ZlX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqKTsKIAogZXh0ZXJuIHN0cnVjdCBzYXNfcGh5ICpzYXNfcGh5X2FsbG9jKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKQEAgLTE0MSwxMyArMTYwLDIxIEBACiBleHRlcm4gdm9pZCBzYXNfcGh5X2RlbGV0ZShzdHJ1Y3Qgc2FzX3BoeSAqKTsKIGV4dGVybiBpbnQgc2NzaV9pc19zYXNfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKik7CiAKLWV4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19lbmRfZGV2aWNlX2FsbG9jKHN0cnVjdCBzYXNfcGh5ICopOwotZXh0ZXJuIHN0cnVjdCBzYXNfcnBoeSAqc2FzX2V4cGFuZGVyX2FsbG9jKHN0cnVjdCBzYXNfcGh5ICosIGVudW0gc2FzX2RldmljZV90eXBlKTsKK2V4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19lbmRfZGV2aWNlX2FsbG9jKHN0cnVjdCBzYXNfcG9ydCAqKTsKK2V4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19leHBhbmRlcl9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKiwgZW51bSBzYXNfZGV2aWNlX3R5cGUpOwogdm9pZCBzYXNfcnBoeV9mcmVlKHN0cnVjdCBzYXNfcnBoeSAqKTsKIGV4dGVybiBpbnQgc2FzX3JwaHlfYWRkKHN0cnVjdCBzYXNfcnBoeSAqKTsKIGV4dGVybiB2b2lkIHNhc19ycGh5X2RlbGV0ZShzdHJ1Y3Qgc2FzX3JwaHkgKik7CiBleHRlcm4gaW50IHNjc2lfaXNfc2FzX3JwaHkoY29uc3Qgc3RydWN0IGRldmljZSAqKTsKIAorc3RydWN0IHNhc19wb3J0ICpzYXNfcG9ydF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICosIGludCk7CitpbnQgc2FzX3BvcnRfYWRkKHN0cnVjdCBzYXNfcG9ydCAqKTsKK3ZvaWQgc2FzX3BvcnRfZnJlZShzdHJ1Y3Qgc2FzX3BvcnQgKik7Cit2b2lkIHNhc19wb3J0X2RlbGV0ZShzdHJ1Y3Qgc2FzX3BvcnQgKik7Cit2b2lkIHNhc19wb3J0X2FkZF9waHkoc3RydWN0IHNhc19wb3J0ICosIHN0cnVjdCBzYXNfcGh5ICopOwordm9pZCBzYXNfcG9ydF9kZWxldGVfcGh5KHN0cnVjdCBzYXNfcG9ydCAqLCBzdHJ1Y3Qgc2FzX3BoeSAqKTsKK2ludCBzY3NpX2lzX3Nhc19wb3J0KGNvbnN0IHN0cnVjdCBkZXZpY2UgKik7CisKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKgogc2FzX2F0dGFjaF90cmFuc3BvcnQoc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSAqKTsKIGV4dGVybiB2b2lkIHNhc19yZWxlYXNlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCmluZGV4IDQ0NmFmYzMuLjc1OGY4YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCisrKyBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCkBAIC0yNjUsNiArMjY1LDcgQEAKIAogLyogc3BlY2lmaWMgLSBBbmFsb2cgRGV2aWNlcyAqLwogI2RlZmluZSBBQzk3X0FEX1RFU1QJCTB4NWEJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBBQzk3X0FEX1RFU1QyCQkweDVjCS8qIHVuZG9jdW1lbnRlZCB0ZXN0IHJlZ2lzdGVyIDIgKi8KICNkZWZpbmUgQUM5N19BRF9DT0RFQ19DRkcJMHg3MAkvKiBjb2RlYyBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEFDOTdfQURfSkFDS19TUERJRgkweDcyCS8qIEphY2sgU2Vuc2UgJiBTL1BESUYgKi8KICNkZWZpbmUgQUM5N19BRF9TRVJJQUxfQ0ZHCTB4NzQJLyogU2VyaWFsIENvbmZpZ3VyYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWs0eHh4LWFkZGEuaCBiL2luY2x1ZGUvc291bmQvYWs0eHh4LWFkZGEuaAppbmRleCAzYmY1OTExLi4zZDk4ODg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FrNHh4eC1hZGRhLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hazR4eHgtYWRkYS5oCkBAIC0zMiw4ICszMiw4IEBACiBzdHJ1Y3Qgc25kX2FrNHh4eF9vcHMgewogCXZvaWQgKCpsb2NrKShzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrLCBpbnQgY2hpcCk7CiAJdm9pZCAoKnVubG9jaykoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IGNoaXApOwotCXZvaWQgKCp3cml0ZSkoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IGNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCk7Ci0JLy8gdW5zaWduZWQgY2hhciAoKnJlYWQpKHN0cnVjdCBzbmRfYWttNHh4eCAqYWssIGludCBjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZyk7CisJdm9pZCAoKndyaXRlKShzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrLCBpbnQgY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsKTsKIAl2b2lkICgqc2V0X3JhdGVfdmFsKShzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrLCB1bnNpZ25lZCBpbnQgcmF0ZSk7CiB9OwogCkBAIC00MSwyOSArNDEsNDAgQEAKIAogc3RydWN0IHNuZF9ha200eHh4IHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JdW5zaWduZWQgaW50IG51bV9hZGNzOwkJCQkvKiBBSzQ1MjQgb3IgQUs0NTI4IEFEQ3MgKi8KLQl1bnNpZ25lZCBpbnQgbnVtX2RhY3M7CQkJCS8qIEFLNDUyNCBvciBBSzQ1MjggREFDcyAqLwotCXVuc2lnbmVkIGNoYXIgaW1hZ2VzW0FLNFhYWF9JTUFHRV9TSVpFXTsJLyogc2F2ZWQgcmVnaXN0ZXIgaW1hZ2UgKi8KLQl1bnNpZ25lZCBjaGFyIGlwZ2FfZ2FpbltBSzRYWFhfTUFYX0NISVBTXVsyXTsJLyogc2F2ZWQgcmVnaXN0ZXIgaW1hZ2UgZm9yIElQR0EgKEFLNDUyOCkgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2FkY3M7CQkJLyogQUs0NTI0IG9yIEFLNDUyOCBBRENzICovCisJdW5zaWduZWQgaW50IG51bV9kYWNzOwkJCS8qIEFLNDUyNCBvciBBSzQ1MjggREFDcyAqLworCXVuc2lnbmVkIGNoYXIgaW1hZ2VzW0FLNFhYWF9JTUFHRV9TSVpFXTsgLyogc2F2ZWQgcmVnaXN0ZXIgaW1hZ2UgKi8KKwl1bnNpZ25lZCBjaGFyIGlwZ2FfZ2FpbltBSzRYWFhfTUFYX0NISVBTXVsyXTsgLyogc2F2ZWQgcmVnaXN0ZXIgaW1hZ2UKKwkJCQkJCSAgICAgICAqIGZvciBJUEdBIChBSzQ1MjgpCisJCQkJCQkgICAgICAgKi8KIAl1bnNpZ25lZCBsb25nIHByaXZhdGVfdmFsdWVbQUs0WFhYX01BWF9DSElQU107CS8qIGhlbHBlciBmb3IgZHJpdmVyICovCiAJdm9pZCAqcHJpdmF0ZV9kYXRhW0FLNFhYWF9NQVhfQ0hJUFNdOwkJLyogaGVscGVyIGZvciBkcml2ZXIgKi8KIAkvKiB0ZW1wbGF0ZSBzaG91bGQgZmlsbCB0aGUgZm9sbG93aW5nIGZpZWxkcyAqLwotCXVuc2lnbmVkIGludCBpZHhfb2Zmc2V0OwkJCS8qIGNvbnRyb2wgaW5kZXggb2Zmc2V0ICovCisJdW5zaWduZWQgaW50IGlkeF9vZmZzZXQ7CQkvKiBjb250cm9sIGluZGV4IG9mZnNldCAqLwogCWVudW0gewogCQlTTkRfQUs0NTI0LCBTTkRfQUs0NTI4LCBTTkRfQUs0NTI5LAogCQlTTkRfQUs0MzU1LCBTTkRfQUs0MzU4LCBTTkRfQUs0MzgxCiAJfSB0eXBlOworCXVuc2lnbmVkIGludCAqbnVtX3N0ZXJlbzsJLyogYXJyYXkgb2YgY29tYmluZWQgY291bnRzCisJCQkJCSAqIGZvciB0aGUgbWl4ZXIKKwkJCQkJICovCisJY2hhciAqKmNoYW5uZWxfbmFtZXM7CQkvKiBhcnJheSBvZiBtaXhlciBjaGFubmVsIG5hbWVzICovCiAJc3RydWN0IHNuZF9hazR4eHhfb3BzIG9wczsKIH07CiAKLXZvaWQgc25kX2FrbTR4eHhfd3JpdGUoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IGNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cit2b2lkIHNuZF9ha200eHh4X3dyaXRlKHN0cnVjdCBzbmRfYWttNHh4eCAqYWssIGludCBjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsKTsKIHZvaWQgc25kX2FrbTR4eHhfcmVzZXQoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IHN0YXRlKTsKIHZvaWQgc25kX2FrbTR4eHhfaW5pdChzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrKTsKIGludCBzbmRfYWttNHh4eF9idWlsZF9jb250cm9scyhzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrKTsKIAotI2RlZmluZSBzbmRfYWttNHh4eF9nZXQoYWssY2hpcCxyZWcpIChhayktPmltYWdlc1soY2hpcCkgKiAxNiArIChyZWcpXQotI2RlZmluZSBzbmRfYWttNHh4eF9zZXQoYWssY2hpcCxyZWcsdmFsKSAoKGFrKS0+aW1hZ2VzWyhjaGlwKSAqIDE2ICsgKHJlZyldID0gKHZhbCkpCi0jZGVmaW5lIHNuZF9ha200eHh4X2dldF9pcGdhKGFrLGNoaXAscmVnKSAoYWspLT5pcGdhX2dhaW5bY2hpcF1bKHJlZyktNF0KLSNkZWZpbmUgc25kX2FrbTR4eHhfc2V0X2lwZ2EoYWssY2hpcCxyZWcsdmFsKSAoKGFrKS0+aXBnYV9nYWluW2NoaXBdWyhyZWcpLTRdID0gKHZhbCkpCisjZGVmaW5lIHNuZF9ha200eHh4X2dldChhayxjaGlwLHJlZykgXAorCShhayktPmltYWdlc1soY2hpcCkgKiAxNiArIChyZWcpXQorI2RlZmluZSBzbmRfYWttNHh4eF9zZXQoYWssY2hpcCxyZWcsdmFsKSBcCisJKChhayktPmltYWdlc1soY2hpcCkgKiAxNiArIChyZWcpXSA9ICh2YWwpKQorI2RlZmluZSBzbmRfYWttNHh4eF9nZXRfaXBnYShhayxjaGlwLHJlZykgXAorCShhayktPmlwZ2FfZ2FpbltjaGlwXVsocmVnKS00XQorI2RlZmluZSBzbmRfYWttNHh4eF9zZXRfaXBnYShhayxjaGlwLHJlZyx2YWwpIFwKKwkoKGFrKS0+aXBnYV9nYWluW2NoaXBdWyhyZWcpLTRdID0gKHZhbCkpCiAKICNlbmRpZiAvKiBfX1NPVU5EX0FLNFhYWF9BRERBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaW5pdHZhbC5oIGIvaW5jbHVkZS9zb3VuZC9pbml0dmFsLmgKaW5kZXggZDI5ZTNkMy4uMmFlNzZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9pbml0dmFsLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9pbml0dmFsLmgKQEAgLTYyLDcgKzYyLDggQEAKIHsKIAl3aGlsZSAoKmlycV90YWJsZSAhPSAtMSkgewogCQlpZiAoIXJlcXVlc3RfaXJxKCppcnFfdGFibGUsIHNuZF9sZWdhY3lfZW1wdHlfaXJxX2hhbmRsZXIsCi0JCQkJIFNBX0lOVEVSUlVQVCwgIkFMU0EgVGVzdCBJUlEiLCAodm9pZCAqKSBpcnFfdGFibGUpKSB7CisJCQkJIElSUUZfRElTQUJMRUQgfCBJUlFGX1BST0JFX1NIQVJFRCwgIkFMU0EgVGVzdCBJUlEiLAorCQkJCSAodm9pZCAqKSBpcnFfdGFibGUpKSB7CiAJCQlmcmVlX2lycSgqaXJxX3RhYmxlLCAodm9pZCAqKSBpcnFfdGFibGUpOwogCQkJcmV0dXJuICppcnFfdGFibGU7CiAJCX0KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBmNzBmMmZkLi5hNWIwNzNhIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC01NCw4ICs1NCw4IEBACiAKIGNvbmZpZyBJTklUX0VOVl9BUkdfTElNSVQKIAlpbnQKLQlkZWZhdWx0IDMyIGlmICFVU0VSTU9ERQotCWRlZmF1bHQgMTI4IGlmIFVTRVJNT0RFCisJZGVmYXVsdCAzMiBpZiAhVU1MCisJZGVmYXVsdCAxMjggaWYgVU1MCiAJaGVscAogCSAgTWF4aW11bSBvZiBlYWNoIG9mIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudAogCSAgdmFyaWFibGVzIHBhc3NlZCB0byBpbml0IGZyb20gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCkBAIC0zNzksNiArMzc5LDE1IEBACiAJICBTTE9CIGlzIG1vcmUgc3BhY2UgZWZmaWNpZW50IGJ1dCBkb2VzIG5vdCBzY2FsZSB3ZWxsIGFuZCBpcwogCSAgbW9yZSBzdXNjZXB0aWJsZSB0byBmcmFnbWVudGF0aW9uLgogCitjb25maWcgVk1fRVZFTlRfQ09VTlRFUlMKKwlkZWZhdWx0IHkKKwlib29sICJFbmFibGUgVk0gZXZlbnQgY291bnRlcnMgZm9yIC9wcm9jL3Ztc3RhdCIgaWYgRU1CRURERUQKKwloZWxwCisJICBWTSBldmVudCBjb3VudGVycyBhcmUgb25seSBuZWVkZWQgdG8gZm9yIGV2ZW50IGNvdW50cyB0byBiZQorCSAgc2hvd24uIFRoZXkgaGF2ZSBubyBmdW5jdGlvbiBmb3IgdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMKKwkgIG9wdGlvbiBhbGxvd3MgdGhlIGRpc2FibGluZyBvZiB0aGUgVk0gZXZlbnQgY291bnRlcnMuCisJICAvcHJvYy92bXN0YXQgd2lsbCBvbmx5IHNob3cgcGFnZSBjb3VudHMuCisKIGVuZG1lbnUJCSMgR2VuZXJhbCBzZXR1cAogCiBjb25maWcgVElOWV9TSE1FTQpkaWZmIC0tZ2l0IGEvaW5pdC9NYWtlZmlsZSBiL2luaXQvTWFrZWZpbGUKaW5kZXggYTIzMDAwNy4uNjMzYTI2OCAxMDA2NDQKLS0tIGEvaW5pdC9NYWtlZmlsZQorKysgYi9pbml0L01ha2VmaWxlCkBAIC02LDcgKzYsNiBAQAogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZKSArPSBjYWxpYnJhdGUubwogCiBtb3VudHMteQkJCTo9IGRvX21vdW50cy5vCi1tb3VudHMtJChDT05GSUdfREVWRlNfRlMpCSs9IGRvX21vdW50c19kZXZmcy5vCiBtb3VudHMtJChDT05GSUdfQkxLX0RFVl9SQU0pCSs9IGRvX21vdW50c19yZC5vCiBtb3VudHMtJChDT05GSUdfQkxLX0RFVl9JTklUUkQpCSs9IGRvX21vdW50c19pbml0cmQubwogbW91bnRzLSQoQ09ORklHX0JMS19ERVZfTUQpCSs9IGRvX21vdW50c19tZC5vCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCAyMWIzYjhmLi45NGFlZWM3IDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5jCisrKyBiL2luaXQvZG9fbW91bnRzLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogewogCXZvaWQgKmRhdGEgPSBuZnNfcm9vdF9kYXRhKCk7CiAKLQljcmVhdGVfZGV2KCIvZGV2L3Jvb3QiLCBST09UX0RFViwgTlVMTCk7CisJY3JlYXRlX2RldigiL2Rldi9yb290IiwgUk9PVF9ERVYpOwogCWlmIChkYXRhICYmCiAJICAgIGRvX21vdW50X3Jvb3QoIi9kZXYvcm9vdCIsICJuZnMiLCByb290X21vdW50ZmxhZ3MsIGRhdGEpID09IDApCiAJCXJldHVybiAxOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJCQljaGFuZ2VfZmxvcHB5KCJyb290IGZsb3BweSIpOwogCX0KICNlbmRpZgotCWNyZWF0ZV9kZXYoIi9kZXYvcm9vdCIsIFJPT1RfREVWLCByb290X2RldmljZV9uYW1lKTsKKwljcmVhdGVfZGV2KCIvZGV2L3Jvb3QiLCBST09UX0RFVik7CiAJbW91bnRfYmxvY2tfcm9vdCgiL2Rldi9yb290Iiwgcm9vdF9tb3VudGZsYWdzKTsKIH0KIApAQCAtMzk3LDggKzM5Nyw2IEBACiB7CiAJaW50IGlzX2Zsb3BweTsKIAotCW1vdW50X2RldmZzKCk7Ci0KIAlpZiAocm9vdF9kZWxheSkgewogCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nICVkc2VjIGJlZm9yZSBtb3VudGluZyByb290IGRldmljZS4uLlxuIiwKIAkJICAgICAgIHJvb3RfZGVsYXkpOwpAQCAtNDI4LDEwICs0MjYsOCBAQAogCiAJbW91bnRfcm9vdCgpOwogb3V0OgotCXVtb3VudF9kZXZmcygiL2RldiIpOwogCXN5c19tb3VudCgiLiIsICIvIiwgTlVMTCwgTVNfTU9WRSwgTlVMTCk7CiAJc3lzX2Nocm9vdCgiLiIpOwogCXNlY3VyaXR5X3NiX3Bvc3RfbW91bnRyb290KCk7Ci0JbW91bnRfZGV2ZnNfZnMgKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmggYi9pbml0L2RvX21vdW50cy5oCmluZGV4IGUwYTdhYzkuLmU3ZjJlN2YgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmgKKysrIGIvaW5pdC9kb19tb3VudHMuaApAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KQEAgLTE1LDI1ICsxNCwxMiBAQAogZXh0ZXJuIGludCByb290X21vdW50ZmxhZ3M7CiBleHRlcm4gY2hhciAqcm9vdF9kZXZpY2VfbmFtZTsKIAotI2lmZGVmIENPTkZJR19ERVZGU19GUwotCi12b2lkIG1vdW50X2RldmZzKHZvaWQpOwotdm9pZCB1bW91bnRfZGV2ZnMoY2hhciAqcGF0aCk7Ci1pbnQgIGNyZWF0ZV9kZXYoY2hhciAqbmFtZSwgZGV2X3QgZGV2LCBjaGFyICpkZXZmc19uYW1lKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIG1vdW50X2RldmZzKHZvaWQpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdW1vdW50X2RldmZzKGNvbnN0IGNoYXIgKnBhdGgpIHt9Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9kZXYoY2hhciAqbmFtZSwgZGV2X3QgZGV2LCBjaGFyICpkZXZmc19uYW1lKQorc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX2RldihjaGFyICpuYW1lLCBkZXZfdCBkZXYpCiB7CiAJc3lzX3VubGluayhuYW1lKTsKIAlyZXR1cm4gc3lzX21rbm9kKG5hbWUsIFNfSUZCTEt8MDYwMCwgbmV3X2VuY29kZV9kZXYoZGV2KSk7CiB9CiAKLSNlbmRpZgotCiAjaWYgQklUU19QRVJfTE9ORyA9PSAzMgogc3RhdGljIGlubGluZSB1MzIgYnN0YXQoY2hhciAqbmFtZSkKIHsKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzX2RldmZzLmMgYi9pbml0L2RvX21vdW50c19kZXZmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzUyNjQ3Li4wMDAwMDAwCi0tLSBhL2luaXQvZG9fbW91bnRzX2RldmZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGlyZW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJkb19tb3VudHMuaCIKLQotdm9pZCBfX2luaXQgbW91bnRfZGV2ZnModm9pZCkKLXsKLQlzeXNfbW91bnQoImRldmZzIiwgIi9kZXYiLCAiZGV2ZnMiLCAwLCBOVUxMKTsKLX0KLQotdm9pZCBfX2luaXQgdW1vdW50X2RldmZzKGNoYXIgKnBhdGgpCi17Ci0Jc3lzX3Vtb3VudChwYXRoLCAwKTsKLX0KLQotLyoKLSAqIElmIHRoZSBkaXIgd2lsbCBmaXQgaW4gKmJ1ZiwgcmV0dXJuIGl0cyBsZW5ndGguICBJZiBpdCB3b24ndCBmaXQsIHJldHVybgotICogemVyby4gIFJldHVybiAtdmUgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRvX3JlYWRfZGlyKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuKQotewotCWxvbmcgYnl0ZXMsIG47Ci0JY2hhciAqcCA9IGJ1ZjsKLQlzeXNfbHNlZWsoZmQsIDAsIDApOwotCi0JZm9yIChieXRlcyA9IDA7IGJ5dGVzIDwgbGVuOyBieXRlcyArPSBuKSB7Ci0JCW4gPSBzeXNfZ2V0ZGVudHM2NChmZCwgKHN0cnVjdCBsaW51eF9kaXJlbnQ2NCAqKShwICsgYnl0ZXMpLAotCQkJCQlsZW4gLSBieXRlcyk7Ci0JCWlmIChuIDwgMCkKLQkJCXJldHVybiBuOwotCQlpZiAobiA9PSAwKQotCQkJcmV0dXJuIGJ5dGVzOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRyeSB0byByZWFkIGFsbCBvZiBhIGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIGNvbnRlbnRzIGF0ICpwLCB3aGljaAotICogaXMga21hbGxvY2VkIG1lbW9yeS4gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGF0ICpsZW4uICBSZXR1cm5zCi0gKiBOVUxMIG9uIGVycm9yLgotICovCi1zdGF0aWMgdm9pZCAqIF9faW5pdCByZWFkX2RpcihjaGFyICpwYXRoLCBpbnQgKmxlbikKLXsKLQlpbnQgc2l6ZTsKLQlpbnQgZmQgPSBzeXNfb3BlbihwYXRoLCAwLCAwKTsKLQotCSpsZW4gPSAwOwotCWlmIChmZCA8IDApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChzaXplID0gMSA8PCA5OyBzaXplIDw9IChQQUdFX1NJWkUgPDwgTUFYX09SREVSKTsgc2l6ZSA8PD0gMSkgewotCQl2b2lkICpwID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQkJaW50IG47Ci0JCWlmICghcCkKLQkJCWJyZWFrOwotCQluID0gZG9fcmVhZF9kaXIoZmQsIHAsIHNpemUpOwotCQlpZiAobiA+IDApIHsKLQkJCXN5c19jbG9zZShmZCk7Ci0JCQkqbGVuID0gbjsKLQkJCXJldHVybiBwOwotCQl9Ci0JCWtmcmVlKHApOwotCQlpZiAobiA9PSAtRUlOVkFMKQotCQkJY29udGludWU7CS8qIFRyeSBhIGxhcmdlciBidWZmZXIgKi8KLQkJaWYgKG4gPCAwKQotCQkJYnJlYWs7Ci0JfQotCXN5c19jbG9zZShmZCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiByZWN1cnNpdmVseSBzY2FuIDxwYXRoPiwgbG9va2luZyBmb3IgYSBkZXZpY2Ugbm9kZSBvZiB0eXBlIDxkZXY+Ci0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaW5fZGV2ZnMoY2hhciAqcGF0aCwgdW5zaWduZWQgZGV2KQotewotCWNoYXIgKmVuZCA9IHBhdGggKyBzdHJsZW4ocGF0aCk7Ci0JaW50IHJlc3QgPSBwYXRoICsgNjQgLSBlbmQ7Ci0JaW50IHNpemU7Ci0JY2hhciAqcCA9IHJlYWRfZGlyKHBhdGgsICZzaXplKTsKLQljaGFyICpzOwotCi0JaWYgKCFwKQotCQlyZXR1cm4gLTE7Ci0JZm9yIChzID0gcDsgcyA8IHAgKyBzaXplOyBzICs9ICgoc3RydWN0IGxpbnV4X2RpcmVudDY0ICopcyktPmRfcmVjbGVuKSB7Ci0JCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCAqZCA9IChzdHJ1Y3QgbGludXhfZGlyZW50NjQgKilzOwotCQlpZiAoc3RybGVuKGQtPmRfbmFtZSkgKyAyID4gcmVzdCkKLQkJCWNvbnRpbnVlOwotCQlzd2l0Y2ggKGQtPmRfdHlwZSkgewotCQkJY2FzZSBEVF9CTEs6Ci0JCQkJc3ByaW50ZihlbmQsICIvJXMiLCBkLT5kX25hbWUpOwotCQkJCWlmIChic3RhdChwYXRoKSAhPSBkZXYpCi0JCQkJCWJyZWFrOwotCQkJCWtmcmVlKHApOwotCQkJCXJldHVybiAwOwotCQkJY2FzZSBEVF9ESVI6Ci0JCQkJaWYgKHN0cmNtcChkLT5kX25hbWUsICIuIikgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHN0cmNtcChkLT5kX25hbWUsICIuLiIpID09IDApCi0JCQkJCWJyZWFrOwotCQkJCXNwcmludGYoZW5kLCAiLyVzIiwgZC0+ZF9uYW1lKTsKLQkJCQlpZiAoZmluZF9pbl9kZXZmcyhwYXRoLCBkZXYpIDwgMCkKLQkJCQkJYnJlYWs7Ci0JCQkJa2ZyZWUocCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0Ja2ZyZWUocCk7Ci0JcmV0dXJuIC0xOwotfQotCi0vKgotICogY3JlYXRlIGEgZGV2aWNlIG5vZGUgY2FsbGVkIDxuYW1lPiB3aGljaCBwb2ludHMgdG8KLSAqIDxkZXZmc19uYW1lPiBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGZpbmQgYSBkZXZpY2Ugbm9kZQotICogd2hpY2ggbWF0Y2hlcyA8ZGV2PiBhbmQgbWFrZSA8bmFtZT4gYSBzeW1saW5rIHBvaW50aW5nIHRvIGl0LgotICovCi1pbnQgX19pbml0IGNyZWF0ZV9kZXYoY2hhciAqbmFtZSwgZGV2X3QgZGV2LCBjaGFyICpkZXZmc19uYW1lKQotewotCWNoYXIgcGF0aFs2NF07Ci0KLQlzeXNfdW5saW5rKG5hbWUpOwotCWlmIChkZXZmc19uYW1lICYmIGRldmZzX25hbWVbMF0pIHsKLQkJaWYgKHN0cm5jbXAoZGV2ZnNfbmFtZSwgIi9kZXYvIiwgNSkgPT0gMCkKLQkJCWRldmZzX25hbWUgKz0gNTsKLQkJc3ByaW50ZihwYXRoLCAiL2Rldi8lcyIsIGRldmZzX25hbWUpOwotCQlpZiAoc3lzX2FjY2VzcyhwYXRoLCAwKSA9PSAwKQotCQkJcmV0dXJuIHN5c19zeW1saW5rKGRldmZzX25hbWUsIG5hbWUpOwotCX0KLQlpZiAoIWRldikKLQkJcmV0dXJuIC0xOwotCXN0cmNweShwYXRoLCAiL2RldiIpOwotCWlmIChmaW5kX2luX2RldmZzKHBhdGgsIG5ld19lbmNvZGVfZGV2KGRldikpIDwgMCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiBzeXNfc3ltbGluayhwYXRoICsgNSwgbmFtZSk7Ci19CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19pbml0cmQuYyBiL2luaXQvZG9fbW91bnRzX2luaXRyZC5jCmluZGV4IDQwNWY5MDMuLmEwNmYwMzcgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzX2luaXRyZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX2luaXRyZC5jCkBAIC00NCw3ICs0NCw3IEBACiAJaW50IHBpZDsKIAogCXJlYWxfcm9vdF9kZXYgPSBuZXdfZW5jb2RlX2RldihST09UX0RFVik7Ci0JY3JlYXRlX2RldigiL2Rldi9yb290Lm9sZCIsIFJvb3RfUkFNMCwgTlVMTCk7CisJY3JlYXRlX2RldigiL2Rldi9yb290Lm9sZCIsIFJvb3RfUkFNMCk7CiAJLyogbW91bnQgaW5pdHJkIG9uIHJvb3RmcycgL3Jvb3QgKi8KIAltb3VudF9ibG9ja19yb290KCIvZGV2L3Jvb3Qub2xkIiwgcm9vdF9tb3VudGZsYWdzICYgfk1TX1JET05MWSk7CiAJc3lzX21rZGlyKCIvb2xkIiwgMDcwMCk7CkBAIC01NCw3ICs1NCw2IEBACiAJc3lzX2NoZGlyKCIvcm9vdCIpOwogCXN5c19tb3VudCgiLiIsICIvIiwgTlVMTCwgTVNfTU9WRSwgTlVMTCk7CiAJc3lzX2Nocm9vdCgiLiIpOwotCW1vdW50X2RldmZzX2ZzICgpOwogCiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAJcGlkID0ga2VybmVsX3RocmVhZChkb19saW51eHJjLCAiL2xpbnV4cmMiLCBTSUdDSExEKTsKQEAgLTcxLDcgKzcwLDYgQEAKIAlzeXNfY2hyb290KCIuIik7CiAJc3lzX2Nsb3NlKG9sZF9mZCk7CiAJc3lzX2Nsb3NlKHJvb3RfZmQpOwotCXVtb3VudF9kZXZmcygiL29sZC9kZXYiKTsKIAogCWlmIChuZXdfZGVjb2RlX2RldihyZWFsX3Jvb3RfZGV2KSA9PSBSb290X1JBTTApIHsKIAkJc3lzX2NoZGlyKCIvb2xkIik7CkBAIC0xMDcsNyArMTA1LDcgQEAKIGludCBfX2luaXQgaW5pdHJkX2xvYWQodm9pZCkKIHsKIAlpZiAobW91bnRfaW5pdHJkKSB7Ci0JCWNyZWF0ZV9kZXYoIi9kZXYvcmFtIiwgUm9vdF9SQU0wLCBOVUxMKTsKKwkJY3JlYXRlX2RldigiL2Rldi9yYW0iLCBSb290X1JBTTApOwogCQkvKgogCQkgKiBMb2FkIHRoZSBpbml0cmQgZGF0YSBpbnRvIC9kZXYvcmFtMC4gRXhlY3V0ZSBpdCBhcyBpbml0cmQKIAkJICogdW5sZXNzIC9kZXYvcmFtMCBpcyBzdXBwb3NlZCB0byBiZSBvdXIgYWN0dWFsIHJvb3QgZGV2aWNlLApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfbWQuYyBiL2luaXQvZG9fbW91bnRzX21kLmMKaW5kZXggZjZmMzY4MC4uMjQyOWUxYiAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfbWQuYworKysgYi9pbml0L2RvX21vdW50c19tZC5jCkBAIC0xMjUsMTkgKzEyNSwxOCBAQAogCQlpbnQgZXJyID0gMDsKIAkJY2hhciAqZGV2bmFtZTsKIAkJbWR1X2Rpc2tfaW5mb190IGRpbmZvOwotCQljaGFyIG5hbWVbMTZdLCBkZXZmc19uYW1lWzE2XTsKKwkJY2hhciBuYW1lWzE2XTsKIAogCQltaW5vciA9IG1kX3NldHVwX2FyZ3NbZW50XS5taW5vcjsKIAkJcGFydGl0aW9uZWQgPSBtZF9zZXR1cF9hcmdzW2VudF0ucGFydGl0aW9uZWQ7CiAJCWRldm5hbWUgPSBtZF9zZXR1cF9hcmdzW2VudF0uZGV2aWNlX25hbWVzOwogCiAJCXNwcmludGYobmFtZSwgIi9kZXYvbWQlcyVkIiwgcGFydGl0aW9uZWQ/Il9kIjoiIiwgbWlub3IpOwotCQlzcHJpbnRmKGRldmZzX25hbWUsICIvZGV2L21kLyVzJWQiLCBwYXJ0aXRpb25lZD8iZCI6IiIsIG1pbm9yKTsKIAkJaWYgKHBhcnRpdGlvbmVkKQogCQkJZGV2ID0gTUtERVYobWRwX21ham9yLCBtaW5vciA8PCBNZHBNaW5vclNoaWZ0KTsKIAkJZWxzZQogCQkJZGV2ID0gTUtERVYoTURfTUFKT1IsIG1pbm9yKTsKLQkJY3JlYXRlX2RldihuYW1lLCBkZXYsIGRldmZzX25hbWUpOworCQljcmVhdGVfZGV2KG5hbWUsIGRldik7CiAJCWZvciAoaSA9IDA7IGkgPCBNRF9TQl9ESVNLUyAmJiBkZXZuYW1lICE9IDA7IGkrKykgewogCQkJY2hhciAqcDsKIAkJCWNoYXIgY29tcF9uYW1lWzY0XTsKQEAgLTI3Miw3ICsyNzEsNyBAQAogCiB2b2lkIF9faW5pdCBtZF9ydW5fc2V0dXAodm9pZCkKIHsKLQljcmVhdGVfZGV2KCIvZGV2L21kMCIsIE1LREVWKE1EX01BSk9SLCAwKSwgIm1kLzAiKTsKKwljcmVhdGVfZGV2KCIvZGV2L21kMCIsIE1LREVWKE1EX01BSk9SLCAwKSk7CiAJaWYgKHJhaWRfbm9hdXRvZGV0ZWN0KQogCQlwcmludGsoS0VSTl9JTkZPICJtZDogU2tpcHBpbmcgYXV0b2RldGVjdGlvbiBvZiBSQUlEIGFycmF5cy4gKHJhaWQ9bm9hdXRvZGV0ZWN0KVxuIik7CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19yZC5jIGIvaW5pdC9kb19tb3VudHNfcmQuYwppbmRleCBjMjY4M2ZjLi5lZDY1MmY0IDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19yZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX3JkLmMKQEAgLTI2Miw4ICsyNjIsOCBAQAogewogCWlmIChyZF9wcm9tcHQpCiAJCWNoYW5nZV9mbG9wcHkoInJvb3QgZmxvcHB5IGRpc2sgdG8gYmUgbG9hZGVkIGludG8gUkFNIGRpc2siKTsKLQljcmVhdGVfZGV2KCIvZGV2L3Jvb3QiLCBST09UX0RFViwgcm9vdF9kZXZpY2VfbmFtZSk7Ci0JY3JlYXRlX2RldigiL2Rldi9yYW0iLCBNS0RFVihSQU1ESVNLX01BSk9SLCBuKSwgTlVMTCk7CisJY3JlYXRlX2RldigiL2Rldi9yb290IiwgUk9PVF9ERVYpOworCWNyZWF0ZV9kZXYoIi9kZXYvcmFtIiwgTUtERVYoUkFNRElTS19NQUpPUiwgbikpOwogCXJldHVybiByZF9sb2FkX2ltYWdlKCIvZGV2L3Jvb3QiKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCAwZDU3ZjZjLi42MjhiOGU5IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMTEsMTEgKzExLDkgQEAKIAogI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtNDksNiArNDcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnVncy5oPgpAQCAtNDQ3LDEwICs0NDcsMjcgQEAKIAljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CiB9CiAKK3ZvaWQgX19pbml0IF9fYXR0cmlidXRlX18oKHdlYWspKSBzbXBfc2V0dXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgc3RhcnRfa2VybmVsKHZvaWQpCiB7CiAJY2hhciAqIGNvbW1hbmRfbGluZTsKIAlleHRlcm4gc3RydWN0IGtlcm5lbF9wYXJhbSBfX3N0YXJ0X19fcGFyYW1bXSwgX19zdG9wX19fcGFyYW1bXTsKKworCXNtcF9zZXR1cF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogTmVlZCB0byBydW4gYXMgZWFybHkgYXMgcG9zc2libGUsIHRvIGluaXRpYWxpemUgdGhlCisJICogbG9ja2RlcCBoYXNoOgorCSAqLworCWxvY2tkZXBfaW5pdCgpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwllYXJseV9ib290X2lycXNfb2ZmKCk7CisJZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcygpOworCiAvKgogICogSW50ZXJydXB0cyBhcmUgc3RpbGwgZGlzYWJsZWQuIERvIG5lY2Vzc2FyeSBzZXR1cHMsIHRoZW4KICAqIGVuYWJsZSB0aGVtCkBAIC00OTEsOCArNTA4LDEzIEBACiAJaW5pdF90aW1lcnMoKTsKIAlocnRpbWVyc19pbml0KCk7CiAJc29mdGlycV9pbml0KCk7Ci0JdGltZV9pbml0KCk7CiAJdGltZWtlZXBpbmdfaW5pdCgpOworCXRpbWVfaW5pdCgpOworCXByb2ZpbGVfaW5pdCgpOworCWlmICghaXJxc19kaXNhYmxlZCgpKQorCQlwcmludGsoInN0YXJ0X2tlcm5lbCgpOiBidWc6IGludGVycnVwdHMgd2VyZSBlbmFibGVkIGVhcmx5XG4iKTsKKwllYXJseV9ib290X2lycXNfb24oKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkvKgogCSAqIEhBQ0sgQUxFUlQhIFRoaXMgaXMgZWFybHkuIFdlJ3JlIGVuYWJsaW5nIHRoZSBjb25zb2xlIGJlZm9yZQpAQCAtNTAyLDggKzUyNCwxNiBAQAogCWNvbnNvbGVfaW5pdCgpOwogCWlmIChwYW5pY19sYXRlcikKIAkJcGFuaWMocGFuaWNfbGF0ZXIsIHBhbmljX3BhcmFtKTsKLQlwcm9maWxlX2luaXQoKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlsb2NrZGVwX2luZm8oKTsKKworCS8qCisJICogTmVlZCB0byBydW4gdGhpcyB3aGVuIGlycXMgYXJlIGVuYWJsZWQsIGJlY2F1c2UgaXQgd2FudHMKKwkgKiB0byBzZWxmLXRlc3QgW2hhcmQvc29mdF0taXJxcyBvbi9vZmYgbG9jayBpbnZlcnNpb24gYnVncworCSAqIHRvbzoKKwkgKi8KKwlsb2NraW5nX3NlbGZ0ZXN0KCk7CisKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAlpZiAoaW5pdHJkX3N0YXJ0ICYmICFpbml0cmRfYmVsb3dfc3RhcnRfb2sgJiYKIAkJCWluaXRyZF9zdGFydCA8IG1pbl9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpIHsKZGlmZiAtLWdpdCBhL2luaXQvdmVyc2lvbi5jIGIvaW5pdC92ZXJzaW9uLmMKaW5kZXggM2RkYzNjZS4uZTI5MDgwMiAxMDA2NDQKLS0tIGEvaW5pdC92ZXJzaW9uLmMKKysrIGIvaW5pdC92ZXJzaW9uLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91dHMuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2RlZmluZSB2ZXJzaW9uKGEpIFZlcnNpb25fICMjIGEKZGlmZiAtLWdpdCBhL2lwYy9jb21wYXQuYyBiL2lwYy9jb21wYXQuYwppbmRleCBhNTQ0ZGZiLi40ZDIwY2ZkIDEwMDY0NAotLS0gYS9pcGMvY29tcGF0LmMKKysrIGIvaXBjL2NvbXBhdC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvaXBjL21zZy5jIGIvaXBjL21zZy5jCmluZGV4IDAwZjAxNWEuLmNkOTJkMzQgMTAwNjQ0Ci0tLSBhL2lwYy9tc2cuYworKysgYi9pcGMvbXNnLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tc2cuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IGZjZTBiYzguLjYwMTNjNzUgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTY2LDcgKzY2LDYgQEAKICAqIER1c3RpbiBLaXJrbGFuZCA8ZHVzdGluLmtpcmtsYW5kQHVzLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCBmZTdhZTczLi45NDBiMGM5IDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBEdXN0aW4gS2lya2xhbmQgPGR1c3Rpbi5raXJrbGFuZEB1cy5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CmRpZmYgLS1naXQgYS9pcGMvdXRpbC5jIGIvaXBjL3V0aWwuYwppbmRleCA4MTkzMjk5Li42N2I2ZDE3IDEwMDY0NAotLS0gYS9pcGMvdXRpbC5jCisrKyBiL2lwYy91dGlsLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqICAgICAgICAgICAgRHVzdGluIEtpcmtsYW5kIDxkdXN0aW4ua2lya2xhbmRAdXMuaWJtLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggODJmYjE4Mi4uNDdkYmNkNSAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtOCwxMCArOCwxNSBAQAogCSAgICBzaWduYWwubyBzeXMubyBrbW9kLm8gd29ya3F1ZXVlLm8gcGlkLm8gXAogCSAgICByY3VwZGF0ZS5vIGV4dGFibGUubyBwYXJhbXMubyBwb3NpeC10aW1lcnMubyBcCiAJICAgIGt0aHJlYWQubyB3YWl0Lm8ga2ZpZm8ubyBzeXNfbmkubyBwb3NpeC1jcHUtdGltZXJzLm8gbXV0ZXgubyBcCi0JICAgIGhydGltZXIubworCSAgICBocnRpbWVyLm8gcndzZW0ubwogCitvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkgKz0gc3RhY2t0cmFjZS5vCiBvYmoteSArPSB0aW1lLwogb2JqLSQoQ09ORklHX0RFQlVHX01VVEVYRVMpICs9IG11dGV4LWRlYnVnLm8KK29iai0kKENPTkZJR19MT0NLREVQKSArPSBsb2NrZGVwLm8KK2lmZXEgKCQoQ09ORklHX1BST0NfRlMpLHkpCitvYmotJChDT05GSUdfTE9DS0RFUCkgKz0gbG9ja2RlcF9wcm9jLm8KK2VuZGlmCiBvYmotJChDT05GSUdfRlVURVgpICs9IGZ1dGV4Lm8KIGlmZXEgKCQoQ09ORklHX0NPTVBBVCkseSkKIG9iai0kKENPTkZJR19GVVRFWCkgKz0gZnV0ZXhfY29tcGF0Lm8KQEAgLTIyLDYgKzI3LDcgQEAKIG9iai0kKENPTkZJR19HRU5FUklDX0lTQV9ETUEpICs9IGRtYS5vCiBvYmotJChDT05GSUdfU01QKSArPSBjcHUubyBzcGlubG9jay5vCiBvYmotJChDT05GSUdfREVCVUdfU1BJTkxPQ0spICs9IHNwaW5sb2NrLm8KK29iai0kKENPTkZJR19QUk9WRV9MT0NLSU5HKSArPSBzcGlubG9jay5vCiBvYmotJChDT05GSUdfVUlEMTYpICs9IHVpZDE2Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBtb2R1bGUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKSArPSBrYWxsc3ltcy5vCmRpZmYgLS1naXQgYS9rZXJuZWwvYWNjdC5jIGIva2VybmVsL2FjY3QuYwppbmRleCAxMjZjYTQzLi5mMThlMGI4IDEwMDY0NAotLS0gYS9rZXJuZWwvYWNjdC5jCisrKyBiL2tlcm5lbC9hY2N0LmMKQEAgLTQzLDcgKzQzLDYgQEAKICAqIGEgc3RydWN0IGZpbGUgb3BlbmVkIGZvciB3cml0ZS4gRml4ZWQuIDIvNi8yMDAwLCBBVi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCA4MjQ0M2ZiLi5kNDE3Y2ExIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAgKiBDaGVjayBmb3IgYXBwcm9wcmlhdGUgQ0FQX0FVRElUXyBjYXBhYmlsaXRpZXMgb24gaW5jb21pbmcgYXVkaXQKICAqIGNvbnRyb2wgbWVzc2FnZXMuCiAgKi8KLXN0YXRpYyBpbnQgYXVkaXRfbmV0bGlua19vayhrZXJuZWxfY2FwX3QgZWZmX2NhcCwgdTE2IG1zZ190eXBlKQorc3RhdGljIGludCBhdWRpdF9uZXRsaW5rX29rKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtc2dfdHlwZSkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtNDU5LDEzICs0NTksMTMgQEAKIAljYXNlIEFVRElUX0RFTDoKIAljYXNlIEFVRElUX0RFTF9SVUxFOgogCWNhc2UgQVVESVRfU0lHTkFMX0lORk86Ci0JCWlmICghY2FwX3JhaXNlZChlZmZfY2FwLCBDQVBfQVVESVRfQ09OVFJPTCkpCisJCWlmIChzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfQVVESVRfQ09OVFJPTCkpCiAJCQllcnIgPSAtRVBFUk07CiAJCWJyZWFrOwogCWNhc2UgQVVESVRfVVNFUjoKIAljYXNlIEFVRElUX0ZJUlNUX1VTRVJfTVNHLi4uQVVESVRfTEFTVF9VU0VSX01TRzoKIAljYXNlIEFVRElUX0ZJUlNUX1VTRVJfTVNHMi4uLkFVRElUX0xBU1RfVVNFUl9NU0cyOgotCQlpZiAoIWNhcF9yYWlzZWQoZWZmX2NhcCwgQ0FQX0FVRElUX1dSSVRFKSkKKwkJaWYgKHNlY3VyaXR5X25ldGxpbmtfcmVjdihza2IsIENBUF9BVURJVF9XUklURSkpCiAJCQllcnIgPSAtRVBFUk07CiAJCWJyZWFrOwogCWRlZmF1bHQ6ICAvKiBiYWQgbXNnICovCkBAIC00ODgsNyArNDg4LDcgQEAKIAljaGFyCQkJKmN0eDsKIAl1MzIJCQlsZW47CiAKLQllcnIgPSBhdWRpdF9uZXRsaW5rX29rKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBtc2dfdHlwZSk7CisJZXJyID0gYXVkaXRfbmV0bGlua19vayhza2IsIG1zZ190eXBlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuaCBiL2tlcm5lbC9hdWRpdC5oCmluZGV4IDgzMjNlNDEuLjZhYTMzYjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5oCisrKyBiL2tlcm5lbC9hdWRpdC5oCkBAIC04MSw2ICs4MSw3IEBACiAJdTMyCQkJbWFza1tBVURJVF9CSVRNQVNLX1NJWkVdOwogCXUzMgkJCWJ1ZmxlbjsgLyogZm9yIGRhdGEgYWxsb2Mgb24gbGlzdCBydWxlcyAqLwogCXUzMgkJCWZpZWxkX2NvdW50OworCWNoYXIJCQkqZmlsdGVya2V5OyAvKiB0aWVzIGV2ZW50cyB0byBydWxlcyAqLwogCXN0cnVjdCBhdWRpdF9maWVsZAkqZmllbGRzOwogCXN0cnVjdCBhdWRpdF9maWVsZAkqaW5vZGVfZjsgLyogcXVpY2sgYWNjZXNzIHRvIGFuIGlub2RlIGZpZWxkICovCiAJc3RydWN0IGF1ZGl0X3dhdGNoCSp3YXRjaDsJLyogYXNzb2NpYXRlZCB3YXRjaCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwppbmRleCA0Yzk5ZDJjLi41YjRlMTYyIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYworKysgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwpAQCAtMTQxLDYgKzE0MSw3IEBACiAJCQlzZWxpbnV4X2F1ZGl0X3J1bGVfZnJlZShmLT5zZV9ydWxlKTsKIAkJfQogCWtmcmVlKGUtPnJ1bGUuZmllbGRzKTsKKwlrZnJlZShlLT5ydWxlLmZpbHRlcmtleSk7CiAJa2ZyZWUoZSk7CiB9CiAKQEAgLTI3OCw2ICsyNzksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIF9fdTMyICpjbGFzc2VzW0FVRElUX1NZU0NBTExfQ0xBU1NFU107CisKK2ludCBfX2luaXQgYXVkaXRfcmVnaXN0ZXJfY2xhc3MoaW50IGNsYXNzLCB1bnNpZ25lZCAqbGlzdCkKK3sKKwlfX3UzMiAqcCA9IGt6YWxsb2MoQVVESVRfQklUTUFTS19TSVpFICogc2l6ZW9mKF9fdTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKwl3aGlsZSAoKmxpc3QgIT0gfjBVKSB7CisJCXVuc2lnbmVkIG4gPSAqbGlzdCsrOworCQlpZiAobiA+PSBBVURJVF9CSVRNQVNLX1NJWkUgKiAzMiAtIEFVRElUX1NZU0NBTExfQ0xBU1NFUykgeworCQkJa2ZyZWUocCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlwW0FVRElUX1dPUkQobildIHw9IEFVRElUX0JJVChuKTsKKwl9CisJaWYgKGNsYXNzID49IEFVRElUX1NZU0NBTExfQ0xBU1NFUyB8fCBjbGFzc2VzW2NsYXNzXSkgeworCQlrZnJlZShwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNsYXNzZXNbY2xhc3NdID0gcDsKKwlyZXR1cm4gMDsKK30KKwogLyogQ29tbW9uIHVzZXItc3BhY2UgdG8ga2VybmVsIHJ1bGUgdHJhbnNsYXRpb24uICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfdG9fZW50cnlfY29tbW9uKHN0cnVjdCBhdWRpdF9ydWxlICpydWxlKQogewpAQCAtMzIxLDYgKzM0NSwyMiBAQAogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9CSVRNQVNLX1NJWkU7IGkrKykKIAkJZW50cnktPnJ1bGUubWFza1tpXSA9IHJ1bGUtPm1hc2tbaV07CiAKKwlmb3IgKGkgPSAwOyBpIDwgQVVESVRfU1lTQ0FMTF9DTEFTU0VTOyBpKyspIHsKKwkJaW50IGJpdCA9IEFVRElUX0JJVE1BU0tfU0laRSAqIDMyIC0gaSAtIDE7CisJCV9fdTMyICpwID0gJmVudHJ5LT5ydWxlLm1hc2tbQVVESVRfV09SRChiaXQpXTsKKwkJX191MzIgKmNsYXNzOworCisJCWlmICghKCpwICYgQVVESVRfQklUKGJpdCkpKQorCQkJY29udGludWU7CisJCSpwICY9IH5BVURJVF9CSVQoYml0KTsKKwkJY2xhc3MgPSBjbGFzc2VzW2ldOworCQlpZiAoY2xhc3MpIHsKKwkJCWludCBqOworCQkJZm9yIChqID0gMDsgaiA8IEFVRElUX0JJVE1BU0tfU0laRTsgaisrKQorCQkJCWVudHJ5LT5ydWxlLm1hc2tbal0gfD0gY2xhc3Nbal07CisJCX0KKwl9CisKIAlyZXR1cm4gZW50cnk7CiAKIGV4aXRfZXJyOgpAQCAtNDY5LDExICs1MDksMTYgQEAKIAkJY2FzZSBBVURJVF9BUkcyOgogCQljYXNlIEFVRElUX0FSRzM6CiAJCQlicmVhazsKLQkJY2FzZSBBVURJVF9TRV9VU0VSOgotCQljYXNlIEFVRElUX1NFX1JPTEU6Ci0JCWNhc2UgQVVESVRfU0VfVFlQRToKLQkJY2FzZSBBVURJVF9TRV9TRU46Ci0JCWNhc2UgQVVESVRfU0VfQ0xSOgorCQljYXNlIEFVRElUX1NVQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9TVUJKX1JPTEU6CisJCWNhc2UgQVVESVRfU1VCSl9UWVBFOgorCQljYXNlIEFVRElUX1NVQkpfU0VOOgorCQljYXNlIEFVRElUX1NVQkpfQ0xSOgorCQljYXNlIEFVRElUX09CSl9VU0VSOgorCQljYXNlIEFVRElUX09CSl9ST0xFOgorCQljYXNlIEFVRElUX09CSl9UWVBFOgorCQljYXNlIEFVRElUX09CSl9MRVZfTE9XOgorCQljYXNlIEFVRElUX09CSl9MRVZfSElHSDoKIAkJCXN0ciA9IGF1ZGl0X3VucGFja19zdHJpbmcoJmJ1ZnAsICZyZW1haW4sIGYtPnZhbCk7CiAJCQlpZiAoSVNfRVJSKHN0cikpCiAJCQkJZ290byBleGl0X2ZyZWU7CkBAIC01MTEsNiArNTU2LDE2IEBACiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXhpdF9mcmVlOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfRklMVEVSS0VZOgorCQkJZXJyID0gLUVJTlZBTDsKKwkJCWlmIChlbnRyeS0+cnVsZS5maWx0ZXJrZXkgfHwgZi0+dmFsID4gQVVESVRfTUFYX0tFWV9MRU4pCisJCQkJZ290byBleGl0X2ZyZWU7CisJCQlzdHIgPSBhdWRpdF91bnBhY2tfc3RyaW5nKCZidWZwLCAmcmVtYWluLCBmLT52YWwpOworCQkJaWYgKElTX0VSUihzdHIpKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJZW50cnktPnJ1bGUuYnVmbGVuICs9IGYtPnZhbDsKKwkJCWVudHJ5LT5ydWxlLmZpbHRlcmtleSA9IHN0cjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZ290byBleGl0X2ZyZWU7CiAJCX0KQEAgLTYwMCwxMSArNjU1LDE2IEBACiAJCWRhdGEtPmZpZWxkc1tpXSA9IGYtPnR5cGU7CiAJCWRhdGEtPmZpZWxkZmxhZ3NbaV0gPSBmLT5vcDsKIAkJc3dpdGNoKGYtPnR5cGUpIHsKLQkJY2FzZSBBVURJVF9TRV9VU0VSOgotCQljYXNlIEFVRElUX1NFX1JPTEU6Ci0JCWNhc2UgQVVESVRfU0VfVFlQRToKLQkJY2FzZSBBVURJVF9TRV9TRU46Ci0JCWNhc2UgQVVESVRfU0VfQ0xSOgorCQljYXNlIEFVRElUX1NVQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9TVUJKX1JPTEU6CisJCWNhc2UgQVVESVRfU1VCSl9UWVBFOgorCQljYXNlIEFVRElUX1NVQkpfU0VOOgorCQljYXNlIEFVRElUX1NVQkpfQ0xSOgorCQljYXNlIEFVRElUX09CSl9VU0VSOgorCQljYXNlIEFVRElUX09CSl9ST0xFOgorCQljYXNlIEFVRElUX09CSl9UWVBFOgorCQljYXNlIEFVRElUX09CSl9MRVZfTE9XOgorCQljYXNlIEFVRElUX09CSl9MRVZfSElHSDoKIAkJCWRhdGEtPmJ1ZmxlbiArPSBkYXRhLT52YWx1ZXNbaV0gPQogCQkJCWF1ZGl0X3BhY2tfc3RyaW5nKCZidWZwLCBmLT5zZV9zdHIpOwogCQkJYnJlYWs7CkBAIC02MTIsNiArNjcyLDEwIEBACiAJCQlkYXRhLT5idWZsZW4gKz0gZGF0YS0+dmFsdWVzW2ldID0KIAkJCQlhdWRpdF9wYWNrX3N0cmluZygmYnVmcCwga3J1bGUtPndhdGNoLT5wYXRoKTsKIAkJCWJyZWFrOworCQljYXNlIEFVRElUX0ZJTFRFUktFWToKKwkJCWRhdGEtPmJ1ZmxlbiArPSBkYXRhLT52YWx1ZXNbaV0gPQorCQkJCWF1ZGl0X3BhY2tfc3RyaW5nKCZidWZwLCBrcnVsZS0+ZmlsdGVya2V5KTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGF0YS0+dmFsdWVzW2ldID0gZi0+dmFsOwogCQl9CkBAIC02MzksMTEgKzcwMywxNiBAQAogCQkJcmV0dXJuIDE7CiAKIAkJc3dpdGNoKGEtPmZpZWxkc1tpXS50eXBlKSB7Ci0JCWNhc2UgQVVESVRfU0VfVVNFUjoKLQkJY2FzZSBBVURJVF9TRV9ST0xFOgotCQljYXNlIEFVRElUX1NFX1RZUEU6Ci0JCWNhc2UgQVVESVRfU0VfU0VOOgotCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJY2FzZSBBVURJVF9TVUJKX1VTRVI6CisJCWNhc2UgQVVESVRfU1VCSl9ST0xFOgorCQljYXNlIEFVRElUX1NVQkpfVFlQRToKKwkJY2FzZSBBVURJVF9TVUJKX1NFTjoKKwkJY2FzZSBBVURJVF9TVUJKX0NMUjoKKwkJY2FzZSBBVURJVF9PQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9PQkpfUk9MRToKKwkJY2FzZSBBVURJVF9PQkpfVFlQRToKKwkJY2FzZSBBVURJVF9PQkpfTEVWX0xPVzoKKwkJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6CiAJCQlpZiAoc3RyY21wKGEtPmZpZWxkc1tpXS5zZV9zdHIsIGItPmZpZWxkc1tpXS5zZV9zdHIpKQogCQkJCXJldHVybiAxOwogCQkJYnJlYWs7CkBAIC02NTEsNiArNzIwLDExIEBACiAJCQlpZiAoc3RyY21wKGEtPndhdGNoLT5wYXRoLCBiLT53YXRjaC0+cGF0aCkpCiAJCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9GSUxURVJLRVk6CisJCQkvKiBib3RoIGZpbHRlcmtleXMgZXhpc3QgYmFzZWQgb24gYWJvdmUgdHlwZSBjb21wYXJlICovCisJCQlpZiAoc3RyY21wKGEtPmZpbHRlcmtleSwgYi0+ZmlsdGVya2V5KSkKKwkJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGEtPmZpZWxkc1tpXS52YWwgIT0gYi0+ZmllbGRzW2ldLnZhbCkKIAkJCQlyZXR1cm4gMTsKQEAgLTczMCw2ICs4MDQsNyBAQAogCXUzMiBmY291bnQgPSBvbGQtPmZpZWxkX2NvdW50OwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CiAJc3RydWN0IGF1ZGl0X2tydWxlICpuZXc7CisJY2hhciAqZms7CiAJaW50IGksIGVyciA9IDA7CiAKIAllbnRyeSA9IGF1ZGl0X2luaXRfZW50cnkoZmNvdW50KTsKQEAgLTc1MywxMyArODI4LDI1IEBACiAJICogdGhlIG9yaWdpbmFscyB3aWxsIGFsbCBiZSBmcmVlZCB3aGVuIHRoZSBvbGQgcnVsZSBpcyBmcmVlZC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgZmNvdW50OyBpKyspIHsKIAkJc3dpdGNoIChuZXctPmZpZWxkc1tpXS50eXBlKSB7Ci0JCWNhc2UgQVVESVRfU0VfVVNFUjoKLQkJY2FzZSBBVURJVF9TRV9ST0xFOgotCQljYXNlIEFVRElUX1NFX1RZUEU6Ci0JCWNhc2UgQVVESVRfU0VfU0VOOgotCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJY2FzZSBBVURJVF9TVUJKX1VTRVI6CisJCWNhc2UgQVVESVRfU1VCSl9ST0xFOgorCQljYXNlIEFVRElUX1NVQkpfVFlQRToKKwkJY2FzZSBBVURJVF9TVUJKX1NFTjoKKwkJY2FzZSBBVURJVF9TVUJKX0NMUjoKKwkJY2FzZSBBVURJVF9PQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9PQkpfUk9MRToKKwkJY2FzZSBBVURJVF9PQkpfVFlQRToKKwkJY2FzZSBBVURJVF9PQkpfTEVWX0xPVzoKKwkJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6CiAJCQllcnIgPSBhdWRpdF9kdXBlX3NlbGludXhfZmllbGQoJm5ldy0+ZmllbGRzW2ldLAogCQkJCQkJICAgICAgICZvbGQtPmZpZWxkc1tpXSk7CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9GSUxURVJLRVk6CisJCQlmayA9IGtzdHJkdXAob2xkLT5maWx0ZXJrZXksIEdGUF9LRVJORUwpOworCQkJaWYgKHVubGlrZWx5KCFmaykpCisJCQkJZXJyID0gLUVOT01FTTsKKwkJCWVsc2UKKwkJCQluZXctPmZpbHRlcmtleSA9IGZrOwogCQl9CiAJCWlmIChlcnIpIHsKIAkJCWF1ZGl0X2ZyZWVfcnVsZShlbnRyeSk7CkBAIC0xMjQ1LDYgKzEzMzIsMzQgQEAKIAkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKIH0KIAorLyogTG9nIHJ1bGUgYWRkaXRpb25zIGFuZCByZW1vdmFscyAqLworc3RhdGljIHZvaWQgYXVkaXRfbG9nX3J1bGVfY2hhbmdlKHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkLCBjaGFyICphY3Rpb24sCisJCQkJICBzdHJ1Y3QgYXVkaXRfa3J1bGUgKnJ1bGUsIGludCByZXMpCit7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisKKwlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFKTsKKwlpZiAoIWFiKQorCQlyZXR1cm47CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImF1aWQ9JXUiLCBsb2dpbnVpZCk7CisJaWYgKHNpZCkgeworCQljaGFyICpjdHggPSBOVUxMOworCQl1MzIgbGVuOworCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc3NpZD0ldSIsIHNpZCk7CisJCWVsc2UKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc3Viaj0lcyIsIGN0eCk7CisJCWtmcmVlKGN0eCk7CisJfQorCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgJXMgcnVsZSBrZXk9IiwgYWN0aW9uKTsKKwlpZiAocnVsZS0+ZmlsdGVya2V5KQorCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBydWxlLT5maWx0ZXJrZXkpOworCWVsc2UKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIihudWxsKSIpOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbGlzdD0lZCByZXM9JWQiLCBydWxlLT5saXN0bnIsIHJlcyk7CisJYXVkaXRfbG9nX2VuZChhYik7Cit9CisKIC8qKgogICogYXVkaXRfcmVjZWl2ZV9maWx0ZXIgLSBhcHBseSBhbGwgcnVsZXMgdG8gdGhlIHNwZWNpZmllZCBtZXNzYWdlIHR5cGUKICAqIEB0eXBlOiBhdWRpdCBtZXNzYWdlIHR5cGUKQEAgLTEzMDQsMjQgKzE0MTksNyBAQAogCiAJCWVyciA9IGF1ZGl0X2FkZF9ydWxlKGVudHJ5LAogCQkJCSAgICAgJmF1ZGl0X2ZpbHRlcl9saXN0W2VudHJ5LT5ydWxlLmxpc3Rucl0pOwotCi0JCWlmIChzaWQpIHsKLQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQl1MzIgbGVuOwotCQkJaWYgKHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpIHsKLQkJCQkvKiBNYXliZSBjYWxsIGF1ZGl0X3BhbmljPyAqLwotCQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJCSAiYXVpZD0ldSBzc2lkPSV1IGFkZCBydWxlIHRvIGxpc3Q9JWQgcmVzPSVkIiwKLQkJCQkgbG9naW51aWQsIHNpZCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKLQkJCX0gZWxzZQotCQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJCSAiYXVpZD0ldSBzdWJqPSVzIGFkZCBydWxlIHRvIGxpc3Q9JWQgcmVzPSVkIiwKLQkJCQkgbG9naW51aWQsIGN0eCwgZW50cnktPnJ1bGUubGlzdG5yLCAhZXJyKTsKLQkJCWtmcmVlKGN0eCk7Ci0JCX0gZWxzZQotCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkJImF1aWQ9JXUgYWRkIHJ1bGUgdG8gbGlzdD0lZCByZXM9JWQiLAotCQkJCWxvZ2ludWlkLCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQlhdWRpdF9sb2dfcnVsZV9jaGFuZ2UobG9naW51aWQsIHNpZCwgImFkZCIsICZlbnRyeS0+cnVsZSwgIWVycik7CiAKIAkJaWYgKGVycikKIAkJCWF1ZGl0X2ZyZWVfcnVsZShlbnRyeSk7CkBAIC0xMzM3LDI0ICsxNDM1LDggQEAKIAogCQllcnIgPSBhdWRpdF9kZWxfcnVsZShlbnRyeSwKIAkJCQkgICAgICZhdWRpdF9maWx0ZXJfbGlzdFtlbnRyeS0+cnVsZS5saXN0bnJdKTsKLQotCQlpZiAoc2lkKSB7Ci0JCQljaGFyICpjdHggPSBOVUxMOwotCQkJdTMyIGxlbjsKLQkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSB7Ci0JCQkJLyogTWF5YmUgY2FsbCBhdWRpdF9wYW5pYz8gKi8KLQkJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKLQkJCQkJImF1aWQ9JXUgc3NpZD0ldSByZW1vdmUgcnVsZSBmcm9tIGxpc3Q9JWQgcmVzPSVkIiwKLQkJCQkJIGxvZ2ludWlkLCBzaWQsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7Ci0JCQl9IGVsc2UKLQkJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKLQkJCQkJImF1aWQ9JXUgc3Viaj0lcyByZW1vdmUgcnVsZSBmcm9tIGxpc3Q9JWQgcmVzPSVkIiwKLQkJCQkJIGxvZ2ludWlkLCBjdHgsIGVudHJ5LT5ydWxlLmxpc3RuciwgIWVycik7Ci0JCQlrZnJlZShjdHgpOwotCQl9IGVsc2UKLQkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJCSJhdWlkPSV1IHJlbW92ZSBydWxlIGZyb20gbGlzdD0lZCByZXM9JWQiLAotCQkJCWxvZ2ludWlkLCBlbnRyeS0+cnVsZS5saXN0bnIsICFlcnIpOworCQlhdWRpdF9sb2dfcnVsZV9jaGFuZ2UobG9naW51aWQsIHNpZCwgInJlbW92ZSIsICZlbnRyeS0+cnVsZSwKKwkJCQkgICAgICAhZXJyKTsKIAogCQlhdWRpdF9mcmVlX3J1bGUoZW50cnkpOwogCQlicmVhazsKQEAgLTE1MTQsMTEgKzE1OTYsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcnVsZS0+ZmllbGRfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmcnVsZS0+ZmllbGRzW2ldOwogCQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQkJY2FzZSBBVURJVF9TRV9VU0VSOgotCQljYXNlIEFVRElUX1NFX1JPTEU6Ci0JCWNhc2UgQVVESVRfU0VfVFlQRToKLQkJY2FzZSBBVURJVF9TRV9TRU46Ci0JCWNhc2UgQVVESVRfU0VfQ0xSOgorCQljYXNlIEFVRElUX1NVQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9TVUJKX1JPTEU6CisJCWNhc2UgQVVESVRfU1VCSl9UWVBFOgorCQljYXNlIEFVRElUX1NVQkpfU0VOOgorCQljYXNlIEFVRElUX1NVQkpfQ0xSOgorCQljYXNlIEFVRElUX09CSl9VU0VSOgorCQljYXNlIEFVRElUX09CSl9ST0xFOgorCQljYXNlIEFVRElUX09CSl9UWVBFOgorCQljYXNlIEFVRElUX09CSl9MRVZfTE9XOgorCQljYXNlIEFVRElUX09CSl9MRVZfSElHSDoKIAkJCXJldHVybiAxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggZGM1ZTNmMC4uYWU0MGFjOCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xODYsNiArMTg2LDcgQEAKIAlpbnQJCSAgICBhdWRpdGFibGU7ICAvKiAxIGlmIHJlY29yZCBzaG91bGQgYmUgd3JpdHRlbiAqLwogCWludAkJICAgIG5hbWVfY291bnQ7CiAJc3RydWN0IGF1ZGl0X25hbWVzICBuYW1lc1tBVURJVF9OQU1FU107CisJY2hhciAqCQkgICAgZmlsdGVya2V5OwkvKiBrZXkgZm9yIHJ1bGUgdGhhdCB0cmlnZ2VyZWQgcmVjb3JkICovCiAJc3RydWN0IGRlbnRyeSAqCSAgICBwd2Q7CiAJc3RydWN0IHZmc21vdW50ICogICBwd2RtbnQ7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKnByZXZpb3VzOyAvKiBGb3IgbmVzdGVkIHN5c2NhbGxzICovCkBAIC0zMjAsMTEgKzMyMSwxMSBAQAogCQkJaWYgKGN0eCkKIAkJCQlyZXN1bHQgPSBhdWRpdF9jb21wYXJhdG9yKGN0eC0+bG9naW51aWQsIGYtPm9wLCBmLT52YWwpOwogCQkJYnJlYWs7Ci0JCWNhc2UgQVVESVRfU0VfVVNFUjoKLQkJY2FzZSBBVURJVF9TRV9ST0xFOgotCQljYXNlIEFVRElUX1NFX1RZUEU6Ci0JCWNhc2UgQVVESVRfU0VfU0VOOgotCQljYXNlIEFVRElUX1NFX0NMUjoKKwkJY2FzZSBBVURJVF9TVUJKX1VTRVI6CisJCWNhc2UgQVVESVRfU1VCSl9ST0xFOgorCQljYXNlIEFVRElUX1NVQkpfVFlQRToKKwkJY2FzZSBBVURJVF9TVUJKX1NFTjoKKwkJY2FzZSBBVURJVF9TVUJKX0NMUjoKIAkJCS8qIE5PVEU6IHRoaXMgbWF5IHJldHVybiBuZWdhdGl2ZSB2YWx1ZXMgaW5kaWNhdGluZwogCQkJICAgYSB0ZW1wb3JhcnkgZXJyb3IuICBXZSBzaW1wbHkgdHJlYXQgdGhpcyBhcyBhCiAJCQkgICBtYXRjaCBmb3Igbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbiB0aGF0CkBAIC0zNDEsNiArMzQyLDQ2IEBACiAJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCk7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9PQkpfVVNFUjoKKwkJY2FzZSBBVURJVF9PQkpfUk9MRToKKwkJY2FzZSBBVURJVF9PQkpfVFlQRToKKwkJY2FzZSBBVURJVF9PQkpfTEVWX0xPVzoKKwkJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6CisJCQkvKiBUaGUgYWJvdmUgbm90ZSBmb3IgQVVESVRfU1VCSl9VU0VSLi4uQVVESVRfU1VCSl9DTFIKKwkJCSAgIGFsc28gYXBwbGllcyBoZXJlICovCisJCQlpZiAoZi0+c2VfcnVsZSkgeworCQkJCS8qIEZpbmQgZmlsZXMgdGhhdCBtYXRjaCAqLworCQkJCWlmIChuYW1lKSB7CisJCQkJCXJlc3VsdCA9IHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaCgKKwkJCQkJICAgICAgICAgICBuYW1lLT5vc2lkLCBmLT50eXBlLCBmLT5vcCwKKwkJCQkJICAgICAgICAgICBmLT5zZV9ydWxlLCBjdHgpOworCQkJCX0gZWxzZSBpZiAoY3R4KSB7CisJCQkJCWZvciAoaiA9IDA7IGogPCBjdHgtPm5hbWVfY291bnQ7IGorKykgeworCQkJCQkJaWYgKHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaCgKKwkJCQkJCSAgICAgIGN0eC0+bmFtZXNbal0ub3NpZCwKKwkJCQkJCSAgICAgIGYtPnR5cGUsIGYtPm9wLAorCQkJCQkJICAgICAgZi0+c2VfcnVsZSwgY3R4KSkgeworCQkJCQkJCSsrcmVzdWx0OworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCS8qIEZpbmQgaXBjIG9iamVjdHMgdGhhdCBtYXRjaCAqLworCQkJCWlmIChjdHgpIHsKKwkJCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhICphdXg7CisJCQkJCWZvciAoYXV4ID0gY3R4LT5hdXg7IGF1eDsKKwkJCQkJICAgICBhdXggPSBhdXgtPm5leHQpIHsKKwkJCQkJCWlmIChhdXgtPnR5cGUgPT0gQVVESVRfSVBDKSB7CisJCQkJCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7CisJCQkJCQkJaWYgKHNlbGludXhfYXVkaXRfcnVsZV9tYXRjaChheGktPm9zaWQsIGYtPnR5cGUsIGYtPm9wLCBmLT5zZV9ydWxlLCBjdHgpKSB7CisJCQkJCQkJCSsrcmVzdWx0OworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBBVURJVF9BUkcwOgogCQljYXNlIEFVRElUX0FSRzE6CiAJCWNhc2UgQVVESVRfQVJHMjoKQEAgLTM0OCwxMSArMzg5LDE3IEBACiAJCQlpZiAoY3R4KQogCQkJCXJlc3VsdCA9IGF1ZGl0X2NvbXBhcmF0b3IoY3R4LT5hcmd2W2YtPnR5cGUtQVVESVRfQVJHMF0sIGYtPm9wLCBmLT52YWwpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfRklMVEVSS0VZOgorCQkJLyogaWdub3JlIHRoaXMgZmllbGQgZm9yIGZpbHRlcmluZyAqLworCQkJcmVzdWx0ID0gMTsKKwkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKCFyZXN1bHQpCiAJCQlyZXR1cm4gMDsKIAl9CisJaWYgKHJ1bGUtPmZpbHRlcmtleSkKKwkJY3R4LT5maWx0ZXJrZXkgPSBrc3RyZHVwKHJ1bGUtPmZpbHRlcmtleSwgR0ZQX0FUT01JQyk7CiAJc3dpdGNoIChydWxlLT5hY3Rpb24pIHsKIAljYXNlIEFVRElUX05FVkVSOiAgICAqc3RhdGUgPSBBVURJVF9ESVNBQkxFRDsJICAgIGJyZWFrOwogCWNhc2UgQVVESVRfQUxXQVlTOiAgICpzdGF0ZSA9IEFVRElUX1JFQ09SRF9DT05URVhUOyBicmVhazsKQEAgLTYyNyw2ICs2NzQsNyBAQAogCQl9CiAJCWF1ZGl0X2ZyZWVfbmFtZXMoY29udGV4dCk7CiAJCWF1ZGl0X2ZyZWVfYXV4KGNvbnRleHQpOworCQlrZnJlZShjb250ZXh0LT5maWx0ZXJrZXkpOwogCQlrZnJlZShjb250ZXh0KTsKIAkJY29udGV4dCAgPSBwcmV2aW91czsKIAl9IHdoaWxlIChjb250ZXh0KTsKQEAgLTczNSw2ICs3ODMsMTEgQEAKIAkJICBjb250ZXh0LT5ldWlkLCBjb250ZXh0LT5zdWlkLCBjb250ZXh0LT5mc3VpZCwKIAkJICBjb250ZXh0LT5lZ2lkLCBjb250ZXh0LT5zZ2lkLCBjb250ZXh0LT5mc2dpZCwgdHR5KTsKIAlhdWRpdF9sb2dfdGFza19pbmZvKGFiLCB0c2spOworCWlmIChjb250ZXh0LT5maWx0ZXJrZXkpIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBrZXk9Iik7CisJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGNvbnRleHQtPmZpbHRlcmtleSk7CisJfSBlbHNlCisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIga2V5PShudWxsKSIpOwogCWF1ZGl0X2xvZ19lbmQoYWIpOwogCiAJZm9yIChhdXggPSBjb250ZXh0LT5hdXg7IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7CkBAIC0xMDYwLDYgKzExMTMsOCBAQAogCX0gZWxzZSB7CiAJCWF1ZGl0X2ZyZWVfbmFtZXMoY29udGV4dCk7CiAJCWF1ZGl0X2ZyZWVfYXV4KGNvbnRleHQpOworCQlrZnJlZShjb250ZXh0LT5maWx0ZXJrZXkpOworCQljb250ZXh0LT5maWx0ZXJrZXkgPSBOVUxMOwogCQl0c2stPmF1ZGl0X2NvbnRleHQgPSBjb250ZXh0OwogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCmluZGV4IDFhNGQ4YTQuLmM3Njg1YWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jYXBhYmlsaXR5LmMKKysrIGIva2VybmVsL2NhcGFiaWxpdHkuYwpAQCAtNDYsNyArNDYsNyBAQAogICAgICBpbnQgcmV0ID0gMDsKICAgICAgcGlkX3QgcGlkOwogICAgICBfX3UzMiB2ZXJzaW9uOwotICAgICB0YXNrX3QgKnRhcmdldDsKKyAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQ7CiAgICAgIHN0cnVjdCBfX3VzZXJfY2FwX2RhdGFfc3RydWN0IGRhdGE7CiAKICAgICAgaWYgKGdldF91c2VyKHZlcnNpb24sICZoZWFkZXItPnZlcnNpb24pKQpAQCAtOTYsNyArOTYsNyBAQAogCQkJICAgICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKIAkJCSAgICAgIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQogewotCXRhc2tfdCAqZywgKnRhcmdldDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0YXJnZXQ7CiAJaW50IHJldCA9IC1FUEVSTTsKIAlpbnQgZm91bmQgPSAwOwogCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCSAgICAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAogCQkJICAgICAgIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQogewotICAgICB0YXNrX3QgKmcsICp0YXJnZXQ7CisgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnRhcmdldDsKICAgICAgaW50IHJldCA9IC1FUEVSTTsKICAgICAgaW50IGZvdW5kID0gMDsKIApAQCAtMTcyLDcgKzE3Miw3IEBACiB7CiAgICAgIGtlcm5lbF9jYXBfdCBpbmhlcml0YWJsZSwgcGVybWl0dGVkLCBlZmZlY3RpdmU7CiAgICAgIF9fdTMyIHZlcnNpb247Ci0gICAgIHRhc2tfdCAqdGFyZ2V0OworICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldDsKICAgICAgaW50IHJldDsKICAgICAgcGlkX3QgcGlkOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvY29uZmlncy5jIGIva2VybmVsL2NvbmZpZ3MuYwppbmRleCAwMDllMWViLi5mOWUzMTk3IDEwMDY0NAotLS0gYS9rZXJuZWwvY29uZmlncy5jCisrKyBiL2tlcm5lbC9jb25maWdzLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMTUzNWFmMy4uYzIzMmRjMCAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTgsNyArMTgsNiBAQAogICogIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CkBAIC0xMDY0LDcgKzEwNjMsNyBAQAogfQogCiAvKgotICogRnJlcXVlbmN5IG1ldGVyIC0gSG93IGZhc3QgaXMgc29tZSBldmVudCBvY2N1cmluZz8KKyAqIEZyZXF1ZW5jeSBtZXRlciAtIEhvdyBmYXN0IGlzIHNvbWUgZXZlbnQgb2NjdXJyaW5nPwogICoKICAqIFRoZXNlIHJvdXRpbmVzIG1hbmFnZSBhIGRpZ2l0YWxseSBmaWx0ZXJlZCwgY29uc3RhbnQgdGltZSBiYXNlZCwKICAqIGV2ZW50IGZyZXF1ZW5jeSBtZXRlci4gIFRoZXJlIGFyZSBmb3VyIHJvdXRpbmVzOgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4ZWNfZG9tYWluLmMgYi9rZXJuZWwvZXhlY19kb21haW4uYwppbmRleCBjMDFjZWFkLi4zYzJlYWVhIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhlY19kb21haW4uYworKysgYi9rZXJuZWwvZXhlY19kb21haW4uYwpAQCAtNyw3ICs3LDYgQEAKICAqIDIwMDEtMDUtMDYJQ29tcGxldGUgcmV3cml0ZSwgIENocmlzdG9waCBIZWxsd2lnIChoY2hAaW5mcmFkZWFkLm9yZykKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGFiMDZiOWYuLjY2NjRjMDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNCw3ICs0LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMTM1LDggKzEzNCw4IEBACiAKIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7CiAJaW50IHphcF9sZWFkZXI7Ci0JdGFza190ICpsZWFkZXI7CiByZXBlYXQ6CiAJYXRvbWljX2RlYygmcC0+dXNlci0+cHJvY2Vzc2VzKTsKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CkBAIC0yMTAsNyArMjA5LDcgQEAKICAqCiAgKiAiSSBhc2sgeW91LCBoYXZlIHlvdSBldmVyIGtub3duIHdoYXQgaXQgaXMgdG8gYmUgYW4gb3JwaGFuPyIKICAqLwotc3RhdGljIGludCB3aWxsX2JlY29tZV9vcnBoYW5lZF9wZ3JwKGludCBwZ3JwLCB0YXNrX3QgKmlnbm9yZWRfdGFzaykKK3N0YXRpYyBpbnQgd2lsbF9iZWNvbWVfb3JwaGFuZWRfcGdycChpbnQgcGdycCwgc3RydWN0IHRhc2tfc3RydWN0ICppZ25vcmVkX3Rhc2spCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXQgPSAxOwpAQCAtNTgzLDcgKzU4Miw4IEBACiAJbW1wdXQobW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hvb3NlX25ld19wYXJlbnQodGFza190ICpwLCB0YXNrX3QgKnJlYXBlcikKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2hvb3NlX25ld19wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlYXBlcikKIHsKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVwYXJlbnRpbmcgdG8gb3Vyc2VsdmVzIGFuZCB0aGF0CkBAIC01OTMsNyArNTkzLDggQEAKIAlwLT5yZWFsX3BhcmVudCA9IHJlYXBlcjsKIH0KIAotc3RhdGljIHZvaWQgcmVwYXJlbnRfdGhyZWFkKHRhc2tfdCAqcCwgdGFza190ICpmYXRoZXIsIGludCB0cmFjZWQpCitzdGF0aWMgdm9pZAorcmVwYXJlbnRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsIGludCB0cmFjZWQpCiB7CiAJLyogV2UgZG9uJ3Qgd2FudCBwZW9wbGUgc2xheWluZyBpbml0LiAgKi8KIAlpZiAocC0+ZXhpdF9zaWduYWwgIT0gLTEpCkBAIC02NTcsOCArNjU4LDggQEAKICAqIGdyb3VwLCBhbmQgaWYgbm8gc3VjaCBtZW1iZXIgZXhpc3RzLCBnaXZlIGl0IHRvCiAgKiB0aGUgZ2xvYmFsIGNoaWxkIHJlYXBlciBwcm9jZXNzIChpZSAiaW5pdCIpCiAgKi8KLXN0YXRpYyB2b2lkIGZvcmdldF9vcmlnaW5hbF9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICogZmF0aGVyLAotCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnRvX3JlbGVhc2UpCitzdGF0aWMgdm9pZAorZm9yZ2V0X29yaWdpbmFsX3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlciwgc3RydWN0IGxpc3RfaGVhZCAqdG9fcmVsZWFzZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpyZWFwZXIgPSBmYXRoZXI7CiAJc3RydWN0IGxpc3RfaGVhZCAqX3AsICpfbjsKQEAgLTY4MSw3ICs2ODIsNyBAQAogCSAqLwogCWxpc3RfZm9yX2VhY2hfc2FmZShfcCwgX24sICZmYXRoZXItPmNoaWxkcmVuKSB7CiAJCWludCBwdHJhY2U7Ci0JCXAgPSBsaXN0X2VudHJ5KF9wLHN0cnVjdCB0YXNrX3N0cnVjdCxzaWJsaW5nKTsKKwkJcCA9IGxpc3RfZW50cnkoX3AsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2libGluZyk7CiAKIAkJcHRyYWNlID0gcC0+cHRyYWNlOwogCkBAIC03MTAsNyArNzExLDcgQEAKIAkJCWxpc3RfYWRkKCZwLT5wdHJhY2VfbGlzdCwgdG9fcmVsZWFzZSk7CiAJfQogCWxpc3RfZm9yX2VhY2hfc2FmZShfcCwgX24sICZmYXRoZXItPnB0cmFjZV9jaGlsZHJlbikgewotCQlwID0gbGlzdF9lbnRyeShfcCxzdHJ1Y3QgdGFza19zdHJ1Y3QscHRyYWNlX2xpc3QpOworCQlwID0gbGlzdF9lbnRyeShfcCwgc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2VfbGlzdCk7CiAJCWNob29zZV9uZXdfcGFyZW50KHAsIHJlYXBlcik7CiAJCXJlcGFyZW50X3RocmVhZChwLCBmYXRoZXIsIDEpOwogCX0KQEAgLTgzMCw3ICs4MzEsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKF9wLCBfbiwgJnB0cmFjZV9kZWFkKSB7CiAJCWxpc3RfZGVsX2luaXQoX3ApOwotCQl0ID0gbGlzdF9lbnRyeShfcCxzdHJ1Y3QgdGFza19zdHJ1Y3QscHRyYWNlX2xpc3QpOworCQl0ID0gbGlzdF9lbnRyeShfcCwgc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2VfbGlzdCk7CiAJCXJlbGVhc2VfdGFzayh0KTsKIAl9CiAKQEAgLTkzNCwxMCArOTM1LDkgQEAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+cGlfc3RhdGVfY2FjaGUpKQogCQlrZnJlZShjdXJyZW50LT5waV9zdGF0ZV9jYWNoZSk7CiAJLyoKLQkgKiBJZiBERUJVR19NVVRFWEVTIGlzIG9uLCBtYWtlIHN1cmUgd2UgYXJlIGhvbGRpbmcgbm8gbG9ja3M6CisJICogTWFrZSBzdXJlIHdlIGFyZSBob2xkaW5nIG5vIGxvY2tzOgogCSAqLwotCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQodHNrKTsKLQlydF9tdXRleF9kZWJ1Z19jaGVja19ub19sb2Nrc19oZWxkKHRzayk7CisJZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZCh0c2spOwogCiAJaWYgKHRzay0+aW9fY29udGV4dCkKIAkJZXhpdF9pb19jb250ZXh0KCk7CkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCWRvX2dyb3VwX2V4aXQoKGVycm9yX2NvZGUgJiAweGZmKSA8PCA4KTsKIH0KIAotc3RhdGljIGludCBlbGlnaWJsZV9jaGlsZChwaWRfdCBwaWQsIGludCBvcHRpb25zLCB0YXNrX3QgKnApCitzdGF0aWMgaW50IGVsaWdpYmxlX2NoaWxkKHBpZF90IHBpZCwgaW50IG9wdGlvbnMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpZiAocGlkID4gMCkgewogCQlpZiAocC0+cGlkICE9IHBpZCkKQEAgLTEwNTMsMTIgKzEwNTMsMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB3YWl0X25vcmVhcF9jb3B5b3V0KHRhc2tfdCAqcCwgcGlkX3QgcGlkLCB1aWRfdCB1aWQsCitzdGF0aWMgaW50IHdhaXRfbm9yZWFwX2NvcHlvdXQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBwaWRfdCBwaWQsIHVpZF90IHVpZCwKIAkJCSAgICAgICBpbnQgd2h5LCBpbnQgc3RhdHVzLAogCQkJICAgICAgIHN0cnVjdCBzaWdpbmZvIF9fdXNlciAqaW5mb3AsCiAJCQkgICAgICAgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1c2FnZXApCiB7CiAJaW50IHJldHZhbCA9IHJ1c2FnZXAgPyBnZXRydXNhZ2UocCwgUlVTQUdFX0JPVEgsIHJ1c2FnZXApIDogMDsKKwogCXB1dF90YXNrX3N0cnVjdChwKTsKIAlpZiAoIXJldHZhbCkKIAkJcmV0dmFsID0gcHV0X3VzZXIoU0lHQ0hMRCwgJmluZm9wLT5zaV9zaWdubyk7CkBAIC0xMDgzLDcgKzEwODQsNyBAQAogICogdGhlIGxvY2sgYW5kIHRoaXMgdGFzayBpcyB1bmludGVyZXN0aW5nLiAgSWYgd2UgcmV0dXJuIG5vbnplcm8sIHdlIGhhdmUKICAqIHJlbGVhc2VkIHRoZSBsb2NrIGFuZCB0aGUgc3lzdGVtIGNhbGwgc2hvdWxkIHJldHVybi4KICAqLwotc3RhdGljIGludCB3YWl0X3Rhc2tfem9tYmllKHRhc2tfdCAqcCwgaW50IG5vcmVhcCwKK3N0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBub3JlYXAsCiAJCQkgICAgc3RydWN0IHNpZ2luZm8gX191c2VyICppbmZvcCwKIAkJCSAgICBpbnQgX191c2VyICpzdGF0X2FkZHIsIHN0cnVjdCBydXNhZ2UgX191c2VyICpydSkKIHsKQEAgLTEyNDUsOCArMTI0Niw4IEBACiAgKiB0aGUgbG9jayBhbmQgdGhpcyB0YXNrIGlzIHVuaW50ZXJlc3RpbmcuICBJZiB3ZSByZXR1cm4gbm9uemVybywgd2UgaGF2ZQogICogcmVsZWFzZWQgdGhlIGxvY2sgYW5kIHRoZSBzeXN0ZW0gY2FsbCBzaG91bGQgcmV0dXJuLgogICovCi1zdGF0aWMgaW50IHdhaXRfdGFza19zdG9wcGVkKHRhc2tfdCAqcCwgaW50IGRlbGF5ZWRfZ3JvdXBfbGVhZGVyLCBpbnQgbm9yZWFwLAotCQkJICAgICBzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKmluZm9wLAorc3RhdGljIGludCB3YWl0X3Rhc2tfc3RvcHBlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBkZWxheWVkX2dyb3VwX2xlYWRlciwKKwkJCSAgICAgaW50IG5vcmVhcCwgc3RydWN0IHNpZ2luZm8gX191c2VyICppbmZvcCwKIAkJCSAgICAgaW50IF9fdXNlciAqc3RhdF9hZGRyLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpCiB7CiAJaW50IHJldHZhbCwgZXhpdF9jb2RlOwpAQCAtMTM2MCw3ICsxMzYxLDcgQEAKICAqIHRoZSBsb2NrIGFuZCB0aGlzIHRhc2sgaXMgdW5pbnRlcmVzdGluZy4gIElmIHdlIHJldHVybiBub256ZXJvLCB3ZSBoYXZlCiAgKiByZWxlYXNlZCB0aGUgbG9jayBhbmQgdGhlIHN5c3RlbSBjYWxsIHNob3VsZCByZXR1cm4uCiAgKi8KLXN0YXRpYyBpbnQgd2FpdF90YXNrX2NvbnRpbnVlZCh0YXNrX3QgKnAsIGludCBub3JlYXAsCitzdGF0aWMgaW50IHdhaXRfdGFza19jb250aW51ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbm9yZWFwLAogCQkJICAgICAgIHN0cnVjdCBzaWdpbmZvIF9fdXNlciAqaW5mb3AsCiAJCQkgICAgICAgaW50IF9fdXNlciAqc3RhdF9hZGRyLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpCiB7CkBAIC0xNDQ2LDcgKzE0NDcsNyBAQAogCQlpbnQgcmV0OwogCiAJCWxpc3RfZm9yX2VhY2goX3AsJnRzay0+Y2hpbGRyZW4pIHsKLQkJCXAgPSBsaXN0X2VudHJ5KF9wLHN0cnVjdCB0YXNrX3N0cnVjdCxzaWJsaW5nKTsKKwkJCXAgPSBsaXN0X2VudHJ5KF9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNpYmxpbmcpOwogCiAJCQlyZXQgPSBlbGlnaWJsZV9jaGlsZChwaWQsIG9wdGlvbnMsIHApOwogCQkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA2MjgxOThhLi41NmU0ZTA3IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIG1hbmFnZW1lbnQgY2FuIGJlIGEgYml0Y2guIFNlZSAnbW0vbWVtb3J5LmMnOiAnY29weV9wYWdlX3JhbmdlKCknCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CkBAIC0xOTQsNyArMTkzLDEwIEBACiAKIAlkb3duX3dyaXRlKCZvbGRtbS0+bW1hcF9zZW0pOwogCWZsdXNoX2NhY2hlX21tKG9sZG1tKTsKLQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCS8qCisJICogTm90IGxpbmtlZCBpbiB5ZXQgLSBubyBkZWFkbG9jayBwb3RlbnRpYWw6CisJICovCisJZG93bl93cml0ZV9uZXN0ZWQoJm1tLT5tbWFwX3NlbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJbW0tPmxvY2tlZF92bSA9IDA7CiAJbW0tPm1tYXAgPSBOVUxMOwpAQCAtOTIwLDEwICs5MjIsNiBAQAogCXNwaW5fbG9ja19pbml0KCZwLT5waV9sb2NrKTsKIAlwbGlzdF9oZWFkX2luaXQoJnAtPnBpX3dhaXRlcnMsICZwLT5waV9sb2NrKTsKIAlwLT5waV9ibG9ja2VkX29uID0gTlVMTDsKLSMgaWZkZWYgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMKLQlzcGluX2xvY2tfaW5pdCgmcC0+aGVsZF9saXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZwLT5oZWxkX2xpc3RfaGVhZCk7Ci0jIGVuZGlmCiAjZW5kaWYKIH0KIApAQCAtOTM1LDEzICs5MzMsMTMgQEAKICAqIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGVudmlyb25tZW50IChhcyBwZXIgdGhlIGNsb25lCiAgKiBmbGFncykuIFRoZSBhY3R1YWwga2ljay1vZmYgaXMgbGVmdCB0byB0aGUgY2FsbGVyLgogICovCi1zdGF0aWMgdGFza190ICpjb3B5X3Byb2Nlc3ModW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwKLQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJIHVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSwKLQkJCQkgaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwKLQkJCQkgaW50IF9fdXNlciAqY2hpbGRfdGlkcHRyLAotCQkJCSBpbnQgcGlkKQorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCisJCQkJCXVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQl1bnNpZ25lZCBsb25nIHN0YWNrX3NpemUsCisJCQkJCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIsCisJCQkJCWludCBfX3VzZXIgKmNoaWxkX3RpZHB0ciwKKwkJCQkJaW50IHBpZCkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IE5VTEw7CkBAIC05NzMsNiArOTcxLDEwIEBACiAJaWYgKCFwKQogCQlnb3RvIGZvcmtfb3V0OwogCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJREVCVUdfTE9DS1NfV0FSTl9PTighcC0+aGFyZGlycXNfZW5hYmxlZCk7CisJREVCVUdfTE9DS1NfV0FSTl9PTighcC0+c29mdGlycXNfZW5hYmxlZCk7CisjZW5kaWYKIAlyZXR2YWwgPSAtRUFHQUlOOwogCWlmIChhdG9taWNfcmVhZCgmcC0+dXNlci0+cHJvY2Vzc2VzKSA+PQogCQkJcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9jdXIpIHsKQEAgLTEwNDcsNiArMTA0OSwyNiBAQAogIAl9CiAJbXBvbF9maXhfZm9ya19jaGlsZF9mbGFnKHApOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJcC0+aXJxX2V2ZW50cyA9IDA7CisJcC0+aGFyZGlycXNfZW5hYmxlZCA9IDA7CisJcC0+aGFyZGlycV9lbmFibGVfaXAgPSAwOworCXAtPmhhcmRpcnFfZW5hYmxlX2V2ZW50ID0gMDsKKwlwLT5oYXJkaXJxX2Rpc2FibGVfaXAgPSBfVEhJU19JUF87CisJcC0+aGFyZGlycV9kaXNhYmxlX2V2ZW50ID0gMDsKKwlwLT5zb2Z0aXJxc19lbmFibGVkID0gMTsKKwlwLT5zb2Z0aXJxX2VuYWJsZV9pcCA9IF9USElTX0lQXzsKKwlwLT5zb2Z0aXJxX2VuYWJsZV9ldmVudCA9IDA7CisJcC0+c29mdGlycV9kaXNhYmxlX2lwID0gMDsKKwlwLT5zb2Z0aXJxX2Rpc2FibGVfZXZlbnQgPSAwOworCXAtPmhhcmRpcnFfY29udGV4dCA9IDA7CisJcC0+c29mdGlycV9jb250ZXh0ID0gMDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19MT0NLREVQCisJcC0+bG9ja2RlcF9kZXB0aCA9IDA7IC8qIG5vIGxvY2tzIGhlbGQgeWV0ICovCisJcC0+Y3Vycl9jaGFpbl9rZXkgPSAwOworCXAtPmxvY2tkZXBfcmVjdXJzaW9uID0gMDsKKyNlbmRpZgogCiAJcnRfbXV0ZXhfaW5pdF90YXNrKHApOwogCkBAIC0xMjcyLDkgKzEyOTQsOSBAQAogCXJldHVybiByZWdzOwogfQogCi10YXNrX3QgKiBfX2RldmluaXQgZm9ya19pZGxlKGludCBjcHUpCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfX2RldmluaXQgZm9ya19pZGxlKGludCBjcHUpCiB7Ci0JdGFza190ICp0YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwogCiAJdGFzayA9IGNvcHlfcHJvY2VzcyhDTE9ORV9WTSwgMCwgaWRsZV9yZWdzKCZyZWdzKSwgMCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDZjOTFmOTMuLjFkYzk4ZTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC02MDcsNiArNjA3LDIyIEBACiB9CiAKIC8qCisgKiBFeHByZXNzIHRoZSBsb2NraW5nIGRlcGVuZGVuY2llcyBmb3IgbG9ja2RlcDoKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkb3VibGVfbG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpCit7CisJaWYgKGhiMSA8PSBoYjIpIHsKKwkJc3Bpbl9sb2NrKCZoYjEtPmxvY2spOworCQlpZiAoaGIxIDwgaGIyKQorCQkJc3Bpbl9sb2NrX25lc3RlZCgmaGIyLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJfSBlbHNlIHsgLyogaGIxID4gaGIyICovCisJCXNwaW5fbG9jaygmaGIyLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX25lc3RlZCgmaGIxLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJfQorfQorCisvKgogICogV2FrZSB1cCBhbGwgd2FpdGVycyBoYXNoZWQgb24gdGhlIHBoeXNpY2FsIHBhZ2UgdGhhdCBpcyBtYXBwZWQKICAqIHRvIHRoaXMgdmlydHVhbCBhZGRyZXNzOgogICovCkBAIC02MzAsOCArNjQ2LDEwIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZCwgbGlzdCkgewogCQlpZiAobWF0Y2hfZnV0ZXggKCZ0aGlzLT5rZXksICZrZXkpKSB7Ci0JCQlpZiAodGhpcy0+cGlfc3RhdGUpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodGhpcy0+cGlfc3RhdGUpIHsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQogCQkJd2FrZV9mdXRleCh0aGlzKTsKIAkJCWlmICgrK3JldCA+PSBucl93YWtlKQogCQkJCWJyZWFrOwpAQCAtNjcyLDExICs2OTAsNyBAQAogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCiByZXRyeToKLQlpZiAoaGIxIDwgaGIyKQotCQlzcGluX2xvY2soJmhiMS0+bG9jayk7Ci0Jc3Bpbl9sb2NrKCZoYjItPmxvY2spOwotCWlmIChoYjEgPiBoYjIpCi0JCXNwaW5fbG9jaygmaGIxLT5sb2NrKTsKKwlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7CiAKIAlvcF9yZXQgPSBmdXRleF9hdG9taWNfb3BfaW51c2VyKG9wLCB1YWRkcjIpOwogCWlmICh1bmxpa2VseShvcF9yZXQgPCAwKSkgewpAQCAtNzg1LDExICs3OTksNyBAQAogCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOwogCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOwogCi0JaWYgKGhiMSA8IGhiMikKLQkJc3Bpbl9sb2NrKCZoYjEtPmxvY2spOwotCXNwaW5fbG9jaygmaGIyLT5sb2NrKTsKLQlpZiAoaGIxID4gaGIyKQotCQlzcGluX2xvY2soJmhiMS0+bG9jayk7CisJZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwogCiAJaWYgKGxpa2VseShjbXB2YWwgIT0gTlVMTCkpIHsKIAkJdTMyIGN1cnZhbDsKQEAgLTEyMDgsNyArMTIxOCw3IEBACiAJfQogCiAJZG93bl9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOwotCWhiID0gcXVldWVfbG9jaygmcSwgLTEsIE5VTEwpOworCXNwaW5fbG9jayhxLmxvY2tfcHRyKTsKIAogCS8qCiAJICogR290IHRoZSBsb2NrLiBXZSBtaWdodCBub3QgYmUgdGhlIGFudGljaXBhdGVkIG93bmVyIGlmIHdlCmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCA4ZDNkYzI5Li5kMTc3NjZkIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTY2OSw3ICs2NjksNyBAQAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAotdm9pZCBocnRpbWVyX2luaXRfc2xlZXBlcihzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICpzbCwgdGFza190ICp0YXNrKQordm9pZCBocnRpbWVyX2luaXRfc2xlZXBlcihzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICpzbCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXNsLT50aW1lci5mdW5jdGlvbiA9IGhydGltZXJfd2FrZXVwOwogCXNsLT50YXNrID0gdGFzazsKQEAgLTc4Miw4ICs3ODIsMTAgQEAKIAlzdHJ1Y3QgaHJ0aW1lcl9iYXNlICpiYXNlID0gcGVyX2NwdShocnRpbWVyX2Jhc2VzLCBjcHUpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IUlRJTUVSX0JBU0VTOyBpKyssIGJhc2UrKykKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hSVElNRVJfQkFTRVM7IGkrKywgYmFzZSsrKSB7CiAJCXNwaW5fbG9ja19pbml0KCZiYXNlLT5sb2NrKTsKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmJhc2UtPmxvY2ssICZiYXNlLT5sb2NrX2tleSk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCA5Zjc3ZjUwLi4xZGFiMGFjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAKLW9iai15IDo9IGhhbmRsZS5vIG1hbmFnZS5vIHNwdXJpb3VzLm8KK29iai15IDo9IGhhbmRsZS5vIG1hbmFnZS5vIHNwdXJpb3VzLm8gcmVzZW5kLm8gY2hpcC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19JUlFfUFJPQkUpICs9IGF1dG9wcm9iZS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMgYi9rZXJuZWwvaXJxL2F1dG9wcm9iZS5jCmluZGV4IDM0NjcwOTcuLjUzMzA2OGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMKKysrIGIva2VybmVsL2lycS9hdXRvcHJvYmUuYwpAQCAtMTEsMTIgKzExLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAorI2luY2x1ZGUgImludGVybmFscy5oIgorCiAvKgogICogQXV0b2RldGVjdGlvbiBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQgYW55IGludGVycnVwdCB0aGF0CiAgKiBjb21lcyBpbiBvbiB0byBhbiB1bmFzc2lnbmVkIGhhbmRsZXIgd2lsbCBnZXQgc3R1Y2sgd2l0aAogICogIklSUV9XQUlUSU5HIiBjbGVhcmVkIGFuZCB0aGUgaW50ZXJydXB0IGRpc2FibGVkLgogICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChwcm9iZV9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChwcm9iaW5nX2FjdGl2ZSk7CiAKIC8qKgogICoJcHJvYmVfaXJxX29uCS0gYmVnaW4gYW4gaW50ZXJydXB0IGF1dG9kZXRlY3QKQEAgLTI3LDExICsyOSwxMSBAQAogICovCiB1bnNpZ25lZCBsb25nIHByb2JlX2lycV9vbih2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWlycV9kZXNjX3QgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgbWFzazsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWRvd24oJnByb2JlX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJvYmluZ19hY3RpdmUpOwogCS8qCiAJICogc29tZXRoaW5nIG1heSBoYXZlIGdlbmVyYXRlZCBhbiBpcnEgbG9uZyBhZ28gYW5kIHdlIHdhbnQgdG8KIAkgKiBmbHVzaCBzdWNoIGEgbG9uZ3N0YW5kaW5nIGlycSBiZWZvcmUgY29uc2lkZXJpbmcgaXQgYXMgc3B1cmlvdXMuCkBAIC00MCw4ICs0MiwyMSBAQAogCQlkZXNjID0gaXJxX2Rlc2MgKyBpOwogCiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwotCQlpZiAoIWlycV9kZXNjW2ldLmFjdGlvbikKLQkJCWlycV9kZXNjW2ldLmhhbmRsZXItPnN0YXJ0dXAoaSk7CisJCWlmICghZGVzYy0+YWN0aW9uICYmICEoZGVzYy0+c3RhdHVzICYgSVJRX05PUFJPQkUpKSB7CisJCQkvKgorCQkJICogQW4gb2xkLXN0eWxlIGFyY2hpdGVjdHVyZSBtaWdodCBzdGlsbCBoYXZlCisJCQkgKiB0aGUgaGFuZGxlX2JhZF9pcnEgaGFuZGxlciB0aGVyZToKKwkJCSAqLworCQkJY29tcGF0X2lycV9jaGlwX3NldF9kZWZhdWx0X2hhbmRsZXIoZGVzYyk7CisKKwkJCS8qCisJCQkgKiBTb21lIGNoaXBzIG5lZWQgdG8ga25vdyBhYm91dCBwcm9iaW5nIGluCisJCQkgKiBwcm9ncmVzczoKKwkJCSAqLworCQkJaWYgKGRlc2MtPmNoaXAtPnNldF90eXBlKQorCQkJCWRlc2MtPmNoaXAtPnNldF90eXBlKGksIElSUV9UWVBFX1BST0JFKTsKKwkJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaSk7CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAl9CiAKQEAgLTU3LDkgKzcyLDkgQEAKIAkJZGVzYyA9IGlycV9kZXNjICsgaTsKIAogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKLQkJaWYgKCFkZXNjLT5hY3Rpb24pIHsKKwkJaWYgKCFkZXNjLT5hY3Rpb24gJiYgIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9QUk9CRSkpIHsKIAkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfQVVUT0RFVEVDVCB8IElSUV9XQUlUSU5HOwotCQkJaWYgKGRlc2MtPmhhbmRsZXItPnN0YXJ0dXAoaSkpCisJCQlpZiAoZGVzYy0+Y2hpcC0+c3RhcnR1cChpKSkKIAkJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFTkRJTkc7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKQEAgLTczLDExICs4OCwxMSBAQAogCS8qCiAJICogTm93IGZpbHRlciBvdXQgYW55IG9idmlvdXNseSBzcHVyaW91cyBpbnRlcnJ1cHRzCiAJICovCi0JdmFsID0gMDsKKwltYXNrID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGk7CiAJCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKKwkJZGVzYyA9IGlycV9kZXNjICsgaTsKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCXN0YXR1cyA9IGRlc2MtPnN0YXR1czsKIApAQCAtODUsMTcgKzEwMCwxNiBAQAogCQkJLyogSXQgdHJpZ2dlcmVkIGFscmVhZHkgLSBjb25zaWRlciBpdCBzcHVyaW91cy4gKi8KIAkJCWlmICghKHN0YXR1cyAmIElSUV9XQUlUSU5HKSkgewogCQkJCWRlc2MtPnN0YXR1cyA9IHN0YXR1cyAmIH5JUlFfQVVUT0RFVEVDVDsKLQkJCQlkZXNjLT5oYW5kbGVyLT5zaHV0ZG93bihpKTsKKwkJCQlkZXNjLT5jaGlwLT5zaHV0ZG93bihpKTsKIAkJCX0gZWxzZQogCQkJCWlmIChpIDwgMzIpCi0JCQkJCXZhbCB8PSAxIDw8IGk7CisJCQkJCW1hc2sgfD0gMSA8PCBpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJfQogCi0JcmV0dXJuIHZhbDsKKwlyZXR1cm4gbWFzazsKIH0KLQogRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfb24pOwogCiAvKioKQEAgLTExNyw3ICsxMzEsNyBAQAogCiAJbWFzayA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7CiAJCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CkBAIC0xMjgsMTEgKzE0MiwxMSBAQAogCQkJCW1hc2sgfD0gMSA8PCBpOwogCiAJCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgJiB+SVJRX0FVVE9ERVRFQ1Q7Ci0JCQlkZXNjLT5oYW5kbGVyLT5zaHV0ZG93bihpKTsKKwkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGkpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJfQotCXVwKCZwcm9iZV9zZW0pOworCW11dGV4X3VubG9jaygmcHJvYmluZ19hY3RpdmUpOwogCiAJcmV0dXJuIG1hc2sgJiB2YWw7CiB9CkBAIC0xNjAsNyArMTc0LDcgQEAKIAlpbnQgaSwgaXJxX2ZvdW5kID0gMCwgbnJfaXJxcyA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGk7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaTsKIAkJdW5zaWduZWQgaW50IHN0YXR1czsKIAogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKQEAgLTE3MywxNiArMTg3LDE2IEBACiAJCQkJbnJfaXJxcysrOwogCQkJfQogCQkJZGVzYy0+c3RhdHVzID0gc3RhdHVzICYgfklSUV9BVVRPREVURUNUOwotCQkJZGVzYy0+aGFuZGxlci0+c2h1dGRvd24oaSk7CisJCQlkZXNjLT5jaGlwLT5zaHV0ZG93bihpKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwogCX0KLQl1cCgmcHJvYmVfc2VtKTsKKwltdXRleF91bmxvY2soJnByb2JpbmdfYWN0aXZlKTsKIAogCWlmIChucl9pcnFzID4gMSkKIAkJaXJxX2ZvdW5kID0gLWlycV9mb3VuZDsKKwogCXJldHVybiBpcnFfZm91bmQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0wocHJvYmVfaXJxX29mZik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzNmYyZQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogbGludXgva2VybmVsL2lycS9jaGlwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTgtMjAwNiBMaW51cyBUb3J2YWxkcywgSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCBUaG9tYXMgR2xlaXhuZXIsIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29yZSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgZm9yIGlycS1jaGlwCisgKiBiYXNlZCBhcmNoaXRlY3R1cmVzLgorICoKKyAqIERldGFpbGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCisKKy8qKgorICoJc2V0X2lycV9jaGlwIC0gc2V0IHRoZSBpcnEgY2hpcCBmb3IgYW4gaXJxCisgKglAaXJxOglpcnEgbnVtYmVyCisgKglAY2hpcDoJcG9pbnRlciB0byBpcnEgY2hpcCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqLworaW50IHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gaW5zdGFsbCBjaGlwIGZvciBJUlElZFxuIiwgaXJxKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjaGlwKQorCQljaGlwID0gJm5vX2lycV9jaGlwOworCisJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJaXJxX2NoaXBfc2V0X2RlZmF1bHRzKGNoaXApOworCWRlc2MtPmNoaXAgPSBjaGlwOworCS8qCisJICogRm9yIGNvbXBhdGliaWxpdHkgb25seToKKwkgKi8KKwlkZXNjLT5jaGlwID0gY2hpcDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X2lycV9jaGlwKTsKKworLyoqCisgKglzZXRfaXJxX3R5cGUgLSBzZXQgdGhlIGlycSB0eXBlIGZvciBhbiBpcnEKKyAqCUBpcnE6CWlycSBudW1iZXIKKyAqCUB0eXBlOglpbnRlcnJ1cHQgdHlwZSAtIHNlZSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisgKi8KK2ludCBzZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FTlhJTzsKKworCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBzZXQgaXJxIHR5cGUgZm9yIElSUSVkXG4iLCBpcnEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaWYgKGRlc2MtPmNoaXAtPnNldF90eXBlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IGRlc2MtPmNoaXAtPnNldF90eXBlKGlycSwgdHlwZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X2lycV90eXBlKTsKKworLyoqCisgKglzZXRfaXJxX2RhdGEgLSBzZXQgaXJxIHR5cGUgZGF0YSBmb3IgYW4gaXJxCisgKglAaXJxOglJbnRlcnJ1cHQgbnVtYmVyCisgKglAZGF0YToJUG9pbnRlciB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgZGF0YQorICoKKyAqCVNldCB0aGUgaGFyZHdhcmUgaXJxIGNvbnRyb2xsZXIgZGF0YSBmb3IgYW4gaXJxCisgKi8KK2ludCBzZXRfaXJxX2RhdGEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJUcnlpbmcgdG8gaW5zdGFsbCBjb250cm9sbGVyIGRhdGEgZm9yIElSUSVkXG4iLCBpcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlkZXNjLT5oYW5kbGVyX2RhdGEgPSBkYXRhOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X2lycV9kYXRhKTsKKworLyoqCisgKglzZXRfaXJxX2NoaXBfZGF0YSAtIHNldCBpcnEgY2hpcCBkYXRhIGZvciBhbiBpcnEKKyAqCUBpcnE6CUludGVycnVwdCBudW1iZXIKKyAqCUBkYXRhOglQb2ludGVyIHRvIGNoaXAgc3BlY2lmaWMgZGF0YQorICoKKyAqCVNldCB0aGUgaGFyZHdhcmUgaXJxIGNoaXAgZGF0YSBmb3IgYW4gaXJxCisgKi8KK2ludCBzZXRfaXJxX2NoaXBfZGF0YSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWRlc2MtPmNoaXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IGJhZCBzZXRfaXJxX2NoaXBfZGF0YShJUlEjJWQpXG4iLCBpcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCWRlc2MtPmNoaXBfZGF0YSA9IGRhdGE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNldF9pcnFfY2hpcF9kYXRhKTsKKworLyoKKyAqIGRlZmF1bHQgZW5hYmxlIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGRlZmF1bHRfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9NQVNLRUQ7Cit9CisKKy8qCisgKiBkZWZhdWx0IGRpc2FibGUgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgZGVmYXVsdF9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfREVMQVlFRF9ESVNBQkxFKSkKKwkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5tYXNrKGlycSk7Cit9CisKKy8qCisgKiBkZWZhdWx0IHN0YXJ0dXAgZnVuY3Rpb24KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X3N0YXJ0dXAodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfZGVzY1tpcnFdLmNoaXAtPmVuYWJsZShpcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaXh1cCBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbiBwb2ludGVycworICovCit2b2lkIGlycV9jaGlwX3NldF9kZWZhdWx0cyhzdHJ1Y3QgaXJxX2NoaXAgKmNoaXApCit7CisJaWYgKCFjaGlwLT5lbmFibGUpCisJCWNoaXAtPmVuYWJsZSA9IGRlZmF1bHRfZW5hYmxlOworCWlmICghY2hpcC0+ZGlzYWJsZSkKKwkJY2hpcC0+ZGlzYWJsZSA9IGRlZmF1bHRfZGlzYWJsZTsKKwlpZiAoIWNoaXAtPnN0YXJ0dXApCisJCWNoaXAtPnN0YXJ0dXAgPSBkZWZhdWx0X3N0YXJ0dXA7CisJaWYgKCFjaGlwLT5zaHV0ZG93bikKKwkJY2hpcC0+c2h1dGRvd24gPSBjaGlwLT5kaXNhYmxlOworCWlmICghY2hpcC0+bmFtZSkKKwkJY2hpcC0+bmFtZSA9IGNoaXAtPnR5cGVuYW1lOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFza19hY2tfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGlycSkKK3sKKwlpZiAoZGVzYy0+Y2hpcC0+bWFza19hY2spCisJCWRlc2MtPmNoaXAtPm1hc2tfYWNrKGlycSk7CisJZWxzZSB7CisJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJfQorfQorCisvKioKKyAqCWhhbmRsZV9zaW1wbGVfaXJxIC0gU2ltcGxlIGFuZCBzb2Z0d2FyZS1kZWNvZGVkIElSUXMuCisgKglAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgorICoJQGRlc2M6CXRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRpb24gc3RydWN0dXJlIGZvciB0aGlzIGlycQorICoJQHJlZ3M6CXBvaW50ZXIgdG8gYSByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKglTaW1wbGUgaW50ZXJydXB0cyBhcmUgZWl0aGVyIHNlbnQgZnJvbSBhIGRlbXVsdGlwbGV4aW5nIGludGVycnVwdAorICoJaGFuZGxlciBvciBjb21lIGZyb20gaGFyZHdhcmUsIHdoZXJlIG5vIGludGVycnVwdCBoYXJkd2FyZSBjb250cm9sCisgKglpcyBuZWNlc3NhcnkuCisgKgorICoJTm90ZTogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIGFjaywgY2xlYXIsIG1hc2sgYW5kCisgKgl1bm1hc2sgaXNzdWVzIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZCBmYXN0Y2FsbAoraGFuZGxlX3NpbXBsZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKKwljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKworCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCisJCWdvdG8gb3V0X3VubG9jazsKKwlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOworCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCWlmICh1bmxpa2VseSghYWN0aW9uIHx8IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncywgYWN0aW9uKTsKKwlpZiAoIW5vaXJxZGVidWcpCisJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCwgcmVncyk7CisKKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKK30KKworLyoqCisgKgloYW5kbGVfbGV2ZWxfaXJxIC0gTGV2ZWwgdHlwZSBpcnEgaGFuZGxlcgorICoJQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKKyAqCUBkZXNjOgl0aGUgaW50ZXJydXB0IGRlc2NyaXB0aW9uIHN0cnVjdHVyZSBmb3IgdGhpcyBpcnEKKyAqCUByZWdzOglwb2ludGVyIHRvIGEgcmVnaXN0ZXIgc3RydWN0dXJlCisgKgorICoJTGV2ZWwgdHlwZSBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUgYXMgbG9uZyBhcyB0aGUgaGFyZHdhcmUgbGluZSBoYXMKKyAqCXRoZSBhY3RpdmUgbGV2ZWwuIFRoaXMgbWF5IHJlcXVpcmUgdG8gbWFzayB0aGUgaW50ZXJydXB0IGFuZCB1bm1hc2sKKyAqCWl0IGFmdGVyIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgaGFzIGFja25vd2xlZGdlZCB0aGUgZGV2aWNlLCBzbyB0aGUKKyAqCWludGVycnVwdCBsaW5lIGlzIGJhY2sgdG8gaW5hY3RpdmUuCisgKi8KK3ZvaWQgZmFzdGNhbGwKK2hhbmRsZV9sZXZlbF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OworCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKKworCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCisJCWdvdG8gb3V0OworCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CisJa3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisKKwkvKgorCSAqIElmIGl0cyBkaXNhYmxlZCBvciBubyBhY3Rpb24gYXZhaWxhYmxlCisJICoga2VlcCBpdCBtYXNrZWQgYW5kIGdldCBvdXQgb2YgaGVyZQorCSAqLworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlpZiAodW5saWtlbHkoIWFjdGlvbiB8fCAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRU5ESU5HOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfUEVORElORzsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisKKwlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGFjdGlvbik7CisJaWYgKCFub2lycWRlYnVnKQorCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQsIHJlZ3MpOworCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOworb3V0OgorCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQorCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Cit9CisKKy8qKgorICoJaGFuZGxlX2Zhc3Rlb2lfaXJxIC0gaXJxIGhhbmRsZXIgZm9yIHRyYW5zcGFyZW50IGNvbnRyb2xsZXJzCisgKglAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgorICoJQGRlc2M6CXRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRpb24gc3RydWN0dXJlIGZvciB0aGlzIGlycQorICoJQHJlZ3M6CXBvaW50ZXIgdG8gYSByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKglPbmx5IGEgc2luZ2xlIGNhbGxiYWNrIHdpbGwgYmUgaXNzdWVkIHRvIHRoZSBjaGlwOiBhbiAtPmVvaSgpCisgKgljYWxsIHdoZW4gdGhlIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZC4gVGhpcyBlbmFibGVzIHN1cHBvcnQKKyAqCWZvciBtb2Rlcm4gZm9ybXMgb2YgaW50ZXJydXB0IGhhbmRsZXJzLCB3aGljaCBoYW5kbGUgdGhlIGZsb3cKKyAqCWRldGFpbHMgaW4gaGFyZHdhcmUsIHRyYW5zcGFyZW50bHkuCisgKi8KK3ZvaWQgZmFzdGNhbGwKK2hhbmRsZV9mYXN0ZW9pX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CisKKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCisJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKSkKKwkJZ290byBvdXQ7CisKKwlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOworCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCisJLyoKKwkgKiBJZiBpdHMgZGlzYWJsZWQgb3Igbm8gYWN0aW9uIGF2YWlsYWJsZQorCSAqIGtlZXAgaXQgbWFza2VkIGFuZCBnZXQgb3V0IG9mIGhlcmUKKwkgKi8KKwlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CisJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKSB7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKKwkJZ290byBvdXQ7CisJfQorCisJZGVzYy0+c3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7CisJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCisJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCByZWdzLCBhY3Rpb24pOworCWlmICghbm9pcnFkZWJ1ZykKKwkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0LCByZWdzKTsKKworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKK291dDoKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKK30KKworLyoqCisgKgloYW5kbGVfZWRnZV9pcnEgLSBlZGdlIHR5cGUgSVJRIGhhbmRsZXIKKyAqCUBpcnE6CXRoZSBpbnRlcnJ1cHQgbnVtYmVyCisgKglAZGVzYzoJdGhlIGludGVycnVwdCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoaXMgaXJxCisgKglAcmVnczoJcG9pbnRlciB0byBhIHJlZ2lzdGVyIHN0cnVjdHVyZQorICoKKyAqCUludGVycnVwdCBvY2N1cmVzIG9uIHRoZSBmYWxsaW5nIGFuZC9vciByaXNpbmcgZWRnZSBvZiBhIGhhcmR3YXJlCisgKglzaWduYWwuIFRoZSBvY2N1cmVuY2UgaXMgbGF0Y2hlZCBpbnRvIHRoZSBpcnEgY29udHJvbGxlciBoYXJkd2FyZQorICoJYW5kIG11c3QgYmUgYWNrZWQgaW4gb3JkZXIgdG8gYmUgcmVlbmFibGVkLiBBZnRlciB0aGUgYWNrIGFub3RoZXIKKyAqCWludGVycnVwdCBjYW4gaGFwcGVuIG9uIHRoZSBzYW1lIHNvdXJjZSBldmVuIGJlZm9yZSB0aGUgZmlyc3Qgb25lCisgKglpcyBoYW5kbGVkIGJ5IHRoZSBhc3Nvc2lhY3RlZCBldmVudCBoYW5kbGVyLiBJZiB0aGlzIGhhcHBlbnMgaXQKKyAqCW1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBkaXNhYmxlIChtYXNrKSB0aGUgaW50ZXJydXB0IGRlcGVuZGluZyBvbiB0aGUKKyAqCWNvbnRyb2xsZXIgaGFyZHdhcmUuIFRoaXMgcmVxdWlyZXMgdG8gcmVlbmFibGUgdGhlIGludGVycnVwdCBpbnNpZGUKKyAqCW9mIHRoZSBsb29wIHdoaWNoIGhhbmRsZXMgdGhlIGludGVycnVwdHMgd2hpY2ggaGF2ZSBhcnJpdmVkIHdoaWxlCisgKgl0aGUgaGFuZGxlciB3YXMgcnVubmluZy4gSWYgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCwgdGhlCisgKglsb29wIGlzIGxlZnQuCisgKi8KK3ZvaWQgZmFzdGNhbGwKK2hhbmRsZV9lZGdlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCisJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKKworCS8qCisJICogSWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgdGhpcyBJUlEsIG9yIGl0cyBkaXNhYmxlZCwKKwkgKiB3ZSBzaG91bGRuJ3QgcHJvY2VzcyB0aGUgSVJRLiBNYXJrIGl0IHBlbmRpbmcsIGhhbmRsZQorCSAqIHRoZSBuZWNlc3NhcnkgbWFza2luZyBhbmQgZ28gb3V0CisJICovCisJaWYgKHVubGlrZWx5KChkZXNjLT5zdGF0dXMgJiAoSVJRX0lOUFJPR1JFU1MgfCBJUlFfRElTQUJMRUQpKSB8fAorCQkgICAgIWRlc2MtPmFjdGlvbikpIHsKKwkJZGVzYy0+c3RhdHVzIHw9IChJUlFfUEVORElORyB8IElSUV9NQVNLRUQpOworCQltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCisJLyogU3RhcnQgaGFuZGxpbmcgdGhlIGlycSAqLworCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCisJLyogTWFyayB0aGUgSVJRIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4qLworCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKKworCWRvIHsKKwkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OworCisJCWlmICh1bmxpa2VseSghYWN0aW9uKSkgeworCQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisKKwkJLyoKKwkJICogV2hlbiBhbm90aGVyIGlycSBhcnJpdmVkIHdoaWxlIHdlIHdlcmUgaGFuZGxpbmcKKwkJICogb25lLCB3ZSBjb3VsZCBoYXZlIG1hc2tlZCB0aGUgaXJxLgorCQkgKiBSZW5hYmxlIGl0LCBpZiBpdCB3YXMgbm90IGRpc2FibGVkIGluIG1lYW50aW1lLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KChkZXNjLT5zdGF0dXMgJgorCQkJICAgICAgIChJUlFfUEVORElORyB8IElSUV9NQVNLRUQgfCBJUlFfRElTQUJMRUQpKSA9PQorCQkJICAgICAgKElSUV9QRU5ESU5HIHwgSVJRX01BU0tFRCkpKSB7CisJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01BU0tFRDsKKwkJfQorCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7CisJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCByZWdzLCBhY3Rpb24pOworCQlpZiAoIW5vaXJxZGVidWcpCisJCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQsIHJlZ3MpOworCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCisJfSB3aGlsZSAoKGRlc2MtPnN0YXR1cyAmIChJUlFfUEVORElORyB8IElSUV9ESVNBQkxFRCkpID09IElSUV9QRU5ESU5HKTsKKworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKy8qKgorICoJaGFuZGxlX3BlcmNwdV9JUlEgLSBQZXIgQ1BVIGxvY2FsIGlycSBoYW5kbGVyCisgKglAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgorICoJQGRlc2M6CXRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRpb24gc3RydWN0dXJlIGZvciB0aGlzIGlycQorICoJQHJlZ3M6CXBvaW50ZXIgdG8gYSByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKglQZXIgQ1BVIGludGVycnVwdHMgb24gU01QIG1hY2hpbmVzIHdpdGhvdXQgbG9ja2luZyByZXF1aXJlbWVudHMKKyAqLwordm9pZCBmYXN0Y2FsbAoraGFuZGxlX3BlcmNwdV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OworCisJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncywgZGVzYy0+YWN0aW9uKTsKKwlpZiAoIW5vaXJxZGVidWcpCisJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCwgcmVncyk7CisKKwlpZiAoZGVzYy0+Y2hpcC0+ZW9pKQorCQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwordm9pZAorX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwKKwkJICB2b2lkIGZhc3RjYWxsICgqaGFuZGxlKSh1bnNpZ25lZCBpbnQsIGlycV9kZXNjX3QgKiwKKwkJCQkJICBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJICBpbnQgaXNfY2hhaW5lZCkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJUcnlpbmcgdG8gaW5zdGFsbCB0eXBlIGNvbnRyb2wgZm9yIElSUSVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCisJaWYgKCFoYW5kbGUpCisJCWhhbmRsZSA9IGhhbmRsZV9iYWRfaXJxOworCisJaWYgKGRlc2MtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRyeWluZyB0byBpbnN0YWxsICVzaW50ZXJydXB0IGhhbmRsZXIgIgorCQkgICAgICAgImZvciBJUlElZFxuIiwgaXNfY2hhaW5lZCA/ICJjaGFpbmVkICIgOiAiICIsIGlycSk7CisJCS8qCisJCSAqIFNvbWUgQVJNIGltcGxlbWVudGF0aW9ucyBpbnN0YWxsIGEgaGFuZGxlciBmb3IgcmVhbGx5IGR1bWIKKwkJICogaW50ZXJydXB0IGhhcmR3YXJlIHdpdGhvdXQgc2V0dGluZyBhbiBpcnFfY2hpcC4gVGhpcyB3b3JrZWQKKwkJICogd2l0aCB0aGUgQVJNIG5vX2lycV9jaGlwIGJ1dCB0aGUgY2hlY2sgaW4gc2V0dXBfaXJxIHdvdWxkCisJCSAqIHByZXZlbnQgdXMgdG8gc2V0dXAgdGhlIGludGVycnVwdCBhdCBhbGwuIFN3aXRjaCBpdCB0bworCQkgKiBkdW1teV9pcnFfY2hpcCBmb3IgZWFzeSB0cmFuc2l0aW9uLgorCQkgKi8KKwkJZGVzYy0+Y2hpcCA9ICZkdW1teV9pcnFfY2hpcDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCisJLyogVW5pbnN0YWxsPyAqLworCWlmIChoYW5kbGUgPT0gaGFuZGxlX2JhZF9pcnEpIHsKKwkJaWYgKGRlc2MtPmNoaXAgIT0gJm5vX2lycV9jaGlwKSB7CisJCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisJCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwkJfQorCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RJU0FCTEVEOworCQlkZXNjLT5kZXB0aCA9IDE7CisJfQorCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGU7CisKKwlpZiAoaGFuZGxlICE9IGhhbmRsZV9iYWRfaXJxICYmIGlzX2NoYWluZWQpIHsKKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfRElTQUJMRUQ7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTk9SRVFVRVNUIHwgSVJRX05PUFJPQkU7CisJCWRlc2MtPmRlcHRoID0gMDsKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZAorc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJCSB2b2lkIGZhc3RjYWxsICgqaGFuZGxlKSh1bnNpZ25lZCBpbnQsCisJCQkJCQkgc3RydWN0IGlycV9kZXNjICosCisJCQkJCQkgc3RydWN0IHB0X3JlZ3MgKikpCit7CisJc2V0X2lycV9jaGlwKGlycSwgY2hpcCk7CisJX19zZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGUsIDApOworfQorCisvKgorICogR2V0IGEgZGVzY3JpcHRpdmUgc3RyaW5nIGZvciB0aGUgaGlnaGxldmVsIGhhbmRsZXIsIGZvcgorICogL3Byb2MvaW50ZXJydXB0cyBvdXRwdXQ6CisgKi8KK2NvbnN0IGNoYXIgKgoraGFuZGxlX2lycV9uYW1lKHZvaWQgZmFzdGNhbGwgKCpoYW5kbGUpKHVuc2lnbmVkIGludCwgc3RydWN0IGlycV9kZXNjICosCisJCQkJCXN0cnVjdCBwdF9yZWdzICopKQoreworCWlmIChoYW5kbGUgPT0gaGFuZGxlX2xldmVsX2lycSkKKwkJcmV0dXJuICJsZXZlbCAgIjsKKwlpZiAoaGFuZGxlID09IGhhbmRsZV9mYXN0ZW9pX2lycSkKKwkJcmV0dXJuICJmYXN0ZW9pIjsKKwlpZiAoaGFuZGxlID09IGhhbmRsZV9lZGdlX2lycSkKKwkJcmV0dXJuICJlZGdlICAgIjsKKwlpZiAoaGFuZGxlID09IGhhbmRsZV9zaW1wbGVfaXJxKQorCQlyZXR1cm4gInNpbXBsZSAiOworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoaGFuZGxlID09IGhhbmRsZV9wZXJjcHVfaXJxKQorCQlyZXR1cm4gInBlcmNwdSAiOworI2VuZGlmCisJaWYgKGhhbmRsZSA9PSBoYW5kbGVfYmFkX2lycSkKKwkJcmV0dXJuICJiYWQgICAgIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggMGY2NTMwMS4uZmM0ZTkwNiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xLDkgKzEsMTMgQEAKIC8qCiAgKiBsaW51eC9rZXJuZWwvaXJxL2hhbmRsZS5jCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk4LTIwMDQgTGludXMgVG9ydmFsZHMsIEluZ28gTW9sbmFyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTgtMjAwNiBMaW51cyBUb3J2YWxkcywgSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCBUaG9tYXMgR2xlaXhuZXIsIFJ1c3NlbGwgS2luZwogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29yZSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZS4KKyAqCisgKiBEZXRhaWxlZCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEKKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtMTQsMTEgKzE4LDIyIEBACiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKIAorLyoqCisgKiBoYW5kbGVfYmFkX2lycSAtIGhhbmRsZSBzcHVyaW91cyBhbmQgdW5oYW5kbGVkIGlycXMKKyAqLwordm9pZCBmYXN0Y2FsbAoraGFuZGxlX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwcmludF9pcnFfZGVzYyhpcnEsIGRlc2MpOworCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCWFja19iYWRfaXJxKGlycSk7Cit9CisKIC8qCiAgKiBMaW51eCBoYXMgYSBjb250cm9sbGVyLWluZGVwZW5kZW50IGludGVycnVwdCBhcmNoaXRlY3R1cmUuCiAgKiBFdmVyeSBjb250cm9sbGVyIGhhcyBhICdjb250cm9sbGVyLXRlbXBsYXRlJywgdGhhdCBpcyB1c2VkCiAgKiBieSB0aGUgbWFpbiBjb2RlIHRvIGRvIHRoZSByaWdodCB0aGluZy4gRWFjaCBkcml2ZXItdmlzaWJsZQotICogaW50ZXJydXB0IHNvdXJjZSBpcyB0cmFuc3BhcmVudGx5IHdpcmVkIHRvIHRoZSBhcHJvcHJpYXRlCisgKiBpbnRlcnJ1cHQgc291cmNlIGlzIHRyYW5zcGFyZW50bHkgd2lyZWQgdG8gdGhlIGFwcHJvcHJpYXRlCiAgKiBjb250cm9sbGVyLiBUaHVzIGRyaXZlcnMgbmVlZCBub3QgYmUgYXdhcmUgb2YgdGhlCiAgKiBpbnRlcnJ1cHQtY29udHJvbGxlci4KICAqCkBAIC0yOCw0MSArNDMsNjggQEAKICAqCiAgKiBDb250cm9sbGVyIG1hcHBpbmdzIGZvciBhbGwgaW50ZXJydXB0IHNvdXJjZXM6CiAgKi8KLWlycV9kZXNjX3QgaXJxX2Rlc2NbTlJfSVJRU10gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKK3N0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXSBfX2NhY2hlbGluZV9hbGlnbmVkID0gewogCVswIC4uLiBOUl9JUlFTLTFdID0gewogCQkuc3RhdHVzID0gSVJRX0RJU0FCTEVELAotCQkuaGFuZGxlciA9ICZub19pcnFfdHlwZSwKLQkJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQKKwkJLmNoaXAgPSAmbm9faXJxX2NoaXAsCisJCS5oYW5kbGVfaXJxID0gaGFuZGxlX2JhZF9pcnEsCisJCS5kZXB0aCA9IDEsCisJCS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VELAorI2lmZGVmIENPTkZJR19TTVAKKwkJLmFmZmluaXR5ID0gQ1BVX01BU0tfQUxMCisjZW5kaWYKIAl9CiB9OwogCiAvKgotICogR2VuZXJpYyAnbm8gY29udHJvbGxlcicgY29kZQorICogV2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yPworICogRWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWxmLgogICovCi1zdGF0aWMgdm9pZCBlbmRfbm9uZSh1bnNpZ25lZCBpbnQgaXJxKSB7IH0KLXN0YXRpYyB2b2lkIGVuYWJsZV9ub25lKHVuc2lnbmVkIGludCBpcnEpIHsgfQotc3RhdGljIHZvaWQgZGlzYWJsZV9ub25lKHVuc2lnbmVkIGludCBpcnEpIHsgfQotc3RhdGljIHZvaWQgc2h1dGRvd25fbm9uZSh1bnNpZ25lZCBpbnQgaXJxKSB7IH0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9ub25lKHVuc2lnbmVkIGludCBpcnEpIHsgcmV0dXJuIDA7IH0KLQotc3RhdGljIHZvaWQgYWNrX25vbmUodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGFja19iYWQodW5zaWduZWQgaW50IGlycSkKIHsKLQkvKgotCSAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgotCSAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsZi4KLQkgKi8KKwlwcmludF9pcnFfZGVzYyhpcnEsIGlycV9kZXNjICsgaXJxKTsKIAlhY2tfYmFkX2lycShpcnEpOwogfQogCi1zdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbm9faXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gCSJub25lIiwKLQkuc3RhcnR1cCA9IAlzdGFydHVwX25vbmUsCi0JLnNodXRkb3duID0gCXNodXRkb3duX25vbmUsCi0JLmVuYWJsZSA9IAllbmFibGVfbm9uZSwKLQkuZGlzYWJsZSA9IAlkaXNhYmxlX25vbmUsCi0JLmFjayA9IAkJYWNrX25vbmUsCi0JLmVuZCA9IAkJZW5kX25vbmUsCi0JLnNldF9hZmZpbml0eSA9IE5VTEwKKy8qCisgKiBOT1AgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIG5vb3AodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBub29wX3JldCh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAwOworfQorCisvKgorICogR2VuZXJpYyBubyBjb250cm9sbGVyIGltcGxlbWVudGF0aW9uCisgKi8KK3N0cnVjdCBpcnFfY2hpcCBub19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAibm9uZSIsCisJLnN0YXJ0dXAJPSBub29wX3JldCwKKwkuc2h1dGRvd24JPSBub29wLAorCS5lbmFibGUJCT0gbm9vcCwKKwkuZGlzYWJsZQk9IG5vb3AsCisJLmFjawkJPSBhY2tfYmFkLAorCS5lbmQJCT0gbm9vcCwKK307CisKKy8qCisgKiBHZW5lcmljIGR1bW15IGltcGxlbWVudGF0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIGZvcgorICogcmVhbCBkdW1iIGludGVycnVwdCBzb3VyY2VzCisgKi8KK3N0cnVjdCBpcnFfY2hpcCBkdW1teV9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiZHVtbXkiLAorCS5zdGFydHVwCT0gbm9vcF9yZXQsCisJLnNodXRkb3duCT0gbm9vcCwKKwkuZW5hYmxlCQk9IG5vb3AsCisJLmRpc2FibGUJPSBub29wLAorCS5hY2sJCT0gbm9vcCwKKwkubWFzawkJPSBub29wLAorCS51bm1hc2sJCT0gbm9vcCwKKwkuZW5kCQk9IG5vb3AsCiB9OwogCiAvKgpAQCAtNzMsMTcgKzExNSwyNCBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotLyoKLSAqIEhhdmUgZ290IGFuIGV2ZW50IHRvIGhhbmRsZToKKy8qKgorICogaGFuZGxlX0lSUV9ldmVudCAtIGlycSBhY3Rpb24gY2hhaW4gaGFuZGxlcgorICogQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKKyAqIEByZWdzOglwb2ludGVyIHRvIGEgcmVnaXN0ZXIgc3RydWN0dXJlCisgKiBAYWN0aW9uOgl0aGUgaW50ZXJydXB0IGFjdGlvbiBjaGFpbiBmb3IgdGhpcyBpcnEKKyAqCisgKiBIYW5kbGVzIHRoZSBhY3Rpb24gY2hhaW4gb2YgYW4gaXJxIGV2ZW50CiAgKi8KLWZhc3RjYWxsIGlycXJldHVybl90IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQoraXJxcmV0dXJuX3QgaGFuZGxlX0lSUV9ldmVudCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgICAgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewogCWlycXJldHVybl90IHJldCwgcmV0dmFsID0gSVJRX05PTkU7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CiAKLQlpZiAoIShhY3Rpb24tPmZsYWdzICYgU0FfSU5URVJSVVBUKSkKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCWhhbmRsZV9keW5hbWljX3RpY2soYWN0aW9uKTsKKworCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKSkKKwkJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CiAKIAlkbyB7CiAJCXJldCA9IGFjdGlvbi0+aGFuZGxlcihpcnEsIGFjdGlvbi0+ZGV2X2lkLCByZWdzKTsKQEAgLTkzLDIyICsxNDIsMjkgQEAKIAkJYWN0aW9uID0gYWN0aW9uLT5uZXh0OwogCX0gd2hpbGUgKGFjdGlvbik7CiAKLQlpZiAoc3RhdHVzICYgU0FfU0FNUExFX1JBTkRPTSkKKwlpZiAoc3RhdHVzICYgSVJRRl9TQU1QTEVfUkFORE9NKQogCQlhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3MoaXJxKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoKLSAqIGRvX0lSUSBoYW5kbGVzIGFsbCBub3JtYWwgZGV2aWNlIElSUSdzICh0aGUgc3BlY2lhbAorLyoqCisgKiBfX2RvX0lSUSAtIG9yaWdpbmFsIGFsbCBpbiBvbmUgaGlnaGxldmVsIElSUSBoYW5kbGVyCisgKiBAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgorICogQHJlZ3M6CXBvaW50ZXIgdG8gYSByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKiBfX2RvX0lSUSBoYW5kbGVzIGFsbCBub3JtYWwgZGV2aWNlIElSUSdzICh0aGUgc3BlY2lhbAogICogU01QIGNyb3NzLUNQVSBpbnRlcnJ1cHRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljCiAgKiBoYW5kbGVycykuCisgKgorICogVGhpcyBpcyB0aGUgb3JpZ2luYWwgeDg2IGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIHVzZWQgZm9yIGV2ZXJ5CisgKiBpbnRlcnJ1cHQgdHlwZS4KICAqLwogZmFzdGNhbGwgdW5zaWduZWQgaW50IF9fZG9fSVJRKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CkBAIC0xMTgsMTYgKzE3NCwxNiBAQAogCQkvKgogCQkgKiBObyBsb2NraW5nIHJlcXVpcmVkIGZvciBDUFUtbG9jYWwgaW50ZXJydXB0czoKIAkJICovCi0JCWlmIChkZXNjLT5oYW5kbGVyLT5hY2spCi0JCQlkZXNjLT5oYW5kbGVyLT5hY2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPmFjaykKKwkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwogCQlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGRlc2MtPmFjdGlvbik7Ci0JCWRlc2MtPmhhbmRsZXItPmVuZChpcnEpOworCQlkZXNjLT5jaGlwLT5lbmQoaXJxKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQlpZiAoZGVzYy0+aGFuZGxlci0+YWNrKQotCQlkZXNjLT5oYW5kbGVyLT5hY2soaXJxKTsKKwlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIAkvKgogCSAqIFJFUExBWSBpcyB3aGVuIExpbnV4IHJlc2VuZHMgYW4gSVJRIHRoYXQgd2FzIGRyb3BwZWQgZWFybGllcgogCSAqIFdBSVRJTkcgaXMgdXNlZCBieSBwcm9iZSB0byBtYXJrIGlycXMgdGhhdCBhcmUgYmVpbmcgdGVzdGVkCkBAIC0xODcsOSArMjQzLDI1IEBACiAJICogVGhlIC0+ZW5kKCkgaGFuZGxlciBoYXMgdG8gZGVhbCB3aXRoIGludGVycnVwdHMgd2hpY2ggZ290CiAJICogZGlzYWJsZWQgd2hpbGUgdGhlIGhhbmRsZXIgd2FzIHJ1bm5pbmcuCiAJICovCi0JZGVzYy0+aGFuZGxlci0+ZW5kKGlycSk7CisJZGVzYy0+Y2hpcC0+ZW5kKGlycSk7CiAJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCiAJcmV0dXJuIDE7CiB9CiAKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKworLyoKKyAqIGxvY2tkZXA6IHdlIHdhbnQgdG8gaGFuZGxlIGFsbCBpcnFfZGVzYyBsb2NrcyBhcyBhIHNpbmdsZSBsb2NrLWNsYXNzOgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CisKK3ZvaWQgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW2ldLmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2ludGVybmFscy5oIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaAppbmRleCA0NmZlYmE2Li4wOGE4NDlhIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKQEAgLTQsNiArNCwxMiBAQAogCiBleHRlcm4gaW50IG5vaXJxZGVidWc7CiAKKy8qIFNldCBkZWZhdWx0IGZ1bmN0aW9ucyBmb3IgaXJxX2NoaXAgc3RydWN0dXJlczogKi8KK2V4dGVybiB2b2lkIGlycV9jaGlwX3NldF9kZWZhdWx0cyhzdHJ1Y3QgaXJxX2NoaXAgKmNoaXApOworCisvKiBTZXQgZGVmYXVsdCBoYW5kbGVyOiAqLworZXh0ZXJuIHZvaWQgY29tcGF0X2lycV9jaGlwX3NldF9kZWZhdWx0X2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKTsKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2hhbmRsZXJfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOwpAQCAtMTYsMyArMjIsNDMgQEAKIAkJCQkJICAgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKSB7IH0KICNlbmRpZgogCisvKgorICogRGVidWdnaW5nIHByaW50b3V0OgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCisjZGVmaW5lIFAoZikgaWYgKGRlc2MtPnN0YXR1cyAmIGYpIHByaW50aygiJTE0cyBzZXRcbiIsICNmKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXByaW50aygiaXJxICVkLCBkZXNjOiAlcCwgZGVwdGg6ICVkLCBjb3VudDogJWQsIHVuaGFuZGxlZDogJWRcbiIsCisJCWlycSwgZGVzYywgZGVzYy0+ZGVwdGgsIGRlc2MtPmlycV9jb3VudCwgZGVzYy0+aXJxc191bmhhbmRsZWQpOworCXByaW50aygiLT5oYW5kbGVfaXJxKCk6ICAlcCwgIiwgZGVzYy0+aGFuZGxlX2lycSk7CisJcHJpbnRfc3ltYm9sKCIlc1xuIiwgKHVuc2lnbmVkIGxvbmcpZGVzYy0+aGFuZGxlX2lycSk7CisJcHJpbnRrKCItPmNoaXAoKTogJXAsICIsIGRlc2MtPmNoaXApOworCXByaW50X3N5bWJvbCgiJXNcbiIsICh1bnNpZ25lZCBsb25nKWRlc2MtPmNoaXApOworCXByaW50aygiLT5hY3Rpb24oKTogJXBcbiIsIGRlc2MtPmFjdGlvbik7CisJaWYgKGRlc2MtPmFjdGlvbikgeworCQlwcmludGsoIi0+YWN0aW9uLT5oYW5kbGVyKCk6ICVwLCAiLCBkZXNjLT5hY3Rpb24tPmhhbmRsZXIpOworCQlwcmludF9zeW1ib2woIiVzXG4iLCAodW5zaWduZWQgbG9uZylkZXNjLT5hY3Rpb24tPmhhbmRsZXIpOworCX0KKworCVAoSVJRX0lOUFJPR1JFU1MpOworCVAoSVJRX0RJU0FCTEVEKTsKKwlQKElSUV9QRU5ESU5HKTsKKwlQKElSUV9SRVBMQVkpOworCVAoSVJRX0FVVE9ERVRFQ1QpOworCVAoSVJRX1dBSVRJTkcpOworCVAoSVJRX0xFVkVMKTsKKwlQKElSUV9NQVNLRUQpOworI2lmZGVmIENPTkZJR19JUlFfUEVSX0NQVQorCVAoSVJRX1BFUl9DUFUpOworI2VuZGlmCisJUChJUlFfTk9QUk9CRSk7CisJUChJUlFfTk9SRVFVRVNUKTsKKwlQKElSUV9OT0FVVE9FTik7Cit9CisKKyN1bmRlZiBQCisKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDEyNzllMzQuLjRlNDYxNDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMSwxMiArMSwxMiBAQAogLyoKICAqIGxpbnV4L2tlcm5lbC9pcnEvbWFuYWdlLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTgtMjAwNCBMaW51cyBUb3J2YWxkcywgSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5OC0yMDA2IExpbnVzIFRvcnZhbGRzLCBJbmdvIE1vbG5hcgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGhvbWFzIEdsZWl4bmVyCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGRyaXZlciBBUElzIHRvIHRoZSBpcnEgc3Vic3lzdGVtLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KQEAgLTE2LDEyICsxNiw2IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLWNwdW1hc2tfdCBpcnFfYWZmaW5pdHlbTlJfSVJRU10gPSB7IFswIC4uLiBOUl9JUlFTLTFdID0gQ1BVX01BU0tfQUxMIH07Ci0KLSNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgfHwgZGVmaW5lZCAoQ09ORklHX0lSUUJBTEFOQ0UpCi1jcHVtYXNrX3QgX19jYWNoZWxpbmVfYWxpZ25lZCBwZW5kaW5nX2lycV9jcHVtYXNrW05SX0lSUVNdOwotI2VuZGlmCi0KIC8qKgogICoJc3luY2hyb25pemVfaXJxIC0gd2FpdCBmb3IgcGVuZGluZyBJUlEgaGFuZGxlcnMgKG9uIG90aGVyIENQVXMpCiAgKglAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyIHRvIHdhaXQgZm9yCkBAIC00Miw3ICszNiw2IEBACiAJd2hpbGUgKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKQogCQljcHVfcmVsYXgoKTsKIH0KLQogRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9pcnEpOwogCiAjZW5kaWYKQEAgLTYwLDcgKzUzLDcgQEAKICAqLwogdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChpcnEgPj0gTlJfSVJRUykKQEAgLTY5LDExICs2MiwxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWYgKCFkZXNjLT5kZXB0aCsrKSB7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCWRlc2MtPmhhbmRsZXItPmRpc2FibGUoaXJxKTsKKwkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGlzYWJsZV9pcnFfbm9zeW5jKTsKIAogLyoqCkBAIC05MCw3ICs4Miw3IEBACiAgKi8KIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAKIAlpZiAoaXJxID49IE5SX0lSUVMpCiAJCXJldHVybjsKQEAgLTk5LDcgKzkxLDYgQEAKIAlpZiAoZGVzYy0+YWN0aW9uKQogCQlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKIH0KLQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiAKIC8qKgpAQCAtMTE0LDcgKzEwNSw3IEBACiAgKi8KIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGlycSA+PSBOUl9JUlFTKQpAQCAtMTIzLDE3ICsxMTQsMTUgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAoZGVzYy0+ZGVwdGgpIHsKIAljYXNlIDA6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYmFsYW5jZWQgZW5hYmxlIGZvciBJUlEgJWRcbiIsIGlycSk7CiAJCVdBUk5fT04oMSk7CiAJCWJyZWFrOwogCWNhc2UgMTogewogCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfklSUV9ESVNBQkxFRDsKIAotCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXM7Ci0JCWlmICgoc3RhdHVzICYgKElSUV9QRU5ESU5HIHwgSVJRX1JFUExBWSkpID09IElSUV9QRU5ESU5HKSB7Ci0JCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgfCBJUlFfUkVQTEFZOwotCQkJaHdfcmVzZW5kX2lycShkZXNjLT5oYW5kbGVyLGlycSk7Ci0JCX0KLQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlycSk7CisJCS8qIFByZXZlbnQgcHJvYmluZyBvbiB0aGlzIGlycTogKi8KKwkJZGVzYy0+c3RhdHVzID0gc3RhdHVzIHwgSVJRX05PUFJPQkU7CisJCWNoZWNrX2lycV9yZXNlbmQoZGVzYywgaXJxKTsKIAkJLyogZmFsbC10aHJvdWdoICovCiAJfQogCWRlZmF1bHQ6CkBAIC0xNDEsOSArMTMwLDI5IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KLQogRVhQT1JUX1NZTUJPTChlbmFibGVfaXJxKTsKIAorLyoqCisgKglzZXRfaXJxX3dha2UgLSBjb250cm9sIGlycSBwb3dlciBtYW5hZ2VtZW50IHdha2V1cAorICoJQGlycToJaW50ZXJydXB0IHRvIGNvbnRyb2wKKyAqCUBvbjoJZW5hYmxlL2Rpc2FibGUgcG93ZXIgbWFuYWdlbWVudCB3YWtldXAKKyAqCisgKglFbmFibGUvZGlzYWJsZSBwb3dlciBtYW5hZ2VtZW50IHdha2V1cCBtb2RlCisgKi8KK2ludCBzZXRfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FTlhJTzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJaWYgKGRlc2MtPmNoaXAtPnNldF93YWtlKQorCQlyZXQgPSBkZXNjLT5jaGlwLT5zZXRfd2FrZShpcnEsIG9uKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X2lycV93YWtlKTsKKwogLyoKICAqIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgdGVsbHMgdGhlIGFyY2hpdGVjdHVyZSBjb2RlIHdoZXRoZXIgYQogICogcGFydGljdWxhciBpcnEgaGFzIGJlZW4gZXhjbHVzaXZlbHkgYWxsb2NhdGVkIG9yIGlzIGF2YWlsYWJsZQpAQCAtMTUzLDIyICsxNjIsMzMgQEAKIHsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX05PUkVRVUVTVCkKIAkJcmV0dXJuIDA7CiAKIAlhY3Rpb24gPSBpcnFfZGVzY1tpcnFdLmFjdGlvbjsKIAlpZiAoYWN0aW9uKQotCQlpZiAoaXJxZmxhZ3MgJiBhY3Rpb24tPmZsYWdzICYgU0FfU0hJUlEpCisJCWlmIChpcnFmbGFncyAmIGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkKIAkJCWFjdGlvbiA9IE5VTEw7CiAKIAlyZXR1cm4gIWFjdGlvbjsKIH0KIAordm9pZCBjb21wYXRfaXJxX2NoaXBfc2V0X2RlZmF1bHRfaGFuZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJLyoKKwkgKiBJZiB0aGUgYXJjaGl0ZWN0dXJlIHN0aWxsIGhhcyBub3Qgb3ZlcnJpZGVuCisJICogdGhlIGZsb3cgaGFuZGxlciB0aGVuIHphcCB0aGUgZGVmYXVsdC4gVGhpcworCSAqIHNob3VsZCBjYXRjaCBpbmNvcnJlY3QgZmxvdy10eXBlIHNldHRpbmcuCisJICovCisJaWYgKGRlc2MtPmhhbmRsZV9pcnEgPT0gJmhhbmRsZV9iYWRfaXJxKQorCQlkZXNjLT5oYW5kbGVfaXJxID0gTlVMTDsKK30KKwogLyoKICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGFuIGlycWFjdGlvbiAtIHR5cGljYWxseSB1c2VkIHRvCiAgKiBhbGxvY2F0ZSBzcGVjaWFsIGludGVycnVwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgYXJjaGl0ZWN0dXJlLgogICovCi1pbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKiBuZXcpCitpbnQgc2V0dXBfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKm5ldykKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqcDsKQEAgLTE3OCwxNCArMTk4LDE0IEBACiAJaWYgKGlycSA+PSBOUl9JUlFTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkZXNjLT5oYW5kbGVyID09ICZub19pcnFfdHlwZSkKKwlpZiAoZGVzYy0+Y2hpcCA9PSAmbm9faXJxX2NoaXApCiAJCXJldHVybiAtRU5PU1lTOwogCS8qCiAJICogU29tZSBkcml2ZXJzIGxpa2Ugc2VyaWFsLmMgdXNlIHJlcXVlc3RfaXJxKCkgaGVhdmlseSwKIAkgKiBzbyB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGludGVyZmVyZSB3aXRoIGEKIAkgKiBydW5uaW5nIHN5c3RlbS4KIAkgKi8KLQlpZiAobmV3LT5mbGFncyAmIFNBX1NBTVBMRV9SQU5ET00pIHsKKwlpZiAobmV3LT5mbGFncyAmIElSUUZfU0FNUExFX1JBTkRPTSkgewogCQkvKgogCQkgKiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IHNsZWVwLCB3ZSB3YW50IHRvIGNhbGwgaXQgZmlyc3QsCiAJCSAqIG91dHNpZGUgb2YgdGhlIGF0b21pYyBibG9jay4KQEAgLTIwMCwxNiArMjIwLDI0IEBACiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGNvZGUgaGFzIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHkKIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jayxmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlwID0gJmRlc2MtPmFjdGlvbjsKLQlpZiAoKG9sZCA9ICpwKSAhPSBOVUxMKSB7Ci0JCS8qIENhbid0IHNoYXJlIGludGVycnVwdHMgdW5sZXNzIGJvdGggYWdyZWUgdG8gKi8KLQkJaWYgKCEob2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MgJiBTQV9TSElSUSkpCisJb2xkID0gKnA7CisJaWYgKG9sZCkgeworCQkvKgorCQkgKiBDYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBib3RoIGFncmVlIHRvIGFuZCBhcmUKKwkJICogdGhlIHNhbWUgdHlwZSAobGV2ZWwsIGVkZ2UsIHBvbGFyaXR5KS4gU28gYm90aCBmbGFnCisJCSAqIGZpZWxkcyBtdXN0IGhhdmUgSVJRRl9TSEFSRUQgc2V0IGFuZCB0aGUgYml0cyB3aGljaAorCQkgKiBzZXQgdGhlIHRyaWdnZXIgdHlwZSBtdXN0IG1hdGNoLgorCQkgKi8KKwkJaWYgKCEoKG9sZC0+ZmxhZ3MgJiBuZXctPmZsYWdzKSAmIElSUUZfU0hBUkVEKSB8fAorCQkgICAgKChvbGQtPmZsYWdzIF4gbmV3LT5mbGFncykgJiBJUlFGX1RSSUdHRVJfTUFTSykpCiAJCQlnb3RvIG1pc21hdGNoOwogCi0jaWYgZGVmaW5lZChBUkNIX0hBU19JUlFfUEVSX0NQVSkgJiYgZGVmaW5lZChTQV9QRVJDUFVfSVJRKQorI2lmIGRlZmluZWQoQ09ORklHX0lSUV9QRVJfQ1BVKQogCQkvKiBBbGwgaGFuZGxlcnMgbXVzdCBhZ3JlZSBvbiBwZXItY3B1bmVzcyAqLwotCQlpZiAoKG9sZC0+ZmxhZ3MgJiBJUlFfUEVSX0NQVSkgIT0gKG5ldy0+ZmxhZ3MgJiBJUlFfUEVSX0NQVSkpCisJCWlmICgob2xkLT5mbGFncyAmIElSUUZfUEVSQ1BVKSAhPQorCQkgICAgKG5ldy0+ZmxhZ3MgJiBJUlFGX1BFUkNQVSkpCiAJCQlnb3RvIG1pc21hdGNoOwogI2VuZGlmCiAKQEAgLTIyMiwyMCArMjUwLDQ1IEBACiAJfQogCiAJKnAgPSBuZXc7Ci0jaWYgZGVmaW5lZChBUkNIX0hBU19JUlFfUEVSX0NQVSkgJiYgZGVmaW5lZChTQV9QRVJDUFVfSVJRKQotCWlmIChuZXctPmZsYWdzICYgU0FfUEVSQ1BVX0lSUSkKKyNpZiBkZWZpbmVkKENPTkZJR19JUlFfUEVSX0NQVSkKKwlpZiAobmV3LT5mbGFncyAmIElSUUZfUEVSQ1BVKQogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7CiAjZW5kaWYKIAlpZiAoIXNoYXJlZCkgewotCQlkZXNjLT5kZXB0aCA9IDA7Ci0JCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9ESVNBQkxFRCB8IElSUV9BVVRPREVURUNUIHwKLQkJCQkgIElSUV9XQUlUSU5HIHwgSVJRX0lOUFJPR1JFU1MpOwotCQlpZiAoZGVzYy0+aGFuZGxlci0+c3RhcnR1cCkKLQkJCWRlc2MtPmhhbmRsZXItPnN0YXJ0dXAoaXJxKTsKLQkJZWxzZQotCQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlycSk7CisJCWlycV9jaGlwX3NldF9kZWZhdWx0cyhkZXNjLT5jaGlwKTsKKworCQkvKiBTZXR1cCB0aGUgdHlwZSAobGV2ZWwsIGVkZ2UgcG9sYXJpdHkpIGlmIGNvbmZpZ3VyZWQ6ICovCisJCWlmIChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spIHsKKwkJCWlmIChkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPnNldF90eXBlKQorCQkJCWRlc2MtPmNoaXAtPnNldF90eXBlKGlycSwKKwkJCQkJCW5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSyk7CisJCQllbHNlCisJCQkJLyoKKwkJCQkgKiBJUlFGX1RSSUdHRVJfKiBidXQgdGhlIFBJQyBkb2VzIG5vdCBzdXBwb3J0CisJCQkJICogbXVsdGlwbGUgZmxvdy10eXBlcz8KKwkJCQkgKi8KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBJUlFGX1RSSUdHRVIgc2V0X3R5cGUgIgorCQkJCSAgICAgICAiZnVuY3Rpb24gZm9yIElSUSAlZCAoJXMpXG4iLCBpcnEsCisJCQkJICAgICAgIGRlc2MtPmNoaXAgPyBkZXNjLT5jaGlwLT5uYW1lIDoKKwkJCQkgICAgICAgInVua25vd24iKTsKKwkJfSBlbHNlCisJCQljb21wYXRfaXJxX2NoaXBfc2V0X2RlZmF1bHRfaGFuZGxlcihkZXNjKTsKKworCQlkZXNjLT5zdGF0dXMgJj0gfihJUlFfQVVUT0RFVEVDVCB8IElSUV9XQUlUSU5HIHwKKwkJCQkgIElSUV9JTlBST0dSRVNTKTsKKworCQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9BVVRPRU4pKSB7CisJCQlkZXNjLT5kZXB0aCA9IDA7CisJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9ESVNBQkxFRDsKKwkJCWlmIChkZXNjLT5jaGlwLT5zdGFydHVwKQorCQkJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKKwkJCWVsc2UKKwkJCQlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsKKwkJfSBlbHNlCisJCQkvKiBVbmRvIG5lc3RlZCBkaXNhYmxlczogKi8KKwkJCWRlc2MtPmRlcHRoID0gMTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jayxmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJbmV3LT5pcnEgPSBpcnE7CiAJcmVnaXN0ZXJfaXJxX3Byb2MoaXJxKTsKQEAgLTI0Niw4ICsyOTksOCBAQAogCiBtaXNtYXRjaDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCEobmV3LT5mbGFncyAmIFNBX1BST0JFSVJRKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpcnEgaGFuZGxlciBtaXNtYXRjaFxuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoIShuZXctPmZsYWdzICYgSVJRRl9QUk9CRV9TSEFSRUQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSVJRIGhhbmRsZXIgdHlwZSBtaXNtYXRjaCBmb3IgSVJRICVkXG4iLCBpcnEpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogCXJldHVybiAtRUJVU1k7CkBAIC0yNzgsMTAgKzMzMSwxMCBAQAogCQlyZXR1cm47CiAKIAlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcCA9ICZkZXNjLT5hY3Rpb247CiAJZm9yICg7OykgewotCQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uID0gKnA7CisJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiA9ICpwOwogCiAJCWlmIChhY3Rpb24pIHsKIAkJCXN0cnVjdCBpcnFhY3Rpb24gKipwcCA9IHA7CkBAIC0yOTUsMTggKzM0OCwxOCBAQAogCiAJCQkvKiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IFVNTCwgbWlnaHQgZGlzYXBwZWFyIG9uZSBkYXkuKi8KICNpZmRlZiBDT05GSUdfSVJRX1JFTEVBU0VfTUVUSE9ECi0JCQlpZiAoZGVzYy0+aGFuZGxlci0+cmVsZWFzZSkKLQkJCQlkZXNjLT5oYW5kbGVyLT5yZWxlYXNlKGlycSwgZGV2X2lkKTsKKwkJCWlmIChkZXNjLT5jaGlwLT5yZWxlYXNlKQorCQkJCWRlc2MtPmNoaXAtPnJlbGVhc2UoaXJxLCBkZXZfaWQpOwogI2VuZGlmCiAKIAkJCWlmICghZGVzYy0+YWN0aW9uKSB7CiAJCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJCQlpZiAoZGVzYy0+aGFuZGxlci0+c2h1dGRvd24pCi0JCQkJCWRlc2MtPmhhbmRsZXItPnNodXRkb3duKGlycSk7CisJCQkJaWYgKGRlc2MtPmNoaXAtPnNodXRkb3duKQorCQkJCQlkZXNjLT5jaGlwLT5zaHV0ZG93bihpcnEpOwogCQkJCWVsc2UKLQkJCQkJZGVzYy0+aGFuZGxlci0+ZGlzYWJsZShpcnEpOworCQkJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CiAJCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAkJCXVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgYWN0aW9uKTsKIAogCQkJLyogTWFrZSBzdXJlIGl0J3Mgbm90IGJlaW5nIHVzZWQgb24gYW5vdGhlciBDUFUgKi8KQEAgLTMxNCwxMiArMzY3LDExIEBACiAJCQlrZnJlZShhY3Rpb24pOwogCQkJcmV0dXJuOwogCQl9Ci0JCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgZnJlZSBJUlElZFxuIixpcnEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBhbHJlYWR5LWZyZWUgSVJRICVkXG4iLCBpcnEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woZnJlZV9pcnEpOwogCiAvKioKQEAgLTM0NiwyOCArMzk4LDM2IEBACiAgKgogICoJRmxhZ3M6CiAgKgotICoJU0FfU0hJUlEJCUludGVycnVwdCBpcyBzaGFyZWQKLSAqCVNBX0lOVEVSUlVQVAkJRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIHdoaWxlIHByb2Nlc3NpbmcKLSAqCVNBX1NBTVBMRV9SQU5ET00JVGhlIGludGVycnVwdCBjYW4gYmUgdXNlZCBmb3IgZW50cm9weQorICoJSVJRRl9TSEFSRUQJCUludGVycnVwdCBpcyBzaGFyZWQKKyAqCUlSUUZfRElTQUJMRUQJRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIHdoaWxlIHByb2Nlc3NpbmcKKyAqCUlSUUZfU0FNUExFX1JBTkRPTQlUaGUgaW50ZXJydXB0IGNhbiBiZSB1c2VkIGZvciBlbnRyb3B5CiAgKgogICovCiBpbnQgcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKIAkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCi0JCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGNvbnN0IGNoYXIgKiBkZXZuYW1lLCB2b2lkICpkZXZfaWQpCisJCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpbnQgcmV0dmFsOwogCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwkvKgorCSAqIExvY2tkZXAgd2FudHMgYXRvbWljIGludGVycnVwdCBoYW5kbGVyczoKKwkgKi8KKwlpcnFmbGFncyB8PSBTQV9JTlRFUlJVUFQ7CisjZW5kaWYKIAkvKgogCSAqIFNhbml0eS1jaGVjazogc2hhcmVkIGludGVycnVwdHMgbXVzdCBwYXNzIGluIGEgcmVhbCBkZXYtSUQsCiAJICogb3RoZXJ3aXNlIHdlJ2xsIGhhdmUgdHJvdWJsZSBsYXRlciB0cnlpbmcgdG8gZmlndXJlIG91dAogCSAqIHdoaWNoIGludGVycnVwdCBpcyB3aGljaCAobWVzc2VzIHVwIHRoZSBpbnRlcnJ1cHQgZnJlZWluZwogCSAqIGxvZ2ljIGV0YykuCiAJICovCi0JaWYgKChpcnFmbGFncyAmIFNBX1NISVJRKSAmJiAhZGV2X2lkKQorCWlmICgoaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkgJiYgIWRldl9pZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGlycSA+PSBOUl9JUlFTKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTk9SRVFVRVNUKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zOTAsNiArNDUwLDUgQEAKIAogCXJldHVybiByZXR2YWw7CiB9Ci0KIEVYUE9SVF9TWU1CT0wocmVxdWVzdF9pcnEpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwppbmRleCBhMTJkMDBlLi5hNTdlYmU5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCisrKyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKQEAgLTMsMTkgKzMsMTkgQEAKIAogdm9pZCBzZXRfcGVuZGluZ19pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCiB7Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPm1vdmVfaXJxID0gMTsKLQlwZW5kaW5nX2lycV9jcHVtYXNrW2lycV0gPSBtYXNrOworCWlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrID0gbWFzazsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJY3B1bWFza190IHRtcDsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2NwKGlycSk7CiAKIAlpZiAobGlrZWx5KCFkZXNjLT5tb3ZlX2lycSkpCiAJCXJldHVybjsKQEAgLTMwLDE1ICszMCwxNSBAQAogCiAJZGVzYy0+bW92ZV9pcnEgPSAwOwogCi0JaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkocGVuZGluZ19pcnFfY3B1bWFza1tpcnFdKSkpCisJaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkoaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2spKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFkZXNjLT5oYW5kbGVyLT5zZXRfYWZmaW5pdHkpCisJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCiAJCXJldHVybjsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmZGVzYy0+bG9jayk7CiAKLQljcHVzX2FuZCh0bXAsIHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSwgY3B1X29ubGluZV9tYXApOworCWNwdXNfYW5kKHRtcCwgaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2ssIGNwdV9vbmxpbmVfbWFwKTsKIAogCS8qCiAJICogSWYgdGhlcmUgd2FzIGEgdmFsaWQgbWFzayB0byB3b3JrIHdpdGgsIHBsZWFzZQpAQCAtNTEsMTIgKzUxLDEyIEBACiAJICovCiAJaWYgKGxpa2VseSghY3B1c19lbXB0eSh0bXApKSkgewogCQlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpCi0JCQlkZXNjLT5oYW5kbGVyLT5kaXNhYmxlKGlycSk7CisJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7CiAKLQkJZGVzYy0+aGFuZGxlci0+c2V0X2FmZmluaXR5KGlycSx0bXApOworCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLHRtcCk7CiAKIAkJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKQotCQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlycSk7CisJCQlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsKIAl9Ci0JY3B1c19jbGVhcihwZW5kaW5nX2lycV9jcHVtYXNrW2lycV0pOworCWNwdXNfY2xlYXIoaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2spOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCBhZmFjZDZmLi42MDdjNzgwIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtMTIsMTUgKzEyLDEwIEBACiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKIAotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdF9pcnFfZGlyLCAqaXJxX2RpcltOUl9JUlFTXTsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3RfaXJxX2RpcjsKIAogI2lmZGVmIENPTkZJR19TTVAKIAotLyoKLSAqIFRoZSAvcHJvYy9pcnEvPGlycT4vc21wX2FmZmluaXR5IHZhbHVlczoKLSAqLwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc21wX2FmZmluaXR5X2VudHJ5W05SX0lSUVNdOwotCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKIHZvaWQgcHJvY19zZXRfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrX3ZhbCkKIHsKQEAgLTM2LDE1ICszMSwxNSBAQAogdm9pZCBwcm9jX3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2tfdmFsKQogewogCXNldF9iYWxhbmNlX2lycV9hZmZpbml0eShpcnEsIG1hc2tfdmFsKTsKLQlpcnFfYWZmaW5pdHlbaXJxXSA9IG1hc2tfdmFsOwotCWlycV9kZXNjW2lycV0uaGFuZGxlci0+c2V0X2FmZmluaXR5KGlycSwgbWFza192YWwpOworCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrX3ZhbDsKKwlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2tfdmFsKTsKIH0KICNlbmRpZgogCiBzdGF0aWMgaW50IGlycV9hZmZpbml0eV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCWludCBsZW4gPSBjcHVtYXNrX3NjbnByaW50ZihwYWdlLCBjb3VudCwgaXJxX2FmZmluaXR5Wyhsb25nKWRhdGFdKTsKKwlpbnQgbGVuID0gY3B1bWFza19zY25wcmludGYocGFnZSwgY291bnQsIGlycV9kZXNjWyhsb25nKWRhdGFdLmFmZmluaXR5KTsKIAogCWlmIChjb3VudCAtIGxlbiA8IDIpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTksNyArNTQsNyBAQAogCXVuc2lnbmVkIGludCBpcnEgPSAoaW50KShsb25nKWRhdGEsIGZ1bGxfY291bnQgPSBjb3VudCwgZXJyOwogCWNwdW1hc2tfdCBuZXdfdmFsdWUsIHRtcDsKIAotCWlmICghaXJxX2Rlc2NbaXJxXS5oYW5kbGVyLT5zZXRfYWZmaW5pdHkgfHwgbm9faXJxX2FmZmluaXR5KQorCWlmICghaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkgfHwgbm9faXJxX2FmZmluaXR5KQogCQlyZXR1cm4gLUVJTzsKIAogCWVyciA9IGNwdW1hc2tfcGFyc2UoYnVmZmVyLCBjb3VudCwgbmV3X3ZhbHVlKTsKQEAgLTEwMiw3ICs5Nyw3IEBACiB7CiAJY2hhciBuYW1lIFtNQVhfTkFNRUxFTl07CiAKLQlpZiAoIWlycV9kaXJbaXJxXSB8fCBhY3Rpb24tPmRpciB8fCAhYWN0aW9uLT5uYW1lIHx8CisJaWYgKCFpcnFfZGVzY1tpcnFdLmRpciB8fCBhY3Rpb24tPmRpciB8fCAhYWN0aW9uLT5uYW1lIHx8CiAJCQkJCSFuYW1lX3VuaXF1ZShpcnEsIGFjdGlvbikpCiAJCXJldHVybjsKIApAQCAtMTEwLDcgKzEwNSw3IEBACiAJc25wcmludGYobmFtZSwgTUFYX05BTUVMRU4sICIlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxLzEyMzQvaGFuZGxlci8gKi8KLQlhY3Rpb24tPmRpciA9IHByb2NfbWtkaXIobmFtZSwgaXJxX2RpcltpcnFdKTsKKwlhY3Rpb24tPmRpciA9IHByb2NfbWtkaXIobmFtZSwgaXJxX2Rlc2NbaXJxXS5kaXIpOwogfQogCiAjdW5kZWYgTUFYX05BTUVMRU4KQEAgLTEyMiwyMiArMTE3LDIyIEBACiAJY2hhciBuYW1lIFtNQVhfTkFNRUxFTl07CiAKIAlpZiAoIXJvb3RfaXJxX2RpciB8fAotCQkoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID09ICZub19pcnFfdHlwZSkgfHwKLQkJCWlycV9kaXJbaXJxXSkKKwkJKGlycV9kZXNjW2lycV0uY2hpcCA9PSAmbm9faXJxX2NoaXApIHx8CisJCQlpcnFfZGVzY1tpcnFdLmRpcikKIAkJcmV0dXJuOwogCiAJbWVtc2V0KG5hbWUsIDAsIE1BWF9OQU1FTEVOKTsKIAlzcHJpbnRmKG5hbWUsICIlZCIsIGlycSk7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxLzEyMzQgKi8KLQlpcnFfZGlyW2lycV0gPSBwcm9jX21rZGlyKG5hbWUsIHJvb3RfaXJxX2Rpcik7CisJaXJxX2Rlc2NbaXJxXS5kaXIgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3RfaXJxX2Rpcik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJewogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCiAJCS8qIGNyZWF0ZSAvcHJvYy9pcnEvPGlycT4vc21wX2FmZmluaXR5ICovCi0JCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNtcF9hZmZpbml0eSIsIDA2MDAsIGlycV9kaXJbaXJxXSk7CisJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNtcF9hZmZpbml0eSIsIDA2MDAsIGlycV9kZXNjW2lycV0uZGlyKTsKIAogCQlpZiAoZW50cnkpIHsKIAkJCWVudHJ5LT5ubGluayA9IDE7CkBAIC0xNDUsNyArMTQwLDYgQEAKIAkJCWVudHJ5LT5yZWFkX3Byb2MgPSBpcnFfYWZmaW5pdHlfcmVhZF9wcm9jOwogCQkJZW50cnktPndyaXRlX3Byb2MgPSBpcnFfYWZmaW5pdHlfd3JpdGVfcHJvYzsKIAkJfQotCQlzbXBfYWZmaW5pdHlfZW50cnlbaXJxXSA9IGVudHJ5OwogCX0KICNlbmRpZgogfQpAQCAtMTU1LDcgKzE0OSw3IEBACiB2b2lkIHVucmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKIAlpZiAoYWN0aW9uLT5kaXIpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGFjdGlvbi0+ZGlyLT5uYW1lLCBpcnFfZGlyW2lycV0pOworCQlyZW1vdmVfcHJvY19lbnRyeShhY3Rpb24tPmRpci0+bmFtZSwgaXJxX2Rlc2NbaXJxXS5kaXIpOwogfQogCiB2b2lkIGluaXRfaXJxX3Byb2Modm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcmVzZW5kLmMgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MmY5MWJhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9yZXNlbmQuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogbGludXgva2VybmVsL2lycS9yZXNlbmQuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5OC0yMDA2IExpbnVzIFRvcnZhbGRzLCBJbmdvIE1vbG5hcgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIFRob21hcyBHbGVpeG5lcgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSVJRLXJlc2VuZCBjb2RlCisgKgorICogSWYgdGhlIGludGVycnVwdCBpcyB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCwgd2UgdHJ5IHRvIHJlLXJ1biBpdC4KKyAqIFdlIGNhbid0IGRpcmVjdGx5IHJ1biBpdCBmcm9tIGhlcmUgc2luY2UgdGhlIGNhbGxlciBtaWdodCBiZSBpbiBhbgorICogaW50ZXJydXB0LXByb3RlY3RlZCByZWdpb24uIE5vdCBhbGwgaXJxIGNvbnRyb2xsZXIgY2hpcHMgY2FuCisgKiByZXRyaWdnZXIgaW50ZXJydXB0cyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNvIGluIHRob3NlIGNhc2VzCisgKiB3ZSBhbGxvdyB0aGUgcmVzZW5kaW5nIG9mIElSUXMgdmlhIGEgdGFza2xldC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbHMuaCIKKworI2lmZGVmIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQKKworLyogQml0bWFwIHRvIGhhbmRsZSBzb2Z0d2FyZSByZXNlbmQgb2YgaW50ZXJydXB0czogKi8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChpcnFzX3Jlc2VuZCwgTlJfSVJRUyk7CisKKy8qCisgKiBSdW4gc29mdHdhcmUgcmVzZW5kcyBvZiBJUlEncworICovCitzdGF0aWMgdm9pZCByZXNlbmRfaXJxcyh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJaW50IGlycTsKKworCXdoaWxlICghYml0bWFwX2VtcHR5KGlycXNfcmVzZW5kLCBOUl9JUlFTKSkgeworCQlpcnEgPSBmaW5kX2ZpcnN0X2JpdChpcnFzX3Jlc2VuZCwgTlJfSVJRUyk7CisJCWNsZWFyX2JpdChpcnEsIGlycXNfcmVzZW5kKTsKKwkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlkZXNjLT5oYW5kbGVfaXJxKGlycSwgZGVzYywgTlVMTCk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9Cit9CisKKy8qIFRhc2tsZXQgdG8gaGFuZGxlIHJlc2VuZDogKi8KK3N0YXRpYyBERUNMQVJFX1RBU0tMRVQocmVzZW5kX3Rhc2tsZXQsIHJlc2VuZF9pcnFzLCAwKTsKKworI2VuZGlmCisKKy8qCisgKiBJUlEgcmVzZW5kCisgKgorICogSXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgZGVzYy0+bG9jayBoZWxkLgorICovCit2b2lkIGNoZWNrX2lycV9yZXNlbmQoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIGJlZm9yZSByZXNlbmRpbmcgaXQ6CisJICovCisJZGVzYy0+Y2hpcC0+ZW5hYmxlKGlycSk7CisKKwlpZiAoKHN0YXR1cyAmIChJUlFfUEVORElORyB8IElSUV9SRVBMQVkpKSA9PSBJUlFfUEVORElORykgeworCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9QRU5ESU5HOworCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgfCBJUlFfUkVQTEFZOworCisJCWlmICghZGVzYy0+Y2hpcCB8fCAhZGVzYy0+Y2hpcC0+cmV0cmlnZ2VyIHx8CisJCQkJCSFkZXNjLT5jaGlwLT5yZXRyaWdnZXIoaXJxKSkgeworI2lmZGVmIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQKKwkJCS8qIFNldCBpdCBwZW5kaW5nIGFuZCBhY3RpdmF0ZSB0aGUgc29mdGlycTogKi8KKwkJCXNldF9iaXQoaXJxLCBpcnFzX3Jlc2VuZCk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZyZXNlbmRfdGFza2xldCk7CisjZW5kaWYKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBiMmZiM2MxLi40MTdlOTgwIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xNiwzOSArMTYsMzkgQEAKIC8qCiAgKiBSZWNvdmVyeSBoYW5kbGVyIGZvciBtaXNyb3V0ZWQgaW50ZXJydXB0cy4KICAqLwotCiBzdGF0aWMgaW50IG1pc3JvdXRlZF9pcnEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGk7Ci0JaXJxX2Rlc2NfdCAqZGVzYzsKIAlpbnQgb2sgPSAwOwogCWludCB3b3JrID0gMDsJLyogRGlkIHdlIGRvIHdvcmsgZm9yIGEgcmVhbCBJUlEgKi8KIAotCWZvcihpID0gMTsgaSA8IE5SX0lSUVM7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpOwogCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAKIAkJaWYgKGkgPT0gaXJxKQkvKiBBbHJlYWR5IHRyaWVkICovCiAJCQljb250aW51ZTsKLQkJZGVzYyA9ICZpcnFfZGVzY1tpXTsKKwogCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJCS8qIEFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIHByb2Nlc3NvciAqLwogCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpIHsKIAkJCS8qCiAJCQkgKiBBbHJlYWR5IHJ1bm5pbmc6IElmIGl0IGlzIHNoYXJlZCBnZXQgdGhlIG90aGVyCiAJCQkgKiBDUFUgdG8gZ28gbG9va2luZyBmb3Igb3VyIG15c3RlcnkgaW50ZXJydXB0IHRvbwogCQkJICovCi0JCQlpZiAoZGVzYy0+YWN0aW9uICYmIChkZXNjLT5hY3Rpb24tPmZsYWdzICYgU0FfU0hJUlEpKQorCQkJaWYgKGRlc2MtPmFjdGlvbiAmJiAoZGVzYy0+YWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSkKIAkJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFTkRJTkc7CiAJCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBIb25vdXIgdGhlIG5vcm1hbCBJUlEgbG9ja2luZyAqLwogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CisJCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCiAJCXdoaWxlIChhY3Rpb24pIHsKIAkJCS8qIE9ubHkgc2hhcmVkIElSUSBoYW5kbGVycyBhcmUgc2FmZSB0byBjYWxsICovCi0JCQlpZiAoYWN0aW9uLT5mbGFncyAmIFNBX1NISVJRKSB7CisJCQlpZiAoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB7CiAJCQkJaWYgKGFjdGlvbi0+aGFuZGxlcihpLCBhY3Rpb24tPmRldl9pZCwgcmVncykgPT0KIAkJCQkJCUlSUV9IQU5ETEVEKQogCQkJCQlvayA9IDE7CkBAIC02Miw5ICs2Miw4IEBACiAKIAkJLyoKIAkJICogV2hpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBhIGZpeHVwIHNvbWVvbmUgcXVldWVkIGEgcmVhbAotCQkgKiBJUlEgY2xhc2hpbmcgd2l0aCBvdXIgd2FsaworCQkgKiBJUlEgY2xhc2hpbmcgd2l0aCBvdXIgd2FsazoKIAkJICovCi0KIAkJd2hpbGUgKChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykgJiYgYWN0aW9uKSB7CiAJCQkvKgogCQkJICogUGVyZm9ybSByZWFsIElSUSBwcm9jZXNzaW5nIGZvciB0aGUgSVJRIHdlIGRlZmVycmVkCkBAIC04MCw4ICs3OSw4IEBACiAJCSAqIElmIHdlIGRpZCBhY3R1YWwgd29yayBmb3IgdGhlIHJlYWwgSVJRIGxpbmUgd2UgbXVzdCBsZXQgdGhlCiAJCSAqIElSUSBjb250cm9sbGVyIGNsZWFuIHVwIHRvbwogCQkgKi8KLQkJaWYod29yaykKLQkJCWRlc2MtPmhhbmRsZXItPmVuZChpKTsKKwkJaWYgKHdvcmsgJiYgZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5lbmQpCisJCQlkZXNjLT5jaGlwLT5lbmQoaSk7CiAJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAl9CiAJLyogU28gdGhlIGNhbGxlciBjYW4gYWRqdXN0IHRoZSBpcnEgZXJyb3IgY291bnRzICovCkBAIC0xMDAsNyArOTksOCBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1fX3JlcG9ydF9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycV9kZXNjX3QgKmRlc2MsIGlycXJldHVybl90IGFjdGlvbl9yZXQpCitfX3JlcG9ydF9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJIGlycXJldHVybl90IGFjdGlvbl9yZXQpCiB7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCkBAIC0xMTMsNiArMTEzLDcgQEAKIAl9CiAJZHVtcF9zdGFjaygpOwogCXByaW50ayhLRVJOX0VSUiAiaGFuZGxlcnM6XG4iKTsKKwogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAl3aGlsZSAoYWN0aW9uKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiWzwlcD5dIiwgYWN0aW9uLT5oYW5kbGVyKTsKQEAgLTEyMyw3ICsxMjQsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcmVwb3J0X2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxX2Rlc2NfdCAqZGVzYywgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCkKK3N0YXRpYyB2b2lkCityZXBvcnRfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGlycXJldHVybl90IGFjdGlvbl9yZXQpCiB7CiAJc3RhdGljIGludCBjb3VudCA9IDEwMDsKIApAQCAtMTMzLDggKzEzNSw4IEBACiAJfQogfQogCi12b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIGlycV9kZXNjX3QgKmRlc2MsIGlycXJldHVybl90IGFjdGlvbl9yZXQsCi0JCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90ZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkgICAgaXJxcmV0dXJuX3QgYWN0aW9uX3JldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKHVubGlrZWx5KGFjdGlvbl9yZXQgIT0gSVJRX0hBTkRMRUQpKSB7CiAJCWRlc2MtPmlycXNfdW5oYW5kbGVkKys7CkBAIC0xNjYsNyArMTY4LDggQEAKIAkJICovCiAJCXByaW50ayhLRVJOX0VNRVJHICJEaXNhYmxpbmcgSVJRICMlZFxuIiwgaXJxKTsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJZGVzYy0+aGFuZGxlci0+ZGlzYWJsZShpcnEpOworCQlkZXNjLT5kZXB0aCA9IDE7CisJCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKIAl9CiAJZGVzYy0+aXJxc191bmhhbmRsZWQgPSAwOwogfQpAQCAtMTc3LDYgKzE4MCw3IEBACiB7CiAJbm9pcnFkZWJ1ZyA9IDE7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSVJRIGxvY2t1cCBkZXRlY3Rpb24gZGlzYWJsZWRcbiIpOworCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE4Nyw2ICsxOTEsNyBAQAogCWlycWZpeHVwID0gMTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICJNaXNyb3V0ZWQgSVJRIGZpeHVwIHN1cHBvcnQgZW5hYmxlZC5cbiIpOwogCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoaXMgbWF5IGltcGFjdCBzeXN0ZW0gcGVyZm9ybWFuY2UuXG4iKTsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDU4ZjBmMzguLjUwMDg3ZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0xMDQyLDcgKzEwNDIsNiBAQAogCiB2b2lkIGNyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBraW1hZ2UgKmltYWdlOwogCWludCBsb2NrZWQ7CiAKIApAQCAtMTA1NiwxMiArMTA1NSwxMSBAQAogCSAqLwogCWxvY2tlZCA9IHhjaGcoJmtleGVjX2xvY2ssIDEpOwogCWlmICghbG9ja2VkKSB7Ci0JCWltYWdlID0geGNoZygma2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpOwotCQlpZiAoaW1hZ2UpIHsKKwkJaWYgKGtleGVjX2NyYXNoX2ltYWdlKSB7CiAJCQlzdHJ1Y3QgcHRfcmVncyBmaXhlZF9yZWdzOwogCQkJY3Jhc2hfc2V0dXBfcmVncygmZml4ZWRfcmVncywgcmVncyk7CiAJCQltYWNoaW5lX2NyYXNoX3NodXRkb3duKCZmaXhlZF9yZWdzKTsKLQkJCW1hY2hpbmVfa2V4ZWMoaW1hZ2UpOworCQkJbWFjaGluZV9rZXhlYyhrZXhlY19jcmFzaF9pbWFnZSk7CiAJCX0KIAkJeGNoZygma2V4ZWNfbG9jaywgMCk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggMjBhOTk3Yy4uMWQzMmRlZiAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC0yMCw3ICsyMCw2IEBACiAqLwogI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC0yMzQsNyArMjMzLDcgQEAKIGludCBjYWxsX3VzZXJtb2RlaGVscGVyX2tleXMoY2hhciAqcGF0aCwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLAogCQkJICAgICBzdHJ1Y3Qga2V5ICpzZXNzaW9uX2tleXJpbmcsIGludCB3YWl0KQogewotCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKIAlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHN1Yl9pbmZvID0gewogCQkuY29tcGxldGUJPSAmZG9uZSwKIAkJLnBhdGgJCT0gcGF0aCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9rc3lzZnMuYyBiL2tlcm5lbC9rc3lzZnMuYwppbmRleCA5ZTI4NDc4Li5lMGZmZTRhYiAxMDA2NDQKLS0tIGEva2VybmVsL2tzeXNmcy5jCisrKyBiL2tlcm5lbC9rc3lzZnMuYwpAQCAtOCw3ICs4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyY2E3OAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTAsMCArMSwyNzAyIEBACisvKgorICoga2VybmVsL2xvY2tkZXAuYworICoKKyAqIFJ1bnRpbWUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IKKyAqCisgKiBTdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICogdGhpcyBjb2RlIG1hcHMgYWxsIHRoZSBsb2NrIGRlcGVuZGVuY2llcyBhcyB0aGV5IG9jY3VyIGluIGEgbGl2ZSBrZXJuZWwKKyAqIGFuZCB3aWxsIHdhcm4gYWJvdXQgdGhlIGZvbGxvd2luZyBjbGFzc2VzIG9mIGxvY2tpbmcgYnVnczoKKyAqCisgKiAtIGxvY2sgaW52ZXJzaW9uIHNjZW5hcmlvcworICogLSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY2llcworICogLSBoYXJkaXJxL3NvZnRpcnEgc2FmZS91bnNhZmUgbG9ja2luZyBidWdzCisgKgorICogQnVncyBhcmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUgY3VycmVudCBsb2NraW5nIHNjZW5hcmlvIGRvZXMgbm90IGNhdXNlCisgKiBhbnkgZGVhZGxvY2sgYXQgdGhpcyBwb2ludC4KKyAqCisgKiBJLmUuIGlmIGFueXRpbWUgaW4gdGhlIHBhc3QgdHdvIGxvY2tzIHdlcmUgdGFrZW4gaW4gYSBkaWZmZXJlbnQgb3JkZXIsCisgKiBldmVuIGlmIGl0IGhhcHBlbmVkIGZvciBhbm90aGVyIHRhc2ssIGV2ZW4gaWYgdGhvc2Ugd2VyZSBkaWZmZXJlbnQKKyAqIGxvY2tzIChidXQgb2YgdGhlIHNhbWUgY2xhc3MgYXMgdGhpcyBsb2NrKSwgdGhpcyBjb2RlIHdpbGwgZGV0ZWN0IGl0LgorICoKKyAqIFRoYW5rcyB0byBBcmphbiB2YW4gZGUgVmVuIGZvciBjb21pbmcgdXAgd2l0aCB0aGUgaW5pdGlhbCBpZGVhIG9mCisgKiBtYXBwaW5nIGxvY2sgZGVwZW5kZW5jaWVzIHJ1bnRpbWUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKworI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCisjaW5jbHVkZSAibG9ja2RlcF9pbnRlcm5hbHMuaCIKKworLyoKKyAqIGhhc2hfbG9jazogcHJvdGVjdHMgdGhlIGxvY2tkZXAgaGFzaGVzIGFuZCBjbGFzcy9saXN0L2hhc2ggYWxsb2NhdG9ycy4KKyAqCisgKiBUaGlzIGlzIG9uZSBvZiB0aGUgcmFyZSBleGNlcHRpb25zIHdoZXJlIGl0J3MganVzdGlmaWVkCisgKiB0byB1c2UgYSByYXcgc3BpbmxvY2sgLSB3ZSByZWFsbHkgZG9udCB3YW50IHRoZSBzcGlubG9jaworICogY29kZSB0byByZWN1cnNlIGJhY2sgaW50byB0aGUgbG9ja2RlcCBjb2RlLgorICovCitzdGF0aWMgcmF3X3NwaW5sb2NrX3QgaGFzaF9sb2NrID0gKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKworc3RhdGljIGludCBsb2NrZGVwX2luaXRpYWxpemVkOworCit1bnNpZ25lZCBsb25nIG5yX2xpc3RfZW50cmllczsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19saXN0IGxpc3RfZW50cmllc1tNQVhfTE9DS0RFUF9FTlRSSUVTXTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbG9ja2RlcCBlbnRyeS4gKGFzc3VtZXMgaGFzaF9sb2NrIGhlbGQsIHJldHVybnMKKyAqIHdpdGggTlVMTCBvbiBmYWlsdXJlKQorICovCitzdGF0aWMgc3RydWN0IGxvY2tfbGlzdCAqYWxsb2NfbGlzdF9lbnRyeSh2b2lkKQoreworCWlmIChucl9saXN0X2VudHJpZXMgPj0gTUFYX0xPQ0tERVBfRU5UUklFUykgeworCQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwkJZGVidWdfbG9ja3Nfb2ZmKCk7CisJCXByaW50aygiQlVHOiBNQVhfTE9DS0RFUF9FTlRSSUVTIHRvbyBsb3chXG4iKTsKKwkJcHJpbnRrKCJ0dXJuaW5nIG9mZiB0aGUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBsaXN0X2VudHJpZXMgKyBucl9saXN0X2VudHJpZXMrKzsKK30KKworLyoKKyAqIEFsbCBkYXRhIHN0cnVjdHVyZXMgaGVyZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBnbG9iYWwgZGVidWdfbG9jay4KKyAqCisgKiBNdXRleCBrZXkgc3RydWN0cyBvbmx5IGdldCBhbGxvY2F0ZWQsIG9uY2UgZHVyaW5nIGJvb3R1cCwgYW5kIG5ldmVyCisgKiBnZXQgZnJlZWQgLSB0aGlzIHNpZ25pZmljYW50bHkgc2ltcGxpZmllcyB0aGUgZGVidWdnaW5nIGNvZGUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbnJfbG9ja19jbGFzc2VzOworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzIGxvY2tfY2xhc3Nlc1tNQVhfTE9DS0RFUF9LRVlTXTsKKworLyoKKyAqIFdlIGtlZXAgYSBnbG9iYWwgbGlzdCBvZiBhbGwgbG9jayBjbGFzc2VzLiBUaGUgbGlzdCBvbmx5IGdyb3dzLAorICogbmV2ZXIgc2hyaW5rcy4gVGhlIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIHRoZSBsb2NrZGVwCisgKiBzcGlubG9jayBsb2NrIGhlbGQuCisgKi8KK0xJU1RfSEVBRChhbGxfbG9ja19jbGFzc2VzKTsKKworLyoKKyAqIFRoZSBsb2NrZGVwIGNsYXNzZXMgYXJlIGluIGEgaGFzaC10YWJsZSBhcyB3ZWxsLCBmb3IgZmFzdCBsb29rdXA6CisgKi8KKyNkZWZpbmUgQ0xBU1NIQVNIX0JJVFMJCShNQVhfTE9DS0RFUF9LRVlTX0JJVFMgLSAxKQorI2RlZmluZSBDTEFTU0hBU0hfU0laRQkJKDFVTCA8PCBDTEFTU0hBU0hfQklUUykKKyNkZWZpbmUgQ0xBU1NIQVNIX01BU0sJCShDTEFTU0hBU0hfU0laRSAtIDEpCisjZGVmaW5lIF9fY2xhc3NoYXNoZm4oa2V5KQkoKCgodW5zaWduZWQgbG9uZylrZXkgPj4gQ0xBU1NIQVNIX0JJVFMpICsgKHVuc2lnbmVkIGxvbmcpa2V5KSAmIENMQVNTSEFTSF9NQVNLKQorI2RlZmluZSBjbGFzc2hhc2hlbnRyeShrZXkpCShjbGFzc2hhc2hfdGFibGUgKyBfX2NsYXNzaGFzaGZuKChrZXkpKSkKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2xhc3NoYXNoX3RhYmxlW0NMQVNTSEFTSF9TSVpFXTsKKwordW5zaWduZWQgbG9uZyBucl9sb2NrX2NoYWluczsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jaGFpbiBsb2NrX2NoYWluc1tNQVhfTE9DS0RFUF9DSEFJTlNdOworCisvKgorICogV2UgcHV0IHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hhaW5zIGludG8gYSBoYXNoLXRhYmxlIGFzIHdlbGwsIHRvIGNhY2hlCisgKiB0aGVpciBleGlzdGVuY2U6CisgKi8KKyNkZWZpbmUgQ0hBSU5IQVNIX0JJVFMJCShNQVhfTE9DS0RFUF9DSEFJTlNfQklUUy0xKQorI2RlZmluZSBDSEFJTkhBU0hfU0laRQkJKDFVTCA8PCBDSEFJTkhBU0hfQklUUykKKyNkZWZpbmUgQ0hBSU5IQVNIX01BU0sJCShDSEFJTkhBU0hfU0laRSAtIDEpCisjZGVmaW5lIF9fY2hhaW5oYXNoZm4oY2hhaW4pIFwKKwkJKCgoY2hhaW4gPj4gQ0hBSU5IQVNIX0JJVFMpICsgY2hhaW4pICYgQ0hBSU5IQVNIX01BU0spCisjZGVmaW5lIGNoYWluaGFzaGVudHJ5KGNoYWluKQkoY2hhaW5oYXNoX3RhYmxlICsgX19jaGFpbmhhc2hmbigoY2hhaW4pKSkKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2hhaW5oYXNoX3RhYmxlW0NIQUlOSEFTSF9TSVpFXTsKKworLyoKKyAqIFRoZSBoYXNoIGtleSBvZiB0aGUgbG9jayBkZXBlbmRlbmN5IGNoYWlucyBpcyBhIGhhc2ggaXRzZWxmIHRvbzoKKyAqIGl0J3MgYSBoYXNoIG9mIGFsbCBsb2NrcyB0YWtlbiB1cCB0byB0aGF0IGxvY2ssIGluY2x1ZGluZyB0aGF0IGxvY2suCisgKiBJdCdzIGEgNjQtYml0IGhhc2gsIGJlY2F1c2UgaXQncyBpbXBvcnRhbnQgZm9yIHRoZSBrZXlzIHRvIGJlCisgKiB1bmlxdWUuCisgKi8KKyNkZWZpbmUgaXRlcmF0ZV9jaGFpbl9rZXkoa2V5MSwga2V5MikgXAorCSgoKGtleTEpIDw8IE1BWF9MT0NLREVQX0tFWVNfQklUUy8yKSBeIFwKKwkoKGtleTEpID4+ICg2NC1NQVhfTE9DS0RFUF9LRVlTX0JJVFMvMikpIF4gXAorCShrZXkyKSkKKwordm9pZCBsb2NrZGVwX29mZih2b2lkKQoreworCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKys7Cit9CisKK0VYUE9SVF9TWU1CT0wobG9ja2RlcF9vZmYpOworCit2b2lkIGxvY2tkZXBfb24odm9pZCkKK3sKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbi0tOworfQorCitFWFBPUlRfU1lNQk9MKGxvY2tkZXBfb24pOworCitpbnQgbG9ja2RlcF9pbnRlcm5hbCh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiAhPSAwOworfQorCitFWFBPUlRfU1lNQk9MKGxvY2tkZXBfaW50ZXJuYWwpOworCisvKgorICogRGVidWdnaW5nIHN3aXRjaGVzOgorICovCisKKyNkZWZpbmUgVkVSQk9TRQkJCTAKKyNpZmRlZiBWRVJCT1NFCisjIGRlZmluZSBWRVJZX1ZFUkJPU0UJCTAKKyNlbmRpZgorCisjaWYgVkVSQk9TRQorIyBkZWZpbmUgSEFSRElSUV9WRVJCT1NFCTEKKyMgZGVmaW5lIFNPRlRJUlFfVkVSQk9TRQkxCisjZWxzZQorIyBkZWZpbmUgSEFSRElSUV9WRVJCT1NFCTAKKyMgZGVmaW5lIFNPRlRJUlFfVkVSQk9TRQkwCisjZW5kaWYKKworI2lmIFZFUkJPU0UgfHwgSEFSRElSUV9WRVJCT1NFIHx8IFNPRlRJUlFfVkVSQk9TRQorLyoKKyAqIFF1aWNrIGZpbHRlcmluZyBmb3IgaW50ZXJlc3RpbmcgZXZlbnRzOgorICovCitzdGF0aWMgaW50IGNsYXNzX2ZpbHRlcihzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCit7CisJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPT0gMSAmJgorCQkJIXN0cmNtcChjbGFzcy0+bmFtZSwgIiZybC0+bG9jayIpKQorCQlyZXR1cm4gMTsKKwlpZiAoY2xhc3MtPm5hbWVfdmVyc2lvbiA9PSAxICYmCisJCQkhc3RyY21wKGNsYXNzLT5uYW1lLCAiJm5pLT5tcmVjX2xvY2siKSkKKwkJcmV0dXJuIDE7CisJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPT0gMSAmJgorCQkJIXN0cmNtcChjbGFzcy0+bmFtZSwgIm1mdF9uaV9ydW5saXN0X2xvY2siKSkKKwkJcmV0dXJuIDE7CisJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPT0gMSAmJgorCQkJIXN0cmNtcChjbGFzcy0+bmFtZSwgIm1mdF9uaV9tcmVjX2xvY2siKSkKKwkJcmV0dXJuIDE7CisJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPT0gMSAmJgorCQkJIXN0cmNtcChjbGFzcy0+bmFtZSwgIiZ2b2wtPmxjbmJtcF9sb2NrIikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdmVyYm9zZShzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCit7CisjaWYgVkVSQk9TRQorCXJldHVybiBjbGFzc19maWx0ZXIoY2xhc3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKworc3RhdGljIGludCBoYXJkaXJxX3ZlcmJvc2Uoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQoreworI2lmIEhBUkRJUlFfVkVSQk9TRQorCXJldHVybiBjbGFzc19maWx0ZXIoY2xhc3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29mdGlycV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3sKKyNpZiBTT0ZUSVJRX1ZFUkJPU0UKKwlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisjZW5kaWYKKworLyoKKyAqIFN0YWNrLXRyYWNlOiB0aWdodGx5IHBhY2tlZCBhcnJheSBvZiBzdGFjayBiYWNrdHJhY2UKKyAqIGFkZHJlc3Nlcy4gUHJvdGVjdGVkIGJ5IHRoZSBoYXNoX2xvY2suCisgKi8KK3Vuc2lnbmVkIGxvbmcgbnJfc3RhY2tfdHJhY2VfZW50cmllczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWNrX3RyYWNlW01BWF9TVEFDS19UUkFDRV9FTlRSSUVTXTsKKworc3RhdGljIGludCBzYXZlX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJdHJhY2UtPm5yX2VudHJpZXMgPSAwOworCXRyYWNlLT5tYXhfZW50cmllcyA9IE1BWF9TVEFDS19UUkFDRV9FTlRSSUVTIC0gbnJfc3RhY2tfdHJhY2VfZW50cmllczsKKwl0cmFjZS0+ZW50cmllcyA9IHN0YWNrX3RyYWNlICsgbnJfc3RhY2tfdHJhY2VfZW50cmllczsKKworCXNhdmVfc3RhY2tfdHJhY2UodHJhY2UsIE5VTEwsIDAsIDMpOworCisJdHJhY2UtPm1heF9lbnRyaWVzID0gdHJhY2UtPm5yX2VudHJpZXM7CisKKwlucl9zdGFja190cmFjZV9lbnRyaWVzICs9IHRyYWNlLT5ucl9lbnRyaWVzOworCWlmIChERUJVR19MT0NLU19XQVJOX09OKG5yX3N0YWNrX3RyYWNlX2VudHJpZXMgPiBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUykpCisJCXJldHVybiAwOworCisJaWYgKG5yX3N0YWNrX3RyYWNlX2VudHJpZXMgPT0gTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMpIHsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCWlmIChkZWJ1Z19sb2Nrc19vZmYoKSkgeworCQkJcHJpbnRrKCJCVUc6IE1BWF9TVEFDS19UUkFDRV9FTlRSSUVTIHRvbyBsb3chXG4iKTsKKwkJCXByaW50aygidHVybmluZyBvZmYgdGhlIGxvY2tpbmcgY29ycmVjdG5lc3MgdmFsaWRhdG9yLlxuIik7CisJCQlkdW1wX3N0YWNrKCk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3Vuc2lnbmVkIGludCBucl9oYXJkaXJxX2NoYWluczsKK3Vuc2lnbmVkIGludCBucl9zb2Z0aXJxX2NoYWluczsKK3Vuc2lnbmVkIGludCBucl9wcm9jZXNzX2NoYWluczsKK3Vuc2lnbmVkIGludCBtYXhfbG9ja2RlcF9kZXB0aDsKK3Vuc2lnbmVkIGludCBtYXhfcmVjdXJzaW9uX2RlcHRoOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tERVAKKy8qCisgKiBXZSBjYW5ub3QgcHJpbnRrIGluIGVhcmx5IGJvb3R1cCBjb2RlLiBOb3QgZXZlbiBlYXJseV9wcmludGsoKQorICogbWlnaHQgd29yay4gU28gd2UgbWFyayBhbnkgaW5pdGlhbGl6YXRpb24gZXJyb3JzIGFuZCBwcmludGsKKyAqIGFib3V0IGl0IGxhdGVyIG9uLCBpbiBsb2NrZGVwX2luZm8oKS4KKyAqLworc3RhdGljIGludCBsb2NrZGVwX2luaXRfZXJyb3I7CisKKy8qCisgKiBWYXJpb3VzIGxvY2tkZXAgc3RhdGlzdGljczoKKyAqLworYXRvbWljX3QgY2hhaW5fbG9va3VwX2hpdHM7CithdG9taWNfdCBjaGFpbl9sb29rdXBfbWlzc2VzOworYXRvbWljX3QgaGFyZGlycXNfb25fZXZlbnRzOworYXRvbWljX3QgaGFyZGlycXNfb2ZmX2V2ZW50czsKK2F0b21pY190IHJlZHVuZGFudF9oYXJkaXJxc19vbjsKK2F0b21pY190IHJlZHVuZGFudF9oYXJkaXJxc19vZmY7CithdG9taWNfdCBzb2Z0aXJxc19vbl9ldmVudHM7CithdG9taWNfdCBzb2Z0aXJxc19vZmZfZXZlbnRzOworYXRvbWljX3QgcmVkdW5kYW50X3NvZnRpcnFzX29uOworYXRvbWljX3QgcmVkdW5kYW50X3NvZnRpcnFzX29mZjsKK2F0b21pY190IG5yX3VudXNlZF9sb2NrczsKK2F0b21pY190IG5yX2N5Y2xpY19jaGVja3M7CithdG9taWNfdCBucl9jeWNsaWNfY2hlY2tfcmVjdXJzaW9uczsKK2F0b21pY190IG5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfY2hlY2tzOworYXRvbWljX3QgbnJfZmluZF91c2FnZV9mb3J3YXJkc19yZWN1cnNpb25zOworYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfY2hlY2tzOworYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfcmVjdXJzaW9uczsKKyMgZGVmaW5lIGRlYnVnX2F0b21pY19pbmMocHRyKQkJYXRvbWljX2luYyhwdHIpCisjIGRlZmluZSBkZWJ1Z19hdG9taWNfZGVjKHB0cikJCWF0b21pY19kZWMocHRyKQorIyBkZWZpbmUgZGVidWdfYXRvbWljX3JlYWQocHRyKQkJYXRvbWljX3JlYWQocHRyKQorI2Vsc2UKKyMgZGVmaW5lIGRlYnVnX2F0b21pY19pbmMocHRyKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgZGVidWdfYXRvbWljX2RlYyhwdHIpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBkZWJ1Z19hdG9taWNfcmVhZChwdHIpCQkwCisjZW5kaWYKKworLyoKKyAqIExvY2tpbmcgcHJpbnRvdXRzOgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9zdHJbXSA9Cit7CisJW0xPQ0tfVVNFRF0gPQkJCSJpbml0aWFsLXVzZSAiLAorCVtMT0NLX1VTRURfSU5fSEFSRElSUV0gPQkiaW4taGFyZGlycS1XIiwKKwlbTE9DS19VU0VEX0lOX1NPRlRJUlFdID0JImluLXNvZnRpcnEtVyIsCisJW0xPQ0tfRU5BQkxFRF9TT0ZUSVJRU10gPQkic29mdGlycS1vbi1XIiwKKwlbTE9DS19FTkFCTEVEX0hBUkRJUlFTXSA9CSJoYXJkaXJxLW9uLVciLAorCVtMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEXSA9CSJpbi1oYXJkaXJxLVIiLAorCVtMT0NLX1VTRURfSU5fU09GVElSUV9SRUFEXSA9CSJpbi1zb2Z0aXJxLVIiLAorCVtMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRF0gPQkic29mdGlycS1vbi1SIiwKKwlbTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQURdID0JImhhcmRpcnEtb24tUiIsCit9OworCitjb25zdCBjaGFyICogX19nZXRfa2V5X25hbWUoc3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5ICprZXksIGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnMsIHNpemU7CisJY2hhciAqbW9kbmFtZTsKKworCXJldHVybiBrYWxsc3ltc19sb29rdXAoKHVuc2lnbmVkIGxvbmcpa2V5LCAmc2l6ZSwgJm9mZnMsICZtb2RuYW1lLCBzdHIpOworfQorCit2b2lkCitnZXRfdXNhZ2VfY2hhcnMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBjaGFyICpjMSwgY2hhciAqYzIsIGNoYXIgKmMzLCBjaGFyICpjNCkKK3sKKwkqYzEgPSAnLicsICpjMiA9ICcuJywgKmMzID0gJy4nLCAqYzQgPSAnLic7CisKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlEpCisJCSpjMSA9ICcrJzsKKwllbHNlCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVMpCisJCQkqYzEgPSAnLSc7CisKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX1NPRlRJUlEpCisJCSpjMiA9ICcrJzsKKwllbHNlCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfU09GVElSUVMpCisJCQkqYzIgPSAnLSc7CisKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTX1JFQUQpCisJCSpjMyA9ICctJzsKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCkgeworCQkqYzMgPSAnKyc7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKKwkJCSpjMyA9ICc/JzsKKwl9CisKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCisJCSpjNCA9ICctJzsKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX1NPRlRJUlFfUkVBRCkgeworCQkqYzQgPSAnKyc7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfU09GVElSUVNfUkVBRCkKKwkJCSpjNCA9ICc/JzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xvY2tfbmFtZShzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCit7CisJY2hhciBzdHJbMTI4XSwgYzEsIGMyLCBjMywgYzQ7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWdldF91c2FnZV9jaGFycyhjbGFzcywgJmMxLCAmYzIsICZjMywgJmM0KTsKKworCW5hbWUgPSBjbGFzcy0+bmFtZTsKKwlpZiAoIW5hbWUpIHsKKwkJbmFtZSA9IF9fZ2V0X2tleV9uYW1lKGNsYXNzLT5rZXksIHN0cik7CisJCXByaW50aygiICglcyIsIG5hbWUpOworCX0gZWxzZSB7CisJCXByaW50aygiICglcyIsIG5hbWUpOworCQlpZiAoY2xhc3MtPm5hbWVfdmVyc2lvbiA+IDEpCisJCQlwcmludGsoIiMlZCIsIGNsYXNzLT5uYW1lX3ZlcnNpb24pOworCQlpZiAoY2xhc3MtPnN1YmNsYXNzKQorCQkJcHJpbnRrKCIvJWQiLCBjbGFzcy0+c3ViY2xhc3MpOworCX0KKwlwcmludGsoIil7JWMlYyVjJWN9IiwgYzEsIGMyLCBjMywgYzQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9sb2NrZGVwX2NhY2hlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNoYXIgc3RyWzEyOF07CisKKwluYW1lID0gbG9jay0+bmFtZTsKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSBfX2dldF9rZXlfbmFtZShsb2NrLT5rZXktPnN1YmtleXMsIHN0cik7CisKKwlwcmludGsoIiVzIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xvY2soc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCit7CisJcHJpbnRfbG9ja19uYW1lKGhsb2NrLT5jbGFzcyk7CisJcHJpbnRrKCIsIGF0OiAiKTsKKwlwcmludF9pcF9zeW0oaGxvY2stPmFjcXVpcmVfaXApOworfQorCitzdGF0aWMgdm9pZCBsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQoreworCWludCBpLCBkZXB0aCA9IGN1cnItPmxvY2tkZXBfZGVwdGg7CisKKwlpZiAoIWRlcHRoKSB7CisJCXByaW50aygibm8gbG9ja3MgaGVsZCBieSAlcy8lZC5cbiIsIGN1cnItPmNvbW0sIGN1cnItPnBpZCk7CisJCXJldHVybjsKKwl9CisJcHJpbnRrKCIlZCBsb2NrJXMgaGVsZCBieSAlcy8lZDpcbiIsCisJCWRlcHRoLCBkZXB0aCA+IDEgPyAicyIgOiAiIiwgY3Vyci0+Y29tbSwgY3Vyci0+cGlkKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CisJCXByaW50aygiICMlZDogIiwgaSk7CisJCXByaW50X2xvY2soY3Vyci0+aGVsZF9sb2NrcyArIGkpOworCX0KK30KKy8qCisgKiBIZWxwZXIgdG8gcHJpbnQgYSBuaWNlIGhpZXJhcmNoeSBvZiBsb2NrIGRlcGVuZGVuY2llczoKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfc3BhY2VzKGludCBucikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQlwcmludGsoIiAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xvY2tfY2xhc3NfaGVhZGVyKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgaW50IGRlcHRoKQoreworCWludCBiaXQ7CisKKwlwcmludF9zcGFjZXMoZGVwdGgpOworCXByaW50aygiLT4iKTsKKwlwcmludF9sb2NrX25hbWUoY2xhc3MpOworCXByaW50aygiIG9wczogJWx1IiwgY2xhc3MtPm9wcyk7CisJcHJpbnRrKCIge1xuIik7CisKKwlmb3IgKGJpdCA9IDA7IGJpdCA8IExPQ0tfVVNBR0VfU1RBVEVTOyBiaXQrKykgeworCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiAoMSA8PCBiaXQpKSB7CisJCQlpbnQgbGVuID0gZGVwdGg7CisKKwkJCXByaW50X3NwYWNlcyhkZXB0aCk7CisJCQlsZW4gKz0gcHJpbnRrKCIgICAlcyIsIHVzYWdlX3N0cltiaXRdKTsKKwkJCWxlbiArPSBwcmludGsoIiBhdDpcbiIpOworCQkJcHJpbnRfc3RhY2tfdHJhY2UoY2xhc3MtPnVzYWdlX3RyYWNlcyArIGJpdCwgbGVuKTsKKwkJfQorCX0KKwlwcmludF9zcGFjZXMoZGVwdGgpOworCXByaW50aygiIH1cbiIpOworCisJcHJpbnRfc3BhY2VzKGRlcHRoKTsKKwlwcmludGsoIiAuLi4ga2V5ICAgICAgYXQ6ICIpOworCXByaW50X2lwX3N5bSgodW5zaWduZWQgbG9uZyljbGFzcy0+a2V5KTsKK30KKworLyoKKyAqIHByaW50ayBhbGwgbG9jayBkZXBlbmRlbmNpZXMgc3RhcnRpbmcgYXQgPGVudHJ5PjoKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBpbnQgZGVwdGgpCit7CisJc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7CisKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihkZXB0aCA+PSAyMCkpCisJCXJldHVybjsKKworCXByaW50X2xvY2tfY2xhc3NfaGVhZGVyKGNsYXNzLCBkZXB0aCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmY2xhc3MtPmxvY2tzX2FmdGVyLCBlbnRyeSkgeworCQlERUJVR19MT0NLU19XQVJOX09OKCFlbnRyeS0+Y2xhc3MpOworCQlwcmludF9sb2NrX2RlcGVuZGVuY2llcyhlbnRyeS0+Y2xhc3MsIGRlcHRoICsgMSk7CisKKwkJcHJpbnRfc3BhY2VzKGRlcHRoKTsKKwkJcHJpbnRrKCIgLi4uIGFjcXVpcmVkIGF0OlxuIik7CisJCXByaW50X3N0YWNrX3RyYWNlKCZlbnRyeS0+dHJhY2UsIDIpOworCQlwcmludGsoIlxuIik7CisJfQorfQorCisvKgorICogQWRkIGEgbmV3IGRlcGVuZGVuY3kgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3Q6CisgKi8KK3N0YXRpYyBpbnQgYWRkX2xvY2tfdG9fbGlzdChzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsIHN0cnVjdCBsb2NrX2NsYXNzICp0aGlzLAorCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHVuc2lnbmVkIGxvbmcgaXApCit7CisJc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7CisJLyoKKwkgKiBMb2NrIG5vdCBwcmVzZW50IHlldCAtIGdldCBhIG5ldyBkZXBlbmRlbmN5IHN0cnVjdCBhbmQKKwkgKiBhZGQgaXQgdG8gdGhlIGxpc3Q6CisJICovCisJZW50cnkgPSBhbGxvY19saXN0X2VudHJ5KCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIDA7CisKKwllbnRyeS0+Y2xhc3MgPSB0aGlzOworCXNhdmVfdHJhY2UoJmVudHJ5LT50cmFjZSk7CisKKwkvKgorCSAqIFNpbmNlIHdlIG5ldmVyIHJlbW92ZSBmcm9tIHRoZSBkZXBlbmRlbmN5IGxpc3QsIHRoZSBsaXN0IGNhbgorCSAqIGJlIHdhbGtlZCBsb2NrbGVzcyBieSBvdGhlciBDUFVzLCBpdCdzIG9ubHkgYWxsb2NhdGlvbgorCSAqIHRoYXQgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgdGhlIHNwaW5sb2NrLiBCdXQgdGhpcyBhbHNvIG1lYW5zCisJICogd2UgbXVzdCBtYWtlIG5ldyBlbnRyaWVzIHZpc2libGUgb25seSBvbmNlIHdyaXRlcyB0byB0aGUKKwkgKiBlbnRyeSBiZWNvbWUgdmlzaWJsZSAtIGhlbmNlIHRoZSBSQ1Ugb3A6CisJICovCisJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5lbnRyeSwgaGVhZCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZSwgZm9yd2FyZHMtZGlyZWN0aW9uIGxvY2stZGVwZW5kZW5jeSBjaGVja2luZywgdXNlZCBmb3IKKyAqIGJvdGggbm9uY3ljbGljIGNoZWNraW5nIGFuZCBmb3IgaGFyZGlycS11bnNhZmUvc29mdGlycS11bnNhZmUKKyAqIGNoZWNraW5nLgorICoKKyAqICh0byBrZWVwIHRoZSBzdGFja2ZyYW1lIG9mIHRoZSByZWN1cnNpdmUgZnVuY3Rpb25zIHNtYWxsIHdlCisgKiAgdXNlIHRoZXNlIGdsb2JhbCB2YXJpYWJsZXMsIGFuZCB3ZSBhbHNvIG1hcmsgdmFyaW91cyBoZWxwZXIKKyAqICBmdW5jdGlvbnMgYXMgbm9pbmxpbmUuKQorICovCitzdGF0aWMgc3RydWN0IGhlbGRfbG9jayAqY2hlY2tfc291cmNlLCAqY2hlY2tfdGFyZ2V0OworCisvKgorICogUHJpbnQgYSBkZXBlbmRlbmN5IGNoYWluIGVudHJ5ICh0aGlzIGlzIG9ubHkgZG9uZSB3aGVuIGEgZGVhZGxvY2sKKyAqIGhhcyBiZWVuIGRldGVjdGVkKToKKyAqLworc3RhdGljIG5vaW5saW5lIGludAorcHJpbnRfY2lyY3VsYXJfYnVnX2VudHJ5KHN0cnVjdCBsb2NrX2xpc3QgKnRhcmdldCwgdW5zaWduZWQgaW50IGRlcHRoKQoreworCWlmIChkZWJ1Z19sb2Nrc19zaWxlbnQpCisJCXJldHVybiAwOworCXByaW50aygiXG4tPiAjJXUiLCBkZXB0aCk7CisJcHJpbnRfbG9ja19uYW1lKHRhcmdldC0+Y2xhc3MpOworCXByaW50aygiOlxuIik7CisJcHJpbnRfc3RhY2tfdHJhY2UoJnRhcmdldC0+dHJhY2UsIDYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaGVuIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpcyBkZXRlY3RlZCwgcHJpbnQgdGhlCisgKiBoZWFkZXIgZmlyc3Q6CisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQKK3ByaW50X2NpcmN1bGFyX2J1Z19oZWFkZXIoc3RydWN0IGxvY2tfbGlzdCAqZW50cnksIHVuc2lnbmVkIGludCBkZXB0aCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OworCisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJZGVidWdfbG9ja3Nfb2ZmKCk7CisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRrKCAgIlsgSU5GTzogcG9zc2libGUgY2lyY3VsYXIgbG9ja2luZyBkZXBlbmRlbmN5IGRldGVjdGVkIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGsoIiVzLyVkIGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6XG4iLAorCQljdXJyLT5jb21tLCBjdXJyLT5waWQpOworCXByaW50X2xvY2soY2hlY2tfc291cmNlKTsKKwlwcmludGsoIlxuYnV0IHRhc2sgaXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6XG4iKTsKKwlwcmludF9sb2NrKGNoZWNrX3RhcmdldCk7CisJcHJpbnRrKCJcbndoaWNoIGxvY2sgYWxyZWFkeSBkZXBlbmRzIG9uIHRoZSBuZXcgbG9jay5cblxuIik7CisJcHJpbnRrKCJcbnRoZSBleGlzdGluZyBkZXBlbmRlbmN5IGNoYWluIChpbiByZXZlcnNlIG9yZGVyKSBpczpcbiIpOworCisJcHJpbnRfY2lyY3VsYXJfYnVnX2VudHJ5KGVudHJ5LCBkZXB0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBwcmludF9jaXJjdWxhcl9idWdfdGFpbCh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CisJc3RydWN0IGxvY2tfbGlzdCB0aGlzOworCisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuIDA7CisKKwl0aGlzLmNsYXNzID0gY2hlY2tfc291cmNlLT5jbGFzczsKKwlzYXZlX3RyYWNlKCZ0aGlzLnRyYWNlKTsKKwlwcmludF9jaXJjdWxhcl9idWdfZW50cnkoJnRoaXMsIDApOworCisJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG5cbiIpOworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKKworCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKKwlkdW1wX3N0YWNrKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub2lubGluZSBwcmludF9pbmZpbml0ZV9yZWN1cnNpb25fYnVnKHZvaWQpCit7CisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJREVCVUdfTE9DS1NfV0FSTl9PTigxKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUHJvdmUgdGhhdCB0aGUgZGVwZW5kZW5jeSBncmFwaCBzdGFydGluZyBhdCA8ZW50cnk+IGNhbiBub3QKKyAqIGxlYWQgdG8gPHRhcmdldD4uIFByaW50IGFuIGVycm9yIGFuZCByZXR1cm4gMCBpZiBpdCBkb2VzLgorICovCitzdGF0aWMgbm9pbmxpbmUgaW50CitjaGVja19ub25jaXJjdWxhcihzdHJ1Y3QgbG9ja19jbGFzcyAqc291cmNlLCB1bnNpZ25lZCBpbnQgZGVwdGgpCit7CisJc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7CisKKwlkZWJ1Z19hdG9taWNfaW5jKCZucl9jeWNsaWNfY2hlY2tfcmVjdXJzaW9ucyk7CisJaWYgKGRlcHRoID4gbWF4X3JlY3Vyc2lvbl9kZXB0aCkKKwkJbWF4X3JlY3Vyc2lvbl9kZXB0aCA9IGRlcHRoOworCWlmIChkZXB0aCA+PSAyMCkKKwkJcmV0dXJuIHByaW50X2luZmluaXRlX3JlY3Vyc2lvbl9idWcoKTsKKwkvKgorCSAqIENoZWNrIHRoaXMgbG9jaydzIGRlcGVuZGVuY3kgbGlzdDoKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc291cmNlLT5sb2Nrc19hZnRlciwgZW50cnkpIHsKKwkJaWYgKGVudHJ5LT5jbGFzcyA9PSBjaGVja190YXJnZXQtPmNsYXNzKQorCQkJcmV0dXJuIHByaW50X2NpcmN1bGFyX2J1Z19oZWFkZXIoZW50cnksIGRlcHRoKzEpOworCQlkZWJ1Z19hdG9taWNfaW5jKCZucl9jeWNsaWNfY2hlY2tzKTsKKwkJaWYgKCFjaGVja19ub25jaXJjdWxhcihlbnRyeS0+Y2xhc3MsIGRlcHRoKzEpKQorCQkJcmV0dXJuIHByaW50X2NpcmN1bGFyX2J1Z19lbnRyeShlbnRyeSwgZGVwdGgrMSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZlcnlfdmVyYm9zZShzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCit7CisjaWYgVkVSWV9WRVJCT1NFCisJcmV0dXJuIGNsYXNzX2ZpbHRlcihjbGFzcyk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKworLyoKKyAqIEZvcndhcmRzIGFuZCBiYWNrd2FyZHMgc3ViZ3JhcGggc2VhcmNoaW5nLCBmb3IgdGhlIHB1cnBvc2VzIG9mCisgKiBwcm92aW5nIHRoYXQgdHdvIHN1YmdyYXBocyBjYW4gYmUgY29ubmVjdGVkIGJ5IGEgbmV3IGRlcGVuZGVuY3kKKyAqIHdpdGhvdXQgY3JlYXRpbmcgYW55IGlsbGVnYWwgaXJxLXNhZmUgLT4gaXJxLXVuc2FmZSBsb2NrIGRlcGVuZGVuY3kuCisgKi8KK3N0YXRpYyBlbnVtIGxvY2tfdXNhZ2VfYml0IGZpbmRfdXNhZ2VfYml0Oworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzICpmb3J3YXJkc19tYXRjaCwgKmJhY2t3YXJkc19tYXRjaDsKKworLyoKKyAqIEZpbmQgYSBub2RlIGluIHRoZSBmb3J3YXJkcy1kaXJlY3Rpb24gZGVwZW5kZW5jeSBzdWItZ3JhcGggc3RhcnRpbmcKKyAqIGF0IDxzb3VyY2U+IHRoYXQgbWF0Y2hlcyA8ZmluZF91c2FnZV9iaXQ+LgorICoKKyAqIFJldHVybiAyIGlmIHN1Y2ggYSBub2RlIGV4aXN0cyBpbiB0aGUgc3ViZ3JhcGgsIGFuZCBwdXQgdGhhdCBub2RlCisgKiBpbnRvIDxmb3J3YXJkc19tYXRjaD4uCisgKgorICogUmV0dXJuIDEgb3RoZXJ3aXNlIGFuZCBrZWVwIDxmb3J3YXJkc19tYXRjaD4gdW5jaGFuZ2VkLgorICogUmV0dXJuIDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQKK2ZpbmRfdXNhZ2VfZm9yd2FyZHMoc3RydWN0IGxvY2tfY2xhc3MgKnNvdXJjZSwgdW5zaWduZWQgaW50IGRlcHRoKQoreworCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OworCWludCByZXQ7CisKKwlpZiAoZGVwdGggPiBtYXhfcmVjdXJzaW9uX2RlcHRoKQorCQltYXhfcmVjdXJzaW9uX2RlcHRoID0gZGVwdGg7CisJaWYgKGRlcHRoID49IDIwKQorCQlyZXR1cm4gcHJpbnRfaW5maW5pdGVfcmVjdXJzaW9uX2J1ZygpOworCisJZGVidWdfYXRvbWljX2luYygmbnJfZmluZF91c2FnZV9mb3J3YXJkc19jaGVja3MpOworCWlmIChzb3VyY2UtPnVzYWdlX21hc2sgJiAoMSA8PCBmaW5kX3VzYWdlX2JpdCkpIHsKKwkJZm9yd2FyZHNfbWF0Y2ggPSBzb3VyY2U7CisJCXJldHVybiAyOworCX0KKworCS8qCisJICogQ2hlY2sgdGhpcyBsb2NrJ3MgZGVwZW5kZW5jeSBsaXN0OgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzb3VyY2UtPmxvY2tzX2FmdGVyLCBlbnRyeSkgeworCQlkZWJ1Z19hdG9taWNfaW5jKCZucl9maW5kX3VzYWdlX2ZvcndhcmRzX3JlY3Vyc2lvbnMpOworCQlyZXQgPSBmaW5kX3VzYWdlX2ZvcndhcmRzKGVudHJ5LT5jbGFzcywgZGVwdGgrMSk7CisJCWlmIChyZXQgPT0gMiB8fCByZXQgPT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogRmluZCBhIG5vZGUgaW4gdGhlIGJhY2t3YXJkcy1kaXJlY3Rpb24gZGVwZW5kZW5jeSBzdWItZ3JhcGggc3RhcnRpbmcKKyAqIGF0IDxzb3VyY2U+IHRoYXQgbWF0Y2hlcyA8ZmluZF91c2FnZV9iaXQ+LgorICoKKyAqIFJldHVybiAyIGlmIHN1Y2ggYSBub2RlIGV4aXN0cyBpbiB0aGUgc3ViZ3JhcGgsIGFuZCBwdXQgdGhhdCBub2RlCisgKiBpbnRvIDxiYWNrd2FyZHNfbWF0Y2g+LgorICoKKyAqIFJldHVybiAxIG90aGVyd2lzZSBhbmQga2VlcCA8YmFja3dhcmRzX21hdGNoPiB1bmNoYW5nZWQuCisgKiBSZXR1cm4gMCBvbiBlcnJvci4KKyAqLworc3RhdGljIG5vaW5saW5lIGludAorZmluZF91c2FnZV9iYWNrd2FyZHMoc3RydWN0IGxvY2tfY2xhc3MgKnNvdXJjZSwgdW5zaWduZWQgaW50IGRlcHRoKQoreworCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OworCWludCByZXQ7CisKKwlpZiAoZGVwdGggPiBtYXhfcmVjdXJzaW9uX2RlcHRoKQorCQltYXhfcmVjdXJzaW9uX2RlcHRoID0gZGVwdGg7CisJaWYgKGRlcHRoID49IDIwKQorCQlyZXR1cm4gcHJpbnRfaW5maW5pdGVfcmVjdXJzaW9uX2J1ZygpOworCisJZGVidWdfYXRvbWljX2luYygmbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfY2hlY2tzKTsKKwlpZiAoc291cmNlLT51c2FnZV9tYXNrICYgKDEgPDwgZmluZF91c2FnZV9iaXQpKSB7CisJCWJhY2t3YXJkc19tYXRjaCA9IHNvdXJjZTsKKwkJcmV0dXJuIDI7CisJfQorCisJLyoKKwkgKiBDaGVjayB0aGlzIGxvY2sncyBkZXBlbmRlbmN5IGxpc3Q6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnNvdXJjZS0+bG9ja3NfYmVmb3JlLCBlbnRyeSkgeworCQlkZWJ1Z19hdG9taWNfaW5jKCZucl9maW5kX3VzYWdlX2JhY2t3YXJkc19yZWN1cnNpb25zKTsKKwkJcmV0ID0gZmluZF91c2FnZV9iYWNrd2FyZHMoZW50cnktPmNsYXNzLCBkZXB0aCsxKTsKKwkJaWYgKHJldCA9PSAyIHx8IHJldCA9PSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2JhZF9pcnFfZGVwZW5kZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCisJCQkgc3RydWN0IGhlbGRfbG9jayAqcHJldiwKKwkJCSBzdHJ1Y3QgaGVsZF9sb2NrICpuZXh0LAorCQkJIGVudW0gbG9ja191c2FnZV9iaXQgYml0MSwKKwkJCSBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdDIsCisJCQkgY29uc3QgY2hhciAqaXJxY2xhc3MpCit7CisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJZGVidWdfbG9ja3Nfb2ZmKCk7CisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGsoICAiWyBJTkZPOiAlcy1zYWZlIC0+ICVzLXVuc2FmZSBsb2NrIG9yZGVyIGRldGVjdGVkIF1cbiIsCisJCWlycWNsYXNzLCBpcnFjbGFzcyk7CisJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCIlcy8lZCBbSEMldVslbHVdOlNDJXVbJWx1XTpIRSV1OlNFJXVdIGlzIHRyeWluZyB0byBhY3F1aXJlOlxuIiwKKwkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkLAorCQljdXJyLT5oYXJkaXJxX2NvbnRleHQsIGhhcmRpcnFfY291bnQoKSA+PiBIQVJESVJRX1NISUZULAorCQljdXJyLT5zb2Z0aXJxX2NvbnRleHQsIHNvZnRpcnFfY291bnQoKSA+PiBTT0ZUSVJRX1NISUZULAorCQljdXJyLT5oYXJkaXJxc19lbmFibGVkLAorCQljdXJyLT5zb2Z0aXJxc19lbmFibGVkKTsKKwlwcmludF9sb2NrKG5leHQpOworCisJcHJpbnRrKCJcbmFuZCB0aGlzIHRhc2sgaXMgYWxyZWFkeSBob2xkaW5nOlxuIik7CisJcHJpbnRfbG9jayhwcmV2KTsKKwlwcmludGsoIndoaWNoIHdvdWxkIGNyZWF0ZSBhIG5ldyBsb2NrIGRlcGVuZGVuY3k6XG4iKTsKKwlwcmludF9sb2NrX25hbWUocHJldi0+Y2xhc3MpOworCXByaW50aygiIC0+Iik7CisJcHJpbnRfbG9ja19uYW1lKG5leHQtPmNsYXNzKTsKKwlwcmludGsoIlxuIik7CisKKwlwcmludGsoIlxuYnV0IHRoaXMgbmV3IGRlcGVuZGVuY3kgY29ubmVjdHMgYSAlcy1pcnEtc2FmZSBsb2NrOlxuIiwKKwkJaXJxY2xhc3MpOworCXByaW50X2xvY2tfbmFtZShiYWNrd2FyZHNfbWF0Y2gpOworCXByaW50aygiXG4uLi4gd2hpY2ggYmVjYW1lICVzLWlycS1zYWZlIGF0OlxuIiwgaXJxY2xhc3MpOworCisJcHJpbnRfc3RhY2tfdHJhY2UoYmFja3dhcmRzX21hdGNoLT51c2FnZV90cmFjZXMgKyBiaXQxLCAxKTsKKworCXByaW50aygiXG50byBhICVzLWlycS11bnNhZmUgbG9jazpcbiIsIGlycWNsYXNzKTsKKwlwcmludF9sb2NrX25hbWUoZm9yd2FyZHNfbWF0Y2gpOworCXByaW50aygiXG4uLi4gd2hpY2ggYmVjYW1lICVzLWlycS11bnNhZmUgYXQ6XG4iLCBpcnFjbGFzcyk7CisJcHJpbnRrKCIuLi4iKTsKKworCXByaW50X3N0YWNrX3RyYWNlKGZvcndhcmRzX21hdGNoLT51c2FnZV90cmFjZXMgKyBiaXQyLCAxKTsKKworCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuXG4iKTsKKwlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CisKKwlwcmludGsoIlxudGhlICVzLWlycS1zYWZlIGxvY2sncyBkZXBlbmRlbmNpZXM6XG4iLCBpcnFjbGFzcyk7CisJcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMoYmFja3dhcmRzX21hdGNoLCAwKTsKKworCXByaW50aygiXG50aGUgJXMtaXJxLXVuc2FmZSBsb2NrJ3MgZGVwZW5kZW5jaWVzOlxuIiwgaXJxY2xhc3MpOworCXByaW50X2xvY2tfZGVwZW5kZW5jaWVzKGZvcndhcmRzX21hdGNoLCAwKTsKKworCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKKwlkdW1wX3N0YWNrKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2hlY2tfdXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICpwcmV2LAorCSAgICBzdHJ1Y3QgaGVsZF9sb2NrICpuZXh0LCBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdF9iYWNrd2FyZHMsCisJICAgIGVudW0gbG9ja191c2FnZV9iaXQgYml0X2ZvcndhcmRzLCBjb25zdCBjaGFyICppcnFjbGFzcykKK3sKKwlpbnQgcmV0OworCisJZmluZF91c2FnZV9iaXQgPSBiaXRfYmFja3dhcmRzOworCS8qIGZpbGxzIGluIDxiYWNrd2FyZHNfbWF0Y2g+ICovCisJcmV0ID0gZmluZF91c2FnZV9iYWNrd2FyZHMocHJldi0+Y2xhc3MsIDApOworCWlmICghcmV0IHx8IHJldCA9PSAxKQorCQlyZXR1cm4gcmV0OworCisJZmluZF91c2FnZV9iaXQgPSBiaXRfZm9yd2FyZHM7CisJcmV0ID0gZmluZF91c2FnZV9mb3J3YXJkcyhuZXh0LT5jbGFzcywgMCk7CisJaWYgKCFyZXQgfHwgcmV0ID09IDEpCisJCXJldHVybiByZXQ7CisJLyogcmV0ID09IDIgKi8KKwlyZXR1cm4gcHJpbnRfYmFkX2lycV9kZXBlbmRlbmN5KGN1cnIsIHByZXYsIG5leHQsCisJCQliaXRfYmFja3dhcmRzLCBiaXRfZm9yd2FyZHMsIGlycWNsYXNzKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQKK3ByaW50X2RlYWRsb2NrX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnByZXYsCisJCSAgIHN0cnVjdCBoZWxkX2xvY2sgKm5leHQpCit7CisJZGVidWdfbG9ja3Nfb2ZmKCk7CisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGsoICAiWyBJTkZPOiBwb3NzaWJsZSByZWN1cnNpdmUgbG9ja2luZyBkZXRlY3RlZCBdXG4iKTsKKwlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGsoIiVzLyVkIGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6XG4iLAorCQljdXJyLT5jb21tLCBjdXJyLT5waWQpOworCXByaW50X2xvY2sobmV4dCk7CisJcHJpbnRrKCJcbmJ1dCB0YXNrIGlzIGFscmVhZHkgaG9sZGluZyBsb2NrOlxuIik7CisJcHJpbnRfbG9jayhwcmV2KTsKKworCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuIik7CisJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOworCisJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOworCWR1bXBfc3RhY2soKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciB3ZSBhcmUgaG9sZGluZyBzdWNoIGEgY2xhc3MgYWxyZWFkeS4KKyAqCisgKiAoTm90ZSB0aGF0IHRoaXMgaGFzIHRvIGJlIGRvbmUgc2VwYXJhdGVseSwgYmVjYXVzZSB0aGUgZ3JhcGggY2Fubm90CisgKiBkZXRlY3Qgc3VjaCBjbGFzc2VzIG9mIGRlYWRsb2Nrcy4pCisgKgorICogUmV0dXJuczogMCBvbiBkZWFkbG9jayBkZXRlY3RlZCwgMSBvbiBPSywgMiBvbiByZWN1cnNpdmUgcmVhZAorICovCitzdGF0aWMgaW50CitjaGVja19kZWFkbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKm5leHQsCisJICAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmV4dF9pbnN0YW5jZSwgaW50IHJlYWQpCit7CisJc3RydWN0IGhlbGRfbG9jayAqcHJldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjdXJyLT5sb2NrZGVwX2RlcHRoOyBpKyspIHsKKwkJcHJldiA9IGN1cnItPmhlbGRfbG9ja3MgKyBpOworCQlpZiAocHJldi0+Y2xhc3MgIT0gbmV4dC0+Y2xhc3MpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogQWxsb3cgcmVhZC1hZnRlci1yZWFkIHJlY3Vyc2lvbiBvZiB0aGUgc2FtZQorCQkgKiBsb2NrIGNsYXNzIChpLmUuIHJlYWRfbG9jayhsb2NrKStyZWFkX2xvY2sobG9jaykpOgorCQkgKi8KKwkJaWYgKChyZWFkID09IDIpICYmIHByZXYtPnJlYWQpCisJCQlyZXR1cm4gMjsKKwkJcmV0dXJuIHByaW50X2RlYWRsb2NrX2J1ZyhjdXJyLCBwcmV2LCBuZXh0KTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGVyZSB3YXMgYSBjaGFpbi1jYWNoZSBtaXNzLCBhbmQgd2UgYXJlIGFib3V0IHRvIGFkZCBhIG5ldyBkZXBlbmRlbmN5CisgKiB0byBhIHByZXZpb3VzIGxvY2suIFdlIHJlY3Vyc2l2ZWx5IHZhbGlkYXRlIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgKgorICogIC0gd291bGQgdGhlIGFkZGluZyBvZiB0aGUgPHByZXY+IC0+IDxuZXh0PiBkZXBlbmRlbmN5IGNyZWF0ZSBhCisgKiAgICBjaXJjdWxhciBkZXBlbmRlbmN5IGluIHRoZSBncmFwaD8gWz09IGNpcmN1bGFyIGRlYWRsb2NrXQorICoKKyAqICAtIGRvZXMgdGhlIG5ldyBwcmV2LT5uZXh0IGRlcGVuZGVuY3kgY29ubmVjdCBhbnkgaGFyZGlycS1zYWZlIGxvY2sKKyAqICAgIChpbiB0aGUgZnVsbCBiYWNrd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPHByZXY+KSB3aXRoIGFueQorICogICAgaGFyZGlycS11bnNhZmUgbG9jayAoaW4gdGhlIGZ1bGwgZm9yd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQKKyAqICAgIDxuZXh0Pik/IFs9PSBpbGxlZ2FsIGxvY2sgaW52ZXJzaW9uIHdpdGggaGFyZGlycSBjb250ZXh0c10KKyAqCisgKiAgLSBkb2VzIHRoZSBuZXcgcHJldi0+bmV4dCBkZXBlbmRlbmN5IGNvbm5lY3QgYW55IHNvZnRpcnEtc2FmZSBsb2NrCisgKiAgICAoaW4gdGhlIGZ1bGwgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2Pikgd2l0aCBhbnkKKyAqICAgIHNvZnRpcnEtdW5zYWZlIGxvY2sgKGluIHRoZSBmdWxsIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0CisgKiAgICA8bmV4dD4pPyBbPT0gaWxsZWdhbCBsb2NrIGludmVyc2lvbiB3aXRoIHNvZnRpcnEgY29udGV4dHNdCisgKgorICogYW55IG9mIHRoZXNlIHNjZW5hcmlvcyBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCisgKgorICogVGhlbiBpZiBhbGwgdGhlIHZhbGlkYXRpb25zIHBhc3MsIHdlIGFkZCB0aGUgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcworICogZGVwZW5kZW5jeS4KKyAqLworc3RhdGljIGludAorY2hlY2tfcHJldl9hZGQoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICpwcmV2LAorCSAgICAgICBzdHJ1Y3QgaGVsZF9sb2NrICpuZXh0KQoreworCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OworCWludCByZXQ7CisKKwkvKgorCSAqIFByb3ZlIHRoYXQgdGhlIG5ldyA8cHJldj4gLT4gPG5leHQ+IGRlcGVuZGVuY3kgd291bGQgbm90CisJICogY3JlYXRlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiB0aGUgZ3JhcGguIChXZSBkbyB0aGlzIGJ5CisJICogZm9yd2FyZC1yZWN1cnNpbmcgaW50byB0aGUgZ3JhcGggc3RhcnRpbmcgYXQgPG5leHQ+LCBhbmQKKwkgKiBjaGVja2luZyB3aGV0aGVyIHdlIGNhbiByZWFjaCA8cHJldj4uKQorCSAqCisJICogV2UgYXJlIHVzaW5nIGdsb2JhbCB2YXJpYWJsZXMgdG8gY29udHJvbCB0aGUgcmVjdXJzaW9uLCB0bworCSAqIGtlZXAgdGhlIHN0YWNrZnJhbWUgc2l6ZSBvZiB0aGUgcmVjdXJzaXZlIGZ1bmN0aW9ucyBsb3c6CisJICovCisJY2hlY2tfc291cmNlID0gbmV4dDsKKwljaGVja190YXJnZXQgPSBwcmV2OworCWlmICghKGNoZWNrX25vbmNpcmN1bGFyKG5leHQtPmNsYXNzLCAwKSkpCisJCXJldHVybiBwcmludF9jaXJjdWxhcl9idWdfdGFpbCgpOworCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJLyoKKwkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgaGFyZGlycS1zYWZlCisJICogbG9jayB3aXRoIGEgaGFyZGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKKwkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQorCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKKwkgKi8KKwlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9IQVJESVJRLAorCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUVMsICJoYXJkIikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgaGFyZGlycS1zYWZlLXJlYWQKKwkgKiBsb2NrIHdpdGggYSBoYXJkaXJxLXVuc2FmZSBsb2NrIC0gdG8gYWNoaWV2ZSB0aGlzIHdlIHNlYXJjaAorCSAqIHRoZSBiYWNrd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPHByZXY+LCBhbmQgdGhlCisJICogZm9yd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPG5leHQ+OgorCSAqLworCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCwKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZC1yZWFkIikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgc29mdGlycS1zYWZlCisJICogbG9jayB3aXRoIGEgc29mdGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKKwkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQorCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKKwkgKi8KKwlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRLAorCQkJCQlMT0NLX0VOQUJMRURfU09GVElSUVMsICJzb2Z0IikpCisJCXJldHVybiAwOworCS8qCisJICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIHNvZnRpcnEtc2FmZS1yZWFkCisJICogbG9jayB3aXRoIGEgc29mdGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKKwkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQorCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKKwkgKi8KKwlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsCisJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgInNvZnQiKSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwkvKgorCSAqIEZvciByZWN1cnNpdmUgcmVhZC1sb2NrcyB3ZSBkbyBhbGwgdGhlIGRlcGVuZGVuY3kgY2hlY2tzLAorCSAqIGJ1dCB3ZSBkb250IHN0b3JlIHJlYWQtdHJpZ2dlcmVkIGRlcGVuZGVuY2llcyAob25seQorCSAqIHdyaXRlLXRyaWdnZXJlZCBkZXBlbmRlbmNpZXMpLiBUaGlzIGVuc3VyZXMgdGhhdCBvbmx5IHRoZQorCSAqIHdyaXRlLXNpZGUgZGVwZW5kZW5jaWVzIG1hdHRlciwgYW5kIHRoYXQgaWYgZm9yIGV4YW1wbGUgYQorCSAqIHdyaXRlLWxvY2sgbmV2ZXIgdGFrZXMgYW55IG90aGVyIGxvY2tzLCB0aGVuIHRoZSByZWFkcyBhcmUKKwkgKiBlcXVpdmFsZW50IHRvIGEgTk9QLgorCSAqLworCWlmIChuZXh0LT5yZWFkID09IDIgfHwgcHJldi0+cmVhZCA9PSAyKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIHRoZSA8cHJldj4gLT4gPG5leHQ+IGRlcGVuZGVuY3kgYWxyZWFkeSBwcmVzZW50PworCSAqCisJICogKHRoaXMgbWF5IG9jY3VyIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSBuZXcgY2hhaW46IGNvbnNpZGVyCisJICogIGUuZy4gdGhlIEwxIC0+IEwyIC0+IEwzIC0+IEw0IGFuZCB0aGUgTDUgLT4gTDEgLT4gTDIgLT4gTDMKKwkgKiAgY2hhaW5zIC0gdGhlIHNlY29uZCBvbmUgd2lsbCBiZSBuZXcsIGJ1dCBMMSBhbHJlYWR5IGhhcworCSAqICBMMiBhZGRlZCB0byBpdHMgZGVwZW5kZW5jeSBsaXN0LCBkdWUgdG8gdGhlIGZpcnN0IGNoYWluLikKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcHJldi0+Y2xhc3MtPmxvY2tzX2FmdGVyLCBlbnRyeSkgeworCQlpZiAoZW50cnktPmNsYXNzID09IG5leHQtPmNsYXNzKQorCQkJcmV0dXJuIDI7CisJfQorCisJLyoKKwkgKiBPaywgYWxsIHZhbGlkYXRpb25zIHBhc3NlZCwgYWRkIHRoZSBuZXcgbG9jaworCSAqIHRvIHRoZSBwcmV2aW91cyBsb2NrJ3MgZGVwZW5kZW5jeSBsaXN0OgorCSAqLworCXJldCA9IGFkZF9sb2NrX3RvX2xpc3QocHJldi0+Y2xhc3MsIG5leHQtPmNsYXNzLAorCQkJICAgICAgICZwcmV2LT5jbGFzcy0+bG9ja3NfYWZ0ZXIsIG5leHQtPmFjcXVpcmVfaXApOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIFJldHVybiB2YWx1ZSBvZiAyIHNpZ25hbHMgJ2RlcGVuZGVuY3kgYWxyZWFkeSBhZGRlZCcsCisJICogaW4gdGhhdCBjYXNlIHdlIGRvbnQgaGF2ZSB0byBhZGQgdGhlIGJhY2tsaW5rIGVpdGhlci4KKwkgKi8KKwlpZiAocmV0ID09IDIpCisJCXJldHVybiAyOworCXJldCA9IGFkZF9sb2NrX3RvX2xpc3QobmV4dC0+Y2xhc3MsIHByZXYtPmNsYXNzLAorCQkJICAgICAgICZuZXh0LT5jbGFzcy0+bG9ja3NfYmVmb3JlLCBuZXh0LT5hY3F1aXJlX2lwKTsKKworCS8qCisJICogRGVidWdnaW5nIHByaW50b3V0czoKKwkgKi8KKwlpZiAodmVyYm9zZShwcmV2LT5jbGFzcykgfHwgdmVyYm9zZShuZXh0LT5jbGFzcykpIHsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCXByaW50aygiXG4gbmV3IGRlcGVuZGVuY3k6ICIpOworCQlwcmludF9sb2NrX25hbWUocHJldi0+Y2xhc3MpOworCQlwcmludGsoIiA9PiAiKTsKKwkJcHJpbnRfbG9ja19uYW1lKG5leHQtPmNsYXNzKTsKKwkJcHJpbnRrKCJcbiIpOworCQlkdW1wX3N0YWNrKCk7CisJCV9fcmF3X3NwaW5fbG9jaygmaGFzaF9sb2NrKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBBZGQgdGhlIGRlcGVuZGVuY3kgdG8gYWxsIGRpcmVjdGx5LXByZXZpb3VzIGxvY2tzIHRoYXQgYXJlICdyZWxldmFudCcuCisgKiBUaGUgb25lcyB0aGF0IGFyZSByZWxldmFudCBhcmUgKGluIGluY3JlYXNpbmcgZGlzdGFuY2UgZnJvbSBjdXJyKToKKyAqIGFsbCBjb25zZWN1dGl2ZSB0cnlsb2NrIGVudHJpZXMgYW5kIHRoZSBmaW5hbCBub24tdHJ5bG9jayBlbnRyeSAtIG9yCisgKiB0aGUgZW5kIG9mIHRoaXMgY29udGV4dCdzIGxvY2stY2hhaW4gLSB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX3ByZXZzX2FkZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKm5leHQpCit7CisJaW50IGRlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKKwlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jazsKKworCS8qCisJICogRGVidWdnaW5nIGNoZWNrcy4KKwkgKgorCSAqIERlcHRoIG11c3Qgbm90IGJlIHplcm8gZm9yIGEgbm9uLWhlYWQgbG9jazoKKwkgKi8KKwlpZiAoIWRlcHRoKQorCQlnb3RvIG91dF9idWc7CisJLyoKKwkgKiBBdCBsZWFzdCB0d28gcmVsZXZhbnQgbG9ja3MgbXVzdCBleGlzdCBmb3IgdGhpcworCSAqIHRvIGJlIGEgaGVhZDoKKwkgKi8KKwlpZiAoY3Vyci0+aGVsZF9sb2Nrc1tkZXB0aF0uaXJxX2NvbnRleHQgIT0KKwkJCWN1cnItPmhlbGRfbG9ja3NbZGVwdGgtMV0uaXJxX2NvbnRleHQpCisJCWdvdG8gb3V0X2J1ZzsKKworCWZvciAoOzspIHsKKwkJaGxvY2sgPSBjdXJyLT5oZWxkX2xvY2tzICsgZGVwdGgtMTsKKwkJLyoKKwkJICogT25seSBub24tcmVjdXJzaXZlLXJlYWQgZW50cmllcyBnZXQgbmV3IGRlcGVuZGVuY2llcworCQkgKiBhZGRlZDoKKwkJICovCisJCWlmIChobG9jay0+cmVhZCAhPSAyKSB7CisJCQljaGVja19wcmV2X2FkZChjdXJyLCBobG9jaywgbmV4dCk7CisJCQkvKgorCQkJICogU3RvcCBhZnRlciB0aGUgZmlyc3Qgbm9uLXRyeWxvY2sgZW50cnksCisJCQkgKiBhcyBub24tdHJ5bG9jayBlbnRyaWVzIGhhdmUgYWRkZWQgdGhlaXIKKwkJCSAqIG93biBkaXJlY3QgZGVwZW5kZW5jaWVzIGFscmVhZHksIHNvIHRoaXMKKwkJCSAqIGxvY2sgaXMgY29ubmVjdGVkIHRvIHRoZW0gaW5kaXJlY3RseToKKwkJCSAqLworCQkJaWYgKCFobG9jay0+dHJ5bG9jaykKKwkJCQlicmVhazsKKwkJfQorCQlkZXB0aC0tOworCQkvKgorCQkgKiBFbmQgb2YgbG9jay1zdGFjaz8KKwkJICovCisJCWlmICghZGVwdGgpCisJCQlicmVhazsKKwkJLyoKKwkJICogU3RvcCB0aGUgc2VhcmNoIGlmIHdlIGNyb3NzIGludG8gYW5vdGhlciBjb250ZXh0OgorCQkgKi8KKwkJaWYgKGN1cnItPmhlbGRfbG9ja3NbZGVwdGhdLmlycV9jb250ZXh0ICE9CisJCQkJY3Vyci0+aGVsZF9sb2Nrc1tkZXB0aC0xXS5pcnFfY29udGV4dCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK291dF9idWc6CisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJREVCVUdfTE9DS1NfV0FSTl9PTigxKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBJcyB0aGlzIHRoZSBhZGRyZXNzIG9mIGEgc3RhdGljIG9iamVjdDoKKyAqLworc3RhdGljIGludCBzdGF0aWNfb2JqKHZvaWQgKm9iaikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICZfc3RleHQsCisJCSAgICAgIGVuZCAgID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kLAorCQkgICAgICBhZGRyICA9ICh1bnNpZ25lZCBsb25nKSBvYmo7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBpOworI2VuZGlmCisKKwkvKgorCSAqIHN0YXRpYyB2YXJpYWJsZT8KKwkgKi8KKwlpZiAoKGFkZHIgPj0gc3RhcnQpICYmIChhZGRyIDwgZW5kKSkKKwkJcmV0dXJuIDE7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBwZXJjcHUgdmFyPworCSAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICZfX3Blcl9jcHVfc3RhcnQgKyBwZXJfY3B1X29mZnNldChpKTsKKwkJZW5kICAgPSAodW5zaWduZWQgbG9uZykgJl9fcGVyX2NwdV9lbmQgICArIHBlcl9jcHVfb2Zmc2V0KGkpOworCisJCWlmICgoYWRkciA+PSBzdGFydCkgJiYgKGFkZHIgPCBlbmQpKQorCQkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIG1vZHVsZSB2YXI/CisJICovCisJcmV0dXJuIGlzX21vZHVsZV9hZGRyZXNzKGFkZHIpOworfQorCisvKgorICogVG8gbWFrZSBsb2NrIG5hbWUgcHJpbnRvdXRzIHVuaXF1ZSwgd2UgY2FsY3VsYXRlIGEgdW5pcXVlCisgKiBjbGFzcy0+bmFtZV92ZXJzaW9uIGdlbmVyYXRpb24gY291bnRlcjoKKyAqLworc3RhdGljIGludCBjb3VudF9tYXRjaGluZ19uYW1lcyhzdHJ1Y3QgbG9ja19jbGFzcyAqbmV3X2NsYXNzKQoreworCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzczsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKCFuZXdfY2xhc3MtPm5hbWUpCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzcywgJmFsbF9sb2NrX2NsYXNzZXMsIGxvY2tfZW50cnkpIHsKKwkJaWYgKG5ld19jbGFzcy0+a2V5IC0gbmV3X2NsYXNzLT5zdWJjbGFzcyA9PSBjbGFzcy0+a2V5KQorCQkJcmV0dXJuIGNsYXNzLT5uYW1lX3ZlcnNpb247CisJCWlmIChjbGFzcy0+bmFtZSAmJiAhc3RyY21wKGNsYXNzLT5uYW1lLCBuZXdfY2xhc3MtPm5hbWUpKQorCQkJY291bnQgPSBtYXgoY291bnQsIGNsYXNzLT5uYW1lX3ZlcnNpb24pOworCX0KKworCXJldHVybiBjb3VudCArIDE7Cit9CisKK2V4dGVybiB2b2lkIF9fZXJyb3JfdG9vX2JpZ19NQVhfTE9DS0RFUF9TVUJDTEFTU0VTKHZvaWQpOworCisvKgorICogUmVnaXN0ZXIgYSBsb2NrJ3MgY2xhc3MgaW4gdGhlIGhhc2gtdGFibGUsIGlmIHRoZSBjbGFzcyBpcyBub3QgcHJlc2VudAorICogeWV0LiBPdGhlcndpc2Ugd2UgbG9vayBpdCB1cC4gV2UgY2FjaGUgdGhlIHJlc3VsdCBpbiB0aGUgbG9jayBvYmplY3QKKyAqIGl0c2VsZiwgc28gYWN0dWFsIGxvb2t1cCBvZiB0aGUgaGFzaCBzaG91bGQgYmUgb25jZSBwZXIgbG9jayBvYmplY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvY2tfY2xhc3MgKgorcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKK3sKKwlzdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkgKmtleTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX2hlYWQ7CisJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tERVAKKwkvKgorCSAqIElmIHRoZSBhcmNoaXRlY3R1cmUgY2FsbHMgaW50byBsb2NrZGVwIGJlZm9yZSBpbml0aWFsaXppbmcKKwkgKiB0aGUgaGFzaGVzIHRoZW4gd2UnbGwgd2FybiBhYm91dCBpdCBsYXRlci4gKHdlIGNhbm5vdCBwcmludGsKKwkgKiByaWdodCBub3cpCisJICovCisJaWYgKHVubGlrZWx5KCFsb2NrZGVwX2luaXRpYWxpemVkKSkgeworCQlsb2NrZGVwX2luaXQoKTsKKwkJbG9ja2RlcF9pbml0X2Vycm9yID0gMTsKKwl9CisjZW5kaWYKKworCS8qCisJICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleQorCSAqIGlzIHRoZSBsb2NrIG9iamVjdCBpdHNlbGY6CisJICovCisJaWYgKHVubGlrZWx5KCFsb2NrLT5rZXkpKQorCQlsb2NrLT5rZXkgPSAodm9pZCAqKWxvY2s7CisKKwkvKgorCSAqIE5PVEU6IHRoZSBjbGFzcy1rZXkgbXVzdCBiZSB1bmlxdWUuIEZvciBkeW5hbWljIGxvY2tzLCBhIHN0YXRpYworCSAqIGxvY2tfY2xhc3Nfa2V5IHZhcmlhYmxlIGlzIHBhc3NlZCBpbiB0aHJvdWdoIHRoZSBtdXRleF9pbml0KCkKKwkgKiAob3Igc3Bpbl9sb2NrX2luaXQoKSkgY2FsbCAtIHdoaWNoIGFjdHMgYXMgdGhlIGtleS4gRm9yIHN0YXRpYworCSAqIGxvY2tzIHdlIHVzZSB0aGUgbG9jayBvYmplY3QgaXRzZWxmIGFzIHRoZSBrZXkuCisJICovCisJaWYgKHNpemVvZihzdHJ1Y3QgbG9ja19jbGFzc19rZXkpID4gc2l6ZW9mKHN0cnVjdCBsb2NrX2NsYXNzKSkKKwkJX19lcnJvcl90b29fYmlnX01BWF9MT0NLREVQX1NVQkNMQVNTRVMoKTsKKworCWtleSA9IGxvY2stPmtleS0+c3Via2V5cyArIHN1YmNsYXNzOworCisJaGFzaF9oZWFkID0gY2xhc3NoYXNoZW50cnkoa2V5KTsKKworCS8qCisJICogV2UgY2FuIHdhbGsgdGhlIGhhc2ggbG9ja2ZyZWUsIGJlY2F1c2UgdGhlIGhhc2ggb25seQorCSAqIGdyb3dzLCBhbmQgd2UgYXJlIGNhcmVmdWwgd2hlbiBhZGRpbmcgZW50cmllcyB0byB0aGUgZW5kOgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3MsIGhhc2hfaGVhZCwgaGFzaF9lbnRyeSkKKwkJaWYgKGNsYXNzLT5rZXkgPT0ga2V5KQorCQkJZ290byBvdXRfc2V0OworCisJLyoKKwkgKiBEZWJ1Zy1jaGVjazogYWxsIGtleXMgbXVzdCBiZSBwZXJzaXN0ZW50IQorIAkgKi8KKwlpZiAoIXN0YXRpY19vYmoobG9jay0+a2V5KSkgeworCQlkZWJ1Z19sb2Nrc19vZmYoKTsKKwkJcHJpbnRrKCJJTkZPOiB0cnlpbmcgdG8gcmVnaXN0ZXIgbm9uLXN0YXRpYyBrZXkuXG4iKTsKKwkJcHJpbnRrKCJ0aGUgY29kZSBpcyBmaW5lIGJ1dCBuZWVkcyBsb2NrZGVwIGFubm90YXRpb24uXG4iKTsKKwkJcHJpbnRrKCJ0dXJuaW5nIG9mZiB0aGUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuXG4iKTsKKwkJZHVtcF9zdGFjaygpOworCisJCXJldHVybiBOVUxMOworCX0KKworCV9fcmF3X3NwaW5fbG9jaygmaGFzaF9sb2NrKTsKKwkvKgorCSAqIFdlIGhhdmUgdG8gZG8gdGhlIGhhc2gtd2FsayBhZ2FpbiwgdG8gYXZvaWQgcmFjZXMKKwkgKiB3aXRoIGFub3RoZXIgQ1BVOgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3MsIGhhc2hfaGVhZCwgaGFzaF9lbnRyeSkKKwkJaWYgKGNsYXNzLT5rZXkgPT0ga2V5KQorCQkJZ290byBvdXRfdW5sb2NrX3NldDsKKwkvKgorCSAqIEFsbG9jYXRlIGEgbmV3IGtleSBmcm9tIHRoZSBzdGF0aWMgYXJyYXksIGFuZCBhZGQgaXQgdG8KKwkgKiB0aGUgaGFzaDoKKwkgKi8KKwlpZiAobnJfbG9ja19jbGFzc2VzID49IE1BWF9MT0NLREVQX0tFWVMpIHsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCWRlYnVnX2xvY2tzX29mZigpOworCQlwcmludGsoIkJVRzogTUFYX0xPQ0tERVBfS0VZUyB0b28gbG93IVxuIik7CisJCXByaW50aygidHVybmluZyBvZmYgdGhlIGxvY2tpbmcgY29ycmVjdG5lc3MgdmFsaWRhdG9yLlxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwljbGFzcyA9IGxvY2tfY2xhc3NlcyArIG5yX2xvY2tfY2xhc3NlcysrOworCWRlYnVnX2F0b21pY19pbmMoJm5yX3VudXNlZF9sb2Nrcyk7CisJY2xhc3MtPmtleSA9IGtleTsKKwljbGFzcy0+bmFtZSA9IGxvY2stPm5hbWU7CisJY2xhc3MtPnN1YmNsYXNzID0gc3ViY2xhc3M7CisJSU5JVF9MSVNUX0hFQUQoJmNsYXNzLT5sb2NrX2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmY2xhc3MtPmxvY2tzX2JlZm9yZSk7CisJSU5JVF9MSVNUX0hFQUQoJmNsYXNzLT5sb2Nrc19hZnRlcik7CisJY2xhc3MtPm5hbWVfdmVyc2lvbiA9IGNvdW50X21hdGNoaW5nX25hbWVzKGNsYXNzKTsKKwkvKgorCSAqIFdlIHVzZSBSQ1UncyBzYWZlIGxpc3QtYWRkIG1ldGhvZCB0byBtYWtlCisJICogcGFyYWxsZWwgd2Fsa2luZyBvZiB0aGUgaGFzaC1saXN0IHNhZmU6CisJICovCisJbGlzdF9hZGRfdGFpbF9yY3UoJmNsYXNzLT5oYXNoX2VudHJ5LCBoYXNoX2hlYWQpOworCisJaWYgKHZlcmJvc2UoY2xhc3MpKSB7CisJCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOworCQlwcmludGsoIlxubmV3IGNsYXNzICVwOiAlcyIsIGNsYXNzLT5rZXksIGNsYXNzLT5uYW1lKTsKKwkJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPiAxKQorCQkJcHJpbnRrKCIjJWQiLCBjbGFzcy0+bmFtZV92ZXJzaW9uKTsKKwkJcHJpbnRrKCJcbiIpOworCQlkdW1wX3N0YWNrKCk7CisJCV9fcmF3X3NwaW5fbG9jaygmaGFzaF9sb2NrKTsKKwl9CitvdXRfdW5sb2NrX3NldDoKKwlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKworb3V0X3NldDoKKwlsb2NrLT5jbGFzc1tzdWJjbGFzc10gPSBjbGFzczsKKworCURFQlVHX0xPQ0tTX1dBUk5fT04oY2xhc3MtPnN1YmNsYXNzICE9IHN1YmNsYXNzKTsKKworCXJldHVybiBjbGFzczsKK30KKworLyoKKyAqIExvb2sgdXAgYSBkZXBlbmRlbmN5IGNoYWluLiBJZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50IHlldCB0aGVuCisgKiBhZGQgaXQgYW5kIHJldHVybiAwIC0gaW4gdGhpcyBjYXNlIHRoZSBuZXcgZGVwZW5kZW5jeSBjaGFpbiBpcworICogdmFsaWRhdGVkLiBJZiB0aGUga2V5IGlzIGFscmVhZHkgaGFzaGVkLCByZXR1cm4gMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbG9va3VwX2NoYWluX2NhY2hlKHU2NCBjaGFpbl9rZXkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGFzaF9oZWFkID0gY2hhaW5oYXNoZW50cnkoY2hhaW5fa2V5KTsKKwlzdHJ1Y3QgbG9ja19jaGFpbiAqY2hhaW47CisKKwlERUJVR19MT0NLU19XQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCS8qCisJICogV2UgY2FuIHdhbGsgaXQgbG9jay1mcmVlLCBiZWNhdXNlIGVudHJpZXMgb25seSBnZXQgYWRkZWQKKwkgKiB0byB0aGUgaGFzaDoKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCBoYXNoX2hlYWQsIGVudHJ5KSB7CisJCWlmIChjaGFpbi0+Y2hhaW5fa2V5ID09IGNoYWluX2tleSkgeworY2FjaGVfaGl0OgorCQkJZGVidWdfYXRvbWljX2luYygmY2hhaW5fbG9va3VwX2hpdHMpOworCQkJLyoKKwkJCSAqIEluIHRoZSBkZWJ1Z2dpbmcgY2FzZSwgZm9yY2UgcmVkdW5kYW50IGNoZWNraW5nCisJCQkgKiBieSByZXR1cm5pbmcgMToKKwkJCSAqLworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLREVQCisJCQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJCQlyZXR1cm4gMTsKKyNlbmRpZgorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSBhIG5ldyBjaGFpbiBlbnRyeSBmcm9tIHRoZSBzdGF0aWMgYXJyYXksIGFuZCBhZGQKKwkgKiBpdCB0byB0aGUgaGFzaDoKKwkgKi8KKwlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJLyoKKwkgKiBXZSBoYXZlIHRvIHdhbGsgdGhlIGNoYWluIGFnYWluIGxvY2tlZCAtIHRvIGF2b2lkIGR1cGxpY2F0ZXM6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgaGFzaF9oZWFkLCBlbnRyeSkgeworCQlpZiAoY2hhaW4tPmNoYWluX2tleSA9PSBjaGFpbl9rZXkpIHsKKwkJCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOworCQkJZ290byBjYWNoZV9oaXQ7CisJCX0KKwl9CisJaWYgKHVubGlrZWx5KG5yX2xvY2tfY2hhaW5zID49IE1BWF9MT0NLREVQX0NIQUlOUykpIHsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCWRlYnVnX2xvY2tzX29mZigpOworCQlwcmludGsoIkJVRzogTUFYX0xPQ0tERVBfQ0hBSU5TIHRvbyBsb3chXG4iKTsKKwkJcHJpbnRrKCJ0dXJuaW5nIG9mZiB0aGUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWNoYWluID0gbG9ja19jaGFpbnMgKyBucl9sb2NrX2NoYWlucysrOworCWNoYWluLT5jaGFpbl9rZXkgPSBjaGFpbl9rZXk7CisJbGlzdF9hZGRfdGFpbF9yY3UoJmNoYWluLT5lbnRyeSwgaGFzaF9oZWFkKTsKKwlkZWJ1Z19hdG9taWNfaW5jKCZjaGFpbl9sb29rdXBfbWlzc2VzKTsKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlpZiAoY3VycmVudC0+aGFyZGlycV9jb250ZXh0KQorCQlucl9oYXJkaXJxX2NoYWlucysrOworCWVsc2UgeworCQlpZiAoY3VycmVudC0+c29mdGlycV9jb250ZXh0KQorCQkJbnJfc29mdGlycV9jaGFpbnMrKzsKKwkJZWxzZQorCQkJbnJfcHJvY2Vzc19jaGFpbnMrKzsKKwl9CisjZWxzZQorCW5yX3Byb2Nlc3NfY2hhaW5zKys7CisjZW5kaWYKKworCXJldHVybiAxOworfQorCisvKgorICogV2UgYXJlIGJ1aWxkaW5nIGN1cnJfY2hhaW5fa2V5IGluY3JlbWVudGFsbHksIHNvIGRvdWJsZS1jaGVjaworICogaXQgZnJvbSBzY3JhdGNoLCB0byBtYWtlIHN1cmUgdGhhdCBpdCdzIGRvbmUgY29ycmVjdGx5OgorICovCitzdGF0aWMgdm9pZCBjaGVja19jaGFpbl9rZXkoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQoreworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLREVQCisJc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssICpwcmV2X2hsb2NrID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaSwgaWQ7CisJdTY0IGNoYWluX2tleSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3Vyci0+bG9ja2RlcF9kZXB0aDsgaSsrKSB7CisJCWhsb2NrID0gY3Vyci0+aGVsZF9sb2NrcyArIGk7CisJCWlmIChjaGFpbl9rZXkgIT0gaGxvY2stPnByZXZfY2hhaW5fa2V5KSB7CisJCQlkZWJ1Z19sb2Nrc19vZmYoKTsKKwkJCXByaW50aygiaG0jMSwgZGVwdGg6ICV1IFsldV0sICUwMTZMeCAhPSAlMDE2THhcbiIsCisJCQkJY3Vyci0+bG9ja2RlcF9kZXB0aCwgaSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNoYWluX2tleSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWhsb2NrLT5wcmV2X2NoYWluX2tleSk7CisJCQlXQVJOX09OKDEpOworCQkJcmV0dXJuOworCQl9CisJCWlkID0gaGxvY2stPmNsYXNzIC0gbG9ja19jbGFzc2VzOworCQlERUJVR19MT0NLU19XQVJOX09OKGlkID49IE1BWF9MT0NLREVQX0tFWVMpOworCQlpZiAocHJldl9obG9jayAmJiAocHJldl9obG9jay0+aXJxX2NvbnRleHQgIT0KKwkJCQkJCQlobG9jay0+aXJxX2NvbnRleHQpKQorCQkJY2hhaW5fa2V5ID0gMDsKKwkJY2hhaW5fa2V5ID0gaXRlcmF0ZV9jaGFpbl9rZXkoY2hhaW5fa2V5LCBpZCk7CisJCXByZXZfaGxvY2sgPSBobG9jazsKKwl9CisJaWYgKGNoYWluX2tleSAhPSBjdXJyLT5jdXJyX2NoYWluX2tleSkgeworCQlkZWJ1Z19sb2Nrc19vZmYoKTsKKwkJcHJpbnRrKCJobSMyLCBkZXB0aDogJXUgWyV1XSwgJTAxNkx4ICE9ICUwMTZMeFxuIiwKKwkJCWN1cnItPmxvY2tkZXBfZGVwdGgsIGksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWNoYWluX2tleSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3Vyci0+Y3Vycl9jaGFpbl9rZXkpOworCQlXQVJOX09OKDEpOworCX0KKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisKKy8qCisgKiBwcmludCBpcnEgaW52ZXJzaW9uIGJ1ZzoKKyAqLworc3RhdGljIGludAorcHJpbnRfaXJxX2ludmVyc2lvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgbG9ja19jbGFzcyAqb3RoZXIsCisJCQlzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLCBpbnQgZm9yd2FyZHMsCisJCQljb25zdCBjaGFyICppcnFjbGFzcykKK3sKKwlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwlkZWJ1Z19sb2Nrc19vZmYoKTsKKwlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCQlyZXR1cm4gMDsKKworCXByaW50aygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ayggICJbIElORk86IHBvc3NpYmxlIGlycSBsb2NrIGludmVyc2lvbiBkZXBlbmRlbmN5IGRldGVjdGVkIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygiJXMvJWQganVzdCBjaGFuZ2VkIHRoZSBzdGF0ZSBvZiBsb2NrOlxuIiwKKwkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkKTsKKwlwcmludF9sb2NrKHRoaXMpOworCWlmIChmb3J3YXJkcykKKwkJcHJpbnRrKCJidXQgdGhpcyBsb2NrIHRvb2sgYW5vdGhlciwgJXMtaXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OlxuIiwgaXJxY2xhc3MpOworCWVsc2UKKwkJcHJpbnRrKCJidXQgdGhpcyBsb2NrIHdhcyB0YWtlbiBieSBhbm90aGVyLCAlcy1pcnEtc2FmZSBsb2NrIGluIHRoZSBwYXN0OlxuIiwgaXJxY2xhc3MpOworCXByaW50X2xvY2tfbmFtZShvdGhlcik7CisJcHJpbnRrKCJcblxuYW5kIGludGVycnVwdHMgY291bGQgY3JlYXRlIGludmVyc2UgbG9jayBvcmRlcmluZyBiZXR3ZWVuIHRoZW0uXG5cbiIpOworCisJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG4iKTsKKwlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CisKKwlwcmludGsoIlxudGhlIGZpcnN0IGxvY2sncyBkZXBlbmRlbmNpZXM6XG4iKTsKKwlwcmludF9sb2NrX2RlcGVuZGVuY2llcyh0aGlzLT5jbGFzcywgMCk7CisKKwlwcmludGsoIlxudGhlIHNlY29uZCBsb2NrJ3MgZGVwZW5kZW5jaWVzOlxuIik7CisJcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMob3RoZXIsIDApOworCisJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOworCWR1bXBfc3RhY2soKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUHJvdmUgdGhhdCBpbiB0aGUgZm9yd2FyZHMtZGlyZWN0aW9uIHN1YmdyYXBoIHN0YXJ0aW5nIGF0IDx0aGlzPgorICogdGhlcmUgaXMgbm8gbG9jayBtYXRjaGluZyA8bWFzaz46CisgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX3VzYWdlX2ZvcndhcmRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqdGhpcywKKwkJICAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCwgY29uc3QgY2hhciAqaXJxY2xhc3MpCit7CisJaW50IHJldDsKKworCWZpbmRfdXNhZ2VfYml0ID0gYml0OworCS8qIGZpbGxzIGluIDxmb3J3YXJkc19tYXRjaD4gKi8KKwlyZXQgPSBmaW5kX3VzYWdlX2ZvcndhcmRzKHRoaXMtPmNsYXNzLCAwKTsKKwlpZiAoIXJldCB8fCByZXQgPT0gMSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBwcmludF9pcnFfaW52ZXJzaW9uX2J1ZyhjdXJyLCBmb3J3YXJkc19tYXRjaCwgdGhpcywgMSwgaXJxY2xhc3MpOworfQorCisvKgorICogUHJvdmUgdGhhdCBpbiB0aGUgYmFja3dhcmRzLWRpcmVjdGlvbiBzdWJncmFwaCBzdGFydGluZyBhdCA8dGhpcz4KKyAqIHRoZXJlIGlzIG5vIGxvY2sgbWF0Y2hpbmcgPG1hc2s+OgorICovCitzdGF0aWMgaW50CitjaGVja191c2FnZV9iYWNrd2FyZHMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLAorCQkgICAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCwgY29uc3QgY2hhciAqaXJxY2xhc3MpCit7CisJaW50IHJldDsKKworCWZpbmRfdXNhZ2VfYml0ID0gYml0OworCS8qIGZpbGxzIGluIDxiYWNrd2FyZHNfbWF0Y2g+ICovCisJcmV0ID0gZmluZF91c2FnZV9iYWNrd2FyZHModGhpcy0+Y2xhc3MsIDApOworCWlmICghcmV0IHx8IHJldCA9PSAxKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHByaW50X2lycV9pbnZlcnNpb25fYnVnKGN1cnIsIGJhY2t3YXJkc19tYXRjaCwgdGhpcywgMCwgaXJxY2xhc3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3sKKwlwcmludGsoImlycSBldmVudCBzdGFtcDogJXVcbiIsIGN1cnItPmlycV9ldmVudHMpOworCXByaW50aygiaGFyZGlycXMgbGFzdCAgZW5hYmxlZCBhdCAoJXUpOiAiLCBjdXJyLT5oYXJkaXJxX2VuYWJsZV9ldmVudCk7CisJcHJpbnRfaXBfc3ltKGN1cnItPmhhcmRpcnFfZW5hYmxlX2lwKTsKKwlwcmludGsoImhhcmRpcnFzIGxhc3QgZGlzYWJsZWQgYXQgKCV1KTogIiwgY3Vyci0+aGFyZGlycV9kaXNhYmxlX2V2ZW50KTsKKwlwcmludF9pcF9zeW0oY3Vyci0+aGFyZGlycV9kaXNhYmxlX2lwKTsKKwlwcmludGsoInNvZnRpcnFzIGxhc3QgIGVuYWJsZWQgYXQgKCV1KTogIiwgY3Vyci0+c29mdGlycV9lbmFibGVfZXZlbnQpOworCXByaW50X2lwX3N5bShjdXJyLT5zb2Z0aXJxX2VuYWJsZV9pcCk7CisJcHJpbnRrKCJzb2Z0aXJxcyBsYXN0IGRpc2FibGVkIGF0ICgldSk6ICIsIGN1cnItPnNvZnRpcnFfZGlzYWJsZV9ldmVudCk7CisJcHJpbnRfaXBfc3ltKGN1cnItPnNvZnRpcnFfZGlzYWJsZV9pcCk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitwcmludF91c2FnZV9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLAorCQllbnVtIGxvY2tfdXNhZ2VfYml0IHByZXZfYml0LCBlbnVtIGxvY2tfdXNhZ2VfYml0IG5ld19iaXQpCit7CisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJZGVidWdfbG9ja3Nfb2ZmKCk7CisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGsoICAiWyBJTkZPOiBpbmNvbnNpc3RlbnQgbG9jayBzdGF0ZSBdXG4iKTsKKwlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCXByaW50aygiaW5jb25zaXN0ZW50IHslc30gLT4geyVzfSB1c2FnZS5cbiIsCisJCXVzYWdlX3N0cltwcmV2X2JpdF0sIHVzYWdlX3N0cltuZXdfYml0XSk7CisKKwlwcmludGsoIiVzLyVkIFtIQyV1WyVsdV06U0MldVslbHVdOkhFJXU6U0UldV0gdGFrZXM6XG4iLAorCQljdXJyLT5jb21tLCBjdXJyLT5waWQsCisJCXRyYWNlX2hhcmRpcnFfY29udGV4dChjdXJyKSwgaGFyZGlycV9jb3VudCgpID4+IEhBUkRJUlFfU0hJRlQsCisJCXRyYWNlX3NvZnRpcnFfY29udGV4dChjdXJyKSwgc29mdGlycV9jb3VudCgpID4+IFNPRlRJUlFfU0hJRlQsCisJCXRyYWNlX2hhcmRpcnFzX2VuYWJsZWQoY3VyciksCisJCXRyYWNlX3NvZnRpcnFzX2VuYWJsZWQoY3VycikpOworCXByaW50X2xvY2sodGhpcyk7CisKKwlwcmludGsoInslc30gc3RhdGUgd2FzIHJlZ2lzdGVyZWQgYXQ6XG4iLCB1c2FnZV9zdHJbcHJldl9iaXRdKTsKKwlwcmludF9zdGFja190cmFjZSh0aGlzLT5jbGFzcy0+dXNhZ2VfdHJhY2VzICsgcHJldl9iaXQsIDEpOworCisJcHJpbnRfaXJxdHJhY2VfZXZlbnRzKGN1cnIpOworCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuIik7CisJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOworCisJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOworCWR1bXBfc3RhY2soKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUHJpbnQgb3V0IGFuIGVycm9yIGlmIGFuIGludmFsaWQgYml0IGlzIHNldDoKKyAqLworc3RhdGljIGlubGluZSBpbnQKK3ZhbGlkX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqdGhpcywKKwkgICAgZW51bSBsb2NrX3VzYWdlX2JpdCBuZXdfYml0LCBlbnVtIGxvY2tfdXNhZ2VfYml0IGJhZF9iaXQpCit7CisJaWYgKHVubGlrZWx5KHRoaXMtPmNsYXNzLT51c2FnZV9tYXNrICYgKDEgPDwgYmFkX2JpdCkpKQorCQlyZXR1cm4gcHJpbnRfdXNhZ2VfYnVnKGN1cnIsIHRoaXMsIGJhZF9iaXQsIG5ld19iaXQpOworCXJldHVybiAxOworfQorCisjZGVmaW5lIFNUUklDVF9SRUFEX0NIRUNLUwkxCisKKy8qCisgKiBNYXJrIGEgbG9jayB3aXRoIGEgdXNhZ2UgYml0LCBhbmQgdmFsaWRhdGUgdGhlIHN0YXRlIHRyYW5zaXRpb246CisgKi8KK3N0YXRpYyBpbnQgbWFya19sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqdGhpcywKKwkJICAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IG5ld19iaXQsIHVuc2lnbmVkIGxvbmcgaXApCit7CisJdW5zaWduZWQgaW50IG5ld19tYXNrID0gMSA8PCBuZXdfYml0LCByZXQgPSAxOworCisJLyoKKwkgKiBJZiBhbHJlYWR5IHNldCB0aGVuIGRvIG5vdCBkaXJ0eSB0aGUgY2FjaGVsaW5lLAorCSAqIG5vciBkbyBhbnkgY2hlY2tzOgorCSAqLworCWlmIChsaWtlbHkodGhpcy0+Y2xhc3MtPnVzYWdlX21hc2sgJiBuZXdfbWFzaykpCisJCXJldHVybiAxOworCisJX19yYXdfc3Bpbl9sb2NrKCZoYXNoX2xvY2spOworCS8qCisJICogTWFrZSBzdXJlIHdlIGRpZG50IHJhY2U6CisJICovCisJaWYgKHVubGlrZWx5KHRoaXMtPmNsYXNzLT51c2FnZV9tYXNrICYgbmV3X21hc2spKSB7CisJCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOworCQlyZXR1cm4gMTsKKwl9CisKKwl0aGlzLT5jbGFzcy0+dXNhZ2VfbWFzayB8PSBuZXdfbWFzazsKKworI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWlmIChuZXdfYml0ID09IExPQ0tfRU5BQkxFRF9IQVJESVJRUyB8fAorCQkJbmV3X2JpdCA9PSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKKwkJaXAgPSBjdXJyLT5oYXJkaXJxX2VuYWJsZV9pcDsKKwllbHNlIGlmIChuZXdfYml0ID09IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUyB8fAorCQkJbmV3X2JpdCA9PSBMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRCkKKwkJaXAgPSBjdXJyLT5zb2Z0aXJxX2VuYWJsZV9pcDsKKyNlbmRpZgorCWlmICghc2F2ZV90cmFjZSh0aGlzLT5jbGFzcy0+dXNhZ2VfdHJhY2VzICsgbmV3X2JpdCkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChuZXdfYml0KSB7CisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJY2FzZSBMT0NLX1VTRURfSU5fSEFSRElSUToKKwkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX0VOQUJMRURfSEFSRElSUVMpKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwKKwkJCQkgTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQpKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKKwkJICogdG9vayBubyBoYXJkaXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OgorCQkgKi8KKwkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAorCQkJCQkgIExPQ0tfRU5BQkxFRF9IQVJESVJRUywgImhhcmQiKSkKKwkJCXJldHVybiAwOworI2lmIFNUUklDVF9SRUFEX0NIRUNLUworCQkvKgorCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCisJCSAqIHRvb2sgbm8gaGFyZGlycS11bnNhZmUtcmVhZCBsb2NrIGluIHRoZSBwYXN0OgorCQkgKi8KKwkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAorCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFELCAiaGFyZC1yZWFkIikpCisJCQlyZXR1cm4gMDsKKyNlbmRpZgorCQlpZiAoaGFyZGlycV92ZXJib3NlKHRoaXMtPmNsYXNzKSkKKwkJCXJldCA9IDI7CisJCWJyZWFrOworCWNhc2UgTE9DS19VU0VEX0lOX1NPRlRJUlE6CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19FTkFCTEVEX1NPRlRJUlFTKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsCisJCQkJIExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKSkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCisJCSAqIHRvb2sgbm8gc29mdGlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDoKKwkJICovCisJCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKKwkJCQkJICBMT0NLX0VOQUJMRURfU09GVElSUVMsICJzb2Z0IikpCisJCQlyZXR1cm4gMDsKKyNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKKwkJLyoKKwkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jaworCQkgKiB0b29rIG5vIHNvZnRpcnEtdW5zYWZlLXJlYWQgbG9jayBpbiB0aGUgcGFzdDoKKwkJICovCisJCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKKwkJCQlMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRCwgInNvZnQtcmVhZCIpKQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwkJaWYgKHNvZnRpcnFfdmVyYm9zZSh0aGlzLT5jbGFzcykpCisJCQlyZXQgPSAyOworCQlicmVhazsKKwljYXNlIExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQ6CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19FTkFCTEVEX0hBUkRJUlFTKSkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXJlYWQtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKKwkJICogdG9vayBubyBoYXJkaXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OgorCQkgKi8KKwkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAorCQkJCQkgIExPQ0tfRU5BQkxFRF9IQVJESVJRUywgImhhcmQiKSkKKwkJCXJldHVybiAwOworCQlpZiAoaGFyZGlycV92ZXJib3NlKHRoaXMtPmNsYXNzKSkKKwkJCXJldCA9IDI7CisJCWJyZWFrOworCWNhc2UgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRDoKKwkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX0VOQUJMRURfU09GVElSUVMpKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtcmVhZC1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jaworCQkgKiB0b29rIG5vIHNvZnRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6CisJCSAqLworCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCisJCQkJCSAgTE9DS19FTkFCTEVEX1NPRlRJUlFTLCAic29mdCIpKQorCQkJcmV0dXJuIDA7CisJCWlmIChzb2Z0aXJxX3ZlcmJvc2UodGhpcy0+Y2xhc3MpKQorCQkJcmV0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBMT0NLX0VOQUJMRURfSEFSRElSUVM6CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19VU0VEX0lOX0hBUkRJUlEpKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwKKwkJCQkgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCkpCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS11bnNhZmUsIGNoZWNrIHRoYXQgbm8gaGFyZGlycS1zYWZlCisJCSAqIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sgaXQgaW4gdGhlIHBhc3Q6CisJCSAqLworCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAorCQkJCQkgICBMT0NLX1VTRURfSU5fSEFSRElSUSwgImhhcmQiKSkKKwkJCXJldHVybiAwOworI2lmIFNUUklDVF9SRUFEX0NIRUNLUworCQkvKgorCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXVuc2FmZSwgY2hlY2sgdGhhdCBubworCQkgKiBoYXJkaXJxLXNhZmUtcmVhZCBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rCisJCSAqIGl0IGluIHRoZSBwYXN0OgorCQkgKi8KKwkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKKwkJCQkgICBMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFELCAiaGFyZC1yZWFkIikpCisJCQlyZXR1cm4gMDsKKyNlbmRpZgorCQlpZiAoaGFyZGlycV92ZXJib3NlKHRoaXMtPmNsYXNzKSkKKwkJCXJldCA9IDI7CisJCWJyZWFrOworCWNhc2UgTE9DS19FTkFCTEVEX1NPRlRJUlFTOgorCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsCisJCQkJIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtdW5zYWZlLCBjaGVjayB0aGF0IG5vIHNvZnRpcnEtc2FmZQorCQkgKiBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rIGl0IGluIHRoZSBwYXN0OgorCQkgKi8KKwkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKKwkJCQkJICAgTE9DS19VU0VEX0lOX1NPRlRJUlEsICJzb2Z0IikpCisJCQlyZXR1cm4gMDsKKyNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKKwkJLyoKKwkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS11bnNhZmUsIGNoZWNrIHRoYXQgbm8KKwkJICogc29mdGlycS1zYWZlLXJlYWQgbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vaworCQkgKiBpdCBpbiB0aGUgcGFzdDoKKwkJICovCisJCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCisJCQkJICAgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCwgInNvZnQtcmVhZCIpKQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwkJaWYgKHNvZnRpcnFfdmVyYm9zZSh0aGlzLT5jbGFzcykpCisJCQlyZXQgPSAyOworCQlicmVhazsKKwljYXNlIExPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEOgorCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfVVNFRF9JTl9IQVJESVJRKSkKKwkJCXJldHVybiAwOworI2lmIFNUUklDVF9SRUFEX0NIRUNLUworCQkvKgorCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXJlYWQtdW5zYWZlLCBjaGVjayB0aGF0IG5vCisJCSAqIGhhcmRpcnEtc2FmZSBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rIGl0IGluIHRoZSBwYXN0OgorCQkgKi8KKwkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKKwkJCQkJICAgTE9DS19VU0VEX0lOX0hBUkRJUlEsICJoYXJkIikpCisJCQlyZXR1cm4gMDsKKyNlbmRpZgorCQlpZiAoaGFyZGlycV92ZXJib3NlKHRoaXMtPmNsYXNzKSkKKwkJCXJldCA9IDI7CisJCWJyZWFrOworCWNhc2UgTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQ6CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19VU0VEX0lOX1NPRlRJUlEpKQorCQkJcmV0dXJuIDA7CisjaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCisJCS8qCisJCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtcmVhZC11bnNhZmUsIGNoZWNrIHRoYXQgbm8KKwkJICogc29mdGlycS1zYWZlIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sgaXQgaW4gdGhlIHBhc3Q6CisJCSAqLworCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAorCQkJCQkgICBMT0NLX1VTRURfSU5fU09GVElSUSwgInNvZnQiKSkKKwkJCXJldHVybiAwOworI2VuZGlmCisJCWlmIChzb2Z0aXJxX3ZlcmJvc2UodGhpcy0+Y2xhc3MpKQorCQkJcmV0ID0gMjsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIExPQ0tfVVNFRDoKKwkJLyoKKwkJICogQWRkIGl0IHRvIHRoZSBnbG9iYWwgbGlzdCBvZiBjbGFzc2VzOgorCQkgKi8KKwkJbGlzdF9hZGRfdGFpbF9yY3UoJnRoaXMtPmNsYXNzLT5sb2NrX2VudHJ5LCAmYWxsX2xvY2tfY2xhc3Nlcyk7CisJCWRlYnVnX2F0b21pY19kZWMoJm5yX3VudXNlZF9sb2Nrcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRlYnVnX2xvY2tzX29mZigpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKworCS8qCisJICogV2UgbXVzdCBwcmludGsgb3V0c2lkZSBvZiB0aGUgaGFzaF9sb2NrOgorCSAqLworCWlmIChyZXQgPT0gMikgeworCQlwcmludGsoIlxubWFya2VkIGxvY2sgYXMgeyVzfTpcbiIsIHVzYWdlX3N0cltuZXdfYml0XSk7CisJCXByaW50X2xvY2sodGhpcyk7CisJCXByaW50X2lycXRyYWNlX2V2ZW50cyhjdXJyKTsKKwkJZHVtcF9zdGFjaygpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKy8qCisgKiBNYXJrIGFsbCBoZWxkIGxvY2tzIHdpdGggYSB1c2FnZSBiaXQ6CisgKi8KK3N0YXRpYyBpbnQKK21hcmtfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBoYXJkaXJxLCB1bnNpZ25lZCBsb25nIGlwKQoreworCWVudW0gbG9ja191c2FnZV9iaXQgdXNhZ2VfYml0OworCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN1cnItPmxvY2tkZXBfZGVwdGg7IGkrKykgeworCQlobG9jayA9IGN1cnItPmhlbGRfbG9ja3MgKyBpOworCisJCWlmIChoYXJkaXJxKSB7CisJCQlpZiAoaGxvY2stPnJlYWQpCisJCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQ7CisJCQllbHNlCisJCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX0hBUkRJUlFTOworCQl9IGVsc2UgeworCQkJaWYgKGhsb2NrLT5yZWFkKQorCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEOworCQkJZWxzZQorCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUzsKKwkJfQorCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgdXNhZ2VfYml0LCBpcCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIERlYnVnZ2luZyBoZWxwZXI6IHZpYSB0aGlzIGZsYWcgd2Uga25vdyB0aGF0IHdlIGFyZSBpbgorICogJ2Vhcmx5IGJvb3R1cCBjb2RlJywgYW5kIHdpbGwgd2FybiBhYm91dCBhbnkgaW52YWxpZCBpcnFzLW9uIGV2ZW50OgorICovCitzdGF0aWMgaW50IGVhcmx5X2Jvb3RfaXJxc19lbmFibGVkOworCit2b2lkIGVhcmx5X2Jvb3RfaXJxc19vZmYodm9pZCkKK3sKKwllYXJseV9ib290X2lycXNfZW5hYmxlZCA9IDA7Cit9CisKK3ZvaWQgZWFybHlfYm9vdF9pcnFzX29uKHZvaWQpCit7CisJZWFybHlfYm9vdF9pcnFzX2VuYWJsZWQgPSAxOworfQorCisvKgorICogSGFyZGlycXMgd2lsbCBiZSBlbmFibGVkOgorICovCit2b2lkIHRyYWNlX2hhcmRpcnFzX29uKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKwl1bnNpZ25lZCBsb25nIGlwOworCisJaWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcyB8fCBjdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbikpCisJCXJldHVybjsKKworCWlmIChERUJVR19MT0NLU19XQVJOX09OKHVubGlrZWx5KCFlYXJseV9ib290X2lycXNfZW5hYmxlZCkpKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoY3Vyci0+aGFyZGlycXNfZW5hYmxlZCkpIHsKKwkJZGVidWdfYXRvbWljX2luYygmcmVkdW5kYW50X2hhcmRpcnFzX29uKTsKKwkJcmV0dXJuOworCX0KKwkvKiB3ZSdsbCBkbyBhbiBPRkYgLT4gT04gdHJhbnNpdGlvbjogKi8KKwljdXJyLT5oYXJkaXJxc19lbmFibGVkID0gMTsKKwlpcCA9ICh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKSkKKwkJcmV0dXJuOworCWlmIChERUJVR19MT0NLU19XQVJOX09OKGN1cnJlbnQtPmhhcmRpcnFfY29udGV4dCkpCisJCXJldHVybjsKKwkvKgorCSAqIFdlIGFyZSBnb2luZyB0byB0dXJuIGhhcmRpcnFzIG9uLCBzbyBzZXQgdGhlCisJICogdXNhZ2UgYml0IGZvciBhbGwgaGVsZCBsb2NrczoKKwkgKi8KKwlpZiAoIW1hcmtfaGVsZF9sb2NrcyhjdXJyLCAxLCBpcCkpCisJCXJldHVybjsKKwkvKgorCSAqIElmIHdlIGhhdmUgc29mdGlycXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhlIHVzYWdlCisJICogYml0IGZvciBhbGwgaGVsZCBsb2Nrcy4gKGRpc2FibGVkIGhhcmRpcnFzIHByZXZlbnRlZAorCSAqIHRoaXMgYml0IGZyb20gYmVpbmcgc2V0IGJlZm9yZSkKKwkgKi8KKwlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKKwkJaWYgKCFtYXJrX2hlbGRfbG9ja3MoY3VyciwgMCwgaXApKQorCQkJcmV0dXJuOworCisJY3Vyci0+aGFyZGlycV9lbmFibGVfaXAgPSBpcDsKKwljdXJyLT5oYXJkaXJxX2VuYWJsZV9ldmVudCA9ICsrY3Vyci0+aXJxX2V2ZW50czsKKwlkZWJ1Z19hdG9taWNfaW5jKCZoYXJkaXJxc19vbl9ldmVudHMpOworfQorCitFWFBPUlRfU1lNQk9MKHRyYWNlX2hhcmRpcnFzX29uKTsKKworLyoKKyAqIEhhcmRpcnFzIHdlcmUgZGlzYWJsZWQ6CisgKi8KK3ZvaWQgdHJhY2VfaGFyZGlycXNfb2ZmKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKworCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MgfHwgY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQorCQlyZXR1cm47CisKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKSkKKwkJcmV0dXJuOworCisJaWYgKGN1cnItPmhhcmRpcnFzX2VuYWJsZWQpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBkb25lIGFuIE9OIC0+IE9GRiB0cmFuc2l0aW9uOgorCQkgKi8KKwkJY3Vyci0+aGFyZGlycXNfZW5hYmxlZCA9IDA7CisJCWN1cnItPmhhcmRpcnFfZGlzYWJsZV9pcCA9IF9SRVRfSVBfOworCQljdXJyLT5oYXJkaXJxX2Rpc2FibGVfZXZlbnQgPSArK2N1cnItPmlycV9ldmVudHM7CisJCWRlYnVnX2F0b21pY19pbmMoJmhhcmRpcnFzX29mZl9ldmVudHMpOworCX0gZWxzZQorCQlkZWJ1Z19hdG9taWNfaW5jKCZyZWR1bmRhbnRfaGFyZGlycXNfb2ZmKTsKK30KKworRVhQT1JUX1NZTUJPTCh0cmFjZV9oYXJkaXJxc19vZmYpOworCisvKgorICogU29mdGlycXMgd2lsbCBiZSBlbmFibGVkOgorICovCit2b2lkIHRyYWNlX3NvZnRpcnFzX29uKHVuc2lnbmVkIGxvbmcgaXApCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKworCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKQorCQlyZXR1cm47CisKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKSkKKwkJcmV0dXJuOworCisJaWYgKGN1cnItPnNvZnRpcnFzX2VuYWJsZWQpIHsKKwkJZGVidWdfYXRvbWljX2luYygmcmVkdW5kYW50X3NvZnRpcnFzX29uKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV2UnbGwgZG8gYW4gT0ZGIC0+IE9OIHRyYW5zaXRpb246CisJICovCisJY3Vyci0+c29mdGlycXNfZW5hYmxlZCA9IDE7CisJY3Vyci0+c29mdGlycV9lbmFibGVfaXAgPSBpcDsKKwljdXJyLT5zb2Z0aXJxX2VuYWJsZV9ldmVudCA9ICsrY3Vyci0+aXJxX2V2ZW50czsKKwlkZWJ1Z19hdG9taWNfaW5jKCZzb2Z0aXJxc19vbl9ldmVudHMpOworCS8qCisJICogV2UgYXJlIGdvaW5nIHRvIHR1cm4gc29mdGlycXMgb24sIHNvIHNldCB0aGUKKwkgKiB1c2FnZSBiaXQgZm9yIGFsbCBoZWxkIGxvY2tzLCBpZiBoYXJkaXJxcyBhcmUKKwkgKiBlbmFibGVkIHRvbzoKKwkgKi8KKwlpZiAoY3Vyci0+aGFyZGlycXNfZW5hYmxlZCkKKwkJbWFya19oZWxkX2xvY2tzKGN1cnIsIDAsIGlwKTsKK30KKworLyoKKyAqIFNvZnRpcnFzIHdlcmUgZGlzYWJsZWQ6CisgKi8KK3ZvaWQgdHJhY2Vfc29mdGlycXNfb2ZmKHVuc2lnbmVkIGxvbmcgaXApCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKworCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKQorCQlyZXR1cm47CisKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKSkKKwkJcmV0dXJuOworCisJaWYgKGN1cnItPnNvZnRpcnFzX2VuYWJsZWQpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBkb25lIGFuIE9OIC0+IE9GRiB0cmFuc2l0aW9uOgorCQkgKi8KKwkJY3Vyci0+c29mdGlycXNfZW5hYmxlZCA9IDA7CisJCWN1cnItPnNvZnRpcnFfZGlzYWJsZV9pcCA9IGlwOworCQljdXJyLT5zb2Z0aXJxX2Rpc2FibGVfZXZlbnQgPSArK2N1cnItPmlycV9ldmVudHM7CisJCWRlYnVnX2F0b21pY19pbmMoJnNvZnRpcnFzX29mZl9ldmVudHMpOworCQlERUJVR19MT0NLU19XQVJOX09OKCFzb2Z0aXJxX2NvdW50KCkpOworCX0gZWxzZQorCQlkZWJ1Z19hdG9taWNfaW5jKCZyZWR1bmRhbnRfc29mdGlycXNfb2ZmKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBJbml0aWFsaXplIGEgbG9jayBpbnN0YW5jZSdzIGxvY2stY2xhc3MgbWFwcGluZyBpbmZvOgorICovCit2b2lkIGxvY2tkZXBfaW5pdF9tYXAoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKK3sKKwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKKwkJcmV0dXJuOworCisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWtleSkpCisJCXJldHVybjsKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighbmFtZSkpCisJCXJldHVybjsKKwkvKgorCSAqIFNhbml0eSBjaGVjaywgdGhlIGxvY2stY2xhc3Mga2V5IG11c3QgYmUgcGVyc2lzdGVudDoKKwkgKi8KKwlpZiAoIXN0YXRpY19vYmooa2V5KSkgeworCQlwcmludGsoIkJVRzoga2V5ICVwIG5vdCBpbiAuZGF0YSFcbiIsIGtleSk7CisJCURFQlVHX0xPQ0tTX1dBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisJbG9jay0+bmFtZSA9IG5hbWU7CisJbG9jay0+a2V5ID0ga2V5OworCW1lbXNldChsb2NrLT5jbGFzcywgMCwgc2l6ZW9mKGxvY2stPmNsYXNzWzBdKSpNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9pbml0X21hcCk7CisKKy8qCisgKiBUaGlzIGdldHMgY2FsbGVkIGZvciBldmVyeSBtdXRleF9sb2NrKigpL3NwaW5fbG9jayooKSBvcGVyYXRpb24uCisgKiBXZSBtYWludGFpbiB0aGUgZGVwZW5kZW5jeSBtYXBzIGFuZCB2YWxpZGF0ZSB0aGUgbG9ja2luZyBhdHRlbXB0OgorICovCitzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAorCQkJICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZiwKKwkJCSAgdW5zaWduZWQgbG9uZyBpcCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OworCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrOworCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzczsKKwl1bnNpZ25lZCBpbnQgZGVwdGgsIGlkOworCWludCBjaGFpbl9oZWFkID0gMDsKKwl1NjQgY2hhaW5fa2V5OworCisJaWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpCisJCXJldHVybiAwOworCisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWlycXNfZGlzYWJsZWQoKSkpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KHN1YmNsYXNzID49IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKSB7CisJCWRlYnVnX2xvY2tzX29mZigpOworCQlwcmludGsoIkJVRzogTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUyB0b28gbG93IVxuIik7CisJCXByaW50aygidHVybmluZyBvZmYgdGhlIGxvY2tpbmcgY29ycmVjdG5lc3MgdmFsaWRhdG9yLlxuIik7CisJCXJldHVybiAwOworCX0KKworCWNsYXNzID0gbG9jay0+Y2xhc3Nbc3ViY2xhc3NdOworCS8qIG5vdCBjYWNoZWQgeWV0PyAqLworCWlmICh1bmxpa2VseSghY2xhc3MpKSB7CisJCWNsYXNzID0gcmVnaXN0ZXJfbG9ja19jbGFzcyhsb2NrLCBzdWJjbGFzcyk7CisJCWlmICghY2xhc3MpCisJCQlyZXR1cm4gMDsKKwl9CisJZGVidWdfYXRvbWljX2luYygoYXRvbWljX3QgKikmY2xhc3MtPm9wcyk7CisJaWYgKHZlcnlfdmVyYm9zZShjbGFzcykpIHsKKwkJcHJpbnRrKCJcbmFjcXVpcmUgY2xhc3MgWyVwXSAlcyIsIGNsYXNzLT5rZXksIGNsYXNzLT5uYW1lKTsKKwkJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPiAxKQorCQkJcHJpbnRrKCIjJWQiLCBjbGFzcy0+bmFtZV92ZXJzaW9uKTsKKwkJcHJpbnRrKCJcbiIpOworCQlkdW1wX3N0YWNrKCk7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIGxvY2sgdG8gdGhlIGxpc3Qgb2YgY3VycmVudGx5IGhlbGQgbG9ja3MuCisJICogKHdlIGRvbnQgaW5jcmVhc2UgdGhlIGRlcHRoIGp1c3QgeWV0LCB1cCB1bnRpbCB0aGUKKwkgKiBkZXBlbmRlbmN5IGNoZWNrcyBhcmUgZG9uZSkKKwkgKi8KKwlkZXB0aCA9IGN1cnItPmxvY2tkZXBfZGVwdGg7CisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oZGVwdGggPj0gTUFYX0xPQ0tfREVQVEgpKQorCQlyZXR1cm4gMDsKKworCWhsb2NrID0gY3Vyci0+aGVsZF9sb2NrcyArIGRlcHRoOworCisJaGxvY2stPmNsYXNzID0gY2xhc3M7CisJaGxvY2stPmFjcXVpcmVfaXAgPSBpcDsKKwlobG9jay0+aW5zdGFuY2UgPSBsb2NrOworCWhsb2NrLT50cnlsb2NrID0gdHJ5bG9jazsKKwlobG9jay0+cmVhZCA9IHJlYWQ7CisJaGxvY2stPmNoZWNrID0gY2hlY2s7CisJaGxvY2stPmhhcmRpcnFzX29mZiA9IGhhcmRpcnFzX29mZjsKKworCWlmIChjaGVjayAhPSAyKQorCQlnb3RvIG91dF9jYWxjX2hhc2g7CisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJLyoKKwkgKiBJZiBub24tdHJ5bG9jayB1c2UgaW4gYSBoYXJkaXJxIG9yIHNvZnRpcnEgY29udGV4dCwgdGhlbgorCSAqIG1hcmsgdGhlIGxvY2sgYXMgdXNlZCBpbiB0aGVzZSBjb250ZXh0czoKKwkgKi8KKwlpZiAoIXRyeWxvY2spIHsKKwkJaWYgKHJlYWQpIHsKKwkJCWlmIChjdXJyLT5oYXJkaXJxX2NvbnRleHQpCisJCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssCisJCQkJCQlMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFELCBpcCkpCisJCQkJCXJldHVybiAwOworCQkJaWYgKGN1cnItPnNvZnRpcnFfY29udGV4dCkKKwkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKKwkJCQkJCUxPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsIGlwKSkKKwkJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoY3Vyci0+aGFyZGlycV9jb250ZXh0KQorCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCBMT0NLX1VTRURfSU5fSEFSRElSUSwgaXApKQorCQkJCQlyZXR1cm4gMDsKKwkJCWlmIChjdXJyLT5zb2Z0aXJxX2NvbnRleHQpCisJCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRF9JTl9TT0ZUSVJRLCBpcCkpCisJCQkJCXJldHVybiAwOworCQl9CisJfQorCWlmICghaGFyZGlycXNfb2ZmKSB7CisJCWlmIChyZWFkKSB7CisJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQsIGlwKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChjdXJyLT5zb2Z0aXJxc19lbmFibGVkKQorCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAorCQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQsIGlwKSkKKwkJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTLCBpcCkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKKwkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKKwkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgaXApKQorCQkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKyNlbmRpZgorCS8qIG1hcmsgaXQgYXMgdXNlZDogKi8KKwlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgTE9DS19VU0VELCBpcCkpCisJCXJldHVybiAwOworb3V0X2NhbGNfaGFzaDoKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgY2hhaW4gaGFzaDogaXQncyB0aGUgY29tYmluZWQgaGFzIG9mIGFsbCB0aGUKKwkgKiBsb2NrIGtleXMgYWxvbmcgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIFdlIHNhdmUgdGhlIGhhc2ggdmFsdWUKKwkgKiBhdCBldmVyeSBzdGVwIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgY3VycmVudCBoYXNoIGVhc2lseQorCSAqIGFmdGVyIHVubG9jay4gVGhlIGNoYWluIGhhc2ggaXMgdGhlbiB1c2VkIHRvIGNhY2hlIGRlcGVuZGVuY3kKKwkgKiByZXN1bHRzLgorCSAqCisJICogVGhlICdrZXkgSUQnIGlzIHdoYXQgaXMgdGhlIG1vc3QgY29tcGFjdCBrZXkgdmFsdWUgdG8gZHJpdmUKKwkgKiB0aGUgaGFzaCwgbm90IGNsYXNzLT5rZXkuCisJICovCisJaWQgPSBjbGFzcyAtIGxvY2tfY2xhc3NlczsKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihpZCA+PSBNQVhfTE9DS0RFUF9LRVlTKSkKKwkJcmV0dXJuIDA7CisKKwljaGFpbl9rZXkgPSBjdXJyLT5jdXJyX2NoYWluX2tleTsKKwlpZiAoIWRlcHRoKSB7CisJCWlmIChERUJVR19MT0NLU19XQVJOX09OKGNoYWluX2tleSAhPSAwKSkKKwkJCXJldHVybiAwOworCQljaGFpbl9oZWFkID0gMTsKKwl9CisKKwlobG9jay0+cHJldl9jaGFpbl9rZXkgPSBjaGFpbl9rZXk7CisKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwkvKgorCSAqIEtlZXAgdHJhY2sgb2YgcG9pbnRzIHdoZXJlIHdlIGNyb3NzIGludG8gYW4gaW50ZXJydXB0IGNvbnRleHQ6CisJICovCisJaGxvY2stPmlycV9jb250ZXh0ID0gMiooY3Vyci0+aGFyZGlycV9jb250ZXh0ID8gMSA6IDApICsKKwkJCQljdXJyLT5zb2Z0aXJxX2NvbnRleHQ7CisJaWYgKGRlcHRoKSB7CisJCXN0cnVjdCBoZWxkX2xvY2sgKnByZXZfaGxvY2s7CisKKwkJcHJldl9obG9jayA9IGN1cnItPmhlbGRfbG9ja3MgKyBkZXB0aC0xOworCQkvKgorCQkgKiBJZiB3ZSBjcm9zcyBpbnRvIGFub3RoZXIgY29udGV4dCwgcmVzZXQgdGhlCisJCSAqIGhhc2gga2V5ICh0aGlzIGFsc28gcHJldmVudHMgdGhlIGNoZWNraW5nIGFuZCB0aGUKKwkJICogYWRkaW5nIG9mIHRoZSBkZXBlbmRlbmN5IHRvICdwcmV2Jyk6CisJCSAqLworCQlpZiAocHJldl9obG9jay0+aXJxX2NvbnRleHQgIT0gaGxvY2stPmlycV9jb250ZXh0KSB7CisJCQljaGFpbl9rZXkgPSAwOworCQkJY2hhaW5faGVhZCA9IDE7CisJCX0KKwl9CisjZW5kaWYKKwljaGFpbl9rZXkgPSBpdGVyYXRlX2NoYWluX2tleShjaGFpbl9rZXksIGlkKTsKKwljdXJyLT5jdXJyX2NoYWluX2tleSA9IGNoYWluX2tleTsKKworCS8qCisJICogVHJ5bG9jayBuZWVkcyB0byBtYWludGFpbiB0aGUgc3RhY2sgb2YgaGVsZCBsb2NrcywgYnV0IGl0CisJICogZG9lcyBub3QgYWRkIG5ldyBkZXBlbmRlbmNpZXMsIGJlY2F1c2UgdHJ5bG9jayBjYW4gYmUgZG9uZQorCSAqIGluIGFueSBvcmRlci4KKwkgKgorCSAqIFdlIGxvb2sgdXAgdGhlIGNoYWluX2tleSBhbmQgZG8gdGhlIE8oTl4yKSBjaGVjayBhbmQgdXBkYXRlIG9mCisJICogdGhlIGRlcGVuZGVuY2llcyBvbmx5IGlmIHRoaXMgaXMgYSBuZXcgZGVwZW5kZW5jeSBjaGFpbi4KKwkgKiAoSWYgbG9va3VwX2NoYWluX2NhY2hlKCkgcmV0dXJucyB3aXRoIDEgaXQgYWNxdWlyZXMKKwkgKiBoYXNoX2xvY2sgZm9yIHVzKQorCSAqLworCWlmICghdHJ5bG9jayAmJiAoY2hlY2sgPT0gMikgJiYgbG9va3VwX2NoYWluX2NhY2hlKGNoYWluX2tleSkpIHsKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciBsYXN0IGhlbGQgbG9jazoKKwkJICoKKwkJICogLSBpcyBpcnEtc2FmZSwgaWYgdGhpcyBsb2NrIGlzIGlycS11bnNhZmUKKwkJICogLSBpcyBzb2Z0aXJxLXNhZmUsIGlmIHRoaXMgbG9jayBpcyBoYXJkaXJxLXVuc2FmZQorCQkgKgorCQkgKiBBbmQgY2hlY2sgd2hldGhlciB0aGUgbmV3IGxvY2sncyBkZXBlbmRlbmN5IGdyYXBoCisJCSAqIGNvdWxkIGxlYWQgYmFjayB0byB0aGUgcHJldmlvdXMgbG9jay4KKwkJICoKKwkJICogYW55IG9mIHRoZXNlIHNjZW5hcmlvcyBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suIElmCisJCSAqIEFsbCB2YWxpZGF0aW9ucworCQkgKi8KKwkJaW50IHJldCA9IGNoZWNrX2RlYWRsb2NrKGN1cnIsIGhsb2NrLCBsb2NrLCByZWFkKTsKKworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBNYXJrIHJlY3Vyc2l2ZSByZWFkLCBhcyB3ZSBqdW1wIG92ZXIgaXQgd2hlbgorCQkgKiBidWlsZGluZyBkZXBlbmRlbmNpZXMgKGp1c3QgbGlrZSB3ZSBqdW1wIG92ZXIKKwkJICogdHJ5bG9jayBlbnRyaWVzKToKKwkJICovCisJCWlmIChyZXQgPT0gMikKKwkJCWhsb2NrLT5yZWFkID0gMjsKKwkJLyoKKwkJICogQWRkIGRlcGVuZGVuY3kgb25seSBpZiB0aGlzIGxvY2sgaXMgbm90IHRoZSBoZWFkCisJCSAqIG9mIHRoZSBjaGFpbiwgYW5kIGlmIGl0J3Mgbm90IGEgc2Vjb25kYXJ5IHJlYWQtbG9jazoKKwkJICovCisJCWlmICghY2hhaW5faGVhZCAmJiByZXQgIT0gMikKKwkJCWlmICghY2hlY2tfcHJldnNfYWRkKGN1cnIsIGhsb2NrKSkKKwkJCQlyZXR1cm4gMDsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJfQorCWN1cnItPmxvY2tkZXBfZGVwdGgrKzsKKwljaGVja19jaGFpbl9rZXkoY3Vycik7CisJaWYgKHVubGlrZWx5KGN1cnItPmxvY2tkZXBfZGVwdGggPj0gTUFYX0xPQ0tfREVQVEgpKSB7CisJCWRlYnVnX2xvY2tzX29mZigpOworCQlwcmludGsoIkJVRzogTUFYX0xPQ0tfREVQVEggdG9vIGxvdyFcbiIpOworCQlwcmludGsoInR1cm5pbmcgb2ZmIHRoZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvci5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHVubGlrZWx5KGN1cnItPmxvY2tkZXBfZGVwdGggPiBtYXhfbG9ja2RlcF9kZXB0aCkpCisJCW1heF9sb2NrZGVwX2RlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitwcmludF91bmxvY2tfaW5iYWxhbmNlX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaXApCit7CisJaWYgKCFkZWJ1Z19sb2Nrc19vZmYoKSkKKwkJcmV0dXJuIDA7CisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRrKCAgIlsgQlVHOiBiYWQgdW5sb2NrIGJhbGFuY2UgZGV0ZWN0ZWQhIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGsoIiVzLyVkIGlzIHRyeWluZyB0byByZWxlYXNlIGxvY2sgKCIsCisJCWN1cnItPmNvbW0sIGN1cnItPnBpZCk7CisJcHJpbnRfbG9ja2RlcF9jYWNoZShsb2NrKTsKKwlwcmludGsoIikgYXQ6XG4iKTsKKwlwcmludF9pcF9zeW0oaXApOworCXByaW50aygiYnV0IHRoZXJlIGFyZSBubyBtb3JlIGxvY2tzIHRvIHJlbGVhc2UhXG4iKTsKKwlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcbiIpOworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKKworCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKKwlkdW1wX3N0YWNrKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbW1vbiBkZWJ1Z2dpbmcgY2hlY2tzIGZvciBib3RoIG5lc3RlZCBhbmQgbm9uLW5lc3RlZCB1bmxvY2s6CisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfdW5sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLAorCQkJdW5zaWduZWQgbG9uZyBpcCkKK3sKKwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKKwkJcmV0dXJuIDA7CisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWlycXNfZGlzYWJsZWQoKSkpCisJCXJldHVybiAwOworCisJaWYgKGN1cnItPmxvY2tkZXBfZGVwdGggPD0gMCkKKwkJcmV0dXJuIHByaW50X3VubG9ja19pbmJhbGFuY2VfYnVnKGN1cnIsIGxvY2ssIGlwKTsKKworCXJldHVybiAxOworfQorCisvKgorICogUmVtb3ZlIHRoZSBsb2NrIHRvIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBoZWxkIGxvY2tzIGluIGEKKyAqIHBvdGVudGlhbGx5IG5vbi1uZXN0ZWQgKG91dCBvZiBvcmRlcikgbWFubmVyLiBUaGlzIGlzIGEKKyAqIHJlbGF0aXZlbHkgcmFyZSBvcGVyYXRpb24sIGFzIGFsbCB0aGUgdW5sb2NrIEFQSXMgZGVmYXVsdAorICogdG8gbmVzdGVkIG1vZGUgKHdoaWNoIHVzZXMgbG9ja19yZWxlYXNlKCkpOgorICovCitzdGF0aWMgaW50Citsb2NrX3JlbGVhc2Vfbm9uX25lc3RlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCisJCQlzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCit7CisJc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssICpwcmV2X2hsb2NrOworCXVuc2lnbmVkIGludCBkZXB0aDsKKwlpbnQgaTsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgbG9jayBleGlzdHMgaW4gdGhlIGN1cnJlbnQgc3RhY2sKKwkgKiBvZiBoZWxkIGxvY2tzOgorCSAqLworCWRlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighZGVwdGgpKQorCQlyZXR1cm4gMDsKKworCXByZXZfaGxvY2sgPSBOVUxMOworCWZvciAoaSA9IGRlcHRoLTE7IGkgPj0gMDsgaS0tKSB7CisJCWhsb2NrID0gY3Vyci0+aGVsZF9sb2NrcyArIGk7CisJCS8qCisJCSAqIFdlIG11c3Qgbm90IGNyb3NzIGludG8gYW5vdGhlciBjb250ZXh0OgorCQkgKi8KKwkJaWYgKHByZXZfaGxvY2sgJiYgcHJldl9obG9jay0+aXJxX2NvbnRleHQgIT0gaGxvY2stPmlycV9jb250ZXh0KQorCQkJYnJlYWs7CisJCWlmIChobG9jay0+aW5zdGFuY2UgPT0gbG9jaykKKwkJCWdvdG8gZm91bmRfaXQ7CisJCXByZXZfaGxvY2sgPSBobG9jazsKKwl9CisJcmV0dXJuIHByaW50X3VubG9ja19pbmJhbGFuY2VfYnVnKGN1cnIsIGxvY2ssIGlwKTsKKworZm91bmRfaXQ6CisJLyoKKwkgKiBXZSBoYXZlIHRoZSByaWdodCBsb2NrIHRvIHVubG9jaywgJ2hsb2NrJyBwb2ludHMgdG8gaXQuCisJICogTm93IHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBzdGFjaywgYW5kIGFkZCBiYWNrIHRoZSBvdGhlcgorCSAqIGVudHJpZXMgKGlmIGFueSksIHJlY2FsY3VsYXRpbmcgdGhlIGhhc2ggYWxvbmcgdGhlIHdheToKKwkgKi8KKwljdXJyLT5sb2NrZGVwX2RlcHRoID0gaTsKKwljdXJyLT5jdXJyX2NoYWluX2tleSA9IGhsb2NrLT5wcmV2X2NoYWluX2tleTsKKworCWZvciAoaSsrOyBpIDwgZGVwdGg7IGkrKykgeworCQlobG9jayA9IGN1cnItPmhlbGRfbG9ja3MgKyBpOworCQlpZiAoIV9fbG9ja19hY3F1aXJlKGhsb2NrLT5pbnN0YW5jZSwKKwkJCWhsb2NrLT5jbGFzcy0+c3ViY2xhc3MsIGhsb2NrLT50cnlsb2NrLAorCQkJCWhsb2NrLT5yZWFkLCBobG9jay0+Y2hlY2ssIGhsb2NrLT5oYXJkaXJxc19vZmYsCisJCQkJaGxvY2stPmFjcXVpcmVfaXApKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oY3Vyci0+bG9ja2RlcF9kZXB0aCAhPSBkZXB0aCAtIDEpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgbG9jayB0byB0aGUgbGlzdCBvZiBjdXJyZW50bHkgaGVsZCBsb2NrcyAtIHRoaXMgZ2V0cworICogY2FsbGVkIG9uIG11dGV4X3VubG9jaygpL3NwaW5fdW5sb2NrKigpIChvciBvbiBhIGZhaWxlZAorICogbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCkpLiBUaGlzIGlzIGRvbmUgZm9yIHVubG9ja3MgdGhhdCBuZXN0CisgKiBwZXJmZWN0bHkuIChpLmUuIHRoZSBjdXJyZW50IHRvcCBvZiB0aGUgbG9jay1zdGFjayBpcyB1bmxvY2tlZCkKKyAqLworc3RhdGljIGludCBsb2NrX3JlbGVhc2VfbmVzdGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwKKwkJCSAgICAgICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCit7CisJc3RydWN0IGhlbGRfbG9jayAqaGxvY2s7CisJdW5zaWduZWQgaW50IGRlcHRoOworCisJLyoKKwkgKiBQb3Agb2ZmIHRoZSB0b3Agb2YgdGhlIGxvY2sgc3RhY2s6CisJICovCisJZGVwdGggPSBjdXJyLT5sb2NrZGVwX2RlcHRoIC0gMTsKKwlobG9jayA9IGN1cnItPmhlbGRfbG9ja3MgKyBkZXB0aDsKKworCS8qCisJICogSXMgdGhlIHVubG9jayBub24tbmVzdGVkOgorCSAqLworCWlmIChobG9jay0+aW5zdGFuY2UgIT0gbG9jaykKKwkJcmV0dXJuIGxvY2tfcmVsZWFzZV9ub25fbmVzdGVkKGN1cnIsIGxvY2ssIGlwKTsKKwljdXJyLT5sb2NrZGVwX2RlcHRoLS07CisKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighZGVwdGggJiYgKGhsb2NrLT5wcmV2X2NoYWluX2tleSAhPSAwKSkpCisJCXJldHVybiAwOworCisJY3Vyci0+Y3Vycl9jaGFpbl9rZXkgPSBobG9jay0+cHJldl9jaGFpbl9rZXk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS0RFUAorCWhsb2NrLT5wcmV2X2NoYWluX2tleSA9IDA7CisJaGxvY2stPmNsYXNzID0gTlVMTDsKKwlobG9jay0+YWNxdWlyZV9pcCA9IDA7CisJaGxvY2stPmlycV9jb250ZXh0ID0gMDsKKyNlbmRpZgorCXJldHVybiAxOworfQorCisvKgorICogUmVtb3ZlIHRoZSBsb2NrIHRvIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBoZWxkIGxvY2tzIC0gdGhpcyBnZXRzCisgKiBjYWxsZWQgb24gbXV0ZXhfdW5sb2NrKCkvc3Bpbl91bmxvY2sqKCkgKG9yIG9uIGEgZmFpbGVkCisgKiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoKSkuIFRoaXMgaXMgZG9uZSBmb3IgdW5sb2NrcyB0aGF0IG5lc3QKKyAqIHBlcmZlY3RseS4gKGkuZS4gdGhlIGN1cnJlbnQgdG9wIG9mIHRoZSBsb2NrLXN0YWNrIGlzIHVubG9ja2VkKQorICovCitzdGF0aWMgdm9pZAorX19sb2NrX3JlbGVhc2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgbmVzdGVkLCB1bnNpZ25lZCBsb25nIGlwKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CisKKwlpZiAoIWNoZWNrX3VubG9jayhjdXJyLCBsb2NrLCBpcCkpCisJCXJldHVybjsKKworCWlmIChuZXN0ZWQpIHsKKwkJaWYgKCFsb2NrX3JlbGVhc2VfbmVzdGVkKGN1cnIsIGxvY2ssIGlwKSkKKwkJCXJldHVybjsKKwl9IGVsc2UgeworCQlpZiAoIWxvY2tfcmVsZWFzZV9ub25fbmVzdGVkKGN1cnIsIGxvY2ssIGlwKSkKKwkJCXJldHVybjsKKwl9CisKKwljaGVja19jaGFpbl9rZXkoY3Vycik7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseToKKyAqLworc3RhdGljIHZvaWQgY2hlY2tfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLREVQKSAmJiBkZWZpbmVkKENPTkZJR19UUkFDRV9JUlFGTEFHUykKKwlpZiAoIWRlYnVnX2xvY2tzKQorCQlyZXR1cm47CisKKwlpZiAoaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykpCisJCURFQlVHX0xPQ0tTX1dBUk5fT04oY3VycmVudC0+aGFyZGlycXNfZW5hYmxlZCk7CisJZWxzZQorCQlERUJVR19MT0NLU19XQVJOX09OKCFjdXJyZW50LT5oYXJkaXJxc19lbmFibGVkKTsKKworCS8qCisJICogV2UgZG9udCBhY2N1cmF0ZWx5IHRyYWNrIHNvZnRpcnEgc3RhdGUgaW4gZS5nLgorCSAqIGhhcmRpcnEgY29udGV4dHMgKHN1Y2ggYXMgb24gNEtTVEFDS1MpLCBzbyBvbmx5CisJICogY2hlY2sgaWYgbm90IGluIGhhcmRpcnEgY29udGV4dHM6CisJICovCisJaWYgKCFoYXJkaXJxX2NvdW50KCkpIHsKKwkJaWYgKHNvZnRpcnFfY291bnQoKSkKKwkJCURFQlVHX0xPQ0tTX1dBUk5fT04oY3VycmVudC0+c29mdGlycXNfZW5hYmxlZCk7CisJCWVsc2UKKwkJCURFQlVHX0xPQ0tTX1dBUk5fT04oIWN1cnJlbnQtPnNvZnRpcnFzX2VuYWJsZWQpOworCX0KKworCWlmICghZGVidWdfbG9ja3MpCisJCXByaW50X2lycXRyYWNlX2V2ZW50cyhjdXJyZW50KTsKKyNlbmRpZgorfQorCisvKgorICogV2UgYXJlIG5vdCBhbHdheXMgY2FsbGVkIHdpdGggaXJxcyBkaXNhYmxlZCAtIGRvIHRoYXQgaGVyZSwKKyAqIGFuZCBhbHNvIGF2b2lkIGxvY2tkZXAgcmVjdXJzaW9uOgorICovCit2b2lkIGxvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKKwkJICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgdW5zaWduZWQgbG9uZyBpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKKwkJcmV0dXJuOworCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljaGVja19mbGFncyhmbGFncyk7CisKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7CisJX19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLAorCQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIGlwKTsKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDA7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobG9ja19hY3F1aXJlKTsKKwordm9pZCBsb2NrX3JlbGVhc2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgbmVzdGVkLCB1bnNpZ25lZCBsb25nIGlwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQorCQlyZXR1cm47CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNoZWNrX2ZsYWdzKGZsYWdzKTsKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7CisJX19sb2NrX3JlbGVhc2UobG9jaywgbmVzdGVkLCBpcCk7CisJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfcmVsZWFzZSk7CisKKy8qCisgKiBVc2VkIGJ5IHRoZSB0ZXN0c3VpdGUsIHNhbml0aXplIHRoZSB2YWxpZGF0b3Igc3RhdGUKKyAqIGFmdGVyIGEgc2ltdWxhdGVkIGZhaWx1cmU6CisgKi8KKwordm9pZCBsb2NrZGVwX3Jlc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3VycmVudC0+Y3Vycl9jaGFpbl9rZXkgPSAwOworCWN1cnJlbnQtPmxvY2tkZXBfZGVwdGggPSAwOworCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMDsKKwltZW1zZXQoY3VycmVudC0+aGVsZF9sb2NrcywgMCwgTUFYX0xPQ0tfREVQVEgqc2l6ZW9mKHN0cnVjdCBoZWxkX2xvY2spKTsKKwlucl9oYXJkaXJxX2NoYWlucyA9IDA7CisJbnJfc29mdGlycV9jaGFpbnMgPSAwOworCW5yX3Byb2Nlc3NfY2hhaW5zID0gMDsKKwlkZWJ1Z19sb2NrcyA9IDE7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgemFwX2NsYXNzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3sKKwlpbnQgaTsKKworCS8qCisJICogUmVtb3ZlIGFsbCBkZXBlbmRlbmNpZXMgdGhpcyBsb2NrIGlzCisJICogaW52b2x2ZWQgaW46CisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX2xpc3RfZW50cmllczsgaSsrKSB7CisJCWlmIChsaXN0X2VudHJpZXNbaV0uY2xhc3MgPT0gY2xhc3MpCisJCQlsaXN0X2RlbF9yY3UoJmxpc3RfZW50cmllc1tpXS5lbnRyeSk7CisJfQorCS8qCisJICogVW5oYXNoIHRoZSBjbGFzcyBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGFsbF9sb2NrX2NsYXNzZXMgbGlzdDoKKwkgKi8KKwlsaXN0X2RlbF9yY3UoJmNsYXNzLT5oYXNoX2VudHJ5KTsKKwlsaXN0X2RlbF9yY3UoJmNsYXNzLT5sb2NrX2VudHJ5KTsKKworfQorCitzdGF0aWMgaW5saW5lIGludCB3aXRoaW4odm9pZCAqYWRkciwgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gYWRkciA+PSBzdGFydCAmJiBhZGRyIDwgc3RhcnQgKyBzaXplOworfQorCit2b2lkIGxvY2tkZXBfZnJlZV9rZXlfcmFuZ2Uodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfc3Bpbl9sb2NrKCZoYXNoX2xvY2spOworCisJLyoKKwkgKiBVbmhhc2ggYWxsIGNsYXNzZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgdGhpcyBtb2R1bGU6CisJICovCisJZm9yIChpID0gMDsgaSA8IENMQVNTSEFTSF9TSVpFOyBpKyspIHsKKwkJaGVhZCA9IGNsYXNzaGFzaF90YWJsZSArIGk7CisJCWlmIChsaXN0X2VtcHR5KGhlYWQpKQorCQkJY29udGludWU7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGFzcywgbmV4dCwgaGVhZCwgaGFzaF9lbnRyeSkKKwkJCWlmICh3aXRoaW4oY2xhc3MtPmtleSwgc3RhcnQsIHNpemUpKQorCQkJCXphcF9jbGFzcyhjbGFzcyk7CisJfQorCisJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBsb2NrZGVwX3Jlc2V0X2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKQoreworCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgKm5leHQsICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGo7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3NwaW5fbG9jaygmaGFzaF9sb2NrKTsKKworCS8qCisJICogUmVtb3ZlIGFsbCBjbGFzc2VzIHRoaXMgbG9jayBoYXM6CisJICovCisJZm9yIChpID0gMDsgaSA8IENMQVNTSEFTSF9TSVpFOyBpKyspIHsKKwkJaGVhZCA9IGNsYXNzaGFzaF90YWJsZSArIGk7CisJCWlmIChsaXN0X2VtcHR5KGhlYWQpKQorCQkJY29udGludWU7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGFzcywgbmV4dCwgaGVhZCwgaGFzaF9lbnRyeSkgeworCQkJZm9yIChqID0gMDsgaiA8IE1BWF9MT0NLREVQX1NVQkNMQVNTRVM7IGorKykgeworCQkJCWVudHJ5ID0gbG9jay0+Y2xhc3Nbal07CisJCQkJaWYgKGNsYXNzID09IGVudHJ5KSB7CisJCQkJCXphcF9jbGFzcyhjbGFzcyk7CisJCQkJCWxvY2stPmNsYXNzW2pdID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBEZWJ1ZyBjaGVjazogaW4gdGhlIGVuZCBhbGwgbWFwcGVkIGNsYXNzZXMgc2hvdWxkCisJICogYmUgZ29uZS4KKwkgKi8KKwlmb3IgKGogPSAwOyBqIDwgTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUzsgaisrKSB7CisJCWVudHJ5ID0gbG9jay0+Y2xhc3Nbal07CisJCWlmICghZW50cnkpCisJCQljb250aW51ZTsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCURFQlVHX0xPQ0tTX1dBUk5fT04oMSk7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIF9faW5pdCBsb2NrZGVwX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogU29tZSBhcmNoaXRlY3R1cmVzIGhhdmUgdGhlaXIgb3duIHN0YXJ0X2tlcm5lbCgpCisJICogY29kZSB3aGljaCBjYWxscyBsb2NrZGVwX2luaXQoKSwgd2hpbGUgd2UgYWxzbworCSAqIGNhbGwgbG9ja2RlcF9pbml0KCkgZnJvbSB0aGUgc3RhcnRfa2VybmVsKCkgaXRzZWxmLAorCSAqIGFuZCB3ZSB3YW50IHRvIGluaXRpYWxpemUgdGhlIGhhc2hlcyBvbmx5IG9uY2U6CisJICovCisJaWYgKGxvY2tkZXBfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBDTEFTU0hBU0hfU0laRTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRChjbGFzc2hhc2hfdGFibGUgKyBpKTsKKworCWZvciAoaSA9IDA7IGkgPCBDSEFJTkhBU0hfU0laRTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRChjaGFpbmhhc2hfdGFibGUgKyBpKTsKKworCWxvY2tkZXBfaW5pdGlhbGl6ZWQgPSAxOworfQorCit2b2lkIF9faW5pdCBsb2NrZGVwX2luZm8odm9pZCkKK3sKKwlwcmludGsoIkxvY2sgZGVwZW5kZW5jeSB2YWxpZGF0b3I6IENvcHlyaWdodCAoYykgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hclxuIik7CisKKwlwcmludGsoIi4uLiBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTOiAgICAlbHVcbiIsIE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpOworCXByaW50aygiLi4uIE1BWF9MT0NLX0RFUFRIOiAgICAgICAgICAlbHVcbiIsIE1BWF9MT0NLX0RFUFRIKTsKKwlwcmludGsoIi4uLiBNQVhfTE9DS0RFUF9LRVlTOiAgICAgICAgJWx1XG4iLCBNQVhfTE9DS0RFUF9LRVlTKTsKKwlwcmludGsoIi4uLiBDTEFTU0hBU0hfU0laRTogICAgICAgICAgICVsdVxuIiwgQ0xBU1NIQVNIX1NJWkUpOworCXByaW50aygiLi4uIE1BWF9MT0NLREVQX0VOVFJJRVM6ICAgICAlbHVcbiIsIE1BWF9MT0NLREVQX0VOVFJJRVMpOworCXByaW50aygiLi4uIE1BWF9MT0NLREVQX0NIQUlOUzogICAgICAlbHVcbiIsIE1BWF9MT0NLREVQX0NIQUlOUyk7CisJcHJpbnRrKCIuLi4gQ0hBSU5IQVNIX1NJWkU6ICAgICAgICAgICVsdVxuIiwgQ0hBSU5IQVNIX1NJWkUpOworCisJcHJpbnRrKCIgbWVtb3J5IHVzZWQgYnkgbG9jayBkZXBlbmRlbmN5IGluZm86ICVsdSBrQlxuIiwKKwkJKHNpemVvZihzdHJ1Y3QgbG9ja19jbGFzcykgKiBNQVhfTE9DS0RFUF9LRVlTICsKKwkJc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpICogQ0xBU1NIQVNIX1NJWkUgKworCQlzaXplb2Yoc3RydWN0IGxvY2tfbGlzdCkgKiBNQVhfTE9DS0RFUF9FTlRSSUVTICsKKwkJc2l6ZW9mKHN0cnVjdCBsb2NrX2NoYWluKSAqIE1BWF9MT0NLREVQX0NIQUlOUyArCisJCXNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIENIQUlOSEFTSF9TSVpFKSAvIDEwMjQpOworCisJcHJpbnRrKCIgcGVyIHRhc2stc3RydWN0IG1lbW9yeSBmb290cHJpbnQ6ICVsdSBieXRlc1xuIiwKKwkJc2l6ZW9mKHN0cnVjdCBoZWxkX2xvY2spICogTUFYX0xPQ0tfREVQVEgpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tERVAKKwlpZiAobG9ja2RlcF9pbml0X2Vycm9yKQorCQlwcmludGsoIldBUk5JTkc6IGxvY2tkZXAgaW5pdCBlcnJvciEgQXJjaCBjb2RlIGRpZG50IGNhbGwgbG9ja2RlcF9pbml0KCkgZWFybHkgZW5vdWdoP1xuIik7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5fcmFuZ2UoY29uc3Qgdm9pZCAqc3RhcnQsIGNvbnN0IHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKmVuZCkKK3sKKwlyZXR1cm4gYWRkciA+PSBzdGFydCAmJiBhZGRyIDw9IGVuZDsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2ZyZWVkX2xvY2tfYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgY29uc3Qgdm9pZCAqbWVtX2Zyb20sCisJCSAgICAgY29uc3Qgdm9pZCAqbWVtX3RvKQoreworCWlmICghZGVidWdfbG9ja3Nfb2ZmKCkpCisJCXJldHVybjsKKwlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCQlyZXR1cm47CisKKwlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRrKCAgIlsgQlVHOiBoZWxkIGxvY2sgZnJlZWQhIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGsoIiVzLyVkIGlzIGZyZWVpbmcgbWVtb3J5ICVwLSVwLCB3aXRoIGEgbG9jayBzdGlsbCBoZWxkIHRoZXJlIVxuIiwKKwkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkLCBtZW1fZnJvbSwgbWVtX3RvLTEpOworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKKworCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKKwlkdW1wX3N0YWNrKCk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBrZXJuZWwgbWVtb3J5IGlzIGZyZWVkIChvciB1bm1hcHBlZCksIG9yIGlmIGEgbG9jaworICogaXMgZGVzdHJveWVkIG9yIHJlaW5pdGlhbGl6ZWQgLSB0aGlzIGNvZGUgY2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMKKyAqIGFueSBoZWxkIGxvY2sgaW4gdGhlIG1lbW9yeSByYW5nZSBvZiA8ZnJvbT4gdG8gPHRvPjoKKyAqLwordm9pZCBkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChjb25zdCB2b2lkICptZW1fZnJvbSwgdW5zaWduZWQgbG9uZyBtZW1fbGVuKQoreworCWNvbnN0IHZvaWQgKm1lbV90byA9IG1lbV9mcm9tICsgbWVtX2xlbiwgKmxvY2tfZnJvbSwgKmxvY2tfdG87CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKwlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJaWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3Vyci0+bG9ja2RlcF9kZXB0aDsgaSsrKSB7CisJCWhsb2NrID0gY3Vyci0+aGVsZF9sb2NrcyArIGk7CisKKwkJbG9ja19mcm9tID0gKHZvaWQgKilobG9jay0+aW5zdGFuY2U7CisJCWxvY2tfdG8gPSAodm9pZCAqKShobG9jay0+aW5zdGFuY2UgKyAxKTsKKworCQlpZiAoIWluX3JhbmdlKG1lbV9mcm9tLCBsb2NrX2Zyb20sIG1lbV90bykgJiYKKwkJCQkJIWluX3JhbmdlKG1lbV9mcm9tLCBsb2NrX3RvLCBtZW1fdG8pKQorCQkJY29udGludWU7CisKKwkJcHJpbnRfZnJlZWRfbG9ja19idWcoY3VyciwgbWVtX2Zyb20sIG1lbV90byk7CisJCWJyZWFrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2hlbGRfbG9ja3NfYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3sKKwlpZiAoIWRlYnVnX2xvY2tzX29mZigpKQorCQlyZXR1cm47CisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwkJcmV0dXJuOworCisJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ayggICJbIEJVRzogbG9jayBoZWxkIGF0IHRhc2sgZXhpdCB0aW1lISBdXG4iKTsKKwlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCIlcy8lZCBpcyBleGl0aW5nIHdpdGggbG9ja3Mgc3RpbGwgaGVsZCFcbiIsCisJCWN1cnItPmNvbW0sIGN1cnItPnBpZCk7CisJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOworCisJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOworCWR1bXBfc3RhY2soKTsKK30KKwordm9pZCBkZWJ1Z19jaGVja19ub19sb2Nrc19oZWxkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlpZiAodW5saWtlbHkodGFzay0+bG9ja2RlcF9kZXB0aCA+IDApKQorCQlwcmludF9oZWxkX2xvY2tzX2J1Zyh0YXNrKTsKK30KKwordm9pZCBkZWJ1Z19zaG93X2FsbF9sb2Nrcyh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisJaW50IGNvdW50ID0gMTA7CisJaW50IHVubG9jayA9IDE7CisKKwlwcmludGsoIlxuU2hvd2luZyBhbGwgbG9ja3MgaGVsZCBpbiB0aGUgc3lzdGVtOlxuIik7CisKKwkvKgorCSAqIEhlcmUgd2UgdHJ5IHRvIGdldCB0aGUgdGFza2xpc3RfbG9jayBhcyBoYXJkIGFzIHBvc3NpYmxlLAorCSAqIGlmIG5vdCBzdWNjZXNzZnVsIGFmdGVyIDIgc2Vjb25kcyB3ZSBpZ25vcmUgaXQgKGJ1dCBrZWVwCisJICogdHJ5aW5nKS4gVGhpcyBpcyB0byBlbmFibGUgYSBkZWJ1ZyBwcmludG91dCBldmVuIGlmIGEKKwkgKiB0YXNrbGlzdF9sb2NrLWhvbGRpbmcgdGFzayBkZWFkbG9ja3Mgb3IgY3Jhc2hlcy4KKwkgKi8KK3JldHJ5OgorCWlmICghcmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgeworCQlpZiAoY291bnQgPT0gMTApCisJCQlwcmludGsoImhtLCB0YXNrbGlzdF9sb2NrIGxvY2tlZCwgcmV0cnlpbmcuLi4gIik7CisJCWlmIChjb3VudCkgeworCQkJY291bnQtLTsKKwkJCXByaW50aygiICMlZCIsIDEwLWNvdW50KTsKKwkJCW1kZWxheSgyMDApOworCQkJZ290byByZXRyeTsKKwkJfQorCQlwcmludGsoIiBpZ25vcmluZyBpdC5cbiIpOworCQl1bmxvY2sgPSAwOworCX0KKwlpZiAoY291bnQgIT0gMTApCisJCXByaW50aygiIGxvY2tlZCBpdC5cbiIpOworCisJZG9fZWFjaF90aHJlYWQoZywgcCkgeworCQlpZiAocC0+bG9ja2RlcF9kZXB0aCkKKwkJCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhwKTsKKwkJaWYgKCF1bmxvY2spCisJCQlpZiAocmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkKKwkJCQl1bmxvY2sgPSAxOworCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CisKKwlwcmludGsoIlxuIik7CisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlpZiAodW5sb2NrKQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRlYnVnX3Nob3dfYWxsX2xvY2tzKTsKKwordm9pZCBkZWJ1Z19zaG93X2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2Nrcyh0YXNrKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdfc2hvd19oZWxkX2xvY2tzKTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmggYi9rZXJuZWwvbG9ja2RlcF9pbnRlcm5hbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDM1NWYyCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGtlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oCisgKgorICogUnVudGltZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvcgorICoKKyAqIGxvY2tkZXAgc3Vic3lzdGVtIGludGVybmFsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLgorICovCisKKy8qCisgKiBNQVhfTE9DS0RFUF9FTlRSSUVTIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NrIGRlcGVuZGVuY2llcworICogd2UgdHJhY2suCisgKgorICogV2UgdXNlIHRoZSBwZXItbG9jayBkZXBlbmRlbmN5IG1hcHMgaW4gdHdvIHdheXM6IHdlIGdyb3cgaXQgYnkgYWRkaW5nCisgKiBldmVyeSB0by1iZS10YWtlbiBsb2NrIHRvIGFsbCBjdXJyZW50bHkgaGVsZCBsb2NrJ3Mgb3duIGRlcGVuZGVuY3kKKyAqIHRhYmxlIChpZiBpdCdzIG5vdCB0aGVyZSB5ZXQpLCBhbmQgd2UgY2hlY2sgaXQgZm9yIGxvY2sgb3JkZXIKKyAqIGNvbmZsaWN0cyBhbmQgZGVhZGxvY2tzLgorICovCisjZGVmaW5lIE1BWF9MT0NLREVQX0VOVFJJRVMJODE5MlVMCisKKyNkZWZpbmUgTUFYX0xPQ0tERVBfS0VZU19CSVRTCTExCisjZGVmaW5lIE1BWF9MT0NLREVQX0tFWVMJKDFVTCA8PCBNQVhfTE9DS0RFUF9LRVlTX0JJVFMpCisKKyNkZWZpbmUgTUFYX0xPQ0tERVBfQ0hBSU5TX0JJVFMJMTMKKyNkZWZpbmUgTUFYX0xPQ0tERVBfQ0hBSU5TCSgxVUwgPDwgTUFYX0xPQ0tERVBfQ0hBSU5TX0JJVFMpCisKKy8qCisgKiBTdGFjay10cmFjZTogdGlnaHRseSBwYWNrZWQgYXJyYXkgb2Ygc3RhY2sgYmFja3RyYWNlCisgKiBhZGRyZXNzZXMuIFByb3RlY3RlZCBieSB0aGUgaGFzaF9sb2NrLgorICovCisjZGVmaW5lIE1BWF9TVEFDS19UUkFDRV9FTlRSSUVTCTEzMTA3MlVMCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGFsbF9sb2NrX2NsYXNzZXM7CisKK2V4dGVybiB2b2lkCitnZXRfdXNhZ2VfY2hhcnMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBjaGFyICpjMSwgY2hhciAqYzIsIGNoYXIgKmMzLCBjaGFyICpjNCk7CisKK2V4dGVybiBjb25zdCBjaGFyICogX19nZXRfa2V5X25hbWUoc3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5ICprZXksIGNoYXIgKnN0cik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5yX2xvY2tfY2xhc3NlczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5yX2xpc3RfZW50cmllczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5yX2xvY2tfY2hhaW5zOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfc3RhY2tfdHJhY2VfZW50cmllczsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBucl9oYXJkaXJxX2NoYWluczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnJfc29mdGlycV9jaGFpbnM7CitleHRlcm4gdW5zaWduZWQgaW50IG5yX3Byb2Nlc3NfY2hhaW5zOworZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfbG9ja2RlcF9kZXB0aDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWF4X3JlY3Vyc2lvbl9kZXB0aDsKKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLREVQCisvKgorICogVmFyaW91cyBsb2NrZGVwIHN0YXRpc3RpY3M6CisgKi8KK2V4dGVybiBhdG9taWNfdCBjaGFpbl9sb29rdXBfaGl0czsKK2V4dGVybiBhdG9taWNfdCBjaGFpbl9sb29rdXBfbWlzc2VzOworZXh0ZXJuIGF0b21pY190IGhhcmRpcnFzX29uX2V2ZW50czsKK2V4dGVybiBhdG9taWNfdCBoYXJkaXJxc19vZmZfZXZlbnRzOworZXh0ZXJuIGF0b21pY190IHJlZHVuZGFudF9oYXJkaXJxc19vbjsKK2V4dGVybiBhdG9taWNfdCByZWR1bmRhbnRfaGFyZGlycXNfb2ZmOworZXh0ZXJuIGF0b21pY190IHNvZnRpcnFzX29uX2V2ZW50czsKK2V4dGVybiBhdG9taWNfdCBzb2Z0aXJxc19vZmZfZXZlbnRzOworZXh0ZXJuIGF0b21pY190IHJlZHVuZGFudF9zb2Z0aXJxc19vbjsKK2V4dGVybiBhdG9taWNfdCByZWR1bmRhbnRfc29mdGlycXNfb2ZmOworZXh0ZXJuIGF0b21pY190IG5yX3VudXNlZF9sb2NrczsKK2V4dGVybiBhdG9taWNfdCBucl9jeWNsaWNfY2hlY2tzOworZXh0ZXJuIGF0b21pY190IG5yX2N5Y2xpY19jaGVja19yZWN1cnNpb25zOworZXh0ZXJuIGF0b21pY190IG5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfY2hlY2tzOworZXh0ZXJuIGF0b21pY190IG5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfcmVjdXJzaW9uczsKK2V4dGVybiBhdG9taWNfdCBucl9maW5kX3VzYWdlX2JhY2t3YXJkc19jaGVja3M7CitleHRlcm4gYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfcmVjdXJzaW9uczsKKyMgZGVmaW5lIGRlYnVnX2F0b21pY19pbmMocHRyKQkJYXRvbWljX2luYyhwdHIpCisjIGRlZmluZSBkZWJ1Z19hdG9taWNfZGVjKHB0cikJCWF0b21pY19kZWMocHRyKQorIyBkZWZpbmUgZGVidWdfYXRvbWljX3JlYWQocHRyKQkJYXRvbWljX3JlYWQocHRyKQorI2Vsc2UKKyMgZGVmaW5lIGRlYnVnX2F0b21pY19pbmMocHRyKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgZGVidWdfYXRvbWljX2RlYyhwdHIpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBkZWJ1Z19hdG9taWNfcmVhZChwdHIpCQkwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwX3Byb2MuYyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU3MmVhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2xvY2tkZXBfcHJvYy5jCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICoga2VybmVsL2xvY2tkZXBfcHJvYy5jCisgKgorICogUnVudGltZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvcgorICoKKyAqIFN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKiBDb2RlIGZvciAvcHJvYy9sb2NrZGVwIGFuZCAvcHJvYy9sb2NrZGVwX3N0YXRzOgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgorCisjaW5jbHVkZSAibG9ja2RlcF9pbnRlcm5hbHMuaCIKKworc3RhdGljIHZvaWQgKmxfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IHY7CisKKwkoKnBvcykrKzsKKworCWlmIChjbGFzcy0+bG9ja19lbnRyeS5uZXh0ICE9ICZhbGxfbG9ja19jbGFzc2VzKQorCQljbGFzcyA9IGxpc3RfZW50cnkoY2xhc3MtPmxvY2tfZW50cnkubmV4dCwgc3RydWN0IGxvY2tfY2xhc3MsCisJCQkJICBsb2NrX2VudHJ5KTsKKwllbHNlCisJCWNsYXNzID0gTlVMTDsKKwltLT5wcml2YXRlID0gY2xhc3M7CisKKwlyZXR1cm4gY2xhc3M7Cit9CisKK3N0YXRpYyB2b2lkICpsX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbS0+cHJpdmF0ZTsKKworCWlmICgmY2xhc3MtPmxvY2tfZW50cnkgPT0gYWxsX2xvY2tfY2xhc3Nlcy5uZXh0KQorCQlzZXFfcHJpbnRmKG0sICJhbGwgbG9jayBjbGFzc2VzOlxuIik7CisKKwlyZXR1cm4gY2xhc3M7Cit9CisKK3N0YXRpYyB2b2lkIGxfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2ZvcndhcmRfZGVwcyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCit7CisJc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7CisJdW5zaWduZWQgbG9uZyByZXQgPSAxOworCisJLyoKKwkgKiBSZWN1cnNlIHRoaXMgY2xhc3MncyBkZXBlbmRlbmN5IGxpc3Q6CisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmNsYXNzLT5sb2Nrc19hZnRlciwgZW50cnkpCisJCXJldCArPSBjb3VudF9mb3J3YXJkX2RlcHMoZW50cnktPmNsYXNzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2JhY2t3YXJkX2RlcHMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQoreworCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMTsKKworCS8qCisJICogUmVjdXJzZSB0aGlzIGNsYXNzJ3MgZGVwZW5kZW5jeSBsaXN0OgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZjbGFzcy0+bG9ja3NfYmVmb3JlLCBlbnRyeSkKKwkJcmV0ICs9IGNvdW50X2JhY2t3YXJkX2RlcHMoZW50cnktPmNsYXNzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIG5yX2ZvcndhcmRfZGVwcywgbnJfYmFja3dhcmRfZGVwczsKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBtLT5wcml2YXRlOworCWNoYXIgc3RyWzEyOF0sIGMxLCBjMiwgYzMsIGM0OworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlzZXFfcHJpbnRmKG0sICIlcCIsIGNsYXNzLT5rZXkpOworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLREVQCisJc2VxX3ByaW50ZihtLCAiIE9QUzolOGxkIiwgY2xhc3MtPm9wcyk7CisjZW5kaWYKKwlucl9mb3J3YXJkX2RlcHMgPSBjb3VudF9mb3J3YXJkX2RlcHMoY2xhc3MpOworCXNlcV9wcmludGYobSwgIiBGRDolNWxkIiwgbnJfZm9yd2FyZF9kZXBzKTsKKworCW5yX2JhY2t3YXJkX2RlcHMgPSBjb3VudF9iYWNrd2FyZF9kZXBzKGNsYXNzKTsKKwlzZXFfcHJpbnRmKG0sICIgQkQ6JTVsZCIsIG5yX2JhY2t3YXJkX2RlcHMpOworCisJZ2V0X3VzYWdlX2NoYXJzKGNsYXNzLCAmYzEsICZjMiwgJmMzLCAmYzQpOworCXNlcV9wcmludGYobSwgIiAlYyVjJWMlYyIsIGMxLCBjMiwgYzMsIGM0KTsKKworCW5hbWUgPSBjbGFzcy0+bmFtZTsKKwlpZiAoIW5hbWUpIHsKKwkJbmFtZSA9IF9fZ2V0X2tleV9uYW1lKGNsYXNzLT5rZXksIHN0cik7CisJCXNlcV9wcmludGYobSwgIjogJXMiLCBuYW1lKTsKKwl9IGVsc2V7CisJCXNlcV9wcmludGYobSwgIjogJXMiLCBuYW1lKTsKKwkJaWYgKGNsYXNzLT5uYW1lX3ZlcnNpb24gPiAxKQorCQkJc2VxX3ByaW50ZihtLCAiIyVkIiwgY2xhc3MtPm5hbWVfdmVyc2lvbik7CisJCWlmIChjbGFzcy0+c3ViY2xhc3MpCisJCQlzZXFfcHJpbnRmKG0sICIvJWQiLCBjbGFzcy0+c3ViY2xhc3MpOworCX0KKwlzZXFfcHV0cyhtLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvY2tkZXBfb3BzID0geworCS5zdGFydAk9IGxfc3RhcnQsCisJLm5leHQJPSBsX25leHQsCisJLnN0b3AJPSBsX3N0b3AsCisJLnNob3cJPSBsX3Nob3csCit9OworCitzdGF0aWMgaW50IGxvY2tkZXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzID0gc2VxX29wZW4oZmlsZSwgJmxvY2tkZXBfb3BzKTsKKwlpZiAoIXJlcykgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZhbGxfbG9ja19jbGFzc2VzKSkKKwkJCW0tPnByaXZhdGUgPSBsaXN0X2VudHJ5KGFsbF9sb2NrX2NsYXNzZXMubmV4dCwKKwkJCQkJc3RydWN0IGxvY2tfY2xhc3MsIGxvY2tfZW50cnkpOworCQllbHNlCisJCQltLT5wcml2YXRlID0gTlVMTDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19sb2NrZGVwX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gbG9ja2RlcF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBsb2NrZGVwX3N0YXRzX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptKQoreworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLREVQCisJdW5zaWduZWQgaW50IGhpMSA9IGRlYnVnX2F0b21pY19yZWFkKCZoYXJkaXJxc19vbl9ldmVudHMpLAorCQkgICAgIGhpMiA9IGRlYnVnX2F0b21pY19yZWFkKCZoYXJkaXJxc19vZmZfZXZlbnRzKSwKKwkJICAgICBocjEgPSBkZWJ1Z19hdG9taWNfcmVhZCgmcmVkdW5kYW50X2hhcmRpcnFzX29uKSwKKwkJICAgICBocjIgPSBkZWJ1Z19hdG9taWNfcmVhZCgmcmVkdW5kYW50X2hhcmRpcnFzX29mZiksCisJCSAgICAgc2kxID0gZGVidWdfYXRvbWljX3JlYWQoJnNvZnRpcnFzX29uX2V2ZW50cyksCisJCSAgICAgc2kyID0gZGVidWdfYXRvbWljX3JlYWQoJnNvZnRpcnFzX29mZl9ldmVudHMpLAorCQkgICAgIHNyMSA9IGRlYnVnX2F0b21pY19yZWFkKCZyZWR1bmRhbnRfc29mdGlycXNfb24pLAorCQkgICAgIHNyMiA9IGRlYnVnX2F0b21pY19yZWFkKCZyZWR1bmRhbnRfc29mdGlycXNfb2ZmKTsKKworCXNlcV9wcmludGYobSwgIiBjaGFpbiBsb29rdXAgbWlzc2VzOiAgICAgICAgICAgJTExdVxuIiwKKwkJZGVidWdfYXRvbWljX3JlYWQoJmNoYWluX2xvb2t1cF9taXNzZXMpKTsKKwlzZXFfcHJpbnRmKG0sICIgY2hhaW4gbG9va3VwIGhpdHM6ICAgICAgICAgICAgICUxMXVcbiIsCisJCWRlYnVnX2F0b21pY19yZWFkKCZjaGFpbl9sb29rdXBfaGl0cykpOworCXNlcV9wcmludGYobSwgIiBjeWNsaWMgY2hlY2tzOiAgICAgICAgICAgICAgICAgJTExdVxuIiwKKwkJZGVidWdfYXRvbWljX3JlYWQoJm5yX2N5Y2xpY19jaGVja3MpKTsKKwlzZXFfcHJpbnRmKG0sICIgY3ljbGljLWNoZWNrIHJlY3Vyc2lvbnM6ICAgICAgICUxMXVcbiIsCisJCWRlYnVnX2F0b21pY19yZWFkKCZucl9jeWNsaWNfY2hlY2tfcmVjdXJzaW9ucykpOworCXNlcV9wcmludGYobSwgIiBmaW5kLW1hc2sgZm9yd2FyZHMgY2hlY2tzOiAgICAgJTExdVxuIiwKKwkJZGVidWdfYXRvbWljX3JlYWQoJm5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfY2hlY2tzKSk7CisJc2VxX3ByaW50ZihtLCAiIGZpbmQtbWFzayBmb3J3YXJkcyByZWN1cnNpb25zOiAlMTF1XG4iLAorCQlkZWJ1Z19hdG9taWNfcmVhZCgmbnJfZmluZF91c2FnZV9mb3J3YXJkc19yZWN1cnNpb25zKSk7CisJc2VxX3ByaW50ZihtLCAiIGZpbmQtbWFzayBiYWNrd2FyZHMgY2hlY2tzOiAgICAlMTF1XG4iLAorCQlkZWJ1Z19hdG9taWNfcmVhZCgmbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfY2hlY2tzKSk7CisJc2VxX3ByaW50ZihtLCAiIGZpbmQtbWFzayBiYWNrd2FyZHMgcmVjdXJzaW9uczolMTF1XG4iLAorCQlkZWJ1Z19hdG9taWNfcmVhZCgmbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfcmVjdXJzaW9ucykpOworCisJc2VxX3ByaW50ZihtLCAiIGhhcmRpcnEgb24gZXZlbnRzOiAgICAgICAgICAgICAlMTF1XG4iLCBoaTEpOworCXNlcV9wcmludGYobSwgIiBoYXJkaXJxIG9mZiBldmVudHM6ICAgICAgICAgICAgJTExdVxuIiwgaGkyKTsKKwlzZXFfcHJpbnRmKG0sICIgcmVkdW5kYW50IGhhcmRpcnEgb25zOiAgICAgICAgICUxMXVcbiIsIGhyMSk7CisJc2VxX3ByaW50ZihtLCAiIHJlZHVuZGFudCBoYXJkaXJxIG9mZnM6ICAgICAgICAlMTF1XG4iLCBocjIpOworCXNlcV9wcmludGYobSwgIiBzb2Z0aXJxIG9uIGV2ZW50czogICAgICAgICAgICAgJTExdVxuIiwgc2kxKTsKKwlzZXFfcHJpbnRmKG0sICIgc29mdGlycSBvZmYgZXZlbnRzOiAgICAgICAgICAgICUxMXVcbiIsIHNpMik7CisJc2VxX3ByaW50ZihtLCAiIHJlZHVuZGFudCBzb2Z0aXJxIG9uczogICAgICAgICAlMTF1XG4iLCBzcjEpOworCXNlcV9wcmludGYobSwgIiByZWR1bmRhbnQgc29mdGlycSBvZmZzOiAgICAgICAgJTExdVxuIiwgc3IyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGxvY2tkZXBfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzOworCXVuc2lnbmVkIGxvbmcgbnJfdW51c2VkID0gMCwgbnJfdW5jYXRlZ29yaXplZCA9IDAsCisJCSAgICAgIG5yX2lycV9zYWZlID0gMCwgbnJfaXJxX3Vuc2FmZSA9IDAsCisJCSAgICAgIG5yX3NvZnRpcnFfc2FmZSA9IDAsIG5yX3NvZnRpcnFfdW5zYWZlID0gMCwKKwkJICAgICAgbnJfaGFyZGlycV9zYWZlID0gMCwgbnJfaGFyZGlycV91bnNhZmUgPSAwLAorCQkgICAgICBucl9pcnFfcmVhZF9zYWZlID0gMCwgbnJfaXJxX3JlYWRfdW5zYWZlID0gMCwKKwkJICAgICAgbnJfc29mdGlycV9yZWFkX3NhZmUgPSAwLCBucl9zb2Z0aXJxX3JlYWRfdW5zYWZlID0gMCwKKwkJICAgICAgbnJfaGFyZGlycV9yZWFkX3NhZmUgPSAwLCBucl9oYXJkaXJxX3JlYWRfdW5zYWZlID0gMCwKKwkJICAgICAgc3VtX2ZvcndhcmRfZGVwcyA9IDAsIGZhY3RvciA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsYXNzLCAmYWxsX2xvY2tfY2xhc3NlcywgbG9ja19lbnRyeSkgeworCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayA9PSAwKQorCQkJbnJfdW51c2VkKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayA9PSBMT0NLRl9VU0VEKQorCQkJbnJfdW5jYXRlZ29yaXplZCsrOworCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0lSUSkKKwkJCW5yX2lycV9zYWZlKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRUykKKwkJCW5yX2lycV91bnNhZmUrKzsKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRKQorCQkJbnJfc29mdGlycV9zYWZlKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfU09GVElSUVMpCisJCQlucl9zb2Z0aXJxX3Vuc2FmZSsrOworCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlEpCisJCQlucl9oYXJkaXJxX3NhZmUrKzsKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRUykKKwkJCW5yX2hhcmRpcnFfdW5zYWZlKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fSVJRX1JFQUQpCisJCQlucl9pcnFfcmVhZF9zYWZlKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRU19SRUFEKQorCQkJbnJfaXJxX3JlYWRfdW5zYWZlKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFEKQorCQkJbnJfc29mdGlycV9yZWFkX3NhZmUrKzsKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQorCQkJbnJfc29mdGlycV9yZWFkX3Vuc2FmZSsrOworCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCkKKwkJCW5yX2hhcmRpcnFfcmVhZF9zYWZlKys7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKKwkJCW5yX2hhcmRpcnFfcmVhZF91bnNhZmUrKzsKKworCQlzdW1fZm9yd2FyZF9kZXBzICs9IGNvdW50X2ZvcndhcmRfZGVwcyhjbGFzcyk7CisJfQorI2lmZGVmIENPTkZJR19MT0NLREVQX0RFQlVHCisJREVCVUdfTE9DS1NfV0FSTl9PTihkZWJ1Z19hdG9taWNfcmVhZCgmbnJfdW51c2VkX2xvY2tzKSAhPSBucl91bnVzZWQpOworI2VuZGlmCisJc2VxX3ByaW50ZihtLCAiIGxvY2stY2xhc3NlczogICAgICAgICAgICAgICAgICAlMTFsdSBbbWF4OiAlbHVdXG4iLAorCQkJbnJfbG9ja19jbGFzc2VzLCBNQVhfTE9DS0RFUF9LRVlTKTsKKwlzZXFfcHJpbnRmKG0sICIgZGlyZWN0IGRlcGVuZGVuY2llczogICAgICAgICAgICUxMWx1IFttYXg6ICVsdV1cbiIsCisJCQlucl9saXN0X2VudHJpZXMsIE1BWF9MT0NLREVQX0VOVFJJRVMpOworCXNlcV9wcmludGYobSwgIiBpbmRpcmVjdCBkZXBlbmRlbmNpZXM6ICAgICAgICAgJTExbHVcbiIsCisJCQlzdW1fZm9yd2FyZF9kZXBzKTsKKworCS8qCisJICogVG90YWwgbnVtYmVyIG9mIGRlcGVuZGVuY2llczoKKwkgKgorCSAqIEFsbCBpcnEtc2FmZSBsb2NrcyBtYXkgbmVzdCBpbnNpZGUgaXJxLXVuc2FmZSBsb2NrcywKKwkgKiBwbHVzIGFsbCB0aGUgb3RoZXIga25vd24gZGVwZW5kZW5jaWVzOgorCSAqLworCXNlcV9wcmludGYobSwgIiBhbGwgZGlyZWN0IGRlcGVuZGVuY2llczogICAgICAgJTExbHVcbiIsCisJCQlucl9pcnFfdW5zYWZlICogbnJfaXJxX3NhZmUgKworCQkJbnJfaGFyZGlycV91bnNhZmUgKiBucl9oYXJkaXJxX3NhZmUgKworCQkJbnJfbGlzdF9lbnRyaWVzKTsKKworCS8qCisJICogRXN0aW1hdGVkIGZhY3RvciBiZXR3ZWVuIGRpcmVjdCBhbmQgaW5kaXJlY3QKKwkgKiBkZXBlbmRlbmNpZXM6CisJICovCisJaWYgKG5yX2xpc3RfZW50cmllcykKKwkJZmFjdG9yID0gc3VtX2ZvcndhcmRfZGVwcyAvIG5yX2xpc3RfZW50cmllczsKKworCXNlcV9wcmludGYobSwgIiBkZXBlbmRlbmN5IGNoYWluczogICAgICAgICAgICAgJTExbHUgW21heDogJWx1XVxuIiwKKwkJCW5yX2xvY2tfY2hhaW5zLCBNQVhfTE9DS0RFUF9DSEFJTlMpOworCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJc2VxX3ByaW50ZihtLCAiIGluLWhhcmRpcnEgY2hhaW5zOiAgICAgICAgICAgICAlMTF1XG4iLAorCQkJbnJfaGFyZGlycV9jaGFpbnMpOworCXNlcV9wcmludGYobSwgIiBpbi1zb2Z0aXJxIGNoYWluczogICAgICAgICAgICAgJTExdVxuIiwKKwkJCW5yX3NvZnRpcnFfY2hhaW5zKTsKKyNlbmRpZgorCXNlcV9wcmludGYobSwgIiBpbi1wcm9jZXNzIGNoYWluczogICAgICAgICAgICAgJTExdVxuIiwKKwkJCW5yX3Byb2Nlc3NfY2hhaW5zKTsKKwlzZXFfcHJpbnRmKG0sICIgc3RhY2stdHJhY2UgZW50cmllczogICAgICAgICAgICUxMWx1IFttYXg6ICVsdV1cbiIsCisJCQlucl9zdGFja190cmFjZV9lbnRyaWVzLCBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUyk7CisJc2VxX3ByaW50ZihtLCAiIGNvbWJpbmVkIG1heCBkZXBlbmRlbmNpZXM6ICAgICAlMTF1XG4iLAorCQkJKG5yX2hhcmRpcnFfY2hhaW5zICsgMSkgKgorCQkJKG5yX3NvZnRpcnFfY2hhaW5zICsgMSkgKgorCQkJKG5yX3Byb2Nlc3NfY2hhaW5zICsgMSkKKwkpOworCXNlcV9wcmludGYobSwgIiBoYXJkaXJxLXNhZmUgbG9ja3M6ICAgICAgICAgICAgJTExbHVcbiIsCisJCQlucl9oYXJkaXJxX3NhZmUpOworCXNlcV9wcmludGYobSwgIiBoYXJkaXJxLXVuc2FmZSBsb2NrczogICAgICAgICAgJTExbHVcbiIsCisJCQlucl9oYXJkaXJxX3Vuc2FmZSk7CisJc2VxX3ByaW50ZihtLCAiIHNvZnRpcnEtc2FmZSBsb2NrczogICAgICAgICAgICAlMTFsdVxuIiwKKwkJCW5yX3NvZnRpcnFfc2FmZSk7CisJc2VxX3ByaW50ZihtLCAiIHNvZnRpcnEtdW5zYWZlIGxvY2tzOiAgICAgICAgICAlMTFsdVxuIiwKKwkJCW5yX3NvZnRpcnFfdW5zYWZlKTsKKwlzZXFfcHJpbnRmKG0sICIgaXJxLXNhZmUgbG9ja3M6ICAgICAgICAgICAgICAgICUxMWx1XG4iLAorCQkJbnJfaXJxX3NhZmUpOworCXNlcV9wcmludGYobSwgIiBpcnEtdW5zYWZlIGxvY2tzOiAgICAgICAgICAgICAgJTExbHVcbiIsCisJCQlucl9pcnFfdW5zYWZlKTsKKworCXNlcV9wcmludGYobSwgIiBoYXJkaXJxLXJlYWQtc2FmZSBsb2NrczogICAgICAgJTExbHVcbiIsCisJCQlucl9oYXJkaXJxX3JlYWRfc2FmZSk7CisJc2VxX3ByaW50ZihtLCAiIGhhcmRpcnEtcmVhZC11bnNhZmUgbG9ja3M6ICAgICAlMTFsdVxuIiwKKwkJCW5yX2hhcmRpcnFfcmVhZF91bnNhZmUpOworCXNlcV9wcmludGYobSwgIiBzb2Z0aXJxLXJlYWQtc2FmZSBsb2NrczogICAgICAgJTExbHVcbiIsCisJCQlucl9zb2Z0aXJxX3JlYWRfc2FmZSk7CisJc2VxX3ByaW50ZihtLCAiIHNvZnRpcnEtcmVhZC11bnNhZmUgbG9ja3M6ICAgICAlMTFsdVxuIiwKKwkJCW5yX3NvZnRpcnFfcmVhZF91bnNhZmUpOworCXNlcV9wcmludGYobSwgIiBpcnEtcmVhZC1zYWZlIGxvY2tzOiAgICAgICAgICAgJTExbHVcbiIsCisJCQlucl9pcnFfcmVhZF9zYWZlKTsKKwlzZXFfcHJpbnRmKG0sICIgaXJxLXJlYWQtdW5zYWZlIGxvY2tzOiAgICAgICAgICUxMWx1XG4iLAorCQkJbnJfaXJxX3JlYWRfdW5zYWZlKTsKKworCXNlcV9wcmludGYobSwgIiB1bmNhdGVnb3JpemVkIGxvY2tzOiAgICAgICAgICAgJTExbHVcbiIsCisJCQlucl91bmNhdGVnb3JpemVkKTsKKwlzZXFfcHJpbnRmKG0sICIgdW51c2VkIGxvY2tzOiAgICAgICAgICAgICAgICAgICUxMWx1XG4iLAorCQkJbnJfdW51c2VkKTsKKwlzZXFfcHJpbnRmKG0sICIgbWF4IGxvY2tpbmcgZGVwdGg6ICAgICAgICAgICAgICUxMXVcbiIsCisJCQltYXhfbG9ja2RlcF9kZXB0aCk7CisJc2VxX3ByaW50ZihtLCAiIG1heCByZWN1cnNpb24gZGVwdGg6ICAgICAgICAgICAlMTF1XG4iLAorCQkJbWF4X3JlY3Vyc2lvbl9kZXB0aCk7CisJbG9ja2RlcF9zdGF0c19kZWJ1Z19zaG93KG0pOworCXNlcV9wcmludGYobSwgIiBkZWJ1Z19sb2NrczogICAgICAgICAgICAgICAgICAgJTExdVxuIiwKKwkJCWRlYnVnX2xvY2tzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvY2tkZXBfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbG9ja2RlcF9zdGF0c19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19sb2NrZGVwX3N0YXRzX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gbG9ja2RlcF9zdGF0c19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsb2NrZGVwX3Byb2NfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJsb2NrZGVwIiwgU19JUlVTUiwgTlVMTCk7CisJaWYgKGVudHJ5KQorCQllbnRyeS0+cHJvY19mb3BzID0gJnByb2NfbG9ja2RlcF9vcGVyYXRpb25zOworCisJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgibG9ja2RlcF9zdGF0cyIsIFNfSVJVU1IsIE5VTEwpOworCWlmIChlbnRyeSkKKwkJZW50cnktPnByb2NfZm9wcyA9ICZwcm9jX2xvY2tkZXBfc3RhdHNfb3BlcmF0aW9uczsKKworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGxvY2tkZXBfcHJvY19pbml0KTsKKwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDEwZTViODcuLjM1ZTFiMWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTEsNCArMSw0IEBACi0vKiBSZXdyaXR0ZW4gYnkgUnVzdHkgUnVzc2VsbCwgb24gdGhlIGJhY2tzIG9mIG1hbnkgb3RoZXJzLi4uCisvKgogICAgQ29weXJpZ2h0IChDKSAyMDAyIFJpY2hhcmQgSGVuZGVyc29uCiAgICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzdHkgUnVzc2VsbCwgMjAwMiBSdXN0eSBSdXNzZWxsIElCTS4KIApAQCAtMTYsNyArMTYsNiBAQAogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMjIsOSArMTIxLDE3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl9ncGxbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlW107CiBleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl9ncGxfZnV0dXJlW107CitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdGFydF9fX2tzeW10YWJfdW51c2VkW107CitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl91bnVzZWRbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRfZ3BsW107CitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdG9wX19fa3N5bXRhYl91bnVzZWRfZ3BsW107CitleHRlcm4gY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19zdGFydF9fX2tzeW10YWJfZ3BsX2Z1dHVyZVtdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RvcF9fX2tzeW10YWJfZ3BsX2Z1dHVyZVtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19zdGFydF9fX2tjcmN0YWJbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIF9fc3RhcnRfX19rY3JjdGFiX2dwbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19zdGFydF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZVtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19zdGFydF9fX2tjcmN0YWJfdW51c2VkW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWRfZ3BsW107CiAKICNpZm5kZWYgQ09ORklHX01PRFZFUlNJT05TCiAjZGVmaW5lIHN5bXZlcnNpb24oYmFzZSwgaWR4KSBOVUxMCkBAIC0xNDQsNiArMTUxLDE3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50a191bnVzZWRfd2FybmluZyhjb25zdCBjaGFyICpuYW1lKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIlN5bWJvbCAlcyBpcyBtYXJrZWQgYXMgVU5VU0VELCAiCisJCSJob3dldmVyIHRoaXMgbW9kdWxlIGlzIHVzaW5nIGl0LlxuIiwgbmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiVGhpcyBzeW1ib2wgd2lsbCBnbyBhd2F5IGluIHRoZSBmdXR1cmUuXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJQbGVhc2UgZXZhbHV0ZSBpZiB0aGlzIGlzIHRoZSByaWdodCBhcGkgdG8gdXNlLCAiCisJCSJhbmQgaWYgaXQgcmVhbGx5IGlzLCBzdWJtaXQgYSByZXBvcnQgdGhlIGxpbnV4IGtlcm5lbCAiCisJCSJtYWlsaW5nbGlzdCB0b2dldGhlciB3aXRoIHN1Ym1pdHRpbmcgeW91ciBjb2RlIGZvciAiCisJCSJpbmNsdXNpb24uXG4iKTsKK30KKwogLyogRmluZCBhIHN5bWJvbCwgcmV0dXJuIHZhbHVlLCBjcmMgYW5kIG1vZHVsZSB3aGljaCBvd25zIGl0ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgc3RydWN0IG1vZHVsZSAqKm93bmVyLApAQCAtMTg2LDYgKzIwNCwyNSBAQAogCQlyZXR1cm4ga3MtPnZhbHVlOwogCX0KIAorCWtzID0gbG9va3VwX3N5bWJvbChuYW1lLCBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWQsCisJCQkJIF9fc3RvcF9fX2tzeW10YWJfdW51c2VkKTsKKwlpZiAoa3MpIHsKKwkJcHJpbnRrX3VudXNlZF93YXJuaW5nKG5hbWUpOworCQkqY3JjID0gc3ltdmVyc2lvbihfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWQsCisJCQkJICAoa3MgLSBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWQpKTsKKwkJcmV0dXJuIGtzLT52YWx1ZTsKKwl9CisKKwlpZiAoZ3Bsb2spCisJCWtzID0gbG9va3VwX3N5bWJvbChuYW1lLCBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRfZ3BsLAorCQkJCSBfX3N0b3BfX19rc3ltdGFiX3VudXNlZF9ncGwpOworCWlmIChrcykgeworCQlwcmludGtfdW51c2VkX3dhcm5pbmcobmFtZSk7CisJCSpjcmMgPSBzeW12ZXJzaW9uKF9fc3RhcnRfX19rY3JjdGFiX3VudXNlZF9ncGwsCisJCQkJICAoa3MgLSBfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRfZ3BsKSk7CisJCXJldHVybiBrcy0+dmFsdWU7CisJfQorCiAJLyogTm93IHRyeSBtb2R1bGVzLiAqLyAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKIAkJKm93bmVyID0gbW9kOwpAQCAtMjA0LDYgKzI0MSwyMyBAQAogCQkJCXJldHVybiBrcy0+dmFsdWU7CiAJCQl9CiAJCX0KKwkJa3MgPSBsb29rdXBfc3ltYm9sKG5hbWUsIG1vZC0+dW51c2VkX3N5bXMsIG1vZC0+dW51c2VkX3N5bXMgKyBtb2QtPm51bV91bnVzZWRfc3ltcyk7CisJCWlmIChrcykgeworCQkJcHJpbnRrX3VudXNlZF93YXJuaW5nKG5hbWUpOworCQkJKmNyYyA9IHN5bXZlcnNpb24obW9kLT51bnVzZWRfY3JjcywgKGtzIC0gbW9kLT51bnVzZWRfc3ltcykpOworCQkJcmV0dXJuIGtzLT52YWx1ZTsKKwkJfQorCisJCWlmIChncGxvaykgeworCQkJa3MgPSBsb29rdXBfc3ltYm9sKG5hbWUsIG1vZC0+dW51c2VkX2dwbF9zeW1zLAorCQkJCQkgICBtb2QtPnVudXNlZF9ncGxfc3ltcyArIG1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyk7CisJCQlpZiAoa3MpIHsKKwkJCQlwcmludGtfdW51c2VkX3dhcm5pbmcobmFtZSk7CisJCQkJKmNyYyA9IHN5bXZlcnNpb24obW9kLT51bnVzZWRfZ3BsX2NyY3MsCisJCQkJCQkgIChrcyAtIG1vZC0+dW51c2VkX2dwbF9zeW1zKSk7CisJCQkJcmV0dXJuIGtzLT52YWx1ZTsKKwkJCX0KKwkJfQogCQlrcyA9IGxvb2t1cF9zeW1ib2wobmFtZSwgbW9kLT5ncGxfZnV0dXJlX3N5bXMsCiAJCQkJICAgKG1vZC0+Z3BsX2Z1dHVyZV9zeW1zICsKIAkJCQkgICAgbW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zKSk7CkBAIC0xMDY3LDYgKzExMjEsOSBAQAogCWlmIChtb2QtPnBlcmNwdSkKIAkJcGVyY3B1X21vZGZyZWUobW9kLT5wZXJjcHUpOwogCisJLyogRnJlZSBsb2NrLWNsYXNzZXM6ICovCisJbG9ja2RlcF9mcmVlX2tleV9yYW5nZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CisKIAkvKiBGaW5hbGx5LCBmcmVlIHRoZSBjb3JlIChjb250YWluaW5nIHRoZSBtb2R1bGUgc3RydWN0dXJlKSAqLwogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfY29yZSk7CiB9CkBAIC0xNDAzLDEwICsxNDYwLDI3IEBACiAJRWxmX0VoZHIgKmhkcjsKIAlFbGZfU2hkciAqc2VjaGRyczsKIAljaGFyICpzZWNzdHJpbmdzLCAqYXJncywgKm1vZG1hZ2ljLCAqc3RydGFiID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgaSwgc3ltaW5kZXggPSAwLCBzdHJpbmRleCA9IDAsIHNldHVwaW5kZXgsIGV4aW5kZXgsCi0JCWV4cG9ydGluZGV4LCBtb2RpbmRleCwgb2JzcGFybWluZGV4LCBpbmZvaW5kZXgsIGdwbGluZGV4LAotCQljcmNpbmRleCwgZ3BsY3JjaW5kZXgsIHZlcnNpbmRleCwgcGNwdWluZGV4LCBncGxmdXR1cmVpbmRleCwKLQkJZ3BsZnV0dXJlY3JjaW5kZXgsIHVud2luZGV4ID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgc3ltaW5kZXggPSAwOworCXVuc2lnbmVkIGludCBzdHJpbmRleCA9IDA7CisJdW5zaWduZWQgaW50IHNldHVwaW5kZXg7CisJdW5zaWduZWQgaW50IGV4aW5kZXg7CisJdW5zaWduZWQgaW50IGV4cG9ydGluZGV4OworCXVuc2lnbmVkIGludCBtb2RpbmRleDsKKwl1bnNpZ25lZCBpbnQgb2JzcGFybWluZGV4OworCXVuc2lnbmVkIGludCBpbmZvaW5kZXg7CisJdW5zaWduZWQgaW50IGdwbGluZGV4OworCXVuc2lnbmVkIGludCBjcmNpbmRleDsKKwl1bnNpZ25lZCBpbnQgZ3BsY3JjaW5kZXg7CisJdW5zaWduZWQgaW50IHZlcnNpbmRleDsKKwl1bnNpZ25lZCBpbnQgcGNwdWluZGV4OworCXVuc2lnbmVkIGludCBncGxmdXR1cmVpbmRleDsKKwl1bnNpZ25lZCBpbnQgZ3BsZnV0dXJlY3JjaW5kZXg7CisJdW5zaWduZWQgaW50IHVud2luZGV4ID0gMDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkaW5kZXg7CisJdW5zaWduZWQgaW50IHVudXNlZGNyY2luZGV4OworCXVuc2lnbmVkIGludCB1bnVzZWRncGxpbmRleDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkZ3BsY3JjaW5kZXg7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KQEAgLTE0ODcsOSArMTU2MSwxMyBAQAogCWV4cG9ydGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiIik7CiAJZ3BsaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfZ3BsIik7CiAJZ3BsZnV0dXJlaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfZ3BsX2Z1dHVyZSIpOworCXVudXNlZGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiX3VudXNlZCIpOworCXVudXNlZGdwbGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiX3VudXNlZF9ncGwiKTsKIAljcmNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa2NyY3RhYiIpOwogCWdwbGNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX2dwbCIpOwogCWdwbGZ1dHVyZWNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiX2dwbF9mdXR1cmUiKTsKKwl1bnVzZWRjcmNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa2NyY3RhYl91bnVzZWQiKTsKKwl1bnVzZWRncGxjcmNpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa2NyY3RhYl91bnVzZWRfZ3BsIik7CiAJc2V0dXBpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fcGFyYW0iKTsKIAlleGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19leF90YWJsZSIpOwogCW9ic3Bhcm1pbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fb2JzcGFybSIpOwpAQCAtMTYzOCwxNCArMTcxNiwyNyBAQAogCQltb2QtPmdwbF9jcmNzID0gKHZvaWQgKilzZWNoZHJzW2dwbGNyY2luZGV4XS5zaF9hZGRyOwogCW1vZC0+bnVtX2dwbF9mdXR1cmVfc3ltcyA9IHNlY2hkcnNbZ3BsZnV0dXJlaW5kZXhdLnNoX3NpemUgLwogCQkJCQlzaXplb2YoKm1vZC0+Z3BsX2Z1dHVyZV9zeW1zKTsKKwltb2QtPm51bV91bnVzZWRfc3ltcyA9IHNlY2hkcnNbdW51c2VkaW5kZXhdLnNoX3NpemUgLworCQkJCQlzaXplb2YoKm1vZC0+dW51c2VkX3N5bXMpOworCW1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyA9IHNlY2hkcnNbdW51c2VkZ3BsaW5kZXhdLnNoX3NpemUgLworCQkJCQlzaXplb2YoKm1vZC0+dW51c2VkX2dwbF9zeW1zKTsKIAltb2QtPmdwbF9mdXR1cmVfc3ltcyA9ICh2b2lkICopc2VjaGRyc1tncGxmdXR1cmVpbmRleF0uc2hfYWRkcjsKIAlpZiAoZ3BsZnV0dXJlY3JjaW5kZXgpCiAJCW1vZC0+Z3BsX2Z1dHVyZV9jcmNzID0gKHZvaWQgKilzZWNoZHJzW2dwbGZ1dHVyZWNyY2luZGV4XS5zaF9hZGRyOwogCisJbW9kLT51bnVzZWRfc3ltcyA9ICh2b2lkICopc2VjaGRyc1t1bnVzZWRpbmRleF0uc2hfYWRkcjsKKwlpZiAodW51c2VkY3JjaW5kZXgpCisJCW1vZC0+dW51c2VkX2NyY3MgPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkY3JjaW5kZXhdLnNoX2FkZHI7CisJbW9kLT51bnVzZWRfZ3BsX3N5bXMgPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkZ3BsaW5kZXhdLnNoX2FkZHI7CisJaWYgKHVudXNlZGdwbGNyY2luZGV4KQorCQltb2QtPnVudXNlZF9jcmNzID0gKHZvaWQgKilzZWNoZHJzW3VudXNlZGdwbGNyY2luZGV4XS5zaF9hZGRyOworCiAjaWZkZWYgQ09ORklHX01PRFZFUlNJT05TCiAJaWYgKChtb2QtPm51bV9zeW1zICYmICFjcmNpbmRleCkgfHwgCiAJICAgIChtb2QtPm51bV9ncGxfc3ltcyAmJiAhZ3BsY3JjaW5kZXgpIHx8Ci0JICAgIChtb2QtPm51bV9ncGxfZnV0dXJlX3N5bXMgJiYgIWdwbGZ1dHVyZWNyY2luZGV4KSkgeworCSAgICAobW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zICYmICFncGxmdXR1cmVjcmNpbmRleCkgfHwKKwkgICAgKG1vZC0+bnVtX3VudXNlZF9zeW1zICYmICF1bnVzZWRjcmNpbmRleCkgfHwKKwkgICAgKG1vZC0+bnVtX3VudXNlZF9ncGxfc3ltcyAmJiAhdW51c2VkZ3BsY3JjaW5kZXgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyB2ZXJzaW9ucyBmb3IgZXhwb3J0ZWQgc3ltYm9scy4iCiAJCSAgICAgICAiIFRhaW50aW5nIGtlcm5lbC5cbiIsIG1vZC0+bmFtZSk7CiAJCWFkZF90YWludChUQUlOVF9GT1JDRURfTU9EVUxFKTsKQEAgLTIwNzEsNiArMjE2MiwyOSBAQAogCXJldHVybiBlOwogfQogCisvKgorICogSXMgdGhpcyBhIHZhbGlkIG1vZHVsZSBhZGRyZXNzPworICovCitpbnQgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1vZHVsZSAqbW9kOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1vZGxpc3RfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJCWlmICh3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtb2RsaXN0X2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW9kbGlzdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworCiAvKiBJcyB0aGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3M/ICBXZSBkb24ndCBncmFiIHRoZSBsb2NrOiB3ZSBhcmUgb29wc2luZy4gKi8KIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXgtZGVidWcuYyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCmluZGV4IGUzOGU0YmEuLmUzMjAzYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCisrKyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5jCkBAIC0yMCwzNjcgKzIwLDE5IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAKICNpbmNsdWRlICJtdXRleC1kZWJ1Zy5oIgogCiAvKgotICogV2UgbmVlZCBhIGdsb2JhbCBsb2NrIHdoZW4gd2Ugd2FsayB0aHJvdWdoIHRoZSBtdWx0aS1wcm9jZXNzCi0gKiBsb2NrIHRyZWUuIE9ubHkgdXNlZCBpbiB0aGUgZGVhZGxvY2stZGVidWdnaW5nIGNhc2UuCi0gKi8KLURFRklORV9TUElOTE9DSyhkZWJ1Z19tdXRleF9sb2NrKTsKLQotLyoKLSAqIEFsbCBsb2NrcyBoZWxkIGJ5IGFsbCB0YXNrcywgaW4gYSBzaW5nbGUgZ2xvYmFsIGxpc3Q6Ci0gKi8KLUxJU1RfSEVBRChkZWJ1Z19tdXRleF9oZWxkX2xvY2tzKTsKLQotLyoKLSAqIEluIHRoZSBkZWJ1ZyBjYXNlIHdlIGNhcnJ5IHRoZSBjYWxsZXIncyBpbnN0cnVjdGlvbiBwb2ludGVyIGludG8KLSAqIG90aGVyIGZ1bmN0aW9ucywgYnV0IHdlIGRvbnQgd2FudCB0aGUgZnVuY3Rpb24gYXJndW1lbnQgb3ZlcmhlYWQKLSAqIGluIHRoZSBub25kZWJ1ZyBjYXNlIC0gaGVuY2UgdGhlc2UgbWFjcm9zOgotICovCi0jZGVmaW5lIF9fSVBfREVDTF9fCQksIHVuc2lnbmVkIGxvbmcgaXAKLSNkZWZpbmUgX19JUF9fCQkJLCBpcAotI2RlZmluZSBfX1JFVF9JUF9fCQksICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQotCi0vKgotICogIm11dGV4IGRlYnVnZ2luZyBlbmFibGVkIiBmbGFnLiBXZSB0dXJuIGl0IG9mZiB3aGVuIHdlIGRldGVjdAotICogdGhlIGZpcnN0IHByb2JsZW0gYmVjYXVzZSB3ZSBkb250IHdhbnQgdG8gcmVjdXJzZSBiYWNrCi0gKiBpbnRvIHRoZSB0cmFjaW5nIGNvZGUgd2hlbiBkb2luZyBlcnJvciBwcmludGsgb3IKLSAqIGV4ZWN1dGluZyBhIEJVRygpOgotICovCi1pbnQgZGVidWdfbXV0ZXhfb24gPSAxOwotCi1zdGF0aWMgdm9pZCBwcmludGtfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JaWYgKHApCi0JCXByaW50aygiJTE2czolNWQgWyVwLCAlM2RdIiwgcC0+Y29tbSwgcC0+cGlkLCBwLCBwLT5wcmlvKTsKLQllbHNlCi0JCXByaW50aygiPG5vbmU+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50a190aShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQotewotCWlmICh0aSkKLQkJcHJpbnRrX3Rhc2sodGktPnRhc2spOwotCWVsc2UKLQkJcHJpbnRrKCI8bm9uZT4iKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRrX3Rhc2tfc2hvcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCWlmIChwKQotCQlwcmludGsoIiVzLyVkIFslcCwgJTNkXSIsIHAtPmNvbW0sIHAtPnBpZCwgcCwgcC0+cHJpbyk7Ci0JZWxzZQotCQlwcmludGsoIjxub25lPiIpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludGtfbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2ssIGludCBwcmludF9vd25lcikKLXsKLQlwcmludGsoIiBbJXBdIHslc31cbiIsIGxvY2ssIGxvY2stPm5hbWUpOwotCi0JaWYgKHByaW50X293bmVyICYmIGxvY2stPm93bmVyKSB7Ci0JCXByaW50aygiLi4gaGVsZCBieTogICIpOwotCQlwcmludGtfdGkobG9jay0+b3duZXIpOwotCQlwcmludGsoIlxuIik7Ci0JfQotCWlmIChsb2NrLT5vd25lcikgewotCQlwcmludGsoIi4uLiBhY3F1aXJlZCBhdDogICAgICAgICAgICAgICAiKTsKLQkJcHJpbnRfc3ltYm9sKCIlc1xuIiwgbG9jay0+YWNxdWlyZV9pcCk7Ci0JfQotfQotCi0vKgotICogcHJpbnRrIGxvY2tzIGhlbGQgYnkgYSB0YXNrOgotICovCi1zdGF0aWMgdm9pZCBzaG93X3Rhc2tfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCXN3aXRjaCAocC0+c3RhdGUpIHsKLQljYXNlIFRBU0tfUlVOTklORzoJCXByaW50aygiUiIpOyBicmVhazsKLQljYXNlIFRBU0tfSU5URVJSVVBUSUJMRToJcHJpbnRrKCJTIik7IGJyZWFrOwotCWNhc2UgVEFTS19VTklOVEVSUlVQVElCTEU6CXByaW50aygiRCIpOyBicmVhazsKLQljYXNlIFRBU0tfU1RPUFBFRDoJCXByaW50aygiVCIpOyBicmVhazsKLQljYXNlIEVYSVRfWk9NQklFOgkJcHJpbnRrKCJaIik7IGJyZWFrOwotCWNhc2UgRVhJVF9ERUFEOgkJCXByaW50aygiWCIpOyBicmVhazsKLQlkZWZhdWx0OgkJCXByaW50aygiPyIpOyBicmVhazsKLQl9Ci0JcHJpbnRrX3Rhc2socCk7Ci0JaWYgKHAtPmJsb2NrZWRfb24pIHsKLQkJc3RydWN0IG11dGV4ICpsb2NrID0gcC0+YmxvY2tlZF9vbi0+bG9jazsKLQotCQlwcmludGsoIiBibG9ja2VkIG9uIG11dGV4OiIpOwotCQlwcmludGtfbG9jayhsb2NrLCAxKTsKLQl9IGVsc2UKLQkJcHJpbnRrKCIgKG5vdCBibG9ja2VkIG9uIG11dGV4KVxuIik7Ci19Ci0KLS8qCi0gKiBwcmludGsgYWxsIGxvY2tzIGhlbGQgaW4gdGhlIHN5c3RlbSAoaWYgZmlsdGVyID09IE5VTEwpLAotICogb3IgYWxsIGxvY2tzIGJlbG9uZ2luZyB0byBhIHNpbmdsZSB0YXNrIChpZiBmaWx0ZXIgIT0gTlVMTCk6Ci0gKi8KLXZvaWQgc2hvd19oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmlsdGVyKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmN1cnIsICpjdXJzb3IgPSBOVUxMOwotCXN0cnVjdCBtdXRleCAqbG9jazsKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQgPSAwOwotCi0JaWYgKGZpbHRlcikgewotCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JCXByaW50aygifCBzaG93aW5nIGFsbCBsb2NrcyBoZWxkIGJ5OiB8ICAoIik7Ci0JCXByaW50a190YXNrX3Nob3J0KGZpbHRlcik7Ci0JCXByaW50aygiKTpcbiIpOwotCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCQlwcmludGsoInwgc2hvd2luZyBhbGwgbG9ja3MgaGVsZDogfFxuIik7Ci0JCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQl9Ci0KLQkvKgotCSAqIFBsYXkgc2FmZSBhbmQgYWNxdWlyZSB0aGUgZ2xvYmFsIHRyYWNlIGxvY2suIFdlCi0JICogY2Fubm90IHByaW50ayB3aXRoIHRoYXQgbG9jayBoZWxkIHNvIHdlIGl0ZXJhdGUKLQkgKiB2ZXJ5IGNhcmVmdWxseToKLQkgKi8KLW5leHQ6Ci0JZGVidWdfc3Bpbl9sb2NrX3NhdmUoJmRlYnVnX211dGV4X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoKGN1cnIsICZkZWJ1Z19tdXRleF9oZWxkX2xvY2tzKSB7Ci0JCWlmIChjdXJzb3IgJiYgY3VyciAhPSBjdXJzb3IpCi0JCQljb250aW51ZTsKLQkJbG9jayA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IG11dGV4LCBoZWxkX2xpc3QpOwotCQl0ID0gbG9jay0+b3duZXI7Ci0JCWlmIChmaWx0ZXIgJiYgKHQgIT0gZmlsdGVyLT50aHJlYWRfaW5mbykpCi0JCQljb250aW51ZTsKLQkJY291bnQrKzsKLQkJY3Vyc29yID0gY3Vyci0+bmV4dDsKLQkJZGVidWdfc3Bpbl91bmxvY2tfcmVzdG9yZSgmZGVidWdfbXV0ZXhfbG9jaywgZmxhZ3MpOwotCi0JCXByaW50aygiXG4jJTAzZDogICAgICAgICAgICAiLCBjb3VudCk7Ci0JCXByaW50a19sb2NrKGxvY2ssIGZpbHRlciA/IDAgOiAxKTsKLQkJZ290byBuZXh0OwotCX0KLQlkZWJ1Z19zcGluX3VubG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi12b2lkIG11dGV4X2RlYnVnX3Nob3dfYWxsX2xvY2tzKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKLQlpbnQgY291bnQgPSAxMDsKLQlpbnQgdW5sb2NrID0gMTsKLQotCXByaW50aygiXG5TaG93aW5nIGFsbCBibG9ja2luZyBsb2NrcyBpbiB0aGUgc3lzdGVtOlxuIik7Ci0KLQkvKgotCSAqIEhlcmUgd2UgdHJ5IHRvIGdldCB0aGUgdGFza2xpc3RfbG9jayBhcyBoYXJkIGFzIHBvc3NpYmxlLAotCSAqIGlmIG5vdCBzdWNjZXNzZnVsIGFmdGVyIDIgc2Vjb25kcyB3ZSBpZ25vcmUgaXQgKGJ1dCBrZWVwCi0JICogdHJ5aW5nKS4gVGhpcyBpcyB0byBlbmFibGUgYSBkZWJ1ZyBwcmludG91dCBldmVuIGlmIGEKLQkgKiB0YXNrbGlzdF9sb2NrLWhvbGRpbmcgdGFzayBkZWFkbG9ja3Mgb3IgY3Jhc2hlcy4KLQkgKi8KLXJldHJ5OgotCWlmICghcmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgewotCQlpZiAoY291bnQgPT0gMTApCi0JCQlwcmludGsoImhtLCB0YXNrbGlzdF9sb2NrIGxvY2tlZCwgcmV0cnlpbmcuLi4gIik7Ci0JCWlmIChjb3VudCkgewotCQkJY291bnQtLTsKLQkJCXByaW50aygiICMlZCIsIDEwLWNvdW50KTsKLQkJCW1kZWxheSgyMDApOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlwcmludGsoIiBpZ25vcmluZyBpdC5cbiIpOwotCQl1bmxvY2sgPSAwOwotCX0KLQlpZiAoY291bnQgIT0gMTApCi0JCXByaW50aygiIGxvY2tlZCBpdC5cbiIpOwotCi0JZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQlzaG93X3Rhc2tfbG9ja3MocCk7Ci0JCWlmICghdW5sb2NrKQotCQkJaWYgKHJlYWRfdHJ5bG9jaygmdGFza2xpc3RfbG9jaykpCi0JCQkJdW5sb2NrID0gMTsKLQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwotCi0JcHJpbnRrKCJcbiIpOwotCXNob3dfaGVsZF9sb2NrcyhOVUxMKTsKLQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKLQotCWlmICh1bmxvY2spCi0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwb3J0X2RlYWRsb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IG11dGV4ICpsb2NrLAotCQkJICAgIHN0cnVjdCBtdXRleCAqbG9ja2JsaywgdW5zaWduZWQgbG9uZyBpcCkKLXsKLQlwcmludGsoIlxuJXMvJWQgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgdGhpcyBsb2NrOlxuIiwKLQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKLQlwcmludGtfbG9jayhsb2NrLCAxKTsKLQlwcmludGsoIi4uLiB0cnlpbmcgYXQ6ICAgICAgICAgICAgICAgICAiKTsKLQlwcmludF9zeW1ib2woIiVzXG4iLCBpcCk7Ci0Jc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQpOwotCi0JaWYgKGxvY2tibGspIHsKLQkJcHJpbnRrKCJidXQgJXMvJWQgaXMgZGVhZGxvY2tpbmcgY3VycmVudCB0YXNrICVzLyVkIVxuXG4iLAotCQkJdGFzay0+Y29tbSwgdGFzay0+cGlkLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOwotCQlwcmludGsoIlxuJXMvJWQgaXMgYmxvY2tlZCBvbiB0aGlzIGxvY2s6XG4iLAotCQkJdGFzay0+Y29tbSwgdGFzay0+cGlkKTsKLQkJcHJpbnRrX2xvY2sobG9ja2JsaywgMSk7Ci0KLQkJc2hvd19oZWxkX2xvY2tzKHRhc2spOwotCi0JCXByaW50aygiXG4lcy8lZCdzIFtibG9ja2VkXSBzdGFja2R1bXA6XG5cbiIsCi0JCQl0YXNrLT5jb21tLCB0YXNrLT5waWQpOwotCQlzaG93X3N0YWNrKHRhc2ssIE5VTEwpOwotCX0KLQotCXByaW50aygiXG4lcy8lZCdzIFtjdXJyZW50XSBzdGFja2R1bXA6XG5cbiIsCi0JCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0JZHVtcF9zdGFjaygpOwotCW11dGV4X2RlYnVnX3Nob3dfYWxsX2xvY2tzKCk7Ci0JcHJpbnRrKCJbIHR1cm5pbmcgb2ZmIGRlYWRsb2NrIGRldGVjdGlvbi4gUGxlYXNlIHJlcG9ydCB0aGlzLiBdXG5cbiIpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci19Ci0KLS8qCi0gKiBSZWN1cnNpdmVseSBjaGVjayBmb3IgbXV0ZXggZGVhZGxvY2tzOgotICovCi1zdGF0aWMgaW50IGNoZWNrX2RlYWRsb2NrKHN0cnVjdCBtdXRleCAqbG9jaywgaW50IGRlcHRoLAotCQkJICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpLCB1bnNpZ25lZCBsb25nIGlwKQotewotCXN0cnVjdCBtdXRleCAqbG9ja2JsazsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KLQlpZiAoIWRlYnVnX211dGV4X29uKQotCQlyZXR1cm4gMDsKLQotCXRpID0gbG9jay0+b3duZXI7Ci0JaWYgKCF0aSkKLQkJcmV0dXJuIDA7Ci0KLQl0YXNrID0gdGktPnRhc2s7Ci0JbG9ja2JsayA9IE5VTEw7Ci0JaWYgKHRhc2stPmJsb2NrZWRfb24pCi0JCWxvY2tibGsgPSB0YXNrLT5ibG9ja2VkX29uLT5sb2NrOwotCi0JLyogU2VsZi1kZWFkbG9jazogKi8KLQlpZiAoY3VycmVudCA9PSB0YXNrKSB7Ci0JCURFQlVHX09GRigpOwotCQlpZiAoZGVwdGgpCi0JCQlyZXR1cm4gMTsKLQkJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci0JCXByaW50ayggICJbIEJVRzogbG9jayByZWN1cnNpb24gZGVhZGxvY2sgZGV0ZWN0ZWQhIHxcbiIpOwotCQlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQkJcmVwb3J0X2RlYWRsb2NrKHRhc2ssIGxvY2ssIE5VTEwsIGlwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVWdoLCBzb21ldGhpbmcgY29ycnVwdGVkIHRoZSBsb2NrIGRhdGEgc3RydWN0dXJlPyAqLwotCWlmIChkZXB0aCA+IDIwKSB7Ci0JCURFQlVHX09GRigpOwotCQlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci0JCXByaW50ayggICJbIEJVRzogaW5maW5pdGUgbG9jayBkZXBlbmRlbmN5IGRldGVjdGVkIT8gfFxuIik7Ci0JCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQkJcmVwb3J0X2RlYWRsb2NrKHRhc2ssIGxvY2ssIGxvY2tibGssIGlwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogUmVjdXJzaXZlbHkgY2hlY2sgZm9yIGRlcGVuZGVuY2llczogKi8KLQlpZiAobG9ja2JsayAmJiBjaGVja19kZWFkbG9jayhsb2NrYmxrLCBkZXB0aCsxLCB0aSwgaXApKSB7Ci0JCXByaW50aygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci0JCXByaW50ayggICJbIEJVRzogY2lyY3VsYXIgbG9ja2luZyBkZWFkbG9jayBkZXRlY3RlZCEgXVxuIik7Ci0JCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JCXJlcG9ydF9kZWFkbG9jayh0YXNrLCBsb2NrLCBsb2NrYmxrLCBpcCk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIGEgdGFzayBleGl0cywgdGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUKLSAqIHRhc2sgaXMgaG9sZGluZyBhbnkgbG9ja3MsIGFuZCByZXBvcnRzIHRoZSBmaXJzdCBvbmUgaWYgc286Ci0gKi8KLXZvaWQgbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VyciwgKm5leHQ7Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IG11dGV4ICpsb2NrOwotCi0JaWYgKCFkZWJ1Z19tdXRleF9vbikKLQkJcmV0dXJuOwotCi0JZGVidWdfc3Bpbl9sb2NrX3NhdmUoJmRlYnVnX211dGV4X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUoY3VyciwgbmV4dCwgJmRlYnVnX211dGV4X2hlbGRfbG9ja3MpIHsKLQkJbG9jayA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IG11dGV4LCBoZWxkX2xpc3QpOwotCQl0ID0gbG9jay0+b3duZXI7Ci0JCWlmICh0ICE9IHRhc2stPnRocmVhZF9pbmZvKQotCQkJY29udGludWU7Ci0JCWxpc3RfZGVsX2luaXQoY3Vycik7Ci0JCURFQlVHX09GRigpOwotCQlkZWJ1Z19zcGluX3VubG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Ci0KLQkJcHJpbnRrKCJCVUc6ICVzLyVkLCBsb2NrIGhlbGQgYXQgdGFzayBleGl0IHRpbWUhXG4iLAotCQkJdGFzay0+Y29tbSwgdGFzay0+cGlkKTsKLQkJcHJpbnRrX2xvY2sobG9jaywgMSk7Ci0JCWlmIChsb2NrLT5vd25lciAhPSB0YXNrLT50aHJlYWRfaW5mbykKLQkJCXByaW50aygiZXhpdGluZyB0YXNrIGlzIG5vdCBldmVuIHRoZSBvd25lcj8/XG4iKTsKLQkJcmV0dXJuOwotCX0KLQlkZWJ1Z19zcGluX3VubG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiBrZXJuZWwgbWVtb3J5IGlzIGZyZWVkIChvciB1bm1hcHBlZCksIG9yIGlmIGEgbXV0ZXgKLSAqIGlzIGRlc3Ryb3llZCBvciByZWluaXRpYWxpemVkIC0gdGhpcyBjb2RlIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzCi0gKiBhbnkgaGVsZCBsb2NrIGluIHRoZSBtZW1vcnkgcmFuZ2Ugb2YgPGZyb20+IHRvIDx0bz46Ci0gKi8KLXZvaWQgbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VyciwgKm5leHQ7Ci0JY29uc3Qgdm9pZCAqdG8gPSBmcm9tICsgbGVuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IG11dGV4ICpsb2NrOwotCXZvaWQgKmxvY2tfYWRkcjsKLQotCWlmICghZGVidWdfbXV0ZXhfb24pCi0JCXJldHVybjsKLQotCWRlYnVnX3NwaW5fbG9ja19zYXZlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnIsIG5leHQsICZkZWJ1Z19tdXRleF9oZWxkX2xvY2tzKSB7Ci0JCWxvY2sgPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBtdXRleCwgaGVsZF9saXN0KTsKLQkJbG9ja19hZGRyID0gbG9jazsKLQkJaWYgKGxvY2tfYWRkciA8IGZyb20gfHwgbG9ja19hZGRyID49IHRvKQotCQkJY29udGludWU7Ci0JCWxpc3RfZGVsX2luaXQoY3Vycik7Ci0JCURFQlVHX09GRigpOwotCQlkZWJ1Z19zcGluX3VubG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Ci0KLQkJcHJpbnRrKCJCVUc6ICVzLyVkLCBhY3RpdmUgbG9jayBbJXAoJXAtJXApXSBmcmVlZCFcbiIsCi0JCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGxvY2ssIGZyb20sIHRvKTsKLQkJZHVtcF9zdGFjaygpOwotCQlwcmludGtfbG9jayhsb2NrLCAxKTsKLQkJaWYgKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSkKLQkJCXByaW50aygiZnJlZWluZyB0YXNrIGlzIG5vdCBldmVuIHRoZSBvd25lcj8/XG4iKTsKLQkJcmV0dXJuOwotCX0KLQlkZWJ1Z19zcGluX3VubG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2stPndhaXRfbG9jayBoZWxkLgogICovCi12b2lkIGRlYnVnX211dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssCi0JCQkgICBzdHJ1Y3QgdGhyZWFkX2luZm8gKm5ld19vd25lciBfX0lQX0RFQ0xfXykKK3ZvaWQgZGVidWdfbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRocmVhZF9pbmZvICpuZXdfb3duZXIpCiB7CiAJbG9jay0+b3duZXIgPSBuZXdfb3duZXI7Ci0JREVCVUdfV0FSTl9PTighbGlzdF9lbXB0eSgmbG9jay0+aGVsZF9saXN0KSk7Ci0JaWYgKGRlYnVnX211dGV4X29uKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmxvY2stPmhlbGRfbGlzdCwgJmRlYnVnX211dGV4X2hlbGRfbG9ja3MpOwotCQlsb2NrLT5hY3F1aXJlX2lwID0gaXA7Ci0JfQogfQogCi12b2lkIGRlYnVnX211dGV4X2luaXRfd2FpdGVyKHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcikKK3ZvaWQgZGVidWdfbXV0ZXhfbG9ja19jb21tb24oc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIpCiB7CiAJbWVtc2V0KHdhaXRlciwgTVVURVhfREVCVUdfSU5JVCwgc2l6ZW9mKCp3YWl0ZXIpKTsKIAl3YWl0ZXItPm1hZ2ljID0gd2FpdGVyOwpAQCAtMzg5LDIzICs0MSwyMyBAQAogCiB2b2lkIGRlYnVnX211dGV4X3dha2Vfd2FpdGVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKQogewotCVNNUF9ERUJVR19XQVJOX09OKCFzcGluX2lzX2xvY2tlZCgmbG9jay0+d2FpdF9sb2NrKSk7Ci0JREVCVUdfV0FSTl9PTihsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKTsKLQlERUJVR19XQVJOX09OKHdhaXRlci0+bWFnaWMgIT0gd2FpdGVyKTsKLQlERUJVR19XQVJOX09OKGxpc3RfZW1wdHkoJndhaXRlci0+bGlzdCkpOworCVNNUF9ERUJVR19MT0NLU19XQVJOX09OKCFzcGluX2lzX2xvY2tlZCgmbG9jay0+d2FpdF9sb2NrKSk7CisJREVCVUdfTE9DS1NfV0FSTl9PTihsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKTsKKwlERUJVR19MT0NLU19XQVJOX09OKHdhaXRlci0+bWFnaWMgIT0gd2FpdGVyKTsKKwlERUJVR19MT0NLU19XQVJOX09OKGxpc3RfZW1wdHkoJndhaXRlci0+bGlzdCkpOwogfQogCiB2b2lkIGRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcikKIHsKLQlERUJVR19XQVJOX09OKCFsaXN0X2VtcHR5KCZ3YWl0ZXItPmxpc3QpKTsKKwlERUJVR19MT0NLU19XQVJOX09OKCFsaXN0X2VtcHR5KCZ3YWl0ZXItPmxpc3QpKTsKIAltZW1zZXQod2FpdGVyLCBNVVRFWF9ERUJVR19GUkVFLCBzaXplb2YoKndhaXRlcikpOwogfQogCiB2b2lkIGRlYnVnX211dGV4X2FkZF93YWl0ZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIsCi0JCQkgICAgc3RydWN0IHRocmVhZF9pbmZvICp0aSBfX0lQX0RFQ0xfXykKKwkJCSAgICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQogewotCVNNUF9ERUJVR19XQVJOX09OKCFzcGluX2lzX2xvY2tlZCgmbG9jay0+d2FpdF9sb2NrKSk7Ci0JY2hlY2tfZGVhZGxvY2sobG9jaywgMCwgdGksIGlwKTsKKwlTTVBfREVCVUdfTE9DS1NfV0FSTl9PTighc3Bpbl9pc19sb2NrZWQoJmxvY2stPndhaXRfbG9jaykpOworCiAJLyogTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgYmxvY2tlZCBvbiB0aGUgbG9jazogKi8KIAl0aS0+dGFzay0+YmxvY2tlZF9vbiA9IHdhaXRlcjsKIAl3YWl0ZXItPmxvY2sgPSBsb2NrOwpAQCAtNDE0LDkgKzY2LDkgQEAKIHZvaWQgbXV0ZXhfcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlciwKIAkJCSBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQogewotCURFQlVHX1dBUk5fT04obGlzdF9lbXB0eSgmd2FpdGVyLT5saXN0KSk7Ci0JREVCVUdfV0FSTl9PTih3YWl0ZXItPnRhc2sgIT0gdGktPnRhc2spOwotCURFQlVHX1dBUk5fT04odGktPnRhc2stPmJsb2NrZWRfb24gIT0gd2FpdGVyKTsKKwlERUJVR19MT0NLU19XQVJOX09OKGxpc3RfZW1wdHkoJndhaXRlci0+bGlzdCkpOworCURFQlVHX0xPQ0tTX1dBUk5fT04od2FpdGVyLT50YXNrICE9IHRpLT50YXNrKTsKKwlERUJVR19MT0NLU19XQVJOX09OKHRpLT50YXNrLT5ibG9ja2VkX29uICE9IHdhaXRlcik7CiAJdGktPnRhc2stPmJsb2NrZWRfb24gPSBOVUxMOwogCiAJbGlzdF9kZWxfaW5pdCgmd2FpdGVyLT5saXN0KTsKQEAgLTQyNSwyNCArNzcsMjMgQEAKIAogdm9pZCBkZWJ1Z19tdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpsb2NrKQogewotCURFQlVHX1dBUk5fT04obG9jay0+bWFnaWMgIT0gbG9jayk7Ci0JREVCVUdfV0FSTl9PTighbG9jay0+d2FpdF9saXN0LnByZXYgJiYgIWxvY2stPndhaXRfbGlzdC5uZXh0KTsKLQlERUJVR19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7Ci0JaWYgKGRlYnVnX211dGV4X29uKSB7Ci0JCURFQlVHX1dBUk5fT04obGlzdF9lbXB0eSgmbG9jay0+aGVsZF9saXN0KSk7Ci0JCWxpc3RfZGVsX2luaXQoJmxvY2stPmhlbGRfbGlzdCk7Ci0JfQorCURFQlVHX0xPQ0tTX1dBUk5fT04obG9jay0+b3duZXIgIT0gY3VycmVudF90aHJlYWRfaW5mbygpKTsKKwlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm1hZ2ljICE9IGxvY2spOworCURFQlVHX0xPQ0tTX1dBUk5fT04oIWxvY2stPndhaXRfbGlzdC5wcmV2ICYmICFsb2NrLT53YWl0X2xpc3QubmV4dCk7CisJREVCVUdfTE9DS1NfV0FSTl9PTihsb2NrLT5vd25lciAhPSBjdXJyZW50X3RocmVhZF9pbmZvKCkpOwogfQogCi12b2lkIGRlYnVnX211dGV4X2luaXQoc3RydWN0IG11dGV4ICpsb2NrLCBjb25zdCBjaGFyICpuYW1lKQordm9pZCBkZWJ1Z19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlaW5pdGlhbGl6aW5nIGEgaGVsZCBsb2NrOgogCSAqLwotCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopbG9jaywgc2l6ZW9mKCpsb2NrKSk7CisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilsb2NrLCBzaXplb2YoKmxvY2spKTsKKwlsb2NrZGVwX2luaXRfbWFwKCZsb2NrLT5kZXBfbWFwLCBuYW1lLCBrZXkpOworI2VuZGlmCiAJbG9jay0+b3duZXIgPSBOVUxMOwotCUlOSVRfTElTVF9IRUFEKCZsb2NrLT5oZWxkX2xpc3QpOwotCWxvY2stPm5hbWUgPSBuYW1lOwogCWxvY2stPm1hZ2ljID0gbG9jazsKIH0KIApAQCAtNDU2LDcgKzEwNyw3IEBACiAgKi8KIHZvaWQgZmFzdGNhbGwgbXV0ZXhfZGVzdHJveShzdHJ1Y3QgbXV0ZXggKmxvY2spCiB7Ci0JREVCVUdfV0FSTl9PTihtdXRleF9pc19sb2NrZWQobG9jaykpOworCURFQlVHX0xPQ0tTX1dBUk5fT04obXV0ZXhfaXNfbG9ja2VkKGxvY2spKTsKIAlsb2NrLT5tYWdpYyA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5oIGIva2VybmVsL211dGV4LWRlYnVnLmgKaW5kZXggYTUxOTZjMy4uYmFiZmJkZiAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LWRlYnVnLmgKKysrIGIva2VybmVsL211dGV4LWRlYnVnLmgKQEAgLTEwLDExMCArMTAsNDQgQEAKICAqIE1vcmUgZGV0YWlscyBhcmUgaW4ga2VybmVsL211dGV4LWRlYnVnLmMuCiAgKi8KIAotZXh0ZXJuIHNwaW5sb2NrX3QgZGVidWdfbXV0ZXhfbG9jazsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRlYnVnX211dGV4X2hlbGRfbG9ja3M7Ci1leHRlcm4gaW50IGRlYnVnX211dGV4X29uOwotCi0vKgotICogSW4gdGhlIGRlYnVnIGNhc2Ugd2UgY2FycnkgdGhlIGNhbGxlcidzIGluc3RydWN0aW9uIHBvaW50ZXIgaW50bwotICogb3RoZXIgZnVuY3Rpb25zLCBidXQgd2UgZG9udCB3YW50IHRoZSBmdW5jdGlvbiBhcmd1bWVudCBvdmVyaGVhZAotICogaW4gdGhlIG5vbmRlYnVnIGNhc2UgLSBoZW5jZSB0aGVzZSBtYWNyb3M6Ci0gKi8KLSNkZWZpbmUgX19JUF9ERUNMX18JCSwgdW5zaWduZWQgbG9uZyBpcAotI2RlZmluZSBfX0lQX18JCQksIGlwCi0jZGVmaW5lIF9fUkVUX0lQX18JCSwgKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCi0KIC8qCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggbG9jay0+d2FpdF9sb2NrIGhlbGQuCiAgKi8KLWV4dGVybiB2b2lkIGRlYnVnX211dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssCi0JCQkJICBzdHJ1Y3QgdGhyZWFkX2luZm8gKm5ld19vd25lciBfX0lQX0RFQ0xfXyk7CitleHRlcm4gdm9pZAorZGVidWdfbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRocmVhZF9pbmZvICpuZXdfb3duZXIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfbXV0ZXhfY2xlYXJfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrKQogewogCWxvY2stPm93bmVyID0gTlVMTDsKIH0KIAotZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfaW5pdF93YWl0ZXIoc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKTsKK2V4dGVybiB2b2lkIGRlYnVnX211dGV4X2xvY2tfY29tbW9uKHN0cnVjdCBtdXRleCAqbG9jaywKKwkJCQkgICAgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKTsKIGV4dGVybiB2b2lkIGRlYnVnX211dGV4X3dha2Vfd2FpdGVyKHN0cnVjdCBtdXRleCAqbG9jaywKIAkJCQkgICAgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKTsKIGV4dGVybiB2b2lkIGRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcik7CiBleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9hZGRfd2FpdGVyKHN0cnVjdCBtdXRleCAqbG9jaywKIAkJCQkgICBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIsCi0JCQkJICAgc3RydWN0IHRocmVhZF9pbmZvICp0aSBfX0lQX0RFQ0xfXyk7CisJCQkJICAgc3RydWN0IHRocmVhZF9pbmZvICp0aSk7CiBleHRlcm4gdm9pZCBtdXRleF9yZW1vdmVfd2FpdGVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyLAogCQkJCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOwogZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdXRleCAqbG9jayk7Ci1leHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSk7Ci0KLSNkZWZpbmUgZGVidWdfc3Bpbl9sb2NrX3NhdmUobG9jaywgZmxhZ3MpCQlcCi0JZG8gewkJCQkJCVwKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCVwKLQkJaWYgKGRlYnVnX211dGV4X29uKQkJCVwKLQkJCXNwaW5fbG9jayhsb2NrKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGRlYnVnX3NwaW5fdW5sb2NrX3Jlc3RvcmUobG9jaywgZmxhZ3MpCQlcCi0JZG8gewkJCQkJCVwKLQkJaWYgKGRlYnVnX211dGV4X29uKQkJCVwKLQkJCXNwaW5fdW5sb2NrKGxvY2spOwkJXAotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQlcCi0JCXByZWVtcHRfY2hlY2tfcmVzY2hlZCgpOwkJXAotCX0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwogCiAjZGVmaW5lIHNwaW5fbG9ja19tdXRleChsb2NrLCBmbGFncykJCQlcCiAJZG8gewkJCQkJCVwKIAkJc3RydWN0IG11dGV4ICpsID0gY29udGFpbmVyX29mKGxvY2ssIHN0cnVjdCBtdXRleCwgd2FpdF9sb2NrKTsgXAogCQkJCQkJCVwKLQkJREVCVUdfV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CQlcCi0JCWRlYnVnX3NwaW5fbG9ja19zYXZlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7IFwKLQkJc3Bpbl9sb2NrKGxvY2spOwkJCVwKLQkJREVCVUdfV0FSTl9PTihsLT5tYWdpYyAhPSBsKTsJCVwKKwkJREVCVUdfTE9DS1NfV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CVwKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCVwKKwkJX19yYXdfc3Bpbl9sb2NrKCYobG9jayktPnJhd19sb2NrKTsJXAorCQlERUJVR19MT0NLU19XQVJOX09OKGwtPm1hZ2ljICE9IGwpOwlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBzcGluX3VubG9ja19tdXRleChsb2NrLCBmbGFncykJCQlcCiAJZG8gewkJCQkJCVwKLQkJc3Bpbl91bmxvY2sobG9jayk7CQkJXAotCQlkZWJ1Z19zcGluX3VubG9ja19yZXN0b3JlKCZkZWJ1Z19tdXRleF9sb2NrLCBmbGFncyk7CVwKKwkJX19yYXdfc3Bpbl91bmxvY2soJihsb2NrKS0+cmF3X2xvY2spOwlcCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCVwKKwkJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CQlcCiAJfSB3aGlsZSAoMCkKLQotI2RlZmluZSBERUJVR19PRkYoKQkJCQkJXAotZG8gewkJCQkJCQlcCi0JaWYgKGRlYnVnX211dGV4X29uKSB7CQkJCVwKLQkJZGVidWdfbXV0ZXhfb24gPSAwOwkJCVwKLQkJY29uc29sZV92ZXJib3NlKCk7CQkJXAotCQlpZiAoc3Bpbl9pc19sb2NrZWQoJmRlYnVnX211dGV4X2xvY2spKQlcCi0JCQlzcGluX3VubG9jaygmZGVidWdfbXV0ZXhfbG9jayk7CVwKLQl9CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBERUJVR19CVUcoKQkJCQkJXAotZG8gewkJCQkJCQlcCi0JaWYgKGRlYnVnX211dGV4X29uKSB7CQkJCVwKLQkJREVCVUdfT0ZGKCk7CQkJCVwKLQkJQlVHKCk7CQkJCQlcCi0JfQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREVCVUdfV0FSTl9PTihjKQkJCQlcCi1kbyB7CQkJCQkJCVwKLQlpZiAodW5saWtlbHkoYyAmJiBkZWJ1Z19tdXRleF9vbikpIHsJCVwKLQkJREVCVUdfT0ZGKCk7CQkJCVwKLQkJV0FSTl9PTigxKTsJCQkJXAotCX0JCQkJCQlcCi19IHdoaWxlICgwKQotCi0jIGRlZmluZSBERUJVR19CVUdfT04oYykJCQkJXAotZG8gewkJCQkJCQlcCi0JaWYgKHVubGlrZWx5KGMpKQkJCQlcCi0JCURFQlVHX0JVRygpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jaWZkZWYgQ09ORklHX1NNUAotIyBkZWZpbmUgU01QX0RFQlVHX1dBUk5fT04oYykJCQlERUJVR19XQVJOX09OKGMpCi0jIGRlZmluZSBTTVBfREVCVUdfQlVHX09OKGMpCQkJREVCVUdfQlVHX09OKGMpCi0jZWxzZQotIyBkZWZpbmUgU01QX0RFQlVHX1dBUk5fT04oYykJCQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBTTVBfREVCVUdfQlVHX09OKGMpCQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5jIGIva2VybmVsL211dGV4LmMKaW5kZXggNzA0M2RiMi4uOGM3MWNmNyAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmMKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAKIC8qCiAgKiBJbiB0aGUgREVCVUcgY2FzZSB3ZSBhcmUgdXNpbmcgdGhlICJOVUxMIGZhc3RwYXRoIiBmb3IgbXV0ZXhlcywKQEAgLTM4LDEzICszOSwxNCBAQAogICoKICAqIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGluaXRpYWxpemUgYW4gYWxyZWFkeSBsb2NrZWQgbXV0ZXguCiAgKi8KLXZvaWQgZmFzdGNhbGwgX19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSkKK3ZvaWQKK19fbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewogCWF0b21pY19zZXQoJmxvY2stPmNvdW50LCAxKTsKIAlzcGluX2xvY2tfaW5pdCgmbG9jay0+d2FpdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbG9jay0+d2FpdF9saXN0KTsKIAotCWRlYnVnX211dGV4X2luaXQobG9jaywgbmFtZSk7CisJZGVidWdfbXV0ZXhfaW5pdChsb2NrLCBuYW1lLCBrZXkpOwogfQogCiBFWFBPUlRfU1lNQk9MKF9fbXV0ZXhfaW5pdCk7CkBAIC01Niw3ICs1OCw3IEBACiAgKiBicmFuY2ggaXMgcHJlZGljdGVkIGJ5IHRoZSBDUFUgYXMgZGVmYXVsdC11bnRha2VuLgogICovCiBzdGF0aWMgdm9pZCBmYXN0Y2FsbCBub2lubGluZSBfX3NjaGVkCi1fX211dGV4X2xvY2tfc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQgX19JUF9ERUNMX18pOworX19tdXRleF9sb2NrX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50KTsKIAogLyoqKgogICogbXV0ZXhfbG9jayAtIGFjcXVpcmUgdGhlIG11dGV4CkBAIC03OSw3ICs4MSw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIChidXQgbm90IGVxdWl2YWxlbnQgdG8pIGRvd24oKS4KICAqLwotdm9pZCBmYXN0Y2FsbCBfX3NjaGVkIG11dGV4X2xvY2soc3RydWN0IG11dGV4ICpsb2NrKQordm9pZCBpbmxpbmUgZmFzdGNhbGwgX19zY2hlZCBtdXRleF9sb2NrKHN0cnVjdCBtdXRleCAqbG9jaykKIHsKIAltaWdodF9zbGVlcCgpOwogCS8qCkBAIC05Miw3ICs5NCw3IEBACiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2spOwogCiBzdGF0aWMgdm9pZCBmYXN0Y2FsbCBub2lubGluZSBfX3NjaGVkCi1fX211dGV4X3VubG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCBfX0lQX0RFQ0xfXyk7CitfX211dGV4X3VubG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCk7CiAKIC8qKioKICAqIG11dGV4X3VubG9jayAtIHJlbGVhc2UgdGhlIG11dGV4CkBAIC0xMjAsMTggKzEyMiwxOCBAQAogICogTG9jayBhIG11dGV4IChwb3NzaWJseSBpbnRlcnJ1cHRpYmxlKSwgc2xvd3BhdGg6CiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fc2NoZWQKLV9fbXV0ZXhfbG9ja19jb21tb24oc3RydWN0IG11dGV4ICpsb2NrLCBsb25nIHN0YXRlIF9fSVBfREVDTF9fKQorX19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssIGxvbmcgc3RhdGUsIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50OwogCXN0cnVjdCBtdXRleF93YWl0ZXIgd2FpdGVyOwogCXVuc2lnbmVkIGludCBvbGRfdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZWJ1Z19tdXRleF9pbml0X3dhaXRlcigmd2FpdGVyKTsKLQogCXNwaW5fbG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAKLQlkZWJ1Z19tdXRleF9hZGRfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIHRhc2stPnRocmVhZF9pbmZvLCBpcCk7CisJZGVidWdfbXV0ZXhfbG9ja19jb21tb24obG9jaywgJndhaXRlcik7CisJbXV0ZXhfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgc3ViY2xhc3MsIDAsIF9SRVRfSVBfKTsKKwlkZWJ1Z19tdXRleF9hZGRfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIHRhc2stPnRocmVhZF9pbmZvKTsKIAogCS8qIGFkZCB3YWl0aW5nIHRhc2tzIHRvIHRoZSBlbmQgb2YgdGhlIHdhaXRxdWV1ZSAoRklGTyk6ICovCiAJbGlzdF9hZGRfdGFpbCgmd2FpdGVyLmxpc3QsICZsb2NrLT53YWl0X2xpc3QpOwpAQCAtMTU4LDYgKzE2MCw3IEBACiAJCWlmICh1bmxpa2VseShzdGF0ZSA9PSBUQVNLX0lOVEVSUlVQVElCTEUgJiYKIAkJCQkJCXNpZ25hbF9wZW5kaW5nKHRhc2spKSkgewogCQkJbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrLT50aHJlYWRfaW5mbyk7CisJCQltdXRleF9yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAKIAkJCWRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKCZ3YWl0ZXIpOwpAQCAtMTczLDcgKzE3Niw3IEBACiAKIAkvKiBnb3QgdGhlIGxvY2sgLSByZWpvaWNlISAqLwogCW11dGV4X3JlbW92ZV93YWl0ZXIobG9jaywgJndhaXRlciwgdGFzay0+dGhyZWFkX2luZm8pOwotCWRlYnVnX211dGV4X3NldF9vd25lcihsb2NrLCB0YXNrLT50aHJlYWRfaW5mbyBfX0lQX18pOworCWRlYnVnX211dGV4X3NldF9vd25lcihsb2NrLCB0YXNrLT50aHJlYWRfaW5mbyk7CiAKIAkvKiBzZXQgaXQgdG8gMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGVycyBsZWZ0OiAqLwogCWlmIChsaWtlbHkobGlzdF9lbXB0eSgmbG9jay0+d2FpdF9saXN0KSkpCkBAIC0xODMsMzIgKzE4Niw0MCBAQAogCiAJZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIoJndhaXRlcik7CiAKLQlERUJVR19XQVJOX09OKGxpc3RfZW1wdHkoJmxvY2stPmhlbGRfbGlzdCkpOwotCURFQlVHX1dBUk5fT04obG9jay0+b3duZXIgIT0gdGFzay0+dGhyZWFkX2luZm8pOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZhc3RjYWxsIG5vaW5saW5lIF9fc2NoZWQKLV9fbXV0ZXhfbG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCBfX0lQX0RFQ0xfXykKK19fbXV0ZXhfbG9ja19zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCkKIHsKIAlzdHJ1Y3QgbXV0ZXggKmxvY2sgPSBjb250YWluZXJfb2YobG9ja19jb3VudCwgc3RydWN0IG11dGV4LCBjb3VudCk7CiAKLQlfX211dGV4X2xvY2tfY29tbW9uKGxvY2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFIF9fSVBfXyk7CisJX19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSwgMCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwordm9pZCBfX3NjaGVkCittdXRleF9sb2NrX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKK3sKKwltaWdodF9zbGVlcCgpOworCV9fbXV0ZXhfbG9ja19jb21tb24obG9jaywgVEFTS19VTklOVEVSUlVQVElCTEUsIHN1YmNsYXNzKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobXV0ZXhfbG9ja19uZXN0ZWQpOworI2VuZGlmCisKIC8qCiAgKiBSZWxlYXNlIHRoZSBsb2NrLCBzbG93cGF0aDoKICAqLwotc3RhdGljIGZhc3RjYWxsIG5vaW5saW5lIHZvaWQKLV9fbXV0ZXhfdW5sb2NrX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50IF9fSVBfREVDTF9fKQorc3RhdGljIGZhc3RjYWxsIGlubGluZSB2b2lkCitfX211dGV4X3VubG9ja19jb21tb25fc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQsIGludCBuZXN0ZWQpCiB7CiAJc3RydWN0IG11dGV4ICpsb2NrID0gY29udGFpbmVyX29mKGxvY2tfY291bnQsIHN0cnVjdCBtdXRleCwgY291bnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlERUJVR19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7Ci0KIAlzcGluX2xvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jaywgZmxhZ3MpOworCW11dGV4X3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIG5lc3RlZCwgX1JFVF9JUF8pOworCWRlYnVnX211dGV4X3VubG9jayhsb2NrKTsKIAogCS8qCiAJICogc29tZSBhcmNoaXRlY3R1cmVzIGxlYXZlIHRoZSBsb2NrIHVubG9ja2VkIGluIHRoZSBmYXN0cGF0aCBmYWlsdXJlCkBAIC0yMTgsOCArMjI5LDYgQEAKIAlpZiAoX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSkKIAkJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDEpOwogCi0JZGVidWdfbXV0ZXhfdW5sb2NrKGxvY2spOwotCiAJaWYgKCFsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSB7CiAJCS8qIGdldCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgd2FpdC1saXN0OiAqLwogCQlzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIgPQpAQCAtMjM3LDExICsyNDYsMjAgQEAKIH0KIAogLyoKKyAqIFJlbGVhc2UgdGhlIGxvY2ssIHNsb3dwYXRoOgorICovCitzdGF0aWMgZmFzdGNhbGwgbm9pbmxpbmUgdm9pZAorX19tdXRleF91bmxvY2tfc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQpCit7CisJX19tdXRleF91bmxvY2tfY29tbW9uX3Nsb3dwYXRoKGxvY2tfY291bnQsIDEpOworfQorCisvKgogICogSGVyZSBjb21lIHRoZSBsZXNzIGNvbW1vbiAoYW5kIGhlbmNlIGxlc3MgcGVyZm9ybWFuY2UtY3JpdGljYWwpIEFQSXM6CiAgKiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoKSBhbmQgbXV0ZXhfdHJ5bG9jaygpLgogICovCiBzdGF0aWMgaW50IGZhc3RjYWxsIG5vaW5saW5lIF9fc2NoZWQKLV9fbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50IF9fSVBfREVDTF9fKTsKK19fbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX3Nsb3dwYXRoKGF0b21pY190ICpsb2NrX2NvdW50KTsKIAogLyoqKgogICogbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlIC0gYWNxdWlyZSB0aGUgbXV0ZXgsIGludGVycnVwdGFibGUKQEAgLTI2NCwxMSArMjgyLDExIEBACiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSk7CiAKIHN0YXRpYyBpbnQgZmFzdGNhbGwgbm9pbmxpbmUgX19zY2hlZAotX19tdXRleF9sb2NrX2ludGVycnVwdGlibGVfc2xvd3BhdGgoYXRvbWljX3QgKmxvY2tfY291bnQgX19JUF9ERUNMX18pCitfX211dGV4X2xvY2tfaW50ZXJydXB0aWJsZV9zbG93cGF0aChhdG9taWNfdCAqbG9ja19jb3VudCkKIHsKIAlzdHJ1Y3QgbXV0ZXggKmxvY2sgPSBjb250YWluZXJfb2YobG9ja19jb3VudCwgc3RydWN0IG11dGV4LCBjb3VudCk7CiAKLQlyZXR1cm4gX19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCBUQVNLX0lOVEVSUlVQVElCTEUgX19JUF9fKTsKKwlyZXR1cm4gX19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCBUQVNLX0lOVEVSUlVQVElCTEUsIDApOwogfQogCiAvKgpAQCAtMjg0LDggKzMwMiwxMCBAQAogCXNwaW5fbG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAKIAlwcmV2ID0gYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSk7Ci0JaWYgKGxpa2VseShwcmV2ID09IDEpKQotCQlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgY3VycmVudF90aHJlYWRfaW5mbygpIF9fUkVUX0lQX18pOworCWlmIChsaWtlbHkocHJldiA9PSAxKSkgeworCQlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgY3VycmVudF90aHJlYWRfaW5mbygpKTsKKwkJbXV0ZXhfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOworCX0KIAkvKiBTZXQgaXQgYmFjayB0byAwIGlmIHRoZXJlIGFyZSBubyB3YWl0ZXJzOiAqLwogCWlmIChsaWtlbHkobGlzdF9lbXB0eSgmbG9jay0+d2FpdF9saXN0KSkpCiAJCWF0b21pY19zZXQoJmxvY2stPmNvdW50LCAwKTsKQEAgLTMwOSw3ICszMjksNyBAQAogICogVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSB1c2VkIGluIGludGVycnVwdCBjb250ZXh0LiBUaGUKICAqIG11dGV4IG11c3QgYmUgcmVsZWFzZWQgYnkgdGhlIHNhbWUgdGFzayB0aGF0IGFjcXVpcmVkIGl0LgogICovCi1pbnQgZmFzdGNhbGwgbXV0ZXhfdHJ5bG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spCitpbnQgZmFzdGNhbGwgX19zY2hlZCBtdXRleF90cnlsb2NrKHN0cnVjdCBtdXRleCAqbG9jaykKIHsKIAlyZXR1cm4gX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKCZsb2NrLT5jb3VudCwKIAkJCQkJX19tdXRleF90cnlsb2NrX3Nsb3dwYXRoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5oIGIva2VybmVsL211dGV4LmgKaW5kZXggMDY5MTg5OS4uYTA3NWRhZiAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmgKKysrIGIva2VybmVsL211dGV4LmgKQEAgLTE2LDIyICsxNiwxNSBAQAogI2RlZmluZSBtdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssIHdhaXRlciwgdGkpIFwKIAkJX19saXN0X2RlbCgod2FpdGVyKS0+bGlzdC5wcmV2LCAod2FpdGVyKS0+bGlzdC5uZXh0KQogCi0jZGVmaW5lIERFQlVHX1dBUk5fT04oYykJCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgbmV3X293bmVyKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihsb2NrKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGVidWdfbXV0ZXhfaW5pdF93YWl0ZXIod2FpdGVyKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZGVidWdfbXV0ZXhfd2FrZV93YWl0ZXIobG9jaywgd2FpdGVyKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBkZWJ1Z19tdXRleF9mcmVlX3dhaXRlcih3YWl0ZXIpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkZWJ1Z19tdXRleF9hZGRfd2FpdGVyKGxvY2ssIHdhaXRlciwgdGksIGlwKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgd2FpdGVyLCB0aSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBkZWJ1Z19tdXRleF91bmxvY2sobG9jaykJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRlYnVnX211dGV4X2luaXQobG9jaywgbmFtZSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX211dGV4X2luaXQobG9jaywgbmFtZSwga2V5KQkJZG8geyB9IHdoaWxlICgwKQogCi0vKgotICogUmV0dXJuLWFkZHJlc3MgcGFyYW1ldGVycy9kZWNsYXJhdGlvbnMuIFRoZXkgYXJlIHZlcnkgdXNlZnVsIGZvcgotICogZGVidWdnaW5nLCBidXQgYWRkIG92ZXJoZWFkIGluIHRoZSAhREVCVUcgY2FzZSAtIHNvIHdlIGdvIHRoZQotICogdHJvdWJsZSBvZiB1c2luZyB0aGlzIG5vdCB0b28gZWxlZ2FudCBidXQgemVyby1jb3N0IHNvbHV0aW9uOgotICovCi0jZGVmaW5lIF9fSVBfREVDTF9fCi0jZGVmaW5lIF9fSVBfXwotI2RlZmluZSBfX1JFVF9JUF9fCi0KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVidWdfbXV0ZXhfbG9ja19jb21tb24oc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIpCit7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IGNjMmE0YzkuLmFiMTNmMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC04LDcgKzgsNiBAQAogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRocm91Z2gtb3V0IHRoZSBrZXJuZWwgKGluY2x1ZGluZyBtbSBhbmQgZnMpCiAgKiB0byBpbmRpY2F0ZSBhIG1ham9yIHByb2JsZW0uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggYWY0M2VjZC4uOTFhZWE3YWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTE1LDcgKzE1LDYgQEAKICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCBlZWI4MzZiLi45M2UyMTJmIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IGZhc3RjYWxsIGF0dGFjaF9waWQodGFza190ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUsIGludCBucikKK2ludCBmYXN0Y2FsbCBhdHRhY2hfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSB0eXBlLCBpbnQgbnIpCiB7CiAJc3RydWN0IHBpZF9saW5rICpsaW5rOwogCXN0cnVjdCBwaWQgKnBpZDsKQEAgLTIzMyw3ICsyMzMsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGZhc3RjYWxsIGRldGFjaF9waWQodGFza190ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUpCit2b2lkIGZhc3RjYWxsIGRldGFjaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHBpZF9saW5rICpsaW5rOwogCXN0cnVjdCBwaWQgKnBpZDsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSBvciB3aXRoIHRhc2tsaXN0X2xvY2sgcmVhZC1oZWxkLgogICovCi10YXNrX3QgKmZpbmRfdGFza19ieV9waWRfdHlwZShpbnQgdHlwZSwgaW50IG5yKQorc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoaW50IHR5cGUsIGludCBucikKIHsKIAlyZXR1cm4gcGlkX3Rhc2soZmluZF9waWQobnIpLCB0eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggODU3YjRmYS4uYWU0NGE3MCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTEwMCwxOCArMTAwLDYgQEAKIAkgIHN1c3BlbmRlZCBpbWFnZSB0by4gSXQgd2lsbCBzaW1wbHkgcGljayB0aGUgZmlyc3QgYXZhaWxhYmxlIHN3YXAgCiAJICBkZXZpY2UuCiAKLWNvbmZpZyBTV1NVU1BfRU5DUllQVAotCWJvb2wgIkVuY3J5cHQgc3VzcGVuZCBpbWFnZSIKLQlkZXBlbmRzIG9uIFNPRlRXQVJFX1NVU1BFTkQgJiYgQ1JZUFRPPXkgJiYgKENSWVBUT19BRVM9eSB8fCBDUllQVE9fQUVTXzU4Nj15IHx8IENSWVBUT19BRVNfWDg2XzY0PXkpCi0JZGVmYXVsdCAiIgotCS0tLWhlbHAtLS0KLQkgIFRvIHByZXZlbnQgZGF0YSBnYXRoZXJpbmcgZnJvbSBzd2FwIGFmdGVyIHJlc3VtZSB5b3UgY2FuIGVuY3J5cHQKLQkgIHRoZSBzdXNwZW5kIGltYWdlIHdpdGggYSB0ZW1wb3Jhcnkga2V5IHRoYXQgaXMgZGVsZXRlZCBvbgotCSAgcmVzdW1lLgotCi0JICBOb3RlIHRoYXQgdGhlIHRlbXBvcmFyeSBrZXkgaXMgc3RvcmVkIHVuZW5jcnlwdGVkIG9uIGRpc2sgd2hpbGUgdGhlCi0JICBzeXN0ZW0gaXMgc3VzcGVuZGVkLgotCiBjb25maWcgU1VTUEVORF9TTVAKIAlib29sCiAJZGVwZW5kcyBvbiBIT1RQTFVHX0NQVSAmJiBYODYgJiYgUE0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCA5NWI3ZmUxLi5iZGJhNWQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4JCQkvKiBGb3IgaW5faW50ZXJydXB0KCkgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC01MTksNyArNTE4LDkgQEAKIAkJemFwX2xvY2tzKCk7CiAKIAkvKiBUaGlzIHN0b3BzIHRoZSBob2xkZXIgb2YgY29uc29sZV9zZW0ganVzdCB3aGVyZSB3ZSB3YW50IGhpbSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NrZGVwX29mZigpOworCXNwaW5fbG9jaygmbG9nYnVmX2xvY2spOwogCXByaW50a19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBFbWl0IHRoZSBvdXRwdXQgaW50byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwpAQCAtNTg5LDcgKzU5MCw3IEBACiAJCSAqLwogCQljb25zb2xlX2xvY2tlZCA9IDE7CiAJCXByaW50a19jcHUgPSBVSU5UX01BWDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmxvZ2J1Zl9sb2NrKTsKIAogCQkvKgogCQkgKiBDb25zb2xlIGRyaXZlcnMgbWF5IGFzc3VtZSB0aGF0IHBlci1jcHUgcmVzb3VyY2VzIGhhdmUKQEAgLTYwNSw2ICs2MDYsOCBAQAogCQkJY29uc29sZV9sb2NrZWQgPSAwOwogCQkJdXAoJmNvbnNvbGVfc2VtKTsKIAkJfQorCQlsb2NrZGVwX29uKCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBTb21lb25lIGVsc2Ugb3ducyB0aGUgZHJpdmVycy4gIFdlIGRyb3AgdGhlIHNwaW5sb2NrLCB3aGljaApAQCAtNjEyLDcgKzYxNSw5IEBACiAJCSAqIGNvbnNvbGUgZHJpdmVycyB3aXRoIHRoZSBvdXRwdXQgd2hpY2ggd2UganVzdCBwcm9kdWNlZC4KIAkJICovCiAJCXByaW50a19jcHUgPSBVSU5UX01BWDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmxvZ2J1Zl9sb2NrKTsKKwkJbG9ja2RlcF9vbigpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogCiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTgxMCw4ICs4MTUsMTUgQEAKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDA7CiAJdXAoJmNvbnNvbGVfc2VtKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCWlmICh3YWtlX2tsb2dkICYmICFvb3BzX2luX3Byb2dyZXNzICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmxvZ193YWl0KSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsb2dfd2FpdCk7CisJaWYgKHdha2Vfa2xvZ2QgJiYgIW9vcHNfaW5fcHJvZ3Jlc3MgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmbG9nX3dhaXQpKSB7CisJCS8qCisJCSAqIElmIHdlIHByaW50ayBmcm9tIHdpdGhpbiB0aGUgbG9jayBkZXBlbmRlbmN5IGNvZGUsCisJCSAqIGZyb20gd2l0aGluIHRoZSBzY2hlZHVsZXIgY29kZSwgdGhlbiBkbyBub3QgbG9jaworCQkgKiB1cCBkdWUgdG8gc2VsZi1yZWN1cnNpb246CisJCSAqLworCQlpZiAoIWxvY2tkZXBfaW50ZXJuYWwoKSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9nX3dhaXQpOworCX0KIH0KIEVYUE9SVF9TWU1CT0wocmVsZWFzZV9jb25zb2xlX3NlbSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcm9maWxlLmMgYi9rZXJuZWwvcHJvZmlsZS5jCmluZGV4IDVhNzMwZmQuLmQ1YmQ3NWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcm9maWxlLmMKKysrIGIva2VybmVsL3Byb2ZpbGUuYwpAQCAtMTMsNyArMTMsNiBAQAogICoJdG8gcmVzb2x2ZSB0aW1lciBpbnRlcnJ1cHQgbGl2ZWxvY2tzLCBXaWxsaWFtIElyd2luLCBPcmFjbGUsIDIwMDQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzMzVjNWI5My4uOWExMTFmNyAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjgsNyArMjgsNyBAQAogICoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHRhc2tsaXN0IGxvY2sgd3JpdGUtaGVsZC4KICAqLwotdm9pZCBfX3B0cmFjZV9saW5rKHRhc2tfdCAqY2hpbGQsIHRhc2tfdCAqbmV3X3BhcmVudCkKK3ZvaWQgX19wdHJhY2VfbGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld19wYXJlbnQpCiB7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZjaGlsZC0+cHRyYWNlX2xpc3QpKTsKIAlpZiAoY2hpbGQtPnBhcmVudCA9PSBuZXdfcGFyZW50KQpAQCAtNDYsNyArNDYsNyBAQAogICogVEFTS19UUkFDRUQsIHJlc3VtZSBpdCBub3cuCiAgKiBSZXF1aXJlcyB0aGF0IGlycXMgYmUgZGlzYWJsZWQuCiAgKi8KLXZvaWQgcHRyYWNlX3VudHJhY2UodGFza190ICpjaGlsZCkKK3ZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAlzcGluX2xvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAoY2hpbGQtPnN0YXRlID09IFRBU0tfVFJBQ0VEKSB7CkBAIC02NSw3ICs2NSw3IEBACiAgKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgdGFza2xpc3QgbG9jayB3cml0ZS1oZWxkLgogICovCi12b2lkIF9fcHRyYWNlX3VubGluayh0YXNrX3QgKmNoaWxkKQordm9pZCBfX3B0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAlCVUdfT04oIWNoaWxkLT5wdHJhY2UpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IGY0NjRmNWEuLjc1OTgwNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC01MywxMyArNTMsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7CiAJLmN1ciA9IC0zMDAsCiAJLmNvbXBsZXRlZCA9IC0zMDAsCi0JLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmcmN1X2N0cmxibGsubG9jayksCiAJLmNwdW1hc2sgPSBDUFVfTUFTS19OT05FLAogfTsKIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2JoX2N0cmxibGsgPSB7CiAJLmN1ciA9IC0zMDAsCiAJLmNvbXBsZXRlZCA9IC0zMDAsCi0JLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmcmN1X2JoX2N0cmxibGsubG9jayksCiAJLmNwdW1hc2sgPSBDUFVfTUFTS19OT05FLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCAyNDA0ZjliMGIuLjEyOWNmMDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC03LDcgKzcsNiBAQAogICogQXJiaXRyYXJ5IHJlc291cmNlIG1hbmFnZW1lbnQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTIzLDIwICsyMiwxOCBAQAogCiBzdHJ1Y3QgcmVzb3VyY2UgaW9wb3J0X3Jlc291cmNlID0gewogCS5uYW1lCT0gIlBDSSBJTyIsCi0JLnN0YXJ0CT0gMHgwMDAwLAorCS5zdGFydAk9IDAsCiAJLmVuZAk9IElPX1NQQUNFX0xJTUlULAogCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiB9OwotCiBFWFBPUlRfU1lNQk9MKGlvcG9ydF9yZXNvdXJjZSk7CiAKIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZSA9IHsKIAkubmFtZQk9ICJQQ0kgbWVtIiwKLQkuc3RhcnQJPSAwVUwsCi0JLmVuZAk9IH4wVUwsCisJLnN0YXJ0CT0gMCwKKwkuZW5kCT0gLTEsCiAJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwotCiBFWFBPUlRfU1lNQk9MKGlvbWVtX3Jlc291cmNlKTsKIAogc3RhdGljIERFRklORV9SV0xPQ0socmVzb3VyY2VfbG9jayk7CkBAIC04MywxMCArODAsMTAgQEAKIAlmb3IgKGRlcHRoID0gMCwgcCA9IHI7IGRlcHRoIDwgTUFYX0lPUkVTX0xFVkVMOyBkZXB0aCsrLCBwID0gcC0+cGFyZW50KQogCQlpZiAocC0+cGFyZW50ID09IHJvb3QpCiAJCQlicmVhazsKLQlzZXFfcHJpbnRmKG0sICIlKnMlMCpseC0lMCpseCA6ICVzXG4iLAorCXNlcV9wcmludGYobSwgIiUqcyUwKmxseC0lMCpsbHggOiAlc1xuIiwKIAkJCWRlcHRoICogMiwgIiIsCi0JCQl3aWR0aCwgci0+c3RhcnQsCi0JCQl3aWR0aCwgci0+ZW5kLAorCQkJd2lkdGgsICh1bnNpZ25lZCBsb25nIGxvbmcpIHItPnN0YXJ0LAorCQkJd2lkdGgsICh1bnNpZ25lZCBsb25nIGxvbmcpIHItPmVuZCwKIAkJCXItPm5hbWUgPyByLT5uYW1lIDogIjxCQUQ+Iik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTEsOCArMTQ4LDggQEAKIC8qIFJldHVybiB0aGUgY29uZmxpY3QgZW50cnkgaWYgeW91IGNhbid0IHJlcXVlc3QgaXQgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX3JlcXVlc3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldykKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbmV3LT5zdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IG5ldy0+ZW5kOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IG5ldy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IGVuZCA9IG5ldy0+ZW5kOwogCXN0cnVjdCByZXNvdXJjZSAqdG1wLCAqKnA7CiAKIAlpZiAoZW5kIDwgc3RhcnQpCkBAIC0yNzQsMTEgKzI3MSwxMCBAQAogICogRmluZCBlbXB0eSBzbG90IGluIHRoZSByZXNvdXJjZSB0cmVlIGdpdmVuIHJhbmdlIGFuZCBhbGlnbm1lbnQuCiAgKi8KIHN0YXRpYyBpbnQgZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAotCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSB1bnNpZ25lZCBsb25nIG1pbiwgdW5zaWduZWQgbG9uZyBtYXgsCi0JCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IG1pbiwKKwkJCSByZXNvdXJjZV9zaXplX3QgbWF4LCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCiAJCQkgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyksCisJCQkJCXJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKIAkJCSB2b2lkICphbGlnbmZfZGF0YSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnRoaXMgPSByb290LT5jaGlsZDsKQEAgLTMyMCwxMSArMzE2LDEwIEBACiAgKiBBbGxvY2F0ZSBlbXB0eSBzbG90IGluIHRoZSByZXNvdXJjZSB0cmVlIGdpdmVuIHJhbmdlIGFuZCBhbGlnbm1lbnQuCiAgKi8KIGludCBhbGxvY2F0ZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAotCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCisJCSAgICAgIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKIAkJICAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAogCQkgICAgICB2b2lkICphbGlnbmZfZGF0YSkKIHsKIAlpbnQgZXJyOwpAQCAtNDE2LDEwICs0MTEsMTAgQEAKICAqIGFyZ3VtZW50cy4gIFJldHVybnMgLUVCVVNZIGlmIGl0IGNhbid0IGZpdC4gIEV4aXN0aW5nIGNoaWxkcmVuIG9mCiAgKiB0aGUgcmVzb3VyY2UgYXJlIGFzc3VtZWQgdG8gYmUgaW1tdXRhYmxlLgogICovCi1pbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCitpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBzaXplKQogewogCXN0cnVjdCByZXNvdXJjZSAqdG1wLCAqcGFyZW50ID0gcmVzLT5wYXJlbnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIHNpemUgLSAxOworCXJlc291cmNlX3NpemVfdCBlbmQgPSBzdGFydCArIHNpemUgLSAxOwogCWludCByZXN1bHQgPSAtRUJVU1k7CiAKIAl3cml0ZV9sb2NrKCZyZXNvdXJjZV9sb2NrKTsKQEAgLTQ2Niw3ICs0NjEsOSBAQAogICoKICAqIFJlbGVhc2UtcmVnaW9uIHJlbGVhc2VzIGEgbWF0Y2hpbmcgYnVzeSByZWdpb24uCiAgKi8KLXN0cnVjdCByZXNvdXJjZSAqIF9fcmVxdWVzdF9yZWdpb24oc3RydWN0IHJlc291cmNlICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbiwgY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCByZXNvdXJjZSAqIF9fcmVxdWVzdF9yZWdpb24oc3RydWN0IHJlc291cmNlICpwYXJlbnQsCisJCQkJICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgbiwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0ga3phbGxvYyhzaXplb2YoKnJlcyksIEdGUF9LRVJORUwpOwogCkBAIC01MDIsNyArNDk5LDggQEAKIAogRVhQT1JUX1NZTUJPTChfX3JlcXVlc3RfcmVnaW9uKTsKIAotaW50IF9fY2hlY2tfcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4pCitpbnQgX19jaGVja19yZWdpb24oc3RydWN0IHJlc291cmNlICpwYXJlbnQsIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCXJlc291cmNlX3NpemVfdCBuKQogewogCXN0cnVjdCByZXNvdXJjZSAqIHJlczsKIApAQCAtNTE3LDEwICs1MTUsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChfX2NoZWNrX3JlZ2lvbik7CiAKLXZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBuKQordm9pZCBfX3JlbGVhc2VfcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplX3QgbikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKipwOwotCXVuc2lnbmVkIGxvbmcgZW5kOworCXJlc291cmNlX3NpemVfdCBlbmQ7CiAKIAlwID0gJnBhcmVudC0+Y2hpbGQ7CiAJZW5kID0gc3RhcnQgKyBuIC0gMTsKQEAgLTU0OSw3ICs1NDgsOSBAQAogCiAJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIlRyeWluZyB0byBmcmVlIG5vbmV4aXN0ZW50IHJlc291cmNlIDwlMDhseC0lMDhseD5cbiIsIHN0YXJ0LCBlbmQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIlRyeWluZyB0byBmcmVlIG5vbmV4aXN0ZW50IHJlc291cmNlICIKKwkJIjwlMDE2bGx4LSUwMTZsbHg+XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKWVuZCk7CiB9CiAKIEVYUE9SVF9TWU1CT0woX19yZWxlYXNlX3JlZ2lvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC1kZWJ1Zy5jIGIva2VybmVsL3J0bXV0ZXgtZGVidWcuYwppbmRleCA0YWE4YTJjOS4uMGMxZmFhOSAxMDA2NDQKLS0tIGEva2VybmVsL3J0bXV0ZXgtZGVidWcuYworKysgYi9rZXJuZWwvcnRtdXRleC1kZWJ1Zy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAKICNpbmNsdWRlICJydG11dGV4X2NvbW1vbi5oIgogCkBAIC00NSw4ICs0Niw2IEBACiAJCWNvbnNvbGVfdmVyYm9zZSgpOwkJCQlcCiAJCWlmIChzcGluX2lzX2xvY2tlZCgmY3VycmVudC0+cGlfbG9jaykpCQlcCiAJCQlzcGluX3VubG9jaygmY3VycmVudC0+cGlfbG9jayk7CQlcCi0JCWlmIChzcGluX2lzX2xvY2tlZCgmY3VycmVudC0+aGVsZF9saXN0X2xvY2spKQlcCi0JCQlzcGluX3VubG9jaygmY3VycmVudC0+aGVsZF9saXN0X2xvY2spOwlcCiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC05Nyw3ICs5Niw3IEBACiAJcnRfdHJhY2Vfb24gPSAwOwogfQogCi1zdGF0aWMgdm9pZCBwcmludGtfdGFzayh0YXNrX3QgKnApCitzdGF0aWMgdm9pZCBwcmludGtfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaWYgKHApCiAJCXByaW50aygiJTE2czolNWQgWyVwLCAlM2RdIiwgcC0+Y29tbSwgcC0+cGlkLCBwLCBwLT5wcmlvKTsKQEAgLTEwNSwxNCArMTA0LDYgQEAKIAkJcHJpbnRrKCI8bm9uZT4iKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRrX3Rhc2tfc2hvcnQodGFza190ICpwKQotewotCWlmIChwKQotCQlwcmludGsoIiVzLyVkIFslcCwgJTNkXSIsIHAtPmNvbW0sIHAtPnBpZCwgcCwgcC0+cHJpbyk7Ci0JZWxzZQotCQlwcmludGsoIjxub25lPiIpOwotfQotCiBzdGF0aWMgdm9pZCBwcmludGtfbG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIGludCBwcmludF9vd25lcikKIHsKIAlpZiAobG9jay0+bmFtZSkKQEAgLTEyOCwyMjIgKzExOSw2IEBACiAJCXByaW50a190YXNrKHJ0X211dGV4X293bmVyKGxvY2spKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KLQlpZiAocnRfbXV0ZXhfb3duZXIobG9jaykpIHsKLQkJcHJpbnRrKCIuLi4gYWNxdWlyZWQgYXQ6ICAgICAgICAgICAgICAgIik7Ci0JCXByaW50X3N5bWJvbCgiJXNcbiIsIGxvY2stPmFjcXVpcmVfaXApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJpbnRrX3dhaXRlcihzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICp3KQotewotCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JcHJpbnRrKCJ8IHdhaXRlciBzdHJ1Y3QgJXA6XG4iLCB3KTsKLQlwcmludGsoInwgdy0+bGlzdF9lbnRyeTogW0RQOiVwLyVwfFNQOiVwLyVwfFBSSTolZF1cbiIsCi0JICAgICAgIHctPmxpc3RfZW50cnkucGxpc3QucHJpb19saXN0LnByZXYsIHctPmxpc3RfZW50cnkucGxpc3QucHJpb19saXN0Lm5leHQsCi0JICAgICAgIHctPmxpc3RfZW50cnkucGxpc3Qubm9kZV9saXN0LnByZXYsIHctPmxpc3RfZW50cnkucGxpc3Qubm9kZV9saXN0Lm5leHQsCi0JICAgICAgIHctPmxpc3RfZW50cnkucHJpbyk7Ci0JcHJpbnRrKCJ8IHctPnBpX2xpc3RfZW50cnk6IFtEUDolcC8lcHxTUDolcC8lcHxQUkk6JWRdXG4iLAotCSAgICAgICB3LT5waV9saXN0X2VudHJ5LnBsaXN0LnByaW9fbGlzdC5wcmV2LCB3LT5waV9saXN0X2VudHJ5LnBsaXN0LnByaW9fbGlzdC5uZXh0LAotCSAgICAgICB3LT5waV9saXN0X2VudHJ5LnBsaXN0Lm5vZGVfbGlzdC5wcmV2LCB3LT5waV9saXN0X2VudHJ5LnBsaXN0Lm5vZGVfbGlzdC5uZXh0LAotCSAgICAgICB3LT5waV9saXN0X2VudHJ5LnByaW8pOwotCXByaW50aygiXG58IGxvY2s6XG4iKTsKLQlwcmludGtfbG9jayh3LT5sb2NrLCAxKTsKLQlwcmludGsoInwgdy0+dGktPnRhc2s6XG4iKTsKLQlwcmludGtfdGFzayh3LT50YXNrKTsKLQlwcmludGsoInwgYmxvY2tlZCBhdDogICIpOwotCXByaW50X3N5bWJvbCgiJXNcbiIsIHctPmlwKTsKLQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotfQotCi1zdGF0aWMgdm9pZCBzaG93X3Rhc2tfbG9ja3ModGFza190ICpwKQotewotCXN3aXRjaCAocC0+c3RhdGUpIHsKLQljYXNlIFRBU0tfUlVOTklORzoJCXByaW50aygiUiIpOyBicmVhazsKLQljYXNlIFRBU0tfSU5URVJSVVBUSUJMRToJcHJpbnRrKCJTIik7IGJyZWFrOwotCWNhc2UgVEFTS19VTklOVEVSUlVQVElCTEU6CXByaW50aygiRCIpOyBicmVhazsKLQljYXNlIFRBU0tfU1RPUFBFRDoJCXByaW50aygiVCIpOyBicmVhazsKLQljYXNlIEVYSVRfWk9NQklFOgkJcHJpbnRrKCJaIik7IGJyZWFrOwotCWNhc2UgRVhJVF9ERUFEOgkJCXByaW50aygiWCIpOyBicmVhazsKLQlkZWZhdWx0OgkJCXByaW50aygiPyIpOyBicmVhazsKLQl9Ci0JcHJpbnRrX3Rhc2socCk7Ci0JaWYgKHAtPnBpX2Jsb2NrZWRfb24pIHsKLQkJc3RydWN0IHJ0X211dGV4ICpsb2NrID0gcC0+cGlfYmxvY2tlZF9vbi0+bG9jazsKLQotCQlwcmludGsoIiBibG9ja2VkIG9uOiIpOwotCQlwcmludGtfbG9jayhsb2NrLCAxKTsKLQl9IGVsc2UKLQkJcHJpbnRrKCIgKG5vdCBibG9ja2VkKVxuIik7Ci19Ci0KLXZvaWQgcnRfbXV0ZXhfc2hvd19oZWxkX2xvY2tzKHRhc2tfdCAqdGFzaywgaW50IHZlcmJvc2UpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VyciwgKmN1cnNvciA9IE5VTEw7Ci0Jc3RydWN0IHJ0X211dGV4ICpsb2NrOwotCXRhc2tfdCAqdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjb3VudCA9IDA7Ci0KLQlpZiAoIXJ0X3RyYWNlX29uKQotCQlyZXR1cm47Ci0KLQlpZiAodmVyYm9zZSkgewotCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JCXByaW50aygifCBzaG93aW5nIGFsbCBsb2NrcyBoZWxkIGJ5OiB8ICAoIik7Ci0JCXByaW50a190YXNrX3Nob3J0KHRhc2spOwotCQlwcmludGsoIik6XG4iKTsKLQkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCX0KLQotbmV4dDoKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+aGVsZF9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoKGN1cnIsICZ0YXNrLT5oZWxkX2xpc3RfaGVhZCkgewotCQlpZiAoY3Vyc29yICYmIGN1cnIgIT0gY3Vyc29yKQotCQkJY29udGludWU7Ci0JCWxvY2sgPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBydF9tdXRleCwgaGVsZF9saXN0X2VudHJ5KTsKLQkJdCA9IHJ0X211dGV4X293bmVyKGxvY2spOwotCQlXQVJOX09OKHQgIT0gdGFzayk7Ci0JCWNvdW50Kys7Ci0JCWN1cnNvciA9IGN1cnItPm5leHQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPmhlbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQkJcHJpbnRrKCJcbiMlMDNkOiAgICAgICAgICAgICIsIGNvdW50KTsKLQkJcHJpbnRrX2xvY2sobG9jaywgMCk7Ci0JCWdvdG8gbmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+aGVsZF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCXByaW50aygiXG4iKTsKLX0KLQotdm9pZCBydF9tdXRleF9zaG93X2FsbF9sb2Nrcyh2b2lkKQotewotCXRhc2tfdCAqZywgKnA7Ci0JaW50IGNvdW50ID0gMTA7Ci0JaW50IHVubG9jayA9IDE7Ci0KLQlwcmludGsoIlxuIik7Ci0JcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlwcmludGsoInwgc2hvd2luZyBhbGwgdGFza3M6IHxcbiIpOwotCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQkvKgotCSAqIEhlcmUgd2UgdHJ5IHRvIGdldCB0aGUgdGFza2xpc3RfbG9jayBhcyBoYXJkIGFzIHBvc3NpYmxlLAotCSAqIGlmIG5vdCBzdWNjZXNzZnVsIGFmdGVyIDIgc2Vjb25kcyB3ZSBpZ25vcmUgaXQgKGJ1dCBrZWVwCi0JICogdHJ5aW5nKS4gVGhpcyBpcyB0byBlbmFibGUgYSBkZWJ1ZyBwcmludG91dCBldmVuIGlmIGEKLQkgKiB0YXNrbGlzdF9sb2NrLWhvbGRpbmcgdGFzayBkZWFkbG9ja3Mgb3IgY3Jhc2hlcy4KLQkgKi8KLXJldHJ5OgotCWlmICghcmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgewotCQlpZiAoY291bnQgPT0gMTApCi0JCQlwcmludGsoImhtLCB0YXNrbGlzdF9sb2NrIGxvY2tlZCwgcmV0cnlpbmcuLi4gIik7Ci0JCWlmIChjb3VudCkgewotCQkJY291bnQtLTsKLQkJCXByaW50aygiICMlZCIsIDEwLWNvdW50KTsKLQkJCW1kZWxheSgyMDApOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlwcmludGsoIiBpZ25vcmluZyBpdC5cbiIpOwotCQl1bmxvY2sgPSAwOwotCX0KLQlpZiAoY291bnQgIT0gMTApCi0JCXByaW50aygiIGxvY2tlZCBpdC5cbiIpOwotCi0JZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQlzaG93X3Rhc2tfbG9ja3MocCk7Ci0JCWlmICghdW5sb2NrKQotCQkJaWYgKHJlYWRfdHJ5bG9jaygmdGFza2xpc3RfbG9jaykpCi0JCQkJdW5sb2NrID0gMTsKLQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwotCi0JcHJpbnRrKCJcbiIpOwotCi0JcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JcHJpbnRrKCJ8IHNob3dpbmcgYWxsIGxvY2tzIGhlbGQgaW4gdGhlIHN5c3RlbTogfFxuIik7Ci0JcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCXJ0X211dGV4X3Nob3dfaGVsZF9sb2NrcyhwLCAwKTsKLQkJaWYgKCF1bmxvY2spCi0JCQlpZiAocmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkKLQkJCQl1bmxvY2sgPSAxOwotCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7Ci0KLQotCXByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOwotCi0JaWYgKHVubG9jaykKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotfQotCi12b2lkIHJ0X211dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQodGFza190ICp0YXNrKQotewotCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnc7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VycjsKLQlzdHJ1Y3QgcnRfbXV0ZXggKmxvY2s7Ci0KLQlpZiAoIXJ0X3RyYWNlX29uKQotCQlyZXR1cm47Ci0JaWYgKCFydF9wcmlvKHRhc2stPm5vcm1hbF9wcmlvKSAmJiBydF9wcmlvKHRhc2stPnByaW8pKSB7Ci0JCXByaW50aygiQlVHOiBQSSBwcmlvcml0eSBib29zdCBsZWFrZWQhXG4iKTsKLQkJcHJpbnRrX3Rhc2sodGFzayk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0JaWYgKGxpc3RfZW1wdHkoJnRhc2stPmhlbGRfbGlzdF9oZWFkKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZ0YXNrLT5waV9sb2NrKTsKLQlwbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmdGFzay0+cGlfd2FpdGVycywgcGlfbGlzdF9lbnRyeSkgewotCQlUUkFDRV9PRkYoKTsKLQotCQlwcmludGsoImhtLCBQSSBpbnRlcmVzdCBoZWxkIGF0IGV4aXQgdGltZT8gVGFzazpcbiIpOwotCQlwcmludGtfdGFzayh0YXNrKTsKLQkJcHJpbnRrX3dhaXRlcih3KTsKLQkJcmV0dXJuOwotCX0KLQlzcGluX3VubG9jaygmdGFzay0+cGlfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoKGN1cnIsICZ0YXNrLT5oZWxkX2xpc3RfaGVhZCkgewotCQlsb2NrID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgcnRfbXV0ZXgsIGhlbGRfbGlzdF9lbnRyeSk7Ci0KLQkJcHJpbnRrKCJCVUc6ICVzLyVkLCBsb2NrIGhlbGQgYXQgdGFzayBleGl0IHRpbWUhXG4iLAotCQkgICAgICAgdGFzay0+Y29tbSwgdGFzay0+cGlkKTsKLQkJcHJpbnRrX2xvY2sobG9jaywgMSk7Ci0JCWlmIChydF9tdXRleF9vd25lcihsb2NrKSAhPSB0YXNrKQotCQkJcHJpbnRrKCJleGl0aW5nIHRhc2sgaXMgbm90IGV2ZW4gdGhlIG93bmVyPz9cbiIpOwotCX0KLX0KLQotaW50IHJ0X211dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCWNvbnN0IHZvaWQgKnRvID0gZnJvbSArIGxlbjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpjdXJyOwotCXN0cnVjdCBydF9tdXRleCAqbG9jazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmxvY2tfYWRkcjsKLQotCWlmICghcnRfdHJhY2Vfb24pCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPmhlbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChjdXJyLCAmY3VycmVudC0+aGVsZF9saXN0X2hlYWQpIHsKLQkJbG9jayA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IHJ0X211dGV4LCBoZWxkX2xpc3RfZW50cnkpOwotCQlsb2NrX2FkZHIgPSBsb2NrOwotCQlpZiAobG9ja19hZGRyIDwgZnJvbSB8fCBsb2NrX2FkZHIgPj0gdG8pCi0JCQljb250aW51ZTsKLQkJVFJBQ0VfT0ZGKCk7Ci0KLQkJcHJpbnRrKCJCVUc6ICVzLyVkLCBhY3RpdmUgbG9jayBbJXAoJXAtJXApXSBmcmVlZCFcbiIsCi0JCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGxvY2ssIGZyb20sIHRvKTsKLQkJZHVtcF9zdGFjaygpOwotCQlwcmludGtfbG9jayhsb2NrLCAxKTsKLQkJaWYgKHJ0X211dGV4X293bmVyKGxvY2spICE9IGN1cnJlbnQpCi0JCQlwcmludGsoImZyZWVpbmcgdGFzayBpcyBub3QgZXZlbiB0aGUgb3duZXI/P1xuIik7Ci0JCXJldHVybiAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQgcnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKQEAgLTM5NSw4NSArMTcwLDQxIEBACiAJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CiAJcHJpbnRrX2xvY2sod2FpdGVyLT5sb2NrLCAxKTsKIAotCXByaW50aygiLi4uIHRyeWluZyBhdDogICAgICAgICAgICAgICAgICIpOwotCXByaW50X3N5bWJvbCgiJXNcbiIsIHdhaXRlci0+aXApOwotCiAJcHJpbnRrKCJcbjIpICVzLyVkIGlzIGJsb2NrZWQgb24gdGhpcyBsb2NrOlxuIiwgdGFzay0+Y29tbSwgdGFzay0+cGlkKTsKIAlwcmludGtfbG9jayh3YWl0ZXItPmRlYWRsb2NrX2xvY2ssIDEpOwogCi0JcnRfbXV0ZXhfc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQsIDEpOwotCXJ0X211dGV4X3Nob3dfaGVsZF9sb2Nrcyh0YXNrLCAxKTsKKwlkZWJ1Z19zaG93X2hlbGRfbG9ja3MoY3VycmVudCk7CisJZGVidWdfc2hvd19oZWxkX2xvY2tzKHRhc2spOwogCiAJcHJpbnRrKCJcbiVzLyVkJ3MgW2Jsb2NrZWRdIHN0YWNrZHVtcDpcblxuIiwgdGFzay0+Y29tbSwgdGFzay0+cGlkKTsKIAlzaG93X3N0YWNrKHRhc2ssIE5VTEwpOwogCXByaW50aygiXG4lcy8lZCdzIFtjdXJyZW50XSBzdGFja2R1bXA6XG5cbiIsCiAJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CiAJZHVtcF9zdGFjaygpOwotCXJ0X211dGV4X3Nob3dfYWxsX2xvY2tzKCk7CisJZGVidWdfc2hvd19hbGxfbG9ja3MoKTsKKwogCXByaW50aygiWyB0dXJuaW5nIG9mZiBkZWFkbG9jayBkZXRlY3Rpb24uIgogCSAgICAgICAiUGxlYXNlIHJlcG9ydCB0aGlzIHRyYWNlLiBdXG5cbiIpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiB9CiAKLXZvaWQgZGVidWdfcnRfbXV0ZXhfbG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2sgX19JUF9ERUNMX18pCit2b2lkIGRlYnVnX3J0X211dGV4X2xvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocnRfdHJhY2Vfb24pIHsKLQkJVFJBQ0VfV0FSTl9PTl9MT0NLRUQoIWxpc3RfZW1wdHkoJmxvY2stPmhlbGRfbGlzdF9lbnRyeSkpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZF90YWlsKCZsb2NrLT5oZWxkX2xpc3RfZW50cnksICZjdXJyZW50LT5oZWxkX2xpc3RfaGVhZCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPmhlbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQkJbG9jay0+YWNxdWlyZV9pcCA9IGlwOwotCX0KIH0KIAogdm9pZCBkZWJ1Z19ydF9tdXRleF91bmxvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocnRfdHJhY2Vfb24pIHsKLQkJVFJBQ0VfV0FSTl9PTl9MT0NLRUQocnRfbXV0ZXhfb3duZXIobG9jaykgIT0gY3VycmVudCk7Ci0JCVRSQUNFX1dBUk5fT05fTE9DS0VEKGxpc3RfZW1wdHkoJmxvY2stPmhlbGRfbGlzdF9lbnRyeSkpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2RlbF9pbml0KCZsb2NrLT5oZWxkX2xpc3RfZW50cnkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCX0KKwlUUkFDRV9XQVJOX09OX0xPQ0tFRChydF9tdXRleF9vd25lcihsb2NrKSAhPSBjdXJyZW50KTsKIH0KIAotdm9pZCBkZWJ1Z19ydF9tdXRleF9wcm94eV9sb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jaywKLQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBvd25lciBfX0lQX0RFQ0xfXykKK3ZvaWQKK2RlYnVnX3J0X211dGV4X3Byb3h5X2xvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBvd25lcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHJ0X3RyYWNlX29uKSB7Ci0JCVRSQUNFX1dBUk5fT05fTE9DS0VEKCFsaXN0X2VtcHR5KCZsb2NrLT5oZWxkX2xpc3RfZW50cnkpKTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG93bmVyLT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZF90YWlsKCZsb2NrLT5oZWxkX2xpc3RfZW50cnksICZwb3duZXItPmhlbGRfbGlzdF9oZWFkKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG93bmVyLT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JCWxvY2stPmFjcXVpcmVfaXAgPSBpcDsKLQl9CiB9CiAKIHZvaWQgZGVidWdfcnRfbXV0ZXhfcHJveHlfdW5sb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHJ0X3RyYWNlX29uKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIgPSBydF9tdXRleF9vd25lcihsb2NrKTsKLQotCQlUUkFDRV9XQVJOX09OX0xPQ0tFRCghb3duZXIpOwotCQlUUkFDRV9XQVJOX09OX0xPQ0tFRChsaXN0X2VtcHR5KCZsb2NrLT5oZWxkX2xpc3RfZW50cnkpKTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmb3duZXItPmhlbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZGVsX2luaXQoJmxvY2stPmhlbGRfbGlzdF9lbnRyeSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm93bmVyLT5oZWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCX0KKwlUUkFDRV9XQVJOX09OX0xPQ0tFRCghcnRfbXV0ZXhfb3duZXIobG9jaykpOwogfQogCiB2b2lkIGRlYnVnX3J0X211dGV4X2luaXRfd2FpdGVyKHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlcikKQEAgLTQ5MywxNyArMjI0LDE1IEBACiAKIHZvaWQgZGVidWdfcnRfbXV0ZXhfaW5pdChzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jdm9pZCAqYWRkciA9IGxvY2s7Ci0KLQlpZiAocnRfdHJhY2Vfb24pIHsKLQkJcnRfbXV0ZXhfZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoYWRkciwKLQkJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X211dGV4KSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZsb2NrLT5oZWxkX2xpc3RfZW50cnkpOwotCQlsb2NrLT5uYW1lID0gbmFtZTsKLQl9CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCByZWluaXRpYWxpemluZyBhIGhlbGQgbG9jazoKKwkgKi8KKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZCgodm9pZCAqKWxvY2ssIHNpemVvZigqbG9jaykpOworCWxvY2stPm5hbWUgPSBuYW1lOwogfQogCi12b2lkIHJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIHRhc2tfdCAqdGFzaykKK3ZvaWQKK3J0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3J0bXV0ZXgtZGVidWcuaCBiL2tlcm5lbC9ydG11dGV4LWRlYnVnLmgKaW5kZXggNzYxMmZiYy4uMTQxOTNkNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LWRlYnVnLmgKKysrIGIva2VybmVsL3J0bXV0ZXgtZGVidWcuaApAQCAtOSwyMCArOSwxNiBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hY3JvcyB1c2VkIHNvbGVseSBieSBydG11dGV4LmMuIERlYnVnIHZlcnNpb24uCiAgKi8KIAotI2RlZmluZSBfX0lQX0RFQ0xfXwkJLCB1bnNpZ25lZCBsb25nIGlwCi0jZGVmaW5lIF9fSVBfXwkJCSwgaXAKLSNkZWZpbmUgX19SRVRfSVBfXwkJLCAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkKLQogZXh0ZXJuIHZvaWQKIHJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gdm9pZCBydF9tdXRleF9kZWFkbG9ja19hY2NvdW50X3VubG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogZXh0ZXJuIHZvaWQgZGVidWdfcnRfbXV0ZXhfaW5pdF93YWl0ZXIoc3RydWN0IHJ0X211dGV4X3dhaXRlciAqd2FpdGVyKTsKIGV4dGVybiB2b2lkIGRlYnVnX3J0X211dGV4X2ZyZWVfd2FpdGVyKHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlcik7CiBleHRlcm4gdm9pZCBkZWJ1Z19ydF9tdXRleF9pbml0KHN0cnVjdCBydF9tdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBkZWJ1Z19ydF9tdXRleF9sb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jayBfX0lQX0RFQ0xfXyk7CitleHRlcm4gdm9pZCBkZWJ1Z19ydF9tdXRleF9sb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jayk7CiBleHRlcm4gdm9pZCBkZWJ1Z19ydF9tdXRleF91bmxvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrKTsKIGV4dGVybiB2b2lkIGRlYnVnX3J0X211dGV4X3Byb3h5X2xvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrLAotCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcG93bmVyIF9fSVBfREVDTF9fKTsKKwkJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBvd25lcik7CiBleHRlcm4gdm9pZCBkZWJ1Z19ydF9tdXRleF9wcm94eV91bmxvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrKTsKIGV4dGVybiB2b2lkIGRlYnVnX3J0X211dGV4X2RlYWRsb2NrKGludCBkZXRlY3QsIHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlciwKIAkJCQkgICAgc3RydWN0IHJ0X211dGV4ICpsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4LXRlc3Rlci5jIGIva2VybmVsL3J0bXV0ZXgtdGVzdGVyLmMKaW5kZXggZTgyYzJmOC4uNDk0ZGFjOCAxMDA2NDQKLS0tIGEva2VybmVsL3J0bXV0ZXgtdGVzdGVyLmMKKysrIGIva2VybmVsL3J0bXV0ZXgtdGVzdGVyLmMKQEAgLTMzLDcgKzMzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGVzdF90aHJlYWRfZGF0YSB0aHJlYWRfZGF0YVtNQVhfUlRfVEVTVF9USFJFQURTXTsKLXN0YXRpYyB0YXNrX3QgKnRocmVhZHNbTUFYX1JUX1RFU1RfVEhSRUFEU107CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWRzW01BWF9SVF9URVNUX1RIUkVBRFNdOwogc3RhdGljIHN0cnVjdCBydF9tdXRleCBtdXRleGVzW01BWF9SVF9URVNUX01VVEVYRVNdOwogCiBlbnVtIHRlc3Rfb3Bjb2RlcyB7CkBAIC0zNjEsOCArMzYxLDggQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2ZzX3Rlc3Rfc3RhdHVzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdGVzdF90aHJlYWRfZGF0YSAqdGQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJY2hhciAqY3VyciA9IGJ1ZjsKLQl0YXNrX3QgKnRzazsKIAlpbnQgaTsKIAogCXRkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHRlc3RfdGhyZWFkX2RhdGEsIHN5c2Rldik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC5jIGIva2VybmVsL3J0bXV0ZXguYwppbmRleCA0NWQ2MTAxLi5kMmVmMTNiIDEwMDY0NAotLS0gYS9rZXJuZWwvcnRtdXRleC5jCisrKyBiL2tlcm5lbC9ydG11dGV4LmMKQEAgLTE1NywxMiArMTU3LDExIEBACiAgKiBEZWNyZWFzZXMgdGFzaydzIHVzYWdlIGJ5IG9uZSAtIG1heSB0aHVzIGZyZWUgdGhlIHRhc2suCiAgKiBSZXR1cm5zIDAgb3IgLUVERUFETEsuCiAgKi8KLXN0YXRpYyBpbnQgcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4odGFza190ICp0YXNrLAorc3RhdGljIGludCBydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICAgICAgaW50IGRlYWRsb2NrX2RldGVjdCwKIAkJCQkgICAgICBzdHJ1Y3QgcnRfbXV0ZXggKm9yaWdfbG9jaywKIAkJCQkgICAgICBzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICpvcmlnX3dhaXRlciwKLQkJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvcF90YXNrCi0JCQkJICAgICAgX19JUF9ERUNMX18pCisJCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0b3BfdGFzaykKIHsKIAlzdHJ1Y3QgcnRfbXV0ZXggKmxvY2s7CiAJc3RydWN0IHJ0X211dGV4X3dhaXRlciAqd2FpdGVyLCAqdG9wX3dhaXRlciA9IG9yaWdfd2FpdGVyOwpAQCAtMjgzLDYgKzI4Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogIG91dF9wdXRfdGFzazoKIAlwdXRfdGFza19zdHJ1Y3QodGFzayk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNTcsNyArMzU3LDcgQEAKICAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2stPndhaXRfbG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50IHRyeV90b190YWtlX3J0X211dGV4KHN0cnVjdCBydF9tdXRleCAqbG9jayBfX0lQX0RFQ0xfXykKK3N0YXRpYyBpbnQgdHJ5X3RvX3Rha2VfcnRfbXV0ZXgoc3RydWN0IHJ0X211dGV4ICpsb2NrKQogewogCS8qCiAJICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmUgaWYgdGhlIGF0b21pYyBzcGVlZHVwcyBhcmUKQEAgLTM4NCw3ICszODQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIFdlIGdvdCB0aGUgbG9jay4gKi8KLQlkZWJ1Z19ydF9tdXRleF9sb2NrKGxvY2sgX19JUF9fKTsKKwlkZWJ1Z19ydF9tdXRleF9sb2NrKGxvY2spOwogCiAJcnRfbXV0ZXhfc2V0X293bmVyKGxvY2ssIGN1cnJlbnQsIDApOwogCkBAIC00MDIsMTMgKzQwMiwxMiBAQAogICovCiBzdGF0aWMgaW50IHRhc2tfYmxvY2tzX29uX3J0X211dGV4KHN0cnVjdCBydF9tdXRleCAqbG9jaywKIAkJCQkgICBzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICp3YWl0ZXIsCi0JCQkJICAgaW50IGRldGVjdF9kZWFkbG9jawotCQkJCSAgIF9fSVBfREVDTF9fKQorCQkJCSAgIGludCBkZXRlY3RfZGVhZGxvY2spCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpvd25lciA9IHJ0X211dGV4X293bmVyKGxvY2spOwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnRvcF93YWl0ZXIgPSB3YWl0ZXI7Ci0JdGFza190ICpvd25lciA9IHJ0X211dGV4X293bmVyKGxvY2spOwotCWludCBib29zdCA9IDAsIHJlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBib29zdCA9IDAsIHJlczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5waV9sb2NrLCBmbGFncyk7CiAJX19ydF9tdXRleF9hZGp1c3RfcHJpbyhjdXJyZW50KTsKQEAgLTQ1NCw3ICs0NTMsNyBAQAogCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCiAJcmVzID0gcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4ob3duZXIsIGRldGVjdF9kZWFkbG9jaywgbG9jaywgd2FpdGVyLAotCQkJCQkgY3VycmVudCBfX0lQX18pOworCQkJCQkgY3VycmVudCk7CiAKIAlzcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CiAKQEAgLTUyNiwxMiArNTI1LDEyIEBACiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2stPndhaXRfbG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkIHJlbW92ZV93YWl0ZXIoc3RydWN0IHJ0X211dGV4ICpsb2NrLAotCQkJICBzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICp3YWl0ZXIgIF9fSVBfREVDTF9fKQorCQkJICBzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICp3YWl0ZXIpCiB7CiAJaW50IGZpcnN0ID0gKHdhaXRlciA9PSBydF9tdXRleF90b3Bfd2FpdGVyKGxvY2spKTsKLQlpbnQgYm9vc3QgPSAwOwotCXRhc2tfdCAqb3duZXIgPSBydF9tdXRleF9vd25lcihsb2NrKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyID0gcnRfbXV0ZXhfb3duZXIobG9jayk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYm9vc3QgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnBpX2xvY2ssIGZsYWdzKTsKIAlwbGlzdF9kZWwoJndhaXRlci0+bGlzdF9lbnRyeSwgJmxvY2stPndhaXRfbGlzdCk7CkBAIC01NjgsNyArNTY3LDcgQEAKIAogCXNwaW5fdW5sb2NrKCZsb2NrLT53YWl0X2xvY2spOwogCi0JcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4ob3duZXIsIDAsIGxvY2ssIE5VTEwsIGN1cnJlbnQgX19JUF9fKTsKKwlydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbihvd25lciwgMCwgbG9jaywgTlVMTCwgY3VycmVudCk7CiAKIAlzcGluX2xvY2soJmxvY2stPndhaXRfbG9jayk7CiB9CkBAIC01OTUsNyArNTk0LDcgQEAKIAlnZXRfdGFza19zdHJ1Y3QodGFzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCi0JcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4odGFzaywgMCwgTlVMTCwgTlVMTCwgdGFzayBfX1JFVF9JUF9fKTsKKwlydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbih0YXNrLCAwLCBOVUxMLCBOVUxMLCB0YXNrKTsKIH0KIAogLyoKQEAgLTYwNCw3ICs2MDMsNyBAQAogc3RhdGljIGludCBfX3NjaGVkCiBydF9tdXRleF9zbG93bG9jayhzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssIGludCBzdGF0ZSwKIAkJICBzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICp0aW1lb3V0LAotCQkgIGludCBkZXRlY3RfZGVhZGxvY2sgX19JUF9ERUNMX18pCisJCSAgaW50IGRldGVjdF9kZWFkbG9jaykKIHsKIAlzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyIHdhaXRlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTYxNSw3ICs2MTQsNyBAQAogCXNwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCS8qIFRyeSB0byBhY3F1aXJlIHRoZSBsb2NrIGFnYWluOiAqLwotCWlmICh0cnlfdG9fdGFrZV9ydF9tdXRleChsb2NrIF9fSVBfXykpIHsKKwlpZiAodHJ5X3RvX3Rha2VfcnRfbXV0ZXgobG9jaykpIHsKIAkJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CiAJCXJldHVybiAwOwogCX0KQEAgLTYyOSw3ICs2MjgsNyBAQAogCiAJZm9yICg7OykgewogCQkvKiBUcnkgdG8gYWNxdWlyZSB0aGUgbG9jazogKi8KLQkJaWYgKHRyeV90b190YWtlX3J0X211dGV4KGxvY2sgX19JUF9fKSkKKwkJaWYgKHRyeV90b190YWtlX3J0X211dGV4KGxvY2spKQogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTY1Myw3ICs2NTIsNyBAQAogCQkgKi8KIAkJaWYgKCF3YWl0ZXIudGFzaykgewogCQkJcmV0ID0gdGFza19ibG9ja3Nfb25fcnRfbXV0ZXgobG9jaywgJndhaXRlciwKLQkJCQkJCSAgICAgIGRldGVjdF9kZWFkbG9jayBfX0lQX18pOworCQkJCQkJICAgICAgZGV0ZWN0X2RlYWRsb2NrKTsKIAkJCS8qCiAJCQkgKiBJZiB3ZSBnb3Qgd29rZW4gdXAgYnkgdGhlIG93bmVyIHRoZW4gc3RhcnQgbG9vcAogCQkJICogYWxsIG92ZXIgd2l0aG91dCBnb2luZyBpbnRvIHNjaGVkdWxlIHRvIHRyeQpAQCAtNjgwLDcgKzY3OSw3IEBACiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAogCWlmICh1bmxpa2VseSh3YWl0ZXIudGFzaykpCi0JCXJlbW92ZV93YWl0ZXIobG9jaywgJndhaXRlciBfX0lQX18pOworCQlyZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIpOwogCiAJLyoKIAkgKiB0cnlfdG9fdGFrZV9ydF9tdXRleCgpIHNldHMgdGhlIHdhaXRlciBiaXQKQEAgLTcxMSw3ICs3MTAsNyBAQAogICogU2xvdyBwYXRoIHRyeS1sb2NrIGZ1bmN0aW9uOgogICovCiBzdGF0aWMgaW5saW5lIGludAotcnRfbXV0ZXhfc2xvd3RyeWxvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrIF9fSVBfREVDTF9fKQorcnRfbXV0ZXhfc2xvd3RyeWxvY2soc3RydWN0IHJ0X211dGV4ICpsb2NrKQogewogCWludCByZXQgPSAwOwogCkBAIC03MTksNyArNzE4LDcgQEAKIAogCWlmIChsaWtlbHkocnRfbXV0ZXhfb3duZXIobG9jaykgIT0gY3VycmVudCkpIHsKIAotCQlyZXQgPSB0cnlfdG9fdGFrZV9ydF9tdXRleChsb2NrIF9fSVBfXyk7CisJCXJldCA9IHRyeV90b190YWtlX3J0X211dGV4KGxvY2spOwogCQkvKgogCQkgKiB0cnlfdG9fdGFrZV9ydF9tdXRleCgpIHNldHMgdGhlIGxvY2sgd2FpdGVycwogCQkgKiBiaXQgdW5jb25kaXRpb25hbGx5LiBDbGVhbiB0aGlzIHVwLgpAQCAtNzY5LDEzICs3NjgsMTMgQEAKIAkJICBpbnQgZGV0ZWN0X2RlYWRsb2NrLAogCQkgIGludCAoKnNsb3dmbikoc3RydWN0IHJ0X211dGV4ICpsb2NrLCBpbnQgc3RhdGUsCiAJCQkJc3RydWN0IGhydGltZXJfc2xlZXBlciAqdGltZW91dCwKLQkJCQlpbnQgZGV0ZWN0X2RlYWRsb2NrIF9fSVBfREVDTF9fKSkKKwkJCQlpbnQgZGV0ZWN0X2RlYWRsb2NrKSkKIHsKIAlpZiAoIWRldGVjdF9kZWFkbG9jayAmJiBsaWtlbHkocnRfbXV0ZXhfY21weGNoZyhsb2NrLCBOVUxMLCBjdXJyZW50KSkpIHsKIAkJcnRfbXV0ZXhfZGVhZGxvY2tfYWNjb3VudF9sb2NrKGxvY2ssIGN1cnJlbnQpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UKLQkJcmV0dXJuIHNsb3dmbihsb2NrLCBzdGF0ZSwgTlVMTCwgZGV0ZWN0X2RlYWRsb2NrIF9fUkVUX0lQX18pOworCQlyZXR1cm4gc2xvd2ZuKGxvY2ssIHN0YXRlLCBOVUxMLCBkZXRlY3RfZGVhZGxvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtNzgzLDI0ICs3ODIsMjQgQEAKIAkJCXN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnRpbWVvdXQsIGludCBkZXRlY3RfZGVhZGxvY2ssCiAJCQlpbnQgKCpzbG93Zm4pKHN0cnVjdCBydF9tdXRleCAqbG9jaywgaW50IHN0YXRlLAogCQkJCSAgICAgIHN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnRpbWVvdXQsCi0JCQkJICAgICAgaW50IGRldGVjdF9kZWFkbG9jayBfX0lQX0RFQ0xfXykpCisJCQkJICAgICAgaW50IGRldGVjdF9kZWFkbG9jaykpCiB7CiAJaWYgKCFkZXRlY3RfZGVhZGxvY2sgJiYgbGlrZWx5KHJ0X211dGV4X2NtcHhjaGcobG9jaywgTlVMTCwgY3VycmVudCkpKSB7CiAJCXJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhsb2NrLCBjdXJyZW50KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCi0JCXJldHVybiBzbG93Zm4obG9jaywgc3RhdGUsIHRpbWVvdXQsIGRldGVjdF9kZWFkbG9jayBfX1JFVF9JUF9fKTsKKwkJcmV0dXJuIHNsb3dmbihsb2NrLCBzdGF0ZSwgdGltZW91dCwgZGV0ZWN0X2RlYWRsb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIHJ0X211dGV4X2Zhc3R0cnlsb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jaywKLQkJICAgICBpbnQgKCpzbG93Zm4pKHN0cnVjdCBydF9tdXRleCAqbG9jayBfX0lQX0RFQ0xfXykpCisJCSAgICAgaW50ICgqc2xvd2ZuKShzdHJ1Y3QgcnRfbXV0ZXggKmxvY2spKQogewogCWlmIChsaWtlbHkocnRfbXV0ZXhfY21weGNoZyhsb2NrLCBOVUxMLCBjdXJyZW50KSkpIHsKIAkJcnRfbXV0ZXhfZGVhZGxvY2tfYWNjb3VudF9sb2NrKGxvY2ssIGN1cnJlbnQpOwogCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIHNsb3dmbihsb2NrIF9fUkVUX0lQX18pOworCXJldHVybiBzbG93Zm4obG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtOTQ4LDcgKzk0Nyw3IEBACiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwcm94eV9vd25lcikKIHsKIAlfX3J0X211dGV4X2luaXQobG9jaywgTlVMTCk7Ci0JZGVidWdfcnRfbXV0ZXhfcHJveHlfbG9jayhsb2NrLCBwcm94eV9vd25lciBfX1JFVF9JUF9fKTsKKwlkZWJ1Z19ydF9tdXRleF9wcm94eV9sb2NrKGxvY2ssIHByb3h5X293bmVyKTsKIAlydF9tdXRleF9zZXRfb3duZXIobG9jaywgcHJveHlfb3duZXIsIDApOwogCXJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhsb2NrLCBwcm94eV9vd25lcik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC5oIGIva2VybmVsL3J0bXV0ZXguaAppbmRleCAxZTBmY2ExLi5hMWExZGQwIDEwMDY0NAotLS0gYS9rZXJuZWwvcnRtdXRleC5oCisrKyBiL2tlcm5lbC9ydG11dGV4LmgKQEAgLTEwLDkgKzEwLDYgQEAKICAqIE5vbi1kZWJ1ZyB2ZXJzaW9uLgogICovCiAKLSNkZWZpbmUgX19JUF9ERUNMX18KLSNkZWZpbmUgX19JUF9fCi0jZGVmaW5lIF9fUkVUX0lQX18KICNkZWZpbmUgcnRfbXV0ZXhfZGVhZGxvY2tfY2hlY2sobCkJCQkoMCkKICNkZWZpbmUgcnRfbXV0ZXhfZGVhZGxvY2tfYWNjb3VudF9sb2NrKG0sIHQpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfdW5sb2NrKGwpCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9rZXJuZWwvcndzZW0uYyBiL2tlcm5lbC9yd3NlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MWRlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcndzZW0uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoga2VybmVsL3J3c2VtLmM6IFIvVyBzZW1hcGhvcmVzLCBwdWJsaWMgaW1wbGVtZW50YXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pLgorICogRGVyaXZlZCBmcm9tIGFzbS1pMzg2L3NlbWFwaG9yZS5oCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBsb2NrIGZvciByZWFkaW5nCisgKi8KK3ZvaWQgZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwltaWdodF9zbGVlcCgpOworCXJ3c2VtX2FjcXVpcmVfcmVhZCgmc2VtLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisKKwlfX2Rvd25fcmVhZChzZW0pOworfQorCitFWFBPUlRfU1lNQk9MKGRvd25fcmVhZCk7CisKKy8qCisgKiB0cnlsb2NrIGZvciByZWFkaW5nIC0tIHJldHVybnMgMSBpZiBzdWNjZXNzZnVsLCAwIGlmIGNvbnRlbnRpb24KKyAqLworaW50IGRvd25fcmVhZF90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgcmV0ID0gX19kb3duX3JlYWRfdHJ5bG9jayhzZW0pOworCisJaWYgKHJldCA9PSAxKQorCQlyd3NlbV9hY3F1aXJlX3JlYWQoJnNlbS0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woZG93bl9yZWFkX3RyeWxvY2spOworCisvKgorICogbG9jayBmb3Igd3JpdGluZworICovCit2b2lkIGRvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCW1pZ2h0X3NsZWVwKCk7CisJcndzZW1fYWNxdWlyZSgmc2VtLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisKKwlfX2Rvd25fd3JpdGUoc2VtKTsKK30KKworRVhQT1JUX1NZTUJPTChkb3duX3dyaXRlKTsKKworLyoKKyAqIHRyeWxvY2sgZm9yIHdyaXRpbmcgLS0gcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgY29udGVudGlvbgorICovCitpbnQgZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlpbnQgcmV0ID0gX19kb3duX3dyaXRlX3RyeWxvY2soc2VtKTsKKworCWlmIChyZXQgPT0gMSkKKwkJcndzZW1fYWNxdWlyZSgmc2VtLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChkb3duX3dyaXRlX3RyeWxvY2spOworCisvKgorICogcmVsZWFzZSBhIHJlYWQgbG9jaworICovCit2b2lkIHVwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXJ3c2VtX3JlbGVhc2UoJnNlbS0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCisJX191cF9yZWFkKHNlbSk7Cit9CisKK0VYUE9SVF9TWU1CT0wodXBfcmVhZCk7CisKKy8qCisgKiByZWxlYXNlIGEgd3JpdGUgbG9jaworICovCit2b2lkIHVwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlyd3NlbV9yZWxlYXNlKCZzZW0tPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKworCV9fdXBfd3JpdGUoc2VtKTsKK30KKworRVhQT1JUX1NZTUJPTCh1cF93cml0ZSk7CisKKy8qCisgKiBkb3duZ3JhZGUgd3JpdGUgbG9jayB0byByZWFkIGxvY2sKKyAqLwordm9pZCBkb3duZ3JhZGVfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCS8qCisJICogbG9ja2RlcDogYSBkb3duZ3JhZGVkIHdyaXRlIHdpbGwgbGl2ZSBvbiBhcyBhIHdyaXRlCisJICogZGVwZW5kZW5jeS4KKwkgKi8KKwlfX2Rvd25ncmFkZV93cml0ZShzZW0pOworfQorCitFWFBPUlRfU1lNQk9MKGRvd25ncmFkZV93cml0ZSk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCit2b2lkIGRvd25fcmVhZF9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyd3NlbV9hY3F1aXJlX3JlYWQoJnNlbS0+ZGVwX21hcCwgc3ViY2xhc3MsIDAsIF9SRVRfSVBfKTsKKworCV9fZG93bl9yZWFkKHNlbSk7Cit9CisKK0VYUE9SVF9TWU1CT0woZG93bl9yZWFkX25lc3RlZCk7CisKK3ZvaWQgZG93bl9yZWFkX25vbl9vd25lcihzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJbWlnaHRfc2xlZXAoKTsKKworCV9fZG93bl9yZWFkKHNlbSk7Cit9CisKK0VYUE9SVF9TWU1CT0woZG93bl9yZWFkX25vbl9vd25lcik7CisKK3ZvaWQgZG93bl93cml0ZV9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyd3NlbV9hY3F1aXJlKCZzZW0tPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBfUkVUX0lQXyk7CisKKwlfX2Rvd25fd3JpdGVfbmVzdGVkKHNlbSwgc3ViY2xhc3MpOworfQorCitFWFBPUlRfU1lNQk9MKGRvd25fd3JpdGVfbmVzdGVkKTsKKwordm9pZCB1cF9yZWFkX25vbl9vd25lcihzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJX191cF9yZWFkKHNlbSk7Cit9CisKK0VYUE9SVF9TWU1CT0wodXBfcmVhZF9ub25fb3duZXIpOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDI2MjljMTcuLjRlZTQwMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KQEAgLTE3OCwyMCArMTc5LDE1IEBACiAJCXJldHVybiBTQ0FMRV9QUklPKERFRl9USU1FU0xJQ0UsIHN0YXRpY19wcmlvKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGFza190aW1lc2xpY2UodGFza190ICpwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGFza190aW1lc2xpY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBzdGF0aWNfcHJpb190aW1lc2xpY2UocC0+c3RhdGljX3ByaW8pOwogfQogCi0jZGVmaW5lIHRhc2tfaG90KHAsIG5vdywgc2QpICgobG9uZyBsb25nKSAoKG5vdykgLSAocCktPmxhc3RfcmFuKQlcCi0JCQkJPCAobG9uZyBsb25nKSAoc2QpLT5jYWNoZV9ob3RfdGltZSkKLQogLyoKICAqIFRoZXNlIGFyZSB0aGUgcnVucXVldWUgZGF0YSBzdHJ1Y3R1cmVzOgogICovCiAKLXR5cGVkZWYgc3RydWN0IHJ1bnF1ZXVlIHJ1bnF1ZXVlX3Q7Ci0KIHN0cnVjdCBwcmlvX2FycmF5IHsKIAl1bnNpZ25lZCBpbnQgbnJfYWN0aXZlOwogCURFQ0xBUkVfQklUTUFQKGJpdG1hcCwgTUFYX1BSSU8rMSk7IC8qIGluY2x1ZGUgMSBiaXQgZm9yIGRlbGltaXRlciAqLwpAQCAtMjA1LDcgKzIwMSw3IEBACiAgKiAoc3VjaCBhcyB0aGUgbG9hZCBiYWxhbmNpbmcgb3IgdGhlIHRocmVhZCBtaWdyYXRpb24gY29kZSksIGxvY2sKICAqIGFjcXVpcmUgb3BlcmF0aW9ucyBtdXN0IGJlIG9yZGVyZWQgYnkgYXNjZW5kaW5nICZydW5xdWV1ZS4KICAqLwotc3RydWN0IHJ1bnF1ZXVlIHsKK3N0cnVjdCBycSB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCiAJLyoKQEAgLTIyOSw5ICsyMjUsOSBAQAogCiAJdW5zaWduZWQgbG9uZyBleHBpcmVkX3RpbWVzdGFtcDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdGltZXN0YW1wX2xhc3RfdGljazsKLQl0YXNrX3QgKmN1cnIsICppZGxlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgKmlkbGU7CiAJc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbTsKLQlwcmlvX2FycmF5X3QgKmFjdGl2ZSwgKmV4cGlyZWQsIGFycmF5c1syXTsKKwlzdHJ1Y3QgcHJpb19hcnJheSAqYWN0aXZlLCAqZXhwaXJlZCwgYXJyYXlzWzJdOwogCWludCBiZXN0X2V4cGlyZWRfcHJpbzsKIAlhdG9taWNfdCBucl9pb3dhaXQ7CiAKQEAgLTI0Miw3ICsyMzgsNyBAQAogCWludCBhY3RpdmVfYmFsYW5jZTsKIAlpbnQgcHVzaF9jcHU7CiAKLQl0YXNrX3QgKm1pZ3JhdGlvbl90aHJlYWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICptaWdyYXRpb25fdGhyZWFkOwogCXN0cnVjdCBsaXN0X2hlYWQgbWlncmF0aW9uX3F1ZXVlOwogI2VuZGlmCiAKQEAgLTI2NSw5ICsyNjEsMTAgQEAKIAl1bnNpZ25lZCBsb25nIHR0d3VfY250OwogCXVuc2lnbmVkIGxvbmcgdHR3dV9sb2NhbDsKICNlbmRpZgorCXN0cnVjdCBsb2NrX2NsYXNzX2tleSBycV9sb2NrX2tleTsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcnVucXVldWUsIHJ1bnF1ZXVlcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJxLCBydW5xdWV1ZXMpOwogCiAvKgogICogVGhlIGRvbWFpbiB0cmVlIChycS0+c2QpIGlzIHByb3RlY3RlZCBieSBSQ1UncyBxdWllc2NlbnQgc3RhdGUgdHJhbnNpdGlvbi4KQEAgLTI3Niw4ICsyNzMsOCBAQAogICogVGhlIGRvbWFpbiB0cmVlIG9mIGFueSBDUFUgbWF5IG9ubHkgYmUgYWNjZXNzZWQgZnJvbSB3aXRoaW4KICAqIHByZWVtcHQtZGlzYWJsZWQgc2VjdGlvbnMuCiAgKi8KLSNkZWZpbmUgZm9yX2VhY2hfZG9tYWluKGNwdSwgZG9tYWluKSBcCi1mb3IgKGRvbWFpbiA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOyBkb21haW47IGRvbWFpbiA9IGRvbWFpbi0+cGFyZW50KQorI2RlZmluZSBmb3JfZWFjaF9kb21haW4oY3B1LCBfX3NkKSBcCisJZm9yIChfX3NkID0gcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7IF9fc2Q7IF9fc2QgPSBfX3NkLT5wYXJlbnQpCiAKICNkZWZpbmUgY3B1X3JxKGNwdSkJCSgmcGVyX2NwdShydW5xdWV1ZXMsIChjcHUpKSkKICNkZWZpbmUgdGhpc19ycSgpCQkoJl9fZ2V0X2NwdV92YXIocnVucXVldWVzKSkKQEAgLTI5MiwyNiArMjg5LDMzIEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVwotc3RhdGljIGlubGluZSBpbnQgdGFza19ydW5uaW5nKHJ1bnF1ZXVlX3QgKnJxLCB0YXNrX3QgKnApCitzdGF0aWMgaW5saW5lIGludCB0YXNrX3J1bm5pbmcoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBycS0+Y3VyciA9PSBwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9sb2NrX3N3aXRjaChydW5xdWV1ZV90ICpycSwgdGFza190ICpuZXh0KQorc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfbG9ja19zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2xvY2tfc3dpdGNoKHJ1bnF1ZXVlX3QgKnJxLCB0YXNrX3QgKnByZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2xvY2tfc3dpdGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKIAkvKiB0aGlzIGlzIGEgdmFsaWQgY2FzZSB3aGVuIGFub3RoZXIgdGFzayByZWxlYXNlcyB0aGUgc3BpbmxvY2sgKi8KIAlycS0+bG9jay5vd25lciA9IGN1cnJlbnQ7CiAjZW5kaWYKKwkvKgorCSAqIElmIHdlIGFyZSB0cmFja2luZyBzcGlubG9jayBkZXBlbmRlbmNpZXMgdGhlbiB3ZSBoYXZlIHRvCisJICogZml4IHVwIHRoZSBydW5xdWV1ZSBsb2NrIC0gd2hpY2ggZ2V0cyAnY2FycmllZCBvdmVyJyBmcm9tCisJICogcHJldiBpbnRvIGN1cnJlbnQ6CisJICovCisJc3Bpbl9hY3F1aXJlKCZycS0+bG9jay5kZXBfbWFwLCAwLCAwLCBfVEhJU19JUF8pOworCiAJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiB9CiAKICNlbHNlIC8qIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXICovCi1zdGF0aWMgaW5saW5lIGludCB0YXNrX3J1bm5pbmcocnVucXVldWVfdCAqcnEsIHRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfcnVubmluZyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCXJldHVybiBwLT5vbmNwdTsKQEAgLTMyMCw3ICszMjQsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX2xvY2tfc3dpdGNoKHJ1bnF1ZXVlX3QgKnJxLCB0YXNrX3QgKm5leHQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9sb2NrX3N3aXRjaChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCS8qCkBAIC0zMzcsNyArMzQxLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2xvY2tfc3dpdGNoKHJ1bnF1ZXVlX3QgKnJxLCB0YXNrX3QgKnByZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2xvY2tfc3dpdGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKICNpZmRlZiBDT05GSUdfU01QCiAJLyoKQEAgLTM1OCwxMCArMzYyLDEwIEBACiAgKiBfX3Rhc2tfcnFfbG9jayAtIGxvY2sgdGhlIHJ1bnF1ZXVlIGEgZ2l2ZW4gdGFzayByZXNpZGVzIG9uLgogICogTXVzdCBiZSBjYWxsZWQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwotc3RhdGljIGlubGluZSBydW5xdWV1ZV90ICpfX3Rhc2tfcnFfbG9jayh0YXNrX3QgKnApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqX190YXNrX3JxX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCV9fYWNxdWlyZXMocnEtPmxvY2spCiB7Ci0Jc3RydWN0IHJ1bnF1ZXVlICpycTsKKwlzdHJ1Y3QgcnEgKnJxOwogCiByZXBlYXRfbG9ja190YXNrOgogCXJxID0gdGFza19ycShwKTsKQEAgLTM3OCwxMCArMzgyLDEwIEBACiAgKiBpbnRlcnJ1cHRzLiAgTm90ZSB0aGUgb3JkZXJpbmc6IHdlIGNhbiBzYWZlbHkgbG9va3VwIHRoZSB0YXNrX3JxIHdpdGhvdXQKICAqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIHByZWVtcHRpb24uCiAgKi8KLXN0YXRpYyBydW5xdWV1ZV90ICp0YXNrX3JxX2xvY2sodGFza190ICpwLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3N0YXRpYyBzdHJ1Y3QgcnEgKnRhc2tfcnFfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogCV9fYWNxdWlyZXMocnEtPmxvY2spCiB7Ci0Jc3RydWN0IHJ1bnF1ZXVlICpycTsKKwlzdHJ1Y3QgcnEgKnJxOwogCiByZXBlYXRfbG9ja190YXNrOgogCWxvY2FsX2lycV9zYXZlKCpmbGFncyk7CkBAIC0zOTQsMTMgKzM5OCwxMyBAQAogCXJldHVybiBycTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGFza19ycV91bmxvY2socnVucXVldWVfdCAqcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgX190YXNrX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxKQogCV9fcmVsZWFzZXMocnEtPmxvY2spCiB7CiAJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRhc2tfcnFfdW5sb2NrKHJ1bnF1ZXVlX3QgKnJxLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxLCB1bnNpZ25lZCBsb25nICpmbGFncykKIAlfX3JlbGVhc2VzKHJxLT5sb2NrKQogewogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCAqZmxhZ3MpOwpAQCAtNDIwLDcgKzQyNCw3IEBACiAJc2VxX3ByaW50ZihzZXEsICJ2ZXJzaW9uICVkXG4iLCBTQ0hFRFNUQVRfVkVSU0lPTik7CiAJc2VxX3ByaW50ZihzZXEsICJ0aW1lc3RhbXAgJWx1XG4iLCBqaWZmaWVzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOworCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAkJaW50IGRjbnQgPSAwOwpAQCAtNTA3LDEwICs1MTEsMTAgQEAKIC8qCiAgKiBycV9sb2NrIC0gbG9jayBhIGdpdmVuIHJ1bnF1ZXVlIGFuZCBkaXNhYmxlIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgcnVucXVldWVfdCAqdGhpc19ycV9sb2NrKHZvaWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqdGhpc19ycV9sb2NrKHZvaWQpCiAJX19hY3F1aXJlcyhycS0+bG9jaykKIHsKLQlydW5xdWV1ZV90ICpycTsKKwlzdHJ1Y3QgcnEgKnJxOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlycSA9IHRoaXNfcnEoKTsKQEAgLTUzNSw3ICs1MzksNyBAQAogICogbG9uZyBpdCB3YXMgZnJvbSB0aGUgKmZpcnN0KiB0aW1lIGl0IHdhcyBxdWV1ZWQgdG8gdGhlIHRpbWUgdGhhdCBpdAogICogZmluYWxseSBoaXQgYSBjcHUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9pbmZvX2RlcXVldWVkKHRhc2tfdCAqdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9pbmZvX2RlcXVldWVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAl0LT5zY2hlZF9pbmZvLmxhc3RfcXVldWVkID0gMDsKIH0KQEAgLTU0NSwxMCArNTQ5LDEwIEBACiAgKiBsb25nIGl0IHdhcyB3YWl0aW5nIHRvIHJ1bi4gIFdlIGFsc28gbm90ZSB3aGVuIGl0IGJlZ2FuIHNvIHRoYXQgd2UKICAqIGNhbiBrZWVwIHN0YXRzIG9uIGhvdyBsb25nIGl0cyB0aW1lc2xpY2UgaXMuCiAgKi8KLXN0YXRpYyB2b2lkIHNjaGVkX2luZm9fYXJyaXZlKHRhc2tfdCAqdCkKK3N0YXRpYyB2b2lkIHNjaGVkX2luZm9fYXJyaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXMsIGRpZmYgPSAwOwotCXN0cnVjdCBydW5xdWV1ZSAqcnEgPSB0YXNrX3JxKHQpOworCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHQpOwogCiAJaWYgKHQtPnNjaGVkX2luZm8ubGFzdF9xdWV1ZWQpCiAJCWRpZmYgPSBub3cgLSB0LT5zY2hlZF9pbmZvLmxhc3RfcXVldWVkOwpAQCAtNTc5LDcgKzU4Myw3IEBACiAgKiB0aGUgdGltZXN0YW1wIGlmIGl0IGlzIGFscmVhZHkgbm90IHNldC4gIEl0J3MgYXNzdW1lZCB0aGF0CiAgKiBzY2hlZF9pbmZvX2RlcXVldWVkKCkgd2lsbCBjbGVhciB0aGF0IHN0YW1wIHdoZW4gYXBwcm9wcmlhdGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9pbmZvX3F1ZXVlZCh0YXNrX3QgKnQpCitzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfaW5mb19xdWV1ZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogewogCWlmICghdC0+c2NoZWRfaW5mby5sYXN0X3F1ZXVlZCkKIAkJdC0+c2NoZWRfaW5mby5sYXN0X3F1ZXVlZCA9IGppZmZpZXM7CkBAIC01ODksOSArNTkzLDkgQEAKICAqIENhbGxlZCB3aGVuIGEgcHJvY2VzcyBjZWFzZXMgYmVpbmcgdGhlIGFjdGl2ZS1ydW5uaW5nIHByb2Nlc3MsIGVpdGhlcgogICogdm9sdW50YXJpbHkgb3IgaW52b2x1bnRhcmlseS4gIE5vdyB3ZSBjYW4gY2FsY3VsYXRlIGhvdyBsb25nIHdlIHJhbi4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2luZm9fZGVwYXJ0KHRhc2tfdCAqdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9pbmZvX2RlcGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7Ci0Jc3RydWN0IHJ1bnF1ZXVlICpycSA9IHRhc2tfcnEodCk7CisJc3RydWN0IHJxICpycSA9IHRhc2tfcnEodCk7CiAJdW5zaWduZWQgbG9uZyBkaWZmID0gamlmZmllcyAtIHQtPnNjaGVkX2luZm8ubGFzdF9hcnJpdmFsOwogCiAJdC0+c2NoZWRfaW5mby5jcHVfdGltZSArPSBkaWZmOwpAQCAtNjA1LDkgKzYwOSwxMCBAQAogICogdGhlaXIgdGltZSBzbGljZS4gIChUaGlzIG1heSBhbHNvIGJlIGNhbGxlZCB3aGVuIHN3aXRjaGluZyB0byBvciBmcm9tCiAgKiB0aGUgaWRsZSB0YXNrLikgIFdlIGFyZSBvbmx5IGNhbGxlZCB3aGVuIHByZXYgIT0gbmV4dC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2luZm9fc3dpdGNoKHRhc2tfdCAqcHJldiwgdGFza190ICpuZXh0KQorc3RhdGljIGlubGluZSB2b2lkCitzY2hlZF9pbmZvX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKLQlzdHJ1Y3QgcnVucXVldWUgKnJxID0gdGFza19ycShwcmV2KTsKKwlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwcmV2KTsKIAogCS8qCiAJICogcHJldiBub3cgZGVwYXJ0cyB0aGUgY3B1LiAgSXQncyBub3QgaW50ZXJlc3RpbmcgdG8gcmVjb3JkCkBAIC02MjgsNyArNjMzLDcgQEAKIC8qCiAgKiBBZGRpbmcvcmVtb3ZpbmcgYSB0YXNrIHRvL2Zyb20gYSBwcmlvcml0eSBhcnJheToKICAqLwotc3RhdGljIHZvaWQgZGVxdWV1ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcHJpb19hcnJheV90ICphcnJheSkKK3N0YXRpYyB2b2lkIGRlcXVldWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwcmlvX2FycmF5ICphcnJheSkKIHsKIAlhcnJheS0+bnJfYWN0aXZlLS07CiAJbGlzdF9kZWwoJnAtPnJ1bl9saXN0KTsKQEAgLTYzNiw3ICs2NDEsNyBAQAogCQlfX2NsZWFyX2JpdChwLT5wcmlvLCBhcnJheS0+Yml0bWFwKTsKIH0KIAotc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcHJpb19hcnJheV90ICphcnJheSkKK3N0YXRpYyB2b2lkIGVucXVldWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwcmlvX2FycmF5ICphcnJheSkKIHsKIAlzY2hlZF9pbmZvX3F1ZXVlZChwKTsKIAlsaXN0X2FkZF90YWlsKCZwLT5ydW5fbGlzdCwgYXJyYXktPnF1ZXVlICsgcC0+cHJpbyk7CkBAIC02NDksMTIgKzY1NCwxMyBAQAogICogUHV0IHRhc2sgdG8gdGhlIGVuZCBvZiB0aGUgcnVuIGxpc3Qgd2l0aG91dCB0aGUgb3ZlcmhlYWQgb2YgZGVxdWV1ZQogICogZm9sbG93ZWQgYnkgZW5xdWV1ZS4KICAqLwotc3RhdGljIHZvaWQgcmVxdWV1ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcHJpb19hcnJheV90ICphcnJheSkKK3N0YXRpYyB2b2lkIHJlcXVldWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwcmlvX2FycmF5ICphcnJheSkKIHsKIAlsaXN0X21vdmVfdGFpbCgmcC0+cnVuX2xpc3QsIGFycmF5LT5xdWV1ZSArIHAtPnByaW8pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5xdWV1ZV90YXNrX2hlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBwcmlvX2FycmF5X3QgKmFycmF5KQorc3RhdGljIGlubGluZSB2b2lkCitlbnF1ZXVlX3Rhc2tfaGVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwcmlvX2FycmF5ICphcnJheSkKIHsKIAlsaXN0X2FkZCgmcC0+cnVuX2xpc3QsIGFycmF5LT5xdWV1ZSArIHAtPnByaW8pOwogCV9fc2V0X2JpdChwLT5wcmlvLCBhcnJheS0+Yml0bWFwKTsKQEAgLTY3Nyw3ICs2ODMsNyBAQAogICogQm90aCBwcm9wZXJ0aWVzIGFyZSBpbXBvcnRhbnQgdG8gY2VydGFpbiB3b3JrbG9hZHMuCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgX19ub3JtYWxfcHJpbyh0YXNrX3QgKnApCitzdGF0aWMgaW5saW5lIGludCBfX25vcm1hbF9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpbnQgYm9udXMsIHByaW87CiAKQEAgLTcxMyw3ICs3MTksNyBAQAogI2RlZmluZSBSVFBSSU9fVE9fTE9BRF9XRUlHSFQocnApIFwKIAkoUFJJT19UT19MT0FEX1dFSUdIVChNQVhfUlRfUFJJTykgKyBMT0FEX1dFSUdIVChycCkpCiAKLXN0YXRpYyB2b2lkIHNldF9sb2FkX3dlaWdodCh0YXNrX3QgKnApCitzdGF0aWMgdm9pZCBzZXRfbG9hZF93ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCWlmIChoYXNfcnRfcG9saWN5KHApKSB7CiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzMxLDIzICs3MzcsMjUgQEAKIAkJcC0+bG9hZF93ZWlnaHQgPSBQUklPX1RPX0xPQURfV0VJR0hUKHAtPnN0YXRpY19wcmlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGluY19yYXdfd2VpZ2h0ZWRfbG9hZChydW5xdWV1ZV90ICpycSwgY29uc3QgdGFza190ICpwKQorc3RhdGljIGlubGluZSB2b2lkCitpbmNfcmF3X3dlaWdodGVkX2xvYWQoc3RydWN0IHJxICpycSwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJxLT5yYXdfd2VpZ2h0ZWRfbG9hZCArPSBwLT5sb2FkX3dlaWdodDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlY19yYXdfd2VpZ2h0ZWRfbG9hZChydW5xdWV1ZV90ICpycSwgY29uc3QgdGFza190ICpwKQorc3RhdGljIGlubGluZSB2b2lkCitkZWNfcmF3X3dlaWdodGVkX2xvYWQoc3RydWN0IHJxICpycSwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJxLT5yYXdfd2VpZ2h0ZWRfbG9hZCAtPSBwLT5sb2FkX3dlaWdodDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGluY19ucl9ydW5uaW5nKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX25yX3J1bm5pbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxKQogewogCXJxLT5ucl9ydW5uaW5nKys7CiAJaW5jX3Jhd193ZWlnaHRlZF9sb2FkKHJxLCBwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlY19ucl9ydW5uaW5nKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX25yX3J1bm5pbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxKQogewogCXJxLT5ucl9ydW5uaW5nLS07CiAJZGVjX3Jhd193ZWlnaHRlZF9sb2FkKHJxLCBwKTsKQEAgLTc2MCw3ICs3NjgsNyBAQAogICogc2V0cHJpbyBzeXNjYWxscywgYW5kIHdoZW5ldmVyIHRoZSBpbnRlcmFjdGl2aXR5CiAgKiBlc3RpbWF0b3IgcmVjYWxjdWxhdGVzLgogICovCi1zdGF0aWMgaW5saW5lIGludCBub3JtYWxfcHJpbyh0YXNrX3QgKnApCitzdGF0aWMgaW5saW5lIGludCBub3JtYWxfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IHByaW87CiAKQEAgLTc3OCw3ICs3ODYsNyBAQAogICogaW50ZXJhY3Rpdml0eSBtb2RpZmllcnMuIFdpbGwgYmUgUlQgaWYgdGhlIHRhc2sgZ290CiAgKiBSVC1ib29zdGVkLiBJZiBub3QgdGhlbiBpdCByZXR1cm5zIHAtPm5vcm1hbF9wcmlvLgogICovCi1zdGF0aWMgaW50IGVmZmVjdGl2ZV9wcmlvKHRhc2tfdCAqcCkKK3N0YXRpYyBpbnQgZWZmZWN0aXZlX3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXAtPm5vcm1hbF9wcmlvID0gbm9ybWFsX3ByaW8ocCk7CiAJLyoKQEAgLTc5NCw5ICs4MDIsOSBAQAogLyoKICAqIF9fYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZS4KICAqLwotc3RhdGljIHZvaWQgX19hY3RpdmF0ZV90YXNrKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCitzdGF0aWMgdm9pZCBfX2FjdGl2YXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxKQogewotCXByaW9fYXJyYXlfdCAqdGFyZ2V0ID0gcnEtPmFjdGl2ZTsKKwlzdHJ1Y3QgcHJpb19hcnJheSAqdGFyZ2V0ID0gcnEtPmFjdGl2ZTsKIAogCWlmIChiYXRjaF90YXNrKHApKQogCQl0YXJnZXQgPSBycS0+ZXhwaXJlZDsKQEAgLTgwNyw3ICs4MTUsNyBAQAogLyoKICAqIF9fYWN0aXZhdGVfaWRsZV90YXNrIC0gbW92ZSBpZGxlIHRhc2sgdG8gdGhlIF9mcm9udF8gb2YgcnVucXVldWUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2FjdGl2YXRlX2lkbGVfdGFzayh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQorc3RhdGljIGlubGluZSB2b2lkIF9fYWN0aXZhdGVfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSkKIHsKIAllbnF1ZXVlX3Rhc2tfaGVhZChwLCBycS0+YWN0aXZlKTsKIAlpbmNfbnJfcnVubmluZyhwLCBycSk7CkBAIC04MTcsNyArODI1LDcgQEAKICAqIFJlY2FsY3VsYXRlIHAtPm5vcm1hbF9wcmlvIGFuZCBwLT5wcmlvIGFmdGVyIGhhdmluZyBzbGVwdCwKICAqIHVwZGF0aW5nIHRoZSBzbGVlcC1hdmVyYWdlIHRvbzoKICAqLwotc3RhdGljIGludCByZWNhbGNfdGFza19wcmlvKHRhc2tfdCAqcCwgdW5zaWduZWQgbG9uZyBsb25nIG5vdykKK3N0YXRpYyBpbnQgcmVjYWxjX3Rhc2tfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgbG9uZyBub3cpCiB7CiAJLyogQ2FsbGVyIG11c3QgYWx3YXlzIGVuc3VyZSAnbm93ID49IHAtPnRpbWVzdGFtcCcgKi8KIAl1bnNpZ25lZCBsb25nIHNsZWVwX3RpbWUgPSBub3cgLSBwLT50aW1lc3RhbXA7CkBAIC04ODksNyArODk3LDcgQEAKICAqIFVwZGF0ZSBhbGwgdGhlIHNjaGVkdWxpbmcgc3RhdGlzdGljcyBzdHVmZi4gKHNsZWVwIGF2ZXJhZ2UKICAqIGNhbGN1bGF0aW9uLCBwcmlvcml0eSBtb2RpZmllcnMsIGV0Yy4pCiAgKi8KLXN0YXRpYyB2b2lkIGFjdGl2YXRlX3Rhc2sodGFza190ICpwLCBydW5xdWV1ZV90ICpycSwgaW50IGxvY2FsKQorc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIGludCBsb2NhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbm93OwogCkBAIC04OTcsNyArOTA1LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKCFsb2NhbCkgewogCQkvKiBDb21wZW5zYXRlIGZvciBkcmlmdGluZyBzY2hlZF9jbG9jayAqLwotCQlydW5xdWV1ZV90ICp0aGlzX3JxID0gdGhpc19ycSgpOworCQlzdHJ1Y3QgcnEgKnRoaXNfcnEgPSB0aGlzX3JxKCk7CiAJCW5vdyA9IChub3cgLSB0aGlzX3JxLT50aW1lc3RhbXBfbGFzdF90aWNrKQogCQkJKyBycS0+dGltZXN0YW1wX2xhc3RfdGljazsKIAl9CkBAIC05MzYsNyArOTQ0LDcgQEAKIC8qCiAgKiBkZWFjdGl2YXRlX3Rhc2sgLSByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHJ1bnF1ZXVlLgogICovCi1zdGF0aWMgdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBydW5xdWV1ZV90ICpycSkKK3N0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEpCiB7CiAJZGVjX25yX3J1bm5pbmcocCwgcnEpOwogCWRlcXVldWVfdGFzayhwLCBwLT5hcnJheSk7CkBAIC05NTYsNyArOTY0LDcgQEAKICNkZWZpbmUgdHNrX2lzX3BvbGxpbmcodCkgdGVzdF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1BPTExJTkdfTlJGTEFHKQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHJlc2NoZWRfdGFzayh0YXNrX3QgKnApCitzdGF0aWMgdm9pZCByZXNjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCWludCBjcHU7CiAKQEAgLTk3Nyw3ICs5ODUsNyBAQAogCQlzbXBfc2VuZF9yZXNjaGVkdWxlKGNwdSk7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlc2NoZWRfdGFzayh0YXNrX3QgKnApCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzY2hlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJnRhc2tfcnEocCktPmxvY2spOwogCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOwpAQCAtOTg4LDcgKzk5Niw3IEBACiAgKiB0YXNrX2N1cnIgLSBpcyB0aGlzIHRhc2sgY3VycmVudGx5IGV4ZWN1dGluZyBvbiBhIENQVT8KICAqIEBwOiB0aGUgdGFzayBpbiBxdWVzdGlvbi4KICAqLwotaW5saW5lIGludCB0YXNrX2N1cnIoY29uc3QgdGFza190ICpwKQoraW5saW5lIGludCB0YXNrX2N1cnIoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBjcHVfY3Vycih0YXNrX2NwdShwKSkgPT0gcDsKIH0KQEAgLTEwMDAsMjIgKzEwMDgsMjMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBtaWdyYXRpb25fcmVxIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQl0YXNrX3QgKnRhc2s7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCWludCBkZXN0X2NwdTsKIAogCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci19IG1pZ3JhdGlvbl9yZXFfdDsKK307CiAKIC8qCiAgKiBUaGUgdGFzaydzIHJ1bnF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkLgogICogUmV0dXJucyB0cnVlIGlmIHlvdSBoYXZlIHRvIHdhaXQgZm9yIG1pZ3JhdGlvbiB0aHJlYWQuCiAgKi8KLXN0YXRpYyBpbnQgbWlncmF0ZV90YXNrKHRhc2tfdCAqcCwgaW50IGRlc3RfY3B1LCBtaWdyYXRpb25fcmVxX3QgKnJlcSkKK3N0YXRpYyBpbnQKK21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBkZXN0X2NwdSwgc3RydWN0IG1pZ3JhdGlvbl9yZXEgKnJlcSkKIHsKLQlydW5xdWV1ZV90ICpycSA9IHRhc2tfcnEocCk7CisJc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7CiAKIAkvKgogCSAqIElmIHRoZSB0YXNrIGlzIG5vdCBvbiBhIHJ1bnF1ZXVlIChhbmQgbm90IHJ1bm5pbmcpLCB0aGVuCkBAIC0xMDMwLDYgKzEwMzksNyBAQAogCXJlcS0+dGFzayA9IHA7CiAJcmVxLT5kZXN0X2NwdSA9IGRlc3RfY3B1OwogCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZycS0+bWlncmF0aW9uX3F1ZXVlKTsKKwogCXJldHVybiAxOwogfQogCkBAIC0xMDQyLDEwICsxMDUyLDEwIEBACiAgKiBzbXBfY2FsbF9mdW5jdGlvbigpIGlmIGFuIElQSSBpcyBzZW50IGJ5IHRoZSBzYW1lIHByb2Nlc3Mgd2UgYXJlCiAgKiB3YWl0aW5nIHRvIGJlY29tZSBpbmFjdGl2ZS4KICAqLwotdm9pZCB3YWl0X3Rhc2tfaW5hY3RpdmUodGFza190ICpwKQordm9pZCB3YWl0X3Rhc2tfaW5hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JcnVucXVldWVfdCAqcnE7CisJc3RydWN0IHJxICpycTsKIAlpbnQgcHJlZW1wdGVkOwogCiByZXBlYXQ6CkBAIC0xMDc2LDcgKzEwODYsNyBAQAogICogdG8gYW5vdGhlciBDUFUgdGhlbiBubyBoYXJtIGlzIGRvbmUgYW5kIHRoZSBwdXJwb3NlIGhhcyBiZWVuCiAgKiBhY2hpZXZlZCBhcyB3ZWxsLgogICovCi12b2lkIGtpY2tfcHJvY2Vzcyh0YXNrX3QgKnApCit2b2lkIGtpY2tfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGNwdTsKIApAQCAtMTA5Niw3ICsxMTA2LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNvdXJjZV9sb2FkKGludCBjcHUsIGludCB0eXBlKQogewotCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGNwdSk7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwogCiAJaWYgKHR5cGUgPT0gMCkKIAkJcmV0dXJuIHJxLT5yYXdfd2VpZ2h0ZWRfbG9hZDsKQEAgLTExMTAsNyArMTEyMCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXJnZXRfbG9hZChpbnQgY3B1LCBpbnQgdHlwZSkKIHsKLQlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAogCWlmICh0eXBlID09IDApCiAJCXJldHVybiBycS0+cmF3X3dlaWdodGVkX2xvYWQ7CkBAIC0xMTIzLDEwICsxMTMzLDEwIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHVfYXZnX2xvYWRfcGVyX3Rhc2soaW50IGNwdSkKIHsKLQlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAl1bnNpZ25lZCBsb25nIG4gPSBycS0+bnJfcnVubmluZzsKIAotCXJldHVybiBuID8gIHJxLT5yYXdfd2VpZ2h0ZWRfbG9hZCAvIG4gOiBTQ0hFRF9MT0FEX1NDQUxFOworCXJldHVybiBuID8gcnEtPnJhd193ZWlnaHRlZF9sb2FkIC8gbiA6IFNDSEVEX0xPQURfU0NBTEU7CiB9CiAKIC8qCkBAIC0xMjc5LDcgKzEyODksNyBAQAogICogUmV0dXJucyB0aGUgQ1BVIHdlIHNob3VsZCB3YWtlIG9udG8uCiAgKi8KICNpZiBkZWZpbmVkKEFSQ0hfSEFTX1NDSEVEX1dBS0VfSURMRSkKLXN0YXRpYyBpbnQgd2FrZV9pZGxlKGludCBjcHUsIHRhc2tfdCAqcCkKK3N0YXRpYyBpbnQgd2FrZV9pZGxlKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAljcHVtYXNrX3QgdG1wOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwpAQCAtMTMwMiw3ICsxMzEyLDcgQEAKIAlyZXR1cm4gY3B1OwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHdha2VfaWRsZShpbnQgY3B1LCB0YXNrX3QgKnApCitzdGF0aWMgaW5saW5lIGludCB3YWtlX2lkbGUoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBjcHU7CiB9CkBAIC0xMzIyLDE1ICsxMzMyLDE1IEBACiAgKgogICogcmV0dXJucyBmYWlsdXJlIG9ubHkgaWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBhY3RpdmUuCiAgKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3dha2VfdXAodGFza190ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUsIGludCBzeW5jKQorc3RhdGljIGludCB0cnlfdG9fd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSwgaW50IHN5bmMpCiB7CiAJaW50IGNwdSwgdGhpc19jcHUsIHN1Y2Nlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBvbGRfc3RhdGU7Ci0JcnVucXVldWVfdCAqcnE7CisJc3RydWN0IHJxICpycTsKICNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyBsb2FkLCB0aGlzX2xvYWQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsICp0aGlzX3NkID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGxvYWQsIHRoaXNfbG9hZDsKIAlpbnQgbmV3X2NwdTsKICNlbmRpZgogCkBAIC0xNDgwLDE1ICsxNDkwLDE0IEBACiAJcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLWludCBmYXN0Y2FsbCB3YWtlX3VwX3Byb2Nlc3ModGFza190ICpwKQoraW50IGZhc3RjYWxsIHdha2VfdXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIHRyeV90b193YWtlX3VwKHAsIFRBU0tfU1RPUFBFRCB8IFRBU0tfVFJBQ0VEIHwKIAkJCQkgVEFTS19JTlRFUlJVUFRJQkxFIHwgVEFTS19VTklOVEVSUlVQVElCTEUsIDApOwogfQotCiBFWFBPUlRfU1lNQk9MKHdha2VfdXBfcHJvY2Vzcyk7CiAKLWludCBmYXN0Y2FsbCB3YWtlX3VwX3N0YXRlKHRhc2tfdCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKQoraW50IGZhc3RjYWxsIHdha2VfdXBfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJcmV0dXJuIHRyeV90b193YWtlX3VwKHAsIHN0YXRlLCAwKTsKIH0KQEAgLTE0OTcsNyArMTUwNiw3IEBACiAgKiBQZXJmb3JtIHNjaGVkdWxlciByZWxhdGVkIHNldHVwIGZvciBhIG5ld2x5IGZvcmtlZCBwcm9jZXNzIHAuCiAgKiBwIGlzIGZvcmtlZCBieSBjdXJyZW50LgogICovCi12b2lkIGZhc3RjYWxsIHNjaGVkX2ZvcmsodGFza190ICpwLCBpbnQgY2xvbmVfZmxhZ3MpCit2b2lkIGZhc3RjYWxsIHNjaGVkX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY2xvbmVfZmxhZ3MpCiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIApAQCAtMTU2NSwxMSArMTU3NCwxMSBAQAogICogdGhhdCBtdXN0IGJlIGRvbmUgZm9yIGV2ZXJ5IG5ld2x5IGNyZWF0ZWQgY29udGV4dCwgdGhlbiBwdXRzIHRoZSB0YXNrCiAgKiBvbiB0aGUgcnVucXVldWUgYW5kIHdha2VzIGl0LgogICovCi12b2lkIGZhc3RjYWxsIHdha2VfdXBfbmV3X3Rhc2sodGFza190ICpwLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzKQordm9pZCBmYXN0Y2FsbCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKIHsKKwlzdHJ1Y3QgcnEgKnJxLCAqdGhpc19ycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0aGlzX2NwdSwgY3B1OwotCXJ1bnF1ZXVlX3QgKnJxLCAqdGhpc19ycTsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJQlVHX09OKHAtPnN0YXRlICE9IFRBU0tfUlVOTklORyk7CkBAIC0xNjQ5LDEwICsxNjU4LDEwIEBACiAgKiBhcnRpZmljaWFsbHksIGJlY2F1c2UgYW55IHRpbWVzbGljZSByZWNvdmVyZWQgaGVyZQogICogd2FzIGdpdmVuIGF3YXkgYnkgdGhlIHBhcmVudCBpbiB0aGUgZmlyc3QgcGxhY2UuKQogICovCi12b2lkIGZhc3RjYWxsIHNjaGVkX2V4aXQodGFza190ICpwKQordm9pZCBmYXN0Y2FsbCBzY2hlZF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXJ1bnF1ZXVlX3QgKnJxOworCXN0cnVjdCBycSAqcnE7CiAKIAkvKgogCSAqIElmIHRoZSBjaGlsZCB3YXMgYSAocmVsYXRpdmUtKSBDUFUgaG9nIHRoZW4gZGVjcmVhc2UKQEAgLTE2ODMsNyArMTY5Miw3IEBACiAgKiBwcmVwYXJlX3Rhc2tfc3dpdGNoIHNldHMgdXAgbG9ja2luZyBhbmQgY2FsbHMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljCiAgKiBob29rcy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfdGFza19zd2l0Y2gocnVucXVldWVfdCAqcnEsIHRhc2tfdCAqbmV4dCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVwYXJlX3Rhc2tfc3dpdGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKIAlwcmVwYXJlX2xvY2tfc3dpdGNoKHJxLCBuZXh0KTsKIAlwcmVwYXJlX2FyY2hfc3dpdGNoKG5leHQpOwpAQCAtMTcwNCw3ICsxNzEzLDcgQEAKICAqIHdpdGggdGhlIGxvY2sgaGVsZCBjYW4gY2F1c2UgZGVhZGxvY2tzOyBzZWUgc2NoZWR1bGUoKSBmb3IKICAqIGRldGFpbHMuKQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX3Rhc2tfc3dpdGNoKHJ1bnF1ZXVlX3QgKnJxLCB0YXNrX3QgKnByZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX3Rhc2tfc3dpdGNoKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIAlfX3JlbGVhc2VzKHJxLT5sb2NrKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcnEtPnByZXZfbW07CkBAIC0xNzQyLDEwICsxNzUxLDExIEBACiAgKiBzY2hlZHVsZV90YWlsIC0gZmlyc3QgdGhpbmcgYSBmcmVzaGx5IGZvcmtlZCB0aHJlYWQgbXVzdCBjYWxsLgogICogQHByZXY6IHRoZSB0aHJlYWQgd2UganVzdCBzd2l0Y2hlZCBhd2F5IGZyb20uCiAgKi8KLWFzbWxpbmthZ2Ugdm9pZCBzY2hlZHVsZV90YWlsKHRhc2tfdCAqcHJldikKK2FzbWxpbmthZ2Ugdm9pZCBzY2hlZHVsZV90YWlsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIAlfX3JlbGVhc2VzKHJxLT5sb2NrKQogewotCXJ1bnF1ZXVlX3QgKnJxID0gdGhpc19ycSgpOworCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CisKIAlmaW5pc2hfdGFza19zd2l0Y2gocnEsIHByZXYpOwogI2lmZGVmIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXCiAJLyogSW4gdGhpcyBjYXNlLCBmaW5pc2hfdGFza19zd2l0Y2ggZG9lcyBub3QgcmVlbmFibGUgcHJlZW1wdGlvbiAqLwpAQCAtMTc1OSw4ICsxNzY5LDkgQEAKICAqIGNvbnRleHRfc3dpdGNoIC0gc3dpdGNoIHRvIHRoZSBuZXcgTU0gYW5kIHRoZSBuZXcKICAqIHRocmVhZCdzIHJlZ2lzdGVyIHN0YXRlLgogICovCi1zdGF0aWMgaW5saW5lCi10YXNrX3QgKiBjb250ZXh0X3N3aXRjaChydW5xdWV1ZV90ICpycSwgdGFza190ICpwcmV2LCB0YXNrX3QgKm5leHQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqCitjb250ZXh0X3N3aXRjaChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IG5leHQtPm1tOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tID0gcHJldi0+YWN0aXZlX21tOwpAQCAtMTc3Nyw2ICsxNzg4LDcgQEAKIAkJV0FSTl9PTihycS0+cHJldl9tbSk7CiAJCXJxLT5wcmV2X21tID0gb2xkbW07CiAJfQorCXNwaW5fcmVsZWFzZSgmcnEtPmxvY2suZGVwX21hcCwgMSwgX1RISVNfSVBfKTsKIAogCS8qIEhlcmUgd2UganVzdCBzd2l0Y2ggdGhlIHJlZ2lzdGVyIHN0YXRlIGFuZCB0aGUgc3RhY2suICovCiAJc3dpdGNoX3RvKHByZXYsIG5leHQsIHByZXYpOwpAQCAtMTg1NywxMiArMTg2OSwyMSBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogLyoKKyAqIElzIHRoaXMgdGFzayBsaWtlbHkgY2FjaGUtaG90OgorICovCitzdGF0aWMgaW5saW5lIGludAordGFza19ob3Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIGxvbmcgbm93LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKK3sKKwlyZXR1cm4gKGxvbmcgbG9uZykobm93IC0gcC0+bGFzdF9yYW4pIDwgKGxvbmcgbG9uZylzZC0+Y2FjaGVfaG90X3RpbWU7Cit9CisKKy8qCiAgKiBkb3VibGVfcnFfbG9jayAtIHNhZmVseSBsb2NrIHR3byBydW5xdWV1ZXMKICAqCiAgKiBOb3RlIHRoaXMgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV9sb2NrLAogICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYmVmb3JlIGNhbGxpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGRvdWJsZV9ycV9sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQorc3RhdGljIHZvaWQgZG91YmxlX3JxX2xvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQogCV9fYWNxdWlyZXMocnExLT5sb2NrKQogCV9fYWNxdWlyZXMocnEyLT5sb2NrKQogewpAQCAtMTg4Niw3ICsxOTA3LDcgQEAKICAqIE5vdGUgdGhpcyBkb2VzIG5vdCByZXN0b3JlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX3VubG9jaywKICAqIHlvdSBuZWVkIHRvIGRvIHNvIG1hbnVhbGx5IGFmdGVyIGNhbGxpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGRvdWJsZV9ycV91bmxvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCitzdGF0aWMgdm9pZCBkb3VibGVfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKIAlfX3JlbGVhc2VzKHJxMS0+bG9jaykKIAlfX3JlbGVhc2VzKHJxMi0+bG9jaykKIHsKQEAgLTE5MDAsNyArMTkyMSw3IEBACiAvKgogICogZG91YmxlX2xvY2tfYmFsYW5jZSAtIGxvY2sgdGhlIGJ1c2llc3QgcnVucXVldWUsIHRoaXNfcnEgaXMgbG9ja2VkIGFscmVhZHkuCiAgKi8KLXN0YXRpYyB2b2lkIGRvdWJsZV9sb2NrX2JhbGFuY2UocnVucXVldWVfdCAqdGhpc19ycSwgcnVucXVldWVfdCAqYnVzaWVzdCkKK3N0YXRpYyB2b2lkIGRvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCiAJX19yZWxlYXNlcyh0aGlzX3JxLT5sb2NrKQogCV9fYWNxdWlyZXMoYnVzaWVzdC0+bG9jaykKIAlfX2FjcXVpcmVzKHRoaXNfcnEtPmxvY2spCkBAIC0xOTIxLDExICsxOTQyLDExIEBACiAgKiBhbGxvdyBkZXN0X2NwdSwgd2hpY2ggd2lsbCBmb3JjZSB0aGUgY3B1IG9udG8gZGVzdF9jcHUuICBUaGVuCiAgKiB0aGUgY3B1X2FsbG93ZWQgbWFzayBpcyByZXN0b3JlZC4KICAqLwotc3RhdGljIHZvaWQgc2NoZWRfbWlncmF0ZV90YXNrKHRhc2tfdCAqcCwgaW50IGRlc3RfY3B1KQorc3RhdGljIHZvaWQgc2NoZWRfbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGRlc3RfY3B1KQogewotCW1pZ3JhdGlvbl9yZXFfdCByZXE7Ci0JcnVucXVldWVfdCAqcnE7CisJc3RydWN0IG1pZ3JhdGlvbl9yZXEgcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJxICpycTsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJaWYgKCFjcHVfaXNzZXQoZGVzdF9jcHUsIHAtPmNwdXNfYWxsb3dlZCkKQEAgLTE5MzYsMTEgKzE5NTcsMTMgQEAKIAlpZiAobWlncmF0ZV90YXNrKHAsIGRlc3RfY3B1LCAmcmVxKSkgewogCQkvKiBOZWVkIHRvIHdhaXQgZm9yIG1pZ3JhdGlvbiB0aHJlYWQgKG1pZ2h0IGV4aXQ6IHRha2UgcmVmKS4gKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICptdCA9IHJxLT5taWdyYXRpb25fdGhyZWFkOworCiAJCWdldF90YXNrX3N0cnVjdChtdCk7CiAJCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogCQl3YWtlX3VwX3Byb2Nlc3MobXQpOwogCQlwdXRfdGFza19zdHJ1Y3QobXQpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZXEuZG9uZSk7CisKIAkJcmV0dXJuOwogCX0KIG91dDoKQEAgLTE5NjQsOSArMTk4Nyw5IEBACiAgKiBwdWxsX3Rhc2sgLSBtb3ZlIGEgdGFzayBmcm9tIGEgcmVtb3RlIHJ1bnF1ZXVlIHRvIHRoZSBsb2NhbCBydW5xdWV1ZS4KICAqIEJvdGggcnVucXVldWVzIG11c3QgYmUgbG9ja2VkLgogICovCi1zdGF0aWMKLXZvaWQgcHVsbF90YXNrKHJ1bnF1ZXVlX3QgKnNyY19ycSwgcHJpb19hcnJheV90ICpzcmNfYXJyYXksIHRhc2tfdCAqcCwKLQkgICAgICAgcnVucXVldWVfdCAqdGhpc19ycSwgcHJpb19hcnJheV90ICp0aGlzX2FycmF5LCBpbnQgdGhpc19jcHUpCitzdGF0aWMgdm9pZCBwdWxsX3Rhc2soc3RydWN0IHJxICpzcmNfcnEsIHN0cnVjdCBwcmlvX2FycmF5ICpzcmNfYXJyYXksCisJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICp0aGlzX3JxLAorCQkgICAgICBzdHJ1Y3QgcHJpb19hcnJheSAqdGhpc19hcnJheSwgaW50IHRoaXNfY3B1KQogewogCWRlcXVldWVfdGFzayhwLCBzcmNfYXJyYXkpOwogCWRlY19ucl9ydW5uaW5nKHAsIHNyY19ycSk7CkBAIC0xOTg3LDcgKzIwMTAsNyBAQAogICogY2FuX21pZ3JhdGVfdGFzayAtIG1heSB0YXNrIHAgZnJvbSBydW5xdWV1ZSBycSBiZSBtaWdyYXRlZCB0byB0aGlzX2NwdT8KICAqLwogc3RhdGljCi1pbnQgY2FuX21pZ3JhdGVfdGFzayh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxLCBpbnQgdGhpc19jcHUsCitpbnQgY2FuX21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIGludCB0aGlzX2NwdSwKIAkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBpZGxlX3R5cGUgaWRsZSwKIAkJICAgICBpbnQgKmFsbF9waW5uZWQpCiB7CkBAIC0yMDE5LDYgKzIwNDIsNyBAQAogfQogCiAjZGVmaW5lIHJxX2Jlc3RfcHJpbyhycSkgbWluKChycSktPmN1cnItPnByaW8sIChycSktPmJlc3RfZXhwaXJlZF9wcmlvKQorCiAvKgogICogbW92ZV90YXNrcyB0cmllcyB0byBtb3ZlIHVwIHRvIG1heF9ucl9tb3ZlIHRhc2tzIGFuZCBtYXhfbG9hZF9tb3ZlIHdlaWdodGVkCiAgKiBsb2FkIGZyb20gYnVzaWVzdCB0byB0aGlzX3JxLCBhcyBwYXJ0IG9mIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiB3aXRoaW4KQEAgLTIwMjYsMTggKzIwNTAsMTcgQEAKICAqCiAgKiBDYWxsZWQgd2l0aCBib3RoIHJ1bnF1ZXVlcyBsb2NrZWQuCiAgKi8KLXN0YXRpYyBpbnQgbW92ZV90YXNrcyhydW5xdWV1ZV90ICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHJ1bnF1ZXVlX3QgKmJ1c2llc3QsCitzdGF0aWMgaW50IG1vdmVfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbnJfbW92ZSwgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAogCQkgICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBpZGxlX3R5cGUgaWRsZSwKIAkJICAgICAgaW50ICphbGxfcGlubmVkKQogewotCXByaW9fYXJyYXlfdCAqYXJyYXksICpkc3RfYXJyYXk7CisJaW50IGlkeCwgcHVsbGVkID0gMCwgcGlubmVkID0gMCwgdGhpc19iZXN0X3ByaW8sIGJlc3RfcHJpbywKKwkgICAgYmVzdF9wcmlvX3NlZW4sIHNraXBfZm9yX2xvYWQ7CisJc3RydWN0IHByaW9fYXJyYXkgKmFycmF5LCAqZHN0X2FycmF5OwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpjdXJyOwotCWludCBpZHgsIHB1bGxlZCA9IDAsIHBpbm5lZCA9IDAsIHRoaXNfYmVzdF9wcmlvLCBidXNpZXN0X2Jlc3RfcHJpbzsKLQlpbnQgYnVzaWVzdF9iZXN0X3ByaW9fc2VlbjsKLQlpbnQgc2tpcF9mb3JfbG9hZDsgLyogc2tpcCB0aGUgdGFzayBiYXNlZCBvbiB3ZWlnaHRlZCBsb2FkIGlzc3VlcyAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdG1wOwogCWxvbmcgcmVtX2xvYWRfbW92ZTsKLQl0YXNrX3QgKnRtcDsKIAogCWlmIChtYXhfbnJfbW92ZSA9PSAwIHx8IG1heF9sb2FkX21vdmUgPT0gMCkKIAkJZ290byBvdXQ7CkBAIC0yMDQ1LDE1ICsyMDY4LDE1IEBACiAJcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21vdmU7CiAJcGlubmVkID0gMTsKIAl0aGlzX2Jlc3RfcHJpbyA9IHJxX2Jlc3RfcHJpbyh0aGlzX3JxKTsKLQlidXNpZXN0X2Jlc3RfcHJpbyA9IHJxX2Jlc3RfcHJpbyhidXNpZXN0KTsKKwliZXN0X3ByaW8gPSBycV9iZXN0X3ByaW8oYnVzaWVzdCk7CiAJLyoKIAkgKiBFbmFibGUgaGFuZGxpbmcgb2YgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB0YXNrCiAJICogd2l0aCB0aGUgYmVzdCBwcmlvcml0eS4gICBJZiB0aGUgY3VycmVudCBydW5uaW5nIHRhc2sgaXMgb25lCi0JICogb2YgdGhvc2Ugd2l0aCBwcmlvPT1idXNpZXN0X2Jlc3RfcHJpbyB3ZSBrbm93IGl0IHdvbid0IGJlIG1vdmVkCisJICogb2YgdGhvc2Ugd2l0aCBwcmlvPT1iZXN0X3ByaW8gd2Uga25vdyBpdCB3b24ndCBiZSBtb3ZlZAogCSAqIGFuZCB0aGVyZWZvcmUgaXQncyBzYWZlIHRvIG92ZXJyaWRlIHRoZSBza2lwIChiYXNlZCBvbiBsb2FkKSBvZgogCSAqIGFueSB0YXNrIHdlIGZpbmQgd2l0aCB0aGF0IHByaW8uCiAJICovCi0JYnVzaWVzdF9iZXN0X3ByaW9fc2VlbiA9IGJ1c2llc3RfYmVzdF9wcmlvID09IGJ1c2llc3QtPmN1cnItPnByaW87CisJYmVzdF9wcmlvX3NlZW4gPSBiZXN0X3ByaW8gPT0gYnVzaWVzdC0+Y3Vyci0+cHJpbzsKIAogCS8qCiAJICogV2UgZmlyc3QgY29uc2lkZXIgZXhwaXJlZCB0YXNrcy4gVGhvc2Ugd2lsbCBsaWtlbHkgbm90IGJlCkBAIC0yMDg5LDcgKzIxMTIsNyBAQAogCWhlYWQgPSBhcnJheS0+cXVldWUgKyBpZHg7CiAJY3VyciA9IGhlYWQtPnByZXY7CiBza2lwX3F1ZXVlOgotCXRtcCA9IGxpc3RfZW50cnkoY3VyciwgdGFza190LCBydW5fbGlzdCk7CisJdG1wID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ1bl9saXN0KTsKIAogCWN1cnIgPSBjdXJyLT5wcmV2OwogCkBAIC0yMTAwLDEwICsyMTIzLDExIEBACiAJICovCiAJc2tpcF9mb3JfbG9hZCA9IHRtcC0+bG9hZF93ZWlnaHQgPiByZW1fbG9hZF9tb3ZlOwogCWlmIChza2lwX2Zvcl9sb2FkICYmIGlkeCA8IHRoaXNfYmVzdF9wcmlvKQotCQlza2lwX2Zvcl9sb2FkID0gIWJ1c2llc3RfYmVzdF9wcmlvX3NlZW4gJiYgaWR4ID09IGJ1c2llc3RfYmVzdF9wcmlvOworCQlza2lwX2Zvcl9sb2FkID0gIWJlc3RfcHJpb19zZWVuICYmIGlkeCA9PSBiZXN0X3ByaW87CiAJaWYgKHNraXBfZm9yX2xvYWQgfHwKIAkgICAgIWNhbl9taWdyYXRlX3Rhc2sodG1wLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKSB7Ci0JCWJ1c2llc3RfYmVzdF9wcmlvX3NlZW4gfD0gaWR4ID09IGJ1c2llc3RfYmVzdF9wcmlvOworCisJCWJlc3RfcHJpb19zZWVuIHw9IGlkeCA9PSBiZXN0X3ByaW87CiAJCWlmIChjdXJyICE9IGhlYWQpCiAJCQlnb3RvIHNraXBfcXVldWU7CiAJCWlkeCsrOwpAQCAtMjE0Niw4ICsyMTcwLDggQEAKIAogLyoKICAqIGZpbmRfYnVzaWVzdF9ncm91cCBmaW5kcyBhbmQgcmV0dXJucyB0aGUgYnVzaWVzdCBDUFUgZ3JvdXAgd2l0aGluIHRoZQotICogZG9tYWluLiBJdCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUKLSAqIG1vdmVkIHRvIHJlc3RvcmUgYmFsYW5jZSB2aWEgdGhlIGltYmFsYW5jZSBwYXJhbWV0ZXIuCisgKiBkb21haW4uIEl0IGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoCisgKiBzaG91bGQgYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlIHZpYSB0aGUgaW1iYWxhbmNlIHBhcmFtZXRlci4KICAqLwogc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqCiBmaW5kX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKQEAgLTIxODgsNyArMjIxMiw3IEBACiAJCXN1bV93ZWlnaHRlZF9sb2FkID0gc3VtX25yX3J1bm5pbmcgPSBhdmdfbG9hZCA9IDA7CiAKIAkJZm9yX2VhY2hfY3B1X21hc2soaSwgZ3JvdXAtPmNwdW1hc2spIHsKLQkJCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGkpOworCQkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKIAogCQkJaWYgKCpzZF9pZGxlICYmICFpZGxlX2NwdShpKSkKIAkJCQkqc2RfaWRsZSA9IDA7CkBAIC0yMjY5LDcgKzIyOTMsNyBAQAogIAkJICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCiAgCQkgKiBmcm9tIG90aGVyIGdyb3VwIGFuZCBzYXZlIG1vcmUgcG93ZXIKICAJCSAqLwotIAkJaWYgKHN1bV9ucl9ydW5uaW5nIDw9IGdyb3VwX2NhcGFjaXR5IC0gMSkKKyAJCWlmIChzdW1fbnJfcnVubmluZyA8PSBncm91cF9jYXBhY2l0eSAtIDEpIHsKICAJCQlpZiAoc3VtX25yX3J1bm5pbmcgPiBsZWFkZXJfbnJfcnVubmluZyB8fAogIAkJCSAgICAoc3VtX25yX3J1bm5pbmcgPT0gbGVhZGVyX25yX3J1bm5pbmcgJiYKICAJCQkgICAgIGZpcnN0X2NwdShncm91cC0+Y3B1bWFzaykgPgpAQCAtMjI3Nyw3ICsyMzAxLDcgQEAKICAJCQkJZ3JvdXBfbGVhZGVyID0gZ3JvdXA7CiAgCQkJCWxlYWRlcl9ucl9ydW5uaW5nID0gc3VtX25yX3J1bm5pbmc7CiAgCQkJfQotCisJCX0KIGdyb3VwX25leHQ6CiAjZW5kaWYKIAkJZ3JvdXAgPSBncm91cC0+bmV4dDsKQEAgLTIzMzIsOCArMjM1Niw3IEBACiAJICogbW92ZWQKIAkgKi8KIAlpZiAoKmltYmFsYW5jZSA8IGJ1c2llc3RfbG9hZF9wZXJfdGFzaykgewotCQl1bnNpZ25lZCBsb25nIHB3cl9ub3csIHB3cl9tb3ZlOwotCQl1bnNpZ25lZCBsb25nIHRtcDsKKwkJdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3csIHB3cl9tb3ZlOwogCQl1bnNpZ25lZCBpbnQgaW1ibjsKIAogc21hbGxfaW1iYWxhbmNlOgpAQCAtMjQwNSwyMiArMjQyOCwyMyBAQAogLyoKICAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCiAgKi8KLXN0YXRpYyBydW5xdWV1ZV90ICpmaW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKLQllbnVtIGlkbGVfdHlwZSBpZGxlLCB1bnNpZ25lZCBsb25nIGltYmFsYW5jZSkKK3N0YXRpYyBzdHJ1Y3QgcnEgKgorZmluZF9idXNpZXN0X3F1ZXVlKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGVudW0gaWRsZV90eXBlIGlkbGUsCisJCSAgIHVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlKQogeworCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEwsICpycTsKIAl1bnNpZ25lZCBsb25nIG1heF9sb2FkID0gMDsKLQlydW5xdWV1ZV90ICpidXNpZXN0ID0gTlVMTCwgKnJxaTsKIAlpbnQgaTsKIAogCWZvcl9lYWNoX2NwdV9tYXNrKGksIGdyb3VwLT5jcHVtYXNrKSB7Ci0JCXJxaSA9IGNwdV9ycShpKTsKKwkJcnEgPSBjcHVfcnEoaSk7CiAKLQkJaWYgKHJxaS0+bnJfcnVubmluZyA9PSAxICYmIHJxaS0+cmF3X3dlaWdodGVkX2xvYWQgPiBpbWJhbGFuY2UpCisJCWlmIChycS0+bnJfcnVubmluZyA9PSAxICYmIHJxLT5yYXdfd2VpZ2h0ZWRfbG9hZCA+IGltYmFsYW5jZSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChycWktPnJhd193ZWlnaHRlZF9sb2FkID4gbWF4X2xvYWQpIHsKLQkJCW1heF9sb2FkID0gcnFpLT5yYXdfd2VpZ2h0ZWRfbG9hZDsKLQkJCWJ1c2llc3QgPSBycWk7CisJCWlmIChycS0+cmF3X3dlaWdodGVkX2xvYWQgPiBtYXhfbG9hZCkgeworCQkJbWF4X2xvYWQgPSBycS0+cmF3X3dlaWdodGVkX2xvYWQ7CisJCQlidXNpZXN0ID0gcnE7CiAJCX0KIAl9CiAKQEAgLTI0MzMsMjIgKzI0NTcsMjQgQEAKICAqLwogI2RlZmluZSBNQVhfUElOTkVEX0lOVEVSVkFMCTUxMgogCi0jZGVmaW5lIG1pbnVzXzFfb3JfemVybyhuKSAoKG4pID4gMCA/IChuKSAtIDEgOiAwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1pbnVzXzFfb3JfemVybyh1bnNpZ25lZCBsb25nIG4pCit7CisJcmV0dXJuIG4gPiAwID8gbiAtIDEgOiAwOworfQorCiAvKgogICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQogICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgogICoKICAqIENhbGxlZCB3aXRoIHRoaXNfcnEgdW5sb2NrZWQuCiAgKi8KLXN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgcnVucXVldWVfdCAqdGhpc19ycSwKK3N0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gaWRsZV90eXBlIGlkbGUpCiB7CisJaW50IG5yX21vdmVkLCBhbGxfcGlubmVkID0gMCwgYWN0aXZlX2JhbGFuY2UgPSAwLCBzZF9pZGxlID0gMDsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwotCXJ1bnF1ZXVlX3QgKmJ1c2llc3Q7CiAJdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7Ci0JaW50IG5yX21vdmVkLCBhbGxfcGlubmVkID0gMDsKLQlpbnQgYWN0aXZlX2JhbGFuY2UgPSAwOwotCWludCBzZF9pZGxlID0gMDsKKwlzdHJ1Y3QgcnEgKmJ1c2llc3Q7CiAKIAlpZiAoaWRsZSAhPSBOT1RfSURMRSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgogCSAgICAhc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCkBAIC0yNDgyLDggKzI1MDgsOCBAQAogCQkgKi8KIAkJZG91YmxlX3JxX2xvY2sodGhpc19ycSwgYnVzaWVzdCk7CiAJCW5yX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQkJbWludXNfMV9vcl96ZXJvKGJ1c2llc3QtPm5yX3J1bm5pbmcpLAotCQkJCQlpbWJhbGFuY2UsIHNkLCBpZGxlLCAmYWxsX3Bpbm5lZCk7CisJCQkJICAgICAgbWludXNfMV9vcl96ZXJvKGJ1c2llc3QtPm5yX3J1bm5pbmcpLAorCQkJCSAgICAgIGltYmFsYW5jZSwgc2QsIGlkbGUsICZhbGxfcGlubmVkKTsKIAkJZG91YmxlX3JxX3VubG9jayh0aGlzX3JxLCBidXNpZXN0KTsKIAogCQkvKiBBbGwgdGFza3Mgb24gdGhpcyBydW5xdWV1ZSB3ZXJlIHBpbm5lZCBieSBDUFUgYWZmaW5pdHkgKi8KQEAgLTI1NTYsNyArMjU4Miw4IEBACiAJCQkoc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBzZC0+bWF4X2ludGVydmFsKSkKIAkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgKj0gMjsKIAotCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJiAhc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCisJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJCQkhc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCiAJCXJldHVybiAtMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1NjgsMTEgKzI1OTUsMTEgQEAKICAqIENhbGxlZCBmcm9tIHNjaGVkdWxlIHdoZW4gdGhpc19ycSBpcyBhYm91dCB0byBiZWNvbWUgaWRsZSAoTkVXTFlfSURMRSkuCiAgKiB0aGlzX3JxIGlzIGxvY2tlZC4KICAqLwotc3RhdGljIGludCBsb2FkX2JhbGFuY2VfbmV3aWRsZShpbnQgdGhpc19jcHUsIHJ1bnF1ZXVlX3QgKnRoaXNfcnEsCi0JCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCitzdGF0aWMgaW50Citsb2FkX2JhbGFuY2VfbmV3aWRsZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCiB7CiAJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKLQlydW5xdWV1ZV90ICpidXNpZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwogCWludCBucl9tb3ZlZCA9IDA7CiAJaW50IHNkX2lkbGUgPSAwOwpAQCAtMjYxOCw5ICsyNjQ1LDExIEBACiAKIG91dF9iYWxhbmNlZDoKIAlzY2hlZHN0YXRfaW5jKHNkLCBsYl9iYWxhbmNlZFtORVdMWV9JRExFXSk7Ci0JaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmICFzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKKwlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKKwkJCQkJIXNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKQogCQlyZXR1cm4gLTE7CiAJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjI4LDE2ICsyNjU3LDE1IEBACiAgKiBpZGxlX2JhbGFuY2UgaXMgY2FsbGVkIGJ5IHNjaGVkdWxlKCkgaWYgdGhpc19jcHUgaXMgYWJvdXQgdG8gYmVjb21lCiAgKiBpZGxlLiBBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb3RoZXIgQ1BVcy4KICAqLwotc3RhdGljIHZvaWQgaWRsZV9iYWxhbmNlKGludCB0aGlzX2NwdSwgcnVucXVldWVfdCAqdGhpc19ycSkKK3N0YXRpYyB2b2lkIGlkbGVfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKIAkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkgewotCQkJaWYgKGxvYWRfYmFsYW5jZV9uZXdpZGxlKHRoaXNfY3B1LCB0aGlzX3JxLCBzZCkpIHsKLQkJCQkvKiBXZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzbyBzdG9wIHNlYXJjaGluZyAqLworCQkJLyogSWYgd2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc3RvcCBzZWFyY2hpbmc6ICovCisJCQlpZiAobG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsIHRoaXNfcnEsIHNkKSkKIAkJCQlicmVhazsKLQkJCX0KIAkJfQogCX0KIH0KQEAgLTI2NTAsMTQgKzI2NzgsMTQgQEAKICAqCiAgKiBDYWxsZWQgd2l0aCBidXNpZXN0X3JxIGxvY2tlZC4KICAqLwotc3RhdGljIHZvaWQgYWN0aXZlX2xvYWRfYmFsYW5jZShydW5xdWV1ZV90ICpidXNpZXN0X3JxLCBpbnQgYnVzaWVzdF9jcHUpCitzdGF0aWMgdm9pZCBhY3RpdmVfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqYnVzaWVzdF9ycSwgaW50IGJ1c2llc3RfY3B1KQogewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCXJ1bnF1ZXVlX3QgKnRhcmdldF9ycTsKIAlpbnQgdGFyZ2V0X2NwdSA9IGJ1c2llc3RfcnEtPnB1c2hfY3B1OworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCXN0cnVjdCBycSAqdGFyZ2V0X3JxOwogCisJLyogSXMgdGhlcmUgYW55IHRhc2sgdG8gbW92ZT8gKi8KIAlpZiAoYnVzaWVzdF9ycS0+bnJfcnVubmluZyA8PSAxKQotCQkvKiBubyB0YXNrIHRvIG1vdmUgKi8KIAkJcmV0dXJuOwogCiAJdGFyZ2V0X3JxID0gY3B1X3JxKHRhcmdldF9jcHUpOwpAQCAtMjY3NSwyMSArMjcwMywyMCBAQAogCS8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqLwogCWZvcl9lYWNoX2RvbWFpbih0YXJnZXRfY3B1LCBzZCkgewogCQlpZiAoKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkgJiYKLQkJCWNwdV9pc3NldChidXNpZXN0X2NwdSwgc2QtPnNwYW4pKQorCQkgICAgY3B1X2lzc2V0KGJ1c2llc3RfY3B1LCBzZC0+c3BhbikpCiAJCQkJYnJlYWs7CiAJfQogCi0JaWYgKHVubGlrZWx5KHNkID09IE5VTEwpKQotCQlnb3RvIG91dDsKKwlpZiAobGlrZWx5KHNkKSkgeworCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfY250KTsKIAotCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9jbnQpOwotCi0JaWYgKG1vdmVfdGFza3ModGFyZ2V0X3JxLCB0YXJnZXRfY3B1LCBidXNpZXN0X3JxLCAxLAotCQkJUlRQUklPX1RPX0xPQURfV0VJR0hUKDEwMCksIHNkLCBTQ0hFRF9JRExFLCBOVUxMKSkKLQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX3B1c2hlZCk7Ci0JZWxzZQotCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKLW91dDoKKwkJaWYgKG1vdmVfdGFza3ModGFyZ2V0X3JxLCB0YXJnZXRfY3B1LCBidXNpZXN0X3JxLCAxLAorCQkJICAgICAgIFJUUFJJT19UT19MT0FEX1dFSUdIVCgxMDApLCBzZCwgU0NIRURfSURMRSwKKwkJCSAgICAgICBOVUxMKSkKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9wdXNoZWQpOworCQllbHNlCisJCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKKwl9CiAJc3Bpbl91bmxvY2soJnRhcmdldF9ycS0+bG9jayk7CiB9CiAKQEAgLTI3MDIsMjMgKzI3MjksMjcgQEAKICAqIEJhbGFuY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMuCiAgKi8KIAotLyogRG9uJ3QgaGF2ZSBhbGwgYmFsYW5jaW5nIG9wZXJhdGlvbnMgZ29pbmcgb2ZmIGF0IG9uY2UgKi8KLSNkZWZpbmUgQ1BVX09GRlNFVChjcHUpIChIWiAqIGNwdSAvIE5SX0NQVVMpCi0KLXN0YXRpYyB2b2lkIHJlYmFsYW5jZV90aWNrKGludCB0aGlzX2NwdSwgcnVucXVldWVfdCAqdGhpc19ycSwKLQkJCSAgIGVudW0gaWRsZV90eXBlIGlkbGUpCisvKiBEb24ndCBoYXZlIGFsbCBiYWxhbmNpbmcgb3BlcmF0aW9ucyBnb2luZyBvZmYgYXQgb25jZTogKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHVfb2Zmc2V0KGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBvbGRfbG9hZCwgdGhpc19sb2FkOwotCXVuc2lnbmVkIGxvbmcgaiA9IGppZmZpZXMgKyBDUFVfT0ZGU0VUKHRoaXNfY3B1KTsKKwlyZXR1cm4gamlmZmllcyArIGNwdSAqIEhaIC8gTlJfQ1BVUzsKK30KKworc3RhdGljIHZvaWQKK3JlYmFsYW5jZV90aWNrKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBlbnVtIGlkbGVfdHlwZSBpZGxlKQoreworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkLCBpbnRlcnZhbCwgaiA9IGNwdV9vZmZzZXQodGhpc19jcHUpOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCWludCBpOworCWludCBpLCBzY2FsZTsKIAogCXRoaXNfbG9hZCA9IHRoaXNfcnEtPnJhd193ZWlnaHRlZF9sb2FkOwotCS8qIFVwZGF0ZSBvdXIgbG9hZCAqLwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBuZXdfbG9hZCA9IHRoaXNfbG9hZDsKLQkJaW50IHNjYWxlID0gMSA8PCBpOworCisJLyogVXBkYXRlIG91ciBsb2FkOiAqLworCWZvciAoaSA9IDAsIHNjYWxlID0gMTsgaSA8IDM7IGkrKywgc2NhbGUgPDw9IDEpIHsKKwkJdW5zaWduZWQgbG9uZyBvbGRfbG9hZCwgbmV3X2xvYWQ7CisKIAkJb2xkX2xvYWQgPSB0aGlzX3JxLT5jcHVfbG9hZFtpXTsKKwkJbmV3X2xvYWQgPSB0aGlzX2xvYWQ7CiAJCS8qCiAJCSAqIFJvdW5kIHVwIHRoZSBhdmVyYWdpbmcgZGl2aXNpb24gaWYgbG9hZCBpcyBpbmNyZWFzaW5nLiBUaGlzCiAJCSAqIHByZXZlbnRzIHVzIGZyb20gZ2V0dGluZyBzdHVjayBvbiA5IGlmIHRoZSBsb2FkIGlzIDEwLCBmb3IKQEAgLTI3MzAsOCArMjc2MSw2IEBACiAJfQogCiAJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewotCQl1bnNpZ25lZCBsb25nIGludGVydmFsOwotCiAJCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCiAJCQljb250aW51ZTsKIApAQCAtMjc2MSwxNyArMjc5MCwxOCBAQAogLyoKICAqIG9uIFVQIHdlIGRvIG5vdCBuZWVkIHRvIGJhbGFuY2UgYmV0d2VlbiBDUFVzOgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmViYWxhbmNlX3RpY2soaW50IGNwdSwgcnVucXVldWVfdCAqcnEsIGVudW0gaWRsZV90eXBlIGlkbGUpCitzdGF0aWMgaW5saW5lIHZvaWQgcmViYWxhbmNlX3RpY2soaW50IGNwdSwgc3RydWN0IHJxICpycSwgZW51bSBpZGxlX3R5cGUgaWRsZSkKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGxlX2JhbGFuY2UoaW50IGNwdSwgcnVucXVldWVfdCAqcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgaWRsZV9iYWxhbmNlKGludCBjcHUsIHN0cnVjdCBycSAqcnEpCiB7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgd2FrZV9wcmlvcml0eV9zbGVlcGVyKHJ1bnF1ZXVlX3QgKnJxKQorc3RhdGljIGlubGluZSBpbnQgd2FrZV9wcmlvcml0eV9zbGVlcGVyKHN0cnVjdCBycSAqcnEpCiB7CiAJaW50IHJldCA9IDA7CisKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCiAJc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJLyoKQEAgLTI3OTUsMjUgKzI4MjUsMjYgQEAKICAqIFRoaXMgaXMgY2FsbGVkIG9uIGNsb2NrIHRpY2tzIGFuZCBvbiBjb250ZXh0IHN3aXRjaGVzLgogICogQmFuayBpbiBwLT5zY2hlZF90aW1lIHRoZSBucyBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpY2sgb3Igc3dpdGNoLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2NwdV9jbG9jayh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbm93KQorc3RhdGljIGlubGluZSB2b2lkCit1cGRhdGVfY3B1X2Nsb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwgdW5zaWduZWQgbG9uZyBsb25nIG5vdykKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdCA9IG1heChwLT50aW1lc3RhbXAsIHJxLT50aW1lc3RhbXBfbGFzdF90aWNrKTsKLQlwLT5zY2hlZF90aW1lICs9IG5vdyAtIGxhc3Q7CisJcC0+c2NoZWRfdGltZSArPSBub3cgLSBtYXgocC0+dGltZXN0YW1wLCBycS0+dGltZXN0YW1wX2xhc3RfdGljayk7CiB9CiAKIC8qCiAgKiBSZXR1cm4gY3VycmVudC0+c2NoZWRfdGltZSBwbHVzIGFueSBtb3JlIG5zIG9uIHRoZSBzY2hlZF9jbG9jawogICogdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBiYW5rZWQuCiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50X3NjaGVkX3RpbWUoY29uc3QgdGFza190ICp0c2spCit1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudF9zY2hlZF90aW1lKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlucyA9IG1heCh0c2stPnRpbWVzdGFtcCwgdGFza19ycSh0c2spLT50aW1lc3RhbXBfbGFzdF90aWNrKTsKLQlucyA9IHRzay0+c2NoZWRfdGltZSArIChzY2hlZF9jbG9jaygpIC0gbnMpOworCW5zID0gbWF4KHAtPnRpbWVzdGFtcCwgdGFza19ycShwKS0+dGltZXN0YW1wX2xhc3RfdGljayk7CisJbnMgPSBwLT5zY2hlZF90aW1lICsgc2NoZWRfY2xvY2soKSAtIG5zOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCXJldHVybiBuczsKIH0KIApAQCAtMjgyNywxMSArMjg1OCwxNiBAQAogICogaW5jcmVhc2luZyBudW1iZXIgb2YgcnVubmluZyB0YXNrcy4gV2UgYWxzbyBpZ25vcmUgdGhlIGludGVyYWN0aXZpdHkKICAqIGlmIGEgYmV0dGVyIHN0YXRpY19wcmlvIHRhc2sgaGFzIGV4cGlyZWQ6CiAgKi8KLSNkZWZpbmUgRVhQSVJFRF9TVEFSVklORyhycSkgXAotCSgoU1RBUlZBVElPTl9MSU1JVCAmJiAoKHJxKS0+ZXhwaXJlZF90aW1lc3RhbXAgJiYgXAotCQkoamlmZmllcyAtIChycSktPmV4cGlyZWRfdGltZXN0YW1wID49IFwKLQkJCVNUQVJWQVRJT05fTElNSVQgKiAoKHJxKS0+bnJfcnVubmluZykgKyAxKSkpIHx8IFwKLQkJCSgocnEpLT5jdXJyLT5zdGF0aWNfcHJpbyA+IChycSktPmJlc3RfZXhwaXJlZF9wcmlvKSkKK3N0YXRpYyBpbmxpbmUgaW50IGV4cGlyZWRfc3RhcnZpbmcoc3RydWN0IHJxICpycSkKK3sKKwlpZiAocnEtPmN1cnItPnN0YXRpY19wcmlvID4gcnEtPmJlc3RfZXhwaXJlZF9wcmlvKQorCQlyZXR1cm4gMTsKKwlpZiAoIVNUQVJWQVRJT05fTElNSVQgfHwgIXJxLT5leHBpcmVkX3RpbWVzdGFtcCkKKwkJcmV0dXJuIDA7CisJaWYgKGppZmZpZXMgLSBycS0+ZXhwaXJlZF90aW1lc3RhbXAgPiBTVEFSVkFUSU9OX0xJTUlUICogcnEtPm5yX3J1bm5pbmcpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQogCiAvKgogICogQWNjb3VudCB1c2VyIGNwdSB0aW1lIHRvIGEgcHJvY2Vzcy4KQEAgLTI4NjQsNyArMjkwMCw3IEBACiAJCQkgY3B1dGltZV90IGNwdXRpbWUpCiB7CiAJc3RydWN0IGNwdV91c2FnZV9zdGF0ICpjcHVzdGF0ID0gJmtzdGF0X3RoaXNfY3B1LmNwdXN0YXQ7Ci0JcnVucXVldWVfdCAqcnEgPSB0aGlzX3JxKCk7CisJc3RydWN0IHJxICpycSA9IHRoaXNfcnEoKTsKIAljcHV0aW1lNjRfdCB0bXA7CiAKIAlwLT5zdGltZSA9IGNwdXRpbWVfYWRkKHAtPnN0aW1lLCBjcHV0aW1lKTsKQEAgLTI4OTQsNyArMjkzMCw3IEBACiB7CiAJc3RydWN0IGNwdV91c2FnZV9zdGF0ICpjcHVzdGF0ID0gJmtzdGF0X3RoaXNfY3B1LmNwdXN0YXQ7CiAJY3B1dGltZTY0X3QgdG1wID0gY3B1dGltZV90b19jcHV0aW1lNjQoc3RlYWwpOwotCXJ1bnF1ZXVlX3QgKnJxID0gdGhpc19ycSgpOworCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CiAKIAlpZiAocCA9PSBycS0+aWRsZSkgewogCQlwLT5zdGltZSA9IGNwdXRpbWVfYWRkKHAtPnN0aW1lLCBzdGVhbCk7CkBAIC0yOTE1LDEwICsyOTUxLDEwIEBACiAgKi8KIHZvaWQgc2NoZWR1bGVyX3RpY2sodm9pZCkKIHsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXJ1bnF1ZXVlX3QgKnJxID0gdGhpc19ycSgpOwotCXRhc2tfdCAqcCA9IGN1cnJlbnQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIG5vdyA9IHNjaGVkX2Nsb2NrKCk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAogCXVwZGF0ZV9jcHVfY2xvY2socCwgcnEsIG5vdyk7CiAKQEAgLTI5NjgsNyArMzAwNCw3IEBACiAKIAkJaWYgKCFycS0+ZXhwaXJlZF90aW1lc3RhbXApCiAJCQlycS0+ZXhwaXJlZF90aW1lc3RhbXAgPSBqaWZmaWVzOwotCQlpZiAoIVRBU0tfSU5URVJBQ1RJVkUocCkgfHwgRVhQSVJFRF9TVEFSVklORyhycSkpIHsKKwkJaWYgKCFUQVNLX0lOVEVSQUNUSVZFKHApIHx8IGV4cGlyZWRfc3RhcnZpbmcocnEpKSB7CiAJCQllbnF1ZXVlX3Rhc2socCwgcnEtPmV4cGlyZWQpOwogCQkJaWYgKHAtPnN0YXRpY19wcmlvIDwgcnEtPmJlc3RfZXhwaXJlZF9wcmlvKQogCQkJCXJxLT5iZXN0X2V4cGlyZWRfcHJpbyA9IHAtPnN0YXRpY19wcmlvOwpAQCAtMzAwNyw3ICszMDQzLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtldXBfYnVzeV9ydW5xdWV1ZShydW5xdWV1ZV90ICpycSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtldXBfYnVzeV9ydW5xdWV1ZShzdHJ1Y3QgcnEgKnJxKQogewogCS8qIElmIGFuIFNNVCBydW5xdWV1ZSBpcyBzbGVlcGluZyBkdWUgdG8gcHJpb3JpdHkgcmVhc29ucyB3YWtlIGl0IHVwICovCiAJaWYgKHJxLT5jdXJyID09IHJxLT5pZGxlICYmIHJxLT5ucl9ydW5uaW5nKQpAQCAtMzAzMyw3ICszMDY5LDcgQEAKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgc2QtPnNwYW4pIHsKLQkJcnVucXVldWVfdCAqc210X3JxID0gY3B1X3JxKGkpOworCQlzdHJ1Y3QgcnEgKnNtdF9ycSA9IGNwdV9ycShpKTsKIAogCQlpZiAoaSA9PSB0aGlzX2NwdSkKIAkJCWNvbnRpbnVlOwpAQCAtMzA1MCw3ICszMDg2LDggQEAKICAqIHV0aWxpemUsIGlmIGFub3RoZXIgdGFzayBydW5zIG9uIGEgc2libGluZy4gVGhpcyBtb2RlbHMgdGhlCiAgKiBzbG93ZG93biBlZmZlY3Qgb2Ygb3RoZXIgdGFza3MgcnVubmluZyBvbiBzaWJsaW5nczoKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNtdF9zbGljZSh0YXNrX3QgKnAsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzbXRfc2xpY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKIHsKIAlyZXR1cm4gcC0+dGltZV9zbGljZSAqICgxMDAgLSBzZC0+cGVyX2NwdV9nYWluKSAvIDEwMDsKIH0KQEAgLTMwNjEsNyArMzA5OCw4IEBACiAgKiBhY3F1aXJlIHRoZWlyIGxvY2suIEFzIHdlIG9ubHkgdHJ5bG9jayB0aGUgbm9ybWFsIGxvY2tpbmcgb3JkZXIgZG9lcyBub3QKICAqIG5lZWQgdG8gYmUgb2JleWVkLgogICovCi1zdGF0aWMgaW50IGRlcGVuZGVudF9zbGVlcGVyKGludCB0aGlzX2NwdSwgcnVucXVldWVfdCAqdGhpc19ycSwgdGFza190ICpwKQorc3RhdGljIGludAorZGVwZW5kZW50X3NsZWVwZXIoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICp0bXAsICpzZCA9IE5VTEw7CiAJaW50IHJldCA9IDAsIGk7CkBAIC0zMDgxLDggKzMxMTksOCBAQAogCQlyZXR1cm4gMDsKIAogCWZvcl9lYWNoX2NwdV9tYXNrKGksIHNkLT5zcGFuKSB7Ci0JCXJ1bnF1ZXVlX3QgKnNtdF9ycTsKLQkJdGFza190ICpzbXRfY3VycjsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpzbXRfY3VycjsKKwkJc3RydWN0IHJxICpzbXRfcnE7CiAKIAkJaWYgKGkgPT0gdGhpc19jcHUpCiAJCQljb250aW51ZTsKQEAgLTMxMjcsOSArMzE2NSw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9zbGVlcGluZ19kZXBlbmRlbnQoaW50IHRoaXNfY3B1KQogewogfQotCi1zdGF0aWMgaW5saW5lIGludCBkZXBlbmRlbnRfc2xlZXBlcihpbnQgdGhpc19jcHUsIHJ1bnF1ZXVlX3QgKnRoaXNfcnEsCi0JCQkJCXRhc2tfdCAqcCkKK3N0YXRpYyBpbmxpbmUgaW50CitkZXBlbmRlbnRfc2xlZXBlcihpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiAwOwogfQpAQCAtMzE0MiwxMiArMzE3OSwxMyBAQAogCS8qCiAJICogVW5kZXJmbG93PwogCSAqLwotCUJVR19PTigocHJlZW1wdF9jb3VudCgpIDwgMCkpOworCWlmIChERUJVR19MT0NLU19XQVJOX09OKChwcmVlbXB0X2NvdW50KCkgPCAwKSkpCisJCXJldHVybjsKIAlwcmVlbXB0X2NvdW50KCkgKz0gdmFsOwogCS8qCiAJICogU3BpbmxvY2sgY291bnQgb3ZlcmZsb3dpbmcgc29vbj8KIAkgKi8KLQlCVUdfT04oKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfTUFTSykgPj0gUFJFRU1QVF9NQVNLLTEwKTsKKwlERUJVR19MT0NLU19XQVJOX09OKChwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX01BU0spID49IFBSRUVNUFRfTUFTSy0xMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGFkZF9wcmVlbXB0X2NvdW50KTsKIApAQCAtMzE1NiwxMSArMzE5NCwxNSBAQAogCS8qCiAJICogVW5kZXJmbG93PwogCSAqLwotCUJVR19PTih2YWwgPiBwcmVlbXB0X2NvdW50KCkpOworCWlmIChERUJVR19MT0NLU19XQVJOX09OKHZhbCA+IHByZWVtcHRfY291bnQoKSkpCisJCXJldHVybjsKIAkvKgogCSAqIElzIHRoZSBzcGlubG9jayBwb3J0aW9uIHVuZGVyZmxvd2luZz8KIAkgKi8KLQlCVUdfT04oKHZhbCA8IFBSRUVNUFRfTUFTSykgJiYgIShwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX01BU0spKTsKKwlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTigodmFsIDwgUFJFRU1QVF9NQVNLKSAmJgorCQkJIShwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX01BU0spKSkKKwkJcmV0dXJuOworCiAJcHJlZW1wdF9jb3VudCgpIC09IHZhbDsKIH0KIEVYUE9SVF9TWU1CT0woc3ViX3ByZWVtcHRfY291bnQpOwpAQCAtMzE3OCwxNCArMzIyMCwxNCBAQAogICovCiBhc21saW5rYWdlIHZvaWQgX19zY2hlZCBzY2hlZHVsZSh2b2lkKQogewotCWxvbmcgKnN3aXRjaF9jb3VudDsKLQl0YXNrX3QgKnByZXYsICpuZXh0OwotCXJ1bnF1ZXVlX3QgKnJxOwotCXByaW9fYXJyYXlfdCAqYXJyYXk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCAqbmV4dDsKKwlzdHJ1Y3QgcHJpb19hcnJheSAqYXJyYXk7CiAJc3RydWN0IGxpc3RfaGVhZCAqcXVldWU7CiAJdW5zaWduZWQgbG9uZyBsb25nIG5vdzsKIAl1bnNpZ25lZCBsb25nIHJ1bl90aW1lOwogCWludCBjcHUsIGlkeCwgbmV3X3ByaW87CisJbG9uZyAqc3dpdGNoX2NvdW50OworCXN0cnVjdCBycSAqcnE7CiAKIAkvKgogCSAqIFRlc3QgaWYgd2UgYXJlIGF0b21pYy4gIFNpbmNlIGRvX2V4aXQoKSBuZWVkcyB0byBjYWxsIGludG8KQEAgLTMyNzUsNyArMzMxNyw3IEBACiAKIAlpZHggPSBzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKIAlxdWV1ZSA9IGFycmF5LT5xdWV1ZSArIGlkeDsKLQluZXh0ID0gbGlzdF9lbnRyeShxdWV1ZS0+bmV4dCwgdGFza190LCBydW5fbGlzdCk7CisJbmV4dCA9IGxpc3RfZW50cnkocXVldWUtPm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnVuX2xpc3QpOwogCiAJaWYgKCFydF90YXNrKG5leHQpICYmIGludGVyYWN0aXZlX3NsZWVwKG5leHQtPnNsZWVwX3R5cGUpKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBkZWx0YSA9IG5vdyAtIG5leHQtPnRpbWVzdGFtcDsKQEAgLTMzMzgsNyArMzM4MCw2IEBACiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKQogCQlnb3RvIG5lZWRfcmVzY2hlZDsKIH0KLQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZSk7CiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMzM4Myw3ICszNDI0LDYgQEAKIAlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpCiAJCWdvdG8gbmVlZF9yZXNjaGVkOwogfQotCiBFWFBPUlRfU1lNQk9MKHByZWVtcHRfc2NoZWR1bGUpOwogCiAvKgpAQCAtMzQzMiwxMCArMzQ3Miw4IEBACiBpbnQgZGVmYXVsdF93YWtlX2Z1bmN0aW9uKHdhaXRfcXVldWVfdCAqY3VyciwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsCiAJCQkgIHZvaWQgKmtleSkKIHsKLQl0YXNrX3QgKnAgPSBjdXJyLT5wcml2YXRlOwotCXJldHVybiB0cnlfdG9fd2FrZV91cChwLCBtb2RlLCBzeW5jKTsKKwlyZXR1cm4gdHJ5X3RvX3dha2VfdXAoY3Vyci0+cHJpdmF0ZSwgbW9kZSwgc3luYyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVmYXVsdF93YWtlX2Z1bmN0aW9uKTsKIAogLyoKQEAgLTM0NTMsMTMgKzM0OTEsMTEgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpuZXh0OwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgbmV4dCwgJnEtPnRhc2tfbGlzdCkgewotCQl3YWl0X3F1ZXVlX3QgKmN1cnI7Ci0JCXVuc2lnbmVkIGZsYWdzOwotCQljdXJyID0gbGlzdF9lbnRyeSh0bXAsIHdhaXRfcXVldWVfdCwgdGFza19saXN0KTsKLQkJZmxhZ3MgPSBjdXJyLT5mbGFnczsKKwkJd2FpdF9xdWV1ZV90ICpjdXJyID0gbGlzdF9lbnRyeSh0bXAsIHdhaXRfcXVldWVfdCwgdGFza19saXN0KTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjdXJyLT5mbGFnczsKKwogCQlpZiAoY3Vyci0+ZnVuYyhjdXJyLCBtb2RlLCBzeW5jLCBrZXkpICYmCi0JCSAgICAoZmxhZ3MgJiBXUV9GTEFHX0VYQ0xVU0lWRSkgJiYKLQkJICAgICEtLW5yX2V4Y2x1c2l2ZSkKKwkJCQkoZmxhZ3MgJiBXUV9GTEFHX0VYQ0xVU0lWRSkgJiYgIS0tbnJfZXhjbHVzaXZlKQogCQkJYnJlYWs7CiAJfQogfQpAQCAtMzQ4MCw3ICszNTE2LDYgQEAKIAlfX3dha2VfdXBfY29tbW9uKHEsIG1vZGUsIG5yX2V4Y2x1c2l2ZSwgMCwga2V5KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woX193YWtlX3VwKTsKIAogLyoKQEAgLTM1NDksNiArMzU4NCw3IEBACiB2b2lkIGZhc3RjYWxsIF9fc2NoZWQgd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqeCkKIHsKIAltaWdodF9zbGVlcCgpOworCiAJc3Bpbl9sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKIAlpZiAoIXgtPmRvbmUpIHsKIAkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CkBAIC0zNjkzLDcgKzM3MjksNiBAQAogCXNjaGVkdWxlKCk7CiAJU0xFRVBfT05fVEFJTAogfQotCiBFWFBPUlRfU1lNQk9MKGludGVycnVwdGlibGVfc2xlZXBfb24pOwogCiBsb25nIGZhc3RjYWxsIF9fc2NoZWQKQEAgLTM3MDksNyArMzc0NCw2IEBACiAKIAlyZXR1cm4gdGltZW91dDsKIH0KLQogRVhQT1JUX1NZTUJPTChpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQpOwogCiB2b2lkIGZhc3RjYWxsIF9fc2NoZWQgc2xlZXBfb24od2FpdF9xdWV1ZV9oZWFkX3QgKnEpCkBAIC0zNzIyLDcgKzM3NTYsNiBAQAogCXNjaGVkdWxlKCk7CiAJU0xFRVBfT05fVEFJTAogfQotCiBFWFBPUlRfU1lNQk9MKHNsZWVwX29uKTsKIAogbG9uZyBmYXN0Y2FsbCBfX3NjaGVkIHNsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIGxvbmcgdGltZW91dCkKQEAgLTM3NTIsMTEgKzM3ODUsMTEgQEAKICAqCiAgKiBVc2VkIGJ5IHRoZSBydF9tdXRleCBjb2RlIHRvIGltcGxlbWVudCBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2dpYy4KICAqLwotdm9pZCBydF9tdXRleF9zZXRwcmlvKHRhc2tfdCAqcCwgaW50IHByaW8pCit2b2lkIHJ0X211dGV4X3NldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcHJpbykKIHsKKwlzdHJ1Y3QgcHJpb19hcnJheSAqYXJyYXk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlwcmlvX2FycmF5X3QgKmFycmF5OwotCXJ1bnF1ZXVlX3QgKnJxOworCXN0cnVjdCBycSAqcnE7CiAJaW50IG9sZHByaW87CiAKIAlCVUdfT04ocHJpbyA8IDAgfHwgcHJpbyA+IE1BWF9QUklPKTsKQEAgLTM3OTMsMTIgKzM4MjYsMTIgQEAKIAogI2VuZGlmCiAKLXZvaWQgc2V0X3VzZXJfbmljZSh0YXNrX3QgKnAsIGxvbmcgbmljZSkKK3ZvaWQgc2V0X3VzZXJfbmljZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGxvbmcgbmljZSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXByaW9fYXJyYXlfdCAqYXJyYXk7Ci0JcnVucXVldWVfdCAqcnE7CisJc3RydWN0IHByaW9fYXJyYXkgKmFycmF5OwogCWludCBvbGRfcHJpbywgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcnEgKnJxOwogCiAJaWYgKFRBU0tfTklDRShwKSA9PSBuaWNlIHx8IG5pY2UgPCAtMjAgfHwgbmljZSA+IDE5KQogCQlyZXR1cm47CkBAIC0zODQ5LDEwICszODgyLDExIEBACiAgKiBAcDogdGFzawogICogQG5pY2U6IG5pY2UgdmFsdWUKICAqLwotaW50IGNhbl9uaWNlKGNvbnN0IHRhc2tfdCAqcCwgY29uc3QgaW50IG5pY2UpCitpbnQgY2FuX25pY2UoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBpbnQgbmljZSkKIHsKIAkvKiBjb252ZXJ0IG5pY2UgdmFsdWUgWzE5LC0yMF0gdG8gcmxpbWl0IHN0eWxlIHZhbHVlIFsxLDQwXSAqLwogCWludCBuaWNlX3JsaW0gPSAyMCAtIG5pY2U7CisKIAlyZXR1cm4gKG5pY2VfcmxpbSA8PSBwLT5zaWduYWwtPnJsaW1bUkxJTUlUX05JQ0VdLnJsaW1fY3VyIHx8CiAJCWNhcGFibGUoQ0FQX1NZU19OSUNFKSk7CiB9CkBAIC0zODY4LDggKzM5MDIsNyBAQAogICovCiBhc21saW5rYWdlIGxvbmcgc3lzX25pY2UoaW50IGluY3JlbWVudCkKIHsKLQlpbnQgcmV0dmFsOwotCWxvbmcgbmljZTsKKwlsb25nIG5pY2UsIHJldHZhbDsKIAogCS8qCiAJICogU2V0cHJpb3JpdHkgbWlnaHQgY2hhbmdlIG91ciBwcmlvcml0eSBhdCB0aGUgc2FtZSBtb21lbnQuCkBAIC0zOTA4LDcgKzM5NDEsNyBAQAogICogUlQgdGFza3MgYXJlIG9mZnNldCBieSAtMjAwLiBOb3JtYWwgdGFza3MgYXJlIGNlbnRlcmVkCiAgKiBhcm91bmQgMCwgdmFsdWUgZ29lcyBmcm9tIC0xNiB0byArMTUuCiAgKi8KLWludCB0YXNrX3ByaW8oY29uc3QgdGFza190ICpwKQoraW50IHRhc2tfcHJpbyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJcmV0dXJuIHAtPnByaW8gLSBNQVhfUlRfUFJJTzsKIH0KQEAgLTM5MTcsNyArMzk1MCw3IEBACiAgKiB0YXNrX25pY2UgLSByZXR1cm4gdGhlIG5pY2UgdmFsdWUgb2YgYSBnaXZlbiB0YXNrLgogICogQHA6IHRoZSB0YXNrIGluIHF1ZXN0aW9uLgogICovCi1pbnQgdGFza19uaWNlKGNvbnN0IHRhc2tfdCAqcCkKK2ludCB0YXNrX25pY2UoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBUQVNLX05JQ0UocCk7CiB9CkBAIC0zOTM2LDcgKzM5NjksNyBAQAogICogaWRsZV90YXNrIC0gcmV0dXJuIHRoZSBpZGxlIHRhc2sgZm9yIGEgZ2l2ZW4gY3B1LgogICogQGNwdTogdGhlIHByb2Nlc3NvciBpbiBxdWVzdGlvbi4KICAqLwotdGFza190ICppZGxlX3Rhc2soaW50IGNwdSkKK3N0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZV90YXNrKGludCBjcHUpCiB7CiAJcmV0dXJuIGNwdV9ycShjcHUpLT5pZGxlOwogfQpAQCAtMzk0NSw3ICszOTc4LDcgQEAKICAqIGZpbmRfcHJvY2Vzc19ieV9waWQgLSBmaW5kIGEgcHJvY2VzcyB3aXRoIGEgbWF0Y2hpbmcgUElEIHZhbHVlLgogICogQHBpZDogdGhlIHBpZCBpbiBxdWVzdGlvbi4KICAqLwotc3RhdGljIGlubGluZSB0YXNrX3QgKmZpbmRfcHJvY2Vzc19ieV9waWQocGlkX3QgcGlkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfcHJvY2Vzc19ieV9waWQocGlkX3QgcGlkKQogewogCXJldHVybiBwaWQgPyBmaW5kX3Rhc2tfYnlfcGlkKHBpZCkgOiBjdXJyZW50OwogfQpAQCAtMzk1NCw2ICszOTg3LDcgQEAKIHN0YXRpYyB2b2lkIF9fc2V0c2NoZWR1bGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHBvbGljeSwgaW50IHByaW8pCiB7CiAJQlVHX09OKHAtPmFycmF5KTsKKwogCXAtPnBvbGljeSA9IHBvbGljeTsKIAlwLT5ydF9wcmlvcml0eSA9IHByaW87CiAJcC0+bm9ybWFsX3ByaW8gPSBub3JtYWxfcHJpbyhwKTsKQEAgLTM5NzcsMTEgKzQwMTEsMTAgQEAKIGludCBzY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcG9saWN5LAogCQkgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKIHsKLQlpbnQgcmV0dmFsOwotCWludCBvbGRwcmlvLCBvbGRwb2xpY3kgPSAtMTsKLQlwcmlvX2FycmF5X3QgKmFycmF5OworCWludCByZXR2YWwsIG9sZHByaW8sIG9sZHBvbGljeSA9IC0xOworCXN0cnVjdCBwcmlvX2FycmF5ICphcnJheTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXJ1bnF1ZXVlX3QgKnJxOworCXN0cnVjdCBycSAqcnE7CiAKIAkvKiBtYXkgZ3JhYiBub24taXJxIHByb3RlY3RlZCBzcGluX2xvY2tzICovCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKQEAgLTQwNzksOSArNDExMiw5IEBACiBzdGF0aWMgaW50CiBkb19zY2hlZF9zZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gX191c2VyICpwYXJhbSkKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBzY2hlZF9wYXJhbSBscGFyYW07CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCWludCByZXR2YWw7CiAKIAlpZiAoIXBhcmFtIHx8IHBpZCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDA5Nyw2ICs0MTMwLDcgQEAKIAlyZWFkX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCXJldHZhbCA9IHNjaGVkX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksICZscGFyYW0pOwogCXB1dF90YXNrX3N0cnVjdChwKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQxMzIsOCArNDE2Niw4IEBACiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyKHBpZF90IHBpZCkKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7Ci0JdGFza190ICpwOwogCiAJaWYgKHBpZCA8IDApCiAJCWdvdG8gb3V0X25vdW5sb2NrOwpAQCAtNDE2MCw4ICs0MTk0LDggQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gX191c2VyICpwYXJhbSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfcGFyYW0gbHA7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwotCXRhc2tfdCAqcDsKIAogCWlmICghcGFyYW0gfHwgcGlkIDwgMCkKIAkJZ290byBvdXRfbm91bmxvY2s7CkBAIC00MTk0LDkgKzQyMjgsOSBAQAogCiBsb25nIHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgY3B1bWFza190IG5ld19tYXNrKQogewotCXRhc2tfdCAqcDsKLQlpbnQgcmV0dmFsOwogCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCWludCByZXR2YWw7CiAKIAlsb2NrX2NwdV9ob3RwbHVnKCk7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTQyODIsOCArNDMxNiw4IEBACiAKIGxvbmcgc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBjcHVtYXNrX3QgKm1hc2spCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXR2YWw7Ci0JdGFza190ICpwOwogCiAJbG9ja19jcHVfaG90cGx1ZygpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC00MzQyLDkgKzQzNzYsOCBAQAogICovCiBhc21saW5rYWdlIGxvbmcgc3lzX3NjaGVkX3lpZWxkKHZvaWQpCiB7Ci0JcnVucXVldWVfdCAqcnEgPSB0aGlzX3JxX2xvY2soKTsKLQlwcmlvX2FycmF5X3QgKmFycmF5ID0gY3VycmVudC0+YXJyYXk7Ci0JcHJpb19hcnJheV90ICp0YXJnZXQgPSBycS0+ZXhwaXJlZDsKKwlzdHJ1Y3QgcnEgKnJxID0gdGhpc19ycV9sb2NrKCk7CisJc3RydWN0IHByaW9fYXJyYXkgKmFycmF5ID0gY3VycmVudC0+YXJyYXksICp0YXJnZXQgPSBycS0+ZXhwaXJlZDsKIAogCXNjaGVkc3RhdF9pbmMocnEsIHlsZF9jbnQpOwogCS8qCkBAIC00Mzc4LDYgKzQ0MTEsNyBAQAogCSAqIG5vIG5lZWQgdG8gcHJlZW1wdCBvciBlbmFibGUgaW50ZXJydXB0czoKIAkgKi8KIAlfX3JlbGVhc2UocnEtPmxvY2spOworCXNwaW5fcmVsZWFzZSgmcnEtPmxvY2suZGVwX21hcCwgMSwgX1RISVNfSVBfKTsKIAlfcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCkBAIC00Mzg2LDcgKzQ0MjAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fY29uZF9yZXNjaGVkKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBfX3Jlc2NoZWRfbGVnYWwodm9pZCkKK3sKKwlpZiAodW5saWtlbHkocHJlZW1wdF9jb3VudCgpKSkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBfX2NvbmRfcmVzY2hlZCh2b2lkKQogewogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUAogCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fKTsKQEAgLTQzOTYsMTAgKzQ0MzksNiBAQAogCSAqIFBSRUVNUFRfQUNUSVZFLCB3aGljaCBjb3VsZCB0cmlnZ2VyIGEgc2Vjb25kCiAJICogY29uZF9yZXNjaGVkKCkgY2FsbC4KIAkgKi8KLQlpZiAodW5saWtlbHkocHJlZW1wdF9jb3VudCgpKSkKLQkJcmV0dXJuOwotCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpKQotCQlyZXR1cm47CiAJZG8gewogCQlhZGRfcHJlZW1wdF9jb3VudChQUkVFTVBUX0FDVElWRSk7CiAJCXNjaGVkdWxlKCk7CkBAIC00NDA5LDEzICs0NDQ4LDEyIEBACiAKIGludCBfX3NjaGVkIGNvbmRfcmVzY2hlZCh2b2lkKQogewotCWlmIChuZWVkX3Jlc2NoZWQoKSkgeworCWlmIChuZWVkX3Jlc2NoZWQoKSAmJiBfX3Jlc2NoZWRfbGVnYWwoKSkgewogCQlfX2NvbmRfcmVzY2hlZCgpOwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woY29uZF9yZXNjaGVkKTsKIAogLyoKQEAgLTQ0MzYsNyArNDQ3NCw4IEBACiAJCXJldCA9IDE7CiAJCXNwaW5fbG9jayhsb2NrKTsKIAl9Ci0JaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJaWYgKG5lZWRfcmVzY2hlZCgpICYmIF9fcmVzY2hlZF9sZWdhbCgpKSB7CisJCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1RISVNfSVBfKTsKIAkJX3Jhd19zcGluX3VubG9jayhsb2NrKTsKIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlfX2NvbmRfcmVzY2hlZCgpOwpAQCAtNDQ0NSwyNSArNDQ4NCwyNCBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MKGNvbmRfcmVzY2hlZF9sb2NrKTsKIAogaW50IF9fc2NoZWQgY29uZF9yZXNjaGVkX3NvZnRpcnEodm9pZCkKIHsKIAlCVUdfT04oIWluX3NvZnRpcnEoKSk7CiAKLQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJX19sb2NhbF9iaF9lbmFibGUoKTsKKwlpZiAobmVlZF9yZXNjaGVkKCkgJiYgX19yZXNjaGVkX2xlZ2FsKCkpIHsKKwkJcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7CisJCV9sb2NhbF9iaF9lbmFibGUoKTsKKwkJcmF3X2xvY2FsX2lycV9lbmFibGUoKTsKIAkJX19jb25kX3Jlc2NoZWQoKTsKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woY29uZF9yZXNjaGVkX3NvZnRpcnEpOwogCi0KIC8qKgogICogeWllbGQgLSB5aWVsZCB0aGUgY3VycmVudCBwcm9jZXNzb3IgdG8gb3RoZXIgdGhyZWFkcy4KICAqCkBAIC00NDc1LDcgKzQ1MTMsNiBAQAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJc3lzX3NjaGVkX3lpZWxkKCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woeWllbGQpOwogCiAvKgpAQCAtNDQ4NywxOCArNDUyNCwxNyBAQAogICovCiB2b2lkIF9fc2NoZWQgaW9fc2NoZWR1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgcnVucXVldWUgKnJxID0gJl9fcmF3X2dldF9jcHVfdmFyKHJ1bnF1ZXVlcyk7CisJc3RydWN0IHJxICpycSA9ICZfX3Jhd19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpOwogCiAJYXRvbWljX2luYygmcnEtPm5yX2lvd2FpdCk7CiAJc2NoZWR1bGUoKTsKIAlhdG9taWNfZGVjKCZycS0+bnJfaW93YWl0KTsKIH0KLQogRVhQT1JUX1NZTUJPTChpb19zY2hlZHVsZSk7CiAKIGxvbmcgX19zY2hlZCBpb19zY2hlZHVsZV90aW1lb3V0KGxvbmcgdGltZW91dCkKIHsKLQlzdHJ1Y3QgcnVucXVldWUgKnJxID0gJl9fcmF3X2dldF9jcHVfdmFyKHJ1bnF1ZXVlcyk7CisJc3RydWN0IHJxICpycSA9ICZfX3Jhd19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpOwogCWxvbmcgcmV0OwogCiAJYXRvbWljX2luYygmcnEtPm5yX2lvd2FpdCk7CkBAIC00NTY1LDkgKzQ2MDEsOSBAQAogYXNtbGlua2FnZQogbG9uZyBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZF90IHBpZCwgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqaW50ZXJ2YWwpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCXN0cnVjdCB0aW1lc3BlYyB0OwotCXRhc2tfdCAqcDsKIAogCWlmIChwaWQgPCAwKQogCQlnb3RvIG91dF9ub3VubG9jazsKQEAgLTQ1OTUsMjggKzQ2MzEsMzIgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmVsZGVzdF9jaGlsZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaWYgKGxpc3RfZW1wdHkoJnAtPmNoaWxkcmVuKSkgcmV0dXJuIE5VTEw7CisJaWYgKGxpc3RfZW1wdHkoJnAtPmNoaWxkcmVuKSkKKwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIGxpc3RfZW50cnkocC0+Y2hpbGRyZW4ubmV4dCxzdHJ1Y3QgdGFza19zdHJ1Y3Qsc2libGluZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpvbGRlcl9zaWJsaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlpZiAocC0+c2libGluZy5wcmV2PT0mcC0+cGFyZW50LT5jaGlsZHJlbikgcmV0dXJuIE5VTEw7CisJaWYgKHAtPnNpYmxpbmcucHJldj09JnAtPnBhcmVudC0+Y2hpbGRyZW4pCisJCXJldHVybiBOVUxMOwogCXJldHVybiBsaXN0X2VudHJ5KHAtPnNpYmxpbmcucHJldixzdHJ1Y3QgdGFza19zdHJ1Y3Qsc2libGluZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp5b3VuZ2VyX3NpYmxpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCWlmIChwLT5zaWJsaW5nLm5leHQ9PSZwLT5wYXJlbnQtPmNoaWxkcmVuKSByZXR1cm4gTlVMTDsKKwlpZiAocC0+c2libGluZy5uZXh0PT0mcC0+cGFyZW50LT5jaGlsZHJlbikKKwkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIGxpc3RfZW50cnkocC0+c2libGluZy5uZXh0LHN0cnVjdCB0YXNrX3N0cnVjdCxzaWJsaW5nKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd190YXNrKHRhc2tfdCAqcCkKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0X25hbVtdID0geyAiUiIsICJTIiwgIkQiLCAiVCIsICJ0IiwgIloiLCAiWCIgfTsKKworc3RhdGljIHZvaWQgc2hvd190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQl0YXNrX3QgKnJlbGF0aXZlOwotCXVuc2lnbmVkIHN0YXRlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVsYXRpdmU7CiAJdW5zaWduZWQgbG9uZyBmcmVlID0gMDsKLQlzdGF0aWMgY29uc3QgY2hhciAqc3RhdF9uYW1bXSA9IHsgIlIiLCAiUyIsICJEIiwgIlQiLCAidCIsICJaIiwgIlgiIH07CisJdW5zaWduZWQgc3RhdGU7CiAKIAlwcmludGsoIiUtMTMuMTNzICIsIHAtPmNvbW0pOwogCXN0YXRlID0gcC0+c3RhdGUgPyBfX2ZmcyhwLT5zdGF0ZSkgKyAxIDogMDsKQEAgLTQ2NjcsNyArNDcwNyw3IEBACiAKIHZvaWQgc2hvd19zdGF0ZSh2b2lkKQogewotCXRhc2tfdCAqZywgKnA7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKIAogI2lmIChCSVRTX1BFUl9MT05HID09IDMyKQogCXByaW50aygiXG4iCkBAIC00Njg5LDcgKzQ3MjksNyBAQAogCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JbXV0ZXhfZGVidWdfc2hvd19hbGxfbG9ja3MoKTsKKwlkZWJ1Z19zaG93X2FsbF9sb2NrcygpOwogfQogCiAvKioKQEAgLTQ3MDAsOSArNDc0MCw5IEBACiAgKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNldCB0aGUgaWRsZSB0aHJlYWQncyBORUVEX1JFU0NIRUQKICAqIGZsYWcsIHRvIG1ha2UgYm9vdGluZyBtb3JlIHJvYnVzdC4KICAqLwotdm9pZCBfX2RldmluaXQgaW5pdF9pZGxlKHRhc2tfdCAqaWRsZSwgaW50IGNwdSkKK3ZvaWQgX19kZXZpbml0IGluaXRfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUsIGludCBjcHUpCiB7Ci0JcnVucXVldWVfdCAqcnEgPSBjcHVfcnEoY3B1KTsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlkbGUtPnRpbWVzdGFtcCA9IHNjaGVkX2Nsb2NrKCk7CkBAIC00NzQxLDcgKzQ3ODEsNyBAQAogLyoKICAqIFRoaXMgaXMgaG93IG1pZ3JhdGlvbiB3b3JrczoKICAqCi0gKiAxKSB3ZSBxdWV1ZSBhIG1pZ3JhdGlvbl9yZXFfdCBzdHJ1Y3R1cmUgaW4gdGhlIHNvdXJjZSBDUFUncworICogMSkgd2UgcXVldWUgYSBzdHJ1Y3QgbWlncmF0aW9uX3JlcSBzdHJ1Y3R1cmUgaW4gdGhlIHNvdXJjZSBDUFUncwogICogICAgcnVucXVldWUgYW5kIHdha2UgdXAgdGhhdCBDUFUncyBtaWdyYXRpb24gdGhyZWFkLgogICogMikgd2UgZG93bigpIHRoZSBsb2NrZWQgc2VtYXBob3JlID0+IHRocmVhZCBibG9ja3MuCiAgKiAzKSBtaWdyYXRpb24gdGhyZWFkIHdha2VzIHVwIChpbXBsaWNpdGx5IGl0IGZvcmNlcyB0aGUgbWlncmF0ZWQKQEAgLTQ3NjMsMTIgKzQ4MDMsMTIgQEAKICAqIHRhc2sgbXVzdCBub3QgZXhpdCgpICYgZGVhbGxvY2F0ZSBpdHNlbGYgcHJlbWF0dXJlbHkuICBUaGUKICAqIGNhbGwgaXMgbm90IGF0b21pYzsgbm8gc3BpbmxvY2tzIG1heSBiZSBoZWxkLgogICovCi1pbnQgc2V0X2NwdXNfYWxsb3dlZCh0YXNrX3QgKnAsIGNwdW1hc2tfdCBuZXdfbWFzaykKK2ludCBzZXRfY3B1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190IG5ld19tYXNrKQogeworCXN0cnVjdCBtaWdyYXRpb25fcmVxIHJlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBycSAqcnE7CiAJaW50IHJldCA9IDA7Ci0JbWlncmF0aW9uX3JlcV90IHJlcTsKLQlydW5xdWV1ZV90ICpycTsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJaWYgKCFjcHVzX2ludGVyc2VjdHMobmV3X21hc2ssIGNwdV9vbmxpbmVfbWFwKSkgewpAQCAtNDc5MSw5ICs0ODMxLDkgQEAKIAl9CiBvdXQ6CiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CisKIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChzZXRfY3B1c19hbGxvd2VkKTsKIAogLyoKQEAgLTQ4MDksNyArNDg0OSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19taWdyYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3JjX2NwdSwgaW50IGRlc3RfY3B1KQogewotCXJ1bnF1ZXVlX3QgKnJxX2Rlc3QsICpycV9zcmM7CisJc3RydWN0IHJxICpycV9kZXN0LCAqcnFfc3JjOwogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGNwdV9pc19vZmZsaW5lKGRlc3RfY3B1KSkpCkBAIC00ODU0LDE2ICs0ODk0LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgbWlncmF0aW9uX3RocmVhZCh2b2lkICpkYXRhKQogewotCXJ1bnF1ZXVlX3QgKnJxOwogCWludCBjcHUgPSAobG9uZylkYXRhOworCXN0cnVjdCBycSAqcnE7CiAKIAlycSA9IGNwdV9ycShjcHUpOwogCUJVR19PTihycS0+bWlncmF0aW9uX3RocmVhZCAhPSBjdXJyZW50KTsKIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJc3RydWN0IG1pZ3JhdGlvbl9yZXEgKnJlcTsKIAkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQkJbWlncmF0aW9uX3JlcV90ICpyZXE7CiAKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCkBAIC00ODg3LDcgKzQ5MjcsNyBAQAogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXJlcSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgbWlncmF0aW9uX3JlcV90LCBsaXN0KTsKKwkJcmVxID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgbWlncmF0aW9uX3JlcSwgbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQoaGVhZC0+bmV4dCk7CiAKIAkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKQEAgLTQ5MTIsMjggKzQ5NTIsMjggQEAKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogLyogRmlndXJlIG91dCB3aGVyZSB0YXNrIG9uIGRlYWQgQ1BVIHNob3VsZCBnbywgdXNlIGZvcmNlIGlmIG5lY2Nlc3NhcnkuICovCi1zdGF0aWMgdm9pZCBtb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGludCBkZWFkX2NwdSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgdm9pZCBtb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGludCBkZWFkX2NwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJ1bnF1ZXVlX3QgKnJxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGRlc3RfY3B1OwogCWNwdW1hc2tfdCBtYXNrOworCXN0cnVjdCBycSAqcnE7CisJaW50IGRlc3RfY3B1OwogCiByZXN0YXJ0OgogCS8qIE9uIHNhbWUgbm9kZT8gKi8KIAltYXNrID0gbm9kZV90b19jcHVtYXNrKGNwdV90b19ub2RlKGRlYWRfY3B1KSk7Ci0JY3B1c19hbmQobWFzaywgbWFzaywgdHNrLT5jcHVzX2FsbG93ZWQpOworCWNwdXNfYW5kKG1hc2ssIG1hc2ssIHAtPmNwdXNfYWxsb3dlZCk7CiAJZGVzdF9jcHUgPSBhbnlfb25saW5lX2NwdShtYXNrKTsKIAogCS8qIE9uIGFueSBhbGxvd2VkIENQVT8gKi8KIAlpZiAoZGVzdF9jcHUgPT0gTlJfQ1BVUykKLQkJZGVzdF9jcHUgPSBhbnlfb25saW5lX2NwdSh0c2stPmNwdXNfYWxsb3dlZCk7CisJCWRlc3RfY3B1ID0gYW55X29ubGluZV9jcHUocC0+Y3B1c19hbGxvd2VkKTsKIAogCS8qIE5vIG1vcmUgTXIuIE5pY2UgR3V5LiAqLwogCWlmIChkZXN0X2NwdSA9PSBOUl9DUFVTKSB7Ci0JCXJxID0gdGFza19ycV9sb2NrKHRzaywgJmZsYWdzKTsKLQkJY3B1c19zZXRhbGwodHNrLT5jcHVzX2FsbG93ZWQpOwotCQlkZXN0X2NwdSA9IGFueV9vbmxpbmVfY3B1KHRzay0+Y3B1c19hbGxvd2VkKTsKKwkJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwkJY3B1c19zZXRhbGwocC0+Y3B1c19hbGxvd2VkKTsKKwkJZGVzdF9jcHUgPSBhbnlfb25saW5lX2NwdShwLT5jcHVzX2FsbG93ZWQpOwogCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAogCQkvKgpAQCAtNDk0MSwxMiArNDk4MSwxMiBAQAogCQkgKiBrZXJuZWwgdGhyZWFkcyAoYm90aCBtbSBOVUxMKSwgc2luY2UgdGhleSBuZXZlcgogCQkgKiBsZWF2ZSBrZXJuZWwuCiAJCSAqLwotCQlpZiAodHNrLT5tbSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCWlmIChwLT5tbSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9JTkZPICJwcm9jZXNzICVkICglcykgbm8gIgogCQkJICAgICAgICJsb25nZXIgYWZmaW5lIHRvIGNwdSVkXG4iLAotCQkJICAgICAgIHRzay0+cGlkLCB0c2stPmNvbW0sIGRlYWRfY3B1KTsKKwkJCSAgICAgICBwLT5waWQsIHAtPmNvbW0sIGRlYWRfY3B1KTsKIAl9Ci0JaWYgKCFfX21pZ3JhdGVfdGFzayh0c2ssIGRlYWRfY3B1LCBkZXN0X2NwdSkpCisJaWYgKCFfX21pZ3JhdGVfdGFzayhwLCBkZWFkX2NwdSwgZGVzdF9jcHUpKQogCQlnb3RvIHJlc3RhcnQ7CiB9CiAKQEAgLTQ5NTcsOSArNDk5Nyw5IEBACiAgKiB0aGVpciBob21lIENQVXMuIFNvIHdlIGp1c3QgYWRkIHRoZSBjb3VudGVyIHRvIGFub3RoZXIgQ1BVJ3MgY291bnRlciwKICAqIHRvIGtlZXAgdGhlIGdsb2JhbCBzdW0gY29uc3RhbnQgYWZ0ZXIgQ1BVLWRvd246CiAgKi8KLXN0YXRpYyB2b2lkIG1pZ3JhdGVfbnJfdW5pbnRlcnJ1cHRpYmxlKHJ1bnF1ZXVlX3QgKnJxX3NyYykKK3N0YXRpYyB2b2lkIG1pZ3JhdGVfbnJfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBycSAqcnFfc3JjKQogewotCXJ1bnF1ZXVlX3QgKnJxX2Rlc3QgPSBjcHVfcnEoYW55X29ubGluZV9jcHUoQ1BVX01BU0tfQUxMKSk7CisJc3RydWN0IHJxICpycV9kZXN0ID0gY3B1X3JxKGFueV9vbmxpbmVfY3B1KENQVV9NQVNLX0FMTCkpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC00OTczLDQ4ICs1MDEzLDUxIEBACiAvKiBSdW4gdGhyb3VnaCB0YXNrIGxpc3QgYW5kIG1pZ3JhdGUgdGFza3MgZnJvbSB0aGUgZGVhZCBjcHUuICovCiBzdGF0aWMgdm9pZCBtaWdyYXRlX2xpdmVfdGFza3MoaW50IHNyY19jcHUpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssICp0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKnQ7CiAKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKLQlkb19lYWNoX3RocmVhZCh0LCB0c2spIHsKLQkJaWYgKHRzayA9PSBjdXJyZW50KQorCWRvX2VhY2hfdGhyZWFkKHQsIHApIHsKKwkJaWYgKHAgPT0gY3VycmVudCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICh0YXNrX2NwdSh0c2spID09IHNyY19jcHUpCi0JCQltb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KHNyY19jcHUsIHRzayk7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZCh0LCB0c2spOworCQlpZiAodGFza19jcHUocCkgPT0gc3JjX2NwdSkKKwkJCW1vdmVfdGFza19vZmZfZGVhZF9jcHUoc3JjX2NwdSwgcCk7CisJfSB3aGlsZV9lYWNoX3RocmVhZCh0LCBwKTsKIAogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogfQogCiAvKiBTY2hlZHVsZXMgaWRsZSB0YXNrIHRvIGJlIHRoZSBuZXh0IHJ1bm5hYmxlIHRhc2sgb24gY3VycmVudCBDUFUuCiAgKiBJdCBkb2VzIHNvIGJ5IGJvb3N0aW5nIGl0cyBwcmlvcml0eSB0byBoaWdoZXN0IHBvc3NpYmxlIGFuZCBhZGRpbmcgaXQgdG8KLSAqIHRoZSBfZnJvbnRfIG9mIHJ1bnF1ZXVlLiBVc2VkIGJ5IENQVSBvZmZsaW5lIGNvZGUuCisgKiB0aGUgX2Zyb250XyBvZiB0aGUgcnVucXVldWUuIFVzZWQgYnkgQ1BVIG9mZmxpbmUgY29kZS4KICAqLwogdm9pZCBzY2hlZF9pZGxlX25leHQodm9pZCkKIHsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXJ1bnF1ZXVlX3QgKnJxID0gdGhpc19ycSgpOworCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKHRoaXNfY3B1KTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBycS0+aWRsZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogY3B1IGhhcyB0byBiZSBvZmZsaW5lICovCi0JQlVHX09OKGNwdV9vbmxpbmUoY3B1KSk7CisJQlVHX09OKGNwdV9vbmxpbmUodGhpc19jcHUpKTsKIAotCS8qIFN0cmljdGx5IG5vdCBuZWNlc3Nhcnkgc2luY2UgcmVzdCBvZiB0aGUgQ1BVcyBhcmUgc3RvcHBlZCBieSBub3cKLQkgKiBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZCBvbiBjdXJyZW50IGNwdS4KKwkvKgorCSAqIFN0cmljdGx5IG5vdCBuZWNlc3Nhcnkgc2luY2UgcmVzdCBvZiB0aGUgQ1BVcyBhcmUgc3RvcHBlZCBieSBub3cKKwkgKiBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZCBvbiB0aGUgY3VycmVudCBjcHUuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAKIAlfX3NldHNjaGVkdWxlcihwLCBTQ0hFRF9GSUZPLCBNQVhfUlRfUFJJTy0xKTsKLQkvKiBBZGQgaWRsZSB0YXNrIHRvIF9mcm9udF8gb2YgaXQncyBwcmlvcml0eSBxdWV1ZSAqLworCisJLyogQWRkIGlkbGUgdGFzayB0byB0aGUgX2Zyb250XyBvZiBpdHMgcHJpb3JpdHkgcXVldWU6ICovCiAJX19hY3RpdmF0ZV9pZGxlX3Rhc2socCwgcnEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIH0KIAotLyogRW5zdXJlcyB0aGF0IHRoZSBpZGxlIHRhc2sgaXMgdXNpbmcgaW5pdF9tbSByaWdodCBiZWZvcmUgaXRzIGNwdSBnb2VzCisvKgorICogRW5zdXJlcyB0aGF0IHRoZSBpZGxlIHRhc2sgaXMgdXNpbmcgaW5pdF9tbSByaWdodCBiZWZvcmUgaXRzIGNwdSBnb2VzCiAgKiBvZmZsaW5lLgogICovCiB2b2lkIGlkbGVfdGFza19leGl0KHZvaWQpCkBAIC01MDI4LDE3ICs1MDcxLDE3IEBACiAJbW1kcm9wKG1tKTsKIH0KIAotc3RhdGljIHZvaWQgbWlncmF0ZV9kZWFkKHVuc2lnbmVkIGludCBkZWFkX2NwdSwgdGFza190ICp0c2spCitzdGF0aWMgdm9pZCBtaWdyYXRlX2RlYWQodW5zaWduZWQgaW50IGRlYWRfY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0Jc3RydWN0IHJ1bnF1ZXVlICpycSA9IGNwdV9ycShkZWFkX2NwdSk7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShkZWFkX2NwdSk7CiAKIAkvKiBNdXN0IGJlIGV4aXRpbmcsIG90aGVyd2lzZSB3b3VsZCBiZSBvbiB0YXNrbGlzdC4gKi8KLQlCVUdfT04odHNrLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFICYmIHRzay0+ZXhpdF9zdGF0ZSAhPSBFWElUX0RFQUQpOworCUJVR19PTihwLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFICYmIHAtPmV4aXRfc3RhdGUgIT0gRVhJVF9ERUFEKTsKIAogCS8qIENhbm5vdCBoYXZlIGRvbmUgZmluYWwgc2NoZWR1bGUgeWV0OiB3b3VsZCBoYXZlIHZhbmlzaGVkLiAqLwotCUJVR19PTih0c2stPmZsYWdzICYgUEZfREVBRCk7CisJQlVHX09OKHAtPmZsYWdzICYgUEZfREVBRCk7CiAKLQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKKwlnZXRfdGFza19zdHJ1Y3QocCk7CiAKIAkvKgogCSAqIERyb3AgbG9jayBhcm91bmQgbWlncmF0aW9uOyBpZiBzb21lb25lIGVsc2UgbW92ZXMgaXQsCkBAIC01MDQ2LDI1ICs1MDg5LDI1IEBACiAJICogZmluZS4KIAkgKi8KIAlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKLQltb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGRlYWRfY3B1LCB0c2spOworCW1vdmVfdGFza19vZmZfZGVhZF9jcHUoZGVhZF9jcHUsIHApOwogCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAotCXB1dF90YXNrX3N0cnVjdCh0c2spOworCXB1dF90YXNrX3N0cnVjdChwKTsKIH0KIAogLyogcmVsZWFzZV90YXNrKCkgcmVtb3ZlcyB0YXNrIGZyb20gdGFza2xpc3QsIHNvIHdlIHdvbid0IGZpbmQgZGVhZCB0YXNrcy4gKi8KIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZGVhZF90YXNrcyh1bnNpZ25lZCBpbnQgZGVhZF9jcHUpCiB7Ci0JdW5zaWduZWQgYXJyLCBpOwotCXN0cnVjdCBydW5xdWV1ZSAqcnEgPSBjcHVfcnEoZGVhZF9jcHUpOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoZGVhZF9jcHUpOworCXVuc2lnbmVkIGludCBhcnIsIGk7CiAKIAlmb3IgKGFyciA9IDA7IGFyciA8IDI7IGFycisrKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfUFJJTzsgaSsrKSB7CiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gJnJxLT5hcnJheXNbYXJyXS5xdWV1ZVtpXTsKKwogCQkJd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKQotCQkJCW1pZ3JhdGVfZGVhZChkZWFkX2NwdSwKLQkJCQkJICAgICBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHRhc2tfdCwKLQkJCQkJCQlydW5fbGlzdCkpOworCQkJCW1pZ3JhdGVfZGVhZChkZWFkX2NwdSwgbGlzdF9lbnRyeShsaXN0LT5uZXh0LAorCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnVuX2xpc3QpKTsKIAkJfQogCX0KIH0KQEAgLTUwNzQsMTQgKzUxMTcsMTMgQEAKICAqIG1pZ3JhdGlvbl9jYWxsIC0gY2FsbGJhY2sgdGhhdCBnZXRzIHRyaWdnZXJlZCB3aGVuIGEgQ1BVIGlzIGFkZGVkLgogICogSGVyZSB3ZSBjYW4gc3RhcnQgdXAgdGhlIG5lY2Vzc2FyeSBtaWdyYXRpb24gdGhyZWFkIGZvciB0aGUgbmV3IENQVS4KICAqLwotc3RhdGljIGludCBfX2NwdWluaXQgbWlncmF0aW9uX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCi0JCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwKLQkJCXZvaWQgKmhjcHUpCitzdGF0aWMgaW50IF9fY3B1aW5pdAorbWlncmF0aW9uX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewotCWludCBjcHUgPSAobG9uZyloY3B1OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlzdHJ1Y3QgcnVucXVldWUgKnJxOworCWludCBjcHUgPSAobG9uZyloY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJxICpycTsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKQEAgLTUwOTYsMTAgKzUxMzgsMTIgQEAKIAkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAJCWNwdV9ycShjcHUpLT5taWdyYXRpb25fdGhyZWFkID0gcDsKIAkJYnJlYWs7CisKIAljYXNlIENQVV9PTkxJTkU6CiAJCS8qIFN0cmljdGx5IHVubmVjY2Vzc2FyeSwgYXMgZmlyc3QgdXNlciB3aWxsIHdha2UgaXQuICovCiAJCXdha2VfdXBfcHJvY2VzcyhjcHVfcnEoY3B1KS0+bWlncmF0aW9uX3RocmVhZCk7CiAJCWJyZWFrOworCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CiAJCWlmICghY3B1X3JxKGNwdSktPm1pZ3JhdGlvbl90aHJlYWQpCkBAIC01MTEwLDYgKzUxNTQsNyBAQAogCQlrdGhyZWFkX3N0b3AoY3B1X3JxKGNwdSktPm1pZ3JhdGlvbl90aHJlYWQpOwogCQljcHVfcnEoY3B1KS0+bWlncmF0aW9uX3RocmVhZCA9IE5VTEw7CiAJCWJyZWFrOworCiAJY2FzZSBDUFVfREVBRDoKIAkJbWlncmF0ZV9saXZlX3Rhc2tzKGNwdSk7CiAJCXJxID0gY3B1X3JxKGNwdSk7CkBAIC01MTMwLDkgKzUxNzUsMTAgQEAKIAkJICogdGhlIHJlcXVlc3RvcnMuICovCiAJCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZycS0+bWlncmF0aW9uX3F1ZXVlKSkgewotCQkJbWlncmF0aW9uX3JlcV90ICpyZXE7CisJCQlzdHJ1Y3QgbWlncmF0aW9uX3JlcSAqcmVxOworCiAJCQlyZXEgPSBsaXN0X2VudHJ5KHJxLT5taWdyYXRpb25fcXVldWUubmV4dCwKLQkJCQkJIG1pZ3JhdGlvbl9yZXFfdCwgbGlzdCk7CisJCQkJCSBzdHJ1Y3QgbWlncmF0aW9uX3JlcSwgbGlzdCk7CiAJCQlsaXN0X2RlbF9pbml0KCZyZXEtPmxpc3QpOwogCQkJY29tcGxldGUoJnJlcS0+ZG9uZSk7CiAJCX0KQEAgLTUxNTQsMTAgKzUyMDAsMTIgQEAKIGludCBfX2luaXQgbWlncmF0aW9uX2luaXQodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKLQkvKiBTdGFydCBvbmUgZm9yIGJvb3QgQ1BVLiAqLworCisJLyogU3RhcnQgb25lIGZvciB0aGUgYm9vdCBDUFU6ICovCiAJbWlncmF0aW9uX2NhbGwoJm1pZ3JhdGlvbl9ub3RpZmllciwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CiAJbWlncmF0aW9uX2NhbGwoJm1pZ3JhdGlvbl9ub3RpZmllciwgQ1BVX09OTElORSwgY3B1KTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJm1pZ3JhdGlvbl9ub3RpZmllcik7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNTI1Myw3ICs1MzAxLDcgQEAKIAl9IHdoaWxlIChzZCk7CiB9CiAjZWxzZQotI2RlZmluZSBzY2hlZF9kb21haW5fZGVidWcoc2QsIGNwdSkge30KKyMgZGVmaW5lIHNjaGVkX2RvbWFpbl9kZWJ1ZyhzZCwgY3B1KSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogc3RhdGljIGludCBzZF9kZWdlbmVyYXRlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQpAQCAtNTI3OSw4ICs1MzI3LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBzZF9wYXJlbnRfZGVnZW5lcmF0ZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCQkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnBhcmVudCkKK3N0YXRpYyBpbnQKK3NkX3BhcmVudF9kZWdlbmVyYXRlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQpCiB7CiAJdW5zaWduZWQgbG9uZyBjZmxhZ3MgPSBzZC0+ZmxhZ3MsIHBmbGFncyA9IHBhcmVudC0+ZmxhZ3M7CiAKQEAgLTUzMTMsNyArNTM2MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNwdV9hdHRhY2hfZG9tYWluKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQogewotCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGNwdSk7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnRtcDsKIAogCS8qIFJlbW92ZSB0aGUgc2NoZWQgZG9tYWlucyB3aGljaCBkbyBub3QgY29udHJpYnV0ZSB0byBzY2hlZHVsaW5nLiAqLwpAQCAtNTU3NSw4ICs1NjIzLDggQEAKIC8qCiAgKiBNZWFzdXJlIHRoZSBjYWNoZS1jb3N0IG9mIG9uZSB0YXNrIG1pZ3JhdGlvbi4gUmV0dXJucyBpbiB1bml0cyBvZiBuc2VjLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1lYXN1cmVfb25lKHZvaWQgKmNhY2hlLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgICAgaW50IHNvdXJjZSwgaW50IHRhcmdldCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcKK21lYXN1cmVfb25lKHZvaWQgKmNhY2hlLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBzb3VyY2UsIGludCB0YXJnZXQpCiB7CiAJY3B1bWFza190IG1hc2ssIHNhdmVkX21hc2s7CiAJdW5zaWduZWQgbG9uZyBsb25nIHQwLCB0MSwgdDIsIHQzLCBjb3N0OwpAQCAtNTkyNiw5ICs1OTc0LDkgQEAKICAqLwogc3RhdGljIGNwdW1hc2tfdCBzY2hlZF9kb21haW5fbm9kZV9zcGFuKGludCBub2RlKQogewotCWludCBpOwotCWNwdW1hc2tfdCBzcGFuLCBub2RlbWFzazsKIAlERUNMQVJFX0JJVE1BUCh1c2VkX25vZGVzLCBNQVhfTlVNTk9ERVMpOworCWNwdW1hc2tfdCBzcGFuLCBub2RlbWFzazsKKwlpbnQgaTsKIAogCWNwdXNfY2xlYXIoc3Bhbik7CiAJYml0bWFwX3plcm8odXNlZF9ub2RlcywgTUFYX05VTU5PREVTKTsKQEAgLTU5MzksNiArNTk4Nyw3IEBACiAKIAlmb3IgKGkgPSAxOyBpIDwgU0RfTk9ERVNfUEVSX0RPTUFJTjsgaSsrKSB7CiAJCWludCBuZXh0X25vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsIHVzZWRfbm9kZXMpOworCiAJCW5vZGVtYXNrID0gbm9kZV90b19jcHVtYXNrKG5leHRfbm9kZSk7CiAJCWNwdXNfb3Ioc3Bhbiwgc3Bhbiwgbm9kZW1hc2spOwogCX0KQEAgLTU5NDgsMTkgKzU5OTcsMjMgQEAKICNlbmRpZgogCiBpbnQgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgPSAwLCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzID0gMDsKKwogLyoKLSAqIEF0IHRoZSBtb21lbnQsIENPTkZJR19TQ0hFRF9TTVQgaXMgbmV2ZXIgZGVmaW5lZCwgYnV0IGxlYXZlIGl0IGluIHNvIHdlCi0gKiBjYW4gc3dpdGNoIGl0IG9uIGVhc2lseSBpZiBuZWVkZWQuCisgKiBTTVQgc2NoZWQtZG9tYWluczoKICAqLwogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfZG9tYWluLCBjcHVfZG9tYWlucyk7CiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwIHNjaGVkX2dyb3VwX2NwdXNbTlJfQ1BVU107CisKIHN0YXRpYyBpbnQgY3B1X3RvX2NwdV9ncm91cChpbnQgY3B1KQogewogCXJldHVybiBjcHU7CiB9CiAjZW5kaWYKIAorLyoKKyAqIG11bHRpLWNvcmUgc2NoZWQtZG9tYWluczoKKyAqLwogI2lmZGVmIENPTkZJR19TQ0hFRF9NQwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9kb21haW4sIGNvcmVfZG9tYWlucyk7CiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICpzY2hlZF9ncm91cF9jb3JlX2J5Y3B1W05SX0NQVVNdOwpAQCAtNTk4MCw5ICs2MDMzLDEwIEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfZG9tYWluLCBwaHlzX2RvbWFpbnMpOwogc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqc2NoZWRfZ3JvdXBfcGh5c19ieWNwdVtOUl9DUFVTXTsKKwogc3RhdGljIGludCBjcHVfdG9fcGh5c19ncm91cChpbnQgY3B1KQogewotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKQorI2lmZGVmIENPTkZJR19TQ0hFRF9NQwogCWNwdW1hc2tfdCBtYXNrID0gY3B1X2NvcmVncm91cF9tYXAoY3B1KTsKIAlyZXR1cm4gZmlyc3RfY3B1KG1hc2spOwogI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQpAQCAtNjUyOCw2ICs2NTgyLDcgQEAKIGludCBzY2hlZF9jcmVhdGVfc3lzZnNfcG93ZXJfc2F2aW5nc19lbnRyaWVzKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscykKIHsKIAlpbnQgZXJyID0gMDsKKwogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKIAlpZiAoc210X2NhcGFibGUoKSkKIAkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNscy0+a3NldC5rb2JqLApAQCAtNjU0Nyw3ICs2NjAyLDggQEAKIHsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpOwogfQotc3RhdGljIHNzaXplX3Qgc2NoZWRfbWNfcG93ZXJfc2F2aW5nc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHNjaGVkX21jX3Bvd2VyX3NhdmluZ3Nfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXJldHVybiBzY2hlZF9wb3dlcl9zYXZpbmdzX3N0b3JlKGJ1ZiwgY291bnQsIDApOwogfQpAQCAtNjU2MCw3ICs2NjE2LDggQEAKIHsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3Nfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlyZXR1cm4gc2NoZWRfcG93ZXJfc2F2aW5nc19zdG9yZShidWYsIGNvdW50LCAxKTsKIH0KQEAgLTY2MjIsNiArNjY3OSw3IEBACiB7CiAJLyogTGlua2VyIGFkZHMgdGhlc2U6IHN0YXJ0IGFuZCBlbmQgb2YgX19zY2hlZCBmdW5jdGlvbnMgKi8KIAlleHRlcm4gY2hhciBfX3NjaGVkX3RleHRfc3RhcnRbXSwgX19zY2hlZF90ZXh0X2VuZFtdOworCiAJcmV0dXJuIGluX2xvY2tfZnVuY3Rpb25zKGFkZHIpIHx8CiAJCShhZGRyID49ICh1bnNpZ25lZCBsb25nKV9fc2NoZWRfdGV4dF9zdGFydAogCQkmJiBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19zY2hlZF90ZXh0X2VuZCk7CkBAIC02NjI5LDE0ICs2Njg3LDE1IEBACiAKIHZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZCkKIHsKLQlydW5xdWV1ZV90ICpycTsKIAlpbnQgaSwgaiwgazsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCXByaW9fYXJyYXlfdCAqYXJyYXk7CisJCXN0cnVjdCBwcmlvX2FycmF5ICphcnJheTsKKwkJc3RydWN0IHJxICpycTsKIAogCQlycSA9IGNwdV9ycShpKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnJxLT5sb2NrKTsKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJnJxLT5sb2NrLCAmcnEtPnJxX2xvY2tfa2V5KTsKIAkJcnEtPm5yX3J1bm5pbmcgPSAwOwogCQlycS0+YWN0aXZlID0gcnEtPmFycmF5czsKIAkJcnEtPmV4cGlyZWQgPSBycS0+YXJyYXlzICsgMTsKQEAgLTY2ODMsNyArNjc0Miw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQCiB2b2lkIF9fbWlnaHRfc2xlZXAoY2hhciAqZmlsZSwgaW50IGxpbmUpCiB7Ci0jaWYgZGVmaW5lZChpbl9hdG9taWMpCisjaWZkZWYgaW5fYXRvbWljCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9qaWZmeTsJLyogcmF0ZWxpbWl0aW5nICovCiAKIAlpZiAoKGluX2F0b21pYygpIHx8IGlycXNfZGlzYWJsZWQoKSkgJiYKQEAgLTY3MDUsMTAgKzY3NjQsMTAgQEAKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKIHZvaWQgbm9ybWFsaXplX3J0X3Rhc2tzKHZvaWQpCiB7CisJc3RydWN0IHByaW9fYXJyYXkgKmFycmF5OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlwcmlvX2FycmF5X3QgKmFycmF5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JcnVucXVldWVfdCAqcnE7CisJc3RydWN0IHJxICpycTsKIAogCXJlYWRfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCWZvcl9lYWNoX3Byb2Nlc3MocCkgewpAQCAtNjc1Miw3ICs2ODExLDcgQEAKICAqCiAgKiBPTkxZIFZBTElEIFdIRU4gVEhFIFdIT0xFIFNZU1RFTSBJUyBTVE9QUEVEIQogICovCi10YXNrX3QgKmN1cnJfdGFzayhpbnQgY3B1KQorc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyX3Rhc2soaW50IGNwdSkKIHsKIAlyZXR1cm4gY3B1X2N1cnIoY3B1KTsKIH0KQEAgLTY3NzIsNyArNjgzMSw3IEBACiAgKgogICogT05MWSBWQUxJRCBXSEVOIFRIRSBXSE9MRSBTWVNURU0gSVMgU1RPUFBFRCEKICAqLwotdm9pZCBzZXRfY3Vycl90YXNrKGludCBjcHUsIHRhc2tfdCAqcCkKK3ZvaWQgc2V0X2N1cnJfdGFzayhpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJY3B1X2N1cnIoY3B1KSA9IHA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNTJhZGY1My4uN2ZlODc0ZCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMTAsNyArMTAsNiBAQAogICoJCXRvIGFsbG93IHNpZ25hbHMgdG8gYmUgc2VudCByZWxpYWJseS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CkBAIC01ODQsNyArNTgzLDcgQEAKIAkgICAgJiYgIWNhcGFibGUoQ0FQX0tJTEwpKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHNlY3VyaXR5X3Rhc2tfa2lsbCh0LCBpbmZvLCBzaWcpOworCWVycm9yID0gc2VjdXJpdHlfdGFza19raWxsKHQsIGluZm8sIHNpZywgMCk7CiAJaWYgKCFlcnJvcikKIAkJYXVkaXRfc2lnbmFsX2luZm8oc2lnLCB0KTsgLyogTGV0IGF1ZGl0IHN5c3RlbSBzZWUgdGhlIHNpZ25hbCAqLwogCXJldHVybiBlcnJvcjsKQEAgLTExMDcsNyArMTEwNiw3IEBACiAKIC8qIGxpa2Uga2lsbF9wcm9jX2luZm8oKSwgYnV0IGRvZXNuJ3QgdXNlIHVpZC9ldWlkIG9mICJjdXJyZW50IiAqLwogaW50IGtpbGxfcHJvY19pbmZvX2FzX3VpZChpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgcGlkX3QgcGlkLAotCQkgICAgICB1aWRfdCB1aWQsIHVpZF90IGV1aWQpCisJCSAgICAgIHVpZF90IHVpZCwgdWlkX3QgZXVpZCwgdTMyIHNlY2lkKQogewogCWludCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTExMjcsNiArMTEyNiw5IEBACiAJCXJldCA9IC1FUEVSTTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KKwlyZXQgPSBzZWN1cml0eV90YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5sb2NrOwogCWlmIChzaWcgJiYgcC0+c2lnaGFuZCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggOGYwM2UzYi4uMjE1NTQxZSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC02Miw2ICs2MiwxMTkgQEAKIH0KIAogLyoKKyAqIFRoaXMgb25lIGlzIGZvciBzb2Z0aXJxLmMtaW50ZXJuYWwgdXNlLAorICogd2hlcmUgaGFyZGlycXMgYXJlIGRpc2FibGVkIGxlZ2l0aW1hdGVseToKKyAqLworc3RhdGljIHZvaWQgX19sb2NhbF9iaF9kaXNhYmxlKHVuc2lnbmVkIGxvbmcgaXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk5fT05fT05DRShpbl9pcnEoKSk7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWFkZF9wcmVlbXB0X2NvdW50KFNPRlRJUlFfT0ZGU0VUKTsKKwkvKgorCSAqIFdlcmUgc29mdGlycXMgdHVybmVkIG9mZiBhYm92ZToKKwkgKi8KKwlpZiAoc29mdGlycV9jb3VudCgpID09IFNPRlRJUlFfT0ZGU0VUKQorCQl0cmFjZV9zb2Z0aXJxc19vZmYoaXApOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgbG9jYWxfYmhfZGlzYWJsZSh2b2lkKQoreworCV9fbG9jYWxfYmhfZGlzYWJsZSgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorCitFWFBPUlRfU1lNQk9MKGxvY2FsX2JoX2Rpc2FibGUpOworCit2b2lkIF9fbG9jYWxfYmhfZW5hYmxlKHZvaWQpCit7CisJV0FSTl9PTl9PTkNFKGluX2lycSgpKTsKKworCS8qCisJICogc29mdGlycXMgc2hvdWxkIG5ldmVyIGJlIGVuYWJsZWQgYnkgX19sb2NhbF9iaF9lbmFibGUoKSwKKwkgKiBpdCBhbHdheXMgbmVzdHMgaW5zaWRlIGxvY2FsX2JoX2VuYWJsZSgpIHNlY3Rpb25zOgorCSAqLworCVdBUk5fT05fT05DRShzb2Z0aXJxX2NvdW50KCkgPT0gU09GVElSUV9PRkZTRVQpOworCisJc3ViX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19sb2NhbF9iaF9lbmFibGUpOworCisvKgorICogU3BlY2lhbC1jYXNlIC0gc29mdGlycXMgY2FuIHNhZmVseSBiZSBlbmFibGVkIGluCisgKiBjb25kX3Jlc2NoZWRfc29mdGlycSgpLCBvciBieSBfX2RvX3NvZnRpcnEoKSwKKyAqIHdpdGhvdXQgcHJvY2Vzc2luZyBzdGlsbC1wZW5kaW5nIHNvZnRpcnFzOgorICovCit2b2lkIF9sb2NhbF9iaF9lbmFibGUodm9pZCkKK3sKKwlXQVJOX09OX09OQ0UoaW5faXJxKCkpOworCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKKworCWlmIChzb2Z0aXJxX2NvdW50KCkgPT0gU09GVElSUV9PRkZTRVQpCisJCXRyYWNlX3NvZnRpcnFzX29uKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJc3ViX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQpOworfQorCitFWFBPUlRfU1lNQk9MKF9sb2NhbF9iaF9lbmFibGUpOworCit2b2lkIGxvY2FsX2JoX2VuYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OX09OQ0UoaW5faXJxKCkpOworCVdBUk5fT05fT05DRShpcnFzX2Rpc2FibGVkKCkpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCS8qCisJICogQXJlIHNvZnRpcnFzIGdvaW5nIHRvIGJlIHR1cm5lZCBvbiBub3c6CisJICovCisJaWYgKHNvZnRpcnFfY291bnQoKSA9PSBTT0ZUSVJRX09GRlNFVCkKKwkJdHJhY2Vfc29mdGlycXNfb24oKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwkvKgorCSAqIEtlZXAgcHJlZW1wdGlvbiBkaXNhYmxlZCB1bnRpbCB3ZSBhcmUgZG9uZSB3aXRoCisJICogc29mdGlycSBwcm9jZXNzaW5nOgorIAkgKi8KKyAJc3ViX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQgLSAxKTsKKworCWlmICh1bmxpa2VseSghaW5faW50ZXJydXB0KCkgJiYgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkpKQorCQlkb19zb2Z0aXJxKCk7CisKKwlkZWNfcHJlZW1wdF9jb3VudCgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0wobG9jYWxfYmhfZW5hYmxlKTsKKwordm9pZCBsb2NhbF9iaF9lbmFibGVfaXAodW5zaWduZWQgbG9uZyBpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTl9PTl9PTkNFKGluX2lycSgpKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkvKgorCSAqIEFyZSBzb2Z0aXJxcyBnb2luZyB0byBiZSB0dXJuZWQgb24gbm93OgorCSAqLworCWlmIChzb2Z0aXJxX2NvdW50KCkgPT0gU09GVElSUV9PRkZTRVQpCisJCXRyYWNlX3NvZnRpcnFzX29uKGlwKTsKKwkvKgorCSAqIEtlZXAgcHJlZW1wdGlvbiBkaXNhYmxlZCB1bnRpbCB3ZSBhcmUgZG9uZSB3aXRoCisJICogc29mdGlycSBwcm9jZXNzaW5nOgorIAkgKi8KKyAJc3ViX3ByZWVtcHRfY291bnQoU09GVElSUV9PRkZTRVQgLSAxKTsKKworCWlmICh1bmxpa2VseSghaW5faW50ZXJydXB0KCkgJiYgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkpKQorCQlkb19zb2Z0aXJxKCk7CisKKwlkZWNfcHJlZW1wdF9jb3VudCgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0wobG9jYWxfYmhfZW5hYmxlX2lwKTsKKworLyoKICAqIFdlIHJlc3RhcnQgc29mdGlycSBwcm9jZXNzaW5nIE1BWF9TT0ZUSVJRX1JFU1RBUlQgdGltZXMsCiAgKiBhbmQgd2UgZmFsbCBiYWNrIHRvIHNvZnRpcnFkIGFmdGVyIHRoYXQuCiAgKgpAQCAtODAsOCArMTkzLDExIEBACiAJaW50IGNwdTsKIAogCXBlbmRpbmcgPSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKTsKKwlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKIAotCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlfX2xvY2FsX2JoX2Rpc2FibGUoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwl0cmFjZV9zb2Z0aXJxX2VudGVyKCk7CisKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiByZXN0YXJ0OgogCS8qIFJlc2V0IHRoZSBwZW5kaW5nIGJpdG1hc2sgYmVmb3JlIGVuYWJsaW5nIGlycXMgKi8KQEAgLTEwOSw3ICsyMjUsMTAgQEAKIAlpZiAocGVuZGluZykKIAkJd2FrZXVwX3NvZnRpcnFkKCk7CiAKLQlfX2xvY2FsX2JoX2VuYWJsZSgpOworCXRyYWNlX3NvZnRpcnFfZXhpdCgpOworCisJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CisJX2xvY2FsX2JoX2VuYWJsZSgpOwogfQogCiAjaWZuZGVmIF9fQVJDSF9IQVNfRE9fU09GVElSUQpAQCAtMTM2LDIzICsyNTUsNiBAQAogCiAjZW5kaWYKIAotdm9pZCBsb2NhbF9iaF9lbmFibGUodm9pZCkKLXsKLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7Ci0JLyoKLQkgKiBLZWVwIHByZWVtcHRpb24gZGlzYWJsZWQgdW50aWwgd2UgYXJlIGRvbmUgd2l0aAotCSAqIHNvZnRpcnEgcHJvY2Vzc2luZzoKLSAJICovCi0gCXN1Yl9wcmVlbXB0X2NvdW50KFNPRlRJUlFfT0ZGU0VUIC0gMSk7Ci0KLQlpZiAodW5saWtlbHkoIWluX2ludGVycnVwdCgpICYmIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSkKLQkJZG9fc29mdGlycSgpOwotCi0JZGVjX3ByZWVtcHRfY291bnQoKTsKLQlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsKLX0KLUVYUE9SVF9TWU1CT0wobG9jYWxfYmhfZW5hYmxlKTsKLQogI2lmZGVmIF9fQVJDSF9JUlFfRVhJVF9JUlFTX0RJU0FCTEVECiAjIGRlZmluZSBpbnZva2Vfc29mdGlycSgpCV9fZG9fc29mdGlycSgpCiAjZWxzZQpAQCAtMTY1LDYgKzI2Nyw3IEBACiB2b2lkIGlycV9leGl0KHZvaWQpCiB7CiAJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CisJdHJhY2VfaGFyZGlycV9leGl0KCk7CiAJc3ViX3ByZWVtcHRfY291bnQoSVJRX0VYSVRfT0ZGU0VUKTsKIAlpZiAoIWluX2ludGVycnVwdCgpICYmIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKQogCQlpbnZva2Vfc29mdGlycSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NwaW5sb2NrLmMgYi9rZXJuZWwvc3BpbmxvY2suYwppbmRleCBkMWI4MTA3Li5iZmQ2YWQ5IDEwMDY0NAotLS0gYS9rZXJuZWwvc3BpbmxvY2suYworKysgYi9rZXJuZWwvc3BpbmxvY2suYwpAQCAtOSwxMSArOSwxMSBAQAogICogU01QIGFuZCB0aGUgREVCVUdfU1BJTkxPQ0sgY2FzZXMuIChVUC1ub25kZWJ1ZyBpbmxpbmVzIHRoZW0pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAvKgpAQCAtMzAsOCArMzAsMTAgQEAKIGludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jaykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd19zcGluX3RyeWxvY2sobG9jaykpCisJaWYgKF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spKSB7CisJCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCQlyZXR1cm4gMTsKKwl9CiAJCiAJcHJlZW1wdF9lbmFibGUoKTsKIAlyZXR1cm4gMDsKQEAgLTQxLDggKzQzLDEwIEBACiBpbnQgX19sb2NrZnVuYyBfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSkKKwlpZiAoX3Jhd19yZWFkX3RyeWxvY2sobG9jaykpIHsKKwkJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCQlyZXR1cm4gMTsKKwl9CiAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiAwOwpAQCAtNTIsMTkgKzU2LDI4IEBACiBpbnQgX19sb2NrZnVuYyBfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd193cml0ZV90cnlsb2NrKGxvY2spKQorCWlmIChfcmF3X3dyaXRlX3RyeWxvY2sobG9jaykpIHsKKwkJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKIAkJcmV0dXJuIDE7CisJfQogCiAJcHJlZW1wdF9lbmFibGUoKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woX3dyaXRlX3RyeWxvY2spOwogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpIHx8ICFkZWZpbmVkKENPTkZJR19TTVApCisvKgorICogSWYgbG9ja2RlcCBpcyBlbmFibGVkIHRoZW4gd2UgdXNlIHRoZSBub24tcHJlZW1wdGlvbiBzcGluLW9wcworICogZXZlbiBvbiBDT05GSUdfUFJFRU1QVCwgYmVjYXVzZSBsb2NrZGVwIGFzc3VtZXMgdGhhdCBpbnRlcnJ1cHRzIGFyZQorICogbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZSAod2hpY2ggdGhlIHByZWVtcHQtc3Bpbi1vcHMgZG8pOgorICovCisjaWYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpIHx8ICFkZWZpbmVkKENPTkZJR19TTVApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKQogCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyd2xvY2tfYWNxdWlyZV9yZWFkKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJX3Jhd19yZWFkX2xvY2sobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2spOwpAQCAtNzUsNyArODgsMTcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwkvKgorCSAqIE9uIGxvY2tkZXAgd2UgZG9udCB3YW50IHRoZSBoYW5kLWNvZGVkIGlycS1lbmFibGUgb2YKKwkgKiBfcmF3X3NwaW5fbG9ja19mbGFncygpIGNvZGUsIGJlY2F1c2UgbG9ja2RlcCBhc3N1bWVzCisJICogdGhhdCBpbnRlcnJ1cHRzIGFyZSBub3QgcmUtZW5hYmxlZCBkdXJpbmcgbG9jay1hY3F1aXJlOgorCSAqLworI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCisJX3Jhd19zcGluX2xvY2sobG9jayk7CisjZWxzZQogCV9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssICZmbGFncyk7CisjZW5kaWYKIAlyZXR1cm4gZmxhZ3M7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfaXJxc2F2ZSk7CkBAIC04NCw2ICsxMDcsNyBAQAogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CisJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJX3Jhd19zcGluX2xvY2sobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfaXJxKTsKQEAgLTkyLDYgKzExNiw3IEBACiB7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwogCV9yYXdfc3Bpbl9sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2JoKTsKQEAgLTEwMiw2ICsxMjcsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKIAlfcmF3X3JlYWRfbG9jayhsb2NrKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CkBAIC0xMTEsNiArMTM3LDcgQEAKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKIAlfcmF3X3JlYWRfbG9jayhsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19pcnEpOwpAQCAtMTE5LDYgKzE0Niw3IEBACiB7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKIAlfcmF3X3JlYWRfbG9jayhsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19iaCk7CkBAIC0xMjksNiArMTU3LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwogCV9yYXdfd3JpdGVfbG9jayhsb2NrKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CkBAIC0xMzgsNiArMTY3LDcgQEAKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJX3Jhd193cml0ZV9sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19pcnEpOwpAQCAtMTQ2LDYgKzE3Niw3IEBACiB7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJX3Jhd193cml0ZV9sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfd3JpdGVfbG9ja19iaCk7CkBAIC0xNTMsNiArMTg0LDcgQEAKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CisJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJX3Jhd19zcGluX2xvY2sobG9jayk7CiB9CiAKQEAgLTE2MSw2ICsxOTMsNyBAQAogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrKHJ3bG9ja190ICpsb2NrKQogewogCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJX3Jhd193cml0ZV9sb2NrKGxvY2spOwogfQogCkBAIC0yNTYsOCArMjg5LDIyIEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBfUkVUX0lQXyk7CisJX3Jhd19zcGluX2xvY2sobG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0woX3NwaW5fbG9ja19uZXN0ZWQpOworCisjZW5kaWYKKwogdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQogeworCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwogCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTI2NSw2ICszMTIsNyBAQAogCiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9jayhyd2xvY2tfdCAqbG9jaykKIHsKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwogCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC0yNzIsNiArMzIwLDcgQEAKIAogdm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykKIHsKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwogCV9yYXdfcmVhZF91bmxvY2sobG9jayk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTI3OSw2ICszMjgsNyBAQAogCiB2b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwpAQCAtMjg3LDYgKzMzNyw3IEBACiAKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCiB7CisJc3Bpbl9yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJX3Jhd19zcGluX3VubG9jayhsb2NrKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTI5NSwxNCArMzQ2LDE2IEBACiAKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKIHsKKwlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKKwlsb2NhbF9iaF9lbmFibGVfaXAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woX3NwaW5fdW5sb2NrX2JoKTsKIAogdm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKHJ3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogeworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTMxMSw2ICszNjQsNyBAQAogCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKIHsKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwogCV9yYXdfcmVhZF91bmxvY2sobG9jayk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0zMTksMTQgKzM3MywxNiBAQAogCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQogeworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJbG9jYWxfYmhfZW5hYmxlX2lwKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9yZWFkX3VubG9ja19iaCk7CiAKIHZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTMzNSw2ICszOTEsNyBAQAogCiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19pcnEocndsb2NrX3QgKmxvY2spCiB7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTM0Myw5ICs0MDAsMTAgQEAKIAogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCiB7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJbG9jYWxfYmhfZW5hYmxlX2lwKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF93cml0ZV91bmxvY2tfYmgpOwogCkBAIC0zNTMsMTEgKzQxMSwxMyBAQAogewogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd19zcGluX3RyeWxvY2sobG9jaykpCisJaWYgKF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spKSB7CisJCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCQlyZXR1cm4gMTsKKwl9CiAKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CisJbG9jYWxfYmhfZW5hYmxlX2lwKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX3RyeWxvY2tfYmgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N0YWNrdHJhY2UuYyBiL2tlcm5lbC9zdGFja3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxODE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGtlcm5lbC9zdGFja3RyYWNlLmMKKyAqCisgKiBTdGFjayB0cmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorCit2b2lkIHByaW50X3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIGludCBzcGFjZXMpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHJhY2UtPm5yX2VudHJpZXM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGlwID0gdHJhY2UtPmVudHJpZXNbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IHNwYWNlcyArIDE7IGorKykKKwkJCXByaW50aygiICIpOworCQlwcmludF9pcF9zeW0oaXApOworCX0KK30KKwpkaWZmIC0tZ2l0IGEva2VybmVsL3N0b3BfbWFjaGluZS5jIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCmluZGV4IDJjMGFhY2MuLmRjZmI1ZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYworKysgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMjYsMTEgKzI1LDEzIEBACiBzdGF0aWMgYXRvbWljX3Qgc3RvcG1hY2hpbmVfdGhyZWFkX2FjazsKIHN0YXRpYyBERUNMQVJFX01VVEVYKHN0b3BtYWNoaW5lX211dGV4KTsKIAotc3RhdGljIGludCBzdG9wbWFjaGluZSh2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IHN0b3BtYWNoaW5lKHZvaWQgKmNwdSkKIHsKIAlpbnQgaXJxc19kaXNhYmxlZCA9IDA7CiAJaW50IHByZXBhcmVkID0gMDsKIAorCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoKGludCkobG9uZyljcHUpKTsKKwogCS8qIEFjazogd2UgYXJlIGFsaXZlICovCiAJc21wX21iKCk7IC8qIFRoZW9yZXRpY2FsbHkgdGhlIGFjayA9IDAgbWlnaHQgbm90IGJlIG9uIHRoaXMgQ1BVIHlldC4gKi8KIAlhdG9taWNfaW5jKCZzdG9wbWFjaGluZV90aHJlYWRfYWNrKTsKQEAgLTg0LDggKzg1LDcgQEAKIAogc3RhdGljIGludCBzdG9wX21hY2hpbmUodm9pZCkKIHsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPLTEgfTsKIAogCS8qIE9uZSBoaWdoLXByaW8gdGhyZWFkIHBlciBjcHUuICBXZSdsbCBkbyB0aGlzIG9uZS4gKi8KQEAgLTk2LDE2ICs5NiwxMSBAQAogCXN0b3BtYWNoaW5lX3N0YXRlID0gU1RPUE1BQ0hJTkVfV0FJVDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAkJaWYgKGkgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkKIAkJCWNvbnRpbnVlOwotCQl0c2sgPSBrdGhyZWFkX2NyZWF0ZShzdG9wbWFjaGluZSwgTlVMTCwgInN0b3BtYWNoaW5lIik7Ci0JCWlmIChJU19FUlIodHNrKSkgewotCQkJcmV0ID0gUFRSX0VSUih0c2spOworCQlyZXQgPSBrZXJuZWxfdGhyZWFkKHN0b3BtYWNoaW5lLCAodm9pZCAqKShsb25nKWksQ0xPTkVfS0VSTkVMKTsKKwkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKLQkJfQotCQlrdGhyZWFkX2JpbmQodHNrLCBpKTsKLQkJd2FrZV91cF9wcm9jZXNzKHRzayk7CiAJCXN0b3BtYWNoaW5lX251bV90aHJlYWRzKys7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMmQ1MTc5Yy4uZGJiM2I5YyAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtNCw3ICs0LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDkzYTJjNTMuLjM2MmEwY2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqICBSZW1vdmVkIGl0IGFuZCByZXBsYWNlZCBpdCB3aXRoIG9sZGVyIHN0eWxlLCAwMy8yMy8wMCwgQmlsbCBXZW5kbGluZwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KQEAgLTkzNCwxMyArOTMzLDE1IEBACiAJCS5leHRyYTEJCT0gJnplcm8sCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IFZNX1pPTkVfUkVDTEFJTV9JTlRFUlZBTCwKLQkJLnByb2NuYW1lCT0gInpvbmVfcmVjbGFpbV9pbnRlcnZhbCIsCi0JCS5kYXRhCQk9ICZ6b25lX3JlY2xhaW1faW50ZXJ2YWwsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHpvbmVfcmVjbGFpbV9pbnRlcnZhbCksCisJCS5jdGxfbmFtZQk9IFZNX01JTl9VTk1BUFBFRCwKKwkJLnByb2NuYW1lCT0gIm1pbl91bm1hcHBlZF9yYXRpbyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfamlmZmllcywKKwkJLnByb2NfaGFuZGxlcgk9ICZzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvX3N5c2N0bF9oYW5kbGVyLAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmb25lX2h1bmRyZWQsCiAJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggNWE4OTYwMi4uMzk2YTNjMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogICogcGxheWluZyB3aXRoIHh0aW1lIGFuZCBhdmVucnVuLgogICovCiAjaWZuZGVmIEFSQ0hfSEFWRV9YVElNRV9MT0NLCi1zZXFsb2NrX3QgeHRpbWVfbG9jayBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IFNFUUxPQ0tfVU5MT0NLRUQ7CitfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU0VRTE9DSyh4dGltZV9sb2NrKTsKIAogRVhQT1JUX1NZTUJPTCh4dGltZV9sb2NrKTsKICNlbmRpZgpAQCAtMTM2OCw3ICsxMzY4LDcgQEAKIAogc3RhdGljIHZvaWQgcHJvY2Vzc190aW1lb3V0KHVuc2lnbmVkIGxvbmcgX19kYXRhKQogewotCXdha2VfdXBfcHJvY2VzcygodGFza190ICopX19kYXRhKTsKKwl3YWtlX3VwX3Byb2Nlc3MoKHN0cnVjdCB0YXNrX3N0cnVjdCAqKV9fZGF0YSk7CiB9CiAKIC8qKgpAQCAtMTU1OSw2ICsxNTU5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBsb2NrZGVwOiB3ZSB3YW50IHRvIHRyYWNrIGVhY2ggcGVyLUNQVSBiYXNlIGFzIGEgc2VwYXJhdGUgbG9jay1jbGFzcywKKyAqIGJ1dCB0aW1lci1iYXNlcyBhcmUga21hbGxvYygpLWVkLCBzbyB3ZSBuZWVkIHRvIGF0dGFjaCBzZXBhcmF0ZQorICoga2V5cyB0byB0aGVtOgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJhc2VfbG9ja19rZXlzW05SX0NQVVNdOworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3RpbWVyc19jcHUoaW50IGNwdSkKIHsKIAlpbnQgajsKQEAgLTE1OTQsNiArMTYwMSw4IEBACiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPmxvY2spOworCWxvY2tkZXBfc2V0X2NsYXNzKCZiYXNlLT5sb2NrLCBiYXNlX2xvY2tfa2V5cyArIGNwdSk7CisKIAlmb3IgKGogPSAwOyBqIDwgVFZOX1NJWkU7IGorKykgewogCQlJTklUX0xJU1RfSEVBRChiYXNlLT50djUudmVjICsgaik7CiAJCUlOSVRfTElTVF9IRUFEKGJhc2UtPnR2NC52ZWMgKyBqKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93YWl0LmMgYi9rZXJuZWwvd2FpdC5jCmluZGV4IDc5MTY4MWMuLmExZDU3YWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93YWl0LmMKKysrIGIva2VybmVsL3dhaXQuYwpAQCAtMyw3ICszLDYgQEAKICAqCiAgKiAoQykgMjAwNCBXaWxsaWFtIElyd2luLCBPcmFjbGUKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTEsNiArMTAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogCitzdHJ1Y3QgbG9ja19jbGFzc19rZXkgd2FpdHF1ZXVlX2xvY2tfa2V5OworCitFWFBPUlRfU1lNQk9MKHdhaXRxdWV1ZV9sb2NrX2tleSk7CisKIHZvaWQgZmFzdGNhbGwgYWRkX3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDU5ZjBiNDIuLjkwZDJjNjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3b3JrX2RvbmU7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7Ci0JdGFza190ICp0aHJlYWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CiAKIAlpbnQgcnVuX2RlcHRoOwkJLyogRGV0ZWN0IHJ1bl93b3JrcXVldWUoKSByZWN1cnNpb24gZGVwdGggKi8KIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA1MzMwOTExLi5lNTg4OWIxIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMjMsNiArMjMsMjIgQEAKIAkgIGtleXMgYXJlIGRvY3VtZW50ZWQgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9zeXNycS50eHQ+LiBEb24ndCBzYXkgWQogCSAgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHRoaXMgaGFjayBkb2VzLgogCitjb25maWcgVU5VU0VEX1NZTUJPTFMKKwlib29sICJFbmFibGUgdW51c2VkL29ic29sZXRlIGV4cG9ydGVkIHN5bWJvbHMiCisJZGVmYXVsdCB5IGlmIFg4NgorCWhlbHAKKwkgIFVudXNlZCBidXQgZXhwb3J0ZWQgc3ltYm9scyBtYWtlIHRoZSBrZXJuZWwgbmVlZGxlc3NseSBiaWdnZXIuICBGb3IKKwkgIHRoYXQgcmVhc29uIG1vc3Qgb2YgdGhlc2UgdW51c2VkIGV4cG9ydHMgd2lsbCBzb29uIGJlIHJlbW92ZWQuICBUaGlzCisJICBvcHRpb24gaXMgcHJvdmlkZWQgdGVtcG9yYXJpbHkgdG8gcHJvdmlkZSBhIHRyYW5zaXRpb24gcGVyaW9kIGluIGNhc2UKKwkgIHNvbWUgZXh0ZXJuYWwga2VybmVsIG1vZHVsZSBuZWVkcyBvbmUgb2YgdGhlc2Ugc3ltYm9scyBhbnl3YXkuIElmIHlvdQorCSAgZW5jb3VudGVyIHN1Y2ggYSBjYXNlIGluIHlvdXIgbW9kdWxlLCBjb25zaWRlciBpZiB5b3UgYXJlIGFjdHVhbGx5CisJICB1c2luZyB0aGUgcmlnaHQgQVBJLiAgKHJhdGlvbmFsZTogc2luY2Ugbm9ib2R5IGluIHRoZSBrZXJuZWwgaXMgdXNpbmcKKwkgIHRoaXMgaW4gYSBtb2R1bGUsIHRoZXJlIGlzIGEgcHJldHR5IGdvb2QgY2hhbmNlIGl0J3MgYWN0dWFsbHkgdGhlCisJICB3cm9uZyBpbnRlcmZhY2UgdG8gdXNlKS4gIElmIHlvdSByZWFsbHkgbmVlZCB0aGUgc3ltYm9sLCBwbGVhc2Ugc2VuZCBhCisJICBtYWlsIHRvIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IG1lbnRpb25pbmcgdGhlIHN5bWJvbCBhbmQgd2h5CisJICB5b3UgcmVhbGx5IG5lZWQgaXQsIGFuZCB3aGF0IHRoZSBtZXJnZSBwbGFuIHRvIHRoZSBtYWlubGluZSBrZXJuZWwgZm9yCisJICB5b3VyIG1vZHVsZSBpcy4KKwogY29uZmlnIERFQlVHX0tFUk5FTAogCWJvb2wgIktlcm5lbCBkZWJ1Z2dpbmciCiAJaGVscApAQCAtMzIsNyArNDgsNyBAQAogY29uZmlnIExPR19CVUZfU0hJRlQKIAlpbnQgIktlcm5lbCBsb2cgYnVmZmVyIHNpemUgKDE2ID0+IDY0S0IsIDE3ID0+IDEyOEtCKSIgaWYgREVCVUdfS0VSTkVMCiAJcmFuZ2UgMTIgMjEKLQlkZWZhdWx0IDE3IGlmIFMzOTAKKwlkZWZhdWx0IDE3IGlmIFMzOTAgfHwgTE9DS0RFUAogCWRlZmF1bHQgMTYgaWYgWDg2X05VTUFRIHx8IElBNjQKIAlkZWZhdWx0IDE1IGlmIFNNUAogCWRlZmF1bHQgMTQKQEAgLTkxLDcgKzEwNyw3IEBACiAKIGNvbmZpZyBERUJVR19QUkVFTVBUCiAJYm9vbCAiRGVidWcgcHJlZW1wdGlibGUga2VybmVsIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUkVFTVBUICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGVuIHRoZSBrZXJuZWwgd2lsbCB1c2UgYSBkZWJ1ZyB2YXJpYW50IG9mIHRoZQpAQCAtOTksMTQgKzExNSw2IEBACiAJICBpZiBrZXJuZWwgY29kZSB1c2VzIGl0IGluIGEgcHJlZW1wdGlvbi11bnNhZmUgd2F5LiBBbHNvLCB0aGUga2VybmVsCiAJICB3aWxsIGRldGVjdCBwcmVlbXB0aW9uIGNvdW50IHVuZGVyZmxvd3MuCiAKLWNvbmZpZyBERUJVR19NVVRFWEVTCi0JYm9vbCAiTXV0ZXggZGVidWdnaW5nLCBkZWFkbG9jayBkZXRlY3Rpb24iCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQloZWxwCi0JIFRoaXMgYWxsb3dzIG11dGV4IHNlbWFudGljcyB2aW9sYXRpb25zIGFuZCBtdXRleCByZWxhdGVkIGRlYWRsb2NrcwotCSAobG9ja3VwcykgdG8gYmUgZGV0ZWN0ZWQgYW5kIHJlcG9ydGVkIGF1dG9tYXRpY2FsbHkuCi0KIGNvbmZpZyBERUJVR19SVF9NVVRFWEVTCiAJYm9vbCAiUlQgTXV0ZXggZGVidWdnaW5nLCBkZWFkbG9jayBkZXRlY3Rpb24iCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUlRfTVVURVhFUwpAQCAtMTI2LDcgKzEzNCw3IEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgcnQtbXV0ZXggdGVzdGVyLgogCiBjb25maWcgREVCVUdfU1BJTkxPQ0sKLQlib29sICJTcGlubG9jayBkZWJ1Z2dpbmciCisJYm9vbCAiU3BpbmxvY2sgYW5kIHJ3LWxvY2sgZGVidWdnaW5nOiBiYXNpYyBjaGVja3MiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGFuZCBidWlsZCBTTVAgdG8gY2F0Y2ggbWlzc2luZyBzcGlubG9jayBpbml0aWFsaXphdGlvbgpAQCAtMTM0LDEzICsxNDIsMTIyIEBACiAJICBiZXN0IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgTk1JIHdhdGNoZG9nIHNvIHRoYXQgc3BpbmxvY2sKIAkgIGRlYWRsb2NrcyBhcmUgYWxzbyBkZWJ1Z2dhYmxlLgogCitjb25maWcgREVCVUdfTVVURVhFUworCWJvb2wgIk11dGV4IGRlYnVnZ2luZzogYmFzaWMgY2hlY2tzIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSBUaGlzIGZlYXR1cmUgYWxsb3dzIG11dGV4IHNlbWFudGljcyB2aW9sYXRpb25zIHRvIGJlIGRldGVjdGVkIGFuZAorCSByZXBvcnRlZC4KKworY29uZmlnIERFQlVHX1JXU0VNUworCWJvb2wgIlJXLXNlbSBkZWJ1Z2dpbmc6IGJhc2ljIGNoZWNrcyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgVGhpcyBmZWF0dXJlIGFsbG93cyByZWFkLXdyaXRlIHNlbWFwaG9yZSBzZW1hbnRpY3MgdmlvbGF0aW9ucyB0bworCSBiZSBkZXRlY3RlZCBhbmQgcmVwb3J0ZWQuCisKK2NvbmZpZyBERUJVR19MT0NLX0FMTE9DCisJYm9vbCAiTG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzIgorCWRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCisJc2VsZWN0IERFQlVHX1NQSU5MT0NLCisJc2VsZWN0IERFQlVHX01VVEVYRVMKKwlzZWxlY3QgREVCVUdfUldTRU1TCisJc2VsZWN0IExPQ0tERVAKKwloZWxwCisJIFRoaXMgZmVhdHVyZSB3aWxsIGNoZWNrIHdoZXRoZXIgYW55IGhlbGQgbG9jayAoc3BpbmxvY2ssIHJ3bG9jaywKKwkgbXV0ZXggb3IgcndzZW0pIGlzIGluY29ycmVjdGx5IGZyZWVkIGJ5IHRoZSBrZXJuZWwsIHZpYSBhbnkgb2YgdGhlCisJIG1lbW9yeS1mcmVlaW5nIHJvdXRpbmVzIChrZnJlZSgpLCBrbWVtX2NhY2hlX2ZyZWUoKSwgZnJlZV9wYWdlcygpLAorCSB2ZnJlZSgpLCBldGMuKSwgd2hldGhlciBhIGxpdmUgbG9jayBpcyBpbmNvcnJlY3RseSByZWluaXRpYWxpemVkIHZpYQorCSBzcGluX2xvY2tfaW5pdCgpL211dGV4X2luaXQoKS9ldGMuLCBvciB3aGV0aGVyIHRoZXJlIGlzIGFueSBsb2NrCisJIGhlbGQgZHVyaW5nIHRhc2sgZXhpdC4KKworY29uZmlnIFBST1ZFX0xPQ0tJTkcKKwlib29sICJMb2NrIGRlYnVnZ2luZzogcHJvdmUgbG9ja2luZyBjb3JyZWN0bmVzcyIKKwlkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgJiYgU1RBQ0tUUkFDRV9TVVBQT1JUICYmIExPQ0tERVBfU1VQUE9SVAorCXNlbGVjdCBMT0NLREVQCisJc2VsZWN0IERFQlVHX1NQSU5MT0NLCisJc2VsZWN0IERFQlVHX01VVEVYRVMKKwlzZWxlY3QgREVCVUdfUldTRU1TCisJc2VsZWN0IERFQlVHX0xPQ0tfQUxMT0MKKwlkZWZhdWx0IG4KKwloZWxwCisJIFRoaXMgZmVhdHVyZSBlbmFibGVzIHRoZSBrZXJuZWwgdG8gcHJvdmUgdGhhdCBhbGwgbG9ja2luZworCSB0aGF0IG9jY3VycyBpbiB0aGUga2VybmVsIHJ1bnRpbWUgaXMgbWF0aGVtYXRpY2FsbHkKKwkgY29ycmVjdDogdGhhdCB1bmRlciBubyBjaXJjdW1zdGFuY2UgY291bGQgYW4gYXJiaXRyYXJ5IChhbmQKKwkgbm90IHlldCB0cmlnZ2VyZWQpIGNvbWJpbmF0aW9uIG9mIG9ic2VydmVkIGxvY2tpbmcKKwkgc2VxdWVuY2VzIChvbiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIENQVXMsIHJ1bm5pbmcgYW4KKwkgYXJiaXRyYXJ5IG51bWJlciBvZiB0YXNrcyBhbmQgaW50ZXJydXB0IGNvbnRleHRzKSBjYXVzZSBhCisJIGRlYWRsb2NrLgorCisJIEluIHNob3J0LCB0aGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHJlcG9ydCBsb2NraW5nCisJIHJlbGF0ZWQgZGVhZGxvY2tzIGJlZm9yZSB0aGV5IGFjdHVhbGx5IG9jY3VyLgorCisJIFRoZSBwcm9vZiBkb2VzIG5vdCBkZXBlbmQgb24gaG93IGhhcmQgYW5kIGNvbXBsZXggYQorCSBkZWFkbG9jayBzY2VuYXJpbyB3b3VsZCBiZSB0byB0cmlnZ2VyOiBob3cgbWFueQorCSBwYXJ0aWNpcGFudCBDUFVzLCB0YXNrcyBhbmQgaXJxLWNvbnRleHRzIHdvdWxkIGJlIG5lZWRlZAorCSBmb3IgaXQgdG8gdHJpZ2dlci4gVGhlIHByb29mIGFsc28gZG9lcyBub3QgZGVwZW5kIG9uCisJIHRpbWluZzogaWYgYSByYWNlIGFuZCBhIHJlc3VsdGluZyBkZWFkbG9jayBpcyBwb3NzaWJsZQorCSB0aGVvcmV0aWNhbGx5IChubyBtYXR0ZXIgaG93IHVubGlrZWx5IHRoZSByYWNlIHNjZW5hcmlvCisJIGlzKSwgaXQgd2lsbCBiZSBwcm92ZW4gc28gYW5kIHdpbGwgaW1tZWRpYXRlbHkgYmUKKwkgcmVwb3J0ZWQgYnkgdGhlIGtlcm5lbCAob25jZSB0aGUgZXZlbnQgaXMgb2JzZXJ2ZWQgdGhhdAorCSBtYWtlcyB0aGUgZGVhZGxvY2sgdGhlb3JldGljYWxseSBwb3NzaWJsZSkuCisKKwkgSWYgYSBkZWFkbG9jayBpcyBpbXBvc3NpYmxlIChpLmUuIHRoZSBsb2NraW5nIHJ1bGVzLCBhcworCSBvYnNlcnZlZCBieSB0aGUga2VybmVsLCBhcmUgbWF0aGVtYXRpY2FsbHkgY29ycmVjdCksIHRoZQorCSBrZXJuZWwgcmVwb3J0cyBub3RoaW5nLgorCisJIE5PVEU6IHRoaXMgZmVhdHVyZSBjYW4gYWxzbyBiZSBlbmFibGVkIGZvciByd2xvY2tzLCBtdXRleGVzCisJIGFuZCByd3NlbXMgLSBpbiB3aGljaCBjYXNlIGFsbCBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZQorCSBkaWZmZXJlbnQgbG9ja2luZyB2YXJpYW50cyBhcmUgb2JzZXJ2ZWQgYW5kIG1hcHBlZCB0b28sIGFuZAorCSB0aGUgcHJvb2Ygb2Ygb2JzZXJ2ZWQgY29ycmVjdG5lc3MgaXMgYWxzbyBtYWludGFpbmVkIGZvciBhbgorCSBhcmJpdHJhcnkgY29tYmluYXRpb24gb2YgdGhlc2Ugc2VwYXJhdGUgbG9ja2luZyB2YXJpYW50cy4KKworCSBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQuCisKK2NvbmZpZyBMT0NLREVQCisJYm9vbAorCWRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCisJc2VsZWN0IFNUQUNLVFJBQ0UKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUgorCXNlbGVjdCBLQUxMU1lNUworCXNlbGVjdCBLQUxMU1lNU19BTEwKKworY29uZmlnIERFQlVHX0xPQ0tERVAKKwlib29sICJMb2NrIGRlcGVuZGVuY3kgZW5naW5lIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIExPQ0tERVAKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGxvY2sgZGVwZW5kZW5jeSBlbmdpbmUgd2lsbCBkbworCSAgYWRkaXRpb25hbCBydW50aW1lIGNoZWNrcyB0byBkZWJ1ZyBpdHNlbGYsIGF0IHRoZSBwcmljZQorCSAgb2YgbW9yZSBydW50aW1lIG92ZXJoZWFkLgorCitjb25maWcgVFJBQ0VfSVJRRkxBR1MKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCisJZGVwZW5kcyBvbiBQUk9WRV9MT0NLSU5HCisKIGNvbmZpZyBERUJVR19TUElOTE9DS19TTEVFUAotCWJvb2wgIlNsZWVwLWluc2lkZS1zcGlubG9jayBjaGVja2luZyIKKwlib29sICJTcGlubG9jayBkZWJ1Z2dpbmc6IHNsZWVwLWluc2lkZS1zcGlubG9jayBjaGVja2luZyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB2YXJpb3VzIHJvdXRpbmVzIHdoaWNoIG1heSBzbGVlcCB3aWxsIGJlY29tZSB2ZXJ5CiAJICBub2lzeSBpZiB0aGV5IGFyZSBjYWxsZWQgd2l0aCBhIHNwaW5sb2NrIGhlbGQuCiAKK2NvbmZpZyBERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMKKwlib29sICJMb2NraW5nIEFQSSBib290LXRpbWUgc2VsZi10ZXN0cyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBydW4gYSBzaG9ydCBzZWxmLXRlc3QgZHVyaW5nCisJICBib290dXAuIFRoZSBzZWxmLXRlc3QgY2hlY2tzIHdoZXRoZXIgY29tbW9uIHR5cGVzIG9mIGxvY2tpbmcgYnVncworCSAgYXJlIGRldGVjdGVkIGJ5IGRlYnVnZ2luZyBtZWNoYW5pc21zIG9yIG5vdC4gKGlmIHlvdSBkaXNhYmxlCisJICBsb2NrIGRlYnVnZ2luZyB0aGVuIHRob3NlIGJ1Z3Mgd29udCBiZSBkZXRlY3RlZCBvZiBjb3Vyc2UuKQorCSAgVGhlIGZvbGxvd2luZyBsb2NraW5nIEFQSXMgYXJlIGNvdmVyZWQ6IHNwaW5sb2Nrcywgcndsb2NrcywKKwkgIG11dGV4ZXMgYW5kIHJ3c2Vtcy4KKworY29uZmlnIFNUQUNLVFJBQ0UKKwlib29sCisJZGVwZW5kcyBvbiBTVEFDS1RSQUNFX1NVUFBPUlQKKwogY29uZmlnIERFQlVHX0tPQkpFQ1QKIAlib29sICJrb2JqZWN0IGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApAQCAtMTk2LDcgKzMxMyw3IEBACiAKIGNvbmZpZyBGUkFNRV9QT0lOVEVSCiAJYm9vbCAiQ29tcGlsZSB0aGUga2VybmVsIHdpdGggZnJhbWUgcG9pbnRlcnMiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgKFg4NiB8fCBDUklTIHx8IE02OEsgfHwgTTY4S05PTU1VIHx8IEZSViB8fCBVTUwpCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgKFg4NiB8fCBDUklTIHx8IE02OEsgfHwgTTY4S05PTU1VIHx8IEZSViB8fCBVTUwgfHwgUzM5MCkKIAlkZWZhdWx0IHkgaWYgREVCVUdfSU5GTyAmJiBVTUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSB3aWxsIGJlIHNsaWdodGx5IGxhcmdlcgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDEwYzEzYzkuLmJlOTcxOWEgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTExLDEzICsxMSwxNCBAQAogCiBsaWIteQkrPSBrb2JqZWN0Lm8ga3JlZi5vIGtvYmplY3RfdWV2ZW50Lm8ga2xpc3QubwogCi1vYmoteSArPSBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGlvbWFwX2NvcHkubworb2JqLXkgKz0gc29ydC5vIHBhcnNlci5vIGhhbGZtZDQubyBpb21hcF9jb3B5Lm8gZGVidWdfbG9ja3MubwogCiBpZmVxICgkKENPTkZJR19ERUJVR19LT0JKRUNUKSx5KQogQ0ZMQUdTX2tvYmplY3QubyArPSAtRERFQlVHCiBDRkxBR1Nfa29iamVjdF91ZXZlbnQubyArPSAtRERFQlVHCiBlbmRpZgogCitvYmotJChDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTKSArPSBsb2NraW5nLXNlbGZ0ZXN0Lm8KIG9iai0kKENPTkZJR19ERUJVR19TUElOTE9DSykgKz0gc3BpbmxvY2tfZGVidWcubwogbGliLSQoQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0spICs9IHJ3c2VtLXNwaW5sb2NrLm8KIGxpYi0kKENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSkgKz0gcndzZW0ubwpkaWZmIC0tZ2l0IGEvbGliL2J1c3Rfc3BpbmxvY2tzLmMgYi9saWIvYnVzdF9zcGlubG9ja3MuYwppbmRleCA2YmI3MzE5Li5hMjA1NWJjIDEwMDY0NAotLS0gYS9saWIvYnVzdF9zcGlubG9ja3MuYworKysgYi9saWIvYnVzdF9zcGlubG9ja3MuYwpAQCAtNyw3ICs3LDYgQEAKICAqIGFuZCBwYW5pYygpIGluZm9ybWF0aW9uIGZyb20gcmVhY2hpbmcgdGhlIHVzZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9saWIvZGVidWdfbG9ja3MuYyBiL2xpYi9kZWJ1Z19sb2Nrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjAxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVidWdfbG9ja3MuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogbGliL2RlYnVnX2xvY2tzLmMKKyAqCisgKiBHZW5lcmljIHBsYWNlIGZvciBjb21tb24gZGVidWdnaW5nIGZhY2lsaXRpZXMgZm9yIHZhcmlvdXMgbG9ja3M6CisgKiBzcGlubG9ja3MsIHJ3bG9ja3MsIG11dGV4ZXMgYW5kIHJ3c2Vtcy4KKyAqCisgKiBTdGFydGVkIGJ5IEluZ28gTW9sbmFyOgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgorCisvKgorICogV2Ugd2FudCB0byB0dXJuIGFsbCBsb2NrLWRlYnVnZ2luZyBmYWNpbGl0aWVzIG9uL29mZiBhdCBvbmNlLAorICogdmlhIGEgZ2xvYmFsIGZsYWcuIFRoZSByZWFzb24gaXMgdGhhdCBvbmNlIGEgc2luZ2xlIGJ1ZyBoYXMgYmVlbgorICogZGV0ZWN0ZWQgYW5kIHJlcG9ydGVkLCB0aGVyZSBtaWdodCBiZSBjYXNjYWRlIG9mIGZvbGxvd3VwIGJ1Z3MKKyAqIHRoYXQgd291bGQganVzdCBtdWRkeSB0aGUgbG9nLiBTbyB3ZSByZXBvcnQgdGhlIGZpcnN0IG9uZSBhbmQKKyAqIHNodXQgdXAgYWZ0ZXIgdGhhdC4KKyAqLworaW50IGRlYnVnX2xvY2tzID0gMTsKKworLyoKKyAqIFRoZSBsb2NraW5nLXRlc3RzdWl0ZSB1c2VzIDxkZWJ1Z19sb2Nrc19zaWxlbnQ+IHRvIGdldCBhCisgKiAnc2lsZW50IGZhaWx1cmUnOiBub3RoaW5nIGlzIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUgd2hlbgorICogYSBsb2NraW5nIGJ1ZyBpcyBkZXRlY3RlZC4KKyAqLworaW50IGRlYnVnX2xvY2tzX3NpbGVudDsKKworLyoKKyAqIEdlbmVyaWMgJ3R1cm4gb2ZmIGFsbCBsb2NrIGRlYnVnZ2luZycgZnVuY3Rpb246CisgKi8KK2ludCBkZWJ1Z19sb2Nrc19vZmYodm9pZCkKK3sKKwlpZiAoeGNoZygmZGVidWdfbG9ja3MsIDApKSB7CisJCWlmICghZGVidWdfbG9ja3Nfc2lsZW50KSB7CisJCQljb25zb2xlX3ZlcmJvc2UoKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2V4dGFibGUuYyBiL2xpYi9leHRhYmxlLmMKaW5kZXggMDFjMDhiNS4uNDYzZjQ1NiAxMDA2NDQKLS0tIGEvbGliL2V4dGFibGUuYworKysgYi9saWIvZXh0YWJsZS5jCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KZGlmZiAtLWdpdCBhL2xpYi9rZXJuZWxfbG9jay5jIGIvbGliL2tlcm5lbF9sb2NrLmMKaW5kZXggZTcxM2U4Ni4uZTBmZGZkZCAxMDA2NDQKLS0tIGEvbGliL2tlcm5lbF9sb2NrLmMKKysrIGIvbGliL2tlcm5lbF9sb2NrLmMKQEAgLTE3Nyw3ICsxNzcsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdW5sb2NrX2tlcm5lbCh2b2lkKQogewotCXNwaW5fdW5sb2NrKCZrZXJuZWxfZmxhZyk7CisJLyoKKwkgKiB0aGUgQktMIGlzIG5vdCBjb3ZlcmVkIGJ5IGxvY2tkZXAsIHNvIHdlIG9wZW4tY29kZSB0aGUKKwkgKiB1bmxvY2tpbmcgc2VxdWVuY2UgKGFuZCB0aHVzIGF2b2lkIHRoZSBkZXAtY2hhaW4gb3BzKToKKwkgKi8KKwlfcmF3X3NwaW5fdW5sb2NrKCZrZXJuZWxfZmxhZyk7CisJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggN2YyMGU3Yi4uMmIxNTMwZiAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTUwLDYgKzUwLDEwIEBACiAJCXJldHVybiAib2ZmbGluZSI7CiAJY2FzZSBLT0JKX09OTElORToKIAkJcmV0dXJuICJvbmxpbmUiOworCWNhc2UgS09CSl9ET0NLOgorCQlyZXR1cm4gImRvY2siOworCWNhc2UgS09CSl9VTkRPQ0s6CisJCXJldHVybiAidW5kb2NrIjsKIAlkZWZhdWx0OgogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9saWIvbG9ja2luZy1zZWxmdGVzdC1oYXJkaXJxLmggYi9saWIvbG9ja2luZy1zZWxmdGVzdC1oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkNGExNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LWhhcmRpcnEuaApAQCAtMCwwICsxLDkgQEAKKyN1bmRlZiBJUlFfRElTQUJMRQorI3VuZGVmIElSUV9FTkFCTEUKKyN1bmRlZiBJUlFfRU5URVIKKyN1bmRlZiBJUlFfRVhJVAorCisjZGVmaW5lIElSUV9FTkFCTEUJCUhBUkRJUlFfRU5BQkxFCisjZGVmaW5lIElSUV9ESVNBQkxFCQlIQVJESVJRX0RJU0FCTEUKKyNkZWZpbmUgSVJRX0VOVEVSCQlIQVJESVJRX0VOVEVSCisjZGVmaW5lIElSUV9FWElUCQlIQVJESVJRX0VYSVQKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LW11dGV4LmggYi9saWIvbG9ja2luZy1zZWxmdGVzdC1tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NjAxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC1tdXRleC5oCkBAIC0wLDAgKzEsMTEgQEAKKyN1bmRlZiBMT0NLCisjZGVmaW5lIExPQ0sJCU1MCisKKyN1bmRlZiBVTkxPQ0sKKyNkZWZpbmUgVU5MT0NLCQlNVQorCisjdW5kZWYgUkxPQ0sKKyN1bmRlZiBXTE9DSworCisjdW5kZWYgSU5JVAorI2RlZmluZSBJTklUCQlNSQpkaWZmIC0tZ2l0IGEvbGliL2xvY2tpbmctc2VsZnRlc3QtcmxvY2staGFyZGlycS5oIGIvbGliL2xvY2tpbmctc2VsZnRlc3QtcmxvY2staGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNTE3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC1ybG9jay1oYXJkaXJxLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay5oIgorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtaGFyZGlycS5oIgpkaWZmIC0tZ2l0IGEvbGliL2xvY2tpbmctc2VsZnRlc3QtcmxvY2stc29mdGlycS5oIGIvbGliL2xvY2tpbmctc2VsZnRlc3QtcmxvY2stc29mdGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTQ1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC1ybG9jay1zb2Z0aXJxLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay5oIgorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc29mdGlycS5oIgpkaWZmIC0tZ2l0IGEvbGliL2xvY2tpbmctc2VsZnRlc3QtcmxvY2suaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4OTA0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLmgKQEAgLTAsMCArMSwxNCBAQAorI3VuZGVmIExPQ0sKKyNkZWZpbmUgTE9DSwkJUkwKKworI3VuZGVmIFVOTE9DSworI2RlZmluZSBVTkxPQ0sJCVJVCisKKyN1bmRlZiBSTE9DSworI2RlZmluZSBSTE9DSwkJUkwKKworI3VuZGVmIFdMT0NLCisjZGVmaW5lIFdMT0NLCQlXTAorCisjdW5kZWYgSU5JVAorI2RlZmluZSBJTklUCQlSV0kKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXJzZW0uaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXJzZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmRhODg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3QtcnNlbS5oCkBAIC0wLDAgKzEsMTQgQEAKKyN1bmRlZiBMT0NLCisjZGVmaW5lIExPQ0sJCVJTTAorCisjdW5kZWYgVU5MT0NLCisjZGVmaW5lIFVOTE9DSwkJUlNVCisKKyN1bmRlZiBSTE9DSworI2RlZmluZSBSTE9DSwkJUlNMCisKKyN1bmRlZiBXTE9DSworI2RlZmluZSBXTE9DSwkJV1NMCisKKyN1bmRlZiBJTklUCisjZGVmaW5lIElOSVQJCVJXU0kKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXNvZnRpcnEuaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXNvZnRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODNkZTJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3Qtc29mdGlycS5oCkBAIC0wLDAgKzEsOSBAQAorI3VuZGVmIElSUV9ESVNBQkxFCisjdW5kZWYgSVJRX0VOQUJMRQorI3VuZGVmIElSUV9FTlRFUgorI3VuZGVmIElSUV9FWElUCisKKyNkZWZpbmUgSVJRX0RJU0FCTEUJCVNPRlRJUlFfRElTQUJMRQorI2RlZmluZSBJUlFfRU5BQkxFCQlTT0ZUSVJRX0VOQUJMRQorI2RlZmluZSBJUlFfRU5URVIJCVNPRlRJUlFfRU5URVIKKyNkZWZpbmUgSVJRX0VYSVQJCVNPRlRJUlFfRVhJVApkaWZmIC0tZ2l0IGEvbGliL2xvY2tpbmctc2VsZnRlc3Qtc3Bpbi1oYXJkaXJxLmggYi9saWIvbG9ja2luZy1zZWxmdGVzdC1zcGluLWhhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTMxOThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3Qtc3Bpbi1oYXJkaXJxLmgKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1zcGluLmgiCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1oYXJkaXJxLmgiCmRpZmYgLS1naXQgYS9saWIvbG9ja2luZy1zZWxmdGVzdC1zcGluLXNvZnRpcnEuaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXNwaW4tc29mdGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzJlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC1zcGluLXNvZnRpcnEuaApAQCAtMCwwICsxLDIgQEAKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaCIKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNvZnRpcnEuaCIKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QxYjRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3Qtc3Bpbi5oCkBAIC0wLDAgKzEsMTEgQEAKKyN1bmRlZiBMT0NLCisjZGVmaW5lIExPQ0sJCUwKKworI3VuZGVmIFVOTE9DSworI2RlZmluZSBVTkxPQ0sJCVUKKworI3VuZGVmIFJMT0NLCisjdW5kZWYgV0xPQ0sKKworI3VuZGVmIElOSVQKKyNkZWZpbmUgSU5JVAkJU0kKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLWhhcmRpcnEuaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLWhhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQyZTUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3Qtd2xvY2staGFyZGlycS5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LWhhcmRpcnEuaCIKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLXNvZnRpcnEuaCBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLXNvZnRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjgwZDFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3Qtd2xvY2stc29mdGlycS5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNvZnRpcnEuaCIKZGlmZiAtLWdpdCBhL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLmggYi9saWIvbG9ja2luZy1zZWxmdGVzdC13bG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTUzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC13bG9jay5oCkBAIC0wLDAgKzEsMTQgQEAKKyN1bmRlZiBMT0NLCisjZGVmaW5lIExPQ0sJCVdMCisKKyN1bmRlZiBVTkxPQ0sKKyNkZWZpbmUgVU5MT0NLCQlXVQorCisjdW5kZWYgUkxPQ0sKKyNkZWZpbmUgUkxPQ0sJCVJMCisKKyN1bmRlZiBXTE9DSworI2RlZmluZSBXTE9DSwkJV0wKKworI3VuZGVmIElOSVQKKyNkZWZpbmUgSU5JVAkJUldJCmRpZmYgLS1naXQgYS9saWIvbG9ja2luZy1zZWxmdGVzdC13c2VtLmggYi9saWIvbG9ja2luZy1zZWxmdGVzdC13c2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4YzVmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LXdzZW0uaApAQCAtMCwwICsxLDE0IEBACisjdW5kZWYgTE9DSworI2RlZmluZSBMT0NLCQlXU0wKKworI3VuZGVmIFVOTE9DSworI2RlZmluZSBVTkxPQ0sJCVdTVQorCisjdW5kZWYgUkxPQ0sKKyNkZWZpbmUgUkxPQ0sJCVJTTAorCisjdW5kZWYgV0xPQ0sKKyNkZWZpbmUgV0xPQ0sJCVdTTAorCisjdW5kZWYgSU5JVAorI2RlZmluZSBJTklUCQlSV1NJCmRpZmYgLS1naXQgYS9saWIvbG9ja2luZy1zZWxmdGVzdC5jIGIvbGliL2xvY2tpbmctc2VsZnRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ1Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xvY2tpbmctc2VsZnRlc3QuYwpAQCAtMCwwICsxLDEyMTYgQEAKKy8qCisgKiBsaWIvbG9ja2luZy1zZWxmdGVzdC5jCisgKgorICogVGVzdHN1aXRlIGZvciB2YXJpb3VzIGxvY2tpbmcgQVBJczogc3BpbmxvY2tzLCByd2xvY2tzLAorICogbXV0ZXhlcyBhbmQgcnctc2VtYXBob3Jlcy4KKyAqCisgKiBJdCBpcyBjaGVja2luZyBib3RoIGZhbHNlIHBvc2l0aXZlcyBhbmQgZmFsc2UgbmVnYXRpdmVzLgorICoKKyAqIFN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKy8qCisgKiBDaGFuZ2UgdGhpcyB0byAxIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZmFpbHVyZSBwcmludG91dHM6CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdfbG9ja3NfdmVyYm9zZTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZGVidWdfbG9ja3NfdmVyYm9zZShjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmZGVidWdfbG9ja3NfdmVyYm9zZSk7CisKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiZGVidWdfbG9ja3NfdmVyYm9zZT0iLCBzZXR1cF9kZWJ1Z19sb2Nrc192ZXJib3NlKTsKKworI2RlZmluZSBGQUlMVVJFCQkwCisjZGVmaW5lIFNVQ0NFU1MJCTEKKworI2RlZmluZSBMT0NLVFlQRV9TUElOCTB4MQorI2RlZmluZSBMT0NLVFlQRV9SV0xPQ0sJMHgyCisjZGVmaW5lIExPQ0tUWVBFX01VVEVYCTB4NAorI2RlZmluZSBMT0NLVFlQRV9SV1NFTQkweDgKKworLyoKKyAqIE5vcm1hbCBzdGFuZGFsb25lIGxvY2tzLCBmb3IgdGhlIGNpcmN1bGFyIGFuZCBpcnEtY29udGV4dAorICogZGVwZW5kZW5jeSB0ZXN0czoKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrX0EpOworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrX0IpOworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrX0MpOworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrX0QpOworCitzdGF0aWMgREVGSU5FX1JXTE9DSyhyd2xvY2tfQSk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhyd2xvY2tfQik7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhyd2xvY2tfQyk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhyd2xvY2tfRCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgobXV0ZXhfQSk7CitzdGF0aWMgREVGSU5FX01VVEVYKG11dGV4X0IpOworc3RhdGljIERFRklORV9NVVRFWChtdXRleF9DKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobXV0ZXhfRCk7CisKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHJ3c2VtX0EpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fQik7CitzdGF0aWMgREVDTEFSRV9SV1NFTShyd3NlbV9DKTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHJ3c2VtX0QpOworCisvKgorICogTG9ja3MgdGhhdCB3ZSBpbml0aWFsaXplIGR5bmFtaWNhbGx5IGFzIHdlbGwgc28gdGhhdAorICogZS5nLiBYMSBhbmQgWDIgYmVjb21lcyB0d28gaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLAorICogYnV0IFgqIGFuZCBZKiBhcmUgZGlmZmVyZW50IGNsYXNzZXMuIFdlIGRvIHRoaXMgc28gdGhhdAorICogd2UgZG8gbm90IHRyaWdnZXIgYSByZWFsIGxvY2t1cDoKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrX1gxKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9ja19YMik7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2tfWTEpOworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrX1kyKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9ja19aMSk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2tfWjIpOworCitzdGF0aWMgREVGSU5FX1JXTE9DSyhyd2xvY2tfWDEpOworc3RhdGljIERFRklORV9SV0xPQ0socndsb2NrX1gyKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKHJ3bG9ja19ZMSk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhyd2xvY2tfWTIpOworc3RhdGljIERFRklORV9SV0xPQ0socndsb2NrX1oxKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKHJ3bG9ja19aMik7CisKK3N0YXRpYyBERUZJTkVfTVVURVgobXV0ZXhfWDEpOworc3RhdGljIERFRklORV9NVVRFWChtdXRleF9YMik7CitzdGF0aWMgREVGSU5FX01VVEVYKG11dGV4X1kxKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobXV0ZXhfWTIpOworc3RhdGljIERFRklORV9NVVRFWChtdXRleF9aMSk7CitzdGF0aWMgREVGSU5FX01VVEVYKG11dGV4X1oyKTsKKworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fWDEpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fWDIpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fWTEpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fWTIpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fWjEpOworc3RhdGljIERFQ0xBUkVfUldTRU0ocndzZW1fWjIpOworCisvKgorICogbm9uLWlubGluZWQgcnVudGltZSBpbml0aWFsaXplcnMsIHRvIGxldCBzZXBhcmF0ZSBsb2NrcyBzaGFyZQorICogdGhlIHNhbWUgbG9jay1jbGFzczoKKyAqLworI2RlZmluZSBJTklUX0NMQVNTX0ZVTkMoY2xhc3MpIAkJCQlcCitzdGF0aWMgbm9pbmxpbmUgdm9pZAkJCQkJXAoraW5pdF9jbGFzc18jI2NsYXNzKHNwaW5sb2NrX3QgKmxvY2ssIHJ3bG9ja190ICpyd2xvY2ssIHN0cnVjdCBtdXRleCAqbXV0ZXgsIFwKKwkJIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtKQkJXAorewkJCQkJCQlcCisJc3Bpbl9sb2NrX2luaXQobG9jayk7CQkJCVwKKwlyd2xvY2tfaW5pdChyd2xvY2spOwkJCQlcCisJbXV0ZXhfaW5pdChtdXRleCk7CQkJCVwKKwlpbml0X3J3c2VtKHJ3c2VtKTsJCQkJXAorfQorCitJTklUX0NMQVNTX0ZVTkMoWCkKK0lOSVRfQ0xBU1NfRlVOQyhZKQorSU5JVF9DTEFTU19GVU5DKFopCisKK3N0YXRpYyB2b2lkIGluaXRfc2hhcmVkX2NsYXNzZXModm9pZCkKK3sKKwlpbml0X2NsYXNzX1goJmxvY2tfWDEsICZyd2xvY2tfWDEsICZtdXRleF9YMSwgJnJ3c2VtX1gxKTsKKwlpbml0X2NsYXNzX1goJmxvY2tfWDIsICZyd2xvY2tfWDIsICZtdXRleF9YMiwgJnJ3c2VtX1gyKTsKKworCWluaXRfY2xhc3NfWSgmbG9ja19ZMSwgJnJ3bG9ja19ZMSwgJm11dGV4X1kxLCAmcndzZW1fWTEpOworCWluaXRfY2xhc3NfWSgmbG9ja19ZMiwgJnJ3bG9ja19ZMiwgJm11dGV4X1kyLCAmcndzZW1fWTIpOworCisJaW5pdF9jbGFzc19aKCZsb2NrX1oxLCAmcndsb2NrX1oxLCAmbXV0ZXhfWjEsICZyd3NlbV9aMSk7CisJaW5pdF9jbGFzc19aKCZsb2NrX1oyLCAmcndsb2NrX1oyLCAmbXV0ZXhfWjIsICZyd3NlbV9aMik7Cit9CisKKy8qCisgKiBGb3Igc3BpbmxvY2tzIGFuZCByd2xvY2tzIHdlIGFsc28gZG8gaGFyZGlycS1zYWZlIC8gc29mdGlycS1zYWZlIHRlc3RzLgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdXNlIGEgbG9jayBmcm9tIGEgc2ltdWxhdGVkIGhhcmRpcnEvc29mdGlycQorICogY29udGV4dCwgY2F1c2luZyB0aGUgbG9ja3MgdG8gYmUgbWFya2VkIGFzIGhhcmRpcnEtc2FmZS9zb2Z0aXJxLXNhZmU6CisgKi8KKworI2RlZmluZSBIQVJESVJRX0RJU0FCTEUJCWxvY2FsX2lycV9kaXNhYmxlCisjZGVmaW5lIEhBUkRJUlFfRU5BQkxFCQlsb2NhbF9pcnFfZW5hYmxlCisKKyNkZWZpbmUgSEFSRElSUV9FTlRFUigpCQkJCVwKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJCVwKKwlpcnFfZW50ZXIoKTsJCQkJXAorCVdBUk5fT04oIWluX2lycSgpKTsKKworI2RlZmluZSBIQVJESVJRX0VYSVQoKQkJCQlcCisJX19pcnFfZXhpdCgpOwkJCQlcCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisjZGVmaW5lIFNPRlRJUlFfRElTQUJMRQkJbG9jYWxfYmhfZGlzYWJsZQorI2RlZmluZSBTT0ZUSVJRX0VOQUJMRQkJbG9jYWxfYmhfZW5hYmxlCisKKyNkZWZpbmUgU09GVElSUV9FTlRFUigpCQkJCVwKKwkJbG9jYWxfYmhfZGlzYWJsZSgpOwkJXAorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJXAorCQl0cmFjZV9zb2Z0aXJxX2VudGVyKCk7CQlcCisJCVdBUk5fT04oIWluX3NvZnRpcnEoKSk7CisKKyNkZWZpbmUgU09GVElSUV9FWElUKCkJCQkJXAorCQl0cmFjZV9zb2Z0aXJxX2V4aXQoKTsJCVwKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwkJXAorCQlsb2NhbF9iaF9lbmFibGUoKTsKKworLyoKKyAqIFNob3J0Y3V0cyBmb3IgbG9jay91bmxvY2sgQVBJIHZhcmlhbnRzLCB0byBrZWVwCisgKiB0aGUgdGVzdGNhc2VzIGNvbXBhY3Q6CisgKi8KKyNkZWZpbmUgTCh4KQkJCXNwaW5fbG9jaygmbG9ja18jI3gpCisjZGVmaW5lIFUoeCkJCQlzcGluX3VubG9jaygmbG9ja18jI3gpCisjZGVmaW5lIExVKHgpCQkJTCh4KTsgVSh4KQorI2RlZmluZSBTSSh4KQkJCXNwaW5fbG9ja19pbml0KCZsb2NrXyMjeCkKKworI2RlZmluZSBXTCh4KQkJCXdyaXRlX2xvY2soJnJ3bG9ja18jI3gpCisjZGVmaW5lIFdVKHgpCQkJd3JpdGVfdW5sb2NrKCZyd2xvY2tfIyN4KQorI2RlZmluZSBXTFUoeCkJCQlXTCh4KTsgV1UoeCkKKworI2RlZmluZSBSTCh4KQkJCXJlYWRfbG9jaygmcndsb2NrXyMjeCkKKyNkZWZpbmUgUlUoeCkJCQlyZWFkX3VubG9jaygmcndsb2NrXyMjeCkKKyNkZWZpbmUgUkxVKHgpCQkJUkwoeCk7IFJVKHgpCisjZGVmaW5lIFJXSSh4KQkJCXJ3bG9ja19pbml0KCZyd2xvY2tfIyN4KQorCisjZGVmaW5lIE1MKHgpCQkJbXV0ZXhfbG9jaygmbXV0ZXhfIyN4KQorI2RlZmluZSBNVSh4KQkJCW11dGV4X3VubG9jaygmbXV0ZXhfIyN4KQorI2RlZmluZSBNSSh4KQkJCW11dGV4X2luaXQoJm11dGV4XyMjeCkKKworI2RlZmluZSBXU0woeCkJCQlkb3duX3dyaXRlKCZyd3NlbV8jI3gpCisjZGVmaW5lIFdTVSh4KQkJCXVwX3dyaXRlKCZyd3NlbV8jI3gpCisKKyNkZWZpbmUgUlNMKHgpCQkJZG93bl9yZWFkKCZyd3NlbV8jI3gpCisjZGVmaW5lIFJTVSh4KQkJCXVwX3JlYWQoJnJ3c2VtXyMjeCkKKyNkZWZpbmUgUldTSSh4KQkJCWluaXRfcndzZW0oJnJ3c2VtXyMjeCkKKworI2RlZmluZSBMT0NLX1VOTE9DS18yKHgseSkJTE9DSyh4KTsgTE9DSyh5KTsgVU5MT0NLKHkpOyBVTkxPQ0soeCkKKworLyoKKyAqIEdlbmVyYXRlIGRpZmZlcmVudCBwZXJtdXRhdGlvbnMgb2YgdGhlIHNhbWUgdGVzdGNhc2UsIHVzaW5nCisgKiB0aGUgc2FtZSBiYXNpYyBsb2NrLWRlcGVuZGVuY3kvc3RhdGUgZXZlbnRzOgorICovCisKKyNkZWZpbmUgR0VORVJBVEVfVEVTVENBU0UobmFtZSkJCQlcCisJCQkJCQlcCitzdGF0aWMgdm9pZCBuYW1lKHZvaWQpIHsgRSgpOyB9CisKKyNkZWZpbmUgR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKG5hbWUpCVwKKwkJCQkJCVwKK3N0YXRpYyB2b2lkIG5hbWUjI18xMih2b2lkKSB7IEUxKCk7IEUyKCk7IH0JXAorc3RhdGljIHZvaWQgbmFtZSMjXzIxKHZvaWQpIHsgRTIoKTsgRTEoKTsgfQorCisjZGVmaW5lIEdFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhuYW1lKQkJXAorCQkJCQkJCVwKK3N0YXRpYyB2b2lkIG5hbWUjI18xMjModm9pZCkgeyBFMSgpOyBFMigpOyBFMygpOyB9CVwKK3N0YXRpYyB2b2lkIG5hbWUjI18xMzIodm9pZCkgeyBFMSgpOyBFMygpOyBFMigpOyB9CVwKK3N0YXRpYyB2b2lkIG5hbWUjI18yMTModm9pZCkgeyBFMigpOyBFMSgpOyBFMygpOyB9CVwKK3N0YXRpYyB2b2lkIG5hbWUjI18yMzEodm9pZCkgeyBFMigpOyBFMygpOyBFMSgpOyB9CVwKK3N0YXRpYyB2b2lkIG5hbWUjI18zMTIodm9pZCkgeyBFMygpOyBFMSgpOyBFMigpOyB9CVwKK3N0YXRpYyB2b2lkIG5hbWUjI18zMjEodm9pZCkgeyBFMygpOyBFMigpOyBFMSgpOyB9CisKKy8qCisgKiBBQSBkZWFkbG9jazoKKyAqLworCisjZGVmaW5lIEUoKQkJCQkJXAorCQkJCQkJXAorCUxPQ0soWDEpOwkJCQlcCisJTE9DSyhYMik7IC8qIHRoaXMgb25lIHNob3VsZCBmYWlsICovCisKKy8qCisgKiA2IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi5oIgorR0VORVJBVEVfVEVTVENBU0UoQUFfc3BpbikKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQV93bG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQV9ybG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LW11dGV4LmgiCitHRU5FUkFURV9URVNUQ0FTRShBQV9tdXRleCkKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdzZW0uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFBX3dzZW0pCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1yc2VtLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQV9yc2VtKQorCisjdW5kZWYgRQorCisvKgorICogU3BlY2lhbC1jYXNlIGZvciByZWFkLWxvY2tpbmcsIHRoZXkgYXJlCisgKiBhbGxvd2VkIHRvIHJlY3Vyc2Ugb24gdGhlIHNhbWUgbG9jayBjbGFzczoKKyAqLworc3RhdGljIHZvaWQgcmxvY2tfQUExKHZvaWQpCit7CisJUkwoWDEpOworCVJMKFgxKTsgLy8gdGhpcyBvbmUgc2hvdWxkIE5PVCBmYWlsCit9CisKK3N0YXRpYyB2b2lkIHJsb2NrX0FBMUIodm9pZCkKK3sKKwlSTChYMSk7CisJUkwoWDIpOyAvLyB0aGlzIG9uZSBzaG91bGQgTk9UIGZhaWwKK30KKworc3RhdGljIHZvaWQgcnNlbV9BQTEodm9pZCkKK3sKKwlSU0woWDEpOworCVJTTChYMSk7IC8vIHRoaXMgb25lIHNob3VsZCBmYWlsCit9CisKK3N0YXRpYyB2b2lkIHJzZW1fQUExQih2b2lkKQoreworCVJTTChYMSk7CisJUlNMKFgyKTsgLy8gdGhpcyBvbmUgc2hvdWxkIGZhaWwKK30KKy8qCisgKiBUaGUgbWl4aW5nIG9mIHJlYWQgYW5kIHdyaXRlIGxvY2tzIGlzIG5vdCBhbGxvd2VkOgorICovCitzdGF0aWMgdm9pZCBybG9ja19BQTIodm9pZCkKK3sKKwlSTChYMSk7CisJV0woWDIpOyAvLyB0aGlzIG9uZSBzaG91bGQgZmFpbAorfQorCitzdGF0aWMgdm9pZCByc2VtX0FBMih2b2lkKQoreworCVJTTChYMSk7CisJV1NMKFgyKTsgLy8gdGhpcyBvbmUgc2hvdWxkIGZhaWwKK30KKworc3RhdGljIHZvaWQgcmxvY2tfQUEzKHZvaWQpCit7CisJV0woWDEpOworCVJMKFgyKTsgLy8gdGhpcyBvbmUgc2hvdWxkIGZhaWwKK30KKworc3RhdGljIHZvaWQgcnNlbV9BQTModm9pZCkKK3sKKwlXU0woWDEpOworCVJTTChYMik7IC8vIHRoaXMgb25lIHNob3VsZCBmYWlsCit9CisKKy8qCisgKiBBQkJBIGRlYWRsb2NrOgorICovCisKKyNkZWZpbmUgRSgpCQkJCQlcCisJCQkJCQlcCisJTE9DS19VTkxPQ0tfMihBLCBCKTsJCQlcCisJTE9DS19VTkxPQ0tfMihCLCBBKTsgLyogZmFpbCAqLworCisvKgorICogNiB0ZXN0Y2FzZXM6CisgKi8KKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkFfc3BpbikKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkJBX3dsb2NrKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcmxvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkFfcmxvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1tdXRleC5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQV9tdXRleCkKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdzZW0uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkFfd3NlbSkKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJzZW0uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkFfcnNlbSkKKworI3VuZGVmIEUKKworLyoKKyAqIEFCIEJDIENBIGRlYWRsb2NrOgorICovCisKKyNkZWZpbmUgRSgpCQkJCQlcCisJCQkJCQlcCisJTE9DS19VTkxPQ0tfMihBLCBCKTsJCQlcCisJTE9DS19VTkxPQ0tfMihCLCBDKTsJCQlcCisJTE9DS19VTkxPQ0tfMihDLCBBKTsgLyogZmFpbCAqLworCisvKgorICogNiB0ZXN0Y2FzZXM6CisgKi8KKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkNDQV9zcGluKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkNDQV93bG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkJDQ0FfcmxvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1tdXRleC5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQ0NBX211dGV4KQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd3NlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQ0NBX3dzZW0pCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1yc2VtLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkJDQ0FfcnNlbSkKKworI3VuZGVmIEUKKworLyoKKyAqIEFCIENBIEJDIGRlYWRsb2NrOgorICovCisKKyNkZWZpbmUgRSgpCQkJCQlcCisJCQkJCQlcCisJTE9DS19VTkxPQ0tfMihBLCBCKTsJCQlcCisJTE9DS19VTkxPQ0tfMihDLCBBKTsJCQlcCisJTE9DS19VTkxPQ0tfMihCLCBDKTsgLyogZmFpbCAqLworCisvKgorICogNiB0ZXN0Y2FzZXM6CisgKi8KKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0FCQ19zcGluKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0FCQ193bG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNBQkNfcmxvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1tdXRleC5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJDQUJDX211dGV4KQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd3NlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJDQUJDX3dzZW0pCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1yc2VtLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNBQkNfcnNlbSkKKworI3VuZGVmIEUKKworLyoKKyAqIEFCIEJDIENEIERBIGRlYWRsb2NrOgorICovCisKKyNkZWZpbmUgRSgpCQkJCQlcCisJCQkJCQlcCisJTE9DS19VTkxPQ0tfMihBLCBCKTsJCQlcCisJTE9DS19VTkxPQ0tfMihCLCBDKTsJCQlcCisJTE9DS19VTkxPQ0tfMihDLCBEKTsJCQlcCisJTE9DS19VTkxPQ0tfMihELCBBKTsgLyogZmFpbCAqLworCisvKgorICogNiB0ZXN0Y2FzZXM6CisgKi8KKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQkNDRERBX3NwaW4pCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC13bG9jay5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQ0NEREFfd2xvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQ0NEREFfcmxvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1tdXRleC5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQ0NEREFfbXV0ZXgpCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC13c2VtLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkJDQ0REQV93c2VtKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcnNlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJCQ0NEREFfcnNlbSkKKworI3VuZGVmIEUKKworLyoKKyAqIEFCIENEIEJEIERBIGRlYWRsb2NrOgorICovCisjZGVmaW5lIEUoKQkJCQkJXAorCQkJCQkJXAorCUxPQ0tfVU5MT0NLXzIoQSwgQik7CQkJXAorCUxPQ0tfVU5MT0NLXzIoQywgRCk7CQkJXAorCUxPQ0tfVU5MT0NLXzIoQiwgRCk7CQkJXAorCUxPQ0tfVU5MT0NLXzIoRCwgQSk7IC8qIGZhaWwgKi8KKworLyoKKyAqIDYgdGVzdGNhc2VzOgorICovCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1zcGluLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNEQkREQV9zcGluKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0RCRERBX3dsb2NrKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcmxvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0RCRERBX3Jsb2NrKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtbXV0ZXguaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0RCRERBX211dGV4KQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd3NlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJDREJEREFfd3NlbSkKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJzZW0uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0RCRERBX3JzZW0pCisKKyN1bmRlZiBFCisKKy8qCisgKiBBQiBDRCBCQyBEQSBkZWFkbG9jazoKKyAqLworI2RlZmluZSBFKCkJCQkJCVwKKwkJCQkJCVwKKwlMT0NLX1VOTE9DS18yKEEsIEIpOwkJCVwKKwlMT0NLX1VOTE9DS18yKEMsIEQpOwkJCVwKKwlMT0NLX1VOTE9DS18yKEIsIEMpOwkJCVwKKwlMT0NLX1VOTE9DS18yKEQsIEEpOyAvKiBmYWlsICovCisKKy8qCisgKiA2IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi5oIgorR0VORVJBVEVfVEVTVENBU0UoQUJDREJDREFfc3BpbikKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNEQkNEQV93bG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNEQkNEQV9ybG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LW11dGV4LmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNEQkNEQV9tdXRleCkKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdzZW0uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKEFCQ0RCQ0RBX3dzZW0pCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1yc2VtLmgiCitHRU5FUkFURV9URVNUQ0FTRShBQkNEQkNEQV9yc2VtKQorCisjdW5kZWYgRQorCisvKgorICogRG91YmxlIHVubG9jazoKKyAqLworI2RlZmluZSBFKCkJCQkJCVwKKwkJCQkJCVwKKwlMT0NLKEEpOwkJCQlcCisJVU5MT0NLKEEpOwkJCQlcCisJVU5MT0NLKEEpOyAvKiBmYWlsICovCisKKy8qCisgKiA2IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi5oIgorR0VORVJBVEVfVEVTVENBU0UoZG91YmxlX3VubG9ja19zcGluKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKGRvdWJsZV91bmxvY2tfd2xvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay5oIgorR0VORVJBVEVfVEVTVENBU0UoZG91YmxlX3VubG9ja19ybG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LW11dGV4LmgiCitHRU5FUkFURV9URVNUQ0FTRShkb3VibGVfdW5sb2NrX211dGV4KQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd3NlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoZG91YmxlX3VubG9ja193c2VtKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcnNlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoZG91YmxlX3VubG9ja19yc2VtKQorCisjdW5kZWYgRQorCisvKgorICogQmFkIHVubG9jayBvcmRlcmluZzoKKyAqLworI2RlZmluZSBFKCkJCQkJCVwKKwkJCQkJCVwKKwlMT0NLKEEpOwkJCQlcCisJTE9DSyhCKTsJCQkJXAorCVVOTE9DSyhBKTsgLyogZmFpbCAqLwkJCVwKKwlVTkxPQ0soQik7CisKKy8qCisgKiA2IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi5oIgorR0VORVJBVEVfVEVTVENBU0UoYmFkX3VubG9ja19vcmRlcl9zcGluKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKGJhZF91bmxvY2tfb3JkZXJfd2xvY2spCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay5oIgorR0VORVJBVEVfVEVTVENBU0UoYmFkX3VubG9ja19vcmRlcl9ybG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LW11dGV4LmgiCitHRU5FUkFURV9URVNUQ0FTRShiYWRfdW5sb2NrX29yZGVyX211dGV4KQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd3NlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoYmFkX3VubG9ja19vcmRlcl93c2VtKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcnNlbS5oIgorR0VORVJBVEVfVEVTVENBU0UoYmFkX3VubG9ja19vcmRlcl9yc2VtKQorCisjdW5kZWYgRQorCisvKgorICogaW5pdGlhbGl6aW5nIGEgaGVsZCBsb2NrOgorICovCisjZGVmaW5lIEUoKQkJCQkJXAorCQkJCQkJXAorCUxPQ0soQSk7CQkJCVwKKwlJTklUKEEpOyAvKiBmYWlsICovCisKKy8qCisgKiA2IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi5oIgorR0VORVJBVEVfVEVTVENBU0UoaW5pdF9oZWxkX3NwaW4pCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC13bG9jay5oIgorR0VORVJBVEVfVEVTVENBU0UoaW5pdF9oZWxkX3dsb2NrKQorI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcmxvY2suaCIKK0dFTkVSQVRFX1RFU1RDQVNFKGluaXRfaGVsZF9ybG9jaykKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LW11dGV4LmgiCitHRU5FUkFURV9URVNUQ0FTRShpbml0X2hlbGRfbXV0ZXgpCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC13c2VtLmgiCitHRU5FUkFURV9URVNUQ0FTRShpbml0X2hlbGRfd3NlbSkKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJzZW0uaCIKK0dFTkVSQVRFX1RFU1RDQVNFKGluaXRfaGVsZF9yc2VtKQorCisjdW5kZWYgRQorCisvKgorICogbG9ja2luZyBhbiBpcnEtc2FmZSBsb2NrIHdpdGggaXJxcyBlbmFibGVkOgorICovCisjZGVmaW5lIEUxKCkJCQkJXAorCQkJCQlcCisJSVJRX0VOVEVSKCk7CQkJXAorCUxPQ0soQSk7CQkJXAorCVVOTE9DSyhBKTsJCQlcCisJSVJRX0VYSVQoKTsKKworI2RlZmluZSBFMigpCQkJCVwKKwkJCQkJXAorCUxPQ0soQSk7CQkJXAorCVVOTE9DSyhBKTsKKworLyoKKyAqIEdlbmVyYXRlIDI0IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi1oYXJkaXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfMl9FVkVOVFMoaXJxc2FmZTFfaGFyZF9zcGluKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay1oYXJkaXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfMl9FVkVOVFMoaXJxc2FmZTFfaGFyZF9ybG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2staGFyZGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKGlycXNhZmUxX2hhcmRfd2xvY2spCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4tc29mdGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKGlycXNhZmUxX3NvZnRfc3BpbikKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcmxvY2stc29mdGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKGlycXNhZmUxX3NvZnRfcmxvY2spCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18yX0VWRU5UUyhpcnFzYWZlMV9zb2Z0X3dsb2NrKQorCisjdW5kZWYgRTEKKyN1bmRlZiBFMgorCisvKgorICogRW5hYmxpbmcgaGFyZGlycXMgd2l0aCBhIHNvZnRpcnEtc2FmZSBsb2NrIGhlbGQ6CisgKi8KKyNkZWZpbmUgRTEoKQkJCQlcCisJCQkJCVwKKwlTT0ZUSVJRX0VOVEVSKCk7CQlcCisJTE9DSyhBKTsJCQlcCisJVU5MT0NLKEEpOwkJCVwKKwlTT0ZUSVJRX0VYSVQoKTsKKworI2RlZmluZSBFMigpCQkJCVwKKwkJCQkJXAorCUhBUkRJUlFfRElTQUJMRSgpOwkJXAorCUxPQ0soQSk7CQkJXAorCUhBUkRJUlFfRU5BQkxFKCk7CQlcCisJVU5MT0NLKEEpOworCisvKgorICogR2VuZXJhdGUgMTIgdGVzdGNhc2VzOgorICovCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1zcGluLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfMl9FVkVOVFMoaXJxc2FmZTJBX3NwaW4pCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfMl9FVkVOVFMoaXJxc2FmZTJBX3dsb2NrKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKGlycXNhZmUyQV9ybG9jaykKKworI3VuZGVmIEUxCisjdW5kZWYgRTIKKworLyoKKyAqIEVuYWJsaW5nIGlycXMgd2l0aCBhbiBpcnEtc2FmZSBsb2NrIGhlbGQ6CisgKi8KKyNkZWZpbmUgRTEoKQkJCQlcCisJCQkJCVwKKwlJUlFfRU5URVIoKTsJCQlcCisJTE9DSyhBKTsJCQlcCisJVU5MT0NLKEEpOwkJCVwKKwlJUlFfRVhJVCgpOworCisjZGVmaW5lIEUyKCkJCQkJXAorCQkJCQlcCisJSVJRX0RJU0FCTEUoKTsJCQlcCisJTE9DSyhBKTsJCQlcCisJSVJRX0VOQUJMRSgpOwkJCVwKKwlVTkxPQ0soQSk7CisKKy8qCisgKiBHZW5lcmF0ZSAyNCB0ZXN0Y2FzZXM6CisgKi8KKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4taGFyZGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKGlycXNhZmUyQl9oYXJkX3NwaW4pCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLWhhcmRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18yX0VWRU5UUyhpcnFzYWZlMkJfaGFyZF9ybG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2staGFyZGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzJfRVZFTlRTKGlycXNhZmUyQl9oYXJkX3dsb2NrKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1zcGluLXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18yX0VWRU5UUyhpcnFzYWZlMkJfc29mdF9zcGluKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay1zb2Z0aXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfMl9FVkVOVFMoaXJxc2FmZTJCX3NvZnRfcmxvY2spCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18yX0VWRU5UUyhpcnFzYWZlMkJfc29mdF93bG9jaykKKworI3VuZGVmIEUxCisjdW5kZWYgRTIKKworLyoKKyAqIEFjcXVpcmluZyBhIGlycS11bnNhZmUgbG9jayB3aGlsZSBob2xkaW5nIGFuIGlycS1zYWZlLWxvY2s6CisgKi8KKyNkZWZpbmUgRTEoKQkJCQlcCisJCQkJCVwKKwlMT0NLKEEpOwkJCVwKKwlMT0NLKEIpOwkJCVwKKwlVTkxPQ0soQik7CQkJXAorCVVOTE9DSyhBKTsJCQlcCisKKyNkZWZpbmUgRTIoKQkJCQlcCisJCQkJCVwKKwlMT0NLKEIpOwkJCVwKKwlVTkxPQ0soQik7CisKKyNkZWZpbmUgRTMoKQkJCQlcCisJCQkJCVwKKwlJUlFfRU5URVIoKTsJCQlcCisJTE9DSyhBKTsJCQlcCisJVU5MT0NLKEEpOwkJCVwKKwlJUlFfRVhJVCgpOworCisvKgorICogR2VuZXJhdGUgMzYgdGVzdGNhc2VzOgorICovCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1zcGluLWhhcmRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFzYWZlM19oYXJkX3NwaW4pCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLWhhcmRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFzYWZlM19oYXJkX3Jsb2NrKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC13bG9jay1oYXJkaXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxc2FmZTNfaGFyZF93bG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi1zb2Z0aXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxc2FmZTNfc29mdF9zcGluKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay1zb2Z0aXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxc2FmZTNfc29mdF9ybG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2stc29mdGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzNfRVZFTlRTKGlycXNhZmUzX3NvZnRfd2xvY2spCisKKyN1bmRlZiBFMQorI3VuZGVmIEUyCisjdW5kZWYgRTMKKworLyoKKyAqIElmIGEgbG9jayB0dXJucyBpbnRvIHNvZnRpcnEtc2FmZSwgYnV0IGVhcmxpZXIgaXQgdG9vaworICogYSBzb2Z0aXJxLXVuc2FmZSBsb2NrOgorICovCisKKyNkZWZpbmUgRTEoKQkJCQlcCisJSVJRX0RJU0FCTEUoKTsJCQlcCisJTE9DSyhBKTsJCQlcCisJTE9DSyhCKTsJCQlcCisJVU5MT0NLKEIpOwkJCVwKKwlVTkxPQ0soQSk7CQkJXAorCUlSUV9FTkFCTEUoKTsKKworI2RlZmluZSBFMigpCQkJCVwKKwlMT0NLKEIpOwkJCVwKKwlVTkxPQ0soQik7CisKKyNkZWZpbmUgRTMoKQkJCQlcCisJSVJRX0VOVEVSKCk7CQkJXAorCUxPQ0soQSk7CQkJXAorCVVOTE9DSyhBKTsJCQlcCisJSVJRX0VYSVQoKTsKKworLyoKKyAqIEdlbmVyYXRlIDM2IHRlc3RjYXNlczoKKyAqLworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi1oYXJkaXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxc2FmZTRfaGFyZF9zcGluKQorCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1ybG9jay1oYXJkaXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxc2FmZTRfaGFyZF9ybG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2staGFyZGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzNfRVZFTlRTKGlycXNhZmU0X2hhcmRfd2xvY2spCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNwaW4tc29mdGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzNfRVZFTlRTKGlycXNhZmU0X3NvZnRfc3BpbikKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcmxvY2stc29mdGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzNfRVZFTlRTKGlycXNhZmU0X3NvZnRfcmxvY2spCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFzYWZlNF9zb2Z0X3dsb2NrKQorCisjdW5kZWYgRTEKKyN1bmRlZiBFMgorI3VuZGVmIEUzCisKKy8qCisgKiByZWFkLWxvY2sgLyB3cml0ZS1sb2NrIGlycSBpbnZlcnNpb24uCisgKgorICogRGVhZGxvY2sgc2NlbmFyaW86CisgKgorICogQ1BVIzEgaXMgYXQgIzEsIGkuZS4gaXQgaGFzIHdyaXRlLWxvY2tlZCBBLCBidXQgaGFzIG5vdAorICogdGFrZW4gQiB5ZXQuCisgKgorICogQ1BVIzIgaXMgYXQgIzIsIGkuZS4gaXQgaGFzIGxvY2tlZCBCLgorICoKKyAqIEhhcmRpcnEgaGl0cyBDUFUjMiBhdCBwb2ludCAjMiBhbmQgaXMgdHJ5aW5nIHRvIHJlYWQtbG9jayBBLgorICoKKyAqIFRoZSBkZWFkbG9jayBvY2N1cnMgYmVjYXVzZSBDUFUjMSB3aWxsIHNwaW4gb24gQiwgYW5kIENQVSMyCisgKiB3aWxsIHNwaW4gb24gQS4KKyAqLworCisjZGVmaW5lIEUxKCkJCQkJXAorCQkJCQlcCisJSVJRX0RJU0FCTEUoKTsJCQlcCisJV0woQSk7CQkJCVwKKwlMT0NLKEIpOwkJCVwKKwlVTkxPQ0soQik7CQkJXAorCVdVKEEpOwkJCQlcCisJSVJRX0VOQUJMRSgpOworCisjZGVmaW5lIEUyKCkJCQkJXAorCQkJCQlcCisJTE9DSyhCKTsJCQlcCisJVU5MT0NLKEIpOworCisjZGVmaW5lIEUzKCkJCQkJXAorCQkJCQlcCisJSVJRX0VOVEVSKCk7CQkJXAorCVJMKEEpOwkJCQlcCisJUlUoQSk7CQkJCVwKKwlJUlFfRVhJVCgpOworCisvKgorICogR2VuZXJhdGUgMzYgdGVzdGNhc2VzOgorICovCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1zcGluLWhhcmRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFfaW52ZXJzaW9uX2hhcmRfc3BpbikKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3QtcmxvY2staGFyZGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzNfRVZFTlRTKGlycV9pbnZlcnNpb25faGFyZF9ybG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtd2xvY2staGFyZGlycS5oIgorR0VORVJBVEVfUEVSTVVUQVRJT05TXzNfRVZFTlRTKGlycV9pbnZlcnNpb25faGFyZF93bG9jaykKKworI2luY2x1ZGUgImxvY2tpbmctc2VsZnRlc3Qtc3Bpbi1zb2Z0aXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxX2ludmVyc2lvbl9zb2Z0X3NwaW4pCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXJsb2NrLXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFfaW52ZXJzaW9uX3NvZnRfcmxvY2spCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXdsb2NrLXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFfaW52ZXJzaW9uX3NvZnRfd2xvY2spCisKKyN1bmRlZiBFMQorI3VuZGVmIEUyCisjdW5kZWYgRTMKKworLyoKKyAqIHJlYWQtbG9jayAvIHdyaXRlLWxvY2sgcmVjdXJzaW9uIHRoYXQgaXMgYWN0dWFsbHkgc2FmZS4KKyAqLworCisjZGVmaW5lIEUxKCkJCQkJXAorCQkJCQlcCisJSVJRX0RJU0FCTEUoKTsJCQlcCisJV0woQSk7CQkJCVwKKwlXVShBKTsJCQkJXAorCUlSUV9FTkFCTEUoKTsKKworI2RlZmluZSBFMigpCQkJCVwKKwkJCQkJXAorCVJMKEEpOwkJCQlcCisJUlUoQSk7CQkJCVwKKworI2RlZmluZSBFMygpCQkJCVwKKwkJCQkJXAorCUlSUV9FTlRFUigpOwkJCVwKKwlSTChBKTsJCQkJXAorCUwoQik7CQkJCVwKKwlVKEIpOwkJCQlcCisJUlUoQSk7CQkJCVwKKwlJUlFfRVhJVCgpOworCisvKgorICogR2VuZXJhdGUgMTIgdGVzdGNhc2VzOgorICovCisjaW5jbHVkZSAibG9ja2luZy1zZWxmdGVzdC1oYXJkaXJxLmgiCitHRU5FUkFURV9QRVJNVVRBVElPTlNfM19FVkVOVFMoaXJxX3JlYWRfcmVjdXJzaW9uX2hhcmQpCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNvZnRpcnEuaCIKK0dFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFfcmVhZF9yZWN1cnNpb25fc29mdCkKKworI3VuZGVmIEUxCisjdW5kZWYgRTIKKyN1bmRlZiBFMworCisvKgorICogcmVhZC1sb2NrIC8gd3JpdGUtbG9jayByZWN1cnNpb24gdGhhdCBpcyB1bnNhZmUuCisgKi8KKworI2RlZmluZSBFMSgpCQkJCVwKKwkJCQkJXAorCUlSUV9ESVNBQkxFKCk7CQkJXAorCUwoQik7CQkJCVwKKwlXTChBKTsJCQkJXAorCVdVKEEpOwkJCQlcCisJVShCKTsJCQkJXAorCUlSUV9FTkFCTEUoKTsKKworI2RlZmluZSBFMigpCQkJCVwKKwkJCQkJXAorCVJMKEEpOwkJCQlcCisJUlUoQSk7CQkJCVwKKworI2RlZmluZSBFMygpCQkJCVwKKwkJCQkJXAorCUlSUV9FTlRFUigpOwkJCVwKKwlMKEIpOwkJCQlcCisJVShCKTsJCQkJXAorCUlSUV9FWElUKCk7CisKKy8qCisgKiBHZW5lcmF0ZSAxMiB0ZXN0Y2FzZXM6CisgKi8KKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LWhhcmRpcnEuaCIKKy8vIEdFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFfcmVhZF9yZWN1cnNpb24yX2hhcmQpCisKKyNpbmNsdWRlICJsb2NraW5nLXNlbGZ0ZXN0LXNvZnRpcnEuaCIKKy8vIEdFTkVSQVRFX1BFUk1VVEFUSU9OU18zX0VWRU5UUyhpcnFfcmVhZF9yZWN1cnNpb24yX3NvZnQpCisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgSV9TUElOTE9DSyh4KQlsb2NrZGVwX3Jlc2V0X2xvY2soJmxvY2tfIyN4LmRlcF9tYXApCisjIGRlZmluZSBJX1JXTE9DSyh4KQlsb2NrZGVwX3Jlc2V0X2xvY2soJnJ3bG9ja18jI3guZGVwX21hcCkKKyMgZGVmaW5lIElfTVVURVgoeCkJbG9ja2RlcF9yZXNldF9sb2NrKCZtdXRleF8jI3guZGVwX21hcCkKKyMgZGVmaW5lIElfUldTRU0oeCkJbG9ja2RlcF9yZXNldF9sb2NrKCZyd3NlbV8jI3guZGVwX21hcCkKKyNlbHNlCisjIGRlZmluZSBJX1NQSU5MT0NLKHgpCisjIGRlZmluZSBJX1JXTE9DSyh4KQorIyBkZWZpbmUgSV9NVVRFWCh4KQorIyBkZWZpbmUgSV9SV1NFTSh4KQorI2VuZGlmCisKKyNkZWZpbmUgSTEoeCkJCQkJCVwKKwlkbyB7CQkJCQlcCisJCUlfU1BJTkxPQ0soeCk7CQkJXAorCQlJX1JXTE9DSyh4KTsJCQlcCisJCUlfTVVURVgoeCk7CQkJXAorCQlJX1JXU0VNKHgpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEkyKHgpCQkJCQlcCisJZG8gewkJCQkJXAorCQlzcGluX2xvY2tfaW5pdCgmbG9ja18jI3gpOwlcCisJCXJ3bG9ja19pbml0KCZyd2xvY2tfIyN4KTsJXAorCQltdXRleF9pbml0KCZtdXRleF8jI3gpOwkJXAorCQlpbml0X3J3c2VtKCZyd3NlbV8jI3gpOwkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIHJlc2V0X2xvY2tzKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlJMShBKTsgSTEoQik7IEkxKEMpOyBJMShEKTsKKwlJMShYMSk7IEkxKFgyKTsgSTEoWTEpOyBJMShZMik7IEkxKFoxKTsgSTEoWjIpOworCWxvY2tkZXBfcmVzZXQoKTsKKwlJMihBKTsgSTIoQik7IEkyKEMpOyBJMihEKTsKKwlpbml0X3NoYXJlZF9jbGFzc2VzKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisjdW5kZWYgSQorCitzdGF0aWMgaW50IHRlc3RjYXNlX3RvdGFsOworc3RhdGljIGludCB0ZXN0Y2FzZV9zdWNjZXNzZXM7CitzdGF0aWMgaW50IGV4cGVjdGVkX3Rlc3RjYXNlX2ZhaWx1cmVzOworc3RhdGljIGludCB1bmV4cGVjdGVkX3Rlc3RjYXNlX2ZhaWx1cmVzOworCitzdGF0aWMgdm9pZCBkb3Rlc3Qodm9pZCAoKnRlc3RjYXNlX2ZuKSh2b2lkKSwgaW50IGV4cGVjdGVkLCBpbnQgbG9ja2NsYXNzX21hc2spCit7CisJdW5zaWduZWQgbG9uZyBzYXZlZF9wcmVlbXB0X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOworCWludCBleHBlY3RlZF9mYWlsdXJlID0gMDsKKworCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKKworCXRlc3RjYXNlX2ZuKCk7CisJLyoKKwkgKiBGaWx0ZXIgb3V0IGV4cGVjdGVkIGZhaWx1cmVzOgorCSAqLworI2lmbmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworCWlmICgobG9ja2NsYXNzX21hc2sgJiBMT0NLVFlQRV9TUElOKSAmJiBkZWJ1Z19sb2NrcyAhPSBleHBlY3RlZCkKKwkJZXhwZWN0ZWRfZmFpbHVyZSA9IDE7CisJaWYgKChsb2NrY2xhc3NfbWFzayAmIExPQ0tUWVBFX1JXTE9DSykgJiYgZGVidWdfbG9ja3MgIT0gZXhwZWN0ZWQpCisJCWV4cGVjdGVkX2ZhaWx1cmUgPSAxOworCWlmICgobG9ja2NsYXNzX21hc2sgJiBMT0NLVFlQRV9NVVRFWCkgJiYgZGVidWdfbG9ja3MgIT0gZXhwZWN0ZWQpCisJCWV4cGVjdGVkX2ZhaWx1cmUgPSAxOworCWlmICgobG9ja2NsYXNzX21hc2sgJiBMT0NLVFlQRV9SV1NFTSkgJiYgZGVidWdfbG9ja3MgIT0gZXhwZWN0ZWQpCisJCWV4cGVjdGVkX2ZhaWx1cmUgPSAxOworI2VuZGlmCisJaWYgKGRlYnVnX2xvY2tzICE9IGV4cGVjdGVkKSB7CisJCWlmIChleHBlY3RlZF9mYWlsdXJlKSB7CisJCQlleHBlY3RlZF90ZXN0Y2FzZV9mYWlsdXJlcysrOworCQkJcHJpbnRrKCJmYWlsZWR8Iik7CisJCX0gZWxzZSB7CisJCQl1bmV4cGVjdGVkX3Rlc3RjYXNlX2ZhaWx1cmVzKys7CisJCQlwcmludGsoIkZBSUxFRHwiKTsKKwkJfQorCX0gZWxzZSB7CisJCXRlc3RjYXNlX3N1Y2Nlc3NlcysrOworCQlwcmludGsoIiAgb2sgIHwiKTsKKwl9CisJdGVzdGNhc2VfdG90YWwrKzsKKworCWlmIChkZWJ1Z19sb2Nrc192ZXJib3NlKQorCQlwcmludGsoIiBsb2NrY2xhc3MgbWFzazogJXgsIGRlYnVnX2xvY2tzOiAlZCwgZXhwZWN0ZWQ6ICVkXG4iLAorCQkJbG9ja2NsYXNzX21hc2ssIGRlYnVnX2xvY2tzLCBleHBlY3RlZCk7CisJLyoKKwkgKiBTb21lIHRlc3RzIChlLmcuIGRvdWJsZS11bmxvY2spIG1pZ2h0IGNvcnJ1cHQgdGhlIHByZWVtcHRpb24KKwkgKiBjb3VudCwgc28gcmVzdG9yZSBpdDoKKwkgKi8KKwlwcmVlbXB0X2NvdW50KCkgPSBzYXZlZF9wcmVlbXB0X2NvdW50OworI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWlmIChzb2Z0aXJxX2NvdW50KCkpCisJCWN1cnJlbnQtPnNvZnRpcnFzX2VuYWJsZWQgPSAwOworCWVsc2UKKwkJY3VycmVudC0+c29mdGlycXNfZW5hYmxlZCA9IDE7CisjZW5kaWYKKworCXJlc2V0X2xvY2tzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmludF90ZXN0bmFtZShjb25zdCBjaGFyICp0ZXN0bmFtZSkKK3sKKwlwcmludGsoIiUzM3M6IiwgdGVzdG5hbWUpOworfQorCisjZGVmaW5lIERPX1RFU1RDQVNFXzEoZGVzYywgbmFtZSwgbnIpCQkJCVwKKwlwcmludF90ZXN0bmFtZShkZXNjIi8iI25yKTsJCQkJXAorCWRvdGVzdChuYW1lIyNfIyNuciwgU1VDQ0VTUywgTE9DS1RZUEVfUldMT0NLKTsJCVwKKwlwcmludGsoIlxuIik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfMUIoZGVzYywgbmFtZSwgbnIpCQkJCVwKKwlwcmludF90ZXN0bmFtZShkZXNjIi8iI25yKTsJCQkJXAorCWRvdGVzdChuYW1lIyNfIyNuciwgRkFJTFVSRSwgTE9DS1RZUEVfUldMT0NLKTsJCVwKKwlwcmludGsoIlxuIik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfMyhkZXNjLCBuYW1lLCBucikJCQkJXAorCXByaW50X3Rlc3RuYW1lKGRlc2MiLyIjbnIpOwkJCQlcCisJZG90ZXN0KG5hbWUjI19zcGluXyMjbnIsIEZBSUxVUkUsIExPQ0tUWVBFX1NQSU4pOwlcCisJZG90ZXN0KG5hbWUjI193bG9ja18jI25yLCBGQUlMVVJFLCBMT0NLVFlQRV9SV0xPQ0spOwlcCisJZG90ZXN0KG5hbWUjI19ybG9ja18jI25yLCBTVUNDRVNTLCBMT0NLVFlQRV9SV0xPQ0spOwlcCisJcHJpbnRrKCJcbiIpOworCisjZGVmaW5lIERPX1RFU1RDQVNFXzNSVyhkZXNjLCBuYW1lLCBucikJCQkJXAorCXByaW50X3Rlc3RuYW1lKGRlc2MiLyIjbnIpOwkJCQlcCisJZG90ZXN0KG5hbWUjI19zcGluXyMjbnIsIEZBSUxVUkUsIExPQ0tUWVBFX1NQSU58TE9DS1RZUEVfUldMT0NLKTtcCisJZG90ZXN0KG5hbWUjI193bG9ja18jI25yLCBGQUlMVVJFLCBMT0NLVFlQRV9SV0xPQ0spOwlcCisJZG90ZXN0KG5hbWUjI19ybG9ja18jI25yLCBTVUNDRVNTLCBMT0NLVFlQRV9SV0xPQ0spOwlcCisJcHJpbnRrKCJcbiIpOworCisjZGVmaW5lIERPX1RFU1RDQVNFXzYoZGVzYywgbmFtZSkJCQkJXAorCXByaW50X3Rlc3RuYW1lKGRlc2MpOwkJCQkJXAorCWRvdGVzdChuYW1lIyNfc3BpbiwgRkFJTFVSRSwgTE9DS1RZUEVfU1BJTik7CQlcCisJZG90ZXN0KG5hbWUjI193bG9jaywgRkFJTFVSRSwgTE9DS1RZUEVfUldMT0NLKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3Jsb2NrLCBGQUlMVVJFLCBMT0NLVFlQRV9SV0xPQ0spOwkJXAorCWRvdGVzdChuYW1lIyNfbXV0ZXgsIEZBSUxVUkUsIExPQ0tUWVBFX01VVEVYKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3dzZW0sIEZBSUxVUkUsIExPQ0tUWVBFX1JXU0VNKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3JzZW0sIEZBSUxVUkUsIExPQ0tUWVBFX1JXU0VNKTsJCVwKKwlwcmludGsoIlxuIik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfNl9TVUNDRVNTKGRlc2MsIG5hbWUpCQkJXAorCXByaW50X3Rlc3RuYW1lKGRlc2MpOwkJCQkJXAorCWRvdGVzdChuYW1lIyNfc3BpbiwgU1VDQ0VTUywgTE9DS1RZUEVfU1BJTik7CQlcCisJZG90ZXN0KG5hbWUjI193bG9jaywgU1VDQ0VTUywgTE9DS1RZUEVfUldMT0NLKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3Jsb2NrLCBTVUNDRVNTLCBMT0NLVFlQRV9SV0xPQ0spOwkJXAorCWRvdGVzdChuYW1lIyNfbXV0ZXgsIFNVQ0NFU1MsIExPQ0tUWVBFX01VVEVYKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3dzZW0sIFNVQ0NFU1MsIExPQ0tUWVBFX1JXU0VNKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3JzZW0sIFNVQ0NFU1MsIExPQ0tUWVBFX1JXU0VNKTsJCVwKKwlwcmludGsoIlxuIik7CisKKy8qCisgKiAncmVhZCcgdmFyaWFudDogcmxvY2tzIG11c3Qgbm90IHRyaWdnZXIuCisgKi8KKyNkZWZpbmUgRE9fVEVTVENBU0VfNlIoZGVzYywgbmFtZSkJCQkJXAorCXByaW50X3Rlc3RuYW1lKGRlc2MpOwkJCQkJXAorCWRvdGVzdChuYW1lIyNfc3BpbiwgRkFJTFVSRSwgTE9DS1RZUEVfU1BJTik7CQlcCisJZG90ZXN0KG5hbWUjI193bG9jaywgRkFJTFVSRSwgTE9DS1RZUEVfUldMT0NLKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3Jsb2NrLCBTVUNDRVNTLCBMT0NLVFlQRV9SV0xPQ0spOwkJXAorCWRvdGVzdChuYW1lIyNfbXV0ZXgsIEZBSUxVUkUsIExPQ0tUWVBFX01VVEVYKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3dzZW0sIEZBSUxVUkUsIExPQ0tUWVBFX1JXU0VNKTsJCVwKKwlkb3Rlc3QobmFtZSMjX3JzZW0sIEZBSUxVUkUsIExPQ0tUWVBFX1JXU0VNKTsJCVwKKwlwcmludGsoIlxuIik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfMkkoZGVzYywgbmFtZSwgbnIpCQkJCVwKKwlET19URVNUQ0FTRV8xKCJoYXJkLSJkZXNjLCBuYW1lIyNfaGFyZCwgbnIpOwkJXAorCURPX1RFU1RDQVNFXzEoInNvZnQtImRlc2MsIG5hbWUjI19zb2Z0LCBucik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfMklCKGRlc2MsIG5hbWUsIG5yKQkJCQlcCisJRE9fVEVTVENBU0VfMUIoImhhcmQtImRlc2MsIG5hbWUjI19oYXJkLCBucik7CQlcCisJRE9fVEVTVENBU0VfMUIoInNvZnQtImRlc2MsIG5hbWUjI19zb2Z0LCBucik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfNkkoZGVzYywgbmFtZSwgbnIpCQkJCVwKKwlET19URVNUQ0FTRV8zKCJoYXJkLSJkZXNjLCBuYW1lIyNfaGFyZCwgbnIpOwkJXAorCURPX1RFU1RDQVNFXzMoInNvZnQtImRlc2MsIG5hbWUjI19zb2Z0LCBucik7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfNklSVyhkZXNjLCBuYW1lLCBucikJCQlcCisJRE9fVEVTVENBU0VfM1JXKCJoYXJkLSJkZXNjLCBuYW1lIyNfaGFyZCwgbnIpOwkJXAorCURPX1RFU1RDQVNFXzNSVygic29mdC0iZGVzYywgbmFtZSMjX3NvZnQsIG5yKTsKKworI2RlZmluZSBET19URVNUQ0FTRV8yeDMoZGVzYywgbmFtZSkJCQkJXAorCURPX1RFU1RDQVNFXzMoZGVzYywgbmFtZSwgMTIpOwkJCQlcCisJRE9fVEVTVENBU0VfMyhkZXNjLCBuYW1lLCAyMSk7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfMng2KGRlc2MsIG5hbWUpCQkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAxMik7CQkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAyMSk7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfNngyKGRlc2MsIG5hbWUpCQkJCVwKKwlET19URVNUQ0FTRV8ySShkZXNjLCBuYW1lLCAxMjMpOwkJCVwKKwlET19URVNUQ0FTRV8ySShkZXNjLCBuYW1lLCAxMzIpOwkJCVwKKwlET19URVNUQ0FTRV8ySShkZXNjLCBuYW1lLCAyMTMpOwkJCVwKKwlET19URVNUQ0FTRV8ySShkZXNjLCBuYW1lLCAyMzEpOwkJCVwKKwlET19URVNUQ0FTRV8ySShkZXNjLCBuYW1lLCAzMTIpOwkJCVwKKwlET19URVNUQ0FTRV8ySShkZXNjLCBuYW1lLCAzMjEpOworCisjZGVmaW5lIERPX1RFU1RDQVNFXzZ4MkIoZGVzYywgbmFtZSkJCQkJXAorCURPX1RFU1RDQVNFXzJJQihkZXNjLCBuYW1lLCAxMjMpOwkJCVwKKwlET19URVNUQ0FTRV8ySUIoZGVzYywgbmFtZSwgMTMyKTsJCQlcCisJRE9fVEVTVENBU0VfMklCKGRlc2MsIG5hbWUsIDIxMyk7CQkJXAorCURPX1RFU1RDQVNFXzJJQihkZXNjLCBuYW1lLCAyMzEpOwkJCVwKKwlET19URVNUQ0FTRV8ySUIoZGVzYywgbmFtZSwgMzEyKTsJCQlcCisJRE9fVEVTVENBU0VfMklCKGRlc2MsIG5hbWUsIDMyMSk7CisKKyNkZWZpbmUgRE9fVEVTVENBU0VfNng2KGRlc2MsIG5hbWUpCQkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAxMjMpOwkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAxMzIpOwkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAyMTMpOwkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAyMzEpOwkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAzMTIpOwkJCVwKKwlET19URVNUQ0FTRV82SShkZXNjLCBuYW1lLCAzMjEpOworCisjZGVmaW5lIERPX1RFU1RDQVNFXzZ4NlJXKGRlc2MsIG5hbWUpCQkJCVwKKwlET19URVNUQ0FTRV82SVJXKGRlc2MsIG5hbWUsIDEyMyk7CQkJXAorCURPX1RFU1RDQVNFXzZJUlcoZGVzYywgbmFtZSwgMTMyKTsJCQlcCisJRE9fVEVTVENBU0VfNklSVyhkZXNjLCBuYW1lLCAyMTMpOwkJCVwKKwlET19URVNUQ0FTRV82SVJXKGRlc2MsIG5hbWUsIDIzMSk7CQkJXAorCURPX1RFU1RDQVNFXzZJUlcoZGVzYywgbmFtZSwgMzEyKTsJCQlcCisJRE9fVEVTVENBU0VfNklSVyhkZXNjLCBuYW1lLCAzMjEpOworCisKK3ZvaWQgbG9ja2luZ19zZWxmdGVzdCh2b2lkKQoreworCS8qCisJICogR290IGEgbG9ja2luZyBmYWlsdXJlIGJlZm9yZSB0aGUgc2VsZnRlc3QgcmFuPworCSAqLworCWlmICghZGVidWdfbG9ja3MpIHsKKwkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcHJpbnRrKCJ8IExvY2tpbmcgQVBJIHRlc3RzdWl0ZSBkaXNhYmxlZCB8XG4iKTsKKwkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUnVuIHRoZSB0ZXN0c3VpdGU6CisJICovCisJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygifCBMb2NraW5nIEFQSSB0ZXN0c3VpdGU6XG4iKTsKKwlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcGluIHx3bG9jayB8cmxvY2sgfG11dGV4IHwgd3NlbSB8IHJzZW0gfFxuIik7CisJcHJpbnRrKCIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCWluaXRfc2hhcmVkX2NsYXNzZXMoKTsKKwlkZWJ1Z19sb2Nrc19zaWxlbnQgPSAhZGVidWdfbG9ja3NfdmVyYm9zZTsKKworCURPX1RFU1RDQVNFXzZSKCJBLUEgZGVhZGxvY2siLCBBQSk7CisJRE9fVEVTVENBU0VfNlIoIkEtQi1CLUEgZGVhZGxvY2siLCBBQkJBKTsKKwlET19URVNUQ0FTRV82UigiQS1CLUItQy1DLUEgZGVhZGxvY2siLCBBQkJDQ0EpOworCURPX1RFU1RDQVNFXzZSKCJBLUItQy1BLUItQyBkZWFkbG9jayIsIEFCQ0FCQyk7CisJRE9fVEVTVENBU0VfNlIoIkEtQi1CLUMtQy1ELUQtQSBkZWFkbG9jayIsIEFCQkNDRERBKTsKKwlET19URVNUQ0FTRV82UigiQS1CLUMtRC1CLUQtRC1BIGRlYWRsb2NrIiwgQUJDREJEREEpOworCURPX1RFU1RDQVNFXzZSKCJBLUItQy1ELUItQy1ELUEgZGVhZGxvY2siLCBBQkNEQkNEQSk7CisJRE9fVEVTVENBU0VfNigiZG91YmxlIHVubG9jayIsIGRvdWJsZV91bmxvY2spOworCURPX1RFU1RDQVNFXzYoImluaXRpYWxpemUgaGVsZCIsIGluaXRfaGVsZCk7CisJRE9fVEVTVENBU0VfNl9TVUNDRVNTKCJiYWQgdW5sb2NrIG9yZGVyIiwgYmFkX3VubG9ja19vcmRlcik7CisKKwlwcmludGsoIiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50X3Rlc3RuYW1lKCJyZWN1cnNpdmUgcmVhZC1sb2NrIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgfCIpOworCWRvdGVzdChybG9ja19BQTEsIFNVQ0NFU1MsIExPQ0tUWVBFX1JXTE9DSyk7CisJcHJpbnRrKCIgICAgICAgICAgICAgfCIpOworCWRvdGVzdChyc2VtX0FBMSwgRkFJTFVSRSwgTE9DS1RZUEVfUldTRU0pOworCXByaW50aygiXG4iKTsKKworCXByaW50X3Rlc3RuYW1lKCJyZWN1cnNpdmUgcmVhZC1sb2NrICMyIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgfCIpOworCWRvdGVzdChybG9ja19BQTFCLCBTVUNDRVNTLCBMT0NLVFlQRV9SV0xPQ0spOworCXByaW50aygiICAgICAgICAgICAgIHwiKTsKKwlkb3Rlc3QocnNlbV9BQTFCLCBGQUlMVVJFLCBMT0NLVFlQRV9SV1NFTSk7CisJcHJpbnRrKCJcbiIpOworCisJcHJpbnRfdGVzdG5hbWUoIm1peGVkIHJlYWQtd3JpdGUtbG9jayIpOworCXByaW50aygiICAgICAgICAgICAgIHwiKTsKKwlkb3Rlc3QocmxvY2tfQUEyLCBGQUlMVVJFLCBMT0NLVFlQRV9SV0xPQ0spOworCXByaW50aygiICAgICAgICAgICAgIHwiKTsKKwlkb3Rlc3QocnNlbV9BQTIsIEZBSUxVUkUsIExPQ0tUWVBFX1JXU0VNKTsKKwlwcmludGsoIlxuIik7CisKKwlwcmludF90ZXN0bmFtZSgibWl4ZWQgd3JpdGUtcmVhZC1sb2NrIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgfCIpOworCWRvdGVzdChybG9ja19BQTMsIEZBSUxVUkUsIExPQ0tUWVBFX1JXTE9DSyk7CisJcHJpbnRrKCIgICAgICAgICAgICAgfCIpOworCWRvdGVzdChyc2VtX0FBMywgRkFJTFVSRSwgTE9DS1RZUEVfUldTRU0pOworCXByaW50aygiXG4iKTsKKworCXByaW50aygiICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwkvKgorCSAqIGlycS1jb250ZXh0IHRlc3RjYXNlczoKKwkgKi8KKwlET19URVNUQ0FTRV8yeDYoImlycXMtb24gKyBpcnEtc2FmZS1BIiwgaXJxc2FmZTEpOworCURPX1RFU1RDQVNFXzJ4Mygic2lycS1zYWZlLUEgPT4gaGlycXMtb24iLCBpcnFzYWZlMkEpOworCURPX1RFU1RDQVNFXzJ4Nigic2FmZS1BICsgaXJxcy1vbiIsIGlycXNhZmUyQik7CisJRE9fVEVTVENBU0VfNng2KCJzYWZlLUEgKyB1bnNhZmUtQiAjMSIsIGlycXNhZmUzKTsKKwlET19URVNUQ0FTRV82eDYoInNhZmUtQSArIHVuc2FmZS1CICMyIiwgaXJxc2FmZTQpOworCURPX1RFU1RDQVNFXzZ4NlJXKCJpcnEgbG9jay1pbnZlcnNpb24iLCBpcnFfaW52ZXJzaW9uKTsKKworCURPX1RFU1RDQVNFXzZ4MigiaXJxIHJlYWQtcmVjdXJzaW9uIiwgaXJxX3JlYWRfcmVjdXJzaW9uKTsKKy8vCURPX1RFU1RDQVNFXzZ4MkIoImlycSByZWFkLXJlY3Vyc2lvbiAjMiIsIGlycV9yZWFkX3JlY3Vyc2lvbjIpOworCisJaWYgKHVuZXhwZWN0ZWRfdGVzdGNhc2VfZmFpbHVyZXMpIHsKKwkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCWRlYnVnX2xvY2tzID0gMDsKKwkJcHJpbnRrKCJCVUc6ICUzZCB1bmV4cGVjdGVkIGZhaWx1cmVzIChvdXQgb2YgJTNkKSAtIGRlYnVnZ2luZyBkaXNhYmxlZCEgfFxuIiwKKwkJCXVuZXhwZWN0ZWRfdGVzdGNhc2VfZmFpbHVyZXMsIHRlc3RjYXNlX3RvdGFsKTsKKwkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJfSBlbHNlIGlmIChleHBlY3RlZF90ZXN0Y2FzZV9mYWlsdXJlcyAmJiB0ZXN0Y2FzZV9zdWNjZXNzZXMpIHsKKwkJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCXByaW50aygiJTNkIG91dCBvZiAlM2QgdGVzdGNhc2VzIGZhaWxlZCwgYXMgZXhwZWN0ZWQuIHxcbiIsCisJCQlleHBlY3RlZF90ZXN0Y2FzZV9mYWlsdXJlcywgdGVzdGNhc2VfdG90YWwpOworCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlkZWJ1Z19sb2NrcyA9IDE7CisJfSBlbHNlIGlmIChleHBlY3RlZF90ZXN0Y2FzZV9mYWlsdXJlcyAmJiAhdGVzdGNhc2Vfc3VjY2Vzc2VzKSB7CisJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlwcmludGsoIkFsbCAlM2QgdGVzdGNhc2VzIGZhaWxlZCwgYXMgZXhwZWN0ZWQuIHxcbiIsCisJCQlleHBlY3RlZF90ZXN0Y2FzZV9mYWlsdXJlcyk7CisJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCWRlYnVnX2xvY2tzID0gMTsKKwl9IGVsc2UgeworCQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlwcmludGsoIkdvb2QsIGFsbCAlM2QgdGVzdGNhc2VzIHBhc3NlZCEgfFxuIiwKKwkJCXRlc3RjYXNlX3N1Y2Nlc3Nlcyk7CisJCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJZGVidWdfbG9ja3MgPSAxOworCX0KKwlkZWJ1Z19sb2Nrc19zaWxlbnQgPSAwOworfQpkaWZmIC0tZ2l0IGEvbGliL3J3c2VtLXNwaW5sb2NrLmMgYi9saWIvcndzZW0tc3BpbmxvY2suYwppbmRleCA0MGZmZGU5Li5kYjRmZWQ3IDEwMDY0NAotLS0gYS9saWIvcndzZW0tc3BpbmxvY2suYworKysgYi9saWIvcndzZW0tc3BpbmxvY2suYwpAQCAtMTcsMjcgKzE3LDIyIEBACiAjZGVmaW5lIFJXU0VNX1dBSVRJTkdfRk9SX1dSSVRFCTB4MDAwMDAwMDIKIH07CiAKLSNpZiBSV1NFTV9ERUJVRwotdm9pZCByd3NlbXRyYWNlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqc3RyKQotewotCWlmIChzZW0tPmRlYnVnKQotCQlwcmludGsoIlslZF0gJXMoeyVkLCVkfSlcbiIsCi0JCSAgICAgICBjdXJyZW50LT5waWQsIHN0ciwgc2VtLT5hY3Rpdml0eSwKLQkJICAgICAgIGxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSA/IDAgOiAxKTsKLX0KLSNlbmRpZgotCiAvKgogICogaW5pdGlhbGlzZSB0aGUgc2VtYXBob3JlCiAgKi8KLXZvaWQgZmFzdGNhbGwgaW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit2b2lkIF9faW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlaW5pdGlhbGl6aW5nIGEgaGVsZCBzZW1hcGhvcmU6CisJICovCisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilzZW0sIHNpemVvZigqc2VtKSk7CisJbG9ja2RlcF9pbml0X21hcCgmc2VtLT5kZXBfbWFwLCBuYW1lLCBrZXkpOworI2VuZGlmCiAJc2VtLT5hY3Rpdml0eSA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOwotI2lmIFJXU0VNX0RFQlVHCi0Jc2VtLT5kZWJ1ZyA9IDA7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTU2LDggKzUxLDYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlpbnQgd29rZW47CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fcndzZW1fZG9fd2FrZSIpOwotCiAJd2FpdGVyID0gbGlzdF9lbnRyeShzZW0tPndhaXRfbGlzdC5uZXh0LCBzdHJ1Y3QgcndzZW1fd2FpdGVyLCBsaXN0KTsKIAogCWlmICghd2FrZXdyaXRlKSB7CkBAIC0xMDQsNyArOTcsNiBAQAogCXNlbS0+YWN0aXZpdHkgKz0gd29rZW47CiAKICBvdXQ6Ci0JcndzZW10cmFjZShzZW0sICJMZWF2aW5nIF9fcndzZW1fZG9fd2FrZSIpOwogCXJldHVybiBzZW07CiB9CiAKQEAgLTEzOCw4ICsxMzAsNiBAQAogCXN0cnVjdCByd3NlbV93YWl0ZXIgd2FpdGVyOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCi0JcndzZW10cmFjZShzZW0sICJFbnRlcmluZyBfX2Rvd25fcmVhZCIpOwotCiAJc3Bpbl9sb2NrX2lycSgmc2VtLT53YWl0X2xvY2spOwogCiAJaWYgKHNlbS0+YWN0aXZpdHkgPj0gMCAmJiBsaXN0X2VtcHR5KCZzZW0tPndhaXRfbGlzdCkpIHsKQEAgLTE3MSw5ICsxNjEsOCBAQAogCX0KIAogCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0KICBvdXQ6Ci0JcndzZW10cmFjZShzZW0sICJMZWF2aW5nIF9fZG93bl9yZWFkIik7CisJOwogfQogCiAvKgpAQCAtMTg0LDcgKzE3Myw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXJ3c2VtdHJhY2Uoc2VtLCAiRW50ZXJpbmcgX19kb3duX3JlYWRfdHJ5bG9jayIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CiAKQEAgLTE5Niw3ICsxODQsNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKIAotCXJ3c2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX2Rvd25fcmVhZF90cnlsb2NrIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjA0LDEzICsxOTEsMTEgQEAKICAqIGdldCBhIHdyaXRlIGxvY2sgb24gdGhlIHNlbWFwaG9yZQogICogLSB3ZSBpbmNyZW1lbnQgdGhlIHdhaXRpbmcgY291bnQgYW55d2F5IHRvIGluZGljYXRlIGFuIGV4Y2x1c2l2ZSBsb2NrCiAgKi8KLXZvaWQgZmFzdGNhbGwgX19zY2hlZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQordm9pZCBmYXN0Y2FsbCBfX3NjaGVkIF9fZG93bl93cml0ZV9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCiB7CiAJc3RydWN0IHJ3c2VtX3dhaXRlciB3YWl0ZXI7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fZG93bl93cml0ZSIpOwotCiAJc3Bpbl9sb2NrX2lycSgmc2VtLT53YWl0X2xvY2spOwogCiAJaWYgKHNlbS0+YWN0aXZpdHkgPT0gMCAmJiBsaXN0X2VtcHR5KCZzZW0tPndhaXRfbGlzdCkpIHsKQEAgLTI0Miw5ICsyMjcsMTMgQEAKIAl9CiAKIAl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCiAgb3V0OgotCXJ3c2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX2Rvd25fd3JpdGUiKTsKKwk7Cit9CisKK3ZvaWQgZmFzdGNhbGwgX19zY2hlZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fZG93bl93cml0ZV9uZXN0ZWQoc2VtLCAwKTsKIH0KIAogLyoKQEAgLTI1NSw4ICsyNDQsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fZG93bl93cml0ZV90cnlsb2NrIik7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChzZW0tPmFjdGl2aXR5ID09IDAgJiYgbGlzdF9lbXB0eSgmc2VtLT53YWl0X2xpc3QpKSB7CkBAIC0yNjcsNyArMjU0LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkxlYXZpbmcgX19kb3duX3dyaXRlX3RyeWxvY2siKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzgsMTYgKzI2NCwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkVudGVyaW5nIF9fdXBfcmVhZCIpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoLS1zZW0tPmFjdGl2aXR5ID09IDAgJiYgIWxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSkKIAkJc2VtID0gX19yd3NlbV93YWtlX29uZV93cml0ZXIoc2VtKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7Ci0KLQlyd3NlbXRyYWNlKHNlbSwgIkxlYXZpbmcgX191cF9yZWFkIik7CiB9CiAKIC8qCkBAIC0yOTcsOCArMjc5LDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcndzZW10cmFjZShzZW0sICJFbnRlcmluZyBfX3VwX3dyaXRlIik7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCXNlbS0+YWN0aXZpdHkgPSAwOwpAQCAtMzA2LDggKzI4Niw2IEBACiAJCXNlbSA9IF9fcndzZW1fZG9fd2FrZShzZW0sIDEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCXJ3c2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX3VwX3dyaXRlIik7CiB9CiAKIC8qCkBAIC0zMTgsOCArMjk2LDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcndzZW10cmFjZShzZW0sICJFbnRlcmluZyBfX2Rvd25ncmFkZV93cml0ZSIpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CiAKIAlzZW0tPmFjdGl2aXR5ID0gMTsKQEAgLTMyNywxOCArMzAzLDE0IEBACiAJCXNlbSA9IF9fcndzZW1fZG9fd2FrZShzZW0sIDApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKLQotCXJ3c2VtdHJhY2Uoc2VtLCAiTGVhdmluZyBfX2Rvd25ncmFkZV93cml0ZSIpOwogfQogCi1FWFBPUlRfU1lNQk9MKGluaXRfcndzZW0pOworRVhQT1JUX1NZTUJPTChfX2luaXRfcndzZW0pOwogRVhQT1JUX1NZTUJPTChfX2Rvd25fcmVhZCk7CiBFWFBPUlRfU1lNQk9MKF9fZG93bl9yZWFkX3RyeWxvY2spOworRVhQT1JUX1NZTUJPTChfX2Rvd25fd3JpdGVfbmVzdGVkKTsKIEVYUE9SVF9TWU1CT0woX19kb3duX3dyaXRlKTsKIEVYUE9SVF9TWU1CT0woX19kb3duX3dyaXRlX3RyeWxvY2spOwogRVhQT1JUX1NZTUJPTChfX3VwX3JlYWQpOwogRVhQT1JUX1NZTUJPTChfX3VwX3dyaXRlKTsKIEVYUE9SVF9TWU1CT0woX19kb3duZ3JhZGVfd3JpdGUpOwotI2lmIFJXU0VNX0RFQlVHCi1FWFBPUlRfU1lNQk9MKHJ3c2VtdHJhY2UpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvcndzZW0uYyBiL2xpYi9yd3NlbS5jCmluZGV4IDYyZmE0ZWIuLmIzMjI0MjEgMTAwNjQ0Ci0tLSBhL2xpYi9yd3NlbS5jCisrKyBiL2xpYi9yd3NlbS5jCkBAIC04LDYgKzgsMjYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKy8qCisgKiBJbml0aWFsaXplIGFuIHJ3c2VtOgorICovCit2b2lkIF9faW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlaW5pdGlhbGl6aW5nIGEgaGVsZCBzZW1hcGhvcmU6CisJICovCisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilzZW0sIHNpemVvZigqc2VtKSk7CisJbG9ja2RlcF9pbml0X21hcCgmc2VtLT5kZXBfbWFwLCBuYW1lLCBrZXkpOworI2VuZGlmCisJc2VtLT5jb3VudCA9IFJXU0VNX1VOTE9DS0VEX1ZBTFVFOworCXNwaW5fbG9ja19pbml0KCZzZW0tPndhaXRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnNlbS0+d2FpdF9saXN0KTsKK30KKworRVhQT1JUX1NZTUJPTChfX2luaXRfcndzZW0pOworCiBzdHJ1Y3QgcndzZW1fd2FpdGVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwpAQCAtMTYsMTcgKzM2LDYgQEAKICNkZWZpbmUgUldTRU1fV0FJVElOR19GT1JfV1JJVEUJMHgwMDAwMDAwMgogfTsKIAotI2lmIFJXU0VNX0RFQlVHCi0jdW5kZWYgcndzZW10cmFjZQotdm9pZCByd3NlbXRyYWNlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqc3RyKQotewotCXByaW50aygic2VtPSVwXG4iLCBzZW0pOwotCXByaW50aygiKHNlbSk9JTA4bHhcbiIsIHNlbS0+Y291bnQpOwotCWlmIChzZW0tPmRlYnVnKQotCQlwcmludGsoIlslZF0gJXMoeyUwOGx4fSlcbiIsIGN1cnJlbnQtPnBpZCwgc3RyLCBzZW0tPmNvdW50KTsKLX0KLSNlbmRpZgotCiAvKgogICogaGFuZGxlIHRoZSBsb2NrIHJlbGVhc2Ugd2hlbiBwcm9jZXNzZXMgYmxvY2tlZCBvbiBpdCB0aGF0IGNhbiBub3cgcnVuCiAgKiAtIGlmIHdlIGNvbWUgaGVyZSBmcm9tIHVwX3h4eHgoKSwgdGhlbjoKQEAgLTQ1LDggKzU0LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OwogCXNpZ25lZCBsb25nIG9sZGNvdW50LCB3b2tlbiwgbG9vcDsKIAotCXJ3c2VtdHJhY2Uoc2VtLCAiRW50ZXJpbmcgX19yd3NlbV9kb193YWtlIik7Ci0KIAlpZiAoZG93bmdyYWRpbmcpCiAJCWdvdG8gZG9udF93YWtlX3dyaXRlcnM7CiAKQEAgLTEyNyw3ICsxMzQsNiBAQAogCW5leHQtPnByZXYgPSAmc2VtLT53YWl0X2xpc3Q7CiAKICBvdXQ6Ci0JcndzZW10cmFjZShzZW0sICJMZWF2aW5nIF9fcndzZW1fZG9fd2FrZSIpOwogCXJldHVybiBzZW07CiAKIAkvKiB1bmRvIHRoZSBjaGFuZ2UgdG8gY291bnQsIGJ1dCBjaGVjayBmb3IgYSB0cmFuc2l0aW9uIDEtPjAgKi8KQEAgLTE4NiwxMyArMTkyLDkgQEAKIHsKIAlzdHJ1Y3QgcndzZW1fd2FpdGVyIHdhaXRlcjsKIAotCXJ3c2VtdHJhY2Uoc2VtLCAiRW50ZXJpbmcgcndzZW1fZG93bl9yZWFkX2ZhaWxlZCIpOwotCiAJd2FpdGVyLmZsYWdzID0gUldTRU1fV0FJVElOR19GT1JfUkVBRDsKIAlyd3NlbV9kb3duX2ZhaWxlZF9jb21tb24oc2VtLCAmd2FpdGVyLAogCQkJCVJXU0VNX1dBSVRJTkdfQklBUyAtIFJXU0VNX0FDVElWRV9CSUFTKTsKLQotCXJ3c2VtdHJhY2Uoc2VtLCAiTGVhdmluZyByd3NlbV9kb3duX3JlYWRfZmFpbGVkIik7CiAJcmV0dXJuIHNlbTsKIH0KIApAQCAtMjA0LDEyICsyMDYsOSBAQAogewogCXN0cnVjdCByd3NlbV93YWl0ZXIgd2FpdGVyOwogCi0JcndzZW10cmFjZShzZW0sICJFbnRlcmluZyByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZCIpOwotCiAJd2FpdGVyLmZsYWdzID0gUldTRU1fV0FJVElOR19GT1JfV1JJVEU7CiAJcndzZW1fZG93bl9mYWlsZWRfY29tbW9uKHNlbSwgJndhaXRlciwgLVJXU0VNX0FDVElWRV9CSUFTKTsKIAotCXJ3c2VtdHJhY2Uoc2VtLCAiTGVhdmluZyByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZCIpOwogCXJldHVybiBzZW07CiB9CiAKQEAgLTIyMSw4ICsyMjAsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkVudGVyaW5nIHJ3c2VtX3dha2UiKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwogCiAJLyogZG8gbm90aGluZyBpZiBsaXN0IGVtcHR5ICovCkBAIC0yMzEsOCArMjI4LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkxlYXZpbmcgcndzZW1fd2FrZSIpOwotCiAJcmV0dXJuIHNlbTsKIH0KIApAQCAtMjQ1LDggKzI0MCw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJ3c2VtdHJhY2Uoc2VtLCAiRW50ZXJpbmcgcndzZW1fZG93bmdyYWRlX3dha2UiKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwogCiAJLyogZG8gbm90aGluZyBpZiBsaXN0IGVtcHR5ICovCkBAIC0yNTUsNyArMjQ4LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbS0+d2FpdF9sb2NrLCBmbGFncyk7CiAKLQlyd3NlbXRyYWNlKHNlbSwgIkxlYXZpbmcgcndzZW1fZG93bmdyYWRlX3dha2UiKTsKIAlyZXR1cm4gc2VtOwogfQogCkBAIC0yNjMsNiArMjU1LDMgQEAKIEVYUE9SVF9TWU1CT0wocndzZW1fZG93bl93cml0ZV9mYWlsZWQpOwogRVhQT1JUX1NZTUJPTChyd3NlbV93YWtlKTsKIEVYUE9SVF9TWU1CT0wocndzZW1fZG93bmdyYWRlX3dha2UpOwotI2lmIFJXU0VNX0RFQlVHCi1FWFBPUlRfU1lNQk9MKHJ3c2VtdHJhY2UpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvc2VtYXBob3JlLXNsZWVwZXJzLmMgYi9saWIvc2VtYXBob3JlLXNsZWVwZXJzLmMKaW5kZXggNGQ1ZjE4OC4uMTI4MTgwNSAxMDA2NDQKLS0tIGEvbGliL3NlbWFwaG9yZS1zbGVlcGVycy5jCisrKyBiL2xpYi9zZW1hcGhvcmUtc2xlZXBlcnMuYwpAQCAtMTIsNyArMTIsNiBAQAogICoKICAqIHJ3IHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgTm92ZW1iZXIgMTk5OSBieSBCZW5qYW1pbiBMYUhhaXNlIDxiY3JsQGt2YWNrLm9yZz4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvbGliL3NwaW5sb2NrX2RlYnVnLmMgYi9saWIvc3BpbmxvY2tfZGVidWcuYwppbmRleCBkOGI2YmI0Li4zZDljNGRjIDEwMDY0NAotLS0gYS9saWIvc3BpbmxvY2tfZGVidWcuYworKysgYi9saWIvc3BpbmxvY2tfZGVidWcuYwpAQCAtNiw0MSArNiw3MyBAQAogICogREVCVUdfU1BJTkxPQ0suCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCit2b2lkIF9fc3Bpbl9sb2NrX2luaXQoc3BpbmxvY2tfdCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlaW5pdGlhbGl6aW5nIGEgaGVsZCBsb2NrOgorCSAqLworCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopbG9jaywgc2l6ZW9mKCpsb2NrKSk7CisJbG9ja2RlcF9pbml0X21hcCgmbG9jay0+ZGVwX21hcCwgbmFtZSwga2V5KTsKKyNlbmRpZgorCWxvY2stPnJhd19sb2NrID0gKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwlsb2NrLT5tYWdpYyA9IFNQSU5MT0NLX01BR0lDOworCWxvY2stPm93bmVyID0gU1BJTkxPQ0tfT1dORVJfSU5JVDsKKwlsb2NrLT5vd25lcl9jcHUgPSAtMTsKK30KKworRVhQT1JUX1NZTUJPTChfX3NwaW5fbG9ja19pbml0KTsKKwordm9pZCBfX3J3bG9ja19pbml0KHJ3bG9ja190ICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCS8qCisJICogTWFrZSBzdXJlIHdlIGFyZSBub3QgcmVpbml0aWFsaXppbmcgYSBoZWxkIGxvY2s6CisJICovCisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilsb2NrLCBzaXplb2YoKmxvY2spKTsKKwlsb2NrZGVwX2luaXRfbWFwKCZsb2NrLT5kZXBfbWFwLCBuYW1lLCBrZXkpOworI2VuZGlmCisJbG9jay0+cmF3X2xvY2sgPSAocmF3X3J3bG9ja190KSBfX1JBV19SV19MT0NLX1VOTE9DS0VEOworCWxvY2stPm1hZ2ljID0gUldMT0NLX01BR0lDOworCWxvY2stPm93bmVyID0gU1BJTkxPQ0tfT1dORVJfSU5JVDsKKwlsb2NrLT5vd25lcl9jcHUgPSAtMTsKK30KKworRVhQT1JUX1NZTUJPTChfX3J3bG9ja19pbml0KTsKIAogc3RhdGljIHZvaWQgc3Bpbl9idWcoc3BpbmxvY2tfdCAqbG9jaywgY29uc3QgY2hhciAqbXNnKQogewotCXN0YXRpYyBsb25nIHByaW50X29uY2UgPSAxOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIgPSBOVUxMOwogCi0JaWYgKHhjaGcoJnByaW50X29uY2UsIDApKSB7Ci0JCWlmIChsb2NrLT5vd25lciAmJiBsb2NrLT5vd25lciAhPSBTUElOTE9DS19PV05FUl9JTklUKQotCQkJb3duZXIgPSBsb2NrLT5vd25lcjsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIkJVRzogc3BpbmxvY2sgJXMgb24gQ1BVIyVkLCAlcy8lZFxuIiwKLQkJCW1zZywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0JCXByaW50ayhLRVJOX0VNRVJHICIgbG9jazogJXAsIC5tYWdpYzogJTA4eCwgLm93bmVyOiAlcy8lZCwgIgotCQkJCSIub3duZXJfY3B1OiAlZFxuIiwKLQkJCWxvY2ssIGxvY2stPm1hZ2ljLAotCQkJb3duZXIgPyBvd25lci0+Y29tbSA6ICI8bm9uZT4iLAotCQkJb3duZXIgPyBvd25lci0+cGlkIDogLTEsCi0JCQlsb2NrLT5vd25lcl9jcHUpOwotCQlkdW1wX3N0YWNrKCk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQkvKgotCQkgKiBXZSBjYW5ub3QgY29udGludWUgb24gU01QOgotCQkgKi8KLS8vCQlwYW5pYygiYmFkIGxvY2tpbmciKTsKLSNlbmRpZgotCX0KKwlpZiAoIWRlYnVnX2xvY2tzX29mZigpKQorCQlyZXR1cm47CisKKwlpZiAobG9jay0+b3duZXIgJiYgbG9jay0+b3duZXIgIT0gU1BJTkxPQ0tfT1dORVJfSU5JVCkKKwkJb3duZXIgPSBsb2NrLT5vd25lcjsKKwlwcmludGsoS0VSTl9FTUVSRyAiQlVHOiBzcGlubG9jayAlcyBvbiBDUFUjJWQsICVzLyVkXG4iLAorCQltc2csIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCisJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIiBsb2NrOiAlcCwgLm1hZ2ljOiAlMDh4LCAub3duZXI6ICVzLyVkLCAiCisJCQkiLm93bmVyX2NwdTogJWRcbiIsCisJCWxvY2ssIGxvY2stPm1hZ2ljLAorCQlvd25lciA/IG93bmVyLT5jb21tIDogIjxub25lPiIsCisJCW93bmVyID8gb3duZXItPnBpZCA6IC0xLAorCQlsb2NrLT5vd25lcl9jcHUpOworCWR1bXBfc3RhY2soKTsKIH0KIAogI2RlZmluZSBTUElOX0JVR19PTihjb25kLCBsb2NrLCBtc2cpIGlmICh1bmxpa2VseShjb25kKSkgc3Bpbl9idWcobG9jaywgbXNnKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfc3Bpbl9sb2NrX2JlZm9yZShzcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB2b2lkCitkZWJ1Z19zcGluX2xvY2tfYmVmb3JlKHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJU1BJTl9CVUdfT04obG9jay0+bWFnaWMgIT0gU1BJTkxPQ0tfTUFHSUMsIGxvY2ssICJiYWQgbWFnaWMiKTsKIAlTUElOX0JVR19PTihsb2NrLT5vd25lciA9PSBjdXJyZW50LCBsb2NrLCAicmVjdXJzaW9uIik7CkBAIC0xMTksMjAgKzE1MSwxMyBAQAogCiBzdGF0aWMgdm9pZCByd2xvY2tfYnVnKHJ3bG9ja190ICpsb2NrLCBjb25zdCBjaGFyICptc2cpCiB7Ci0Jc3RhdGljIGxvbmcgcHJpbnRfb25jZSA9IDE7CisJaWYgKCFkZWJ1Z19sb2Nrc19vZmYoKSkKKwkJcmV0dXJuOwogCi0JaWYgKHhjaGcoJnByaW50X29uY2UsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJCVUc6IHJ3bG9jayAlcyBvbiBDUFUjJWQsICVzLyVkLCAlcFxuIiwKLQkJCW1zZywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY3VycmVudC0+Y29tbSwKLQkJCWN1cnJlbnQtPnBpZCwgbG9jayk7Ci0JCWR1bXBfc3RhY2soKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCS8qCi0JCSAqIFdlIGNhbm5vdCBjb250aW51ZSBvbiBTTVA6Ci0JCSAqLwotCQlwYW5pYygiYmFkIGxvY2tpbmciKTsKLSNlbmRpZgotCX0KKwlwcmludGsoS0VSTl9FTUVSRyAiQlVHOiByd2xvY2sgJXMgb24gQ1BVIyVkLCAlcy8lZCwgJXBcbiIsCisJCW1zZywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY3VycmVudC0+Y29tbSwKKwkJY3VycmVudC0+cGlkLCBsb2NrKTsKKwlkdW1wX3N0YWNrKCk7CiB9CiAKICNkZWZpbmUgUldMT0NLX0JVR19PTihjb25kLCBsb2NrLCBtc2cpIGlmICh1bmxpa2VseShjb25kKSkgcndsb2NrX2J1Zyhsb2NrLCBtc2cpCmRpZmYgLS1naXQgYS9saWIvdGV4dHNlYXJjaC5jIGIvbGliL3RleHRzZWFyY2guYwppbmRleCA2ZjMwOTNlLi4yY2I0YTQzIDEwMDY0NAotLS0gYS9saWIvdGV4dHNlYXJjaC5jCisrKyBiL2xpYi90ZXh0c2VhcmNoLmMKQEAgLTkzLDcgKzkzLDYgQEAKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9saWIvdHNfYm0uYyBiL2xpYi90c19ibS5jCmluZGV4IGM0YzFhYzUuLjAxMTBlNDQgMTAwNjQ0Ci0tLSBhL2xpYi90c19ibS5jCisrKyBiL2xpYi90c19ibS5jCkBAIC0zNSw3ICszNSw2IEBACiAgKiAgIG1hdGNoaW5ncyBzcHJlYWQgb3ZlciBtdWx0aXBsZSBmcmFnbWVudHMsIHRoZW4gZ28gQk0uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9saWIvdHNfZnNtLmMgYi9saWIvdHNfZnNtLmMKaW5kZXggY2EzMjExMi4uODc4NDdjMiAxMDA2NDQKLS0tIGEvbGliL3RzX2ZzbS5jCisrKyBiL2xpYi90c19mc20uYwpAQCAtMjYsNyArMjYsNiBAQAogICogICBob3dldmVyIHdoaWxlIGluIHN0cmljdCBtb2RlIHRoZSBhdmVyYWdlIHJ1bnRpbWUgY2FuIGJlIGJldHRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2xpYi90c19rbXAuYyBiL2xpYi90c19rbXAuYwppbmRleCA3ZmQ0NTQ1Li4zY2VkNjI4IDEwMDY0NAotLS0gYS9saWIvdHNfa21wLmMKKysrIGIvbGliL3RzX2ttcC5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAgIFsyXSBTZWUgZmluaXRlIGF1dG9tYXRpb24gdGhlb3J5CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDc5NzQyOGEuLmJlZDcyMjkgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC00ODksNyArNDg5LDcgQEAKIAkJaWYgKHN0ciA8IGVuZCkKIAkJCSpzdHIgPSAnXDAnOwogCQllbHNlCi0JCQkqZW5kID0gJ1wwJzsKKwkJCWVuZFstMV0gPSAnXDAnOwogCX0KIAkvKiB0aGUgdHJhaWxpbmcgbnVsbCBieXRlIGRvZXNuJ3QgY291bnQgdG93YXJkcyB0aGUgdG90YWwgKi8KIAlyZXR1cm4gc3RyLWJ1ZjsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGU3NmMwMjMuLjhmNWI0NTYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTE1LDcgKzExNSw3IEBACiAjIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nCiBjb25maWcgTUVNT1JZX0hPVFBMVUcKIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGhvdC1hZGQiCi0JZGVwZW5kcyBvbiBTUEFSU0VNRU0gJiYgSE9UUExVRyAmJiAhU09GVFdBUkVfU1VTUEVORAorCWRlcGVuZHMgb24gU1BBUlNFTUVNICYmIEhPVFBMVUcgJiYgIVNPRlRXQVJFX1NVU1BFTkQgJiYgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKIAlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUEM2NCkKIAogY29tbWVudCAiTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQiCkBAIC0xNDYsMyArMTQ2LDkgQEAKIAkgIHdoaWxlIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgbm90IGNoYW5nZWQuIFRoaXMgaXMgdXNlZnVsIGZvcgogCSAgZXhhbXBsZSBvbiBOVU1BIHN5c3RlbXMgdG8gcHV0IHBhZ2VzIG5lYXJlciB0byB0aGUgcHJvY2Vzc29ycyBhY2Nlc3NpbmcKIAkgIHRoZSBwYWdlLgorCitjb25maWcgUkVTT1VSQ0VTXzY0QklUCisJYm9vbCAiNjQgYml0IE1lbW9yeSBhbmQgSU8gcmVzb3VyY2VzIChFWFBFUklNRU5UQUwpIiBpZiAoITY0QklUICYmIEVYUEVSSU1FTlRBTCkKKwlkZWZhdWx0IDY0QklUCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIG1lbW9yeSBhbmQgSU8gcmVzb3VyY2VzIHRvIGJlIDY0IGJpdC4KZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggMGI4ZjczZi4uOWRkODI0YyAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIG9iai15CQkJOj0gYm9vdG1lbS5vIGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgcGFnZV9hbGxvYy5vIHBhZ2Utd3JpdGViYWNrLm8gcGRmbHVzaC5vIFwKIAkJCSAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIFwKLQkJCSAgIHByaW9fdHJlZS5vIHV0aWwubyBtbXpvbmUubyAkKG1tdS15KQorCQkJICAgcHJpb190cmVlLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vICQobW11LXkpCiAKIG9iai0kKENPTkZJR19TV0FQKQkrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm8gdGhyYXNoLm8KIG9iai0kKENPTkZJR19IVUdFVExCRlMpCSs9IGh1Z2V0bGIubwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ1MDRkNmUuLmQwODdmYzMgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTksNyArOSw2IEBACiAgKiBtb3N0ICJub3JtYWwiIGZpbGVzeXN0ZW1zIChidXQgeW91IGRvbid0IC9oYXZlLyB0byB1c2UgdGhpczoKICAqIHRoZSBORlMgZmlsZXN5c3RlbSB1c2VkIHRvIGRvIHRoaXMgZGlmZmVyZW50bHksIGZvciBleGFtcGxlKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC0xMjAsNyArMTE5LDcgQEAKIAlyYWRpeF90cmVlX2RlbGV0ZSgmbWFwcGluZy0+cGFnZV90cmVlLCBwYWdlLT5pbmRleCk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiAJbWFwcGluZy0+bnJwYWdlcy0tOwotCXBhZ2VjYWNoZV9hY2N0KC0xKTsKKwlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9QQUdFUyk7CiB9CiAKIHZvaWQgcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTQ0OSw3ICs0NDgsNyBAQAogCQkJcGFnZS0+bWFwcGluZyA9IG1hcHBpbmc7CiAJCQlwYWdlLT5pbmRleCA9IG9mZnNldDsKIAkJCW1hcHBpbmctPm5ycGFnZXMrKzsKLQkJCXBhZ2VjYWNoZV9hY2N0KDEpOworCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCQl9CiAJCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKQEAgLTE0MTYsNyArMTQxNSw3IEBACiAJCSAqLwogCQlpZiAoIWRpZF9yZWFkYXJvdW5kKSB7CiAJCQltYWptaW4gPSBWTV9GQVVMVF9NQUpPUjsKLQkJCWluY19wYWdlX3N0YXRlKHBnbWFqZmF1bHQpOworCQkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJCX0KIAkJZGlkX3JlYWRhcm91bmQgPSAxOwogCQlyYV9wYWdlcyA9IG1heF9zYW5lX3JlYWRhaGVhZChmaWxlLT5mX3JhLnJhX3BhZ2VzKTsKQEAgLTE0ODcsNyArMTQ4Niw3IEBACiBwYWdlX25vdF91cHRvZGF0ZToKIAlpZiAoIWRpZF9yZWFkYXJvdW5kKSB7CiAJCW1ham1pbiA9IFZNX0ZBVUxUX01BSk9SOwotCQlpbmNfcGFnZV9zdGF0ZShwZ21hamZhdWx0KTsKKwkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJfQogCWxvY2tfcGFnZShwYWdlKTsKIApAQCAtMjA2OSw3ICsyMDY4LDcgQEAKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFfb3BzID0gbWFwcGluZy0+YV9vcHM7CisJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHMgPSBtYXBwaW5nLT5hX29wczsKIAlzdHJ1Y3QgaW5vZGUgCSppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAJbG9uZwkJc3RhdHVzID0gMDsKIAlzdHJ1Y3QgcGFnZQkqcGFnZTsKQEAgLTIxMjUsNiArMjEyNCwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQlpZiAodW5saWtlbHkoYnl0ZXMgPT0gMCkpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQljb3BpZWQgPSAwOworCQkJZ290byB6ZXJvX2xlbmd0aF9zZWdtZW50OworCQl9CisKIAkJc3RhdHVzID0gYV9vcHMtPnByZXBhcmVfd3JpdGUoZmlsZSwgcGFnZSwgb2Zmc2V0LCBvZmZzZXQrYnl0ZXMpOwogCQlpZiAodW5saWtlbHkoc3RhdHVzKSkgewogCQkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwpAQCAtMjE1NCw3ICsyMTU5LDggQEAKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmIChsaWtlbHkoY29waWVkID4gMCkpIHsKK3plcm9fbGVuZ3RoX3NlZ21lbnQ6CisJCWlmIChsaWtlbHkoY29waWVkID49IDApKSB7CiAJCQlpZiAoIXN0YXR1cykKIAkJCQlzdGF0dXMgPSBjb3BpZWQ7CiAKQEAgLTIyMTksNyArMjIyNSw3IEBACiAJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKKwljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqIG1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAJc2l6ZV90IG9jb3VudDsJCS8qIG9yaWdpbmFsIGNvdW50ICovCiAJc2l6ZV90IGNvdW50OwkJLyogYWZ0ZXIgZmlsZSBsaW1pdCBjaGVja3MgKi8KIAlzdHJ1Y3QgaW5vZGUgCSppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmggYi9tbS9maWxlbWFwLmgKaW5kZXggNTM2OTc5Zi4uM2YyYTM0MyAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5oCisrKyBiL21tL2ZpbGVtYXAuaApAQCAtODgsNyArODgsNyBAQAogCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92ID0gKmlvdnA7CiAJc2l6ZV90IGJhc2UgPSAqYmFzZXA7CiAKLQl3aGlsZSAoYnl0ZXMpIHsKKwlkbyB7CiAJCWludCBjb3B5ID0gbWluKGJ5dGVzLCBpb3YtPmlvdl9sZW4gLSBiYXNlKTsKIAogCQlieXRlcyAtPSBjb3B5OwpAQCAtOTcsNyArOTcsNyBAQAogCQkJaW92Kys7CiAJCQliYXNlID0gMDsKIAkJfQotCX0KKwl9IHdoaWxlIChieXRlcyk7CiAJKmlvdnAgPSBpb3Y7CiAJKmJhc2VwID0gYmFzZTsKIH0KZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXBfeGlwLmMgYi9tbS9maWxlbWFwX3hpcC5jCmluZGV4IGI5NjBhYzguLmI0ZmQwZDcgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXBfeGlwLmMKKysrIGIvbW0vZmlsZW1hcF94aXAuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nID0gZmlscC0+Zl9tYXBwaW5nOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFfb3BzID0gbWFwcGluZy0+YV9vcHM7CisJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHMgPSBtYXBwaW5nLT5hX29wczsKIAlzdHJ1Y3QgaW5vZGUgCSppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAJbG9uZwkJc3RhdHVzID0gMDsKIAlzdHJ1Y3QgcGFnZQkqcGFnZTsKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCA5YjI3NGZkZi4uOWIyYTU0MCAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtMzE1LDggKzMxNSw4IEBACiAJCWlmIChidmVjLT5idl9wYWdlID09IG9yZ192ZWMtPmJ2X3BhZ2UpCiAJCQljb250aW51ZTsKIAotCQltZW1wb29sX2ZyZWUoYnZlYy0+YnZfcGFnZSwgcG9vbCk7CQotCQlkZWNfcGFnZV9zdGF0ZShucl9ib3VuY2UpOworCQlkZWNfem9uZV9wYWdlX3N0YXRlKGJ2ZWMtPmJ2X3BhZ2UsIE5SX0JPVU5DRSk7CisJCW1lbXBvb2xfZnJlZShidmVjLT5idl9wYWdlLCBwb29sKTsKIAl9CiAKIAliaW9fZW5kaW8oYmlvX29yaWcsIGJpb19vcmlnLT5iaV9zaXplLCBlcnIpOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCXRvLT5idl9wYWdlID0gbWVtcG9vbF9hbGxvYyhwb29sLCBxLT5ib3VuY2VfZ2ZwKTsKIAkJdG8tPmJ2X2xlbiA9IGZyb20tPmJ2X2xlbjsKIAkJdG8tPmJ2X29mZnNldCA9IGZyb20tPmJ2X29mZnNldDsKLQkJaW5jX3BhZ2Vfc3RhdGUobnJfYm91bmNlKTsKKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZSh0by0+YnZfcGFnZSwgTlJfQk9VTkNFKTsKIAogCQlpZiAocncgPT0gV1JJVEUpIHsKIAkJCWNoYXIgKnZ0bywgKnZmcm9tOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAyNDdiNWMzLi5jMWUxNGM5ZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXBtZF9jbGVhcihwbWQpOwogCXB0ZV9sb2NrX2RlaW5pdChwYWdlKTsKIAlwdGVfZnJlZV90bGIodGxiLCBwYWdlKTsKLQlkZWNfcGFnZV9zdGF0ZShucl9wYWdlX3RhYmxlX3BhZ2VzKTsKKwlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX1BBR0VUQUJMRSk7CiAJdGxiLT5tbS0+bnJfcHRlcy0tOwogfQogCkBAIC0zMTEsNyArMzExLDcgQEAKIAkJcHRlX2ZyZWUobmV3KTsKIAl9IGVsc2UgewogCQltbS0+bnJfcHRlcysrOwotCQlpbmNfcGFnZV9zdGF0ZShucl9wYWdlX3RhYmxlX3BhZ2VzKTsKKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZShuZXcsIE5SX1BBR0VUQUJMRSk7CiAJCXBtZF9wb3B1bGF0ZShtbSwgcG1kLCBuZXcpOwogCX0KIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CkBAIC01MDMsNyArNTAzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJc3JjX3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX25lc3RlZChzcmNfcG1kLCBhZGRyKTsKIAlzcmNfcHRsID0gcHRlX2xvY2twdHIoc3JjX21tLCBzcmNfcG1kKTsKLQlzcGluX2xvY2soc3JjX3B0bCk7CisJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlkbyB7CiAJCS8qCkBAIC0xOTUxLDcgKzE5NTEsNyBAQAogCiAJCS8qIEhhZCB0byByZWFkIHRoZSBwYWdlIGZyb20gc3dhcCBhcmVhOiBNYWpvciBmYXVsdCAqLwogCQlyZXQgPSBWTV9GQVVMVF9NQUpPUjsKLQkJaW5jX3BhZ2Vfc3RhdGUocGdtYWpmYXVsdCk7CisJCWNvdW50X3ZtX2V2ZW50KFBHTUFKRkFVTFQpOwogCQlncmFiX3N3YXBfdG9rZW4oKTsKIAl9CiAKQEAgLTIzMjQsNyArMjMyNCw3IEBACiAKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlpbmNfcGFnZV9zdGF0ZShwZ2ZhdWx0KTsKKwljb3VudF92bV9ldmVudChQR0ZBVUxUKTsKIAogCWlmICh1bmxpa2VseShpc192bV9odWdldGxiX3BhZ2Uodm1hKSkpCiAJCXJldHVybiBodWdldGxiX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHdyaXRlX2FjY2Vzcyk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCBlYTQwMzg4Li4wMWM5ZmI5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTQsNyArNCw2IEBACiAgKiAgQ29weXJpZ2h0IChDKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggNmI5NzQwYi4uZTA3ZTI3ZSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTEyMDksMTAgKzEyMDksOCBAQAogCiAJemwgPSBOT0RFX0RBVEEobmlkKS0+bm9kZV96b25lbGlzdHMgKyBnZnBfem9uZShnZnApOwogCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcCwgb3JkZXIsIHpsKTsKLQlpZiAocGFnZSAmJiBwYWdlX3pvbmUocGFnZSkgPT0gemwtPnpvbmVzWzBdKSB7Ci0JCXpvbmVfcGNwKHpsLT56b25lc1swXSxnZXRfY3B1KCkpLT5pbnRlcmxlYXZlX2hpdCsrOwotCQlwdXRfY3B1KCk7Ci0JfQorCWlmIChwYWdlICYmIHBhZ2Vfem9uZShwYWdlKSA9PSB6bC0+em9uZXNbMF0pCisJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlVNQV9JTlRFUkxFQVZFX0hJVCk7CiAJcmV0dXJuIHBhZ2U7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA2NDQ2YzYxLi5jMTg2OGVjIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC05Niw3ICs5Niw3IEBACiAJaWYgKHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeSA9PSBPVkVSQ09NTUlUX0dVRVNTKSB7CiAJCXVuc2lnbmVkIGxvbmcgbjsKIAotCQlmcmVlID0gZ2V0X3BhZ2VfY2FjaGVfc2l6ZSgpOworCQlmcmVlID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9QQUdFUyk7CiAJCWZyZWUgKz0gbnJfc3dhcF9wYWdlczsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvbW0vbW16b25lLmMgYi9tbS9tbXpvbmUuYwppbmRleCBiMDIyMzcwLi4wOTU5ZWUxIDEwMDY0NAotLS0gYS9tbS9tbXpvbmUuYworKysgYi9tbS9tbXpvbmUuYwpAQCAtNSw3ICs1LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggMTkwM2JkZi4uN2MxNWNmMyAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTk3LDcgKzk3LDcgQEAKICAJbmV3X3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX25lc3RlZChuZXdfcG1kLCBuZXdfYWRkcik7CiAJbmV3X3B0bCA9IHB0ZV9sb2NrcHRyKG1tLCBuZXdfcG1kKTsKIAlpZiAobmV3X3B0bCAhPSBvbGRfcHRsKQotCQlzcGluX2xvY2sobmV3X3B0bCk7CisJCXNwaW5fbG9ja19uZXN0ZWQobmV3X3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJZm9yICg7IG9sZF9hZGRyIDwgb2xkX2VuZDsgb2xkX3B0ZSsrLCBvbGRfYWRkciArPSBQQUdFX1NJWkUsCiAJCQkJICAgbmV3X3B0ZSsrLCBuZXdfYWRkciArPSBQQUdFX1NJWkUpIHsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDAyOWZhZGEuLjUxNTFjNDQgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTEyMiw3ICsxMTIyLDcgQEAKIAlpZiAoc3lzY3RsX292ZXJjb21taXRfbWVtb3J5ID09IE9WRVJDT01NSVRfR1VFU1MpIHsKIAkJdW5zaWduZWQgbG9uZyBuOwogCi0JCWZyZWUgPSBnZXRfcGFnZV9jYWNoZV9zaXplKCk7CisJCWZyZWUgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX1BBR0VTKTsKIAkJZnJlZSArPSBucl9zd2FwX3BhZ2VzOwogCiAJCS8qCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCBkNDZlZDBmLi5iOWFmMTM2IDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogICogQ0FQX1NZU19SQVdfSU8gc2V0LCBzZW5kIFNJR1RFUk0gaW5zdGVhZCAoYnV0IGl0J3MgdW5saWtlbHkgdGhhdAogICogd2Ugc2VsZWN0IGEgcHJvY2VzcyB3aXRoIENBUF9TWVNfUkFXX0lPIHNldCkuCiAgKi8KLXN0YXRpYyB2b2lkIF9fb29tX2tpbGxfdGFzayh0YXNrX3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBjaGFyICptZXNzYWdlKQogewogCWlmIChwLT5waWQgPT0gMSkgewogCQlXQVJOX09OKDEpOwpAQCAtMjU1LDEwICsyNTUsMTAgQEAKIAlmb3JjZV9zaWcoU0lHS0lMTCwgcCk7CiB9CiAKLXN0YXRpYyBpbnQgb29tX2tpbGxfdGFzayh0YXNrX3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgaW50IG9vbV9raWxsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBjaGFyICptZXNzYWdlKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXRhc2tfdCAqIGcsICogcTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpxOwogCiAJbW0gPSBwLT5tbTsKIApAQCAtMzE2LDcgKzMxNiw3IEBACiAgKi8KIHZvaWQgb3V0X29mX21lbW9yeShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyKQogewotCXRhc2tfdCAqcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJdW5zaWduZWQgbG9uZyBwb2ludHMgPSAwOwogCiAJaWYgKHByaW50a19yYXRlbGltaXQoKSkgewpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNGVjNzAyNi4uZTYzMDE4OCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC05OSwyMiArOTksNiBAQAogCiBzdGF0aWMgdm9pZCBiYWNrZ3JvdW5kX3dyaXRlb3V0KHVuc2lnbmVkIGxvbmcgX21pbl9wYWdlcyk7CiAKLXN0cnVjdCB3cml0ZWJhY2tfc3RhdGUKLXsKLQl1bnNpZ25lZCBsb25nIG5yX2RpcnR5OwotCXVuc2lnbmVkIGxvbmcgbnJfdW5zdGFibGU7Ci0JdW5zaWduZWQgbG9uZyBucl9tYXBwZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl93cml0ZWJhY2s7Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRfd3JpdGViYWNrX3N0YXRlKHN0cnVjdCB3cml0ZWJhY2tfc3RhdGUgKndicykKLXsKLQl3YnMtPm5yX2RpcnR5ID0gcmVhZF9wYWdlX3N0YXRlKG5yX2RpcnR5KTsKLQl3YnMtPm5yX3Vuc3RhYmxlID0gcmVhZF9wYWdlX3N0YXRlKG5yX3Vuc3RhYmxlKTsKLQl3YnMtPm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpOwotCXdicy0+bnJfd3JpdGViYWNrID0gcmVhZF9wYWdlX3N0YXRlKG5yX3dyaXRlYmFjayk7Ci19Ci0KIC8qCiAgKiBXb3JrIG91dCB0aGUgY3VycmVudCBkaXJ0eS1tZW1vcnkgY2xhbXBpbmcgYW5kIGJhY2tncm91bmQgd3JpdGVvdXQKICAqIHRocmVzaG9sZHMuCkBAIC0xMzMsOCArMTE3LDggQEAKICAqIGNsYW1waW5nIGxldmVsLgogICovCiBzdGF0aWMgdm9pZAotZ2V0X2RpcnR5X2xpbWl0cyhzdHJ1Y3Qgd3JpdGViYWNrX3N0YXRlICp3YnMsIGxvbmcgKnBiYWNrZ3JvdW5kLCBsb25nICpwZGlydHksCi0JCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQorZ2V0X2RpcnR5X2xpbWl0cyhsb25nICpwYmFja2dyb3VuZCwgbG9uZyAqcGRpcnR5LAorCQkJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlpbnQgYmFja2dyb3VuZF9yYXRpbzsJCS8qIFBlcmNlbnRhZ2VzICovCiAJaW50IGRpcnR5X3JhdGlvOwpAQCAtMTQ0LDggKzEyOCw2IEBACiAJdW5zaWduZWQgbG9uZyBhdmFpbGFibGVfbWVtb3J5ID0gdG90YWxfcGFnZXM7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAKLQlnZXRfd3JpdGViYWNrX3N0YXRlKHdicyk7Ci0KICNpZmRlZiBDT05GSUdfSElHSE1FTQogCS8qCiAJICogSWYgdGhpcyBtYXBwaW5nIGNhbiBvbmx5IGFsbG9jYXRlIGZyb20gbG93IG1lbW9yeSwKQEAgLTE1Niw3ICsxMzgsOSBAQAogI2VuZGlmCiAKIAotCXVubWFwcGVkX3JhdGlvID0gMTAwIC0gKHdicy0+bnJfbWFwcGVkICogMTAwKSAvIHRvdGFsX3BhZ2VzOworCXVubWFwcGVkX3JhdGlvID0gMTAwIC0gKChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX01BUFBFRCkgKworCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FOT05fUEFHRVMpKSAqIDEwMCkgLworCQkJCQl0b3RhbF9wYWdlczsKIAogCWRpcnR5X3JhdGlvID0gdm1fZGlydHlfcmF0aW87CiAJaWYgKGRpcnR5X3JhdGlvID4gdW5tYXBwZWRfcmF0aW8gLyAyKQpAQCAtMTg5LDcgKzE3Myw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7Ci0Jc3RydWN0IHdyaXRlYmFja19zdGF0ZSB3YnM7CiAJbG9uZyBucl9yZWNsYWltYWJsZTsKIAlsb25nIGJhY2tncm91bmRfdGhyZXNoOwogCWxvbmcgZGlydHlfdGhyZXNoOwpAQCAtMjA3LDExICsxOTAsMTIgQEAKIAkJCS5yYW5nZV9jeWNsaWMJPSAxLAogCQl9OwogCi0JCWdldF9kaXJ0eV9saW1pdHMoJndicywgJmJhY2tncm91bmRfdGhyZXNoLAotCQkJCQkmZGlydHlfdGhyZXNoLCBtYXBwaW5nKTsKLQkJbnJfcmVjbGFpbWFibGUgPSB3YnMubnJfZGlydHkgKyB3YnMubnJfdW5zdGFibGU7Ci0JCWlmIChucl9yZWNsYWltYWJsZSArIHdicy5ucl93cml0ZWJhY2sgPD0gZGlydHlfdGhyZXNoKQotCQkJYnJlYWs7CisJCWdldF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNoLCAmZGlydHlfdGhyZXNoLCBtYXBwaW5nKTsKKwkJbnJfcmVjbGFpbWFibGUgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSArCisJCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyk7CisJCWlmIChucl9yZWNsYWltYWJsZSArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSykgPD0KKwkJCWRpcnR5X3RocmVzaCkKKwkJCQlicmVhazsKIAogCQlpZiAoIWRpcnR5X2V4Y2VlZGVkKQogCQkJZGlydHlfZXhjZWVkZWQgPSAxOwpAQCAtMjI0LDExICsyMDgsMTQgQEAKIAkJICovCiAJCWlmIChucl9yZWNsYWltYWJsZSkgewogCQkJd3JpdGViYWNrX2lub2Rlcygmd2JjKTsKLQkJCWdldF9kaXJ0eV9saW1pdHMoJndicywgJmJhY2tncm91bmRfdGhyZXNoLAotCQkJCQkmZGlydHlfdGhyZXNoLCBtYXBwaW5nKTsKLQkJCW5yX3JlY2xhaW1hYmxlID0gd2JzLm5yX2RpcnR5ICsgd2JzLm5yX3Vuc3RhYmxlOwotCQkJaWYgKG5yX3JlY2xhaW1hYmxlICsgd2JzLm5yX3dyaXRlYmFjayA8PSBkaXJ0eV90aHJlc2gpCi0JCQkJYnJlYWs7CisJCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwKKwkJCQkJIAkmZGlydHlfdGhyZXNoLCBtYXBwaW5nKTsKKwkJCW5yX3JlY2xhaW1hYmxlID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKworCQkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpOworCQkJaWYgKG5yX3JlY2xhaW1hYmxlICsKKwkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spCisJCQkJCTw9IGRpcnR5X3RocmVzaCkKKwkJCQkJCWJyZWFrOwogCQkJcGFnZXNfd3JpdHRlbiArPSB3cml0ZV9jaHVuayAtIHdiYy5ucl90b193cml0ZTsKIAkJCWlmIChwYWdlc193cml0dGVuID49IHdyaXRlX2NodW5rKQogCQkJCWJyZWFrOwkJLyogV2UndmUgZG9uZSBvdXIgZHV0eSAqLwpAQCAtMjM2LDggKzIyMyw5IEBACiAJCWJsa19jb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKIAl9CiAKLQlpZiAobnJfcmVjbGFpbWFibGUgKyB3YnMubnJfd3JpdGViYWNrIDw9IGRpcnR5X3RocmVzaCAmJiBkaXJ0eV9leGNlZWRlZCkKLQkJZGlydHlfZXhjZWVkZWQgPSAwOworCWlmIChucl9yZWNsYWltYWJsZSArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSykKKwkJPD0gZGlydHlfdGhyZXNoICYmIGRpcnR5X2V4Y2VlZGVkKQorCQkJZGlydHlfZXhjZWVkZWQgPSAwOwogCiAJaWYgKHdyaXRlYmFja19pbl9wcm9ncmVzcyhiZGkpKQogCQlyZXR1cm47CQkvKiBwZGZsdXNoIGlzIGFscmVhZHkgd29ya2luZyB0aGlzIHF1ZXVlICovCkBAIC0yOTksMTIgKzI4NywxMSBAQAogCiB2b2lkIHRocm90dGxlX3ZtX3dyaXRlb3V0KHZvaWQpCiB7Ci0Jc3RydWN0IHdyaXRlYmFja19zdGF0ZSB3YnM7CiAJbG9uZyBiYWNrZ3JvdW5kX3RocmVzaDsKIAlsb25nIGRpcnR5X3RocmVzaDsKIAogICAgICAgICBmb3IgKCA7IDsgKSB7Ci0JCWdldF9kaXJ0eV9saW1pdHMoJndicywgJmJhY2tncm91bmRfdGhyZXNoLCAmZGlydHlfdGhyZXNoLCBOVUxMKTsKKwkJZ2V0X2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gsIE5VTEwpOwogCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBCb29zdCB0aGUgYWxsb3dhYmxlIGRpcnR5IHRocmVzaG9sZCBhIGJpdCBmb3IgcGFnZQpAQCAtMzEyLDggKzI5OSw5IEBACiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgZGlydHlfdGhyZXNoICs9IGRpcnR5X3RocmVzaCAvIDEwOyAgICAgIC8qIHdoZWVlZS4uLiAqLwogCi0gICAgICAgICAgICAgICAgaWYgKHdicy5ucl91bnN0YWJsZSArIHdicy5ucl93cml0ZWJhY2sgPD0gZGlydHlfdGhyZXNoKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgKworCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSA8PSBkaXJ0eV90aHJlc2gpCisgICAgICAgICAgICAgICAgICAgICAgICAJYnJlYWs7CiAgICAgICAgICAgICAgICAgYmxrX2Nvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTApOwogICAgICAgICB9CiB9CkBAIC0zMzYsMTIgKzMyNCwxMiBAQAogCX07CiAKIAlmb3IgKCA7IDsgKSB7Ci0JCXN0cnVjdCB3cml0ZWJhY2tfc3RhdGUgd2JzOwogCQlsb25nIGJhY2tncm91bmRfdGhyZXNoOwogCQlsb25nIGRpcnR5X3RocmVzaDsKIAotCQlnZXRfZGlydHlfbGltaXRzKCZ3YnMsICZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwgTlVMTCk7Ci0JCWlmICh3YnMubnJfZGlydHkgKyB3YnMubnJfdW5zdGFibGUgPCBiYWNrZ3JvdW5kX3RocmVzaAorCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwgTlVMTCk7CisJCWlmIChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSArCisJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpIDwgYmFja2dyb3VuZF90aHJlc2gKIAkJCQkmJiBtaW5fcGFnZXMgPD0gMCkKIAkJCWJyZWFrOwogCQl3YmMuZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDA7CkBAIC0zNjUsMTIgKzM1Myw5IEBACiAgKi8KIGludCB3YWtldXBfcGRmbHVzaChsb25nIG5yX3BhZ2VzKQogewotCWlmIChucl9wYWdlcyA9PSAwKSB7Ci0JCXN0cnVjdCB3cml0ZWJhY2tfc3RhdGUgd2JzOwotCi0JCWdldF93cml0ZWJhY2tfc3RhdGUoJndicyk7Ci0JCW5yX3BhZ2VzID0gd2JzLm5yX2RpcnR5ICsgd2JzLm5yX3Vuc3RhYmxlOwotCX0KKwlpZiAobnJfcGFnZXMgPT0gMCkKKwkJbnJfcGFnZXMgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSArCisJCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKTsKIAlyZXR1cm4gcGRmbHVzaF9vcGVyYXRpb24oYmFja2dyb3VuZF93cml0ZW91dCwgbnJfcGFnZXMpOwogfQogCkBAIC00MDEsNyArMzg2LDYgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZjsKIAl1bnNpZ25lZCBsb25nIG5leHRfamlmOwogCWxvbmcgbnJfdG9fd3JpdGU7Ci0Jc3RydWN0IHdyaXRlYmFja19zdGF0ZSB3YnM7CiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKIAkJLmJkaQkJPSBOVUxMLAogCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLApAQCAtNDE0LDExICszOTgsMTEgQEAKIAogCXN5bmNfc3VwZXJzKCk7CiAKLQlnZXRfd3JpdGViYWNrX3N0YXRlKCZ3YnMpOwogCW9sZGVzdF9qaWYgPSBqaWZmaWVzIC0gZGlydHlfZXhwaXJlX2ludGVydmFsOwogCXN0YXJ0X2ppZiA9IGppZmZpZXM7CiAJbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWw7Ci0JbnJfdG9fd3JpdGUgPSB3YnMubnJfZGlydHkgKyB3YnMubnJfdW5zdGFibGUgKworCW5yX3RvX3dyaXRlID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKworCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSArCiAJCQkoaW5vZGVzX3N0YXQubnJfaW5vZGVzIC0gaW5vZGVzX3N0YXQubnJfdW51c2VkKTsKIAl3aGlsZSAobnJfdG9fd3JpdGUgPiAwKSB7CiAJCXdiYy5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMDsKQEAgLTY0MCw3ICs2MjQsOCBAQAogCQkJaWYgKG1hcHBpbmcyKSB7IC8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8KIAkJCQlCVUdfT04obWFwcGluZzIgIT0gbWFwcGluZyk7CiAJCQkJaWYgKG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykpCi0JCQkJCWluY19wYWdlX3N0YXRlKG5yX2RpcnR5KTsKKwkJCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsCisJCQkJCQkJCU5SX0ZJTEVfRElSVFkpOwogCQkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAogCQkJCQlwYWdlX2luZGV4KHBhZ2UpLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKIAkJCX0KQEAgLTcyNyw5ICs3MTIsOSBAQAogCQkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJm1hcHBpbmctPnBhZ2VfdHJlZSwKIAkJCQkJCXBhZ2VfaW5kZXgocGFnZSksCiAJCQkJCQlQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKLQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZtYXBwaW5nLT50cmVlX2xvY2ssIGZsYWdzKTsKIAkJCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKQotCQkJCWRlY19wYWdlX3N0YXRlKG5yX2RpcnR5KTsKKwkJCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7CisJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmbWFwcGluZy0+dHJlZV9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmbWFwcGluZy0+dHJlZV9sb2NrLCBmbGFncyk7CkBAIC03NjAsNyArNzQ1LDcgQEAKIAlpZiAobWFwcGluZykgewogCQlpZiAoVGVzdENsZWFyUGFnZURpcnR5KHBhZ2UpKSB7CiAJCQlpZiAobWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSkKLQkJCQlkZWNfcGFnZV9zdGF0ZShucl9kaXJ0eSk7CisJCQkJZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDA4NGEyZGUuLjU0YTRmNTMgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqICAgICAgICAgIChsb3RzIG9mIGJpdHMgYm9ycm93ZWQgZnJvbSBJbmdvIE1vbG5hciAmIEFuZHJldyBNb3J0b24pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpAQCAtNDU2LDcgKzQ1NSw3IEBACiAKIAlrZXJuZWxfbWFwX3BhZ2VzKHBhZ2UsIDEgPDwgb3JkZXIsIDApOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX21vZF9wYWdlX3N0YXRlKHBnZnJlZSwgMSA8PCBvcmRlcik7CisJX19jb3VudF92bV9ldmVudHMoUEdGUkVFLCAxIDw8IG9yZGVyKTsKIAlmcmVlX29uZV9wYWdlKHBhZ2Vfem9uZShwYWdlKSwgcGFnZSwgb3JkZXIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTcwOSwyNyArNzA4LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIHZvaWQgem9uZV9zdGF0aXN0aWNzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCB6b25lICp6LCBpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19OVU1BCi0JcGdfZGF0YV90ICpwZyA9IHotPnpvbmVfcGdkYXQ7Ci0JcGdfZGF0YV90ICpvcmlnID0gem9uZWxpc3QtPnpvbmVzWzBdLT56b25lX3BnZGF0OwotCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnA7Ci0KLQlwID0gem9uZV9wY3AoeiwgY3B1KTsKLQlpZiAocGcgPT0gb3JpZykgewotCQlwLT5udW1hX2hpdCsrOwotCX0gZWxzZSB7Ci0JCXAtPm51bWFfbWlzcysrOwotCQl6b25lX3BjcCh6b25lbGlzdC0+em9uZXNbMF0sIGNwdSktPm51bWFfZm9yZWlnbisrOwotCX0KLQlpZiAocGcgPT0gTk9ERV9EQVRBKG51bWFfbm9kZV9pZCgpKSkKLQkJcC0+bG9jYWxfbm9kZSsrOwotCWVsc2UKLQkJcC0+b3RoZXJfbm9kZSsrOwotI2VuZGlmCi19Ci0KIC8qCiAgKiBGcmVlIGEgMC1vcmRlciBwYWdlCiAgKi8KQEAgLTc1MCw3ICs3MjgsNyBAQAogCiAJcGNwID0gJnpvbmVfcGNwKHpvbmUsIGdldF9jcHUoKSktPnBjcFtjb2xkXTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19pbmNfcGFnZV9zdGF0ZShwZ2ZyZWUpOworCV9fY291bnRfdm1fZXZlbnQoUEdGUkVFKTsKIAlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmcGNwLT5saXN0KTsKIAlwY3AtPmNvdW50Kys7CiAJaWYgKHBjcC0+Y291bnQgPj0gcGNwLT5oaWdoKSB7CkBAIC04MjYsOCArODA0LDggQEAKIAkJCWdvdG8gZmFpbGVkOwogCX0KIAotCV9fbW9kX3BhZ2Vfc3RhdGVfem9uZSh6b25lLCBwZ2FsbG9jLCAxIDw8IG9yZGVyKTsKLQl6b25lX3N0YXRpc3RpY3Moem9uZWxpc3QsIHpvbmUsIGNwdSk7CisJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lLCAxIDw8IG9yZGVyKTsKKwl6b25lX3N0YXRpc3RpY3Moem9uZWxpc3QsIHpvbmUpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwdXRfY3B1KCk7CiAKQEAgLTEyMzEsMTQxICsxMjA5LDYgQEAKICNkZWZpbmUgc2hvd19ub2RlKHpvbmUpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0vKgotICogQWNjdW11bGF0ZSB0aGUgcGFnZV9zdGF0ZSBpbmZvcm1hdGlvbiBhY3Jvc3MgYWxsIENQVXMuCi0gKiBUaGUgcmVzdWx0IGlzIHVuYXZvaWRhYmx5IGFwcHJveGltYXRlIC0gaXQgY2FuIGNoYW5nZQotICogZHVyaW5nIGFuZCBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdlX3N0YXRlLCBwYWdlX3N0YXRlcykgPSB7MH07Ci0KLWF0b21pY190IG5yX3BhZ2VjYWNoZSA9IEFUT01JQ19JTklUKDApOwotRVhQT1JUX1NZTUJPTChucl9wYWdlY2FjaGUpOwotI2lmZGVmIENPTkZJR19TTVAKLURFRklORV9QRVJfQ1BVKGxvbmcsIG5yX3BhZ2VjYWNoZV9sb2NhbCkgPSAwOwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9fZ2V0X3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCwgaW50IG5yLCBjcHVtYXNrX3QgKmNwdW1hc2spCi17Ci0JdW5zaWduZWQgY3B1OwotCi0JbWVtc2V0KHJldCwgMCwgbnIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCWNwdXNfYW5kKCpjcHVtYXNrLCAqY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwotCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqY3B1bWFzaykgewotCQl1bnNpZ25lZCBsb25nICppbjsKLQkJdW5zaWduZWQgbG9uZyAqb3V0OwotCQl1bnNpZ25lZCBvZmY7Ci0JCXVuc2lnbmVkIG5leHRfY3B1OwotCi0JCWluID0gKHVuc2lnbmVkIGxvbmcgKikmcGVyX2NwdShwYWdlX3N0YXRlcywgY3B1KTsKLQotCQluZXh0X2NwdSA9IG5leHRfY3B1KGNwdSwgKmNwdW1hc2spOwotCQlpZiAobGlrZWx5KG5leHRfY3B1IDwgTlJfQ1BVUykpCi0JCQlwcmVmZXRjaCgmcGVyX2NwdShwYWdlX3N0YXRlcywgbmV4dF9jcHUpKTsKLQotCQlvdXQgPSAodW5zaWduZWQgbG9uZyAqKXJldDsKLQkJZm9yIChvZmYgPSAwOyBvZmYgPCBucjsgb2ZmKyspCi0JCQkqb3V0KysgKz0gKmluKys7Ci0JfQotfQotCi12b2lkIGdldF9wYWdlX3N0YXRlX25vZGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCwgaW50IG5vZGUpCi17Ci0JaW50IG5yOwotCWNwdW1hc2tfdCBtYXNrID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOwotCi0JbnIgPSBvZmZzZXRvZihzdHJ1Y3QgcGFnZV9zdGF0ZSwgR0VUX1BBR0VfU1RBVEVfTEFTVCk7Ci0JbnIgLz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCi0JX19nZXRfcGFnZV9zdGF0ZShyZXQsIG5yKzEsICZtYXNrKTsKLX0KLQotdm9pZCBnZXRfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcmV0KQotewotCWludCBucjsKLQljcHVtYXNrX3QgbWFzayA9IENQVV9NQVNLX0FMTDsKLQotCW5yID0gb2Zmc2V0b2Yoc3RydWN0IHBhZ2Vfc3RhdGUsIEdFVF9QQUdFX1NUQVRFX0xBU1QpOwotCW5yIC89IHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQotCV9fZ2V0X3BhZ2Vfc3RhdGUocmV0LCBuciArIDEsICZtYXNrKTsKLX0KLQotdm9pZCBnZXRfZnVsbF9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlX3N0YXRlICpyZXQpCi17Ci0JY3B1bWFza190IG1hc2sgPSBDUFVfTUFTS19BTEw7Ci0KLQlfX2dldF9wYWdlX3N0YXRlKHJldCwgc2l6ZW9mKCpyZXQpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCAmbWFzayk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcmVhZF9wYWdlX3N0YXRlX29mZnNldCh1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldCA9IDA7Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW47Ci0KLQkJaW4gPSAodW5zaWduZWQgbG9uZykmcGVyX2NwdShwYWdlX3N0YXRlcywgY3B1KSArIG9mZnNldDsKLQkJcmV0ICs9ICooKHVuc2lnbmVkIGxvbmcgKilpbik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgX19tb2RfcGFnZV9zdGF0ZV9vZmZzZXQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgZGVsdGEpCi17Ci0Jdm9pZCAqcHRyOwotCi0JcHRyID0gJl9fZ2V0X2NwdV92YXIocGFnZV9zdGF0ZXMpOwotCSoodW5zaWduZWQgbG9uZyAqKShwdHIgKyBvZmZzZXQpICs9IGRlbHRhOwotfQotRVhQT1JUX1NZTUJPTChfX21vZF9wYWdlX3N0YXRlX29mZnNldCk7Ci0KLXZvaWQgbW9kX3BhZ2Vfc3RhdGVfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGRlbHRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqcHRyOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXB0ciA9ICZfX2dldF9jcHVfdmFyKHBhZ2Vfc3RhdGVzKTsKLQkqKHVuc2lnbmVkIGxvbmcgKikocHRyICsgb2Zmc2V0KSArPSBkZWx0YTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1vZF9wYWdlX3N0YXRlX29mZnNldCk7Ci0KLXZvaWQgX19nZXRfem9uZV9jb3VudHModW5zaWduZWQgbG9uZyAqYWN0aXZlLCB1bnNpZ25lZCBsb25nICppbmFjdGl2ZSwKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZWUsIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCi17Ci0Jc3RydWN0IHpvbmUgKnpvbmVzID0gcGdkYXQtPm5vZGVfem9uZXM7Ci0JaW50IGk7Ci0KLQkqYWN0aXZlID0gMDsKLQkqaW5hY3RpdmUgPSAwOwotCSpmcmVlID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKLQkJKmFjdGl2ZSArPSB6b25lc1tpXS5ucl9hY3RpdmU7Ci0JCSppbmFjdGl2ZSArPSB6b25lc1tpXS5ucl9pbmFjdGl2ZTsKLQkJKmZyZWUgKz0gem9uZXNbaV0uZnJlZV9wYWdlczsKLQl9Ci19Ci0KLXZvaWQgZ2V0X3pvbmVfY291bnRzKHVuc2lnbmVkIGxvbmcgKmFjdGl2ZSwKLQkJdW5zaWduZWQgbG9uZyAqaW5hY3RpdmUsIHVuc2lnbmVkIGxvbmcgKmZyZWUpCi17Ci0Jc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsKLQotCSphY3RpdmUgPSAwOwotCSppbmFjdGl2ZSA9IDA7Ci0JKmZyZWUgPSAwOwotCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewotCQl1bnNpZ25lZCBsb25nIGwsIG0sIG47Ci0JCV9fZ2V0X3pvbmVfY291bnRzKCZsLCAmbSwgJm4sIHBnZGF0KTsKLQkJKmFjdGl2ZSArPSBsOwotCQkqaW5hY3RpdmUgKz0gbTsKLQkJKmZyZWUgKz0gbjsKLQl9Ci19Ci0KIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqdmFsKQogewogCXZhbC0+dG90YWxyYW0gPSB0b3RhbHJhbV9wYWdlczsKQEAgLTE0MDYsNyArMTI0OSw2IEBACiAgKi8KIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpCiB7Ci0Jc3RydWN0IHBhZ2Vfc3RhdGUgcHM7CiAJaW50IGNwdSwgdGVtcGVyYXR1cmU7CiAJdW5zaWduZWQgbG9uZyBhY3RpdmU7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZTsKQEAgLTE0MzgsNyArMTI4MCw2IEBACiAJCX0KIAl9CiAKLQlnZXRfcGFnZV9zdGF0ZSgmcHMpOwogCWdldF96b25lX2NvdW50cygmYWN0aXZlLCAmaW5hY3RpdmUsICZmcmVlKTsKIAogCXByaW50aygiRnJlZSBwYWdlczogJTExdWtCICgldWtCIEhpZ2hNZW0pXG4iLApAQCAtMTQ0OSwxMyArMTI5MCwxMyBAQAogCQkidW5zdGFibGU6JWx1IGZyZWU6JXUgc2xhYjolbHUgbWFwcGVkOiVsdSBwYWdldGFibGVzOiVsdVxuIiwKIAkJYWN0aXZlLAogCQlpbmFjdGl2ZSwKLQkJcHMubnJfZGlydHksCi0JCXBzLm5yX3dyaXRlYmFjaywKLQkJcHMubnJfdW5zdGFibGUsCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpLAogCQlucl9mcmVlX3BhZ2VzKCksCi0JCXBzLm5yX3NsYWIsCi0JCXBzLm5yX21hcHBlZCwKLQkJcHMubnJfcGFnZV90YWJsZV9wYWdlcyk7CisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUIpLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX01BUFBFRCksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1BBR0VUQUJMRSkpOwogCiAJZm9yX2VhY2hfem9uZSh6b25lKSB7CiAJCWludCBpOwpAQCAtMjE2NCw2ICsyMDA1LDEwIEBACiAKIAkJem9uZS0+c3Bhbm5lZF9wYWdlcyA9IHNpemU7CiAJCXpvbmUtPnByZXNlbnRfcGFnZXMgPSByZWFsc2l6ZTsKKyNpZmRlZiBDT05GSUdfTlVNQQorCQl6b25lLT5taW5fdW5tYXBwZWRfcmF0aW8gPSAocmVhbHNpemUqc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbykKKwkJCQkJCS8gMTAwOworI2VuZGlmCiAJCXpvbmUtPm5hbWUgPSB6b25lX25hbWVzW2pdOwogCQlzcGluX2xvY2tfaW5pdCgmem9uZS0+bG9jayk7CiAJCXNwaW5fbG9ja19pbml0KCZ6b25lLT5scnVfbG9jayk7CkBAIC0yMTgwLDYgKzIwMjUsNyBAQAogCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKIAkJem9uZS0+bnJfYWN0aXZlID0gMDsKIAkJem9uZS0+bnJfaW5hY3RpdmUgPSAwOworCQl6YXBfem9uZV92bV9zdGF0cyh6b25lKTsKIAkJYXRvbWljX3NldCgmem9uZS0+cmVjbGFpbV9pbl9wcm9ncmVzcywgMCk7CiAJCWlmICghc2l6ZSkKIAkJCWNvbnRpbnVlOwpAQCAtMjI1MywzMDcgKzIwOTksMTggQEAKIAkJCV9fcGEoUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQsIE5VTEwpOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0KLXN0YXRpYyB2b2lkICpmcmFnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCi17Ci0JcGdfZGF0YV90ICpwZ2RhdDsKLQlsb2ZmX3Qgbm9kZSA9ICpwb3M7Ci0JZm9yIChwZ2RhdCA9IGZpcnN0X29ubGluZV9wZ2RhdCgpOwotCSAgICAgcGdkYXQgJiYgbm9kZTsKLQkgICAgIHBnZGF0ID0gbmV4dF9vbmxpbmVfcGdkYXQocGdkYXQpKQotCQktLW5vZGU7Ci0KLQlyZXR1cm4gcGdkYXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICpmcmFnX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcsIGxvZmZfdCAqcG9zKQotewotCXBnX2RhdGFfdCAqcGdkYXQgPSAocGdfZGF0YV90ICopYXJnOwotCi0JKCpwb3MpKys7Ci0JcmV0dXJuIG5leHRfb25saW5lX3BnZGF0KHBnZGF0KTsKLX0KLQotc3RhdGljIHZvaWQgZnJhZ19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQotewotfQotCi0vKiAKLSAqIFRoaXMgd2Fsa3MgdGhlIGZyZWUgYXJlYXMgZm9yIGVhY2ggem9uZS4KLSAqLwotc3RhdGljIGludCBmcmFnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpCi17Ci0JcGdfZGF0YV90ICpwZ2RhdCA9IChwZ19kYXRhX3QgKilhcmc7Ci0Jc3RydWN0IHpvbmUgKnpvbmU7Ci0Jc3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdC0+bm9kZV96b25lczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBvcmRlcjsKLQotCWZvciAoem9uZSA9IG5vZGVfem9uZXM7IHpvbmUgLSBub2RlX3pvbmVzIDwgTUFYX05SX1pPTkVTOyArK3pvbmUpIHsKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2NrLCBmbGFncyk7Ci0JCXNlcV9wcmludGYobSwgIk5vZGUgJWQsIHpvbmUgJThzICIsIHBnZGF0LT5ub2RlX2lkLCB6b25lLT5uYW1lKTsKLQkJZm9yIChvcmRlciA9IDA7IG9yZGVyIDwgTUFYX09SREVSOyArK29yZGVyKQotCQkJc2VxX3ByaW50ZihtLCAiJTZsdSAiLCB6b25lLT5mcmVlX2FyZWFbb3JkZXJdLm5yX2ZyZWUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7Ci0JCXNlcV9wdXRjKG0sICdcbicpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHNlcV9vcGVyYXRpb25zIGZyYWdtZW50YXRpb25fb3AgPSB7Ci0JLnN0YXJ0CT0gZnJhZ19zdGFydCwKLQkubmV4dAk9IGZyYWdfbmV4dCwKLQkuc3RvcAk9IGZyYWdfc3RvcCwKLQkuc2hvdwk9IGZyYWdfc2hvdywKLX07Ci0KLS8qCi0gKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgem9uZXMgaW4gQHBnZGF0LgotICovCi1zdGF0aWMgaW50IHpvbmVpbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpCi17Ci0JcGdfZGF0YV90ICpwZ2RhdCA9IGFyZzsKLQlzdHJ1Y3Qgem9uZSAqem9uZTsKLQlzdHJ1Y3Qgem9uZSAqbm9kZV96b25lcyA9IHBnZGF0LT5ub2RlX3pvbmVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmb3IgKHpvbmUgPSBub2RlX3pvbmVzOyB6b25lIC0gbm9kZV96b25lcyA8IE1BWF9OUl9aT05FUzsgem9uZSsrKSB7Ci0JCWludCBpOwotCi0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOwotCQlzZXFfcHJpbnRmKG0sICJOb2RlICVkLCB6b25lICU4cyIsIHBnZGF0LT5ub2RlX2lkLCB6b25lLT5uYW1lKTsKLQkJc2VxX3ByaW50ZihtLAotCQkJICAgIlxuICBwYWdlcyBmcmVlICAgICAlbHUiCi0JCQkgICAiXG4gICAgICAgIG1pbiAgICAgICVsdSIKLQkJCSAgICJcbiAgICAgICAgbG93ICAgICAgJWx1IgotCQkJICAgIlxuICAgICAgICBoaWdoICAgICAlbHUiCi0JCQkgICAiXG4gICAgICAgIGFjdGl2ZSAgICVsdSIKLQkJCSAgICJcbiAgICAgICAgaW5hY3RpdmUgJWx1IgotCQkJICAgIlxuICAgICAgICBzY2FubmVkICAlbHUgKGE6ICVsdSBpOiAlbHUpIgotCQkJICAgIlxuICAgICAgICBzcGFubmVkICAlbHUiCi0JCQkgICAiXG4gICAgICAgIHByZXNlbnQgICVsdSIsCi0JCQkgICB6b25lLT5mcmVlX3BhZ2VzLAotCQkJICAgem9uZS0+cGFnZXNfbWluLAotCQkJICAgem9uZS0+cGFnZXNfbG93LAotCQkJICAgem9uZS0+cGFnZXNfaGlnaCwKLQkJCSAgIHpvbmUtPm5yX2FjdGl2ZSwKLQkJCSAgIHpvbmUtPm5yX2luYWN0aXZlLAotCQkJICAgem9uZS0+cGFnZXNfc2Nhbm5lZCwKLQkJCSAgIHpvbmUtPm5yX3NjYW5fYWN0aXZlLCB6b25lLT5ucl9zY2FuX2luYWN0aXZlLAotCQkJICAgem9uZS0+c3Bhbm5lZF9wYWdlcywKLQkJCSAgIHpvbmUtPnByZXNlbnRfcGFnZXMpOwotCQlzZXFfcHJpbnRmKG0sCi0JCQkgICAiXG4gICAgICAgIHByb3RlY3Rpb246ICglbHUiLAotCQkJICAgem9uZS0+bG93bWVtX3Jlc2VydmVbMF0pOwotCQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh6b25lLT5sb3dtZW1fcmVzZXJ2ZSk7IGkrKykKLQkJCXNlcV9wcmludGYobSwgIiwgJWx1Iiwgem9uZS0+bG93bWVtX3Jlc2VydmVbaV0pOwotCQlzZXFfcHJpbnRmKG0sCi0JCQkgICAiKSIKLQkJCSAgICJcbiAgcGFnZXNldHMiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwYWdlc2V0OwotCQkJaW50IGo7Ci0KLQkJCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBpKTsKLQkJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHBhZ2VzZXQtPnBjcCk7IGorKykgewotCQkJCWlmIChwYWdlc2V0LT5wY3Bbal0uY291bnQpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGogPT0gQVJSQVlfU0laRShwYWdlc2V0LT5wY3ApKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocGFnZXNldC0+cGNwKTsgaisrKSB7Ci0JCQkJc2VxX3ByaW50ZihtLAotCQkJCQkgICAiXG4gICAgY3B1OiAlaSBwY3A6ICVpIgotCQkJCQkgICAiXG4gICAgICAgICAgICAgIGNvdW50OiAlaSIKLQkJCQkJICAgIlxuICAgICAgICAgICAgICBoaWdoOiAgJWkiCi0JCQkJCSAgICJcbiAgICAgICAgICAgICAgYmF0Y2g6ICVpIiwKLQkJCQkJICAgaSwgaiwKLQkJCQkJICAgcGFnZXNldC0+cGNwW2pdLmNvdW50LAotCQkJCQkgICBwYWdlc2V0LT5wY3Bbal0uaGlnaCwKLQkJCQkJICAgcGFnZXNldC0+cGNwW2pdLmJhdGNoKTsKLQkJCX0KLSNpZmRlZiBDT05GSUdfTlVNQQotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJcbiAgICAgICAgICAgIG51bWFfaGl0OiAgICAgICAlbHUiCi0JCQkJICAgIlxuICAgICAgICAgICAgbnVtYV9taXNzOiAgICAgICVsdSIKLQkJCQkgICAiXG4gICAgICAgICAgICBudW1hX2ZvcmVpZ246ICAgJWx1IgotCQkJCSAgICJcbiAgICAgICAgICAgIGludGVybGVhdmVfaGl0OiAlbHUiCi0JCQkJICAgIlxuICAgICAgICAgICAgbG9jYWxfbm9kZTogICAgICVsdSIKLQkJCQkgICAiXG4gICAgICAgICAgICBvdGhlcl9ub2RlOiAgICAgJWx1IiwKLQkJCQkgICBwYWdlc2V0LT5udW1hX2hpdCwKLQkJCQkgICBwYWdlc2V0LT5udW1hX21pc3MsCi0JCQkJICAgcGFnZXNldC0+bnVtYV9mb3JlaWduLAotCQkJCSAgIHBhZ2VzZXQtPmludGVybGVhdmVfaGl0LAotCQkJCSAgIHBhZ2VzZXQtPmxvY2FsX25vZGUsCi0JCQkJICAgcGFnZXNldC0+b3RoZXJfbm9kZSk7Ci0jZW5kaWYKLQkJfQotCQlzZXFfcHJpbnRmKG0sCi0JCQkgICAiXG4gIGFsbF91bnJlY2xhaW1hYmxlOiAldSIKLQkJCSAgICJcbiAgcHJldl9wcmlvcml0eTogICAgICVpIgotCQkJICAgIlxuICB0ZW1wX3ByaW9yaXR5OiAgICAgJWkiCi0JCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiLAotCQkJICAgem9uZS0+YWxsX3VucmVjbGFpbWFibGUsCi0JCQkgICB6b25lLT5wcmV2X3ByaW9yaXR5LAotCQkJICAgem9uZS0+dGVtcF9wcmlvcml0eSwKLQkJCSAgIHpvbmUtPnpvbmVfc3RhcnRfcGZuKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOwotCQlzZXFfcHV0YyhtLCAnXG4nKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBzZXFfb3BlcmF0aW9ucyB6b25laW5mb19vcCA9IHsKLQkuc3RhcnQJPSBmcmFnX3N0YXJ0LCAvKiBpdGVyYXRlIG92ZXIgYWxsIHpvbmVzLiBUaGUgc2FtZSBhcyBpbgotCQkJICAgICAgICogZnJhZ21lbnRhdGlvbi4gKi8KLQkubmV4dAk9IGZyYWdfbmV4dCwKLQkuc3RvcAk9IGZyYWdfc3RvcCwKLQkuc2hvdwk9IHpvbmVpbmZvX3Nob3csCi19OwotCi1zdGF0aWMgY2hhciAqdm1zdGF0X3RleHRbXSA9IHsKLQkibnJfZGlydHkiLAotCSJucl93cml0ZWJhY2siLAotCSJucl91bnN0YWJsZSIsCi0JIm5yX3BhZ2VfdGFibGVfcGFnZXMiLAotCSJucl9tYXBwZWQiLAotCSJucl9zbGFiIiwKLQotCSJwZ3BnaW4iLAotCSJwZ3Bnb3V0IiwKLQkicHN3cGluIiwKLQkicHN3cG91dCIsCi0KLQkicGdhbGxvY19oaWdoIiwKLQkicGdhbGxvY19ub3JtYWwiLAotCSJwZ2FsbG9jX2RtYTMyIiwKLQkicGdhbGxvY19kbWEiLAotCi0JInBnZnJlZSIsCi0JInBnYWN0aXZhdGUiLAotCSJwZ2RlYWN0aXZhdGUiLAotCi0JInBnZmF1bHQiLAotCSJwZ21hamZhdWx0IiwKLQotCSJwZ3JlZmlsbF9oaWdoIiwKLQkicGdyZWZpbGxfbm9ybWFsIiwKLQkicGdyZWZpbGxfZG1hMzIiLAotCSJwZ3JlZmlsbF9kbWEiLAotCi0JInBnc3RlYWxfaGlnaCIsCi0JInBnc3RlYWxfbm9ybWFsIiwKLQkicGdzdGVhbF9kbWEzMiIsCi0JInBnc3RlYWxfZG1hIiwKLQotCSJwZ3NjYW5fa3N3YXBkX2hpZ2giLAotCSJwZ3NjYW5fa3N3YXBkX25vcm1hbCIsCi0JInBnc2Nhbl9rc3dhcGRfZG1hMzIiLAotCSJwZ3NjYW5fa3N3YXBkX2RtYSIsCi0KLQkicGdzY2FuX2RpcmVjdF9oaWdoIiwKLQkicGdzY2FuX2RpcmVjdF9ub3JtYWwiLAotCSJwZ3NjYW5fZGlyZWN0X2RtYTMyIiwKLQkicGdzY2FuX2RpcmVjdF9kbWEiLAotCi0JInBnaW5vZGVzdGVhbCIsCi0JInNsYWJzX3NjYW5uZWQiLAotCSJrc3dhcGRfc3RlYWwiLAotCSJrc3dhcGRfaW5vZGVzdGVhbCIsCi0JInBhZ2VvdXRydW4iLAotCSJhbGxvY3N0YWxsIiwKLQotCSJwZ3JvdGF0ZWQiLAotCSJucl9ib3VuY2UiLAotfTsKLQotc3RhdGljIHZvaWQgKnZtc3RhdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBwYWdlX3N0YXRlICpwczsKLQotCWlmICgqcG9zID49IEFSUkFZX1NJWkUodm1zdGF0X3RleHQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXBzID0ga21hbGxvYyhzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7Ci0JbS0+cHJpdmF0ZSA9IHBzOwotCWlmICghcHMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCWdldF9mdWxsX3BhZ2Vfc3RhdGUocHMpOwotCXBzLT5wZ3BnaW4gLz0gMjsJCS8qIHNlY3RvcnMgLT4ga2J5dGVzICovCi0JcHMtPnBncGdvdXQgLz0gMjsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKilwcyArICpwb3M7Ci19Ci0KLXN0YXRpYyB2b2lkICp2bXN0YXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZywgbG9mZl90ICpwb3MpCi17Ci0JKCpwb3MpKys7Ci0JaWYgKCpwb3MgPj0gQVJSQVlfU0laRSh2bXN0YXRfdGV4dCkpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiAodW5zaWduZWQgbG9uZyAqKW0tPnByaXZhdGUgKyAqcG9zOwotfQotCi1zdGF0aWMgaW50IHZtc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcgKmwgPSBhcmc7Ci0JdW5zaWduZWQgbG9uZyBvZmYgPSBsIC0gKHVuc2lnbmVkIGxvbmcgKiltLT5wcml2YXRlOwotCi0Jc2VxX3ByaW50ZihtLCAiJXMgJWx1XG4iLCB2bXN0YXRfdGV4dFtvZmZdLCAqbCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZtc3RhdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQotewotCWtmcmVlKG0tPnByaXZhdGUpOwotCW0tPnByaXZhdGUgPSBOVUxMOwotfQotCi1zdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdm1zdGF0X29wID0gewotCS5zdGFydAk9IHZtc3RhdF9zdGFydCwKLQkubmV4dAk9IHZtc3RhdF9uZXh0LAotCS5zdG9wCT0gdm1zdGF0X3N0b3AsCi0JLnNob3cJPSB2bXN0YXRfc2hvdywKLX07Ci0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgaW50IHBhZ2VfYWxsb2NfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCWludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwotCWxvbmcgKmNvdW50OwotCXVuc2lnbmVkIGxvbmcgKnNyYywgKmRlc3Q7CiAKIAlpZiAoYWN0aW9uID09IENQVV9ERUFEKSB7Ci0JCWludCBpOwotCi0JCS8qIERyYWluIGxvY2FsIHBhZ2VjYWNoZSBjb3VudC4gKi8KLQkJY291bnQgPSAmcGVyX2NwdShucl9wYWdlY2FjaGVfbG9jYWwsIGNwdSk7Ci0JCWF0b21pY19hZGQoKmNvdW50LCAmbnJfcGFnZWNhY2hlKTsKLQkJKmNvdW50ID0gMDsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJX19kcmFpbl9wYWdlcyhjcHUpOwotCi0JCS8qIEFkZCBkZWFkIGNwdSdzIHBhZ2Vfc3RhdGVzIHRvIG91ciBvd24uICovCi0JCWRlc3QgPSAodW5zaWduZWQgbG9uZyAqKSZfX2dldF9jcHVfdmFyKHBhZ2Vfc3RhdGVzKTsKLQkJc3JjID0gKHVuc2lnbmVkIGxvbmcgKikmcGVyX2NwdShwYWdlX3N0YXRlcywgY3B1KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBwYWdlX3N0YXRlKS9zaXplb2YodW5zaWduZWQgbG9uZyk7Ci0JCQkJaSsrKSB7Ci0JCQlkZXN0W2ldICs9IHNyY1tpXTsKLQkJCXNyY1tpXSA9IDA7Ci0JCX0KLQorCQl2bV9ldmVudHNfZm9sZF9jcHUoY3B1KTsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlyZWZyZXNoX2NwdV92bV9zdGF0cyhjcHUpOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQpAQCAtMjc0NSw2ICsyMzAyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQoraW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW9fc3lzY3RsX2hhbmRsZXIoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCXN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB6b25lICp6b25lOworCWludCByYzsKKworCXJjID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlmb3JfZWFjaF96b25lKHpvbmUpCisJCXpvbmUtPm1pbl91bm1hcHBlZF9yYXRpbyA9ICh6b25lLT5wcmVzZW50X3BhZ2VzICoKKwkJCQlzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvKSAvIDEwMDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKgogICogbG93bWVtX3Jlc2VydmVfcmF0aW9fc3lzY3RsX2hhbmRsZXIgLSBqdXN0IGEgd3JhcHBlciBhcm91bmQKICAqCXByb2NfZG9pbnR2ZWMoKSBzbyB0aGF0IHdlIGNhbiBjYWxsIHNldHVwX3Blcl96b25lX2xvd21lbV9yZXNlcnZlKCkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uYwppbmRleCBiYjJiMGQ1Li44ODAyOTk0IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lvLmMKKysrIGIvbW0vcGFnZV9pby5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAl9CiAJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQogCQlydyB8PSAoMSA8PCBCSU9fUldfU1lOQyk7Ci0JaW5jX3BhZ2Vfc3RhdGUocHN3cG91dCk7CisJY291bnRfdm1fZXZlbnQoUFNXUE9VVCk7CiAJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXN1Ym1pdF9iaW8ocncsIGJpbyk7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCWluY19wYWdlX3N0YXRlKHBzd3Bpbik7CisJY291bnRfdm1fZXZlbnQoUFNXUElOKTsKIAlzdWJtaXRfYmlvKFJFQUQsIGJpbyk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBlNzY5MDllLi40MDE1OGI1IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC00NTUsNyArNDU1LDcgQEAKIAkgKiBucl9tYXBwZWQgc3RhdGUgY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCB0dXJuaW5nIG9mZgogCSAqIGludGVycnVwdHMgYmVjYXVzZSBpdCBpcyBub3QgbW9kaWZpZWQgdmlhIGludGVycnVwdC4KIAkgKi8KLQlfX2luY19wYWdlX3N0YXRlKG5yX21hcHBlZCk7CisJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0FOT05fUEFHRVMpOwogfQogCiAvKioKQEAgLTQ5OSw3ICs0OTksNyBAQAogdm9pZCBwYWdlX2FkZF9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaWYgKGF0b21pY19pbmNfYW5kX3Rlc3QoJnBhZ2UtPl9tYXBjb3VudCkpCi0JCV9faW5jX3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKKwkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfTUFQUEVEKTsKIH0KIAogLyoqCkBAIC01MzEsNyArNTMxLDggQEAKIAkJICovCiAJCWlmIChwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHBhZ2UpKQogCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCV9fZGVjX3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKKwkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsCisJCQkJUGFnZUFub24ocGFnZSkgPyBOUl9BTk9OX1BBR0VTIDogTlJfRklMRV9NQVBQRUQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggMzhiYzMzMy4uZGIyMWM1MSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yMywxMCArMjMsOCBAQAogICogd2hpY2ggbWFrZXMgaXQgYSBjb21wbGV0ZWx5IHVzYWJsZSBmaWxlc3lzdGVtLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KQEAgLTE3NCw3ICsxNzIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzOwotc3RhdGljIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHM7CiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTEwNDYsMTIgKzEwNDQsMTIgQEAKIAkJc3dhcHBhZ2UgPSBsb29rdXBfc3dhcF9jYWNoZShzd2FwKTsKIAkJaWYgKCFzd2FwcGFnZSkgewogCQkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKLQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAkJCS8qIGhlcmUgd2UgYWN0dWFsbHkgZG8gdGhlIGlvICovCiAJCQlpZiAodHlwZSAmJiAqdHlwZSA9PSBWTV9GQVVMVF9NSU5PUikgewotCQkJCWluY19wYWdlX3N0YXRlKHBnbWFqZmF1bHQpOworCQkJCV9fY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJCQkJKnR5cGUgPSBWTV9GQVVMVF9NQUpPUjsKIAkJCX0KKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAkJCXN3YXBwYWdlID0gc2htZW1fc3dhcGluKGluZm8sIHN3YXAsIGlkeCk7CiAJCQlpZiAoIXN3YXBwYWdlKSB7CiAJCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTIxNjIsNyArMjE2MCw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gInNobWVtX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0gewogCS53cml0ZXBhZ2UJPSBzaG1lbV93cml0ZXBhZ2UsCiAJLnNldF9wYWdlX2RpcnR5CT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCiAjaWZkZWYgQ09ORklHX1RNUEZTCkBAIC0yMjUyLDkgKzIyNTAsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZWdpc3RlciB0bXBmc1xuIik7CiAJCWdvdG8gb3V0MjsKIAl9Ci0jaWZkZWYgQ09ORklHX1RNUEZTCi0JZGV2ZnNfbWtfZGlyKCJzaG0iKTsKLSNlbmRpZgorCiAJc2htX21udCA9IHZmc19rZXJuX21vdW50KCZ0bXBmc19mc190eXBlLCBNU19OT1VTRVIsCiAJCQkJdG1wZnNfZnNfdHlwZS5uYW1lLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHNobV9tbnQpKSB7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggMjMzZTM5ZDE0Li44NWMyZTAzIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zMDksNiArMzA5LDEzIEBACiAjZGVmaW5lCVNJWkVfQUMgMQogI2RlZmluZQlTSVpFX0wzICgxICsgTUFYX05VTU5PREVTKQogCitzdGF0aWMgaW50IGRyYWluX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwKKwkJCXN0cnVjdCBrbWVtX2xpc3QzICpsMywgaW50IHRvZnJlZSk7CitzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKipvYmpwcCwgaW50IGxlbiwKKwkJCWludCBub2RlKTsKK3N0YXRpYyB2b2lkIGVuYWJsZV9jcHVjYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKTsKK3N0YXRpYyB2b2lkIGNhY2hlX3JlYXAodm9pZCAqdW51c2VkKTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjb21wbGV0ZWx5IG9wdGltaXplZCBhd2F5IGlmIGEgY29uc3RhbnQgaXMgcGFzc2VkIHRvCiAgKiBpdC4gIE1vc3RseSB0aGUgc2FtZSBhcyB3aGF0IGlzIGluIGxpbnV4L3NsYWIuaCBleGNlcHQgaXQgcmV0dXJucyBhbiBpbmRleC4KQEAgLTQ1Niw3ICs0NjMsNyBAQAogI2RlZmluZQlTVEFUU19ERUNfQUNUSVZFKHgpCSgoeCktPm51bV9hY3RpdmUtLSkKICNkZWZpbmUJU1RBVFNfSU5DX0FMTE9DRUQoeCkJKCh4KS0+bnVtX2FsbG9jYXRpb25zKyspCiAjZGVmaW5lCVNUQVRTX0lOQ19HUk9XTih4KQkoKHgpLT5ncm93bisrKQotI2RlZmluZQlTVEFUU19JTkNfUkVBUEVEKHgpCSgoeCktPnJlYXBlZCsrKQorI2RlZmluZQlTVEFUU19BRERfUkVBUEVEKHgseSkJKCh4KS0+cmVhcGVkICs9ICh5KSkKICNkZWZpbmUJU1RBVFNfU0VUX0hJR0goeCkJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKHgpLT5udW1fYWN0aXZlID4gKHgpLT5oaWdoX21hcmspCQkJXApAQCAtNDgwLDcgKzQ4Nyw3IEBACiAjZGVmaW5lCVNUQVRTX0RFQ19BQ1RJVkUoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19JTkNfQUxMT0NFRCh4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX0lOQ19HUk9XTih4KQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lCVNUQVRTX0lOQ19SRUFQRUQoeCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZQlTVEFUU19BRERfUkVBUEVEKHgseSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19TRVRfSElHSCh4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX0lOQ19FUlIoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19JTkNfTk9ERUFMTE9DUyh4KQlkbyB7IH0gd2hpbGUgKDApCkBAIC03MDAsMTIgKzcwNyw2IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgd29ya19zdHJ1Y3QsIHJlYXBfd29yayk7CiAKLXN0YXRpYyB2b2lkIGZyZWVfYmxvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqKm9ianBwLCBpbnQgbGVuLAotCQkJaW50IG5vZGUpOwotc3RhdGljIHZvaWQgZW5hYmxlX2NwdWNhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApOwotc3RhdGljIHZvaWQgY2FjaGVfcmVhcCh2b2lkICp1bnVzZWQpOwotc3RhdGljIGludCBfX25vZGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBub2RlKTsKLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXJyYXlfY2FjaGUgKmNwdV9jYWNoZV9nZXQoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkKIHsKIAlyZXR1cm4gY2FjaGVwLT5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldOwpAQCAtMTAyMCw3ICsxMDIxLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2ZyZWVfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCkKK3N0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2ZyZWVfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCwKKwkJCQkgICBpbnQgbmVzdGluZykKIHsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYnAgPSB2aXJ0X3RvX3NsYWIob2JqcCk7CiAJaW50IG5vZGVpZCA9IHNsYWJwLT5ub2RlaWQ7CkBAIC0xMDM4LDcgKzEwNDAsNyBAQAogCVNUQVRTX0lOQ19OT0RFRlJFRVMoY2FjaGVwKTsKIAlpZiAobDMtPmFsaWVuICYmIGwzLT5hbGllbltub2RlaWRdKSB7CiAJCWFsaWVuID0gbDMtPmFsaWVuW25vZGVpZF07Ci0JCXNwaW5fbG9jaygmYWxpZW4tPmxvY2spOworCQlzcGluX2xvY2tfbmVzdGVkKCZhbGllbi0+bG9jaywgbmVzdGluZyk7CiAJCWlmICh1bmxpa2VseShhbGllbi0+YXZhaWwgPT0gYWxpZW4tPmxpbWl0KSkgewogCQkJU1RBVFNfSU5DX0FDT1ZFUkZMT1coY2FjaGVwKTsKIAkJCV9fZHJhaW5fYWxpZW5fY2FjaGUoY2FjaGVwLCBhbGllbiwgbm9kZWlkKTsKQEAgLTEwNjcsNyArMTA2OSw4IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2ZyZWVfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCkKK3N0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2ZyZWVfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCwKKwkJCQkgICBpbnQgbmVzdGluZykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNDEsMTAgKzEyNDQsNyBAQAogCQkJbDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXTsKIAkJCWlmICghbDMpCiAJCQkJY29udGludWU7Ci0JCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQkJCS8qIGZyZWUgc2xhYnMgYmVsb25naW5nIHRvIHRoaXMgbm9kZSAqLwotCQkJX19ub2RlX3NocmluayhjYWNoZXAsIG5vZGUpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKwkJCWRyYWluX2ZyZWVsaXN0KGNhY2hlcCwgbDMsIGwzLT5mcmVlX29iamVjdHMpOwogCQl9CiAJCW11dGV4X3VubG9jaygmY2FjaGVfY2hhaW5fbXV0ZXgpOwogCQlicmVhazsKQEAgLTEyNzQsNiArMTI3NCwxMSBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAltZW1jcHkocHRyLCBsaXN0LCBzaXplb2Yoc3RydWN0IGttZW1fbGlzdDMpKTsKKwkvKgorCSAqIERvIG5vdCBhc3N1bWUgdGhhdCBzcGlubG9ja3MgY2FuIGJlIGluaXRpYWxpemVkIHZpYSBtZW1jcHk6CisJICovCisJc3Bpbl9sb2NrX2luaXQoJnB0ci0+bGlzdF9sb2NrKTsKKwogCU1BS0VfQUxMX0xJU1RTKGNhY2hlcCwgcHRyLCBub2RlaWQpOwogCWNhY2hlcC0+bm9kZWxpc3RzW25vZGVpZF0gPSBwdHI7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMTQwMCw3ICsxNDA1LDcgQEAKIAl9CiAJLyogNCkgUmVwbGFjZSB0aGUgYm9vdHN0cmFwIGhlYWQgYXJyYXlzICovCiAJewotCQl2b2lkICpwdHI7CisJCXN0cnVjdCBhcnJheV9jYWNoZSAqcHRyOwogCiAJCXB0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcnJheWNhY2hlX2luaXQpLCBHRlBfS0VSTkVMKTsKIApAQCAtMTQwOCw2ICsxNDEzLDExIEBACiAJCUJVR19PTihjcHVfY2FjaGVfZ2V0KCZjYWNoZV9jYWNoZSkgIT0gJmluaXRhcnJheV9jYWNoZS5jYWNoZSk7CiAJCW1lbWNweShwdHIsIGNwdV9jYWNoZV9nZXQoJmNhY2hlX2NhY2hlKSwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgYXJyYXljYWNoZV9pbml0KSk7CisJCS8qCisJCSAqIERvIG5vdCBhc3N1bWUgdGhhdCBzcGlubG9ja3MgY2FuIGJlIGluaXRpYWxpemVkIHZpYSBtZW1jcHk6CisJCSAqLworCQlzcGluX2xvY2tfaW5pdCgmcHRyLT5sb2NrKTsKKwogCQljYWNoZV9jYWNoZS5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldID0gcHRyOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTE0MTgsNiArMTQyOCwxMSBAQAogCQkgICAgICAgIT0gJmluaXRhcnJheV9nZW5lcmljLmNhY2hlKTsKIAkJbWVtY3B5KHB0ciwgY3B1X2NhY2hlX2dldChtYWxsb2Nfc2l6ZXNbSU5ERVhfQUNdLmNzX2NhY2hlcCksCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGFycmF5Y2FjaGVfaW5pdCkpOworCQkvKgorCQkgKiBEbyBub3QgYXNzdW1lIHRoYXQgc3BpbmxvY2tzIGNhbiBiZSBpbml0aWFsaXplZCB2aWEgbWVtY3B5OgorCQkgKi8KKwkJc3Bpbl9sb2NrX2luaXQoJnB0ci0+bG9jayk7CisKIAkJbWFsbG9jX3NpemVzW0lOREVYX0FDXS5jc19jYWNoZXAtPmFycmF5W3NtcF9wcm9jZXNzb3JfaWQoKV0gPQogCQkgICAgcHRyOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0xNTA3LDcgKzE1MjIsNyBAQAogCW5yX3BhZ2VzID0gKDEgPDwgY2FjaGVwLT5nZnBvcmRlcik7CiAJaWYgKGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX1JFQ0xBSU1fQUNDT1VOVCkKIAkJYXRvbWljX2FkZChucl9wYWdlcywgJnNsYWJfcmVjbGFpbV9wYWdlcyk7Ci0JYWRkX3BhZ2Vfc3RhdGUobnJfc2xhYiwgbnJfcGFnZXMpOworCWFkZF96b25lX3BhZ2Vfc3RhdGUocGFnZV96b25lKHBhZ2UpLCBOUl9TTEFCLCBucl9wYWdlcyk7CiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspCiAJCV9fU2V0UGFnZVNsYWIocGFnZSArIGkpOwogCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC0xNTIyLDEyICsxNTM3LDEyIEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBucl9mcmVlZCA9IGk7CiAKKwlzdWJfem9uZV9wYWdlX3N0YXRlKHBhZ2Vfem9uZShwYWdlKSwgTlJfU0xBQiwgbnJfZnJlZWQpOwogCXdoaWxlIChpLS0pIHsKIAkJQlVHX09OKCFQYWdlU2xhYihwYWdlKSk7CiAJCV9fQ2xlYXJQYWdlU2xhYihwYWdlKTsKIAkJcGFnZSsrOwogCX0KLQlzdWJfcGFnZV9zdGF0ZShucl9zbGFiLCBucl9mcmVlZCk7CiAJaWYgKGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUpCiAJCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPnJlY2xhaW1lZF9zbGFiICs9IG5yX2ZyZWVkOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYWRkciwgY2FjaGVwLT5nZnBvcmRlcik7CkBAIC0xNzQ1LDYgKzE3NjAsOCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIF9fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLCBpbnQgbmVzdGluZyk7CisKIC8qKgogICogc2xhYl9kZXN0cm95IC0gZGVzdHJveSBhbmQgcmVsZWFzZSBhbGwgb2JqZWN0cyBpbiBhIHNsYWIKICAqIEBjYWNoZXA6IGNhY2hlIHBvaW50ZXIgYmVpbmcgZGVzdHJveWVkCkBAIC0xNzY4LDggKzE3ODUsMTcgQEAKIAkJY2FsbF9yY3UoJnNsYWJfcmN1LT5oZWFkLCBrbWVtX3JjdV9mcmVlKTsKIAl9IGVsc2UgewogCQlrbWVtX2ZyZWVwYWdlcyhjYWNoZXAsIGFkZHIpOwotCQlpZiAoT0ZGX1NMQUIoY2FjaGVwKSkKLQkJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAtPnNsYWJwX2NhY2hlLCBzbGFicCk7CisJCWlmIChPRkZfU0xBQihjYWNoZXApKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkvKgorCQkgCSAqIGxvY2tkZXA6IHdlIG1heSBuZXN0IGluc2lkZSBhbiBhbHJlYWR5IGhlbGQKKwkJCSAqIGFjLT5sb2NrLCBzbyBwYXNzIGluIGEgbmVzdGluZyBmbGFnOgorCQkJICovCisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlfX2NhY2hlX2ZyZWUoY2FjaGVwLT5zbGFicF9jYWNoZSwgc2xhYnAsIDEpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQl9CiAJfQogfQogCkBAIC0yMjQ4LDMyICsyMjc0LDQ1IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fbm9kZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgaW50IG5vZGUpCisvKgorICogUmVtb3ZlIHNsYWJzIGZyb20gdGhlIGxpc3Qgb2YgZnJlZSBzbGFicy4KKyAqIFNwZWNpZnkgdGhlIG51bWJlciBvZiBzbGFicyB0byBkcmFpbiBpbiB0b2ZyZWUuCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBzbGFicyByZWxlYXNlZC4KKyAqLworc3RhdGljIGludCBkcmFpbl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCisJCQlzdHJ1Y3Qga21lbV9saXN0MyAqbDMsIGludCB0b2ZyZWUpCiB7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlpbnQgbnJfZnJlZWQ7CiAJc3RydWN0IHNsYWIgKnNsYWJwOwotCXN0cnVjdCBrbWVtX2xpc3QzICpsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdOwotCWludCByZXQ7CiAKLQlmb3IgKDs7KSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJbnJfZnJlZWQgPSAwOworCXdoaWxlIChucl9mcmVlZCA8IHRvZnJlZSAmJiAhbGlzdF9lbXB0eSgmbDMtPnNsYWJzX2ZyZWUpKSB7CiAKKwkJc3Bpbl9sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7CiAJCXAgPSBsMy0+c2xhYnNfZnJlZS5wcmV2OwotCQlpZiAocCA9PSAmbDMtPnNsYWJzX2ZyZWUpCi0JCQlicmVhazsKKwkJaWYgKHAgPT0gJmwzLT5zbGFic19mcmVlKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOworCQkJZ290byBvdXQ7CisJCX0KIAotCQlzbGFicCA9IGxpc3RfZW50cnkobDMtPnNsYWJzX2ZyZWUucHJldiwgc3RydWN0IHNsYWIsIGxpc3QpOworCQlzbGFicCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNsYWIsIGxpc3QpOwogI2lmIERFQlVHCiAJCUJVR19PTihzbGFicC0+aW51c2UpOwogI2VuZGlmCiAJCWxpc3RfZGVsKCZzbGFicC0+bGlzdCk7Ci0KLQkJbDMtPmZyZWVfb2JqZWN0cyAtPSBjYWNoZXAtPm51bTsKKwkJLyoKKwkJICogU2FmZSB0byBkcm9wIHRoZSBsb2NrLiBUaGUgc2xhYiBpcyBubyBsb25nZXIgbGlua2VkCisJCSAqIHRvIHRoZSBjYWNoZS4KKwkJICovCisJCWwzLT5mcmVlX29iamVjdHMgLT0gY2FjaGUtPm51bTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQkJc2xhYl9kZXN0cm95KGNhY2hlcCwgc2xhYnApOwotCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKwkJc2xhYl9kZXN0cm95KGNhY2hlLCBzbGFicCk7CisJCW5yX2ZyZWVkKys7CiAJfQotCXJldCA9ICFsaXN0X2VtcHR5KCZsMy0+c2xhYnNfZnVsbCkgfHwgIWxpc3RfZW1wdHkoJmwzLT5zbGFic19wYXJ0aWFsKTsKLQlyZXR1cm4gcmV0Oworb3V0OgorCXJldHVybiBucl9mcmVlZDsKIH0KIAogc3RhdGljIGludCBfX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQpAQCAtMjI4NiwxMSArMjMyNSwxMyBAQAogCWNoZWNrX2lycV9vbigpOwogCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpIHsKIAkJbDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tpXTsKLQkJaWYgKGwzKSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQkJCXJldCArPSBfX25vZGVfc2hyaW5rKGNhY2hlcCwgaSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwotCQl9CisJCWlmICghbDMpCisJCQljb250aW51ZTsKKworCQlkcmFpbl9mcmVlbGlzdChjYWNoZXAsIGwzLCBsMy0+ZnJlZV9vYmplY3RzKTsKKworCQlyZXQgKz0gIWxpc3RfZW1wdHkoJmwzLT5zbGFic19mdWxsKSB8fAorCQkJIWxpc3RfZW1wdHkoJmwzLT5zbGFic19wYXJ0aWFsKTsKIAl9CiAJcmV0dXJuIChyZXQgPyAxIDogMCk7CiB9CkBAIC0zMDU5LDcgKzMxMDAsMTYgQEAKIAkJaWYgKHNsYWJwLT5pbnVzZSA9PSAwKSB7CiAJCQlpZiAobDMtPmZyZWVfb2JqZWN0cyA+IGwzLT5mcmVlX2xpbWl0KSB7CiAJCQkJbDMtPmZyZWVfb2JqZWN0cyAtPSBjYWNoZXAtPm51bTsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHNhZmUgdG8gZHJvcCB0aGUgbG9jay4gVGhlIHNsYWIgaXMKKwkJCQkgKiBubyBsb25nZXIgbGlua2VkIHRvIHRoZSBjYWNoZS4gY2FjaGVwCisJCQkJICogY2Fubm90IGRpc2FwcGVhciAtIHdlIGFyZSB1c2luZyBpdCBhbmQKKwkJCQkgKiBhbGwgZGVzdHJ1Y3Rpb24gb2YgY2FjaGVzIG11c3QgYmUKKwkJCQkgKiBzZXJpYWxpemVkIHByb3Blcmx5IGJ5IHRoZSB1c2VyLgorCQkJCSAqLworCQkJCXNwaW5fdW5sb2NrKCZsMy0+bGlzdF9sb2NrKTsKIAkJCQlzbGFiX2Rlc3Ryb3koY2FjaGVwLCBzbGFicCk7CisJCQkJc3Bpbl9sb2NrKCZsMy0+bGlzdF9sb2NrKTsKIAkJCX0gZWxzZSB7CiAJCQkJbGlzdF9hZGQoJnNsYWJwLT5saXN0LCAmbDMtPnNsYWJzX2ZyZWUpOwogCQkJfQpAQCAtMzA4NSw3ICszMTM1LDcgQEAKICNlbmRpZgogCWNoZWNrX2lycV9vZmYoKTsKIAlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdOwotCXNwaW5fbG9jaygmbDMtPmxpc3RfbG9jayk7CisJc3Bpbl9sb2NrX25lc3RlZCgmbDMtPmxpc3RfbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCWlmIChsMy0+c2hhcmVkKSB7CiAJCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkX2FycmF5ID0gbDMtPnNoYXJlZDsKIAkJaW50IG1heCA9IHNoYXJlZF9hcnJheS0+bGltaXQgLSBzaGFyZWRfYXJyYXktPmF2YWlsOwpAQCAtMzEyOCwxNCArMzE3OCwxNCBAQAogICogUmVsZWFzZSBhbiBvYmogYmFjayB0byBpdHMgY2FjaGUuIElmIHRoZSBvYmogaGFzIGEgY29uc3RydWN0ZWQgc3RhdGUsIGl0IG11c3QKICAqIGJlIGluIHRoaXMgc3RhdGUgX2JlZm9yZV8gaXQgaXMgcmVsZWFzZWQuICBDYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKm9ianApCitzdGF0aWMgdm9pZCBfX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCwgaW50IG5lc3RpbmcpCiB7CiAJc3RydWN0IGFycmF5X2NhY2hlICphYyA9IGNwdV9jYWNoZV9nZXQoY2FjaGVwKTsKIAogCWNoZWNrX2lycV9vZmYoKTsKIAlvYmpwID0gY2FjaGVfZnJlZV9kZWJ1Z2NoZWNrKGNhY2hlcCwgb2JqcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAotCWlmIChjYWNoZV9mcmVlX2FsaWVuKGNhY2hlcCwgb2JqcCkpCisJaWYgKGNhY2hlX2ZyZWVfYWxpZW4oY2FjaGVwLCBvYmpwLCBuZXN0aW5nKSkKIAkJcmV0dXJuOwogCiAJaWYgKGxpa2VseShhYy0+YXZhaWwgPCBhYy0+bGltaXQpKSB7CkBAIC0zMzc0LDcgKzM0MjQsNyBAQAogCUJVR19PTih2aXJ0X3RvX2NhY2hlKG9ianApICE9IGNhY2hlcCk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19jYWNoZV9mcmVlKGNhY2hlcCwgb2JqcCk7CisJX19jYWNoZV9mcmVlKGNhY2hlcCwgb2JqcCwgMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwpAQCAtMzM5OSw3ICszNDQ5LDcgQEAKIAlrZnJlZV9kZWJ1Z2NoZWNrKG9ianApOwogCWMgPSB2aXJ0X3RvX2NhY2hlKG9ianApOwogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9ianAsIG9ial9zaXplKGMpKTsKLQlfX2NhY2hlX2ZyZWUoYywgKHZvaWQgKilvYmpwKTsKKwlfX2NhY2hlX2ZyZWUoYywgKHZvaWQgKilvYmpwLCAwKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKQEAgLTM2OTQsMTAgKzM3NDQsNiBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VhcmNocCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnA7Ci0JCWludCB0b2ZyZWU7Ci0JCXN0cnVjdCBzbGFiICpzbGFicDsKLQogCQljaGVja19pcnFfb24oKTsKIAogCQkvKgpAQCAtMzcyMiw0NyArMzc2OCwyMiBAQAogCiAJCWRyYWluX2FycmF5KHNlYXJjaHAsIGwzLCBsMy0+c2hhcmVkLCAwLCBub2RlKTsKIAotCQlpZiAobDMtPmZyZWVfdG91Y2hlZCkgeworCQlpZiAobDMtPmZyZWVfdG91Y2hlZCkKIAkJCWwzLT5mcmVlX3RvdWNoZWQgPSAwOwotCQkJZ290byBuZXh0OworCQllbHNlIHsKKwkJCWludCBmcmVlZDsKKworCQkJZnJlZWQgPSBkcmFpbl9mcmVlbGlzdChzZWFyY2hwLCBsMywgKGwzLT5mcmVlX2xpbWl0ICsKKwkJCQk1ICogc2VhcmNocC0+bnVtIC0gMSkgLyAoNSAqIHNlYXJjaHAtPm51bSkpOworCQkJU1RBVFNfQUREX1JFQVBFRChzZWFyY2hwLCBmcmVlZCk7CiAJCX0KLQotCQl0b2ZyZWUgPSAobDMtPmZyZWVfbGltaXQgKyA1ICogc2VhcmNocC0+bnVtIC0gMSkgLwotCQkJCSg1ICogc2VhcmNocC0+bnVtKTsKLQkJZG8gewotCQkJLyoKLQkJCSAqIERvIG5vdCBsb2NrIGlmIHRoZXJlIGFyZSBubyBmcmVlIGJsb2Nrcy4KLQkJCSAqLwotCQkJaWYgKGxpc3RfZW1wdHkoJmwzLT5zbGFic19mcmVlKSkKLQkJCQlicmVhazsKLQotCQkJc3Bpbl9sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7Ci0JCQlwID0gbDMtPnNsYWJzX2ZyZWUubmV4dDsKLQkJCWlmIChwID09ICYobDMtPnNsYWJzX2ZyZWUpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJc2xhYnAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzbGFiLCBsaXN0KTsKLQkJCUJVR19PTihzbGFicC0+aW51c2UpOwotCQkJbGlzdF9kZWwoJnNsYWJwLT5saXN0KTsKLQkJCVNUQVRTX0lOQ19SRUFQRUQoc2VhcmNocCk7Ci0KLQkJCS8qCi0JCQkgKiBTYWZlIHRvIGRyb3AgdGhlIGxvY2suIFRoZSBzbGFiIGlzIG5vIGxvbmdlciBsaW5rZWQKLQkJCSAqIHRvIHRoZSBjYWNoZS4gc2VhcmNocCBjYW5ub3QgZGlzYXBwZWFyLCB3ZSBob2xkCi0JCQkgKiBjYWNoZV9jaGFpbl9sb2NrCi0JCQkgKi8KLQkJCWwzLT5mcmVlX29iamVjdHMgLT0gc2VhcmNocC0+bnVtOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQkJCXNsYWJfZGVzdHJveShzZWFyY2hwLCBzbGFicCk7Ci0JCX0gd2hpbGUgKC0tdG9mcmVlID4gMCk7CiBuZXh0OgogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJY2hlY2tfaXJxX29uKCk7CiAJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJbmV4dF9yZWFwX25vZGUoKTsKKwlyZWZyZXNoX2NwdV92bV9zdGF0cyhzbXBfcHJvY2Vzc29yX2lkKCkpOwogCS8qIFNldCB1cCB0aGUgbmV4dCBpdGVyYXRpb24gKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJl9fZ2V0X2NwdV92YXIocmVhcF93b3JrKSwgUkVBUFRJTUVPVVRfQ1BVQyk7CiB9CmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggYTY4MjU1Yi4uN2I1MmIyMGIgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqIGVzc2VudGlhbGx5IG5vIGFsbG9jYXRpb24gc3BhY2Ugb3ZlcmhlYWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CmRpZmYgLS1naXQgYS9tbS9zcGFyc2UuYyBiL21tL3NwYXJzZS5jCmluZGV4IGM3YTJiM2EuLjg2YzUyYWIgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS5jCisrKyBiL21tL3NwYXJzZS5jCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqIHNwYXJzZSBtZW1vcnkgbWFwcGluZ3MuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA5OTA4NjhhLi44ZmQwOTVjIDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJaWYgKFBhZ2VMUlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkpIHsKIAkJbGlzdF9tb3ZlX3RhaWwoJnBhZ2UtPmxydSwgJnpvbmUtPmluYWN0aXZlX2xpc3QpOwotCQlpbmNfcGFnZV9zdGF0ZShwZ3JvdGF0ZWQpOworCQlfX2NvdW50X3ZtX2V2ZW50KFBHUk9UQVRFRCk7CiAJfQogCWlmICghdGVzdF9jbGVhcl9wYWdlX3dyaXRlYmFjayhwYWdlKSkKIAkJQlVHKCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwogCQlTZXRQYWdlQWN0aXZlKHBhZ2UpOwogCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJaW5jX3BhZ2Vfc3RhdGUocGdhY3RpdmF0ZSk7CisJCV9fY291bnRfdm1fZXZlbnQoUEdBQ1RJVkFURSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGUwZTE1ODMuLjVmN2NmMmEgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqIHZtc2NhbidzIHNocmlua19saXN0LCB0byBtYWtlIHN5bmNfcGFnZSBsb29rIG5pY2VyLCBhbmQgdG8gYWxsb3cKICAqIGZ1dHVyZSB1c2Ugb2YgcmFkaXhfdHJlZSB0YWdzIGluIHRoZSBzd2FwIGNhY2hlLgogICovCi1zdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzd2FwX2FvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzd2FwX2FvcHMgPSB7CiAJLndyaXRlcGFnZQk9IHN3YXBfd3JpdGVwYWdlLAogCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCiAJLnNldF9wYWdlX2RpcnR5CT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCkBAIC0zOCw3ICszOCw3IEBACiAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBwZXJfc3BhY2UgPSB7CiAJLnBhZ2VfdHJlZQk9IFJBRElYX1RSRUVfSU5JVChHRlBfQVRPTUlDfF9fR0ZQX05PV0FSTiksCi0JLnRyZWVfbG9jawk9IFJXX0xPQ0tfVU5MT0NLRUQsCisJLnRyZWVfbG9jawk9IF9fUldfTE9DS19VTkxPQ0tFRChzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayksCiAJLmFfb3BzCQk9ICZzd2FwX2FvcHMsCiAJLmlfbW1hcF9ub25saW5lYXIgPSBMSVNUX0hFQURfSU5JVChzd2FwcGVyX3NwYWNlLmlfbW1hcF9ub25saW5lYXIpLAogCS5iYWNraW5nX2Rldl9pbmZvID0gJnN3YXBfYmFja2luZ19kZXZfaW5mbywKQEAgLTg3LDcgKzg3LDcgQEAKIAkJCVNldFBhZ2VTd2FwQ2FjaGUocGFnZSk7CiAJCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIGVudHJ5LnZhbCk7CiAJCQl0b3RhbF9zd2FwY2FjaGVfcGFnZXMrKzsKLQkJCXBhZ2VjYWNoZV9hY2N0KDEpOworCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCQl9CiAJCXdyaXRlX3VubG9ja19pcnEoJnN3YXBwZXJfc3BhY2UudHJlZV9sb2NrKTsKIAkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIAlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7CiAJdG90YWxfc3dhcGNhY2hlX3BhZ2VzLS07Ci0JcGFnZWNhY2hlX2FjY3QoLTEpOworCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX1BBR0VTKTsKIAlJTkNfQ0FDSEVfSU5GTyhkZWxfdG90YWwpOwogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBjYzM2N2Y3Li5lNzBkNmM2IDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTUsNyArNSw2IEBACiAgKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KZGlmZiAtLWdpdCBhL21tL3Rpbnktc2htZW0uYyBiL21tL3Rpbnktc2htZW0uYwppbmRleCBmOWQ2YTljLi41ZjJjYmYwIDEwMDY0NAotLS0gYS9tbS90aW55LXNobWVtLmMKKysrIGIvbW0vdGlueS1zaG1lbS5jCkBAIC0xMiw3ICsxMiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KQEAgLTMzLDkgKzMyLDYgQEAKIHsKIAlCVUdfT04ocmVnaXN0ZXJfZmlsZXN5c3RlbSgmdG1wZnNfZnNfdHlwZSkgIT0gMCk7CiAKLSNpZmRlZiBDT05GSUdfVE1QRlMKLQlkZXZmc19ta19kaXIoInNobSIpOwotI2VuZGlmCiAJc2htX21udCA9IGtlcm5fbW91bnQoJnRtcGZzX2ZzX3R5cGUpOwogCUJVR19PTihJU19FUlIoc2htX21udCkpOwogCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggMzVmODU1My4uN2I0NTA3OSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMzMwLDYgKzMzMCw4IEBACiAJCXJldHVybjsKIAl9CiAKKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChhZGRyLCBhcmVhLT5zaXplKTsKKwogCWlmIChkZWFsbG9jYXRlX3BhZ2VzKSB7CiAJCWludCBpOwogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGVlYWNiMGQuLjVkNGM0ZDAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC00Nyw4ICs0Nyw2IEBACiAJLyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAotCXVuc2lnbmVkIGxvbmcgbnJfbWFwcGVkOwkvKiBGcm9tIHBhZ2Vfc3RhdGUgKi8KLQogCS8qIFRoaXMgY29udGV4dCdzIEdGUCBtYXNrICovCiAJZ2ZwX3QgZ2ZwX21hc2s7CiAKQEAgLTIxNyw3ICsyMTUsNyBAQAogCQkJCWJyZWFrOwogCQkJaWYgKHNocmlua19yZXQgPCBucl9iZWZvcmUpCiAJCQkJcmV0ICs9IG5yX2JlZm9yZSAtIHNocmlua19yZXQ7Ci0JCQltb2RfcGFnZV9zdGF0ZShzbGFic19zY2FubmVkLCB0aGlzX3NjYW4pOworCQkJY291bnRfdm1fZXZlbnRzKFNMQUJTX1NDQU5ORUQsIHRoaXNfc2Nhbik7CiAJCQl0b3RhbF9zY2FuIC09IHRoaXNfc2NhbjsKIAogCQkJY29uZF9yZXNjaGVkKCk7CkBAIC01NzEsNyArNTY5LDcgQEAKIAlsaXN0X3NwbGljZSgmcmV0X3BhZ2VzLCBwYWdlX2xpc3QpOwogCWlmIChwYWdldmVjX2NvdW50KCZmcmVlZF9wdmVjKSkKIAkJX19wYWdldmVjX3JlbGVhc2Vfbm9ubHJ1KCZmcmVlZF9wdmVjKTsKLQltb2RfcGFnZV9zdGF0ZShwZ2FjdGl2YXRlLCBwZ2FjdGl2YXRlKTsKKwljb3VudF92bV9ldmVudHMoUEdBQ1RJVkFURSwgcGdhY3RpdmF0ZSk7CiAJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KIApAQCAtNjYxLDExICs2NTksMTEgQEAKIAkJbnJfcmVjbGFpbWVkICs9IG5yX2ZyZWVkOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkgewotCQkJX19tb2RfcGFnZV9zdGF0ZV96b25lKHpvbmUsIHBnc2Nhbl9rc3dhcGQsIG5yX3NjYW4pOwotCQkJX19tb2RfcGFnZV9zdGF0ZShrc3dhcGRfc3RlYWwsIG5yX2ZyZWVkKTsKKwkJCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTQ0FOX0tTV0FQRCwgem9uZSwgbnJfc2Nhbik7CisJCQlfX2NvdW50X3ZtX2V2ZW50cyhLU1dBUERfU1RFQUwsIG5yX2ZyZWVkKTsKIAkJfSBlbHNlCi0JCQlfX21vZF9wYWdlX3N0YXRlX3pvbmUoem9uZSwgcGdzY2FuX2RpcmVjdCwgbnJfc2Nhbik7Ci0JCV9fbW9kX3BhZ2Vfc3RhdGVfem9uZSh6b25lLCBwZ3N0ZWFsLCBucl9mcmVlZCk7CisJCQlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU0NBTl9ESVJFQ1QsIHpvbmUsIG5yX3NjYW4pOworCQlfX2NvdW50X3ZtX2V2ZW50cyhQR0FDVElWQVRFLCBucl9mcmVlZCk7CiAKIAkJaWYgKG5yX3Rha2VuID09IDApCiAJCQlnb3RvIGRvbmU7CkBAIC03NDQsNyArNzQyLDkgQEAKIAkJICogaG93IG11Y2ggbWVtb3J5CiAJCSAqIGlzIG1hcHBlZC4KIAkJICovCi0JCW1hcHBlZF9yYXRpbyA9IChzYy0+bnJfbWFwcGVkICogMTAwKSAvIHZtX3RvdGFsX3BhZ2VzOworCQltYXBwZWRfcmF0aW8gPSAoKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSArCisJCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQU5PTl9QQUdFUykpICogMTAwKSAvCisJCQkJCXZtX3RvdGFsX3BhZ2VzOwogCiAJCS8qCiAJCSAqIE5vdyBkZWNpZGUgaG93IG11Y2ggd2UgcmVhbGx5IHdhbnQgdG8gdW5tYXAgc29tZSBwYWdlcy4gIFRoZQpAQCAtODQxLDExICs4NDEsMTAgQEAKIAkJfQogCX0KIAl6b25lLT5ucl9hY3RpdmUgKz0gcGdtb3ZlZDsKLQlzcGluX3VubG9jaygmem9uZS0+bHJ1X2xvY2spOwogCi0JX19tb2RfcGFnZV9zdGF0ZV96b25lKHpvbmUsIHBncmVmaWxsLCBwZ3NjYW5uZWQpOwotCV9fbW9kX3BhZ2Vfc3RhdGUocGdkZWFjdGl2YXRlLCBwZ2RlYWN0aXZhdGUpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHUkVGSUxMLCB6b25lLCBwZ3NjYW5uZWQpOworCV9fY291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgcGdkZWFjdGl2YXRlKTsKKwlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAogCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CiB9CkBAIC05NzcsNyArOTc2LDcgQEAKIAkJLnN3YXBwaW5lc3MgPSB2bV9zd2FwcGluZXNzLAogCX07CiAKLQlpbmNfcGFnZV9zdGF0ZShhbGxvY3N0YWxsKTsKKwljb3VudF92bV9ldmVudChBTExPQ1NUQUxMKTsKIAogCWZvciAoaSA9IDA7IHpvbmVzW2ldICE9IE5VTEw7IGkrKykgewogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHpvbmVzW2ldOwpAQCAtOTkwLDcgKzk4OSw2IEBACiAJfQogCiAJZm9yIChwcmlvcml0eSA9IERFRl9QUklPUklUWTsgcHJpb3JpdHkgPj0gMDsgcHJpb3JpdHktLSkgewotCQlzYy5ucl9tYXBwZWQgPSByZWFkX3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKIAkJc2MubnJfc2Nhbm5lZCA9IDA7CiAJCWlmICghcHJpb3JpdHkpCiAJCQlkaXNhYmxlX3N3YXBfdG9rZW4oKTsKQEAgLTEwNzUsOSArMTA3Myw3IEBACiAJdG90YWxfc2Nhbm5lZCA9IDA7CiAJbnJfcmVjbGFpbWVkID0gMDsKIAlzYy5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlOwotCXNjLm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpOwotCi0JaW5jX3BhZ2Vfc3RhdGUocGFnZW91dHJ1bik7CisJY291bnRfdm1fZXZlbnQoUEFHRU9VVFJVTik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGdkYXQtPm5yX3pvbmVzOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGk7CkBAIC0xMzY1LDcgKzEzNjEsNyBAQAogCWZvcl9lYWNoX3pvbmUoem9uZSkKIAkJbHJ1X3BhZ2VzICs9IHpvbmUtPm5yX2FjdGl2ZSArIHpvbmUtPm5yX2luYWN0aXZlOwogCi0JbnJfc2xhYiA9IHJlYWRfcGFnZV9zdGF0ZShucl9zbGFiKTsKKwlucl9zbGFiID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQik7CiAJLyogSWYgc2xhYiBjYWNoZXMgYXJlIGh1Z2UsIGl0J3MgYmV0dGVyIHRvIGhpdCB0aGVtIGZpcnN0ICovCiAJd2hpbGUgKG5yX3NsYWIgPj0gbHJ1X3BhZ2VzKSB7CiAJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwpAQCAtMTQwNyw5ICsxNDAzLDcgQEAKIAkJZm9yIChwcmlvID0gREVGX1BSSU9SSVRZOyBwcmlvID49IDA7IHByaW8tLSkgewogCQkJdW5zaWduZWQgbG9uZyBucl90b19zY2FuID0gbnJfcGFnZXMgLSByZXQ7CiAKLQkJCXNjLm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpOwogCQkJc2MubnJfc2Nhbm5lZCA9IDA7Ci0KIAkJCXJldCArPSBzaHJpbmtfYWxsX3pvbmVzKG5yX3RvX3NjYW4sIHByaW8sIHBhc3MsICZzYyk7CiAJCQlpZiAocmV0ID49IG5yX3BhZ2VzKQogCQkJCWdvdG8gb3V0OwpAQCAtMTUwOSwxMCArMTUwMyw2IEBACiAgKgogICogSWYgbm9uLXplcm8gY2FsbCB6b25lX3JlY2xhaW0gd2hlbiB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgZmFsbHMgYmVsb3cKICAqIHRoZSB3YXRlcm1hcmtzLgotICoKLSAqIEluIHRoZSBmdXR1cmUgd2UgbWF5IGFkZCBmbGFncyB0byB0aGUgbW9kZS4gSG93ZXZlciwgdGhlIHBhZ2UgYWxsb2NhdG9yCi0gKiBzaG91bGQgb25seSBoYXZlIHRvIGNoZWNrIHRoYXQgem9uZV9yZWNsYWltX21vZGUgIT0gMCBiZWZvcmUgY2FsbGluZwotICogem9uZV9yZWNsYWltKCkuCiAgKi8KIGludCB6b25lX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5OwogCkBAIC0xNTIzLDExICsxNTEzLDYgQEAKICNkZWZpbmUgUkVDTEFJTV9TTEFCICgxPDwzKQkvKiBEbyBhIGdsb2JhbCBzbGFiIHNocmluayBpZiB0aGUgem9uZSBpcyBvdXQgb2YgbWVtb3J5ICovCiAKIC8qCi0gKiBNaW5pbnVtIHRpbWUgYmV0d2VlbiB6b25lIHJlY2xhaW0gc2NhbnMKLSAqLwotaW50IHpvbmVfcmVjbGFpbV9pbnRlcnZhbCBfX3JlYWRfbW9zdGx5ID0gMzAqSFo7Ci0KLS8qCiAgKiBQcmlvcml0eSBmb3IgWk9ORV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzCiAgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mCiAgKiBhIHpvbmUuCkBAIC0xNTM1LDYgKzE1MjAsMTIgQEAKICNkZWZpbmUgWk9ORV9SRUNMQUlNX1BSSU9SSVRZIDQKIAogLyoKKyAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igem9uZV9yZWNsYWltIHRvCisgKiBvY2N1ci4KKyAqLworaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxOworCisvKgogICogVHJ5IHRvIGZyZWUgdXAgc29tZSBwYWdlcyBmcm9tIHRoaXMgem9uZSB0aHJvdWdoIHJlY2xhaW0uCiAgKi8KIHN0YXRpYyBpbnQgX196b25lX3JlY2xhaW0oc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCkBAIC0xNTQ4LDcgKzE1MzksNiBAQAogCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7CiAJCS5tYXlfd3JpdGVwYWdlID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1dSSVRFKSwKIAkJLm1heV9zd2FwID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1NXQVApLAotCQkubnJfbWFwcGVkID0gcmVhZF9wYWdlX3N0YXRlKG5yX21hcHBlZCksCiAJCS5zd2FwX2NsdXN0ZXJfbWF4ID0gbWF4X3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsCiAJCQkJCVNXQVBfQ0xVU1RFUl9NQVgpLAogCQkuZ2ZwX21hc2sgPSBnZnBfbWFzaywKQEAgLTE1OTMsMTYgKzE1ODMsNiBAQAogCiAJcC0+cmVjbGFpbV9zdGF0ZSA9IE5VTEw7CiAJY3VycmVudC0+ZmxhZ3MgJj0gfihQRl9NRU1BTExPQyB8IFBGX1NXQVBXUklURSk7Ci0KLQlpZiAobnJfcmVjbGFpbWVkID09IDApIHsKLQkJLyoKLQkJICogV2Ugd2VyZSB1bmFibGUgdG8gcmVjbGFpbSBlbm91Z2ggcGFnZXMgdG8gc3RheSBvbiBub2RlLiAgV2UKLQkJICogbm93IGFsbG93IG9mZiBub2RlIGFjY2Vzc2VzIGZvciBhIGNlcnRhaW4gdGltZSBwZXJpb2QgYmVmb3JlCi0JCSAqIHRyeWluZyBhZ2FpbiB0byByZWNsYWltIHBhZ2VzIGZyb20gdGhlIGxvY2FsIHpvbmUuCi0JCSAqLwotCQl6b25lLT5sYXN0X3Vuc3VjY2Vzc2Z1bF96b25lX3JlY2xhaW0gPSBqaWZmaWVzOwotCX0KLQogCXJldHVybiBucl9yZWNsYWltZWQgPj0gbnJfcGFnZXM7CiB9CiAKQEAgLTE2MTIsMTQgKzE1OTIsMTcgQEAKIAlpbnQgbm9kZV9pZDsKIAogCS8qCi0JICogRG8gbm90IHJlY2xhaW0gaWYgdGhlcmUgd2FzIGEgcmVjZW50IHVuc3VjY2Vzc2Z1bCBhdHRlbXB0IGF0IHpvbmUKLQkgKiByZWNsYWltLiAgSW4gdGhhdCBjYXNlIHdlIGxldCBhbGxvY2F0aW9ucyBnbyBvZmYgbm9kZSBmb3IgdGhlCi0JICogem9uZV9yZWNsYWltX2ludGVydmFsLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIHNjYW4gZm9yIGVhY2ggb2ZmLW5vZGUKLQkgKiBwYWdlIGFsbG9jYXRpb24uCisJICogWm9uZSByZWNsYWltIHJlY2xhaW1zIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzLgorCSAqCisJICogQSBzbWFsbCBwb3J0aW9uIG9mIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzIGlzIG5lZWRlZCBmb3IKKwkgKiBmaWxlIEkvTyBvdGhlcndpc2UgcGFnZXMgcmVhZCBieSBmaWxlIEkvTyB3aWxsIGJlIGltbWVkaWF0ZWx5CisJICogdGhyb3duIG91dCBpZiB0aGUgem9uZSBpcyBvdmVyYWxsb2NhdGVkLiBTbyB3ZSBkbyBub3QgcmVjbGFpbQorCSAqIGlmIGxlc3MgdGhhbiBhIHNwZWNpZmllZCBwZXJjZW50YWdlIG9mIHRoZSB6b25lIGlzIHVzZWQgYnkKKwkgKiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcy4KIAkgKi8KLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKLQkJem9uZS0+bGFzdF91bnN1Y2Nlc3NmdWxfem9uZV9yZWNsYWltICsgem9uZV9yZWNsYWltX2ludGVydmFsKSkKLQkJCXJldHVybiAwOworCWlmICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRklMRV9QQUdFUykgLQorCSAgICB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRklMRV9NQVBQRUQpIDw9IHpvbmUtPm1pbl91bm1hcHBlZF9yYXRpbykKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIEF2b2lkIGNvbmN1cnJlbnQgem9uZSByZWNsYWltcywgZG8gbm90IHJlY2xhaW0gaW4gYSB6b25lIHRoYXQgZG9lcwpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2I4M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTAsMCArMSw2MTQgQEAKKy8qCisgKiAgbGludXgvbW0vdm1zdGF0LmMKKyAqCisgKiAgTWFuYWdlcyBWTSBzdGF0aXN0aWNzCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0ICBMaW51cyBUb3J2YWxkcworICoKKyAqICB6b25lZCBWTSBzdGF0aXN0aWNzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4sCisgKgkJQ2hyaXN0b3BoIExhbWV0ZXIgPGNocmlzdG9waEBsYW1ldGVyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwordm9pZCBfX2dldF96b25lX2NvdW50cyh1bnNpZ25lZCBsb25nICphY3RpdmUsIHVuc2lnbmVkIGxvbmcgKmluYWN0aXZlLAorCQkJdW5zaWduZWQgbG9uZyAqZnJlZSwgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZXMgPSBwZ2RhdC0+bm9kZV96b25lczsKKwlpbnQgaTsKKworCSphY3RpdmUgPSAwOworCSppbmFjdGl2ZSA9IDA7CisJKmZyZWUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykgeworCQkqYWN0aXZlICs9IHpvbmVzW2ldLm5yX2FjdGl2ZTsKKwkJKmluYWN0aXZlICs9IHpvbmVzW2ldLm5yX2luYWN0aXZlOworCQkqZnJlZSArPSB6b25lc1tpXS5mcmVlX3BhZ2VzOworCX0KK30KKwordm9pZCBnZXRfem9uZV9jb3VudHModW5zaWduZWQgbG9uZyAqYWN0aXZlLAorCQl1bnNpZ25lZCBsb25nICppbmFjdGl2ZSwgdW5zaWduZWQgbG9uZyAqZnJlZSkKK3sKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OworCisJKmFjdGl2ZSA9IDA7CisJKmluYWN0aXZlID0gMDsKKwkqZnJlZSA9IDA7CisJZm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7CisJCXVuc2lnbmVkIGxvbmcgbCwgbSwgbjsKKwkJX19nZXRfem9uZV9jb3VudHMoJmwsICZtLCAmbiwgcGdkYXQpOworCQkqYWN0aXZlICs9IGw7CisJCSppbmFjdGl2ZSArPSBtOworCQkqZnJlZSArPSBuOworCX0KK30KKworI2lmZGVmIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUworREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtX2V2ZW50X3N0YXRlLCB2bV9ldmVudF9zdGF0ZXMpID0ge3swfX07CitFWFBPUlRfUEVSX0NQVV9TWU1CT0wodm1fZXZlbnRfc3RhdGVzKTsKKworc3RhdGljIHZvaWQgc3VtX3ZtX2V2ZW50cyh1bnNpZ25lZCBsb25nICpyZXQsIGNwdW1hc2tfdCAqY3B1bWFzaykKK3sKKwlpbnQgY3B1ID0gMDsKKwlpbnQgaTsKKworCW1lbXNldChyZXQsIDAsIE5SX1ZNX0VWRU5UX0lURU1TICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWNwdSA9IGZpcnN0X2NwdSgqY3B1bWFzayk7CisJd2hpbGUgKGNwdSA8IE5SX0NQVVMpIHsKKwkJc3RydWN0IHZtX2V2ZW50X3N0YXRlICp0aGlzID0gJnBlcl9jcHUodm1fZXZlbnRfc3RhdGVzLCBjcHUpOworCisJCWNwdSA9IG5leHRfY3B1KGNwdSwgKmNwdW1hc2spOworCisJCWlmIChjcHUgPCBOUl9DUFVTKQorCQkJcHJlZmV0Y2goJnBlcl9jcHUodm1fZXZlbnRfc3RhdGVzLCBjcHUpKTsKKworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9WTV9FVkVOVF9JVEVNUzsgaSsrKQorCQkJcmV0W2ldICs9IHRoaXMtPmV2ZW50W2ldOworCX0KK30KKworLyoKKyAqIEFjY3VtdWxhdGUgdGhlIHZtIGV2ZW50IGNvdW50ZXJzIGFjcm9zcyBhbGwgQ1BVcy4KKyAqIFRoZSByZXN1bHQgaXMgdW5hdm9pZGFibHkgYXBwcm94aW1hdGUgLSBpdCBjYW4gY2hhbmdlCisgKiBkdXJpbmcgYW5kIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgorKi8KK3ZvaWQgYWxsX3ZtX2V2ZW50cyh1bnNpZ25lZCBsb25nICpyZXQpCit7CisJc3VtX3ZtX2V2ZW50cyhyZXQsICZjcHVfb25saW5lX21hcCk7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworLyoKKyAqIEZvbGQgdGhlIGZvcmVpZ24gY3B1IGV2ZW50cyBpbnRvIG91ciBvd24uCisgKgorICogVGhpcyBpcyBhZGRpbmcgdG8gdGhlIGV2ZW50cyBvbiBvbmUgcHJvY2Vzc29yCisgKiBidXQga2VlcHMgdGhlIGdsb2JhbCBjb3VudHMgY29uc3RhbnQuCisgKi8KK3ZvaWQgdm1fZXZlbnRzX2ZvbGRfY3B1KGludCBjcHUpCit7CisJc3RydWN0IHZtX2V2ZW50X3N0YXRlICpmb2xkX3N0YXRlID0gJnBlcl9jcHUodm1fZXZlbnRfc3RhdGVzLCBjcHUpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX1ZNX0VWRU5UX0lURU1TOyBpKyspIHsKKwkJY291bnRfdm1fZXZlbnRzKGksIGZvbGRfc3RhdGUtPmV2ZW50W2ldKTsKKwkJZm9sZF9zdGF0ZS0+ZXZlbnRbaV0gPSAwOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVRyAqLworCisjZW5kaWYgLyogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTICovCisKKy8qCisgKiBNYW5hZ2UgY29tYmluZWQgem9uZSBiYXNlZCAvIGdsb2JhbCBjb3VudGVycworICoKKyAqIHZtX3N0YXQgY29udGFpbnMgdGhlIGdsb2JhbCBjb3VudGVycworICovCithdG9taWNfbG9uZ190IHZtX3N0YXRbTlJfVk1fWk9ORV9TVEFUX0lURU1TXTsKK0VYUE9SVF9TWU1CT0wodm1fc3RhdCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNkZWZpbmUgU1RBVF9USFJFU0hPTEQgMzIKKworLyoKKyAqIERldGVybWluZSBwb2ludGVyIHRvIGN1cnJlbnRseSB2YWxpZCBkaWZmZXJlbnRpYWwgYnl0ZSBnaXZlbiBhIHpvbmUgYW5kCisgKiB0aGUgaXRlbSBudW1iZXIuCisgKgorICogUHJlZW1wdGlvbiBtdXN0IGJlIG9mZgorICovCitzdGF0aWMgaW5saW5lIHM4ICpkaWZmX3BvaW50ZXIoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlyZXR1cm4gJnpvbmVfcGNwKHpvbmUsIHNtcF9wcm9jZXNzb3JfaWQoKSktPnZtX3N0YXRfZGlmZltpdGVtXTsKK30KKworLyoKKyAqIEZvciB1c2Ugd2hlbiB3ZSBrbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCisgKi8KK3ZvaWQgX19tb2Rfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sCisJCQkJaW50IGRlbHRhKQoreworCXM4ICpwOworCWxvbmcgeDsKKworCXAgPSBkaWZmX3BvaW50ZXIoem9uZSwgaXRlbSk7CisJeCA9IGRlbHRhICsgKnA7CisKKwlpZiAodW5saWtlbHkoeCA+IFNUQVRfVEhSRVNIT0xEIHx8IHggPCAtU1RBVF9USFJFU0hPTEQpKSB7CisJCXpvbmVfcGFnZV9zdGF0ZV9hZGQoeCwgem9uZSwgaXRlbSk7CisJCXggPSAwOworCX0KKworCSpwID0geDsKK30KK0VYUE9SVF9TWU1CT0woX19tb2Rfem9uZV9wYWdlX3N0YXRlKTsKKworLyoKKyAqIEZvciBhbiB1bmtub3duIGludGVycnVwdCBzdGF0ZQorICovCit2b2lkIG1vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwKKwkJCQkJaW50IGRlbHRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0sIGRlbHRhKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG1vZF96b25lX3BhZ2Vfc3RhdGUpOworCisvKgorICogT3B0aW1pemVkIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGZ1bmN0aW9ucy4KKyAqCisgKiBUaGVzZSBhcmUgb25seSBmb3IgYSBzaW5nbGUgcGFnZSBhbmQgdGhlcmVmb3JlIGNhbiB0YWtlIGEgc3RydWN0IHBhZ2UgKgorICogYXJndW1lbnQgaW5zdGVhZCBvZiBzdHJ1Y3Qgem9uZSAqLiBUaGlzIGFsbG93cyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlCisgKiBnZW5lcmF0ZWQgZm9yIHBhZ2Vfem9uZShwYWdlKSBpbnRvIHRoZSBvcHRpbWl6ZWQgZnVuY3Rpb25zLgorICoKKyAqIE5vIG92ZXJmbG93IGNoZWNrIGlzIG5lY2Vzc2FyeSBhbmQgdGhlcmVmb3JlIHRoZSBkaWZmZXJlbnRpYWwgY2FuIGJlCisgKiBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCBpbiBwbGFjZSB3aGljaCBtYXkgYWxsb3cgdGhlIGNvbXBpbGVycyB0bworICogZ2VuZXJhdGUgYmV0dGVyIGNvZGUuCisgKgorICogVGhlIGluY3JlbWVudCBvciBkZWNyZW1lbnQgaXMga25vd24gYW5kIHRoZXJlZm9yZSBvbmUgYm91bmRhcnkgY2hlY2sgY2FuCisgKiBiZSBvbWl0dGVkLgorICoKKyAqIFNvbWUgcHJvY2Vzc29ycyBoYXZlIGluYy9kZWMgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGF0b21pYyB2cyBhbiBpbnRlcnJ1cHQuCisgKiBIb3dldmVyLCB0aGUgY29kZSBtdXN0IGZpcnN0IGRldGVybWluZSB0aGUgZGlmZmVyZW50aWFsIGxvY2F0aW9uIGluIGEgem9uZQorICogYmFzZWQgb24gdGhlIHByb2Nlc3NvciBudW1iZXIgYW5kIHRoZW4gaW5jL2RlYyB0aGUgY291bnRlci4gVGhlcmUgaXMgbm8KKyAqIGd1YXJhbnRlZSB3aXRob3V0IGRpc2FibGluZyBwcmVlbXB0aW9uIHRoYXQgdGhlIHByb2Nlc3NvciB3aWxsIG5vdCBjaGFuZ2UKKyAqIGluIGJldHdlZW4gYW5kIHRoZXJlZm9yZSB0aGUgYXRvbWljaXR5IHZzLiBpbnRlcnJ1cHQgY2Fubm90IGJlIGV4cGxvaXRlZAorICogaW4gYSB1c2VmdWwgd2F5IGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5jX3pvbmVfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlzOCAqcCA9IGRpZmZfcG9pbnRlcih6b25lLCBpdGVtKTsKKworCSgqcCkrKzsKKworCWlmICh1bmxpa2VseSgqcCA+IFNUQVRfVEhSRVNIT0xEKSkgeworCQl6b25lX3BhZ2Vfc3RhdGVfYWRkKCpwLCB6b25lLCBpdGVtKTsKKwkJKnAgPSAwOworCX0KK30KKwordm9pZCBfX2luY196b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwlfX2luY196b25lX3N0YXRlKHBhZ2Vfem9uZShwYWdlKSwgaXRlbSk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW5jX3pvbmVfcGFnZV9zdGF0ZSk7CisKK3ZvaWQgX19kZWNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCit7CisJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisJczggKnAgPSBkaWZmX3BvaW50ZXIoem9uZSwgaXRlbSk7CisKKwkoKnApLS07CisKKwlpZiAodW5saWtlbHkoKnAgPCAtU1RBVF9USFJFU0hPTEQpKSB7CisJCXpvbmVfcGFnZV9zdGF0ZV9hZGQoKnAsIHpvbmUsIGl0ZW0pOworCQkqcCA9IDA7CisJfQorfQorRVhQT1JUX1NZTUJPTChfX2RlY196b25lX3BhZ2Vfc3RhdGUpOworCit2b2lkIGluY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2luY196b25lX3N0YXRlKHpvbmUsIGl0ZW0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwordm9pZCBpbmNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCXpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgaXRlbSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChpbmNfem9uZV9wYWdlX3N0YXRlKTsKKwordm9pZCBkZWNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlzOCAqcDsKKworCXpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXAgPSBkaWZmX3BvaW50ZXIoem9uZSwgaXRlbSk7CisKKwkoKnApLS07CisKKwlpZiAodW5saWtlbHkoKnAgPCAtU1RBVF9USFJFU0hPTEQpKSB7CisJCXpvbmVfcGFnZV9zdGF0ZV9hZGQoKnAsIHpvbmUsIGl0ZW0pOworCQkqcCA9IDA7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZGVjX3pvbmVfcGFnZV9zdGF0ZSk7CisKKy8qCisgKiBVcGRhdGUgdGhlIHpvbmUgY291bnRlcnMgZm9yIG9uZSBjcHUuCisgKi8KK3ZvaWQgcmVmcmVzaF9jcHVfdm1fc3RhdHMoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBjcDsKKworCQlwY3AgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9WTV9aT05FX1NUQVRfSVRFTVM7IGkrKykKKwkJCWlmIChwY3AtPnZtX3N0YXRfZGlmZltpXSkgeworCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQl6b25lX3BhZ2Vfc3RhdGVfYWRkKHBjcC0+dm1fc3RhdF9kaWZmW2ldLAorCQkJCQl6b25lLCBpKTsKKwkJCQlwY3AtPnZtX3N0YXRfZGlmZltpXSA9IDA7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX19yZWZyZXNoX2NwdV92bV9zdGF0cyh2b2lkICpkdW1teSkKK3sKKwlyZWZyZXNoX2NwdV92bV9zdGF0cyhzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCisvKgorICogQ29uc29saWRhdGUgYWxsIGNvdW50ZXJzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0IGlzIGxlc3MgaW5hY2N1cmF0ZSBidXQgc3RpbGwgaW5hY2N1cmF0ZQorICogaWYgY29uY3VycmVudCBwcm9jZXNzZXMgYXJlIGFsbG93ZWQgdG8gcnVuLgorICovCit2b2lkIHJlZnJlc2hfdm1fc3RhdHModm9pZCkKK3sKKwlvbl9lYWNoX2NwdShfX3JlZnJlc2hfY3B1X3ZtX3N0YXRzLCBOVUxMLCAwLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wocmVmcmVzaF92bV9zdGF0cyk7CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05VTUEKKy8qCisgKiB6b25lbGlzdCA9IHRoZSBsaXN0IG9mIHpvbmVzIHBhc3NlZCB0byB0aGUgYWxsb2NhdG9yCisgKiB6IAkgICAgPSB0aGUgem9uZSBmcm9tIHdoaWNoIHRoZSBhbGxvY2F0aW9uIG9jY3VycmVkLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLwordm9pZCB6b25lX3N0YXRpc3RpY3Moc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHpvbmUgKnopCit7CisJaWYgKHotPnpvbmVfcGdkYXQgPT0gem9uZWxpc3QtPnpvbmVzWzBdLT56b25lX3BnZGF0KSB7CisJCV9faW5jX3pvbmVfc3RhdGUoeiwgTlVNQV9ISVQpOworCX0gZWxzZSB7CisJCV9faW5jX3pvbmVfc3RhdGUoeiwgTlVNQV9NSVNTKTsKKwkJX19pbmNfem9uZV9zdGF0ZSh6b25lbGlzdC0+em9uZXNbMF0sIE5VTUFfRk9SRUlHTik7CisJfQorCWlmICh6LT56b25lX3BnZGF0ID09IE5PREVfREFUQShudW1hX25vZGVfaWQoKSkpCisJCV9faW5jX3pvbmVfc3RhdGUoeiwgTlVNQV9MT0NBTCk7CisJZWxzZQorCQlfX2luY196b25lX3N0YXRlKHosIE5VTUFfT1RIRVIpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHZvaWQgKmZyYWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlwZ19kYXRhX3QgKnBnZGF0OworCWxvZmZfdCBub2RlID0gKnBvczsKKwlmb3IgKHBnZGF0ID0gZmlyc3Rfb25saW5lX3BnZGF0KCk7CisJICAgICBwZ2RhdCAmJiBub2RlOworCSAgICAgcGdkYXQgPSBuZXh0X29ubGluZV9wZ2RhdChwZ2RhdCkpCisJCS0tbm9kZTsKKworCXJldHVybiBwZ2RhdDsKK30KKworc3RhdGljIHZvaWQgKmZyYWdfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZywgbG9mZl90ICpwb3MpCit7CisJcGdfZGF0YV90ICpwZ2RhdCA9IChwZ19kYXRhX3QgKilhcmc7CisKKwkoKnBvcykrKzsKKwlyZXR1cm4gbmV4dF9vbmxpbmVfcGdkYXQocGdkYXQpOworfQorCitzdGF0aWMgdm9pZCBmcmFnX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpCit7Cit9CisKKy8qCisgKiBUaGlzIHdhbGtzIHRoZSBmcmVlIGFyZWFzIGZvciBlYWNoIHpvbmUuCisgKi8KK3N0YXRpYyBpbnQgZnJhZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQoreworCXBnX2RhdGFfdCAqcGdkYXQgPSAocGdfZGF0YV90ICopYXJnOworCXN0cnVjdCB6b25lICp6b25lOworCXN0cnVjdCB6b25lICpub2RlX3pvbmVzID0gcGdkYXQtPm5vZGVfem9uZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb3JkZXI7CisKKwlmb3IgKHpvbmUgPSBub2RlX3pvbmVzOyB6b25lIC0gbm9kZV96b25lcyA8IE1BWF9OUl9aT05FUzsgKyt6b25lKSB7CisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOworCQlzZXFfcHJpbnRmKG0sICJOb2RlICVkLCB6b25lICU4cyAiLCBwZ2RhdC0+bm9kZV9pZCwgem9uZS0+bmFtZSk7CisJCWZvciAob3JkZXIgPSAwOyBvcmRlciA8IE1BWF9PUkRFUjsgKytvcmRlcikKKwkJCXNlcV9wcmludGYobSwgIiU2bHUgIiwgem9uZS0+ZnJlZV9hcmVhW29yZGVyXS5ucl9mcmVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzZXFfb3BlcmF0aW9ucyBmcmFnbWVudGF0aW9uX29wID0geworCS5zdGFydAk9IGZyYWdfc3RhcnQsCisJLm5leHQJPSBmcmFnX25leHQsCisJLnN0b3AJPSBmcmFnX3N0b3AsCisJLnNob3cJPSBmcmFnX3Nob3csCit9OworCitzdGF0aWMgY2hhciAqdm1zdGF0X3RleHRbXSA9IHsKKwkvKiBab25lZCBWTSBjb3VudGVycyAqLworCSJucl9hbm9uX3BhZ2VzIiwKKwkibnJfbWFwcGVkIiwKKwkibnJfZmlsZV9wYWdlcyIsCisJIm5yX3NsYWIiLAorCSJucl9wYWdlX3RhYmxlX3BhZ2VzIiwKKwkibnJfZGlydHkiLAorCSJucl93cml0ZWJhY2siLAorCSJucl91bnN0YWJsZSIsCisJIm5yX2JvdW5jZSIsCisKKyNpZmRlZiBDT05GSUdfTlVNQQorCSJudW1hX2hpdCIsCisJIm51bWFfbWlzcyIsCisJIm51bWFfZm9yZWlnbiIsCisJIm51bWFfaW50ZXJsZWF2ZSIsCisJIm51bWFfbG9jYWwiLAorCSJudW1hX290aGVyIiwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTCisJInBncGdpbiIsCisJInBncGdvdXQiLAorCSJwc3dwaW4iLAorCSJwc3dwb3V0IiwKKworCSJwZ2FsbG9jX2RtYSIsCisJInBnYWxsb2NfZG1hMzIiLAorCSJwZ2FsbG9jX25vcm1hbCIsCisJInBnYWxsb2NfaGlnaCIsCisKKwkicGdmcmVlIiwKKwkicGdhY3RpdmF0ZSIsCisJInBnZGVhY3RpdmF0ZSIsCisKKwkicGdmYXVsdCIsCisJInBnbWFqZmF1bHQiLAorCisJInBncmVmaWxsX2RtYSIsCisJInBncmVmaWxsX2RtYTMyIiwKKwkicGdyZWZpbGxfbm9ybWFsIiwKKwkicGdyZWZpbGxfaGlnaCIsCisKKwkicGdzdGVhbF9kbWEiLAorCSJwZ3N0ZWFsX2RtYTMyIiwKKwkicGdzdGVhbF9ub3JtYWwiLAorCSJwZ3N0ZWFsX2hpZ2giLAorCisJInBnc2Nhbl9rc3dhcGRfZG1hIiwKKwkicGdzY2FuX2tzd2FwZF9kbWEzMiIsCisJInBnc2Nhbl9rc3dhcGRfbm9ybWFsIiwKKwkicGdzY2FuX2tzd2FwZF9oaWdoIiwKKworCSJwZ3NjYW5fZGlyZWN0X2RtYSIsCisJInBnc2Nhbl9kaXJlY3RfZG1hMzIiLAorCSJwZ3NjYW5fZGlyZWN0X25vcm1hbCIsCisJInBnc2Nhbl9kaXJlY3RfaGlnaCIsCisKKwkicGdpbm9kZXN0ZWFsIiwKKwkic2xhYnNfc2Nhbm5lZCIsCisJImtzd2FwZF9zdGVhbCIsCisJImtzd2FwZF9pbm9kZXN0ZWFsIiwKKwkicGFnZW91dHJ1biIsCisJImFsbG9jc3RhbGwiLAorCisJInBncm90YXRlZCIsCisjZW5kaWYKK307CisKKy8qCisgKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgem9uZXMgaW4gQHBnZGF0LgorICovCitzdGF0aWMgaW50IHpvbmVpbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpCit7CisJcGdfZGF0YV90ICpwZ2RhdCA9IGFyZzsKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlzdHJ1Y3Qgem9uZSAqbm9kZV96b25lcyA9IHBnZGF0LT5ub2RlX3pvbmVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmb3IgKHpvbmUgPSBub2RlX3pvbmVzOyB6b25lIC0gbm9kZV96b25lcyA8IE1BWF9OUl9aT05FUzsgem9uZSsrKSB7CisJCWludCBpOworCisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOworCQlzZXFfcHJpbnRmKG0sICJOb2RlICVkLCB6b25lICU4cyIsIHBnZGF0LT5ub2RlX2lkLCB6b25lLT5uYW1lKTsKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIlxuICBwYWdlcyBmcmVlICAgICAlbHUiCisJCQkgICAiXG4gICAgICAgIG1pbiAgICAgICVsdSIKKwkJCSAgICJcbiAgICAgICAgbG93ICAgICAgJWx1IgorCQkJICAgIlxuICAgICAgICBoaWdoICAgICAlbHUiCisJCQkgICAiXG4gICAgICAgIGFjdGl2ZSAgICVsdSIKKwkJCSAgICJcbiAgICAgICAgaW5hY3RpdmUgJWx1IgorCQkJICAgIlxuICAgICAgICBzY2FubmVkICAlbHUgKGE6ICVsdSBpOiAlbHUpIgorCQkJICAgIlxuICAgICAgICBzcGFubmVkICAlbHUiCisJCQkgICAiXG4gICAgICAgIHByZXNlbnQgICVsdSIsCisJCQkgICB6b25lLT5mcmVlX3BhZ2VzLAorCQkJICAgem9uZS0+cGFnZXNfbWluLAorCQkJICAgem9uZS0+cGFnZXNfbG93LAorCQkJICAgem9uZS0+cGFnZXNfaGlnaCwKKwkJCSAgIHpvbmUtPm5yX2FjdGl2ZSwKKwkJCSAgIHpvbmUtPm5yX2luYWN0aXZlLAorCQkJICAgem9uZS0+cGFnZXNfc2Nhbm5lZCwKKwkJCSAgIHpvbmUtPm5yX3NjYW5fYWN0aXZlLCB6b25lLT5ucl9zY2FuX2luYWN0aXZlLAorCQkJICAgem9uZS0+c3Bhbm5lZF9wYWdlcywKKwkJCSAgIHpvbmUtPnByZXNlbnRfcGFnZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9WTV9aT05FX1NUQVRfSVRFTVM7IGkrKykKKwkJCXNlcV9wcmludGYobSwgIlxuICAgICUtMTJzICVsdSIsIHZtc3RhdF90ZXh0W2ldLAorCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgaSkpOworCisJCXNlcV9wcmludGYobSwKKwkJCSAgICJcbiAgICAgICAgcHJvdGVjdGlvbjogKCVsdSIsCisJCQkgICB6b25lLT5sb3dtZW1fcmVzZXJ2ZVswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHpvbmUtPmxvd21lbV9yZXNlcnZlKTsgaSsrKQorCQkJc2VxX3ByaW50ZihtLCAiLCAlbHUiLCB6b25lLT5sb3dtZW1fcmVzZXJ2ZVtpXSk7CisJCXNlcV9wcmludGYobSwKKwkJCSAgICIpIgorCQkJICAgIlxuICBwYWdlc2V0cyIpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBhZ2VzZXQ7CisJCQlpbnQgajsKKworCQkJcGFnZXNldCA9IHpvbmVfcGNwKHpvbmUsIGkpOworCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocGFnZXNldC0+cGNwKTsgaisrKSB7CisJCQkJaWYgKHBhZ2VzZXQtPnBjcFtqXS5jb3VudCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA9PSBBUlJBWV9TSVpFKHBhZ2VzZXQtPnBjcCkpCisJCQkJY29udGludWU7CisJCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwYWdlc2V0LT5wY3ApOyBqKyspIHsKKwkJCQlzZXFfcHJpbnRmKG0sCisJCQkJCSAgICJcbiAgICBjcHU6ICVpIHBjcDogJWkiCisJCQkJCSAgICJcbiAgICAgICAgICAgICAgY291bnQ6ICVpIgorCQkJCQkgICAiXG4gICAgICAgICAgICAgIGhpZ2g6ICAlaSIKKwkJCQkJICAgIlxuICAgICAgICAgICAgICBiYXRjaDogJWkiLAorCQkJCQkgICBpLCBqLAorCQkJCQkgICBwYWdlc2V0LT5wY3Bbal0uY291bnQsCisJCQkJCSAgIHBhZ2VzZXQtPnBjcFtqXS5oaWdoLAorCQkJCQkgICBwYWdlc2V0LT5wY3Bbal0uYmF0Y2gpOworCQkJfQorCQl9CisJCXNlcV9wcmludGYobSwKKwkJCSAgICJcbiAgYWxsX3VucmVjbGFpbWFibGU6ICV1IgorCQkJICAgIlxuICBwcmV2X3ByaW9yaXR5OiAgICAgJWkiCisJCQkgICAiXG4gIHRlbXBfcHJpb3JpdHk6ICAgICAlaSIKKwkJCSAgICJcbiAgc3RhcnRfcGZuOiAgICAgICAgICVsdSIsCisJCQkgICB6b25lLT5hbGxfdW5yZWNsYWltYWJsZSwKKwkJCSAgIHpvbmUtPnByZXZfcHJpb3JpdHksCisJCQkgICB6b25lLT50ZW1wX3ByaW9yaXR5LAorCQkJICAgem9uZS0+em9uZV9zdGFydF9wZm4pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5sb2NrLCBmbGFncyk7CisJCXNlcV9wdXRjKG0sICdcbicpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNlcV9vcGVyYXRpb25zIHpvbmVpbmZvX29wID0geworCS5zdGFydAk9IGZyYWdfc3RhcnQsIC8qIGl0ZXJhdGUgb3ZlciBhbGwgem9uZXMuIFRoZSBzYW1lIGFzIGluCisJCQkgICAgICAgKiBmcmFnbWVudGF0aW9uLiAqLworCS5uZXh0CT0gZnJhZ19uZXh0LAorCS5zdG9wCT0gZnJhZ19zdG9wLAorCS5zaG93CT0gem9uZWluZm9fc2hvdywKK307CisKK3N0YXRpYyB2b2lkICp2bXN0YXRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwl1bnNpZ25lZCBsb25nICp2OworI2lmZGVmIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUworCXVuc2lnbmVkIGxvbmcgKmU7CisjZW5kaWYKKwlpbnQgaTsKKworCWlmICgqcG9zID49IEFSUkFZX1NJWkUodm1zdGF0X3RleHQpKQorCQlyZXR1cm4gTlVMTDsKKworI2lmZGVmIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUworCXYgPSBrbWFsbG9jKE5SX1ZNX1pPTkVfU1RBVF9JVEVNUyAqIHNpemVvZih1bnNpZ25lZCBsb25nKQorCQkJKyBzaXplb2Yoc3RydWN0IHZtX2V2ZW50X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisjZWxzZQorCXYgPSBrbWFsbG9jKE5SX1ZNX1pPTkVfU1RBVF9JVEVNUyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCUdGUF9LRVJORUwpOworI2VuZGlmCisJbS0+cHJpdmF0ZSA9IHY7CisJaWYgKCF2KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfVk1fWk9ORV9TVEFUX0lURU1TOyBpKyspCisJCXZbaV0gPSBnbG9iYWxfcGFnZV9zdGF0ZShpKTsKKyNpZmRlZiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMKKwllID0gdiArIE5SX1ZNX1pPTkVfU1RBVF9JVEVNUzsKKwlhbGxfdm1fZXZlbnRzKGUpOworCWVbUEdQR0lOXSAvPSAyOwkJLyogc2VjdG9ycyAtPiBrYnl0ZXMgKi8KKwllW1BHUEdPVVRdIC89IDI7CisjZW5kaWYKKwlyZXR1cm4gdiArICpwb3M7Cit9CisKK3N0YXRpYyB2b2lkICp2bXN0YXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZywgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJaWYgKCpwb3MgPj0gQVJSQVlfU0laRSh2bXN0YXRfdGV4dCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiAodW5zaWduZWQgbG9uZyAqKW0tPnByaXZhdGUgKyAqcG9zOworfQorCitzdGF0aWMgaW50IHZtc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQoreworCXVuc2lnbmVkIGxvbmcgKmwgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBvZmYgPSBsIC0gKHVuc2lnbmVkIGxvbmcgKiltLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihtLCAiJXMgJWx1XG4iLCB2bXN0YXRfdGV4dFtvZmZdLCAqbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3RhdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQoreworCWtmcmVlKG0tPnByaXZhdGUpOworCW0tPnByaXZhdGUgPSBOVUxMOworfQorCitzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdm1zdGF0X29wID0geworCS5zdGFydAk9IHZtc3RhdF9zdGFydCwKKwkubmV4dAk9IHZtc3RhdF9uZXh0LAorCS5zdG9wCT0gdm1zdGF0X3N0b3AsCisJLnNob3cJPSB2bXN0YXRfc2hvdywKK307CisKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCmRpZmYgLS1naXQgYS9uZXQvODAyL2ZjLmMgYi9uZXQvODAyL2ZjLmMKaW5kZXggMjgyYzRhYi4uMmEyN2UzNyAxMDA2NDQKLS0tIGEvbmV0LzgwMi9mYy5jCisrKyBiL25ldC84MDIvZmMuYwpAQCAtMTAsNyArMTAsNiBAQAogICoJCXYgMS4wIDAzLzIyLzk5CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvODAyL2ZkZGkuYyBiL25ldC84MDIvZmRkaS5jCmluZGV4IGFjMjQyYTRiLi43OTdjNmQ5IDEwMDY0NAotLS0gYS9uZXQvODAyL2ZkZGkuYworKysgYi9uZXQvODAyL2ZkZGkuYwpAQCAtMjYsNyArMjYsNiBAQAogICoJCU1hY2llaiBXLiBSb3p5Y2tpCToJSVB2NiBzdXBwb3J0CiAgKi8KICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL25ldC84MDIvc3lzY3RsX25ldF84MDIuYyBiL25ldC84MDIvc3lzY3RsX25ldF84MDIuYwppbmRleCA3MDAxMjk1Li5lYWQ1NjAzIDEwMDY0NAotLS0gYS9uZXQvODAyL3N5c2N0bF9uZXRfODAyLmMKKysrIGIvbmV0LzgwMi9zeXNjdGxfbmV0XzgwMi5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pZl90ci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IGU5ZGM4MDMuLmQ3ZDhmNDAgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCAzOTQ4OTQ5Li40NTgwMzFiIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTM2NCw2ICszNjQsMTQgQEAKIAl9CiB9CiAKKy8qCisgKiB2bGFuIG5ldHdvcmsgZGV2aWNlcyBoYXZlIGRldmljZXMgbmVzdGluZyBiZWxvdyBpdCwgYW5kIGFyZSBhIHNwZWNpYWwKKyAqICJzdXBlciBjbGFzcyIgb2Ygbm9ybWFsIG5ldHdvcmsgZGV2aWNlczsgc3BsaXQgdGhlaXIgbG9ja3Mgb2ZmIGludG8gYQorICogc2VwYXJhdGUgY2xhc3Mgc2luY2UgdGhleSBhbHdheXMgbmVzdC4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSB2bGFuX25ldGRldl94bWl0X2xvY2tfa2V5OworCisKIC8qICBBdHRhY2ggYSBWTEFOIGRldmljZSB0byBhIG1hYyBhZGRyZXNzIChpZSBFdGhlcm5ldCBDYXJkKS4KICAqICBSZXR1cm5zIHRoZSBkZXZpY2UgdGhhdCB3YXMgY3JlYXRlZCwgb3IgTlVMTCBpZiB0aGVyZSB3YXMKICAqICBhbiBlcnJvciBvZiBzb21lIGtpbmQuCkBAIC00NjAsNiArNDY4LDcgQEAKIAkJICAgIAogCW5ld19kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCB2bGFuX2Rldl9pbmZvKSwgbmFtZSwKIAkJCSAgICAgICB2bGFuX3NldHVwKTsKKwogCWlmIChuZXdfZGV2ID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtNTE4LDYgKzUyNyw4IEBACiAJaWYgKHJlZ2lzdGVyX25ldGRldmljZShuZXdfZGV2KSkKIAkJZ290byBvdXRfZnJlZV9uZXdkZXY7CiAKKwlsb2NrZGVwX3NldF9jbGFzcygmbmV3X2Rldi0+X3htaXRfbG9jaywgJnZsYW5fbmV0ZGV2X3htaXRfbG9ja19rZXkpOworCiAJbmV3X2Rldi0+aWZsaW5rID0gcmVhbF9kZXYtPmlmaW5kZXg7CiAJdmxhbl90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsIG5ld19kZXYpOwogCWxpbmt3YXRjaF9maXJlX2V2ZW50KG5ld19kZXYpOyAvKiBfTVVTVF8gY2FsbCByZmMyODYzX3BvbGljeSgpICovCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbnByb2MuYyBiL25ldC84MDIxcS92bGFucHJvYy5jCmluZGV4IDdiMjE0Y2YuLmE4ZmMwZGUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFucHJvYy5jCisrKyBiL25ldC84MDIxcS92bGFucHJvYy5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBKYW4gMjAsIDE5OTggICAgICAgIEJlbiBHcmVlYXIgICAgIEluaXRpYWwgVmVyc2lvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvYWFycC5jIGIvbmV0L2FwcGxldGFsay9hYXJwLmMKaW5kZXggNzA3NjA5Ny4uZjM3NzdlYyAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9hYXJwLmMKKysrIGIvbmV0L2FwcGxldGFsay9hYXJwLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2RhdGFsaW5rLmg+CmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYyBiL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCmluZGV4IGRjNDA0OGQuLjdhZTQ5MTYgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCisrKyBiL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCkBAIC04LDcgKzgsNiBAQAogICoJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGRwLmMgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCmluZGV4IDdiMWViOWEuLjVlZTk2ZDQgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGRwLmMKKysrIGIvbmV0L2FwcGxldGFsay9kZHAuYwpAQCAtNTEsNyArNTEsNiBAQAogICogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvc3lzY3RsX25ldF9hdGFsay5jIGIvbmV0L2FwcGxldGFsay9zeXNjdGxfbmV0X2F0YWxrLmMKaW5kZXggYWY3ZjA2MC4uNDBiMGFmNyAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9zeXNjdGxfbmV0X2F0YWxrLmMKKysrIGIvbmV0L2FwcGxldGFsay9zeXNjdGxfbmV0X2F0YWxrLmMKQEAgLTYsNyArNiw2IEBACiAgKiBEeW5hbWljIHJlZ2lzdHJhdGlvbiwgYWRkZWQgYWFycCBlbnRyaWVzLiAoNS8zMC85NyBDaHJpcyBIb3JuKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YWxrLmg+CmRpZmYgLS1naXQgYS9uZXQvYXRtL01ha2VmaWxlIGIvbmV0L2F0bS9NYWtlZmlsZQppbmRleCBkNTgxODc1Li44OTY1NmQ2IDEwMDY0NAotLS0gYS9uZXQvYXRtL01ha2VmaWxlCisrKyBiL25ldC9hdG0vTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQVRNIFByb3RvY29sIEZhbWlsaWVzLgogIwogCi1hdG0teQkJOj0gYWRkci5vIHB2Yy5vIHNpZ25hbGluZy5vIHN2Yy5vIGlvY3RsLm8gY29tbW9uLm8gYXRtX21pc2MubyByYXcubyByZXNvdXJjZXMubworYXRtLXkJCTo9IGFkZHIubyBwdmMubyBzaWduYWxpbmcubyBzdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm8KIG1wb2Etb2Jqcwk6PSBtcGMubyBtcG9hX2NhY2hlcy5vIG1wb2FfcHJvYy5vCiAKIG9iai0kKENPTkZJR19BVE0pICs9IGF0bS5vCmRpZmYgLS1naXQgYS9uZXQvYXRtL2F0bV9zeXNmcy5jIGIvbmV0L2F0bS9hdG1fc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY0YjlhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2F0bS9hdG1fc3lzZnMuYwpAQCAtMCwwICsxLDE3NiBAQAorLyogQVRNIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJyZXNvdXJjZXMuaCIKKworI2RlZmluZSB0b19hdG1fZGV2KGNsZGV2KSBjb250YWluZXJfb2YoY2xkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdHlwZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGF0bV9kZXYgKmFkZXYgPSB0b19hdG1fZGV2KGNkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBhZGV2LT50eXBlKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hZGRyZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpwb3MgPSBidWY7CisJc3RydWN0IGF0bV9kZXYgKmFkZXYgPSB0b19hdG1fZGV2KGNkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IChFU0lfTEVOIC0gMSk7IGkrKykKKwkJcG9zICs9IHNwcmludGYocG9zLCAiJTAyeDoiLCBhZGV2LT5lc2lbaV0pOworCXBvcyArPSBzcHJpbnRmKHBvcywgIiUwMnhcbiIsIGFkZXYtPmVzaVtpXSk7CisKKwlyZXR1cm4gcG9zIC0gYnVmOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2F0bWFkZHJlc3Moc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKnBvcyA9IGJ1ZjsKKwlzdHJ1Y3QgYXRtX2RldiAqYWRldiA9IHRvX2F0bV9kZXYoY2Rldik7CisgICAgICAgIHN0cnVjdCBhdG1fZGV2X2FkZHIgKmFhZGRyOworCWludCBiaW5bXSA9IHsgMSwgMiwgMTAsIDYsIDEgfSwgKmZtdCA9IGJpbjsKKwlpbnQgaSwgajsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+bG9jaywgZmxhZ3MpOworICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFhZGRyLCAmYWRldi0+bG9jYWwsIGVudHJ5KSB7CisJCWZvcihpID0gMCwgaiA9IDA7IGkgPCBBVE1fRVNBX0xFTjsgKytpLCArK2opIHsKKwkJCWlmIChqID09ICpmbXQpIHsKKwkJCQlwb3MgKz0gc3ByaW50Zihwb3MsICIuIik7CisJCQkJKytmbXQ7CisJCQkJaiA9IDA7CisJCQl9CisJCQlwb3MgKz0gc3ByaW50Zihwb3MsICIlMDJ4IiwgYWFkZHItPmFkZHIuc2FzX2FkZHIucHJ2W2ldKTsKKwkJfQorCQlwb3MgKz0gc3ByaW50Zihwb3MsICJcbiIpOworCX0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHBvcyAtIGJ1ZjsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jYXJyaWVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpwb3MgPSBidWY7CisJc3RydWN0IGF0bV9kZXYgKmFkZXYgPSB0b19hdG1fZGV2KGNkZXYpOworCisJcG9zICs9IHNwcmludGYocG9zLCAiJWRcbiIsCisJCSAgICAgICBhZGV2LT5zaWduYWwgPT0gQVRNX1BIWV9TSUdfTE9TVCA/IDAgOiAxKTsKKwkJCisJcmV0dXJuIHBvcyAtIGJ1ZjsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19saW5rX3JhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCWNoYXIgKnBvcyA9IGJ1ZjsKKwlzdHJ1Y3QgYXRtX2RldiAqYWRldiA9IHRvX2F0bV9kZXYoY2Rldik7CisJaW50IGxpbmtfcmF0ZTsKKworCS8qIHNob3cgdGhlIGxpbmsgcmF0ZSwgbm90IHRoZSBkYXRhIHJhdGUgKi8KKwlzd2l0Y2ggKGFkZXYtPmxpbmtfcmF0ZSkgeworCQljYXNlIEFUTV9PQzNfUENSOgorCQkJbGlua19yYXRlID0gMTU1NTIwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgQVRNX09DMTJfUENSOgorCQkJbGlua19yYXRlID0gNjIyMDgwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgQVRNXzI1X1BDUjoKKwkJCWxpbmtfcmF0ZSA9IDI1NjAwMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlsaW5rX3JhdGUgPSBhZGV2LT5saW5rX3JhdGUgKiA4ICogNTM7CisJfQorCXBvcyArPSBzcHJpbnRmKHBvcywgIiVkXG4iLCBsaW5rX3JhdGUpOworCQkKKwlyZXR1cm4gcG9zIC0gYnVmOworfQorCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYWRkcmVzcywgU19JUlVHTywgc2hvd19hZGRyZXNzLCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihhdG1hZGRyZXNzLCBTX0lSVUdPLCBzaG93X2F0bWFkZHJlc3MsIE5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGNhcnJpZXIsIFNfSVJVR08sIHNob3dfY2FycmllciwgTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodHlwZSwgU19JUlVHTywgc2hvd190eXBlLCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihsaW5rX3JhdGUsIFNfSVJVR08sIHNob3dfbGlua19yYXRlLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICphdG1fYXR0cnNbXSA9IHsKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYXRtYWRkcmVzcywKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYWRkcmVzcywKKwkmY2xhc3NfZGV2aWNlX2F0dHJfY2FycmllciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfdHlwZSwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfbGlua19yYXRlLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgYXRtX3VldmVudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBjaGFyICpidWYsIGludCBzaXplKQoreworCXN0cnVjdCBhdG1fZGV2ICphZGV2OworCWludCBpID0gMCwgbGVuID0gMDsKKworCWlmICghY2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhZGV2ID0gdG9fYXRtX2RldihjZGV2KTsKKwlpZiAoIWFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwgYnVmLCBzaXplLCAmbGVuLAorCQkJICAgIk5BTUU9JXMlZCIsIGFkZXYtPnR5cGUsIGFkZXYtPm51bWJlcikpCisJCXJldHVybiAtRU5PTUVNOworCisJZW52cFtpXSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bV9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYpCit7CisJc3RydWN0IGF0bV9kZXYgKmFkZXYgPSB0b19hdG1fZGV2KGNkZXYpOworCisJa2ZyZWUoYWRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgYXRtX2NsYXNzID0geworCS5uYW1lCQk9ICJhdG0iLAorCS5yZWxlYXNlCT0gYXRtX3JlbGVhc2UsCisJLnVldmVudAkJPSBhdG1fdWV2ZW50LAorfTsKKworaW50IGF0bV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgYXRtX2RldiAqYWRldikKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0gJmFkZXYtPmNsYXNzX2RldjsKKwlpbnQgaSwgZXJyOworCisJY2Rldi0+Y2xhc3MgPSAmYXRtX2NsYXNzOworCWNsYXNzX3NldF9kZXZkYXRhKGNkZXYsIGFkZXYpOworCisJc25wcmludGYoY2Rldi0+Y2xhc3NfaWQsIEJVU19JRF9TSVpFLCAiJXMlZCIsIGFkZXYtPnR5cGUsIGFkZXYtPm51bWJlcik7CisJZXJyID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgYXRtX2F0dHJzW2ldOyBpKyspCisJCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjZGV2LCBhdG1fYXR0cnNbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRtX3VucmVnaXN0ZXJfc3lzZnMoc3RydWN0IGF0bV9kZXYgKmFkZXYpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiA9ICZhZGV2LT5jbGFzc19kZXY7CisKKwljbGFzc19kZXZpY2VfZGVsKGNkZXYpOworfQorCitpbnQgX19pbml0IGF0bV9zeXNmc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGNsYXNzX3JlZ2lzdGVyKCZhdG1fY2xhc3MpOworfQorCit2b2lkIF9fZXhpdCBhdG1fc3lzZnNfZXhpdCh2b2lkKQoreworCWNsYXNzX3VucmVnaXN0ZXIoJmF0bV9jbGFzcyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCA2ODBjY2IxLi5hNDg3MjMzIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTUsNyArNSw2IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KZGlmZiAtLWdpdCBhL25ldC9hdG0vY2xpcC5jIGIvbmV0L2F0bS9jbGlwLmMKaW5kZXggZjkyZjljOS4uMTIxYmY2ZiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jbGlwLmMKKysrIGIvbmV0L2F0bS9jbGlwLmMKQEAgLTIsNyArMiw2IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvKiBmb3IgVUlOVF9NQVggKi8KQEAgLTI0LDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPiAvKiBmb3IgSUZGX1VQICovCiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvaXNvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CkBAIC0yNjcsNyArMjY3LDcgQEAKIAlEUFJJTlRLKCJjbGlwX25laWdoX2Rlc3Ryb3kgKG5laWdoICVwKVxuIiwgbmVpZ2gpOwogCWlmIChORUlHSDJFTlRSWShuZWlnaCktPnZjY3MpCiAJCXByaW50ayhLRVJOX0NSSVQgImNsaXBfbmVpZ2hfZGVzdHJveTogdmNjcyAhPSBOVUxMICEhIVxuIik7Ci0JTkVJR0gyRU5UUlkobmVpZ2gpLT52Y2NzID0gKHZvaWQgKikgMHhkZWFkYmVlZjsKKwlORUlHSDJFTlRSWShuZWlnaCktPnZjY3MgPSAodm9pZCAqKSBORUlHSEJPUl9ERUFEOwogfQogCiBzdGF0aWMgdm9pZCBjbGlwX25laWdoX3NvbGljaXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYXRtL2NvbW1vbi5jIGIvbmV0L2F0bS9jb21tb24uYwppbmRleCBhZTAwMjIyLi5mYmFiZmY0IDEwMDY0NAotLS0gYS9uZXQvYXRtL2NvbW1vbi5jCisrKyBiL25ldC9hdG0vY29tbW9uLmMKQEAgLTMsNyArMyw2IEBACiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CQkvKiBzdHJ1Y3Qgc29ja2V0LCBzdHJ1Y3QgcHJvdG9fb3BzICovCkBAIC03OTEsOCArNzkwLDE0IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYXRtX3Byb2NfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLGVycm9yKTsKIAkJZ290byBvdXRfYXRtc3ZjX2V4aXQ7CiAJfQorICAgICAgICBpZiAoKGVycm9yID0gYXRtX3N5c2ZzX2luaXQoKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYXRtX3N5c2ZzX2luaXQoKSBmYWlsZWQgd2l0aCAlZFxuIixlcnJvcik7CisJCWdvdG8gb3V0X2F0bXByb2NfZXhpdDsKKwl9CiBvdXQ6CiAJcmV0dXJuIGVycm9yOworb3V0X2F0bXByb2NfZXhpdDoKKwlhdG1fcHJvY19leGl0KCk7CiBvdXRfYXRtc3ZjX2V4aXQ6CiAJYXRtc3ZjX2V4aXQoKTsKIG91dF9hdG1wdmNfZXhpdDoKQEAgLTgwNSw2ICs4MTAsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGF0bV9leGl0KHZvaWQpCiB7CiAJYXRtX3Byb2NfZXhpdCgpOworCWF0bV9zeXNmc19leGl0KCk7CiAJYXRtc3ZjX2V4aXQoKTsKIAlhdG1wdmNfZXhpdCgpOwogCXByb3RvX3VucmVnaXN0ZXIoJnZjY19wcm90byk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NvbW1vbi5oIGIvbmV0L2F0bS9jb21tb24uaAppbmRleCA0ODg3YzMxLi5hNDIyZGE3IDEwMDY0NAotLS0gYS9uZXQvYXRtL2NvbW1vbi5oCisrKyBiL25ldC9hdG0vY29tbW9uLmgKQEAgLTI4LDYgKzI4LDggQEAKIHZvaWQgYXRtcHZjX2V4aXQodm9pZCk7CiBpbnQgYXRtc3ZjX2luaXQodm9pZCk7CiB2b2lkIGF0bXN2Y19leGl0KHZvaWQpOworaW50IGF0bV9zeXNmc19pbml0KHZvaWQpOwordm9pZCBhdG1fc3lzZnNfZXhpdCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBpbnQgYXRtX3Byb2NfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vaW9jdGwuYyBiL25ldC9hdG0vaW9jdGwuYwppbmRleCA4NTFjZmE2Li44YzIwMjJjIDEwMDY0NAotLS0gYS9uZXQvYXRtL2lvY3RsLmMKKysrIGIvbmV0L2F0bS9pb2N0bC5jCkBAIC00LDcgKzQsNiBAQAogLyogMjAwMyBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+ICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4JCS8qIHN0cnVjdCBzb2NrZXQsIHN0cnVjdCBwcm90b19vcHMgKi8KZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmMgYi9uZXQvYXRtL2xlYy5jCmluZGV4IGM0ZmM3MjIuLjRiNjhhMTggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmMKKysrIGIvbmV0L2F0bS9sZWMuYwpAQCAtNCw3ICs0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmggYi9uZXQvYXRtL2xlYy5oCmluZGV4IDY2MDYwODIuLmMyMmE4YmYgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmgKKysrIGIvbmV0L2F0bS9sZWMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0xFQ19IXwogI2RlZmluZSBfTEVDX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1sZWMuaD4KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBjLmMgYi9uZXQvYXRtL21wYy5jCmluZGV4IDVmZTc3ZGYuLjlhYWZlMWUgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBjLmMKKysrIGIvbmV0L2F0bS9tcGMuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWxlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bW1wYy5oPgogLyogTW9kdWxhciB0b28gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgImxlYy5oIgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcG9hX3Byb2MuYyBiL25ldC9hdG0vbXBvYV9wcm9jLmMKaW5kZXggNjA4MzRiNS4uZDM3Yjg5MSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcG9hX3Byb2MuYworKysgYi9uZXQvYXRtL21wb2FfcHJvYy5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCAxNDg5MDY3Li43NmE3ZDhmIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYworKysgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMzQsNyArMzQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CmRpZmYgLS1naXQgYS9uZXQvYXRtL3Byb2MuYyBiL25ldC9hdG0vcHJvYy5jCmluZGV4IDQwNDEwNTQuLjNmOTViMDggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHJvYy5jCisrKyBiL25ldC9hdG0vcHJvYy5jCkBAIC04LDcgKzgsNiBAQAogICogdGhlIHJlYWRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+IC8qIGZvciBFWFBPUlRfU1lNQk9MICovCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL25ldC9hdG0vcHZjLmMgYi9uZXQvYXRtL3B2Yy5jCmluZGV4IGYyYzU0MTcuLmIyMTQ4YjQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHZjLmMKKysrIGIvbmV0L2F0bS9wdmMuYwpAQCAtMyw3ICszLDYgQEAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgkJLyogc3RydWN0IHNvY2tldCwgc3RydWN0IHByb3RvX29wcyAqLwogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgkJLyogQVRNIHN0dWZmICovCiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CS8qIEFUTSBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL3Jlc291cmNlcy5jIGIvbmV0L2F0bS9yZXNvdXJjZXMuYwppbmRleCAxOGFjODA2Li5kZTI1YzY0IDEwMDY0NAotLS0gYS9uZXQvYXRtL3Jlc291cmNlcy5jCisrKyBiL25ldC9hdG0vcmVzb3VyY2VzLmMKQEAgLTgsNyArOCw2IEBACiAgKiAJICAgICB1c2UgdGhlIGRlZmF1bHQgZGVzdHJ1Y3QgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgYnkgc29ja19pbml0X2RhdGEgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KQEAgLTExNCwxNCArMTEzLDI3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYXRtX2Rldl9yZWdpc3RlcjogIgogCQkgICAgICAgImF0bV9wcm9jX2Rldl9yZWdpc3RlciBmYWlsZWQgZm9yIGRldiAlc1xuIiwKIAkJICAgICAgIHR5cGUpOwotCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwotCQlrZnJlZShkZXYpOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXRfZmFpbDsKIAl9Ci0JbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZfbGlzdCwgJmF0bV9kZXZzKTsKLQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwogCisJaWYgKGF0bV9yZWdpc3Rlcl9zeXNmcyhkZXYpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0bV9kZXZfcmVnaXN0ZXI6ICIKKwkJICAgICAgICJhdG1fcmVnaXN0ZXJfc3lzZnMgZmFpbGVkIGZvciBkZXYgJXNcbiIsCisJCSAgICAgICB0eXBlKTsKKwkJYXRtX3Byb2NfZGV2X2RlcmVnaXN0ZXIoZGV2KTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmRldl9saXN0LCAmYXRtX2RldnMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAlyZXR1cm4gZGV2OworCitvdXRfZmFpbDoKKwlrZnJlZShkZXYpOworCWRldiA9IE5VTEw7CisJZ290byBvdXQ7CiB9CiAKIApAQCAtMTQwLDYgKzE1Miw3IEBACiAJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAogCWF0bV9kZXZfcmVsZWFzZV92Y2NzKGRldik7CisJYXRtX3VucmVnaXN0ZXJfc3lzZnMoZGV2KTsKIAlhdG1fcHJvY19kZXZfZGVyZWdpc3RlcihkZXYpOwogCiAJYXRtX2Rldl9wdXQoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcmVzb3VyY2VzLmggYi9uZXQvYXRtL3Jlc291cmNlcy5oCmluZGV4IGFjNzIyMmYuLjFkMDA0YWEgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcmVzb3VyY2VzLmgKKysrIGIvbmV0L2F0bS9yZXNvdXJjZXMuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgTkVUX0FUTV9SRVNPVVJDRVNfSAogI2RlZmluZSBORVRfQVRNX1JFU09VUkNFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCkBAIC00Myw0ICs0Miw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCitpbnQgYXRtX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBhdG1fZGV2ICphZGV2KTsKK3ZvaWQgYXRtX3VucmVnaXN0ZXJfc3lzZnMoc3RydWN0IGF0bV9kZXYgKmFkZXYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggYTJlMGRkMC4uMTBhM2MwYSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTMsNyArMTMsNiBAQAogICogQ29weXJpZ2h0IChDKSBIYW5zIEFsYmxhcyBQRTFBWVggKGhhbnNAZXNyYWMuZWxlLnR1ZS5ubCkKICAqIENvcHlyaWdodCAoQykgRnJlZGVyaWMgUmlibGUgRjFPQVQgKGZyaWJsZUB0ZWFzZXIuZnIpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfZGV2LmMgYi9uZXQvYXgyNS9heDI1X2Rldi5jCmluZGV4IGRhYjc3ZWYuLjQ3ZTZlNzkgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfZGV2LmMKKysrIGIvbmV0L2F4MjUvYXgyNV9kZXYuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIEpvbmF0aGFuIE5heWxvciBHNEtMWCAoZzRrbHhAZzRrbHguZGVtb24uY28udWspCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKaW5kZXggM2JiMTUyNy4uNzdiYTA3YyAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCisrKyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIEpvbmF0aGFuIE5heWxvciBHNEtMWCAoZzRrbHhAZzRrbHguZGVtb24uY28udWspCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lwLmMgYi9uZXQvYXgyNS9heDI1X2lwLmMKaW5kZXggYTBiNTM0Zi4uMTM2YzNhZSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pcC5jCisrKyBiL25ldC9heDI1L2F4MjVfaXAuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIEpvbmF0aGFuIE5heWxvciBHNEtMWCAoZzRrbHhAZzRrbHguZGVtb24uY28udWspCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CkBAIC0xMDQsMTEgKzEwMywxMyBAQAogewogCXN0cnVjdCBza19idWZmICpvdXJza2I7CiAJdW5zaWduZWQgY2hhciAqYnAgID0gc2tiLT5kYXRhOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJYXgyNV9yb3V0ZSAqcm91dGU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJYXgyNV9hZGRyZXNzICpzcmMsICpkc3Q7CisJYXgyNV9kaWdpICpkaWdpcGVhdCA9IE5VTEw7CiAJYXgyNV9kZXYgKmF4MjVfZGV2OwotCWF4MjVfcm91dGUgX3JvdXRlLCAqcm91dGUgPSAmX3JvdXRlOwogCWF4MjVfY2IgKmF4MjU7CisJY2hhciBpcF9tb2RlID0gJyAnOwogCiAJZHN0ID0gKGF4MjVfYWRkcmVzcyAqKShicCArIDEpOwogCXNyYyA9IChheDI1X2FkZHJlc3MgKikoYnAgKyA4KTsKQEAgLTExNiw4ICsxMTcsMTIgQEAKICAgCWlmIChhcnBfZmluZChicCArIDEsIHNrYikpCiAgIAkJcmV0dXJuIDE7CiAKLQlyb3V0ZSA9IGF4MjVfcnRfZmluZF9yb3V0ZShyb3V0ZSwgZHN0LCBOVUxMKTsKLQlkZXYgICAgICA9IHJvdXRlLT5kZXY7CisJcm91dGUgPSBheDI1X2dldF9yb3V0ZShkc3QsIE5VTEwpOworCWlmIChyb3V0ZSkgeworCQlkaWdpcGVhdCA9IHJvdXRlLT5kaWdpcGVhdDsKKwkJZGV2ID0gcm91dGUtPmRldjsKKwkJaXBfbW9kZSA9IHJvdXRlLT5pcF9tb2RlOworCX07CiAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCWRldiA9IHNrYi0+ZGV2OwpAQCAtMTI3LDcgKzEzMiw3IEBACiAJfQogCiAJaWYgKGJwWzE2XSA9PSBBWDI1X1BfSVApIHsKLQkJaWYgKHJvdXRlLT5pcF9tb2RlID09ICdWJyB8fCAocm91dGUtPmlwX21vZGUgPT0gJyAnICYmIGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfSVBERUZNT0RFXSkpIHsKKwkJaWYgKGlwX21vZGUgPT0gJ1YnIHx8IChpcF9tb2RlID09ICcgJyAmJiBheDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX0lQREVGTU9ERV0pKSB7CiAJCQkvKgogCQkJICoJV2UgY29weSB0aGUgYnVmZmVyIGFuZCByZWxlYXNlIHRoZSBvcmlnaW5hbCB0aGVyZWJ5CiAJCQkgKglrZWVwaW5nIGl0IHN0cmFpZ2h0CkBAIC0xNzMsNyArMTc4LDcgQEAKIAkJCSAgICBvdXJza2IsIAogCQkJICAgIGF4MjVfZGV2LT52YWx1ZXNbQVgyNV9WQUxVRVNfUEFDTEVOXSwgCiAJCQkgICAgJnNyY19jLAotCQkJICAgICZkc3RfYywgcm91dGUtPmRpZ2lwZWF0LCBkZXYpOworCQkJICAgICZkc3RfYywgZGlnaXBlYXQsIGRldik7CiAJCQlpZiAoYXgyNSkgewogCQkJCWF4MjVfY2JfcHV0KGF4MjUpOwogCQkJfQpAQCAtMTkxLDcgKzE5Niw3IEBACiAKIAlza2JfcHVsbChza2IsIEFYMjVfS0lTU19IRUFERVJfTEVOKTsKIAotCWlmIChyb3V0ZS0+ZGlnaXBlYXQgIT0gTlVMTCkgeworCWlmIChkaWdpcGVhdCAhPSBOVUxMKSB7CiAJCWlmICgob3Vyc2tiID0gYXgyNV9ydF9idWlsZF9wYXRoKHNrYiwgc3JjLCBkc3QsIHJvdXRlLT5kaWdpcGVhdCkpID09IE5VTEwpIHsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJZ290byBwdXQ7CkBAIC0yMDMsNyArMjA4LDggQEAKIAlheDI1X3F1ZXVlX3htaXQoc2tiLCBkZXYpOwogCiBwdXQ6Ci0JYXgyNV9wdXRfcm91dGUocm91dGUpOworCWlmIChyb3V0ZSkKKwkJYXgyNV9wdXRfcm91dGUocm91dGUpOwogCiAgIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfb3V0LmMgYi9uZXQvYXgyNS9heDI1X291dC5jCmluZGV4IDVkOTk4NTIuLmQ3NzM2ZTUgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfb3V0LmMKKysrIGIvbmV0L2F4MjUvYXgyNV9vdXQuYwpAQCAtOCw3ICs4LDYgQEAKICAqIENvcHlyaWdodCAoQykgSm9uYXRoYW4gTmF5bG9yIEc0S0xYIChnNGtseEBnNGtseC5kZW1vbi5jby51aykKICAqIENvcHlyaWdodCAoQykgSm9lcmcgUmV1dGVyIERMMUJLRSAoanJldXRlckB5YWluYS5kZSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfcm91dGUuYyBiL25ldC9heDI1L2F4MjVfcm91dGUuYwppbmRleCA1YWM5ODI1Li41MWI3YmRhIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X3JvdXRlLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jCkBAIC00MSw4ICs0MSw2IEBACiBzdGF0aWMgYXgyNV9yb3V0ZSAqYXgyNV9yb3V0ZV9saXN0Owogc3RhdGljIERFRklORV9SV0xPQ0soYXgyNV9yb3V0ZV9sb2NrKTsKIAotc3RhdGljIGF4MjVfcm91dGUgKmF4MjVfZ2V0X3JvdXRlKGF4MjVfYWRkcmVzcyAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLQogdm9pZCBheDI1X3J0X2RldmljZV9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJYXgyNV9yb3V0ZSAqcywgKnQsICpheDI1X3J0OwpAQCAtMTE1LDcgKzExMyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWF0b21pY19zZXQoJmF4MjVfcnQtPnJlZiwgMCk7CisJYXRvbWljX3NldCgmYXgyNV9ydC0+cmVmY291bnQsIDEpOwogCWF4MjVfcnQtPmNhbGxzaWduICAgICA9IHJvdXRlLT5kZXN0X2FkZHI7CiAJYXgyNV9ydC0+ZGV2ICAgICAgICAgID0gYXgyNV9kZXYtPmRldjsKIAlheDI1X3J0LT5kaWdpcGVhdCAgICAgPSBOVUxMOwpAQCAtMTQwLDIzICsxMzgsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXgyNV9ydF9kZXN0cm95KGF4MjVfcm91dGUgKmF4MjVfcnQpCit2b2lkIF9fYXgyNV9wdXRfcm91dGUoYXgyNV9yb3V0ZSAqYXgyNV9ydCkKIHsKLQlpZiAoYXRvbWljX3JlYWQoJmF4MjVfcnQtPnJlZikgPT0gMCkgewotCQlrZnJlZShheDI1X3J0LT5kaWdpcGVhdCk7Ci0JCWtmcmVlKGF4MjVfcnQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBVaC4uLiAgUm91dGUgaXMgc3RpbGwgaW4gdXNlOyB3ZSBjYW4ndCB5ZXQgZGVzdHJveSBpdC4gIFJldHJ5IGxhdGVyLgotCSAqLwotCWluaXRfdGltZXIoJmF4MjVfcnQtPnRpbWVyKTsKLQlheDI1X3J0LT50aW1lci5kYXRhCT0gKHVuc2lnbmVkIGxvbmcpIGF4MjVfcnQ7Ci0JYXgyNV9ydC0+dGltZXIuZnVuY3Rpb24JPSAodm9pZCAqKSBheDI1X3J0X2Rlc3Ryb3k7Ci0JYXgyNV9ydC0+dGltZXIuZXhwaXJlcwk9IGppZmZpZXMgKyA1ICogSFo7Ci0KLQlhZGRfdGltZXIoJmF4MjVfcnQtPnRpbWVyKTsKKwlrZnJlZShheDI1X3J0LT5kaWdpcGVhdCk7CisJa2ZyZWUoYXgyNV9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgYXgyNV9ydF9kZWwoc3RydWN0IGF4MjVfcm91dGVzX3N0cnVjdCAqcm91dGUpCkBAIC0xNzcsMTIgKzE2MiwxMiBAQAogCQkgICAgYXgyNWNtcCgmcm91dGUtPmRlc3RfYWRkciwgJnMtPmNhbGxzaWduKSA9PSAwKSB7CiAJCQlpZiAoYXgyNV9yb3V0ZV9saXN0ID09IHMpIHsKIAkJCQlheDI1X3JvdXRlX2xpc3QgPSBzLT5uZXh0OwotCQkJCWF4MjVfcnRfZGVzdHJveShzKTsKKwkJCQlheDI1X3B1dF9yb3V0ZShzKTsKIAkJCX0gZWxzZSB7CiAJCQkJZm9yICh0ID0gYXgyNV9yb3V0ZV9saXN0OyB0ICE9IE5VTEw7IHQgPSB0LT5uZXh0KSB7CiAJCQkJCWlmICh0LT5uZXh0ID09IHMpIHsKIAkJCQkJCXQtPm5leHQgPSBzLT5uZXh0OwotCQkJCQkJYXgyNV9ydF9kZXN0cm95KHMpOworCQkJCQkJYXgyNV9wdXRfcm91dGUocyk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KQEAgLTM2Miw3ICszNDcsNyBAQAogICoKICAqCU9ubHkgcm91dGVzIHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgemVybyBjYW4gYmUgZGVzdHJveWVkLgogICovCi1zdGF0aWMgYXgyNV9yb3V0ZSAqYXgyNV9nZXRfcm91dGUoYXgyNV9hZGRyZXNzICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorYXgyNV9yb3V0ZSAqYXgyNV9nZXRfcm91dGUoYXgyNV9hZGRyZXNzICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWF4MjVfcm91dGUgKmF4MjVfc3BlX3J0ID0gTlVMTDsKIAlheDI1X3JvdXRlICpheDI1X2RlZl9ydCA9IE5VTEw7CkBAIC0zOTIsNyArMzc3LDcgQEAKIAkJYXgyNV9ydCA9IGF4MjVfc3BlX3J0OwogCiAJaWYgKGF4MjVfcnQgIT0gTlVMTCkKLQkJYXRvbWljX2luYygmYXgyNV9ydC0+cmVmKTsKKwkJYXgyNV9ob2xkX3JvdXRlKGF4MjVfcnQpOwogCiAJcmVhZF91bmxvY2soJmF4MjVfcm91dGVfbG9jayk7CiAKQEAgLTQ2NywyNCArNDUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotYXgyNV9yb3V0ZSAqYXgyNV9ydF9maW5kX3JvdXRlKGF4MjVfcm91dGUgKiByb3V0ZSwgYXgyNV9hZGRyZXNzICphZGRyLAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JYXgyNV9yb3V0ZSAqYXgyNV9ydDsKLQotCWlmICgoYXgyNV9ydCA9IGF4MjVfZ2V0X3JvdXRlKGFkZHIsIGRldikpKQotCQlyZXR1cm4gYXgyNV9ydDsKLQotCXJvdXRlLT5uZXh0ICAgICA9IE5VTEw7Ci0JYXRvbWljX3NldCgmcm91dGUtPnJlZiwgMSk7Ci0Jcm91dGUtPmNhbGxzaWduID0gKmFkZHI7Ci0Jcm91dGUtPmRldiAgICAgID0gZGV2OwotCXJvdXRlLT5kaWdpcGVhdCA9IE5VTEw7Ci0Jcm91dGUtPmlwX21vZGUgID0gJyAnOwotCi0JcmV0dXJuIHJvdXRlOwotfQotCiBzdHJ1Y3Qgc2tfYnVmZiAqYXgyNV9ydF9idWlsZF9wYXRoKHN0cnVjdCBza19idWZmICpza2IsIGF4MjVfYWRkcmVzcyAqc3JjLAogCWF4MjVfYWRkcmVzcyAqZGVzdCwgYXgyNV9kaWdpICpkaWdpKQogewpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV90aW1lci5jIGIvbmV0L2F4MjUvYXgyNV90aW1lci5jCmluZGV4IGVjMjU0MDUuLjcyNTk0ODYgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfdGltZXIuYworKysgYi9uZXQvYXgyNS9heDI1X3RpbWVyLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIENvcHlyaWdodCAoQykgRnJlZGVyaWMgUmlibGUgRjFPQVQgKGZyaWJsZUB0ZWFzZXIuZnIpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmFsZiBCYWVjaGxlIERPMUdSQiAocmFsZkBnbnUub3JnKQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMgYi9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYwppbmRleCBiZGI2NGMzLi4zNjlhNzViIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYworKysgYi9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYwpAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgTWlrZSBTaGF2ZXIgKHNoYXZlckB6ZXJva25vd2xlZGdlLmNvbSkKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDQ2OWVkYTAuLjc4OGVhN2EgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtMjQsNyArMjQsNiBAQAogCiAvKiBCbHVldG9vdGggYWRkcmVzcyBmYW1pbHkgYW5kIHNvY2tldHMuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC00OSw3ICs0OCw3IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMi44IgorI2RlZmluZSBWRVJTSU9OICIyLjEwIgogCiAvKiBCbHVldG9vdGggc29ja2V0cyAqLwogI2RlZmluZSBCVF9NQVhfUFJPVE8JOApAQCAtMzA4LDE0ICszMDcsMjIgQEAKIAogc3RhdGljIGludCBfX2luaXQgYnRfaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKIAlCVF9JTkZPKCJDb3JlIHZlciAlcyIsIFZFUlNJT04pOwogCi0Jc29ja19yZWdpc3RlcigmYnRfc29ja19mYW1pbHlfb3BzKTsKKwllcnIgPSBidF9zeXNmc19pbml0KCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzb2NrX3JlZ2lzdGVyKCZidF9zb2NrX2ZhbWlseV9vcHMpOworCWlmIChlcnIgPCAwKSB7CisJCWJ0X3N5c2ZzX2NsZWFudXAoKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAlCVF9JTkZPKCJIQ0kgZGV2aWNlIGFuZCBjb25uZWN0aW9uIG1hbmFnZXIgaW5pdGlhbGl6ZWQiKTsKIAotCWJ0X3N5c2ZzX2luaXQoKTsKLQogCWhjaV9zb2NrX2luaXQoKTsKIAogCXJldHVybiAwOwpAQCAtMzI1LDkgKzMzMiw5IEBACiB7CiAJaGNpX3NvY2tfY2xlYW51cCgpOwogCi0JYnRfc3lzZnNfY2xlYW51cCgpOwotCiAJc29ja191bnJlZ2lzdGVyKFBGX0JMVUVUT09USCk7CisKKwlidF9zeXNmc19jbGVhbnVwKCk7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChidF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCmluZGV4IGQ5MDhkNDkuLmU2MjAwNjEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwpAQCAtMjksNyArMjksNiBAQAogICogJElkOiBjb3JlLmMsdiAxLjIwIDIwMDIvMDgvMDQgMjE6MjM6NTggbWF4ayBFeHAgJAogICovIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwppbmRleCA5MjEyMDRmLi43ZjdiMjdkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiAkSWQ6IG5ldGRldi5jLHYgMS44IDIwMDIvMDgvMDQgMjE6MjM6NTggbWF4ayBFeHAgJAogICovIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCmluZGV4IDJiZmU3OTYuLjI4YzU1ODMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYwpAQCAtMjgsNyArMjgsNiBAQAogICogJElkOiBzb2NrLmMsdiAxLjQgMjAwMi8wOC8wNCAyMToyMzo1OCBtYXhrIEV4cCAkCiAgKi8gCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwppbmRleCBiMmU3ZTM4Li42ZmI0N2UwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKaW5kZXggOTAxZWZmNy4uMTgyMjU0YSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCkBAIC0yMCw3ICsyMCw2IEBACiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jCmluZGV4IDhmOGZhZDIuLjEwYWQ3ZmQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL3NvY2suYwpAQCAtMjAsNyArMjAsNiBAQAogICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggZjgxMmVkMS4uNDIwZWQ0ZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtMjQsNyArMjQsNiBAQAogCiAvKiBCbHVldG9vdGggSENJIGNvbm5lY3Rpb24gaGFuZGxpbmcuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xMTYsOCArMTE1LDggQEAKIAogc3RhdGljIHZvaWQgaGNpX2Nvbm5fdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSAodm9pZCAqKWFyZzsKLQlzdHJ1Y3QgaGNpX2RldiAgKmhkZXYgPSBjb25uLT5oZGV2OworCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9ICh2b2lkICopIGFyZzsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tPmhkZXY7CiAKIAlCVF9EQkcoImNvbm4gJXAgc3RhdGUgJWQiLCBjb25uLCBjb25uLT5zdGF0ZSk7CiAKQEAgLTEzMywxMSArMTMyLDEzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBoY2lfY29ubl9pbml0X3RpbWVyKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3N0YXRpYyB2b2lkIGhjaV9jb25uX2lkbGUodW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaW5pdF90aW1lcigmY29ubi0+dGltZXIpOwotCWNvbm4tPnRpbWVyLmZ1bmN0aW9uID0gaGNpX2Nvbm5fdGltZW91dDsKLQljb25uLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY29ubjsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CisKKwlCVF9EQkcoImNvbm4gJXAgbW9kZSAlZCIsIGNvbm4sIGNvbm4tPm1vZGUpOworCisJaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShjb25uKTsKIH0KIAogc3RydWN0IGhjaV9jb25uICpoY2lfY29ubl9hZGQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0KQpAQCAtMTQ2LDE3ICsxNDcsMjcgQEAKIAogCUJUX0RCRygiJXMgZHN0ICVzIiwgaGRldi0+bmFtZSwgYmF0b3N0cihkc3QpKTsKIAotCWlmICghKGNvbm4gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGNpX2Nvbm4pLCBHRlBfQVRPTUlDKSkpCisJY29ubiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoY2lfY29ubiksIEdGUF9BVE9NSUMpOworCWlmICghY29ubikKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGNvbm4sIDAsIHNpemVvZihzdHJ1Y3QgaGNpX2Nvbm4pKTsKIAogCWJhY3B5KCZjb25uLT5kc3QsIGRzdCk7Ci0JY29ubi0+dHlwZSAgID0gdHlwZTsKIAljb25uLT5oZGV2ICAgPSBoZGV2OworCWNvbm4tPnR5cGUgICA9IHR5cGU7CisJY29ubi0+bW9kZSAgID0gSENJX0NNX0FDVElWRTsKIAljb25uLT5zdGF0ZSAgPSBCVF9PUEVOOwogCisJY29ubi0+cG93ZXJfc2F2ZSA9IDE7CisKIAlza2JfcXVldWVfaGVhZF9pbml0KCZjb25uLT5kYXRhX3EpOwotCWhjaV9jb25uX2luaXRfdGltZXIoY29ubik7CisKKwlpbml0X3RpbWVyKCZjb25uLT5kaXNjX3RpbWVyKTsKKwljb25uLT5kaXNjX3RpbWVyLmZ1bmN0aW9uID0gaGNpX2Nvbm5fdGltZW91dDsKKwljb25uLT5kaXNjX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgY29ubjsKKworCWluaXRfdGltZXIoJmNvbm4tPmlkbGVfdGltZXIpOworCWNvbm4tPmlkbGVfdGltZXIuZnVuY3Rpb24gPSBoY2lfY29ubl9pZGxlOworCWNvbm4tPmlkbGVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjb25uOwogCiAJYXRvbWljX3NldCgmY29ubi0+cmVmY250LCAwKTsKIApAQCAtMTc5LDcgKzE5MCw5IEBACiAKIAlCVF9EQkcoIiVzIGNvbm4gJXAgaGFuZGxlICVkIiwgaGRldi0+bmFtZSwgY29ubiwgY29ubi0+aGFuZGxlKTsKIAotCWhjaV9jb25uX2RlbF90aW1lcihjb25uKTsKKwlkZWxfdGltZXIoJmNvbm4tPmlkbGVfdGltZXIpOworCisJZGVsX3RpbWVyKCZjb25uLT5kaXNjX3RpbWVyKTsKIAogCWlmIChjb25uLT50eXBlID09IFNDT19MSU5LKSB7CiAJCXN0cnVjdCBoY2lfY29ubiAqYWNsID0gY29ubi0+bGluazsKQEAgLTM2NSw2ICszNzgsNzAgQEAKIH0KIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fc3dpdGNoX3JvbGUpOwogCisvKiBFbnRlciBhY3RpdmUgbW9kZSAqLwordm9pZCBoY2lfY29ubl9lbnRlcl9hY3RpdmVfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLT5oZGV2OworCisJQlRfREJHKCJjb25uICVwIG1vZGUgJWQiLCBjb25uLCBjb25uLT5tb2RlKTsKKworCWlmICh0ZXN0X2JpdChIQ0lfUkFXLCAmaGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZiAoY29ubi0+bW9kZSAhPSBIQ0lfQ01fU05JRkYgfHwgIWNvbm4tPnBvd2VyX3NhdmUpCisJCWdvdG8gdGltZXI7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fTU9ERV9DSEFOR0VfUEVORCwgJmNvbm4tPnBlbmQpKSB7CisJCXN0cnVjdCBoY2lfY3BfZXhpdF9zbmlmZl9tb2RlIGNwOworCQljcC5oYW5kbGUgPSBfX2NwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CisJCWhjaV9zZW5kX2NtZChoZGV2LCBPR0ZfTElOS19QT0xJQ1ksCisJCQkJT0NGX0VYSVRfU05JRkZfTU9ERSwgc2l6ZW9mKGNwKSwgJmNwKTsKKwl9CisKK3RpbWVyOgorCWlmIChoZGV2LT5pZGxlX3RpbWVvdXQgPiAwKQorCQltb2RfdGltZXIoJmNvbm4tPmlkbGVfdGltZXIsCisJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoZGV2LT5pZGxlX3RpbWVvdXQpKTsKK30KKworLyogRW50ZXIgc25pZmYgbW9kZSAqLwordm9pZCBoY2lfY29ubl9lbnRlcl9zbmlmZl9tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tPmhkZXY7CisKKwlCVF9EQkcoImNvbm4gJXAgbW9kZSAlZCIsIGNvbm4sIGNvbm4tPm1vZGUpOworCisJaWYgKHRlc3RfYml0KEhDSV9SQVcsICZoZGV2LT5mbGFncykpCisJCXJldHVybjsKKworCWlmICghbG1wX3NuaWZmX2NhcGFibGUoaGRldikgfHwgIWxtcF9zbmlmZl9jYXBhYmxlKGNvbm4pKQorCQlyZXR1cm47CisKKwlpZiAoY29ubi0+bW9kZSAhPSBIQ0lfQ01fQUNUSVZFIHx8ICEoY29ubi0+bGlua19wb2xpY3kgJiBIQ0lfTFBfU05JRkYpKQorCQlyZXR1cm47CisKKwlpZiAobG1wX3NuaWZmc3Vicl9jYXBhYmxlKGhkZXYpICYmIGxtcF9zbmlmZnN1YnJfY2FwYWJsZShjb25uKSkgeworCQlzdHJ1Y3QgaGNpX2NwX3NuaWZmX3N1YnJhdGUgY3A7CisJCWNwLmhhbmRsZSAgICAgICAgICAgICA9IF9fY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKKwkJY3AubWF4X2xhdGVuY3kgICAgICAgID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwkJY3AubWluX3JlbW90ZV90aW1lb3V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwkJY3AubWluX2xvY2FsX3RpbWVvdXQgID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwkJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9MSU5LX1BPTElDWSwKKwkJCQlPQ0ZfU05JRkZfU1VCUkFURSwgc2l6ZW9mKGNwKSwgJmNwKTsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fTU9ERV9DSEFOR0VfUEVORCwgJmNvbm4tPnBlbmQpKSB7CisJCXN0cnVjdCBoY2lfY3Bfc25pZmZfbW9kZSBjcDsKKwkJY3AuaGFuZGxlICAgICAgID0gX19jcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOworCQljcC5tYXhfaW50ZXJ2YWwgPSBfX2NwdV90b19sZTE2KGhkZXYtPnNuaWZmX21heF9pbnRlcnZhbCk7CisJCWNwLm1pbl9pbnRlcnZhbCA9IF9fY3B1X3RvX2xlMTYoaGRldi0+c25pZmZfbWluX2ludGVydmFsKTsKKwkJY3AuYXR0ZW1wdCAgICAgID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig0KTsKKwkJY3AudGltZW91dCAgICAgID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKTsKKwkJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9MSU5LX1BPTElDWSwKKwkJCQlPQ0ZfU05JRkZfTU9ERSwgc2l6ZW9mKGNwKSwgJmNwKTsKKwl9Cit9CisKIC8qIERyb3AgYWxsIGNvbm5lY3Rpb24gb24gdGhlIGRldmljZSAqLwogdm9pZCBoY2lfY29ubl9oYXNoX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IGE0OWE2OTcuLjU0ZThlNWUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyogQmx1ZXRvb3RoIEhDSSBjb3JlLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCkBAIC00MTIsNyArNDExLDcgQEAKIAl9CiAJaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CiAKLQl0aW1lbyA9IGlyLmxlbmd0aCAqIDIgKiBIWjsKKwl0aW1lbyA9IGlyLmxlbmd0aCAqIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CiAJaWYgKGRvX2lucXVpcnkgJiYgKGVyciA9IGhjaV9yZXF1ZXN0KGhkZXYsIGhjaV9pbnFfcmVxLCAodW5zaWduZWQgbG9uZykmaXIsIHRpbWVvKSkgPCAwKQogCQlnb3RvIGRvbmU7CiAKQEAgLTQ4MCw3ICs0NzksOCBAQAogCQlzZXRfYml0KEhDSV9JTklULCAmaGRldi0+ZmxhZ3MpOwogCiAJCS8vX19oY2lfcmVxdWVzdChoZGV2LCBoY2lfcmVzZXRfcmVxLCAwLCBIWik7Ci0JCXJldCA9IF9faGNpX3JlcXVlc3QoaGRldiwgaGNpX2luaXRfcmVxLCAwLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwkJcmV0ID0gX19oY2lfcmVxdWVzdChoZGV2LCBoY2lfaW5pdF9yZXEsIDAsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoSENJX0lOSVRfVElNRU9VVCkpOwogCiAJCWNsZWFyX2JpdChIQ0lfSU5JVCwgJmhkZXYtPmZsYWdzKTsKIAl9CkBAIC01NDcsNyArNTQ3LDggQEAKIAlhdG9taWNfc2V0KCZoZGV2LT5jbWRfY250LCAxKTsKIAlpZiAoIXRlc3RfYml0KEhDSV9SQVcsICZoZGV2LT5mbGFncykpIHsKIAkJc2V0X2JpdChIQ0lfSU5JVCwgJmhkZXYtPmZsYWdzKTsKLQkJX19oY2lfcmVxdWVzdChoZGV2LCBoY2lfcmVzZXRfcmVxLCAwLCBIWi80KTsKKwkJX19oY2lfcmVxdWVzdChoZGV2LCBoY2lfcmVzZXRfcmVxLCAwLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDI1MCkpOwogCQljbGVhcl9iaXQoSENJX0lOSVQsICZoZGV2LT5mbGFncyk7CiAJfQogCkBAIC02MjAsNyArNjIxLDggQEAKIAloZGV2LT5hY2xfY250ID0gMDsgaGRldi0+c2NvX2NudCA9IDA7CiAKIAlpZiAoIXRlc3RfYml0KEhDSV9SQVcsICZoZGV2LT5mbGFncykpCi0JCXJldCA9IF9faGNpX3JlcXVlc3QoaGRldiwgaGNpX3Jlc2V0X3JlcSwgMCwgSENJX0lOSVRfVElNRU9VVCk7CisJCXJldCA9IF9faGNpX3JlcXVlc3QoaGRldiwgaGNpX3Jlc2V0X3JlcSwgMCwKKwkJCQkJbXNlY3NfdG9famlmZmllcyhIQ0lfSU5JVF9USU1FT1VUKSk7CiAKIGRvbmU6CiAJdGFza2xldF9lbmFibGUoJmhkZXYtPnR4X3Rhc2spOwpAQCAtNjU4LDcgKzY2MCw4IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSENJU0VUQVVUSDoKLQkJZXJyID0gaGNpX3JlcXVlc3QoaGRldiwgaGNpX2F1dGhfcmVxLCBkci5kZXZfb3B0LCBIQ0lfSU5JVF9USU1FT1VUKTsKKwkJZXJyID0gaGNpX3JlcXVlc3QoaGRldiwgaGNpX2F1dGhfcmVxLCBkci5kZXZfb3B0LAorCQkJCQltc2Vjc190b19qaWZmaWVzKEhDSV9JTklUX1RJTUVPVVQpKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhDSVNFVEVOQ1JZUFQ6CkBAIC02NjksMTggKzY3MiwxOSBAQAogCiAJCWlmICghdGVzdF9iaXQoSENJX0FVVEgsICZoZGV2LT5mbGFncykpIHsKIAkJCS8qIEF1dGggbXVzdCBiZSBlbmFibGVkIGZpcnN0ICovCi0JCQllcnIgPSBoY2lfcmVxdWVzdChoZGV2LCBoY2lfYXV0aF9yZXEsCi0JCQkJCWRyLmRldl9vcHQsIEhDSV9JTklUX1RJTUVPVVQpOworCQkJZXJyID0gaGNpX3JlcXVlc3QoaGRldiwgaGNpX2F1dGhfcmVxLCBkci5kZXZfb3B0LAorCQkJCQltc2Vjc190b19qaWZmaWVzKEhDSV9JTklUX1RJTUVPVVQpKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAJCX0KIAotCQllcnIgPSBoY2lfcmVxdWVzdChoZGV2LCBoY2lfZW5jcnlwdF9yZXEsCi0JCQkJCWRyLmRldl9vcHQsIEhDSV9JTklUX1RJTUVPVVQpOworCQllcnIgPSBoY2lfcmVxdWVzdChoZGV2LCBoY2lfZW5jcnlwdF9yZXEsIGRyLmRldl9vcHQsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoSENJX0lOSVRfVElNRU9VVCkpOwogCQlicmVhazsKIAogCWNhc2UgSENJU0VUU0NBTjoKLQkJZXJyID0gaGNpX3JlcXVlc3QoaGRldiwgaGNpX3NjYW5fcmVxLCBkci5kZXZfb3B0LCBIQ0lfSU5JVF9USU1FT1VUKTsKKwkJZXJyID0gaGNpX3JlcXVlc3QoaGRldiwgaGNpX3NjYW5fcmVxLCBkci5kZXZfb3B0LAorCQkJCQltc2Vjc190b19qaWZmaWVzKEhDSV9JTklUX1RJTUVPVVQpKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhDSVNFVFBUWVBFOgpAQCAtODEzLDggKzgxNyw4IEBACiB7CiAJc2tiX3F1ZXVlX3B1cmdlKCZoZGV2LT5kcml2ZXJfaW5pdCk7CiAKLQkvKiB3aWxsIGZyZWUgdmlhIGNsYXNzIHJlbGVhc2UgKi8KLQljbGFzc19kZXZpY2VfcHV0KCZoZGV2LT5jbGFzc19kZXYpOworCS8qIHdpbGwgZnJlZSB2aWEgZGV2aWNlIHJlbGVhc2UgKi8KKwlwdXRfZGV2aWNlKCZoZGV2LT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChoY2lfZnJlZV9kZXYpOwogCkBAIC04NDksNiArODUzLDEwIEBACiAJaGRldi0+cGt0X3R5cGUgID0gKEhDSV9ETTEgfCBIQ0lfREgxIHwgSENJX0hWMSk7CiAJaGRldi0+bGlua19tb2RlID0gKEhDSV9MTV9BQ0NFUFQpOwogCisJaGRldi0+aWRsZV90aW1lb3V0ID0gMDsKKwloZGV2LT5zbmlmZl9tYXhfaW50ZXJ2YWwgPSA4MDA7CisJaGRldi0+c25pZmZfbWluX2ludGVydmFsID0gODA7CisKIAl0YXNrbGV0X2luaXQoJmhkZXYtPmNtZF90YXNrLCBoY2lfY21kX3Rhc2ssKHVuc2lnbmVkIGxvbmcpIGhkZXYpOwogCXRhc2tsZXRfaW5pdCgmaGRldi0+cnhfdGFzaywgaGNpX3J4X3Rhc2ssICh1bnNpZ25lZCBsb25nKSBoZGV2KTsKIAl0YXNrbGV0X2luaXQoJmhkZXYtPnR4X3Rhc2ssIGhjaV90eF90YXNrLCAodW5zaWduZWQgbG9uZykgaGRldik7CkBAIC0xMjIxLDYgKzEyMjksOSBAQAogCXdoaWxlIChoZGV2LT5hY2xfY250ICYmIChjb25uID0gaGNpX2xvd19zZW50KGhkZXYsIEFDTF9MSU5LLCAmcXVvdGUpKSkgewogCQl3aGlsZSAocXVvdGUtLSAmJiAoc2tiID0gc2tiX2RlcXVldWUoJmNvbm4tPmRhdGFfcSkpKSB7CiAJCQlCVF9EQkcoInNrYiAlcCBsZW4gJWQiLCBza2IsIHNrYi0+bGVuKTsKKworCQkJaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoY29ubik7CisKIAkJCWhjaV9zZW5kX2ZyYW1lKHNrYik7CiAJCQloZGV2LT5hY2xfbGFzdF90eCA9IGppZmZpZXM7CiAKQEAgLTEyOTksNiArMTMxMCw4IEBACiAJaWYgKGNvbm4pIHsKIAkJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAKKwkJaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoY29ubik7CisKIAkJLyogU2VuZCB0byB1cHBlciBwcm90b2NvbCAqLwogCQlpZiAoKGhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF0pICYmIGhwLT5yZWN2X2FjbGRhdGEpIHsKIAkJCWhwLT5yZWN2X2FjbGRhdGEoY29ubiwgc2tiLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCBlYjY0NTU1Li4zODk2ZGFiIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyogQmx1ZXRvb3RoIEhDSSBldmVudCBoYW5kbGluZy4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTg0LDYgKzgzLDggQEAKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CiAJc3RydWN0IGhjaV9ycF9yb2xlX2Rpc2NvdmVyeSAqcmQ7CisJc3RydWN0IGhjaV9ycF93cml0ZV9saW5rX3BvbGljeSAqbHA7CisJdm9pZCAqc2VudDsKIAogCUJUX0RCRygiJXMgb2NmIDB4JXgiLCBoZGV2LT5uYW1lLCBvY2YpOwogCkBAIC0xMDcsNiArMTA4LDI3IEBACiAJCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCQlicmVhazsKIAorCWNhc2UgT0NGX1dSSVRFX0xJTktfUE9MSUNZOgorCQlzZW50ID0gaGNpX3NlbnRfY21kX2RhdGEoaGRldiwgT0dGX0xJTktfUE9MSUNZLCBPQ0ZfV1JJVEVfTElOS19QT0xJQ1kpOworCQlpZiAoIXNlbnQpCisJCQlicmVhazsKKworCQlscCA9IChzdHJ1Y3QgaGNpX3JwX3dyaXRlX2xpbmtfcG9saWN5ICopIHNrYi0+ZGF0YTsKKworCQlpZiAobHAtPnN0YXR1cykKKwkJCWJyZWFrOworCisJCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUobHAtPmhhbmRsZSkpOworCQlpZiAoY29ubikgeworCQkJX19sZTE2IHBvbGljeSA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoc2VudCArIDIpKTsKKwkJCWNvbm4tPmxpbmtfcG9saWN5ID0gX19sZTE2X3RvX2NwdShwb2xpY3kpOworCQl9CisKKwkJaGNpX2Rldl91bmxvY2soaGRldik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJQlRfREJHKCIlczogQ29tbWFuZCBjb21wbGV0ZTogb2dmIExJTktfUE9MSUNZIG9jZiAleCIsIAogCQkJCWhkZXYtPm5hbWUsIG9jZik7CkBAIC0yNzUsNyArMjk3LDcgQEAKIC8qIENvbW1hbmQgQ29tcGxldGUgT0dGIElORk9fUEFSQU0gICovCiBzdGF0aWMgdm9pZCBoY2lfY2NfaW5mb19wYXJhbShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgX191MTYgb2NmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBoY2lfcnBfcmVhZF9sb2NfZmVhdHVyZXMgKmxmOworCXN0cnVjdCBoY2lfcnBfcmVhZF9sb2NhbF9mZWF0dXJlcyAqbGY7CiAJc3RydWN0IGhjaV9ycF9yZWFkX2J1ZmZlcl9zaXplICpiczsKIAlzdHJ1Y3QgaGNpX3JwX3JlYWRfYmRfYWRkciAqYmE7CiAKQEAgLTI4Myw3ICszMDUsNyBAQAogCiAJc3dpdGNoIChvY2YpIHsKIAljYXNlIE9DRl9SRUFEX0xPQ0FMX0ZFQVRVUkVTOgotCQlsZiA9IChzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jX2ZlYXR1cmVzICopIHNrYi0+ZGF0YTsKKwkJbGYgPSAoc3RydWN0IGhjaV9ycF9yZWFkX2xvY2FsX2ZlYXR1cmVzICopIHNrYi0+ZGF0YTsKIAogCQlpZiAobGYtPnN0YXR1cykgewogCQkJQlRfREJHKCIlcyBSRUFEX0xPQ0FMX0ZFQVRVUkVTIGZhaWxlZCAlZCIsIGhkZXYtPm5hbWUsIGxmLT5zdGF0dXMpOwpAQCAtMzIwLDkgKzM0MiwxNyBAQAogCQl9CiAKIAkJaGRldi0+YWNsX210dSAgPSBfX2xlMTZfdG9fY3B1KGJzLT5hY2xfbXR1KTsKLQkJaGRldi0+c2NvX210dSAgPSBicy0+c2NvX210dSA/IGJzLT5zY29fbXR1IDogNjQ7Ci0JCWhkZXYtPmFjbF9wa3RzID0gaGRldi0+YWNsX2NudCA9IF9fbGUxNl90b19jcHUoYnMtPmFjbF9tYXhfcGt0KTsKLQkJaGRldi0+c2NvX3BrdHMgPSBoZGV2LT5zY29fY250ID0gX19sZTE2X3RvX2NwdShicy0+c2NvX21heF9wa3QpOworCQloZGV2LT5zY29fbXR1ICA9IGJzLT5zY29fbXR1OworCQloZGV2LT5hY2xfcGt0cyA9IF9fbGUxNl90b19jcHUoYnMtPmFjbF9tYXhfcGt0KTsKKwkJaGRldi0+c2NvX3BrdHMgPSBfX2xlMTZfdG9fY3B1KGJzLT5zY29fbWF4X3BrdCk7CisKKwkJaWYgKHRlc3RfYml0KEhDSV9RVUlSS19GSVhVUF9CVUZGRVJfU0laRSwgJmhkZXYtPnF1aXJrcykpIHsKKwkJCWhkZXYtPnNjb19tdHUgID0gNjQ7CisJCQloZGV2LT5zY29fcGt0cyA9IDg7CisJCX0KKworCQloZGV2LT5hY2xfY250ID0gaGRldi0+YWNsX3BrdHM7CisJCWhkZXYtPnNjb19jbnQgPSBoZGV2LT5zY29fcGt0czsKIAogCQlCVF9EQkcoIiVzIG10dTogYWNsICVkLCBzY28gJWQgbWF4X3BrdDogYWNsICVkLCBzY28gJWQiLCBoZGV2LT5uYW1lLAogCQkJaGRldi0+YWNsX210dSwgaGRldi0+c2NvX210dSwgaGRldi0+YWNsX3BrdHMsIGhkZXYtPnNjb19wa3RzKTsKQEAgLTQ0MCw4ICs0NzAsNDYgQEAKIAlCVF9EQkcoIiVzIG9jZiAweCV4IiwgaGRldi0+bmFtZSwgb2NmKTsKIAogCXN3aXRjaCAob2NmKSB7CisJY2FzZSBPQ0ZfU05JRkZfTU9ERToKKwkJaWYgKHN0YXR1cykgeworCQkJc3RydWN0IGhjaV9jb25uICpjb25uOworCQkJc3RydWN0IGhjaV9jcF9zbmlmZl9tb2RlICpjcCA9IGhjaV9zZW50X2NtZF9kYXRhKGhkZXYsIE9HRl9MSU5LX1BPTElDWSwgT0NGX1NOSUZGX01PREUpOworCisJCQlpZiAoIWNwKQorCQkJCWJyZWFrOworCisJCQloY2lfZGV2X2xvY2soaGRldik7CisKKwkJCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShjcC0+aGFuZGxlKSk7CisJCQlpZiAoY29ubikgeworCQkJCWNsZWFyX2JpdChIQ0lfQ09OTl9NT0RFX0NIQU5HRV9QRU5ELCAmY29ubi0+cGVuZCk7CisJCQl9CisKKwkJCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBPQ0ZfRVhJVF9TTklGRl9NT0RFOgorCQlpZiAoc3RhdHVzKSB7CisJCQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisJCQlzdHJ1Y3QgaGNpX2NwX2V4aXRfc25pZmZfbW9kZSAqY3AgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBPR0ZfTElOS19QT0xJQ1ksIE9DRl9FWElUX1NOSUZGX01PREUpOworCisJCQlpZiAoIWNwKQorCQkJCWJyZWFrOworCisJCQloY2lfZGV2X2xvY2soaGRldik7CisKKwkJCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShjcC0+aGFuZGxlKSk7CisJCQlpZiAoY29ubikgeworCQkJCWNsZWFyX2JpdChIQ0lfQ09OTl9NT0RFX0NIQU5HRV9QRU5ELCAmY29ubi0+cGVuZCk7CisJCQl9CisKKwkJCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCQl9CisJCWJyZWFrOworCiAJZGVmYXVsdDoKLQkJQlRfREJHKCIlcyBDb21tYW5kIHN0YXR1czogb2dmIEhPU1RfUE9MSUNZIG9jZiAleCIsIGhkZXYtPm5hbWUsIG9jZik7CisJCUJUX0RCRygiJXMgQ29tbWFuZCBzdGF0dXM6IG9nZiBMSU5LX1BPTElDWSBvY2YgJXgiLCBoZGV2LT5uYW1lLCBvY2YpOwogCQlicmVhazsKIAl9CiB9CkBAIC02MjMsMTQgKzY5MSwxNiBAQAogCQllbHNlCiAJCQljcC5yb2xlID0gMHgwMTsgLyogUmVtYWluIHNsYXZlICovCiAKLQkJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9MSU5LX0NUTCwgT0NGX0FDQ0VQVF9DT05OX1JFUSwgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9MSU5LX0NUTCwKKwkJCQlPQ0ZfQUNDRVBUX0NPTk5fUkVRLCBzaXplb2YoY3ApLCAmY3ApOwogCX0gZWxzZSB7CiAJCS8qIENvbm5lY3Rpb24gcmVqZWN0ZWQgKi8KIAkJc3RydWN0IGhjaV9jcF9yZWplY3RfY29ubl9yZXEgY3A7CiAKIAkJYmFjcHkoJmNwLmJkYWRkciwgJmV2LT5iZGFkZHIpOwogCQljcC5yZWFzb24gPSAweDBmOwotCQloY2lfc2VuZF9jbWQoaGRldiwgT0dGX0xJTktfQ1RMLCBPQ0ZfUkVKRUNUX0NPTk5fUkVRLCBzaXplb2YoY3ApLCAmY3ApOworCQloY2lfc2VuZF9jbWQoaGRldiwgT0dGX0xJTktfQ1RMLAorCQkJCU9DRl9SRUpFQ1RfQ09OTl9SRVEsIHNpemVvZihjcCksICZjcCk7CiAJfQogfQogCkBAIC02MzgsNyArNzA4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY29ubl9jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9ldl9jb25uX2NvbXBsZXRlICpldiA9IChzdHJ1Y3QgaGNpX2V2X2Nvbm5fY29tcGxldGUgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9IE5VTEw7CisJc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwogCkBAIC02NjAsMTIgKzczMCwyMSBAQAogCQlpZiAodGVzdF9iaXQoSENJX0VOQ1JZUFQsICZoZGV2LT5mbGFncykpCiAJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX0VOQ1JZUFQ7CiAKKwkJLyogR2V0IHJlbW90ZSBmZWF0dXJlcyAqLworCQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykgeworCQkJc3RydWN0IGhjaV9jcF9yZWFkX3JlbW90ZV9mZWF0dXJlcyBjcDsKKwkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CisJCQloY2lfc2VuZF9jbWQoaGRldiwgT0dGX0xJTktfQ1RMLAorCQkJCU9DRl9SRUFEX1JFTU9URV9GRUFUVVJFUywgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJfQorCiAJCS8qIFNldCBsaW5rIHBvbGljeSAqLwogCQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSyAmJiBoZGV2LT5saW5rX3BvbGljeSkgewogCQkJc3RydWN0IGhjaV9jcF93cml0ZV9saW5rX3BvbGljeSBjcDsKIAkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CiAJCQljcC5wb2xpY3kgPSBfX2NwdV90b19sZTE2KGhkZXYtPmxpbmtfcG9saWN5KTsKLQkJCWhjaV9zZW5kX2NtZChoZGV2LCBPR0ZfTElOS19QT0xJQ1ksIE9DRl9XUklURV9MSU5LX1BPTElDWSwgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJCWhjaV9zZW5kX2NtZChoZGV2LCBPR0ZfTElOS19QT0xJQ1ksCisJCQkJT0NGX1dSSVRFX0xJTktfUE9MSUNZLCBzaXplb2YoY3ApLCAmY3ApOwogCQl9CiAKIAkJLyogU2V0IHBhY2tldCB0eXBlIGZvciBpbmNvbWluZyBjb25uZWN0aW9uICovCkBAIC02NzYsNyArNzU1LDggQEAKIAkJCQlfX2NwdV90b19sZTE2KGhkZXYtPnBrdF90eXBlICYgQUNMX1BUWVBFX01BU0spOgogCQkJCV9fY3B1X3RvX2xlMTYoaGRldi0+cGt0X3R5cGUgJiBTQ09fUFRZUEVfTUFTSyk7CiAKLQkJCWhjaV9zZW5kX2NtZChoZGV2LCBPR0ZfTElOS19DVEwsIE9DRl9DSEFOR0VfQ09OTl9QVFlQRSwgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJCWhjaV9zZW5kX2NtZChoZGV2LCBPR0ZfTElOS19DVEwsCisJCQkJT0NGX0NIQU5HRV9DT05OX1BUWVBFLCBzaXplb2YoY3ApLCAmY3ApOwogCQl9CiAJfSBlbHNlCiAJCWNvbm4tPnN0YXRlID0gQlRfQ0xPU0VEOwpAQCAtNzA0LDggKzc4NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Rpc2Nvbm5fY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBoY2lfZXZfZGlzY29ubl9jb21wbGV0ZSAqZXYgPSAoc3RydWN0IGhjaV9ldl9kaXNjb25uX2NvbXBsZXRlICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBOVUxMOwotCV9fdTE2IGhhbmRsZSA9IF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSk7CisJc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJQlRfREJHKCIlcyBzdGF0dXMgJWQiLCBoZGV2LT5uYW1lLCBldi0+c3RhdHVzKTsKIApAQCAtNzE0LDcgKzc5Myw3IEBACiAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKLQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIGhhbmRsZSk7CisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubikgewogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAkJaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKGNvbm4sIGV2LT5yZWFzb24pOwpAQCAtNzcxLDcgKzg1MCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3JvbGVfY2hhbmdlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaGNpX2V2X3JvbGVfY2hhbmdlICpldiA9IChzdHJ1Y3QgaGNpX2V2X3JvbGVfY2hhbmdlICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBOVUxMOworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKIAogCUJUX0RCRygiJXMgc3RhdHVzICVkIiwgaGRldi0+bmFtZSwgZXYtPnN0YXR1cyk7CiAKQEAgLTc5NCwxOCArODczLDQzIEBACiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKLS8qIEF1dGhlbnRpY2F0aW9uIENvbXBsZXRlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaGNpX2F1dGhfY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorLyogTW9kZSBDaGFuZ2UgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfbW9kZV9jaGFuZ2VfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBoY2lfZXZfYXV0aF9jb21wbGV0ZSAqZXYgPSAoc3RydWN0IGhjaV9ldl9hdXRoX2NvbXBsZXRlICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBOVUxMOwotCV9fdTE2IGhhbmRsZSA9IF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSk7CisJc3RydWN0IGhjaV9ldl9tb2RlX2NoYW5nZSAqZXYgPSAoc3RydWN0IGhjaV9ldl9tb2RlX2NoYW5nZSAqKSBza2ItPmRhdGE7CisJc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJQlRfREJHKCIlcyBzdGF0dXMgJWQiLCBoZGV2LT5uYW1lLCBldi0+c3RhdHVzKTsKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAotCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgaGFuZGxlKTsKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOworCWlmIChjb25uKSB7CisJCWNvbm4tPm1vZGUgPSBldi0+bW9kZTsKKwkJY29ubi0+aW50ZXJ2YWwgPSBfX2xlMTZfdG9fY3B1KGV2LT5pbnRlcnZhbCk7CisKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX0NPTk5fTU9ERV9DSEFOR0VfUEVORCwgJmNvbm4tPnBlbmQpKSB7CisJCQlpZiAoY29ubi0+bW9kZSA9PSBIQ0lfQ01fQUNUSVZFKQorCQkJCWNvbm4tPnBvd2VyX3NhdmUgPSAxOworCQkJZWxzZQorCQkJCWNvbm4tPnBvd2VyX3NhdmUgPSAwOworCQl9CisJfQorCisJaGNpX2Rldl91bmxvY2soaGRldik7Cit9CisKKy8qIEF1dGhlbnRpY2F0aW9uIENvbXBsZXRlICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2F1dGhfY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfZXZfYXV0aF9jb21wbGV0ZSAqZXYgPSAoc3RydWN0IGhjaV9ldl9hdXRoX2NvbXBsZXRlICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwlCVF9EQkcoIiVzIHN0YXR1cyAlZCIsIGhkZXYtPm5hbWUsIGV2LT5zdGF0dXMpOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubikgewogCQlpZiAoIWV2LT5zdGF0dXMpCiAJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX0FVVEg7CkBAIC04MjAsOCArOTI0LDcgQEAKIAkJCQljcC5oYW5kbGUgID0gX19jcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwogCQkJCWNwLmVuY3J5cHQgPSAxOwogCQkJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBPR0ZfTElOS19DVEwsCi0JCQkJCQlPQ0ZfU0VUX0NPTk5fRU5DUllQVCwKLQkJCQkJCXNpemVvZihjcCksICZjcCk7CisJCQkJCU9DRl9TRVRfQ09OTl9FTkNSWVBULCBzaXplb2YoY3ApLCAmY3ApOwogCQkJfSBlbHNlIHsKIAkJCQljbGVhcl9iaXQoSENJX0NPTk5fRU5DUllQVF9QRU5ELCAmY29ubi0+cGVuZCk7CiAJCQkJaGNpX2VuY3J5cHRfY2ZtKGNvbm4sIGV2LT5zdGF0dXMsIDB4MDApOwpAQCAtODM2LDE0ICs5MzksMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZW5jcnlwdF9jaGFuZ2VfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBoY2lfZXZfZW5jcnlwdF9jaGFuZ2UgKmV2ID0gKHN0cnVjdCBoY2lfZXZfZW5jcnlwdF9jaGFuZ2UgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9IE5VTEw7Ci0JX191MTYgaGFuZGxlID0gX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CiAKIAlCVF9EQkcoIiVzIHN0YXR1cyAlZCIsIGhkZXYtPm5hbWUsIGV2LT5zdGF0dXMpOwogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBoYW5kbGUpOworCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKSk7CiAJaWYgKGNvbm4pIHsKIAkJaWYgKCFldi0+c3RhdHVzKSB7CiAJCQlpZiAoZXYtPmVuY3J5cHQpCkBAIC04NjQsMTQgKzk2NiwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9jaGFuZ2VfY29ubl9saW5rX2tleV9jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9ldl9jaGFuZ2VfY29ubl9saW5rX2tleV9jb21wbGV0ZSAqZXYgPSAoc3RydWN0IGhjaV9ldl9jaGFuZ2VfY29ubl9saW5rX2tleV9jb21wbGV0ZSAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGhjaV9jb25uICpjb25uID0gTlVMTDsKLQlfX3UxNiBoYW5kbGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpOworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKIAogCUJUX0RCRygiJXMgc3RhdHVzICVkIiwgaGRldi0+bmFtZSwgZXYtPnN0YXR1cyk7CiAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKLQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIGhhbmRsZSk7CisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubikgewogCQlpZiAoIWV2LT5zdGF0dXMpCiAJCQljb25uLT5saW5rX21vZGUgfD0gSENJX0xNX1NFQ1VSRTsKQEAgLTg5OSwxOCArMTAwMCwzNSBAQAogewogfQogCi0vKiBDbG9jayBPZmZzZXQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY2xvY2tfb2Zmc2V0X2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKKy8qIFJlbW90ZSBGZWF0dXJlcyAqLworc3RhdGljIGlubGluZSB2b2lkIGhjaV9yZW1vdGVfZmVhdHVyZXNfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBoY2lfZXZfY2xvY2tfb2Zmc2V0ICpldiA9IChzdHJ1Y3QgaGNpX2V2X2Nsb2NrX29mZnNldCAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGhjaV9jb25uICpjb25uID0gTlVMTDsKLQlfX3UxNiBoYW5kbGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpOworCXN0cnVjdCBoY2lfZXZfcmVtb3RlX2ZlYXR1cmVzICpldiA9IChzdHJ1Y3QgaGNpX2V2X3JlbW90ZV9mZWF0dXJlcyAqKSBza2ItPmRhdGE7CisJc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJQlRfREJHKCIlcyBzdGF0dXMgJWQiLCBoZGV2LT5uYW1lLCBldi0+c3RhdHVzKTsKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAotCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgaGFuZGxlKTsKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOworCWlmIChjb25uICYmICFldi0+c3RhdHVzKSB7CisJCW1lbWNweShjb25uLT5mZWF0dXJlcywgZXYtPmZlYXR1cmVzLCBzaXplb2YoY29ubi0+ZmVhdHVyZXMpKTsKKwl9CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKworLyogQ2xvY2sgT2Zmc2V0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2Nsb2NrX29mZnNldF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9ldl9jbG9ja19vZmZzZXQgKmV2ID0gKHN0cnVjdCBoY2lfZXZfY2xvY2tfb2Zmc2V0ICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwlCVF9EQkcoIiVzIHN0YXR1cyAlZCIsIGhkZXYtPm5hbWUsIGV2LT5zdGF0dXMpOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubiAmJiAhZXYtPnN0YXR1cykgewogCQlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAqaWU7CiAKQEAgLTk0MSw2ICsxMDU5LDIzIEBACiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKKy8qIFNuaWZmIFN1YnJhdGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfc25pZmZfc3VicmF0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9ldl9zbmlmZl9zdWJyYXRlICpldiA9IChzdHJ1Y3QgaGNpX2V2X3NuaWZmX3N1YnJhdGUgKikgc2tiLT5kYXRhOworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKKworCUJUX0RCRygiJXMgc3RhdHVzICVkIiwgaGRldi0+bmFtZSwgZXYtPnN0YXR1cyk7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOworCWlmIChjb25uKSB7CisJfQorCisJaGNpX2Rldl91bmxvY2soaGRldik7Cit9CisKIHZvaWQgaGNpX2V2ZW50X3BhY2tldChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHN0cnVjdCBoY2lfZXZlbnRfaGRyICopIHNrYi0+ZGF0YTsKQEAgLTk4OSw2ICsxMTI0LDEwIEBACiAJCWhjaV9yb2xlX2NoYW5nZV9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9FVl9NT0RFX0NIQU5HRToKKwkJaGNpX21vZGVfY2hhbmdlX2V2dChoZGV2LCBza2IpOworCQlicmVhazsKKwogCWNhc2UgSENJX0VWX0FVVEhfQ09NUExFVEU6CiAJCWhjaV9hdXRoX2NvbXBsZXRlX2V2dChoZGV2LCBza2IpOwogCQlicmVhazsKQEAgLTEwMTMsNiArMTE1MiwxMCBAQAogCQloY2lfbGlua19rZXlfbm90aWZ5X2V2dChoZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgSENJX0VWX1JFTU9URV9GRUFUVVJFUzoKKwkJaGNpX3JlbW90ZV9mZWF0dXJlc19ldnQoaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAljYXNlIEhDSV9FVl9DTE9DS19PRkZTRVQ6CiAJCWhjaV9jbG9ja19vZmZzZXRfZXZ0KGhkZXYsIHNrYik7CiAJCWJyZWFrOwpAQCAtMTAyMSw2ICsxMTY0LDEwIEBACiAJCWhjaV9wc2Nhbl9yZXBfbW9kZV9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9FVl9TTklGRl9TVUJSQVRFOgorCQloY2lfc25pZmZfc3VicmF0ZV9ldnQoaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAljYXNlIEhDSV9FVl9DTURfU1RBVFVTOgogCQljcyA9IChzdHJ1Y3QgaGNpX2V2X2NtZF9zdGF0dXMgKikgc2tiLT5kYXRhOwogCQlza2JfcHVsbChza2IsIHNpemVvZihjcykpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCmluZGV4IDk3YmRlYzcuLjFhMzVkMzQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyogQmx1ZXRvb3RoIEhDSSBzb2NrZXRzLiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggMGVkMzg3NC4uMzk4N2QxNiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qIEJsdWV0b290aCBIQ0kgZHJpdmVyIG1vZGVsIHN1cHBvcnQuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKwogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogCkBAIC0xMiwzNSArMTMsMzUgQEAKICNkZWZpbmUgQlRfREJHKEQuLi4pCiAjZW5kaWYKIAotc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBoZGV2LT5uYW1lKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd190eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBoZGV2LT50eXBlKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19hZGRyZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWJkYWRkcl90IGJkYWRkcjsKIAliYXN3YXAoJmJkYWRkciwgJmhkZXYtPmJkYWRkcik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGJhdG9zdHIoJmJkYWRkcikpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2ZsYWdzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmxhZ3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2Rldik7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgaGRldi0+ZmxhZ3MpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2lucXVpcnlfY2FjaGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19pbnF1aXJ5X2NhY2hlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNsYXNzX2dldF9kZXZkYXRhKGNkZXYpOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGlucXVpcnlfY2FjaGUgKmNhY2hlID0gJmhkZXYtPmlucV9jYWNoZTsKIAlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAqZTsKIAlpbnQgbiA9IDA7CkBAIC02Miw5NCArNjMsMTkzIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHR5cGUsIFNfSVJVR08sIHNob3dfdHlwZSwgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYWRkcmVzcywgU19JUlVHTywgc2hvd19hZGRyZXNzLCBOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmbGFncywgU19JUlVHTywgc2hvd19mbGFncywgTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaW5xdWlyeV9jYWNoZSwgU19JUlVHTywgc2hvd19pbnF1aXJ5X2NhY2hlLCBOVUxMKTsKK3N0YXRpYyBzc2l6ZV90IHNob3dfaWRsZV90aW1lb3V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBoZGV2LT5pZGxlX3RpbWVvdXQpOworfQogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmJ0X2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX25hbWUsCi0JJmNsYXNzX2RldmljZV9hdHRyX3R5cGUsCi0JJmNsYXNzX2RldmljZV9hdHRyX2FkZHJlc3MsCi0JJmNsYXNzX2RldmljZV9hdHRyX2ZsYWdzLAotCSZjbGFzc19kZXZpY2VfYXR0cl9pbnF1aXJ5X2NhY2hlLAorc3RhdGljIHNzaXplX3Qgc3RvcmVfaWRsZV90aW1lb3V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqcHRyOworCV9fdTMyIHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnB0ciwgMTApOworCWlmIChwdHIgPT0gYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgIT0gMCAmJiAodmFsIDwgNTAwIHx8IHZhbCA+IDM2MDAwMDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhkZXYtPmlkbGVfdGltZW91dCA9IHZhbDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19zbmlmZl9tYXhfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGhkZXYtPnNuaWZmX21heF9pbnRlcnZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3NuaWZmX21heF9pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnB0cjsKKwlfX3UxNiB2YWw7CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZwdHIsIDEwKTsKKwlpZiAocHRyID09IGJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsIDwgMHgwMDAyIHx8IHZhbCA+IDB4RkZGRSB8fCB2YWwgJSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgPCBoZGV2LT5zbmlmZl9taW5faW50ZXJ2YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJaGRldi0+c25pZmZfbWF4X2ludGVydmFsID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3NuaWZmX21pbl9pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRldi0+c25pZmZfbWluX2ludGVydmFsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfc25pZmZfbWluX2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqcHRyOworCV9fdTE2IHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnB0ciwgMTApOworCWlmIChwdHIgPT0gYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgPCAweDAwMDIgfHwgdmFsID4gMHhGRkZFIHx8IHZhbCAlIDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA+IGhkZXYtPnNuaWZmX21heF9pbnRlcnZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZGV2LT5zbmlmZl9taW5faW50ZXJ2YWwgPSB2YWw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHR5cGUsIFNfSVJVR08sIHNob3dfdHlwZSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWRkcmVzcywgU19JUlVHTywgc2hvd19hZGRyZXNzLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmbGFncywgU19JUlVHTywgc2hvd19mbGFncywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW5xdWlyeV9jYWNoZSwgU19JUlVHTywgc2hvd19pbnF1aXJ5X2NhY2hlLCBOVUxMKTsKKworc3RhdGljIERFVklDRV9BVFRSKGlkbGVfdGltZW91dCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJc2hvd19pZGxlX3RpbWVvdXQsIHN0b3JlX2lkbGVfdGltZW91dCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc25pZmZfbWF4X2ludGVydmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQlzaG93X3NuaWZmX21heF9pbnRlcnZhbCwgc3RvcmVfc25pZmZfbWF4X2ludGVydmFsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzbmlmZl9taW5faW50ZXJ2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCXNob3dfc25pZmZfbWluX2ludGVydmFsLCBzdG9yZV9zbmlmZl9taW5faW50ZXJ2YWwpOworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmJ0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX25hbWUsCisJJmRldl9hdHRyX3R5cGUsCisJJmRldl9hdHRyX2FkZHJlc3MsCisJJmRldl9hdHRyX2ZsYWdzLAorCSZkZXZfYXR0cl9pbnF1aXJ5X2NhY2hlLAorCSZkZXZfYXR0cl9pZGxlX3RpbWVvdXQsCisJJmRldl9hdHRyX3NuaWZmX21heF9pbnRlcnZhbCwKKwkmZGV2X2F0dHJfc25pZmZfbWluX2ludGVydmFsLAogCU5VTEwKIH07CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVRwotc3RhdGljIGludCBidF91ZXZlbnQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqKmVudnAsIGludCBudW1fZW52cCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKK3N0cnVjdCBjbGFzcyAqYnRfY2xhc3MgPSBOVUxMOworRVhQT1JUX1NZTUJPTF9HUEwoYnRfY2xhc3MpOworCitzdGF0aWMgc3RydWN0IGJ1c190eXBlIGJ0X2J1cyA9IHsKKwkubmFtZQk9ICJibHVldG9vdGgiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJ0X3BsYXRmb3JtOworCitzdGF0aWMgdm9pZCBidF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNsYXNzX2dldF9kZXZkYXRhKGNkZXYpOwotCWludCBuLCBpID0gMDsKLQotCWVudnBbaSsrXSA9IGJ1ZjsKLQluID0gc25wcmludGYoYnVmLCBzaXplLCAiSU5URVJGQUNFPSVzIiwgaGRldi0+bmFtZSkgKyAxOwotCWJ1ZiArPSBuOwotCXNpemUgLT0gbjsKLQotCWlmICgoc2l6ZSA8PSAwKSB8fCAoaSA+PSBudW1fZW52cCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZW52cFtpXSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgYnRfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2Rldik7Ci0KKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWtmcmVlKGhkZXYpOwogfQogCi1zdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImJsdWV0b290aCIsCi0JLnJlbGVhc2UJPSBidF9yZWxlYXNlLAotI2lmZGVmIENPTkZJR19IT1RQTFVHCi0JLnVldmVudAkJPSBidF91ZXZlbnQsCi0jZW5kaWYKLX07Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGJ0X2NsYXNzKTsKLQogaW50IGhjaV9yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2ID0gJmhkZXYtPmNsYXNzX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaGRldi0+ZGV2OwogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKIAlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPnR5cGUpOwogCi0JY2Rldi0+Y2xhc3MgPSAmYnRfY2xhc3M7Ci0JY2xhc3Nfc2V0X2RldmRhdGEoY2RldiwgaGRldik7CisJZGV2LT5jbGFzcyA9IGJ0X2NsYXNzOwogCi0Jc3RybGNweShjZGV2LT5jbGFzc19pZCwgaGRldi0+bmFtZSwgQlVTX0lEX1NJWkUpOwotCWVyciA9IGNsYXNzX2RldmljZV9yZWdpc3RlcihjZGV2KTsKKwlpZiAoaGRldi0+cGFyZW50KQorCQlkZXYtPnBhcmVudCA9IGhkZXYtPnBhcmVudDsKKwllbHNlCisJCWRldi0+cGFyZW50ID0gJmJ0X3BsYXRmb3JtLT5kZXY7CisKKwlzdHJsY3B5KGRldi0+YnVzX2lkLCBoZGV2LT5uYW1lLCBCVVNfSURfU0laRSk7CisKKwlkZXYtPnJlbGVhc2UgPSBidF9yZWxlYXNlOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaGRldik7CisKKwllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCWZvciAoaSA9IDA7IGJ0X2F0dHJzW2ldOyBpKyspCi0JCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjZGV2LCBidF9hdHRyc1tpXSk7CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsIGJ0X2F0dHJzW2ldKTsKIAogCXJldHVybiAwOwogfQogCiB2b2lkIGhjaV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgKiBjZGV2ID0gJmhkZXYtPmNsYXNzX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaGRldi0+ZGV2OwogCiAJQlRfREJHKCIlcCBuYW1lICVzIHR5cGUgJWQiLCBoZGV2LCBoZGV2LT5uYW1lLCBoZGV2LT50eXBlKTsKIAotCWNsYXNzX2RldmljZV9kZWwoY2Rldik7CisJZGV2aWNlX2RlbChkZXYpOwogfQogCiBpbnQgX19pbml0IGJ0X3N5c2ZzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gY2xhc3NfcmVnaXN0ZXIoJmJ0X2NsYXNzKTsKKwlpbnQgZXJyOworCisJYnRfcGxhdGZvcm0gPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJibHVldG9vdGgiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihidF9wbGF0Zm9ybSkpCisJCXJldHVybiBQVFJfRVJSKGJ0X3BsYXRmb3JtKTsKKworCWVyciA9IGJ1c19yZWdpc3RlcigmYnRfYnVzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihidF9wbGF0Zm9ybSk7CisJCXJldHVybiBlcnI7CisJfQorCisJYnRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJibHVldG9vdGgiKTsKKwlpZiAoSVNfRVJSKGJ0X2NsYXNzKSkgeworCQlidXNfdW5yZWdpc3RlcigmYnRfYnVzKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYnRfcGxhdGZvcm0pOworCQlyZXR1cm4gUFRSX0VSUihidF9jbGFzcyk7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgX19leGl0IGJ0X3N5c2ZzX2NsZWFudXAodm9pZCkKIHsKLQljbGFzc191bnJlZ2lzdGVyKCZidF9jbGFzcyk7CisJY2xhc3NfZGVzdHJveShidF9jbGFzcyk7CisKKwlidXNfdW5yZWdpc3RlcigmYnRfYnVzKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJ0X3BsYXRmb3JtKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IGNkYjljZmEuLmI5YzI0YTUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtMjAsNyArMjAsNiBAQAogICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9oaWRwL3NvY2suYwppbmRleCBiOGY2Nzc2Li4wOTk2NDZlIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9zb2NrLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGY2YjRhODAuLmVhYWFkNjUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyogQmx1ZXRvb3RoIEwyQ0FQIGNvcmUgYW5kIHNvY2tldHMuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC02NCwxMSArNjMsNiBAQAogCS5sb2NrID0gUldfTE9DS19VTkxPQ0tFRAogfTsKIAotc3RhdGljIGludCBsMmNhcF9jb25uX2RlbChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIGludCBlcnIpOwotCi1zdGF0aWMgdm9pZCBfX2wyY2FwX2NoYW5fYWRkKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpOwotc3RhdGljIHZvaWQgbDJjYXBfY2hhbl9kZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTsKLQogc3RhdGljIHZvaWQgX19sMmNhcF9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgaW50IHJlYXNvbik7CiBzdGF0aWMgdm9pZCBsMmNhcF9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzayk7CiBzdGF0aWMgdm9pZCBsMmNhcF9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKTsKQEAgLTExMCwyNCArMTA0LDE3NyBAQAogCXNrLT5za190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpc2s7CiB9CiAKKy8qIC0tLS0gTDJDQVAgY2hhbm5lbHMgLS0tLSAqLworc3RhdGljIHN0cnVjdCBzb2NrICpfX2wyY2FwX2dldF9jaGFuX2J5X2RjaWQoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgdTE2IGNpZCkKK3sKKwlzdHJ1Y3Qgc29jayAqczsKKwlmb3IgKHMgPSBsLT5oZWFkOyBzOyBzID0gbDJjYXBfcGkocyktPm5leHRfYykgeworCQlpZiAobDJjYXBfcGkocyktPmRjaWQgPT0gY2lkKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBzOworfQorCitzdGF0aWMgc3RydWN0IHNvY2sgKl9fbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCB1MTYgY2lkKQoreworCXN0cnVjdCBzb2NrICpzOworCWZvciAocyA9IGwtPmhlYWQ7IHM7IHMgPSBsMmNhcF9waShzKS0+bmV4dF9jKSB7CisJCWlmIChsMmNhcF9waShzKS0+c2NpZCA9PSBjaWQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qIEZpbmQgY2hhbm5lbCB3aXRoIGdpdmVuIFNDSUQuCisgKiBSZXR1cm5zIGxvY2tlZCBzb2NrZXQgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmwyY2FwX2dldF9jaGFuX2J5X3NjaWQoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgdTE2IGNpZCkKK3sKKwlzdHJ1Y3Qgc29jayAqczsKKwlyZWFkX2xvY2soJmwtPmxvY2spOworCXMgPSBfX2wyY2FwX2dldF9jaGFuX2J5X3NjaWQobCwgY2lkKTsKKwlpZiAocykgYmhfbG9ja19zb2NrKHMpOworCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKKwlyZXR1cm4gczsKK30KKworc3RhdGljIHN0cnVjdCBzb2NrICpfX2wyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHU4IGlkZW50KQoreworCXN0cnVjdCBzb2NrICpzOworCWZvciAocyA9IGwtPmhlYWQ7IHM7IHMgPSBsMmNhcF9waShzKS0+bmV4dF9jKSB7CisJCWlmIChsMmNhcF9waShzKS0+aWRlbnQgPT0gaWRlbnQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmwyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHU4IGlkZW50KQoreworCXN0cnVjdCBzb2NrICpzOworCXJlYWRfbG9jaygmbC0+bG9jayk7CisJcyA9IF9fbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQobCwgaWRlbnQpOworCWlmIChzKSBiaF9sb2NrX3NvY2socyk7CisJcmVhZF91bmxvY2soJmwtPmxvY2spOworCXJldHVybiBzOworfQorCitzdGF0aWMgdTE2IGwyY2FwX2FsbG9jX2NpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsKQoreworCXUxNiBjaWQgPSAweDAwNDA7CisKKwlmb3IgKDsgY2lkIDwgMHhmZmZmOyBjaWQrKykgeworCQlpZighX19sMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGwsIGNpZCkpCisJCQlyZXR1cm4gY2lkOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19sMmNhcF9jaGFuX2xpbmsoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKQoreworCXNvY2tfaG9sZChzayk7CisKKwlpZiAobC0+aGVhZCkKKwkJbDJjYXBfcGkobC0+aGVhZCktPnByZXZfYyA9IHNrOworCisJbDJjYXBfcGkoc2spLT5uZXh0X2MgPSBsLT5oZWFkOworCWwyY2FwX3BpKHNrKS0+cHJldl9jID0gTlVMTDsKKwlsLT5oZWFkID0gc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGFuX3VubGluayhzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNvY2sgKm5leHQgPSBsMmNhcF9waShzayktPm5leHRfYywgKnByZXYgPSBsMmNhcF9waShzayktPnByZXZfYzsKKworCXdyaXRlX2xvY2soJmwtPmxvY2spOworCWlmIChzayA9PSBsLT5oZWFkKQorCQlsLT5oZWFkID0gbmV4dDsKKworCWlmIChuZXh0KQorCQlsMmNhcF9waShuZXh0KS0+cHJldl9jID0gcHJldjsKKwlpZiAocHJldikKKwkJbDJjYXBfcGkocHJldiktPm5leHRfYyA9IG5leHQ7CisJd3JpdGVfdW5sb2NrKCZsLT5sb2NrKTsKKworCV9fc29ja19wdXQoc2spOworfQorCitzdGF0aWMgdm9pZCBfX2wyY2FwX2NoYW5fYWRkKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpCit7CisJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCA9ICZjb25uLT5jaGFuX2xpc3Q7CisKKwlCVF9EQkcoImNvbm4gJXAsIHBzbSAweCUyLjJ4LCBkY2lkIDB4JTQuNHgiLCBjb25uLCBsMmNhcF9waShzayktPnBzbSwgbDJjYXBfcGkoc2spLT5kY2lkKTsKKworCWwyY2FwX3BpKHNrKS0+Y29ubiA9IGNvbm47CisKKwlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKKwkJLyogQWxsb2MgQ0lEIGZvciBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCAqLworCQlsMmNhcF9waShzayktPnNjaWQgPSBsMmNhcF9hbGxvY19jaWQobCk7CisJfSBlbHNlIGlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7CisJCS8qIENvbm5lY3Rpb25sZXNzIHNvY2tldCAqLworCQlsMmNhcF9waShzayktPnNjaWQgPSAweDAwMDI7CisJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IDB4MDAwMjsKKwkJbDJjYXBfcGkoc2spLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CisJfSBlbHNlIHsKKwkJLyogUmF3IHNvY2tldCBjYW4gc2VuZC9yZWN2IHNpZ25hbGxpbmcgbWVzc2FnZXMgb25seSAqLworCQlsMmNhcF9waShzayktPnNjaWQgPSAweDAwMDE7CisJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IDB4MDAwMTsKKwkJbDJjYXBfcGkoc2spLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CisJfQorCisJX19sMmNhcF9jaGFuX2xpbmsobCwgc2spOworCisJaWYgKHBhcmVudCkKKwkJYnRfYWNjZXB0X2VucXVldWUocGFyZW50LCBzayk7Cit9CisKKy8qIERlbGV0ZSBjaGFubmVsLiAKKyAqIE11c3QgYmUgY2FsbGVkIG9uIHRoZSBsb2NrZWQgc29ja2V0LiAqLworc3RhdGljIHZvaWQgbDJjYXBfY2hhbl9kZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCXN0cnVjdCBzb2NrICpwYXJlbnQgPSBidF9zayhzayktPnBhcmVudDsKKworCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOworCisJQlRfREJHKCJzayAlcCwgY29ubiAlcCwgZXJyICVkIiwgc2ssIGNvbm4sIGVycik7CisKKwlpZiAoY29ubikgeyAKKwkJLyogVW5saW5rIGZyb20gY2hhbm5lbCBsaXN0ICovCisJCWwyY2FwX2NoYW5fdW5saW5rKCZjb25uLT5jaGFuX2xpc3QsIHNrKTsKKwkJbDJjYXBfcGkoc2spLT5jb25uID0gTlVMTDsKKwkJaGNpX2Nvbm5fcHV0KGNvbm4tPmhjb24pOworCX0KKworCXNrLT5za19zdGF0ZSAgPSBCVF9DTE9TRUQ7CisJc29ja19zZXRfZmxhZyhzaywgU09DS19aQVBQRUQpOworCisJaWYgKGVycikKKwkJc2stPnNrX2VyciA9IGVycjsKKworCWlmIChwYXJlbnQpIHsKKwkJYnRfYWNjZXB0X3VubGluayhzayk7CisJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOworCX0gZWxzZQorCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKK30KKwogLyogLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tICovCiBzdGF0aWMgc3RydWN0IGwyY2FwX2Nvbm4gKmwyY2FwX2Nvbm5fYWRkKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzKQogewotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKIAotCWlmICgoY29ubiA9IGhjb24tPmwyY2FwX2RhdGEpKQorCWlmIChjb25uIHx8IHN0YXR1cykKIAkJcmV0dXJuIGNvbm47CiAKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gY29ubjsKLQotCWlmICghKGNvbm4gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbDJjYXBfY29ubiksIEdGUF9BVE9NSUMpKSkKKwljb25uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGwyY2FwX2Nvbm4pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNvbm4pCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChjb25uLCAwLCBzaXplb2Yoc3RydWN0IGwyY2FwX2Nvbm4pKTsKIAogCWhjb24tPmwyY2FwX2RhdGEgPSBjb25uOwogCWNvbm4tPmhjb24gPSBoY29uOwogCisJQlRfREJHKCJoY29uICVwIGNvbm4gJXAiLCBoY29uLCBjb25uKTsKKwogCWNvbm4tPm10dSA9IGhjb24tPmhkZXYtPmFjbF9tdHU7CiAJY29ubi0+c3JjID0gJmhjb24tPmhkZXYtPmJkYWRkcjsKIAljb25uLT5kc3QgPSAmaGNvbi0+ZHN0OwpAQCAtMTM1LDE3ICsyODIsMTYgQEAKIAlzcGluX2xvY2tfaW5pdCgmY29ubi0+bG9jayk7CiAJcndsb2NrX2luaXQoJmNvbm4tPmNoYW5fbGlzdC5sb2NrKTsKIAotCUJUX0RCRygiaGNvbiAlcCBjb25uICVwIiwgaGNvbiwgY29ubik7CiAJcmV0dXJuIGNvbm47CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfY29ubl9kZWwoc3RydWN0IGhjaV9jb25uICpoY29uLCBpbnQgZXJyKQorc3RhdGljIHZvaWQgbDJjYXBfY29ubl9kZWwoc3RydWN0IGhjaV9jb25uICpoY29uLCBpbnQgZXJyKQogewotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAKLQlpZiAoIShjb25uID0gaGNvbi0+bDJjYXBfZGF0YSkpIAotCQlyZXR1cm4gMDsKKwlpZiAoIWNvbm4pCisJCXJldHVybjsKIAogCUJUX0RCRygiaGNvbiAlcCBjb25uICVwLCBlcnIgJWQiLCBoY29uLCBjb25uLCBlcnIpOwogCkBAIC0xNjIsNyArMzA4LDYgQEAKIAogCWhjb24tPmwyY2FwX2RhdGEgPSBOVUxMOwogCWtmcmVlKGNvbm4pOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfY2hhbl9hZGQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBhcmVudCkKQEAgLTkyNiwxNjAgKzEwNzEsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIC0tLS0gTDJDQVAgY2hhbm5lbHMgLS0tLSAqLwotc3RhdGljIHN0cnVjdCBzb2NrICpfX2wyY2FwX2dldF9jaGFuX2J5X2RjaWQoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgdTE2IGNpZCkKLXsKLQlzdHJ1Y3Qgc29jayAqczsKLQlmb3IgKHMgPSBsLT5oZWFkOyBzOyBzID0gbDJjYXBfcGkocyktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkocyktPmRjaWQgPT0gY2lkKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBzOwotfQotCi1zdGF0aWMgc3RydWN0IHNvY2sgKl9fbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCB1MTYgY2lkKQotewotCXN0cnVjdCBzb2NrICpzOwotCWZvciAocyA9IGwtPmhlYWQ7IHM7IHMgPSBsMmNhcF9waShzKS0+bmV4dF9jKSB7Ci0JCWlmIChsMmNhcF9waShzKS0+c2NpZCA9PSBjaWQpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHM7Ci19Ci0KLS8qIEZpbmQgY2hhbm5lbCB3aXRoIGdpdmVuIFNDSUQuCi0gKiBSZXR1cm5zIGxvY2tlZCBzb2NrZXQgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmwyY2FwX2dldF9jaGFuX2J5X3NjaWQoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgdTE2IGNpZCkKLXsKLQlzdHJ1Y3Qgc29jayAqczsKLQlyZWFkX2xvY2soJmwtPmxvY2spOwotCXMgPSBfX2wyY2FwX2dldF9jaGFuX2J5X3NjaWQobCwgY2lkKTsKLQlpZiAocykgYmhfbG9ja19zb2NrKHMpOwotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKLQlyZXR1cm4gczsKLX0KLQotc3RhdGljIHN0cnVjdCBzb2NrICpfX2wyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHU4IGlkZW50KQotewotCXN0cnVjdCBzb2NrICpzOwotCWZvciAocyA9IGwtPmhlYWQ7IHM7IHMgPSBsMmNhcF9waShzKS0+bmV4dF9jKSB7Ci0JCWlmIChsMmNhcF9waShzKS0+aWRlbnQgPT0gaWRlbnQpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmwyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHU4IGlkZW50KQotewotCXN0cnVjdCBzb2NrICpzOwotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0JcyA9IF9fbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQobCwgaWRlbnQpOwotCWlmIChzKSBiaF9sb2NrX3NvY2socyk7Ci0JcmVhZF91bmxvY2soJmwtPmxvY2spOwotCXJldHVybiBzOwotfQotCi1zdGF0aWMgdTE2IGwyY2FwX2FsbG9jX2NpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsKQotewotCXUxNiBjaWQgPSAweDAwNDA7Ci0KLQlmb3IgKDsgY2lkIDwgMHhmZmZmOyBjaWQrKykgewotCQlpZighX19sMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGwsIGNpZCkpCi0JCQlyZXR1cm4gY2lkOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19sMmNhcF9jaGFuX2xpbmsoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKQotewotCXNvY2tfaG9sZChzayk7Ci0KLQlpZiAobC0+aGVhZCkKLQkJbDJjYXBfcGkobC0+aGVhZCktPnByZXZfYyA9IHNrOwotCi0JbDJjYXBfcGkoc2spLT5uZXh0X2MgPSBsLT5oZWFkOwotCWwyY2FwX3BpKHNrKS0+cHJldl9jID0gTlVMTDsKLQlsLT5oZWFkID0gc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGFuX3VubGluayhzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IHNvY2sgKm5leHQgPSBsMmNhcF9waShzayktPm5leHRfYywgKnByZXYgPSBsMmNhcF9waShzayktPnByZXZfYzsKLQotCXdyaXRlX2xvY2soJmwtPmxvY2spOwotCWlmIChzayA9PSBsLT5oZWFkKQotCQlsLT5oZWFkID0gbmV4dDsKLQotCWlmIChuZXh0KQotCQlsMmNhcF9waShuZXh0KS0+cHJldl9jID0gcHJldjsKLQlpZiAocHJldikKLQkJbDJjYXBfcGkocHJldiktPm5leHRfYyA9IG5leHQ7Ci0Jd3JpdGVfdW5sb2NrKCZsLT5sb2NrKTsKLQotCV9fc29ja19wdXQoc2spOwotfQotCi1zdGF0aWMgdm9pZCBfX2wyY2FwX2NoYW5fYWRkKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpCi17Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCA9ICZjb25uLT5jaGFuX2xpc3Q7Ci0KLQlCVF9EQkcoImNvbm4gJXAsIHBzbSAweCUyLjJ4LCBkY2lkIDB4JTQuNHgiLCBjb25uLCBsMmNhcF9waShzayktPnBzbSwgbDJjYXBfcGkoc2spLT5kY2lkKTsKLQotCWwyY2FwX3BpKHNrKS0+Y29ubiA9IGNvbm47Ci0KLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKLQkJLyogQWxsb2MgQ0lEIGZvciBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCAqLwotCQlsMmNhcF9waShzayktPnNjaWQgPSBsMmNhcF9hbGxvY19jaWQobCk7Ci0JfSBlbHNlIGlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7Ci0JCS8qIENvbm5lY3Rpb25sZXNzIHNvY2tldCAqLwotCQlsMmNhcF9waShzayktPnNjaWQgPSAweDAwMDI7Ci0JCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IDB4MDAwMjsKLQkJbDJjYXBfcGkoc2spLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7Ci0JfSBlbHNlIHsKLQkJLyogUmF3IHNvY2tldCBjYW4gc2VuZC9yZWN2IHNpZ25hbGxpbmcgbWVzc2FnZXMgb25seSAqLwotCQlsMmNhcF9waShzayktPnNjaWQgPSAweDAwMDE7Ci0JCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IDB4MDAwMTsKLQkJbDJjYXBfcGkoc2spLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7Ci0JfQotCi0JX19sMmNhcF9jaGFuX2xpbmsobCwgc2spOwotCi0JaWYgKHBhcmVudCkKLQkJYnRfYWNjZXB0X2VucXVldWUocGFyZW50LCBzayk7Ci19Ci0KLS8qIERlbGV0ZSBjaGFubmVsLiAKLSAqIE11c3QgYmUgY2FsbGVkIG9uIHRoZSBsb2NrZWQgc29ja2V0LiAqLwotc3RhdGljIHZvaWQgbDJjYXBfY2hhbl9kZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKQotewotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOwotCXN0cnVjdCBzb2NrICpwYXJlbnQgPSBidF9zayhzayktPnBhcmVudDsKLQotCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwotCi0JQlRfREJHKCJzayAlcCwgY29ubiAlcCwgZXJyICVkIiwgc2ssIGNvbm4sIGVycik7Ci0KLQlpZiAoY29ubikgeyAKLQkJLyogVW5saW5rIGZyb20gY2hhbm5lbCBsaXN0ICovCi0JCWwyY2FwX2NoYW5fdW5saW5rKCZjb25uLT5jaGFuX2xpc3QsIHNrKTsKLQkJbDJjYXBfcGkoc2spLT5jb25uID0gTlVMTDsKLQkJaGNpX2Nvbm5fcHV0KGNvbm4tPmhjb24pOwotCX0KLQotCXNrLT5za19zdGF0ZSAgPSBCVF9DTE9TRUQ7Ci0Jc29ja19zZXRfZmxhZyhzaywgU09DS19aQVBQRUQpOwotCi0JaWYgKGVycikKLQkJc2stPnNrX2VyciA9IGVycjsKLQotCWlmIChwYXJlbnQpIHsKLQkJYnRfYWNjZXB0X3VubGluayhzayk7Ci0JCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOwotCX0gZWxzZQotCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKLX0KLQogc3RhdGljIHZvaWQgbDJjYXBfY29ubl9yZWFkeShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKQEAgLTE4MzUsNyArMTgyNiw5IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAKIGRvbmU6Ci0JaWYgKHNrKSBiaF91bmxvY2tfc29jayhzayk7CisJaWYgKHNrKQorCQliaF91bmxvY2tfc29jayhzayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkyNiwxOCArMTkxOSwxOCBAQAogCiBzdGF0aWMgaW50IGwyY2FwX2Nvbm5lY3RfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzKQogeworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uOworCiAJQlRfREJHKCJoY29uICVwIGJkYWRkciAlcyBzdGF0dXMgJWQiLCBoY29uLCBiYXRvc3RyKCZoY29uLT5kc3QpLCBzdGF0dXMpOwogCiAJaWYgKGhjb24tPnR5cGUgIT0gQUNMX0xJTkspCiAJCXJldHVybiAwOwogCiAJaWYgKCFzdGF0dXMpIHsKLQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm47Ci0KIAkJY29ubiA9IGwyY2FwX2Nvbm5fYWRkKGhjb24sIHN0YXR1cyk7CiAJCWlmIChjb25uKQogCQkJbDJjYXBfY29ubl9yZWFkeShjb25uKTsKLQl9IGVsc2UgCisJfSBlbHNlCiAJCWwyY2FwX2Nvbm5fZGVsKGhjb24sIGJ0X2VycihzdGF0dXMpKTsKIAogCXJldHVybiAwOwpAQCAtMTk1MSwxOSArMTk0NCwyMSBAQAogCQlyZXR1cm4gMDsKIAogCWwyY2FwX2Nvbm5fZGVsKGhjb24sIGJ0X2VycihyZWFzb24pKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGwyY2FwX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgdTggc3RhdHVzKQogewogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmw7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm47CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKIAlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKCEoY29ubiA9IGhjb24tPmwyY2FwX2RhdGEpKQorCWlmICghY29ubikKIAkJcmV0dXJuIDA7CisKIAlsID0gJmNvbm4tPmNoYW5fbGlzdDsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwpAQCAtMjAwNiwxMyArMjAwMSwxNCBAQAogc3RhdGljIGludCBsMmNhcF9lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsOwotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKIAlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKCEoY29ubiA9IGhjb24tPmwyY2FwX2RhdGEpKQorCWlmICghY29ubikKIAkJcmV0dXJuIDA7CisKIAlsID0gJmNvbm4tPmNoYW5fbGlzdDsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwpAQCAtMjIyMCw3ICsyMjE2LDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQljbGFzc19jcmVhdGVfZmlsZSgmYnRfY2xhc3MsICZjbGFzc19hdHRyX2wyY2FwKTsKKwljbGFzc19jcmVhdGVfZmlsZShidF9jbGFzcywgJmNsYXNzX2F0dHJfbDJjYXApOwogCiAJQlRfSU5GTygiTDJDQVAgdmVyICVzIiwgVkVSU0lPTik7CiAJQlRfSU5GTygiTDJDQVAgc29ja2V0IGxheWVyIGluaXRpYWxpemVkIik7CkBAIC0yMjM0LDcgKzIyMzAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbDJjYXBfZXhpdCh2b2lkKQogewotCWNsYXNzX3JlbW92ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfbDJjYXApOworCWNsYXNzX3JlbW92ZV9maWxlKGJ0X2NsYXNzLCAmY2xhc3NfYXR0cl9sMmNhcCk7CiAKIAlpZiAoYnRfc29ja191bnJlZ2lzdGVyKEJUUFJPVE9fTDJDQVApIDwgMCkKIAkJQlRfRVJSKCJMMkNBUCBzb2NrZXQgdW5yZWdpc3RyYXRpb24gZmFpbGVkIik7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2xpYi5jIGIvbmV0L2JsdWV0b290aC9saWIuYwppbmRleCBlZTZhNjY5Li5lNWZkMGNiIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2xpYi5jCisrKyBiL25ldC9ibHVldG9vdGgvbGliLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyogQmx1ZXRvb3RoIGtlcm5lbCBsaWJyYXJ5LiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCBlOTkwMTBjLi4xNTVhMmI5IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAkSWQ6IGNvcmUuYyx2IDEuNDIgMjAwMi8xMC8wMSAyMzoyNjoyNSBtYXhrIEV4cCAkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01Myw4ICs1Miw5IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMS43IgorI2RlZmluZSBWRVJTSU9OICIxLjgiCiAKK3N0YXRpYyBpbnQgZGlzYWJsZV9jZmMgPSAwOwogc3RhdGljIHVuc2lnbmVkIGludCBsMmNhcF9tdHUgPSBSRkNPTU1fTUFYX0wyQ0FQX01UVTsKIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmZjb21tX3RocmVhZDsKQEAgLTUzNCw3ICs1MzQsNyBAQAogCXMtPnNvY2sgID0gc29jazsKIAogCXMtPm10dSA9IFJGQ09NTV9ERUZBVUxUX01UVTsKLQlzLT5jZmMgPSBSRkNPTU1fQ0ZDX1VOS05PV047CisJcy0+Y2ZjID0gZGlzYWJsZV9jZmMgPyBSRkNPTU1fQ0ZDX0RJU0FCTEVEIDogUkZDT01NX0NGQ19VTktOT1dOOwogCiAJLyogRG8gbm90IGluY3JlbWVudCBtb2R1bGUgdXNhZ2UgY291bnQgZm9yIGxpc3RlbmluZyBzZXNzaW9ucy4KIAkgKiBPdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZS4gKi8KQEAgLTExNTAsNiArMTE1MCw4IEBACiAKIHN0YXRpYyB2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQogeworCXN0cnVjdCBzb2NrICpzayA9IGQtPnNlc3Npb24tPnNvY2stPnNrOworCiAJQlRfREJHKCJkbGMgJXAiLCBkKTsKIAogCXJmY29tbV9zZW5kX3VhKGQtPnNlc3Npb24sIGQtPmRsY2kpOwpAQCAtMTE1OSw2ICsxMTYxLDkgQEAKIAlkLT5zdGF0ZV9jaGFuZ2UoZCwgMCk7CiAJcmZjb21tX2RsY191bmxvY2soZCk7CiAKKwlpZiAoZC0+bGlua19tb2RlICYgUkZDT01NX0xNX01BU1RFUikKKwkJaGNpX2Nvbm5fc3dpdGNoX3JvbGUobDJjYXBfcGkoc2spLT5jb25uLT5oY29uLCAweDAwKTsKKwogCXJmY29tbV9zZW5kX21zYyhkLT5zZXNzaW9uLCAxLCBkLT5kbGNpLCBkLT52MjRfc2lnKTsKIH0KIApAQCAtMTIyMywxNCArMTIyOCwxOCBAQAogCUJUX0RCRygiZGxjICVwIHN0YXRlICVsZCBkbGNpICVkIG10dSAlZCBmYyAweCV4IGNyZWRpdHMgJWQiLCAKIAkJCWQsIGQtPnN0YXRlLCBkLT5kbGNpLCBwbi0+bXR1LCBwbi0+Zmxvd19jdHJsLCBwbi0+Y3JlZGl0cyk7CiAKLQlpZiAocG4tPmZsb3dfY3RybCA9PSAweGYwIHx8IHBuLT5mbG93X2N0cmwgPT0gMHhlMCkgewotCQlkLT5jZmMgPSBzLT5jZmMgPSBSRkNPTU1fQ0ZDX0VOQUJMRUQ7CisJaWYgKChwbi0+Zmxvd19jdHJsID09IDB4ZjAgJiYgcy0+Y2ZjICE9IFJGQ09NTV9DRkNfRElTQUJMRUQpIHx8CisJCQkJCQlwbi0+Zmxvd19jdHJsID09IDB4ZTApIHsKKwkJZC0+Y2ZjID0gUkZDT01NX0NGQ19FTkFCTEVEOwogCQlkLT50eF9jcmVkaXRzID0gcG4tPmNyZWRpdHM7CiAJfSBlbHNlIHsKLQkJZC0+Y2ZjID0gcy0+Y2ZjID0gUkZDT01NX0NGQ19ESVNBQkxFRDsKKwkJZC0+Y2ZjID0gUkZDT01NX0NGQ19ESVNBQkxFRDsKIAkJc2V0X2JpdChSRkNPTU1fVFhfVEhST1RUTEVELCAmZC0+ZmxhZ3MpOwogCX0KIAorCWlmIChzLT5jZmMgPT0gUkZDT01NX0NGQ19VTktOT1dOKQorCQlzLT5jZmMgPSBkLT5jZmM7CisKIAlkLT5wcmlvcml0eSA9IHBuLT5wcmlvcml0eTsKIAogCWQtPm10dSA9IHMtPm10dSA9IGJ0b2hzKHBuLT5tdHUpOwpAQCAtMjAzNiw3ICsyMDQ1LDcgQEAKIAogCWtlcm5lbF90aHJlYWQocmZjb21tX3J1biwgTlVMTCwgQ0xPTkVfS0VSTkVMKTsKIAotCWNsYXNzX2NyZWF0ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfcmZjb21tX2RsYyk7CisJY2xhc3NfY3JlYXRlX2ZpbGUoYnRfY2xhc3MsICZjbGFzc19hdHRyX3JmY29tbV9kbGMpOwogCiAJcmZjb21tX2luaXRfc29ja2V0cygpOwogCkBAIC0yMDUxLDcgKzIwNjAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmZjb21tX2V4aXQodm9pZCkKIHsKLQljbGFzc19yZW1vdmVfZmlsZSgmYnRfY2xhc3MsICZjbGFzc19hdHRyX3JmY29tbV9kbGMpOworCWNsYXNzX3JlbW92ZV9maWxlKGJ0X2NsYXNzLCAmY2xhc3NfYXR0cl9yZmNvbW1fZGxjKTsKIAogCWhjaV91bnJlZ2lzdGVyX2NiKCZyZmNvbW1fY2IpOwogCkBAIC0yMDc0LDYgKzIwODMsOSBAQAogbW9kdWxlX2luaXQocmZjb21tX2luaXQpOwogbW9kdWxlX2V4aXQocmZjb21tX2V4aXQpOwogCittb2R1bGVfcGFyYW0oZGlzYWJsZV9jZmMsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2NmYywgIkRpc2FibGUgY3JlZGl0IGJhc2VkIGZsb3cgY29udHJvbCIpOworCiBtb2R1bGVfcGFyYW0obDJjYXBfbXR1LCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobDJjYXBfbXR1LCAiRGVmYXVsdCBNVFUgZm9yIHRoZSBMMkNBUCBjb25uZWN0aW9uIik7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCA3NTdkMmRkLi4yMjBmZWUwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAkSWQ6IHNvY2suYyx2IDEuMjQgMjAwMi8xMC8wMyAwMTowMDozNCBtYXhrIEV4cCAkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTk0NSw3ICs5NDQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JY2xhc3NfY3JlYXRlX2ZpbGUoJmJ0X2NsYXNzLCAmY2xhc3NfYXR0cl9yZmNvbW0pOworCWNsYXNzX2NyZWF0ZV9maWxlKGJ0X2NsYXNzLCAmY2xhc3NfYXR0cl9yZmNvbW0pOwogCiAJQlRfSU5GTygiUkZDT01NIHNvY2tldCBsYXllciBpbml0aWFsaXplZCIpOwogCkBAIC05NTksNyArOTU4LDcgQEAKIAogdm9pZCBfX2V4aXQgcmZjb21tX2NsZWFudXBfc29ja2V0cyh2b2lkKQogewotCWNsYXNzX3JlbW92ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfcmZjb21tKTsKKwljbGFzc19yZW1vdmVfZmlsZShidF9jbGFzcywgJmNsYXNzX2F0dHJfcmZjb21tKTsKIAogCWlmIChidF9zb2NrX3VucmVnaXN0ZXIoQlRQUk9UT19SRkNPTU0pIDwgMCkKIAkJQlRfRVJSKCJSRkNPTU0gc29ja2V0IGxheWVyIHVucmVnaXN0cmF0aW9uIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwppbmRleCA3NDM2OGY3Li4yZmYyZDViIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwpAQCAtMjcsNyArMjcsNiBAQAogICogJElkOiB0dHkuYyx2IDEuMjQgMjAwMi8xMC8wMyAwMTo1NDozOCBob2x0bWFubiBFeHAgJAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpAQCAtNDgwLDEyICs0NzksOCBAQAogCiAJQlRfREJHKCJkbGMgJXAgdHR5ICVwIGxlbiAlZCIsIGRsYywgdHR5LCBza2ItPmxlbik7CiAKLQlpZiAodGVzdF9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpKSB7Ci0JCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgc2tiLT5sZW4pOwotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JfSBlbHNlCi0JCXR0eS0+bGRpc2MucmVjZWl2ZV9idWYodHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKKwl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAogCWtmcmVlX3NrYihza2IpOwogfQpAQCAtMTAyNSwxMyArMTAyMCwxMiBAQAogCiAJcmZjb21tX3R0eV9kcml2ZXItPm93bmVyCT0gVEhJU19NT0RVTEU7CiAJcmZjb21tX3R0eV9kcml2ZXItPmRyaXZlcl9uYW1lCT0gInJmY29tbSI7Ci0JcmZjb21tX3R0eV9kcml2ZXItPmRldmZzX25hbWUJPSAiYmx1ZXRvb3RoL3JmY29tbS8iOwogCXJmY29tbV90dHlfZHJpdmVyLT5uYW1lCQk9ICJyZmNvbW0iOwogCXJmY29tbV90dHlfZHJpdmVyLT5tYWpvcgk9IFJGQ09NTV9UVFlfTUFKT1I7CiAJcmZjb21tX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0CT0gUkZDT01NX1RUWV9NSU5PUjsKIAlyZmNvbW1fdHR5X2RyaXZlci0+dHlwZQkJPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwogCXJmY29tbV90dHlfZHJpdmVyLT5zdWJ0eXBlCT0gU0VSSUFMX1RZUEVfTk9STUFMOwotCXJmY29tbV90dHlfZHJpdmVyLT5mbGFncwk9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCXJmY29tbV90dHlfZHJpdmVyLT5mbGFncwk9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXJmY29tbV90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MJPSB0dHlfc3RkX3Rlcm1pb3M7CiAJcmZjb21tX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnCT0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhyZmNvbW1fdHR5X2RyaXZlciwgJnJmY29tbV9vcHMpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggMGMyZDEzYS4uODVkZWZjYyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0yNCw3ICsyNCw2IEBACiAKIC8qIEJsdWV0b290aCBTQ08gc29ja2V0cy4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTk3MCw3ICs5NjksNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWNsYXNzX2NyZWF0ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfc2NvKTsKKwljbGFzc19jcmVhdGVfZmlsZShidF9jbGFzcywgJmNsYXNzX2F0dHJfc2NvKTsKIAogCUJUX0lORk8oIlNDTyAoVm9pY2UgTGluaykgdmVyICVzIiwgVkVSU0lPTik7CiAJQlRfSU5GTygiU0NPIHNvY2tldCBsYXllciBpbml0aWFsaXplZCIpOwpAQCAtOTg0LDcgKzk4Myw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzY29fZXhpdCh2b2lkKQogewotCWNsYXNzX3JlbW92ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfc2NvKTsKKwljbGFzc19yZW1vdmVfZmlsZShidF9jbGFzcywgJmNsYXNzX2F0dHJfc2NvKTsKIAogCWlmIChidF9zb2NrX3VucmVnaXN0ZXIoQlRQUk9UT19TQ08pIDwgMCkKIAkJQlRfRVJSKCJTQ08gc29ja2V0IHVucmVnaXN0cmF0aW9uIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IDY1NDQwMWMuLjI5OTQzODcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKaW5kZXggMmFmZGM3Yy4uZjhkYmNlZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYworKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCkBAIC0xODQsNiArMTg0LDYgQEAKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJyX3NldF9tYWNfYWRkcmVzczsKIAlkZXYtPnByaXZfZmxhZ3MgPSBJRkZfRUJSSURHRTsKIAotIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QKLSAJCXwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX05PX0NTVU07CisgCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8CisgCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX05PX0NTVU0gfCBORVRJRl9GX0dTT19ST0JVU1Q7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggMDc5NTZlYy4uZjU1ZWY2OCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMzkyLDcgKzM5Miw4IEBACiAJCWZlYXR1cmVzICY9IGZlYXR1cmU7CiAJfQogCi0JYnItPmRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlcyB8IGNoZWNrc3VtIHwgTkVUSUZfRl9MTFRYOworCWJyLT5kZXYtPmZlYXR1cmVzID0gZmVhdHVyZXMgfCBjaGVja3N1bSB8IE5FVElGX0ZfTExUWCB8CisJCQkgICAgTkVUSUZfRl9HU09fUk9CVVNUOwogfQogCiAvKiBjYWxsZWQgd2l0aCBSVE5MICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCmluZGV4IDg4MWQ3ZDEuLjA2YWJiNjYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCkBAIC0xMTcsMTIgKzExNywxMyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGlkeCA8IHNfaWR4KQotCQkJY29udGludWU7CisJCQlnb3RvIGNvbnQ7CiAKIAkJZXJyID0gYnJfZmlsbF9pZmluZm8oc2tiLCBwLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV0xJTkssIE5MTV9GX01VTFRJKTsKIAkJaWYgKGVyciA8PSAwKQogCQkJYnJlYWs7Citjb250OgogCQkrK2lkeDsKIAl9CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKaW5kZXggZWU1YTUxNy4uMDI2OTNhMiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGYxYzUyY2JkLi4wNjZhNjBhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzYsNyArNzYsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTExOTAsMTEgKzExODksMTQgQEAKIC8qKgogICoJc2tiX2dzb19zZWdtZW50IC0gUGVyZm9ybSBzZWdtZW50YXRpb24gb24gc2tiLgogICoJQHNrYjogYnVmZmVyIHRvIHNlZ21lbnQKLSAqCUBzZzogd2hldGhlciBzY2F0dGVyLWdhdGhlciBpcyBzdXBwb3J0ZWQgb24gdGhlIHRhcmdldC4KKyAqCUBmZWF0dXJlczogZmVhdHVyZXMgZm9yIHRoZSBvdXRwdXQgcGF0aCAoc2VlIGRldi0+ZmVhdHVyZXMpCiAgKgogICoJVGhpcyBmdW5jdGlvbiBzZWdtZW50cyB0aGUgZ2l2ZW4gc2tiIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBzZWdtZW50cy4KKyAqCisgKglJdCBtYXkgcmV0dXJuIE5VTEwgaWYgdGhlIHNrYiByZXF1aXJlcyBubyBzZWdtZW50YXRpb24uICBUaGlzIGlzCisgKglvbmx5IHBvc3NpYmxlIHdoZW4gR1NPIGlzIHVzZWQgZm9yIHZlcmlmeWluZyBoZWFkZXIgaW50ZWdyaXR5LgogICovCi1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBzZykKK3N0cnVjdCBza19idWZmICpza2JfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZlYXR1cmVzKQogewogCXN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRVBST1RPTk9TVVBQT1JUKTsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlOwpAQCAtMTIxMCwxMiArMTIxMiwxNCBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiAxNV0sIGxpc3QpIHsKIAkJaWYgKHB0eXBlLT50eXBlID09IHR5cGUgJiYgIXB0eXBlLT5kZXYgJiYgcHR5cGUtPmdzb19zZWdtZW50KSB7Ci0JCQlzZWdzID0gcHR5cGUtPmdzb19zZWdtZW50KHNrYiwgc2cpOworCQkJc2VncyA9IHB0eXBlLT5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCisJX19za2JfcHVzaChza2IsIHNrYi0+ZGF0YSAtIHNrYi0+bWFjLnJhdyk7CisKIAlyZXR1cm4gc2VnczsKIH0KIApAQCAtMTIzNCw3ICsxMjM4LDYgQEAKIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3J4X2NzdW1fZmF1bHQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSElHSE1FTQogLyogQWN0dWFsbHksIHdlIHNob3VsZCBlbGltaW5hdGUgdGhpcyBjaGVjayBhcyBzb29uIGFzIHdlIGtub3csIHRoYXQ6CiAgKiAxLiBJT01NVSBpcyBwcmVzZW50IGFuZCBhbGxvd3MgdG8gbWFwIGFsbCB0aGUgbWVtb3J5LgogICogMi4gTm8gaGlnaCBtZW1vcnkgcmVhbGx5IGV4aXN0cyBvbiB0aGlzIG1hY2hpbmUuCkBAIC0xMjQyLDYgKzEyNDUsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBpbGxlZ2FsX2hpZ2hkbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQogCWludCBpOwogCiAJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hJR0hETUEpCkBAIC0xMjUxLDExICsxMjU1LDkgQEAKIAkJaWYgKFBhZ2VIaWdoTWVtKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSkpCiAJCQlyZXR1cm4gMTsKIAorI2VuZGlmCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpCSgwKQotI2VuZGlmCiAKIHN0cnVjdCBkZXZfZ3NvX2NiIHsKIAl2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xMjkxLDkgKzEyOTMsMTUgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3M7CisJaW50IGZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmIH4oaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKSA/CisJCQkJCSBORVRJRl9GX1NHIDogMCk7CiAKLQlzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cgJiYKLQkJCQkgICAgIWlsbGVnYWxfaGlnaGRtYShkZXYsIHNrYikpOworCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CisKKwkvKiBWZXJpZnlpbmcgaGVhZGVyIGludGVncml0eSBvbmx5LiAqLworCWlmICghc2VncykKKwkJcmV0dXJuIDA7CisKIAlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2Vncyk7CiAKQEAgLTEzMTAsMTMgKzEzMTgsMTcgQEAKIAkJaWYgKG5ldGRldl9uaXQpCiAJCQlkZXZfcXVldWVfeG1pdF9uaXQoc2tiLCBkZXYpOwogCi0JCWlmICghbmV0aWZfbmVlZHNfZ3NvKGRldiwgc2tiKSkKLQkJCXJldHVybiBkZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIGRldik7CisJCWlmIChuZXRpZl9uZWVkc19nc28oZGV2LCBza2IpKSB7CisJCQlpZiAodW5saWtlbHkoZGV2X2dzb19zZWdtZW50KHNrYikpKQorCQkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKKwkJCWlmIChza2ItPm5leHQpCisJCQkJZ290byBnc287CisJCX0KIAotCQlpZiAodW5saWtlbHkoZGV2X2dzb19zZWdtZW50KHNrYikpKQotCQkJZ290byBvdXRfa2ZyZWVfc2tiOworCQlyZXR1cm4gZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwogCX0KIAorZ3NvOgogCWRvIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2ItPm5leHQ7CiAJCWludCByYzsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2xpbmtfd2F0Y2guYyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwppbmRleCAwZjM3MjY2Li40YjM2MTE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9saW5rX3dhdGNoLmMKKysrIGIvbmV0L2NvcmUvbGlua193YXRjaC5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCA1MGE4YzczLi43YWQ2ODFmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMTUsNyArMTUsNiBAQAogICoJSGFyYWxkIFdlbHRlCQlBZGQgbmVpZ2hib3VyIGNhY2hlIHN0YXRpc3RpY3MgbGlrZSBydHN0YXQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggNDdhNmZjZS4uMTM0NzI3NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAzZmNmYTljLi4yMGU1YmI3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMTYsNyArMTYsNiBAQAogICoJVml0YWx5IEUuIExhdnJvdgkJUlRBX09LIGFyaXRobWV0aWNzIHdhcyB3cm9uZy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNjYzLDcgKzY2Miw3IEBACiAJc3pfaWR4ID0gdHlwZT4+MjsKIAlraW5kID0gdHlwZSYzOwogCi0JaWYgKGtpbmQgIT0gMiAmJiBzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiKSkgeworCWlmIChraW5kICE9IDIgJiYgc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYiwgQ0FQX05FVF9BRE1JTikpIHsKIAkJKmVycnAgPSAtRVBFUk07CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDZlZGJiOTAuLjQ0ZjZhMTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0zOCw3ICszOCw2IEBACiAgKglUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSB3aWxsIG5vdCBjb21waWxlIGNvcnJlY3RseSB3aXRoIGdjYyAyLjQueAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNzIsNiArNzEsMTMgQEAKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKnNrYnVmZl9mY2xvbmVfY2FjaGUgX19yZWFkX21vc3RseTsKIAogLyoKKyAqIGxvY2tkZXA6IGxvY2sgY2xhc3Mga2V5IHVzZWQgYnkgc2tiX3F1ZXVlX2hlYWRfaW5pdCgpOgorICovCitzdHJ1Y3QgbG9ja19jbGFzc19rZXkgc2tiX3F1ZXVlX2xvY2tfa2V5OworCitFWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9sb2NrX2tleSk7CisKKy8qCiAgKglLZWVwIG91dC1vZi1saW5lIHRvIHByZXZlbnQga2VybmVsIGJsb2F0LgogICoJX19idWlsdGluX3JldHVybl9hZGRyZXNzIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGFsd2F5cwogICoJcmVsaWFibGUuCkBAIC0yNzIsNyArMjc4LDcgQEAKIAkJc2tiX2dldChsaXN0KTsKIH0KIAotdm9pZCBza2JfcmVsZWFzZV9kYXRhKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBza2JfcmVsZWFzZV9kYXRhKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKCFza2ItPmNsb25lZCB8fAogCSAgICAhYXRvbWljX3N1Yl9yZXR1cm4oc2tiLT5ub2hkciA/ICgxIDw8IFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxLApAQCAtMTg0OCwxMyArMTg1NCwxMyBAQAogLyoqCiAgKglza2Jfc2VnbWVudCAtIFBlcmZvcm0gcHJvdG9jb2wgc2VnbWVudGF0aW9uIG9uIHNrYi4KICAqCUBza2I6IGJ1ZmZlciB0byBzZWdtZW50Ci0gKglAc2c6IHdoZXRoZXIgc2NhdHRlci1nYXRoZXIgY2FuIGJlIHVzZWQgZm9yIGdlbmVyYXRlZCBzZWdtZW50cworICoJQGZlYXR1cmVzOiBmZWF0dXJlcyBmb3IgdGhlIG91dHB1dCBwYXRoIChzZWUgZGV2LT5mZWF0dXJlcykKICAqCiAgKglUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHNlZ21lbnRhdGlvbiBvbiB0aGUgZ2l2ZW4gc2tiLiAgSXQgcmV0dXJucwogICoJdGhlIHNlZ21lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiAgSXQgcmV0dXJucyBOVUxMIGlmIHRoZXJlIGFyZQogICoJbm8gbW9yZSBzZWdtZW50cyB0byBnZW5lcmF0ZSwgb3Igd2hlbiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KICAqLwotc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBzZykKK3N0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDsKQEAgLTE4NjMsNiArMTg2OSw3IEBACiAJdW5zaWduZWQgaW50IG9mZnNldCA9IGRvZmZzZXQ7CiAJdW5zaWduZWQgaW50IGhlYWRyb29tOwogCXVuc2lnbmVkIGludCBsZW47CisJaW50IHNnID0gZmVhdHVyZXMgJiBORVRJRl9GX1NHOwogCWludCBuZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCWludCBlcnIgPSAtRU5PTUVNOwogCWludCBpID0gMDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA1ZDgyMGMzLi41MWZjZmJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC05Miw3ICs5Miw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CkBAIC0xMzAsNiArMTI5LDUzIEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2VuZGlmCiAKKy8qCisgKiBFYWNoIGFkZHJlc3MgZmFtaWx5IG1pZ2h0IGhhdmUgZGlmZmVyZW50IGxvY2tpbmcgcnVsZXMsIHNvIHdlIGhhdmUKKyAqIG9uZSBzbG9jayBrZXkgcGVyIGFkZHJlc3MgZmFtaWx5OgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGFmX2ZhbWlseV9rZXlzW0FGX01BWF07CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGFmX2ZhbWlseV9zbG9ja19rZXlzW0FGX01BWF07CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworLyoKKyAqIE1ha2UgbG9jayB2YWxpZGF0b3Igb3V0cHV0IG1vcmUgcmVhZGFibGUuICh3ZSBwcmUtY29uc3RydWN0IHRoZXNlCisgKiBzdHJpbmdzIGJ1aWxkLXRpbWUsIHNvIHRoYXQgcnVudGltZSBpbml0aWFsaXphdGlvbiBvZiBzb2NrZXQKKyAqIGxvY2tzIGlzIGZhc3QpOgorICovCitzdGF0aWMgY29uc3QgY2hhciAqYWZfZmFtaWx5X2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKKyAgInNrX2xvY2stQUZfVU5TUEVDIiwgInNrX2xvY2stQUZfVU5JWCIgICAgICwgInNrX2xvY2stQUZfSU5FVCIgICAgICwKKyAgInNrX2xvY2stQUZfQVgyNSIgICwgInNrX2xvY2stQUZfSVBYIiAgICAgICwgInNrX2xvY2stQUZfQVBQTEVUQUxLIiwKKyAgInNrX2xvY2stQUZfTkVUUk9NIiwgInNrX2xvY2stQUZfQlJJREdFIiAgICwgInNrX2xvY2stQUZfQVRNUFZDIiAgICwKKyAgInNrX2xvY2stQUZfWDI1IiAgICwgInNrX2xvY2stQUZfSU5FVDYiICAgICwgInNrX2xvY2stQUZfUk9TRSIgICAgICwKKyAgInNrX2xvY2stQUZfREVDbmV0IiwgInNrX2xvY2stQUZfTkVUQkVVSSIgICwgInNrX2xvY2stQUZfU0VDVVJJVFkiICwKKyAgInNrX2xvY2stQUZfS0VZIiAgICwgInNrX2xvY2stQUZfTkVUTElOSyIgICwgInNrX2xvY2stQUZfUEFDS0VUIiAgICwKKyAgInNrX2xvY2stQUZfQVNIIiAgICwgInNrX2xvY2stQUZfRUNPTkVUIiAgICwgInNrX2xvY2stQUZfQVRNU1ZDIiAgICwKKyAgInNrX2xvY2stMjEiICAgICAgICwgInNrX2xvY2stQUZfU05BIiAgICAgICwgInNrX2xvY2stQUZfSVJEQSIgICAgICwKKyAgInNrX2xvY2stQUZfUFBQT1giICwgInNrX2xvY2stQUZfV0FOUElQRSIgICwgInNrX2xvY2stQUZfTExDIiAgICAgICwKKyAgInNrX2xvY2stMjciICAgICAgICwgInNrX2xvY2stMjgiICAgICAgICAgICwgInNrX2xvY2stMjkiICAgICAgICAgICwKKyAgInNrX2xvY2stQUZfVElQQyIgICwgInNrX2xvY2stQUZfQkxVRVRPT1RIIiwgInNrX2xvY2stQUZfTUFYIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICphZl9mYW1pbHlfc2xvY2tfa2V5X3N0cmluZ3NbQUZfTUFYKzFdID0geworICAic2xvY2stQUZfVU5TUEVDIiwgInNsb2NrLUFGX1VOSVgiICAgICAsICJzbG9jay1BRl9JTkVUIiAgICAgLAorICAic2xvY2stQUZfQVgyNSIgICwgInNsb2NrLUFGX0lQWCIgICAgICAsICJzbG9jay1BRl9BUFBMRVRBTEsiLAorICAic2xvY2stQUZfTkVUUk9NIiwgInNsb2NrLUFGX0JSSURHRSIgICAsICJzbG9jay1BRl9BVE1QVkMiICAgLAorICAic2xvY2stQUZfWDI1IiAgICwgInNsb2NrLUFGX0lORVQ2IiAgICAsICJzbG9jay1BRl9ST1NFIiAgICAgLAorICAic2xvY2stQUZfREVDbmV0IiwgInNsb2NrLUFGX05FVEJFVUkiICAsICJzbG9jay1BRl9TRUNVUklUWSIgLAorICAic2xvY2stQUZfS0VZIiAgICwgInNsb2NrLUFGX05FVExJTksiICAsICJzbG9jay1BRl9QQUNLRVQiICAgLAorICAic2xvY2stQUZfQVNIIiAgICwgInNsb2NrLUFGX0VDT05FVCIgICAsICJzbG9jay1BRl9BVE1TVkMiICAgLAorICAic2xvY2stMjEiICAgICAgICwgInNsb2NrLUFGX1NOQSIgICAgICAsICJzbG9jay1BRl9JUkRBIiAgICAgLAorICAic2xvY2stQUZfUFBQT1giICwgInNsb2NrLUFGX1dBTlBJUEUiICAsICJzbG9jay1BRl9MTEMiICAgICAgLAorICAic2xvY2stMjciICAgICAgICwgInNsb2NrLTI4IiAgICAgICAgICAsICJzbG9jay0yOSIgICAgICAgICAgLAorICAic2xvY2stQUZfVElQQyIgICwgInNsb2NrLUFGX0JMVUVUT09USCIsICJzbG9jay1BRl9NQVgiCit9OworI2VuZGlmCisKKy8qCisgKiBza19jYWxsYmFja19sb2NrIGxvY2tpbmcgcnVsZXMgYXJlIHBlci1hZGRyZXNzLWZhbWlseSwKKyAqIHNvIHNwbGl0IHRoZSBsb2NrIGNsYXNzZXMgYnkgdXNpbmcgYSBwZXItQUYga2V5OgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGFmX2NhbGxiYWNrX2tleXNbQUZfTUFYXTsKKwogLyogVGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIHNpemUgb2YgdGhlIHN0cnVjdCBza19idWZmIG92ZXJoZWFkIGluIHRoZQogICogZGV0ZXJtaW5hdGlvbiBvZiB0aGVzZSB2YWx1ZXMsIHNpbmNlIHRoYXQgaXMgbm9uLWNvbnN0YW50IGFjcm9zcwogICogcGxhdGZvcm1zLiAgVGhpcyBtYWtlcyBzb2NrZXQgcXVldWVpbmcgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlCkBAIC0yMzgsOSArMjg0LDE2IEBACiAJc2tiLT5kZXYgPSBOVUxMOwogCiAJYmhfbG9ja19zb2NrKHNrKTsKLQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCisJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CisJCS8qCisJCSAqIHRyeWxvY2sgKyB1bmxvY2sgc2VtYW50aWNzOgorCQkgKi8KKwkJbXV0ZXhfYWNxdWlyZSgmc2stPnNrX2xvY2suZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOworCiAJCXJjID0gc2stPnNrX2JhY2tsb2dfcmN2KHNrLCBza2IpOwotCWVsc2UKKworCQltdXRleF9yZWxlYXNlKCZzay0+c2tfbG9jay5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJfSBlbHNlCiAJCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIG91dDoKQEAgLTU2NSw2ICs2MTgsMTMgQEAKIAkJCXJldCA9IC1FTk9ORVQ7CiAJCQlicmVhazsKIAorCQljYXNlIFNPX1BBU1NTRUM6CisJCQlpZiAodmFsYm9vbCkKKwkJCQlzZXRfYml0KFNPQ0tfUEFTU1NFQywgJnNvY2stPmZsYWdzKTsKKwkJCWVsc2UKKwkJCQljbGVhcl9iaXQoU09DS19QQVNTU0VDLCAmc29jay0+ZmxhZ3MpOworCQkJYnJlYWs7CisKIAkJLyogV2UgaW1wbGVtZW50IHRoZSBTT19TTkRMT1dBVCBldGMgdG8KIAkJICAgbm90IGJlIHNldHRhYmxlICgxMDAzLjFnIDUuMykgKi8KIAkJZGVmYXVsdDoKQEAgLTcyMyw2ICs3ODMsMTAgQEAKIAkJCXYudmFsID0gc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU47CiAJCQlicmVhazsKIAorCQljYXNlIFNPX1BBU1NTRUM6CisJCQl2LnZhbCA9IHRlc3RfYml0KFNPQ0tfUEFTU1NFQywgJnNvY2stPmZsYWdzKSA/IDEgOiAwOworCQkJYnJlYWs7CisKIAkJY2FzZSBTT19QRUVSU0VDOgogCQkJcmV0dXJuIHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzb2NrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTsKIApAQCAtNzM5LDYgKzgwMywzMyBAQAogICAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIGFuIHNrX2xvY2suCisgKgorICogKFdlIGFsc28gcmVnaXN0ZXIgdGhlIHNrX2xvY2sgd2l0aCB0aGUgbG9jayB2YWxpZGF0b3IuKQorICovCitzdGF0aWMgdm9pZCBpbmxpbmUgc29ja19sb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrKQoreworCXNwaW5fbG9ja19pbml0KCZzay0+c2tfbG9jay5zbG9jayk7CisJc2stPnNrX2xvY2sub3duZXIgPSBOVUxMOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNrLT5za19sb2NrLndxKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlaW5pdGlhbGl6aW5nIGEgaGVsZCBsb2NrOgorCSAqLworCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKCh2b2lkICopJnNrLT5za19sb2NrLCBzaXplb2Yoc2stPnNrX2xvY2spKTsKKworCS8qCisJICogTWFyayBib3RoIHRoZSBza19sb2NrIGFuZCB0aGUgc2tfbG9jay5zbG9jayBhcyBhCisJICogcGVyLWFkZHJlc3MtZmFtaWx5IGxvY2sgY2xhc3M6CisJICovCisJbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoJnNrLT5za19sb2NrLnNsb2NrLAorCQkJCSAgIGFmX2ZhbWlseV9zbG9ja19rZXlzICsgc2stPnNrX2ZhbWlseSwKKwkJCQkgICBhZl9mYW1pbHlfc2xvY2tfa2V5X3N0cmluZ3Nbc2stPnNrX2ZhbWlseV0pOworCWxvY2tkZXBfaW5pdF9tYXAoJnNrLT5za19sb2NrLmRlcF9tYXAsCisJCQkgYWZfZmFtaWx5X2tleV9zdHJpbmdzW3NrLT5za19mYW1pbHldLAorCQkJIGFmX2ZhbWlseV9rZXlzICsgc2stPnNrX2ZhbWlseSk7Cit9CisKIC8qKgogICoJc2tfYWxsb2MgLSBBbGwgc29ja2V0IG9iamVjdHMgYXJlIGFsbG9jYXRlZCBoZXJlCiAgKglAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKQEAgLTgzOCw2ICs5MjksOCBAQAogCiAJCXJ3bG9ja19pbml0KCZuZXdzay0+c2tfZHN0X2xvY2spOwogCQlyd2xvY2tfaW5pdCgmbmV3c2stPnNrX2NhbGxiYWNrX2xvY2spOworCQlsb2NrZGVwX3NldF9jbGFzcygmbmV3c2stPnNrX2NhbGxiYWNrX2xvY2ssCisJCQkJICAgYWZfY2FsbGJhY2tfa2V5cyArIG5ld3NrLT5za19mYW1pbHkpOwogCiAJCW5ld3NrLT5za19kc3RfY2FjaGUJPSBOVUxMOwogCQluZXdzay0+c2tfd21lbV9xdWV1ZWQJPSAwOwpAQCAtMTQxMiw2ICsxNTA1LDggQEAKIAogCXJ3bG9ja19pbml0KCZzay0+c2tfZHN0X2xvY2spOwogCXJ3bG9ja19pbml0KCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnNrLT5za19jYWxsYmFja19sb2NrLAorCQkJICAgYWZfY2FsbGJhY2tfa2V5cyArIHNrLT5za19mYW1pbHkpOwogCiAJc2stPnNrX3N0YXRlX2NoYW5nZQk9CXNvY2tfZGVmX3dha2V1cDsKIAlzay0+c2tfZGF0YV9yZWFkeQk9CXNvY2tfZGVmX3JlYWRhYmxlOwpAQCAtMTQzOSwyNCArMTUzNCwzNCBAQAogdm9pZCBmYXN0Y2FsbCBsb2NrX3NvY2soc3RydWN0IHNvY2sgKnNrKQogewogCW1pZ2h0X3NsZWVwKCk7Ci0Jc3Bpbl9sb2NrX2JoKCYoc2stPnNrX2xvY2suc2xvY2spKTsKKwlzcGluX2xvY2tfYmgoJnNrLT5za19sb2NrLnNsb2NrKTsKIAlpZiAoc2stPnNrX2xvY2sub3duZXIpCiAJCV9fbG9ja19zb2NrKHNrKTsKIAlzay0+c2tfbG9jay5vd25lciA9ICh2b2lkICopMTsKLQlzcGluX3VubG9ja19iaCgmKHNrLT5za19sb2NrLnNsb2NrKSk7CisJc3Bpbl91bmxvY2soJnNrLT5za19sb2NrLnNsb2NrKTsKKwkvKgorCSAqIFRoZSBza19sb2NrIGhhcyBtdXRleF9sb2NrKCkgc2VtYW50aWNzIGhlcmU6CisJICovCisJbXV0ZXhfYWNxdWlyZSgmc2stPnNrX2xvY2suZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiBFWFBPUlRfU1lNQk9MKGxvY2tfc29jayk7CiAKIHZvaWQgZmFzdGNhbGwgcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzcGluX2xvY2tfYmgoJihzay0+c2tfbG9jay5zbG9jaykpOworCS8qCisJICogVGhlIHNrX2xvY2sgaGFzIG11dGV4X3VubG9jaygpIHNlbWFudGljczoKKwkgKi8KKwltdXRleF9yZWxlYXNlKCZzay0+c2tfbG9jay5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisKKwlzcGluX2xvY2tfYmgoJnNrLT5za19sb2NrLnNsb2NrKTsKIAlpZiAoc2stPnNrX2JhY2tsb2cudGFpbCkKIAkJX19yZWxlYXNlX3NvY2soc2spOwogCXNrLT5za19sb2NrLm93bmVyID0gTlVMTDsKLSAgICAgICAgaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJihzay0+c2tfbG9jay53cSkpKQotCQl3YWtlX3VwKCYoc2stPnNrX2xvY2sud3EpKTsKLQlzcGluX3VubG9ja19iaCgmKHNrLT5za19sb2NrLnNsb2NrKSk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnNrLT5za19sb2NrLndxKSkKKwkJd2FrZV91cCgmc2stPnNrX2xvY2sud3EpOworCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfbG9jay5zbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlbGVhc2Vfc29jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggNzEwNDUzNi4uMDI1MzQxMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTcsNyArNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IGVjN2E4OWIuLjBhZGY0YjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKaW5kZXggZDRmOWUyZC4uZTk2MTU2MiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMi5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAtIGppZmZpZXMgd3JhcHBpbmcKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiLi4vY2NpZC5oIgogI2luY2x1ZGUgIi4uL2RjY3AuaCIKICNpbmNsdWRlICJjY2lkMi5oIgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKaW5kZXggYjRhNTFkMC4uYzM5YmZmNyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgIi4uL2NjaWQuaCIKICNpbmNsdWRlICIuLi9kY2NwLmgiCiAjaW5jbHVkZSAibGliL3BhY2tldF9oaXN0b3J5LmgiCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCBmMThiOTZkNC4uNWFkZTRmNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAorKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCkBAIC0zNiw3ICszNiw2IEBACiAjaWZuZGVmIF9EQ0NQX0NDSUQzX0hfCiAjZGVmaW5lIF9EQ0NQX0NDSUQzX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5jIGIvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYwppbmRleCA0YzAxYTU0Li41ZDdiN2Q4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmMKQEAgLTExLDcgKzExLDYgQEAKICAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgImxvc3NfaW50ZXJ2YWwuaCIKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmggYi9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5oCmluZGV4IDQxN2Q5ZDguLjQzYmY3ODIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmgKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuaApAQCAtMTMsNyArMTMsNiBAQAogICogIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5jIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKaW5kZXggZDNmOWQyMC4uYWQ5OGQ2YSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKQEAgLTM0LDcgKzM0LDYgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKaW5kZXggMTIyZTk2Ny4uNjczYzIwOSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpZm5kZWYgX0RDQ1BfUEtUX0hJU1RfCiAjZGVmaW5lIF9EQ0NQX1BLVF9ISVNUXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9saWIvdGZyY19lcXVhdGlvbi5jIGIvbmV0L2RjY3AvY2NpZHMvbGliL3RmcmNfZXF1YXRpb24uYwppbmRleCBhZGQzY2FlLi40ZmQyZWJlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9saWIvdGZyY19lcXVhdGlvbi5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IDFmZTUwOTEuLmQwMGEyZjQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RjY3AuaAorKysgYi9uZXQvZGNjcC9kY2NwLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAjaW5jbHVkZSA8bmV0L3NubXAuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGlhZy5jIGIvbmV0L2RjY3AvZGlhZy5jCmluZGV4IDBmMjVkYzMuLjBmMzc0NTUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RpYWcuYworKysgYi9uZXQvZGNjcC9kaWFnLmMKQEAgLTksNyArOSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0X2RpYWcuaD4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuYyBiL25ldC9kY2NwL2ZlYXQuYwppbmRleCBiMzllMmE1Li5hMWIwNjgyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmMKKysrIGIvbmV0L2RjY3AvZmVhdC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSAiZGNjcC5oIgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaW5wdXQuYyBiL25ldC9kY2NwL2lucHV0LmMKaW5kZXggYmZjNTM2Ni4uN2Y5ZGM2YSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaW5wdXQuYworKysgYi9uZXQvZGNjcC9pbnB1dC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCBmMmMwMTFmLi5jMzA3M2U3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCmluZGV4IDY1ZTJhYjAuLmZmNDJiYzQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjYuYworKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgveGZybS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5oIGIvbmV0L2RjY3AvaXB2Ni5oCmluZGV4IGU0ZDRlOTMuLjZlZWY4MWZkIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmgKKysrIGIvbmV0L2RjY3AvaXB2Ni5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCBjMDM0OWU1Li45MDQ1NDM4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMTAsNyArMTAsNiBAQAogICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggZTlmZWIyYS4uYzNjZGExZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMTEsNyArMTEsNiBAQAogICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RjY3AuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCA3NDA5ZTRhLi41ODY2OWJlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMTAsNyArMTAsNiBAQAogICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggNTMxN2ZkMy4uZjRmMDYyNyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC05LDcgKzksNiBAQAogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RjY3AuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avc3lzY3RsLmMgYi9uZXQvZGNjcC9zeXNjdGwuYwppbmRleCA2NGM4OWU5Li5jMWJhOTQ1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9zeXNjdGwuYworKysgYi9uZXQvZGNjcC9zeXNjdGwuYwpAQCAtOSw3ICs5LDYgQEAKICAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC90aW1lci5jIGIvbmV0L2RjY3AvdGltZXIuYwppbmRleCA1MjQ0NDE1Li44NDQ3NzQyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC90aW1lci5jCisrKyBiL25ldC9kY2NwL3RpbWVyLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RjY3AuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggMmIyODllZi4uNTQ4NjI0NyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC05OSw3ICs5OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl9iaW5kIGZpeGVzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9kZXYuYyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKaW5kZXggYTI2ZmY5Zi4uOThhMjUyMCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9kZXYuYworKysgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcy4gQWxsIG10dSBiYXNlZCBub3cuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9maWIuYyBiL25ldC9kZWNuZXQvZG5fZmliLmMKaW5kZXggYmQ0Y2U4Ni4uMDM3NTA3NyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9maWIuYworKysgYi9uZXQvZGVjbmV0L2RuX2ZpYi5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgY29kZSB3YXMgY29waWVkIGZyb20gaXQuCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25laWdoLmMgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKaW5kZXggNjZlMjMwYy4uNWNlOWM5ZSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jCisrKyBiL25ldC9kZWNuZXQvZG5fbmVpZ2guYwpAQCAtMjQsNyArMjQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25zcF9pbi5jIGIvbmV0L2RlY25ldC9kbl9uc3BfaW4uYwppbmRleCBhMmJhOWRiLi44NmY3ZjNiIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCisrKyBiL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCA1YWJmNzA1Li4xMzU1NjE0IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC01NSw3ICs1NSw2IEBACiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3J1bGVzLmMgYi9uZXQvZGVjbmV0L2RuX3J1bGVzLmMKaW5kZXggNDQ2ZmFhZi4uMDZlNzg1ZiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9ydWxlcy5jCisrKyBiL25ldC9kZWNuZXQvZG5fcnVsZXMuYwpAQCAtMTMsNyArMTMsNiBAQAogICogQ2hhbmdlczoKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fdGFibGUuYyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwppbmRleCAwZWJjNDZhLi4zN2Q5ZDBhIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKKysrIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDaGFuZ2VzOgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9uZXRmaWx0ZXIvZG5fcnRtc2cuYyBiL25ldC9kZWNuZXQvbmV0ZmlsdGVyL2RuX3J0bXNnLmMKaW5kZXggNzQxMzNlYy4uOGI5OWJkMyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9uZXRmaWx0ZXIvZG5fcnRtc2cuYworKysgYi9uZXQvZGVjbmV0L25ldGZpbHRlci9kbl9ydG1zZy5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlpZiAobmxoLT5ubG1zZ19sZW4gPCBzaXplb2YoKm5saCkgfHwgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKIAkJcmV0dXJuOwogCi0JaWYgKCFjYXBfcmFpc2VkKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBDQVBfTkVUX0FETUlOKSkKKwlpZiAoc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYiwgQ0FQX05FVF9BRE1JTikpCiAJCVJDVl9TS0JfRkFJTCgtRVBFUk0pOwogCiAJLyogRXZlbnR1YWxseSB3ZSBtaWdodCBzZW5kIHJvdXRpbmcgbWVzc2FnZXMgdG9vICovCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKaW5kZXggYmRhNTkyMC4uZTI0NmYwNSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwpAQCAtMTMsNyArMTMsNiBAQAogICogU3RldmUgV2hpdGVob3VzZSAtIE1lbW9yeSBidWZmZXIgc2V0dGluZ3MsIGxpa2UgdGhlIHRjcCBvbmVzCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggODY4MjY1Ni4uMzA5YWU0YyAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2V0aGVybmV0L2V0aC5jIGIvbmV0L2V0aGVybmV0L2V0aC5jCmluZGV4IGM5NzFmMTQuLjM4N2M3MWM1IDEwMDY0NAotLS0gYS9uZXQvZXRoZXJuZXQvZXRoLmMKKysrIGIvbmV0L2V0aGVybmV0L2V0aC5jCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCA3OGIyZDEzLi40OTI2NDczIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC05LDcgKzksNiBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDNmYTVkZjIuLjM0ZGJhMGIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTksNyArOSw2IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCmluZGV4IDY0OWU1ODEuLmM1YTg3NzIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCkBAIC05LDcgKzksNiBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfZ2VvLmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9nZW8uYwppbmRleCAxOTIyNDNhLi4zMDVhMDlkIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9nZW8uYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9nZW8uYwpAQCAtMjQsNyArMjQsNiBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCAyY2I4NGQ4Li4xM2IxZTVmIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMzEsNyArMzEsNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDJiZjU2N2YuLjQ3Y2NmMTUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCA2YTVkZTFiOC4uZGUxNDhhZSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0yNCw3ICsyNCw2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggNDYxMjE2Yi4uMzE4ZDQ2NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAogRVhQT1JUX1NZTUJPTChpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKTsKIAotc3RhdGljIHN0cnVjdCBza19idWZmICppbmV0X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBzZykKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaW5ldF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN0cnVjdCBpcGhkciAqaXBoOwpAQCAtMTEwNiw3ICsxMTA2LDE1IEBACiAJaW50IGlobDsKIAlpbnQgaWQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQorCWlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYKKwkJICAgICB+KFNLQl9HU09fVENQVjQgfAorCQkgICAgICAgU0tCX0dTT19VRFAgfAorCQkgICAgICAgU0tCX0dTT19ET0RHWSB8CisJCSAgICAgICBTS0JfR1NPX1RDUF9FQ04gfAorCQkgICAgICAgMCkpKQorCQlnb3RvIG91dDsKKworCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQogCQlnb3RvIG91dDsKIAogCWlwaCA9IHNrYi0+bmguaXBoOwpAQCAtMTExNCw3ICsxMTIyLDcgQEAKIAlpZiAoaWhsIDwgc2l6ZW9mKCppcGgpKQogCQlnb3RvIG91dDsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGlobCkpCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgaWhsKSkpCiAJCWdvdG8gb3V0OwogCiAJc2tiLT5oLnJhdyA9IF9fc2tiX3B1bGwoc2tiLCBpaGwpOwpAQCAtMTEyNSwxMSArMTEzMywxMSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X3Byb3Rvc1twcm90b10pOwotCWlmIChvcHMgJiYgb3BzLT5nc29fc2VnbWVudCkKLQkJc2VncyA9IG9wcy0+Z3NvX3NlZ21lbnQoc2tiLCBzZyk7CisJaWYgKGxpa2VseShvcHMgJiYgb3BzLT5nc29fc2VnbWVudCkpCisJCXNlZ3MgPSBvcHMtPmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaWYgKElTX0VSUihzZWdzKSkKKwlpZiAoIXNlZ3MgfHwgdW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKIAkJZ290byBvdXQ7CiAKIAlza2IgPSBzZWdzOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWg0LmMgYi9uZXQvaXB2NC9haDQuYwppbmRleCBjNzc4MjIzLi44ZTc0OGJlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9haDQuYworKysgYi9uZXQvaXB2NC9haDQuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCA0NzQ5ZDUwLi43YjUxYjNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtODAsNyArODAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGF0YWdyYW0uYyBiL25ldC9pcHY0L2RhdGFncmFtLmMKaW5kZXggYzFiNDJiNS4uZWM1ZGE0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGF0YWdyYW0uYworKysgYi9uZXQvaXB2NC9kYXRhZ3JhbS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDU0NDE5YjIuLmE3YzY1ZTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqCQkJCQlpZiBubyBtYXRjaCBmb3VuZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCA5YmJkZDQ0OS4uNGUxMTI3MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCAzMTM4N2FiLi5iYTJhNzA3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtMTUsNyArMTUsNiBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2hhc2guYyBiL25ldC9pcHY0L2ZpYl9oYXNoLmMKaW5kZXggZTI4OTBlYy4uM2MxZDMyYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2hhc2guYworKysgYi9uZXQvaXB2NC9maWJfaGFzaC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfcnVsZXMuYyBiL25ldC9pcHY0L2ZpYl9ydWxlcy5jCmluZGV4IGVjNTY2ZjMuLjZjNjQyZDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9ydWxlcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKgkJTWFyYyBCb3VjaGVyCToJcm91dGluZyBieSBmd21hcmsKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggMGY0MTQ1Yi4uNWY4NzUzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMTUsNyArMTUsNiBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3RyaWUuYyBiL25ldC9pcHY0L2ZpYl90cmllLmMKaW5kZXggOTVhNjM5Zi4uMWNiNjUzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3RyaWUuYworKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCkBAIC01Miw3ICs1Miw2IEBACiAKICNkZWZpbmUgVkVSU0lPTiAiMC40MDciCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYml0b3BzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMDE3OTAwMS4uNGM4NmFjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNjQsNyArNjQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggYWI2ODBjOC4uZDI5OWM4ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtNzIsNyArNzIsNiBAQAogICoJCQkJCVZpbmF5IEt1bGthcm5pCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggOWEwMWJiOC4uZTUwYTFiZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCmluZGV4IDQ1N2RiOTkuLjhlN2U0MWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jCisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKaW5kZXggZWU5YjU1MS4uOTVmYWM1NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jIGIvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMKaW5kZXggNDE3ZjEyNi4uY2RkODA1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMKQEAgLTgsNyArOCw2IEBACiAgKgkJRnJvbSBjb2RlIG9yaW5hbGx5IGluIFRDUAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggOWYwYmI1Mi4uYTIyZDExZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtMjEsNyArMjEsNiBAQAogICoJCU1pa2UgTWNMYWdhbgk6CVJvdXRpbmcgYnkgc291cmNlCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggZGE3MzRjNC4uYjg0YjUzYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCBhYjk5YmViLi42ZmY5YjEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfaW5wdXQuYyBiL25ldC9pcHY0L2lwX2lucHV0LmMKaW5kZXggYzkwMjZkYi4uZTFhN2RiYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfaW5wdXQuYworKysgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCkBAIC0xMjEsNyArMTIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDc2MjRmZDEuLmNhMGU3MTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgpAQCAtNzQ0LDcgKzc0Myw3IEBACiAJaWYgKCFlcnIpIHsKIAkJLyogc3BlY2lmeSB0aGUgbGVuZ3RoIG9mIGVhY2ggSVAgZGF0YWdyYW0gZnJhZ21lbnQqLwogCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gbXR1IC0gZnJhZ2hlYWRlcmxlbjsKLQkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fVURQVjQ7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1VEUDsKIAkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpOwogCiAJCXJldHVybiAwOwpAQCAtMTA4OSw3ICsxMDg4LDcgQEAKIAlpZiAoKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKIAkgICAgKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9VRk8pKSB7CiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBtdHUgLSBmcmFnaGVhZGVybGVuOwotCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19VRFBWNDsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fVURQOwogCX0KIAogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCAxMmUwYmYxLi44NGY0M2EzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCQlNaWtlIE1jTGFnYW4JOglSb3V0aW5nIGJ5IHNvdXJjZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDNlZDhiNTcuLjhlMDM3NDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAgIC0gQ29tcHJlc3Npb24gc3RhdHMuCiAgKiAgIC0gQWRhcHRpdmUgY29tcHJlc3Npb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWEzOThlZS4uMzI5MWQ1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtOTQsNyArOTQsNiBAQAogCiAgCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCA3MTdhYjdkLi5iYTMzZjg2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0yOCw3ICsyOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19lc3QuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZXN0LmMKaW5kZXggYzQ1M2UxZS4uNGMxOTQwMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19lc3QuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBDaGFuZ2VzOgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tdWx0aXBhdGhfZHJyLmMgYi9uZXQvaXB2NC9tdWx0aXBhdGhfZHJyLmMKaW5kZXggZGI2NzM3My4uMjUyZTgzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbXVsdGlwYXRoX2Ryci5jCisrKyBiL25ldC9pcHY0L211bHRpcGF0aF9kcnIuYwpAQCAtMTIsNyArMTIsNiBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tdWx0aXBhdGhfcmFuZG9tLmMgYi9uZXQvaXB2NC9tdWx0aXBhdGhfcmFuZG9tLmMKaW5kZXggNTI0OWRiZS4uYjhjMjg5ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbXVsdGlwYXRoX3JhbmRvbS5jCisrKyBiL25ldC9pcHY0L211bHRpcGF0aF9yYW5kb20uYwpAQCAtMTIsNyArMTIsNiBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tdWx0aXBhdGhfcnIuYyBiL25ldC9pcHY0L211bHRpcGF0aF9yci5jCmluZGV4IGI2Y2QyODcuLmJiYTVhYmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L211bHRpcGF0aF9yci5jCisrKyBiL25ldC9pcHY0L211bHRpcGF0aF9yci5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMgYi9uZXQvaXB2NC9tdWx0aXBhdGhfd3JhbmRvbS5jCmluZGV4IDM0MmQwYjkuLmQyNWVjNGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMKKysrIGIvbmV0L2lwdjQvbXVsdGlwYXRoX3dyYW5kb20uYwpAQCAtMTIsNyArMTIsNiBAQAogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGUxZDdmNWYuLmVmMGI1YWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC0zMzIsNyArMzMyLDcgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgbmV3IGlwdGFibGVzIGBoYXNobGltaXQnIG1hdGNoLiAgCiAKLQkgIEFzIG9wcG9zZWQgdG8gYGxpbWl0JywgdGhpcyBtYXRjaCBkeW5hbWljYWxseSBjcmF0ZXMgYSBoYXNoIHRhYmxlCisJICBBcyBvcHBvc2VkIHRvIGBsaW1pdCcsIHRoaXMgbWF0Y2ggZHluYW1pY2FsbHkgY3JlYXRlcyBhIGhhc2ggdGFibGUKIAkgIG9mIGxpbWl0IGJ1Y2tldHMsIGJhc2VkIG9uIHlvdXIgc2VsZWN0aW9uIG9mIHNvdXJjZS9kZXN0aW5hdGlvbgogCSAgaXAgYWRkcmVzc2VzIGFuZC9vciBwb3J0cy4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggZDBkMTkxOS4uODBjNzNjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0xMTIwLDcgKzExMTksOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICh4dF9yZWdpc3Rlcl90YWJsZSh0YWJsZSwgJmJvb3RzdHJhcCwgbmV3aW5mbykgIT0gMCkgeworCXJldCA9IHh0X3JlZ2lzdGVyX3RhYmxlKHRhYmxlLCAmYm9vdHN0cmFwLCBuZXdpbmZvKTsKKwlpZiAocmV0ICE9IDApIHsKIAkJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKaW5kZXggN2U0Y2Y5YS4uYWE0NTkxNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICAqCS0gZXhwb3J0IGlwX2Nvbm50cmFja1tfZXhwZWN0XV97ZmluZF9nZXQscHV0fSBmdW5jdGlvbnMKICAqICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKaW5kZXggNGRjZjUyNi4uMWQxOGM4NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCkBAIC04LDcgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKaW5kZXggMDY2NTY3NC4uYWYzNTIzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYwpAQCAtMTEsNyArMTEsNiBAQAogICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgaHR0cDovL25hdGgzMjMuc291cmNlZm9yZ2UubmV0LwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCmluZGV4IDhjY2ZlMTcuLmIwMjBhMzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19pcmMuYwppbmRleCBhMmFjNWNlLi40NDg4OTA3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCAyMWVlMTI0Li40ZWUwMTZjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMKaW5kZXggMDQxNjA3My4uMmQzNjEyYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCX0KIAogCURFQlVHUCgiQmFzaWMgY2hlY2tzIHBhc3NlZFxuIik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNvdW50ID09IDA7CiB9CiAKIHN0YXRpYyBpbnQgbmV3X3N0YXRlKGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCBjNWMyY2U1Li5mYjkyMGU3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIHZlcnNpb24gMi4yCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA4ODQ0NWFhLi43YmQzYzIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMTIsNyArMTIsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jCmluZGV4IDVkNTA2ZTAuLmNiY2FhNDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXIuYwpAQCAtMTUsNyArMTUsNiBAQAogICoJCS0gbWFrZSBpcF9uYXRfcmVzaXplX3BhY2tldCBtb3JlIGdlbmVyaWMgKFRDUCBhbmQgVURQKQogICoJCS0gYWRkIGlwX25hdF9tYW5nbGVfdWRwX3BhY2tldAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKaW5kZXggZjM5Nzc3Mi4uMWQxNDk5NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYwpAQCAtMzUsNyArMzUsNiBAQAogICogCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYwppbmRleCA5NmNlYWJhLi4zOGFjZmRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jCmluZGV4IGQyMGQ1NTcuLjBiMWI0MTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jCkBAIC00Myw3ICs0Myw2IEBACiAgKiAyMDAwLTA4LTA2OiBDb252ZXJ0IHRvIG5ldyBoZWxwZXIgQVBJIChIYXJhbGQgV2VsdGUpLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKaW5kZXggNjdlNjc2Ny4uMTdkZTA3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zdGFuZGFsb25lLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqIAktIG5vdyBjYXBhYmxlIG9mIG11bHRpcGxlIGV4cGVjdGF0aW9ucyBmb3Igb25lIG1hc3RlcgogICogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCmluZGV4IGI5M2YwNDk0Li4xOThhYzM2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtNDU3LDExICs0NTcsMTkgQEAKIAlpZiAoZW50cnktPmluZm8tPmluZGV2KQogCQlpZiAoZW50cnktPmluZm8tPmluZGV2LT5pZmluZGV4ID09IGlmaW5kZXgpCiAJCQlyZXR1cm4gMTsKLQkJCQogCWlmIChlbnRyeS0+aW5mby0+b3V0ZGV2KQogCQlpZiAoZW50cnktPmluZm8tPm91dGRldi0+aWZpbmRleCA9PSBpZmluZGV4KQogCQkJcmV0dXJuIDE7Ci0KKyNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgorCWlmIChlbnRyeS0+c2tiLT5uZl9icmlkZ2UpIHsKKwkJaWYgKGVudHJ5LT5za2ItPm5mX2JyaWRnZS0+cGh5c2luZGV2ICYmCisJCSAgICBlbnRyeS0+c2tiLT5uZl9icmlkZ2UtPnBoeXNpbmRldi0+aWZpbmRleCA9PSBpZmluZGV4KQorCQkJcmV0dXJuIDE7CisJCWlmIChlbnRyeS0+c2tiLT5uZl9icmlkZ2UtPnBoeXNvdXRkZXYgJiYKKwkJICAgIGVudHJ5LT5za2ItPm5mX2JyaWRnZS0+cGh5c291dGRldi0+aWZpbmRleCA9PSBpZmluZGV4KQorCQkgICAgCXJldHVybiAxOworCX0KKyNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC01MDcsNyArNTE1LDcgQEAKIAlpZiAodHlwZSA8PSBJUFFNX0JBU0UpCiAJCXJldHVybjsKIAkJCi0JaWYgKHNlY3VyaXR5X25ldGxpbmtfcmVjdihza2IpKQorCWlmIChzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfTkVUX0FETUlOKSkKIAkJUkNWX1NLQl9GQUlMKC1FUEVSTSk7CiAJCiAJd3JpdGVfbG9ja19iaCgmcXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNzA2YzAwMi4uZmM1YmRkNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMTQsNyArMTQsNiBAQAogICogMDggT2N0IDIwMDUgSGFyYWxkIFdlbHRlIDxsYWZvcmVAbmV0ZmlsdGVyLm9yZz4KICAqIAktIEdlbmVyYWxpemUgaW50byAieF90YWJsZXMiIGxheWVyIGFuZCAie2lwLGlwNixhcnB9X3RhYmxlcyIKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtMjExMyw3ICsyMTEyLDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoeHRfcmVnaXN0ZXJfdGFibGUodGFibGUsICZib290c3RyYXAsIG5ld2luZm8pICE9IDApIHsKKwlyZXQgPSB4dF9yZWdpc3Rlcl90YWJsZSh0YWJsZSwgJmJvb3RzdHJhcCwgbmV3aW5mbyk7CisJaWYgKHJldCAhPSAwKSB7CiAJCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBkYmM4M2M1Li5jYmZmZWFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvamhhc2guaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKaW5kZXggOGIzZTdmOS4uZWJkOTRmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKQEAgLTksNyArOSw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTkVUTUFQLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jCmluZGV4IDJmY2YxMDcuLjczNmM0YjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTkVUTUFQLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ORVRNQVAuYwpAQCAtMTAsNyArMTAsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwppbmRleCA0MzFhM2NlLi4yNjliYzIwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwppbmRleCBjODRjYzAzLi5kN2RkN2ZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwpAQCAtNDcsNyArNDcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCAzOTdiOTVjLi40ZTc5OThiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqIEV4dGVuZGVkIHRvIGFsbCBmaXZlIG5ldGZpbHRlciBob29rcyBieSBCcmFkIENoYXBtYW4gJiBIYXJhbGQgV2VsdGUKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggOGNjOGUxYi4uMGFmODAzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvdG9jb2wuYyBiL25ldC9pcHY0L3Byb3RvY29sLmMKaW5kZXggMjkxODMxZS4uMDVmNTExNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvdG9jb2wuYworKysgYi9uZXQvaXB2NC9wcm90b2NvbC5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDYwYjExYWUuLjJkYzZkYmIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTY0LDcgKzY0LDYgQEAKICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTIwNiwyMSArMjA1LDI3IEBACiBzdHJ1Y3QgcnRfaGFzaF9idWNrZXQgewogCXN0cnVjdCBydGFibGUJKmNoYWluOwogfTsKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spIHx8IFwKKwlkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKQogLyoKICAqIEluc3RlYWQgb2YgdXNpbmcgb25lIHNwaW5sb2NrIGZvciBlYWNoIHJ0X2hhc2hfYnVja2V0LCB3ZSB1c2UgYSB0YWJsZSBvZiBzcGlubG9ja3MKICAqIFRoZSBzaXplIG9mIHRoaXMgdGFibGUgaXMgYSBwb3dlciBvZiB0d28gYW5kIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBDUFVTLgorICogKG9uIGxvY2tkZXAgd2UgaGF2ZSBhIHF1aXRlIGJpZyBzcGlubG9ja190LCBzbyBrZWVwIHRoZSBzaXplIGRvd24gdGhlcmUpCiAgKi8KLSNpZiBOUl9DUFVTID49IDMyCi0jZGVmaW5lIFJUX0hBU0hfTE9DS19TWgk0MDk2Ci0jZWxpZiBOUl9DUFVTID49IDE2Ci0jZGVmaW5lIFJUX0hBU0hfTE9DS19TWgkyMDQ4Ci0jZWxpZiBOUl9DUFVTID49IDgKLSNkZWZpbmUgUlRfSEFTSF9MT0NLX1NaCTEwMjQKLSNlbGlmIE5SX0NQVVMgPj0gNAotI2RlZmluZSBSVF9IQVNIX0xPQ0tfU1oJNTEyCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKyMgZGVmaW5lIFJUX0hBU0hfTE9DS19TWgkyNTYKICNlbHNlCi0jZGVmaW5lIFJUX0hBU0hfTE9DS19TWgkyNTYKKyMgaWYgTlJfQ1BVUyA+PSAzMgorIyAgZGVmaW5lIFJUX0hBU0hfTE9DS19TWgk0MDk2CisjIGVsaWYgTlJfQ1BVUyA+PSAxNgorIyAgZGVmaW5lIFJUX0hBU0hfTE9DS19TWgkyMDQ4CisjIGVsaWYgTlJfQ1BVUyA+PSA4CisjICBkZWZpbmUgUlRfSEFTSF9MT0NLX1NaCTEwMjQKKyMgZWxpZiBOUl9DUFVTID49IDQKKyMgIGRlZmluZSBSVF9IQVNIX0xPQ0tfU1oJNTEyCisjIGVsc2UKKyMgIGRlZmluZSBSVF9IQVNIX0xPQ0tfU1oJMjU2CisjIGVuZGlmCiAjZW5kaWYKIAogc3RhdGljIHNwaW5sb2NrX3QJKnJ0X2hhc2hfbG9ja3M7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IGNlNGNkNWYuLjcwY2VhOWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9zbm1wLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGMwNDE3NmIuLmY2YTJkOTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0yNDcsNyArMjQ3LDYgQEAKICAqCVRDUF9DTE9TRQkJc29ja2V0IGlzIGZpbmlzaGVkCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KQEAgLTY0Myw3ICs2NDIsNyBAQAogCWludCB0bXAgPSB0cC0+bXNzX2NhY2hlOwogCiAJaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykgewotCQlpZiAoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX1RTTykKKwkJaWYgKHNrX2Nhbl9nc28oc2spKQogCQkJdG1wID0gMDsKIAkJZWxzZSB7CiAJCQlpbnQgcGdicmVhayA9IFNLQl9NQVhfSEVBRChNQVhfVENQX0hFQURFUik7CkBAIC0yMTQ1LDcgKzIxNDQsNyBAQAogRVhQT1JUX1NZTUJPTChjb21wYXRfdGNwX2dldHNvY2tvcHQpOwogI2VuZGlmCiAKLXN0cnVjdCBza19idWZmICp0Y3BfdHNvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNnKQorc3RydWN0IHNrX2J1ZmYgKnRjcF90c29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN0cnVjdCB0Y3BoZHIgKnRoOwpAQCAtMjE2OSw3ICsyMTY4LDI4IEBACiAJb2xkbGVuID0gKHUxNil+c2tiLT5sZW47CiAJX19za2JfcHVsbChza2IsIHRobGVuKTsKIAotCXNlZ3MgPSBza2Jfc2VnbWVudChza2IsIHNnKTsKKwlpZiAoc2tiX2dzb19vayhza2IsIGZlYXR1cmVzIHwgTkVUSUZfRl9HU09fUk9CVVNUKSkgeworCQkvKiBQYWNrZXQgaXMgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLCByZXNldCBnc29fc2Vncy4gKi8KKwkJaW50IHR5cGUgPSBza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlOworCQlpbnQgbXNzOworCisJCWlmICh1bmxpa2VseSh0eXBlICYKKwkJCSAgICAgfihTS0JfR1NPX1RDUFY0IHwKKwkJCSAgICAgICBTS0JfR1NPX0RPREdZIHwKKwkJCSAgICAgICBTS0JfR1NPX1RDUF9FQ04gfAorCQkJICAgICAgIFNLQl9HU09fVENQVjYgfAorCQkJICAgICAgIDApIHx8CisJCQkgICAgICEodHlwZSAmIChTS0JfR1NPX1RDUFY0IHwgU0tCX0dTT19UQ1BWNikpKSkKKwkJCWdvdG8gb3V0OworCisJCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPSAoc2tiLT5sZW4gKyBtc3MgLSAxKSAvIG1zczsKKworCQlzZWdzID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJc2VncyA9IHNrYl9zZWdtZW50KHNrYiwgZmVhdHVyZXMpOwogCWlmIChJU19FUlIoc2VncykpCiAJCWdvdG8gb3V0OwogCkBAIC0yMjA1LDYgKzIyMjUsNyBAQAogb3V0OgogCXJldHVybiBzZWdzOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfdHNvX3NlZ21lbnQpOwogCiBleHRlcm4gdm9pZCBfX3NrYl9jYl90b29fc21hbGxfZm9yX3RjcChpbnQsIGludCk7CiBleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubzsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCBiMmQ5MDIxLi5iMDEzNGFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIFJlbm8uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggODU3ZWVmYy4uNTc2NWY5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY3ViaWMuYyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCmluZGV4IDc4YjdhNmIuLjJiZTI3OTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jdWJpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIFJlbm8uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RpYWcuYyBiL25ldC9pcHY0L3RjcF9kaWFnLmMKaW5kZXggYzE0OGMxMC4uNTdjNWYwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2RpYWcuYworKysgYi9uZXQvaXB2NC90Y3BfZGlhZy5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldF9kaWFnLmg+CkBAIC0yNiw3ICsyNSwxMCBAQAogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCB0Y3BfaW5mbyAqaW5mbyA9IF9pbmZvOwogCi0Jci0+aWRpYWdfcnF1ZXVlID0gdHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcTsKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pCisJCXItPmlkaWFnX3JxdWV1ZSA9IHNrLT5za19hY2tfYmFja2xvZzsKKwllbHNlCisJCXItPmlkaWFnX3JxdWV1ZSA9IHRwLT5yY3Zfbnh0IC0gdHAtPmNvcGllZF9zZXE7CiAJci0+aWRpYWdfd3F1ZXVlID0gdHAtPndyaXRlX3NlcSAtIHRwLT5zbmRfdW5hOwogCWlmIChpbmZvICE9IE5VTEwpCiAJCXRjcF9nZXRfaW5mbyhzaywgaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKaW5kZXggMTEyMDI0NS4uYWFhMTUzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCisrKyBiL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYwpAQCAtNiw3ICs2LDYgQEAKICAqIEpvaG4gSGVmZm5lciA8amhlZmZuZXJAcHNjLmVkdT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHRjcC5jIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwppbmRleCAzZDkyYzE4Li42ZWRmZTVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHRjcC5jCisrKyBiL25ldC9pcHY0L3RjcF9odGNwLmMKQEAgLTYsNyArNiw2IEBACiAgKiBodHRwOi8vd3d3LmhhbWlsdG9uLmllL25ldC9odGNwMy5wZGYKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHlibGEuYyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCmluZGV4IDQwZGJiMzguLjc0MDZlMGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oeWJsYS5jCisrKyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAgICByb290IGF0IGRhbmllbGludXgubmV0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCA5NGZlNWIxLi43MzhkYWQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjMsNyArNjMsNiBAQAogICoJCVBhc2kgU2Fyb2xhaHRpOgkJRi1SVE8gZm9yIGRlYWxpbmcgd2l0aCBzcHVyaW91cyBSVE9zCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CkBAIC00MTc4LDggKzQxNzcsNiBAQAogCQkgKi8KIAogCQlUQ1BfRUNOX3Jjdl9zeW5hY2sodHAsIHRoKTsKLQkJaWYgKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykKLQkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfTk9fTEFSR0VTRU5EKTsKIAogCQl0cC0+c25kX3dsMSA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQl0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOwpAQCAtNDMyMiw4ICs0MzE5LDYgQEAKIAkJdHAtPm1heF93aW5kb3cgPSB0cC0+c25kX3duZDsKIAogCQlUQ1BfRUNOX3Jjdl9zeW4odHAsIHRoKTsKLQkJaWYgKHRwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykKLQkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfTk9fTEFSR0VTRU5EKTsKIAogCQl0Y3BfbXR1cF9pbml0KHNrKTsKIAkJdGNwX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDI1ZWNjNmUuLjVhODg2ZTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNTIsNyArNTIsNiBAQAogICoJCQkJCWEgc2luZ2xlIHBvcnQgYXQgdGhlIHNhbWUgdGltZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CkBAIC05MSw3ICs5MCw3IEBACiB2b2lkIHRjcF92NF9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0cnVjdCBpbmV0X2hhc2hpbmZvIF9fY2FjaGVsaW5lX2FsaWduZWQgdGNwX2hhc2hpbmZvID0gewotCS5saGFzaF9sb2NrCT0gUldfTE9DS19VTkxPQ0tFRCwKKwkubGhhc2hfbG9jawk9IF9fUldfTE9DS19VTkxPQ0tFRCh0Y3BfaGFzaGluZm8ubGhhc2hfbG9jayksCiAJLmxoYXNoX3VzZXJzCT0gQVRPTUlDX0lOSVQoMCksCiAJLmxoYXNoX3dhaXQJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUih0Y3BfaGFzaGluZm8ubGhhc2hfd2FpdCksCiB9OwpAQCAtMjQyLDYgKzI0MSw3IEBACiAJCWdvdG8gZmFpbHVyZTsKIAogCS8qIE9LLCBub3cgY29tbWl0IGRlc3RpbmF0aW9uIHRvIHNvY2tldC4gICovCisJc2stPnNrX2dzb190eXBlID0gU0tCX0dTT19UQ1BWNDsKIAlza19zZXR1cF9jYXBzKHNrLCAmcnQtPnUuZHN0KTsKIAogCWlmICghdHAtPndyaXRlX3NlcSkKQEAgLTg4NCw2ICs4ODQsNyBAQAogCWlmICghbmV3c2spCiAJCWdvdG8gZXhpdDsKIAorCW5ld3NrLT5za19nc29fdHlwZSA9IFNLQl9HU09fVENQVjQ7CiAJc2tfc2V0dXBfY2FwcyhuZXdzaywgZHN0KTsKIAogCW5ld3RwCQkgICAgICA9IHRjcF9zayhuZXdzayk7CkBAIC0xMDg5LDcgKzEwOTAsNyBAQAogCiAJc2tiLT5kZXYgPSBOVUxMOwogCi0JYmhfbG9ja19zb2NrKHNrKTsKKwliaF9sb2NrX3NvY2tfbmVzdGVkKHNrKTsKIAlyZXQgPSAwOwogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewogI2lmZGVmIENPTkZJR19ORVRfRE1BCkBAIC0xNzI2LDcgKzE3MjcsOCBAQAogCXNwcmludGYodG1wYnVmLCAiJTRkOiAlMDhYOiUwNFggJTA4WDolMDRYICUwMlggJTA4WDolMDhYICUwMlg6JTA4bFggIgogCQkJIiUwOFggJTVkICU4ZCAlbHUgJWQgJXAgJXUgJXUgJXUgJXUgJWQiLAogCQlpLCBzcmMsIHNyY3AsIGRlc3QsIGRlc3RwLCBzcC0+c2tfc3RhdGUsCi0JCXRwLT53cml0ZV9zZXEgLSB0cC0+c25kX3VuYSwgdHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcSwKKwkJdHAtPndyaXRlX3NlcSAtIHRwLT5zbmRfdW5hLAorCQkoc3AtPnNrX3N0YXRlID09IFRDUF9MSVNURU4pID8gc3AtPnNrX2Fja19iYWNrbG9nIDogKHRwLT5yY3Zfbnh0IC0gdHAtPmNvcGllZF9zZXEpLAogCQl0aW1lcl9hY3RpdmUsCiAJCWppZmZpZXNfdG9fY2xvY2tfdCh0aW1lcl9leHBpcmVzIC0gamlmZmllcyksCiAJCWljc2stPmljc2tfcmV0cmFuc21pdHMsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggMmI5YjdmNi4uMGNjYjdjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMjAsNyArMjAsNiBAQAogICoJCUpvcmdlIEN3aWssIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KQEAgLTQxLDcgKzQwLDcgQEAKIHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyB0Y3BfZGVhdGhfcm93ID0gewogCS5zeXNjdGxfbWF4X3R3X2J1Y2tldHMgPSBOUl9GSUxFICogMiwKIAkucGVyaW9kCQk9IFRDUF9USU1FV0FJVF9MRU4gLyBJTkVUX1RXRFJfVFdLSUxMX1NMT1RTLAotCS5kZWF0aF9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCS5kZWF0aF9sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQodGNwX2RlYXRoX3Jvdy5kZWF0aF9sb2NrKSwKIAkuaGFzaGluZm8JPSAmdGNwX2hhc2hpbmZvLAogCS50d190aW1lcgk9IFRJTUVSX0lOSVRJQUxJWkVSKGluZXRfdHdkcl9oYW5nbWFuLCAwLAogCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpJnRjcF9kZWF0aF9yb3cpLApAQCAtNDQwLDggKzQzOSw2IEBACiAJCQluZXdpY3NrLT5pY3NrX2Fjay5sYXN0X3NlZ19zaXplID0gc2tiLT5sZW4gLSBuZXd0cC0+dGNwX2hlYWRlcl9sZW47CiAJCW5ld3RwLT5yeF9vcHQubXNzX2NsYW1wID0gcmVxLT5tc3M7CiAJCVRDUF9FQ05fb3BlbnJlcV9jaGlsZChuZXd0cCwgcmVxKTsKLQkJaWYgKG5ld3RwLT5lY25fZmxhZ3MmVENQX0VDTl9PSykKLQkJCXNvY2tfc2V0X2ZsYWcobmV3c2ssIFNPQ0tfTk9fTEFSR0VTRU5EKTsKIAogCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfUEFTU0lWRU9QRU5TKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggYmRkNzFkYi4uNWMwOGVhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNTEwLDggKzUxMCw3IEBACiAKIHN0YXRpYyB2b2lkIHRjcF9zZXRfc2tiX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG1zc19ub3cpCiB7Ci0JaWYgKHNrYi0+bGVuIDw9IG1zc19ub3cgfHwKLQkgICAgIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfVFNPKSkgeworCWlmIChza2ItPmxlbiA8PSBtc3Nfbm93IHx8ICFza19jYW5fZ3NvKHNrKSkgewogCQkvKiBBdm9pZCB0aGUgY29zdGx5IGRpdmlkZSBpbiB0aGUgbm9ybWFsCiAJCSAqIG5vbi1UU08gY2FzZS4KIAkJICovCkBAIC01MjUsNyArNTI0LDcgQEAKIAkJZmFjdG9yIC89IG1zc19ub3c7CiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPSBmYWN0b3I7CiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBtc3Nfbm93OwotCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19UQ1BWNDsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IHNrLT5za19nc29fdHlwZTsKIAl9CiB9CiAKQEAgLTgyNCw5ICs4MjMsNyBAQAogCiAJbXNzX25vdyA9IHRwLT5tc3NfY2FjaGU7CiAKLQlpZiAobGFyZ2VfYWxsb3dlZCAmJgotCSAgICAoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX1RTTykgJiYKLQkgICAgIXRwLT51cmdfbW9kZSkKKwlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSAmJiAhdHAtPnVyZ19tb2RlKQogCQlkb2luZ190c28gPSAxOwogCiAJaWYgKGRzdCkgewpAQCAtMjA0NCw4ICsyMDQxLDYgQEAKIAltZW1zZXQodGgsIDAsIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7CiAJdGgtPnN5biA9IDE7CiAJdGgtPmFjayA9IDE7Ci0JaWYgKGRzdC0+ZGV2LT5mZWF0dXJlcyZORVRJRl9GX1RTTykKLQkJaXJlcS0+ZWNuX29rID0gMDsKIAlUQ1BfRUNOX21ha2Vfc3luYWNrKHJlcSwgdGgpOwogCXRoLT5zb3VyY2UgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CiAJdGgtPmRlc3QgPSBpcmVxLT5ybXRfcG9ydDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggMjZkNzQ4Ni4uNDYyNDUwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTUsNyArNSw2IEBACiAgKiBKb2huIEhlZmZuZXIgPGpoZWZmbmVyQHNjLmVkdT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVnYXMuYyBiL25ldC9pcHY0L3RjcF92ZWdhcy5jCmluZGV4IDNiNzQwMzQuLjQ5MDM2MGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF92ZWdhcy5jCisrKyBiL25ldC9pcHY0L3RjcF92ZWdhcy5jCkBAIC0zMSw3ICszMSw2IEBACiAgKiAgICAgYXNzdW1lZCBzZW5kZXJzIG5ldmVyIHdlbnQgaWRsZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF93ZXN0d29vZC5jIGIvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKaW5kZXggNDI0N2RhMS4uNTQ0NjMxMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKKysrIGIvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIHNzdGhyZXNoIGFmdGVyIHBhY2tldCBsb3NzLiBUaGUgcHJvYmluZyBwaGFzZSBpcyBhcyB0aGUgb3JpZ2luYWwgUmVuby4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggM2Y5MzI5Mi4uOWJmY2RkYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTkxLDcgKzkxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwppbmRleCBjMDQ2NTI4Li44ZjUwZWFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYworKysgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwpAQCAtOSw3ICs5LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDRkYTY2NDUuLmMyNTBkMGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtNDAsNyArNDAsNiBAQAogICoJCQkJCQlzdGF0dXMgZXRjLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBlMTk0NTdmLi41YTBiYTU4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CkBAIC02NjAsOCArNjU5LDYgQEAKIAkJfQogCiAJCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7Ci0JCXNrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzICYKLQkJCX4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCBkMzFjMGQ2Li45ZDQ4MzFiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYworKysgYi9uZXQvaXB2Ni9haDYuYwpAQCAtMjQsNyArMjQsNiBAQAogICogCVRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gbmV0L2lwdjQvYWguYy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2FoLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hbnljYXN0LmMgYi9uZXQvaXB2Ni9hbnljYXN0LmMKaW5kZXggMzllYzUyOC4uZjY4ODFkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYW55Y2FzdC5jCisrKyBiL25ldC9pcHY2L2FueWNhc3QuYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IGExNWE2ZjMuLmEyNzhkNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYworKysgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqIAlUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIG5ldC9pcHY0L2VzcC5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggYTE4ZDQyNS4uOWQwZWU3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgZGVzdG9wdF9wcm90b2NvbCA9IHsKIAkuaGFuZGxlcgk9CWlwdjZfZGVzdG9wdF9yY3YsCi0JLmZsYWdzCQk9CUlORVQ2X1BST1RPX05PUE9MSUNZLAorCS5mbGFncwkJPQlJTkVUNl9QUk9UT19OT1BPTElDWSB8IElORVQ2X1BST1RPX0dTT19FWFRIRFIsCiB9OwogCiB2b2lkIF9faW5pdCBpcHY2X2Rlc3RvcHRfaW5pdCh2b2lkKQpAQCAtMzQwLDcgKzM0MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7CiAJLmhhbmRsZXIJPQlpcHY2X3J0aGRyX3JjdiwKLQkuZmxhZ3MJCT0JSU5FVDZfUFJPVE9fTk9QT0xJQ1ksCisJLmZsYWdzCQk9CUlORVQ2X1BST1RPX05PUE9MSUNZIHwgSU5FVDZfUFJPVE9fR1NPX0VYVEhEUiwKIH07CiAKIHZvaWQgX19pbml0IGlwdjZfcnRoZHJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwppbmRleCBlYjI4NjVkLi41Yzk1MGNjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtMTMsNyArMTMsNiBAQAogICogICAgICAgICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CkBAIC0xODcsOCArMTg2LDYgQEAKIAkJfQogCiAJCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7Ci0JCXNrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzICYKLQkJCX4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOwogCX0KIAogCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKGRzdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggMmFlODRjOS4uZDJmM2ZjOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtMTQsNyArMTQsNiBAQAogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IDJjYjYxNDkuLjc2NDIyMTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqIAkJCQlyZW1vdmUgaXA2X251bGxfZW50cnkgZnJvbSB0aGUgdG9wIG9mCiAgKiAJCQkJcm91dGluZyB0YWJsZS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwppbmRleCBmOWNhNjM5Li4xZDY3MmIwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IGFjZWVlMjUuLmRmOGYwNTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC04NCwxNCArODQsOSBAQAogCSAqLwogCUlQNkNCKHNrYiktPmlpZiA9IHNrYi0+ZHN0ID8gKChzdHJ1Y3QgcnQ2X2luZm8gKilza2ItPmRzdCktPnJ0NmlfaWRldi0+ZGV2LT5pZmluZGV4IDogZGV2LT5pZmluZGV4OwogCi0JaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkKKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmhkcikpKSkKIAkJZ290byBlcnI7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkgewotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKLQkJZ290byBkcm9wOwotCX0KLQogCWhkciA9IHNrYi0+bmguaXB2Nmg7CiAKIAlpZiAoaGRyLT52ZXJzaW9uICE9IDYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggYWJiOTRkZS4uMmM1YjQ0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMjgsNyArMjgsNiBAQAogICoJCQkJZm9yIGRhdGFncmFtIHhtaXQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjMwLDcgKzIyOSw3IEBACiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKIAogCW10dSA9IGRzdF9tdHUoZHN0KTsKLQlpZiAoKHNrYi0+bGVuIDw9IG10dSkgfHwgaXBmcmFnb2spIHsKKwlpZiAoKHNrYi0+bGVuIDw9IG10dSkgfHwgaXBmcmFnb2sgfHwgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgewogCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKIAkJcmV0dXJuIE5GX0hPT0soUEZfSU5FVDYsIE5GX0lQNl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgZHN0LT5kZXYsCiAJCQkJZHN0X291dHB1dCk7CkBAIC04MzUsNyArODM0LDcgQEAKIAkJLyogc3BlY2lmeSB0aGUgbGVuZ3RoIG9mIGVhY2ggSVAgZGF0YWdyYW0gZnJhZ21lbnQqLwogCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gbXR1IC0gZnJhZ2hlYWRlcmxlbiAtIAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7Ci0JCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1VEUFY0OworCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19VRFA7CiAJCWlwdjZfc2VsZWN0X2lkZW50KHNrYiwgJmZoZHIpOwogCQlza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkID0gZmhkci5pZGVudGlmaWNhdGlvbjsKIAkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGE5OTU3OTYuLmJjNzdjMGUxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCBmMjhjZDM3Li5iMjg1YjAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC0zMCw3ICszMCw2IEBACiAgKiAgVGhlIGRlY29tcHJlc3Npb24gb2YgSVAgZGF0YWdyYW0gTVVTVCBiZSBkb25lIGFmdGVyIHRoZSByZWFzc2VtYmx5LCAKICAqICBBSC9FU1AgcHJvY2Vzc2luZy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggNGMyMGVlYi4uMGMxN2RlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KQEAgLTU4LDkgKzU3LDgwIEBACiAKIERFRklORV9TTk1QX1NUQVQoc3RydWN0IGlwc3RhdHNfbWliLCBpcHY2X3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB2Nl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOworCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKKwlzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKm9wczsKKwlpbnQgcHJvdG87CisKKwlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmCisJCSAgICAgfihTS0JfR1NPX1VEUCB8CisJCSAgICAgICBTS0JfR1NPX0RPREdZIHwKKwkJICAgICAgIFNLQl9HU09fVENQX0VDTiB8CisJCSAgICAgICBTS0JfR1NPX1RDUFY2IHwKKwkJICAgICAgIDApKSkKKwkJZ290byBvdXQ7CisKKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwdjZoKSkpKQorCQlnb3RvIG91dDsKKworCWlwdjZoID0gc2tiLT5uaC5pcHY2aDsKKwlwcm90byA9IGlwdjZoLT5uZXh0aGRyOworCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwdjZoKSk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yICg7OykgeworCQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpvcHRoOworCQlpbnQgbGVuOworCisJCWlmIChwcm90byAhPSBORVhUSERSX0hPUCkgeworCQkJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X3Byb3Rvc1twcm90b10pOworCisJCQlpZiAodW5saWtlbHkoIW9wcykpCisJCQkJZ290byB1bmxvY2s7CisKKwkJCWlmICghKG9wcy0+ZmxhZ3MgJiBJTkVUNl9QUk9UT19HU09fRVhUSERSKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIDgpKSkKKwkJCWdvdG8gdW5sb2NrOworCisJCW9wdGggPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJbGVuID0gb3B0aC0+aGRybGVuICogOCArIDg7CisKKwkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpCisJCQlnb3RvIHVubG9jazsKKworCQlwcm90byA9IG9wdGgtPm5leHRoZHI7CisJCV9fc2tiX3B1bGwoc2tiLCBsZW4pOworCX0KKworCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJaWYgKGxpa2VseShvcHMtPmdzb19zZWdtZW50KSkKKwkJc2VncyA9IG9wcy0+Z3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CisKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmICh1bmxpa2VseShJU19FUlIoc2VncykpKQorCQlnb3RvIG91dDsKKworCWZvciAoc2tiID0gc2Vnczsgc2tiOyBza2IgPSBza2ItPm5leHQpIHsKKwkJaXB2NmggPSBza2ItPm5oLmlwdjZoOworCQlpcHY2aC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbiAtIHNrYi0+bWFjX2xlbiAtCisJCQkJCSAgIHNpemVvZigqaXB2NmgpKTsKKwl9CisKK291dDoKKwlyZXR1cm4gc2VnczsKK30KKwogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlID0gewogCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwgCiAJLmZ1bmMgPSBpcHY2X3JjdiwKKwkuZ3NvX3NlZ21lbnQgPSBpcHY2X2dzb19zZWdtZW50LAogfTsKIAogc3RydWN0IGlwNl9yYV9jaGFpbiAqaXA2X3JhX2NoYWluOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zeW1zLmMgYi9uZXQvaXB2Ni9pcHY2X3N5bXMuYwppbmRleCAxNjQ4Mjc4Li5kZDRkMWNlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3N5bXMuYworKysgYi9uZXQvaXB2Ni9pcHY2X3N5bXMuYwpAQCAtMSw1ICsxLDQgQEAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCA2ZTg3MWFmLi45ZDY5N2Q0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTI4LDcgKzI4LDYgQEAKICAqCQktIE1MRHYyIHN1cHBvcnQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggZGZhMjBkMy4uYjUwMDU1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC00OCw3ICs0OCw2IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCBiNGI3ZDQ0Li45NjhhMTRiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC01MDUsNyArNTA1LDcgQEAKIAlpZiAodHlwZSA8PSBJUFFNX0JBU0UpCiAJCXJldHVybjsKIAkKLQlpZiAoc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYikpCisJaWYgKHNlY3VyaXR5X25ldGxpbmtfcmVjdihza2IsIENBUF9ORVRfQURNSU4pKQogCQlSQ1ZfU0tCX0ZBSUwoLUVQRVJNKTsJCiAKIAl3cml0ZV9sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDJlNzJmODkuLmYyNjg5OGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMTksMTMgKzE5LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJfSB3aGlsZSAoIWhvdGRyb3ApOwogCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwotCSgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gPSAweGRlYWQ1N2FjOworCSgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gPSBORVRGSUxURVJfTElOS19QT0lTT047CiAjZW5kaWYKIAlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOwogCkBAIC0xMjgxLDcgKzEyODEsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICh4dF9yZWdpc3Rlcl90YWJsZSh0YWJsZSwgJmJvb3RzdHJhcCwgbmV3aW5mbykgIT0gMCkgeworCXJldCA9IHh0X3JlZ2lzdGVyX3RhYmxlKHRhYmxlLCAmYm9vdHN0cmFwLCBuZXdpbmZvKTsKKwlpZiAocmV0ICE9IDApIHsKIAkJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKaW5kZXggZGUxMTc1Yy4uODYyOWJhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKQEAgLTE1LDcgKzE1LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggMmE3MWMzYi4uYzJhYjM4ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgkgIHN0cnVjdHVyZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCmluZGV4IGMzMmEwMjkuLjAwZDU1ODMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Byb2MuYyBiL25ldC9pcHY2L3Byb2MuYwppbmRleCA3NzlkZGY3Li5lZmVlN2E2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9wcm9jLmMKKysrIGIvbmV0L2lwdjYvcHJvYy5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggZWVmOTg1ZS4uNGUyOTljNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtMjgsNyArMjgsNiBAQAogICoJWU9TSElGVUpJLEguIEBVU0FHSQlBbHdheXMgcmVtb3ZlIGZyYWdtZW50IGhlYWRlciB0bwogICoJCQkJY2FsY3VsYXRlIElDViBjb3JyZWN0bHkuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBlNzI4OTgwLi44N2MzOWM5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA2NTc4YzMwLi5jNTZhZWVjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTgsNyArMTgsNiBAQAogICogTmF0ZSBUaG9tcHNvbiA8bmF0ZUB0aGVib2cubmV0PjoJCTZ0bzQgc3VwcG9ydAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggOGVmZjlmYS4uN2E0NjM5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKQEAgLTcsNyArNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvbmRpc2MuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGE1MGViMzAuLjViZGNiOTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMjYsNyArMjYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CkBAIC0yNzAsOSArMjY5LDggQEAKIAlpcHY2X2FkZHJfY29weSgmbnAtPnNhZGRyLCBzYWRkcik7CiAJaW5ldC0+cmN2X3NhZGRyID0gTE9PUEJBQ0s0X0lQVjY7CiAKKwlzay0+c2tfZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY2OwogCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7Ci0Jc2stPnNrX3JvdXRlX2NhcHMgPSBkc3QtPmRldi0+ZmVhdHVyZXMgJgotCQl+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKIAogCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSAwOwogCWlmIChucC0+b3B0KQpAQCAtOTMwLDkgKzkyOCw4IEBACiAJICogY29tbWVudCBpbiB0aGF0IGZ1bmN0aW9uIGZvciB0aGUgZ29yeSBkZXRhaWxzLiAtYWNtZQogCSAqLwogCisJc2stPnNrX2dzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKIAlpcDZfZHN0X3N0b3JlKG5ld3NrLCBkc3QsIE5VTEwpOwotCW5ld3NrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzICYKLQkJfihORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7CiAKIAluZXd0Y3A2c2sgPSAoc3RydWN0IHRjcDZfc29jayAqKW5ld3NrOwogCWluZXRfc2sobmV3c2spLT5waW5ldDYgPSAmbmV3dGNwNnNrLT5pbmV0NjsKQEAgLTE0NjksNyArMTQ2Niw4IEBACiAJCSAgIGRlc3QtPnM2X2FkZHIzMlswXSwgZGVzdC0+czZfYWRkcjMyWzFdLAogCQkgICBkZXN0LT5zNl9hZGRyMzJbMl0sIGRlc3QtPnM2X2FkZHIzMlszXSwgZGVzdHAsCiAJCSAgIHNwLT5za19zdGF0ZSwgCi0JCSAgIHRwLT53cml0ZV9zZXEtdHAtPnNuZF91bmEsIHRwLT5yY3Zfbnh0LXRwLT5jb3BpZWRfc2VxLAorCQkgICB0cC0+d3JpdGVfc2VxLXRwLT5zbmRfdW5hLAorCQkgICAoc3AtPnNrX3N0YXRlID09IFRDUF9MSVNURU4pID8gc3AtPnNrX2Fja19iYWNrbG9nIDogKHRwLT5yY3Zfbnh0IC0gdHAtPmNvcGllZF9zZXEpLAogCQkgICB0aW1lcl9hY3RpdmUsCiAJCSAgIGppZmZpZXNfdG9fY2xvY2tfdCh0aW1lcl9leHBpcmVzIC0gamlmZmllcyksCiAJCSAgIGljc2stPmljc2tfcmV0cmFuc21pdHMsCkBAIC0xNjA1LDYgKzE2MDMsNyBAQAogc3RhdGljIHN0cnVjdCBpbmV0Nl9wcm90b2NvbCB0Y3B2Nl9wcm90b2NvbCA9IHsKIAkuaGFuZGxlcgk9CXRjcF92Nl9yY3YsCiAJLmVycl9oYW5kbGVyCT0JdGNwX3Y2X2VyciwKKwkuZ3NvX3NlZ21lbnQJPQl0Y3BfdHNvX3NlZ21lbnQsCiAJLmZsYWdzCQk9CUlORVQ2X1BST1RPX05PUE9MSUNZfElORVQ2X1BST1RPX0ZJTkFMLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA4ZDM0MzJhLi5jY2M1N2Y0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMjMsNyArMjMsNiBAQAogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IGVlNzE1ZjIuLjczY2QyNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKaW5kZXggZDM3NzY4ZS4uNmI0NGZlOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIEJhc2VkIG9uIG5ldC9pcHY0L3hmcm00X3R1bm5lbC5jCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgveGZybS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHgvYWZfaXB4LmMgYi9uZXQvaXB4L2FmX2lweC5jCmluZGV4IDgxMWQ5OTguLmFhMzRmZjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvYWZfaXB4LmMKKysrIGIvbmV0L2lweC9hZl9pcHguYwpAQCAtMjgsNyArMjgsNiBAQAogICoJU2VlIG5ldC9pcHgvQ2hhbmdlTG9nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3Byb2MuYyBiL25ldC9pcHgvaXB4X3Byb2MuYwppbmRleCAxZjczZDllLi40YzBjNzEyIDEwMDY0NAotLS0gYS9uZXQvaXB4L2lweF9wcm9jLmMKKysrIGIvbmV0L2lweC9pcHhfcHJvYy5jCkBAIC00LDcgKzQsNiBAQAogICogCUNvcHlyaWdodChDKSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4sIDIwMDIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lweC9pcHhfcm91dGUuYyBiL25ldC9pcHgvaXB4X3JvdXRlLmMKaW5kZXggYmJhMzQzMS4uYTMwZGJiMSAxMDA2NDQKLS0tIGEvbmV0L2lweC9pcHhfcm91dGUuYworKysgYi9uZXQvaXB4L2lweF9yb3V0ZS5jCkBAIC03LDcgKzcsNiBAQAogICoJU2VlIG5ldC9pcHgvQ2hhbmdlTG9nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcm91dGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lweC9zeXNjdGxfbmV0X2lweC5jIGIvbmV0L2lweC9zeXNjdGxfbmV0X2lweC5jCmluZGV4IDUxMGVkYTkuLmZhNTc0NzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvc3lzY3RsX25ldF9pcHguYworKysgYi9uZXQvaXB4L3N5c2N0bF9uZXRfaXB4LmMKQEAgLTYsNyArNiw2IEBACiAgKiBBZGRlZCAvcHJvYy9zeXMvbmV0L2lweC9pcHhfcHByb3BfYnJvYWRjYXN0aW5nIC0gYWNtZSBNYXJjaCA0LCAyMDAxCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCAyZjM3YzlmLi43ZmFlNDhhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC00Miw3ICs0Miw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2NvcmUuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCmluZGV4IDI4Njg4MTkuLjljNGE5MDIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiAgICAgCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCmluZGV4IDZmMjBiNDIwLi5iNDAwZjI3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKQEAgLTMwLDcgKzMwLDYgQEAKICAqICAgICAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTI0LDcgKzEyMyw2IEBACiAJZHJpdmVyLT5vd25lcgkJPSBUSElTX01PRFVMRTsKIAlkcml2ZXItPmRyaXZlcl9uYW1lICAgICA9ICJpcmNvbW0iOwogCWRyaXZlci0+bmFtZSAgICAgICAgICAgID0gImlyY29tbSI7Ci0JZHJpdmVyLT5kZXZmc19uYW1lICAgICAgPSAiaXJjb21tIjsKIAlkcml2ZXItPm1ham9yICAgICAgICAgICA9IElSQ09NTV9UVFlfTUFKT1I7CiAJZHJpdmVyLT5taW5vcl9zdGFydCAgICAgPSBJUkNPTU1fVFRZX01JTk9SOwogCWRyaXZlci0+dHlwZSAgICAgICAgICAgID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMgYi9uZXQvaXJkYS9pcmRhX2RldmljZS5jCmluZGV4IGUzZGViYmQuLmJhNDBlNTQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKKysrIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwpAQCAtMjksNyArMjksNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwLmMgYi9uZXQvaXJkYS9pcmlhcC5jCmluZGV4IDJkMmUyYjEuLmEwNDcyNjUgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwLmMKKysrIGIvbmV0L2lyZGEvaXJpYXAuYwpAQCAtMjQsNyArMjQsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jCmluZGV4IGY4ZTZjYjAuLjk1Y2YxMjMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jCkBAIC0xNzMsMTMgKzE3MywxNCBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZWxmID0gaXJsYW5fZ2V0X2FueSgpOwogCWlmIChzZWxmKSB7Ci0JCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKKwkJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIGdvdG8gb3V0Oyk7CiAKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRm91bmQgaW5zdGFuY2UgKCUwOHgpIVxuIiwgX19GVU5DVElPTl9fICwKIAkJICAgICAgZGFkZHIpOwogCQkKIAkJaXJsYW5fY2xpZW50X3dha2V1cChzZWxmLCBzYWRkciwgZGFkZHIpOwogCX0KK0lSREFfQVNTRVJUX0xBQkVMKG91dDopCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAJCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCmluZGV4IDY1N2QxMjIuLmJkNjU5ZGQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggOTUzZTI1NS4uYjBjY2M0NSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqICAgICAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXAuYyBiL25ldC9pcmRhL2lybGFwLmMKaW5kZXggYTE2NTI4Ni4uY2FkZTM1NSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXAuYworKysgYi9uZXQvaXJkYS9pcmxhcC5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYyBiL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKaW5kZXggYTUwNWI1NC4uOTlmYWZmNiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybG1wLmMgYi9uZXQvaXJkYS9pcmxtcC5jCmluZGV4IDU3ZWExNjAuLjEyOWFkNjQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybG1wLmMKKysrIGIvbmV0L2lyZGEvaXJsbXAuYwpAQCAtMjQsNyArMjQsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybG1wX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCmluZGV4IDI2NjQ5ZjYuLjRjOTBkZDEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYwpAQCAtMjQsNyArMjQsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYyBiL25ldC9pcmRhL2lybG1wX2ZyYW1lLmMKaW5kZXggOTFjZDI2OC4uMzk3NjFhMSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYworKysgYi9uZXQvaXJkYS9pcmxtcF9mcmFtZS5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybW9kLmMgYi9uZXQvaXJkYS9pcm1vZC5jCmluZGV4IDYzNDkwMWQuLjI4NjliMTYgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybW9kLmMKKysrIGIvbmV0L2lyZGEvaXJtb2QuYwpAQCAtMzEsNyArMzEsNiBAQAogICogSmVhbiBJSQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaAppbmRleCBlNGZlMWU4Li44MDg4NzUyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0LmgKQEAgLTI0NCwxMiArMjQ0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CS8qIGlzc3BhY2UoKSAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJzeXNjdGwuYyBiL25ldC9pcmRhL2lyc3lzY3RsLmMKaW5kZXggMWIxYzQxOS4uODY4MDVjMyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJzeXNjdGwuYworKysgYi9uZXQvaXJkYS9pcnN5c2N0bC5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiAgICAgCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnR0cC5jIGIvbmV0L2lyZGEvaXJ0dHAuYwppbmRleCA4YWZmMjU0Li40OWM1MWM1IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnR0cC5jCisrKyBiL25ldC9pcmRhL2lydHRwLmMKQEAgLTI0LDcgKzI0LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL3Fvcy5jIGIvbmV0L2lyZGEvcW9zLmMKaW5kZXggZGRmYjVjNS4uOTVhNjljMCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvcW9zLmMKKysrIGIvbmV0L2lyZGEvcW9zLmMKQEAgLTMwLDcgKzMwLDYgQEAKICAqICAgICAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KZGlmZiAtLWdpdCBhL25ldC9pcmRhL3RpbWVyLmMgYi9uZXQvaXJkYS90aW1lci5jCmluZGV4IDBlMTdmOTcuLjM4NzFhMmIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL3RpbWVyLmMKKysrIGIvbmV0L2lyZGEvdGltZXIuYwpAQCAtMjUsNyArMjUsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS90aW1lci5oPgpkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggZDVlMjEyMS4uM2E5NWIyZSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKgkJRGVyZWsgQXRraW5zIDxkZXJla0BpaHRmcC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDc1YzliMTQuLmQ2Y2ZlODQgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMjAsNyArMjAsNiBAQAogICoKICAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pZi5jIGIvbmV0L2xsYy9sbGNfaWYuYwppbmRleCA1YWU0N2JlLi5hODk5MTcxIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pZi5jCisrKyBiL25ldC9sbGMvbGxjX2lmLmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX3Byb2MuYyBiL25ldC9sbGMvbGxjX3Byb2MuYwppbmRleCBiZDUzMWNiLi4xOTMwOGZlIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19wcm9jLmMKKysrIGIvbmV0L2xsYy9sbGNfcHJvYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19zdGF0aW9uLmMgYi9uZXQvbGxjL2xsY19zdGF0aW9uLmMKaW5kZXggZjM3ZGJmOC4uODI3NWJkMyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfc3RhdGlvbi5jCisrKyBiL25ldC9sbGMvbGxjX3N0YXRpb24uYwpAQCAtMTEsNyArMTEsNiBAQAogICoKICAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxuZXQvbGxjLmg+CmRpZmYgLS1naXQgYS9uZXQvbGxjL3N5c2N0bF9uZXRfbGxjLmMgYi9uZXQvbGxjL3N5c2N0bF9uZXRfbGxjLmMKaW5kZXggZDFlYWRkYi4uNDVkN2RkOSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9zeXNjdGxfbmV0X2xsYy5jCisrKyBiL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYwpAQCAtNCw3ICs0LDYgQEAKICAqIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBiMTYyMmI3Li40MmExNzhhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC00MTEsNyArNDExLDEwIEBACiAJdHJpc3RhdGUgJyJzdGF0aXN0aWMiIG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUwogCWhlbHAKLQkgIHN0YXRpc3RpYyBtb2R1bGUKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgc3RhdGlzdGljJyBtYXRjaCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYXRjaAorCSAgb24gcGFja2V0cyBwZXJpb2RpY2FsbHkgb3IgcmFuZG9tbHkgd2l0aCBhIGdpdmVuIHBlcmNlbnRhZ2UuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX1NUUklORwogCXRyaXN0YXRlICAnInN0cmluZyIgbWF0Y2ggc3VwcG9ydCcKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggODQ1NWEzMi4uNWQyOWQ1ZTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiAxNS1NYXItMjAwMDogICBBZGRlZCBORl9SRVBFQVQgLS1SUi4KICAqIDA4LU1heS0yMDAzOgkgIEludGVybmFsIGxvZ2dpbmcgaW50ZXJmYWNlIGFkZGVkIGJ5IEpvenNlZiBLYWRsZWNzaWsuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBjZDI5OWY0Li44ZjIyNjE5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0yOSw3ICsyOSw2IEBACiAgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKaW5kZXggMTFkM2JlMi4uOTYwOTcyZDIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYwppbmRleCAzZmM1OGU0Li4yMWUwYmM5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMuYwpAQCAtMTUsNyArMTUsNiBAQAogICoJWWFzdXl1a2kgS296YWthaSBAVVNBR0kJPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGI4YzdjNTYuLmFmNDg0NTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCAwYzZkYTQ5Li45YmQ4YTc4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8bGludXgvc2N0cC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaD4KQEAgLTI1OSw3ICsyNjEsNyBAQAogCX0KIAogCURFQlVHUCgiQmFzaWMgY2hlY2tzIHBhc3NlZFxuIik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNvdW50ID09IDA7CiB9CiAKIHN0YXRpYyBpbnQgbmV3X3N0YXRlKGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDEyZmI3YzAuLmFmOGFkY2JhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtMjQsNyArMjQsNiBAQAogICogdmVyc2lvbiAyLjIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggZTM0YzU3NC4uNWZjYWIyZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMTcsNyArMTcsNiBAQAogICogRGVyaXZlZCBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oIGIvbmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaAppbmRleCA2YmRlZTI5Li44NmUzOTJiZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9pbnRlcm5hbHMuaAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2ludGVybmFscy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTkZfSU5URVJOQUxTX0gKICNkZWZpbmUgX05GX0lOVEVSTkFMU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCAzZTc2YmQwLi44OTAxYjNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCmluZGV4IGVlOGY3MDguLmJiNmZjZWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9zb2Nrb3B0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX3NvY2tvcHQuYwppbmRleCAwYTYzZDdkLi5jMmU0NGU5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3NvY2tvcHQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3NvY2tvcHQuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCBiODhlODJhLi41MmZkZmEyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CkBAIC0yMjksNyArMjI4LDcgQEAKIAkJIE5GTkxfU1VCU1lTX0lEKG5saC0+bmxtc2dfdHlwZSksCiAJCSBORk5MX01TR19UWVBFKG5saC0+bmxtc2dfdHlwZSkpOwogCi0JaWYgKCFjYXBfcmFpc2VkKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBDQVBfTkVUX0FETUlOKSkgeworCWlmIChzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfTkVUX0FETUlOKSkgewogCQlERUJVR1AoIm1pc3NpbmcgQ0FQX05FVF9BRE1JTlxuIik7CiAJCSplcnJwID0gLUVQRVJNOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCA4NmE0YWMzLi40OWVmNDFlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKQEAgLTY4MCwxMSArNjgwLDE5IEBACiAJaWYgKGVudGluZi0+aW5kZXYpCiAJCWlmIChlbnRpbmYtPmluZGV2LT5pZmluZGV4ID09IGlmaW5kZXgpCiAJCQlyZXR1cm4gMTsKLQkJCQogCWlmIChlbnRpbmYtPm91dGRldikKIAkJaWYgKGVudGluZi0+b3V0ZGV2LT5pZmluZGV4ID09IGlmaW5kZXgpCiAJCQlyZXR1cm4gMTsKLQorI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCisJaWYgKGVudHJ5LT5za2ItPm5mX2JyaWRnZSkgeworCQlpZiAoZW50cnktPnNrYi0+bmZfYnJpZGdlLT5waHlzaW5kZXYgJiYKKwkJICAgIGVudHJ5LT5za2ItPm5mX2JyaWRnZS0+cGh5c2luZGV2LT5pZmluZGV4ID09IGlmaW5kZXgpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGVudHJ5LT5za2ItPm5mX2JyaWRnZS0+cGh5c291dGRldiAmJgorCQkgICAgZW50cnktPnNrYi0+bmZfYnJpZGdlLT5waHlzb3V0ZGV2LT5pZmluZGV4ID09IGlmaW5kZXgpCisJCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IDk5MjkzYzYuLjE3NGU4ZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9wb2xpY3kuYyBiL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMKaW5kZXggYTNhYTYyZi4uYmExY2EwMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9wb2xpY3kuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3BvbGljeS5jCkBAIC04LDcgKzgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jCmluZGV4IDkzMTZjNzUuLjg0MzM4M2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJJiYgU0NDSEVDSygoKG50b2hzKHNoLT5kZXN0KSA+PSBpbmZvLT5kcHRzWzBdKSAKIAkJCSYmIChudG9ocyhzaC0+ZGVzdCkgPD0gaW5mby0+ZHB0c1sxXSkpLCAKIAkJCVhUX1NDVFBfREVTVF9QT1JUUywgaW5mby0+ZmxhZ3MsIGluZm8tPmludmZsYWdzKQotCQkmJiBTQ0NIRUNLKG1hdGNoX3BhY2tldChza2IsIHByb3RvZmYsCisJCSYmIFNDQ0hFQ0sobWF0Y2hfcGFja2V0KHNrYiwgcHJvdG9mZiArIHNpemVvZiAoc2N0cF9zY3RwaGRyX3QpLAogCQkJCQlpbmZvLT5jaHVua21hcCwgaW5mby0+Y2h1bmtfbWF0Y2hfdHlwZSwKICAJCQkJCWluZm8tPmZsYWdfaW5mbywgaW5mby0+ZmxhZ19jb3VudCwgCiAJCQkJCWhvdGRyb3ApLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKaW5kZXggMWI2MWRhYy4uYTlhNjNhYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlyZXR1cm4gcmV0OwogCiBvdXRfdW5yZWdfdWRwOgotCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnRjcF9tYXRjaHN0cnVjdCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmdWRwX21hdGNoc3RydWN0KTsKIG91dF91bnJlZ190Y3A2OgogCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnRjcDZfbWF0Y2hzdHJ1Y3QpOwogb3V0X3VucmVnX3RjcDoKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCAzODYyZTczLi41NWMwYWRjIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAJCQkJICAgbWFuZGF0b3J5IGlmIENPTkZJR19ORVQ9eSB0aGVzZSBkYXlzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpAQCAtMTU3LDcgKzE1Niw3IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfdGFibGVfZ3JhYih2b2lkKQogewotCXdyaXRlX2xvY2tfYmgoJm5sX3RhYmxlX2xvY2spOworCXdyaXRlX2xvY2tfaXJxKCZubF90YWJsZV9sb2NrKTsKIAogCWlmIChhdG9taWNfcmVhZCgmbmxfdGFibGVfdXNlcnMpKSB7CiAJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwpAQCAtMTY3LDkgKzE2Niw5IEBACiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQlpZiAoYXRvbWljX3JlYWQoJm5sX3RhYmxlX3VzZXJzKSA9PSAwKQogCQkJCWJyZWFrOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZubF90YWJsZV9sb2NrKTsKKwkJCXdyaXRlX3VubG9ja19pcnEoJm5sX3RhYmxlX2xvY2spOwogCQkJc2NoZWR1bGUoKTsKLQkJCXdyaXRlX2xvY2tfYmgoJm5sX3RhYmxlX2xvY2spOworCQkJd3JpdGVfbG9ja19pcnEoJm5sX3RhYmxlX2xvY2spOwogCQl9CiAKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpAQCAtMTc5LDcgKzE3OCw3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgbmV0bGlua190YWJsZV91bmdyYWIodm9pZCkKIHsKLQl3cml0ZV91bmxvY2tfYmgoJm5sX3RhYmxlX2xvY2spOworCXdyaXRlX3VubG9ja19pcnEoJm5sX3RhYmxlX2xvY2spOwogCXdha2VfdXAoJm5sX3RhYmxlX3dhaXQpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hdHRyLmMgYi9uZXQvbmV0bGluay9hdHRyLmMKaW5kZXggZmZmZWY0YS4uZGRkYmQxNSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYXR0ci5jCisrKyBiL25ldC9uZXRsaW5rL2F0dHIuYwpAQCAtNSw3ICs1LDYgQEAKICAqIAkJCQlBbGV4ZXkgS3V6bmV0c292IDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMKaW5kZXggZjMyOWI3Mi4uYTI5OGY3NyAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMKQEAgLTUsNyArNSw2IEBACiAgKiAJCQkJVGhvbWFzIEdyYWYgPHRncmFmQHN1dWcuY2g+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zMjAsNyArMzE5LDcgQEAKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JaWYgKChvcHMtPmZsYWdzICYgR0VOTF9BRE1JTl9QRVJNKSAmJiBzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiKSkgeworCWlmICgob3BzLT5mbGFncyAmIEdFTkxfQURNSU5fUEVSTSkgJiYgc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYiwgQ0FQX05FVF9BRE1JTikpIHsKIAkJZXJyID0gLUVQRVJNOwogCQlnb3RvIGVycm91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCAzNjY5Y2I5Li4zODlhNDExIDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgQWxhbiBDb3ggR1c0UFRTIChhbGFuQGx4b3JndWsudWt1dS5vcmcudWspCiAgKiBDb3B5cmlnaHQgRGFycnlsIE1pbGVzIEc3TEVEIChkbG1AZzdsZWQuZGVtb24uY28udWspCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KQEAgLTgwMSw3ICs4MDAsNyBAQAogCiAJLyogTm93IGF0dGFjaCB1cCB0aGUgbmV3IHNvY2tldCAqLwogCWtmcmVlX3NrYihza2IpOwotCXNrLT5za19hY2tfYmFja2xvZy0tOworCXNrX2FjY2VwdHFfcmVtb3ZlZChzayk7CiAJbmV3c29jay0+c2sgPSBuZXdzazsKIAogb3V0OgpAQCAtOTg2LDcgKzk4NSw3IEBACiAJbnJfbWFrZS0+dnIgICAgICAgID0gMDsKIAlucl9tYWtlLT52bCAgICAgICAgPSAwOwogCW5yX21ha2UtPnN0YXRlICAgICA9IE5SX1NUQVRFXzM7Ci0Jc2stPnNrX2Fja19iYWNrbG9nKys7CisJc2tfYWNjZXB0cV9hZGRlZChzayk7CiAKIAlucl9pbnNlcnRfc29ja2V0KG1ha2UpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL25yX2Rldi5jIGIvbmV0L25ldHJvbS9ucl9kZXYuYwppbmRleCA2MjFlNTU4Li45YjhlYjU0IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL25yX2Rldi5jCisrKyBiL25ldC9uZXRyb20vbnJfZGV2LmMKQEAgLTYsNyArNiw2IEBACiAgKgogICogQ29weXJpZ2h0IEpvbmF0aGFuIE5heWxvciBHNEtMWCAoZzRrbHhAZzRrbHguZGVtb24uY28udWspCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCA5ZGI3ZGJkLi5mOWNlZjM2IDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICAqCiAgKi8KICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL25ldC9yb3NlL2FmX3Jvc2UuYyBiL25ldC9yb3NlL2FmX3Jvc2UuYwppbmRleCA1NTU2NGVmLi5kMGE2N2JiIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9hZl9yb3NlLmMKKysrIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIFRvbWkgTWFubmluZW4gT0gyQk5TIChvaDJibnNAc3JhbC5maSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC03NTMsNyArNzUyLDcgQEAKIAogCQlyb3NlX2luc2VydF9zb2NrZXQoc2spOwkJLyogRmluaXNoIHRoZSBiaW5kICovCiAJfQotCityb3NlX3RyeV9uZXh0X25laWdoOgogCXJvc2UtPmRlc3RfYWRkciAgID0gYWRkci0+c3Jvc2VfYWRkcjsKIAlyb3NlLT5kZXN0X2NhbGwgICA9IGFkZHItPnNyb3NlX2NhbGw7CiAJcm9zZS0+cmFuZCAgICAgICAgPSAoKGxvbmcpcm9zZSAmIDB4RkZGRikgKyByb3NlLT5sY2k7CkBAIC04MTEsNiArODEwLDExIEBACiAJfQogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHsKKwkvKiBUcnkgbmV4dCBuZWlnaGJvdXIgKi8KKwkJcm9zZS0+bmVpZ2hib3VyID0gcm9zZV9nZXRfbmVpZ2goJmFkZHItPnNyb3NlX2FkZHIsICZjYXVzZSwgJmRpYWdub3N0aWMpOworCQlpZiAocm9zZS0+bmVpZ2hib3VyKQorCQkJZ290byByb3NlX3RyeV9uZXh0X25laWdoOworCS8qIE5vIG1vcmUgbmVpZ2hib3VyICovCiAJCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7CiAJCXJldHVybiBzb2NrX2Vycm9yKHNrKTsJLyogQWx3YXlzIHNldCBhdCB0aGlzIHBvaW50ICovCiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9kZXYuYyBiL25ldC9yb3NlL3Jvc2VfZGV2LmMKaW5kZXggMmExYmY4ZS4uN2MyNzllMiAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9kZXYuYworKysgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCkBAIC02LDcgKzYsNiBAQAogICoKICAqIENvcHlyaWdodCAoQykgSm9uYXRoYW4gTmF5bG9yIEc0S0xYIChnNGtseEBnNGtseC5kZW1vbi5jby51aykKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTYwLDYgKzU5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilza2ItPmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYm47CisJdW5zaWduZWQgaW50IGxlbjsKIAogI2lmZGVmIENPTkZJR19JTkVUCiAJaWYgKGFycF9maW5kKGJwICsgNywgc2tiKSkgewpAQCAtNzYsNiArNzYsOCBAQAogCiAJa2ZyZWVfc2tiKHNrYik7CiAKKwlsZW4gPSBza2JuLT5sZW47CisKIAlpZiAoIXJvc2Vfcm91dGVfZnJhbWUoc2tibiwgTlVMTCkpIHsKIAkJa2ZyZWVfc2tiKHNrYm4pOwogCQlzdGF0cy0+dHhfZXJyb3JzKys7CkBAIC04Myw3ICs4NSw3IEBACiAJfQogCiAJc3RhdHMtPnR4X3BhY2tldHMrKzsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tibi0+bGVuOworCXN0YXRzLT50eF9ieXRlcyArPSBsZW47CiAjZW5kaWYKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHJwY19zeW1zLmMgYi9uZXQvcnhycGMvcnhycGNfc3ltcy5jCmluZGV4IDU2YWRmMTYuLjk4OTZmZDggMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yeHJwY19zeW1zLmMKKysrIGIvbmV0L3J4cnBjL3J4cnBjX3N5bXMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8cnhycGMvdHJhbnNwb3J0Lmg+CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc3lzY3RsLmMgYi9uZXQvcnhycGMvc3lzY3RsLmMKaW5kZXggZmJmOTg3Mi4uNjM3NGRmNyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3N5c2N0bC5jCisrKyBiL25ldC9yeHJwYy9zeXNjdGwuYwpAQCAtOSw3ICs5LDYgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL0tjb25maWcgYi9uZXQvc2NoZWQvS2NvbmZpZwppbmRleCAxM2VlZWU1Li44Mjk4ZWE5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysgYi9uZXQvc2NoZWQvS2NvbmZpZwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJdHJpc3RhdGUgIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpIgogCXNlbGVjdCBORVRfQ0xTCiAJLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldGVzIHVzaW5nIGEgdW5pdmVyc2FsCisJICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbAogCSAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLgogCiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCkBAIC00ODUsNyArNDg1LDcgQEAKICAgICAgICAgdHJpc3RhdGUgIklQdGFibGVzIHRhcmdldHMiCiAgICAgICAgIGRlcGVuZHMgb24gTkVUX0NMU19BQ1QgJiYgTkVURklMVEVSICYmIElQX05GX0lQVEFCTEVTCiAgICAgICAgIC0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gYmUgYWJsZSB0byBpbnZva2UgaXB0YWJsZXMgdGFyZ2V0cyBhZnRlciBzdWNjZXNmdWwKKwkgIFNheSBZIGhlcmUgdG8gYmUgYWJsZSB0byBpbnZva2UgaXB0YWJsZXMgdGFyZ2V0cyBhZnRlciBzdWNjZXNzZnVsCiAJICBjbGFzc2lmaWNhdGlvbi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQpAQCAtNTM3LDggKzUzNyw4IEBACiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBhbGxvdyB1c2luZyByYXRlIGVzdGltYXRvcnMgdG8gZXN0aW1hdGUgdGhlIGN1cnJlbnQKIAkgIHJhdGUtb2YtZmxvdyBmb3IgbmV0d29yayBkZXZpY2VzLCBxdWV1ZXMsIGV0Yy4gVGhpcyBtb2R1bGUgaXMKLQkgIGF1dG9tYXRpY2FseSBzZWxlY3RlZCBpZiBuZWVkZWQgYnV0IGNhbiBiZSBzZWxlY3RlZCBtYW51YWxseSBmb3IKLQkgIHN0YXRzdGljYWwgcHVycG9zZXMuCisJICBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIG5lZWRlZCBidXQgY2FuIGJlIHNlbGVjdGVkIG1hbnVhbGx5IGZvcgorCSAgc3RhdGlzdGljYWwgcHVycG9zZXMuCiAKIGVuZGlmICMgTkVUX1NDSEVECiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDJmZmExMWMuLjViOTM5N2IgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfZ2FjdC5jIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmMKaW5kZXggYTFlNjhmNy4uZTc1YTE0NyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9nYWN0LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCAzNzY0MGM2Li5kNzk5ZTAxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYyBiL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKaW5kZXggNGZjY2NiZC4uZmM1NjIwNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYworKysgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwppbmRleCAxNzQyYTY4Li41OGIzYTg2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCmluZGV4IDI0YzM0OGYuLjQ3ZTAwYmQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jIGIvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYwppbmRleCBlNWYyZTFmLi4xNzEwNWM4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCisrKyBiL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IGI0ZDg5ZmIuLjdlMTRmMTQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKaW5kZXggZGZiMzAwYi4uNjE1MDdmMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCisrKyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEF1dGhvcnM6CVRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jCmluZGV4IDc1NDcwNDguLmQ0MWRlOTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZncuYworKysgYi9uZXQvc2NoZWQvY2xzX2Z3LmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IDUyMGZmNzEuLmMyZTcxOTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYworKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JzdnAuaCBiL25ldC9zY2hlZC9jbHNfcnN2cC5oCmluZGV4IDU3MmYwNmIuLmJhODc0MTkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcnN2cC5oCisrKyBiL25ldC9zY2hlZC9jbHNfcnN2cC5oCkBAIC02NSw3ICs2NSw2IEBACiAgICBXZWxsLCBhcyByZXN1bHQsIGRlc3BpdGUgaXRzIHNpbXBsaWNpdHksIHdlIGdldCBhIHByZXR0eQogICAgcG93ZXJmdWwgY2xhc3NpZmljYXRpb24gZW5naW5lLiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgcnN2cF9oZWFkCiB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3RjaW5kZXguYyBiL25ldC9zY2hlZC9jbHNfdGNpbmRleC5jCmluZGV4IDlmOTIxMTcuLjc4NzBlN2IgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdGNpbmRleC5jCisrKyBiL25ldC9zY2hlZC9jbHNfdGNpbmRleC5jCkBAIC00LDcgKzQsNiBAQAogICogV3JpdHRlbiAxOTk4LDE5OTkgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIElDQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKaW5kZXggNzhlMDUyNS4uZDcxMmVkYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuYworKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9jbXAuYyBiL25ldC9zY2hlZC9lbV9jbXAuYwppbmRleCBiZjFmMDBmLi44ZWQ5M2MzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1fY21wLmMKKysrIGIvbmV0L3NjaGVkL2VtX2NtcC5jCkBAIC05LDcgKzksNiBAQAogICogQXV0aG9yczoJVGhvbWFzIEdyYWYgPHRncmFmQHN1dWcuY2g+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1fbWV0YS5jIGIvbmV0L3NjaGVkL2VtX21ldGEuYwppbmRleCA3MDA4NDRkLi42OTgzNzI5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1fbWV0YS5jCisrKyBiL25ldC9zY2hlZC9lbV9tZXRhLmMKQEAgLTU4LDcgKzU4LDYgQEAKICAqIAkgICAgICBvbmx5IGF2YWlsYWJsZSBpZiB0aGF0IHN1YnN5dGVtIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9uYnl0ZS5jIGIvbmV0L3NjaGVkL2VtX25ieXRlLmMKaW5kZXggNzFlYTkyNi4uY2M4MGJhYiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2VtX25ieXRlLmMKKysrIGIvbmV0L3NjaGVkL2VtX25ieXRlLmMKQEAgLTksNyArOSw2IEBACiAgKiBBdXRob3JzOglUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV90ZXh0LmMgYi9uZXQvc2NoZWQvZW1fdGV4dC5jCmluZGV4IDc3YmVhYmMuLmFhMTdkOGYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV90ZXh0LmMKKysrIGIvbmV0L3NjaGVkL2VtX3RleHQuYwpAQCAtOSw3ICs5LDYgQEAKICAqIEF1dGhvcnM6CVRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2VtX3UzMi5jIGIvbmV0L3NjaGVkL2VtX3UzMi5jCmluZGV4IDM0ZTdlNTFlNi4uZTNkZGZjZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2VtX3UzMi5jCisrKyBiL25ldC9zY2hlZC9lbV91MzIuYwpAQCAtMTIsNyArMTIsNiBAQAogICogQmFzZWQgb24gbmV0L3NjaGVkL2Nsc191MzIuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2VtYXRjaC5jIGIvbmV0L3NjaGVkL2VtYXRjaC5jCmluZGV4IDVjYjk1NmIuLjI0MDVhODYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbWF0Y2guYworKysgYi9uZXQvc2NoZWQvZW1hdGNoLmMKQEAgLTgxLDcgKzgxLDYgQEAKICAqICAgICAgb3BlbiB1cCBhIGJlZXIgdG8gd2F0Y2ggdGhlIGNvbXBpbGF0aW9uIGdvaW5nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggMzE1NzBiOS4uYzc4NDRiYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKiBKYW1hbCBIYWRpIFNhbGltIDxoYWRpQG5vcnRlbG5ldHdvcmtzLmNvbT46IDk5MDYwMTogaW5ncmVzcyBzdXBwb3J0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2F0bS5jIGIvbmV0L3NjaGVkL3NjaF9hdG0uYwppbmRleCBhYzdjYjYwLi5kYmY0NGRhMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hdG0uYworKysgYi9uZXQvc2NoZWQvc2NoX2F0bS5jCkBAIC0zLDcgKzMsNiBAQAogLyogV3JpdHRlbiAxOTk4LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIElDQSAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2JsYWNraG9sZS5jIGIvbmV0L3NjaGVkL3NjaF9ibGFja2hvbGUuYwppbmRleCA4MWYwYjgzLi5jYjBjNDU2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2JsYWNraG9sZS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYmxhY2tob2xlLmMKQEAgLTExLDcgKzExLDYgQEAKICAqIE5vdGU6IFF1YW50dW0gdHVubmVsaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2NicS5jIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwppbmRleCA2Y2Q4MTcwLi44MGI3ZjZhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2NicS5jCisrKyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKaW5kZXggZjYzMjBjYS4uMTFjOGEyMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYworKysgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCkBAIC0zLDcgKzMsNiBAQAogLyogV3JpdHRlbiAxOTk4LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIElDQSAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZmlmby5jIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKaW5kZXggMDMzMDgzYi4uYzI2ODlmNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9maWZvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKQEAgLTksNyArOSw2IEBACiAgKiBBdXRob3JzOglBbGV4ZXkgS3V6bmV0c292LCA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IDc0ZDRhMWQuLmQ3MzVmNTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9ncmVkLmMKaW5kZXggMjlhMmRkOS4uMGNhZmRkNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9ncmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9ncmVkLmMKQEAgLTE4LDcgKzE4LDYgQEAKICAqICBGb3IgYWxsIHRoZSBnbG9yaW91cyBjb21tZW50cyBsb29rIGF0IGluY2x1ZGUvbmV0L3JlZC5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IGYxYzdiZDIuLjZiMWI0YTkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC01MCw3ICs1MCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDNlYzk1ZGYuLjM0YWZlNDFmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqCiAgKiAkSWQ6IHNjaF9odGIuYyx2IDEuMjUgMjAwMy8xMi8wNyAxMTowODoyNSBkZXZpayBFeHAgZGV2aWsgJAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2luZ3Jlc3MuYyBiL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCmluZGV4IDhlZGMzMmEuLmMzMjQyZjcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCkBAIC03LDcgKzcsNiBAQAogICogQXV0aG9yczogICAgIEphbWFsIEhhZGkgU2FsaW0gMTk5OQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCmluZGV4IDVhNGE0ZDAuLmM1YmQ4MDYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYworKysgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqCQlDYXRhbGluKHV4IGFrYSBEaW5vKSBCT0lFIDxjYXRhYiBhdCB1bWJyZWxsYSBkb3Qgcm8+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCmluZGV4IDMzOTVjYTcuLmE1ZmEwM2MgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jCisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAgICAgICAgICAgICAgSW5pdCAtLSAgRUlOVkFMIHdoZW4gb3B0IHVuZGVmaW5lZAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcmVkLmMgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCmluZGV4IDJiZTU2M2MuLmQ2NWNhZGQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwpAQCAtMTQsNyArMTQsNiBAQAogICogSiBIYWRpIFNhbGltIDk4MDgxNjogIEVDTiBzdXBwb3J0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCBlMDU3NzY4Li5kMGQ2ZTU5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTksNyArOSw2IEBACiAgKiBBdXRob3JzOglBbGV4ZXkgS3V6bmV0c292LCA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YmYuYyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKaW5kZXggZDhlMDNjNy4uZDlhNWQyOSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YmYuYworKysgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggYjgxMTY5MWMuLjBhMmM3MWQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC01Nyw3ICs1Nyw2IEBACiAgKiBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbmV4dCBTQ1RQIHJlbGVhc2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDU2NWY1ZTguLmI0ODQ4Y2UgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTU4LDcgKzU4LDYgQEAKICAqCUJhc2VkIHVwb24gU3dhbnNlYSBVbml2ZXJzaXR5IENvbXB1dGVyIFNvY2lldHkgTkVUMy4wMzkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKaW5kZXggZjhiYWM2Yy4uZDg4NDY4ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCkBAIC0yMjQsNyArMjI0LDggQEAKIHZvaWQKIGdzc19tZWNoX3B1dChzdHJ1Y3QgZ3NzX2FwaV9tZWNoICogZ20pCiB7Ci0JbW9kdWxlX3B1dChnbS0+Z21fb3duZXIpOworCWlmIChnbSkKKwkJbW9kdWxlX3B1dChnbS0+Z21fb3duZXIpOwogfQogCiBFWFBPUlRfU1lNQk9MKGdzc19tZWNoX3B1dCk7CkBAIC0zMDcsOCArMzA4LDcgQEAKIAkJKCpjb250ZXh0X2hhbmRsZSktPm1lY2hfdHlwZS0+Z21fb3BzCiAJCQktPmdzc19kZWxldGVfc2VjX2NvbnRleHQoKCpjb250ZXh0X2hhbmRsZSkKIAkJCQkJCQktPmludGVybmFsX2N0eF9pZCk7Ci0JaWYgKCgqY29udGV4dF9oYW5kbGUpLT5tZWNoX3R5cGUpCi0JCWdzc19tZWNoX3B1dCgoKmNvbnRleHRfaGFuZGxlKS0+bWVjaF90eXBlKTsKKwlnc3NfbWVjaF9wdXQoKCpjb250ZXh0X2hhbmRsZSktPm1lY2hfdHlwZSk7CiAJa2ZyZWUoKmNvbnRleHRfaGFuZGxlKTsKIAkqY29udGV4dF9oYW5kbGU9TlVMTDsKIAlyZXR1cm4gR1NTX1NfQ09NUExFVEU7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggZDUxZTMxNi4uOTQyMTdlYyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtNDI1LDYgKzQyNSw3IEBACiAJc3RydWN0IHJzYyByc2NpLCAqcnNjcCA9IE5VTEw7CiAJdGltZV90IGV4cGlyeTsKIAlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZ3NzX2FwaV9tZWNoICpnbSA9IE5VTEw7CiAKIAltZW1zZXQoJnJzY2ksIDAsIHNpemVvZihyc2NpKSk7CiAJLyogY29udGV4dCBoYW5kbGUgKi8KQEAgLTQ1Myw3ICs0NTQsNiBAQAogCQlzZXRfYml0KENBQ0hFX05FR0FUSVZFLCAmcnNjaS5oLmZsYWdzKTsKIAllbHNlIHsKIAkJaW50IE4sIGk7Ci0JCXN0cnVjdCBnc3NfYXBpX21lY2ggKmdtOwogCiAJCS8qIGdpZCAqLwogCQlpZiAoZ2V0X2ludCgmbWVzZywgJnJzY2kuY3JlZC5jcl9naWQpKQpAQCAtNDg4LDIxICs0ODgsMTcgQEAKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJLyogbWVjaC1zcGVjaWZpYyBkYXRhOiAqLwogCQlsZW4gPSBxd29yZF9nZXQoJm1lc2csIGJ1ZiwgbWxlbik7Ci0JCWlmIChsZW4gPCAwKSB7Ci0JCQlnc3NfbWVjaF9wdXQoZ20pOworCQlpZiAobGVuIDwgMCkKIAkJCWdvdG8gb3V0OwotCQl9CiAJCXN0YXR1cyA9IGdzc19pbXBvcnRfc2VjX2NvbnRleHQoYnVmLCBsZW4sIGdtLCAmcnNjaS5tZWNoY3R4KTsKLQkJaWYgKHN0YXR1cykgewotCQkJZ3NzX21lY2hfcHV0KGdtKTsKKwkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwotCQl9Ci0JCWdzc19tZWNoX3B1dChnbSk7CiAJfQogCXJzY2kuaC5leHBpcnlfdGltZSA9IGV4cGlyeTsKIAlyc2NwID0gcnNjX3VwZGF0ZSgmcnNjaSwgcnNjcCk7CiAJc3RhdHVzID0gMDsKIG91dDoKKwlnc3NfbWVjaF9wdXQoZ20pOwogCXJzY19mcmVlKCZyc2NpKTsKIAlpZiAocnNjcCkKIAkJY2FjaGVfcHV0KCZyc2NwLT5oLCAmcnNjX2NhY2hlKTsKQEAgLTgzNiw2ICs4MzIsNzQgQEAKIAlyZXR1cm4gc3RhdDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3RvdGFsX2J1Zl9sZW4oc3RydWN0IHhkcl9idWYgKmJ1ZikKK3sKKwlyZXR1cm4gYnVmLT5oZWFkWzBdLmlvdl9sZW4gKyBidWYtPnBhZ2VfbGVuICsgYnVmLT50YWlsWzBdLmlvdl9sZW47Cit9CisKK3N0YXRpYyB2b2lkCitmaXhfcHJpdl9oZWFkKHN0cnVjdCB4ZHJfYnVmICpidWYsIGludCBwYWQpCit7CisJaWYgKGJ1Zi0+cGFnZV9sZW4gPT0gMCkgeworCQkvKiBXZSBuZWVkIHRvIGFkanVzdCBoZWFkIGFuZCBidWYtPmxlbiBpbiB0YW5kZW0gaW4gdGhpcworCQkgKiBjYXNlIHRvIG1ha2Ugc3ZjX2RlZmVyKCkgd29yay0taXQgZmluZHMgdGhlIG9yaWdpbmFsCisJCSAqIGJ1ZmZlciBzdGFydCB1c2luZyBidWYtPmxlbiAtIGJ1Zi0+aGVhZFswXS5pb3ZfbGVuLiAqLworCQlidWYtPmhlYWRbMF0uaW92X2xlbiAtPSBwYWQ7CisJfQorfQorCitzdGF0aWMgaW50Cit1bndyYXBfcHJpdl9kYXRhKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCB4ZHJfYnVmICpidWYsIHUzMiBzZXEsIHN0cnVjdCBnc3NfY3R4ICpjdHgpCit7CisJdTMyIHByaXZfbGVuLCBtYWpfc3RhdDsKKwlpbnQgcGFkLCBzYXZlZF9sZW4sIHJlbWFpbmluZ19sZW4sIG9mZnNldDsKKworCXJxc3RwLT5ycV9zZW5kZmlsZV9vayA9IDA7CisKKwlwcml2X2xlbiA9IG50b2hsKHN2Y19nZXR1MzIoJmJ1Zi0+aGVhZFswXSkpOworCWlmIChycXN0cC0+cnFfZGVmZXJyZWQpIHsKKwkJLyogQWxyZWFkeSBkZWNyeXB0ZWQgbGFzdCB0aW1lIHRocm91Z2ghIFRoZSBzZXF1ZW5jZSBudW1iZXIKKwkJICogY2hlY2sgYXQgb3V0X3NlcSBpcyB1bm5lY2Vzc2FyeSBidXQgaGFybWxlc3M6ICovCisJCWdvdG8gb3V0X3NlcTsKKwl9CisJLyogYnVmLT5sZW4gaXMgdGhlIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBvcmlnaW5hbCBzdGFydCBvZiB0aGUKKwkgKiByZXF1ZXN0IHRvIHRoZSBlbmQsIHdoZXJlIGhlYWRbMF0uaW92X2xlbiBpcyBqdXN0IHRoZSBieXRlcworCSAqIG5vdCB5ZXQgcmVhZCBmcm9tIHRoZSBoZWFkLCBzbyB0aGVzZSB0d28gdmFsdWVzIGFyZSBkaWZmZXJlbnQ6ICovCisJcmVtYWluaW5nX2xlbiA9IHRvdGFsX2J1Zl9sZW4oYnVmKTsKKwlpZiAocHJpdl9sZW4gPiByZW1haW5pbmdfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwYWQgPSByZW1haW5pbmdfbGVuIC0gcHJpdl9sZW47CisJYnVmLT5sZW4gLT0gcGFkOworCWZpeF9wcml2X2hlYWQoYnVmLCBwYWQpOworCisJLyogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIHRvIGdpdmUgZ3NzX3Vud3JhcCBhIGxlbmd0aCBwYXJhbWV0ZXI6ICovCisJc2F2ZWRfbGVuID0gYnVmLT5sZW47CisJYnVmLT5sZW4gPSBwcml2X2xlbjsKKwltYWpfc3RhdCA9IGdzc191bndyYXAoY3R4LCAwLCBidWYpOworCXBhZCA9IHByaXZfbGVuIC0gYnVmLT5sZW47CisJYnVmLT5sZW4gPSBzYXZlZF9sZW47CisJYnVmLT5sZW4gLT0gcGFkOworCS8qIFRoZSB1cHBlciBsYXllcnMgYXNzdW1lIHRoZSBidWZmZXIgaXMgYWxpZ25lZCBvbiA0LWJ5dGUgYm91bmRhcmllcy4KKwkgKiBJbiB0aGUga3JiNXAgY2FzZSwgYXQgbGVhc3QsIHRoZSBkYXRhIGVuZHMgdXAgb2Zmc2V0LCBzbyB3ZSBuZWVkIHRvCisJICogbW92ZSBpdCBhcm91bmQuICovCisJLyogWFhYOiBUaGlzIGlzIHZlcnkgaW5lZmZpY2llbnQuICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZWl0aGVyIGRvCisJICogdGhpcyB3aGlsZSB3ZSBlbmNyeXB0LCBvciBtYXliZSBpbiB0aGUgcmVjZWl2ZSBjb2RlLCBpZiB3ZSBjYW4gcGVhaworCSAqIGFoZWFkIGFuZCB3b3JrIG91dCB0aGUgc2VydmljZSBhbmQgbWVjaGFuaXNtIHRoZXJlLiAqLworCW9mZnNldCA9IGJ1Zi0+aGVhZFswXS5pb3ZfbGVuICUgNDsKKwlpZiAob2Zmc2V0KSB7CisJCWJ1Zi0+YnVmbGVuID0gUlBDU1ZDX01BWFBBWUxPQUQ7CisJCXhkcl9zaGlmdF9idWYoYnVmLCBvZmZzZXQpOworCQlmaXhfcHJpdl9oZWFkKGJ1ZiwgcGFkKTsKKwl9CisJaWYgKG1hal9zdGF0ICE9IEdTU19TX0NPTVBMRVRFKQorCQlyZXR1cm4gLUVJTlZBTDsKK291dF9zZXE6CisJaWYgKG50b2hsKHN2Y19nZXR1MzIoJmJ1Zi0+aGVhZFswXSkpICE9IHNlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBnc3Nfc3ZjX2RhdGEgewogCS8qIGRlY29kZWQgZ3NzIGNsaWVudCBjcmVkOiAqLwogCXN0cnVjdCBycGNfZ3NzX3dpcmVfY3JlZAljbGNyZWQ7CkBAIC0xMDUxLDcgKzExMTUsMTQgQEAKIAkJCXN2Y19wdXR1MzIocmVzdiwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBSUENfR1NTX1NWQ19QUklWQUNZOgotCQkJLyogY3VycmVudGx5IHVuc3VwcG9ydGVkICovCisJCQlpZiAodW53cmFwX3ByaXZfZGF0YShycXN0cCwgJnJxc3RwLT5ycV9hcmcsCisJCQkJCWdjLT5nY19zZXEsIHJzY2ktPm1lY2hjdHgpKQorCQkJCWdvdG8gYXV0aF9lcnI7CisJCQkvKiBwbGFjZWhvbGRlcnMgZm9yIGxlbmd0aCBhbmQgc2VxLiBudW1iZXI6ICovCisJCQlzdmNkYXRhLT5ib2R5X3N0YXJ0ID0gcmVzdi0+aW92X2Jhc2UgKyByZXN2LT5pb3ZfbGVuOworCQkJc3ZjX3B1dHUzMihyZXN2LCAwKTsKKwkJCXN2Y19wdXR1MzIocmVzdiwgMCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gYXV0aF9lcnI7CiAJCX0KQEAgLTEwNzYsOCArMTE0Nyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotc3ZjYXV0aF9nc3NfcmVsZWFzZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQorc3RhdGljIGlubGluZSBpbnQKK3N2Y2F1dGhfZ3NzX3dyYXBfcmVzcF9pbnRlZyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewogCXN0cnVjdCBnc3Nfc3ZjX2RhdGEgKmdzZCA9IChzdHJ1Y3QgZ3NzX3N2Y19kYXRhICopcnFzdHAtPnJxX2F1dGhfZGF0YTsKIAlzdHJ1Y3QgcnBjX2dzc193aXJlX2NyZWQgKmdjID0gJmdzZC0+Y2xjcmVkOwpAQCAtMTA4OSw2OSArMTE2MCwxNDcgQEAKIAlpbnQgaW50ZWdfb2Zmc2V0LCBpbnRlZ19sZW47CiAJaW50IHN0YXQgPSAtRUlOVkFMOwogCisJcCA9IGdzZC0+Ym9keV9zdGFydDsKKwlnc2QtPmJvZHlfc3RhcnQgPSBOVUxMOworCS8qIG1vdmUgYWNjZXB0X3N0YXQgdG8gcmlnaHQgcGxhY2U6ICovCisJbWVtY3B5KHAsIHAgKyAyLCA0KTsKKwkvKiBEb24ndCB3cmFwIGluIGZhaWx1cmUgY2FzZTogKi8KKwkvKiBDb3VudGluZyBvbiBub3QgZ2V0dGluZyBoZXJlIGlmIGNhbGwgd2FzIG5vdCBldmVuIGFjY2VwdGVkISAqLworCWlmICgqcCAhPSBycGNfc3VjY2VzcykgeworCQlyZXNidWYtPmhlYWRbMF0uaW92X2xlbiAtPSAyICogNDsKKwkJZ290byBvdXQ7CisJfQorCXArKzsKKwlpbnRlZ19vZmZzZXQgPSAodTggKikocCArIDEpIC0gKHU4ICopcmVzYnVmLT5oZWFkWzBdLmlvdl9iYXNlOworCWludGVnX2xlbiA9IHJlc2J1Zi0+bGVuIC0gaW50ZWdfb2Zmc2V0OworCUJVR19PTihpbnRlZ19sZW4gJSA0KTsKKwkqcCsrID0gaHRvbmwoaW50ZWdfbGVuKTsKKwkqcCsrID0gaHRvbmwoZ2MtPmdjX3NlcSk7CisJaWYgKHhkcl9idWZfc3Vic2VnbWVudChyZXNidWYsICZpbnRlZ19idWYsIGludGVnX29mZnNldCwKKwkJCQlpbnRlZ19sZW4pKQorCQlCVUcoKTsKKwlpZiAocmVzYnVmLT5wYWdlX2xlbiA9PSAwCisJCQkmJiByZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCisJCQk8IFBBR0VfU0laRSkgeworCQlCVUdfT04ocmVzYnVmLT50YWlsWzBdLmlvdl9sZW4pOworCQkvKiBVc2UgaGVhZCBmb3IgZXZlcnl0aGluZyAqLworCQlyZXN2ID0gJnJlc2J1Zi0+aGVhZFswXTsKKwl9IGVsc2UgaWYgKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9PSBOVUxMKSB7CisJCWlmIChyZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFID4gUEFHRV9TSVpFKQorCQkJZ290byBvdXRfZXJyOworCQlyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSByZXNidWYtPmhlYWRbMF0uaW92X2Jhc2UKKwkJCQkJCSsgcmVzYnVmLT5oZWFkWzBdLmlvdl9sZW47CisJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKKwkJcnFzdHAtPnJxX3Jlc3RhaWxwYWdlID0gMDsKKwkJcmVzdiA9ICZyZXNidWYtPnRhaWxbMF07CisJfSBlbHNlIHsKKwkJcmVzdiA9ICZyZXNidWYtPnRhaWxbMF07CisJfQorCW1pYy5kYXRhID0gKHU4ICopcmVzdi0+aW92X2Jhc2UgKyByZXN2LT5pb3ZfbGVuICsgNDsKKwlpZiAoZ3NzX2dldF9taWMoZ3NkLT5yc2NpLT5tZWNoY3R4LCAmaW50ZWdfYnVmLCAmbWljKSkKKwkJZ290byBvdXRfZXJyOworCXN2Y19wdXR1MzIocmVzdiwgaHRvbmwobWljLmxlbikpOworCW1lbXNldChtaWMuZGF0YSArIG1pYy5sZW4sIDAsCisJCQlyb3VuZF91cF90b19xdWFkKG1pYy5sZW4pIC0gbWljLmxlbik7CisJcmVzdi0+aW92X2xlbiArPSBYRFJfUVVBRExFTihtaWMubGVuKSA8PCAyOworCS8qIG5vdCBzdHJpY3RseSByZXF1aXJlZDogKi8KKwlyZXNidWYtPmxlbiArPSBYRFJfUVVBRExFTihtaWMubGVuKSA8PCAyOworCUJVR19PTihyZXN2LT5pb3ZfbGVuID4gUEFHRV9TSVpFKTsKK291dDoKKwlzdGF0ID0gMDsKK291dF9lcnI6CisJcmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzdmNhdXRoX2dzc193cmFwX3Jlc3BfcHJpdihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworCXN0cnVjdCBnc3Nfc3ZjX2RhdGEgKmdzZCA9IChzdHJ1Y3QgZ3NzX3N2Y19kYXRhICopcnFzdHAtPnJxX2F1dGhfZGF0YTsKKwlzdHJ1Y3QgcnBjX2dzc193aXJlX2NyZWQgKmdjID0gJmdzZC0+Y2xjcmVkOworCXN0cnVjdCB4ZHJfYnVmICpyZXNidWYgPSAmcnFzdHAtPnJxX3JlczsKKwlzdHJ1Y3QgcGFnZSAqKmlucGFnZXMgPSBOVUxMOworCXUzMiAqcDsKKwlpbnQgb2Zmc2V0LCAqbGVuOworCWludCBwYWQ7CisKKwlwID0gZ3NkLT5ib2R5X3N0YXJ0OworCWdzZC0+Ym9keV9zdGFydCA9IE5VTEw7CisJLyogbW92ZSBhY2NlcHRfc3RhdCB0byByaWdodCBwbGFjZTogKi8KKwltZW1jcHkocCwgcCArIDIsIDQpOworCS8qIERvbid0IHdyYXAgaW4gZmFpbHVyZSBjYXNlOiAqLworCS8qIENvdW50aW5nIG9uIG5vdCBnZXR0aW5nIGhlcmUgaWYgY2FsbCB3YXMgbm90IGV2ZW4gYWNjZXB0ZWQhICovCisJaWYgKCpwICE9IHJwY19zdWNjZXNzKSB7CisJCXJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuIC09IDIgKiA0OworCQlyZXR1cm4gMDsKKwl9CisJcCsrOworCWxlbiA9IHArKzsKKwlvZmZzZXQgPSAodTggKilwIC0gKHU4ICopcmVzYnVmLT5oZWFkWzBdLmlvdl9iYXNlOworCSpwKysgPSBodG9ubChnYy0+Z2Nfc2VxKTsKKwlpbnBhZ2VzID0gcmVzYnVmLT5wYWdlczsKKwkvKiBYWFg6IFdvdWxkIGJlIGJldHRlciB0byB3cml0ZSBzb21lIHhkciBoZWxwZXIgZnVuY3Rpb25zIGZvcgorCSAqIG5mc3syLDMsNH14ZHIuYyB0aGF0IHBsYWNlIHRoZSBkYXRhIHJpZ2h0LCBpbnN0ZWFkIG9mIGNvcHlpbmc6ICovCisJaWYgKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSAmJiBycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPT0gMCkgeworCQlCVUdfT04ocmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID49IHJlc2J1Zi0+aGVhZFswXS5pb3ZfYmFzZQorCQkJCQkJCSsgUEFHRV9TSVpFKTsKKwkJQlVHX09OKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA8IHJlc2J1Zi0+aGVhZFswXS5pb3ZfYmFzZSk7CisJCWlmIChyZXNidWYtPnRhaWxbMF0uaW92X2xlbiArIHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuCisJCQkJKyAyICogUlBDX01BWF9BVVRIX1NJWkUgPiBQQUdFX1NJWkUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtbW92ZShyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgKyBSUENfTUFYX0FVVEhfU0laRSwKKwkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSwKKwkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuKTsKKwkJcmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlICs9IFJQQ19NQVhfQVVUSF9TSVpFOworCX0KKwlpZiAocmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID09IE5VTEwpIHsKKwkJaWYgKHJlc2J1Zi0+aGVhZFswXS5pb3ZfbGVuICsgMipSUENfTUFYX0FVVEhfU0laRSA+IFBBR0VfU0laRSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSByZXNidWYtPmhlYWRbMF0uaW92X2Jhc2UKKwkJCSsgcmVzYnVmLT5oZWFkWzBdLmlvdl9sZW4gKyBSUENfTUFYX0FVVEhfU0laRTsKKwkJcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4gPSAwOworCQlycXN0cC0+cnFfcmVzdGFpbHBhZ2UgPSAwOworCX0KKwlpZiAoZ3NzX3dyYXAoZ3NkLT5yc2NpLT5tZWNoY3R4LCBvZmZzZXQsIHJlc2J1ZiwgaW5wYWdlcykpCisJCXJldHVybiAtRU5PTUVNOworCSpsZW4gPSBodG9ubChyZXNidWYtPmxlbiAtIG9mZnNldCk7CisJcGFkID0gMyAtICgocmVzYnVmLT5sZW4gLSBvZmZzZXQgLSAxKSYzKTsKKwlwID0gKHUzMiAqKShyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgKyByZXNidWYtPnRhaWxbMF0uaW92X2xlbik7CisJbWVtc2V0KHAsIDAsIHBhZCk7CisJcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4gKz0gcGFkOworCXJlc2J1Zi0+bGVuICs9IHBhZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc3ZjYXV0aF9nc3NfcmVsZWFzZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworCXN0cnVjdCBnc3Nfc3ZjX2RhdGEgKmdzZCA9IChzdHJ1Y3QgZ3NzX3N2Y19kYXRhICopcnFzdHAtPnJxX2F1dGhfZGF0YTsKKwlzdHJ1Y3QgcnBjX2dzc193aXJlX2NyZWQgKmdjID0gJmdzZC0+Y2xjcmVkOworCXN0cnVjdCB4ZHJfYnVmICpyZXNidWYgPSAmcnFzdHAtPnJxX3JlczsKKwlpbnQgc3RhdCA9IC1FSU5WQUw7CisKIAlpZiAoZ2MtPmdjX3Byb2MgIT0gUlBDX0dTU19QUk9DX0RBVEEpCiAJCWdvdG8gb3V0OwogCS8qIFJlbGVhc2UgY2FuIGJlIGNhbGxlZCB0d2ljZSwgYnV0IHdlIG9ubHkgd3JhcCBvbmNlLiAqLwogCWlmIChnc2QtPmJvZHlfc3RhcnQgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAJLyogbm9ybWFsbHkgbm90IHNldCB0aWxsIHN2Y19zZW5kLCBidXQgd2UgbmVlZCBpdCBoZXJlOiAqLwotCXJlc2J1Zi0+bGVuID0gcmVzYnVmLT5oZWFkWzBdLmlvdl9sZW4KLQkJKyByZXNidWYtPnBhZ2VfbGVuICsgcmVzYnVmLT50YWlsWzBdLmlvdl9sZW47CisJLyogWFhYOiB3aGF0IGZvcj8gIERvIHdlIG1lc3MgaXQgdXAgdGhlIG1vbWVudCB3ZSBjYWxsIHN2Y19wdXR1MzIKKwkgKiBvciB3aGF0ZXZlcj8gKi8KKwlyZXNidWYtPmxlbiA9IHRvdGFsX2J1Zl9sZW4ocmVzYnVmKTsKIAlzd2l0Y2ggKGdjLT5nY19zdmMpIHsKIAljYXNlIFJQQ19HU1NfU1ZDX05PTkU6CiAJCWJyZWFrOwogCWNhc2UgUlBDX0dTU19TVkNfSU5URUdSSVRZOgotCQlwID0gZ3NkLT5ib2R5X3N0YXJ0OwotCQlnc2QtPmJvZHlfc3RhcnQgPSBOVUxMOwotCQkvKiBtb3ZlIGFjY2VwdF9zdGF0IHRvIHJpZ2h0IHBsYWNlOiAqLwotCQltZW1jcHkocCwgcCArIDIsIDQpOwotCQkvKiBkb24ndCB3cmFwIGluIGZhaWx1cmUgY2FzZTogKi8KLQkJLyogTm90ZTogY291bnRpbmcgb24gbm90IGdldHRpbmcgaGVyZSBpZiBjYWxsIHdhcyBub3QgZXZlbgotCQkgKiBhY2NlcHRlZCEgKi8KLQkJaWYgKCpwICE9IHJwY19zdWNjZXNzKSB7Ci0JCQlyZXNidWYtPmhlYWRbMF0uaW92X2xlbiAtPSAyICogNDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXArKzsKLQkJaW50ZWdfb2Zmc2V0ID0gKHU4ICopKHAgKyAxKSAtICh1OCAqKXJlc2J1Zi0+aGVhZFswXS5pb3ZfYmFzZTsKLQkJaW50ZWdfbGVuID0gcmVzYnVmLT5sZW4gLSBpbnRlZ19vZmZzZXQ7Ci0JCUJVR19PTihpbnRlZ19sZW4gJSA0KTsKLQkJKnArKyA9IGh0b25sKGludGVnX2xlbik7Ci0JCSpwKysgPSBodG9ubChnYy0+Z2Nfc2VxKTsKLQkJaWYgKHhkcl9idWZfc3Vic2VnbWVudChyZXNidWYsICZpbnRlZ19idWYsIGludGVnX29mZnNldCwKLQkJCQkJaW50ZWdfbGVuKSkKLQkJCUJVRygpOwotCQlpZiAocmVzYnVmLT5wYWdlX2xlbiA9PSAwCi0JCQkmJiByZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCi0JCQkJPCBQQUdFX1NJWkUpIHsKLQkJCUJVR19PTihyZXNidWYtPnRhaWxbMF0uaW92X2xlbik7Ci0JCQkvKiBVc2UgaGVhZCBmb3IgZXZlcnl0aGluZyAqLwotCQkJcmVzdiA9ICZyZXNidWYtPmhlYWRbMF07Ci0JCX0gZWxzZSBpZiAocmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlID09IE5VTEwpIHsKLQkJCWlmIChyZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCi0JCQkJCT4gUEFHRV9TSVpFKQotCQkJCWdvdG8gb3V0X2VycjsKLQkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9Ci0JCQkJcmVzYnVmLT5oZWFkWzBdLmlvdl9iYXNlCi0JCQkJKyByZXNidWYtPmhlYWRbMF0uaW92X2xlbjsKLQkJCXJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuID0gMDsKLQkJCXJxc3RwLT5ycV9yZXN0YWlscGFnZSA9IDA7Ci0JCQlyZXN2ID0gJnJlc2J1Zi0+dGFpbFswXTsKLQkJfSBlbHNlIHsKLQkJCXJlc3YgPSAmcmVzYnVmLT50YWlsWzBdOwotCQl9Ci0JCW1pYy5kYXRhID0gKHU4ICopcmVzdi0+aW92X2Jhc2UgKyByZXN2LT5pb3ZfbGVuICsgNDsKLQkJaWYgKGdzc19nZXRfbWljKGdzZC0+cnNjaS0+bWVjaGN0eCwgJmludGVnX2J1ZiwgJm1pYykpCisJCXN0YXQgPSBzdmNhdXRoX2dzc193cmFwX3Jlc3BfaW50ZWcocnFzdHApOworCQlpZiAoc3RhdCkKIAkJCWdvdG8gb3V0X2VycjsKLQkJc3ZjX3B1dHUzMihyZXN2LCBodG9ubChtaWMubGVuKSk7Ci0JCW1lbXNldChtaWMuZGF0YSArIG1pYy5sZW4sIDAsCi0JCQkJcm91bmRfdXBfdG9fcXVhZChtaWMubGVuKSAtIG1pYy5sZW4pOwotCQlyZXN2LT5pb3ZfbGVuICs9IFhEUl9RVUFETEVOKG1pYy5sZW4pIDw8IDI7Ci0JCS8qIG5vdCBzdHJpY3RseSByZXF1aXJlZDogKi8KLQkJcmVzYnVmLT5sZW4gKz0gWERSX1FVQURMRU4obWljLmxlbikgPDwgMjsKLQkJQlVHX09OKHJlc3YtPmlvdl9sZW4gPiBQQUdFX1NJWkUpOwogCQlicmVhazsKIAljYXNlIFJQQ19HU1NfU1ZDX1BSSVZBQ1k6CisJCXN0YXQgPSBzdmNhdXRoX2dzc193cmFwX3Jlc3BfcHJpdihycXN0cCk7CisJCWlmIChzdGF0KQorCQkJZ290byBvdXRfZXJyOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlnb3RvIG91dF9lcnI7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9wbWFwX2NsbnQuYyBiL25ldC9zdW5ycGMvcG1hcF9jbG50LmMKaW5kZXggZDI1YjA1NC4uNjIzMTgwZiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9wbWFwX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3BtYXBfY2xudC5jCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwppbmRleCBkYWZlNzkzLi5kYzZjYjkzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY19waXBlLmMKKysrIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChjKSAyMDAyLCBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBmeXMudWlvLm5vPgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTUxNiw3ICs1MTUsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKmR2ZWNbMTBdOwogCWludCBuID0gMDsKIAotCW11dGV4X2xvY2soJmRpci0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CiByZXBlYXQ6CiAJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJnBhcmVudC0+ZF9zdWJkaXJzKSB7CkBAIC02MzIsNyArNjMxLDcgQEAKIAlpZiAoKGVycm9yID0gcnBjX2xvb2t1cF9wYXJlbnQocGF0aCwgbmQpKSAhPSAwKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJZGlyID0gbmQtPmRlbnRyeS0+ZF9pbm9kZTsKLQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKIAlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuZC0+bGFzdC5uYW1lLCBuZC0+ZGVudHJ5LCBuZC0+bGFzdC5sZW4pOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBvdXRfZXJyOwpAQCAtNjk0LDcgKzY5Myw3IEBACiAJaWYgKChlcnJvciA9IHJwY19sb29rdXBfcGFyZW50KHBhdGgsICZuZCkpICE9IDApCiAJCXJldHVybiBlcnJvcjsKIAlkaXIgPSBuZC5kZW50cnktPmRfaW5vZGU7Ci0JbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7CiAJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmQubGFzdC5uYW1lLCBuZC5kZW50cnksIG5kLmxhc3QubGVuKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CkBAIC03NTUsNyArNzU0LDcgQEAKIAlpZiAoKGVycm9yID0gcnBjX2xvb2t1cF9wYXJlbnQocGF0aCwgJm5kKSkgIT0gMCkKIAkJcmV0dXJuIGVycm9yOwogCWRpciA9IG5kLmRlbnRyeS0+ZF9pbm9kZTsKLQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKIAlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuZC5sYXN0Lm5hbWUsIG5kLmRlbnRyeSwgbmQubGFzdC5sZW4pOwogCWlmIChJU19FUlIoZGVudHJ5KSkgewogCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwppbmRleCA3NjkxMTRmLi5mMzhmOTM5YyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCisrKyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwpAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggYjA4NDE5ZS4uMDFiYTYwYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0yODAsNyArMjgwLDEwIEBACiAJcnFzdHAtPnJxX3Jlcy5wYWdlX2Jhc2UgPSAwOwogCXJxc3RwLT5ycV9yZXMucGFnZV9sZW4gPSAwOwogCXJxc3RwLT5ycV9yZXMuYnVmbGVuID0gUEFHRV9TSVpFOworCXJxc3RwLT5ycV9yZXMudGFpbFswXS5pb3ZfYmFzZSA9IE5VTEw7CiAJcnFzdHAtPnJxX3Jlcy50YWlsWzBdLmlvdl9sZW4gPSAwOworCS8qIFdpbGwgYmUgdHVybmVkIG9mZiBvbmx5IGluIGdzcyBwcml2YWN5IGNhc2U6ICovCisJcnFzdHAtPnJxX3NlbmRmaWxlX29rID0gMTsKIAkvKiB0Y3AgbmVlZHMgYSBzcGFjZSBmb3IgdGhlIHJlY29yZCBsZW5ndGguLi4gKi8KIAlpZiAocnFzdHAtPnJxX3Byb3QgPT0gSVBQUk9UT19UQ1ApCiAJCXN2Y19wdXR1MzIocmVzdiwgMCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N5c2N0bC5jIGIvbmV0L3N1bnJwYy9zeXNjdGwuYwppbmRleCAxMDY1OTA0Li5kODliMDQ4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N5c2N0bC5jCisrKyBiL25ldC9zdW5ycGMvc3lzY3RsLmMKQEAgLTcsNyArNyw2IEBACiAgKiBpbXBvc3NpYmxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuYwppbmRleCA1OGExYjZiLi5jZDRlYWZiIDEwMDY0NAotLS0gYS9uZXQvc3lzY3RsX25ldC5jCisrKyBiL25ldC9zeXNjdGxfbmV0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuYwppbmRleCA1MDAzYWNiLi4wNTM5YTgzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmMKKysrIGIvbmV0L3RpcGMvY29yZS5jCkBAIC0xOTEsNyArMTkxLDggQEAKIAlpbnQgcmVzOwogCiAJdGlwY19sb2dfcmVpbml0KENPTkZJR19USVBDX0xPRyk7Ci0JaW5mbygiQWN0aXZhdGVkIChjb21waWxlZCAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiKVxuIik7CisJaW5mbygiQWN0aXZhdGVkICh2ZXJzaW9uICIgVElQQ19NT0RfVkVSIAorCSAgICAgIiBjb21waWxlZCAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiKVxuIik7CiAKIAl0aXBjX293bl9hZGRyID0gMDsKIAl0aXBjX3JlbW90ZV9tYW5hZ2VtZW50ID0gMTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCA4NmY1NGYzLi43NjJhYWMyIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKKysrIGIvbmV0L3RpcGMvY29yZS5oCkBAIC0yOTcsNyArMjk3LDEwIEBACiAgKiBidWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyCiAgKiBAc2l6ZTogbWVzc2FnZSBzaXplIChpbmNsdWRpbmcgVElQQyBoZWFkZXIpCiAgKgotICogUmV0dXJucyBhIG5ldyBidWZmZXIuICBTcGFjZSBpcyByZXNlcnZlZCBmb3IgYSBkYXRhIGxpbmsgaGVhZGVyLgorICogUmV0dXJucyBhIG5ldyBidWZmZXIgd2l0aCBkYXRhIHBvaW50ZXJzIHNldCB0byB0aGUgc3BlY2lmaWVkIHNpemUuCisgKiAKKyAqIE5PVEU6IEhlYWRyb29tIGlzIHJlc2VydmVkIHRvIGFsbG93IHByZXBlbmRpbmcgb2YgYSBkYXRhIGxpbmsgaGVhZGVyLgorICogICAgICAgVGhlcmUgbWF5IGFsc28gYmUgdW5yZXF1ZXN0ZWQgdGFpbHJvb20gcHJlc2VudCBhdCB0aGUgYnVmZmVyJ3MgZW5kLgogICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmJ1Zl9hY3F1aXJlKHUzMiBzaXplKQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jCmluZGV4IGQ2NDY1ODAuLmMxMGUxOGEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYworKysgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTIsNyArMiw3IEBACiAgKiBuZXQvdGlwYy9saW5rLmM6IFRJUEMgbGluayBjb2RlCiAgKiAKICAqIENvcHlyaWdodCAoYykgMTk5Ni0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTk4OCwxNyArOTg4LDIwIEBACiAJc3RydWN0IHRpcGNfbXNnICpidW5kbGVyX21zZyA9IGJ1Zl9tc2coYnVuZGxlcik7CiAJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7CiAJdTMyIHNpemUgPSBtc2dfc2l6ZShtc2cpOwotCXUzMiB0b19wb3MgPSBhbGlnbihtc2dfc2l6ZShidW5kbGVyX21zZykpOwotCXUzMiByZXN0ID0gbGlua19tYXhfcGt0KGxfcHRyKSAtIHRvX3BvczsKKwl1MzIgYnVuZGxlX3NpemUgPSBtc2dfc2l6ZShidW5kbGVyX21zZyk7CisJdTMyIHRvX3BvcyA9IGFsaWduKGJ1bmRsZV9zaXplKTsKKwl1MzIgcGFkID0gdG9fcG9zIC0gYnVuZGxlX3NpemU7CiAKIAlpZiAobXNnX3VzZXIoYnVuZGxlcl9tc2cpICE9IE1TR19CVU5ETEVSKQogCQlyZXR1cm4gMDsKIAlpZiAobXNnX3R5cGUoYnVuZGxlcl9tc2cpICE9IE9QRU5fTVNHKQogCQlyZXR1cm4gMDsKLQlpZiAocmVzdCA8IGFsaWduKHNpemUpKQorCWlmIChza2JfdGFpbHJvb20oYnVuZGxlcikgPCAocGFkICsgc2l6ZSkpCisJCXJldHVybiAwOworCWlmIChsaW5rX21heF9wa3QobF9wdHIpIDwgKHRvX3BvcyArIHNpemUpKQogCQlyZXR1cm4gMDsKIAotCXNrYl9wdXQoYnVuZGxlciwgKHRvX3BvcyAtIG1zZ19zaXplKGJ1bmRsZXJfbXNnKSkgKyBzaXplKTsKKwlza2JfcHV0KGJ1bmRsZXIsIHBhZCArIHNpemUpOwogCW1lbWNweShidW5kbGVyLT5kYXRhICsgdG9fcG9zLCBidWYtPmRhdGEsIHNpemUpOwogCW1zZ19zZXRfc2l6ZShidW5kbGVyX21zZywgdG9fcG9zICsgc2l6ZSk7CiAJbXNnX3NldF9tc2djbnQoYnVuZGxlcl9tc2csIG1zZ19tc2djbnQoYnVuZGxlcl9tc2cpICsgMSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggODYxMzIyYi4uZmM2ZDA5NiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCisrKyBiL25ldC90aXBjL25vZGUuYwpAQCAtMiw3ICsyLDcgQEAKICAqIG5ldC90aXBjL25vZGUuYzogVElQQyBub2RlIG1hbmFnZW1lbnQgcm91dGluZXMKICAqIAogICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcworICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU5Miw2ICs1OTIsNyBAQAogCXN0cnVjdCBza19idWZmICpidWY7CiAJc3RydWN0IG5vZGUgKm5fcHRyOwogICAgICAgICBzdHJ1Y3QgdGlwY19ub2RlX2luZm8gbm9kZV9pbmZvOworCXUzMiBwYXlsb2FkX3NpemU7CiAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwpAQCAtNjA4LDggKzYwOSwxMSBAQAogCS8qIEZvciBub3csIGdldCBzcGFjZSBmb3IgYWxsIG90aGVyIG5vZGVzIAogCSAgICh3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoaXMgd2hlbiBzbGF2ZSBub2RlcyBhcmUgc3VwcG9ydGVkICovCiAKLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0Uoc2l6ZW9mKG5vZGVfaW5mbykpICoKLQkJCQkgICAodGlwY19tYXhfbm9kZXMgLSAxKSk7CisJcGF5bG9hZF9zaXplID0gVExWX1NQQUNFKHNpemVvZihub2RlX2luZm8pKSAqICh0aXBjX21heF9ub2RlcyAtIDEpOworCWlmIChwYXlsb2FkX3NpemUgPiAzMjc2OHUpCisJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAorCQkJCQkJICAgIiAodG9vIG1hbnkgbm9kZXMpIik7CisJYnVmID0gdGlwY19jZmdfcmVwbHlfYWxsb2MocGF5bG9hZF9zaXplKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTYzMyw2ICs2MzcsNyBAQAogCXN0cnVjdCBza19idWZmICpidWY7CiAJc3RydWN0IG5vZGUgKm5fcHRyOwogICAgICAgICBzdHJ1Y3QgdGlwY19saW5rX2luZm8gbGlua19pbmZvOworCXUzMiBwYXlsb2FkX3NpemU7CiAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwpAQCAtNjQ1LDEyICs2NTAsMTUgQEAKIAogICAgICAgICBpZiAoIXRpcGNfbm9kZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKKwkKKwkvKiBHZXQgc3BhY2UgZm9yIGFsbCB1bmljYXN0IGxpbmtzICsgbXVsdGljYXN0IGxpbmsgKi8KIAotCS8qIEZvciBub3csIGdldCBzcGFjZSBmb3IgMiBsaW5rcyB0byBhbGwgb3RoZXIgbm9kZXMgKyBiY2FzdCBsaW5rIAotCSAgICh3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoaXMgd2hlbiBzbGF2ZSBub2RlcyBhcmUgc3VwcG9ydGVkICovCi0KLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0Uoc2l6ZW9mKGxpbmtfaW5mbykpICoKLQkJCQkgICAoMiAqICh0aXBjX21heF9ub2RlcyAtIDEpICsgMSkpOworCXBheWxvYWRfc2l6ZSA9IFRMVl9TUEFDRShzaXplb2YobGlua19pbmZvKSkgKgorCQkodGlwY19uZXQuem9uZXNbdGlwY196b25lKHRpcGNfb3duX2FkZHIpXS0+bGlua3MgKyAxKTsKKwlpZiAocGF5bG9hZF9zaXplID4gMzI3Njh1KQorCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX05PVF9TVVBQT1JURUQKKwkJCQkJCSAgICIgKHRvbyBtYW55IGxpbmtzKSIpOworCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKHBheWxvYWRfc2l6ZSk7CiAJaWYgKCFidWYpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvdGlwYy96b25lLmggYi9uZXQvdGlwYy96b25lLmgKaW5kZXggMjY3OTk5Yy4uNWFiM2QwOCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvem9uZS5oCisrKyBiL25ldC90aXBjL3pvbmUuaApAQCAtMiw3ICsyLDcgQEAKICAqIG5ldC90aXBjL3pvbmUuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIHpvbmUgbWFuYWdlbWVudCByb3V0aW5lcwogICogCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgV2luZCBSaXZlciBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiwgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDUsNyArNDUsNyBAQAogICogc3RydWN0IF96b25lIC0gVElQQyB6b25lIHN0cnVjdHVyZQogICogQGFkZHI6IG5ldHdvcmsgYWRkcmVzcyBvZiB6b25lCiAgKiBAY2x1c3RlcnM6IGFycmF5IG9mIHBvaW50ZXJzIHRvIGFsbCBjbHVzdGVycyB3aXRoaW4gem9uZQotICogQGxpbmtzOiAodXNlZCBmb3IgaW50ZXItem9uZSBjb21tdW5pY2F0aW9uKQorICogQGxpbmtzOiBudW1iZXIgb2YgKHVuaWNhc3QpIGxpbmtzIHRvIHpvbmUKICAqLwogIAogc3RydWN0IF96b25lIHsKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBkOTAxNDY1Li5mNzA0NzViIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC04Myw3ICs4Myw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0xMjgsNiArMTI3LDMwIEBACiAKICNkZWZpbmUgVU5JWF9BQlNUUkFDVChzaykJKHVuaXhfc2soc2spLT5hZGRyLT5oYXNoICE9IFVOSVhfSEFTSF9TSVpFKQogCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksKK3N0YXRpYyB2b2lkIHVuaXhfZ2V0X3BlZXJzZWNfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc2tiLCBVTklYU0VDREFUQShza2IpLAorCQkJCQkgICAgICAgVU5JWFNFQ0xFTihza2IpKTsKKwlpZiAoZXJyKQorCQkqKFVOSVhTRUNEQVRBKHNrYikpID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVuaXhfc2V0X3NlY2RhdGEoc3RydWN0IHNjbV9jb29raWUgKnNjbSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzY20tPnNlY2RhdGEgPSAqVU5JWFNFQ0RBVEEoc2tiKTsKKwlzY20tPnNlY2xlbiA9ICpVTklYU0VDTEVOKHNrYik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVuaXhfZ2V0X3BlZXJzZWNfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5peF9zZXRfc2VjZGF0YShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreyB9CisjZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KKwogLyoKICAqICBTTVAgbG9ja2luZyBzdHJhdGVneToKICAqICAgIGhhc2ggdGFibGUgaXMgcHJvdGVjdGVkIHdpdGggc3BpbmxvY2sgdW5peF90YWJsZV9sb2NrCkBAIC01NDIsNiArNTY1LDE0IEBACiAJLm9ial9zaXplID0gc2l6ZW9mKHN0cnVjdCB1bml4X3NvY2spLAogfTsKIAorLyoKKyAqIEFGX1VOSVggc29ja2V0cyBkbyBub3QgaW50ZXJhY3Qgd2l0aCBoYXJkd2FyZSwgaGVuY2UgdGhleQorICogZG9udCB0cmlnZ2VyIGludGVycnVwdHMgLSBzbyBpdCdzIHNhZmUgZm9yIHRoZW0gdG8gaGF2ZQorICogYmgtdW5zYWZlIGxvY2tpbmcgZm9yIHRoZWlyIHNrX3JlY2VpdmVfcXVldWUubG9jay4gU3BsaXQgb2ZmCisgKiB0aGlzIHNwZWNpYWwgbG9jay1jbGFzcyBieSByZWluaXRpYWxpemluZyB0aGUgc3BpbmxvY2sga2V5OgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGFmX3VuaXhfc2tfcmVjZWl2ZV9xdWV1ZV9sb2NrX2tleTsKKwogc3RhdGljIHN0cnVjdCBzb2NrICogdW5peF9jcmVhdGUxKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKQEAgLTU1Nyw2ICs1ODgsOCBAQAogCWF0b21pY19pbmMoJnVuaXhfbnJfc29ja3MpOwogCiAJc29ja19pbml0X2RhdGEoc29jayxzayk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2ssCisJCQkJJmFmX3VuaXhfc2tfcmVjZWl2ZV9xdWV1ZV9sb2NrX2tleSk7CiAKIAlzay0+c2tfd3JpdGVfc3BhY2UJPSB1bml4X3dyaXRlX3NwYWNlOwogCXNrLT5za19tYXhfYWNrX2JhY2tsb2cJPSBzeXNjdGxfdW5peF9tYXhfZGdyYW1fcWxlbjsKQEAgLTEwMjIsNyArMTA1NSw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQl1bml4X3N0YXRlX3dsb2NrKHNrKTsKKwl1bml4X3N0YXRlX3dsb2NrX25lc3RlZChzayk7CiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IHN0KSB7CiAJCXVuaXhfc3RhdGVfd3VubG9jayhzayk7CkBAIC0xMjkxLDYgKzEzMjQsOCBAQAogCWlmIChzaW9jYi0+c2NtLT5mcCkKIAkJdW5peF9hdHRhY2hfZmRzKHNpb2NiLT5zY20sIHNrYik7CiAKKwl1bml4X2dldF9wZWVyc2VjX2RncmFtKHNrYik7CisKIAlza2ItPmgucmF3ID0gc2tiLT5kYXRhOwogCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pOwogCWlmIChlcnIpCkBAIC0xNTcwLDYgKzE2MDUsNyBAQAogCQltZW1zZXQoJnRtcF9zY20sIDAsIHNpemVvZih0bXBfc2NtKSk7CiAJfQogCXNpb2NiLT5zY20tPmNyZWRzID0gKlVOSVhDUkVEUyhza2IpOworCXVuaXhfc2V0X3NlY2RhdGEoc2lvY2ItPnNjbSwgc2tiKTsKIAogCWlmICghKGZsYWdzICYgTVNHX1BFRUspKQogCXsKZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvYWZfd2FucGlwZS5jIGIvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKaW5kZXggYjEyNjUxOC4uYTY5MGNmNyAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKKysrIGIvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKQEAgLTMyLDcgKzMyLDYgQEAKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwppbmRleCBjMzQ4MzNkLi5hZDhlOGE3IDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYworKysgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwpAQCAtNDIsNyArNDIsNiBAQAogKiBKdW4gMDIsIDE5OTkgIEdpZGVvbiBIYWNrCVVwZGF0ZXMgZm9yIExpbnV4IDIuMC5YIGFuZCAyLjIuWCBrZXJuZWxzLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKaW5kZXggYzI4YmE1YS4uOTMwZWE1OSAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKQEAgLTIwLDcgKzIwLDYgQEAKICogRGVjIDEzLCAxOTk2CUdlbmUgS296aW4JSW5pdGlhbCB2ZXJzaW9uIChiYXNlZCBvbiBTYW5nb21hJ3MgV0FOUElQRSkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogX19pbml0ZnVuYyBldCBhbC4gKi8KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIHJldHVybiBjb2RlcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS9hZl94MjUuYyBiL25ldC94MjUvYWZfeDI1LmMKaW5kZXggMjgyY2U0ZS4uNTJhMjcyNiAxMDA2NDQKLS0tIGEvbmV0L3gyNS9hZl94MjUuYworKysgYi9uZXQveDI1L2FmX3gyNS5jCkBAIC0zNSw3ICszNSw2IEBACiAgKgkJCQkJcmVzcG9uc2UKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9kZXYuYyBiL25ldC94MjUveDI1X2Rldi5jCmluZGV4IGFkZmU3YjguLjQ3YjY4YTMgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2Rldi5jCisrKyBiL25ldC94MjUveDI1X2Rldi5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiAgICAgIDIwMDAtMDktMDQJSGVubmVyIEVpc2VuCVByZXZlbnQgZnJlZWluZyBhIGRhbmdsaW5nIHNrYi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9wcm9jLmMgYi9uZXQveDI1L3gyNV9wcm9jLmMKaW5kZXggZGZiODAxMS4uYTExODM3ZCAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfcHJvYy5jCisrKyBiL25ldC94MjUveDI1X3Byb2MuYwpAQCAtMTcsNyArMTcsNiBAQAogICoJMjAwMi8xMC8wNglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gIHNlcV9maWxlIHN1cHBvcnQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfcm91dGUuYyBiL25ldC94MjUveDI1X3JvdXRlLmMKaW5kZXggNmM1ZDM3NS4uMmEzZmU5OCAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfcm91dGUuYworKysgYi9uZXQveDI1L3gyNV9yb3V0ZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKglYLjI1IDAwMQlKb25hdGhhbiBOYXlsb3IJU3RhcnRlZCBjb2RpbmcuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxuZXQveDI1Lmg+CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IDZlZDMzMDIuLjA0ZTFhZWEgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC05LDcgKzksNiBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bma2V5djIuaD4KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGI4OTM2OTIuLjQwNWI3NDEgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMTMsNyArMTMsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggMTdiMjllYy4uNDNmMDBmYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMTE2NCw4ICsxMTY0LDYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbXR1KTsKLQogaW50IHhmcm1faW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbzsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggYzIxZGMyNi4uM2U2YTcyMiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTE0MzUsNyArMTQzNSw3IEBACiAJbGluayA9ICZ4ZnJtX2Rpc3BhdGNoW3R5cGVdOwogCiAJLyogQWxsIG9wZXJhdGlvbnMgcmVxdWlyZSBwcml2aWxlZ2VzLCBldmVuIEdFVCAqLwotCWlmIChzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiKSkgeworCWlmIChzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiLCBDQVBfTkVUX0FETUlOKSkgewogCQkqZXJycCA9IC1FUEVSTTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IGIwZDA2N2IuLjIxODBjODggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtMTMsNiArMTMsMTAgQEAKIGRlcGZpbGUgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChARCkvLiQoQEYpLmQpCiAKICMjIworIyBmaWxlbmFtZSBvZiB0YXJnZXQgd2l0aCBkaXJlY3RvcnkgYW5kIGV4dGVuc2lvbiBzdHJpcHBlZAorYmFzZXRhcmdldCA9ICQoYmFzZW5hbWUgJChub3RkaXIgJEApKQorCisjIyMKICMgRXNjYXBlIHNpbmdsZSBxdW90ZSBmb3IgdXNlIGluIGVjaG8gc3RhdGVtZW50cwogZXNjc3EgPSAkKHN1YnN0ICQoc3F1b3RlKSwnXCQoc3F1b3RlKScsJDEpCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCmluZGV4IDAyYTdlZWEuLjNjYjQ0NWMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZApAQCAtMTE3LDcgKzExNyw3IEBACiAkKG9iai1tKSAgICAgICAgICAgICAgOiBxdWlldF9tb2R0YWcgOj0gW01dCiAKICMgRGVmYXVsdCBmb3Igbm90IG11bHRpLXBhcnQgbW9kdWxlcwotbW9kbmFtZSA9ICQoKkYpCittb2RuYW1lID0gJChiYXNldGFyZ2V0KQogCiAkKG11bHRpLW9ianMtbSkgICAgICAgICA6IG1vZG5hbWUgPSAkKG1vZG5hbWUtbXVsdGkpCiAkKG11bHRpLW9ianMtbToubz0uaSkgICA6IG1vZG5hbWUgPSAkKG1vZG5hbWUtbXVsdGkpCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmhvc3QgYi9zY3JpcHRzL01ha2VmaWxlLmhvc3QKaW5kZXggMmIwNjZkMS4uMThlY2Q0ZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5ob3N0CisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuaG9zdApAQCAtODAsOCArODAsMTAgQEAKICMjIyMjCiAjIEhhbmRsZSBvcHRpb25zIHRvIGdjYy4gU3VwcG9ydCBidWlsZGluZyB3aXRoIHNlcGFyYXRlIG91dHB1dCBkaXJlY3RvcnkKIAotX2hvc3RjX2ZsYWdzICAgPSAkKEhPU1RDRkxBR1MpICAgJChIT1NUX0VYVFJBQ0ZMQUdTKSAgICQoSE9TVENGTEFHU18kKCpGKS5vKQotX2hvc3RjeHhfZmxhZ3MgPSAkKEhPU1RDWFhGTEFHUykgJChIT1NUX0VYVFJBQ1hYRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoKkYpLm8pCitfaG9zdGNfZmxhZ3MgICA9ICQoSE9TVENGTEFHUykgICAkKEhPU1RfRVhUUkFDRkxBR1MpICAgXAorICAgICAgICAgICAgICAgICAkKEhPU1RDRkxBR1NfJChiYXNldGFyZ2V0KS5vKQorX2hvc3RjeHhfZmxhZ3MgPSAkKEhPU1RDWFhGTEFHUykgJChIT1NUX0VYVFJBQ1hYRkxBR1MpIFwKKyAgICAgICAgICAgICAgICAgJChIT1NUQ1hYRkxBR1NfJChiYXNldGFyZ2V0KS5vKQogCiBpZmVxICgkKEtCVUlMRF9TUkMpLCkKIF9faG9zdGNfZmxhZ3MJPSAkKF9ob3N0Y19mbGFncykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggMmNiNDkzNS4uZmM0OThmZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTgyLDEyICs4MiwxMiBAQAogIyAgICAgICB0aGFuIG9uZSBtb2R1bGUuIEluIHRoYXQgY2FzZSBLQlVJTERfTU9ETkFNRSB3aWxsIGJlIHNldCB0byBmb29fYmFyLAogIyAgICAgICB3aGVyZSBmb28gYW5kIGJhciBhcmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZXMuCiBuYW1lLWZpeCA9ICQoc3Vic3QgJChjb21tYSksXywkKHN1YnN0IC0sXywkMSkpCi1iYXNlbmFtZV9mbGFncyA9IC1EIktCVUlMRF9CQVNFTkFNRT1LQlVJTERfU1RSKCQoY2FsbCBuYW1lLWZpeCwkKCpGKSkpIgorYmFzZW5hbWVfZmxhZ3MgPSAtRCJLQlVJTERfQkFTRU5BTUU9S0JVSUxEX1NUUigkKGNhbGwgbmFtZS1maXgsJChiYXNldGFyZ2V0KSkpIgogbW9kbmFtZV9mbGFncyAgPSAkKGlmICQoZmlsdGVyIDEsJCh3b3JkcyAkKG1vZG5hbWUpKSksXAogICAgICAgICAgICAgICAgICAtRCJLQlVJTERfTU9ETkFNRT1LQlVJTERfU1RSKCQoY2FsbCBuYW1lLWZpeCwkKG1vZG5hbWUpKSkiKQogCi1fY19mbGFncyAgICAgICA9ICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChDRkxBR1NfJCgqRikubykKLV9hX2ZsYWdzICAgICAgID0gJChBRkxBR1MpICQoRVhUUkFfQUZMQUdTKSAkKEFGTEFHU18kKCpGKS5vKQorX2NfZmxhZ3MgICAgICAgPSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQoQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKK19hX2ZsYWdzICAgICAgID0gJChBRkxBR1MpICQoRVhUUkFfQUZMQUdTKSAkKEFGTEFHU18kKGJhc2V0YXJnZXQpLm8pCiBfY3BwX2ZsYWdzICAgICA9ICQoQ1BQRkxBR1MpICQoRVhUUkFfQ1BQRkxBR1MpICQoQ1BQRkxBR1NfJChARikpCiAKICMgSWYgYnVpbGRpbmcgdGhlIGtlcm5lbCBpbiBhIHNlcGFyYXRlIG9ianRyZWUgZXhwYW5kIGFsbCBvY2N1cnJlbmNlcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CmluZGV4IDU3NmNjZTUuLmE0OTU1MDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKQEAgLTcyLDcgKzcyLDcgQEAKICMgU3RlcCA1KSwgY29tcGlsZSBhbGwgKi5tb2QuYyBmaWxlcwogCiAjIG1vZG5hbWUgaXMgc2V0IHRvIG1ha2UgY19mbGFncyBkZWZpbmUgS0JVSUxEX01PRE5BTUUKLW1vZG5hbWUgPSAkKCpGKQorbW9kbmFtZSA9ICQobm90ZGlyICQoQDoubW9kLm89KSkKIAogcXVpZXRfY21kX2NjX29fYyA9IENDICAgICAgJEAKICAgICAgIGNtZF9jY19vX2MgPSAkKENDKSAkKGNfZmxhZ3MpICQoQ0ZMQUdTX01PRFVMRSkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3ZlcnNpb24ucGwgYi9zY3JpcHRzL2NoZWNrdmVyc2lvbi5wbAppbmRleCA5Zjg0ZTU2Li5lYzdkMjExIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrdmVyc2lvbi5wbAorKysgYi9zY3JpcHRzL2NoZWNrdmVyc2lvbi5wbApAQCAtMSw3ICsxLDcgQEAKICMhIC91c3IvYmluL3BlcmwKICMKLSMgY2hlY2t2ZXJzaW9uIGZpbmQgdXNlcyBvZiBMSU5VWF9WRVJTSU9OX0NPREUsIEtFUk5FTF9WRVJTSU9OLCBvcgotIyBVVFNfUkVMRUFTRSB3aXRob3V0IGluY2x1ZGluZyA8bGludXgvdmVyc2lvbi5oPiwgb3IgY2FzZXMgb2YKKyMgY2hlY2t2ZXJzaW9uIGZpbmQgdXNlcyBvZiBMSU5VWF9WRVJTSU9OX0NPREUgb3IgS0VSTkVMX1ZFUlNJT04KKyMgd2l0aG91dCBpbmNsdWRpbmcgPGxpbnV4L3ZlcnNpb24uaD4sIG9yIGNhc2VzIG9mCiAjIGluY2x1ZGluZyA8bGludXgvdmVyc2lvbi5oPiB0aGF0IGRvbid0IG5lZWQgaXQuCiAjIENvcHlyaWdodCAoQykgMjAwMywgUmFuZHkgRHVubGFwIDxyZHVubGFwQHhlbm90aW1lLm5ldD4KIApAQCAtNDEsOCArNDEsNyBAQAogCX0KIAogCSMgTG9vayBmb3IgdXNlczogTElOVVhfVkVSU0lPTl9DT0RFLCBLRVJORUxfVkVSU0lPTiwgVVRTX1JFTEVBU0UKLQlpZiAoKCRfID1+IC9MSU5VWF9WRVJTSU9OX0NPREUvKSB8fCAoJF8gPX4gL1xXS0VSTkVMX1ZFUlNJT04vKSB8fAotCQkoJF8gPX4gL1VUU19SRUxFQVNFLykpIHsKKwlpZiAoKCRfID1+IC9MSU5VWF9WRVJTSU9OX0NPREUvKSB8fCAoJF8gPX4gL1xXS0VSTkVMX1ZFUlNJT04vKSkgewogCSAgICAkZlVzZVZlcnNpb24gPSAxOwogCSAgICBsYXN0IExJTkUgaWYgJGlMaW51eFZlcnNpb247CiAJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jCmluZGV4IGJlMDIwMGUuLjc5ODg2NDEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYworKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKQEAgLTE4Nyw5ICsxODcsMTIgQEAKIAogCS8qIFByaW50IHRoZSBsaXN0ICovCiAJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgewotCQlwcmludF9pdGVtKGxpc3QsIGl0ZW1zWyhzY3JvbGwgKyBpKSAqIDMgKyAxXSwKLQkJCSAgIHN0YXR1c1tpICsgc2Nyb2xsXSwgaSwgaSA9PSBjaG9pY2UpOworCQlpZiAoaSAhPSBjaG9pY2UpCisJCQlwcmludF9pdGVtKGxpc3QsIGl0ZW1zWyhzY3JvbGwgKyBpKSAqIDMgKyAxXSwKKwkJCQkgICBzdGF0dXNbaSArIHNjcm9sbF0sIGksIDApOwogCX0KKwlwcmludF9pdGVtKGxpc3QsIGl0ZW1zWyhzY3JvbGwgKyBjaG9pY2UpICogMyArIDFdLAorCQkgICBzdGF0dXNbY2hvaWNlICsgc2Nyb2xsXSwgY2hvaWNlLCAxKTsKIAogCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9ubywgc2Nyb2xsLAogCQkgICAgIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggMDBlMjEyOS4uZjk0NjBhNiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTA1Niw3ICsxMDU2LDggQEAKIAkgICAgIyBwb2ludGVyLXRvLWZ1bmN0aW9uCiAJICAgIHByaW50ICIuQkkgXCIgICAgIi4kMS4iXCIgIi4kcGFyYW1ldGVyLiIgXCIpICgiLiQyLiIpIi4iXCJcbjtcbiI7CiAJfSBlbHNpZiAoJHR5cGUgPX4gbS9eKC4qPylccyooOi4qKS8pIHsKLQkgICAgcHJpbnQgIi5CSSBcIiAgICAiLiQxLiJcIiAiLiRwYXJhbWV0ZXIuJDIuIiBcIiIuIlwiXG47XG4iOworCSAgICAjIGJpdGZpZWxkCisJICAgIHByaW50ICIuQkkgXCIgICAgIi4kMS4iXCBcIiAiLiRwYXJhbWV0ZXIuJDIuIiBcIiIuIlwiXG47XG4iOwogCX0gZWxzZSB7CiAJICAgICR0eXBlID1+IHMvKFteXCpdKSQvJDEgLzsKIAkgICAgcHJpbnQgIi5CSSBcIiAgICAiLiR0eXBlLiJcIiAiLiRwYXJhbWV0ZXIuIiBcIiIuIlwiXG47XG4iOwpAQCAtMTExOCw3ICsxMTE5LDEwIEBACiAgICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKICAgICBteSAoJHBhcmFtZXRlciwgJHNlY3Rpb24pOwogCi0gICAgcHJpbnQgIkZ1bmN0aW9uOlxuXG4iOworICAgIHByaW50ICJOYW1lOlxuXG4iOworICAgIHByaW50ICRhcmdzeydmdW5jdGlvbid9LiIgLSAiLiRhcmdzeydwdXJwb3NlJ30uIlxuIjsKKworICAgIHByaW50ICJcblN5bm9wc2lzOlxuXG4iOwogICAgIG15ICRzdGFydD0kYXJnc3snZnVuY3Rpb250eXBlJ30uIiAiLiRhcmdzeydmdW5jdGlvbid9LiIgKCI7CiAgICAgcHJpbnQgJHN0YXJ0OwogICAgIG15ICRjb3VudCA9IDA7CkBAIC0xMTY5LDYgKzExNzMsNyBAQAogICAgIG15ICRjb3VudDsKICAgICBwcmludCAiRW51bTpcblxuIjsKIAorICAgIHByaW50ICJlbnVtICIuJGFyZ3N7J2VudW0nfS4iIC0gIi4kYXJnc3sncHVycG9zZSd9LiJcblxuIjsKICAgICBwcmludCAiZW51bSAiLiRhcmdzeydlbnVtJ30uIiB7XG4iOwogICAgICRjb3VudCA9IDA7CiAgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CkBAIC0xMTk3LDcgKzEyMDIsNyBAQAogICAgIG15ICRjb3VudDsKICAgICBwcmludCAiVHlwZWRlZjpcblxuIjsKIAotICAgIHByaW50ICJ0eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iXG4iOworICAgIHByaW50ICJ0eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iIC0gIi4kYXJnc3sncHVycG9zZSd9LiJcbiI7CiAgICAgb3V0cHV0X3NlY3Rpb25fdGV4dChAXyk7CiB9CiAKQEAgLTEyMDYsNyArMTIxMSw3IEBACiAgICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKICAgICBteSAoJHBhcmFtZXRlcik7CiAKLSAgICBwcmludCAkYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIjpcblxuIjsKKyAgICBwcmludCAkYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIiAtICIuJGFyZ3N7J3B1cnBvc2UnfS4iXG5cbiI7CiAgICAgcHJpbnQgJGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0cnVjdCd9LiIge1xuIjsKICAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKIAlpZiAoJHBhcmFtZXRlciA9fiAvXiMvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggMGRkMTYxNy4uZGZkZTBlOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMjQsNyArMjQsMTAgQEAKIC8qIElmIHdlIGFyZSBtb2Rwb3N0aW5nIGV4dGVybmFsIG1vZHVsZSBzZXQgdG8gMSAqLwogc3RhdGljIGludCBleHRlcm5hbF9tb2R1bGUgPSAwOwogLyogSG93IGEgc3ltYm9sIGlzIGV4cG9ydGVkICovCi1lbnVtIGV4cG9ydCB7ZXhwb3J0X3BsYWluLCBleHBvcnRfZ3BsLCBleHBvcnRfZ3BsX2Z1dHVyZSwgZXhwb3J0X3Vua25vd259OworZW51bSBleHBvcnQgeworCWV4cG9ydF9wbGFpbiwgICAgICBleHBvcnRfdW51c2VkLCAgICAgZXhwb3J0X2dwbCwKKwlleHBvcnRfdW51c2VkX2dwbCwgZXhwb3J0X2dwbF9mdXR1cmUsIGV4cG9ydF91bmtub3duCit9OwogCiB2b2lkIGZhdGFsKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpAQCAtMTkxLDcgKzE5NCw5IEBACiAJZW51bSBleHBvcnQgZXhwb3J0OwogfSBleHBvcnRfbGlzdFtdID0gewogCXsgLnN0ciA9ICJFWFBPUlRfU1lNQk9MIiwgICAgICAgICAgICAuZXhwb3J0ID0gZXhwb3J0X3BsYWluIH0sCisJeyAuc3RyID0gIkVYUE9SVF9VTlVTRURfU1lNQk9MIiwgICAgIC5leHBvcnQgPSBleHBvcnRfdW51c2VkIH0sCiAJeyAuc3RyID0gIkVYUE9SVF9TWU1CT0xfR1BMIiwgICAgICAgIC5leHBvcnQgPSBleHBvcnRfZ3BsIH0sCisJeyAuc3RyID0gIkVYUE9SVF9VTlVTRURfU1lNQk9MX0dQTCIsIC5leHBvcnQgPSBleHBvcnRfdW51c2VkX2dwbCB9LAogCXsgLnN0ciA9ICJFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUiLCAuZXhwb3J0ID0gZXhwb3J0X2dwbF9mdXR1cmUgfSwKIAl7IC5zdHIgPSAiKHVua25vd24pIiwgICAgICAgICAgICAgICAgLmV4cG9ydCA9IGV4cG9ydF91bmtub3duIH0sCiB9OwpAQCAtMjA1LDYgKzIxMCw4IEBACiBzdGF0aWMgZW51bSBleHBvcnQgZXhwb3J0X25vKGNvbnN0IGNoYXIgKiBzKQogewogCWludCBpOworCWlmICghcykKKwkJcmV0dXJuIGV4cG9ydF91bmtub3duOwogCWZvciAoaSA9IDA7IGV4cG9ydF9saXN0W2ldLmV4cG9ydCAhPSBleHBvcnRfdW5rbm93bjsgaSsrKSB7CiAJCWlmIChzdHJjbXAoZXhwb3J0X2xpc3RbaV0uc3RyLCBzKSA9PSAwKQogCQkJcmV0dXJuIGV4cG9ydF9saXN0W2ldLmV4cG9ydDsKQEAgLTIxNiw4ICsyMjMsMTIgQEAKIHsKIAlpZiAoc2VjID09IGVsZi0+ZXhwb3J0X3NlYykKIAkJcmV0dXJuIGV4cG9ydF9wbGFpbjsKKwllbHNlIGlmIChzZWMgPT0gZWxmLT5leHBvcnRfdW51c2VkX3NlYykKKwkJcmV0dXJuIGV4cG9ydF91bnVzZWQ7CiAJZWxzZSBpZiAoc2VjID09IGVsZi0+ZXhwb3J0X2dwbF9zZWMpCiAJCXJldHVybiBleHBvcnRfZ3BsOworCWVsc2UgaWYgKHNlYyA9PSBlbGYtPmV4cG9ydF91bnVzZWRfZ3BsX3NlYykKKwkJcmV0dXJuIGV4cG9ydF91bnVzZWRfZ3BsOwogCWVsc2UgaWYgKHNlYyA9PSBlbGYtPmV4cG9ydF9ncGxfZnV0dXJlX3NlYykKIAkJcmV0dXJuIGV4cG9ydF9ncGxfZnV0dXJlOwogCWVsc2UKQEAgLTM2Niw4ICszNzcsMTIgQEAKIAkJCWluZm8tPm1vZGluZm9fbGVuID0gc2VjaGRyc1tpXS5zaF9zaXplOwogCQl9IGVsc2UgaWYgKHN0cmNtcChzZWNuYW1lLCAiX19rc3ltdGFiIikgPT0gMCkKIAkJCWluZm8tPmV4cG9ydF9zZWMgPSBpOworCQllbHNlIGlmIChzdHJjbXAoc2VjbmFtZSwgIl9fa3N5bXRhYl91bnVzZWQiKSA9PSAwKQorCQkJaW5mby0+ZXhwb3J0X3VudXNlZF9zZWMgPSBpOwogCQllbHNlIGlmIChzdHJjbXAoc2VjbmFtZSwgIl9fa3N5bXRhYl9ncGwiKSA9PSAwKQogCQkJaW5mby0+ZXhwb3J0X2dwbF9zZWMgPSBpOworCQllbHNlIGlmIChzdHJjbXAoc2VjbmFtZSwgIl9fa3N5bXRhYl91bnVzZWRfZ3BsIikgPT0gMCkKKwkJCWluZm8tPmV4cG9ydF91bnVzZWRfZ3BsX3NlYyA9IGk7CiAJCWVsc2UgaWYgKHN0cmNtcChzZWNuYW1lLCAiX19rc3ltdGFiX2dwbF9mdXR1cmUiKSA9PSAwKQogCQkJaW5mby0+ZXhwb3J0X2dwbF9mdXR1cmVfc2VjID0gaTsKIApAQCAtMTA4NSwzOCArMTEwMCw2NCBAQAogCWJ1Zi0+cG9zICs9IGxlbjsKIH0KIAotdm9pZCBjaGVja19saWNlbnNlKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3N0YXRpYyB2b2lkIGNoZWNrX2Zvcl9ncGxfdXNhZ2UoZW51bSBleHBvcnQgZXhwLCBjb25zdCBjaGFyICptLCBjb25zdCBjaGFyICpzKQoreworCWNvbnN0IGNoYXIgKmUgPSBpc192bWxpbnV4KG0pID8iIjoiLmtvIjsKKworCXN3aXRjaCAoZXhwKSB7CisJY2FzZSBleHBvcnRfZ3BsOgorCQlmYXRhbCgibW9kcG9zdDogR1BMLWluY29tcGF0aWJsZSBtb2R1bGUgJXMlcyAiCisJCSAgICAgICJ1c2VzIEdQTC1vbmx5IHN5bWJvbCAnJXMnXG4iLCBtLCBlLCBzKTsKKwkJYnJlYWs7CisJY2FzZSBleHBvcnRfdW51c2VkX2dwbDoKKwkJZmF0YWwoIm1vZHBvc3Q6IEdQTC1pbmNvbXBhdGlibGUgbW9kdWxlICVzJXMgIgorCQkgICAgICAidXNlcyBHUEwtb25seSBzeW1ib2wgbWFya2VkIFVOVVNFRCAnJXMnXG4iLCBtLCBlLCBzKTsKKwkJYnJlYWs7CisJY2FzZSBleHBvcnRfZ3BsX2Z1dHVyZToKKwkJd2FybigibW9kcG9zdDogR1BMLWluY29tcGF0aWJsZSBtb2R1bGUgJXMlcyAiCisJCSAgICAgICJ1c2VzIGZ1dHVyZSBHUEwtb25seSBzeW1ib2wgJyVzJ1xuIiwgbSwgZSwgcyk7CisJCWJyZWFrOworCWNhc2UgZXhwb3J0X3BsYWluOgorCWNhc2UgZXhwb3J0X3VudXNlZDoKKwljYXNlIGV4cG9ydF91bmtub3duOgorCQkvKiBpZ25vcmUgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3JfdW51c2VkKGVudW0gZXhwb3J0IGV4cCwgY29uc3QgY2hhciogbSwgY29uc3QgY2hhciogcykKK3sKKwljb25zdCBjaGFyICplID0gaXNfdm1saW51eChtKSA/IiI6Ii5rbyI7CisKKwlzd2l0Y2ggKGV4cCkgeworCWNhc2UgZXhwb3J0X3VudXNlZDoKKwljYXNlIGV4cG9ydF91bnVzZWRfZ3BsOgorCQl3YXJuKCJtb2Rwb3N0OiBtb2R1bGUgJXMlcyAiCisJCSAgICAgICJ1c2VzIHN5bWJvbCAnJXMnIG1hcmtlZCBVTlVTRURcbiIsIG0sIGUsIHMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBpZ25vcmUgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19leHBvcnRzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzLCAqZXhwOwogCiAJZm9yIChzID0gbW9kLT51bnJlczsgczsgcyA9IHMtPm5leHQpIHsKIAkJY29uc3QgY2hhciAqYmFzZW5hbWU7Ci0JCWlmIChtb2QtPmdwbF9jb21wYXRpYmxlID09IDEpIHsKLQkJCS8qIEdQTC1jb21wYXRpYmxlIG1vZHVsZXMgbWF5IHVzZSBhbGwgc3ltYm9scyAqLwotCQkJY29udGludWU7Ci0JCX0KIAkJZXhwID0gZmluZF9zeW1ib2wocy0+bmFtZSk7CiAJCWlmICghZXhwIHx8IGV4cC0+bW9kdWxlID09IG1vZCkKIAkJCWNvbnRpbnVlOwogCQliYXNlbmFtZSA9IHN0cnJjaHIobW9kLT5uYW1lLCAnLycpOwogCQlpZiAoYmFzZW5hbWUpCiAJCQliYXNlbmFtZSsrOwotCQlzd2l0Y2ggKGV4cC0+ZXhwb3J0KSB7Ci0JCQljYXNlIGV4cG9ydF9ncGw6Ci0JCQkJZmF0YWwoIm1vZHBvc3Q6IEdQTC1pbmNvbXBhdGlibGUgbW9kdWxlICVzICIKLQkJCQkgICAgICAidXNlcyBHUEwtb25seSBzeW1ib2wgJyVzJ1xuIiwKLQkJCQkgYmFzZW5hbWUgPyBiYXNlbmFtZSA6IG1vZC0+bmFtZSwKLQkJCQlleHAtPm5hbWUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBleHBvcnRfZ3BsX2Z1dHVyZToKLQkJCQl3YXJuKCJtb2Rwb3N0OiBHUEwtaW5jb21wYXRpYmxlIG1vZHVsZSAlcyAiCi0JCQkJICAgICAgInVzZXMgZnV0dXJlIEdQTC1vbmx5IHN5bWJvbCAnJXMnXG4iLAotCQkJCSAgICAgIGJhc2VuYW1lID8gYmFzZW5hbWUgOiBtb2QtPm5hbWUsCi0JCQkJICAgICAgZXhwLT5uYW1lKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgZXhwb3J0X3BsYWluOiAvKiBpZ25vcmUgKi8gYnJlYWs7Ci0JCQljYXNlIGV4cG9ydF91bmtub3duOiAvKiBpZ25vcmUgKi8gYnJlYWs7Ci0JCX0KKwkJZWxzZQorCQkJYmFzZW5hbWUgPSBtb2QtPm5hbWU7CisJCWlmICghbW9kLT5ncGxfY29tcGF0aWJsZSkKKwkJCWNoZWNrX2Zvcl9ncGxfdXNhZ2UoZXhwLT5leHBvcnQsIGJhc2VuYW1lLCBleHAtPm5hbWUpOworCQljaGVja19mb3JfdW51c2VkKGV4cC0+ZXhwb3J0LCBiYXNlbmFtZSwgZXhwLT5uYW1lKTsKICAgICAgICAgfQogfQogCkBAIC0xMjcxLDcgKzEzMTIsNyBAQAogfQogCiAvKiBwYXJzZSBNb2R1bGUuc3ltdmVycyBmaWxlLiBsaW5lIGZvcm1hdDoKLSAqIDB4MTIzNDU2Nzg8dGFiPnN5bWJvbDx0YWI+bW9kdWxlWzx0YWI+ZXhwb3J0XQorICogMHgxMjM0NTY3ODx0YWI+c3ltYm9sPHRhYj5tb2R1bGVbWzx0YWI+ZXhwb3J0XTx0YWI+c29tZXRoaW5nXQogICoqLwogc3RhdGljIHZvaWQgcmVhZF9kdW1wKGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBpbnQga2VybmVsKQogewpAQCAtMTI4NCw3ICsxMzI1LDcgQEAKIAkJcmV0dXJuOwogCiAJd2hpbGUgKChsaW5lID0gZ2V0X25leHRfbGluZSgmcG9zLCBmaWxlLCBzaXplKSkpIHsKLQkJY2hhciAqc3ltbmFtZSwgKm1vZG5hbWUsICpkLCAqZXhwb3J0OworCQljaGFyICpzeW1uYW1lLCAqbW9kbmFtZSwgKmQsICpleHBvcnQsICplbmQ7CiAJCXVuc2lnbmVkIGludCBjcmM7CiAJCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAkJc3RydWN0IHN5bWJvbCAqczsKQEAgLTEyOTcsNyArMTMzOCw4IEBACiAJCSptb2RuYW1lKysgPSAnXDAnOwogCQlpZiAoKGV4cG9ydCA9IHN0cmNocihtb2RuYW1lLCAnXHQnKSkgIT0gTlVMTCkKIAkJCSpleHBvcnQrKyA9ICdcMCc7Ci0KKwkJaWYgKGV4cG9ydCAmJiAoKGVuZCA9IHN0cmNocihleHBvcnQsICdcdCcpKSAhPSBOVUxMKSkKKwkJCSplbmQgPSAnXDAnOwogCQljcmMgPSBzdHJ0b3VsKGxpbmUsICZkLCAxNik7CiAJCWlmICgqc3ltbmFtZSA9PSAnXDAnIHx8ICptb2RuYW1lID09ICdcMCcgfHwgKmQgIT0gJ1wwJykKIAkJCWdvdG8gZmFpbDsKQEAgLTEzOTYsNyArMTQzOCw3IEBACiAJZm9yIChtb2QgPSBtb2R1bGVzOyBtb2Q7IG1vZCA9IG1vZC0+bmV4dCkgewogCQlpZiAobW9kLT5za2lwKQogCQkJY29udGludWU7Ci0JCWNoZWNrX2xpY2Vuc2UobW9kKTsKKwkJY2hlY2tfZXhwb3J0cyhtb2QpOwogCX0KIAogCWZvciAobW9kID0gbW9kdWxlczsgbW9kOyBtb2QgPSBtb2QtPm5leHQpIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuaCBiL3NjcmlwdHMvbW9kL21vZHBvc3QuaAppbmRleCAyYjAwYzYwLi5kMzk4YzYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCkBAIC0xMTcsNyArMTE3LDkgQEAKIAlFbGZfU3ltICAgICAgKnN5bXRhYl9zdGFydDsKIAlFbGZfU3ltICAgICAgKnN5bXRhYl9zdG9wOwogCUVsZl9TZWN0aW9uICBleHBvcnRfc2VjOworCUVsZl9TZWN0aW9uICBleHBvcnRfdW51c2VkX3NlYzsKIAlFbGZfU2VjdGlvbiAgZXhwb3J0X2dwbF9zZWM7CisJRWxmX1NlY3Rpb24gIGV4cG9ydF91bnVzZWRfZ3BsX3NlYzsKIAlFbGZfU2VjdGlvbiAgZXhwb3J0X2dwbF9mdXR1cmVfc2VjOwogCWNvbnN0IGNoYXIgICAqc3RydGFiOwogCWNoYXIJICAgICAqbW9kaW5mbzsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCBmOWIzNWNjLi5iODY4ZTdlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY29tbW9uY2FwLmMgYi9zZWN1cml0eS9jb21tb25jYXAuYwppbmRleCA4NDFlYjRlLi5mNTBmYzI5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9jb21tb25jYXAuYworKysgYi9zZWN1cml0eS9jb21tb25jYXAuYwpAQCAtOCw3ICs4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMzLDkgKzMyLDkgQEAKIAogRVhQT1JUX1NZTUJPTChjYXBfbmV0bGlua19zZW5kKTsKIAotaW50IGNhcF9uZXRsaW5rX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBjYXBfbmV0bGlua19yZWN2KHN0cnVjdCBza19idWZmICpza2IsIGludCBjYXApCiB7Ci0JaWYgKCFjYXBfcmFpc2VkKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBDQVBfTkVUX0FETUlOKSkKKwlpZiAoIWNhcF9yYWlzZWQoTkVUTElOS19DQihza2IpLmVmZl9jYXAsIGNhcCkpCiAJCXJldHVybiAtRVBFUk07CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9kdW1teS5jIGIvc2VjdXJpdHkvZHVtbXkuYwppbmRleCAzMTBmY2RmNy4uYmJiZmRhNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvZHVtbXkuYworKysgYi9zZWN1cml0eS9kdW1teS5jCkBAIC0xNSw3ICsxNSw2IEBACiAjdW5kZWYgREVCVUcKIAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CkBAIC01MDYsNiArNTA1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZHVtbXlfdGFza19nZXRzZWNpZCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgKnNlY2lkKQoreyB9CisKIHN0YXRpYyBpbnQgZHVtbXlfdGFza19zZXRncm91cHMgKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQogewogCXJldHVybiAwOwpAQCAtNTIxLDYgKzUyMywxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGR1bW15X3Rhc2tfZ2V0aW9wcmlvIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHVtbXlfdGFza19zZXRybGltaXQgKHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7CiAJcmV0dXJuIDA7CkBAIC01NDgsNyArNTU1LDcgQEAKIH0KIAogc3RhdGljIGludCBkdW1teV90YXNrX2tpbGwgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNpZ2luZm8gKmluZm8sCi0JCQkgICAgaW50IHNpZykKKwkJCSAgICBpbnQgc2lnLCB1MzIgc2VjaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC02NzUsOSArNjgyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV9uZXRsaW5rX3JlY3YgKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGR1bW15X25ldGxpbmtfcmVjdiAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNhcCkKIHsKLQlpZiAoIWNhcF9yYWlzZWQgKE5FVExJTktfQ0IgKHNrYikuZWZmX2NhcCwgQ0FQX05FVF9BRE1JTikpCisJaWYgKCFjYXBfcmFpc2VkIChORVRMSU5LX0NCIChza2IpLmVmZl9jYXAsIGNhcCkpCiAJCXJldHVybiAtRVBFUk07CiAJcmV0dXJuIDA7CiB9CkBAIC05ODEsOSArOTg4LDExIEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB0YXNrX3NldHBnaWQpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgdGFza19nZXRwZ2lkKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfZ2V0c2lkKTsKKwlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfZ2V0c2VjaWQpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgdGFza19zZXRncm91cHMpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgdGFza19zZXRuaWNlKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfc2V0aW9wcmlvKTsKKwlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfZ2V0aW9wcmlvKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfc2V0cmxpbWl0KTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfc2V0c2NoZWR1bGVyKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHRhc2tfZ2V0c2NoZWR1bGVyKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lub2RlLmMgYi9zZWN1cml0eS9pbm9kZS5jCmluZGV4IDk4YTBkZjUuLjQ3ZWI2MzQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2lub2RlLmMKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtMTMsNyArMTMsNiBAQAogICovCiAKIC8qICNkZWZpbmUgREVCVUcgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggM2MyODc3Zi4uMWJiNDE2ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtOTksNiArOTksNyBAQAogZXh0ZXJuIHN0cnVjdCBrZXkgKnJlcXVlc3Rfa2V5X2FuZF9saW5rKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCiAJCQkJCWNvbnN0IGNoYXIgKmNhbGxvdXRfaW5mbywKKwkJCQkJdm9pZCAqYXV4LAogCQkJCQlzdHJ1Y3Qga2V5ICpkZXN0X2tleXJpbmcsCiAJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwppbmRleCAzMjk0MTFjLi5kOWNhMTVjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCX0KIAogCS8qIGRvIHRoZSBzZWFyY2ggKi8KLQlrZXkgPSByZXF1ZXN0X2tleV9hbmRfbGluayhrdHlwZSwgZGVzY3JpcHRpb24sIGNhbGxvdXRfaW5mbywKKwlrZXkgPSByZXF1ZXN0X2tleV9hbmRfbGluayhrdHlwZSwgZGVzY3JpcHRpb24sIGNhbGxvdXRfaW5mbywgTlVMTCwKIAkJCQkgICBrZXlfcmVmX3RvX3B0cihkZXN0X3JlZiksCiAJCQkJICAgS0VZX0FMTE9DX0lOX1FVT1RBKTsKIAlpZiAoSVNfRVJSKGtleSkpIHsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwppbmRleCA1OGQxZWZkLi5mNTczYWMxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCkBAIC0xLDYgKzEsNiBAQAogLyogcmVxdWVzdF9rZXkuYzogcmVxdWVzdCBhIGtleSBmcm9tIHVzZXJzcGFjZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC02IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMyw3ICszMyw4IEBACiAgKi8KIHN0YXRpYyBpbnQgY2FsbF9zYmluX3JlcXVlc3Rfa2V5KHN0cnVjdCBrZXkgKmtleSwKIAkJCQkgc3RydWN0IGtleSAqYXV0aGtleSwKLQkJCQkgY29uc3QgY2hhciAqb3ApCisJCQkJIGNvbnN0IGNoYXIgKm9wLAorCQkJCSB2b2lkICphdXgpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCWtleV9zZXJpYWxfdCBwcmtleSwgc3NrZXk7CkBAIC0xMjcsNiArMTI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qga2V5ICpfX3JlcXVlc3Rfa2V5X2NvbnN0cnVjdGlvbihzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCiAJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAogCQkJCQkgICAgICBjb25zdCBjaGFyICpjYWxsb3V0X2luZm8sCisJCQkJCSAgICAgIHZvaWQgKmF1eCwKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlyZXF1ZXN0X2tleV9hY3Rvcl90IGFjdG9yOwpAQCAtMTY0LDcgKzE2Niw3IEBACiAJYWN0b3IgPSBjYWxsX3NiaW5fcmVxdWVzdF9rZXk7CiAJaWYgKHR5cGUtPnJlcXVlc3Rfa2V5KQogCQlhY3RvciA9IHR5cGUtPnJlcXVlc3Rfa2V5OwotCXJldCA9IGFjdG9yKGtleSwgYXV0aGtleSwgImNyZWF0ZSIpOworCXJldCA9IGFjdG9yKGtleSwgYXV0aGtleSwgImNyZWF0ZSIsIGF1eCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gcmVxdWVzdF9mYWlsZWQ7CiAKQEAgLTI1OCw4ICsyNjAsOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGtleSAqcmVxdWVzdF9rZXlfY29uc3RydWN0aW9uKHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAotCQkJCQkgICAgc3RydWN0IGtleV91c2VyICp1c2VyLAogCQkJCQkgICAgY29uc3QgY2hhciAqY2FsbG91dF9pbmZvLAorCQkJCQkgICAgdm9pZCAqYXV4LAorCQkJCQkgICAgc3RydWN0IGtleV91c2VyICp1c2VyLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAqcGNvbnM7CkBAIC0yODQsNyArMjg3LDcgQEAKIAl9CiAKIAkvKiBzZWUgYWJvdXQgZ2V0dGluZyB1c2Vyc3BhY2UgdG8gY29uc3RydWN0IHRoZSBrZXkgKi8KLQlrZXkgPSBfX3JlcXVlc3Rfa2V5X2NvbnN0cnVjdGlvbih0eXBlLCBkZXNjcmlwdGlvbiwgY2FsbG91dF9pbmZvLAorCWtleSA9IF9fcmVxdWVzdF9rZXlfY29uc3RydWN0aW9uKHR5cGUsIGRlc2NyaXB0aW9uLCBjYWxsb3V0X2luZm8sIGF1eCwKIAkJCQkJIGZsYWdzKTsKICBlcnJvcjoKIAlrbGVhdmUoIiA9ICVwIiwga2V5KTsKQEAgLTM5Miw2ICszOTUsNyBAQAogc3RydWN0IGtleSAqcmVxdWVzdF9rZXlfYW5kX2xpbmsoc3RydWN0IGtleV90eXBlICp0eXBlLAogCQkJCSBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKIAkJCQkgY29uc3QgY2hhciAqY2FsbG91dF9pbmZvLAorCQkJCSB2b2lkICphdXgsCiAJCQkJIHN0cnVjdCBrZXkgKmRlc3Rfa2V5cmluZywKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTM5OSw4ICs0MDMsOSBAQAogCXN0cnVjdCBrZXkgKmtleTsKIAlrZXlfcmVmX3Qga2V5X3JlZjsKIAotCWtlbnRlcigiJXMsJXMsJXMsJXAsJWx4IiwKLQkgICAgICAgdHlwZS0+bmFtZSwgZGVzY3JpcHRpb24sIGNhbGxvdXRfaW5mbywgZGVzdF9rZXlyaW5nLCBmbGFncyk7CisJa2VudGVyKCIlcywlcywlcywlcCwlcCwlbHgiLAorCSAgICAgICB0eXBlLT5uYW1lLCBkZXNjcmlwdGlvbiwgY2FsbG91dF9pbmZvLCBhdXgsCisJICAgICAgIGRlc3Rfa2V5cmluZywgZmxhZ3MpOwogCiAJLyogc2VhcmNoIGFsbCB0aGUgcHJvY2VzcyBrZXlyaW5ncyBmb3IgYSBrZXkgKi8KIAlrZXlfcmVmID0gc2VhcmNoX3Byb2Nlc3Nfa2V5cmluZ3ModHlwZSwgZGVzY3JpcHRpb24sIHR5cGUtPm1hdGNoLApAQCAtNDMzLDggKzQzOCw4IEBACiAJCQkvKiBhc2sgdXNlcnNwYWNlIChyZXR1cm5zIE5VTEwgaWYgaXQgd2FpdGVkIG9uIGEga2V5CiAJCQkgKiBiZWluZyBjb25zdHJ1Y3RlZCkgKi8KIAkJCWtleSA9IHJlcXVlc3Rfa2V5X2NvbnN0cnVjdGlvbih0eXBlLCBkZXNjcmlwdGlvbiwKLQkJCQkJCSAgICAgICB1c2VyLCBjYWxsb3V0X2luZm8sCi0JCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCQkJICAgICAgIGNhbGxvdXRfaW5mbywgYXV4LAorCQkJCQkJICAgICAgIHVzZXIsIGZsYWdzKTsKIAkJCWlmIChrZXkpCiAJCQkJYnJlYWs7CiAKQEAgLTQ5MSw4ICs0OTYsMjcgQEAKIAkJCWNvbnN0IGNoYXIgKmNhbGxvdXRfaW5mbykKIHsKIAlyZXR1cm4gcmVxdWVzdF9rZXlfYW5kX2xpbmsodHlwZSwgZGVzY3JpcHRpb24sIGNhbGxvdXRfaW5mbywgTlVMTCwKLQkJCQkgICAgS0VZX0FMTE9DX0lOX1FVT1RBKTsKKwkJCQkgICAgTlVMTCwgS0VZX0FMTE9DX0lOX1FVT1RBKTsKIAogfSAvKiBlbmQgcmVxdWVzdF9rZXkoKSAqLwogCiBFWFBPUlRfU1lNQk9MKHJlcXVlc3Rfa2V5KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHJlcXVlc3QgYSBrZXkgd2l0aCBhdXhpbGlhcnkgZGF0YSBmb3IgdGhlIHVwY2FsbGVyCisgKiAtIHNlYXJjaCB0aGUgcHJvY2VzcydzIGtleXJpbmdzCisgKiAtIGNoZWNrIHRoZSBsaXN0IG9mIGtleXMgYmVpbmcgY3JlYXRlZCBvciB1cGRhdGVkCisgKiAtIGNhbGwgb3V0IHRvIHVzZXJzcGFjZSBmb3IgYSBrZXkgaWYgc3VwcGxlbWVudGFyeSBpbmZvIHdhcyBwcm92aWRlZAorICovCitzdHJ1Y3Qga2V5ICpyZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEoc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkJICAgICBjb25zdCBjaGFyICpjYWxsb3V0X2luZm8sCisJCQkJICAgICB2b2lkICphdXgpCit7CisJcmV0dXJuIHJlcXVlc3Rfa2V5X2FuZF9saW5rKHR5cGUsIGRlc2NyaXB0aW9uLCBjYWxsb3V0X2luZm8sIGF1eCwKKwkJCQkgICAgTlVMTCwgS0VZX0FMTE9DX0lOX1FVT1RBKTsKKworfSAvKiBlbmQgcmVxdWVzdF9rZXlfd2l0aF9hdXhkYXRhKCkgKi8KKworRVhQT1JUX1NZTUJPTChyZXF1ZXN0X2tleV93aXRoX2F1eGRhdGEpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvcm9vdF9wbHVnLmMgYi9zZWN1cml0eS9yb290X3BsdWcuYwppbmRleCAwNzY1MWRlLi4zOGRkNGYzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9yb290X3BsdWcuYworKysgYi9zZWN1cml0eS9yb290X3BsdWcuYwpAQCAtMjIsNyArMjIsNiBAQAogICoJTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjbHZsLmMgYi9zZWN1cml0eS9zZWNsdmwuYwppbmRleCA0NDFiZWFmMS4uYzI2ZGQ3ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjbHZsLmMKKysrIGIvc2VjdXJpdHkvc2VjbHZsLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA1MWVmNTA5Li5lZTRlMDcwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAyODgzMmU2Li4yNGNhYWVlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC02OSw2ICs2OCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTI2NDMsNiArMjY0MywxMSBAQAogCXJldHVybiB0YXNrX2hhc19wZXJtKGN1cnJlbnQsIHAsIFBST0NFU1NfX0dFVFNFU1NJT04pOwogfQogCitzdGF0aWMgdm9pZCBzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgKnNlY2lkKQoreworCXNlbGludXhfZ2V0X3Rhc2tfc2lkKHAsIHNlY2lkKTsKK30KKwogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0Z3JvdXBzKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvKQogewogCS8qIFNlZSB0aGUgY29tbWVudCBmb3Igc2V0dWlkIGFib3ZlLiAqLwpAQCAtMjY2NSw2ICsyNjcwLDExIEBACiAJcmV0dXJuIHRhc2tfaGFzX3Blcm0oY3VycmVudCwgcCwgUFJPQ0VTU19fU0VUU0NIRUQpOwogfQogCitzdGF0aWMgaW50IHNlbGludXhfdGFza19nZXRpb3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiB0YXNrX2hhc19wZXJtKGN1cnJlbnQsIHAsIFBST0NFU1NfX0dFVFNDSEVEKTsKK30KKwogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7CiAJc3RydWN0IHJsaW1pdCAqb2xkX3JsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyByZXNvdXJjZTsKQEAgLTI2OTksMTIgKzI3MDksMTQgQEAKIAlyZXR1cm4gdGFza19oYXNfcGVybShjdXJyZW50LCBwLCBQUk9DRVNTX19TRVRTQ0hFRCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX2tpbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgaW50IHNpZykKK3N0YXRpYyBpbnQgc2VsaW51eF90YXNrX2tpbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywKKwkJCQlpbnQgc2lnLCB1MzIgc2VjaWQpCiB7CiAJdTMyIHBlcm07CiAJaW50IHJjOworCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19raWxsKHAsIGluZm8sIHNpZyk7CisJcmMgPSBzZWNvbmRhcnlfb3BzLT50YXNrX2tpbGwocCwgaW5mbywgc2lnLCBzZWNpZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTI3MTUsOCArMjcyNywxMiBAQAogCQlwZXJtID0gUFJPQ0VTU19fU0lHTlVMTDsgLyogbnVsbCBzaWduYWw7IGV4aXN0ZW5jZSB0ZXN0ICovCiAJZWxzZQogCQlwZXJtID0gc2lnbmFsX3RvX2F2KHNpZyk7Ci0KLQlyZXR1cm4gdGFza19oYXNfcGVybShjdXJyZW50LCBwLCBwZXJtKTsKKwl0c2VjID0gcC0+c2VjdXJpdHk7CisJaWYgKHNlY2lkKQorCQlyYyA9IGF2Y19oYXNfcGVybShzZWNpZCwgdHNlYy0+c2lkLCBTRUNDTEFTU19QUk9DRVNTLCBwZXJtLCBOVUxMKTsKKwllbHNlCisJCXJjID0gdGFza19oYXNfcGVybShjdXJyZW50LCBwLCBwZXJtKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3ByY3RsKGludCBvcHRpb24sCkBAIC0zNDIwLDcgKzM0MzYsMTMgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICoqc2VjZGF0YSwgdTMyICpzZWNsZW4pCiB7CiAJaW50IGVyciA9IDA7Ci0JdTMyIHBlZXJfc2lkID0gc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9kZ3JhbShza2IpOworCXUzMiBwZWVyX3NpZDsKKworCWlmIChza2ItPnNrLT5za19mYW1pbHkgPT0gUEZfVU5JWCkKKwkJc2VsaW51eF9nZXRfaW5vZGVfc2lkKFNPQ0tfSU5PREUoc2tiLT5zay0+c2tfc29ja2V0KSwKKwkJCQkgICAgICAmcGVlcl9zaWQpOworCWVsc2UKKwkJcGVlcl9zaWQgPSBzZWxpbnV4X3NvY2tldF9nZXRwZWVyX2RncmFtKHNrYik7CiAKIAlpZiAocGVlcl9zaWQgPT0gU0VDU0lEX05VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzQzMiw4ICszNDU0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0KIHN0YXRpYyBpbnQgc2VsaW51eF9za19hbGxvY19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5KQogewogCXJldHVybiBza19hbGxvY19zZWN1cml0eShzaywgZmFtaWx5LCBwcmlvcml0eSk7CkBAIC0zNjQxLDMyICszNjYxLDMyIEBACiAKIHN0YXRpYyBpbnQgc2VsaW51eF9uZXRsaW5rX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYzsKLQlzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkOwogCWludCBlcnI7CiAKIAllcnIgPSBzZWNvbmRhcnlfb3BzLT5uZXRsaW5rX3NlbmQoc2ssIHNrYik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXRzZWMgPSBjdXJyZW50LT5zZWN1cml0eTsKLQotCWF2ZC5hbGxvd2VkID0gMDsKLQlhdmNfaGFzX3Blcm1fbm9hdWRpdCh0c2VjLT5zaWQsIHRzZWMtPnNpZCwKLQkJCQlTRUNDTEFTU19DQVBBQklMSVRZLCB+MCwgJmF2ZCk7Ci0JY2FwX21hc2soTkVUTElOS19DQihza2IpLmVmZl9jYXAsIGF2ZC5hbGxvd2VkKTsKLQogCWlmIChwb2xpY3lkYl9sb2FkZWRfdmVyc2lvbiA+PSBQT0xJQ1lEQl9WRVJTSU9OX05MQ0xBU1MpCiAJCWVyciA9IHNlbGludXhfbmxtc2dfcGVybShzaywgc2tiKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9uZXRsaW5rX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgc2VsaW51eF9uZXRsaW5rX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNhcGFiaWxpdHkpCiB7Ci0JaWYgKCFjYXBfcmFpc2VkKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQlyZXR1cm4gMDsKKwlpbnQgZXJyOworCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKworCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfcmVjdihza2IsIGNhcGFiaWxpdHkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgQ0FQKTsKKwlhZC51LmNhcCA9IGNhcGFiaWxpdHk7CisKKwlyZXR1cm4gYXZjX2hhc19wZXJtKE5FVExJTktfQ0Ioc2tiKS5zaWQsIE5FVExJTktfQ0Ioc2tiKS5zaWQsCisJICAgICAgICAgICAgICAgICAgICBTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBfVE9fTUFTSyhjYXBhYmlsaXR5KSwgJmFkKTsKIH0KIAogc3RhdGljIGludCBpcGNfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLApAQCAtNDQyOSw5ICs0NDQ5LDExIEBACiAJLnRhc2tfc2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX3NldHBnaWQsCiAJLnRhc2tfZ2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX2dldHBnaWQsCiAJLnRhc2tfZ2V0c2lkID0JCSAgICAgICAgc2VsaW51eF90YXNrX2dldHNpZCwKKwkudGFza19nZXRzZWNpZCA9CQlzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQsCiAJLnRhc2tfc2V0Z3JvdXBzID0JCXNlbGludXhfdGFza19zZXRncm91cHMsCiAJLnRhc2tfc2V0bmljZSA9CQkJc2VsaW51eF90YXNrX3NldG5pY2UsCiAJLnRhc2tfc2V0aW9wcmlvID0JCXNlbGludXhfdGFza19zZXRpb3ByaW8sCisJLnRhc2tfZ2V0aW9wcmlvID0JCXNlbGludXhfdGFza19nZXRpb3ByaW8sCiAJLnRhc2tfc2V0cmxpbWl0ID0JCXNlbGludXhfdGFza19zZXRybGltaXQsCiAJLnRhc2tfc2V0c2NoZWR1bGVyID0JCXNlbGludXhfdGFza19zZXRzY2hlZHVsZXIsCiAJLnRhc2tfZ2V0c2NoZWR1bGVyID0JCXNlbGludXhfdGFza19nZXRzY2hlZHVsZXIsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCA3MDI5YmJjLi4wMDUzNGMzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTksNyArOSw2IEBACiAgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggZTk1NDhiYy4uZDJlODBlNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMTg0NSwxNSArMTg0NSwyMCBAQAogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJc3dpdGNoIChmaWVsZCkgewotCWNhc2UgQVVESVRfU0VfVVNFUjoKLQljYXNlIEFVRElUX1NFX1JPTEU6Ci0JY2FzZSBBVURJVF9TRV9UWVBFOgorCWNhc2UgQVVESVRfU1VCSl9VU0VSOgorCWNhc2UgQVVESVRfU1VCSl9ST0xFOgorCWNhc2UgQVVESVRfU1VCSl9UWVBFOgorCWNhc2UgQVVESVRfT0JKX1VTRVI6CisJY2FzZSBBVURJVF9PQkpfUk9MRToKKwljYXNlIEFVRElUX09CSl9UWVBFOgogCQkvKiBvbmx5ICdlcXVhbHMnIGFuZCAnbm90IGVxdWFscycgZml0IHVzZXIsIHJvbGUsIGFuZCB0eXBlICovCiAJCWlmIChvcCAhPSBBVURJVF9FUVVBTCAmJiBvcCAhPSBBVURJVF9OT1RfRVFVQUwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7Ci0JY2FzZSBBVURJVF9TRV9TRU46Ci0JY2FzZSBBVURJVF9TRV9DTFI6CisJY2FzZSBBVURJVF9TVUJKX1NFTjoKKwljYXNlIEFVRElUX1NVQkpfQ0xSOgorCWNhc2UgQVVESVRfT0JKX0xFVl9MT1c6CisJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6CiAJCS8qIHdlIGRvIG5vdCBhbGxvdyBhIHJhbmdlLCBpbmRpY2F0ZWQgYnkgdGhlIHByZXNlbnNlIG9mICctJyAqLwogCQlpZiAoc3RyY2hyKHJ1bGVzdHIsICctJykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4NzQsMjkgKzE4NzksMzQgQEAKIAl0bXBydWxlLT5hdV9zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKIAogCXN3aXRjaCAoZmllbGQpIHsKLQljYXNlIEFVRElUX1NFX1VTRVI6CisJY2FzZSBBVURJVF9TVUJKX1VTRVI6CisJY2FzZSBBVURJVF9PQkpfVVNFUjoKIAkJdXNlcmRhdHVtID0gaGFzaHRhYl9zZWFyY2gocG9saWN5ZGIucF91c2Vycy50YWJsZSwgcnVsZXN0cik7CiAJCWlmICghdXNlcmRhdHVtKQogCQkJcmMgPSAtRUlOVkFMOwogCQllbHNlCiAJCQl0bXBydWxlLT5hdV9jdHh0LnVzZXIgPSB1c2VyZGF0dW0tPnZhbHVlOwogCQlicmVhazsKLQljYXNlIEFVRElUX1NFX1JPTEU6CisJY2FzZSBBVURJVF9TVUJKX1JPTEU6CisJY2FzZSBBVURJVF9PQkpfUk9MRToKIAkJcm9sZWRhdHVtID0gaGFzaHRhYl9zZWFyY2gocG9saWN5ZGIucF9yb2xlcy50YWJsZSwgcnVsZXN0cik7CiAJCWlmICghcm9sZWRhdHVtKQogCQkJcmMgPSAtRUlOVkFMOwogCQllbHNlCiAJCQl0bXBydWxlLT5hdV9jdHh0LnJvbGUgPSByb2xlZGF0dW0tPnZhbHVlOwogCQlicmVhazsKLQljYXNlIEFVRElUX1NFX1RZUEU6CisJY2FzZSBBVURJVF9TVUJKX1RZUEU6CisJY2FzZSBBVURJVF9PQkpfVFlQRToKIAkJdHlwZWRhdHVtID0gaGFzaHRhYl9zZWFyY2gocG9saWN5ZGIucF90eXBlcy50YWJsZSwgcnVsZXN0cik7CiAJCWlmICghdHlwZWRhdHVtKQogCQkJcmMgPSAtRUlOVkFMOwogCQllbHNlCiAJCQl0bXBydWxlLT5hdV9jdHh0LnR5cGUgPSB0eXBlZGF0dW0tPnZhbHVlOwogCQlicmVhazsKLQljYXNlIEFVRElUX1NFX1NFTjoKLQljYXNlIEFVRElUX1NFX0NMUjoKKwljYXNlIEFVRElUX1NVQkpfU0VOOgorCWNhc2UgQVVESVRfU1VCSl9DTFI6CisJY2FzZSBBVURJVF9PQkpfTEVWX0xPVzoKKwljYXNlIEFVRElUX09CSl9MRVZfSElHSDoKIAkJcmMgPSBtbHNfZnJvbV9zdHJpbmcocnVsZXN0ciwgJnRtcHJ1bGUtPmF1X2N0eHQsIEdGUF9BVE9NSUMpOwogCQlicmVhazsKIAl9CkBAIC0xOTQ4LDcgKzE5NTgsOCBAQAogCS8qIGEgZmllbGQvb3AgcGFpciB0aGF0IGlzIG5vdCBjYXVnaHQgaGVyZSB3aWxsIHNpbXBseSBmYWxsIHRocm91Z2gKIAkgICB3aXRob3V0IGEgbWF0Y2ggKi8KIAlzd2l0Y2ggKGZpZWxkKSB7Ci0JY2FzZSBBVURJVF9TRV9VU0VSOgorCWNhc2UgQVVESVRfU1VCSl9VU0VSOgorCWNhc2UgQVVESVRfT0JKX1VTRVI6CiAJCXN3aXRjaCAob3ApIHsKIAkJY2FzZSBBVURJVF9FUVVBTDoKIAkJCW1hdGNoID0gKGN0eHQtPnVzZXIgPT0gcnVsZS0+YXVfY3R4dC51c2VyKTsKQEAgLTE5NTgsNyArMTk2OSw4IEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKLQljYXNlIEFVRElUX1NFX1JPTEU6CisJY2FzZSBBVURJVF9TVUJKX1JPTEU6CisJY2FzZSBBVURJVF9PQkpfUk9MRToKIAkJc3dpdGNoIChvcCkgewogCQljYXNlIEFVRElUX0VRVUFMOgogCQkJbWF0Y2ggPSAoY3R4dC0+cm9sZSA9PSBydWxlLT5hdV9jdHh0LnJvbGUpOwpAQCAtMTk2OCw3ICsxOTgwLDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgQVVESVRfU0VfVFlQRToKKwljYXNlIEFVRElUX1NVQkpfVFlQRToKKwljYXNlIEFVRElUX09CSl9UWVBFOgogCQlzd2l0Y2ggKG9wKSB7CiAJCWNhc2UgQVVESVRfRVFVQUw6CiAJCQltYXRjaCA9IChjdHh0LT50eXBlID09IHJ1bGUtPmF1X2N0eHQudHlwZSk7CkBAIC0xOTc4LDkgKzE5OTEsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgQVVESVRfU0VfU0VOOgotCWNhc2UgQVVESVRfU0VfQ0xSOgotCQlsZXZlbCA9IChmaWVsZCA9PSBBVURJVF9TRV9TRU4gPworCWNhc2UgQVVESVRfU1VCSl9TRU46CisJY2FzZSBBVURJVF9TVUJKX0NMUjoKKwljYXNlIEFVRElUX09CSl9MRVZfTE9XOgorCWNhc2UgQVVESVRfT0JKX0xFVl9ISUdIOgorCQlsZXZlbCA9ICgoZmllbGQgPT0gQVVESVRfU1VCSl9TRU4gfHwKKwkJICAgICAgICAgIGZpZWxkID09IEFVRElUX09CSl9MRVZfTE9XKSA/CiAJCSAgICAgICAgICZjdHh0LT5yYW5nZS5sZXZlbFswXSA6ICZjdHh0LT5yYW5nZS5sZXZlbFsxXSk7CiAJCXN3aXRjaCAob3ApIHsKIAkJY2FzZSBBVURJVF9FUVVBTDoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKaW5kZXggNjYzM2ZiMC4uNmM5ODVjZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKQEAgLTI2LDcgKzI2LDYgQEAKICAqICAgMi4gRW11bGF0aW5nIGEgcmVhc29uYWJsZSBTT19QRUVSU0VDIGFjcm9zcyBtYWNoaW5lcwogICogICAzLiBUZXN0aW5nIGFkZGl0aW9uIG9mIHNrX3BvbGljeSdzIHdpdGggc2VjdXJpdHkgY29udGV4dCB2aWEgc2V0c29ja29wdAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvc291bmQvTWFrZWZpbGUgYi9zb3VuZC9NYWtlZmlsZQppbmRleCBhNjgyZWEzLi4xZjYwNzk3IDEwMDY0NAotLS0gYS9zb3VuZC9NYWtlZmlsZQorKysgYi9zb3VuZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDggQEAKIG9iai0kKENPTkZJR19TT1VORCkgKz0gc291bmRjb3JlLm8KIG9iai0kKENPTkZJR19TT1VORF9QUklNRSkgKz0gb3NzLwogb2JqLSQoQ09ORklHX0RNQVNPVU5EKSArPSBvc3MvCi1vYmotJChDT05GSUdfU05EKSArPSBjb3JlLyBpMmMvIGRyaXZlcnMvIGlzYS8gcGNpLyBwcGMvIGFybS8gc3ludGgvIHVzYi8gc3BhcmMvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBhb2EvCitvYmotJChDT05GSUdfU05EKSArPSBjb3JlLyBpMmMvIGRyaXZlcnMvIGlzYS8gcGNpLyBwcGMvIGFybS8gc3ludGgvIHVzYi8gc3BhcmMvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLworb2JqLSQoQ09ORklHX1NORF9BT0EpICs9IGFvYS8KIAogaWZlcSAoJChDT05GSUdfU05EKSx5KQogICBvYmoteSArPSBsYXN0Lm8KZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9LY29uZmlnIGIvc291bmQvYW9hL0tjb25maWcKaW5kZXggYTg1MTk0Zi4uMmY0MzM0ZCAxMDA2NDQKLS0tIGEvc291bmQvYW9hL0tjb25maWcKKysrIGIvc291bmQvYW9hL0tjb25maWcKQEAgLTMsNyArMyw4IEBACiAKIGNvbmZpZyBTTkRfQU9BCiAJdHJpc3RhdGUgIkFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyIgotCWRlcGVuZHMgb24gU09VTkQgJiYgU05EX1BDTQorCWRlcGVuZHMgb24gU05ECisJc2VsZWN0IFNORF9QQ00KIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmV3IGRyaXZlciBmb3IgdGhlIHZhcmlvdXMKIAlBcHBsZSBPbmJvYXJkIEF1ZGlvIGNvbXBvbmVudHMuCmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29yZS9zbmQtYW9hLWdwaW8tZmVhdHVyZS5jIGIvc291bmQvYW9hL2NvcmUvc25kLWFvYS1ncGlvLWZlYXR1cmUuYwppbmRleCAyYzZlYjc3Li43YWUwYzBiIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29yZS9zbmQtYW9hLWdwaW8tZmVhdHVyZS5jCisrKyBiL3NvdW5kL2FvYS9jb3JlL3NuZC1hb2EtZ3Bpby1mZWF0dXJlLmMKQEAgLTExMiwxMiArMTEyLDcgQEAKIAogc3RhdGljIHZvaWQgZ2V0X2lycShzdHJ1Y3QgZGV2aWNlX25vZGUgKiBucCwgaW50ICppcnFwdHIpCiB7Ci0JKmlycXB0ciA9IC0xOwotCWlmICghbnApCi0JCXJldHVybjsKLQlpZiAobnAtPm5faW50cnMgIT0gMSkKLQkJcmV0dXJuOwotCSppcnFwdHIgPSBucC0+aW50cnNbMF0ubGluZTsKKwkqaXJxcHRyID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogfQogCiAvKiAweDQgaXMgb3V0ZW5hYmxlLCAweDEgaXMgb3V0LCB0aHVzIDQgb3IgNSAqLwpAQCAtMjA3LDYgKzIwMiwxNyBAQAogCW11dGV4X3VubG9jaygmbm90aWYtPm11dGV4KTsKIH0KIAorc3RhdGljIHZvaWQgZ3Bpb19lbmFibGVfZHVhbF9lZGdlKGludCBncGlvKQoreworCWludCB2OworCisJaWYgKGdwaW8gPT0gLTEpCisJCXJldHVybjsKKwl2ID0gcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfUkVBRF9HUElPLCBOVUxMLCBncGlvLCAwKTsKKwl2IHw9IDB4ODA7IC8qIGVuYWJsZSBkdWFsIGVkZ2UgKi8KKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9XUklURV9HUElPLCBOVUxMLCBncGlvLCB2KTsKK30KKwogc3RhdGljIHZvaWQgZnRyX2dwaW9faW5pdChzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCkKIHsKIAlnZXRfZ3BpbygiaGVhZHBob25lLW11dGUiLCBOVUxMLApAQCAtMjM0LDYgKzI0MCwxMCBAQAogCQkJCSAgICAgICZsaW5laW5fZGV0ZWN0X2dwaW8sCiAJCQkJICAgICAgJmxpbmVpbl9kZXRlY3RfZ3Bpb19hY3RpdmVzdGF0ZSk7CiAKKwlncGlvX2VuYWJsZV9kdWFsX2VkZ2UoaGVhZHBob25lX2RldGVjdF9ncGlvKTsKKwlncGlvX2VuYWJsZV9kdWFsX2VkZ2UobGluZW91dF9kZXRlY3RfZ3Bpbyk7CisJZ3Bpb19lbmFibGVfZHVhbF9lZGdlKGxpbmVpbl9kZXRlY3RfZ3Bpbyk7CisKIAlnZXRfaXJxKGhlYWRwaG9uZV9kZXRlY3Rfbm9kZSwgJmhlYWRwaG9uZV9kZXRlY3RfaXJxKTsKIAlnZXRfaXJxKGxpbmVvdXRfZGV0ZWN0X25vZGUsICZsaW5lb3V0X2RldGVjdF9pcnEpOwogCWdldF9pcnEobGluZWluX2RldGVjdF9ub2RlLCAmbGluZWluX2RldGVjdF9pcnEpOwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2ZhYnJpY3Mvc25kLWFvYS1mYWJyaWMtbGF5b3V0LmMgYi9zb3VuZC9hb2EvZmFicmljcy9zbmQtYW9hLWZhYnJpYy1sYXlvdXQuYwppbmRleCAwNGE3MjM4Li5jYmM4YTNiIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvZmFicmljcy9zbmQtYW9hLWZhYnJpYy1sYXlvdXQuYworKysgYi9zb3VuZC9hb2EvZmFicmljcy9zbmQtYW9hLWZhYnJpYy1sYXlvdXQuYwpAQCAtOTQsNiArOTQsNyBAQAogTU9EVUxFX0FMSUFTKCJzb3VuZC1sYXlvdXQtODQiKTsKIE1PRFVMRV9BTElBUygic291bmQtbGF5b3V0LTg2Iik7CiBNT0RVTEVfQUxJQVMoInNvdW5kLWxheW91dC05MiIpOworTU9EVUxFX0FMSUFTKCJzb3VuZC1sYXlvdXQtOTYiKTsKIAogLyogb255eCB3aXRoIGFsbCBidXQgbWljcm9waG9uZSBjb25uZWN0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgY29kZWNfY29ubmVjdGlvbiBvbnl4X2Nvbm5lY3Rpb25zX25vbWljW10gPSB7CkBAIC0zODEsNiArMzgyLDEzIEBACiAJCS5jb25uZWN0aW9ucyA9IHRvb25pZV9jb25uZWN0aW9ucywKIAkgIH0sCiAJfSwKKwl7CisJICAubGF5b3V0X2lkID0gOTYsCisJICAuY29kZWNzWzBdID0geworCSAgCS5uYW1lID0gIm9ueXgiLAorCSAgCS5jb25uZWN0aW9ucyA9IG9ueXhfY29ubmVjdGlvbnNfbm9oZWFkcGhvbmVzLAorCSAgfSwKKwl9LAogCS8qIHVua25vd24sIHVudGVzdGVkLCBidXQgdGhpcyBjb21lcyBmcm9tIEFwcGxlICovCiAJeyAubGF5b3V0X2lkID0gNDEsCiAJICAuY29kZWNzWzBdID0gewpAQCAtNDc5LDEyICs0ODcsNiBAQAogCQkuY29ubmVjdGlvbnMgPSBvbnl4X2Nvbm5lY3Rpb25zX25vaGVhZHBob25lcywKIAkgIH0sCiAJfSwKLQl7IC5sYXlvdXRfaWQgPSA5NiwKLQkgIC5jb2RlY3NbMF0gPSB7Ci0JCS5uYW1lID0gIm9ueXgiLAotCQkuY29ubmVjdGlvbnMgPSBvbnl4X2Nvbm5lY3Rpb25zX25vaGVhZHBob25lcywKLQkgIH0sCi0JfSwKIAl7IC5sYXlvdXRfaWQgPSA5OCwKIAkgIC5jb2RlY3NbMF0gPSB7CiAJCS5uYW1lID0gInRvb25pZSIsCmRpZmYgLS1naXQgYS9zb3VuZC9hb2Evc291bmRidXMvS2NvbmZpZyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9LY29uZmlnCmluZGV4IGQ1MzJkMjcuLjczNjhiN2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9LY29uZmlnCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIFNORF9BT0FfU09VTkRCVVMKIAl0cmlzdGF0ZSAiQXBwbGUgU291bmRidXMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EICYmIFNORF9QQ00gJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTT1VORAorCXNlbGVjdCBTTkRfUENNCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGdlbmVyaWMgZHJpdmVyIGZvciB0aGUgc291bmRidXMKIAlzdXBwb3J0IG9uIEFwcGxlIG1hY2hpbmVzLgpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9pMnNidXMtY29yZS5jIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9pMnNidXMtY29yZS5jCmluZGV4IGYyNjhkYWMuLjAxYzA3MjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvaTJzYnVzLWNvcmUuYworKysgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2kyc2J1cy1jb3JlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCWlmIChzdHJuY21wKG5wLT5uYW1lLCAiaTJzLSIsIDQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChucC0+bl9pbnRycyAhPSAzKQorCWlmIChtYWNpb19pcnFfY291bnQobWFjaW8pICE9IDMpCiAJCXJldHVybiAwOwogCiAJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyc2J1c19kZXYpLCBHRlBfS0VSTkVMKTsKQEAgLTE4Myw5ICsxODMsMTAgQEAKIAkJc25wcmludGYoZGV2LT5ybmFtZXNbaV0sIHNpemVvZihkZXYtPnJuYW1lc1tpXSksIHJuYW1lc1tpXSwgbnAtPm5hbWUpOwogCX0KIAlmb3IgKGk9MDtpPDM7aSsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShucC0+aW50cnNbaV0ubGluZSwgaW50c1tpXSwgMCwgZGV2LT5ybmFtZXNbaV0sIGRldikpCisJCWlmIChyZXF1ZXN0X2lycShtYWNpb19pcnEobWFjaW8sIGkpLCBpbnRzW2ldLCAwLAorCQkJCWRldi0+cm5hbWVzW2ldLCBkZXYpKQogCQkJZ290byBlcnI7Ci0JCWRldi0+aW50ZXJydXB0c1tpXSA9IG5wLT5pbnRyc1tpXS5saW5lOworCQlkZXYtPmludGVycnVwdHNbaV0gPSBtYWNpb19pcnEobWFjaW8sIGkpOwogCX0KIAogCWZvciAoaT0wO2k8MztpKyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IDVmMjJkNzAuLjg0MzVmZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShhYWNpLT5kZXYtPmlycVswXSwgYWFjaV9pcnEsIFNBX1NISVJRfFNBX0lOVEVSUlVQVCwKKwlyZXQgPSByZXF1ZXN0X2lycShhYWNpLT5kZXYtPmlycVswXSwgYWFjaV9pcnEsIElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQsCiAJCQkgIERSSVZFUl9OQU1FLCBhYWNpKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTc3OSw4ICs3NzksOSBAQAogCXN0cmxjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGNhcmQtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQVJNIEFDJzk3IEludGVyZmFjZSIsIHNpemVvZihjYXJkLT5zaG9ydG5hbWUpKTsKIAlzbnByaW50ZihjYXJkLT5sb25nbmFtZSwgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSwKLQkJICIlcyBhdCAweCUwOGx4LCBpcnEgJWQiLAotCQkgY2FyZC0+c2hvcnRuYW1lLCBkZXYtPnJlcy5zdGFydCwgZGV2LT5pcnFbMF0pOworCQkgIiVzIGF0IDB4JTAxNmxseCwgaXJxICVkIiwKKwkJIGNhcmQtPnNob3J0bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPnJlcy5zdGFydCwKKwkJIGRldi0+aXJxWzBdKTsKIAogCWFhY2kgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJbXV0ZXhfaW5pdCgmYWFjaS0+YWM5N19zZW0pOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwppbmRleCBiODhmYjBjLi5jNzlhOWFmIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYworKysgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwpAQCAtNTksNyArNTksNiBAQAogKiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL0tjb25maWcgYi9zb3VuZC9jb3JlL0tjb25maWcKaW5kZXggNDI2MmExYy4uYjI5Mjc1MiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKyBiL3NvdW5kL2NvcmUvS2NvbmZpZwpAQCAtMTIyLDggKzEyMiw4IEBACiAJICBJZiBpbiBkb3VidCwgc2F5IFkuCiAKIGNvbmZpZyBTTkRfRFlOQU1JQ19NSU5PUlMKLQlib29sICJEeW5hbWljIGRldmljZSBmaWxlIG1pbm9yIG51bWJlcnMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTTkQgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiRHluYW1pYyBkZXZpY2UgZmlsZSBtaW5vciBudW1iZXJzIgorCWRlcGVuZHMgb24gU05ECiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtaW5vciBudW1iZXJzIG9mIEFMU0EgZGV2aWNlIGZpbGVzIGluCiAJICAvZGV2L3NuZC8gYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luZm8uYyBiL3NvdW5kL2NvcmUvaW5mby5jCmluZGV4IDEwYzE3NzIuLjM0MDMzMmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5mby5jCisrKyBiL3NvdW5kL2NvcmUvaW5mby5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jCmluZGV4IDNmYzZmOTcuLmJjMGJkMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuYworKysgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfZGV2aWNlLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfZGV2aWNlLmMKaW5kZXggZDgxMmRjOC4uNDI2MGRlOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX2RldmljZS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kZXZpY2UuYwpAQCAtMzgwLDYgKzM4MCwxMiBAQAogCS8qIHNldCB1cCBkcml2ZXIgZW50cnkgKi8KIAlzdHJsY3B5KG9wcy0+aWQsIGlkLCBzaXplb2Yob3BzLT5pZCkpOwogCW11dGV4X2luaXQoJm9wcy0+cmVnX211dGV4KTsKKwkvKgorCSAqIFRoZSAtPnJlZ19tdXRleCBsb2NraW5nIHJ1bGVzIGFyZSBwZXItZHJpdmVyLCBzbyB3ZSBjcmVhdGUKKwkgKiBzZXBhcmF0ZSBwZXItZHJpdmVyIGxvY2sgY2xhc3NlczoKKwkgKi8KKwlsb2NrZGVwX3NldF9jbGFzcygmb3BzLT5yZWdfbXV0ZXgsIChzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKilpZCk7CisKIAlvcHMtPmRyaXZlciA9IERSSVZFUl9FTVBUWTsKIAlJTklUX0xJU1RfSEVBRCgmb3BzLT5kZXZfbGlzdCk7CiAJLyogbG9jayB0aGlzIGluc3RhbmNlICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCmluZGV4IDMzNDU3OWE5Li44YzY0YjU4IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuYwpAQCAtMzIyLDEwICszMjIsOCBAQAogCW11dGV4X2xvY2soJmNsaWVudC0+cG9ydHNfbXV0ZXgpOwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5wb3J0c19sb2NrLCBmbGFncyk7CiAJaWYgKCEgbGlzdF9lbXB0eSgmY2xpZW50LT5wb3J0c19saXN0X2hlYWQpKSB7Ci0JCV9fbGlzdF9hZGQoJmRlbGV0ZWRfbGlzdCwKLQkJCSAgIGNsaWVudC0+cG9ydHNfbGlzdF9oZWFkLnByZXYsCi0JCQkgICBjbGllbnQtPnBvcnRzX2xpc3RfaGVhZC5uZXh0KTsKLQkJSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+cG9ydHNfbGlzdF9oZWFkKTsKKwkJbGlzdF9hZGQoJmRlbGV0ZWRfbGlzdCwgJmNsaWVudC0+cG9ydHNfbGlzdF9oZWFkKTsKKwkJbGlzdF9kZWxfaW5pdCgmY2xpZW50LT5wb3J0c19saXN0X2hlYWQpOwogCX0gZWxzZSB7CiAJCUlOSVRfTElTVF9IRUFEKCZkZWxldGVkX2xpc3QpOwogCX0KQEAgLTUxNiw3ICs1MTQsNyBAQAogCWF0b21pY19zZXQoJnN1YnMtPnJlZl9jb3VudCwgMik7CiAKIAlkb3duX3dyaXRlKCZzcmMtPmxpc3RfbXV0ZXgpOwotCWRvd25fd3JpdGUoJmRlc3QtPmxpc3RfbXV0ZXgpOworCWRvd25fd3JpdGVfbmVzdGVkKCZkZXN0LT5saXN0X211dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlleGNsdXNpdmUgPSBpbmZvLT5mbGFncyAmIFNORFJWX1NFUV9QT1JUX1NVQlNfRVhDTFVTSVZFID8gMSA6IDA7CiAJZXJyID0gLUVCVVNZOwpAQCAtNTg5LDcgKzU4Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRvd25fd3JpdGUoJnNyYy0+bGlzdF9tdXRleCk7Ci0JZG93bl93cml0ZSgmZGVzdC0+bGlzdF9tdXRleCk7CisJZG93bl93cml0ZV9uZXN0ZWQoJmRlc3QtPmxpc3RfbXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCS8qIGxvb2sgZm9yIHRoZSBjb25uZWN0aW9uICovCiAJbGlzdF9mb3JfZWFjaChwLCAmc3JjLT5saXN0X2hlYWQpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2didWYuYyBiL3NvdW5kL2NvcmUvc2didWYuYwppbmRleCA3NDc0NWRhLi42ZTRkNGFiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NnYnVmLmMKKysrIGIvc291bmQvY29yZS9zZ2J1Zi5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NvdW5kLmMgYi9zb3VuZC9jb3JlL3NvdW5kLmMKaW5kZXggY2Q4NjI3Mi4uMjY0ZjJlZiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zb3VuZC5jCisrKyBiL3NvdW5kL2NvcmUvc291bmQuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgU05EUlZfT1NfTUlOT1JTIDI1NgpAQCAtNDIsNyArNDEsNiBAQAogRVhQT1JUX1NZTUJPTChzbmRfbWFqb3IpOwogCiBzdGF0aWMgaW50IGNhcmRzX2xpbWl0ID0gMTsKLXN0YXRpYyBpbnQgZGV2aWNlX21vZGUgPSBTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR087CiAKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlIGRyaXZlciBmb3Igc291bmRjYXJkcy4iKTsKQEAgLTUxLDEwICs0OSw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKG1ham9yLCAiTWFqb3IgIyBmb3Igc291bmQgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtKGNhcmRzX2xpbWl0LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhjYXJkc19saW1pdCwgIkNvdW50IG9mIGF1dG8tbG9hZGFibGUgc291bmRjYXJkcy4iKTsKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLW1vZHVsZV9wYXJhbShkZXZpY2VfbW9kZSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGV2aWNlX21vZGUsICJEZXZpY2UgZmlsZSBwZXJtaXNzaW9uIG1hc2sgZm9yIGRldmZzLiIpOwotI2VuZGlmCiBNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihDT05GSUdfU05EX01BSk9SKTsKIAogLyogdGhpcyBvbmUgaG9sZHMgdGhlIGFjdHVhbCBtYXguIGNhcmQgbnVtYmVyIGN1cnJlbnRseSBhdmFpbGFibGUuCkBAIC0yNzMsOCArMjY3LDYgQEAKIAkJcmV0dXJuIG1pbm9yOwogCX0KIAlzbmRfbWlub3JzW21pbm9yXSA9IHByZWc7Ci0JaWYgKHR5cGUgIT0gU05EUlZfREVWSUNFX1RZUEVfQ09OVFJPTCB8fCBwcmVnLT5jYXJkID49IGNhcmRzX2xpbWl0KQotCQlkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCBtaW5vciksIFNfSUZDSFIgfCBkZXZpY2VfbW9kZSwgInNuZC8lcyIsIG5hbWUpOwogCWlmIChjYXJkKQogCQlkZXZpY2UgPSBjYXJkLT5kZXY7CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZShzb3VuZF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIG1pbm9yKSwgZGV2aWNlLCAiJXMiLCBuYW1lKTsKQEAgLTMxNCw5ICszMDYsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAobXB0ci0+dHlwZSAhPSBTTkRSVl9ERVZJQ0VfVFlQRV9DT05UUk9MIHx8Ci0JICAgIG1wdHItPmNhcmQgPj0gY2FyZHNfbGltaXQpCQkJLyogY3JlYXRlZCBpbiBzb3VuZC5jICovCi0JCWRldmZzX3JlbW92ZSgic25kLyVzIiwgbXB0ci0+bmFtZSk7CiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koc291bmRfY2xhc3MsIE1LREVWKG1ham9yLCBtaW5vcikpOwogCiAJc25kX21pbm9yc1ttaW5vcl0gPSBOVUxMOwpAQCAtNDExLDI0ICs0MDAsMTcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9zb3VuZF9pbml0KHZvaWQpCiB7Ci0Jc2hvcnQgY29udHJvbG51bTsKLQogCXNuZF9tYWpvciA9IG1ham9yOwogCXNuZF9lY2FyZHNfbGltaXQgPSBjYXJkc19saW1pdDsKLQlkZXZmc19ta19kaXIoInNuZCIpOwogCWlmIChyZWdpc3Rlcl9jaHJkZXYobWFqb3IsICJhbHNhIiwgJnNuZF9mb3BzKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgbmF0aXZlIG1ham9yIGRldmljZSBudW1iZXIgJWRcbiIsIG1ham9yKTsKLQkJZGV2ZnNfcmVtb3ZlKCJzbmQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmIChzbmRfaW5mb19pbml0KCkgPCAwKSB7CiAJCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCAiYWxzYSIpOwotCQlkZXZmc19yZW1vdmUoInNuZCIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc25kX2luZm9fbWlub3JfcmVnaXN0ZXIoKTsKLQlmb3IgKGNvbnRyb2xudW0gPSAwOyBjb250cm9sbnVtIDwgY2FyZHNfbGltaXQ7IGNvbnRyb2xudW0rKykKLQkJZGV2ZnNfbWtfY2RldihNS0RFVihtYWpvciwgY29udHJvbG51bTw8NSksIFNfSUZDSFIgfCBkZXZpY2VfbW9kZSwgInNuZC9jb250cm9sQyVkIiwgY29udHJvbG51bSk7CiAjaWZuZGVmIE1PRFVMRQogCXByaW50ayhLRVJOX0lORk8gIkFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSBEcml2ZXIgVmVyc2lvbiAiIENPTkZJR19TTkRfVkVSU0lPTiBDT05GSUdfU05EX0RBVEUgIi5cbiIpOwogI2VuZGlmCkBAIC00MzcsMTYgKzQxOSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9zb3VuZF9leGl0KHZvaWQpCiB7Ci0Jc2hvcnQgY29udHJvbG51bTsKLQotCWZvciAoY29udHJvbG51bSA9IDA7IGNvbnRyb2xudW0gPCBjYXJkc19saW1pdDsgY29udHJvbG51bSsrKQotCQlkZXZmc19yZW1vdmUoInNuZC9jb250cm9sQyVkIiwgY29udHJvbG51bSk7Ci0KIAlzbmRfaW5mb19taW5vcl91bnJlZ2lzdGVyKCk7CiAJc25kX2luZm9fZG9uZSgpOwogCWlmICh1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgImFsc2EiKSAhPSAwKQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gdW5yZWdpc3RlciBtYWpvciBkZXZpY2UgbnVtYmVyICVkXG4iLCBtYWpvcik7Ci0JZGV2ZnNfcmVtb3ZlKCJzbmQiKTsKIH0KIAogbW9kdWxlX2luaXQoYWxzYV9zb3VuZF9pbml0KQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCBkM2NiYmIwLi4xN2NjMTA1IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtODMsNyArODMsNyBAQAogCWlmICgoZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLAogCQkJCSAgICAgICBNUFU0MDFfSFdfTVBVNDAxLAogCQkJCSAgICAgICBwb3J0W2Rldl0sIDAsCi0JCQkJICAgICAgIGlycVtkZXZdLCBpcnFbZGV2XSA+PSAwID8gU0FfSU5URVJSVVBUIDogMCwgTlVMTCkpIDwgMCkgeworCQkJCSAgICAgICBpcnFbZGV2XSwgaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLCBOVUxMKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTVBVNDAxIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgcG9ydFtkZXZdKTsKIAkJZ290byBfZXJyOwogCX0KQEAgLTE2MCw4ICsxNjAsOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHBucF9wb3J0X2xlbihkZXZpY2UsIDApIDwgSU9fRVhURU5UKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIlBuUCBwb3J0IGxlbmd0aCBpcyAlbGQsIGV4cGVjdGVkICVkXG4iLAotCQkJICAgcG5wX3BvcnRfbGVuKGRldmljZSwgMCksIElPX0VYVEVOVCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlBuUCBwb3J0IGxlbmd0aCBpcyAlbGx1LCBleHBlY3RlZCAlZFxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcG5wX3BvcnRfbGVuKGRldmljZSwgMCksCisJCQkgICBJT19FWFRFTlQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQoZGV2aWNlLCAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwppbmRleCA0NzRlZWQwLi5lMDY0ZDZjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210cGF2LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCkBAIC01OTAsNyArNTkwLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJbWNhcmQtPnBvcnQgPSBwb3J0OwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9tdHBhdl9pcnFoLCBTQV9JTlRFUlJVUFQsICJNT1RVIE1UUEFWIiwgbWNhcmQpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX210cGF2X2lycWgsIElSUUZfRElTQUJMRUQsICJNT1RVIE1UUEFWIiwgbWNhcmQpKSB7CiAJCXNuZF9wcmludGsoIk1UVkFQIElSUSAlZCBidXN5XG4iLCBpcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKaW5kZXggMjMzMGZlYy4uNTJhZmI0YiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKKysrIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKQEAgLTc5NSw3ICs3OTUsNyBAQAogCiAJaWYgKGlycSA+PSAwICYmIGlycSAhPSBTTkRSVl9BVVRPX0lSUSkgewogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfdWFydDE2NTUwX2ludGVycnVwdCwKLQkJCQlTQV9JTlRFUlJVUFQsICJTZXJpYWwgTUlESSIsICh2b2lkICopIHVhcnQpKSB7CisJCQkJSVJRRl9ESVNBQkxFRCwgIlNlcmlhbCBNSURJIiwgKHZvaWQgKikgdWFydCkpIHsKIAkJCXNuZF9wcmludGsoImlycSAlZCBidXN5LiBVc2luZyBQb2xsaW5nLlxuIiwgaXJxKTsKIAkJfSBlbHNlIHsKIAkJCXVhcnQtPmlycSA9IGlycTsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci9hazR4eHgtYWRkYS5jIGIvc291bmQvaTJjL290aGVyL2FrNHh4eC1hZGRhLmMKaW5kZXggMDQ1ZTMyYS4uZGM3Y2MyMCAxMDA2NDQKLS0tIGEvc291bmQvaTJjL290aGVyL2FrNHh4eC1hZGRhLmMKKysrIGIvc291bmQvaTJjL290aGVyL2FrNHh4eC1hZGRhLmMKQEAgLTM0LDcgKzM0LDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUm91dGluZXMgZm9yIGNvbnRyb2wgb2YgQUs0NTJ4IC8gQUs0M3h4ICBBRC9EQSBjb252ZXJ0ZXJzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXZvaWQgc25kX2FrbTR4eHhfd3JpdGUoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IGNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3ZvaWQgc25kX2FrbTR4eHhfd3JpdGUoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IGNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkgICAgICAgdW5zaWduZWQgY2hhciB2YWwpCiB7CiAJYWstPm9wcy5sb2NrKGFrLCBjaGlwKTsKIAlhay0+b3BzLndyaXRlKGFrLCBjaGlwLCByZWcsIHZhbCk7CkBAIC01Miw2ICs1Myw2NyBAQAogCWFrLT5vcHMudW5sb2NrKGFrLCBjaGlwKTsKIH0KIAorRVhQT1JUX1NZTUJPTChzbmRfYWttNHh4eF93cml0ZSk7CisKKy8qIHJlc2V0IHByb2NlZHVyZSBmb3IgQUs0NTI0IGFuZCBBSzQ1MjggKi8KK3N0YXRpYyB2b2lkIGFrNDUyNF9yZXNldChzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrLCBpbnQgc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGNoaXA7CisJdW5zaWduZWQgY2hhciByZWcsIG1heHJlZzsKKworCWlmIChhay0+dHlwZSA9PSBTTkRfQUs0NTI4KQorCQltYXhyZWcgPSAweDA2OworCWVsc2UKKwkJbWF4cmVnID0gMHgwODsKKwlmb3IgKGNoaXAgPSAwOyBjaGlwIDwgYWstPm51bV9kYWNzLzI7IGNoaXArKykgeworCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgMHgwMSwgc3RhdGUgPyAweDAwIDogMHgwMyk7CisJCWlmIChzdGF0ZSkKKwkJCWNvbnRpbnVlOworCQkvKiBEQUMgdm9sdW1lcyAqLworCQlmb3IgKHJlZyA9IDB4MDQ7IHJlZyA8IG1heHJlZzsgcmVnKyspCisJCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgcmVnLAorCQkJCQkgIHNuZF9ha200eHh4X2dldChhaywgY2hpcCwgcmVnKSk7CisJCWlmIChhay0+dHlwZSA9PSBTTkRfQUs0NTI4KQorCQkJY29udGludWU7CisJCS8qIElQR0EgKi8KKwkJZm9yIChyZWcgPSAweDA0OyByZWcgPCAweDA2OyByZWcrKykKKwkJCXNuZF9ha200eHh4X3dyaXRlKGFrLCBjaGlwLCByZWcsCisJCQkJCSAgc25kX2FrbTR4eHhfZ2V0X2lwZ2EoYWssIGNoaXAsIHJlZykpOworCX0KK30KKworLyogcmVzZXQgcHJvY2VkdXJlIGZvciBBSzQzNTUgYW5kIEFLNDM1OCAqLworc3RhdGljIHZvaWQgYWs0MzU1X3Jlc2V0KHN0cnVjdCBzbmRfYWttNHh4eCAqYWssIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKworCWlmIChzdGF0ZSkgeworCQlzbmRfYWttNHh4eF93cml0ZShhaywgMCwgMHgwMSwgMHgwMik7IC8qIHJlc2V0IGFuZCBzb2Z0LW11dGUgKi8KKwkJcmV0dXJuOworCX0KKwlmb3IgKHJlZyA9IDB4MDA7IHJlZyA8IDB4MGI7IHJlZysrKQorCQlpZiAocmVnICE9IDB4MDEpCisJCQlzbmRfYWttNHh4eF93cml0ZShhaywgMCwgcmVnLAorCQkJCQkgIHNuZF9ha200eHh4X2dldChhaywgMCwgcmVnKSk7CisJc25kX2FrbTR4eHhfd3JpdGUoYWssIDAsIDB4MDEsIDB4MDEpOyAvKiB1bi1yZXNldCwgdW5tdXRlICovCit9CisKKy8qIHJlc2V0IHByb2NlZHVyZSBmb3IgQUs0MzgxICovCitzdGF0aWMgdm9pZCBhazQzODFfcmVzZXQoc3RydWN0IHNuZF9ha200eHh4ICphaywgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGludCBjaGlwOworCXVuc2lnbmVkIGNoYXIgcmVnOworCisJZm9yIChjaGlwID0gMDsgY2hpcCA8IGFrLT5udW1fZGFjcy8yOyBjaGlwKyspIHsKKwkJc25kX2FrbTR4eHhfd3JpdGUoYWssIGNoaXAsIDB4MDAsIHN0YXRlID8gMHgwYyA6IDB4MGYpOworCQlpZiAoc3RhdGUpCisJCQljb250aW51ZTsKKwkJZm9yIChyZWcgPSAweDAxOyByZWcgPCAweDA1OyByZWcrKykKKwkJCXNuZF9ha200eHh4X3dyaXRlKGFrLCBjaGlwLCByZWcsCisJCQkJCSAgc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCByZWcpKTsKKwl9Cit9CisKIC8qCiAgKiByZXNldCB0aGUgQUtNIGNvZGVjcwogICogQHN0YXRlOiAxID0gcmVzZXQgY29kZWMsIDAgPSByZXN0b3JlIHRoZSByZWdpc3RlcnMKQEAgLTYwLDUyICsxMjIsMjYgQEAKICAqLwogdm9pZCBzbmRfYWttNHh4eF9yZXNldChzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrLCBpbnQgc3RhdGUpCiB7Ci0JdW5zaWduZWQgaW50IGNoaXA7Ci0JdW5zaWduZWQgY2hhciByZWc7Ci0JCiAJc3dpdGNoIChhay0+dHlwZSkgewogCWNhc2UgU05EX0FLNDUyNDoKIAljYXNlIFNORF9BSzQ1Mjg6Ci0JCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBhay0+bnVtX2RhY3MvMjsgY2hpcCsrKSB7Ci0JCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgMHgwMSwgc3RhdGUgPyAweDAwIDogMHgwMyk7Ci0JCQlpZiAoc3RhdGUpCi0JCQkJY29udGludWU7Ci0JCQkvKiBEQUMgdm9sdW1lcyAqLwotCQkJZm9yIChyZWcgPSAweDA0OyByZWcgPCAoYWstPnR5cGUgPT0gU05EX0FLNDUyOCA/IDB4MDYgOiAweDA4KTsgcmVnKyspCi0JCQkJc25kX2FrbTR4eHhfd3JpdGUoYWssIGNoaXAsIHJlZywgc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCByZWcpKTsKLQkJCWlmIChhay0+dHlwZSA9PSBTTkRfQUs0NTI4KQotCQkJCWNvbnRpbnVlOwotCQkJLyogSVBHQSAqLwotCQkJZm9yIChyZWcgPSAweDA0OyByZWcgPCAweDA2OyByZWcrKykKLQkJCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgcmVnLCBzbmRfYWttNHh4eF9nZXRfaXBnYShhaywgY2hpcCwgcmVnKSk7Ci0JCX0KKwkJYWs0NTI0X3Jlc2V0KGFrLCBzdGF0ZSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX0FLNDUyOToKIAkJLyogRklYTUU6IG5lZWRlZCBmb3IgYWs0NTI5PyAqLwogCQlicmVhazsKIAljYXNlIFNORF9BSzQzNTU6CiAJY2FzZSBTTkRfQUs0MzU4OgotCQlpZiAoc3RhdGUpIHsKLQkJCXNuZF9ha200eHh4X3dyaXRlKGFrLCAwLCAweDAxLCAweDAyKTsgLyogcmVzZXQgYW5kIHNvZnQtbXV0ZSAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCWZvciAocmVnID0gMHgwMDsgcmVnIDwgMHgwYjsgcmVnKyspCi0JCQlpZiAocmVnICE9IDB4MDEpCi0JCQkJc25kX2FrbTR4eHhfd3JpdGUoYWssIDAsIHJlZywgc25kX2FrbTR4eHhfZ2V0KGFrLCAwLCByZWcpKTsKLQkJc25kX2FrbTR4eHhfd3JpdGUoYWssIDAsIDB4MDEsIDB4MDEpOyAvKiB1bi1yZXNldCwgdW5tdXRlICovCisJCWFrNDM1NV9yZXNldChhaywgc3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNORF9BSzQzODE6Ci0JCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBhay0+bnVtX2RhY3MvMjsgY2hpcCsrKSB7Ci0JCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgMHgwMCwgc3RhdGUgPyAweDBjIDogMHgwZik7Ci0JCQlpZiAoc3RhdGUpCi0JCQkJY29udGludWU7Ci0JCQlmb3IgKHJlZyA9IDB4MDE7IHJlZyA8IDB4MDU7IHJlZysrKQotCQkJCXNuZF9ha200eHh4X3dyaXRlKGFrLCBjaGlwLCByZWcsIHNuZF9ha200eHh4X2dldChhaywgY2hpcCwgcmVnKSk7Ci0JCX0KKwkJYWs0MzgxX3Jlc2V0KGFrLCBzdGF0ZSk7CiAJCWJyZWFrOwogCX0KIH0KIAorRVhQT1JUX1NZTUJPTChzbmRfYWttNHh4eF9yZXNldCk7CisKIC8qCiAgKiBpbml0aWFsaXplIGFsbCB0aGUgYWs0eHh4IGNoaXBzCiAgKi8KQEAgLTE1Myw3ICsxODksOCBAQAogCX07CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5pdHNfYWs0MzU1W10gPSB7CiAJCTB4MDEsIDB4MDIsIC8qIDE6IHJlc2V0IGFuZCBzb2Z0LW11dGUgKi8KLQkJMHgwMCwgMHgwNiwgLyogMDogbW9kZTMoaTJzKSwgZGlzYWJsZSBhdXRvLWNsb2NrIGRldGVjdCwgZGlzYWJsZSBEWkYsIHNoYXJwIHJvbGwtb2ZmLCBSU1ROIz0wICovCisJCTB4MDAsIDB4MDYsIC8qIDA6IG1vZGUzKGkycyksIGRpc2FibGUgYXV0by1jbG9jayBkZXRlY3QsCisJCQkgICAgICogZGlzYWJsZSBEWkYsIHNoYXJwIHJvbGwtb2ZmLCBSU1ROIz0wICovCiAJCTB4MDIsIDB4MGUsIC8qIDI6IERBJ3MgcG93ZXIgdXAsIG5vcm1hbCBzcGVlZCwgUlNUTiM9MCAqLwogCQkvLyAweDAyLCAweDJlLCAvKiBxdWFkIHNwZWVkICovCiAJCTB4MDMsIDB4MDEsIC8qIDM6IGRlLWVtcGhhc2lzIG9mZiAqLwpAQCAtMTY5LDcgKzIwNiw4IEBACiAJfTsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbml0c19hazQzNThbXSA9IHsKIAkJMHgwMSwgMHgwMiwgLyogMTogcmVzZXQgYW5kIHNvZnQtbXV0ZSAqLwotCQkweDAwLCAweDA2LCAvKiAwOiBtb2RlMyhpMnMpLCBkaXNhYmxlIGF1dG8tY2xvY2sgZGV0ZWN0LCBkaXNhYmxlIERaRiwgc2hhcnAgcm9sbC1vZmYsIFJTVE4jPTAgKi8KKwkJMHgwMCwgMHgwNiwgLyogMDogbW9kZTMoaTJzKSwgZGlzYWJsZSBhdXRvLWNsb2NrIGRldGVjdCwKKwkJCSAgICAgKiBkaXNhYmxlIERaRiwgc2hhcnAgcm9sbC1vZmYsIFJTVE4jPTAgKi8KIAkJMHgwMiwgMHgwZSwgLyogMjogREEncyBwb3dlciB1cCwgbm9ybWFsIHNwZWVkLCBSU1ROIz0wICovCiAJCS8vIDB4MDIsIDB4MmUsIC8qIHF1YWQgc3BlZWQgKi8KIAkJMHgwMywgMHgwMSwgLyogMzogZGUtZW1waGFzaXMgb2ZmICovCkBAIC0xODcsNyArMjI1LDggQEAKIAl9OwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluaXRzX2FrNDM4MVtdID0gewogCQkweDAwLCAweDBjLCAvKiAwOiBtb2RlMyhpMnMpLCBkaXNhYmxlIGF1dG8tY2xvY2sgZGV0ZWN0ICovCi0JCTB4MDEsIDB4MDIsIC8qIDE6IGRlLWVtcGhhc2lzIG9mZiwgbm9ybWFsIHNwZWVkLCBzaGFycCByb2xsLW9mZiwgRFpGIG9mZiAqLworCQkweDAxLCAweDAyLCAvKiAxOiBkZS1lbXBoYXNpcyBvZmYsIG5vcm1hbCBzcGVlZCwKKwkJCSAgICAgKiBzaGFycCByb2xsLW9mZiwgRFpGIG9mZiAqLwogCQkvLyAweDAxLCAweDEyLCAvKiBxdWFkIHNwZWVkICovCiAJCTB4MDIsIDB4MDAsIC8qIDI6IERaRiBkaXNhYmxlZCAqLwogCQkweDAzLCAweDAwLCAvKiAzOiBMQVRUIDAgKi8KQEAgLTIzOSwxMiArMjc4LDE1IEBACiAJfQogfQogCitFWFBPUlRfU1lNQk9MKHNuZF9ha200eHh4X2luaXQpOworCiAjZGVmaW5lIEFLX0dFVF9DSElQKHZhbCkJCSgoKHZhbCkgPj4gOCkgJiAweGZmKQogI2RlZmluZSBBS19HRVRfQUREUih2YWwpCQkoKHZhbCkgJiAweGZmKQogI2RlZmluZSBBS19HRVRfU0hJRlQodmFsKQkJKCgodmFsKSA+PiAxNikgJiAweDdmKQogI2RlZmluZSBBS19HRVRfSU5WRVJUKHZhbCkJCSgoKHZhbCkgPj4gMjMpICYgMSkKICNkZWZpbmUgQUtfR0VUX01BU0sodmFsKQkJKCgodmFsKSA+PiAyNCkgJiAweGZmKQotI2RlZmluZSBBS19DT01QT1NFKGNoaXAsYWRkcixzaGlmdCxtYXNrKSAoKChjaGlwKSA8PCA4KSB8IChhZGRyKSB8ICgoc2hpZnQpIDw8IDE2KSB8ICgobWFzaykgPDwgMjQpKQorI2RlZmluZSBBS19DT01QT1NFKGNoaXAsYWRkcixzaGlmdCxtYXNrKSBcCisJKCgoY2hpcCkgPDwgOCkgfCAoYWRkcikgfCAoKHNoaWZ0KSA8PCAxNikgfCAoKG1hc2spIDw8IDI0KSkKICNkZWZpbmUgQUtfSU5WRVJUIAkJCSgxPDwyMykKIAogc3RhdGljIGludCBzbmRfYWttNHh4eF92b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTI5Miw2ICszMzQsNjQgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCitzdGF0aWMgaW50IHNuZF9ha200eHh4X3N0ZXJlb192b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gQUtfR0VUX01BU0soa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1hc2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FrbTR4eHhfc3RlcmVvX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBjaGlwID0gQUtfR0VUX0NISVAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOworCWludCBhZGRyID0gQUtfR0VUX0FERFIoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOworCWludCBpbnZlcnQgPSBBS19HRVRfSU5WRVJUKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IEFLX0dFVF9NQVNLKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKwl1bnNpZ25lZCBjaGFyIHZhbCA9IHNuZF9ha200eHh4X2dldChhaywgY2hpcCwgYWRkcik7CisJCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBpbnZlcnQgPyBtYXNrIC0gdmFsIDogdmFsOworCisJdmFsID0gc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCBhZGRyKzEpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gaW52ZXJ0ID8gbWFzayAtIHZhbCA6IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9ha200eHh4X3N0ZXJlb192b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9ha200eHh4ICphayA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hpcCA9IEFLX0dFVF9DSElQKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKwlpbnQgYWRkciA9IEFLX0dFVF9BRERSKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKwlpbnQgaW52ZXJ0ID0gQUtfR0VUX0lOVkVSVChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CisJdW5zaWduZWQgaW50IG1hc2sgPSBBS19HRVRfTUFTSyhrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CisJdW5zaWduZWQgY2hhciBudmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJSAobWFzaysxKTsKKwlpbnQgY2hhbmdlMCwgY2hhbmdlMTsKKworCWlmIChpbnZlcnQpCisJCW52YWwgPSBtYXNrIC0gbnZhbDsKKwljaGFuZ2UwID0gc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCBhZGRyKSAhPSBudmFsOworCWlmIChjaGFuZ2UwKQorCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgYWRkciwgbnZhbCk7CisKKwludmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJSAobWFzaysxKTsKKwlpZiAoaW52ZXJ0KQorCQludmFsID0gbWFzayAtIG52YWw7CisJY2hhbmdlMSA9IHNuZF9ha200eHh4X2dldChhaywgY2hpcCwgYWRkcisxKSAhPSBudmFsOworCWlmIChjaGFuZ2UxKQorCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgYWRkcisxLCBudmFsKTsKKworCisJcmV0dXJuIGNoYW5nZTAgfHwgY2hhbmdlMTsKK30KKwogc3RhdGljIGludCBzbmRfYWttNHh4eF9pcGdhX2dhaW5faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewpAQCAtMzA4LDcgKzQwOCw4IEBACiAJc3RydWN0IHNuZF9ha200eHh4ICphayA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hpcCA9IEFLX0dFVF9DSElQKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKIAlpbnQgYWRkciA9IEFLX0dFVF9BRERSKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNuZF9ha200eHh4X2dldF9pcGdhKGFrLCBjaGlwLCBhZGRyKSAmIDB4N2Y7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQlzbmRfYWttNHh4eF9nZXRfaXBnYShhaywgY2hpcCwgYWRkcikgJiAweDdmOwogCXJldHVybiAwOwogfQogCkBAIC0zMzYsNyArNDM3LDggQEAKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDQ7CiAJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gNCkKIAkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDM7Ci0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwogCXJldHVybiAwOwogfQogCkBAIC0zNDcsNyArNDQ5LDggQEAKIAlpbnQgY2hpcCA9IEFLX0dFVF9DSElQKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKIAlpbnQgYWRkciA9IEFLX0dFVF9BRERSKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKIAlpbnQgc2hpZnQgPSBBS19HRVRfU0hJRlQoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOwotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAoc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCBhZGRyKSA+PiBzaGlmdCkgJiAzOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkoc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCBhZGRyKSA+PiBzaGlmdCkgJiAzOwogCXJldHVybiAwOwogfQogCkBAIC0zNjEsNyArNDY0LDggQEAKIAl1bnNpZ25lZCBjaGFyIG52YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICYgMzsKIAlpbnQgY2hhbmdlOwogCQotCW52YWwgPSAobnZhbCA8PCBzaGlmdCkgfCAoc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCBhZGRyKSAmIH4oMyA8PCBzaGlmdCkpOworCW52YWwgPSAobnZhbCA8PCBzaGlmdCkgfAorCQkoc25kX2FrbTR4eHhfZ2V0KGFrLCBjaGlwLCBhZGRyKSAmIH4oMyA8PCBzaGlmdCkpOwogCWNoYW5nZSA9IHNuZF9ha200eHh4X2dldChhaywgY2hpcCwgYWRkcikgIT0gbnZhbDsKIAlpZiAoY2hhbmdlKQogCQlzbmRfYWttNHh4eF93cml0ZShhaywgY2hpcCwgYWRkciwgbnZhbCk7CkBAIC0zNzcsNTEgKzQ4MSw4NiBAQAogCXVuc2lnbmVkIGludCBpZHgsIG51bV9lbXBoczsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CiAJaW50IGVycjsKKwlpbnQgbWl4ZXJfY2ggPSAwOworCWludCBudW1fc3RlcmVvOwogCiAJY3RsID0ga21hbGxvYyhzaXplb2YoKmN0bCksIEdGUF9LRVJORUwpOwogCWlmICghIGN0bCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IGFrLT5udW1fZGFjczsgKytpZHgpIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGFrLT5udW1fZGFjczsgKSB7CiAJCW1lbXNldChjdGwsIDAsIHNpemVvZigqY3RsKSk7Ci0JCXN0cmNweShjdGwtPmlkLm5hbWUsICJEQUMgVm9sdW1lIik7Ci0JCWN0bC0+aWQuaW5kZXggPSBpZHggKyBhay0+aWR4X29mZnNldCAqIDI7CisJCWlmIChhay0+Y2hhbm5lbF9uYW1lcyA9PSBOVUxMKSB7CisJCQlzdHJjcHkoY3RsLT5pZC5uYW1lLCAiREFDIFZvbHVtZSIpOworCQkJbnVtX3N0ZXJlbyA9IDE7CisJCQljdGwtPmlkLmluZGV4ID0gbWl4ZXJfY2ggKyBhay0+aWR4X29mZnNldCAqIDI7CisJCX0gZWxzZSB7CisJCQlzdHJjcHkoY3RsLT5pZC5uYW1lLCBhay0+Y2hhbm5lbF9uYW1lc1ttaXhlcl9jaF0pOworCQkJbnVtX3N0ZXJlbyA9IGFrLT5udW1fc3RlcmVvW21peGVyX2NoXTsKKwkJCWN0bC0+aWQuaW5kZXggPSAwOworCQl9CiAJCWN0bC0+aWQuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUjsKIAkJY3RsLT5jb3VudCA9IDE7Ci0JCWN0bC0+aW5mbyA9IHNuZF9ha200eHh4X3ZvbHVtZV9pbmZvOwotCQljdGwtPmdldCA9IHNuZF9ha200eHh4X3ZvbHVtZV9nZXQ7Ci0JCWN0bC0+cHV0ID0gc25kX2FrbTR4eHhfdm9sdW1lX3B1dDsKKwkJaWYgKG51bV9zdGVyZW8gPT0gMikgeworCQkJY3RsLT5pbmZvID0gc25kX2FrbTR4eHhfc3RlcmVvX3ZvbHVtZV9pbmZvOworCQkJY3RsLT5nZXQgPSBzbmRfYWttNHh4eF9zdGVyZW9fdm9sdW1lX2dldDsKKwkJCWN0bC0+cHV0ID0gc25kX2FrbTR4eHhfc3RlcmVvX3ZvbHVtZV9wdXQ7CisJCX0gZWxzZSB7CisJCQljdGwtPmluZm8gPSBzbmRfYWttNHh4eF92b2x1bWVfaW5mbzsKKwkJCWN0bC0+Z2V0ID0gc25kX2FrbTR4eHhfdm9sdW1lX2dldDsKKwkJCWN0bC0+cHV0ID0gc25kX2FrbTR4eHhfdm9sdW1lX3B1dDsKKwkJfQogCQlzd2l0Y2ggKGFrLT50eXBlKSB7CiAJCWNhc2UgU05EX0FLNDUyNDoKLQkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IEFLX0NPTVBPU0UoaWR4LzIsIChpZHglMikgKyA2LCAwLCAxMjcpOyAvKiByZWdpc3RlciA2ICYgNyAqLworCQkJLyogcmVnaXN0ZXIgNiAmIDcgKi8KKwkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9CisJCQkJQUtfQ09NUE9TRShpZHgvMiwgKGlkeCUyKSArIDYsIDAsIDEyNyk7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfQUs0NTI4OgotCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0gQUtfQ09NUE9TRShpZHgvMiwgKGlkeCUyKSArIDQsIDAsIDEyNyk7IC8qIHJlZ2lzdGVyIDQgJiA1ICovCisJCQkvKiByZWdpc3RlciA0ICYgNSAqLworCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0KKwkJCQlBS19DT01QT1NFKGlkeC8yLCAoaWR4JTIpICsgNCwgMCwgMTI3KTsKIAkJCWJyZWFrOwogCQljYXNlIFNORF9BSzQ1Mjk6IHsKLQkJCWludCB2YWwgPSBpZHggPCA2ID8gaWR4ICsgMiA6IChpZHggLSA2KSArIDB4YjsgLyogcmVnaXN0ZXJzIDItNyBhbmQgYixjICovCi0JCQljdGwtPnByaXZhdGVfdmFsdWUgPSBBS19DT01QT1NFKDAsIHZhbCwgMCwgMjU1KSB8IEFLX0lOVkVSVDsKKwkJCS8qIHJlZ2lzdGVycyAyLTcgYW5kIGIsYyAqLworCQkJaW50IHZhbCA9IGlkeCA8IDYgPyBpZHggKyAyIDogKGlkeCAtIDYpICsgMHhiOworCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0KKwkJCQlBS19DT01QT1NFKDAsIHZhbCwgMCwgMjU1KSB8IEFLX0lOVkVSVDsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU05EX0FLNDM1NToKLQkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IEFLX0NPTVBPU0UoMCwgaWR4ICsgNCwgMCwgMjU1KTsgLyogcmVnaXN0ZXIgNC05LCBjaGlwICMwIG9ubHkgKi8KKwkJCS8qIHJlZ2lzdGVyIDQtOSwgY2hpcCAjMCBvbmx5ICovCisJCQljdGwtPnByaXZhdGVfdmFsdWUgPSBBS19DT01QT1NFKDAsIGlkeCArIDQsIDAsIDI1NSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfQUs0MzU4OgogCQkJaWYgKGlkeCA+PSA2KQotCQkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IEFLX0NPTVBPU0UoMCwgaWR4ICsgNSwgMCwgMjU1KTsgLyogcmVnaXN0ZXIgNC05LCBjaGlwICMwIG9ubHkgKi8KKwkJCQkvKiByZWdpc3RlciA0LTksIGNoaXAgIzAgb25seSAqLworCQkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9CisJCQkJCUFLX0NPTVBPU0UoMCwgaWR4ICsgNSwgMCwgMjU1KTsKIAkJCWVsc2UKLQkJCQljdGwtPnByaXZhdGVfdmFsdWUgPSBBS19DT01QT1NFKDAsIGlkeCArIDQsIDAsIDI1NSk7IC8qIHJlZ2lzdGVyIDQtOSwgY2hpcCAjMCBvbmx5ICovCisJCQkJLyogcmVnaXN0ZXIgNC05LCBjaGlwICMwIG9ubHkgKi8KKwkJCQljdGwtPnByaXZhdGVfdmFsdWUgPQorCQkJCQlBS19DT01QT1NFKDAsIGlkeCArIDQsIDAsIDI1NSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfQUs0MzgxOgotCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0gQUtfQ09NUE9TRShpZHgvMiwgKGlkeCUyKSArIDMsIDAsIDI1NSk7IC8qIHJlZ2lzdGVyIDMgJiA0ICovCisJCQkvKiByZWdpc3RlciAzICYgNCAqLworCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0KKwkJCQlBS19DT01QT1NFKGlkeC8yLCAoaWR4JTIpICsgMywgMCwgMjU1KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gX19lcnJvcjsKIAkJfQorCiAJCWN0bC0+cHJpdmF0ZV9kYXRhID0gYWs7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoYWstPmNhcmQsIHNuZF9jdGxfbmV3KGN0bCwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUR8U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFKSkpIDwgMCkKKwkJZXJyID0gc25kX2N0bF9hZGQoYWstPmNhcmQsCisJCQkJICBzbmRfY3RsX25ldyhjdGwsIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEfAorCQkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfV1JJVEUpKTsKKwkJaWYgKGVyciA8IDApCiAJCQlnb3RvIF9fZXJyb3I7CisKKwkJaWR4ICs9IG51bV9zdGVyZW87CisJCW1peGVyX2NoKys7CiAJfQogCWZvciAoaWR4ID0gMDsgaWR4IDwgYWstPm51bV9hZGNzICYmIGFrLT50eXBlID09IFNORF9BSzQ1MjQ7ICsraWR4KSB7CiAJCW1lbXNldChjdGwsIDAsIHNpemVvZigqY3RsKSk7CkBAIC00MzIsOSArNTcxLDE0IEBACiAJCWN0bC0+aW5mbyA9IHNuZF9ha200eHh4X3ZvbHVtZV9pbmZvOwogCQljdGwtPmdldCA9IHNuZF9ha200eHh4X3ZvbHVtZV9nZXQ7CiAJCWN0bC0+cHV0ID0gc25kX2FrbTR4eHhfdm9sdW1lX3B1dDsKLQkJY3RsLT5wcml2YXRlX3ZhbHVlID0gQUtfQ09NUE9TRShpZHgvMiwgKGlkeCUyKSArIDQsIDAsIDEyNyk7IC8qIHJlZ2lzdGVyIDQgJiA1ICovCisJCS8qIHJlZ2lzdGVyIDQgJiA1ICovCisJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9CisJCQlBS19DT01QT1NFKGlkeC8yLCAoaWR4JTIpICsgNCwgMCwgMTI3KTsKIAkJY3RsLT5wcml2YXRlX2RhdGEgPSBhazsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhay0+Y2FyZCwgc25kX2N0bF9uZXcoY3RsLCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfV1JJVEUpKSkgPCAwKQorCQllcnIgPSBzbmRfY3RsX2FkZChhay0+Y2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3KGN0bCwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUR8CisJCQkJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSkpOworCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gX19lcnJvcjsKIAogCQltZW1zZXQoY3RsLCAwLCBzaXplb2YoKmN0bCkpOwpAQCAtNDQ1LDkgKzU4OSwxMyBAQAogCQljdGwtPmluZm8gPSBzbmRfYWttNHh4eF9pcGdhX2dhaW5faW5mbzsKIAkJY3RsLT5nZXQgPSBzbmRfYWttNHh4eF9pcGdhX2dhaW5fZ2V0OwogCQljdGwtPnB1dCA9IHNuZF9ha200eHh4X2lwZ2FfZ2Fpbl9wdXQ7Ci0JCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IEFLX0NPTVBPU0UoaWR4LzIsIChpZHglMikgKyA0LCAwLCAwKTsgLyogcmVnaXN0ZXIgNCAmIDUgKi8KKwkJLyogcmVnaXN0ZXIgNCAmIDUgKi8KKwkJY3RsLT5wcml2YXRlX3ZhbHVlID0gQUtfQ09NUE9TRShpZHgvMiwgKGlkeCUyKSArIDQsIDAsIDApOwogCQljdGwtPnByaXZhdGVfZGF0YSA9IGFrOwotCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGFrLT5jYXJkLCBzbmRfY3RsX25ldyhjdGwsIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEfFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSkpKSA8IDApCisJCWVyciA9IHNuZF9jdGxfYWRkKGFrLT5jYXJkLAorCQkJCSAgc25kX2N0bF9uZXcoY3RsLCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRHwKKwkJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFKSk7CisJCWlmIChlcnIgPCAwKQogCQkJZ290byBfX2Vycm9yOwogCX0KIAlpZiAoYWstPnR5cGUgPT0gU05EX0FLNDM1NSB8fCBhay0+dHlwZSA9PSBTTkRfQUs0MzU4KQpAQCAtNDY2LDExICs2MTQsMTMgQEAKIAkJc3dpdGNoIChhay0+dHlwZSkgewogCQljYXNlIFNORF9BSzQ1MjQ6CiAJCWNhc2UgU05EX0FLNDUyODoKLQkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IEFLX0NPTVBPU0UoaWR4LCAzLCAwLCAwKTsgLyogcmVnaXN0ZXIgMyAqLworCQkJLyogcmVnaXN0ZXIgMyAqLworCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0gQUtfQ09NUE9TRShpZHgsIDMsIDAsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX0FLNDUyOTogewogCQkJaW50IHNoaWZ0ID0gaWR4ID09IDMgPyA2IDogKDIgLSBpZHgpICogMjsKLQkJCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IEFLX0NPTVBPU0UoMCwgOCwgc2hpZnQsIDApOyAvKiByZWdpc3RlciA4IHdpdGggc2hpZnQgKi8KKwkJCS8qIHJlZ2lzdGVyIDggd2l0aCBzaGlmdCAqLworCQkJY3RsLT5wcml2YXRlX3ZhbHVlID0gQUtfQ09NUE9TRSgwLCA4LCBzaGlmdCwgMCk7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNORF9BSzQzNTU6CkBAIC00ODIsNyArNjMyLDEwIEBACiAJCQlicmVhazsKIAkJfQogCQljdGwtPnByaXZhdGVfZGF0YSA9IGFrOwotCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGFrLT5jYXJkLCBzbmRfY3RsX25ldyhjdGwsIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEfFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSkpKSA8IDApCisJCWVyciA9IHNuZF9jdGxfYWRkKGFrLT5jYXJkLAorCQkJCSAgc25kX2N0bF9uZXcoY3RsLCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRHwKKwkJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFKSk7CisJCWlmIChlcnIgPCAwKQogCQkJZ290byBfX2Vycm9yOwogCX0KIAllcnIgPSAwOwpAQCAtNDkyLDYgKzY0NSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorRVhQT1JUX1NZTUJPTChzbmRfYWttNHh4eF9idWlsZF9jb250cm9scyk7CisKIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfYWttNHh4eF9tb2R1bGVfaW5pdCh2b2lkKQogewogCXJldHVybiAwOwpAQCAtNTAzLDggKzY1OCwzIEBACiAgICAgICAgIAogbW9kdWxlX2luaXQoYWxzYV9ha200eHh4X21vZHVsZV9pbml0KQogbW9kdWxlX2V4aXQoYWxzYV9ha200eHh4X21vZHVsZV9leGl0KQotCi1FWFBPUlRfU1lNQk9MKHNuZF9ha200eHh4X3dyaXRlKTsKLUVYUE9SVF9TWU1CT0woc25kX2FrbTR4eHhfcmVzZXQpOwotRVhQT1JUX1NZTUJPTChzbmRfYWttNHh4eF9pbml0KTsKLUVYUE9SVF9TWU1CT0woc25kX2FrbTR4eHhfYnVpbGRfY29udHJvbHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCmluZGV4IDMxZjI5OWEuLmIzM2E1ZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCiAJaWYgKG1wdV9wb3J0W2Rldl0gPiAwKSB7CiAJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCi0JCQkJCW1wdV9wb3J0W2Rldl0sIDAsIG1wdV9pcnFbZGV2XSwgU0FfSU5URVJSVVBULAorCQkJCQltcHVfcG9ydFtkZXZdLCAwLCBtcHVfaXJxW2Rldl0sIElSUUZfRElTQUJMRUQsCiAJCQkJCU5VTEwpIDwgMCkKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4LlxuIiwgbXB1X3BvcnRbZGV2XSk7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKaW5kZXggZmQ4ZmUxNi4uOGZjZjJjMSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCkBAIC01OTksNyArNTk5LDcgQEAKIAkJc25kX2FkMTgxNmFfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX2FkMTgxNmFfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJBRDE4MTZBIiwgKHZvaWQgKikgY2hpcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfYWQxODE2YV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJBRDE4MTZBIiwgKHZvaWQgKikgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWQxODE2YTogY2FuJ3QgZ3JhYiBJUlEgJWRcbiIsIGlycSk7CiAJCXNuZF9hZDE4MTZhX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OF9saWIuYyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4X2xpYi5jCmluZGV4IGUwZjhiYWEuLmU3MTFmODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4X2xpYi5jCkBAIC05MDIsNyArOTAyLDcgQEAKIAkJc25kX2FkMTg0OF9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfYWQxODQ4X2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiQUQxODQ4IiwgKHZvaWQgKikgY2hpcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfYWQxODQ4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIkFEMTg0OCIsICh2b2lkICopIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImFkMTg0ODogY2FuJ3QgZ3JhYiBJUlEgJWRcbiIsIGlycSk7CiAJCXNuZF9hZDE4NDhfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCBhNTJiZDhhLi5mMmJjZmIyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0FMUzEwMCwKIAkJCQkJbXB1X3BvcnRbZGV2XSwgMCwgCi0JCQkJCW1wdV9pcnFbZGV2XSwgU0FfSU5URVJSVVBULAorCQkJCQltcHVfaXJxW2Rldl0sIElSUUZfRElTQUJMRUQsCiAJCQkJCU5VTEwpIDwgMCkKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwgbXB1X3BvcnRbZGV2XSk7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2F6dDIzMjAuYyBiL3NvdW5kL2lzYS9henQyMzIwLmMKaW5kZXggMTVlNTkyOC4uYjYxNTUzOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2F6dDIzMjAuYworKysgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0FaVDIzMjAsCiAJCQkJbXB1X3BvcnRbZGV2XSwgMCwKLQkJCQltcHVfaXJxW2Rldl0sIFNBX0lOVEVSUlVQVCwKKwkJCQltcHVfaXJxW2Rldl0sIElSUUZfRElTQUJMRUQsCiAJCQkJTlVMTCkgPCAwKQogCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4XG4iLCBtcHVfcG9ydFtkZXZdKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCAzOTczMTBmLi42OTZhNWM4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfQ1M0MjMyLAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLAogCQkJCQltcHVfaXJxW2Rldl0sCi0JCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gU0FfSU5URVJSVVBUIDogMCwKKwkJCQkJbXB1X2lycVtkZXZdID49IDAgPyBJUlFGX0RJU0FCTEVEIDogMCwKIAkJCQkJTlVMTCkgPCAwKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3M0MjMxOiBNUFU0MDEgbm90IGRldGVjdGVkXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMV9saWIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jCmluZGV4IDgyM2RiODIuLmZiYjIwMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jCkBAIC0xNDU0LDcgKzE0NTQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY2hpcC0+Y3BvcnQgPSBjcG9ydDsKLQlpZiAoIShod3NoYXJlICYgQ1M0MjMxX0hXU0hBUkVfSVJRKSAmJiByZXF1ZXN0X2lycShpcnEsIHNuZF9jczQyMzFfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJDUzQyMzEiLCAodm9pZCAqKSBjaGlwKSkgeworCWlmICghKGh3c2hhcmUgJiBDUzQyMzFfSFdTSEFSRV9JUlEpICYmIHJlcXVlc3RfaXJxKGlycSwgc25kX2NzNDIzMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJDUzQyMzEiLCAodm9pZCAqKSBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjczQyMzE6IGNhbid0IGdyYWIgSVJRICVkXG4iLCBpcnEpOwogCQlzbmRfY3M0MjMxX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwppbmRleCBmN2ZhNzc5My4uMDdmZmQ1YyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0NTNDIzMiwKIAkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKIAkJCQkJbXB1X2lycVtkZXZdLAotCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IFNBX0lOVEVSUlVQVCA6IDAsIE5VTEwpIDwgMCkKKwkJCQkJbXB1X2lycVtkZXZdID49IDAgPyBJUlFGX0RJU0FCTEVEIDogMCwgTlVMTCkgPCAwKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBJREVOVCAiOiBNUFU0MDEgbm90IGRldGVjdGVkXG4iKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwppbmRleCAwYWNiNGU1Li5jMjBhNGIxIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIGIvc291bmQvaXNhL2R0MDE5eC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJCQkJTVBVNDAxX0hXX01QVTQwMSwKIAkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKIAkJCQkJbXB1X2lycVtkZXZdLAotCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IFNBX0lOVEVSUlVQVCA6IDAsCisJCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCiAJCQkJCU5VTEwpIDwgMCkKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseCA/XG4iLCBtcHVfcG9ydFtkZXZdKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwppbmRleCBlOTA2ODllLi43ZjI5ZjU2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQlpZiAoKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0VTMTY4OCwKIAkJCQkJICAgICAgIGNoaXAtPm1wdV9wb3J0LCAwLAogCQkJCQkgICAgICAgeG1wdV9pcnEsCi0JCQkJCSAgICAgICBTQV9JTlRFUlJVUFQsCisJCQkJCSAgICAgICBJUlFGX0RJU0FCTEVELAogCQkJCQkgICAgICAgTlVMTCkpIDwgMCkKIAkJCWdvdG8gX2VycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCmluZGV4IDcwMmFkNTEuLjdlOTg1ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCkBAIC02NTksNyArNjU5LDcgQEAKIAkJc25kX2VzMTY4OF9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfZXMxNjg4X2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiRVMxNjg4IiwgKHZvaWQgKikgY2hpcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfZXMxNjg4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIkVTMTY4OCIsICh2b2lkICopIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImVzMTY4ODogY2FuJ3QgZ3JhYiBJUlEgJWRcbiIsIGlycSk7CiAJCXNuZF9lczE2ODhfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE4eHguYyBiL3NvdW5kL2lzYS9lczE4eHguYwppbmRleCBlNjk0NWRiLi4zNDk5OGRlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxOHh4LmMKKysrIGIvc291bmQvaXNhL2VzMTh4eC5jCkBAIC0xODM3LDcgKzE4MzcsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9lczE4eHhfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJFUzE4eHgiLCAodm9pZCAqKSBjaGlwKSkgeworCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9lczE4eHhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiRVMxOHh4IiwgKHZvaWQgKikgY2hpcCkpIHsKIAkJc25kX2VzMTh4eF9mcmVlKGNoaXApOwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGdyYXAgSVJRICVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjA4OCw3ICsyMDg4LDggQEAKIAkJa2ZyZWUoY2ZnKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQotCXNuZF9wcmludGRkKCJwbnA6IHBvcnQ9MHglbHhcbiIsIHBucF9wb3J0X3N0YXJ0KGFjYXJkLT5kZXZjLCAwKSk7CisJc25kX3ByaW50ZGQoInBucDogcG9ydD0weCVsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBucF9wb3J0X3N0YXJ0KGFjYXJkLT5kZXZjLCAwKSk7CiAJLyogUG5QIGluaXRpYWxpemF0aW9uICovCiAJcGRldiA9IGFjYXJkLT5kZXY7CiAJcG5wX2luaXRfcmVzb3VyY2VfdGFibGUoY2ZnKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX21haW4uYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX21haW4uYwppbmRleCA1M2VlYWYzLi5iNjgwZmRkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19tYWluLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfbWFpbi5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAkJc25kX2d1c19mcmVlKGd1cyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWlmIChpcnEgPj0gMCAmJiByZXF1ZXN0X2lycShpcnEsIHNuZF9ndXNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJHVVMgR0YxIiwgKHZvaWQgKikgZ3VzKSkgeworCWlmIChpcnEgPj0gMCAmJiByZXF1ZXN0X2lycShpcnEsIHNuZF9ndXNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiR1VTIEdGMSIsICh2b2lkICopIGd1cykpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiZ3VzOiBjYW4ndCBncmFiIGlycSAlZFxuIiwgaXJxKTsKIAkJc25kX2d1c19mcmVlKGd1cyk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCmluZGV4IDA1ODUyZmMuLjIyY2RkZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIAkgICAgKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0VTMTY4OCwKIAkJCQkJICAgICAgIGVzMTY4OC0+bXB1X3BvcnQsIDAsCiAJCQkJCSAgICAgICB4bXB1X2lycSwKLQkJCQkJICAgICAgIFNBX0lOVEVSUlVQVCwKKwkJCQkJICAgICAgIElSUUZfRElTQUJMRUQsCiAJCQkJCSAgICAgICBOVUxMKSkgPCAwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNtYXguYyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKaW5kZXggZmNmMmM4Zi4uYWMxMWNhZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNtYXguYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCkBAIC0yOTIsNyArMjkyLDcgQEAKIAkJZ290byBfZXJyOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycSh4aXJxLCBzbmRfZ3VzbWF4X2ludGVycnVwdCwgU0FfSU5URVJSVVBULCAiR1VTIE1BWCIsICh2b2lkICopbWF4Y2FyZCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoeGlycSwgc25kX2d1c21heF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJHVVMgTUFYIiwgKHZvaWQgKiltYXhjYXJkKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCB4aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIF9lcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwppbmRleCA4NjYzMDBmLi5lYTY5ZjI1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTYxMSwxMCArNjExLDEwIEBACiAJaWYgKGRtYTJbZGV2XSA+PSAwKQogCQlkbWEyW2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwogCWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQlzbmRfcHJpbnRkZCgiaXNhcG5wIElXOiBzYiBwb3J0PTB4JWx4LCBnZjEgcG9ydD0weCVseCwgY29kZWMgcG9ydD0weCVseFxuIiwKLQkJCQlwbnBfcG9ydF9zdGFydChwZGV2LCAwKSwKLQkJCQlwbnBfcG9ydF9zdGFydChwZGV2LCAxKSwKLQkJCQlwbnBfcG9ydF9zdGFydChwZGV2LCAyKSk7CisJc25kX3ByaW50ZGQoImlzYXBucCBJVzogc2IgcG9ydD0weCVsbHgsIGdmMSBwb3J0PTB4JWxseCwgY29kZWMgcG9ydD0weCVsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBucF9wb3J0X3N0YXJ0KHBkZXYsIDApLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbnBfcG9ydF9zdGFydChwZGV2LCAxKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcG5wX3BvcnRfc3RhcnQocGRldiwgMikpOwogCXNuZF9wcmludGRkKCJpc2FwbnAgSVc6IGRtYTE9JWksIGRtYTI9JWksIGlycT0laVxuIiwgZG1hMVtkZXZdLCBkbWEyW2Rldl0sIGlycVtkZXZdKTsKICNpZmRlZiBTTkRSVl9TVEIKIAkvKiBUb25lIENvbnRyb2wgaW5pdGlhbGl6YXRpb24gKi8KQEAgLTcwNiw3ICs3MDYsNyBAQAogCWlmICgoZXJyID0gc25kX2d1c19pbml0aWFsaXplKGd1cykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmIChyZXF1ZXN0X2lycSh4aXJxLCBzbmRfaW50ZXJ3YXZlX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCWlmIChyZXF1ZXN0X2lycSh4aXJxLCBzbmRfaW50ZXJ3YXZlX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCSJJbnRlcldhdmUiLCBpd2NhcmQpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHhpcnEpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggNjQ3YTk5Ni4uNDAzMWI2MSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC02ODMsNyArNjgzLDcgQEAKIAkJY2hpcC0+c2luZ2xlX2RtYSA9IDE7CiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9kZXRlY3QoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAocmVxdWVzdF9pcnEoeGlycSwgc25kX29wbDNzYTJfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQsICJPUEwzLVNBMiIsIGNoaXApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHhpcnEsIHNuZF9vcGwzc2EyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIk9QTDMtU0EyIiwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IGdyYWIgSVJRICVkXG4iLCB4aXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCmluZGV4IDI4MzgxN2YuLjFkZDk4MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKQEAgLTEzODIsNyArMTM4Miw3IEBACiAJCXJtaWRpID0gTlVMTDsKIAllbHNlCiAJCWlmICgoZXJyb3IgPSBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsCi0JCQkJbWlyby0+bXB1X3BvcnQsIDAsIG1pcm8tPm1wdV9pcnEsIFNBX0lOVEVSUlVQVCwKKwkJCQltaXJvLT5tcHVfcG9ydCwgMCwgbWlyby0+bXB1X2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJCQkmcm1pZGkpKSkKIAkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseD9cbiIsIG1pcm8tPm1wdV9wb3J0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggOGVlMGQ3MC4uOWQ1MjhhZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogCX0KIAljb2RlYy0+ZG1hMiA9IGNoaXAtPmRtYTI7CiAKLQlpZiAocmVxdWVzdF9pcnEoY2hpcC0+aXJxLCBzbmRfb3B0aTkzeF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgRFJJVkVSX05BTUUiIC0gV1NTIiwgY29kZWMpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGNoaXAtPmlycSwgc25kX29wdGk5M3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBEUklWRVJfTkFNRSIgLSBXU1MiLCBjb2RlYykpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAib3B0aTl4eDogY2FuJ3QgZ3JhYiBJUlEgJWRcbiIsIGNoaXAtPmlycSk7CiAJCXNuZF9vcHRpOTN4X2ZyZWUoY29kZWMpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTg2Myw3ICsxODYzLDcgQEAKIAkJcm1pZGkgPSBOVUxMOwogCWVsc2UKIAkJaWYgKChlcnJvciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKLQkJCQljaGlwLT5tcHVfcG9ydCwgMCwgY2hpcC0+bXB1X2lycSwgU0FfSU5URVJSVVBULAorCQkJCWNoaXAtPm1wdV9wb3J0LCAwLCBjaGlwLT5tcHVfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkJCSZybWlkaSkpKQogCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIm5vIE1QVS00MDEgZGV2aWNlIGF0IDB4JWx4P1xuIiwKIAkJCQkgICBjaGlwLT5tcHVfcG9ydCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2IxNi5jIGIvc291bmQvaXNhL3NiL3NiMTYuYwppbmRleCA3ZjdmMDVmLi5kNjRlNjdmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKQEAgLTMyNyw3ICszMjcsOCBAQAogCQkJZ290byBfX3d0X2Vycm9yOyAKIAkJfSAKIAkJYXdlX3BvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOwotCQlzbmRfcHJpbnRkZCgicG5wIFNCMTY6IHdhdmV0YWJsZSBwb3J0PTB4JWx4XG4iLCBwbnBfcG9ydF9zdGFydChwZGV2LCAwKSk7CisJCXNuZF9wcmludGRkKCJwbnAgU0IxNjogd2F2ZXRhYmxlIHBvcnQ9MHglbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcG5wX3BvcnRfc3RhcnQocGRldiwgMCkpOwogCX0gZWxzZSB7CiBfX3d0X2Vycm9yOgogCQlpZiAocGRldikgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jIGIvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCmluZGV4IGYzNDNhODIuLmYxN2RlMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCWNoaXAtPnBvcnQgPSBwb3J0OwogCQogCWlmIChyZXF1ZXN0X2lycShpcnEsIGlycV9oYW5kbGVyLCBoYXJkd2FyZSA9PSBTQl9IV19BTFM0MDAwID8KLQkJCVNBX0lOVEVSUlVQVCB8IFNBX1NISVJRIDogU0FfSU5URVJSVVBULAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEIDogSVJRRl9ESVNBQkxFRCwKIAkJCSJTb3VuZEJsYXN0ZXIiLCAodm9pZCAqKSBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzYjogY2FuJ3QgZ3JhYiBpcnEgJWRcbiIsIGlycSk7CiAJCXNuZF9zYmRzcF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NnYWxheHkuYyBiL3NvdW5kL2lzYS9zZ2FsYXh5LmMKaW5kZXggMDljOGU4Yy4uODc0MmZhNSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NnYWxheHkuYworKysgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgaWYgKHRtcCA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfc2dhbGF4eV9kdW1teV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwgInNnYWxheHkiLCBOVUxMKSkgeworCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9zZ2FsYXh5X2R1bW15X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInNnYWxheHkiLCBOVUxMKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzZ2FsYXh5OiBjYW4ndCBncmFiIGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NzY2FwZS5jIGIvc291bmQvaXNhL3NzY2FwZS5jCmluZGV4IDI3MjcxYzkuLmIxZjI1ODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zc2NhcGUuYworKysgYi9zb3VuZC9pc2Evc3NjYXBlLmMKQEAgLTkwMCw3ICs5MDAsNyBAQAogCWlmICgoZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCBkZXZudW0sCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QVTQwMV9IV19NUFU0MDEsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsIE1QVTQwMV9JTkZPX0lOVEVHUkFURUQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycSwgU0FfSU5URVJSVVBULAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnEsIElSUUZfRElTQUJMRUQsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyYXdtaWRpKSkgPT0gMCkgewogCQlzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1ID0gKHN0cnVjdCBzbmRfbXB1NDAxICopIHJhd21pZGktPnByaXZhdGVfZGF0YTsKIAkJbXB1LT5vcGVuX2lucHV0ID0gbXB1NDAxX29wZW47CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwppbmRleCA5ZWIyNzA4Li5hOGY4ZDJmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAocmVxdWVzdF9pcnEoaWNzMjExNV9pcnFbZGV2XSwgc25kX3dhdmVmcm9udF9pY3MyMTE1X2ludGVycnVwdCwKLQkJCVNBX0lOVEVSUlVQVCwgIklDUzIxMTUiLCBhY2FyZCkpIHsKKwkJCUlSUUZfRElTQUJMRUQsICJJQ1MyMTE1IiwgYWNhcmQpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byB1c2UgSUNTMjExNSBJUlEgJWRcbiIsIGljczIxMTVfaXJxW2Rldl0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCQlpZiAoKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgbWlkaV9kZXYsIE1QVTQwMV9IV19DUzQyMzIsCiAJCQkJCSAgICAgICBjczQyMzJfbXB1X3BvcnRbZGV2XSwgMCwKIAkJCQkJICAgICAgIGNzNDIzMl9tcHVfaXJxW2Rldl0sCi0JCQkJCSAgICAgICBTQV9JTlRFUlJVUFQsCisJCQkJCSAgICAgICBJUlFGX0RJU0FCTEVELAogCQkJCQkgICAgICAgTlVMTCkpIDwgMCkgewogCQkJc25kX3ByaW50ayAoS0VSTl9FUlIgImNhbid0IGFsbG9jYXRlIENTNDIzMiBNUFUtNDAxIGRldmljZVxuIik7CiAJCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggY2Y0NzZmZS4uYzMxYjM4NiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9hdTF4MDAuYworKysgYi9zb3VuZC9taXBzL2F1MXgwMC5jCkBAIC00NjUsMTMgKzQ2NSwxMyBAQAogCiAJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwogCWlmICgoYXUxMDAwLT5zdHJlYW1bUExBWUJBQ0tdLT5kbWEgPSByZXF1ZXN0X2F1MTAwMF9kbWEoRE1BX0lEX0FDOTdDX1RYLAotCQkJIkFDOTcgVFgiLCBhdTEwMDBfZG1hX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCQkJIkFDOTcgVFgiLCBhdTEwMDBfZG1hX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCWF1MTAwMC0+c3RyZWFtW1BMQVlCQUNLXSkpIDwgMCkgewogCQlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJaWYgKChhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXS0+ZG1hID0gcmVxdWVzdF9hdTEwMDBfZG1hKERNQV9JRF9BQzk3Q19SWCwKLQkJCSJBQzk3IFJYIiwgYXUxMDAwX2RtYV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwkJCSJBQzk3IFJYIiwgYXUxMDAwX2RtYV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQlhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXSkpIDwgMCl7CiAJCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL0tjb25maWcgYi9zb3VuZC9vc3MvS2NvbmZpZwppbmRleCAzYjhjZGJjLi5mNDk4MGNhIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvS2NvbmZpZworKysgYi9zb3VuZC9vc3MvS2NvbmZpZwpAQCAtNDkzLDYgKzQ5MywxOSBAQAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KIAkgIGNvbmZpZ3VyaW5nIHRoaXMgY2FyZC4KIAorY29uZmlnIFNPVU5EX1NTQ0FQRQorCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNPVU5EX09TUworCWhlbHAKKwkgIEFuc3dlciBZIGlmIHlvdSBoYXZlIGEgc291bmQgY2FyZCBiYXNlZCBvbiB0aGUgRW5zb25pcSBTb3VuZFNjYXBlCisJICBjaGlwc2V0LiBTdWNoIGNhcmRzIGFyZSBiZWluZyBtYW51ZmFjdHVyZWQgYXQgbGVhc3QgYnkgRW5zb25pcSwgU3BlYQorCSAgYW5kIFJldmVhbCAoUmV2ZWFsIG1ha2VzIGFsc28gb3RoZXIgY2FyZHMpLgorCisJICBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgeW91IGhhdmUgdG8gYWRkCisJICAic3NjYXBlPTxpbz4sPGlycT4sPGRtYT4sPG1wdWlvPiw8bXB1aXJxPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kCisJICBsaW5lLgorCisKIGNvbmZpZyBTT1VORF9WTUlESQogCXRyaXN0YXRlICJMb29wYmFjayBNSURJIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09VTkRfT1NTCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODE2LmMgYi9zb3VuZC9vc3MvYWQxODE2LmMKaW5kZXggOTU1ODZkZS4uMjkwNTc4MyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTgxNi5jCisrKyBiL3NvdW5kL29zcy9hZDE4MTYuYwpAQCAtNDEsNyArNDEsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCBlMDRmYTQ5Li4zYjQ1ZTExIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC00MSw3ICs0MSw2IEBACiAgKgkJVGVzdGVkLiBCZWxpZXZlZCBmdWxseSBmdW5jdGlvbmFsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODg5LmMgYi9zb3VuZC9vc3MvYWQxODg5LmMKaW5kZXggYTRjYTc1Ni4uZjU2Zjg3MCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTg4OS5jCisrKyBiL3NvdW5kL29zcy9hZDE4ODkuYwpAQCAtMjYsNyArMjYsNiBAQAogICoKICAqICRJZDogYWQxODg5LmMsdiAxLjMgMjAwMi8xMC8xOSAyMTozMTo0NCBncnVuZGxlciBFeHAgJAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtMTAxMSw3ICsxMDEwLDcgQEAKIAkJZ290byBvdXQyOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgYWQxODg5X2ludGVycnVwdCwgU0FfU0hJUlEsIERFVk5BTUUsIGRldikgIT0gMCkgeworCWlmIChyZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgYWQxODg5X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIERFVk5BTUUsIGRldikgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgREVWTkFNRSAiOiB1bmFibGUgdG8gcmVxdWVzdCBpbnRlcnJ1cHRcbiIpOwogCQlnb3RvIG91dDM7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2FlZHNwMTYuYyBiL3NvdW5kL29zcy9hZWRzcDE2LmMKaW5kZXggYjU1NjI2My4uNTFlMWZkZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FlZHNwMTYuYworKysgYi9zb3VuZC9vc3MvYWVkc3AxNi5jCkBAIC0yMyw3ICsyMyw2IEBACiAgKiBJbmNsdWRlIHRoZSBtYWluIE9TUyBMaXRlIGhlYWRlciBmaWxlLiBJdCBpbmNsdWRlIGFsbCB0aGUgb3MsIE9TUyBMaXRlLCBldGMKICAqIGhlYWRlcnMgbmVlZGVkIGJ5IHRoaXMgc291cmNlLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWxpNTQ1NS5jIGIvc291bmQvb3NzL2FsaTU0NTUuYwppbmRleCA2MmJiOTM2Li43MGRjZDcwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWxpNTQ1NS5jCisrKyBiL3NvdW5kL29zcy9hbGk1NDU1LmMKQEAgLTM0NjAsNyArMzQ2MCw3IEBACiAJY2FyZC0+Y2hhbm5lbFs0XS5udW0gPSA0OwogCS8qIGNsYWltIG91ciBpb3NwYWNlIGFuZCBpcnEgKi8KIAlyZXF1ZXN0X3JlZ2lvbihjYXJkLT5pb2Jhc2UsIDI1NiwgY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSk7Ci0JaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgJmFsaV9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShjYXJkLT5pcnEsICZhbGlfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCWNhcmRfbmFtZXNbcGNpX2lkLT5kcml2ZXJfZGF0YV0sIGNhcmQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWxpX2F1ZGlvOiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICVkXG4iLAogCQkgICAgICAgY2FyZC0+aXJxKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTEwMDAuYyBiL3NvdW5kL29zcy9hdTEwMDAuYwppbmRleCBlYWNiMGFlLi5lMzc5NjIzIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYXUxMDAwLmMKKysrIGIvc291bmQvb3NzL2F1MTAwMC5jCkBAIC0yMDE1LDE0ICsyMDE1LDE0IEBACiAJaWYgKChzLT5kbWFfZGFjLmRtYW5yID0gcmVxdWVzdF9hdTEwMDBfZG1hKERNQV9JRF9BQzk3Q19UWCwKIAkJCQkJCSAgICJhdWRpbyBEQUMiLAogCQkJCQkJICAgZGFjX2RtYV9pbnRlcnJ1cHQsCi0JCQkJCQkgICBTQV9JTlRFUlJVUFQsIHMpKSA8IDApIHsKKwkJCQkJCSAgIElSUUZfRElTQUJMRUQsIHMpKSA8IDApIHsKIAkJZXJyKCJDYW4ndCBnZXQgREFDIERNQSIpOwogCQlnb3RvIGVycl9kbWExOwogCX0KIAlpZiAoKHMtPmRtYV9hZGMuZG1hbnIgPSByZXF1ZXN0X2F1MTAwMF9kbWEoRE1BX0lEX0FDOTdDX1JYLAogCQkJCQkJICAgImF1ZGlvIEFEQyIsCiAJCQkJCQkgICBhZGNfZG1hX2ludGVycnVwdCwKLQkJCQkJCSAgIFNBX0lOVEVSUlVQVCwgcykpIDwgMCkgeworCQkJCQkJICAgSVJRRl9ESVNBQkxFRCwgcykpIDwgMCkgewogCQllcnIoIkNhbid0IGdldCBBREMgRE1BIik7CiAJCWdvdG8gZXJyX2RtYTI7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2J0YXVkaW8uYyBiL3NvdW5kL29zcy9idGF1ZGlvLmMKaW5kZXggYmZlM2I1My4uMzI0YTgxZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2J0YXVkaW8uYworKysgYi9zb3VuZC9vc3MvYnRhdWRpby5jCkBAIC05NjYsNyArOTY2LDcgQEAKICAgICAgICAgYnR3cml0ZSh+MFUsIFJFR19JTlRfU1RBVCk7CiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CiAKLQlpZiAoKHJjID0gcmVxdWVzdF9pcnEoYnRhLT5pcnEsIGJ0YXVkaW9faXJxLCBTQV9TSElSUXxTQV9JTlRFUlJVUFQsCisJaWYgKChyYyA9IHJlcXVlc3RfaXJxKGJ0YS0+aXJxLCBidGF1ZGlvX2lycSwgSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCwKIAkJCSAgICAgICJidGF1ZGlvIiwodm9pZCAqKWJ0YSkpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiYnRhdWRpbzogY2FuJ3QgcmVxdWVzdCBpcnEgKHJjPSVkKVxuIixyYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY21wY2kuYyBiL3NvdW5kL29zcy9jbXBjaS5jCmluZGV4IGRlNjBhMDUuLmVhNTFhYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9jbXBjaS5jCisrKyBiL3NvdW5kL29zcy9jbXBjaS5jCkBAIC0zMTIyLDcgKzMxMjIsNyBAQAogCXdybWl4ZXIocywgRFNQX01JWF9EQVRBUkVTRVRJRFgsIDApOwogCiAJLyogcmVxdWVzdCBpcnEgKi8KLQlpZiAoKHJldCA9IHJlcXVlc3RfaXJxKHMtPmlycSwgY21faW50ZXJydXB0LCBTQV9TSElSUSwgImNtcGNpIiwgcykpKSB7CisJaWYgKChyZXQgPSByZXF1ZXN0X2lycShzLT5pcnEsIGNtX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJjbXBjaSIsIHMpKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNtcGNpOiBpcnEgJXUgaW4gdXNlXG4iLCBzLT5pcnEpOwogCQlnb3RvIGVycl9pcnE7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2NzNDIzMi5jIGIvc291bmQvb3NzL2NzNDIzMi5jCmluZGV4IGM3Zjg2ZjAuLmI2OTI0YzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9jczQyMzIuYworKysgYi9zb3VuZC9vc3MvY3M0MjMyLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICAqCU1hcmN1cyBNZWlzc25lcgkJQWRkZWQgSVNBIFBuUCBzdXBwb3J0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC00MDUsNyArNDA0LDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIGNzNDIzMl9wbnBfdGFibGUpOwogCi1zdGF0aWMgaW50IGNzNDIzMl9wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNzNDIzMl9wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19pbmZvICppc2FwbnBjZmc7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9jczQyODEvY3M0MjgxbS5jIGIvc291bmQvb3NzL2NzNDI4MS9jczQyODFtLmMKaW5kZXggMDAwNDQ0Mi4uMDQwMGE0MSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2NzNDI4MS9jczQyODFtLmMKKysrIGIvc291bmQvb3NzL2NzNDI4MS9jczQyODFtLmMKQEAgLTQzNDYsNyArNDM0Niw3IEBACiAJcy0+cGNpZGV2ID0gcGNpZGV2OwogCXMtPmlycSA9IHBjaWRldi0+aXJxOwogCWlmIChyZXF1ZXN0X2lycQotCSAgICAocy0+aXJxLCBjczQyODFfaW50ZXJydXB0LCBTQV9TSElSUSwgIkNyeXN0YWwgQ1M0MjgxIiwgcykpIHsKKwkgICAgKHMtPmlycSwgY3M0MjgxX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJDcnlzdGFsIENTNDI4MSIsIHMpKSB7CiAJCUNTX0RCR09VVChDU19JTklUIHwgQ1NfRVJST1IsIDEsCiAJCQkgIHByaW50ayhLRVJOX0VSUiAiY3M0MjgxOiBpcnEgJXUgaW4gdXNlXG4iLCBzLT5pcnEpKTsKIAkJZ290byBlcnJfaXJxOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2NzNDZ4eC5jIGIvc291bmQvb3NzL2NzNDZ4eC5jCmluZGV4IDk5NGM3MWUuLjUxOTViZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9jczQ2eHguYworKysgYi9zb3VuZC9vc3MvY3M0Nnh4LmMKQEAgLTUxNzcsNyArNTE3Nyw3IEBACiAJCWNhcmQtPmJhMS5uYW1lLnJlZyA9PSAwKQogCQlnb3RvIGZhaWwyOwogCQkKLQlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCAmY3NfaW50ZXJydXB0LCBTQV9TSElSUSwgImNzNDZ4eCIsIGNhcmQpKSB7CisJaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgJmNzX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJjczQ2eHgiLCBjYXJkKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNzNDZ4eDogdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAlZFxuIiwgY2FyZC0+aXJxKTsKIAkJZ290byBmYWlsMjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hYnVmLmMgYi9zb3VuZC9vc3MvZG1hYnVmLmMKaW5kZXggYmFmNDI0NC4uMTVjZTcxMSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYWJ1Zi5jCisrKyBiL3NvdW5kL29zcy9kbWFidWYuYwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJfQogCXJldHVybiAwOwogfQotLyogYXF1aXJlcyBsb2NrICovCisvKiBhY3F1aXJlcyBsb2NrICovCiBpbnQgRE1BYnVmX2dldHJkYnVmZmVyKGludCBkZXYsIGNoYXIgKipidWYsIGludCAqbGVuLCBpbnQgZG9udGJsb2NrKQogewogCXN0cnVjdCBhdWRpb19vcGVyYXRpb25zICphZGV2ID0gYXVkaW9fZGV2c1tkZXZdOwpAQCAtODIxLDcgKzgyMSw3IEBACiAJKnNpemUgPSBsZW4gJiB+U0FNUExFX1JPVU5EVVA7CiAJcmV0dXJuICgqc2l6ZSA+IDApOwogfQotLyogYXF1aXJlcyBsb2NrICAqLworLyogYWNxdWlyZXMgbG9jayAgKi8KIGludCBETUFidWZfZ2V0d3JidWZmZXIoaW50IGRldiwgY2hhciAqKmJ1ZiwgaW50ICpzaXplLCBpbnQgZG9udGJsb2NrKQogewogCXN0cnVjdCBhdWRpb19vcGVyYXRpb25zICphZGV2ID0gYXVkaW9fZGV2c1tkZXZdOwpAQCAtODU1LDcgKzg1NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hcC0+bG9jayxmbGFncyk7CiAJcmV0dXJuIDA7CiB9Ci0vKiBoYXMgdG8gYXF1aXJlIGRtYXAtPmxvY2sgKi8KKy8qIGhhcyB0byBhY3F1aXJlIGRtYXAtPmxvY2sgKi8KIGludCBETUFidWZfbW92ZV93cnBvaW50ZXIoaW50IGRldiwgaW50IGwpCiB7CiAJc3RydWN0IGF1ZGlvX29wZXJhdGlvbnMgKmFkZXYgPSBhdWRpb19kZXZzW2Rldl07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaCBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZC5oCmluZGV4IGExYjBiOTIuLjI1ZGQ1YTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZC5oCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjZGVmaW5lIF9kbWFzb3VuZF9oXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBTTkRfTkRFVlMJMjU2CS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgZGV2aWNlcyAqLwogI2RlZmluZSBTTkRfREVWX0NUTAkwCS8qIENvbnRyb2wgcG9ydCAvZGV2L21peGVyICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCmluZGV4IGM4ZTIxMDMuLjQzNTk5MDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCkBAIC02Nyw3ICs2Nyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTM3NSwxMCArMzc0LDcgQEAKIAkJKmdwaW9fcG9sID0gKnBwOwogCWVsc2UKIAkJKmdwaW9fcG9sID0gMTsKLQlpZiAobnAtPm5faW50cnMgPiAwKQotCQlyZXR1cm4gbnAtPmludHJzWzBdLmxpbmU7Ci0JCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yODY1LDE0ICsyODYxLDEzIEBACiAJICogb3RoZXIgaW5mbyBpZiBuZWNlc3NhcnkgKGVhcmx5IEFXQUNTIHdlIHdhbnQgdG8gcmVhZCBjaGlwIGlkcykKIAkgKi8KIAotCWlmIChvZl9nZXRfYWRkcmVzcyhpbywgMiwgTlVMTCwgTlVMTCkgPT0gTlVMTCB8fCBpby0+bl9pbnRycyA8IDMpIHsKKwlpZiAob2ZfZ2V0X2FkZHJlc3MoaW8sIDIsIE5VTEwsIE5VTEwpID09IE5VTEwpIHsKIAkJLyogT0sgLSBtYXliZSB3ZSBuZWVkIHRvIHVzZSB0aGUgJ2F3YWNzJyBub2RlIChvbiBlYXJsaWVyCiAJCSAqIG1hY2hpbmVzKS4KIAkJICovCiAJCWlmIChhd2Fjc19ub2RlKSB7CiAJCQlpbyA9IGF3YWNzX25vZGUgOwotCQkJaWYgKG9mX2dldF9hZGRyZXNzKGlvLCAyLCBOVUxMLCBOVUxMKSA9PSBOVUxMIHx8Ci0JCQkgICAgaW8tPm5faW50cnMgPCAzKSB7CisJCQlpZiAob2ZfZ2V0X2FkZHJlc3MoaW8sIDIsIE5VTEwsIE5VTEwpID09IE5VTEwpIHsKIAkJCQlwcmludGsoImRtYXNvdW5kX3BtYWM6IGNhbid0IHVzZSAlc1xuIiwKIAkJCQkgICAgICAgaW8tPmZ1bGxfbmFtZSk7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yOTQxLDkgKzI5MzYsOSBAQAogCWlmIChhd2Fjc19yZXZpc2lvbiA9PSBBV0FDU19TQ1JFQU1FUiAmJiBhd2FjcykKIAkJYXdhY3NfcmVjYWxpYnJhdGUoKTsKIAotCWF3YWNzX2lycSA9IGlvLT5pbnRyc1swXS5saW5lOwotCWF3YWNzX3R4X2lycSA9IGlvLT5pbnRyc1sxXS5saW5lOwotCWF3YWNzX3J4X2lycSA9IGlvLT5pbnRyc1syXS5saW5lOworCWF3YWNzX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGlvLCAwKTsKKwlhd2Fjc190eF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChpbywgMSk7CisJYXdhY3NfcnhfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoaW8sIDIpOwogCiAJLyogSGFjayBmb3IgbGVnYWN5IGNyYXAgdGhhdCB3aWxsIGJlIGtpbGxlZCBzb21lZGF5ICovCiAJYXdhY3Nfbm9kZSA9IGlvOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX3BhdWxhLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfcGF1bGEuYwppbmRleCA0OTQwNzBhLi42OGUxZDhmIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfcGF1bGEuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfcGF1bGEuYwpAQCAtMTYsNyArMTYsNiBAQAogCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYyBiL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYwppbmRleCAzNzIxYzU4Li5jNGNlOTRkIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMKKysrIGIvc291bmQvb3NzL2VtdTEwazEvbWFpbi5jCkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogCWNhcmQtPnBjaV9kZXYgPSBwY2lfZGV2OwogCiAJLyogUmVzZXJ2ZSBJUlEgTGluZSAqLwotCWlmIChyZXF1ZXN0X2lycShjYXJkLT5pcnEsIGVtdTEwazFfaW50ZXJydXB0LCBTQV9TSElSUSwgY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwgY2FyZCkpIHsKKwlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBlbXUxMGsxX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGNhcmRfbmFtZXNbcGNpX2lkLT5kcml2ZXJfZGF0YV0sIGNhcmQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZW11MTBrMTogSVJRIGluIHVzZVxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnJfaXJxOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2VzMTM3MC5jIGIvc291bmQvb3NzL2VzMTM3MC5jCmluZGV4IDA5NGY1NjkuLjEzZjQ4MzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9lczEzNzAuYworKysgYi9zb3VuZC9vc3MvZXMxMzcwLmMKQEAgLTI2NTAsNyArMjY1MCw3IEBACiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnJfcmVnaW9uOwogCX0KLQlpZiAoKHJldD1yZXF1ZXN0X2lycShzLT5pcnEsIGVzMTM3MF9pbnRlcnJ1cHQsIFNBX1NISVJRLCAiZXMxMzcwIixzKSkpIHsKKwlpZiAoKHJldD1yZXF1ZXN0X2lycShzLT5pcnEsIGVzMTM3MF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiZXMxMzcwIixzKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlczEzNzA6IGlycSAldSBpbiB1c2VcbiIsIHMtPmlycSk7CiAJCWdvdG8gZXJyX2lycTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZXMxMzcxLmMgYi9zb3VuZC9vc3MvZXMxMzcxLmMKaW5kZXggNDQwMGM4NS4uYTJmZmU3MiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VzMTM3MS5jCisrKyBiL3NvdW5kL29zcy9lczEzNzEuYwpAQCAtMjkwNSw3ICsyOTA1LDcgQEAKIAkJcmVzID0gLUVCVVNZOwogCQlnb3RvIGVycl9yZWdpb247CiAJfQotCWlmICgocmVzPXJlcXVlc3RfaXJxKHMtPmlycSwgZXMxMzcxX2ludGVycnVwdCwgU0FfU0hJUlEsICJlczEzNzEiLHMpKSkgeworCWlmICgocmVzPXJlcXVlc3RfaXJxKHMtPmlycSwgZXMxMzcxX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJlczEzNzEiLHMpKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJpcnEgJXUgaW4gdXNlXG4iLCBzLT5pcnEpOwogCQlnb3RvIGVycl9pcnE7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2Vzc3NvbG8xLmMgYi9zb3VuZC9vc3MvZXNzc29sbzEuYwppbmRleCA2ODYxNTYzLi44MmY0MGEwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZXNzc29sbzEuYworKysgYi9zb3VuZC9vc3MvZXNzc29sbzEuYwpAQCAtMjM5Miw3ICsyMzkyLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJzb2xvMTogaW8gcG9ydHMgaW4gdXNlXG4iKTsKIAkJZ290byBlcnJfcmVnaW9uNDsKIAl9Ci0JaWYgKChyZXQ9cmVxdWVzdF9pcnEocy0+aXJxLHNvbG8xX2ludGVycnVwdCxTQV9TSElSUSwiRVNTIFNvbG8xIixzKSkpIHsKKwlpZiAoKHJldD1yZXF1ZXN0X2lycShzLT5pcnEsc29sbzFfaW50ZXJydXB0LElSUUZfU0hBUkVELCJFU1MgU29sbzEiLHMpKSkgewogCQlwcmludGsoS0VSTl9FUlIgInNvbG8xOiBpcnEgJXUgaW4gdXNlXG4iLCBzLT5pcnEpOwogCQlnb3RvIGVycl9pcnE7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2ZvcnRlLmMgYi9zb3VuZC9vc3MvZm9ydGUuYwppbmRleCAwMjk0ZWVjLi5lYTFjMDIwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZm9ydGUuYworKysgYi9zb3VuZC9vc3MvZm9ydGUuYwpAQCAtMjAyNiw3ICsyMDI2LDcgQEAKIAljaGlwLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBjaV9kZXYsIDApOwogCWNoaXAtPmlycSA9IHBjaV9kZXYtPmlycTsKIAotCWlmIChyZXF1ZXN0X2lycSAoY2hpcC0+aXJxLCBmb3J0ZV9pbnRlcnJ1cHQsIFNBX1NISVJRLCBEUklWRVJfTkFNRSwKKwlpZiAocmVxdWVzdF9pcnEgKGNoaXAtPmlycSwgZm9ydGVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsCiAJCQkgY2hpcCkpIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUEZYICJVbmFibGUgdG8gcmVzZXJ2ZSBJUlEiKTsKIAkJcmV0ID0gLUVJTzsKQEAgLTIwMzUsOCArMjAzNSw5IEBACiAJCiAJcGNpX3NldF9kcnZkYXRhIChwY2lfZGV2LCBjaGlwKTsKIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiRk04MDEgY2hpcCBmb3VuZCBhdCAweCUwNGxYLTB4JTA0bFggSVJRICV1XG4iLCAKLQkJY2hpcC0+aW9iYXNlLCBwY2lfcmVzb3VyY2VfZW5kIChwY2lfZGV2LCAwKSwgY2hpcC0+aXJxKTsKKwlwcmludGsgKEtFUk5fSU5GTyBQRlggIkZNODAxIGNoaXAgZm91bmQgYXQgMHglMDRsWC0weCUxNmxsWCBJUlEgJXVcbiIsCisJCWNoaXAtPmlvYmFzZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfZW5kIChwY2lfZGV2LCAwKSwKKwkJY2hpcC0+aXJxKTsKIAogCS8qIFBvd2VyIGl0IHVwICovCiAJaWYgKChyZXQgPSBmb3J0ZV9jaGlwX2luaXQgKGNoaXApKSA9PSAwKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2hhbDIuYyBiL3NvdW5kL29zcy9oYWwyLmMKaW5kZXggZGQ0ZjU5ZC4uODBhYjQwMiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2hhbDIuYworKysgYi9zb3VuZC9vc3MvaGFsMi5jCkBAIC0xNDc5LDcgKzE0NzksNyBAQAogCWhwYzMtPnBidXNfZG1hY2ZnW2hhbDItPmRhYy5wYnVzLnBidXNucl1bMF0gPSAweDgyMDg4NDQ7CiAJaHBjMy0+cGJ1c19kbWFjZmdbaGFsMi0+YWRjLnBidXMucGJ1c25yXVswXSA9IDB4ODIwODg0NDsKIAotCWlmIChyZXF1ZXN0X2lycShTR0lfSFBDRE1BX0lSUSwgaGFsMl9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShTR0lfSFBDRE1BX0lSUSwgaGFsMl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJaGFsMnN0ciwgaGFsMikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJIQUwyOiBDYW4ndCBnZXQgaXJxICVkXG4iLCBTR0lfSFBDRE1BX0lSUSk7CiAJCXJldCA9IC1FQUdBSU47CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvaTgxMF9hdWRpby5jIGIvc291bmQvb3NzL2k4MTBfYXVkaW8uYwppbmRleCBkZDJiODcxLi5kZGNkZGMyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvaTgxMF9hdWRpby5jCisrKyBiL3NvdW5kL29zcy9pODEwX2F1ZGlvLmMKQEAgLTM0MTMsNyArMzQxMyw3IEBACiAJCWdvdG8gb3V0X2lvc3BhY2U7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgJmk4MTBfaW50ZXJydXB0LCBTQV9TSElSUSwKKwlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCAmaTgxMF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwgY2FyZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpODEwX2F1ZGlvOiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICVkXG4iLCBjYXJkLT5pcnEpOwogCQlnb3RvIG91dF9pb3NwYWNlOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2l0ZTgxNzIuYyBiL3NvdW5kL29zcy9pdGU4MTcyLmMKaW5kZXggMDBhYzFjOS4uNjhhYWIzNiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2l0ZTgxNzIuYworKysgYi9zb3VuZC9vc3MvaXRlODE3Mi5jCkBAIC0yMDE5LDcgKzIwMTksNyBAQAogCQkgICAgcy0+aW8sIHMtPmlvICsgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsMCktMSk7CiAJCWdvdG8gZXJyX3JlZ2lvbjsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKHMtPmlycSwgaXQ4MTcyX2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCWlmIChyZXF1ZXN0X2lycShzLT5pcnEsIGl0ODE3Ml9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQlJVDgxNzJfTU9EVUxFX05BTUUsIHMpKSB7CiAJCWVycigiaXJxICV1IGluIHVzZSIsIHMtPmlycSk7CiAJCWdvdG8gZXJyX2lycTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9rYWhsdWEuYyBiL3NvdW5kL29zcy9rYWhsdWEuYwppbmRleCAyODM1YTdjLi4xMmU3YjMwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mva2FobHVhLmMKKysrIGIvc291bmQvb3NzL2thaGx1YS5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKglzYW1lIG1hbm5lci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbWFlc3Ryby5jIGIvc291bmQvb3NzL21hZXN0cm8uYwppbmRleCBlNjQ3ZjJmLi4xZDk4ZDEwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvbWFlc3Ryby5jCisrKyBiL3NvdW5kL29zcy9tYWVzdHJvLmMKQEAgLTM1NDUsNyArMzU0NSw3IEBACiAJCW1peGVyX3B1c2hfc3RhdGUoY2FyZCk7CiAJfQogCQotCWlmKChyZXQ9cmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBlc3NfaW50ZXJydXB0LCBTQV9TSElSUSwgY2FyZF9uYW1lc1tjYXJkX3R5cGVdLCBjYXJkKSkpCisJaWYoKHJldD1yZXF1ZXN0X2lycShjYXJkLT5pcnEsIGVzc19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBjYXJkX25hbWVzW2NhcmRfdHlwZV0sIGNhcmQpKSkKIAl7CiAJCXByaW50ayhLRVJOX0VSUiAibWFlc3RybzogdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAlZCxcbiIsIGNhcmQtPmlycSk7CiAJCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIoY2FyZC0+ZGV2X21peGVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9tYWVzdHJvMy5jIGIvc291bmQvb3NzL21hZXN0cm8zLmMKaW5kZXggNGE1ZTQyMy4uNTU0OGUzYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21hZXN0cm8zLmMKKysrIGIvc291bmQvb3NzL21hZXN0cm8zLmMKQEAgLTI2OTQsNyArMjY5NCw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBtM19pbnRlcnJ1cHQsIFNBX1NISVJRLCBjYXJkX25hbWVzW2NhcmQtPmNhcmRfdHlwZV0sIGNhcmQpKSB7CisgICAgaWYocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBtM19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBjYXJkX25hbWVzW2NhcmQtPmNhcmRfdHlwZV0sIGNhcmQpKSB7CiAKICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAlZCxcbiIsIGNhcmQtPmlycSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9tc25kX2NsYXNzaWMuaCBiL3NvdW5kL29zcy9tc25kX2NsYXNzaWMuaAppbmRleCA4M2MzYzQ2Zi4uN2ZmZWE1MiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21zbmRfY2xhc3NpYy5oCisrKyBiL3NvdW5kL29zcy9tc25kX2NsYXNzaWMuaApAQCAtMzAsNyArMzAsNiBAQAogI2lmbmRlZiBfX01TTkRfQ0xBU1NJQ19ICiAjZGVmaW5lIF9fTVNORF9DTEFTU0lDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIERTUF9OVU1JTwkJCQkweDEwCiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMgYi9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5jCmluZGV4IDBjMmRiNjUuLjZkNzc2M2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMKKysrIGIvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYwpAQCAtMzksNyArMzksNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5oIGIvc291bmQvb3NzL21zbmRfcGlubmFjbGUuaAppbmRleCBlODVhZWY0Li5jY2U5MTE0IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5oCisrKyBiL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpZm5kZWYgX19NU05EX1BJTk5BQ0xFX0gKICNkZWZpbmUgX19NU05EX1BJTk5BQ0xFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIERTUF9OVU1JTwkJCQkweDA4CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9uZWNfdnJjNTQ3Ny5jIGIvc291bmQvb3NzL25lY192cmM1NDc3LmMKaW5kZXggMjFjMTk1NGQuLjZmN2YyZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9uZWNfdnJjNTQ3Ny5jCisrKyBiL3NvdW5kL29zcy9uZWNfdnJjNTQ3Ny5jCkBAIC0xOTA5LDcgKzE5MDksNyBAQAogCQkgICAgICAgcy0+aW8sIHMtPmlvICsgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsMCktMSk7CiAJCWdvdG8gZXJyX3JlZ2lvbjsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKHMtPmlycSwgdnJjNTQ3N19hYzk3X2ludGVycnVwdCwgU0FfSU5URVJSVVBULAorCWlmIChyZXF1ZXN0X2lycShzLT5pcnEsIHZyYzU0NzdfYWM5N19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQlWUkM1NDc3X0FDOTdfTU9EVUxFX05BTUUsIHMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImlycSAldSBpbiB1c2VcbiIsIHMtPmlycSk7CiAJCWdvdG8gZXJyX2lycTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9ubTI1Nl9hdWRpby5jIGIvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKaW5kZXggNmU2NjJhYy4uNzc2MGRkZCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL25tMjU2X2F1ZGlvLmMKQEAgLTczMyw3ICs3MzMsNyBAQAogbm0yNTZfZ3JhYkludGVycnVwdCAoc3RydWN0IG5tMjU2X2luZm8gKmNhcmQpCiB7CiAgICAgaWYgKGNhcmQtPmhhc19pcnErKyA9PSAwKSB7Ci0JaWYgKHJlcXVlc3RfaXJxIChjYXJkLT5pcnEsIGNhcmQtPmludHJvdXRpbmUsIFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycSAoY2FyZC0+aXJxLCBjYXJkLT5pbnRyb3V0aW5lLCBJUlFGX1NIQVJFRCwKIAkJCSAiTk0yNTZfYXVkaW8iLCBjYXJkKSA8IDApIHsKIAkgICAgcHJpbnRrIChLRVJOX0VSUiAiTk0yNTY6IGNhbid0IG9idGFpbiBJUlEgJWRcbiIsIGNhcmQtPmlycSk7CiAJICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9vcGwzc2EyLmMgYi9zb3VuZC9vc3Mvb3BsM3NhMi5jCmluZGV4IDBlMTYxYzYuLmFlYzA1YTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9vcGwzc2EyLmMKKysrIGIvc291bmQvb3NzL29wbDNzYTIuYwpAQCAtNjQsNyArNjQsNiBAQAogICogICAKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3BhczJfY2FyZC5jIGIvc291bmQvb3NzL3BhczJfY2FyZC5jCmluZGV4IGM5Njk2ZGMuLjk3NjY2MDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wYXMyX2NhcmQuYworKysgYi9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKQEAgLTQsNyArNCw2IEBACiAgKiBEZXRlY3Rpb24gcm91dGluZSBmb3IgdGhlIFBybyBBdWRpbyBTcGVjdHJ1bSBjYXJkcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IGE2MTdjY2IuLjM3ZWUyMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTU3LDcgKzU3LDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9ybWU5Nnh4LmMgYi9zb3VuZC9vc3Mvcm1lOTZ4eC5jCmluZGV4IGExZWM5ZDEuLmYxN2QyNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9ybWU5Nnh4LmMKKysrIGIvc291bmQvb3NzL3JtZTk2eHguYwpAQCAtOTk0LDcgKzk5NCw3IEBACiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KSkKIAkJZ290byBlcnJfaXJxOwotCWlmIChyZXF1ZXN0X2lycShzLT5pcnEsIHJtZTk2eHhfaW50ZXJydXB0LCBTQV9TSElSUSwgInJtZTk2eHgiLCBzKSkgeworCWlmIChyZXF1ZXN0X2lycShzLT5pcnEsIHJtZTk2eHhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgInJtZTk2eHgiLCBzKSkgewogCQlwcmludGsoS0VSTl9FUlIgUk1FX01FU1MiIGlycSAldSBpbiB1c2VcbiIsIHMtPmlycSk7CiAJCWdvdG8gZXJyX2lycTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2JfY2FyZC5jIGIvc291bmQvb3NzL3NiX2NhcmQuYwppbmRleCA0NzA4Y2JkLi44NjY2MjkxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfY2FyZC5jCisrKyBiL3NvdW5kL29zcy9zYl9jYXJkLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIDAyLTA3LTIwMDMgQnVnIG1hZGUgaXQgaW50byBmaXJzdCByZWxlYXNlLiBUYWtlIHR3by4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMgYi9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKaW5kZXggNWY5NTVlMy4uMzViYWI2ZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX2NvbW1vbi5jCisrKyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwpAQCAtMjYsNyArMjYsNiBAQAogICogQ2hyaXMgUmFua2luIDxyYW5raW5jQHppcHdvcmxkLmNvbS5hdT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjc4LDcgKzY3Nyw3IEBACiAJCSAqCXdpbGwgZ2V0IHNoYXJlZCBQQ0kgaXJxIGxpbmVzIHdlIG11c3QgY29wZS4KIAkJICovCiAJCSAKLQkJaW50IGk9KGRldmMtPmNhcHMmU0JfUENJX0lSUSk/U0FfU0hJUlE6MDsKKwkJaW50IGk9KGRldmMtPmNhcHMmU0JfUENJX0lSUSk/SVJRRl9TSEFSRUQ6MDsKIAkJCiAJCWlmIChyZXF1ZXN0X2lycShod19jb25maWctPmlycSwgc2JpbnRyLCBpLCAic291bmRibGFzdGVyIiwgZGV2YykgPCAwKQogCQl7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKaW5kZXggM2Y3NDI3Yy4uN2IxNjhkOCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCisrKyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTI5OCw3ICsyOTcsNyBAQAogCWRhY19hdWRpb19zZXRfcmF0ZSgpOwogCiAJcmV0dmFsID0KLQkgICAgcmVxdWVzdF9pcnEoVElNRVIxX0lSUSwgdGltZXIxX2ludGVycnVwdCwgU0FfSU5URVJSVVBULCBNT0ROQU1FLCAwKTsKKwkgICAgcmVxdWVzdF9pcnEoVElNRVIxX0lSUSwgdGltZXIxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgTU9ETkFNRSwgMCk7CiAJaWYgKHJldHZhbCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzaF9kYWNfYXVkaW86IElSUSAlZCByZXF1ZXN0IGZhaWxlZFxuIiwKIAkJICAgICAgIFRJTUVSMV9JUlEpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NvbmljdmliZXMuYyBiL3NvdW5kL29zcy9zb25pY3ZpYmVzLmMKaW5kZXggNDJiZDI3Ni4uOGVhNTMyZCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvbmljdmliZXMuYworKysgYi9zb3VuZC9vc3Mvc29uaWN2aWJlcy5jCkBAIC0yNjMyLDcgKzI2MzIsNyBAQAogCXdyaW5kaXIocywgU1ZfQ0lQQ01TUjEsICgoODAwMCAqIDY1NTM2IC8gRlVMTFJBVEUpID4+IDgpICYgMHhmZik7CiAJd3JpbmRpcihzLCBTVl9DSUFEQ09VVFBVVCwgMCk7CiAJLyogcmVxdWVzdCBpcnEgKi8KLQlpZiAoKHJldD1yZXF1ZXN0X2lycShzLT5pcnEsc3ZfaW50ZXJydXB0LFNBX1NISVJRLCJTMyBTb25pY1ZpYmVzIixzKSkpIHsKKwlpZiAoKHJldD1yZXF1ZXN0X2lycShzLT5pcnEsc3ZfaW50ZXJydXB0LElSUUZfU0hBUkVELCJTMyBTb25pY1ZpYmVzIixzKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzdjogaXJxICV1IGluIHVzZVxuIiwgcy0+aXJxKTsKIAkJZ290byBlcnJfaXJxOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZF9jb25maWcuaCBiL3NvdW5kL29zcy9zb3VuZF9jb25maWcuaAppbmRleCA5ZjkxMmI4Li4xYTAwYTMyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRfY29uZmlnLmgKKysrIGIvc291bmQvb3NzL3NvdW5kX2NvbmZpZy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmICBfU09VTkRfQ09ORklHX0hfCiAjZGVmaW5lICBfU09VTkRfQ09ORklHX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvdW5kLmg+CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwppbmRleCBkMzNiYjQ2Li4wODYwZDY3IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMKKysrIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBDaHJpc3RvcGggSGVsbHdpZyA6IFNvbWUgY2xlYW51cCB3b3JrICgyMDAwLzAzLzAxKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgInNvdW5kX2NvbmZpZy5oIgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTM4LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC01NjQsOSArNTYyLDYgQEAKIAlzb3VuZF9kbWFwX2ZsYWcgPSAoZG1hYnVmID4gMCA/IDEgOiAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGRldl9saXN0KSAvIHNpemVvZiAqZGV2X2xpc3Q7IGkrKykgewotCQlkZXZmc19ta19jZGV2KE1LREVWKFNPVU5EX01BSk9SLCBkZXZfbGlzdFtpXS5taW5vciksCi0JCQkJU19JRkNIUiB8IGRldl9saXN0W2ldLm1vZGUsCi0JCQkJInNvdW5kLyVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CiAJCWNsYXNzX2RldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCiAJCQkJICAgIE1LREVWKFNPVU5EX01BSk9SLCBkZXZfbGlzdFtpXS5taW5vciksCiAJCQkJICAgIE5VTEwsICIlcyIsIGRldl9saXN0W2ldLm5hbWUpOwpAQCAtNTc0LDE1ICs1NjksMTAgQEAKIAkJaWYgKCFkZXZfbGlzdFtpXS5udW0pCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGogPSAxOyBqIDwgKmRldl9saXN0W2ldLm51bTsgaisrKSB7Ci0JCQlkZXZmc19ta19jZGV2KE1LREVWKFNPVU5EX01BSk9SLAotCQkJCQkJZGV2X2xpc3RbaV0ubWlub3IgKyAoaioweDEwKSksCi0JCQkJCVNfSUZDSFIgfCBkZXZfbGlzdFtpXS5tb2RlLAotCQkJCQkic291bmQvJXMlZCIsIGRldl9saXN0W2ldLm5hbWUsIGopOworCQlmb3IgKGogPSAxOyBqIDwgKmRldl9saXN0W2ldLm51bTsgaisrKQogCQkJY2xhc3NfZGV2aWNlX2NyZWF0ZShzb3VuZF9jbGFzcywgTlVMTCwKIAkJCQkJICAgIE1LREVWKFNPVU5EX01BSk9SLCBkZXZfbGlzdFtpXS5taW5vciArIChqKjB4MTApKSwKIAkJCQkJICAgIE5VTEwsICIlcyVkIiwgZGV2X2xpc3RbaV0ubmFtZSwgaik7Ci0JCX0KIAl9CiAKIAlpZiAoc291bmRfbmJsb2NrcyA+PSAxMDI0KQpAQCAtNTk2LDE0ICs1ODYsMTEgQEAKIAlpbnQgaSwgajsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGRldl9saXN0KSAvIHNpemVvZiAqZGV2X2xpc3Q7IGkrKykgewotCQlkZXZmc19yZW1vdmUoInNvdW5kLyVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CiAJCWNsYXNzX2RldmljZV9kZXN0cm95KHNvdW5kX2NsYXNzLCBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpKTsKIAkJaWYgKCFkZXZfbGlzdFtpXS5udW0pCiAJCQljb250aW51ZTsKLQkJZm9yIChqID0gMTsgaiA8ICpkZXZfbGlzdFtpXS5udW07IGorKykgewotCQkJZGV2ZnNfcmVtb3ZlKCJzb3VuZC8lcyVkIiwgZGV2X2xpc3RbaV0ubmFtZSwgaik7CisJCWZvciAoaiA9IDE7IGogPCAqZGV2X2xpc3RbaV0ubnVtOyBqKyspCiAJCQljbGFzc19kZXZpY2VfZGVzdHJveShzb3VuZF9jbGFzcywgTUtERVYoU09VTkRfTUFKT1IsIGRldl9saXN0W2ldLm1pbm9yICsgKGoqMHgxMCkpKTsKLQkJfQogCX0KIAkKIAl1bnJlZ2lzdGVyX3NvdW5kX3NwZWNpYWwoMSk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdHJpZGVudC5jIGIvc291bmQvb3NzL3RyaWRlbnQuYwppbmRleCBlNjFhNDU0Li4yODEzZTRjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdHJpZGVudC5jCisrKyBiL3NvdW5kL29zcy90cmlkZW50LmMKQEAgLTE5NCw3ICsxOTQsNiBAQAogICoJCXNlbQktCWd1YXJkIGRtYWJ1Ziwgd3JpdGUgcmUtZW50cnkgZXRjCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC00NDczLDcgKzQ0NzIsNyBAQAogCiAJLyogY2xhaW0gb3VyIGlycSAqLwogCXJjID0gLUVOT0RFVjsKLQlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCAmdHJpZGVudF9pbnRlcnJ1cHQsIFNBX1NISVJRLCAKKwlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCAmdHJpZGVudF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwgY2FyZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0cmlkZW50OiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICVkXG4iLCAKIAkJICAgICAgIGNhcmQtPmlycSk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMgYi9zb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMKaW5kZXggMjM0M2RlZC4uMDhkOGM5NCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCisrKyBiL3NvdW5kL29zcy92aWE4MmN4eHhfYXVkaW8uYwpAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZSBWSUFfVkVSU0lPTgkiMS45LjEtYWM0LTIuNSIKIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTMwOSw3ICszMDgsNyBAQAogCXVuc2lnbmVkIHNpeGNoYW5uZWw6IDE7CS8qIDgyMzMvMzUgd2l0aCA2IGNoYW5uZWwgc3VwcG9ydCAqLwogCXVuc2lnbmVkIHZvbHVtZTogMTsKIAotCWludCBsb2NrZWRfcmF0ZSA6IDE7CisJdW5zaWduZWQgbG9ja2VkX3JhdGUgOiAxOwogCQogCWludCBtaXhlcl92b2w7CQkvKiA4MjMzLzM1IHZvbHVtZSAgLSBub3QgeWV0IGltcGxlbWVudGVkICovCiAKQEAgLTIwMTQsNyArMjAxMyw3IEBACiAJCQl0bXA4IHw9IFZJQV9DUjQ4X0ZNX1RSQVBfVE9fTk1JOwogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChjYXJkLT5wZGV2LCBWSUFfRk1fTk1JX0NUUkwsIHRtcDgpOwogCQl9Ci0JCWlmIChyZXF1ZXN0X2lycSAoY2FyZC0+cGRldi0+aXJxLCB2aWFfaW50ZXJydXB0LCBTQV9TSElSUSwgVklBX01PRFVMRV9OQU1FLCBjYXJkKSkgeworCQlpZiAocmVxdWVzdF9pcnEgKGNhcmQtPnBkZXYtPmlycSwgdmlhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIFZJQV9NT0RVTEVfTkFNRSwgY2FyZCkpIHsKIAkJCXByaW50ayAoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gb2J0YWluIElSUSAlZCwgYWJvcnRpbmdcbiIsCiAJCQkJY2FyZC0+cGRldi0+aXJxKTsKIAkJCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgLUVCVVNZXG4iKTsKQEAgLTIwMjMsNyArMjAyMiw3IEBACiAJfQogCWVsc2UgCiAJewotCQlpZiAocmVxdWVzdF9pcnEgKGNhcmQtPnBkZXYtPmlycSwgdmlhX25ld19pbnRlcnJ1cHQsIFNBX1NISVJRLCBWSUFfTU9EVUxFX05BTUUsIGNhcmQpKSB7CisJCWlmIChyZXF1ZXN0X2lycSAoY2FyZC0+cGRldi0+aXJxLCB2aWFfbmV3X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIFZJQV9NT0RVTEVfTkFNRSwgY2FyZCkpIHsKIAkJCXByaW50ayAoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gb2J0YWluIElSUSAlZCwgYWJvcnRpbmdcbiIsCiAJCQkJY2FyZC0+cGRldi0+aXJxKTsKIAkJCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgLUVCVVNZXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92aWRjLmMgYi9zb3VuZC9vc3MvdmlkYy5jCmluZGV4IDAwZmU1Y2UuLjg5MzJkODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy92aWRjLmMKKysrIGIvc291bmQvb3NzL3ZpZGMuYwpAQCAtMTcsNyArMTcsNiBAQAogICogV2UgY3VycmVudGx5IHN1cHBvcnQgYSBtaXhlciBkZXZpY2UsIGJ1dCBpdCBpcyBjdXJyZW50bHkgbm9uLWZ1bmN0aW9uYWwuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMgYi9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jCmluZGV4IGFmY2I1MjQuLjIyZDI2NjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMKKysrIGIvc291bmQvb3NzL3dhdmVhcnRpc3QuYwpAQCAtMzUsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy93YXZmcm9udC5jIGIvc291bmQvb3NzL3dhdmZyb250LmMKaW5kZXggYjFhNGVlYi4uMWRlYzM5NSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3dhdmZyb250LmMKKysrIGIvc291bmQvb3NzL3dhdmZyb250LmMKQEAgLTIyNjgsNyArMjI2OCw3IEBACiAJfQogCiAJaWYgKHJlcXVlc3RfaXJxIChkZXYuaXJxLCB3YXZlZnJvbnRpbnRyLAotCQkJIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwKKwkJCSBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJICJ3YXZlZnJvbnQgc3ludGgiLCAmZGV2KSA8IDApIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiSVJRICVkIG5vdCBhdmFpbGFibGUhXG4iLAogCQkJZGV2LmlycSk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvd2ZfbWlkaS5jIGIvc291bmQvb3NzL3dmX21pZGkuYwppbmRleCA3YjE2N2I3Li4zZjNhMzkwMCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3dmX21pZGkuYworKysgYi9zb3VuZC9vc3Mvd2ZfbWlkaS5jCkBAIC04MjAsNyArODIwLDcgQEAKIAogCS8qIE9LLCBub3cgd2UncmUgY29uZmlndXJlZCB0byBoYW5kbGUgYW4gaW50ZXJydXB0IC4uLiAqLwogCi0JaWYgKHJlcXVlc3RfaXJxIChwaHlzX2Rldi0+aXJxLCB3Zl9tcHVpbnRyLCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxIChwaHlzX2Rldi0+aXJxLCB3Zl9tcHVpbnRyLCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJICJ3YXZlZnJvbnQgbWlkaSIsIHBoeXNfZGV2KSA8IDApIHsKIAogCQlwcmludGsgKEtFUk5fRVJSICJXRi1NUFU6IEZhaWxlZCB0byBhbGxvY2F0ZSBJUlElZFxuIiwKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy95bWZwY2kuYyBiL3NvdW5kL29zcy95bWZwY2kuYwppbmRleCBiZjkwYzEyLi42ZTIyNDcyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MveW1mcGNpLmMKKysrIGIvc291bmQvb3NzL3ltZnBjaS5jCkBAIC0yNTczLDcgKzI1NzMsNyBAQAogCQlnb3RvIG91dF9kaXNhYmxlX2RzcDsKIAl5bWZfbWVtbG9hZChjb2RlYyk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIHltZl9pbnRlcnJ1cHQsIFNBX1NISVJRLCAieW1mcGNpIiwgY29kZWMpICE9IDApIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIHltZl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAieW1mcGNpIiwgY29kZWMpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ5bWZwY2k6IHVuYWJsZSB0byByZXF1ZXN0IElSUSAlZFxuIiwKIAkJICAgIHBjaWRldi0+aXJxKTsKIAkJZ290byBvdXRfbWVtZnJlZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9LY29uZmlnIGIvc291bmQvcGNpL0tjb25maWcKaW5kZXggZDM3MzQ2Yi4uMjNlNTRjZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL0tjb25maWcKKysrIGIvc291bmQvcGNpL0tjb25maWcKQEAgLTIzMyw2ICsyMzMsMTQzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M1NTM1YXVkaW8uCiAKK2NvbmZpZyBTTkRfREFSTEEyMAorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBEYXJsYTIwIgorCWRlcGVuZHMgb24gU05ECisJZGVwZW5kcyBvbiBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIERhcmxhLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtZGFybGEyMAorCitjb25maWcgU05EX0dJTkEyMAorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBHaW5hMjAiCisJZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gR2luYS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWdpbmEyMAorCitjb25maWcgU05EX0xBWUxBMjAKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgTGF5bGEyMCIKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gRldfTE9BREVSCisJc2VsZWN0IFNORF9SQVdNSURJCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBMYXlsYS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWxheWxhMjAKKworY29uZmlnIFNORF9EQVJMQTI0CisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIERhcmxhMjQiCisJZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gRGFybGEyNC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWRhcmxhMjQKKworY29uZmlnIFNORF9HSU5BMjQKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgR2luYTI0IgorCWRlcGVuZHMgb24gU05ECisJZGVwZW5kcyBvbiBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIEdpbmEyNC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWdpbmEyNAorCitjb25maWcgU05EX0xBWUxBMjQKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgTGF5bGEyNCIKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gRldfTE9BREVSCisJc2VsZWN0IFNORF9SQVdNSURJCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBMYXlsYTI0LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbGF5bGEyNAorCitjb25maWcgU05EX01PTkEKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgTW9uYSIKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gRldfTE9BREVSCisJc2VsZWN0IFNORF9SQVdNSURJCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBNb25hLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbW9uYQorCitjb25maWcgU05EX01JQQorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBNaWEiCisJZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUkFXTUlESQorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gTWlhIGFuZCBNaWEtbWlkaS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLW1pYQorCitjb25maWcgU05EX0VDSE8zRworCXRyaXN0YXRlICIoRWNob2F1ZGlvKSAzRyBjYXJkcyIKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gRldfTE9BREVSCisJc2VsZWN0IFNORF9SQVdNSURJCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBHaW5hM0cgYW5kIExheWxhM0cuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1lY2hvM2cKKworY29uZmlnIFNORF9JTkRJR08KKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgSW5kaWdvIgorCWRlcGVuZHMgb24gU05ECisJZGVwZW5kcyBvbiBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIEluZGlnby4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnbworCitjb25maWcgU05EX0lORElHT0lPCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBJTyIKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gRldfTE9BREVSCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBJbmRpZ28gSU8uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29pbworCitjb25maWcgU05EX0lORElHT0RKCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBESiIKKwlkZXBlbmRzIG9uIFNORAorCWRlcGVuZHMgb24gRldfTE9BREVSCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBJbmRpZ28gREouCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29kagorCiBjb25maWcgU05EX0VNVTEwSzEKIAl0cmlzdGF0ZSAiRW11MTBrMSAoU0IgTGl2ZSEsIEF1ZGlneSwgRS1tdSBBUFMpIgogCWRlcGVuZHMgb24gU05ECkBAIC00MjAsOCArNTU3LDggQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbnRlbDh4MC4KIAogY29uZmlnIFNORF9JTlRFTDhYME0KLQl0cmlzdGF0ZSAiSW50ZWwvU2lTL25WaWRpYS9BTUQgTUM5NyBNb2RlbSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNORCAmJiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiSW50ZWwvU2lTL25WaWRpYS9BTUQgTUM5NyBNb2RlbSIKKwlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfQUM5N19DT0RFQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRlZCBNQzk3IG1vZGVtIG9uCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvTWFrZWZpbGUgYi9zb3VuZC9wY2kvTWFrZWZpbGUKaW5kZXggY2JhNTEwNS4uZTA2NzM2ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9NYWtlZmlsZQpAQCAtNTcsNiArNTcsNyBAQAogCWNhMDEwNi8gXAogCWNzNDZ4eC8gXAogCWNzNTUzNWF1ZGlvLyBcCisJZWNob2F1ZGlvLyBcCiAJZW11MTBrMS8gXAogCWhkYS8gXAogCWljZTE3MTIvIFwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCA3ZjE5N2M3Li4wOTRjZmMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC0xODI0LDYgKzE4MjQsOCBAQAogCQkuZ2V0ID0gc25kX2FjOTdfYWQxODg4X2xvaHBzZWxfZ2V0LAogCQkucHV0ID0gc25kX2FjOTdfYWQxODg4X2xvaHBzZWxfcHV0CiAJfSwKKwlBQzk3X1NJTkdMRSgiVl9SRUZPVVQgRW5hYmxlIiwgQUM5N19BRF9NSVNDLCAyLCAxLCAxKSwKKwlBQzk3X1NJTkdMRSgiSGlnaCBQYXNzIEZpbHRlciBFbmFibGUiLCBBQzk3X0FEX1RFU1QyLCAxMiwgMSwgMSksCiAJQUM5N19TSU5HTEUoIlNwcmVhZCBGcm9udCB0byBTdXJyb3VuZCBhbmQgQ2VudGVyL0xGRSIsIEFDOTdfQURfTUlTQywgNywgMSwgMCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBkNDJiZjQ1Li5mN2FlZjhjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC05NDcsNyArOTQ3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CS8qIG9ubHkgbm93IGNhbiB3ZSBjYWxsIGFkMTg4OV9mcmVlICovCiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9hZDE4ODlfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUfFNBX1NISVJRLCBjYXJkLT5kcml2ZXIsICh2b2lkKiljaGlwKSkgeworCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgY2FyZC0+ZHJpdmVyLCAodm9pZCopY2hpcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IG9idGFpbiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2FkMTg4OV9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDVkZmRiZjY2Li5lMGE4MTVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yMTg1LDcgKzIxODUsNyBAQAogCQlyZXR1cm4gZXJyOwogCWNvZGVjLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGNvZGVjLT5wY2ksIDApOwogCi0JaWYgKHJlcXVlc3RfaXJxKGNvZGVjLT5wY2ktPmlycSwgc25kX2FsaV9jYXJkX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiQUxJIDU0NTEiLCAodm9pZCAqKWNvZGVjKSkgeworCWlmIChyZXF1ZXN0X2lycShjb2RlYy0+cGNpLT5pcnEsIHNuZF9hbGlfY2FyZF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJBTEkgNTQ1MSIsICh2b2lkICopY29kZWMpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZXF1ZXN0IGlycS5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCA5MDFiMDhhLi5hOWMzODk2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC03MjQsNyArNzI0LDcgQEAKIAllbHNlCiAJCWlycV9oYW5kbGVyID0gc25kX2FsczMwMF9pbnRlcnJ1cHQ7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIGlycV9oYW5kbGVyLCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBpcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKIAkJCQkJY2FyZC0+c2hvcnRuYW1lLCAodm9pZCAqKWNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfYWxzMzAwX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggZjE4YThjMC4uOWZiYjA2NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTU3OCw3ICsxNTc4LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYXRpaXhwX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F0aWl4cF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfYXRpaXhwX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggNDA3MzkwNS4uN2RjZjQ5NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMTI1MSw3ICsxMjUxLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYXRpaXhwX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F0aWl4cF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfYXRpaXhwX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwppbmRleCA4YTNiMTE4Li5lZjE4OWQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCX0KIAogCWlmICgoZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIHZvcnRleF9pbnRlcnJ1cHQsCi0JICAgICAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwgQ0FSRF9OQU1FX1NIT1JULAorCSAgICAgICAgICAgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBDQVJEX05BTUVfU0hPUlQsCiAJICAgICAgICAgICAgICAgICAgICAgICBjaGlwKSkgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CiAJCWdvdG8gaXJxX291dDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDZlNjJkYWYuLjE1NDQ3YTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMTcyNCw3ICsxNzI0LDcgQEAKIAljaGlwLT5zeW50aF9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMyk7CiAJY2hpcC0+bWl4ZXJfcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDQpOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYXpmMzMyOF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgY2FyZC0+c2hvcnRuYW1lLCAodm9pZCAqKWNoaXApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYXpmMzMyOF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsIGNhcmQtPnNob3J0bmFtZSwgKHZvaWQgKiljaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dF9lcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IGMzMzY0MmQuLjRkNDI3N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC03NDcsNyArNzQ3LDcgQEAKIAlzbmRfYnQ4N3hfd3JpdGVsKGNoaXAsIFJFR19JTlRfTUFTSywgMCk7CiAJc25kX2J0ODd4X3dyaXRlbChjaGlwLCBSRUdfSU5UX1NUQVQsIE1ZX0lOVEVSUlVQVFMpOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYnQ4N3hfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9idDg3eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSJCdDg3eCBhdWRpbyIsIGNoaXApKSB7CiAJCXNuZF9idDg3eF9mcmVlKGNoaXApOwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnFcbiIpOwpAQCAtODg4LDggKzg4OCw5IEBACiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQnQ4N3giKTsKIAlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgIkJyb29rdHJlZSBCdCV4IiwgcGNpLT5kZXZpY2UpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2x4LCBpcnEgJWkiLAotCQljYXJkLT5zaG9ydG5hbWUsIHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApLCBjaGlwLT5pcnEpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAlI2xseCwgaXJxICVpIiwKKwkJY2FyZC0+c2hvcnRuYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApLAorCQljaGlwLT5pcnEpOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJCdDg3eCIpOwogCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggNTliZjliZC4uYTMwYzAxOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKIAl9CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jYTAxMDZfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUfFNBX1NISVJRLCAic25kX2NhMDEwNiIsCisJCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAic25kX2NhMDEwNiIsCiAJCQkodm9pZCAqKWNoaXApKSB7CiAJCXNuZF9jYTAxMDZfZnJlZShjaGlwKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDA5MzhjMTUuLjAzNzY2YWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTI4NjIsNyArMjg2Miw3IEBACiAJY20tPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY21pcGNpX2ludGVycnVwdCwKLQkJCVNBX0lOVEVSUlVQVHxTQV9TSElSUSwgY2FyZC0+ZHJpdmVyLCBjbSkpIHsKKwkJCUlSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsIGNhcmQtPmRyaXZlciwgY20pKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfY21pcGNpX2ZyZWUoY20pOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IGU3N2E0Y2UzLi5kMTgwMjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC0xMzg2LDcgKzEzODYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M0MjgxX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2NzNDI4MV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQkiQ1M0MjgxIiwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9jczQyODFfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKaW5kZXggNWMyMTE0NC4uODk0NTQ1ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKQEAgLTM4NTMsNyArMzg1Myw3IEBACiAJCX0KIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jczQ2eHhfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M0Nnh4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKIAkJCSJDUzQ2WFgiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2NzNDZ4eF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwppbmRleCA5MWMxOGExLi5jMTJiMjRjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYworKysgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJY3M1NTM1YXUtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2NzNTUzNWF1ZGlvX2ludGVycnVwdCwKLQkJCVNBX0lOVEVSUlVQVHxTQV9TSElSUSwgIkNTNTUzNSBBdWRpbyIsIGNzNTUzNWF1KSkgeworCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkNTNTUzNSBBdWRpbyIsIGNzNTUzNWF1KSkgewogCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIHNuZGZhaWw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU3NmFlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQpAQCAtMCwwICsxLDMwIEBACisjCisjIE1ha2VmaWxlIGZvciBBTFNBIEVjaG9hdWRpbyBzb3VuZGNhcmQgZHJpdmVycworIyBDb3B5cmlnaHQgKGMpIDIwMDMgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKyMKKworc25kLWRhcmxhMjAtb2JqcyA6PSBkYXJsYTIwLm8KK3NuZC1naW5hMjAtb2JqcyA6PSBnaW5hMjAubworc25kLWxheWxhMjAtb2JqcyA6PSBsYXlsYTIwLm8KK3NuZC1kYXJsYTI0LW9ianMgOj0gZGFybGEyNC5vCitzbmQtZ2luYTI0LW9ianMgOj0gZ2luYTI0Lm8KK3NuZC1sYXlsYTI0LW9ianMgOj0gbGF5bGEyNC5vCitzbmQtbW9uYS1vYmpzIDo9IG1vbmEubworc25kLW1pYS1vYmpzIDo9IG1pYS5vCitzbmQtZWNobzNnLW9ianMgOj0gZWNobzNnLm8KK3NuZC1pbmRpZ28tb2JqcyA6PSBpbmRpZ28ubworc25kLWluZGlnb2lvLW9ianMgOj0gaW5kaWdvaW8ubworc25kLWluZGlnb2RqLW9ianMgOj0gaW5kaWdvZGoubworCitvYmotJChDT05GSUdfU05EX0RBUkxBMjApICs9IHNuZC1kYXJsYTIwLm8KK29iai0kKENPTkZJR19TTkRfR0lOQTIwKSArPSBzbmQtZ2luYTIwLm8KK29iai0kKENPTkZJR19TTkRfTEFZTEEyMCkgKz0gc25kLWxheWxhMjAubworb2JqLSQoQ09ORklHX1NORF9EQVJMQTI0KSArPSBzbmQtZGFybGEyNC5vCitvYmotJChDT05GSUdfU05EX0dJTkEyNCkgKz0gc25kLWdpbmEyNC5vCitvYmotJChDT05GSUdfU05EX0xBWUxBMjQpICs9IHNuZC1sYXlsYTI0Lm8KK29iai0kKENPTkZJR19TTkRfTU9OQSkgKz0gc25kLW1vbmEubworb2JqLSQoQ09ORklHX1NORF9NSUEpICs9IHNuZC1taWEubworb2JqLSQoQ09ORklHX1NORF9FQ0hPM0cpICs9IHNuZC1lY2hvM2cubworb2JqLSQoQ09ORklHX1NORF9JTkRJR08pICs9IHNuZC1pbmRpZ28ubworb2JqLSQoQ09ORklHX1NORF9JTkRJR09JTykgKz0gc25kLWluZGlnb2lvLm8KK29iai0kKENPTkZJR19TTkRfSU5ESUdPREopICs9IHNuZC1pbmRpZ29kai5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MTA4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjAuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIEVDSE9HQUxTX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9EQVJMQTIwCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkRhcmxhMjAiCisjZGVmaW5lIEVDSE9DQVJEX0hBU19NT05JVE9SCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTgJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTEwCS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQkxMAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk4CS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTgJLyogMiAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTEwCS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQkxMAorCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKKyNkZWZpbmUgRldfREFSTEEyMF9EU1AJMAorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImRhcmxhMjBfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDEwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIERhcmxhMjAgcmV2LjAgKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbiA9IDQ0MTAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCisJLyogT25lIHBhZ2UgKDRrKSBjb250YWlucyA1MTIgaW5zdHJ1Y3Rpb25zLiBJIGRvbid0IGtub3cgaWYgdGhlIGh3CisJc3VwcG9ydHMgbGlzdHMgbG9uZ2VyIHRoYW4gdGhpcy4gSW4gdGhpcyBjYXNlIHBlcmlvZHNfbWF4PTIyMCBpcyBhCisJc2FmZSBsaW1pdCB0byBtYWtlIHN1cmUgdGhlIGxpc3QgbmV2ZXIgZXhjZWVkcyA1MTIgaW5zdHJ1Y3Rpb25zLiAqLworfTsKKworCisjaW5jbHVkZSAiZGFybGEyMF9kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1OWUzYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMF9kc3AuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBEYXJsYTIwXG4iKSk7CisJc25kX2Fzc2VydCgoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSA9PSBEQVJMQTIwLCByZXR1cm4gLUVOT0RFVik7CisKKwlpZiAoKGVyciA9IGluaXRfZHNwX2NvbW1fcGFnZShjaGlwKSkpIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19EQVJMQTIwX0RTUF07CisJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOworCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKKy8qIFRoZSBEYXJsYTIwIGhhcyBubyBleHRlcm5hbCBjbG9jayBzb3VyY2VzICovCitzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7Cit9CisKKworCisvKiBUaGUgRGFybGEyMCBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTggY2xvY2tfc3RhdGUsIHNwZGlmX3N0YXR1czsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDQ0MTAwOgorCQljbG9ja19zdGF0ZSA9IEdEX0NMT0NLXzQ0OworCQlzcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfNDQ7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfNDg7CisJCXNwZGlmX3N0YXR1cyA9IEdEX1NQRElGX1NUQVRVU180ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2xvY2tfc3RhdGUgPSBHRF9DTE9DS19OT0NIQU5HRTsKKwkJc3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX05PQ0hBTkdFOworCQlicmVhazsKKwl9CisKKwlpZiAoY2hpcC0+Y2xvY2tfc3RhdGUgPT0gY2xvY2tfc3RhdGUpCisJCWNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfTk9DSEFOR0U7CisJaWYgKHNwZGlmX3N0YXR1cyA9PSBjaGlwLT5zcGRpZl9zdGF0dXMpCisJCXNwZGlmX3N0YXR1cyA9IEdEX1NQRElGX1NUQVRVU19OT0NIQU5HRTsKKworCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMihyYXRlKTsKKwljaGlwLT5jb21tX3BhZ2UtPmdkX2Nsb2NrX3N0YXRlID0gY2xvY2tfc3RhdGU7CisJY2hpcC0+Y29tbV9wYWdlLT5nZF9zcGRpZl9zdGF0dXMgPSBzcGRpZl9zdGF0dXM7CisJY2hpcC0+Y29tbV9wYWdlLT5nZF9yZXNhbXBsZXJfc3RhdGUgPSAzOwkvKiBtYWdpYyBudW1iZXIgLSBzaG91bGQgYWx3YXlzIGJlIDMgKi8KKworCS8qIFNhdmUgdGhlIG5ldyBhdWRpbyBzdGF0ZSBpZiBpdCBjaGFuZ2VkICovCisJaWYgKGNsb2NrX3N0YXRlICE9IEdEX0NMT0NLX05PQ0hBTkdFKQorCQljaGlwLT5jbG9ja19zdGF0ZSA9IGNsb2NrX3N0YXRlOworCWlmIChzcGRpZl9zdGF0dXMgIT0gR0RfU1BESUZfU1RBVFVTX05PQ0hBTkdFKQorCQljaGlwLT5zcGRpZl9zdGF0dXMgPSBzcGRpZl9zdGF0dXM7CisJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX0dEX0FVRElPX1NUQVRFKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5YTk4MgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNC5jCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIEVDSE9HQUxTX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9EQVJMQTI0CisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkRhcmxhMjQiCisjZGVmaW5lIEVDSE9DQVJEX0hBU19NT05JVE9SCisjZGVmaW5lIEVDSE9DQVJEX0hBU19JTlBVVF9OT01JTkFMX0xFVkVMCisjZGVmaW5lIEVDSE9DQVJEX0hBU19PVVRQVVRfTk9NSU5BTF9MRVZFTAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRVhURVJOQUxfQ0xPQ0sKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAyICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JMTAJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTEwCisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JOAkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JMTAJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTEwCisKKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJlY2hvYXVkaW8uaCIKKworI2RlZmluZSBGV19EQVJMQTI0X0RTUAkwCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAiZGFybGEyNF9kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNDAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgRGFybGEyNCByZXYuMCAqLworCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNDEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgRGFybGEyNCByZXYuMSAqLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9CVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJU05EUlZfUENNX1JBVEVfOTYwMDAsCisJLnJhdGVfbWluID0gODAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorCS8qIE9uZSBwYWdlICg0aykgY29udGFpbnMgNTEyIGluc3RydWN0aW9ucy4gSSBkb24ndCBrbm93IGlmIHRoZSBodworCXN1cHBvcnRzIGxpc3RzIGxvbmdlciB0aGFuIHRoaXMuIEluIHRoaXMgY2FzZSBwZXJpb2RzX21heD0yMjAgaXMgYQorCXNhZmUgbGltaXQgdG8gbWFrZSBzdXJlIHRoZSBsaXN0IG5ldmVyIGV4Y2VlZHMgNTEyIGluc3RydWN0aW9ucy4gKi8KK307CisKKworI2luY2x1ZGUgImRhcmxhMjRfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OTM4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjRfZHNwLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gRGFybGEyNFxuIikpOworCXNuZF9hc3NlcnQoKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgPT0gREFSTEEyNCwgcmV0dXJuIC1FTk9ERVYpOworCisJaWYgKChlcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCkpKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfREFSTEEyNF9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfAorCQlFQ0hPX0NMT0NLX0JJVF9FU1lOQzsKKworCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CisKKwkvKiBNYXAgdGhlIERTUCBjbG9jayBkZXRlY3QgYml0cyB0byB0aGUgZ2VuZXJpYyBkcml2ZXIgY2xvY2sKKwkgICBkZXRlY3QgYml0cyAqLworCWNsb2Nrc19mcm9tX2RzcCA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+c3RhdHVzX2Nsb2Nrcyk7CisKKwljbG9ja19iaXRzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR0xETV9DTE9DS19ERVRFQ1RfQklUX0VTWU5DKQorCQljbG9ja19iaXRzIHw9IEVDSE9fQ0xPQ0tfQklUX0VTWU5DOworCisJcmV0dXJuIGNsb2NrX2JpdHM7Cit9CisKKworCisvKiBUaGUgRGFybGEyNCBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTggY2xvY2s7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDk2MDAwOgorCQljbG9jayA9IEdEMjRfOTYwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWNsb2NrID0gR0QyNF84ODIwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xvY2sgPSBHRDI0XzQ4MDAwOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCQljbG9jayA9IEdEMjRfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCWNsb2NrID0gR0QyNF8zMjAwMDsKKwkJYnJlYWs7CisJY2FzZSAyMjA1MDoKKwkJY2xvY2sgPSBHRDI0XzIyMDUwOworCQlicmVhazsKKwljYXNlIDE2MDAwOgorCQljbG9jayA9IEdEMjRfMTYwMDA7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJCWNsb2NrID0gR0QyNF8xMTAyNTsKKwkJYnJlYWs7CisJY2FzZSA4MDAwOgorCQljbG9jayA9IEdEMjRfODAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlOiBFcnJvciwgaW52YWxpZCBzYW1wbGUgcmF0ZSAlZFxuIiwKKwkJCXJhdGUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCURFX0FDVCgoInNldF9zYW1wbGVfcmF0ZTogJWQgY2xvY2sgJWRcbiIsIHJhdGUsIGNsb2NrKSk7CisJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCisJLyogT3ZlcnJpZGUgdGhlIHNhbXBsZSByYXRlIGlmIHRoaXMgY2FyZCBpcyBzZXQgdG8gRWNobyBzeW5jLiAqLworCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX0VTWU5DKQorCQljbG9jayA9IEdEMjRfRVhUX1NZTkM7CisKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSk7CS8qIGlnbm9yZWQgYnkgdGhlIERTUCA/ICovCisJY2hpcC0+Y29tbV9wYWdlLT5nZF9jbG9ja19zdGF0ZSA9IGNsb2NrOworCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1NFVF9HRF9BVURJT19TVEFURSk7Cit9CisKKworCitzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spCit7CisJc25kX2Fzc2VydChjbG9jayA9PSBFQ0hPX0NMT0NLX0lOVEVSTkFMIHx8CisJCSAgIGNsb2NrID09IEVDSE9fQ0xPQ0tfRVNZTkMsIHJldHVybiAtRUlOVkFMKTsKKwljaGlwLT5pbnB1dF9jbG9jayA9IGNsb2NrOworCXJldHVybiBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA5OWZlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2RlZmluZSBFQ0hPM0dfRkFNSUxZCisjZGVmaW5lIEVDSE9DQVJEX0VDSE8zRworI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJFY2hvM0ciCisjZGVmaW5lIEVDSE9DQVJEX0hBU19NT05JVE9SCisjZGVmaW5lIEVDSE9DQVJEX0hBU19BU0lDCisjZGVmaW5lIEVDSE9DQVJEX0hBU19JTlBVVF9OT01JTkFMX0xFVkVMCisjZGVmaW5lIEVDSE9DQVJEX0hBU19PVVRQVVRfTk9NSU5BTF9MRVZFTAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9NT0RFX1NXSVRDSAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfQURBVAk2CisjZGVmaW5lIEVDSE9DQVJEX0hBU19FWFRFUk5BTF9DTE9DSworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTUlESQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfUEhBTlRPTV9QT1dFUgorCisvKiBQaXBlIGluZGV4ZXMgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCWNoaXAtPnB4X2RpZ2l0YWxfb3V0CisjZGVmaW5lIFBYX0FOQUxPR19JTgljaGlwLT5weF9hbmFsb2dfaW4KKyNkZWZpbmUgUFhfRElHSVRBTF9JTgljaGlwLT5weF9kaWdpdGFsX2luCisjZGVmaW5lIFBYX05VTQkJY2hpcC0+cHhfbnVtCisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAorI2RlZmluZSBCWF9ESUdJVEFMX09VVAljaGlwLT5ieF9kaWdpdGFsX291dAorI2RlZmluZSBCWF9BTkFMT0dfSU4JY2hpcC0+YnhfYW5hbG9nX2luCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JY2hpcC0+YnhfZGlnaXRhbF9pbgorI2RlZmluZSBCWF9OVU0JCWNoaXAtPmJ4X251bQorCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJMAorI2RlZmluZSBGV19FQ0hPM0dfRFNQCTEKKyNkZWZpbmUgRldfM0dfQVNJQwkyCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAibG9hZGVyX2RzcC5mdyJ9LAorCXswLCAiZWNobzNnX2RzcC5mdyJ9LAorCXswLCAiM2dfYXNpYy5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDEwMCwgMCwgMCwgMH0sCS8qIEVjaG8gM0cgKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSAJU05EUlZfUENNX1JBVEVfMzIwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJU05EUlZfUENNX1JBVEVfOTYwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSAxMDAwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNjIxNDQsCisJLnBlcmlvZF9ieXRlc19taW4gPSAzMiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEzMTA3MiwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDIyMCwKK307CisKKyNpbmNsdWRlICJlY2hvM2dfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb18zZy5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgorI2luY2x1ZGUgIm1pZGkuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2YTFkMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbG9hZF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIGludCBkc3Bfc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKK3N0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKK3N0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSk7CitzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spOworc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7CitzdGF0aWMgaW50IHNldF9waGFudG9tX3Bvd2VyKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgb24pOworc3RhdGljIGludCB3cml0ZV9jb250cm9sX3JlZyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY3RsLCB1MzIgZnJxLAorCQkJICAgICBjaGFyIGZvcmNlKTsKKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBFY2hvM0dcbiIpKTsKKwlzbmRfYXNzZXJ0KChzdWJkZXZpY2VfaWQgJiAweGZmZjApID09IEVDSE8zRywgcmV0dXJuIC1FTk9ERVYpOworCisJaWYgKChlcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCkpKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciA9CisJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKEUzR19NQUdJQ19OVU1CRVIgLyA0ODAwMCkgLSAyKTsKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+aGFzX21pZGkgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19FQ0hPM0dfRFNQXTsKKworCS8qIExvYWQgdGhlIERTUCBjb2RlIGFuZCB0aGUgQVNJQyBvbiB0aGUgUENJIGNhcmQgYW5kIGdldAorCXdoYXQgdHlwZSBvZiBleHRlcm5hbCBib3ggaXMgYXR0YWNoZWQgKi8KKwllcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApOworCisJaWYgKGVyciA8IDApIHsKKwkJcmV0dXJuIGVycjsKKwl9IGVsc2UgaWYgKGVyciA9PSBFM0dfR0lOQTNHX0JPWF9UWVBFKSB7CisJCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0JRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfAorCQkJCQkJRUNIT19DTE9DS19CSVRfU1BESUYgfAorCQkJCQkJRUNIT19DTE9DS19CSVRfQURBVDsKKwkJY2hpcC0+Y2FyZF9uYW1lID0gIkdpbmEzRyI7CisJCWNoaXAtPnB4X2RpZ2l0YWxfb3V0ID0gY2hpcC0+YnhfZGlnaXRhbF9vdXQgPSA2OworCQljaGlwLT5weF9hbmFsb2dfaW4gPSBjaGlwLT5ieF9hbmFsb2dfaW4gPSAxNDsKKwkJY2hpcC0+cHhfZGlnaXRhbF9pbiA9IGNoaXAtPmJ4X2RpZ2l0YWxfaW4gPSAxNjsKKwkJY2hpcC0+cHhfbnVtID0gY2hpcC0+YnhfbnVtID0gMjQ7CisJCWNoaXAtPmhhc19waGFudG9tX3Bvd2VyID0gVFJVRTsKKwkJY2hpcC0+aGFzbnRfaW5wdXRfbm9taW5hbF9sZXZlbCA9IFRSVUU7CisJfSBlbHNlIGlmIChlcnIgPT0gRTNHX0xBWUxBM0dfQk9YX1RZUEUpIHsKKwkJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPQlFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTCB8CisJCQkJCQlFQ0hPX0NMT0NLX0JJVF9TUERJRiB8CisJCQkJCQlFQ0hPX0NMT0NLX0JJVF9BREFUIHwKKwkJCQkJCUVDSE9fQ0xPQ0tfQklUX1dPUkQ7CisJCWNoaXAtPmNhcmRfbmFtZSA9ICJMYXlsYTNHIjsKKwkJY2hpcC0+cHhfZGlnaXRhbF9vdXQgPSBjaGlwLT5ieF9kaWdpdGFsX291dCA9IDg7CisJCWNoaXAtPnB4X2FuYWxvZ19pbiA9IGNoaXAtPmJ4X2FuYWxvZ19pbiA9IDE2OworCQljaGlwLT5weF9kaWdpdGFsX2luID0gY2hpcC0+YnhfZGlnaXRhbF9pbiA9IDI0OworCQljaGlwLT5weF9udW0gPSBjaGlwLT5ieF9udW0gPSAzMjsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljaGlwLT5kaWdpdGFsX21vZGVzID0JRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAorCQkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CisJCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9BREFUOworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9CURJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+bm9uX2F1ZGlvX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOworCXNuZF9hc3NlcnQoZXJyID49IDAsIHJldHVybiBlcnIpOworCWVyciA9IHNldF9waGFudG9tX3Bvd2VyKGNoaXAsIDApOworCXNuZF9hc3NlcnQoZXJyID49IDAsIHJldHVybiBlcnIpOworCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X3BoYW50b21fcG93ZXIoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBvbikKK3sKKwl1MzIgY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpOworCisJaWYgKG9uKQorCQljb250cm9sX3JlZyB8PSBFM0dfUEhBTlRPTV9QT1dFUjsKKwllbHNlCisJCWNvbnRyb2xfcmVnICY9IH5FM0dfUEhBTlRPTV9QT1dFUjsKKworCWNoaXAtPnBoYW50b21fcG93ZXIgPSBvbjsKKwlyZXR1cm4gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsCisJCQkJIGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciksCisJCQkJIDApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhOGRiZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTAsMCArMSwyMTk2IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCitNT0RVTEVfQVVUSE9SKCJHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFY2hvYXVkaW8gIiBFQ0hPQ0FSRF9OQU1FICIgc291bmRjYXJkcyBkcml2ZXIiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0VjaG9hdWRpbywiIEVDSE9DQVJEX05BTUUgIn19Iik7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX2VjaG9faWRzKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciAiIEVDSE9DQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgRUNIT0NBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBFQ0hPQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGNoYW5uZWxzX2xpc3RbMTBdID0gezEsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCA5OTk5OTl9OworCitzdGF0aWMgaW50IGdldF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19lbnRyeSwKKwkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnJtLCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWludCBlcnI7CisJY2hhciBuYW1lWzMwXTsKKwlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzXG4iLCBmcm0tPmRhdGEpKTsKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJlYS8lcyIsIGZybS0+ZGF0YSk7CisJaWYgKChlcnIgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3X2VudHJ5LCBuYW1lLCBwY2lfZGV2aWNlKGNoaXApKSkgPCAwKQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJnZXRfZmlybXdhcmUoKTogRmlybXdhcmUgbm90IGF2YWlsYWJsZSAoJWQpXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSkKK3sKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlERV9BQ1QoKCJmaXJtd2FyZSByZWxlYXNlZFxuIikpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCVBDTSBpbnRlcmZhY2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgYXVkaW9waXBlX2ZyZWUoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKK3sKKwlzdHJ1Y3QgYXVkaW9waXBlICpwaXBlID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHBpcGUtPnNncGFnZS5hcmVhKQorCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJnBpcGUtPnNncGFnZSk7CisJa2ZyZWUocGlwZSk7Cit9CisKKworCitzdGF0aWMgaW50IGh3X3J1bGVfY2FwdHVyZV9mb3JtYXRfYnlfY2hhbm5lbHMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKwkJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJc3RydWN0IHNuZF9tYXNrICpmID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOworCXN0cnVjdCBzbmRfbWFzayBmbXQ7CisKKwlzbmRfbWFza19hbnkoJmZtdCk7CisKKyNpZm5kZWYgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKwkvKiA+PTIgY2hhbm5lbHMgY2Fubm90IGJlIFMzMl9CRSAqLworCWlmIChjLT5taW4gPT0gMikgeworCQlmbXQuYml0c1swXSAmPSB+U05EUlZfUENNX0ZNVEJJVF9TMzJfQkU7CisJCXJldHVybiBzbmRfbWFza19yZWZpbmUoZiwgJmZtdCk7CisJfQorI2VuZGlmCisJLyogPiAyIGNoYW5uZWxzIGNhbm5vdCBiZSBVOCBhbmQgUzMyX0JFICovCisJaWYgKGMtPm1pbiA+IDIpIHsKKwkJZm10LmJpdHNbMF0gJj0gfihTTkRSVl9QQ01fRk1UQklUX1U4IHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUpOworCQlyZXR1cm4gc25kX21hc2tfcmVmaW5lKGYsICZmbXQpOworCX0KKwkvKiBNb25vIGlzIG9rIHdpdGggYW55IGZvcm1hdCAqLworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBod19ydWxlX2NhcHR1cmVfY2hhbm5lbHNfYnlfZm9ybWF0KHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCXN0cnVjdCBzbmRfbWFzayAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsIGNoOworCisJc25kX2ludGVydmFsX2FueSgmY2gpOworCisJLyogUzMyX0JFIGlzIG1vbm8gKGFuZCBzdGVyZW8pIG9ubHkgKi8KKwlpZiAoZi0+Yml0c1swXSA9PSBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSkgeworCQljaC5taW4gPSAxOworI2lmZGVmIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisJCWNoLm1heCA9IDI7CisjZWxzZQorCQljaC5tYXggPSAxOworI2VuZGlmCisJCWNoLmludGVnZXIgPSAxOworCQlyZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmY2gpOworCX0KKwkvKiBVOCBjYW4gYmUgb25seSBtb25vIG9yIHN0ZXJlbyAqLworCWlmIChmLT5iaXRzWzBdID09IFNORFJWX1BDTV9GTVRCSVRfVTgpIHsKKwkJY2gubWluID0gMTsKKwkJY2gubWF4ID0gMjsKKwkJY2guaW50ZWdlciA9IDE7CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZjaCk7CisJfQorCS8qIFMxNl9MRSwgUzI0XzNMRSBhbmQgUzMyX0xFIHN1cHBvcnQgYW55IG51bWJlciBvZiBjaGFubmVscy4gKi8KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgaHdfcnVsZV9wbGF5YmFja19mb3JtYXRfYnlfY2hhbm5lbHMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCXN0cnVjdCBzbmRfbWFzayAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKKwlzdHJ1Y3Qgc25kX21hc2sgZm10OworCXU2NCBmbWFzazsKKwlzbmRfbWFza19hbnkoJmZtdCk7CisKKwlmbWFzayA9IGZtdC5iaXRzWzBdICsgKCh1NjQpZm10LmJpdHNbMV0gPDwgMzIpOworCisJLyogPjIgY2hhbm5lbHMgbXVzdCBiZSBTMTZfTEUsIFMyNF8zTEUgb3IgUzMyX0xFICovCisJaWYgKGMtPm1pbiA+IDIpIHsKKwkJZm1hc2sgJj0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQkgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEU7CisJLyogMSBjaGFubmVsIG11c3QgYmUgUzMyX0JFIG9yIFMzMl9MRSAqLworCX0gZWxzZSBpZiAoYy0+bWF4ID09IDEpCisJCWZtYXNrICY9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfQkU7CisjaWZuZGVmIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisJLyogMiBjaGFubmVscyBjYW5ub3QgYmUgUzMyX0JFICovCisJZWxzZSBpZiAoYy0+bWluID09IDIgJiYgYy0+bWF4ID09IDIpCisJCWZtYXNrICY9IH5TTkRSVl9QQ01fRk1UQklUX1MzMl9CRTsKKyNlbmRpZgorCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlmbXQuYml0c1swXSAmPSAodTMyKWZtYXNrOworCWZtdC5iaXRzWzFdICY9ICh1MzIpKGZtYXNrID4+IDMyKTsKKwlyZXR1cm4gc25kX21hc2tfcmVmaW5lKGYsICZmbXQpOworfQorCisKKworc3RhdGljIGludCBod19ydWxlX3BsYXliYWNrX2NoYW5uZWxzX2J5X2Zvcm1hdChzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKwkJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJc3RydWN0IHNuZF9tYXNrICpmID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgY2g7CisJdTY0IGZtYXNrOworCisJc25kX2ludGVydmFsX2FueSgmY2gpOworCWNoLmludGVnZXIgPSAxOworCWZtYXNrID0gZi0+Yml0c1swXSArICgodTY0KWYtPmJpdHNbMV0gPDwgMzIpOworCisJLyogUzMyX0JFIGlzIG1vbm8gKGFuZCBzdGVyZW8pIG9ubHkgKi8KKwlpZiAoZm1hc2sgPT0gU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUpIHsKKwkJY2gubWluID0gMTsKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorCQljaC5tYXggPSAyOworI2Vsc2UKKwkJY2gubWF4ID0gMTsKKyNlbmRpZgorCS8qIFU4IGlzIHN0ZXJlbyBvbmx5ICovCisJfSBlbHNlIGlmIChmbWFzayA9PSBTTkRSVl9QQ01fRk1UQklUX1U4KQorCQljaC5taW4gPSBjaC5tYXggPSAyOworCS8qIFMxNl9MRSBhbmQgUzI0XzNMRSBtdXN0IGJlIGF0IGxlYXN0IHN0ZXJlbyAqLworCWVsc2UgaWYgKCEoZm1hc2sgJiB+KFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCSAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUpKSkKKwkJY2gubWluID0gMjsKKwllbHNlCisJCXJldHVybiAwOworCisJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJmNoKTsKK30KKworCisKKy8qIFNpbmNlIHRoZSBzYW1wbGUgcmF0ZSBpcyBhIGdsb2JhbCBzZXR0aW5nLCBkbyBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgdGhlCitzYW1wbGUgcmF0ZSBvbmx5IGlmIHRoZXJlIGlzIG9ubHkgb25lIHBjbSBkZXZpY2Ugb3Blbi4gKi8KK3N0YXRpYyBpbnQgaHdfcnVsZV9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnJhdGUgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJCQkgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSk7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHJ1bGUtPnByaXZhdGU7CisJc3RydWN0IHNuZF9pbnRlcnZhbCBmaXhlZDsKKworCWlmICghY2hpcC0+Y2FuX3NldF9yYXRlKSB7CisJCXNuZF9pbnRlcnZhbF9hbnkoJmZpeGVkKTsKKwkJZml4ZWQubWluID0gZml4ZWQubWF4ID0gY2hpcC0+c2FtcGxlX3JhdGU7CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKHJhdGUsICZmaXhlZCk7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCSAgICBzaWduZWQgY2hhciBtYXhfY2hhbm5lbHMpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXN0cnVjdCBhdWRpb3BpcGUgKnBpcGU7CisJaW50IGVyciwgaTsKKworCWlmIChtYXhfY2hhbm5lbHMgPD0gMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwljaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpZiAoIShwaXBlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1ZGlvcGlwZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHBpcGUsIDAsIHNpemVvZihzdHJ1Y3QgYXVkaW9waXBlKSk7CisJcGlwZS0+aW5kZXggPSAtMTsJCS8qIE5vdCBjb25maWd1cmVkIHlldCAqLworCisJLyogU2V0IHVwIGh3IGNhcGFiaWxpdGllcyBhbmQgY29udHJhaW50cyAqLworCW1lbWNweSgmcGlwZS0+aHcsICZwY21faGFyZHdhcmVfc2tlbCwgc2l6ZW9mKHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlKSk7CisJREVfSFdQKCgibWF4X2NoYW5uZWxzPSVkXG4iLCBtYXhfY2hhbm5lbHMpKTsKKwlwaXBlLT5jb25zdHIubGlzdCA9IGNoYW5uZWxzX2xpc3Q7CisJcGlwZS0+Y29uc3RyLm1hc2sgPSAwOworCWZvciAoaSA9IDA7IGNoYW5uZWxzX2xpc3RbaV0gPD0gbWF4X2NoYW5uZWxzOyBpKyspOworCXBpcGUtPmNvbnN0ci5jb3VudCA9IGk7CisJaWYgKHBpcGUtPmh3LmNoYW5uZWxzX21heCA+IG1heF9jaGFubmVscykKKwkJcGlwZS0+aHcuY2hhbm5lbHNfbWF4ID0gbWF4X2NoYW5uZWxzOworCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpIHsKKwkJcGlwZS0+aHcucmF0ZV9tYXggPSA0ODAwMDsKKwkJcGlwZS0+aHcucmF0ZXMgJj0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMDsKKwl9CisKKwlydW50aW1lLT5odyA9IHBpcGUtPmh3OworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHBpcGU7CisJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gYXVkaW9waXBlX2ZyZWU7CisJc25kX3BjbV9zZXRfc3luYyhzdWJzdHJlYW0pOworCisJLyogT25seSBtb25vIGFuZCBhbnkgZXZlbiBudW1iZXIgb2YgY2hhbm5lbHMgYXJlIGFsbG93ZWQgKi8KKwlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJCSAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQkJICAgICAgJnBpcGUtPmNvbnN0cikpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEFsbCBwZXJpb2RzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNpemUgKi8KKwlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsCisJCQkJCQkgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBUaGUgaHcgYWNjZXNzZXMgbWVtb3J5IGluIGNodW5rcyAzMiBmcmFtZXMgbG9uZyBhbmQgdGhleSBzaG91bGQgYmUKKwkzMi1ieXRlcy1hbGlnbmVkLiBJdCdzIG5vdCBhIHJlcXVpcmVtZW50LCBidXQgaXQgc2VlbXMgdGhhdCBJUlFzIGFyZQorCWdlbmVyYXRlZCB3aXRoIGEgcmVzb2x1dGlvbiBvZiAzMiBmcmFtZXMuIFRodXMgd2UgbmVlZCB0aGUgZm9sbG93aW5nICovCisJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLAorCQkJCQkgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsCisJCQkJCSAgICAgIDMyKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwKKwkJCQkJICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLAorCQkJCQkgICAgICAzMikpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICgoZXJyID0gc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQlod19ydWxlX3NhbXBsZV9yYXRlLCBjaGlwLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBGaW5hbGx5IGFsbG9jYXRlIGEgcGFnZSBmb3IgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QgKi8KKwlpZiAoKGVyciA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLAorCQkJCSAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJICAgICAgIFBBR0VfU0laRSwgJnBpcGUtPnNncGFnZSkpIDwgMCkgeworCQlERV9IV1AoKCJzLWcgbGlzdCBhbGxvY2F0aW9uIGZhaWxlZFxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBwY21fYW5hbG9nX2luX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgZXJyOworCisJREVfQUNUKCgicGNtX2FuYWxvZ19pbl9vcGVuXG4iKSk7CisJaWYgKChlcnIgPSBwY21fb3BlbihzdWJzdHJlYW0sIG51bV9hbmFsb2dfYnVzc2VzX2luKGNoaXApIC0KKwkJCSAgICBzdWJzdHJlYW0tPm51bWJlcikpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoKGVyciA9IHNuZF9wY21faHdfcnVsZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkJICAgICAgIGh3X3J1bGVfY2FwdHVyZV9jaGFubmVsc19ieV9mb3JtYXQsIE5VTEwsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsIC0xKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCisJCQkJICAgICAgIGh3X3J1bGVfY2FwdHVyZV9mb3JtYXRfYnlfY2hhbm5lbHMsIE5VTEwsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpKSA8IDApCisJCXJldHVybiBlcnI7CisJYXRvbWljX2luYygmY2hpcC0+b3BlbmNvdW50KTsKKwlpZiAoYXRvbWljX3JlYWQoJmNoaXAtPm9wZW5jb3VudCkgPiAxICYmIGNoaXAtPnJhdGVfc2V0KQorCQljaGlwLT5jYW5fc2V0X3JhdGU9MDsKKwlERV9IV1AoKCJwY21fYW5hbG9nX2luX29wZW4gIGNzPSVkICBvYz0lZCAgcj0lZFxuIiwKKwkJY2hpcC0+Y2FuX3NldF9yYXRlLCBhdG9taWNfcmVhZCgmY2hpcC0+b3BlbmNvdW50KSwKKwkJY2hpcC0+c2FtcGxlX3JhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgcGNtX2FuYWxvZ19vdXRfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCBtYXhfY2hhbm5lbHMsIGVycjsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwltYXhfY2hhbm5lbHMgPSBudW1fcGlwZXNfb3V0KGNoaXApOworI2Vsc2UKKwltYXhfY2hhbm5lbHMgPSBudW1fYW5hbG9nX2J1c3Nlc19vdXQoY2hpcCk7CisjZW5kaWYKKwlERV9BQ1QoKCJwY21fYW5hbG9nX291dF9vcGVuXG4iKSk7CisJaWYgKChlcnIgPSBwY21fb3BlbihzdWJzdHJlYW0sIG1heF9jaGFubmVscyAtIHN1YnN0cmVhbS0+bnVtYmVyKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQkgICAgICAgaHdfcnVsZV9wbGF5YmFja19jaGFubmVsc19ieV9mb3JtYXQsCisJCQkJICAgICAgIE5VTEwsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsIC0xKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCisJCQkJICAgICAgIGh3X3J1bGVfcGxheWJhY2tfZm9ybWF0X2J5X2NoYW5uZWxzLAorCQkJCSAgICAgICBOVUxMLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWF0b21pY19pbmMoJmNoaXAtPm9wZW5jb3VudCk7CisJaWYgKGF0b21pY19yZWFkKCZjaGlwLT5vcGVuY291bnQpID4gMSAmJiBjaGlwLT5yYXRlX3NldCkKKwkJY2hpcC0+Y2FuX3NldF9yYXRlPTA7CisJREVfSFdQKCgicGNtX2FuYWxvZ19vdXRfb3BlbiAgY3M9JWQgIG9jPSVkICByPSVkXG4iLAorCQljaGlwLT5jYW5fc2V0X3JhdGUsIGF0b21pY19yZWFkKCZjaGlwLT5vcGVuY291bnQpLAorCQljaGlwLT5zYW1wbGVfcmF0ZSkpOworCXJldHVybiAwOworfQorCisKKworI2lmZGVmIEVDSE9DQVJEX0hBU19ESUdJVEFMX0lPCisKK3N0YXRpYyBpbnQgcGNtX2RpZ2l0YWxfaW5fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCBlcnIsIG1heF9jaGFubmVsczsKKworCURFX0FDVCgoInBjbV9kaWdpdGFsX2luX29wZW5cbiIpKTsKKwltYXhfY2hhbm5lbHMgPSBudW1fZGlnaXRhbF9idXNzZXNfaW4oY2hpcCkgLSBzdWJzdHJlYW0tPm51bWJlcjsKKwlkb3duKCZjaGlwLT5tb2RlX211dGV4KTsKKwlpZiAoY2hpcC0+ZGlnaXRhbF9tb2RlID09IERJR0lUQUxfTU9ERV9BREFUKQorCQllcnIgPSBwY21fb3BlbihzdWJzdHJlYW0sIG1heF9jaGFubmVscyk7CisJZWxzZQkvKiBJZiB0aGUgY2FyZCBoYXMgQURBVCwgc3VidHJhY3QgdGhlIDYgY2hhbm5lbHMKKwkJICogdGhhdCBTL1BESUYgZG9lc24ndCBoYXZlCisJCSAqLworCQllcnIgPSBwY21fb3BlbihzdWJzdHJlYW0sIG1heF9jaGFubmVscyAtIEVDSE9DQVJEX0hBU19BREFUKTsKKworCWlmIChlcnIgPCAwKQorCQlnb3RvIGRpbl9leGl0OworCisJaWYgKChlcnIgPSBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCQkgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCSAgICAgICBod19ydWxlX2NhcHR1cmVfY2hhbm5lbHNfYnlfZm9ybWF0LCBOVUxMLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULCAtMSkpIDwgMCkKKwkJZ290byBkaW5fZXhpdDsKKwlpZiAoKGVyciA9IHNuZF9wY21faHdfcnVsZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAorCQkJCSAgICAgICBod19ydWxlX2NhcHR1cmVfZm9ybWF0X2J5X2NoYW5uZWxzLCBOVUxMLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKSkgPCAwKQorCQlnb3RvIGRpbl9leGl0OworCisJYXRvbWljX2luYygmY2hpcC0+b3BlbmNvdW50KTsKKwlpZiAoYXRvbWljX3JlYWQoJmNoaXAtPm9wZW5jb3VudCkgPiAxICYmIGNoaXAtPnJhdGVfc2V0KQorCQljaGlwLT5jYW5fc2V0X3JhdGU9MDsKKworZGluX2V4aXQ6CisJdXAoJmNoaXAtPm1vZGVfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKworCisjaWZuZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIJLyogU2VlIHRoZSBub3RlIGluIHNuZF9lY2hvX25ld19wY20oKSAqLworCitzdGF0aWMgaW50IHBjbV9kaWdpdGFsX291dF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IGVyciwgbWF4X2NoYW5uZWxzOworCisJREVfQUNUKCgicGNtX2RpZ2l0YWxfb3V0X29wZW5cbiIpKTsKKwltYXhfY2hhbm5lbHMgPSBudW1fZGlnaXRhbF9idXNzZXNfb3V0KGNoaXApIC0gc3Vic3RyZWFtLT5udW1iZXI7CisJZG93bigmY2hpcC0+bW9kZV9tdXRleCk7CisJaWYgKGNoaXAtPmRpZ2l0YWxfbW9kZSA9PSBESUdJVEFMX01PREVfQURBVCkKKwkJZXJyID0gcGNtX29wZW4oc3Vic3RyZWFtLCBtYXhfY2hhbm5lbHMpOworCWVsc2UJLyogSWYgdGhlIGNhcmQgaGFzIEFEQVQsIHN1YnRyYWN0IHRoZSA2IGNoYW5uZWxzCisJCSAqIHRoYXQgUy9QRElGIGRvZXNuJ3QgaGF2ZQorCQkgKi8KKwkJZXJyID0gcGNtX29wZW4oc3Vic3RyZWFtLCBtYXhfY2hhbm5lbHMgLSBFQ0hPQ0FSRF9IQVNfQURBVCk7CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBkb3V0X2V4aXQ7CisKKwlpZiAoKGVyciA9IHNuZF9wY21faHdfcnVsZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJCSAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkJICAgICAgIGh3X3J1bGVfcGxheWJhY2tfY2hhbm5lbHNfYnlfZm9ybWF0LAorCQkJCSAgICAgICBOVUxMLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAorCQkJCSAgICAgICAtMSkpIDwgMCkKKwkJZ290byBkb3V0X2V4aXQ7CisJaWYgKChlcnIgPSBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCQkgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKwkJCQkgICAgICAgaHdfcnVsZV9wbGF5YmFja19mb3JtYXRfYnlfY2hhbm5lbHMsCisJCQkJICAgICAgIE5VTEwsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQkgICAgICAgLTEpKSA8IDApCisJCWdvdG8gZG91dF9leGl0OworCWF0b21pY19pbmMoJmNoaXAtPm9wZW5jb3VudCk7CisJaWYgKGF0b21pY19yZWFkKCZjaGlwLT5vcGVuY291bnQpID4gMSAmJiBjaGlwLT5yYXRlX3NldCkKKwkJY2hpcC0+Y2FuX3NldF9yYXRlPTA7Citkb3V0X2V4aXQ6CisJdXAoJmNoaXAtPm1vZGVfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiAhRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLworCisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8gKi8KKworCisKK3N0YXRpYyBpbnQgcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IG9jOworCisJLyogTm90aGluZyB0byBkbyBoZXJlLiBBdWRpbyBpcyBhbHJlYWR5IG9mZiBhbmQgcGlwZSB3aWxsIGJlCisJICogZnJlZWQgYnkgaXRzIGNhbGxiYWNrCisJICovCisJREVfQUNUKCgicGNtX2Nsb3NlXG4iKSk7CisKKwlhdG9taWNfZGVjKCZjaGlwLT5vcGVuY291bnQpOworCW9jID0gYXRvbWljX3JlYWQoJmNoaXAtPm9wZW5jb3VudCk7CisJREVfQUNUKCgicGNtX2Nsb3NlICBvYz0lZCAgY3M9JWQgIHJzPSVkXG4iLCBvYywKKwkJY2hpcC0+Y2FuX3NldF9yYXRlLCBjaGlwLT5yYXRlX3NldCkpOworCWlmIChvYyA8IDIpCisJCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CisJaWYgKG9jID09IDApCisJCWNoaXAtPnJhdGVfc2V0ID0gMDsKKwlERV9BQ1QoKCJwY21fY2xvc2UyIG9jPSVkICBjcz0lZCAgcnM9JWRcbiIsIG9jLAorCQljaGlwLT5jYW5fc2V0X3JhdGUsY2hpcC0+cmF0ZV9zZXQpKTsKKworCXJldHVybiAwOworfQorCisKKworLyogQ2hhbm5lbCBhbGxvY2F0aW9uIGFuZCBzY2F0dGVyLWdhdGhlciBsaXN0IHNldHVwICovCitzdGF0aWMgaW50IGluaXRfZW5naW5lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMsCisJCSAgICAgICBpbnQgcGlwZV9pbmRleCwgaW50IGludGVybGVhdmUpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlpbnQgZXJyLCBwZXIsIHJlc3QsIHBhZ2UsIGVkZ2UsIG9mZnM7CisJc3RydWN0IHNuZF9zZ19idWYgKnNnYnVmOworCXN0cnVjdCBhdWRpb3BpcGUgKnBpcGU7CisKKwljaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXBpcGUgPSAoc3RydWN0IGF1ZGlvcGlwZSAqKSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCS8qIFNldHMgdXAgY2hlIGhhcmR3YXJlLiBJZiBpdCdzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIHJlc2V0IGFuZAorCSAqIHJlZG8gd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMKKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwlpZiAocGlwZS0+aW5kZXggPj0gMCkgeworCQlERV9IV1AoKCJod3BfaWUgZnJlZSglZClcbiIsIHBpcGUtPmluZGV4KSk7CisJCWVyciA9IGZyZWVfcGlwZXMoY2hpcCwgcGlwZSk7CisJCXNuZF9hc3NlcnQoIWVycik7CisJCWNoaXAtPnN1YnN0cmVhbVtwaXBlLT5pbmRleF0gPSBOVUxMOworCX0KKworCWVyciA9IGFsbG9jYXRlX3BpcGVzKGNoaXAsIHBpcGUsIHBpcGVfaW5kZXgsIGludGVybGVhdmUpOworCWlmIChlcnIgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCURFX0FDVCgoS0VSTl9OT1RJQ0UgImFsbG9jYXRlX3BpcGVzKCVkKSBlcnI9JWRcbiIsCisJCQlwaXBlX2luZGV4LCBlcnIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwlERV9BQ1QoKEtFUk5fTk9USUNFICJhbGxvY2F0ZV9waXBlcygpPSVkXG4iLCBwaXBlX2luZGV4KSk7CisKKwlERV9IV1AoKCJwY21faHdfcGFyYW1zIChidWZzaXplPSVkQiBwZXJpb2RzPSVkIHBlcnNpemU9JWRCKVxuIiwKKwkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpLCBwYXJhbXNfcGVyaW9kcyhod19wYXJhbXMpLAorCQlwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcykpKTsKKwllcnIgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIm1hbGxvY19wYWdlcyBlcnI9JWRcbiIsIGVycik7CisJCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCQlmcmVlX3BpcGVzKGNoaXAsIHBpcGUpOworCQlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCQlwaXBlLT5pbmRleCA9IC0xOworCQlyZXR1cm4gZXJyOworCX0KKworCXNnYnVmID0gc25kX3BjbV9zdWJzdHJlYW1fc2didWYoc3Vic3RyZWFtKTsKKworCURFX0hXUCgoInBjbV9od19wYXJhbXMgdGFibGUgc2l6ZT0lZCBwYWdlcz0lZFxuIiwKKwkJc2didWYtPnNpemUsIHNnYnVmLT5wYWdlcykpOworCXNnbGlzdF9pbml0KGNoaXAsIHBpcGUpOworCWVkZ2UgPSBQQUdFX1NJWkU7CisJZm9yIChvZmZzID0gcGFnZSA9IHBlciA9IDA7IG9mZnMgPCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcyk7CisJICAgICBwZXIrKykgeworCQlyZXN0ID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOworCQlpZiAob2ZmcyArIHJlc3QgPiBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpCisJCQlyZXN0ID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpIC0gb2ZmczsKKwkJd2hpbGUgKHJlc3QpIHsKKwkJCWlmIChyZXN0IDw9IGVkZ2UgLSBvZmZzKSB7CisJCQkJc2dsaXN0X2FkZF9tYXBwaW5nKGNoaXAsIHBpcGUsCisJCQkJCQkgICBzbmRfc2didWZfZ2V0X2FkZHIoc2didWYsIG9mZnMpLAorCQkJCQkJICAgcmVzdCk7CisJCQkJc2dsaXN0X2FkZF9pcnEoY2hpcCwgcGlwZSk7CisJCQkJb2ZmcyArPSByZXN0OworCQkJCXJlc3QgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlzZ2xpc3RfYWRkX21hcHBpbmcoY2hpcCwgcGlwZSwKKwkJCQkJCSAgIHNuZF9zZ2J1Zl9nZXRfYWRkcihzZ2J1Ziwgb2ZmcyksCisJCQkJCQkgICBlZGdlIC0gb2Zmcyk7CisJCQkJcmVzdCAtPSBlZGdlIC0gb2ZmczsKKwkJCQlvZmZzID0gZWRnZTsKKwkJCX0KKwkJCWlmIChvZmZzID09IGVkZ2UpIHsKKwkJCQllZGdlICs9IFBBR0VfU0laRTsKKwkJCQlwYWdlKys7CisJCQl9CisJCX0KKwl9CisKKwkvKiBDbG9zZSB0aGUgcmluZyBidWZmZXIgKi8KKwlzZ2xpc3Rfd3JhcChjaGlwLCBwaXBlKTsKKworCS8qIFRoaXMgc3R1ZmYgaXMgdXNlZCBieSB0aGUgaXJxIGhhbmRsZXIsIHNvIGl0IG11c3QgYmUKKwkgKiBpbml0aWFsaXplZCBiZWZvcmUgY2hpcC0+c3Vic3RyZWFtCisJICovCisJY2hpcC0+bGFzdF9wZXJpb2RbcGlwZV9pbmRleF0gPSAwOworCXBpcGUtPmxhc3RfY291bnRlciA9IDA7CisJcGlwZS0+cG9zaXRpb24gPSAwOworCXNtcF93bWIoKTsKKwljaGlwLT5zdWJzdHJlYW1bcGlwZV9pbmRleF0gPSBzdWJzdHJlYW07CisJY2hpcC0+cmF0ZV9zZXQgPSAxOworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCXNldF9zYW1wbGVfcmF0ZShjaGlwLCBod19wYXJhbXMtPnJhdGVfbnVtIC8gaHdfcGFyYW1zLT5yYXRlX2Rlbik7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwlERV9IV1AoKCJwY21faHdfcGFyYW1zIG9rXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHBjbV9hbmFsb2dfaW5faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gaW5pdF9lbmdpbmUoc3Vic3RyZWFtLCBod19wYXJhbXMsIHB4X2FuYWxvZ19pbihjaGlwKSArCisJCQlzdWJzdHJlYW0tPm51bWJlciwgcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcykpOworfQorCisKKworc3RhdGljIGludCBwY21fYW5hbG9nX291dF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXJldHVybiBpbml0X2VuZ2luZShzdWJzdHJlYW0sIGh3X3BhcmFtcywgc3Vic3RyZWFtLT5udW1iZXIsCisJCQkgICBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKSk7Cit9CisKKworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKworc3RhdGljIGludCBwY21fZGlnaXRhbF9pbl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gaW5pdF9lbmdpbmUoc3Vic3RyZWFtLCBod19wYXJhbXMsIHB4X2RpZ2l0YWxfaW4oY2hpcCkgKworCQkJc3Vic3RyZWFtLT5udW1iZXIsIHBhcmFtc19jaGFubmVscyhod19wYXJhbXMpKTsKK30KKworCisKKyNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgkvKiBTZWUgdGhlIG5vdGUgaW4gc25kX2VjaG9fbmV3X3BjbSgpICovCitzdGF0aWMgaW50IHBjbV9kaWdpdGFsX291dF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJcmV0dXJuIGluaXRfZW5naW5lKHN1YnN0cmVhbSwgaHdfcGFyYW1zLCBweF9kaWdpdGFsX291dChjaGlwKSArCisJCQlzdWJzdHJlYW0tPm51bWJlciwgcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcykpOworfQorI2VuZGlmIC8qICFFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTyAqLworCisKKworc3RhdGljIGludCBwY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOworCXN0cnVjdCBhdWRpb3BpcGUgKnBpcGU7CisKKwljaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXBpcGUgPSAoc3RydWN0IGF1ZGlvcGlwZSAqKSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCWlmIChwaXBlLT5pbmRleCA+PSAwKSB7CisJCURFX0hXUCgoInBjbV9od19mcmVlKCVkKVxuIiwgcGlwZS0+aW5kZXgpKTsKKwkJZnJlZV9waXBlcyhjaGlwLCBwaXBlKTsKKwkJY2hpcC0+c3Vic3RyZWFtW3BpcGUtPmluZGV4XSA9IE5VTEw7CisJCXBpcGUtPmluZGV4ID0gLTE7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisKKwlERV9IV1AoKCJwY21faHdfZnJlZWRcbiIpKTsKKwlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHBjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9mb3JtYXQgZm9ybWF0OworCWludCBwaXBlX2luZGV4ID0gKChzdHJ1Y3QgYXVkaW9waXBlICopcnVudGltZS0+cHJpdmF0ZV9kYXRhKS0+aW5kZXg7CisKKwlERV9IV1AoKCJQcmVwYXJlIHJhdGU9JWQgZm9ybWF0PSVkIGNoYW5uZWxzPSVkXG4iLAorCQlydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzKSk7CisJZm9ybWF0LmludGVybGVhdmUgPSBydW50aW1lLT5jaGFubmVsczsKKwlmb3JtYXQuZGF0YV9hcmVfYmlnZW5kaWFuID0gMDsKKwlmb3JtYXQubW9ub190b19zdGVyZW8gPSAwOworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1U4OgorCQlmb3JtYXQuYml0c19wZXJfc2FtcGxlID0gODsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJZm9ybWF0LmJpdHNfcGVyX3NhbXBsZSA9IDE2OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0XzNMRToKKwkJZm9ybWF0LmJpdHNfcGVyX3NhbXBsZSA9IDI0OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0JFOgorCQlmb3JtYXQuZGF0YV9hcmVfYmlnZW5kaWFuID0gMTsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlmb3JtYXQuYml0c19wZXJfc2FtcGxlID0gMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFX0hXUCgoIlByZXBhcmUgZXJyb3I6IHVuc3VwcG9ydGVkIGZvcm1hdCAlZFxuIiwKKwkJCXJ1bnRpbWUtPmZvcm1hdCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfYXNzZXJ0KHBpcGVfaW5kZXggPCBweF9udW0oY2hpcCksIHJldHVybiAtRUlOVkFMKTsKKwlzbmRfYXNzZXJ0KGlzX3BpcGVfYWxsb2NhdGVkKGNoaXAsIHBpcGVfaW5kZXgpLCByZXR1cm4gLUVJTlZBTCk7CisJc2V0X2F1ZGlvX2Zvcm1hdChjaGlwLCBwaXBlX2luZGV4LCAmZm9ybWF0KTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb3BpcGUgKnBpcGUgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGVycjsKKwl1MzIgY2hhbm5lbG1hc2sgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CisKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7CisJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlmb3IgKGkgPSAwOyBpIDwgRFNQX01BWFBJUEVTOyBpKyspIHsKKwkJCWlmIChzID09IGNoaXAtPnN1YnN0cmVhbVtpXSkgeworCQkJCWNoYW5uZWxtYXNrIHw9IDEgPDwgaTsKKwkJCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOworCQkJfQorCQl9CisJfQorCisJc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdGFydFxuIikpOworCQlmb3IgKGkgPSAwOyBpIDwgRFNQX01BWFBJUEVTOyBpKyspIHsKKwkJCWlmIChjaGFubmVsbWFzayAmICgxIDw8IGkpKSB7CisJCQkJcGlwZSA9IGNoaXAtPnN1YnN0cmVhbVtpXS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJCXN3aXRjaCAocGlwZS0+c3RhdGUpIHsKKwkJCQljYXNlIFBJUEVfU1RBVEVfU1RPUFBFRDoKKwkJCQkJY2hpcC0+bGFzdF9wZXJpb2RbaV0gPSAwOworCQkJCQlwaXBlLT5sYXN0X2NvdW50ZXIgPSAwOworCQkJCQlwaXBlLT5wb3NpdGlvbiA9IDA7CisJCQkJCSpwaXBlLT5kbWFfY291bnRlciA9IDA7CisJCQkJY2FzZSBQSVBFX1NUQVRFX1BBVVNFRDoKKwkJCQkJcGlwZS0+c3RhdGUgPSBQSVBFX1NUQVRFX1NUQVJURUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUElQRV9TVEFURV9TVEFSVEVEOgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJZXJyID0gc3RhcnRfdHJhbnNwb3J0KGNoaXAsIGNoYW5uZWxtYXNrLAorCQkJCSAgICAgIGNoaXAtPnBpcGVfY3ljbGljX21hc2spOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCURFX0FDVCgoInBjbV90cmlnZ2VyIHN0b3BcbiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IERTUF9NQVhQSVBFUzsgaSsrKSB7CisJCQlpZiAoY2hhbm5lbG1hc2sgJiAoMSA8PCBpKSkgeworCQkJCXBpcGUgPSBjaGlwLT5zdWJzdHJlYW1baV0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwkJCQlwaXBlLT5zdGF0ZSA9IFBJUEVfU1RBVEVfU1RPUFBFRDsKKwkJCX0KKwkJfQorCQllcnIgPSBzdG9wX3RyYW5zcG9ydChjaGlwLCBjaGFubmVsbWFzayk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJREVfQUNUKCgicGNtX3RyaWdnZXIgcGF1c2VcbiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IERTUF9NQVhQSVBFUzsgaSsrKSB7CisJCQlpZiAoY2hhbm5lbG1hc2sgJiAoMSA8PCBpKSkgeworCQkJCXBpcGUgPSBjaGlwLT5zdWJzdHJlYW1baV0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwkJCQlwaXBlLT5zdGF0ZSA9IFBJUEVfU1RBVEVfUEFVU0VEOworCQkJfQorCQl9CisJCWVyciA9IHBhdXNlX3RyYW5zcG9ydChjaGlwLCBjaGFubmVsbWFzayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCisKKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHBjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGF1ZGlvcGlwZSAqcGlwZSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QgY250LCBidWZzaXplLCBwb3M7CisKKwljbnQgPSBsZTMyX3RvX2NwdSgqcGlwZS0+ZG1hX2NvdW50ZXIpOworCXBpcGUtPnBvc2l0aW9uICs9IGNudCAtIHBpcGUtPmxhc3RfY291bnRlcjsKKwlwaXBlLT5sYXN0X2NvdW50ZXIgPSBjbnQ7CisJYnVmc2l6ZSA9IHN1YnN0cmVhbS0+cnVudGltZS0+YnVmZmVyX3NpemU7CisJcG9zID0gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgcGlwZS0+cG9zaXRpb24pOworCisJd2hpbGUgKHBvcyA+PSBidWZzaXplKSB7CisJCXBpcGUtPnBvc2l0aW9uIC09IGZyYW1lc190b19ieXRlcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIGJ1ZnNpemUpOworCQlwb3MgLT0gYnVmc2l6ZTsKKwl9CisJcmV0dXJuIHBvczsKK30KKworCisKKy8qIHBjbSAqX29wcyBzdHJ1Y3R1cmVzICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGFuYWxvZ19wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPSBwY21fYW5hbG9nX291dF9vcGVuLAorCS5jbG9zZSA9IHBjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gcGNtX2FuYWxvZ19vdXRfaHdfcGFyYW1zLAorCS5od19mcmVlID0gcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBwY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IHBjbV90cmlnZ2VyLAorCS5wb2ludGVyID0gcGNtX3BvaW50ZXIsCisJLnBhZ2UgPSBzbmRfcGNtX3NnYnVmX29wc19wYWdlLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYW5hbG9nX2NhcHR1cmVfb3BzID0geworCS5vcGVuID0gcGNtX2FuYWxvZ19pbl9vcGVuLAorCS5jbG9zZSA9IHBjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gcGNtX2FuYWxvZ19pbl9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBwY21faHdfZnJlZSwKKwkucHJlcGFyZSA9IHBjbV9wcmVwYXJlLAorCS50cmlnZ2VyID0gcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBwY21fcG9pbnRlciwKKwkucGFnZSA9IHNuZF9wY21fc2didWZfb3BzX3BhZ2UsCit9OworI2lmZGVmIEVDSE9DQVJEX0hBU19ESUdJVEFMX0lPCisjaWZuZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgZGlnaXRhbF9wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPSBwY21fZGlnaXRhbF9vdXRfb3BlbiwKKwkuY2xvc2UgPSBwY21fY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHBjbV9kaWdpdGFsX291dF9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBwY21faHdfZnJlZSwKKwkucHJlcGFyZSA9IHBjbV9wcmVwYXJlLAorCS50cmlnZ2VyID0gcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBwY21fcG9pbnRlciwKKwkucGFnZSA9IHNuZF9wY21fc2didWZfb3BzX3BhZ2UsCit9OworI2VuZGlmIC8qICFFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGRpZ2l0YWxfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPSBwY21fZGlnaXRhbF9pbl9vcGVuLAorCS5jbG9zZSA9IHBjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gcGNtX2RpZ2l0YWxfaW5faHdfcGFyYW1zLAorCS5od19mcmVlID0gcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBwY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IHBjbV90cmlnZ2VyLAorCS5wb2ludGVyID0gcGNtX3BvaW50ZXIsCisJLnBhZ2UgPSBzbmRfcGNtX3NnYnVmX29wc19wYWdlLAorfTsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTyAqLworCisKKworLyogUHJlYWxsb2NhdGUgbWVtb3J5IG9ubHkgZm9yIHRoZSBmaXJzdCBzdWJzdHJlYW0gYmVjYXVzZSBpdCdzIHRoZSBtb3N0CisgKiB1c2VkIG9uZQorICovCitzdGF0aWMgaW50IHNuZF9lY2hvX3ByZWFsbG9jYXRlX3BhZ2VzKHN0cnVjdCBzbmRfcGNtICpwY20sIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzOworCWludCBzdHJlYW0sIGVycjsKKworCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspCisJCWZvciAoc3MgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07IHNzOyBzcyA9IHNzLT5uZXh0KSB7CisJCQllcnIgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlcyhzcywgU05EUlZfRE1BX1RZUEVfREVWX1NHLAorCQkJCQkJCSAgICBkZXYsCisJCQkJCQkJICAgIHNzLT5udW1iZXIgPyAwIDogMTI4PDwxMCwKKwkJCQkJCQkgICAgMjU2PDwxMCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKjwtLXNuZF9lY2hvX3Byb2JlKCkgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lY2hvX25ld19wY20oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCWludCBlcnI7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisJLyogVGhpcyBjYXJkIGhhcyBhIFZtaXhlciwgdGhhdCBpcyB0aGVyZSBpcyBubyBkaXJlY3QgbWFwcGluZyBmcm9tIFBDTQorCXN0cmVhbXMgdG8gcGh5c2ljYWwgb3V0cHV0cy4gVGhlIHVzZXIgY2FuIG1peCB0aGUgc3RyZWFtcyBhcyBoZSB3aXNoZXMKKwl2aWEgY29udHJvbCBpbnRlcmZhY2UgYW5kIGl0J3MgcG9zc2libGUgdG8gc2VuZCBhbnkgc3RyZWFtIHRvIGFueQorCW91dHB1dCwgdGh1cyBpdCBtYWtlcyBubyBzZW5zZSB0byBrZWVwIGFuYWxvZyBhbmQgZGlnaXRhbCBvdXRwdXRzCisJc2VwYXJhdGVkICovCisKKwkvKiBQQ00jMCBWaXJ0dWFsIG91dHB1dHMgYW5kIGFuYWxvZyBpbnB1dHMgKi8KKwlpZiAoKGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJQQ00iLCAwLCBudW1fcGlwZXNfb3V0KGNoaXApLAorCQkJCW51bV9hbmFsb2dfYnVzc2VzX2luKGNoaXApLCAmcGNtKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwljaGlwLT5hbmFsb2dfcGNtID0gcGNtOworCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJmFuYWxvZ19wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJmFuYWxvZ19jYXB0dXJlX29wcyk7CisJaWYgKChlcnIgPSBzbmRfZWNob19wcmVhbGxvY2F0ZV9wYWdlcyhwY20sIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlERV9JTklUKCgiQW5hbG9nIFBDTSBva1xuIikpOworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKwkvKiBQQ00jMSBEaWdpdGFsIGlucHV0cywgbm8gb3V0cHV0cyAqLworCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkRpZ2l0YWwgUENNIiwgMSwgMCwKKwkJCSAgICAgICBudW1fZGlnaXRhbF9idXNzZXNfaW4oY2hpcCksICZwY20pKSA8IDApCisJCXJldHVybiBlcnI7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCWNoaXAtPmRpZ2l0YWxfcGNtID0gcGNtOworCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmZGlnaXRhbF9jYXB0dXJlX29wcyk7CisJaWYgKChlcnIgPSBzbmRfZWNob19wcmVhbGxvY2F0ZV9wYWdlcyhwY20sIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlERV9JTklUKCgiRGlnaXRhbCBQQ00gb2tcbiIpKTsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTyAqLworCisjZWxzZSAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisKKwkvKiBUaGUgY2FyZCBjYW4gbWFuYWdlIHN1YnN0cmVhbXMgZm9ybWVkIGJ5IGFuYWxvZyBhbmQgZGlnaXRhbCBjaGFubmVscworCWF0IHRoZSBzYW1lIHRpbWUsIGJ1dCBJIHByZWZlciB0byBrZWVwIGFuYWxvZyBhbmQgZGlnaXRhbCBjaGFubmVscworCXNlcGFyYXRlZCwgYmVjYXVzZSB0aGF0IG1peGVkIHRoaW5nIGlzIGNvbmZ1c2luZyBhbmQgdXNlbGVzcy4gU28gd2UKKwlyZWdpc3RlciB0d28gUENNIGRldmljZXM6ICovCisKKwkvKiBQQ00jMCBBbmFsb2cgaS9vICovCisJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiQW5hbG9nIFBDTSIsIDAsCisJCQkgICAgICAgbnVtX2FuYWxvZ19idXNzZXNfb3V0KGNoaXApLAorCQkJICAgICAgIG51bV9hbmFsb2dfYnVzc2VzX2luKGNoaXApLCAmcGNtKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwljaGlwLT5hbmFsb2dfcGNtID0gcGNtOworCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJmFuYWxvZ19wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJmFuYWxvZ19jYXB0dXJlX29wcyk7CisJaWYgKChlcnIgPSBzbmRfZWNob19wcmVhbGxvY2F0ZV9wYWdlcyhwY20sIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlERV9JTklUKCgiQW5hbG9nIFBDTSBva1xuIikpOworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKwkvKiBQQ00jMSBEaWdpdGFsIGkvbyAqLworCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkRpZ2l0YWwgUENNIiwgMSwKKwkJCSAgICAgICBudW1fZGlnaXRhbF9idXNzZXNfb3V0KGNoaXApLAorCQkJICAgICAgIG51bV9kaWdpdGFsX2J1c3Nlc19pbihjaGlwKSwgJnBjbSkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJY2hpcC0+ZGlnaXRhbF9wY20gPSBwY207CisJc3RyY3B5KHBjbS0+bmFtZSwgY2hpcC0+Y2FyZC0+c2hvcnRuYW1lKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmZGlnaXRhbF9wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJmRpZ2l0YWxfY2FwdHVyZV9vcHMpOworCWlmICgoZXJyID0gc25kX2VjaG9fcHJlYWxsb2NhdGVfcGFnZXMocGNtLCBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSkpKSA8IDApCisJCXJldHVybiBlcnI7CisJREVfSU5JVCgoIkRpZ2l0YWwgUENNIG9rXG4iKSk7CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8gKi8KKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19WTUlYRVIgKi8KKworCXJldHVybiAwOworfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJQ29udHJvbCBpbnRlcmZhY2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKiogUENNIG91dHB1dCB2b2x1bWUgKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gbnVtX2J1c3Nlc19vdXQoY2hpcCk7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gRUNIT0dBSU5fTUlOT1VUOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IEVDSE9HQUlOX01BWE9VVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGM7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWZvciAoYyA9IDA7IGMgPCBudW1fYnVzc2VzX291dChjaGlwKTsgYysrKQorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjXSA9IGNoaXAtPm91dHB1dF9nYWluW2NdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlpbnQgYywgY2hhbmdlZCwgZ2FpbjsKKworCWNoYW5nZWQgPSAwOworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJZm9yIChjID0gMDsgYyA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBjKyspIHsKKwkJZ2FpbiA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NdOworCQkvKiBJZ25vcmUgb3V0IG9mIHJhbmdlIHZhbHVlcyAqLworCQlpZiAoZ2FpbiA8IEVDSE9HQUlOX01JTk9VVCB8fCBnYWluID4gRUNIT0dBSU5fTUFYT1VUKQorCQkJY29udGludWU7CisJCWlmIChjaGlwLT5vdXRwdXRfZ2FpbltjXSAhPSBnYWluKSB7CisJCQlzZXRfb3V0cHV0X2dhaW4oY2hpcCwgYywgZ2Fpbik7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0KKwlpZiAoY2hhbmdlZCkKKwkJdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApOworCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisvKiBPbiBWbWl4ZXIgY2FyZHMgdGhpcyBvbmUgY29udHJvbHMgdGhlIGxpbmUtb3V0IHZvbHVtZSAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4gX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJMaW5lIFBsYXliYWNrIFZvbHVtZSIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLmluZm8gPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKK307CisjZWxzZQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKKwkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAorCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCit9OworI2VuZGlmCisKKworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4KKworLyoqKioqKioqKioqKioqKioqKiogQW5hbG9nIGlucHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzbmRfZWNob19pbnB1dF9nYWluX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gbnVtX2FuYWxvZ19idXNzZXNfaW4oY2hpcCk7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gRUNIT0dBSU5fTUlOSU5QOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IEVDSE9HQUlOX01BWElOUDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob19pbnB1dF9nYWluX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOworCWludCBjOworCisJY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlmb3IgKGMgPSAwOyBjIDwgbnVtX2FuYWxvZ19idXNzZXNfaW4oY2hpcCk7IGMrKykKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY10gPSBjaGlwLT5pbnB1dF9nYWluW2NdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9lY2hvX2lucHV0X2dhaW5fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGMsIGdhaW4sIGNoYW5nZWQ7CisKKwljaGFuZ2VkID0gMDsKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCWZvciAoYyA9IDA7IGMgPCBudW1fYW5hbG9nX2J1c3Nlc19pbihjaGlwKTsgYysrKSB7CisJCWdhaW4gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjXTsKKwkJLyogSWdub3JlIG91dCBvZiByYW5nZSB2YWx1ZXMgKi8KKwkJaWYgKGdhaW4gPCBFQ0hPR0FJTl9NSU5JTlAgfHwgZ2FpbiA+IEVDSE9HQUlOX01BWElOUCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hpcC0+aW5wdXRfZ2FpbltjXSAhPSBnYWluKSB7CisJCQlzZXRfaW5wdXRfZ2FpbihjaGlwLCBjLCBnYWluKTsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisJfQorCWlmIChjaGFuZ2VkKQorCQl1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChjaGlwKTsKKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fbGluZV9pbnB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUgPSAiTGluZSBDYXB0dXJlIFZvbHVtZSIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLmluZm8gPSBzbmRfZWNob19pbnB1dF9nYWluX2luZm8sCisJLmdldCA9IHNuZF9lY2hvX2lucHV0X2dhaW5fZ2V0LAorCS5wdXQgPSBzbmRfZWNob19pbnB1dF9nYWluX3B1dCwKK307CisKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTiAqLworCisKKworI2lmZGVmIEVDSE9DQVJEX0hBU19PVVRQVVRfTk9NSU5BTF9MRVZFTAorCisvKioqKioqKioqKioqIEFuYWxvZyBvdXRwdXQgbm9taW5hbCBsZXZlbCAoKzRkQnUgLyAtMTBkQlYpICoqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc25kX2VjaG9fb3V0cHV0X25vbWluYWxfaW5mbyAoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IG51bV9hbmFsb2dfYnVzc2VzX291dChjaGlwKTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fb3V0cHV0X25vbWluYWxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOworCWludCBjOworCisJY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlmb3IgKGMgPSAwOyBjIDwgbnVtX2FuYWxvZ19idXNzZXNfb3V0KGNoaXApOyBjKyspCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NdID0gY2hpcC0+bm9taW5hbF9sZXZlbFtjXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfbm9taW5hbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGMsIGNoYW5nZWQ7CisKKwljaGFuZ2VkID0gMDsKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCWZvciAoYyA9IDA7IGMgPCBudW1fYW5hbG9nX2J1c3Nlc19vdXQoY2hpcCk7IGMrKykgeworCQlpZiAoY2hpcC0+bm9taW5hbF9sZXZlbFtjXSAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjXSkgeworCQkJc2V0X25vbWluYWxfbGV2ZWwoY2hpcCwgYywKKwkJCQkJICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjXSk7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0KKwlpZiAoY2hhbmdlZCkKKwkJdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApOworCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19vdXRwdXRfbm9taW5hbF9sZXZlbCBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIkxpbmUgUGxheWJhY2sgU3dpdGNoICgtMTBkQlYpIiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaW5mbyA9IHNuZF9lY2hvX291dHB1dF9ub21pbmFsX2luZm8sCisJLmdldCA9IHNuZF9lY2hvX291dHB1dF9ub21pbmFsX2dldCwKKwkucHV0ID0gc25kX2VjaG9fb3V0cHV0X25vbWluYWxfcHV0LAorfTsKKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19PVVRQVVRfTk9NSU5BTF9MRVZFTCAqLworCisKKworI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9OT01JTkFMX0xFVkVMCisKKy8qKioqKioqKioqKioqKiogQW5hbG9nIGlucHV0IG5vbWluYWwgbGV2ZWwgKCs0ZEJ1IC8gLTEwZEJWKSAqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNuZF9lY2hvX2lucHV0X25vbWluYWxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOworCisJY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSBudW1fYW5hbG9nX2J1c3Nlc19pbihjaGlwKTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9faW5wdXRfbm9taW5hbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlpbnQgYzsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJZm9yIChjID0gMDsgYyA8IG51bV9hbmFsb2dfYnVzc2VzX2luKGNoaXApOyBjKyspCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NdID0KKwkJCWNoaXAtPm5vbWluYWxfbGV2ZWxbYnhfYW5hbG9nX2luKGNoaXApICsgY107CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9faW5wdXRfbm9taW5hbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlpbnQgYywgY2hhbmdlZDsKKworCWNoYW5nZWQgPSAwOworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJZm9yIChjID0gMDsgYyA8IG51bV9hbmFsb2dfYnVzc2VzX2luKGNoaXApOyBjKyspIHsKKwkJaWYgKGNoaXAtPm5vbWluYWxfbGV2ZWxbYnhfYW5hbG9nX2luKGNoaXApICsgY10gIT0KKwkJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NdKSB7CisJCQlzZXRfbm9taW5hbF9sZXZlbChjaGlwLCBieF9hbmFsb2dfaW4oY2hpcCkgKyBjLAorCQkJCQkgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NdKTsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisJfQorCWlmIChjaGFuZ2VkKQorCQl1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCk7CS8qICJPdXRwdXQiIGlzIG5vdCBhIG1pc3Rha2UKKwkJCQkJCSAqIGhlcmUuCisJCQkJCQkgKi8KKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9faW50cHV0X25vbWluYWxfbGV2ZWwgX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJMaW5lIENhcHR1cmUgU3dpdGNoICgtMTBkQlYpIiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaW5mbyA9IHNuZF9lY2hvX2lucHV0X25vbWluYWxfaW5mbywKKwkuZ2V0ID0gc25kX2VjaG9faW5wdXRfbm9taW5hbF9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX2lucHV0X25vbWluYWxfcHV0LAorfTsKKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19JTlBVVF9OT01JTkFMX0xFVkVMICovCisKKworCisjaWZkZWYgRUNIT0NBUkRfSEFTX01PTklUT1IKKworLyoqKioqKioqKioqKioqKioqKiogTW9uaXRvciBtaXhlciAqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzbmRfZWNob19taXhlcl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSBFQ0hPR0FJTl9NSU5PVVQ7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gRUNIT0dBSU5fTUFYT1VUOworCXVpbmZvLT5kaW1lbi5kWzBdID0gbnVtX2J1c3Nlc19vdXQoY2hpcCk7CisJdWluZm8tPmRpbWVuLmRbMV0gPSBudW1fYnVzc2VzX2luKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9lY2hvX21peGVyX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJY2hpcC0+bW9uaXRvcl9nYWluW3Vjb250cm9sLT5pZC5pbmRleCAvIG51bV9idXNzZXNfaW4oY2hpcCldCisJCQlbdWNvbnRyb2wtPmlkLmluZGV4ICUgbnVtX2J1c3Nlc19pbihjaGlwKV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fbWl4ZXJfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlpbnQgY2hhbmdlZCwgIGdhaW47CisJc2hvcnQgb3V0LCBpbjsKKworCWNoYW5nZWQgPSAwOworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJb3V0ID0gdWNvbnRyb2wtPmlkLmluZGV4IC8gbnVtX2J1c3Nlc19pbihjaGlwKTsKKwlpbiA9IHVjb250cm9sLT5pZC5pbmRleCAlIG51bV9idXNzZXNfaW4oY2hpcCk7CisJZ2FpbiA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCWlmIChnYWluIDwgRUNIT0dBSU5fTUlOT1VUIHx8IGdhaW4gPiBFQ0hPR0FJTl9NQVhPVVQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjaGlwLT5tb25pdG9yX2dhaW5bb3V0XVtpbl0gIT0gZ2FpbikgeworCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJc2V0X21vbml0b3JfZ2FpbihjaGlwLCBvdXQsIGluLCBnYWluKTsKKwkJdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApOworCQlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCQljaGFuZ2VkID0gMTsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19tb25pdG9yX21peGVyIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUgPSAiTW9uaXRvciBNaXhlciBWb2x1bWUiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pbmZvID0gc25kX2VjaG9fbWl4ZXJfaW5mbywKKwkuZ2V0ID0gc25kX2VjaG9fbWl4ZXJfZ2V0LAorCS5wdXQgPSBzbmRfZWNob19taXhlcl9wdXQsCit9OworCisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX01PTklUT1IgKi8KKworCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisKKy8qKioqKioqKioqKioqKioqKioqIFZtaXhlciAqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzbmRfZWNob192bWl4ZXJfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gRUNIT0dBSU5fTUlOT1VUOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IEVDSE9HQUlOX01BWE9VVDsKKwl1aW5mby0+ZGltZW4uZFswXSA9IG51bV9idXNzZXNfb3V0KGNoaXApOworCXVpbmZvLT5kaW1lbi5kWzFdID0gbnVtX3BpcGVzX291dChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob192bWl4ZXJfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJY2hpcC0+dm1peGVyX2dhaW5bdWNvbnRyb2wtPmlkLmluZGV4IC8gbnVtX3BpcGVzX291dChjaGlwKV0KKwkJCVt1Y29udHJvbC0+aWQuaW5kZXggJSBudW1fcGlwZXNfb3V0KGNoaXApXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob192bWl4ZXJfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGdhaW4sIGNoYW5nZWQ7CisJc2hvcnQgdmNoLCBvdXQ7CisKKwljaGFuZ2VkID0gMDsKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCW91dCA9IHVjb250cm9sLT5pZC5pbmRleCAvIG51bV9waXBlc19vdXQoY2hpcCk7CisJdmNoID0gdWNvbnRyb2wtPmlkLmluZGV4ICUgbnVtX3BpcGVzX291dChjaGlwKTsKKwlnYWluID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJaWYgKGdhaW4gPCBFQ0hPR0FJTl9NSU5PVVQgfHwgZ2FpbiA+IEVDSE9HQUlOX01BWE9VVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoaXAtPnZtaXhlcl9nYWluW291dF1bdmNoXSAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIG91dCwgdmNoLCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJCXVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCWNoYW5nZWQgPSAxOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3ZtaXhlciBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIlZNaXhlciBWb2x1bWUiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pbmZvID0gc25kX2VjaG9fdm1peGVyX2luZm8sCisJLmdldCA9IHNuZF9lY2hvX3ZtaXhlcl9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX3ZtaXhlcl9wdXQsCit9OworCisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLworCisKKworI2lmZGVmIEVDSE9DQVJEX0hBU19ESUdJVEFMX01PREVfU1dJVENICisKKy8qKioqKioqKioqKioqKioqKioqIERpZ2l0YWwgbW9kZSBzd2l0Y2ggKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc25kX2VjaG9fZGlnaXRhbF9tb2RlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqbmFtZXNbNF0gPSB7CisJCSJTL1BESUYgQ29heGlhbCIsICJTL1BESUYgT3B0aWNhbCIsICJBREFUIE9wdGljYWwiLAorCQkiUy9QRElGIENkcm9tIgorCX07CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBjaGlwLT5udW1fZGlnaXRhbF9tb2RlczsKKwl1aW5mby0+Y291bnQgPSAxOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IGNoaXAtPm51bV9kaWdpdGFsX21vZGVzKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gY2hpcC0+bnVtX2RpZ2l0YWxfbW9kZXMgLSAxOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1sKKwkJCWNoaXAtPmRpZ2l0YWxfbW9kZV9saXN0W3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fZGlnaXRhbF9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGksIG1vZGU7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCW1vZGUgPSBjaGlwLT5kaWdpdGFsX21vZGU7CisJZm9yIChpID0gY2hpcC0+bnVtX2RpZ2l0YWxfbW9kZXMgLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKG1vZGUgPT0gY2hpcC0+ZGlnaXRhbF9tb2RlX2xpc3RbaV0pIHsKKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBpOworCQkJYnJlYWs7CisJCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob19kaWdpdGFsX21vZGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwlpbnQgY2hhbmdlZDsKKwl1bnNpZ25lZCBzaG9ydCBlbW9kZSwgZG1vZGU7CisKKwljaGFuZ2VkID0gMDsKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJZW1vZGUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChlbW9kZSA+PSBjaGlwLT5udW1fZGlnaXRhbF9tb2RlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZG1vZGUgPSBjaGlwLT5kaWdpdGFsX21vZGVfbGlzdFtlbW9kZV07CisKKwlpZiAoZG1vZGUgIT0gY2hpcC0+ZGlnaXRhbF9tb2RlKSB7CisJCS8qIG1vZGVfbXV0ZXggaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIG9wZXJhdGlvbiBhdG9taWMgd3J0CisJCXBjbV9kaWdpdGFsXypfb3BlbigpIGFuZCBzZXRfaW5wdXRfY2xvY2soKSBmdW5jdGlvbnMuICovCisJCWRvd24oJmNoaXAtPm1vZGVfbXV0ZXgpOworCisJCS8qIERvIG5vdCBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgdGhlIGRpZ2l0YWwgbW9kZSB3aGVuIGEgcGNtCisJCWRldmljZSBpcyBvcGVuIGJlY2F1c2UgaXQgYWxzbyBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKwkJYW5kIHRoZSBhbGxvd2VkIHNhbXBsZSByYXRlcyAqLworCQlpZiAoYXRvbWljX3JlYWQoJmNoaXAtPm9wZW5jb3VudCkpIHsKKwkJCWNoYW5nZWQgPSAtRUFHQUlOOworCQl9IGVsc2UgeworCQkJY2hhbmdlZCA9IHNldF9kaWdpdGFsX21vZGUoY2hpcCwgZG1vZGUpOworCQkJLyogSWYgd2UgaGFkIHRvIGNoYW5nZSB0aGUgY2xvY2sgc291cmNlLCByZXBvcnQgaXQgKi8KKwkJCWlmIChjaGFuZ2VkID4gMCAmJiBjaGlwLT5jbG9ja19zcmNfY3RsKSB7CisJCQkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwKKwkJCQkJICAgICAgIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCQkgICAgICAgJmNoaXAtPmNsb2NrX3NyY19jdGwtPmlkKTsKKwkJCQlERV9BQ1QoKCJTRE0oKSA9JWRcbiIsIGNoYW5nZWQpKTsKKwkJCX0KKwkJCWlmIChjaGFuZ2VkID49IDApCisJCQkJY2hhbmdlZCA9IDE7CS8qIE5vIGVycm9ycyAqLworCQl9CisJCXVwKCZjaGlwLT5tb2RlX211dGV4KTsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19kaWdpdGFsX21vZGVfc3dpdGNoIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUgPSAiRGlnaXRhbCBtb2RlIFN3aXRjaCIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfQ0FSRCwKKwkuaW5mbyA9IHNuZF9lY2hvX2RpZ2l0YWxfbW9kZV9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19kaWdpdGFsX21vZGVfZ2V0LAorCS5wdXQgPSBzbmRfZWNob19kaWdpdGFsX21vZGVfcHV0LAorfTsKKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19ESUdJVEFMX01PREVfU1dJVENIICovCisKKworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKworLyoqKioqKioqKioqKioqKioqKiogUy9QRElGIG1vZGUgc3dpdGNoICoqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNuZF9lY2hvX3NwZGlmX21vZGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqbmFtZXNbMl0gPSB7IkNvbnN1bWVyIiwgIlByb2Zlc3Npb25hbCJ9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCXVpbmZvLT5jb3VudCA9IDE7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0pCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAxOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorCSAgICAgICBuYW1lc1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fc3BkaWZfbW9kZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9ICEhY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9lY2hvX3NwZGlmX21vZGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IG1vZGU7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCW1vZGUgPSAhIXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisJaWYgKG1vZGUgIT0gY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCQlzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIG1vZGUpOworCQlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19zcGRpZl9tb2RlX3N3aXRjaCBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIlMvUERJRiBtb2RlIFN3aXRjaCIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfQ0FSRCwKKwkuaW5mbyA9IHNuZF9lY2hvX3NwZGlmX21vZGVfaW5mbywKKwkuZ2V0ID0gc25kX2VjaG9fc3BkaWZfbW9kZV9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX3NwZGlmX21vZGVfcHV0LAorfTsKKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19ESUdJVEFMX0lPICovCisKKworCisjaWZkZWYgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisKKy8qKioqKioqKioqKioqKioqKioqIFNlbGVjdCBpbnB1dCBjbG9jayBzb3VyY2UgKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc25kX2VjaG9fY2xvY2tfc291cmNlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqbmFtZXNbOF0gPSB7CisJCSJJbnRlcm5hbCIsICJXb3JkIiwgIlN1cGVyIiwgIlMvUERJRiIsICJBREFUIiwgIkVTeW5jIiwKKwkJIkVTeW5jOTYiLCAiTVRDIgorCX07CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBjaGlwLT5udW1fY2xvY2tfc291cmNlczsKKwl1aW5mby0+Y291bnQgPSAxOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IGNoaXAtPm51bV9jbG9ja19zb3VyY2VzKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gY2hpcC0+bnVtX2Nsb2NrX3NvdXJjZXMgLSAxOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1sKKwkJCWNoaXAtPmNsb2NrX3NvdXJjZV9saXN0W3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fY2xvY2tfc291cmNlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGksIGNsb2NrOworCisJY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljbG9jayA9IGNoaXAtPmlucHV0X2Nsb2NrOworCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm51bV9jbG9ja19zb3VyY2VzOyBpKyspCisJCWlmIChjbG9jayA9PSBjaGlwLT5jbG9ja19zb3VyY2VfbGlzdFtpXSkKKwkJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fY2xvY2tfc291cmNlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGNoYW5nZWQ7CisJdW5zaWduZWQgaW50IGVjbG9jaywgZGNsb2NrOworCisJY2hhbmdlZCA9IDA7CisJY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwllY2xvY2sgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChlY2xvY2sgPj0gY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMpCisJCXJldHVybiAtRUlOVkFMOworCWRjbG9jayA9IGNoaXAtPmNsb2NrX3NvdXJjZV9saXN0W2VjbG9ja107CisJaWYgKGNoaXAtPmlucHV0X2Nsb2NrICE9IGRjbG9jaykgeworCQlkb3duKCZjaGlwLT5tb2RlX211dGV4KTsKKwkJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCWlmICgoY2hhbmdlZCA9IHNldF9pbnB1dF9jbG9jayhjaGlwLCBkY2xvY2spKSA9PSAwKQorCQkJY2hhbmdlZCA9IDE7CS8qIG5vIGVycm9ycyAqLworCQlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCQl1cCgmY2hpcC0+bW9kZV9tdXRleCk7CisJfQorCisJaWYgKGNoYW5nZWQgPCAwKQorCQlERV9BQ1QoKCJzZXRpY2xrIHZhbCVkIGVyciAweCV4XG4iLCBkY2xvY2ssIGNoYW5nZWQpKTsKKworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fY2xvY2tfc291cmNlX3N3aXRjaCBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIlNhbXBsZSBDbG9jayBTb3VyY2UiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkuaW5mbyA9IHNuZF9lY2hvX2Nsb2NrX3NvdXJjZV9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19jbG9ja19zb3VyY2VfZ2V0LAorCS5wdXQgPSBzbmRfZWNob19jbG9ja19zb3VyY2VfcHV0LAorfTsKKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19FWFRFUk5BTF9DTE9DSyAqLworCisKKworI2lmZGVmIEVDSE9DQVJEX0hBU19QSEFOVE9NX1BPV0VSCisKKy8qKioqKioqKioqKioqKioqKioqIFBoYW50b20gcG93ZXIgc3dpdGNoICoqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNuZF9lY2hvX3BoYW50b21fcG93ZXJfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob19waGFudG9tX3Bvd2VyX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5waGFudG9tX3Bvd2VyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9lY2hvX3BoYW50b21fcG93ZXJfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHBvd2VyLCBjaGFuZ2VkID0gMDsKKworCXBvd2VyID0gISF1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpZiAoY2hpcC0+cGhhbnRvbV9wb3dlciAhPSBwb3dlcikgeworCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJY2hhbmdlZCA9IHNldF9waGFudG9tX3Bvd2VyKGNoaXAsIHBvd2VyKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJaWYgKGNoYW5nZWQgPT0gMCkKKwkJCWNoYW5nZWQgPSAxOwkvKiBubyBlcnJvcnMgKi8KKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19waGFudG9tX3Bvd2VyX3N3aXRjaCBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIlBoYW50b20gcG93ZXIgU3dpdGNoIiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9DQVJELAorCS5pbmZvID0gc25kX2VjaG9fcGhhbnRvbV9wb3dlcl9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19waGFudG9tX3Bvd2VyX2dldCwKKwkucHV0ID0gc25kX2VjaG9fcGhhbnRvbV9wb3dlcl9wdXQsCit9OworCisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX1BIQU5UT01fUE9XRVIgKi8KKworCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTl9BVVRPTVVURQorCisvKioqKioqKioqKioqKioqKioqKiBEaWdpdGFsIGlucHV0IGF1dG9tdXRlIHN3aXRjaCAqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzbmRfZWNob19hdXRvbXV0ZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob19hdXRvbXV0ZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fYXV0b211dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBhdXRvbXV0ZSwgY2hhbmdlZCA9IDA7CisKKwlhdXRvbXV0ZSA9ICEhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJaWYgKGNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgIT0gYXV0b211dGUpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCWNoYW5nZWQgPSBzZXRfaW5wdXRfYXV0b19tdXRlKGNoaXAsIGF1dG9tdXRlKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJaWYgKGNoYW5nZWQgPT0gMCkKKwkJCWNoYW5nZWQgPSAxOwkvKiBubyBlcnJvcnMgKi8KKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19hdXRvbXV0ZV9zd2l0Y2ggX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJEaWdpdGFsIENhcHR1cmUgU3dpdGNoIChhdXRvbXV0ZSkiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX0NBUkQsCisJLmluZm8gPSBzbmRfZWNob19hdXRvbXV0ZV9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19hdXRvbXV0ZV9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX2F1dG9tdXRlX3B1dCwKK307CisKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTl9BVVRPTVVURSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKiogVlUtbWV0ZXJzIHN3aXRjaCAqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzbmRfZWNob192dW1ldGVyc19zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2VjaG9fdnVtZXRlcnNfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJc2V0X21ldGVyc19vbihjaGlwLCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3Z1bWV0ZXJzX3N3aXRjaCBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIlZVLW1ldGVycyBTd2l0Y2giLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX0NBUkQsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSwKKwkuaW5mbyA9IHNuZF9lY2hvX3Z1bWV0ZXJzX3N3aXRjaF9pbmZvLAorCS5wdXQgPSBzbmRfZWNob192dW1ldGVyc19zd2l0Y2hfcHV0LAorfTsKKworCisKKy8qKioqKiBSZWFkIFZVLW1ldGVycyAoaW5wdXQsIG91dHB1dCwgYW5hbG9nIGFuZCBkaWdpdGFsIHRvZ2V0aGVyKSAqKioqKi8KK3N0YXRpYyBpbnQgc25kX2VjaG9fdnVtZXRlcnNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKworCWNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gOTY7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gRUNIT0dBSU5fTUlOT1VUOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDA7CisjaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorCXVpbmZvLT5kaW1lbi5kWzBdID0gMzsJLyogT3V0LCBJbiwgVmlydCAqLworI2Vsc2UKKwl1aW5mby0+ZGltZW4uZFswXSA9IDI7CS8qIE91dCwgSW4gKi8KKyNlbmRpZgorCXVpbmZvLT5kaW1lbi5kWzFdID0gMTY7CS8qIDE2IGNoYW5uZWxzICovCisJdWluZm8tPmRpbWVuLmRbMl0gPSAyOwkvKiAwPWxldmVsLCAxPXBlYWsgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfZWNob192dW1ldGVyc19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWdldF9hdWRpb19tZXRlcnMoY2hpcCwgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fdnVtZXRlcnMgX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJWVS1tZXRlcnMiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCB8IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSwKKwkuaW5mbyA9IHNuZF9lY2hvX3Z1bWV0ZXJzX2luZm8sCisJLmdldCA9IHNuZF9lY2hvX3Z1bWV0ZXJzX2dldCwKK307CisKKworCisvKioqIENoYW5uZWxzIGluZm8gLSBpdCBleHBvcnRzIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzICoqKi8KK3N0YXRpYyBpbnQgc25kX2VjaG9fY2hhbm5lbHNfaW5mb19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisKKwljaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDY7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxIDw8IEVDSE9fQ0xPQ0tfTlVNQkVSOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9lY2hvX2NoYW5uZWxzX2luZm9fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGRldGVjdGVkLCBjbG9ja3MsIGJpdCwgc3JjOworCisJY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG51bV9idXNzZXNfaW4oY2hpcCk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBudW1fYW5hbG9nX2J1c3Nlc19pbihjaGlwKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9IG51bV9idXNzZXNfb3V0KGNoaXApOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzNdID0gbnVtX2FuYWxvZ19idXNzZXNfb3V0KGNoaXApOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzRdID0gbnVtX3BpcGVzX291dChjaGlwKTsKKworCS8qIENvbXB1dGUgdGhlIGJpdG1hc2sgb2YgdGhlIGN1cnJlbnRseSB2YWxpZCBpbnB1dCBjbG9ja3MgKi8KKwlkZXRlY3RlZCA9IGRldGVjdF9pbnB1dF9jbG9ja3MoY2hpcCk7CisJY2xvY2tzID0gMDsKKwlzcmMgPSBjaGlwLT5udW1fY2xvY2tfc291cmNlcyAtIDE7CisJZm9yIChiaXQgPSBFQ0hPX0NMT0NLX05VTUJFUiAtIDE7IGJpdCA+PSAwOyBiaXQtLSkKKwkJaWYgKGRldGVjdGVkICYgKDEgPDwgYml0KSkKKwkJCWZvciAoOyBzcmMgPj0gMDsgc3JjLS0pCisJCQkJaWYgKGJpdCA9PSBjaGlwLT5jbG9ja19zb3VyY2VfbGlzdFtzcmNdKSB7CisJCQkJCWNsb2NrcyB8PSAxIDw8IHNyYzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzVdID0gY2xvY2tzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19jaGFubmVsc19pbmZvIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUgPSAiQ2hhbm5lbHMgaW5mbyIsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfSFdERVAsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAorCS5pbmZvID0gc25kX2VjaG9fY2hhbm5lbHNfaW5mb19pbmZvLAorCS5nZXQgPSBzbmRfZWNob19jaGFubmVsc19pbmZvX2dldCwKK307CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlJUlEgSGFuZGxlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2VjaG9faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gZGV2X2lkOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCWludCBwZXJpb2QsIHNzLCBzdDsKKworCXNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisJc3QgPSBzZXJ2aWNlX2lycShjaGlwKTsKKwlpZiAoc3QgPCAwKSB7CisJCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwkvKiBUaGUgaGFyZHdhcmUgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIHN1YnN0cmVhbSBjYXVzZWQgdGhlIGlycSwKKwl0aHVzIHdlIGhhdmUgdG8gY2hlY2sgYWxsIHJ1bm5pbmcgc3Vic3RyZWFtcy4gKi8KKwlmb3IgKHNzID0gMDsgc3MgPCBEU1BfTUFYUElQRVM7IHNzKyspIHsKKwkJaWYgKChzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdKSkgeworCQkJcGVyaW9kID0gcGNtX3BvaW50ZXIoc3Vic3RyZWFtKSAvCisJCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJCWlmIChwZXJpb2QgIT0gY2hpcC0+bGFzdF9wZXJpb2Rbc3NdKSB7CisJCQkJY2hpcC0+bGFzdF9wZXJpb2Rbc3NdID0gcGVyaW9kOworCQkJCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCQkJc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQorCWlmIChzdCA+IDAgJiYgY2hpcC0+bWlkaV9pbikgeworCQlzbmRfcmF3bWlkaV9yZWNlaXZlKGNoaXAtPm1pZGlfaW4sIGNoaXAtPm1pZGlfYnVmZmVyLCBzdCk7CisJCURFX01JRCgoInJhd21pZGlfaXJlYWQ9JWRcbiIsIHN0KSk7CisJfQorI2VuZGlmCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJTW9kdWxlIGNvbnN0cnVjdGlvbiAvIGRlc3RydWN0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fZnJlZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCURFX0lOSVQoKCJTdG9wIERTUC4uLlxuIikpOworCWlmIChjaGlwLT5jb21tX3BhZ2UpIHsKKwkJcmVzdF9pbl9wZWFjZShjaGlwKTsKKwkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT5jb21tcGFnZV9kbWFfYnVmKTsKKwl9CisJREVfSU5JVCgoIlN0b3BwZWQuXG4iKSk7CisKKwlpZiAoY2hpcC0+aXJxID49IDApCisJCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKworCWlmIChjaGlwLT5kc3BfcmVnaXN0ZXJzKQorCQlpb3VubWFwKGNoaXAtPmRzcF9yZWdpc3RlcnMpOworCisJaWYgKGNoaXAtPmlvcmVzKQorCQlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPmlvcmVzKTsKKworCURFX0lOSVQoKCJNTUlPIGZyZWVkLlxuIikpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CisKKwkvKiByZWxlYXNlIGNoaXAgZGF0YSAqLworCWtmcmVlKGNoaXApOworCURFX0lOSVQoKCJDaGlwIGZyZWVkLlxuIikpOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzbmRfZWNob19kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworCisJREVfSU5JVCgoInNuZF9lY2hvX2Rldl9mcmVlKCkuLi5cbiIpKTsKKwlyZXR1cm4gc25kX2VjaG9fZnJlZShjaGlwKTsKK30KKworCisKKy8qIDwtLXNuZF9lY2hvX3Byb2JlKCkgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IHNuZF9lY2hvX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCSAgICAgc3RydWN0IGVjaG9hdWRpbyAqKnJjaGlwKQoreworCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXA7CisJaW50IGVycjsKKwlzaXplX3Qgc3o7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF9lY2hvX2Rldl9mcmVlLAorCX07CisKKwkqcmNoaXAgPSBOVUxMOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIDB4QzApOworCisJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCisJCXJldHVybiBlcnI7CisJcGNpX3NldF9tYXN0ZXIocGNpKTsKKworCS8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhICovCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlwKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKKworCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwljaGlwLT5jYXJkID0gY2FyZDsKKwljaGlwLT5wY2kgPSBwY2k7CisJY2hpcC0+aXJxID0gLTE7CisKKwkvKiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworCWNoaXAtPmRzcF9yZWdpc3RlcnNfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOworCXN6ID0gcGNpX3Jlc291cmNlX2xlbihwY2ksIDApOworCWlmIChzeiA+IFBBR0VfU0laRSkKKwkJc3ogPSBQQUdFX1NJWkU7CQkvKiBXZSBtYXAgb25seSB0aGUgcmVxdWlyZWQgcGFydCAqLworCisJaWYgKChjaGlwLT5pb3JlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihjaGlwLT5kc3BfcmVnaXN0ZXJzX3BoeXMsIHN6LAorCQkJCQkgICAgICBFQ0hPQ0FSRF9OQU1FKSkgPT0gTlVMTCkgeworCQlzbmRfZWNob19mcmVlKGNoaXApOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ2V0IG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljaGlwLT5kc3BfcmVnaXN0ZXJzID0gKHZvbGF0aWxlIHUzMiBfX2lvbWVtICopCisJCWlvcmVtYXBfbm9jYWNoZShjaGlwLT5kc3BfcmVnaXN0ZXJzX3BoeXMsIHN6KTsKKworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VjaG9faW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCisJCQkJCQlFQ0hPQ0FSRF9OQU1FLCAodm9pZCAqKWNoaXApKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPmlycSA9IHBjaS0+aXJxOworCURFX0lOSVQoKCJwY2k9JXAgaXJxPSVkIHN1YmRldj0lMDR4IEluaXQgaGFyZHdhcmUuLi5cbiIsCisJCSBjaGlwLT5wY2ksIGNoaXAtPmlycSwgY2hpcC0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSk7CisKKwkvKiBDcmVhdGUgdGhlIERTUCBjb21tIHBhZ2UgLSB0aGlzIGlzIHRoZSBhcmVhIG9mIG1lbW9yeSB1c2VkIGZvciBtb3N0CisJb2YgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgRFNQLCB3aGljaCBhY2Nlc3NlcyBpdCB2aWEgYnVzIG1hc3RlcmluZyAqLworCWlmIChzbmRfZG1hX2FsbG9jX3BhZ2VzKFNORFJWX0RNQV9UWVBFX0RFViwgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorCQkJCXNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSwKKwkJCQkmY2hpcC0+Y29tbXBhZ2VfZG1hX2J1ZikgPCAwKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBhbGxvY2F0ZSB0aGUgY29tbSBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNoaXAtPmNvbW1fcGFnZV9waHlzID0gY2hpcC0+Y29tbXBhZ2VfZG1hX2J1Zi5hZGRyOworCWNoaXAtPmNvbW1fcGFnZSA9IChzdHJ1Y3QgY29tbV9wYWdlICopY2hpcC0+Y29tbXBhZ2VfZG1hX2J1Zi5hcmVhOworCisJZXJyID0gaW5pdF9odyhjaGlwLCBjaGlwLT5wY2ktPmRldmljZSwgY2hpcC0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwlpZiAoZXJyKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJDYXJkIGluaXQgT0tcbiIpKTsKKworCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSkgPCAwKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCWF0b21pY19zZXQoJmNoaXAtPm9wZW5jb3VudCwgMCk7CisJaW5pdF9NVVRFWCgmY2hpcC0+bW9kZV9tdXRleCk7CisJY2hpcC0+Y2FuX3NldF9yYXRlID0gMTsKKwkqcmNoaXAgPSBjaGlwOworCS8qIEluaXQgZG9uZSAhICovCisJcmV0dXJuIDA7Cit9CisKKworCisvKiBjb25zdHJ1Y3RvciAqLworc3RhdGljIGludCBfX2RldmluaXQgc25kX2VjaG9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwlzdGF0aWMgaW50IGRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcDsKKwljaGFyICpkc3A7CisJaW50IGksIGVycjsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCURFX0lOSVQoKCJFY2hvYXVkaW8gZHJpdmVyIHN0YXJ0aW5nLi4uXG4iKSk7CisJaSA9IDA7CisJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisJaWYgKGNhcmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoKGVyciA9IHNuZF9lY2hvX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkVjaG9fIiBFQ0hPQ0FSRF9OQU1FKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5jYXJkX25hbWUpOworCisJZHNwID0gIjU2MzAxIjsKKwlpZiAocGNpX2lkLT5kZXZpY2UgPT0gMHgzNDEwKQorCQlkc3AgPSAiNTYzNjEiOworCisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIHJldi4lZCAoRFNQJXMpIGF0IDB4JWx4IGlycSAlaSIsCisJCWNhcmQtPnNob3J0bmFtZSwgcGNpX2lkLT5zdWJkZXZpY2UgJiAweDAwMGYsIGRzcCwKKwkJY2hpcC0+ZHNwX3JlZ2lzdGVyc19waHlzLCBjaGlwLT5pcnEpOworCisJaWYgKChlcnIgPSBzbmRfZWNob19uZXdfcGNtKGNoaXApKSA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibmV3IHBjbSBlcnJvciAlZFxuIiwgZXJyKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQorCWlmIChjaGlwLT5oYXNfbWlkaSkgewkvKiBTb21lIE1pYSdzIGRvIG5vdCBoYXZlIG1pZGkgKi8KKwkJaWYgKChlcnIgPSBzbmRfZWNob19taWRpX2NyZWF0ZShjYXJkLCBjaGlwKSkgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJuZXcgbWlkaSBlcnJvciAlZFxuIiwgZXJyKTsKKwkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisJc25kX2VjaG9fdm1peGVyLmNvdW50ID0gbnVtX3BpcGVzX291dChjaGlwKSAqIG51bV9idXNzZXNfb3V0KGNoaXApOworCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19saW5lX291dHB1dF9nYWluLCBjaGlwKSkpIDwgMCkKKwkJZ290byBjdGxfZXJyb3I7CisJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3ZtaXhlciwgY2hpcCkpKSA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworI2Vsc2UKKwlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fcGNtX291dHB1dF9nYWluLCBjaGlwKSkpIDwgMCkKKwkJZ290byBjdGxfZXJyb3I7CisjZW5kaWYKKworI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCisJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfaW5wdXRfZ2FpbiwgY2hpcCkpKSA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfTk9NSU5BTF9MRVZFTAorCWlmICghY2hpcC0+aGFzbnRfaW5wdXRfbm9taW5hbF9sZXZlbCkKKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2ludHB1dF9ub21pbmFsX2xldmVsLCBjaGlwKSkpIDwgMCkKKwkJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfT1VUUFVUX05PTUlOQUxfTEVWRUwKKwlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fb3V0cHV0X25vbWluYWxfbGV2ZWwsIGNoaXApKSkgPCAwKQorCQlnb3RvIGN0bF9lcnJvcjsKKyNlbmRpZgorCisJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3Z1bWV0ZXJzX3N3aXRjaCwgY2hpcCkpKSA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworCisJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3Z1bWV0ZXJzLCBjaGlwKSkpIDwgMCkKKwkJZ290byBjdGxfZXJyb3I7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorCXNuZF9lY2hvX21vbml0b3JfbWl4ZXIuY291bnQgPSBudW1fYnVzc2VzX2luKGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7CisJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX21vbml0b3JfbWl4ZXIsIGNoaXApKSkgPCAwKQorCQlnb3RvIGN0bF9lcnJvcjsKKyNlbmRpZgorCisjaWZkZWYgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU5fQVVUT01VVEUKKwlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fYXV0b211dGVfc3dpdGNoLCBjaGlwKSkpIDwgMCkKKwkJZ290byBjdGxfZXJyb3I7CisjZW5kaWYKKworCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19jaGFubmVsc19pbmZvLCBjaGlwKSkpIDwgMCkKKwkJZ290byBjdGxfZXJyb3I7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9NT0RFX1NXSVRDSAorCS8qIENyZWF0ZXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBkaWdpdGFsIG1vZGVzICovCisJY2hpcC0+bnVtX2RpZ2l0YWxfbW9kZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWlmIChjaGlwLT5kaWdpdGFsX21vZGVzICYgKDEgPDwgaSkpCisJCQljaGlwLT5kaWdpdGFsX21vZGVfbGlzdFtjaGlwLT5udW1fZGlnaXRhbF9tb2RlcysrXSA9IGk7CisKKwlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fZGlnaXRhbF9tb2RlX3N3aXRjaCwgY2hpcCkpKSA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19ESUdJVEFMX01PREVfU1dJVENIICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRVhURVJOQUxfQ0xPQ0sKKwkvKiBDcmVhdGVzIGEgbGlzdCBvZiBhdmFpbGFibGUgY2xvY2sgc291cmNlcyAqLworCWNoaXAtPm51bV9jbG9ja19zb3VyY2VzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJaWYgKGNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzICYgKDEgPDwgaSkpCisJCQljaGlwLT5jbG9ja19zb3VyY2VfbGlzdFtjaGlwLT5udW1fY2xvY2tfc291cmNlcysrXSA9IGk7CisKKwlpZiAoY2hpcC0+bnVtX2Nsb2NrX3NvdXJjZXMgPiAxKSB7CisJCWNoaXAtPmNsb2NrX3NyY19jdGwgPSBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2Nsb2NrX3NvdXJjZV9zd2l0Y2gsIGNoaXApOworCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGNoaXAtPmNsb2NrX3NyY19jdGwpKSA8IDApCisJCQlnb3RvIGN0bF9lcnJvcjsKKwl9CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19zcGRpZl9tb2RlX3N3aXRjaCwgY2hpcCkpKSA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfUEhBTlRPTV9QT1dFUgorCWlmIChjaGlwLT5oYXNfcGhhbnRvbV9wb3dlcikKKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3BoYW50b21fcG93ZXJfc3dpdGNoLCBjaGlwKSkpIDwgMCkKKwkJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmCisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJZ290byBjdGxfZXJyb3I7CisJfQorCXNuZF9wcmludGsoS0VSTl9JTkZPICJDYXJkIHJlZ2lzdGVyZWQ6ICVzXG4iLCBjYXJkLT5sb25nbmFtZSk7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpLCBjaGlwKTsKKwlkZXYrKzsKKwlyZXR1cm4gMDsKKworY3RsX2Vycm9yOgorCXNuZF9wcmludGsoS0VSTl9FUlIgIm5ldyBjb250cm9sIGVycm9yICVkXG4iLCBlcnIpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfZWNob19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOworCisJY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCWlmIChjaGlwKQorCQlzbmRfY2FyZF9mcmVlKGNoaXAtPmNhcmQpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCUV2ZXJ5dGhpbmcgc3RhcnRzIGFuZCBlbmRzIGhlcmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gIkVjaG9hdWRpbyAiIEVDSE9DQVJEX05BTUUsCisJLmlkX3RhYmxlID0gc25kX2VjaG9faWRzLAorCS5wcm9iZSA9IHNuZF9lY2hvX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZWNob19yZW1vdmUpLAorfTsKKworCisKKy8qIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9lY2hvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKK30KKworCisKKy8qIGNsZWFuIHVwIHRoZSBtb2R1bGUgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfZWNob19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9lY2hvX2luaXQpCittb2R1bGVfZXhpdChhbHNhX2NhcmRfZWNob19leGl0KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4OGM5NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTAsMCArMSw1OTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIENvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA0CisgICBBbGwgcmlnaHRzIHJlc2VydmVkCisgICB3d3cuZWNob2F1ZGlvLmNvbQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorCisgICBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7CisgICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgIE1BICAwMjExMS0xMzA3LCBVU0EuCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworICAgSGVyZSdzIGEgYmxvY2sgZGlhZ3JhbSBvZiBob3cgbW9zdCBvZiB0aGUgY2FyZHMgd29yazoKKworICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICByZWNvcmQgfCAgICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLS0tLSBJbnB1dHMKKyAgICAgICAgICA8LS0tLS0tLXwgICAgICAgICAgIHwgICAgICAgIHwKKyAgICAgUENJICAgICAgICAgIHwgVHJhbnNwb3J0IHwgICAgICAgIHwKKyAgICAgYnVzICAgICAgICAgIHwgIGVuZ2luZSAgIHwgICAgICAgXHwvCisgICAgICAgICAgLS0tLS0tLT58ICAgICAgICAgICB8ICAgICstLS0tLS0tKworICAgICAgICAgICAgcGxheSAgfCAgICAgICAgICAgfC0tLT58bW9uaXRvcnwtLS0tLS0tPiBPdXRwdXRzCisgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgIHwgbWl4ZXIgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsKKworICAgVGhlIGxpbmVzIGdvaW5nIHRvIGFuZCBmcm9tIHRoZSBQQ0kgYnVzIHJlcHJlc2VudCAicGlwZXMiLiAgQSBwaXBlIHBlcmZvcm1zCisgICBhdWRpbyB0cmFuc3BvcnQgLSBtb3ZpbmcgYXVkaW8gZGF0YSB0byBhbmQgZnJvbSBidWZmZXJzIG9uIHRoZSBob3N0IHZpYQorICAgYnVzIG1hc3RlcmluZy4KKworICAgVGhlIGlucHV0cyBhbmQgb3V0cHV0cyBvbiB0aGUgcmlnaHQgcmVwcmVzZW50IGlucHV0IGFuZCBvdXRwdXQgImJ1c3Nlcy4iCisgICBBIGJ1cyBpcyBhIHBoeXNpY2FsLCByZWFsIGNvbm5lY3Rpb24gdG8gdGhlIG91dHNpZGUgd29ybGQuICBBbiBleGFtcGxlCisgICBvZiBhIGJ1cyB3b3VsZCBiZSB0aGUgMS80IiBhbmFsb2cgY29ubmVjdG9ycyBvbiB0aGUgYmFjayBvZiBMYXlsYSBvcgorICAgYW4gUkNBIFMvUERJRiBjb25uZWN0b3IuCisKKyAgIEZvciBtb3N0IGNhcmRzLCB0aGVyZSBpcyBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvdXRwdXRzCisgICBhbmQgYnVzc2VzOyB0aGF0IGlzLCBlYWNoIGluZGl2aWR1YWwgcGlwZSBpcyBoYXJkLXdpcmVkIHRvIGEgc2luZ2xlIGJ1cy4KKworICAgQ2FyZHMgdGhhdCB3b3JrIHRoaXMgd2F5IGFyZSBEYXJsYTIwLCBHaW5hMjAsIExheWxhMjAsIERhcmxhMjQsIEdpbmEyNCwKKyAgIExheWxhMjQsIE1vbmEsIGFuZCBJbmRpZ28uCisKKworICAgTWlhIGhhcyBhIGZlYXR1cmUgY2FsbGVkICJ2aXJ0dWFsIG91dHB1dHMuIgorCisKKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgcmVjb3JkIHwgICAgICAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5wdXRzCisgICAgICAgICAgPC0tLS0tLS18ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAorICAgICBQQ0kgICAgICAgICAgfCBUcmFuc3BvcnQgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgYnVzICAgICAgICAgIHwgIGVuZ2luZSAgIHwgICAgICAgICAgICAgICAgIFx8LworICAgICAgICAgIC0tLS0tLS0+fCAgICAgICAgICAgfCAgICstLS0tLS0rICAgKy0tLS0tLS0rCisgICAgICAgICAgICBwbGF5ICB8ICAgICAgICAgICB8LS0+fHZtaXhlcnwtLT58bW9uaXRvcnwtLS0tLS0tPiBPdXRwdXRzCisgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgKy0tLS0tLSsgICB8IG1peGVyIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKworCisKKyAgIE9idmlvdXNseSwgdGhlIGRpZmZlcmVuY2UgaGVyZSBpcyB0aGUgYm94IGxhYmVsZWQgInZtaXhlci4iICBWbWl4ZXIgaXMKKyAgIHNob3J0IGZvciAidmlydHVhbCBvdXRwdXQgbWl4ZXIuIiAgRm9yIE1pYSwgcGlwZXMgYXJlICpub3QqIGhhcmQtd2lyZWQKKyAgIHRvIGEgc2luZ2xlIGJ1czsgdGhlIHZtaXhlciBsZXRzIHlvdSBtaXggYW55IHBpcGUgdG8gYW55IGJ1cyBpbiBhbnkKKyAgIGNvbWJpbmF0aW9uLgorCisgICBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgZGlhZ3JhbSBpcyB1bmNoYW5nZWQuCisgICBUcmFuc3BvcnQgd29ya3MgZXhhY3RseSB0aGUgc2FtZSB3YXkgLSB0aGUgZGlmZmVyZW5jZSBpcyBpbiB0aGUgbWl4ZXIgc3RhZ2UuCisKKworICAgUGlwZXMgYW5kIGJ1c3NlcyBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgYXQgemVyby4KKworCisKKyAgIFBpcGUgaW5kZXgKKyAgID09PT09PT09PT0KKworICAgQSBudW1iZXIgb2YgY2FsbHMgaW4gQ0VjaG9HYWxzIHJlZmVyIHRvIGEgInBpcGUgaW5kZXgiLiAgQSBwaXBlIGluZGV4IGlzCisgICBhIHVuaXF1ZSBudW1iZXIgZm9yIGEgcGlwZSB0aGF0IHVuYW1iaWd1b3VzbHkgcmVmZXJzIHRvIGEgcGxheWJhY2sgb3IgcmVjb3JkCisgICBwaXBlLiAgUGlwZSBpbmRpY2VzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIGFuYWxvZyBvdXRwdXRzLCBmb2xsb3dlZCBieQorICAgZGlnaXRhbCBvdXRwdXRzLCB0aGVuIGFuYWxvZyBpbnB1dHMsIHRoZW4gZGlnaXRhbCBpbnB1dHMuCisKKyAgIFRha2UgR2luYTI0IGFzIGFuIGV4YW1wbGU6CisKKyAgIFBpcGUgaW5kZXgKKworICAgMC03ICAgICAgICAgICAgQW5hbG9nIG91dHB1dHMgKDAgLi4gRmlyc3REaWdpdGFsQnVzT3V0LTEpCisgICA4LTE1ICAgICAgICAgICBEaWdpdGFsIG91dHB1dHMgKEZpcnN0RGlnaXRhbEJ1c091dCAuLiBOdW1CdXNzZXNPdXQtMSkKKyAgIDE2LTE3ICAgICAgICAgIEFuYWxvZyBpbnB1dHMKKyAgIDE4LTI1ICAgICAgICAgIERpZ2l0YWwgaW5wdXRzCisKKworICAgWW91IGdldCB0aGUgcGlwZSBpbmRleCBieSBjYWxsaW5nIENFY2hvR2Fsczo6T3BlbkF1ZGlvOyB0aGUgb3RoZXIgdHJhbnNwb3J0CisgICBmdW5jdGlvbnMgdGFrZSB0aGUgcGlwZSBpbmRleCBhcyBhIHBhcmFtZXRlci4gIElmIHlvdSBuZWVkIGEgcGlwZSBpbmRleCBmb3IKKyAgIHNvbWUgb3RoZXIgcmVhc29uLCB1c2UgdGhlIGhhbmR5IE1ha2VwaXBlX2luZGV4IG1ldGhvZC4KKworCisgICBTb21lIGNhbGxzIHRha2UgYSBDQ2hhbm5lbE1hc2sgcGFyYW1ldGVyOyBDQ2hhbm5lbE1hc2sgaXMgYSBoYW5keSB3YXkgdG8KKyAgIGdyb3VwIHBpcGUgaW5kaWNlcy4KKworCisKKyAgIERpZ2l0YWwgbW9kZSBzd2l0Y2gKKyAgID09PT09PT09PT09PT09PT09PT0KKworICAgU29tZSBjYXJkcyAocmlnaHQgbm93LCBHaW5hMjQsIExheWxhMjQsIGFuZCBNb25hKSBoYXZlIGEgRGlnaXRhbCBNb2RlIFN3aXRjaAorICAgb3IgRE1TLiAgQ2FyZHMgd2l0aCBhIERNUyBjYW4gYmUgc2V0IHRvIG9uZSBvZiB0aHJlZSBtdXR1YWxseSBleGNsdXNpdmUKKyAgIGRpZ2l0YWwgbW9kZXM6IFMvUERJRiBSQ0EsIFMvUERJRiBvcHRpY2FsLCBvciBBREFUIG9wdGljYWwuCisKKyAgIFRoaXMgbWF5IGNyZWF0ZSBzb21lIGNvbmZ1c2lvbiBzaW5jZSBBREFUIG9wdGljYWwgaXMgOCBjaGFubmVscyB3aWRlIGFuZAorICAgUy9QRElGIGlzIG9ubHkgdHdvIGNoYW5uZWxzIHdpZGUuICBHaW5hMjQsIExheWxhMjQsIGFuZCBNb25hIGhhbmRsZSB0aGlzCisgICBieSBhY3RpbmcgYXMgaWYgdGhleSBhbHdheXMgaGF2ZSA4IGRpZ2l0YWwgb3V0cyBhbmQgaW5zLiAgSWYgeW91IGFyZSBpbgorICAgZWl0aGVyIFMvUERJRiBtb2RlLCB0aGUgbGFzdCA2IGNoYW5uZWxzIGRvbid0IGRvIGFueXRoaW5nIC0gZGF0YSBzZW50CisgICBvdXQgdGhlc2UgY2hhbm5lbHMgaXMgdGhyb3duIGF3YXkgYW5kIHlvdSB3aWxsIGFsd2F5cyByZWNvcmQgemVyb3MuCisKKyAgIE5vdGUgdGhhdCB3aXRoIEdpbmEyNCwgTGF5bGEyNCwgYW5kIE1vbmEsIHNhbXBsZSByYXRlcyBhYm92ZSA1MCBrSHogYXJlCisgICBvbmx5IGF2YWlsYWJsZSBpZiB5b3UgaGF2ZSB0aGUgY2FyZCBjb25maWd1cmVkIGZvciBTL1BESUYgb3B0aWNhbCBvciBTL1BESUYKKyAgIFJDQS4KKworCisKKyAgIERvdWJsZSBzcGVlZCBtb2RlCisgICA9PT09PT09PT09PT09PT09PQorCisgICBTb21lIG9mIHRoZSBjYXJkcyBzdXBwb3J0IDg4LjIga0h6IGFuZCA5NiBrSHogc2FtcGxpbmcgKERhcmxhMjQsIEdpbmEyNCwKKyAgIExheWxhMjQsIE1vbmEsIE1pYSwgYW5kIEluZGlnbykuICBGb3IgdGhlc2UgY2FyZHMsIHRoZSBkcml2ZXIgc29tZXRpbWVzIGhhcworICAgdG8gd29ycnkgYWJvdXQgImRvdWJsZSBzcGVlZCBtb2RlIjsgZG91YmxlIHNwZWVkIG1vZGUgYXBwbGllcyB3aGVuZXZlciB0aGUKKyAgIHNhbXBsaW5nIHJhdGUgaXMgYWJvdmUgNTAga0h6LgorCisgICBGb3IgaW5zdGFuY2UsIE1vbmEgYW5kIExheWxhMjQgc3VwcG9ydCB3b3JkIGNsb2NrIHN5bmMuICBIb3dldmVyLCB0aGV5CisgICBhY3R1YWxseSBzdXBwb3J0IHR3byBkaWZmZXJlbnQgd29yZCBjbG9jayBtb2RlcyAtIHNpbmdsZSBzcGVlZCAoYmVsb3cKKyAgIDUwIGtIeikgYW5kIGRvdWJsZSBzcGVlZCAoYWJvdmUgNTAga0h6KS4gIFRoZSBoYXJkd2FyZSBkZXRlY3RzIGlmIGEgc2luZ2xlCisgICBvciBkb3VibGUgc3BlZWQgd29yZCBjbG9jayBzaWduYWwgaXMgcHJlc2VudDsgdGhlIGdlbmVyaWMgY29kZSB1c2VzIHRoYXQKKyAgIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGljaCBtb2RlIHRvIHVzZS4KKworICAgVGhlIGdlbmVyaWMgY29kZSB0YWtlcyBjYXJlIG9mIGFsbCB0aGlzIGZvciB5b3UuCisqLworCisKKyNpZm5kZWYgX0VDSE9BVURJT19IXworI2RlZmluZSBfRUNIT0FVRElPX0hfCisKKworI2RlZmluZSBUUlVFIDEKKyNkZWZpbmUgRkFMU0UgMAorCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFBDSSB2ZW5kb3IgSUQgYW5kIGRldmljZSBJRHMgZm9yIHRoZSBoYXJkd2FyZQorICovCisjZGVmaW5lIFZFTkRPUl9JRAkJMHgxMDU3CisjZGVmaW5lIERFVklDRV9JRF81NjMwMQkJMHgxODAxCisjZGVmaW5lIERFVklDRV9JRF81NjM2MQkJMHgzNDEwCisjZGVmaW5lIFNVQlZFTkRPUl9JRAkJMHhFQ0MwCisKKworLyoKKyAqIFZhbGlkIEVjaG8gUENJIHN1YnN5c3RlbSBjYXJkIElEcworICovCisjZGVmaW5lIERBUkxBMjAJCQkweDAwMTAKKyNkZWZpbmUgR0lOQTIwCQkJMHgwMDIwCisjZGVmaW5lIExBWUxBMjAJCQkweDAwMzAKKyNkZWZpbmUgREFSTEEyNAkJCTB4MDA0MAorI2RlZmluZSBHSU5BMjQJCQkweDAwNTAKKyNkZWZpbmUgTEFZTEEyNAkJCTB4MDA2MAorI2RlZmluZSBNT05BCQkJMHgwMDcwCisjZGVmaW5lIE1JQQkJCTB4MDA4MAorI2RlZmluZSBJTkRJR08JCQkweDAwOTAKKyNkZWZpbmUgSU5ESUdPX0lPCQkweDAwYTAKKyNkZWZpbmUgSU5ESUdPX0RKCQkweDAwYjAKKyNkZWZpbmUgRUNITzNHCQkJMHgwMTAwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJQXJyYXkgc2l6ZXMgYW5kIHNvIGZvcnRoCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogU2l6ZXMKKyAqLworI2RlZmluZSBFQ0hPX01BWEFVRElPSU5QVVRTCTMyCS8qIE1heCBhdWRpbyBpbnB1dCBjaGFubmVscyAqLworI2RlZmluZSBFQ0hPX01BWEFVRElPT1VUUFVUUwkzMgkvKiBNYXggYXVkaW8gb3V0cHV0IGNoYW5uZWxzICovCisjZGVmaW5lIEVDSE9fTUFYQVVESU9QSVBFUwkzMgkvKiBNYXggbnVtYmVyIG9mIGlucHV0IGFuZCBvdXRwdXQKKwkJCQkJICogcGlwZXMgKi8KKyNkZWZpbmUgRTNHX01BWF9PVVRQVVRTCQkxNgorI2RlZmluZSBFQ0hPX01BWE1JRElKQUNLUwkxCS8qIE1heCBNSURJIHBvcnRzICovCisjZGVmaW5lIEVDSE9fTUlESV9RVUVVRV9TWiAJNTEyCS8qIE1heCBNSURJIGlucHV0IHF1ZXVlIGVudHJpZXMgKi8KKyNkZWZpbmUgRUNIT19NVENfUVVFVUVfU1oJMzIJLyogTWF4IE1JREkgdGltZSBjb2RlIGlucHV0IHF1ZXVlCisJCQkJCSAqIGVudHJpZXMgKi8KKworLyoKKyAqIE1JREkgYWN0aXZpdHkgaW5kaWNhdG9yIHRpbWVvdXQKKyAqLworI2RlZmluZSBNSURJX0FDVElWSVRZX1RJTUVPVVRfVVNFQwkyMDAwMDAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIAorICAgQ2xvY2tzCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ2xvY2sgbnVtYmVycworICovCisjZGVmaW5lIEVDSE9fQ0xPQ0tfSU5URVJOQUwJCTAKKyNkZWZpbmUgRUNIT19DTE9DS19XT1JECQkJMQorI2RlZmluZSBFQ0hPX0NMT0NLX1NVUEVSCQkyCisjZGVmaW5lIEVDSE9fQ0xPQ0tfU1BESUYJCTMKKyNkZWZpbmUgRUNIT19DTE9DS19BREFUCQkJNAorI2RlZmluZSBFQ0hPX0NMT0NLX0VTWU5DCQk1CisjZGVmaW5lIEVDSE9fQ0xPQ0tfRVNZTkM5NgkJNgorI2RlZmluZSBFQ0hPX0NMT0NLX01UQwkJCTcKKyNkZWZpbmUgRUNIT19DTE9DS19OVU1CRVIJCTgKKyNkZWZpbmUgRUNIT19DTE9DS1MJCQkweGZmZmYKKworLyoKKyAqIENsb2NrIGJpdCBudW1iZXJzIC0gdXNlZCB0byByZXBvcnQgY2FwYWJpbGl0aWVzIGFuZCB3aGF0ZXZlciBjbG9ja3MKKyAqIGFyZSBiZWluZyBkZXRlY3RlZCBkeW5hbWljYWxseS4KKyAqLworI2RlZmluZSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTAkJKDEgPDwgRUNIT19DTE9DS19JTlRFUk5BTCkKKyNkZWZpbmUgRUNIT19DTE9DS19CSVRfV09SRAkJKDEgPDwgRUNIT19DTE9DS19XT1JEKQorI2RlZmluZSBFQ0hPX0NMT0NLX0JJVF9TVVBFUgkJKDEgPDwgRUNIT19DTE9DS19TVVBFUikKKyNkZWZpbmUgRUNIT19DTE9DS19CSVRfU1BESUYJCSgxIDw8IEVDSE9fQ0xPQ0tfU1BESUYpCisjZGVmaW5lIEVDSE9fQ0xPQ0tfQklUX0FEQVQJCSgxIDw8IEVDSE9fQ0xPQ0tfQURBVCkKKyNkZWZpbmUgRUNIT19DTE9DS19CSVRfRVNZTkMJCSgxIDw8IEVDSE9fQ0xPQ0tfRVNZTkMpCisjZGVmaW5lIEVDSE9fQ0xPQ0tfQklUX0VTWU5DOTYJCSgxIDw8IEVDSE9fQ0xPQ0tfRVNZTkM5NikKKyNkZWZpbmUgRUNIT19DTE9DS19CSVRfTVRDCQkoMTw8RUNIT19DTE9DS19NVEMpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBEaWdpdGFsIG1vZGVzCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEaWdpdGFsIG1vZGVzIGZvciBNb25hLCBMYXlsYTI0LCBhbmQgR2luYTI0CisgKi8KKyNkZWZpbmUgRElHSVRBTF9NT0RFX05PTkUJCQkweEZGCisjZGVmaW5lIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EJCQkwCisjZGVmaW5lIERJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMCQkxCisjZGVmaW5lIERJR0lUQUxfTU9ERV9BREFUCQkJMgorI2RlZmluZSBESUdJVEFMX01PREVfU1BESUZfQ0RST00JCTMKKyNkZWZpbmUgRElHSVRBTF9NT0RFUwkJCQk0CisKKy8qCisgKiBEaWdpdGFsIG1vZGUgY2FwYWJpbGl0eSBtYXNrcworICovCisjZGVmaW5lIEVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBCSgxIDw8IERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpCisjZGVmaW5lIEVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTAkoMSA8PCBESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCkKKyNkZWZpbmUgRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9BREFUCQkoMSA8PCBESUdJVEFMX01PREVfQURBVCkKKyNkZWZpbmUgRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9DRFJPTQkoMSA8PCBESUdJVEFMX01PREVfU1BESUZfQ0RST00pCisKKworI2RlZmluZSBFWFRfM0dCT1hfTkMJCQkweDAxCS8qIDNHIGJveCBub3QgY29ubmVjdGVkICovCisjZGVmaW5lIEVYVF8zR0JPWF9OT1RfU0VUCQkweDAyCS8qIDNHIGJveCBub3QgZGV0ZWN0ZWQgeWV0ICovCisKKworI2RlZmluZSBFQ0hPR0FJTl9NVVRFRAkJKC0xMjgpCS8qIE1pbmltdW0gcG9zc2libGUgZ2FpbiAqLworI2RlZmluZSBFQ0hPR0FJTl9NSU5PVVQJCSgtMTI4KQkvKiBNaW4gb3V0cHV0IGdhaW4gKGRCKSAqLworI2RlZmluZSBFQ0hPR0FJTl9NQVhPVVQJCSg2KQkvKiBNYXggb3V0cHV0IGdhaW4gKGRCKSAqLworI2RlZmluZSBFQ0hPR0FJTl9NSU5JTlAJCSgtNTApCS8qIE1pbiBpbnB1dCBnYWluICgwLjUgZEIpICovCisjZGVmaW5lIEVDSE9HQUlOX01BWElOUAkJKDUwKQkvKiBNYXggaW5wdXQgZ2FpbiAoMC41IGRCKSAqLworCisjZGVmaW5lIFBJUEVfU1RBVEVfU1RPUFBFRAkwCS8qIFBpcGUgaGFzIGJlZW4gcmVzZXQgKi8KKyNkZWZpbmUgUElQRV9TVEFURV9QQVVTRUQJMQkvKiBQaXBlIGhhcyBiZWVuIHN0b3BwZWQgKi8KKyNkZWZpbmUgUElQRV9TVEFURV9TVEFSVEVECTIJLyogUGlwZSBoYXMgYmVlbiBzdGFydGVkICovCisjZGVmaW5lIFBJUEVfU1RBVEVfUEVORElORwkzCS8qIFBpcGUgaGFzIHBlbmRpbmcgc3RhcnQgKi8KKworCisvKiBEZWJ1ZyBpbml0aWFsaXphdGlvbiAqLworI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNkZWZpbmUgREVfSU5JVCh4KSBzbmRfcHJpbnRrIHgKKyNlbHNlCisjZGVmaW5lIERFX0lOSVQoeCkKKyNlbmRpZgorCisvKiBEZWJ1ZyBod19wYXJhbXMgY2FsbGJhY2tzICovCisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworI2RlZmluZSBERV9IV1AoeCkgc25kX3ByaW50ayB4CisjZWxzZQorI2RlZmluZSBERV9IV1AoeCkKKyNlbmRpZgorCisvKiBEZWJ1ZyBub3JtYWwgYWN0aXZpdHkgKG9wZW4sIHN0YXJ0LCBzdG9wLi4uKSAqLworI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNkZWZpbmUgREVfQUNUKHgpIHNuZF9wcmludGsgeAorI2Vsc2UKKyNkZWZpbmUgREVfQUNUKHgpCisjZW5kaWYKKworLyogRGVidWcgbWlkaSBhY3Rpdml0eSAqLworI2lmZGVmIENPTkZJR19TTkRfREVCVUcKKyNkZWZpbmUgREVfTUlEKHgpIHNuZF9wcmludGsgeAorI2Vsc2UKKyNkZWZpbmUgREVfTUlEKHgpCisjZW5kaWYKKworCitzdHJ1Y3QgYXVkaW9waXBlIHsKKwl2b2xhdGlsZSB1MzIgKmRtYV9jb3VudGVyOwkvKiBDb21tcGFnZSByZWdpc3RlciB0aGF0IGNvbnRhaW5zCisJCQkJCSAqIHRoZSBjdXJyZW50IGRtYSBwb3NpdGlvbgorCQkJCQkgKiAobG93ZXIgMzIgYml0cyBvbmx5KQorCQkJCQkgKi8KKwl1MzIgbGFzdF9jb3VudGVyOwkJLyogVGhlIGxhc3QgcG9zaXRpb24sIHdoaWNoIGlzIHVzZWQKKwkJCQkJICogdG8gY29tcHV0ZS4uLgorCQkJCQkgKi8KKwl1MzIgcG9zaXRpb247CQkJLyogLi4udGhlIG51bWJlciBvZiBieXRlcyB0cmFuZmVycmVkCisJCQkJCSAqIGJ5IHRoZSBETUEgZW5naW5lLCBtb2R1bG8gdGhlCisJCQkJCSAqIGJ1ZmZlciBzaXplCisJCQkJCSAqLworCXNob3J0IGluZGV4OwkJCS8qIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFubmVsIG9yIDwwCisJCQkJCSAqIGlmIGh3IGlzIG5vdCBjb25maWd1cmVkIHlldAorCQkJCQkgKi8KKwlzaG9ydCBpbnRlcmxlYXZlOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciBzZ3BhZ2U7CS8qIFJvb20gZm9yIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0ICovCisJc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaHc7CisJc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cjsKKwlzaG9ydCBzZ2xpc3RfaGVhZDsKKwljaGFyIHN0YXRlOwkJCS8qIHBpcGUgc3RhdGUgKi8KK307CisKKworc3RydWN0IGF1ZGlvZm9ybWF0IHsKKwl1OCBpbnRlcmxlYXZlOwkJCS8qIEhvdyB0aGUgZGF0YSBpcyBhcnJhbmdlZCBpbiBtZW1vcnk6CisJCQkJCSAqIG1vbm8gPSAxLCBzdGVyZW8gPSAyLCAuLi4KKwkJCQkJICovCisJdTggYml0c19wZXJfc2FtcGxlOwkJLyogOCwgMTYsIDI0LCAzMiAoMjQgYml0cyBsZWZ0IGFsaWduZWQpICovCisJY2hhciBtb25vX3RvX3N0ZXJlbzsJCS8qIE9ubHkgdXNlZCBpZiBpbnRlcmxlYXZlIGlzIDEgYW5kCisJCQkJCSAqIGlmIHRoaXMgaXMgYW4gb3V0cHV0IHBpcGUuCisJCQkJCSAqLworCWNoYXIgZGF0YV9hcmVfYmlnZW5kaWFuOwkvKiAxID0gYmlnIGVuZGlhbiwgMCA9IGxpdHRsZSBlbmRpYW4gKi8KK307CisKKworc3RydWN0IGVjaG9hdWRpbyB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtW0RTUF9NQVhQSVBFU107CisJaW50IGxhc3RfcGVyaW9kW0RTUF9NQVhQSVBFU107CisJc3RydWN0IHNlbWFwaG9yZSBtb2RlX211dGV4OworCXUxNiBudW1fZGlnaXRhbF9tb2RlcywgZGlnaXRhbF9tb2RlX2xpc3RbNl07CisJdTE2IG51bV9jbG9ja19zb3VyY2VzLCBjbG9ja19zb3VyY2VfbGlzdFsxMF07CisJYXRvbWljX3Qgb3BlbmNvdW50OworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmNsb2NrX3NyY19jdGw7CisJc3RydWN0IHNuZF9wY20gKmFuYWxvZ19wY20sICpkaWdpdGFsX3BjbTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJY29uc3QgY2hhciAqY2FyZF9uYW1lOworCXN0cnVjdCBwY2lfZGV2ICpwY2k7CisJdW5zaWduZWQgbG9uZyBkc3BfcmVnaXN0ZXJzX3BoeXM7CisJc3RydWN0IHJlc291cmNlICppb3JlczsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgY29tbXBhZ2VfZG1hX2J1ZjsKKwlpbnQgaXJxOworI2lmZGVmIEVDSE9DQVJEX0hBU19NSURJCisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICptaWRpX2luLCAqbWlkaV9vdXQ7CisjZW5kaWYKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwljaGFyIHRpbnVzZTsJCQkJLyogVGltZXIgaW4gdXNlICovCisJY2hhciBtaWRpX2Z1bGw7CQkJCS8qIE1JREkgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsICovCisJY2hhciBjYW5fc2V0X3JhdGU7CisJY2hhciByYXRlX3NldDsKKworCS8qIFRoaXMgc3R1ZmYgaXMgdXNlZCBtYWlubHkgYnkgdGhlIGxvd2xldmVsIGNvZGUgKi8KKwlzdHJ1Y3QgY29tbV9wYWdlICpjb21tX3BhZ2U7CS8qIFZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisJCQkJCSAqIHNlZW4gYnkgRFNQCisJCQkJCSAqLworCXUzMiBwaXBlX2FsbG9jX21hc2s7CQkvKiBCaXRtYXNrIG9mIGFsbG9jYXRlZCBwaXBlcyAqLworCXUzMiBwaXBlX2N5Y2xpY19tYXNrOwkJLyogQml0bWFzayBvZiBwaXBlcyB3aXRoIGN5Y2xpYworCQkJCQkgKiBidWZmZXJzCisJCQkJCSAqLworCXUzMiBzYW1wbGVfcmF0ZTsJCS8qIENhcmQgc2FtcGxlIHJhdGUgaW4gSHogKi8KKwl1OCBkaWdpdGFsX21vZGU7CQkvKiBDdXJyZW50IGRpZ2l0YWwgbW9kZQorCQkJCQkgKiAoc2VlIERJR0lUQUxfTU9ERV8qKQorCQkJCQkgKi8KKwl1OCBzcGRpZl9zdGF0dXM7CQkvKiBHaW5hMjAsIERhcmxhMjAsIERhcmxhMjQgLSBvbmx5ICovCisJdTggY2xvY2tfc3RhdGU7CQkJLyogR2luYTIwLCBEYXJsYTIwLCBEYXJsYTI0IC0gb25seSAqLworCXU4IGlucHV0X2Nsb2NrOwkJCS8qIEN1cnJlbnRseSBzZWxlY3RlZCBzYW1wbGUgY2xvY2sKKwkJCQkJICogc291cmNlCisJCQkJCSAqLworCXU4IG91dHB1dF9jbG9jazsJCS8qIExheWxhMjAgb25seSAqLworCWNoYXIgbWV0ZXJzX2VuYWJsZWQ7CQkvKiBWVS1tZXRlcnMgc3RhdHVzICovCisJY2hhciBhc2ljX2xvYWRlZDsJCS8qIFNldCBUUlVFIHdoZW4gQVNJQyBsb2FkZWQgKi8KKwljaGFyIGJhZF9ib2FyZDsJCQkvKiBTZXQgVFJVRSBpZiBEU1Agd29uJ3QgbG9hZCAqLworCWNoYXIgcHJvZmVzc2lvbmFsX3NwZGlmOwkvKiAwID0gY29uc3VtZXI7IDEgPSBwcm9mZXNzaW9uYWwgKi8KKwljaGFyIG5vbl9hdWRpb19zcGRpZjsJCS8qIDNHIC0gb25seSAqLworCWNoYXIgZGlnaXRhbF9pbl9hdXRvbXV0ZTsJLyogR2luYTI0LCBMYXlsYTI0LCBNb25hIC0gb25seSAqLworCWNoYXIgaGFzX3BoYW50b21fcG93ZXI7CisJY2hhciBoYXNudF9pbnB1dF9ub21pbmFsX2xldmVsOwkvKiBHaW5hM0cgKi8KKwljaGFyIHBoYW50b21fcG93ZXI7CQkvKiBHaW5hM0cgLSBvbmx5ICovCisJY2hhciBoYXNfbWlkaTsKKwljaGFyIG1pZGlfaW5wdXRfZW5hYmxlZDsKKworI2lmZGVmIEVDSE9DQVJEX0VDSE8zRworCS8qIEV4dGVybmFsIG1vZHVsZSAtZGVwZW5kZW50IHBpcGUgYW5kIGJ1cyBpbmRleGVzICovCisJY2hhciBweF9kaWdpdGFsX291dCwgcHhfYW5hbG9nX2luLCBweF9kaWdpdGFsX2luLCBweF9udW07CisJY2hhciBieF9kaWdpdGFsX291dCwgYnhfYW5hbG9nX2luLCBieF9kaWdpdGFsX2luLCBieF9udW07CisjZW5kaWYKKworCWNoYXIgbm9taW5hbF9sZXZlbFtFQ0hPX01BWEFVRElPUElQRVNdOwkvKiBUcnVlID09IC0xMGRCVgorCQkJCQkJICogRmFsc2UgPT0gKzRkQnUgKi8KKwlzOCBpbnB1dF9nYWluW0VDSE9fTUFYQVVESU9JTlBVVFNdOwkvKiBJbnB1dCBsZXZlbCAtNTAuLis1MAorCQkJCQkJICogdW5pdCBpcyAwLjVkQiAqLworCXM4IG91dHB1dF9nYWluW0VDSE9fTUFYQVVESU9PVVRQVVRTXTsJLyogT3V0cHV0IGxldmVsIC0xMjguLis2IGRCCisJCQkJCQkgKiAoLTEyOD1tdXRlZCkgKi8KKwlzOCBtb25pdG9yX2dhaW5bRUNIT19NQVhBVURJT09VVFBVVFNdW0VDSE9fTUFYQVVESU9JTlBVVFNdOworCQkvKiAtMTI4Li4rNiBkQiAqLworCXM4IHZtaXhlcl9nYWluW0VDSE9fTUFYQVVESU9PVVRQVVRTXVtFQ0hPX01BWEFVRElPT1VUUFVUU107CisJCS8qIC0xMjguLis2IGRCICovCisKKwl1MTYgZGlnaXRhbF9tb2RlczsJCS8qIEJpdG1hc2sgb2Ygc3VwcG9ydGVkIG1vZGVzCisJCQkJCSAqIChzZWUgRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV8qKSAqLworCXUxNiBpbnB1dF9jbG9ja190eXBlczsJCS8qIFN1cHBvdGVkIGlucHV0IGNsb2NrIHR5cGVzICovCisJdTE2IG91dHB1dF9jbG9ja190eXBlczsJCS8qIFN1cHBvdGVkIG91dHB1dCBjbG9jayB0eXBlcyAtCisJCQkJCSAqIExheWxhMjAgb25seSAqLworCXUxNiBkZXZpY2VfaWQsIHN1YmRldmljZV9pZDsKKwl1MTYgKmRzcF9jb2RlOwkJCS8qIEN1cnJlbnQgRFNQIGNvZGUgbG9hZGVkLAorCQkJCQkgKiBOVUxMIGlmIG5vdGhpbmcgbG9hZGVkICovCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpkc3BfY29kZV90b19sb2FkOy8qIERTUCBjb2RlIHRvIGxvYWQgKi8KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWNfY29kZTsJLyogQ3VycmVudCBBU0lDIGNvZGUgKi8KKwl1MzIgY29tbV9wYWdlX3BoeXM7CQkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUKKwkJCQkJCSAqIG1lbW9yeSBzZWVuIGJ5IERTUCAqLworCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpkc3BfcmVnaXN0ZXJzOwkvKiBEU1AncyByZWdpc3RlciBiYXNlICovCisJdTMyIGFjdGl2ZV9tYXNrOwkJCS8qIENocy4gYWN0aXZlIG1hc2sgb3IKKwkJCQkJCSAqIHB1bmtzIG91dCAqLworCisjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKKwl1MTYgbXRjX3N0YXRlOwkJCQkvKiBTdGF0ZSBmb3IgTUlESSBpbnB1dCBwYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KKwl1OCBtaWRpX2J1ZmZlcltNSURJX0lOX0JVRkZFUl9TSVpFXTsKKyNlbmRpZgorfTsKKworCitzdGF0aWMgaW50IGluaXRfZHNwX2NvbW1fcGFnZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgaW5pdF9saW5lX2xldmVscyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgZnJlZV9waXBlcyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9waXBlICpwaXBlKTsKK3N0YXRpYyBpbnQgbG9hZF9maXJtd2FyZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgd2FpdF9oYW5kc2hha2Uoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNlbmRfdmVjdG9yKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjb21tYW5kKTsKK3N0YXRpYyBpbnQgZ2V0X2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3X2VudHJ5LAorCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmcm0sIHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5KTsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19NSURJCitzdGF0aWMgaW50IGVuYWJsZV9taWRpX2lucHV0KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgZW5hYmxlKTsKK3N0YXRpYyBpbnQgbWlkaV9zZXJ2aWNlX2lycShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lY2hvX21pZGlfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwkJCQkJICBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKyNlbmRpZgorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9oYW5kc2hha2Uoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5jb21tX3BhZ2UtPmhhbmRzaGFrZSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9kc3BfcmVnaXN0ZXIoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGluZGV4KQoreworCXJldHVybiByZWFkbCgmY2hpcC0+ZHNwX3JlZ2lzdGVyc1tpbmRleF0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RzcF9yZWdpc3RlcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgaW5kZXgsCisJCQkJICAgIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsICZjaGlwLT5kc3BfcmVnaXN0ZXJzW2luZGV4XSk7Cit9CisKKworLyogUGlwZSBhbmQgYnVzIGluZGV4ZXMuIFBYXyogYW5kIEJYXyogYXJlIGRlZmluZWQgYXMgY2hpcC0+cHhfKiBhbmQgY2hpcC0+YnhfKgorZm9yIDNHIGNhcmRzIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gdGhlIGV4dGVybmFsIGJveC4gVGhleSBhcmUgaW50ZWdlcgorY29uc3RhbnRzIGZvciBhbGwgb3RoZXIgY2FyZHMuCitOZXZlciB1c2UgdGhvc2UgZGVmaW5lcyBkaXJlY3RseSwgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGluc3RlYWQuICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB4X2RpZ2l0YWxfb3V0KGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIFBYX0RJR0lUQUxfT1VUOworfQorCitzdGF0aWMgaW5saW5lIGludCBweF9hbmFsb2dfaW4oY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gUFhfQU5BTE9HX0lOOworfQorCitzdGF0aWMgaW5saW5lIGludCBweF9kaWdpdGFsX2luKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIFBYX0RJR0lUQUxfSU47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB4X251bShjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBQWF9OVU07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ4X2RpZ2l0YWxfb3V0KGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIEJYX0RJR0lUQUxfT1VUOworfQorCitzdGF0aWMgaW5saW5lIGludCBieF9hbmFsb2dfaW4oY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gQlhfQU5BTE9HX0lOOworfQorCitzdGF0aWMgaW5saW5lIGludCBieF9kaWdpdGFsX2luKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIEJYX0RJR0lUQUxfSU47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ4X251bShjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBCWF9OVU07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bV9waXBlc19vdXQoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gcHhfYW5hbG9nX2luKGNoaXApOworfQorCitzdGF0aWMgaW5saW5lIGludCBudW1fcGlwZXNfaW4oY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gcHhfbnVtKGNoaXApIC0gcHhfYW5hbG9nX2luKGNoaXApOworfQorCitzdGF0aWMgaW5saW5lIGludCBudW1fYnVzc2VzX291dChjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBieF9hbmFsb2dfaW4oY2hpcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bV9idXNzZXNfaW4oY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gYnhfbnVtKGNoaXApIC0gYnhfYW5hbG9nX2luKGNoaXApOworfQorCitzdGF0aWMgaW5saW5lIGludCBudW1fYW5hbG9nX2J1c3Nlc19vdXQoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gYnhfZGlnaXRhbF9vdXQoY2hpcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bV9hbmFsb2dfYnVzc2VzX2luKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGJ4X2RpZ2l0YWxfaW4oY2hpcCkgLSBieF9hbmFsb2dfaW4oY2hpcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bV9kaWdpdGFsX2J1c3Nlc19vdXQoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gbnVtX2J1c3Nlc19vdXQoY2hpcCkgLSBudW1fYW5hbG9nX2J1c3Nlc19vdXQoY2hpcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51bV9kaWdpdGFsX2J1c3Nlc19pbihjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBudW1fYnVzc2VzX2luKGNoaXApIC0gbnVtX2FuYWxvZ19idXNzZXNfaW4oY2hpcCk7Cit9CisKKy8qIFRoZSBtb25pdG9yIGFycmF5IGlzIGEgb25lLWRpbWVuc2lvbmFsIGFycmF5OyBjb21wdXRlIHRoZSBvZmZzZXQKKyAqIGludG8gdGhlIGFycmF5ICovCitzdGF0aWMgaW5saW5lIGludCBtb25pdG9yX2luZGV4KGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGludCBvdXQsIGludCBpbikKK3sKKwlyZXR1cm4gb3V0ICogbnVtX2J1c3Nlc19pbihjaGlwKSArIGluOworfQorCisKKyNpZm5kZWYgcGNpX2RldmljZQorI2RlZmluZSBwY2lfZGV2aWNlKGNoaXApICgmY2hpcC0+cGNpLT5kZXYpCisjZW5kaWYKKworCisjZW5kaWYgLyogX0VDSE9BVURJT19IXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0MzllYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIENvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA0CisgICBBbGwgcmlnaHRzIHJlc2VydmVkCisgICB3d3cuZWNob2F1ZGlvLmNvbQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorCisgICBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7CisgICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgIE1BICAwMjExMS0xMzA3LCBVU0EuCisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY29tbW9uIGZvciBhbGwgIjNHIiBjYXJkcyAqLworCisKK3N0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwl1MzIgYm94X3N0YXR1czsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzID0KKwkJX19jb25zdGFudF9jcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKKwljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOworCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVEVTVF9BU0lDKTsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkgeworCQljaGlwLT5kc3BfY29kZSA9IE5VTEw7CisJCXJldHVybiAtRUlPOworCX0KKworCWJveF9zdGF0dXMgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmV4dF9ib3hfc3RhdHVzKTsKKwlERV9JTklUKCgiYm94X3N0YXR1cz0leFxuIiwgYm94X3N0YXR1cykpOworCWlmIChib3hfc3RhdHVzID09IEUzR19BU0lDX05PVF9MT0FERUQpCisJCXJldHVybiAtRU5PREVWOworCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCXJldHVybiBib3hfc3RhdHVzICYgRTNHX0JPWF9UWVBFX01BU0s7Cit9CisKKworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfZnJxX3JlZyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmUzZ19mcnFfcmVnaXN0ZXIpOworfQorCisKKworLyogTW9zdCBjb25maWd1cmF0aW9uIG9mIDNHIGNhcmRzIGlzIGFjY29tcGxpc2hlZCBieSB3cml0aW5nIHRoZSBjb250cm9sCityZWdpc3Rlci4gd3JpdGVfY29udHJvbF9yZWcgc2VuZHMgdGhlIG5ldyBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIHRvIHRoZSBEU1AuICovCitzdGF0aWMgaW50IHdyaXRlX2NvbnRyb2xfcmVnKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjdGwsIHUzMiBmcnEsCisJCQkgICAgIGNoYXIgZm9yY2UpCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCURFX0FDVCgoIldyaXRlQ29udHJvbFJlZzogU2V0dGluZyAweCV4LCAweCV4XG4iLCBjdGwsIGZycSkpOworCisJY3RsID0gY3B1X3RvX2xlMzIoY3RsKTsKKwlmcnEgPSBjcHVfdG9fbGUzMihmcnEpOworCisJaWYgKGN0bCAhPSBjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIgfHwKKwkgICAgZnJxICE9IGNoaXAtPmNvbW1fcGFnZS0+ZTNnX2ZycV9yZWdpc3RlciB8fCBmb3JjZSkgeworCQljaGlwLT5jb21tX3BhZ2UtPmUzZ19mcnFfcmVnaXN0ZXIgPSBmcnE7CisJCWNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlciA9IGN0bDsKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1dSSVRFX0NPTlRST0xfUkVHKTsKKwl9CisKKwlERV9BQ1QoKCJXcml0ZUNvbnRyb2xSZWc6IG5vdCB3cml0dGVuLCBubyBjaGFuZ2VcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFNldCB0aGUgZGlnaXRhbCBtb2RlIC0gY3VycmVudGx5IGZvciBHaW5hMjQsIExheWxhMjQsIE1vbmEsIDNHICovCitzdGF0aWMgaW50IHNldF9kaWdpdGFsX21vZGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggbW9kZSkKK3sKKwl1OCBwcmV2aW91c19tb2RlOworCWludCBlcnIsIGksIG87CisKKwkvKiBBbGwgYXVkaW8gY2hhbm5lbHMgbXVzdCBiZSBjbG9zZWQgYmVmb3JlIGNoYW5naW5nIHRoZSBkaWdpdGFsIG1vZGUgKi8KKwlzbmRfYXNzZXJ0KCFjaGlwLT5waXBlX2FsbG9jX21hc2ssIHJldHVybiAtRUFHQUlOKTsKKworCXNuZF9hc3NlcnQoY2hpcC0+ZGlnaXRhbF9tb2RlcyAmICgxIDw8IG1vZGUpLCByZXR1cm4gLUVJTlZBTCk7CisKKwlwcmV2aW91c19tb2RlID0gY2hpcC0+ZGlnaXRhbF9tb2RlOworCWVyciA9IGRzcF9zZXRfZGlnaXRhbF9tb2RlKGNoaXAsIG1vZGUpOworCisJLyogSWYgd2Ugc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdGhlIGRpZ2l0YWwgbW9kZSBmcm9tIG9yIHRvIEFEQVQsCisJICogdGhlbiBtYWtlIHN1cmUgYWxsIG91dHB1dCwgaW5wdXQgYW5kIG1vbml0b3IgbGV2ZWxzIGFyZQorCSAqIHVwZGF0ZWQgYnkgdGhlIERTUCBjb21tIG9iamVjdC4gKi8KKwlpZiAoZXJyID49IDAgJiYgcHJldmlvdXNfbW9kZSAhPSBtb2RlICYmCisJICAgIChwcmV2aW91c19tb2RlID09IERJR0lUQUxfTU9ERV9BREFUIHx8IG1vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspCisJCQkJc2V0X21vbml0b3JfZ2FpbihjaGlwLCBvLCBpLAorCQkJCQkJIGNoaXAtPm1vbml0b3JfZ2FpbltvXVtpXSk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1c3Nlc19pbihjaGlwKTsgaSsrKQorCQkJc2V0X2lucHV0X2dhaW4oY2hpcCwgaSwgY2hpcC0+aW5wdXRfZ2FpbltpXSk7CisJCXVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApOworI2VuZGlmCisKKwkJZm9yIChvID0gMDsgbyA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBvKyspCisJCQlzZXRfb3V0cHV0X2dhaW4oY2hpcCwgbywgY2hpcC0+b3V0cHV0X2dhaW5bb10pOworCQl1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgc2V0X3NwZGlmX2JpdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNvbnRyb2xfcmVnLCB1MzIgcmF0ZSkKK3sKKwljb250cm9sX3JlZyAmPSBFM0dfU1BESUZfRk9STUFUX0NMRUFSX01BU0s7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDMyMDAwIDoKKwkJY29udHJvbF9yZWcgfD0gRTNHX1NQRElGX1NBTVBMRV9SQVRFMCB8IEUzR19TUERJRl9TQU1QTEVfUkFURTE7CisJCWJyZWFrOworCWNhc2UgNDQxMDAgOgorCQlpZiAoY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmKQorCQkJY29udHJvbF9yZWcgfD0gRTNHX1NQRElGX1NBTVBMRV9SQVRFMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMCA6CisJCWNvbnRyb2xfcmVnIHw9IEUzR19TUERJRl9TQU1QTEVfUkFURTE7CisJCWJyZWFrOworCX0KKworCWlmIChjaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYpCisJCWNvbnRyb2xfcmVnIHw9IEUzR19TUERJRl9QUk9fTU9ERTsKKworCWlmIChjaGlwLT5ub25fYXVkaW9fc3BkaWYpCisJCWNvbnRyb2xfcmVnIHw9IEUzR19TUERJRl9OT1RfQVVESU87CisKKwljb250cm9sX3JlZyB8PSBFM0dfU1BESUZfMjRfQklUIHwgRTNHX1NQRElGX1RXT19DSEFOTkVMIHwKKwkJRTNHX1NQRElGX0NPUFlfUEVSTUlUOworCisJcmV0dXJuIGNvbnRyb2xfcmVnOworfQorCisKKworLyogU2V0IHRoZSBTL1BESUYgb3V0cHV0IGZvcm1hdCAqLworc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZikKK3sKKwl1MzIgY29udHJvbF9yZWc7CisKKwljb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKKwljb250cm9sX3JlZyA9IHNldF9zcGRpZl9iaXRzKGNoaXAsIGNvbnRyb2xfcmVnLCBjaGlwLT5zYW1wbGVfcmF0ZSk7CisJcmV0dXJuIHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIGNvbnRyb2xfcmVnLCBnZXRfZnJxX3JlZyhjaGlwKSwgMCk7Cit9CisKKworCisvKiBkZXRlY3RfaW5wdXRfY2xvY2tzKCkgcmV0dXJucyBhIGJpdG1hc2sgY29uc2lzdGluZyBvZiBhbGwgdGhlIGlucHV0IGNsb2NrcworY3VycmVudGx5IGNvbm5lY3RlZCB0byB0aGUgaGFyZHdhcmU7IHRoaXMgY2hhbmdlcyBhcyB0aGUgdXNlciBjb25uZWN0cyBhbmQKK2Rpc2Nvbm5lY3RzIGNsb2NrIGlucHV0cy4gWW91IHNob3VsZCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hpY2gKK2Nsb2NrcyB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHNlbGVjdC4gKi8KK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CisKKwkvKiBNYXAgdGhlIERTUCBjbG9jayBkZXRlY3QgYml0cyB0byB0aGUgZ2VuZXJpYyBkcml2ZXIgY2xvY2sKKwkgKiBkZXRlY3QgYml0cyAqLworCWNsb2Nrc19mcm9tX2RzcCA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+c3RhdHVzX2Nsb2Nrcyk7CisKKwljbG9ja19iaXRzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgRTNHX0NMT0NLX0RFVEVDVF9CSVRfV09SRCkKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9XT1JEOworCisJc3dpdGNoKGNoaXAtPmRpZ2l0YWxfbW9kZSkgeworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX1JDQToKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMOgorCQlpZiAoY2xvY2tzX2Zyb21fZHNwICYgRTNHX0NMT0NLX0RFVEVDVF9CSVRfU1BESUYpCisJCQljbG9ja19iaXRzIHw9IEVDSE9fQ0xPQ0tfQklUX1NQRElGOworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9BREFUOgorCQlpZiAoY2xvY2tzX2Zyb21fZHNwICYgRTNHX0NMT0NLX0RFVEVDVF9CSVRfQURBVCkKKwkJCWNsb2NrX2JpdHMgfD0gRUNIT19DTE9DS19CSVRfQURBVDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNsb2NrX2JpdHM7Cit9CisKKworCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWludCBib3hfdHlwZSwgZXJyOworCisJaWYgKGNoaXAtPmFzaWNfbG9hZGVkKQorCQlyZXR1cm4gMDsKKworCS8qIEdpdmUgdGhlIERTUCBhIGZldyBtaWxsaXNlY29uZHMgdG8gc2V0dGxlIGRvd24gKi8KKwltZGVsYXkoMik7CisKKwllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfM0dfQVNJQywKKwkJCQkmY2FyZF9md1tGV18zR19BU0lDXSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwljaGlwLT5hc2ljX2NvZGUgPSAmY2FyZF9md1tGV18zR19BU0lDXTsKKworCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBhIGxpdHRsZSB0aW1lIHRvIHNldCB1cCAqLworCW1kZWxheSgyKTsKKwkvKiBTZWUgaWYgaXQgd29ya2VkICovCisJYm94X3R5cGUgPSBjaGVja19hc2ljX3N0YXR1cyhjaGlwKTsKKworCS8qIFNldCB1cCB0aGUgY29udHJvbCByZWdpc3RlciBpZiB0aGUgbG9hZCBzdWNjZWVkZWQgLQorCSAqIDQ4IGtIeiwgaW50ZXJuYWwgY2xvY2ssIFMvUERJRiBSQ0EgbW9kZSAqLworCWlmIChib3hfdHlwZSA+PSAwKSB7CisJCWVyciA9IHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIEUzR180OEtIWiwKKwkJCQkJRTNHX0ZSRVFfUkVHX0RFRkFVTFQsIFRSVUUpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGJveF90eXBlOworfQorCisKKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNvbnRyb2xfcmVnLCBjbG9jaywgYmFzZV9yYXRlLCBmcnFfcmVnOworCisJLyogT25seSBzZXQgdGhlIGNsb2NrIGZvciBpbnRlcm5hbCBtb2RlLiAqLworCWlmIChjaGlwLT5pbnB1dF9jbG9jayAhPSBFQ0hPX0NMT0NLX0lOVEVSTkFMKSB7CisJCURFX0FDVCgoInNldF9zYW1wbGVfcmF0ZTogQ2Fubm90IHNldCBzYW1wbGUgcmF0ZSAtICIKKwkJCSJjbG9jayBub3Qgc2V0IHRvIENMS19DTE9DS0lOSU5URVJOQUxcbiIpKTsKKwkJLyogU2F2ZSB0aGUgcmF0ZSBhbnlob3cgKi8KKwkJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJCXNldF9pbnB1dF9jbG9jayhjaGlwLCBjaGlwLT5pbnB1dF9jbG9jayk7CisJCXJldHVybiAwOworCX0KKworCXNuZF9hc3NlcnQocmF0ZSA8IDUwMDAwIHx8IGNoaXAtPmRpZ2l0YWxfbW9kZSAhPSBESUdJVEFMX01PREVfQURBVCwKKwkJICAgcmV0dXJuIC1FSU5WQUwpOworCisJY2xvY2sgPSAwOworCWNvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKTsKKwljb250cm9sX3JlZyAmPSBFM0dfQ0xPQ0tfQ0xFQVJfTUFTSzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgOTYwMDA6CisJCWNsb2NrID0gRTNHXzk2S0haOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQljbG9jayA9IEUzR184OEtIWjsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xvY2sgPSBFM0dfNDhLSFo7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsb2NrID0gRTNHXzQ0S0haOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQljbG9jayA9IEUzR18zMktIWjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2xvY2sgPSBFM0dfQ09OVElOVU9VU19DTE9DSzsKKwkJaWYgKHJhdGUgPiA1MDAwMCkKKwkJCWNsb2NrIHw9IEUzR19ET1VCTEVfU1BFRURfTU9ERTsKKwkJYnJlYWs7CisJfQorCisJY29udHJvbF9yZWcgfD0gY2xvY2s7CisJY29udHJvbF9yZWcgPSBzZXRfc3BkaWZfYml0cyhjaGlwLCBjb250cm9sX3JlZywgcmF0ZSk7CisKKwliYXNlX3JhdGUgPSByYXRlOworCWlmIChiYXNlX3JhdGUgPiA1MDAwMCkKKwkJYmFzZV9yYXRlIC89IDI7CisJaWYgKGJhc2VfcmF0ZSA8IDMyMDAwKQorCQliYXNlX3JhdGUgPSAzMjAwMDsKKworCWZycV9yZWcgPSBFM0dfTUFHSUNfTlVNQkVSIC8gYmFzZV9yYXRlIC0gMjsKKwlpZiAoZnJxX3JlZyA+IEUzR19GUkVRX1JFR19NQVgpCisJCWZycV9yZWcgPSBFM0dfRlJFUV9SRUdfTUFYOworCisJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOwkvKiBpZ25vcmVkIGJ5IHRoZSBEU1AgKi8KKwljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJREVfQUNUKCgiU2V0U2FtcGxlUmF0ZTogJWQgY2xvY2sgJXhcbiIsIHJhdGUsIGNvbnRyb2xfcmVnKSk7CisKKwkvKiBUZWxsIHRoZSBEU1AgYWJvdXQgaXQgLSBEU1AgcmVhZHMgYm90aCBjb250cm9sIHJlZyAmIGZyZXEgcmVnICovCisJcmV0dXJuIHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIGNvbnRyb2xfcmVnLCBmcnFfcmVnLCAwKTsKK30KKworCisKKy8qIFNldCB0aGUgc2FtcGxlIGNsb2NrIHNvdXJjZSB0byBpbnRlcm5hbCwgUy9QRElGLCBBREFUICovCitzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spCit7CisJdTMyIGNvbnRyb2xfcmVnLCBjbG9ja3NfZnJvbV9kc3A7CisKKwlERV9BQ1QoKCJzZXRfaW5wdXRfY2xvY2s6XG4iKSk7CisKKwkvKiBNYXNrIG9mZiB0aGUgY2xvY2sgc2VsZWN0IGJpdHMgKi8KKwljb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlcikgJgorCQlFM0dfQ0xPQ0tfQ0xFQVJfTUFTSzsKKwljbG9ja3NfZnJvbV9kc3AgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPnN0YXR1c19jbG9ja3MpOworCisJc3dpdGNoIChjbG9jaykgeworCWNhc2UgRUNIT19DTE9DS19JTlRFUk5BTDoKKwkJREVfQUNUKCgiU2V0IEVjaG8zRyBjbG9jayB0byBJTlRFUk5BTFxuIikpOworCQljaGlwLT5pbnB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfSU5URVJOQUw7CisJCXJldHVybiBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpOworCWNhc2UgRUNIT19DTE9DS19TUERJRjoKKwkJaWYgKGNoaXAtPmRpZ2l0YWxfbW9kZSA9PSBESUdJVEFMX01PREVfQURBVCkKKwkJCXJldHVybiAtRUFHQUlOOworCQlERV9BQ1QoKCJTZXQgRWNobzNHIGNsb2NrIHRvIFNQRElGXG4iKSk7CisJCWNvbnRyb2xfcmVnIHw9IEUzR19TUERJRl9DTE9DSzsKKwkJaWYgKGNsb2Nrc19mcm9tX2RzcCAmIEUzR19DTE9DS19ERVRFQ1RfQklUX1NQRElGOTYpCisJCQljb250cm9sX3JlZyB8PSBFM0dfRE9VQkxFX1NQRUVEX01PREU7CisJCWVsc2UKKwkJCWNvbnRyb2xfcmVnICY9IH5FM0dfRE9VQkxFX1NQRUVEX01PREU7CisJCWJyZWFrOworCWNhc2UgRUNIT19DTE9DS19BREFUOgorCQlpZiAoY2hpcC0+ZGlnaXRhbF9tb2RlICE9IERJR0lUQUxfTU9ERV9BREFUKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCURFX0FDVCgoIlNldCBFY2hvM0cgY2xvY2sgdG8gQURBVFxuIikpOworCQljb250cm9sX3JlZyB8PSBFM0dfQURBVF9DTE9DSzsKKwkJY29udHJvbF9yZWcgJj0gfkUzR19ET1VCTEVfU1BFRURfTU9ERTsKKwkJYnJlYWs7CisJY2FzZSBFQ0hPX0NMT0NLX1dPUkQ6CisJCURFX0FDVCgoIlNldCBFY2hvM0cgY2xvY2sgdG8gV09SRFxuIikpOworCQljb250cm9sX3JlZyB8PSBFM0dfV09SRF9DTE9DSzsKKwkJaWYgKGNsb2Nrc19mcm9tX2RzcCAmIEUzR19DTE9DS19ERVRFQ1RfQklUX1dPUkQ5NikKKwkJCWNvbnRyb2xfcmVnIHw9IEUzR19ET1VCTEVfU1BFRURfTU9ERTsKKwkJZWxzZQorCQkJY29udHJvbF9yZWcgJj0gfkUzR19ET1VCTEVfU1BFRURfTU9ERTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVfQUNUKCgiSW5wdXQgY2xvY2sgMHgleCBub3Qgc3VwcG9ydGVkIGZvciBFY2hvM0dcbiIsIGNsb2NrKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoaXAtPmlucHV0X2Nsb2NrID0gY2xvY2s7CisJcmV0dXJuIHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIGNvbnRyb2xfcmVnLCBnZXRfZnJxX3JlZyhjaGlwKSwgMSk7Cit9CisKKworCitzdGF0aWMgaW50IGRzcF9zZXRfZGlnaXRhbF9tb2RlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHU4IG1vZGUpCit7CisJdTMyIGNvbnRyb2xfcmVnOworCWludCBlcnIsIGluY29tcGF0aWJsZV9jbG9jazsKKworCS8qIFNldCBjbG9jayB0byAiaW50ZXJuYWwiIGlmIGl0J3Mgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IG1vZGUgKi8KKwlpbmNvbXBhdGlibGVfY2xvY2sgPSBGQUxTRTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMOgorCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX1JDQToKKwkJaWYgKGNoaXAtPmlucHV0X2Nsb2NrID09IEVDSE9fQ0xPQ0tfQURBVCkKKwkJCWluY29tcGF0aWJsZV9jbG9jayA9IFRSVUU7CisJCWJyZWFrOworCWNhc2UgRElHSVRBTF9NT0RFX0FEQVQ6CisJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX1NQRElGKQorCQkJaW5jb21wYXRpYmxlX2Nsb2NrID0gVFJVRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVfQUNUKCgiRGlnaXRhbCBtb2RlIG5vdCBzdXBwb3J0ZWQ6ICVkXG4iLCBtb2RlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJaWYgKGluY29tcGF0aWJsZV9jbG9jaykgeworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IDQ4MDAwOworCQlzZXRfaW5wdXRfY2xvY2soY2hpcCwgRUNIT19DTE9DS19JTlRFUk5BTCk7CisJfQorCisJLyogQ2xlYXIgdGhlIGN1cnJlbnQgZGlnaXRhbCBtb2RlICovCisJY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpOworCWNvbnRyb2xfcmVnICY9IEUzR19ESUdJVEFMX01PREVfQ0xFQVJfTUFTSzsKKworCS8qIFR3ZWFrIHRoZSBjb250cm9sIHJlZyAqLworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUw6CisJCWNvbnRyb2xfcmVnIHw9IEUzR19TUERJRl9PUFRJQ0FMX01PREU7CisJCWJyZWFrOworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX1JDQToKKwkJLyogRTNHX1NQRElGX09QVElDQUxfTU9ERSBiaXQgY2xlYXJlZCAqLworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9BREFUOgorCQljb250cm9sX3JlZyB8PSBFM0dfQURBVF9NT0RFOworCQljb250cm9sX3JlZyAmPSB+RTNHX0RPVUJMRV9TUEVFRF9NT0RFOwkvKiBAQCB1c2VsZXNzICovCisJCWJyZWFrOworCX0KKworCWVyciA9IHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIGNvbnRyb2xfcmVnLCBnZXRfZnJxX3JlZyhjaGlwKSwgMSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5kaWdpdGFsX21vZGUgPSBtb2RlOworCisJREVfQUNUKCgic2V0X2RpZ2l0YWxfbW9kZSglZClcbiIsIGNoaXAtPmRpZ2l0YWxfbW9kZSkpOworCXJldHVybiBpbmNvbXBhdGlibGVfY2xvY2s7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYWZhODMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwpAQCAtMCwwICsxLDExMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIENvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA0CisgICBBbGwgcmlnaHRzIHJlc2VydmVkCisgICB3d3cuZWNob2F1ZGlvLmNvbQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorCisgICBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7CisgICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgIE1BICAwMjExMS0xMzA3LCBVU0EuCisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIFBBR0VfU0laRSA8IDQwOTYKKyNlcnJvciBQQUdFX1NJWkUgaXMgPCA0aworI2VuZGlmCisKK3N0YXRpYyBpbnQgcmVzdG9yZV9kc3BfcmV0dGluZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CisKKworLyogU29tZSB2ZWN0b3IgY29tbWFuZHMgaW52b2x2ZSB0aGUgRFNQIHJlYWRpbmcgb3Igd3JpdGluZyBkYXRhIHRvIGFuZCBmcm9tIHRoZQorY29tbSBwYWdlOyBpZiB5b3Ugc2VuZCBvbmUgb2YgdGhlc2UgY29tbWFuZHMgdG8gdGhlIERTUCwgaXQgd2lsbCBjb21wbGV0ZSB0aGUKK2NvbW1hbmQgYW5kIHRoZW4gd3JpdGUgYSBub24temVybyB2YWx1ZSB0byB0aGUgSGFuZHNoYWtlIGZpZWxkIGluIHRoZQorY29tbSBwYWdlLiAgVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdGhlIGhhbmRzaGFrZSB0byBzaG93IHVwLiAqLworc3RhdGljIGludCB3YWl0X2hhbmRzaGFrZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWludCBpOworCisJLyogV2FpdCB1cCB0byAxMG1zIGZvciB0aGUgaGFuZHNoYWtlIGZyb20gdGhlIERTUCAqLworCWZvciAoaSA9IDA7IGkgPCBIQU5EU0hBS0VfVElNRU9VVDsgaSsrKSB7CisJCS8qIExvb2sgZm9yIHRoZSBoYW5kc2hha2UgdmFsdWUgKi8KKwkJaWYgKGNoaXAtPmNvbW1fcGFnZS0+aGFuZHNoYWtlKSB7CisJCQkvKmlmIChpKSAgREVfQUNUKCgiSGFuZHNoYWtlIHRpbWU6ICVkXG4iLCBpKSk7Ki8KKwkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxKTsKKwl9CisKKwlzbmRfcHJpbnRrKEtFUk5fRVJSICJ3YWl0X2hhbmRzaGFrZSgpOiBUaW1lb3V0IHdhaXRpbmcgZm9yIERTUFxuIik7CisJcmV0dXJuIC1FQlVTWTsKK30KKworCisKKy8qIE11Y2ggb2YgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIERTUCBhbmQgdGhlIGRyaXZlciBpcyBkb25lIHZpYSB2ZWN0b3IKK2NvbW1hbmRzOyBzZW5kX3ZlY3RvciB3cml0ZXMgYSB2ZWN0b3IgY29tbWFuZCB0byB0aGUgRFNQLiAgVHlwaWNhbGx5LCB0aGlzCitjYXVzZXMgdGhlIERTUCB0byByZWFkIG9yIHdyaXRlIGZpZWxkcyBpbiB0aGUgY29tbSBwYWdlLgorUENJIHBvc3RpbmcgaXMgbm90IHJlcXVpcmVkIHRoYW5rcyB0byB0aGUgaGFuZHNoYWtlIGxvZ2ljLiAqLworc3RhdGljIGludCBzZW5kX3ZlY3RvcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY29tbWFuZCkKK3sKKwlpbnQgaTsKKworCXdtYigpOwkvKiBGbHVzaCBhbGwgcGVuZGluZyB3cml0ZXMgYmVmb3JlIHNlbmRpbmcgdGhlIGNvbW1hbmQgKi8KKworCS8qIFdhaXQgdXAgdG8gMTAwbXMgZm9yIHRoZSAidmVjdG9yIGJ1c3kiIGJpdCB0byBiZSBvZmYgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVkVDVE9SX0JVU1lfVElNRU9VVDsgaSsrKSB7CisJCWlmICghKGdldF9kc3BfcmVnaXN0ZXIoY2hpcCwgQ0hJMzJfVkVDVE9SX1JFRykgJgorCQkgICAgICBDSEkzMl9WRUNUT1JfQlVTWSkpIHsKKwkJCXNldF9kc3BfcmVnaXN0ZXIoY2hpcCwgQ0hJMzJfVkVDVE9SX1JFRywgY29tbWFuZCk7CisJCQkvKmlmIChpKSAgREVfQUNUKCgic2VuZF92ZWN0b3IgdGltZTogJWRcbiIsIGkpKTsqLworCQkJcmV0dXJuIDA7CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKworCURFX0FDVCgoS0VSTl9FUlIgInRpbWVvdXQgb24gc2VuZF92ZWN0b3JcbiIpKTsKKwlyZXR1cm4gLUVCVVNZOworfQorCisKKworLyogd3JpdGVfZHNwIHdyaXRlcyBhIDMyLWJpdCB2YWx1ZSB0byB0aGUgRFNQOyB0aGlzIGlzIHVzZWQgYWxtb3N0CitleGNsdXNpdmVseSBmb3IgbG9hZGluZyB0aGUgRFNQLiAqLworc3RhdGljIGludCB3cml0ZV9kc3Aoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGRhdGEpCit7CisJdTMyIHN0YXR1cywgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDAwMDsgaSsrKSB7CS8qIHRpbWVvdXQgPSAxMHMgKi8KKwkJc3RhdHVzID0gZ2V0X2RzcF9yZWdpc3RlcihjaGlwLCBDSEkzMl9TVEFUVVNfUkVHKTsKKwkJaWYgKChzdGF0dXMgJiBDSEkzMl9TVEFUVVNfSE9TVF9XUklURV9FTVBUWSkgIT0gMCkgeworCQkJc2V0X2RzcF9yZWdpc3RlcihjaGlwLCBDSEkzMl9EQVRBX1JFRywgZGF0YSk7CisJCQl3bWIoKTsJCQkvKiB3cml0ZSBpdCBpbW1lZGlhdGVseSAqLworCQkJcmV0dXJuIDA7CisJCX0KKwkJdWRlbGF5KDEpOworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwkJLyogU2V0IFRSVUUgdW50aWwgRFNQIHJlLWxvYWRlZCAqLworCURFX0FDVCgoS0VSTl9FUlIgIndyaXRlX2RzcDogU2V0IGJhZF9ib2FyZCB0byBUUlVFXG4iKSk7CisJcmV0dXJuIC1FSU87Cit9CisKKworCisvKiByZWFkX2RzcCByZWFkcyBhIDMyLWJpdCB2YWx1ZSBmcm9tIHRoZSBEU1A7IHRoaXMgaXMgdXNlZCBhbG1vc3QKK2V4Y2x1c2l2ZWx5IGZvciBsb2FkaW5nIHRoZSBEU1AgYW5kIGNoZWNraW5nIHRoZSBzdGF0dXMgb2YgdGhlIEFTSUMuICovCitzdGF0aWMgaW50IHJlYWRfZHNwKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiAqZGF0YSkKK3sKKwl1MzIgc3RhdHVzLCBpOworCisJZm9yIChpID0gMDsgaSA8IFJFQURfRFNQX1RJTUVPVVQ7IGkrKykgeworCQlzdGF0dXMgPSBnZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX1NUQVRVU19SRUcpOworCQlpZiAoKHN0YXR1cyAmIENISTMyX1NUQVRVU19IT1NUX1JFQURfRlVMTCkgIT0gMCkgeworCQkJKmRhdGEgPSBnZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX0RBVEFfUkVHKTsKKwkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsJCS8qIFNldCBUUlVFIHVudGlsIERTUCByZS1sb2FkZWQgKi8KKwlERV9JTklUKChLRVJOX0VSUiAicmVhZF9kc3A6IFNldCBiYWRfYm9hcmQgdG8gVFJVRVxuIikpOworCXJldHVybiAtRUlPOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlGaXJtd2FyZSBsb2FkaW5nIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGJhY2sgdGhlIHNlcmlhbCBudW1iZXIgZnJvbSB0aGUgRFNQOwordGhpcyBpcyB0cmlnZ2VyZWQgYnkgdGhlIFNFVF9DT01NUEFHRV9BRERSIGNvbW1hbmQuCitPbmx5IHNvbWUgZWFybHkgRWNob2dhbHMgcHJvZHVjdHMgaGF2ZSBzZXJpYWwgbnVtYmVycyBpbiB0aGUgUk9NOwordGhlIHNlcmlhbCBudW1iZXIgaXMgbm90IHVzZWQsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBkbyB0aGlzIGFzCitwYXJ0IG9mIHRoZSBEU1AgbG9hZCBwcm9jZXNzLiAqLworc3RhdGljIGludCByZWFkX3NuKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaW50IGk7CisJdTMyIHNuWzZdOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAocmVhZF9kc3AoY2hpcCwgJnNuW2ldKSkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlYWQgc2VyaWFsIG51bWJlclxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlERV9JTklUKCgiUmVhZCBzZXJpYWwgbnVtYmVyICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKKwkJIHNuWzBdLCBzblsxXSwgc25bMl0sIHNuWzNdLCBzbls0XSkpOworCXJldHVybiAwOworfQorCisKKworI2lmbmRlZiBFQ0hPQ0FSRF9IQVNfQVNJQworLyogVGhpcyBjYXJkIGhhcyBubyBBU0lDLCBqdXN0IHJldHVybiBvayAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhRUNIT0NBUkRfSEFTX0FTSUMgKi8KKworCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfQVNJQworCisvKiBMb2FkIEFTSUMgY29kZSAtIGRvbmUgYWZ0ZXIgdGhlIERTUCBpcyBsb2FkZWQgKi8KK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGVycjsKKwl1MzIgaSwgc2l6ZTsKKwl1OCAqY29kZTsKKworCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgYXNpYywgY2hpcCkpIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiRmlybXdhcmUgbm90IGZvdW5kICFcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNvZGUgPSAodTggKilmdy0+ZGF0YTsKKwlzaXplID0gZnctPnNpemU7CisKKwkvKiBTZW5kIHRoZSAiSGVyZSBjb21lcyB0aGUgQVNJQyIgY29tbWFuZCAqLworCWlmICh3cml0ZV9kc3AoY2hpcCwgY21kKSA8IDApCisJCWdvdG8gbGFfZXJyb3I7CisKKwkvKiBXcml0ZSBsZW5ndGggb2YgQVNJQyBmaWxlIGluIGJ5dGVzICovCisJaWYgKHdyaXRlX2RzcChjaGlwLCBzaXplKSA8IDApCisJCWdvdG8gbGFfZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmICh3cml0ZV9kc3AoY2hpcCwgY29kZVtpXSkgPCAwKQorCQkJZ290byBsYV9lcnJvcjsKKwl9CisKKwlERV9JTklUKCgiQVNJQyBsb2FkZWRcbiIpKTsKKwlmcmVlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gMDsKKworbGFfZXJyb3I6CisJREVfSU5JVCgoImZhaWxlZCBvbiB3cml0ZV9kc3BcbiIpKTsKKwlmcmVlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gLUVJTzsKK30KKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19BU0lDICovCisKKworCisjaWZkZWYgRFNQXzU2MzYxCisKKy8qIEluc3RhbGwgdGhlIHJlc2lkZW50IGxvYWRlciBmb3IgNTYzNjEgRFNQczsgIFRoZSByZXNpZGVudCBsb2FkZXIgaXMgb24KK3RoZSBFUFJPTSBvbiB0aGUgYm9hcmQgZm9yIDU2MzAxIERTUC4gVGhlIHJlc2lkZW50IGxvYWRlciBpcyBhIHRpbnkgbGl0dGxlCitwcm9ncmFtIHRoYXQgaXMgdXNlZCB0byBsb2FkIHRoZSByZWFsIERTUCBjb2RlLiAqLworc3RhdGljIGludCBpbnN0YWxsX3Jlc2lkZW50X2xvYWRlcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBhZGRyZXNzOworCWludCBpbmRleCwgd29yZHMsIGk7CisJdTE2ICpjb2RlOworCXUzMiBzdGF0dXM7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKworCS8qIDU2MzYxIGNhcmRzIG9ubHkhICBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIGJ5IHRoZSBvbGQgNTYzMDEtYmFzZWQKKwlNb25hIGFuZCBHaW5hMjQgKi8KKwlpZiAoY2hpcC0+ZGV2aWNlX2lkICE9IERFVklDRV9JRF81NjM2MSkKKwkJcmV0dXJuIDA7CisKKwkvKiBMb29rIHRvIHNlZSBpZiB0aGUgcmVzaWRlbnQgbG9hZGVyIGlzIHByZXNlbnQuICBJZiB0aGUgcmVzaWRlbnQKKwlsb2FkZXIgaXMgYWxyZWFkeSBpbnN0YWxsZWQsIGhvc3QgZmxhZyA1IHdpbGwgYmUgb24uICovCisJc3RhdHVzID0gZ2V0X2RzcF9yZWdpc3RlcihjaGlwLCBDSEkzMl9TVEFUVVNfUkVHKTsKKwlpZiAoc3RhdHVzICYgQ0hJMzJfU1RBVFVTX1JFR19IRjUpIHsKKwkJREVfSU5JVCgoIlJlc2lkZW50IGxvYWRlciBhbHJlYWR5IGluc3RhbGxlZDsgc3RhdHVzIGlzIDB4JXhcbiIsCisJCQkgc3RhdHVzKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICgoaSA9IGdldF9maXJtd2FyZSgmZncsICZjYXJkX2Z3W0ZXXzM2MV9MT0FERVJdLCBjaGlwKSkgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJGaXJtd2FyZSBub3QgZm91bmQgIVxuIik7CisJCXJldHVybiBpOworCX0KKworCS8qIFRoZSBEU1AgY29kZSBpcyBhbiBhcnJheSBvZiAxNiBiaXQgd29yZHMuICBUaGUgYXJyYXkgaXMgZGl2aWRlZCB1cAorCWludG8gc2VjdGlvbnMuICBUaGUgZmlyc3Qgd29yZCBvZiBlYWNoIHNlY3Rpb24gaXMgdGhlIHNpemUgaW4gd29yZHMsCisJZm9sbG93ZWQgYnkgdGhlIHNlY3Rpb24gdHlwZS4KKwlTaW5jZSBEU1AgYWRkcmVzc2VzIGFuZCBkYXRhIGFyZSAyNCBiaXRzIHdpZGUsIHRoZXkgZWFjaCB0YWtlIHVwIHR3bworCTE2IGJpdCB3b3JkcyBpbiB0aGUgYXJyYXkuCisJVGhpcyBpcyBhIGxvdCBsaWtlIHRoZSBvdGhlciBsb2FkZXIgbG9vcCwgYnV0IGl0J3Mgbm90IGEgbG9vcCwgeW91CisJZG9uJ3Qgd3JpdGUgdGhlIG1lbW9yeSB0eXBlLCBhbmQgeW91IGRvbid0IHdyaXRlIGEgemVybyBhdCB0aGUgZW5kLiAqLworCisJLyogU2V0IERTUCBmb3JtYXQgYml0cyBmb3IgMjQgYml0IG1vZGUgKi8KKwlzZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX0NPTlRST0xfUkVHLAorCQkJIGdldF9kc3BfcmVnaXN0ZXIoY2hpcCwgQ0hJMzJfQ09OVFJPTF9SRUcpIHwgMHg5MDApOworCisJY29kZSA9ICh1MTYgKilmdy0+ZGF0YTsKKworCS8qIFNraXAgdGhlIGhlYWRlciBzZWN0aW9uOyB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgYXJyYXkgaXMgdGhlIHNpemUKKwlvZiB0aGUgZmlyc3Qgc2VjdGlvbiwgc28gdGhlIGZpcnN0IHJlYWwgc2VjdGlvbiBvZiBjb2RlIGlzIHBvaW50ZWQKKwl0byBieSBDb2RlWzBdLiAqLworCWluZGV4ID0gY29kZVswXTsKKworCS8qIFNraXAgdGhlIHNlY3Rpb24gc2l6ZSwgTFJTIGJsb2NrIHR5cGUsIGFuZCBEU1AgbWVtb3J5IHR5cGUgKi8KKwlpbmRleCArPSAzOworCisJLyogR2V0IHRoZSBudW1iZXIgb2YgRFNQIHdvcmRzIHRvIHdyaXRlICovCisJd29yZHMgPSBjb2RlW2luZGV4KytdOworCisJLyogR2V0IHRoZSBEU1AgYWRkcmVzcyBmb3IgdGhpcyBibG9jazsgMjQgYml0cywgc28gYnVpbGQgZnJvbSB0d28gd29yZHMgKi8KKwlhZGRyZXNzID0gKCh1MzIpY29kZVtpbmRleF0gPDwgMTYpICsgY29kZVtpbmRleCArIDFdOworCWluZGV4ICs9IDI7CisKKwkvKiBXcml0ZSB0aGUgY291bnQgdG8gdGhlIERTUCAqLworCWlmICh3cml0ZV9kc3AoY2hpcCwgd29yZHMpKSB7CisJCURFX0lOSVQoKCJpbnN0YWxsX3Jlc2lkZW50X2xvYWRlcjogRmFpbGVkIHRvIHdyaXRlIHdvcmQgY291bnQhXG4iKSk7CisJCWdvdG8gaXJsX2Vycm9yOworCX0KKwkvKiBXcml0ZSB0aGUgRFNQIGFkZHJlc3MgKi8KKwlpZiAod3JpdGVfZHNwKGNoaXAsIGFkZHJlc3MpKSB7CisJCURFX0lOSVQoKCJpbnN0YWxsX3Jlc2lkZW50X2xvYWRlcjogRmFpbGVkIHRvIHdyaXRlIERTUCBhZGRyZXNzIVxuIikpOworCQlnb3RvIGlybF9lcnJvcjsKKwl9CisJLyogV3JpdGUgb3V0IHRoaXMgYmxvY2sgb2YgY29kZSB0byB0aGUgRFNQICovCisJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKKwkJdTMyIGRhdGE7CisKKwkJZGF0YSA9ICgodTMyKWNvZGVbaW5kZXhdIDw8IDE2KSArIGNvZGVbaW5kZXggKyAxXTsKKwkJaWYgKHdyaXRlX2RzcChjaGlwLCBkYXRhKSkgeworCQkJREVfSU5JVCgoImluc3RhbGxfcmVzaWRlbnRfbG9hZGVyOiBGYWlsZWQgdG8gd3JpdGUgRFNQIGNvZGVcbiIpKTsKKwkJCWdvdG8gaXJsX2Vycm9yOworCQl9CisJCWluZGV4ICs9IDI7CisJfQorCisJLyogV2FpdCBmb3IgZmxhZyA1IHRvIGNvbWUgdXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsJLyogVGltZW91dCBpcyA1MHVzICogMjAwID0gMTBtcyAqLworCQl1ZGVsYXkoNTApOworCQlzdGF0dXMgPSBnZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX1NUQVRVU19SRUcpOworCQlpZiAoc3RhdHVzICYgQ0hJMzJfU1RBVFVTX1JFR19IRjUpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSAyMDApIHsKKwkJREVfSU5JVCgoIlJlc2lkZW50IGxvYWRlciBmYWlsZWQgdG8gc2V0IEhGNVxuIikpOworCQlnb3RvIGlybF9lcnJvcjsKKwl9CisKKwlERV9JTklUKCgiUmVzaWRlbnQgbG9hZGVyIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRcbiIpKTsKKwlmcmVlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gMDsKKworaXJsX2Vycm9yOgorCWZyZWVfZmlybXdhcmUoZncpOworCXJldHVybiAtRUlPOworfQorCisjZW5kaWYgLyogRFNQXzU2MzYxICovCisKKworc3RhdGljIGludCBsb2FkX2RzcChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgKmNvZGUpCit7CisJdTMyIGFkZHJlc3MsIGRhdGE7CisJaW50IGluZGV4LCB3b3JkcywgaTsKKworCWlmIChjaGlwLT5kc3BfY29kZSA9PSBjb2RlKSB7CisJCURFX0lOSVQoKCJEU1AgaXMgYWxyZWFkeSBsb2FkZWQhXG4iKSk7CisJCXJldHVybiAwOworCX0KKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwkJLyogU2V0IFRSVUUgdW50aWwgRFNQIGxvYWRlZCAqLworCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsJCS8qIEN1cnJlbnQgRFNQIGNvZGUgbm90IGxvYWRlZCAqLworCWNoaXAtPmFzaWNfbG9hZGVkID0gRkFMU0U7CS8qIExvYWRpbmcgdGhlIERTUCBjb2RlIHdpbGwgcmVzZXQgdGhlIEFTSUMgKi8KKworCURFX0lOSVQoKCJsb2FkX2RzcDogU2V0IGJhZF9ib2FyZCB0byBUUlVFXG4iKSk7CisKKwkvKiBJZiB0aGlzIGJvYXJkIHJlcXVpcmVzIGEgcmVzaWRlbnQgbG9hZGVyLCBpbnN0YWxsIGl0LiAqLworI2lmZGVmIERTUF81NjM2MQorCWlmICgoaSA9IGluc3RhbGxfcmVzaWRlbnRfbG9hZGVyKGNoaXApKSA8IDApCisJCXJldHVybiBpOworI2VuZGlmCisKKwkvKiBTZW5kIHNvZnR3YXJlIHJlc2V0IGNvbW1hbmQgKi8KKwlpZiAoc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1JFU0VUKSA8IDApIHsKKwkJREVfSU5JVCgoIkxvYWREc3A6IHNlbmRfdmVjdG9yIERTUF9WQ19SRVNFVCBmYWlsZWQsIENyaXRpY2FsIEZhaWx1cmVcbiIpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qIERlbGF5IDEwdXMgKi8KKwl1ZGVsYXkoMTApOworCisJLyogV2FpdCAxMG1zIGZvciBIRjMgdG8gaW5kaWNhdGUgdGhhdCBzb2Z0d2FyZSByZXNldCBpcyBjb21wbGV0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsJLyogVGltZW91dCBpcyAxMHVzICogMTAwMCA9IDEwbXMgKi8KKwkJaWYgKGdldF9kc3BfcmVnaXN0ZXIoY2hpcCwgQ0hJMzJfU1RBVFVTX1JFRykgJgorCQkgICAgQ0hJMzJfU1RBVFVTX1JFR19IRjMpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwlpZiAoaSA9PSAxMDAwKSB7CisJCURFX0lOSVQoKCJsb2FkX2RzcDogVGltZW91dCB3YWl0aW5nIGZvciBDSEkzMl9TVEFUVVNfUkVHX0hGM1xuIikpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBTZXQgRFNQIGZvcm1hdCBiaXRzIGZvciAyNCBiaXQgbW9kZSBub3cgdGhhdCBzb2Z0IHJlc2V0IGlzIGRvbmUgKi8KKwlzZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX0NPTlRST0xfUkVHLAorCQkJIGdldF9kc3BfcmVnaXN0ZXIoY2hpcCwgQ0hJMzJfQ09OVFJPTF9SRUcpIHwgMHg5MDApOworCisJLyogTWFpbiBsb2FkZXIgbG9vcCAqLworCisJaW5kZXggPSBjb2RlWzBdOworCWZvciAoOzspIHsKKwkJaW50IGJsb2NrX3R5cGUsIG1lbV90eXBlOworCisJCS8qIFRvdGFsIEJsb2NrIFNpemUgKi8KKwkJaW5kZXgrKzsKKworCQkvKiBCbG9jayBUeXBlICovCisJCWJsb2NrX3R5cGUgPSBjb2RlW2luZGV4XTsKKwkJaWYgKGJsb2NrX3R5cGUgPT0gNCkJLyogV2UncmUgZmluaXNoZWQgKi8KKwkJCWJyZWFrOworCisJCWluZGV4Kys7CisKKwkJLyogTWVtb3J5IFR5cGUgIFA9MCxYPTEsWT0yICovCisJCW1lbV90eXBlID0gY29kZVtpbmRleCsrXTsKKworCQkvKiBCbG9jayBDb2RlIFNpemUgKi8KKwkJd29yZHMgPSBjb2RlW2luZGV4KytdOworCQlpZiAod29yZHMgPT0gMCkJCS8qIFdlJ3JlIGZpbmlzaGVkICovCisJCQlicmVhazsKKworCQkvKiBTdGFydCBBZGRyZXNzICovCisJCWFkZHJlc3MgPSAoKHUzMiljb2RlW2luZGV4XSA8PCAxNikgKyBjb2RlW2luZGV4ICsgMV07CisJCWluZGV4ICs9IDI7CisKKwkJaWYgKHdyaXRlX2RzcChjaGlwLCB3b3JkcykgPCAwKSB7CisJCQlERV9JTklUKCgibG9hZF9kc3A6IGZhaWxlZCB0byB3cml0ZSBudW1iZXIgb2YgRFNQIHdvcmRzXG4iKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAod3JpdGVfZHNwKGNoaXAsIGFkZHJlc3MpIDwgMCkgeworCQkJREVfSU5JVCgoImxvYWRfZHNwOiBmYWlsZWQgdG8gd3JpdGUgRFNQIGFkZHJlc3NcbiIpKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmICh3cml0ZV9kc3AoY2hpcCwgbWVtX3R5cGUpIDwgMCkgeworCQkJREVfSU5JVCgoImxvYWRfZHNwOiBmYWlsZWQgdG8gd3JpdGUgRFNQIG1lbW9yeSB0eXBlXG4iKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQkvKiBDb2RlICovCisJCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrLCBpbmRleCs9MikgeworCQkJZGF0YSA9ICgodTMyKWNvZGVbaW5kZXhdIDw8IDE2KSArIGNvZGVbaW5kZXggKyAxXTsKKwkJCWlmICh3cml0ZV9kc3AoY2hpcCwgZGF0YSkgPCAwKSB7CisJCQkJREVfSU5JVCgoImxvYWRfZHNwOiBmYWlsZWQgdG8gd3JpdGUgRFNQIGRhdGFcbiIpKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCX0KKworCWlmICh3cml0ZV9kc3AoY2hpcCwgMCkgPCAwKSB7CS8qIFdlJ3JlIGRvbmUhISEgKi8KKwkJREVfSU5JVCgoImxvYWRfZHNwOiBGYWlsZWQgdG8gd3JpdGUgZmluYWwgemVyb1xuIikpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdWRlbGF5KDEwKTsKKworCWZvciAoaSA9IDA7IGkgPCA1MDAwOyBpKyspIHsJLyogVGltZW91dCBpcyAxMDB1cyAqIDUwMDAgPSA1MDBtcyAqLworCQkvKiBXYWl0IGZvciBmbGFnIDQgLSBpbmRpY2F0ZXMgdGhhdCB0aGUgRFNQIGxvYWRlZCBPSyAqLworCQlpZiAoZ2V0X2RzcF9yZWdpc3RlcihjaGlwLCBDSEkzMl9TVEFUVVNfUkVHKSAmCisJCSAgICBDSEkzMl9TVEFUVVNfUkVHX0hGNCkgeworCQkJc2V0X2RzcF9yZWdpc3RlcihjaGlwLCBDSEkzMl9DT05UUk9MX1JFRywKKwkJCQkJIGdldF9kc3BfcmVnaXN0ZXIoY2hpcCwgQ0hJMzJfQ09OVFJPTF9SRUcpICYgfjB4MWIwMCk7CisKKwkJCWlmICh3cml0ZV9kc3AoY2hpcCwgRFNQX0ZOQ19TRVRfQ09NTVBBR0VfQUREUikgPCAwKSB7CisJCQkJREVfSU5JVCgoImxvYWRfZHNwOiBGYWlsZWQgdG8gd3JpdGUgRFNQX0ZOQ19TRVRfQ09NTVBBR0VfQUREUlxuIikpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlpZiAod3JpdGVfZHNwKGNoaXAsIGNoaXAtPmNvbW1fcGFnZV9waHlzKSA8IDApIHsKKwkJCQlERV9JTklUKCgibG9hZF9kc3A6IEZhaWxlZCB0byB3cml0ZSBjb21tIHBhZ2UgYWRkcmVzc1xuIikpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQkvKiBHZXQgdGhlIHNlcmlhbCBudW1iZXIgdmlhIHNsYXZlIG1vZGUuCisJCQlUaGlzIGlzIHRyaWdnZXJlZCBieSB0aGUgU0VUX0NPTU1QQUdFX0FERFIgY29tbWFuZC4KKwkJCVdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGUgc2VyaWFsIG51bWJlciBidXQgd2UgaGF2ZSB0bworCQkJZ2V0IGl0IGFzIHBhcnQgb2YgdGhlIERTUCBpbml0IHZvb2Rvby4gKi8KKwkJCWlmIChyZWFkX3NuKGNoaXApIDwgMCkgeworCQkJCURFX0lOSVQoKCJsb2FkX2RzcDogRmFpbGVkIHRvIHJlYWQgc2VyaWFsIG51bWJlclxuIikpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQljaGlwLT5kc3BfY29kZSA9IGNvZGU7CQkvKiBTaG93IHdoaWNoIERTUCBjb2RlIGxvYWRlZCAqLworCQkJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CS8qIERTUCBPSyAqLworCQkJREVfSU5JVCgoImxvYWRfZHNwOiBPSyFcbiIpKTsKKwkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxMDApOworCX0KKworCURFX0lOSVQoKCJsb2FkX2RzcDogRFNQIGxvYWQgdGltZWQgb3V0IHdhaXRpbmcgZm9yIEhGNFxuIikpOworCXJldHVybiAtRUlPOworfQorCisKKworLyogbG9hZF9maXJtd2FyZSB0YWtlcyBjYXJlIG9mIGxvYWRpbmcgdGhlIERTUCBhbmQgYW55IEFTSUMgY29kZS4gKi8KK3N0YXRpYyBpbnQgbG9hZF9maXJtd2FyZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGJveF90eXBlLCBlcnI7CisKKwlzbmRfYXNzZXJ0KGNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgJiYgY2hpcC0+Y29tbV9wYWdlLCByZXR1cm4gLUVQRVJNKTsKKworCS8qIFNlZSBpZiB0aGUgQVNJQyBpcyBwcmVzZW50IGFuZCB3b3JraW5nIC0gb25seSBpZiB0aGUgRFNQIGlzIGFscmVhZHkgbG9hZGVkICovCisJaWYgKGNoaXAtPmRzcF9jb2RlKSB7CisJCWlmICgoYm94X3R5cGUgPSBjaGVja19hc2ljX3N0YXR1cyhjaGlwKSkgPj0gMCkKKwkJCXJldHVybiBib3hfdHlwZTsKKwkJLyogQVNJQyBjaGVjayBmYWlsZWQ7IGZvcmNlIHRoZSBEU1AgdG8gcmVsb2FkICovCisJCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsKKwl9CisKKwlpZiAoKGVyciA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAtPmRzcF9jb2RlX3RvX2xvYWQsIGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gbG9hZF9kc3AoY2hpcCwgKHUxNiAqKWZ3LT5kYXRhKTsKKwlmcmVlX2Zpcm13YXJlKGZ3KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICgoYm94X3R5cGUgPSBsb2FkX2FzaWMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGJveF90eXBlOwkvKiBlcnJvciAqLworCisJaWYgKChlcnIgPSByZXN0b3JlX2RzcF9yZXR0aW5ncyhjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGJveF90eXBlOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlNaXhlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChFQ0hPQ0FSRF9IQVNfSU5QVVRfTk9NSU5BTF9MRVZFTCkgfHwgXAorCWRlZmluZWQoRUNIT0NBUkRfSEFTX09VVFBVVF9OT01JTkFMX0xFVkVMKQorCisvKiBTZXQgdGhlIG5vbWluYWwgbGV2ZWwgZm9yIGFuIGlucHV0IG9yIG91dHB1dCBidXMgKHRydWUgPSAtMTBkQlYsIGZhbHNlID0gKzRkQnUpICovCitzdGF0aWMgaW50IHNldF9ub21pbmFsX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBpbmRleCwgY2hhciBjb25zdW1lcikKK3sKKwlzbmRfYXNzZXJ0KGluZGV4IDwgbnVtX2J1c3Nlc19vdXQoY2hpcCkgKyBudW1fYnVzc2VzX2luKGNoaXApLAorCQkgICByZXR1cm4gLUVJTlZBTCk7CisKKwkvKiBXYWl0IGZvciB0aGUgaGFuZHNoYWtlIChPSyBldmVuIGlmIEFTSUMgaXMgbm90IGxvYWRlZCkgKi8KKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+bm9taW5hbF9sZXZlbFtpbmRleF0gPSBjb25zdW1lcjsKKworCWlmIChjb25zdW1lcikKKwkJY2hpcC0+Y29tbV9wYWdlLT5ub21pbmFsX2xldmVsX21hc2sgfD0gY3B1X3RvX2xlMzIoMSA8PCBpbmRleCk7CisJZWxzZQorCQljaGlwLT5jb21tX3BhZ2UtPm5vbWluYWxfbGV2ZWxfbWFzayAmPSB+Y3B1X3RvX2xlMzIoMSA8PCBpbmRleCk7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU18qX05PTUlOQUxfTEVWRUwgKi8KKworCisKKy8qIFNldCB0aGUgZ2FpbiBmb3IgYSBzaW5nbGUgcGh5c2ljYWwgb3V0cHV0IGNoYW5uZWwgKGRCKS4gKi8KK3N0YXRpYyBpbnQgc2V0X291dHB1dF9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjaGFubmVsLCBzOCBnYWluKQoreworCXNuZF9hc3NlcnQoY2hhbm5lbCA8IG51bV9idXNzZXNfb3V0KGNoaXApLCByZXR1cm4gLUVJTlZBTCk7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJLyogU2F2ZSB0aGUgbmV3IHZhbHVlICovCisJY2hpcC0+b3V0cHV0X2dhaW5bY2hhbm5lbF0gPSBnYWluOworCWNoaXAtPmNvbW1fcGFnZS0+bGluZV9vdXRfbGV2ZWxbY2hhbm5lbF0gPSBnYWluOworCXJldHVybiAwOworfQorCisKKworI2lmZGVmIEVDSE9DQVJEX0hBU19NT05JVE9SCisvKiBTZXQgdGhlIG1vbml0b3IgbGV2ZWwgZnJvbSBhbiBpbnB1dCBidXMgdG8gYW4gb3V0cHV0IGJ1cy4gKi8KK3N0YXRpYyBpbnQgc2V0X21vbml0b3JfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgaW5wdXQsCisJCQkgICAgczggZ2FpbikKK3sKKwlzbmRfYXNzZXJ0KG91dHB1dCA8IG51bV9idXNzZXNfb3V0KGNoaXApICYmCisJCSAgIGlucHV0IDwgbnVtX2J1c3Nlc19pbihjaGlwKSwgcmV0dXJuIC1FSU5WQUwpOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPm1vbml0b3JfZ2FpbltvdXRwdXRdW2lucHV0XSA9IGdhaW47CisJY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9yc1ttb25pdG9yX2luZGV4KGNoaXAsIG91dHB1dCwgaW5wdXQpXSA9IGdhaW47CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX01PTklUT1IgKi8KKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVhZCBhbmQgdXBkYXRlIG91dHB1dCwgbm9taW5hbCAmIG1vbml0b3IgbGV2ZWxzIGluIGNvbW0gcGFnZS4gKi8KK3N0YXRpYyBpbnQgdXBkYXRlX291dHB1dF9saW5lX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfT1VUVk9MKTsKK30KKworCisKKy8qIFRlbGwgdGhlIERTUCB0byByZWFkIGFuZCB1cGRhdGUgaW5wdXQgbGV2ZWxzIGluIGNvbW0gcGFnZSAqLworc3RhdGljIGludCB1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0lOR0FJTik7Cit9CisKKworCisvKiBzZXRfbWV0ZXJzX29uIHR1cm5zIHRoZSBtZXRlcnMgb24gb3Igb2ZmLiAgSWYgbWV0ZXJzIGFyZSB0dXJuZWQgb24sIHRoZSBEU1AKK3dpbGwgd3JpdGUgdGhlIG1ldGVyIGFuZCBjbG9jayBkZXRlY3QgdmFsdWVzIHRvIHRoZSBjb21tIHBhZ2UgYXQgYWJvdXQgMzBIeiAqLworc3RhdGljIHZvaWQgc2V0X21ldGVyc19vbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIG9uKQoreworCWlmIChvbiAmJiAhY2hpcC0+bWV0ZXJzX2VuYWJsZWQpIHsKKwkJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX01FVEVSU19PTik7CisJCWNoaXAtPm1ldGVyc19lbmFibGVkID0gMTsKKwl9IGVsc2UgaWYgKCFvbiAmJiBjaGlwLT5tZXRlcnNfZW5hYmxlZCkgeworCQlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUVURVJTX09GRik7CisJCWNoaXAtPm1ldGVyc19lbmFibGVkID0gMDsKKwkJbWVtc2V0KChzOCAqKWNoaXAtPmNvbW1fcGFnZS0+dnVfbWV0ZXIsIEVDSE9HQUlOX01VVEVELAorCQkgICAgICAgRFNQX01BWFBJUEVTKTsKKwkJbWVtc2V0KChzOCAqKWNoaXAtPmNvbW1fcGFnZS0+cGVha19tZXRlciwgRUNIT0dBSU5fTVVURUQsCisJCSAgICAgICBEU1BfTUFYUElQRVMpOworCX0KK30KKworCisKKy8qIEZpbGwgb3V0IGFuIHRoZSBnaXZlbiBhcnJheSB1c2luZyB0aGUgY3VycmVudCB2YWx1ZXMgaW4gdGhlIGNvbW0gcGFnZS4KK01ldGVycyBhcmUgd3JpdHRlbiBpbiB0aGUgY29tbSBwYWdlIGJ5IHRoZSBEU1AgaW4gdGhpcyBvcmRlcjoKKyBPdXRwdXQgYnVzc2VzCisgSW5wdXQgYnVzc2VzCisgT3V0cHV0IHBpcGVzICh2bWl4ZXIgY2FyZHMgb25seSkKKworVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gMTYgaW4vb3V0IGJ1c3NlcyBvciBwaXBlcworTWV0ZXJzIGlzIGFuIGFycmF5IFszXVsxNl1bMl0gb2YgbG9uZy4gKi8KK3N0YXRpYyB2b2lkIGdldF9hdWRpb19tZXRlcnMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgbG9uZyAqbWV0ZXJzKQoreworCWludCBpLCBtLCBuOworCisJbSA9IDA7CisJbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyssIG0rKykgeworCQltZXRlcnNbbisrXSA9IGNoaXAtPmNvbW1fcGFnZS0+dnVfbWV0ZXJbbV07CisJCW1ldGVyc1tuKytdID0gY2hpcC0+Y29tbV9wYWdlLT5wZWFrX21ldGVyW21dOworCX0KKwlmb3IgKDsgbiA8IDMyOyBuKyspCisJCW1ldGVyc1tuXSA9IDA7CisKKyNpZmRlZiBFQ0hPQ0FSRF9FQ0hPM0cKKwltID0gRTNHX01BWF9PVVRQVVRTOwkvKiBTa2lwIHVudXNlZCBtZXRlcnMgKi8KKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKywgbSsrKSB7CisJCW1ldGVyc1tuKytdID0gY2hpcC0+Y29tbV9wYWdlLT52dV9tZXRlclttXTsKKwkJbWV0ZXJzW24rK10gPSBjaGlwLT5jb21tX3BhZ2UtPnBlYWtfbWV0ZXJbbV07CisJfQorCWZvciAoOyBuIDwgNjQ7IG4rKykKKwkJbWV0ZXJzW25dID0gMDsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGVzX291dChjaGlwKTsgaSsrLCBtKyspIHsKKwkJbWV0ZXJzW24rK10gPSBjaGlwLT5jb21tX3BhZ2UtPnZ1X21ldGVyW21dOworCQltZXRlcnNbbisrXSA9IGNoaXAtPmNvbW1fcGFnZS0+cGVha19tZXRlclttXTsKKwl9CisjZW5kaWYKKwlmb3IgKDsgbiA8IDk2OyBuKyspCisJCW1ldGVyc1tuXSA9IDA7Cit9CisKKworCitzdGF0aWMgaW50IHJlc3RvcmVfZHNwX3JldHRpbmdzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaW50IGVycjsKKwlERV9JTklUKCgicmVzdG9yZV9kc3Bfc2V0dGluZ3NcbiIpKTsKKworCWlmICgoZXJyID0gY2hlY2tfYXNpY19zdGF0dXMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEAgR2luYTIwL0RhcmxhMjAgb25seS4gU2hvdWxkIGJlIGhhcm1sZXNzIGZvciBvdGhlciBjYXJkcy4gKi8KKwljaGlwLT5jb21tX3BhZ2UtPmdkX2Nsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CisJY2hpcC0+Y29tbV9wYWdlLT5nZF9zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CisJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOworCisJaWYgKChlcnIgPSBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoY2hpcC0+bWV0ZXJzX2VuYWJsZWQpCisJCWlmIChzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUVURVJTX09OKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19FWFRFUk5BTF9DTE9DSworCWlmIChzZXRfaW5wdXRfY2xvY2soY2hpcCwgY2hpcC0+aW5wdXRfY2xvY2spIDwgMCkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYKKworI2lmZGVmIEVDSE9DQVJEX0hBU19PVVRQVVRfQ0xPQ0tfU1dJVENICisJaWYgKHNldF9vdXRwdXRfY2xvY2soY2hpcCwgY2hpcC0+b3V0cHV0X2Nsb2NrKSA8IDApCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKKwlpZiAodXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAodXBkYXRlX2lucHV0X2xpbmVfbGV2ZWwoY2hpcCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwlpZiAodXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKSA8IDApCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisKKwlERV9JTklUKCgicmVzdG9yZV9kc3BfcmV0dGluZ3MgZG9uZVxuIikpOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0ZMQUdTKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJVHJhbnNwb3J0IGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNldF9hdWRpb19mb3JtYXQoKSBzZXRzIHRoZSBmb3JtYXQgb2YgdGhlIGF1ZGlvIGRhdGEgaW4gaG9zdCBtZW1vcnkgZm9yCit0aGlzIHBpcGUuICBOb3RlIHRoYXQgX01TXyAobW9uby10by1zdGVyZW8pIHBsYXliYWNrIG1vZGVzIGFyZSBub3QgdXNlZCBieSBBTFNBCitidXQgdGhleSBhcmUgaGVyZSBiZWNhdXNlIHRoZXkgYXJlIGp1c3QgbW9ubyB3aGlsZSBjYXB0dXJpbmcgKi8KK3N0YXRpYyB2b2lkIHNldF9hdWRpb19mb3JtYXQoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IHBpcGVfaW5kZXgsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCAqZm9ybWF0KQoreworCXUxNiBkc3BfZm9ybWF0OworCisJZHNwX2Zvcm1hdCA9IERTUF9BVURJT0ZPUk1fU1NfMTZMRTsKKworCS8qIExvb2sgZm9yIHN1cGVyLWludGVybGVhdmUgKG5vIGJpZy1lbmRpYW4gYW5kIDggYml0cykgKi8KKwlpZiAoZm9ybWF0LT5pbnRlcmxlYXZlID4gMikgeworCQlzd2l0Y2ggKGZvcm1hdC0+Yml0c19wZXJfc2FtcGxlKSB7CisJCWNhc2UgMTY6CisJCQlkc3BfZm9ybWF0ID0gRFNQX0FVRElPRk9STV9TVVBFUl9JTlRFUkxFQVZFXzE2TEU7CisJCQlicmVhazsKKwkJY2FzZSAyNDoKKwkJCWRzcF9mb3JtYXQgPSBEU1BfQVVESU9GT1JNX1NVUEVSX0lOVEVSTEVBVkVfMjRMRTsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJZHNwX2Zvcm1hdCA9IERTUF9BVURJT0ZPUk1fU1VQRVJfSU5URVJMRUFWRV8zMkxFOworCQkJYnJlYWs7CisJCX0KKwkJZHNwX2Zvcm1hdCB8PSBmb3JtYXQtPmludGVybGVhdmU7CisJfSBlbHNlIGlmIChmb3JtYXQtPmRhdGFfYXJlX2JpZ2VuZGlhbikgeworCQkvKiBGb3IgYmlnLWVuZGlhbiBkYXRhLCBvbmx5IDMyIGJpdCBzYW1wbGVzIGFyZSBzdXBwb3J0ZWQgKi8KKwkJc3dpdGNoIChmb3JtYXQtPmludGVybGVhdmUpIHsKKwkJY2FzZSAxOgorCQkJZHNwX2Zvcm1hdCA9IERTUF9BVURJT0ZPUk1fTU1fMzJCRTsKKwkJCWJyZWFrOworI2lmZGVmIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCisJCWNhc2UgMjoKKwkJCWRzcF9mb3JtYXQgPSBEU1BfQVVESU9GT1JNX1NTXzMyQkU7CisJCQlicmVhazsKKyNlbmRpZgorCQl9CisJfSBlbHNlIGlmIChmb3JtYXQtPmludGVybGVhdmUgPT0gMSAmJgorCQkgICBmb3JtYXQtPmJpdHNfcGVyX3NhbXBsZSA9PSAzMiAmJiAhZm9ybWF0LT5tb25vX3RvX3N0ZXJlbykgeworCQkvKiAzMiBiaXQgbGl0dGxlLWVuZGlhbiBtb25vLT5tb25vIGNhc2UgKi8KKwkJZHNwX2Zvcm1hdCA9IERTUF9BVURJT0ZPUk1fTU1fMzJMRTsKKwl9IGVsc2UgeworCQkvKiBIYW5kbGUgdGhlIG90aGVyIGxpdHRsZS1lbmRpYW4gZm9ybWF0cyAqLworCQlzd2l0Y2ggKGZvcm1hdC0+Yml0c19wZXJfc2FtcGxlKSB7CisJCWNhc2UgODoKKwkJCWlmIChmb3JtYXQtPmludGVybGVhdmUgPT0gMikKKwkJCQlkc3BfZm9ybWF0ID0gRFNQX0FVRElPRk9STV9TU184OworCQkJZWxzZQorCQkJCWRzcF9mb3JtYXQgPSBEU1BfQVVESU9GT1JNX01TXzg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSAxNjoKKwkJCWlmIChmb3JtYXQtPmludGVybGVhdmUgPT0gMikKKwkJCQlkc3BfZm9ybWF0ID0gRFNQX0FVRElPRk9STV9TU18xNkxFOworCQkJZWxzZQorCQkJCWRzcF9mb3JtYXQgPSBEU1BfQVVESU9GT1JNX01TXzE2TEU7CisJCQlicmVhazsKKwkJY2FzZSAyNDoKKwkJCWlmIChmb3JtYXQtPmludGVybGVhdmUgPT0gMikKKwkJCQlkc3BfZm9ybWF0ID0gRFNQX0FVRElPRk9STV9TU18yNExFOworCQkJZWxzZQorCQkJCWRzcF9mb3JtYXQgPSBEU1BfQVVESU9GT1JNX01TXzI0TEU7CisJCQlicmVhazsKKwkJY2FzZSAzMjoKKwkJCWlmIChmb3JtYXQtPmludGVybGVhdmUgPT0gMikKKwkJCQlkc3BfZm9ybWF0ID0gRFNQX0FVRElPRk9STV9TU18zMkxFOworCQkJZWxzZQorCQkJCWRzcF9mb3JtYXQgPSBEU1BfQVVESU9GT1JNX01TXzMyTEU7CisJCQlicmVhazsKKwkJfQorCX0KKwlERV9BQ1QoKCJzZXRfYXVkaW9fZm9ybWF0WyVkXSA9ICV4XG4iLCBwaXBlX2luZGV4LCBkc3BfZm9ybWF0KSk7CisJY2hpcC0+Y29tbV9wYWdlLT5hdWRpb19mb3JtYXRbcGlwZV9pbmRleF0gPSBjcHVfdG9fbGUxNihkc3BfZm9ybWF0KTsKK30KKworCisKKy8qIHN0YXJ0X3RyYW5zcG9ydCBzdGFydHMgdHJhbnNwb3J0IGZvciBhIHNldCBvZiBwaXBlcy4KK1RoZSBiaXRzIDEgaW4gY2hhbm5lbF9tYXNrIHNwZWNpZnkgd2hhdCBwaXBlcyB0byBzdGFydC4gT25seSB0aGUgYml0IG9mIHRoZQorZmlyc3QgY2hhbm5lbCBtdXN0IGJlIHNldCwgcmVnYXJkbGVzcyBpdHMgaW50ZXJsZWF2ZS4KK1NhbWUgdGhpbmcgZm9yIHBhdXNlXyBhbmQgc3RvcF8gLXRyYXNwb3J0IGJlbG93LiAqLworc3RhdGljIGludCBzdGFydF90cmFuc3BvcnQoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNoYW5uZWxfbWFzaywKKwkJCSAgIHUzMiBjeWNsaWNfbWFzaykKK3sKKwlERV9BQ1QoKCJzdGFydF90cmFuc3BvcnQgJXhcbiIsIGNoYW5uZWxfbWFzaykpOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPmNvbW1fcGFnZS0+Y21kX3N0YXJ0IHw9IGNwdV90b19sZTMyKGNoYW5uZWxfbWFzayk7CisKKwlpZiAoY2hpcC0+Y29tbV9wYWdlLT5jbWRfc3RhcnQpIHsKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU1RBUlRfVFJBTlNGRVIpOworCQlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJLyogS2VlcCB0cmFjayBvZiB3aGljaCBwaXBlcyBhcmUgdHJhbnNwb3J0aW5nICovCisJCWNoaXAtPmFjdGl2ZV9tYXNrIHw9IGNoYW5uZWxfbWFzazsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jbWRfc3RhcnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlERV9BQ1QoKCJzdGFydF90cmFuc3BvcnQ6IE5vIHBpcGVzIHRvIHN0YXJ0IVxuIikpOworCXJldHVybiAtRUlOVkFMOworfQorCisKKworc3RhdGljIGludCBwYXVzZV90cmFuc3BvcnQoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNoYW5uZWxfbWFzaykKK3sKKwlERV9BQ1QoKCJwYXVzZV90cmFuc3BvcnQgJXhcbiIsIGNoYW5uZWxfbWFzaykpOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPmNvbW1fcGFnZS0+Y21kX3N0b3AgfD0gY3B1X3RvX2xlMzIoY2hhbm5lbF9tYXNrKTsKKwljaGlwLT5jb21tX3BhZ2UtPmNtZF9yZXNldCA9IDA7CisJaWYgKGNoaXAtPmNvbW1fcGFnZS0+Y21kX3N0b3ApIHsKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU1RPUF9UUkFOU0ZFUik7CisJCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJCXJldHVybiAtRUlPOworCQkvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIHBpcGVzIGFyZSB0cmFuc3BvcnRpbmcgKi8KKwkJY2hpcC0+YWN0aXZlX21hc2sgJj0gfmNoYW5uZWxfbWFzazsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jbWRfc3RvcCA9IDA7CisJCWNoaXAtPmNvbW1fcGFnZS0+Y21kX3Jlc2V0ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJREVfQUNUKCgicGF1c2VfdHJhbnNwb3J0OiBObyBwaXBlcyB0byBzdG9wIVxuIikpOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzdG9wX3RyYW5zcG9ydChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY2hhbm5lbF9tYXNrKQoreworCURFX0FDVCgoInN0b3BfdHJhbnNwb3J0ICV4XG4iLCBjaGFubmVsX21hc2spKTsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT5jb21tX3BhZ2UtPmNtZF9zdG9wIHw9IGNwdV90b19sZTMyKGNoYW5uZWxfbWFzayk7CisJY2hpcC0+Y29tbV9wYWdlLT5jbWRfcmVzZXQgfD0gY3B1X3RvX2xlMzIoY2hhbm5lbF9tYXNrKTsKKwlpZiAoY2hpcC0+Y29tbV9wYWdlLT5jbWRfcmVzZXQpIHsKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU1RPUF9UUkFOU0ZFUik7CisJCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJCXJldHVybiAtRUlPOworCQkvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIHBpcGVzIGFyZSB0cmFuc3BvcnRpbmcgKi8KKwkJY2hpcC0+YWN0aXZlX21hc2sgJj0gfmNoYW5uZWxfbWFzazsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jbWRfc3RvcCA9IDA7CisJCWNoaXAtPmNvbW1fcGFnZS0+Y21kX3Jlc2V0ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJREVfQUNUKCgic3RvcF90cmFuc3BvcnQ6IE5vIHBpcGVzIHRvIHN0b3AhXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW5saW5lIGludCBpc19waXBlX2FsbG9jYXRlZChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgcGlwZV9pbmRleCkKK3sKKwlyZXR1cm4gKGNoaXAtPnBpcGVfYWxsb2NfbWFzayAmICgxIDw8IHBpcGVfaW5kZXgpKTsKK30KKworCisKKy8qIFN0b3BzIGV2ZXJ5dGhpbmcgYW5kIHR1cm5zIG9mZiB0aGUgRFNQLiBBbGwgcGlwZXMgc2hvdWxkIGJlIGFscmVhZHkKK3N0b3BwZWQgYW5kIHVuYWxsb2NhdGVkLiAqLworc3RhdGljIGludCByZXN0X2luX3BlYWNlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJREVfQUNUKCgicmVzdF9pbl9wZWFjZSgpIG9wZW49JXhcbiIsIGNoaXAtPnBpcGVfYWxsb2NfbWFzaykpOworCisJLyogU3RvcHMgYWxsIGFjdGl2ZSBwaXBlcyAoanVzdCB0byBiZSBzdXJlKSAqLworCXN0b3BfdHJhbnNwb3J0KGNoaXAsIGNoaXAtPmFjdGl2ZV9tYXNrKTsKKworCXNldF9tZXRlcnNfb24oY2hpcCwgRkFMU0UpOworCisjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKKwllbmFibGVfbWlkaV9pbnB1dChjaGlwLCBGQUxTRSk7CisjZW5kaWYKKworCS8qIEdvIHRvIHNsZWVwICovCisJaWYgKGNoaXAtPmRzcF9jb2RlKSB7CisJCS8qIE1ha2UgbG9hZF9maXJtd2FyZSBkbyBhIGNvbXBsZXRlIHJlbG9hZCAqLworCQljaGlwLT5kc3BfY29kZSA9IE5VTEw7CisJCS8qIFB1dCB0aGUgRFNQIHRvIHNsZWVwICovCisJCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfR09fQ09NQVRPU0UpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKKy8qIEZpbGxzIHRoZSBjb21tIHBhZ2Ugd2l0aCBkZWZhdWx0IHZhbHVlcyAqLworc3RhdGljIGludCBpbml0X2RzcF9jb21tX3BhZ2Uoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwkvKiBDaGVjayBpZiB0aGUgY29tcGlsZXIgYWRkZWQgZXh0cmEgcGFkZGluZyBpbnNpZGUgdGhlIHN0cnVjdHVyZSAqLworCWlmIChvZmZzZXRvZihzdHJ1Y3QgY29tbV9wYWdlLCBtaWRpX291dHB1dCkgIT0gMHhiZTApIHsKKwkJREVfSU5JVCgoImluaXRfZHNwX2NvbW1fcGFnZSgpIC0gSW52YWxpZCBzdHJ1Y3QgY29tbV9wYWdlIHN0cnVjdHVyZVxuIikpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIEluaXQgYWxsIHRoZSBiYXNpYyBzdHVmZiAqLworCWNoaXAtPmNhcmRfbmFtZSA9IEVDSE9DQVJEX05BTUU7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsJLyogU2V0IFRSVUUgdW50aWwgRFNQIGxvYWRlZCAqLworCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsJLyogQ3VycmVudCBEU1AgY29kZSBub3QgbG9hZGVkICovCisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX05PTkU7CisJY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOworCWNoaXAtPm91dHB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfV09SRDsKKwljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOworCW1lbXNldChjaGlwLT5jb21tX3BhZ2UsIDAsIHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CisKKwkvKiBJbml0IHRoZSBjb21tIHBhZ2UgKi8KKwljaGlwLT5jb21tX3BhZ2UtPmNvbW1fc2l6ZSA9CisJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKwljaGlwLT5jb21tX3BhZ2UtPmhhbmRzaGFrZSA9IDB4ZmZmZmZmZmY7CisJY2hpcC0+Y29tbV9wYWdlLT5taWRpX291dF9mcmVlX2NvdW50ID0KKwkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMig0NDEwMCk7CisJY2hpcC0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKKworCS8qIFNldCBsaW5lIGxldmVscyBzbyB3ZSBkb24ndCBibGFzdCBhbnkgaW5wdXRzIG9uIHN0YXJ0dXAgKi8KKwltZW1zZXQoY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgRUNIT0dBSU5fTVVURUQsIE1PTklUT1JfQVJSQVlfU0laRSk7CisJbWVtc2V0KGNoaXAtPmNvbW1fcGFnZS0+dm1peGVyLCBFQ0hPR0FJTl9NVVRFRCwgVk1JWEVSX0FSUkFZX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzZXZlcmFsIHZvbHVtZSBjb250cm9scyBmb3IgYnVzc2VzIGFuZCBwaXBlcy4KK1RoaXMgTVVTVCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIERTUCBpcyB1cCBhbmQgcnVubmluZyAhICovCitzdGF0aWMgaW50IGluaXRfbGluZV9sZXZlbHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlpbnQgc3QsIGksIG87CisKKwlERV9JTklUKCgiaW5pdF9saW5lX2xldmVsc1xuIikpOworCisJLyogTXV0ZSBvdXRwdXQgYnVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspCisJCWlmICgoc3QgPSBzZXRfb3V0cHV0X2dhaW4oY2hpcCwgaSwgRUNIT0dBSU5fTVVURUQpKSkKKwkJCXJldHVybiBzdDsKKwlpZiAoKHN0ID0gdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApKSkKKwkJcmV0dXJuIHN0OworCisjaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorCS8qIE11dGUgdGhlIFZtaXhlciAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXNfb3V0KGNoaXApOyBpKyspCisJCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQorCQkJaWYgKChzdCA9IHNldF92bWl4ZXJfZ2FpbihjaGlwLCBvLCBpLCBFQ0hPR0FJTl9NVVRFRCkpKQorCQkJCXJldHVybiBzdDsKKwlpZiAoKHN0ID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKSkpCisJCXJldHVybiBzdDsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorCS8qIE11dGUgdGhlIG1vbml0b3IgbWl4ZXIgKi8KKwlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKKwkJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKKwkJCWlmICgoc3QgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksIEVDSE9HQUlOX01VVEVEKSkpCisJCQkJcmV0dXJuIHN0OworCWlmICgoc3QgPSB1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkpKQorCQlyZXR1cm4gc3Q7CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX01PTklUT1IgKi8KKworI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKKwkJaWYgKChzdCA9IHNldF9pbnB1dF9nYWluKGNoaXAsIGksIEVDSE9HQUlOX01VVEVEKSkpCisJCQlyZXR1cm4gc3Q7CisJaWYgKChzdCA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApKSkKKwkJcmV0dXJuIHN0OworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOICovCisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRoaXMgaXMgbG93IGxldmVsIHBhcnQgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLgorSXQgcmV0dXJucyAtMSBpZiB0aGUgSVJRIGlzIG5vdCBvdXJzLCBvciBOPj0wIGlmIGl0IGlzLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIKK29mIG1pZGkgZGF0YSBpbiB0aGUgaW5wdXQgcXVldWUuICovCitzdGF0aWMgaW50IHNlcnZpY2VfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaW50IHN0OworCisJLyogUmVhZCB0aGUgRFNQIHN0YXR1cyByZWdpc3RlciBhbmQgc2VlIGlmIHRoaXMgRFNQIGdlbmVyYXRlZCB0aGlzIGludGVycnVwdCAqLworCWlmIChnZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX1NUQVRVU19SRUcpICYgQ0hJMzJfU1RBVFVTX0lSUSkgeworCQlzdCA9IDA7CisjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKKwkJLyogR2V0IGFuZCBwYXJzZSBtaWRpIGRhdGEgaWYgcHJlc2VudCAqLworCQlpZiAoY2hpcC0+Y29tbV9wYWdlLT5taWRpX2lucHV0WzBdKQkvKiBUaGUgY291bnQgaXMgYXQgaW5kZXggMCAqLworCQkJc3QgPSBtaWRpX3NlcnZpY2VfaXJxKGNoaXApOwkvKiBSZXR1cm5zIGhvdyBtYW55IG1pZGkgYnl0ZXMgd2UgcmVjZWl2ZWQgKi8KKyNlbmRpZgorCQkvKiBDbGVhciB0aGUgaGFyZHdhcmUgaW50ZXJydXB0ICovCisJCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9pbnB1dFswXSA9IDA7CisJCXNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19BQ0tfSU5UKTsKKwkJcmV0dXJuIHN0OworCX0KKwlyZXR1cm4gLTE7Cit9CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlGdW5jdGlvbnMgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgcGlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGFsbG9jYXRlX3BpcGVzIGlzIHVzZWQgdG8gcmVzZXJ2ZSBhdWRpbyBwaXBlcyBmb3IgeW91ciBleGNsdXNpdmUgdXNlLgorVGhlIGNhbGwgd2lsbCBmYWlsIGlmIHNvbWUgcGlwZXMgYXJlIGFscmVhZHkgYWxsb2NhdGVkLiAqLworc3RhdGljIGludCBhbGxvY2F0ZV9waXBlcyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9waXBlICpwaXBlLAorCQkJICBpbnQgcGlwZV9pbmRleCwgaW50IGludGVybGVhdmUpCit7CisJaW50IGk7CisJdTMyIGNoYW5uZWxfbWFzazsKKwljaGFyIGlzX2N5Y2xpYzsKKworCURFX0FDVCgoImFsbG9jYXRlX3BpcGVzOiBjaD0lZCBpbnQ9JWRcbiIsIHBpcGVfaW5kZXgsIGludGVybGVhdmUpKTsKKworCWlmIChjaGlwLT5iYWRfYm9hcmQpCisJCXJldHVybiAtRUlPOworCisJaXNfY3ljbGljID0gMTsJLyogVGhpcyBkcml2ZXIgdXNlcyBjeWNsaWMgYnVmZmVycyBvbmx5ICovCisKKwlmb3IgKGNoYW5uZWxfbWFzayA9IGkgPSAwOyBpIDwgaW50ZXJsZWF2ZTsgaSsrKQorCQljaGFubmVsX21hc2sgfD0gMSA8PCAocGlwZV9pbmRleCArIGkpOworCWlmIChjaGlwLT5waXBlX2FsbG9jX21hc2sgJiBjaGFubmVsX21hc2spIHsKKwkJREVfQUNUKCgiYWxsb2NhdGVfcGlwZXM6IGNoYW5uZWwgYWxyZWFkeSBvcGVuXG4iKSk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCWNoaXAtPmNvbW1fcGFnZS0+cG9zaXRpb25bcGlwZV9pbmRleF0gPSAwOworCWNoaXAtPnBpcGVfYWxsb2NfbWFzayB8PSBjaGFubmVsX21hc2s7CisJaWYgKGlzX2N5Y2xpYykKKwkJY2hpcC0+cGlwZV9jeWNsaWNfbWFzayB8PSBjaGFubmVsX21hc2s7CisJcGlwZS0+aW5kZXggPSBwaXBlX2luZGV4OworCXBpcGUtPmludGVybGVhdmUgPSBpbnRlcmxlYXZlOworCXBpcGUtPnN0YXRlID0gUElQRV9TVEFURV9TVE9QUEVEOworCisJLyogVGhlIGNvdW50ZXIgcmVnaXN0ZXIgaXMgd2hlcmUgdGhlIERTUCB3cml0ZXMgdGhlIDMyIGJpdCBETUEKKwlwb3NpdGlvbiBmb3IgYSBwaXBlLiAgVGhlIERTUCBpcyBjb25zdGFudGx5IHVwZGF0aW5nIHRoaXMgdmFsdWUgYXMKKwlpdCBtb3ZlcyBkYXRhLiBUaGUgRE1BIGNvdW50ZXIgaXMgaW4gdW5pdHMgb2YgYnl0ZXMsIG5vdCBzYW1wbGVzLiAqLworCXBpcGUtPmRtYV9jb3VudGVyID0gJmNoaXAtPmNvbW1fcGFnZS0+cG9zaXRpb25bcGlwZV9pbmRleF07CisJKnBpcGUtPmRtYV9jb3VudGVyID0gMDsKKwlERV9BQ1QoKCJhbGxvY2F0ZV9waXBlczogb2tcbiIpKTsKKwlyZXR1cm4gcGlwZV9pbmRleDsKK30KKworCisKK3N0YXRpYyBpbnQgZnJlZV9waXBlcyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9waXBlICpwaXBlKQoreworCXUzMiBjaGFubmVsX21hc2s7CisJaW50IGk7CisKKwlERV9BQ1QoKCJmcmVlX3BpcGVzOiBQaXBlICVkXG4iLCBwaXBlLT5pbmRleCkpOworCXNuZF9hc3NlcnQoaXNfcGlwZV9hbGxvY2F0ZWQoY2hpcCwgcGlwZS0+aW5kZXgpLCByZXR1cm4gLUVJTlZBTCk7CisJc25kX2Fzc2VydChwaXBlLT5zdGF0ZSA9PSBQSVBFX1NUQVRFX1NUT1BQRUQsIHJldHVybiAtRUlOVkFMKTsKKworCWZvciAoY2hhbm5lbF9tYXNrID0gaSA9IDA7IGkgPCBwaXBlLT5pbnRlcmxlYXZlOyBpKyspCisJCWNoYW5uZWxfbWFzayB8PSAxIDw8IChwaXBlLT5pbmRleCArIGkpOworCisJY2hpcC0+cGlwZV9hbGxvY19tYXNrICY9IH5jaGFubmVsX21hc2s7CisJY2hpcC0+cGlwZV9jeWNsaWNfbWFzayAmPSB+Y2hhbm5lbF9tYXNrOworCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCUZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZ2xpc3RfaW5pdChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9waXBlICpwaXBlKQoreworCXBpcGUtPnNnbGlzdF9oZWFkID0gMDsKKwltZW1zZXQocGlwZS0+c2dwYWdlLmFyZWEsIDAsIFBBR0VfU0laRSk7CisJY2hpcC0+Y29tbV9wYWdlLT5zZ2xpc3RfYWRkcltwaXBlLT5pbmRleF0uYWRkciA9CisJCWNwdV90b19sZTMyKHBpcGUtPnNncGFnZS5hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc2dsaXN0X2FkZF9tYXBwaW5nKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb3BpcGUgKnBpcGUsCisJCQkJZG1hX2FkZHJfdCBhZGRyZXNzLCBzaXplX3QgbGVuZ3RoKQoreworCWludCBoZWFkID0gcGlwZS0+c2dsaXN0X2hlYWQ7CisJc3RydWN0IHNnX2VudHJ5ICpsaXN0ID0gKHN0cnVjdCBzZ19lbnRyeSAqKXBpcGUtPnNncGFnZS5hcmVhOworCisJaWYgKGhlYWQgPCBNQVhfU0dMSVNUX0VOVFJJRVMgLSAxKSB7CisJCWxpc3RbaGVhZF0uYWRkciA9IGNwdV90b19sZTMyKGFkZHJlc3MpOworCQlsaXN0W2hlYWRdLnNpemUgPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCQlwaXBlLT5zZ2xpc3RfaGVhZCsrOworCX0gZWxzZSB7CisJCURFX0FDVCgoIlNHbGlzdDogdG9vIG1hbnkgZnJhZ21lbnRzXG4iKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgaW50IHNnbGlzdF9hZGRfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb3BpcGUgKnBpcGUpCit7CisJcmV0dXJuIHNnbGlzdF9hZGRfbWFwcGluZyhjaGlwLCBwaXBlLCAwLCAwKTsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgaW50IHNnbGlzdF93cmFwKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb3BpcGUgKnBpcGUpCit7CisJcmV0dXJuIHNnbGlzdF9hZGRfbWFwcGluZyhjaGlwLCBwaXBlLCBwaXBlLT5zZ3BhZ2UuYWRkciwgMCk7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaCBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NWVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaApAQCAtMCwwICsxLDY5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9FQ0hPX0RTUF8KKyNkZWZpbmUgX0VDSE9fRFNQXworCisKKy8qKioqIEVjaG9nYWxzOiBEYXJsYTIwLCBHaW5hMjAsIExheWxhMjAsIGFuZCBEYXJsYTI0ICoqKiovCisjaWYgZGVmaW5lZChFQ0hPR0FMU19GQU1JTFkpCisKKyNkZWZpbmUgTlVNX0FTSUNfVEVTVFMJCTUKKyNkZWZpbmUgUkVBRF9EU1BfVElNRU9VVAkxMDAwMDAwTAkvKiBvbmUgc2Vjb25kICovCisKKy8qKioqIEVjaG8yNDogR2luYTI0LCBMYXlsYTI0LCBNb25hLCBNaWEsIE1pYS1taWRpICoqKiovCisjZWxpZiBkZWZpbmVkKEVDSE8yNF9GQU1JTFkpCisKKyNkZWZpbmUgRFNQXzU2MzYxCQkJLyogU29tZSBFY2hvMjQgY2FyZHMgdXNlIHRoZSA1NjM2MSBEU1AgKi8KKyNkZWZpbmUgUkVBRF9EU1BfVElNRU9VVAkxMDAwMDBMCQkvKiAuMSBzZWNvbmQgKi8KKworLyoqKiogM0c6IEdpbmEzRywgTGF5bGEzRyAqKioqLworI2VsaWYgZGVmaW5lZChFQ0hPM0dfRkFNSUxZKQorCisjZGVmaW5lIERTUF81NjM2MQorI2RlZmluZSBSRUFEX0RTUF9USU1FT1VUIAkxMDAwMDBMCQkvKiAuMSBzZWNvbmQgKi8KKyNkZWZpbmUgTUlOX01UQ18xWF9SQVRFCQkzMjAwMAorCisvKioqKiBJbmRpZ286IEluZGlnbywgSW5kaWdvIElPLCBJbmRpZ28gREogKioqKi8KKyNlbGlmIGRlZmluZWQoSU5ESUdPX0ZBTUlMWSkKKworI2RlZmluZSBEU1BfNTYzNjEKKyNkZWZpbmUgUkVBRF9EU1BfVElNRU9VVAkxMDAwMDBMCQkvKiAuMSBzZWNvbmQgKi8KKworI2Vsc2UKKworI2Vycm9yIE5vIGZhbWlseSBpcyBkZWZpbmVkCisKKyNlbmRpZgorCisKKworLyoKKyAqCisgKiAgTWF4IGlucHV0cyBhbmQgb3V0cHV0cworICoKKyAqLworCisjZGVmaW5lIERTUF9NQVhBVURJT0lOUFVUUwkJMTYJLyogTWF4IGF1ZGlvIGlucHV0IGNoYW5uZWxzICovCisjZGVmaW5lIERTUF9NQVhBVURJT09VVFBVVFMJCTE2CS8qIE1heCBhdWRpbyBvdXRwdXQgY2hhbm5lbHMgKi8KKyNkZWZpbmUgRFNQX01BWFBJUEVTCQkJMzIJLyogTWF4IHRvdGFsIHBpcGVzIChpbnB1dCArIG91dHB1dCkgKi8KKworCisvKgorICoKKyAqIFRoZXNlIGFyZSB0aGUgb2Zmc2V0cyBmb3IgdGhlIG1lbW9yeS1tYXBwZWQgRFNQIHJlZ2lzdGVyczsgdGhlIERTUCBiYXNlCisgKiBhZGRyZXNzIGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgdTMyIGFycmF5LgorICovCisKKyNkZWZpbmUgQ0hJMzJfQ09OVFJPTF9SRUcJCTQKKyNkZWZpbmUgQ0hJMzJfU1RBVFVTX1JFRwkJNQorI2RlZmluZSBDSEkzMl9WRUNUT1JfUkVHCQk2CisjZGVmaW5lIENISTMyX0RBVEFfUkVHCQkJNworCisKKy8qCisgKgorICogSW50ZXJlc3RpbmcgYml0cyB3aXRoaW4gdGhlIERTUCByZWdpc3RlcnMKKyAqCisgKi8KKworI2RlZmluZSBDSEkzMl9WRUNUT1JfQlVTWQkJMHgwMDAwMDAwMQorI2RlZmluZSBDSEkzMl9TVEFUVVNfUkVHX0hGMwkJMHgwMDAwMDAwOAorI2RlZmluZSBDSEkzMl9TVEFUVVNfUkVHX0hGNAkJMHgwMDAwMDAxMAorI2RlZmluZSBDSEkzMl9TVEFUVVNfUkVHX0hGNQkJMHgwMDAwMDAyMAorI2RlZmluZSBDSEkzMl9TVEFUVVNfSE9TVF9SRUFEX0ZVTEwJMHgwMDAwMDAwNAorI2RlZmluZSBDSEkzMl9TVEFUVVNfSE9TVF9XUklURV9FTVBUWQkweDAwMDAwMDAyCisjZGVmaW5lIENISTMyX1NUQVRVU19JUlEJCTB4MDAwMDAwNDAKKworCisvKiAKKyAqCisgKiBEU1AgY29tbWFuZHMgc2VudCB2aWEgc2xhdmUgbW9kZTsgdGhlc2UgYXJlIHNlbnQgdG8gdGhlIERTUCBieSB3cml0ZV9kc3AoKQorICoKKyAqLworCisjZGVmaW5lIERTUF9GTkNfU0VUX0NPTU1QQUdFX0FERFIJCTB4MDIKKyNkZWZpbmUgRFNQX0ZOQ19MT0FEX0xBWUxBX0FTSUMJCQkweGEwCisjZGVmaW5lIERTUF9GTkNfTE9BRF9HSU5BMjRfQVNJQwkJMHhhMAorI2RlZmluZSBEU1BfRk5DX0xPQURfTU9OQV9QQ0lfQ0FSRF9BU0lDCQkweGEwCisjZGVmaW5lIERTUF9GTkNfTE9BRF9MQVlMQTI0X1BDSV9DQVJEX0FTSUMJMHhhMAorI2RlZmluZSBEU1BfRk5DX0xPQURfTU9OQV9FWFRFUk5BTF9BU0lDCQkweGExCisjZGVmaW5lIERTUF9GTkNfTE9BRF9MQVlMQTI0X0VYVEVSTkFMX0FTSUMJMHhhMQorI2RlZmluZSBEU1BfRk5DX0xPQURfM0dfQVNJQwkJCTB4YTAKKworCisvKgorICoKKyAqIERlZmluZXMgdG8gaGFuZGxlIHRoZSBNSURJIGlucHV0IHN0YXRlIGVuZ2luZTsgdGhlc2UgYXJlIHVzZWQgdG8gcHJvcGVybHkKKyAqIGV4dHJhY3QgTUlESSB0aW1lIGNvZGUgYnl0ZXMgYW5kIHRoZWlyIHRpbWVzdGFtcHMgZnJvbSB0aGUgTUlESSBpbnB1dCBzdHJlYW0uCisgKgorICovCisKKyNkZWZpbmUgTUlESV9JTl9TVEFURV9OT1JNQUwJMAorI2RlZmluZSBNSURJX0lOX1NUQVRFX1RTX0hJR0gJMQorI2RlZmluZSBNSURJX0lOX1NUQVRFX1RTX0xPVwkyCisjZGVmaW5lIE1JRElfSU5fU1RBVEVfRjFfREFUQSAJMworI2RlZmluZSBNSURJX0lOX1NLSVBfREFUQQkoLTEpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldHRpbmcgdGhlIHNhbXBsZSByYXRlcyBvbiBMYXlsYTI0IGlzIHNvbWV3aGF0IHNjaGl6b3BocmVuaWMuCisKK0ZvciBzdGFuZGFyZCByYXRlcywgaXQgd29ya3MgZXhhY3RseSBsaWtlIE1vbmEgYW5kIEdpbmEyNC4gIFRoYXQgaXMsIGZvcgorOCwgMTEuMDI1LCAxNiwgMjIuMDUsIDMyLCA0NC4xLCA0OCwgODguMiwgYW5kIDk2IGtIeiwgeW91IGp1c3Qgc2V0IHRoZQorYXBwcm9wcmlhdGUgYml0cyBpbiB0aGUgY29udHJvbCByZWdpc3RlciBhbmQgd3JpdGUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisKK0luIG9yZGVyIHRvIHN1cHBvcnQgTUlESSB0aW1lIGNvZGUgc3luYyAoYW5kIHBvc3NpYmx5IFNNUFRFIExUQyBzeW5jIGluCit0aGUgZnV0dXJlKSwgTGF5bGEyNCBhbHNvIGhhcyAiY29udGludW91cyBzYW1wbGUgcmF0ZSBtb2RlIi4gIEluIHRoaXMgbW9kZSwKK0xheWxhMjQgY2FuIGdlbmVyYXRlIGFueSBzYW1wbGUgcmF0ZSBiZXR3ZWVuIDI1IGFuZCA1MCBrSHogaW5jbHVzaXZlLCBvcgorNTAgdG8gMTAwIGtIeiBpbmNsdXNpdmUgZm9yIGRvdWJsZSBzcGVlZCBtb2RlLgorCitUbyB1c2UgY29udGludW91cyBtb2RlOgorCistU2V0IHRoZSBjbG9jayBzZWxlY3QgYml0cyBpbiB0aGUgY29udHJvbCByZWdpc3RlciB0byAweGUgKHNlZSB0aGUgI2RlZmluZQorIGJlbG93KQorCistU2V0IGRvdWJsZS1zcGVlZCBtb2RlIGlmIHlvdSB3YW50IHRvIHVzZSBzYW1wbGUgcmF0ZXMgYWJvdmUgNTAga0h6CisKKy1Xcml0ZSB0aGUgY29udHJvbCByZWdpc3RlciBhcyB5b3Ugd291bGQgbm9ybWFsbHkKKworLU5vdywgeW91IG5lZWQgdG8gc2V0IHRoZSBmcmVxdWVuY3kgcmVnaXN0ZXIuIEZpcnN0LCB5b3UgbmVlZCB0byBkZXRlcm1pbmUgdGhlCisgdmFsdWUgZm9yIHRoZSBmcmVxdWVuY3kgcmVnaXN0ZXIuICBUaGlzIGlzIGdpdmVuIGJ5IHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKKworZnJlcXVlbmN5X3JlZyA9IChMQVlMQTI0X01BR0lDX05VTUJFUiAvIHNhbXBsZV9yYXRlKSAtIDIKKworTm90ZSB0aGUgI2RlZmluZSBiZWxvdyBmb3IgdGhlIG1hZ2ljIG51bWJlcgorCistV2FpdCBmb3IgdGhlIERTUCBoYW5kc2hha2UKKy1Xcml0ZSB0aGUgZnJlcXVlbmN5X3JlZyB2YWx1ZSB0byB0aGUgLlNhbXBsZVJhdGUgZmllbGQgb2YgdGhlIGNvbW0gcGFnZQorLVNlbmQgdGhlIHZlY3RvciBjb21tYW5kIFNFVF9MQVlMQTI0X0ZSRVFVRU5DWV9SRUcgKHNlZSB2bW9ua2V5LmgpCisKK09uY2UgeW91IGhhdmUgc2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIHVwIGZvciBjb250aW51b3VzIG1vZGUsIHlvdSBjYW4ganVzdAord3JpdGUgdGhlIGZyZXF1ZW5jeSByZWdpc3RlciB0byBjaGFuZ2UgdGhlIHNhbXBsZSByYXRlLiAgVGhpcyBjb3VsZCBiZQordXNlZCBmb3IgTUlESSB0aW1lIGNvZGUgc3luYy4gRm9yIE1UQyBzeW5jLCB0aGUgY29udHJvbCByZWdpc3RlciBpcyBzZXQgZm9yCitjb250aW51b3VzIG1vZGUuICBUaGUgZHJpdmVyIHRoZW4ganVzdCBrZWVwcyB3cml0aW5nIHRoZQorU0VUX0xBWUxBMjRfRlJFUVVFTkNZX1JFRyBjb21tYW5kLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTEFZTEEyNF9NQUdJQ19OVU1CRVIJCQk2NzczNzYwMDAKKyNkZWZpbmUgTEFZTEEyNF9DT05USU5VT1VTX0NMT0NLCQkweDAwMGUKKworCisvKgorICoKKyAqIERTUCB2ZWN0b3IgY29tbWFuZHMKKyAqCisgKi8KKworI2RlZmluZSBEU1BfVkNfUkVTRVQJCQkJMHg4MGZmCisKKyNpZm5kZWYgRFNQXzU2MzYxCisKKyNkZWZpbmUgRFNQX1ZDX0FDS19JTlQJCQkJMHg4MDczCisjZGVmaW5lIERTUF9WQ19TRVRfVk1JWEVSX0dBSU4JCQkweDAwMDAJLyogTm90IHVzZWQsIG9ubHkgZm9yIGNvbXBpbGUgKi8KKyNkZWZpbmUgRFNQX1ZDX1NUQVJUX1RSQU5TRkVSCQkJMHgwMDc1CS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX01FVEVSU19PTgkJCTB4MDA3OQorI2RlZmluZSBEU1BfVkNfTUVURVJTX09GRgkJCTB4MDA3YgorI2RlZmluZSBEU1BfVkNfVVBEQVRFX09VVFZPTAkJCTB4MDA3ZAkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19VUERBVEVfSU5HQUlOCQkJMHgwMDdmCS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX0FERF9BVURJT19CVUZGRVIJCQkweDAwODEJLyogSGFuZHNoa2UgcnFkLiAqLworI2RlZmluZSBEU1BfVkNfVEVTVF9BU0lDCQkJMHgwMGViCisjZGVmaW5lIERTUF9WQ19VUERBVEVfQ0xPQ0tTCQkJMHgwMGVmCS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX1NFVF9MQVlMQV9TQU1QTEVfUkFURQkJMHgwMGYxCS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX1NFVF9HRF9BVURJT19TVEFURQkJMHgwMGYxCS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX1dSSVRFX0NPTlRST0xfUkVHCQkweDAwZjEJLyogSGFuZHNoa2UgcnFkLiAqLworI2RlZmluZSBEU1BfVkNfTUlESV9XUklURQkJCTB4MDBmNQkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19TVE9QX1RSQU5TRkVSCQkJMHgwMGY3CS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX1VQREFURV9GTEFHUwkJCTB4MDBmZAkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19HT19DT01BVE9TRQkJCTB4MDBmOQorCisjZWxzZSAvKiAhRFNQXzU2MzYxICovCisKKy8qIFZlY3RvciBjb21tYW5kcyBmb3IgZmFtaWxpZXMgdGhhdCB1c2UgZWl0aGVyIHRoZSA1NjMwMSBvciA1NjM2MSAqLworI2RlZmluZSBEU1BfVkNfQUNLX0lOVAkJCQkweDgwRjUKKyNkZWZpbmUgRFNQX1ZDX1NFVF9WTUlYRVJfR0FJTgkJCTB4MDBEQgkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19TVEFSVF9UUkFOU0ZFUgkJCTB4MDBERAkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19NRVRFUlNfT04JCQkweDAwRUYKKyNkZWZpbmUgRFNQX1ZDX01FVEVSU19PRkYJCQkweDAwRjEKKyNkZWZpbmUgRFNQX1ZDX1VQREFURV9PVVRWT0wJCQkweDAwRTMJLyogSGFuZHNoa2UgcnFkLiAqLworI2RlZmluZSBEU1BfVkNfVVBEQVRFX0lOR0FJTgkJCTB4MDBFNQkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19BRERfQVVESU9fQlVGRkVSCQkJMHgwMEUxCS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX1RFU1RfQVNJQwkJCTB4MDBFRAorI2RlZmluZSBEU1BfVkNfVVBEQVRFX0NMT0NLUwkJCTB4MDBFOQkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19TRVRfTEFZTEEyNF9GUkVRVUVOQ1lfUkVHCTB4MDBFOQkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19TRVRfTEFZTEFfU0FNUExFX1JBVEUJCTB4MDBFQgkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19TRVRfR0RfQVVESU9fU1RBVEUJCTB4MDBFQgkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19XUklURV9DT05UUk9MX1JFRwkJMHgwMEVCCS8qIEhhbmRzaGtlIHJxZC4gKi8KKyNkZWZpbmUgRFNQX1ZDX01JRElfV1JJVEUJCQkweDAwRTcJLyogSGFuZHNoa2UgcnFkLiAqLworI2RlZmluZSBEU1BfVkNfU1RPUF9UUkFOU0ZFUgkJCTB4MDBERgkvKiBIYW5kc2hrZSBycWQuICovCisjZGVmaW5lIERTUF9WQ19VUERBVEVfRkxBR1MJCQkweDAwRkIJLyogSGFuZHNoa2UgcnFkLiAqLworI2RlZmluZSBEU1BfVkNfR09fQ09NQVRPU0UJCQkweDAwZDkKKworI2VuZGlmIC8qICFEU1BfNTYzNjEgKi8KKworCisvKgorICoKKyAqIFRpbWVvdXRzCisgKgorICovCisKKyNkZWZpbmUgSEFORFNIQUtFX1RJTUVPVVQJCTIwMDAwCS8qIHNlbmRfdmVjdG9yIGNvbW1hbmQgdGltZW91dCAoMjBtcykgKi8KKyNkZWZpbmUgVkVDVE9SX0JVU1lfVElNRU9VVAkJMTAwMDAwCS8qIDEwMG1zICovCisjZGVmaW5lIE1JRElfT1VUX0RFTEFZX1VTRUMJCTIwMDAJLyogSG93IGxvbmcgdG8gd2FpdCBhZnRlciBNSURJIGZpbGxzIHVwICovCisKKworLyoKKyAqCisgKiBGbGFncyBmb3IgLkZsYWdzIGZpZWxkIGluIHRoZSBjb21tIHBhZ2UKKyAqCisgKi8KKworI2RlZmluZSBEU1BfRkxBR19NSURJX0lOUFVUCQkweDAwMDEJLyogRW5hYmxlIE1JREkgaW5wdXQgKi8KKyNkZWZpbmUgRFNQX0ZMQUdfU1BESUZfTk9OQVVESU8JCTB4MDAwMgkvKiBTZXRzIHRoZSAibm9uLWF1ZGlvIiBiaXQKKwkJCQkJCSAqIGluIHRoZSBTL1BESUYgb3V0IHN0YXR1cworCQkJCQkJICogYml0cy4gIENsZWFyIHRoaXMgZmxhZyBmb3IKKwkJCQkJCSAqIGF1ZGlvIGRhdGE7CisJCQkJCQkgKiBzZXQgaXQgZm9yIEFDMyBvciBXTUEgb3IKKwkJCQkJCSAqIHNvbWUgc3VjaCAqLworI2RlZmluZSBEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYJMHgwMDA4CS8qIDEgUHJvZmVzc2lvbmFsLCAwIENvbnN1bWVyICovCisKKworLyoKKyAqCisgKiBDbG9jayBkZXRlY3QgYml0cyByZXBvcnRlZCBieSB0aGUgRFNQIGZvciBHaW5hMjAsIExheWxhMjAsIERhcmxhMjQsIGFuZCBNaWEKKyAqCisgKi8KKworI2RlZmluZSBHTERNX0NMT0NLX0RFVEVDVF9CSVRfV09SRAkweDAwMDIKKyNkZWZpbmUgR0xETV9DTE9DS19ERVRFQ1RfQklUX1NVUEVSCTB4MDAwNAorI2RlZmluZSBHTERNX0NMT0NLX0RFVEVDVF9CSVRfU1BESUYJMHgwMDA4CisjZGVmaW5lIEdMRE1fQ0xPQ0tfREVURUNUX0JJVF9FU1lOQwkweDAwMTAKKworCisvKgorICoKKyAqIENsb2NrIGRldGVjdCBiaXRzIHJlcG9ydGVkIGJ5IHRoZSBEU1AgZm9yIEdpbmEyNCwgTW9uYSwgYW5kIExheWxhMjQKKyAqCisgKi8KKworI2RlZmluZSBHTUxfQ0xPQ0tfREVURUNUX0JJVF9XT1JEOTYJMHgwMDAyCisjZGVmaW5lIEdNTF9DTE9DS19ERVRFQ1RfQklUX1dPUkQ0OAkweDAwMDQKKyNkZWZpbmUgR01MX0NMT0NLX0RFVEVDVF9CSVRfU1BESUY0OAkweDAwMDgKKyNkZWZpbmUgR01MX0NMT0NLX0RFVEVDVF9CSVRfU1BESUY5NgkweDAwMTAKKyNkZWZpbmUgR01MX0NMT0NLX0RFVEVDVF9CSVRfV09SRAkoR01MX0NMT0NLX0RFVEVDVF9CSVRfV09SRDk2IHwgR01MX0NMT0NLX0RFVEVDVF9CSVRfV09SRDQ4KQorI2RlZmluZSBHTUxfQ0xPQ0tfREVURUNUX0JJVF9TUERJRgkoR01MX0NMT0NLX0RFVEVDVF9CSVRfU1BESUY0OCB8IEdNTF9DTE9DS19ERVRFQ1RfQklUX1NQRElGOTYpCisjZGVmaW5lIEdNTF9DTE9DS19ERVRFQ1RfQklUX0VTWU5DCTB4MDAyMAorI2RlZmluZSBHTUxfQ0xPQ0tfREVURUNUX0JJVF9BREFUCTB4MDA0MAorCisKKy8qCisgKgorICogTGF5bGEgY2xvY2sgbnVtYmVycyB0byBzZW5kIHRvIERTUAorICoKKyAqLworCisjZGVmaW5lIExBWUxBMjBfQ0xPQ0tfSU5URVJOQUwJCTAKKyNkZWZpbmUgTEFZTEEyMF9DTE9DS19TUERJRgkJMQorI2RlZmluZSBMQVlMQTIwX0NMT0NLX1dPUkQJCTIKKyNkZWZpbmUgTEFZTEEyMF9DTE9DS19TVVBFUgkJMworCisKKy8qCisgKgorICogR2luYS9EYXJsYSBjbG9jayBzdGF0ZXMKKyAqCisgKi8KKworI2RlZmluZSBHRF9DTE9DS19OT0NIQU5HRQkJMAorI2RlZmluZSBHRF9DTE9DS180NAkJCTEKKyNkZWZpbmUgR0RfQ0xPQ0tfNDgJCQkyCisjZGVmaW5lIEdEX0NMT0NLX1NQRElGSU4JCTMKKyNkZWZpbmUgR0RfQ0xPQ0tfVU5ERUYJCQkweGZmCisKKworLyoKKyAqCisgKiBHaW5hL0RhcmxhIFMvUERJRiBzdGF0dXMgYml0cworICoKKyAqLworCisjZGVmaW5lIEdEX1NQRElGX1NUQVRVU19OT0NIQU5HRQkwCisjZGVmaW5lIEdEX1NQRElGX1NUQVRVU180NAkJMQorI2RlZmluZSBHRF9TUERJRl9TVEFUVVNfNDgJCTIKKyNkZWZpbmUgR0RfU1BESUZfU1RBVFVTX1VOREVGCQkweGZmCisKKworLyoKKyAqCisgKiBMYXlsYTIwIG91dHB1dCBjbG9ja3MKKyAqCisgKi8KKworI2RlZmluZSBMQVlMQTIwX09VVFBVVF9DTE9DS19TVVBFUgkwCisjZGVmaW5lIExBWUxBMjBfT1VUUFVUX0NMT0NLX1dPUkQJMQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIE1hZ2ljIGNvbnN0YW50cyBmb3IgdGhlIERhcmxhMjQgaGFyZHdhcmUKKworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgR0QyNF85NjAwMAkweDAKKyNkZWZpbmUgR0QyNF80ODAwMAkweDEKKyNkZWZpbmUgR0QyNF80NDEwMAkweDIKKyNkZWZpbmUgR0QyNF8zMjAwMAkweDMKKyNkZWZpbmUgR0QyNF8yMjA1MAkweDQKKyNkZWZpbmUgR0QyNF8xNjAwMAkweDUKKyNkZWZpbmUgR0QyNF8xMTAyNQkweDYKKyNkZWZpbmUgR0QyNF84MDAwCTB4NworI2RlZmluZSBHRDI0Xzg4MjAwCTB4OAorI2RlZmluZSBHRDI0X0VYVF9TWU5DCTB4OQorCisKKy8qCisgKgorICogUmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBEU1Agd2hlbiBBU0lDIGlzIGxvYWRlZAorICoKKyAqLworCisjZGVmaW5lIEFTSUNfQUxSRUFEWV9MT0FERUQJMHgxCisjZGVmaW5lIEFTSUNfTk9UX0xPQURFRAkJMHgwCisKKworLyoKKyAqCisgKiBEU1AgQXVkaW8gZm9ybWF0cworICoKKyAqIFRoZXNlIGFyZSB0aGUgYXVkaW8gZm9ybWF0cyB0aGF0IHRoZSBEU1AgY2FuIHRyYW5zZmVyCisgKiB2aWEgaW5wdXQgYW5kIG91dHB1dCBwaXBlcy4gIExFIG1lYW5zIGxpdHRsZS1lbmRpYW4sCisgKiBCRSBtZWFucyBiaWctZW5kaWFuLgorICoKKyAqIERTUF9BVURJT0ZPUk1fTVNfOCAgIAorICoKKyAqICAgIDgtYml0IG1vbm8gdW5zaWduZWQgc2FtcGxlcy4gIEZvciBwbGF5YmFjaywKKyAqICAgIG1vbm8gZGF0YSBpcyBkdXBsaWNhdGVkIG91dCB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMKKyAqICAgIG9mIHRoZSBvdXRwdXQgYnVzLiAgVGhlICJNUyIgcGFydCBvZiB0aGUgbmFtZQorICogICAgbWVhbnMgbW9uby0+c3RlcmVvLgorICoKKyAqIERTUF9BVURJT0ZPUk1fTVNfMTZMRQorICoKKyAqICAgIDE2LWJpdCBzaWduZWQgbGl0dGxlLWVuZGlhbiBtb25vIHNhbXBsZXMuICBQbGF5YmFjayB3b3JrcworICogICAgbGlrZSB0aGUgcHJldmlvdXMgY29kZS4KKyAqCisgKiBEU1BfQVVESU9GT1JNX01TXzI0TEUKKyAqCisgKiAgICAyNC1iaXQgc2lnbmVkIGxpdHRsZS1lbmRpYW4gbW9ubyBzYW1wbGVzLiAgRGF0YSBpcyBwYWNrZWQKKyAqICAgIHRocmVlIGJ5dGVzIHBlciBzYW1wbGU7IGlmIHlvdSBoYWQgdHdvIHNhbXBsZXMgMHgxMTIyMzMgYW5kIDB4NDQ1NTY2CisgKiAgICB0aGV5IHdvdWxkIGJlIHN0b3JlZCBpbiBtZW1vcnkgbGlrZSB0aGlzOiAzMyAyMiAxMSA2NiA1NSA0NC4KKyAqCisgKiBEU1BfQVVESU9GT1JNX01TXzMyTEUKKyAqIAorICogICAgMjQtYml0IHNpZ25lZCBsaXR0bGUtZW5kaWFuIG1vbm8gc2FtcGxlcyBpbiBhIDMyLWJpdCAKKyAqICAgIGNvbnRhaW5lci4gIEluIG90aGVyIHdvcmRzLCBlYWNoIHNhbXBsZSBpcyBhIDMyLWJpdCBzaWduZWQgCisgKiAgICBpbnRlZ2VyLCB3aGVyZSB0aGUgYWN0dWFsIGF1ZGlvIGRhdGEgaXMgbGVmdC1qdXN0aWZpZWQgCisgKiAgICBpbiB0aGUgMzIgYml0cyBhbmQgb25seSB0aGUgMjQgbW9zdCBzaWduaWZpY2FudCBiaXRzIGFyZSB2YWxpZC4KKyAqCisgKiBEU1BfQVVESU9GT1JNX1NTXzgKKyAqIERTUF9BVURJT0ZPUk1fU1NfMTZMRQorICogRFNQX0FVRElPRk9STV9TU18yNExFCisgKiBEU1BfQVVESU9GT1JNX1NTXzMyTEUKKyAqCisgKiAgICBMaWtlIHRoZSBwcmV2aW91cyBvbmVzLCBleGNlcHQgbm93IHdpdGggc3RlcmVvIGludGVybGVhdmVkCisgKiAgICBkYXRhLiAgIlNTIiBtZWFucyBzdGVyZW8tPnN0ZXJlby4KKyAqCisgKiBEU1BfQVVESU9GT1JNX01NXzMyTEUKKyAqCisgKiAgICBTaW1pbGFyIHRvIERTUF9BVURJT0ZPUk1fTVNfMzJMRSwgZXhjZXB0IHRoYXQgdGhlIG1vbm8KKyAqICAgIGRhdGEgaXMgbm90IGR1cGxpY2F0ZWQgb3V0IGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0IG91dHB1dHMuCisgKiAgICBUaGlzIG1vZGUgaXMgdXNlZCBieSB0aGUgQVNJTyBkcml2ZXIuICBIZXJlLCAiTU0iIG1lYW5zCisgKiAgICBtb25vLT5tb25vLgorICoKKyAqIERTUF9BVURJT0ZPUk1fTU1fMzJCRQorICoKKyAqICAgIEp1c3QgbGlrZSBEU1BfQVVESU9GT1JNX01NXzMyTEUsIGJ1dCBub3cgdGhlIGRhdGEgaXMKKyAqICAgIGluIGJpZy1lbmRpYW4gZm9ybWF0LgorICoKKyAqLworCisjZGVmaW5lIERTUF9BVURJT0ZPUk1fTVNfOAkwCS8qIDggYml0IG1vbm8gKi8KKyNkZWZpbmUgRFNQX0FVRElPRk9STV9NU18xNkxFCTEJLyogMTYgYml0IG1vbm8gKi8KKyNkZWZpbmUgRFNQX0FVRElPRk9STV9NU18yNExFCTIJLyogMjQgYml0IG1vbm8gKi8KKyNkZWZpbmUgRFNQX0FVRElPRk9STV9NU18zMkxFCTMJLyogMzIgYml0IG1vbm8gKi8KKyNkZWZpbmUgRFNQX0FVRElPRk9STV9TU184CTQJLyogOCBiaXQgc3RlcmVvICovCisjZGVmaW5lIERTUF9BVURJT0ZPUk1fU1NfMTZMRQk1CS8qIDE2IGJpdCBzdGVyZW8gKi8KKyNkZWZpbmUgRFNQX0FVRElPRk9STV9TU18yNExFCTYJLyogMjQgYml0IHN0ZXJlbyAqLworI2RlZmluZSBEU1BfQVVESU9GT1JNX1NTXzMyTEUJNwkvKiAzMiBiaXQgc3RlcmVvICovCisjZGVmaW5lIERTUF9BVURJT0ZPUk1fTU1fMzJMRQk4CS8qIDMyIGJpdCBtb25vLT5tb25vIGxpdHRsZS1lbmRpYW4gKi8KKyNkZWZpbmUgRFNQX0FVRElPRk9STV9NTV8zMkJFCTkJLyogMzIgYml0IG1vbm8tPm1vbm8gYmlnLWVuZGlhbiAqLworI2RlZmluZSBEU1BfQVVESU9GT1JNX1NTXzMyQkUJMTAJLyogMzIgYml0IHN0ZXJlbyBiaWcgZW5kaWFuICovCisjZGVmaW5lIERTUF9BVURJT0ZPUk1fSU5WQUxJRAkweEZGCS8qIEludmFsaWQgYXVkaW8gZm9ybWF0ICovCisKKworLyoKKyAqCisgKiBTdXBlci1pbnRlcmxlYXZlIGlzIGRlZmluZWQgYXMgaW50ZXJsZWF2aW5nIGJ5IDQgb3IgbW9yZS4gIERhcmxhMjAgYW5kIEdpbmEyMAorICogZG8gbm90IHN1cHBvcnQgc3VwZXIgaW50ZXJsZWF2ZS4KKyAqCisgKiAxNiBiaXQsIDI0IGJpdCwgYW5kIDMyIGJpdCBsaXR0bGUgZW5kaWFuIHNhbXBsZXMgYXJlIHN1cHBvcnRlZCBmb3Igc3VwZXIgCisgKiBpbnRlcmxlYXZlLiAgVGhlIGludGVybGVhdmUgZmFjdG9yIG11c3QgYmUgZXZlbi4gIDE2IC0gd2F5IGludGVybGVhdmUgaXMgdGhlIAorICogY3VycmVudCBtYXhpbXVtLCBzbyB5b3UgY2FuIGludGVybGVhdmUgYnkgNCwgNiwgOCwgMTAsIDEyLCAxNCwgYW5kIDE2LgorICoKKyAqIFRoZSBhY3R1YWwgZm9ybWF0IGNvZGUgaXMgZGVyaXZlZCBieSB0YWtpbmcgdGhlIGRlZmluZSBiZWxvdyBhbmQgb3ItaW5nIHdpdGgKKyAqIHRoZSBpbnRlcmxlYXZlIGZhY3Rvci4gIFNvLCAzMiBiaXQgaW50ZXJsZWF2ZSBieSA2IGlzIDB4ODYgYW5kCisgKiAxNiBiaXQgaW50ZXJsZWF2ZSBieSAxNiBpcyAoMHg0MCB8IDB4MTApID0gMHg1MC4KKyAqCisgKi8KKworI2RlZmluZSBEU1BfQVVESU9GT1JNX1NVUEVSX0lOVEVSTEVBVkVfMTZMRQkweDQwCisjZGVmaW5lIERTUF9BVURJT0ZPUk1fU1VQRVJfSU5URVJMRUFWRV8yNExFCTB4YzAKKyNkZWZpbmUgRFNQX0FVRElPRk9STV9TVVBFUl9JTlRFUkxFQVZFXzMyTEUJMHg4MAorCisKKy8qCisgKgorICogR2luYTI0LCBNb25hLCBhbmQgTGF5bGEyNCBjb250cm9sIHJlZ2lzdGVyIGRlZmluZXMKKyAqCisgKi8KKworI2RlZmluZSBHTUxfQ09OVkVSVEVSX0VOQUJMRQkweDAwMTAKKyNkZWZpbmUgR01MX1NQRElGX1BST19NT0RFCTB4MDAyMAkvKiBQcm9mZXNzaW9uYWwgUy9QRElGID09IDEsCisJCQkJCSAgIGNvbnN1bWVyID09IDAgKi8KKyNkZWZpbmUgR01MX1NQRElGX1NBTVBMRV9SQVRFMAkweDAwNDAKKyNkZWZpbmUgR01MX1NQRElGX1NBTVBMRV9SQVRFMQkweDAwODAKKyNkZWZpbmUgR01MX1NQRElGX1RXT19DSEFOTkVMCTB4MDEwMAkvKiAxID09IHR3byBjaGFubmVscywKKwkJCQkJICAgMCA9PSBvbmUgY2hhbm5lbCAqLworI2RlZmluZSBHTUxfU1BESUZfTk9UX0FVRElPCTB4MDIwMAorI2RlZmluZSBHTUxfU1BESUZfQ09QWV9QRVJNSVQJMHgwNDAwCisjZGVmaW5lIEdNTF9TUERJRl8yNF9CSVQJMHgwODAwCS8qIDEgPT0gMjQgYml0LCAwID09IDIwIGJpdCAqLworI2RlZmluZSBHTUxfQURBVF9NT0RFCQkweDEwMDAJLyogMSA9PSBBREFUIG1vZGUsIDAgPT0gUy9QRElGIG1vZGUgKi8KKyNkZWZpbmUgR01MX1NQRElGX09QVElDQUxfTU9ERQkweDIwMDAJLyogMSA9PSBvcHRpY2FsIG1vZGUsIDAgPT0gUkNBIG1vZGUgKi8KKyNkZWZpbmUgR01MX1NQRElGX0NEUk9NX01PREUJMHgzMDAwCS8qIDEgPT0gQ0RST00gbW9kZSwKKwkJCQkJICogMCA9PSBSQ0Egb3Igb3B0aWNhbCBtb2RlICovCisjZGVmaW5lIEdNTF9ET1VCTEVfU1BFRURfTU9ERQkweDQwMDAJLyogMSA9PSBkb3VibGUgc3BlZWQsCisJCQkJCSAgIDAgPT0gc2luZ2xlIHNwZWVkICovCisKKyNkZWZpbmUgR01MX0RJR0lUQUxfSU5fQVVUT19NVVRFIDB4ODAwMDAwCisKKyNkZWZpbmUgR01MXzk2S0haCQkoMHgwIHwgR01MX0RPVUJMRV9TUEVFRF9NT0RFKQorI2RlZmluZSBHTUxfODhLSFoJCSgweDEgfCBHTUxfRE9VQkxFX1NQRUVEX01PREUpCisjZGVmaW5lIEdNTF80OEtIWgkJMHgyCisjZGVmaW5lIEdNTF80NEtIWgkJMHgzCisjZGVmaW5lIEdNTF8zMktIWgkJMHg0CisjZGVmaW5lIEdNTF8yMktIWgkJMHg1CisjZGVmaW5lIEdNTF8xNktIWgkJMHg2CisjZGVmaW5lIEdNTF8xMUtIWgkJMHg3CisjZGVmaW5lIEdNTF84S0haCQkweDgKKyNkZWZpbmUgR01MX1NQRElGX0NMT0NLCQkweDkKKyNkZWZpbmUgR01MX0FEQVRfQ0xPQ0sJCTB4QQorI2RlZmluZSBHTUxfV09SRF9DTE9DSwkJMHhCCisjZGVmaW5lIEdNTF9FU1lOQ19DTE9DSwkJMHhDCisjZGVmaW5lIEdNTF9FU1lOQ3gyX0NMT0NLCTB4RAorCisjZGVmaW5lIEdNTF9DTE9DS19DTEVBUl9NQVNLCQkweGZmZmZiZmYwCisjZGVmaW5lIEdNTF9TUERJRl9SQVRFX0NMRUFSX01BU0sJKH4oR01MX1NQRElGX1NBTVBMRV9SQVRFMHxHTUxfU1BESUZfU0FNUExFX1JBVEUxKSkKKyNkZWZpbmUgR01MX0RJR0lUQUxfTU9ERV9DTEVBUl9NQVNLCTB4ZmZmZmNmZmYKKyNkZWZpbmUgR01MX1NQRElGX0ZPUk1BVF9DTEVBUl9NQVNLCTB4ZmZmZmYwMWYKKworCisvKgorICoKKyAqIE1pYSBzYW1wbGUgcmF0ZSBhbmQgY2xvY2sgc2V0dGluZyBjb25zdGFudHMKKyAqCisgKi8KKworI2RlZmluZSBNSUFfMzIwMDAJMHgwMDQwCisjZGVmaW5lIE1JQV80NDEwMAkweDAwNDIKKyNkZWZpbmUgTUlBXzQ4MDAwCTB4MDA0MQorI2RlZmluZSBNSUFfODgyMDAJMHgwMTQyCisjZGVmaW5lIE1JQV85NjAwMAkweDAxNDEKKworI2RlZmluZSBNSUFfU1BESUYJMHgwMDAwMDA0NAorI2RlZmluZSBNSUFfU1BESUY5NgkweDAwMDAwMTQ0CisKKyNkZWZpbmUgTUlBX01JRElfUkVWCTEJLyogTXVzdCBiZSBNaWEgcmV2IDEgZm9yIE1JREkgc3VwcG9ydCAqLworCisKKy8qCisgKgorICogM0cgcmVnaXN0ZXIgYml0cworICoKKyAqLworCisjZGVmaW5lIEUzR19DT05WRVJURVJfRU5BQkxFCTB4MDAxMAorI2RlZmluZSBFM0dfU1BESUZfUFJPX01PREUJMHgwMDIwCS8qIFByb2Zlc3Npb25hbCBTL1BESUYgPT0gMSwKKwkJCQkJICAgY29uc3VtZXIgPT0gMCAqLworI2RlZmluZSBFM0dfU1BESUZfU0FNUExFX1JBVEUwCTB4MDA0MAorI2RlZmluZSBFM0dfU1BESUZfU0FNUExFX1JBVEUxCTB4MDA4MAorI2RlZmluZSBFM0dfU1BESUZfVFdPX0NIQU5ORUwJMHgwMTAwCS8qIDEgPT0gdHdvIGNoYW5uZWxzLAorCQkJCQkgICAwID09IG9uZSBjaGFubmVsICovCisjZGVmaW5lIEUzR19TUERJRl9OT1RfQVVESU8JMHgwMjAwCisjZGVmaW5lIEUzR19TUERJRl9DT1BZX1BFUk1JVAkweDA0MDAKKyNkZWZpbmUgRTNHX1NQRElGXzI0X0JJVAkweDA4MDAJLyogMSA9PSAyNCBiaXQsIDAgPT0gMjAgYml0ICovCisjZGVmaW5lIEUzR19ET1VCTEVfU1BFRURfTU9ERQkweDQwMDAJLyogMSA9PSBkb3VibGUgc3BlZWQsCisJCQkJCSAgIDAgPT0gc2luZ2xlIHNwZWVkICovCisjZGVmaW5lIEUzR19QSEFOVE9NX1BPV0VSCTB4ODAwMAkvKiAxID09IHBoYW50b20gcG93ZXIgb24sCisJCQkJCSAgIDAgPT0gcGhhbnRvbSBwb3dlciBvZmYgKi8KKworI2RlZmluZSBFM0dfOTZLSFoJCSgweDAgfCBFM0dfRE9VQkxFX1NQRUVEX01PREUpCisjZGVmaW5lIEUzR184OEtIWgkJKDB4MSB8IEUzR19ET1VCTEVfU1BFRURfTU9ERSkKKyNkZWZpbmUgRTNHXzQ4S0haCQkweDIKKyNkZWZpbmUgRTNHXzQ0S0haCQkweDMKKyNkZWZpbmUgRTNHXzMyS0haCQkweDQKKyNkZWZpbmUgRTNHXzIyS0haCQkweDUKKyNkZWZpbmUgRTNHXzE2S0haCQkweDYKKyNkZWZpbmUgRTNHXzExS0haCQkweDcKKyNkZWZpbmUgRTNHXzhLSFoJCTB4OAorI2RlZmluZSBFM0dfU1BESUZfQ0xPQ0sJCTB4OQorI2RlZmluZSBFM0dfQURBVF9DTE9DSwkJMHhBCisjZGVmaW5lIEUzR19XT1JEX0NMT0NLCQkweEIKKyNkZWZpbmUgRTNHX0NPTlRJTlVPVVNfQ0xPQ0sJMHhFCisKKyNkZWZpbmUgRTNHX0FEQVRfTU9ERQkJMHgxMDAwCisjZGVmaW5lIEUzR19TUERJRl9PUFRJQ0FMX01PREUJMHgyMDAwCisKKyNkZWZpbmUgRTNHX0NMT0NLX0NMRUFSX01BU0sJCTB4YmZmZmJmZjAKKyNkZWZpbmUgRTNHX0RJR0lUQUxfTU9ERV9DTEVBUl9NQVNLCTB4ZmZmZmNmZmYKKyNkZWZpbmUgRTNHX1NQRElGX0ZPUk1BVF9DTEVBUl9NQVNLCTB4ZmZmZmYwMWYKKworLyogQ2xvY2sgZGV0ZWN0IGJpdHMgcmVwb3J0ZWQgYnkgdGhlIERTUCAqLworI2RlZmluZSBFM0dfQ0xPQ0tfREVURUNUX0JJVF9XT1JEOTYJMHgwMDAxCisjZGVmaW5lIEUzR19DTE9DS19ERVRFQ1RfQklUX1dPUkQ0OAkweDAwMDIKKyNkZWZpbmUgRTNHX0NMT0NLX0RFVEVDVF9CSVRfU1BESUY0OAkweDAwMDQKKyNkZWZpbmUgRTNHX0NMT0NLX0RFVEVDVF9CSVRfQURBVAkweDAwMDQKKyNkZWZpbmUgRTNHX0NMT0NLX0RFVEVDVF9CSVRfU1BESUY5NgkweDAwMDgKKyNkZWZpbmUgRTNHX0NMT0NLX0RFVEVDVF9CSVRfV09SRAkoRTNHX0NMT0NLX0RFVEVDVF9CSVRfV09SRDk2fEUzR19DTE9DS19ERVRFQ1RfQklUX1dPUkQ0OCkKKyNkZWZpbmUgRTNHX0NMT0NLX0RFVEVDVF9CSVRfU1BESUYJKEUzR19DTE9DS19ERVRFQ1RfQklUX1NQRElGNDh8RTNHX0NMT0NLX0RFVEVDVF9CSVRfU1BESUY5NikKKworLyogRnJlcXVlbmN5IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRTNHX01BR0lDX05VTUJFUgkJNjc3Mzc2MDAwCisjZGVmaW5lIEUzR19GUkVRX1JFR19ERUZBVUxUCQkoRTNHX01BR0lDX05VTUJFUiAvIDQ4MDAwIC0gMikKKyNkZWZpbmUgRTNHX0ZSRVFfUkVHX01BWAkJMHhmZmZmCisKKy8qIDNHIGV4dGVybmFsIGJveCB0eXBlcyAqLworI2RlZmluZSBFM0dfR0lOQTNHX0JPWF9UWVBFCQkweDAwCisjZGVmaW5lIEUzR19MQVlMQTNHX0JPWF9UWVBFCQkweDEwCisjZGVmaW5lIEUzR19BU0lDX05PVF9MT0FERUQJCTB4ZmZmZgorI2RlZmluZSBFM0dfQk9YX1RZUEVfTUFTSwkJMHhmMAorCisjZGVmaW5lIEVYVF8zR0JPWF9OQwkJCTB4MDEKKyNkZWZpbmUgRVhUXzNHQk9YX05PVF9TRVQJCTB4MDIKKworCisvKgorICoKKyAqIEdpbmEyMCAmIExheWxhMjAgaGF2ZSBpbnB1dCBnYWluIGNvbnRyb2xzIGZvciB0aGUgYW5hbG9nIGlucHV0czsKKyAqIHRoaXMgaXMgdGhlIG1hZ2ljIG51bWJlciBmb3IgdGhlIGhhcmR3YXJlIHRoYXQgZ2l2ZXMgeW91IDAgZEIgYXQgLTEwLgorICoKKyAqLworCisjZGVmaW5lIEdMMjBfSU5QVVRfR0FJTl9NQUdJQ19OVU1CRVIJMHhDOAorCisKKy8qCisgKgorICogRGVmaW5lcyBob3cgbXVjaCB0aW1lIG11c3QgcGFzcyBiZXR3ZWVuIERTUCBsb2FkIGF0dGVtcHRzCisgKgorICovCisKKyNkZWZpbmUgRFNQX0xPQURfQVRURU1QVF9QRVJJT0QJCTEwMDAwMDBMCS8qIE9uZSBzZWNvbmQgKi8KKworCisvKgorICoKKyAqIFNpemUgb2YgYXJyYXlzIGZvciB0aGUgY29tbSBwYWdlLiAgTUFYX1BMQVlfVEFQUyBhbmQgTUFYX1JFQ19UQVBTIGFyZQorICogbm8gbG9uZ2VyIHVzZWQsIGJ1dCB0aGUgc2l6ZXMgbXVzdCBzdGlsbCBiZSByaWdodCBmb3IgdGhlIERTUCB0byBzZWUKKyAqIHRoZSBjb21tIHBhZ2UgY29ycmVjdGx5LgorICoKKyAqLworCisjZGVmaW5lIE1PTklUT1JfQVJSQVlfU0laRQkweDE4MAorI2RlZmluZSBWTUlYRVJfQVJSQVlfU0laRQkweDQwCisjZGVmaW5lIE1JRElfT1VUX0JVRkZFUl9TSVpFCTMyCisjZGVmaW5lIE1JRElfSU5fQlVGRkVSX1NJWkUJMjU2CisjZGVmaW5lIE1BWF9QTEFZX1RBUFMJCTE2OAorI2RlZmluZSBNQVhfUkVDX1RBUFMJCTE5MgorI2RlZmluZSBEU1BfTUlESV9PVVRfRklGT19TSVpFCTY0CisKKworLyogc2dfZW50cnkgaXMgYSBzaW5nbGUgZW50cnkgZm9yIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0LiAgVGhlIGFycmF5IG9mIHN0cnVjdAorc2dfZW50cnkgc3RydWN0IGlzIHJlYWQgYnkgdGhlIERTUCwgc28gYWxsIHZhbHVlcyBtdXN0IGJlIGxpdHRsZS1lbmRpYW4uICovCisKKyNkZWZpbmUgTUFYX1NHTElTVF9FTlRSSUVTIDUxMgorCitzdHJ1Y3Qgc2dfZW50cnkgeworCXUzMiBhZGRyOworCXUzMiBzaXplOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIFRoZSBjb21tIHBhZ2UuICBUaGlzIHN0cnVjdHVyZSBpcyByZWFkIGFuZCB3cml0dGVuIGJ5IHRoZSBEU1A7IHRoZQorICBEU1AgY29kZSBpcyBhIGZpcm0gYmVsaWV2ZXIgaW4gdGhlIGJ5dGUgb2Zmc2V0cyB3cml0dGVuIGluIHRoZSBjb21tZW50cworICBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4gIFRoaXMgc3RydWN0dXJlIHNob3VsZCBub3QgYmUgY2hhbmdlZC4KKworICBBbnkgcmVhZHMgZnJvbSBvciB3cml0ZXMgdG8gdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNvbW1fcGFnZSB7CQkvKgkJCQlCYXNlCUxlbmd0aCovCisJdTMyIGNvbW1fc2l6ZTsJCS8qIHNpemUgb2YgdGhpcyBvYmplY3QJCTB4MDAwCTQgKi8KKwl1MzIgZmxhZ3M7CQkvKiBTZWUgQXBwZW5kaXggQSBiZWxvdwkJMHgwMDQJNCAqLworCXUzMiB1bnVzZWQ7CQkvKiBVbnVzZWQgZW50cnkJCQkweDAwOAk0ICovCisJdTMyIHNhbXBsZV9yYXRlOwkvKiBDYXJkIHNhbXBsZSByYXRlIGluIEh6CTB4MDBjCTQgKi8KKwl2b2xhdGlsZSB1MzIgaGFuZHNoYWtlOwkvKiBEU1AgY29tbWFuZCBoYW5kc2hha2UJMHgwMTAJNCAqLworCXUzMiBjbWRfc3RhcnQ7CQkvKiBDaHMuIHRvIHN0YXJ0IG1hc2sJCTB4MDE0CTQgKi8KKwl1MzIgY21kX3N0b3A7CQkvKiBDaHMuIHRvIHN0b3AgbWFzawkJMHgwMTgJNCAqLworCXUzMiBjbWRfcmVzZXQ7CQkvKiBDaHMuIHRvIHJlc2V0IG1hc2sJCTB4MDFjCTQgKi8KKwl1MTYgYXVkaW9fZm9ybWF0W0RTUF9NQVhQSVBFU107CS8qIENocy4gYXVkaW8gZm9ybWF0CTB4MDIwCTMyKjIgKi8KKwlzdHJ1Y3Qgc2dfZW50cnkgc2dsaXN0X2FkZHJbRFNQX01BWFBJUEVTXTsKKwkJCQkvKiBDaHMuIFBoeXNpY2FsIHNnbGlzdCBhZGRycwkweDA2MAkzMio4ICovCisJdm9sYXRpbGUgdTMyIHBvc2l0aW9uW0RTUF9NQVhQSVBFU107CisJCQkJLyogUG9zaXRpb25zIGZvciBlYS4gY2guCTB4MTYwCTMyKjQgKi8KKwl2b2xhdGlsZSBzOCB2dV9tZXRlcltEU1BfTUFYUElQRVNdOworCQkJCS8qIFZVIG1ldGVycwkJCTB4MWUwCTMyKjEgKi8KKwl2b2xhdGlsZSBzOCBwZWFrX21ldGVyW0RTUF9NQVhQSVBFU107CisJCQkJLyogUGVhayBtZXRlcnMJCQkweDIwMAkzMioxICovCisJczggbGluZV9vdXRfbGV2ZWxbRFNQX01BWEFVRElPT1VUUFVUU107CisJCQkJLyogT3V0cHV0IGdhaW4JCQkweDIyMAkxNioxICovCisJczggbGluZV9pbl9sZXZlbFtEU1BfTUFYQVVESU9JTlBVVFNdOworCQkJCS8qIElucHV0IGdhaW4JCQkweDIzMAkxNioxICovCisJczggbW9uaXRvcnNbTU9OSVRPUl9BUlJBWV9TSVpFXTsKKwkJCQkvKiBNb25pdG9yIG1hcAkJCTB4MjQwCTB4MTgwICovCisJdTMyIHBsYXlfY29lZmZbTUFYX1BMQVlfVEFQU107CisJCQkvKiBHaW5hL0RhcmxhIHBsYXkgZmlsdGVycyAtIG9ic29sZXRlCTB4M2MwCTE2OCo0ICovCisJdTMyIHJlY19jb2VmZltNQVhfUkVDX1RBUFNdOworCQkJLyogR2luYS9EYXJsYSByZWNvcmQgZmlsdGVycyAtIG9ic29sZXRlCTB4NjYwCTE5Mio0ICovCisJdm9sYXRpbGUgdTE2IG1pZGlfaW5wdXRbTUlESV9JTl9CVUZGRVJfU0laRV07CisJCQkvKiBNSURJIGlucHV0IGRhdGEgdHJhbnNmZXIgYnVmZmVyCTB4OTYwCTI1NioyICovCisJdTggZ2RfY2xvY2tfc3RhdGU7CS8qIENoZyBHaW5hL0RhcmxhIGNsb2NrIHN0YXRlCTB4YjYwCTEgKi8KKwl1OCBnZF9zcGRpZl9zdGF0dXM7CS8qIENoZy4gR2luYS9EYXJsYSBTL1BESUYgc3RhdGUJMHhiNjEJMSAqLworCXU4IGdkX3Jlc2FtcGxlcl9zdGF0ZTsJLyogU2hvdWxkIGFsd2F5cyBiZSAzCQkweGI2MgkxICovCisJdTggZmlsbGVyMjsJCS8qCQkJCTB4YjYzCTEgKi8KKwl1MzIgbm9taW5hbF9sZXZlbF9tYXNrOwkvKiAtMTAgbGV2ZWwgZW5hYmxlIG1hc2sJMHhiNjQJNCAqLworCXUxNiBpbnB1dF9jbG9jazsJLyogQ2hnLiBJbnB1dCBjbG9jayBzdGF0ZQkweGI2OAkyICovCisJdTE2IG91dHB1dF9jbG9jazsJLyogQ2hnLiBPdXRwdXQgY2xvY2sgc3RhdGUJMHhiNmEJMiAqLworCXZvbGF0aWxlIHUzMiBzdGF0dXNfY2xvY2tzOworCQkJCS8qIEN1cnJlbnQgSW5wdXQgY2xvY2sgc3RhdGUJMHhiNmMJNCAqLworCXUzMiBleHRfYm94X3N0YXR1czsJLyogRXh0ZXJuYWwgYm94IHN0YXR1cwkJMHhiNzAJNCAqLworCXUzMiBjbWRfYWRkX2J1ZmZlcjsJLyogUGlwZXMgdG8gYWRkIChvYnNvbGV0ZSkJMHhiNzQJNCAqLworCXZvbGF0aWxlIHUzMiBtaWRpX291dF9mcmVlX2NvdW50OworCQkJLyogIyBvZiBieXRlcyBmcmVlIGluIE1JREkgb3V0cHV0IEZJRk8JMHhiNzgJNCAqLworCXUzMiB1bnVzZWQyOwkJLyogQ3ljbGljIHBpcGVzCQkJMHhiN2MJNCAqLworCXUzMiBjb250cm9sX3JlZ2lzdGVyOworCQkJLyogTW9uYSwgR2luYTI0LCBMYXlsYTI0LCAzRyBjdHJsIHJlZwkweGI4MAk0ICovCisJdTMyIGUzZ19mcnFfcmVnaXN0ZXI7CS8qIDNHIGZyZXF1ZW5jeSByZWdpc3RlcgkweGI4NAk0ICovCisJdTggZmlsbGVyWzI0XTsJCS8qIGZpbGxlcgkJCTB4Yjg4CTI0KjEgKi8KKwlzOCB2bWl4ZXJbVk1JWEVSX0FSUkFZX1NJWkVdOworCQkJCS8qIFZtaXhlciBsZXZlbHMJCTB4YmEwCTY0KjEgKi8KKwl1OCBtaWRpX291dHB1dFtNSURJX09VVF9CVUZGRVJfU0laRV07CisJCQkJLyogTUlESSBvdXRwdXQgZGF0YQkJMHhiZTAJMzIqMSAqLworfTsKKworI2VuZGlmIC8qIF9FQ0hPX0RTUF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2dtbC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZ21sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhMzdlNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2dtbC5jCkBAIC0wLDAgKzEsMTk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBjb21tb24gZm9yIEdpbmEyNCwgTGF5bGEyNCBhbmQgTW9uYSBjYXJkcyAqLworCisKKy8qIEFTSUMgc3RhdHVzIGNoZWNrIC0gc29tZSBjYXJkcyBoYXZlIG9uZSBvciB0d28gQVNJQ3MgdGhhdCBuZWVkIHRvIGJlCitsb2FkZWQuICBPbmNlIHRoYXQgbG9hZCBpcyBjb21wbGV0ZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gc2VlIGlmCit0aGUgbG9hZCB3YXMgc3VjY2Vzc2Z1bC4KK0lmIHRoaXMgbG9hZCBmYWlscywgaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBoYXJkd2FyZSBpcworZGVmZWN0aXZlIC0gdGhlIGV4dGVybmFsIGJveCBtYXkgYmUgZGlzY29ubmVjdGVkIG9yIHR1cm5lZCBvZmYuICovCitzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJdTMyIGFzaWNfc3RhdHVzOworCisJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1RFU1RfQVNJQyk7CisKKwkvKiBUaGUgRFNQIHdpbGwgcmV0dXJuIGEgdmFsdWUgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlCisJICAgQVNJQyBpcyBjdXJyZW50bHkgbG9hZGVkICovCisJaWYgKHJlYWRfZHNwKGNoaXAsICZhc2ljX3N0YXR1cykgPCAwKSB7CisJCURFX0lOSVQoKCJjaGVja19hc2ljX3N0YXR1czogZmFpbGVkIG9uIHJlYWRfZHNwXG4iKSk7CisJCWNoaXAtPmFzaWNfbG9hZGVkID0gRkFMU0U7CisJCXJldHVybiAtRUlPOworCX0KKworCWNoaXAtPmFzaWNfbG9hZGVkID0gKGFzaWNfc3RhdHVzID09IEFTSUNfQUxSRUFEWV9MT0FERUQpOworCXJldHVybiBjaGlwLT5hc2ljX2xvYWRlZCA/IDAgOiAtRUlPOworfQorCisKKworLyogTW9zdCBjb25maWd1cmF0aW9uIG9mIEdpbmEyNCwgTGF5bGEyNCwgb3IgTW9uYSBpcyBhY2NvbXBsaXNoZWQgYnkgd3JpdGluZwordGhlIGNvbnRyb2wgcmVnaXN0ZXIuICB3cml0ZV9jb250cm9sX3JlZyBzZW5kcyB0aGUgbmV3IGNvbnRyb2wgcmVnaXN0ZXIKK3ZhbHVlIHRvIHRoZSBEU1AuICovCitzdGF0aWMgaW50IHdyaXRlX2NvbnRyb2xfcmVnKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiB2YWx1ZSwgY2hhciBmb3JjZSkKK3sKKwkvKiBIYW5kbGUgdGhlIGRpZ2l0YWwgaW5wdXQgYXV0by1tdXRlICovCisJaWYgKGNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUpCisJCXZhbHVlIHw9IEdNTF9ESUdJVEFMX0lOX0FVVE9fTVVURTsKKwllbHNlCisJCXZhbHVlICY9IH5HTUxfRElHSVRBTF9JTl9BVVRPX01VVEU7CisKKwlERV9BQ1QoKCJ3cml0ZV9jb250cm9sX3JlZzogMHgleFxuIiwgdmFsdWUpKTsKKworCS8qIFdyaXRlIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJdmFsdWUgPSBjcHVfdG9fbGUzMih2YWx1ZSk7CisJaWYgKHZhbHVlICE9IGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlciB8fCBmb3JjZSkgeworCQlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gdmFsdWU7CisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19XUklURV9DT05UUk9MX1JFRyk7CisJfQorCXJldHVybiAwOworfQorCisKKworLyogR2luYTI0LCBMYXlsYTI0LCBhbmQgTW9uYSBzdXBwb3J0IGRpZ2l0YWwgaW5wdXQgYXV0by1tdXRlLiAgSWYgdGhlIGRpZ2l0YWwKK2lucHV0IGF1dG8tbXV0ZSBpcyBlbmFibGVkLCB0aGUgRFNQIHdpbGwgb25seSBlbmFibGUgdGhlIGRpZ2l0YWwgaW5wdXRzIGlmCit0aGUgY2FyZCBpcyBzeW5jaW5nIHRvIGEgdmFsaWQgY2xvY2sgb24gdGhlIEFEQVQgb3IgUy9QRElGIGlucHV0cy4KK0lmIHRoZSBhdXRvLW11dGUgaXMgZGlzYWJsZWQsIHRoZSBkaWdpdGFsIGlucHV0cyBhcmUgZW5hYmxlZCByZWdhcmRsZXNzIG9mCit3aGF0IHRoZSBpbnB1dCBjbG9jayBpcyBzZXQgb3Igd2hhdCBpcyBjb25uZWN0ZWQuICovCitzdGF0aWMgaW50IHNldF9pbnB1dF9hdXRvX211dGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgaW50IGF1dG9tdXRlKQoreworCURFX0FDVCgoInNldF9pbnB1dF9hdXRvX211dGUgJWRcbiIsIGF1dG9tdXRlKSk7CisKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gYXV0b211dGU7CisKKwkvKiBSZS1zZXQgdGhlIGlucHV0IGNsb2NrIHRvIHRoZSBjdXJyZW50IHZhbHVlIC0gaW5kaXJlY3RseSBjYXVzZXMKKwl0aGUgYXV0by1tdXRlIGZsYWcgdG8gYmUgc2VudCB0byB0aGUgRFNQICovCisJcmV0dXJuIHNldF9pbnB1dF9jbG9jayhjaGlwLCBjaGlwLT5pbnB1dF9jbG9jayk7Cit9CisKKworCisvKiBTL1BESUYgY29heCAvIFMvUERJRiBvcHRpY2FsIC8gQURBVCAtIHN3aXRjaCAqLworc3RhdGljIGludCBzZXRfZGlnaXRhbF9tb2RlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHU4IG1vZGUpCit7CisJdTggcHJldmlvdXNfbW9kZTsKKwlpbnQgZXJyLCBpLCBvOworCisJaWYgKGNoaXAtPmJhZF9ib2FyZCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBBbGwgYXVkaW8gY2hhbm5lbHMgbXVzdCBiZSBjbG9zZWQgYmVmb3JlIGNoYW5naW5nIHRoZSBkaWdpdGFsIG1vZGUgKi8KKwlzbmRfYXNzZXJ0KCFjaGlwLT5waXBlX2FsbG9jX21hc2ssIHJldHVybiAtRUFHQUlOKTsKKworCXNuZF9hc3NlcnQoY2hpcC0+ZGlnaXRhbF9tb2RlcyAmICgxIDw8IG1vZGUpLCByZXR1cm4gLUVJTlZBTCk7CisKKwlwcmV2aW91c19tb2RlID0gY2hpcC0+ZGlnaXRhbF9tb2RlOworCWVyciA9IGRzcF9zZXRfZGlnaXRhbF9tb2RlKGNoaXAsIG1vZGUpOworCisJLyogSWYgd2Ugc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdGhlIGRpZ2l0YWwgbW9kZSBmcm9tIG9yIHRvIEFEQVQsCisJICAgdGhlbiBtYWtlIHN1cmUgYWxsIG91dHB1dCwgaW5wdXQgYW5kIG1vbml0b3IgbGV2ZWxzIGFyZQorCSAgIHVwZGF0ZWQgYnkgdGhlIERTUCBjb21tIG9iamVjdC4gKi8KKwlpZiAoZXJyID49IDAgJiYgcHJldmlvdXNfbW9kZSAhPSBtb2RlICYmCisJICAgIChwcmV2aW91c19tb2RlID09IERJR0lUQUxfTU9ERV9BREFUIHx8IG1vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspCisJCQkJc2V0X21vbml0b3JfZ2FpbihjaGlwLCBvLCBpLAorCQkJCQkJIGNoaXAtPm1vbml0b3JfZ2FpbltvXVtpXSk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1c3Nlc19pbihjaGlwKTsgaSsrKQorCQkJc2V0X2lucHV0X2dhaW4oY2hpcCwgaSwgY2hpcC0+aW5wdXRfZ2FpbltpXSk7CisJCXVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApOworI2VuZGlmCisKKwkJZm9yIChvID0gMDsgbyA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBvKyspCisJCQlzZXRfb3V0cHV0X2dhaW4oY2hpcCwgbywgY2hpcC0+b3V0cHV0X2dhaW5bb10pOworCQl1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCisKKy8qIFNldCB0aGUgUy9QRElGIG91dHB1dCBmb3JtYXQgKi8KK3N0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpCit7CisJdTMyIGNvbnRyb2xfcmVnOworCWludCBlcnI7CisKKwkvKiBDbGVhciB0aGUgY3VycmVudCBTL1BESUYgZmxhZ3MgKi8KKwljb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CisJY29udHJvbF9yZWcgJj0gR01MX1NQRElGX0ZPUk1BVF9DTEVBUl9NQVNLOworCisJLyogU2V0IHRoZSBuZXcgUy9QRElGIGZsYWdzIGRlcGVuZGluZyBvbiB0aGUgbW9kZSAqLworCWNvbnRyb2xfcmVnIHw9IEdNTF9TUERJRl9UV09fQ0hBTk5FTCB8IEdNTF9TUERJRl8yNF9CSVQgfAorCQlHTUxfU1BESUZfQ09QWV9QRVJNSVQ7CisJaWYgKHByb2YpIHsKKwkJLyogUHJvZmVzc2lvbmFsIG1vZGUgKi8KKwkJY29udHJvbF9yZWcgfD0gR01MX1NQRElGX1BST19NT0RFOworCisJCXN3aXRjaCAoY2hpcC0+c2FtcGxlX3JhdGUpIHsKKwkJY2FzZSAzMjAwMDoKKwkJCWNvbnRyb2xfcmVnIHw9IEdNTF9TUERJRl9TQU1QTEVfUkFURTAgfAorCQkJCUdNTF9TUERJRl9TQU1QTEVfUkFURTE7CisJCQlicmVhazsKKwkJY2FzZSA0NDEwMDoKKwkJCWNvbnRyb2xfcmVnIHw9IEdNTF9TUERJRl9TQU1QTEVfUkFURTA7CisJCQlicmVhazsKKwkJY2FzZSA0ODAwMDoKKwkJCWNvbnRyb2xfcmVnIHw9IEdNTF9TUERJRl9TQU1QTEVfUkFURTE7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIENvbnN1bWVyIG1vZGUgKi8KKwkJc3dpdGNoIChjaGlwLT5zYW1wbGVfcmF0ZSkgeworCQljYXNlIDMyMDAwOgorCQkJY29udHJvbF9yZWcgfD0gR01MX1NQRElGX1NBTVBMRV9SQVRFMCB8CisJCQkJR01MX1NQRElGX1NBTVBMRV9SQVRFMTsKKwkJCWJyZWFrOworCQljYXNlIDQ4MDAwOgorCQkJY29udHJvbF9yZWcgfD0gR01MX1NQRElGX1NBTVBMRV9SQVRFMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKChlcnIgPSB3cml0ZV9jb250cm9sX3JlZyhjaGlwLCBjb250cm9sX3JlZywgRkFMU0UpKSkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOworCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgdG8gJXNcbiIsCisJCXByb2YgPyAiUHJvZmVzc2lvbmFsIiA6ICJDb25zdW1lciIpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDZkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIEVDSE9HQUxTX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9HSU5BMjAKKyNkZWZpbmUgRUNIT0NBUkRfTkFNRSAiR2luYTIwIgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRVhURVJOQUxfQ0xPQ0sKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0FEQVQJRkFMU0UKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMiAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JMTAJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTEyCS8qIDIgKi8KKyNkZWZpbmUgUFhfTlVNCQkxNAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk4CS8qIDIgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTEwCS8qIDIgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgkxMgkvKiAyICovCisjZGVmaW5lIEJYX05VTQkJMTQKKworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCisjZGVmaW5lIEZXX0dJTkEyMF9EU1AJMAorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImdpbmEyMF9kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMjAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgR2luYTIwIHJldi4wICovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPSA0NDEwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorCS8qIE9uZSBwYWdlICg0aykgY29udGFpbnMgNTEyIGluc3RydWN0aW9ucy4gSSBkb24ndCBrbm93IGlmIHRoZSBodworCXN1cHBvcnRzIGxpc3RzIGxvbmdlciB0aGFuIHRoaXMuIEluIHRoaXMgY2FzZSBwZXJpb2RzX21heD0yMjAgaXMgYQorCXNhZmUgbGltaXQgdG8gbWFrZSBzdXJlIHRoZSBsaXN0IG5ldmVyIGV4Y2VlZHMgNTEyIGluc3RydWN0aW9ucy4gKi8KK307CisKKworI2luY2x1ZGUgImdpbmEyMF9kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTdjODkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYwpAQCAtMCwwICsxLDIxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOworc3RhdGljIGludCB1cGRhdGVfZmxhZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBHaW5hMjBcbiIpKTsKKwlzbmRfYXNzZXJ0KChzdWJkZXZpY2VfaWQgJiAweGZmZjApID09IEdJTkEyMCwgcmV0dXJuIC1FTk9ERVYpOworCisJaWYgKChlcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCkpKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTIwX0RTUF07CisJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOworCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTCB8CisJCUVDSE9fQ0xPQ0tfQklUX1NQRElGOworCisJaWYgKChlcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CisKKwkvKiBNYXAgdGhlIERTUCBjbG9jayBkZXRlY3QgYml0cyB0byB0aGUgZ2VuZXJpYyBkcml2ZXIgY2xvY2sKKwkgICBkZXRlY3QgYml0cyAqLworCWNsb2Nrc19mcm9tX2RzcCA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+c3RhdHVzX2Nsb2Nrcyk7CisKKwljbG9ja19iaXRzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR0xETV9DTE9DS19ERVRFQ1RfQklUX1NQRElGKQorCQljbG9ja19iaXRzIHw9IEVDSE9fQ0xPQ0tfQklUX1NQRElGOworCisJcmV0dXJuIGNsb2NrX2JpdHM7Cit9CisKKworCisvKiBUaGUgR2luYTIwIGhhcyBubyBBU0lDLiBKdXN0IGRvIG5vdGhpbmcgKi8KK3N0YXRpYyBpbnQgbG9hZF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKK3sKKwl1OCBjbG9ja19zdGF0ZSwgc3BkaWZfc3RhdHVzOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgNDQxMDA6CisJCWNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfNDQ7CisJCXNwZGlmX3N0YXR1cyA9IEdEX1NQRElGX1NUQVRVU180NDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xvY2tfc3RhdGUgPSBHRF9DTE9DS180ODsKKwkJc3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTXzQ4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQljbG9ja19zdGF0ZSA9IEdEX0NMT0NLX05PQ0hBTkdFOworCQlzcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfTk9DSEFOR0U7CisJCWJyZWFrOworCX0KKworCWlmIChjaGlwLT5jbG9ja19zdGF0ZSA9PSBjbG9ja19zdGF0ZSkKKwkJY2xvY2tfc3RhdGUgPSBHRF9DTE9DS19OT0NIQU5HRTsKKwlpZiAoc3BkaWZfc3RhdHVzID09IGNoaXAtPnNwZGlmX3N0YXR1cykKKwkJc3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX05PQ0hBTkdFOworCisJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOworCWNoaXAtPmNvbW1fcGFnZS0+Z2RfY2xvY2tfc3RhdGUgPSBjbG9ja19zdGF0ZTsKKwljaGlwLT5jb21tX3BhZ2UtPmdkX3NwZGlmX3N0YXR1cyA9IHNwZGlmX3N0YXR1czsKKwljaGlwLT5jb21tX3BhZ2UtPmdkX3Jlc2FtcGxlcl9zdGF0ZSA9IDM7CS8qIG1hZ2ljIG51bWJlciAtIHNob3VsZCBhbHdheXMgYmUgMyAqLworCisJLyogU2F2ZSB0aGUgbmV3IGF1ZGlvIHN0YXRlIGlmIGl0IGNoYW5nZWQgKi8KKwlpZiAoY2xvY2tfc3RhdGUgIT0gR0RfQ0xPQ0tfTk9DSEFOR0UpCisJCWNoaXAtPmNsb2NrX3N0YXRlID0gY2xvY2tfc3RhdGU7CisJaWYgKHNwZGlmX3N0YXR1cyAhPSBHRF9TUERJRl9TVEFUVVNfTk9DSEFOR0UpCisJCWNoaXAtPnNwZGlmX3N0YXR1cyA9IHNwZGlmX3N0YXR1czsKKwljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19TRVRfR0RfQVVESU9fU1RBVEUpOworfQorCisKKworc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKQoreworCURFX0FDVCgoInNldF9pbnB1dF9jbG9jazpcbiIpKTsKKworCXN3aXRjaCAoY2xvY2spIHsKKwljYXNlIEVDSE9fQ0xPQ0tfSU5URVJOQUw6CisJCS8qIFJlc2V0IHRoZSBhdWRpbyBzdGF0ZSB0byB1bmtub3duIChqdXN0IGluIGNhc2UpICovCisJCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CisJCWNoaXAtPnNwZGlmX3N0YXR1cyA9IEdEX1NQRElGX1NUQVRVU19VTkRFRjsKKwkJc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKTsKKwkJY2hpcC0+aW5wdXRfY2xvY2sgPSBjbG9jazsKKwkJREVfQUNUKCgiU2V0IEdpbmEgY2xvY2sgdG8gSU5URVJOQUxcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBFQ0hPX0NMT0NLX1NQRElGOgorCQljaGlwLT5jb21tX3BhZ2UtPmdkX2Nsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfU1BESUZJTjsKKwkJY2hpcC0+Y29tbV9wYWdlLT5nZF9zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfTk9DSEFOR0U7CisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1NFVF9HRF9BVURJT19TVEFURSk7CisJCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfU1BESUZJTjsKKwkJREVfQUNUKCgiU2V0IEdpbmEyMCBjbG9jayB0byBTUERJRlxuIikpOworCQljaGlwLT5pbnB1dF9jbG9jayA9IGNsb2NrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFNldCBpbnB1dCBidXMgZ2FpbiAob25lIHVuaXQgaXMgMC41ZEIgISkgKi8KK3N0YXRpYyBpbnQgc2V0X2lucHV0X2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGlucHV0LCBpbnQgZ2FpbikKK3sKKwlzbmRfYXNzZXJ0KGlucHV0IDwgbnVtX2J1c3Nlc19pbihjaGlwKSwgcmV0dXJuIC1FSU5WQUwpOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPmlucHV0X2dhaW5baW5wdXRdID0gZ2FpbjsKKwlnYWluICs9IEdMMjBfSU5QVVRfR0FJTl9NQUdJQ19OVU1CRVI7CisJY2hpcC0+Y29tbV9wYWdlLT5saW5lX2luX2xldmVsW2lucHV0XSA9IGdhaW47CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVyZWFkIHRoZSBmbGFncyBmcm9tIHRoZSBjb21tIHBhZ2UgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX2ZsYWdzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOworfQorCisKKworc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZikKK3sKKwlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CisJaWYgKHByb2YpCisJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwllbHNlCisJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KKwkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKKwlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2NGQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNkZWZpbmUgRUNITzI0X0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9HSU5BMjQKKyNkZWZpbmUgRUNIT0NBUkRfTkFNRSAiR2luYTI0IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfQVNJQworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfSU5QVVRfTk9NSU5BTF9MRVZFTAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfT1VUUFVUX05PTUlOQUxfTEVWRUwKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU5fQVVUT01VVEUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfTU9ERV9TV0lUQ0gKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisjZGVmaW5lIEVDSE9DQVJEX0hBU19BREFUCTYKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogOCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JMTYJLyogMiAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTE4CS8qIDggKi8KKyNkZWZpbmUgUFhfTlVNCQkyNgorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk4CS8qIDggKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTE2CS8qIDIgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgkxOAkvKiA4ICovCisjZGVmaW5lIEJYX05VTQkJMjYKKworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfR0lOQTI0XzMwMV9EU1AJMQorI2RlZmluZSBGV19HSU5BMjRfMzYxX0RTUAkyCisjZGVmaW5lIEZXX0dJTkEyNF8zMDFfQVNJQwkzCisjZGVmaW5lIEZXX0dJTkEyNF8zNjFfQVNJQwk0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAibG9hZGVyX2RzcC5mdyJ9LAorCXswLCAiZ2luYTI0XzMwMV9kc3AuZncifSwKKwl7MCwgImdpbmEyNF8zNjFfZHNwLmZ3In0sCisJezAsICJnaW5hMjRfMzAxX2FzaWMuZncifSwKKwl7MCwgImdpbmEyNF8zNjFfYXNpYy5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA1MCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBHaW5hMjQgcmV2LjAgKi8KKwl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDUxLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIEdpbmEyNCByZXYuMSAqLworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwNTAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzNjEgR2luYTI0IHJldi4wICovCisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA1MSwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBHaW5hMjQgcmV2LjEgKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSAJU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCisJLyogT25lIHBhZ2UgKDRrKSBjb250YWlucyA1MTIgaW5zdHJ1Y3Rpb25zLiBJIGRvbid0IGtub3cgaWYgdGhlIGh3CisJc3VwcG9ydHMgbGlzdHMgbG9uZ2VyIHRoYW4gdGhpcy4gSW4gdGhpcyBjYXNlIHBlcmlvZHNfbWF4PTIyMCBpcyBhCisJc2FmZSBsaW1pdCB0byBtYWtlIHN1cmUgdGhlIGxpc3QgbmV2ZXIgZXhjZWVkcyA1MTIgaW5zdHJ1Y3Rpb25zLgorCTIyMCB+PSAoNTEyIC0gMSAtIChCVUZGRVJfQllURVNfTUFYIC8gUEFHRV9TSVpFKSkgLyAyICovCit9OworCisjaW5jbHVkZSAiZ2luYTI0X2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZ21sLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NGZjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwpAQCAtMCwwICsxLDM0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgd3JpdGVfY29udHJvbF9yZWcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHZhbHVlLCBjaGFyIGZvcmNlKTsKK3N0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jayk7CitzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKTsKK3N0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKTsKK3N0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBHaW5hMjRcbiIpKTsKKwlzbmRfYXNzZXJ0KChzdWJkZXZpY2VfaWQgJiAweGZmZjApID09IEdJTkEyNCwgcmV0dXJuIC1FTk9ERVYpOworCisJaWYgKChlcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCkpKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9CisJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAorCQlFQ0hPX0NMT0NLX0JJVF9FU1lOQyB8IEVDSE9fQ0xPQ0tfQklUX0VTWU5DOTYgfAorCQlFQ0hPX0NMT0NLX0JJVF9BREFUOworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisKKwkvKiBHaW5hMjQgY29tZXMgaW4gYm90aCAnMzAxIGFuZCAnMzYxIGZsYXZvcnMgKi8KKwlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkgeworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzM2MV9EU1BdOworCQljaGlwLT5kaWdpdGFsX21vZGVzID0KKwkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKKwkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CisJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX0FEQVQ7CisJfSBlbHNlIHsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0dJTkEyNF8zMDFfRFNQXTsKKwkJY2hpcC0+ZGlnaXRhbF9tb2RlcyA9CisJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX1JDQSB8CisJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUwgfAorCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9BREFUIHwKKwkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfQ0RST007CisJfQorCisJaWYgKChlcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOworCXNuZF9hc3NlcnQoZXJyID49IDAsIHJldHVybiBlcnIpOworCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CisKKwkvKiBNYXAgdGhlIERTUCBjbG9jayBkZXRlY3QgYml0cyB0byB0aGUgZ2VuZXJpYyBkcml2ZXIgY2xvY2sKKwkgICBkZXRlY3QgYml0cyAqLworCWNsb2Nrc19mcm9tX2RzcCA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+c3RhdHVzX2Nsb2Nrcyk7CisKKwljbG9ja19iaXRzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR01MX0NMT0NLX0RFVEVDVF9CSVRfU1BESUYpCisJCWNsb2NrX2JpdHMgfD0gRUNIT19DTE9DS19CSVRfU1BESUY7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR01MX0NMT0NLX0RFVEVDVF9CSVRfQURBVCkKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9BREFUOworCisJaWYgKGNsb2Nrc19mcm9tX2RzcCAmIEdNTF9DTE9DS19ERVRFQ1RfQklUX0VTWU5DKQorCQljbG9ja19iaXRzIHw9IEVDSE9fQ0xPQ0tfQklUX0VTWU5DIHwgRUNIT19DTE9DS19CSVRfRVNZTkM5NjsKKworCXJldHVybiBjbG9ja19iaXRzOworfQorCisKKworLyogR2luYTI0IGhhcyBhbiBBU0lDIG9uIHRoZSBQQ0kgY2FyZCB3aGljaCBtdXN0IGJlIGxvYWRlZCBmb3IgYW55dGhpbmcKK2ludGVyZXN0aW5nIHRvIGhhcHBlbi4gKi8KK3N0YXRpYyBpbnQgbG9hZF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJdTMyIGNvbnRyb2xfcmVnOworCWludCBlcnI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKworCWlmIChjaGlwLT5hc2ljX2xvYWRlZCkKKwkJcmV0dXJuIDE7CisKKwkvKiBHaXZlIHRoZSBEU1AgYSBmZXcgbWlsbGlzZWNvbmRzIHRvIHNldHRsZSBkb3duICovCisJbWRlbGF5KDEwKTsKKworCS8qIFBpY2sgdGhlIGNvcnJlY3QgQVNJQyBmb3IgJzMwMSBvciAnMzYxIEdpbmEyNCAqLworCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQorCQlmdyA9ICZjYXJkX2Z3W0ZXX0dJTkEyNF8zNjFfQVNJQ107CisJZWxzZQorCQlmdyA9ICZjYXJkX2Z3W0ZXX0dJTkEyNF8zMDFfQVNJQ107CisKKwlpZiAoKGVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9HSU5BMjRfQVNJQywgZncpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwljaGlwLT5hc2ljX2NvZGUgPSBmdzsKKworCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBhIGxpdHRsZSB0aW1lIHRvIHNldCB1cCAqLworCW1kZWxheSgxMCk7CisJLyogU2VlIGlmIGl0IHdvcmtlZCAqLworCWVyciA9IGNoZWNrX2FzaWNfc3RhdHVzKGNoaXApOworCisJLyogU2V0IHVwIHRoZSBjb250cm9sIHJlZ2lzdGVyIGlmIHRoZSBsb2FkIHN1Y2NlZWRlZCAtCisJICAgNDgga0h6LCBpbnRlcm5hbCBjbG9jaywgUy9QRElGIFJDQSBtb2RlICovCisJaWYgKCFlcnIpIHsKKwkJY29udHJvbF9yZWcgPSBHTUxfQ09OVkVSVEVSX0VOQUJMRSB8IEdNTF80OEtIWjsKKwkJZXJyID0gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsIFRSVUUpOworCX0KKwlERV9JTklUKCgibG9hZF9hc2ljKCkgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CisKKworCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKK3sKKwl1MzIgY29udHJvbF9yZWcsIGNsb2NrOworCisJc25kX2Fzc2VydChyYXRlIDwgNTAwMDAgfHwgY2hpcC0+ZGlnaXRhbF9tb2RlICE9IERJR0lUQUxfTU9ERV9BREFULAorCQkgICByZXR1cm4gLUVJTlZBTCk7CisKKwkvKiBPbmx5IHNldCB0aGUgY2xvY2sgZm9yIGludGVybmFsIG1vZGUuICovCisJaWYgKGNoaXAtPmlucHV0X2Nsb2NrICE9IEVDSE9fQ0xPQ0tfSU5URVJOQUwpIHsKKwkJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlOiBDYW5ub3Qgc2V0IHNhbXBsZSByYXRlIC0gIgorCQkJImNsb2NrIG5vdCBzZXQgdG8gQ0xLX0NMT0NLSU5JTlRFUk5BTFxuIikpOworCQkvKiBTYXZlIHRoZSByYXRlIGFueWhvdyAqLworCQljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSk7CisJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2xvY2sgPSAwOworCisJY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpOworCWNvbnRyb2xfcmVnICY9IEdNTF9DTE9DS19DTEVBUl9NQVNLICYgR01MX1NQRElGX1JBVEVfQ0xFQVJfTUFTSzsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgOTYwMDA6CisJCWNsb2NrID0gR01MXzk2S0haOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQljbG9jayA9IEdNTF84OEtIWjsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xvY2sgPSBHTUxfNDhLSFogfCBHTUxfU1BESUZfU0FNUExFX1JBVEUxOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCQljbG9jayA9IEdNTF80NEtIWjsKKwkJLyogUHJvZmVzc2lvbmFsIG1vZGUgPyAqLworCQlpZiAoY29udHJvbF9yZWcgJiBHTUxfU1BESUZfUFJPX01PREUpCisJCQljbG9jayB8PSBHTUxfU1BESUZfU0FNUExFX1JBVEUwOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQljbG9jayA9IEdNTF8zMktIWiB8IEdNTF9TUERJRl9TQU1QTEVfUkFURTAgfAorCQkJR01MX1NQRElGX1NBTVBMRV9SQVRFMTsKKwkJYnJlYWs7CisJY2FzZSAyMjA1MDoKKwkJY2xvY2sgPSBHTUxfMjJLSFo7CisJCWJyZWFrOworCWNhc2UgMTYwMDA6CisJCWNsb2NrID0gR01MXzE2S0haOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCQljbG9jayA9IEdNTF8xMUtIWjsKKwkJYnJlYWs7CisJY2FzZSA4MDAwOgorCQljbG9jayA9IEdNTF84S0haOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGludmFsaWQhXG4iLCByYXRlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnRyb2xfcmVnIHw9IGNsb2NrOworCisJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOwkvKiBpZ25vcmVkIGJ5IHRoZSBEU1AgKi8KKwljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlOiAlZCBjbG9jayAlZFxuIiwgcmF0ZSwgY2xvY2spKTsKKworCXJldHVybiB3cml0ZV9jb250cm9sX3JlZyhjaGlwLCBjb250cm9sX3JlZywgRkFMU0UpOworfQorCisKKworc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKQoreworCXUzMiBjb250cm9sX3JlZywgY2xvY2tzX2Zyb21fZHNwOworCisJREVfQUNUKCgic2V0X2lucHV0X2Nsb2NrOlxuIikpOworCisJLyogTWFzayBvZmYgdGhlIGNsb2NrIHNlbGVjdCBiaXRzICovCisJY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpICYKKwkJR01MX0NMT0NLX0NMRUFSX01BU0s7CisJY2xvY2tzX2Zyb21fZHNwID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5zdGF0dXNfY2xvY2tzKTsKKworCXN3aXRjaCAoY2xvY2spIHsKKwljYXNlIEVDSE9fQ0xPQ0tfSU5URVJOQUw6CisJCURFX0FDVCgoIlNldCBHaW5hMjQgY2xvY2sgdG8gSU5URVJOQUxcbiIpKTsKKwkJY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOworCQlyZXR1cm4gc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKTsKKwljYXNlIEVDSE9fQ0xPQ0tfU1BESUY6CisJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJREVfQUNUKCgiU2V0IEdpbmEyNCBjbG9jayB0byBTUERJRlxuIikpOworCQljb250cm9sX3JlZyB8PSBHTUxfU1BESUZfQ0xPQ0s7CisJCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTUxfQ0xPQ0tfREVURUNUX0JJVF9TUERJRjk2KQorCQkJY29udHJvbF9yZWcgfD0gR01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQllbHNlCisJCQljb250cm9sX3JlZyAmPSB+R01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQlicmVhazsKKwljYXNlIEVDSE9fQ0xPQ0tfQURBVDoKKwkJaWYgKGNoaXAtPmRpZ2l0YWxfbW9kZSAhPSBESUdJVEFMX01PREVfQURBVCkKKwkJCXJldHVybiAtRUFHQUlOOworCQlERV9BQ1QoKCJTZXQgR2luYTI0IGNsb2NrIHRvIEFEQVRcbiIpKTsKKwkJY29udHJvbF9yZWcgfD0gR01MX0FEQVRfQ0xPQ0s7CisJCWNvbnRyb2xfcmVnICY9IH5HTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCWJyZWFrOworCWNhc2UgRUNIT19DTE9DS19FU1lOQzoKKwkJREVfQUNUKCgiU2V0IEdpbmEyNCBjbG9jayB0byBFU1lOQ1xuIikpOworCQljb250cm9sX3JlZyB8PSBHTUxfRVNZTkNfQ0xPQ0s7CisJCWNvbnRyb2xfcmVnICY9IH5HTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCWJyZWFrOworCWNhc2UgRUNIT19DTE9DS19FU1lOQzk2OgorCQlERV9BQ1QoKCJTZXQgR2luYTI0IGNsb2NrIHRvIEVTWU5DOTZcbiIpKTsKKwkJY29udHJvbF9yZWcgfD0gR01MX0VTWU5DX0NMT0NLIHwgR01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERV9BQ1QoKCJJbnB1dCBjbG9jayAweCV4IG5vdCBzdXBwb3J0ZWQgZm9yIEdpbmEyNFxuIiwgY2xvY2spKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hpcC0+aW5wdXRfY2xvY2sgPSBjbG9jazsKKwlyZXR1cm4gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsIFRSVUUpOworfQorCisKKworc3RhdGljIGludCBkc3Bfc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKQoreworCXUzMiBjb250cm9sX3JlZzsKKwlpbnQgZXJyLCBpbmNvbXBhdGlibGVfY2xvY2s7CisKKwkvKiBTZXQgY2xvY2sgdG8gImludGVybmFsIiBpZiBpdCdzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5ldyBtb2RlICovCisJaW5jb21wYXRpYmxlX2Nsb2NrID0gRkFMU0U7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTDoKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9DRFJPTToKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9SQ0E6CisJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX0FEQVQpCisJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9BREFUOgorCQlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgPT0gRUNIT19DTE9DS19TUERJRikKKwkJCWluY29tcGF0aWJsZV9jbG9jayA9IFRSVUU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFX0FDVCgoIkRpZ2l0YWwgbW9kZSBub3Qgc3VwcG9ydGVkOiAlZFxuIiwgbW9kZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKworCWlmIChpbmNvbXBhdGlibGVfY2xvY2spIHsJLyogU3dpdGNoIHRvIDQ4S0h6LCBpbnRlcm5hbCAqLworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IDQ4MDAwOworCQlzZXRfaW5wdXRfY2xvY2soY2hpcCwgRUNIT19DTE9DS19JTlRFUk5BTCk7CisJfQorCisJLyogQ2xlYXIgdGhlIGN1cnJlbnQgZGlnaXRhbCBtb2RlICovCisJY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpOworCWNvbnRyb2xfcmVnICY9IEdNTF9ESUdJVEFMX01PREVfQ0xFQVJfTUFTSzsKKworCS8qIFR3ZWFrIHRoZSBjb250cm9sIHJlZyAqLworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUw6CisJCWNvbnRyb2xfcmVnIHw9IEdNTF9TUERJRl9PUFRJQ0FMX01PREU7CisJCWJyZWFrOworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX0NEUk9NOgorCQkvKiAnMzYxIEdpbmEyNCBjYXJkcyBkbyBub3QgaGF2ZSB0aGUgUy9QRElGIENELVJPTSBtb2RlICovCisJCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzAxKQorCQkJY29udHJvbF9yZWcgfD0gR01MX1NQRElGX0NEUk9NX01PREU7CisJCWJyZWFrOworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX1JDQToKKwkJLyogR01MX1NQRElGX09QVElDQUxfTU9ERSBiaXQgY2xlYXJlZCAqLworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9BREFUOgorCQljb250cm9sX3JlZyB8PSBHTUxfQURBVF9NT0RFOworCQljb250cm9sX3JlZyAmPSB+R01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQlicmVhazsKKwl9CisKKwllcnIgPSB3cml0ZV9jb250cm9sX3JlZyhjaGlwLCBjb250cm9sX3JlZywgVFJVRSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5kaWdpdGFsX21vZGUgPSBtb2RlOworCisJREVfQUNUKCgic2V0X2RpZ2l0YWxfbW9kZSB0byAlZFxuIiwgY2hpcC0+ZGlnaXRhbF9tb2RlKSk7CisJcmV0dXJuIGluY29tcGF0aWJsZV9jbG9jazsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDI0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkluZGlnbyIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorCisvKiBQaXBlIGluZGV4ZXMgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCS8qIDggKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9PVVQJOAkvKiAwICovCisjZGVmaW5lIFBYX0FOQUxPR19JTgk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9JTgk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQk4CisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTIJLyogMCAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JMgkvKiAwICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JMgkvKiAwICovCisjZGVmaW5lIEJYX05VTQkJMgorCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKKyNkZWZpbmUgRldfMzYxX0xPQURFUgkwCisjZGVmaW5lIEZXX0lORElHT19EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwOTAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSAJU05EUlZfUENNX1JBVEVfMzIwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJU05EUlZfUENNX1JBVEVfOTYwMDAsCisJLnJhdGVfbWluID0gMzIwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNjIxNDQsCisJLnBlcmlvZF9ieXRlc19taW4gPSAzMiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEzMTA3MiwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDIyMCwKK307CisKKyNpbmNsdWRlICJpbmRpZ29fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWM3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYwpAQCAtMCwwICsxLDE3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsIHUxNiBwaXBlLAorCQkJICAgaW50IGdhaW4pOworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gSW5kaWdvXG4iKSk7CisJc25kX2Fzc2VydCgoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSA9PSBJTkRJR08sIHJldHVybiAtRU5PREVWKTsKKworCWlmICgoZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApKSkgeworCQlERV9JTklUKCgiaW5pdF9odyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIERTUCBjb21tIHBhZ2VcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoKGVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKKworCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKKwl0byB0aGUgc3RlcmVvIG91dHB1dCAqLworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7CisJZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQorCisKKworc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworfQorCisKKworLyogVGhlIEluZGlnbyBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNvbnRyb2xfcmVnOworCisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSA5NjAwMDoKKwkJY29udHJvbF9yZWcgPSBNSUFfOTYwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWNvbnRyb2xfcmVnID0gTUlBXzg4MjAwOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQljb250cm9sX3JlZyA9IE1JQV80ODAwMDsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJY29udHJvbF9yZWcgPSBNSUFfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCWNvbnRyb2xfcmVnID0gTUlBXzMyMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGludmFsaWQhXG4iLCByYXRlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNldCB0aGUgY29udHJvbCByZWdpc3RlciBpZiBpdCBoYXMgY2hhbmdlZCAqLworCWlmIChjb250cm9sX3JlZyAhPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpKSB7CisJCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJCXJldHVybiAtRUlPOworCisJCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMihyYXRlKTsJLyogaWdub3JlZCBieSB0aGUgRFNQICovCisJCWNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlciA9IGNwdV90b19sZTMyKGNvbnRyb2xfcmVnKTsKKwkJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCisJCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwkJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfQ0xPQ0tTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHJvdXRlcyB0aGUgc291bmQgZnJvbSBhIHZpcnR1YWwgY2hhbm5lbCB0byBhIHJlYWwgb3V0cHV0ICovCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKQoreworCWludCBpbmRleDsKKworCXNuZF9hc3NlcnQocGlwZSA8IG51bV9waXBlc19vdXQoY2hpcCkgJiYKKwkJICAgb3V0cHV0IDwgbnVtX2J1c3Nlc19vdXQoY2hpcCksIHJldHVybiAtRUlOVkFMKTsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT52bWl4ZXJfZ2FpbltvdXRwdXRdW3BpcGVdID0gZ2FpbjsKKwlpbmRleCA9IG91dHB1dCAqIG51bV9waXBlc19vdXQoY2hpcCkgKyBwaXBlOworCWNoaXAtPmNvbW1fcGFnZS0+dm1peGVyW2luZGV4XSA9IGdhaW47CisKKwlERV9BQ1QoKCJzZXRfdm1peGVyX2dhaW46IHBpcGUgJWQsIG91dCAlZCA9ICVkXG4iLCBwaXBlLCBvdXRwdXQsIGdhaW4pKTsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRlbGwgdGhlIERTUCB0byByZWFkIGFuZCB1cGRhdGUgdmlydHVhbCBtaXhlciBsZXZlbHMgaW4gY29tbSBwYWdlLiAqLworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19TRVRfVk1JWEVSX0dBSU4pOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkN2ZmMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2RlZmluZSBJTkRJR09fRkFNSUxZCisjZGVmaW5lIEVDSE9DQVJEX0lORElHT19ESgorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJJbmRpZ28gREoiCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVVBFUl9JTlRFUkxFQVZFCisjZGVmaW5lIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAwICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JOAkvKiAwICovCisjZGVmaW5lIFBYX05VTQkJOAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogNCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0RKX0RTUAkxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAibG9hZGVyX2RzcC5mdyJ9LAorCXswLCAiaW5kaWdvX2RqX2RzcC5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBCMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESiovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzk2MDAwLAorCS5yYXRlX21pbiA9IDMyMDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA0LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCit9OworCisjaW5jbHVkZSAiaW5kaWdvZGpfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBlMTUwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwpAQCAtMCwwICsxLDE3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsIHUxNiBwaXBlLAorCQkJICAgaW50IGdhaW4pOworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gSW5kaWdvIERKXG4iKSk7CisJc25kX2Fzc2VydCgoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSA9PSBJTkRJR09fREosIHJldHVybiAtRU5PREVWKTsKKworCWlmICgoZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApKSkgeworCQlERV9JTklUKCgiaW5pdF9odyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIERTUCBjb21tIHBhZ2VcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19ESl9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoKGVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKKworCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiB2Y2hhbm5lbHMgMC0zIGFuZAorCXZjaGFubmVscyA0LTcgYXJlIHJvdXRlZCB0byByZWFsIGNoYW5uZWxzIDAtNCAqLworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDIsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCAzLCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7CisJZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQorCisKKworc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworfQorCisKKworLyogVGhlIEluZGlnb0RKIGhhcyBubyBBU0lDLiBKdXN0IGRvIG5vdGhpbmcgKi8KK3N0YXRpYyBpbnQgbG9hZF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKK3sKKwl1MzIgY29udHJvbF9yZWc7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDk2MDAwOgorCQljb250cm9sX3JlZyA9IE1JQV85NjAwMDsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJY29udHJvbF9yZWcgPSBNSUFfODgyMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNvbnRyb2xfcmVnID0gTUlBXzQ4MDAwOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCQljb250cm9sX3JlZyA9IE1JQV80NDEwMDsKKwkJYnJlYWs7CisJY2FzZSAzMjAwMDoKKwkJY29udHJvbF9yZWcgPSBNSUFfMzIwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFX0FDVCgoInNldF9zYW1wbGVfcmF0ZTogJWQgaW52YWxpZCFcbiIsIHJhdGUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIGlmIGl0IGhhcyBjaGFuZ2VkICovCisJaWYgKGNvbnRyb2xfcmVnICE9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlcikpIHsKKwkJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOwkvKiBpZ25vcmVkIGJ5IHRoZSBEU1AgKi8KKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9DTE9DS1MpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRoaXMgZnVuY3Rpb24gcm91dGVzIHRoZSBzb3VuZCBmcm9tIGEgdmlydHVhbCBjaGFubmVsIHRvIGEgcmVhbCBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsIHUxNiBwaXBlLAorCQkJICAgaW50IGdhaW4pCit7CisJaW50IGluZGV4OworCisJc25kX2Fzc2VydChwaXBlIDwgbnVtX3BpcGVzX291dChjaGlwKSAmJgorCQkgICBvdXRwdXQgPCBudW1fYnVzc2VzX291dChjaGlwKSwgcmV0dXJuIC1FSU5WQUwpOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPnZtaXhlcl9nYWluW291dHB1dF1bcGlwZV0gPSBnYWluOworCWluZGV4ID0gb3V0cHV0ICogbnVtX3BpcGVzX291dChjaGlwKSArIHBpcGU7CisJY2hpcC0+Y29tbV9wYWdlLT52bWl4ZXJbaW5kZXhdID0gZ2FpbjsKKworCURFX0FDVCgoInNldF92bWl4ZXJfZ2FpbjogcGlwZSAlZCwgb3V0ICVkID0gJWRcbiIsIHBpcGUsIG91dHB1dCwgZ2FpbikpOworCXJldHVybiAwOworfQorCisKKworLyogVGVsbCB0aGUgRFNQIHRvIHJlYWQgYW5kIHVwZGF0ZSB2aXJ0dWFsIG1peGVyIGxldmVscyBpbiBjb21tIHBhZ2UuICovCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1NFVF9WTUlYRVJfR0FJTik7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc4OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIElORElHT19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfSU5ESUdPX0lPCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkluZGlnbyBJTyIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX01PTklUT1IKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorCisvKiBQaXBlIGluZGV4ZXMgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCS8qIDggKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9PVVQJOAkvKiAwICovCisjZGVmaW5lIFBYX0FOQUxPR19JTgk4CS8qIDIgKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9JTgkxMAkvKiAwICovCisjZGVmaW5lIFBYX05VTQkJMTAKKworLyogQnVzIGluZGV4ZXMgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX09VVAkwCS8qIDIgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJMgkvKiAwICovCisjZGVmaW5lIEJYX0FOQUxPR19JTgkyCS8qIDIgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQk0CisKKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJlY2hvYXVkaW8uaCIKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0lORElHT19JT19EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19pb19kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwQTAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU8qLworCXswLH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBwY21faGFyZHdhcmVfc2tlbCA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCwKKwkuZm9ybWF0cyA9CVNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0JFLAorCS5yYXRlcyA9IAlTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8CisJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQlTTkRSVl9QQ01fUkFURV84ODIwMCB8CisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkucmF0ZV9taW4gPSAzMjAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorfTsKKworI2luY2x1ZGUgImluZGlnb2lvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKKwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhZDEzZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIENvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA0CisgICBBbGwgcmlnaHRzIHJlc2VydmVkCisgICB3d3cuZWNob2F1ZGlvLmNvbQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorCisgICBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7CisgICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgIE1BICAwMjExMS0xMzA3LCBVU0EuCisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKTsKK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBJT1xuIikpOworCXNuZF9hc3NlcnQoKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgPT0gSU5ESUdPX0lPLCByZXR1cm4gLUVOT0RFVik7CisKKwlpZiAoKGVyciA9IGluaXRfZHNwX2NvbW1fcGFnZShjaGlwKSkpIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9fRFNQXTsKKwkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKKwkgICB3b3JrcyBPSyAqLworCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9IEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworCisJaWYgKChlcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogYWxsIHZjaGFubmVscyBhcmUgcm91dGVkCisJdG8gdGhlIHN0ZXJlbyBvdXRwdXQgKi8KKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNiwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDcsIDApOworCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKK30KKworCisKKy8qIFRoZSBJbmRpZ29JTyBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSk7CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0NMT0NLUyk7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIHJvdXRlcyB0aGUgc291bmQgZnJvbSBhIHZpcnR1YWwgY2hhbm5lbCB0byBhIHJlYWwgb3V0cHV0ICovCitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKQoreworCWludCBpbmRleDsKKworCXNuZF9hc3NlcnQocGlwZSA8IG51bV9waXBlc19vdXQoY2hpcCkgJiYKKwkJICAgb3V0cHV0IDwgbnVtX2J1c3Nlc19vdXQoY2hpcCksIHJldHVybiAtRUlOVkFMKTsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT52bWl4ZXJfZ2FpbltvdXRwdXRdW3BpcGVdID0gZ2FpbjsKKwlpbmRleCA9IG91dHB1dCAqIG51bV9waXBlc19vdXQoY2hpcCkgKyBwaXBlOworCWNoaXAtPmNvbW1fcGFnZS0+dm1peGVyW2luZGV4XSA9IGdhaW47CisKKwlERV9BQ1QoKCJzZXRfdm1peGVyX2dhaW46IHBpcGUgJWQsIG91dCAlZCA9ICVkXG4iLCBwaXBlLCBvdXRwdXQsIGdhaW4pKTsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRlbGwgdGhlIERTUCB0byByZWFkIGFuZCB1cGRhdGUgdmlydHVhbCBtaXhlciBsZXZlbHMgaW4gY29tbSBwYWdlLiAqLworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19TRVRfVk1JWEVSX0dBSU4pOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2RlZmluZSBFQ0hPR0FMU19GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfTEFZTEEyMAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJMYXlsYTIwIgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfQVNJQworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfT1VUUFVUX05PTUlOQUxfTEVWRUwKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisjZGVmaW5lIEVDSE9DQVJEX0hBU19BREFUCUZBTFNFCisjZGVmaW5lIEVDSE9DQVJEX0hBU19PVVRQVVRfQ0xPQ0tfU1dJVENICisjZGVmaW5lIEVDSE9DQVJEX0hBU19NSURJCisKKy8qIFBpcGUgaW5kZXhlcyAqLworI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogMTAgKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9PVVQJMTAJLyogIDIgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX0lOCTEyCS8qICA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JMjAJLyogIDIgKi8KKyNkZWZpbmUgUFhfTlVNCQkyMgorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogMTAgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJMTAJLyogIDIgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTEyCS8qICA4ICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JMjAJLyogIDIgKi8KKyNkZWZpbmUgQlhfTlVNCQkyMgorCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCisjZGVmaW5lIEZXX0xBWUxBMjBfRFNQCTAKKyNkZWZpbmUgRldfTEFZTEEyMF9BU0lDCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsYXlsYTIwX2RzcC5mdyJ9LAorCXswLCAibGF5bGEyMF9hc2ljLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDMwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIExheWxhMjAgcmV2LjAgKi8KKwl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDMxLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIExheWxhMjAgcmV2LjEgKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5yYXRlX21heCA9IDUwMDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSAxMCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorCS8qIE9uZSBwYWdlICg0aykgY29udGFpbnMgNTEyIGluc3RydWN0aW9ucy4gSSBkb24ndCBrbm93IGlmIHRoZSBodworCXN1cHBvcnRzIGxpc3RzIGxvbmdlciB0aGFuIHRoaXMuIEluIHRoaXMgY2FzZSBwZXJpb2RzX21heD0yMjAgaXMgYQorCXNhZmUgbGltaXQgdG8gbWFrZSBzdXJlIHRoZSBsaXN0IG5ldmVyIGV4Y2VlZHMgNTEyIGluc3RydWN0aW9ucy4gKi8KK307CisKKyNpbmNsdWRlICJsYXlsYTIwX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKKyNpbmNsdWRlICJtaWRpLmMiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwYzlhNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAgIHd3dy5lY2hvYXVkaW8uY29tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCisKKyAgIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKKyAgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgcmVhZF9kc3Aoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyICpkYXRhKTsKK3N0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgdXBkYXRlX2ZsYWdzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gTGF5bGEyMFxuIikpOworCXNuZF9hc3NlcnQoKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgPT0gTEFZTEEyMCwgcmV0dXJuIC1FTk9ERVYpOworCisJaWYgKChlcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCkpKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5oYXNfbWlkaSA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjBfRFNQXTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9CisJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAorCQlFQ0hPX0NMT0NLX0JJVF9XT1JEIHwgRUNIT19DTE9DS19CSVRfU1VQRVI7CisJY2hpcC0+b3V0cHV0X2Nsb2NrX3R5cGVzID0KKwkJRUNIT19DTE9DS19CSVRfV09SRCB8IEVDSE9fQ0xPQ0tfQklUX1NVUEVSOworCisJaWYgKChlcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CisKKwkvKiBNYXAgdGhlIERTUCBjbG9jayBkZXRlY3QgYml0cyB0byB0aGUgZ2VuZXJpYyBkcml2ZXIgY2xvY2sgZGV0ZWN0IGJpdHMgKi8KKwljbG9ja3NfZnJvbV9kc3AgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPnN0YXR1c19jbG9ja3MpOworCisJY2xvY2tfYml0cyA9IEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworCisJaWYgKGNsb2Nrc19mcm9tX2RzcCAmIEdMRE1fQ0xPQ0tfREVURUNUX0JJVF9TUERJRikKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9TUERJRjsKKworCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTERNX0NMT0NLX0RFVEVDVF9CSVRfV09SRCkgeworCQlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR0xETV9DTE9DS19ERVRFQ1RfQklUX1NVUEVSKQorCQkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9TVVBFUjsKKwkJZWxzZQorCQkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9XT1JEOworCX0KKworCXJldHVybiBjbG9ja19iaXRzOworfQorCisKKworLyogQVNJQyBzdGF0dXMgY2hlY2sgLSBzb21lIGNhcmRzIGhhdmUgb25lIG9yIHR3byBBU0lDcyB0aGF0IG5lZWQgdG8gYmUKK2xvYWRlZC4gIE9uY2UgdGhhdCBsb2FkIGlzIGNvbXBsZXRlLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzZWUgaWYKK3RoZSBsb2FkIHdhcyBzdWNjZXNzZnVsLgorSWYgdGhpcyBsb2FkIGZhaWxzLCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgdGhlIGhhcmR3YXJlIGlzCitkZWZlY3RpdmUgLSB0aGUgZXh0ZXJuYWwgYm94IG1heSBiZSBkaXNjb25uZWN0ZWQgb3IgdHVybmVkIG9mZi4KK1RoaXMgcm91dGluZSBzb21ldGltZXMgZmFpbHMgZm9yIExheWxhMjA7IGZvciBMYXlsYTIwLCB0aGUgbG9vcCBydW5zCis1IHRpbWVzIGFuZCBzdWNjZWVkcyBpZiBpdCB3aW5zIG9uIHRocmVlIG9mIHRoZSBsb29wcy4gKi8KK3N0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwl1MzIgYXNpY19zdGF0dXM7CisJaW50IGdvb2RjbnQsIGk7CisKKwljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOworCWZvciAoaSA9IGdvb2RjbnQgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19URVNUX0FTSUMpOworCisJCS8qIFRoZSBEU1Agd2lsbCByZXR1cm4gYSB2YWx1ZSB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdAorCQkgICB0aGUgQVNJQyBpcyBjdXJyZW50bHkgbG9hZGVkICovCisJCWlmIChyZWFkX2RzcChjaGlwLCAmYXNpY19zdGF0dXMpIDwgMCkgeworCQkJREVfQUNUKCgiY2hlY2tfYXNpY19zdGF0dXM6IGZhaWxlZCBvbiByZWFkX2RzcFxuIikpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoYXNpY19zdGF0dXMgPT0gQVNJQ19BTFJFQURZX0xPQURFRCkgeworCQkJaWYgKCsrZ29vZGNudCA9PSAzKSB7CisJCQkJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXJldHVybiAtRUlPOworfQorCisKKworLyogTGF5bGEyMCBoYXMgYW4gQVNJQyBpbiB0aGUgZXh0ZXJuYWwgYm94ICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWludCBlcnI7CisKKwlpZiAoY2hpcC0+YXNpY19sb2FkZWQpCisJCXJldHVybiAwOworCisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0xBWUxBX0FTSUMsCisJCQkJJmNhcmRfZndbRldfTEFZTEEyMF9BU0lDXSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBDaGVjayBpZiBBU0lDIGlzIGFsaXZlIGFuZCB3ZWxsLiAqLworCXJldHVybiBjaGVja19hc2ljX3N0YXR1cyhjaGlwKTsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiByYXRlKQoreworCXNuZF9hc3NlcnQocmF0ZSA+PSA4MDAwICYmIHJhdGUgPD0gNTAwMDAsIHJldHVybiAtRUlOVkFMKTsKKworCS8qIE9ubHkgc2V0IHRoZSBjbG9jayBmb3IgaW50ZXJuYWwgbW9kZS4gRG8gbm90IHJldHVybiBmYWlsdXJlLAorCSAgIHNpbXBseSB0cmVhdCBpdCBhcyBhIG5vbi1ldmVudC4gKi8KKwlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgIT0gRUNIT19DTE9DS19JTlRFUk5BTCkgeworCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6IENhbm5vdCBzZXQgc2FtcGxlIHJhdGUgLSAiCisJCQkiY2xvY2sgbm90IHNldCB0byBDTEtfQ0xPQ0tJTklOVEVSTkFMXG4iKSk7CisJCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMihyYXRlKTsKKwkJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlKCVkKVxuIiwgcmF0ZSkpOworCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSk7CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX0xBWUxBX1NBTVBMRV9SQVRFKTsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9ja19zb3VyY2UpCit7CisJdTE2IGNsb2NrOworCXUzMiByYXRlOworCisJREVfQUNUKCgic2V0X2lucHV0X2Nsb2NrOlxuIikpOworCXJhdGUgPSAwOworCXN3aXRjaCAoY2xvY2tfc291cmNlKSB7CisJY2FzZSBFQ0hPX0NMT0NLX0lOVEVSTkFMOgorCQlERV9BQ1QoKCJTZXQgTGF5bGEyMCBjbG9jayB0byBJTlRFUk5BTFxuIikpOworCQlyYXRlID0gY2hpcC0+c2FtcGxlX3JhdGU7CisJCWNsb2NrID0gTEFZTEEyMF9DTE9DS19JTlRFUk5BTDsKKwkJYnJlYWs7CisJY2FzZSBFQ0hPX0NMT0NLX1NQRElGOgorCQlERV9BQ1QoKCJTZXQgTGF5bGEyMCBjbG9jayB0byBTUERJRlxuIikpOworCQljbG9jayA9IExBWUxBMjBfQ0xPQ0tfU1BESUY7CisJCWJyZWFrOworCWNhc2UgRUNIT19DTE9DS19XT1JEOgorCQlERV9BQ1QoKCJTZXQgTGF5bGEyMCBjbG9jayB0byBXT1JEXG4iKSk7CisJCWNsb2NrID0gTEFZTEEyMF9DTE9DS19XT1JEOworCQlicmVhazsKKwljYXNlIEVDSE9fQ0xPQ0tfU1VQRVI6CisJCURFX0FDVCgoIlNldCBMYXlsYTIwIGNsb2NrIHRvIFNVUEVSXG4iKSk7CisJCWNsb2NrID0gTEFZTEEyMF9DTE9DS19TVVBFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVfQUNUKCgiSW5wdXQgY2xvY2sgMHgleCBub3Qgc3VwcG9ydGVkIGZvciBMYXlsYTI0XG4iLAorCQkJY2xvY2tfc291cmNlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGlwLT5pbnB1dF9jbG9jayA9IGNsb2NrX3NvdXJjZTsKKworCWNoaXAtPmNvbW1fcGFnZS0+aW5wdXRfY2xvY2sgPSBjcHVfdG9fbGUxNihjbG9jayk7CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfQ0xPQ0tTKTsKKworCWlmIChyYXRlKQorCQlzZXRfc2FtcGxlX3JhdGUoY2hpcCwgcmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X291dHB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spCit7CisJREVfQUNUKCgic2V0X291dHB1dF9jbG9jazogJWRcbiIsIGNsb2NrKSk7CisJc3dpdGNoIChjbG9jaykgeworCWNhc2UgRUNIT19DTE9DS19TVVBFUjoKKwkJY2xvY2sgPSBMQVlMQTIwX09VVFBVVF9DTE9DS19TVVBFUjsKKwkJYnJlYWs7CisJY2FzZSBFQ0hPX0NMT0NLX1dPUkQ6CisJCWNsb2NrID0gTEFZTEEyMF9PVVRQVVRfQ0xPQ0tfV09SRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVfQUNUKCgic2V0X291dHB1dF9jbG9jayB3cm9uZyBjbG9ja1xuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+Y29tbV9wYWdlLT5vdXRwdXRfY2xvY2sgPSBjcHVfdG9fbGUxNihjbG9jayk7CisJY2hpcC0+b3V0cHV0X2Nsb2NrID0gY2xvY2s7CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0NMT0NLUyk7Cit9CisKKworCisvKiBTZXQgaW5wdXQgYnVzIGdhaW4gKG9uZSB1bml0IGlzIDAuNWRCICEpICovCitzdGF0aWMgaW50IHNldF9pbnB1dF9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBpbnB1dCwgaW50IGdhaW4pCit7CisJc25kX2Fzc2VydChpbnB1dCA8IG51bV9idXNzZXNfaW4oY2hpcCksIHJldHVybiAtRUlOVkFMKTsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT5pbnB1dF9nYWluW2lucHV0XSA9IGdhaW47CisJZ2FpbiArPSBHTDIwX0lOUFVUX0dBSU5fTUFHSUNfTlVNQkVSOworCWNoaXAtPmNvbW1fcGFnZS0+bGluZV9pbl9sZXZlbFtpbnB1dF0gPSBnYWluOworCXJldHVybiAwOworfQorCisKKworLyogVGVsbCB0aGUgRFNQIHRvIHJlcmVhZCB0aGUgZmxhZ3MgZnJvbSB0aGUgY29tbSBwYWdlICovCitzdGF0aWMgaW50IHVwZGF0ZV9mbGFncyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0ZMQUdTKTsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpCit7CisJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOworCWlmIChwcm9mKQorCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJZWxzZQorCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9CisJCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CisJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1ODFmZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIEVDSE8yNF9GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfTEFZTEEyNAorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJMYXlsYTI0IgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfQVNJQworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfSU5QVVRfTk9NSU5BTF9MRVZFTAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfT1VUUFVUX05PTUlOQUxfTEVWRUwKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU8KKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfSU5fQVVUT01VVEUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0RJR0lUQUxfTU9ERV9TV0lUQ0gKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisjZGVmaW5lIEVDSE9DQVJEX0hBU19BREFUCTYKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX01JREkKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogOCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JMTYJLyogOCAqLworI2RlZmluZSBQWF9ESUdJVEFMX0lOCTI0CS8qIDggKi8KKyNkZWZpbmUgUFhfTlVNCQkzMgorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogOCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk4CS8qIDggKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTE2CS8qIDggKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgkyNAkvKiA4ICovCisjZGVmaW5lIEJYX05VTQkJMzIKKworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJlY2hvYXVkaW8uaCIKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0xBWUxBMjRfRFNQCQkxCisjZGVmaW5lIEZXX0xBWUxBMjRfMV9BU0lDCTIKKyNkZWZpbmUgRldfTEFZTEEyNF8yQV9BU0lDCTMKKyNkZWZpbmUgRldfTEFZTEEyNF8yU19BU0lDCTQKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJsYXlsYTI0X2RzcC5mdyJ9LAorCXswLCAibGF5bGEyNF8xX2FzaWMuZncifSwKKwl7MCwgImxheWxhMjRfMkFfYXNpYy5mdyJ9LAorCXswLCAibGF5bGEyNF8yU19hc2ljLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDYwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIExheWxhMjQgcmV2LjAgKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPQlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLnJhdGVfbWF4ID0gMTAwMDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCisJLyogT25lIHBhZ2UgKDRrKSBjb250YWlucyA1MTIgaW5zdHJ1Y3Rpb25zLiBJIGRvbid0IGtub3cgaWYgdGhlIGh3CisJc3VwcG9ydHMgbGlzdHMgbG9uZ2VyIHRoYW4gdGhpcy4gSW4gdGhpcyBjYXNlIHBlcmlvZHNfbWF4PTIyMCBpcyBhCisJc2FmZSBsaW1pdCB0byBtYWtlIHN1cmUgdGhlIGxpc3QgbmV2ZXIgZXhjZWVkcyA1MTIgaW5zdHJ1Y3Rpb25zLiAqLworfTsKKworCisjaW5jbHVkZSAibGF5bGEyNF9kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW9fZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2dtbC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgorI2luY2x1ZGUgIm1pZGkuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM1YjYzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jCkBAIC0wLDAgKzEsMzk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgIE1BICAwMjExMS0xMzA3LCBVU0EuCisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitzdGF0aWMgaW50IHdyaXRlX2NvbnRyb2xfcmVnKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiB2YWx1ZSwgY2hhciBmb3JjZSk7CitzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spOworc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7CitzdGF0aWMgaW50IHNldF9kaWdpdGFsX21vZGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggbW9kZSk7CitzdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYyk7CitzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gTGF5bGEyNFxuIikpOworCXNuZF9hc3NlcnQoKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgPT0gTEFZTEEyNCwgcmV0dXJuIC1FTk9ERVYpOworCisJaWYgKChlcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCkpKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5oYXNfbWlkaSA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfRFNQXTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9CisJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAorCQlFQ0hPX0NMT0NLX0JJVF9XT1JEIHwgRUNIT19DTE9DS19CSVRfQURBVDsKKwljaGlwLT5kaWdpdGFsX21vZGVzID0KKwkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAorCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUwgfAorCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX0FEQVQ7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0JCURJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+ZGlnaXRhbF9pbl9hdXRvbXV0ZSA9IFRSVUU7CisKKwlpZiAoKGVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCkpIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKKworCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKKwlzbmRfYXNzZXJ0KGVyciA+PSAwLCByZXR1cm4gZXJyKTsKKwllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CisKKworCitzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOworCisJLyogTWFwIHRoZSBEU1AgY2xvY2sgZGV0ZWN0IGJpdHMgdG8gdGhlIGdlbmVyaWMgZHJpdmVyIGNsb2NrIGRldGVjdCBiaXRzICovCisJY2xvY2tzX2Zyb21fZHNwID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5zdGF0dXNfY2xvY2tzKTsKKworCWNsb2NrX2JpdHMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTUxfQ0xPQ0tfREVURUNUX0JJVF9TUERJRikKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9TUERJRjsKKworCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTUxfQ0xPQ0tfREVURUNUX0JJVF9BREFUKQorCQljbG9ja19iaXRzIHw9IEVDSE9fQ0xPQ0tfQklUX0FEQVQ7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR01MX0NMT0NLX0RFVEVDVF9CSVRfV09SRCkKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9XT1JEOworCisJcmV0dXJuIGNsb2NrX2JpdHM7Cit9CisKKworCisvKiBMYXlsYTI0IGhhcyBhbiBBU0lDIG9uIHRoZSBQQ0kgY2FyZCBhbmQgYW5vdGhlciBBU0lDIGluIHRoZSBleHRlcm5hbCBib3g7Citib3RoIG5lZWQgdG8gYmUgbG9hZGVkLiAqLworc3RhdGljIGludCBsb2FkX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGNoaXAtPmFzaWNfbG9hZGVkKQorCQlyZXR1cm4gMTsKKworCURFX0lOSVQoKCJsb2FkX2FzaWNcbiIpKTsKKworCS8qIEdpdmUgdGhlIERTUCBhIGZldyBtaWxsaXNlY29uZHMgdG8gc2V0dGxlIGRvd24gKi8KKwltZGVsYXkoMTApOworCisJLyogTG9hZCB0aGUgQVNJQyBmb3IgdGhlIFBDSSBjYXJkICovCisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0xBWUxBMjRfUENJX0NBUkRfQVNJQywKKwkJCQkmY2FyZF9md1tGV19MQVlMQTI0XzFfQVNJQ10pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJY2hpcC0+YXNpY19jb2RlID0gJmNhcmRfZndbRldfTEFZTEEyNF8yU19BU0lDXTsKKworCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBhIGxpdHRsZSB0aW1lIHRvIHNldCB1cCAqLworCW1kZWxheSgxMCk7CisKKwkvKiBEbyB0aGUgZXh0ZXJuYWwgb25lICovCisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0xBWUxBMjRfRVhURVJOQUxfQVNJQywKKwkJCQkmY2FyZF9md1tGV19MQVlMQTI0XzJTX0FTSUNdKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIEZBTFNFOworCisJLyogTm93IGdpdmUgdGhlIGV4dGVybmFsIEFTSUMgYSBsaXR0bGUgdGltZSB0byBzZXQgdXAgKi8KKwltZGVsYXkoMTApOworCisJLyogU2VlIGlmIGl0IHdvcmtlZCAqLworCWVyciA9IGNoZWNrX2FzaWNfc3RhdHVzKGNoaXApOworCisJLyogU2V0IHVwIHRoZSBjb250cm9sIHJlZ2lzdGVyIGlmIHRoZSBsb2FkIHN1Y2NlZWRlZCAtCisJICAgNDgga0h6LCBpbnRlcm5hbCBjbG9jaywgUy9QRElGIFJDQSBtb2RlICovCisJaWYgKCFlcnIpCisJCWVyciA9IHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIEdNTF9DT05WRVJURVJfRU5BQkxFIHwgR01MXzQ4S0haLAorCQkJCQlUUlVFKTsKKwkKKwlERV9JTklUKCgibG9hZF9hc2ljKCkgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CisKKworCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKK3sKKwl1MzIgY29udHJvbF9yZWcsIGNsb2NrLCBiYXNlX3JhdGU7CisKKwlzbmRfYXNzZXJ0KHJhdGUgPCA1MDAwMCB8fCBjaGlwLT5kaWdpdGFsX21vZGUgIT0gRElHSVRBTF9NT0RFX0FEQVQsCisJCSAgIHJldHVybiAtRUlOVkFMKTsKKworCS8qIE9ubHkgc2V0IHRoZSBjbG9jayBmb3IgaW50ZXJuYWwgbW9kZS4gKi8KKwlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgIT0gRUNIT19DTE9DS19JTlRFUk5BTCkgeworCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6IENhbm5vdCBzZXQgc2FtcGxlIHJhdGUgLSAiCisJCQkiY2xvY2sgbm90IHNldCB0byBDTEtfQ0xPQ0tJTklOVEVSTkFMXG4iKSk7CisJCS8qIFNhdmUgdGhlIHJhdGUgYW55aG93ICovCisJCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMihyYXRlKTsKKwkJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgJiBjbGVhciB0aGUgYXBwcm9wcmlhdGUgYml0cyAqLworCWNvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKTsKKwljb250cm9sX3JlZyAmPSBHTUxfQ0xPQ0tfQ0xFQVJfTUFTSyAmIEdNTF9TUERJRl9SQVRFX0NMRUFSX01BU0s7CisKKwljbG9jayA9IDA7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDk2MDAwOgorCQljbG9jayA9IEdNTF85NktIWjsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJY2xvY2sgPSBHTUxfODhLSFo7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWNsb2NrID0gR01MXzQ4S0haIHwgR01MX1NQRElGX1NBTVBMRV9SQVRFMTsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJY2xvY2sgPSBHTUxfNDRLSFo7CisJCS8qIFByb2Zlc3Npb25hbCBtb2RlICovCisJCWlmIChjb250cm9sX3JlZyAmIEdNTF9TUERJRl9QUk9fTU9ERSkKKwkJCWNsb2NrIHw9IEdNTF9TUERJRl9TQU1QTEVfUkFURTA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCWNsb2NrID0gR01MXzMyS0haIHwgR01MX1NQRElGX1NBTVBMRV9SQVRFMCB8CisJCQlHTUxfU1BESUZfU0FNUExFX1JBVEUxOworCQlicmVhazsKKwljYXNlIDIyMDUwOgorCQljbG9jayA9IEdNTF8yMktIWjsKKwkJYnJlYWs7CisJY2FzZSAxNjAwMDoKKwkJY2xvY2sgPSBHTUxfMTZLSFo7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJCWNsb2NrID0gR01MXzExS0haOworCQlicmVhazsKKwljYXNlIDgwMDA6CisJCWNsb2NrID0gR01MXzhLSFo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIElmIHRoaXMgaXMgYSBub24tc3RhbmRhcmQgcmF0ZSwgdGhlbiB0aGUgZHJpdmVyIG5lZWRzIHRvCisJCXVzZSBMYXlsYTI0J3Mgc3BlY2lhbCAiY29udGludW91cyBmcmVxdWVuY3kiIG1vZGUgKi8KKwkJY2xvY2sgPSBMQVlMQTI0X0NPTlRJTlVPVVNfQ0xPQ0s7CisJCWlmIChyYXRlID4gNTAwMDApIHsKKwkJCWJhc2VfcmF0ZSA9IHJhdGUgPj4gMTsKKwkJCWNvbnRyb2xfcmVnIHw9IEdNTF9ET1VCTEVfU1BFRURfTU9ERTsKKwkJfSBlbHNlIHsKKwkJCWJhc2VfcmF0ZSA9IHJhdGU7CisJCX0KKworCQlpZiAoYmFzZV9yYXRlIDwgMjUwMDApCisJCQliYXNlX3JhdGUgPSAyNTAwMDsKKworCQlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0KKwkJCWNwdV90b19sZTMyKExBWUxBMjRfTUFHSUNfTlVNQkVSIC8gYmFzZV9yYXRlIC0gMik7CisKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX0xBWUxBMjRfRlJFUVVFTkNZX1JFRyk7CisJfQorCisJY29udHJvbF9yZWcgfD0gY2xvY2s7CisKKwljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSk7CS8qIGlnbm9yZWQgYnkgdGhlIERTUCA/ICovCisJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCURFX0FDVCgoInNldF9zYW1wbGVfcmF0ZTogJWQgY2xvY2sgJWRcbiIsIHJhdGUsIGNvbnRyb2xfcmVnKSk7CisKKwlyZXR1cm4gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsIEZBTFNFKTsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jaykKK3sKKwl1MzIgY29udHJvbF9yZWcsIGNsb2Nrc19mcm9tX2RzcDsKKworCS8qIE1hc2sgb2ZmIHRoZSBjbG9jayBzZWxlY3QgYml0cyAqLworCWNvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKSAmCisJCUdNTF9DTE9DS19DTEVBUl9NQVNLOworCWNsb2Nrc19mcm9tX2RzcCA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+c3RhdHVzX2Nsb2Nrcyk7CisKKwkvKiBQaWNrIHRoZSBuZXcgY2xvY2sgKi8KKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBFQ0hPX0NMT0NLX0lOVEVSTkFMOgorCQlERV9BQ1QoKCJTZXQgTGF5bGEyNCBjbG9jayB0byBJTlRFUk5BTFxuIikpOworCQljaGlwLT5pbnB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfSU5URVJOQUw7CisJCXJldHVybiBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpOworCWNhc2UgRUNIT19DTE9DS19TUERJRjoKKwkJaWYgKGNoaXAtPmRpZ2l0YWxfbW9kZSA9PSBESUdJVEFMX01PREVfQURBVCkKKwkJCXJldHVybiAtRUFHQUlOOworCQljb250cm9sX3JlZyB8PSBHTUxfU1BESUZfQ0xPQ0s7CisJCS8qIExheWxhMjQgZG9lc24ndCBzdXBwb3J0IDk2S0h6IFMvUERJRiAqLworCQljb250cm9sX3JlZyAmPSB+R01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQlERV9BQ1QoKCJTZXQgTGF5bGEyNCBjbG9jayB0byBTUERJRlxuIikpOworCQlicmVhazsKKwljYXNlIEVDSE9fQ0xPQ0tfV09SRDoKKwkJY29udHJvbF9yZWcgfD0gR01MX1dPUkRfQ0xPQ0s7CisJCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTUxfQ0xPQ0tfREVURUNUX0JJVF9XT1JEOTYpCisJCQljb250cm9sX3JlZyB8PSBHTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCWVsc2UKKwkJCWNvbnRyb2xfcmVnICY9IH5HTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCURFX0FDVCgoIlNldCBMYXlsYTI0IGNsb2NrIHRvIFdPUkRcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBFQ0hPX0NMT0NLX0FEQVQ6CisJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgIT0gRElHSVRBTF9NT0RFX0FEQVQpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJY29udHJvbF9yZWcgfD0gR01MX0FEQVRfQ0xPQ0s7CisJCWNvbnRyb2xfcmVnICY9IH5HTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCURFX0FDVCgoIlNldCBMYXlsYTI0IGNsb2NrIHRvIEFEQVRcbiIpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVfQUNUKCgiSW5wdXQgY2xvY2sgMHgleCBub3Qgc3VwcG9ydGVkIGZvciBMYXlsYTI0XG4iLCBjbG9jaykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwLT5pbnB1dF9jbG9jayA9IGNsb2NrOworCXJldHVybiB3cml0ZV9jb250cm9sX3JlZyhjaGlwLCBjb250cm9sX3JlZywgVFJVRSk7Cit9CisKKworCisvKiBEZXBlbmRpbmcgb24gd2hhdCBkaWdpdGFsIG1vZGUgeW91IHdhbnQsIExheWxhMjQgbmVlZHMgZGlmZmVyZW50IEFTSUNzCitsb2FkZWQuICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgQVNJQyBuZWVkZWQgZm9yIHRoZSBuZXcgbW9kZSBhbmQgc2VlcworaWYgaXQgbWF0Y2hlcyB0aGUgb25lIGFscmVhZHkgbG9hZGVkLiAqLworc3RhdGljIGludCBzd2l0Y2hfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpCit7CisJczggKm1vbml0b3JzOworCisJLyogIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGFscmVhZHkgbG9hZGVkICovCisJaWYgKGFzaWMgIT0gY2hpcC0+YXNpY19jb2RlKSB7CisJCW1vbml0b3JzID0ga21hbGxvYyhNT05JVE9SX0FSUkFZX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoISBtb25pdG9ycykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbWNweShtb25pdG9ycywgY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgTU9OSVRPUl9BUlJBWV9TSVpFKTsKKwkJbWVtc2V0KGNoaXAtPmNvbW1fcGFnZS0+bW9uaXRvcnMsIEVDSE9HQUlOX01VVEVELAorCQkgICAgICAgTU9OSVRPUl9BUlJBWV9TSVpFKTsKKworCQkvKiBMb2FkIHRoZSBkZXNpcmVkIEFTSUMgKi8KKwkJaWYgKGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9MQVlMQTI0X0VYVEVSTkFMX0FTSUMsCisJCQkJICAgICAgYXNpYykgPCAwKSB7CisJCQltZW1jcHkoY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgbW9uaXRvcnMsCisJCQkgICAgICAgTU9OSVRPUl9BUlJBWV9TSVpFKTsKKwkJCWtmcmVlKG1vbml0b3JzKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWNoaXAtPmFzaWNfY29kZSA9IGFzaWM7CisJCW1lbWNweShjaGlwLT5jb21tX3BhZ2UtPm1vbml0b3JzLCBtb25pdG9ycywgTU9OSVRPUl9BUlJBWV9TSVpFKTsKKwkJa2ZyZWUobW9uaXRvcnMpOworCX0KKworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBkc3Bfc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKQoreworCXUzMiBjb250cm9sX3JlZzsKKwlpbnQgZXJyLCBpbmNvbXBhdGlibGVfY2xvY2s7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCisJLyogU2V0IGNsb2NrIHRvICJpbnRlcm5hbCIgaWYgaXQncyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgbW9kZSAqLworCWluY29tcGF0aWJsZV9jbG9jayA9IEZBTFNFOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUw6CisJY2FzZSBESUdJVEFMX01PREVfU1BESUZfUkNBOgorCQlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgPT0gRUNIT19DTE9DS19BREFUKQorCQkJaW5jb21wYXRpYmxlX2Nsb2NrID0gVFJVRTsKKwkJYXNpYyA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ107CisJCWJyZWFrOworCWNhc2UgRElHSVRBTF9NT0RFX0FEQVQ6CisJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX1NQRElGKQorCQkJaW5jb21wYXRpYmxlX2Nsb2NrID0gVFJVRTsKKwkJYXNpYyA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfMkFfQVNJQ107CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFX0FDVCgoIkRpZ2l0YWwgbW9kZSBub3Qgc3VwcG9ydGVkOiAlZFxuIiwgbW9kZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5jb21wYXRpYmxlX2Nsb2NrKSB7CS8qIFN3aXRjaCB0byA0OEtIeiwgaW50ZXJuYWwgKi8KKwkJY2hpcC0+c2FtcGxlX3JhdGUgPSA0ODAwMDsKKwkJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXNldF9pbnB1dF9jbG9jayhjaGlwLCBFQ0hPX0NMT0NLX0lOVEVSTkFMKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwl9CisKKwkvKiBzd2l0Y2hfYXNpYygpIGNhbiBzbGVlcCAqLworCWlmIChzd2l0Y2hfYXNpYyhjaGlwLCBhc2ljKSA8IDApCisJCXJldHVybiAtRUlPOworCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisKKwkvKiBUd2VhayB0aGUgY29udHJvbCByZWdpc3RlciAqLworCWNvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKTsKKwljb250cm9sX3JlZyAmPSBHTUxfRElHSVRBTF9NT0RFX0NMRUFSX01BU0s7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMOgorCQljb250cm9sX3JlZyB8PSBHTUxfU1BESUZfT1BUSUNBTF9NT0RFOworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9SQ0E6CisJCS8qIEdNTF9TUERJRl9PUFRJQ0FMX01PREUgYml0IGNsZWFyZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBESUdJVEFMX01PREVfQURBVDoKKwkJY29udHJvbF9yZWcgfD0gR01MX0FEQVRfTU9ERTsKKwkJY29udHJvbF9yZWcgJj0gfkdNTF9ET1VCTEVfU1BFRURfTU9ERTsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsIFRSVUUpOworCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gbW9kZTsKKworCURFX0FDVCgoInNldF9kaWdpdGFsX21vZGUgdG8gJWRcbiIsIG1vZGUpKTsKKwlyZXR1cm4gaW5jb21wYXRpYmxlX2Nsb2NrOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0MGM2NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgQUxTQSBkcml2ZXIgZm9yIEVjaG9hdWRpbyBzb3VuZGNhcmRzLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNkZWZpbmUgRUNITzI0X0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9NSUEKKyNkZWZpbmUgRUNIT0NBUkRfTkFNRSAiTWlhIgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfSU5QVVRfTk9NSU5BTF9MRVZFTAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfT1VUUFVUX05PTUlOQUxfTEVWRUwKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRVhURVJOQUxfQ0xPQ0sKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0FEQVQJRkFMU0UKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX01JREkKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAyICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JMTAJLyogMiAqLworI2RlZmluZSBQWF9OVU0JCTEyCisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTIJLyogMiAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JNAkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JNgkvKiAyICovCisjZGVmaW5lIEJYX05VTQkJOAorCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJMAorI2RlZmluZSBGV19NSUFfRFNQCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJtaWFfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDgwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIE1pYSByZXYuMCAqLworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwODEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzNjEgTWlhIHJldi4xICovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzk2MDAwLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNjIxNDQsCisJLnBlcmlvZF9ieXRlc19taW4gPSAzMiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEzMTA3MiwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDIyMCwKKwkvKiBPbmUgcGFnZSAoNGspIGNvbnRhaW5zIDUxMiBpbnN0cnVjdGlvbnMuIEkgZG9uJ3Qga25vdyBpZiB0aGUgaHcKKwlzdXBwb3J0cyBsaXN0cyBsb25nZXIgdGhhbiB0aGlzLiBJbiB0aGlzIGNhc2UgcGVyaW9kc19tYXg9MjIwIGlzIGEKKwlzYWZlIGxpbWl0IHRvIG1ha2Ugc3VyZSB0aGUgbGlzdCBuZXZlciBleGNlZWRzIDUxMiBpbnN0cnVjdGlvbnMuICovCit9OworCisKKyNpbmNsdWRlICJtaWFfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgorI2luY2x1ZGUgIm1pZGkuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxYzcwNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCkBAIC0wLDAgKzEsMjI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKTsKK3N0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOworc3RhdGljIGludCB1cGRhdGVfZmxhZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LCB1MTYgcGlwZSwKKwkJCSAgIGludCBnYWluKTsKK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIE1pYVxuIikpOworCXNuZF9hc3NlcnQoKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgPT0gTUlBLCByZXR1cm4gLUVOT0RFVik7CisKKwlpZiAoKGVyciA9IGluaXRfZHNwX2NvbW1fcGFnZShjaGlwKSkpIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19NSUFfRFNQXTsKKwkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKKwkgICB3b3JrcyBPSyAqLworCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKKwlpZiAoKHN1YmRldmljZV9pZCAmIDB4MDAwMGYpID09IE1JQV9NSURJX1JFVikKKwkJY2hpcC0+aGFzX21pZGkgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfAorCQlFQ0hPX0NMT0NLX0JJVF9TUERJRjsKKworCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSkKKwkJcmV0dXJuIGVycjsKKworCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogdmNoYW5uZWxzIDAtMyBnbyB0byBhbmFsb2cKKwlvdXRwdXRzIGFuZCB2Y2hhbm5lbHMgNC03IGdvIHRvIFMvUERJRiBvdXRwdXRzICovCisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMiwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDMsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA0LCAwKTsKKwlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNSwgMCk7CisJc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDYsIDApOworCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA3LCAwKTsKKwllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CisKKworCitzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOworCisJLyogTWFwIHRoZSBEU1AgY2xvY2sgZGV0ZWN0IGJpdHMgdG8gdGhlIGdlbmVyaWMgZHJpdmVyIGNsb2NrCisJICAgZGV0ZWN0IGJpdHMgKi8KKwljbG9ja3NfZnJvbV9kc3AgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPnN0YXR1c19jbG9ja3MpOworCisJY2xvY2tfYml0cyA9IEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworCisJaWYgKGNsb2Nrc19mcm9tX2RzcCAmIEdMRE1fQ0xPQ0tfREVURUNUX0JJVF9TUERJRikKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9TUERJRjsKKworCXJldHVybiBjbG9ja19iaXRzOworfQorCisKKworLyogVGhlIE1pYSBoYXMgbm8gQVNJQy4gSnVzdCBkbyBub3RoaW5nICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBzZXRfc2FtcGxlX3JhdGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIHJhdGUpCit7CisJdTMyIGNvbnRyb2xfcmVnOworCisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSA5NjAwMDoKKwkJY29udHJvbF9yZWcgPSBNSUFfOTYwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWNvbnRyb2xfcmVnID0gTUlBXzg4MjAwOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQljb250cm9sX3JlZyA9IE1JQV80ODAwMDsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJY29udHJvbF9yZWcgPSBNSUFfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCWNvbnRyb2xfcmVnID0gTUlBXzMyMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGludmFsaWQhXG4iLCByYXRlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE92ZXJyaWRlIHRoZSBjbG9jayBzZXR0aW5nIGlmIHRoaXMgTWlhIGlzIHNldCB0byBTL1BESUYgY2xvY2sgKi8KKwlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgPT0gRUNIT19DTE9DS19TUERJRikKKwkJY29udHJvbF9yZWcgfD0gTUlBX1NQRElGOworCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIGlmIGl0IGhhcyBjaGFuZ2VkICovCisJaWYgKGNvbnRyb2xfcmVnICE9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlcikpIHsKKwkJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOwkvKiBpZ25vcmVkIGJ5IHRoZSBEU1AgKi8KKwkJY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyID0gY3B1X3RvX2xlMzIoY29udHJvbF9yZWcpOworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9DTE9DS1MpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jaykKK3sKKwlERV9BQ1QoKCJzZXRfaW5wdXRfY2xvY2soJWQpXG4iLCBjbG9jaykpOworCXNuZF9hc3NlcnQoY2xvY2sgPT0gRUNIT19DTE9DS19JTlRFUk5BTCB8fCBjbG9jayA9PSBFQ0hPX0NMT0NLX1NQRElGLAorCQkgICByZXR1cm4gLUVJTlZBTCk7CisKKwljaGlwLT5pbnB1dF9jbG9jayA9IGNsb2NrOworCXJldHVybiBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpOworfQorCisKKworLyogVGhpcyBmdW5jdGlvbiByb3V0ZXMgdGhlIHNvdW5kIGZyb20gYSB2aXJ0dWFsIGNoYW5uZWwgdG8gYSByZWFsIG91dHB1dCAqLworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwgdTE2IHBpcGUsCisJCQkgICBpbnQgZ2FpbikKK3sKKwlpbnQgaW5kZXg7CisKKwlzbmRfYXNzZXJ0KHBpcGUgPCBudW1fcGlwZXNfb3V0KGNoaXApICYmCisJCSAgIG91dHB1dCA8IG51bV9idXNzZXNfb3V0KGNoaXApLCByZXR1cm4gLUVJTlZBTCk7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJY2hpcC0+dm1peGVyX2dhaW5bb3V0cHV0XVtwaXBlXSA9IGdhaW47CisJaW5kZXggPSBvdXRwdXQgKiBudW1fcGlwZXNfb3V0KGNoaXApICsgcGlwZTsKKwljaGlwLT5jb21tX3BhZ2UtPnZtaXhlcltpbmRleF0gPSBnYWluOworCisJREVfQUNUKCgic2V0X3ZtaXhlcl9nYWluOiBwaXBlICVkLCBvdXQgJWQgPSAlZFxuIiwgcGlwZSwgb3V0cHV0LCBnYWluKSk7CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUZWxsIHRoZSBEU1AgdG8gcmVhZCBhbmQgdXBkYXRlIHZpcnR1YWwgbWl4ZXIgbGV2ZWxzIGluIGNvbW0gcGFnZS4gKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfU0VUX1ZNSVhFUl9HQUlOKTsKK30KKworCisKKy8qIFRlbGwgdGhlIERTUCB0byByZXJlYWQgdGhlIGZsYWdzIGZyb20gdGhlIGNvbW0gcGFnZSAqLworc3RhdGljIGludCB1cGRhdGVfZmxhZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9GTEFHUyk7Cit9CisKKworCitzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKQoreworCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgJWRcbiIsIHByb2YpKTsKKwlpZiAocHJvZikKKwkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCWVsc2UKKwkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQorCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOworCXJldHVybiB1cGRhdGVfZmxhZ3MoY2hpcCk7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxZjBmMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jCkBAIC0wLDAgKzEsMzI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCU1JREkgbG93bGV2ZWwgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTdGFydCBhbmQgc3RvcCBNaWRpIGlucHV0ICovCitzdGF0aWMgaW50IGVuYWJsZV9taWRpX2lucHV0KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgZW5hYmxlKQoreworCURFX01JRCgoImVuYWJsZV9taWRpX2lucHV0KCVkKVxuIiwgZW5hYmxlKSk7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJaWYgKGVuYWJsZSkgeworCQljaGlwLT5tdGNfc3RhdGUgPSBNSURJX0lOX1NUQVRFX05PUk1BTDsKKwkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKKwl9IGVsc2UKKwkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQorCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CisKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOworfQorCisKKworLyogU2VuZCBhIGJ1ZmZlciBmdWxsIG9mIE1JREkgZGF0YSB0byB0aGUgRFNQCitSZXR1cm5zIGhvdyBtYW55IGFjdHVhbGx5IHdyaXR0ZW4gb3IgPCAwIG9uIGVycm9yICovCitzdGF0aWMgaW50IHdyaXRlX21pZGkoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggKmRhdGEsIGludCBieXRlcykKK3sKKwlzbmRfYXNzZXJ0KGJ5dGVzID4gMCAmJiBieXRlcyA8IE1JRElfT1VUX0JVRkZFUl9TSVpFLCByZXR1cm4gLUVJTlZBTCk7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJLyogSEY0IGluZGljYXRlcyB0aGF0IGl0IGlzIHNhZmUgdG8gd3JpdGUgTUlESSBvdXRwdXQgZGF0YSAqLworCWlmICghIChnZXRfZHNwX3JlZ2lzdGVyKGNoaXAsIENISTMyX1NUQVRVU19SRUcpICYgQ0hJMzJfU1RBVFVTX1JFR19IRjQpKQorCQlyZXR1cm4gMDsKKworCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRwdXRbMF0gPSBieXRlczsKKwltZW1jcHkoJmNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRwdXRbMV0sIGRhdGEsIGJ5dGVzKTsKKwljaGlwLT5jb21tX3BhZ2UtPm1pZGlfb3V0X2ZyZWVfY291bnQgPSAwOworCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUlESV9XUklURSk7CisJREVfTUlEKCgid3JpdGVfbWlkaTogJWRcbiIsIGJ5dGVzKSk7CisJcmV0dXJuIGJ5dGVzOworfQorCisKKworLyogUnVuIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBNSURJIGlucHV0IGRhdGEKK01JREkgdGltZSBjb2RlIHN5bmMgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29kZSByaWdodCBub3csIGJ1dCB5b3Ugc3RpbGwgbmVlZAordGhpcyBzdGF0ZSBtYWNoaW5lIHRvIHBhcnNlIHRoZSBpbmNvbWluZyBNSURJIGRhdGEgc3RyZWFtLiAgRXZlcnkgdGltZSB0aGUgRFNQCitzZWVzIGEgMHhGMSBieXRlIGNvbWUgaW4sIGl0IGFkZHMgdGhlIERTUCBzYW1wbGUgcG9zaXRpb24gdG8gdGhlIE1JREkgZGF0YQorc3RyZWFtLiBUaGUgRFNQIHNhbXBsZSBwb3NpdGlvbiBpcyByZXByZXNlbnRlZCBhcyBhIDMyIGJpdCB1bnNpZ25lZCB2YWx1ZSwKK3dpdGggdGhlIGhpZ2ggMTYgYml0cyBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGxvdyAxNiBiaXRzLiBTaW5jZSB0aGVzZSBhcmVuJ3QKK3JlYWwgTUlESSBieXRlcywgdGhlIGZvbGxvd2luZyBsb2dpYyBpcyBuZWVkZWQgdG8gc2tpcCB0aGVtLiAqLworc3RhdGljIGlubGluZSBpbnQgbXRjX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBzaG9ydCBtaWRpX2J5dGUpCit7CisJc3dpdGNoIChjaGlwLT5tdGNfc3RhdGUpIHsKKwljYXNlIE1JRElfSU5fU1RBVEVfTk9STUFMOgorCQlpZiAobWlkaV9ieXRlID09IDB4RjEpCisJCQljaGlwLT5tdGNfc3RhdGUgPSBNSURJX0lOX1NUQVRFX1RTX0hJR0g7CisJCWJyZWFrOworCWNhc2UgTUlESV9JTl9TVEFURV9UU19ISUdIOgorCQljaGlwLT5tdGNfc3RhdGUgPSBNSURJX0lOX1NUQVRFX1RTX0xPVzsKKwkJcmV0dXJuIE1JRElfSU5fU0tJUF9EQVRBOworCQlicmVhazsKKwljYXNlIE1JRElfSU5fU1RBVEVfVFNfTE9XOgorCQljaGlwLT5tdGNfc3RhdGUgPSBNSURJX0lOX1NUQVRFX0YxX0RBVEE7CisJCXJldHVybiBNSURJX0lOX1NLSVBfREFUQTsKKwkJYnJlYWs7CisJY2FzZSBNSURJX0lOX1NUQVRFX0YxX0RBVEE6CisJCWNoaXAtPm10Y19zdGF0ZSA9IE1JRElfSU5fU1RBVEVfTk9STUFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBJUlEgaGFuZGxlciBhbmQgaXQgcmVhZHMgdGhlIG1pZGkgZGF0YQorZnJvbSB0aGUgRFNQJ3MgYnVmZmVyLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLiAqLworc3RhdGljIGludCBtaWRpX3NlcnZpY2VfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJc2hvcnQgaW50IGNvdW50LCBtaWRpX2J5dGUsIGksIHJlY2VpdmVkOworCisJLyogVGhlIGNvdW50IGlzIGF0IGluZGV4IDAsIGZvbGxvd2VkIGJ5IGFjdHVhbCBkYXRhICovCisJY291bnQgPSBsZTE2X3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPm1pZGlfaW5wdXRbMF0pOworCisJc25kX2Fzc2VydChjb3VudCA8IE1JRElfSU5fQlVGRkVSX1NJWkUsIHJldHVybiAwKTsKKworCS8qIEdldCB0aGUgTUlESSBkYXRhIGZyb20gdGhlIGNvbW0gcGFnZSAqLworCWkgPSAxOworCXJlY2VpdmVkID0gMDsKKwlmb3IgKGkgPSAxOyBpIDw9IGNvdW50OyBpKyspIHsKKwkJLyogR2V0IHRoZSBNSURJIGJ5dGUgKi8KKwkJbWlkaV9ieXRlID0gbGUxNl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5taWRpX2lucHV0W2ldKTsKKworCQkvKiBQYXJzZSB0aGUgaW5jb21pbmcgTUlESSBzdHJlYW0uIFRoZSBpbmNvbWluZyBNSURJIGRhdGEKKwkJY29uc2lzdHMgb2YgTUlESSBieXRlcyBhbmQgdGltZXN0YW1wcyBmb3IgdGhlIE1JREkgdGltZSBjb2RlCisJCTB4RjEgYnl0ZXMuIG10Y19wcm9jZXNzX2RhdGEoKSBpcyBhIGxpdHRsZSBzdGF0ZSBtYWNoaW5lIHRoYXQKKwkJcGFyc2VzIHRoZSBzdHJlYW0uIElmIHlvdSBnZXQgTUlESV9JTl9TS0lQX0RBVEEgYmFjaywgdGhlbgorCQl0aGlzIGlzIGEgdGltZXN0YW1wIGJ5dGUsIG5vdCBhIE1JREkgYnl0ZSwgc28gZG9uJ3Qgc3RvcmUgaXQKKwkJaW4gdGhlIE1JREkgaW5wdXQgYnVmZmVyLiAqLworCQlpZiAobXRjX3Byb2Nlc3NfZGF0YShjaGlwLCBtaWRpX2J5dGUpID09IE1JRElfSU5fU0tJUF9EQVRBKQorCQkJY29udGludWU7CisKKwkJY2hpcC0+bWlkaV9idWZmZXJbcmVjZWl2ZWQrK10gPSAodTgpbWlkaV9ieXRlOworCX0KKworCXJldHVybiByZWNlaXZlZDsKK30KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCU1JREkgaW50ZXJmYWNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fbWlkaV9pbnB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJY2hpcC0+bWlkaV9pbiA9IHN1YnN0cmVhbTsKKwlERV9NSUQoKCJyYXdtaWRpX2lvcGVuXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlpbnQgdXApCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCWlmICh1cCAhPSBjaGlwLT5taWRpX2lucHV0X2VuYWJsZWQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCWVuYWJsZV9taWRpX2lucHV0KGNoaXAsIHVwKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJY2hpcC0+bWlkaV9pbnB1dF9lbmFibGVkID0gdXA7CisJfQorfQorCisKKworc3RhdGljIGludCBzbmRfZWNob19taWRpX2lucHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJY2hpcC0+bWlkaV9pbiA9IE5VTEw7CisJREVfTUlEKCgicmF3bWlkaV9pY2xvc2VcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fbWlkaV9vdXRwdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCWNoaXAtPnRpbnVzZSA9IDA7CisJY2hpcC0+bWlkaV9mdWxsID0gMDsKKwljaGlwLT5taWRpX291dCA9IHN1YnN0cmVhbTsKKwlERV9NSUQoKCJyYXdtaWRpX29vcGVuXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX291dHB1dF93cml0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IChzdHJ1Y3QgZWNob2F1ZGlvICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBieXRlcywgc2VudCwgdGltZTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltNSURJX09VVF9CVUZGRVJfU0laRSAtIDFdOworCisJREVfTUlEKCgic25kX2VjaG9fbWlkaV9vdXRwdXRfd3JpdGVcbiIpKTsKKwkvKiBObyBpbnRlcnJ1cHRzIGFyZSBpbnZvbHZlZDogd2UgaGF2ZSB0byBjaGVjayBhdCByZWd1bGFyIGludGVydmFscworCWlmIHRoZSBjYXJkJ3Mgb3V0cHV0IGJ1ZmZlciBoYXMgcm9vbSBmb3IgbmV3IGRhdGEuICovCisJc2VudCA9IGJ5dGVzID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCWNoaXAtPm1pZGlfZnVsbCA9IDA7CisJaWYgKGNoaXAtPm1pZGlfb3V0ICYmICFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eShjaGlwLT5taWRpX291dCkpIHsKKwkJYnl0ZXMgPSBzbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrKGNoaXAtPm1pZGlfb3V0LCBidWYsCisJCQkJCQkgIE1JRElfT1VUX0JVRkZFUl9TSVpFIC0gMSk7CisJCURFX01JRCgoIlRyeSB0byBzZW5kICVkIGJ5dGVzLi4uXG4iLCBieXRlcykpOworCQlzZW50ID0gd3JpdGVfbWlkaShjaGlwLCBidWYsIGJ5dGVzKTsKKwkJaWYgKHNlbnQgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ3cml0ZV9taWRpKCkgZXJyb3IgJWRcbiIsIHNlbnQpOworCQkJLyogcmV0cnkgbGF0ZXIgKi8KKwkJCXNlbnQgPSA5MDAwOworCQkJY2hpcC0+bWlkaV9mdWxsID0gMTsKKwkJfSBlbHNlIGlmIChzZW50ID4gMCkgeworCQkJREVfTUlEKCgiJWQgYnl0ZXMgc2VudFxuIiwgc2VudCkpOworCQkJc25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrKGNoaXAtPm1pZGlfb3V0LCBzZW50KTsKKwkJfSBlbHNlIHsKKwkJCS8qIEJ1ZmZlciBpcyBmdWxsLiBEU1AncyBpbnRlcm5hbCBidWZmZXIgaXMgNjQgKDEyOCA/KQorCQkJYnl0ZXMgbG9uZy4gTGV0J3Mgd2FpdCB1bnRpbCBoYWxmIG9mIHRoZW0gYXJlIHNlbnQgKi8KKwkJCURFX01JRCgoIkZ1bGxcbiIpKTsKKwkJCXNlbnQgPSAzMjsKKwkJCWNoaXAtPm1pZGlfZnVsbCA9IDE7CisJCX0KKwl9CisKKwkvKiBXZSByZXN0YXJ0IHRoZSB0aW1lciBvbmx5IGlmIHRoZXJlIGlzIHNvbWUgZGF0YSBsZWZ0IHRvIHNlbmQgKi8KKwlpZiAoIXNuZF9yYXdtaWRpX3RyYW5zbWl0X2VtcHR5KGNoaXAtPm1pZGlfb3V0KSAmJiBjaGlwLT50aW51c2UpIHsKKwkJLyogVGhlIHRpbWVyIHdpbGwgZXhwaXJlIHNsaWdodGx5IGFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuCisJCSAgIHNlbnQgKi8KKwkJdGltZSA9IChzZW50IDw8IDMpIC8gMjUgKyAxOwkvKiA4LzI1PTAuMzJtcyB0byBzZW5kIGEgYnl0ZSAqLworCQltb2RfdGltZXIoJmNoaXAtPnRpbWVyLCBqaWZmaWVzICsgKHRpbWUgKiBIWiArIDk5OSkgLyAxMDAwKTsKKwkJREVfTUlEKCgiVGltZXIgYXJtZWQoJWQpXG4iLCAoKHRpbWUgKiBIWiArIDk5OSkgLyAxMDAwKSkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKKworCitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJIGludCB1cCkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJREVfTUlEKCgic25kX2VjaG9fbWlkaV9vdXRwdXRfdHJpZ2dlciglZClcbiIsIHVwKSk7CisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJaWYgKHVwKSB7CisJCWlmICghY2hpcC0+dGludXNlKSB7CisJCQlpbml0X3RpbWVyKCZjaGlwLT50aW1lcik7CisJCQljaGlwLT50aW1lci5mdW5jdGlvbiA9IHNuZF9lY2hvX21pZGlfb3V0cHV0X3dyaXRlOworCQkJY2hpcC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNoaXA7CisJCQljaGlwLT50aW51c2UgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNoaXAtPnRpbnVzZSkgeworCQkJZGVsX3RpbWVyKCZjaGlwLT50aW1lcik7CisJCQljaGlwLT50aW51c2UgPSAwOworCQkJREVfTUlEKCgiVGltZXIgcmVtb3ZlZFxuIikpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisKKwlpZiAodXAgJiYgIWNoaXAtPm1pZGlfZnVsbCkKKwkJc25kX2VjaG9fbWlkaV9vdXRwdXRfd3JpdGUoKHVuc2lnbmVkIGxvbmcpY2hpcCk7Cit9CisKKworCitzdGF0aWMgaW50IHNuZF9lY2hvX21pZGlfb3V0cHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJY2hpcC0+bWlkaV9vdXQgPSBOVUxMOworCURFX01JRCgoInJhd21pZGlfb2Nsb3NlXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfZWNob19taWRpX2lucHV0ID0geworCS5vcGVuID0gc25kX2VjaG9fbWlkaV9pbnB1dF9vcGVuLAorCS5jbG9zZSA9IHNuZF9lY2hvX21pZGlfaW5wdXRfY2xvc2UsCisJLnRyaWdnZXIgPSBzbmRfZWNob19taWRpX2lucHV0X3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfZWNob19taWRpX291dHB1dCA9IHsKKwkub3BlbiA9IHNuZF9lY2hvX21pZGlfb3V0cHV0X29wZW4sCisJLmNsb3NlID0gc25kX2VjaG9fbWlkaV9vdXRwdXRfY2xvc2UsCisJLnRyaWdnZXIgPSBzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyLAorfTsKKworCisKKy8qIDwtLXNuZF9lY2hvX3Byb2JlKCkgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lY2hvX21pZGlfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwkJCQkJICBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWludCBlcnI7CisKKwlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX25ldyhjYXJkLCBjYXJkLT5zaG9ydG5hbWUsIDAsIDEsIDEsCisJCQkJICAgJmNoaXAtPnJtaWRpKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc3RyY3B5KGNoaXAtPnJtaWRpLT5uYW1lLCBjYXJkLT5zaG9ydG5hbWUpOworCWNoaXAtPnJtaWRpLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCisJc25kX3Jhd21pZGlfc2V0X29wcyhjaGlwLT5ybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkgICAgJnNuZF9lY2hvX21pZGlfaW5wdXQpOworCXNuZF9yYXdtaWRpX3NldF9vcHMoY2hpcC0+cm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwKKwkJCSAgICAmc25kX2VjaG9fbWlkaV9vdXRwdXQpOworCisJY2hpcC0+cm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8CisJCVNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CisJREVfSU5JVCgoIk1JREkgb2tcbiIpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjNTEyYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjZGVmaW5lIEVDSE8yNF9GQU1JTFkKKyNkZWZpbmUgRUNIT0NBUkRfTU9OQQorI2RlZmluZSBFQ0hPQ0FSRF9OQU1FICJNb25hIgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfQVNJQworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1VQRVJfSU5URVJMRUFWRQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTl9BVVRPTVVURQorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9NT0RFX1NXSVRDSAorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfRVhURVJOQUxfQ0xPQ0sKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0FEQVQJNgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorCisvKiBQaXBlIGluZGV4ZXMgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCS8qIDYgKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9PVVQJNgkvKiA4ICovCisjZGVmaW5lIFBYX0FOQUxPR19JTgkxNAkvKiA0ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JMTgJLyogOCAqLworI2RlZmluZSBQWF9OVU0JCTI2CisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiA2ICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTYJLyogOCAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JMTQJLyogNCAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTE4CS8qIDggKi8KKyNkZWZpbmUgQlhfTlVNCQkyNgorCisKKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKKyNkZWZpbmUgRldfMzYxX0xPQURFUgkJMAorI2RlZmluZSBGV19NT05BXzMwMV9EU1AJCTEKKyNkZWZpbmUgRldfTU9OQV8zNjFfRFNQCQkyCisjZGVmaW5lIEZXX01PTkFfMzAxXzFfQVNJQzQ4CTMKKyNkZWZpbmUgRldfTU9OQV8zMDFfMV9BU0lDOTYJNAorI2RlZmluZSBGV19NT05BXzM2MV8xX0FTSUM0OAk1CisjZGVmaW5lIEZXX01PTkFfMzYxXzFfQVNJQzk2CTYKKyNkZWZpbmUgRldfTU9OQV8yX0FTSUMJCTcKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJtb25hXzMwMV9kc3AuZncifSwKKwl7MCwgIm1vbmFfMzYxX2RzcC5mdyJ9LAorCXswLCAibW9uYV8zMDFfMV9hc2ljXzQ4LmZ3In0sCisJezAsICJtb25hXzMwMV8xX2FzaWNfOTYuZncifSwKKwl7MCwgIm1vbmFfMzYxXzFfYXNpY180OC5mdyJ9LAorCXswLCAibW9uYV8zNjFfMV9hc2ljXzk2LmZ3In0sCisJezAsICJtb25hXzJfYXNpYy5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA3MCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBNb25hIHJldi4wICovCisJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA3MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBNb25hIHJldi4xICovCisJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA3MiwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBNb25hIHJldi4yICovCisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA3MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBNb25hIHJldi4wICovCisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA3MSwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBNb25hIHJldi4xICovCisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA3MiwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBNb25hIHJldi4yICovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJU05EUlZfUENNX1JBVEVfOTYwMDAsCisJLnJhdGVfbWluID0gODAwMCwKKwkucmF0ZV9tYXggPSA5NjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDI2MjE0NCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTMxMDcyLAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjIwLAorCS8qIE9uZSBwYWdlICg0aykgY29udGFpbnMgNTEyIGluc3RydWN0aW9ucy4gSSBkb24ndCBrbm93IGlmIHRoZSBodworCXN1cHBvcnRzIGxpc3RzIGxvbmdlciB0aGFuIHRoaXMuIEluIHRoaXMgY2FzZSBwZXJpb2RzX21heD0yMjAgaXMgYQorCXNhZmUgbGltaXQgdG8gbWFrZSBzdXJlIHRoZSBsaXN0IG5ldmVyIGV4Y2VlZHMgNTEyIGluc3RydWN0aW9ucy4gKi8KK307CisKKworI2luY2x1ZGUgIm1vbmFfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19nbWwuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI0YmYwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jCkBAIC0wLDAgKzEsNDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICBDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICAgd3d3LmVjaG9hdWRpby5jb20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KKworICAgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOworICAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCB3cml0ZV9jb250cm9sX3JlZyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgdmFsdWUsIGNoYXIgZm9yY2UpOworc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKTsKK3N0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOworc3RhdGljIGludCBzZXRfZGlnaXRhbF9tb2RlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHU4IG1vZGUpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIE1vbmFcbiIpKTsKKwlzbmRfYXNzZXJ0KChzdWJkZXZpY2VfaWQgJiAweGZmZjApID09IE1PTkEsIHJldHVybiAtRU5PREVWKTsKKworCWlmICgoZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApKSkgeworCQlERV9JTklUKCgiaW5pdF9odyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIERTUCBjb21tIHBhZ2VcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPQorCQlFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTCB8IEVDSE9fQ0xPQ0tfQklUX1NQRElGIHwKKwkJRUNIT19DTE9DS19CSVRfV09SRCB8IEVDSE9fQ0xPQ0tfQklUX0FEQVQ7CisJY2hpcC0+ZGlnaXRhbF9tb2RlcyA9CisJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKKwkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKKwkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9BREFUOworCisJLyogTW9uYSBjb21lcyBpbiBib3RoICczMDEgYW5kICczNjEgZmxhdm9ycyAqLworCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQorCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTU9OQV8zNjFfRFNQXTsKKwllbHNlCisJCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19NT05BXzMwMV9EU1BdOworCisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKworCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOworCXNuZF9hc3NlcnQoZXJyID49IDAsIHJldHVybiBlcnIpOworCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KKworCisKK3N0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CisKKwkvKiBNYXAgdGhlIERTUCBjbG9jayBkZXRlY3QgYml0cyB0byB0aGUgZ2VuZXJpYyBkcml2ZXIgY2xvY2sKKwkgICBkZXRlY3QgYml0cyAqLworCWNsb2Nrc19mcm9tX2RzcCA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+c3RhdHVzX2Nsb2Nrcyk7CisKKwljbG9ja19iaXRzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR01MX0NMT0NLX0RFVEVDVF9CSVRfU1BESUYpCisJCWNsb2NrX2JpdHMgfD0gRUNIT19DTE9DS19CSVRfU1BESUY7CisKKwlpZiAoY2xvY2tzX2Zyb21fZHNwICYgR01MX0NMT0NLX0RFVEVDVF9CSVRfQURBVCkKKwkJY2xvY2tfYml0cyB8PSBFQ0hPX0NMT0NLX0JJVF9BREFUOworCisJaWYgKGNsb2Nrc19mcm9tX2RzcCAmIEdNTF9DTE9DS19ERVRFQ1RfQklUX1dPUkQpCisJCWNsb2NrX2JpdHMgfD0gRUNIT19DTE9DS19CSVRfV09SRDsKKworCXJldHVybiBjbG9ja19iaXRzOworfQorCisKKworLyogTW9uYSBoYXMgYW4gQVNJQyBvbiB0aGUgUENJIGNhcmQgYW5kIGFub3RoZXIgQVNJQyBpbiB0aGUgZXh0ZXJuYWwgYm94OyAKK2JvdGggbmVlZCB0byBiZSBsb2FkZWQuICovCitzdGF0aWMgaW50IGxvYWRfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXUzMiBjb250cm9sX3JlZzsKKwlpbnQgZXJyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYzsKKworCWlmIChjaGlwLT5hc2ljX2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwltZGVsYXkoMTApOworCisJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCisJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJZWxzZQorCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDNDhdOworCisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfUENJX0NBUkRfQVNJQywgYXNpYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwljaGlwLT5hc2ljX2NvZGUgPSBhc2ljOworCW1kZWxheSgxMCk7CisKKwkvKiBEbyB0aGUgZXh0ZXJuYWwgb25lICovCisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfRVhURVJOQUxfQVNJQywKKwkJCQkmY2FyZF9md1tGV19NT05BXzJfQVNJQ10pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbWRlbGF5KDEwKTsKKwllcnIgPSBjaGVja19hc2ljX3N0YXR1cyhjaGlwKTsKKworCS8qIFNldCB1cCB0aGUgY29udHJvbCByZWdpc3RlciBpZiB0aGUgbG9hZCBzdWNjZWVkZWQgLQorCSAgIDQ4IGtIeiwgaW50ZXJuYWwgY2xvY2ssIFMvUERJRiBSQ0EgbW9kZSAqLworCWlmICghZXJyKSB7CisJCWNvbnRyb2xfcmVnID0gR01MX0NPTlZFUlRFUl9FTkFCTEUgfCBHTUxfNDhLSFo7CisJCWVyciA9IHdyaXRlX2NvbnRyb2xfcmVnKGNoaXAsIGNvbnRyb2xfcmVnLCBUUlVFKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKKworLyogRGVwZW5kaW5nIG9uIHdoYXQgZGlnaXRhbCBtb2RlIHlvdSB3YW50LCBNb25hIG5lZWRzIGRpZmZlcmVudCBBU0lDcworbG9hZGVkLiAgVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIEFTSUMgbmVlZGVkIGZvciB0aGUgbmV3IG1vZGUgYW5kIHNlZXMKK2lmIGl0IG1hdGNoZXMgdGhlIG9uZSBhbHJlYWR5IGxvYWRlZC4gKi8KK3N0YXRpYyBpbnQgc3dpdGNoX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBkb3VibGVfc3BlZWQpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCWludCBlcnI7CisKKwkvKiBDaGVjayB0aGUgY2xvY2sgZGV0ZWN0IGJpdHMgdG8gc2VlIGlmIHRoaXMgaXMKKwlhIHNpbmdsZS1zcGVlZCBjbG9jayBvciBhIGRvdWJsZS1zcGVlZCBjbG9jazsgbG9hZAorCWEgbmV3IEFTSUMgaWYgbmVjZXNzYXJ5LiAqLworCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKSB7CisJCWlmIChkb3VibGVfc3BlZWQpCisJCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDOTZdOworCQllbHNlCisJCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDNDhdOworCX0gZWxzZSB7CisJCWlmIChkb3VibGVfc3BlZWQpCisJCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDOTZdOworCQllbHNlCisJCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDNDhdOworCX0KKworCWlmIChhc2ljICE9IGNoaXAtPmFzaWNfY29kZSkgeworCQkvKiBMb2FkIHRoZSBkZXNpcmVkIEFTSUMgKi8KKwkJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfUENJX0NBUkRfQVNJQywKKwkJCQkJYXNpYyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJY2hpcC0+YXNpY19jb2RlID0gYXNpYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiByYXRlKQoreworCXUzMiBjb250cm9sX3JlZywgY2xvY2s7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCWNoYXIgZm9yY2Vfd3JpdGU7CisKKwkvKiBPbmx5IHNldCB0aGUgY2xvY2sgZm9yIGludGVybmFsIG1vZGUuICovCisJaWYgKGNoaXAtPmlucHV0X2Nsb2NrICE9IEVDSE9fQ0xPQ0tfSU5URVJOQUwpIHsKKwkJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlOiBDYW5ub3Qgc2V0IHNhbXBsZSByYXRlIC0gIgorCQkJImNsb2NrIG5vdCBzZXQgdG8gQ0xLX0NMT0NLSU5JTlRFUk5BTFxuIikpOworCQkvKiBTYXZlIHRoZSByYXRlIGFueWhvdyAqLworCQljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gY3B1X3RvX2xlMzIocmF0ZSk7CisJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTm93LCBjaGVjayB0byBzZWUgaWYgdGhlIHJlcXVpcmVkIEFTSUMgaXMgbG9hZGVkICovCisJaWYgKHJhdGUgPj0gODgyMDApIHsKKwkJaWYgKGNoaXAtPmRpZ2l0YWxfbW9kZSA9PSBESUdJVEFMX01PREVfQURBVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkKKwkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl07CisJCWVsc2UKKwkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl07CisJfSBlbHNlIHsKKwkJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCisJCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDNDhdOworCQllbHNlCisJCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDNDhdOworCX0KKworCWZvcmNlX3dyaXRlID0gMDsKKwlpZiAoYXNpYyAhPSBjaGlwLT5hc2ljX2NvZGUpIHsKKwkJaW50IGVycjsKKwkJLyogTG9hZCB0aGUgZGVzaXJlZCBBU0lDIChsb2FkX2FzaWNfZ2VuZXJpYygpIGNhbiBzbGVlcCkgKi8KKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfUENJX0NBUkRfQVNJQywKKwkJCQkJYXNpYyk7CisJCXNwaW5fbG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJY2hpcC0+YXNpY19jb2RlID0gYXNpYzsKKwkJZm9yY2Vfd3JpdGUgPSAxOworCX0KKworCS8qIENvbXB1dGUgdGhlIG5ldyBjb250cm9sIHJlZ2lzdGVyIHZhbHVlICovCisJY2xvY2sgPSAwOworCWNvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKTsKKwljb250cm9sX3JlZyAmPSBHTUxfQ0xPQ0tfQ0xFQVJfTUFTSzsKKwljb250cm9sX3JlZyAmPSBHTUxfU1BESUZfUkFURV9DTEVBUl9NQVNLOworCisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSA5NjAwMDoKKwkJY2xvY2sgPSBHTUxfOTZLSFo7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWNsb2NrID0gR01MXzg4S0haOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQljbG9jayA9IEdNTF80OEtIWiB8IEdNTF9TUERJRl9TQU1QTEVfUkFURTE7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWNsb2NrID0gR01MXzQ0S0haOworCQkvKiBQcm9mZXNzaW9uYWwgbW9kZSAqLworCQlpZiAoY29udHJvbF9yZWcgJiBHTUxfU1BESUZfUFJPX01PREUpCisJCQljbG9jayB8PSBHTUxfU1BESUZfU0FNUExFX1JBVEUwOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQljbG9jayA9IEdNTF8zMktIWiB8IEdNTF9TUERJRl9TQU1QTEVfUkFURTAgfAorCQkJR01MX1NQRElGX1NBTVBMRV9SQVRFMTsKKwkJYnJlYWs7CisJY2FzZSAyMjA1MDoKKwkJY2xvY2sgPSBHTUxfMjJLSFo7CisJCWJyZWFrOworCWNhc2UgMTYwMDA6CisJCWNsb2NrID0gR01MXzE2S0haOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCQljbG9jayA9IEdNTF8xMUtIWjsKKwkJYnJlYWs7CisJY2FzZSA4MDAwOgorCQljbG9jayA9IEdNTF84S0haOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGludmFsaWQhXG4iLCByYXRlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnRyb2xfcmVnIHw9IGNsb2NrOworCisJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGUpOwkvKiBpZ25vcmVkIGJ5IHRoZSBEU1AgKi8KKwljaGlwLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CisJREVfQUNUKCgic2V0X3NhbXBsZV9yYXRlOiAlZCBjbG9jayAlZFxuIiwgcmF0ZSwgY2xvY2spKTsKKworCXJldHVybiB3cml0ZV9jb250cm9sX3JlZyhjaGlwLCBjb250cm9sX3JlZywgZm9yY2Vfd3JpdGUpOworfQorCisKKworc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKQoreworCXUzMiBjb250cm9sX3JlZywgY2xvY2tzX2Zyb21fZHNwOworCWludCBlcnI7CisKKwlERV9BQ1QoKCJzZXRfaW5wdXRfY2xvY2s6XG4iKSk7CisKKwkvKiBQcmV2ZW50IHR3byBzaW11bHRhbmVvdXMgY2FsbHMgdG8gc3dpdGNoX2FzaWMoKSAqLworCWlmIChhdG9taWNfcmVhZCgmY2hpcC0+b3BlbmNvdW50KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBNYXNrIG9mZiB0aGUgY2xvY2sgc2VsZWN0IGJpdHMgKi8KKwljb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlcikgJgorCQlHTUxfQ0xPQ0tfQ0xFQVJfTUFTSzsKKwljbG9ja3NfZnJvbV9kc3AgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPnN0YXR1c19jbG9ja3MpOworCisJc3dpdGNoIChjbG9jaykgeworCWNhc2UgRUNIT19DTE9DS19JTlRFUk5BTDoKKwkJREVfQUNUKCgiU2V0IE1vbmEgY2xvY2sgdG8gSU5URVJOQUxcbiIpKTsKKwkJY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOworCQlyZXR1cm4gc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKTsKKwljYXNlIEVDSE9fQ0xPQ0tfU1BESUY6CisJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJZXJyID0gc3dpdGNoX2FzaWMoY2hpcCwgY2xvY2tzX2Zyb21fZHNwICYKKwkJCQkgIEdNTF9DTE9DS19ERVRFQ1RfQklUX1NQRElGOTYpOworCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlERV9BQ1QoKCJTZXQgTW9uYSBjbG9jayB0byBTUERJRlxuIikpOworCQljb250cm9sX3JlZyB8PSBHTUxfU1BESUZfQ0xPQ0s7CisJCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTUxfQ0xPQ0tfREVURUNUX0JJVF9TUERJRjk2KQorCQkJY29udHJvbF9yZWcgfD0gR01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQllbHNlCisJCQljb250cm9sX3JlZyAmPSB+R01MX0RPVUJMRV9TUEVFRF9NT0RFOworCQlicmVhazsKKwljYXNlIEVDSE9fQ0xPQ0tfV09SRDoKKwkJREVfQUNUKCgiU2V0IE1vbmEgY2xvY2sgdG8gV09SRFxuIikpOworCQlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCQllcnIgPSBzd2l0Y2hfYXNpYyhjaGlwLCBjbG9ja3NfZnJvbV9kc3AgJgorCQkJCSAgR01MX0NMT0NLX0RFVEVDVF9CSVRfV09SRDk2KTsKKwkJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJY29udHJvbF9yZWcgfD0gR01MX1dPUkRfQ0xPQ0s7CisJCWlmIChjbG9ja3NfZnJvbV9kc3AgJiBHTUxfQ0xPQ0tfREVURUNUX0JJVF9XT1JEOTYpCisJCQljb250cm9sX3JlZyB8PSBHTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCWVsc2UKKwkJCWNvbnRyb2xfcmVnICY9IH5HTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCWJyZWFrOworCWNhc2UgRUNIT19DTE9DS19BREFUOgorCQlERV9BQ1QoKCJTZXQgTW9uYSBjbG9jayB0byBBREFUXG4iKSk7CisJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgIT0gRElHSVRBTF9NT0RFX0FEQVQpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJY29udHJvbF9yZWcgfD0gR01MX0FEQVRfQ0xPQ0s7CisJCWNvbnRyb2xfcmVnICY9IH5HTUxfRE9VQkxFX1NQRUVEX01PREU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFX0FDVCgoIklucHV0IGNsb2NrIDB4JXggbm90IHN1cHBvcnRlZCBmb3IgTW9uYVxuIiwgY2xvY2spKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hpcC0+aW5wdXRfY2xvY2sgPSBjbG9jazsKKwlyZXR1cm4gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsIFRSVUUpOworfQorCisKKworc3RhdGljIGludCBkc3Bfc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKQoreworCXUzMiBjb250cm9sX3JlZzsKKwlpbnQgZXJyLCBpbmNvbXBhdGlibGVfY2xvY2s7CisKKwkvKiBTZXQgY2xvY2sgdG8gImludGVybmFsIiBpZiBpdCdzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5ldyBtb2RlICovCisJaW5jb21wYXRpYmxlX2Nsb2NrID0gRkFMU0U7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTDoKKwljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9SQ0E6CisJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX0FEQVQpCisJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9BREFUOgorCQlpZiAoY2hpcC0+aW5wdXRfY2xvY2sgPT0gRUNIT19DTE9DS19TUERJRikKKwkJCWluY29tcGF0aWJsZV9jbG9jayA9IFRSVUU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFX0FDVCgoIkRpZ2l0YWwgbW9kZSBub3Qgc3VwcG9ydGVkOiAlZFxuIiwgbW9kZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKworCWlmIChpbmNvbXBhdGlibGVfY2xvY2spIHsJLyogU3dpdGNoIHRvIDQ4S0h6LCBpbnRlcm5hbCAqLworCQljaGlwLT5zYW1wbGVfcmF0ZSA9IDQ4MDAwOworCQlzZXRfaW5wdXRfY2xvY2soY2hpcCwgRUNIT19DTE9DS19JTlRFUk5BTCk7CisJfQorCisJLyogQ2xlYXIgdGhlIGN1cnJlbnQgZGlnaXRhbCBtb2RlICovCisJY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpOworCWNvbnRyb2xfcmVnICY9IEdNTF9ESUdJVEFMX01PREVfQ0xFQVJfTUFTSzsKKworCS8qIFR3ZWFrIHRoZSBjb250cm9sIHJlZyAqLworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUw6CisJCWNvbnRyb2xfcmVnIHw9IEdNTF9TUERJRl9PUFRJQ0FMX01PREU7CisJCWJyZWFrOworCWNhc2UgRElHSVRBTF9NT0RFX1NQRElGX1JDQToKKwkJLyogR01MX1NQRElGX09QVElDQUxfTU9ERSBiaXQgY2xlYXJlZCAqLworCQlicmVhazsKKwljYXNlIERJR0lUQUxfTU9ERV9BREFUOgorCQkvKiBJZiB0aGUgY3VycmVudCBBU0lDIGlzIHRoZSA5NktIeiBBU0lDLCBzd2l0Y2ggdGhlIEFTSUMKKwkJICAgYW5kIHNldCB0byA0OCBLSHogKi8KKwkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl0gfHwKKwkJICAgIGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl0pIHsKKwkJCXNldF9zYW1wbGVfcmF0ZShjaGlwLCA0ODAwMCk7CisJCX0KKwkJY29udHJvbF9yZWcgfD0gR01MX0FEQVRfTU9ERTsKKwkJY29udHJvbF9yZWcgJj0gfkdNTF9ET1VCTEVfU1BFRURfTU9ERTsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gd3JpdGVfY29udHJvbF9yZWcoY2hpcCwgY29udHJvbF9yZWcsIEZBTFNFKTsKKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IG1vZGU7CisKKwlERV9BQ1QoKCJzZXRfZGlnaXRhbF9tb2RlIHRvICVkXG4iLCBtb2RlKSk7CisJcmV0dXJuIGluY29tcGF0aWJsZV9jbG9jazsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggNDJhMzU4Zi4uZDZmMTM1ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAJfQogCWVtdS0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZW11MTBrMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgIkVNVTEwSzEiLCAodm9pZCAqKWVtdSkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9lbXUxMGsxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkVNVTEwSzEiLCAodm9pZCAqKWVtdSkpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IDBmYjI3ZTQuLjIxNjcyNzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtOTI4LDcgKzkyOCw3IEBACiAJfQogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZW11MTBrMXhfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiRU1VMTBLMVgiLAorCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkVNVTEwSzFYIiwKIAkJCSh2b2lkICopY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiZW11MTBrMXg6IGNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfZW11MTBrMXhfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IDlkNDZiYmUuLjdhOTg1YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtMjEzNSw3ICsyMTM1LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJZW5zb25pcS0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F1ZGlvcGNpX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F1ZGlvcGNpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKIAkJCSJFbnNvbmlxIEF1ZGlvUENJIiwgZW5zb25pcSkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9lbnNvbmlxX2ZyZWUoZW5zb25pcSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggY2E2NjAzZi4uMTExM2IxMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTkzOC5jCisrKyBiL3NvdW5kL3BjaS9lczE5MzguYwpAQCAtMTQyOSw3ICsxNDI5LDcgQEAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwogCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CiAJcmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9lczE5MzhfaW50ZXJydXB0LAotCQkgICAgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiRVMxOTM4IiwgY2hpcCk7CisJCSAgICBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiRVMxOTM4IiwgY2hpcCk7CiAJY2hpcC0+aXJxID0gcGNpLT5pcnE7CiAJc25kX2VzMTkzOF9jaGlwX2luaXQoY2hpcCk7CiAKQEAgLTE1NDQsNyArMTU0NCw3IEBACiAJY2hpcC0+dmNfcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDIpOwogCWNoaXAtPm1wdV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMyk7CiAJY2hpcC0+Z2FtZV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgNCk7Ci0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZXMxOTM4X2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VzMTkzOF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQkiRVMxOTM4IiwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9lczE5MzhfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBiZmEwODc2Li5hNDkxYzhmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0yNTk3LDcgKzI1OTcsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAljaGlwLT5pb19wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7Ci0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZXMxOTY4X2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VzMTk2OF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQkiRVNTIE1hZXN0cm8iLCAodm9pZCopY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9lczE5NjhfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggMGFmYTU3My4uM2FlZDI3ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTEzNzEsNyArMTM3MSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCWNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9mbTgwMV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9mbTgwMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQkiRk04MDEiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIGNoaXAtPmlycSk7CiAJCXNuZF9mbTgwMV9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggOGMyYTgxNy4uMjMyMDFmMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC00MDgsNyArNDA4LDkgQEAKIAkJCXUzMiBtYXNrID0gcHJlc2V0LT5tYXNrOwogCQkJaWYgKCEgbWFzaykKIAkJCQltYXNrID0gfjA7Ci0JCQlpZiAocHJlc2V0LT5pZCA9PSAoY29kZWMtPnZlbmRvcl9pZCAmIG1hc2spKQorCQkJaWYgKHByZXNldC0+aWQgPT0gKGNvZGVjLT52ZW5kb3JfaWQgJiBtYXNrKSAmJgorCQkJICAgICghIHByZXNldC0+cmV2IHx8CisJCQkgICAgIHByZXNldC0+cmV2ID09IGNvZGVjLT5yZXZpc2lvbl9pZCkpCiAJCQkJcmV0dXJuIHByZXNldDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDQwNzBiNWMuLjAyNWFmN2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMTQ4Niw3ICsxNDg2LDcgQEAKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBhenhfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBhenhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJIkhEQSBJbnRlbCIsICh2b2lkKiljaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCWVyciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IGRkNGUwMGEuLjMzYjdkNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtNzk5LDYgKzc5OSw4IEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDgxOGYsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1AgfSwgLyogQVNVUyBQNUdWLU1YICovCiAJeyAubW9kZWxuYW1lID0gImxhcHRvcC1lYXBkIiwJLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QX0VBUEQgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxNDRkLCAucGNpX3N1YmRldmljZSA9IDB4YzAyMywKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIFNhbXN1bmcgWDYwIENoYW5lICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTQ0ZCwgLnBjaV9zdWJkZXZpY2UgPSAweGMwMjQsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBTYW1zdW5nIFI2NS1UMjMwMCBDaGFyaXMgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTE1MywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggOThiOWYxNmMuLjE4ZDEwNTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC03OCw2ICs3OCw3IEBACiBlbnVtIHsKIAlBTEMyNjJfQkFTSUMsCiAJQUxDMjYyX0ZVSklUU1UsCisJQUxDMjYyX0hQX0JQQywKIAlBTEMyNjJfQVVUTywKIAlBTEMyNjJfTU9ERUxfTEFTVCAvKiBsYXN0IHRhZyAqLwogfTsKQEAgLTg1LDYgKzg2LDcgQEAKIC8qIEFMQzg2MSBtb2RlbHMgKi8KIGVudW0gewogCUFMQzg2MV8zU1QsCisJQUxDNjYwXzNTVCwKIAlBTEM4NjFfM1NUX0RJRywKIAlBTEM4NjFfNlNUX0RJRywKIAlBTEM4NjFfQVVUTywKQEAgLTk5LDYgKzEwMSwxNyBAQAogCUFMQzg4Ml9NT0RFTF9MQVNULAogfTsKIAorLyogQUxDODgzIG1vZGVscyAqLworZW51bSB7CisJQUxDODgzXzNTVF8yY2hfRElHLAorCUFMQzg4M18zU1RfNmNoX0RJRywKKwlBTEM4ODNfM1NUXzZjaCwKKwlBTEM4ODNfNlNUX0RJRywKKwlBTEM4ODhfREVNT19CT0FSRCwKKwlBTEM4ODNfQVVUTywKKwlBTEM4ODNfTU9ERUxfTEFTVCwKK307CisKIC8qIGZvciBHUElPIFBvbGwgKi8KICNkZWZpbmUgR1BJT19NQVNLCTB4MDMKIApAQCAtMTA4LDcgKzEyMSw4IEBACiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7CiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCi0JCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTCB0ZXJtaW5hdGlvbiEKKwkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCisJCQkJCQkgKiB0ZXJtaW5hdGlvbiEKIAkJCQkJCSAqLwogCXVuc2lnbmVkIGludCBudW1faW5pdF92ZXJiczsKIApAQCAtMTYzLDcgKzE3Nyw5IEBACiAgKiBjb25maWd1cmF0aW9uIHRlbXBsYXRlIC0gdG8gYmUgY29waWVkIHRvIHRoZSBzcGVjIGluc3RhbmNlCiAgKi8KIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCB7Ci0Jc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsgLyogc2hvdWxkIGJlIGlkZW50aWNhbCBzaXplIHdpdGggc3BlYyAqLworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07IC8qIHNob3VsZCBiZSBpZGVudGljYWwgc2l6ZQorCQkJCQkgICAgICogd2l0aCBzcGVjCisJCQkJCSAgICAgKi8KIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CiAJdW5zaWduZWQgaW50IG51bV9kYWNzOwogCWhkYV9uaWRfdCAqZGFjX25pZHM7CkBAIC0xODQsNyArMjAwLDggQEAKIC8qCiAgKiBpbnB1dCBNVVggaGFuZGxpbmcKICAqLwotc3RhdGljIGludCBhbGNfbXV4X2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3N0YXRpYyBpbnQgYWxjX211eF9lbnVtX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xOTQsNyArMjExLDggQEAKIAlyZXR1cm4gc25kX2hkYV9pbnB1dF9tdXhfaW5mbygmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdLCB1aW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgYWxjX211eF9lbnVtX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IGFsY19tdXhfZW51bV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0yMDQsMjEgKzIyMiwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFsY19tdXhfZW51bV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBhbGNfbXV4X2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBhZGNfaWR4ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCk7CiAJdW5zaWduZWQgaW50IG11eF9pZHggPSBhZGNfaWR4ID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBhZGNfaWR4OwogCXJldHVybiBzbmRfaGRhX2lucHV0X211eF9wdXQoY29kZWMsICZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF0sIHVjb250cm9sLAotCQkJCSAgICAgc3BlYy0+YWRjX25pZHNbYWRjX2lkeF0sICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdKTsKKwkJCQkgICAgIHNwZWMtPmFkY19uaWRzW2FkY19pZHhdLAorCQkJCSAgICAgJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF0pOwogfQogCiAKIC8qCiAgKiBjaGFubmVsIG1vZGUgc2V0dGluZwogICovCi1zdGF0aWMgaW50IGFsY19jaF9tb2RlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitzdGF0aWMgaW50IGFsY19jaF9tb2RlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTIyNiwyMCArMjQ3LDI0IEBACiAJCQkJICAgIHNwZWMtPm51bV9jaGFubmVsX21vZGUpOwogfQogCi1zdGF0aWMgaW50IGFsY19jaF9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IGFsY19jaF9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXJldHVybiBzbmRfaGRhX2NoX21vZGVfZ2V0KGNvZGVjLCB1Y29udHJvbCwgc3BlYy0+Y2hhbm5lbF9tb2RlLAotCQkJCSAgIHNwZWMtPm51bV9jaGFubmVsX21vZGUsIHNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyk7CisJCQkJICAgc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSwKKwkJCQkgICBzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMpOwogfQogCi1zdGF0aWMgaW50IGFsY19jaF9tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IGFsY19jaF9tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXJldHVybiBzbmRfaGRhX2NoX21vZGVfcHV0KGNvZGVjLCB1Y29udHJvbCwgc3BlYy0+Y2hhbm5lbF9tb2RlLAotCQkJCSAgIHNwZWMtPm51bV9jaGFubmVsX21vZGUsICZzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMpOworCQkJCSAgIHNwZWMtPm51bV9jaGFubmVsX21vZGUsCisJCQkJICAgJnNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyk7CiB9CiAKIC8qCkBAIC0yOTAsNyArMzE1LDggQEAKICNkZWZpbmUgYWxjX3Bpbl9tb2RlX25faXRlbXMoX2RpcikgXAogCShhbGNfcGluX21vZGVfbWF4KF9kaXIpLWFsY19waW5fbW9kZV9taW4oX2RpcikrMSkKIAotc3RhdGljIGludCBhbGNfcGluX21vZGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3N0YXRpYyBpbnQgYWxjX3Bpbl9tb2RlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJdW5zaWduZWQgaW50IGl0ZW1fbnVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbTsKIAl1bnNpZ25lZCBjaGFyIGRpciA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwpAQCAtMzA1LDQwICszMzEsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGNfcGluX21vZGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgYWxjX3Bpbl9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CiAJdW5zaWduZWQgY2hhciBkaXIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JdW5zaWduZWQgaW50IHBpbmN0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYyxuaWQsMCxBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsMHgwMCk7CisJdW5zaWduZWQgaW50IHBpbmN0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkJIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJCSAweDAwKTsKIAogCS8qIEZpbmQgZW51bWVyYXRlZCB2YWx1ZSBmb3IgY3VycmVudCBwaW5jdGwgc2V0dGluZyAqLwogCWkgPSBhbGNfcGluX21vZGVfbWluKGRpcik7Ci0Jd2hpbGUgKGFsY19waW5fbW9kZV92YWx1ZXNbaV0hPXBpbmN0bCAmJiBpPD1hbGNfcGluX21vZGVfbWF4KGRpcikpCisJd2hpbGUgKGFsY19waW5fbW9kZV92YWx1ZXNbaV0gIT0gcGluY3RsICYmIGkgPD0gYWxjX3Bpbl9tb2RlX21heChkaXIpKQogCQlpKys7Ci0JKnZhbHAgPSBpPD1hbGNfcGluX21vZGVfbWF4KGRpcik/aTphbGNfcGluX21vZGVfbWluKGRpcik7CisJKnZhbHAgPSBpIDw9IGFsY19waW5fbW9kZV9tYXgoZGlyKSA/IGk6IGFsY19waW5fbW9kZV9taW4oZGlyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGNfcGluX21vZGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgYWxjX3Bpbl9tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzaWduZWQgaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CiAJdW5zaWduZWQgY2hhciBkaXIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKIAlsb25nIHZhbCA9ICp1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKLQl1bnNpZ25lZCBpbnQgcGluY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLG5pZCwwLEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwweDAwKTsKKwl1bnNpZ25lZCBpbnQgcGluY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkJIDB4MDApOwogCi0JaWYgKHZhbDxhbGNfcGluX21vZGVfbWluKGRpcikgfHwgdmFsPmFsY19waW5fbW9kZV9tYXgoZGlyKSkgCisJaWYgKHZhbCA8IGFsY19waW5fbW9kZV9taW4oZGlyKSB8fCB2YWwgPiBhbGNfcGluX21vZGVfbWF4KGRpcikpIAogCQl2YWwgPSBhbGNfcGluX21vZGVfbWluKGRpcik7CiAKIAljaGFuZ2UgPSBwaW5jdGwgIT0gYWxjX3Bpbl9tb2RlX3ZhbHVlc1t2YWxdOwogCWlmIChjaGFuZ2UpIHsKIAkJLyogU2V0IHBpbiBtb2RlIHRvIHRoYXQgcmVxdWVzdGVkICovCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJYWxjX3Bpbl9tb2RlX3ZhbHVlc1t2YWxdKTsKKwkJCQkgICAgYWxjX3Bpbl9tb2RlX3ZhbHVlc1t2YWxdKTsKIAogCQkvKiBBbHNvIGVuYWJsZSB0aGUgcmV0YXNraW5nIHBpbidzIGlucHV0L291dHB1dCBhcyByZXF1aXJlZCAKIAkJICogZm9yIHRoZSByZXF1ZXN0ZWQgcGluIG1vZGUuICBFbnVtIHZhbHVlcyBvZiAyIG9yIGxlc3MgYXJlCkBAIC0zNTEsMTUgKzM4MywxOSBAQAogCQkgKiB0aGlzIHR1cm5zIG91dCB0byBiZSBuZWNlc3NhcnkgaW4gdGhlIGZ1dHVyZS4KIAkJICovCiAJCWlmICh2YWwgPD0gMikgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYyxuaWQsMCxBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJCUFNUF9PVVRfTVVURSk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLG5pZCwwLEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkJQU1QX0lOX1VOTVVURSgwKSk7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJCSAgICBBTVBfSU5fVU5NVVRFKDApKTsKIAkJfSBlbHNlIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJCQlBTVBfSU5fTVVURSgwKSk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLG5pZCwwLEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkJQU1QX09VVF9VTk1VVEUpOworCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkJICAgIEFNUF9JTl9NVVRFKDApKTsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJCSAgICBBTVBfT1VUX1VOTVVURSk7CiAJCX0KIAl9CiAJcmV0dXJuIGNoYW5nZTsKQEAgLTM3OCw3ICs0MTQsOCBAQAogICogbmVlZGVkIGZvciBhbnkgInByb2R1Y3Rpb24iIG1vZGVscy4KICAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLXN0YXRpYyBpbnQgYWxjX2dwaW9fZGF0YV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQorc3RhdGljIGludCBhbGNfZ3Bpb19kYXRhX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwogCXVpbmZvLT5jb3VudCA9IDE7CkBAIC0zODYsMzMgKzQyMywzOCBAQAogCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CiAJcmV0dXJuIDA7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXN0YXRpYyBpbnQgYWxjX2dwaW9fZGF0YV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBhbGNfZ3Bpb19kYXRhX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOwogCXVuc2lnbmVkIGNoYXIgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKLQl1bnNpZ25lZCBpbnQgdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLG5pZCwwLEFDX1ZFUkJfR0VUX0dQSU9fREFUQSwweDAwKTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0dQSU9fREFUQSwgMHgwMCk7CiAKIAkqdmFscCA9ICh2YWwgJiBtYXNrKSAhPSAwOwogCXJldHVybiAwOwogfQotc3RhdGljIGludCBhbGNfZ3Bpb19kYXRhX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IGFsY19ncGlvX2RhdGFfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzaWduZWQgaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CiAJdW5zaWduZWQgY2hhciBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CiAJbG9uZyB2YWwgPSAqdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JdW5zaWduZWQgaW50IGdwaW9fZGF0YSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYyxuaWQsMCxBQ19WRVJCX0dFVF9HUElPX0RBVEEsMHgwMCk7CisJdW5zaWduZWQgaW50IGdwaW9fZGF0YSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfR0VUX0dQSU9fREFUQSwKKwkJCQkJCSAgICAweDAwKTsKIAogCS8qIFNldC91bnNldCB0aGUgbWFza2VkIEdQSU8gYml0KHMpIGFzIG5lZWRlZCAqLwotCWNoYW5nZSA9ICh2YWw9PTA/MDptYXNrKSAhPSAoZ3Bpb19kYXRhICYgbWFzayk7Ci0JaWYgKHZhbD09MCkKKwljaGFuZ2UgPSAodmFsID09IDAgPyAwIDogbWFzaykgIT0gKGdwaW9fZGF0YSAmIG1hc2spOworCWlmICh2YWwgPT0gMCkKIAkJZ3Bpb19kYXRhICY9IH5tYXNrOwogCWVsc2UKIAkJZ3Bpb19kYXRhIHw9IG1hc2s7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYyxuaWQsMCxBQ19WRVJCX1NFVF9HUElPX0RBVEEsZ3Bpb19kYXRhKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgZ3Bpb19kYXRhKTsKIAogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC00MzIsNyArNDc0LDggQEAKICAqIG5lY2Vzc2FyeS4KICAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLXN0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3N0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwogCXVpbmZvLT5jb3VudCA9IDE7CkBAIC00NDAsMzMgKzQ4MywzOSBAQAogCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CiAJcmV0dXJuIDA7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXN0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOwogCXVuc2lnbmVkIGNoYXIgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKLQl1bnNpZ25lZCBpbnQgdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLG5pZCwwLEFDX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVCwweDAwKTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVCwgMHgwMCk7CiAKIAkqdmFscCA9ICh2YWwgJiBtYXNrKSAhPSAwOwogCXJldHVybiAwOwogfQotc3RhdGljIGludCBhbGNfc3BkaWZfY3RybF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBhbGNfc3BkaWZfY3RybF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzaWduZWQgaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CiAJdW5zaWduZWQgY2hhciBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CiAJbG9uZyB2YWwgPSAqdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JdW5zaWduZWQgaW50IGN0cmxfZGF0YSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYyxuaWQsMCxBQ19WRVJCX0dFVF9ESUdJX0NPTlZFUlQsMHgwMCk7CisJdW5zaWduZWQgaW50IGN0cmxfZGF0YSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVCwKKwkJCQkJCSAgICAweDAwKTsKIAogCS8qIFNldC91bnNldCB0aGUgbWFza2VkIGNvbnRyb2wgYml0KHMpIGFzIG5lZWRlZCAqLwotCWNoYW5nZSA9ICh2YWw9PTA/MDptYXNrKSAhPSAoY3RybF9kYXRhICYgbWFzayk7CisJY2hhbmdlID0gKHZhbCA9PSAwID8gMCA6IG1hc2spICE9IChjdHJsX2RhdGEgJiBtYXNrKTsKIAlpZiAodmFsPT0wKQogCQljdHJsX2RhdGEgJj0gfm1hc2s7CiAJZWxzZQogCQljdHJsX2RhdGEgfD0gbWFzazsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLG5pZCwwLEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLGN0cmxfZGF0YSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwKKwkJCSAgICBjdHJsX2RhdGEpOwogCiAJcmV0dXJuIGNoYW5nZTsKIH0KQEAgLTQ4MSwxNCArNTMwLDE3IEBACiAvKgogICogc2V0IHVwIGZyb20gdGhlIHByZXNldCB0YWJsZQogICovCi1zdGF0aWMgdm9pZCBzZXR1cF9wcmVzZXQoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgKnByZXNldCkKK3N0YXRpYyB2b2lkIHNldHVwX3ByZXNldChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCisJCQkgY29uc3Qgc3RydWN0IGFsY19jb25maWdfcHJlc2V0ICpwcmVzZXQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVzZXQtPm1peGVycykgJiYgcHJlc2V0LT5taXhlcnNbaV07IGkrKykKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBwcmVzZXQtPm1peGVyc1tpXTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVzZXQtPmluaXRfdmVyYnMpICYmIHByZXNldC0+aW5pdF92ZXJic1tpXTsgaSsrKQotCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gcHJlc2V0LT5pbml0X3ZlcmJzW2ldOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZXNldC0+aW5pdF92ZXJicykgJiYgcHJlc2V0LT5pbml0X3ZlcmJzW2ldOworCSAgICAgaSsrKQorCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0KKwkJCXByZXNldC0+aW5pdF92ZXJic1tpXTsKIAkKIAlzcGVjLT5jaGFubmVsX21vZGUgPSBwcmVzZXQtPmNoYW5uZWxfbW9kZTsKIAlzcGVjLT5udW1fY2hhbm5lbF9tb2RlID0gcHJlc2V0LT5udW1fY2hhbm5lbF9tb2RlOwpAQCAtNTE3LDggKzU2OSw4IEBACiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKICAqIERBQzogRnJvbnQgPSAweDAyICgweDBjKSwgU3VyciA9IDB4MDUgKDB4MGYpLCBDTEZFID0gMHgwNCAoMHgwZSkKLSAqIFBpbiBhc3NpZ25tZW50OiBGcm9udCA9IDB4MTQsIExpbmUtSW4vU3VyciA9IDB4MWEsIE1pYy9DTEZFID0gMHgxOCwgRi1NaWMgPSAweDFiCi0gKiAgICAgICAgICAgICAgICAgSFAgPSAweDE5CisgKiBQaW4gYXNzaWdubWVudDogRnJvbnQgPSAweDE0LCBMaW5lLUluL1N1cnIgPSAweDFhLCBNaWMvQ0xGRSA9IDB4MTgsCisgKiAgICAgICAgICAgICAgICAgRi1NaWMgPSAweDFiLCBIUCA9IDB4MTkKICAqLwogCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4MF9kYWNfbmlkc1s0XSA9IHsKQEAgLTY2Miw3ICs3MTQsOCBAQAogLyoKICAqIEFMQzg4MCA1LXN0YWNrIG1vZGVsCiAgKgotICogREFDOiBGcm9udCA9IDB4MDIgKDB4MGMpLCBTdXJyID0gMHgwNSAoMHgwZiksIENMRkUgPSAweDA0ICgweDBkKSwgU2lkZSA9IDB4MDIgKDB4ZCkKKyAqIERBQzogRnJvbnQgPSAweDAyICgweDBjKSwgU3VyciA9IDB4MDUgKDB4MGYpLCBDTEZFID0gMHgwNCAoMHgwZCksCisgKiAgICAgIFNpZGUgPSAweDAyICgweGQpCiAgKiBQaW4gYXNzaWdubWVudDogRnJvbnQgPSAweDE0LCBTdXJyID0gMHgxNywgQ0xGRSA9IDB4MTYKICAqICAgICAgICAgICAgICAgICBMaW5lLUluL1NpZGUgPSAweDFhLCBNaWMgPSAweDE4LCBGLU1pYyA9IDB4MWIsIEhQID0gMHgxOQogICovCkBAIC03MDAsNyArNzUzLDggQEAKIC8qCiAgKiBBTEM4ODAgNi1zdGFjayBtb2RlbAogICoKLSAqIERBQzogRnJvbnQgPSAweDAyICgweDBjKSwgU3VyciA9IDB4MDMgKDB4MGQpLCBDTEZFID0gMHgwNCAoMHgwZSksIFNpZGUgPSAweDA1ICgweDBmKQorICogREFDOiBGcm9udCA9IDB4MDIgKDB4MGMpLCBTdXJyID0gMHgwMyAoMHgwZCksIENMRkUgPSAweDA0ICgweDBlKSwKKyAqICAgICAgU2lkZSA9IDB4MDUgKDB4MGYpCiAgKiBQaW4gYXNzaWdubWVudDogRnJvbnQgPSAweDE0LCBTdXJyID0gMHgxNSwgQ0xGRSA9IDB4MTYsIFNpZGUgPSAweDE3LAogICogICBNaWMgPSAweDE4LCBGLU1pYyA9IDB4MTksIExpbmUgPSAweDFhLCBIUCA9IDB4MWIKICAqLwpAQCAtODExLDcgKzg2NSw4IEBACiAgKiBaNzEwViBtb2RlbAogICoKICAqIERBQzogRnJvbnQgPSAweDAyICgweDBjKSwgSFAgPSAweDAzICgweDBkKQotICogUGluIGFzc2lnbm1lbnQ6IEZyb250ID0gMHgxNCwgSFAgPSAweDE1LCBNaWMgPSAweDE4LCBNaWMyID0gMHgxOSg/KSwgTGluZSA9IDB4MWEKKyAqIFBpbiBhc3NpZ25tZW50OiBGcm9udCA9IDB4MTQsIEhQID0gMHgxNSwgTWljID0gMHgxOCwgTWljMiA9IDB4MTkoPyksCisgKiAgICAgICAgICAgICAgICAgTGluZSA9IDB4MWEKICAqLwogCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4MF96NzF2X2RhY19uaWRzWzFdID0gewpAQCAtOTY2LDcgKzEwMjEsOCBAQAogCX0KIAogCWlmIChzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCkgewotCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9vdXRfY3Rscyhjb2RlYywgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOworCQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9vdXRfY3Rscyhjb2RlYywKKwkJCQkJCSAgICBzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC05OTksOCArMTA1NSw4IEBACiAKIAkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKIAkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udCBwYW5lbAotCSAqIG1pYyAobWljIDIpCisJICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IgZnJvbnQKKwkgKiBwYW5lbCBtaWMgKG1pYyAyKQogCSAqLwogCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KIAl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTU0LDggKzEyMTAsOCBAQAogCiAvKgogICogNi1zdGFjayBwaW4gY29uZmlndXJhdGlvbjoKLSAqIGZyb250ID0gMHgxNCwgc3VyciA9IDB4MTUsIGNsZmUgPSAweDE2LCBzaWRlID0gMHgxNywgbWljID0gMHgxOCwgZi1taWMgPSAweDE5LAotICogbGluZSA9IDB4MWEsIEhQID0gMHgxYgorICogZnJvbnQgPSAweDE0LCBzdXJyID0gMHgxNSwgY2xmZSA9IDB4MTYsIHNpZGUgPSAweDE3LCBtaWMgPSAweDE4LAorICogZi1taWMgPSAweDE5LCBsaW5lID0gMHgxYSwgSFAgPSAweDFiCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3Bpbl82c3RhY2tfaW5pdF92ZXJic1tdID0gewogCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIEhQICovCkBAIC0xNTg3LDggKzE2NDMsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX3ByZXBhcmUoY29kZWMsICZzcGVjLT5tdWx0aW91dCwgc3RyZWFtX3RhZywKLQkJCQkJCWZvcm1hdCwgc3Vic3RyZWFtKTsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX3ByZXBhcmUoY29kZWMsICZzcGVjLT5tdWx0aW91dCwKKwkJCQkJCXN0cmVhbV90YWcsIGZvcm1hdCwgc3Vic3RyZWFtKTsKIH0KIAogc3RhdGljIGludCBhbGM4ODBfcGxheWJhY2tfcGNtX2NsZWFudXAoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTE2NDAsNyArMTY5Niw4IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgc3BlYy0+YWRjX25pZHNbc3Vic3RyZWFtLT5udW1iZXJdLCAwLCAwLCAwKTsKKwlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgc3BlYy0+YWRjX25pZHNbc3Vic3RyZWFtLT5udW1iZXJdLAorCQkJCSAgIDAsIDAsIDApOwogCXJldHVybiAwOwogfQogCkBAIC0xODIyLDcgKzE4NzksOCBAQAogCXsgOCwgTlVMTCB9LAogfTsKIAotc3RhdGljIGludCBhbGNfdGVzdF9waW5fY3RsX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitzdGF0aWMgaW50IGFsY190ZXN0X3Bpbl9jdGxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsKIAkJIk4vQSIsICJMaW5lIE91dCIsICJIUCBPdXQiLApAQCAtMTgzNyw3ICsxODk1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGNfdGVzdF9waW5fY3RsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IGFsY190ZXN0X3Bpbl9jdGxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWhkYV9uaWRfdCBuaWQgPSAoaGRhX25pZF90KWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwpAQCAtMTg2Myw3ICsxOTIyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGNfdGVzdF9waW5fY3RsX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IGFsY190ZXN0X3Bpbl9jdGxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWhkYV9uaWRfdCBuaWQgPSAoaGRhX25pZF90KWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwpAQCAtMTg4MSwxNSArMTk0MSwxOCBAQAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKIAluZXdfY3RsID0gY3Rsc1t1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdXTsKIAlpZiAob2xkX2N0bCAhPSBuZXdfY3RsKSB7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBuZXdfY3RsKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIG5ld19jdGwpOwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkJICAgIHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj0gMyA/IDB4YjA4MCA6IDB4YjAwMCk7CisJCQkJICAgICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID49IDMgPworCQkJCSAgICAgMHhiMDgwIDogMHhiMDAwKSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGNfdGVzdF9waW5fc3JjX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitzdGF0aWMgaW50IGFsY190ZXN0X3Bpbl9zcmNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgIkNMRkUiLCAiU2lkZSIKQEAgLTE5MDMsNyArMTk2Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWxjX3Rlc3RfcGluX3NyY19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBhbGNfdGVzdF9waW5fc3JjX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0gKGhkYV9uaWRfdClrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTE5MTQsNyArMTk3OCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWxjX3Rlc3RfcGluX3NyY19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBhbGNfdGVzdF9waW5fc3JjX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0gKGhkYV9uaWRfdClrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTI3MzksNyArMjgwNCw4IEBACiAKIAlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgYWxjODgwX2NmZ190YmwpOwogCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEM4ODBfTU9ERUxfTEFTVCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIEFMQzg4MCwgdHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBBTEM4ODAsICIKKwkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIpOwogCQlib2FyZF9jb25maWcgPSBBTEM4ODBfQVVUTzsKIAl9CiAKQEAgLTI3NTAsNyArMjgxNiw5IEBACiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgaWYgKCEgZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiBmcm9tIEJJT1MuICBVc2luZyAzLXN0YWNrIG1vZGUuLi5cbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCisJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIDMtc3RhY2sgbW9kZS4uLlxuIik7CiAJCQlib2FyZF9jb25maWcgPSBBTEM4ODBfM1NUOwogCQl9CiAJfQpAQCAtMzk0Nyw3ICs0MDE1LDggQEAKIAogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBhbGMyNjBfY2ZnX3RibCk7CiAJaWYgKGJvYXJkX2NvbmZpZyA8IDAgfHwgYm9hcmRfY29uZmlnID49IEFMQzI2MF9NT0RFTF9MQVNUKSB7Ci0JCXNuZF9wcmludGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIEFMQzI2MFxuIik7CisJCXNuZF9wcmludGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIEFMQzI2MCwgIgorCQkJICAgInRyeWluZyBhdXRvLXByb2JlIGZyb20gQklPUy4uLlxuIik7CiAJCWJvYXJkX2NvbmZpZyA9IEFMQzI2MF9BVVRPOwogCX0KIApAQCAtMzk1OCw3ICs0MDI3LDkgQEAKIAkJCWFsY19mcmVlKGNvZGVjKTsKIAkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSBpZiAoISBlcnIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogQ2Fubm90IHNldCB1cCBjb25maWd1cmF0aW9uIGZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgImhkYV9jb2RlYzogQ2Fubm90IHNldCB1cCBjb25maWd1cmF0aW9uICIKKwkJCSAgICAgICAiZnJvbSBCSU9TLiAgVXNpbmcgYmFzZSBtb2RlLi4uXG4iKTsKIAkJCWJvYXJkX2NvbmZpZyA9IEFMQzI2MF9CQVNJQzsKIAkJfQogCX0KQEAgLTQzMjAsOSArNDM5MSwxMiBAQAogc3RhdGljIHN0cnVjdCBoZGFfYm9hcmRfY29uZmlnIGFsYzg4Ml9jZmdfdGJsW10gPSB7CiAJeyAubW9kZWxuYW1lID0gIjNzdGFjay1kaWciLCAuY29uZmlnID0gQUxDODgyXzNTVF9ESUcgfSwKIAl7IC5tb2RlbG5hbWUgPSAiNnN0YWNrLWRpZyIsIC5jb25maWcgPSBBTEM4ODJfNlNUX0RJRyB9LAotCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDE0NjIsIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LCAuY29uZmlnID0gQUxDODgyXzZTVF9ESUcgfSwgLyogTVNJICAqLwotCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNWIsIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LCAuY29uZmlnID0gQUxDODgyXzZTVF9ESUcgfSwgLyogRm94Y29ubiAqLwotCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwMTksIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LCAuY29uZmlnID0gQUxDODgyXzZTVF9ESUcgfSwgLyogRUNTICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTQ2MiwgLnBjaV9zdWJkZXZpY2UgPSAweDY2NjgsCisJICAuY29uZmlnID0gQUxDODgyXzZTVF9ESUcgfSwgLyogTVNJICAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNWIsIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LAorCSAgLmNvbmZpZyA9IEFMQzg4Ml82U1RfRElHIH0sIC8qIEZveGNvbm4gKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDE5LCAucGNpX3N1YmRldmljZSA9IDB4NjY2OCwKKwkgIC5jb25maWcgPSBBTEM4ODJfNlNUX0RJRyB9LCAvKiBFQ1MgdG8gSW50ZWwqLwogCXsgLm1vZGVsbmFtZSA9ICJhdXRvIiwgLmNvbmZpZyA9IEFMQzg4Ml9BVVRPIH0sCiAJe30KIH07CkBAIC00NDM5LDEwICs0NTEzLDYgQEAKIAlhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiB9CiAKLS8qCi0gKiAgQUxDODgyIEhlYWRwaG9uZSBwb2xsIGluIDMuNS4xYSBvciAzLjUuMgotICovCi0KIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODgyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKQEAgLTQ0NTcsNyArNDUyNyw4IEBACiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIGFsYzg4Ml9jZmdfdGJsKTsKIAogCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEM4ODJfTU9ERUxfTEFTVCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIEFMQzg4MiwgdHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBBTEM4ODIsICIKKwkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIpOwogCQlib2FyZF9jb25maWcgPSBBTEM4ODJfQVVUTzsKIAl9CiAKQEAgLTQ0NjgsNyArNDUzOSw5IEBACiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgaWYgKCEgZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiBmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCisJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7CiAJCQlib2FyZF9jb25maWcgPSBBTEM4ODJfM1NUX0RJRzsKIAkJfQogCX0KQEAgLTQ1MDksNiArNDU4Miw2NTIgQEAKIH0KIAogLyoKKyAqIEFMQzg4MyBzdXBwb3J0CisgKgorICogQUxDODgzIGlzIGFsbW9zdCBpZGVudGljYWwgd2l0aCBBTEM4ODAgYnV0IGhhcyBjbGVhbmVyIGFuZCBtb3JlIGZsZXhpYmxlCisgKiBjb25maWd1cmF0aW9uLiAgRWFjaCBwaW4gd2lkZ2V0IGNhbiBjaG9vc2UgYW55IGlucHV0IERBQ3MgYW5kIGEgbWl4ZXIuCisgKiBFYWNoIEFEQyBpcyBjb25uZWN0ZWQgZnJvbSBhIG1peGVyIG9mIGFsbCBpbnB1dHMuICBUaGlzIG1ha2VzIHBvc3NpYmxlCisgKiA2LWNoYW5uZWwgaW5kZXBlbmRlbnQgY2FwdHVyZXMuCisgKgorICogSW4gYWRkaXRpb24sIGFuIGluZGVwZW5kZW50IERBQyBmb3IgdGhlIG11bHRpLXBsYXliYWNrIChub3QgdXNlZCBpbiB0aGlzCisgKiBkcml2ZXIgeWV0KS4KKyAqLworI2RlZmluZSBBTEM4ODNfRElHT1VUX05JRAkweDA2CisjZGVmaW5lIEFMQzg4M19ESUdJTl9OSUQJMHgwYQorCitzdGF0aWMgaGRhX25pZF90IGFsYzg4M19kYWNfbmlkc1s0XSA9IHsKKwkvKiBmcm9udCwgcmVhciwgY2xmZSwgcmVhcl9zdXJyICovCisJMHgwMiwgMHgwNCwgMHgwMywgMHgwNQorfTsKKworc3RhdGljIGhkYV9uaWRfdCBhbGM4ODNfYWRjX25pZHNbMl0gPSB7CisJLyogQURDMS0yICovCisJMHgwOCwgMHgwOSwKK307CisvKiBpbnB1dCBNVVggKi8KKy8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDQsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiRnJvbnQgTWljIiwgMHgxIH0sCisJCXsgIkxpbmUiLCAweDIgfSwKKwkJeyAiQ0QiLCAweDQgfSwKKwl9LAorfTsKKyNkZWZpbmUgYWxjODgzX211eF9lbnVtX2luZm8gYWxjX211eF9lbnVtX2luZm8KKyNkZWZpbmUgYWxjODgzX211eF9lbnVtX2dldCBhbGNfbXV4X2VudW1fZ2V0CisKK3N0YXRpYyBpbnQgYWxjODgzX211eF9lbnVtX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9IHNwZWMtPmlucHV0X211eDsKKwl1bnNpZ25lZCBpbnQgYWRjX2lkeCA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOworCXN0YXRpYyBoZGFfbmlkX3QgY2FwdHVyZV9taXhlcnNbM10gPSB7IDB4MjQsIDB4MjMsIDB4MjIgfTsKKwloZGFfbmlkX3QgbmlkID0gY2FwdHVyZV9taXhlcnNbYWRjX2lkeF07CisJdW5zaWduZWQgaW50ICpjdXJfdmFsID0gJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF07CisJdW5zaWduZWQgaW50IGksIGlkeDsKKworCWlkeCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCisJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7CisJaWYgKCpjdXJfdmFsID09IGlkeCAmJiAhIGNvZGVjLT5pbl9yZXN1bWUpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBpbXV4LT5udW1faXRlbXM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdiA9IChpID09IGlkeCkgPyAweDcwMDAgOiAweDcwODA7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkgICAgdiB8IChpbXV4LT5pdGVtc1tpXS5pbmRleCA8PCA4KSk7CisJfQorCSpjdXJfdmFsID0gaWR4OworCXJldHVybiAxOworfQorLyoKKyAqIDJjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfM1NUXzJjaF9tb2Rlc1sxXSA9IHsKKwl7IDIsIE5VTEwgfQorfTsKKworLyoKKyAqIDJjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzNTVF9jaDJfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoNl9pbml0W10gPSB7CisJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF82Y2hfbW9kZXNbMl0gPSB7CisJeyAyLCBhbGM4ODNfM1NUX2NoMl9pbml0IH0sCisJeyA2LCBhbGM4ODNfM1NUX2NoNl9pbml0IH0sCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfc2l4c3RhY2tfY2g2X2luaXRbXSA9IHsKKwl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiA4Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19zaXhzdGFja19jaDhfaW5pdFtdID0geworCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4M19zaXhzdGFja19tb2Rlc1syXSA9IHsKKwl7IDYsIGFsYzg4M19zaXhzdGFja19jaDZfaW5pdCB9LAorCXsgOCwgYWxjODgzX3NpeHN0YWNrX2NoOF9pbml0IH0sCit9OworCisvKiBQaW4gYXNzaWdubWVudDogRnJvbnQ9MHgxNCwgUmVhcj0weDE1LCBDTEZFPTB4MTYsIFNpZGU9MHgxNworICogICAgICAgICAgICAgICAgIE1pYz0weDE4LCBGcm9udCBNaWM9MHgxOSwgTGluZS1Jbj0weDFhLCBIUD0weDFiCisgKi8KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19iYXNlX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAxLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJTaWRlIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDEsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkvKiAubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsICovCisJCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCisJCS5jb3VudCA9IDIsCisJCS5pbmZvID0gYWxjODgzX211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBhbGM4ODNfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gYWxjODgzX211eF9lbnVtX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfM1NUXzJjaF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMSwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8KKwkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkJLmNvdW50ID0gMiwKKwkJLmluZm8gPSBhbGM4ODNfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFsYzg4M19tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhbGM4ODNfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M18zU1RfNmNoX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAxLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAxLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLworCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCQkuY291bnQgPSAyLAorCQkuaW5mbyA9IGFsYzg4M19tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gYWxjODgzX211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGFsYzg4M19tdXhfZW51bV9wdXQsCisJfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2NobW9kZV9taXhlcltdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCisJCS5pbmZvID0gYWxjX2NoX21vZGVfaW5mbywKKwkJLmdldCA9IGFsY19jaF9tb2RlX2dldCwKKwkJLnB1dCA9IGFsY19jaF9tb2RlX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBBREMxOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLworCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLworCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCS8qIFJlYXIgbWl4ZXIgKi8KKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogQ0xGRSBtaXhlciAqLworCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBTaWRlIG1peGVyICovCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKKworCS8qIEZyb250IFBpbjogb3V0cHV0IDAgKDB4MGMpICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIFJlYXIgUGluOiBvdXRwdXQgMSAoMHgwZCkgKi8KKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJLyogQ0xGRSBQaW46IG91dHB1dCAyICgweDBlKSAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwKKwkvKiBTaWRlIFBpbjogb3V0cHV0IDMgKDB4MGYpICovCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDN9LAorCS8qIE1pYyAocmVhcikgcGluOiBpbnB1dCB2cmVmIGF0IDgwJSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIEZyb250IE1pYyBwaW46IGlucHV0IHZyZWYgYXQgODAlICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJLyogTGluZSBJbiBwaW46IGlucHV0ICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBMaW5lLTIgSW46IEhlYWRwaG9uZSBvdXRwdXQgKG91dHB1dCAwIC0gMHgwYykgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBDRCBwaW4gd2lkZ2V0IGZvciBpbnB1dCAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisKKwkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KKwkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KKwkvKiBJbnB1dCBtaXhlcjIgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg0KX0sCisJLyogSW5wdXQgbWl4ZXIzICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNCl9LAorCXsgfQorfTsKKworLyoKKyAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfYXV0b19pbml0X3ZlcmJzW10gPSB7CisJLyoKKwkgKiBVbm11dGUgQURDMC0yIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisKKwkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKKwkgKiBtaXhlciB3aWRnZXQKKwkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udCBwYW5lbAorCSAqIG1pYyAobWljIDIpCisJICovCisJLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg0KX0sCisKKwkvKgorCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKKwkgKi8KKwkvKiBzZXQgdm9sPTAgdG8gb3V0cHV0IG1peGVycyAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCS8qIHNldCB1cCBpbnB1dCBhbXBzIGZvciBhbmFsb2cgbG9vcGJhY2sgKi8KKwkvKiBBbXAgSW5kaWNlczogREFDID0gMCwgbWl4ZXIgPSAxICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MjYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCisJLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFjLCAxZCwgMTQsIDE1LCAxNiwgMTcsIDBiICovCisJLyogSW5wdXQgbWl4ZXIxICovCisJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCisJLy97MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sCisJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNCl9LAorCS8qIElucHV0IG1peGVyMiAqLworCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAorCS8vezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAorCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKKworCXsgfQorfTsKKworLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19jYXB0dXJlX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMSwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS8qIFRoZSBtdWx0aXBsZSAiQ2FwdHVyZSBTb3VyY2UiIGNvbnRyb2xzIGNvbmZ1c2UgYWxzYW1peGVyCisJCSAqIFNvIGNhbGwgc29tZXdoYXQgZGlmZmVyZW50Li4KKwkJICogRklYTUU6IHRoZSBjb250cm9scyBhcHBlYXIgaW4gdGhlICJwbGF5YmFjayIgdmlldyEKKwkJICovCisJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8KKwkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkJLmNvdW50ID0gMiwKKwkJLmluZm8gPSBhbGM4ODJfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFsYzg4Ml9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhbGM4ODJfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogcGNtIGNvbmZpZ3VyYXRpb246IGlkZW50aWFjYWwgd2l0aCBBTEM4ODAgKi8KKyNkZWZpbmUgYWxjODgzX3BjbV9hbmFsb2dfcGxheWJhY2sJYWxjODgwX3BjbV9hbmFsb2dfcGxheWJhY2sKKyNkZWZpbmUgYWxjODgzX3BjbV9hbmFsb2dfY2FwdHVyZQlhbGM4ODBfcGNtX2FuYWxvZ19jYXB0dXJlCisjZGVmaW5lIGFsYzg4M19wY21fZGlnaXRhbF9wbGF5YmFjawlhbGM4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sKKyNkZWZpbmUgYWxjODgzX3BjbV9kaWdpdGFsX2NhcHR1cmUJYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUKKworLyoKKyAqIGNvbmZpZ3VyYXRpb24gYW5kIHByZXNldAorICovCitzdGF0aWMgc3RydWN0IGhkYV9ib2FyZF9jb25maWcgYWxjODgzX2NmZ190YmxbXSA9IHsKKwl7IC5tb2RlbG5hbWUgPSAiM3N0YWNrLWRpZyIsIC5jb25maWcgPSBBTEM4ODNfM1NUXzJjaF9ESUcgfSwKKwl7IC5tb2RlbG5hbWUgPSAiNnN0YWNrLWRpZyIsIC5jb25maWcgPSBBTEM4ODNfNlNUX0RJRyB9LAorCXsgLm1vZGVsbmFtZSA9ICI2c3RhY2stZGlnLWRlbW8iLCAuY29uZmlnID0gQUxDODg4X0RFTU9fQk9BUkQgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxNDYyLCAucGNpX3N1YmRldmljZSA9IDB4NjY2OCwKKwkgIC5jb25maWcgPSBBTEM4ODNfNlNUX0RJRyB9LCAvKiBNU0kgICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA1YiwgLnBjaV9zdWJkZXZpY2UgPSAweDY2NjgsCisJICAuY29uZmlnID0gQUxDODgzXzZTVF9ESUcgfSwgLyogRm94Y29ubiAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwMTksIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LAorCSAgLmNvbmZpZyA9IEFMQzg4M18zU1RfNmNoX0RJRyB9LCAvKiBFQ1MgdG8gSW50ZWwqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwOGUsIC5wY2lfc3ViZGV2aWNlID0gMHg1MzRkLAorCSAgLmNvbmZpZyA9IEFMQzg4M18zU1RfNmNoIH0sCisJeyAubW9kZWxuYW1lID0gImF1dG8iLCAuY29uZmlnID0gQUxDODgzX0FVVE8gfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM4ODNfcHJlc2V0c1tdID0geworCVtBTEM4ODNfM1NUXzJjaF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzJjaF9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4M19ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHMsCisJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwl9LAorCVtBTEM4ODNfM1NUXzZjaF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4M19ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHMsCisJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfNmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfNmNoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwl9LAkKKwlbQUxDODgzXzNTVF82Y2hdID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfNmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfNmNoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwl9LAkKKwlbQUxDODgzXzZTVF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4M19ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHMsCisJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAorCX0sCisJW0FMQzg4OF9ERU1PX0JPQVJEXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4M19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODNfRElHT1VUX05JRCwKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzLAorCQkuZGlnX2luX25pZCA9IEFMQzg4M19ESUdJTl9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfc2l4c3RhY2tfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzX3NpeHN0YWNrX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwl9LAorfTsKKworCisvKgorICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KKyAqLworc3RhdGljIHZvaWQgYWxjODgzX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCisJCQkJCSAgICAgIGludCBkYWNfaWR4KQoreworCS8qIHNldCBhcyBvdXRwdXQgKi8KKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaWR4OyAKKwkKKwlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbZGFjX2lkeF0gPT0gMHgyNSkKKwkJaWR4ID0gNDsKKwllbHNlCisJCWlkeCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2RhY19pZHhdIC0gMjsKKworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJICAgIHBpbl90eXBlKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkgICAgQU1QX09VVF9VTk1VVEUpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7CisKK30KKworc3RhdGljIHZvaWQgYWxjODgzX2F1dG9faW5pdF9tdWx0aV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IEhEQV9TSURFOyBpKyspIHsKKwkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsJCisJCWlmIChuaWQpCisJCQlhbGM4ODNfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwgUElOX09VVCwgaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGM4ODNfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgcGluOworCisJcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW47CisJaWYgKHBpbikgLyogY29ubmVjdCB0byBmcm9udCAqLworCQkvKiB1c2UgZGFjIDAgKi8KKwkJYWxjODgzX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwgMCk7Cit9CisKKyNkZWZpbmUgYWxjODgzX2lzX2lucHV0X3BpbihuaWQpCWFsYzg4MF9pc19pbnB1dF9waW4obmlkKQorI2RlZmluZSBBTEM4ODNfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKKworc3RhdGljIHZvaWQgYWxjODgzX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CisJCWlmIChhbGM4ODNfaXNfaW5wdXRfcGluKG5pZCkpIHsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICAgIChpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/CisJCQkJCSAgICAgUElOX1ZSRUY4MCA6IFBJTl9JTikpOworCQkJaWYgKG5pZCAhPSBBTEM4ODNfUElOX0NEX05JRCkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkJCSAgICBBTVBfT1VUX01VVEUpOworCQl9CisJfQorfQorCisvKiBhbG1vc3QgaWRlbnRpY2FsIHdpdGggQUxDODgwIHBhcnNlci4uLiAqLworc3RhdGljIGludCBhbGM4ODNfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGVyciA9IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllbHNlIGlmIChlcnIgPiAwKQorCQkvKiBoYWNrIC0gb3ZlcnJpZGUgdGhlIGluaXQgdmVyYnMgKi8KKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzg4M19hdXRvX2luaXRfdmVyYnM7CisgICAgICAgICAgICAgICAgc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnNdID0gYWxjODgzX2NhcHR1cmVfbWl4ZXI7CisJCXNwZWMtPm51bV9taXhlcnMrKzsKKwlyZXR1cm4gZXJyOworfQorCisvKiBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBhdXRvLWNvbmZpZ3VyYXRpb24gbW9kZWwgKi8KK3N0YXRpYyB2b2lkIGFsYzg4M19hdXRvX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWxjODgzX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOworCWFsYzg4M19hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKKwlhbGM4ODNfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7Cit9CisKK3N0YXRpYyBpbnQgcGF0Y2hfYWxjODgzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CisKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3BlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjLT5zcGVjID0gc3BlYzsKKworCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBhbGM4ODNfY2ZnX3RibCk7CisJaWYgKGJvYXJkX2NvbmZpZyA8IDAgfHwgYm9hcmRfY29uZmlnID49IEFMQzg4M19NT0RFTF9MQVNUKSB7CisJCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgQUxDODgzLCAiCisJCSAgICAgICAidHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iKTsKKwkJYm9hcmRfY29uZmlnID0gQUxDODgzX0FVVE87CisJfQorCisJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODNfQVVUTykgeworCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KKwkJZXJyID0gYWxjODgzX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0gZWxzZSBpZiAoISBlcnIpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiaGRhX2NvZGVjOiBDYW5ub3Qgc2V0IHVwIGNvbmZpZ3VyYXRpb24gIgorCQkJICAgICAgICJmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOworCQkJYm9hcmRfY29uZmlnID0gQUxDODgzXzNTVF8yY2hfRElHOworCQl9CisJfQorCisJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODNfQVVUTykKKwkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODNfcHJlc2V0c1tib2FyZF9jb25maWddKTsKKworCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODMgQW5hbG9nIjsKKwlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzg4M19wY21fYW5hbG9nX3BsYXliYWNrOworCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGM4ODNfcGNtX2FuYWxvZ19jYXB0dXJlOworCisJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODMgRGlnaXRhbCI7CisJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODgzX3BjbV9kaWdpdGFsX3BsYXliYWNrOworCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODgzX3BjbV9kaWdpdGFsX2NhcHR1cmU7CisKKwlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKKwlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7CisKKwljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg4M19BVVRPKQorCQlzcGVjLT5pbml0X2hvb2sgPSBhbGM4ODNfYXV0b19pbml0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBBTEMyNjIgc3VwcG9ydAogICovCiAKQEAgLTQ1NDIsNiArNTI2MSwyOCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfSFBfQlBDX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEVfTU9OTygiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDE2LCAyLCAweDAsIEhEQV9PVVRQVVQpLAorCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJBVVggSU4gUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQVVYIElOIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9taXhlcgkJYWxjODgyX2NhcHR1cmVfbWl4ZXIKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfYWx0X21peGVyCWFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcgogCkBAIC00NjQ1LDYgKzUzODYsMTcgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml9IUF9jYXB0dXJlX3NvdXJjZSA9IHsKKwkubnVtX2l0ZW1zID0gNSwKKwkuaXRlbXMgPSB7CisJCXsgIk1pYyIsIDB4MCB9LAorCQl7ICJGcm9udCBNaWMiLCAweDMgfSwKKwkJeyAiTGluZSIsIDB4MiB9LAorCQl7ICJDRCIsIDB4NCB9LAorCQl7ICJBVVggSU4iLCAweDYgfSwKKwl9LAorfTsKKwogLyogbXV0ZS91bm11dGUgaW50ZXJuYWwgc3BlYWtlciBhY2NvcmRpbmcgdG8gdGhlIGhwIGphY2sgYW5kIG11dGUgc3RhdGUgKi8KIHN0YXRpYyB2b2lkIGFsYzI2Ml9mdWppdHN1X2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgZm9yY2UpCiB7CkBAIC00ODY4LDYgKzU2MjAsOTMgQEAKIAl7IH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX0hQX0JQQ19pbml0X3ZlcmJzW10gPSB7CisJLyoKKwkgKiBVbm11dGUgQURDMC0yIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisKKwkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKKwkgKiBtaXhlciB3aWRnZXQKKwkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udCBwYW5lbAorCSAqIG1pYyAobWljIDIpCisJICovCisJLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg0KX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNSl9LAorICAgICAgICB7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg2KX0sCisJCisJLyoKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwYyAtIDB4MGUpCisJICovCisJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIHNldCB1cCBpbnB1dCBhbXBzIGZvciBhbmFsb2cgbG9vcGJhY2sgKi8KKwkvKiBBbXAgSW5kaWNlczogREFDID0gMCwgbWl4ZXIgPSAxICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweGMwfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCisJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisKKwl7MHgxYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKKyAgICAgICAgezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMH0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMH0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHg3MDIzIH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4NzAwMCB9LAorICAgICAgICB7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHg3MDAwIH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4NzAyMyB9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDcwMDAgfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHg3MDAwIH0sCisKKworCS8qIEZJWE1FOiB1c2UgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLworCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxYywgMWQsIDE0LCAxNSwgMTYsIDE3LCAwYiAqLworCS8qIElucHV0IG1peGVyMTogdW5tdXRlIE1pYywgRi1NaWMsIExpbmUsIENEIGlucHV0cyAqLworCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDAgPDwgOCkpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAzIDw8IDgpKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMiA8PCA4KSl9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDQgPDwgOCkpfSwKKwkvKiBJbnB1dCBtaXhlcjIgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAwIDw8IDgpKX0sCisJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMyA8PCA4KSl9LAorCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDIgPDwgOCkpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDA0IDw8IDgpKX0sCisJLyogSW5wdXQgbWl4ZXIzICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMCA8PCA4KSl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDMgPDwgOCkpfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAyIDw8IDgpKX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwNCA8PCA4KSl9LAorCisJeyB9Cit9OworCiAvKiBwY20gY29uZmlndXJhdGlvbjogaWRlbnRpYWNhbCB3aXRoIEFMQzg4MCAqLwogI2RlZmluZSBhbGMyNjJfcGNtX2FuYWxvZ19wbGF5YmFjawlhbGM4ODBfcGNtX2FuYWxvZ19wbGF5YmFjawogI2RlZmluZSBhbGMyNjJfcGNtX2FuYWxvZ19jYXB0dXJlCWFsYzg4MF9wY21fYW5hbG9nX2NhcHR1cmUKQEAgLTQ5MjgsNyArNTc2NywxNiBAQAogc3RhdGljIHN0cnVjdCBoZGFfYm9hcmRfY29uZmlnIGFsYzI2Ml9jZmdfdGJsW10gPSB7CiAJeyAubW9kZWxuYW1lID0gImJhc2ljIiwgLmNvbmZpZyA9IEFMQzI2Ml9CQVNJQyB9LAogCXsgLm1vZGVsbmFtZSA9ICJmdWppdHN1IiwgLmNvbmZpZyA9IEFMQzI2Ml9GVUpJVFNVIH0sCi0JeyAucGNpX3N1YnZlbmRvciA9IDB4MTBjZiwgLnBjaV9zdWJkZXZpY2UgPSAweDEzOTcsIC5jb25maWcgPSBBTEMyNjJfRlVKSVRTVSB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwY2YsIC5wY2lfc3ViZGV2aWNlID0gMHgxMzk3LAorCSAgLmNvbmZpZyA9IEFMQzI2Ml9GVUpJVFNVIH0sCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDIwOGMsCisJICAuY29uZmlnID0gQUxDMjYyX0hQX0JQQyB9LCAvKiB4dzQ0MDAgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzAxNCwKKwkgIC5jb25maWcgPSBBTEMyNjJfSFBfQlBDIH0sIC8qIHh3NjQwMCAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMDE1LAorCSAgLmNvbmZpZyA9IEFMQzI2Ml9IUF9CUEMgfSwgLyogeHc4NDAwICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDEyZmUsCisJICAuY29uZmlnID0gQUxDMjYyX0hQX0JQQyB9LCAvKiB4dzk0MDAgKi8KIAl7IC5tb2RlbG5hbWUgPSAiYXV0byIsIC5jb25maWcgPSBBTEMyNjJfQVVUTyB9LAogCXt9CiB9OwpAQCAtNDk1Niw2ICs1ODA0LDE2IEBACiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9mdWppdHN1X3Vuc29sX2V2ZW50LAogCX0sCisJW0FMQzI2Ml9IUF9CUENdID0geworCQkubWl4ZXJzID0geyBhbGMyNjJfSFBfQlBDX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfSFBfQlBDX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGMyNjJfSFBfY2FwdHVyZV9zb3VyY2UsCisJfSwJCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzI2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTQ5ODEsOCArNTgzOSwxMCBAQAogI2VuZGlmCiAKIAlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgYWxjMjYyX2NmZ190YmwpOworCQogCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEMyNjJfTU9ERUxfTEFTVCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIEFMQzI2MiwgdHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBBTEMyNjIsICIKKwkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIpOwogCQlib2FyZF9jb25maWcgPSBBTEMyNjJfQVVUTzsKIAl9CiAKQEAgLTQ5OTMsNyArNTg1Myw5IEBACiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgaWYgKCEgZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiBmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCisJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7CiAJCQlib2FyZF9jb25maWcgPSBBTEMyNjJfQkFTSUM7CiAJCX0KIAl9CkBAIC01MDM0LDcgKzU4OTYsNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qCiAgKiAgQUxDODYxIGNoYW5uZWwgc291cmNlIHNldHRpbmcgKDIvNiBjaGFubmVsIHNlbGVjdGlvbiBmb3IgMy1zdGFjaykKICAqLwpAQCAtNTA0OSw5ICs1OTEwLDExIEBACiAJLyogc2V0IHBpbiB3aWRnZXQgMThoIChtaWMxLzIpIGZvciBpbnB1dCwgZm9yIG1pYyBhbHNvIGVuYWJsZSB0aGUgdnJlZiAqLwogCXsgMHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0IH0sCiAKLSAgICAgICAgeyAweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMGMgfSwKLSAgICAgICAgeyAweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDEgPDwgOCkpIH0sIC8vbWljCi0gICAgICAgIHsgMHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAyIDw8IDgpKSB9LCAvL2xpbmUgaW4KKwl7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwYyB9LAorI2lmIDAKKwl7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMSA8PCA4KSkgfSwgLyptaWMqLworCXsgMHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAyIDw8IDgpKSB9LCAvKmxpbmUtaW4qLworI2VuZGlmCiAJeyB9IC8qIGVuZCAqLwogfTsKIC8qCkBAIC01MDY1LDExICs1OTI4LDEzIEBACiAJeyAweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4NDAgfSwKIAogCXsgMHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKLSAgICAgICAgeyAweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAorCXsgMHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKIAotICAgICAgICB7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MCB9LAotICAgICAgICB7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMSA8PCA4KSkgfSwgLy9taWMKLSAgICAgICAgeyAweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDIgPDwgOCkpIH0sIC8vbGluZSBpbgorCXsgMHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwIH0sCisjaWYgMAorCXsgMHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAxIDw8IDgpKSB9LCAvKm1pYyovCisJeyAweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDIgPDwgOCkpIH0sIC8qbGluZSBpbiovCisjZW5kaWYKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC01MzUzLDYgKzYyMTgsMTEgQEAKIAkweDAzLCAweDA2LCAweDA1LCAweDA0CiB9OwogCitzdGF0aWMgaGRhX25pZF90IGFsYzY2MF9kYWNfbmlkc1szXSA9IHsKKwkvKiBmcm9udCwgY2xmZSwgc3Vycm91bmQgKi8KKwkweDAzLCAweDA1LCAweDA2Cit9OworCiBzdGF0aWMgaGRhX25pZF90IGFsYzg2MV9hZGNfbmlkc1sxXSA9IHsKIAkvKiBBREMwLTIgKi8KIAkweDA4LApAQCAtNTYwNSw3ICs2NDc1LDEwIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX2JvYXJkX2NvbmZpZyBhbGM4NjFfY2ZnX3RibFtdID0gewogCXsgLm1vZGVsbmFtZSA9ICIzc3RhY2siLCAuY29uZmlnID0gQUxDODYxXzNTVCB9LAotCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDgwODYsIC5wY2lfc3ViZGV2aWNlID0gMHhkNjAwLCAuY29uZmlnID0gQUxDODYxXzNTVCB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDgwODYsIC5wY2lfc3ViZGV2aWNlID0gMHhkNjAwLAorCSAgLmNvbmZpZyA9IEFMQzg2MV8zU1QgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4ODFlNywKKwkgIC5jb25maWcgPSBBTEM2NjBfM1NUIH0sCiAJeyAubW9kZWxuYW1lID0gIjNzdGFjay1kaWciLCAuY29uZmlnID0gQUxDODYxXzNTVF9ESUcgfSwKIAl7IC5tb2RlbG5hbWUgPSAiNnN0YWNrLWRpZyIsIC5jb25maWcgPSBBTEM4NjFfNlNUX0RJRyB9LAogCXsgLm1vZGVsbmFtZSA9ICJhdXRvIiwgLmNvbmZpZyA9IEFMQzg2MV9BVVRPIH0sCkBAIC01NjQ4LDYgKzY1MjEsMTcgQEAKIAkJLmFkY19uaWRzID0gYWxjODYxX2FkY19uaWRzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg2MV9jYXB0dXJlX3NvdXJjZSwKIAl9LAorCVtBTEM2NjBfM1NUXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODYxXzNTVF9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODYxX3RocmVlc3RhY2tfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2MF9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzY2MF9kYWNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg2MV90aHJlZXN0YWNrX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg2MV90aHJlZXN0YWNrX21vZGVzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjFfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4NjFfYWRjX25pZHMsCisJCS5pbnB1dF9tdXggPSAmYWxjODYxX2NhcHR1cmVfc291cmNlLAorCX0sCiB9OwkKIAogCkBAIC01NjY0LDggKzY1NDgsMTAgQEAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CQogCiAgICAgICAgIGJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBhbGM4NjFfY2ZnX3RibCk7CisKIAlpZiAoYm9hcmRfY29uZmlnIDwgMCB8fCBib2FyZF9jb25maWcgPj0gQUxDODYxX01PREVMX0xBU1QpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBBTEM4NjEsIHRyeWluZyBhdXRvLXByb2JlIGZyb20gQklPUy4uLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgQUxDODYxLCAiCisJCSAgICAgICAidHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iKTsKIAkJYm9hcmRfY29uZmlnID0gQUxDODYxX0FVVE87CiAJfQogCkBAIC01Njc2LDcgKzY1NjIsOSBAQAogCQkJYWxjX2ZyZWUoY29kZWMpOwogCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIGlmICghIGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBDYW5ub3Qgc2V0IHVwIGNvbmZpZ3VyYXRpb24gZnJvbSBCSU9TLiAgVXNpbmcgYmFzZSBtb2RlLi4uXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiaGRhX2NvZGVjOiBDYW5ub3Qgc2V0IHVwIGNvbmZpZ3VyYXRpb24gIgorCQkJICAgICAgICJmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOwogCQkgICBib2FyZF9jb25maWcgPSBBTEM4NjFfM1NUX0RJRzsKIAkJfQogCX0KQEAgLTU3MDcsOCArNjU5NSwxMiBAQAogCXsgLmlkID0gMHgxMGVjMDI2MiwgLm5hbWUgPSAiQUxDMjYyIiwgLnBhdGNoID0gcGF0Y2hfYWxjMjYyIH0sCiAgCXsgLmlkID0gMHgxMGVjMDg4MCwgLm5hbWUgPSAiQUxDODgwIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgwIH0sCiAJeyAuaWQgPSAweDEwZWMwODgyLCAubmFtZSA9ICJBTEM4ODIiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKLQl7IC5pZCA9IDB4MTBlYzA4ODMsIC5uYW1lID0gIkFMQzg4MyIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAorCXsgLmlkID0gMHgxMGVjMDg4MywgLm5hbWUgPSAiQUxDODgzIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCiAJeyAuaWQgPSAweDEwZWMwODg1LCAubmFtZSA9ICJBTEM4ODUiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKLQl7IC5pZCA9IDB4MTBlYzA4NjEsIC5uYW1lID0gIkFMQzg2MSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAorCXsgLmlkID0gMHgxMGVjMDg4OCwgLm5hbWUgPSAiQUxDODg4IiwgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCisJeyAuaWQgPSAweDEwZWMwODYxLCAucmV2ID0gMHgxMDAzMDAsIC5uYW1lID0gIkFMQzg2MSIsCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4NjEgfSwKKyAgICAgICAgeyAuaWQgPSAweDEwZWMwODYxLCAucmV2ID0gMHgxMDAzNDAsIC5uYW1lID0gIkFMQzY2MCIsCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4NjEgfSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDM2ZjE5OTQuLmZiNGJlZDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTQyLDYgKzQyLDkgQEAKICNkZWZpbmUgU1RBQ19EOTQ1R1RQMwkJMQogI2RlZmluZSBTVEFDX0Q5NDVHVFA1CQkyCiAjZGVmaW5lIFNUQUNfTUFDTUlOSQkJMworI2RlZmluZSBTVEFDX0Q5NjVfMjExMgkJNAorI2RlZmluZSBTVEFDX0Q5NjVfMjg0QgkJNQorI2RlZmluZSBTVEFDXzkyMlhfTU9ERUxTCTYJLyogbnVtYmVyIG9mIDkyMnggbW9kZWxzICovCiAKIHN0cnVjdCBzaWdtYXRlbF9zcGVjIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzRdOwpAQCAtMTA3LDEwICsxMTAsMjQgQEAKICAgICAgICAgMHgwNiwgMHgwNywKIH07CiAKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMjdfYWRjX25pZHNbMl0gPSB7CisgICAgICAgIDB4MDcsIDB4MDgsCit9OworCisjaWYgMAorc3RhdGljIGhkYV9uaWRfdCBkOTY1XzIxMTJfZGFjX25pZHNbM10gPSB7CisgICAgICAgIDB4MDIsIDB4MDMsIDB4MDUsCit9OworI2VuZGlmCisKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMnhfbXV4X25pZHNbMl0gPSB7CiAgICAgICAgIDB4MTIsIDB4MTMsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MjI3X211eF9uaWRzWzJdID0geworICAgICAgICAweDE1LCAweDE2LAorfTsKKwogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9hZGNfbmlkc1szXSA9IHsKICAgICAgICAgMHgwNywgMHgwOCwgMHgwOQogfTsKQEAgLTE3Myw2ICsxOTAsMjQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIyN19jb3JlX2luaXRbXSA9IHsKKwkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCisJeyAweDE2LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKKwkvKiB1bm11dGUgbm9kZSAweDFiICovCisJeyAweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGQ5NjVfMjExMl9jb3JlX2luaXRbXSA9IHsKKwkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCisJeyAweDE2LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKKwkvKiB1bm11dGUgbm9kZSAweDFiICovCisJeyAweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCS8qIHNlbGVjdCBub2RlIDB4MDMgYXMgREFDICovCQorCXsgMHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5Mjd4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwkKIAl7IDB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LApAQCAtMjEyLDYgKzI0NywyMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIFRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHNlcXVlbmNlICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMjdfbWl4ZXJbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCQkuY291bnQgPSAxLAorCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc25kX2tjb250cm9sX25ld190IHN0YWM5Mjd4X21peGVyW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTI5MSwxMSArMzQxLDE3IEBACiAJMHgwMmExOTMyMCwgMHg0MDAwMDEwMCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MjJ4X2JyZF90YmxbXSA9IHsKLQlyZWY5MjJ4X3Bpbl9jb25maWdzLAotCWQ5NDVndHAzX3Bpbl9jb25maWdzLAotCWQ5NDVndHA1X3Bpbl9jb25maWdzLAotCU5VTEwsCQkvKiBTVEFDX01BQ01JTkkgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZDk2NV8yMTEyX3Bpbl9jb25maWdzWzEwXSA9IHsKKwkweDAyMjE0MDFmLCAweDQwMDAwMTAwLCAweDQwMDAwMTAwLCAweDAxMDE0MDExLAorCTB4MDFhMTkwMjEsIDB4MDE4MTMwMjQsIDB4MDE0NTIxMzAsIDB4NDAwMDAxMDAsCisJMHgwMmExOTMyMCwgMHg0MDAwMDEwMCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MjJ4X2JyZF90YmxbU1RBQ185MjJYX01PREVMU10gPSB7CisJW1NUQUNfUkVGXSA9CXJlZjkyMnhfcGluX2NvbmZpZ3MsCisJW1NUQUNfRDk0NUdUUDNdID0gZDk0NWd0cDNfcGluX2NvbmZpZ3MsCisJW1NUQUNfRDk0NUdUUDVdID0gZDk0NWd0cDVfcGluX2NvbmZpZ3MsCisJW1NUQUNfRDk2NV8yMTEyXSA9IGQ5NjVfMjExMl9waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2JvYXJkX2NvbmZpZyBzdGFjOTIyeF9jZmdfdGJsW10gPSB7CkBAIC0zMzAsNiArMzg2LDEyIEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4ODM4NCwKIAkgIC5wY2lfc3ViZGV2aWNlID0gMHg3NjgwLAogCSAgLmNvbmZpZyA9IFNUQUNfTUFDTUlOSSB9LAkvKiBBcHBsZSBNYWMgTWluaSAoZWFybHkgMjAwNikgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkgIC5wY2lfc3ViZGV2aWNlID0gMHgyMTEyLAorCSAgLmNvbmZpZyA9IFNUQUNfRDk2NV8yMTEyIH0sCisJeyAucGNpX3N1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsCisJICAucGNpX3N1YmRldmljZSA9IDB4Mjg0YiwKKwkgIC5jb25maWcgPSBTVEFDX0Q5NjVfMjg0QiB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTcxMyw3ICs3NzUsOCBAQAogICogQSBhbmQgQiBpcyBub3Qgc3VwcG9ydGVkLgogICovCiAvKiBmaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19maWxsX2RhY19uaWRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCitzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaGRhX25pZF90IG5pZDsKQEAgLTczMiwxMCArNzk1LDEzIEBACiB9CiAKIC8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCitzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCWNoYXIgbmFtZVszMl07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsgIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKKwkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCisJfTsKIAloZGFfbmlkX3QgbmlkOwogCWludCBpLCBlcnI7CiAKQEAgLTg5MywxMCArOTU5LDEyIEBACiAJCXJldHVybiBlcnI7CiAJaWYgKCEgc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIHBpbiBjb25maWcgKi8KKwogCWlmICgoZXJyID0gc3RhYzkyeHhfYWRkX2R5bl9vdXRfcGlucyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBzdGFjOTJ4eF9hdXRvX2ZpbGxfZGFjX25pZHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKSkgPCAwKQotCQlyZXR1cm4gZXJyOworCWlmIChzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9PSAwKQorCQlpZiAoKGVyciA9IHN0YWM5Mnh4X2F1dG9fZmlsbF9kYWNfbmlkcyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCisJCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCB8fAogCSAgICAoZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfaHBfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDAgfHwKQEAgLTExOTQsNyArMTI2Miw4IEBACiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBzdGFjOTIyeF9jZmdfdGJsKTsKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLSAgICAgICAgICAgICAgICBzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMngsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOworICAgICAgICAgICAgICAgIHNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIyeCwgIgorCQkJICAgICJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKIAllbHNlIGlmIChzdGFjOTIyeF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10gIT0gTlVMTCkgewogCQlzcGVjLT5udW1fcGlucyA9IDEwOwogCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MjJ4X3Bpbl9uaWRzOwpAQCAtMTIxMCw2ICsxMjc5LDI1IEBACiAJc3BlYy0+bWl4ZXIgPSBzdGFjOTIyeF9taXhlcjsKIAogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZHM7CisJCisJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKKwljYXNlIFNUQUNfRDk2NV8yMTEyOgorCQlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjI3X2FkY19uaWRzOworCQlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MjI3X211eF9uaWRzOworI2lmIDAKKwkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBkOTY1XzIxMTJfZGFjX25pZHM7CisJCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShkOTY1XzIxMTJfZGFjX25pZHMpOworI2VuZGlmCisJCXNwZWMtPmluaXQgPSBkOTY1XzIxMTJfY29yZV9pbml0OworCQlzcGVjLT5taXhlciA9IHN0YWM5MjI3X21peGVyOworCQlicmVhazsKKwljYXNlIFNUQUNfRDk2NV8yODRCOgorCQlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjI3X2FkY19uaWRzOworCQlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MjI3X211eF9uaWRzOworCQlzcGVjLT5pbml0ID0gc3RhYzkyMjdfY29yZV9pbml0OworCQlzcGVjLT5taXhlciA9IHN0YWM5MjI3X21peGVyOworCQlicmVhazsKKwl9CiAKIAllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgwOCwgMHgwOSk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCA4NDU5MDcxLi44OWEwNmRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0yNjA2LDcgKzI2MDYsNyBAQAogCWljZS0+ZG1hcGF0aF9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMik7CiAJaWNlLT5wcm9maV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMyk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pY2UxNzEyX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ljZTE3MTJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJIklDRTE3MTIiLCBpY2UpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfaWNlMTcxMl9mcmVlKGljZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggMzRhNThjNjIuLmFkNjllZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTIyNTMsNyArMjI1Myw3IEBACiAJaWNlLT5wcm9maV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMSk7CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF92dDE3MjRfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiSUNFMTcyNCIsIGljZSkpIHsKKwkJCUlSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJJQ0UxNzI0IiwgaWNlKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3Z0MTcyNF9mcmVlKGljZSk7CiAJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcmV2by5jIGIvc291bmQvcGNpL2ljZTE3MTIvcmV2by5jCmluZGV4IGI1NzU0YjMuLmZlYzk0NDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Jldm8uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9yZXZvLmMKQEAgLTg3LDEyICs4NywyNSBAQAogICogaW5pdGlhbGl6ZSB0aGUgY2hpcHMgb24gTS1BdWRpbyBSZXZvbHV0aW9uIGNhcmRzCiAgKi8KIAorc3RhdGljIHVuc2lnbmVkIGludCByZXZvNzFfbnVtX3N0ZXJlb19mcm9udFtdID0gezJ9Oworc3RhdGljIGNoYXIgKnJldm83MV9jaGFubmVsX25hbWVzX2Zyb250W10gPSB7IlBDTSBQbGF5YmFjayBWb2x1bWUifTsKKworc3RhdGljIHVuc2lnbmVkIGludCByZXZvNzFfbnVtX3N0ZXJlb19zdXJyb3VuZFtdID0gezEsIDEsIDIsIDJ9Oworc3RhdGljIGNoYXIgKnJldm83MV9jaGFubmVsX25hbWVzX3N1cnJvdW5kW10gPSB7IlBDTSBDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgIlBDTSBMRkUgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJCSJQQ00gU2lkZSBQbGF5YmFjayBWb2x1bWUiLCAiUENNIFJlYXIgUGxheWJhY2sgVm9sdW1lIn07CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmV2bzUxX251bV9zdGVyZW9bXSA9IHsyLCAxLCAxLCAyfTsKK3N0YXRpYyBjaGFyICpyZXZvNTFfY2hhbm5lbF9uYW1lc1tdID0geyJQQ00gUGxheWJhY2sgVm9sdW1lIiwgIlBDTSBDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJIlBDTSBMRkUgUGxheWJhY2sgVm9sdW1lIiwgIlBDTSBSZWFyIFBsYXliYWNrIFZvbHVtZSJ9OworCiBzdGF0aWMgc3RydWN0IHNuZF9ha200eHh4IGFrbV9yZXZvX2Zyb250IF9fZGV2aW5pdGRhdGEgPSB7CiAJLnR5cGUgPSBTTkRfQUs0MzgxLAogCS5udW1fZGFjcyA9IDIsCiAJLm9wcyA9IHsKIAkJLnNldF9yYXRlX3ZhbCA9IHJldm9fc2V0X3JhdGVfdmFsCi0JfQorCX0sCisJLm51bV9zdGVyZW8gPSByZXZvNzFfbnVtX3N0ZXJlb19mcm9udCwKKwkuY2hhbm5lbF9uYW1lcyA9IHJldm83MV9jaGFubmVsX25hbWVzX2Zyb250CiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcmV2b19mcm9udF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CkBAIC0xMTMsNyArMTI2LDkgQEAKIAkubnVtX2RhY3MgPSA2LAogCS5vcHMgPSB7CiAJCS5zZXRfcmF0ZV92YWwgPSByZXZvX3NldF9yYXRlX3ZhbAotCX0KKwl9LAorCS5udW1fc3RlcmVvID0gcmV2bzcxX251bV9zdGVyZW9fc3Vycm91bmQsCisJLmNoYW5uZWxfbmFtZXMgPSByZXZvNzFfY2hhbm5lbF9uYW1lc19zdXJyb3VuZAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttX3Jldm9fc3Vycm91bmRfcHJpdiBfX2RldmluaXRkYXRhID0gewpAQCAtMTMzLDcgKzE0OCw5IEBACiAJLm51bV9kYWNzID0gNiwKIAkub3BzID0gewogCQkuc2V0X3JhdGVfdmFsID0gcmV2b19zZXRfcmF0ZV92YWwKLQl9CisJfSwKKwkubnVtX3N0ZXJlbyA9IHJldm81MV9udW1fc3RlcmVvLAorCS5jaGFubmVsX25hbWVzID0gcmV2bzUxX2NoYW5uZWxfbmFtZXMKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9yZXZvNTFfcHJpdiBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCBlZGMxNDQ3Li41NjM0YmMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMjQ3NSw3ICsyNDc1LDcgQEAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwogCXBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKLQlyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCXJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaW50ZWw4eDBfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKTsKIAljaGlwLT5pcnEgPSBwY2ktPmlycTsKIAlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKQEAgLTI4NDgsNyArMjg0OCw3IEBACiAKIAkvKiByZXF1ZXN0IGlycSBhZnRlciBpbml0aWFsaXphaW5nIGludF9zdGFfbWFzaywgZXRjICovCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaW50ZWw4eDBfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUfFNBX1NISVJRLCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CisJCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfaW50ZWw4eDBfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCAyNDcwM2Q3Li5mMjhlMjczIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC0xMTg1LDcgKzExODUsNyBAQAogCX0KIAogIHBvcnRfaW5pdGVkOgotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKIAkJCWNhcmQtPnNob3J0bmFtZSwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9pbnRlbDh4MF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA2ZTk3OTMyLi4yYjRjZTAwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtMjIzNyw3ICsyMjM3LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGVyciA9IHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfa29yZzEyMTJfaW50ZXJydXB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJrb3JnMTIxMiIsIGtvcmcxMjEyKTsKIAogICAgICAgICBpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IDFjMzQ0ZmIuLjgyOGVhYjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC0yNzYwLDcgKzI3NjAsNyBAQAogCiAJdGFza2xldF9pbml0KCZjaGlwLT5od3ZvbF90cSwgc25kX20zX3VwZGF0ZV9od192b2x1bWUsICh1bnNpZ25lZCBsb25nKWNoaXApOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbTNfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbTNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJY2FyZC0+ZHJpdmVyLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX20zX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwppbmRleCAzNjZjNGE3Li5hNGFhYTdiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKQEAgLTEzMTksNyArMTMxOSw3IEBACiAJCQkJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBjaSwgaSkpOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX21peGFydF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgQ0FSRF9OQU1FLCAodm9pZCAqKW1ncikpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9taXhhcnRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBDQVJEX05BTUUsICh2b2lkICopbWdyKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX21peGFydF9mcmVlKG1ncik7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IGI5MmQ2NjAuLjU2ZDcyODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC00NjUsNyArNDY1LDcgQEAKIHsKIAltdXRleF9sb2NrKCZjaGlwLT5pcnFfbXV0ZXgpOwogCWlmIChjaGlwLT5pcnEgPCAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgY2hpcC0+aW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJCWlmIChyZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgY2hpcC0+aW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJCWNoaXAtPmNhcmQtPmRyaXZlciwgY2hpcCkpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgY2hpcC0+cGNpLT5pcnEpOwogCQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pcnFfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCA4MTk4ODg0Li5hZTk4MGUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAltZ3ItPnBjaSA9IHBjaTsKIAltZ3ItPmlycSA9IC0xOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBwY3hocl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHBjeGhyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKIAkJCWNhcmRfbmFtZSwgbWdyKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJcGN4aHJfZnJlZShtZ3IpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCmluZGV4IDU2MThlYzkuLjU1MDFhMDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYworKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKQEAgLTE4OTIsNyArMTg5Miw3IEBACiAJVU5TRVRfQUlFKGh3cG9ydCk7CiAKIAlpZiAocmVxdWVzdF9pcnEKLQkgICAgKHBjaS0+aXJxLCBzbmRfcmlwdGlkZV9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLAorCSAgICAocGNpLT5pcnEsIHNuZF9yaXB0aWRlX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAogCSAgICAgIlJJUFRJREUiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSaXB0aWRlOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsCiAJCQkgICBwY2ktPmlycSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IDJjYjlmZTkuLjJlMjRiNjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0xMzc0LDcgKzEzNzQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWUzMl9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCB8IFNBX1NISVJRLCAiUk1FMzIiLCAodm9pZCAqKSBybWUzMikpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWUzMl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgIlJNRTMyIiwgKHZvaWQgKikgcm1lMzIpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggOTkxY2IxOC4uZmRlMGYzZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTE1ODgsNyArMTU4OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3JtZTk2X2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiUk1FOTYiLCAodm9pZCAqKXJtZTk2KSkgeworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3JtZTk2X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIlJNRTk2IiwgKHZvaWQgKilybWU5NikpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IGVhZjNjMjIuLjk5Y2Y4NjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTQ5MTIsNyArNDkxMiw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaGRzcF9pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgImhkc3AiLCAodm9pZCAqKWhkc3ApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfaGRzcF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJoZHNwIiwgKHZvaWQgKiloZHNwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogdW5hYmxlIHRvIHVzZSBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCBiYmExNjE1Li43ZDAzYWUwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTM0OTcsNyArMzQ5Nyw3IEBACiAJCSAgIGhkc3BtLT5wb3J0ICsgaW9fZXh0ZW50IC0gMSk7CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9oZHNwbV9pbnRlcnJ1cHQsCi0JCQlTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwgImhkc3BtIiwKKwkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgImhkc3BtIiwKIAkJCSh2b2lkICopIGhkc3BtKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIRFNQTTogdW5hYmxlIHRvIHVzZSBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCAzYjk0NWU4Li45NTM0ZTE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0yNTAwLDcgKzI1MDAsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAkKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWU5NjUyX2ludGVycnVwdCwgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAicm1lOTY1MiIsICh2b2lkICopcm1lOTY1MikpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWU5NjUyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgInJtZTk2NTIiLCAodm9pZCAqKXJtZTk2NTIpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCmluZGV4IGRjZjQwMjkuLmM0MzAzNDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAKIAlzb25pYy0+bWlkaV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMyk7CiAJc29uaWMtPmdhbWVfcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDQpOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfc29uaWN2aWJlc19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgIlMzIFNvbmljVmliZXMiLCAodm9pZCAqKXNvbmljKSkgeworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3NvbmljdmliZXNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiUzMgU29uaWNWaWJlcyIsICh2b2lkICopc29uaWMpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfc29uaWN2aWJlc19mcmVlKHNvbmljKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE0NDEsMTAgKzE0NDEsMTAgQEAKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTb25pY1ZpYmVzIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlMzIFNvbmljVmliZXMiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgcmV2ICVpIGF0IDB4JWx4LCBpcnEgJWkiLAorCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyByZXYgJWkgYXQgMHglbGx4LCBpcnEgJWkiLAogCQljYXJkLT5zaG9ydG5hbWUsCiAJCXNvbmljLT5yZXZpc2lvbiwKLQkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMSksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMSksCiAJCXNvbmljLT5pcnEpOwogCiAJaWYgKChlcnIgPSBzbmRfc29uaWN2aWJlc19wY20oc29uaWMsIDAsIE5VTEwpKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKaW5kZXggZDk5ZWQ3Mi4uNDkzMGNjNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKQEAgLTM1OTksNyArMzU5OSw3IEBACiAJfQogCXRyaWRlbnQtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3RyaWRlbnRfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdHJpZGVudF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQkiVHJpZGVudCBBdWRpbyIsIHRyaWRlbnQpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfdHJpZGVudF9mcmVlKHRyaWRlbnQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggMjUyN2JiZC4uMzdiZDVlYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0yMjgxLDcgKzIyODEsNyBAQAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwKIAkJCWNoaXBfdHlwZSA9PSBUWVBFX1ZJQTgyMzMgPwogCQkJc25kX3ZpYTgyMzNfaW50ZXJydXB0IDoJc25kX3ZpYTY4Nl9pbnRlcnJ1cHQsCi0JCQlTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJY2FyZC0+ZHJpdmVyLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3ZpYTgyeHhfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCmluZGV4IDU3N2EyYjAuLmMxZWRlNmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwpAQCAtMTExOCw3ICsxMTE4LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3ZpYTgyeHhfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdmlhODJ4eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCiAJCQljYXJkLT5kcml2ZXIsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfdmlhODJ4eF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCAwZjFlYmIwLi43ZGVkYTI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJdngtPnBvcnRbaV0gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCBpICsgMSk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF92eF9pcnFfaGFuZGxlciwgU0FfSU5URVJSVVBUfFNBX1NISVJRLAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3Z4X2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAogCQkJQ0FSRF9OQU1FLCAodm9pZCAqKSBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3Z4MjIyX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKaW5kZXggZjg5NDc1Mi4uYTU1YjVmZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwpAQCAtMjI4OCw3ICsyMjg4LDcgQEAKIAkJc25kX3ltZnBjaV9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF95bWZwY2lfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsICJZTUZQQ0kiLCAodm9pZCAqKSBjaGlwKSkgeworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3ltZnBjaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJZTUZQQ0kiLCAodm9pZCAqKSBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3ltZnBjaV9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggYjY3ODgxNC4uNjQxNDMwNiAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC0xMTIwLDYgKzExMjAsNyBAQAogCXN0cnVjdCBzbmRfcG1hYyAqY2hpcDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCWludCBpLCBlcnI7CisJdW5zaWduZWQgaW50IGlycTsKIAl1bnNpZ25lZCBsb25nIGN0cmxfYWRkciwgdHhkbWFfYWRkciwgcnhkbWFfYWRkcjsKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0Jc25kX3BtYWNfZGV2X2ZyZWUsCkBAIC0xMTUzLDEwICsxMTU0LDYgQEAKIAlpZiAoY2hpcC0+aXNfazIpIHsKIAkJc3RhdGljIGNoYXIgKnJuYW1lc1tdID0gewogCQkJIlNvdW5kIENvbnRyb2wiLCAiU291bmQgRE1BIiB9OwotCQlpZiAobnAtPm5faW50cnMgPCAzKSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBfX2Vycm9yOwotCQl9CiAJCWZvciAoaSA9IDA7IGkgPCAyOyBpICsrKSB7CiAJCQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucC0+cGFyZW50LCBpLAogCQkJCQkJICAgJmNoaXAtPnJzcmNbaV0pKSB7CkBAIC0xMTcwLDkgKzExNjcsMTAgQEAKIAkJCQkJICAgICAgIGNoaXAtPnJzcmNbaV0uc3RhcnQgKyAxLAogCQkJCQkgICAgICAgcm5hbWVzW2ldKSA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzbmQ6IGNhbid0IHJlcXVlc3QgcnNyYyAiCi0JCQkJICAgICAgICIgJWQgKCVzOiAweCUwOGx4OiUwOGx4KVxuIiwKLQkJCQkgICAgICAgaSwgcm5hbWVzW2ldLCBjaGlwLT5yc3JjW2ldLnN0YXJ0LAotCQkJCSAgICAgICBjaGlwLT5yc3JjW2ldLmVuZCk7CisJCQkJICAgICAgICIgJWQgKCVzOiAweCUwMTZsbHg6JTAxNmxseClcbiIsCisJCQkJICAgICAgIGksIHJuYW1lc1tpXSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaGlwLT5yc3JjW2ldLnN0YXJ0LAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNoaXAtPnJzcmNbaV0uZW5kKTsKIAkJCQllcnIgPSAtRU5PREVWOwogCQkJCWdvdG8gX19lcnJvcjsKIAkJCX0KQEAgLTExODQsMTAgKzExODIsNiBAQAogCX0gZWxzZSB7CiAJCXN0YXRpYyBjaGFyICpybmFtZXNbXSA9IHsKIAkJCSJTb3VuZCBDb250cm9sIiwgIlNvdW5kIFR4IERNQSIsICJTb3VuZCBSeCBETUEiIH07Ci0JCWlmIChucC0+bl9pbnRycyA8IDMpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF9fZXJyb3I7Ci0JCX0KIAkJZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsKIAkJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLAogCQkJCQkJICAgJmNoaXAtPnJzcmNbaV0pKSB7CkBAIC0xMjAxLDkgKzExOTUsMTAgQEAKIAkJCQkJICAgICAgIGNoaXAtPnJzcmNbaV0uc3RhcnQgKyAxLAogCQkJCQkgICAgICAgcm5hbWVzW2ldKSA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzbmQ6IGNhbid0IHJlcXVlc3QgcnNyYyAiCi0JCQkJICAgICAgICIgJWQgKCVzOiAweCUwOGx4OiUwOGx4KVxuIiwKLQkJCQkgICAgICAgaSwgcm5hbWVzW2ldLCBjaGlwLT5yc3JjW2ldLnN0YXJ0LAotCQkJCSAgICAgICBjaGlwLT5yc3JjW2ldLmVuZCk7CisJCQkJICAgICAgICIgJWQgKCVzOiAweCUwMTZsbHg6JTAxNmxseClcbiIsCisJCQkJICAgICAgIGksIHJuYW1lc1tpXSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaGlwLT5yc3JjW2ldLnN0YXJ0LAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNoaXAtPnJzcmNbaV0uZW5kKTsKIAkJCQllcnIgPSAtRU5PREVWOwogCQkJCWdvdG8gX19lcnJvcjsKIAkJCX0KQEAgLTEyMTgsMjggKzEyMTMsMzAgQEAKIAljaGlwLT5wbGF5YmFjay5kbWEgPSBpb3JlbWFwKHR4ZG1hX2FkZHIsIDB4MTAwKTsKIAljaGlwLT5jYXB0dXJlLmRtYSA9IGlvcmVtYXAocnhkbWFfYWRkciwgMHgxMDApOwogCWlmIChjaGlwLT5tb2RlbCA8PSBQTUFDX0JVUkdVTkRZKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShucC0+aW50cnNbMF0ubGluZSwgc25kX3BtYWNfY3RybF9pbnRyLCAwLAorCQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9wbWFjX2N0cmxfaW50ciwgMCwKIAkJCQkiUE1hYyIsICh2b2lkKiljaGlwKSkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAicG1hYzogdW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBucC0+aW50cnNbMF0ubGluZSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwbWFjOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsCisJCQkJICAgaXJxKTsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gX19lcnJvcjsKIAkJfQotCQljaGlwLT5pcnEgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJY2hpcC0+aXJxID0gaXJxOwogCX0KLQlpZiAocmVxdWVzdF9pcnEobnAtPmludHJzWzFdLmxpbmUsIHNuZF9wbWFjX3R4X2ludHIsIDAsCi0JCQkiUE1hYyBPdXRwdXQiLCAodm9pZCopY2hpcCkpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAicG1hYzogdW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBucC0+aW50cnNbMV0ubGluZSk7CisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDEpOworCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9wbWFjX3R4X2ludHIsIDAsICJQTWFjIE91dHB1dCIsICh2b2lkKiljaGlwKSl7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBtYWM6IHVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgaXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIF9fZXJyb3I7CiAJfQotCWNoaXAtPnR4X2lycSA9IG5wLT5pbnRyc1sxXS5saW5lOwotCWlmIChyZXF1ZXN0X2lycShucC0+aW50cnNbMl0ubGluZSwgc25kX3BtYWNfcnhfaW50ciwgMCwKLQkJCSJQTWFjIElucHV0IiwgKHZvaWQqKWNoaXApKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgInBtYWM6IHVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgbnAtPmludHJzWzJdLmxpbmUpOworCWNoaXAtPnR4X2lycSA9IGlycTsKKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMik7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX3BtYWNfcnhfaW50ciwgMCwgIlBNYWMgSW5wdXQiLCAodm9pZCopY2hpcCkpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicG1hYzogdW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBpcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gX19lcnJvcjsKIAl9Ci0JY2hpcC0+cnhfaXJxID0gbnAtPmludHJzWzJdLmxpbmU7CisJY2hpcC0+cnhfaXJxID0gaXJxOwogCiAJc25kX3BtYWNfc291bmRfZmVhdHVyZShjaGlwLCAxKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggNzBlNGViYy4uNjkyYzYxMSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC0xMTIxLDcgKzExMjEsNyBAQAogCURCRygiKEkpIEdQSU8gZGV2aWNlICVzIGZvdW5kLCBvZmZzZXQ6ICV4LCBhY3RpdmUgc3RhdGU6ICVkICFcbiIsCiAJICAgIGRldmljZSwgZ3AtPmFkZHIsIGdwLT5hY3RpdmVfc3RhdGUpOwogCi0JcmV0dXJuIChub2RlLT5uX2ludHJzID4gMCkgPyBub2RlLT5pbnRyc1swXS5saW5lIDogMDsKKwlyZXR1cm4gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CiB9CiAKIC8qIHJlc2V0IGF1ZGlvICovCkBAIC0xMjY0LDE2ICsxMjY0LDE2IEBACiAJCQkJICAgICZtaXgtPmxpbmVfbXV0ZSwgMSk7CiAJaXJxID0gdHVtYmxlcl9maW5kX2RldmljZSgiaGVhZHBob25lLWRldGVjdCIsCiAJCQkJICBOVUxMLCAmbWl4LT5ocF9kZXRlY3QsIDApOwotCWlmIChpcnEgPCAwKQorCWlmIChpcnEgPD0gTk9fSVJRKQogCQlpcnEgPSB0dW1ibGVyX2ZpbmRfZGV2aWNlKCJoZWFkcGhvbmUtZGV0ZWN0IiwKIAkJCQkJICBOVUxMLCAmbWl4LT5ocF9kZXRlY3QsIDEpOwotCWlmIChpcnEgPCAwKQorCWlmIChpcnEgPD0gTk9fSVJRKQogCQlpcnEgPSB0dW1ibGVyX2ZpbmRfZGV2aWNlKCJrZXl3ZXN0LWdwaW8xNSIsCiAJCQkJCSAgTlVMTCwgJm1peC0+aHBfZGV0ZWN0LCAxKTsKIAltaXgtPmhlYWRwaG9uZV9pcnEgPSBpcnE7CiAgCWlycSA9IHR1bWJsZXJfZmluZF9kZXZpY2UoImxpbmUtb3V0cHV0LWRldGVjdCIsCiAJCQkJICBOVUxMLCAmbWl4LT5saW5lX2RldGVjdCwgMCk7Ci0gCWlmIChpcnEgPCAwKQorIAlpZiAoaXJxIDw9IE5PX0lSUSkKIAkJaXJxID0gdHVtYmxlcl9maW5kX2RldmljZSgibGluZS1vdXRwdXQtZGV0ZWN0IiwKIAkJCQkJICBOVUxMLCAmbWl4LT5saW5lX2RldGVjdCwgMSk7CiAJbWl4LT5saW5lb3V0X2lycSA9IGlycTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvdW5kX2NvcmUuYyBiL3NvdW5kL3NvdW5kX2NvcmUuYwppbmRleCA2Zjg0OTcyLi42MmQ0ZDBjIDEwMDY0NAotLS0gYS9zb3VuZC9zb3VuZF9jb3JlLmMKKysrIGIvc291bmQvc291bmRfY29yZS5jCkBAIC0zNCw3ICszNCw2IEBACiAgKglsb2NraW5nIGF0IHNvbWUgcG9pbnQgaW4gMi4zLnguCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC00NCw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvc291bmQuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2RlZmluZSBTT1VORF9TVEVQIDE2CkBAIC0xNzIsOCArMTcwLDYgQEAKIAllbHNlCiAJCXNwcmludGYocy0+bmFtZSwgInNvdW5kLyVzJWQiLCBuYW1lLCByIC8gU09VTkRfU1RFUCk7CiAKLQlkZXZmc19ta19jZGV2KE1LREVWKFNPVU5EX01BSk9SLCBzLT51bml0X21pbm9yKSwKLQkJCVNfSUZDSFIgfCBtb2RlLCBzLT5uYW1lKTsKIAljbGFzc19kZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBOVUxMLCBNS0RFVihTT1VORF9NQUpPUiwgcy0+dW5pdF9taW5vciksCiAJCQkgICAgZGV2LCBzLT5uYW1lKzYpOwogCXJldHVybiByOwpAQCAtMTk3LDcgKzE5Myw2IEBACiAJcCA9IF9fc291bmRfcmVtb3ZlX3VuaXQobGlzdCwgdW5pdCk7CiAJc3Bpbl91bmxvY2soJnNvdW5kX2xvYWRlcl9sb2NrKTsKIAlpZiAocCkgewotCQlkZXZmc19yZW1vdmUocC0+bmFtZSk7CiAJCWNsYXNzX2RldmljZV9kZXN0cm95KHNvdW5kX2NsYXNzLCBNS0RFVihTT1VORF9NQUpPUiwgcC0+dW5pdF9taW5vcikpOwogCQlrZnJlZShwKTsKIAl9CkBAIC01NzAsNyArNTY1LDYgQEAKIAkvKiBXZSBoYXZlIG5vdGhpbmcgdG8gcmVhbGx5IGRvIGhlcmUgLSB3ZSBrbm93IHRoZSBsaXN0cyBtdXN0IGJlCiAJICAgZW1wdHkgKi8KIAl1bnJlZ2lzdGVyX2NocmRldihTT1VORF9NQUpPUiwgInNvdW5kIik7Ci0JZGV2ZnNfcmVtb3ZlKCJzb3VuZCIpOwogCWNsYXNzX2Rlc3Ryb3koc291bmRfY2xhc3MpOwogfQogCkBAIC01ODAsNyArNTc0LDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJzb3VuZGNvcmU6IHNvdW5kIGRldmljZSBhbHJlYWR5IGluIHVzZS5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlkZXZmc19ta19kaXIgKCJzb3VuZCIpOwogCXNvdW5kX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAic291bmQiKTsKIAlpZiAoSVNfRVJSKHNvdW5kX2NsYXNzKSkKIAkJcmV0dXJuIFBUUl9FUlIoc291bmRfY2xhc3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvYW1kNzkzMC5jIGIvc291bmQvc3BhcmMvYW1kNzkzMC5jCmluZGV4IGJhMWIyYTMuLjJiZDhlNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2FtZDc5MzAuYworKysgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogCWFtZDc5MzBfaWRsZShhbWQpOwogCiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgc25kX2FtZDc5MzBfaW50ZXJydXB0LAotCQkJU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsICJhbWQ3OTMwIiwgYW1kKSkgeworCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAiYW1kNzkzMCIsIGFtZCkpIHsKIAkJc25kX3ByaW50aygiYW1kNzkzMC0lZDogVW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLAogCQkJICAgZGV2LCBpcnEpOwogCQlzbmRfYW1kNzkzMF9mcmVlKGFtZCk7CkBAIC0xMDMzLDEwICsxMDMzLDEwIEBACiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQU1ENzkzMCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTdW4gQU1ENzkzMCIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCUwMmx4OjB4JTA4bHgsIGlycSAlZCIsCisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JTAybHg6MHglMDhMeCwgaXJxICVkIiwKIAkJY2FyZC0+c2hvcnRuYW1lLAogCQlycC0+ZmxhZ3MgJiAweGZmTCwKLQkJcnAtPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKXJwLT5zdGFydCwKIAkJaXJxKTsKIAogCWlmICgoZXJyID0gc25kX2FtZDc5MzBfY3JlYXRlKGNhcmQsIHJwLApkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvY3M0MjMxLmMgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwppbmRleCBkYTU0ZDA0Li45YTA2YzNiZCAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvY3M0MjMxLmMKKysrIGIvc291bmQvc3BhcmMvY3M0MjMxLmMKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjAwMiw3ICsyMDAxLDcgQEAKIAljaGlwLT5jX2RtYS5wcmVhbGxvY2F0ZSA9IHNidXNfZG1hX3ByZWFsbG9jYXRlOwogCiAJaWYgKHJlcXVlc3RfaXJxKHNkZXYtPmlycXNbMF0sIHNuZF9jczQyMzFfc2J1c19pbnRlcnJ1cHQsCi0JCQlTQV9TSElSUSwgImNzNDIzMSIsIGNoaXApKSB7CisJCQlJUlFGX1NIQVJFRCwgImNzNDIzMSIsIGNoaXApKSB7CiAJCXNuZF9wcmludGRkKCJjczQyMzEtJWQ6IFVuYWJsZSB0byBncmFiIFNCVVMgSVJRICVkXG4iLAogCQkJICAgIGRldiwgc2Rldi0+aXJxc1swXSk7CiAJCXNuZF9jczQyMzFfc2J1c19mcmVlKGNoaXApOwpAQCAtMjAzNywxMCArMjAzNiwxMCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglMDJseDoweCUwOGx4LCBpcnEgJWQiLAorCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCUwMmx4OjB4JTAxNkx4LCBpcnEgJWQiLAogCQljYXJkLT5zaG9ydG5hbWUsCiAJCXJwLT5mbGFncyAmIDB4ZmZMLAotCQlycC0+c3RhcnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcnAtPnN0YXJ0LAogCQlzZGV2LT5pcnFzWzBdKTsKIAogCWlmICgoZXJyID0gc25kX2NzNDIzMV9zYnVzX2NyZWF0ZShjYXJkLCBzZGV2LCBkZXYsICZjcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvZGJyaS5jIGIvc291bmQvc3BhcmMvZGJyaS5jCmluZGV4IDVlZWNkZDAuLmYzYWU2ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2RicmkuYworKysgYi9zb3VuZC9zcGFyYy9kYnJpLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqCiAgKiBJJ3ZlIHRyaWVkIHRvIHN0aWNrIHRvIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbmFtaW5nIGNvbnZlbnRpb25zOgogICogc25kXyoJQUxTQSBzdHVmZgotICogY3M0MjE1XyoJQ1M0MjE1IGNvZGVjIHNwZWNmaWMgc3R1ZmYKKyAqIGNzNDIxNV8qCUNTNDIxNSBjb2RlYyBzcGVjaWZpYyBzdHVmZgogICogZGJyaV8qCURCUkkgaGlnaC1sZXZlbCBzdHVmZgogICogb3RoZXIJREJSSSBsb3ctbGV2ZWwgc3R1ZmYKICAqLwpAQCAtMjU2OSw3ICsyNTY5LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JZXJyID0gcmVxdWVzdF9pcnEoZGJyaS0+aXJxLCBzbmRfZGJyaV9pbnRlcnJ1cHQsIFNBX1NISVJRLAorCWVyciA9IHJlcXVlc3RfaXJxKGRicmktPmlycSwgc25kX2RicmlfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgIkRCUkkgYXVkaW8iLCBkYnJpKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiREJSSTogQ2FuJ3QgZ2V0IGlycSAlZFxuIiwgZGJyaS0+aXJxKTsKQEAgLTI2NDUsOSArMjY0NSw5IEBACiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkRCUkkiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIERCUkkiKTsKIAlycCA9ICZzZGV2LT5yZXNvdXJjZVswXTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglMDJseDoweCUwOGx4LCBpcnEgJWQiLAorCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCUwMmx4OjB4JTAxNkx4LCBpcnEgJWQiLAogCQljYXJkLT5zaG9ydG5hbWUsCi0JCXJwLT5mbGFncyAmIDB4ZmZMLCBycC0+c3RhcnQsIGlycS5wcmkpOworCQlycC0+ZmxhZ3MgJiAweGZmTCwgKHVuc2lnbmVkIGxvbmcgbG9uZylycC0+c3RhcnQsIGlycS5wcmkpOwogCiAJaWYgKChlcnIgPSBzbmRfZGJyaV9jcmVhdGUoY2FyZCwgc2RldiwgJmlycSwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IDYyN2RlOTUuLmQzMmQ4M2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0zMDk2LDYgKzMwOTYsMzIgQEAKIH0KIAogLyoKKyAqIEMtTWVkaWEgQ00xMDYvQ00xMDYrIGhhdmUgZm91ciAxNi1iaXQgaW50ZXJuYWwgcmVnaXN0ZXJzIHRoYXQgYXJlIG5pY2VseQorICogZG9jdW1lbnRlZCBpbiB0aGUgZGV2aWNlJ3MgZGF0YSBzaGVldC4KKyAqLworc3RhdGljIGludCBzbmRfdXNiX2NtMTA2X3dyaXRlX2ludF9yZWcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IHJlZywgdTE2IHZhbHVlKQoreworCXU4IGJ1Zls0XTsKKwlidWZbMF0gPSAweDIwOworCWJ1ZlsxXSA9IHZhbHVlICYgMHhmZjsKKwlidWZbMl0gPSAodmFsdWUgPj4gOCkgJiAweGZmOworCWJ1ZlszXSA9IHJlZzsKKwlyZXR1cm4gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCisJCQkgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgICAwLCAwLCAmYnVmLCA0LCAxMDAwKTsKK30KKworc3RhdGljIGludCBzbmRfdXNiX2NtMTA2X2Jvb3RfcXVpcmsoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwkvKgorCSAqIEVuYWJsZSBsaW5lLW91dCBkcml2ZXIgbW9kZSwgc2V0IGhlYWRwaG9uZSBzb3VyY2UgdG8gZnJvbnQKKwkgKiBjaGFubmVscywgZW5hYmxlIHN0ZXJlbyBtaWMuCisJICovCisJcmV0dXJuIHNuZF91c2JfY20xMDZfd3JpdGVfaW50X3JlZyhkZXYsIDIsIDB4ODAwNCk7Cit9CisKKworLyoKICAqIFNldHVwIHF1aXJrcwogICovCiAjZGVmaW5lIEFVRElPUEhJTEVfU0VUCQkJMHgwMSAvKiBpZiBzZXQsIHBhcnNlIGRldmljZV9zZXR1cCAqLwpAQCAtMzM2NSw2ICszMzkxLDEyIEBACiAJCQlnb3RvIF9fZXJyX3ZhbDsKIAl9CiAKKwkvKiBDLU1lZGlhIENNMTA2IC8gVHVydGxlIEJlYWNoIEF1ZGlvIEFkdmFudGFnZSBSb2FkaWUgKi8KKwlpZiAoaWQgPT0gVVNCX0lEKDB4MTBmNSwgMHgwMjAwKSkgeworCQlpZiAoc25kX3VzYl9jbTEwNl9ib290X3F1aXJrKGRldikgPCAwKQorCQkJZ290byBfX2Vycl92YWw7CisJfQorCiAJLyoKIAkgKiBmb3VuZCBhIGNvbmZpZy4gIG5vdyByZWdpc3RlciB0byBBTFNBCiAJICovCg==